@g4rcez/components 3.0.2 → 4.0.1
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.
- package/dist/CaretDown.es-Cj7klWI3.js +33 -0
- package/dist/CaretDown.es-Cj7klWI3.js.map +1 -0
- package/dist/CaretRight.es-0-M8D9y8.js +33 -0
- package/dist/CaretRight.es-0-M8D9y8.js.map +1 -0
- package/dist/CheckCircle.es-C6QWLfk_.js +33 -0
- package/dist/CheckCircle.es-C6QWLfk_.js.map +1 -0
- package/dist/File.es-CA-vuPED.js +33 -0
- package/dist/File.es-CA-vuPED.js.map +1 -0
- package/dist/IconBase.es-DJ1oCtpo.js +50 -0
- package/dist/IconBase.es-DJ1oCtpo.js.map +1 -0
- package/dist/Info.es-CrZKs4q4.js +33 -0
- package/dist/Info.es-CrZKs4q4.js.map +1 -0
- package/dist/MotionConfigContext-C7MqlSdv.js.map +1 -1
- package/dist/Warning.es-D_eI6tLe.js +39 -0
- package/dist/Warning.es-D_eI6tLe.js.map +1 -0
- package/dist/X.es-BJ1O93El.js +39 -0
- package/dist/X.es-BJ1O93El.js.map +1 -0
- package/dist/ai/docs/Alert.md +1 -1
- package/dist/ai/docs/AnimatedList.md +3 -3
- package/dist/ai/docs/Button.md +1 -1
- package/dist/ai/docs/CommandPalette.md +7 -7
- package/dist/ai/docs/Dropdown.md +4 -4
- package/dist/ai/docs/Empty.md +9 -9
- package/dist/ai/docs/Expand.md +1 -1
- package/dist/ai/docs/FileUpload.md +2 -2
- package/dist/ai/docs/Input.md +2 -2
- package/dist/ai/docs/InputField.md +2 -2
- package/dist/ai/docs/List.md +3 -3
- package/dist/ai/docs/Menu.md +3 -3
- package/dist/ai/docs/MultiSelect.md +1 -1
- package/dist/ai/docs/PageCalendar.md +1 -1
- package/dist/ai/docs/Select.md +1 -1
- package/dist/ai/docs/Slot.md +1 -1
- package/dist/ai/docs/Stats.md +11 -11
- package/dist/ai/docs/Table.md +1 -1
- package/dist/ai/docs/Tag.md +2 -2
- package/dist/ai/docs/Timeline.md +5 -5
- package/dist/ai/docs/Toolbar.md +2 -2
- package/dist/ai/docs/Tooltip.md +3 -3
- package/dist/ai/docs/TransferList.md +2 -2
- package/dist/{autocomplete-Boida9R7.js → autocomplete-Cn9Z2hLq.js} +48 -48
- package/dist/autocomplete-Cn9Z2hLq.js.map +1 -0
- package/dist/{calendar-BswV66Nx.js → calendar-B5lSd0ID.js} +599 -571
- package/dist/calendar-B5lSd0ID.js.map +1 -0
- package/dist/components/display/alert.js +18 -18
- package/dist/components/display/alert.js.map +1 -1
- package/dist/components/display/calendar.js +4 -4
- package/dist/components/display/card.d.ts +2 -2
- package/dist/components/display/card.d.ts.map +1 -1
- package/dist/components/display/card.js +6 -6
- package/dist/components/display/card.js.map +1 -1
- package/dist/components/display/empty.d.ts +2 -2
- package/dist/components/display/empty.d.ts.map +1 -1
- package/dist/components/display/list.js +15 -15
- package/dist/components/display/list.js.map +1 -1
- package/dist/components/display/notifications.js +5 -5
- package/dist/components/display/tabs.js +1 -1
- package/dist/components/floating/command-palette.d.ts +3 -3
- package/dist/components/floating/command-palette.d.ts.map +1 -1
- package/dist/components/floating/dropdown.js +1 -1
- package/dist/components/floating/expand.js +1 -1
- package/dist/components/floating/menu.d.ts +2 -2
- package/dist/components/floating/menu.d.ts.map +1 -1
- package/dist/components/floating/menu.js +31 -31
- package/dist/components/floating/menu.js.map +1 -1
- package/dist/components/floating/modal.js +35 -35
- package/dist/components/floating/modal.js.map +1 -1
- package/dist/components/floating/tooltip.js +1 -1
- package/dist/components/form/autocomplete.js +5 -5
- package/dist/components/form/date-picker.js +3 -3
- package/dist/components/form/file-upload.d.ts.map +1 -1
- package/dist/components/form/file-upload.js +3 -3
- package/dist/components/form/input-field.d.ts.map +1 -1
- package/dist/components/form/input.js +1 -1
- package/dist/components/form/select.js +29 -29
- package/dist/components/form/select.js.map +1 -1
- package/dist/components/form/task-list.js.map +1 -1
- package/dist/components/form/transfer-list.js +15 -15
- package/dist/components/form/transfer-list.js.map +1 -1
- package/dist/components/page-calendar/calendar-header.d.ts.map +1 -1
- package/dist/components/page-calendar/day-view.d.ts.map +1 -1
- package/dist/components/page-calendar/month-view.d.ts.map +1 -1
- package/dist/components/page-calendar/page-calendar.utils.d.ts +6 -0
- package/dist/components/page-calendar/page-calendar.utils.d.ts.map +1 -1
- package/dist/components/page-calendar/week-view.d.ts.map +1 -1
- package/dist/components/table/table.js +3 -3
- package/dist/config/context.d.ts +2 -0
- package/dist/config/context.d.ts.map +1 -1
- package/dist/context-BFXNJVn2.js.map +1 -1
- package/dist/{date-picker-BxPTdZPy.js → date-picker-DwNo22lx.js} +316 -288
- package/dist/date-picker-DwNo22lx.js.map +1 -0
- package/dist/{file-upload-BB6BdGcE.js → file-upload-Brf2NkLr.js} +1103 -976
- package/dist/file-upload-Brf2NkLr.js.map +1 -0
- package/dist/{floating-ui.react-DycKASR0.js → floating-ui.react-QNHG9W4N.js} +205 -205
- package/dist/{floating-ui.react-DycKASR0.js.map → floating-ui.react-QNHG9W4N.js.map} +1 -1
- package/dist/hooks/use-components-provider.d.ts.map +1 -1
- package/dist/index-0YMC-_Lt.js.map +1 -1
- package/dist/index-BelDtX5M.js +1821 -0
- package/dist/index-BelDtX5M.js.map +1 -0
- package/dist/{index-BtlhELJ3.js → index-C-PuFUZi.js} +136 -136
- package/dist/index-C-PuFUZi.js.map +1 -0
- package/dist/index-Z-fZHxfJ.js +335 -0
- package/dist/index-Z-fZHxfJ.js.map +1 -0
- package/dist/index-t1qLJTt5.js.map +1 -1
- package/dist/index.css +1 -1
- package/dist/index.js +2583 -2463
- package/dist/index.js.map +1 -1
- package/dist/{input-CoJoHIhd.js → input-CrGrSnUt.js} +2 -2
- package/dist/{input-CoJoHIhd.js.map → input-CrGrSnUt.js.map} +1 -1
- package/dist/input-field-5vYcz5tT.js +166 -0
- package/dist/input-field-5vYcz5tT.js.map +1 -0
- package/dist/notifications-cUdVPs-B.js +2786 -0
- package/dist/notifications-cUdVPs-B.js.map +1 -0
- package/dist/proxy-BZcQiBrp.js.map +1 -1
- package/dist/{slot-CQW8ZzBb.js → slot-CRyweuj0.js} +5 -5
- package/dist/{slot-CQW8ZzBb.js.map → slot-CRyweuj0.js.map} +1 -1
- package/dist/{tabs-ccIA7vMo.js → tabs-S00a8qq8.js} +5 -5
- package/dist/{tabs-ccIA7vMo.js.map → tabs-S00a8qq8.js.map} +1 -1
- package/dist/use-motion-value-eGwNuWuw.js.map +1 -1
- package/package.json +2 -2
- package/dist/autocomplete-Boida9R7.js.map +0 -1
- package/dist/calendar-BswV66Nx.js.map +0 -1
- package/dist/chevron-down-BBFYYzZq.js +0 -6
- package/dist/chevron-down-BBFYYzZq.js.map +0 -1
- package/dist/chevron-right-DvXGOiS_.js +0 -6
- package/dist/chevron-right-DvXGOiS_.js.map +0 -1
- package/dist/circle-check-big-3M5lhTxx.js +0 -9
- package/dist/circle-check-big-3M5lhTxx.js.map +0 -1
- package/dist/createLucideIcon-CP-mMPfa.js +0 -76
- package/dist/createLucideIcon-CP-mMPfa.js.map +0 -1
- package/dist/date-picker-BxPTdZPy.js.map +0 -1
- package/dist/file-CBCP85VI.js +0 -15
- package/dist/file-CBCP85VI.js.map +0 -1
- package/dist/file-upload-BB6BdGcE.js.map +0 -1
- package/dist/index-BJ1ayTam.js +0 -126
- package/dist/index-BJ1ayTam.js.map +0 -1
- package/dist/index-BtlhELJ3.js.map +0 -1
- package/dist/index-ChfR6F8d.js +0 -1590
- package/dist/index-ChfR6F8d.js.map +0 -1
- package/dist/index-DE4shK8D.js +0 -215
- package/dist/index-DE4shK8D.js.map +0 -1
- package/dist/info-N5jWZg2A.js +0 -10
- package/dist/info-N5jWZg2A.js.map +0 -1
- package/dist/input-field-DTeIrwpK.js +0 -146
- package/dist/input-field-DTeIrwpK.js.map +0 -1
- package/dist/notifications-NPuFDsBp.js +0 -2550
- package/dist/notifications-NPuFDsBp.js.map +0 -1
- package/dist/triangle-alert-CHMhQ6yd.js +0 -16
- package/dist/triangle-alert-CHMhQ6yd.js.map +0 -1
- package/dist/x-B9bYxG31.js +0 -9
- package/dist/x-B9bYxG31.js.map +0 -1
package/dist/ai/docs/Tooltip.md
CHANGED
|
@@ -67,11 +67,11 @@ import { Tooltip } from "@g4rcez/components/tooltip";
|
|
|
67
67
|
### Icon Button with Label
|
|
68
68
|
|
|
69
69
|
```tsx
|
|
70
|
-
import {
|
|
70
|
+
import { FloppyDiskIcon } from "@phosphor-icons/react";
|
|
71
71
|
import { Tooltip } from "@g4rcez/components/tooltip";
|
|
72
72
|
import { Button } from "@g4rcez/components/button";
|
|
73
73
|
|
|
74
|
-
<Tooltip title={<Button size="icon" theme="ghost-neutral"><
|
|
74
|
+
<Tooltip title={<Button size="icon" theme="ghost-neutral"><FloppyDiskIcon size={16} /></Button>}>
|
|
75
75
|
Save (Ctrl+S)
|
|
76
76
|
</Tooltip>
|
|
77
77
|
```
|
|
@@ -187,7 +187,7 @@ import { Tooltip } from "@g4rcez/components/tooltip";
|
|
|
187
187
|
### Form Field Help Tooltip
|
|
188
188
|
|
|
189
189
|
```tsx
|
|
190
|
-
import { InfoIcon } from "
|
|
190
|
+
import { InfoIcon } from "@phosphor-icons/react";
|
|
191
191
|
import { Tooltip } from "@g4rcez/components/tooltip";
|
|
192
192
|
|
|
193
193
|
<label className="block text-sm font-medium text-foreground mb-1">
|
|
@@ -80,7 +80,7 @@ export default function RoleAssignment() {
|
|
|
80
80
|
### With custom item rendering
|
|
81
81
|
|
|
82
82
|
```tsx
|
|
83
|
-
import { ShieldIcon } from "
|
|
83
|
+
import { ShieldIcon } from "@phosphor-icons/react";
|
|
84
84
|
import { TransferList } from "@g4rcez/components/transfer-list";
|
|
85
85
|
|
|
86
86
|
type Permission = { id: string; label: string; scope: string };
|
|
@@ -128,7 +128,7 @@ export default function PermissionManager() {
|
|
|
128
128
|
|
|
129
129
|
- Each item is rendered with a `Checkbox` for selection, giving it full keyboard and screen-reader support.
|
|
130
130
|
- Lists are virtualized using `react-virtuoso` for performance with large datasets.
|
|
131
|
-
- Transfer buttons use `
|
|
131
|
+
- Transfer buttons use `CaretRightIcon` from `@phosphor-icons/react` and should have descriptive `aria-label` attributes when used.
|
|
132
132
|
|
|
133
133
|
## Data Attributes
|
|
134
134
|
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { jsx as f, jsxs as z } from "react/jsx-runtime";
|
|
2
|
-
import { u as He, o as Ye, m as $e, g as ze, b as Ve, h as Oe, c as Pe, d as Ze, i as _e, j as Ue, F as Be, l as We } from "./floating-ui.react-
|
|
3
|
-
import {
|
|
2
|
+
import { u as He, o as Ye, m as $e, g as ze, b as Ve, h as Oe, c as Pe, d as Ze, i as _e, j as Ue, F as Be, l as We } from "./floating-ui.react-QNHG9W4N.js";
|
|
3
|
+
import { e as je } from "./CaretDown.es-Cj7klWI3.js";
|
|
4
|
+
import { useRef as E, useState as x, useEffect as S, forwardRef as G, Fragment as Ke } from "react";
|
|
4
5
|
import { flushSync as ie } from "react-dom";
|
|
5
|
-
import { Y as
|
|
6
|
-
import { h as
|
|
7
|
-
import { i as q, c as
|
|
8
|
-
import { u as
|
|
9
|
-
import { I as
|
|
10
|
-
import { m as J, A as
|
|
11
|
-
import { C as lt } from "./chevron-down-BBFYYzZq.js";
|
|
6
|
+
import { Y as Qe } from "./index-C-PuFUZi.js";
|
|
7
|
+
import { h as qe, o as Ge, I as T, g as ce, i as Je, c as ue, m as Xe, f as et } from "./dom-Dl8XH0CK.js";
|
|
8
|
+
import { i as q, c as tt, s as de } from "./fns-D2eyJKd5.js";
|
|
9
|
+
import { u as nt } from "./use-translations-BwLKTrZv.js";
|
|
10
|
+
import { I as rt } from "./input-field-5vYcz5tT.js";
|
|
11
|
+
import { m as J, A as lt } from "./proxy-BZcQiBrp.js";
|
|
12
12
|
const fe = () => window.matchMedia("@media (pointer: coarse)"), ot = () => {
|
|
13
13
|
const t = E(q() ? null : fe()), [n, a] = x(q() ? !1 : t.current?.matches ?? !1);
|
|
14
14
|
return S(() => {
|
|
@@ -19,8 +19,8 @@ const fe = () => window.matchMedia("@media (pointer: coarse)"), ot = () => {
|
|
|
19
19
|
return S(() => {
|
|
20
20
|
if (!(a.current === null && !t) && n !== "block-only" && n === "overflow-hidden")
|
|
21
21
|
if (t) {
|
|
22
|
-
if (l.current = document.documentElement.style.overflowY, document.documentElement.style.overflowY = "hidden", o ||
|
|
23
|
-
document.documentElement.style.padding =
|
|
22
|
+
if (l.current = document.documentElement.style.overflowY, document.documentElement.style.overflowY = "hidden", o || tt()) return;
|
|
23
|
+
document.documentElement.style.padding = qe(document.documentElement) ? "0 15px 0 0" : "";
|
|
24
24
|
} else
|
|
25
25
|
document.documentElement.style.padding = "", document.documentElement.style.overflowY = l.current;
|
|
26
26
|
}, [t, o, n]), S(() => {
|
|
@@ -28,7 +28,7 @@ const fe = () => window.matchMedia("@media (pointer: coarse)"), ot = () => {
|
|
|
28
28
|
const i = new AbortController(), u = document.documentElement, s = (m) => {
|
|
29
29
|
const d = a.current;
|
|
30
30
|
if (d && d.contains(m.target)) {
|
|
31
|
-
const
|
|
31
|
+
const w = d.getBoundingClientRect(), k = d.style.height ? Number(Ge(d.style.height)) : null, H = T.number(k) ? k : w.height, R = d.scrollHeight <= H;
|
|
32
32
|
return H === d.scrollHeight ? t ? m.preventDefault() : void 0 : R ? void 0 : t ? m.preventDefault() : void 0;
|
|
33
33
|
}
|
|
34
34
|
return m.currentTarget === document.documentElement, t ? m.preventDefault() : void 0;
|
|
@@ -47,8 +47,8 @@ const fe = () => window.matchMedia("@media (pointer: coarse)"), ot = () => {
|
|
|
47
47
|
let s = u + 1;
|
|
48
48
|
const m = [u];
|
|
49
49
|
for (let d = 1; d < n.length; d++) {
|
|
50
|
-
const
|
|
51
|
-
if (s = t.indexOf(
|
|
50
|
+
const w = n[d];
|
|
51
|
+
if (s = t.indexOf(w, s), s === -1)
|
|
52
52
|
return;
|
|
53
53
|
m.push(s), s++;
|
|
54
54
|
}
|
|
@@ -83,19 +83,19 @@ const fe = () => window.matchMedia("@media (pointer: coarse)"), ot = () => {
|
|
|
83
83
|
l.forEach((s) => {
|
|
84
84
|
const m = he(i, s.key);
|
|
85
85
|
if (!m) return;
|
|
86
|
-
const d = V(`${s.value}`.toLocaleLowerCase()).trim(),
|
|
87
|
-
if (it(
|
|
86
|
+
const d = V(`${s.value}`.toLocaleLowerCase()).trim(), w = V(`${m}`.toLocaleLowerCase()).trim();
|
|
87
|
+
if (it(w, d, s.score, s.match))
|
|
88
88
|
return void o.set(u, i);
|
|
89
|
-
T.function(s.ifNotMatch) && s.ifNotMatch(d,
|
|
89
|
+
T.function(s.ifNotMatch) && s.ifNotMatch(d, w) && o.set(u, i);
|
|
90
90
|
});
|
|
91
91
|
}), Array.from(o.values());
|
|
92
|
-
}, ut = (t) => /* @__PURE__ */ f(
|
|
92
|
+
}, ut = (t) => /* @__PURE__ */ f(Ke, { children: t.children }), dt = {
|
|
93
93
|
duration: 200,
|
|
94
94
|
open: { transform: "scaleY(1)", opacity: 1 },
|
|
95
95
|
close: { transform: "scaleY(0)", opacity: 0 },
|
|
96
96
|
initial: { transform: "scaleY(0)", opacity: 0.2 }
|
|
97
97
|
}, ft = [], mt = G(function(n, a) {
|
|
98
|
-
return /* @__PURE__ */ f(J.ul, { ...n, ref: a, className: "max-h-96 w-full overscroll-contain rounded-lg", children: /* @__PURE__ */ f(
|
|
98
|
+
return /* @__PURE__ */ f(J.ul, { ...n, ref: a, className: "max-h-96 w-full overscroll-contain rounded-lg", children: /* @__PURE__ */ f(lt, { children: n.children }) });
|
|
99
99
|
}), gt = G(function({ item: n, context: a, ...o }, l) {
|
|
100
100
|
return /* @__PURE__ */ f(J.li, { ...o, ref: l, className: "first:rounded-t-lg last:rounded-t-lg" });
|
|
101
101
|
}), ht = { List: mt, Item: gt }, L = 40, St = G(
|
|
@@ -110,29 +110,29 @@ const fe = () => window.matchMedia("@media (pointer: coarse)"), ot = () => {
|
|
|
110
110
|
interactive: s,
|
|
111
111
|
emptyMessage: m,
|
|
112
112
|
optionalText: d,
|
|
113
|
-
labelClassName:
|
|
113
|
+
labelClassName: w,
|
|
114
114
|
feedback: k = null,
|
|
115
115
|
hideLeft: H = !1,
|
|
116
116
|
required: R = !1,
|
|
117
117
|
dynamicOption: X = !1,
|
|
118
118
|
...c
|
|
119
119
|
}, be) => {
|
|
120
|
-
const
|
|
120
|
+
const ye = E(null), ee = E(null), O = E(null), P = c.value ?? c.defaultValue ?? "", te = nt(), [ne, A] = x(() => Math.min(320, L * l.length)), [y, D] = x(!1), [C, F] = x(""), [I, Z] = x(P), [we, _] = x(() => l.find((e) => e.value === P)?.label ?? P), [v, Y] = x(null), re = E(ft), Ce = at(y, "block-only"), le = X && C !== "" ? [
|
|
121
121
|
{
|
|
122
122
|
value: C,
|
|
123
123
|
label: C,
|
|
124
124
|
"data-dynamic": "true"
|
|
125
125
|
},
|
|
126
126
|
...l
|
|
127
|
-
] : l, oe = () => ie(() =>
|
|
127
|
+
] : l, oe = () => ie(() => D(!0)), xe = C ? ct(le, "value", [
|
|
128
128
|
{ key: "value", value: C },
|
|
129
129
|
{ key: "label", value: C }
|
|
130
130
|
]) : le, U = () => {
|
|
131
|
-
|
|
131
|
+
D(!1), A(0);
|
|
132
132
|
}, g = xe.filter((e) => e.hidden !== !0), Ee = X ? void 0 : `^(${l.map((e) => `${de(e.value)}${e.label ? "|" + de(e.label) : ""}`).join("|")})$`, { x: Ie, y: Ne, strategy: Le, refs: b, context: M, placement: ae } = He({
|
|
133
|
-
open:
|
|
133
|
+
open: y,
|
|
134
134
|
transform: !0,
|
|
135
|
-
onOpenChange:
|
|
135
|
+
onOpenChange: D,
|
|
136
136
|
placement: "bottom-start",
|
|
137
137
|
whileElementsMounted: Ve,
|
|
138
138
|
middleware: [
|
|
@@ -147,7 +147,7 @@ const fe = () => window.matchMedia("@media (pointer: coarse)"), ot = () => {
|
|
|
147
147
|
}
|
|
148
148
|
})
|
|
149
149
|
]
|
|
150
|
-
}), Se = Oe(M, dt), { getReferenceProps: ke, getFloatingProps: Re, getItemProps:
|
|
150
|
+
}), Se = Oe(M, dt), { getReferenceProps: ke, getFloatingProps: Re, getItemProps: Ae } = Pe([
|
|
151
151
|
Ze(M, { role: "listbox" }),
|
|
152
152
|
_e(M),
|
|
153
153
|
Ue(M, {
|
|
@@ -169,15 +169,15 @@ const fe = () => window.matchMedia("@media (pointer: coarse)"), ot = () => {
|
|
|
169
169
|
e && (_(e.label ?? e.value), Z(c.value));
|
|
170
170
|
}
|
|
171
171
|
}, [c.value, l.length]), S(() => {
|
|
172
|
-
if (!
|
|
172
|
+
if (!y) return A(0);
|
|
173
173
|
const e = b.reference;
|
|
174
174
|
if (e.current === null) return;
|
|
175
175
|
const r = ce(e.current, window.innerHeight);
|
|
176
|
-
setTimeout(() =>
|
|
177
|
-
}, [C,
|
|
176
|
+
setTimeout(() => A(Math.min(r, g.length * L)), 100);
|
|
177
|
+
}, [C, y, b.reference, g.length]), S(() => {
|
|
178
178
|
const e = b.reference.current;
|
|
179
179
|
if (e)
|
|
180
|
-
return
|
|
180
|
+
return Je(e);
|
|
181
181
|
}, []);
|
|
182
182
|
const B = (e, r) => {
|
|
183
183
|
Z(e.value);
|
|
@@ -186,18 +186,18 @@ const fe = () => window.matchMedia("@media (pointer: coarse)"), ot = () => {
|
|
|
186
186
|
h?.setAttribute("data-value", e.value), h.value = e.value;
|
|
187
187
|
const p = new Event("change", { bubbles: !1, cancelable: !0 });
|
|
188
188
|
h.dispatchEvent(p), c.onChange && c.onChange(p), _(e.label ?? ""), U(), F(""), Y(r);
|
|
189
|
-
},
|
|
189
|
+
}, De = (e) => {
|
|
190
190
|
const r = e.target.value;
|
|
191
|
-
return F(r), !
|
|
191
|
+
return F(r), !y && r === "" ? D(!0) : (e.target.name = c.name || "", r ? D(!0) : c.onChange?.(e));
|
|
192
192
|
}, Fe = () => {
|
|
193
193
|
oe(), F(""), b.reference.current?.focus();
|
|
194
194
|
}, Me = () => {
|
|
195
195
|
Y((e) => e === null ? 0 : e), oe(), F("");
|
|
196
196
|
}, Te = () => {
|
|
197
|
-
b.reference.current?.setAttribute("data-value", ""), F(""), Z(""), _(""),
|
|
197
|
+
b.reference.current?.setAttribute("data-value", ""), F(""), Z(""), _(""), et(b.reference.current), U();
|
|
198
198
|
}, N = c.id || c.name, W = `${N}-shadow`, j = g.length === 0, se = ae === "top" || ae === "top-start";
|
|
199
199
|
return /* @__PURE__ */ z(
|
|
200
|
-
|
|
200
|
+
rt,
|
|
201
201
|
{
|
|
202
202
|
...c,
|
|
203
203
|
left: t,
|
|
@@ -206,7 +206,7 @@ const fe = () => window.matchMedia("@media (pointer: coarse)"), ot = () => {
|
|
|
206
206
|
form: c.form,
|
|
207
207
|
loading: o,
|
|
208
208
|
name: c.name,
|
|
209
|
-
feedback:
|
|
209
|
+
feedback: y && se ? c.title : k,
|
|
210
210
|
hideLeft: H,
|
|
211
211
|
required: R,
|
|
212
212
|
title: c.title,
|
|
@@ -216,12 +216,12 @@ const fe = () => window.matchMedia("@media (pointer: coarse)"), ot = () => {
|
|
|
216
216
|
id: W,
|
|
217
217
|
optionalText: d,
|
|
218
218
|
componentName: "autocomplete",
|
|
219
|
-
labelClassName:
|
|
219
|
+
labelClassName: w,
|
|
220
220
|
placeholder: c.placeholder,
|
|
221
221
|
right: /* @__PURE__ */ z("span", { className: "flex items-center gap-0.5", children: [
|
|
222
222
|
a,
|
|
223
223
|
/* @__PURE__ */ z("button", { type: "button", className: "p-2 transition-colors link:text-primary md:p-1", onClick: Fe, children: [
|
|
224
|
-
/* @__PURE__ */ f(
|
|
224
|
+
/* @__PURE__ */ f(je, { size: 20 }),
|
|
225
225
|
/* @__PURE__ */ f("span", { className: "sr-only", children: te.inputCaretDown })
|
|
226
226
|
] }),
|
|
227
227
|
I ? /* @__PURE__ */ f("button", { type: "button", onClick: Te, className: "p-2 transition-colors link:text-danger md:p-1", children: /* @__PURE__ */ f("svg", { width: "15", height: "15", viewBox: "0 0 15 15", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ f(
|
|
@@ -243,7 +243,7 @@ const fe = () => window.matchMedia("@media (pointer: coarse)"), ot = () => {
|
|
|
243
243
|
...c,
|
|
244
244
|
onFocus: Me,
|
|
245
245
|
pattern: Ee,
|
|
246
|
-
onChange:
|
|
246
|
+
onChange: De,
|
|
247
247
|
id: W,
|
|
248
248
|
name: W,
|
|
249
249
|
ref: b.setReference,
|
|
@@ -251,7 +251,7 @@ const fe = () => window.matchMedia("@media (pointer: coarse)"), ot = () => {
|
|
|
251
251
|
onKeyDown(e) {
|
|
252
252
|
if (e.key === "Escape")
|
|
253
253
|
return e.currentTarget.blur(), U();
|
|
254
|
-
if (
|
|
254
|
+
if (y) {
|
|
255
255
|
if (e.key === "ArrowDown") {
|
|
256
256
|
let r = T.number(v) ? v + 1 : 0;
|
|
257
257
|
return r > g.length - 1 && (r = 0), O.current?.scrollIntoView({ index: r }), Y(r);
|
|
@@ -274,7 +274,7 @@ const fe = () => window.matchMedia("@media (pointer: coarse)"), ot = () => {
|
|
|
274
274
|
"data-name": N,
|
|
275
275
|
"data-target": N,
|
|
276
276
|
required: R,
|
|
277
|
-
value:
|
|
277
|
+
value: y ? C : l.length === 0 ? "" : we || I,
|
|
278
278
|
"aria-autocomplete": "list",
|
|
279
279
|
autoComplete: "off",
|
|
280
280
|
className: ue(
|
|
@@ -299,11 +299,11 @@ const fe = () => window.matchMedia("@media (pointer: coarse)"), ot = () => {
|
|
|
299
299
|
defaultValue: c.value || I || void 0
|
|
300
300
|
}
|
|
301
301
|
),
|
|
302
|
-
/* @__PURE__ */ f(Be, { preserveTabOrder: !0, children:
|
|
302
|
+
/* @__PURE__ */ f(Be, { preserveTabOrder: !0, children: y ? /* @__PURE__ */ f(We, { modal: !0, guards: !0, returnFocus: !1, context: M, initialFocus: -1, visuallyHiddenDismiss: !0, children: /* @__PURE__ */ z(
|
|
303
303
|
J.div,
|
|
304
304
|
{
|
|
305
305
|
...Re({
|
|
306
|
-
ref:
|
|
306
|
+
ref: Xe(Ce, b.setFloating),
|
|
307
307
|
style: { ...Se.styles, left: Ie, top: Ne ?? 0, position: Le, height: "auto" }
|
|
308
308
|
}),
|
|
309
309
|
initial: !1,
|
|
@@ -314,14 +314,14 @@ const fe = () => window.matchMedia("@media (pointer: coarse)"), ot = () => {
|
|
|
314
314
|
se ? "origin-[bottom_center]" : "origin-[top_center]"
|
|
315
315
|
),
|
|
316
316
|
onAnimationComplete: () => {
|
|
317
|
-
if (!
|
|
317
|
+
if (!y) return A(0);
|
|
318
318
|
const r = b.floating.current.querySelectorAll("li").item(0), h = (r ? r.getBoundingClientRect().height : L) * g.length;
|
|
319
|
-
return ie(() =>
|
|
319
|
+
return ie(() => A(h + 2));
|
|
320
320
|
},
|
|
321
321
|
children: [
|
|
322
322
|
j ? /* @__PURE__ */ f("div", { role: "option", className: "w-full border-b border-tooltip-border", children: /* @__PURE__ */ f("span", { className: "flex w-full justify-between p-2 text-left text-disabled", children: m || te.autocompleteEmpty }) }) : null,
|
|
323
323
|
/* @__PURE__ */ f(
|
|
324
|
-
|
|
324
|
+
Qe,
|
|
325
325
|
{
|
|
326
326
|
overscan: 40,
|
|
327
327
|
ref: O,
|
|
@@ -331,7 +331,7 @@ const fe = () => window.matchMedia("@media (pointer: coarse)"), ot = () => {
|
|
|
331
331
|
defaultItemHeight: L,
|
|
332
332
|
components: ht,
|
|
333
333
|
scrollerRef: (e) => {
|
|
334
|
-
|
|
334
|
+
ye.current = e;
|
|
335
335
|
},
|
|
336
336
|
className: "border-floating max-h-full overscroll-contain rounded-lg bg-floating-background p-0 text-foreground",
|
|
337
337
|
itemContent: (e, r) => {
|
|
@@ -340,7 +340,7 @@ const fe = () => window.matchMedia("@media (pointer: coarse)"), ot = () => {
|
|
|
340
340
|
"button",
|
|
341
341
|
{
|
|
342
342
|
"data-value": r.value,
|
|
343
|
-
...
|
|
343
|
+
...Ae({
|
|
344
344
|
ref: ($) => {
|
|
345
345
|
re.current[e] = $;
|
|
346
346
|
},
|
|
@@ -372,4 +372,4 @@ export {
|
|
|
372
372
|
ct as f,
|
|
373
373
|
at as u
|
|
374
374
|
};
|
|
375
|
-
//# sourceMappingURL=autocomplete-
|
|
375
|
+
//# sourceMappingURL=autocomplete-Cn9Z2hLq.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"autocomplete-Cn9Z2hLq.js","sources":["../src/hooks/use-is-coarse-device.ts","../src/hooks/use-remove-scroll.ts","../src/lib/fzf.ts","../src/components/form/autocomplete.tsx"],"sourcesContent":["import { useEffect, useRef, useState } from \"react\";\nimport { isSsr } from \"../lib/fns\";\n\nconst getCoarse = () => window.matchMedia(\"@media (pointer: coarse)\");\n\nexport const useIsCoarseDevice = (): boolean => {\n const ref = useRef(isSsr() ? null : getCoarse());\n const [isCoarse, setIsCoarse] = useState<boolean>(isSsr() ? false : (ref.current?.matches ?? false));\n useEffect(() => {\n const coerse = ref.current === null ? getCoarse() : ref.current;\n coerse.addEventListener(\"change\", (e) => setIsCoarse(e.matches));\n }, []);\n\n return isCoarse;\n};\n","import { useEffect, useRef } from \"react\";\nimport { Is, onlyNumbers } from \"sidekicker\";\nimport { hasVerticalScroll } from \"../lib/dom\";\nimport { isMobile, isSsr } from \"../lib/fns\";\nimport { useIsCoarseDevice } from \"./use-is-coarse-device\";\n\ntype ScrollRemoveStyle = \"overflow-hidden\" | \"block-only\";\n\nexport const useRemoveScroll = <T extends HTMLElement>(remove: boolean, removeStyle: ScrollRemoveStyle = \"overflow-hidden\") => {\n const ref = useRef<T | null>(null);\n const isCoarseDevice = useIsCoarseDevice();\n const prev = useRef(isSsr() ? \"\" : document.documentElement.style.overflowY);\n\n useEffect(() => {\n if (ref.current === null && !remove) return;\n if (removeStyle === \"block-only\") return;\n if (removeStyle === \"overflow-hidden\") {\n if (remove) {\n prev.current = document.documentElement.style.overflowY;\n document.documentElement.style.overflowY = \"hidden\";\n if (isCoarseDevice || isMobile()) return;\n document.documentElement.style.padding = hasVerticalScroll(document.documentElement) ? \"0 15px 0 0\" : \"\";\n } else {\n document.documentElement.style.padding = \"\";\n document.documentElement.style.overflowY = prev.current;\n }\n }\n }, [remove, isCoarseDevice, removeStyle]);\n\n useEffect(() => {\n if (!remove) return;\n const controller = new AbortController();\n const html = document.documentElement;\n const removeScroll = (e: Event) => {\n const el = ref.current;\n if (el) {\n if (el.contains(e.target as HTMLElement)) {\n const rect = el.getBoundingClientRect();\n const realHeight = el.style.height ? Number(onlyNumbers(el.style.height)) : null;\n const scrollable = Is.number(realHeight) ? realHeight : rect.height;\n const hasScroll = el.scrollHeight <= scrollable;\n if (scrollable === el.scrollHeight) return remove ? e.preventDefault() : undefined;\n if (hasScroll) return;\n return remove ? e.preventDefault() : undefined;\n }\n }\n if (e.currentTarget === document.documentElement) {\n return remove ? e.preventDefault() : undefined;\n }\n return remove ? e.preventDefault() : undefined;\n };\n html.addEventListener(\"wheel\", removeScroll, { signal: controller.signal, passive: false });\n html.addEventListener(\"scroll\", removeScroll, { signal: controller.signal, passive: false });\n return () => {\n controller.abort();\n };\n }, [remove]);\n\n return ref;\n};\n","import { Is } from \"sidekicker\";\nimport { Any, Walk } from \"../types\";\n\nexport const fuzzyMatch = (text: string, search: string): number | null => {\n text = String(text).toLocaleLowerCase();\n search = String(search).toLocaleLowerCase();\n const firstChar = search[0];\n const firstCharIndexes = text\n .split(\"\")\n .map((char, index) => (char === firstChar ? index : false))\n .filter((index): index is number => index !== false);\n\n if (firstCharIndexes.length === 0) {\n return null;\n }\n const matchedIndexes: number[][] = [];\n firstCharIndexes.forEach((startingIndex) => {\n let index = startingIndex + 1;\n const indexes = [startingIndex];\n for (let i = 1; i < search.length; i++) {\n const letter = search[i]!;\n index = text.indexOf(letter, index);\n\n if (index === -1) {\n return;\n }\n indexes.push(index);\n index++;\n }\n matchedIndexes.push(indexes);\n });\n\n if (matchedIndexes.length === 0) {\n return null;\n }\n const bestMatch = matchedIndexes.sort((a, b) => {\n if (a.length === 1) {\n return a[0]! - b[0]!;\n }\n const aSpread = a[a.length - 1]! - a[0]!;\n const bSpread = b[b.length - 1]! - b[0]!;\n\n return aSpread - bSpread;\n })[0]!;\n if (text === search) {\n return 1;\n } else if (bestMatch.length > 1) {\n return 2 + (bestMatch[bestMatch.length - 1]! - bestMatch[0]!);\n }\n return 2 + bestMatch[0]!;\n};\n\nexport type Match = \"EQUAL\" | \"CONTAINS\" | \"CONTAINS_NUMBERS\" | \"STARTS_WITH\" | \"ENDS_WITH\" | \"FUZZY\";\n\nexport type MatchValue<T> = {\n match?: Match;\n score?: number;\n key: Walk<T>;\n value: string | string[];\n ifNotMatch?: (value: string, source: string) => boolean;\n};\n\nexport type Matcher<T> = { match?: Match; key: Walk<T> };\n\nconst travel = (path: string, regexp: RegExp, obj: any): any => {\n const keys = path.split(regexp).filter(Boolean);\n let res = obj;\n for (const key of keys) {\n if (res === null || res === undefined) {\n return res;\n }\n res = res[key];\n }\n return res;\n};\n\nconst regexPaths = { basic: /[,[\\]]+?/, extend: /[,[\\].]+?/ };\n\nconst path = <T extends Any, V>(obj: T, path: Walk<T>): V => {\n const result = travel(path as string, regexPaths.basic, obj);\n if (result !== undefined && result !== obj) return result;\n return travel(path as string, regexPaths.extend, obj);\n};\n\nconst onlyNumbers = (str: string) => str.replace(/[^0-9]/g, \"\");\n\nconst diacritics = (input: string): string => input.normalize(\"NFD\").replace(/[\\u0300-\\u036f]/g, \"\");\n\nconst strCompare = (text: string, value: string, _?: number, match: Match = \"FUZZY\"): boolean => {\n if (match === \"CONTAINS\") {\n return text.includes(value);\n }\n if (match === \"EQUAL\") {\n return text === value;\n }\n if (match === \"CONTAINS_NUMBERS\") {\n return onlyNumbers(text).includes(onlyNumbers(value));\n }\n if (match === \"STARTS_WITH\") {\n return text.startsWith(value);\n }\n if (match === \"ENDS_WITH\") {\n return text.endsWith(value);\n }\n if (match === \"FUZZY\") {\n const r = fuzzyMatch(text, value);\n return r !== null;\n }\n return false;\n};\n\nconst compare = (search: string, value: string | string[], defaultScore?: number, match: Match = \"FUZZY\"): boolean =>\n Array.isArray(value) ? value.some((x) => strCompare(search, x, defaultScore, match)) : strCompare(search, value, defaultScore, match);\n\nexport const fzf = <T extends Any, ID extends Walk<T>>(items: T[], id: ID, keys: MatchValue<T>[]) => {\n if (keys.length === 0) {\n return items;\n }\n const map = new Map<ID, T>();\n const remap = keys.map((x) => {\n return { ...x, value: Is.array(x.value) ? x.value.map(diacritics) : diacritics(`${x.value}`) };\n });\n items.forEach((item) => {\n const idVal = path<T, ID>(item, id);\n remap.forEach((filter) => {\n const searchValue = path(item, filter.key);\n if (!searchValue) return;\n const target = diacritics(`${filter.value}`.toLocaleLowerCase()).trim();\n const search = diacritics(`${searchValue}`.toLocaleLowerCase()).trim();\n if (compare(search, target, filter.score, filter.match)) {\n return void map.set(idVal, item);\n }\n if (Is.function(filter.ifNotMatch)) {\n const result = filter.ifNotMatch(target, search);\n if (result) map.set(idVal, item);\n }\n });\n });\n return Array.from(map.values());\n};\n","\"use client\";\nimport {\n autoPlacement,\n autoUpdate,\n FloatingFocusManager,\n FloatingPortal,\n offset,\n size,\n useDismiss,\n useFloating,\n useInteractions,\n useListNavigation,\n useRole,\n useTransitionStyles,\n} from \"@floating-ui/react\";\nimport { CaretDownIcon } from \"@phosphor-icons/react\";\nimport { AnimatePresence, motion } from \"motion/react\";\nimport React, { forwardRef, Fragment, type PropsWithChildren, useEffect, useRef, useState } from \"react\";\nimport { flushSync } from \"react-dom\";\nimport { Virtuoso, type VirtuosoHandle } from \"react-virtuoso\";\nimport { Is } from \"sidekicker\";\nimport { useRemoveScroll } from \"../../hooks/use-remove-scroll\";\nimport { useTranslations } from \"../../hooks/use-translations\";\nimport { css, dispatchInput, getRemainingSize, initializeInputDataset, mergeRefs } from \"../../lib/dom\";\nimport { safeRegex } from \"../../lib/fns\";\nimport { fzf } from \"../../lib/fzf\";\nimport { Label } from \"../../types\";\nimport { InputField, InputFieldProps } from \"./input-field\";\nimport { type OptionProps } from \"./select\";\n\nexport type AutocompleteItemProps = OptionProps & { Render?: React.FC<OptionProps> };\n\nexport type AutocompleteProps = Omit<InputFieldProps<\"input\">, \"value\"> & {\n title?: string;\n value?: string;\n emptyMessage?: Label;\n dynamicOption?: boolean;\n options: AutocompleteItemProps[];\n};\n\nconst Frag = (props: PropsWithChildren) => <Fragment>{props.children}</Fragment>;\n\nconst transitionStyles = {\n duration: 200,\n open: { transform: \"scaleY(1)\", opacity: 1 },\n close: { transform: \"scaleY(0)\", opacity: 0 },\n initial: { transform: \"scaleY(0)\", opacity: 0.2 },\n} as const;\n\nconst emptyRef: any[] = [];\n\nconst List = forwardRef(function VirtualList(props: any, ref: any) {\n return (\n <motion.ul {...props} ref={ref as any} className=\"max-h-96 w-full overscroll-contain rounded-lg\">\n <AnimatePresence>{props.children}</AnimatePresence>\n </motion.ul>\n );\n});\n\nconst Item = forwardRef(function VirtualItem({ item, context, ...props }: any, ref: any) {\n return <motion.li {...props} ref={ref as any} className=\"first:rounded-t-lg last:rounded-t-lg\" />;\n});\n\nconst components = { List, Item };\n\nconst MIN_SIZE = 40;\n\nexport const Autocomplete = forwardRef<HTMLInputElement, AutocompleteProps>(\n (\n {\n left,\n error,\n right,\n loading,\n options,\n container,\n rightLabel,\n interactive,\n emptyMessage,\n optionalText,\n labelClassName,\n feedback = null,\n hideLeft = false,\n required = false,\n dynamicOption = false,\n ...props\n }: AutocompleteProps,\n externalRef\n ) => {\n const scroller = useRef<HTMLElement | null>(null);\n const fieldset = useRef<HTMLFieldSetElement>(null);\n const virtuoso = useRef<VirtuosoHandle | null>(null);\n const defaults = props.value ?? props.defaultValue ?? \"\";\n const translation = useTranslations();\n const [h, setH] = useState(() => Math.min(320, MIN_SIZE * options.length));\n const [open, setOpen] = useState(false);\n const [shadow, setShadow] = useState(\"\");\n const [value, setValue] = useState(defaults);\n const [label, setLabel] = useState(() => options.find((x) => x.value === defaults)?.label ?? defaults);\n const [index, setIndex] = useState<number | null>(null);\n const listRef = useRef<Array<HTMLElement | null>>(emptyRef);\n const removeScrollRef = useRemoveScroll(open, \"block-only\");\n const innerOptions: AutocompleteItemProps[] =\n dynamicOption && shadow !== \"\"\n ? [\n {\n value: shadow,\n label: shadow,\n \"data-dynamic\": \"true\",\n },\n ...options,\n ]\n : options;\n\n const openDropdown = () => flushSync(() => setOpen(true));\n\n const list = shadow\n ? fzf(innerOptions, \"value\", [\n { key: \"value\", value: shadow },\n { key: \"label\", value: shadow },\n ])\n : innerOptions;\n\n const setClosed = () => {\n setOpen(false);\n setH(0);\n };\n\n const displayList = list.filter((x) => x.hidden !== true);\n\n const pattern = dynamicOption\n ? undefined\n : `^(${options.map((x) => `${safeRegex(x.value)}${x.label ? \"|\" + safeRegex(x.label) : \"\"}`).join(\"|\")})$`;\n\n const { x, y, strategy, refs, context, placement } = useFloating<HTMLInputElement>({\n open,\n transform: true,\n onOpenChange: setOpen,\n placement: \"bottom-start\",\n whileElementsMounted: autoUpdate,\n middleware: [\n offset(4),\n autoPlacement({ allowedPlacements: [\"top-start\", \"bottom-start\"], alignment: \"start\" }),\n size({\n padding: 10,\n elementContext: \"reference\",\n apply(args) {\n const ul = args.elements.floating.querySelector(\"ul\");\n const fullSize = ul?.getBoundingClientRect().height || 0;\n const DEFAULT_SIZE = getRemainingSize(refs.reference!.current as HTMLElement, window.innerHeight);\n const maxH = Math.min(fullSize < MIN_SIZE ? DEFAULT_SIZE : fullSize, DEFAULT_SIZE, args.availableHeight);\n const size = displayList.length === 0 ? MIN_SIZE : Math.min(maxH, DEFAULT_SIZE, fullSize);\n const mw = `${fieldset.current?.getBoundingClientRect().width || DEFAULT_SIZE}px`;\n Object.assign(args.elements.floating.style, { width: mw, maxWidth: mw, height: size });\n },\n }),\n ],\n });\n const transitions = useTransitionStyles(context, transitionStyles);\n const { getReferenceProps, getFloatingProps, getItemProps } = useInteractions([\n useRole(context, { role: \"listbox\" }),\n useDismiss(context),\n useListNavigation(context, {\n cols: 0,\n listRef,\n loop: true,\n virtual: true,\n allowEscape: true,\n activeIndex: index,\n selectedIndex: index,\n focusItemOnOpen: \"auto\",\n openOnArrowKeyDown: true,\n scrollItemIntoView: true,\n }),\n ]);\n\n useEffect(() => {\n if (props.value) {\n const item = options.find((x) => x.value === props.value);\n if (item) {\n setLabel(item.label ?? item.value);\n setValue(props.value);\n }\n }\n }, [props.value, options.length]);\n\n useEffect(() => {\n if (!open) return setH(0);\n const inputRef = refs.reference;\n if (inputRef.current === null) return;\n const s = getRemainingSize(inputRef.current as HTMLElement, window.innerHeight);\n setTimeout(() => setH(Math.min(s, displayList.length * MIN_SIZE)), 100);\n }, [shadow, open, refs.reference, displayList.length]);\n\n useEffect(() => {\n const input = refs.reference.current as HTMLInputElement;\n if (!input) return;\n return initializeInputDataset(input);\n }, []);\n\n const onSelect = (opt: AutocompleteItemProps, i: number) => {\n setValue(opt.value);\n const input = refs.reference.current as HTMLInputElement;\n if (!input) return;\n input?.setAttribute(\"data-value\", opt.value);\n input.value = opt.value;\n const event = new Event(\"change\", { bubbles: false, cancelable: true });\n input.dispatchEvent(event);\n if (props.onChange) props.onChange(event as any);\n setLabel(opt.label ?? \"\");\n setClosed();\n setShadow(\"\");\n setIndex(i);\n };\n\n const onChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n const value = event.target.value;\n setShadow(value);\n if (!open && value === \"\") return setOpen(true);\n event.target.name = props.name || \"\";\n return value ? setOpen(true) : props.onChange?.(event);\n };\n\n const onCaretDownClick = () => {\n openDropdown();\n setShadow(\"\");\n (refs.reference.current as HTMLInputElement)?.focus();\n };\n\n const onFocus = () => {\n setIndex((prev) => (prev === null ? 0 : prev));\n openDropdown();\n setShadow(\"\");\n };\n\n const onClose = () => {\n (refs.reference.current as HTMLInputElement)?.setAttribute(\"data-value\", \"\");\n setShadow(\"\");\n setValue(\"\");\n setLabel(\"\");\n dispatchInput(refs.reference.current as HTMLInputElement);\n setClosed();\n };\n\n const id = props.id || props.name;\n\n const shadowId = `${id}-shadow`;\n\n const isEmpty = displayList.length === 0;\n\n const isTopPlacement = placement === \"top\" || placement === \"top-start\";\n\n return (\n <InputField\n {...(props as any)}\n left={left}\n error={error}\n ref={fieldset}\n form={props.form}\n loading={loading}\n name={props.name}\n feedback={open && isTopPlacement ? props.title : feedback}\n hideLeft={hideLeft}\n required={required}\n title={props.title}\n container={container}\n rightLabel={rightLabel}\n interactive={interactive}\n id={shadowId}\n optionalText={optionalText}\n componentName=\"autocomplete\"\n labelClassName={labelClassName}\n placeholder={props.placeholder}\n right={\n <span className=\"flex items-center gap-0.5\">\n {right}\n <button type=\"button\" className=\"p-2 transition-colors link:text-primary md:p-1\" onClick={onCaretDownClick}>\n <CaretDownIcon size={20} />\n <span className=\"sr-only\">{translation.inputCaretDown}</span>\n </button>\n {value ? (\n <button type=\"button\" onClick={onClose} className=\"p-2 transition-colors link:text-danger md:p-1\">\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 15 15\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M11.7816 4.03157C12.0062 3.80702 12.0062 3.44295 11.7816 3.2184C11.5571 2.99385 11.193 2.99385 10.9685 3.2184L7.50005 6.68682L4.03164 3.2184C3.80708 2.99385 3.44301 2.99385 3.21846 3.2184C2.99391 3.44295 2.99391 3.80702 3.21846 4.03157L6.68688 7.49999L3.21846 10.9684C2.99391 11.193 2.99391 11.557 3.21846 11.7816C3.44301 12.0061 3.80708 12.0061 4.03164 11.7816L7.50005 8.31316L10.9685 11.7816C11.193 12.0061 11.5571 12.0061 11.7816 11.7816C12.0062 11.557 12.0062 11.193 11.7816 10.9684L8.31322 7.49999L11.7816 4.03157Z\"\n fill=\"currentColor\"\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n />\n </svg>\n </button>\n ) : null}\n </span>\n }\n >\n <input\n data-shadow=\"true\"\n {...(getReferenceProps({\n ...props,\n onFocus,\n pattern,\n onChange,\n id: shadowId,\n name: shadowId,\n ref: refs.setReference,\n onClick: (e: React.MouseEvent<HTMLInputElement>) => e.currentTarget.focus(),\n onKeyDown(event: React.KeyboardEvent<HTMLInputElement>) {\n if (event.key === \"Escape\") {\n event.currentTarget.blur();\n return setClosed();\n }\n if (!open) return;\n if (event.key === \"ArrowDown\") {\n let next = Is.number(index) ? index + 1 : 0;\n if (next > displayList.length - 1) next = 0;\n virtuoso.current?.scrollIntoView({ index: next });\n return setIndex(next);\n }\n if (event.key === \"ArrowUp\") {\n let next = Is.number(index) ? index! - 1 : displayList.length - 1;\n if (next < 0) next = displayList.length - 1;\n virtuoso.current?.scrollIntoView({ index: next });\n return setIndex(next);\n }\n if (event.key === \"Enter\") {\n if (index !== null && displayList[index]) {\n event.preventDefault();\n return onSelect(displayList[index], index);\n }\n if (displayList.length === 1) {\n event.preventDefault();\n return onSelect(displayList[0], 0);\n }\n }\n },\n } as any) as any)}\n data-value={value}\n data-error={!!error}\n data-name={id}\n data-target={id}\n required={required}\n value={open ? shadow : options.length === 0 ? \"\" : label || value}\n aria-autocomplete=\"list\"\n autoComplete=\"off\"\n className={css(\n \"input placeholder-input-mask group h-input-height w-full flex-1\",\n \"rounded-md bg-transparent px-input-x py-input-y text-foreground\",\n \"outline-none transition-colors focus:ring-2 focus:ring-inset focus:ring-primary\",\n \"group-error:text-danger group-error:placeholder-input-mask-error\",\n \"text-base group-focus-within:border-primary group-hover:border-primary\",\n props.className\n )}\n />\n <input\n id={id}\n name={id}\n type=\"hidden\"\n data-origin={id}\n ref={externalRef}\n required={required}\n defaultValue={props.value || value || undefined}\n />\n <FloatingPortal preserveTabOrder>\n {open ? (\n <FloatingFocusManager modal guards returnFocus={false} context={context} initialFocus={-1} visuallyHiddenDismiss>\n <motion.div\n {...getFloatingProps({\n ref: mergeRefs(removeScrollRef as any, refs.setFloating as any) as any,\n style: { ...transitions.styles, left: x, top: y ?? 0, position: strategy, height: \"auto\" },\n })}\n initial={false}\n data-floating=\"true\"\n animate={{ height: isEmpty ? \"auto\" : h }}\n className={css(\n \"shadow-floating isolate z-floating m-0 max-h-80 origin-[top_center] list-none overscroll-contain rounded-b-lg rounded-t-lg border border-floating-border bg-floating-background p-0 text-foreground ease-in-out\",\n isTopPlacement ? \"origin-[bottom_center]\" : \"origin-[top_center]\"\n )}\n onAnimationComplete={() => {\n if (!open) return setH(0);\n const ul = refs.floating.current as HTMLElement;\n const li = ul.querySelectorAll(\"li\").item(0);\n const sum = (li ? li.getBoundingClientRect().height : MIN_SIZE) * displayList.length;\n return flushSync(() => setH(sum + 2));\n }}\n >\n {isEmpty ? (\n <div role=\"option\" className=\"w-full border-b border-tooltip-border\">\n <span className=\"flex w-full justify-between p-2 text-left text-disabled\">\n {emptyMessage || translation.autocompleteEmpty}\n </span>\n </div>\n ) : null}\n <Virtuoso\n overscan={40}\n ref={virtuoso}\n hidden={isEmpty}\n data={displayList}\n style={{ height: h }}\n defaultItemHeight={MIN_SIZE}\n components={components as any}\n scrollerRef={(e) => void (scroller.current = e as HTMLElement)}\n className=\"border-floating max-h-full overscroll-contain rounded-lg bg-floating-background p-0 text-foreground\"\n itemContent={(i, option) => {\n const Label = (option.Render as React.FC<any>) ?? Frag;\n const active = value === option.value || value === option.label;\n const selected = index === i;\n const children = option.label ?? option.value;\n return (\n <button\n data-value={option.value}\n {...getItemProps({\n ref: (node) => void (listRef.current[i] = node) as any,\n role: \"option\",\n type: \"button\",\n \"aria-checked\": active,\n \"aria-current\": active,\n \"aria-selected\": active,\n \"aria-busy\": option.disabled,\n onClick: () => onSelect(option, i),\n className: `cursor-pointer min-h-10 hover:bg-floating-hover w-full p-2 text-left ${active ? \"bg-primary-hover text-primary-foreground\" : \"\"} ${selected ? \"bg-floating-hover text-floating-foreground\" : \"\"}`,\n })}\n >\n <Label {...props} label={option.label} value={option.value} children={children} />\n </button>\n );\n }}\n />\n </motion.div>\n </FloatingFocusManager>\n ) : null}\n </FloatingPortal>\n </InputField>\n );\n }\n);\n"],"names":["getCoarse","useIsCoarseDevice","ref","useRef","isSsr","isCoarse","setIsCoarse","useState","useEffect","e","useRemoveScroll","remove","removeStyle","isCoarseDevice","prev","isMobile","hasVerticalScroll","controller","html","removeScroll","el","rect","realHeight","onlyNumbers","scrollable","Is","hasScroll","fuzzyMatch","text","search","firstChar","firstCharIndexes","char","index","matchedIndexes","startingIndex","indexes","i","letter","bestMatch","a","b","aSpread","bSpread","travel","path","regexp","obj","keys","res","key","regexPaths","result","str","diacritics","input","strCompare","value","_","match","compare","defaultScore","x","fzf","items","id","map","remap","item","idVal","filter","searchValue","target","Frag","props","jsx","Fragment","transitionStyles","emptyRef","List","forwardRef","motion","AnimatePresence","Item","context","components","MIN_SIZE","Autocomplete","left","error","right","loading","options","container","rightLabel","interactive","emptyMessage","optionalText","labelClassName","feedback","hideLeft","required","dynamicOption","externalRef","scroller","fieldset","virtuoso","defaults","translation","useTranslations","h","setH","open","setOpen","shadow","setShadow","setValue","label","setLabel","setIndex","listRef","removeScrollRef","innerOptions","openDropdown","flushSync","list","setClosed","displayList","pattern","safeRegex","y","strategy","refs","placement","useFloating","autoUpdate","offset","autoPlacement","size","args","fullSize","DEFAULT_SIZE","getRemainingSize","maxH","mw","transitions","useTransitionStyles","getReferenceProps","getFloatingProps","getItemProps","useInteractions","useRole","useDismiss","useListNavigation","inputRef","s","initializeInputDataset","onSelect","opt","event","onChange","onCaretDownClick","onFocus","onClose","dispatchInput","shadowId","isEmpty","isTopPlacement","jsxs","InputField","CaretDownIcon","next","css","FloatingPortal","FloatingFocusManager","mergeRefs","li","sum","Virtuoso","option","Label","active","selected","children","node"],"mappings":"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"}
|