asheeui 0.6.9 → 0.6.12

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.
Files changed (50) hide show
  1. package/dist/components/accordion/Accordion.js +7 -7
  2. package/dist/components/autocomplete/Autocomplete.d.ts +5 -5
  3. package/dist/components/autocomplete/Autocomplete.d.ts.map +1 -1
  4. package/dist/components/autocomplete/Autocomplete.js +41 -40
  5. package/dist/components/autocomplete/autocomplete-config.d.ts +2 -2
  6. package/dist/components/autocomplete/autocomplete-config.d.ts.map +1 -1
  7. package/dist/components/autocomplete/autocomplete-config.js +7 -6
  8. package/dist/components/carousel/Carousel.js +43 -43
  9. package/dist/components/chip/Chip.js +8 -8
  10. package/dist/components/date-picker/DatePicker.d.ts +6 -5
  11. package/dist/components/date-picker/DatePicker.d.ts.map +1 -1
  12. package/dist/components/date-picker/DatePicker.js +87 -87
  13. package/dist/components/date-picker/date-picker-config.d.ts +3 -2
  14. package/dist/components/date-picker/date-picker-config.d.ts.map +1 -1
  15. package/dist/components/date-picker/date-picker-config.js +7 -6
  16. package/dist/components/marquee/Marquee.js +22 -22
  17. package/dist/components/multi-select/MultiSelect.d.ts +5 -5
  18. package/dist/components/multi-select/MultiSelect.d.ts.map +1 -1
  19. package/dist/components/multi-select/MultiSelect.js +45 -43
  20. package/dist/components/multi-select/multi-select-config.d.ts +2 -2
  21. package/dist/components/multi-select/multi-select-config.d.ts.map +1 -1
  22. package/dist/components/multi-select/multi-select-config.js +8 -7
  23. package/dist/components/radio/radio-config.d.ts +3 -2
  24. package/dist/components/radio/radio-config.d.ts.map +1 -1
  25. package/dist/components/radio/radio-config.js +9 -8
  26. package/dist/components/select/Select.d.ts +5 -5
  27. package/dist/components/select/Select.d.ts.map +1 -1
  28. package/dist/components/select/Select.js +53 -52
  29. package/dist/components/select/select-config.d.ts +3 -5
  30. package/dist/components/select/select-config.d.ts.map +1 -1
  31. package/dist/components/select/select-config.js +7 -6
  32. package/dist/components/select-menu/SelectMenu.d.ts +15 -3
  33. package/dist/components/select-menu/SelectMenu.d.ts.map +1 -1
  34. package/dist/components/select-menu/SelectMenu.js +144 -116
  35. package/dist/components/select-menu/use-select-floating.d.ts +5 -2
  36. package/dist/components/select-menu/use-select-floating.d.ts.map +1 -1
  37. package/dist/components/select-menu/use-select-floating.js +14 -7
  38. package/dist/components/switch/switch-config.d.ts +3 -2
  39. package/dist/components/switch/switch-config.d.ts.map +1 -1
  40. package/dist/components/switch/switch-config.js +6 -5
  41. package/dist/components/toast/ToastItem.js +30 -30
  42. package/dist/components/toast/ToastProvider.d.ts +5 -5
  43. package/dist/components/toast/ToastProvider.d.ts.map +1 -1
  44. package/dist/components/toast/ToastProvider.js +121 -117
  45. package/dist/components/toast/toast-styles.d.ts +8 -0
  46. package/dist/components/toast/toast-styles.d.ts.map +1 -1
  47. package/dist/components/toast/toast-styles.js +11 -3
  48. package/dist/index.d.ts +1 -0
  49. package/dist/index.d.ts.map +1 -1
  50. package/package.json +3 -20
@@ -35,6 +35,17 @@ export interface SelectMenuProps {
35
35
  * Ref setter for the floating element.
36
36
  */
37
37
  setFloatingRef: (node: HTMLElement | null) => void;
38
+ /**
39
+ * Whether the floating element has completed its first position update.
40
+ * When false, the menu stays in the DOM (so Floating UI can measure it)
41
+ * but is hidden (`invisible opacity-0 pointer-events-none`), preventing a
42
+ * visible flash at its initial (0, 0) coordinate. The enter animation
43
+ * classes are only applied once this is true so the reveal and animation
44
+ * start together.
45
+ *
46
+ * @default true
47
+ */
48
+ isPositioned?: boolean;
38
49
  /**
39
50
  * Available options to display in the menu.
40
51
  */
@@ -111,8 +122,8 @@ export interface SelectMenuProps {
111
122
  * supports custom option rendering, search filtering, and configurable
112
123
  * item styles through the cascade resolution system.
113
124
  *
114
- * By default, the menu uses React's createPortal to render at the document
115
- * body level. This ensures the menu escapes CSS containment, overflow
125
+ * By default, the menu uses Floating UI's FloatingPortal to render at the
126
+ * document body level. This ensures the menu escapes CSS containment, overflow
116
127
  * clipping, and stacking context issues. The portal can be disabled via
117
128
  * the `menuProps.portal` prop if the menu needs to stay within a specific
118
129
  * parent container. This is typically controlled by the parent component.
@@ -123,6 +134,7 @@ export interface SelectMenuProps {
123
134
  * @param props.floatingStyles - CSS styles for positioning.
124
135
  * @param props.getFloatingProps - Props getter for the floating element.
125
136
  * @param props.setFloatingRef - Ref setter for the floating element.
137
+ * @param props.isPositioned - Whether the floating element has been positioned by Floating UI. Defaults to true.
126
138
  * @param props.options - Available options to display.
127
139
  * @param props.selectedValues - Currently selected values.
128
140
  * @param props.onSelectMenuOption - Callback fired when an option is selected.
@@ -179,7 +191,7 @@ export interface SelectMenuProps {
179
191
  * @see Button - The button component used for menu items.
180
192
  */
181
193
  export declare const SelectMenu: {
182
- ({ isOpen, context, floatingStyles, getFloatingProps, setFloatingRef, options, selectedValues, onSelectMenuOption, isSearch, searchPlaceholder, searchInputName, searchQuery, onSearchChange, belowList, menuConfig, menuProps, renderOption, initialFocus, returnFocus, }: SelectMenuProps): import("react").JSX.Element | null;
194
+ ({ isOpen, context, floatingStyles, getFloatingProps, setFloatingRef, isPositioned, options, selectedValues, onSelectMenuOption, isSearch, searchPlaceholder, searchInputName, searchQuery, onSearchChange, belowList, menuConfig, menuProps, renderOption, initialFocus, returnFocus, }: SelectMenuProps): import("react").JSX.Element | null;
183
195
  displayName: string;
184
196
  };
185
197
  //# sourceMappingURL=SelectMenu.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SelectMenu.d.ts","sourceRoot":"","sources":["../../../src/components/select-menu/SelectMenu.tsx"],"names":[],"mappings":"AAUA,OAAO,EAAE,KAAK,eAAe,EAAwB,MAAM,oBAAoB,CAAC;AAChF,OAAO,EAEL,KAAK,SAAS,EAIf,MAAM,OAAO,CAAC;AAUf,OAAO,EAEL,KAAK,UAAU,EACf,KAAK,gBAAgB,EACtB,MAAM,sBAAsB,CAAC;AAE9B;;;GAGG;AACH,MAAM,MAAM,SAAS,GAAG,UAAU,GAAG;IACnC;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,MAAM,EAAE,OAAO,CAAC;IAEhB;;OAEG;IACH,OAAO,EAAE,eAAe,CAAC;IAEzB;;OAEG;IACH,cAAc,EAAE,KAAK,CAAC,aAAa,CAAC;IAEpC;;OAEG;IACH,gBAAgB,EAAE,CAChB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAChC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAE7B;;OAEG;IACH,cAAc,EAAE,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAC;IAEnD;;OAEG;IACH,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAE5B;;;OAGG;IACH,cAAc,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IAErC;;;OAGG;IACH,kBAAkB,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAEvD;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAEzC;;OAEG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;IAEtB;;OAEG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC;IAExB;;;OAGG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;IAEtB;;;OAGG;IACH,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,gBAAgB,EAAE,UAAU,EAAE,OAAO,KAAK,SAAS,CAAC;IAE5E;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IAErD;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6EG;AACH,eAAO,MAAM,UAAU;gRAoBpB,eAAe;;CA2NjB,CAAC"}
1
+ {"version":3,"file":"SelectMenu.d.ts","sourceRoot":"","sources":["../../../src/components/select-menu/SelectMenu.tsx"],"names":[],"mappings":"AAUA,OAAO,EACL,KAAK,eAAe,EAGrB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAGL,KAAK,SAAS,EAIf,MAAM,OAAO,CAAC;AASf,OAAO,EAEL,KAAK,UAAU,EACf,KAAK,gBAAgB,EACtB,MAAM,sBAAsB,CAAC;AAE9B;;;GAGG;AACH,MAAM,MAAM,SAAS,GAAG,UAAU,GAAG;IACnC;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,MAAM,EAAE,OAAO,CAAC;IAEhB;;OAEG;IACH,OAAO,EAAE,eAAe,CAAC;IAEzB;;OAEG;IACH,cAAc,EAAE,KAAK,CAAC,aAAa,CAAC;IAEpC;;OAEG;IACH,gBAAgB,EAAE,CAChB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAChC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAE7B;;OAEG;IACH,cAAc,EAAE,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAC;IAEnD;;;;;;;;;OASG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB;;OAEG;IACH,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAE5B;;;OAGG;IACH,cAAc,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IAErC;;;OAGG;IACH,kBAAkB,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAEvD;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAEzC;;OAEG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;IAEtB;;OAEG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC;IAExB;;;OAGG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;IAEtB;;;OAGG;IACH,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,gBAAgB,EAAE,UAAU,EAAE,OAAO,KAAK,SAAS,CAAC;IAE5E;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IAErD;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAkFD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8EG;AACH,eAAO,MAAM,UAAU;8RAqBpB,eAAe;;CAwMjB,CAAC"}
@@ -1,161 +1,189 @@
1
1
  "use client";
2
- import { jsx as a, jsxs as V } from "react/jsx-runtime";
3
- import { FloatingFocusManager as X } from "@floating-ui/react";
4
- import { useState as Y, useEffect as Z, useMemo as $ } from "react";
5
- import { createPortal as n } from "react-dom";
6
- import { CheckIcon as u } from "../../icons/CheckIcon.js";
7
- import { SearchIcon as m } from "../../icons/SearchIcon.js";
8
- import { useAsheeConfig as p } from "../../libs/context.js";
9
- import { resolveCascade as r, resolveRadiusKey as C } from "../../utils/resolve-token.js";
10
- import { Button as g } from "../button/Button.js";
11
- import { Input as P } from "../input/Input.js";
12
- import { FALLBACK_SELECT_MENU_CONFIG as d } from "./select-menu-config.js";
13
- import { cn as tt } from "../../utils/cn.js";
14
- const lt = ({
15
- isOpen: s,
16
- context: A,
17
- floatingStyles: F,
18
- getFloatingProps: L,
19
- setFloatingRef: M,
20
- options: v = [],
21
- selectedValues: E = [],
22
- onSelectMenuOption: Q,
23
- isSearch: y = !0,
24
- searchPlaceholder: T = "Search...",
25
- searchInputName: j = "select-menu-search",
26
- searchQuery: K,
27
- onSearchChange: b,
28
- belowList: h,
29
- menuConfig: l,
2
+ import { jsx as l, jsxs as Q, Fragment as J } from "react/jsx-runtime";
3
+ import { FloatingFocusManager as X, FloatingPortal as Y } from "@floating-ui/react";
4
+ import { useState as Z, useEffect as $, useMemo as u, memo as m } from "react";
5
+ import { CheckIcon as p } from "../../icons/CheckIcon.js";
6
+ import { SearchIcon as C } from "../../icons/SearchIcon.js";
7
+ import { useAsheeConfig as g } from "../../libs/context.js";
8
+ import { resolveCascade as o, resolveRadiusKey as P } from "../../utils/resolve-token.js";
9
+ import { Button as tt } from "../button/Button.js";
10
+ import { Input as et } from "../input/Input.js";
11
+ import { FALLBACK_SELECT_MENU_CONFIG as c } from "./select-menu-config.js";
12
+ import { cn as lt } from "../../utils/cn.js";
13
+ const rt = m(function({
14
+ filteredOptions: y,
15
+ selectedValues: w,
16
+ onSelectMenuOption: I,
17
+ renderOption: b,
18
+ itemVariant: N,
19
+ itemColor: i,
20
+ activeItemVariant: S,
21
+ activeItemColor: V,
22
+ radius: s,
23
+ size: f
24
+ }) {
25
+ const k = (r) => w.includes(r);
26
+ return y.length === 0 ? /* @__PURE__ */ l("div", { className: "px-3 py-4 text-xs text-foreground/70 text-center", children: "No options found" }) : /* @__PURE__ */ l(J, { children: y.map((r) => {
27
+ const d = k(r.value);
28
+ return b ? b(r, d) : /* @__PURE__ */ Q(
29
+ tt,
30
+ {
31
+ variant: d ? S : N,
32
+ color: d ? V : i,
33
+ radius: s,
34
+ size: f,
35
+ isDisabled: r.disabled,
36
+ onClick: () => I(r),
37
+ className: "w-full justify-between font-normal text-left transition-colors truncate",
38
+ children: [
39
+ /* @__PURE__ */ l("span", { children: r.label }),
40
+ d && /* @__PURE__ */ l(p, { className: "w-3.5 h-3.5 shrink-0 ml-2" })
41
+ ]
42
+ },
43
+ String(r.value)
44
+ );
45
+ }) });
46
+ }), at = ({
47
+ isOpen: v,
48
+ context: y,
49
+ floatingStyles: w,
50
+ getFloatingProps: I,
51
+ setFloatingRef: b,
52
+ isPositioned: N = !0,
53
+ options: i = [],
54
+ selectedValues: S = [],
55
+ onSelectMenuOption: V,
56
+ isSearch: s = !0,
57
+ searchPlaceholder: f = "Search...",
58
+ searchInputName: k = "select-menu-search",
59
+ searchQuery: r,
60
+ onSearchChange: d,
61
+ belowList: z,
62
+ menuConfig: e,
30
63
  menuProps: t = {},
31
- renderOption: x,
32
- initialFocus: R,
33
- returnFocus: _
64
+ renderOption: T,
65
+ initialFocus: j,
66
+ returnFocus: K
34
67
  }) => {
35
- const c = p(), [B, D] = Y(""), i = K ?? B, G = (e) => {
36
- b ? b(e) : D(e);
37
- }, w = r(
68
+ const h = g(), [R, _] = Z(""), x = r ?? R, n = (a) => {
69
+ d ? d(a) : _(a);
70
+ }, F = o(
38
71
  t == null ? void 0 : t.lockScroll,
39
- l == null ? void 0 : l.lockScroll,
72
+ e == null ? void 0 : e.lockScroll,
40
73
  void 0,
41
- d.lockScroll
42
- ), O = r(
74
+ c.lockScroll
75
+ ), B = o(
43
76
  t == null ? void 0 : t.portal,
44
- l == null ? void 0 : l.portal,
77
+ e == null ? void 0 : e.portal,
45
78
  void 0,
46
- d.portal
47
- ), I = r(
79
+ c.portal
80
+ ), O = o(
48
81
  t == null ? void 0 : t.portalTarget,
49
- l == null ? void 0 : l.portalTarget,
82
+ e == null ? void 0 : e.portalTarget,
50
83
  void 0,
51
84
  typeof document < "u" ? document.body : null
52
85
  );
53
- Z(() => {
54
- if (!s || !w) return;
55
- const e = document.body.style.overflow, o = document.body.style.position, J = document.body.style.width;
86
+ $(() => {
87
+ if (!v || !F) return;
88
+ const a = document.body.style.overflow, q = document.body.style.position, H = document.body.style.width;
56
89
  return document.body.style.overflow = "hidden", document.body.style.position = "fixed", document.body.style.width = "100%", () => {
57
- document.body.style.overflow = e, document.body.style.position = o, document.body.style.width = J;
90
+ document.body.style.overflow = a, document.body.style.position = q, document.body.style.width = H;
58
91
  };
59
- }, [s, w]);
60
- const N = $(() => !y || !i.trim() ? v : v.filter(
61
- (e) => e.label.toLowerCase().includes(i.toLowerCase())
62
- ), [v, y, i]), U = (e) => E.includes(e), W = r(
92
+ }, [v, F]);
93
+ const D = u(() => !s || !x.trim() ? i : i.filter(
94
+ (a) => a.label.toLowerCase().includes(x.toLowerCase())
95
+ ), [i, s, x]), G = o(
63
96
  t == null ? void 0 : t.itemVariant,
64
- l == null ? void 0 : l.itemVariant,
97
+ e == null ? void 0 : e.itemVariant,
65
98
  void 0,
66
- d.itemVariant
67
- ), S = r(
99
+ c.itemVariant
100
+ ), L = o(
68
101
  t == null ? void 0 : t.itemColor,
69
- l == null ? void 0 : l.itemColor,
70
- c.defaultColor,
71
- d.itemColor
72
- ), q = r(
102
+ e == null ? void 0 : e.itemColor,
103
+ h.defaultColor,
104
+ c.itemColor
105
+ ), U = o(
73
106
  t == null ? void 0 : t.activeItemVariant,
74
- l == null ? void 0 : l.activeItemVariant,
75
- c.defaultVariant,
76
- d.activeItemVariant
77
- ), H = r(
107
+ e == null ? void 0 : e.activeItemVariant,
108
+ h.defaultVariant,
109
+ c.activeItemVariant
110
+ ), W = o(
78
111
  t == null ? void 0 : t.activeItemColor,
79
- l == null ? void 0 : l.activeItemColor,
80
- c.defaultColor,
81
- d.activeItemColor
82
- ), f = C(
112
+ e == null ? void 0 : e.activeItemColor,
113
+ h.defaultColor,
114
+ c.activeItemColor
115
+ ), M = P(
83
116
  t == null ? void 0 : t.radius,
84
- l == null ? void 0 : l.radius,
85
- c.defaultRadius,
86
- d.radius
87
- ), k = r(
117
+ e == null ? void 0 : e.radius,
118
+ h.defaultRadius,
119
+ c.radius
120
+ ), A = o(
88
121
  t == null ? void 0 : t.size,
89
- l == null ? void 0 : l.size,
122
+ e == null ? void 0 : e.size,
90
123
  void 0,
91
- d.size
124
+ c.size
92
125
  );
93
- if (!s) return null;
94
- const z = /* @__PURE__ */ a(
126
+ if (!v) return null;
127
+ const E = /* @__PURE__ */ l(
95
128
  X,
96
129
  {
97
- context: A,
130
+ context: y,
98
131
  modal: !1,
99
- initialFocus: R,
100
- returnFocus: _,
101
- children: /* @__PURE__ */ V(
132
+ initialFocus: j,
133
+ returnFocus: K,
134
+ children: /* @__PURE__ */ Q(
102
135
  "div",
103
136
  {
104
- ref: M,
105
- style: { ...F },
106
- className: tt(
107
- "z-100 w-full outline-none max-h-60 shadow-xl bg-background border border-border p-1 flex flex-col gap-0.5 overflow-y-auto scrollable-hidden",
108
- "animate-in fade-in-0 zoom-in-95 slide-in-from-top-1 duration-150 ease-out",
137
+ ref: b,
138
+ style: { ...w },
139
+ className: lt(
140
+ "z-30 w-full outline-none max-h-60 shadow-xl bg-background border border-border p-1 flex flex-col gap-0.5 overflow-y-auto scrollable-hidden",
141
+ N ? "animate-in fade-in-0 zoom-in-95 slide-in-from-top-1 duration-150 ease-out" : "invisible opacity-0 pointer-events-none",
109
142
  t == null ? void 0 : t.className
110
143
  ),
111
- ...L(),
144
+ ...I(),
112
145
  children: [
113
- y && /* @__PURE__ */ a("div", { className: "w-full p-1 mb-1 sticky top-0 z-10 border-b border-border", children: /* @__PURE__ */ a(
114
- P,
146
+ s && /* @__PURE__ */ l("div", { className: "w-full p-1 mb-1 sticky top-0 z-10 border-b border-border", children: /* @__PURE__ */ l(
147
+ et,
115
148
  {
116
- name: j,
149
+ name: k,
117
150
  type: "text",
118
151
  variant: "bordered",
119
- radius: f,
120
- color: S,
121
- size: k,
122
- value: i,
123
- onChange: (e) => G(e.target.value),
124
- startContent: /* @__PURE__ */ a(m, { className: "w-3.5 h-3.5 text-foreground/70" }),
125
- placeholder: T,
152
+ radius: M,
153
+ color: L,
154
+ size: A,
155
+ value: x,
156
+ onChange: (a) => n(a.target.value),
157
+ startContent: /* @__PURE__ */ l(C, { className: "w-3.5 h-3.5 text-foreground/70" }),
158
+ placeholder: f,
126
159
  autoFocus: !0,
127
160
  className: "w-full pl-8 h-8 text-xs bg-secondary/30 border-none focus-visible:ring-0"
128
161
  }
129
162
  ) }),
130
- N.length === 0 ? /* @__PURE__ */ a("div", { className: "px-3 py-4 text-xs text-foreground/70 text-center", children: "No options found" }) : N.map((e) => {
131
- const o = U(e.value);
132
- return x ? x(e, o) : /* @__PURE__ */ V(
133
- g,
134
- {
135
- variant: o ? q : W,
136
- color: o ? H : S,
137
- radius: f,
138
- size: k,
139
- isDisabled: e.disabled,
140
- onClick: () => Q(e),
141
- className: "w-full justify-between font-normal text-left transition-colors truncate",
142
- children: [
143
- /* @__PURE__ */ a("span", { children: e.label }),
144
- o && /* @__PURE__ */ a(u, { className: "w-3.5 h-3.5 shrink-0 ml-2" })
145
- ]
146
- },
147
- String(e.value)
148
- );
149
- }),
150
- h && /* @__PURE__ */ a("div", { className: "border-t border-border pt-1 mt-1", children: h })
163
+ /* @__PURE__ */ l(
164
+ rt,
165
+ {
166
+ filteredOptions: D,
167
+ selectedValues: S,
168
+ onSelectMenuOption: V,
169
+ renderOption: T,
170
+ itemVariant: G,
171
+ itemColor: L,
172
+ activeItemVariant: U,
173
+ activeItemColor: W,
174
+ radius: M,
175
+ size: A
176
+ }
177
+ ),
178
+ z && /* @__PURE__ */ l("div", { className: "border-t border-border pt-1 mt-1", children: z })
151
179
  ]
152
180
  }
153
181
  )
154
182
  }
155
183
  );
156
- return O && I ? n(z, I) : z;
184
+ return B ? /* @__PURE__ */ l(Y, { root: O, children: E }) : E;
157
185
  };
158
- lt.displayName = "SelectMenu";
186
+ at.displayName = "SelectMenu";
159
187
  export {
160
- lt as SelectMenu
188
+ at as SelectMenu
161
189
  };
@@ -56,7 +56,9 @@ export interface UseSelectFloatingProps {
56
56
  * This hook configures Floating UI with sensible defaults for dropdown
57
57
  * components. It handles automatic position updates, viewport edge detection
58
58
  * via flip and shift middleware, and optional width matching of the
59
- * reference element.
59
+ * reference element. Positioning uses `strategy: "fixed"` with Floating
60
+ * UI's event-driven `autoUpdate` tracking so portaled menus stay aligned
61
+ * while the page scrolls without paying per-frame re-render cost.
60
62
  *
61
63
  * @param props - Configuration options for the floating element.
62
64
  * @param props.isOpen - Whether the floating element is open.
@@ -66,7 +68,8 @@ export interface UseSelectFloatingProps {
66
68
  * @param props.offsetDistance - Distance from reference in pixels. Defaults to 4.
67
69
  * @param props.padding - Viewport padding for shift middleware. Defaults to 8.
68
70
  * @param props.matchReferenceWidth - Whether to match reference width. Defaults to true.
69
- * @returns The Floating UI context including refs, styles, and middleware.
71
+ * @returns The Floating UI context including refs, styles, middleware, and
72
+ * the `isPositioned` flag for gating initial-render visibility.
70
73
  *
71
74
  * @example
72
75
  * ```tsx
@@ -1 +1 @@
1
- {"version":3,"file":"use-select-floating.d.ts","sourceRoot":"","sources":["../../../src/components/select-menu/use-select-floating.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EAKL,KAAK,SAAS,EAEd,KAAK,iBAAiB,EAEvB,MAAM,oBAAoB,CAAC;AAE5B;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;OAGG;IACH,MAAM,EAAE,OAAO,CAAC;IAEhB;;;OAGG;IACH,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAEtC;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;IAEtB;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;;;OAKG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,EAAE,EACrE,MAAM,EACN,YAAY,EACZ,QAAgB,EAChB,SAA0B,EAC1B,cAAkB,EAClB,OAAW,EACX,mBAA0B,GAC3B,EAAE,sBAAsB,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAsB/C"}
1
+ {"version":3,"file":"use-select-floating.d.ts","sourceRoot":"","sources":["../../../src/components/select-menu/use-select-floating.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,EAKL,KAAK,SAAS,EAEd,KAAK,iBAAiB,EAEvB,MAAM,oBAAoB,CAAC;AAE5B;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;OAGG;IACH,MAAM,EAAE,OAAO,CAAC;IAEhB;;;OAGG;IACH,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAEtC;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;IAEtB;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;;;OAKG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,EAAE,EACrE,MAAM,EACN,YAAY,EACZ,QAAgB,EAChB,SAA0B,EAC1B,cAAkB,EAClB,OAAW,EACX,mBAA0B,GAC3B,EAAE,sBAAsB,GAAG,iBAAiB,CAAC,CAAC,CAAC,CA6B/C"}
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { useFloating as r, autoUpdate as f, offset as u, flip as g, shift as d, size as c } from "@floating-ui/react";
2
+ import { useFloating as f, autoUpdate as p, offset as g, flip as u, shift as d, size as c } from "@floating-ui/react";
3
3
  function m({
4
4
  isOpen: i,
5
5
  onOpenChange: n,
@@ -7,22 +7,29 @@ function m({
7
7
  placement: a = "bottom-start",
8
8
  offsetDistance: l = 4,
9
9
  padding: s = 8,
10
- matchReferenceWidth: p = !0
10
+ matchReferenceWidth: r = !0
11
11
  }) {
12
- return r({
12
+ return f({
13
13
  open: i,
14
14
  onOpenChange: (e) => !o && n(e),
15
15
  placement: a,
16
- whileElementsMounted: f,
16
+ strategy: "fixed",
17
+ // Event-driven tracking (ancestorScroll + ancestorResize, both on by
18
+ // default) is sufficient to keep a fixed-strategy floating element
19
+ // aligned during scroll, and far cheaper than polling every animation
20
+ // frame. animationFrame:true doesn't fix scroll lag on its own — the
21
+ // actual cost was re-rendering the option list on every tick; see
22
+ // SelectMenuOptionsList in SelectMenu.tsx.
23
+ whileElementsMounted: p,
17
24
  middleware: [
18
- u(l),
19
- g(),
25
+ g(l),
26
+ u(),
20
27
  d({ padding: s }),
21
28
  c({
22
29
  apply({ availableHeight: e, elements: t }) {
23
30
  Object.assign(t.floating.style, {
24
31
  maxHeight: `${e}px`,
25
- ...p && {
32
+ ...r && {
26
33
  width: `${t.reference.getBoundingClientRect().width}px`
27
34
  }
28
35
  });
@@ -1,4 +1,5 @@
1
- import { FieldConfig, FieldSizeKey } from '../field/field-config';
1
+ import { FieldSizeKey } from '../field/field-config';
2
+ import { InputConfig } from '../input';
2
3
  /**
3
4
  * Size key for the switch component.
4
5
  * Maps to the FieldSizeKey type: "sm", "md", or "lg".
@@ -10,7 +11,7 @@ export type SwitchSizeKey = FieldSizeKey;
10
11
  * Set under `components.switch` in the AsheeUI config. Values feed the
11
12
  * component-level fallback tier of the theme cascade.
12
13
  */
13
- export interface SwitchConfig extends FieldConfig {
14
+ export interface SwitchConfig extends InputConfig {
14
15
  }
15
16
  /**
16
17
  * Default config values registered for the Switch component.
@@ -1 +1 @@
1
- {"version":3,"file":"switch-config.d.ts","sourceRoot":"","sources":["../../../src/components/switch/switch-config.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAGL,KAAK,WAAW,EAChB,KAAK,YAAY,EAClB,MAAM,uBAAuB,CAAC;AAE/B;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,YAAY,CAAC;AAEzC;;;;;GAKG;AACH,MAAM,WAAW,YAAa,SAAQ,WAAW;CAAG;AAEpD;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,YAGjC,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,EAAE,QAAQ,CAAC,YAAY,CACnC,CAAC;AAExB,OAAO,QAAQ,qBAAqB,CAAC;IACnC,UAAU,2BAA2B;QACnC,MAAM,EAAE,YAAY,CAAC;KACtB;CACF"}
1
+ {"version":3,"file":"switch-config.d.ts","sourceRoot":"","sources":["../../../src/components/switch/switch-config.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAEL,KAAK,YAAY,EAClB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAsB,KAAK,WAAW,EAAE,MAAM,UAAU,CAAC;AAEhE;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,YAAY,CAAC;AAEzC;;;;;GAKG;AACH,MAAM,WAAW,YAAa,SAAQ,WAAW;CAAG;AAEpD;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,YAGjC,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,EAAE,QAAQ,CAAC,YAAY,CACnC,CAAC;AAExB,OAAO,QAAQ,qBAAqB,CAAC;IACnC,UAAU,2BAA2B;QACnC,MAAM,EAAE,YAAY,CAAC;KACtB;CACF"}
@@ -1,12 +1,13 @@
1
1
  "use client";
2
2
  import { registerComponentDefaults as t } from "../../libs/registry.js";
3
- import { FALLBACK_FIELD_CONFIG as o, defaultFieldConfig as e } from "../field/field-config.js";
4
- const i = {
5
- ...e,
3
+ import { FALLBACK_FIELD_CONFIG as o } from "../field/field-config.js";
4
+ import { defaultInputConfig as i } from "../input/input-config.js";
5
+ const r = {
6
+ ...i,
6
7
  radius: "full"
7
8
  }, C = o;
8
- t("switch", i);
9
+ t("switch", r);
9
10
  export {
10
11
  C as FALLBACK_SWITCH_CONFIG,
11
- i as defaultSwitchConfig
12
+ r as defaultSwitchConfig
12
13
  };
@@ -12,7 +12,7 @@ import { FALLBACK_TOAST_CONFIG as n } from "./toast-config.js";
12
12
  import { TOAST_WIDTH_CLASS as V, TOAST_PADDING_CLASS as q, TOAST_FONT_CLASS as J, TOAST_TITLE_FONT_CLASS as Q, TOAST_ANIMATION_STATE as X } from "./toast-styles.js";
13
13
  import { usePausableTimeout as Y } from "./use-pausable-timeout.js";
14
14
  import { RADIUS_CLASS as Z } from "../../shared/radius.js";
15
- import { cn as s } from "../../utils/cn.js";
15
+ import { cn as t } from "../../utils/cn.js";
16
16
  import { resolveVariantClass as $ } from "../../shared/variant.js";
17
17
  function ee(r = "info") {
18
18
  switch (r) {
@@ -28,47 +28,47 @@ function ee(r = "info") {
28
28
  return "secondary";
29
29
  }
30
30
  }
31
- function re(r = "info", t = !1) {
32
- const o = s("w-5 h-5", t && "text-current");
31
+ function re(r = "info", s = !1) {
32
+ const o = t("w-5 h-5", s && "text-current");
33
33
  switch (r) {
34
34
  case "success":
35
- return /* @__PURE__ */ e(P, { className: s(o, !t && "text-success") });
35
+ return /* @__PURE__ */ e(P, { className: t(o, !s && "text-success") });
36
36
  case "error":
37
- return /* @__PURE__ */ e(z, { className: s(o, !t && "text-danger") });
37
+ return /* @__PURE__ */ e(z, { className: t(o, !s && "text-danger") });
38
38
  case "warning":
39
- return /* @__PURE__ */ e(H, { className: s(o, !t && "text-warning") });
39
+ return /* @__PURE__ */ e(H, { className: t(o, !s && "text-warning") });
40
40
  default:
41
- return /* @__PURE__ */ e(B, { className: s(o, !t && "text-primary") });
41
+ return /* @__PURE__ */ e(B, { className: t(o, !s && "text-primary") });
42
42
  }
43
43
  }
44
- function te({
44
+ function se({
45
45
  id: r,
46
- title: t,
46
+ title: s,
47
47
  message: o,
48
48
  type: u = "info",
49
49
  timeout: v = 3500,
50
50
  icon: A,
51
- action: f,
51
+ action: d,
52
52
  dismissible: N = !0,
53
53
  onDismiss: c,
54
54
  placement: x,
55
55
  size: i,
56
- variant: p,
57
- color: I,
58
- radius: S,
59
- animated: d
56
+ variant: f,
57
+ color: b,
58
+ radius: I,
59
+ animated: p
60
60
  }) {
61
61
  var h;
62
- const l = (h = R().components) == null ? void 0 : h.toast, [m, b] = G(!1), g = U(
63
- d,
62
+ const l = (h = R().components) == null ? void 0 : h.toast, [m, S] = G(!1), g = U(
63
+ p,
64
64
  l == null ? void 0 : l.animated,
65
65
  void 0,
66
66
  n.animated
67
67
  ), w = K(() => {
68
- g && !m ? (b(!0), setTimeout(() => {
68
+ g && !m ? (S(!0), setTimeout(() => {
69
69
  c(r);
70
70
  }, 150)) : c(r);
71
- }, [g, m, c, r]), { pause: _, resume: k } = Y(w, v), O = I ?? ee(u), y = p === "solid", L = a(
71
+ }, [g, m, c, r]), { pause: _, resume: k } = Y(w, v), O = b ?? ee(u), y = f === "solid", L = a(
72
72
  i,
73
73
  V,
74
74
  n.size
@@ -85,48 +85,48 @@ function te({
85
85
  Q,
86
86
  n.size
87
87
  ), M = a(
88
- S,
88
+ I,
89
89
  Z,
90
90
  n.radius
91
- ), T = X[x], j = d ? m ? T.exit : T.enter : "";
91
+ ), T = X[x], j = p ? m ? T.exit : T.enter : "";
92
92
  return /* @__PURE__ */ C(
93
93
  "div",
94
94
  {
95
95
  onMouseEnter: _,
96
96
  onMouseLeave: k,
97
- className: s(
98
- "pointer-events-auto relative flex gap-3 items-start shadow-lg border backdrop-blur-md select-none overflow-clip transition-all duration-200 active:scale-[0.99]",
97
+ className: t(
98
+ "pointer-events-auto relative flex gap-3 items-start shadow-lg border backdrop-blur-md select-none scrollbar-hide overflow-hidden transition-all duration-200 active:scale-[0.99]",
99
99
  "bg-background",
100
100
  L,
101
101
  E,
102
102
  M,
103
103
  j,
104
- $(p, O)
104
+ $(f, O)
105
105
  ),
106
106
  children: [
107
107
  /* @__PURE__ */ e("div", { className: "shrink-0 pt-0.5 ps-1", children: A ?? re(u, y) }),
108
108
  /* @__PURE__ */ C("div", { className: "flex-1 min-w-0 flex flex-col gap-0.5", children: [
109
- t && /* @__PURE__ */ e(
109
+ s && /* @__PURE__ */ e(
110
110
  "span",
111
111
  {
112
- className: s(
112
+ className: t(
113
113
  "leading-tight truncate text-current",
114
114
  D
115
115
  ),
116
- children: t
116
+ children: s
117
117
  }
118
118
  ),
119
119
  /* @__PURE__ */ e(
120
120
  "div",
121
121
  {
122
- className: s(
122
+ className: t(
123
123
  "leading-snug wrap-break-word opacity-90 text-current",
124
124
  F
125
125
  ),
126
126
  children: o
127
127
  }
128
128
  ),
129
- f && /* @__PURE__ */ e("div", { className: "mt-2 flex items-center gap-2", children: f })
129
+ d && /* @__PURE__ */ e("div", { className: "mt-2 flex items-center gap-2", children: d })
130
130
  ] }),
131
131
  N && /* @__PURE__ */ e(
132
132
  "button",
@@ -142,7 +142,7 @@ function te({
142
142
  }
143
143
  );
144
144
  }
145
- te.displayName = "ToastItem";
145
+ se.displayName = "ToastItem";
146
146
  export {
147
- te as ToastItem
147
+ se as ToastItem
148
148
  };
@@ -29,11 +29,11 @@ export interface ToastProviderProps extends ToastConfig {
29
29
  * own size, placement, variant, radius, and animation settings via the
30
30
  * toast options.
31
31
  *
32
- * The provider uses React's createPortal to render toasts at the document
33
- * body level by default. This ensures toasts escape CSS containment,
34
- * stacking context, and overflow issues. Portaling can be disabled via
35
- * the `portal` config option if the toasts need to stay within a specific
36
- * parent container.
32
+ * The provider uses Floating UI's FloatingPortal to render toasts at the
33
+ * document body level by default. This ensures toasts escape CSS containment,
34
+ * stacking context, and overflow issues. Portaling can be disabled via the
35
+ * `portal` config option if the toasts need to stay within a specific parent
36
+ * container.
37
37
  *
38
38
  * @param props - ToastProvider configuration options.
39
39
  * @param props.children - Child components.
@@ -1 +1 @@
1
- {"version":3,"file":"ToastProvider.d.ts","sourceRoot":"","sources":["../../../src/components/toast/ToastProvider.tsx"],"names":[],"mappings":"AAQA,OAAO,EAAE,KAAK,SAAS,EAAkC,MAAM,OAAO,CAAC;AAQvE,OAAO,EAEL,KAAK,WAAW,EAIjB,MAAM,gBAAgB,CAAC;AAIxB;;;GAGG;AACH,MAAM,WAAW,kBAAmB,SAAQ,WAAW;IACrD;;OAEG;IACH,QAAQ,EAAE,SAAS,CAAC;IAEpB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;;OAIG;IACH,YAAY,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;CACnC;AAID;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyEG;AACH,wBAAgB,aAAa,CAAC,EAC5B,QAAQ,EACR,IAAI,EACJ,SAAS,EACT,OAAO,EACP,MAAM,EACN,cAAc,EACd,SAAS,EACT,QAAQ,EACR,MAAM,EAAE,UAAU,EAClB,YAAY,EAAE,gBAAgB,EAC9B,SAAS,GACV,EAAE,kBAAkB,+BAkQpB"}
1
+ {"version":3,"file":"ToastProvider.d.ts","sourceRoot":"","sources":["../../../src/components/toast/ToastProvider.tsx"],"names":[],"mappings":"AASA,OAAO,EAAE,KAAK,SAAS,EAAkC,MAAM,OAAO,CAAC;AAOvE,OAAO,EAEL,KAAK,WAAW,EAIjB,MAAM,gBAAgB,CAAC;AAKxB;;;GAGG;AACH,MAAM,WAAW,kBAAmB,SAAQ,WAAW;IACrD;;OAEG;IACH,QAAQ,EAAE,SAAS,CAAC;IAEpB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;;OAIG;IACH,YAAY,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;CACnC;AAID;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyEG;AACH,wBAAgB,aAAa,CAAC,EAC5B,QAAQ,EACR,IAAI,EACJ,SAAS,EACT,OAAO,EACP,MAAM,EACN,cAAc,EACd,SAAS,EACT,QAAQ,EACR,MAAM,EAAE,UAAU,EAClB,YAAY,EAAE,gBAAgB,EAC9B,SAAS,GACV,EAAE,kBAAkB,+BA+QpB"}