@eifi1/ui-kit 0.54.0 → 0.55.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 (847) hide show
  1. package/README.md +90 -76
  2. package/dist/admin/plan-change.js +2 -2
  3. package/dist/admin/plan-change.js.map +1 -1
  4. package/dist/admin/user-roster.d.ts +6 -0
  5. package/dist/admin/user-roster.js +4 -0
  6. package/dist/admin/user-roster.js.map +1 -1
  7. package/dist/billing/billing-labels.d.ts +26 -0
  8. package/dist/billing/billing-labels.js +9 -0
  9. package/dist/billing/billing-labels.js.map +1 -1
  10. package/dist/billing/subscription-standing.d.ts +61 -0
  11. package/dist/billing/subscription-standing.js +51 -0
  12. package/dist/billing/subscription-standing.js.map +1 -0
  13. package/dist/billing/usage-meter.d.ts +52 -0
  14. package/dist/billing/usage-meter.js +52 -0
  15. package/dist/billing/usage-meter.js.map +1 -0
  16. package/dist/chart.d.ts +1 -0
  17. package/dist/chart.js +4 -0
  18. package/dist/chart.js.map +1 -1
  19. package/dist/components/alert-banner.js +2 -3
  20. package/dist/components/alert-banner.js.map +1 -1
  21. package/dist/components/amount-input.js +3 -15
  22. package/dist/components/amount-input.js.map +1 -1
  23. package/dist/components/autocomplete.js +2 -2
  24. package/dist/components/autocomplete.js.map +1 -1
  25. package/dist/components/bulk-action-bar.js +2 -1
  26. package/dist/components/bulk-action-bar.js.map +1 -1
  27. package/dist/components/button.d.ts +35 -1
  28. package/dist/components/button.js +5 -9
  29. package/dist/components/button.js.map +1 -1
  30. package/dist/components/calendar-heatmap.js +2 -2
  31. package/dist/components/calendar-heatmap.js.map +1 -1
  32. package/dist/components/camera-button.d.ts +89 -0
  33. package/dist/components/camera-button.js +122 -0
  34. package/dist/components/camera-button.js.map +1 -0
  35. package/dist/components/camera-capture.d.ts +66 -0
  36. package/dist/components/camera-capture.js +190 -0
  37. package/dist/components/camera-capture.js.map +1 -0
  38. package/dist/components/camera-labels.d.ts +20 -0
  39. package/dist/components/camera-labels.js +15 -0
  40. package/dist/components/camera-labels.js.map +1 -0
  41. package/dist/components/chart-edge.d.ts +9 -0
  42. package/dist/components/chart-edge.js +14 -3
  43. package/dist/components/chart-edge.js.map +1 -1
  44. package/dist/components/chart-zoom-core.js +34 -29
  45. package/dist/components/chart-zoom-core.js.map +1 -1
  46. package/dist/components/checkbox-group.js +1 -1
  47. package/dist/components/checkbox-group.js.map +1 -1
  48. package/dist/components/combobox-core.js +3 -2
  49. package/dist/components/combobox-core.js.map +1 -1
  50. package/dist/components/combobox.js +2 -2
  51. package/dist/components/combobox.js.map +1 -1
  52. package/dist/components/consent-again-notice-labels.d.ts +25 -0
  53. package/dist/components/consent-again-notice-labels.js +15 -0
  54. package/dist/components/consent-again-notice-labels.js.map +1 -0
  55. package/dist/components/consent-again-notice.d.ts +85 -0
  56. package/dist/components/consent-again-notice.js +94 -0
  57. package/dist/components/consent-again-notice.js.map +1 -0
  58. package/dist/components/country-select.js +2 -7
  59. package/dist/components/country-select.js.map +1 -1
  60. package/dist/components/currency-select.js +2 -2
  61. package/dist/components/currency-select.js.map +1 -1
  62. package/dist/components/danger-confirm.js +2 -2
  63. package/dist/components/danger-confirm.js.map +1 -1
  64. package/dist/components/data-table-column-settings.js +2 -2
  65. package/dist/components/data-table-column-settings.js.map +1 -1
  66. package/dist/components/data-table-fit.js.map +1 -1
  67. package/dist/components/data-table-virtual.js +13 -3
  68. package/dist/components/data-table-virtual.js.map +1 -1
  69. package/dist/components/date-field.js +2 -2
  70. package/dist/components/date-field.js.map +1 -1
  71. package/dist/components/date-picker.js +2 -2
  72. package/dist/components/date-picker.js.map +1 -1
  73. package/dist/components/date-range-picker.js +2 -6
  74. package/dist/components/date-range-picker.js.map +1 -1
  75. package/dist/components/dialog-frame.d.ts +3 -1
  76. package/dist/components/dialog-frame.js.map +1 -1
  77. package/dist/components/dropdown.js +7 -3
  78. package/dist/components/dropdown.js.map +1 -1
  79. package/dist/components/entity-combobox.js +2 -2
  80. package/dist/components/entity-combobox.js.map +1 -1
  81. package/dist/components/field-parts.d.ts +108 -6
  82. package/dist/components/field-parts.js +59 -6
  83. package/dist/components/field-parts.js.map +1 -1
  84. package/dist/components/field-suggestion-labels.d.ts +2 -0
  85. package/dist/components/field-suggestion-labels.js +10 -0
  86. package/dist/components/field-suggestion-labels.js.map +1 -0
  87. package/dist/components/field.js +1 -1
  88. package/dist/components/field.js.map +1 -1
  89. package/dist/components/file-button.d.ts +1 -1
  90. package/dist/components/file-button.js.map +1 -1
  91. package/dist/components/floating-panel.d.ts +7 -6
  92. package/dist/components/floating-panel.js +3 -17
  93. package/dist/components/floating-panel.js.map +1 -1
  94. package/dist/components/form-actions.d.ts +3 -2
  95. package/dist/components/form-actions.js.map +1 -1
  96. package/dist/components/hover-menu.js +3 -2
  97. package/dist/components/hover-menu.js.map +1 -1
  98. package/dist/components/icon-button.d.ts +23 -5
  99. package/dist/components/icon-button.js +6 -8
  100. package/dist/components/icon-button.js.map +1 -1
  101. package/dist/components/inline-confirm.js +2 -1
  102. package/dist/components/inline-confirm.js.map +1 -1
  103. package/dist/components/inline-entity-combobox.js +2 -2
  104. package/dist/components/inline-entity-combobox.js.map +1 -1
  105. package/dist/components/input.js +2 -2
  106. package/dist/components/input.js.map +1 -1
  107. package/dist/components/jump-calendar.js +3 -3
  108. package/dist/components/jump-calendar.js.map +1 -1
  109. package/dist/components/legal.d.ts +13 -1
  110. package/dist/components/legal.js +12 -0
  111. package/dist/components/legal.js.map +1 -1
  112. package/dist/components/legended-series-chart.d.ts +80 -0
  113. package/dist/components/legended-series-chart.js +70 -0
  114. package/dist/components/legended-series-chart.js.map +1 -0
  115. package/dist/components/lightbox.js +2 -1
  116. package/dist/components/lightbox.js.map +1 -1
  117. package/dist/components/mini-calendar.js +13 -5
  118. package/dist/components/mini-calendar.js.map +1 -1
  119. package/dist/components/modal.d.ts +23 -2
  120. package/dist/components/modal.js +24 -6
  121. package/dist/components/modal.js.map +1 -1
  122. package/dist/components/month-picker.d.ts +1 -1
  123. package/dist/components/month-picker.js +6 -6
  124. package/dist/components/month-picker.js.map +1 -1
  125. package/dist/components/multi-entity-combobox.js +2 -2
  126. package/dist/components/multi-entity-combobox.js.map +1 -1
  127. package/dist/components/multi-select.js +2 -6
  128. package/dist/components/multi-select.js.map +1 -1
  129. package/dist/components/number-input.js +2 -2
  130. package/dist/components/number-input.js.map +1 -1
  131. package/dist/components/page-header-layout.d.ts +18 -0
  132. package/dist/components/page-header-layout.js +23 -0
  133. package/dist/components/page-header-layout.js.map +1 -0
  134. package/dist/components/page-header-skeleton.d.ts +41 -0
  135. package/dist/components/page-header-skeleton.js +52 -0
  136. package/dist/components/page-header-skeleton.js.map +1 -0
  137. package/dist/components/page-header.js +4 -17
  138. package/dist/components/page-header.js.map +1 -1
  139. package/dist/components/popover.js +7 -2
  140. package/dist/components/popover.js.map +1 -1
  141. package/dist/components/release-notes-labels.d.ts +16 -0
  142. package/dist/components/release-notes-labels.js +18 -0
  143. package/dist/components/release-notes-labels.js.map +1 -0
  144. package/dist/components/release-notes.d.ts +65 -0
  145. package/dist/components/release-notes.js +65 -0
  146. package/dist/components/release-notes.js.map +1 -0
  147. package/dist/components/select.js +2 -2
  148. package/dist/components/select.js.map +1 -1
  149. package/dist/components/series-chart-labels.d.ts +9 -0
  150. package/dist/components/series-chart-labels.js +3 -1
  151. package/dist/components/series-chart-labels.js.map +1 -1
  152. package/dist/components/series-chart.d.ts +5 -0
  153. package/dist/components/series-chart.js +89 -36
  154. package/dist/components/series-chart.js.map +1 -1
  155. package/dist/components/toggle-group.js +3 -2
  156. package/dist/components/toggle-group.js.map +1 -1
  157. package/dist/components/treemap-layout.js.map +1 -1
  158. package/dist/components/treemap.d.ts +17 -15
  159. package/dist/components/treemap.js +167 -85
  160. package/dist/components/treemap.js.map +1 -1
  161. package/dist/eslint/index.js +1 -1
  162. package/dist/eslint/role-utilities.d.ts +2 -2
  163. package/dist/eslint/role-utilities.js.map +1 -1
  164. package/dist/feedback/feedback-inbox-page.d.ts +260 -0
  165. package/dist/feedback/feedback-inbox-page.js +207 -0
  166. package/dist/feedback/feedback-inbox-page.js.map +1 -0
  167. package/dist/feedback/feedback-vocabulary.js +2 -2
  168. package/dist/feedback/feedback-vocabulary.js.map +1 -1
  169. package/dist/feedback.d.ts +1 -0
  170. package/dist/feedback.js +6 -0
  171. package/dist/feedback.js.map +1 -1
  172. package/dist/hooks/use-debounce.d.ts +32 -5
  173. package/dist/hooks/use-debounce.js +6 -5
  174. package/dist/hooks/use-debounce.js.map +1 -1
  175. package/dist/hooks/use-file-picker.d.ts +3 -1
  176. package/dist/hooks/use-file-picker.js.map +1 -1
  177. package/dist/hooks/use-focus-trap.d.ts +19 -3
  178. package/dist/hooks/use-focus-trap.js +15 -5
  179. package/dist/hooks/use-focus-trap.js.map +1 -1
  180. package/dist/hooks/use-has-camera.d.ts +36 -0
  181. package/dist/hooks/use-has-camera.js +53 -0
  182. package/dist/hooks/use-has-camera.js.map +1 -0
  183. package/dist/hooks/use-hotkey.js +1 -10
  184. package/dist/hooks/use-hotkey.js.map +1 -1
  185. package/dist/hooks/use-overlay-history.d.ts +6 -1
  186. package/dist/hooks/use-overlay-history.js +10 -2
  187. package/dist/hooks/use-overlay-history.js.map +1 -1
  188. package/dist/i18n/defaults.js +11 -1
  189. package/dist/i18n/defaults.js.map +1 -1
  190. package/dist/i18n/german.js +75 -3
  191. package/dist/i18n/german.js.map +1 -1
  192. package/dist/i18n/kit-labels.d.ts +20 -0
  193. package/dist/i18n/kit-labels.js.map +1 -1
  194. package/dist/i18n/locales/en.js +92 -4
  195. package/dist/i18n/locales/en.js.map +3 -3
  196. package/dist/i18n/locales/es.js +71 -3
  197. package/dist/i18n/locales/es.js.map +1 -1
  198. package/dist/i18n/locales/fr.js +72 -2
  199. package/dist/i18n/locales/fr.js.map +1 -1
  200. package/dist/i18n/locales/hu.js +74 -3
  201. package/dist/i18n/locales/hu.js.map +1 -1
  202. package/dist/i18n/locales/it.js +74 -3
  203. package/dist/i18n/locales/it.js.map +1 -1
  204. package/dist/i18n/locales/zh.js +71 -3
  205. package/dist/i18n/locales/zh.js.map +1 -1
  206. package/dist/i18n/review.js +22 -1
  207. package/dist/i18n/review.js.map +1 -1
  208. package/dist/index.d.ts +24 -5
  209. package/dist/index.js +35 -1
  210. package/dist/index.js.map +1 -1
  211. package/dist/landing/landing-labels.d.ts +8 -0
  212. package/dist/landing/landing-labels.js +2 -1
  213. package/dist/landing/landing-labels.js.map +1 -1
  214. package/dist/lib/changelog.d.ts +130 -0
  215. package/dist/lib/changelog.js +137 -0
  216. package/dist/lib/changelog.js.map +1 -0
  217. package/dist/lib/clipboard-minus.js +2 -2
  218. package/dist/lib/clipboard-minus.js.map +1 -1
  219. package/dist/lib/dates.d.ts +29 -3
  220. package/dist/lib/dates.js +41 -12
  221. package/dist/lib/dates.js.map +1 -1
  222. package/dist/lib/editable-content.d.ts +33 -0
  223. package/dist/lib/editable-content.js +15 -0
  224. package/dist/lib/editable-content.js.map +1 -0
  225. package/dist/lib/focus-left.d.ts +47 -1
  226. package/dist/lib/focus-left.js +11 -2
  227. package/dist/lib/focus-left.js.map +1 -1
  228. package/dist/lib/server-wake.d.ts +49 -9
  229. package/dist/lib/server-wake.js +25 -14
  230. package/dist/lib/server-wake.js.map +1 -1
  231. package/dist/lib/session-refresh.d.ts +53 -0
  232. package/dist/lib/session-refresh.js +27 -1
  233. package/dist/lib/session-refresh.js.map +1 -1
  234. package/dist/rhf/fields.js +3 -3
  235. package/dist/rhf/fields.js.map +1 -1
  236. package/dist/shell/app-shell.d.ts +25 -1
  237. package/dist/shell/app-shell.js +3 -1
  238. package/dist/shell/app-shell.js.map +1 -1
  239. package/dist/shell/dev-menu.d.ts +3 -0
  240. package/dist/shell/dev-menu.js +4 -2
  241. package/dist/shell/dev-menu.js.map +1 -1
  242. package/dist/shell/held-changes-banner-labels.d.ts +23 -0
  243. package/dist/shell/held-changes-banner-labels.js +14 -0
  244. package/dist/shell/held-changes-banner-labels.js.map +1 -0
  245. package/dist/shell/held-changes-banner.d.ts +75 -0
  246. package/dist/shell/held-changes-banner.js +106 -0
  247. package/dist/shell/held-changes-banner.js.map +1 -0
  248. package/dist/shell/sync-status-indicator.d.ts +27 -12
  249. package/dist/shell/sync-status-indicator.js +13 -4
  250. package/dist/shell/sync-status-indicator.js.map +1 -1
  251. package/dist/shell/top-bar-parts-labels.d.ts +5 -0
  252. package/dist/shell/top-bar-parts-labels.js +3 -1
  253. package/dist/shell/top-bar-parts-labels.js.map +1 -1
  254. package/dist/shell.d.ts +2 -0
  255. package/dist/shell.js +3 -0
  256. package/dist/shell.js.map +1 -1
  257. package/dist/sync/engine.d.ts +11 -2
  258. package/dist/sync/engine.js +13 -5
  259. package/dist/sync/engine.js.map +1 -1
  260. package/dist/sync/hooks.d.ts +3 -2
  261. package/dist/sync/hooks.js +4 -2
  262. package/dist/sync/hooks.js.map +1 -1
  263. package/dist/testing/css-variables.generated.d.ts +2 -2
  264. package/dist/testing/css-variables.generated.js +1 -1
  265. package/dist/testing/css-variables.generated.js.map +1 -1
  266. package/dist/theme/chart-palette.d.ts +18 -0
  267. package/dist/theme/chart-palette.js +17 -1
  268. package/dist/theme/chart-palette.js.map +1 -1
  269. package/dist/theme/contrast-tokens.d.ts +3 -3
  270. package/dist/theme/contrast-tokens.js.map +1 -1
  271. package/dist/theme/contrast.d.ts +4 -4
  272. package/dist/theme/contrast.js.map +1 -1
  273. package/dist/tour/tour-overlay.js +2 -1
  274. package/dist/tour/tour-overlay.js.map +1 -1
  275. package/package.json +5 -9
  276. package/tokens.css +19 -54
  277. package/src/account/account-parts.ts +0 -47
  278. package/src/account/account-settings-labels.ts +0 -240
  279. package/src/account/account-settings.tsx +0 -698
  280. package/src/account/data-export-setting-labels.ts +0 -20
  281. package/src/account/data-export-setting.tsx +0 -200
  282. package/src/account/delete-account-setting-labels.ts +0 -33
  283. package/src/account/delete-account-setting.tsx +0 -342
  284. package/src/account/email-change-setting-labels.ts +0 -31
  285. package/src/account/email-change-setting.tsx +0 -443
  286. package/src/account/passkeys-setting.tsx +0 -445
  287. package/src/account/sessions-setting-labels.ts +0 -24
  288. package/src/account/sessions-setting.tsx +0 -283
  289. package/src/admin/admin-action-confirm-labels.ts +0 -19
  290. package/src/admin/admin-action-confirm.tsx +0 -509
  291. package/src/admin/admin-action-log-labels.ts +0 -83
  292. package/src/admin/admin-action-log.tsx +0 -464
  293. package/src/admin/admin-area-labels.ts +0 -114
  294. package/src/admin/admin-forbidden.tsx +0 -75
  295. package/src/admin/admin-overview.tsx +0 -258
  296. package/src/admin/admin-parts.ts +0 -68
  297. package/src/admin/admin-sections.tsx +0 -208
  298. package/src/admin/admin-tool-links.tsx +0 -90
  299. package/src/admin/invitations-panel-labels.ts +0 -31
  300. package/src/admin/invitations-panel.tsx +0 -516
  301. package/src/admin/mail-test-card-labels.ts +0 -19
  302. package/src/admin/mail-test-card.tsx +0 -189
  303. package/src/admin/plan-change-labels.ts +0 -5
  304. package/src/admin/plan-change.tsx +0 -474
  305. package/src/admin/reviewer-scope-editor-labels.ts +0 -16
  306. package/src/admin/reviewer-scope-editor.tsx +0 -224
  307. package/src/admin/role-select-labels.ts +0 -16
  308. package/src/admin/role-select.tsx +0 -282
  309. package/src/admin/transfer-ownership-dialog-labels.ts +0 -20
  310. package/src/admin/transfer-ownership-dialog.tsx +0 -162
  311. package/src/admin/user-roster-labels.ts +0 -17
  312. package/src/admin/user-roster.tsx +0 -559
  313. package/src/auth/accept-invitation-labels.ts +0 -21
  314. package/src/auth/accept-invitation.tsx +0 -210
  315. package/src/auth/auth-errors-labels.ts +0 -23
  316. package/src/auth/auth-errors.ts +0 -439
  317. package/src/auth/complete-name-dialog-labels.ts +0 -16
  318. package/src/auth/complete-name-dialog.tsx +0 -253
  319. package/src/auth/email-tag.ts +0 -75
  320. package/src/auth/forgot-password-form-labels.ts +0 -20
  321. package/src/auth/forgot-password-form.tsx +0 -221
  322. package/src/auth/form-rules.ts +0 -40
  323. package/src/auth/new-password-fields.tsx +0 -85
  324. package/src/auth/not-found-page-labels.ts +0 -12
  325. package/src/auth/not-found-page.tsx +0 -95
  326. package/src/auth/register-form-labels.ts +0 -31
  327. package/src/auth/register-form.tsx +0 -456
  328. package/src/auth/reset-password-form-labels.ts +0 -27
  329. package/src/auth/reset-password-form.tsx +0 -341
  330. package/src/auth/sign-in-form-labels.ts +0 -44
  331. package/src/auth/sign-in-form.tsx +0 -858
  332. package/src/auth/status-parts.tsx +0 -132
  333. package/src/auth/verify-email-labels.ts +0 -26
  334. package/src/auth/verify-email.tsx +0 -445
  335. package/src/billing/billing-banner.tsx +0 -258
  336. package/src/billing/billing-labels.ts +0 -381
  337. package/src/billing/billing-lock.ts +0 -108
  338. package/src/billing/billing-overview.ts +0 -157
  339. package/src/billing/billing-standing.ts +0 -80
  340. package/src/billing/cancel-request.ts +0 -97
  341. package/src/billing/cancel-subscription.tsx +0 -98
  342. package/src/billing/checkout-processing.ts +0 -394
  343. package/src/billing/checkout-return.ts +0 -90
  344. package/src/billing/pay-page.ts +0 -330
  345. package/src/billing/plan-card.tsx +0 -562
  346. package/src/billing/plan-change-labels.ts +0 -66
  347. package/src/billing/plan-limit-notice.tsx +0 -148
  348. package/src/billing/plan-limit-toast.tsx +0 -90
  349. package/src/billing/plan-limit.ts +0 -52
  350. package/src/billing/plan-price.ts +0 -98
  351. package/src/billing/plan-switch.tsx +0 -216
  352. package/src/billing/provider-page.ts +0 -84
  353. package/src/billing/subscription-actions.tsx +0 -247
  354. package/src/billing/subscription-status-chip.tsx +0 -95
  355. package/src/chart.ts +0 -103
  356. package/src/components/account-chips-labels.ts +0 -16
  357. package/src/components/account-chips.tsx +0 -474
  358. package/src/components/alert-banner.tsx +0 -670
  359. package/src/components/amount-input.tsx +0 -816
  360. package/src/components/appearance-labels.ts +0 -63
  361. package/src/components/authed-image-labels.ts +0 -11
  362. package/src/components/authed-image.tsx +0 -209
  363. package/src/components/autocomplete.tsx +0 -645
  364. package/src/components/breadcrumbs-labels.ts +0 -10
  365. package/src/components/breadcrumbs.tsx +0 -205
  366. package/src/components/bulk-action-bar-labels.ts +0 -11
  367. package/src/components/bulk-action-bar.tsx +0 -443
  368. package/src/components/button-group.tsx +0 -223
  369. package/src/components/button-look.ts +0 -256
  370. package/src/components/button.tsx +0 -339
  371. package/src/components/calculator.tsx +0 -341
  372. package/src/components/calendar-heatmap-labels.ts +0 -15
  373. package/src/components/calendar-heatmap.tsx +0 -600
  374. package/src/components/card.tsx +0 -377
  375. package/src/components/chart-edge.ts +0 -106
  376. package/src/components/chart-figure.tsx +0 -35
  377. package/src/components/chart-height.ts +0 -30
  378. package/src/components/chart-zoom-core.tsx +0 -627
  379. package/src/components/chart-zoom.tsx +0 -22
  380. package/src/components/chart.tsx +0 -554
  381. package/src/components/checkbox-group.tsx +0 -247
  382. package/src/components/checkbox.tsx +0 -346
  383. package/src/components/chip-input.tsx +0 -370
  384. package/src/components/chip-labels.ts +0 -13
  385. package/src/components/chip.tsx +0 -843
  386. package/src/components/choice-card.tsx +0 -544
  387. package/src/components/column-mapper-labels.ts +0 -38
  388. package/src/components/column-mapper.tsx +0 -655
  389. package/src/components/combobox-core.tsx +0 -1321
  390. package/src/components/combobox-suggestions.tsx +0 -131
  391. package/src/components/combobox.tsx +0 -716
  392. package/src/components/confirm-context.ts +0 -7
  393. package/src/components/confirm-dialog-labels.ts +0 -13
  394. package/src/components/confirm-dialog.tsx +0 -341
  395. package/src/components/copy-button-labels.ts +0 -13
  396. package/src/components/copy-button.tsx +0 -192
  397. package/src/components/country-select-labels.ts +0 -11
  398. package/src/components/country-select.tsx +0 -539
  399. package/src/components/currency-option-list.tsx +0 -188
  400. package/src/components/currency-select.tsx +0 -343
  401. package/src/components/danger-confirm-labels.ts +0 -20
  402. package/src/components/danger-confirm.tsx +0 -987
  403. package/src/components/data-table-cells.tsx +0 -118
  404. package/src/components/data-table-column-settings.tsx +0 -198
  405. package/src/components/data-table-filter-popover.tsx +0 -289
  406. package/src/components/data-table-filters.ts +0 -315
  407. package/src/components/data-table-fit.ts +0 -301
  408. package/src/components/data-table-groups.tsx +0 -288
  409. package/src/components/data-table-head.tsx +0 -280
  410. package/src/components/data-table-labels.ts +0 -198
  411. package/src/components/data-table-leading-row.tsx +0 -58
  412. package/src/components/data-table-mobile.tsx +0 -1117
  413. package/src/components/data-table-pagination.tsx +0 -202
  414. package/src/components/data-table-resize.ts +0 -188
  415. package/src/components/data-table-row-actions.tsx +0 -302
  416. package/src/components/data-table-row.tsx +0 -496
  417. package/src/components/data-table-selection.ts +0 -71
  418. package/src/components/data-table-shared.tsx +0 -287
  419. package/src/components/data-table-sort.ts +0 -163
  420. package/src/components/data-table-virtual.ts +0 -576
  421. package/src/components/data-table.tsx +0 -2598
  422. package/src/components/date-field.tsx +0 -684
  423. package/src/components/date-format-setting.tsx +0 -64
  424. package/src/components/date-picker.tsx +0 -404
  425. package/src/components/date-range-picker.tsx +0 -518
  426. package/src/components/description-list-labels.ts +0 -9
  427. package/src/components/description-list.tsx +0 -386
  428. package/src/components/dialog-frame-labels.ts +0 -7
  429. package/src/components/dialog-frame.tsx +0 -284
  430. package/src/components/disclosure.tsx +0 -476
  431. package/src/components/dropdown.tsx +0 -461
  432. package/src/components/empty-state.tsx +0 -136
  433. package/src/components/entity-combobox.tsx +0 -422
  434. package/src/components/error-boundary-labels.ts +0 -20
  435. package/src/components/error-boundary.tsx +0 -675
  436. package/src/components/facing-pair.ts +0 -93
  437. package/src/components/field-base-labels.ts +0 -20
  438. package/src/components/field-base.tsx +0 -656
  439. package/src/components/field-parts.tsx +0 -825
  440. package/src/components/field-strip.tsx +0 -129
  441. package/src/components/field.tsx +0 -206
  442. package/src/components/file-button.tsx +0 -295
  443. package/src/components/file-dropzone.tsx +0 -559
  444. package/src/components/floating-panel-labels.ts +0 -10
  445. package/src/components/floating-panel.tsx +0 -828
  446. package/src/components/focus-ring.ts +0 -16
  447. package/src/components/form-actions-labels.ts +0 -11
  448. package/src/components/form-actions.tsx +0 -578
  449. package/src/components/full-bleed-dialog.tsx +0 -294
  450. package/src/components/grouped-picker.tsx +0 -184
  451. package/src/components/help-popover.tsx +0 -117
  452. package/src/components/hover-menu.tsx +0 -343
  453. package/src/components/iban-input-labels.ts +0 -14
  454. package/src/components/iban-input.tsx +0 -236
  455. package/src/components/icon-button.tsx +0 -959
  456. package/src/components/icon-picker-labels.ts +0 -13
  457. package/src/components/icon-picker.tsx +0 -232
  458. package/src/components/image-grid-labels.ts +0 -11
  459. package/src/components/image-grid.tsx +0 -202
  460. package/src/components/inline-confirm.tsx +0 -116
  461. package/src/components/inline-edit-field-labels.ts +0 -11
  462. package/src/components/inline-edit-field.tsx +0 -552
  463. package/src/components/inline-entity-combobox.tsx +0 -849
  464. package/src/components/input.tsx +0 -394
  465. package/src/components/jump-calendar.tsx +0 -265
  466. package/src/components/language-select.tsx +0 -93
  467. package/src/components/legal-labels.ts +0 -105
  468. package/src/components/legal-page.tsx +0 -711
  469. package/src/components/legal.tsx +0 -668
  470. package/src/components/lightbox-labels.ts +0 -18
  471. package/src/components/lightbox.tsx +0 -399
  472. package/src/components/line-items-labels.ts +0 -14
  473. package/src/components/line-items.tsx +0 -602
  474. package/src/components/list-labels.ts +0 -12
  475. package/src/components/list.tsx +0 -870
  476. package/src/components/loading-state.tsx +0 -78
  477. package/src/components/measured-grid-labels.ts +0 -25
  478. package/src/components/measured-grid.tsx +0 -837
  479. package/src/components/menu-item.tsx +0 -241
  480. package/src/components/mini-calendar-labels.ts +0 -17
  481. package/src/components/mini-calendar.tsx +0 -792
  482. package/src/components/modal.tsx +0 -534
  483. package/src/components/money-draft.ts +0 -83
  484. package/src/components/money-field.tsx +0 -76
  485. package/src/components/month-grid.tsx +0 -229
  486. package/src/components/month-picker-labels.ts +0 -22
  487. package/src/components/month-picker.tsx +0 -1087
  488. package/src/components/multi-entity-combobox.tsx +0 -369
  489. package/src/components/multi-select.tsx +0 -376
  490. package/src/components/nav-pills.tsx +0 -198
  491. package/src/components/number-field.tsx +0 -327
  492. package/src/components/number-input.tsx +0 -559
  493. package/src/components/numeric-field.ts +0 -169
  494. package/src/components/numpad-sheet.tsx +0 -285
  495. package/src/components/one-time-code-input.tsx +0 -270
  496. package/src/components/page-contents-labels.ts +0 -9
  497. package/src/components/page-contents.tsx +0 -282
  498. package/src/components/page-header-context.ts +0 -8
  499. package/src/components/page-header.tsx +0 -298
  500. package/src/components/password-strength-labels.ts +0 -22
  501. package/src/components/password-strength.tsx +0 -241
  502. package/src/components/phone-input-labels.ts +0 -10
  503. package/src/components/phone-input.tsx +0 -282
  504. package/src/components/picker-sheet.tsx +0 -330
  505. package/src/components/pie-chart-labels.ts +0 -40
  506. package/src/components/pie-chart.tsx +0 -480
  507. package/src/components/popover-labels.ts +0 -14
  508. package/src/components/popover.tsx +0 -268
  509. package/src/components/progress-bar-labels.ts +0 -10
  510. package/src/components/progress-bar.tsx +0 -479
  511. package/src/components/qr-code.tsx +0 -76
  512. package/src/components/reauth-dialog-labels.ts +0 -13
  513. package/src/components/reauth-dialog.tsx +0 -265
  514. package/src/components/row-actions-labels.ts +0 -12
  515. package/src/components/row-actions.tsx +0 -795
  516. package/src/components/scroll-area.tsx +0 -123
  517. package/src/components/search-field.tsx +0 -192
  518. package/src/components/select.tsx +0 -294
  519. package/src/components/separator.tsx +0 -33
  520. package/src/components/series-chart-axes.ts +0 -342
  521. package/src/components/series-chart-budget.ts +0 -150
  522. package/src/components/series-chart-labels.ts +0 -33
  523. package/src/components/series-chart-thin.ts +0 -180
  524. package/src/components/series-chart-ticks.ts +0 -194
  525. package/src/components/series-chart.tsx +0 -1906
  526. package/src/components/server-wake-labels.ts +0 -11
  527. package/src/components/server-wake.tsx +0 -129
  528. package/src/components/settings-fields.tsx +0 -237
  529. package/src/components/share-card-labels.ts +0 -30
  530. package/src/components/share-card.tsx +0 -675
  531. package/src/components/signature-pad-labels.ts +0 -24
  532. package/src/components/signature-pad.tsx +0 -747
  533. package/src/components/signed-amount-labels.ts +0 -10
  534. package/src/components/signed-amount.tsx +0 -336
  535. package/src/components/skeleton.tsx +0 -80
  536. package/src/components/slider.tsx +0 -338
  537. package/src/components/sparkline-labels.ts +0 -14
  538. package/src/components/sparkline.tsx +0 -322
  539. package/src/components/spinner.tsx +0 -81
  540. package/src/components/stat-tile-labels.ts +0 -15
  541. package/src/components/stat-tile.tsx +0 -754
  542. package/src/components/status-dot.tsx +0 -170
  543. package/src/components/swatch-picker-labels.ts +0 -10
  544. package/src/components/swatch-picker.tsx +0 -283
  545. package/src/components/swipeable-row.tsx +0 -386
  546. package/src/components/switch.tsx +0 -273
  547. package/src/components/table-skeleton.tsx +0 -136
  548. package/src/components/table.tsx +0 -647
  549. package/src/components/tabs-labels.ts +0 -13
  550. package/src/components/tabs.tsx +0 -693
  551. package/src/components/text-link.tsx +0 -359
  552. package/src/components/text.tsx +0 -150
  553. package/src/components/textarea.tsx +0 -330
  554. package/src/components/tile-radio.tsx +0 -332
  555. package/src/components/time-input.tsx +0 -121
  556. package/src/components/toast-labels.ts +0 -12
  557. package/src/components/toast.tsx +0 -519
  558. package/src/components/toggle-group.tsx +0 -752
  559. package/src/components/toggle-legend.tsx +0 -394
  560. package/src/components/tooltip.tsx +0 -1149
  561. package/src/components/translation-review-editor.tsx +0 -290
  562. package/src/components/translation-review-labels.ts +0 -181
  563. package/src/components/translation-review-parts.tsx +0 -272
  564. package/src/components/translation-review.tsx +0 -1240
  565. package/src/components/tree-view.tsx +0 -589
  566. package/src/components/treemap-labels.ts +0 -47
  567. package/src/components/treemap-layout.ts +0 -210
  568. package/src/components/treemap.tsx +0 -1184
  569. package/src/components/trigger-aria.ts +0 -44
  570. package/src/components/use-anchor-dir.ts +0 -20
  571. package/src/components/use-mobile-reveal.ts +0 -62
  572. package/src/components/use-table-state.ts +0 -753
  573. package/src/components/user-avatar.tsx +0 -116
  574. package/src/components/wizard-stepper.tsx +0 -42
  575. package/src/components/write-lock-labels.ts +0 -10
  576. package/src/components/write-lock.tsx +0 -253
  577. package/src/currencies.ts +0 -90
  578. package/src/data-table.ts +0 -42
  579. package/src/demo/demo-banner.tsx +0 -153
  580. package/src/demo/demo-countdown.ts +0 -136
  581. package/src/demo/demo-ended.tsx +0 -90
  582. package/src/demo/demo-labels.ts +0 -78
  583. package/src/demo/demo-session.ts +0 -32
  584. package/src/demo/demo-start.tsx +0 -156
  585. package/src/eslint/index.ts +0 -161
  586. package/src/eslint/role-utilities.generated.ts +0 -146
  587. package/src/eslint/role-utilities.ts +0 -233
  588. package/src/feedback/feedback-attachment-download.tsx +0 -77
  589. package/src/feedback/feedback-attachment-labels.ts +0 -37
  590. package/src/feedback/feedback-attachment.tsx +0 -1239
  591. package/src/feedback/feedback-capture.ts +0 -287
  592. package/src/feedback/feedback-comment-thread.tsx +0 -353
  593. package/src/feedback/feedback-context-labels.ts +0 -11
  594. package/src/feedback/feedback-context.tsx +0 -245
  595. package/src/feedback/feedback-crash.ts +0 -547
  596. package/src/feedback/feedback-diagnostics.tsx +0 -41
  597. package/src/feedback/feedback-dialog-labels.ts +0 -29
  598. package/src/feedback/feedback-dialog.tsx +0 -452
  599. package/src/feedback/feedback-entry-file.tsx +0 -150
  600. package/src/feedback/feedback-inbox.tsx +0 -552
  601. package/src/feedback/feedback-labels.ts +0 -144
  602. package/src/feedback/feedback-menu-labels.ts +0 -12
  603. package/src/feedback/feedback-menu.tsx +0 -177
  604. package/src/feedback/feedback-mutation.ts +0 -20
  605. package/src/feedback/feedback-page-link.ts +0 -90
  606. package/src/feedback/feedback-public-labels.ts +0 -81
  607. package/src/feedback/feedback-public-list.tsx +0 -524
  608. package/src/feedback/feedback-public-switch.tsx +0 -102
  609. package/src/feedback/feedback-public-types.ts +0 -101
  610. package/src/feedback/feedback-record.ts +0 -428
  611. package/src/feedback/feedback-replies-context.ts +0 -9
  612. package/src/feedback/feedback-replies.tsx +0 -343
  613. package/src/feedback/feedback-rework-entry-chip.tsx +0 -18
  614. package/src/feedback/feedback-row-detail-labels.ts +0 -31
  615. package/src/feedback/feedback-row-detail.tsx +0 -871
  616. package/src/feedback/feedback-status-undo.ts +0 -109
  617. package/src/feedback/feedback-submit-dialog.tsx +0 -131
  618. package/src/feedback/feedback-submit.tsx +0 -270
  619. package/src/feedback/feedback-swipe.tsx +0 -192
  620. package/src/feedback/feedback-table-labels.ts +0 -27
  621. package/src/feedback/feedback-table.tsx +0 -912
  622. package/src/feedback/feedback-thread-labels.ts +0 -22
  623. package/src/feedback/feedback-thread-parts-labels.ts +0 -41
  624. package/src/feedback/feedback-thread.tsx +0 -905
  625. package/src/feedback/feedback-vocabulary.ts +0 -263
  626. package/src/feedback/feedback-vote-button.tsx +0 -124
  627. package/src/feedback.ts +0 -116
  628. package/src/hooks/use-anchored-panel.ts +0 -396
  629. package/src/hooks/use-anchored-rect.ts +0 -77
  630. package/src/hooks/use-announce.ts +0 -85
  631. package/src/hooks/use-authed-src.ts +0 -167
  632. package/src/hooks/use-body-scroll-lock.ts +0 -119
  633. package/src/hooks/use-breakpoint.ts +0 -133
  634. package/src/hooks/use-close-transition.ts +0 -107
  635. package/src/hooks/use-copy-to-clipboard.ts +0 -122
  636. package/src/hooks/use-debounce.ts +0 -114
  637. package/src/hooks/use-dismiss.ts +0 -371
  638. package/src/hooks/use-document-title.ts +0 -33
  639. package/src/hooks/use-file-drop.ts +0 -121
  640. package/src/hooks/use-file-picker-labels.ts +0 -28
  641. package/src/hooks/use-file-picker.tsx +0 -359
  642. package/src/hooks/use-focus-trap.ts +0 -199
  643. package/src/hooks/use-hotkey.ts +0 -212
  644. package/src/hooks/use-large-text.ts +0 -41
  645. package/src/hooks/use-long-press.ts +0 -140
  646. package/src/hooks/use-media-query.ts +0 -39
  647. package/src/hooks/use-mounted.ts +0 -39
  648. package/src/hooks/use-noindex.ts +0 -37
  649. package/src/hooks/use-overlay-history.ts +0 -714
  650. package/src/hooks/use-row-swipe.ts +0 -207
  651. package/src/hooks/use-search-param-state.ts +0 -434
  652. package/src/hooks/use-windowed-rows.ts +0 -225
  653. package/src/i18n/defaults.ts +0 -267
  654. package/src/i18n/german.ts +0 -2059
  655. package/src/i18n/kit-labels.tsx +0 -1003
  656. package/src/i18n/languages.ts +0 -349
  657. package/src/i18n/locales/de-CH.ts +0 -24
  658. package/src/i18n/locales/en.ts +0 -267
  659. package/src/i18n/locales/es.ts +0 -1999
  660. package/src/i18n/locales/fr.ts +0 -2037
  661. package/src/i18n/locales/hu.ts +0 -2004
  662. package/src/i18n/locales/it.ts +0 -2014
  663. package/src/i18n/locales/zh.ts +0 -1912
  664. package/src/i18n/plurals.ts +0 -86
  665. package/src/i18n/review.ts +0 -475
  666. package/src/i18n/shared-labels.ts +0 -138
  667. package/src/i18n/swiss.ts +0 -29
  668. package/src/index.ts +0 -1191
  669. package/src/landing/access.ts +0 -93
  670. package/src/landing/landing-actions.tsx +0 -97
  671. package/src/landing/landing-labels.ts +0 -59
  672. package/src/landing/landing-sections.tsx +0 -341
  673. package/src/landing/page-seo.ts +0 -261
  674. package/src/landing/public-header.tsx +0 -121
  675. package/src/landing/public-page.tsx +0 -106
  676. package/src/landing/routing.tsx +0 -225
  677. package/src/lib/broadcast.ts +0 -52
  678. package/src/lib/calc.ts +0 -323
  679. package/src/lib/chip-edge-snap.ts +0 -212
  680. package/src/lib/clipboard-minus.ts +0 -107
  681. package/src/lib/clipping.ts +0 -34
  682. package/src/lib/cn.ts +0 -28
  683. package/src/lib/column-mapping.ts +0 -234
  684. package/src/lib/countries.ts +0 -91
  685. package/src/lib/data-attributes.ts +0 -14
  686. package/src/lib/date-format.ts +0 -227
  687. package/src/lib/dates.ts +0 -288
  688. package/src/lib/day-format.ts +0 -96
  689. package/src/lib/decimal-marks.ts +0 -108
  690. package/src/lib/describe-failure.ts +0 -18
  691. package/src/lib/device-settings.ts +0 -147
  692. package/src/lib/direction.ts +0 -74
  693. package/src/lib/document-navigation.ts +0 -17
  694. package/src/lib/document-title.ts +0 -41
  695. package/src/lib/download.ts +0 -172
  696. package/src/lib/float-clearance.ts +0 -70
  697. package/src/lib/floating-stack.ts +0 -70
  698. package/src/lib/focus-left.ts +0 -156
  699. package/src/lib/format.ts +0 -585
  700. package/src/lib/http-status.ts +0 -38
  701. package/src/lib/iban.ts +0 -251
  702. package/src/lib/ime.ts +0 -24
  703. package/src/lib/intl-cache.ts +0 -27
  704. package/src/lib/iso-day.ts +0 -13
  705. package/src/lib/lazy-with-fallback.ts +0 -82
  706. package/src/lib/logger.ts +0 -69
  707. package/src/lib/minus.ts +0 -50
  708. package/src/lib/path-pattern.ts +0 -55
  709. package/src/lib/person-name.ts +0 -155
  710. package/src/lib/phone.ts +0 -208
  711. package/src/lib/plain-text.ts +0 -22
  712. package/src/lib/presence.ts +0 -18
  713. package/src/lib/qr-encode.ts +0 -444
  714. package/src/lib/quiet-focus.ts +0 -32
  715. package/src/lib/reduced-motion.ts +0 -22
  716. package/src/lib/refs.ts +0 -22
  717. package/src/lib/round.ts +0 -43
  718. package/src/lib/safe-storage.ts +0 -119
  719. package/src/lib/server-wake.ts +0 -315
  720. package/src/lib/session-refresh.ts +0 -472
  721. package/src/lib/share-format.ts +0 -18
  722. package/src/lib/status-tone.ts +0 -43
  723. package/src/lib/strip-fade.ts +0 -287
  724. package/src/lib/table-text.ts +0 -554
  725. package/src/lib/text-case.ts +0 -19
  726. package/src/lib/text-match.ts +0 -169
  727. package/src/lib/thenable.ts +0 -19
  728. package/src/lib/translation-review.ts +0 -769
  729. package/src/notifications/device-zone-report.ts +0 -67
  730. package/src/notifications/feedback-notification-types-labels.ts +0 -33
  731. package/src/notifications/feedback-notification-types.ts +0 -71
  732. package/src/notifications/notification-bell.tsx +0 -119
  733. package/src/notifications/notification-inbox.tsx +0 -309
  734. package/src/notifications/notification-parts.tsx +0 -81
  735. package/src/notifications/notification-types-setting.tsx +0 -406
  736. package/src/notifications/notification-types.ts +0 -89
  737. package/src/notifications/notifications-labels.ts +0 -287
  738. package/src/notifications/push-device-setting.tsx +0 -230
  739. package/src/notifications/push-devices-setting.tsx +0 -374
  740. package/src/notifications/push-worker.ts +0 -168
  741. package/src/notifications/quiet-hours-setting.tsx +0 -238
  742. package/src/notifications/unsubscribe-panel.tsx +0 -200
  743. package/src/notifications/use-push-device.ts +0 -448
  744. package/src/offline/local-first.ts +0 -100
  745. package/src/offline/pwa-update-prompt-labels.ts +0 -9
  746. package/src/offline/pwa-update-prompt.tsx +0 -78
  747. package/src/offline/query-persistence.ts +0 -391
  748. package/src/offline/service-worker-updates.ts +0 -81
  749. package/src/offline/shared-computer-labels.ts +0 -8
  750. package/src/offline/shared-computer.tsx +0 -87
  751. package/src/offline/sign-out-pending-dialog-labels.ts +0 -21
  752. package/src/offline/sign-out-pending-dialog.tsx +0 -135
  753. package/src/offline.ts +0 -37
  754. package/src/push-worker.ts +0 -25
  755. package/src/rhf/fields.tsx +0 -2187
  756. package/src/rhf/form-core.tsx +0 -324
  757. package/src/rhf/form.tsx +0 -12
  758. package/src/rhf/line-items.tsx +0 -135
  759. package/src/rhf/use-rhf-wizard-step.ts +0 -104
  760. package/src/rhf.ts +0 -21
  761. package/src/search/command-palette-labels.ts +0 -16
  762. package/src/search/command-palette.tsx +0 -624
  763. package/src/search/global-search-labels.ts +0 -13
  764. package/src/search/global-search.tsx +0 -660
  765. package/src/search/search-index.ts +0 -283
  766. package/src/search/use-command-key.ts +0 -23
  767. package/src/search.ts +0 -14
  768. package/src/settings/device-reset-setting-labels.ts +0 -20
  769. package/src/settings/device-reset-setting.tsx +0 -116
  770. package/src/settings/settings-card-classes.ts +0 -11
  771. package/src/settings/settings-catalogue.ts +0 -150
  772. package/src/settings/settings-context.ts +0 -33
  773. package/src/settings/settings-heading.tsx +0 -67
  774. package/src/settings/settings-labels.ts +0 -87
  775. package/src/settings/settings-layout.tsx +0 -471
  776. package/src/settings/settings-section.tsx +0 -108
  777. package/src/settings/use-account-appearance.ts +0 -148
  778. package/src/settings/use-account-language.ts +0 -146
  779. package/src/settings/use-settings-focus.ts +0 -128
  780. package/src/settings/use-settings-route.ts +0 -258
  781. package/src/shell/account-menu-language.tsx +0 -130
  782. package/src/shell/account-menu-text-size.tsx +0 -80
  783. package/src/shell/admin-menu.tsx +0 -183
  784. package/src/shell/app-shell-labels.ts +0 -11
  785. package/src/shell/app-shell.tsx +0 -1560
  786. package/src/shell/auth-layout.tsx +0 -186
  787. package/src/shell/company-switcher-labels.ts +0 -13
  788. package/src/shell/company-switcher.tsx +0 -136
  789. package/src/shell/dev-menu.tsx +0 -257
  790. package/src/shell/fill-height.tsx +0 -45
  791. package/src/shell/language-code.ts +0 -5
  792. package/src/shell/option-switcher-menu.tsx +0 -84
  793. package/src/shell/sync-status-indicator.tsx +0 -303
  794. package/src/shell/top-bar-actions.tsx +0 -87
  795. package/src/shell/top-bar-brand.tsx +0 -78
  796. package/src/shell/top-bar-parts-labels.ts +0 -148
  797. package/src/shell/top-bar.tsx +0 -40
  798. package/src/shell/topbar-action-menu.tsx +0 -567
  799. package/src/shell/topbar-controls.tsx +0 -269
  800. package/src/shell/tour-menu.tsx +0 -187
  801. package/src/shell.ts +0 -108
  802. package/src/sync/db.ts +0 -129
  803. package/src/sync/engine.ts +0 -1011
  804. package/src/sync/hooks.ts +0 -98
  805. package/src/sync/testing.ts +0 -73
  806. package/src/sync/wire.ts +0 -61
  807. package/src/sync.ts +0 -37
  808. package/src/table-text.ts +0 -8
  809. package/src/testing/css-variables.generated.ts +0 -112
  810. package/src/testing/css-variables.ts +0 -189
  811. package/src/testing/index.ts +0 -29
  812. package/src/testing/react.ts +0 -58
  813. package/src/testing/tour.ts +0 -41
  814. package/src/testing/viewport.ts +0 -357
  815. package/src/theme/chart-palette.ts +0 -232
  816. package/src/theme/color.ts +0 -272
  817. package/src/theme/contrast-tokens.ts +0 -268
  818. package/src/theme/contrast.ts +0 -250
  819. package/src/theme/palette-derive.ts +0 -825
  820. package/src/theme/palette-presets.ts +0 -544
  821. package/src/theme/palette-store.ts +0 -108
  822. package/src/theme/text-size.ts +0 -289
  823. package/src/theme/theme-store.ts +0 -157
  824. package/src/tour/tour-catalogue-labels.ts +0 -75
  825. package/src/tour/tour-catalogue.tsx +0 -335
  826. package/src/tour/tour-dock.ts +0 -134
  827. package/src/tour/tour-engine.ts +0 -37
  828. package/src/tour/tour-gates.ts +0 -218
  829. package/src/tour/tour-guide-button.tsx +0 -64
  830. package/src/tour/tour-guide-labels.ts +0 -15
  831. package/src/tour/tour-info.ts +0 -144
  832. package/src/tour/tour-labels.ts +0 -23
  833. package/src/tour/tour-overlay.tsx +0 -1170
  834. package/src/tour/tour.tsx +0 -750
  835. package/src/tour/use-tour-progress.ts +0 -671
  836. package/src/tour/use-tour-url-sync.ts +0 -266
  837. package/src/tour.ts +0 -21
  838. package/src/vite-env.d.ts +0 -23
  839. package/src/wizard/stepper-nav.tsx +0 -360
  840. package/src/wizard/types.ts +0 -275
  841. package/src/wizard/use-wizard.ts +0 -560
  842. package/src/wizard/validation.ts +0 -39
  843. package/src/wizard/wizard-context.tsx +0 -74
  844. package/src/wizard/wizard-labels.ts +0 -29
  845. package/src/wizard/wizard-step.tsx +0 -76
  846. package/src/wizard/wizard-summary.tsx +0 -84
  847. package/src/wizard.ts +0 -15
@@ -1,123 +0,0 @@
1
- import { useCallback, useLayoutEffect, useMemo, useRef, useState } from "react";
2
- import type { ComponentPropsWithoutRef, Ref, RefObject } from "react";
3
- import { cn } from "../lib/cn";
4
- import { mergeRefs } from "./field-parts";
5
-
6
- /**
7
- * Whether `ref`'s element currently overflows its box — the one fact a scroll
8
- * container needs to decide whether it is a keyboard stop.
9
- *
10
- * Measured on every commit (cheap: two reads, and state is set only on a change) and
11
- * whenever the element or one of its direct children resizes, which covers both
12
- * "the panel got narrower" and "the rows arrived". Without `ResizeObserver` (jsdom,
13
- * very old engines) the per-commit measurement is what remains.
14
- *
15
- * Shared with {@link Table}'s overflow wrapper, which has the same obligation.
16
- */
17
- export function useScrollOverflow(ref: RefObject<HTMLElement | null>): boolean {
18
- const [overflowing, setOverflowing] = useState(false);
19
-
20
- const measure = useCallback(() => {
21
- const el = ref.current;
22
- if (!el) return;
23
- const next = el.scrollHeight > el.clientHeight + 1 || el.scrollWidth > el.clientWidth + 1;
24
- setOverflowing((prev) => (prev === next ? prev : next));
25
- }, [ref]);
26
-
27
- // No dependency list on purpose: content changes arrive as re-renders.
28
- useLayoutEffect(() => {
29
- measure();
30
- });
31
-
32
- useLayoutEffect(() => {
33
- const el = ref.current;
34
- if (!el || typeof ResizeObserver === "undefined") return;
35
- const ro = new ResizeObserver(measure);
36
- ro.observe(el);
37
- for (const child of Array.from(el.children)) ro.observe(child);
38
- return () => ro.disconnect();
39
- }, [ref, measure]);
40
-
41
- return overflowing;
42
- }
43
-
44
- /** Thin, token-coloured scrollbars. `scrollbar-width` / `scrollbar-color` are the
45
- * standard (Firefox, Chrome 121+); the `::-webkit-scrollbar` rules are for Safari,
46
- * which has neither. Where the standard pair applies, Chrome ignores the rest. */
47
- export const THIN_SCROLLBAR_CLASS = cn(
48
- "[scrollbar-width:thin] [scrollbar-color:var(--border-strong)_transparent]",
49
- "[&::-webkit-scrollbar]:size-2 [&::-webkit-scrollbar-track]:bg-transparent",
50
- "[&::-webkit-scrollbar-thumb]:rounded-full [&::-webkit-scrollbar-thumb]:bg-[var(--border-strong)]",
51
- );
52
-
53
- const AXIS = {
54
- vertical: "overflow-y-auto overflow-x-hidden",
55
- horizontal: "overflow-x-auto overflow-y-hidden",
56
- both: "overflow-auto",
57
- } as const;
58
-
59
- export interface ScrollAreaProps extends ComponentPropsWithoutRef<"div"> {
60
- /** Which way the content may scroll. Default `vertical`. */
61
- orientation?: keyof typeof AXIS;
62
- /**
63
- * The region's accessible name. With it (or `aria-labelledby`) the container is a
64
- * `role="region"` a reader can find and name; without it, it is a plain box.
65
- * Name every ScrollArea whose content can overflow: once it is a tab stop, a
66
- * reader announces it on focus, and an unnamed one is announced as nothing.
67
- */
68
- label?: string;
69
- ref?: Ref<HTMLDivElement>;
70
- }
71
-
72
- /**
73
- * A styled overflow container: a thin scrollbar in the kit's colours, a focus ring,
74
- * and the keyboard access a plain `overflow-auto` div does not have.
75
- *
76
- * kastlan used Radix's ScrollArea for this and nothing else from it. Radix draws a
77
- * custom scrollbar in JavaScript; the platform's own, thinned and coloured, costs no
78
- * script and keeps native momentum, overscroll and scrollbar-dragging behaviour.
79
- *
80
- * A container that scrolls but holds nothing focusable cannot be scrolled from the
81
- * keyboard at all — Tab jumps straight past it (WCAG 2.1.1). So while the content
82
- * overflows, the container itself is a tab stop (`tabIndex=0`), and arrow keys and
83
- * Page Up/Down scroll it natively. While nothing overflows it is not, so a short list
84
- * adds no empty stop to the tab order.
85
- */
86
- export function ScrollArea({
87
- orientation = "vertical",
88
- label,
89
- className,
90
- ref,
91
- tabIndex,
92
- "aria-labelledby": labelledBy,
93
- ...rest
94
- }: ScrollAreaProps) {
95
- const inner = useRef<HTMLDivElement | null>(null);
96
- const overflowing = useScrollOverflow(inner);
97
- const setRef = useMemo(() => mergeRefs(inner, ref), [ref]);
98
- const named = label !== undefined || labelledBy !== undefined;
99
-
100
- return (
101
- <div
102
- {...rest}
103
- ref={setRef}
104
- role={named ? "region" : undefined}
105
- aria-label={label}
106
- aria-labelledby={labelledBy}
107
- tabIndex={tabIndex ?? (overflowing ? 0 : undefined)}
108
- data-overflowing={overflowing || undefined}
109
- data-orientation={orientation}
110
- className={cn(
111
- "relative min-h-0 min-w-0",
112
- AXIS[orientation],
113
- THIN_SCROLLBAR_CLASS,
114
- // An OUTLINE, inset: a ring is a box-shadow, which paints beneath the content —
115
- // a row with its own background would cover exactly the part of the ring that
116
- // says where focus is. An outline paints above it, and the negative offset
117
- // keeps it inside a parent that clips.
118
- "focus-visible:outline-focus focus-visible:-outline-offset-2 focus-visible:outline-brand",
119
- className,
120
- )}
121
- />
122
- );
123
- }
@@ -1,192 +0,0 @@
1
- import { useMemo, useRef } from "react";
2
- import type { InputHTMLAttributes, Ref } from "react";
3
- import { Search, X } from "lucide-react";
4
- import { cn } from "../lib/cn";
5
- import { FIELD_BASE, FIELD_TOUCH_TEXT } from "./field-base";
6
- import { mergeRefs } from "./field-parts";
7
- import { DEFAULT_COMMON_LABELS, useKitLabels } from "../i18n/kit-labels";
8
-
9
- interface SearchFieldOwnProps extends Omit<
10
- InputHTMLAttributes<HTMLInputElement>,
11
- "value" | "onChange" | "type" | "aria-label"
12
- > {
13
- value: string;
14
- /** The typed text. Emitted as a plain string, not an event: every caller of the
15
- * four this replaced wanted the string, and one of them held it in a URL param
16
- * rather than in state. */
17
- onChange: (value: string) => void;
18
- /** Names the clear button. Default: the catalogue's `common.clear`, in the
19
- * provider's language. */
20
- clearLabel?: string;
21
- /**
22
- * Draw the "×" that empties the field once there is something in it. Default
23
- * `true`.
24
- *
25
- * It used to appear only when a `clearLabel` was passed, and every kastlan call
26
- * site passed one — lease-list-page.tsx:91, trial-balance-page.tsx:~196,
27
- * account-ledger-page.tsx:~131 and data-table/resource-list-page.tsx:256 each
28
- * spelled `clearLabel={t("table.clear")}` — so the opt-in was boilerplate: a filter
29
- * you can type into and not untype is the complaint that produced the button in
30
- * the first place, and the catalogue already names it. `false` is for a field
31
- * whose clearing lives elsewhere (a "Reset filters" beside it).
32
- */
33
- clearable?: boolean;
34
- /**
35
- * `"field"` (default): the bordered filter box that sits on a page.
36
- *
37
- * `"inline"`: no box at all — no border, no fill, no padding of its own — and no
38
- * type size of its own either, so it takes the size of the header it sits in.
39
- * For a search that IS the header: a command-palette sheet, a picker's top line
40
- * (Keksdose's transaction search, which lost its `text-base` headline to a
41
- * bordered `text-sm` box when it moved onto this component). The container is
42
- * what frames it, so give the container the focus cue if it needs one
43
- * (`focus-within:`); the caret is the field's own.
44
- */
45
- variant?: "field" | "inline";
46
- /** Classes for the `<input>` itself. `className` styles the wrapper — the box the
47
- * icon and the clear button are positioned against — so it could set a width
48
- * and nothing else. See {@link Input}'s `inputClassName`. */
49
- inputClassName?: string;
50
- }
51
-
52
- // The inline look: FIELD_DISPLAY's idea (the chrome gone, the value the thing
53
- // itself) without even its baseline, because the header it sits in already draws
54
- // the line. No `text-*` size, on purpose — the input inherits the caller's.
55
- const SEARCH_INLINE =
56
- "block w-full min-w-0 border-0 bg-transparent py-1 text-primary shadow-none placeholder:text-placeholder focus:outline-none focus:ring-0 " +
57
- // FIELD_BASE carries the 16 px touch floor (§10.1); the inline look needs it too.
58
- FIELD_TOUCH_TEXT;
59
-
60
- /**
61
- * `aria-label` is REQUIRED: the whole reason this component exists is that two of the
62
- * four boxes it replaced were named by nothing but their placeholder — which disappears
63
- * the moment someone types, i.e. exactly when a screen-reader user is working in the
64
- * field. The `label` spelling it also took from 0.5 was removed in 0.34.
65
- */
66
- export type SearchFieldProps = SearchFieldOwnProps & {
67
- "aria-label": string;
68
- /** The `<input>`. A React 19 ref prop since 0.34 (MOD-4, refactor audit 2026-10); it
69
- * was `forwardRef`. */
70
- ref?: Ref<HTMLInputElement>;
71
- };
72
-
73
- /**
74
- * The page-level filter box: a search icon, a `type="search"` input, and a clear
75
- * "×" that appears once there is something to clear.
76
- *
77
- * ## Why it is a component
78
- *
79
- * Keksdose had four of these and no two agreed. Two were character-identical
80
- * twenty-line copies (the settings catalogue filter and the tour list filter) —
81
- * the same absolute icon at `left-3`, the same `pl-9 pr-9`, the same
82
- * `[&::-webkit-search-cancel-button]:appearance-none`, the same conditional clear
83
- * button at `right-2` — differing only in which state setter they called. The
84
- * third (the admin support queue) was the same idea at `left-2`/`size-3.5`/`pl-7`
85
- * with no clear button and no `type="search"`, so it had neither the `searchbox`
86
- * role nor a way to empty itself. The fourth (the bank picker) was a bare `<Input
87
- * placeholder="Search">`: no icon, no clear, and no accessible name at all once
88
- * the placeholder went away.
89
- *
90
- * None of that is a design decision anyone made; it is four people solving the
91
- * same problem on four days. A shared component is how the fourth screen gets the
92
- * clear button the first one earned.
93
- *
94
- * ## The two X's
95
- *
96
- * `type="search"` is what gives the field its `searchbox` role — and, in Chrome, a
97
- * NATIVE clear cross that paints right next to ours, so a non-empty box shows two
98
- * X's an inch apart. Ours is the one that survives: it carries an accessible name
99
- * and matches the app's other icon buttons, and it returns focus to the input so
100
- * the next query can be typed straight away.
101
- */
102
- export function SearchField({
103
- ref,
104
- value,
105
- onChange,
106
- clearLabel: clearLabelProp,
107
- clearable = true,
108
- className,
109
- inputClassName,
110
- placeholder,
111
- variant = "field",
112
- "aria-label": ariaLabel,
113
- ...rest
114
- }: SearchFieldProps) {
115
- const innerRef = useRef<HTMLInputElement>(null);
116
- const setRef = useMemo(() => mergeRefs(innerRef, ref), [ref]);
117
- const common = useKitLabels("common", DEFAULT_COMMON_LABELS);
118
- const clearLabel = clearable ? (clearLabelProp ?? common.clear) : undefined;
119
- // The accessible name AND the placeholder fallback, so the box says what it is
120
- // before anyone has typed in it.
121
- const name = ariaLabel;
122
- const inline = variant === "inline";
123
- return (
124
- <div className={cn("relative", className)}>
125
- <Search
126
- aria-hidden
127
- className={cn(
128
- "pointer-events-none absolute top-1/2 size-4 -translate-y-1/2 text-placeholder",
129
- // Logical sides throughout, so a right-to-left page gets the icon at the
130
- // start of the line and the clear button at its end.
131
- inline ? "start-0" : "start-3",
132
- )}
133
- />
134
- <input
135
- ref={setRef}
136
- type="search"
137
- value={value}
138
- onChange={(e) => onChange(e.target.value)}
139
- aria-label={name}
140
- placeholder={placeholder ?? name}
141
- // Keksdose live #333: *"Entering the search here — is that set as password?
142
- // … I got prompted for remembering my name or mail address"*, typed into the
143
- // settings filter on a phone.
144
- //
145
- // A `type="search"` input with no `name` and no `autocomplete` is a field
146
- // Chrome's autofill classifies by GUESSWORK, from the labels around it and
147
- // the other fields on the page — and a settings page has an email and a
148
- // password on it. Naming the field and declaring the intent is what takes it
149
- // out of that guess: `autocomplete="off"` says it is not part of any profile,
150
- // and a `name` of "search" is the strongest hint the heuristics take.
151
- //
152
- // The three that follow are not about autofill but about the same keyboard:
153
- // a filter box that capitalises the first letter and autocorrects "2fa" to
154
- // "2FA" is fighting the person typing into it. Declared BEFORE `{...rest}` so
155
- // a caller with a reason can still override any of them.
156
- name="search"
157
- autoComplete="off"
158
- autoCapitalize="none"
159
- autoCorrect="off"
160
- spellCheck={false}
161
- {...rest}
162
- className={cn(
163
- inline ? SEARCH_INLINE : FIELD_BASE,
164
- inline ? "ps-7" : "ps-9",
165
- // Room for our own "×" only when there is one; a field that can't be
166
- // cleared has no reason to reserve the space.
167
- clearLabel === undefined ? (inline ? "pe-0" : "pe-3") : inline ? "pe-8" : "pe-9",
168
- "[&::-webkit-search-cancel-button]:appearance-none",
169
- inputClassName,
170
- )}
171
- />
172
- {clearLabel !== undefined && value !== "" && (
173
- <button
174
- type="button"
175
- onClick={() => {
176
- onChange("");
177
- // Clearing is the start of the next query far more often than it is the
178
- // end of this one, so the caret stays where it can be typed into.
179
- innerRef.current?.focus();
180
- }}
181
- aria-label={clearLabel}
182
- className={cn(
183
- "absolute top-1/2 -translate-y-1/2 rounded p-1 text-placeholder hover:text-secondary",
184
- inline ? "end-0" : "end-2",
185
- )}
186
- >
187
- <X className="size-4" />
188
- </button>
189
- )}
190
- </div>
191
- );
192
- }
@@ -1,294 +0,0 @@
1
- import { useId } from "react";
2
- import type { KeyboardEvent, MouseEvent, ReactNode, Ref, SelectHTMLAttributes } from "react";
3
- import { cn } from "../lib/cn";
4
- import type { CommitScope } from "./write-lock";
5
- import {
6
- LockedReason,
7
- mergeDescribedBy,
8
- type DisabledReasonDisplay,
9
- type FieldHelpProps,
10
- useFieldError,
11
- useFieldHint,
12
- useLockReason,
13
- } from "./field-parts";
14
- import {
15
- FIELD_BASE,
16
- FIELD_FLOATING_PAD,
17
- FIELD_INVALID,
18
- FieldChevron,
19
- FieldGroup,
20
- FloatingField,
21
- SELECT_MENU_DRESS,
22
- SELECT_SM,
23
- fieldBelow,
24
- } from "./field-base";
25
-
26
- export interface SelectProps extends Omit<SelectHTMLAttributes<HTMLSelectElement>, "size">, FieldHelpProps {
27
- label?: ReactNode;
28
- /** See {@link Input}'s `invalid`. */
29
- invalid?: boolean;
30
- /** See {@link Input}'s `error`. */
31
- error?: ReactNode;
32
- /** A {@link FieldHint} for the label line — see {@link FloatingField}. Plain
33
- * TEXT (a string or a number) is a caption instead, and goes UNDER the field
34
- * like every other field's hint, attached through `aria-describedby`: the label
35
- * line is 11px of strip shared with the label, and a sentence placed there was
36
- * set in the value's type on top of both the label and the value. On an
37
- * UNLABELLED Select (no label line) a FieldHint sits at the field's end edge,
38
- * outside the box. Since 0.34 a FieldHint is the caption at Large and on a touch
39
- * screen, as on Input (`useInlineHint`); a `HelpPopover` stays a "?". Beside a
40
- * `help` (0.36) the hint is the caption at every size: the help's "?" is the only one. */
41
- hint?: ReactNode;
42
- /**
43
- * `"sm"`: a 28px, 12px-type select for a toolbar or a table header, where the
44
- * 36px field stands a head taller than the buttons beside it. `"md"` (default)
45
- * is the field every form uses. Unlabelled selects only — a floating label needs
46
- * the tall box to float in, so a labelled Select ignores `"sm"`.
47
- *
48
- * A NUMBER is still the native attribute (the rows of a list box) and is passed
49
- * straight through, so the one HTML meaning of `size` keeps working. Above 1 (as
50
- * with `multiple`) the browser draws a list box, and the Select drops its chevron
51
- * and the end padding reserved for it.
52
- */
53
- size?: "sm" | "md" | number;
54
- /** Classes for the `<select>` itself. `className` styles the WRAPPER — the box
55
- * the chevron is positioned against — so it could set a width and nothing
56
- * else; this is the way to the element. See {@link Input}'s `inputClassName`. */
57
- selectClassName?: string;
58
- /**
59
- * Why the choice cannot be changed — {@link Button}'s `disabledReason`, for a select
60
- * that SAVES on change (a role picker in a members table, a status in a row). keksdose
61
- * K3: those sat inside a hand-rolled `SaveGuard` that forced a native `disabled`, which
62
- * took the field out of the tab order so the reason never reached a keyboard.
63
- *
64
- * With a reason the select is `aria-disabled` instead — still focusable, still showing
65
- * its value — its list does not open (pointer and keys are swallowed, Tab and Escape
66
- * excepted), `onChange` is never called, and the reason is a line under the field at
67
- * Large and on a touch screen, else in the kit {@link Tooltip} (`disabledReasonDisplay`),
68
- * and on `aria-describedby`. It wears the settled look of a disabled field and drops
69
- * its chevron, as a disabled Select does (dev#474). It wins over `disabled`.
70
- *
71
- * Use it CONTROLLED (`value` + `onChange`): React puts a controlled value back after
72
- * the swallowed change. A touch platform's own picker may still open; nothing it picks
73
- * is kept or reported.
74
- */
75
- disabledReason?: ReactNode;
76
- /**
77
- * Where the reason shows — {@link Button}'s `disabledReasonDisplay`: by default a line
78
- * under the field at Large and on a touch screen, the tooltip otherwise (§4 "No fact
79
- * only in a tooltip"; DUP-3, refactor audit 2026-10).
80
- */
81
- disabledReasonDisplay?: DisabledReasonDisplay;
82
- /**
83
- * This select COMMITS — choosing saves. Under a locked {@link WriteLockProvider} it is
84
- * locked the `disabledReason` way with the lock's reason (which wins over its own).
85
- * No provider, or an unlocked one: no effect. Button's `commit`, for keksdose K3; a
86
- * {@link CommitScope} since 0.33.
87
- */
88
- commit?: CommitScope;
89
- /** The `<select>`. A React 19 ref prop since 0.34 — see {@link InputProps.ref}. */
90
- ref?: Ref<HTMLSelectElement>;
91
- }
92
-
93
- /** Keys a locked select still answers: leaving it, and dismissing its tooltip. Every
94
- * other key would open the list or step the value. */
95
- const LOCKED_SELECT_KEYS = new Set(["Tab", "Escape", "Shift"]);
96
-
97
- /** FIELD_BASE's `disabled:` look, for a select that is locked without being `disabled`
98
- * (the `:disabled` variants cannot match it). */
99
- const FIELD_LOCKED = "cursor-not-allowed bg-surface-2 text-muted";
100
-
101
- export function Select(props: SelectProps) {
102
- const {
103
- ref,
104
- className,
105
- label,
106
- id,
107
- children,
108
- invalid,
109
- error,
110
- hint: hintProp,
111
- help,
112
- size,
113
- selectClassName,
114
- disabledReason,
115
- disabledReasonDisplay,
116
- commit,
117
- onMouseDown,
118
- onKeyDown,
119
- onChange,
120
- ...rest
121
- } = props;
122
- // See Input's `reserve`.
123
- const reserve = "error" in props || "hint" in props || "showCount" in props;
124
- const generated = useId();
125
- const lock = useLockReason(commit, disabledReason);
126
- const locked = lock.locked;
127
- // Only a number reaches the DOM; the two words are this component's own.
128
- const nativeSize = typeof size === "number" ? size : undefined;
129
- // A numeric size above 1 (or `multiple`) makes the browser draw a LIST BOX — all
130
- // the rows in the field, no menu to drop. The dropdown dress did not fit it: the
131
- // chevron was centred on a box several rows tall, sat on top of the rows' text
132
- // at the end edge, and `pe-9` clipped every option nine units early. A list box
133
- // gets the plain field instead — its own native scroll, no chevron, even padding.
134
- const listBox = (nativeSize !== undefined && nativeSize > 1) || Boolean(rest.multiple);
135
- const small = size === "sm" && label === undefined;
136
- const fieldId = id ?? generated;
137
- // Text is a caption under the field; a FieldHint rides the label line — and at Large
138
- // and on a touch screen is its words, a caption like any text (§4; a HelpPopover stays
139
- // on the label line, §10.23). See `hint` above. Through useFieldHint since 0.34, not a
140
- // copy of its rule (DUP-2, refactor audit 2026-10).
141
- const hintParts = useFieldHint(hintProp, rest["aria-describedby"], { help, name: label ?? rest["aria-label"] });
142
- const hint = hintParts.labelHint;
143
- const { isInvalid, describedBy, errorEl } = useFieldError(
144
- error,
145
- invalid,
146
- // The caption goes in BEFORE the error — the standing advice first, the news
147
- // second, the order useFieldError keeps for a caller's own description. A lock's
148
- // reason sits between the two.
149
- mergeDescribedBy(hintParts.describedBy, locked && lock.reasonId),
150
- rest["aria-invalid"],
151
- );
152
- const below = fieldBelow(hintParts, null, errorEl);
153
- // Custom chevron (native arrow hidden via appearance-none) so it sits a touch
154
- // in from the end border and matches both themes — feedback #223. A DISABLED
155
- // select has no menu to drop, so it drops the chevron too: the arrow is the one
156
- // thing on the control that promises a choice (Keksdose dev#474, where the
157
- // account type became read-only and still looked exactly like a picker). A locked
158
- // one has no menu either.
159
- const chevron =
160
- rest.disabled || listBox || locked ? null : <FieldChevron className={small ? "end-1.5 size-3.5" : undefined} />;
161
- // `pe-9` is the room the chevron takes; a list box has none to make room for.
162
- //
163
- // A list box's height is `size` rows plus its padding, but its rows are clipped at
164
- // the PADDING edge, not the content edge — so FIELD_BASE's `pb-2` showed the next
165
- // row through the bottom padding: `size={4}` drew four and a half. The vertical room
166
- // moves onto the rows instead (option padding counts toward the row height the
167
- // browser sizes the box by), and the box keeps no bottom padding: exactly `size`
168
- // whole rows, at any width.
169
- const dress = listBox ? "overflow-y-auto [&_option]:py-1" : SELECT_MENU_DRESS;
170
- // Locked: focusable, but nothing opens the list or moves the value, and nothing is
171
- // reported. The no-op `onChange` keeps a controlled select's value where React put
172
- // it (and keeps React from warning about a `value` with no handler).
173
- const interaction = locked
174
- ? {
175
- disabled: undefined,
176
- "aria-disabled": true as const,
177
- onMouseDown: (e: MouseEvent<HTMLSelectElement>) => e.preventDefault(),
178
- onKeyDown: (e: KeyboardEvent<HTMLSelectElement>) => {
179
- if (!LOCKED_SELECT_KEYS.has(e.key) && !e.ctrlKey && !e.metaKey) e.preventDefault();
180
- },
181
- onChange: () => {},
182
- }
183
- : { onMouseDown, onKeyDown, onChange };
184
- // While locked the field sits in the reason's frame (the line, or the Tooltip), which
185
- // becomes the outermost box — so `className` (a width, a grid cell) moves onto it, and
186
- // the form keeps its layout. `block` so a full-width field stays full width inside it.
187
- const boxClass = locked ? undefined : className;
188
- const withReason = (box: ReactNode) =>
189
- locked ? (
190
- <LockedReason lock={lock} display={disabledReasonDisplay} className={cn("block", className)}>
191
- {box}
192
- </LockedReason>
193
- ) : (
194
- box
195
- );
196
- if (label === undefined) {
197
- const select = (
198
- <select
199
- ref={ref}
200
- // `id` is destructured out of the props to feed `fieldId`, and this branch
201
- // never put it back — so an UNLABELLED Select swallowed it and the
202
- // consumer's own `<label for="…">` pointed at nothing. The control stayed
203
- // in the tab order with no accessible name at all: reachable, and silent
204
- // when it was reached. Input and Textarea both forward it here; this is
205
- // the third one doing the same thing.
206
- id={id}
207
- size={nativeSize}
208
- {...rest}
209
- {...interaction}
210
- // OR-ed with the spread for the reason spelled out on Input's copy: this
211
- // branch wrote `invalid || undefined`, so passing `aria-invalid` by hand
212
- // to a Select — which is what a caller does when the validity is
213
- // `"grammar"` or `"spelling"`, or when the paint is not wanted — had the
214
- // attribute silently dropped. Input has never done that.
215
- aria-invalid={isInvalid || rest["aria-invalid"] || undefined}
216
- aria-describedby={describedBy}
217
- className={cn(
218
- FIELD_BASE,
219
- dress,
220
- listBox && "py-0",
221
- small && SELECT_SM,
222
- locked && FIELD_LOCKED,
223
- selectClassName,
224
- isInvalid && FIELD_INVALID,
225
- )}
226
- >
227
- {children}
228
- </select>
229
- );
230
- // A FieldHint with no label line to ride (0.15.5 P8): an unlabelled Select — named
231
- // by `aria-label` or a `<label>` of the caller's — dropped a non-text `hint`
232
- // without a trace, so the "?" a caller passed never rendered and a test looking
233
- // for its button found none. It goes at the end of the field instead, outside the
234
- // box, as the label line's own hint goes at the end of the label.
235
- if (hint !== undefined) {
236
- return (
237
- <FieldGroup errorEl={below} reserve={reserve}>
238
- {withReason(
239
- <div className={cn("flex items-center gap-1.5", boxClass)}>
240
- <div className="relative min-w-0 flex-1">
241
- {select}
242
- {chevron}
243
- </div>
244
- <span className="flex shrink-0 items-center">{hint}</span>
245
- </div>,
246
- )}
247
- </FieldGroup>
248
- );
249
- }
250
- return (
251
- <FieldGroup errorEl={below} reserve={reserve}>
252
- {withReason(
253
- <div className={cn("relative", boxClass)}>
254
- {select}
255
- {chevron}
256
- </div>,
257
- )}
258
- </FieldGroup>
259
- );
260
- }
261
- return (
262
- <FieldGroup errorEl={below} reserve={reserve}>
263
- {withReason(
264
- <FloatingField className={boxClass} htmlFor={fieldId} label={label} staticLabel hint={hint}>
265
- <select
266
- ref={ref}
267
- id={fieldId}
268
- size={nativeSize}
269
- {...rest}
270
- {...interaction}
271
- aria-invalid={isInvalid || rest["aria-invalid"] || undefined}
272
- aria-describedby={describedBy}
273
- className={cn(
274
- FIELD_BASE,
275
- // The floated label takes the top strip of a list box too, so its first
276
- // row starts under the label rather than behind it. No bottom padding — see
277
- // `dress`.
278
- // At Large the label stands above the field (§10.17): no strip.
279
- listBox ? "pt-5 pb-0 large:pt-2" : FIELD_FLOATING_PAD,
280
- "peer",
281
- dress,
282
- locked && FIELD_LOCKED,
283
- selectClassName,
284
- isInvalid && FIELD_INVALID,
285
- )}
286
- >
287
- {children}
288
- </select>
289
- {chevron}
290
- </FloatingField>,
291
- )}
292
- </FieldGroup>
293
- );
294
- }
@@ -1,33 +0,0 @@
1
- import type { ComponentPropsWithRef } from "react";
2
- import { cn } from "../lib/cn";
3
-
4
- export interface SeparatorProps extends Omit<ComponentPropsWithRef<"div">, "children" | "role"> {
5
- orientation?: "horizontal" | "vertical";
6
- /**
7
- * `false` (default, as in Radix): a real `role="separator"`, which a reader
8
- * announces — right between groups of controls, a menu's sections, a toolbar's
9
- * halves. `true`: a line for the eye only (`role="none"`), for a divider that
10
- * separates nothing the structure does not already separate.
11
- */
12
- decorative?: boolean;
13
- }
14
-
15
- /**
16
- * A hairline between two things.
17
- *
18
- * kastlan's other Radix leftover. `aria-orientation` is set only when vertical:
19
- * horizontal is the role's default, and stating a default is noise in every reader's
20
- * verbose mode.
21
- */
22
- export function Separator({ orientation = "horizontal", decorative = false, className, ...rest }: SeparatorProps) {
23
- const vertical = orientation === "vertical";
24
- return (
25
- <div
26
- {...rest}
27
- role={decorative ? "none" : "separator"}
28
- aria-orientation={!decorative && vertical ? "vertical" : undefined}
29
- data-orientation={orientation}
30
- className={cn("shrink-0 bg-[var(--border)]", vertical ? "w-px self-stretch" : "h-px w-full", className)}
31
- />
32
- );
33
- }