sherick-ui 2.3.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 (60) hide show
  1. package/dist/cjs/components/Checkbox.cjs +3 -1
  2. package/dist/cjs/components/Checkbox.cjs.map +1 -1
  3. package/dist/cjs/components/Combobox.cjs +1 -1
  4. package/dist/cjs/components/Combobox.cjs.map +1 -1
  5. package/dist/cjs/components/Command.cjs +1 -1
  6. package/dist/cjs/components/Command.cjs.map +1 -1
  7. package/dist/cjs/components/FileUpload.cjs +1 -1
  8. package/dist/cjs/components/FileUpload.cjs.map +1 -1
  9. package/dist/cjs/components/Input.cjs +1 -1
  10. package/dist/cjs/components/Input.cjs.map +1 -1
  11. package/dist/cjs/components/NumberField.cjs +2 -2
  12. package/dist/cjs/components/NumberField.cjs.map +1 -1
  13. package/dist/cjs/components/RadioGroup.cjs +1 -1
  14. package/dist/cjs/components/RadioGroup.cjs.map +1 -1
  15. package/dist/cjs/components/Search.cjs +4 -1
  16. package/dist/cjs/components/Search.cjs.map +1 -1
  17. package/dist/cjs/components/Select.cjs +1 -1
  18. package/dist/cjs/components/Select.cjs.map +1 -1
  19. package/dist/cjs/components/Textarea.cjs +1 -1
  20. package/dist/cjs/components/Textarea.cjs.map +1 -1
  21. package/dist/cjs/components/date-field.cjs +2 -2
  22. package/dist/cjs/components/date-field.cjs.map +1 -1
  23. package/dist/cjs/components/ui.common.cjs +97 -43
  24. package/dist/cjs/components/ui.common.cjs.map +1 -1
  25. package/dist/cjs/components/ui.motion.cjs +6 -1
  26. package/dist/cjs/components/ui.motion.cjs.map +1 -1
  27. package/dist/cjs/dev.cjs +2 -0
  28. package/dist/cjs/dev.cjs.map +1 -1
  29. package/dist/esm/components/Checkbox.js +3 -1
  30. package/dist/esm/components/Checkbox.js.map +1 -1
  31. package/dist/esm/components/Combobox.js +2 -2
  32. package/dist/esm/components/Combobox.js.map +1 -1
  33. package/dist/esm/components/Command.js +2 -2
  34. package/dist/esm/components/Command.js.map +1 -1
  35. package/dist/esm/components/FileUpload.js +2 -2
  36. package/dist/esm/components/FileUpload.js.map +1 -1
  37. package/dist/esm/components/Input.js +2 -2
  38. package/dist/esm/components/Input.js.map +1 -1
  39. package/dist/esm/components/NumberField.js +3 -3
  40. package/dist/esm/components/NumberField.js.map +1 -1
  41. package/dist/esm/components/RadioGroup.js +2 -2
  42. package/dist/esm/components/RadioGroup.js.map +1 -1
  43. package/dist/esm/components/Search.js +5 -2
  44. package/dist/esm/components/Search.js.map +1 -1
  45. package/dist/esm/components/Select.js +2 -2
  46. package/dist/esm/components/Select.js.map +1 -1
  47. package/dist/esm/components/Textarea.js +2 -2
  48. package/dist/esm/components/Textarea.js.map +1 -1
  49. package/dist/esm/components/date-field.js +3 -3
  50. package/dist/esm/components/date-field.js.map +1 -1
  51. package/dist/esm/components/ui.common.js +98 -45
  52. package/dist/esm/components/ui.common.js.map +1 -1
  53. package/dist/esm/components/ui.motion.js +6 -2
  54. package/dist/esm/components/ui.motion.js.map +1 -1
  55. package/dist/esm/dev.js +2 -2
  56. package/dist/styles.css +191 -49
  57. package/dist/theme.css +7 -3
  58. package/dist/types/dev.d.cts +34 -21
  59. package/dist/types/dev.d.ts +34 -21
  60. package/package.json +1 -1
package/dist/theme.css CHANGED
@@ -11,6 +11,7 @@
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
17
  --sui-primary-soft: 0.920 0.035 255;
@@ -41,7 +42,7 @@
41
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);
42
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);
43
44
  --sui-elevation-recessed-top: inset 0 5px 8px -5px oklch(var(--sui-light-bottom) / 0.21);
44
- --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);
45
46
  --sui-glass-fill: 0.98;
46
47
  --sui-glass-blur: 28px;
47
48
  --sui-glass-saturation: 1.06;
@@ -78,6 +79,7 @@
78
79
  --sui-ink: 0.94 0.008 255;
79
80
  --sui-ink-muted: 0.76 0.014 255;
80
81
  --sui-detail: 0.600 0.014 256;
82
+ --sui-rim: 0.555 0.014 256;
81
83
  --sui-primary: 0.809 0.098 255;
82
84
  --sui-primary-strong: 0.734 0.139 257;
83
85
  --sui-primary-soft: 0.325 0.050 257;
@@ -108,7 +110,7 @@
108
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);
109
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);
110
112
  --sui-elevation-recessed-top: inset 0 5px 8px -5px oklch(var(--sui-light-bottom) / 0.36);
111
- --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);
112
114
  --sui-glass-fill: 0.98;
113
115
  --sui-glass-blur: 32px;
114
116
  --sui-glass-saturation: 1.10;
@@ -146,6 +148,7 @@
146
148
  --sui-ink: 0.94 0.008 255;
147
149
  --sui-ink-muted: 0.76 0.014 255;
148
150
  --sui-detail: 0.600 0.014 256;
151
+ --sui-rim: 0.555 0.014 256;
149
152
  --sui-primary: 0.809 0.098 255;
150
153
  --sui-primary-strong: 0.734 0.139 257;
151
154
  --sui-primary-soft: 0.325 0.050 257;
@@ -176,7 +179,7 @@
176
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);
177
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);
178
181
  --sui-elevation-recessed-top: inset 0 5px 8px -5px oklch(var(--sui-light-bottom) / 0.36);
179
- --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);
180
183
  --sui-glass-fill: 0.98;
181
184
  --sui-glass-blur: 32px;
182
185
  --sui-glass-saturation: 1.10;
@@ -206,6 +209,7 @@
206
209
 
207
210
  :root {
208
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");
209
213
  --sui-duration-press: 150ms;
210
214
  --sui-duration-release: 200ms;
211
215
  --sui-duration-tactile: 80ms;
@@ -18,7 +18,7 @@ declare const elevation: {
18
18
  declare const recessedTop = "shadow-sherick-recessed-top";
19
19
  declare const shape: {
20
20
  readonly control: "rounded-[1rem]";
21
- readonly mark: "rounded-[0.625rem]";
21
+ readonly mark: "rounded-[0.375rem]";
22
22
  readonly row: "rounded-[0.75rem]";
23
23
  readonly prominent: "rounded-[1.25rem]";
24
24
  readonly surface: "rounded-[1.5rem]";
@@ -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,17 +56,17 @@ 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;
@@ -69,6 +76,7 @@ declare const stateLayer: {
69
76
  readonly tonalNeutral: string;
70
77
  readonly filled: string;
71
78
  readonly track: string;
79
+ readonly mark: string;
72
80
  readonly activeRow: "data-[highlighted]:before:opacity-[0.05]";
73
81
  };
74
82
  declare const hitArea = "relative after:pointer-events-auto after:absolute after:inset-[min(0px,calc((100%-2.75rem)/2))] after:content-['']";
@@ -77,8 +85,8 @@ declare const material: {
77
85
  readonly matteQuiet: "bg-sherick-surface/[0.42] text-sherick-ink";
78
86
  readonly matte: "bg-sherick-surface/[0.78] text-sherick-ink";
79
87
  readonly matteHigh: "bg-sherick-surface-high/[0.72] text-sherick-ink";
80
- readonly control: "bg-sherick-surface-high/[0.66] text-sherick-ink placeholder:text-sherick-ink-muted";
81
- 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";
82
90
  readonly handle: "bg-sherick-ink-muted text-sherick-canvas";
83
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)]";
84
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)]";
@@ -194,8 +202,9 @@ declare const selectable: {
194
202
  readonly markSurface: string;
195
203
  readonly rest: string;
196
204
  readonly mark: string;
197
- readonly selected: "group-data-[checked]:bg-sherick-primary-strong group-data-[checked]:text-sherick-on-primary";
198
- 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";
199
208
  };
200
209
  declare const recipeAlphas: {
201
210
  readonly state: {
@@ -215,6 +224,9 @@ declare const recipeAlphas: {
215
224
  readonly hover: number;
216
225
  readonly press: number;
217
226
  };
227
+ readonly mark: {
228
+ readonly hover: number;
229
+ };
218
230
  };
219
231
  readonly tint: {
220
232
  readonly neutralSoft: number;
@@ -227,9 +239,6 @@ declare const recipeAlphas: {
227
239
  readonly control: number;
228
240
  readonly hover: number;
229
241
  readonly engaged: number;
230
- readonly invalid: number;
231
- readonly invalidHover: number;
232
- readonly invalidFocus: number;
233
242
  };
234
243
  };
235
244
  declare const fieldLayout = "flex min-w-0 w-full flex-col [overflow-wrap:anywhere]";
@@ -242,7 +251,7 @@ type MotionIntent = "feedback" | "tactile" | "arrive" | "orient" | "relocate" |
242
251
  /** Non-spatial feedback: hover, focus, field tone, a highlighted row, a filled surface.
243
252
  * It never translates, scales or resizes; reduced motion simply drops the interpolation
244
253
  * and the state still arrives. */
245
- declare const motionFeedback = "transition-[background-color,color,box-shadow,opacity] duration-press ease-press 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";
246
255
  declare const motionTactile: string;
247
256
  declare const motionTactileWide: string;
248
257
  declare const motionTactileField: string;
@@ -318,6 +327,10 @@ declare const motionActivityIndeterminate = "animate-sherick-indeterminate [[dir
318
327
  * is, and arrowing through a list with a soft fade on every row leaves a smear of half-lit rows.
319
328
  * The row's layer therefore changes in one step, for the pointer and the keyboard alike. */
320
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";
321
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";
322
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";
323
336
  declare const motionPresenceSheet: string;
@@ -330,5 +343,5 @@ declare const motionPresenceToast: string;
330
343
  */
331
344
  declare const cn: (...inputs: ClassValue[]) => string;
332
345
 
333
- 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, motionRowLayer, motionStateLayer, motionTactile, motionTactileField, motionTactileWide, overlay, parentFocusRingInset, recessedTop, recipeAlphas, selectable, selectableRowSurface, shape, stacking, state, stateLayer, stateLayerQuietComposite, text, tone, type };
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 };
334
347
  export type { MotionIntent };
@@ -18,7 +18,7 @@ declare const elevation: {
18
18
  declare const recessedTop = "shadow-sherick-recessed-top";
19
19
  declare const shape: {
20
20
  readonly control: "rounded-[1rem]";
21
- readonly mark: "rounded-[0.625rem]";
21
+ readonly mark: "rounded-[0.375rem]";
22
22
  readonly row: "rounded-[0.75rem]";
23
23
  readonly prominent: "rounded-[1.25rem]";
24
24
  readonly surface: "rounded-[1.5rem]";
@@ -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,17 +56,17 @@ 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;
@@ -69,6 +76,7 @@ declare const stateLayer: {
69
76
  readonly tonalNeutral: string;
70
77
  readonly filled: string;
71
78
  readonly track: string;
79
+ readonly mark: string;
72
80
  readonly activeRow: "data-[highlighted]:before:opacity-[0.05]";
73
81
  };
74
82
  declare const hitArea = "relative after:pointer-events-auto after:absolute after:inset-[min(0px,calc((100%-2.75rem)/2))] after:content-['']";
@@ -77,8 +85,8 @@ declare const material: {
77
85
  readonly matteQuiet: "bg-sherick-surface/[0.42] text-sherick-ink";
78
86
  readonly matte: "bg-sherick-surface/[0.78] text-sherick-ink";
79
87
  readonly matteHigh: "bg-sherick-surface-high/[0.72] text-sherick-ink";
80
- readonly control: "bg-sherick-surface-high/[0.66] text-sherick-ink placeholder:text-sherick-ink-muted";
81
- 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";
82
90
  readonly handle: "bg-sherick-ink-muted text-sherick-canvas";
83
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)]";
84
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)]";
@@ -194,8 +202,9 @@ declare const selectable: {
194
202
  readonly markSurface: string;
195
203
  readonly rest: string;
196
204
  readonly mark: string;
197
- readonly selected: "group-data-[checked]:bg-sherick-primary-strong group-data-[checked]:text-sherick-on-primary";
198
- 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";
199
208
  };
200
209
  declare const recipeAlphas: {
201
210
  readonly state: {
@@ -215,6 +224,9 @@ declare const recipeAlphas: {
215
224
  readonly hover: number;
216
225
  readonly press: number;
217
226
  };
227
+ readonly mark: {
228
+ readonly hover: number;
229
+ };
218
230
  };
219
231
  readonly tint: {
220
232
  readonly neutralSoft: number;
@@ -227,9 +239,6 @@ declare const recipeAlphas: {
227
239
  readonly control: number;
228
240
  readonly hover: number;
229
241
  readonly engaged: number;
230
- readonly invalid: number;
231
- readonly invalidHover: number;
232
- readonly invalidFocus: number;
233
242
  };
234
243
  };
235
244
  declare const fieldLayout = "flex min-w-0 w-full flex-col [overflow-wrap:anywhere]";
@@ -242,7 +251,7 @@ type MotionIntent = "feedback" | "tactile" | "arrive" | "orient" | "relocate" |
242
251
  /** Non-spatial feedback: hover, focus, field tone, a highlighted row, a filled surface.
243
252
  * It never translates, scales or resizes; reduced motion simply drops the interpolation
244
253
  * and the state still arrives. */
245
- declare const motionFeedback = "transition-[background-color,color,box-shadow,opacity] duration-press ease-press 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";
246
255
  declare const motionTactile: string;
247
256
  declare const motionTactileWide: string;
248
257
  declare const motionTactileField: string;
@@ -318,6 +327,10 @@ declare const motionActivityIndeterminate = "animate-sherick-indeterminate [[dir
318
327
  * is, and arrowing through a list with a soft fade on every row leaves a smear of half-lit rows.
319
328
  * The row's layer therefore changes in one step, for the pointer and the keyboard alike. */
320
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";
321
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";
322
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";
323
336
  declare const motionPresenceSheet: string;
@@ -330,5 +343,5 @@ declare const motionPresenceToast: string;
330
343
  */
331
344
  declare const cn: (...inputs: ClassValue[]) => string;
332
345
 
333
- 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, motionRowLayer, motionStateLayer, motionTactile, motionTactileField, motionTactileWide, overlay, parentFocusRingInset, recessedTop, recipeAlphas, selectable, selectableRowSurface, shape, stacking, state, stateLayer, stateLayerQuietComposite, text, tone, type };
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 };
334
347
  export type { MotionIntent };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sherick-ui",
3
- "version": "2.3.0",
3
+ "version": "2.4.0",
4
4
  "description": "A reusable React component library inspired by Material 3 Expressive.",
5
5
  "repository": {
6
6
  "type": "git",