@godxjp/ui 9.1.0 → 10.0.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 (145) hide show
  1. package/README.md +58 -29
  2. package/dist/app/index.d.ts +1 -1
  3. package/dist/app/index.js +4 -4
  4. package/dist/{app.prop-DnIXFzLi.d.ts → app.prop-Cy6dJnU8.d.ts} +18 -35
  5. package/dist/aspect-ratio-CZZJd9Km.d.ts +9 -0
  6. package/dist/{checkbox-ChRsR7Nk.d.ts → checkbox-em-oFM5D.d.ts} +1 -1
  7. package/dist/{chunk-LJLGABFV.js → chunk-2HXZT2WJ.js} +17 -9
  8. package/dist/{chunk-QLMXEJSY.js → chunk-3Q4A4U2P.js} +24 -1
  9. package/dist/{chunk-26CPAKUP.js → chunk-44YRPSZ7.js} +1 -2
  10. package/dist/{chunk-HB2OHB5X.js → chunk-5NCFLCM7.js} +27 -16
  11. package/dist/{chunk-FXFJF4YA.js → chunk-6CSBMMZS.js} +262 -31
  12. package/dist/{chunk-ZRRLOOBX.js → chunk-6HHSU6RG.js} +8 -6
  13. package/dist/{chunk-INSF6K3Y.js → chunk-7Q45MBFW.js} +7 -5
  14. package/dist/{chunk-O24Z3ULJ.js → chunk-BE6GJGKJ.js} +1 -1
  15. package/dist/{chunk-5D42MFB4.js → chunk-BG5RNXTH.js} +71 -2
  16. package/dist/{chunk-AINW5WYN.js → chunk-COD66MFF.js} +1 -2
  17. package/dist/{chunk-IOGU3ZWF.js → chunk-DNGJHWJZ.js} +3 -3
  18. package/dist/{chunk-3TS3G4U3.js → chunk-EE5DKOHX.js} +3 -1
  19. package/dist/{chunk-KXOAZGPA.js → chunk-EQZP53KI.js} +33 -8
  20. package/dist/{chunk-BHV2FUOA.js → chunk-EZHHJQWQ.js} +1 -1
  21. package/dist/{chunk-N3JPLJ3B.js → chunk-GDDCSKCB.js} +12 -5
  22. package/dist/{chunk-RLGHEV4A.js → chunk-HTG5VHU7.js} +10 -1
  23. package/dist/{chunk-R2W2FX5Q.js → chunk-I7NQ2LIL.js} +1 -9
  24. package/dist/{chunk-XQMPK4GM.js → chunk-IHRMOJXD.js} +86 -39
  25. package/dist/{chunk-TILFZBTE.js → chunk-INIIF7F7.js} +1 -4
  26. package/dist/{chunk-UIYEAUWA.js → chunk-IY347EQA.js} +2 -2
  27. package/dist/{chunk-HCM4JAC2.js → chunk-JWGLJXQU.js} +39 -11
  28. package/dist/{chunk-TO33OY4L.js → chunk-LMKUKCTN.js} +1 -1
  29. package/dist/chunk-NXVCI6YB.js +453 -0
  30. package/dist/{chunk-JBHXILI4.js → chunk-O6DQZYNI.js} +63 -44
  31. package/dist/{chunk-O2OUNXV4.js → chunk-P5KPCT6R.js} +3 -3
  32. package/dist/{chunk-56NYZNVY.js → chunk-PDXFQS7M.js} +112 -49
  33. package/dist/{chunk-F7PG4OEV.js → chunk-QSGW3ZWK.js} +12 -4
  34. package/dist/{chunk-25RYBC5T.js → chunk-S2IJKT3D.js} +1 -1
  35. package/dist/{chunk-OJZ6C2HM.js → chunk-SARQRCKO.js} +54 -48
  36. package/dist/chunk-T2QO2S65.js +126 -0
  37. package/dist/{chunk-442ULAA6.js → chunk-TGNBXS7H.js} +142 -62
  38. package/dist/{chunk-6J7GRCDA.js → chunk-UNVRNJCB.js} +71 -11
  39. package/dist/{chunk-6YBYAEXD.js → chunk-VSM44AYE.js} +94 -24
  40. package/dist/chunk-VSUYVT2Q.js +163 -0
  41. package/dist/{chunk-4R7QL3MW.js → chunk-X2VY4MOW.js} +14 -29
  42. package/dist/{chunk-FRU44GA2.js → chunk-XK3M3VRR.js} +16 -2
  43. package/dist/{chunk-6YK3IJXW.js → chunk-Z46J47FY.js} +73 -77
  44. package/dist/components/admin/index.d.ts +23 -13
  45. package/dist/components/admin/index.js +29 -30
  46. package/dist/components/data-display/badge.js +3 -3
  47. package/dist/components/data-display/card.d.ts +3 -3
  48. package/dist/components/data-display/card.js +1 -1
  49. package/dist/components/data-display/carousel.js +3 -1
  50. package/dist/components/data-display/index.js +55 -33
  51. package/dist/components/data-entry/calendar.d.ts +1 -1
  52. package/dist/components/data-entry/calendar.js +1 -1
  53. package/dist/components/data-entry/cascader.d.ts +1 -1
  54. package/dist/components/data-entry/cascader.js +5 -5
  55. package/dist/components/data-entry/checkbox.d.ts +2 -2
  56. package/dist/components/data-entry/checkbox.js +2 -2
  57. package/dist/components/data-entry/color-picker.d.ts +1 -1
  58. package/dist/components/data-entry/color-picker.js +3 -3
  59. package/dist/components/data-entry/date-picker.d.ts +2 -2
  60. package/dist/components/data-entry/date-picker.js +4 -4
  61. package/dist/components/data-entry/date-range-picker.d.ts +2 -2
  62. package/dist/components/data-entry/date-range-picker.js +4 -4
  63. package/dist/components/data-entry/index.d.ts +9 -25
  64. package/dist/components/data-entry/index.js +22 -26
  65. package/dist/components/data-entry/radio.d.ts +1 -1
  66. package/dist/components/data-entry/radio.js +2 -2
  67. package/dist/components/data-entry/select.d.ts +2 -2
  68. package/dist/components/data-entry/select.js +3 -4
  69. package/dist/components/data-entry/slider.d.ts +1 -1
  70. package/dist/components/data-entry/switch.d.ts +2 -2
  71. package/dist/components/data-entry/switch.js +1 -1
  72. package/dist/components/data-entry/time-input.js +2 -2
  73. package/dist/components/data-entry/time-picker.d.ts +3 -1
  74. package/dist/components/data-entry/time-picker.js +3 -3
  75. package/dist/components/data-entry/transfer.d.ts +2 -2
  76. package/dist/components/data-entry/transfer.js +5 -5
  77. package/dist/components/data-entry/tree-select.d.ts +1 -1
  78. package/dist/components/data-entry/tree-select.js +5 -5
  79. package/dist/components/data-entry/upload.d.ts +2 -2
  80. package/dist/components/data-entry/upload.js +5 -5
  81. package/dist/components/feedback/alert.js +5 -5
  82. package/dist/components/feedback/dialog.d.ts +20 -1
  83. package/dist/components/feedback/dialog.js +3 -3
  84. package/dist/components/feedback/index.d.ts +10 -18
  85. package/dist/components/feedback/index.js +9 -9
  86. package/dist/components/feedback/sheet.js +1 -1
  87. package/dist/components/layout/index.d.ts +27 -15
  88. package/dist/components/layout/index.js +7 -5
  89. package/dist/components/navigation/dropdown-menu.js +1 -1
  90. package/dist/components/navigation/index.d.ts +15 -17
  91. package/dist/components/navigation/index.js +7 -8
  92. package/dist/components/navigation/pagination.d.ts +25 -4
  93. package/dist/components/navigation/pagination.js +4 -5
  94. package/dist/components/navigation/steps.d.ts +3 -3
  95. package/dist/components/navigation/steps.js +3 -1
  96. package/dist/components/query/index.d.ts +1 -5
  97. package/dist/components/query/index.js +6 -8
  98. package/dist/components/ui/index.d.ts +13 -12
  99. package/dist/components/ui/index.js +30 -32
  100. package/dist/{data-entry.prop-CDkOajPj.d.ts → data-entry.prop-BR4vNA1j.d.ts} +7 -35
  101. package/dist/filter-bar-BxjSJJnQ.d.ts +7 -0
  102. package/dist/{inline-DCqn4O29.d.ts → flex-D_EXRFSW.d.ts} +2 -8
  103. package/dist/form/index.js +1 -1
  104. package/dist/i18n/index.d.ts +82 -10
  105. package/dist/i18n/index.js +2 -2
  106. package/dist/index.d.ts +7 -7
  107. package/dist/index.js +41 -44
  108. package/dist/{layout.prop-DwJKI6ka.d.ts → layout.prop-JE2TcRyL.d.ts} +8 -2
  109. package/dist/lib/datetime/index.js +1 -1
  110. package/dist/{navigation.prop-8DgElO0c.d.ts → navigation.prop-DMcXkR-J.d.ts} +9 -11
  111. package/dist/{toggle-group-BulJgKh3.d.ts → password-strength-DVRvXEOK.d.ts} +24 -3
  112. package/dist/props/components/index.d.ts +4 -4
  113. package/dist/props/index.d.ts +4 -4
  114. package/dist/props/index.js +1 -1
  115. package/dist/props/registry.d.ts +84 -39
  116. package/dist/props/registry.js +1 -1
  117. package/dist/{search-input-cezAxpgb.d.ts → search-input-DpqDMXcn.d.ts} +2 -4
  118. package/dist/{skeleton-uWAjSacg.d.ts → skeleton-cj9kh5wo.d.ts} +1 -3
  119. package/dist/styles/control.css +176 -41
  120. package/dist/styles/data-display-layout.css +41 -15
  121. package/dist/styles/data-entry-layout.css +71 -0
  122. package/dist/styles/feedback-layout.css +44 -12
  123. package/dist/styles/index.css +45 -1
  124. package/dist/styles/layout.css +66 -17
  125. package/dist/styles/navigation-layout.css +3 -1
  126. package/dist/styles/shell-layout.css +3 -3
  127. package/dist/styles/table-layout.css +13 -0
  128. package/dist/tokens/foundation.css +12 -1
  129. package/dist/tokens/semantic/layout.css +2 -2
  130. package/dist/tooltip-Bf2KjRy8.d.ts +14 -0
  131. package/package.json +7 -7
  132. package/scripts/ui-audit.mjs +31 -2
  133. package/dist/aspect-ratio-DGoYrOry.d.ts +0 -6
  134. package/dist/chunk-CAEL2ZD2.js +0 -222
  135. package/dist/chunk-FYM3MJSK.js +0 -59
  136. package/dist/chunk-GKXPALFT.js +0 -32
  137. package/dist/chunk-JKHWLPM5.js +0 -101
  138. package/dist/chunk-KDBGFJJI.js +0 -220
  139. package/dist/chunk-VN72SWHX.js +0 -189
  140. package/dist/components/data-entry/autocomplete.d.ts +0 -24
  141. package/dist/components/data-entry/autocomplete.js +0 -10
  142. package/dist/components/data-entry/combobox.d.ts +0 -22
  143. package/dist/components/data-entry/combobox.js +0 -6
  144. package/dist/filter-bar-BycYH10i.d.ts +0 -14
  145. /package/dist/{chunk-LDSLS6HE.js → chunk-7CFO5FFE.js} +0 -0
@@ -322,22 +322,7 @@ declare const COMPONENT_PROP_REGISTRY: {
322
322
  readonly file: "components/app.prop.ts";
323
323
  readonly vocabulary: readonly ["ChildrenProp"];
324
324
  };
325
- readonly LocalePickerProp: {
326
- readonly group: "app";
327
- readonly file: "components/app.prop.ts";
328
- readonly vocabulary: readonly ["ValueProp", "OnValueChangeProp", "DisabledProp", "IdProp", "ClassNameProp"];
329
- };
330
- readonly TimezonePickerProp: {
331
- readonly group: "app";
332
- readonly file: "components/app.prop.ts";
333
- readonly vocabulary: readonly ["ValueProp", "OnValueChangeProp", "DisabledProp", "IdProp", "ClassNameProp"];
334
- };
335
- readonly TimeFormatPickerProp: {
336
- readonly group: "app";
337
- readonly file: "components/app.prop.ts";
338
- readonly vocabulary: readonly ["ValueProp", "OnValueChangeProp", "DisabledProp", "IdProp", "ClassNameProp"];
339
- };
340
- readonly DateFormatPickerProp: {
325
+ readonly AppSettingPickerProp: {
341
326
  readonly group: "app";
342
327
  readonly file: "components/app.prop.ts";
343
328
  readonly vocabulary: readonly ["ValueProp", "OnValueChangeProp", "DisabledProp", "IdProp", "ClassNameProp"];
@@ -509,26 +494,6 @@ declare const COMPONENT_PROP_REGISTRY: {
509
494
  readonly file: "components/data-entry.prop.ts";
510
495
  readonly vocabulary: readonly ["IdProp", "LabelProp", "DescriptionProp", "ClassNameProp", "ChildrenProp"];
511
496
  };
512
- readonly ChoiceFieldProp: {
513
- readonly group: "data-entry";
514
- readonly file: "components/data-entry.prop.ts";
515
- readonly vocabulary: readonly ["IdProp", "LabelProp", "ClassNameProp"];
516
- };
517
- readonly CountryOptionProp: {
518
- readonly group: "data-entry";
519
- readonly file: "components/data-entry.prop.ts";
520
- readonly vocabulary: readonly ["LabelProp", "ValueProp"];
521
- };
522
- readonly CountryOptionLabelProp: {
523
- readonly group: "data-entry";
524
- readonly file: "components/data-entry.prop.ts";
525
- readonly vocabulary: readonly ["ClassNameProp"];
526
- };
527
- readonly CountrySelectProp: {
528
- readonly group: "data-entry";
529
- readonly file: "components/data-entry.prop.ts";
530
- readonly vocabulary: readonly ["IdProp", "NameProp", "DefaultValueProp", "RequiredProp", "PlaceholderProp"];
531
- };
532
497
  readonly SliderProp: {
533
498
  readonly group: "data-entry";
534
499
  readonly file: "components/data-entry.prop.ts";
@@ -794,17 +759,17 @@ declare const COMPONENT_PROP_REGISTRY: {
794
759
  readonly PaginationProp: {
795
760
  readonly group: "navigation";
796
761
  readonly file: "components/navigation.prop.ts";
797
- readonly vocabulary: readonly ["DisabledProp", "ClassNameProp"];
762
+ readonly vocabulary: readonly ["ValueProp", "OnValueChangeProp", "DisabledProp", "ClassNameProp"];
798
763
  };
799
764
  readonly StepsProp: {
800
765
  readonly group: "navigation";
801
766
  readonly file: "components/navigation.prop.ts";
802
- readonly vocabulary: readonly ["SizeProp", "OnValueChangeProp", "ClassNameProp"];
767
+ readonly vocabulary: readonly ["ValueProp", "DefaultValueProp", "SizeProp", "OnValueChangeProp", "ClassNameProp"];
803
768
  };
804
769
  readonly StepItemProp: {
805
770
  readonly group: "navigation";
806
771
  readonly file: "components/navigation.prop.ts";
807
- readonly vocabulary: readonly ["TitleProp", "DescriptionProp", "IconProp", "DisabledProp"];
772
+ readonly vocabulary: readonly ["TitleProp", "SubtitleProp", "DescriptionProp", "IconProp", "DisabledProp"];
808
773
  };
809
774
  readonly StepStatusProp: {
810
775
  readonly group: "navigation";
@@ -851,6 +816,86 @@ declare const COMPONENT_PROP_REGISTRY: {
851
816
  readonly file: "components/form.prop.ts";
852
817
  readonly vocabulary: readonly ["ZodSchemaProp"];
853
818
  };
819
+ readonly ToggleProp: {
820
+ readonly group: "data-entry";
821
+ readonly file: "components/ui/toggle.tsx";
822
+ readonly vocabulary: readonly ["SizeProp", "ClassNameProp"];
823
+ };
824
+ readonly RatingProp: {
825
+ readonly group: "data-entry";
826
+ readonly file: "components/ui/rating.tsx";
827
+ readonly vocabulary: readonly ["ValueProp", "OnValueChangeProp", "DisabledProp", "ClassNameProp"];
828
+ };
829
+ readonly TagInputProp: {
830
+ readonly group: "data-entry";
831
+ readonly file: "components/ui/tag-input.tsx";
832
+ readonly vocabulary: readonly ["ValueProp", "OnValueChangeProp", "PlaceholderProp", "IdProp", "ClassNameProp"];
833
+ };
834
+ readonly PasswordInputProp: {
835
+ readonly group: "data-entry";
836
+ readonly file: "components/ui/password-input.tsx";
837
+ readonly vocabulary: readonly ["ClassNameProp"];
838
+ };
839
+ readonly PasswordStrengthProp: {
840
+ readonly group: "data-entry";
841
+ readonly file: "components/data-entry/password-strength.tsx";
842
+ readonly vocabulary: readonly ["ValueProp", "ClassNameProp"];
843
+ };
844
+ readonly ProgressProp: {
845
+ readonly group: "data-display";
846
+ readonly file: "components/data-display/progress.tsx";
847
+ readonly vocabulary: readonly ["ValueProp", "LabelProp", "ClassNameProp"];
848
+ };
849
+ readonly TimelineProp: {
850
+ readonly group: "data-display";
851
+ readonly file: "components/data-display/timeline.tsx";
852
+ readonly vocabulary: readonly ["ClassNameProp"];
853
+ };
854
+ readonly TreeListProp: {
855
+ readonly group: "data-display";
856
+ readonly file: "components/data-display/tree-list.tsx";
857
+ readonly vocabulary: readonly ["ClassNameProp"];
858
+ };
859
+ readonly CardProp: {
860
+ readonly group: "data-display";
861
+ readonly file: "components/data-display/card.tsx";
862
+ readonly vocabulary: readonly ["ToneProp", "ClassNameProp", "ChildrenProp"];
863
+ };
864
+ readonly CardCoverProp: {
865
+ readonly group: "data-display";
866
+ readonly file: "components/data-display/card.tsx";
867
+ readonly vocabulary: readonly ["ClassNameProp", "ChildrenProp"];
868
+ };
869
+ readonly CardHeaderProp: {
870
+ readonly group: "data-display";
871
+ readonly file: "components/data-display/card.tsx";
872
+ readonly vocabulary: readonly ["TitleProp", "DescriptionProp", "ClassNameProp", "ChildrenProp"];
873
+ };
874
+ readonly CardContentProp: {
875
+ readonly group: "data-display";
876
+ readonly file: "components/data-display/card.tsx";
877
+ readonly vocabulary: readonly ["ClassNameProp", "ChildrenProp"];
878
+ };
879
+ readonly CardFooterProp: {
880
+ readonly group: "data-display";
881
+ readonly file: "components/data-display/card.tsx";
882
+ readonly vocabulary: readonly ["ClassNameProp", "ChildrenProp"];
883
+ };
884
+ readonly StatCardProp: {
885
+ readonly group: "data-display";
886
+ readonly file: "components/data-display/card.tsx";
887
+ readonly vocabulary: readonly ["TitleProp", "ToneProp", "ClassNameProp"];
888
+ };
889
+ readonly ResponsiveGridProp: {
890
+ readonly group: "layout";
891
+ readonly file: "components/layout/responsive-grid.tsx";
892
+ readonly vocabulary: readonly ["GapProp", "ClassNameProp", "ChildrenProp"];
893
+ };
894
+ readonly SplitPaneProp: {
895
+ readonly group: "layout";
896
+ readonly file: "components/layout/split-pane.tsx";
897
+ readonly vocabulary: readonly ["ClassNameProp", "ChildrenProp"];
898
+ };
854
899
  };
855
900
  type ComponentPropName = keyof typeof COMPONENT_PROP_REGISTRY;
856
901
  /** Forbidden duplicate concepts — use the canonical name on the left. */
@@ -1 +1 @@
1
- export { COMPONENT_PROP_REGISTRY, PROP_ALIASES_FORBIDDEN, VOCABULARY_REGISTRY } from '../chunk-XQMPK4GM.js';
1
+ export { COMPONENT_PROP_REGISTRY, PROP_ALIASES_FORBIDDEN, VOCABULARY_REGISTRY } from '../chunk-IHRMOJXD.js';
@@ -1,13 +1,11 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import { l as FormFieldProp, F as FieldProp } from './data-entry.prop-CDkOajPj.js';
2
+ import { h as FormFieldProp, F as FieldProp } from './data-entry.prop-BR4vNA1j.js';
3
3
  import * as React from 'react';
4
4
 
5
5
  declare function FormField({ id, label, required, helper, error, labelAddon, className, children, }: FormFieldProp): react_jsx_runtime.JSX.Element;
6
6
 
7
7
  /** Label + optional description beside a checkbox/radio/switch control. */
8
8
  declare function Field({ id, label, description, className, children }: FieldProp): react_jsx_runtime.JSX.Element;
9
- /** @deprecated Use Field. */
10
- declare const ChoiceField: typeof Field;
11
9
 
12
10
  interface SearchInputProps {
13
11
  value?: string;
@@ -24,4 +22,4 @@ interface SearchInputProps {
24
22
  }
25
23
  declare function SearchInput({ value: controlledValue, defaultValue, placeholder, debounce, onSearch, label, ariaLabel, className, inputClassName, id, disabled, }: SearchInputProps): react_jsx_runtime.JSX.Element;
26
24
 
27
- export { ChoiceField as C, Field as F, SearchInput as S, FormField as a };
25
+ export { Field as F, SearchInput as S, FormField as a };
@@ -16,7 +16,5 @@ declare function SkeletonTable({ rows, columns }: SkeletonRowsProps): react_jsx_
16
16
  declare function SkeletonDetail(): react_jsx_runtime.JSX.Element;
17
17
  /** Skeleton matching a stat card / dashboard tile. */
18
18
  declare function SkeletonStat(): react_jsx_runtime.JSX.Element;
19
- /** @deprecated Use SkeletonStat. */
20
- declare const SkeletonCard: typeof SkeletonStat;
21
19
 
22
- export { Skeleton as S, SkeletonCard as a, SkeletonDetail as b, type SkeletonProps as c, SkeletonRows as d, SkeletonStat as e, SkeletonTable as f };
20
+ export { Skeleton as S, SkeletonDetail as a, type SkeletonProps as b, SkeletonRows as c, SkeletonStat as d, SkeletonTable as e };
@@ -572,59 +572,194 @@
572
572
  }
573
573
 
574
574
  /* PasswordInput */
575
- .ui-password-input { position: relative; display: block; }
576
- .ui-password-input-field { padding-right: 2.5rem; }
575
+ .ui-password-input {
576
+ position: relative;
577
+ display: block;
578
+ }
579
+ .ui-password-input-field {
580
+ padding-right: 2.5rem;
581
+ }
577
582
  .ui-password-input-toggle {
578
- position: absolute; inset-block: 0; inset-inline-end: 0; display: inline-flex;
579
- align-items: center; justify-content: center; width: 2.5rem;
580
- color: hsl(var(--muted-foreground)); background: transparent; border: 0; cursor: pointer;
583
+ position: absolute;
584
+ inset-block: 0;
585
+ inset-inline-end: 0;
586
+ display: inline-flex;
587
+ align-items: center;
588
+ justify-content: center;
589
+ width: 2.5rem;
590
+ color: hsl(var(--muted-foreground));
591
+ background: transparent;
592
+ border: 0;
593
+ cursor: pointer;
594
+ }
595
+ .ui-password-input-toggle:hover {
596
+ color: hsl(var(--foreground));
597
+ }
598
+ .ui-password-input-toggle svg {
599
+ width: 1rem;
600
+ height: 1rem;
581
601
  }
582
- .ui-password-input-toggle:hover { color: hsl(var(--foreground)); }
583
- .ui-password-input-toggle svg { width: 1rem; height: 1rem; }
584
602
 
585
603
  /* InputOTP */
586
- .ui-otp-container { display: flex; align-items: center; gap: var(--space-2); }
587
- .ui-otp-input:disabled { cursor: not-allowed; }
588
- .ui-otp-group { display: flex; align-items: center; }
604
+ .ui-otp-container {
605
+ display: flex;
606
+ align-items: center;
607
+ gap: var(--space-2);
608
+ }
609
+ .ui-otp-input:disabled {
610
+ cursor: not-allowed;
611
+ }
612
+ .ui-otp-group {
613
+ display: flex;
614
+ align-items: center;
615
+ }
589
616
  .ui-otp-slot {
590
- position: relative; display: flex; width: 2.25rem; height: 2.25rem;
591
- align-items: center; justify-content: center; font-size: 0.875rem;
592
- border: 1px solid hsl(var(--border)); border-inline-start-width: 0;
593
- background: hsl(var(--background)); transition: box-shadow 0.15s ease;
617
+ position: relative;
618
+ display: flex;
619
+ width: 2.25rem;
620
+ height: 2.25rem;
621
+ align-items: center;
622
+ justify-content: center;
623
+ font-size: 0.875rem;
624
+ border: 1px solid hsl(var(--border));
625
+ border-inline-start-width: 0;
626
+ background: hsl(var(--background));
627
+ transition: box-shadow 0.15s ease;
594
628
  }
595
629
  .ui-otp-group .ui-otp-slot:first-child {
596
- border-inline-start-width: 1px; border-start-start-radius: var(--radius-md); border-end-start-radius: var(--radius-md);
630
+ border-inline-start-width: 1px;
631
+ border-start-start-radius: var(--radius-md);
632
+ border-end-start-radius: var(--radius-md);
633
+ }
634
+ .ui-otp-group .ui-otp-slot:last-child {
635
+ border-start-end-radius: var(--radius-md);
636
+ border-end-end-radius: var(--radius-md);
637
+ }
638
+ .ui-otp-slot[data-active="true"] {
639
+ z-index: 1;
640
+ box-shadow: 0 0 0 2px hsl(var(--ring));
641
+ }
642
+ .ui-otp-caret-wrapper {
643
+ position: absolute;
644
+ inset: 0;
645
+ display: flex;
646
+ align-items: center;
647
+ justify-content: center;
648
+ }
649
+ .ui-otp-caret {
650
+ width: 1px;
651
+ height: 1rem;
652
+ background: hsl(var(--foreground));
653
+ animation: ui-otp-blink 1s step-end infinite;
654
+ }
655
+ @keyframes ui-otp-blink {
656
+ 50% {
657
+ opacity: 0;
658
+ }
659
+ }
660
+ .ui-otp-separator-icon {
661
+ width: 1rem;
662
+ height: 1rem;
663
+ color: hsl(var(--muted-foreground));
597
664
  }
598
- .ui-otp-group .ui-otp-slot:last-child { border-start-end-radius: var(--radius-md); border-end-end-radius: var(--radius-md); }
599
- .ui-otp-slot[data-active="true"] { z-index: 1; box-shadow: 0 0 0 2px hsl(var(--ring)); }
600
- .ui-otp-caret-wrapper { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; }
601
- .ui-otp-caret { width: 1px; height: 1rem; background: hsl(var(--foreground)); animation: ui-otp-blink 1s step-end infinite; }
602
- @keyframes ui-otp-blink { 50% { opacity: 0; } }
603
- .ui-otp-separator-icon { width: 1rem; height: 1rem; color: hsl(var(--muted-foreground)); }
604
665
 
605
666
  /* Rating */
606
- .ui-rating { display: inline-flex; align-items: center; gap: var(--space-1); }
607
- .ui-rating-star { background: transparent; border: 0; padding: 0; cursor: pointer; color: hsl(var(--muted-foreground) / 0.45); line-height: 0; }
608
- .ui-rating-star:disabled { cursor: default; }
609
- .ui-rating-star svg { width: 1.25rem; height: 1.25rem; }
610
- .ui-rating-star-filled { color: hsl(var(--warning)); }
611
- .ui-rating-star-filled svg { fill: currentColor; }
612
- .ui-rating-star:focus-visible { outline: 2px solid hsl(var(--ring)); outline-offset: 2px; border-radius: var(--radius-sm); }
667
+ .ui-rating {
668
+ display: inline-flex;
669
+ align-items: center;
670
+ gap: var(--space-1);
671
+ }
672
+ .ui-rating-star {
673
+ /* ≥24px hit area (WCAG 2.5.8) around the 20px glyph */
674
+ display: inline-flex;
675
+ align-items: center;
676
+ justify-content: center;
677
+ min-width: 1.5rem;
678
+ min-height: 1.5rem;
679
+ background: transparent;
680
+ border: 0;
681
+ padding: 0;
682
+ cursor: pointer;
683
+ color: hsl(var(--muted-foreground) / 0.45);
684
+ line-height: 0;
685
+ }
686
+ .ui-rating-star:disabled {
687
+ cursor: default;
688
+ }
689
+ .ui-rating-star svg {
690
+ width: 1.25rem;
691
+ height: 1.25rem;
692
+ }
693
+ .ui-rating-star-filled {
694
+ color: hsl(var(--warning));
695
+ }
696
+ .ui-rating-star-filled svg {
697
+ fill: currentColor;
698
+ }
699
+ .ui-rating-star:focus-visible {
700
+ outline: 2px solid hsl(var(--ring));
701
+ outline-offset: 2px;
702
+ border-radius: var(--radius-sm);
703
+ }
613
704
 
614
705
  /* TagInput */
615
706
  .ui-tag-input {
616
- display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-1);
617
- min-height: 2.25rem; padding: var(--space-1) var(--space-2);
618
- border: 1px solid hsl(var(--input)); border-radius: var(--radius-md); background: hsl(var(--background));
707
+ display: flex;
708
+ flex-wrap: wrap;
709
+ align-items: center;
710
+ gap: var(--space-1);
711
+ min-height: 2.25rem;
712
+ padding: var(--space-1) var(--space-2);
713
+ border: 1px solid hsl(var(--input));
714
+ border-radius: var(--radius-md);
715
+ background: hsl(var(--background));
716
+ }
717
+ .ui-tag-input:focus-within {
718
+ box-shadow: 0 0 0 2px hsl(var(--ring));
719
+ border-color: hsl(var(--ring));
720
+ }
721
+ .ui-tag-input-disabled {
722
+ opacity: 0.6;
723
+ cursor: not-allowed;
619
724
  }
620
- .ui-tag-input:focus-within { box-shadow: 0 0 0 2px hsl(var(--ring)); border-color: hsl(var(--ring)); }
621
- .ui-tag-input-disabled { opacity: 0.6; cursor: not-allowed; }
622
725
  .ui-tag-input-chip {
623
- display: inline-flex; align-items: center; gap: var(--space-1); font-size: 0.8125rem;
624
- padding: 0.0625rem var(--space-2); border-radius: var(--radius-sm);
625
- background: hsl(var(--secondary)); color: hsl(var(--secondary-foreground));
626
- }
627
- .ui-tag-input-remove { display: inline-flex; background: transparent; border: 0; padding: 0; cursor: pointer; color: inherit; opacity: 0.7; }
628
- .ui-tag-input-remove:hover { opacity: 1; }
629
- .ui-tag-input-remove svg { width: 0.75rem; height: 0.75rem; }
630
- .ui-tag-input-field { flex: 1; min-width: 6rem; border: 0; outline: none; background: transparent; font-size: 0.875rem; color: inherit; }
726
+ display: inline-flex;
727
+ align-items: center;
728
+ gap: var(--space-1);
729
+ font-size: 0.8125rem;
730
+ padding: 0.0625rem var(--space-2);
731
+ border-radius: var(--radius-sm);
732
+ background: hsl(var(--secondary));
733
+ color: hsl(var(--secondary-foreground));
734
+ }
735
+ .ui-tag-input-remove {
736
+ /* ≥24px hit area (WCAG 2.5.8) around the 12px glyph; negative inline margin keeps the chip tight */
737
+ display: inline-flex;
738
+ align-items: center;
739
+ justify-content: center;
740
+ min-width: 1.5rem;
741
+ min-height: 1.5rem;
742
+ margin-inline-end: -0.25rem;
743
+ background: transparent;
744
+ border: 0;
745
+ padding: 0;
746
+ cursor: pointer;
747
+ color: inherit;
748
+ opacity: 0.7;
749
+ }
750
+ .ui-tag-input-remove:hover {
751
+ opacity: 1;
752
+ }
753
+ .ui-tag-input-remove svg {
754
+ width: 0.75rem;
755
+ height: 0.75rem;
756
+ }
757
+ .ui-tag-input-field {
758
+ flex: 1;
759
+ min-width: 6rem;
760
+ border: 0;
761
+ outline: none;
762
+ background: transparent;
763
+ font-size: 0.875rem;
764
+ color: inherit;
765
+ }
@@ -184,32 +184,58 @@
184
184
  margin-top: var(--space-1);
185
185
  font-size: var(--font-size-sm);
186
186
  }
187
-
188
187
  }
189
188
 
190
189
  /* Accordion */
191
- .ui-accordion-item { border-bottom: 1px solid hsl(var(--border)); }
192
- .ui-accordion-header { display: flex; }
190
+ .ui-accordion-item {
191
+ border-bottom: 1px solid hsl(var(--border));
192
+ }
193
+ .ui-accordion-header {
194
+ display: flex;
195
+ }
193
196
  .ui-accordion-trigger {
194
- display: flex; flex: 1; align-items: center; justify-content: space-between;
195
- gap: var(--space-2); padding-block: var(--space-4); font-weight: 500; text-align: left;
197
+ display: flex;
198
+ flex: 1;
199
+ align-items: center;
200
+ justify-content: space-between;
201
+ gap: var(--space-2);
202
+ padding-block: var(--space-4);
203
+ font-weight: 500;
204
+ text-align: left;
196
205
  transition: color 0.15s ease;
197
206
  }
198
- .ui-accordion-trigger:hover { text-decoration: underline; }
207
+ .ui-accordion-trigger:hover {
208
+ text-decoration: underline;
209
+ }
199
210
  .ui-accordion-chevron {
200
- width: 1rem; height: 1rem; color: hsl(var(--muted-foreground));
201
- transition: transform 0.2s ease; flex-shrink: 0;
211
+ width: 1rem;
212
+ height: 1rem;
213
+ color: hsl(var(--muted-foreground));
214
+ transition: transform 0.2s ease;
215
+ flex-shrink: 0;
216
+ }
217
+ .ui-accordion-trigger[data-state="open"] .ui-accordion-chevron {
218
+ transform: rotate(180deg);
219
+ }
220
+ .ui-accordion-content {
221
+ overflow: hidden;
222
+ font-size: 0.875rem;
223
+ }
224
+ .ui-accordion-content-inner {
225
+ padding-bottom: var(--space-4);
202
226
  }
203
- .ui-accordion-trigger[data-state="open"] .ui-accordion-chevron { transform: rotate(180deg); }
204
- .ui-accordion-content { overflow: hidden; font-size: 0.875rem; }
205
- .ui-accordion-content-inner { padding-bottom: var(--space-4); }
206
227
 
207
228
  /* HoverCard */
208
229
  .ui-hover-card-content {
209
- z-index: 50; width: 16rem; border-radius: var(--radius-md);
210
- border: 1px solid hsl(var(--border)); background: hsl(var(--popover));
211
- color: hsl(var(--popover-foreground)); padding: var(--space-4);
212
- box-shadow: var(--shadow-md); outline: none;
230
+ z-index: 50;
231
+ width: 16rem;
232
+ border-radius: var(--radius-md);
233
+ border: 1px solid hsl(var(--border));
234
+ background: hsl(var(--popover));
235
+ color: hsl(var(--popover-foreground));
236
+ padding: var(--space-4);
237
+ box-shadow: var(--shadow-md);
238
+ outline: none;
213
239
  }
214
240
 
215
241
  .ui-carousel {
@@ -90,4 +90,75 @@
90
90
  .ui-time-input[aria-invalid="true"] {
91
91
  border-color: hsl(var(--destructive));
92
92
  }
93
+
94
+ .ui-password-strength {
95
+ display: grid;
96
+ gap: var(--space-1);
97
+ }
98
+
99
+ .ui-password-strength-track {
100
+ display: grid;
101
+ grid-template-columns: repeat(5, minmax(0, 1fr));
102
+ gap: var(--space-1);
103
+ }
104
+
105
+ .ui-password-strength-segment {
106
+ height: 0.5rem;
107
+ border-radius: var(--radius-sm);
108
+ background: hsl(var(--muted));
109
+ }
110
+
111
+ .ui-password-strength-segment[data-tone="destructive"] {
112
+ background: hsl(var(--destructive));
113
+ }
114
+
115
+ .ui-password-strength-segment[data-tone="warning"] {
116
+ background: hsl(var(--warning));
117
+ }
118
+
119
+ .ui-password-strength-segment[data-tone="success"] {
120
+ background: hsl(var(--success));
121
+ }
122
+
123
+ .ui-password-strength-meta {
124
+ display: flex;
125
+ justify-content: space-between;
126
+ align-items: baseline;
127
+ gap: var(--space-2);
128
+ }
129
+
130
+ .ui-password-strength-label {
131
+ color: hsl(var(--foreground));
132
+ font-size: var(--font-size-sm);
133
+ font-weight: var(--font-weight-medium);
134
+ }
135
+
136
+ .ui-password-strength-score {
137
+ color: hsl(var(--muted-foreground));
138
+ font-size: var(--font-size-xs);
139
+ }
140
+
141
+ .ui-password-strength-checklist {
142
+ margin: 0;
143
+ display: grid;
144
+ gap: var(--space-1);
145
+ padding-inline: 0;
146
+ list-style: none;
147
+ color: hsl(var(--muted-foreground));
148
+ font-size: var(--font-size-xs);
149
+ }
150
+
151
+ .ui-password-strength-checklist-item {
152
+ display: inline-flex;
153
+ align-items: center;
154
+ gap: var(--space-2);
155
+ }
156
+
157
+ .ui-password-strength-checklist-item[data-state="passed"] svg {
158
+ color: hsl(var(--success));
159
+ }
160
+
161
+ .ui-password-strength-checklist-item[data-state="failed"] svg {
162
+ color: hsl(var(--destructive));
163
+ }
93
164
  }
@@ -1,17 +1,49 @@
1
-
2
1
  /* Drawer (bottom-sheet, vaul) */
3
- .ui-drawer-overlay { position: fixed; inset: 0; z-index: 50; background: hsl(var(--overlay, 0 0% 0% / 0.4)); }
2
+ .ui-drawer-overlay {
3
+ position: fixed;
4
+ inset: 0;
5
+ z-index: 50;
6
+ background: hsl(var(--overlay, 0 0% 0% / 0.4));
7
+ }
4
8
  .ui-drawer-content {
5
- position: fixed; inset-inline: 0; inset-block-end: 0; z-index: 50;
6
- display: flex; flex-direction: column; max-height: 82vh;
7
- border-start-start-radius: var(--radius-lg); border-start-end-radius: var(--radius-lg);
8
- border: 1px solid hsl(var(--border)); background: hsl(var(--background));
9
+ position: fixed;
10
+ inset-inline: 0;
11
+ inset-block-end: 0;
12
+ z-index: 50;
13
+ display: flex;
14
+ flex-direction: column;
15
+ max-height: 82vh;
16
+ border-start-start-radius: var(--radius-lg);
17
+ border-start-end-radius: var(--radius-lg);
18
+ border: 1px solid hsl(var(--border));
19
+ background: hsl(var(--background));
9
20
  }
10
21
  .ui-drawer-handle {
11
- margin: var(--space-3) auto; height: 0.375rem; width: 6rem; flex-shrink: 0;
12
- border-radius: 9999px; background: hsl(var(--muted));
22
+ margin: var(--space-3) auto;
23
+ height: 0.375rem;
24
+ width: 6rem;
25
+ flex-shrink: 0;
26
+ border-radius: 9999px;
27
+ background: hsl(var(--muted));
28
+ }
29
+ .ui-drawer-header {
30
+ display: grid;
31
+ gap: var(--space-1);
32
+ padding: var(--space-4);
33
+ text-align: center;
34
+ }
35
+ .ui-drawer-footer {
36
+ display: flex;
37
+ flex-direction: column;
38
+ gap: var(--space-2);
39
+ margin-top: auto;
40
+ padding: var(--space-4);
41
+ }
42
+ .ui-drawer-title {
43
+ font-weight: var(--font-weight-medium);
44
+ line-height: 1.2;
45
+ }
46
+ .ui-drawer-description {
47
+ font-size: 0.875rem;
48
+ color: hsl(var(--muted-foreground));
13
49
  }
14
- .ui-drawer-header { display: grid; gap: var(--space-1); padding: var(--space-4); text-align: center; }
15
- .ui-drawer-footer { display: flex; flex-direction: column; gap: var(--space-2); margin-top: auto; padding: var(--space-4); }
16
- .ui-drawer-title { font-weight: 600; line-height: 1.2; }
17
- .ui-drawer-description { font-size: 0.875rem; color: hsl(var(--muted-foreground)); }