diff --git a/.changeset/short-crabs-retire.md b/.changeset/short-crabs-retire.md
new file mode 100644
index 000000000..ada794306
--- /dev/null
+++ b/.changeset/short-crabs-retire.md
@@ -0,0 +1,5 @@
+---
+"@ebay/ebayui-core": major
+---
+
+feat(dropdowns): added support for floating-ui
diff --git a/src/common/dropdown/index.ts b/src/common/dropdown/index.ts
new file mode 100644
index 000000000..06450bf57
--- /dev/null
+++ b/src/common/dropdown/index.ts
@@ -0,0 +1,54 @@
+import {
+ autoUpdate,
+ flip,
+ computePosition,
+ shift,
+ offset,
+ type ReferenceElement
+} from "@floating-ui/dom";
+
+interface DropdownUtilOptions {
+ reverse?: boolean;
+ offset?: number
+}
+
+export class DropdownUtil {
+ declare host: ReferenceElement;
+ declare overlay: HTMLElement;
+ declare cleanupFn: any;
+ declare options: DropdownUtilOptions;
+
+ constructor(host: HTMLElement, overlay: HTMLElement, options?: DropdownUtilOptions) {
+ this.host = host as ReferenceElement;
+ this.overlay = overlay as HTMLElement;
+ this.options = options ?? {};
+ }
+
+ show() {
+ this.cleanupFn = autoUpdate(
+ this.host,
+ this.overlay,
+ this.update.bind(this),
+ );
+ }
+
+ update() {
+ computePosition(this.host, this.overlay, {
+ placement: this.options.reverse ? "bottom-end" : "bottom-start",
+ middleware: [offset(this.options.offset ?? 4), flip(), shift()],
+ }).then(({ x, y }) => {
+ Object.assign(this.overlay.style, {
+ left: `${x}px`,
+ top: `${y}px`,
+ });
+ });
+ }
+
+ cleanup() {
+ this.cleanupFn?.();
+ }
+
+ hide() {
+ if (this.cleanup) this.cleanup();
+ }
+}
diff --git a/src/components/ebay-chips-combobox/index.marko b/src/components/ebay-chips-combobox/index.marko
index 511c6f3ea..7633d37de 100644
--- a/src/components/ebay-chips-combobox/index.marko
+++ b/src/components/ebay-chips-combobox/index.marko
@@ -13,6 +13,7 @@ $ const {
$ const options = [...option || []].map((o) => o.text)
o.text)
onExpand("emit", "expand")
onCollapse("emit", "collapse")
disabled=disabled
+ dropdown-element=() => component.getEl("root")
chevron-size="large"
...comboboxInput
autocomplete="list"
diff --git a/src/components/ebay-chips-combobox/test/__snapshots__/test.server.js.snap b/src/components/ebay-chips-combobox/test/__snapshots__/test.server.js.snap
index 15935118a..f06ea4339 100644
--- a/src/components/ebay-chips-combobox/test/__snapshots__/test.server.js.snap
+++ b/src/components/ebay-chips-combobox/test/__snapshots__/test.server.js.snap
@@ -16,7 +16,7 @@ exports[`ebay-chips-combobox > renders default 1`] = `
[33maria-expanded[39m=[32m"false"[39m
[33maria-haspopup[39m=[32m"listbox"[39m
[33mautocomplete[39m=[32m"off"[39m
- [33mid[39m=[32m"s0-0-4-input"[39m
+ [33mid[39m=[32m"s0-0-3-input"[39m
[33mplaceholder[39m=[32m"Add item"[39m
[33mrole[39m=[32m"combobox"[39m
[33mtype[39m=[32m"text"[39m
@@ -92,12 +92,12 @@ exports[`ebay-chips-combobox > renders with chips already selected 1`] = `
[36m>[39m
[36m[39m
[0mOption 1[0m
[36m[39m
[36m
passes through additional html attributes 1`] = `