You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by hn...@apache.org on 2025/03/20 09:14:12 UTC

(myfaces-tobago) branch main updated (d5360f082e -> b5185df4b5)

This is an automated email from the ASF dual-hosted git repository.

hnoeth pushed a change to branch main
in repository https://gitbox.apache.org/repos/asf/myfaces-tobago.git


    from d5360f082e fix: spelling (#6182)
     new a47961f6a4 fix(dropdown): suggest
     new b5185df4b5 build(theme): rebuild

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../content/010-input/20-suggest/Suggest.test.js   |  96 ++---
 .../1020-suggest-quotMark/Suggest_QuotMark.test.js |  32 +-
 tobago-theme/src/main/scss/_tobago.scss            |  24 +-
 .../src/main/css/tobago.css                        |  61 ++--
 .../src/main/css/tobago.css.map                    |   2 +-
 .../src/main/css/tobago.min.css                    |   2 +-
 .../src/main/css/tobago.min.css.map                |   2 +-
 .../src/main/css/tobago.css                        |  61 ++--
 .../src/main/css/tobago.css.map                    |   2 +-
 .../src/main/css/tobago.min.css                    |   2 +-
 .../src/main/css/tobago.min.css.map                |   2 +-
 .../src/main/css/tobago.css                        |  61 ++--
 .../src/main/css/tobago.css.map                    |   2 +-
 .../src/main/css/tobago.min.css                    |   2 +-
 .../src/main/css/tobago.min.css.map                |   2 +-
 .../tobago-theme-speyside/src/main/css/tobago.css  |  87 +++--
 .../src/main/css/tobago.css.map                    |   2 +-
 .../src/main/css/tobago.min.css                    |   2 +-
 .../src/main/css/tobago.min.css.map                |   2 +-
 .../tobago-theme-standard/src/main/css/tobago.css  |  61 ++--
 .../src/main/css/tobago.css.map                    |   2 +-
 .../src/main/css/tobago.min.css                    |   2 +-
 .../src/main/css/tobago.min.css.map                |   2 +-
 .../tobago-theme-standard/src/main/js/tobago.js    |   8 +-
 .../src/main/js/tobago.js.map                      |   2 +-
 .../src/main/ts/tobago-css.ts                      |   2 +
 .../src/main/ts/tobago-dropdown-menu.ts            |   4 +
 .../tobago-theme-standard/src/main/ts/tobago-in.ts |  10 +-
 .../src/main/ts/tobago-suggest.ts                  | 390 +++++++++++++--------
 29 files changed, 574 insertions(+), 355 deletions(-)


(myfaces-tobago) 01/02: fix(dropdown): suggest

Posted by hn...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

hnoeth pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/myfaces-tobago.git

commit a47961f6a49e33b89265dedd27bc13602e9fea04
Author: Henning Noeth <hn...@apache.org>
AuthorDate: Fri Mar 14 12:04:36 2025 +0100

    fix(dropdown): suggest
    
    Refactor dropdown menu handling (scrolling/positioning). If the user scrolls, the dropdown menu should be closed. The dropdown menu is now scrollable if it is too big for the screen. The reference element must always be visible (important for filtering and tc:suggests).
    
    * Autocomplete replaced with own implementation
    * adjust tests
    
    Issue: TOBAGO-2400
---
 .../content/010-input/20-suggest/Suggest.test.js   |  96 ++---
 .../1020-suggest-quotMark/Suggest_QuotMark.test.js |  32 +-
 tobago-theme/src/main/scss/_tobago.scss            |  24 +-
 .../src/main/ts/tobago-css.ts                      |   2 +
 .../src/main/ts/tobago-dropdown-menu.ts            |   4 +
 .../tobago-theme-standard/src/main/ts/tobago-in.ts |  10 +-
 .../src/main/ts/tobago-suggest.ts                  | 390 +++++++++++++--------
 7 files changed, 341 insertions(+), 217 deletions(-)

diff --git a/tobago-example/tobago-example-demo/src/main/webapp/content/010-input/20-suggest/Suggest.test.js b/tobago-example/tobago-example-demo/src/main/webapp/content/010-input/20-suggest/Suggest.test.js
index d8c4f855bc..d7f048f3c5 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/content/010-input/20-suggest/Suggest.test.js
+++ b/tobago-example/tobago-example-demo/src/main/webapp/content/010-input/20-suggest/Suggest.test.js
@@ -20,14 +20,14 @@ import {JasmineTestTool} from "/tobago/test/tobago-test-tool.js";
 
 it("Basics: 'M'", function (done) {
   const inputFn = elementByIdFn("page:mainForm:inBasic::field");
-  const resultId = inputFn().getAttribute("aria-owns");
-  const resultListFn = querySelectorAllFn("#" + resultId + " .autocomplete-result");
+  const resultId = inputFn().getAttribute("aria-owns").replaceAll(":", "\\:");
+  const resultListFn = querySelectorAllFn("#" + resultId + " .dropdown-item");
 
   const test = new JasmineTestTool(done);
   test.setup(() => resultListFn().length !== 10,
-      () => inputFn().value = "", "focus", inputFn);
+      () => inputFn().value = "", "input", inputFn);
   test.do(() => inputFn().value = "M");
-  test.event("focus", inputFn, () => resultListFn().length === 10);
+  test.event("input", inputFn, () => resultListFn().length === 10);
   test.do(() => expect(resultListFn().length).toBe(10));
   test.do(() => expect(resultListFn()[0].textContent).toBe("Mercury"));
   test.do(() => expect(resultListFn()[1].textContent).toBe("Mars"));
@@ -45,14 +45,14 @@ it("Basics: 'M'", function (done) {
 
 it("Basics: 'Ma'", function (done) {
   const inputFn = elementByIdFn("page:mainForm:inBasic::field");
-  const resultId = inputFn().getAttribute("aria-owns");
-  const resultListFn = querySelectorAllFn("#" + resultId + " .autocomplete-result");
+  const resultId = inputFn().getAttribute("aria-owns").replaceAll(":", "\\:");
+  const resultListFn = querySelectorAllFn("#" + resultId + " .dropdown-item");
 
   const test = new JasmineTestTool(done);
   test.setup(() => resultListFn().length !== 4,
-      () => inputFn().value = "", "focus", inputFn);
+      () => inputFn().value = "", "input", inputFn);
   test.do(() => inputFn().value = "Ma");
-  test.event("focus", inputFn, () => resultListFn().length === 4);
+  test.event("input", inputFn, () => resultListFn().length === 4);
   test.do(() => expect(resultListFn().length).toBe(4));
   test.do(() => expect(resultListFn()[0].textContent).toBe("Mars"));
   test.do(() => expect(resultListFn()[1].textContent).toBe("Amalthea"));
@@ -64,14 +64,14 @@ it("Basics: 'Ma'", function (done) {
 
 it("Basics: 'Mar'", function (done) {
   const inputFn = elementByIdFn("page:mainForm:inBasic::field");
-  const resultId = inputFn().getAttribute("aria-owns");
-  const resultListFn = querySelectorAllFn("#" + resultId + " .autocomplete-result");
+  const resultId = inputFn().getAttribute("aria-owns").replaceAll(":", "\\:");
+  const resultListFn = querySelectorAllFn("#" + resultId + " .dropdown-item");
 
   const test = new JasmineTestTool(done);
   test.setup(() => resultListFn().length !== 1,
-      () => inputFn().value = "", "focus", inputFn);
+      () => inputFn().value = "", "input", inputFn);
   test.do(() => inputFn().value = "Mar");
-  test.event("focus", inputFn, () => resultListFn().length === 1);
+  test.event("input", inputFn, () => resultListFn().length === 1);
   test.do(() => expect(resultListFn().length).toBe(1));
   test.do(() => expect(resultListFn()[0].textContent).toBe("Mars"));
   test.event("blur", inputFn, () => resultListFn().length === 0);
@@ -80,14 +80,14 @@ it("Basics: 'Mar'", function (done) {
 
 it("Basics: 'Mars'", function (done) {
   const inputFn = elementByIdFn("page:mainForm:inBasic::field");
-  const resultId = inputFn().getAttribute("aria-owns");
-  const resultListFn = querySelectorAllFn("#" + resultId + " .autocomplete-result");
+  const resultId = inputFn().getAttribute("aria-owns").replaceAll(":", "\\:");
+  const resultListFn = querySelectorAllFn("#" + resultId + " .dropdown-item");
 
   const test = new JasmineTestTool(done);
   test.setup(() => resultListFn().length !== 1,
-      () => inputFn().value = "", "focus", inputFn);
+      () => inputFn().value = "", "input", inputFn);
   test.do(() => inputFn().value = "Mars");
-  test.event("focus", inputFn, () => resultListFn().length === 1);
+  test.event("input", inputFn, () => resultListFn().length === 1);
   test.do(() => expect(resultListFn().length).toBe(1));
   test.do(() => expect(resultListFn()[0].textContent).toBe("Mars"));
   test.event("blur", inputFn, () => resultListFn().length === 0);
@@ -96,15 +96,15 @@ it("Basics: 'Mars'", function (done) {
 
 it("Basics: Add 'eus' and click first entry.", function (done) {
   const inputFn = elementByIdFn("page:mainForm:inBasic::field");
-  const resultId = inputFn().getAttribute("aria-owns");
-  const resultListFn = querySelectorAllFn("#" + resultId + " .autocomplete-result");
-  const firstResult = querySelectorFn("#" + resultId + " .autocomplete-result[data-result-index='0']");
+  const resultId = inputFn().getAttribute("aria-owns").replaceAll(":", "\\:");
+  const resultListFn = querySelectorAllFn("#" + resultId + " .dropdown-item");
+  const firstResult = querySelectorFn("#" + resultId + " [data-result-index='0'] > .dropdown-item");
 
   const test = new JasmineTestTool(done);
   test.setup(() => resultListFn().length !== 3,
-      () => inputFn().value = "", "focus", inputFn);
+      () => inputFn().value = "", "input", inputFn);
   test.do(() => inputFn().value = "eus");
-  test.event("focus", inputFn, () => resultListFn().length === 3);
+  test.event("input", inputFn, () => resultListFn().length === 3);
   test.do(() => expect(resultListFn().length).toBe(3));
   test.do(() => expect(resultListFn()[0].textContent).toBe("Prometheus"));
   test.do(() => expect(resultListFn()[1].textContent).toBe("Epimetheus"));
@@ -116,28 +116,28 @@ it("Basics: Add 'eus' and click first entry.", function (done) {
 
 it("Minimum Characters: 'C'", function (done) {
   const inputFn = elementByIdFn("page:mainForm:minimumCharacters::field");
-  const resultId = inputFn().getAttribute("aria-owns");
-  const resultListFn = querySelectorAllFn("#" + resultId + " .autocomplete-result");
+  const resultId = inputFn().getAttribute("aria-owns").replaceAll(":", "\\:");
+  const resultListFn = querySelectorAllFn("#" + resultId + " .dropdown-item");
 
   const test = new JasmineTestTool(done);
   test.setup(() => resultListFn().length !== 0,
-      () => inputFn().value = "Ear", "focus", inputFn);
+      () => inputFn().value = "Ear", "input", inputFn);
   test.do(() => inputFn().value = "C");
-  test.event("focus", inputFn, () => resultListFn().length === 0);
+  test.event("input", inputFn, () => resultListFn().length === 0);
   test.do(() => expect(resultListFn().length).toBe(0));
   test.start();
 });
 
 it("Minimum Characters: 'Ca'", function (done) {
   const inputFn = elementByIdFn("page:mainForm:minimumCharacters::field");
-  const resultId = inputFn().getAttribute("aria-owns");
-  const resultListFn = querySelectorAllFn("#" + resultId + " .autocomplete-result");
+  const resultId = inputFn().getAttribute("aria-owns").replaceAll(":", "\\:");
+  const resultListFn = querySelectorAllFn("#" + resultId + " .dropdown-item");
 
   const test = new JasmineTestTool(done);
   test.setup(() => resultListFn().length !== 7,
-      () => inputFn().value = "Ear", "focus", inputFn);
+      () => inputFn().value = "Ear", "input", inputFn);
   test.do(() => inputFn().value = "Ca");
-  test.event("focus", inputFn, () => resultListFn().length === 7);
+  test.event("input", inputFn, () => resultListFn().length === 7);
   test.do(() => expect(resultListFn().length).toBe(7));
   test.do(() => expect(resultListFn()[0].textContent).toBe("Callisto"));
   test.do(() => expect(resultListFn()[1].textContent).toBe("Carme"));
@@ -152,12 +152,12 @@ it("Minimum Characters: 'Ca'", function (done) {
 
 it("Minimum Characters: Zero", function (done) {
   const inputFn = elementByIdFn("page:mainForm:minimumCharacters0::field");
-  const resultId = inputFn().getAttribute("aria-owns");
-  const resultListFn = querySelectorAllFn("#" + resultId + " .autocomplete-result");
+  const resultId = inputFn().getAttribute("aria-owns").replaceAll(":", "\\:");
+  const resultListFn = querySelectorAllFn("#" + resultId + " .dropdown-item");
 
   const test = new JasmineTestTool(done);
   test.setup(() => resultListFn().length === 0, () => inputFn().value = "", "blur", inputFn);
-  test.event("focus", inputFn, () => resultListFn().length > 0);
+  test.event("input", inputFn, () => resultListFn().length > 0);
   test.do(() => expect(resultListFn().length).toBeGreaterThan(0));
   test.event("blur", inputFn, () => resultListFn().length === 0);
   test.start();
@@ -165,14 +165,14 @@ it("Minimum Characters: Zero", function (done) {
 
 it("Client side: 'Ju'", function (done) {
   const inputFn = elementByIdFn("page:mainForm:inClient::field");
-  const resultId = inputFn().getAttribute("aria-owns");
-  const resultListFn = querySelectorAllFn("#" + resultId + " .autocomplete-result");
+  const resultId = inputFn().getAttribute("aria-owns").replaceAll(":", "\\:");
+  const resultListFn = querySelectorAllFn("#" + resultId + " .dropdown-item");
 
   const test = new JasmineTestTool(done);
   test.setup(() => resultListFn().length !== 2,
-      () => inputFn().value = "", "focus", inputFn);
+      () => inputFn().value = "", "input", inputFn);
   test.do(() => inputFn().value = "Ju");
-  test.event("focus", inputFn, () => resultListFn().length === 2);
+  test.event("input", inputFn, () => resultListFn().length === 2);
   test.do(() => expect(resultListFn().length).toBe(2));
   test.do(() => expect(resultListFn()[0].textContent).toBe("Jupiter"));
   test.do(() => expect(resultListFn()[1].textContent).toBe("Juliet"));
@@ -182,14 +182,14 @@ it("Client side: 'Ju'", function (done) {
 
 it("Client side - Filter All: 'me'", function (done) {
   const inputFn = elementByIdFn("page:mainForm:inClientFilterAll::field");
-  const resultId = inputFn().getAttribute("aria-owns");
-  const resultListFn = querySelectorAllFn("#" + resultId + " .autocomplete-result");
+  const resultId = inputFn().getAttribute("aria-owns").replaceAll(":", "\\:");
+  const resultListFn = querySelectorAllFn("#" + resultId + " .dropdown-item");
 
   const test = new JasmineTestTool(done);
   test.setup(() => resultListFn().length !== 88,
-      () => inputFn().value = "", "focus", inputFn);
+      () => inputFn().value = "", "input", inputFn);
   test.do(() => inputFn().value = "me");
-  test.event("focus", inputFn, () => resultListFn().length === 88);
+  test.event("input", inputFn, () => resultListFn().length === 88);
   test.do(() => expect(resultListFn().length).toBe(88));
   test.do(() => expect(resultListFn()[0].textContent).toBe("Sun"));
   test.do(() => expect(resultListFn()[1].textContent).toBe("Mercury"));
@@ -285,14 +285,14 @@ it("Client side - Filter All: 'me'", function (done) {
 
 it("Client side - Filter Prefix: 'me'", function (done) {
   const inputFn = elementByIdFn("page:mainForm:inClientFilterPrefix::field");
-  const resultId = inputFn().getAttribute("aria-owns");
-  const resultListFn = querySelectorAllFn("#" + resultId + " .autocomplete-result");
+  const resultId = inputFn().getAttribute("aria-owns").replaceAll(":", "\\:");
+  const resultListFn = querySelectorAllFn("#" + resultId + " .dropdown-item");
 
   const test = new JasmineTestTool(done);
   test.setup(() => resultListFn().length !== 3,
-      () => inputFn().value = "", "focus", inputFn);
+      () => inputFn().value = "", "input", inputFn);
   test.do(() => inputFn().value = "me");
-  test.event("focus", inputFn, () => resultListFn().length === 3);
+  test.event("input", inputFn, () => resultListFn().length === 3);
   test.do(() => expect(resultListFn().length).toBe(3));
   test.do(() => expect(resultListFn()[0].textContent).toBe("Mercury"));
   test.do(() => expect(resultListFn()[1].textContent).toBe("Metis"));
@@ -303,14 +303,14 @@ it("Client side - Filter Prefix: 'me'", function (done) {
 
 it("Client side - Filter Contains: 'me'", function (done) {
   const inputFn = elementByIdFn("page:mainForm:inClientFilterContains::field");
-  const resultId = inputFn().getAttribute("aria-owns");
-  const resultListFn = querySelectorAllFn("#" + resultId + " .autocomplete-result");
+  const resultId = inputFn().getAttribute("aria-owns").replaceAll(":", "\\:");
+  const resultListFn = querySelectorAllFn("#" + resultId + " .dropdown-item");
 
   const test = new JasmineTestTool(done);
   test.setup(() => resultListFn().length !== 8,
-      () => inputFn().value = "", "focus", inputFn);
+      () => inputFn().value = "", "input", inputFn);
   test.do(() => inputFn().value = "me");
-  test.event("focus", inputFn, () => resultListFn().length === 8);
+  test.event("input", inputFn, () => resultListFn().length === 8);
   test.do(() => expect(resultListFn().length).toBe(8));
   test.do(() => expect(resultListFn()[0].textContent).toBe("Mercury"));
   test.do(() => expect(resultListFn()[1].textContent).toBe("Metis"));
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/1020-suggest-quotMark/Suggest_QuotMark.test.js b/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/1020-suggest-quotMark/Suggest_QuotMark.test.js
index 050ee8f56a..985541e614 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/1020-suggest-quotMark/Suggest_QuotMark.test.js
+++ b/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/1020-suggest-quotMark/Suggest_QuotMark.test.js
@@ -20,14 +20,14 @@ import {JasmineTestTool} from "/tobago/test/tobago-test-tool.js";
 
 it("Basics: 'M'", function (done) {
   const inputFn = elementByIdFn("page:mainForm:input::field");
-  const resultId = inputFn().getAttribute("aria-owns");
-  const resultListFn = querySelectorAllFn("#" + resultId + " .autocomplete-result");
+  const resultId = inputFn().getAttribute("aria-owns").replaceAll(":", "\\:");
+  const resultListFn = querySelectorAllFn("#" + resultId + " .dropdown-item");
 
   const test = new JasmineTestTool(done);
   test.setup(() => resultListFn().length !== 3,
-      () => inputFn().value = "", "focus", inputFn);
+      () => inputFn().value = "", "input", inputFn);
   test.do(() => inputFn().value = "M");
-  test.event("focus", inputFn, () => resultListFn().length === 3);
+  test.event("input", inputFn, () => resultListFn().length === 3);
   test.do(() => expect(resultListFn().length).toBe(3));
   test.do(() => expect(resultListFn()[0].textContent).toBe("Mercury"));
   test.do(() => expect(resultListFn()[1].textContent).toBe("Mars"));
@@ -38,14 +38,14 @@ it("Basics: 'M'", function (done) {
 
 it("Basics: 'Ma'", function (done) {
   const inputFn = elementByIdFn("page:mainForm:input::field");
-  const resultId = inputFn().getAttribute("aria-owns");
-  const resultListFn = querySelectorAllFn("#" + resultId + " .autocomplete-result");
+  const resultId = inputFn().getAttribute("aria-owns").replaceAll(":", "\\:");
+  const resultListFn = querySelectorAllFn("#" + resultId + " .dropdown-item");
 
   const test = new JasmineTestTool(done);
   test.setup(() => resultListFn().length !== 2,
-      () => inputFn().value = "", "focus", inputFn);
+      () => inputFn().value = "", "input", inputFn);
   test.do(() => inputFn().value = "Ma");
-  test.event("focus", inputFn, () => resultListFn().length === 2);
+  test.event("input", inputFn, () => resultListFn().length === 2);
   test.do(() => expect(resultListFn().length).toBe(2));
   test.do(() => expect(resultListFn()[0].textContent).toBe("Mars"));
   test.do(() => expect(resultListFn()[1].textContent).toBe("Quotation\"Mark"));
@@ -55,14 +55,14 @@ it("Basics: 'Ma'", function (done) {
 
 it("Basics: 'Mar'", function (done) {
   const inputFn = elementByIdFn("page:mainForm:input::field");
-  const resultId = inputFn().getAttribute("aria-owns");
-  const resultListFn = querySelectorAllFn("#" + resultId + " .autocomplete-result");
+  const resultId = inputFn().getAttribute("aria-owns").replaceAll(":", "\\:");
+  const resultListFn = querySelectorAllFn("#" + resultId + " .dropdown-item");
 
   const test = new JasmineTestTool(done);
   test.setup(() => resultListFn().length !== 2,
-      () => inputFn().value = "", "focus", inputFn);
+      () => inputFn().value = "", "input", inputFn);
   test.do(() => inputFn().value = "Mar");
-  test.event("focus", inputFn, () => resultListFn().length === 2);
+  test.event("input", inputFn, () => resultListFn().length === 2);
   test.do(() => expect(resultListFn().length).toBe(2));
   test.do(() => expect(resultListFn()[0].textContent).toBe("Mars"));
   test.do(() => expect(resultListFn()[1].textContent).toBe("Quotation\"Mark"));
@@ -72,14 +72,14 @@ it("Basics: 'Mar'", function (done) {
 
 it("Basics: 'Mars'", function (done) {
   const inputFn = elementByIdFn("page:mainForm:input::field");
-  const resultId = inputFn().getAttribute("aria-owns");
-  const resultListFn = querySelectorAllFn("#" + resultId + " .autocomplete-result");
+  const resultId = inputFn().getAttribute("aria-owns").replaceAll(":", "\\:");
+  const resultListFn = querySelectorAllFn("#" + resultId + " .dropdown-item");
 
   const test = new JasmineTestTool(done);
   test.setup(() => resultListFn().length !== 1,
-      () => inputFn().value = "", "focus", inputFn);
+      () => inputFn().value = "", "input", inputFn);
   test.do(() => inputFn().value = "Mars");
-  test.event("focus", inputFn, () => resultListFn().length === 1);
+  test.event("input", inputFn, () => resultListFn().length === 1);
   test.do(() => expect(resultListFn().length).toBe(1));
   test.do(() => expect(resultListFn()[0].textContent).toBe("Mars"));
   test.event("blur", inputFn, () => resultListFn().length === 0);
diff --git a/tobago-theme/src/main/scss/_tobago.scss b/tobago-theme/src/main/scss/_tobago.scss
index 0450d775d1..52c508853f 100644
--- a/tobago-theme/src/main/scss/_tobago.scss
+++ b/tobago-theme/src/main/scss/_tobago.scss
@@ -385,6 +385,12 @@ @mixin selectListBorderColorShadow($name, $color) {
   }
 }
 
+@mixin suggestDropdownMenu() {
+  > .tobago-dropdown-menu {
+    @include tobagoDropdownMenuValues();
+  }
+}
+
 @mixin tobagoDropdownMenuValues() { // use this mixin inside every .tobago-dropdown-menu class
   /* Use .tobago-dropdown-menu instead of .dropdown-menu to prevent Bootstrap from creating a dropdown instance.
      This leads to javascript error if arrow up/down is pressed. */
@@ -808,7 +814,6 @@ tobago-image {
   }
 }
 
-/* in ----------------------------------------------------------- */
 tobago-in {
   display: block;
 
@@ -840,16 +845,22 @@ tobago-in {
     }
   }
 
-  &.autocomplete[data-loading=true] .autocomplete-pseudo-container {
+  .spinner {
+    display: none;
     position: absolute;
 
+    &.tobago-show {
+      display: block;
+    }
+
     &:after {
       content: "";
       border: 3px solid rgba(0, 0, 0, .12);
       border-right-color: rgba(0, 0, 0, .48);
       border-radius: 100%;
-      width: 20px;
-      height: 20px;
+      width: 100%;
+      height: 100%;
+      top: 50%;
       position: absolute;
       z-index: 5;
       transform: translateY(-50%);
@@ -857,8 +868,8 @@ tobago-in {
     }
   }
 
-  .autocomplete-result-list {
-    cursor: pointer;
+  .tobago-dropdown-menu-anchor {
+    @include suggestDropdownMenu();
   }
 
   tobago-suggest {
@@ -1126,6 +1137,7 @@ tobago-page {
   .tobago-page-menuStore {
     @include buttonDropdownMenu();
     @include selectListOptions();
+    @include suggestDropdownMenu();
 
     position: fixed;
     top: 0;
diff --git a/tobago-theme/tobago-theme-standard/src/main/ts/tobago-css.ts b/tobago-theme/tobago-theme-standard/src/main/ts/tobago-css.ts
index 2092d4779b..caef78b3dc 100644
--- a/tobago-theme/tobago-theme-standard/src/main/ts/tobago-css.ts
+++ b/tobago-theme/tobago-theme-standard/src/main/ts/tobago-css.ts
@@ -38,6 +38,7 @@ export enum Css {
   POSITION_FIXED = "position-fixed",
   POSITION_RELATIVE = "position-relative",
   SHOW = "show",
+  SPINNER = "spinner",
   START_0 = "start-0",
   START_50 = "start-50",
   TABLE_ACTIVE = "table-active",
@@ -52,6 +53,7 @@ export enum Css {
   TOBAGO_DISABLED = "tobago-disabled",
   TOBAGO_DROP_ZONE = "tobago-drop-zone",
   TOBAGO_DROPDOWN_MENU = "tobago-dropdown-menu",
+  TOBAGO_DROPDOWN_MENU_ANCHOR = "tobago-dropdown-menu-anchor",
   TOBAGO_DROPDOWN_SUBMENU = "tobago-dropdown-submenu",
   TOBAGO_EXPANDED = "tobago-expanded",
   TOBAGO_FOCUS = "tobago-focus",
diff --git a/tobago-theme/tobago-theme-standard/src/main/ts/tobago-dropdown-menu.ts b/tobago-theme/tobago-theme-standard/src/main/ts/tobago-dropdown-menu.ts
index 6724c24c20..c2c7a28097 100644
--- a/tobago-theme/tobago-theme-standard/src/main/ts/tobago-dropdown-menu.ts
+++ b/tobago-theme/tobago-theme-standard/src/main/ts/tobago-dropdown-menu.ts
@@ -212,4 +212,8 @@ export class DropdownMenu {
     const root = document.getRootNode() as ShadowRoot | Document;
     return root.querySelector("tobago-footer.fixed-bottom");
   }
+
+  get visible(): boolean {
+    return this.dropdownMenuElement.classList.contains(Css.SHOW);
+  }
 }
diff --git a/tobago-theme/tobago-theme-standard/src/main/ts/tobago-in.ts b/tobago-theme/tobago-theme-standard/src/main/ts/tobago-in.ts
index 0e3095d333..98e7c70871 100644
--- a/tobago-theme/tobago-theme-standard/src/main/ts/tobago-in.ts
+++ b/tobago-theme/tobago-theme-standard/src/main/ts/tobago-in.ts
@@ -19,6 +19,8 @@ import {Focus} from "./tobago-focus";
 import {Suggest} from "./tobago-suggest";
 
 export class In extends HTMLElement {
+  private suggest: Suggest;
+
   constructor() {
     super();
   }
@@ -26,11 +28,15 @@ export class In extends HTMLElement {
   connectedCallback(): void {
     this.input.addEventListener("focus", Focus.setLastFocusId);
     if (this.querySelector("tobago-suggest")) {
-      const suggest = new Suggest(this);
-      suggest.init();
+      this.suggest = new Suggest(this);
+      this.suggest.init();
     }
   }
 
+  disconnectedCallback(): void {
+    this.suggest?.disconnect();
+  }
+
   get input(): HTMLInputElement {
     const rootNode = this.getRootNode() as ShadowRoot | Document;
     return rootNode.getElementById(this.id + "::field") as HTMLInputElement;
diff --git a/tobago-theme/tobago-theme-standard/src/main/ts/tobago-suggest.ts b/tobago-theme/tobago-theme-standard/src/main/ts/tobago-suggest.ts
index bd0eea9552..e682f4b961 100644
--- a/tobago-theme/tobago-theme-standard/src/main/ts/tobago-suggest.ts
+++ b/tobago-theme/tobago-theme-standard/src/main/ts/tobago-suggest.ts
@@ -15,221 +15,321 @@
  * limitations under the License.
  */
 
-import Autocomplete from "@trevoreyre/autocomplete-js";
 import {SuggestFilter} from "./tobago-suggest-filter";
-import {MenuStore} from "./tobago-menu-store";
 import {Css} from "./tobago-css";
+import {DropdownMenu, DropdownMenuAlignment} from "./tobago-dropdown-menu";
+import {Key} from "./tobago-key";
+import {ClientBehaviors} from "./tobago-client-behaviors";
 
 export class Suggest {
-
-  autocomplete: Autocomplete;
-  tobagoIn: HTMLElement;
-  resolve: any;
+  private tobagoIn: HTMLElement;
+  private dropdownMenu: DropdownMenu;
+  private timeout: number;
 
   constructor(tobagoIn: HTMLElement) {
     this.tobagoIn = tobagoIn;
   }
 
   public init(): void {
-    if (!this.suggest) {
+    if (!this.tobagoSuggest) {
       console.warn("[tobago-suggest] could not find tobago-suggest");
       return;
     }
+    this.tobagoSuggest.insertAdjacentHTML("beforebegin", `<div class="${Css.SPINNER}"/>`);
+    this.tobagoSuggest.insertAdjacentHTML("beforebegin", `<div class="${Css.TOBAGO_DROPDOWN_MENU_ANCHOR}"}">
+    <ul id="${this.tobagoSuggest.id + "::dropdownMenu"}" class="${Css.TOBAGO_DROPDOWN_MENU}"
+    name="${this.tobagoSuggest.id}" role="listbox"/></div>`);
+
+    this.dropdownMenu = new DropdownMenu(this.dropdownMenuElement, this.inputField, this.tobagoIn, this.localMenu,
+        DropdownMenuAlignment.centerFullWidth);
+
+    this.inputField.role = "combobox";
+    this.inputField.autocomplete = "off";
+    this.inputField.autocapitalize = "off";
+    this.inputField.spellcheck = false;
+    this.inputField.ariaAutoComplete = "list";
+    this.inputField.ariaHasPopup = "listbox";
+    this.inputField.setAttribute("aria-owns", this.dropdownMenuElement.id);
+
+    this.tobagoIn.addEventListener(ClientBehaviors.DROPDOWN_HIDDEN, this.deleteResults.bind(this));
+    this.inputField.addEventListener("input", this.inputEvent.bind(this));
+    this.inputField.addEventListener("keydown", this.keydownEvent.bind(this));
+    this.dropdownMenuElement.addEventListener("keydown", this.keydownEvent.bind(this));
+
+    this.inputField.addEventListener("blur", this.blurEvent.bind(this));
+    this.dropdownMenuElement.addEventListener("blur", this.blurEvent.bind(this));
+  }
+
+  /**
+   * Call this in the disconnectedCallback() method.
+   */
+  public disconnect(): void {
+    this.dropdownMenu.disconnect();
+  }
 
-    this.registerAjaxListener();
-    this.base.classList.add(Css.AUTOCOMPLETE);
-    this.suggestInput.classList.add(Css.AUTOCOMPLETE_INPUT);
+  private blurEvent(event: FocusEvent): void {
+    const element = (event.relatedTarget as Element);
+    if (!this.isPartOfSuggest(element)) {
+      this.dropdownMenu.hide();
+    }
+  }
 
-    if (this.isInputGroup && this.suggestInput.previousElementSibling === null) {
-      this.suggestInput.insertAdjacentHTML("afterend", "<div class=\"autocomplete-pseudo-container\"></div>");
+  private isPartOfSuggest(element: Element): boolean {
+    if (element) {
+      if (this.inputField.id === element.id || this.tobagoSuggest.id === element.getAttribute("name")) {
+        return true;
+      } else {
+        return element.parentElement ? this.isPartOfSuggest(element.parentElement) : false;
+      }
     } else {
-      this.suggestInput.insertAdjacentHTML("beforebegin", "<div class=\"autocomplete-pseudo-container\"></div>");
+      return false;
     }
-    this.suggestInput.insertAdjacentHTML("afterend", "<ul class=\"autocomplete-result-list\"></ul>");
+  }
 
-    const options = {
-      search: (input: string) => {
-        console.debug("[tobago-suggest] input = '%s'", input);
-        if (input.length < this.minChars) {
-          return [];
+  private keydownEvent(event: KeyboardEvent): void {
+    switch (event.key) {
+      case Key.ARROW_DOWN:
+        this.focusNextDropdownItem(event);
+        break;
+      case Key.ARROW_UP:
+        this.focusPreviousDropdownItem(event);
+        break;
+      case Key.TAB: {
+        if (event.shiftKey) {
+          this.focusPreviousDropdownItem(event);
+        } else {
+          this.focusNextDropdownItem(event);
         }
-        this.hiddenInput.value = input.toLowerCase();
-
-        this.positioningSpinner();
-
-        return new Promise(resolve => {
-
-          if (this.update) {
-            this.resolve = resolve;
-            const suggestId = this.suggest.id;
-            faces.ajax.request(suggestId, null, {
-              params: {
-                "jakarta.faces.behavior.event": "suggest"
-              },
-              execute: suggestId,
-              render: suggestId
-            });
-          } else {
-            switch (this.filter) {
-              case SuggestFilter.all:
-                return resolve(this.filterAll());
-              case SuggestFilter.prefix:
-                return resolve(this.filterPrefix());
-              default:
-                return resolve(this.filterContains());
-            }
-          }
-        });
-      },
-      onUpdate: (results, selectedIndex) => {
-        this.positioningResultList();
-        this.setResultListMaxHeight();
-      },
-      debounceTime: this.delay
-    };
-
-    new Autocomplete(this.base, options);
-    if (!this.localMenu) {
-      MenuStore.appendChild(this.resultList);
+        break;
+      }
+      case Key.ESCAPE:
+        this.dropdownMenu.hide();
+        this.inputField.focus();
+        break;
+      default:
+        break;
     }
   }
 
-  private registerAjaxListener(): void {
-    faces.ajax.addOnEvent(this.resolvePromise.bind(this));
+  private focusNextDropdownItem(event: KeyboardEvent): void {
+    if (this.dropdownMenu.visible) {
+      event.preventDefault(); //prevent scrolling if dropdown menu has a scrollbar
+      if (this.inputField === this.activeElement) {
+        this.dropdownItems.item(0).focus();
+      } else {
+        for (let i = 0; i < this.dropdownItems.length; i++) {
+          if (this.dropdownItems.item(i) === this.activeElement) {
+            const nextItemIndex = ++i;
+            if (nextItemIndex >= this.dropdownItems.length) {
+              this.dropdownItems.item(0).focus();
+            } else {
+              this.dropdownItems.item(nextItemIndex).focus();
+            }
+            break;
+          }
+        }
+      }
+    }
   }
 
-  private resolvePromise(event: EventData): void {
-    if (event.source === this.suggest && event.status === "success") {
-      return this.resolve(this.filterAll());
+  private focusPreviousDropdownItem(event: KeyboardEvent): void {
+    if (this.dropdownMenu.visible) {
+      event.preventDefault(); //prevent scrolling if dropdown menu has a scrollbar
+      if (this.inputField === this.activeElement) {
+        this.dropdownItems.item(this.dropdownItems.length - 1).focus();
+      } else {
+        for (let i = 0; i < this.dropdownItems.length; i++) {
+          if (this.dropdownItems.item(i) === this.activeElement) {
+            const previousItemIndex = --i;
+            if (previousItemIndex < 0) {
+              this.dropdownItems.item(this.dropdownItems.length - 1).focus();
+            } else {
+              this.dropdownItems.item(previousItemIndex).focus();
+            }
+            break;
+          }
+        }
+      }
     }
   }
 
-  private filterAll(): string[] {
-    return this.items;
+  private inputEvent(event: InputEvent): void {
+    window.clearTimeout(this.timeout);
+
+    const inputElement: HTMLInputElement = event.currentTarget as HTMLInputElement;
+    const input = inputElement.value;
+
+    if (input.length >= this.minChars) {
+      this.hiddenInput.value = input.toLowerCase();
+      this.showSpinner();
+
+      if (this.update) {
+        this.timeout = window.setTimeout(() => {
+          const suggestId = this.tobagoSuggest.id;
+          faces.ajax.request(suggestId, null, {
+            params: {
+              "jakarta.faces.behavior.event": "suggest"
+            },
+            execute: suggestId,
+            render: suggestId,
+            onevent: this.ajaxEvent.bind(this),
+          });
+        }, this.delay);
+      } else {
+        switch (this.filter) {
+          case SuggestFilter.all:
+            this.renderResults(this.items);
+            break;
+          case SuggestFilter.prefix:
+            this.renderResults(this.items.filter(item => item.toLowerCase().startsWith(this.hiddenInput.value)));
+            break;
+          case SuggestFilter.contains:
+          default:
+            this.renderResults(this.items.filter(item => item.toLowerCase().indexOf(this.hiddenInput.value) > -1));
+            break;
+        }
+      }
+    } else {
+      this.dropdownMenu.hide();
+    }
   }
 
-  private filterPrefix(): string[] {
-    return this.items.filter(item => {
-      return item.toLowerCase().startsWith(this.hiddenInput.value);
-    });
+  private showSpinner(): void {
+    const rect = this.inputField.getBoundingClientRect();
+    const cStyle = getComputedStyle(this.inputField);
+    const top = window.scrollY + rect.top;
+    const right = window.scrollX + rect.right;
+    const bottom = window.scrollY + rect.bottom;
+    const innerBorderTop = top + parseFloat(cStyle.borderTopWidth) + parseFloat(cStyle.paddingTop);
+    const innerBorderRight = right - parseFloat(cStyle.borderRight) - parseFloat(cStyle.paddingRight);
+    const innerBorderBottom = bottom - parseFloat(cStyle.borderBottom) - parseFloat(cStyle.paddingBottom);
+    const size = innerBorderBottom - innerBorderTop;
+    this.spinner.style.width = size + "px";
+    this.spinner.style.height = size + "px";
+    this.spinner.style.top = innerBorderTop + "px";
+    this.spinner.style.left = (innerBorderRight - size) + "px";
+    this.spinner.classList.add(Css.TOBAGO_SHOW);
   }
 
-  private filterContains(): string[] {
-    return this.items.filter(item => {
-      return item.toLowerCase().indexOf(this.hiddenInput.value) > -1;
-    });
+  private hideSpinner(): void {
+    this.spinner.classList.remove(Css.TOBAGO_SHOW);
   }
 
-  private positioningSpinner(): void {
-    const baseRect = this.base.getBoundingClientRect();
-    const suggestInputRect = this.suggestInput.getBoundingClientRect();
-    const suggestInputStyle = getComputedStyle(this.suggestInput);
-    const pseudoContainer = this.pseudoContainer;
-    pseudoContainer.style.left = `${suggestInputRect.x - baseRect.x + suggestInputRect.width
-    - parseFloat(getComputedStyle(pseudoContainer, ":after").width)
-    - parseFloat(suggestInputStyle.marginRight)
-    - parseFloat(suggestInputStyle.borderRight)
-    - parseFloat(suggestInputStyle.paddingRight)}px`;
-    pseudoContainer.style.top = `${suggestInputRect.y - baseRect.y + (suggestInputRect.height / 2)}px`;
+  private ajaxEvent(event: EventData): void {
+    if (event.status === "success") {
+      this.renderResults(this.items);
+    }
   }
 
-  private positioningResultList(): void {
-    const space = 2;
-
-    if (this.localMenu) {
-      const parentRect = this.suggestInput.parentElement.getBoundingClientRect();
-      const suggestInputRect = this.suggestInput.getBoundingClientRect();
-      this.resultList.style.marginLeft = `${suggestInputRect.x - parentRect.x}px`;
-      this.resultList.style.maxWidth = `${suggestInputRect.width}px`;
-      this.resultList.style.marginTop = `${space}px`;
-      this.resultList.style.marginBottom = `${space}px`;
-    } else {
-      const suggestInputRect = this.suggestInput.getBoundingClientRect();
-      this.resultList.style.minWidth = `${suggestInputRect.width}px`;
-      this.resultList.style.left = `${suggestInputRect.left}px`;
-      if (this.resultListPosition === "below") {
-        this.resultList.style.marginTop =
-            `${window.scrollY + suggestInputRect.top + suggestInputRect.height + space}px`;
-        this.resultList.style.marginBottom = null;
-      } else if (this.resultListPosition === "above") {
-        this.resultList.style.marginTop = null;
-        this.resultList.style.marginBottom = `${-(window.scrollY + suggestInputRect.top - space)}px`;
+  private renderResults(items: string[]): void {
+    if (items.length > 0) {
+      const dropdownItems: HTMLLIElement[] = [];
+      for (let i = 0; i < items.length; i++) {
+        const li = document.createElement("li");
+        li.setAttribute("data-result-index", i.toString());
+        li.setAttribute("role", "option");
+        const button = document.createElement("button");
+        button.type = "button";
+        button.classList.add(Css.DROPDOWN_ITEM);
+        button.textContent = items[i];
+        button.addEventListener("click", this.selectDropdownItem.bind(this));
+        li.appendChild(button);
+        dropdownItems.push(li);
+      }
+      this.dropdownMenuElement.replaceChildren(...dropdownItems);
+      this.hideSpinner();
+      this.dropdownMenu.show();
+
+      if (this.maxItems > 0) {
+        // do this after this.dropdownMenu.show(); to get the correct itemHeight
+        const itemHeight = this.dropdownMenuElement.querySelector("li").offsetHeight;
+        const dropdownMenuElementStyle = getComputedStyle(this.dropdownMenuElement);
+        const paddingTop = parseFloat(dropdownMenuElementStyle.paddingTop);
+        const paddingBottom = parseFloat(dropdownMenuElementStyle.paddingBottom);
+        const itemBasedMaxHeight = paddingTop + (this.maxItems * itemHeight) + paddingBottom;
+        const bodyBasedMaxHeight = parseFloat(this.dropdownMenuElement.style.maxHeight);
+
+        if (itemBasedMaxHeight < bodyBasedMaxHeight) {
+          this.dropdownMenuElement.style.maxHeight = itemBasedMaxHeight + "px";
+        }
       }
+    } else {
+      this.hideSpinner();
+      this.dropdownMenu.hide();
     }
   }
 
-  private setResultListMaxHeight(): void {
-    const resultListEntry = this.resultList.querySelector(".autocomplete-result");
-    if (this.maxItems && resultListEntry) {
-      const resultListStyle = getComputedStyle(this.resultList);
-      this.resultList.style.maxHeight = `${parseFloat(resultListStyle.borderTop)
-      + parseFloat(resultListStyle.paddingTop)
-      + (this.maxItems * parseFloat(getComputedStyle(resultListEntry).height))
-      + parseFloat(resultListStyle.paddingBottom)
-      + parseFloat(resultListStyle.borderBottom)}px`;
-    }
+  private deleteResults(): void {
+    this.dropdownMenuElement.innerHTML = null;
   }
 
-  private get base(): HTMLElement {
-    return this.tobagoIn;
+  private selectDropdownItem(event: MouseEvent): void {
+    const button: HTMLButtonElement = event.currentTarget as HTMLButtonElement;
+    this.inputField.value = button.textContent;
+    this.dropdownMenu.hide();
+    this.inputField.focus();
   }
 
-  private get pseudoContainer(): HTMLDivElement {
-    return this.base.querySelector(".autocomplete-pseudo-container");
+  private get activeElement(): Element {
+    const root = this.tobagoIn.getRootNode() as ShadowRoot | Document;
+    return root.activeElement;
   }
 
-  private get suggestInput(): HTMLInputElement {
-    const root = this.base.getRootNode() as ShadowRoot | Document;
-    return root.getElementById(this.suggest.getAttribute("for")) as HTMLInputElement;
+  private get inputField(): HTMLInputElement {
+    const root = this.tobagoIn.getRootNode() as ShadowRoot | Document;
+    return root.getElementById(this.tobagoSuggest.getAttribute("for")) as HTMLInputElement;
   }
 
-  private get suggest(): HTMLElement {
-    return this.base.querySelector("tobago-suggest");
+  private get spinner(): HTMLDivElement {
+    return this.tobagoIn.querySelector<HTMLDivElement>(`.${Css.SPINNER}`);
   }
 
-  private get hiddenInput(): HTMLInputElement {
-    return this.suggest.querySelector(":scope > input[type=hidden]");
+  private get tobagoSuggest(): HTMLElement {
+    return this.tobagoIn.querySelector("tobago-suggest");
   }
 
-  private get items(): string[] {
-    return JSON.parse(this.suggest.getAttribute("items")) as string[];
+  private get minChars(): number {
+    return parseInt(this.tobagoSuggest.getAttribute("min-chars"));
   }
 
-  private get resultList(): HTMLUListElement {
-    const root = this.base.getRootNode() as ShadowRoot | Document;
-    const resultListId = this.suggestInput.getAttribute("aria-owns");
-    return root.getElementById(resultListId) as HTMLUListElement;
+  private get delay(): number {
+    return parseInt(this.tobagoSuggest.getAttribute("delay"));
   }
 
-  private get resultListPosition(): string {
-    return this.base.dataset.position;
+  private get maxItems(): number {
+    return parseInt(this.tobagoSuggest.getAttribute("max-items"));
   }
 
   private get update(): boolean {
-    return this.suggest.getAttribute("update") !== null;
+    return this.tobagoSuggest.getAttribute("update") !== null;
   }
 
-  private get delay(): number {
-    return parseInt(this.suggest.getAttribute("delay"));
+  private get totalCount(): number {
+    return parseInt(this.tobagoSuggest.getAttribute("total-count"));
   }
 
-  private get maxItems(): number {
-    return parseInt(this.suggest.getAttribute("max-items"));
+  private get filter(): SuggestFilter {
+    return SuggestFilter[this.tobagoSuggest.getAttribute("filter")] as SuggestFilter;
   }
 
-  private get minChars(): number {
-    return parseInt(this.suggest.getAttribute("min-chars"));
+  private get items(): string[] {
+    return JSON.parse(this.tobagoSuggest.getAttribute("items")) as string[];
   }
 
   private get localMenu(): boolean {
-    return this.suggest.getAttribute("local-menu") !== null;
+    return this.tobagoSuggest.getAttribute("local-menu") !== null;
   }
 
-  private get filter(): SuggestFilter {
-    return SuggestFilter[this.suggest.getAttribute("filter")] as SuggestFilter;
+  private get hiddenInput(): HTMLInputElement {
+    return this.tobagoSuggest.querySelector(":scope > input[type=hidden]");
+  }
+
+  private get dropdownMenuElement(): HTMLUListElement {
+    const root = this.tobagoIn.getRootNode() as ShadowRoot | Document;
+    return root.getElementById(this.tobagoSuggest.id + "::dropdownMenu") as HTMLUListElement;
   }
 
-  private get isInputGroup(): boolean {
-    return this.suggestInput.parentElement.classList.contains(Css.INPUT_GROUP);
+  private get dropdownItems(): NodeListOf<HTMLButtonElement> {
+    return this.dropdownMenuElement.querySelectorAll<HTMLButtonElement>("li button.dropdown-item");
   }
 }


(myfaces-tobago) 02/02: build(theme): rebuild

Posted by hn...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

hnoeth pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/myfaces-tobago.git

commit b5185df4b5f5bcf5a4ced159f46cd77943c1d372
Author: Henning Noeth <hn...@apache.org>
AuthorDate: Thu Mar 20 09:40:50 2025 +0100

    build(theme): rebuild
---
 .../src/main/css/tobago.css                        | 61 +++++++++------
 .../src/main/css/tobago.css.map                    |  2 +-
 .../src/main/css/tobago.min.css                    |  2 +-
 .../src/main/css/tobago.min.css.map                |  2 +-
 .../src/main/css/tobago.css                        | 61 +++++++++------
 .../src/main/css/tobago.css.map                    |  2 +-
 .../src/main/css/tobago.min.css                    |  2 +-
 .../src/main/css/tobago.min.css.map                |  2 +-
 .../src/main/css/tobago.css                        | 61 +++++++++------
 .../src/main/css/tobago.css.map                    |  2 +-
 .../src/main/css/tobago.min.css                    |  2 +-
 .../src/main/css/tobago.min.css.map                |  2 +-
 .../tobago-theme-speyside/src/main/css/tobago.css  | 87 +++++++++++++---------
 .../src/main/css/tobago.css.map                    |  2 +-
 .../src/main/css/tobago.min.css                    |  2 +-
 .../src/main/css/tobago.min.css.map                |  2 +-
 .../tobago-theme-standard/src/main/css/tobago.css  | 61 +++++++++------
 .../src/main/css/tobago.css.map                    |  2 +-
 .../src/main/css/tobago.min.css                    |  2 +-
 .../src/main/css/tobago.min.css.map                |  2 +-
 .../tobago-theme-standard/src/main/js/tobago.js    |  8 +-
 .../src/main/js/tobago.js.map                      |  2 +-
 22 files changed, 233 insertions(+), 138 deletions(-)

diff --git a/tobago-theme/tobago-theme-charlotteville/src/main/css/tobago.css b/tobago-theme/tobago-theme-charlotteville/src/main/css/tobago.css
index a8834cd5af..86cb948acb 100644
--- a/tobago-theme/tobago-theme-charlotteville/src/main/css/tobago.css
+++ b/tobago-theme/tobago-theme-charlotteville/src/main/css/tobago.css
@@ -3644,7 +3644,7 @@ .dropdown-toggle:empty::after {
   margin-left: 0;
 }
 
-.dropdown-menu, tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore .tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore > .tobago-dropdown-menu, tobago-dropdown > .tobago-dropdown-menu {
+.dropdown-menu, tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore .tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore > .tobago-dropdown-menu, tobago-in .tobago-dropdown-menu-anchor > .tobago-dropdown-menu, tobago-dropdown > .tobago-dropdown-menu {
   --bs-dropdown-zindex: 1000;
   --bs-dropdown-min-width: 10rem;
   --bs-dropdown-padding-x: 0;
@@ -3686,7 +3686,7 @@ .dropdown-menu, tobago-select-many-list .tobago-options.tobago-dropdown-menu, to
   border: var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color);
   border-radius: var(--bs-dropdown-border-radius);
 }
-.dropdown-menu[data-bs-popper], tobago-select-many-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-select-one-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore > [data-bs-popper].tobago-dropdown-menu, tobago-dropdown > [data-bs-popper].tobago-dropdown-menu {
+.dropdown-menu[data-bs-popper], tobago-select-many-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-select-one-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore > [data-bs-popper].tobago-dropdown-menu, tobago-in .tobago-dropdown-menu-anchor > [data-bs-popper].tobago-dropdown-menu, tobago-dropdown > [data-bs-popper].tobago-dropdown-menu {
   top: 100%;
   left: 0;
   margin-top: var(--bs-dropdown-spacer);
@@ -3788,7 +3788,7 @@ @media (min-width: 1400px) {
     left: auto;
   }
 }
-.dropup .dropdown-menu[data-bs-popper], .dropup tobago-select-many-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-select-many-list .dropup [data-bs-popper].tobago-options.tobago-dropdown-menu, .dropup tobago-select-one-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-select-one-list .dropup [data-bs-popper].tobago-options.tobago-dropdown-menu, .dropup tobago-page .tobago-page-menuStore [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-page . [...]
+.dropup .dropdown-menu[data-bs-popper], .dropup tobago-select-many-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-select-many-list .dropup [data-bs-popper].tobago-options.tobago-dropdown-menu, .dropup tobago-select-one-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-select-one-list .dropup [data-bs-popper].tobago-options.tobago-dropdown-menu, .dropup tobago-page .tobago-page-menuStore [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-page . [...]
   top: auto;
   bottom: 100%;
   margin-top: 0;
@@ -3808,7 +3808,7 @@ .dropup .dropdown-toggle:empty::after {
   margin-left: 0;
 }
 
-.dropend .dropdown-menu[data-bs-popper], .dropend tobago-select-many-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-select-many-list .dropend [data-bs-popper].tobago-options.tobago-dropdown-menu, .dropend tobago-select-one-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-select-one-list .dropend [data-bs-popper].tobago-options.tobago-dropdown-menu, .dropend tobago-page .tobago-page-menuStore [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago- [...]
+.dropend .dropdown-menu[data-bs-popper], .dropend tobago-select-many-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-select-many-list .dropend [data-bs-popper].tobago-options.tobago-dropdown-menu, .dropend tobago-select-one-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-select-one-list .dropend [data-bs-popper].tobago-options.tobago-dropdown-menu, .dropend tobago-page .tobago-page-menuStore [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago- [...]
   top: 0;
   right: auto;
   left: 100%;
@@ -3832,7 +3832,7 @@ .dropend .dropdown-toggle::after {
   vertical-align: 0;
 }
 
-.dropstart .dropdown-menu[data-bs-popper], .dropstart tobago-select-many-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-select-many-list .dropstart [data-bs-popper].tobago-options.tobago-dropdown-menu, .dropstart tobago-select-one-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-select-one-list .dropstart [data-bs-popper].tobago-options.tobago-dropdown-menu, .dropstart tobago-page .tobago-page-menuStore [data-bs-popper].tobago-options.tobago-dropdown-m [...]
+.dropstart .dropdown-menu[data-bs-popper], .dropstart tobago-select-many-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-select-many-list .dropstart [data-bs-popper].tobago-options.tobago-dropdown-menu, .dropstart tobago-select-one-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-select-one-list .dropstart [data-bs-popper].tobago-options.tobago-dropdown-menu, .dropstart tobago-page .tobago-page-menuStore [data-bs-popper].tobago-options.tobago-dropdown-m [...]
   top: 0;
   right: 100%;
   left: auto;
@@ -3901,7 +3901,7 @@ .dropdown-item.disabled, .dropdown-item:disabled {
   background-color: transparent;
 }
 
-.dropdown-menu.show, tobago-select-many-list .show.tobago-options.tobago-dropdown-menu, tobago-select-one-list .show.tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore .show.tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore > .show.tobago-dropdown-menu, tobago-dropdown > .show.tobago-dropdown-menu {
+.dropdown-menu.show, tobago-select-many-list .show.tobago-options.tobago-dropdown-menu, tobago-select-one-list .show.tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore .show.tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore > .show.tobago-dropdown-menu, tobago-in .tobago-dropdown-menu-anchor > .show.tobago-dropdown-menu, tobago-dropdown > .show.tobago-dropdown-menu {
   display: block;
 }
 
@@ -4104,7 +4104,7 @@ .nav-tabs .nav-item.show .nav-link {
   background-color: var(--bs-nav-tabs-link-active-bg);
   border-color: var(--bs-nav-tabs-link-active-border-color);
 }
-.nav-tabs .dropdown-menu, .nav-tabs tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .nav-tabs .tobago-options.tobago-dropdown-menu, .nav-tabs tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .nav-tabs .tobago-options.tobago-dropdown-menu, .nav-tabs tobago-page .tobago-page-menuStore .tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore .nav-tabs .tobago-options.tobago-dropdown-menu, .nav-tabs toba [...]
+.nav-tabs .dropdown-menu, .nav-tabs tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .nav-tabs .tobago-options.tobago-dropdown-menu, .nav-tabs tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .nav-tabs .tobago-options.tobago-dropdown-menu, .nav-tabs tobago-page .tobago-page-menuStore .tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore .nav-tabs .tobago-options.tobago-dropdown-menu, .nav-tabs toba [...]
   margin-top: calc(-1 * var(--bs-nav-tabs-border-width));
   border-top-left-radius: 0;
   border-top-right-radius: 0;
@@ -4239,7 +4239,7 @@ .navbar-nav {
 .navbar-nav .nav-link.active, .navbar-nav .nav-link.show {
   color: var(--bs-navbar-active-color);
 }
-.navbar-nav .dropdown-menu, .navbar-nav tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-nav tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-nav tobago-page .tobago-page-menuStore .tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore .navbar-nav .tobago-options.tobago-dropdown-menu,  [...]
+.navbar-nav .dropdown-menu, .navbar-nav tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-nav tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-nav tobago-page .tobago-page-menuStore .tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore .navbar-nav .tobago-options.tobago-dropdown-menu,  [...]
   position: static;
 }
 
@@ -4308,7 +4308,7 @@ @media (min-width: 576px) {
   .navbar-expand-sm .navbar-nav {
     flex-direction: row;
   }
-  .navbar-expand-sm .navbar-nav .dropdown-menu, .navbar-expand-sm .navbar-nav tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .navbar-expand-sm .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-sm .navbar-nav tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .navbar-expand-sm .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-sm .navbar-nav tobago-page .tobago-page-menuStore .tobago-optio [...]
+  .navbar-expand-sm .navbar-nav .dropdown-menu, .navbar-expand-sm .navbar-nav tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .navbar-expand-sm .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-sm .navbar-nav tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .navbar-expand-sm .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-sm .navbar-nav tobago-page .tobago-page-menuStore .tobago-optio [...]
     position: absolute;
   }
   .navbar-expand-sm .navbar-nav .nav-link {
@@ -4355,7 +4355,7 @@ @media (min-width: 768px) {
   .navbar-expand-md .navbar-nav {
     flex-direction: row;
   }
-  .navbar-expand-md .navbar-nav .dropdown-menu, .navbar-expand-md .navbar-nav tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .navbar-expand-md .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-md .navbar-nav tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .navbar-expand-md .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-md .navbar-nav tobago-page .tobago-page-menuStore .tobago-optio [...]
+  .navbar-expand-md .navbar-nav .dropdown-menu, .navbar-expand-md .navbar-nav tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .navbar-expand-md .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-md .navbar-nav tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .navbar-expand-md .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-md .navbar-nav tobago-page .tobago-page-menuStore .tobago-optio [...]
     position: absolute;
   }
   .navbar-expand-md .navbar-nav .nav-link {
@@ -4402,7 +4402,7 @@ @media (min-width: 992px) {
   .navbar-expand-lg .navbar-nav {
     flex-direction: row;
   }
-  .navbar-expand-lg .navbar-nav .dropdown-menu, .navbar-expand-lg .navbar-nav tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .navbar-expand-lg .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-lg .navbar-nav tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .navbar-expand-lg .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-lg .navbar-nav tobago-page .tobago-page-menuStore .tobago-optio [...]
+  .navbar-expand-lg .navbar-nav .dropdown-menu, .navbar-expand-lg .navbar-nav tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .navbar-expand-lg .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-lg .navbar-nav tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .navbar-expand-lg .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-lg .navbar-nav tobago-page .tobago-page-menuStore .tobago-optio [...]
     position: absolute;
   }
   .navbar-expand-lg .navbar-nav .nav-link {
@@ -4449,7 +4449,7 @@ @media (min-width: 1200px) {
   .navbar-expand-xl .navbar-nav {
     flex-direction: row;
   }
-  .navbar-expand-xl .navbar-nav .dropdown-menu, .navbar-expand-xl .navbar-nav tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .navbar-expand-xl .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-xl .navbar-nav tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .navbar-expand-xl .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-xl .navbar-nav tobago-page .tobago-page-menuStore .tobago-optio [...]
+  .navbar-expand-xl .navbar-nav .dropdown-menu, .navbar-expand-xl .navbar-nav tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .navbar-expand-xl .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-xl .navbar-nav tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .navbar-expand-xl .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-xl .navbar-nav tobago-page .tobago-page-menuStore .tobago-optio [...]
     position: absolute;
   }
   .navbar-expand-xl .navbar-nav .nav-link {
@@ -4496,7 +4496,7 @@ @media (min-width: 1400px) {
   .navbar-expand-xxl .navbar-nav {
     flex-direction: row;
   }
-  .navbar-expand-xxl .navbar-nav .dropdown-menu, .navbar-expand-xxl .navbar-nav tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .navbar-expand-xxl .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-xxl .navbar-nav tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .navbar-expand-xxl .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-xxl .navbar-nav tobago-page .tobago-page-menuStore .tobago [...]
+  .navbar-expand-xxl .navbar-nav .dropdown-menu, .navbar-expand-xxl .navbar-nav tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .navbar-expand-xxl .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-xxl .navbar-nav tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .navbar-expand-xxl .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-xxl .navbar-nav tobago-page .tobago-page-menuStore .tobago [...]
     position: absolute;
   }
   .navbar-expand-xxl .navbar-nav .nav-link {
@@ -4542,7 +4542,7 @@ .navbar-expand {
 .navbar-expand .navbar-nav {
   flex-direction: row;
 }
-.navbar-expand .navbar-nav .dropdown-menu, .navbar-expand .navbar-nav tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .navbar-expand .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand .navbar-nav tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .navbar-expand .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand .navbar-nav tobago-page .tobago-page-menuStore .tobago-options.tobago-dropdown-m [...]
+.navbar-expand .navbar-nav .dropdown-menu, .navbar-expand .navbar-nav tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .navbar-expand .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand .navbar-nav tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .navbar-expand .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand .navbar-nav tobago-page .tobago-page-menuStore .tobago-options.tobago-dropdown-m [...]
   position: absolute;
 }
 .navbar-expand .navbar-nav .nav-link {
@@ -12705,7 +12705,6 @@ tobago-image > img {
   max-height: inherit;
 }
 
-/* in ----------------------------------------------------------- */
 tobago-in {
   display: block;
 }
@@ -12731,23 +12730,34 @@ tobago-in .input-group tobago-select-one-choice.form-select {
 tobago-in .input-group tobago-select-one-choice.form-select > .form-select {
   border: 0;
 }
-tobago-in.autocomplete[data-loading=true] .autocomplete-pseudo-container {
+tobago-in .spinner {
+  display: none;
   position: absolute;
 }
-tobago-in.autocomplete[data-loading=true] .autocomplete-pseudo-container:after {
+tobago-in .spinner.tobago-show {
+  display: block;
+}
+tobago-in .spinner:after {
   content: "";
   border: 3px solid rgba(0, 0, 0, 0.12);
   border-right-color: rgba(0, 0, 0, 0.48);
   border-radius: 100%;
-  width: 20px;
-  height: 20px;
+  width: 100%;
+  height: 100%;
+  top: 50%;
   position: absolute;
   z-index: 5;
   transform: translateY(-50%);
   animation: rotate 1s linear infinite;
 }
-tobago-in .autocomplete-result-list {
-  cursor: pointer;
+tobago-in .tobago-dropdown-menu-anchor > .tobago-dropdown-menu {
+  /* Use .tobago-dropdown-menu instead of .dropdown-menu to prevent Bootstrap from creating a dropdown instance.
+     This leads to javascript error if arrow up/down is pressed. */
+  position: fixed;
+  overflow: auto;
+  overscroll-behavior: none;
+  margin: var(--tobago-dropdown-menu-offset);
+  z-index: var(--tobago-dropdown-menu-z-index);
 }
 tobago-in tobago-suggest {
   display: none;
@@ -13247,6 +13257,15 @@ tobago-page .tobago-page-menuStore .tobago-options .table tfoot tr.tobago-no-ent
 tobago-page .tobago-page-menuStore .tobago-options .table tfoot tr.tobago-no-entries td {
   border-bottom-width: 0;
 }
+tobago-page .tobago-page-menuStore > .tobago-dropdown-menu {
+  /* Use .tobago-dropdown-menu instead of .dropdown-menu to prevent Bootstrap from creating a dropdown instance.
+     This leads to javascript error if arrow up/down is pressed. */
+  position: fixed;
+  overflow: auto;
+  overscroll-behavior: none;
+  margin: var(--tobago-dropdown-menu-offset);
+  z-index: var(--tobago-dropdown-menu-z-index);
+}
 tobago-page .tobago-page-popoverStore .popover .popover-body {
   white-space: pre-line;
 }
diff --git a/tobago-theme/tobago-theme-charlotteville/src/main/css/tobago.css.map b/tobago-theme/tobago-theme-charlotteville/src/main/css/tobago.css.map
index 2d943068dc..81528ff95b 100644
--- a/tobago-theme/tobago-theme-charlotteville/src/main/css/tobago.css.map
+++ b/tobago-theme/tobago-theme-charlotteville/src/main/css/tobago.css.map
@@ -1 +1 @@
-{"version":3,"sources":["tobago.css","../scss/tobago-theme.scss","../scss/_variables.scss","../scss/_custom.scss","../../../../node_modules/bootstrap/scss/mixins/_banner.scss","../../../../node_modules/bootstrap/scss/_root.scss","../../../../node_modules/bootstrap/scss/vendor/_rfs.scss","../../../../node_modules/bootstrap/scss/mixins/_color-mode.scss","../../../../node_modules/bootstrap/scss/_reboot.scss","../../../../node_modules/bootstrap/scss/_variables.scss","../../../../node_modules [...]
\ No newline at end of file
+{"version":3,"sources":["tobago.css","../scss/tobago-theme.scss","../scss/_variables.scss","../scss/_custom.scss","../../../../node_modules/bootstrap/scss/mixins/_banner.scss","../../../../node_modules/bootstrap/scss/_root.scss","../../../../node_modules/bootstrap/scss/vendor/_rfs.scss","../../../../node_modules/bootstrap/scss/mixins/_color-mode.scss","../../../../node_modules/bootstrap/scss/_reboot.scss","../../../../node_modules/bootstrap/scss/_variables.scss","../../../../node_modules [...]
\ No newline at end of file
diff --git a/tobago-theme/tobago-theme-charlotteville/src/main/css/tobago.min.css b/tobago-theme/tobago-theme-charlotteville/src/main/css/tobago.min.css
index e63cde362a..f2ab6d14ba 100644
--- a/tobago-theme/tobago-theme-charlotteville/src/main/css/tobago.min.css
+++ b/tobago-theme/tobago-theme-charlotteville/src/main/css/tobago.min.css
@@ -1,2 +1,2 @@
-@charset "UTF-8";.tobago-dropdown-menu{background-color:#fff!important}.tobago-dropdown-menu .form-check-label{color:#555}.navbar .tobago-button{background-color:#59a3a3!important;border:1px solid #59a3a3!important}.navbar .tobago-button:hover{background-color:#61b5b5;border:1px solid #61b5b5}.navbar .tobago-link{color:#333!important}.navbar button.tobago-link.dropdown-item:disabled span{color:#555;opacity:.5}.tobago-dropdown-menu{--bs-dropdown-min-width:13rem!important}tobago-tree label [...]
+@charset "UTF-8";.tobago-dropdown-menu{background-color:#fff!important}.tobago-dropdown-menu .form-check-label{color:#555}.navbar .tobago-button{background-color:#59a3a3!important;border:1px solid #59a3a3!important}.navbar .tobago-button:hover{background-color:#61b5b5;border:1px solid #61b5b5}.navbar .tobago-link{color:#333!important}.navbar button.tobago-link.dropdown-item:disabled span{color:#555;opacity:.5}.tobago-dropdown-menu{--bs-dropdown-min-width:13rem!important}tobago-tree label [...]
 /*# sourceMappingURL=tobago.min.css.map */
\ No newline at end of file
diff --git a/tobago-theme/tobago-theme-charlotteville/src/main/css/tobago.min.css.map b/tobago-theme/tobago-theme-charlotteville/src/main/css/tobago.min.css.map
index 516f08a8e4..04c8bb7902 100644
--- a/tobago-theme/tobago-theme-charlotteville/src/main/css/tobago.min.css.map
+++ b/tobago-theme/tobago-theme-charlotteville/src/main/css/tobago.min.css.map
@@ -1 +1 @@
-{"version":3,"sources":["tobago-theme-charlotteville/src/main/css/tobago.css"],"names":[],"mappings":"iBAiDA,sBACE,iBAAkB,eAEpB,wCACE,MAAO,KAGT,uBACE,iBAAkB,kBAClB,OAAQ,IAAI,MAAM,kBAEpB,6BACE,iBAAkB,QAClB,OAAQ,IAAI,MAAM,QAEpB,qBACE,MAAO,eAET,uDACE,MAAO,KACP,QAAS,GAGX,sBACE,wBAAyB,gBAG3B,kBACE,WAAY,KAGd,cACE,MAAO,KACP,WAAY,IAAK,KAEnB,gBACE,MAAO,QACP,WAAY,QAEd,sBACE,MAAO,QAGT,KACE,iBAAkB,eAepB,gBARA,IAEA,IAEA,IAEA,IARA,mBADA,kBAUA,wBARA,GAEA,GAEA,GAEA,GATA,EAaE,MAAO,eAGU,mBAAuC,mBAAuC,mBAA [...]
\ No newline at end of file
+{"version":3,"sources":["tobago-theme-charlotteville/src/main/css/tobago.css"],"names":[],"mappings":"iBAiDA,sBACE,iBAAkB,eAEpB,wCACE,MAAO,KAGT,uBACE,iBAAkB,kBAClB,OAAQ,IAAI,MAAM,kBAEpB,6BACE,iBAAkB,QAClB,OAAQ,IAAI,MAAM,QAEpB,qBACE,MAAO,eAET,uDACE,MAAO,KACP,QAAS,GAGX,sBACE,wBAAyB,gBAG3B,kBACE,WAAY,KAGd,cACE,MAAO,KACP,WAAY,IAAK,KAEnB,gBACE,MAAO,QACP,WAAY,QAEd,sBACE,MAAO,QAGT,KACE,iBAAkB,eAepB,gBARA,IAEA,IAEA,IAEA,IARA,mBADA,kBAUA,wBARA,GAEA,GAEA,GAEA,GATA,EAaE,MAAO,eAGU,mBAAuC,mBAAuC,mBAA [...]
\ No newline at end of file
diff --git a/tobago-theme/tobago-theme-roxborough/src/main/css/tobago.css b/tobago-theme/tobago-theme-roxborough/src/main/css/tobago.css
index d55bf0cec3..eb93cca172 100644
--- a/tobago-theme/tobago-theme-roxborough/src/main/css/tobago.css
+++ b/tobago-theme/tobago-theme-roxborough/src/main/css/tobago.css
@@ -3439,7 +3439,7 @@ .dropdown-toggle:empty::after {
   margin-left: 0;
 }
 
-.dropdown-menu, tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore .tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore > .tobago-dropdown-menu, tobago-dropdown > .tobago-dropdown-menu {
+.dropdown-menu, tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore .tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore > .tobago-dropdown-menu, tobago-in .tobago-dropdown-menu-anchor > .tobago-dropdown-menu, tobago-dropdown > .tobago-dropdown-menu {
   --bs-dropdown-zindex: 1000;
   --bs-dropdown-min-width: 10rem;
   --bs-dropdown-padding-x: 0;
@@ -3481,7 +3481,7 @@ .dropdown-menu, tobago-select-many-list .tobago-options.tobago-dropdown-menu, to
   border: var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color);
   border-radius: var(--bs-dropdown-border-radius);
 }
-.dropdown-menu[data-bs-popper], tobago-select-many-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-select-one-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore > [data-bs-popper].tobago-dropdown-menu, tobago-dropdown > [data-bs-popper].tobago-dropdown-menu {
+.dropdown-menu[data-bs-popper], tobago-select-many-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-select-one-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore > [data-bs-popper].tobago-dropdown-menu, tobago-in .tobago-dropdown-menu-anchor > [data-bs-popper].tobago-dropdown-menu, tobago-dropdown > [data-bs-popper].tobago-dropdown-menu {
   top: 100%;
   left: 0;
   margin-top: var(--bs-dropdown-spacer);
@@ -3583,7 +3583,7 @@ @media (min-width: 1400px) {
     left: auto;
   }
 }
-.dropup .dropdown-menu[data-bs-popper], .dropup tobago-select-many-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-select-many-list .dropup [data-bs-popper].tobago-options.tobago-dropdown-menu, .dropup tobago-select-one-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-select-one-list .dropup [data-bs-popper].tobago-options.tobago-dropdown-menu, .dropup tobago-page .tobago-page-menuStore [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-page . [...]
+.dropup .dropdown-menu[data-bs-popper], .dropup tobago-select-many-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-select-many-list .dropup [data-bs-popper].tobago-options.tobago-dropdown-menu, .dropup tobago-select-one-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-select-one-list .dropup [data-bs-popper].tobago-options.tobago-dropdown-menu, .dropup tobago-page .tobago-page-menuStore [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-page . [...]
   top: auto;
   bottom: 100%;
   margin-top: 0;
@@ -3603,7 +3603,7 @@ .dropup .dropdown-toggle:empty::after {
   margin-left: 0;
 }
 
-.dropend .dropdown-menu[data-bs-popper], .dropend tobago-select-many-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-select-many-list .dropend [data-bs-popper].tobago-options.tobago-dropdown-menu, .dropend tobago-select-one-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-select-one-list .dropend [data-bs-popper].tobago-options.tobago-dropdown-menu, .dropend tobago-page .tobago-page-menuStore [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago- [...]
+.dropend .dropdown-menu[data-bs-popper], .dropend tobago-select-many-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-select-many-list .dropend [data-bs-popper].tobago-options.tobago-dropdown-menu, .dropend tobago-select-one-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-select-one-list .dropend [data-bs-popper].tobago-options.tobago-dropdown-menu, .dropend tobago-page .tobago-page-menuStore [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago- [...]
   top: 0;
   right: auto;
   left: 100%;
@@ -3627,7 +3627,7 @@ .dropend .dropdown-toggle::after {
   vertical-align: 0;
 }
 
-.dropstart .dropdown-menu[data-bs-popper], .dropstart tobago-select-many-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-select-many-list .dropstart [data-bs-popper].tobago-options.tobago-dropdown-menu, .dropstart tobago-select-one-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-select-one-list .dropstart [data-bs-popper].tobago-options.tobago-dropdown-menu, .dropstart tobago-page .tobago-page-menuStore [data-bs-popper].tobago-options.tobago-dropdown-m [...]
+.dropstart .dropdown-menu[data-bs-popper], .dropstart tobago-select-many-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-select-many-list .dropstart [data-bs-popper].tobago-options.tobago-dropdown-menu, .dropstart tobago-select-one-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-select-one-list .dropstart [data-bs-popper].tobago-options.tobago-dropdown-menu, .dropstart tobago-page .tobago-page-menuStore [data-bs-popper].tobago-options.tobago-dropdown-m [...]
   top: 0;
   right: 100%;
   left: auto;
@@ -3696,7 +3696,7 @@ .dropdown-item.disabled, .dropdown-item:disabled {
   background-color: transparent;
 }
 
-.dropdown-menu.show, tobago-select-many-list .show.tobago-options.tobago-dropdown-menu, tobago-select-one-list .show.tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore .show.tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore > .show.tobago-dropdown-menu, tobago-dropdown > .show.tobago-dropdown-menu {
+.dropdown-menu.show, tobago-select-many-list .show.tobago-options.tobago-dropdown-menu, tobago-select-one-list .show.tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore .show.tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore > .show.tobago-dropdown-menu, tobago-in .tobago-dropdown-menu-anchor > .show.tobago-dropdown-menu, tobago-dropdown > .show.tobago-dropdown-menu {
   display: block;
 }
 
@@ -3899,7 +3899,7 @@ .nav-tabs .nav-item.show .nav-link {
   background-color: var(--bs-nav-tabs-link-active-bg);
   border-color: var(--bs-nav-tabs-link-active-border-color);
 }
-.nav-tabs .dropdown-menu, .nav-tabs tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .nav-tabs .tobago-options.tobago-dropdown-menu, .nav-tabs tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .nav-tabs .tobago-options.tobago-dropdown-menu, .nav-tabs tobago-page .tobago-page-menuStore .tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore .nav-tabs .tobago-options.tobago-dropdown-menu, .nav-tabs toba [...]
+.nav-tabs .dropdown-menu, .nav-tabs tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .nav-tabs .tobago-options.tobago-dropdown-menu, .nav-tabs tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .nav-tabs .tobago-options.tobago-dropdown-menu, .nav-tabs tobago-page .tobago-page-menuStore .tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore .nav-tabs .tobago-options.tobago-dropdown-menu, .nav-tabs toba [...]
   margin-top: calc(-1 * var(--bs-nav-tabs-border-width));
   border-top-left-radius: 0;
   border-top-right-radius: 0;
@@ -4034,7 +4034,7 @@ .navbar-nav {
 .navbar-nav .nav-link.active, .navbar-nav .nav-link.show {
   color: var(--bs-navbar-active-color);
 }
-.navbar-nav .dropdown-menu, .navbar-nav tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-nav tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-nav tobago-page .tobago-page-menuStore .tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore .navbar-nav .tobago-options.tobago-dropdown-menu,  [...]
+.navbar-nav .dropdown-menu, .navbar-nav tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-nav tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-nav tobago-page .tobago-page-menuStore .tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore .navbar-nav .tobago-options.tobago-dropdown-menu,  [...]
   position: static;
 }
 
@@ -4103,7 +4103,7 @@ @media (min-width: 576px) {
   .navbar-expand-sm .navbar-nav {
     flex-direction: row;
   }
-  .navbar-expand-sm .navbar-nav .dropdown-menu, .navbar-expand-sm .navbar-nav tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .navbar-expand-sm .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-sm .navbar-nav tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .navbar-expand-sm .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-sm .navbar-nav tobago-page .tobago-page-menuStore .tobago-optio [...]
+  .navbar-expand-sm .navbar-nav .dropdown-menu, .navbar-expand-sm .navbar-nav tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .navbar-expand-sm .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-sm .navbar-nav tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .navbar-expand-sm .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-sm .navbar-nav tobago-page .tobago-page-menuStore .tobago-optio [...]
     position: absolute;
   }
   .navbar-expand-sm .navbar-nav .nav-link {
@@ -4150,7 +4150,7 @@ @media (min-width: 768px) {
   .navbar-expand-md .navbar-nav {
     flex-direction: row;
   }
-  .navbar-expand-md .navbar-nav .dropdown-menu, .navbar-expand-md .navbar-nav tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .navbar-expand-md .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-md .navbar-nav tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .navbar-expand-md .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-md .navbar-nav tobago-page .tobago-page-menuStore .tobago-optio [...]
+  .navbar-expand-md .navbar-nav .dropdown-menu, .navbar-expand-md .navbar-nav tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .navbar-expand-md .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-md .navbar-nav tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .navbar-expand-md .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-md .navbar-nav tobago-page .tobago-page-menuStore .tobago-optio [...]
     position: absolute;
   }
   .navbar-expand-md .navbar-nav .nav-link {
@@ -4197,7 +4197,7 @@ @media (min-width: 992px) {
   .navbar-expand-lg .navbar-nav {
     flex-direction: row;
   }
-  .navbar-expand-lg .navbar-nav .dropdown-menu, .navbar-expand-lg .navbar-nav tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .navbar-expand-lg .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-lg .navbar-nav tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .navbar-expand-lg .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-lg .navbar-nav tobago-page .tobago-page-menuStore .tobago-optio [...]
+  .navbar-expand-lg .navbar-nav .dropdown-menu, .navbar-expand-lg .navbar-nav tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .navbar-expand-lg .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-lg .navbar-nav tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .navbar-expand-lg .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-lg .navbar-nav tobago-page .tobago-page-menuStore .tobago-optio [...]
     position: absolute;
   }
   .navbar-expand-lg .navbar-nav .nav-link {
@@ -4244,7 +4244,7 @@ @media (min-width: 1200px) {
   .navbar-expand-xl .navbar-nav {
     flex-direction: row;
   }
-  .navbar-expand-xl .navbar-nav .dropdown-menu, .navbar-expand-xl .navbar-nav tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .navbar-expand-xl .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-xl .navbar-nav tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .navbar-expand-xl .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-xl .navbar-nav tobago-page .tobago-page-menuStore .tobago-optio [...]
+  .navbar-expand-xl .navbar-nav .dropdown-menu, .navbar-expand-xl .navbar-nav tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .navbar-expand-xl .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-xl .navbar-nav tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .navbar-expand-xl .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-xl .navbar-nav tobago-page .tobago-page-menuStore .tobago-optio [...]
     position: absolute;
   }
   .navbar-expand-xl .navbar-nav .nav-link {
@@ -4291,7 +4291,7 @@ @media (min-width: 1400px) {
   .navbar-expand-xxl .navbar-nav {
     flex-direction: row;
   }
-  .navbar-expand-xxl .navbar-nav .dropdown-menu, .navbar-expand-xxl .navbar-nav tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .navbar-expand-xxl .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-xxl .navbar-nav tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .navbar-expand-xxl .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-xxl .navbar-nav tobago-page .tobago-page-menuStore .tobago [...]
+  .navbar-expand-xxl .navbar-nav .dropdown-menu, .navbar-expand-xxl .navbar-nav tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .navbar-expand-xxl .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-xxl .navbar-nav tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .navbar-expand-xxl .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-xxl .navbar-nav tobago-page .tobago-page-menuStore .tobago [...]
     position: absolute;
   }
   .navbar-expand-xxl .navbar-nav .nav-link {
@@ -4337,7 +4337,7 @@ .navbar-expand {
 .navbar-expand .navbar-nav {
   flex-direction: row;
 }
-.navbar-expand .navbar-nav .dropdown-menu, .navbar-expand .navbar-nav tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .navbar-expand .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand .navbar-nav tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .navbar-expand .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand .navbar-nav tobago-page .tobago-page-menuStore .tobago-options.tobago-dropdown-m [...]
+.navbar-expand .navbar-nav .dropdown-menu, .navbar-expand .navbar-nav tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .navbar-expand .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand .navbar-nav tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .navbar-expand .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand .navbar-nav tobago-page .tobago-page-menuStore .tobago-options.tobago-dropdown-m [...]
   position: absolute;
 }
 .navbar-expand .navbar-nav .nav-link {
@@ -12500,7 +12500,6 @@ tobago-image > img {
   max-height: inherit;
 }
 
-/* in ----------------------------------------------------------- */
 tobago-in {
   display: block;
 }
@@ -12526,23 +12525,34 @@ tobago-in .input-group tobago-select-one-choice.form-select {
 tobago-in .input-group tobago-select-one-choice.form-select > .form-select {
   border: 0;
 }
-tobago-in.autocomplete[data-loading=true] .autocomplete-pseudo-container {
+tobago-in .spinner {
+  display: none;
   position: absolute;
 }
-tobago-in.autocomplete[data-loading=true] .autocomplete-pseudo-container:after {
+tobago-in .spinner.tobago-show {
+  display: block;
+}
+tobago-in .spinner:after {
   content: "";
   border: 3px solid rgba(0, 0, 0, 0.12);
   border-right-color: rgba(0, 0, 0, 0.48);
   border-radius: 100%;
-  width: 20px;
-  height: 20px;
+  width: 100%;
+  height: 100%;
+  top: 50%;
   position: absolute;
   z-index: 5;
   transform: translateY(-50%);
   animation: rotate 1s linear infinite;
 }
-tobago-in .autocomplete-result-list {
-  cursor: pointer;
+tobago-in .tobago-dropdown-menu-anchor > .tobago-dropdown-menu {
+  /* Use .tobago-dropdown-menu instead of .dropdown-menu to prevent Bootstrap from creating a dropdown instance.
+     This leads to javascript error if arrow up/down is pressed. */
+  position: fixed;
+  overflow: auto;
+  overscroll-behavior: none;
+  margin: var(--tobago-dropdown-menu-offset);
+  z-index: var(--tobago-dropdown-menu-z-index);
 }
 tobago-in tobago-suggest {
   display: none;
@@ -13042,6 +13052,15 @@ tobago-page .tobago-page-menuStore .tobago-options .table tfoot tr.tobago-no-ent
 tobago-page .tobago-page-menuStore .tobago-options .table tfoot tr.tobago-no-entries td {
   border-bottom-width: 0;
 }
+tobago-page .tobago-page-menuStore > .tobago-dropdown-menu {
+  /* Use .tobago-dropdown-menu instead of .dropdown-menu to prevent Bootstrap from creating a dropdown instance.
+     This leads to javascript error if arrow up/down is pressed. */
+  position: fixed;
+  overflow: auto;
+  overscroll-behavior: none;
+  margin: var(--tobago-dropdown-menu-offset);
+  z-index: var(--tobago-dropdown-menu-z-index);
+}
 tobago-page .tobago-page-popoverStore .popover .popover-body {
   white-space: pre-line;
 }
diff --git a/tobago-theme/tobago-theme-roxborough/src/main/css/tobago.css.map b/tobago-theme/tobago-theme-roxborough/src/main/css/tobago.css.map
index a5b026408f..cc285c8543 100644
--- a/tobago-theme/tobago-theme-roxborough/src/main/css/tobago.css.map
+++ b/tobago-theme/tobago-theme-roxborough/src/main/css/tobago.css.map
@@ -1 +1 @@
-{"version":3,"sources":["tobago.css","../scss/tobago-theme.scss","../scss/_custom.scss","../../../../node_modules/bootstrap/scss/mixins/_banner.scss","../../../../node_modules/bootstrap/scss/_root.scss","../../../../node_modules/bootstrap/scss/vendor/_rfs.scss","../../../../node_modules/bootstrap/scss/mixins/_color-mode.scss","../../../../node_modules/bootstrap/scss/_reboot.scss","../../../../node_modules/bootstrap/scss/_variables.scss","../../../../node_modules/bootstrap/scss/mixins/_bo [...]
\ No newline at end of file
+{"version":3,"sources":["tobago.css","../scss/tobago-theme.scss","../scss/_custom.scss","../../../../node_modules/bootstrap/scss/mixins/_banner.scss","../../../../node_modules/bootstrap/scss/_root.scss","../../../../node_modules/bootstrap/scss/vendor/_rfs.scss","../../../../node_modules/bootstrap/scss/mixins/_color-mode.scss","../../../../node_modules/bootstrap/scss/_reboot.scss","../../../../node_modules/bootstrap/scss/_variables.scss","../../../../node_modules/bootstrap/scss/mixins/_bo [...]
\ No newline at end of file
diff --git a/tobago-theme/tobago-theme-roxborough/src/main/css/tobago.min.css b/tobago-theme/tobago-theme-roxborough/src/main/css/tobago.min.css
index 1d815d77af..0d4567149d 100644
--- a/tobago-theme/tobago-theme-roxborough/src/main/css/tobago.min.css
+++ b/tobago-theme/tobago-theme-roxborough/src/main/css/tobago.min.css
@@ -1,2 +1,2 @@
-@charset "UTF-8";@font-face{font-family:Amaranth;font-style:normal;font-weight:400;src:url("../fonts/Amaranth-Regular.otf") format("opentype")}@font-face{font-family:Amaranth;font-style:normal;font-weight:700;src:url("../fonts/Amaranth-Bold.otf") format("opentype")}@font-face{font-family:Amaranth;font-style:italic;src:url("../fonts/Amaranth-Italic.otf") format("opentype")}@font-face{font-family:Amaranth;font-style:italic;font-weight:700;src:url("../fonts/Amaranth-BoldItalic.otf") format( [...]
+@charset "UTF-8";@font-face{font-family:Amaranth;font-style:normal;font-weight:400;src:url("../fonts/Amaranth-Regular.otf") format("opentype")}@font-face{font-family:Amaranth;font-style:normal;font-weight:700;src:url("../fonts/Amaranth-Bold.otf") format("opentype")}@font-face{font-family:Amaranth;font-style:italic;src:url("../fonts/Amaranth-Italic.otf") format("opentype")}@font-face{font-family:Amaranth;font-style:italic;font-weight:700;src:url("../fonts/Amaranth-BoldItalic.otf") format( [...]
 /*# sourceMappingURL=tobago.min.css.map */
\ No newline at end of file
diff --git a/tobago-theme/tobago-theme-roxborough/src/main/css/tobago.min.css.map b/tobago-theme/tobago-theme-roxborough/src/main/css/tobago.min.css.map
index 399f0c72fe..1e837e0450 100644
--- a/tobago-theme/tobago-theme-roxborough/src/main/css/tobago.min.css.map
+++ b/tobago-theme/tobago-theme-roxborough/src/main/css/tobago.min.css.map
@@ -1 +1 @@
-{"version":3,"sources":["tobago-theme-roxborough/src/main/css/tobago.css"],"names":[],"mappings":"iBAiCA,WACE,YAAa,SACb,WAAY,OACZ,YAAa,IACb,IAAK,qCAAqC,mBAE5C,WACE,YAAa,SACb,WAAY,OACZ,YAAa,IACb,IAAK,kCAAkC,mBAEzC,WACE,YAAa,SACb,WAAY,OACZ,IAAK,oCAAoC,mBAE3C,WACE,YAAa,SACb,WAAY,OACZ,YAAa,IACb,IAAK,wCAAwC,mBAE/C,mBACE,YAAa,QAAQ,CAAE,KAAK,CAAE,MAQhC,MACA,sBACE,UAAW,QACX,YAAa,QACb,YAAa,QACb,UAAW,QACX,SAAU,QACV,YAAa,QACb,YAAa,QACb,WAAY,QACZ,UAAW,QACX,UAAW,QACX,WAAY,QACZ,WAAY,KACZ,UAAW,QACX,eAA [...]
\ No newline at end of file
+{"version":3,"sources":["tobago-theme-roxborough/src/main/css/tobago.css"],"names":[],"mappings":"iBAiCA,WACE,YAAa,SACb,WAAY,OACZ,YAAa,IACb,IAAK,qCAAqC,mBAE5C,WACE,YAAa,SACb,WAAY,OACZ,YAAa,IACb,IAAK,kCAAkC,mBAEzC,WACE,YAAa,SACb,WAAY,OACZ,IAAK,oCAAoC,mBAE3C,WACE,YAAa,SACb,WAAY,OACZ,YAAa,IACb,IAAK,wCAAwC,mBAE/C,mBACE,YAAa,QAAQ,CAAE,KAAK,CAAE,MAQhC,MACA,sBACE,UAAW,QACX,YAAa,QACb,YAAa,QACb,UAAW,QACX,SAAU,QACV,YAAa,QACb,YAAa,QACb,WAAY,QACZ,UAAW,QACX,UAAW,QACX,WAAY,QACZ,WAAY,KACZ,UAAW,QACX,eAA [...]
\ No newline at end of file
diff --git a/tobago-theme/tobago-theme-scarborough/src/main/css/tobago.css b/tobago-theme/tobago-theme-scarborough/src/main/css/tobago.css
index 53a64f081e..421ee7d837 100644
--- a/tobago-theme/tobago-theme-scarborough/src/main/css/tobago.css
+++ b/tobago-theme/tobago-theme-scarborough/src/main/css/tobago.css
@@ -3416,7 +3416,7 @@ .dropdown-toggle:empty::after {
   margin-left: 0;
 }
 
-.dropdown-menu, tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore .tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore > .tobago-dropdown-menu, tobago-dropdown > .tobago-dropdown-menu {
+.dropdown-menu, tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore .tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore > .tobago-dropdown-menu, tobago-in .tobago-dropdown-menu-anchor > .tobago-dropdown-menu, tobago-dropdown > .tobago-dropdown-menu {
   --bs-dropdown-zindex: 1000;
   --bs-dropdown-min-width: 10rem;
   --bs-dropdown-padding-x: 0;
@@ -3458,7 +3458,7 @@ .dropdown-menu, tobago-select-many-list .tobago-options.tobago-dropdown-menu, to
   border: var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color);
   border-radius: var(--bs-dropdown-border-radius);
 }
-.dropdown-menu[data-bs-popper], tobago-select-many-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-select-one-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore > [data-bs-popper].tobago-dropdown-menu, tobago-dropdown > [data-bs-popper].tobago-dropdown-menu {
+.dropdown-menu[data-bs-popper], tobago-select-many-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-select-one-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore > [data-bs-popper].tobago-dropdown-menu, tobago-in .tobago-dropdown-menu-anchor > [data-bs-popper].tobago-dropdown-menu, tobago-dropdown > [data-bs-popper].tobago-dropdown-menu {
   top: 100%;
   left: 0;
   margin-top: var(--bs-dropdown-spacer);
@@ -3560,7 +3560,7 @@ @media (min-width: 1400px) {
     left: auto;
   }
 }
-.dropup .dropdown-menu[data-bs-popper], .dropup tobago-select-many-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-select-many-list .dropup [data-bs-popper].tobago-options.tobago-dropdown-menu, .dropup tobago-select-one-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-select-one-list .dropup [data-bs-popper].tobago-options.tobago-dropdown-menu, .dropup tobago-page .tobago-page-menuStore [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-page . [...]
+.dropup .dropdown-menu[data-bs-popper], .dropup tobago-select-many-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-select-many-list .dropup [data-bs-popper].tobago-options.tobago-dropdown-menu, .dropup tobago-select-one-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-select-one-list .dropup [data-bs-popper].tobago-options.tobago-dropdown-menu, .dropup tobago-page .tobago-page-menuStore [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-page . [...]
   top: auto;
   bottom: 100%;
   margin-top: 0;
@@ -3580,7 +3580,7 @@ .dropup .dropdown-toggle:empty::after {
   margin-left: 0;
 }
 
-.dropend .dropdown-menu[data-bs-popper], .dropend tobago-select-many-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-select-many-list .dropend [data-bs-popper].tobago-options.tobago-dropdown-menu, .dropend tobago-select-one-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-select-one-list .dropend [data-bs-popper].tobago-options.tobago-dropdown-menu, .dropend tobago-page .tobago-page-menuStore [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago- [...]
+.dropend .dropdown-menu[data-bs-popper], .dropend tobago-select-many-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-select-many-list .dropend [data-bs-popper].tobago-options.tobago-dropdown-menu, .dropend tobago-select-one-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-select-one-list .dropend [data-bs-popper].tobago-options.tobago-dropdown-menu, .dropend tobago-page .tobago-page-menuStore [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago- [...]
   top: 0;
   right: auto;
   left: 100%;
@@ -3604,7 +3604,7 @@ .dropend .dropdown-toggle::after {
   vertical-align: 0;
 }
 
-.dropstart .dropdown-menu[data-bs-popper], .dropstart tobago-select-many-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-select-many-list .dropstart [data-bs-popper].tobago-options.tobago-dropdown-menu, .dropstart tobago-select-one-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-select-one-list .dropstart [data-bs-popper].tobago-options.tobago-dropdown-menu, .dropstart tobago-page .tobago-page-menuStore [data-bs-popper].tobago-options.tobago-dropdown-m [...]
+.dropstart .dropdown-menu[data-bs-popper], .dropstart tobago-select-many-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-select-many-list .dropstart [data-bs-popper].tobago-options.tobago-dropdown-menu, .dropstart tobago-select-one-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-select-one-list .dropstart [data-bs-popper].tobago-options.tobago-dropdown-menu, .dropstart tobago-page .tobago-page-menuStore [data-bs-popper].tobago-options.tobago-dropdown-m [...]
   top: 0;
   right: 100%;
   left: auto;
@@ -3673,7 +3673,7 @@ .dropdown-item.disabled, .dropdown-item:disabled {
   background-color: transparent;
 }
 
-.dropdown-menu.show, tobago-select-many-list .show.tobago-options.tobago-dropdown-menu, tobago-select-one-list .show.tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore .show.tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore > .show.tobago-dropdown-menu, tobago-dropdown > .show.tobago-dropdown-menu {
+.dropdown-menu.show, tobago-select-many-list .show.tobago-options.tobago-dropdown-menu, tobago-select-one-list .show.tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore .show.tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore > .show.tobago-dropdown-menu, tobago-in .tobago-dropdown-menu-anchor > .show.tobago-dropdown-menu, tobago-dropdown > .show.tobago-dropdown-menu {
   display: block;
 }
 
@@ -3876,7 +3876,7 @@ .nav-tabs .nav-item.show .nav-link {
   background-color: var(--bs-nav-tabs-link-active-bg);
   border-color: var(--bs-nav-tabs-link-active-border-color);
 }
-.nav-tabs .dropdown-menu, .nav-tabs tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .nav-tabs .tobago-options.tobago-dropdown-menu, .nav-tabs tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .nav-tabs .tobago-options.tobago-dropdown-menu, .nav-tabs tobago-page .tobago-page-menuStore .tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore .nav-tabs .tobago-options.tobago-dropdown-menu, .nav-tabs toba [...]
+.nav-tabs .dropdown-menu, .nav-tabs tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .nav-tabs .tobago-options.tobago-dropdown-menu, .nav-tabs tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .nav-tabs .tobago-options.tobago-dropdown-menu, .nav-tabs tobago-page .tobago-page-menuStore .tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore .nav-tabs .tobago-options.tobago-dropdown-menu, .nav-tabs toba [...]
   margin-top: calc(-1 * var(--bs-nav-tabs-border-width));
   border-top-left-radius: 0;
   border-top-right-radius: 0;
@@ -4011,7 +4011,7 @@ .navbar-nav {
 .navbar-nav .nav-link.active, .navbar-nav .nav-link.show {
   color: var(--bs-navbar-active-color);
 }
-.navbar-nav .dropdown-menu, .navbar-nav tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-nav tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-nav tobago-page .tobago-page-menuStore .tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore .navbar-nav .tobago-options.tobago-dropdown-menu,  [...]
+.navbar-nav .dropdown-menu, .navbar-nav tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-nav tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-nav tobago-page .tobago-page-menuStore .tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore .navbar-nav .tobago-options.tobago-dropdown-menu,  [...]
   position: static;
 }
 
@@ -4080,7 +4080,7 @@ @media (min-width: 576px) {
   .navbar-expand-sm .navbar-nav {
     flex-direction: row;
   }
-  .navbar-expand-sm .navbar-nav .dropdown-menu, .navbar-expand-sm .navbar-nav tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .navbar-expand-sm .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-sm .navbar-nav tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .navbar-expand-sm .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-sm .navbar-nav tobago-page .tobago-page-menuStore .tobago-optio [...]
+  .navbar-expand-sm .navbar-nav .dropdown-menu, .navbar-expand-sm .navbar-nav tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .navbar-expand-sm .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-sm .navbar-nav tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .navbar-expand-sm .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-sm .navbar-nav tobago-page .tobago-page-menuStore .tobago-optio [...]
     position: absolute;
   }
   .navbar-expand-sm .navbar-nav .nav-link {
@@ -4127,7 +4127,7 @@ @media (min-width: 768px) {
   .navbar-expand-md .navbar-nav {
     flex-direction: row;
   }
-  .navbar-expand-md .navbar-nav .dropdown-menu, .navbar-expand-md .navbar-nav tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .navbar-expand-md .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-md .navbar-nav tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .navbar-expand-md .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-md .navbar-nav tobago-page .tobago-page-menuStore .tobago-optio [...]
+  .navbar-expand-md .navbar-nav .dropdown-menu, .navbar-expand-md .navbar-nav tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .navbar-expand-md .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-md .navbar-nav tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .navbar-expand-md .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-md .navbar-nav tobago-page .tobago-page-menuStore .tobago-optio [...]
     position: absolute;
   }
   .navbar-expand-md .navbar-nav .nav-link {
@@ -4174,7 +4174,7 @@ @media (min-width: 992px) {
   .navbar-expand-lg .navbar-nav {
     flex-direction: row;
   }
-  .navbar-expand-lg .navbar-nav .dropdown-menu, .navbar-expand-lg .navbar-nav tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .navbar-expand-lg .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-lg .navbar-nav tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .navbar-expand-lg .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-lg .navbar-nav tobago-page .tobago-page-menuStore .tobago-optio [...]
+  .navbar-expand-lg .navbar-nav .dropdown-menu, .navbar-expand-lg .navbar-nav tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .navbar-expand-lg .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-lg .navbar-nav tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .navbar-expand-lg .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-lg .navbar-nav tobago-page .tobago-page-menuStore .tobago-optio [...]
     position: absolute;
   }
   .navbar-expand-lg .navbar-nav .nav-link {
@@ -4221,7 +4221,7 @@ @media (min-width: 1200px) {
   .navbar-expand-xl .navbar-nav {
     flex-direction: row;
   }
-  .navbar-expand-xl .navbar-nav .dropdown-menu, .navbar-expand-xl .navbar-nav tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .navbar-expand-xl .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-xl .navbar-nav tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .navbar-expand-xl .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-xl .navbar-nav tobago-page .tobago-page-menuStore .tobago-optio [...]
+  .navbar-expand-xl .navbar-nav .dropdown-menu, .navbar-expand-xl .navbar-nav tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .navbar-expand-xl .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-xl .navbar-nav tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .navbar-expand-xl .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-xl .navbar-nav tobago-page .tobago-page-menuStore .tobago-optio [...]
     position: absolute;
   }
   .navbar-expand-xl .navbar-nav .nav-link {
@@ -4268,7 +4268,7 @@ @media (min-width: 1400px) {
   .navbar-expand-xxl .navbar-nav {
     flex-direction: row;
   }
-  .navbar-expand-xxl .navbar-nav .dropdown-menu, .navbar-expand-xxl .navbar-nav tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .navbar-expand-xxl .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-xxl .navbar-nav tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .navbar-expand-xxl .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-xxl .navbar-nav tobago-page .tobago-page-menuStore .tobago [...]
+  .navbar-expand-xxl .navbar-nav .dropdown-menu, .navbar-expand-xxl .navbar-nav tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .navbar-expand-xxl .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-xxl .navbar-nav tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .navbar-expand-xxl .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-xxl .navbar-nav tobago-page .tobago-page-menuStore .tobago [...]
     position: absolute;
   }
   .navbar-expand-xxl .navbar-nav .nav-link {
@@ -4314,7 +4314,7 @@ .navbar-expand {
 .navbar-expand .navbar-nav {
   flex-direction: row;
 }
-.navbar-expand .navbar-nav .dropdown-menu, .navbar-expand .navbar-nav tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .navbar-expand .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand .navbar-nav tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .navbar-expand .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand .navbar-nav tobago-page .tobago-page-menuStore .tobago-options.tobago-dropdown-m [...]
+.navbar-expand .navbar-nav .dropdown-menu, .navbar-expand .navbar-nav tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .navbar-expand .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand .navbar-nav tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .navbar-expand .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand .navbar-nav tobago-page .tobago-page-menuStore .tobago-options.tobago-dropdown-m [...]
   position: absolute;
 }
 .navbar-expand .navbar-nav .nav-link {
@@ -12494,7 +12494,6 @@ tobago-image > img {
   max-height: inherit;
 }
 
-/* in ----------------------------------------------------------- */
 tobago-in {
   display: block;
 }
@@ -12520,23 +12519,34 @@ tobago-in .input-group tobago-select-one-choice.form-select {
 tobago-in .input-group tobago-select-one-choice.form-select > .form-select {
   border: 0;
 }
-tobago-in.autocomplete[data-loading=true] .autocomplete-pseudo-container {
+tobago-in .spinner {
+  display: none;
   position: absolute;
 }
-tobago-in.autocomplete[data-loading=true] .autocomplete-pseudo-container:after {
+tobago-in .spinner.tobago-show {
+  display: block;
+}
+tobago-in .spinner:after {
   content: "";
   border: 3px solid rgba(0, 0, 0, 0.12);
   border-right-color: rgba(0, 0, 0, 0.48);
   border-radius: 100%;
-  width: 20px;
-  height: 20px;
+  width: 100%;
+  height: 100%;
+  top: 50%;
   position: absolute;
   z-index: 5;
   transform: translateY(-50%);
   animation: rotate 1s linear infinite;
 }
-tobago-in .autocomplete-result-list {
-  cursor: pointer;
+tobago-in .tobago-dropdown-menu-anchor > .tobago-dropdown-menu {
+  /* Use .tobago-dropdown-menu instead of .dropdown-menu to prevent Bootstrap from creating a dropdown instance.
+     This leads to javascript error if arrow up/down is pressed. */
+  position: fixed;
+  overflow: auto;
+  overscroll-behavior: none;
+  margin: var(--tobago-dropdown-menu-offset);
+  z-index: var(--tobago-dropdown-menu-z-index);
 }
 tobago-in tobago-suggest {
   display: none;
@@ -13037,6 +13047,15 @@ tobago-page .tobago-page-menuStore .tobago-options .table tfoot tr.tobago-no-ent
 tobago-page .tobago-page-menuStore .tobago-options .table tfoot tr.tobago-no-entries td {
   border-bottom-width: 0;
 }
+tobago-page .tobago-page-menuStore > .tobago-dropdown-menu {
+  /* Use .tobago-dropdown-menu instead of .dropdown-menu to prevent Bootstrap from creating a dropdown instance.
+     This leads to javascript error if arrow up/down is pressed. */
+  position: fixed;
+  overflow: auto;
+  overscroll-behavior: none;
+  margin: var(--tobago-dropdown-menu-offset);
+  z-index: var(--tobago-dropdown-menu-z-index);
+}
 tobago-page .tobago-page-popoverStore .popover .popover-body {
   white-space: pre-line;
 }
diff --git a/tobago-theme/tobago-theme-scarborough/src/main/css/tobago.css.map b/tobago-theme/tobago-theme-scarborough/src/main/css/tobago.css.map
index c1fd9eb9d9..5a16e2c9ae 100644
--- a/tobago-theme/tobago-theme-scarborough/src/main/css/tobago.css.map
+++ b/tobago-theme/tobago-theme-scarborough/src/main/css/tobago.css.map
@@ -1 +1 @@
-{"version":3,"sources":["tobago.css","../scss/tobago-theme.scss","../scss/_custom.scss","../../../../node_modules/bootstrap/scss/mixins/_banner.scss","../../../../node_modules/bootstrap/scss/_root.scss","../../../../node_modules/bootstrap/scss/vendor/_rfs.scss","../../../../node_modules/bootstrap/scss/mixins/_color-mode.scss","../../../../node_modules/bootstrap/scss/_reboot.scss","../../../../node_modules/bootstrap/scss/_variables.scss","../../../../node_modules/bootstrap/scss/mixins/_bo [...]
\ No newline at end of file
+{"version":3,"sources":["tobago.css","../scss/tobago-theme.scss","../scss/_custom.scss","../../../../node_modules/bootstrap/scss/mixins/_banner.scss","../../../../node_modules/bootstrap/scss/_root.scss","../../../../node_modules/bootstrap/scss/vendor/_rfs.scss","../../../../node_modules/bootstrap/scss/mixins/_color-mode.scss","../../../../node_modules/bootstrap/scss/_reboot.scss","../../../../node_modules/bootstrap/scss/_variables.scss","../../../../node_modules/bootstrap/scss/mixins/_bo [...]
\ No newline at end of file
diff --git a/tobago-theme/tobago-theme-scarborough/src/main/css/tobago.min.css b/tobago-theme/tobago-theme-scarborough/src/main/css/tobago.min.css
index 1e64a41197..cad89fa1c8 100644
--- a/tobago-theme/tobago-theme-scarborough/src/main/css/tobago.min.css
+++ b/tobago-theme/tobago-theme-scarborough/src/main/css/tobago.min.css
@@ -1,2 +1,2 @@
-@charset "UTF-8";:root,[data-bs-theme=light]{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-black:#000;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-gray-100:#f8f9fa;--bs-gray-200:#e9ecef;--bs-gray-300:#dee2e6;--bs-gray-400:#ced4da;--bs-gray-500:#adb5bd;--bs-gray-600:#6c757d;--bs-gray-700:#495057;--bs-gray-800:#343a40;--bs-gray- [...]
+@charset "UTF-8";:root,[data-bs-theme=light]{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-black:#000;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-gray-100:#f8f9fa;--bs-gray-200:#e9ecef;--bs-gray-300:#dee2e6;--bs-gray-400:#ced4da;--bs-gray-500:#adb5bd;--bs-gray-600:#6c757d;--bs-gray-700:#495057;--bs-gray-800:#343a40;--bs-gray- [...]
 /*# sourceMappingURL=tobago.min.css.map */
\ No newline at end of file
diff --git a/tobago-theme/tobago-theme-scarborough/src/main/css/tobago.min.css.map b/tobago-theme/tobago-theme-scarborough/src/main/css/tobago.min.css.map
index 8b1852daca..b863cbbad1 100644
--- a/tobago-theme/tobago-theme-scarborough/src/main/css/tobago.min.css.map
+++ b/tobago-theme/tobago-theme-scarborough/src/main/css/tobago.min.css.map
@@ -1 +1 @@
-{"version":3,"sources":["tobago-theme-scarborough/src/main/css/tobago.css"],"names":[],"mappings":"iBAwCA,MACA,sBACE,UAAW,QACX,YAAa,QACb,YAAa,QACb,UAAW,QACX,SAAU,QACV,YAAa,QACb,YAAa,QACb,WAAY,QACZ,UAAW,QACX,UAAW,QACX,WAAY,KACZ,WAAY,KACZ,UAAW,QACX,eAAgB,QAChB,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,aAAc,QACd,eAAgB,QAChB,aAAc,QACd,UAAW,QACX,aAAc,QACd,YAAa,QACb,WAAY,QACZ,UAAW,QACX,iBAAkB,EAAE,CAAE,GAAG,CAAE,IAC3B,mBAAoB,GAAG,CAAE,GAAG,CAAE,I [...]
\ No newline at end of file
+{"version":3,"sources":["tobago-theme-scarborough/src/main/css/tobago.css"],"names":[],"mappings":"iBAwCA,MACA,sBACE,UAAW,QACX,YAAa,QACb,YAAa,QACb,UAAW,QACX,SAAU,QACV,YAAa,QACb,YAAa,QACb,WAAY,QACZ,UAAW,QACX,UAAW,QACX,WAAY,KACZ,WAAY,KACZ,UAAW,QACX,eAAgB,QAChB,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,aAAc,QACd,eAAgB,QAChB,aAAc,QACd,UAAW,QACX,aAAc,QACd,YAAa,QACb,WAAY,QACZ,UAAW,QACX,iBAAkB,EAAE,CAAE,GAAG,CAAE,IAC3B,mBAAoB,GAAG,CAAE,GAAG,CAAE,I [...]
\ No newline at end of file
diff --git a/tobago-theme/tobago-theme-speyside/src/main/css/tobago.css b/tobago-theme/tobago-theme-speyside/src/main/css/tobago.css
index cbddbf0b19..68cd18d3cc 100644
--- a/tobago-theme/tobago-theme-speyside/src/main/css/tobago.css
+++ b/tobago-theme/tobago-theme-speyside/src/main/css/tobago.css
@@ -3371,7 +3371,7 @@ .dropdown-toggle:empty::after {
   margin-left: 0;
 }
 
-.dropdown-menu, tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore .tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore > .tobago-dropdown-menu, tobago-dropdown > .tobago-dropdown-menu {
+.dropdown-menu, tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore .tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore > .tobago-dropdown-menu, tobago-in .tobago-dropdown-menu-anchor > .tobago-dropdown-menu, tobago-dropdown > .tobago-dropdown-menu {
   --bs-dropdown-zindex: 1000;
   --bs-dropdown-min-width: 10rem;
   --bs-dropdown-padding-x: 0;
@@ -3412,7 +3412,7 @@ .dropdown-menu, tobago-select-many-list .tobago-options.tobago-dropdown-menu, to
   background-clip: padding-box;
   border: var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color);
 }
-.dropdown-menu[data-bs-popper], tobago-select-many-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-select-one-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore > [data-bs-popper].tobago-dropdown-menu, tobago-dropdown > [data-bs-popper].tobago-dropdown-menu {
+.dropdown-menu[data-bs-popper], tobago-select-many-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-select-one-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore > [data-bs-popper].tobago-dropdown-menu, tobago-in .tobago-dropdown-menu-anchor > [data-bs-popper].tobago-dropdown-menu, tobago-dropdown > [data-bs-popper].tobago-dropdown-menu {
   top: 100%;
   left: 0;
   margin-top: var(--bs-dropdown-spacer);
@@ -3514,7 +3514,7 @@ @media (min-width: 1400px) {
     left: auto;
   }
 }
-.dropup .dropdown-menu[data-bs-popper], .dropup tobago-select-many-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-select-many-list .dropup [data-bs-popper].tobago-options.tobago-dropdown-menu, .dropup tobago-select-one-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-select-one-list .dropup [data-bs-popper].tobago-options.tobago-dropdown-menu, .dropup tobago-page .tobago-page-menuStore [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-page . [...]
+.dropup .dropdown-menu[data-bs-popper], .dropup tobago-select-many-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-select-many-list .dropup [data-bs-popper].tobago-options.tobago-dropdown-menu, .dropup tobago-select-one-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-select-one-list .dropup [data-bs-popper].tobago-options.tobago-dropdown-menu, .dropup tobago-page .tobago-page-menuStore [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-page . [...]
   top: auto;
   bottom: 100%;
   margin-top: 0;
@@ -3534,7 +3534,7 @@ .dropup .dropdown-toggle:empty::after {
   margin-left: 0;
 }
 
-.dropend .dropdown-menu[data-bs-popper], .dropend tobago-select-many-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-select-many-list .dropend [data-bs-popper].tobago-options.tobago-dropdown-menu, .dropend tobago-select-one-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-select-one-list .dropend [data-bs-popper].tobago-options.tobago-dropdown-menu, .dropend tobago-page .tobago-page-menuStore [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago- [...]
+.dropend .dropdown-menu[data-bs-popper], .dropend tobago-select-many-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-select-many-list .dropend [data-bs-popper].tobago-options.tobago-dropdown-menu, .dropend tobago-select-one-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-select-one-list .dropend [data-bs-popper].tobago-options.tobago-dropdown-menu, .dropend tobago-page .tobago-page-menuStore [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago- [...]
   top: 0;
   right: auto;
   left: 100%;
@@ -3558,7 +3558,7 @@ .dropend .dropdown-toggle::after {
   vertical-align: 0;
 }
 
-.dropstart .dropdown-menu[data-bs-popper], .dropstart tobago-select-many-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-select-many-list .dropstart [data-bs-popper].tobago-options.tobago-dropdown-menu, .dropstart tobago-select-one-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-select-one-list .dropstart [data-bs-popper].tobago-options.tobago-dropdown-menu, .dropstart tobago-page .tobago-page-menuStore [data-bs-popper].tobago-options.tobago-dropdown-m [...]
+.dropstart .dropdown-menu[data-bs-popper], .dropstart tobago-select-many-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-select-many-list .dropstart [data-bs-popper].tobago-options.tobago-dropdown-menu, .dropstart tobago-select-one-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-select-one-list .dropstart [data-bs-popper].tobago-options.tobago-dropdown-menu, .dropstart tobago-page .tobago-page-menuStore [data-bs-popper].tobago-options.tobago-dropdown-m [...]
   top: 0;
   right: 100%;
   left: auto;
@@ -3626,7 +3626,7 @@ .dropdown-item.disabled, .dropdown-item:disabled {
   background-color: transparent;
 }
 
-.dropdown-menu.show, tobago-select-many-list .show.tobago-options.tobago-dropdown-menu, tobago-select-one-list .show.tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore .show.tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore > .show.tobago-dropdown-menu, tobago-dropdown > .show.tobago-dropdown-menu {
+.dropdown-menu.show, tobago-select-many-list .show.tobago-options.tobago-dropdown-menu, tobago-select-one-list .show.tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore .show.tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore > .show.tobago-dropdown-menu, tobago-in .tobago-dropdown-menu-anchor > .show.tobago-dropdown-menu, tobago-dropdown > .show.tobago-dropdown-menu {
   display: block;
 }
 
@@ -3800,7 +3800,7 @@ .nav-tabs .nav-item.show .nav-link {
   background-color: var(--bs-nav-tabs-link-active-bg);
   border-color: var(--bs-nav-tabs-link-active-border-color);
 }
-.nav-tabs .dropdown-menu, .nav-tabs tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .nav-tabs .tobago-options.tobago-dropdown-menu, .nav-tabs tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .nav-tabs .tobago-options.tobago-dropdown-menu, .nav-tabs tobago-page .tobago-page-menuStore .tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore .nav-tabs .tobago-options.tobago-dropdown-menu, .nav-tabs toba [...]
+.nav-tabs .dropdown-menu, .nav-tabs tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .nav-tabs .tobago-options.tobago-dropdown-menu, .nav-tabs tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .nav-tabs .tobago-options.tobago-dropdown-menu, .nav-tabs tobago-page .tobago-page-menuStore .tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore .nav-tabs .tobago-options.tobago-dropdown-menu, .nav-tabs toba [...]
   margin-top: calc(-1 * var(--bs-nav-tabs-border-width));
 }
 
@@ -3930,7 +3930,7 @@ .navbar-nav {
 .navbar-nav .nav-link.active, .navbar-nav .nav-link.show {
   color: var(--bs-navbar-active-color);
 }
-.navbar-nav .dropdown-menu, .navbar-nav tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-nav tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-nav tobago-page .tobago-page-menuStore .tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore .navbar-nav .tobago-options.tobago-dropdown-menu,  [...]
+.navbar-nav .dropdown-menu, .navbar-nav tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-nav tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-nav tobago-page .tobago-page-menuStore .tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore .navbar-nav .tobago-options.tobago-dropdown-menu,  [...]
   position: static;
 }
 
@@ -3998,7 +3998,7 @@ @media (min-width: 576px) {
   .navbar-expand-sm .navbar-nav {
     flex-direction: row;
   }
-  .navbar-expand-sm .navbar-nav .dropdown-menu, .navbar-expand-sm .navbar-nav tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .navbar-expand-sm .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-sm .navbar-nav tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .navbar-expand-sm .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-sm .navbar-nav tobago-page .tobago-page-menuStore .tobago-optio [...]
+  .navbar-expand-sm .navbar-nav .dropdown-menu, .navbar-expand-sm .navbar-nav tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .navbar-expand-sm .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-sm .navbar-nav tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .navbar-expand-sm .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-sm .navbar-nav tobago-page .tobago-page-menuStore .tobago-optio [...]
     position: absolute;
   }
   .navbar-expand-sm .navbar-nav .nav-link {
@@ -4045,7 +4045,7 @@ @media (min-width: 768px) {
   .navbar-expand-md .navbar-nav {
     flex-direction: row;
   }
-  .navbar-expand-md .navbar-nav .dropdown-menu, .navbar-expand-md .navbar-nav tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .navbar-expand-md .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-md .navbar-nav tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .navbar-expand-md .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-md .navbar-nav tobago-page .tobago-page-menuStore .tobago-optio [...]
+  .navbar-expand-md .navbar-nav .dropdown-menu, .navbar-expand-md .navbar-nav tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .navbar-expand-md .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-md .navbar-nav tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .navbar-expand-md .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-md .navbar-nav tobago-page .tobago-page-menuStore .tobago-optio [...]
     position: absolute;
   }
   .navbar-expand-md .navbar-nav .nav-link {
@@ -4092,7 +4092,7 @@ @media (min-width: 992px) {
   .navbar-expand-lg .navbar-nav {
     flex-direction: row;
   }
-  .navbar-expand-lg .navbar-nav .dropdown-menu, .navbar-expand-lg .navbar-nav tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .navbar-expand-lg .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-lg .navbar-nav tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .navbar-expand-lg .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-lg .navbar-nav tobago-page .tobago-page-menuStore .tobago-optio [...]
+  .navbar-expand-lg .navbar-nav .dropdown-menu, .navbar-expand-lg .navbar-nav tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .navbar-expand-lg .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-lg .navbar-nav tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .navbar-expand-lg .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-lg .navbar-nav tobago-page .tobago-page-menuStore .tobago-optio [...]
     position: absolute;
   }
   .navbar-expand-lg .navbar-nav .nav-link {
@@ -4139,7 +4139,7 @@ @media (min-width: 1200px) {
   .navbar-expand-xl .navbar-nav {
     flex-direction: row;
   }
-  .navbar-expand-xl .navbar-nav .dropdown-menu, .navbar-expand-xl .navbar-nav tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .navbar-expand-xl .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-xl .navbar-nav tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .navbar-expand-xl .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-xl .navbar-nav tobago-page .tobago-page-menuStore .tobago-optio [...]
+  .navbar-expand-xl .navbar-nav .dropdown-menu, .navbar-expand-xl .navbar-nav tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .navbar-expand-xl .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-xl .navbar-nav tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .navbar-expand-xl .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-xl .navbar-nav tobago-page .tobago-page-menuStore .tobago-optio [...]
     position: absolute;
   }
   .navbar-expand-xl .navbar-nav .nav-link {
@@ -4186,7 +4186,7 @@ @media (min-width: 1400px) {
   .navbar-expand-xxl .navbar-nav {
     flex-direction: row;
   }
-  .navbar-expand-xxl .navbar-nav .dropdown-menu, .navbar-expand-xxl .navbar-nav tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .navbar-expand-xxl .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-xxl .navbar-nav tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .navbar-expand-xxl .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-xxl .navbar-nav tobago-page .tobago-page-menuStore .tobago [...]
+  .navbar-expand-xxl .navbar-nav .dropdown-menu, .navbar-expand-xxl .navbar-nav tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .navbar-expand-xxl .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-xxl .navbar-nav tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .navbar-expand-xxl .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-xxl .navbar-nav tobago-page .tobago-page-menuStore .tobago [...]
     position: absolute;
   }
   .navbar-expand-xxl .navbar-nav .nav-link {
@@ -4232,7 +4232,7 @@ .navbar-expand {
 .navbar-expand .navbar-nav {
   flex-direction: row;
 }
-.navbar-expand .navbar-nav .dropdown-menu, .navbar-expand .navbar-nav tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .navbar-expand .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand .navbar-nav tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .navbar-expand .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand .navbar-nav tobago-page .tobago-page-menuStore .tobago-options.tobago-dropdown-m [...]
+.navbar-expand .navbar-nav .dropdown-menu, .navbar-expand .navbar-nav tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .navbar-expand .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand .navbar-nav tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .navbar-expand .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand .navbar-nav tobago-page .tobago-page-menuStore .tobago-options.tobago-dropdown-m [...]
   position: absolute;
 }
 .navbar-expand .navbar-nav .nav-link {
@@ -12195,7 +12195,6 @@ tobago-image > img {
   max-height: inherit;
 }
 
-/* in ----------------------------------------------------------- */
 tobago-in {
   display: block;
 }
@@ -12221,23 +12220,34 @@ tobago-in .input-group tobago-select-one-choice.form-select {
 tobago-in .input-group tobago-select-one-choice.form-select > .form-select {
   border: 0;
 }
-tobago-in.autocomplete[data-loading=true] .autocomplete-pseudo-container {
+tobago-in .spinner {
+  display: none;
   position: absolute;
 }
-tobago-in.autocomplete[data-loading=true] .autocomplete-pseudo-container:after {
+tobago-in .spinner.tobago-show {
+  display: block;
+}
+tobago-in .spinner:after {
   content: "";
   border: 3px solid rgba(0, 0, 0, 0.12);
   border-right-color: rgba(0, 0, 0, 0.48);
   border-radius: 100%;
-  width: 20px;
-  height: 20px;
+  width: 100%;
+  height: 100%;
+  top: 50%;
   position: absolute;
   z-index: 5;
   transform: translateY(-50%);
   animation: rotate 1s linear infinite;
 }
-tobago-in .autocomplete-result-list {
-  cursor: pointer;
+tobago-in .tobago-dropdown-menu-anchor > .tobago-dropdown-menu {
+  /* Use .tobago-dropdown-menu instead of .dropdown-menu to prevent Bootstrap from creating a dropdown instance.
+     This leads to javascript error if arrow up/down is pressed. */
+  position: fixed;
+  overflow: auto;
+  overscroll-behavior: none;
+  margin: var(--tobago-dropdown-menu-offset);
+  z-index: var(--tobago-dropdown-menu-z-index);
 }
 tobago-in tobago-suggest {
   display: none;
@@ -12733,6 +12743,15 @@ tobago-page .tobago-page-menuStore .tobago-options .table tfoot tr.tobago-no-ent
 tobago-page .tobago-page-menuStore .tobago-options .table tfoot tr.tobago-no-entries td {
   border-bottom-width: 0;
 }
+tobago-page .tobago-page-menuStore > .tobago-dropdown-menu {
+  /* Use .tobago-dropdown-menu instead of .dropdown-menu to prevent Bootstrap from creating a dropdown instance.
+     This leads to javascript error if arrow up/down is pressed. */
+  position: fixed;
+  overflow: auto;
+  overscroll-behavior: none;
+  margin: var(--tobago-dropdown-menu-offset);
+  z-index: var(--tobago-dropdown-menu-z-index);
+}
 tobago-page .tobago-page-popoverStore .popover .popover-body {
   white-space: pre-line;
 }
@@ -14115,7 +14134,7 @@ .navbar-brand button.tobago-link {
   font-weight: bold;
 }
 
-.navbar .nav-item.dropdown > .dropdown-menu, .navbar tobago-dropdown.nav-item.dropdown > .tobago-dropdown-menu, .navbar tobago-page .nav-item.dropdown.tobago-page-menuStore > .tobago-dropdown-menu, tobago-page .navbar .nav-item.dropdown.tobago-page-menuStore > .tobago-dropdown-menu, .navbar tobago-page .tobago-page-menuStore .nav-item.dropdown > .tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore .navbar .nav-item.dropdown > .tobago-options.tobago-dropdown-menu, .nav [...]
+.navbar .nav-item.dropdown > .dropdown-menu, .navbar tobago-dropdown.nav-item.dropdown > .tobago-dropdown-menu, .navbar tobago-in .nav-item.dropdown.tobago-dropdown-menu-anchor > .tobago-dropdown-menu, tobago-in .navbar .nav-item.dropdown.tobago-dropdown-menu-anchor > .tobago-dropdown-menu, .navbar tobago-page .nav-item.dropdown.tobago-page-menuStore > .tobago-dropdown-menu, tobago-page .navbar .nav-item.dropdown.tobago-page-menuStore > .tobago-dropdown-menu, .navbar tobago-page .tobago- [...]
   border: 0;
   background: #e3e4e5;
   margin-top: 0;
@@ -14272,7 +14291,7 @@ @media (min-width: 992px) {
   tobago-header.sticky-top .nav-item.dropdown > button.dropdown-toggle:hover, tobago-header.sticky-top .nav-item.dropdown > button.dropdown-toggle:focus {
     color: #d90;
   }
-  tobago-header.sticky-top .nav-item.dropdown > .dropdown-menu, tobago-header.sticky-top tobago-dropdown.nav-item.dropdown > .tobago-dropdown-menu, tobago-header.sticky-top tobago-page .nav-item.dropdown.tobago-page-menuStore > .tobago-dropdown-menu, tobago-page tobago-header.sticky-top .nav-item.dropdown.tobago-page-menuStore > .tobago-dropdown-menu, tobago-header.sticky-top tobago-page .tobago-page-menuStore .nav-item.dropdown > .tobago-options.tobago-dropdown-menu, tobago-page .tobago [...]
+  tobago-header.sticky-top .nav-item.dropdown > .dropdown-menu, tobago-header.sticky-top tobago-dropdown.nav-item.dropdown > .tobago-dropdown-menu, tobago-header.sticky-top tobago-in .nav-item.dropdown.tobago-dropdown-menu-anchor > .tobago-dropdown-menu, tobago-in tobago-header.sticky-top .nav-item.dropdown.tobago-dropdown-menu-anchor > .tobago-dropdown-menu, tobago-header.sticky-top tobago-page .nav-item.dropdown.tobago-page-menuStore > .tobago-dropdown-menu, tobago-page tobago-header.s [...]
     position: fixed;
     width: 100%;
     top: auto;
@@ -14282,7 +14301,7 @@ @media (min-width: 992px) {
     line-height: initial;
     padding: 0 10% 1em 10%;
   }
-  tobago-header.sticky-top .nav-item.dropdown > .dropdown-menu > .dropdown-item, tobago-header.sticky-top tobago-dropdown.nav-item.dropdown > .tobago-dropdown-menu > .dropdown-item, tobago-header.sticky-top tobago-page .nav-item.dropdown.tobago-page-menuStore > .tobago-dropdown-menu > .dropdown-item, tobago-page tobago-header.sticky-top .nav-item.dropdown.tobago-page-menuStore > .tobago-dropdown-menu > .dropdown-item, tobago-header.sticky-top tobago-page .tobago-page-menuStore .nav-item. [...]
+  tobago-header.sticky-top .nav-item.dropdown > .dropdown-menu > .dropdown-item, tobago-header.sticky-top tobago-dropdown.nav-item.dropdown > .tobago-dropdown-menu > .dropdown-item, tobago-header.sticky-top tobago-in .nav-item.dropdown.tobago-dropdown-menu-anchor > .tobago-dropdown-menu > .dropdown-item, tobago-in tobago-header.sticky-top .nav-item.dropdown.tobago-dropdown-menu-anchor > .tobago-dropdown-menu > .dropdown-item, tobago-header.sticky-top tobago-page .nav-item.dropdown.tobago [...]
     display: inline-block;
     font-size: 1.3em;
     width: calc(25% - 3px);
@@ -14290,7 +14309,7 @@ @media (min-width: 992px) {
     vertical-align: top;
     padding-top: 1em;
   }
-  tobago-header.sticky-top .nav-item.dropdown > .dropdown-menu > .dropdown-item > a, tobago-header.sticky-top tobago-dropdown.nav-item.dropdown > .tobago-dropdown-menu > .dropdown-item > a, tobago-header.sticky-top tobago-page .nav-item.dropdown.tobago-page-menuStore > .tobago-dropdown-menu > .dropdown-item > a, tobago-page tobago-header.sticky-top .nav-item.dropdown.tobago-page-menuStore > .tobago-dropdown-menu > .dropdown-item > a, tobago-header.sticky-top tobago-page .tobago-page-menu [...]
+  tobago-header.sticky-top .nav-item.dropdown > .dropdown-menu > .dropdown-item > a, tobago-header.sticky-top tobago-dropdown.nav-item.dropdown > .tobago-dropdown-menu > .dropdown-item > a, tobago-header.sticky-top tobago-in .nav-item.dropdown.tobago-dropdown-menu-anchor > .tobago-dropdown-menu > .dropdown-item > a, tobago-in tobago-header.sticky-top .nav-item.dropdown.tobago-dropdown-menu-anchor > .tobago-dropdown-menu > .dropdown-item > a, tobago-header.sticky-top tobago-page .nav-item [...]
     margin-bottom: 0.5em;
   }
   tobago-header.sticky-top .navbar-nav > .nav-item.dropdown > .dropdown-toggle {
@@ -14308,30 +14327,30 @@ @media (min-width: 992px) {
   tobago-header.sticky-top .tobago-dropdown-submenu.dropdown-item {
     display: block;
   }
-  tobago-header.sticky-top .tobago-dropdown-submenu.dropdown-item > .dropdown-menu, tobago-header.sticky-top tobago-dropdown.tobago-dropdown-submenu.dropdown-item > .tobago-dropdown-menu, tobago-header.sticky-top tobago-page .tobago-dropdown-submenu.dropdown-item.tobago-page-menuStore > .tobago-dropdown-menu, tobago-page tobago-header.sticky-top .tobago-dropdown-submenu.dropdown-item.tobago-page-menuStore > .tobago-dropdown-menu, tobago-header.sticky-top tobago-page .tobago-page-menuStor [...]
+  tobago-header.sticky-top .tobago-dropdown-submenu.dropdown-item > .dropdown-menu, tobago-header.sticky-top tobago-dropdown.tobago-dropdown-submenu.dropdown-item > .tobago-dropdown-menu, tobago-header.sticky-top tobago-in .tobago-dropdown-submenu.dropdown-item.tobago-dropdown-menu-anchor > .tobago-dropdown-menu, tobago-in tobago-header.sticky-top .tobago-dropdown-submenu.dropdown-item.tobago-dropdown-menu-anchor > .tobago-dropdown-menu, tobago-header.sticky-top tobago-page .tobago-dropd [...]
     display: block;
     border-radius: 0;
     position: static;
     float: none;
     padding: 0;
   }
-  tobago-header.sticky-top .tobago-dropdown-submenu.dropdown-item > .dropdown-menu .dropdown-item, tobago-header.sticky-top tobago-dropdown.tobago-dropdown-submenu.dropdown-item > .tobago-dropdown-menu .dropdown-item, tobago-header.sticky-top tobago-page .tobago-dropdown-submenu.dropdown-item.tobago-page-menuStore > .tobago-dropdown-menu .dropdown-item, tobago-page tobago-header.sticky-top .tobago-dropdown-submenu.dropdown-item.tobago-page-menuStore > .tobago-dropdown-menu .dropdown-item [...]
+  tobago-header.sticky-top .tobago-dropdown-submenu.dropdown-item > .dropdown-menu .dropdown-item, tobago-header.sticky-top tobago-dropdown.tobago-dropdown-submenu.dropdown-item > .tobago-dropdown-menu .dropdown-item, tobago-header.sticky-top tobago-in .tobago-dropdown-submenu.dropdown-item.tobago-dropdown-menu-anchor > .tobago-dropdown-menu .dropdown-item, tobago-in tobago-header.sticky-top .tobago-dropdown-submenu.dropdown-item.tobago-dropdown-menu-anchor > .tobago-dropdown-menu .dropd [...]
     padding-left: 0;
   }
-  tobago-header.sticky-top .tobago-dropdown-submenu.dropdown-item > .dropdown-menu .dropdown-item::before, tobago-header.sticky-top tobago-dropdown.tobago-dropdown-submenu.dropdown-item > .tobago-dropdown-menu .dropdown-item::before, tobago-header.sticky-top tobago-page .tobago-dropdown-submenu.dropdown-item.tobago-page-menuStore > .tobago-dropdown-menu .dropdown-item::before, tobago-page tobago-header.sticky-top .tobago-dropdown-submenu.dropdown-item.tobago-page-menuStore > .tobago-drop [...]
+  tobago-header.sticky-top .tobago-dropdown-submenu.dropdown-item > .dropdown-menu .dropdown-item::before, tobago-header.sticky-top tobago-dropdown.tobago-dropdown-submenu.dropdown-item > .tobago-dropdown-menu .dropdown-item::before, tobago-header.sticky-top tobago-in .tobago-dropdown-submenu.dropdown-item.tobago-dropdown-menu-anchor > .tobago-dropdown-menu .dropdown-item::before, tobago-in tobago-header.sticky-top .tobago-dropdown-submenu.dropdown-item.tobago-dropdown-menu-anchor > .tob [...]
     content: "> ";
     position: relative;
     vertical-align: top;
   }
-  tobago-header.sticky-top .tobago-dropdown-submenu.dropdown-item > .dropdown-menu .custom-radio > .dropdown-item, tobago-header.sticky-top tobago-dropdown.tobago-dropdown-submenu.dropdown-item > .tobago-dropdown-menu .custom-radio > .dropdown-item, tobago-header.sticky-top tobago-page .tobago-dropdown-submenu.dropdown-item.tobago-page-menuStore > .tobago-dropdown-menu .custom-radio > .dropdown-item, tobago-page tobago-header.sticky-top .tobago-dropdown-submenu.dropdown-item.tobago-page- [...]
+  tobago-header.sticky-top .tobago-dropdown-submenu.dropdown-item > .dropdown-menu .custom-radio > .dropdown-item, tobago-header.sticky-top tobago-dropdown.tobago-dropdown-submenu.dropdown-item > .tobago-dropdown-menu .custom-radio > .dropdown-item, tobago-header.sticky-top tobago-in .tobago-dropdown-submenu.dropdown-item.tobago-dropdown-menu-anchor > .tobago-dropdown-menu .custom-radio > .dropdown-item, tobago-in tobago-header.sticky-top .tobago-dropdown-submenu.dropdown-item.tobago-dro [...]
     padding-left: 1.5rem;
   }
-  tobago-header.sticky-top .tobago-dropdown-submenu.dropdown-item > .dropdown-menu .custom-radio > .dropdown-item::before, tobago-header.sticky-top tobago-dropdown.tobago-dropdown-submenu.dropdown-item > .tobago-dropdown-menu .custom-radio > .dropdown-item::before, tobago-header.sticky-top tobago-page .tobago-dropdown-submenu.dropdown-item.tobago-page-menuStore > .tobago-dropdown-menu .custom-radio > .dropdown-item::before, tobago-page tobago-header.sticky-top .tobago-dropdown-submenu.dr [...]
+  tobago-header.sticky-top .tobago-dropdown-submenu.dropdown-item > .dropdown-menu .custom-radio > .dropdown-item::before, tobago-header.sticky-top tobago-dropdown.tobago-dropdown-submenu.dropdown-item > .tobago-dropdown-menu .custom-radio > .dropdown-item::before, tobago-header.sticky-top tobago-in .tobago-dropdown-submenu.dropdown-item.tobago-dropdown-menu-anchor > .tobago-dropdown-menu .custom-radio > .dropdown-item::before, tobago-in tobago-header.sticky-top .tobago-dropdown-submenu. [...]
     content: "";
     position: absolute;
     margin-left: -1.5rem;
   }
-  tobago-header.sticky-top .tobago-dropdown-submenu.dropdown-item > .dropdown-menu .custom-radio > .dropdown-item::after, tobago-header.sticky-top tobago-dropdown.tobago-dropdown-submenu.dropdown-item > .tobago-dropdown-menu .custom-radio > .dropdown-item::after, tobago-header.sticky-top tobago-page .tobago-dropdown-submenu.dropdown-item.tobago-page-menuStore > .tobago-dropdown-menu .custom-radio > .dropdown-item::after, tobago-page tobago-header.sticky-top .tobago-dropdown-submenu.dropd [...]
+  tobago-header.sticky-top .tobago-dropdown-submenu.dropdown-item > .dropdown-menu .custom-radio > .dropdown-item::after, tobago-header.sticky-top tobago-dropdown.tobago-dropdown-submenu.dropdown-item > .tobago-dropdown-menu .custom-radio > .dropdown-item::after, tobago-header.sticky-top tobago-in .tobago-dropdown-submenu.dropdown-item.tobago-dropdown-menu-anchor > .tobago-dropdown-menu .custom-radio > .dropdown-item::after, tobago-in tobago-header.sticky-top .tobago-dropdown-submenu.dro [...]
     left: 0;
   }
   tobago-header.sticky-top .tobago-dropdown-submenu::after {
@@ -14657,14 +14676,14 @@ .tobago-selectOneRadio .form-check-label input[type=radio][readonly] + .tobago-i
   background: #f7f7f7;
 }
 
-.tobago-dropdown-submenu > .dropdown-menu, tobago-dropdown.tobago-dropdown-submenu > .tobago-dropdown-menu, tobago-page .tobago-dropdown-submenu.tobago-page-menuStore > .tobago-dropdown-menu, tobago-page .tobago-page-menuStore .tobago-dropdown-submenu > .tobago-options.tobago-dropdown-menu, tobago-select-one-list .tobago-dropdown-submenu > .tobago-options.tobago-dropdown-menu, tobago-select-many-list .tobago-dropdown-submenu > .tobago-options.tobago-dropdown-menu {
+.tobago-dropdown-submenu > .dropdown-menu, tobago-dropdown.tobago-dropdown-submenu > .tobago-dropdown-menu, tobago-in .tobago-dropdown-submenu.tobago-dropdown-menu-anchor > .tobago-dropdown-menu, tobago-page .tobago-dropdown-submenu.tobago-page-menuStore > .tobago-dropdown-menu, tobago-page .tobago-page-menuStore .tobago-dropdown-submenu > .tobago-options.tobago-dropdown-menu, tobago-select-one-list .tobago-dropdown-submenu > .tobago-options.tobago-dropdown-menu, tobago-select-many-list  [...]
   border-radius: 0;
 }
 
-.dropdown-menu, tobago-dropdown > .tobago-dropdown-menu, tobago-page .tobago-page-menuStore > .tobago-dropdown-menu, tobago-page .tobago-page-menuStore .tobago-options.tobago-dropdown-menu, tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .tobago-options.tobago-dropdown-menu {
+.dropdown-menu, tobago-dropdown > .tobago-dropdown-menu, tobago-in .tobago-dropdown-menu-anchor > .tobago-dropdown-menu, tobago-page .tobago-page-menuStore > .tobago-dropdown-menu, tobago-page .tobago-page-menuStore .tobago-options.tobago-dropdown-menu, tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .tobago-options.tobago-dropdown-menu {
   border-radius: 0;
 }
-.dropdown-menu .tobago-selectBooleanCheckbox .form-check-label, tobago-dropdown > .tobago-dropdown-menu .tobago-selectBooleanCheckbox .form-check-label, tobago-page .tobago-page-menuStore > .tobago-dropdown-menu .tobago-selectBooleanCheckbox .form-check-label, tobago-page .tobago-page-menuStore .tobago-options.tobago-dropdown-menu .tobago-selectBooleanCheckbox .form-check-label, tobago-select-one-list .tobago-options.tobago-dropdown-menu .tobago-selectBooleanCheckbox .form-check-label, t [...]
+.dropdown-menu .tobago-selectBooleanCheckbox .form-check-label, tobago-dropdown > .tobago-dropdown-menu .tobago-selectBooleanCheckbox .form-check-label, tobago-in .tobago-dropdown-menu-anchor > .tobago-dropdown-menu .tobago-selectBooleanCheckbox .form-check-label, tobago-page .tobago-page-menuStore > .tobago-dropdown-menu .tobago-selectBooleanCheckbox .form-check-label, tobago-page .tobago-page-menuStore .tobago-options.tobago-dropdown-menu .tobago-selectBooleanCheckbox .form-check-label [...]
   padding-left: 1rem;
 }
 
diff --git a/tobago-theme/tobago-theme-speyside/src/main/css/tobago.css.map b/tobago-theme/tobago-theme-speyside/src/main/css/tobago.css.map
index 8309bd5eeb..4bb66b659d 100644
--- a/tobago-theme/tobago-theme-speyside/src/main/css/tobago.css.map
+++ b/tobago-theme/tobago-theme-speyside/src/main/css/tobago.css.map
@@ -1 +1 @@
-{"version":3,"sources":["tobago.css","../scss/tobago-theme.scss","../scss/_custom.scss","../../../../node_modules/bootstrap/scss/mixins/_banner.scss","../../../../node_modules/bootstrap/scss/_root.scss","../../../../node_modules/bootstrap/scss/vendor/_rfs.scss","../../../../node_modules/bootstrap/scss/mixins/_color-mode.scss","../../../../node_modules/bootstrap/scss/_reboot.scss","../../../../node_modules/bootstrap/scss/_variables.scss","../../../../node_modules/bootstrap/scss/_type.scss [...]
\ No newline at end of file
+{"version":3,"sources":["tobago.css","../scss/tobago-theme.scss","../scss/_custom.scss","../../../../node_modules/bootstrap/scss/mixins/_banner.scss","../../../../node_modules/bootstrap/scss/_root.scss","../../../../node_modules/bootstrap/scss/vendor/_rfs.scss","../../../../node_modules/bootstrap/scss/mixins/_color-mode.scss","../../../../node_modules/bootstrap/scss/_reboot.scss","../../../../node_modules/bootstrap/scss/_variables.scss","../../../../node_modules/bootstrap/scss/_type.scss [...]
\ No newline at end of file
diff --git a/tobago-theme/tobago-theme-speyside/src/main/css/tobago.min.css b/tobago-theme/tobago-theme-speyside/src/main/css/tobago.min.css
index 4bf3fa53df..8194684018 100644
--- a/tobago-theme/tobago-theme-speyside/src/main/css/tobago.min.css
+++ b/tobago-theme/tobago-theme-speyside/src/main/css/tobago.min.css
@@ -1,2 +1,2 @@
-@charset "UTF-8";:root,[data-bs-theme=light]{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:rgb(58, 37, 100);--bs-pink:#d63384;--bs-red:rgb(211, 0, 64);--bs-orange:#d90;--bs-yellow:#ffc107;--bs-green:rgb(29, 163, 50);--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-black:#000;--bs-white:#fff;--bs-gray:rgb(120, 140, 148);--bs-gray-dark:#323232;--bs-gray-100:#f7f7f7;--bs-gray-200:#e3e4e5;--bs-gray-300:#d7d7d7;--bs-gray-400:#ced4da;--bs-gray-500:#acacac;--bs-gray-600:rgb(120, 140, 148);--bs-gray [...]
+@charset "UTF-8";:root,[data-bs-theme=light]{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:rgb(58, 37, 100);--bs-pink:#d63384;--bs-red:rgb(211, 0, 64);--bs-orange:#d90;--bs-yellow:#ffc107;--bs-green:rgb(29, 163, 50);--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-black:#000;--bs-white:#fff;--bs-gray:rgb(120, 140, 148);--bs-gray-dark:#323232;--bs-gray-100:#f7f7f7;--bs-gray-200:#e3e4e5;--bs-gray-300:#d7d7d7;--bs-gray-400:#ced4da;--bs-gray-500:#acacac;--bs-gray-600:rgb(120, 140, 148);--bs-gray [...]
 /*# sourceMappingURL=tobago.min.css.map */
\ No newline at end of file
diff --git a/tobago-theme/tobago-theme-speyside/src/main/css/tobago.min.css.map b/tobago-theme/tobago-theme-speyside/src/main/css/tobago.min.css.map
index 685b631bc5..c09e6a1bc5 100644
--- a/tobago-theme/tobago-theme-speyside/src/main/css/tobago.min.css.map
+++ b/tobago-theme/tobago-theme-speyside/src/main/css/tobago.min.css.map
@@ -1 +1 @@
-{"version":3,"sources":["tobago-theme-speyside/src/main/css/tobago.css"],"names":[],"mappings":"iBAsCA,MACA,sBACE,UAAW,QACX,YAAa,QACb,YAAa,iBACb,UAAW,QACX,SAAU,gBACV,YAAa,KACb,YAAa,QACb,WAAY,iBACZ,UAAW,QACX,UAAW,QACX,WAAY,KACZ,WAAY,KACZ,UAAW,mBACX,eAAgB,QAChB,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,mBACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,aAAc,gBACd,eAAgB,QAChB,aAAc,iBACd,UAAW,QACX,aAAc,QACd,YAAa,gBACb,WAAY,QACZ,UAAW,QACX,iBAAkB,EAAE,CAAE,EAAE,CAAE,GAC1B,mBAAoB,GAAG,CAAE,GAAG,C [...]
\ No newline at end of file
+{"version":3,"sources":["tobago-theme-speyside/src/main/css/tobago.css"],"names":[],"mappings":"iBAsCA,MACA,sBACE,UAAW,QACX,YAAa,QACb,YAAa,iBACb,UAAW,QACX,SAAU,gBACV,YAAa,KACb,YAAa,QACb,WAAY,iBACZ,UAAW,QACX,UAAW,QACX,WAAY,KACZ,WAAY,KACZ,UAAW,mBACX,eAAgB,QAChB,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,mBACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,aAAc,gBACd,eAAgB,QAChB,aAAc,iBACd,UAAW,QACX,aAAc,QACd,YAAa,gBACb,WAAY,QACZ,UAAW,QACX,iBAAkB,EAAE,CAAE,EAAE,CAAE,GAC1B,mBAAoB,GAAG,CAAE,GAAG,C [...]
\ No newline at end of file
diff --git a/tobago-theme/tobago-theme-standard/src/main/css/tobago.css b/tobago-theme/tobago-theme-standard/src/main/css/tobago.css
index e1d2d55033..1edaf8f396 100644
--- a/tobago-theme/tobago-theme-standard/src/main/css/tobago.css
+++ b/tobago-theme/tobago-theme-standard/src/main/css/tobago.css
@@ -3396,7 +3396,7 @@ .dropdown-toggle:empty::after {
   margin-left: 0;
 }
 
-.dropdown-menu, tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore .tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore > .tobago-dropdown-menu, tobago-dropdown > .tobago-dropdown-menu {
+.dropdown-menu, tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore .tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore > .tobago-dropdown-menu, tobago-in .tobago-dropdown-menu-anchor > .tobago-dropdown-menu, tobago-dropdown > .tobago-dropdown-menu {
   --bs-dropdown-zindex: 1000;
   --bs-dropdown-min-width: 10rem;
   --bs-dropdown-padding-x: 0;
@@ -3438,7 +3438,7 @@ .dropdown-menu, tobago-select-many-list .tobago-options.tobago-dropdown-menu, to
   border: var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color);
   border-radius: var(--bs-dropdown-border-radius);
 }
-.dropdown-menu[data-bs-popper], tobago-select-many-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-select-one-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore > [data-bs-popper].tobago-dropdown-menu, tobago-dropdown > [data-bs-popper].tobago-dropdown-menu {
+.dropdown-menu[data-bs-popper], tobago-select-many-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-select-one-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore > [data-bs-popper].tobago-dropdown-menu, tobago-in .tobago-dropdown-menu-anchor > [data-bs-popper].tobago-dropdown-menu, tobago-dropdown > [data-bs-popper].tobago-dropdown-menu {
   top: 100%;
   left: 0;
   margin-top: var(--bs-dropdown-spacer);
@@ -3540,7 +3540,7 @@ @media (min-width: 1400px) {
     left: auto;
   }
 }
-.dropup .dropdown-menu[data-bs-popper], .dropup tobago-select-many-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-select-many-list .dropup [data-bs-popper].tobago-options.tobago-dropdown-menu, .dropup tobago-select-one-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-select-one-list .dropup [data-bs-popper].tobago-options.tobago-dropdown-menu, .dropup tobago-page .tobago-page-menuStore [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-page . [...]
+.dropup .dropdown-menu[data-bs-popper], .dropup tobago-select-many-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-select-many-list .dropup [data-bs-popper].tobago-options.tobago-dropdown-menu, .dropup tobago-select-one-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-select-one-list .dropup [data-bs-popper].tobago-options.tobago-dropdown-menu, .dropup tobago-page .tobago-page-menuStore [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-page . [...]
   top: auto;
   bottom: 100%;
   margin-top: 0;
@@ -3560,7 +3560,7 @@ .dropup .dropdown-toggle:empty::after {
   margin-left: 0;
 }
 
-.dropend .dropdown-menu[data-bs-popper], .dropend tobago-select-many-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-select-many-list .dropend [data-bs-popper].tobago-options.tobago-dropdown-menu, .dropend tobago-select-one-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-select-one-list .dropend [data-bs-popper].tobago-options.tobago-dropdown-menu, .dropend tobago-page .tobago-page-menuStore [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago- [...]
+.dropend .dropdown-menu[data-bs-popper], .dropend tobago-select-many-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-select-many-list .dropend [data-bs-popper].tobago-options.tobago-dropdown-menu, .dropend tobago-select-one-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-select-one-list .dropend [data-bs-popper].tobago-options.tobago-dropdown-menu, .dropend tobago-page .tobago-page-menuStore [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago- [...]
   top: 0;
   right: auto;
   left: 100%;
@@ -3584,7 +3584,7 @@ .dropend .dropdown-toggle::after {
   vertical-align: 0;
 }
 
-.dropstart .dropdown-menu[data-bs-popper], .dropstart tobago-select-many-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-select-many-list .dropstart [data-bs-popper].tobago-options.tobago-dropdown-menu, .dropstart tobago-select-one-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-select-one-list .dropstart [data-bs-popper].tobago-options.tobago-dropdown-menu, .dropstart tobago-page .tobago-page-menuStore [data-bs-popper].tobago-options.tobago-dropdown-m [...]
+.dropstart .dropdown-menu[data-bs-popper], .dropstart tobago-select-many-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-select-many-list .dropstart [data-bs-popper].tobago-options.tobago-dropdown-menu, .dropstart tobago-select-one-list [data-bs-popper].tobago-options.tobago-dropdown-menu, tobago-select-one-list .dropstart [data-bs-popper].tobago-options.tobago-dropdown-menu, .dropstart tobago-page .tobago-page-menuStore [data-bs-popper].tobago-options.tobago-dropdown-m [...]
   top: 0;
   right: 100%;
   left: auto;
@@ -3653,7 +3653,7 @@ .dropdown-item.disabled, .dropdown-item:disabled {
   background-color: transparent;
 }
 
-.dropdown-menu.show, tobago-select-many-list .show.tobago-options.tobago-dropdown-menu, tobago-select-one-list .show.tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore .show.tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore > .show.tobago-dropdown-menu, tobago-dropdown > .show.tobago-dropdown-menu {
+.dropdown-menu.show, tobago-select-many-list .show.tobago-options.tobago-dropdown-menu, tobago-select-one-list .show.tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore .show.tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore > .show.tobago-dropdown-menu, tobago-in .tobago-dropdown-menu-anchor > .show.tobago-dropdown-menu, tobago-dropdown > .show.tobago-dropdown-menu {
   display: block;
 }
 
@@ -3856,7 +3856,7 @@ .nav-tabs .nav-item.show .nav-link {
   background-color: var(--bs-nav-tabs-link-active-bg);
   border-color: var(--bs-nav-tabs-link-active-border-color);
 }
-.nav-tabs .dropdown-menu, .nav-tabs tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .nav-tabs .tobago-options.tobago-dropdown-menu, .nav-tabs tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .nav-tabs .tobago-options.tobago-dropdown-menu, .nav-tabs tobago-page .tobago-page-menuStore .tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore .nav-tabs .tobago-options.tobago-dropdown-menu, .nav-tabs toba [...]
+.nav-tabs .dropdown-menu, .nav-tabs tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .nav-tabs .tobago-options.tobago-dropdown-menu, .nav-tabs tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .nav-tabs .tobago-options.tobago-dropdown-menu, .nav-tabs tobago-page .tobago-page-menuStore .tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore .nav-tabs .tobago-options.tobago-dropdown-menu, .nav-tabs toba [...]
   margin-top: calc(-1 * var(--bs-nav-tabs-border-width));
   border-top-left-radius: 0;
   border-top-right-radius: 0;
@@ -3991,7 +3991,7 @@ .navbar-nav {
 .navbar-nav .nav-link.active, .navbar-nav .nav-link.show {
   color: var(--bs-navbar-active-color);
 }
-.navbar-nav .dropdown-menu, .navbar-nav tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-nav tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-nav tobago-page .tobago-page-menuStore .tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore .navbar-nav .tobago-options.tobago-dropdown-menu,  [...]
+.navbar-nav .dropdown-menu, .navbar-nav tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-nav tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-nav tobago-page .tobago-page-menuStore .tobago-options.tobago-dropdown-menu, tobago-page .tobago-page-menuStore .navbar-nav .tobago-options.tobago-dropdown-menu,  [...]
   position: static;
 }
 
@@ -4060,7 +4060,7 @@ @media (min-width: 576px) {
   .navbar-expand-sm .navbar-nav {
     flex-direction: row;
   }
-  .navbar-expand-sm .navbar-nav .dropdown-menu, .navbar-expand-sm .navbar-nav tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .navbar-expand-sm .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-sm .navbar-nav tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .navbar-expand-sm .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-sm .navbar-nav tobago-page .tobago-page-menuStore .tobago-optio [...]
+  .navbar-expand-sm .navbar-nav .dropdown-menu, .navbar-expand-sm .navbar-nav tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .navbar-expand-sm .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-sm .navbar-nav tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .navbar-expand-sm .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-sm .navbar-nav tobago-page .tobago-page-menuStore .tobago-optio [...]
     position: absolute;
   }
   .navbar-expand-sm .navbar-nav .nav-link {
@@ -4107,7 +4107,7 @@ @media (min-width: 768px) {
   .navbar-expand-md .navbar-nav {
     flex-direction: row;
   }
-  .navbar-expand-md .navbar-nav .dropdown-menu, .navbar-expand-md .navbar-nav tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .navbar-expand-md .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-md .navbar-nav tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .navbar-expand-md .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-md .navbar-nav tobago-page .tobago-page-menuStore .tobago-optio [...]
+  .navbar-expand-md .navbar-nav .dropdown-menu, .navbar-expand-md .navbar-nav tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .navbar-expand-md .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-md .navbar-nav tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .navbar-expand-md .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-md .navbar-nav tobago-page .tobago-page-menuStore .tobago-optio [...]
     position: absolute;
   }
   .navbar-expand-md .navbar-nav .nav-link {
@@ -4154,7 +4154,7 @@ @media (min-width: 992px) {
   .navbar-expand-lg .navbar-nav {
     flex-direction: row;
   }
-  .navbar-expand-lg .navbar-nav .dropdown-menu, .navbar-expand-lg .navbar-nav tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .navbar-expand-lg .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-lg .navbar-nav tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .navbar-expand-lg .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-lg .navbar-nav tobago-page .tobago-page-menuStore .tobago-optio [...]
+  .navbar-expand-lg .navbar-nav .dropdown-menu, .navbar-expand-lg .navbar-nav tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .navbar-expand-lg .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-lg .navbar-nav tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .navbar-expand-lg .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-lg .navbar-nav tobago-page .tobago-page-menuStore .tobago-optio [...]
     position: absolute;
   }
   .navbar-expand-lg .navbar-nav .nav-link {
@@ -4201,7 +4201,7 @@ @media (min-width: 1200px) {
   .navbar-expand-xl .navbar-nav {
     flex-direction: row;
   }
-  .navbar-expand-xl .navbar-nav .dropdown-menu, .navbar-expand-xl .navbar-nav tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .navbar-expand-xl .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-xl .navbar-nav tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .navbar-expand-xl .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-xl .navbar-nav tobago-page .tobago-page-menuStore .tobago-optio [...]
+  .navbar-expand-xl .navbar-nav .dropdown-menu, .navbar-expand-xl .navbar-nav tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .navbar-expand-xl .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-xl .navbar-nav tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .navbar-expand-xl .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-xl .navbar-nav tobago-page .tobago-page-menuStore .tobago-optio [...]
     position: absolute;
   }
   .navbar-expand-xl .navbar-nav .nav-link {
@@ -4248,7 +4248,7 @@ @media (min-width: 1400px) {
   .navbar-expand-xxl .navbar-nav {
     flex-direction: row;
   }
-  .navbar-expand-xxl .navbar-nav .dropdown-menu, .navbar-expand-xxl .navbar-nav tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .navbar-expand-xxl .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-xxl .navbar-nav tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .navbar-expand-xxl .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-xxl .navbar-nav tobago-page .tobago-page-menuStore .tobago [...]
+  .navbar-expand-xxl .navbar-nav .dropdown-menu, .navbar-expand-xxl .navbar-nav tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .navbar-expand-xxl .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-xxl .navbar-nav tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .navbar-expand-xxl .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand-xxl .navbar-nav tobago-page .tobago-page-menuStore .tobago [...]
     position: absolute;
   }
   .navbar-expand-xxl .navbar-nav .nav-link {
@@ -4294,7 +4294,7 @@ .navbar-expand {
 .navbar-expand .navbar-nav {
   flex-direction: row;
 }
-.navbar-expand .navbar-nav .dropdown-menu, .navbar-expand .navbar-nav tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .navbar-expand .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand .navbar-nav tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .navbar-expand .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand .navbar-nav tobago-page .tobago-page-menuStore .tobago-options.tobago-dropdown-m [...]
+.navbar-expand .navbar-nav .dropdown-menu, .navbar-expand .navbar-nav tobago-select-many-list .tobago-options.tobago-dropdown-menu, tobago-select-many-list .navbar-expand .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand .navbar-nav tobago-select-one-list .tobago-options.tobago-dropdown-menu, tobago-select-one-list .navbar-expand .navbar-nav .tobago-options.tobago-dropdown-menu, .navbar-expand .navbar-nav tobago-page .tobago-page-menuStore .tobago-options.tobago-dropdown-m [...]
   position: absolute;
 }
 .navbar-expand .navbar-nav .nav-link {
@@ -12457,7 +12457,6 @@ tobago-image > img {
   max-height: inherit;
 }
 
-/* in ----------------------------------------------------------- */
 tobago-in {
   display: block;
 }
@@ -12483,23 +12482,34 @@ tobago-in .input-group tobago-select-one-choice.form-select {
 tobago-in .input-group tobago-select-one-choice.form-select > .form-select {
   border: 0;
 }
-tobago-in.autocomplete[data-loading=true] .autocomplete-pseudo-container {
+tobago-in .spinner {
+  display: none;
   position: absolute;
 }
-tobago-in.autocomplete[data-loading=true] .autocomplete-pseudo-container:after {
+tobago-in .spinner.tobago-show {
+  display: block;
+}
+tobago-in .spinner:after {
   content: "";
   border: 3px solid rgba(0, 0, 0, 0.12);
   border-right-color: rgba(0, 0, 0, 0.48);
   border-radius: 100%;
-  width: 20px;
-  height: 20px;
+  width: 100%;
+  height: 100%;
+  top: 50%;
   position: absolute;
   z-index: 5;
   transform: translateY(-50%);
   animation: rotate 1s linear infinite;
 }
-tobago-in .autocomplete-result-list {
-  cursor: pointer;
+tobago-in .tobago-dropdown-menu-anchor > .tobago-dropdown-menu {
+  /* Use .tobago-dropdown-menu instead of .dropdown-menu to prevent Bootstrap from creating a dropdown instance.
+     This leads to javascript error if arrow up/down is pressed. */
+  position: fixed;
+  overflow: auto;
+  overscroll-behavior: none;
+  margin: var(--tobago-dropdown-menu-offset);
+  z-index: var(--tobago-dropdown-menu-z-index);
 }
 tobago-in tobago-suggest {
   display: none;
@@ -12999,6 +13009,15 @@ tobago-page .tobago-page-menuStore .tobago-options .table tfoot tr.tobago-no-ent
 tobago-page .tobago-page-menuStore .tobago-options .table tfoot tr.tobago-no-entries td {
   border-bottom-width: 0;
 }
+tobago-page .tobago-page-menuStore > .tobago-dropdown-menu {
+  /* Use .tobago-dropdown-menu instead of .dropdown-menu to prevent Bootstrap from creating a dropdown instance.
+     This leads to javascript error if arrow up/down is pressed. */
+  position: fixed;
+  overflow: auto;
+  overscroll-behavior: none;
+  margin: var(--tobago-dropdown-menu-offset);
+  z-index: var(--tobago-dropdown-menu-z-index);
+}
 tobago-page .tobago-page-popoverStore .popover .popover-body {
   white-space: pre-line;
 }
diff --git a/tobago-theme/tobago-theme-standard/src/main/css/tobago.css.map b/tobago-theme/tobago-theme-standard/src/main/css/tobago.css.map
index d7befeadb3..1e1139c776 100644
--- a/tobago-theme/tobago-theme-standard/src/main/css/tobago.css.map
+++ b/tobago-theme/tobago-theme-standard/src/main/css/tobago.css.map
@@ -1 +1 @@
-{"version":3,"sources":["tobago.css","../scss/tobago-theme.scss","../../../../node_modules/bootstrap/scss/mixins/_banner.scss","../../../../node_modules/bootstrap/scss/_root.scss","../../../../node_modules/bootstrap/scss/vendor/_rfs.scss","../../../../node_modules/bootstrap/scss/mixins/_color-mode.scss","../../../../node_modules/bootstrap/scss/_reboot.scss","../../../../node_modules/bootstrap/scss/_variables.scss","../../../../node_modules/bootstrap/scss/mixins/_border-radius.scss","../. [...]
\ No newline at end of file
+{"version":3,"sources":["tobago.css","../scss/tobago-theme.scss","../../../../node_modules/bootstrap/scss/mixins/_banner.scss","../../../../node_modules/bootstrap/scss/_root.scss","../../../../node_modules/bootstrap/scss/vendor/_rfs.scss","../../../../node_modules/bootstrap/scss/mixins/_color-mode.scss","../../../../node_modules/bootstrap/scss/_reboot.scss","../../../../node_modules/bootstrap/scss/_variables.scss","../../../../node_modules/bootstrap/scss/mixins/_border-radius.scss","../. [...]
\ No newline at end of file
diff --git a/tobago-theme/tobago-theme-standard/src/main/css/tobago.min.css b/tobago-theme/tobago-theme-standard/src/main/css/tobago.min.css
index 61fac241cc..44549c1332 100644
--- a/tobago-theme/tobago-theme-standard/src/main/css/tobago.min.css
+++ b/tobago-theme/tobago-theme-standard/src/main/css/tobago.min.css
@@ -1,2 +1,2 @@
-@charset "UTF-8";:root,[data-bs-theme=light]{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-black:#000;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-gray-100:#f8f9fa;--bs-gray-200:#e9ecef;--bs-gray-300:#dee2e6;--bs-gray-400:#ced4da;--bs-gray-500:#adb5bd;--bs-gray-600:#6c757d;--bs-gray-700:#495057;--bs-gray-800:#343a40;--bs-gray- [...]
+@charset "UTF-8";:root,[data-bs-theme=light]{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-black:#000;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-gray-100:#f8f9fa;--bs-gray-200:#e9ecef;--bs-gray-300:#dee2e6;--bs-gray-400:#ced4da;--bs-gray-500:#adb5bd;--bs-gray-600:#6c757d;--bs-gray-700:#495057;--bs-gray-800:#343a40;--bs-gray- [...]
 /*# sourceMappingURL=tobago.min.css.map */
\ No newline at end of file
diff --git a/tobago-theme/tobago-theme-standard/src/main/css/tobago.min.css.map b/tobago-theme/tobago-theme-standard/src/main/css/tobago.min.css.map
index 463ad12f23..b8135791a7 100644
--- a/tobago-theme/tobago-theme-standard/src/main/css/tobago.min.css.map
+++ b/tobago-theme/tobago-theme-standard/src/main/css/tobago.min.css.map
@@ -1 +1 @@
-{"version":3,"sources":["tobago-theme-standard/src/main/css/tobago.css"],"names":[],"mappings":"iBAsBA,MACA,sBACE,UAAW,QACX,YAAa,QACb,YAAa,QACb,UAAW,QACX,SAAU,QACV,YAAa,QACb,YAAa,QACb,WAAY,QACZ,UAAW,QACX,UAAW,QACX,WAAY,KACZ,WAAY,KACZ,UAAW,QACX,eAAgB,QAChB,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,aAAc,QACd,eAAgB,QAChB,aAAc,QACd,UAAW,QACX,aAAc,QACd,YAAa,QACb,WAAY,QACZ,UAAW,QACX,iBAAkB,EAAE,CAAE,GAAG,CAAE,IAC3B,mBAAoB,GAAG,CAAE,GAAG,CAAE,IAC9 [...]
\ No newline at end of file
+{"version":3,"sources":["tobago-theme-standard/src/main/css/tobago.css"],"names":[],"mappings":"iBAsBA,MACA,sBACE,UAAW,QACX,YAAa,QACb,YAAa,QACb,UAAW,QACX,SAAU,QACV,YAAa,QACb,YAAa,QACb,WAAY,QACZ,UAAW,QACX,UAAW,QACX,WAAY,KACZ,WAAY,KACZ,UAAW,QACX,eAAgB,QAChB,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,aAAc,QACd,eAAgB,QAChB,aAAc,QACd,UAAW,QACX,aAAc,QACd,YAAa,QACb,WAAY,QACZ,UAAW,QACX,iBAAkB,EAAE,CAAE,GAAG,CAAE,IAC3B,mBAAoB,GAAG,CAAE,GAAG,CAAE,IAC9 [...]
\ No newline at end of file
diff --git a/tobago-theme/tobago-theme-standard/src/main/js/tobago.js b/tobago-theme/tobago-theme-standard/src/main/js/tobago.js
index 9fe9d03949..829665262b 100644
--- a/tobago-theme/tobago-theme-standard/src/main/js/tobago.js
+++ b/tobago-theme/tobago-theme-standard/src/main/js/tobago.js
@@ -1,19 +1,19 @@
-!function(e){"function"==typeof define&&define.amd?define(e):e()}((function(){"use strict";var e,t,s,n;!function(e){e.ACTIVE="active",e.AUTOCOMPLETE="autocomplete",e.AUTOCOMPLETE_INPUT="autocomplete-input",e.BOTTOM_0="bottom-0",e.COLLAPSE="collapse",e.COLLAPSING="collapsing",e.D_NONE="d-none",e.DISABLED="disabled",e.DROPDOWN="dropdown",e.DROPDOWN_ITEM="dropdown-item",e.DROPDOWN_MENU="dropdown-menu",e.DROPDOWN_MENU_END="dropdown-menu-end",e.END_0="end-0",e.FADE="fade",e.FIXED_BOTTOM="fixe [...]
+!function(e){"function"==typeof define&&define.amd?define(e):e()}((function(){"use strict";var e,t,s,n;!function(e){e.ACTIVE="active",e.AUTOCOMPLETE="autocomplete",e.AUTOCOMPLETE_INPUT="autocomplete-input",e.BOTTOM_0="bottom-0",e.COLLAPSE="collapse",e.COLLAPSING="collapsing",e.D_NONE="d-none",e.DISABLED="disabled",e.DROPDOWN="dropdown",e.DROPDOWN_ITEM="dropdown-item",e.DROPDOWN_MENU="dropdown-menu",e.DROPDOWN_MENU_END="dropdown-menu-end",e.END_0="end-0",e.FADE="fade",e.FIXED_BOTTOM="fixe [...]
 /*!
       * Bootstrap v5.3.3 (https://getbootstrap.com/)
       * Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
       * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
       */
-const ht=new Map,pt={set(e,t,s){ht.has(e)||ht.set(e,new Map);const n=ht.get(e);n.has(t)||0===n.size?n.set(t,s):console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(n.keys())[0]}.`)},get:(e,t)=>ht.has(e)&&ht.get(e).get(t)||null,remove(e,t){if(!ht.has(e))return;const s=ht.get(e);s.delete(t),0===s.size&&ht.delete(e)}},gt="transitionend",mt=e=>(e&&window.CSS&&window.CSS.escape&&(e=e.replace(/#([^\s"#']+)/g,((e,t)=>`#${CSS.escape(t)}`))),e),f [...]
+const st=new Map,nt={set(e,t,s){st.has(e)||st.set(e,new Map);const n=st.get(e);n.has(t)||0===n.size?n.set(t,s):console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(n.keys())[0]}.`)},get:(e,t)=>st.has(e)&&st.get(e).get(t)||null,remove(e,t){if(!st.has(e))return;const s=st.get(e);s.delete(t),0===s.size&&st.delete(e)}},it="transitionend",ot=e=>(e&&window.CSS&&window.CSS.escape&&(e=e.replace(/#([^\s"#']+)/g,((e,t)=>`#${CSS.escape(t)}`))),e),r [...]
 /**
      * @license
      * Copyright 2017 Google LLC
      * SPDX-License-Identifier: BSD-3-Clause
-     */const mr=globalThis,fr=mr.trustedTypes,br=fr?fr.createPolicy("lit-html",{createHTML:e=>e}):void 0,vr="$lit$",_r=`lit$${Math.random().toFixed(9).slice(2)}$`,yr="?"+_r,Er=`<${yr}>`,wr=document,Ar=()=>wr.createComment(""),Sr=e=>null===e||"object"!=typeof e&&"function"!=typeof e,Lr=Array.isArray,Or="[ \t\n\f\r]",Tr=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,xr=/-->/g,Cr=/>/g,Ir=RegExp(`>|${Or}(?:([^\\s"'>=/]+)(${Or}*=${Or}*(?:[^ \t\n\f\r"'\`<>=]|("|')|))|$)`,"g"),Nr=/'/g,kr [...]
+     */const or=globalThis,rr=or.trustedTypes,ar=rr?rr.createPolicy("lit-html",{createHTML:e=>e}):void 0,lr="$lit$",dr=`lit$${Math.random().toFixed(9).slice(2)}$`,cr="?"+dr,hr=`<${cr}>`,ur=document,pr=()=>ur.createComment(""),gr=e=>null===e||"object"!=typeof e&&"function"!=typeof e,mr=Array.isArray,fr="[ \t\n\f\r]",br=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,vr=/-->/g,_r=/>/g,Er=RegExp(`>|${fr}(?:([^\\s"'>=/]+)(${fr}*=${fr}*(?:[^ \t\n\f\r"'\`<>=]|("|')|))|$)`,"g"),yr=/'/g,wr [...]
   <button type='button'
       class='tobago-button btn btn-secondary badge' aria-label='deselect ${e}'
       ${s>0?" tabindex='"+String(s)+"'":""}
       @click="${this.removeBadge.bind(this)}"
       @focus="${this.focusEvent.bind(this)}"
-      @blur="${this.blurEvent.bind(this)}"><i class='bi-x-lg'></i></button>`}removeBadge(e){var t;const s=e.target.closest(".btn-group").dataset.tobagoValue,n=this.hiddenSelect.querySelector(`[value="${s}"]`);n.selected=!1;const i=this.badges.querySelector(`[data-tobago-value="${s}"]`),o=i.previousElementSibling,r="SPAN"===(null===(t=i.nextElementSibling)||void 0===t?void 0:t.tagName)?i.nextElementSibling:null;o?o.querySelector("button.btn.badge").focus():r?r.querySelector("button.btn.ba [...]
+      @blur="${this.blurEvent.bind(this)}"><i class='bi-x-lg'></i></button>`}removeBadge(e){var t;const s=e.target.closest(".btn-group").dataset.tobagoValue,n=this.hiddenSelect.querySelector(`[value="${s}"]`);n.selected=!1;const i=this.badges.querySelector(`[data-tobago-value="${s}"]`),o=i.previousElementSibling,r="SPAN"===(null===(t=i.nextElementSibling)||void 0===t?void 0:t.tagName)?i.nextElementSibling:null;o?o.querySelector("button.btn.badge").focus():r?r.querySelector("button.btn.ba [...]
 //# sourceMappingURL=tobago.js.map
diff --git a/tobago-theme/tobago-theme-standard/src/main/js/tobago.js.map b/tobago-theme/tobago-theme-standard/src/main/js/tobago.js.map
index c4e7a3e666..a84193d6ef 100644
--- a/tobago-theme/tobago-theme-standard/src/main/js/tobago.js.map
+++ b/tobago-theme/tobago-theme-standard/src/main/js/tobago.js.map
@@ -1 +1 @@
-{"version":3,"file":"tobago.js","sources":["../ts/tobago-css.ts","../ts/tobago-key.ts","../ts/tobago-client-behaviors.ts","../ts/tobago-dropdown-menu.ts","../ts/tobago-bar.ts","../ts/tobago-date.ts","../ts/tobago-menu-store.ts","../ts/tobago-dropdown-item-factory.ts","../ts/tobago-dropdown-item.ts","../ts/tobago-dropdown.ts","../ts/tobago-overlay-type.ts","../ts/tobago-page-static.ts","../ts/tobago-page.ts","../ts/tobago-overlay.ts","../ts/tobago-file.ts","../ts/tobago-focus.ts","../ts/t [...]
\ No newline at end of file
+{"version":3,"file":"tobago.js","sources":["../ts/tobago-css.ts","../ts/tobago-key.ts","../ts/tobago-client-behaviors.ts","../ts/tobago-dropdown-menu.ts","../ts/tobago-bar.ts","../ts/tobago-date.ts","../ts/tobago-menu-store.ts","../ts/tobago-dropdown-item-factory.ts","../ts/tobago-dropdown-item.ts","../ts/tobago-dropdown.ts","../ts/tobago-overlay-type.ts","../ts/tobago-suggest-filter.ts","../ts/tobago-page-static.ts","../ts/tobago-page.ts","../ts/tobago-overlay.ts","../ts/tobago-file.ts" [...]
\ No newline at end of file