@godxjp/ui 8.1.0 → 8.3.0

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 (81) hide show
  1. package/dist/{chunk-SKIRU7GC.js → chunk-56NYZNVY.js} +1 -1
  2. package/dist/{chunk-C5H655GK.js → chunk-6PA2YHRE.js} +129 -30
  3. package/dist/{chunk-KKMQLQ7F.js → chunk-6YK3IJXW.js} +128 -4
  4. package/dist/chunk-B73NA66T.js +122 -0
  5. package/dist/{chunk-G2WYOCDL.js → chunk-CAEL2ZD2.js} +1 -1
  6. package/dist/{chunk-XDUZ7JJL.js → chunk-GKXPALFT.js} +1 -1
  7. package/dist/{chunk-N43OKOFT.js → chunk-GLEEJYGQ.js} +1 -1
  8. package/dist/chunk-HCM4JAC2.js +134 -0
  9. package/dist/chunk-HL3G4SVG.js +131 -0
  10. package/dist/{chunk-NG23LVTM.js → chunk-INSF6K3Y.js} +3 -39
  11. package/dist/chunk-JKHWLPM5.js +101 -0
  12. package/dist/chunk-LFW37FGG.js +68 -0
  13. package/dist/chunk-QLMXEJSY.js +114 -0
  14. package/dist/{chunk-SEG2YBXF.js → chunk-QTUJSRDH.js} +9 -1
  15. package/dist/chunk-W4REF4TD.js +42 -0
  16. package/dist/chunk-WGWI7EGL.js +83 -0
  17. package/dist/{chunk-TMDGV4CN.js → chunk-ZRRLOOBX.js} +1 -10
  18. package/dist/{chunk-4R7RQDXI.js → chunk-ZY5NUG4B.js} +2 -7
  19. package/dist/components/admin/index.d.ts +3 -16
  20. package/dist/components/admin/index.js +28 -23
  21. package/dist/components/data-display/card.d.ts +2 -2
  22. package/dist/components/data-display/carousel.d.ts +25 -0
  23. package/dist/components/data-display/carousel.js +2 -0
  24. package/dist/components/data-display/index.d.ts +2 -0
  25. package/dist/components/data-display/index.js +5 -4
  26. package/dist/components/data-entry/autocomplete.js +3 -3
  27. package/dist/components/data-entry/cascader.js +3 -3
  28. package/dist/components/data-entry/combobox.d.ts +22 -0
  29. package/dist/components/data-entry/combobox.js +6 -0
  30. package/dist/components/data-entry/date-picker.js +2 -2
  31. package/dist/components/data-entry/date-range-picker.js +2 -2
  32. package/dist/components/data-entry/index.d.ts +27 -1
  33. package/dist/components/data-entry/index.js +19 -16
  34. package/dist/components/data-entry/select.js +3 -3
  35. package/dist/components/data-entry/time-input.d.ts +12 -0
  36. package/dist/components/data-entry/time-input.js +3 -0
  37. package/dist/components/data-entry/time-picker.js +2 -2
  38. package/dist/components/data-entry/transfer.js +3 -2
  39. package/dist/components/data-entry/tree-select.js +3 -3
  40. package/dist/components/data-entry/upload.js +3 -3
  41. package/dist/components/feedback/alert.js +1 -1
  42. package/dist/components/feedback/index.js +4 -4
  43. package/dist/components/layout/index.d.ts +2 -0
  44. package/dist/components/layout/index.js +3 -2
  45. package/dist/components/layout/resizable.d.ts +18 -0
  46. package/dist/components/layout/resizable.js +2 -0
  47. package/dist/components/navigation/context-menu.d.ts +25 -0
  48. package/dist/components/navigation/context-menu.js +2 -0
  49. package/dist/components/navigation/index.d.ts +8 -1
  50. package/dist/components/navigation/index.js +8 -5
  51. package/dist/components/navigation/menubar.d.ts +29 -0
  52. package/dist/components/navigation/menubar.js +2 -0
  53. package/dist/components/navigation/navigation-menu.d.ts +13 -0
  54. package/dist/components/navigation/navigation-menu.js +2 -0
  55. package/dist/components/navigation/pagination.js +4 -4
  56. package/dist/components/query/index.js +2 -2
  57. package/dist/components/ui/index.d.ts +13 -0
  58. package/dist/components/ui/index.js +27 -20
  59. package/dist/{filter-bar-DvVXm_d1.d.ts → filter-bar-WjnQOs2C.d.ts} +1 -1
  60. package/dist/index.d.ts +3 -2
  61. package/dist/index.js +38 -31
  62. package/dist/lib/hooks.d.ts +17 -0
  63. package/dist/lib/hooks.js +1 -0
  64. package/dist/props/index.js +1 -1
  65. package/dist/props/registry.js +1 -1
  66. package/dist/styles/control.css +27 -0
  67. package/dist/styles/data-display-layout.css +55 -0
  68. package/dist/styles/data-entry-layout.css +93 -0
  69. package/dist/styles/index.css +2 -0
  70. package/dist/styles/layout.css +35 -3
  71. package/dist/styles/navigation-layout.css +271 -0
  72. package/package.json +38 -1
  73. package/dist/{chunk-A22MCA3X.js → chunk-6J7GRCDA.js} +2 -2
  74. package/dist/{chunk-RGPF3HU6.js → chunk-6YBYAEXD.js} +1 -1
  75. package/dist/{chunk-WTVLZVBA.js → chunk-CLU46QR2.js} +1 -1
  76. package/dist/{chunk-XZM2GNAY.js → chunk-HB2OHB5X.js} +2 -2
  77. package/dist/{chunk-A7PKMT7Y.js → chunk-JBHXILI4.js} +1 -1
  78. package/dist/{chunk-6QXQQAOQ.js → chunk-KDBGFJJI.js} +1 -1
  79. package/dist/{chunk-RGIYKJPW.js → chunk-LJLGABFV.js} +1 -1
  80. package/dist/{chunk-WN52SCGE.js → chunk-N3JPLJ3B.js} +1 -1
  81. package/dist/{chunk-SMWKD2HG.js → chunk-PIQXAOWS.js} +2 -2
@@ -1,4 +1,4 @@
1
- import { Select, SelectTrigger, SelectValue, SelectContent, SelectItem } from './chunk-G2WYOCDL.js';
1
+ import { Select, SelectTrigger, SelectValue, SelectContent, SelectItem } from './chunk-CAEL2ZD2.js';
2
2
  import { Button } from './chunk-M4PZNAMV.js';
3
3
  import { useTranslation } from './chunk-RLGHEV4A.js';
4
4
  import { cn } from './chunk-U7N2A7A3.js';
@@ -319,10 +319,26 @@ var VOCABULARY_REGISTRY = {
319
319
  };
320
320
  var COMPONENT_PROP_REGISTRY = {
321
321
  AppProviderProp: { group: "app", file: "components/app.prop.ts", vocabulary: ["ChildrenProp"] },
322
- LocalePickerProp: { group: "app", file: "components/app.prop.ts", vocabulary: ["ValueProp", "OnValueChangeProp", "DisabledProp", "IdProp", "ClassNameProp"] },
323
- TimezonePickerProp: { group: "app", file: "components/app.prop.ts", vocabulary: ["ValueProp", "OnValueChangeProp", "DisabledProp", "IdProp", "ClassNameProp"] },
324
- TimeFormatPickerProp: { group: "app", file: "components/app.prop.ts", vocabulary: ["ValueProp", "OnValueChangeProp", "DisabledProp", "IdProp", "ClassNameProp"] },
325
- DateFormatPickerProp: { group: "app", file: "components/app.prop.ts", vocabulary: ["ValueProp", "OnValueChangeProp", "DisabledProp", "IdProp", "ClassNameProp"] },
322
+ LocalePickerProp: {
323
+ group: "app",
324
+ file: "components/app.prop.ts",
325
+ vocabulary: ["ValueProp", "OnValueChangeProp", "DisabledProp", "IdProp", "ClassNameProp"]
326
+ },
327
+ TimezonePickerProp: {
328
+ group: "app",
329
+ file: "components/app.prop.ts",
330
+ vocabulary: ["ValueProp", "OnValueChangeProp", "DisabledProp", "IdProp", "ClassNameProp"]
331
+ },
332
+ TimeFormatPickerProp: {
333
+ group: "app",
334
+ file: "components/app.prop.ts",
335
+ vocabulary: ["ValueProp", "OnValueChangeProp", "DisabledProp", "IdProp", "ClassNameProp"]
336
+ },
337
+ DateFormatPickerProp: {
338
+ group: "app",
339
+ file: "components/app.prop.ts",
340
+ vocabulary: ["ValueProp", "OnValueChangeProp", "DisabledProp", "IdProp", "ClassNameProp"]
341
+ },
326
342
  PageContainerProp: {
327
343
  group: "layout",
328
344
  file: "components/layout.prop.ts",
@@ -363,13 +379,41 @@ var COMPONENT_PROP_REGISTRY = {
363
379
  file: "components/layout.prop.ts",
364
380
  vocabulary: ["ChildrenProp"]
365
381
  },
366
- SidebarProductProp: { group: "layout", file: "components/layout.prop.ts", vocabulary: ["LabelProp"] },
367
- SidebarItemProp: { group: "layout", file: "components/layout.prop.ts", vocabulary: ["IdProp", "LabelProp", "DisabledProp", "ChildrenProp"] },
368
- SidebarSectionProp: { group: "layout", file: "components/layout.prop.ts", vocabulary: ["LabelProp"] },
369
- SidebarProp: { group: "layout", file: "components/layout.prop.ts", vocabulary: ["IdProp", "OnValueChangeProp", "ChildrenProp"] },
370
- TopbarProductProp: { group: "layout", file: "components/layout.prop.ts", vocabulary: ["LabelProp"] },
371
- TopbarProjectProp: { group: "layout", file: "components/layout.prop.ts", vocabulary: ["LabelProp"] },
372
- TopbarProp: { group: "layout", file: "components/layout.prop.ts", vocabulary: ["ChildrenProp", "OnOpenChangeProp", "OnValueChangeProp"] },
382
+ SidebarProductProp: {
383
+ group: "layout",
384
+ file: "components/layout.prop.ts",
385
+ vocabulary: ["LabelProp"]
386
+ },
387
+ SidebarItemProp: {
388
+ group: "layout",
389
+ file: "components/layout.prop.ts",
390
+ vocabulary: ["IdProp", "LabelProp", "DisabledProp", "ChildrenProp"]
391
+ },
392
+ SidebarSectionProp: {
393
+ group: "layout",
394
+ file: "components/layout.prop.ts",
395
+ vocabulary: ["LabelProp"]
396
+ },
397
+ SidebarProp: {
398
+ group: "layout",
399
+ file: "components/layout.prop.ts",
400
+ vocabulary: ["IdProp", "OnValueChangeProp", "ChildrenProp"]
401
+ },
402
+ TopbarProductProp: {
403
+ group: "layout",
404
+ file: "components/layout.prop.ts",
405
+ vocabulary: ["LabelProp"]
406
+ },
407
+ TopbarProjectProp: {
408
+ group: "layout",
409
+ file: "components/layout.prop.ts",
410
+ vocabulary: ["LabelProp"]
411
+ },
412
+ TopbarProp: {
413
+ group: "layout",
414
+ file: "components/layout.prop.ts",
415
+ vocabulary: ["ChildrenProp", "OnOpenChangeProp", "OnValueChangeProp"]
416
+ },
373
417
  PageHeaderProp: {
374
418
  group: "layout",
375
419
  file: "components/layout.prop.ts",
@@ -379,13 +423,7 @@ var COMPONENT_PROP_REGISTRY = {
379
423
  ButtonProp: {
380
424
  group: "general",
381
425
  file: "components/general.prop.ts",
382
- vocabulary: [
383
- "ButtonVariantProp",
384
- "SizeProp",
385
- "AsChildProp",
386
- "DisabledProp",
387
- "OnClickProp"
388
- ]
426
+ vocabulary: ["ButtonVariantProp", "SizeProp", "AsChildProp", "DisabledProp", "OnClickProp"]
389
427
  },
390
428
  InputProp: {
391
429
  group: "data-entry",
@@ -417,7 +455,11 @@ var COMPONENT_PROP_REGISTRY = {
417
455
  file: "components/data-entry.prop.ts",
418
456
  vocabulary: ["ValueProp", "DefaultValueProp", "OnValueChangeProp", "DisabledProp"]
419
457
  },
420
- ChoiceOptionProp: { group: "data-entry", file: "components/data-entry.prop.ts", vocabulary: ["LabelProp", "ValueProp", "DisabledProp", "DescriptionProp"] },
458
+ ChoiceOptionProp: {
459
+ group: "data-entry",
460
+ file: "components/data-entry.prop.ts",
461
+ vocabulary: ["LabelProp", "ValueProp", "DisabledProp", "DescriptionProp"]
462
+ },
421
463
  RadioProp: {
422
464
  group: "data-entry",
423
465
  file: "components/data-entry.prop.ts",
@@ -551,7 +593,13 @@ var COMPONENT_PROP_REGISTRY = {
551
593
  UploadProp: {
552
594
  group: "data-entry",
553
595
  file: "components/data-entry.prop.ts",
554
- vocabulary: ["ValueProp", "DefaultValueProp", "OnValueChangeProp", "DisabledProp", "ClassNameProp"]
596
+ vocabulary: [
597
+ "ValueProp",
598
+ "DefaultValueProp",
599
+ "OnValueChangeProp",
600
+ "DisabledProp",
601
+ "ClassNameProp"
602
+ ]
555
603
  },
556
604
  UploadFileItemProp: {
557
605
  group: "data-entry",
@@ -572,12 +620,28 @@ var COMPONENT_PROP_REGISTRY = {
572
620
  CascaderProp: {
573
621
  group: "data-entry",
574
622
  file: "components/data-entry.prop.ts",
575
- vocabulary: ["ValueProp", "DefaultValueProp", "OnValueChangeProp", "PlaceholderProp", "DisabledProp", "ClassNameProp", "IdProp"]
623
+ vocabulary: [
624
+ "ValueProp",
625
+ "DefaultValueProp",
626
+ "OnValueChangeProp",
627
+ "PlaceholderProp",
628
+ "DisabledProp",
629
+ "ClassNameProp",
630
+ "IdProp"
631
+ ]
576
632
  },
577
633
  TreeSelectProp: {
578
634
  group: "data-entry",
579
635
  file: "components/data-entry.prop.ts",
580
- vocabulary: ["ValueProp", "DefaultValueProp", "OnValueChangeProp", "PlaceholderProp", "DisabledProp", "ClassNameProp", "IdProp"]
636
+ vocabulary: [
637
+ "ValueProp",
638
+ "DefaultValueProp",
639
+ "OnValueChangeProp",
640
+ "PlaceholderProp",
641
+ "DisabledProp",
642
+ "ClassNameProp",
643
+ "IdProp"
644
+ ]
581
645
  },
582
646
  ShowCheckedStrategyProp: {
583
647
  group: "data-entry",
@@ -645,9 +709,17 @@ var COMPONENT_PROP_REGISTRY = {
645
709
  "ConfirmLabelProp",
646
710
  "CancelLabelProp",
647
711
  "ConfirmVariantProp",
648
- { field: "confirmPhrase", local: true, reason: "Destructive-dialog type-to-confirm friction phrase." },
712
+ {
713
+ field: "confirmPhrase",
714
+ local: true,
715
+ reason: "Destructive-dialog type-to-confirm friction phrase."
716
+ },
649
717
  "HandlerProp",
650
- { field: "keepOpenOnConfirm", local: true, reason: "AlertDialog-specific async completion behavior." },
718
+ {
719
+ field: "keepOpenOnConfirm",
720
+ local: true,
721
+ reason: "AlertDialog-specific async completion behavior."
722
+ },
651
723
  "PendingProp"
652
724
  ]
653
725
  },
@@ -656,10 +728,18 @@ var COMPONENT_PROP_REGISTRY = {
656
728
  group: "query",
657
729
  file: "components/query.prop.ts",
658
730
  vocabulary: [
659
- { field: "mutation", local: true, reason: "TanStack mutation lifecycle object consumed by this helper." },
731
+ {
732
+ field: "mutation",
733
+ local: true,
734
+ reason: "TanStack mutation lifecycle object consumed by this helper."
735
+ },
660
736
  "HandlerProp",
661
737
  { field: "showRetry", local: true, reason: "Query helper retry affordance toggle." },
662
- { field: "pending", local: true, reason: "Inline pending ReactNode slot, not boolean PendingProp state." },
738
+ {
739
+ field: "pending",
740
+ local: true,
741
+ reason: "Inline pending ReactNode slot, not boolean PendingProp state."
742
+ },
663
743
  "ClassNameProp"
664
744
  ]
665
745
  },
@@ -672,7 +752,11 @@ var COMPONENT_PROP_REGISTRY = {
672
752
  group: "query",
673
753
  file: "components/query.prop.ts",
674
754
  vocabulary: [
675
- { field: "query", local: true, reason: "TanStack query refetch handle consumed by this helper." },
755
+ {
756
+ field: "query",
757
+ local: true,
758
+ reason: "TanStack query refetch handle consumed by this helper."
759
+ },
676
760
  "LabelProp"
677
761
  ]
678
762
  },
@@ -695,7 +779,14 @@ var COMPONENT_PROP_REGISTRY = {
695
779
  AlertProp: {
696
780
  group: "feedback",
697
781
  file: "components/feedback.prop.ts",
698
- vocabulary: ["AlertVariantProp", "ToneProp", "IconProp", "OnValueChangeProp", "ClassNameProp", "ChildrenProp"]
782
+ vocabulary: [
783
+ "AlertVariantProp",
784
+ "ToneProp",
785
+ "IconProp",
786
+ "OnValueChangeProp",
787
+ "ClassNameProp",
788
+ "ChildrenProp"
789
+ ]
699
790
  },
700
791
  AlertTitleProp: {
701
792
  group: "feedback",
@@ -748,14 +839,22 @@ var COMPONENT_PROP_REGISTRY = {
748
839
  file: "components/navigation.prop.ts",
749
840
  vocabulary: ["SizeProp", "OnValueChangeProp", "ClassNameProp"]
750
841
  },
751
- StepItemProp: { group: "navigation", file: "components/navigation.prop.ts", vocabulary: ["TitleProp", "DescriptionProp", "IconProp", "DisabledProp"] },
842
+ StepItemProp: {
843
+ group: "navigation",
844
+ file: "components/navigation.prop.ts",
845
+ vocabulary: ["TitleProp", "DescriptionProp", "IconProp", "DisabledProp"]
846
+ },
752
847
  StepStatusProp: { group: "navigation", file: "components/navigation.prop.ts", vocabulary: [] },
753
848
  TabsProp: {
754
849
  group: "navigation",
755
850
  file: "components/navigation.prop.ts",
756
851
  vocabulary: ["ValueProp", "DefaultValueProp", "OnValueChangeProp", "ClassNameProp"]
757
852
  },
758
- TabItemProp: { group: "navigation", file: "components/navigation.prop.ts", vocabulary: ["ValueProp", "LabelProp", "ChildrenProp", "DisabledProp"] },
853
+ TabItemProp: {
854
+ group: "navigation",
855
+ file: "components/navigation.prop.ts",
856
+ vocabulary: ["ValueProp", "LabelProp", "ChildrenProp", "DisabledProp"]
857
+ },
759
858
  FormRootProp: {
760
859
  group: "form",
761
860
  file: "components/form.prop.ts",
@@ -1,10 +1,10 @@
1
- import { Select, SelectTrigger, SelectValue, SelectContent, SelectGroup, SelectItem } from './chunk-G2WYOCDL.js';
2
- import { Inline } from './chunk-TILFZBTE.js';
1
+ import { Select, SelectTrigger, SelectValue, SelectContent, SelectGroup, SelectItem } from './chunk-CAEL2ZD2.js';
3
2
  import { Input } from './chunk-VOHTRR5X.js';
3
+ import { Inline } from './chunk-TILFZBTE.js';
4
4
  import { cn } from './chunk-U7N2A7A3.js';
5
5
  import { jsxs, jsx } from 'react/jsx-runtime';
6
6
  import * as React2 from 'react';
7
- import { EyeOff, Eye, Minus } from 'lucide-react';
7
+ import { EyeOff, Eye, Minus, Star, X } from 'lucide-react';
8
8
  import { OTPInput, OTPInputContext } from 'input-otp';
9
9
 
10
10
  function CountryOptionLabel({
@@ -133,5 +133,129 @@ var InputOTPSlot = React2.forwardRef(({ index, className, ...props }, ref) => {
133
133
  InputOTPSlot.displayName = "InputOTPSlot";
134
134
  var InputOTPSeparator = React2.forwardRef(({ ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, "data-slot": "input-otp-separator", role: "separator", ...props, children: /* @__PURE__ */ jsx(Minus, { className: "ui-otp-separator-icon", "aria-hidden": "true" }) }));
135
135
  InputOTPSeparator.displayName = "InputOTPSeparator";
136
+ var Rating = React2.forwardRef(
137
+ ({
138
+ value,
139
+ defaultValue = 0,
140
+ onValueChange,
141
+ max = 5,
142
+ readOnly,
143
+ disabled,
144
+ name,
145
+ className,
146
+ ...rest
147
+ }, ref) => {
148
+ const [internal, setInternal] = React2.useState(defaultValue);
149
+ const current = value ?? internal;
150
+ const [hover, setHover] = React2.useState(null);
151
+ const display = hover ?? current;
152
+ const interactive = !readOnly && !disabled;
153
+ const select = (next) => {
154
+ if (!interactive) return;
155
+ if (value === void 0) setInternal(next);
156
+ onValueChange?.(next);
157
+ };
158
+ return /* @__PURE__ */ jsxs(
159
+ "div",
160
+ {
161
+ ref,
162
+ role: "radiogroup",
163
+ "data-slot": "rating",
164
+ className: cn("ui-rating", className),
165
+ "aria-label": rest["aria-label"] ?? "\u8A55\u4FA1",
166
+ children: [
167
+ Array.from({ length: max }, (_, i) => i + 1).map((star) => /* @__PURE__ */ jsx(
168
+ "button",
169
+ {
170
+ type: "button",
171
+ role: "radio",
172
+ "aria-checked": current === star,
173
+ "aria-label": String(star),
174
+ disabled: disabled || readOnly,
175
+ tabIndex: interactive ? 0 : -1,
176
+ className: cn("ui-rating-star", star <= display && "ui-rating-star-filled"),
177
+ onMouseEnter: () => interactive && setHover(star),
178
+ onMouseLeave: () => setHover(null),
179
+ onClick: () => select(star),
180
+ children: /* @__PURE__ */ jsx(Star, { "aria-hidden": "true" })
181
+ },
182
+ star
183
+ )),
184
+ name ? /* @__PURE__ */ jsx("input", { type: "hidden", name, value: current }) : null
185
+ ]
186
+ }
187
+ );
188
+ }
189
+ );
190
+ Rating.displayName = "Rating";
191
+ var TagInput = React2.forwardRef(
192
+ ({ value, defaultValue = [], onValueChange, placeholder, disabled, name, className }, ref) => {
193
+ const [internal, setInternal] = React2.useState(defaultValue);
194
+ const tags = value ?? internal;
195
+ const [draft, setDraft] = React2.useState("");
196
+ const commit = (next) => {
197
+ if (value === void 0) setInternal(next);
198
+ onValueChange?.(next);
199
+ };
200
+ const add = (raw) => {
201
+ const tag = raw.trim();
202
+ if (!tag || tags.includes(tag)) return;
203
+ commit([...tags, tag]);
204
+ };
205
+ const removeAt = (i) => commit(tags.filter((_, idx) => idx !== i));
206
+ const onKeyDown = (e) => {
207
+ if (e.key === "Enter" || e.key === ",") {
208
+ e.preventDefault();
209
+ add(draft);
210
+ setDraft("");
211
+ } else if (e.key === "Backspace" && draft === "" && tags.length > 0) {
212
+ removeAt(tags.length - 1);
213
+ }
214
+ };
215
+ return /* @__PURE__ */ jsxs(
216
+ "div",
217
+ {
218
+ "data-slot": "tag-input",
219
+ className: cn("ui-tag-input", disabled && "ui-tag-input-disabled", className),
220
+ children: [
221
+ tags.map((tag, i) => /* @__PURE__ */ jsxs("span", { className: "ui-tag-input-chip", "data-slot": "tag-input-chip", children: [
222
+ tag,
223
+ !disabled ? /* @__PURE__ */ jsx(
224
+ "button",
225
+ {
226
+ type: "button",
227
+ className: "ui-tag-input-remove",
228
+ "aria-label": `${tag} \u3092\u524A\u9664`,
229
+ onClick: () => removeAt(i),
230
+ children: /* @__PURE__ */ jsx(X, { "aria-hidden": "true" })
231
+ }
232
+ ) : null
233
+ ] }, tag)),
234
+ /* @__PURE__ */ jsx(
235
+ "input",
236
+ {
237
+ ref,
238
+ type: "text",
239
+ className: "ui-tag-input-field",
240
+ value: draft,
241
+ placeholder: tags.length === 0 ? placeholder : void 0,
242
+ disabled,
243
+ onChange: (e) => setDraft(e.target.value),
244
+ onKeyDown,
245
+ onBlur: () => {
246
+ if (draft.trim()) {
247
+ add(draft);
248
+ setDraft("");
249
+ }
250
+ }
251
+ }
252
+ ),
253
+ name ? /* @__PURE__ */ jsx("input", { type: "hidden", name, value: tags.join(",") }) : null
254
+ ]
255
+ }
256
+ );
257
+ }
258
+ );
259
+ TagInput.displayName = "TagInput";
136
260
 
137
- export { CountryOptionLabel, CountrySelect, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, PasswordInput };
261
+ export { CountryOptionLabel, CountrySelect, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, PasswordInput, Rating, TagInput };
@@ -0,0 +1,122 @@
1
+ import { cn } from './chunk-U7N2A7A3.js';
2
+ import * as React from 'react';
3
+ import * as MenubarPrimitive from '@radix-ui/react-menubar';
4
+ import { Check, Circle, ChevronRight } from 'lucide-react';
5
+ import { jsx, jsxs } from 'react/jsx-runtime';
6
+
7
+ var Menubar = MenubarPrimitive.Root;
8
+ var MenubarMenu = MenubarPrimitive.Menu;
9
+ function MenubarTrigger(props) {
10
+ return /* @__PURE__ */ jsx(MenubarPrimitive.Trigger, { "data-slot": "menubar-trigger", ...props });
11
+ }
12
+ var MenubarContent = React.forwardRef(({ className, align = "start", sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx(MenubarPrimitive.Portal, { children: /* @__PURE__ */ jsx(
13
+ MenubarPrimitive.Content,
14
+ {
15
+ ref,
16
+ "data-slot": "menubar-content",
17
+ align,
18
+ sideOffset,
19
+ className: cn("ui-menubar-content", className),
20
+ ...props
21
+ }
22
+ ) }));
23
+ MenubarContent.displayName = MenubarPrimitive.Content.displayName;
24
+ var MenubarItem = React.forwardRef(({ className, inset, variant = "default", ...props }, ref) => /* @__PURE__ */ jsx(
25
+ MenubarPrimitive.Item,
26
+ {
27
+ ref,
28
+ "data-slot": "menubar-item",
29
+ "data-inset": inset,
30
+ "data-variant": variant,
31
+ className: cn("ui-menubar-item", className),
32
+ ...props
33
+ }
34
+ ));
35
+ MenubarItem.displayName = MenubarPrimitive.Item.displayName;
36
+ var MenubarCheckboxItem = React.forwardRef(({ className, children, checked, ...props }, ref) => /* @__PURE__ */ jsxs(
37
+ MenubarPrimitive.CheckboxItem,
38
+ {
39
+ ref,
40
+ "data-slot": "menubar-checkbox-item",
41
+ className: cn("ui-menubar-checkbox-item", className),
42
+ checked,
43
+ ...props,
44
+ children: [
45
+ /* @__PURE__ */ jsx("span", { className: "ui-menubar-item-indicator", "aria-hidden": "true", children: /* @__PURE__ */ jsx(MenubarPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx(Check, { className: "ui-menubar-check" }) }) }),
46
+ children
47
+ ]
48
+ }
49
+ ));
50
+ MenubarCheckboxItem.displayName = MenubarPrimitive.CheckboxItem.displayName;
51
+ var MenubarRadioGroup = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
52
+ MenubarPrimitive.RadioGroup,
53
+ {
54
+ ref,
55
+ "data-slot": "menubar-radio-group",
56
+ className: cn("ui-menubar-radio-group", className),
57
+ ...props
58
+ }
59
+ ));
60
+ MenubarRadioGroup.displayName = MenubarPrimitive.RadioGroup.displayName;
61
+ var MenubarRadioItem = React.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
62
+ MenubarPrimitive.RadioItem,
63
+ {
64
+ ref,
65
+ "data-slot": "menubar-radio-item",
66
+ className: cn("ui-menubar-radio-item", className),
67
+ ...props,
68
+ children: [
69
+ /* @__PURE__ */ jsx("span", { className: "ui-menubar-item-indicator", "aria-hidden": "true", children: /* @__PURE__ */ jsx(MenubarPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx(Circle, { className: "ui-menubar-dot" }) }) }),
70
+ children
71
+ ]
72
+ }
73
+ ));
74
+ MenubarRadioItem.displayName = MenubarPrimitive.RadioItem.displayName;
75
+ var MenubarLabel = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
76
+ MenubarPrimitive.Label,
77
+ {
78
+ ref,
79
+ "data-slot": "menubar-label",
80
+ className: cn("ui-menubar-label", className),
81
+ ...props
82
+ }
83
+ ));
84
+ MenubarLabel.displayName = MenubarPrimitive.Label.displayName;
85
+ var MenubarSeparator = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
86
+ MenubarPrimitive.Separator,
87
+ {
88
+ ref,
89
+ "data-slot": "menubar-separator",
90
+ className: cn("ui-menubar-separator", className),
91
+ ...props
92
+ }
93
+ ));
94
+ MenubarSeparator.displayName = MenubarPrimitive.Separator.displayName;
95
+ var MenubarShortcut = ({ className, ...props }) => /* @__PURE__ */ jsx("span", { "data-slot": "menubar-shortcut", className: cn("ui-menubar-shortcut", className), ...props });
96
+ var MenubarSub = MenubarPrimitive.Sub;
97
+ var MenubarSubTrigger = React.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
98
+ MenubarPrimitive.SubTrigger,
99
+ {
100
+ ref,
101
+ "data-slot": "menubar-sub-trigger",
102
+ className: cn("ui-menubar-sub-trigger", className),
103
+ ...props,
104
+ children: [
105
+ children,
106
+ /* @__PURE__ */ jsx(ChevronRight, { className: "ui-menubar-sub-trigger-icon", "aria-hidden": "true" })
107
+ ]
108
+ }
109
+ ));
110
+ MenubarSubTrigger.displayName = MenubarPrimitive.SubTrigger.displayName;
111
+ var MenubarSubContent = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
112
+ MenubarPrimitive.SubContent,
113
+ {
114
+ ref,
115
+ "data-slot": "menubar-sub-content",
116
+ className: cn("ui-menubar-sub-content", className),
117
+ ...props
118
+ }
119
+ ));
120
+ MenubarSubContent.displayName = MenubarPrimitive.SubContent.displayName;
121
+
122
+ export { Menubar, MenubarCheckboxItem, MenubarContent, MenubarItem, MenubarLabel, MenubarMenu, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger };
@@ -1,4 +1,4 @@
1
- import { SearchSelect } from './chunk-6QXQQAOQ.js';
1
+ import { SearchSelect } from './chunk-KDBGFJJI.js';
2
2
  import { controlTriggerClass } from './chunk-IBK5D2Q6.js';
3
3
  import { cn } from './chunk-U7N2A7A3.js';
4
4
  import * as React from 'react';
@@ -1,4 +1,4 @@
1
- import { SearchSelect } from './chunk-6QXQQAOQ.js';
1
+ import { SearchSelect } from './chunk-KDBGFJJI.js';
2
2
  import { jsx } from 'react/jsx-runtime';
3
3
 
4
4
  function Autocomplete({
@@ -1,4 +1,4 @@
1
- import { AlertQueryError } from './chunk-TMDGV4CN.js';
1
+ import { AlertQueryError } from './chunk-ZRRLOOBX.js';
2
2
  import { Button } from './chunk-M4PZNAMV.js';
3
3
  import { useTranslation } from './chunk-RLGHEV4A.js';
4
4
  import * as React from 'react';
@@ -0,0 +1,134 @@
1
+ import { cn } from './chunk-U7N2A7A3.js';
2
+ import * as React from 'react';
3
+ import useEmblaCarousel from 'embla-carousel-react';
4
+ import { ChevronLeft, ChevronRight } from 'lucide-react';
5
+ import { jsx, jsxs } from 'react/jsx-runtime';
6
+
7
+ var CarouselContext = React.createContext(null);
8
+ var useCarousel = () => {
9
+ const context = React.useContext(CarouselContext);
10
+ if (!context) {
11
+ throw new Error("useCarousel must be used within a Carousel component");
12
+ }
13
+ return context;
14
+ };
15
+ var Carousel = React.forwardRef(({ className, opts, plugins, setApi, children, ...props }, ref) => {
16
+ const [emblaRef, api] = useEmblaCarousel(opts, plugins);
17
+ const [canScrollPrev, setCanScrollPrev] = React.useState(false);
18
+ const [canScrollNext, setCanScrollNext] = React.useState(false);
19
+ const onSelect = React.useCallback(() => {
20
+ if (!api) return;
21
+ setCanScrollPrev(api.canScrollPrev());
22
+ setCanScrollNext(api.canScrollNext());
23
+ }, [api]);
24
+ React.useEffect(() => {
25
+ if (!api) return void 0;
26
+ onSelect();
27
+ setApi?.(api);
28
+ api.on("reInit", onSelect);
29
+ api.on("select", onSelect);
30
+ return () => {
31
+ api.off("reInit", onSelect);
32
+ api.off("select", onSelect);
33
+ };
34
+ }, [api, onSelect, setApi]);
35
+ const scrollPrev = React.useCallback(() => {
36
+ api?.scrollPrev();
37
+ }, [api]);
38
+ const scrollNext = React.useCallback(() => {
39
+ api?.scrollNext();
40
+ }, [api]);
41
+ const scrollTo = React.useCallback(
42
+ (index) => {
43
+ api?.scrollTo(index);
44
+ },
45
+ [api]
46
+ );
47
+ const contextValue = React.useMemo(
48
+ () => ({
49
+ canScrollPrev,
50
+ canScrollNext,
51
+ api,
52
+ scrollPrev,
53
+ scrollNext,
54
+ scrollTo
55
+ }),
56
+ [canScrollPrev, canScrollNext, api, scrollPrev, scrollNext, scrollTo]
57
+ );
58
+ return /* @__PURE__ */ jsx(CarouselContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx(
59
+ "div",
60
+ {
61
+ ref,
62
+ "data-slot": "carousel",
63
+ className: cn("ui-carousel", className),
64
+ "data-orientation": opts?.axis === "y" ? "vertical" : "horizontal",
65
+ ...props,
66
+ children: /* @__PURE__ */ jsx("div", { className: "ui-carousel-viewport", ref: emblaRef, children })
67
+ }
68
+ ) });
69
+ });
70
+ Carousel.displayName = "Carousel";
71
+ var CarouselContent = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
72
+ "div",
73
+ {
74
+ ref,
75
+ "data-slot": "carousel-content",
76
+ className: cn("ui-carousel-content", className),
77
+ ...props
78
+ }
79
+ ));
80
+ CarouselContent.displayName = "CarouselContent";
81
+ var CarouselItem = React.forwardRef(
82
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx(
83
+ "div",
84
+ {
85
+ ref,
86
+ "data-slot": "carousel-item",
87
+ className: cn("ui-carousel-item", className),
88
+ ...props
89
+ }
90
+ )
91
+ );
92
+ CarouselItem.displayName = "CarouselItem";
93
+ var CarouselPrevious = React.forwardRef(({ className, ...props }, ref) => {
94
+ const { canScrollPrev, scrollPrev } = useCarousel();
95
+ return /* @__PURE__ */ jsxs(
96
+ "button",
97
+ {
98
+ ref,
99
+ type: "button",
100
+ "data-slot": "carousel-previous",
101
+ disabled: !canScrollPrev,
102
+ className: cn("ui-carousel-previous", className),
103
+ onClick: scrollPrev,
104
+ ...props,
105
+ children: [
106
+ /* @__PURE__ */ jsx(ChevronLeft, { className: "ui-carousel-arrow", "aria-hidden": "true" }),
107
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Previous" })
108
+ ]
109
+ }
110
+ );
111
+ });
112
+ CarouselPrevious.displayName = "CarouselPrevious";
113
+ var CarouselNext = React.forwardRef(({ className, ...props }, ref) => {
114
+ const { canScrollNext, scrollNext } = useCarousel();
115
+ return /* @__PURE__ */ jsxs(
116
+ "button",
117
+ {
118
+ ref,
119
+ type: "button",
120
+ "data-slot": "carousel-next",
121
+ disabled: !canScrollNext,
122
+ className: cn("ui-carousel-next", className),
123
+ onClick: scrollNext,
124
+ ...props,
125
+ children: [
126
+ /* @__PURE__ */ jsx(ChevronRight, { className: "ui-carousel-arrow", "aria-hidden": "true" }),
127
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Next" })
128
+ ]
129
+ }
130
+ );
131
+ });
132
+ CarouselNext.displayName = "CarouselNext";
133
+
134
+ export { Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, useCarousel };