@pibit.ai/cure-design-system 0.3.20 → 0.3.23

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 (61) hide show
  1. package/README.md +1 -0
  2. package/dist/applications/schedule-calendar/schedule-calendar.d.ts.map +1 -1
  3. package/dist/applications/schedule-calendar/schedule-calendar.js +24 -22
  4. package/dist/applications/schedule-calendar/utils.d.ts +13 -3
  5. package/dist/applications/schedule-calendar/utils.d.ts.map +1 -1
  6. package/dist/applications/schedule-calendar/utils.js +136 -117
  7. package/dist/index.d.ts +1 -0
  8. package/dist/index.d.ts.map +1 -1
  9. package/dist/index.js +92 -88
  10. package/dist/patterns/table/TableWrapper.d.ts.map +1 -1
  11. package/dist/patterns/table/TableWrapper.js +784 -665
  12. package/dist/patterns/table/index.d.ts +1 -1
  13. package/dist/patterns/table/index.d.ts.map +1 -1
  14. package/dist/patterns/table/storyHelpers/useMockTableState.d.ts.map +1 -1
  15. package/dist/patterns/table/table.d.ts.map +1 -1
  16. package/dist/patterns/table/table.js +44 -43
  17. package/dist/patterns/table/toolbar/AlignDropdown.d.ts.map +1 -1
  18. package/dist/patterns/table/toolbar/AlignDropdown.js +19 -25
  19. package/dist/patterns/table/toolbar/ColumnHeaderMenu.d.ts +9 -0
  20. package/dist/patterns/table/toolbar/ColumnHeaderMenu.d.ts.map +1 -1
  21. package/dist/patterns/table/toolbar/ColumnHeaderMenu.js +115 -81
  22. package/dist/patterns/table/toolbar/GroupByDropdown.d.ts.map +1 -1
  23. package/dist/patterns/table/toolbar/GroupByDropdown.js +48 -43
  24. package/dist/patterns/table/toolbar/SummaryFooter.d.ts.map +1 -1
  25. package/dist/patterns/table/toolbar/SummaryFooter.js +34 -27
  26. package/dist/patterns/table/toolbar/TableToolbar.d.ts +2 -0
  27. package/dist/patterns/table/toolbar/TableToolbar.d.ts.map +1 -1
  28. package/dist/patterns/table/toolbar/TableToolbar.js +2 -1
  29. package/dist/patterns/table/toolbar/index.d.ts +2 -2
  30. package/dist/patterns/table/toolbar/index.d.ts.map +1 -1
  31. package/dist/patterns/table/toolbar/tableToolbarHelpers.d.ts +10 -1
  32. package/dist/patterns/table/toolbar/tableToolbarHelpers.d.ts.map +1 -1
  33. package/dist/patterns/table/toolbar/tableToolbarHelpers.js +117 -117
  34. package/dist/patterns/table/types.d.ts +1 -0
  35. package/dist/patterns/table/types.d.ts.map +1 -1
  36. package/dist/primitives/multi-chips-select/MultiChipsSelect.d.ts +20 -0
  37. package/dist/primitives/multi-chips-select/MultiChipsSelect.d.ts.map +1 -0
  38. package/dist/primitives/multi-chips-select/MultiChipsSelect.js +233 -0
  39. package/dist/primitives/multi-chips-select/index.d.ts +3 -0
  40. package/dist/primitives/multi-chips-select/index.d.ts.map +1 -0
  41. package/dist/primitives/multi-chips-select/tagKeyFromLabel.d.ts +3 -0
  42. package/dist/primitives/multi-chips-select/tagKeyFromLabel.d.ts.map +1 -0
  43. package/dist/primitives/multi-chips-select/tagKeyFromLabel.js +6 -0
  44. package/dist/primitives/select/ExpandableSearchInput.d.ts +3 -1
  45. package/dist/primitives/select/ExpandableSearchInput.d.ts.map +1 -1
  46. package/dist/primitives/select/ExpandableSearchInput.js +100 -78
  47. package/dist/primitives/select/SearchInput.d.ts +5 -1
  48. package/dist/primitives/select/SearchInput.d.ts.map +1 -1
  49. package/dist/primitives/select/SearchInput.js +94 -74
  50. package/dist/primitives/select/searchable-select.d.ts +5 -3
  51. package/dist/primitives/select/searchable-select.d.ts.map +1 -1
  52. package/dist/primitives/select/searchable-select.js +196 -177
  53. package/dist/primitives/select/select-item.d.ts.map +1 -1
  54. package/dist/primitives/select/select-item.js +70 -54
  55. package/dist/primitives/select/select.d.ts +7 -2
  56. package/dist/primitives/select/select.d.ts.map +1 -1
  57. package/dist/primitives/select/select.js +161 -137
  58. package/dist/primitives/tooltip/ellipsis-content.d.ts.map +1 -1
  59. package/dist/primitives/tooltip/ellipsis-content.js +46 -43
  60. package/dist/styles/components.css +1 -1
  61. package/package.json +1 -1
@@ -0,0 +1,233 @@
1
+ import { jsxs as m, jsx as o, Fragment as X } from "react/jsx-runtime";
2
+ import { useState as E, useRef as z, useMemo as I, useCallback as $, useEffect as q } from "react";
3
+ import { XClose as G, ChevronDown as H } from "@untitledui/icons";
4
+ import { LoadingIndicator as J } from "../../applications/loading-indicator/loading-indicator.js";
5
+ import { cx as F } from "../../utils/cn.js";
6
+ import { tagKeyFromLabel as K } from "./tagKeyFromLabel.js";
7
+ function _(f, l) {
8
+ const n = l.trim().toLowerCase();
9
+ return n ? f.some((d) => d.label.trim().toLowerCase() === n) : !1;
10
+ }
11
+ function A(f, l) {
12
+ const n = l.trim().toLowerCase();
13
+ if (!n) return !1;
14
+ const d = K(l);
15
+ return f.some(
16
+ (g) => g.label.trim().toLowerCase() === n || g.id === d
17
+ );
18
+ }
19
+ function re({
20
+ loading: f = !1,
21
+ options: l,
22
+ selectedValues: n,
23
+ onChange: d,
24
+ fieldLabel: g,
25
+ placeholder: O = "Search or add tags…",
26
+ onAddOption: w,
27
+ isDisabled: t = !1,
28
+ isSearchable: Q = !0
29
+ }) {
30
+ const [x, s] = E(!1), [N, S] = E(""), [i, p] = E(0), C = z(null), h = z(null), c = N.trim(), v = c.toLowerCase(), k = I(() => {
31
+ const e = new Set(n.map((r) => r.id));
32
+ return l.filter((r) => !e.has(r.id));
33
+ }, [l, n]), a = I(() => v ? k.filter(
34
+ (e) => e.label.toLowerCase().includes(v)
35
+ ) : k, [k, v]), y = I(() => !(!c || t || _(l, c) || A(n, c)), [c, l, n, t]), L = $(() => {
36
+ s(!1);
37
+ }, []), b = a.length + (y ? 1 : 0);
38
+ q(() => {
39
+ p(0);
40
+ }, [v, a.length, y]), q(() => {
41
+ x || p(0);
42
+ }, [x]), q(() => {
43
+ const e = (r) => {
44
+ C.current && !C.current.contains(r.target) && L();
45
+ };
46
+ return document.addEventListener("mousedown", e), () => document.removeEventListener("mousedown", e);
47
+ }, [L]);
48
+ const M = (e) => {
49
+ n.some((r) => r.id === e.id) || (d((r) => [...r, e]), S(""), s(!0), p(0));
50
+ }, R = async () => {
51
+ if (!c || t || f) return;
52
+ const e = K(c), r = c.replace(/\s+/g, " ").trim();
53
+ _(l, r) || A(n, r) || (await (w == null ? void 0 : w(r, e)), M({ id: e, label: r }));
54
+ }, T = (e) => {
55
+ d(n.filter((r) => r.id !== e));
56
+ }, B = () => {
57
+ t || (s(!0), requestAnimationFrame(() => {
58
+ var e;
59
+ return (e = h.current) == null ? void 0 : e.focus();
60
+ }));
61
+ }, P = (e) => {
62
+ if (t) return;
63
+ const r = e.target;
64
+ if (!r.closest("button[data-chip-remove]")) {
65
+ if (h.current && (r === h.current || h.current.contains(r))) {
66
+ x || s(!0);
67
+ return;
68
+ }
69
+ e.preventDefault(), B();
70
+ }
71
+ }, U = (e) => {
72
+ var r;
73
+ if (e.key === "Escape") {
74
+ L(), (r = h.current) == null || r.blur();
75
+ return;
76
+ }
77
+ if (e.key === "ArrowDown" && !t && b > 0) {
78
+ e.preventDefault(), s(!0), p((u) => u < 0 ? 0 : u < b - 1 ? u + 1 : u);
79
+ return;
80
+ }
81
+ if (e.key === "ArrowUp" && !t && b > 0) {
82
+ e.preventDefault(), s(!0), p((u) => u <= 0 ? 0 : u - 1);
83
+ return;
84
+ }
85
+ if (e.key === "Enter") {
86
+ x && !t && i >= 0 && i < b && (e.preventDefault(), y && i === a.length ? R() : i < a.length && M(a[i]));
87
+ return;
88
+ }
89
+ e.key === "Backspace" && !N && n.length > 0 && (e.preventDefault(), d(n.slice(0, -1)));
90
+ }, j = x && !t && (a.length > 0 || y);
91
+ return /* @__PURE__ */ m("div", { ref: C, className: "relative w-full", children: [
92
+ g ? /* @__PURE__ */ o("span", { className: "mb-1.5 block text-xs font-medium text-secondary", children: g }) : null,
93
+ /* @__PURE__ */ m(
94
+ "div",
95
+ {
96
+ role: "combobox",
97
+ "aria-expanded": j,
98
+ "aria-haspopup": "listbox",
99
+ "aria-disabled": t,
100
+ onMouseDown: P,
101
+ className: F(
102
+ "flex min-h-9 w-full flex-wrap items-center gap-1 rounded-md border border-secondary bg-primary px-2 py-1 text-xs transition-all",
103
+ !t && "cursor-text",
104
+ t && "cursor-not-allowed opacity-60",
105
+ x && !t && "ring-1 ring-brand border-brand"
106
+ ),
107
+ children: [
108
+ n.map((e) => /* @__PURE__ */ m(
109
+ "span",
110
+ {
111
+ className: "flex max-w-full items-center gap-0.5 rounded py-px pl-1 pr-0.5 ring-1 ring-[var(--color-gray-200)]",
112
+ children: [
113
+ /* @__PURE__ */ o("span", { className: "max-w-[200px] truncate font-medium text-secondary", children: e.label }),
114
+ /* @__PURE__ */ o(
115
+ "button",
116
+ {
117
+ type: "button",
118
+ "data-chip-remove": !0,
119
+ disabled: t,
120
+ onClick: (r) => {
121
+ r.stopPropagation(), t || T(e.id);
122
+ },
123
+ className: "flex shrink-0 items-center justify-center rounded-sm text-fg-quaternary hover:text-error-600 disabled:pointer-events-none",
124
+ "aria-label": `Remove ${e.label}`,
125
+ children: /* @__PURE__ */ o(G, { size: 12 })
126
+ }
127
+ )
128
+ ]
129
+ },
130
+ e.id
131
+ )),
132
+ /* @__PURE__ */ o(
133
+ "input",
134
+ {
135
+ ref: h,
136
+ type: "text",
137
+ disabled: t,
138
+ className: "min-w-[4ch] flex-1 border-0 bg-transparent py-0.5 text-xs outline-none ring-0 focus:ring-0 disabled:cursor-not-allowed",
139
+ placeholder: n.length === 0 ? O : void 0,
140
+ value: N,
141
+ onChange: (e) => {
142
+ S(e.target.value), t || s(!0);
143
+ },
144
+ onFocus: () => {
145
+ t || s(!0);
146
+ },
147
+ onKeyDown: U,
148
+ readOnly: !Q
149
+ }
150
+ ),
151
+ /* @__PURE__ */ o(
152
+ "button",
153
+ {
154
+ type: "button",
155
+ tabIndex: -1,
156
+ disabled: t,
157
+ className: "ml-auto flex shrink-0 items-center text-fg-quaternary",
158
+ "aria-label": "Toggle tag list",
159
+ onMouseDown: (e) => {
160
+ e.preventDefault(), !t && (s((r) => !r), requestAnimationFrame(() => {
161
+ var r;
162
+ return (r = h.current) == null ? void 0 : r.focus();
163
+ }));
164
+ },
165
+ children: /* @__PURE__ */ o(H, { size: 14 })
166
+ }
167
+ )
168
+ ]
169
+ }
170
+ ),
171
+ j ? /* @__PURE__ */ m(
172
+ "div",
173
+ {
174
+ className: "absolute z-50 mt-1 w-full overflow-hidden rounded-lg border border-secondary bg-white shadow-lg",
175
+ role: "listbox",
176
+ children: [
177
+ /* @__PURE__ */ o("div", { className: "max-h-60 overflow-y-auto py-1", children: a.map((e, r) => /* @__PURE__ */ o(
178
+ "div",
179
+ {
180
+ role: "option",
181
+ "aria-selected": i === r,
182
+ onMouseEnter: () => p(r),
183
+ onMouseDown: (u) => {
184
+ u.preventDefault(), M(e);
185
+ },
186
+ className: F(
187
+ "cursor-pointer px-3 py-2 text-xs font-medium text-primary transition-colors hover:bg-primary_hover",
188
+ i === r && "bg-primary_hover"
189
+ ),
190
+ children: e.label
191
+ },
192
+ e.id
193
+ )) }),
194
+ y && w ? /* @__PURE__ */ m(X, { children: [
195
+ /* @__PURE__ */ o("div", { className: "border-t border-secondary" }),
196
+ /* @__PURE__ */ m(
197
+ "button",
198
+ {
199
+ type: "button",
200
+ disabled: f,
201
+ "aria-selected": i === a.length,
202
+ onMouseEnter: () => p(a.length),
203
+ className: F(
204
+ "flex w-full items-center justify-between cursor-pointer px-3 py-2.5 text-left text-xs transition-colors hover:bg-primary_hover",
205
+ i === a.length && "bg-primary_hover",
206
+ f && "cursor-not-allowed opacity-60"
207
+ ),
208
+ onMouseDown: (e) => {
209
+ e.preventDefault(), R();
210
+ },
211
+ children: [
212
+ /* @__PURE__ */ m("div", { className: "flex items-center gap-2", children: [
213
+ /* @__PURE__ */ o("span", { className: "text-tertiary", children: "Create " }),
214
+ /* @__PURE__ */ m("span", { className: "font-medium text-primary", children: [
215
+ '"',
216
+ c,
217
+ '"'
218
+ ] })
219
+ ] }),
220
+ f ? /* @__PURE__ */ o(J, { size: "xs" }) : null
221
+ ]
222
+ }
223
+ )
224
+ ] }) : null,
225
+ a.length === 0 && !y ? /* @__PURE__ */ o("div", { className: "px-3 py-4 text-center text-xs text-tertiary", children: "No matching tags" }) : null
226
+ ]
227
+ }
228
+ ) : null
229
+ ] });
230
+ }
231
+ export {
232
+ re as MultiChipsSelect
233
+ };
@@ -0,0 +1,3 @@
1
+ export { MultiChipsSelect, type MultiChipsSelectProps, type SelectOption, } from './MultiChipsSelect';
2
+ export { tagKeyFromLabel } from './tagKeyFromLabel';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/primitives/multi-chips-select/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,KAAK,qBAAqB,EAC1B,KAAK,YAAY,GAClB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,3 @@
1
+ /** Lowercase label and collapse whitespace to single underscores (other characters unchanged). */
2
+ export declare function tagKeyFromLabel(label: string): string;
3
+ //# sourceMappingURL=tagKeyFromLabel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tagKeyFromLabel.d.ts","sourceRoot":"","sources":["../../../src/primitives/multi-chips-select/tagKeyFromLabel.ts"],"names":[],"mappings":"AAAA,kGAAkG;AAClG,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAErD"}
@@ -0,0 +1,6 @@
1
+ function r(e) {
2
+ return e.trim().toLowerCase().replace(/\s+/g, "_");
3
+ }
4
+ export {
5
+ r as tagKeyFromLabel
6
+ };
@@ -12,8 +12,10 @@ export interface ExpandableSearchInputProps {
12
12
  "aria-label"?: string;
13
13
  /** When false, the search field stays expanded. Default true. */
14
14
  collapsible?: boolean;
15
+ /** When true, registers Cmd+K / Ctrl+K to expand and focus the search input. */
16
+ shortcut?: boolean;
15
17
  /** When true, the control is greyed out and can't be expanded or typed in. */
16
18
  isDisabled?: boolean;
17
19
  }
18
- export declare const ExpandableSearchInput: ({ size, placeholder, value, onChange, onBlur, onFocus, onKeyDown, className, expandedWidth, "aria-label": ariaLabel, collapsible, isDisabled, }: ExpandableSearchInputProps) => import("react/jsx-runtime").JSX.Element;
20
+ export declare const ExpandableSearchInput: ({ size, placeholder, value, onChange, onBlur, onFocus, onKeyDown, className, expandedWidth, "aria-label": ariaLabel, collapsible, shortcut, isDisabled, }: ExpandableSearchInputProps) => import("react/jsx-runtime").JSX.Element;
19
21
  //# sourceMappingURL=ExpandableSearchInput.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ExpandableSearchInput.d.ts","sourceRoot":"","sources":["../../../src/primitives/select/ExpandableSearchInput.tsx"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EAC1B,MAAM,OAAO,CAAC;AAOf,MAAM,WAAW,0BAA0B;IACzC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B,SAAS,CAAC,EAAE,oBAAoB,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iEAAiE;IACjE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,8EAA8E;IAC9E,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAKD,eAAO,MAAM,qBAAqB,GAAI,iJAanC,0BAA0B,4CAsH5B,CAAC"}
1
+ {"version":3,"file":"ExpandableSearchInput.d.ts","sourceRoot":"","sources":["../../../src/primitives/select/ExpandableSearchInput.tsx"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EAC1B,MAAM,OAAO,CAAC;AAOf,MAAM,WAAW,0BAA0B;IACzC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B,SAAS,CAAC,EAAE,oBAAoB,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iEAAiE;IACjE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,gFAAgF;IAChF,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,8EAA8E;IAC9E,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAKD,eAAO,MAAM,qBAAqB,GAAI,2JAcnC,0BAA0B,4CAqJ5B,CAAC"}
@@ -1,108 +1,130 @@
1
- import { jsx as s } from "react/jsx-runtime";
2
- import { useState as F, useRef as l, useEffect as u, useCallback as S } from "react";
3
- import { SearchMd as L } from "@untitledui/icons";
4
- import { ButtonUtility as T } from "../button/button-utility.js";
5
- import _ from "./SearchInput.js";
6
- import { cx as w } from "../../utils/cn.js";
7
- import { motion as p } from "../../node_modules/framer-motion/dist/es/render/components/motion/proxy.js";
8
- import { AnimatePresence as j } from "../../node_modules/framer-motion/dist/es/components/AnimatePresence/index.js";
9
- const M = { sm: 36, md: 40, lg: 44 }, P = 300, X = ({
10
- size: h = "sm",
11
- placeholder: x,
12
- value: d,
13
- onChange: N,
14
- onBlur: m,
15
- onFocus: v,
16
- onKeyDown: f,
17
- className: k,
18
- expandedWidth: C = P,
19
- "aria-label": y,
20
- collapsible: t = !0,
21
- isDisabled: g = !1
1
+ import { jsx as c } from "react/jsx-runtime";
2
+ import { useState as F, useRef as E, useEffect as p, useCallback as h } from "react";
3
+ import { SearchMd as T } from "@untitledui/icons";
4
+ import { ButtonUtility as _ } from "../button/button-utility.js";
5
+ import j from "./SearchInput.js";
6
+ import { cx as K } from "../../utils/cn.js";
7
+ import { motion as x } from "../../node_modules/framer-motion/dist/es/render/components/motion/proxy.js";
8
+ import { AnimatePresence as G } from "../../node_modules/framer-motion/dist/es/components/AnimatePresence/index.js";
9
+ const M = { sm: 36, md: 40, lg: 44 }, U = 300, Z = ({
10
+ size: w = "sm",
11
+ placeholder: S,
12
+ value: u,
13
+ onChange: C,
14
+ onBlur: f,
15
+ onFocus: L,
16
+ onKeyDown: d,
17
+ className: N,
18
+ expandedWidth: q = U,
19
+ "aria-label": g,
20
+ collapsible: r = !0,
21
+ shortcut: y = !1,
22
+ isDisabled: m = !1
22
23
  }) => {
23
- const n = !!(d != null && d.trim()), [q, a] = F(t ? n : !0), o = !t || q, c = l(null), E = l(t), A = M[h];
24
- u(() => {
25
- const e = E.current === !1;
26
- E.current = t, !t || n ? a(!0) : e && t && a(!1);
27
- }, [t, n]), u(() => {
28
- var r;
29
- if (!t || !o) return;
30
- const e = (r = c.current) == null ? void 0 : r.querySelector("input");
31
- if (!e) return;
32
- const i = requestAnimationFrame(() => e.focus());
33
- return () => cancelAnimationFrame(i);
34
- }, [t, o]), u(() => {
35
- if (!t || !o) return;
36
- const e = (i) => {
37
- var r;
38
- (r = c.current) != null && r.contains(i.target) || n || a(!1);
24
+ const i = !!(u != null && u.trim()), [I, a] = F(r ? i : !0), o = !r || I, s = E(null), l = E(r), A = M[w];
25
+ p(() => {
26
+ const t = l.current === !1;
27
+ l.current = r, !r || i ? a(!0) : t && r && a(!1);
28
+ }, [r, i]), p(() => {
29
+ var n;
30
+ if (!r || !o) return;
31
+ const t = (n = s.current) == null ? void 0 : n.querySelector("input");
32
+ if (!t) return;
33
+ const e = requestAnimationFrame(() => t.focus());
34
+ return () => cancelAnimationFrame(e);
35
+ }, [r, o]), p(() => {
36
+ if (!r || !o) return;
37
+ const t = (e) => {
38
+ var n;
39
+ (n = s.current) != null && n.contains(e.target) || i || a(!1);
39
40
  };
40
- return document.addEventListener("mousedown", e), () => document.removeEventListener("mousedown", e);
41
- }, [t, o, n]);
42
- const I = S(
43
- (e) => {
44
- var r;
45
- const i = e.relatedTarget;
46
- i && ((r = c.current) != null && r.contains(i)) || (t && !n && a(!1), m == null || m(e));
41
+ return document.addEventListener("mousedown", t), () => document.removeEventListener("mousedown", t);
42
+ }, [r, o, i]);
43
+ const P = h(
44
+ (t) => {
45
+ var n;
46
+ const e = t.relatedTarget;
47
+ e && ((n = s.current) != null && n.contains(e)) || (r && !i && a(!1), f == null || f(t));
47
48
  },
48
- [m, n, t]
49
- ), R = S(
50
- (e) => {
51
- var i, r;
52
- e.key === "Escape" && t && !n && (a(!1), (r = (i = c.current) == null ? void 0 : i.querySelector("button")) == null || r.focus()), f == null || f(e);
49
+ [f, i, r]
50
+ ), R = h(
51
+ (t) => {
52
+ var n, v;
53
+ if ((t.metaKey || t.ctrlKey) && !t.shiftKey && !t.altKey && t.key.toLowerCase() === "k") {
54
+ t.preventDefault(), t.stopPropagation();
55
+ return;
56
+ }
57
+ t.key === "Escape" && r && !i && (a(!1), (v = (n = s.current) == null ? void 0 : n.querySelector("button")) == null || v.focus()), d == null || d(t);
53
58
  },
54
- [f, n, t]
55
- ), W = { type: "spring", damping: 25, stiffness: 300 };
56
- return /* @__PURE__ */ s(
57
- p.div,
59
+ [d, i, r]
60
+ ), k = h(() => {
61
+ var t, e;
62
+ if (r && !o) {
63
+ a(!0);
64
+ return;
65
+ }
66
+ (e = (t = s.current) == null ? void 0 : t.querySelector("input")) == null || e.focus();
67
+ }, [r, o]);
68
+ p(() => {
69
+ if (!y || m) return;
70
+ const t = (e) => {
71
+ (e.metaKey || e.ctrlKey) && !e.shiftKey && !e.altKey && e.key.toLowerCase() === "k" && (e.preventDefault(), e.stopPropagation(), k());
72
+ };
73
+ return window.addEventListener("keydown", t, { capture: !0 }), () => window.removeEventListener("keydown", t, { capture: !0 });
74
+ }, [y, m, k]);
75
+ const W = { type: "spring", damping: 25, stiffness: 300 };
76
+ return /* @__PURE__ */ c(
77
+ x.div,
58
78
  {
59
- ref: c,
60
- className: w("flex items-center overflow-hidden", k),
61
- onBlur: I,
62
- animate: { width: o ? C : A },
79
+ ref: s,
80
+ className: K("flex items-center overflow-hidden", N),
81
+ onBlur: P,
82
+ animate: { width: o ? q : A },
63
83
  transition: W,
64
- children: /* @__PURE__ */ s(j, { initial: !1, mode: "popLayout", children: o ? /* @__PURE__ */ s(
65
- p.div,
84
+ children: /* @__PURE__ */ c(G, { initial: !1, mode: "popLayout", children: o ? /* @__PURE__ */ c(
85
+ x.div,
66
86
  {
67
87
  initial: { opacity: 0 },
68
88
  animate: { opacity: 1 },
69
89
  exit: { opacity: 0 },
70
90
  transition: { duration: 0.08 },
71
91
  className: "min-w-0 flex-1",
72
- children: /* @__PURE__ */ s(
73
- _,
92
+ children: /* @__PURE__ */ c(
93
+ j,
74
94
  {
75
- size: h,
76
- placeholder: x,
77
- value: d,
78
- onChange: N,
79
- onFocus: v,
95
+ size: w,
96
+ placeholder: S,
97
+ value: u,
98
+ onChange: C,
99
+ onFocus: L,
80
100
  onKeyDown: R,
81
101
  className: "w-full min-w-0",
82
- "aria-label": y,
83
- isDisabled: g
102
+ "aria-label": g,
103
+ shortcut: y,
104
+ registerShortcut: !1,
105
+ isDisabled: m
84
106
  }
85
107
  )
86
108
  },
87
109
  "input"
88
- ) : /* @__PURE__ */ s(
89
- p.div,
110
+ ) : /* @__PURE__ */ c(
111
+ x.div,
90
112
  {
91
113
  initial: { opacity: 0 },
92
114
  animate: { opacity: 1 },
93
115
  exit: { opacity: 0 },
94
116
  transition: { duration: 0.08 },
95
117
  className: "flex flex-shrink-0",
96
- children: /* @__PURE__ */ s(
97
- T,
118
+ children: /* @__PURE__ */ c(
119
+ _,
98
120
  {
99
- icon: L,
121
+ icon: T,
100
122
  size: "xs",
101
123
  color: "tertiary",
102
- isDisabled: g,
103
- tooltip: y || x || "Search",
104
- className: w(
105
- n && "bg-brand_subtle text-brand-500 hover:text-brand-600 hover:bg-brand_subtle/80"
124
+ isDisabled: m,
125
+ tooltip: g || S || "Search",
126
+ className: K(
127
+ i && "bg-brand_subtle text-brand-500 hover:text-brand-600 hover:bg-brand_subtle/80"
106
128
  ),
107
129
  onClick: () => a(!0)
108
130
  }
@@ -114,5 +136,5 @@ const M = { sm: 36, md: 40, lg: 44 }, P = 300, X = ({
114
136
  );
115
137
  };
116
138
  export {
117
- X as ExpandableSearchInput
139
+ Z as ExpandableSearchInput
118
140
  };
@@ -13,14 +13,18 @@ interface SearchInputProps {
13
13
  isDisabled?: boolean;
14
14
  isRequired?: boolean;
15
15
  isInvalid?: boolean;
16
+ /** When true, shows a ⌘K hint. */
16
17
  shortcut?: boolean;
18
+ /** When true, registers Cmd+K / Ctrl+K to focus the input. Defaults to `shortcut`. */
19
+ registerShortcut?: boolean;
17
20
  shortcutClassName?: string;
18
21
  className?: string;
19
22
  "aria-label"?: string;
20
23
  }
21
- export default function SearchInput({ size, shortcut, placeholder, shortcutClassName, value, onChange, onKeyDown, className, "aria-label": ariaLabel, ...props }: Omit<SearchInputProps, "size" | "shortcut"> & {
24
+ export default function SearchInput({ size, shortcut, registerShortcut, placeholder, shortcutClassName, value, onChange, onKeyDown, className, isDisabled, "aria-label": ariaLabel, ...props }: Omit<SearchInputProps, "size" | "shortcut" | "registerShortcut"> & {
22
25
  size?: "sm" | "md" | "lg";
23
26
  shortcut?: boolean;
27
+ registerShortcut?: boolean;
24
28
  }): import("react/jsx-runtime").JSX.Element;
25
29
  export {};
26
30
  //# sourceMappingURL=SearchInput.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SearchInput.d.ts","sourceRoot":"","sources":["../../../src/primitives/select/SearchInput.tsx"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EAC1B,MAAM,OAAO,CAAC;AAWf,UAAU,gBAAgB;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B,SAAS,CAAC,EAAE,oBAAoB,CAAC;IACjC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAkGD,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAClC,IAAW,EACX,QAAgB,EAChB,WAAW,EACX,iBAAiB,EACjB,KAAK,EACL,QAAQ,EACR,SAAS,EACT,SAAS,EACT,YAAY,EAAE,SAAS,EACvB,GAAG,KAAK,EACT,EAAE,IAAI,CAAC,gBAAgB,EAAE,MAAM,GAAG,UAAU,CAAC,GAAG;IAC/C,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,2CA8CA"}
1
+ {"version":3,"file":"SearchInput.d.ts","sourceRoot":"","sources":["../../../src/primitives/select/SearchInput.tsx"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EAC1B,MAAM,OAAO,CAAC;AAWf,UAAU,gBAAgB;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B,SAAS,CAAC,EAAE,oBAAoB,CAAC;IACjC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,kCAAkC;IAClC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,sFAAsF;IACtF,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAmGD,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAClC,IAAW,EACX,QAAgB,EAChB,gBAAgB,EAChB,WAAW,EACX,iBAAiB,EACjB,KAAK,EACL,QAAQ,EACR,SAAS,EACT,SAAS,EACT,UAAkB,EAClB,YAAY,EAAE,SAAS,EACvB,GAAG,KAAK,EACT,EAAE,IAAI,CAAC,gBAAgB,EAAE,MAAM,GAAG,UAAU,GAAG,kBAAkB,CAAC,GAAG;IACpE,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,2CA4EA"}