@godxjp/ui 23.0.0 → 23.2.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 (93) hide show
  1. package/dist/app/date-format-labels.d.ts +14 -2
  2. package/dist/app/date-format-labels.js +1 -1
  3. package/dist/app/date-formats.d.ts +14 -2
  4. package/dist/app/date-formats.js +9 -2
  5. package/dist/components/data-display/card.d.ts +45 -2
  6. package/dist/components/data-display/card.js +4 -2
  7. package/dist/components/data-display/data-table.d.ts +8 -1
  8. package/dist/components/data-display/data-table.js +9 -2
  9. package/dist/components/data-display/feature-list.d.ts +26 -0
  10. package/dist/components/data-display/feature-list.js +29 -0
  11. package/dist/components/data-display/index.d.ts +6 -0
  12. package/dist/components/data-display/index.js +6 -0
  13. package/dist/components/data-display/swatch.d.ts +24 -0
  14. package/dist/components/data-display/swatch.js +19 -0
  15. package/dist/components/data-display/thumbnail.d.ts +37 -0
  16. package/dist/components/data-display/thumbnail.js +20 -0
  17. package/dist/components/data-entry/checkbox.js +1 -1
  18. package/dist/components/data-entry/form-field.js +2 -2
  19. package/dist/components/data-entry/input.js +1 -1
  20. package/dist/components/data-entry/number-input.js +27 -6
  21. package/dist/components/data-entry/radio.js +1 -1
  22. package/dist/components/data-entry/switch.js +1 -1
  23. package/dist/components/feedback/dialog.js +2 -2
  24. package/dist/components/feedback/index.d.ts +2 -2
  25. package/dist/components/feedback/index.js +19 -1
  26. package/dist/components/feedback/sheet.js +2 -22
  27. package/dist/components/feedback/skeleton.d.ts +33 -3
  28. package/dist/components/feedback/skeleton.js +154 -3
  29. package/dist/components/layout/flex.d.ts +1 -1
  30. package/dist/components/layout/flex.js +17 -5
  31. package/dist/components/layout/sidebar.js +9 -2
  32. package/dist/components/navigation/filter-bar.js +2 -1
  33. package/dist/components/navigation/tabs-scroll.d.ts +27 -0
  34. package/dist/components/navigation/tabs-scroll.js +36 -1
  35. package/dist/components/navigation/tabs.d.ts +2 -2
  36. package/dist/components/navigation/tabs.js +60 -16
  37. package/dist/i18n/messages/en.json +10 -1
  38. package/dist/i18n/messages/ja.json +10 -1
  39. package/dist/i18n/messages/vi.json +10 -1
  40. package/dist/lib/breakpoint-token.d.ts +8 -0
  41. package/dist/lib/breakpoint-token.js +29 -0
  42. package/dist/props/components/data-display.prop.d.ts +101 -1
  43. package/dist/props/components/feedback.prop.d.ts +85 -1
  44. package/dist/props/components/layout.prop.d.ts +72 -1
  45. package/dist/props/components/navigation.prop.d.ts +80 -2
  46. package/dist/props/registry.d.ts +124 -1
  47. package/dist/props/registry.js +140 -0
  48. package/dist/props/vocabulary/data.prop.d.ts +5 -0
  49. package/dist/props/vocabulary/index.d.ts +1 -1
  50. package/dist/styles/alert-layout.css +139 -0
  51. package/dist/styles/card-layout.css +48 -0
  52. package/dist/styles/control.css +41 -5
  53. package/dist/styles/data-display-layout.css +88 -0
  54. package/dist/styles/focus-ring.css +28 -0
  55. package/dist/styles/form-layout.css +4 -0
  56. package/dist/styles/layout.css +2 -1
  57. package/dist/styles/navigation-layout.css +89 -5
  58. package/dist/styles/shell-layout.css +22 -0
  59. package/dist/styles/table-layout.css +5 -2
  60. package/dist/tokens/components/card.css +2 -0
  61. package/dist/tokens/components/control.css +8 -3
  62. package/dist/tokens/components/data-display.css +23 -0
  63. package/dist/tokens/components/feedback.css +18 -0
  64. package/dist/tokens/components/navigation.css +4 -0
  65. package/dist/tokens/foundation.css +18 -16
  66. package/docs/CONSUMER-RULES.md +8 -3
  67. package/docs/CUSTOMER-THEMING.md +18 -8
  68. package/docs/DATETIME.md +11 -2
  69. package/docs/DESIGN-AUTHORITY.md +2 -1
  70. package/docs/FRAME-COVERAGE-REPORT.md +29 -3
  71. package/docs/SPACING.md +35 -5
  72. package/docs/TOKENS.md +1 -1
  73. package/docs/assets/shot-landscape.svg +12 -0
  74. package/docs/assets/shot-portrait.svg +10 -0
  75. package/docs/data-display/card/index.tsx +40 -0
  76. package/docs/data-display/data-table/index.tsx +17 -2
  77. package/docs/data-display/feature-list.tsx +159 -0
  78. package/docs/data-display/swatch.tsx +107 -0
  79. package/docs/data-display/table.tsx +1 -1
  80. package/docs/data-display/thumbnail.tsx +128 -0
  81. package/docs/data-entry/segmented-in-filter-row.tsx +77 -0
  82. package/docs/feedback/skeleton.tsx +57 -0
  83. package/docs/layout/flex.tsx +29 -0
  84. package/docs/layout/sidebar.tsx +66 -10
  85. package/docs/navigation/dropdown-menu.tsx +4 -4
  86. package/docs/navigation/tabs.tsx +131 -0
  87. package/docs/roadmap/ai-chat-components.md +1 -2
  88. package/docs/roadmap/tree-components.md +0 -1
  89. package/package.json +12 -21
  90. package/scripts/_agent-setup.mjs +18 -0
  91. package/scripts/consumer-rule.md +16 -0
  92. package/scripts/guinea-pig-skill.md +12 -6
  93. package/scripts/ui-audit.mjs +184 -7
@@ -4,6 +4,9 @@
4
4
  [data-slot="card"] {
5
5
  min-width: 0;
6
6
 
7
+ display: flex;
8
+ flex-direction: column;
9
+
7
10
  border-width: 1px;
8
11
  border-style: solid;
9
12
  border-color: hsl(var(--card-border, var(--border)));
@@ -25,6 +28,10 @@
25
28
  background: transparent;
26
29
  }
27
30
 
31
+ [data-slot="card"][data-variant="borderless"] {
32
+ border-width: 0;
33
+ }
34
+
28
35
  [data-slot="card"][data-variant="featured"] {
29
36
  border-color: var(--card-featured-border-color, hsl(var(--primary)));
30
37
  box-shadow: 0 0 0 var(--card-featured-ring-width)
@@ -74,6 +81,11 @@
74
81
 
75
82
  [data-slot="card"][data-accent] > [data-slot="card-header"],
76
83
  [data-slot="card"][data-accent] > [data-slot="card-content"]:not([data-flush]),
84
+
85
+ [data-slot="card"] > [data-slot="card-footer"] {
86
+ margin-block-start: auto;
87
+ }
88
+
77
89
  [data-slot="card"][data-accent] > [data-slot="card-footer"]:not([data-flush]) {
78
90
  padding-inline-start: calc(var(--card-space-inset) - var(--card-accent-rail-width));
79
91
  }
@@ -95,6 +107,21 @@
95
107
  padding-inline-start: var(--card-space-inset);
96
108
  }
97
109
 
110
+ [data-slot="card"][data-hoverable] {
111
+ cursor: pointer;
112
+ transition: box-shadow var(--duration-fast) var(--ease-standard);
113
+ }
114
+
115
+ [data-slot="card"][data-hoverable]:hover {
116
+ --card-shadow: var(--card-hover-shadow);
117
+ }
118
+
119
+ @media (prefers-reduced-motion: reduce) {
120
+ [data-slot="card"][data-hoverable] {
121
+ transition: none;
122
+ }
123
+ }
124
+
98
125
  [data-slot="card-header"] {
99
126
  display: flex;
100
127
  flex-direction: column;
@@ -335,6 +362,27 @@
335
362
  justify-content: stretch;
336
363
  }
337
364
 
365
+ [data-slot="card-footer"][data-actions] {
366
+ gap: 0;
367
+ flex-wrap: nowrap;
368
+ padding-inline: 0;
369
+ padding-block: 0;
370
+ border-top: var(--stroke-hairline) solid hsl(var(--card-border, var(--border)));
371
+ }
372
+
373
+ [data-slot="card-footer"][data-actions] > * {
374
+ display: flex;
375
+ min-width: 0;
376
+ flex: 1 1 0;
377
+ align-items: center;
378
+ justify-content: center;
379
+ padding-block: var(--card-space-footer-y);
380
+ }
381
+
382
+ [data-slot="card-footer"][data-actions] > * + * {
383
+ border-inline-start: var(--stroke-hairline) solid hsl(var(--card-border, var(--border)));
384
+ }
385
+
338
386
  .ui-card-inset-x {
339
387
  padding-inline: var(--card-space-inset);
340
388
  }
@@ -177,8 +177,8 @@
177
177
  content: "";
178
178
  position: absolute;
179
179
  inset: 0;
180
- min-inline-size: var(--button-bare-target-size);
181
- min-block-size: var(--button-bare-target-size);
180
+ min-inline-size: var(--button-bare-target-size, var(--control-height-xs));
181
+ min-block-size: var(--button-bare-target-size, var(--control-height-xs));
182
182
  margin: auto;
183
183
  }
184
184
 
@@ -1338,6 +1338,20 @@
1338
1338
  inline-size: 0.75rem;
1339
1339
  block-size: 0.75rem;
1340
1340
  }
1341
+
1342
+ @media (pointer: coarse) {
1343
+ .ui-number-input:not([data-size="xs"]):not([data-size="sm"]) {
1344
+ --control-height: var(--number-input-touch-height);
1345
+ }
1346
+
1347
+ .ui-number-input-steppers {
1348
+ gap: 0;
1349
+ }
1350
+
1351
+ .ui-number-input-step {
1352
+ block-size: calc(var(--control-height) / 2);
1353
+ }
1354
+ }
1341
1355
  }
1342
1356
 
1343
1357
  @layer components {
@@ -1887,6 +1901,22 @@
1887
1901
  transition: opacity 150ms ease;
1888
1902
  }
1889
1903
 
1904
+ .ui-control-inline-affix-action {
1905
+ position: relative;
1906
+ }
1907
+
1908
+ .ui-control-inline-affix-action::after {
1909
+ content: "";
1910
+ position: absolute;
1911
+ inset-block-start: 50%;
1912
+ inset-inline-start: 50%;
1913
+ translate: -50% -50%;
1914
+ min-inline-size: var(--touch-target-min);
1915
+ min-block-size: var(--touch-target-min);
1916
+ inline-size: 100%;
1917
+ block-size: 100%;
1918
+ }
1919
+
1890
1920
  .ui-control-inline-affix-action:hover,
1891
1921
  .ui-control-inline-affix-action:focus-visible {
1892
1922
  color: hsl(var(--foreground));
@@ -2108,6 +2138,8 @@
2108
2138
  background-color: hsl(var(--muted));
2109
2139
 
2110
2140
  border-radius: 0;
2141
+
2142
+ padding-block: var(--calendar-bordered-weekday-padding-block);
2111
2143
  }
2112
2144
 
2113
2145
  .ui-calendar[data-bordered="true"] .ui-calendar-grid {
@@ -2536,7 +2568,7 @@
2536
2568
  }
2537
2569
 
2538
2570
  .ui-button--xs {
2539
- height: var(--button-xs-height);
2571
+ height: var(--button-xs-height, var(--control-height-xs));
2540
2572
  gap: var(--button-xs-space-gap);
2541
2573
  padding-inline: var(--button-xs-space-inline);
2542
2574
  font-size: var(--button-xs-font-size);
@@ -2642,8 +2674,8 @@
2642
2674
 
2643
2675
  .ui-control[data-status="warning"],
2644
2676
  .ui-control-multiline[data-status="warning"] {
2645
- --focus-ring-color: var(--control-status-warning-border-color);
2646
- --focus-outline-color: var(--control-status-warning-border-color);
2677
+ --focus-ring-color: var(--control-status-warning-outline-color);
2678
+ --focus-outline-color: var(--control-status-warning-outline-color);
2647
2679
  --focus-ring-glow-color: var(--control-status-warning-glow-color);
2648
2680
  --focus-ring-glow-alpha: var(--control-status-warning-glow-alpha);
2649
2681
  }
@@ -2988,6 +3020,10 @@
2988
3020
  justify-content: center;
2989
3021
  }
2990
3022
 
3023
+ .ui-segmented:not([data-orientation="vertical"]) {
3024
+ row-gap: var(--segmented-track-padding);
3025
+ }
3026
+
2991
3027
  .ui-segmented[data-orientation="vertical"] {
2992
3028
  flex-direction: column;
2993
3029
  }
@@ -314,6 +314,94 @@
314
314
  background: hsl(var(--muted-foreground));
315
315
  }
316
316
 
317
+ .ui-swatch {
318
+ display: inline-block;
319
+ flex: none;
320
+
321
+ vertical-align: middle;
322
+ inline-size: var(--swatch-size);
323
+ block-size: var(--swatch-size);
324
+ border-radius: var(--swatch-radius);
325
+ background: var(--swatch-color);
326
+ box-shadow: inset 0 0 0 var(--swatch-border-width)
327
+ var(--swatch-border-color, hsl(var(--border)));
328
+ forced-color-adjust: none;
329
+ }
330
+
331
+ .ui-feature-list {
332
+ display: flex;
333
+ flex-direction: column;
334
+ gap: var(--feature-list-space-gap);
335
+ }
336
+
337
+ .ui-feature-list-item {
338
+ display: grid;
339
+ align-items: start;
340
+ grid-template-columns: auto minmax(0, 1fr);
341
+ column-gap: var(--feature-list-space-inline);
342
+ font-size: var(--feature-list-font-size);
343
+ line-height: var(--line-height-body);
344
+ }
345
+
346
+ .ui-feature-list-mark {
347
+ display: grid;
348
+ block-size: 1lh;
349
+ place-items: center;
350
+ color: hsl(var(--muted-foreground));
351
+ }
352
+
353
+ .ui-feature-list-mark > svg {
354
+ inline-size: var(--feature-list-mark-icon-size);
355
+ block-size: var(--feature-list-mark-icon-size);
356
+ }
357
+
358
+ .ui-feature-list-item[data-state="included"] .ui-feature-list-mark {
359
+ color: hsl(var(--mark-success));
360
+ }
361
+
362
+ .ui-feature-list-item[data-state="limited"] .ui-feature-list-mark {
363
+ color: hsl(var(--mark-warning));
364
+ }
365
+
366
+ .ui-feature-list-item[data-state="excluded"] .ui-feature-list-label {
367
+ color: hsl(var(--muted-foreground));
368
+ }
369
+
370
+ .ui-feature-list-body {
371
+ display: flex;
372
+ min-inline-size: 0;
373
+ flex-direction: column;
374
+
375
+ overflow-wrap: anywhere;
376
+ }
377
+
378
+ .ui-feature-list-description {
379
+ color: hsl(var(--muted-foreground));
380
+ font-size: var(--feature-list-description-font-size);
381
+ }
382
+
383
+ .ui-thumbnail {
384
+ display: block;
385
+
386
+ inline-size: auto;
387
+
388
+ max-inline-size: 100%;
389
+ block-size: var(--thumbnail-block-size);
390
+ border: var(--thumbnail-border-width) solid hsl(var(--border));
391
+ border-radius: var(--thumbnail-radius);
392
+
393
+ background: hsl(var(--muted));
394
+ object-fit: contain;
395
+ }
396
+
397
+ .ui-thumbnail[data-size="sm"] {
398
+ block-size: var(--thumbnail-block-size-sm);
399
+ }
400
+
401
+ .ui-thumbnail[data-size="lg"] {
402
+ block-size: var(--thumbnail-block-size-lg);
403
+ }
404
+
317
405
  .ui-timeline {
318
406
  display: flex;
319
407
  flex-direction: column;
@@ -13,6 +13,19 @@
13
13
  .ui-toggle,
14
14
  .ui-checkbox,
15
15
  .ui-radio,
16
+ .ui-slider-thumb,
17
+ .ui-control-affix-action,
18
+ .ui-control-inline-affix-action,
19
+ .ui-search-input-clear,
20
+ .ui-tag-input-remove,
21
+ .ui-color-picker-input,
22
+ .ui-upload-tile-add,
23
+ .ui-upload-picture-empty,
24
+ .ui-upload-dropzone,
25
+ .ui-tabs-add,
26
+ .ui-steps-control,
27
+ .ui-carousel-previous,
28
+ .ui-carousel-next,
16
29
  .ui-steps-inline-control,
17
30
  .ui-pagination-link,
18
31
  .ui-legal-document-toc-link,
@@ -28,6 +41,7 @@
28
41
  ):focus-visible,
29
42
 
30
43
  .ui-checkbox[data-focus-visible],
44
+ .ui-radio[data-focus-visible],
31
45
  .ui-switch[data-focus-visible],
32
46
  .ui-slider-thumb[data-focus-visible],
33
47
  .ui-focus-ring[data-focus-visible],
@@ -59,6 +73,19 @@
59
73
  .ui-toggle,
60
74
  .ui-checkbox,
61
75
  .ui-radio,
76
+ .ui-slider-thumb,
77
+ .ui-control-affix-action,
78
+ .ui-control-inline-affix-action,
79
+ .ui-search-input-clear,
80
+ .ui-tag-input-remove,
81
+ .ui-color-picker-input,
82
+ .ui-upload-tile-add,
83
+ .ui-upload-picture-empty,
84
+ .ui-upload-dropzone,
85
+ .ui-tabs-add,
86
+ .ui-steps-control,
87
+ .ui-carousel-previous,
88
+ .ui-carousel-next,
62
89
  .ui-steps-inline-control,
63
90
  .ui-pagination-link,
64
91
  .ui-legal-document-toc-link,
@@ -74,6 +101,7 @@
74
101
  ):focus-visible,
75
102
 
76
103
  :root[data-focus-outline="on"] .ui-checkbox[data-focus-visible],
104
+ :root[data-focus-outline="on"] .ui-radio[data-focus-visible],
77
105
  :root[data-focus-outline="on"] .ui-switch[data-focus-visible],
78
106
  :root[data-focus-outline="on"] .ui-slider-thumb[data-focus-visible],
79
107
  :root[data-focus-outline="on"] .ui-focus-ring[data-focus-visible],
@@ -2,6 +2,10 @@
2
2
 
3
3
  @layer components {
4
4
 
5
+ .ui-form-field-note {
6
+ word-break: auto-phrase;
7
+ }
8
+
5
9
  .ui-form-field-required {
6
10
  margin-inline-start: var(--space-inline-xs);
7
11
  color: hsl(var(--destructive));
@@ -997,7 +997,8 @@
997
997
  flex-wrap: nowrap;
998
998
  min-width: 0;
999
999
  align-items: center;
1000
- justify-content: flex-end;
1000
+
1001
+ justify-content: safe flex-end;
1001
1002
  gap: var(--pagination-gap);
1002
1003
  }
1003
1004
 
@@ -53,22 +53,67 @@
53
53
  position: absolute;
54
54
  background: var(--tabs-indicator-background, hsl(var(--primary)));
55
55
  opacity: 0;
56
- transition: opacity var(--duration-fast) var(--ease-standard);
56
+
57
+ transition: opacity var(--duration-fast, 150ms) var(--ease-standard, cubic-bezier(0.2, 0, 0, 1));
57
58
  pointer-events: none;
58
59
  }
59
60
 
60
61
  [data-slot="tabs-list"][data-variant="line"][data-orientation="horizontal"]
61
62
  [data-slot="tabs-trigger"]::after {
62
- inset-inline: 0;
63
63
  inset-block-end: calc(-1 * var(--tabs-indicator-offset));
64
64
  block-size: var(--tabs-indicator-size);
65
+ inline-size: calc(100% - 2 * var(--tabs-indicator-inset));
66
+ inset-inline-start: var(--tabs-indicator-inset);
67
+ }
68
+
69
+ [data-slot="tabs"][data-indicator-align="start"]
70
+ [data-slot="tabs-list"][data-variant="line"][data-orientation="horizontal"]
71
+ [data-slot="tabs-trigger"]::after {
72
+ inset-inline-start: 0;
73
+ }
74
+
75
+ [data-slot="tabs"][data-indicator-align="end"]
76
+ [data-slot="tabs-list"][data-variant="line"][data-orientation="horizontal"]
77
+ [data-slot="tabs-trigger"]::after {
78
+ inset-inline-start: auto;
79
+ inset-inline-end: 0;
65
80
  }
66
81
 
67
82
  [data-slot="tabs-list"][data-variant="line"][data-orientation="vertical"]
68
83
  [data-slot="tabs-trigger"]::after {
69
- inset-block: 0;
70
84
  inset-inline-end: calc(-1 * var(--tabs-indicator-offset));
71
85
  inline-size: var(--tabs-indicator-size);
86
+ block-size: calc(100% - 2 * var(--tabs-indicator-inset));
87
+ inset-block-start: var(--tabs-indicator-inset);
88
+ }
89
+
90
+ [data-slot="tabs"][data-indicator-align="start"]
91
+ [data-slot="tabs-list"][data-variant="line"][data-orientation="vertical"]
92
+ [data-slot="tabs-trigger"]::after {
93
+ inset-block-start: 0;
94
+ }
95
+
96
+ [data-slot="tabs"][data-indicator-align="end"]
97
+ [data-slot="tabs-list"][data-variant="line"][data-orientation="vertical"]
98
+ [data-slot="tabs-trigger"]::after {
99
+ inset-block-start: auto;
100
+ inset-block-end: 0;
101
+ }
102
+
103
+ [data-slot="tabs"][data-indicator-size="label"][data-orientation="horizontal"][data-size="sm"] {
104
+ --tabs-indicator-inset: var(--tabs-trigger-padding-x-sm);
105
+ }
106
+
107
+ [data-slot="tabs"][data-indicator-size="label"][data-orientation="horizontal"][data-size="md"] {
108
+ --tabs-indicator-inset: var(--tabs-trigger-padding-x-md);
109
+ }
110
+
111
+ [data-slot="tabs"][data-indicator-size="label"][data-orientation="horizontal"][data-size="lg"] {
112
+ --tabs-indicator-inset: var(--tabs-trigger-padding-x-lg);
113
+ }
114
+
115
+ [data-slot="tabs"][data-indicator-size="label"][data-orientation="vertical"] {
116
+ --tabs-indicator-inset: var(--tabs-trigger-line-padding-y);
72
117
  }
73
118
 
74
119
  [data-slot="tabs-list"][data-variant="line"]
@@ -76,10 +121,38 @@
76
121
  opacity: 1;
77
122
  }
78
123
 
124
+ [data-slot="tabs"][data-animated-ink-bar="false"]
125
+ [data-slot="tabs-list"][data-variant="line"]
126
+ [data-slot="tabs-trigger"]::after {
127
+ transition: none;
128
+ }
129
+
130
+ @keyframes ui-tabs-pane-in {
131
+ from {
132
+ opacity: 0;
133
+ }
134
+ to {
135
+ opacity: 1;
136
+ }
137
+ }
138
+
139
+ [data-slot="tabs"][data-animated-tab-pane="true"] [data-slot="tabs-panel"][data-state="active"],
140
+ [data-slot="tabs"][data-animated-tab-pane="true"]
141
+ [data-slot="tabs-content"][data-state="active"] {
142
+ animation: ui-tabs-pane-in var(--duration-base, 250ms)
143
+ var(--ease-standard, cubic-bezier(0.2, 0, 0, 1));
144
+ }
145
+
79
146
  @media (prefers-reduced-motion: reduce) {
80
147
  [data-slot="tabs-list"][data-variant="line"] [data-slot="tabs-trigger"]::after {
81
148
  transition: none;
82
149
  }
150
+
151
+ [data-slot="tabs"][data-animated-tab-pane="true"] [data-slot="tabs-panel"][data-state="active"],
152
+ [data-slot="tabs"][data-animated-tab-pane="true"]
153
+ [data-slot="tabs-content"][data-state="active"] {
154
+ animation: none;
155
+ }
83
156
  }
84
157
 
85
158
  .ui-tabs-bar {
@@ -103,6 +176,11 @@
103
176
  flex: 1 1 auto;
104
177
  }
105
178
 
179
+ [data-slot="tabs"][data-orientation="vertical"] > [data-slot="tabs-list"],
180
+ [data-slot="tabs"][data-orientation="vertical"] > .ui-tabs-bar {
181
+ flex-shrink: 0;
182
+ }
183
+
106
184
  .ui-tabs-extra {
107
185
  display: flex;
108
186
  flex: 0 0 auto;
@@ -194,6 +272,12 @@
194
272
  block-size: var(--tabs-add-icon-size);
195
273
  }
196
274
 
275
+ .ui-pagination {
276
+ max-inline-size: 100%;
277
+ overflow-x: auto;
278
+ scrollbar-width: thin;
279
+ }
280
+
197
281
  .ui-pagination .ui-button svg,
198
282
  .ui-pagination .ui-pagination-link svg {
199
283
  inline-size: var(--pagination-icon-size);
@@ -205,11 +289,11 @@
205
289
  }
206
290
 
207
291
  .ui-pagination[data-align="center"] {
208
- justify-content: center;
292
+ justify-content: safe center;
209
293
  }
210
294
 
211
295
  .ui-pagination[data-align="end"] {
212
- justify-content: flex-end;
296
+ justify-content: safe flex-end;
213
297
  }
214
298
 
215
299
  .ui-pagination[data-size="sm"] {
@@ -1692,6 +1692,22 @@
1692
1692
  color: var(--sidebar-badge-destructive-foreground, hsl(var(--destructive-foreground)));
1693
1693
  }
1694
1694
 
1695
+ .sb-trailing-icon {
1696
+ display: grid;
1697
+ width: var(--sidebar-nav-icon-size);
1698
+ height: var(--sidebar-nav-icon-size);
1699
+ flex: 0 0 auto;
1700
+ line-height: 0;
1701
+ place-items: center;
1702
+ }
1703
+
1704
+ .sb-trailing-icon svg {
1705
+ display: block;
1706
+ width: var(--sidebar-nav-icon-size);
1707
+ height: var(--sidebar-nav-icon-size);
1708
+ flex: 0 0 auto;
1709
+ }
1710
+
1695
1711
  .sb-footer {
1696
1712
  margin-top: auto;
1697
1713
  border-top: 1px solid hsl(var(--border));
@@ -1894,6 +1910,8 @@
1894
1910
  :is(.app-root[data-collapsed="true"] > .app-sidebar, .sb-root[data-collapsed="true"])
1895
1911
  .sb-section-label,
1896
1912
  :is(.app-root[data-collapsed="true"] > .app-sidebar, .sb-root[data-collapsed="true"]) .sb-label,
1913
+ :is(.app-root[data-collapsed="true"] > .app-sidebar, .sb-root[data-collapsed="true"])
1914
+ .sb-trailing-icon,
1897
1915
  :is(.app-root[data-collapsed="true"] > .app-sidebar, .sb-root[data-collapsed="true"]) .sb-badge {
1898
1916
  display: none;
1899
1917
  }
@@ -2322,6 +2340,10 @@
2322
2340
  .ui-mobile-shell {
2323
2341
  --control-height: var(--mobile-shell-control-height);
2324
2342
 
2343
+ --control-height-sm: calc(var(--control-height) - calc(0.25rem * var(--scaling)));
2344
+ --control-height-lg: calc(var(--control-height) + calc(0.25rem * var(--scaling)));
2345
+ --control-height-xs: calc(var(--control-height) - calc(0.5rem * var(--scaling)));
2346
+
2325
2347
  --mobile-shell-padding-inline: calc(
2326
2348
  var(--mobile-shell-inset-inline) + var(--mobile-shell-safe-inset-inline)
2327
2349
  );
@@ -44,8 +44,7 @@
44
44
  }
45
45
 
46
46
  .ui-table-row[data-tone] > [data-slot="table-cell"]:first-child {
47
- border-inline-start: var(--table-row-tone-rail-width) solid
48
- hsl(var(--table-row-tone-color));
47
+ border-inline-start: var(--table-row-tone-rail-width) solid hsl(var(--table-row-tone-color));
49
48
  padding-inline-start: calc(var(--table-cell-space-x) - var(--table-row-tone-rail-width));
50
49
  }
51
50
 
@@ -206,6 +205,10 @@
206
205
  }
207
206
 
208
207
  .ui-data-table-empty {
208
+ padding: var(--empty-state-space-y) var(--empty-state-space-x);
209
+ }
210
+
211
+ .ui-data-table-empty .ui-empty-state {
209
212
  padding: 0;
210
213
  }
211
214
 
@@ -36,6 +36,8 @@
36
36
 
37
37
  --card-glow: 0 0 0 0 transparent;
38
38
 
39
+ --card-hover-shadow: var(--shadow-md);
40
+
39
41
  --card-tint: transparent;
40
42
 
41
43
  --card-accent-rail-width: var(--stroke-2xl);
@@ -32,6 +32,8 @@
32
32
  --control-status-warning-glow-color: var(--warning);
33
33
  --control-status-warning-glow-alpha: var(--control-outline-error-alpha);
34
34
 
35
+ --number-input-touch-height: var(--band-height-2xl);
36
+
35
37
  --control-variant-filled-background: var(--muted);
36
38
  --control-variant-filled-hover-background: var(--accent);
37
39
 
@@ -286,6 +288,8 @@
286
288
  --calendar-footer-space-block-start: var(--space-2);
287
289
  --calendar-footer-border-width: var(--stroke-hairline);
288
290
 
291
+ --calendar-bordered-weekday-padding-block: var(--space-1);
292
+
289
293
  --transfer-pane-min-height: 14rem;
290
294
  --transfer-pane-radius: var(--radius-md);
291
295
  --transfer-panes-space-gap: var(--space-3);
@@ -317,9 +321,9 @@
317
321
  --month-picker-icon-size: var(--icon-size-md);
318
322
  --month-picker-separator-icon-size: var(--icon-size-sm);
319
323
 
320
- --button-xs-height: var(--control-height-xs);
324
+ --button-xs-height: initial;
321
325
 
322
- --button-bare-target-size: var(--control-height-xs);
326
+ --button-bare-target-size: initial;
323
327
  --button-xs-space-inline: var(--space-2);
324
328
  --button-xs-space-gap: var(--space-1);
325
329
  --button-xs-font-size: var(--font-size-xs);
@@ -369,7 +373,8 @@
369
373
 
370
374
  --control-status-error-border-color: hsl(var(--destructive));
371
375
  --control-status-warning-border-color: hsl(var(--text-warning));
372
- --control-status-warning-outline-color: var(--warning);
376
+
377
+ --control-status-warning-outline-color: var(--text-warning);
373
378
  }
374
379
 
375
380
  @media (pointer: coarse) {
@@ -82,6 +82,29 @@
82
82
 
83
83
  --legend-color: initial;
84
84
 
85
+ --swatch-size: 1rem;
86
+ --swatch-radius: 0.125rem;
87
+
88
+ --swatch-border-width: var(--stroke-hairline);
89
+
90
+ --swatch-border-color: initial;
91
+
92
+ --swatch-color: hsl(var(--muted));
93
+
94
+ --feature-list-space-gap: var(--space-stack-sm);
95
+
96
+ --feature-list-space-inline: var(--space-inline-sm);
97
+ --feature-list-font-size: var(--font-size-sm);
98
+ --feature-list-description-font-size: var(--font-size-xs);
99
+
100
+ --feature-list-mark-icon-size: var(--icon-size-md);
101
+
102
+ --thumbnail-block-size-sm: 4rem;
103
+ --thumbnail-block-size: 6rem;
104
+ --thumbnail-block-size-lg: 10rem;
105
+ --thumbnail-border-width: var(--stroke-hairline);
106
+ --thumbnail-radius: var(--radius);
107
+
85
108
  --timeline-dot-done-background: initial;
86
109
  --timeline-dot-current-background: initial;
87
110
  --timeline-line-completed-background: initial;
@@ -94,6 +94,24 @@
94
94
  --skeleton-stat-value-width: 8rem;
95
95
  --skeleton-stat-caption-width: 5rem;
96
96
 
97
+ --skeleton-element-radius: var(--radius-sm);
98
+ --skeleton-button-width-ratio: 2;
99
+ --skeleton-input-width-ratio: 5;
100
+
101
+ --skeleton-node-size: calc(var(--control-height) * 3);
102
+ --skeleton-image-glyph-size: var(--icon-size-4xl);
103
+
104
+ --skeleton-image-glyph-color: initial;
105
+
106
+ --skeleton-article-avatar-gap: var(--space-inline-lg);
107
+ --skeleton-article-avatar-title-offset: var(--space-3);
108
+ --skeleton-article-title-gap: var(--space-stack-lg);
109
+ --skeleton-article-line-gap: var(--space-stack-md);
110
+
111
+ --skeleton-paragraph-last-width: 61%;
112
+
113
+ --skeleton-sweep-gradient: initial;
114
+
97
115
  --query-load-more-space-block-start: var(--space-stack-md);
98
116
  --query-loading-more-space-block-start: var(--space-stack-sm);
99
117
 
@@ -41,10 +41,14 @@
41
41
  --tabs-list-max-inline-size: 100%;
42
42
  --tabs-list-overflow: auto;
43
43
 
44
+ --tabs-placement-responsive-breakpoint-width: 48rem;
45
+
44
46
  --tabs-indicator-background: initial;
45
47
  --tabs-indicator-size: 2px;
46
48
  --tabs-indicator-offset: 0px;
47
49
 
50
+ --tabs-indicator-inset: 0px;
51
+
48
52
  --tabs-root-gap: 0.5rem;
49
53
 
50
54
  --tabs-list-line-space-inset: 0px;