@eifi1/ui-kit 0.53.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 (902) hide show
  1. package/README.md +96 -82
  2. package/dist/account/delete-account-setting.d.ts +3 -2
  3. package/dist/account/delete-account-setting.js.map +1 -1
  4. package/dist/admin/plan-change.js +2 -2
  5. package/dist/admin/plan-change.js.map +1 -1
  6. package/dist/admin/user-roster.d.ts +6 -0
  7. package/dist/admin/user-roster.js +4 -0
  8. package/dist/admin/user-roster.js.map +1 -1
  9. package/dist/auth/auth-errors.d.ts +36 -0
  10. package/dist/auth/auth-errors.js +20 -0
  11. package/dist/auth/auth-errors.js.map +1 -1
  12. package/dist/billing/billing-labels.d.ts +26 -0
  13. package/dist/billing/billing-labels.js +9 -0
  14. package/dist/billing/billing-labels.js.map +1 -1
  15. package/dist/billing/subscription-standing.d.ts +61 -0
  16. package/dist/billing/subscription-standing.js +51 -0
  17. package/dist/billing/subscription-standing.js.map +1 -0
  18. package/dist/billing/usage-meter.d.ts +52 -0
  19. package/dist/billing/usage-meter.js +52 -0
  20. package/dist/billing/usage-meter.js.map +1 -0
  21. package/dist/chart.d.ts +1 -0
  22. package/dist/chart.js +4 -0
  23. package/dist/chart.js.map +1 -1
  24. package/dist/components/alert-banner.js +2 -3
  25. package/dist/components/alert-banner.js.map +1 -1
  26. package/dist/components/amount-input.d.ts +2 -1
  27. package/dist/components/amount-input.js +3 -15
  28. package/dist/components/amount-input.js.map +1 -1
  29. package/dist/components/autocomplete.js +2 -2
  30. package/dist/components/autocomplete.js.map +1 -1
  31. package/dist/components/bulk-action-bar.js +2 -1
  32. package/dist/components/bulk-action-bar.js.map +1 -1
  33. package/dist/components/button.d.ts +35 -1
  34. package/dist/components/button.js +5 -9
  35. package/dist/components/button.js.map +1 -1
  36. package/dist/components/calendar-heatmap.js +6 -4
  37. package/dist/components/calendar-heatmap.js.map +1 -1
  38. package/dist/components/camera-button.d.ts +89 -0
  39. package/dist/components/camera-button.js +122 -0
  40. package/dist/components/camera-button.js.map +1 -0
  41. package/dist/components/camera-capture.d.ts +66 -0
  42. package/dist/components/camera-capture.js +190 -0
  43. package/dist/components/camera-capture.js.map +1 -0
  44. package/dist/components/camera-labels.d.ts +20 -0
  45. package/dist/components/camera-labels.js +15 -0
  46. package/dist/components/camera-labels.js.map +1 -0
  47. package/dist/components/chart-edge.d.ts +9 -0
  48. package/dist/components/chart-edge.js +14 -3
  49. package/dist/components/chart-edge.js.map +1 -1
  50. package/dist/components/chart-zoom-core.js +34 -29
  51. package/dist/components/chart-zoom-core.js.map +1 -1
  52. package/dist/components/checkbox-group.js +1 -1
  53. package/dist/components/checkbox-group.js.map +1 -1
  54. package/dist/components/combobox-core.js +3 -2
  55. package/dist/components/combobox-core.js.map +1 -1
  56. package/dist/components/combobox.js +2 -2
  57. package/dist/components/combobox.js.map +1 -1
  58. package/dist/components/consent-again-notice-labels.d.ts +25 -0
  59. package/dist/components/consent-again-notice-labels.js +15 -0
  60. package/dist/components/consent-again-notice-labels.js.map +1 -0
  61. package/dist/components/consent-again-notice.d.ts +85 -0
  62. package/dist/components/consent-again-notice.js +94 -0
  63. package/dist/components/consent-again-notice.js.map +1 -0
  64. package/dist/components/country-select.js +2 -7
  65. package/dist/components/country-select.js.map +1 -1
  66. package/dist/components/currency-option-list.d.ts +2 -1
  67. package/dist/components/currency-option-list.js +10 -3
  68. package/dist/components/currency-option-list.js.map +1 -1
  69. package/dist/components/currency-select.d.ts +3 -1
  70. package/dist/components/currency-select.js +2 -2
  71. package/dist/components/currency-select.js.map +1 -1
  72. package/dist/components/danger-confirm.d.ts +22 -1
  73. package/dist/components/danger-confirm.js +52 -30
  74. package/dist/components/danger-confirm.js.map +1 -1
  75. package/dist/components/data-table-column-settings.js +2 -2
  76. package/dist/components/data-table-column-settings.js.map +1 -1
  77. package/dist/components/data-table-filter-popover.d.ts +2 -1
  78. package/dist/components/data-table-filter-popover.js +3 -2
  79. package/dist/components/data-table-filter-popover.js.map +1 -1
  80. package/dist/components/data-table-filters.d.ts +33 -3
  81. package/dist/components/data-table-filters.js +6 -4
  82. package/dist/components/data-table-filters.js.map +1 -1
  83. package/dist/components/data-table-fit.js.map +1 -1
  84. package/dist/components/data-table-virtual.js +13 -3
  85. package/dist/components/data-table-virtual.js.map +1 -1
  86. package/dist/components/date-field.js +2 -2
  87. package/dist/components/date-field.js.map +1 -1
  88. package/dist/components/date-picker.js +2 -2
  89. package/dist/components/date-picker.js.map +1 -1
  90. package/dist/components/date-range-picker.js +2 -6
  91. package/dist/components/date-range-picker.js.map +1 -1
  92. package/dist/components/dialog-frame.d.ts +5 -1
  93. package/dist/components/dialog-frame.js +6 -2
  94. package/dist/components/dialog-frame.js.map +1 -1
  95. package/dist/components/dropdown.js +7 -3
  96. package/dist/components/dropdown.js.map +1 -1
  97. package/dist/components/entity-combobox.js +2 -2
  98. package/dist/components/entity-combobox.js.map +1 -1
  99. package/dist/components/field-parts.d.ts +108 -6
  100. package/dist/components/field-parts.js +59 -6
  101. package/dist/components/field-parts.js.map +1 -1
  102. package/dist/components/field-suggestion-labels.d.ts +2 -0
  103. package/dist/components/field-suggestion-labels.js +10 -0
  104. package/dist/components/field-suggestion-labels.js.map +1 -0
  105. package/dist/components/field.js +1 -1
  106. package/dist/components/field.js.map +1 -1
  107. package/dist/components/file-button.d.ts +1 -1
  108. package/dist/components/file-button.js.map +1 -1
  109. package/dist/components/floating-panel.d.ts +7 -6
  110. package/dist/components/floating-panel.js +3 -17
  111. package/dist/components/floating-panel.js.map +1 -1
  112. package/dist/components/form-actions.d.ts +3 -2
  113. package/dist/components/form-actions.js.map +1 -1
  114. package/dist/components/hover-menu.js +3 -2
  115. package/dist/components/hover-menu.js.map +1 -1
  116. package/dist/components/icon-button.d.ts +23 -5
  117. package/dist/components/icon-button.js +6 -8
  118. package/dist/components/icon-button.js.map +1 -1
  119. package/dist/components/inline-confirm.js +2 -1
  120. package/dist/components/inline-confirm.js.map +1 -1
  121. package/dist/components/inline-entity-combobox.js +2 -2
  122. package/dist/components/inline-entity-combobox.js.map +1 -1
  123. package/dist/components/input.js +2 -2
  124. package/dist/components/input.js.map +1 -1
  125. package/dist/components/jump-calendar.js +3 -3
  126. package/dist/components/jump-calendar.js.map +1 -1
  127. package/dist/components/legal.d.ts +13 -1
  128. package/dist/components/legal.js +12 -0
  129. package/dist/components/legal.js.map +1 -1
  130. package/dist/components/legended-series-chart.d.ts +80 -0
  131. package/dist/components/legended-series-chart.js +70 -0
  132. package/dist/components/legended-series-chart.js.map +1 -0
  133. package/dist/components/lightbox.js +2 -1
  134. package/dist/components/lightbox.js.map +1 -1
  135. package/dist/components/mini-calendar.js +16 -7
  136. package/dist/components/mini-calendar.js.map +1 -1
  137. package/dist/components/modal.d.ts +48 -0
  138. package/dist/components/modal.js +26 -6
  139. package/dist/components/modal.js.map +1 -1
  140. package/dist/components/month-picker.d.ts +1 -1
  141. package/dist/components/month-picker.js +6 -6
  142. package/dist/components/month-picker.js.map +1 -1
  143. package/dist/components/multi-entity-combobox.js +2 -2
  144. package/dist/components/multi-entity-combobox.js.map +1 -1
  145. package/dist/components/multi-select.js +2 -6
  146. package/dist/components/multi-select.js.map +1 -1
  147. package/dist/components/number-input.js +2 -2
  148. package/dist/components/number-input.js.map +1 -1
  149. package/dist/components/page-header-layout.d.ts +18 -0
  150. package/dist/components/page-header-layout.js +23 -0
  151. package/dist/components/page-header-layout.js.map +1 -0
  152. package/dist/components/page-header-skeleton.d.ts +41 -0
  153. package/dist/components/page-header-skeleton.js +52 -0
  154. package/dist/components/page-header-skeleton.js.map +1 -0
  155. package/dist/components/page-header.js +4 -17
  156. package/dist/components/page-header.js.map +1 -1
  157. package/dist/components/popover.js +7 -2
  158. package/dist/components/popover.js.map +1 -1
  159. package/dist/components/release-notes-labels.d.ts +16 -0
  160. package/dist/components/release-notes-labels.js +18 -0
  161. package/dist/components/release-notes-labels.js.map +1 -0
  162. package/dist/components/release-notes.d.ts +65 -0
  163. package/dist/components/release-notes.js +65 -0
  164. package/dist/components/release-notes.js.map +1 -0
  165. package/dist/components/select.js +2 -2
  166. package/dist/components/select.js.map +1 -1
  167. package/dist/components/series-chart-labels.d.ts +9 -0
  168. package/dist/components/series-chart-labels.js +3 -1
  169. package/dist/components/series-chart-labels.js.map +1 -1
  170. package/dist/components/series-chart.d.ts +5 -0
  171. package/dist/components/series-chart.js +89 -36
  172. package/dist/components/series-chart.js.map +1 -1
  173. package/dist/components/stat-tile.d.ts +21 -2
  174. package/dist/components/stat-tile.js +4 -2
  175. package/dist/components/stat-tile.js.map +1 -1
  176. package/dist/components/toggle-group.js +3 -2
  177. package/dist/components/toggle-group.js.map +1 -1
  178. package/dist/components/treemap-layout.js.map +1 -1
  179. package/dist/components/treemap.d.ts +17 -15
  180. package/dist/components/treemap.js +167 -85
  181. package/dist/components/treemap.js.map +1 -1
  182. package/dist/currencies.d.ts +16 -2
  183. package/dist/currencies.js +2 -1
  184. package/dist/currencies.js.map +1 -1
  185. package/dist/eslint/index.js +1 -1
  186. package/dist/eslint/role-utilities.d.ts +2 -2
  187. package/dist/eslint/role-utilities.js.map +1 -1
  188. package/dist/feedback/feedback-context-labels.js +2 -1
  189. package/dist/feedback/feedback-context-labels.js.map +1 -1
  190. package/dist/feedback/feedback-context.d.ts +19 -3
  191. package/dist/feedback/feedback-context.js +12 -1
  192. package/dist/feedback/feedback-context.js.map +1 -1
  193. package/dist/feedback/feedback-diagnostics.d.ts +17 -0
  194. package/dist/feedback/feedback-diagnostics.js +27 -0
  195. package/dist/feedback/feedback-diagnostics.js.map +1 -0
  196. package/dist/feedback/feedback-dialog.d.ts +10 -0
  197. package/dist/feedback/feedback-dialog.js +6 -4
  198. package/dist/feedback/feedback-dialog.js.map +1 -1
  199. package/dist/feedback/feedback-inbox-page.d.ts +260 -0
  200. package/dist/feedback/feedback-inbox-page.js +207 -0
  201. package/dist/feedback/feedback-inbox-page.js.map +1 -0
  202. package/dist/feedback/feedback-record.d.ts +5 -0
  203. package/dist/feedback/feedback-record.js.map +1 -1
  204. package/dist/feedback/feedback-row-detail-labels.js +1 -0
  205. package/dist/feedback/feedback-row-detail-labels.js.map +1 -1
  206. package/dist/feedback/feedback-row-detail.d.ts +3 -0
  207. package/dist/feedback/feedback-row-detail.js +3 -0
  208. package/dist/feedback/feedback-row-detail.js.map +1 -1
  209. package/dist/feedback/feedback-submit-dialog.d.ts +5 -1
  210. package/dist/feedback/feedback-submit-dialog.js +15 -3
  211. package/dist/feedback/feedback-submit-dialog.js.map +1 -1
  212. package/dist/feedback/feedback-submit.d.ts +30 -2
  213. package/dist/feedback/feedback-submit.js +5 -2
  214. package/dist/feedback/feedback-submit.js.map +1 -1
  215. package/dist/feedback/feedback-vocabulary.js +2 -2
  216. package/dist/feedback/feedback-vocabulary.js.map +1 -1
  217. package/dist/feedback.d.ts +1 -0
  218. package/dist/feedback.js +6 -0
  219. package/dist/feedback.js.map +1 -1
  220. package/dist/hooks/use-debounce.d.ts +32 -5
  221. package/dist/hooks/use-debounce.js +6 -5
  222. package/dist/hooks/use-debounce.js.map +1 -1
  223. package/dist/hooks/use-file-picker.d.ts +3 -1
  224. package/dist/hooks/use-file-picker.js.map +1 -1
  225. package/dist/hooks/use-focus-trap.d.ts +19 -3
  226. package/dist/hooks/use-focus-trap.js +15 -5
  227. package/dist/hooks/use-focus-trap.js.map +1 -1
  228. package/dist/hooks/use-has-camera.d.ts +36 -0
  229. package/dist/hooks/use-has-camera.js +53 -0
  230. package/dist/hooks/use-has-camera.js.map +1 -0
  231. package/dist/hooks/use-hotkey.js +2 -1
  232. package/dist/hooks/use-hotkey.js.map +1 -1
  233. package/dist/hooks/use-overlay-history.d.ts +6 -1
  234. package/dist/hooks/use-overlay-history.js +10 -2
  235. package/dist/hooks/use-overlay-history.js.map +1 -1
  236. package/dist/i18n/defaults.js +11 -1
  237. package/dist/i18n/defaults.js.map +1 -1
  238. package/dist/i18n/german.js +78 -4
  239. package/dist/i18n/german.js.map +1 -1
  240. package/dist/i18n/kit-labels.d.ts +20 -0
  241. package/dist/i18n/kit-labels.js.map +1 -1
  242. package/dist/i18n/locales/en.js +95 -5
  243. package/dist/i18n/locales/en.js.map +3 -3
  244. package/dist/i18n/locales/es.js +74 -4
  245. package/dist/i18n/locales/es.js.map +1 -1
  246. package/dist/i18n/locales/fr.js +75 -3
  247. package/dist/i18n/locales/fr.js.map +1 -1
  248. package/dist/i18n/locales/hu.js +77 -4
  249. package/dist/i18n/locales/hu.js.map +1 -1
  250. package/dist/i18n/locales/it.js +77 -4
  251. package/dist/i18n/locales/it.js.map +1 -1
  252. package/dist/i18n/locales/zh.js +74 -4
  253. package/dist/i18n/locales/zh.js.map +1 -1
  254. package/dist/i18n/review.js +22 -1
  255. package/dist/i18n/review.js.map +1 -1
  256. package/dist/index.d.ts +27 -8
  257. package/dist/index.js +41 -2
  258. package/dist/index.js.map +1 -1
  259. package/dist/landing/landing-labels.d.ts +8 -0
  260. package/dist/landing/landing-labels.js +2 -1
  261. package/dist/landing/landing-labels.js.map +1 -1
  262. package/dist/lib/changelog.d.ts +130 -0
  263. package/dist/lib/changelog.js +137 -0
  264. package/dist/lib/changelog.js.map +1 -0
  265. package/dist/lib/clipboard-minus.js +2 -2
  266. package/dist/lib/clipboard-minus.js.map +1 -1
  267. package/dist/lib/dates.d.ts +36 -4
  268. package/dist/lib/dates.js +49 -13
  269. package/dist/lib/dates.js.map +1 -1
  270. package/dist/lib/editable-content.d.ts +33 -0
  271. package/dist/lib/editable-content.js +15 -0
  272. package/dist/lib/editable-content.js.map +1 -0
  273. package/dist/lib/focus-left.d.ts +47 -1
  274. package/dist/lib/focus-left.js +11 -2
  275. package/dist/lib/focus-left.js.map +1 -1
  276. package/dist/lib/format.d.ts +37 -2
  277. package/dist/lib/format.js +25 -1
  278. package/dist/lib/format.js.map +1 -1
  279. package/dist/lib/intl-cache.d.ts +4 -2
  280. package/dist/lib/intl-cache.js.map +1 -1
  281. package/dist/lib/server-wake.d.ts +49 -9
  282. package/dist/lib/server-wake.js +25 -14
  283. package/dist/lib/server-wake.js.map +1 -1
  284. package/dist/lib/session-refresh.d.ts +53 -0
  285. package/dist/lib/session-refresh.js +27 -1
  286. package/dist/lib/session-refresh.js.map +1 -1
  287. package/dist/lib/translation-review.d.ts +26 -0
  288. package/dist/lib/translation-review.js +14 -0
  289. package/dist/lib/translation-review.js.map +1 -1
  290. package/dist/rhf/fields.js +3 -3
  291. package/dist/rhf/fields.js.map +1 -1
  292. package/dist/shell/app-shell.d.ts +25 -1
  293. package/dist/shell/app-shell.js +3 -1
  294. package/dist/shell/app-shell.js.map +1 -1
  295. package/dist/shell/dev-menu.d.ts +3 -0
  296. package/dist/shell/dev-menu.js +4 -2
  297. package/dist/shell/dev-menu.js.map +1 -1
  298. package/dist/shell/held-changes-banner-labels.d.ts +23 -0
  299. package/dist/shell/held-changes-banner-labels.js +14 -0
  300. package/dist/shell/held-changes-banner-labels.js.map +1 -0
  301. package/dist/shell/held-changes-banner.d.ts +75 -0
  302. package/dist/shell/held-changes-banner.js +106 -0
  303. package/dist/shell/held-changes-banner.js.map +1 -0
  304. package/dist/shell/sync-status-indicator.d.ts +27 -12
  305. package/dist/shell/sync-status-indicator.js +13 -4
  306. package/dist/shell/sync-status-indicator.js.map +1 -1
  307. package/dist/shell/top-bar-parts-labels.d.ts +5 -0
  308. package/dist/shell/top-bar-parts-labels.js +3 -1
  309. package/dist/shell/top-bar-parts-labels.js.map +1 -1
  310. package/dist/shell.d.ts +2 -0
  311. package/dist/shell.js +3 -0
  312. package/dist/shell.js.map +1 -1
  313. package/dist/sync/engine.d.ts +11 -2
  314. package/dist/sync/engine.js +13 -5
  315. package/dist/sync/engine.js.map +1 -1
  316. package/dist/sync/hooks.d.ts +3 -2
  317. package/dist/sync/hooks.js +4 -2
  318. package/dist/sync/hooks.js.map +1 -1
  319. package/dist/testing/css-variables.generated.d.ts +2 -2
  320. package/dist/testing/css-variables.generated.js +1 -1
  321. package/dist/testing/css-variables.generated.js.map +1 -1
  322. package/dist/theme/chart-palette.d.ts +18 -0
  323. package/dist/theme/chart-palette.js +17 -1
  324. package/dist/theme/chart-palette.js.map +1 -1
  325. package/dist/theme/contrast-tokens.d.ts +3 -3
  326. package/dist/theme/contrast-tokens.js.map +1 -1
  327. package/dist/theme/contrast.d.ts +4 -4
  328. package/dist/theme/contrast.js.map +1 -1
  329. package/dist/tour/tour-overlay.js +2 -1
  330. package/dist/tour/tour-overlay.js.map +1 -1
  331. package/package.json +5 -9
  332. package/tokens.css +19 -54
  333. package/src/account/account-parts.ts +0 -47
  334. package/src/account/account-settings-labels.ts +0 -240
  335. package/src/account/account-settings.tsx +0 -698
  336. package/src/account/data-export-setting-labels.ts +0 -20
  337. package/src/account/data-export-setting.tsx +0 -200
  338. package/src/account/delete-account-setting-labels.ts +0 -33
  339. package/src/account/delete-account-setting.tsx +0 -341
  340. package/src/account/email-change-setting-labels.ts +0 -31
  341. package/src/account/email-change-setting.tsx +0 -443
  342. package/src/account/passkeys-setting.tsx +0 -445
  343. package/src/account/sessions-setting-labels.ts +0 -24
  344. package/src/account/sessions-setting.tsx +0 -283
  345. package/src/admin/admin-action-confirm-labels.ts +0 -19
  346. package/src/admin/admin-action-confirm.tsx +0 -509
  347. package/src/admin/admin-action-log-labels.ts +0 -83
  348. package/src/admin/admin-action-log.tsx +0 -464
  349. package/src/admin/admin-area-labels.ts +0 -114
  350. package/src/admin/admin-forbidden.tsx +0 -75
  351. package/src/admin/admin-overview.tsx +0 -258
  352. package/src/admin/admin-parts.ts +0 -68
  353. package/src/admin/admin-sections.tsx +0 -208
  354. package/src/admin/admin-tool-links.tsx +0 -90
  355. package/src/admin/invitations-panel-labels.ts +0 -31
  356. package/src/admin/invitations-panel.tsx +0 -516
  357. package/src/admin/mail-test-card-labels.ts +0 -19
  358. package/src/admin/mail-test-card.tsx +0 -189
  359. package/src/admin/plan-change-labels.ts +0 -5
  360. package/src/admin/plan-change.tsx +0 -474
  361. package/src/admin/reviewer-scope-editor-labels.ts +0 -16
  362. package/src/admin/reviewer-scope-editor.tsx +0 -224
  363. package/src/admin/role-select-labels.ts +0 -16
  364. package/src/admin/role-select.tsx +0 -282
  365. package/src/admin/transfer-ownership-dialog-labels.ts +0 -20
  366. package/src/admin/transfer-ownership-dialog.tsx +0 -162
  367. package/src/admin/user-roster-labels.ts +0 -17
  368. package/src/admin/user-roster.tsx +0 -559
  369. package/src/auth/accept-invitation-labels.ts +0 -21
  370. package/src/auth/accept-invitation.tsx +0 -210
  371. package/src/auth/auth-errors-labels.ts +0 -23
  372. package/src/auth/auth-errors.ts +0 -370
  373. package/src/auth/complete-name-dialog-labels.ts +0 -16
  374. package/src/auth/complete-name-dialog.tsx +0 -253
  375. package/src/auth/email-tag.ts +0 -75
  376. package/src/auth/forgot-password-form-labels.ts +0 -20
  377. package/src/auth/forgot-password-form.tsx +0 -221
  378. package/src/auth/form-rules.ts +0 -40
  379. package/src/auth/new-password-fields.tsx +0 -85
  380. package/src/auth/not-found-page-labels.ts +0 -12
  381. package/src/auth/not-found-page.tsx +0 -95
  382. package/src/auth/register-form-labels.ts +0 -31
  383. package/src/auth/register-form.tsx +0 -456
  384. package/src/auth/reset-password-form-labels.ts +0 -27
  385. package/src/auth/reset-password-form.tsx +0 -341
  386. package/src/auth/sign-in-form-labels.ts +0 -44
  387. package/src/auth/sign-in-form.tsx +0 -858
  388. package/src/auth/status-parts.tsx +0 -132
  389. package/src/auth/verify-email-labels.ts +0 -26
  390. package/src/auth/verify-email.tsx +0 -445
  391. package/src/billing/billing-banner.tsx +0 -258
  392. package/src/billing/billing-labels.ts +0 -381
  393. package/src/billing/billing-lock.ts +0 -108
  394. package/src/billing/billing-overview.ts +0 -157
  395. package/src/billing/billing-standing.ts +0 -80
  396. package/src/billing/cancel-request.ts +0 -97
  397. package/src/billing/cancel-subscription.tsx +0 -98
  398. package/src/billing/checkout-processing.ts +0 -394
  399. package/src/billing/checkout-return.ts +0 -90
  400. package/src/billing/pay-page.ts +0 -330
  401. package/src/billing/plan-card.tsx +0 -562
  402. package/src/billing/plan-change-labels.ts +0 -66
  403. package/src/billing/plan-limit-notice.tsx +0 -148
  404. package/src/billing/plan-limit-toast.tsx +0 -90
  405. package/src/billing/plan-limit.ts +0 -52
  406. package/src/billing/plan-price.ts +0 -98
  407. package/src/billing/plan-switch.tsx +0 -216
  408. package/src/billing/provider-page.ts +0 -84
  409. package/src/billing/subscription-actions.tsx +0 -247
  410. package/src/billing/subscription-status-chip.tsx +0 -95
  411. package/src/chart.ts +0 -103
  412. package/src/components/account-chips-labels.ts +0 -16
  413. package/src/components/account-chips.tsx +0 -474
  414. package/src/components/alert-banner.tsx +0 -670
  415. package/src/components/amount-input.tsx +0 -815
  416. package/src/components/appearance-labels.ts +0 -63
  417. package/src/components/authed-image-labels.ts +0 -11
  418. package/src/components/authed-image.tsx +0 -209
  419. package/src/components/autocomplete.tsx +0 -645
  420. package/src/components/breadcrumbs-labels.ts +0 -10
  421. package/src/components/breadcrumbs.tsx +0 -205
  422. package/src/components/bulk-action-bar-labels.ts +0 -11
  423. package/src/components/bulk-action-bar.tsx +0 -443
  424. package/src/components/button-group.tsx +0 -223
  425. package/src/components/button-look.ts +0 -256
  426. package/src/components/button.tsx +0 -339
  427. package/src/components/calculator.tsx +0 -341
  428. package/src/components/calendar-heatmap-labels.ts +0 -15
  429. package/src/components/calendar-heatmap.tsx +0 -594
  430. package/src/components/card.tsx +0 -377
  431. package/src/components/chart-edge.ts +0 -106
  432. package/src/components/chart-figure.tsx +0 -35
  433. package/src/components/chart-height.ts +0 -30
  434. package/src/components/chart-zoom-core.tsx +0 -627
  435. package/src/components/chart-zoom.tsx +0 -22
  436. package/src/components/chart.tsx +0 -554
  437. package/src/components/checkbox-group.tsx +0 -247
  438. package/src/components/checkbox.tsx +0 -346
  439. package/src/components/chip-input.tsx +0 -370
  440. package/src/components/chip-labels.ts +0 -13
  441. package/src/components/chip.tsx +0 -843
  442. package/src/components/choice-card.tsx +0 -544
  443. package/src/components/column-mapper-labels.ts +0 -38
  444. package/src/components/column-mapper.tsx +0 -655
  445. package/src/components/combobox-core.tsx +0 -1321
  446. package/src/components/combobox-suggestions.tsx +0 -131
  447. package/src/components/combobox.tsx +0 -716
  448. package/src/components/confirm-context.ts +0 -7
  449. package/src/components/confirm-dialog-labels.ts +0 -13
  450. package/src/components/confirm-dialog.tsx +0 -341
  451. package/src/components/copy-button-labels.ts +0 -13
  452. package/src/components/copy-button.tsx +0 -192
  453. package/src/components/country-select-labels.ts +0 -11
  454. package/src/components/country-select.tsx +0 -539
  455. package/src/components/currency-option-list.tsx +0 -180
  456. package/src/components/currency-select.tsx +0 -341
  457. package/src/components/danger-confirm-labels.ts +0 -20
  458. package/src/components/danger-confirm.tsx +0 -934
  459. package/src/components/data-table-cells.tsx +0 -118
  460. package/src/components/data-table-column-settings.tsx +0 -198
  461. package/src/components/data-table-filter-popover.tsx +0 -281
  462. package/src/components/data-table-filters.ts +0 -287
  463. package/src/components/data-table-fit.ts +0 -301
  464. package/src/components/data-table-groups.tsx +0 -288
  465. package/src/components/data-table-head.tsx +0 -280
  466. package/src/components/data-table-labels.ts +0 -198
  467. package/src/components/data-table-leading-row.tsx +0 -58
  468. package/src/components/data-table-mobile.tsx +0 -1117
  469. package/src/components/data-table-pagination.tsx +0 -202
  470. package/src/components/data-table-resize.ts +0 -188
  471. package/src/components/data-table-row-actions.tsx +0 -302
  472. package/src/components/data-table-row.tsx +0 -496
  473. package/src/components/data-table-selection.ts +0 -71
  474. package/src/components/data-table-shared.tsx +0 -287
  475. package/src/components/data-table-sort.ts +0 -163
  476. package/src/components/data-table-virtual.ts +0 -576
  477. package/src/components/data-table.tsx +0 -2598
  478. package/src/components/date-field.tsx +0 -684
  479. package/src/components/date-format-setting.tsx +0 -64
  480. package/src/components/date-picker.tsx +0 -404
  481. package/src/components/date-range-picker.tsx +0 -518
  482. package/src/components/description-list-labels.ts +0 -9
  483. package/src/components/description-list.tsx +0 -386
  484. package/src/components/dialog-frame-labels.ts +0 -7
  485. package/src/components/dialog-frame.tsx +0 -276
  486. package/src/components/disclosure.tsx +0 -476
  487. package/src/components/dropdown.tsx +0 -461
  488. package/src/components/empty-state.tsx +0 -136
  489. package/src/components/entity-combobox.tsx +0 -422
  490. package/src/components/error-boundary-labels.ts +0 -20
  491. package/src/components/error-boundary.tsx +0 -675
  492. package/src/components/facing-pair.ts +0 -93
  493. package/src/components/field-base-labels.ts +0 -20
  494. package/src/components/field-base.tsx +0 -656
  495. package/src/components/field-parts.tsx +0 -825
  496. package/src/components/field-strip.tsx +0 -129
  497. package/src/components/field.tsx +0 -206
  498. package/src/components/file-button.tsx +0 -295
  499. package/src/components/file-dropzone.tsx +0 -559
  500. package/src/components/floating-panel-labels.ts +0 -10
  501. package/src/components/floating-panel.tsx +0 -828
  502. package/src/components/focus-ring.ts +0 -16
  503. package/src/components/form-actions-labels.ts +0 -11
  504. package/src/components/form-actions.tsx +0 -578
  505. package/src/components/full-bleed-dialog.tsx +0 -294
  506. package/src/components/grouped-picker.tsx +0 -184
  507. package/src/components/help-popover.tsx +0 -117
  508. package/src/components/hover-menu.tsx +0 -343
  509. package/src/components/iban-input-labels.ts +0 -14
  510. package/src/components/iban-input.tsx +0 -236
  511. package/src/components/icon-button.tsx +0 -959
  512. package/src/components/icon-picker-labels.ts +0 -13
  513. package/src/components/icon-picker.tsx +0 -232
  514. package/src/components/image-grid-labels.ts +0 -11
  515. package/src/components/image-grid.tsx +0 -202
  516. package/src/components/inline-confirm.tsx +0 -116
  517. package/src/components/inline-edit-field-labels.ts +0 -11
  518. package/src/components/inline-edit-field.tsx +0 -552
  519. package/src/components/inline-entity-combobox.tsx +0 -849
  520. package/src/components/input.tsx +0 -394
  521. package/src/components/jump-calendar.tsx +0 -265
  522. package/src/components/language-select.tsx +0 -93
  523. package/src/components/legal-labels.ts +0 -105
  524. package/src/components/legal-page.tsx +0 -711
  525. package/src/components/legal.tsx +0 -668
  526. package/src/components/lightbox-labels.ts +0 -18
  527. package/src/components/lightbox.tsx +0 -399
  528. package/src/components/line-items-labels.ts +0 -14
  529. package/src/components/line-items.tsx +0 -602
  530. package/src/components/list-labels.ts +0 -12
  531. package/src/components/list.tsx +0 -870
  532. package/src/components/loading-state.tsx +0 -78
  533. package/src/components/measured-grid-labels.ts +0 -25
  534. package/src/components/measured-grid.tsx +0 -837
  535. package/src/components/menu-item.tsx +0 -241
  536. package/src/components/mini-calendar-labels.ts +0 -17
  537. package/src/components/mini-calendar.tsx +0 -789
  538. package/src/components/modal.tsx +0 -505
  539. package/src/components/money-draft.ts +0 -83
  540. package/src/components/money-field.tsx +0 -76
  541. package/src/components/month-grid.tsx +0 -229
  542. package/src/components/month-picker-labels.ts +0 -22
  543. package/src/components/month-picker.tsx +0 -1087
  544. package/src/components/multi-entity-combobox.tsx +0 -369
  545. package/src/components/multi-select.tsx +0 -376
  546. package/src/components/nav-pills.tsx +0 -198
  547. package/src/components/number-field.tsx +0 -327
  548. package/src/components/number-input.tsx +0 -558
  549. package/src/components/numeric-field.ts +0 -169
  550. package/src/components/numpad-sheet.tsx +0 -285
  551. package/src/components/one-time-code-input.tsx +0 -270
  552. package/src/components/page-contents-labels.ts +0 -9
  553. package/src/components/page-contents.tsx +0 -282
  554. package/src/components/page-header-context.ts +0 -8
  555. package/src/components/page-header.tsx +0 -298
  556. package/src/components/password-strength-labels.ts +0 -22
  557. package/src/components/password-strength.tsx +0 -241
  558. package/src/components/phone-input-labels.ts +0 -10
  559. package/src/components/phone-input.tsx +0 -282
  560. package/src/components/picker-sheet.tsx +0 -330
  561. package/src/components/pie-chart-labels.ts +0 -40
  562. package/src/components/pie-chart.tsx +0 -480
  563. package/src/components/popover-labels.ts +0 -14
  564. package/src/components/popover.tsx +0 -268
  565. package/src/components/progress-bar-labels.ts +0 -10
  566. package/src/components/progress-bar.tsx +0 -479
  567. package/src/components/qr-code.tsx +0 -76
  568. package/src/components/reauth-dialog-labels.ts +0 -13
  569. package/src/components/reauth-dialog.tsx +0 -265
  570. package/src/components/row-actions-labels.ts +0 -12
  571. package/src/components/row-actions.tsx +0 -795
  572. package/src/components/scroll-area.tsx +0 -123
  573. package/src/components/search-field.tsx +0 -192
  574. package/src/components/select.tsx +0 -294
  575. package/src/components/separator.tsx +0 -33
  576. package/src/components/series-chart-axes.ts +0 -342
  577. package/src/components/series-chart-budget.ts +0 -150
  578. package/src/components/series-chart-labels.ts +0 -33
  579. package/src/components/series-chart-thin.ts +0 -180
  580. package/src/components/series-chart-ticks.ts +0 -194
  581. package/src/components/series-chart.tsx +0 -1906
  582. package/src/components/server-wake-labels.ts +0 -11
  583. package/src/components/server-wake.tsx +0 -129
  584. package/src/components/settings-fields.tsx +0 -237
  585. package/src/components/share-card-labels.ts +0 -30
  586. package/src/components/share-card.tsx +0 -675
  587. package/src/components/signature-pad-labels.ts +0 -24
  588. package/src/components/signature-pad.tsx +0 -747
  589. package/src/components/signed-amount-labels.ts +0 -10
  590. package/src/components/signed-amount.tsx +0 -336
  591. package/src/components/skeleton.tsx +0 -80
  592. package/src/components/slider.tsx +0 -338
  593. package/src/components/sparkline-labels.ts +0 -14
  594. package/src/components/sparkline.tsx +0 -322
  595. package/src/components/spinner.tsx +0 -81
  596. package/src/components/stat-tile-labels.ts +0 -15
  597. package/src/components/stat-tile.tsx +0 -725
  598. package/src/components/status-dot.tsx +0 -170
  599. package/src/components/swatch-picker-labels.ts +0 -10
  600. package/src/components/swatch-picker.tsx +0 -283
  601. package/src/components/swipeable-row.tsx +0 -386
  602. package/src/components/switch.tsx +0 -273
  603. package/src/components/table-skeleton.tsx +0 -136
  604. package/src/components/table.tsx +0 -647
  605. package/src/components/tabs-labels.ts +0 -13
  606. package/src/components/tabs.tsx +0 -693
  607. package/src/components/text-link.tsx +0 -359
  608. package/src/components/text.tsx +0 -150
  609. package/src/components/textarea.tsx +0 -330
  610. package/src/components/tile-radio.tsx +0 -332
  611. package/src/components/time-input.tsx +0 -121
  612. package/src/components/toast-labels.ts +0 -12
  613. package/src/components/toast.tsx +0 -519
  614. package/src/components/toggle-group.tsx +0 -752
  615. package/src/components/toggle-legend.tsx +0 -394
  616. package/src/components/tooltip.tsx +0 -1149
  617. package/src/components/translation-review-editor.tsx +0 -290
  618. package/src/components/translation-review-labels.ts +0 -181
  619. package/src/components/translation-review-parts.tsx +0 -272
  620. package/src/components/translation-review.tsx +0 -1240
  621. package/src/components/tree-view.tsx +0 -589
  622. package/src/components/treemap-labels.ts +0 -47
  623. package/src/components/treemap-layout.ts +0 -210
  624. package/src/components/treemap.tsx +0 -1184
  625. package/src/components/trigger-aria.ts +0 -44
  626. package/src/components/use-anchor-dir.ts +0 -20
  627. package/src/components/use-mobile-reveal.ts +0 -62
  628. package/src/components/use-table-state.ts +0 -753
  629. package/src/components/user-avatar.tsx +0 -116
  630. package/src/components/wizard-stepper.tsx +0 -42
  631. package/src/components/write-lock-labels.ts +0 -10
  632. package/src/components/write-lock.tsx +0 -253
  633. package/src/currencies.ts +0 -70
  634. package/src/data-table.ts +0 -42
  635. package/src/demo/demo-banner.tsx +0 -153
  636. package/src/demo/demo-countdown.ts +0 -136
  637. package/src/demo/demo-ended.tsx +0 -90
  638. package/src/demo/demo-labels.ts +0 -78
  639. package/src/demo/demo-session.ts +0 -32
  640. package/src/demo/demo-start.tsx +0 -156
  641. package/src/eslint/index.ts +0 -161
  642. package/src/eslint/role-utilities.generated.ts +0 -146
  643. package/src/eslint/role-utilities.ts +0 -233
  644. package/src/feedback/feedback-attachment-download.tsx +0 -77
  645. package/src/feedback/feedback-attachment-labels.ts +0 -37
  646. package/src/feedback/feedback-attachment.tsx +0 -1239
  647. package/src/feedback/feedback-capture.ts +0 -287
  648. package/src/feedback/feedback-comment-thread.tsx +0 -353
  649. package/src/feedback/feedback-context-labels.ts +0 -10
  650. package/src/feedback/feedback-context.tsx +0 -213
  651. package/src/feedback/feedback-crash.ts +0 -547
  652. package/src/feedback/feedback-dialog-labels.ts +0 -29
  653. package/src/feedback/feedback-dialog.tsx +0 -440
  654. package/src/feedback/feedback-entry-file.tsx +0 -150
  655. package/src/feedback/feedback-inbox.tsx +0 -552
  656. package/src/feedback/feedback-labels.ts +0 -144
  657. package/src/feedback/feedback-menu-labels.ts +0 -12
  658. package/src/feedback/feedback-menu.tsx +0 -177
  659. package/src/feedback/feedback-mutation.ts +0 -20
  660. package/src/feedback/feedback-page-link.ts +0 -90
  661. package/src/feedback/feedback-public-labels.ts +0 -81
  662. package/src/feedback/feedback-public-list.tsx +0 -524
  663. package/src/feedback/feedback-public-switch.tsx +0 -102
  664. package/src/feedback/feedback-public-types.ts +0 -101
  665. package/src/feedback/feedback-record.ts +0 -423
  666. package/src/feedback/feedback-replies-context.ts +0 -9
  667. package/src/feedback/feedback-replies.tsx +0 -343
  668. package/src/feedback/feedback-rework-entry-chip.tsx +0 -18
  669. package/src/feedback/feedback-row-detail-labels.ts +0 -30
  670. package/src/feedback/feedback-row-detail.tsx +0 -858
  671. package/src/feedback/feedback-status-undo.ts +0 -109
  672. package/src/feedback/feedback-submit-dialog.tsx +0 -118
  673. package/src/feedback/feedback-submit.tsx +0 -237
  674. package/src/feedback/feedback-swipe.tsx +0 -192
  675. package/src/feedback/feedback-table-labels.ts +0 -27
  676. package/src/feedback/feedback-table.tsx +0 -912
  677. package/src/feedback/feedback-thread-labels.ts +0 -22
  678. package/src/feedback/feedback-thread-parts-labels.ts +0 -41
  679. package/src/feedback/feedback-thread.tsx +0 -905
  680. package/src/feedback/feedback-vocabulary.ts +0 -263
  681. package/src/feedback/feedback-vote-button.tsx +0 -124
  682. package/src/feedback.ts +0 -116
  683. package/src/hooks/use-anchored-panel.ts +0 -396
  684. package/src/hooks/use-anchored-rect.ts +0 -77
  685. package/src/hooks/use-announce.ts +0 -85
  686. package/src/hooks/use-authed-src.ts +0 -167
  687. package/src/hooks/use-body-scroll-lock.ts +0 -119
  688. package/src/hooks/use-breakpoint.ts +0 -133
  689. package/src/hooks/use-close-transition.ts +0 -107
  690. package/src/hooks/use-copy-to-clipboard.ts +0 -122
  691. package/src/hooks/use-debounce.ts +0 -114
  692. package/src/hooks/use-dismiss.ts +0 -371
  693. package/src/hooks/use-document-title.ts +0 -33
  694. package/src/hooks/use-file-drop.ts +0 -121
  695. package/src/hooks/use-file-picker-labels.ts +0 -28
  696. package/src/hooks/use-file-picker.tsx +0 -359
  697. package/src/hooks/use-focus-trap.ts +0 -199
  698. package/src/hooks/use-hotkey.ts +0 -189
  699. package/src/hooks/use-large-text.ts +0 -41
  700. package/src/hooks/use-long-press.ts +0 -140
  701. package/src/hooks/use-media-query.ts +0 -39
  702. package/src/hooks/use-mounted.ts +0 -39
  703. package/src/hooks/use-noindex.ts +0 -37
  704. package/src/hooks/use-overlay-history.ts +0 -714
  705. package/src/hooks/use-row-swipe.ts +0 -207
  706. package/src/hooks/use-search-param-state.ts +0 -434
  707. package/src/hooks/use-windowed-rows.ts +0 -225
  708. package/src/i18n/defaults.ts +0 -267
  709. package/src/i18n/german.ts +0 -2057
  710. package/src/i18n/kit-labels.tsx +0 -1003
  711. package/src/i18n/languages.ts +0 -349
  712. package/src/i18n/locales/de-CH.ts +0 -24
  713. package/src/i18n/locales/en.ts +0 -267
  714. package/src/i18n/locales/es.ts +0 -1997
  715. package/src/i18n/locales/fr.ts +0 -2035
  716. package/src/i18n/locales/hu.ts +0 -2002
  717. package/src/i18n/locales/it.ts +0 -2012
  718. package/src/i18n/locales/zh.ts +0 -1910
  719. package/src/i18n/plurals.ts +0 -86
  720. package/src/i18n/review.ts +0 -475
  721. package/src/i18n/shared-labels.ts +0 -138
  722. package/src/i18n/swiss.ts +0 -29
  723. package/src/index.ts +0 -1179
  724. package/src/landing/access.ts +0 -93
  725. package/src/landing/landing-actions.tsx +0 -97
  726. package/src/landing/landing-labels.ts +0 -59
  727. package/src/landing/landing-sections.tsx +0 -341
  728. package/src/landing/page-seo.ts +0 -261
  729. package/src/landing/public-header.tsx +0 -121
  730. package/src/landing/public-page.tsx +0 -106
  731. package/src/landing/routing.tsx +0 -225
  732. package/src/lib/broadcast.ts +0 -52
  733. package/src/lib/calc.ts +0 -323
  734. package/src/lib/chip-edge-snap.ts +0 -212
  735. package/src/lib/clipboard-minus.ts +0 -107
  736. package/src/lib/clipping.ts +0 -34
  737. package/src/lib/cn.ts +0 -28
  738. package/src/lib/column-mapping.ts +0 -234
  739. package/src/lib/countries.ts +0 -91
  740. package/src/lib/data-attributes.ts +0 -14
  741. package/src/lib/date-format.ts +0 -227
  742. package/src/lib/dates.ts +0 -266
  743. package/src/lib/day-format.ts +0 -96
  744. package/src/lib/decimal-marks.ts +0 -108
  745. package/src/lib/describe-failure.ts +0 -18
  746. package/src/lib/device-settings.ts +0 -147
  747. package/src/lib/direction.ts +0 -74
  748. package/src/lib/document-navigation.ts +0 -17
  749. package/src/lib/document-title.ts +0 -41
  750. package/src/lib/download.ts +0 -172
  751. package/src/lib/float-clearance.ts +0 -70
  752. package/src/lib/floating-stack.ts +0 -70
  753. package/src/lib/focus-left.ts +0 -156
  754. package/src/lib/format.ts +0 -522
  755. package/src/lib/http-status.ts +0 -38
  756. package/src/lib/iban.ts +0 -251
  757. package/src/lib/ime.ts +0 -24
  758. package/src/lib/intl-cache.ts +0 -25
  759. package/src/lib/iso-day.ts +0 -13
  760. package/src/lib/lazy-with-fallback.ts +0 -82
  761. package/src/lib/logger.ts +0 -69
  762. package/src/lib/minus.ts +0 -50
  763. package/src/lib/path-pattern.ts +0 -55
  764. package/src/lib/person-name.ts +0 -155
  765. package/src/lib/phone.ts +0 -208
  766. package/src/lib/plain-text.ts +0 -22
  767. package/src/lib/presence.ts +0 -18
  768. package/src/lib/qr-encode.ts +0 -444
  769. package/src/lib/quiet-focus.ts +0 -32
  770. package/src/lib/reduced-motion.ts +0 -22
  771. package/src/lib/refs.ts +0 -22
  772. package/src/lib/round.ts +0 -43
  773. package/src/lib/safe-storage.ts +0 -119
  774. package/src/lib/server-wake.ts +0 -315
  775. package/src/lib/session-refresh.ts +0 -472
  776. package/src/lib/share-format.ts +0 -18
  777. package/src/lib/status-tone.ts +0 -43
  778. package/src/lib/strip-fade.ts +0 -287
  779. package/src/lib/table-text.ts +0 -554
  780. package/src/lib/text-case.ts +0 -19
  781. package/src/lib/text-match.ts +0 -169
  782. package/src/lib/thenable.ts +0 -19
  783. package/src/lib/translation-review.ts +0 -717
  784. package/src/notifications/device-zone-report.ts +0 -67
  785. package/src/notifications/feedback-notification-types-labels.ts +0 -33
  786. package/src/notifications/feedback-notification-types.ts +0 -71
  787. package/src/notifications/notification-bell.tsx +0 -119
  788. package/src/notifications/notification-inbox.tsx +0 -309
  789. package/src/notifications/notification-parts.tsx +0 -81
  790. package/src/notifications/notification-types-setting.tsx +0 -406
  791. package/src/notifications/notification-types.ts +0 -89
  792. package/src/notifications/notifications-labels.ts +0 -287
  793. package/src/notifications/push-device-setting.tsx +0 -230
  794. package/src/notifications/push-devices-setting.tsx +0 -374
  795. package/src/notifications/push-worker.ts +0 -168
  796. package/src/notifications/quiet-hours-setting.tsx +0 -238
  797. package/src/notifications/unsubscribe-panel.tsx +0 -200
  798. package/src/notifications/use-push-device.ts +0 -448
  799. package/src/offline/local-first.ts +0 -100
  800. package/src/offline/pwa-update-prompt-labels.ts +0 -9
  801. package/src/offline/pwa-update-prompt.tsx +0 -78
  802. package/src/offline/query-persistence.ts +0 -391
  803. package/src/offline/service-worker-updates.ts +0 -81
  804. package/src/offline/shared-computer-labels.ts +0 -8
  805. package/src/offline/shared-computer.tsx +0 -87
  806. package/src/offline/sign-out-pending-dialog-labels.ts +0 -21
  807. package/src/offline/sign-out-pending-dialog.tsx +0 -135
  808. package/src/offline.ts +0 -37
  809. package/src/push-worker.ts +0 -25
  810. package/src/rhf/fields.tsx +0 -2187
  811. package/src/rhf/form-core.tsx +0 -324
  812. package/src/rhf/form.tsx +0 -12
  813. package/src/rhf/line-items.tsx +0 -135
  814. package/src/rhf/use-rhf-wizard-step.ts +0 -104
  815. package/src/rhf.ts +0 -21
  816. package/src/search/command-palette-labels.ts +0 -16
  817. package/src/search/command-palette.tsx +0 -624
  818. package/src/search/global-search-labels.ts +0 -13
  819. package/src/search/global-search.tsx +0 -660
  820. package/src/search/search-index.ts +0 -283
  821. package/src/search/use-command-key.ts +0 -23
  822. package/src/search.ts +0 -14
  823. package/src/settings/device-reset-setting-labels.ts +0 -20
  824. package/src/settings/device-reset-setting.tsx +0 -116
  825. package/src/settings/settings-card-classes.ts +0 -11
  826. package/src/settings/settings-catalogue.ts +0 -150
  827. package/src/settings/settings-context.ts +0 -33
  828. package/src/settings/settings-heading.tsx +0 -67
  829. package/src/settings/settings-labels.ts +0 -87
  830. package/src/settings/settings-layout.tsx +0 -471
  831. package/src/settings/settings-section.tsx +0 -108
  832. package/src/settings/use-account-appearance.ts +0 -148
  833. package/src/settings/use-account-language.ts +0 -146
  834. package/src/settings/use-settings-focus.ts +0 -128
  835. package/src/settings/use-settings-route.ts +0 -258
  836. package/src/shell/account-menu-language.tsx +0 -130
  837. package/src/shell/account-menu-text-size.tsx +0 -80
  838. package/src/shell/admin-menu.tsx +0 -183
  839. package/src/shell/app-shell-labels.ts +0 -11
  840. package/src/shell/app-shell.tsx +0 -1560
  841. package/src/shell/auth-layout.tsx +0 -186
  842. package/src/shell/company-switcher-labels.ts +0 -13
  843. package/src/shell/company-switcher.tsx +0 -136
  844. package/src/shell/dev-menu.tsx +0 -257
  845. package/src/shell/fill-height.tsx +0 -45
  846. package/src/shell/language-code.ts +0 -5
  847. package/src/shell/option-switcher-menu.tsx +0 -84
  848. package/src/shell/sync-status-indicator.tsx +0 -303
  849. package/src/shell/top-bar-actions.tsx +0 -87
  850. package/src/shell/top-bar-brand.tsx +0 -78
  851. package/src/shell/top-bar-parts-labels.ts +0 -148
  852. package/src/shell/top-bar.tsx +0 -40
  853. package/src/shell/topbar-action-menu.tsx +0 -567
  854. package/src/shell/topbar-controls.tsx +0 -269
  855. package/src/shell/tour-menu.tsx +0 -187
  856. package/src/shell.ts +0 -108
  857. package/src/sync/db.ts +0 -129
  858. package/src/sync/engine.ts +0 -1011
  859. package/src/sync/hooks.ts +0 -98
  860. package/src/sync/testing.ts +0 -73
  861. package/src/sync/wire.ts +0 -61
  862. package/src/sync.ts +0 -37
  863. package/src/table-text.ts +0 -8
  864. package/src/testing/css-variables.generated.ts +0 -112
  865. package/src/testing/css-variables.ts +0 -189
  866. package/src/testing/index.ts +0 -29
  867. package/src/testing/react.ts +0 -58
  868. package/src/testing/tour.ts +0 -41
  869. package/src/testing/viewport.ts +0 -357
  870. package/src/theme/chart-palette.ts +0 -232
  871. package/src/theme/color.ts +0 -272
  872. package/src/theme/contrast-tokens.ts +0 -268
  873. package/src/theme/contrast.ts +0 -250
  874. package/src/theme/palette-derive.ts +0 -825
  875. package/src/theme/palette-presets.ts +0 -544
  876. package/src/theme/palette-store.ts +0 -108
  877. package/src/theme/text-size.ts +0 -289
  878. package/src/theme/theme-store.ts +0 -157
  879. package/src/tour/tour-catalogue-labels.ts +0 -75
  880. package/src/tour/tour-catalogue.tsx +0 -335
  881. package/src/tour/tour-dock.ts +0 -134
  882. package/src/tour/tour-engine.ts +0 -37
  883. package/src/tour/tour-gates.ts +0 -218
  884. package/src/tour/tour-guide-button.tsx +0 -64
  885. package/src/tour/tour-guide-labels.ts +0 -15
  886. package/src/tour/tour-info.ts +0 -144
  887. package/src/tour/tour-labels.ts +0 -23
  888. package/src/tour/tour-overlay.tsx +0 -1170
  889. package/src/tour/tour.tsx +0 -750
  890. package/src/tour/use-tour-progress.ts +0 -671
  891. package/src/tour/use-tour-url-sync.ts +0 -266
  892. package/src/tour.ts +0 -21
  893. package/src/vite-env.d.ts +0 -23
  894. package/src/wizard/stepper-nav.tsx +0 -360
  895. package/src/wizard/types.ts +0 -275
  896. package/src/wizard/use-wizard.ts +0 -560
  897. package/src/wizard/validation.ts +0 -39
  898. package/src/wizard/wizard-context.tsx +0 -74
  899. package/src/wizard/wizard-labels.ts +0 -29
  900. package/src/wizard/wizard-step.tsx +0 -76
  901. package/src/wizard/wizard-summary.tsx +0 -84
  902. 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
- }