@godxjp/ui 7.0.0 → 8.1.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 (157) hide show
  1. package/dist/app/index.d.ts +2 -2
  2. package/dist/{app.prop-IobwLwaM.d.ts → app.prop-DnIXFzLi.d.ts} +9 -9
  3. package/dist/{checkbox-CK2mYEpD.d.ts → checkbox-ChRsR7Nk.d.ts} +2 -2
  4. package/dist/{chunk-3UGU5TYP.js → chunk-25RYBC5T.js} +2 -2
  5. package/dist/{chunk-CQBADMFG.js → chunk-26CPAKUP.js} +3 -2
  6. package/dist/{chunk-TT2L7JM6.js → chunk-3TS3G4U3.js} +3 -3
  7. package/dist/{chunk-ZS6DTAM2.js → chunk-4MMIMZMK.js} +1 -1
  8. package/dist/{chunk-6TSU4IHV.js → chunk-4R7RQDXI.js} +23 -21
  9. package/dist/{chunk-OXKY5QMK.js → chunk-6QXQQAOQ.js} +6 -6
  10. package/dist/{chunk-JJCGMCTL.js → chunk-A22MCA3X.js} +6 -6
  11. package/dist/{chunk-VXXKR5U4.js → chunk-A7PKMT7Y.js} +4 -4
  12. package/dist/{chunk-HKQITNB3.js → chunk-AINW5WYN.js} +5 -4
  13. package/dist/{chunk-OGFWIXRO.js → chunk-C5H655GK.js} +218 -53
  14. package/dist/{chunk-ZLK5SPT6.js → chunk-EOTOCNT7.js} +1 -1
  15. package/dist/{chunk-ARDVPIF4.js → chunk-G2WYOCDL.js} +5 -5
  16. package/dist/{chunk-V6UWJKZF.js → chunk-HTEL5DQI.js} +1 -1
  17. package/dist/{chunk-ICM6XBST.js → chunk-IBK5D2Q6.js} +2 -1
  18. package/dist/{chunk-IK7I3ABN.js → chunk-IOGU3ZWF.js} +2 -2
  19. package/dist/chunk-KKMQLQ7F.js +137 -0
  20. package/dist/{chunk-HJEBRCXL.js → chunk-M4PZNAMV.js} +1 -0
  21. package/dist/{chunk-2QG3OVAD.js → chunk-N43OKOFT.js} +7 -5
  22. package/dist/{chunk-ZR2TIBPG.js → chunk-NG23LVTM.js} +4 -4
  23. package/dist/{chunk-E76QIYSY.js → chunk-O24Z3ULJ.js} +4 -4
  24. package/dist/{chunk-L6J44O74.js → chunk-OJZ6C2HM.js} +2 -2
  25. package/dist/{chunk-2HLWHQJA.js → chunk-P4HFJQID.js} +5 -4
  26. package/dist/{chunk-EXBWDW5E.js → chunk-RGIYKJPW.js} +7 -7
  27. package/dist/{chunk-ZKIAZDVU.js → chunk-RGPF3HU6.js} +4 -4
  28. package/dist/{chunk-FBHN6OO4.js → chunk-SKIRU7GC.js} +2 -2
  29. package/dist/{chunk-NTUHJ37K.js → chunk-SMWKD2HG.js} +9 -9
  30. package/dist/chunk-TILFZBTE.js +50 -0
  31. package/dist/{chunk-6UFKWOEW.js → chunk-TMDGV4CN.js} +15 -11
  32. package/dist/{chunk-7AMHT5Z5.js → chunk-UIYEAUWA.js} +30 -13
  33. package/dist/chunk-WFUIE252.js +61 -0
  34. package/dist/{chunk-25ZZ2W3M.js → chunk-WN52SCGE.js} +5 -5
  35. package/dist/{chunk-EQRQM6RF.js → chunk-WTVLZVBA.js} +28 -8
  36. package/dist/{chunk-Y3XBNUTD.js → chunk-XDUZ7JJL.js} +2 -2
  37. package/dist/{chunk-RVY4F7LK.js → chunk-XZM2GNAY.js} +7 -7
  38. package/dist/components/admin/index.d.ts +19 -19
  39. package/dist/components/admin/index.js +30 -30
  40. package/dist/components/data-display/badge.d.ts +7 -4
  41. package/dist/components/data-display/badge.js +2 -2
  42. package/dist/components/data-display/card.d.ts +2 -2
  43. package/dist/components/data-display/index.d.ts +18 -7
  44. package/dist/components/data-display/index.js +65 -12
  45. package/dist/components/data-display/table.js +2 -2
  46. package/dist/components/data-entry/autocomplete.d.ts +5 -5
  47. package/dist/components/data-entry/autocomplete.js +6 -6
  48. package/dist/components/data-entry/calendar.d.ts +5 -5
  49. package/dist/components/data-entry/calendar.js +3 -3
  50. package/dist/components/data-entry/cascader.d.ts +6 -6
  51. package/dist/components/data-entry/cascader.js +7 -7
  52. package/dist/components/data-entry/checkbox.d.ts +6 -6
  53. package/dist/components/data-entry/checkbox.js +2 -2
  54. package/dist/components/data-entry/color-picker.d.ts +6 -6
  55. package/dist/components/data-entry/color-picker.js +2 -2
  56. package/dist/components/data-entry/command.d.ts +11 -11
  57. package/dist/components/data-entry/command.js +2 -2
  58. package/dist/components/data-entry/date-picker.d.ts +6 -6
  59. package/dist/components/data-entry/date-picker.js +5 -5
  60. package/dist/components/data-entry/date-range-picker.d.ts +6 -6
  61. package/dist/components/data-entry/date-range-picker.js +5 -5
  62. package/dist/components/data-entry/index.d.ts +50 -22
  63. package/dist/components/data-entry/index.js +25 -83
  64. package/dist/components/data-entry/radio.d.ts +5 -5
  65. package/dist/components/data-entry/radio.js +2 -2
  66. package/dist/components/data-entry/select.d.ts +5 -5
  67. package/dist/components/data-entry/select.js +6 -6
  68. package/dist/components/data-entry/slider.d.ts +5 -5
  69. package/dist/components/data-entry/switch.d.ts +5 -5
  70. package/dist/components/data-entry/textarea.js +2 -2
  71. package/dist/components/data-entry/time-picker.d.ts +6 -6
  72. package/dist/components/data-entry/time-picker.js +3 -3
  73. package/dist/components/data-entry/transfer.d.ts +7 -7
  74. package/dist/components/data-entry/transfer.js +4 -4
  75. package/dist/components/data-entry/tree-select.d.ts +6 -6
  76. package/dist/components/data-entry/tree-select.js +7 -7
  77. package/dist/components/data-entry/upload.d.ts +7 -7
  78. package/dist/components/data-entry/upload.js +5 -5
  79. package/dist/components/feedback/alert.d.ts +7 -5
  80. package/dist/components/feedback/alert.js +3 -3
  81. package/dist/components/feedback/dialog.d.ts +9 -6
  82. package/dist/components/feedback/dialog.js +2 -2
  83. package/dist/components/feedback/index.d.ts +24 -8
  84. package/dist/components/feedback/index.js +7 -6
  85. package/dist/components/general/button.d.ts +4 -4
  86. package/dist/components/general/button.js +1 -1
  87. package/dist/components/general/index.d.ts +3 -3
  88. package/dist/components/general/index.js +1 -1
  89. package/dist/components/layout/index.d.ts +10 -9
  90. package/dist/components/layout/index.js +3 -3
  91. package/dist/components/navigation/index.d.ts +13 -13
  92. package/dist/components/navigation/index.js +9 -9
  93. package/dist/components/navigation/pagination.d.ts +5 -5
  94. package/dist/components/navigation/pagination.js +7 -7
  95. package/dist/components/navigation/steps.d.ts +6 -6
  96. package/dist/components/navigation/steps.js +2 -2
  97. package/dist/components/query/index.d.ts +12 -7
  98. package/dist/components/query/index.js +4 -4
  99. package/dist/components/ui/index.d.ts +12 -12
  100. package/dist/components/ui/index.js +30 -30
  101. package/dist/{data-display.prop-CXP9Jfdn.d.ts → data-display.prop-Cf2p9QC4.d.ts} +6 -5
  102. package/dist/{data-entry.prop-CpSx5dX6.d.ts → data-entry.prop-CDkOajPj.d.ts} +38 -28
  103. package/dist/{data-table-C5lcmAwE.d.ts → data-table-B_q7j992.d.ts} +4 -4
  104. package/dist/{data.prop-BmLaGLb7.d.ts → data.prop-DMYMNl6L.d.ts} +2 -2
  105. package/dist/{feedback.prop-BnBpUzNK.d.ts → feedback.prop-BR5JOpPl.d.ts} +8 -5
  106. package/dist/filter-bar-DvVXm_d1.d.ts +14 -0
  107. package/dist/form/index.d.ts +3 -3
  108. package/dist/{form.prop-BHgpuFFm.d.ts → form.prop-Bc6r6JJW.d.ts} +1 -1
  109. package/dist/{general.prop-D7brMPNL.d.ts → general.prop-DoHDCRmL.d.ts} +2 -2
  110. package/dist/index.d.ts +22 -22
  111. package/dist/index.js +43 -30
  112. package/dist/inline-DqfYlGKj.d.ts +18 -0
  113. package/dist/{interaction.prop-Cdn7wOtq.d.ts → interaction.prop-DSFizzP6.d.ts} +8 -6
  114. package/dist/{layout.prop-MwHm4-Zl.d.ts → layout.prop-Baq9muDN.d.ts} +27 -13
  115. package/dist/layout.prop-CXvl2rVR.d.ts +16 -0
  116. package/dist/{navigation.prop-DAH4ysXj.d.ts → navigation.prop-8DgElO0c.d.ts} +12 -8
  117. package/dist/{navigation.prop-Hu7s7MJa.d.ts → navigation.prop-BKlxd-j7.d.ts} +2 -5
  118. package/dist/props/components/index.d.ts +14 -14
  119. package/dist/props/index.d.ts +14 -14
  120. package/dist/props/index.js +1 -1
  121. package/dist/props/registry.d.ts +251 -56
  122. package/dist/props/registry.js +1 -1
  123. package/dist/props/vocabulary/index.d.ts +5 -5
  124. package/dist/{query.prop-hIPrk2zI.d.ts → query.prop-DuODxsiU.d.ts} +12 -8
  125. package/dist/{search-input-rR2XDrjv.d.ts → search-input-cezAxpgb.d.ts} +7 -2
  126. package/dist/{shared.prop-BNRJc9K0.d.ts → shared.prop-BsNSXeqD.d.ts} +9 -3
  127. package/dist/{skeleton-CqFO4dRc.d.ts → skeleton-uWAjSacg.d.ts} +4 -2
  128. package/dist/styles/alert-layout.css +38 -18
  129. package/dist/styles/badge-layout.css +2 -2
  130. package/dist/styles/card-layout.css +5 -5
  131. package/dist/styles/control.css +31 -0
  132. package/dist/styles/data-display-layout.css +25 -0
  133. package/dist/styles/density.css +10 -10
  134. package/dist/styles/dialog-layout.css +4 -4
  135. package/dist/styles/feedback-layout.css +17 -0
  136. package/dist/styles/index.css +6 -9
  137. package/dist/styles/layout.css +95 -14
  138. package/dist/styles/table-layout.css +3 -3
  139. package/dist/theme/example.service.css +0 -5
  140. package/dist/tokens/base.css +7 -7
  141. package/dist/tokens/components/badge.css +7 -0
  142. package/dist/tokens/{primitives → components}/card.css +2 -3
  143. package/dist/tokens/{primitives → components}/control.css +10 -0
  144. package/dist/tokens/components/feedback.css +17 -0
  145. package/dist/tokens/{primitives → components}/table.css +2 -2
  146. package/dist/tokens/foundation.css +7 -22
  147. package/package.json +10 -4
  148. package/scripts/ui-audit.mjs +22 -0
  149. package/dist/chunk-S66TJXJU.js +0 -33
  150. package/dist/filter-bar-zSKz7YCR.d.ts +0 -10
  151. package/dist/inline-CV3A46np.d.ts +0 -10
  152. package/dist/layout.prop-4TCNvyQZ.d.ts +0 -20
  153. package/dist/tokens/primitives/badge.css +0 -13
  154. package/dist/tokens/primitives/feedback.css +0 -17
  155. /package/dist/{chunk-LDSLS6HE.js → chunk-HKD6ERY7.js} +0 -0
  156. /package/dist/tokens/{primitives → components}/navigation.css +0 -0
  157. /package/dist/tokens/{primitives → semantic}/layout.css +0 -0
@@ -1,8 +1,8 @@
1
1
  import * as React from 'react';
2
- import { UseQueryResult, UseInfiniteQueryResult, InfiniteData, UseMutationResult, QueryKey } from '@tanstack/react-query';
2
+ import { UseMutationResult, UseQueryResult, UseInfiniteQueryResult, InfiniteData, QueryKey } from '@tanstack/react-query';
3
3
  import { LinkProps } from 'react-router-dom';
4
- import { B as ButtonProp } from './general.prop-D7brMPNL.js';
5
- import { H as HandlerProp, a as ClassNameProp } from './shared.prop-BNRJc9K0.js';
4
+ import { B as ButtonProp } from './general.prop-DoHDCRmL.js';
5
+ import { H as HandlerProp, a as ClassNameProp } from './shared.prop-BsNSXeqD.js';
6
6
 
7
7
  /** Query / async lifecycle helpers — @see docs/COMPONENTS.md#query */
8
8
 
@@ -20,8 +20,8 @@ type DataStateProp<T> = {
20
20
  children: (data: NonNullable<T>) => React.ReactNode;
21
21
  };
22
22
  type MutationLike = Pick<UseMutationResult<unknown, unknown, unknown, unknown>, "isError" | "error" | "isPending">;
23
- /** @see MutationFeedback — inline mutation error (form submit, simulator run). */
24
- type MutationFeedbackProp = {
23
+ /** @see Alert.QueryError — inline mutation error (form submit, simulator run). */
24
+ type AlertMutationFeedbackProp = {
25
25
  mutation: MutationLike;
26
26
  onRetry?: HandlerProp;
27
27
  showRetry?: boolean;
@@ -29,12 +29,16 @@ type MutationFeedbackProp = {
29
29
  pending?: React.ReactNode;
30
30
  className?: ClassNameProp;
31
31
  };
32
+ /** @see MutationFeedback — deprecated alias for AlertMutationFeedback. */
33
+ type MutationFeedbackProp = AlertMutationFeedbackProp;
32
34
  type QueryRefetchLike = Pick<UseQueryResult<unknown>, "isFetching" | "refetch">;
33
- /** @see QueryRefetchButtonheader Refresh wired to `query.refetch()`. */
34
- type QueryRefetchButtonProp = Omit<ButtonProp, "onClick" | "disabled"> & {
35
+ /** @see ButtonRefetchButton recipe wired to `query.refetch()`. */
36
+ type ButtonRefetchProp = Omit<ButtonProp, "onClick" | "disabled"> & {
35
37
  query: QueryRefetchLike;
36
38
  label?: React.ReactNode;
37
39
  };
40
+ /** @see QueryRefetchButton — deprecated alias for ButtonRefetch. */
41
+ type QueryRefetchButtonProp = ButtonRefetchProp;
38
42
  type InfiniteQueryLike<TPage> = Pick<UseInfiniteQueryResult<InfiniteData<TPage>, unknown>, "isPending" | "isError" | "isFetching" | "isFetchingNextPage" | "error" | "data" | "hasNextPage" | "fetchNextPage" | "refetch">;
39
43
  type InfiniteQueryHelpers = {
40
44
  fetchNextPage: () => void;
@@ -68,4 +72,4 @@ type PrefetchLinkProp = LinkProps & {
68
72
  staleTime?: number;
69
73
  };
70
74
 
71
- export type { DataStateProp as D, InfiniteQueryHelpers as I, MutationFeedbackProp as M, PrefetchLinkProp as P, QueryRefetchButtonProp as Q, InfiniteQueryStateProp as a };
75
+ export type { AlertMutationFeedbackProp as A, ButtonRefetchProp as B, DataStateProp as D, InfiniteQueryHelpers as I, MutationFeedbackProp as M, PrefetchLinkProp as P, QueryRefetchButtonProp as Q, InfiniteQueryStateProp as a };
@@ -1,9 +1,14 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import { F as FormFieldProp } from './data-entry.prop-CpSx5dX6.js';
2
+ import { l as FormFieldProp, F as FieldProp } from './data-entry.prop-CDkOajPj.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
+ /** Label + optional description beside a checkbox/radio/switch control. */
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
+
7
12
  interface SearchInputProps {
8
13
  value?: string;
9
14
  defaultValue?: string;
@@ -19,4 +24,4 @@ interface SearchInputProps {
19
24
  }
20
25
  declare function SearchInput({ value: controlledValue, defaultValue, placeholder, debounce, onSearch, label, ariaLabel, className, inputClassName, id, disabled, }: SearchInputProps): react_jsx_runtime.JSX.Element;
21
26
 
22
- export { FormField as F, SearchInput as S };
27
+ export { ChoiceField as C, Field as F, SearchInput as S, FormField as a };
@@ -13,6 +13,8 @@ type ChildrenProp = React.ReactNode;
13
13
  type IdProp = string;
14
14
  /** Controlled open state for panels (Dialog, Sheet, Popover). */
15
15
  type OpenProp = boolean;
16
+ /** Uncontrolled initial open state for panels (Dialog, Sheet, Popover). */
17
+ type DefaultOpenProp = boolean;
16
18
  /** Callback when open state changes. */
17
19
  type OnOpenChangeProp = (open: boolean) => void;
18
20
  /** Async or sync handler — no return value expected. */
@@ -33,8 +35,12 @@ type ErrorProp = React.ReactNode;
33
35
  type PlaceholderProp = string;
34
36
  /** HTML input `name` attribute. */
35
37
  type NameProp = string;
36
- /** HTML input `value` — string form. */
37
- type ValueProp = string;
38
+ /** Abstract controlled value. */
39
+ type ValueProp<T = string> = T;
40
+ /** Abstract uncontrolled initial value. */
41
+ type DefaultValueProp<T = string> = T;
42
+ /** Callback when an abstract value changes. */
43
+ type OnValueChangeProp<T = string> = (value: T) => void;
38
44
  /** Change handler for text inputs. */
39
45
  type OnChangeProp = React.ChangeEventHandler<HTMLInputElement>;
40
46
  /** Click handler for buttons and interactive elements. */
@@ -42,4 +48,4 @@ type OnClickProp = React.MouseEventHandler<HTMLButtonElement>;
42
48
  /** Radix/shadcn `asChild` polymorphism — render as child element. */
43
49
  type AsChildProp = boolean;
44
50
 
45
- export type { AsChildProp as A, ChildrenProp as C, DisabledProp as D, ErrorProp as E, HandlerProp as H, IdProp as I, LabelProp as L, NameProp as N, OnChangeProp as O, PendingProp as P, RequiredProp as R, ValueProp as V, ClassNameProp as a, HelperProp as b, OnClickProp as c, OnOpenChangeProp as d, OpenProp as e, PlaceholderProp as f };
51
+ export type { AsChildProp as A, ChildrenProp as C, DefaultOpenProp as D, ErrorProp as E, HandlerProp as H, IdProp as I, LabelProp as L, NameProp as N, OnChangeProp as O, PendingProp as P, RequiredProp as R, ValueProp as V, ClassNameProp as a, DefaultValueProp as b, DisabledProp as c, HelperProp as d, OnClickProp as e, OnOpenChangeProp as f, OnValueChangeProp as g, OpenProp as h, PlaceholderProp as i };
@@ -15,6 +15,8 @@ declare function SkeletonTable({ rows, columns }: SkeletonRowsProps): react_jsx_
15
15
  /** Skeleton matching a Card detail layout — title + 6 metadata rows. */
16
16
  declare function SkeletonDetail(): react_jsx_runtime.JSX.Element;
17
17
  /** Skeleton matching a stat card / dashboard tile. */
18
- declare function SkeletonCard(): react_jsx_runtime.JSX.Element;
18
+ declare function SkeletonStat(): react_jsx_runtime.JSX.Element;
19
+ /** @deprecated Use SkeletonStat. */
20
+ declare const SkeletonCard: typeof SkeletonStat;
19
21
 
20
- export { Skeleton as S, SkeletonCard as a, SkeletonDetail as b, type SkeletonProps as c, SkeletonRows as d, SkeletonTable as e };
22
+ export { Skeleton as S, SkeletonCard as a, SkeletonDetail as b, type SkeletonProps as c, SkeletonRows as d, SkeletonStat as e, SkeletonTable as f };
@@ -1,5 +1,5 @@
1
1
  /*
2
- * ALERT — inset, gaps, dismiss offset; colors via data-variant + semantic tokens.
2
+ * ALERT — inset, gaps, dismiss offset; colors via data-tone + semantic tokens.
3
3
  */
4
4
 
5
5
  @layer components {
@@ -7,40 +7,48 @@
7
7
  position: relative;
8
8
  display: flex;
9
9
  align-items: flex-start;
10
- gap: var(--space-alert-gap);
10
+ gap: var(--alert-space-gap);
11
11
  width: 100%;
12
12
  border-radius: var(--radius-md);
13
13
  border-width: 1px;
14
- padding: var(--space-alert-inset);
14
+ padding: var(--alert-space-inset);
15
15
  font-size: var(--font-size-sm);
16
16
  }
17
17
 
18
- [data-slot="alert"][data-variant="default"] {
18
+ [data-slot="alert"][data-tone="default"],
19
+ [data-slot="alert"][data-tone="muted"],
20
+ [data-slot="alert"][data-tone="neutral"] {
19
21
  border-color: hsl(var(--border));
20
22
  background-color: hsl(var(--muted) / 0.4);
21
23
  color: hsl(var(--foreground));
22
24
  }
23
25
 
24
- [data-slot="alert"][data-variant="destructive"] {
26
+ [data-slot="alert"][data-tone="destructive"] {
25
27
  border-color: hsl(var(--destructive) / 0.3);
26
28
  background-color: hsl(var(--destructive) / 0.05);
27
29
  color: hsl(var(--foreground));
28
30
  }
29
31
 
30
- [data-slot="alert"][data-variant="warning"] {
32
+ [data-slot="alert"][data-tone="warning"] {
31
33
  border-color: hsl(var(--warning) / 0.3);
32
34
  background-color: hsl(var(--warning) / 0.05);
33
35
  color: hsl(var(--foreground));
34
36
  }
35
37
 
36
- [data-slot="alert"][data-variant="success"] {
38
+ [data-slot="alert"][data-tone="success"] {
37
39
  border-color: hsl(var(--success) / 0.3);
38
40
  background-color: hsl(var(--success) / 0.05);
39
41
  color: hsl(var(--foreground));
40
42
  }
41
43
 
44
+ [data-slot="alert"][data-tone="info"] {
45
+ border-color: hsl(var(--info) / 0.3);
46
+ background-color: hsl(var(--info) / 0.05);
47
+ color: hsl(var(--foreground));
48
+ }
49
+
42
50
  [data-slot="alert"][data-dismissible] {
43
- padding-right: calc(var(--space-alert-inset) + var(--space-8));
51
+ padding-right: calc(var(--alert-space-inset) + var(--space-8));
44
52
  }
45
53
 
46
54
  [data-slot="alert-icon"] {
@@ -50,28 +58,34 @@
50
58
  margin-top: 0.125rem;
51
59
  }
52
60
 
53
- [data-slot="alert-icon"][data-variant="default"] {
61
+ [data-slot="alert-icon"][data-tone="default"],
62
+ [data-slot="alert-icon"][data-tone="muted"],
63
+ [data-slot="alert-icon"][data-tone="neutral"] {
54
64
  color: hsl(var(--foreground));
55
65
  }
56
66
 
57
- [data-slot="alert-icon"][data-variant="destructive"] {
67
+ [data-slot="alert-icon"][data-tone="destructive"] {
58
68
  color: hsl(var(--destructive));
59
69
  }
60
70
 
61
- [data-slot="alert-icon"][data-variant="warning"] {
71
+ [data-slot="alert-icon"][data-tone="warning"] {
62
72
  color: hsl(var(--warning));
63
73
  }
64
74
 
65
- [data-slot="alert-icon"][data-variant="success"] {
75
+ [data-slot="alert-icon"][data-tone="success"] {
66
76
  color: hsl(var(--success));
67
77
  }
68
78
 
79
+ [data-slot="alert-icon"][data-tone="info"] {
80
+ color: hsl(var(--info));
81
+ }
82
+
69
83
  [data-slot="alert-body"] {
70
84
  display: flex;
71
85
  flex: 1;
72
86
  min-width: 0;
73
87
  flex-direction: column;
74
- gap: var(--space-alert-inner-gap);
88
+ gap: var(--alert-inner-space-gap);
75
89
  }
76
90
 
77
91
  @media (min-width: 640px) {
@@ -88,18 +102,22 @@
88
102
  line-height: 1;
89
103
  }
90
104
 
91
- [data-slot="alert-title"][data-variant="destructive"] {
105
+ [data-slot="alert-title"][data-tone="destructive"] {
92
106
  color: hsl(var(--destructive));
93
107
  }
94
108
 
95
- [data-slot="alert-title"][data-variant="warning"] {
109
+ [data-slot="alert-title"][data-tone="warning"] {
96
110
  color: hsl(var(--warning));
97
111
  }
98
112
 
99
- [data-slot="alert-title"][data-variant="success"] {
113
+ [data-slot="alert-title"][data-tone="success"] {
100
114
  color: hsl(var(--success));
101
115
  }
102
116
 
117
+ [data-slot="alert-title"][data-tone="info"] {
118
+ color: hsl(var(--info));
119
+ }
120
+
103
121
  [data-slot="alert-description"] {
104
122
  margin-top: var(--space-1);
105
123
  font-size: var(--font-size-sm);
@@ -124,8 +142,8 @@
124
142
 
125
143
  [data-slot="alert-dismiss"] {
126
144
  position: absolute;
127
- top: var(--space-alert-dismiss-offset);
128
- right: var(--space-alert-dismiss-offset);
145
+ top: var(--alert-dismiss-space-offset);
146
+ right: var(--alert-dismiss-space-offset);
129
147
  border-radius: var(--radius-sm);
130
148
  opacity: 0.7;
131
149
  }
@@ -138,6 +156,7 @@
138
156
 
139
157
  .ui-skeleton-rows,
140
158
  .ui-skeleton-detail-stack,
159
+ .ui-skeleton-stat,
141
160
  .ui-skeleton-card {
142
161
  display: grid;
143
162
  gap: var(--skeleton-row-gap);
@@ -177,6 +196,7 @@
177
196
  }
178
197
 
179
198
  .ui-skeleton-detail-box,
199
+ .ui-skeleton-stat,
180
200
  .ui-skeleton-card {
181
201
  border: 1px solid hsl(var(--border));
182
202
  border-radius: var(--skeleton-radius);
@@ -6,8 +6,8 @@
6
6
  [data-slot="badge"] {
7
7
  display: inline-flex;
8
8
  align-items: center;
9
- gap: var(--space-badge-gap);
10
- padding: var(--space-badge-y) var(--space-badge-x);
9
+ gap: var(--badge-space-gap);
10
+ padding: var(--badge-space-y) var(--badge-space-x);
11
11
  border-radius: var(--radius-md);
12
12
  border-width: 1px;
13
13
  font-size: var(--font-size-xs);
@@ -3,7 +3,7 @@
3
3
  * -----------------------------------------------------------------
4
4
  * Card* components emit data-slot + data-* flags ONLY. All inset/gap padding lives here.
5
5
  *
6
- * Uses card primitive tokens from src/tokens/primitives/card.css.
6
+ * Uses card component tokens from src/tokens/components/card.css.
7
7
  * Card tokens derive from foundation/layout primitives and are coordinated by tokens/base.css.
8
8
  *
9
9
  * Slot ownership — one token per vertical gap:
@@ -17,10 +17,10 @@
17
17
 
18
18
  [data-slot="card"] {
19
19
  min-width: 0;
20
- border-color: hsl(var(--card-border-token));
20
+ border-color: hsl(var(--card-border));
21
21
  border-radius: var(--card-radius);
22
22
  background: hsl(var(--card-background));
23
- color: hsl(var(--card-foreground-token));
23
+ color: hsl(var(--card-foreground));
24
24
  overflow: hidden;
25
25
  }
26
26
 
@@ -98,7 +98,7 @@
98
98
  }
99
99
 
100
100
  .ui-card-header--banded {
101
- border-bottom: 1px solid hsl(var(--card-border-token));
101
+ border-bottom: 1px solid hsl(var(--card-border));
102
102
  background-color: hsl(var(--card-header-background) / var(--card-header-background-alpha));
103
103
  }
104
104
 
@@ -270,7 +270,7 @@
270
270
  }
271
271
 
272
272
  [data-slot="card-footer"][data-separated] {
273
- border-top: 1px solid hsl(var(--card-border-token));
273
+ border-top: 1px solid hsl(var(--card-border));
274
274
  padding-block: var(--card-space-footer-y);
275
275
  justify-content: flex-end;
276
276
  }
@@ -570,3 +570,34 @@
570
570
  }
571
571
  }
572
572
  }
573
+
574
+ /* PasswordInput */
575
+ .ui-password-input { position: relative; display: block; }
576
+ .ui-password-input-field { padding-right: 2.5rem; }
577
+ .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;
581
+ }
582
+ .ui-password-input-toggle:hover { color: hsl(var(--foreground)); }
583
+ .ui-password-input-toggle svg { width: 1rem; height: 1rem; }
584
+
585
+ /* 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; }
589
+ .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;
594
+ }
595
+ .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);
597
+ }
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)); }
@@ -186,3 +186,28 @@
186
186
  }
187
187
 
188
188
  }
189
+
190
+ /* Accordion */
191
+ .ui-accordion-item { border-bottom: 1px solid hsl(var(--border)); }
192
+ .ui-accordion-header { display: flex; }
193
+ .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;
196
+ transition: color 0.15s ease;
197
+ }
198
+ .ui-accordion-trigger:hover { text-decoration: underline; }
199
+ .ui-accordion-chevron {
200
+ width: 1rem; height: 1rem; color: hsl(var(--muted-foreground));
201
+ transition: transform 0.2s ease; flex-shrink: 0;
202
+ }
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
+
207
+ /* HoverCard */
208
+ .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;
213
+ }
@@ -9,11 +9,11 @@
9
9
  --control-padding-x: var(--control-padding-x-compact);
10
10
  --table-row-height: var(--table-row-height-compact);
11
11
  --phi-unit: var(--space-3);
12
- --checkbox-size: 0.875rem;
13
- --switch-width: 2rem;
14
- --switch-height: 1.125rem;
15
- --switch-thumb-size: 0.875rem;
16
- --switch-thumb-translate: 0.875rem;
12
+ --checkbox-size: var(--checkbox-size-compact);
13
+ --switch-width: var(--switch-width-compact);
14
+ --switch-height: var(--switch-height-compact);
15
+ --switch-thumb-size: var(--switch-thumb-size-compact);
16
+ --switch-thumb-translate: var(--switch-thumb-translate-compact);
17
17
  --table-cell-padding-y: var(--space-1);
18
18
  }
19
19
 
@@ -33,11 +33,11 @@
33
33
  --control-padding-x: var(--control-padding-x-comfortable);
34
34
  --table-row-height: var(--table-row-height-comfortable);
35
35
  --phi-unit: var(--space-6);
36
- --checkbox-size: 1.125rem;
37
- --switch-width: 2.5rem;
38
- --switch-height: 1.375rem;
39
- --switch-thumb-size: 1.125rem;
40
- --switch-thumb-translate: 1.125rem;
36
+ --checkbox-size: var(--checkbox-size-comfortable);
37
+ --switch-width: var(--switch-width-comfortable);
38
+ --switch-height: var(--switch-height-comfortable);
39
+ --switch-thumb-size: var(--switch-thumb-size-comfortable);
40
+ --switch-thumb-translate: var(--switch-thumb-translate-comfortable);
41
41
  --table-cell-padding-y: var(--space-2);
42
42
  }
43
43
  }
@@ -19,10 +19,10 @@
19
19
  width: 100%;
20
20
  max-width: 32rem;
21
21
  transform: translate(-50%, -50%);
22
- gap: var(--space-dialog-gap);
22
+ gap: var(--dialog-space-gap);
23
23
  border: 1px solid hsl(var(--border));
24
24
  background-color: hsl(var(--background));
25
- padding: var(--space-dialog-inset);
25
+ padding: var(--dialog-space-inset);
26
26
  box-shadow: var(--shadow-lg, 0 10px 15px -3px rgb(0 0 0 / 0.1));
27
27
  }
28
28
 
@@ -60,8 +60,8 @@
60
60
 
61
61
  [data-slot="dialog-close"] {
62
62
  position: absolute;
63
- inset-inline-end: var(--space-dialog-close-offset);
64
- top: var(--space-dialog-close-offset);
63
+ inset-inline-end: var(--dialog-close-space-offset);
64
+ top: var(--dialog-close-space-offset);
65
65
  border-radius: var(--radius-sm);
66
66
  opacity: 0.7;
67
67
  }
@@ -0,0 +1,17 @@
1
+
2
+ /* Drawer (bottom-sheet, vaul) */
3
+ .ui-drawer-overlay { position: fixed; inset: 0; z-index: 50; background: hsl(var(--overlay, 0 0% 0% / 0.4)); }
4
+ .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
+ }
10
+ .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));
13
+ }
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)); }
@@ -47,15 +47,12 @@
47
47
  --color-info-foreground: hsl(var(--info-foreground));
48
48
  --color-attention: hsl(var(--attention));
49
49
  --color-attention-foreground: hsl(var(--attention-foreground));
50
- --color-chart-1: #0077c7;
51
- --color-chart-2: #006e54;
52
- --color-chart-3: #f8b500;
53
- --color-chart-4: #b7282e;
54
- --color-chart-5: #4c6cb3;
55
- --color-chart-6: #eb6101;
56
- --color-tracking-internal: hsl(var(--tracking-internal));
57
- --color-tracking-seller: hsl(var(--tracking-seller));
58
- --color-tracking-yamato: hsl(var(--tracking-yamato));
50
+ --color-chart-1: var(--chart-1);
51
+ --color-chart-2: var(--chart-2);
52
+ --color-chart-3: var(--chart-3);
53
+ --color-chart-4: var(--chart-4);
54
+ --color-chart-5: var(--chart-5);
55
+ --color-chart-6: var(--chart-6);
59
56
  --radius-lg: var(--radius);
60
57
  --radius-md: calc(var(--radius) - 2px);
61
58
  --radius-sm: calc(var(--radius) - 4px);