@godxjp/ui 20.0.0 → 20.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 (273) hide show
  1. package/README.md +8 -2
  2. package/dist/app/app-provider.js +37 -21
  3. package/dist/app/index.d.ts +2 -0
  4. package/dist/app/index.js +2 -0
  5. package/dist/app/storage.d.ts +17 -0
  6. package/dist/app/storage.js +28 -0
  7. package/dist/app/theme-axes.d.ts +2 -0
  8. package/dist/app/theme-axes.js +45 -0
  9. package/dist/components/charts/chart-cartesian.d.ts +2 -1
  10. package/dist/components/charts/chart-cartesian.js +52 -3
  11. package/dist/components/charts/chart-category-axis.d.ts +55 -0
  12. package/dist/components/charts/chart-category-axis.js +93 -0
  13. package/dist/components/charts/chart-frame.d.ts +10 -1
  14. package/dist/components/charts/chart-frame.js +19 -3
  15. package/dist/components/charts/compact-bar-trend.d.ts +1 -1
  16. package/dist/components/charts/compact-bar-trend.js +2 -0
  17. package/dist/components/charts/pie-chart.d.ts +1 -1
  18. package/dist/components/charts/pie-chart.js +12 -1
  19. package/dist/components/charts/recharts-peer.d.ts +49 -0
  20. package/dist/components/charts/recharts-peer.js +45 -0
  21. package/dist/components/data-display/card.d.ts +12 -1
  22. package/dist/components/data-display/card.js +22 -4
  23. package/dist/components/data-display/code-block.js +6 -2
  24. package/dist/components/data-display/data-table.d.ts +39 -4
  25. package/dist/components/data-display/data-table.js +802 -270
  26. package/dist/components/data-display/descriptions.d.ts +27 -6
  27. package/dist/components/data-display/descriptions.js +58 -17
  28. package/dist/components/data-display/index.d.ts +2 -0
  29. package/dist/components/data-display/index.js +2 -0
  30. package/dist/components/data-display/list-row.d.ts +10 -1
  31. package/dist/components/data-display/list-row.js +7 -1
  32. package/dist/components/data-display/popover.d.ts +9 -3
  33. package/dist/components/data-display/popover.js +65 -11
  34. package/dist/components/data-display/range-timeline.d.ts +38 -0
  35. package/dist/components/data-display/range-timeline.js +161 -0
  36. package/dist/components/data-display/scroll-area.js +13 -2
  37. package/dist/components/data-display/service-launcher-card.js +14 -12
  38. package/dist/components/data-display/table.d.ts +71 -3
  39. package/dist/components/data-display/table.js +56 -18
  40. package/dist/components/data-display/tree-list.js +4 -9
  41. package/dist/components/data-entry/calendar.d.ts +2 -2
  42. package/dist/components/data-entry/calendar.js +23 -3
  43. package/dist/components/data-entry/cascader.d.ts +1 -1
  44. package/dist/components/data-entry/cascader.js +188 -24
  45. package/dist/components/data-entry/color-picker.d.ts +1 -1
  46. package/dist/components/data-entry/color-picker.js +17 -5
  47. package/dist/components/data-entry/control-appearance.d.ts +64 -0
  48. package/dist/components/data-entry/control-appearance.js +39 -0
  49. package/dist/components/data-entry/control-surface.d.ts +61 -0
  50. package/dist/components/data-entry/control-surface.js +39 -0
  51. package/dist/components/data-entry/date-picker.d.ts +1 -1
  52. package/dist/components/data-entry/date-picker.js +344 -113
  53. package/dist/components/data-entry/date-range-picker.d.ts +1 -1
  54. package/dist/components/data-entry/date-range-picker.js +278 -140
  55. package/dist/components/data-entry/form-field.d.ts +1 -1
  56. package/dist/components/data-entry/form-field.js +39 -4
  57. package/dist/components/data-entry/form.d.ts +4 -0
  58. package/dist/components/data-entry/form.js +4 -2
  59. package/dist/components/data-entry/index.d.ts +7 -3
  60. package/dist/components/data-entry/index.js +10 -1
  61. package/dist/components/data-entry/input-otp.d.ts +1 -1
  62. package/dist/components/data-entry/input.d.ts +12 -34
  63. package/dist/components/data-entry/input.js +92 -24
  64. package/dist/components/data-entry/month-picker.d.ts +1 -1
  65. package/dist/components/data-entry/month-picker.js +47 -10
  66. package/dist/components/data-entry/month-range-picker.d.ts +1 -1
  67. package/dist/components/data-entry/month-range-picker.js +51 -11
  68. package/dist/components/data-entry/number-input.d.ts +7 -0
  69. package/dist/components/data-entry/number-input.js +147 -98
  70. package/dist/components/data-entry/password-input.d.ts +1 -1
  71. package/dist/components/data-entry/radio.d.ts +1 -1
  72. package/dist/components/data-entry/radio.js +61 -13
  73. package/dist/components/data-entry/search-input.d.ts +1 -1
  74. package/dist/components/data-entry/search-input.js +16 -2
  75. package/dist/components/data-entry/search-select.d.ts +2 -2
  76. package/dist/components/data-entry/search-select.js +209 -78
  77. package/dist/components/data-entry/select.d.ts +22 -4
  78. package/dist/components/data-entry/select.js +215 -163
  79. package/dist/components/data-entry/slider.d.ts +9 -1
  80. package/dist/components/data-entry/slider.js +87 -9
  81. package/dist/components/data-entry/switch.d.ts +3 -0
  82. package/dist/components/data-entry/switch.js +29 -3
  83. package/dist/components/data-entry/textarea.d.ts +14 -56
  84. package/dist/components/data-entry/textarea.js +80 -33
  85. package/dist/components/data-entry/time-picker.d.ts +2 -2
  86. package/dist/components/data-entry/time-picker.js +333 -109
  87. package/dist/components/data-entry/time-range-picker.d.ts +5 -0
  88. package/dist/components/data-entry/time-range-picker.js +89 -0
  89. package/dist/components/data-entry/transfer.d.ts +1 -1
  90. package/dist/components/data-entry/transfer.js +86 -28
  91. package/dist/components/data-entry/tree-select.d.ts +1 -1
  92. package/dist/components/data-entry/tree-select.js +201 -113
  93. package/dist/components/data-entry/tree-utils.js +7 -14
  94. package/dist/components/data-entry/upload-files.d.ts +2 -0
  95. package/dist/components/data-entry/upload-files.js +31 -0
  96. package/dist/components/data-entry/upload-request.d.ts +4 -0
  97. package/dist/components/data-entry/upload-request.js +53 -0
  98. package/dist/components/data-entry/upload-types.d.ts +28 -0
  99. package/dist/components/data-entry/upload-types.js +2 -0
  100. package/dist/components/data-entry/upload.d.ts +2 -2
  101. package/dist/components/data-entry/upload.js +475 -115
  102. package/dist/components/feedback/dialog.js +19 -19
  103. package/dist/components/feedback/sheet.js +3 -0
  104. package/dist/components/feedback/tooltip.js +3 -0
  105. package/dist/components/general/button.d.ts +2 -1
  106. package/dist/components/general/button.js +7 -1
  107. package/dist/components/general/index.d.ts +1 -0
  108. package/dist/components/general/index.js +2 -0
  109. package/dist/components/general/typography.d.ts +3 -0
  110. package/dist/components/general/typography.js +15 -1
  111. package/dist/components/general/visually-hidden.d.ts +3 -0
  112. package/dist/components/general/visually-hidden.js +9 -0
  113. package/dist/components/layout/app-launcher.d.ts +34 -0
  114. package/dist/components/layout/app-launcher.js +261 -0
  115. package/dist/components/layout/app-shell.d.ts +3 -1
  116. package/dist/components/layout/app-shell.js +34 -14
  117. package/dist/components/layout/auth-shell.d.ts +1 -1
  118. package/dist/components/layout/auth-shell.js +2 -0
  119. package/dist/components/layout/breadcrumb.d.ts +14 -2
  120. package/dist/components/layout/breadcrumb.js +46 -4
  121. package/dist/components/layout/flex.d.ts +1 -1
  122. package/dist/components/layout/flex.js +23 -2
  123. package/dist/components/layout/index.d.ts +3 -0
  124. package/dist/components/layout/index.js +5 -1
  125. package/dist/components/layout/org-switcher.js +20 -1
  126. package/dist/components/layout/page-container.d.ts +1 -1
  127. package/dist/components/layout/page-container.js +5 -3
  128. package/dist/components/layout/responsive-grid.d.ts +16 -2
  129. package/dist/components/layout/responsive-grid.js +29 -2
  130. package/dist/components/layout/sidebar.js +2 -1
  131. package/dist/components/layout/topbar-item.d.ts +3 -0
  132. package/dist/components/layout/topbar-item.js +18 -3
  133. package/dist/components/layout/topbar.d.ts +1 -1
  134. package/dist/components/layout/topbar.js +27 -6
  135. package/dist/components/navigation/dropdown-menu.d.ts +30 -2
  136. package/dist/components/navigation/dropdown-menu.js +73 -11
  137. package/dist/components/navigation/pagination.d.ts +2 -2
  138. package/dist/components/navigation/pagination.js +155 -83
  139. package/dist/components/navigation/steps.d.ts +2 -2
  140. package/dist/components/navigation/steps.js +29 -4
  141. package/dist/components/navigation/tabs.d.ts +5 -33
  142. package/dist/components/navigation/tabs.js +232 -64
  143. package/dist/components/ui/hover-card.js +3 -0
  144. package/dist/components/ui/input-otp.d.ts +26 -28
  145. package/dist/components/ui/input-otp.js +50 -7
  146. package/dist/components/ui/password-input.d.ts +36 -2
  147. package/dist/components/ui/password-input.js +27 -7
  148. package/dist/components/ui/rating.d.ts +25 -0
  149. package/dist/components/ui/rating.js +67 -27
  150. package/dist/components/ui/segmented.d.ts +9 -0
  151. package/dist/components/ui/segmented.js +17 -2
  152. package/dist/components/ui/separator.d.ts +4 -0
  153. package/dist/components/ui/separator.js +13 -0
  154. package/dist/components/ui/tag-input.d.ts +45 -0
  155. package/dist/components/ui/tag-input.js +109 -27
  156. package/dist/form/form-context.d.ts +29 -0
  157. package/dist/form/form-context.js +44 -4
  158. package/dist/form/form-field-array.d.ts +22 -0
  159. package/dist/form/form-field-array.js +50 -0
  160. package/dist/form/form-field-control.d.ts +2 -1
  161. package/dist/form/form-field-control.js +116 -40
  162. package/dist/form/form-root.d.ts +2 -1
  163. package/dist/form/form-root.js +142 -23
  164. package/dist/form/index.d.ts +3 -1
  165. package/dist/form/index.js +12 -1
  166. package/dist/i18n/index.d.ts +1 -1
  167. package/dist/i18n/index.js +3 -1
  168. package/dist/i18n/messages/en.json +59 -6
  169. package/dist/i18n/messages/ja.json +59 -6
  170. package/dist/i18n/messages/vi.json +59 -6
  171. package/dist/i18n/translate.d.ts +19 -0
  172. package/dist/i18n/translate.js +24 -0
  173. package/dist/inertia/index.d.ts +20 -0
  174. package/dist/inertia/index.js +60 -1
  175. package/dist/lib/control-styles.d.ts +25 -3
  176. package/dist/lib/control-styles.js +9 -3
  177. package/dist/lib/datetime/picker-format.d.ts +8 -0
  178. package/dist/lib/datetime/picker-format.js +54 -0
  179. package/dist/lib/overlay-portal.d.ts +18 -0
  180. package/dist/lib/overlay-portal.js +17 -0
  181. package/dist/props/components/app.prop.d.ts +13 -2
  182. package/dist/props/components/charts.prop.d.ts +21 -0
  183. package/dist/props/components/data-display.prop.d.ts +55 -4
  184. package/dist/props/components/data-entry.prop.d.ts +687 -43
  185. package/dist/props/components/form.prop.d.ts +142 -4
  186. package/dist/props/components/general.prop.d.ts +30 -1
  187. package/dist/props/components/index.d.ts +2 -2
  188. package/dist/props/components/layout.prop.d.ts +255 -8
  189. package/dist/props/components/navigation.prop.d.ts +113 -3
  190. package/dist/props/registry.d.ts +376 -10
  191. package/dist/props/registry.js +493 -9
  192. package/dist/props/vocabulary/data.prop.d.ts +179 -1
  193. package/dist/props/vocabulary/index.d.ts +4 -4
  194. package/dist/props/vocabulary/interaction.prop.d.ts +51 -2
  195. package/dist/props/vocabulary/navigation.prop.d.ts +40 -0
  196. package/dist/props/vocabulary/shared.prop.d.ts +33 -0
  197. package/dist/styles/badge-layout.css +2 -1
  198. package/dist/styles/card-layout.css +36 -5
  199. package/dist/styles/chart-layout.css +17 -1
  200. package/dist/styles/control.css +520 -14
  201. package/dist/styles/data-display-layout.css +248 -7
  202. package/dist/styles/data-entry-layout.css +13 -0
  203. package/dist/styles/layout.css +221 -4
  204. package/dist/styles/navigation-layout.css +230 -1
  205. package/dist/styles/shell-layout.css +690 -21
  206. package/dist/styles/table-layout.css +95 -6
  207. package/dist/styles/text-layout.css +5 -0
  208. package/dist/tokens/base.css +1 -0
  209. package/dist/tokens/components/badge.css +1 -0
  210. package/dist/tokens/components/chart.css +6 -0
  211. package/dist/tokens/components/control.css +81 -3
  212. package/dist/tokens/components/data-display.css +9 -0
  213. package/dist/tokens/components/descriptions.css +11 -0
  214. package/dist/tokens/components/flex.css +8 -0
  215. package/dist/tokens/components/navigation.css +55 -0
  216. package/dist/tokens/components/shell.css +100 -5
  217. package/dist/tokens/components/table.css +14 -0
  218. package/dist/tokens/foundation.css +2 -0
  219. package/dist/tokens/semantic/layout.css +9 -0
  220. package/docs/CONSUMER-RULES.md +13 -0
  221. package/docs/DESIGN-AUTHORITY.md +43 -6
  222. package/docs/DEVELOPMENT.md +4 -3
  223. package/docs/FORMS.md +151 -6
  224. package/docs/FRAME-COVERAGE-REPORT.md +29 -16
  225. package/docs/README.md +1 -1
  226. package/docs/STANDARDS-vocabulary-tokens.md +1 -1
  227. package/docs/TESTING.md +15 -6
  228. package/docs/charts/cjk-category-axis.tsx +81 -0
  229. package/docs/data-display/card/index.tsx +22 -0
  230. package/docs/data-display/data-table/examples/antd-parity.tsx +257 -0
  231. package/docs/data-display/data-table/index.tsx +23 -0
  232. package/docs/data-display/descriptions.tsx +41 -0
  233. package/docs/data-display/list-row.tsx +6 -6
  234. package/docs/data-display/scroll-area.tsx +31 -25
  235. package/docs/data-display/table.tsx +104 -45
  236. package/docs/data-display/timeline.tsx +41 -0
  237. package/docs/data-entry/date-picker.tsx +85 -0
  238. package/docs/data-entry/date-range-picker.tsx +26 -0
  239. package/docs/data-entry/form-dynamic-fields.tsx +199 -0
  240. package/docs/data-entry/form.tsx +74 -4
  241. package/docs/data-entry/input-otp.tsx +24 -0
  242. package/docs/data-entry/input.tsx +46 -1
  243. package/docs/data-entry/month-range-picker.tsx +1 -1
  244. package/docs/data-entry/select.tsx +27 -0
  245. package/docs/data-entry/switch.tsx +41 -0
  246. package/docs/data-entry/textarea.tsx +38 -0
  247. package/docs/data-entry/time-picker.tsx +85 -1
  248. package/docs/data-entry/time-range-picker.tsx +55 -0
  249. package/docs/data-entry/transfer.tsx +17 -0
  250. package/docs/data-entry/upload.tsx +56 -12
  251. package/docs/feedback/tooltip.tsx +1 -1
  252. package/docs/general/activity.tsx +2 -2
  253. package/docs/general/button/index.tsx +14 -1
  254. package/docs/general/typography.tsx +14 -1
  255. package/docs/layout/app-launcher.tsx +195 -0
  256. package/docs/layout/app-shell-arrangements.tsx +5 -5
  257. package/docs/layout/app-shell.tsx +11 -0
  258. package/docs/layout/flex.tsx +50 -0
  259. package/docs/layout/responsive-grid.tsx +21 -1
  260. package/docs/layout/topbar.tsx +5 -9
  261. package/docs/navigation/app-setting-picker.tsx +11 -0
  262. package/docs/navigation/breadcrumb.tsx +48 -0
  263. package/docs/navigation/dropdown-menu.tsx +21 -0
  264. package/docs/navigation/pagination.tsx +52 -0
  265. package/docs/navigation/steps.tsx +37 -0
  266. package/docs/navigation/tabs.tsx +97 -1
  267. package/docs/query/button-refetch.tsx +1 -0
  268. package/docs/showcase/settings-security-mfa.tsx +3 -3
  269. package/package.json +24 -4
  270. package/scripts/_agent-setup.mjs +76 -9
  271. package/scripts/init-guinea-pig.mjs +26 -4
  272. package/scripts/ui-audit.mjs +243 -30
  273. package/scripts/visual-audit.mjs +45 -7
@@ -92,6 +92,11 @@
92
92
  opacity: var(--disabled-opacity);
93
93
  }
94
94
 
95
+ .ui-button[data-fill] {
96
+ flex: 1 1 auto;
97
+ min-inline-size: 0;
98
+ }
99
+
95
100
  .ui-button svg {
96
101
  width: var(--control-icon-size);
97
102
  height: var(--control-icon-size);
@@ -157,6 +162,26 @@
157
162
  text-decoration-line: underline;
158
163
  }
159
164
 
165
+ .ui-button.ui-button--bare {
166
+ position: relative;
167
+ height: auto;
168
+ min-height: 0;
169
+ padding: 0;
170
+ border: 0;
171
+ background: transparent;
172
+ color: inherit;
173
+ font: inherit;
174
+ }
175
+
176
+ .ui-button.ui-button--bare::after {
177
+ content: "";
178
+ position: absolute;
179
+ inset: 0;
180
+ min-inline-size: var(--button-bare-target-size);
181
+ min-block-size: var(--button-bare-target-size);
182
+ margin: auto;
183
+ }
184
+
160
185
  .ui-button--default-size {
161
186
  height: var(--control-height);
162
187
  padding-inline: var(--control-padding-x);
@@ -174,10 +199,17 @@
174
199
  height: var(--control-icon-size-sm);
175
200
  }
176
201
 
177
- .ui-button [data-slot="badge"] {
178
- padding-block: 0;
179
- line-height: var(--line-height-tight);
180
- border-radius: var(--radius-sm);
202
+ .ui-button:is(
203
+ .ui-button--default,
204
+ .ui-button--destructive,
205
+ .ui-button--outline,
206
+ .ui-button--dashed,
207
+ .ui-button--secondary
208
+ )
209
+ [data-slot="badge"] {
210
+ --badge-space-y: 0;
211
+ --badge-line-height: var(--line-height-tight);
212
+ --badge-radius: var(--radius-sm);
181
213
  }
182
214
 
183
215
  .ui-button--lg {
@@ -268,8 +300,13 @@
268
300
  overflow-wrap: break-word;
269
301
  font-size: var(--control-font-size);
270
302
  line-height: var(--textarea-autogrow-line-height, var(--line-height-normal));
271
- padding-block: var(--control-multiline-padding-block);
272
- padding-inline: var(--control-padding-x);
303
+ padding-block-start: var(
304
+ --textarea-padding-block-start,
305
+ var(--control-multiline-padding-block)
306
+ );
307
+ padding-block-end: var(--textarea-padding-block-end, var(--control-multiline-padding-block));
308
+ padding-inline-start: var(--textarea-padding-inline-start, var(--control-padding-x));
309
+ padding-inline-end: var(--textarea-padding-inline-end, var(--control-padding-x));
273
310
  border: var(--control-border-width) solid transparent;
274
311
 
275
312
  min-block-size: max(
@@ -627,6 +664,7 @@
627
664
  cursor: default;
628
665
  user-select: none;
629
666
  align-items: center;
667
+ gap: var(--command-item-gap);
630
668
  border-radius: calc(var(--control-radius) - 2px);
631
669
  padding: var(--command-item-padding-y) var(--command-item-padding-x);
632
670
  font-size: var(--font-size-base);
@@ -784,6 +822,42 @@
784
822
  .ui-otp-input:disabled {
785
823
  cursor: not-allowed;
786
824
  }
825
+
826
+ .ui-otp-container:has(.ui-otp-input[data-size="xs"]) {
827
+ --control-height: var(--control-height-xs);
828
+ }
829
+ .ui-otp-container:has(.ui-otp-input[data-size="sm"]) {
830
+ --control-height: var(--control-height-sm);
831
+ }
832
+ .ui-otp-container:has(.ui-otp-input[data-size="lg"]) {
833
+ --control-height: var(--control-height-lg);
834
+ }
835
+
836
+ .ui-otp-container:has(.ui-otp-input[data-variant="filled"]) .ui-otp-slot,
837
+ .ui-otp-container:has(.ui-otp-input[data-variant="filled"])
838
+ .ui-otp-group[data-appearance="grouped"] {
839
+ border-color: var(--control-filled-border-color);
840
+ background: var(--control-filled-background);
841
+ }
842
+ .ui-otp-container:has(.ui-otp-input[data-variant="borderless"]) .ui-otp-slot,
843
+ .ui-otp-container:has(.ui-otp-input[data-variant="borderless"])
844
+ .ui-otp-group[data-appearance="grouped"] {
845
+ border-color: var(--control-borderless-border-color);
846
+ background: var(--control-borderless-background);
847
+ }
848
+
849
+ .ui-otp-container:has(.ui-otp-input[data-status="warning"]) {
850
+ --focus-ring-color: var(--warning);
851
+ }
852
+ .ui-otp-container:has(.ui-otp-input[data-status="warning"]) .ui-otp-slot,
853
+ .ui-otp-container:has(.ui-otp-input[data-status="warning"])
854
+ .ui-otp-group[data-appearance="grouped"] {
855
+ border-color: var(--control-status-warning-border-color);
856
+ }
857
+
858
+ .ui-otp-container:has(.ui-otp-input[readonly]) .ui-otp-slot {
859
+ cursor: default;
860
+ }
787
861
  .ui-otp-group {
788
862
  display: flex;
789
863
  align-items: center;
@@ -987,9 +1061,10 @@
987
1061
  gap: var(--space-2);
988
1062
  min-height: var(--control-height);
989
1063
  padding: var(--space-1) var(--control-padding-x);
990
- border: var(--control-border-width) solid hsl(var(--input));
1064
+
1065
+ border: var(--control-border-width) solid var(--control-surface-border-color);
991
1066
  border-radius: var(--control-radius);
992
- background: hsl(var(--background));
1067
+ background: var(--control-surface-background);
993
1068
  box-shadow: var(--control-shadow);
994
1069
  }
995
1070
  .ui-tag-input-disabled {
@@ -1038,6 +1113,11 @@
1038
1113
  width: 0.75rem;
1039
1114
  height: 0.75rem;
1040
1115
  }
1116
+
1117
+ .ui-tag-input-clear {
1118
+ flex-shrink: 0;
1119
+ margin-inline-start: auto;
1120
+ }
1041
1121
  .ui-tag-input-field {
1042
1122
  flex: 1;
1043
1123
  min-width: 6rem;
@@ -1076,14 +1156,50 @@
1076
1156
  max-inline-size: 100%;
1077
1157
  }
1078
1158
 
1079
- .ui-control[data-size="sm"] {
1159
+ .ui-control[data-size="sm"],
1160
+ .ui-control-surface[data-size="sm"] {
1080
1161
  --control-height: var(--control-height-sm);
1081
1162
  }
1082
1163
 
1083
- .ui-control[data-size="lg"] {
1164
+ .ui-control[data-size="lg"],
1165
+ .ui-control-surface[data-size="lg"] {
1084
1166
  --control-height: var(--control-height-lg);
1085
1167
  }
1086
1168
 
1169
+ .ui-control[data-size="xs"],
1170
+ .ui-control-surface[data-size="xs"] {
1171
+ --control-height: var(--control-height-xs);
1172
+ }
1173
+
1174
+ .ui-control-surface {
1175
+ border-color: var(--control-surface-border-color);
1176
+ background: var(--control-surface-background);
1177
+ }
1178
+
1179
+ .ui-control-surface[data-variant="filled"] {
1180
+ --control-shadow: var(--control-filled-shadow);
1181
+ border-color: var(--control-filled-border-color);
1182
+ background: var(--control-filled-background);
1183
+ }
1184
+
1185
+ .ui-control-surface[data-variant="borderless"] {
1186
+ --control-shadow: var(--control-borderless-shadow);
1187
+ border-color: var(--control-borderless-border-color);
1188
+ background: var(--control-borderless-background);
1189
+ }
1190
+
1191
+ .ui-control-surface[data-status="error"],
1192
+ .ui-control-surface[aria-invalid="true"] {
1193
+ border-color: var(--control-status-error-border-color);
1194
+ }
1195
+
1196
+ .ui-control-surface[data-status="warning"] {
1197
+ border-color: var(--control-status-warning-border-color);
1198
+ --focus-ring-color: var(--warning);
1199
+ --focus-outline-color: var(--warning);
1200
+ --focus-ring-glow-color: var(--control-status-warning-outline-color);
1201
+ }
1202
+
1087
1203
  .ui-number-input[data-size="sm"] {
1088
1204
  --control-height: var(--control-height-sm);
1089
1205
  }
@@ -1192,6 +1308,22 @@
1192
1308
  min-inline-size: var(--radix-popover-trigger-width);
1193
1309
  }
1194
1310
 
1311
+ .ui-search-select-panel[data-popup-match="content"] {
1312
+ min-inline-size: auto;
1313
+ }
1314
+
1315
+ .ui-search-select-panel[data-popup-match="fixed"] {
1316
+ min-inline-size: var(--search-select-panel-inline-size);
1317
+ inline-size: var(--search-select-panel-inline-size);
1318
+ }
1319
+
1320
+ .ui-search-select-selected-icon {
1321
+ display: inline-flex;
1322
+ align-items: center;
1323
+ margin-inline-start: auto;
1324
+ flex-shrink: 0;
1325
+ }
1326
+
1195
1327
  .ui-search-select-command {
1196
1328
  display: flex;
1197
1329
  min-block-size: 0;
@@ -1234,6 +1366,29 @@
1234
1366
  gap: var(--search-select-option-space-gap);
1235
1367
  }
1236
1368
 
1369
+ .ui-search-select-values {
1370
+ display: flex;
1371
+ min-inline-size: 0;
1372
+ flex: 1 1 0%;
1373
+ align-items: center;
1374
+ gap: var(--search-select-option-space-gap);
1375
+ overflow: hidden;
1376
+ }
1377
+
1378
+ .ui-search-select-value {
1379
+ display: inline-flex;
1380
+ max-inline-size: 100%;
1381
+ align-items: center;
1382
+ overflow: hidden;
1383
+ border-radius: var(--radius-sm);
1384
+ background: hsl(var(--secondary));
1385
+ padding: 0.0625rem var(--space-2);
1386
+ color: hsl(var(--secondary-foreground));
1387
+ font-size: var(--tag-input-chip-font-size);
1388
+ text-overflow: ellipsis;
1389
+ white-space: nowrap;
1390
+ }
1391
+
1237
1392
  .ui-search-select-option-text {
1238
1393
  display: flex;
1239
1394
  min-inline-size: 0;
@@ -1400,10 +1555,23 @@
1400
1555
  box-shadow: var(--shadow-md);
1401
1556
  }
1402
1557
 
1558
+ .ui-select-content[data-popup-match="fixed"] {
1559
+ min-width: var(--select-content-inline-size);
1560
+ width: var(--select-content-inline-size);
1561
+ }
1562
+
1403
1563
  .ui-select-viewport {
1404
1564
  padding: var(--menu-content-space-inset);
1405
1565
  }
1406
1566
 
1567
+ .ui-select-empty {
1568
+ padding-inline: var(--select-item-space-inline);
1569
+ padding-block: var(--select-empty-space-block);
1570
+ color: hsl(var(--muted-foreground));
1571
+ font-size: var(--menu-item-font-size);
1572
+ text-align: center;
1573
+ }
1574
+
1407
1575
  .ui-select-item,
1408
1576
  .ui-select-label {
1409
1577
  border-radius: var(--menu-item-radius);
@@ -1532,6 +1700,15 @@
1532
1700
  background: hsl(var(--accent));
1533
1701
  }
1534
1702
 
1703
+ .ui-time-picker-option[data-disabled] {
1704
+ opacity: var(--disabled-opacity);
1705
+ cursor: not-allowed;
1706
+ }
1707
+
1708
+ .ui-time-picker-option[data-disabled]:hover {
1709
+ background: transparent;
1710
+ }
1711
+
1535
1712
  .ui-time-picker-option[data-selected="true"] {
1536
1713
  background: hsl(var(--primary));
1537
1714
  color: hsl(var(--primary-foreground));
@@ -1542,10 +1719,28 @@
1542
1719
  }
1543
1720
 
1544
1721
  .ui-time-picker-footer {
1722
+ display: flex;
1723
+ flex-direction: column;
1724
+ gap: var(--time-picker-footer-space-gap);
1545
1725
  padding: var(--time-picker-footer-space-inset);
1546
1726
  border-block-start: 1px solid hsl(var(--border));
1547
1727
  }
1548
1728
 
1729
+ .ui-time-picker-footer-actions {
1730
+ display: flex;
1731
+ align-items: center;
1732
+ justify-content: space-between;
1733
+ gap: var(--time-picker-footer-space-gap);
1734
+ }
1735
+
1736
+ .ui-time-picker-footer-actions > :only-child:last-child {
1737
+ margin-inline-start: auto;
1738
+ }
1739
+
1740
+ .ui-time-picker-footer-actions > :first-child:not(:only-child) {
1741
+ margin-inline-end: auto;
1742
+ }
1743
+
1549
1744
  .ui-time-picker-popover {
1550
1745
  --popover-surface-inline-size: auto;
1551
1746
  --popover-space-inset: 0;
@@ -1556,10 +1751,6 @@
1556
1751
  --popover-space-inset: 0;
1557
1752
  }
1558
1753
 
1559
- .ui-control-inline-affix-pair-affixed {
1560
- padding-inline-end: var(--control-inline-affix-pair-space-inline-end);
1561
- }
1562
-
1563
1754
  .ui-time-picker-affix {
1564
1755
  display: inline-flex;
1565
1756
  align-items: center;
@@ -2301,3 +2492,318 @@
2301
2492
  text-align: end;
2302
2493
  }
2303
2494
  }
2495
+
2496
+ @layer components {
2497
+
2498
+ .ui-control--filled {
2499
+ border-color: transparent;
2500
+ background-color: hsl(var(--control-variant-filled-background));
2501
+ }
2502
+
2503
+ .ui-control--filled:hover:not(:disabled):not([readonly]):not([data-disabled]) {
2504
+ background-color: hsl(var(--control-variant-filled-hover-background));
2505
+ }
2506
+
2507
+ .ui-control--borderless {
2508
+ border-color: transparent;
2509
+ background-color: transparent;
2510
+ box-shadow: none;
2511
+ }
2512
+
2513
+ .ui-control[data-status="warning"],
2514
+ .ui-control-multiline[data-status="warning"] {
2515
+ --focus-ring-color: var(--control-status-warning-border-color);
2516
+ --focus-outline-color: var(--control-status-warning-border-color);
2517
+ --focus-ring-glow-color: var(--control-status-warning-glow-color);
2518
+ --focus-ring-glow-alpha: var(--control-status-warning-glow-alpha);
2519
+ }
2520
+
2521
+ .ui-input[data-size="lg"] {
2522
+ --control-height: var(--control-height-lg);
2523
+ }
2524
+
2525
+ .ui-control-multiline[data-size="sm"] {
2526
+ --control-height: var(--control-height-sm);
2527
+ }
2528
+
2529
+ .ui-control-multiline[data-size="lg"] {
2530
+ --control-height: var(--control-height-lg);
2531
+ }
2532
+
2533
+ .ui-control-count {
2534
+ flex-shrink: 0;
2535
+ font-size: var(--control-count-font-size);
2536
+ color: hsl(var(--control-count-color));
2537
+ font-variant-numeric: tabular-nums;
2538
+ padding-inline-end: var(--control-count-space-inline);
2539
+ }
2540
+
2541
+ .ui-control-count[data-exceeded="true"] {
2542
+ color: hsl(var(--control-count-exceeded-color));
2543
+ }
2544
+
2545
+ .ui-textarea-count {
2546
+ position: absolute;
2547
+ inset-block-end: var(--textarea-count-inset-block-end);
2548
+ inset-inline-end: var(--textarea-count-inset-inline-end);
2549
+ padding-inline-end: 0;
2550
+ }
2551
+
2552
+ .ui-input-group {
2553
+ display: inline-flex;
2554
+ inline-size: 100%;
2555
+ align-items: stretch;
2556
+ }
2557
+
2558
+ .ui-input-addon {
2559
+ display: inline-flex;
2560
+ align-items: center;
2561
+ flex-shrink: 0;
2562
+ block-size: var(--control-height);
2563
+ padding-inline: var(--input-addon-padding-inline);
2564
+ font-size: var(--control-font-size);
2565
+ color: hsl(var(--input-addon-color));
2566
+ background-color: hsl(var(--input-addon-background));
2567
+ border: var(--control-border-width) solid hsl(var(--input));
2568
+ white-space: nowrap;
2569
+ }
2570
+
2571
+ .ui-input-group > [data-slot="input-addon-before"] {
2572
+ border-start-start-radius: var(--control-radius);
2573
+ border-end-start-radius: var(--control-radius);
2574
+ border-inline-end: 0;
2575
+ }
2576
+
2577
+ .ui-input-group > [data-slot="input-addon-after"] {
2578
+ border-start-end-radius: var(--control-radius);
2579
+ border-end-end-radius: var(--control-radius);
2580
+ border-inline-start: 0;
2581
+ }
2582
+
2583
+ .ui-input-group:has(> [data-slot="input-addon-before"]) .ui-input,
2584
+ .ui-input-group:has(> [data-slot="input-addon-before"]) .ui-input-affix-wrapper {
2585
+ border-start-start-radius: 0;
2586
+ border-end-start-radius: 0;
2587
+ }
2588
+
2589
+ .ui-input-group:has(> [data-slot="input-addon-after"]) .ui-input,
2590
+ .ui-input-group:has(> [data-slot="input-addon-after"]) .ui-input-affix-wrapper {
2591
+ border-start-end-radius: 0;
2592
+ border-end-end-radius: 0;
2593
+ }
2594
+
2595
+ .ui-input-group[data-size="sm"] {
2596
+ --control-height: var(--control-height-sm);
2597
+ }
2598
+
2599
+ .ui-input-group[data-size="lg"] {
2600
+ --control-height: var(--control-height-lg);
2601
+ }
2602
+
2603
+ .ui-number-input[data-controls="off"] .ui-number-input-field {
2604
+ padding-inline-end: var(--control-padding-x);
2605
+ }
2606
+
2607
+ .ui-switch[data-loading="true"] {
2608
+ cursor: progress;
2609
+ }
2610
+
2611
+ .ui-switch-spinner {
2612
+ inline-size: var(--switch-spinner-size);
2613
+ block-size: var(--switch-spinner-size);
2614
+ color: hsl(var(--primary));
2615
+ animation: spin 1s linear infinite;
2616
+ }
2617
+
2618
+ .ui-switch-content {
2619
+ flex: 1 1 auto;
2620
+ min-inline-size: calc(var(--switch-width) - var(--switch-thumb-size));
2621
+ order: 1;
2622
+ text-align: center;
2623
+ font-size: var(--switch-content-font-size);
2624
+ color: hsl(var(--primary-foreground));
2625
+ padding-inline: var(--switch-content-space-inline);
2626
+ line-height: 1;
2627
+ }
2628
+
2629
+ .ui-switch:has(.ui-switch-content)[data-state="unchecked"] {
2630
+ background: var(--switch-unchecked-background, hsl(var(--muted-foreground)));
2631
+ }
2632
+
2633
+ .ui-switch[data-state="unchecked"] .ui-switch-content {
2634
+ color: var(--switch-content-unchecked-foreground, hsl(var(--background)));
2635
+ }
2636
+
2637
+ .ui-switch[data-state="checked"] .ui-switch-content {
2638
+ order: 0;
2639
+ }
2640
+
2641
+ .ui-switch:has(.ui-switch-content) {
2642
+ inline-size: auto;
2643
+ min-inline-size: var(--switch-width);
2644
+ }
2645
+
2646
+ .ui-switch:has(.ui-switch-content) .ui-switch-thumb {
2647
+ flex: 0 0 auto;
2648
+ order: 0;
2649
+ transform: none;
2650
+ }
2651
+
2652
+ .ui-switch:has(.ui-switch-content)[data-state="checked"] .ui-switch-thumb {
2653
+ order: 1;
2654
+ }
2655
+
2656
+ .ui-slider[data-has-marks="true"] {
2657
+ margin-block-end: calc(var(--slider-mark-space-block-start) + var(--font-size-lg));
2658
+ }
2659
+
2660
+ .ui-slider-marks {
2661
+ position: absolute;
2662
+ inset-inline: 0;
2663
+ inset-block-start: 100%;
2664
+ margin-block-start: var(--slider-mark-space-block-start);
2665
+ block-size: 0;
2666
+ }
2667
+
2668
+ .ui-slider-mark {
2669
+ position: absolute;
2670
+ inset-inline-start: var(--slider-mark-offset-inline, 0%);
2671
+ transform: translateX(-50%);
2672
+ font-size: var(--slider-mark-font-size);
2673
+ color: hsl(var(--slider-mark-color));
2674
+ white-space: nowrap;
2675
+ }
2676
+
2677
+ .ui-slider-dot {
2678
+ position: absolute;
2679
+ inset-block-start: 50%;
2680
+ inset-inline-start: var(--slider-mark-offset-inline, 0%);
2681
+ inline-size: var(--slider-dot-size);
2682
+ block-size: var(--slider-dot-size);
2683
+ transform: translate(-50%, -50%);
2684
+ border-radius: var(--radius-pill);
2685
+ background: hsl(var(--slider-dot-background));
2686
+ border: var(--control-border-width) solid hsl(var(--slider-dot-border-color));
2687
+ }
2688
+
2689
+ .ui-slider-dot[data-active="true"] {
2690
+ border-color: hsl(var(--slider-dot-active-border-color));
2691
+ }
2692
+
2693
+ .ui-slider-tooltip {
2694
+ position: absolute;
2695
+ inset-block-end: 100%;
2696
+ inset-inline-start: 50%;
2697
+ transform: translateX(-50%);
2698
+ margin-block-end: var(--slider-tooltip-offset-block);
2699
+ padding-inline: var(--slider-tooltip-padding-inline);
2700
+ border-radius: var(--slider-tooltip-radius);
2701
+ background: hsl(var(--slider-tooltip-background));
2702
+ color: hsl(var(--slider-tooltip-color));
2703
+ font-size: var(--slider-tooltip-font-size);
2704
+ white-space: nowrap;
2705
+ opacity: 0;
2706
+ pointer-events: none;
2707
+ transition: opacity 150ms;
2708
+ }
2709
+
2710
+ .ui-slider-thumb:hover .ui-slider-tooltip,
2711
+ .ui-slider-thumb:focus-visible .ui-slider-tooltip,
2712
+ .ui-slider-tooltip[data-open="true"] {
2713
+ opacity: 1;
2714
+ }
2715
+
2716
+ .ui-rating-symbol {
2717
+ position: relative;
2718
+ display: inline-flex;
2719
+ }
2720
+
2721
+ .ui-rating-star-half {
2722
+ position: absolute;
2723
+ inset-block: 0;
2724
+ inset-inline-start: 0;
2725
+ inline-size: 50%;
2726
+ z-index: 1;
2727
+ background: transparent;
2728
+ border: 0;
2729
+ padding: 0;
2730
+ cursor: pointer;
2731
+ }
2732
+
2733
+ .ui-rating-star-half-filled {
2734
+ color: hsl(var(--warning));
2735
+ }
2736
+
2737
+ .ui-radio-button-bar {
2738
+ display: inline-flex;
2739
+ align-items: stretch;
2740
+ }
2741
+
2742
+ .ui-radio-button {
2743
+ display: inline-flex;
2744
+ align-items: center;
2745
+ justify-content: center;
2746
+ block-size: var(--control-height);
2747
+ padding-inline: var(--control-padding-x);
2748
+ font-size: var(--control-font-size);
2749
+ color: hsl(var(--choice-button-color));
2750
+ background: hsl(var(--choice-button-background));
2751
+ border: var(--control-border-width) solid hsl(var(--choice-button-border-color));
2752
+ border-inline-start-width: 0;
2753
+ cursor: pointer;
2754
+ }
2755
+
2756
+ .ui-radio-button:first-child {
2757
+ border-inline-start-width: var(--control-border-width);
2758
+ border-start-start-radius: var(--control-radius);
2759
+ border-end-start-radius: var(--control-radius);
2760
+ }
2761
+
2762
+ .ui-radio-button:last-child {
2763
+ border-start-end-radius: var(--control-radius);
2764
+ border-end-end-radius: var(--control-radius);
2765
+ }
2766
+
2767
+ .ui-radio-button[data-state="checked"] {
2768
+ color: hsl(var(--choice-button-selected-color));
2769
+ border-color: hsl(var(--choice-button-selected-border-color));
2770
+ }
2771
+
2772
+ .ui-radio-button-bar[data-button-style="solid"] .ui-radio-button[data-state="checked"] {
2773
+ color: hsl(var(--choice-button-solid-color));
2774
+ background: hsl(var(--choice-button-solid-background));
2775
+ border-color: hsl(var(--choice-button-solid-background));
2776
+ }
2777
+
2778
+ .ui-radio-button:disabled {
2779
+ cursor: not-allowed;
2780
+ opacity: var(--disabled-opacity);
2781
+ }
2782
+
2783
+ .ui-segmented[data-block="true"] {
2784
+ display: flex;
2785
+ inline-size: 100%;
2786
+ }
2787
+
2788
+ .ui-segmented[data-block="true"] > .ui-segmented-item {
2789
+ flex: 1 1 0;
2790
+ min-inline-size: 0;
2791
+ justify-content: center;
2792
+ }
2793
+
2794
+ .ui-segmented[data-orientation="vertical"] {
2795
+ flex-direction: column;
2796
+ }
2797
+
2798
+ .ui-segmented[data-orientation="vertical"] > .ui-segmented-item {
2799
+ justify-content: flex-start;
2800
+ }
2801
+
2802
+ .ui-segmented[data-size="sm"] {
2803
+ --control-height: var(--control-height-sm);
2804
+ }
2805
+
2806
+ .ui-segmented[data-size="lg"] {
2807
+ --control-height: var(--control-height-lg);
2808
+ }
2809
+ }