sherick-ui 2.2.0 → 2.4.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 (149) hide show
  1. package/README.md +1 -1
  2. package/dist/cjs/components/Badge.cjs +1 -1
  3. package/dist/cjs/components/Badge.cjs.map +1 -1
  4. package/dist/cjs/components/Button.cjs +11 -2
  5. package/dist/cjs/components/Button.cjs.map +1 -1
  6. package/dist/cjs/components/Calendar.cjs +2 -2
  7. package/dist/cjs/components/Calendar.cjs.map +1 -1
  8. package/dist/cjs/components/Card.cjs +3 -2
  9. package/dist/cjs/components/Card.cjs.map +1 -1
  10. package/dist/cjs/components/Checkbox.cjs +3 -1
  11. package/dist/cjs/components/Checkbox.cjs.map +1 -1
  12. package/dist/cjs/components/Chip.cjs +3 -3
  13. package/dist/cjs/components/Chip.cjs.map +1 -1
  14. package/dist/cjs/components/Combobox.cjs +1 -1
  15. package/dist/cjs/components/Combobox.cjs.map +1 -1
  16. package/dist/cjs/components/Command.cjs +3 -3
  17. package/dist/cjs/components/Command.cjs.map +1 -1
  18. package/dist/cjs/components/CommandPalette.cjs +1 -1
  19. package/dist/cjs/components/CommandPalette.cjs.map +1 -1
  20. package/dist/cjs/components/DateRangePicker.cjs +1 -1
  21. package/dist/cjs/components/DateRangePicker.cjs.map +1 -1
  22. package/dist/cjs/components/DialogHeader.cjs +1 -1
  23. package/dist/cjs/components/DialogHeader.cjs.map +1 -1
  24. package/dist/cjs/components/Drawer.cjs +1 -1
  25. package/dist/cjs/components/Drawer.cjs.map +1 -1
  26. package/dist/cjs/components/Field.cjs +1 -1
  27. package/dist/cjs/components/Field.cjs.map +1 -1
  28. package/dist/cjs/components/FileUpload.cjs +3 -3
  29. package/dist/cjs/components/FileUpload.cjs.map +1 -1
  30. package/dist/cjs/components/IconButton.cjs +1 -1
  31. package/dist/cjs/components/IconButton.cjs.map +1 -1
  32. package/dist/cjs/components/Input.cjs +1 -1
  33. package/dist/cjs/components/Input.cjs.map +1 -1
  34. package/dist/cjs/components/NavItem.cjs +3 -3
  35. package/dist/cjs/components/NavItem.cjs.map +1 -1
  36. package/dist/cjs/components/NumberField.cjs +2 -2
  37. package/dist/cjs/components/NumberField.cjs.map +1 -1
  38. package/dist/cjs/components/Pagination.cjs +1 -1
  39. package/dist/cjs/components/Pagination.cjs.map +1 -1
  40. package/dist/cjs/components/Progress.cjs +7 -4
  41. package/dist/cjs/components/Progress.cjs.map +1 -1
  42. package/dist/cjs/components/RadioGroup.cjs +1 -1
  43. package/dist/cjs/components/RadioGroup.cjs.map +1 -1
  44. package/dist/cjs/components/Search.cjs +4 -1
  45. package/dist/cjs/components/Search.cjs.map +1 -1
  46. package/dist/cjs/components/Select.cjs +1 -1
  47. package/dist/cjs/components/Select.cjs.map +1 -1
  48. package/dist/cjs/components/Slider.cjs +1 -1
  49. package/dist/cjs/components/Slider.cjs.map +1 -1
  50. package/dist/cjs/components/Stepper.cjs +5 -1
  51. package/dist/cjs/components/Stepper.cjs.map +1 -1
  52. package/dist/cjs/components/Table.cjs +1 -1
  53. package/dist/cjs/components/Table.cjs.map +1 -1
  54. package/dist/cjs/components/Tabs.cjs +1 -1
  55. package/dist/cjs/components/Tabs.cjs.map +1 -1
  56. package/dist/cjs/components/Textarea.cjs +1 -1
  57. package/dist/cjs/components/Textarea.cjs.map +1 -1
  58. package/dist/cjs/components/Toast.cjs +5 -2
  59. package/dist/cjs/components/Toast.cjs.map +1 -1
  60. package/dist/cjs/components/Tooltip.cjs +1 -1
  61. package/dist/cjs/components/Tooltip.cjs.map +1 -1
  62. package/dist/cjs/components/TreeView.cjs +43 -10
  63. package/dist/cjs/components/TreeView.cjs.map +1 -1
  64. package/dist/cjs/components/date-field.cjs +2 -2
  65. package/dist/cjs/components/date-field.cjs.map +1 -1
  66. package/dist/cjs/components/ui.common.cjs +197 -88
  67. package/dist/cjs/components/ui.common.cjs.map +1 -1
  68. package/dist/cjs/components/ui.motion.cjs +43 -14
  69. package/dist/cjs/components/ui.motion.cjs.map +1 -1
  70. package/dist/cjs/dev.cjs +10 -0
  71. package/dist/cjs/dev.cjs.map +1 -1
  72. package/dist/esm/components/Badge.js +2 -2
  73. package/dist/esm/components/Badge.js.map +1 -1
  74. package/dist/esm/components/Button.js +12 -3
  75. package/dist/esm/components/Button.js.map +1 -1
  76. package/dist/esm/components/Calendar.js +3 -3
  77. package/dist/esm/components/Calendar.js.map +1 -1
  78. package/dist/esm/components/Card.js +4 -3
  79. package/dist/esm/components/Card.js.map +1 -1
  80. package/dist/esm/components/Checkbox.js +3 -1
  81. package/dist/esm/components/Checkbox.js.map +1 -1
  82. package/dist/esm/components/Chip.js +3 -3
  83. package/dist/esm/components/Chip.js.map +1 -1
  84. package/dist/esm/components/CodeBlock.js +5 -4
  85. package/dist/esm/components/CodeBlock.js.map +1 -1
  86. package/dist/esm/components/Combobox.js +3 -3
  87. package/dist/esm/components/Combobox.js.map +1 -1
  88. package/dist/esm/components/Command.js +4 -4
  89. package/dist/esm/components/Command.js.map +1 -1
  90. package/dist/esm/components/CommandPalette.js +2 -2
  91. package/dist/esm/components/CommandPalette.js.map +1 -1
  92. package/dist/esm/components/DateRangePicker.js +2 -2
  93. package/dist/esm/components/DateRangePicker.js.map +1 -1
  94. package/dist/esm/components/DialogHeader.js +2 -2
  95. package/dist/esm/components/DialogHeader.js.map +1 -1
  96. package/dist/esm/components/Drawer.js +2 -2
  97. package/dist/esm/components/Drawer.js.map +1 -1
  98. package/dist/esm/components/Field.js +2 -2
  99. package/dist/esm/components/Field.js.map +1 -1
  100. package/dist/esm/components/FileUpload.js +4 -4
  101. package/dist/esm/components/FileUpload.js.map +1 -1
  102. package/dist/esm/components/IconButton.js +1 -1
  103. package/dist/esm/components/IconButton.js.map +1 -1
  104. package/dist/esm/components/Input.js +2 -2
  105. package/dist/esm/components/Input.js.map +1 -1
  106. package/dist/esm/components/Markdown.js +3 -2
  107. package/dist/esm/components/Markdown.js.map +1 -1
  108. package/dist/esm/components/NavItem.js +5 -5
  109. package/dist/esm/components/NavItem.js.map +1 -1
  110. package/dist/esm/components/NumberField.js +3 -3
  111. package/dist/esm/components/NumberField.js.map +1 -1
  112. package/dist/esm/components/Pagination.js +2 -2
  113. package/dist/esm/components/Pagination.js.map +1 -1
  114. package/dist/esm/components/Progress.js +8 -5
  115. package/dist/esm/components/Progress.js.map +1 -1
  116. package/dist/esm/components/RadioGroup.js +2 -2
  117. package/dist/esm/components/RadioGroup.js.map +1 -1
  118. package/dist/esm/components/Search.js +5 -2
  119. package/dist/esm/components/Search.js.map +1 -1
  120. package/dist/esm/components/Select.js +3 -3
  121. package/dist/esm/components/Select.js.map +1 -1
  122. package/dist/esm/components/Slider.js +1 -1
  123. package/dist/esm/components/Slider.js.map +1 -1
  124. package/dist/esm/components/Stepper.js +6 -2
  125. package/dist/esm/components/Stepper.js.map +1 -1
  126. package/dist/esm/components/Table.js +2 -2
  127. package/dist/esm/components/Table.js.map +1 -1
  128. package/dist/esm/components/Tabs.js +2 -2
  129. package/dist/esm/components/Tabs.js.map +1 -1
  130. package/dist/esm/components/Textarea.js +2 -2
  131. package/dist/esm/components/Textarea.js.map +1 -1
  132. package/dist/esm/components/Toast.js +6 -3
  133. package/dist/esm/components/Toast.js.map +1 -1
  134. package/dist/esm/components/Tooltip.js +2 -2
  135. package/dist/esm/components/Tooltip.js.map +1 -1
  136. package/dist/esm/components/TreeView.js +45 -12
  137. package/dist/esm/components/TreeView.js.map +1 -1
  138. package/dist/esm/components/date-field.js +3 -3
  139. package/dist/esm/components/date-field.js.map +1 -1
  140. package/dist/esm/components/ui.common.js +194 -90
  141. package/dist/esm/components/ui.common.js.map +1 -1
  142. package/dist/esm/components/ui.motion.js +39 -15
  143. package/dist/esm/components/ui.motion.js.map +1 -1
  144. package/dist/esm/dev.js +2 -2
  145. package/dist/styles.css +339 -110
  146. package/dist/theme.css +40 -7
  147. package/dist/types/dev.d.cts +88 -56
  148. package/dist/types/dev.d.ts +88 -56
  149. package/package.json +1 -1
package/dist/theme.css CHANGED
@@ -11,9 +11,17 @@
11
11
  --sui-ink: 0.245 0.018 260;
12
12
  --sui-ink-muted: 0.480 0.018 260;
13
13
  --sui-detail: 0.600 0.016 258;
14
+ --sui-rim: 0.630 0.016 258;
14
15
  --sui-primary: 0.422 0.139 255;
15
16
  --sui-primary-strong: 0.402 0.143 257;
16
- --sui-primary-soft: 0.91 0.035 255;
17
+ --sui-primary-soft: 0.920 0.035 255;
18
+ --sui-primary-selected: 0.860 0.055 255;
19
+ --sui-danger-soft: 0.930 0.030 18;
20
+ --sui-danger-selected: 0.870 0.050 18;
21
+ --sui-warning-soft: 0.940 0.045 85;
22
+ --sui-warning-selected: 0.885 0.070 82;
23
+ --sui-success-soft: 0.935 0.037 155;
24
+ --sui-success-selected: 0.875 0.055 155;
17
25
  --sui-accent: 0.62 0.10 215;
18
26
  --sui-danger: 0.439 0.170 25;
19
27
  --sui-warning: 0.388 0.082 75;
@@ -29,12 +37,12 @@
29
37
  --sui-light-top: 1 0 0;
30
38
  --sui-light-bottom: 0.32 0.02 256;
31
39
  --sui-elevation-flat: none;
32
- --sui-elevation-raised: 0 1px 2px oklch(var(--sui-light-bottom) / 0.16), 0 4px 13px oklch(var(--sui-light-bottom) / 0.09);
40
+ --sui-elevation-raised: 0 1px 2px oklch(var(--sui-light-bottom) / 0.16), 0 2px 6px oklch(var(--sui-light-bottom) / 0.07);
33
41
  --sui-elevation-floating: 0 16px 40px oklch(var(--sui-light-bottom) / 0.20), inset 0 1px 0 oklch(var(--sui-light-top) / 0.70);
34
42
  --sui-elevation-control: 0 1px 2px oklch(var(--sui-light-bottom) / 0.19), inset 0 1px 0 oklch(var(--sui-light-top) / 0.55);
35
43
  --sui-elevation-recessed: inset 0 1px 3px oklch(var(--sui-light-bottom) / 0.22), inset 0 -1px 0 oklch(var(--sui-light-top) / 0.50);
36
44
  --sui-elevation-recessed-top: inset 0 5px 8px -5px oklch(var(--sui-light-bottom) / 0.21);
37
- --sui-elevation-well: inset 0 3px 4px oklch(var(--sui-light-bottom) / 0.62), inset 0 -1px 0 oklch(var(--sui-light-top) / 0.50);
45
+ --sui-elevation-well: inset 0 2px 4px oklch(var(--sui-light-bottom) / 0.40), inset 0 -1px 0 oklch(var(--sui-light-top) / 0.50);
38
46
  --sui-glass-fill: 0.98;
39
47
  --sui-glass-blur: 28px;
40
48
  --sui-glass-saturation: 1.06;
@@ -71,9 +79,17 @@
71
79
  --sui-ink: 0.94 0.008 255;
72
80
  --sui-ink-muted: 0.76 0.014 255;
73
81
  --sui-detail: 0.600 0.014 256;
82
+ --sui-rim: 0.555 0.014 256;
74
83
  --sui-primary: 0.809 0.098 255;
75
84
  --sui-primary-strong: 0.734 0.139 257;
76
- --sui-primary-soft: 0.42 0.055 257;
85
+ --sui-primary-soft: 0.325 0.050 257;
86
+ --sui-primary-selected: 0.400 0.075 257;
87
+ --sui-danger-soft: 0.315 0.050 22;
88
+ --sui-danger-selected: 0.395 0.070 22;
89
+ --sui-warning-soft: 0.320 0.045 78;
90
+ --sui-warning-selected: 0.400 0.065 78;
91
+ --sui-success-soft: 0.315 0.045 160;
92
+ --sui-success-selected: 0.395 0.065 160;
77
93
  --sui-accent: 0.80 0.08 215;
78
94
  --sui-danger: 0.799 0.115 25;
79
95
  --sui-warning: 0.82 0.12 80;
@@ -94,7 +110,7 @@
94
110
  --sui-elevation-control: 0 1px 2px oklch(var(--sui-light-bottom) / 0.30), inset 0 1px 0 oklch(var(--sui-light-top) / 0.08);
95
111
  --sui-elevation-recessed: inset 0 1px 3px oklch(var(--sui-light-bottom) / 0.38), inset 0 -1px 0 oklch(var(--sui-light-top) / 0.06);
96
112
  --sui-elevation-recessed-top: inset 0 5px 8px -5px oklch(var(--sui-light-bottom) / 0.36);
97
- --sui-elevation-well: inset 0 1px 3px oklch(var(--sui-light-bottom) / 0.38), inset 0 -2px 3px oklch(var(--sui-light-top) / 0.40);
113
+ --sui-elevation-well: inset 0 2px 4px oklch(var(--sui-light-bottom) / 0.60), inset 0 -1px 0 oklch(var(--sui-light-top) / 0.06);
98
114
  --sui-glass-fill: 0.98;
99
115
  --sui-glass-blur: 32px;
100
116
  --sui-glass-saturation: 1.10;
@@ -132,9 +148,17 @@
132
148
  --sui-ink: 0.94 0.008 255;
133
149
  --sui-ink-muted: 0.76 0.014 255;
134
150
  --sui-detail: 0.600 0.014 256;
151
+ --sui-rim: 0.555 0.014 256;
135
152
  --sui-primary: 0.809 0.098 255;
136
153
  --sui-primary-strong: 0.734 0.139 257;
137
- --sui-primary-soft: 0.42 0.055 257;
154
+ --sui-primary-soft: 0.325 0.050 257;
155
+ --sui-primary-selected: 0.400 0.075 257;
156
+ --sui-danger-soft: 0.315 0.050 22;
157
+ --sui-danger-selected: 0.395 0.070 22;
158
+ --sui-warning-soft: 0.320 0.045 78;
159
+ --sui-warning-selected: 0.400 0.065 78;
160
+ --sui-success-soft: 0.315 0.045 160;
161
+ --sui-success-selected: 0.395 0.065 160;
138
162
  --sui-accent: 0.80 0.08 215;
139
163
  --sui-danger: 0.799 0.115 25;
140
164
  --sui-warning: 0.82 0.12 80;
@@ -155,7 +179,7 @@
155
179
  --sui-elevation-control: 0 1px 2px oklch(var(--sui-light-bottom) / 0.30), inset 0 1px 0 oklch(var(--sui-light-top) / 0.08);
156
180
  --sui-elevation-recessed: inset 0 1px 3px oklch(var(--sui-light-bottom) / 0.38), inset 0 -1px 0 oklch(var(--sui-light-top) / 0.06);
157
181
  --sui-elevation-recessed-top: inset 0 5px 8px -5px oklch(var(--sui-light-bottom) / 0.36);
158
- --sui-elevation-well: inset 0 1px 3px oklch(var(--sui-light-bottom) / 0.38), inset 0 -2px 3px oklch(var(--sui-light-top) / 0.40);
182
+ --sui-elevation-well: inset 0 2px 4px oklch(var(--sui-light-bottom) / 0.60), inset 0 -1px 0 oklch(var(--sui-light-top) / 0.06);
159
183
  --sui-glass-fill: 0.98;
160
184
  --sui-glass-blur: 32px;
161
185
  --sui-glass-saturation: 1.10;
@@ -184,11 +208,20 @@
184
208
  }
185
209
 
186
210
  :root {
211
+ --sui-font-mono: ui-monospace, "SF Mono", SFMono-Regular, "Cascadia Code", "JetBrains Mono", Menlo, Consolas, "Liberation Mono", monospace;
212
+ --sui-rim-dashed: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg'%3E%3Crect width='100%25' height='100%25' rx='16' fill='none' stroke='%23000' stroke-width='3' stroke-dasharray='7' stroke-linecap='round'/%3E%3C/svg%3E");
187
213
  --sui-duration-press: 150ms;
188
214
  --sui-duration-release: 200ms;
215
+ --sui-duration-tactile: 80ms;
189
216
  --sui-duration-overlay: 240ms;
190
217
  --sui-duration-overlay-exit: 160ms;
218
+ --sui-duration-travel: 300ms;
219
+ --sui-duration-sheet: 320ms;
220
+ --sui-duration-sheet-exit: 200ms;
191
221
  --sui-duration-activity: 1400ms;
222
+ --sui-duration-spin: 1000ms;
223
+ --sui-duration-pulse: 2000ms;
224
+ --sui-ease-pulse: cubic-bezier(0.4, 0, 0.6, 1);
192
225
  --sui-ease-press: cubic-bezier(0.4, 0, 0.2, 1);
193
226
  --sui-ease-release: cubic-bezier(0.16, 1, 0.3, 1);
194
227
  --sui-ease-exit: cubic-bezier(0.4, 0, 1, 1);
@@ -17,13 +17,13 @@ declare const elevation: {
17
17
  };
18
18
  declare const recessedTop = "shadow-sherick-recessed-top";
19
19
  declare const shape: {
20
- readonly control: "rounded-[1.25rem]";
21
- readonly mark: "rounded-[0.625rem]";
22
- readonly row: "rounded-[0.875rem]";
23
- readonly prominent: "rounded-[1.5rem]";
24
- readonly surface: "rounded-[1.75rem]";
25
- readonly sheet: "rounded-[1.25rem]";
26
- readonly expressive: "rounded-[2rem]";
20
+ readonly control: "rounded-[1rem]";
21
+ readonly mark: "rounded-[0.375rem]";
22
+ readonly row: "rounded-[0.75rem]";
23
+ readonly prominent: "rounded-[1.25rem]";
24
+ readonly surface: "rounded-[1.5rem]";
25
+ readonly sheet: "rounded-[1rem]";
26
+ readonly expressive: "rounded-[1.75rem]";
27
27
  readonly pill: "rounded-full";
28
28
  readonly circle: "rounded-full";
29
29
  };
@@ -32,6 +32,13 @@ declare const edgeTone: {
32
32
  readonly header: "border-sherick-edge/[0.10]";
33
33
  readonly rule: "border-sherick-edge/[0.075]";
34
34
  };
35
+ declare const rim: {
36
+ readonly field: "border-[1.5px] border-sherick-rim";
37
+ readonly fieldError: "border-[1.5px] border-sherick-danger";
38
+ readonly dashed: string;
39
+ readonly dashedHover: "hover:after:bg-sherick-ink-muted";
40
+ readonly dashedDragging: "data-[dragging]:after:bg-sherick-primary";
41
+ };
35
42
  declare const edge: {
36
43
  readonly row: string;
37
44
  readonly header: string;
@@ -49,25 +56,27 @@ declare const state: {
49
56
  readonly text: "cursor-text";
50
57
  readonly rowHover: "hover:bg-sherick-ink/[0.05]";
51
58
  readonly field: {
52
- readonly hover: "hover:bg-sherick-surface-high/[0.82]";
53
- readonly focus: "focus:bg-sherick-surface-high/[0.9]";
54
- readonly focusWithin: "[&&]:focus-within:bg-sherick-surface-high/[0.9]";
55
- readonly engaged: "bg-sherick-surface-high/[0.9]";
56
- readonly errorHover: "hover:bg-sherick-danger/[0.10]";
57
- readonly errorFocus: "focus:bg-sherick-danger/[0.13]";
58
- readonly errorEngaged: "bg-sherick-danger/[0.13]";
59
- readonly invalid: "data-[invalid]:bg-sherick-danger/[0.075]";
60
- readonly invalidHover: "data-[invalid]:hover:bg-sherick-danger/[0.10]";
61
- readonly invalidEngaged: "data-[invalid]:bg-sherick-danger/[0.13]";
62
- readonly invalidFocusWithin: "[&&]:data-[invalid]:focus-within:bg-sherick-danger/[0.13]";
59
+ readonly hover: "hover:bg-sherick-canvas/[0.85] hover:border-sherick-ink-muted";
60
+ readonly focus: "focus:bg-sherick-canvas focus:border-sherick-ink-muted";
61
+ readonly focusWithin: "[&&]:focus-within:bg-sherick-canvas [&&]:focus-within:border-sherick-ink-muted";
62
+ readonly engaged: "bg-sherick-canvas border-sherick-ink-muted";
63
+ readonly errorHover: "hover:bg-sherick-canvas/[0.85]";
64
+ readonly errorFocus: "focus:bg-sherick-canvas";
65
+ readonly errorEngaged: "bg-sherick-canvas";
66
+ readonly invalid: "data-[invalid]:border-sherick-danger";
67
+ readonly invalidHover: "data-[invalid]:hover:border-sherick-danger";
68
+ readonly invalidEngaged: "data-[invalid]:border-sherick-danger";
69
+ readonly invalidFocusWithin: "[&&]:data-[invalid]:focus-within:border-sherick-danger";
63
70
  };
64
71
  };
65
72
  declare const stateLayerQuietComposite: string;
66
73
  declare const stateLayer: {
67
74
  readonly quiet: string;
68
75
  readonly tonal: string;
76
+ readonly tonalNeutral: string;
69
77
  readonly filled: string;
70
78
  readonly track: string;
79
+ readonly mark: string;
71
80
  readonly activeRow: "data-[highlighted]:before:opacity-[0.05]";
72
81
  };
73
82
  declare const hitArea = "relative after:pointer-events-auto after:absolute after:inset-[min(0px,calc((100%-2.75rem)/2))] after:content-['']";
@@ -76,8 +85,8 @@ declare const material: {
76
85
  readonly matteQuiet: "bg-sherick-surface/[0.42] text-sherick-ink";
77
86
  readonly matte: "bg-sherick-surface/[0.78] text-sherick-ink";
78
87
  readonly matteHigh: "bg-sherick-surface-high/[0.72] text-sherick-ink";
79
- readonly control: "bg-sherick-surface-high/[0.66] text-sherick-ink placeholder:text-sherick-ink-muted";
80
- readonly controlError: "bg-sherick-danger/[0.075] text-sherick-ink placeholder:text-sherick-danger";
88
+ readonly control: "bg-sherick-canvas/[0.7] text-sherick-ink placeholder:text-sherick-ink-muted";
89
+ readonly controlError: "bg-sherick-canvas/[0.7] text-sherick-ink placeholder:text-sherick-danger";
81
90
  readonly handle: "bg-sherick-ink-muted text-sherick-canvas";
82
91
  readonly acrylic: "bg-sherick-surface-float/[var(--sui-glass-fill)] bg-[image:var(--sui-glass-gradient)] text-sherick-ink backdrop-blur-[var(--sui-glass-blur)] backdrop-saturate-[var(--sui-glass-saturation)] backdrop-brightness-[var(--sui-glass-brightness)]";
83
92
  readonly acrylicDense: "bg-sherick-surface-float/[var(--sui-glass-dense-fill)] bg-[image:var(--sui-glass-gradient-dense)] text-sherick-ink backdrop-blur-[var(--sui-glass-dense-blur)] backdrop-saturate-[var(--sui-glass-dense-saturation)] backdrop-brightness-[var(--sui-glass-dense-brightness)]";
@@ -85,13 +94,31 @@ declare const material: {
85
94
  };
86
95
  declare const mediaCanvas = "bg-sherick-media";
87
96
  declare const matteInset = "bg-sherick-surface-high/[0.35] text-sherick-ink";
97
+ declare const type: {
98
+ readonly control: {
99
+ readonly compact: "text-sm";
100
+ readonly normal: "text-[0.9375rem] leading-[1.375rem]";
101
+ readonly prominent: "text-lg";
102
+ };
103
+ readonly supporting: "text-[0.8125rem] leading-5";
104
+ readonly caption: "text-xs leading-4";
105
+ readonly title: "text-[0.9375rem] leading-[1.375rem] font-semibold";
106
+ readonly heading: "text-xl leading-7 font-semibold tracking-[-0.02em]";
107
+ readonly numeric: "tabular-nums";
108
+ };
88
109
  declare const density: {
89
- readonly compact: "min-h-10 text-sm";
90
- readonly normal: "min-h-12 text-[0.95rem]";
91
- readonly prominent: "min-h-14 text-lg";
110
+ readonly compact: string;
111
+ readonly normal: string;
112
+ readonly prominent: string;
92
113
  readonly target: "min-h-11 min-w-11";
93
114
  readonly part: "min-h-11 min-w-9";
94
115
  };
116
+ declare const iconSlot: {
117
+ readonly caption: "inline-flex size-3.5 shrink-0 items-center justify-center [&>svg]:size-3.5";
118
+ readonly compact: "inline-flex size-4 shrink-0 items-center justify-center [&>svg]:size-4";
119
+ readonly normal: "inline-flex size-5 shrink-0 items-center justify-center [&>svg]:size-5";
120
+ readonly prominent: "inline-flex size-6 shrink-0 items-center justify-center [&>svg]:size-6";
121
+ };
95
122
  declare const stacking: {
96
123
  readonly float: "z-50";
97
124
  readonly notification: "z-[60]";
@@ -168,14 +195,16 @@ declare const tone: {
168
195
  success: string;
169
196
  };
170
197
  };
171
- declare const selectableRowSurface = "has-[[data-checked]]:bg-sherick-primary/[0.22] has-[[data-checked]]:text-sherick-ink has-[[data-checked]]:shadow-sherick-control";
198
+ declare const currentDestination = "bg-sherick-primary-soft text-sherick-ink font-medium";
199
+ declare const selectableRowSurface = "has-[[data-checked]]:bg-sherick-primary-selected has-[[data-checked]]:text-sherick-ink has-[[data-checked]]:shadow-sherick-control";
172
200
  declare const selectable: {
173
201
  readonly surface: string;
174
202
  readonly markSurface: string;
175
203
  readonly rest: string;
176
204
  readonly mark: string;
177
- readonly selected: "group-data-[checked]:bg-sherick-primary-strong group-data-[checked]:text-sherick-on-primary";
178
- readonly indeterminate: "group-data-[indeterminate]:bg-sherick-primary-strong group-data-[indeterminate]:text-sherick-on-primary";
205
+ readonly selected: "group-data-[checked]:bg-sherick-primary-strong group-data-[checked]:text-sherick-on-primary group-data-[checked]:shadow-sherick-flat group-data-[checked]:after:opacity-0";
206
+ readonly indeterminate: "group-data-[indeterminate]:bg-sherick-primary-strong group-data-[indeterminate]:text-sherick-on-primary group-data-[indeterminate]:shadow-sherick-flat group-data-[indeterminate]:after:opacity-0";
207
+ readonly thumb: "bg-current";
179
208
  };
180
209
  declare const recipeAlphas: {
181
210
  readonly state: {
@@ -187,53 +216,45 @@ declare const recipeAlphas: {
187
216
  readonly hover: number;
188
217
  readonly press: number;
189
218
  };
219
+ readonly tonalNeutral: {
220
+ readonly hover: number;
221
+ readonly press: number;
222
+ };
190
223
  readonly filled: {
191
224
  readonly hover: number;
192
225
  readonly press: number;
193
226
  };
227
+ readonly mark: {
228
+ readonly hover: number;
229
+ };
194
230
  };
195
231
  readonly tint: {
196
- readonly soft: {
197
- readonly primary: number;
198
- readonly danger: number;
199
- readonly warning: number;
200
- readonly success: number;
201
- };
202
- readonly selected: {
203
- readonly primary: number;
204
- readonly danger: number;
205
- readonly warning: number;
206
- readonly success: number;
207
- };
232
+ readonly neutralSoft: number;
208
233
  readonly neutralRest: number;
209
234
  };
210
235
  readonly field: {
211
236
  readonly quiet: number;
212
237
  readonly card: number;
238
+ readonly groove: number;
213
239
  readonly control: number;
214
240
  readonly hover: number;
215
241
  readonly engaged: number;
216
- readonly invalid: number;
217
- readonly invalidHover: number;
218
- readonly invalidFocus: number;
219
242
  };
220
243
  };
221
244
  declare const fieldLayout = "flex min-w-0 w-full flex-col [overflow-wrap:anywhere]";
245
+ declare const fieldMessage: {
246
+ readonly description: string;
247
+ readonly error: string;
248
+ };
222
249
 
223
250
  type MotionIntent = "feedback" | "tactile" | "arrive" | "orient" | "relocate" | "direct" | "disclose" | "presence" | "activity";
224
251
  /** Non-spatial feedback: hover, focus, field tone, a highlighted row, a filled surface.
225
252
  * It never translates, scales or resizes; reduced motion simply drops the interpolation
226
253
  * and the state still arrives. */
227
- declare const motionFeedback = "transition-[background-color,color,box-shadow,opacity] duration-press ease-press motion-reduce:transition-none";
228
- /** A control answers a press immediately and settles on its release.
229
- *
230
- * The recipe owns the *amplitude* of that answer as well as its timing, because how far a
231
- * press travels is the system's physical character rather than a component's anatomy: a
232
- * control whose outline is what the user sees compresses 4%, which is about two pixels at the
233
- * size of the ink it moves. A control whose visible ink is far smaller than the target it is
234
- * aimed at takes `motionInkPress` on that ink instead, so the target itself never moves. The
235
- * interpolation and the compression are neutralised together under reduced motion. */
236
- declare const motionTactile = "transition-[background-color,color,box-shadow,transform,opacity] duration-release ease-release active:duration-press active:ease-press motion-safe:[&:not([data-disabled],:disabled,:has(>[role=combobox][data-disabled]))]:active:scale-[0.96] motion-reduce:transition-none";
254
+ declare const motionFeedback = "transition-[background-color,border-color,color,box-shadow,opacity] duration-press ease-press motion-reduce:transition-none";
255
+ declare const motionTactile: string;
256
+ declare const motionTactileWide: string;
257
+ declare const motionTactileField: string;
237
258
  /** The spatial half of a compact press, applied to the *mark* rather than to the control.
238
259
  *
239
260
  * A control whose visible ink is much smaller than the target it is aimed at — a dialog's close
@@ -243,7 +264,7 @@ declare const motionTactile = "transition-[background-color,color,box-shadow,tra
243
264
  * release lands), so the mark takes the twelve percent and the target keeps its geometry. The
244
265
  * target still owns the focus ring and the state layer, and still carries the tone and depth
245
266
  * response, so the boundary a press happens inside never moves. */
246
- declare const motionInkPress = "transition-transform duration-release ease-release group-active:duration-press group-active:ease-press group-active:scale-[0.88] motion-reduce:transition-none motion-reduce:group-active:scale-100";
267
+ declare const motionInkPress = "transition-transform duration-release ease-release group-active:duration-tactile group-active:ease-press group-active:scale-[0.88] motion-reduce:transition-none motion-reduce:group-active:scale-100";
247
268
  /** A meaningful subordinate part arrives. Spring is reserved for this intent: a mark is
248
269
  * made by overshooting the position it lands in. It leaves without the overshoot, and
249
270
  * reduced motion lands it in one step — which takes a *state-specific* override, because the
@@ -260,6 +281,9 @@ declare const motionOrient = "transition-transform duration-release ease-release
260
281
  * settle together, and an interrupted move retargets from wherever it currently is
261
282
  * because it is a transition and not a keyframe. */
262
283
  declare const motionRelocate = "transition-[left,inset-inline-start,top,width,height,transform,background-color,color,box-shadow,opacity] duration-release ease-glide motion-reduce:transition-none";
284
+ /** The same travel across a whole track — a tab indicator — on the longer travel timing, so a
285
+ * movement of hundreds of pixels is followed rather than skipped. */
286
+ declare const motionRelocateLong = "transition-[left,inset-inline-start,top,width,height,transform,background-color,color,box-shadow,opacity] duration-travel ease-glide motion-reduce:transition-none";
263
287
  /** Direct manipulation: the pointer owns the geometry, so a positional transition would be
264
288
  * lag. While the primitive reports a drag, position and size are removed from the
265
289
  * transition list and only tone and engagement geometry remain; a keyboard or programmatic
@@ -284,7 +308,7 @@ declare const motionPresenceTooltip: string;
284
308
  declare const motionPresenceModal: string;
285
309
  /** The plane behind a surface that owns the viewport. Opacity only: a blur or a filter is
286
310
  * never animated, so the plane can never animate the page behind it. */
287
- declare const motionPresenceScrim = "transition-opacity duration-overlay ease-release data-[ending-style]:duration-overlay-exit data-[ending-style]:ease-exit";
311
+ declare const motionPresenceScrim = "transition-opacity duration-overlay ease-release data-[starting-style]:opacity-0 data-[ending-style]:opacity-0 data-[ending-style]:duration-overlay-exit data-[ending-style]:ease-exit";
288
312
  /** Continuous activity is a distinct intent, not an exception to interaction motion: it
289
313
  * reports work rather than answering an event, and it has no entrance of its own. */
290
314
  declare const motionActivitySpin = "animate-spin motion-reduce:animate-none";
@@ -299,8 +323,16 @@ declare const motionActivityPulse = "animate-pulse motion-reduce:animate-none";
299
323
  declare const motionActivityIndeterminate = "animate-sherick-indeterminate [[dir=rtl]_&]:[--sui-indeterminate-direction:-1] motion-reduce:animate-none";
300
324
  /** The state layer is a composited overlay, so its own opacity is the only thing that
301
325
  * moves. Shared here because four interaction states across the library ride it. */
302
- declare const motionStateLayer = "before:transition-opacity before:duration-release before:ease-release active:before:duration-press active:before:ease-press group-active:before:duration-press group-active:before:ease-press motion-reduce:before:transition-none";
303
- declare const motionDisclose = "transition-[height] duration-release ease-release data-[starting-style]:h-0 data-[ending-style]:h-0 motion-reduce:transition-none";
326
+ /** A row in a collection moves its highlight rather than fading it: a highlight is where the reader
327
+ * is, and arrowing through a list with a soft fade on every row leaves a smear of half-lit rows.
328
+ * The row's layer therefore changes in one step, for the pointer and the keyboard alike. */
329
+ declare const motionRowLayer = "before:transition-none";
330
+ /** A rim drawn as an overlay of its own — an empty selection mark's lip, a drop target's dashes —
331
+ * carries its own feedback timing: it steps up on hover and fades as a selection fill arrives,
332
+ * on the same press curve as the surface beneath it. */
333
+ declare const motionRim = "after:transition-[background-color,border-color,opacity] after:duration-press after:ease-press motion-reduce:after:transition-none";
334
+ declare const motionStateLayer = "before:transition-opacity before:duration-release before:ease-release active:before:duration-tactile active:before:ease-press group-active:before:duration-tactile group-active:before:ease-press motion-reduce:before:transition-none";
335
+ declare const motionDisclose = "transition-[height] duration-release ease-release data-[starting-style]:h-0 data-[ending-style]:h-0 data-[ending-style]:duration-overlay-exit data-[ending-style]:ease-exit motion-reduce:transition-none";
304
336
  declare const motionPresenceSheet: string;
305
337
  declare const motionPresenceToast: string;
306
338
 
@@ -311,5 +343,5 @@ declare const motionPresenceToast: string;
311
343
  */
312
344
  declare const cn: (...inputs: ClassValue[]) => string;
313
345
 
314
- export { cn, density, detail, disclosure, edge, edgeTone, elevation, fieldLayout, focusRing, focusRingDrag, focusRingHeld, focusRingInset, focusRingWithin, groupFocusRing, hitArea, list, material, matteInset, mediaCanvas, motionActivityIndeterminate, motionActivityPulse, motionActivitySpin, motionArrive, motionDirect, motionDisclose, motionFeedback, motionInkPress, motionOrient, motionPresenceAnchored, motionPresenceModal, motionPresenceScrim, motionPresenceSheet, motionPresenceToast, motionPresenceTooltip, motionRelocate, motionStateLayer, motionTactile, overlay, parentFocusRingInset, recessedTop, recipeAlphas, selectable, selectableRowSurface, shape, stacking, state, stateLayer, stateLayerQuietComposite, text, tone };
346
+ export { cn, currentDestination, density, detail, disclosure, edge, edgeTone, elevation, fieldLayout, fieldMessage, focusRing, focusRingDrag, focusRingHeld, focusRingInset, focusRingWithin, groupFocusRing, hitArea, iconSlot, list, material, matteInset, mediaCanvas, motionActivityIndeterminate, motionActivityPulse, motionActivitySpin, motionArrive, motionDirect, motionDisclose, motionFeedback, motionInkPress, motionOrient, motionPresenceAnchored, motionPresenceModal, motionPresenceScrim, motionPresenceSheet, motionPresenceToast, motionPresenceTooltip, motionRelocate, motionRelocateLong, motionRim, motionRowLayer, motionStateLayer, motionTactile, motionTactileField, motionTactileWide, overlay, parentFocusRingInset, recessedTop, recipeAlphas, rim, selectable, selectableRowSurface, shape, stacking, state, stateLayer, stateLayerQuietComposite, text, tone, type };
315
347
  export type { MotionIntent };
@@ -17,13 +17,13 @@ declare const elevation: {
17
17
  };
18
18
  declare const recessedTop = "shadow-sherick-recessed-top";
19
19
  declare const shape: {
20
- readonly control: "rounded-[1.25rem]";
21
- readonly mark: "rounded-[0.625rem]";
22
- readonly row: "rounded-[0.875rem]";
23
- readonly prominent: "rounded-[1.5rem]";
24
- readonly surface: "rounded-[1.75rem]";
25
- readonly sheet: "rounded-[1.25rem]";
26
- readonly expressive: "rounded-[2rem]";
20
+ readonly control: "rounded-[1rem]";
21
+ readonly mark: "rounded-[0.375rem]";
22
+ readonly row: "rounded-[0.75rem]";
23
+ readonly prominent: "rounded-[1.25rem]";
24
+ readonly surface: "rounded-[1.5rem]";
25
+ readonly sheet: "rounded-[1rem]";
26
+ readonly expressive: "rounded-[1.75rem]";
27
27
  readonly pill: "rounded-full";
28
28
  readonly circle: "rounded-full";
29
29
  };
@@ -32,6 +32,13 @@ declare const edgeTone: {
32
32
  readonly header: "border-sherick-edge/[0.10]";
33
33
  readonly rule: "border-sherick-edge/[0.075]";
34
34
  };
35
+ declare const rim: {
36
+ readonly field: "border-[1.5px] border-sherick-rim";
37
+ readonly fieldError: "border-[1.5px] border-sherick-danger";
38
+ readonly dashed: string;
39
+ readonly dashedHover: "hover:after:bg-sherick-ink-muted";
40
+ readonly dashedDragging: "data-[dragging]:after:bg-sherick-primary";
41
+ };
35
42
  declare const edge: {
36
43
  readonly row: string;
37
44
  readonly header: string;
@@ -49,25 +56,27 @@ declare const state: {
49
56
  readonly text: "cursor-text";
50
57
  readonly rowHover: "hover:bg-sherick-ink/[0.05]";
51
58
  readonly field: {
52
- readonly hover: "hover:bg-sherick-surface-high/[0.82]";
53
- readonly focus: "focus:bg-sherick-surface-high/[0.9]";
54
- readonly focusWithin: "[&&]:focus-within:bg-sherick-surface-high/[0.9]";
55
- readonly engaged: "bg-sherick-surface-high/[0.9]";
56
- readonly errorHover: "hover:bg-sherick-danger/[0.10]";
57
- readonly errorFocus: "focus:bg-sherick-danger/[0.13]";
58
- readonly errorEngaged: "bg-sherick-danger/[0.13]";
59
- readonly invalid: "data-[invalid]:bg-sherick-danger/[0.075]";
60
- readonly invalidHover: "data-[invalid]:hover:bg-sherick-danger/[0.10]";
61
- readonly invalidEngaged: "data-[invalid]:bg-sherick-danger/[0.13]";
62
- readonly invalidFocusWithin: "[&&]:data-[invalid]:focus-within:bg-sherick-danger/[0.13]";
59
+ readonly hover: "hover:bg-sherick-canvas/[0.85] hover:border-sherick-ink-muted";
60
+ readonly focus: "focus:bg-sherick-canvas focus:border-sherick-ink-muted";
61
+ readonly focusWithin: "[&&]:focus-within:bg-sherick-canvas [&&]:focus-within:border-sherick-ink-muted";
62
+ readonly engaged: "bg-sherick-canvas border-sherick-ink-muted";
63
+ readonly errorHover: "hover:bg-sherick-canvas/[0.85]";
64
+ readonly errorFocus: "focus:bg-sherick-canvas";
65
+ readonly errorEngaged: "bg-sherick-canvas";
66
+ readonly invalid: "data-[invalid]:border-sherick-danger";
67
+ readonly invalidHover: "data-[invalid]:hover:border-sherick-danger";
68
+ readonly invalidEngaged: "data-[invalid]:border-sherick-danger";
69
+ readonly invalidFocusWithin: "[&&]:data-[invalid]:focus-within:border-sherick-danger";
63
70
  };
64
71
  };
65
72
  declare const stateLayerQuietComposite: string;
66
73
  declare const stateLayer: {
67
74
  readonly quiet: string;
68
75
  readonly tonal: string;
76
+ readonly tonalNeutral: string;
69
77
  readonly filled: string;
70
78
  readonly track: string;
79
+ readonly mark: string;
71
80
  readonly activeRow: "data-[highlighted]:before:opacity-[0.05]";
72
81
  };
73
82
  declare const hitArea = "relative after:pointer-events-auto after:absolute after:inset-[min(0px,calc((100%-2.75rem)/2))] after:content-['']";
@@ -76,8 +85,8 @@ declare const material: {
76
85
  readonly matteQuiet: "bg-sherick-surface/[0.42] text-sherick-ink";
77
86
  readonly matte: "bg-sherick-surface/[0.78] text-sherick-ink";
78
87
  readonly matteHigh: "bg-sherick-surface-high/[0.72] text-sherick-ink";
79
- readonly control: "bg-sherick-surface-high/[0.66] text-sherick-ink placeholder:text-sherick-ink-muted";
80
- readonly controlError: "bg-sherick-danger/[0.075] text-sherick-ink placeholder:text-sherick-danger";
88
+ readonly control: "bg-sherick-canvas/[0.7] text-sherick-ink placeholder:text-sherick-ink-muted";
89
+ readonly controlError: "bg-sherick-canvas/[0.7] text-sherick-ink placeholder:text-sherick-danger";
81
90
  readonly handle: "bg-sherick-ink-muted text-sherick-canvas";
82
91
  readonly acrylic: "bg-sherick-surface-float/[var(--sui-glass-fill)] bg-[image:var(--sui-glass-gradient)] text-sherick-ink backdrop-blur-[var(--sui-glass-blur)] backdrop-saturate-[var(--sui-glass-saturation)] backdrop-brightness-[var(--sui-glass-brightness)]";
83
92
  readonly acrylicDense: "bg-sherick-surface-float/[var(--sui-glass-dense-fill)] bg-[image:var(--sui-glass-gradient-dense)] text-sherick-ink backdrop-blur-[var(--sui-glass-dense-blur)] backdrop-saturate-[var(--sui-glass-dense-saturation)] backdrop-brightness-[var(--sui-glass-dense-brightness)]";
@@ -85,13 +94,31 @@ declare const material: {
85
94
  };
86
95
  declare const mediaCanvas = "bg-sherick-media";
87
96
  declare const matteInset = "bg-sherick-surface-high/[0.35] text-sherick-ink";
97
+ declare const type: {
98
+ readonly control: {
99
+ readonly compact: "text-sm";
100
+ readonly normal: "text-[0.9375rem] leading-[1.375rem]";
101
+ readonly prominent: "text-lg";
102
+ };
103
+ readonly supporting: "text-[0.8125rem] leading-5";
104
+ readonly caption: "text-xs leading-4";
105
+ readonly title: "text-[0.9375rem] leading-[1.375rem] font-semibold";
106
+ readonly heading: "text-xl leading-7 font-semibold tracking-[-0.02em]";
107
+ readonly numeric: "tabular-nums";
108
+ };
88
109
  declare const density: {
89
- readonly compact: "min-h-10 text-sm";
90
- readonly normal: "min-h-12 text-[0.95rem]";
91
- readonly prominent: "min-h-14 text-lg";
110
+ readonly compact: string;
111
+ readonly normal: string;
112
+ readonly prominent: string;
92
113
  readonly target: "min-h-11 min-w-11";
93
114
  readonly part: "min-h-11 min-w-9";
94
115
  };
116
+ declare const iconSlot: {
117
+ readonly caption: "inline-flex size-3.5 shrink-0 items-center justify-center [&>svg]:size-3.5";
118
+ readonly compact: "inline-flex size-4 shrink-0 items-center justify-center [&>svg]:size-4";
119
+ readonly normal: "inline-flex size-5 shrink-0 items-center justify-center [&>svg]:size-5";
120
+ readonly prominent: "inline-flex size-6 shrink-0 items-center justify-center [&>svg]:size-6";
121
+ };
95
122
  declare const stacking: {
96
123
  readonly float: "z-50";
97
124
  readonly notification: "z-[60]";
@@ -168,14 +195,16 @@ declare const tone: {
168
195
  success: string;
169
196
  };
170
197
  };
171
- declare const selectableRowSurface = "has-[[data-checked]]:bg-sherick-primary/[0.22] has-[[data-checked]]:text-sherick-ink has-[[data-checked]]:shadow-sherick-control";
198
+ declare const currentDestination = "bg-sherick-primary-soft text-sherick-ink font-medium";
199
+ declare const selectableRowSurface = "has-[[data-checked]]:bg-sherick-primary-selected has-[[data-checked]]:text-sherick-ink has-[[data-checked]]:shadow-sherick-control";
172
200
  declare const selectable: {
173
201
  readonly surface: string;
174
202
  readonly markSurface: string;
175
203
  readonly rest: string;
176
204
  readonly mark: string;
177
- readonly selected: "group-data-[checked]:bg-sherick-primary-strong group-data-[checked]:text-sherick-on-primary";
178
- readonly indeterminate: "group-data-[indeterminate]:bg-sherick-primary-strong group-data-[indeterminate]:text-sherick-on-primary";
205
+ readonly selected: "group-data-[checked]:bg-sherick-primary-strong group-data-[checked]:text-sherick-on-primary group-data-[checked]:shadow-sherick-flat group-data-[checked]:after:opacity-0";
206
+ readonly indeterminate: "group-data-[indeterminate]:bg-sherick-primary-strong group-data-[indeterminate]:text-sherick-on-primary group-data-[indeterminate]:shadow-sherick-flat group-data-[indeterminate]:after:opacity-0";
207
+ readonly thumb: "bg-current";
179
208
  };
180
209
  declare const recipeAlphas: {
181
210
  readonly state: {
@@ -187,53 +216,45 @@ declare const recipeAlphas: {
187
216
  readonly hover: number;
188
217
  readonly press: number;
189
218
  };
219
+ readonly tonalNeutral: {
220
+ readonly hover: number;
221
+ readonly press: number;
222
+ };
190
223
  readonly filled: {
191
224
  readonly hover: number;
192
225
  readonly press: number;
193
226
  };
227
+ readonly mark: {
228
+ readonly hover: number;
229
+ };
194
230
  };
195
231
  readonly tint: {
196
- readonly soft: {
197
- readonly primary: number;
198
- readonly danger: number;
199
- readonly warning: number;
200
- readonly success: number;
201
- };
202
- readonly selected: {
203
- readonly primary: number;
204
- readonly danger: number;
205
- readonly warning: number;
206
- readonly success: number;
207
- };
232
+ readonly neutralSoft: number;
208
233
  readonly neutralRest: number;
209
234
  };
210
235
  readonly field: {
211
236
  readonly quiet: number;
212
237
  readonly card: number;
238
+ readonly groove: number;
213
239
  readonly control: number;
214
240
  readonly hover: number;
215
241
  readonly engaged: number;
216
- readonly invalid: number;
217
- readonly invalidHover: number;
218
- readonly invalidFocus: number;
219
242
  };
220
243
  };
221
244
  declare const fieldLayout = "flex min-w-0 w-full flex-col [overflow-wrap:anywhere]";
245
+ declare const fieldMessage: {
246
+ readonly description: string;
247
+ readonly error: string;
248
+ };
222
249
 
223
250
  type MotionIntent = "feedback" | "tactile" | "arrive" | "orient" | "relocate" | "direct" | "disclose" | "presence" | "activity";
224
251
  /** Non-spatial feedback: hover, focus, field tone, a highlighted row, a filled surface.
225
252
  * It never translates, scales or resizes; reduced motion simply drops the interpolation
226
253
  * and the state still arrives. */
227
- declare const motionFeedback = "transition-[background-color,color,box-shadow,opacity] duration-press ease-press motion-reduce:transition-none";
228
- /** A control answers a press immediately and settles on its release.
229
- *
230
- * The recipe owns the *amplitude* of that answer as well as its timing, because how far a
231
- * press travels is the system's physical character rather than a component's anatomy: a
232
- * control whose outline is what the user sees compresses 4%, which is about two pixels at the
233
- * size of the ink it moves. A control whose visible ink is far smaller than the target it is
234
- * aimed at takes `motionInkPress` on that ink instead, so the target itself never moves. The
235
- * interpolation and the compression are neutralised together under reduced motion. */
236
- declare const motionTactile = "transition-[background-color,color,box-shadow,transform,opacity] duration-release ease-release active:duration-press active:ease-press motion-safe:[&:not([data-disabled],:disabled,:has(>[role=combobox][data-disabled]))]:active:scale-[0.96] motion-reduce:transition-none";
254
+ declare const motionFeedback = "transition-[background-color,border-color,color,box-shadow,opacity] duration-press ease-press motion-reduce:transition-none";
255
+ declare const motionTactile: string;
256
+ declare const motionTactileWide: string;
257
+ declare const motionTactileField: string;
237
258
  /** The spatial half of a compact press, applied to the *mark* rather than to the control.
238
259
  *
239
260
  * A control whose visible ink is much smaller than the target it is aimed at — a dialog's close
@@ -243,7 +264,7 @@ declare const motionTactile = "transition-[background-color,color,box-shadow,tra
243
264
  * release lands), so the mark takes the twelve percent and the target keeps its geometry. The
244
265
  * target still owns the focus ring and the state layer, and still carries the tone and depth
245
266
  * response, so the boundary a press happens inside never moves. */
246
- declare const motionInkPress = "transition-transform duration-release ease-release group-active:duration-press group-active:ease-press group-active:scale-[0.88] motion-reduce:transition-none motion-reduce:group-active:scale-100";
267
+ declare const motionInkPress = "transition-transform duration-release ease-release group-active:duration-tactile group-active:ease-press group-active:scale-[0.88] motion-reduce:transition-none motion-reduce:group-active:scale-100";
247
268
  /** A meaningful subordinate part arrives. Spring is reserved for this intent: a mark is
248
269
  * made by overshooting the position it lands in. It leaves without the overshoot, and
249
270
  * reduced motion lands it in one step — which takes a *state-specific* override, because the
@@ -260,6 +281,9 @@ declare const motionOrient = "transition-transform duration-release ease-release
260
281
  * settle together, and an interrupted move retargets from wherever it currently is
261
282
  * because it is a transition and not a keyframe. */
262
283
  declare const motionRelocate = "transition-[left,inset-inline-start,top,width,height,transform,background-color,color,box-shadow,opacity] duration-release ease-glide motion-reduce:transition-none";
284
+ /** The same travel across a whole track — a tab indicator — on the longer travel timing, so a
285
+ * movement of hundreds of pixels is followed rather than skipped. */
286
+ declare const motionRelocateLong = "transition-[left,inset-inline-start,top,width,height,transform,background-color,color,box-shadow,opacity] duration-travel ease-glide motion-reduce:transition-none";
263
287
  /** Direct manipulation: the pointer owns the geometry, so a positional transition would be
264
288
  * lag. While the primitive reports a drag, position and size are removed from the
265
289
  * transition list and only tone and engagement geometry remain; a keyboard or programmatic
@@ -284,7 +308,7 @@ declare const motionPresenceTooltip: string;
284
308
  declare const motionPresenceModal: string;
285
309
  /** The plane behind a surface that owns the viewport. Opacity only: a blur or a filter is
286
310
  * never animated, so the plane can never animate the page behind it. */
287
- declare const motionPresenceScrim = "transition-opacity duration-overlay ease-release data-[ending-style]:duration-overlay-exit data-[ending-style]:ease-exit";
311
+ declare const motionPresenceScrim = "transition-opacity duration-overlay ease-release data-[starting-style]:opacity-0 data-[ending-style]:opacity-0 data-[ending-style]:duration-overlay-exit data-[ending-style]:ease-exit";
288
312
  /** Continuous activity is a distinct intent, not an exception to interaction motion: it
289
313
  * reports work rather than answering an event, and it has no entrance of its own. */
290
314
  declare const motionActivitySpin = "animate-spin motion-reduce:animate-none";
@@ -299,8 +323,16 @@ declare const motionActivityPulse = "animate-pulse motion-reduce:animate-none";
299
323
  declare const motionActivityIndeterminate = "animate-sherick-indeterminate [[dir=rtl]_&]:[--sui-indeterminate-direction:-1] motion-reduce:animate-none";
300
324
  /** The state layer is a composited overlay, so its own opacity is the only thing that
301
325
  * moves. Shared here because four interaction states across the library ride it. */
302
- declare const motionStateLayer = "before:transition-opacity before:duration-release before:ease-release active:before:duration-press active:before:ease-press group-active:before:duration-press group-active:before:ease-press motion-reduce:before:transition-none";
303
- declare const motionDisclose = "transition-[height] duration-release ease-release data-[starting-style]:h-0 data-[ending-style]:h-0 motion-reduce:transition-none";
326
+ /** A row in a collection moves its highlight rather than fading it: a highlight is where the reader
327
+ * is, and arrowing through a list with a soft fade on every row leaves a smear of half-lit rows.
328
+ * The row's layer therefore changes in one step, for the pointer and the keyboard alike. */
329
+ declare const motionRowLayer = "before:transition-none";
330
+ /** A rim drawn as an overlay of its own — an empty selection mark's lip, a drop target's dashes —
331
+ * carries its own feedback timing: it steps up on hover and fades as a selection fill arrives,
332
+ * on the same press curve as the surface beneath it. */
333
+ declare const motionRim = "after:transition-[background-color,border-color,opacity] after:duration-press after:ease-press motion-reduce:after:transition-none";
334
+ declare const motionStateLayer = "before:transition-opacity before:duration-release before:ease-release active:before:duration-tactile active:before:ease-press group-active:before:duration-tactile group-active:before:ease-press motion-reduce:before:transition-none";
335
+ declare const motionDisclose = "transition-[height] duration-release ease-release data-[starting-style]:h-0 data-[ending-style]:h-0 data-[ending-style]:duration-overlay-exit data-[ending-style]:ease-exit motion-reduce:transition-none";
304
336
  declare const motionPresenceSheet: string;
305
337
  declare const motionPresenceToast: string;
306
338
 
@@ -311,5 +343,5 @@ declare const motionPresenceToast: string;
311
343
  */
312
344
  declare const cn: (...inputs: ClassValue[]) => string;
313
345
 
314
- export { cn, density, detail, disclosure, edge, edgeTone, elevation, fieldLayout, focusRing, focusRingDrag, focusRingHeld, focusRingInset, focusRingWithin, groupFocusRing, hitArea, list, material, matteInset, mediaCanvas, motionActivityIndeterminate, motionActivityPulse, motionActivitySpin, motionArrive, motionDirect, motionDisclose, motionFeedback, motionInkPress, motionOrient, motionPresenceAnchored, motionPresenceModal, motionPresenceScrim, motionPresenceSheet, motionPresenceToast, motionPresenceTooltip, motionRelocate, motionStateLayer, motionTactile, overlay, parentFocusRingInset, recessedTop, recipeAlphas, selectable, selectableRowSurface, shape, stacking, state, stateLayer, stateLayerQuietComposite, text, tone };
346
+ export { cn, currentDestination, density, detail, disclosure, edge, edgeTone, elevation, fieldLayout, fieldMessage, focusRing, focusRingDrag, focusRingHeld, focusRingInset, focusRingWithin, groupFocusRing, hitArea, iconSlot, list, material, matteInset, mediaCanvas, motionActivityIndeterminate, motionActivityPulse, motionActivitySpin, motionArrive, motionDirect, motionDisclose, motionFeedback, motionInkPress, motionOrient, motionPresenceAnchored, motionPresenceModal, motionPresenceScrim, motionPresenceSheet, motionPresenceToast, motionPresenceTooltip, motionRelocate, motionRelocateLong, motionRim, motionRowLayer, motionStateLayer, motionTactile, motionTactileField, motionTactileWide, overlay, parentFocusRingInset, recessedTop, recipeAlphas, rim, selectable, selectableRowSurface, shape, stacking, state, stateLayer, stateLayerQuietComposite, text, tone, type };
315
347
  export type { MotionIntent };