asterui 0.12.48 → 0.12.49

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.
@@ -0,0 +1,65 @@
1
+ import { default as React } from 'react';
2
+ export interface CommandItemConfig {
3
+ key: string;
4
+ label: React.ReactNode;
5
+ group?: string;
6
+ keywords?: string[];
7
+ disabled?: boolean;
8
+ onSelect?: () => void;
9
+ icon?: React.ReactNode;
10
+ }
11
+ export interface CommandProps extends Omit<React.HTMLAttributes<HTMLDialogElement>, 'children'> {
12
+ children?: React.ReactNode;
13
+ open?: boolean;
14
+ onOpenChange?: (open: boolean) => void;
15
+ defaultOpen?: boolean;
16
+ items?: CommandItemConfig[];
17
+ filter?: (value: string, search: string, keywords?: string[]) => boolean;
18
+ loop?: boolean;
19
+ shortcut?: string[];
20
+ placeholder?: string;
21
+ emptyMessage?: React.ReactNode;
22
+ }
23
+ interface CommandInputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'value' | 'onChange'> {
24
+ value?: string;
25
+ onValueChange?: (value: string) => void;
26
+ }
27
+ declare function CommandInput({ placeholder, value, onValueChange, ...rest }: CommandInputProps): import("react/jsx-runtime").JSX.Element;
28
+ interface CommandListProps {
29
+ children: React.ReactNode;
30
+ }
31
+ declare function CommandList({ children }: CommandListProps): import("react/jsx-runtime").JSX.Element;
32
+ interface CommandGroupProps {
33
+ heading?: React.ReactNode;
34
+ children: React.ReactNode;
35
+ }
36
+ declare function CommandGroup({ heading, children }: CommandGroupProps): import("react/jsx-runtime").JSX.Element | null;
37
+ interface CommandItemProps {
38
+ children: React.ReactNode;
39
+ value?: string;
40
+ onSelect?: () => void;
41
+ disabled?: boolean;
42
+ keywords?: string[];
43
+ icon?: React.ReactNode;
44
+ }
45
+ declare function CommandItem({ children, value, onSelect, disabled, keywords, icon, }: CommandItemProps): import("react/jsx-runtime").JSX.Element | null;
46
+ interface CommandEmptyProps {
47
+ children?: React.ReactNode;
48
+ }
49
+ declare function CommandEmpty({ children }: CommandEmptyProps): import("react/jsx-runtime").JSX.Element | null;
50
+ interface CommandPageProps {
51
+ id: string;
52
+ children: React.ReactNode;
53
+ }
54
+ declare function CommandPage({ id, children }: CommandPageProps): import("react/jsx-runtime").JSX.Element | null;
55
+ declare function CommandSeparator(): import("react/jsx-runtime").JSX.Element;
56
+ export declare const Command: React.ForwardRefExoticComponent<CommandProps & React.RefAttributes<HTMLDialogElement>> & {
57
+ Input: typeof CommandInput;
58
+ List: typeof CommandList;
59
+ Group: typeof CommandGroup;
60
+ Item: typeof CommandItem;
61
+ Empty: typeof CommandEmpty;
62
+ Page: typeof CommandPage;
63
+ Separator: typeof CommandSeparator;
64
+ };
65
+ export default Command;
@@ -0,0 +1,422 @@
1
+ import { jsx as n, jsxs as m, Fragment as _ } from "react/jsx-runtime";
2
+ import W, { forwardRef as ue, useRef as K, useId as ee, useState as H, useCallback as V, useMemo as Z, useEffect as M, createContext as me, useContext as pe } from "react";
3
+ const te = me(null);
4
+ function j() {
5
+ const r = pe(te);
6
+ if (!r)
7
+ throw new Error("Command compound components must be used within a Command");
8
+ return r;
9
+ }
10
+ const fe = (r, c, a = []) => {
11
+ const d = c.toLowerCase();
12
+ return r.toLowerCase().includes(d) ? !0 : a.some((p) => p.toLowerCase().includes(d));
13
+ }, ne = ue(
14
+ ({
15
+ children: r,
16
+ open: c,
17
+ onOpenChange: a,
18
+ defaultOpen: d = !1,
19
+ items: l,
20
+ filter: p = fe,
21
+ loop: f = !0,
22
+ shortcut: x = ["k"],
23
+ placeholder: I = "Type a command or search...",
24
+ emptyMessage: y = "No results found.",
25
+ className: q = "",
26
+ ...z
27
+ }, h) => {
28
+ const E = K(null), G = K(null), F = K(null), U = K(null), L = ee(), [D, J] = H(d), v = c !== void 0, A = v ? c : D, b = V(
29
+ (e) => {
30
+ v || J(e), a?.(e);
31
+ },
32
+ [v, a]
33
+ ), [k, P] = H(""), [g, w] = H(0), [O, X] = H(/* @__PURE__ */ new Map()), [C, Q] = H(["root"]), Y = C[C.length - 1], ae = V((e) => {
34
+ Q((t) => [...t, e]), P(""), w(0);
35
+ }, []), R = V(() => {
36
+ C.length > 1 && (Q((e) => e.slice(0, -1)), P(""), w(0));
37
+ }, [C.length]), se = V(
38
+ (e, t, s, i, u) => {
39
+ X((o) => {
40
+ const $ = new Map(o);
41
+ return $.set(e, { id: e, value: t, keywords: s, disabled: i, onSelect: u }), $;
42
+ });
43
+ },
44
+ []
45
+ ), oe = V((e) => {
46
+ X((t) => {
47
+ const s = new Map(t);
48
+ return s.delete(e), s;
49
+ });
50
+ }, []), B = Z(() => l ? l.filter((t) => {
51
+ if (!k) return !0;
52
+ const s = typeof t.label == "string" ? t.label : "";
53
+ return p(s, k, t.keywords);
54
+ }).map((t) => ({
55
+ id: t.key,
56
+ value: typeof t.label == "string" ? t.label : t.key,
57
+ keywords: t.keywords || [],
58
+ disabled: t.disabled || !1
59
+ })) : Array.from(O.values()).filter((t) => k ? p(t.value, k, t.keywords) : !0), [l, O, k, p]), N = Z(
60
+ () => B.filter((e) => !e.disabled),
61
+ [B]
62
+ ), S = V(
63
+ (e) => {
64
+ if (l) {
65
+ const t = l.find((s) => s.key === e);
66
+ t && !t.disabled && (t.onSelect?.(), b(!1));
67
+ } else {
68
+ const t = O.get(e);
69
+ t && !t.disabled && (t.onSelect?.(), b(!1));
70
+ }
71
+ },
72
+ [l, O, b]
73
+ );
74
+ M(() => {
75
+ A && (P(""), w(0), Q(["root"]));
76
+ }, [A]), M(() => {
77
+ const e = E.current;
78
+ e && (A ? e.open || (U.current = document.activeElement, e.showModal(), setTimeout(() => G.current?.focus(), 0)) : e.open && (e.close(), U.current?.focus()));
79
+ }, [A]), M(() => {
80
+ const e = E.current;
81
+ if (!e) return;
82
+ const t = () => {
83
+ b(!1);
84
+ };
85
+ return e.addEventListener("close", t), () => e.removeEventListener("close", t);
86
+ }, [b]), M(() => {
87
+ const e = (t) => {
88
+ const s = x[0]?.toLowerCase();
89
+ (t.metaKey || t.ctrlKey) && t.key.toLowerCase() === s && (t.preventDefault(), b(!A));
90
+ };
91
+ return document.addEventListener("keydown", e), () => document.removeEventListener("keydown", e);
92
+ }, [x, A, b]);
93
+ const le = V(
94
+ (e) => {
95
+ switch (e.key) {
96
+ case "ArrowDown": {
97
+ if (e.preventDefault(), N.length === 0) return;
98
+ w((t) => {
99
+ const s = t + 1;
100
+ return s >= N.length ? f ? 0 : t : s;
101
+ });
102
+ break;
103
+ }
104
+ case "ArrowUp": {
105
+ if (e.preventDefault(), N.length === 0) return;
106
+ w((t) => {
107
+ const s = t - 1;
108
+ return s < 0 ? f ? N.length - 1 : 0 : s;
109
+ });
110
+ break;
111
+ }
112
+ case "Enter": {
113
+ e.preventDefault();
114
+ const t = N[g];
115
+ t && S(t.id);
116
+ break;
117
+ }
118
+ case "Escape": {
119
+ e.preventDefault(), C.length > 1 ? R() : b(!1);
120
+ break;
121
+ }
122
+ case "Backspace": {
123
+ k === "" && C.length > 1 && (e.preventDefault(), R());
124
+ break;
125
+ }
126
+ }
127
+ },
128
+ [N, g, f, S, C, R, k, b]
129
+ );
130
+ M(() => {
131
+ g >= 0 && F.current && F.current.querySelectorAll("[data-command-item]")[g]?.scrollIntoView({ block: "nearest" });
132
+ }, [g]);
133
+ const ie = (e) => {
134
+ e.target === E.current && b(!1);
135
+ }, ce = {
136
+ searchValue: k,
137
+ setSearchValue: P,
138
+ highlightedIndex: g,
139
+ setHighlightedIndex: w,
140
+ registerItem: (e, t, s, i) => se(e, t, s, i),
141
+ unregisterItem: oe,
142
+ filteredItems: B,
143
+ selectItem: S,
144
+ loop: f,
145
+ baseId: L,
146
+ currentPage: Y,
147
+ setPage: ae,
148
+ goBack: R,
149
+ pageStack: C
150
+ }, de = () => {
151
+ if (!l) return null;
152
+ const e = /* @__PURE__ */ new Map(), t = [];
153
+ B.forEach((i) => {
154
+ const u = l.find((o) => o.key === i.id);
155
+ if (u)
156
+ if (u.group) {
157
+ const o = e.get(u.group) || [];
158
+ o.push(u), e.set(u.group, o);
159
+ } else
160
+ t.push(u);
161
+ });
162
+ let s = 0;
163
+ return /* @__PURE__ */ m(_, { children: [
164
+ Array.from(e.entries()).map(([i, u]) => /* @__PURE__ */ m("div", { role: "group", "aria-label": i, children: [
165
+ /* @__PURE__ */ n("div", { className: "px-3 py-2 text-xs font-semibold text-base-content/60 uppercase tracking-wider", children: i }),
166
+ u.map((o) => {
167
+ const $ = s++, T = $ === g;
168
+ return /* @__PURE__ */ m(
169
+ "div",
170
+ {
171
+ role: "option",
172
+ "aria-selected": T,
173
+ "aria-disabled": o.disabled,
174
+ "data-command-item": !0,
175
+ "data-highlighted": T,
176
+ className: [
177
+ "px-3 py-2 cursor-pointer flex items-center gap-3",
178
+ T && "bg-primary text-primary-content",
179
+ !T && "hover:bg-base-200",
180
+ o.disabled && "opacity-50 cursor-not-allowed"
181
+ ].filter(Boolean).join(" "),
182
+ onClick: () => !o.disabled && S(o.key),
183
+ onMouseEnter: () => !o.disabled && w($),
184
+ children: [
185
+ o.icon && /* @__PURE__ */ n("span", { className: "w-5 h-5", children: o.icon }),
186
+ /* @__PURE__ */ n("span", { children: o.label })
187
+ ]
188
+ },
189
+ o.key
190
+ );
191
+ })
192
+ ] }, i)),
193
+ t.length > 0 && /* @__PURE__ */ n("div", { role: "group", children: t.map((i) => {
194
+ const u = s++, o = u === g;
195
+ return /* @__PURE__ */ m(
196
+ "div",
197
+ {
198
+ role: "option",
199
+ "aria-selected": o,
200
+ "aria-disabled": i.disabled,
201
+ "data-command-item": !0,
202
+ "data-highlighted": o,
203
+ className: [
204
+ "px-3 py-2 cursor-pointer flex items-center gap-3",
205
+ o && "bg-primary text-primary-content",
206
+ !o && "hover:bg-base-200",
207
+ i.disabled && "opacity-50 cursor-not-allowed"
208
+ ].filter(Boolean).join(" "),
209
+ onClick: () => !i.disabled && S(i.key),
210
+ onMouseEnter: () => !i.disabled && w(u),
211
+ children: [
212
+ i.icon && /* @__PURE__ */ n("span", { className: "w-5 h-5", children: i.icon }),
213
+ /* @__PURE__ */ n("span", { children: i.label })
214
+ ]
215
+ },
216
+ i.key
217
+ );
218
+ }) })
219
+ ] });
220
+ };
221
+ return /* @__PURE__ */ n(
222
+ "dialog",
223
+ {
224
+ ref: (e) => {
225
+ E.current = e, typeof h == "function" ? h(e) : h && (h.current = e);
226
+ },
227
+ className: `modal ${q}`,
228
+ onClick: ie,
229
+ ...z,
230
+ children: /* @__PURE__ */ n(
231
+ "div",
232
+ {
233
+ className: "modal-box p-0 max-w-lg w-full overflow-hidden",
234
+ role: "dialog",
235
+ "aria-modal": "true",
236
+ "aria-label": "Command palette",
237
+ children: /* @__PURE__ */ m(te.Provider, { value: ce, children: [
238
+ C.length > 1 && /* @__PURE__ */ m("div", { className: "px-3 py-2 border-b border-base-content/10 flex items-center gap-2 text-sm", children: [
239
+ /* @__PURE__ */ n(
240
+ "button",
241
+ {
242
+ onClick: R,
243
+ className: "hover:bg-base-200 rounded p-1",
244
+ "aria-label": "Go back",
245
+ children: /* @__PURE__ */ n("svg", { className: "w-4 h-4", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: /* @__PURE__ */ n("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M15 19l-7-7 7-7" }) })
246
+ }
247
+ ),
248
+ /* @__PURE__ */ n("span", { className: "text-base-content/60", children: Y })
249
+ ] }),
250
+ /* @__PURE__ */ n("div", { className: "px-3 py-3 border-b border-base-content/10", children: /* @__PURE__ */ m("div", { className: "flex items-center gap-3", children: [
251
+ /* @__PURE__ */ n(
252
+ "svg",
253
+ {
254
+ className: "w-5 h-5 text-base-content/50",
255
+ fill: "none",
256
+ viewBox: "0 0 24 24",
257
+ stroke: "currentColor",
258
+ children: /* @__PURE__ */ n(
259
+ "path",
260
+ {
261
+ strokeLinecap: "round",
262
+ strokeLinejoin: "round",
263
+ strokeWidth: 2,
264
+ d: "M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"
265
+ }
266
+ )
267
+ }
268
+ ),
269
+ /* @__PURE__ */ n(
270
+ "input",
271
+ {
272
+ ref: G,
273
+ type: "text",
274
+ className: "flex-1 bg-transparent border-none outline-none text-base placeholder:text-base-content/50",
275
+ placeholder: I,
276
+ value: k,
277
+ onChange: (e) => {
278
+ P(e.target.value), w(0);
279
+ },
280
+ onKeyDown: le,
281
+ role: "combobox",
282
+ "aria-expanded": "true",
283
+ "aria-controls": `${L}-listbox`,
284
+ "aria-activedescendant": N[g] ? `${L}-item-${N[g].id}` : void 0
285
+ }
286
+ )
287
+ ] }) }),
288
+ /* @__PURE__ */ n(
289
+ "div",
290
+ {
291
+ ref: F,
292
+ className: "max-h-80 overflow-y-auto py-2",
293
+ role: "listbox",
294
+ id: `${L}-listbox`,
295
+ children: l ? B.length > 0 ? de() : /* @__PURE__ */ n("div", { className: "px-3 py-8 text-center text-base-content/60", children: y }) : r
296
+ }
297
+ ),
298
+ /* @__PURE__ */ n("div", { className: "px-3 py-2 border-t border-base-content/10 flex items-center justify-between text-xs text-base-content/50", children: /* @__PURE__ */ m("div", { className: "flex items-center gap-4", children: [
299
+ /* @__PURE__ */ m("span", { className: "flex items-center gap-1", children: [
300
+ /* @__PURE__ */ n("kbd", { className: "kbd kbd-xs", children: "↑↓" }),
301
+ " navigate"
302
+ ] }),
303
+ /* @__PURE__ */ m("span", { className: "flex items-center gap-1", children: [
304
+ /* @__PURE__ */ n("kbd", { className: "kbd kbd-xs", children: "↵" }),
305
+ " select"
306
+ ] }),
307
+ /* @__PURE__ */ m("span", { className: "flex items-center gap-1", children: [
308
+ /* @__PURE__ */ n("kbd", { className: "kbd kbd-xs", children: "esc" }),
309
+ " close"
310
+ ] })
311
+ ] }) })
312
+ ] })
313
+ }
314
+ )
315
+ }
316
+ );
317
+ }
318
+ );
319
+ ne.displayName = "Command";
320
+ function he({ placeholder: r, value: c, onValueChange: a, ...d }) {
321
+ const { searchValue: l, setSearchValue: p } = j();
322
+ return /* @__PURE__ */ n(
323
+ "input",
324
+ {
325
+ type: "text",
326
+ className: "flex-1 bg-transparent border-none outline-none text-base placeholder:text-base-content/50",
327
+ placeholder: r,
328
+ value: c !== void 0 ? c : l,
329
+ onChange: (I) => {
330
+ const y = I.target.value;
331
+ a ? a(y) : p(y);
332
+ },
333
+ ...d
334
+ }
335
+ );
336
+ }
337
+ function be({ children: r }) {
338
+ const { baseId: c, currentPage: a } = j(), d = W.Children.toArray(r).filter((l) => W.isValidElement(l) ? l.type === re ? l.props.id === a : a === "root" : !1);
339
+ return /* @__PURE__ */ n("div", { role: "listbox", id: `${c}-listbox`, className: "py-2", children: d });
340
+ }
341
+ function ge({ heading: r, children: c }) {
342
+ const { searchValue: a, filteredItems: d } = j(), p = W.Children.toArray(c).some((f) => {
343
+ if (!W.isValidElement(f)) return !1;
344
+ const x = f.props, I = x.value || "";
345
+ return a ? d.some((y) => y.value === I || y.id === x.value) : !0;
346
+ });
347
+ return a && !p ? null : /* @__PURE__ */ m("div", { role: "group", "aria-label": typeof r == "string" ? r : void 0, children: [
348
+ r && /* @__PURE__ */ n("div", { className: "px-3 py-2 text-xs font-semibold text-base-content/60 uppercase tracking-wider", children: r }),
349
+ c
350
+ ] });
351
+ }
352
+ function xe({
353
+ children: r,
354
+ value: c,
355
+ onSelect: a,
356
+ disabled: d = !1,
357
+ keywords: l = [],
358
+ icon: p
359
+ }) {
360
+ const {
361
+ registerItem: f,
362
+ unregisterItem: x,
363
+ filteredItems: I,
364
+ highlightedIndex: y,
365
+ setHighlightedIndex: q,
366
+ baseId: z
367
+ } = j(), h = ee(), E = c || (typeof r == "string" ? r : "");
368
+ M(() => (f(h, E, l, d), () => x(h)), [h, E, l, d, f, x]);
369
+ const G = K(a);
370
+ if (G.current = a, !I.some((v) => v.id === h)) return null;
371
+ const L = I.filter((v) => !v.disabled).findIndex((v) => v.id === h), D = L === y, J = () => {
372
+ !d && a && a();
373
+ };
374
+ return /* @__PURE__ */ m(
375
+ "div",
376
+ {
377
+ id: `${z}-item-${h}`,
378
+ role: "option",
379
+ "aria-selected": D,
380
+ "aria-disabled": d,
381
+ "data-command-item": !0,
382
+ "data-highlighted": D,
383
+ className: [
384
+ "px-3 py-2 cursor-pointer flex items-center gap-3",
385
+ D && "bg-primary text-primary-content",
386
+ !D && "hover:bg-base-200",
387
+ d && "opacity-50 cursor-not-allowed"
388
+ ].filter(Boolean).join(" "),
389
+ onClick: J,
390
+ onMouseEnter: () => !d && q(L),
391
+ children: [
392
+ p && /* @__PURE__ */ n("span", { className: "w-5 h-5", children: p }),
393
+ /* @__PURE__ */ n("span", { children: r })
394
+ ]
395
+ }
396
+ );
397
+ }
398
+ function ye({ children: r = "No results found." }) {
399
+ const { filteredItems: c, searchValue: a } = j();
400
+ return c.length > 0 || !a ? null : /* @__PURE__ */ n("div", { className: "px-3 py-8 text-center text-base-content/60", children: r });
401
+ }
402
+ function re({ id: r, children: c }) {
403
+ const { currentPage: a } = j();
404
+ return a !== r ? null : /* @__PURE__ */ n(_, { children: c });
405
+ }
406
+ function ve() {
407
+ return /* @__PURE__ */ n("div", { className: "my-2 border-t border-base-content/10", role: "separator" });
408
+ }
409
+ const Ce = Object.assign(ne, {
410
+ Input: he,
411
+ List: be,
412
+ Group: ge,
413
+ Item: xe,
414
+ Empty: ye,
415
+ Page: re,
416
+ Separator: ve
417
+ });
418
+ export {
419
+ Ce as Command,
420
+ Ce as default
421
+ };
422
+ //# sourceMappingURL=Command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Command.js","sources":["../../src/components/Command.tsx"],"sourcesContent":["import React, {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from 'react'\n\n// Types\nexport interface CommandItemConfig {\n key: string\n label: React.ReactNode\n group?: string\n keywords?: string[]\n disabled?: boolean\n onSelect?: () => void\n icon?: React.ReactNode\n}\n\nexport interface CommandProps extends Omit<React.HTMLAttributes<HTMLDialogElement>, 'children'> {\n children?: React.ReactNode\n open?: boolean\n onOpenChange?: (open: boolean) => void\n defaultOpen?: boolean\n items?: CommandItemConfig[]\n filter?: (value: string, search: string, keywords?: string[]) => boolean\n loop?: boolean\n shortcut?: string[]\n placeholder?: string\n emptyMessage?: React.ReactNode\n}\n\ninterface CommandContextValue {\n searchValue: string\n setSearchValue: (value: string) => void\n highlightedIndex: number\n setHighlightedIndex: (index: number) => void\n registerItem: (id: string, value: string, keywords: string[], disabled: boolean) => void\n unregisterItem: (id: string) => void\n filteredItems: FilteredItem[]\n selectItem: (id: string) => void\n loop: boolean\n baseId: string\n currentPage: string\n setPage: (pageId: string) => void\n goBack: () => void\n pageStack: string[]\n}\n\ninterface FilteredItem {\n id: string\n value: string\n keywords: string[]\n disabled: boolean\n}\n\ninterface ItemRegistration {\n id: string\n value: string\n keywords: string[]\n disabled: boolean\n onSelect?: () => void\n}\n\nconst CommandContext = createContext<CommandContextValue | null>(null)\n\nfunction useCommandContext() {\n const context = useContext(CommandContext)\n if (!context) {\n throw new Error('Command compound components must be used within a Command')\n }\n return context\n}\n\n// Default filter function\nconst defaultFilter = (value: string, search: string, keywords: string[] = []): boolean => {\n const searchLower = search.toLowerCase()\n const valueLower = value.toLowerCase()\n if (valueLower.includes(searchLower)) return true\n return keywords.some((k) => k.toLowerCase().includes(searchLower))\n}\n\n// Root Command component\nconst CommandRoot = forwardRef<HTMLDialogElement, CommandProps>(\n (\n {\n children,\n open: controlledOpen,\n onOpenChange,\n defaultOpen = false,\n items,\n filter = defaultFilter,\n loop = true,\n shortcut = ['k'],\n placeholder = 'Type a command or search...',\n emptyMessage = 'No results found.',\n className = '',\n ...rest\n },\n ref\n ) => {\n const dialogRef = useRef<HTMLDialogElement>(null)\n const inputRef = useRef<HTMLInputElement>(null)\n const listRef = useRef<HTMLDivElement>(null)\n const previousActiveElement = useRef<HTMLElement | null>(null)\n const baseId = useId()\n\n // Controlled/uncontrolled open state\n const [internalOpen, setInternalOpen] = useState(defaultOpen)\n const isControlled = controlledOpen !== undefined\n const isOpen = isControlled ? controlledOpen : internalOpen\n\n const setIsOpen = useCallback(\n (newOpen: boolean) => {\n if (!isControlled) {\n setInternalOpen(newOpen)\n }\n onOpenChange?.(newOpen)\n },\n [isControlled, onOpenChange]\n )\n\n // State\n const [searchValue, setSearchValue] = useState('')\n const [highlightedIndex, setHighlightedIndex] = useState(0)\n const [registeredItems, setRegisteredItems] = useState<Map<string, ItemRegistration>>(new Map())\n const [pageStack, setPageStack] = useState<string[]>(['root'])\n const currentPage = pageStack[pageStack.length - 1]\n\n // Page navigation\n const setPage = useCallback((pageId: string) => {\n setPageStack((prev) => [...prev, pageId])\n setSearchValue('')\n setHighlightedIndex(0)\n }, [])\n\n const goBack = useCallback(() => {\n if (pageStack.length > 1) {\n setPageStack((prev) => prev.slice(0, -1))\n setSearchValue('')\n setHighlightedIndex(0)\n }\n }, [pageStack.length])\n\n // Item registration for compound components\n const registerItem = useCallback(\n (id: string, value: string, keywords: string[], disabled: boolean, onSelect?: () => void) => {\n setRegisteredItems((prev) => {\n const next = new Map(prev)\n next.set(id, { id, value, keywords, disabled, onSelect })\n return next\n })\n },\n []\n )\n\n const unregisterItem = useCallback((id: string) => {\n setRegisteredItems((prev) => {\n const next = new Map(prev)\n next.delete(id)\n return next\n })\n }, [])\n\n // Compute filtered items\n const filteredItems = useMemo((): FilteredItem[] => {\n // Use data-driven items if provided\n if (items) {\n return items\n .filter((item) => {\n if (!searchValue) return true\n const label = typeof item.label === 'string' ? item.label : ''\n return filter(label, searchValue, item.keywords)\n })\n .map((item) => ({\n id: item.key,\n value: typeof item.label === 'string' ? item.label : item.key,\n keywords: item.keywords || [],\n disabled: item.disabled || false,\n }))\n }\n\n // Use registered compound items\n const itemsArray = Array.from(registeredItems.values())\n return itemsArray.filter((item) => {\n if (!searchValue) return true\n return filter(item.value, searchValue, item.keywords)\n })\n }, [items, registeredItems, searchValue, filter])\n\n // Get enabled items for navigation\n const enabledItems = useMemo(\n () => filteredItems.filter((item) => !item.disabled),\n [filteredItems]\n )\n\n // Select item\n const selectItem = useCallback(\n (id: string) => {\n if (items) {\n const item = items.find((i) => i.key === id)\n if (item && !item.disabled) {\n item.onSelect?.()\n setIsOpen(false)\n }\n } else {\n const reg = registeredItems.get(id)\n if (reg && !reg.disabled) {\n reg.onSelect?.()\n setIsOpen(false)\n }\n }\n },\n [items, registeredItems, setIsOpen]\n )\n\n // Reset state when opening\n useEffect(() => {\n if (isOpen) {\n setSearchValue('')\n setHighlightedIndex(0)\n setPageStack(['root'])\n }\n }, [isOpen])\n\n // Handle dialog open/close\n useEffect(() => {\n const dialog = dialogRef.current\n if (!dialog) return\n\n if (isOpen) {\n if (!dialog.open) {\n previousActiveElement.current = document.activeElement as HTMLElement\n dialog.showModal()\n setTimeout(() => inputRef.current?.focus(), 0)\n }\n } else {\n if (dialog.open) {\n dialog.close()\n previousActiveElement.current?.focus()\n }\n }\n }, [isOpen])\n\n // Handle dialog close event\n useEffect(() => {\n const dialog = dialogRef.current\n if (!dialog) return\n\n const onDialogClose = () => {\n setIsOpen(false)\n }\n\n dialog.addEventListener('close', onDialogClose)\n return () => dialog.removeEventListener('close', onDialogClose)\n }, [setIsOpen])\n\n // Global keyboard shortcut\n useEffect(() => {\n const handleGlobalKeyDown = (e: KeyboardEvent) => {\n const key = shortcut[0]?.toLowerCase()\n if ((e.metaKey || e.ctrlKey) && e.key.toLowerCase() === key) {\n e.preventDefault()\n setIsOpen(!isOpen)\n }\n }\n\n document.addEventListener('keydown', handleGlobalKeyDown)\n return () => document.removeEventListener('keydown', handleGlobalKeyDown)\n }, [shortcut, isOpen, setIsOpen])\n\n // Keyboard navigation\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n switch (e.key) {\n case 'ArrowDown': {\n e.preventDefault()\n if (enabledItems.length === 0) return\n setHighlightedIndex((prev) => {\n const next = prev + 1\n if (next >= enabledItems.length) {\n return loop ? 0 : prev\n }\n return next\n })\n break\n }\n case 'ArrowUp': {\n e.preventDefault()\n if (enabledItems.length === 0) return\n setHighlightedIndex((prev) => {\n const next = prev - 1\n if (next < 0) {\n return loop ? enabledItems.length - 1 : 0\n }\n return next\n })\n break\n }\n case 'Enter': {\n e.preventDefault()\n const item = enabledItems[highlightedIndex]\n if (item) {\n selectItem(item.id)\n }\n break\n }\n case 'Escape': {\n e.preventDefault()\n if (pageStack.length > 1) {\n goBack()\n } else {\n setIsOpen(false)\n }\n break\n }\n case 'Backspace': {\n if (searchValue === '' && pageStack.length > 1) {\n e.preventDefault()\n goBack()\n }\n break\n }\n }\n },\n [enabledItems, highlightedIndex, loop, selectItem, pageStack, goBack, searchValue, setIsOpen]\n )\n\n // Scroll highlighted item into view\n useEffect(() => {\n if (highlightedIndex >= 0 && listRef.current) {\n const items = listRef.current.querySelectorAll('[data-command-item]')\n const highlightedEl = items[highlightedIndex] as HTMLElement\n highlightedEl?.scrollIntoView({ block: 'nearest' })\n }\n }, [highlightedIndex])\n\n // Handle mask click\n const handleBackdropClick = (e: React.MouseEvent) => {\n if (e.target === dialogRef.current) {\n setIsOpen(false)\n }\n }\n\n const contextValue: CommandContextValue = {\n searchValue,\n setSearchValue,\n highlightedIndex,\n setHighlightedIndex,\n registerItem: (id, value, keywords, disabled) => registerItem(id, value, keywords, disabled),\n unregisterItem,\n filteredItems,\n selectItem,\n loop,\n baseId,\n currentPage,\n setPage,\n goBack,\n pageStack,\n }\n\n // Render data-driven items\n const renderDataDrivenItems = () => {\n if (!items) return null\n\n // Group items\n const groups = new Map<string, CommandItemConfig[]>()\n const ungrouped: CommandItemConfig[] = []\n\n filteredItems.forEach((fi) => {\n const item = items.find((i) => i.key === fi.id)\n if (!item) return\n if (item.group) {\n const group = groups.get(item.group) || []\n group.push(item)\n groups.set(item.group, group)\n } else {\n ungrouped.push(item)\n }\n })\n\n let globalIndex = 0\n\n return (\n <>\n {Array.from(groups.entries()).map(([groupName, groupItems]) => (\n <div key={groupName} role=\"group\" aria-label={groupName}>\n <div className=\"px-3 py-2 text-xs font-semibold text-base-content/60 uppercase tracking-wider\">\n {groupName}\n </div>\n {groupItems.map((item) => {\n const itemIndex = globalIndex++\n const isHighlighted = itemIndex === highlightedIndex\n return (\n <div\n key={item.key}\n role=\"option\"\n aria-selected={isHighlighted}\n aria-disabled={item.disabled}\n data-command-item\n data-highlighted={isHighlighted}\n className={[\n 'px-3 py-2 cursor-pointer flex items-center gap-3',\n isHighlighted && 'bg-primary text-primary-content',\n !isHighlighted && 'hover:bg-base-200',\n item.disabled && 'opacity-50 cursor-not-allowed',\n ]\n .filter(Boolean)\n .join(' ')}\n onClick={() => !item.disabled && selectItem(item.key)}\n onMouseEnter={() => !item.disabled && setHighlightedIndex(itemIndex)}\n >\n {item.icon && <span className=\"w-5 h-5\">{item.icon}</span>}\n <span>{item.label}</span>\n </div>\n )\n })}\n </div>\n ))}\n {ungrouped.length > 0 && (\n <div role=\"group\">\n {ungrouped.map((item) => {\n const itemIndex = globalIndex++\n const isHighlighted = itemIndex === highlightedIndex\n return (\n <div\n key={item.key}\n role=\"option\"\n aria-selected={isHighlighted}\n aria-disabled={item.disabled}\n data-command-item\n data-highlighted={isHighlighted}\n className={[\n 'px-3 py-2 cursor-pointer flex items-center gap-3',\n isHighlighted && 'bg-primary text-primary-content',\n !isHighlighted && 'hover:bg-base-200',\n item.disabled && 'opacity-50 cursor-not-allowed',\n ]\n .filter(Boolean)\n .join(' ')}\n onClick={() => !item.disabled && selectItem(item.key)}\n onMouseEnter={() => !item.disabled && setHighlightedIndex(itemIndex)}\n >\n {item.icon && <span className=\"w-5 h-5\">{item.icon}</span>}\n <span>{item.label}</span>\n </div>\n )\n })}\n </div>\n )}\n </>\n )\n }\n\n return (\n <dialog\n ref={(node) => {\n ;(dialogRef as React.MutableRefObject<HTMLDialogElement | null>).current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) ref.current = node\n }}\n className={`modal ${className}`}\n onClick={handleBackdropClick}\n {...rest}\n >\n <div\n className=\"modal-box p-0 max-w-lg w-full overflow-hidden\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"Command palette\"\n >\n <CommandContext.Provider value={contextValue}>\n {/* Breadcrumb for nested pages */}\n {pageStack.length > 1 && (\n <div className=\"px-3 py-2 border-b border-base-content/10 flex items-center gap-2 text-sm\">\n <button\n onClick={goBack}\n className=\"hover:bg-base-200 rounded p-1\"\n aria-label=\"Go back\"\n >\n <svg className=\"w-4 h-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15 19l-7-7 7-7\" />\n </svg>\n </button>\n <span className=\"text-base-content/60\">{currentPage}</span>\n </div>\n )}\n\n {/* Search input */}\n <div className=\"px-3 py-3 border-b border-base-content/10\">\n <div className=\"flex items-center gap-3\">\n <svg\n className=\"w-5 h-5 text-base-content/50\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z\"\n />\n </svg>\n <input\n ref={inputRef}\n type=\"text\"\n className=\"flex-1 bg-transparent border-none outline-none text-base placeholder:text-base-content/50\"\n placeholder={placeholder}\n value={searchValue}\n onChange={(e) => {\n setSearchValue(e.target.value)\n setHighlightedIndex(0)\n }}\n onKeyDown={handleKeyDown}\n role=\"combobox\"\n aria-expanded=\"true\"\n aria-controls={`${baseId}-listbox`}\n aria-activedescendant={\n enabledItems[highlightedIndex]\n ? `${baseId}-item-${enabledItems[highlightedIndex].id}`\n : undefined\n }\n />\n </div>\n </div>\n\n {/* List */}\n <div\n ref={listRef}\n className=\"max-h-80 overflow-y-auto py-2\"\n role=\"listbox\"\n id={`${baseId}-listbox`}\n >\n {items ? (\n filteredItems.length > 0 ? (\n renderDataDrivenItems()\n ) : (\n <div className=\"px-3 py-8 text-center text-base-content/60\">{emptyMessage}</div>\n )\n ) : (\n children\n )}\n </div>\n\n {/* Footer with shortcut hint */}\n <div className=\"px-3 py-2 border-t border-base-content/10 flex items-center justify-between text-xs text-base-content/50\">\n <div className=\"flex items-center gap-4\">\n <span className=\"flex items-center gap-1\">\n <kbd className=\"kbd kbd-xs\">↑↓</kbd> navigate\n </span>\n <span className=\"flex items-center gap-1\">\n <kbd className=\"kbd kbd-xs\">↵</kbd> select\n </span>\n <span className=\"flex items-center gap-1\">\n <kbd className=\"kbd kbd-xs\">esc</kbd> close\n </span>\n </div>\n </div>\n </CommandContext.Provider>\n </div>\n </dialog>\n )\n }\n)\n\nCommandRoot.displayName = 'Command'\n\n// Command.Input - for compound pattern customization\ninterface CommandInputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'value' | 'onChange'> {\n value?: string\n onValueChange?: (value: string) => void\n}\n\nfunction CommandInput({ placeholder, value, onValueChange, ...rest }: CommandInputProps) {\n const { searchValue, setSearchValue } = useCommandContext()\n const controlledValue = value !== undefined ? value : searchValue\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value\n if (onValueChange) {\n onValueChange(newValue)\n } else {\n setSearchValue(newValue)\n }\n }\n\n return (\n <input\n type=\"text\"\n className=\"flex-1 bg-transparent border-none outline-none text-base placeholder:text-base-content/50\"\n placeholder={placeholder}\n value={controlledValue}\n onChange={handleChange}\n {...rest}\n />\n )\n}\n\n// Command.List\ninterface CommandListProps {\n children: React.ReactNode\n}\n\nfunction CommandList({ children }: CommandListProps) {\n const { baseId, currentPage } = useCommandContext()\n\n // Filter children to only show items for current page\n const filteredChildren = React.Children.toArray(children).filter((child) => {\n if (!React.isValidElement(child)) return false\n // Show Command.Page only if it matches currentPage\n if (child.type === CommandPage) {\n return (child.props as CommandPageProps).id === currentPage\n }\n // Show groups/items only on root page\n return currentPage === 'root'\n })\n\n return (\n <div role=\"listbox\" id={`${baseId}-listbox`} className=\"py-2\">\n {filteredChildren}\n </div>\n )\n}\n\n// Command.Group\ninterface CommandGroupProps {\n heading?: React.ReactNode\n children: React.ReactNode\n}\n\nfunction CommandGroup({ heading, children }: CommandGroupProps) {\n const { searchValue, filteredItems } = useCommandContext()\n\n // Check if any children match the filter\n const childArray = React.Children.toArray(children)\n const hasVisibleChildren = childArray.some((child) => {\n if (!React.isValidElement(child)) return false\n const childProps = child.props as CommandItemProps\n const childValue = childProps.value || ''\n if (!searchValue) return true\n return filteredItems.some((fi) => fi.value === childValue || fi.id === childProps.value)\n })\n\n if (searchValue && !hasVisibleChildren) {\n return null\n }\n\n return (\n <div role=\"group\" aria-label={typeof heading === 'string' ? heading : undefined}>\n {heading && (\n <div className=\"px-3 py-2 text-xs font-semibold text-base-content/60 uppercase tracking-wider\">\n {heading}\n </div>\n )}\n {children}\n </div>\n )\n}\n\n// Command.Item\ninterface CommandItemProps {\n children: React.ReactNode\n value?: string\n onSelect?: () => void\n disabled?: boolean\n keywords?: string[]\n icon?: React.ReactNode\n}\n\nfunction CommandItem({\n children,\n value,\n onSelect,\n disabled = false,\n keywords = [],\n icon,\n}: CommandItemProps) {\n const {\n registerItem,\n unregisterItem,\n filteredItems,\n highlightedIndex,\n setHighlightedIndex,\n baseId,\n } = useCommandContext()\n\n const itemId = useId()\n const itemValue = value || (typeof children === 'string' ? children : '')\n\n // Register item\n useEffect(() => {\n registerItem(itemId, itemValue, keywords, disabled)\n return () => unregisterItem(itemId)\n }, [itemId, itemValue, keywords, disabled, registerItem, unregisterItem])\n\n // Store onSelect in a ref so we can access it from selectItem\n const onSelectRef = useRef(onSelect)\n onSelectRef.current = onSelect\n\n // Check if this item is visible after filtering\n const isVisible = filteredItems.some((fi) => fi.id === itemId)\n if (!isVisible) return null\n\n // Find index in filtered items\n const enabledItems = filteredItems.filter((fi) => !fi.disabled)\n const itemIndex = enabledItems.findIndex((fi) => fi.id === itemId)\n const isHighlighted = itemIndex === highlightedIndex\n\n const handleClick = () => {\n if (!disabled && onSelect) {\n onSelect()\n }\n }\n\n return (\n <div\n id={`${baseId}-item-${itemId}`}\n role=\"option\"\n aria-selected={isHighlighted}\n aria-disabled={disabled}\n data-command-item\n data-highlighted={isHighlighted}\n className={[\n 'px-3 py-2 cursor-pointer flex items-center gap-3',\n isHighlighted && 'bg-primary text-primary-content',\n !isHighlighted && 'hover:bg-base-200',\n disabled && 'opacity-50 cursor-not-allowed',\n ]\n .filter(Boolean)\n .join(' ')}\n onClick={handleClick}\n onMouseEnter={() => !disabled && setHighlightedIndex(itemIndex)}\n >\n {icon && <span className=\"w-5 h-5\">{icon}</span>}\n <span>{children}</span>\n </div>\n )\n}\n\n// Command.Empty\ninterface CommandEmptyProps {\n children?: React.ReactNode\n}\n\nfunction CommandEmpty({ children = 'No results found.' }: CommandEmptyProps) {\n const { filteredItems, searchValue } = useCommandContext()\n\n if (filteredItems.length > 0 || !searchValue) {\n return null\n }\n\n return <div className=\"px-3 py-8 text-center text-base-content/60\">{children}</div>\n}\n\n// Command.Page - for nested navigation\ninterface CommandPageProps {\n id: string\n children: React.ReactNode\n}\n\nfunction CommandPage({ id, children }: CommandPageProps) {\n const { currentPage } = useCommandContext()\n\n if (currentPage !== id) {\n return null\n }\n\n return <>{children}</>\n}\n\n// Command.Separator\nfunction CommandSeparator() {\n return <div className=\"my-2 border-t border-base-content/10\" role=\"separator\" />\n}\n\n// Export compound component\nexport const Command = Object.assign(CommandRoot, {\n Input: CommandInput,\n List: CommandList,\n Group: CommandGroup,\n Item: CommandItem,\n Empty: CommandEmpty,\n Page: CommandPage,\n Separator: CommandSeparator,\n})\n\nexport default Command\n"],"names":["CommandContext","createContext","useCommandContext","context","useContext","defaultFilter","value","search","keywords","searchLower","k","CommandRoot","forwardRef","children","controlledOpen","onOpenChange","defaultOpen","items","filter","loop","shortcut","placeholder","emptyMessage","className","rest","ref","dialogRef","useRef","inputRef","listRef","previousActiveElement","baseId","useId","internalOpen","setInternalOpen","useState","isControlled","isOpen","setIsOpen","useCallback","newOpen","searchValue","setSearchValue","highlightedIndex","setHighlightedIndex","registeredItems","setRegisteredItems","pageStack","setPageStack","currentPage","setPage","pageId","prev","goBack","registerItem","id","disabled","onSelect","next","unregisterItem","filteredItems","useMemo","item","label","enabledItems","selectItem","i","reg","useEffect","dialog","onDialogClose","handleGlobalKeyDown","e","key","handleKeyDown","handleBackdropClick","contextValue","renderDataDrivenItems","groups","ungrouped","fi","group","globalIndex","jsxs","Fragment","groupName","groupItems","jsx","itemIndex","isHighlighted","node","CommandInput","onValueChange","newValue","CommandList","filteredChildren","React","child","CommandPage","CommandGroup","heading","hasVisibleChildren","childProps","childValue","CommandItem","icon","itemId","itemValue","onSelectRef","handleClick","CommandEmpty","CommandSeparator","Command"],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -36,6 +36,8 @@ export type { Locale } from './locale';
36
36
  export { enUS, enGB, enCA, zhCN, esES, jaJP, ptBR, deDE, frFR, koKR } from './locale';
37
37
  export { Collapse } from './components/Collapse';
38
38
  export type { CollapseProps, CollapseItemType, CollapseSize, CollapseIconPosition, CollapseCollapsible } from './components/Collapse';
39
+ export { Command } from './components/Command';
40
+ export type { CommandProps, CommandItemConfig } from './components/Command';
39
41
  export { Container } from './components/Container';
40
42
  export type { ContainerProps } from './components/Container';
41
43
  export { ContextMenu } from './components/ContextMenu';
package/dist/index.js CHANGED
@@ -16,104 +16,105 @@ import { Carousel as M } from "./components/Carousel.js";
16
16
  import { Cascader as I } from "./components/Cascader.js";
17
17
  import { ConfigContext as G, ConfigProvider as H, useComponentLocale as K, useConfig as z, useLocale as E } from "./components/ConfigProvider.js";
18
18
  import { Collapse as W } from "./components/Collapse.js";
19
- import { Container as O } from "./components/Container.js";
20
- import { ContextMenu as j } from "./components/ContextMenu.js";
21
- import { Countdown as Q } from "./components/Countdown.js";
22
- import { DatePicker as X } from "./components/DatePicker.js";
23
- import { Descriptions as Z } from "./components/Descriptions.js";
24
- import { Diff as $ } from "./components/Diff.js";
25
- import { Dock as ro } from "./components/Dock.js";
26
- import { Divider as to } from "./components/Divider.js";
27
- import { Drawer as fo } from "./components/Drawer.js";
28
- import { ResponsiveDrawer as xo } from "./components/ResponsiveDrawer.js";
29
- import { Fieldset as so } from "./components/Fieldset.js";
30
- import { FileInput as io } from "./components/FileInput.js";
31
- import { Filter as lo } from "./components/Filter.js";
32
- import { Flex as co } from "./components/Flex.js";
33
- import { FloatButton as To } from "./components/FloatButton.js";
34
- import { Footer as Po } from "./components/Footer.js";
35
- import { Form as Ro, useFormInstance as bo } from "./components/Form.js";
36
- import { Col as Do, Grid as ho, Row as wo } from "./components/Grid.js";
37
- import { Hero as Bo } from "./components/Hero.js";
38
- import { HoverGallery as Mo } from "./components/HoverGallery.js";
39
- import { Image as Io } from "./components/Image.js";
40
- import { Dropdown as Go } from "./components/Dropdown.js";
41
- import { Empty as Ko } from "./components/Empty.js";
42
- import { Input as Eo } from "./components/Input.js";
43
- import { InputNumber as Wo } from "./components/InputNumber.js";
44
- import { Join as Oo } from "./components/Join.js";
45
- import { Kbd as jo } from "./components/Kbd.js";
46
- import { Layout as Qo, useSiderContext as Vo } from "./components/Layout.js";
47
- import { List as Yo } from "./components/List.js";
48
- import { Loading as _o } from "./components/Loading.js";
49
- import { Mask as or } from "./components/Mask.js";
50
- import { Masonry as er } from "./components/Masonry.js";
51
- import { Mention as pr } from "./components/Mention.js";
52
- import { Menu as mr } from "./components/Menu.js";
53
- import { Browser as ar } from "./components/Browser.js";
54
- import { Code as nr } from "./components/Code.js";
55
- import { Phone as ur } from "./components/Phone.js";
56
- import { Window as dr } from "./components/Window.js";
57
- import { Modal as cr } from "./components/Modal.js";
58
- import { Navbar as Tr } from "./components/Navbar.js";
59
- import { notification as Pr } from "./components/Notification.js";
60
- import { MessageManager as Rr, message as br } from "./components/Message.js";
61
- import { OTPInput as Dr } from "./components/OTPInput.js";
62
- import { Pagination as wr } from "./components/Pagination.js";
63
- import { Popconfirm as Br } from "./components/Popconfirm.js";
64
- import { Popover as Mr } from "./components/Popover.js";
65
- import { Progress as Ir } from "./components/Progress.js";
66
- import { Radio as Gr } from "./components/Radio.js";
67
- import { RadialProgress as Kr } from "./components/RadialProgress.js";
68
- import { Range as Er } from "./components/Range.js";
69
- import { Rating as Wr } from "./components/Rating.js";
70
- import { Result as Or } from "./components/Result.js";
71
- import { Select as jr } from "./components/Select.js";
72
- import { Segmented as Qr } from "./components/Segmented.js";
73
- import { Skeleton as Xr } from "./components/Skeleton.js";
74
- import { Space as Zr } from "./components/Space.js";
75
- import { Splitter as $r } from "./components/Splitter.js";
76
- import { Stats as re } from "./components/Stat.js";
77
- import { Status as te } from "./components/Status.js";
78
- import { Steps as fe } from "./components/Steps.js";
79
- import { Table as xe } from "./components/Table.js";
80
- import { Tabs as se } from "./components/Tabs.js";
81
- import { Textarea as ie } from "./components/Textarea.js";
82
- import { TextRotate as le } from "./components/TextRotate.js";
83
- import { CheckableTag as Ce, Tag as ce, TagLiveRegion as ge } from "./components/Tag.js";
84
- import { ThemeController as Se } from "./components/ThemeController.js";
85
- import { TimePicker as ke } from "./components/TimePicker.js";
86
- import { Timeline as be } from "./components/Timeline.js";
87
- import { Toggle as De } from "./components/Toggle.js";
88
- import { Tour as we } from "./components/Tour.js";
89
- import { Tooltip as Be } from "./components/Tooltip.js";
90
- import { Transfer as Me } from "./components/Transfer.js";
91
- import { Tree as Ie } from "./components/Tree.js";
92
- import { TreeSelect as Ge, TreeSelectComponent as He } from "./components/TreeSelect.js";
93
- import { Typography as ze } from "./components/Typography.js";
94
- import { Upload as Ne } from "./components/Upload.js";
95
- import { Watermark as Je } from "./components/Watermark.js";
96
- import { Hide as Ue, Show as je } from "./components/Responsive.js";
97
- import { useBreakpoint as Qe } from "./hooks/useBreakpoint.js";
98
- import { useDisclosure as Xe } from "./hooks/useDisclosure.js";
99
- import { useClipboard as Ze } from "./hooks/useClipboard.js";
100
- import { useLocalStorage as $e } from "./hooks/useLocalStorage.js";
101
- import { useDebounce as rt } from "./hooks/useDebounce.js";
102
- import { useClickOutside as tt } from "./hooks/useClickOutside.js";
103
- import { usePrevious as ft } from "./hooks/usePrevious.js";
104
- import { useHover as xt } from "./hooks/useHover.js";
105
- import { useKeyPress as st, useKeyPressCallback as nt } from "./hooks/useKeyPress.js";
106
- import { useWindowSize as ut } from "./hooks/useWindowSize.js";
107
- import { default as dt } from "./locale/en-US.js";
108
- import { default as ct } from "./locale/en-GB.js";
109
- import { default as Tt } from "./locale/en-CA.js";
110
- import { default as Pt } from "./locale/zh-CN.js";
111
- import { default as Rt } from "./locale/es-ES.js";
112
- import { default as vt } from "./locale/ja-JP.js";
113
- import { default as ht } from "./locale/pt-BR.js";
114
- import { default as yt } from "./locale/de-DE.js";
115
- import { default as Ft } from "./locale/fr-FR.js";
116
- import { default as At } from "./locale/ko-KR.js";
19
+ import { Command as O } from "./components/Command.js";
20
+ import { Container as j } from "./components/Container.js";
21
+ import { ContextMenu as Q } from "./components/ContextMenu.js";
22
+ import { Countdown as X } from "./components/Countdown.js";
23
+ import { DatePicker as Z } from "./components/DatePicker.js";
24
+ import { Descriptions as $ } from "./components/Descriptions.js";
25
+ import { Diff as ro } from "./components/Diff.js";
26
+ import { Dock as to } from "./components/Dock.js";
27
+ import { Divider as fo } from "./components/Divider.js";
28
+ import { Drawer as xo } from "./components/Drawer.js";
29
+ import { ResponsiveDrawer as so } from "./components/ResponsiveDrawer.js";
30
+ import { Fieldset as io } from "./components/Fieldset.js";
31
+ import { FileInput as lo } from "./components/FileInput.js";
32
+ import { Filter as co } from "./components/Filter.js";
33
+ import { Flex as To } from "./components/Flex.js";
34
+ import { FloatButton as Po } from "./components/FloatButton.js";
35
+ import { Footer as Ro } from "./components/Footer.js";
36
+ import { Form as vo, useFormInstance as Do } from "./components/Form.js";
37
+ import { Col as wo, Grid as yo, Row as Bo } from "./components/Grid.js";
38
+ import { Hero as Mo } from "./components/Hero.js";
39
+ import { HoverGallery as Io } from "./components/HoverGallery.js";
40
+ import { Image as Go } from "./components/Image.js";
41
+ import { Dropdown as Ko } from "./components/Dropdown.js";
42
+ import { Empty as Eo } from "./components/Empty.js";
43
+ import { Input as Wo } from "./components/Input.js";
44
+ import { InputNumber as Oo } from "./components/InputNumber.js";
45
+ import { Join as jo } from "./components/Join.js";
46
+ import { Kbd as Qo } from "./components/Kbd.js";
47
+ import { Layout as Xo, useSiderContext as Yo } from "./components/Layout.js";
48
+ import { List as _o } from "./components/List.js";
49
+ import { Loading as or } from "./components/Loading.js";
50
+ import { Mask as er } from "./components/Mask.js";
51
+ import { Masonry as pr } from "./components/Masonry.js";
52
+ import { Mention as mr } from "./components/Mention.js";
53
+ import { Menu as ar } from "./components/Menu.js";
54
+ import { Browser as nr } from "./components/Browser.js";
55
+ import { Code as ur } from "./components/Code.js";
56
+ import { Phone as dr } from "./components/Phone.js";
57
+ import { Window as cr } from "./components/Window.js";
58
+ import { Modal as Tr } from "./components/Modal.js";
59
+ import { Navbar as Pr } from "./components/Navbar.js";
60
+ import { notification as Rr } from "./components/Notification.js";
61
+ import { MessageManager as vr, message as Dr } from "./components/Message.js";
62
+ import { OTPInput as wr } from "./components/OTPInput.js";
63
+ import { Pagination as Br } from "./components/Pagination.js";
64
+ import { Popconfirm as Mr } from "./components/Popconfirm.js";
65
+ import { Popover as Ir } from "./components/Popover.js";
66
+ import { Progress as Gr } from "./components/Progress.js";
67
+ import { Radio as Kr } from "./components/Radio.js";
68
+ import { RadialProgress as Er } from "./components/RadialProgress.js";
69
+ import { Range as Wr } from "./components/Range.js";
70
+ import { Rating as Or } from "./components/Rating.js";
71
+ import { Result as jr } from "./components/Result.js";
72
+ import { Select as Qr } from "./components/Select.js";
73
+ import { Segmented as Xr } from "./components/Segmented.js";
74
+ import { Skeleton as Zr } from "./components/Skeleton.js";
75
+ import { Space as $r } from "./components/Space.js";
76
+ import { Splitter as re } from "./components/Splitter.js";
77
+ import { Stats as te } from "./components/Stat.js";
78
+ import { Status as fe } from "./components/Status.js";
79
+ import { Steps as xe } from "./components/Steps.js";
80
+ import { Table as se } from "./components/Table.js";
81
+ import { Tabs as ie } from "./components/Tabs.js";
82
+ import { Textarea as le } from "./components/Textarea.js";
83
+ import { TextRotate as Ce } from "./components/TextRotate.js";
84
+ import { CheckableTag as ge, Tag as Te, TagLiveRegion as Se } from "./components/Tag.js";
85
+ import { ThemeController as ke } from "./components/ThemeController.js";
86
+ import { TimePicker as be } from "./components/TimePicker.js";
87
+ import { Timeline as De } from "./components/Timeline.js";
88
+ import { Toggle as we } from "./components/Toggle.js";
89
+ import { Tour as Be } from "./components/Tour.js";
90
+ import { Tooltip as Me } from "./components/Tooltip.js";
91
+ import { Transfer as Ie } from "./components/Transfer.js";
92
+ import { Tree as Ge } from "./components/Tree.js";
93
+ import { TreeSelect as Ke, TreeSelectComponent as ze } from "./components/TreeSelect.js";
94
+ import { Typography as Ne } from "./components/Typography.js";
95
+ import { Upload as Je } from "./components/Upload.js";
96
+ import { Watermark as Ue } from "./components/Watermark.js";
97
+ import { Hide as qe, Show as Qe } from "./components/Responsive.js";
98
+ import { useBreakpoint as Xe } from "./hooks/useBreakpoint.js";
99
+ import { useDisclosure as Ze } from "./hooks/useDisclosure.js";
100
+ import { useClipboard as $e } from "./hooks/useClipboard.js";
101
+ import { useLocalStorage as rt } from "./hooks/useLocalStorage.js";
102
+ import { useDebounce as tt } from "./hooks/useDebounce.js";
103
+ import { useClickOutside as ft } from "./hooks/useClickOutside.js";
104
+ import { usePrevious as xt } from "./hooks/usePrevious.js";
105
+ import { useHover as st } from "./hooks/useHover.js";
106
+ import { useKeyPress as it, useKeyPressCallback as ut } from "./hooks/useKeyPress.js";
107
+ import { useWindowSize as dt } from "./hooks/useWindowSize.js";
108
+ import { default as ct } from "./locale/en-US.js";
109
+ import { default as Tt } from "./locale/en-GB.js";
110
+ import { default as Pt } from "./locale/en-CA.js";
111
+ import { default as Rt } from "./locale/zh-CN.js";
112
+ import { default as vt } from "./locale/es-ES.js";
113
+ import { default as ht } from "./locale/ja-JP.js";
114
+ import { default as yt } from "./locale/pt-BR.js";
115
+ import { default as Ft } from "./locale/de-DE.js";
116
+ import { default as At } from "./locale/fr-FR.js";
117
+ import { default as Lt } from "./locale/ko-KR.js";
117
118
  export {
118
119
  e as Affix,
119
120
  m as Alert,
@@ -123,128 +124,129 @@ export {
123
124
  i as AvatarGroup,
124
125
  l as Badge,
125
126
  C as Breadcrumb,
126
- ar as Browser,
127
+ nr as Browser,
127
128
  g as Button,
128
129
  B as Card,
129
130
  M as Carousel,
130
131
  I as Cascader,
131
132
  D as Chat,
132
- Ce as CheckableTag,
133
+ ge as CheckableTag,
133
134
  b as Checkbox,
134
- nr as Code,
135
- Do as Col,
135
+ ur as Code,
136
+ wo as Col,
136
137
  W as Collapse,
137
138
  w as ColorPicker,
139
+ O as Command,
138
140
  G as ConfigContext,
139
141
  H as ConfigProvider,
140
- O as Container,
141
- j as ContextMenu,
142
+ j as Container,
143
+ Q as ContextMenu,
142
144
  k as CopyButton,
143
- Q as Countdown,
144
- X as DatePicker,
145
- Z as Descriptions,
146
- $ as Diff,
147
- to as Divider,
148
- ro as Dock,
149
- fo as Drawer,
150
- Go as Dropdown,
151
- Ko as Empty,
152
- so as Fieldset,
153
- io as FileInput,
154
- lo as Filter,
155
- co as Flex,
156
- To as FloatButton,
157
- Po as Footer,
158
- Ro as Form,
159
- ho as Grid,
160
- Bo as Hero,
161
- Ue as Hide,
162
- Mo as HoverGallery,
145
+ X as Countdown,
146
+ Z as DatePicker,
147
+ $ as Descriptions,
148
+ ro as Diff,
149
+ fo as Divider,
150
+ to as Dock,
151
+ xo as Drawer,
152
+ Ko as Dropdown,
153
+ Eo as Empty,
154
+ io as Fieldset,
155
+ lo as FileInput,
156
+ co as Filter,
157
+ To as Flex,
158
+ Po as FloatButton,
159
+ Ro as Footer,
160
+ vo as Form,
161
+ yo as Grid,
162
+ Mo as Hero,
163
+ qe as Hide,
164
+ Io as HoverGallery,
163
165
  S as IconSizeContext,
164
- Io as Image,
165
- Eo as Input,
166
- Wo as InputNumber,
167
- Oo as Join,
168
- jo as Kbd,
169
- Qo as Layout,
170
- Yo as List,
171
- _o as Loading,
172
- or as Mask,
173
- er as Masonry,
174
- pr as Mention,
175
- mr as Menu,
176
- Rr as MessageManager,
177
- cr as Modal,
178
- Tr as Navbar,
179
- Dr as OTPInput,
180
- wr as Pagination,
181
- ur as Phone,
182
- Br as Popconfirm,
183
- Mr as Popover,
184
- Ir as Progress,
185
- Kr as RadialProgress,
186
- Gr as Radio,
187
- Er as Range,
188
- Wr as Rating,
189
- xo as ResponsiveDrawer,
190
- Or as Result,
191
- wo as Row,
192
- Qr as Segmented,
193
- jr as Select,
194
- je as Show,
195
- Xr as Skeleton,
196
- Zr as Space,
197
- $r as Splitter,
198
- re as Stats,
199
- te as Status,
200
- fe as Steps,
201
- xe as Table,
202
- se as Tabs,
203
- ce as Tag,
204
- ge as TagLiveRegion,
205
- le as TextRotate,
206
- ie as Textarea,
207
- Se as ThemeController,
208
- ke as TimePicker,
209
- be as Timeline,
210
- De as Toggle,
211
- Be as Tooltip,
212
- we as Tour,
213
- Me as Transfer,
214
- Ie as Tree,
215
- Ge as TreeSelect,
216
- He as TreeSelectComponent,
217
- ze as Typography,
218
- Ne as Upload,
219
- Je as Watermark,
220
- dr as Window,
221
- yt as deDE,
222
- Tt as enCA,
223
- ct as enGB,
224
- dt as enUS,
225
- Rt as esES,
226
- Ft as frFR,
227
- vt as jaJP,
228
- At as koKR,
229
- br as message,
230
- Pr as notification,
231
- ht as ptBR,
232
- Qe as useBreakpoint,
233
- tt as useClickOutside,
234
- Ze as useClipboard,
166
+ Go as Image,
167
+ Wo as Input,
168
+ Oo as InputNumber,
169
+ jo as Join,
170
+ Qo as Kbd,
171
+ Xo as Layout,
172
+ _o as List,
173
+ or as Loading,
174
+ er as Mask,
175
+ pr as Masonry,
176
+ mr as Mention,
177
+ ar as Menu,
178
+ vr as MessageManager,
179
+ Tr as Modal,
180
+ Pr as Navbar,
181
+ wr as OTPInput,
182
+ Br as Pagination,
183
+ dr as Phone,
184
+ Mr as Popconfirm,
185
+ Ir as Popover,
186
+ Gr as Progress,
187
+ Er as RadialProgress,
188
+ Kr as Radio,
189
+ Wr as Range,
190
+ Or as Rating,
191
+ so as ResponsiveDrawer,
192
+ jr as Result,
193
+ Bo as Row,
194
+ Xr as Segmented,
195
+ Qr as Select,
196
+ Qe as Show,
197
+ Zr as Skeleton,
198
+ $r as Space,
199
+ re as Splitter,
200
+ te as Stats,
201
+ fe as Status,
202
+ xe as Steps,
203
+ se as Table,
204
+ ie as Tabs,
205
+ Te as Tag,
206
+ Se as TagLiveRegion,
207
+ Ce as TextRotate,
208
+ le as Textarea,
209
+ ke as ThemeController,
210
+ be as TimePicker,
211
+ De as Timeline,
212
+ we as Toggle,
213
+ Me as Tooltip,
214
+ Be as Tour,
215
+ Ie as Transfer,
216
+ Ge as Tree,
217
+ Ke as TreeSelect,
218
+ ze as TreeSelectComponent,
219
+ Ne as Typography,
220
+ Je as Upload,
221
+ Ue as Watermark,
222
+ cr as Window,
223
+ Ft as deDE,
224
+ Pt as enCA,
225
+ Tt as enGB,
226
+ ct as enUS,
227
+ vt as esES,
228
+ At as frFR,
229
+ ht as jaJP,
230
+ Lt as koKR,
231
+ Dr as message,
232
+ Rr as notification,
233
+ yt as ptBR,
234
+ Xe as useBreakpoint,
235
+ ft as useClickOutside,
236
+ $e as useClipboard,
235
237
  K as useComponentLocale,
236
238
  z as useConfig,
237
- rt as useDebounce,
238
- Xe as useDisclosure,
239
- bo as useFormInstance,
240
- xt as useHover,
241
- st as useKeyPress,
242
- nt as useKeyPressCallback,
243
- $e as useLocalStorage,
239
+ tt as useDebounce,
240
+ Ze as useDisclosure,
241
+ Do as useFormInstance,
242
+ st as useHover,
243
+ it as useKeyPress,
244
+ ut as useKeyPressCallback,
245
+ rt as useLocalStorage,
244
246
  E as useLocale,
245
- ft as usePrevious,
246
- Vo as useSiderContext,
247
- ut as useWindowSize,
248
- Pt as zhCN
247
+ xt as usePrevious,
248
+ Yo as useSiderContext,
249
+ dt as useWindowSize,
250
+ Rt as zhCN
249
251
  };
250
252
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "asterui",
3
- "version": "0.12.48",
3
+ "version": "0.12.49",
4
4
  "description": "React UI component library with DaisyUI",
5
5
  "homepage": "https://asterui.com",
6
6
  "repository": {