@godxjp/ui 6.12.0 → 8.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 (179) hide show
  1. package/README.md +5 -0
  2. package/dist/app/index.d.ts +2 -2
  3. package/dist/{app.prop-IobwLwaM.d.ts → app.prop-DnIXFzLi.d.ts} +9 -9
  4. package/dist/aspect-ratio-DGoYrOry.d.ts +6 -0
  5. package/dist/avatar-D9MdXzfF.d.ts +8 -0
  6. package/dist/{checkbox-9w-eF8sM.d.ts → checkbox-ChRsR7Nk.d.ts} +2 -2
  7. package/dist/{chunk-3UGU5TYP.js → chunk-25RYBC5T.js} +2 -2
  8. package/dist/{chunk-CQBADMFG.js → chunk-26CPAKUP.js} +3 -2
  9. package/dist/{chunk-ZTYEH3UW.js → chunk-3TS3G4U3.js} +3 -3
  10. package/dist/{chunk-ZS6DTAM2.js → chunk-4MMIMZMK.js} +1 -1
  11. package/dist/{chunk-T2S3IGZG.js → chunk-4R7RQDXI.js} +23 -21
  12. package/dist/{chunk-Y7AV7QJO.js → chunk-6QXQQAOQ.js} +5 -5
  13. package/dist/{chunk-JJCGMCTL.js → chunk-A22MCA3X.js} +6 -6
  14. package/dist/{chunk-TW4IRRAX.js → chunk-A7PKMT7Y.js} +8 -49
  15. package/dist/chunk-AINW5WYN.js +57 -0
  16. package/dist/chunk-B3WX53JQ.js +40 -0
  17. package/dist/{chunk-BM5LIDCS.js → chunk-C5H655GK.js} +223 -67
  18. package/dist/{chunk-ZLK5SPT6.js → chunk-EOTOCNT7.js} +1 -1
  19. package/dist/chunk-FRU44GA2.js +18 -0
  20. package/dist/chunk-FYM3MJSK.js +59 -0
  21. package/dist/{chunk-EE3B3TEQ.js → chunk-G2WYOCDL.js} +5 -5
  22. package/dist/chunk-HKD6ERY7.js +1 -0
  23. package/dist/{chunk-V6UWJKZF.js → chunk-HTEL5DQI.js} +1 -1
  24. package/dist/{chunk-ICM6XBST.js → chunk-IBK5D2Q6.js} +2 -1
  25. package/dist/{chunk-IK7I3ABN.js → chunk-IOGU3ZWF.js} +2 -2
  26. package/dist/{chunk-HJEBRCXL.js → chunk-M4PZNAMV.js} +1 -0
  27. package/dist/{chunk-2QG3OVAD.js → chunk-N43OKOFT.js} +7 -5
  28. package/dist/{chunk-YVBZ37ZE.js → chunk-NG23LVTM.js} +5 -5
  29. package/dist/{chunk-E76QIYSY.js → chunk-O24Z3ULJ.js} +4 -4
  30. package/dist/{chunk-GXHZAJUA.js → chunk-O2OUNXV4.js} +10 -10
  31. package/dist/{chunk-L6J44O74.js → chunk-OJZ6C2HM.js} +2 -2
  32. package/dist/{chunk-2HLWHQJA.js → chunk-P4HFJQID.js} +5 -4
  33. package/dist/chunk-R2W2FX5Q.js +48 -0
  34. package/dist/{chunk-AZS7553U.js → chunk-RGIYKJPW.js} +6 -6
  35. package/dist/{chunk-GH7E5N6F.js → chunk-RGPF3HU6.js} +3 -3
  36. package/dist/chunk-SEG2YBXF.js +29 -0
  37. package/dist/{chunk-JBEIL3VD.js → chunk-SKIRU7GC.js} +2 -2
  38. package/dist/chunk-TILFZBTE.js +50 -0
  39. package/dist/{chunk-6UFKWOEW.js → chunk-TMDGV4CN.js} +15 -11
  40. package/dist/chunk-UIYEAUWA.js +78 -0
  41. package/dist/{chunk-XG7XDYIM.js → chunk-V3N266PT.js} +48 -2
  42. package/dist/{chunk-I3272Y2C.js → chunk-WN52SCGE.js} +4 -4
  43. package/dist/{chunk-T4UT3B3K.js → chunk-WTVLZVBA.js} +153 -188
  44. package/dist/{chunk-SWGQX3AP.js → chunk-XDUZ7JJL.js} +2 -2
  45. package/dist/chunk-XMBCNMJI.js +61 -0
  46. package/dist/{chunk-RVY4F7LK.js → chunk-XZM2GNAY.js} +7 -7
  47. package/dist/{chunk-K27I23OA.js → chunk-Z6HNY2PL.js} +9 -9
  48. package/dist/components/admin/index.d.ts +24 -22
  49. package/dist/components/admin/index.js +33 -32
  50. package/dist/components/data-display/badge.d.ts +15 -4
  51. package/dist/components/data-display/badge.js +4 -2
  52. package/dist/components/data-display/card.d.ts +3 -3
  53. package/dist/components/data-display/card.js +1 -1
  54. package/dist/components/data-display/index.d.ts +14 -26
  55. package/dist/components/data-display/index.js +28 -37
  56. package/dist/components/data-display/table.js +2 -2
  57. package/dist/components/data-entry/autocomplete.d.ts +5 -5
  58. package/dist/components/data-entry/autocomplete.js +5 -5
  59. package/dist/components/data-entry/calendar.d.ts +5 -5
  60. package/dist/components/data-entry/calendar.js +3 -3
  61. package/dist/components/data-entry/cascader.d.ts +6 -6
  62. package/dist/components/data-entry/cascader.js +7 -7
  63. package/dist/components/data-entry/checkbox.d.ts +6 -6
  64. package/dist/components/data-entry/checkbox.js +2 -2
  65. package/dist/components/data-entry/color-picker.d.ts +6 -6
  66. package/dist/components/data-entry/color-picker.js +2 -2
  67. package/dist/components/data-entry/command.d.ts +11 -11
  68. package/dist/components/data-entry/command.js +2 -2
  69. package/dist/components/data-entry/date-picker.d.ts +6 -6
  70. package/dist/components/data-entry/date-picker.js +4 -4
  71. package/dist/components/data-entry/date-range-picker.d.ts +6 -6
  72. package/dist/components/data-entry/date-range-picker.js +4 -4
  73. package/dist/components/data-entry/index.d.ts +13 -19
  74. package/dist/components/data-entry/index.js +27 -145
  75. package/dist/components/data-entry/radio.d.ts +5 -5
  76. package/dist/components/data-entry/radio.js +2 -2
  77. package/dist/components/data-entry/select.d.ts +5 -5
  78. package/dist/components/data-entry/select.js +5 -5
  79. package/dist/components/data-entry/slider.d.ts +5 -5
  80. package/dist/components/data-entry/switch.d.ts +5 -5
  81. package/dist/components/data-entry/switch.js +1 -1
  82. package/dist/components/data-entry/textarea.js +2 -2
  83. package/dist/components/data-entry/time-picker.d.ts +6 -6
  84. package/dist/components/data-entry/time-picker.js +2 -2
  85. package/dist/components/data-entry/transfer.d.ts +7 -7
  86. package/dist/components/data-entry/transfer.js +5 -5
  87. package/dist/components/data-entry/tree-select.d.ts +6 -6
  88. package/dist/components/data-entry/tree-select.js +7 -7
  89. package/dist/components/data-entry/upload.d.ts +7 -7
  90. package/dist/components/data-entry/upload.js +5 -5
  91. package/dist/components/feedback/alert.d.ts +7 -5
  92. package/dist/components/feedback/alert.js +3 -3
  93. package/dist/components/feedback/dialog.d.ts +9 -6
  94. package/dist/components/feedback/dialog.js +2 -2
  95. package/dist/components/feedback/index.d.ts +7 -6
  96. package/dist/components/feedback/index.js +9 -7
  97. package/dist/components/general/button.d.ts +4 -4
  98. package/dist/components/general/button.js +1 -1
  99. package/dist/components/general/index.d.ts +3 -3
  100. package/dist/components/general/index.js +1 -1
  101. package/dist/components/layout/index.d.ts +19 -45
  102. package/dist/components/layout/index.js +4 -5
  103. package/dist/components/navigation/index.d.ts +13 -14
  104. package/dist/components/navigation/index.js +9 -10
  105. package/dist/components/navigation/pagination.d.ts +5 -5
  106. package/dist/components/navigation/pagination.js +6 -6
  107. package/dist/components/navigation/steps.d.ts +6 -6
  108. package/dist/components/navigation/steps.js +2 -2
  109. package/dist/components/navigation/tabs.d.ts +14 -2
  110. package/dist/components/navigation/tabs.js +1 -1
  111. package/dist/components/query/index.d.ts +12 -7
  112. package/dist/components/query/index.js +4 -4
  113. package/dist/components/ui/index.d.ts +21 -14
  114. package/dist/components/ui/index.js +32 -29
  115. package/dist/{data-display.prop-i0iaSwMV.d.ts → data-display.prop-Cf2p9QC4.d.ts} +18 -17
  116. package/dist/{data-entry.prop-Cjidhei7.d.ts → data-entry.prop-CDkOajPj.d.ts} +34 -40
  117. package/dist/{data-table-Bg7fPpXy.d.ts → data-table-B_q7j992.d.ts} +10 -33
  118. package/dist/{data.prop-BmLaGLb7.d.ts → data.prop-DMYMNl6L.d.ts} +2 -2
  119. package/dist/{feedback.prop-BnBpUzNK.d.ts → feedback.prop-BR5JOpPl.d.ts} +8 -5
  120. package/dist/filter-bar-DvVXm_d1.d.ts +14 -0
  121. package/dist/form/index.d.ts +3 -3
  122. package/dist/{form.prop-BHgpuFFm.d.ts → form.prop-Bc6r6JJW.d.ts} +1 -1
  123. package/dist/{general.prop-D7brMPNL.d.ts → general.prop-DoHDCRmL.d.ts} +2 -2
  124. package/dist/index.d.ts +27 -25
  125. package/dist/index.js +46 -32
  126. package/dist/inline-DqfYlGKj.d.ts +18 -0
  127. package/dist/{interaction.prop-Cdn7wOtq.d.ts → interaction.prop-DSFizzP6.d.ts} +8 -6
  128. package/dist/{layout.prop-MwHm4-Zl.d.ts → layout.prop-Baq9muDN.d.ts} +27 -13
  129. package/dist/layout.prop-CXvl2rVR.d.ts +16 -0
  130. package/dist/{navigation.prop-Ck5_gSfs.d.ts → navigation.prop-8DgElO0c.d.ts} +17 -14
  131. package/dist/{navigation.prop-Hu7s7MJa.d.ts → navigation.prop-BKlxd-j7.d.ts} +2 -5
  132. package/dist/props/components/index.d.ts +14 -14
  133. package/dist/props/index.d.ts +14 -14
  134. package/dist/props/index.js +2 -2
  135. package/dist/props/registry.d.ts +254 -64
  136. package/dist/props/registry.js +1 -1
  137. package/dist/props/vocabulary/index.d.ts +5 -5
  138. package/dist/{query.prop-hIPrk2zI.d.ts → query.prop-DuODxsiU.d.ts} +12 -8
  139. package/dist/{search-input-mAZy3Den.d.ts → search-input-cezAxpgb.d.ts} +7 -2
  140. package/dist/{shared.prop-BNRJc9K0.d.ts → shared.prop-BsNSXeqD.d.ts} +9 -3
  141. package/dist/skeleton-uWAjSacg.d.ts +22 -0
  142. package/dist/styles/alert-layout.css +38 -18
  143. package/dist/styles/badge-layout.css +4 -4
  144. package/dist/styles/card-layout.css +24 -24
  145. package/dist/styles/control.css +68 -0
  146. package/dist/styles/data-display-layout.css +23 -81
  147. package/dist/styles/density.css +10 -10
  148. package/dist/styles/dialog-layout.css +4 -4
  149. package/dist/styles/index.css +6 -9
  150. package/dist/styles/layout.css +114 -85
  151. package/dist/styles/table-layout.css +3 -3
  152. package/dist/theme/example.service.css +0 -5
  153. package/dist/toggle-group-BulJgKh3.d.ts +26 -0
  154. package/dist/tokens/base.css +7 -7
  155. package/dist/tokens/components/badge.css +7 -0
  156. package/dist/tokens/{primitives → components}/card.css +11 -12
  157. package/dist/tokens/{primitives → components}/control.css +10 -0
  158. package/dist/tokens/components/feedback.css +17 -0
  159. package/dist/tokens/{primitives → components}/table.css +2 -2
  160. package/dist/tokens/foundation.css +7 -22
  161. package/dist/use-toast-Dsw3yE2S.d.ts +19 -0
  162. package/package.json +13 -7
  163. package/scripts/ui-audit.mjs +22 -0
  164. package/dist/chunk-BPSKQUL2.js +0 -68
  165. package/dist/chunk-M64MVRLS.js +0 -92
  166. package/dist/chunk-PIIRNAXA.js +0 -26
  167. package/dist/chunk-S66TJXJU.js +0 -33
  168. package/dist/chunk-WXW43RK5.js +0 -24
  169. package/dist/components/navigation/tabs-items.d.ts +0 -12
  170. package/dist/components/navigation/tabs-items.js +0 -3
  171. package/dist/filter-bar-BpUvE_yO.d.ts +0 -10
  172. package/dist/inline-CV3A46np.d.ts +0 -10
  173. package/dist/layout.prop-4TCNvyQZ.d.ts +0 -20
  174. package/dist/tokens/primitives/badge.css +0 -13
  175. package/dist/tokens/primitives/feedback.css +0 -17
  176. package/dist/use-toast-Dol5bdY3.d.ts +0 -34
  177. /package/dist/{chunk-LDSLS6HE.js → chunk-2H65B4JA.js} +0 -0
  178. /package/dist/tokens/{primitives → components}/navigation.css +0 -0
  179. /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-Cjidhei7.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 };
@@ -0,0 +1,22 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import * as React from 'react';
3
+
4
+ type SkeletonProps = React.HTMLAttributes<HTMLDivElement>;
5
+ declare function Skeleton({ className, ...props }: SkeletonProps): react_jsx_runtime.JSX.Element;
6
+ interface SkeletonRowsProps {
7
+ rows?: number;
8
+ columns?: number;
9
+ className?: string;
10
+ }
11
+ /** Skeleton for a flat list of rows (use inside a Card or section). */
12
+ declare function SkeletonRows({ rows, columns, className }: SkeletonRowsProps): react_jsx_runtime.JSX.Element;
13
+ /** Skeleton matching the DataTable layout — header row + N body rows. */
14
+ declare function SkeletonTable({ rows, columns }: SkeletonRowsProps): react_jsx_runtime.JSX.Element;
15
+ /** Skeleton matching a Card detail layout — title + 6 metadata rows. */
16
+ declare function SkeletonDetail(): react_jsx_runtime.JSX.Element;
17
+ /** Skeleton matching a stat card / dashboard tile. */
18
+ declare function SkeletonStat(): react_jsx_runtime.JSX.Element;
19
+ /** @deprecated Use SkeletonStat. */
20
+ declare const SkeletonCard: typeof SkeletonStat;
21
+
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);
@@ -3,11 +3,11 @@
3
3
  */
4
4
 
5
5
  @layer components {
6
- [data-slot="status-badge"] {
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);
@@ -17,7 +17,7 @@
17
17
  white-space: nowrap;
18
18
  }
19
19
 
20
- [data-slot="status-badge-icon"] {
20
+ [data-slot="badge-icon"] {
21
21
  width: 0.75rem;
22
22
  height: 0.75rem;
23
23
  flex-shrink: 0;
@@ -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
  }
@@ -301,7 +301,7 @@
301
301
  padding-block: var(--card-space-footer-y);
302
302
  }
303
303
 
304
- /* ── CardStat — KPI tile aligned to dashboard design ─────────────── */
304
+ /* ── StatCard — KPI tile aligned to dashboard design ─────────────── */
305
305
  [data-slot="card"][data-stat-card] {
306
306
  padding: var(--card-space-header-y) var(--card-space-inset);
307
307
  }
@@ -313,51 +313,51 @@
313
313
  column-gap: var(--space-inline-md);
314
314
  }
315
315
 
316
- [data-slot="card-stat-body"] {
316
+ [data-slot="stat-card-body"] {
317
317
  min-width: 0;
318
318
  }
319
319
 
320
- [data-slot="card-stat-label"] {
320
+ [data-slot="stat-card-label"] {
321
321
  display: flex;
322
322
  align-items: center;
323
323
  gap: var(--space-inline-xs);
324
324
  color: hsl(var(--muted-foreground));
325
- font-size: var(--card-stat-label-font-size);
326
- font-weight: var(--card-stat-label-font-weight);
327
- letter-spacing: var(--card-stat-label-letter-spacing);
325
+ font-size: var(--stat-card-label-font-size);
326
+ font-weight: var(--stat-card-label-font-weight);
327
+ letter-spacing: var(--stat-card-label-letter-spacing);
328
328
  line-height: var(--line-height-normal);
329
329
  text-transform: uppercase;
330
330
  }
331
331
 
332
- [data-slot="card-stat-label"] svg {
332
+ [data-slot="stat-card-label"] svg {
333
333
  width: 0.875rem;
334
334
  height: 0.875rem;
335
335
  flex-shrink: 0;
336
336
  stroke-width: 1.6;
337
337
  }
338
338
 
339
- [data-slot="card-stat-value-row"] {
339
+ [data-slot="stat-card-value-row"] {
340
340
  display: flex;
341
341
  align-items: baseline;
342
342
  gap: var(--space-inline-sm);
343
- margin-top: var(--card-stat-gap);
343
+ margin-top: var(--stat-card-gap);
344
344
  }
345
345
 
346
- [data-slot="card"][data-stat-align="end"] [data-slot="card-stat-value-row"],
347
- [data-slot="card"][data-stat-layout="inline"] [data-slot="card-stat-value-row"] {
346
+ [data-slot="card"][data-stat-align="end"] [data-slot="stat-card-value-row"],
347
+ [data-slot="card"][data-stat-layout="inline"] [data-slot="stat-card-value-row"] {
348
348
  justify-content: flex-end;
349
349
  text-align: right;
350
350
  }
351
351
 
352
- [data-slot="card-stat-value"] {
353
- font-size: var(--card-stat-value-font-size);
354
- font-weight: var(--card-stat-value-font-weight);
352
+ [data-slot="stat-card-value"] {
353
+ font-size: var(--stat-card-value-font-size);
354
+ font-weight: var(--stat-card-value-font-weight);
355
355
  letter-spacing: var(--letter-spacing-tight);
356
- line-height: var(--card-stat-value-line-height);
356
+ line-height: var(--stat-card-value-line-height);
357
357
  font-variant-numeric: tabular-nums;
358
358
  }
359
359
 
360
- [data-slot="card-stat-delta"] {
360
+ [data-slot="stat-card-delta"] {
361
361
  color: hsl(var(--muted-foreground));
362
362
  font-size: var(--font-size-xs);
363
363
  font-weight: var(--font-weight-medium);
@@ -365,9 +365,9 @@
365
365
  font-variant-numeric: tabular-nums;
366
366
  }
367
367
 
368
- [data-slot="card-stat-hint"] {
369
- margin-top: var(--card-stat-gap);
368
+ [data-slot="stat-card-hint"] {
369
+ margin-top: var(--stat-card-gap);
370
370
  color: hsl(var(--muted-foreground));
371
- font-size: var(--card-stat-hint-font-size);
371
+ font-size: var(--stat-card-hint-font-size);
372
372
  line-height: var(--line-height-normal);
373
373
  }
@@ -3,6 +3,74 @@
3
3
  */
4
4
 
5
5
  @layer components {
6
+ .ui-toggle {
7
+ display: inline-flex;
8
+ align-items: center;
9
+ justify-content: center;
10
+ gap: var(--space-inline-xs);
11
+ border-radius: var(--radius-md);
12
+ color: hsl(var(--foreground));
13
+ font-size: var(--font-size-sm);
14
+ font-weight: var(--font-weight-medium);
15
+ transition:
16
+ background-color 150ms ease,
17
+ border-color 150ms ease,
18
+ color 150ms ease,
19
+ box-shadow 150ms ease;
20
+ }
21
+
22
+ .ui-toggle-default {
23
+ border: 1px solid transparent;
24
+ }
25
+
26
+ .ui-toggle-outline {
27
+ border: 1px solid hsl(var(--border));
28
+ background: hsl(var(--background));
29
+ }
30
+
31
+ .ui-toggle-default-size {
32
+ min-height: var(--control-height);
33
+ padding-inline: var(--space-3);
34
+ }
35
+
36
+ .ui-toggle-sm {
37
+ min-height: var(--control-height-sm);
38
+ padding-inline: var(--space-2);
39
+ font-size: var(--font-size-xs);
40
+ }
41
+
42
+ .ui-toggle-lg {
43
+ min-height: var(--control-height-lg);
44
+ padding-inline: var(--space-4);
45
+ }
46
+
47
+ .ui-toggle:hover {
48
+ background: hsl(var(--accent));
49
+ color: hsl(var(--accent-foreground));
50
+ }
51
+
52
+ .ui-toggle[data-state="on"] {
53
+ background: hsl(var(--primary));
54
+ color: hsl(var(--primary-foreground));
55
+ }
56
+
57
+ .ui-toggle:focus-visible {
58
+ outline: none;
59
+ box-shadow: 0 0 0 3px hsl(var(--ring) / 0.35);
60
+ }
61
+
62
+ .ui-toggle:disabled,
63
+ .ui-toggle[data-disabled] {
64
+ cursor: not-allowed;
65
+ opacity: var(--disabled-opacity);
66
+ }
67
+
68
+ .ui-toggle-group {
69
+ display: inline-flex;
70
+ align-items: center;
71
+ gap: var(--space-1);
72
+ }
73
+
6
74
  .ui-button {
7
75
  display: inline-flex;
8
76
  align-items: center;
@@ -1,67 +1,36 @@
1
1
  @layer components {
2
- .ui-code-badge {
2
+ .ui-avatar {
3
+ position: relative;
3
4
  display: inline-flex;
4
- max-width: 100%;
5
- min-height: var(--code-badge-height);
5
+ width: var(--control-height);
6
+ height: var(--control-height);
7
+ flex-shrink: 0;
6
8
  align-items: center;
7
- gap: var(--code-badge-gap);
8
- padding-inline: var(--code-badge-padding-x);
9
- border: 1px solid hsl(var(--code-badge-hsl) / var(--code-badge-border-alpha));
10
- border-radius: var(--radius);
11
- background: hsl(var(--code-badge-hsl) / var(--code-badge-bg-alpha));
12
- color: hsl(var(--code-badge-hsl));
13
- font-size: var(--font-size-xs);
9
+ justify-content: center;
10
+ overflow: hidden;
11
+ border-radius: 9999px;
12
+ background: hsl(var(--muted));
13
+ color: hsl(var(--muted-foreground));
14
+ font-size: var(--font-size-sm);
14
15
  font-weight: var(--font-weight-medium);
15
- font-variant-numeric: tabular-nums;
16
- }
17
-
18
- .ui-code-badge[data-kind="internal"] {
19
- --code-badge-hsl: var(--tracking-internal);
20
- }
21
-
22
- .ui-code-badge[data-kind="seller"] {
23
- --code-badge-hsl: var(--tracking-seller);
24
16
  }
25
17
 
26
- .ui-code-badge[data-kind="yamato"] {
27
- --code-badge-hsl: var(--tracking-yamato);
28
- }
29
-
30
- .ui-code-badge svg {
31
- width: 0.875rem;
32
- height: 0.875rem;
33
- flex-shrink: 0;
34
- opacity: 0.82;
18
+ .ui-avatar-image {
19
+ width: 100%;
20
+ height: 100%;
21
+ object-fit: cover;
35
22
  }
36
23
 
37
- .ui-code-badge-label {
38
- display: inline-flex;
39
- flex-shrink: 0;
24
+ .ui-avatar-fallback {
25
+ display: flex;
26
+ width: 100%;
27
+ height: 100%;
40
28
  align-items: center;
41
- gap: var(--code-badge-gap);
42
- color: hsl(var(--code-badge-hsl));
43
- font-size: 0.625rem;
44
- font-weight: var(--font-weight-semibold);
45
- letter-spacing: 0;
46
- line-height: 1rem;
47
- text-align: center;
29
+ justify-content: center;
30
+ background: hsl(var(--muted));
48
31
  }
49
32
 
50
- .ui-code-badge-label::after {
51
- width: 1px;
52
- height: 0.875rem;
53
- background: hsl(var(--code-badge-hsl) / var(--code-badge-separator-alpha));
54
- content: "";
55
- }
56
-
57
- .ui-code-badge-value {
58
- min-width: 0;
59
- overflow: hidden;
60
- text-overflow: ellipsis;
61
- white-space: nowrap;
62
- }
63
-
64
- .ui-progress-meter {
33
+ .ui-progress {
65
34
  display: flex;
66
35
  flex-direction: column;
67
36
  gap: var(--space-2);
@@ -80,7 +49,7 @@
80
49
  background: hsl(var(--success));
81
50
  }
82
51
 
83
- .ui-progress-meter[data-tone="warning"] .ui-progress-bar {
52
+ .ui-progress[data-tone="warning"] .ui-progress-bar {
84
53
  background: hsl(var(--warning));
85
54
  }
86
55
 
@@ -216,31 +185,4 @@
216
185
  font-size: var(--font-size-sm);
217
186
  }
218
187
 
219
- .ui-scan-panel {
220
- display: grid;
221
- aspect-ratio: 1 / 1;
222
- place-items: center;
223
- border: 2px dashed hsl(var(--primary) / 0.3);
224
- border-radius: calc(var(--radius) + 0.25rem);
225
- background: hsl(var(--primary) / 0.05);
226
- text-align: center;
227
- }
228
-
229
- .ui-scan-panel svg {
230
- width: 4rem;
231
- height: 4rem;
232
- margin-inline: auto;
233
- color: hsl(var(--primary));
234
- }
235
-
236
- .ui-scan-title {
237
- margin-top: var(--space-3);
238
- font-size: var(--font-size-lg);
239
- font-weight: var(--font-weight-semibold);
240
- }
241
-
242
- .ui-scan-description {
243
- color: hsl(var(--muted-foreground));
244
- font-size: var(--font-size-sm);
245
- }
246
188
  }
@@ -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
  }