@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,559 +0,0 @@
1
- import { useId, useRef, useState } from "react";
2
- import type { ComponentPropsWithRef, MouseEvent, ReactNode } from "react";
3
- import { Upload, X } from "lucide-react";
4
- import { Button } from "./button";
5
- import { IconButton } from "./icon-button";
6
- import { Spinner } from "./spinner";
7
- import { FIELD_ERROR_CLASS } from "./field-parts";
8
- import { cn } from "../lib/cn";
9
- import { hasContent } from "../lib/presence";
10
- import { useAnnounce } from "../hooks/use-announce";
11
- import { useKitFileLabels, useKitLabels, type LabelOverride } from "../i18n/kit-labels";
12
- // The picker's words and screening from their own modules, not through FileButton's
13
- // re-export (MOD-8): the dropzone renders no FileButton.
14
- import { DEFAULT_FILE_PICKER_LABELS } from "../hooks/use-file-picker-labels";
15
- import { formatAccept, judgePick, screenFiles, summariseRejections } from "../hooks/use-file-picker";
16
- import type { FilePickHandler, FilePickerLabels, FileRejection } from "../hooks/use-file-picker";
17
- import { useDragTarget } from "../hooks/use-file-drop";
18
- import { toast } from "./toast";
19
- import { useCommitReason, type CommitScope } from "./write-lock";
20
-
21
- /**
22
- * Where a refused file's message goes.
23
- *
24
- * - `"toast"` — a `sonner` toast (the 0.5 behaviour, kept as the default for a caller
25
- * that handles nothing itself so no existing dropzone goes quiet on upgrade).
26
- * - `"inline"` — under the drop target, in the danger colour, tied to it with
27
- * `aria-describedby` (plus `data-invalid` for styling), and spoken through a live
28
- * region. Cleared by the next accepted pick.
29
- * - `"none"` — nothing visible; the caller shows it from `onReject` / `onInvalid`.
30
- * Still spoken, so a host rendering it should not ALSO make it `role="alert"`.
31
- */
32
- export type FileDropzoneRejectionFeedback = "toast" | "inline" | "none";
33
-
34
- /** What a custom {@link FileDropzoneProps.renderBody} is handed. */
35
- export interface FileDropzoneState {
36
- /** A file drag is over the zone right now. */
37
- dragOver: boolean;
38
- disabled: boolean;
39
- busy: boolean;
40
- /** 0.22: locked with a reason (`disabledReason`, or `commit` under a locked
41
- * {@link WriteLockProvider}) — takes no files, like `disabled`. */
42
- locked: boolean;
43
- /** The reason while `locked`, for a custom body to show; `undefined` otherwise. */
44
- disabledReason: ReactNode | undefined;
45
- /** What is chosen: `files` in multiple mode, `[file]` or `[]` in single mode. */
46
- files: readonly File[];
47
- /** The inline refusal, when `rejectionFeedback="inline"` has one to show. */
48
- error: string | null;
49
- /** Open the system picker — for a body that brings its own trigger (a second
50
- * "Take photo" button). Does nothing while `disabled` or `busy`. */
51
- open: () => void;
52
- /** The resolved `filePicker` strings, so a custom body speaks the same language. */
53
- labels: FilePickerLabels;
54
- }
55
-
56
- /**
57
- * `onInvalid` is omitted from the `<div>` attributes and kept as this component's own.
58
- * The DOM event of that name belongs to form validation and takes a `FormEvent`; this
59
- * one takes the rejected `File`, and the kit's meaning is the one every caller already
60
- * writes. Everything else a `<div>` takes reaches the root — which carries
61
- * `role="group"` named by `dropLabel`, so that is also where an `aria-label` or an
62
- * `aria-describedby` belongs.
63
- *
64
- * Two modes. SINGLE (the default, and all of 0.5): `file` + `onFileSelected`. MULTIPLE
65
- * (`multiple`): `files` + `onFilesSelected`. They are optional rather than a union so
66
- * `FileDropzoneProps` stays an interface a caller can extend; a single-mode pick also
67
- * reaches `onFilesSelected` as a one-element array, so one handler can serve both.
68
- */
69
- export interface FileDropzoneProps extends Omit<ComponentPropsWithRef<"div">, "onInvalid"> {
70
- /** Single mode: the chosen file, echoed with its size. */
71
- file?: File | null;
72
- /** Single mode: called with the accepted file. */
73
- onFileSelected?: (file: File) => void;
74
- /** Take several files per pick or drop. Without it a drop of several keeps the first. */
75
- multiple?: boolean;
76
- /** Multiple mode: the chosen files, listed in the zone. */
77
- files?: readonly File[];
78
- /** Every accepted file of one pick, in order. Never called with an empty array. */
79
- onFilesSelected?: (files: File[]) => void;
80
- /**
81
- * Show a remove button inside the zone once something is chosen (kastlan asked for
82
- * it: the only way to un-choose a file was to reload). Single mode: removes the file.
83
- * Multiple mode: a "remove all" button. The host clears its own state here — the
84
- * zone is controlled. Focus moves to the Browse button, and the removal is announced.
85
- */
86
- onClear?: () => void;
87
- /** Multiple mode: a remove button per listed file. */
88
- onRemove?: (file: File, index: number) => void;
89
- accept: string;
90
- /**
91
- * The caller's check. Optional since 0.6: without it the zone checks `accept` itself
92
- * (a drop ignores the dialog's filter). With it, `accept` is NOT re-checked — every
93
- * 0.5 caller's `isValid` is its own type check, and doubling it could refuse a file
94
- * the caller accepts (a `.zip` the OS labelled `application/octet-stream`).
95
- */
96
- isValid?: (file: File) => boolean;
97
- /** The message for an `isValid` refusal. Defaults to `labels.rejectedInvalid`. */
98
- invalidMessage?: string;
99
- /** Bytes; larger files are refused. */
100
- maxSize?: number;
101
- /** Multiple mode: files one pick may add. Pass what is LEFT for a running cap. */
102
- maxFiles?: number;
103
- /**
104
- * Called once per refused file. The 0.5 hook, kept as it was; {@link onReject}
105
- * carries the reason and the translated message as well.
106
- *
107
- * Its existence used to be what switched the toast off, and it still does (see
108
- * {@link rejectionFeedback}). The toast is the kit's `toast`, which loads `sonner`
109
- * lazily: it is an OPTIONAL peer, and a static import here once broke
110
- * `import { Button }` for every app without it (see `optional-peer-imports.test.tsx`).
111
- */
112
- onInvalid?: (file: File) => void;
113
- /** Every refused file of one pick, with its reason and message. */
114
- onReject?: (rejections: FileRejection[]) => void;
115
- /** The whole pick at once, before any of the above — return `false` to refuse all
116
- * of it (see {@link FilePickHandler}). A refused pick selects nothing; its one
117
- * message (`labels.rejectedPick`) goes where `rejectionFeedback` says. */
118
- onPick?: FilePickHandler;
119
- /** See {@link FileDropzoneRejectionFeedback}. Defaults to `"toast"` when neither
120
- * `onInvalid` nor `onReject` is given, `"none"` when one is. */
121
- rejectionFeedback?: FileDropzoneRejectionFeedback;
122
- /** Per-instance overrides of the `filePicker` label namespace. */
123
- labels?: LabelOverride<FilePickerLabels>;
124
- /** The dropzone's accessible name. A caller's own `aria-label` wins over it — see
125
- * the root element below. Optional since 0.8, like the three below: each falls back
126
- * to its `filePicker` string from `<UiKitProvider labels>`, then to English. They
127
- * were required, so every call site passed four strings through `t()` by hand, and a
128
- * zone nested in a kit component (the feedback form) had no call site to pass them. */
129
- dropLabel?: string;
130
- /** Default `filePicker.browse`. */
131
- browseLabel?: string;
132
- /** What the zone says while nothing is chosen. Default `filePicker.empty` /
133
- * `emptyMultiple`. */
134
- emptyLabel?: string;
135
- /** The second line, e.g. what may be dropped. Default `filePicker.hint(accept)`. */
136
- hint?: string;
137
- /**
138
- * Not taking files: no drop, no picker, no remove buttons; `aria-disabled` on the
139
- * group. keksdose locks its invoice zone while another form holds unsaved changes,
140
- * and hand-rolled the whole zone to be able to (invoice-upload.tsx, "Locked").
141
- */
142
- disabled?: boolean;
143
- /**
144
- * Working on what it was given — an upload, an OCR pass. Inert like `disabled`, plus
145
- * `aria-busy`, a spinner in place of the upload icon, and `filePicker.busy` as the
146
- * text. The other half of why keksdose's invoice zone was hand-rolled.
147
- */
148
- busy?: boolean;
149
- /**
150
- * Why the zone is not taking files — the write lock's sentence, a quota, a closed
151
- * period (keksdose K3). Takes no drop, no picker and no removal, like `disabled`, and
152
- * SAYS so: the Browse button (and every remove button) stays focusable,
153
- * `aria-disabled`, with the reason in the kit Tooltip and its description, the zone's
154
- * group is described by it, and the default body shows it where the hint was. Not
155
- * dimmed: what is chosen stays readable. Wins over `disabled`'s silent look.
156
- */
157
- disabledReason?: ReactNode;
158
- /**
159
- * This zone COMMITS — an upload that starts on drop. Under a locked
160
- * {@link WriteLockProvider} it takes the `disabledReason` path with the lock's
161
- * reason (which wins over one of its own). No provider, or an unlocked one: no
162
- * effect. A zone that only stages a file for a form saved later is not a commit.
163
- */
164
- commit?: CommitScope;
165
- /**
166
- * Replace the zone's body — the icon, the text and the chosen-file list — with your
167
- * own, given the zone's state: keksdose's spinner-plus-"uploading", its multi-shot
168
- * hint ("several photos are possible"), a second trigger for the camera.
169
- *
170
- * The Browse button, the inline error and the live regions stay: Browse is the
171
- * keyboard path, and a body that forgot it would leave the zone unreachable without
172
- * a pointer. A click on a control inside the body does not also open the picker.
173
- */
174
- renderBody?: (state: FileDropzoneState) => ReactNode;
175
- /** Extra classes for the dropzone's root. */
176
- className?: string;
177
- }
178
-
179
- /** Drag-and-drop file picker shared by the import wizards (YNAB zip, CAMT xml) and
180
- * kastlan's document forms. Refusals go to `onReject`/`onInvalid` and to
181
- * `rejectionFeedback`; the chosen file(s) are echoed with their size, otherwise
182
- * `emptyLabel` + `hint` describe what to drop. For a trigger with no drop area, see
183
- * `FileButton`. */
184
- export function FileDropzone({
185
- file,
186
- onFileSelected,
187
- multiple,
188
- files,
189
- onFilesSelected,
190
- onClear,
191
- onRemove,
192
- accept,
193
- isValid,
194
- invalidMessage,
195
- maxSize,
196
- maxFiles,
197
- onInvalid,
198
- onReject,
199
- onPick,
200
- rejectionFeedback,
201
- labels: labelsProp,
202
- dropLabel: dropLabelProp,
203
- browseLabel: browseLabelProp,
204
- emptyLabel: emptyLabelProp,
205
- hint: hintProp,
206
- disabled,
207
- busy,
208
- disabledReason: ownDisabledReason,
209
- commit,
210
- renderBody,
211
- className,
212
- "aria-label": ariaLabel,
213
- "aria-describedby": describedByProp,
214
- ...rest
215
- }: FileDropzoneProps) {
216
- const [error, setError] = useState<string | null>(null);
217
- const disabledReason = useCommitReason(commit, ownDisabledReason);
218
- const locked = hasContent(disabledReason);
219
- // Locked counts as inert for every file path (drop, click, Browse, remove); only the
220
- // LOOK and the native `disabled` keep it apart, so its controls stay focusable.
221
- const inert = Boolean(disabled || busy) || locked;
222
- const reasonId = useId();
223
- // State rather than a ref: `open` is handed to `renderBody` during render, and a
224
- // function that reads a ref there is exactly what the refs rule cannot prove safe.
225
- const [fileInput, setFileInput] = useState<HTMLInputElement | null>(null);
226
- const browseRef = useRef<HTMLButtonElement>(null);
227
- const errorId = useId();
228
- // The size through the kit's `file.size` label (the provider's locale by default).
229
- // This was `${n / 1024} KB`: ASCII digits, an English unit, and a binary kilobyte
230
- // mislabelled as a decimal one, all in one template literal.
231
- const fileText = useKitFileLabels();
232
- const labels = useKitLabels("filePicker", DEFAULT_FILE_PICKER_LABELS, labelsProp);
233
- // Two regions, two urgencies: a pick or a removal is news, a refusal is a failure.
234
- // The echoed file name is only text in the zone, and text changing somewhere on the
235
- // page is not announced by itself.
236
- const status = useAnnounce();
237
- const alert = useAnnounce({ politeness: "assertive" });
238
- const feedback: FileDropzoneRejectionFeedback = rejectionFeedback ?? (onInvalid || onReject ? "none" : "toast");
239
- const dropLabel = dropLabelProp ?? labels.dropzone;
240
- const browseLabel = browseLabelProp ?? labels.browse;
241
- const emptyLabel = emptyLabelProp ?? (multiple ? labels.emptyMultiple : labels.empty);
242
- const hint = hintProp ?? labels.hint(formatAccept(accept));
243
-
244
- const acceptFiles = (list: ArrayLike<File> | null | undefined) => {
245
- if (inert || !list || list.length === 0) return;
246
- const all = Array.from(list);
247
- const picked = multiple ? all : all.slice(0, 1);
248
- const { accepted, rejected } = screenFiles(
249
- picked,
250
- {
251
- accept: isValid ? undefined : accept,
252
- maxSize,
253
- maxFiles: multiple ? maxFiles : undefined,
254
- isValid,
255
- invalidMessage,
256
- },
257
- labels,
258
- fileText.size,
259
- );
260
- const stands = judgePick(onPick, accepted, rejected);
261
- if (stands && accepted.length > 0) {
262
- setError(null);
263
- if (multiple) {
264
- onFilesSelected?.(accepted);
265
- } else {
266
- onFileSelected?.(accepted[0]);
267
- onFilesSelected?.(accepted);
268
- }
269
- status.announce(labels.selected(accepted.length, accepted[0].name));
270
- }
271
- if (!stands || rejected.length > 0) {
272
- for (const r of rejected) onInvalid?.(r.file);
273
- if (rejected.length > 0) onReject?.(rejected);
274
- const message = stands ? summariseRejections(rejected, labels) : labels.rejectedPick(picked.length);
275
- if (feedback === "toast") {
276
- // The kit's `toast`, which loads sonner (an optional peer) lazily, so an app
277
- // that never trips this never has to install it. Nothing downstream depends
278
- // on the toast having appeared. The toaster is a live region, so this path
279
- // does not announce a second time.
280
- toast.error(message);
281
- } else {
282
- if (feedback === "inline") setError(message);
283
- alert.announce(message);
284
- }
285
- }
286
- };
287
-
288
- // The remove buttons unmount with the file they removed, and focus would fall to
289
- // <body>. Browse is where the next action (pick again) starts.
290
- const afterRemoval = (message: string) => {
291
- browseRef.current?.focus();
292
- status.announce(message);
293
- };
294
-
295
- // The enter/leave counter lives in the shared hook: the boolean this was flickered
296
- // across every child of the zone in Safari, whose drag events carry no
297
- // `relatedTarget` to tell a move onto a child from a real leave.
298
- const { dropProps, isOver: dragOver } = useDragTarget<HTMLDivElement>({
299
- disabled: inert,
300
- onDropFiles: acceptFiles,
301
- });
302
- const open = () => {
303
- if (!inert) fileInput?.click();
304
- };
305
-
306
- const chosen: readonly File[] = multiple ? (files ?? []) : file ? [file] : [];
307
- const showError = feedback === "inline" && error !== null;
308
- const describedBy = cn(describedByProp, showError && errorId, locked && reasonId) || undefined;
309
- // The controls inside: natively disabled while disabled or busy; locked, they take
310
- // the reason instead and stay reachable (Button's `disabledReason` path).
311
- const controlDisabled = Boolean(disabled || busy);
312
- const controlReason = locked ? disabledReason : undefined;
313
- const reasonLine = locked && (
314
- <div data-slot="file-dropzone-reason" className="text-xs text-muted">
315
- {disabledReason}
316
- </div>
317
- );
318
-
319
- return (
320
- <>
321
- {/* A named group, NOT a `role="button"`. It was one, with real buttons (Browse,
322
- the remove buttons) inside it: nested interactive controls, which ARIA forbids
323
- because a button's children are presentational — a screen reader either read
324
- the zone as one opaque button or skipped the inner ones, and the zone was an
325
- extra Tab stop that did what Browse does. Now the keyboard path is Browse, a
326
- real button; the zone keeps its drop target and its click-anywhere for a
327
- pointer, which is a convenience on top of Browse rather than the only way in. */}
328
- {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-noninteractive-element-interactions -- the click is a pointer shortcut for Browse, see above */}
329
- <div
330
- // `...rest` first: every handler below is the drop gesture itself.
331
- {...rest}
332
- {...dropProps}
333
- // Pointer only; every control inside stops its own click from reaching here
334
- // (and one in a custom body is skipped below). The keyboard equivalent is the
335
- // Browse button, so no key handler belongs on a group.
336
- onClick={(e) => {
337
- if (fromControl(e)) return;
338
- open();
339
- }}
340
- role="group"
341
- // The DOM spelling wins over `dropLabel`, which stays the name for every caller
342
- // that passes no `aria-label` — i.e. all of them today. Standardising on
343
- // `aria-label` (audit §api-design) does not get to silently rename an existing
344
- // required prop.
345
- aria-label={ariaLabel ?? dropLabel}
346
- // No `aria-invalid`: ARIA does not allow it on `role="group"`. The message is
347
- // reached through the description instead, and spoken when it appears.
348
- aria-describedby={describedBy}
349
- data-invalid={showError || undefined}
350
- aria-disabled={disabled || locked || undefined}
351
- aria-busy={busy || undefined}
352
- data-drag-over={dragOver || undefined}
353
- className={cn(
354
- // `relative` is load-bearing, not cosmetic. The file input below is `sr-only`,
355
- // which Tailwind implements as `position: absolute` — so without a positioned
356
- // ancestor its containing block is the INITIAL one, and it is laid out at its
357
- // own offset from the top of the document. Nothing looks wrong, because the
358
- // input is 1x1 and clipped; what breaks is the page height. On a long page
359
- // every escaped sr-only element extends `documentElement.scrollHeight` to its
360
- // own offset, which produces a second, whole-document scrollbar alongside the
361
- // app shell's own — one that scrolls past the end of the content into nothing.
362
- // Measured on the showcase: body 900px, document 47,919px.
363
- "relative flex flex-col items-center justify-center gap-2 rounded-md border-2 border-dashed px-4 py-6 text-center transition-colors",
364
- // Three states out of two border tokens: the target rests on the plain
365
- // hairline, hover pulls it to `--border-strong`, and a live drag keeps that
366
- // border and adds the `--bg-active` wash on top — so "let go here" still reads
367
- // one step louder than "you are over it". A refusal shown inline takes the
368
- // danger border until the next good pick.
369
- // Inert zones keep the resting hairline and lose the hover pull: a border that
370
- // answers the pointer promises a drop the zone will refuse.
371
- disabled
372
- ? "cursor-not-allowed border-subtle opacity-60"
373
- : busy
374
- ? "cursor-progress border-subtle"
375
- : locked
376
- ? "cursor-not-allowed border-subtle"
377
- : dragOver
378
- ? "cursor-pointer border-strong bg-active"
379
- : showError
380
- ? "cursor-pointer border-danger-strong"
381
- : "cursor-pointer border-subtle hover:border-strong",
382
- className,
383
- )}
384
- >
385
- {renderBody ? (
386
- renderBody({
387
- dragOver,
388
- disabled: Boolean(disabled),
389
- busy: Boolean(busy),
390
- locked,
391
- disabledReason: locked ? disabledReason : undefined,
392
- files: chosen,
393
- error: showError ? error : null,
394
- open,
395
- labels,
396
- })
397
- ) : busy ? (
398
- <>
399
- {/* `label={null}`: the zone is `aria-busy` and the line below says the
400
- same in words; a spoken "Loading" would only run into it. */}
401
- <Spinner label={null} className="size-5" />
402
- <div className="text-sm text-secondary">{labels.busy}</div>
403
- </>
404
- ) : (
405
- <>
406
- <Upload aria-hidden className="size-5 text-muted" />
407
- {multiple && chosen.length > 0 ? (
408
- <>
409
- <ul className="flex w-full max-w-sm flex-col gap-1 text-start">
410
- {chosen.map((f, i) => (
411
- <li
412
- // Name + size + position: two files may share a name, and the index
413
- // alone would re-key every row below a removal.
414
- key={`${f.name}-${f.size}-${i}`}
415
- className="flex items-center gap-2 text-sm text-secondary"
416
- >
417
- <span className="min-w-0 flex-1 truncate font-medium">{f.name}</span>
418
- <span className="shrink-0 text-xs text-muted">{fileText.size(f.size)}</span>
419
- {onRemove && (
420
- <IconButton
421
- type="button"
422
- size="sm"
423
- disabled={controlDisabled}
424
- disabledReason={controlReason}
425
- aria-label={labels.remove(f.name)}
426
- onClick={(e) => {
427
- e.stopPropagation();
428
- onRemove(f, i);
429
- afterRemoval(labels.removed(f.name));
430
- }}
431
- >
432
- <X aria-hidden />
433
- </IconButton>
434
- )}
435
- </li>
436
- ))}
437
- </ul>
438
- {reasonLine}
439
- </>
440
- ) : (
441
- <>
442
- <div className="flex items-center gap-1 text-sm text-secondary">
443
- {/* `!multiple`: in multiple mode an empty `files` list is "nothing chosen",
444
- whatever a stray `file` prop says — it used to show that file's name. */}
445
- {!multiple && file ? <span className="font-medium">{file.name}</span> : emptyLabel}
446
- {!multiple && file && onClear && (
447
- <IconButton
448
- type="button"
449
- size="sm"
450
- disabled={controlDisabled}
451
- disabledReason={controlReason}
452
- aria-label={labels.remove(file.name)}
453
- onClick={(e) => {
454
- e.stopPropagation();
455
- onClear();
456
- afterRemoval(labels.removed(file.name));
457
- }}
458
- >
459
- <X aria-hidden />
460
- </IconButton>
461
- )}
462
- </div>
463
- {/* Locked, the reason takes the hint's place: what may be dropped is moot
464
- while nothing may. A chosen file keeps its size, the reason below. */}
465
- {locked && !(file && !multiple) ? (
466
- reasonLine
467
- ) : (
468
- <div className="text-xs text-muted">{file && !multiple ? fileText.size(file.size) : hint}</div>
469
- )}
470
- {locked && file && !multiple && reasonLine}
471
- </>
472
- )}
473
- </>
474
- )}
475
- <div className="flex flex-wrap items-center justify-center gap-2">
476
- <Button
477
- ref={browseRef}
478
- type="button"
479
- variant="secondary"
480
- disabled={controlDisabled}
481
- disabledReason={controlReason}
482
- onClick={(e) => {
483
- e.stopPropagation();
484
- open();
485
- }}
486
- >
487
- {browseLabel}
488
- </Button>
489
- {multiple && chosen.length > 0 && onClear && (
490
- <Button
491
- type="button"
492
- variant="ghost"
493
- disabled={controlDisabled}
494
- disabledReason={controlReason}
495
- onClick={(e) => {
496
- e.stopPropagation();
497
- onClear();
498
- afterRemoval(labels.cleared);
499
- }}
500
- >
501
- {labels.clearAll}
502
- </Button>
503
- )}
504
- </div>
505
- {showError && (
506
- // Every field's error type (DUP-8: this was `text-xs`); the zone's `gap-2`
507
- // spaces it, so not the class's own `mt-1` as well.
508
- <p id={errorId} className={cn(FIELD_ERROR_CLASS, "mt-0")}>
509
- {error}
510
- </p>
511
- )}
512
- {/* The group's description while locked: a copy of its own, so a custom body
513
- that does not show the reason still has the zone say it. */}
514
- {locked && (
515
- <span id={reasonId} hidden>
516
- {disabledReason}
517
- </span>
518
- )}
519
- <input
520
- ref={setFileInput}
521
- type="file"
522
- accept={accept}
523
- multiple={multiple}
524
- disabled={inert}
525
- onChange={(e) => {
526
- // Copy, THEN reset: `files` is a live view of the value, and without the
527
- // reset picking the same file a second time fires no `change` at all —
528
- // the retry after a failed upload silently did nothing (kastlan).
529
- const picked = Array.from(e.currentTarget.files ?? []);
530
- e.currentTarget.value = "";
531
- acceptFiles(picked);
532
- }}
533
- // Clicks are forwarded here programmatically; one reaching the zone's own
534
- // handler again would open the dialog a second time.
535
- onClick={(e) => e.stopPropagation()}
536
- className="sr-only"
537
- // Out of the tab order and the accessibility tree, as useFilePicker's: Browse
538
- // is the way in, and this was a second, nameless stop beside it (round 0.34,
539
- // the showcase's axe check).
540
- tabIndex={-1}
541
- aria-hidden
542
- />
543
- </div>
544
- {/* Outside the zone, where they have always been (the zone used to be a
545
- `role="button"`, whose content is presentational). `sr-only-fixed`, so they
546
- need no positioned ancestor. */}
547
- <span {...status.regionProps} />
548
- <span {...alert.regionProps} />
549
- </>
550
- );
551
- }
552
-
553
- /** A click that landed on a control inside the zone (a custom body's own button, a
554
- * link in the hint) is that control's, not a request to open the picker. */
555
- function fromControl(e: MouseEvent<HTMLElement>): boolean {
556
- const target = e.target as Element | null;
557
- const control = target?.closest?.("button, a[href], input, select, textarea, label, [role='button']");
558
- return Boolean(control && control !== e.currentTarget && e.currentTarget.contains(control));
559
- }
@@ -1,10 +0,0 @@
1
- // The English words of ./floating-panel, in a module with no component code: the English
2
- // catalogue (src/i18n/defaults.ts) imports them without the component, so `en` loads as one
3
- // chunk like the other languages (0.34, KS U8). ./floating-panel re-exports them.
4
-
5
- import type { FloatingPanelLabels } from "./floating-panel";
6
-
7
- export const DEFAULT_FLOATING_PANEL_LABELS: FloatingPanelLabels = {
8
- close: "Close",
9
- badge: (count) => `${count} new`,
10
- };