@eifi1/ui-kit 0.54.0 → 0.56.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 +6 -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 +7 -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 +83 -0
  113. package/dist/components/legended-series-chart.js +77 -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 +9 -12
  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,129 +0,0 @@
1
- import { useId } from "react";
2
- import type { ComponentPropsWithRef, ReactNode } from "react";
3
- import { LabelStrip, useFieldMessages, type FieldHelpProps } from "./field-parts";
4
-
5
- /** What a {@link FieldStrip} hands render-prop children. */
6
- export interface FieldStripIds {
7
- /** The label's id — for content that names ITSELF by the label (`aria-labelledby`)
8
- * under `group={false}`, or anything else that has to point at it. */
9
- labelId: string;
10
- /** The ids of the caption and the error while they are on screen, else `undefined`.
11
- * The group is described by them already; spread this on the content under
12
- * `group={false}`, where there is no group to describe. */
13
- describedBy: string | undefined;
14
- }
15
-
16
- /**
17
- * A `div`'s props, `ref` included since 0.35 (round 0.35 R4, as Card and EmptyState took
18
- * it in 0.34, API-2): the ref is the root — the group, or the plain box under
19
- * `group={false}` — which a caller scrolls into view or measures.
20
- */
21
- export interface FieldStripProps extends Omit<ComponentPropsWithRef<"div">, "children">, FieldHelpProps {
22
- /** The 11px static label, on the line a labelled field's label sits on. */
23
- label: ReactNode;
24
- /**
25
- * Field anatomy, as on {@link Input}: plain text is a caption under the content (and
26
- * describes the group); a {@link FieldHint} "?" rides the label line.
27
- */
28
- hint?: ReactNode;
29
- /** A message under the content, in `--danger`, describing the group. `null`,
30
- * `false` and `""` are no error. The content's own controls are the caller's to
31
- * mark `aria-invalid`; a `group` cannot be. */
32
- error?: ReactNode;
33
- /**
34
- * Dims the label with the content, as a disabled field's label dims. The content is
35
- * the caller's: disable (or hide) its controls yourself — keksdose's location cell
36
- * turns its map into a picture and drops its buttons, which no flag here could guess.
37
- */
38
- disabled?: boolean;
39
- /**
40
- * The wrapper is a `role="group"` named by the label (default), so a screen reader
41
- * entering the map or the first button hears "Location, group" — what the visible
42
- * label tells a sighted reader the content is about.
43
- *
44
- * `false` for content that is a labelled group ITSELF (a `role="radiogroup"` of the
45
- * app's own, a TileRadioGroup's container, a fieldset): a group inside a group, both
46
- * named "Pattern", is read twice. The wrapper is then a plain box, and the content
47
- * takes the name from the render-prop's `labelId` (and the caption and error from
48
- * its `describedBy`).
49
- */
50
- group?: boolean;
51
- /** The content. A function receives {@link FieldStripIds}. */
52
- children: ReactNode | ((ids: FieldStripIds) => ReactNode);
53
- }
54
-
55
- /**
56
- * The kit's label strip for content of your own — keksdose G8.
57
- *
58
- * 0.22 gave three groups a strip label (keksdose K2): ToggleGroup's
59
- * `labelPlacement="strip"`, SwatchPicker's and IconPicker's `label`. Each draws the
60
- * 11px label (and its `FieldHint`) on the same line as the labelled fields beside it,
61
- * over content WITHOUT a field's border round it. keksdose's transaction row has one
62
- * cell left that is not one of those groups: the location — a map, a "Locate me" and a
63
- * "Search" button — still built by hand as a `relative` cell, a floated `FieldLabel`
64
- * and a `pt-5` box (transaction-location-field.tsx), and so is the reconciled-status
65
- * stand-in (cleared-status-toggle.tsx, `ClearedStatusLocked`). This is the strip on its
66
- * own, the same component the three groups draw theirs with:
67
- *
68
- * ```tsx
69
- * <FieldStrip label={t("transactions.location")} className={className}>
70
- * <div className="space-y-2">
71
- * <PinMap … />
72
- * <div className="flex flex-wrap gap-2"><Button …>Locate me</Button>…</div>
73
- * </div>
74
- * </FieldStrip>
75
- * ```
76
- *
77
- * The label sits where a field's static label sits (`top-1`, `inset-x-3`, 11px in a
78
- * `leading-tight` line); the content starts 20px down, full width, clear of the label
79
- * and its "?". `className` styles the wrapper — the grid or flex item in the caller's
80
- * row — and merges after the strip's padding.
81
- *
82
- * Not a {@link Field}: that one sets a 14px label ABOVE its control, in flow, for a form
83
- * that labels its fields that way. This is for a row whose fields float their labels
84
- * inside them, where a label above would be the only one of its kind.
85
- */
86
- export function FieldStrip({
87
- label,
88
- hint,
89
- help,
90
- error,
91
- disabled = false,
92
- group = true,
93
- className,
94
- children,
95
- ...rest
96
- }: FieldStripProps) {
97
- const labelId = useId();
98
- const messages = useFieldMessages({ hint, help, name: label, error });
99
- const content = typeof children === "function" ? children({ labelId, describedBy: messages.describedBy }) : children;
100
- // The caller's own description first, then the caption, then the error — the order
101
- // every kit field reads them in.
102
- const groupDescribedBy = [rest["aria-describedby"], messages.describedBy].filter(Boolean).join(" ") || undefined;
103
- return (
104
- // `rest` carries the caller's `ref` too (a plain prop in React 19): LabelStrip spreads
105
- // its own rest onto the wrapper `<div>`, so the ref lands on the root.
106
- <LabelStrip
107
- {...rest}
108
- {...(group
109
- ? {
110
- role: "group",
111
- // An explicit name wins, as on the kit's labelled groups.
112
- "aria-labelledby":
113
- rest["aria-label"] === undefined && rest["aria-labelledby"] === undefined
114
- ? labelId
115
- : rest["aria-labelledby"],
116
- "aria-describedby": groupDescribedBy,
117
- }
118
- : null)}
119
- labelId={labelId}
120
- label={label}
121
- hint={messages.labelHint}
122
- disabled={disabled}
123
- className={className}
124
- >
125
- {content}
126
- {messages.below}
127
- </LabelStrip>
128
- );
129
- }
@@ -1,206 +0,0 @@
1
- /**
2
- * A field group with its label ABOVE the control: label, control, hint, error.
3
- *
4
- * ```tsx
5
- * <Field label="IBAN" required hint="22 characters" error={errors.iban}>
6
- * {(ids) => <Input {...ids} value={iban} onChange={…} />}
7
- * </Field>
8
- * ```
9
- *
10
- * The kit's `Input` and `Select` float their label inside the field, and the pickers
11
- * draw theirs the same way. That is the wrong shape for a control the kit did not
12
- * render, a radio group, a range slider, or a form that sets its labels above the
13
- * fields throughout — which is what kastlan's wizards are, and why it kept its own
14
- * `WizardField` after the kit dropped the one it had never rendered. This is that
15
- * group, with the wiring the old one left to the caller: the label names the control
16
- * through `htmlFor`, and the control is described by the hint and the error that are
17
- * actually on screen.
18
- *
19
- * ## Wiring
20
- *
21
- * Pass a function as `children` and it receives {@link FieldControlProps} — `id`,
22
- * `aria-describedby`, `aria-invalid` and `aria-required` — to spread on the control.
23
- * Plain children render as they are, for a control that wires itself (a checkbox that
24
- * carries its own label, a group with `aria-labelledby`); `htmlFor` then points the
25
- * label at the control's own id, and the hint and error are on screen but describe
26
- * nothing — the same as the `WizardField` this replaces.
27
- *
28
- * ## Decoupled
29
- *
30
- * Deliberately knows neither the wizard nor react-hook-form: `error` is a plain
31
- * value. Pass `wizard.fieldErrors.iban`, a step-local error, or
32
- * `fieldState.error?.message` from a react-hook-form `Controller` — the markup is the
33
- * same whichever of them gates the step, so a step can move between them without its
34
- * fields changing. (Inside a react-hook-form form, `RhfField` from `@eifi1/ui-kit/rhf`
35
- * does the same job with the ids taken from the form.)
36
- *
37
- * The error is NOT `role="alert"`, for the reason the kit's `error` prop gives (see
38
- * `useFieldError` in components/field-parts.tsx): it is read when focus reaches the control.
39
- */
40
- import { useId, type ReactNode } from "react";
41
- import { cn } from "../lib/cn";
42
- import { hasContent } from "../lib/presence";
43
- import { fieldHelpMark, useInlineHint, type FieldHelpProps } from "./field-parts";
44
- import { Label } from "./field-base";
45
-
46
- /** What a `Field` hands its render-prop children, to spread on the control. */
47
- export interface FieldControlProps {
48
- /** The id the label's `htmlFor` points at. */
49
- id: string;
50
- /** The ids of the hint and the error that are rendered, or `undefined` when
51
- * neither is. */
52
- "aria-describedby": string | undefined;
53
- /** `true` while the field has an error, `undefined` otherwise. */
54
- "aria-invalid": true | undefined;
55
- /** `true` when the field is `required`. The label's star is `aria-hidden`; this
56
- * is what a screen reader hears instead. */
57
- "aria-required": true | undefined;
58
- }
59
-
60
- /**
61
- * The second argument of a `Field`'s render-prop children: what a GROUP needs that
62
- * a single control does not. `htmlFor` names an `<input>`, but a `<label>` pointing
63
- * at a `role="radiogroup"` div names nothing — so a group (a {@link ToggleGroup})
64
- * takes `aria-labelledby={labelId}` instead. Kept out of {@link FieldControlProps}
65
- * so the spread every existing control takes is unchanged.
66
- */
67
- export interface FieldRenderMeta {
68
- /** The label element's id, or `undefined` when the field has no label. */
69
- labelId: string | undefined;
70
- }
71
-
72
- /**
73
- * Where the label is visible. `"visible"` (default); `"sr-only"`: never drawn, still
74
- * the control's name; `"below-sm"` / `"below-md"` / `"below-lg"`: drawn only under
75
- * that breakpoint and screen-reader-only from it up.
76
- *
77
- * For table-like editors — kastlan's journal entry lines
78
- * (accounting/components/wizard/journal-entry-lines-step.tsx) — where a desktop
79
- * row sits under column headers that already say "Account" and "Amount", but the
80
- * phone layout stacks each line as a card and needs the labels back. The name stays
81
- * on the control at every width; only the ink changes.
82
- */
83
- export type FieldLabelVisibility = "visible" | "sr-only" | "below-sm" | "below-md" | "below-lg";
84
-
85
- // Literal class strings so Tailwind's scanner sees each one.
86
- const LABEL_VISIBILITY: Record<FieldLabelVisibility, string | undefined> = {
87
- visible: undefined,
88
- "sr-only": "sr-only",
89
- "below-sm": "sm:sr-only",
90
- "below-md": "md:sr-only",
91
- "below-lg": "lg:sr-only",
92
- };
93
-
94
- export interface FieldProps extends FieldHelpProps {
95
- /** The label above the control. Omit it for a group whose control is labelled
96
- * some other way; the hint and error still render. */
97
- label?: ReactNode;
98
- /** Draws the kit's required mark after the label, and sets `aria-required` on the
99
- * render-prop control. */
100
- required?: boolean;
101
- /** Muted helper text below the control. */
102
- hint?: ReactNode;
103
- /** The error below the control. `null`, `false` and `""` are no error — what a
104
- * `touched && errors.x` evaluates to on the happy path. */
105
- error?: ReactNode;
106
- /** The control's id. Defaults to a generated one; set it when the control carries
107
- * its own id (plain children). */
108
- htmlFor?: string;
109
- /** Dims the label with its control. */
110
- disabled?: boolean;
111
- /** The label's size: `sm` for a dense row, `md` otherwise. */
112
- labelSize?: "sm" | "md";
113
- /** See {@link FieldLabelVisibility}. */
114
- labelVisibility?: FieldLabelVisibility;
115
- /** Wrapper className. */
116
- className?: string;
117
- /** The control. A function receives {@link FieldControlProps} to spread on it, and
118
- * {@link FieldRenderMeta} (the label's id, for a group). */
119
- children: ReactNode | ((control: FieldControlProps, meta: FieldRenderMeta) => ReactNode);
120
- }
121
-
122
- export function Field({
123
- label,
124
- required,
125
- hint: hintProp,
126
- help,
127
- error,
128
- htmlFor,
129
- disabled,
130
- labelSize,
131
- labelVisibility = "visible",
132
- className,
133
- children,
134
- }: FieldProps) {
135
- const generated = useId();
136
- const id = htmlFor ?? `${generated}-control`;
137
- const hintId = `${generated}-hint`;
138
- const errorId = `${generated}-error`;
139
- const labelId = `${generated}-label`;
140
- // §4: a FieldHint under the control is its words at Large and on a touch screen, not
141
- // a lone "?" (DUP-2, refactor audit 2026-10). A HelpPopover stays a "?".
142
- // With a `help` (0.36) its "?" follows the label, and a FieldHint is its words at
143
- // every size: the help's is the field's only "?".
144
- const helpMark = fieldHelpMark(help, label);
145
- const hint = useInlineHint(hintProp, helpMark !== undefined);
146
- const hasHint = hasContent(hint);
147
- const hasError = hasContent(error);
148
- const describedBy = [hasHint && hintId, hasError && errorId].filter(Boolean).join(" ");
149
- const control: FieldControlProps = {
150
- id,
151
- "aria-describedby": describedBy || undefined,
152
- "aria-invalid": hasError || undefined,
153
- "aria-required": required || undefined,
154
- };
155
- const labelEl = label !== undefined && (
156
- <Label
157
- id={labelId}
158
- htmlFor={id}
159
- required={required}
160
- disabled={disabled}
161
- size={labelSize}
162
- data-error={hasError || undefined}
163
- className={cn("data-[error=true]:text-danger", LABEL_VISIBILITY[labelVisibility])}
164
- >
165
- {label}
166
- </Label>
167
- );
168
- return (
169
- <div
170
- data-slot="field"
171
- className={cn(
172
- // `content-start`: in a grid row next to a taller item (one with a hint), a
173
- // stretched Field would hand the extra height to its rows — the label grew,
174
- // and the control sat lower than its neighbour's (showcase audit, #/forms).
175
- "grid content-start gap-1.5",
176
- // A hidden label is `position: absolute`; `relative` keeps its containing
177
- // block here rather than the page's (see sr-only-containment.test).
178
- labelVisibility !== "visible" && "relative",
179
- className,
180
- )}
181
- >
182
- {helpMark === undefined && labelEl}
183
- {helpMark !== undefined && (
184
- // The label and its "?" on one line; the "?" stays visible where the label is
185
- // hidden (`labelVisibility`) — a hidden button would still take the focus.
186
- <div className="flex items-center gap-1">
187
- {labelEl}
188
- <span className="flex shrink-0 items-center">{helpMark}</span>
189
- </div>
190
- )}
191
- {typeof children === "function"
192
- ? children(control, { labelId: label !== undefined ? labelId : undefined })
193
- : children}
194
- {hasHint && (
195
- <p id={hintId} className="text-caption leading-tight text-muted">
196
- {hint}
197
- </p>
198
- )}
199
- {hasError && (
200
- <p id={errorId} className="text-caption leading-tight text-danger">
201
- {error}
202
- </p>
203
- )}
204
- </div>
205
- );
206
- }
@@ -1,295 +0,0 @@
1
- import { useId, useState } from "react";
2
- import type { ComponentPropsWithoutRef, DragEvent, ReactNode, Ref } from "react";
3
- import { cn } from "../lib/cn";
4
- import { hasContent } from "../lib/presence";
5
- import { useKitLabels } from "../i18n/kit-labels";
6
- import { Button } from "./button";
7
- import { Spinner } from "./spinner";
8
- import { Tooltip } from "./tooltip";
9
- import { useCommitReason, type CommitScope } from "./write-lock";
10
- import { DEFAULT_FILE_PICKER_LABELS } from "../hooks/use-file-picker-labels";
11
- import { useFilePicker, type UseFilePickerOptions } from "../hooks/use-file-picker";
12
-
13
- /**
14
- * A button that opens the file picker — the shape all three apps kept writing by hand
15
- * as a `<Button>` plus a hidden `<input type="file">` plus a ref between them (seven
16
- * copies in keksdose, two each in kastlan and lenkbank).
17
- *
18
- * Every copy had to remember the same four things, and each one forgot at least one:
19
- *
20
- * 1. **Reset the input after every pick.** A file input fires `change` only when its
21
- * value CHANGES, so picking the same file twice in a row — the retry after a failed
22
- * upload, the second photo of the same receipt — did nothing at all, which reads as
23
- * a broken button. `value = ""` after each pick; always, not per call site.
24
- * 2. **`type="button"`.** `<Button>` does not set it, and inside a form a bare button
25
- * submits the form before the picker opens.
26
- * 3. **Check the file.** `accept` filters the DIALOG, not the result: the dialog's
27
- * "All files" switch, a drop, and a mobile share sheet all hand over whatever the
28
- * user chose. So `accept` is re-checked here, along with `maxSize`, `maxFiles` and
29
- * an optional `isValid`.
30
- * 4. **Say no without a toast.** A rejection is reported through `onReject`, with a
31
- * translated message per file, and spoken through a live region — the kit does not
32
- * decide how an app surfaces errors (keksdose's proposal §1 asked for exactly that).
33
- *
34
- * The part that is not a button — the hidden input, the check, the announcement — is
35
- * {@link useFilePicker}, for the case where the thing that opens the picker is someone
36
- * else's control (a card's "Add" action, a menu item, a second button for the camera).
37
- */
38
-
39
- // The picker's words, its screening and `useFilePicker` live in hooks/use-file-picker
40
- // since 0.34 (MOD-8, refactor audit 2026-10): useFileDrop is built on the hook, and a hook
41
- // importing a component module was a folder-level back-edge. Re-exported here, so every
42
- // import of them from this module keeps working.
43
- export { DEFAULT_FILE_PICKER_LABELS };
44
- export {
45
- formatAccept,
46
- judgePick,
47
- matchesAccept,
48
- screenFiles,
49
- summariseRejections,
50
- useFilePicker,
51
- } from "../hooks/use-file-picker";
52
- export type {
53
- FilePickHandler,
54
- FilePickerLabels,
55
- FileRejection,
56
- FileRejectionReason,
57
- FileScreenOptions,
58
- UseFilePickerOptions,
59
- UseFilePickerReturn,
60
- } from "../hooks/use-file-picker";
61
-
62
- /* ── FileButton ──────────────────────────────────────────────────────────── */
63
-
64
- type ButtonOwnProps = ComponentPropsWithoutRef<typeof Button>;
65
-
66
- export interface FileButtonProps
67
- extends
68
- Omit<UseFilePickerOptions, "disabled">,
69
- // `onDrop` & co. stay the caller's own when `droppable` is off; `type` is fixed to
70
- // "button" (see 2. above) — a file trigger never submits a form.
71
- Omit<ButtonOwnProps, "type" | "children" | "accept" | "capture" | "multiple"> {
72
- /** The button's content — usually an icon and a word. It is the accessible name. */
73
- children: ReactNode;
74
- /** Busy: disabled, `aria-busy`, and a spinner before the content — for "uploading". */
75
- pending?: boolean;
76
- /** Also accept files dropped ON the button (lenkbank's "drop onto the button").
77
- * Off by default: a button that silently takes drops is a surprise on a page that
78
- * has a real drop target elsewhere. */
79
- droppable?: boolean;
80
- /**
81
- * Show what was picked beside the button: the file's name, or "3 files selected"
82
- * (`filePicker.selected`) for several — a native `<input type="file">` says this,
83
- * and a bare button that takes a file and says nothing leaves the user to trust it.
84
- * The read-out is a polite live region and describes the button, so it is heard
85
- * when it changes and again on focus. It holds the last ACCEPTED pick: a refused
86
- * file leaves it as it was. Off by default, so the button's layout is unchanged.
87
- */
88
- showFileName?: boolean;
89
- /**
90
- * Why picking is not available — {@link Button}'s `disabledReason`, with the picker's
91
- * half added (keksdose K3): the button is `aria-disabled` but stays focusable, the
92
- * reason is in the kit Tooltip and its description, a click opens no picker, and a
93
- * `droppable` button takes no drop (the drag is still cancelled, so the browser does
94
- * not navigate to the file). Wins over `disabled`, as on Button.
95
- */
96
- disabledReason?: ReactNode;
97
- /**
98
- * This pick COMMITS — an upload that starts on pick, an attachment saved at once.
99
- * Under a locked {@link WriteLockProvider} it takes the `disabledReason` path with
100
- * the lock's reason (which wins over one of its own). No provider, or an unlocked
101
- * one: no effect. A picker that only fills a form the user saves later is not a
102
- * commit, and is left live — the form's Save carries the lock.
103
- */
104
- commit?: CommitScope;
105
- /** The `<button>`. A React 19 ref prop since 0.34 (MOD-4, refactor audit 2026-10); it
106
- * was `forwardRef`. */
107
- ref?: Ref<HTMLButtonElement>;
108
- }
109
-
110
- /**
111
- * {@link useFilePicker} behind a {@link Button}: `variant` and every other button prop
112
- * pass through, and the ref is the `<button>` (so `ref.current.click()` opens the
113
- * picker from elsewhere too).
114
- *
115
- * ```tsx
116
- * <FileButton accept="image/*,application/pdf" capture="environment" variant="secondary"
117
- * maxSize={10_000_000} onFiles={([f]) => upload(f)} onReject={([r]) => setError(r.message)}>
118
- * <Camera aria-hidden /> Photograph receipt
119
- * </FileButton>
120
- * ```
121
- */
122
- export function FileButton({
123
- ref,
124
- accept,
125
- multiple,
126
- capture,
127
- maxSize,
128
- maxFiles,
129
- isValid,
130
- invalidMessage,
131
- onFiles,
132
- onPick,
133
- onReject,
134
- labels,
135
- pending,
136
- droppable,
137
- showFileName = false,
138
- disabled,
139
- disabledReason: ownDisabledReason,
140
- commit,
141
- children,
142
- className,
143
- onClick,
144
- onDragEnter,
145
- onDragOver,
146
- onDragLeave,
147
- onDrop,
148
- ...rest
149
- }: FileButtonProps) {
150
- const disabledReason = useCommitReason(commit, ownDisabledReason);
151
- const locked = hasContent(disabledReason);
152
- const inert = Boolean(disabled || pending);
153
- // What takes no files: busy, disabled, or locked with a reason. Kept apart from
154
- // `inert`, which is what reaches the button's NATIVE `disabled` — a locked button
155
- // stays focusable (Button's `disabledReason` path), so `locked` must not get there.
156
- const refusing = inert || locked;
157
- const [picked, setPicked] = useState<readonly File[]>([]);
158
- const pickedId = useId();
159
- const pickerLabels = useKitLabels("filePicker", DEFAULT_FILE_PICKER_LABELS, labels);
160
- const picker = useFilePicker({
161
- accept,
162
- multiple,
163
- capture,
164
- maxSize,
165
- maxFiles,
166
- isValid,
167
- invalidMessage,
168
- onFiles: showFileName
169
- ? (files) => {
170
- setPicked(files);
171
- onFiles?.(files);
172
- }
173
- : onFiles,
174
- onPick,
175
- onReject,
176
- labels,
177
- disabled: refusing,
178
- });
179
- const pickedText =
180
- picked.length === 0
181
- ? ""
182
- : picked.length === 1
183
- ? picked[0].name
184
- : pickerLabels.selected(picked.length, picked[0].name);
185
- const [dragOver, setDragOver] = useState(false);
186
-
187
- const hasFiles = (e: DragEvent) => Array.from(e.dataTransfer?.types ?? []).includes("Files");
188
- // Only when `droppable`: otherwise the caller's own handlers are passed untouched.
189
- const dropHandlers = droppable
190
- ? {
191
- onDragEnter: (e: DragEvent<HTMLButtonElement>) => {
192
- onDragEnter?.(e);
193
- if (!hasFiles(e)) return;
194
- e.preventDefault();
195
- if (!refusing) setDragOver(true);
196
- },
197
- onDragOver: (e: DragEvent<HTMLButtonElement>) => {
198
- onDragOver?.(e);
199
- if (!hasFiles(e)) return;
200
- // Always cancel for a file drag, busy or not: an uncancelled drop makes the
201
- // browser NAVIGATE to the file, which loses the page.
202
- e.preventDefault();
203
- e.dataTransfer.dropEffect = refusing ? "none" : "copy";
204
- },
205
- onDragLeave: (e: DragEvent<HTMLButtonElement>) => {
206
- onDragLeave?.(e);
207
- if (e.currentTarget.contains(e.relatedTarget as Node | null)) return;
208
- setDragOver(false);
209
- },
210
- onDrop: (e: DragEvent<HTMLButtonElement>) => {
211
- onDrop?.(e);
212
- if (!hasFiles(e)) return;
213
- e.preventDefault();
214
- setDragOver(false);
215
- picker.take(e.dataTransfer.files);
216
- },
217
- }
218
- : { onDragEnter, onDragOver, onDragLeave, onDrop };
219
-
220
- // `Button` is a plain function component; under React 19 `ref` is an ordinary prop
221
- // and reaches the `<button>` through its `...rest`. Its props type just does not
222
- // declare it, hence the widening here rather than a second button implementation.
223
- const refProp = { ref } as { ref?: Ref<HTMLButtonElement> };
224
-
225
- const button = (
226
- <Button
227
- {...rest}
228
- {...refProp}
229
- {...dropHandlers}
230
- type="button"
231
- disabled={inert}
232
- // Resolved here rather than passed on as `commit`: the picker above has to know
233
- // it is locked too, and one resolution keeps the two from disagreeing.
234
- disabledReason={locked ? disabledReason : undefined}
235
- aria-busy={pending || undefined}
236
- aria-describedby={
237
- showFileName && pickedText
238
- ? [rest["aria-describedby"], pickedId].filter(Boolean).join(" ")
239
- : rest["aria-describedby"]
240
- }
241
- data-drag-over={dragOver || undefined}
242
- className={cn(
243
- // A live drag gets the focus ring's colour as a ring: "let go here", in the
244
- // same vocabulary the button already uses for "you are here".
245
- dragOver && "ring-2 ring-brand",
246
- // Beside a long file name it is the NAME that gives way, never the button.
247
- showFileName && "shrink-0",
248
- className,
249
- )}
250
- onClick={(e) => {
251
- onClick?.(e);
252
- if (!e.defaultPrevented) picker.open();
253
- }}
254
- >
255
- {/* `label={null}`: the spinner is decoration here — `aria-busy` says the same
256
- thing on the button, and a spoken "Loading" would run into its name. */}
257
- {pending && <Spinner label={null} className="size-4" />}
258
- {children}
259
- </Button>
260
- );
261
-
262
- if (!showFileName) {
263
- return (
264
- <>
265
- {button}
266
- {picker.element}
267
- </>
268
- );
269
- }
270
- return (
271
- // One inline row, so the name sits beside the button wherever the button sits; the
272
- // name truncates rather than pushing the row wider (at Normal: from Large up it wraps,
273
- // `truncate-until-large`, text size §10.17), and the full list is in the
274
- // kit's own Tooltip — not a native `title` (0.16.0 shipped one: the one-tooltip rule
275
- // since keksdose dev#523, and a title never opens on touch). Lazy, so the closed
276
- // bubble adds nothing to the read-out's text.
277
- <span className="inline-flex max-w-full min-w-0 items-center gap-2">
278
- {button}
279
- {/* The live region is the OUTER span and never remounts: a Tooltip with an empty
280
- label renders no wrapper, so wrapping the region itself would swap its element
281
- the moment the first file arrives — and a fresh live region may not announce. */}
282
- <span
283
- id={pickedId}
284
- aria-live="polite"
285
- data-slot="file-button-name"
286
- className="flex min-w-0 text-sm text-secondary"
287
- >
288
- <Tooltip label={picked.map((f) => f.name).join(", ")} lazy className="min-w-0">
289
- <span className="block truncate-until-large">{pickedText}</span>
290
- </Tooltip>
291
- </span>
292
- {picker.element}
293
- </span>
294
- );
295
- }