@godxjp/ui 7.0.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 (154) 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-HKD6ERY7.js +1 -0
  17. package/dist/{chunk-V6UWJKZF.js → chunk-HTEL5DQI.js} +1 -1
  18. package/dist/{chunk-ICM6XBST.js → chunk-IBK5D2Q6.js} +2 -1
  19. package/dist/{chunk-IK7I3ABN.js → chunk-IOGU3ZWF.js} +2 -2
  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-TILFZBTE.js +50 -0
  30. package/dist/{chunk-6UFKWOEW.js → chunk-TMDGV4CN.js} +15 -11
  31. package/dist/{chunk-7AMHT5Z5.js → chunk-UIYEAUWA.js} +30 -13
  32. package/dist/{chunk-25ZZ2W3M.js → chunk-WN52SCGE.js} +5 -5
  33. package/dist/{chunk-EQRQM6RF.js → chunk-WTVLZVBA.js} +28 -8
  34. package/dist/{chunk-Y3XBNUTD.js → chunk-XDUZ7JJL.js} +2 -2
  35. package/dist/chunk-XMBCNMJI.js +61 -0
  36. package/dist/{chunk-RVY4F7LK.js → chunk-XZM2GNAY.js} +7 -7
  37. package/dist/{chunk-NTUHJ37K.js → chunk-Z6HNY2PL.js} +9 -9
  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 +6 -6
  44. package/dist/components/data-display/index.js +8 -8
  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 +11 -21
  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 +6 -6
  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 +10 -10
  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 +2 -2
  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/density.css +10 -10
  132. package/dist/styles/dialog-layout.css +4 -4
  133. package/dist/styles/index.css +6 -9
  134. package/dist/styles/layout.css +95 -14
  135. package/dist/styles/table-layout.css +3 -3
  136. package/dist/theme/example.service.css +0 -5
  137. package/dist/tokens/base.css +7 -7
  138. package/dist/tokens/components/badge.css +7 -0
  139. package/dist/tokens/{primitives → components}/card.css +2 -3
  140. package/dist/tokens/{primitives → components}/control.css +10 -0
  141. package/dist/tokens/components/feedback.css +17 -0
  142. package/dist/tokens/{primitives → components}/table.css +2 -2
  143. package/dist/tokens/foundation.css +7 -22
  144. package/package.json +5 -3
  145. package/scripts/ui-audit.mjs +22 -0
  146. package/dist/chunk-S66TJXJU.js +0 -33
  147. package/dist/filter-bar-zSKz7YCR.d.ts +0 -10
  148. package/dist/inline-CV3A46np.d.ts +0 -10
  149. package/dist/layout.prop-4TCNvyQZ.d.ts +0 -20
  150. package/dist/tokens/primitives/badge.css +0 -13
  151. package/dist/tokens/primitives/feedback.css +0 -17
  152. /package/dist/{chunk-LDSLS6HE.js → chunk-2H65B4JA.js} +0 -0
  153. /package/dist/tokens/{primitives → components}/navigation.css +0 -0
  154. /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
  }
@@ -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
  }
@@ -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);
@@ -1,6 +1,6 @@
1
1
  /*
2
- * LAYOUT — Stack / Inline / Page shell / EmptyState.
3
- * Apps: <Stack gap> · <Inline gap> · <PageContainer> — never ui-stack-* or Tailwind gap-*.
2
+ * LAYOUT — Flex / Page shell / EmptyState.
3
+ * Apps: <Flex gap> · <PageContainer> — never ui-flex-* or Tailwind gap-*.
4
4
  */
5
5
 
6
6
  @layer components {
@@ -23,26 +23,102 @@
23
23
  overflow: hidden;
24
24
  }
25
25
 
26
+ .ui-flex,
26
27
  .ui-stack-xs {
27
28
  display: flex;
29
+ }
30
+
31
+ .ui-flex[data-direction="row"] {
32
+ flex-direction: row;
33
+ }
34
+
35
+ .ui-flex[data-direction="col"] {
28
36
  flex-direction: column;
37
+ }
38
+
39
+ .ui-flex[data-wrap="true"] {
40
+ flex-wrap: wrap;
41
+ }
42
+
43
+ .ui-flex[data-align="start"] {
44
+ align-items: flex-start;
45
+ }
46
+
47
+ .ui-flex[data-align="center"] {
48
+ align-items: center;
49
+ }
50
+
51
+ .ui-flex[data-align="end"] {
52
+ align-items: flex-end;
53
+ }
54
+
55
+ .ui-flex[data-align="stretch"] {
56
+ align-items: stretch;
57
+ }
58
+
59
+ .ui-flex[data-align="baseline"] {
60
+ align-items: baseline;
61
+ }
62
+
63
+ .ui-flex[data-justify="start"] {
64
+ justify-content: flex-start;
65
+ }
66
+
67
+ .ui-flex[data-justify="center"] {
68
+ justify-content: center;
69
+ }
70
+
71
+ .ui-flex[data-justify="end"] {
72
+ justify-content: flex-end;
73
+ }
74
+
75
+ .ui-flex[data-justify="between"] {
76
+ justify-content: space-between;
77
+ }
78
+
79
+ .ui-flex[data-justify="around"] {
80
+ justify-content: space-around;
81
+ }
82
+
83
+ .ui-flex[data-justify="evenly"] {
84
+ justify-content: space-evenly;
85
+ }
86
+
87
+ .ui-flex-gap-xs,
88
+ .ui-stack-xs {
29
89
  gap: var(--space-stack-xs);
30
90
  }
91
+ .ui-flex-gap-sm {
92
+ gap: var(--space-stack-sm);
93
+ }
94
+
31
95
  .ui-stack-sm {
32
96
  display: flex;
33
97
  flex-direction: column;
34
98
  gap: var(--space-stack-sm);
35
99
  }
100
+ .ui-flex-gap-md {
101
+ gap: var(--space-stack-md);
102
+ }
103
+
36
104
  .ui-stack-md {
37
105
  display: flex;
38
106
  flex-direction: column;
39
107
  gap: var(--space-stack-md);
40
108
  }
109
+ .ui-flex-gap-lg {
110
+ gap: var(--space-stack-lg);
111
+ }
112
+
41
113
  .ui-stack-lg {
42
114
  display: flex;
43
115
  flex-direction: column;
44
116
  gap: var(--space-stack-lg);
45
117
  }
118
+ .ui-flex-gap-xl {
119
+ gap: var(--space-stack-xl);
120
+ }
121
+
46
122
  .ui-stack-xl {
47
123
  display: flex;
48
124
  flex-direction: column;
@@ -85,23 +161,20 @@
85
161
  }
86
162
 
87
163
  @container (min-width: 640px) {
88
- .ui-responsive-grid[data-columns="2"] {
89
- grid-template-columns: repeat(2, minmax(0, 1fr));
164
+ .ui-responsive-grid {
165
+ grid-template-columns: repeat(var(--responsive-grid-sm, 2), minmax(0, 1fr));
90
166
  }
167
+ }
91
168
 
92
- .ui-responsive-grid[data-columns="3"],
93
- .ui-responsive-grid[data-columns="4"] {
94
- grid-template-columns: repeat(2, minmax(0, 1fr));
169
+ @container (min-width: 768px) {
170
+ .ui-responsive-grid {
171
+ grid-template-columns: repeat(var(--responsive-grid-md, 3), minmax(0, 1fr));
95
172
  }
96
173
  }
97
174
 
98
175
  @container (min-width: 1024px) {
99
- .ui-responsive-grid[data-columns="3"] {
100
- grid-template-columns: repeat(3, minmax(0, 1fr));
101
- }
102
-
103
- .ui-responsive-grid[data-columns="4"] {
104
- grid-template-columns: repeat(4, minmax(0, 1fr));
176
+ .ui-responsive-grid {
177
+ grid-template-columns: repeat(var(--responsive-grid-lg, 4), minmax(0, 1fr));
105
178
  }
106
179
  }
107
180
 
@@ -149,6 +222,7 @@
149
222
  padding-right: var(--space-page-active-x);
150
223
  }
151
224
 
225
+ .ui-page-container-inset,
152
226
  .ui-page-inset {
153
227
  padding-left: var(--space-page-active-x);
154
228
  padding-right: var(--space-page-active-x);
@@ -306,7 +380,7 @@
306
380
  align-items: center;
307
381
  gap: var(--space-stack-md);
308
382
  text-align: center;
309
- padding: var(--space-empty-state-y) var(--space-empty-state-x);
383
+ padding: var(--empty-state-space-y) var(--empty-state-space-x);
310
384
  }
311
385
 
312
386
  .ui-empty-state-title {
@@ -378,6 +452,7 @@
378
452
  font-variant-numeric: tabular-nums;
379
453
  }
380
454
 
455
+ .ui-toolbar,
381
456
  .ui-filter-bar {
382
457
  display: flex;
383
458
  flex-direction: column;
@@ -386,34 +461,40 @@
386
461
  }
387
462
 
388
463
  @media (min-width: 640px) {
464
+ .ui-toolbar,
389
465
  .ui-filter-bar {
390
466
  flex-flow: row wrap;
391
467
  align-items: flex-end;
392
468
  }
393
469
  }
394
470
 
471
+ .ui-toolbar-clear,
395
472
  .ui-filter-clear {
396
473
  width: 100%;
397
474
  }
398
475
 
399
476
  @media (min-width: 640px) {
477
+ .ui-toolbar-clear,
400
478
  .ui-filter-clear {
401
479
  width: auto;
402
480
  margin-left: auto;
403
481
  }
404
482
  }
405
483
 
484
+ .ui-toolbar-group,
406
485
  .ui-filter-group {
407
486
  min-width: 0;
408
487
  width: 100%;
409
488
  }
410
489
 
411
490
  @media (min-width: 640px) {
491
+ .ui-toolbar-group,
412
492
  .ui-filter-group {
413
493
  width: auto;
414
494
  }
415
495
  }
416
496
 
497
+ .ui-toolbar-label,
417
498
  .ui-filter-label {
418
499
  color: hsl(var(--muted-foreground));
419
500
  font-size: var(--filter-label-font-size);
@@ -5,7 +5,7 @@
5
5
  @layer components {
6
6
  [data-slot="table-head"] {
7
7
  height: var(--table-row-height);
8
- padding: var(--table-cell-padding-y) var(--space-table-cell-x);
8
+ padding: var(--table-cell-padding-y) var(--table-cell-space-x);
9
9
  text-align: left;
10
10
  vertical-align: middle;
11
11
  background: hsl(var(--secondary));
@@ -27,7 +27,7 @@
27
27
  }
28
28
 
29
29
  [data-slot="table-cell"] {
30
- padding: var(--table-cell-padding-y) var(--space-table-cell-x);
30
+ padding: var(--table-cell-padding-y) var(--table-cell-space-x);
31
31
  vertical-align: middle;
32
32
  /* Don't let a narrow column crush cell text — in CJK this collapses to one
33
33
  * character per line. Keep each cell on one line; the scroll container
@@ -91,7 +91,7 @@
91
91
  }
92
92
 
93
93
  [data-slot="card-content"][data-flush] .ui-data-table-toolbar {
94
- border-bottom: 1px solid hsl(var(--card-border-token));
94
+ border-bottom: 1px solid hsl(var(--card-border));
95
95
  padding: var(--card-space-header-y) var(--card-space-inset);
96
96
  }
97
97
 
@@ -19,11 +19,6 @@
19
19
  /* --info: 223 42% 50%; */
20
20
  /* --attention: 24 99% 46%; */
21
21
 
22
- /* Tracking-code identity (optional — do not reuse for status): */
23
- /* --tracking-internal: 211 73% 15%; */
24
- /* --tracking-seller: 44 5% 42%; */
25
- /* --tracking-yamato: 24 99% 46%; */
26
-
27
22
  /* Layout density (optional): */
28
23
  /* --space-page-x: var(--space-8); */
29
24
 
@@ -4,10 +4,10 @@
4
4
  */
5
5
 
6
6
  @import "./foundation.css";
7
- @import "./primitives/layout.css";
8
- @import "./primitives/control.css";
9
- @import "./primitives/card.css";
10
- @import "./primitives/table.css";
11
- @import "./primitives/feedback.css";
12
- @import "./primitives/badge.css";
13
- @import "./primitives/navigation.css";
7
+ @import "./semantic/layout.css";
8
+ @import "./components/control.css";
9
+ @import "./components/card.css";
10
+ @import "./components/table.css";
11
+ @import "./components/feedback.css";
12
+ @import "./components/badge.css";
13
+ @import "./components/navigation.css";
@@ -0,0 +1,7 @@
1
+ /* Badge component tokens. */
2
+
3
+ :root {
4
+ --badge-space-gap: var(--space-inline-xs);
5
+ --badge-space-x: var(--space-2);
6
+ --badge-space-y: var(--space-1);
7
+ }