@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,684 +0,0 @@
1
- // The field both date pickers draw: the trigger, the popover or phone sheet it opens,
2
- // the clear button — and the props, label hook and trigger format the two share.
3
- // Moved out of date-picker.tsx as it was (MOD-9, refactor audit 2026-10); date-picker
4
- // still exports the one public name here, `DateTriggerAttributes`.
5
- import { useCallback, useEffect, useId, useLayoutEffect, useMemo, useRef, useState } from "react";
6
- import type { ComponentPropsWithoutRef, ReactNode, Ref, RefObject } from "react";
7
- import { Calendar, X } from "lucide-react";
8
- import { cn } from "../lib/cn";
9
- import { dirOf, type Direction } from "../lib/direction";
10
- import { formatIsoDate } from "../lib/dates";
11
- import {
12
- DEFAULT_DATE_PICKER_LABELS,
13
- DEFAULT_PICKER_SHEET_LABELS,
14
- useKitDateFormatter,
15
- useKitLabels,
16
- type DatePickerLabels,
17
- type KitDateFormatContext,
18
- } from "../i18n/kit-labels";
19
- import { splitTriggerAria } from "./trigger-aria";
20
- import type { TriggerAria } from "./trigger-aria";
21
- import { FIELD_TRIGGER, FIELD_FLOATING_PAD, FIELD_INVALID } from "./field-base";
22
- import {
23
- assignRef,
24
- FieldLabelLine,
25
- LABEL_ABOVE_BOX,
26
- type DisabledReasonDisplay,
27
- type FieldHelpProps,
28
- } from "./field-parts";
29
- import { FullBleedDialog } from "./full-bleed-dialog";
30
- import type { RemLength } from "../hooks/use-breakpoint";
31
- import type { MiniCalendarProps } from "./mini-calendar";
32
- import { Popover } from "./popover";
33
-
34
- /**
35
- * What both pickers share — and, through `ComponentPropsWithoutRef<"div">`, everything a
36
- * `<div>` takes, so a `data-tour` anchor, a test id or an `aria-describedby` reaches the
37
- * field's root element instead of being dropped (audit §api-design).
38
- *
39
- * `onChange` is omitted from those attributes: the DOM event of that name carries a
40
- * `FormEvent`, while both pickers answer with ISO date strings. Each declares its own
41
- * (date-picker.tsx, date-range-picker.tsx).
42
- */
43
- export interface DatePickerBaseProps extends Omit<ComponentPropsWithoutRef<"div">, "onChange">, FieldHelpProps {
44
- /** BCP 47 tag for the trigger's date and the calendar. Falls back to
45
- * `<UiKitProvider locale>`, then to the runtime's default. */
46
- locale?: string;
47
- /** Embedded top-boundary label, matching the native Input/Select fields. */
48
- label?: ReactNode;
49
- placeholder?: string;
50
- /** Inclusive ISO bounds for selectable days. */
51
- min?: string;
52
- max?: string;
53
- /** Show an X to clear the value (emits `""`). */
54
- clearable?: boolean;
55
- /** Accessible name of the clear button. Wins over `datePicker.clear` from
56
- * `<UiKitProvider labels>`; kept as a prop because it predates the provider. */
57
- clearLabel?: string;
58
- disabled?: boolean;
59
- /**
60
- * Why the date cannot be changed — {@link Select}'s `disabledReason`, for a picker that
61
- * SAVES on change (a report's period kept per user, a filter persisted as it moves).
62
- * The trigger stays focusable and `aria-disabled`, the calendar does not open, the ‹ ›
63
- * and Today buttons refuse, the clear is not offered, and `onChange` never fires; the
64
- * reason is a line under the field at Large and on a touch screen, else in the kit
65
- * {@link Tooltip} (`disabledReasonDisplay`), and on the trigger's `aria-describedby`.
66
- * Wins over `disabled`.
67
- *
68
- * 0.52 (refactor audit 2026-10-30, API-3): the date pickers and MonthPicker were the
69
- * only value fields with no lock opt-in.
70
- */
71
- disabledReason?: ReactNode;
72
- /** Where the reason shows — {@link Button}'s `disabledReasonDisplay`: a line under the
73
- * field at Large and on a touch screen by default, the tooltip otherwise. */
74
- disabledReasonDisplay?: DisabledReasonDisplay;
75
- /** Required and unanswered — {@link FIELD_INVALID}. See {@link Input}'s `invalid`. */
76
- invalid?: boolean;
77
- /**
78
- * Standing advice for the field (keksdose K4, "uniform field anatomy"), as on a
79
- * {@link Select}: plain TEXT is a caption under the field, attached with
80
- * `aria-describedby`; a {@link FieldHint} rides the label line (or, unlabelled, sits
81
- * at the field's end, outside the box).
82
- */
83
- hint?: ReactNode;
84
- /**
85
- * What is wrong with the date, in the caller's words ("The due date is before the
86
- * invoice date") — {@link Input}'s `error` (keksdose K4: DateField errors had no slot).
87
- * Rendered under the field (under the whole row, with `step` / `today`), attached to
88
- * the trigger with `aria-describedby` — merged with any the caller passed, after the
89
- * caption — and implies `invalid`. Passing the key at all keeps the field's box while
90
- * there is no message, so the trigger is never remounted as one comes and goes.
91
- */
92
- error?: ReactNode;
93
- className?: string;
94
- /** Intl options for the trigger's formatted date (default: locale short date). Win
95
- * over the provider's `formatDate`. */
96
- formatOptions?: Intl.DateTimeFormatOptions;
97
- /** Render the trigger's text for an ISO date yourself; wins over `formatOptions` and
98
- * over the provider's `formatDate`.
99
- * For a host whose date rendering is more than one `Intl` call can say — Keksdose
100
- * puts the weekday's name in the UI language beside digits ordered by a separate
101
- * format preference, two locales in one string. `locale` still drives the calendar.
102
- * Set that rendering once with `<UiKitProvider formatDate>` (keksdose K12) and this
103
- * is for the one field that differs. */
104
- formatValue?: (iso: string) => string;
105
- /** Passed through to the {@link MiniCalendar} this opens. Its month arrows are
106
- * icon-only, so their `aria-label` is the only name they have — and the package
107
- * ships English defaults, which a translating host has to be able to replace.
108
- * Usually unnecessary now: the calendar reads `miniCalendar` from the provider. */
109
- calendarLabels?: MiniCalendarProps["labels"];
110
- /**
111
- * Make the panel's caption ("July 2026") a button that opens the year's twelve
112
- * months, with ‹ › stepping a year; picking a month returns to its days. Far dates
113
- * stop being a march of month arrows.
114
- *
115
- * kastlan is why: its service-charge period runs July to June, and with one month on
116
- * screen and ‹ › the only way across, the end of the period was eleven clicks past
117
- * the start — so kastlan kept two date fields instead of `RhfDateRangePicker`. With
118
- * the jump the whole period is open, caption, Jul, 1, caption, next year, Jun, 30.
119
- *
120
- * What it adds, for the keyboard and a screen reader:
121
- * - the caption is a disclosure button (`aria-expanded`). Its name is the month it
122
- * shows, so speech input can say what it sees; it is `aria-live`, as the
123
- * calendar's caption was, so paging months still says where you landed; and it is
124
- * described by `monthPicker.panel` ("Choose a month").
125
- * - the month grid is `MonthPicker`'s grid: one tab stop, arrows walk the months
126
- * (across the year's edge), Home/End the row, PageUp/PageDown a year, Enter or a
127
- * click picks. Focus opens on the month on show and comes back on its days — the
128
- * selected day if it is in that month, else the 1st. Months outside `min`/`max`
129
- * are `aria-disabled`, and a year arrow is once the whole year beyond is.
130
- * - Escape in the month grid goes back to the days without closing the panel (focus
131
- * on the caption); in the days, Escape closes the panel as before.
132
- *
133
- * No new strings: the month arrows keep `miniCalendar.previousMonth` / `nextMonth`
134
- * (`calendarLabels`), and the month grid speaks with `MonthPicker`'s words —
135
- * `monthPicker.previousYear` / `nextYear` / `month` / `panel` — because it is that
136
- * grid, and a host that translated it once should not have to again.
137
- *
138
- * Off by default: the caption becomes one more stop in the panel's tab order, which a
139
- * 0.x minor does not spring on a form. Works in the popover and in
140
- * `DateRangePicker`'s phone sheet alike, beside presets and with `apply`
141
- * (a preset picked while the months are open goes back to the days, on its start).
142
- *
143
- * Why not a two-month panel (`months={2}`) instead, or beside it: for a twelve-month
144
- * period it still pages six times where this takes one year step, and two
145
- * `MiniCalendar`s side by side each follow the value on their own — picking the end
146
- * in the right-hand month would pull the left one onto it — so the calendar would
147
- * have to learn to share a month first. Not worth that for a saving of one arrow on a
148
- * range across a single month boundary.
149
- */
150
- monthJump?: boolean;
151
- /**
152
- * The TRIGGER — the focusable button that opens the calendar, a `renderTrigger` one
153
- * too — as a React 19 ref prop (0.34, API-3, refactor audit 2026-10). The field took
154
- * none, so react-hook-form's focus-on-error reached it only through /rhf's id lookup,
155
- * and an app not at all. Not the wrapper, which takes the rest of the props.
156
- */
157
- ref?: Ref<HTMLButtonElement>;
158
- }
159
-
160
- /**
161
- * The trigger's date renderer, in the kit's order of precedence: the picker's own
162
- * `formatValue`, then its `formatOptions` (an explicit `Intl` look for this field),
163
- * then the provider's `formatDate` (keksdose K12), then the locale's short date. A
164
- * provider formatter that answers `""` falls through to the default for that date.
165
- */
166
- export function useTriggerFormat(
167
- source: KitDateFormatContext["source"],
168
- locale: string | undefined,
169
- formatOptions: Intl.DateTimeFormatOptions | undefined,
170
- formatValue: ((iso: string) => string) | undefined,
171
- ): (iso: string) => string {
172
- const fromProvider = useKitDateFormatter();
173
- if (formatValue) return formatValue;
174
- return (iso) => {
175
- if (formatOptions === undefined && fromProvider) {
176
- // A single date stands alone, where the weekday helps; a range's two ends do not.
177
- const text = fromProvider(iso, { unit: "day", source, locale, weekday: source === "datePicker" });
178
- if (text) return text;
179
- }
180
- // No prop and no provider leaves `locale` undefined: the runtime's default (DUP-11).
181
- return formatIsoDate(iso, locale, formatOptions);
182
- };
183
- }
184
-
185
- /**
186
- * Everything the kit's own trigger button carries, handed to a custom one
187
- * ({@link DateRangePickerProps.renderTrigger}) to spread onto its `<button>`. Spread
188
- * it WHOLE: the ref is how focus comes back when the panel closes, the id pair and
189
- * `aria-labelledby` are the 0.5.1 naming (an external `<label htmlFor>`, a form
190
- * library's `aria-describedby`), and `role`/`aria-haspopup`/`aria-controls`/
191
- * `aria-expanded` are what tell a screen reader this opens a calendar and whether it
192
- * is open. `className` is the kit's field look (42px with a label, `pe-9` for the
193
- * glyph the field draws at its end) — merge yours after it with `cn`.
194
- */
195
- export interface DateTriggerAttributes {
196
- ref: RefObject<HTMLButtonElement | null>;
197
- type: "button";
198
- id?: string;
199
- role: "combobox";
200
- "aria-haspopup": "dialog";
201
- "aria-controls": string;
202
- "aria-expanded": boolean;
203
- "aria-labelledby"?: string;
204
- "aria-label"?: string;
205
- "aria-describedby"?: string;
206
- "aria-invalid"?: true;
207
- /** The field's required state — `Field required` hands it down with the id pair. */
208
- "aria-required"?: boolean | "true" | "false";
209
- disabled?: boolean;
210
- /** Locked by the write lock (0.52, `commit` / `disabledReason`): focusable, and the
211
- * click opens nothing. Dress a custom trigger for it as for `disabled`. */
212
- "aria-disabled"?: true;
213
- onClick: () => void;
214
- className: string;
215
- }
216
-
217
- /** A custom trigger, as `DateField` calls it; each picker adapts it to its own props. */
218
- type TriggerRenderer = (attrs: DateTriggerAttributes, valueId: string) => ReactNode;
219
-
220
- /** A caller's trigger, as an element of its own: the attributes carry the trigger's
221
- * ref, and a ref is handed to a child as a prop, not passed to a function in the
222
- * middle of the parent's render. */
223
- function CustomTrigger({
224
- render,
225
- attrs,
226
- valueId,
227
- }: {
228
- render: TriggerRenderer;
229
- attrs: DateTriggerAttributes;
230
- valueId: string;
231
- }) {
232
- return render(attrs, valueId);
233
- }
234
-
235
- /**
236
- * The trigger's value wraps instead of truncating at Large and Extra large (0.32.1, the
237
- * 360 px Extra-large sweep; docs/text-size-harmonization.md §4 "nothing truncates"). A
238
- * range ("01/09/2026 – 30/09/2026") is 312 px at 150 %, and on a 360 px phone it read
239
- * "01/09/2026 – 30/…" — its end, the half a reader needs, was the half cut off. A
240
- * `large:` class, so Normal keeps its one-line field: since 0.33 (§10.17) the kit's one
241
- * `truncate-until-large` (tokens.css) in place of this file's own `truncate` +
242
- * `large:whitespace-normal large:break-words`.
243
- */
244
- const VALUE_TRUNCATE = "truncate-until-large";
245
-
246
- /**
247
- * The field-shaped button that opens the calendar.
248
- *
249
- * A component of its own rather than JSX inline in `Popover`'s `trigger` render prop,
250
- * because handing focus back to it is an effect and a render prop is not somewhere a
251
- * hook can go.
252
- */
253
- function DateFieldTrigger({
254
- open,
255
- toggle,
256
- triggerRef,
257
- triggerText,
258
- hasValue,
259
- labelledBy,
260
- valueId,
261
- padded,
262
- disabled,
263
- locked,
264
- invalid,
265
- required,
266
- panelId,
267
- aria,
268
- renderTrigger,
269
- fieldRef,
270
- }: {
271
- /** The caller's naming/description attributes, routed here from the field. */
272
- aria: TriggerAria;
273
- /** Draw the button yourself, with these attributes — see {@link DateTriggerAttributes}. */
274
- renderTrigger?: TriggerRenderer;
275
- open: boolean;
276
- toggle: () => void;
277
- triggerRef: RefObject<HTMLButtonElement | null>;
278
- /** The picker's own `ref` prop (API-3) — the same element as `triggerRef`. */
279
- fieldRef?: Ref<HTMLButtonElement>;
280
- /** The panel's id — `role="combobox"` requires `aria-controls`. */
281
- panelId: string;
282
- triggerText: string;
283
- hasValue: boolean;
284
- /** ids of the hidden label twin + the value span, in the order they are spoken. */
285
- labelledBy?: string;
286
- valueId: string;
287
- padded: boolean;
288
- disabled?: boolean;
289
- /** The write lock: the focusable kind of disabled (see `disabledReason`). */
290
- locked: boolean;
291
- invalid?: boolean;
292
- /** `aria-required`, on the trigger with the rest of the field's ARIA. */
293
- required?: boolean | "true" | "false";
294
- }) {
295
- const wasOpen = useRef(false);
296
- useEffect(() => {
297
- const justClosed = wasOpen.current && !open;
298
- wasOpen.current = open;
299
- if (!justClosed) return;
300
- // Only when the panel still HAD focus. The day the user was standing on has just
301
- // been unmounted with the panel, which drops focus to <body> and leaves a
302
- // keyboard user back at the top of the document with no idea where they were.
303
- // But an outside click closes this panel too, and that click has already given
304
- // focus to whatever it landed on — dragging it back here would be worse than the
305
- // bug, so a focus that is somewhere real is left alone.
306
- const active = document.activeElement;
307
- if (!active || active === document.body) triggerRef.current?.focus();
308
- // Here rather than through `useFocusTrap`'s `restoreFocus`, and not only because
309
- // `Popover` runs no trap to carry it: that option restores to whatever held focus
310
- // when the panel opened, and on Safari — and on Firefox on macOS — clicking a
311
- // button does not focus it, so "whatever held focus" is the page. The requirement
312
- // is this trigger, every time, however the panel was opened.
313
- }, [open, triggerRef]);
314
- // The caller's `ref` (API-3, refactor audit 2026-10) is handed the trigger once it is
315
- // mounted, rather than merged into `attrs.ref`: that one is a `RefObject` by contract
316
- // (`DateTriggerAttributes`), which a `renderTrigger` button may read, and this way a
317
- // caller's own trigger is covered as well as the kit's.
318
- useLayoutEffect(() => {
319
- if (!fieldRef) return;
320
- assignRef(fieldRef, triggerRef.current);
321
- return () => assignRef(fieldRef, null);
322
- }, [fieldRef, triggerRef]);
323
-
324
- // One attribute object, worn either by the kit's own button below or by a caller's
325
- // (`renderTrigger`) — so a custom trigger cannot quietly fall out of step with the
326
- // naming and state this one announces.
327
- const isInvalid = Boolean(invalid) || aria["aria-invalid"] === true || aria["aria-invalid"] === "true";
328
- const attrs: DateTriggerAttributes = {
329
- ref: triggerRef,
330
- type: "button",
331
- // The focusable kind of disabled while locked (Button's rule): native `disabled`
332
- // would take the field out of the tab order, and the reason with it.
333
- disabled: locked ? undefined : disabled,
334
- "aria-disabled": locked || undefined,
335
- // Locked, the calendar does not open. One open when the lock arrives closes: the
336
- // picker moves the field into the reason's frame, which remounts it, as Select's.
337
- onClick: () => {
338
- if (!locked) toggle();
339
- },
340
- // The name has to carry the VALUE. A bare `aria-label={label}` — which is what
341
- // this was — replaces the button's text outright, so the one field in the form
342
- // whose entire job is to show a date announced "Due date" and stopped there,
343
- // and a screen-reader user could not read back what they had picked without
344
- // opening the calendar and hunting for the selected day.
345
- //
346
- // Two ids rather than one composed string (`common.fieldValue`): "label: value"
347
- // is a sentence, and a name reference is spoken as the two texts in order with
348
- // no punctuation to translate at all. The hidden twin of the FieldLabel lives
349
- // in DateField, next to the label it copies.
350
- id: aria.id,
351
- "aria-labelledby": aria["aria-label"] && !aria["aria-labelledby"] ? undefined : labelledBy,
352
- "aria-label": aria["aria-label"],
353
- "aria-describedby": aria["aria-describedby"],
354
- // `role="combobox"` on a button that opens a calendar is the APG date-picker
355
- // shape, and it is what makes the next two lines legal: `button` supports
356
- // neither `aria-expanded` nor `aria-invalid`, so the previous markup set an
357
- // invalid state that announced nothing (ESLint's `role-supports-aria-props`).
358
- //
359
- // `aria-haspopup="dialog"` is now honest — it was not when this comment first
360
- // said so. `Popover` gained a real `role="dialog"` in the same wave, so the
361
- // trigger's promise and the panel's role finally agree. The phone sheet is a
362
- // `role="dialog"` too, and carries the same id.
363
- role: "combobox",
364
- "aria-haspopup": "dialog",
365
- "aria-controls": panelId,
366
- "aria-expanded": open,
367
- "aria-invalid": isInvalid || undefined,
368
- "aria-required": required,
369
- className: cn(
370
- FIELD_TRIGGER,
371
- "pe-9",
372
- padded && FIELD_FLOATING_PAD,
373
- (disabled || locked) && "cursor-not-allowed opacity-50",
374
- // An `aria-invalid` from a Field spread paints too, as on Input and AmountInput.
375
- isInvalid && FIELD_INVALID,
376
- ),
377
- };
378
- if (renderTrigger) return <CustomTrigger render={renderTrigger} attrs={attrs} valueId={valueId} />;
379
-
380
- return (
381
- <button {...attrs}>
382
- <span id={valueId} className={cn(VALUE_TRUNCATE, !hasValue && "text-placeholder")}>
383
- {/* `|| " "` (a NON-BREAKING space) — triggerText is "" when there is no value and no
384
- placeholder was passed. An empty span has no line box, so the
385
- trigger collapses to its padding and sits shorter than every
386
- other field beside it.
387
-
388
- It has to be a NON-BREAKING space. This read `|| " "` first, and
389
- that fix did nothing at all: an ordinary space is collapsible
390
- white space, and white space at the start and end of a line is
391
- removed — so the span rendered with height 0 and the trigger
392
- stayed 22px against the 42px of the fields either side of it
393
- (Keksdose live #294, measured in the browser: `span.textContent`
394
- WAS `" "` and `getBoundingClientRect().height` was 0). U+00A0 is
395
- not collapsible, so it holds the line. */}
396
- {triggerText || " "}
397
- </span>
398
- </button>
399
- );
400
- }
401
-
402
- /**
403
- * How a panel's body and its action row are put on screen — the popover stacks them,
404
- * the phone sheet pins the actions in its footer. Handed to the panel rather than
405
- * applied around it because the actions belong to the panel's own draft state
406
- * (`RangePanel`), while the frame they sit in belongs to the field.
407
- */
408
- export type PanelFrame = (body: ReactNode, actions?: ReactNode) => ReactNode;
409
-
410
- const popoverFrame: PanelFrame = (body, actions) =>
411
- actions ? (
412
- <div className="flex flex-col gap-2">
413
- {body}
414
- <div className="flex items-center justify-end gap-2 border-t border-subtle pt-2">{actions}</div>
415
- </div>
416
- ) : (
417
- body
418
- );
419
-
420
- /** A field-styled trigger that opens a portalled MiniCalendar. Shared by the
421
- * single- and range-date pickers (date-picker.tsx, date-range-picker.tsx). */
422
- export function DateField({
423
- triggerText,
424
- hasValue,
425
- label,
426
- disabled,
427
- locked = false,
428
- clearable,
429
- clearLabel,
430
- panelLabel,
431
- className,
432
- width,
433
- onClear,
434
- invalid,
435
- sheet = false,
436
- sheetBackCloses = true,
437
- renderTrigger,
438
- labelHint,
439
- children,
440
- // The trigger's, not the wrapper's: `Field`'s render-prop spreads it with the id
441
- // pair, and a required date read as optional while it sat on the role-less div.
442
- // Taken here rather than in `splitTriggerAria`, which MonthPicker shares.
443
- "aria-required": ariaRequired,
444
- fieldRef,
445
- ...rest
446
- }: Omit<ComponentPropsWithoutRef<"div">, "children"> & {
447
- /** The picker's `ref` prop: the trigger (API-3). */
448
- fieldRef?: Ref<HTMLButtonElement>;
449
- triggerText: string;
450
- hasValue: boolean;
451
- label?: ReactNode;
452
- /** A `FieldHint` for the label line, beside the label. */
453
- labelHint?: ReactNode;
454
- disabled?: boolean;
455
- /** The write lock is on: the trigger is focusable and opens nothing, no clear. The
456
- * picker draws the reason's frame around the field (or its step row). */
457
- locked?: boolean;
458
- clearable?: boolean;
459
- /** Already resolved by the picker (prop > provider > English). */
460
- clearLabel: string;
461
- /** The popover panel's accessible name, resolved likewise. */
462
- panelLabel: string;
463
- invalid?: boolean;
464
- className?: string;
465
- /** Popover panel width; omit for the default (a bare calendar). In rem so it grows
466
- * with the text size, like the Popover's own default (§3.2). */
467
- width?: number | RemLength;
468
- onClear: () => void;
469
- /** Open as a full-screen sheet instead of the popover — the picker decides when
470
- * (in the phone layout, `usePhoneLayout()`). */
471
- sheet?: boolean;
472
- /** The sheet's `FullBleedDialog backCloses`. */
473
- sheetBackCloses?: boolean;
474
- renderTrigger?: TriggerRenderer;
475
- children: (close: () => void, frame: PanelFrame) => ReactNode;
476
- }) {
477
- // A clear is a change like any other: not offered while locked.
478
- const showClear = Boolean(clearable && hasValue && !disabled && !locked);
479
- const [aria, wrapperRest] = splitTriggerAria(rest);
480
- // The trigger, for the clear to hand the focus to (INP-10, below), beside the picker's
481
- // own `ref`.
482
- const triggerEl = useRef<HTMLButtonElement | null>(null);
483
- const toTrigger = useCallback(
484
- (node: HTMLButtonElement | null) => {
485
- triggerEl.current = node;
486
- assignRef(fieldRef, node);
487
- },
488
- [fieldRef],
489
- );
490
- // The panel is portalled to <body> and leaves the subtree whose `dir` it inherited,
491
- // so a calendar in an RTL form opened LTR — the grid's columns, its arrow keys and
492
- // its chevrons all the wrong way round. Read at the moment of opening (the only way
493
- // the popover opens is through `toggle`) and put back on the panel.
494
- const rootRef = useRef<HTMLDivElement>(null);
495
- const [dir, setDir] = useState<Direction>("ltr");
496
- const id = useId();
497
- const labelId = `${id}-label`;
498
- const valueId = `${id}-value`;
499
- const panelId = `${id}-panel`;
500
- // Only a STRING label can be reused as a name; a ReactNode may be a whole row with
501
- // its own interactive "?" hint in it, and naming a button with that reads the hint
502
- // out as part of the field's name.
503
- const named = typeof label === "string";
504
- // The sheet's open flag. Only the phone branch owns one: on desktop `Popover` owns
505
- // it, so the two can never disagree about what is on screen.
506
- const [sheetOpen, setSheetOpen] = useState(false);
507
- const sheetTriggerRef = useRef<HTMLButtonElement>(null);
508
- const closeSheet = () => setSheetOpen(false);
509
- const sheetLabels = useKitLabels("pickerSheet", DEFAULT_PICKER_SHEET_LABELS);
510
- const sheetFrame: PanelFrame = (body, actions) => (
511
- <FullBleedDialog
512
- open
513
- onClose={closeSheet}
514
- // The same id the popover panel wears, so the trigger's `aria-controls` holds in
515
- // both presentations; named the way the popover is.
516
- id={panelId}
517
- aria-label={panelLabel}
518
- header={panelLabel}
519
- // `pickerSheet.close`: the one "close this full-screen picker" string the kit
520
- // already translates, rather than a second key saying the same thing.
521
- closeLabel={sheetLabels.close}
522
- backCloses={sheetBackCloses}
523
- dir={dir}
524
- // Portalled to <body>, the sheet is not inside the field's wrapper, so a
525
- // document-level "outside click" listener — a Popover or dropdown this field
526
- // sits in — would read a tap on a day as outside and unmount the cell before
527
- // its click (Keksdose dev#477, the fix `PickerSheet` carries).
528
- onMouseDown={(e) => e.stopPropagation()}
529
- footer={actions}
530
- >
531
- {body}
532
- </FullBleedDialog>
533
- );
534
- const fieldTrigger = ({
535
- open,
536
- toggle,
537
- ref,
538
- }: {
539
- open: boolean;
540
- toggle: () => void;
541
- ref: RefObject<HTMLButtonElement | null>;
542
- }) => (
543
- <DateFieldTrigger
544
- open={open}
545
- toggle={() => {
546
- setDir(dirOf(rootRef.current));
547
- toggle();
548
- }}
549
- triggerRef={ref}
550
- triggerText={triggerText}
551
- hasValue={hasValue}
552
- // ALWAYS a name reference, never `undefined`. A `<button>` takes its
553
- // accessible name from its contents, so an unlabelled trigger used to
554
- // announce its own date text for free. `role="combobox"` does not —
555
- // content is excluded from name computation for that role — so leaving
556
- // this undefined made an unlabelled date field announce nothing at all.
557
- // Named: "label, value". Unnamed: the value alone, which is what the
558
- // button was saying before.
559
- //
560
- // A caller's own reference comes first. And when the caller gives the field
561
- // an `id` (so an external `<label htmlFor>` can point at it), the trigger
562
- // lists ITSELF first: a self-reference in `aria-labelledby` is resolved
563
- // from the element's native label (accname 2B → 2D), so "Due date" from
564
- // that <label> is spoken before the value, instead of being overridden.
565
- labelledBy={[
566
- aria["aria-labelledby"],
567
- named ? labelId : !aria["aria-labelledby"] && aria.id ? aria.id : undefined,
568
- valueId,
569
- ]
570
- .filter(Boolean)
571
- .join(" ")}
572
- aria={aria}
573
- panelId={panelId}
574
- valueId={valueId}
575
- padded={label !== undefined}
576
- disabled={disabled}
577
- locked={locked}
578
- invalid={invalid}
579
- required={ariaRequired}
580
- renderTrigger={renderTrigger}
581
- fieldRef={toTrigger}
582
- />
583
- );
584
- return (
585
- // The caller's attributes land here, on the field's own box — the trigger inside is
586
- // named by `aria-labelledby` and must keep the id pair it is given.
587
- // At Large a labelled box is a grid: the label above, the calendar glyph and the
588
- // clear × measured against the trigger's row (LABEL_ABOVE_BOX, 0.33 §10.17).
589
- <div {...wrapperRest} ref={rootRef} className={cn("relative", label !== undefined && LABEL_ABOVE_BOX, className)}>
590
- {label !== undefined && <FieldLabelLine label={label} hint={labelHint} />}
591
- {/* The visible FieldLabel is a plain span, not a `<label htmlFor>`, so it names
592
- nothing on its own — this hidden twin is what the trigger is named by.
593
- `aria-hidden` because a name reference reads a hidden element deliberately
594
- (accname §4.3.1), and without it the label would be announced twice: once as
595
- loose text before the button, once inside the button's own name.
596
- `sr-only-fixed` rather than `sr-only` — see the note on the class in
597
- tokens.css. */}
598
- {named && (
599
- <span id={labelId} aria-hidden className="sr-only-fixed">
600
- {label}
601
- </span>
602
- )}
603
- {sheet ? (
604
- <>
605
- {fieldTrigger({ open: sheetOpen, toggle: () => setSheetOpen((v) => !v), ref: sheetTriggerRef })}
606
- {/* Mounted only while open, like the popover's children: the panel's draft is
607
- born with it, so every open starts again from the committed value. */}
608
- {sheetOpen && children(closeSheet, sheetFrame)}
609
- </>
610
- ) : (
611
- <Popover
612
- width={width}
613
- panelId={panelId}
614
- // Named for what it is. Unnamed, it fell back to `popover.panel`, and a date
615
- // field announced its calendar as "Popover" — in English, in every language.
616
- labels={{ panel: panelLabel }}
617
- dir={dir}
618
- trigger={fieldTrigger}
619
- >
620
- {(close) => children(close, popoverFrame)}
621
- </Popover>
622
- )}
623
- {showClear ? (
624
- <button
625
- type="button"
626
- aria-label={clearLabel}
627
- onClick={() => {
628
- onClear();
629
- // The × goes with the value, so a keyboard clear left the focus on a button
630
- // that was about to unmount — and it fell to <body> (refactor audit
631
- // 2026-10-30, INP-10). The trigger, as SearchField's clear does.
632
- triggerEl.current?.focus();
633
- }}
634
- className="absolute end-1.5 top-1/2 -translate-y-1/2 rounded p-1 text-placeholder hover:text-secondary"
635
- >
636
- <X className="size-4" />
637
- </button>
638
- ) : (
639
- <Calendar
640
- aria-hidden
641
- className="pointer-events-none absolute end-2.5 top-1/2 size-4 -translate-y-1/2 text-placeholder"
642
- />
643
- )}
644
- </div>
645
- );
646
- }
647
-
648
- /**
649
- * The picker's own label props, folded into one `datePicker` override so they sit at
650
- * the top of the same precedence chain as everything else: prop > provider > English.
651
- * They predate the provider and stay public API, which is why they are not simply
652
- * replaced by a `labels` prop.
653
- */
654
- export function useDatePickerLabels(
655
- clearLabel: string | undefined,
656
- stepLabels: { prev: string; next: string } | undefined,
657
- todayLabel: string | undefined,
658
- ): DatePickerLabels {
659
- const prev = stepLabels?.prev;
660
- const next = stepLabels?.next;
661
- const fromProps = useMemo(() => {
662
- const out: Partial<DatePickerLabels> = {};
663
- if (clearLabel !== undefined) out.clear = clearLabel;
664
- if (prev !== undefined) out.previousDay = prev;
665
- if (next !== undefined) out.nextDay = next;
666
- if (todayLabel !== undefined) out.today = todayLabel;
667
- return out;
668
- }, [clearLabel, prev, next, todayLabel]);
669
- return useKitLabels("datePicker", DEFAULT_DATE_PICKER_LABELS, fromProps);
670
- }
671
-
672
- /**
673
- * The caller's `hint` when it has no label line to ride: at the end of the field,
674
- * outside the box, as an unlabelled {@link Select} places its FieldHint (0.15.5 P8).
675
- */
676
- export function withEndHint(field: ReactNode, hint: ReactNode): ReactNode {
677
- if (hint === undefined) return field;
678
- return (
679
- <div className="flex items-center gap-1.5">
680
- <div className="min-w-0 flex-1">{field}</div>
681
- <span className="flex shrink-0 items-center">{hint}</span>
682
- </div>
683
- );
684
- }