@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,1003 +0,0 @@
1
- import { createContext, useContext, useEffect, useMemo } from "react";
2
- import {
3
- DEFAULT_APP_SHELL_LABELS,
4
- DEFAULT_CALCULATOR_LABELS,
5
- DEFAULT_COMBOBOX_LABELS,
6
- DEFAULT_COMMON_LABELS,
7
- DEFAULT_CURRENCY_LABELS,
8
- DEFAULT_DATE_PICKER_LABELS,
9
- DEFAULT_FILE_LABELS,
10
- DEFAULT_MULTI_SELECT_LABELS,
11
- DEFAULT_PICKER_SHEET_LABELS,
12
- DEFAULT_SWIPEABLE_ROW_LABELS,
13
- DEFAULT_TOP_BAR_LABELS,
14
- formatFileSize,
15
- } from "./shared-labels";
16
- import type { AnchorHTMLAttributes, ReactElement, Ref } from "react";
17
- import type { ReactNode } from "react";
18
- import type { DataTableLabels } from "../components/data-table-labels";
19
- import type { MiniCalendarLabels, WeekDay } from "../components/mini-calendar";
20
- import type { CalendarHeatmapLabels } from "../components/calendar-heatmap";
21
- import type { PopoverLabels } from "../components/popover";
22
- import type { ChipInputLabels } from "../components/chip";
23
- import type { CharacterCountLabels, PasswordRevealLabels } from "../components/field-base";
24
- import type { TabsLabels } from "../components/tabs";
25
- import type { WizardLabels } from "../wizard/types";
26
- import type { TourLabels } from "../tour/tour";
27
- import type { TourCatalogueLabels } from "../tour/tour-catalogue-labels";
28
- import type { TourGuideLabels } from "../tour/tour-guide-labels";
29
- import type { CommandPaletteLabels } from "../search/command-palette";
30
- import type { GlobalSearchLabels } from "../search/global-search";
31
- import type { MonthPickerLabels } from "../components/month-picker";
32
- import type { PageContentsLabels } from "../components/page-contents";
33
- import type { SeriesChartLabels } from "../components/series-chart-labels";
34
- import type { PieChartLabels } from "../components/pie-chart-labels";
35
- import type { TreemapLabels } from "../components/treemap-labels";
36
- import type { SparklineLabels } from "../components/sparkline";
37
- import type { StatTileLabels } from "../components/stat-tile";
38
- import type { SignaturePadLabels } from "../components/signature-pad";
39
- import type { PasswordStrengthLabels } from "../components/password-strength";
40
- import type { DangerConfirmLabels } from "../components/danger-confirm";
41
- import type { SwatchPickerLabels } from "../components/swatch-picker";
42
- import type { IconPickerLabels } from "../components/icon-picker";
43
- import type { DialogFrameLabels } from "../components/dialog-frame";
44
- import type { FilePickerLabels } from "../components/file-button";
45
- import type { MeasuredGridLabels } from "../components/measured-grid";
46
- import type { FeedbackAttachmentFieldLabels } from "../feedback/feedback-attachment";
47
- import type { FeedbackDialogTextLabels } from "../feedback/feedback-dialog";
48
- import type { ChatComposerLabels, FeedbackThreadLabels } from "../feedback/feedback-thread";
49
- import type { FeedbackCategoryLabels, FeedbackStatusLabels, FeedbackToastLabels } from "../feedback/feedback-labels";
50
- import type { FeedbackMenuLabels } from "../feedback/feedback-menu";
51
- import type { FeedbackPublicLabels } from "../feedback/feedback-public-labels";
52
- import type { FeedbackNotificationTypesLabels } from "../notifications/feedback-notification-types-labels";
53
- import type { FeedbackContextLabels } from "../feedback/feedback-context";
54
- import type { FeedbackPageLabels } from "../feedback/feedback-table";
55
- import type { FeedbackDetailLabels } from "../feedback/feedback-row-detail";
56
- import type { FeedbackVoteLabels } from "../feedback/feedback-vote-button";
57
- import type { FeedbackCommentsLabels } from "../feedback/feedback-comment-thread";
58
- import type { FeedbackRepliesLabels } from "../feedback/feedback-replies";
59
- import type { AccountSettingsLabels } from "../account/account-settings-labels";
60
- import type { ConfirmDialogLabels } from "../components/confirm-dialog";
61
- import type { FloatingPanelLabels } from "../components/floating-panel";
62
- import type { CopyButtonLabels } from "../components/copy-button";
63
- import type { BulkActionBarLabels } from "../components/bulk-action-bar";
64
- import type { ListLabels } from "../components/list";
65
- import type { BreadcrumbsLabels } from "../components/breadcrumbs";
66
- import type { ToastLabels } from "../components/toast";
67
- import type { FormActionsLabels } from "../components/form-actions";
68
- import type { DescriptionListLabels } from "../components/description-list";
69
- import type { LineItemsLabels } from "../components/line-items";
70
- import type { ProgressBarLabels } from "../components/progress-bar";
71
- import type { SignedAmountLabels } from "../components/signed-amount";
72
- import type { ErrorBoundaryLabels } from "../components/error-boundary";
73
- import type { AuthedImageLabels } from "../components/authed-image";
74
- import type { ImageGridLabels } from "../components/image-grid";
75
- import type { LightboxLabels } from "../components/lightbox";
76
- import type { WriteLockLabels } from "../components/write-lock";
77
- import type { LegalLabels } from "../components/legal";
78
- import type { SignInLabels } from "../auth/sign-in-form";
79
- import type { RegisterLabels } from "../auth/register-form";
80
- import type { CompleteNameLabels } from "../auth/complete-name-dialog";
81
- import type { ForgotPasswordLabels } from "../auth/forgot-password-form";
82
- import type { ResetPasswordLabels } from "../auth/reset-password-form";
83
- import type { VerifyEmailLabels } from "../auth/verify-email";
84
- import type { NotFoundLabels } from "../auth/not-found-page";
85
- import type { AcceptInvitationLabels } from "../auth/accept-invitation";
86
- import type { CompanySwitcherLabels } from "../shell/company-switcher";
87
- import type { EmailChangeLabels } from "../account/email-change-setting";
88
- import type { SessionsLabels } from "../account/sessions-setting";
89
- import type { DeleteAccountLabels } from "../account/delete-account-setting";
90
- import type { DataExportLabels } from "../account/data-export-setting";
91
- import type { UserRosterLabels } from "../admin/user-roster";
92
- import type { RoleSelectLabels } from "../admin/role-select";
93
- import type { ReviewerScopeLabels } from "../admin/reviewer-scope-editor";
94
- import type { AdminActionLabels } from "../admin/admin-action-confirm";
95
- import type { AdminActionLogLabels } from "../admin/admin-action-log";
96
- import type { TransferOwnershipLabels } from "../admin/transfer-ownership-dialog";
97
- import type { InvitationsLabels } from "../admin/invitations-panel";
98
- import type { SettingsLabels } from "../settings/settings-labels";
99
- import type { LandingLabels } from "../landing/landing-labels";
100
- import type { DemoLabels } from "../demo/demo-labels";
101
- import type { BillingLabels } from "../billing/billing-labels";
102
- import type { PlanChangeLabels } from "../admin/plan-change";
103
- import type { AppearanceLabels } from "../components/appearance-labels";
104
- import type { DeviceResetLabels } from "../settings/device-reset-setting";
105
- import type { RowActionsLabels } from "../components/row-actions";
106
- import type { AppShellMoreLabels } from "../shell/app-shell";
107
- import type { AccountStateLabels } from "../components/account-chips";
108
- import type { ShareCardLabels } from "../components/share-card";
109
- import type { ReauthDialogLabels } from "../components/reauth-dialog";
110
- import type { ServerWakeLabels } from "../components/server-wake";
111
- import type { TranslationReviewLabels } from "../components/translation-review-labels";
112
- import type { CountrySelectLabels } from "../components/country-select";
113
- import type { InlineEditLabels } from "../components/inline-edit-field";
114
- import type { IbanInputLabels } from "../components/iban-input";
115
- import type { PhoneInputLabels } from "../components/phone-input";
116
- import type { ColumnMapperLabels } from "../components/column-mapper";
117
- import type { NotificationsLabels } from "../notifications/notifications-labels";
118
- import type { AdminAreaLabels } from "../admin/admin-area-labels";
119
- import type { MailTestCardLabels } from "../admin/mail-test-card";
120
- import type { TopBarPartsLabels } from "../shell/top-bar-parts-labels";
121
- import type { SignOutPendingDialogLabels } from "../offline/sign-out-pending-dialog";
122
- import type { PwaUpdatePromptLabels } from "../offline/pwa-update-prompt";
123
- import type { SharedComputerLabels } from "../offline/shared-computer";
124
-
125
- /**
126
- * EVERY string the kit renders, as one typed tree — and an optional provider that
127
- * hands it to every component at once.
128
- *
129
- * WHY THIS EXISTS. The kit renders only labels; it ships seven catalogues (since 0.7.0,
130
- * `@eifi1/ui-kit/i18n/<code>`); the app decides the language and hands the words in.
131
- * What was wrong was HOW it had to hand them in —
132
- * one `labels` prop per component instance, under a different prop name per
133
- * component (`labels`, `calendarLabels`, `passwordLabels`, `clearLabel`,
134
- * `searchPlaceholder`, `ariaLabel` …). A translated app therefore rendered English
135
- * wherever one call site forgot one prop, and nothing told it so: a German showcase
136
- * still said "Rows per page", "Collapse sidebar" and "Popover" in seven languages.
137
- *
138
- * Now there is one key per string, addressed by a dot path (`dataTable.pageSize`,
139
- * `datePicker.today`), and three sources in a fixed order of precedence:
140
- *
141
- * the component's own prop > <UiKitProvider labels> > English default
142
- *
143
- * A consumer loads a shipped catalogue (`loadUiKitLabels(code)`) or writes its own
144
- * `UiKitLabels` (or a partial of one), mounts `<UiKitProvider labels={…} locale={…}>`
145
- * at the root, and every kit component
146
- * below speaks that language — including the ones nested inside other kit components
147
- * (the calendar inside the data table's date filter, the popover inside the date
148
- * picker), which no prop at the outer call site could reach before.
149
- *
150
- * Messages that carry a value are FUNCTIONS of that value, never a template to fill:
151
- * a number glued into an English sentence is untranslatable, because the grammar
152
- * around it moves with it in most languages.
153
- */
154
-
155
- /* ── Namespaces that had no labels type of their own ─────────────────────── */
156
-
157
- /** The words several components share. A component's own namespace wins over these
158
- * where both exist; these are what a new component reaches for first. */
159
- export interface CommonLabels {
160
- close: string;
161
- clear: string;
162
- search: string;
163
- done: string;
164
- cancel: string;
165
- save: string;
166
- back: string;
167
- next: string;
168
- remove: string;
169
- loading: string;
170
- noResults: string;
171
- /** "Name: value" — how a field's accessible name is composed with its value.
172
- * A colon-and-space is not universal punctuation (French puts a space before
173
- * the colon, Chinese uses a full-width one). */
174
- fieldValue: (field: string, value: string) => string;
175
- /** The × that puts away a banner or a notice (`AlertBanner onDismiss`). Not `close`:
176
- * nothing opened, and "Close" on a banner reads as closing the page it sits on. */
177
- dismiss: string;
178
- /** Read after a link that opens a new tab (`<Button href external>`, TextLink):
179
- * nothing else tells a screen reader the page is about to change tabs. */
180
- opensInNewTab: string;
181
- /** The name of a field's `help` "?" and its panel (round 0.36): "About “<field>”", the
182
- * field's label as the argument, quoted so a capitalised label reads as a name — "About
183
- * “Jerk shape”" (round 0.37; the other locales quoted it already). A `HelpPopover`
184
- * passed as `help` keeps its own name. */
185
- aboutField: (field: string) => string;
186
- /** …and of a `help` "?" on a field with no label and no `aria-label` to name it by. */
187
- help: string;
188
- /** 0.48: the toggle that shows the rest of a clamped text (`AlertBanner clampMobile`)… */
189
- showMore: string;
190
- /** …and folds it back to its one line. */
191
- showLess: string;
192
- }
193
-
194
- /** `DatePicker` / `DateRangePicker` chrome. The calendar inside has its own
195
- * namespace, `miniCalendar`. */
196
- export interface DatePickerLabels {
197
- /** Accessible name of the popover panel the calendar opens in. */
198
- panel: string;
199
- /** The same, for `DateRangePicker`'s panel. */
200
- rangePanel: string;
201
- clear: string;
202
- previousDay: string;
203
- nextDay: string;
204
- today: string;
205
- /** `DateRangePicker apply`: the button that commits the drafted range. */
206
- apply: string;
207
- /** …and the one that discards it. */
208
- cancel: string;
209
- /** Accessible name of `DateRangePicker`'s preset column. */
210
- presets: string;
211
- }
212
-
213
- /** The whole combobox family: `Combobox`, `EntityCombobox`,
214
- * `MultiEntityCombobox`, `InlineEntityCombobox`, `Autocomplete`. */
215
- export interface ComboboxLabels {
216
- search: string;
217
- noResults: string;
218
- clear: string;
219
- loading: string;
220
- /** The "add this" row when free entry is allowed. */
221
- create: (query: string) => string;
222
- /** Trigger summary once more than one value is picked. */
223
- selectedCount: (count: number) => string;
224
- /** An async lookup (`loadOptions`) failed. */
225
- loadError: string;
226
- /** Announced (live region) when the list settles on `count` > 0 rows. */
227
- resultCount: (count: number) => string;
228
- /** The query is shorter than the `minChars` a lookup needs. */
229
- minChars: (count: number) => string;
230
- }
231
-
232
- export interface MultiSelectLabels {
233
- search: string;
234
- selectAll: string;
235
- clear: string;
236
- /** Trigger text when nothing is picked, which a multi-select reads as "all". */
237
- all: string;
238
- /** Trigger summary once some (but not all) values are picked. The English
239
- * default is the bare count, which is what the trigger has always shown. */
240
- selectedCount: (count: number) => string;
241
- }
242
-
243
- /** `CalculatorButton` (desktop popover keypad) and `NumberPadSheet` (phone sheet). */
244
- export interface CalculatorLabels {
245
- /** The button that opens the calculator. */
246
- open: string;
247
- /** The popover / sheet itself. */
248
- panel: string;
249
- calculation: string;
250
- backspace: string;
251
- clear: string;
252
- equals: string;
253
- /** The primary key of the phone pad — visible text, not an aria-label. */
254
- done: string;
255
- /** Names of the operator keys and the decimal key. Their glyphs are not names a
256
- * screen reader agrees on — "÷" is read as "division sign", "divided by" or
257
- * nothing at all depending on the reader — so each says what it does. */
258
- plus: string;
259
- minus: string;
260
- times: string;
261
- divide: string;
262
- decimal: string;
263
- }
264
-
265
- /** `CurrencySelect` and the currency half of `AmountInput`. */
266
- export interface CurrencyLabels {
267
- currency: string;
268
- search: string;
269
- }
270
-
271
- export interface AppShellLabels {
272
- collapse: string;
273
- expand: string;
274
- /** Accessible name of an inline group's disclosure button (`subNav="inline"`). */
275
- toggleGroup: (groupLabel: string) => string;
276
- }
277
-
278
- export interface TopBarLabels {
279
- theme: string;
280
- palette: string;
281
- language: string;
282
- /** 0.49 KIT-10: the language menu's trigger, given the current language's name —
283
- * "Choose language, current: Deutsch". */
284
- languageCurrent: (name: string) => string;
285
- /** The dev flask's role, given the active role's name (`DevMenu`'s name ends with it). */
286
- role: (value: string) => string;
287
- }
288
-
289
- export interface PickerSheetLabels {
290
- close: string;
291
- /** The sticky footer button that closes a multi-select sheet once the rows are ticked
292
- * (0.40) — the ticks are already applied, so it confirms rather than saves. */
293
- done: string;
294
- }
295
-
296
- export interface SwipeableRowLabels {
297
- actions: string;
298
- }
299
-
300
- export interface FileLabels {
301
- /** A file size for display, given its size in BYTES. The default uses
302
- * `Intl.NumberFormat`'s unit formatting in the provider's locale. */
303
- size: (bytes: number) => string;
304
- }
305
-
306
- /** The complete tree. `UiKitProvider` takes any partial of it. */
307
- export interface UiKitLabels {
308
- common: CommonLabels;
309
- dataTable: DataTableLabels;
310
- miniCalendar: MiniCalendarLabels;
311
- calendarHeatmap: CalendarHeatmapLabels;
312
- datePicker: DatePickerLabels;
313
- monthPicker: MonthPickerLabels;
314
- popover: PopoverLabels;
315
- combobox: ComboboxLabels;
316
- multiSelect: MultiSelectLabels;
317
- calculator: CalculatorLabels;
318
- currency: CurrencyLabels;
319
- chipInput: ChipInputLabels;
320
- passwordReveal: PasswordRevealLabels;
321
- tabs: TabsLabels;
322
- appShell: AppShellLabels;
323
- pageContents: PageContentsLabels;
324
- topBar: TopBarLabels;
325
- pickerSheet: PickerSheetLabels;
326
- swipeableRow: SwipeableRowLabels;
327
- file: FileLabels;
328
- wizard: WizardLabels;
329
- tour: TourLabels;
330
- /** 0.43.0: the tours page — `TourCatalogue` and its card (docs/tours-harmonization.md §3). */
331
- tourCatalogue: TourCatalogueLabels;
332
- /** 0.50: the form's "Guide me" — `TourGuideButton` (docs/tours-harmonization.md §11). */
333
- tourGuide: TourGuideLabels;
334
- commandPalette: CommandPaletteLabels;
335
- globalSearch: GlobalSearchLabels;
336
- seriesChart: SeriesChartLabels;
337
- pieChart: PieChartLabels;
338
- /** 0.52: a tile's accessible name (refactor audit 2026-10-30, DSP-5). */
339
- treemap: TreemapLabels;
340
- sparkline: SparklineLabels;
341
- statTile: StatTileLabels;
342
- signaturePad: SignaturePadLabels;
343
- passwordStrength: PasswordStrengthLabels;
344
- dangerConfirm: DangerConfirmLabels;
345
- swatchPicker: SwatchPickerLabels;
346
- iconPicker: IconPickerLabels;
347
- dialogFrame: DialogFrameLabels;
348
- filePicker: FilePickerLabels;
349
- measuredGrid: MeasuredGridLabels;
350
- feedbackAttachment: FeedbackAttachmentFieldLabels;
351
- /** 0.12.0: `FeedbackDialog`'s own strings; `FeedbackThread` / `ChatComposer` (the
352
- * namespace keeps the composer's 0.12 name). */
353
- feedbackDialog: FeedbackDialogTextLabels;
354
- feedbackThread: FeedbackThreadLabels;
355
- feedbackComposer: ChatComposerLabels;
356
- /** 0.27.0: the feedback harmonisation (docs/feedback-harmonization.md §4) — a report's
357
- * status and category words, keyed by the enum value; the toasts a feedback page
358
- * shows; `FeedbackMenu`; `FeedbackContextBox`; the two pages' table; the row detail.
359
- * keksdose's wording is the canon, in every language. */
360
- feedbackStatus: FeedbackStatusLabels;
361
- feedbackCategory: FeedbackCategoryLabels;
362
- feedbackToast: FeedbackToastLabels;
363
- feedbackMenu: FeedbackMenuLabels;
364
- /** 0.38.0: the public feedback pages — `FeedbackPublicList`, `FeedbackPublicDetail`,
365
- * `FeedbackPublicSwitch` (docs/feedback-harmonization.md §9.15). */
366
- feedbackPublic: FeedbackPublicLabels;
367
- /** 0.38.0: `useFeedbackNotificationTypes` — the two feedback types' setting words
368
- * (§9.11). */
369
- feedbackNotificationTypes: FeedbackNotificationTypesLabels;
370
- feedbackContext: FeedbackContextLabels;
371
- feedbackPage: FeedbackPageLabels;
372
- feedbackDetail: FeedbackDetailLabels;
373
- /** 0.38.0: public feedback (docs/feedback-harmonization.md §9.15) — the vote button,
374
- * the comment thread, the replies' timeline and composer. */
375
- feedbackVote: FeedbackVoteLabels;
376
- feedbackComments: FeedbackCommentsLabels;
377
- feedbackReplies: FeedbackRepliesLabels;
378
- /** 0.12.0: `ProfileSetting`, `PasswordSetting`, `TwoFactorSetting`, `PasskeysSetting`
379
- * — one record per section. The provider takes a whole section record; the
380
- * components merge it key by key, as a prop. */
381
- accountSettings: AccountSettingsLabels;
382
- confirmDialog: ConfirmDialogLabels;
383
- floatingPanel: FloatingPanelLabels;
384
- copyButton: CopyButtonLabels;
385
- bulkActionBar: BulkActionBarLabels;
386
- list: ListLabels;
387
- breadcrumbs: BreadcrumbsLabels;
388
- toast: ToastLabels;
389
- form: FormActionsLabels;
390
- descriptionList: DescriptionListLabels;
391
- lineItems: LineItemsLabels;
392
- progressBar: ProgressBarLabels;
393
- signedAmount: SignedAmountLabels;
394
- errorBoundary: ErrorBoundaryLabels;
395
- authedImage: AuthedImageLabels;
396
- imageGrid: ImageGridLabels;
397
- lightbox: LightboxLabels;
398
- /** 0.18.0: `WriteLockProvider`'s fallback reason, `AccountStateChip`, `SharePanel` /
399
- * `ShareCard` / `ShareDialog`, `ReauthDialog`. */
400
- writeLock: WriteLockLabels;
401
- accountState: AccountStateLabels;
402
- shareCard: ShareCardLabels;
403
- reauthDialog: ReauthDialogLabels;
404
- /** 0.18.0: `ServerWakeNotice` — keksdose's cold-start notice, for every app. */
405
- serverWake: ServerWakeLabels;
406
- /** 0.19.0: the translation-review parts (`TranslationReviewPanel`, its editor, chip,
407
- * progress, locale tabs and export) — keksdose's /translations, for every app. */
408
- translationReview: TranslationReviewLabels;
409
- /** 0.19.0: `LegalLinks`' navigation name. 0.28.0: every kit-owned word of the legal
410
- * pages — the link labels, titles, back link, terms checkbox and notices, and the
411
- * sections that are the same in every app, filled in with the app's operator
412
- * (docs/legal-harmonization.md §4.3/§4.4). */
413
- legal: LegalLabels;
414
- /** 0.29.0: sign-in form: credentials, passkey, 2FA, forced new password (docs/auth-harmonization.md §5). */
415
- signIn: SignInLabels;
416
- /** 0.29.0: the sign-up form, with the +app address tag (§4.1, §4.5). */
417
- register: RegisterLabels;
418
- /** 0.29.0: asking a migrated account for first and last name once (§3.3). */
419
- completeName: CompleteNameLabels;
420
- /** 0.29.0: requesting a reset link (always the same answer). */
421
- forgotPassword: ForgotPasswordLabels;
422
- /** 0.29.0: choosing a new password from a reset link; not a sign-in (§6.3). */
423
- resetPassword: ResetPasswordLabels;
424
- /** 0.29.0: the verify-email page and the unverified banner. */
425
- verifyEmail: VerifyEmailLabels;
426
- /** 0.29.0: the 404 page. */
427
- notFound: NotFoundLabels;
428
- /** 0.29.0: accepting an invitation with an account (§4.4). */
429
- acceptInvitation: AcceptInvitationLabels;
430
- /** 0.29.0: kastlan's switcher between a user's companies (§5.3). */
431
- companySwitcher: CompanySwitcherLabels;
432
- /** 0.30.0: changing the account's address with re-verification (docs/user-admin-harmonization.md §6.2). */
433
- emailChange: EmailChangeLabels;
434
- /** 0.30.0: sign out everywhere, and kastlan's device list (§6.3). */
435
- sessions: SessionsLabels;
436
- /** 0.30.0: deletion in two stages (§6.4). */
437
- deleteAccount: DeleteAccountLabels;
438
- /** 0.30.0: the self-service JSON export (§6.5). */
439
- dataExport: DataExportLabels;
440
- /** 0.30.0: the admin user list's columns (§3). */
441
- userRoster: UserRosterLabels;
442
- /** 0.30.0: picking one or several roles, with the reasons a choice is locked (§4.1). */
443
- roleSelect: RoleSelectLabels;
444
- /** 0.30.0: a translation reviewer's languages and areas. */
445
- reviewerScope: ReviewerScopeLabels;
446
- /** 0.30.0: an admin action's confirmation and refusals (§4.2). */
447
- adminAction: AdminActionLabels;
448
- /** 0.30.0: the admin_actions list (§4.3). */
449
- adminActionLog: AdminActionLogLabels;
450
- /** 0.30.0: handing an account's work to another (Kurvenschmiede). */
451
- transferOwnership: TransferOwnershipLabels;
452
- /** 0.30.0: the invitations panel (§5). */
453
- invitations: InvitationsLabels;
454
- /** 0.31.0: the settings and admin pages' shell (docs/settings-harmonization.md §4.3). */
455
- settings: SettingsLabels;
456
- /** 0.31.0: the public landing page's kit words (docs/landing-demo-harmonization.md §4). */
457
- landing: LandingLabels;
458
- /** 0.31.0: the demo's start, banner and end (§5). */
459
- demo: DemoLabels;
460
- /** 0.32.0: plans, standing, banners and the limit notice (docs/billing-harmonization.md §7). */
461
- billing: BillingLabels;
462
- /** 0.33.0: the operator's plan parts — `planColumn`, `PlanChangeConfirm` and the
463
- * lines of `usePlanChangeResult` (docs/billing-harmonization.md §14.12). */
464
- planChange: PlanChangeLabels;
465
- /** 0.32.0: the text-size and contrast settings (docs/text-size-harmonization.md §6). */
466
- appearance: AppearanceLabels;
467
- /** 0.36.0: resetting this device's settings, the appearance group's last card
468
- * (docs/settings-harmonization.md §11.3). */
469
- deviceReset: DeviceResetLabels;
470
- /** 0.32.0: a row's actions folded into a "⋯" menu at Large (text size §10.8). */
471
- rowActions: RowActionsLabels;
472
- /** 0.32.0: the phone bar's "More" cell and sheet (text size §10.7). */
473
- appShellMore: AppShellMoreLabels;
474
- /** 0.22.0: the screen-reader words of `Input` / `Textarea`'s `showCount` counter. */
475
- characterCount: CharacterCountLabels;
476
- /** 0.22.0: `CountrySelect`. Its list's "no results" and counts are `combobox`'s. */
477
- countrySelect: CountrySelectLabels;
478
- /** 0.22.0: `InlineEditField` — keksdose K9. */
479
- inlineEdit: InlineEditLabels;
480
- /** 0.22.0: `IbanInput`'s messages, one per problem. */
481
- ibanInput: IbanInputLabels;
482
- /** 0.22.0: `PhoneInput`'s country-code select. */
483
- phoneInput: PhoneInputLabels;
484
- /** 0.23.0: `ColumnMapper` / `ColumnRoleTable` — a pasted or dropped table, a role per
485
- * column. */
486
- columnMapper: ColumnMapperLabels;
487
- /** 0.36.0: the notification cards — the types, quiet hours and the zone picker, this
488
- * device's push, the device list, and the unsubscribe page
489
- * (docs/notifications-harmonization.md §4.2). */
490
- notifications: NotificationsLabels;
491
- /** 0.42.0: the admin area's shared words — the account menu's "Administration" row, the
492
- * 403 page, the shared sections, the overview's tiles and the Tools list
493
- * (docs/admin-harmonization.md §3.1). */
494
- adminArea: AdminAreaLabels;
495
- /** 0.42.0: the top bar's shared parts — `TourMenu`, `SyncStatusIndicator`, `DevMenu`
496
- * (0.42's `DevSwitchers`; docs/top-bar-harmonization.md §3.1, §2.7.1). */
497
- topBarParts: TopBarPartsLabels;
498
- /** 0.45.0: "Send a test mail to me" (docs/admin-harmonization.md §9.2.4). */
499
- mailTestCard: MailTestCardLabels;
500
- /** 0.45.0: the sign-out question while changes wait to sync (`@eifi1/ui-kit/offline`,
501
- * docs/local-first-harmonization.md §1.6). */
502
- signOutPending: SignOutPendingDialogLabels;
503
- /** 0.45.0: the service-worker update toast (local-first §1.5 D8). */
504
- pwaUpdate: PwaUpdatePromptLabels;
505
- /** 0.45.0: "This is a shared computer" on the sign-in form (local-first §1.5 D6). */
506
- sharedComputer: SharedComputerLabels;
507
- }
508
-
509
- /**
510
- * A label override, as deep as the labels go: an object of labels (a namespace, or a
511
- * record inside one such as `accountSettings.passkeys` or `dataTable.presets`) may be
512
- * partial at every level, because the provider merges it key by key at every level.
513
- * A leaf stays as it is: a string, a function-valued label (`(n) => …`), and anything
514
- * that is not purely an object (a `ReactNode` union) is given whole.
515
- */
516
- export type LabelOverride<T> = [T] extends [(...args: never[]) => unknown]
517
- ? T
518
- : [T] extends [readonly unknown[]]
519
- ? T
520
- : [T] extends [object]
521
- ? { [K in keyof T]?: LabelOverride<T[K]> }
522
- : T;
523
-
524
- /** Any subset of the tree — each namespace may be partial, and so may any record
525
- * inside one (`accountSettings.passkeys`, `dataTable.presets`): they are merged key
526
- * by key, at every depth. */
527
- export type UiKitLabelOverrides = { [K in keyof UiKitLabels]?: LabelOverride<UiKitLabels[K]> };
528
-
529
- /* ── English defaults for the namespaces defined here ────────────────────── */
530
-
531
- // They live in ./shared-labels, a module of words, as every component's defaults live in
532
- // its `*-labels.ts` (round 0.34). Imported and exported as this module's own, as each
533
- // component does with its defaults: the names, and where the README lists them, stay.
534
- export {
535
- DEFAULT_APP_SHELL_LABELS,
536
- DEFAULT_CALCULATOR_LABELS,
537
- DEFAULT_COMBOBOX_LABELS,
538
- DEFAULT_COMMON_LABELS,
539
- DEFAULT_CURRENCY_LABELS,
540
- DEFAULT_DATE_PICKER_LABELS,
541
- DEFAULT_FILE_LABELS,
542
- DEFAULT_MULTI_SELECT_LABELS,
543
- DEFAULT_PICKER_SHEET_LABELS,
544
- DEFAULT_SWIPEABLE_ROW_LABELS,
545
- DEFAULT_TOP_BAR_LABELS,
546
- formatFileSize,
547
- };
548
-
549
- /* ── The provider ────────────────────────────────────────────────────────── */
550
-
551
- interface KitI18n {
552
- labels?: UiKitLabelOverrides;
553
- locale?: string;
554
- weekStartsOn?: WeekDay;
555
- linkComponent?: KitLinkComponent;
556
- chartTooltipPlacement?: ChartTooltipPlacement;
557
- formatDate?: KitDateFormatter;
558
- tableStorageKeyPrefix?: string;
559
- timeZone?: string;
560
- documentTitleFormat?: string;
561
- appName?: string;
562
- }
563
-
564
- /** What a {@link KitDateFormatter} is told about the date it is formatting. */
565
- export interface KitDateFormatContext {
566
- /**
567
- * How much of a date the string is: `"day"` — the `iso` is `"YYYY-MM-DD"`; `"month"` —
568
- * `"YYYY-MM"` (a `MonthPicker`); `"year"` — `"YYYY"` (`MonthPicker mode="year"`).
569
- */
570
- unit: "day" | "month" | "year";
571
- /** Which kit surface asks: the trigger of a `DatePicker`, of a `DateRangePicker`
572
- * (called once per end), of a `MonthPicker`, or a `DateMark`. */
573
- source: "datePicker" | "dateRangePicker" | "monthPicker" | "dateMark";
574
- /** The locale the kit would have formatted in — the component's `locale` prop, else
575
- * the provider's — or `undefined` for the runtime's. */
576
- locale: string | undefined;
577
- /**
578
- * The kit's suggestion: whether this date stands alone where the day of the week
579
- * helps — `true` for a `DatePicker`'s trigger and a `DateMark`, `false` for the two
580
- * ends of a range (twice the width, in a sentence-like "from – to") and for a month
581
- * or a year. keksdose's rule, which this follows: *"A date in a COLUMN carries the
582
- * weekday. A date in a SENTENCE does not."* (date-cell.tsx, dev#546). A formatter
583
- * is free to ignore it.
584
- */
585
- weekday: boolean;
586
- }
587
-
588
- /**
589
- * The app's ONE answer to "what does a date look like here" — keksdose K12. Returns the
590
- * text for an ISO date (see {@link KitDateFormatContext.unit} for the three shapes).
591
- * Return `""` to fall back to the kit's own formatting for that date.
592
- */
593
- export type KitDateFormatter = (iso: string, context: KitDateFormatContext) => string;
594
-
595
- /** Where a chart shows the values under the pointer — see `SeriesChartTooltip.placement`. */
596
- export type ChartTooltipPlacement = "cursor" | "above" | "below" | "auto";
597
-
598
- /**
599
- * What every kit link receives: the anchor attributes the kit decided (href, class,
600
- * aria-current, handlers, children, ref). An app's router link maps them —
601
- * `({ href, ...p }) => <Link to={href} {...p} />` — ONCE, on the provider.
602
- *
603
- * `replace` is the one prop that is not an anchor attribute: see there. Map it
604
- * explicitly if your router link is not react-router's —
605
- * `({ href, replace, ...p }) => <Link to={href} replace={replace} {...p} />` — and never
606
- * spread it onto a DOM `<a>`, where React warns about an unknown attribute.
607
- */
608
- export type KitLinkProps = AnchorHTMLAttributes<HTMLAnchorElement> & {
609
- href: string;
610
- ref?: Ref<HTMLAnchorElement>;
611
- /**
612
- * Navigate by REPLACING the current history entry, so Back skips it — keksdose F1:
613
- * a one-shot URL (a magic-link landing, `?checkout=done`, a wizard's "finish" hop)
614
- * that must not come back when the user presses Back. Present ONLY when the kit link
615
- * was given `replace` (`true`), so a provider link that spreads its props onto a
616
- * plain `<a>` keeps working for every link that never asks for it. react-router's
617
- * `<Link>` takes the same prop, so `({ href, ...p }) => <Link to={href} {...p} />`
618
- * honours it with no change; any other router maps it to its own replace option.
619
- * The kit never puts it on a DOM element itself.
620
- */
621
- replace?: boolean;
622
- };
623
- export type KitLinkComponent = (props: KitLinkProps) => ReactElement;
624
-
625
- const KitI18nContext = createContext<KitI18n>({});
626
-
627
- export interface UiKitProviderProps {
628
- /** Any part of {@link UiKitLabels}. Missing keys fall back to English. */
629
- labels?: UiKitLabelOverrides;
630
- /**
631
- * BCP 47 tag used by every kit component that formats something — dates, numbers,
632
- * month and weekday names, file sizes — when it is not handed a `locale` prop of
633
- * its own. Without a provider, and without a prop, those use the runtime default.
634
- */
635
- locale?: string;
636
- /**
637
- * The first day of the week (0 = Sunday, 1 = Monday …) for every calendar below —
638
- * `MiniCalendar` and the pickers built on it — that is not handed a `weekStartsOn`
639
- * of its own. Without it the week start follows `locale`'s week info.
640
- *
641
- * Separate from `locale` because the two are separate decisions: a German-built
642
- * app running in English (`locale="en"`) would otherwise start its weeks on Sunday,
643
- * and switching it to `en-GB` to get Monday changes every date and number format.
644
- */
645
- weekStartsOn?: WeekDay;
646
- /**
647
- * The app's router link, used by every kit component that renders an in-app link
648
- * and was not handed its own `renderLink` — so `renderLink` stops being repeated on
649
- * each ListItem, Breadcrumbs, StatTile, Chip… (kastlan). A component's own
650
- * `renderLink` wins; external links and in-page `#anchor`s stay plain `<a>`, and a
651
- * hash-router `#/path` is handed to it like `/path` (see `pickLinkRenderer`).
652
- */
653
- linkComponent?: KitLinkComponent;
654
- /**
655
- * Where every `SeriesChart` below shows its tooltip when it does not say so itself
656
- * (`tooltip.placement`) — set once so an app's phone charts stop putting the box under
657
- * the reader's finger (keksdose #359). Default: `"cursor"`, the box that follows the
658
- * pointer, as before.
659
- */
660
- chartTooltipPlacement?: ChartTooltipPlacement;
661
- /**
662
- * How every kit date below is written, when the component is not told otherwise —
663
- * keksdose K12. keksdose has a date-format preference (Settings ▸ date format, feedback
664
- * #180) that is not the UI language, and a weekday in the UI language beside digits
665
- * in the preference's order (live #246, dev#546): two locales in one string, which
666
- * no `locale` + `Intl` options can say. Its `DateField` wraps every `DatePicker` to
667
- * pass `formatValue`, and its report range field formats both ends by hand; with this
668
- * set once on the provider, those wrappers thin to nothing.
669
- *
670
- * Used for the trigger text of `DatePicker`, `DateRangePicker` and `MonthPicker`
671
- * (month and year mode), and for `DateMark display="date"`. A component's own
672
- * `formatValue` or `formatOptions` (`dateStyle` on a DateMark) wins: prop >
673
- * provider > the kit's `Intl` default, the order every kit setting resolves in. Left
674
- * out (or returning `""`), everything formats exactly as before.
675
- *
676
- * Keep it stable (`useCallback`, or a module function): it is in the provider's
677
- * context value, so a new function every render re-renders every consumer.
678
- */
679
- formatDate?: KitDateFormatter;
680
- /**
681
- * The `localStorage` prefix every kit table below keeps its view under (sort, filters,
682
- * page size, widths, hidden columns), when the table is not handed a
683
- * `storageKeyPrefix` of its own — round 0.34 C5, KS U4. Left out, it is the kit's
684
- * `"hbui-table:"`, as before.
685
- *
686
- * Set once here rather than per table because not every table is the app's to pass a
687
- * prop to: `TranslationReviewPanel` wraps a `DataTable`, and until this the panel's
688
- * view landed under the kit's prefix whatever the app's was — so an app that lists
689
- * what it stores (a privacy page) had to list the kit's prefix as a key of its own.
690
- * Resolves like every kit setting: the table's own prop > this > the default. The
691
- * key is the prefix plus the table's `storageKey`, verbatim, so an app that wrapped
692
- * `DataTable` to pass its prefix (Keksdose's `keksdose-table:`) keeps every stored
693
- * view when it moves the prefix here.
694
- */
695
- tableStorageKeyPrefix?: string;
696
- /**
697
- * 0.46 (docs/notifications-harmonization.md §10.3): the IANA zone ("Europe/Zurich") every
698
- * TIMESTAMP below is shown in through `useKitFormat().formatDate` /
699
- * `formatRelativeTime`, when the call names none — the account's picked zone, for an app
700
- * that shows times in it. A bare "YYYY-MM-DD" is never shifted (a calendar day is the day
701
- * it names in every zone). Left out, timestamps follow the device, as before.
702
- */
703
- timeZone?: string;
704
- /**
705
- * 0.49 KIT-9: how `useDocumentTitle` and every `PageHeader`'s `h1` write the window's
706
- * title, from `{page}`, `{section}` and `{app}`. Default
707
- * `"{page} · {section} · {app}"` (`DEFAULT_DOCUMENT_TITLE_FORMAT`); a missing part
708
- * drops with its separator.
709
- */
710
- documentTitleFormat?: string;
711
- /** 0.49 KIT-9: the app's name, the `{app}` of the window's title ("Kastlan"). Left
712
- * out, titles end at the page or section. */
713
- appName?: string;
714
- /**
715
- * 0.49 KIT-1b: while a person copies a selection in the page, a U+2212 minus standing
716
- * before a number ("−CHF 1,250.50") goes to the clipboard as "-", in `text/plain` and
717
- * `text/html` (what Excel pastes), so a spreadsheet reads a number; the page keeps "−".
718
- * A copy out of an input, a textarea or an editable element is left alone. Installed
719
- * once per document, by the first provider that has it on. Default `true`; `false` on
720
- * the outermost provider leaves the clipboard to the browser.
721
- */
722
- copyAsciiMinus?: boolean;
723
- children: ReactNode;
724
- }
725
-
726
- /**
727
- * Hand every kit component below this point its strings and its locale.
728
- *
729
- * Optional: a component outside any provider behaves exactly as it did before the
730
- * provider existed. Nesting works as a merge — an inner provider overrides only what
731
- * it names, so a page can re-label one table's `dataTable.table` without restating
732
- * the language.
733
- */
734
- export function UiKitProvider({
735
- labels,
736
- locale,
737
- weekStartsOn,
738
- linkComponent,
739
- chartTooltipPlacement,
740
- formatDate,
741
- tableStorageKeyPrefix,
742
- timeZone,
743
- documentTitleFormat,
744
- appName,
745
- copyAsciiMinus = true,
746
- children,
747
- }: UiKitProviderProps) {
748
- const outer = useContext(KitI18nContext);
749
- const value = useMemo<KitI18n>(
750
- () => ({
751
- locale: locale ?? outer.locale,
752
- weekStartsOn: weekStartsOn ?? outer.weekStartsOn,
753
- labels: mergeOverrides(outer.labels, labels),
754
- linkComponent: linkComponent ?? outer.linkComponent,
755
- chartTooltipPlacement: chartTooltipPlacement ?? outer.chartTooltipPlacement,
756
- formatDate: formatDate ?? outer.formatDate,
757
- tableStorageKeyPrefix: tableStorageKeyPrefix ?? outer.tableStorageKeyPrefix,
758
- timeZone: timeZone ?? outer.timeZone,
759
- documentTitleFormat: documentTitleFormat ?? outer.documentTitleFormat,
760
- appName: appName ?? outer.appName,
761
- }),
762
- [
763
- outer,
764
- labels,
765
- locale,
766
- weekStartsOn,
767
- linkComponent,
768
- chartTooltipPlacement,
769
- formatDate,
770
- tableStorageKeyPrefix,
771
- timeZone,
772
- documentTitleFormat,
773
- appName,
774
- ],
775
- );
776
- useTableViewsJoin(value.tableStorageKeyPrefix ?? DEFAULT_TABLE_STORAGE_KEY_PREFIX);
777
- useClipboardMinus(copyAsciiMinus);
778
- return <KitI18nContext.Provider value={value}>{children}</KitI18nContext.Provider>;
779
- }
780
-
781
- /** The kit's own table prefix: `DEFAULT_PERSIST_PREFIX` of components/use-table-state,
782
- * restated because that module imports the router (a test pins the two equal). */
783
- const DEFAULT_TABLE_STORAGE_KEY_PREFIX = "hbui-table:";
784
-
785
- /**
786
- * Reset this device's settings (docs/settings-harmonization.md §11.4): the tables below a
787
- * provider keep their views under its prefix, so the provider joins the registry with
788
- * that prefix — a view, no `reset`, since a table reads its view when it next mounts —
789
- * while it is mounted. Nested providers with one prefix hold one entry.
790
- *
791
- * Through a literal `import()`, not a static import: every catalogue reaches this module,
792
- * and a catalogue may reach nothing outside i18n/ (scripts/check-module-graph.mjs,
793
- * english-catalogue-graph.test.ts). The theme stores and the shell import the registry
794
- * statically, so it is loaded already and the join lands a microtask after the mount.
795
- */
796
- function useTableViewsJoin(prefix: string): void {
797
- useEffect(() => {
798
- let leave: (() => void) | undefined;
799
- let gone = false;
800
- import("../lib/device-settings").then(
801
- ({ registerDeviceSetting }) => {
802
- if (!gone) leave = registerDeviceSetting({ key: prefix, prefix: true, kind: "view" });
803
- },
804
- // A module of the kit's own that fails to load has nothing to join; the provider
805
- // and its tables work as before.
806
- () => undefined,
807
- );
808
- return () => {
809
- gone = true;
810
- leave?.();
811
- };
812
- }, [prefix]);
813
- }
814
-
815
- /**
816
- * The copy handler (lib/clipboard-minus, 0.49 KIT-1b), through a literal `import()` for
817
- * the reason {@link useTableViewsJoin} gives: a catalogue may reach nothing outside i18n/.
818
- * It is in place a microtask after the mount — long before a person selects and copies.
819
- */
820
- function useClipboardMinus(on: boolean): void {
821
- useEffect(() => {
822
- if (!on || typeof document === "undefined") return;
823
- let uninstall: (() => void) | undefined;
824
- let gone = false;
825
- import("../lib/clipboard-minus").then(
826
- ({ installClipboardMinus }) => {
827
- if (!gone) uninstall = installClipboardMinus(document);
828
- },
829
- // Not loaded: copying works as the browser does it.
830
- () => undefined,
831
- );
832
- return () => {
833
- gone = true;
834
- uninstall?.();
835
- };
836
- }, [on]);
837
- }
838
-
839
- function isRecord(v: unknown): v is Record<string, unknown> {
840
- return typeof v === "object" && v !== null && !Array.isArray(v);
841
- }
842
-
843
- /** A record of labels to merge into — not a React element, which is an object too but
844
- * is a label given whole. */
845
- function isLabelRecord(v: unknown): v is Record<string, unknown> {
846
- return isRecord(v) && !("$$typeof" in v);
847
- }
848
-
849
- /** Merged key by key at EVERY depth — a namespace, a record inside it
850
- * (`accountSettings.passkeys`, `dataTable.presets`), and so on down — to match
851
- * {@link LabelOverride}. An `undefined` is skipped at every depth, so it never blanks
852
- * out what is under it. */
853
- function mergeNamespace<T extends object>(base: T, over: LabelOverride<T> | Partial<T> | undefined): T {
854
- if (!over) return base;
855
- const out = { ...base } as Record<string, unknown>;
856
- for (const [k, v] of Object.entries(over)) {
857
- if (v === undefined) continue;
858
- const prev = out[k];
859
- out[k] = isLabelRecord(prev) && isLabelRecord(v) ? mergeNamespace(prev, v) : v;
860
- }
861
- return out as T;
862
- }
863
-
864
- function mergeOverrides(
865
- a: UiKitLabelOverrides | undefined,
866
- b: UiKitLabelOverrides | undefined,
867
- ): UiKitLabelOverrides | undefined {
868
- if (!a) return b;
869
- if (!b) return a;
870
- const out: Record<string, unknown> = { ...a };
871
- for (const [ns, v] of Object.entries(b)) {
872
- out[ns] = mergeNamespace((out[ns] as object | undefined) ?? {}, v as object);
873
- }
874
- return out as UiKitLabelOverrides;
875
- }
876
-
877
- /**
878
- * What the nearest provider says about one namespace — `undefined` outside one. Nested
879
- * providers' words come merged, at every depth; no English default is filled in.
880
- *
881
- * A {@link LabelOverride}, partial at every depth, like the components' `labels` props
882
- * that take it: a provider that names one key of a section (`accountSettings.passkeys`)
883
- * or one preset (`dataTable.presets`) hands over just that (round 0.35 R3 — until then
884
- * it was typed partial at the top only, so a nested section read as complete).
885
- *
886
- * For a component whose own resolver does more than a merge (the data table derives
887
- * `columnsCount` from `columns`): merge the component's prop over it — a record key by
888
- * key — and feed the result to that resolver.
889
- */
890
- export function useKitLabelOverrides<K extends keyof UiKitLabels>(ns: K): LabelOverride<UiKitLabels[K]> | undefined {
891
- return useContext(KitI18nContext).labels?.[ns];
892
- }
893
-
894
- /**
895
- * One namespace, resolved: `defaults`, then the provider, then the component's own
896
- * `prop`. Record-valued keys are merged key by key at each step — so `prop` is a
897
- * {@link LabelOverride}, partial at every depth as the provider's labels are, and a
898
- * component's `labels` prop, typed the same, is handed over without a cast (refactor
899
- * audit 2026-10, API-9).
900
- */
901
- export function useKitLabels<K extends keyof UiKitLabels>(
902
- ns: K,
903
- defaults: UiKitLabels[K],
904
- prop?: LabelOverride<UiKitLabels[K]>,
905
- ): UiKitLabels[K] {
906
- const fromProvider = useKitLabelOverrides(ns);
907
- return useMemo(() => mergeNamespace(mergeNamespace(defaults, fromProvider), prop), [defaults, fromProvider, prop]);
908
- }
909
-
910
- /** The component's own `locale` prop, else the provider's, else `undefined` (which
911
- * every `Intl` API reads as "the runtime's default"). */
912
- export function useKitLocale(prop?: string): string | undefined {
913
- const fromProvider = useContext(KitI18nContext).locale;
914
- return prop ?? fromProvider;
915
- }
916
-
917
- /** The week start the nearest `<UiKitProvider weekStartsOn>` pins, else `undefined`
918
- * (the caller then asks the locale). A component's own prop goes first:
919
- * `prop ?? useKitWeekStart()`. */
920
- /** The provider's router link, or `undefined` — a component's own `renderLink` should
921
- * win over it: `const Link = renderLink ?? useKitLink()`. */
922
- export function useKitLink(): KitLinkComponent | undefined {
923
- return useContext(KitI18nContext).linkComponent;
924
- }
925
-
926
- export function useKitWeekStart(): WeekDay | undefined {
927
- return useContext(KitI18nContext).weekStartsOn;
928
- }
929
-
930
- /** The provider's `chartTooltipPlacement`, or `undefined` — a chart's own prop wins. */
931
- export function useKitChartTooltipPlacement(): ChartTooltipPlacement | undefined {
932
- return useContext(KitI18nContext).chartTooltipPlacement;
933
- }
934
-
935
- /** The nearest provider's `formatDate`, or `undefined` — a component's own
936
- * `formatValue` / `formatOptions` wins over it. See {@link KitDateFormatter}. */
937
- export function useKitDateFormatter(): KitDateFormatter | undefined {
938
- return useContext(KitI18nContext).formatDate;
939
- }
940
-
941
- /** The nearest provider's `tableStorageKeyPrefix`, or `undefined` — a table's own
942
- * `storageKeyPrefix` wins over it, and the kit's `"hbui-table:"` comes after both. */
943
- export function useKitTableStorageKeyPrefix(): string | undefined {
944
- return useContext(KitI18nContext).tableStorageKeyPrefix;
945
- }
946
-
947
- /** The nearest provider's `timeZone` (0.46), or `undefined` — the device's. A call's own
948
- * `timeZone` wins over it. */
949
- export function useKitTimeZone(): string | undefined {
950
- return useContext(KitI18nContext).timeZone;
951
- }
952
-
953
- /** The nearest provider's `documentTitleFormat` and `appName`, or `undefined` each —
954
- * what `useDocumentTitle` writes with (the format's default is
955
- * `DEFAULT_DOCUMENT_TITLE_FORMAT`, applied there: this module reaches nothing outside
956
- * i18n/). */
957
- export function useKitDocumentTitle(): { format: string | undefined; appName: string | undefined } {
958
- const { documentTitleFormat, appName } = useContext(KitI18nContext);
959
- return { format: documentTitleFormat, appName };
960
- }
961
-
962
- /** {@link DEFAULT_FILE_LABELS}, but formatting in the provider's locale. */
963
- export function useKitFileLabels(prop?: Partial<FileLabels>): FileLabels {
964
- const locale = useKitLocale();
965
- const defaults = useMemo<FileLabels>(() => ({ size: (bytes) => formatFileSize(bytes, locale) }), [locale]);
966
- return useKitLabels("file", defaults, prop);
967
- }
968
-
969
- /**
970
- * The dot paths of every key `labels` does NOT supply — the ones a translated app is
971
- * still showing in English. Assert on it in the app's own test:
972
- *
973
- * expect(missingKitLabels(labels, DEFAULT_UI_KIT_LABELS)).toEqual([]);
974
- *
975
- * `reference` is the complete tree to check against — pass
976
- * {@link DEFAULT_UI_KIT_LABELS} (src/i18n/defaults.ts). It is a parameter rather than an import
977
- * because the defaults live beside their components, and this module is imported BY
978
- * those components. Left out (a test file is not type-checked), it throws saying so
979
- * rather than "Cannot convert undefined or null to object" (keksdose, 0.18).
980
- */
981
- export function missingKitLabels(labels: UiKitLabelOverrides | undefined, reference: UiKitLabels): string[] {
982
- if (!isRecord(reference)) {
983
- throw new TypeError(
984
- "missingKitLabels(labels, reference): pass DEFAULT_UI_KIT_LABELS as the reference — " +
985
- "it is the tree the labels are checked against.",
986
- );
987
- }
988
- const missing: string[] = [];
989
- for (const [ns, keys] of Object.entries(reference)) {
990
- const given = (labels as Record<string, Record<string, unknown> | undefined> | undefined)?.[ns];
991
- for (const [key, value] of Object.entries(keys as Record<string, unknown>)) {
992
- const got = given?.[key];
993
- if (got === undefined) {
994
- missing.push(`${ns}.${key}`);
995
- } else if (isRecord(value) && isRecord(got)) {
996
- for (const sub of Object.keys(value)) {
997
- if (got[sub] === undefined) missing.push(`${ns}.${key}.${sub}`);
998
- }
999
- }
1000
- }
1001
- }
1002
- return missing;
1003
- }