@floegence/floe-webapp-core 0.36.12 → 0.36.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,25 +1,27 @@
1
- import { setAttribute as m, insert as f, createComponent as l, Portal as U, use as L, effect as D, className as M, setStyleProperty as q, template as E, memo as K, delegateEvents as J } from "solid-js/web";
2
- import { createSignal as F, createEffect as Q, onCleanup as V, Show as $, Index as z } from "solid-js";
3
- import { cn as C } from "../../utils/cn.js";
4
- import { deferNonBlocking as X } from "../../utils/defer.js";
5
- import { ChevronDown as Y, Check as Z, ChevronRight as ee } from "../icons/index.js";
6
- import { focusMenuItem as O, MENU_ITEM_SELECTOR as te, moveMenuFocus as N, calculateMenuPosition as ne, calculateSubmenuPosition as re } from "./menuUtils.js";
7
- var H = /* @__PURE__ */ E("<div role=menu>"), oe = /* @__PURE__ */ E("<div><div role=button aria-haspopup=menu data-floe-dropdown-trigger>"), W = /* @__PURE__ */ E('<div class="my-1 h-px bg-border"role=separator>'), ie = /* @__PURE__ */ E("<div>"), ae = /* @__PURE__ */ E('<button type=button role=menuitem><span class="w-3.5 h-3.5 flex items-center justify-center"></span><span class="flex-1 text-left">'), le = /* @__PURE__ */ E("<div class=relative>"), ue = /* @__PURE__ */ E('<span class="w-3.5 h-3.5 flex items-center justify-center">'), de = /* @__PURE__ */ E("<span>");
8
- let se = 0, ce = 0;
9
- function fe(e, s) {
1
+ import { setAttribute as v, insert as f, createComponent as u, Portal as z, use as R, spread as U, mergeProps as H, effect as I, className as E, template as $, memo as K, delegateEvents as V } from "solid-js/web";
2
+ import { createSignal as O, createMemo as X, createEffect as Y, onCleanup as Z, Show as y, Index as W } from "solid-js";
3
+ import { cn as S } from "../../utils/cn.js";
4
+ import { deferNonBlocking as ee } from "../../utils/defer.js";
5
+ import { ChevronDown as te, Check as ne, ChevronRight as re } from "../icons/index.js";
6
+ import { focusMenuItem as P, MENU_ITEM_SELECTOR as oe, moveMenuFocus as N, calculateMenuPosition as ie, calculateSubmenuPosition as ae } from "./menuUtils.js";
7
+ import { LOCAL_INTERACTION_SURFACE_ATTR as G } from "./localInteractionSurface.js";
8
+ import { resolveSurfacePortalHost as ue, projectSurfacePortalPosition as le, resolveSurfacePortalBoundaryRect as de, isSurfacePortalMode as ce, resolveSurfacePortalMount as se } from "./dialogSurfaceScope.js";
9
+ var F = /* @__PURE__ */ $("<div>"), fe = /* @__PURE__ */ $("<div><div role=button aria-haspopup=menu data-floe-dropdown-trigger>"), J = /* @__PURE__ */ $('<div class="my-1 h-px bg-border"role=separator>'), me = /* @__PURE__ */ $('<button type=button role=menuitem><span class="w-3.5 h-3.5 flex items-center justify-center"></span><span class="flex-1 text-left">'), ge = /* @__PURE__ */ $("<div class=relative>"), ve = /* @__PURE__ */ $('<span class="w-3.5 h-3.5 flex items-center justify-center">'), be = /* @__PURE__ */ $("<span>");
10
+ let he = 0, we = 0;
11
+ function ye(e, d) {
10
12
  switch (e) {
11
13
  case "Enter":
12
14
  case " ":
13
- return s.open ? {
15
+ return d.open ? {
14
16
  nextOpen: !1
15
17
  } : {
16
18
  nextOpen: !0,
17
- focusMode: s.hasSelection ? "selected" : "first"
19
+ focusMode: d.hasSelection ? "selected" : "first"
18
20
  };
19
21
  case "ArrowDown":
20
22
  return {
21
23
  nextOpen: !0,
22
- focusMode: s.hasSelection ? "selected" : "first"
24
+ focusMode: d.hasSelection ? "selected" : "first"
23
25
  };
24
26
  case "ArrowUp":
25
27
  return {
@@ -30,140 +32,159 @@ function fe(e, s) {
30
32
  return null;
31
33
  }
32
34
  }
33
- function me(e) {
34
- const [s, u] = F(!1), [c, P] = F({
35
+ function xe(e) {
36
+ const [d, c] = O(!1), [s, A] = O({
35
37
  x: -9999,
36
38
  y: -9999
37
39
  });
38
- let y, x;
39
- const h = `floe-dropdown-${se += 1}`, k = `${h}-menu`, R = () => {
40
- if (!y || !x) return;
41
- const o = y.getBoundingClientRect(), r = x.getBoundingClientRect(), d = ne(o, r, e.align ?? "start");
42
- P(d);
40
+ let b, h;
41
+ const m = `floe-dropdown-${he += 1}`, w = `${m}-menu`, k = X(() => d() ? ue() : {
42
+ host: null,
43
+ mode: "global"
44
+ }), a = {
45
+ mount: () => se(k()),
46
+ isSurfaceMode: () => ce(k()),
47
+ boundaryRect: () => de(k()),
48
+ projectPosition: (r) => le(r, k())
49
+ }, M = () => {
50
+ if (!b || !h) return;
51
+ const r = b.getBoundingClientRect(), n = h.getBoundingClientRect(), i = ie(r, n, e.align ?? "start", a.boundaryRect());
52
+ A(i);
43
53
  };
44
- Q(() => {
45
- if (!s()) {
46
- P({
54
+ Y(() => {
55
+ if (!d()) {
56
+ A({
47
57
  x: -9999,
48
58
  y: -9999
49
59
  });
50
60
  return;
51
61
  }
52
- const o = (d) => {
53
- const n = d.target;
54
- n && typeof n.closest == "function" && n.closest(`[data-floe-dropdown="${h}"]`) || u(!1);
55
- }, r = (d) => {
56
- d.key === "Escape" && (u(!1), requestAnimationFrame(() => y?.focus()));
62
+ const r = (i) => {
63
+ const t = i.target;
64
+ t && typeof t.closest == "function" && t.closest(`[data-floe-dropdown="${m}"]`) || c(!1);
65
+ }, n = (i) => {
66
+ i.key === "Escape" && (c(!1), requestAnimationFrame(() => b?.focus()));
57
67
  };
58
- document.addEventListener("mousedown", o), document.addEventListener("keydown", r), requestAnimationFrame(() => {
59
- R(), O(x, e.value ? "selected" : "first");
60
- }), V(() => {
61
- document.removeEventListener("mousedown", o), document.removeEventListener("keydown", r);
68
+ document.addEventListener("mousedown", r), document.addEventListener("keydown", n), requestAnimationFrame(() => {
69
+ M(), P(h, e.value ? "selected" : "first");
70
+ }), Z(() => {
71
+ document.removeEventListener("mousedown", r), document.removeEventListener("keydown", n);
62
72
  });
63
73
  });
64
- const v = (o) => {
65
- const r = e.onSelect;
66
- o.keepOpen || u(!1), X(() => r(o.id));
67
- }, A = (o, r = "first") => {
68
- e.disabled || (u(o), requestAnimationFrame(() => {
69
- R(), O(x, r);
74
+ const _ = (r) => {
75
+ const n = e.onSelect;
76
+ r.keepOpen || c(!1), ee(() => n(r.id));
77
+ }, p = (r, n = "first") => {
78
+ e.disabled || (c(r), requestAnimationFrame(() => {
79
+ M(), P(h, n);
70
80
  }));
71
- }, _ = (o) => {
81
+ }, D = (r) => {
72
82
  if (e.disabled) return;
73
- const r = fe(o.key, {
74
- open: s(),
83
+ const n = ye(r.key, {
84
+ open: d(),
75
85
  hasSelection: !!e.value
76
86
  });
77
- if (r) {
78
- if (o.preventDefault(), !r.nextOpen) {
79
- u(!1);
87
+ if (n) {
88
+ if (r.preventDefault(), !n.nextOpen) {
89
+ c(!1);
80
90
  return;
81
91
  }
82
- A(!0, r.focusMode ?? "first");
92
+ p(!0, n.focusMode ?? "first");
83
93
  }
84
- }, T = (o) => {
85
- const r = o.target, d = r?.closest('[role="menu"]'), n = r?.closest(te);
86
- switch (o.key) {
94
+ }, T = (r) => {
95
+ const n = r.target, i = n?.closest('[role="menu"]'), t = n?.closest(oe);
96
+ switch (r.key) {
87
97
  case "ArrowDown":
88
- o.preventDefault(), N(d, n, 1);
98
+ r.preventDefault(), N(i, t, 1);
89
99
  return;
90
100
  case "ArrowUp":
91
- o.preventDefault(), N(d, n, -1);
101
+ r.preventDefault(), N(i, t, -1);
92
102
  return;
93
103
  case "Home":
94
- o.preventDefault(), O(d, "first");
104
+ r.preventDefault(), P(i, "first");
95
105
  return;
96
106
  case "End":
97
- o.preventDefault(), O(d, "last");
107
+ r.preventDefault(), P(i, "last");
98
108
  return;
99
109
  case "Tab":
100
- u(!1);
110
+ c(!1);
101
111
  return;
102
112
  default:
103
113
  return;
104
114
  }
105
115
  };
106
116
  return (() => {
107
- var o = oe(), r = o.firstChild;
108
- m(o, "data-floe-dropdown", h), r.$$keydown = _, r.$$click = () => {
117
+ var r = fe(), n = r.firstChild;
118
+ v(r, "data-floe-dropdown", m), n.$$keydown = D, n.$$click = () => {
109
119
  if (!e.disabled) {
110
- if (s()) {
111
- u(!1);
120
+ if (d()) {
121
+ c(!1);
112
122
  return;
113
123
  }
114
- A(!0, e.value ? "selected" : "first");
124
+ p(!0, e.value ? "selected" : "first");
115
125
  }
116
126
  };
117
- var d = y;
118
- return typeof d == "function" ? L(d, r) : y = r, m(r, "aria-controls", k), f(r, () => e.trigger), f(o, l($, {
127
+ var i = b;
128
+ return typeof i == "function" ? R(i, n) : b = n, v(n, "aria-controls", w), f(n, () => e.trigger), f(r, u(y, {
119
129
  get when() {
120
- return s();
130
+ return d();
121
131
  },
122
132
  get children() {
123
- return l(U, {
133
+ return u(z, {
134
+ get mount() {
135
+ return a.mount();
136
+ },
124
137
  get children() {
125
- var n = H();
126
- n.$$keydown = T;
127
- var g = x;
128
- return typeof g == "function" ? L(g, n) : x = n, m(n, "data-floe-dropdown", h), m(n, "id", k), f(n, l(z, {
138
+ var t = F(), g = h;
139
+ return typeof g == "function" ? R(g, t) : h = t, v(t, "data-floe-dropdown", m), U(t, H({
140
+ get class() {
141
+ return S(a.isSurfaceMode() ? "absolute z-20 min-w-36 py-0.5" : "fixed z-50 min-w-36 py-0.5", "bg-popover text-popover-foreground", "rounded border border-border shadow-md", "animate-in fade-in slide-in-from-top-2");
142
+ }
143
+ }, () => ({
144
+ [G]: a.isSurfaceMode() ? "true" : void 0
145
+ }), {
146
+ get style() {
147
+ return {
148
+ left: `${a.projectPosition(s()).x}px`,
149
+ top: `${a.projectPosition(s()).y}px`
150
+ };
151
+ },
152
+ role: "menu",
153
+ id: w,
154
+ onKeyDown: T
155
+ }), !1, !0), f(t, u(W, {
129
156
  get each() {
130
157
  return e.items;
131
158
  },
132
- children: (t) => l($, {
159
+ children: (l) => u(y, {
133
160
  get when() {
134
- return !t().separator;
161
+ return !l().separator;
135
162
  },
136
163
  get fallback() {
137
- return W();
164
+ return J();
138
165
  },
139
166
  get children() {
140
- return l(G, {
167
+ return u(Q, {
141
168
  get item() {
142
- return t();
169
+ return l();
143
170
  },
144
171
  get selected() {
145
- return e.value === t().id;
172
+ return e.value === l().id;
146
173
  },
147
- onSelect: v,
148
- onCloseMenu: () => u(!1),
149
- dropdownId: h
174
+ onSelect: _,
175
+ onCloseMenu: () => c(!1),
176
+ dropdownId: m,
177
+ portalLayout: a
150
178
  });
151
179
  }
152
180
  })
153
- })), D((t) => {
154
- var w = C("fixed z-50 min-w-36 py-0.5", "bg-popover text-popover-foreground", "rounded border border-border shadow-md", "animate-in fade-in slide-in-from-top-2"), i = `${c().x}px`, b = `${c().y}px`;
155
- return w !== t.e && M(n, t.e = w), i !== t.t && q(n, "left", t.t = i), b !== t.a && q(n, "top", t.a = b), t;
156
- }, {
157
- e: void 0,
158
- t: void 0,
159
- a: void 0
160
- }), n;
181
+ })), t;
161
182
  }
162
183
  });
163
184
  }
164
- }), null), D((n) => {
165
- var g = C("relative inline-block", e.class), t = C("cursor-pointer focus:outline-none focus-visible:ring-1 focus-visible:ring-ring", e.triggerClass, e.disabled && "pointer-events-none opacity-50"), w = e.disabled ? -1 : 0, i = s(), b = e.triggerAriaLabel, a = e.disabled ? "true" : void 0;
166
- return g !== n.e && M(o, n.e = g), t !== n.t && M(r, n.t = t), w !== n.a && m(r, "tabindex", n.a = w), i !== n.o && m(r, "aria-expanded", n.o = i), b !== n.i && m(r, "aria-label", n.i = b), a !== n.n && m(r, "aria-disabled", n.n = a), n;
185
+ }), null), I((t) => {
186
+ var g = S("relative inline-block", e.class), l = S("cursor-pointer focus:outline-none focus-visible:ring-1 focus-visible:ring-ring", e.triggerClass, e.disabled && "pointer-events-none opacity-50"), C = e.disabled ? -1 : 0, o = d(), x = e.triggerAriaLabel, L = e.disabled ? "true" : void 0;
187
+ return g !== t.e && E(r, t.e = g), l !== t.t && E(n, t.t = l), C !== t.a && v(n, "tabindex", t.a = C), o !== t.o && v(n, "aria-expanded", t.o = o), x !== t.i && v(n, "aria-label", t.i = x), L !== t.n && v(n, "aria-disabled", t.n = L), t;
167
188
  }, {
168
189
  e: void 0,
169
190
  t: void 0,
@@ -171,94 +192,94 @@ function me(e) {
171
192
  o: void 0,
172
193
  i: void 0,
173
194
  n: void 0
174
- }), o;
195
+ }), r;
175
196
  })();
176
197
  }
177
- function G(e) {
178
- const [s, u] = F(!1), [c, P] = F({
198
+ function Q(e) {
199
+ const [d, c] = O(!1), [s, A] = O({
179
200
  x: -9999,
180
201
  y: -9999
181
202
  });
182
- let y, x, h, k;
183
- const R = `floe-dropdown-item-${ce += 1}`, v = () => e.item.children && e.item.children.length > 0, A = () => {
184
- if (!y || !h) return;
185
- const n = y.getBoundingClientRect(), g = h.getBoundingClientRect(), t = re(n, g);
186
- P(t);
203
+ let b, h, m, w;
204
+ const k = `floe-dropdown-item-${we += 1}`, a = () => e.item.children && e.item.children.length > 0, M = () => {
205
+ if (!b || !m) return;
206
+ const n = b.getBoundingClientRect(), i = m.getBoundingClientRect(), t = ae(n, i, e.portalLayout.boundaryRect());
207
+ A(t);
187
208
  }, _ = () => {
188
- v() && (clearTimeout(k), k = setTimeout(() => {
189
- u(!0), requestAnimationFrame(A);
209
+ a() && (clearTimeout(w), w = setTimeout(() => {
210
+ c(!0), requestAnimationFrame(M);
190
211
  }, 100));
191
- }, T = () => {
192
- v() && (clearTimeout(k), k = void 0, !e.item.keepOpen && (k = setTimeout(() => {
193
- u(!1);
212
+ }, p = () => {
213
+ a() && (clearTimeout(w), w = void 0, !e.item.keepOpen && (w = setTimeout(() => {
214
+ c(!1);
194
215
  }, 150)));
195
- }, o = (n) => {
216
+ }, D = (n) => {
196
217
  if (!e.item.disabled) {
197
218
  if (e.item.content && e.item.keepOpen) {
198
219
  n.stopPropagation();
199
220
  return;
200
221
  }
201
- v() ? (u((g) => !g), requestAnimationFrame(A)) : e.item.content || e.onSelect(e.item);
222
+ a() ? (c((i) => !i), requestAnimationFrame(M)) : e.item.content || e.onSelect(e.item);
202
223
  }
203
- }, r = (n = "first") => {
204
- v() && (u(!0), requestAnimationFrame(() => {
205
- A(), O(h, n);
224
+ }, T = (n = "first") => {
225
+ a() && (c(!0), requestAnimationFrame(() => {
226
+ M(), P(m, n);
206
227
  }));
207
- }, d = () => {
208
- u(!1), requestAnimationFrame(() => x?.focus());
228
+ }, r = () => {
229
+ c(!1), requestAnimationFrame(() => h?.focus());
209
230
  };
210
231
  return (() => {
211
- var n = le();
212
- n.addEventListener("mouseleave", T), n.addEventListener("mouseenter", _);
213
- var g = y;
214
- return typeof g == "function" ? L(g, n) : y = n, f(n, l($, {
232
+ var n = ge();
233
+ n.addEventListener("mouseleave", p), n.addEventListener("mouseenter", _);
234
+ var i = b;
235
+ return typeof i == "function" ? R(i, n) : b = n, f(n, u(y, {
215
236
  get when() {
216
237
  return e.item.content;
217
238
  },
218
239
  get children() {
219
- var t = ie();
220
- return t.$$click = o, f(t, e.item.content), D(() => M(t, C("w-full px-2 py-1.5", e.item.disabled && "opacity-50 pointer-events-none"))), t;
240
+ var t = F();
241
+ return t.$$click = D, f(t, e.item.content), I(() => E(t, S("w-full px-2 py-1.5", e.item.disabled && "opacity-50 pointer-events-none"))), t;
221
242
  }
222
- }), null), f(n, l($, {
243
+ }), null), f(n, u(y, {
223
244
  get when() {
224
245
  return !e.item.content;
225
246
  },
226
247
  get children() {
227
- var t = ae(), w = t.firstChild, i = w.nextSibling;
228
- t.$$keydown = (a) => {
229
- e.item.disabled || v() && ((a.key === "ArrowRight" || a.key === "Enter" || a.key === " ") && (a.preventDefault(), r("first")), a.key === "ArrowLeft" && (a.preventDefault(), d()));
230
- }, t.$$click = o;
231
- var b = x;
232
- return typeof b == "function" ? L(b, t) : x = t, m(t, "id", R), f(w, l($, {
248
+ var t = me(), g = t.firstChild, l = g.nextSibling;
249
+ t.$$keydown = (o) => {
250
+ e.item.disabled || a() && ((o.key === "ArrowRight" || o.key === "Enter" || o.key === " ") && (o.preventDefault(), T("first")), o.key === "ArrowLeft" && (o.preventDefault(), r()));
251
+ }, t.$$click = D;
252
+ var C = h;
253
+ return typeof C == "function" ? R(C, t) : h = t, v(t, "id", k), f(g, u(y, {
233
254
  get when() {
234
- return K(() => !!e.selected)() && !v();
255
+ return K(() => !!e.selected)() && !a();
235
256
  },
236
257
  get children() {
237
- return l(Z, {
258
+ return u(ne, {
238
259
  class: "w-3 h-3"
239
260
  });
240
261
  }
241
- })), f(t, l($, {
262
+ })), f(t, u(y, {
242
263
  get when() {
243
264
  return e.item.icon;
244
265
  },
245
266
  keyed: !0,
246
- children: (a) => (() => {
247
- var S = ue();
248
- return f(S, a), S;
267
+ children: (o) => (() => {
268
+ var x = ve();
269
+ return f(x, o), x;
249
270
  })()
250
- }), i), f(i, () => e.item.label), f(t, l($, {
271
+ }), l), f(l, () => e.item.label), f(t, u(y, {
251
272
  get when() {
252
- return v();
273
+ return a();
253
274
  },
254
275
  get children() {
255
- return l(ee, {
276
+ return u(re, {
256
277
  class: "w-3 h-3 text-muted-foreground"
257
278
  });
258
279
  }
259
- }), null), D((a) => {
260
- var S = C("w-full flex items-center gap-1.5 px-2 py-1 text-xs", "transition-colors duration-75", "focus:outline-none focus:bg-accent", e.item.disabled ? "opacity-50 cursor-not-allowed" : "hover:bg-accent cursor-pointer"), I = e.item.disabled, B = v() ? "menu" : void 0, p = v() ? s() : void 0, j = e.selected && !v() ? "true" : void 0;
261
- return S !== a.e && M(t, a.e = S), I !== a.t && (t.disabled = a.t = I), B !== a.a && m(t, "aria-haspopup", a.a = B), p !== a.o && m(t, "aria-expanded", a.o = p), j !== a.i && m(t, "data-floe-selected", a.i = j), a;
280
+ }), null), I((o) => {
281
+ var x = S("w-full flex items-center gap-1.5 px-2 py-1 text-xs", "transition-colors duration-75", "focus:outline-none focus:bg-accent", e.item.disabled ? "opacity-50 cursor-not-allowed" : "hover:bg-accent cursor-pointer"), L = e.item.disabled, j = a() ? "menu" : void 0, q = a() ? d() : void 0, B = e.selected && !a() ? "true" : void 0;
282
+ return x !== o.e && E(t, o.e = x), L !== o.t && (t.disabled = o.t = L), j !== o.a && v(t, "aria-haspopup", o.a = j), q !== o.o && v(t, "aria-expanded", o.o = q), B !== o.i && v(t, "data-floe-selected", o.i = B), o;
262
283
  }, {
263
284
  e: void 0,
264
285
  t: void 0,
@@ -267,35 +288,57 @@ function G(e) {
267
288
  i: void 0
268
289
  }), t;
269
290
  }
270
- }), null), f(n, l($, {
291
+ }), null), f(n, u(y, {
271
292
  get when() {
272
- return K(() => !!s())() && v();
293
+ return K(() => !!d())() && a();
273
294
  },
274
295
  get children() {
275
- return l(U, {
296
+ return u(z, {
297
+ get mount() {
298
+ return e.portalLayout.mount();
299
+ },
276
300
  get children() {
277
- var t = H();
278
- t.$$keydown = (i) => {
279
- i.key !== "ArrowLeft" && i.key !== "Escape" || (i.preventDefault(), i.stopPropagation(), d());
280
- }, t.addEventListener("mouseleave", T), t.addEventListener("mouseenter", () => {
281
- clearTimeout(k);
282
- });
283
- var w = h;
284
- return typeof w == "function" ? L(w, t) : h = t, m(t, "aria-labelledby", R), f(t, l(z, {
301
+ var t = F(), g = m;
302
+ return typeof g == "function" ? R(g, t) : m = t, U(t, H({
303
+ get class() {
304
+ return S(e.portalLayout.isSurfaceMode() ? "absolute z-20 min-w-36 py-0.5" : "fixed z-50 min-w-36 py-0.5", "bg-popover text-popover-foreground", "rounded border border-border shadow-md", "animate-in fade-in slide-in-from-left-1");
305
+ },
306
+ get "data-floe-dropdown"() {
307
+ return e.dropdownId;
308
+ }
309
+ }, () => ({
310
+ [G]: e.portalLayout.isSurfaceMode() ? "true" : void 0
311
+ }), {
312
+ get style() {
313
+ return {
314
+ left: `${e.portalLayout.projectPosition(s()).x}px`,
315
+ top: `${e.portalLayout.projectPosition(s()).y}px`
316
+ };
317
+ },
318
+ role: "menu",
319
+ "aria-labelledby": k,
320
+ onMouseEnter: () => {
321
+ clearTimeout(w);
322
+ },
323
+ onMouseLeave: p,
324
+ onKeyDown: (l) => {
325
+ l.key !== "ArrowLeft" && l.key !== "Escape" || (l.preventDefault(), l.stopPropagation(), r());
326
+ }
327
+ }), !1, !0), f(t, u(W, {
285
328
  get each() {
286
329
  return e.item.children;
287
330
  },
288
- children: (i) => l($, {
331
+ children: (l) => u(y, {
289
332
  get when() {
290
- return !i().separator;
333
+ return !l().separator;
291
334
  },
292
335
  get fallback() {
293
- return W();
336
+ return J();
294
337
  },
295
338
  get children() {
296
- return l(G, {
339
+ return u(Q, {
297
340
  get item() {
298
- return i();
341
+ return l();
299
342
  },
300
343
  selected: !1,
301
344
  get onSelect() {
@@ -306,44 +349,39 @@ function G(e) {
306
349
  },
307
350
  get dropdownId() {
308
351
  return e.dropdownId;
352
+ },
353
+ get portalLayout() {
354
+ return e.portalLayout;
309
355
  }
310
356
  });
311
357
  }
312
358
  })
313
- })), D((i) => {
314
- var b = C("fixed z-50 min-w-36 py-0.5", "bg-popover text-popover-foreground", "rounded border border-border shadow-md", "animate-in fade-in slide-in-from-left-1"), a = e.dropdownId, S = `${c().x}px`, I = `${c().y}px`;
315
- return b !== i.e && M(t, i.e = b), a !== i.t && m(t, "data-floe-dropdown", i.t = a), S !== i.a && q(t, "left", i.a = S), I !== i.o && q(t, "top", i.o = I), i;
316
- }, {
317
- e: void 0,
318
- t: void 0,
319
- a: void 0,
320
- o: void 0
321
- }), t;
359
+ })), t;
322
360
  }
323
361
  });
324
362
  }
325
363
  }), null), n;
326
364
  })();
327
365
  }
328
- function xe(e) {
329
- const s = () => e.options.find((c) => c.value === e.value), u = () => e.options.map((c) => ({
330
- id: c.value,
331
- label: c.label
366
+ function Re(e) {
367
+ const d = () => e.options.find((s) => s.value === e.value), c = () => e.options.map((s) => ({
368
+ id: s.value,
369
+ label: s.label
332
370
  }));
333
- return l(me, {
371
+ return u(xe, {
334
372
  get triggerClass() {
335
- return C("flex items-center justify-between gap-2 h-8 px-2.5 w-full", "rounded border border-input bg-background text-xs shadow-sm", "transition-colors duration-100", e.class);
373
+ return S("flex items-center justify-between gap-2 h-8 px-2.5 w-full", "rounded border border-input bg-background text-xs shadow-sm", "transition-colors duration-100", e.class);
336
374
  },
337
375
  get trigger() {
338
376
  return [(() => {
339
- var c = de();
340
- return f(c, () => s()?.label ?? e.placeholder ?? "Select..."), D(() => M(c, C("truncate", !s() && "text-muted-foreground"))), c;
341
- })(), l(Y, {
377
+ var s = be();
378
+ return f(s, () => d()?.label ?? e.placeholder ?? "Select..."), I(() => E(s, S("truncate", !d() && "text-muted-foreground"))), s;
379
+ })(), u(te, {
342
380
  class: "w-3.5 h-3.5 text-muted-foreground"
343
381
  })];
344
382
  },
345
383
  get items() {
346
- return u();
384
+ return c();
347
385
  },
348
386
  get value() {
349
387
  return e.value;
@@ -356,9 +394,9 @@ function xe(e) {
356
394
  }
357
395
  });
358
396
  }
359
- J(["click", "keydown"]);
397
+ V(["click", "keydown"]);
360
398
  export {
361
- me as Dropdown,
362
- xe as Select,
363
- fe as resolveDropdownTriggerKeyAction
399
+ xe as Dropdown,
400
+ Re as Select,
401
+ ye as resolveDropdownTriggerKeyAction
364
402
  };
@@ -1,14 +1,39 @@
1
1
  export declare const DIALOG_SURFACE_HOST_ATTR = "data-floe-dialog-surface-host";
2
+ export declare const SURFACE_PORTAL_HOST_ATTR = "data-floe-dialog-surface-host";
2
3
  export declare const DIALOG_SURFACE_BOUNDARY_ATTR = "data-floe-dialog-surface-boundary";
3
4
  export type DialogSurfaceInteractionSnapshot = Readonly<{
4
5
  target: Element | null;
5
6
  activeElement: Element | null;
6
7
  recordedAt: number;
7
8
  }>;
9
+ export type SurfacePortalInteractionSnapshot = DialogSurfaceInteractionSnapshot;
10
+ export type SurfacePortalMode = 'global' | 'surface';
8
11
  export type ResolvedDialogSurfaceHost = Readonly<{
9
12
  host: HTMLElement | null;
10
- mode: 'global' | 'surface';
13
+ mode: SurfacePortalMode;
14
+ }>;
15
+ export type ResolvedSurfacePortalHost = ResolvedDialogSurfaceHost;
16
+ export type SurfacePortalBoundaryRect = Readonly<{
17
+ left: number;
18
+ top: number;
19
+ right: number;
20
+ bottom: number;
21
+ width: number;
22
+ height: number;
11
23
  }>;
12
24
  export declare function ensureDialogSurfaceInteractionTracking(): void;
25
+ export declare function ensureSurfacePortalInteractionTracking(): void;
13
26
  export declare function resolveDialogSurfaceHost(): ResolvedDialogSurfaceHost;
27
+ export declare function resolveSurfacePortalHost(): ResolvedSurfacePortalHost;
28
+ export declare function isSurfacePortalMode(surfaceHost: ResolvedSurfacePortalHost): boolean;
29
+ export declare function resolveSurfacePortalMount(surfaceHost: ResolvedSurfacePortalHost): HTMLElement | undefined;
30
+ export declare function resolveSurfacePortalBoundaryRect(surfaceHost: ResolvedSurfacePortalHost): SurfacePortalBoundaryRect;
31
+ export declare function projectSurfacePortalPosition(position: Readonly<{
32
+ x: number;
33
+ y: number;
34
+ }>, surfaceHost: ResolvedSurfacePortalHost): Readonly<{
35
+ x: number;
36
+ y: number;
37
+ }>;
14
38
  export declare function __resetDialogSurfaceScopeForTests(): void;
39
+ export declare function __resetSurfacePortalScopeForTests(): void;