@eifi1/ui-kit 0.54.0 → 0.55.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (847) hide show
  1. package/README.md +90 -76
  2. package/dist/admin/plan-change.js +2 -2
  3. package/dist/admin/plan-change.js.map +1 -1
  4. package/dist/admin/user-roster.d.ts +6 -0
  5. package/dist/admin/user-roster.js +4 -0
  6. package/dist/admin/user-roster.js.map +1 -1
  7. package/dist/billing/billing-labels.d.ts +26 -0
  8. package/dist/billing/billing-labels.js +9 -0
  9. package/dist/billing/billing-labels.js.map +1 -1
  10. package/dist/billing/subscription-standing.d.ts +61 -0
  11. package/dist/billing/subscription-standing.js +51 -0
  12. package/dist/billing/subscription-standing.js.map +1 -0
  13. package/dist/billing/usage-meter.d.ts +52 -0
  14. package/dist/billing/usage-meter.js +52 -0
  15. package/dist/billing/usage-meter.js.map +1 -0
  16. package/dist/chart.d.ts +1 -0
  17. package/dist/chart.js +4 -0
  18. package/dist/chart.js.map +1 -1
  19. package/dist/components/alert-banner.js +2 -3
  20. package/dist/components/alert-banner.js.map +1 -1
  21. package/dist/components/amount-input.js +3 -15
  22. package/dist/components/amount-input.js.map +1 -1
  23. package/dist/components/autocomplete.js +2 -2
  24. package/dist/components/autocomplete.js.map +1 -1
  25. package/dist/components/bulk-action-bar.js +2 -1
  26. package/dist/components/bulk-action-bar.js.map +1 -1
  27. package/dist/components/button.d.ts +35 -1
  28. package/dist/components/button.js +5 -9
  29. package/dist/components/button.js.map +1 -1
  30. package/dist/components/calendar-heatmap.js +2 -2
  31. package/dist/components/calendar-heatmap.js.map +1 -1
  32. package/dist/components/camera-button.d.ts +89 -0
  33. package/dist/components/camera-button.js +122 -0
  34. package/dist/components/camera-button.js.map +1 -0
  35. package/dist/components/camera-capture.d.ts +66 -0
  36. package/dist/components/camera-capture.js +190 -0
  37. package/dist/components/camera-capture.js.map +1 -0
  38. package/dist/components/camera-labels.d.ts +20 -0
  39. package/dist/components/camera-labels.js +15 -0
  40. package/dist/components/camera-labels.js.map +1 -0
  41. package/dist/components/chart-edge.d.ts +9 -0
  42. package/dist/components/chart-edge.js +14 -3
  43. package/dist/components/chart-edge.js.map +1 -1
  44. package/dist/components/chart-zoom-core.js +34 -29
  45. package/dist/components/chart-zoom-core.js.map +1 -1
  46. package/dist/components/checkbox-group.js +1 -1
  47. package/dist/components/checkbox-group.js.map +1 -1
  48. package/dist/components/combobox-core.js +3 -2
  49. package/dist/components/combobox-core.js.map +1 -1
  50. package/dist/components/combobox.js +2 -2
  51. package/dist/components/combobox.js.map +1 -1
  52. package/dist/components/consent-again-notice-labels.d.ts +25 -0
  53. package/dist/components/consent-again-notice-labels.js +15 -0
  54. package/dist/components/consent-again-notice-labels.js.map +1 -0
  55. package/dist/components/consent-again-notice.d.ts +85 -0
  56. package/dist/components/consent-again-notice.js +94 -0
  57. package/dist/components/consent-again-notice.js.map +1 -0
  58. package/dist/components/country-select.js +2 -7
  59. package/dist/components/country-select.js.map +1 -1
  60. package/dist/components/currency-select.js +2 -2
  61. package/dist/components/currency-select.js.map +1 -1
  62. package/dist/components/danger-confirm.js +2 -2
  63. package/dist/components/danger-confirm.js.map +1 -1
  64. package/dist/components/data-table-column-settings.js +2 -2
  65. package/dist/components/data-table-column-settings.js.map +1 -1
  66. package/dist/components/data-table-fit.js.map +1 -1
  67. package/dist/components/data-table-virtual.js +13 -3
  68. package/dist/components/data-table-virtual.js.map +1 -1
  69. package/dist/components/date-field.js +2 -2
  70. package/dist/components/date-field.js.map +1 -1
  71. package/dist/components/date-picker.js +2 -2
  72. package/dist/components/date-picker.js.map +1 -1
  73. package/dist/components/date-range-picker.js +2 -6
  74. package/dist/components/date-range-picker.js.map +1 -1
  75. package/dist/components/dialog-frame.d.ts +3 -1
  76. package/dist/components/dialog-frame.js.map +1 -1
  77. package/dist/components/dropdown.js +7 -3
  78. package/dist/components/dropdown.js.map +1 -1
  79. package/dist/components/entity-combobox.js +2 -2
  80. package/dist/components/entity-combobox.js.map +1 -1
  81. package/dist/components/field-parts.d.ts +108 -6
  82. package/dist/components/field-parts.js +59 -6
  83. package/dist/components/field-parts.js.map +1 -1
  84. package/dist/components/field-suggestion-labels.d.ts +2 -0
  85. package/dist/components/field-suggestion-labels.js +10 -0
  86. package/dist/components/field-suggestion-labels.js.map +1 -0
  87. package/dist/components/field.js +1 -1
  88. package/dist/components/field.js.map +1 -1
  89. package/dist/components/file-button.d.ts +1 -1
  90. package/dist/components/file-button.js.map +1 -1
  91. package/dist/components/floating-panel.d.ts +7 -6
  92. package/dist/components/floating-panel.js +3 -17
  93. package/dist/components/floating-panel.js.map +1 -1
  94. package/dist/components/form-actions.d.ts +3 -2
  95. package/dist/components/form-actions.js.map +1 -1
  96. package/dist/components/hover-menu.js +3 -2
  97. package/dist/components/hover-menu.js.map +1 -1
  98. package/dist/components/icon-button.d.ts +23 -5
  99. package/dist/components/icon-button.js +6 -8
  100. package/dist/components/icon-button.js.map +1 -1
  101. package/dist/components/inline-confirm.js +2 -1
  102. package/dist/components/inline-confirm.js.map +1 -1
  103. package/dist/components/inline-entity-combobox.js +2 -2
  104. package/dist/components/inline-entity-combobox.js.map +1 -1
  105. package/dist/components/input.js +2 -2
  106. package/dist/components/input.js.map +1 -1
  107. package/dist/components/jump-calendar.js +3 -3
  108. package/dist/components/jump-calendar.js.map +1 -1
  109. package/dist/components/legal.d.ts +13 -1
  110. package/dist/components/legal.js +12 -0
  111. package/dist/components/legal.js.map +1 -1
  112. package/dist/components/legended-series-chart.d.ts +80 -0
  113. package/dist/components/legended-series-chart.js +70 -0
  114. package/dist/components/legended-series-chart.js.map +1 -0
  115. package/dist/components/lightbox.js +2 -1
  116. package/dist/components/lightbox.js.map +1 -1
  117. package/dist/components/mini-calendar.js +13 -5
  118. package/dist/components/mini-calendar.js.map +1 -1
  119. package/dist/components/modal.d.ts +23 -2
  120. package/dist/components/modal.js +24 -6
  121. package/dist/components/modal.js.map +1 -1
  122. package/dist/components/month-picker.d.ts +1 -1
  123. package/dist/components/month-picker.js +6 -6
  124. package/dist/components/month-picker.js.map +1 -1
  125. package/dist/components/multi-entity-combobox.js +2 -2
  126. package/dist/components/multi-entity-combobox.js.map +1 -1
  127. package/dist/components/multi-select.js +2 -6
  128. package/dist/components/multi-select.js.map +1 -1
  129. package/dist/components/number-input.js +2 -2
  130. package/dist/components/number-input.js.map +1 -1
  131. package/dist/components/page-header-layout.d.ts +18 -0
  132. package/dist/components/page-header-layout.js +23 -0
  133. package/dist/components/page-header-layout.js.map +1 -0
  134. package/dist/components/page-header-skeleton.d.ts +41 -0
  135. package/dist/components/page-header-skeleton.js +52 -0
  136. package/dist/components/page-header-skeleton.js.map +1 -0
  137. package/dist/components/page-header.js +4 -17
  138. package/dist/components/page-header.js.map +1 -1
  139. package/dist/components/popover.js +7 -2
  140. package/dist/components/popover.js.map +1 -1
  141. package/dist/components/release-notes-labels.d.ts +16 -0
  142. package/dist/components/release-notes-labels.js +18 -0
  143. package/dist/components/release-notes-labels.js.map +1 -0
  144. package/dist/components/release-notes.d.ts +65 -0
  145. package/dist/components/release-notes.js +65 -0
  146. package/dist/components/release-notes.js.map +1 -0
  147. package/dist/components/select.js +2 -2
  148. package/dist/components/select.js.map +1 -1
  149. package/dist/components/series-chart-labels.d.ts +9 -0
  150. package/dist/components/series-chart-labels.js +3 -1
  151. package/dist/components/series-chart-labels.js.map +1 -1
  152. package/dist/components/series-chart.d.ts +5 -0
  153. package/dist/components/series-chart.js +89 -36
  154. package/dist/components/series-chart.js.map +1 -1
  155. package/dist/components/toggle-group.js +3 -2
  156. package/dist/components/toggle-group.js.map +1 -1
  157. package/dist/components/treemap-layout.js.map +1 -1
  158. package/dist/components/treemap.d.ts +17 -15
  159. package/dist/components/treemap.js +167 -85
  160. package/dist/components/treemap.js.map +1 -1
  161. package/dist/eslint/index.js +1 -1
  162. package/dist/eslint/role-utilities.d.ts +2 -2
  163. package/dist/eslint/role-utilities.js.map +1 -1
  164. package/dist/feedback/feedback-inbox-page.d.ts +260 -0
  165. package/dist/feedback/feedback-inbox-page.js +207 -0
  166. package/dist/feedback/feedback-inbox-page.js.map +1 -0
  167. package/dist/feedback/feedback-vocabulary.js +2 -2
  168. package/dist/feedback/feedback-vocabulary.js.map +1 -1
  169. package/dist/feedback.d.ts +1 -0
  170. package/dist/feedback.js +6 -0
  171. package/dist/feedback.js.map +1 -1
  172. package/dist/hooks/use-debounce.d.ts +32 -5
  173. package/dist/hooks/use-debounce.js +6 -5
  174. package/dist/hooks/use-debounce.js.map +1 -1
  175. package/dist/hooks/use-file-picker.d.ts +3 -1
  176. package/dist/hooks/use-file-picker.js.map +1 -1
  177. package/dist/hooks/use-focus-trap.d.ts +19 -3
  178. package/dist/hooks/use-focus-trap.js +15 -5
  179. package/dist/hooks/use-focus-trap.js.map +1 -1
  180. package/dist/hooks/use-has-camera.d.ts +36 -0
  181. package/dist/hooks/use-has-camera.js +53 -0
  182. package/dist/hooks/use-has-camera.js.map +1 -0
  183. package/dist/hooks/use-hotkey.js +1 -10
  184. package/dist/hooks/use-hotkey.js.map +1 -1
  185. package/dist/hooks/use-overlay-history.d.ts +6 -1
  186. package/dist/hooks/use-overlay-history.js +10 -2
  187. package/dist/hooks/use-overlay-history.js.map +1 -1
  188. package/dist/i18n/defaults.js +11 -1
  189. package/dist/i18n/defaults.js.map +1 -1
  190. package/dist/i18n/german.js +75 -3
  191. package/dist/i18n/german.js.map +1 -1
  192. package/dist/i18n/kit-labels.d.ts +20 -0
  193. package/dist/i18n/kit-labels.js.map +1 -1
  194. package/dist/i18n/locales/en.js +92 -4
  195. package/dist/i18n/locales/en.js.map +3 -3
  196. package/dist/i18n/locales/es.js +71 -3
  197. package/dist/i18n/locales/es.js.map +1 -1
  198. package/dist/i18n/locales/fr.js +72 -2
  199. package/dist/i18n/locales/fr.js.map +1 -1
  200. package/dist/i18n/locales/hu.js +74 -3
  201. package/dist/i18n/locales/hu.js.map +1 -1
  202. package/dist/i18n/locales/it.js +74 -3
  203. package/dist/i18n/locales/it.js.map +1 -1
  204. package/dist/i18n/locales/zh.js +71 -3
  205. package/dist/i18n/locales/zh.js.map +1 -1
  206. package/dist/i18n/review.js +22 -1
  207. package/dist/i18n/review.js.map +1 -1
  208. package/dist/index.d.ts +24 -5
  209. package/dist/index.js +35 -1
  210. package/dist/index.js.map +1 -1
  211. package/dist/landing/landing-labels.d.ts +8 -0
  212. package/dist/landing/landing-labels.js +2 -1
  213. package/dist/landing/landing-labels.js.map +1 -1
  214. package/dist/lib/changelog.d.ts +130 -0
  215. package/dist/lib/changelog.js +137 -0
  216. package/dist/lib/changelog.js.map +1 -0
  217. package/dist/lib/clipboard-minus.js +2 -2
  218. package/dist/lib/clipboard-minus.js.map +1 -1
  219. package/dist/lib/dates.d.ts +29 -3
  220. package/dist/lib/dates.js +41 -12
  221. package/dist/lib/dates.js.map +1 -1
  222. package/dist/lib/editable-content.d.ts +33 -0
  223. package/dist/lib/editable-content.js +15 -0
  224. package/dist/lib/editable-content.js.map +1 -0
  225. package/dist/lib/focus-left.d.ts +47 -1
  226. package/dist/lib/focus-left.js +11 -2
  227. package/dist/lib/focus-left.js.map +1 -1
  228. package/dist/lib/server-wake.d.ts +49 -9
  229. package/dist/lib/server-wake.js +25 -14
  230. package/dist/lib/server-wake.js.map +1 -1
  231. package/dist/lib/session-refresh.d.ts +53 -0
  232. package/dist/lib/session-refresh.js +27 -1
  233. package/dist/lib/session-refresh.js.map +1 -1
  234. package/dist/rhf/fields.js +3 -3
  235. package/dist/rhf/fields.js.map +1 -1
  236. package/dist/shell/app-shell.d.ts +25 -1
  237. package/dist/shell/app-shell.js +3 -1
  238. package/dist/shell/app-shell.js.map +1 -1
  239. package/dist/shell/dev-menu.d.ts +3 -0
  240. package/dist/shell/dev-menu.js +4 -2
  241. package/dist/shell/dev-menu.js.map +1 -1
  242. package/dist/shell/held-changes-banner-labels.d.ts +23 -0
  243. package/dist/shell/held-changes-banner-labels.js +14 -0
  244. package/dist/shell/held-changes-banner-labels.js.map +1 -0
  245. package/dist/shell/held-changes-banner.d.ts +75 -0
  246. package/dist/shell/held-changes-banner.js +106 -0
  247. package/dist/shell/held-changes-banner.js.map +1 -0
  248. package/dist/shell/sync-status-indicator.d.ts +27 -12
  249. package/dist/shell/sync-status-indicator.js +13 -4
  250. package/dist/shell/sync-status-indicator.js.map +1 -1
  251. package/dist/shell/top-bar-parts-labels.d.ts +5 -0
  252. package/dist/shell/top-bar-parts-labels.js +3 -1
  253. package/dist/shell/top-bar-parts-labels.js.map +1 -1
  254. package/dist/shell.d.ts +2 -0
  255. package/dist/shell.js +3 -0
  256. package/dist/shell.js.map +1 -1
  257. package/dist/sync/engine.d.ts +11 -2
  258. package/dist/sync/engine.js +13 -5
  259. package/dist/sync/engine.js.map +1 -1
  260. package/dist/sync/hooks.d.ts +3 -2
  261. package/dist/sync/hooks.js +4 -2
  262. package/dist/sync/hooks.js.map +1 -1
  263. package/dist/testing/css-variables.generated.d.ts +2 -2
  264. package/dist/testing/css-variables.generated.js +1 -1
  265. package/dist/testing/css-variables.generated.js.map +1 -1
  266. package/dist/theme/chart-palette.d.ts +18 -0
  267. package/dist/theme/chart-palette.js +17 -1
  268. package/dist/theme/chart-palette.js.map +1 -1
  269. package/dist/theme/contrast-tokens.d.ts +3 -3
  270. package/dist/theme/contrast-tokens.js.map +1 -1
  271. package/dist/theme/contrast.d.ts +4 -4
  272. package/dist/theme/contrast.js.map +1 -1
  273. package/dist/tour/tour-overlay.js +2 -1
  274. package/dist/tour/tour-overlay.js.map +1 -1
  275. package/package.json +5 -9
  276. package/tokens.css +19 -54
  277. package/src/account/account-parts.ts +0 -47
  278. package/src/account/account-settings-labels.ts +0 -240
  279. package/src/account/account-settings.tsx +0 -698
  280. package/src/account/data-export-setting-labels.ts +0 -20
  281. package/src/account/data-export-setting.tsx +0 -200
  282. package/src/account/delete-account-setting-labels.ts +0 -33
  283. package/src/account/delete-account-setting.tsx +0 -342
  284. package/src/account/email-change-setting-labels.ts +0 -31
  285. package/src/account/email-change-setting.tsx +0 -443
  286. package/src/account/passkeys-setting.tsx +0 -445
  287. package/src/account/sessions-setting-labels.ts +0 -24
  288. package/src/account/sessions-setting.tsx +0 -283
  289. package/src/admin/admin-action-confirm-labels.ts +0 -19
  290. package/src/admin/admin-action-confirm.tsx +0 -509
  291. package/src/admin/admin-action-log-labels.ts +0 -83
  292. package/src/admin/admin-action-log.tsx +0 -464
  293. package/src/admin/admin-area-labels.ts +0 -114
  294. package/src/admin/admin-forbidden.tsx +0 -75
  295. package/src/admin/admin-overview.tsx +0 -258
  296. package/src/admin/admin-parts.ts +0 -68
  297. package/src/admin/admin-sections.tsx +0 -208
  298. package/src/admin/admin-tool-links.tsx +0 -90
  299. package/src/admin/invitations-panel-labels.ts +0 -31
  300. package/src/admin/invitations-panel.tsx +0 -516
  301. package/src/admin/mail-test-card-labels.ts +0 -19
  302. package/src/admin/mail-test-card.tsx +0 -189
  303. package/src/admin/plan-change-labels.ts +0 -5
  304. package/src/admin/plan-change.tsx +0 -474
  305. package/src/admin/reviewer-scope-editor-labels.ts +0 -16
  306. package/src/admin/reviewer-scope-editor.tsx +0 -224
  307. package/src/admin/role-select-labels.ts +0 -16
  308. package/src/admin/role-select.tsx +0 -282
  309. package/src/admin/transfer-ownership-dialog-labels.ts +0 -20
  310. package/src/admin/transfer-ownership-dialog.tsx +0 -162
  311. package/src/admin/user-roster-labels.ts +0 -17
  312. package/src/admin/user-roster.tsx +0 -559
  313. package/src/auth/accept-invitation-labels.ts +0 -21
  314. package/src/auth/accept-invitation.tsx +0 -210
  315. package/src/auth/auth-errors-labels.ts +0 -23
  316. package/src/auth/auth-errors.ts +0 -439
  317. package/src/auth/complete-name-dialog-labels.ts +0 -16
  318. package/src/auth/complete-name-dialog.tsx +0 -253
  319. package/src/auth/email-tag.ts +0 -75
  320. package/src/auth/forgot-password-form-labels.ts +0 -20
  321. package/src/auth/forgot-password-form.tsx +0 -221
  322. package/src/auth/form-rules.ts +0 -40
  323. package/src/auth/new-password-fields.tsx +0 -85
  324. package/src/auth/not-found-page-labels.ts +0 -12
  325. package/src/auth/not-found-page.tsx +0 -95
  326. package/src/auth/register-form-labels.ts +0 -31
  327. package/src/auth/register-form.tsx +0 -456
  328. package/src/auth/reset-password-form-labels.ts +0 -27
  329. package/src/auth/reset-password-form.tsx +0 -341
  330. package/src/auth/sign-in-form-labels.ts +0 -44
  331. package/src/auth/sign-in-form.tsx +0 -858
  332. package/src/auth/status-parts.tsx +0 -132
  333. package/src/auth/verify-email-labels.ts +0 -26
  334. package/src/auth/verify-email.tsx +0 -445
  335. package/src/billing/billing-banner.tsx +0 -258
  336. package/src/billing/billing-labels.ts +0 -381
  337. package/src/billing/billing-lock.ts +0 -108
  338. package/src/billing/billing-overview.ts +0 -157
  339. package/src/billing/billing-standing.ts +0 -80
  340. package/src/billing/cancel-request.ts +0 -97
  341. package/src/billing/cancel-subscription.tsx +0 -98
  342. package/src/billing/checkout-processing.ts +0 -394
  343. package/src/billing/checkout-return.ts +0 -90
  344. package/src/billing/pay-page.ts +0 -330
  345. package/src/billing/plan-card.tsx +0 -562
  346. package/src/billing/plan-change-labels.ts +0 -66
  347. package/src/billing/plan-limit-notice.tsx +0 -148
  348. package/src/billing/plan-limit-toast.tsx +0 -90
  349. package/src/billing/plan-limit.ts +0 -52
  350. package/src/billing/plan-price.ts +0 -98
  351. package/src/billing/plan-switch.tsx +0 -216
  352. package/src/billing/provider-page.ts +0 -84
  353. package/src/billing/subscription-actions.tsx +0 -247
  354. package/src/billing/subscription-status-chip.tsx +0 -95
  355. package/src/chart.ts +0 -103
  356. package/src/components/account-chips-labels.ts +0 -16
  357. package/src/components/account-chips.tsx +0 -474
  358. package/src/components/alert-banner.tsx +0 -670
  359. package/src/components/amount-input.tsx +0 -816
  360. package/src/components/appearance-labels.ts +0 -63
  361. package/src/components/authed-image-labels.ts +0 -11
  362. package/src/components/authed-image.tsx +0 -209
  363. package/src/components/autocomplete.tsx +0 -645
  364. package/src/components/breadcrumbs-labels.ts +0 -10
  365. package/src/components/breadcrumbs.tsx +0 -205
  366. package/src/components/bulk-action-bar-labels.ts +0 -11
  367. package/src/components/bulk-action-bar.tsx +0 -443
  368. package/src/components/button-group.tsx +0 -223
  369. package/src/components/button-look.ts +0 -256
  370. package/src/components/button.tsx +0 -339
  371. package/src/components/calculator.tsx +0 -341
  372. package/src/components/calendar-heatmap-labels.ts +0 -15
  373. package/src/components/calendar-heatmap.tsx +0 -600
  374. package/src/components/card.tsx +0 -377
  375. package/src/components/chart-edge.ts +0 -106
  376. package/src/components/chart-figure.tsx +0 -35
  377. package/src/components/chart-height.ts +0 -30
  378. package/src/components/chart-zoom-core.tsx +0 -627
  379. package/src/components/chart-zoom.tsx +0 -22
  380. package/src/components/chart.tsx +0 -554
  381. package/src/components/checkbox-group.tsx +0 -247
  382. package/src/components/checkbox.tsx +0 -346
  383. package/src/components/chip-input.tsx +0 -370
  384. package/src/components/chip-labels.ts +0 -13
  385. package/src/components/chip.tsx +0 -843
  386. package/src/components/choice-card.tsx +0 -544
  387. package/src/components/column-mapper-labels.ts +0 -38
  388. package/src/components/column-mapper.tsx +0 -655
  389. package/src/components/combobox-core.tsx +0 -1321
  390. package/src/components/combobox-suggestions.tsx +0 -131
  391. package/src/components/combobox.tsx +0 -716
  392. package/src/components/confirm-context.ts +0 -7
  393. package/src/components/confirm-dialog-labels.ts +0 -13
  394. package/src/components/confirm-dialog.tsx +0 -341
  395. package/src/components/copy-button-labels.ts +0 -13
  396. package/src/components/copy-button.tsx +0 -192
  397. package/src/components/country-select-labels.ts +0 -11
  398. package/src/components/country-select.tsx +0 -539
  399. package/src/components/currency-option-list.tsx +0 -188
  400. package/src/components/currency-select.tsx +0 -343
  401. package/src/components/danger-confirm-labels.ts +0 -20
  402. package/src/components/danger-confirm.tsx +0 -987
  403. package/src/components/data-table-cells.tsx +0 -118
  404. package/src/components/data-table-column-settings.tsx +0 -198
  405. package/src/components/data-table-filter-popover.tsx +0 -289
  406. package/src/components/data-table-filters.ts +0 -315
  407. package/src/components/data-table-fit.ts +0 -301
  408. package/src/components/data-table-groups.tsx +0 -288
  409. package/src/components/data-table-head.tsx +0 -280
  410. package/src/components/data-table-labels.ts +0 -198
  411. package/src/components/data-table-leading-row.tsx +0 -58
  412. package/src/components/data-table-mobile.tsx +0 -1117
  413. package/src/components/data-table-pagination.tsx +0 -202
  414. package/src/components/data-table-resize.ts +0 -188
  415. package/src/components/data-table-row-actions.tsx +0 -302
  416. package/src/components/data-table-row.tsx +0 -496
  417. package/src/components/data-table-selection.ts +0 -71
  418. package/src/components/data-table-shared.tsx +0 -287
  419. package/src/components/data-table-sort.ts +0 -163
  420. package/src/components/data-table-virtual.ts +0 -576
  421. package/src/components/data-table.tsx +0 -2598
  422. package/src/components/date-field.tsx +0 -684
  423. package/src/components/date-format-setting.tsx +0 -64
  424. package/src/components/date-picker.tsx +0 -404
  425. package/src/components/date-range-picker.tsx +0 -518
  426. package/src/components/description-list-labels.ts +0 -9
  427. package/src/components/description-list.tsx +0 -386
  428. package/src/components/dialog-frame-labels.ts +0 -7
  429. package/src/components/dialog-frame.tsx +0 -284
  430. package/src/components/disclosure.tsx +0 -476
  431. package/src/components/dropdown.tsx +0 -461
  432. package/src/components/empty-state.tsx +0 -136
  433. package/src/components/entity-combobox.tsx +0 -422
  434. package/src/components/error-boundary-labels.ts +0 -20
  435. package/src/components/error-boundary.tsx +0 -675
  436. package/src/components/facing-pair.ts +0 -93
  437. package/src/components/field-base-labels.ts +0 -20
  438. package/src/components/field-base.tsx +0 -656
  439. package/src/components/field-parts.tsx +0 -825
  440. package/src/components/field-strip.tsx +0 -129
  441. package/src/components/field.tsx +0 -206
  442. package/src/components/file-button.tsx +0 -295
  443. package/src/components/file-dropzone.tsx +0 -559
  444. package/src/components/floating-panel-labels.ts +0 -10
  445. package/src/components/floating-panel.tsx +0 -828
  446. package/src/components/focus-ring.ts +0 -16
  447. package/src/components/form-actions-labels.ts +0 -11
  448. package/src/components/form-actions.tsx +0 -578
  449. package/src/components/full-bleed-dialog.tsx +0 -294
  450. package/src/components/grouped-picker.tsx +0 -184
  451. package/src/components/help-popover.tsx +0 -117
  452. package/src/components/hover-menu.tsx +0 -343
  453. package/src/components/iban-input-labels.ts +0 -14
  454. package/src/components/iban-input.tsx +0 -236
  455. package/src/components/icon-button.tsx +0 -959
  456. package/src/components/icon-picker-labels.ts +0 -13
  457. package/src/components/icon-picker.tsx +0 -232
  458. package/src/components/image-grid-labels.ts +0 -11
  459. package/src/components/image-grid.tsx +0 -202
  460. package/src/components/inline-confirm.tsx +0 -116
  461. package/src/components/inline-edit-field-labels.ts +0 -11
  462. package/src/components/inline-edit-field.tsx +0 -552
  463. package/src/components/inline-entity-combobox.tsx +0 -849
  464. package/src/components/input.tsx +0 -394
  465. package/src/components/jump-calendar.tsx +0 -265
  466. package/src/components/language-select.tsx +0 -93
  467. package/src/components/legal-labels.ts +0 -105
  468. package/src/components/legal-page.tsx +0 -711
  469. package/src/components/legal.tsx +0 -668
  470. package/src/components/lightbox-labels.ts +0 -18
  471. package/src/components/lightbox.tsx +0 -399
  472. package/src/components/line-items-labels.ts +0 -14
  473. package/src/components/line-items.tsx +0 -602
  474. package/src/components/list-labels.ts +0 -12
  475. package/src/components/list.tsx +0 -870
  476. package/src/components/loading-state.tsx +0 -78
  477. package/src/components/measured-grid-labels.ts +0 -25
  478. package/src/components/measured-grid.tsx +0 -837
  479. package/src/components/menu-item.tsx +0 -241
  480. package/src/components/mini-calendar-labels.ts +0 -17
  481. package/src/components/mini-calendar.tsx +0 -792
  482. package/src/components/modal.tsx +0 -534
  483. package/src/components/money-draft.ts +0 -83
  484. package/src/components/money-field.tsx +0 -76
  485. package/src/components/month-grid.tsx +0 -229
  486. package/src/components/month-picker-labels.ts +0 -22
  487. package/src/components/month-picker.tsx +0 -1087
  488. package/src/components/multi-entity-combobox.tsx +0 -369
  489. package/src/components/multi-select.tsx +0 -376
  490. package/src/components/nav-pills.tsx +0 -198
  491. package/src/components/number-field.tsx +0 -327
  492. package/src/components/number-input.tsx +0 -559
  493. package/src/components/numeric-field.ts +0 -169
  494. package/src/components/numpad-sheet.tsx +0 -285
  495. package/src/components/one-time-code-input.tsx +0 -270
  496. package/src/components/page-contents-labels.ts +0 -9
  497. package/src/components/page-contents.tsx +0 -282
  498. package/src/components/page-header-context.ts +0 -8
  499. package/src/components/page-header.tsx +0 -298
  500. package/src/components/password-strength-labels.ts +0 -22
  501. package/src/components/password-strength.tsx +0 -241
  502. package/src/components/phone-input-labels.ts +0 -10
  503. package/src/components/phone-input.tsx +0 -282
  504. package/src/components/picker-sheet.tsx +0 -330
  505. package/src/components/pie-chart-labels.ts +0 -40
  506. package/src/components/pie-chart.tsx +0 -480
  507. package/src/components/popover-labels.ts +0 -14
  508. package/src/components/popover.tsx +0 -268
  509. package/src/components/progress-bar-labels.ts +0 -10
  510. package/src/components/progress-bar.tsx +0 -479
  511. package/src/components/qr-code.tsx +0 -76
  512. package/src/components/reauth-dialog-labels.ts +0 -13
  513. package/src/components/reauth-dialog.tsx +0 -265
  514. package/src/components/row-actions-labels.ts +0 -12
  515. package/src/components/row-actions.tsx +0 -795
  516. package/src/components/scroll-area.tsx +0 -123
  517. package/src/components/search-field.tsx +0 -192
  518. package/src/components/select.tsx +0 -294
  519. package/src/components/separator.tsx +0 -33
  520. package/src/components/series-chart-axes.ts +0 -342
  521. package/src/components/series-chart-budget.ts +0 -150
  522. package/src/components/series-chart-labels.ts +0 -33
  523. package/src/components/series-chart-thin.ts +0 -180
  524. package/src/components/series-chart-ticks.ts +0 -194
  525. package/src/components/series-chart.tsx +0 -1906
  526. package/src/components/server-wake-labels.ts +0 -11
  527. package/src/components/server-wake.tsx +0 -129
  528. package/src/components/settings-fields.tsx +0 -237
  529. package/src/components/share-card-labels.ts +0 -30
  530. package/src/components/share-card.tsx +0 -675
  531. package/src/components/signature-pad-labels.ts +0 -24
  532. package/src/components/signature-pad.tsx +0 -747
  533. package/src/components/signed-amount-labels.ts +0 -10
  534. package/src/components/signed-amount.tsx +0 -336
  535. package/src/components/skeleton.tsx +0 -80
  536. package/src/components/slider.tsx +0 -338
  537. package/src/components/sparkline-labels.ts +0 -14
  538. package/src/components/sparkline.tsx +0 -322
  539. package/src/components/spinner.tsx +0 -81
  540. package/src/components/stat-tile-labels.ts +0 -15
  541. package/src/components/stat-tile.tsx +0 -754
  542. package/src/components/status-dot.tsx +0 -170
  543. package/src/components/swatch-picker-labels.ts +0 -10
  544. package/src/components/swatch-picker.tsx +0 -283
  545. package/src/components/swipeable-row.tsx +0 -386
  546. package/src/components/switch.tsx +0 -273
  547. package/src/components/table-skeleton.tsx +0 -136
  548. package/src/components/table.tsx +0 -647
  549. package/src/components/tabs-labels.ts +0 -13
  550. package/src/components/tabs.tsx +0 -693
  551. package/src/components/text-link.tsx +0 -359
  552. package/src/components/text.tsx +0 -150
  553. package/src/components/textarea.tsx +0 -330
  554. package/src/components/tile-radio.tsx +0 -332
  555. package/src/components/time-input.tsx +0 -121
  556. package/src/components/toast-labels.ts +0 -12
  557. package/src/components/toast.tsx +0 -519
  558. package/src/components/toggle-group.tsx +0 -752
  559. package/src/components/toggle-legend.tsx +0 -394
  560. package/src/components/tooltip.tsx +0 -1149
  561. package/src/components/translation-review-editor.tsx +0 -290
  562. package/src/components/translation-review-labels.ts +0 -181
  563. package/src/components/translation-review-parts.tsx +0 -272
  564. package/src/components/translation-review.tsx +0 -1240
  565. package/src/components/tree-view.tsx +0 -589
  566. package/src/components/treemap-labels.ts +0 -47
  567. package/src/components/treemap-layout.ts +0 -210
  568. package/src/components/treemap.tsx +0 -1184
  569. package/src/components/trigger-aria.ts +0 -44
  570. package/src/components/use-anchor-dir.ts +0 -20
  571. package/src/components/use-mobile-reveal.ts +0 -62
  572. package/src/components/use-table-state.ts +0 -753
  573. package/src/components/user-avatar.tsx +0 -116
  574. package/src/components/wizard-stepper.tsx +0 -42
  575. package/src/components/write-lock-labels.ts +0 -10
  576. package/src/components/write-lock.tsx +0 -253
  577. package/src/currencies.ts +0 -90
  578. package/src/data-table.ts +0 -42
  579. package/src/demo/demo-banner.tsx +0 -153
  580. package/src/demo/demo-countdown.ts +0 -136
  581. package/src/demo/demo-ended.tsx +0 -90
  582. package/src/demo/demo-labels.ts +0 -78
  583. package/src/demo/demo-session.ts +0 -32
  584. package/src/demo/demo-start.tsx +0 -156
  585. package/src/eslint/index.ts +0 -161
  586. package/src/eslint/role-utilities.generated.ts +0 -146
  587. package/src/eslint/role-utilities.ts +0 -233
  588. package/src/feedback/feedback-attachment-download.tsx +0 -77
  589. package/src/feedback/feedback-attachment-labels.ts +0 -37
  590. package/src/feedback/feedback-attachment.tsx +0 -1239
  591. package/src/feedback/feedback-capture.ts +0 -287
  592. package/src/feedback/feedback-comment-thread.tsx +0 -353
  593. package/src/feedback/feedback-context-labels.ts +0 -11
  594. package/src/feedback/feedback-context.tsx +0 -245
  595. package/src/feedback/feedback-crash.ts +0 -547
  596. package/src/feedback/feedback-diagnostics.tsx +0 -41
  597. package/src/feedback/feedback-dialog-labels.ts +0 -29
  598. package/src/feedback/feedback-dialog.tsx +0 -452
  599. package/src/feedback/feedback-entry-file.tsx +0 -150
  600. package/src/feedback/feedback-inbox.tsx +0 -552
  601. package/src/feedback/feedback-labels.ts +0 -144
  602. package/src/feedback/feedback-menu-labels.ts +0 -12
  603. package/src/feedback/feedback-menu.tsx +0 -177
  604. package/src/feedback/feedback-mutation.ts +0 -20
  605. package/src/feedback/feedback-page-link.ts +0 -90
  606. package/src/feedback/feedback-public-labels.ts +0 -81
  607. package/src/feedback/feedback-public-list.tsx +0 -524
  608. package/src/feedback/feedback-public-switch.tsx +0 -102
  609. package/src/feedback/feedback-public-types.ts +0 -101
  610. package/src/feedback/feedback-record.ts +0 -428
  611. package/src/feedback/feedback-replies-context.ts +0 -9
  612. package/src/feedback/feedback-replies.tsx +0 -343
  613. package/src/feedback/feedback-rework-entry-chip.tsx +0 -18
  614. package/src/feedback/feedback-row-detail-labels.ts +0 -31
  615. package/src/feedback/feedback-row-detail.tsx +0 -871
  616. package/src/feedback/feedback-status-undo.ts +0 -109
  617. package/src/feedback/feedback-submit-dialog.tsx +0 -131
  618. package/src/feedback/feedback-submit.tsx +0 -270
  619. package/src/feedback/feedback-swipe.tsx +0 -192
  620. package/src/feedback/feedback-table-labels.ts +0 -27
  621. package/src/feedback/feedback-table.tsx +0 -912
  622. package/src/feedback/feedback-thread-labels.ts +0 -22
  623. package/src/feedback/feedback-thread-parts-labels.ts +0 -41
  624. package/src/feedback/feedback-thread.tsx +0 -905
  625. package/src/feedback/feedback-vocabulary.ts +0 -263
  626. package/src/feedback/feedback-vote-button.tsx +0 -124
  627. package/src/feedback.ts +0 -116
  628. package/src/hooks/use-anchored-panel.ts +0 -396
  629. package/src/hooks/use-anchored-rect.ts +0 -77
  630. package/src/hooks/use-announce.ts +0 -85
  631. package/src/hooks/use-authed-src.ts +0 -167
  632. package/src/hooks/use-body-scroll-lock.ts +0 -119
  633. package/src/hooks/use-breakpoint.ts +0 -133
  634. package/src/hooks/use-close-transition.ts +0 -107
  635. package/src/hooks/use-copy-to-clipboard.ts +0 -122
  636. package/src/hooks/use-debounce.ts +0 -114
  637. package/src/hooks/use-dismiss.ts +0 -371
  638. package/src/hooks/use-document-title.ts +0 -33
  639. package/src/hooks/use-file-drop.ts +0 -121
  640. package/src/hooks/use-file-picker-labels.ts +0 -28
  641. package/src/hooks/use-file-picker.tsx +0 -359
  642. package/src/hooks/use-focus-trap.ts +0 -199
  643. package/src/hooks/use-hotkey.ts +0 -212
  644. package/src/hooks/use-large-text.ts +0 -41
  645. package/src/hooks/use-long-press.ts +0 -140
  646. package/src/hooks/use-media-query.ts +0 -39
  647. package/src/hooks/use-mounted.ts +0 -39
  648. package/src/hooks/use-noindex.ts +0 -37
  649. package/src/hooks/use-overlay-history.ts +0 -714
  650. package/src/hooks/use-row-swipe.ts +0 -207
  651. package/src/hooks/use-search-param-state.ts +0 -434
  652. package/src/hooks/use-windowed-rows.ts +0 -225
  653. package/src/i18n/defaults.ts +0 -267
  654. package/src/i18n/german.ts +0 -2059
  655. package/src/i18n/kit-labels.tsx +0 -1003
  656. package/src/i18n/languages.ts +0 -349
  657. package/src/i18n/locales/de-CH.ts +0 -24
  658. package/src/i18n/locales/en.ts +0 -267
  659. package/src/i18n/locales/es.ts +0 -1999
  660. package/src/i18n/locales/fr.ts +0 -2037
  661. package/src/i18n/locales/hu.ts +0 -2004
  662. package/src/i18n/locales/it.ts +0 -2014
  663. package/src/i18n/locales/zh.ts +0 -1912
  664. package/src/i18n/plurals.ts +0 -86
  665. package/src/i18n/review.ts +0 -475
  666. package/src/i18n/shared-labels.ts +0 -138
  667. package/src/i18n/swiss.ts +0 -29
  668. package/src/index.ts +0 -1191
  669. package/src/landing/access.ts +0 -93
  670. package/src/landing/landing-actions.tsx +0 -97
  671. package/src/landing/landing-labels.ts +0 -59
  672. package/src/landing/landing-sections.tsx +0 -341
  673. package/src/landing/page-seo.ts +0 -261
  674. package/src/landing/public-header.tsx +0 -121
  675. package/src/landing/public-page.tsx +0 -106
  676. package/src/landing/routing.tsx +0 -225
  677. package/src/lib/broadcast.ts +0 -52
  678. package/src/lib/calc.ts +0 -323
  679. package/src/lib/chip-edge-snap.ts +0 -212
  680. package/src/lib/clipboard-minus.ts +0 -107
  681. package/src/lib/clipping.ts +0 -34
  682. package/src/lib/cn.ts +0 -28
  683. package/src/lib/column-mapping.ts +0 -234
  684. package/src/lib/countries.ts +0 -91
  685. package/src/lib/data-attributes.ts +0 -14
  686. package/src/lib/date-format.ts +0 -227
  687. package/src/lib/dates.ts +0 -288
  688. package/src/lib/day-format.ts +0 -96
  689. package/src/lib/decimal-marks.ts +0 -108
  690. package/src/lib/describe-failure.ts +0 -18
  691. package/src/lib/device-settings.ts +0 -147
  692. package/src/lib/direction.ts +0 -74
  693. package/src/lib/document-navigation.ts +0 -17
  694. package/src/lib/document-title.ts +0 -41
  695. package/src/lib/download.ts +0 -172
  696. package/src/lib/float-clearance.ts +0 -70
  697. package/src/lib/floating-stack.ts +0 -70
  698. package/src/lib/focus-left.ts +0 -156
  699. package/src/lib/format.ts +0 -585
  700. package/src/lib/http-status.ts +0 -38
  701. package/src/lib/iban.ts +0 -251
  702. package/src/lib/ime.ts +0 -24
  703. package/src/lib/intl-cache.ts +0 -27
  704. package/src/lib/iso-day.ts +0 -13
  705. package/src/lib/lazy-with-fallback.ts +0 -82
  706. package/src/lib/logger.ts +0 -69
  707. package/src/lib/minus.ts +0 -50
  708. package/src/lib/path-pattern.ts +0 -55
  709. package/src/lib/person-name.ts +0 -155
  710. package/src/lib/phone.ts +0 -208
  711. package/src/lib/plain-text.ts +0 -22
  712. package/src/lib/presence.ts +0 -18
  713. package/src/lib/qr-encode.ts +0 -444
  714. package/src/lib/quiet-focus.ts +0 -32
  715. package/src/lib/reduced-motion.ts +0 -22
  716. package/src/lib/refs.ts +0 -22
  717. package/src/lib/round.ts +0 -43
  718. package/src/lib/safe-storage.ts +0 -119
  719. package/src/lib/server-wake.ts +0 -315
  720. package/src/lib/session-refresh.ts +0 -472
  721. package/src/lib/share-format.ts +0 -18
  722. package/src/lib/status-tone.ts +0 -43
  723. package/src/lib/strip-fade.ts +0 -287
  724. package/src/lib/table-text.ts +0 -554
  725. package/src/lib/text-case.ts +0 -19
  726. package/src/lib/text-match.ts +0 -169
  727. package/src/lib/thenable.ts +0 -19
  728. package/src/lib/translation-review.ts +0 -769
  729. package/src/notifications/device-zone-report.ts +0 -67
  730. package/src/notifications/feedback-notification-types-labels.ts +0 -33
  731. package/src/notifications/feedback-notification-types.ts +0 -71
  732. package/src/notifications/notification-bell.tsx +0 -119
  733. package/src/notifications/notification-inbox.tsx +0 -309
  734. package/src/notifications/notification-parts.tsx +0 -81
  735. package/src/notifications/notification-types-setting.tsx +0 -406
  736. package/src/notifications/notification-types.ts +0 -89
  737. package/src/notifications/notifications-labels.ts +0 -287
  738. package/src/notifications/push-device-setting.tsx +0 -230
  739. package/src/notifications/push-devices-setting.tsx +0 -374
  740. package/src/notifications/push-worker.ts +0 -168
  741. package/src/notifications/quiet-hours-setting.tsx +0 -238
  742. package/src/notifications/unsubscribe-panel.tsx +0 -200
  743. package/src/notifications/use-push-device.ts +0 -448
  744. package/src/offline/local-first.ts +0 -100
  745. package/src/offline/pwa-update-prompt-labels.ts +0 -9
  746. package/src/offline/pwa-update-prompt.tsx +0 -78
  747. package/src/offline/query-persistence.ts +0 -391
  748. package/src/offline/service-worker-updates.ts +0 -81
  749. package/src/offline/shared-computer-labels.ts +0 -8
  750. package/src/offline/shared-computer.tsx +0 -87
  751. package/src/offline/sign-out-pending-dialog-labels.ts +0 -21
  752. package/src/offline/sign-out-pending-dialog.tsx +0 -135
  753. package/src/offline.ts +0 -37
  754. package/src/push-worker.ts +0 -25
  755. package/src/rhf/fields.tsx +0 -2187
  756. package/src/rhf/form-core.tsx +0 -324
  757. package/src/rhf/form.tsx +0 -12
  758. package/src/rhf/line-items.tsx +0 -135
  759. package/src/rhf/use-rhf-wizard-step.ts +0 -104
  760. package/src/rhf.ts +0 -21
  761. package/src/search/command-palette-labels.ts +0 -16
  762. package/src/search/command-palette.tsx +0 -624
  763. package/src/search/global-search-labels.ts +0 -13
  764. package/src/search/global-search.tsx +0 -660
  765. package/src/search/search-index.ts +0 -283
  766. package/src/search/use-command-key.ts +0 -23
  767. package/src/search.ts +0 -14
  768. package/src/settings/device-reset-setting-labels.ts +0 -20
  769. package/src/settings/device-reset-setting.tsx +0 -116
  770. package/src/settings/settings-card-classes.ts +0 -11
  771. package/src/settings/settings-catalogue.ts +0 -150
  772. package/src/settings/settings-context.ts +0 -33
  773. package/src/settings/settings-heading.tsx +0 -67
  774. package/src/settings/settings-labels.ts +0 -87
  775. package/src/settings/settings-layout.tsx +0 -471
  776. package/src/settings/settings-section.tsx +0 -108
  777. package/src/settings/use-account-appearance.ts +0 -148
  778. package/src/settings/use-account-language.ts +0 -146
  779. package/src/settings/use-settings-focus.ts +0 -128
  780. package/src/settings/use-settings-route.ts +0 -258
  781. package/src/shell/account-menu-language.tsx +0 -130
  782. package/src/shell/account-menu-text-size.tsx +0 -80
  783. package/src/shell/admin-menu.tsx +0 -183
  784. package/src/shell/app-shell-labels.ts +0 -11
  785. package/src/shell/app-shell.tsx +0 -1560
  786. package/src/shell/auth-layout.tsx +0 -186
  787. package/src/shell/company-switcher-labels.ts +0 -13
  788. package/src/shell/company-switcher.tsx +0 -136
  789. package/src/shell/dev-menu.tsx +0 -257
  790. package/src/shell/fill-height.tsx +0 -45
  791. package/src/shell/language-code.ts +0 -5
  792. package/src/shell/option-switcher-menu.tsx +0 -84
  793. package/src/shell/sync-status-indicator.tsx +0 -303
  794. package/src/shell/top-bar-actions.tsx +0 -87
  795. package/src/shell/top-bar-brand.tsx +0 -78
  796. package/src/shell/top-bar-parts-labels.ts +0 -148
  797. package/src/shell/top-bar.tsx +0 -40
  798. package/src/shell/topbar-action-menu.tsx +0 -567
  799. package/src/shell/topbar-controls.tsx +0 -269
  800. package/src/shell/tour-menu.tsx +0 -187
  801. package/src/shell.ts +0 -108
  802. package/src/sync/db.ts +0 -129
  803. package/src/sync/engine.ts +0 -1011
  804. package/src/sync/hooks.ts +0 -98
  805. package/src/sync/testing.ts +0 -73
  806. package/src/sync/wire.ts +0 -61
  807. package/src/sync.ts +0 -37
  808. package/src/table-text.ts +0 -8
  809. package/src/testing/css-variables.generated.ts +0 -112
  810. package/src/testing/css-variables.ts +0 -189
  811. package/src/testing/index.ts +0 -29
  812. package/src/testing/react.ts +0 -58
  813. package/src/testing/tour.ts +0 -41
  814. package/src/testing/viewport.ts +0 -357
  815. package/src/theme/chart-palette.ts +0 -232
  816. package/src/theme/color.ts +0 -272
  817. package/src/theme/contrast-tokens.ts +0 -268
  818. package/src/theme/contrast.ts +0 -250
  819. package/src/theme/palette-derive.ts +0 -825
  820. package/src/theme/palette-presets.ts +0 -544
  821. package/src/theme/palette-store.ts +0 -108
  822. package/src/theme/text-size.ts +0 -289
  823. package/src/theme/theme-store.ts +0 -157
  824. package/src/tour/tour-catalogue-labels.ts +0 -75
  825. package/src/tour/tour-catalogue.tsx +0 -335
  826. package/src/tour/tour-dock.ts +0 -134
  827. package/src/tour/tour-engine.ts +0 -37
  828. package/src/tour/tour-gates.ts +0 -218
  829. package/src/tour/tour-guide-button.tsx +0 -64
  830. package/src/tour/tour-guide-labels.ts +0 -15
  831. package/src/tour/tour-info.ts +0 -144
  832. package/src/tour/tour-labels.ts +0 -23
  833. package/src/tour/tour-overlay.tsx +0 -1170
  834. package/src/tour/tour.tsx +0 -750
  835. package/src/tour/use-tour-progress.ts +0 -671
  836. package/src/tour/use-tour-url-sync.ts +0 -266
  837. package/src/tour.ts +0 -21
  838. package/src/vite-env.d.ts +0 -23
  839. package/src/wizard/stepper-nav.tsx +0 -360
  840. package/src/wizard/types.ts +0 -275
  841. package/src/wizard/use-wizard.ts +0 -560
  842. package/src/wizard/validation.ts +0 -39
  843. package/src/wizard/wizard-context.tsx +0 -74
  844. package/src/wizard/wizard-labels.ts +0 -29
  845. package/src/wizard/wizard-step.tsx +0 -76
  846. package/src/wizard/wizard-summary.tsx +0 -84
  847. package/src/wizard.ts +0 -15
@@ -1,464 +0,0 @@
1
- import type { ReactNode } from "react";
2
- import { cn } from "../lib/cn";
3
- import type { DateInput } from "../lib/format";
4
- import { useKitLabels } from "../i18n/kit-labels";
5
- import type { LabelOverride } from "../i18n/kit-labels";
6
- import { DateMark } from "../components/account-chips";
7
- import { Chip } from "../components/chip";
8
- import { Pagination } from "../components/data-table-pagination";
9
- import { Caption } from "../components/text";
10
- import { Button } from "../components/button";
11
- import { Spinner } from "../components/spinner";
12
- import { usePersonLabel } from "./admin-parts";
13
- import type { AdminPerson } from "./admin-parts";
14
- import { DEFAULT_ADMIN_ACTION_LOG_LABELS } from "./admin-action-log-labels";
15
-
16
- /**
17
- * The admin actions, as the audit table records them (docs/user-admin-harmonization.md
18
- * §2.3, §4.3): `GET /admin/actions?limit=&offset=&target=`, newest first, on the admin
19
- * page and filtered to one account from its row.
20
- *
21
- * Every app writes the same small `admin_actions` row in the transaction of the action
22
- * (keksdose and Kurvenschmiede had log lines; kastlan has an HTTP log with no named
23
- * action), so the vocabulary is shared — {@link AdminActionKind} — and an app's own
24
- * actions join it through `labels.actions`.
25
- *
26
- * What a row says, and what it never does: who, what, to whom, when, and a summary of the
27
- * `detail` the APP writes (ids, roles, counts — never content, §4.3). Three kinds of
28
- * actor: an admin; **the user themselves** (`deletion_request`: the actor is the target);
29
- * and **nobody** (the scheduled erasure, the hand-over at erasure, §2.7), said as
30
- * "automatically". After an erasure the target's name and address are scrubbed and the
31
- * row stays: it reads "an erased account".
32
- *
33
- * GROUPS (round 0.34, §11): Kurvenschmiede's teams, kastlan's companies and keksdose's
34
- * budgets are groups of accounts, and the vocabulary has words for what is done to one
35
- * (`group_create`, `group_rename`, `group_delete`) and to who is in it (`membership_add`,
36
- * `membership_role`, `membership_remove`). A row about the group itself has the group as
37
- * its `target`; a row about a person in it has the person as its target and the group as
38
- * its `group`, drawn after the person by its name alone, muted — no preposition, so no
39
- * language has to inflect the name. The kinds and codes say "group"; the labels say the
40
- * app's own noun, picked with `groupNoun` — whole phrases per noun, since a noun dropped
41
- * into one phrase breaks the participle's agreement in fr and it and the suffix in hu
42
- * (decision 4). A group with no name left reads as the noun's "a deleted team"; only a
43
- * missing PERSON is "an erased account".
44
- *
45
- * It never fetches: the page of rows and the paging are the app's.
46
- */
47
-
48
- /** The shared vocabulary of `admin_actions.action` (§4.3). */
49
- export type AdminActionKind =
50
- | "deactivate"
51
- | "reactivate"
52
- | "role"
53
- | "membership_remove"
54
- | "password_change_require"
55
- | "password_change_withdraw"
56
- | "mail_verification"
57
- | "mail_reset"
58
- | "reviewer"
59
- | "invite"
60
- | "invite_resend"
61
- | "invite_revoke"
62
- | "transfer"
63
- | "deletion_request"
64
- | "deletion_cancel"
65
- | "erase"
66
- // 0.32.1 (keksdose's 0.32 report): server-kit 0.6's `AdminAction.PLAN`, an operator's
67
- // plan change or grant (docs/billing-harmonization.md §6).
68
- | "plan"
69
- // 0.34 (§11.3): what is done to a group of accounts, and to who is in it — beside
70
- // `membership_remove`. server-kit 0.8's `AdminAction` has the same five.
71
- | "group_create"
72
- | "group_rename"
73
- | "group_delete"
74
- | "membership_add"
75
- | "membership_role"
76
- // 0.45 (admin §9.1.3): a group switched off or on again — kastlan's company PATCH
77
- // (`is_active`). server-kit 0.15's `AdminAction.GROUP_DEACTIVATE` / `GROUP_REACTIVATE`.
78
- | "group_deactivate"
79
- | "group_reactivate";
80
-
81
- /** Every {@link AdminActionKind}, in the contract's order. */
82
- export const ADMIN_ACTION_KINDS: readonly AdminActionKind[] = [
83
- "deactivate",
84
- "reactivate",
85
- "role",
86
- "membership_remove",
87
- "password_change_require",
88
- "password_change_withdraw",
89
- "mail_verification",
90
- "mail_reset",
91
- "reviewer",
92
- "invite",
93
- "invite_resend",
94
- "invite_revoke",
95
- "transfer",
96
- "deletion_request",
97
- "deletion_cancel",
98
- "erase",
99
- "plan",
100
- "group_create",
101
- "group_rename",
102
- "group_delete",
103
- "membership_add",
104
- "membership_role",
105
- "group_deactivate",
106
- "group_reactivate",
107
- ];
108
-
109
- /** The app's word for its groups (§11.5): Kurvenschmiede's teams, kastlan's companies,
110
- * keksdose's budgets; `group` is the neutral word. Picks the set of phrases the group
111
- * actions are said in. */
112
- export type AdminGroupNoun = "group" | "team" | "company" | "budget";
113
-
114
- /** The kinds said in the noun's words: the five of 0.34, `membership_remove`, and 0.45's
115
- * `group_deactivate` / `group_reactivate`. */
116
- type AdminGroupActionKind =
117
- | "group_create"
118
- | "group_rename"
119
- | "group_delete"
120
- | "group_deactivate"
121
- | "group_reactivate"
122
- | "membership_add"
123
- | "membership_role"
124
- | "membership_remove";
125
-
126
- const GROUP_ACTION_KINDS: ReadonlySet<string> = new Set<AdminGroupActionKind>([
127
- "group_create",
128
- "group_rename",
129
- "group_delete",
130
- "group_deactivate",
131
- "group_reactivate",
132
- "membership_add",
133
- "membership_role",
134
- "membership_remove",
135
- ]);
136
-
137
- /**
138
- * A group as a log target (§11.4): a row about the group itself (`group_*`, kastlan's
139
- * `plan`), or the `group` a person was added to, moved in or taken out of. The app joins
140
- * its `name` when the log is read — from the live group, else from its `group_delete`
141
- * row's stamp (`target_group_name`, decision 6) — as it joins a person's. With no name
142
- * left it reads as the noun's "a deleted team".
143
- */
144
- export interface AdminGroupTarget {
145
- kind: "group";
146
- id?: string | number | null;
147
- name?: string | null;
148
- }
149
-
150
- /** A target that is neither a person nor a group (§11.4): an app's own action on a demo
151
- * dataset or a setting, said by its `label`. */
152
- export interface AdminOtherTarget {
153
- kind: "other";
154
- /** What it was done to, in the app's words, as it is drawn. */
155
- label: string;
156
- /** The app's id for it, when it has one. Beyond §11.4's shape so that code reading
157
- * `entry.target.id` on any target — keksdose's filter, the showcase's — still
158
- * type-checks against the wider union. */
159
- id?: string | number | null;
160
- }
161
-
162
- /** Whether a target is a group. A person has no `kind`; an object whose `kind` is
163
- * anything else is read as a person too. */
164
- export function isGroupTarget(target: unknown): target is AdminGroupTarget {
165
- return typeof target === "object" && target !== null && (target as { kind?: unknown }).kind === "group";
166
- }
167
-
168
- function isOtherTarget(target: unknown): target is AdminOtherTarget {
169
- return typeof target === "object" && target !== null && (target as { kind?: unknown }).kind === "other";
170
- }
171
-
172
- /** One logged action — the app's `admin_actions` row with the people joined in. */
173
- export interface AdminActionLogEntry {
174
- id: string | number;
175
- /** When, as the row's `at`. */
176
- at: DateInput;
177
- /**
178
- * Who did it: a person; `"self"` — the user themselves (a deletion request); or `null`
179
- * — nobody, the scheduled job. A person whose `id` (or address) is the target's is
180
- * read as `"self"` too.
181
- */
182
- actor: AdminPerson | "self" | null;
183
- /** A {@link AdminActionKind}, or one of the app's own (named in `labels.actions`). */
184
- action: AdminActionKind | (string & {});
185
- /**
186
- * What it was done to (§11.4): a person (no `kind`) — `null`, or a person with nothing
187
- * left in it, is "an erased account", and an invitation's person is its address
188
- * (`target_email`); a group (`kind: "group"`), for a row about the group itself; or
189
- * something else (`kind: "other"`), said by its label. Left out: nothing is drawn
190
- * (until 0.34 it read as erased).
191
- */
192
- target?: AdminPerson | AdminGroupTarget | AdminOtherTarget | null;
193
- /** The group a `membership_*` or invitation row happened in, drawn after the person
194
- * by its name (§11.4). */
195
- group?: AdminGroupTarget | null;
196
- /** The `detail` in the app's words — "Member → Admin", "12 items to Ben Example". */
197
- detail?: ReactNode;
198
- /**
199
- * 0.45 (admin §9.4, Marcel 2026-10-19): a `group_rename` row's `detail.{from, to}` —
200
- * kastlan's company rename logs both names. With both, the row reads "Company renamed
201
- * from A to B" (`renamedFromTo`) in place of the target. A rename that logs `{}` (KS's
202
- * team rename: never a name) leaves it out and reads "Team renamed" and the group.
203
- */
204
- renamed?: { from?: string | null; to?: string | null } | null;
205
- }
206
-
207
- /** The `adminActionLog` namespace. */
208
- export interface AdminActionLogLabels {
209
- /** The list's accessible name. */
210
- title: string;
211
- empty: string;
212
- loading: string;
213
- /** "by Ada Example". */
214
- by: (actor: string) => string;
215
- /** The user acted on their own account. */
216
- bySelf: string;
217
- /** No actor: a scheduled job. */
218
- automatic: string;
219
- /** A target scrubbed by an erasure. */
220
- erased: string;
221
- /** The filter chip: only one account's actions are shown. */
222
- filteredTo: (target: string) => string;
223
- /** The chip's ×. */
224
- showAll: string;
225
- /** A target name as a filter button — "Show only the actions on Ada Example". */
226
- filterBy: (target: string) => string;
227
- /** 0.45: after "Company renamed" when the row carries both names — "from A to B". */
228
- renamedFromTo: (from: string, to: string) => string;
229
- /** What each action is called, past tense, keyed by the vocabulary. An app adds its
230
- * own here (`labels={{ actions: { plan: "Plan changed" } }}`). A word given here
231
- * outranks the noun's in `groupActions` — so no catalogue holds the group kinds
232
- * here, `membership_remove` included (0.34). */
233
- actions: { [K in AdminActionKind]?: string } & { [action: string]: string | undefined };
234
- /** The group actions in each noun's words (§11.5), picked with `groupNoun`. */
235
- groupActions: Record<AdminGroupNoun, AdminGroupActionLabels>;
236
- }
237
-
238
- /** One noun's phrases (§11.5): whole phrases, never a noun dropped into one. */
239
- interface AdminGroupActionLabels {
240
- /** "Team created". */
241
- group_create: string;
242
- /** "Team renamed". */
243
- group_rename: string;
244
- /** "Team deleted". */
245
- group_delete: string;
246
- /** "Company deactivated" (0.45, admin §9.1.3): the group switched off — its people
247
- * locked out — not a person's `deactivate`. */
248
- group_deactivate: string;
249
- /** "Company reactivated" (0.45). */
250
- group_reactivate: string;
251
- /** "Added to the team" — said of the person, so it agrees with the account where a
252
- * language agrees (es "Añadida", fr "Ajouté"). */
253
- membership_add: string;
254
- /** "Role in the team changed" — the role in the group, not the account's (`role`). */
255
- membership_role: string;
256
- /** "Removed from the team". The `company` set's is the string `actions` held until
257
- * 0.34, in every language. */
258
- membership_remove: string;
259
- /** A group target with no name left: "a deleted team". */
260
- deleted: string;
261
- }
262
-
263
- // Defined in ./admin-action-log-labels, which holds no component code (0.34, KS U8).
264
- export { DEFAULT_ADMIN_ACTION_LOG_LABELS };
265
-
266
- /** The paging of `GET /admin/actions` — DataTable's `ServerPagination`, which the
267
- * footer is. */
268
- export interface AdminActionLogPaging {
269
- /** 0-based. */
270
- page: number;
271
- pageSize: number;
272
- total: number;
273
- onPageChange: (page: number) => void;
274
- onPageSizeChange?: (pageSize: number) => void;
275
- }
276
-
277
- export interface AdminActionLogProps {
278
- /** One page, newest first, as the server sends it. */
279
- entries: readonly AdminActionLogEntry[];
280
- /** Left out: no footer (a short list on a row). */
281
- paging?: AdminActionLogPaging;
282
- /** The page is being fetched. */
283
- loading?: boolean;
284
- /** The filter in force: only this account's actions are shown (`?target=`). With
285
- * `onTargetFilter`, a chip says so and its × clears it. */
286
- target?: AdminPerson | null;
287
- /** Filter by an account — or clear it with `null`. Given, every person target's name
288
- * is a button that narrows the list to it; a group or other target never is (0.34:
289
- * `?target=` stays a person's). Left out, the list is not filterable here. */
290
- onTargetFilter?: (target: AdminPerson | null) => void;
291
- /** The app's word for its groups (§11.5): picks the phrases the group actions and "a
292
- * deleted …" are said in. Default `group`; `labels.actions[kind]` still wins. */
293
- groupNoun?: AdminGroupNoun;
294
- className?: string;
295
- /** Any part, at any depth: `{ groupActions: { team: { group_create: "…" } } }`. */
296
- labels?: LabelOverride<AdminActionLogLabels>;
297
- }
298
-
299
- /** Whether a person has nothing left that names them — an erased target. */
300
- function scrubbed(person: AdminPerson | null | undefined): boolean {
301
- return !person || ![person.first, person.last, person.name, person.email].some((part) => (part ?? "").trim());
302
- }
303
-
304
- /** Whether two people are the same account. A group or other target is never a person
305
- * (§11.4), so it never reads "by the user themselves". */
306
- function samePerson(a: AdminPerson, b: AdminActionLogEntry["target"]): boolean {
307
- if (!b || isGroupTarget(b) || isOtherTarget(b)) return false;
308
- if (a.id !== undefined && a.id !== null && b.id !== undefined && b.id !== null) return a.id === b.id;
309
- const ea = (a.email ?? "").trim().toLowerCase();
310
- return ea !== "" && ea === (b.email ?? "").trim().toLowerCase();
311
- }
312
-
313
- export function AdminActionLog({
314
- entries,
315
- paging,
316
- loading = false,
317
- target,
318
- onTargetFilter,
319
- groupNoun = "group",
320
- className,
321
- labels: labelsProp,
322
- }: AdminActionLogProps) {
323
- // Merged key by key at every depth, so a deep override is what `useKitLabels` takes.
324
- const labels = useKitLabels("adminActionLog", DEFAULT_ADMIN_ACTION_LOG_LABELS, labelsProp);
325
- const nameOf = usePersonLabel();
326
- const filtered = target !== undefined && target !== null && !scrubbed(target);
327
- // A noun the type doesn't know (an app in plain JS) says the neutral word.
328
- const groupWords = labels.groupActions[groupNoun] ?? labels.groupActions.group;
329
-
330
- /** An app's own word first, then the noun's phrase for a group kind, else the key. */
331
- const actionText = (action: string): string =>
332
- labels.actions[action] ??
333
- (GROUP_ACTION_KINDS.has(action) ? groupWords[action as AdminGroupActionKind] : undefined) ??
334
- action;
335
-
336
- /** A group by its name, or — muted, as an erased person is — the noun's "a deleted
337
- * team" when none is left. */
338
- const groupText = (group: AdminGroupTarget, className?: string): ReactNode => {
339
- const name = (group.name ?? "").trim();
340
- return name ? (
341
- <span data-private className={className}>
342
- {name}
343
- </span>
344
- ) : (
345
- <span className="italic text-muted">{groupWords.deleted}</span>
346
- );
347
- };
348
-
349
- const actorText = (entry: AdminActionLogEntry): string => {
350
- const { actor } = entry;
351
- if (actor === null) return labels.automatic;
352
- if (actor === "self" || samePerson(actor, entry.target)) return labels.bySelf;
353
- return labels.by(nameOf(actor) || labels.erased);
354
- };
355
-
356
- const targetNode = (entry: AdminActionLogEntry): ReactNode => {
357
- const subject = entry.target;
358
- // Left out: nothing (§11.4). `null` is a person the erasure took.
359
- if (subject === undefined) return null;
360
- if (isGroupTarget(subject)) return groupText(subject, "font-medium text-primary");
361
- if (isOtherTarget(subject)) return <span className="font-medium text-primary">{subject.label}</span>;
362
- if (scrubbed(subject)) return <span className="italic text-muted">{labels.erased}</span>;
363
- const person = subject!;
364
- const name = nameOf(person);
365
- const address = (person.email ?? "").trim();
366
- const text = (
367
- <>
368
- <span data-private className="font-medium text-primary">
369
- {name}
370
- </span>
371
- {address && address !== name && (
372
- <span data-private className="ms-1 text-xs text-muted">
373
- {address}
374
- </span>
375
- )}
376
- </>
377
- );
378
- if (!onTargetFilter || (filtered && samePerson(person, target))) return text;
379
- return (
380
- <Button
381
- type="button"
382
- variant="link"
383
- size="sm"
384
- className="h-auto min-h-0 p-0 text-start"
385
- aria-label={labels.filterBy(name)}
386
- onClick={() => onTargetFilter(person)}
387
- >
388
- {text}
389
- </Button>
390
- );
391
- };
392
-
393
- return (
394
- <div className={cn("space-y-3", className)}>
395
- {filtered && onTargetFilter && (
396
- <Chip size="sm" tone="brand" onRemove={() => onTargetFilter(null)} removeLabel={labels.showAll}>
397
- <span data-private>{labels.filteredTo(nameOf(target))}</span>
398
- </Chip>
399
- )}
400
- {loading && entries.length === 0 ? (
401
- <div className="flex justify-center py-4">
402
- <Spinner label={labels.loading} />
403
- </div>
404
- ) : entries.length === 0 ? (
405
- <Caption>{labels.empty}</Caption>
406
- ) : (
407
- <ol
408
- aria-label={labels.title}
409
- aria-busy={loading || undefined}
410
- className={cn("divide-y divide-subtle", loading && "opacity-60")}
411
- >
412
- {entries.map((entry) => {
413
- const from = (entry.renamed?.from ?? "").trim();
414
- const to = (entry.renamed?.to ?? "").trim();
415
- const renamed = entry.action === "group_rename" && from !== "" && to !== "";
416
- return (
417
- <li key={entry.id} data-action={entry.action} className="space-y-0.5 py-2 first:pt-0 last:pb-0">
418
- <div className="flex flex-wrap items-baseline justify-between gap-x-3 gap-y-0.5">
419
- <div className="flex min-w-0 flex-wrap items-baseline gap-x-2 gap-y-0.5 text-sm">
420
- <span className="font-medium text-primary">{actionText(entry.action)}</span>
421
- {renamed ? (
422
- <span data-private data-renamed className="min-w-0 break-words text-primary">
423
- {labels.renamedFromTo(from, to)}
424
- </span>
425
- ) : (
426
- entry.target !== undefined && <span className="min-w-0 break-words">{targetNode(entry)}</span>
427
- )}
428
- {entry.group && (
429
- <span data-group className="min-w-0 break-words text-xs text-muted">
430
- {groupText(entry.group)}
431
- </span>
432
- )}
433
- </div>
434
- <DateMark value={entry.at} display="relative" className="text-xs text-muted" />
435
- </div>
436
- <div className="text-xs text-muted">
437
- <span data-private={entry.actor !== null && entry.actor !== "self" ? true : undefined}>
438
- {actorText(entry)}
439
- </span>
440
- {entry.detail !== undefined && entry.detail !== null && entry.detail !== "" && (
441
- <>
442
- {" · "}
443
- <span className="text-secondary">{entry.detail}</span>
444
- </>
445
- )}
446
- </div>
447
- </li>
448
- );
449
- })}
450
- </ol>
451
- )}
452
- {paging && paging.total > 0 && (
453
- <Pagination
454
- page={paging.page}
455
- pageSize={paging.pageSize}
456
- total={paging.total}
457
- totalPages={Math.max(1, Math.ceil(paging.total / Math.max(1, paging.pageSize)))}
458
- onPage={paging.onPageChange}
459
- onPageSize={paging.onPageSizeChange}
460
- />
461
- )}
462
- </div>
463
- );
464
- }
@@ -1,114 +0,0 @@
1
- import { useKitLabels, type LabelOverride } from "../i18n/kit-labels";
2
- import type { SettingsGroupLabels } from "../settings/settings-labels";
3
-
4
- /**
5
- * The `adminArea` namespace (0.42, docs/admin-harmonization.md §3.1): the kit's words of
6
- * the admin area every app shares — the account menu's "Administration" row, the 403
7
- * page, the shared sections' names and help lines, the overview's tiles and the Tools
8
- * list. A module of words with no component code, like every `*-labels.ts` (0.34, KS U8).
9
- * An app's own sections and tiles bring their own words.
10
- */
11
-
12
- /** The sections every app's admin area shares, in the template's order (§2.3). */
13
- export type AdminSharedSection = "overview" | "users" | "invitations" | "billing" | "activity";
14
-
15
- /** The overview's shared tiles (§2.4, §6.1). */
16
- export interface AdminTileLabels {
17
- /** `feedback_waiting`: OPEN reports, crash reports included (§6.1). */
18
- feedbackWaiting: string;
19
- /** `deletion_requests`. */
20
- deletionRequests: string;
21
- /** `invitations_pending`. */
22
- invitationsPending: string;
23
- /** `users_total`. */
24
- users: string;
25
- /** `users_new_7d`, the line under the users tile. */
26
- usersNew: (count: number) => string;
27
- /** 0.46 (Kurvenschmiede 1, admin §9.5): server-kit's `awaiting_verdict` as an `extra`
28
- * tile — answered reports that wait on a verdict (IN_EVALUATION, NEEDS_LIVE_TEST). */
29
- awaitingVerdict: string;
30
- /** Its line under the count. */
31
- awaitingVerdictHint: string;
32
- /** 0.46: server-kit's `released_for_work` — the reports released for the work queue. */
33
- releasedForWork: string;
34
- /** Its line under the count. */
35
- releasedForWorkHint: string;
36
- }
37
-
38
- export interface AdminAreaLabels {
39
- /** "Administration": the account menu's row, and the admin page's heading. */
40
- title: string;
41
- /** The row's waiting count, for a reader ("Administration, 3 waiting"); the eye sees
42
- * the number in the badge. */
43
- waiting: (count: number) => string;
44
- /**
45
- * 0.45 (admin §9.3.4): a button's whole name with its count — "Platform, 2 waiting" —
46
- * for an `IconButton` whose `badge` is an `AdminWaitingBadge`: the badge is decorative
47
- * there, so the name carries the count. `label` is the button's own name.
48
- */
49
- waitingLabel: (label: string, count: number) => string;
50
- /** The 403 page's heading (§2.2 decision 8). */
51
- forbiddenTitle: string;
52
- /**
53
- * Under it. Says only that THIS area is closed to the account — never that the person
54
- * administers nothing anywhere (§6.7: a kastlan superuser who isn't ADMIN in the acting
55
- * company gets this page).
56
- */
57
- forbiddenBody: (appName: string) => string;
58
- /** The button back to the app's start, unless the app names its own (`homeLabel`). */
59
- forbiddenHome: string;
60
- /** A reviewer's second way out, to the translations review. */
61
- forbiddenReviewer: string;
62
- /** The shared sections' names and help lines (§2.3 decision 11). */
63
- sections: Record<AdminSharedSection, SettingsGroupLabels>;
64
- /** The overview's tiles. */
65
- tiles: AdminTileLabels;
66
- /** 0.43: `AdminOverview`'s `error` — the counts could not be loaded. */
67
- overviewError: string;
68
- /** 0.43: its button, which calls `onRetry`. */
69
- retry: string;
70
- /** The Tools list's heading and name (§2.5 decision 16). */
71
- tools: string;
72
- }
73
-
74
- export const DEFAULT_ADMIN_AREA_LABELS: AdminAreaLabels = {
75
- title: "Administration",
76
- waiting: (count) => `${count} waiting`,
77
- waitingLabel: (label, count) => `${label}, ${count} waiting`,
78
- forbiddenTitle: "Only for administrators",
79
- forbiddenBody: (appName) => `This is where administrators run ${appName}. Your account cannot open this page.`,
80
- forbiddenHome: "Go to the start page",
81
- forbiddenReviewer: "Review translations",
82
- sections: {
83
- overview: { title: "Overview", help: "What is waiting, at a glance." },
84
- users: { title: "Users", help: "Who has an account, and what each may do." },
85
- invitations: {
86
- title: "Invitations",
87
- help: "Invite people by e-mail in their language; resend or revoke what’s still open.",
88
- },
89
- billing: { title: "Billing", help: "The plan, the payment and the invoices." },
90
- activity: { title: "Activity", help: "What the admins did, newest first." },
91
- },
92
- tiles: {
93
- feedbackWaiting: "To triage",
94
- deletionRequests: "Deletion requests",
95
- invitationsPending: "Pending invitations",
96
- users: "Users",
97
- usersNew: (count) => `${count} new in 7 days`,
98
- awaitingVerdict: "Awaiting a verdict",
99
- awaitingVerdictHint: "Answered, and waiting for you or the reporter to confirm the fix",
100
- releasedForWork: "Released for work",
101
- releasedForWorkHint: "Ready, rework requested or in progress",
102
- },
103
- overviewError: "The overview couldn’t be loaded.",
104
- retry: "Try again",
105
- tools: "Tools",
106
- };
107
-
108
- /**
109
- * The `adminArea` namespace, resolved — English, then the provider, then `labels`. What
110
- * an app reads to hand {@link adminSections} its words from inside a component.
111
- */
112
- export function useAdminAreaLabels(labels?: LabelOverride<AdminAreaLabels>): AdminAreaLabels {
113
- return useKitLabels("adminArea", DEFAULT_ADMIN_AREA_LABELS, labels);
114
- }
@@ -1,75 +0,0 @@
1
- import type { ComponentPropsWithRef } from "react";
2
- import { ShieldAlert } from "lucide-react";
3
- import { cn } from "../lib/cn";
4
- import { Button } from "../components/button";
5
- import { EmptyState } from "../components/empty-state";
6
- import type { LabelOverride } from "../i18n/kit-labels";
7
- import { useAdminAreaLabels } from "./admin-area-labels";
8
- import type { AdminAreaLabels } from "./admin-area-labels";
9
-
10
- export interface AdminForbiddenProps extends Omit<ComponentPropsWithRef<"div">, "children" | "title"> {
11
- /** The app's name, in the sentence: "This is where administrators run Kastlan." */
12
- appName: string;
13
- /** The button's target: the app's start page (keksdose `/budget`, kastlan `/dashboard`). */
14
- homeHref: string;
15
- /** The button's words, where the app names its start ("Back to the budget"). Default
16
- * `adminArea.forbiddenHome`, "Go to the start page". */
17
- homeLabel?: string;
18
- /** Pass it to a translation reviewer: a second button, "Review translations", to the
19
- * tool their role does have (§2.2 decision 8). */
20
- reviewerHref?: string;
21
- /** The heading's level. Default `h1`: the page stands alone inside the app shell. */
22
- headingAs?: "h1" | "h2" | "h3";
23
- /** Prop > `<UiKitProvider labels={{ adminArea }}>` > English. */
24
- labels?: LabelOverride<AdminAreaLabels>;
25
- }
26
-
27
- /**
28
- * The admin area's 403 page (0.42.0, docs/admin-harmonization.md §2.2 decision 8, §6.7),
29
- * keksdose's `AdminForbidden`: "Only for administrators" / "This is where administrators
30
- * run {app}. Your account cannot open this page.", and a button back to the app's start.
31
- *
32
- * It RENDERS, it does not redirect: the app's client gate shows it in place of the admin
33
- * page, on the same admin check the account menu uses, inside the lazy route — so a
34
- * bookmark keeps its address, and signing in as an admin opens the page that was asked
35
- * for. The server's gate stays the rule. kastlan shows it on its admin tools (`/admin`,
36
- * `/import`, `/feedback`); its work pages keep their generic 403.
37
- *
38
- * The words say only that this area is closed to this account, never that the person
39
- * administers nothing anywhere: a kastlan superuser who isn't ADMIN in the acting company
40
- * gets this page too.
41
- */
42
- export function AdminForbidden({
43
- appName,
44
- homeHref,
45
- homeLabel,
46
- reviewerHref,
47
- headingAs = "h1",
48
- labels: labelsProp,
49
- className,
50
- ...rest
51
- }: AdminForbiddenProps) {
52
- const labels = useAdminAreaLabels(labelsProp);
53
- return (
54
- <div {...rest} data-slot="admin-forbidden" className={cn("mx-auto w-full max-w-xl p-4 md:p-6", className)}>
55
- <EmptyState
56
- icon={<ShieldAlert />}
57
- headingAs={headingAs}
58
- title={labels.forbiddenTitle}
59
- hint={labels.forbiddenBody(appName)}
60
- action={
61
- <>
62
- <Button href={homeHref} variant="secondary">
63
- {homeLabel ?? labels.forbiddenHome}
64
- </Button>
65
- {reviewerHref !== undefined && (
66
- <Button href={reviewerHref} variant="secondary">
67
- {labels.forbiddenReviewer}
68
- </Button>
69
- )}
70
- </>
71
- }
72
- />
73
- </div>
74
- );
75
- }