@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,560 +0,0 @@
1
- /**
2
- * The multi-step wizard state machine: step index, completed/skipped sets,
3
- * per-step async validators, collected data, field errors, submit and the
4
- * cancel-confirm gate.
5
- *
6
- * Domain-free, and router-free on request. By default it mirrors the active step
7
- * to `?step=N`, so it must be mounted inside a react-router context — the same
8
- * requirement `DataTable` already carries. `urlSync: false` keeps the step in
9
- * memory and needs no router; `urlSync: { param }` renames the param. It only ever
10
- * WRITES that param (see the note on `initialStep` below for why it deliberately
11
- * does not read it back), and removes it when the wizard is left through the kit
12
- * (see `UseWizardOptions.urlSync`).
13
- *
14
- * The committing step is the last one unless a step says `commits: true`; the
15
- * steps after that one are post-commit steps (see `WizardStepConfig.commits`).
16
- */
17
- import { useCallback, useEffect, useLayoutEffect, useReducer, useRef, useState } from "react";
18
- import { useSearchParams } from "react-router";
19
- import { useKitLabels } from "../i18n/kit-labels";
20
- import { DEFAULT_WIZARD_LABELS } from "./types";
21
- import { toast } from "../components/toast";
22
- import type {
23
- WizardFinishResult,
24
- FieldErrors,
25
- StepStatus,
26
- UseWizardOptions,
27
- UseWizardReturn,
28
- ValidateResult,
29
- WizardStepConfig,
30
- } from "./types";
31
-
32
- interface WizardState<TData> {
33
- currentStepIndex: number;
34
- completedSteps: Set<number>;
35
- skippedSteps: Set<number>;
36
- data: TData;
37
- isSubmitting: boolean;
38
- isValidating: boolean;
39
- error: string | null;
40
- fieldErrors: FieldErrors;
41
- showCancelDialog: boolean;
42
- /** The step whose `onComplete` resolved, or null before any commit. */
43
- committedStepIndex: number | null;
44
- }
45
-
46
- /** Past the commit: the active step comes after the step that committed. Moves to
47
- * that step or any before it are refused from here. */
48
- function isAfterCommit(state: { currentStepIndex: number; committedStepIndex: number | null }) {
49
- return state.committedStepIndex !== null && state.currentStepIndex > state.committedStepIndex;
50
- }
51
-
52
- /** Whether `index` is on the far side of a commit the wizard has already moved past. */
53
- function crossesCommit(state: { currentStepIndex: number; committedStepIndex: number | null }, index: number) {
54
- return isAfterCommit(state) && index <= (state.committedStepIndex as number);
55
- }
56
-
57
- type WizardAction<TData> =
58
- // `from` is the step the move was decided ON. A move whose step is no longer the
59
- // current one is stale — see `goNext` — and is dropped rather than applied relative
60
- // to wherever the wizard has got to since.
61
- | { type: "GO_NEXT"; from: number }
62
- | { type: "GO_BACK" }
63
- | { type: "GO_TO_STEP"; index: number }
64
- | { type: "SKIP"; from: number }
65
- | { type: "UPDATE_DATA"; partial: Partial<TData> }
66
- | { type: "COMMITTED"; from: number }
67
- | { type: "SET_SUBMITTING"; value: boolean }
68
- | { type: "SET_VALIDATING"; value: boolean }
69
- | { type: "SET_ERROR"; error: string | null }
70
- | { type: "SET_FIELD_ERRORS"; errors: FieldErrors }
71
- | { type: "SHOW_CANCEL_DIALOG"; show: boolean };
72
-
73
- function createReducer<TData>(stepCount: number) {
74
- return function reducer(state: WizardState<TData>, action: WizardAction<TData>): WizardState<TData> {
75
- switch (action.type) {
76
- case "GO_NEXT": {
77
- if (action.from !== state.currentStepIndex) return state;
78
- const completed = new Set(state.completedSteps);
79
- completed.add(state.currentStepIndex);
80
- const nextIndex = Math.min(state.currentStepIndex + 1, stepCount - 1);
81
- return { ...state, currentStepIndex: nextIndex, completedSteps: completed, fieldErrors: {} };
82
- }
83
- case "GO_BACK": {
84
- const prevIndex = Math.max(state.currentStepIndex - 1, 0);
85
- if (crossesCommit(state, prevIndex)) return state;
86
- return { ...state, currentStepIndex: prevIndex, fieldErrors: {} };
87
- }
88
- case "GO_TO_STEP": {
89
- if (action.index < 0 || action.index >= stepCount) return state;
90
- if (crossesCommit(state, action.index)) return state;
91
- if (!state.completedSteps.has(action.index) && action.index > state.currentStepIndex) {
92
- return state;
93
- }
94
- return { ...state, currentStepIndex: action.index };
95
- }
96
- case "SKIP": {
97
- if (action.from !== state.currentStepIndex) return state;
98
- const skipped = new Set(state.skippedSteps);
99
- skipped.add(state.currentStepIndex);
100
- const nextIndex = Math.min(state.currentStepIndex + 1, stepCount - 1);
101
- return { ...state, currentStepIndex: nextIndex, skippedSteps: skipped };
102
- }
103
- case "UPDATE_DATA": {
104
- // Clear error for any field that is now being edited (so typing makes
105
- // the red message disappear).
106
- const nextErrors = { ...state.fieldErrors };
107
- for (const key of Object.keys(action.partial)) {
108
- delete nextErrors[key];
109
- }
110
- return { ...state, data: { ...state.data, ...action.partial }, fieldErrors: nextErrors };
111
- }
112
- case "COMMITTED": {
113
- // Recorded whatever step committed, so `wizard.committed` reads true after any
114
- // successful Finish. Only a commit with steps after it MOVES: the default
115
- // last-step commit stays where it is and looks exactly as it did before 0.8.
116
- const committed = { ...state, committedStepIndex: action.from };
117
- if (action.from !== state.currentStepIndex || action.from >= stepCount - 1) {
118
- return committed;
119
- }
120
- const completed = new Set(state.completedSteps);
121
- completed.add(action.from);
122
- return {
123
- ...committed,
124
- currentStepIndex: action.from + 1,
125
- completedSteps: completed,
126
- fieldErrors: {},
127
- };
128
- }
129
- case "SET_SUBMITTING":
130
- return { ...state, isSubmitting: action.value };
131
- case "SET_VALIDATING":
132
- return { ...state, isValidating: action.value };
133
- case "SET_ERROR":
134
- return { ...state, error: action.error };
135
- case "SET_FIELD_ERRORS":
136
- return { ...state, fieldErrors: action.errors };
137
- case "SHOW_CANCEL_DIALOG":
138
- return { ...state, showCancelDialog: action.show };
139
- default:
140
- return state;
141
- }
142
- };
143
- }
144
-
145
- // The constraint's mapped half: see `UseWizardOptions` (Parameters<> and ReturnType<> read it).
146
- export function useWizard<TData extends object & { [K in keyof TData]: unknown }>(
147
- options: UseWizardOptions<TData>,
148
- ): UseWizardReturn<TData> {
149
- const {
150
- steps,
151
- initialData,
152
- onComplete,
153
- onCancel,
154
- onExit,
155
- onDone,
156
- cancellable = true,
157
- confirmCancel: askBeforeCancel = true,
158
- urlSync = true,
159
- missingRequiredMessage,
160
- onValidationFailed,
161
- } = options;
162
- // The latest `steps`, for the stable callbacks below. Synced after commit (before
163
- // paint, and before any handler can run) rather than written during render.
164
- const stepsRef = useRef<WizardStepConfig[]>(steps);
165
- useLayoutEffect(() => {
166
- stepsRef.current = steps;
167
- }, [steps]);
168
- // A hook, not a component, but it produces two sentences of its own — the
169
- // "fill in the required fields" toast and the fallback submit error — and both
170
- // reach the user. So it reads the provider like any component does; only the two
171
- // strings are depended on below, so the callbacks stay stable across renders.
172
- // The `??` is for the type only: both keys are optional on `WizardLabels` (see
173
- // there), and the merge never replaces a default with `undefined`.
174
- const wizardLabels = useKitLabels("wizard", DEFAULT_WIZARD_LABELS, {
175
- missingRequired: missingRequiredMessage,
176
- });
177
- const missingRequired = wizardLabels.missingRequired ?? DEFAULT_WIZARD_LABELS.missingRequired;
178
- const genericError = wizardLabels.genericError ?? DEFAULT_WIZARD_LABELS.genericError;
179
-
180
- // Validators registered by the CURRENT step's mounted components (RHF steps
181
- // register via `useRhfWizardStep` through the wizard context). Only the active
182
- // step's validators are present — each unregisters on unmount. `goNext` and
183
- // `finish` run them (via `runStepValidators`) alongside the step config's own
184
- // `validate`.
185
- const validatorsRef = useRef(new Map<symbol, () => ValidateResult | Promise<ValidateResult>>());
186
- const registerStepValidate = useCallback((fn: () => ValidateResult | Promise<ValidateResult>) => {
187
- const token = Symbol();
188
- validatorsRef.current.set(token, fn);
189
- return () => {
190
- validatorsRef.current.delete(token);
191
- };
192
- }, []);
193
-
194
- // Chosen once, at mount: a hook may not be called conditionally, but it may be
195
- // chosen once and then called unconditionally on every render — which is what
196
- // makes `urlSync: false` work with no router above the wizard at all.
197
- const [useStepUrl] = useState(() => (urlSync === false ? useNoStepUrl : useSearchParamStepUrl));
198
- const [urlParam] = useState(() => (typeof urlSync === "object" && urlSync.param ? urlSync.param : "step"));
199
- // The wizard's entered `data` and `completedSteps` are NOT persisted across a
200
- // reload / deep-link (the reducer re-inits to empty defaults on every mount).
201
- // Restoring a later step index from `?step=N` would therefore leave the wizard
202
- // on (or past) the last step with an EMPTY data set, letting Finish submit an
203
- // empty payload. Always start at step 0 so a reload re-runs the wizard from a
204
- // valid state instead of losing the entered data silently.
205
- const initialStep = 0;
206
-
207
- const reducer = createReducer<TData>(steps.length);
208
- const [state, dispatch] = useReducer(reducer, {
209
- currentStepIndex: initialStep,
210
- completedSteps: new Set<number>(),
211
- skippedSteps: new Set<number>(),
212
- data: (initialData ?? {}) as TData,
213
- isSubmitting: false,
214
- isValidating: false,
215
- error: null,
216
- fieldErrors: {},
217
- showCancelDialog: false,
218
- committedStepIndex: null,
219
- });
220
-
221
- // A mounted step can DISABLE forward navigation (Next/Skip) while its own
222
- // state is invalid (e.g. tenant shares != 100%). Defaults to false, so
223
- // wizards that never call setNextBlocked behave exactly as before.
224
- const [nextBlocked, setNextBlockedState] = useState(false);
225
- const setNextBlocked = useCallback((blocked: boolean) => setNextBlockedState(blocked), []);
226
-
227
- // Sync step index to URL (a no-op under `urlSync: false`). `clearStepUrl` drops
228
- // the param when the wizard is left through the kit, and stops the sync writing
229
- // it back.
230
- const clearStepUrl = useStepUrl(urlParam, state.currentStepIndex);
231
-
232
- // `steps`, not `stepsRef.current`: reading a ref in render is what the hooks
233
- // linter (rightly) objects to, and the ref only catches up after the commit.
234
- const currentStep = steps[state.currentStepIndex];
235
- const isFirstStep = state.currentStepIndex === 0;
236
- const isLastStep = state.currentStepIndex === steps.length - 1;
237
- // The step whose forward button commits: the first one flagged `commits`, else the
238
- // last — which is every wizard written before the flag existed.
239
- const flagged = steps.findIndex((s) => s.commits);
240
- const commitStepIndex = flagged === -1 ? steps.length - 1 : flagged;
241
- const isCommitStep = state.currentStepIndex === commitStepIndex;
242
- const afterCommit = isAfterCommit(state);
243
- // Finish is only valid once every step before the committing one has actually
244
- // been walked through (completed or skipped). Guards against a restored/last-step
245
- // index submitting a payload built from empty defaults.
246
- const canFinish = steps.every(
247
- (_, index) => index >= commitStepIndex || state.completedSteps.has(index) || state.skippedSteps.has(index),
248
- );
249
- const canGoBack = (!isFirstStep || onExit !== undefined) && !crossesCommit(state, state.currentStepIndex - 1);
250
- const canCancel = cancellable && !afterCommit;
251
- const canDone = isLastStep && afterCommit && onDone !== undefined;
252
-
253
- // Runs the active step's config `validate` plus every validator its mounted
254
- // components registered (RHF steps via useRhfWizardStep), AND-combining the
255
- // results and merging any per-field errors. Returns `true` when the step
256
- // passes (or registered no validators). Shared by `goNext` and `finish` so a
257
- // form-bearing last step is validated (and its values flushed) on Finish too.
258
- const runStepValidators = useCallback(async (): Promise<boolean> => {
259
- const step = stepsRef.current[state.currentStepIndex];
260
- const validators = [...validatorsRef.current.values()];
261
- if (step.validate) validators.push(step.validate);
262
- if (validators.length === 0) return true;
263
- let ok = true;
264
- let errors: FieldErrors = {};
265
- try {
266
- for (const validate of validators) {
267
- const result = await validate();
268
- const vOk = typeof result === "boolean" ? result : result.ok;
269
- if (!vOk) {
270
- ok = false;
271
- if (typeof result !== "boolean" && result.errors) {
272
- errors = { ...errors, ...result.errors };
273
- }
274
- }
275
- }
276
- } catch (err) {
277
- // FALL THROUGH, do not return. A bare `return false` here blocked Next while
278
- // skipping the `if (!ok)` block below — the only thing that shows a message,
279
- // and whose own comment is "say something anyway, so the user is not left with
280
- // a Next button that silently does nothing". So a validator that threw (an
281
- // async one whose request rejected, a null dereference in a field rule)
282
- // produced exactly the outcome that block was written to prevent: no field
283
- // errors, no toast, `onValidationFailed` never called, nothing in the console.
284
- //
285
- // The step still must not advance; `ok = false` is what says so. Whatever
286
- // partial `errors` the loop had collected before the throw are kept — they are
287
- // real, and an empty set is what routes this to the generic message.
288
- console.error("[wizard] a step validator threw", err);
289
- ok = false;
290
- }
291
- if (!ok) {
292
- dispatch({ type: "SET_FIELD_ERRORS", errors });
293
- if (Object.keys(errors).length === 0) {
294
- // No per-field detail (e.g. an RHF step surfacing its own inline
295
- // message) — say something anyway, so the user is not left with a Next
296
- // button that silently does nothing.
297
- const message = missingRequired;
298
- if (onValidationFailed) {
299
- onValidationFailed(message);
300
- } else {
301
- // The kit's `toast` loads sonner (an optional peer) lazily, so an app
302
- // that never trips this never has to install it.
303
- toast.error(message);
304
- }
305
- }
306
- return false;
307
- }
308
- return true;
309
- }, [state.currentStepIndex, missingRequired, onValidationFailed]);
310
-
311
- /**
312
- * One forward move at a time. A double-click on Next used to validate the CURRENT
313
- * step twice and then advance twice — the second GO_NEXT landing on a step whose
314
- * own validators never ran, so a required field two steps in could be walked past.
315
- * Two layers, because either alone leaves a gap:
316
- *
317
- * - this ref refuses a second `goNext`/`skip`/`finish` while one is in flight,
318
- * which covers an async validator (a server check) of any length;
319
- * - the `from` on each action drops a move decided on a step that is no longer
320
- * current, which covers the click that arrives after the first move resolved
321
- * but before React re-rendered — its closure still holds the old step index.
322
- */
323
- const advancingRef = useRef(false);
324
-
325
- const goNext = useCallback(async (): Promise<boolean | undefined> => {
326
- if (advancingRef.current) return undefined;
327
- advancingRef.current = true;
328
- const from = state.currentStepIndex;
329
- // Pending state for the chrome (spinner, aria-busy). The ref above is still what
330
- // refuses the second click: state would only be seen after a re-render.
331
- dispatch({ type: "SET_VALIDATING", value: true });
332
- try {
333
- if (await runStepValidators()) {
334
- dispatch({ type: "GO_NEXT", from });
335
- return true;
336
- }
337
- return false;
338
- } finally {
339
- dispatch({ type: "SET_VALIDATING", value: false });
340
- advancingRef.current = false;
341
- }
342
- }, [runStepValidators, state.currentStepIndex]);
343
-
344
- // Read by `goBack`, which must not move while `onComplete` runs: the commit was
345
- // decided on the data of the step the user is on, and Back mid-commit would show a
346
- // step whose edits can no longer reach it. The chrome disables the button too; this
347
- // covers an app calling `goBack` itself.
348
- const submittingRef = useRef(false);
349
-
350
- const goBack = useCallback(() => {
351
- if (submittingRef.current) return;
352
- if (state.currentStepIndex === 0 && onExit) {
353
- clearStepUrl();
354
- onExit();
355
- return;
356
- }
357
- // On step 0 with no `onExit` this stays the no-op move (clearing field errors) it
358
- // always was.
359
- dispatch({ type: "GO_BACK" });
360
- }, [state.currentStepIndex, onExit, clearStepUrl]);
361
-
362
- const goToStep = useCallback((index: number) => {
363
- dispatch({ type: "GO_TO_STEP", index });
364
- }, []);
365
-
366
- const canGoToStep = useCallback(
367
- (index: number) =>
368
- index >= 0 &&
369
- index < steps.length &&
370
- (index <= state.currentStepIndex || state.completedSteps.has(index)) &&
371
- !crossesCommit(state, index),
372
- [steps.length, state],
373
- );
374
-
375
- const skip = useCallback(() => {
376
- // Not while Next is validating: the skip would land first and the pending GO_NEXT
377
- // would then be stale anyway — but the user asked for one move, not a race.
378
- if (advancingRef.current) return;
379
- dispatch({ type: "SKIP", from: state.currentStepIndex });
380
- }, [state.currentStepIndex]);
381
-
382
- const confirmCancel = useCallback(() => {
383
- dispatch({ type: "SHOW_CANCEL_DIALOG", show: false });
384
- clearStepUrl();
385
- onCancel?.();
386
- }, [onCancel, clearStepUrl]);
387
-
388
- const cancel = useCallback(() => {
389
- if (!askBeforeCancel) {
390
- confirmCancel();
391
- return;
392
- }
393
- dispatch({ type: "SHOW_CANCEL_DIALOG", show: true });
394
- }, [askBeforeCancel, confirmCancel]);
395
-
396
- const done = useCallback(() => {
397
- clearStepUrl();
398
- onDone?.();
399
- }, [onDone, clearStepUrl]);
400
-
401
- const dismissCancel = useCallback(() => {
402
- dispatch({ type: "SHOW_CANCEL_DIALOG", show: false });
403
- }, []);
404
-
405
- const updateData = useCallback((partial: Partial<TData>) => {
406
- dispatch({ type: "UPDATE_DATA", partial });
407
- }, []);
408
-
409
- const clearError = useCallback(() => {
410
- dispatch({ type: "SET_ERROR", error: null });
411
- }, []);
412
-
413
- const clearFieldErrors = useCallback(() => {
414
- dispatch({ type: "SET_FIELD_ERRORS", errors: {} });
415
- }, []);
416
-
417
- const finish = useCallback(async (): Promise<WizardFinishResult | undefined> => {
418
- if (!onComplete || !canFinish) return undefined;
419
- // A commit with steps after it happens once: those steps exist because the
420
- // data has been written. (A last-step commit keeps its old behaviour — the app
421
- // may retry Finish after `onComplete` resolved, as it always could.)
422
- if (commitStepIndex < steps.length - 1 && state.committedStepIndex !== null) return undefined;
423
- // The same re-entry guard as `goNext`: a double-click on Finish would otherwise
424
- // validate twice and call `onComplete` twice — `isSubmitting` is only set once
425
- // validation has passed, too late to stop the second click.
426
- if (advancingRef.current) return undefined;
427
- advancingRef.current = true;
428
- const from = state.currentStepIndex;
429
- try {
430
- // Validate the (possibly form-bearing) committing step before submitting,
431
- // matching the Next gate — review-only steps register no validators and pass
432
- // through.
433
- dispatch({ type: "SET_VALIDATING", value: true });
434
- let valid: boolean;
435
- try {
436
- valid = await runStepValidators();
437
- } finally {
438
- dispatch({ type: "SET_VALIDATING", value: false });
439
- }
440
- if (!valid) return { ok: false };
441
- submittingRef.current = true;
442
- dispatch({ type: "SET_SUBMITTING", value: true });
443
- dispatch({ type: "SET_ERROR", error: null });
444
- try {
445
- await onComplete(state.data);
446
- dispatch({ type: "COMMITTED", from });
447
- return { ok: true };
448
- } catch (err) {
449
- const message = err instanceof Error && err.message ? err.message : genericError;
450
- dispatch({ type: "SET_ERROR", error: message });
451
- return { ok: false, error: err instanceof Error && err.message ? err.message : undefined };
452
- } finally {
453
- submittingRef.current = false;
454
- dispatch({ type: "SET_SUBMITTING", value: false });
455
- }
456
- } finally {
457
- advancingRef.current = false;
458
- }
459
- }, [
460
- onComplete,
461
- canFinish,
462
- commitStepIndex,
463
- steps.length,
464
- state.committedStepIndex,
465
- state.currentStepIndex,
466
- state.data,
467
- runStepValidators,
468
- genericError,
469
- ]);
470
-
471
- const stepStatus = useCallback(
472
- (index: number): StepStatus => {
473
- if (index === state.currentStepIndex) return "active";
474
- if (state.skippedSteps.has(index)) return "skipped";
475
- if (state.completedSteps.has(index)) return "completed";
476
- return "upcoming";
477
- },
478
- [state.currentStepIndex, state.completedSteps, state.skippedSteps],
479
- );
480
-
481
- return {
482
- currentStepIndex: state.currentStepIndex,
483
- currentStep,
484
- steps,
485
- isFirstStep,
486
- isLastStep,
487
- canFinish,
488
- commitStepIndex,
489
- isCommitStep,
490
- committed: state.committedStepIndex !== null,
491
- canGoBack,
492
- canCancel,
493
- canDone,
494
- canGoToStep,
495
- // Their outcomes are what StepperNav tells a running tour (0.50); the declared types stay
496
- // `Promise<void>`, so an app's `let p: Promise<void> = wizard.goNext()` still compiles.
497
- goNext: goNext as () => Promise<void>,
498
- goBack,
499
- goToStep,
500
- skip,
501
- cancel,
502
- finish: finish as () => Promise<void>,
503
- done,
504
- registerStepValidate,
505
- nextBlocked,
506
- setNextBlocked,
507
- stepStatus,
508
- completedSteps: state.completedSteps,
509
- data: state.data,
510
- updateData,
511
- isSubmitting: state.isSubmitting,
512
- isValidating: state.isValidating,
513
- error: state.error,
514
- clearError,
515
- fieldErrors: state.fieldErrors,
516
- clearFieldErrors,
517
- showCancelDialog: state.showCancelDialog,
518
- confirmCancel,
519
- dismissCancel,
520
- };
521
- }
522
-
523
- /**
524
- * `urlSync: true` / `{ param }`: mirror the active step to `?<param>=N`, and hand back
525
- * the function that removes it again. Once removed it stays removed — the sync effect
526
- * re-runs whenever react-router hands out a new setter (every search change), and
527
- * without the latch it would write the param straight back after the exit cleared it.
528
- */
529
- function useSearchParamStepUrl(param: string, index: number): () => void {
530
- const [, setUrlParams] = useSearchParams();
531
- const leftRef = useRef(false);
532
- useEffect(() => {
533
- if (leftRef.current) return;
534
- setUrlParams(
535
- (prev) => {
536
- prev.set(param, String(index));
537
- return prev;
538
- },
539
- { replace: true },
540
- );
541
- }, [param, index, setUrlParams]);
542
- return useCallback(() => {
543
- if (leftRef.current) return;
544
- leftRef.current = true;
545
- setUrlParams(
546
- (prev) => {
547
- prev.delete(param);
548
- return prev;
549
- },
550
- { replace: true },
551
- );
552
- }, [param, setUrlParams]);
553
- }
554
-
555
- /** `urlSync: false`: the step lives in the reducer only. Touches no router context. */
556
- function useNoStepUrl(_param: string, _index: number): () => void {
557
- return noop;
558
- }
559
-
560
- function noop() {}
@@ -1,39 +0,0 @@
1
- import type { ValidateResult, FieldErrors } from "./types";
2
-
3
- export interface RequiredFieldSpec<T> {
4
- key: keyof T;
5
- /**
6
- * Custom predicate (e.g. numeric `> 0` or range checks). Defaults to a
7
- * "present" check: a non-empty trimmed string, or a non-null id/enum.
8
- */
9
- valid?: (value: unknown, data: T) => boolean;
10
- /** Per-field message override (defaults to the shared `defaultMessage`). */
11
- message?: string;
12
- }
13
-
14
- /**
15
- * Folds the copy-pasted `const errors = {}; if (!data.x) errors.x = required; …`
16
- * step-validate block reimplemented across the single-file entity wizards.
17
- * Pure-required fields need only `{ key }`; numeric constraints (amount `> 0`,
18
- * rate in range) pass a `valid` predicate. The message is caller-supplied so
19
- * each page keeps its own namespace (e.g. `t("common:validation.required")`).
20
- */
21
- // `T extends object` (0.52, API-2) so a wizard's data may be an interface. The mapped half
22
- // constrains nothing (every object type satisfies it): it is there for
23
- // `Parameters<typeof requiredFieldsValidator>`, which reads the constraint — `keyof object`
24
- // is `never`, so a wrapper typed that way refused every `{ key }` (0.52 code review). With
25
- // it the constraint reads as an indexable record, as 0.51's `Record<string, unknown>` did.
26
- export function requiredFieldsValidator<T extends object & { [K in keyof T]: unknown }>(
27
- data: T,
28
- // `readonly` (0.52, API-7): a field list held `as const` passes without a copy.
29
- fields: readonly RequiredFieldSpec<T>[],
30
- defaultMessage: string,
31
- ): ValidateResult {
32
- const errors: FieldErrors = {};
33
- for (const f of fields) {
34
- const v = data[f.key];
35
- const ok = f.valid ? f.valid(v, data) : typeof v === "string" ? v.trim() !== "" : v != null;
36
- if (!ok) errors[String(f.key)] = f.message ?? defaultMessage;
37
- }
38
- return { ok: Object.keys(errors).length === 0, errors };
39
- }
@@ -1,74 +0,0 @@
1
- import { createContext, useContext, useEffect, useRef } from "react";
2
- import type { ValidateResult } from "./types";
3
-
4
- export interface WizardContextValue {
5
- /**
6
- * Register a validator for the currently-mounted step. Returns an unregister
7
- * fn (call it in a useEffect cleanup). `goNext` runs every registered
8
- * validator for the active step (plus the step config's own `validate`),
9
- * AND-combining the results — this replaces the per-page `useRef` +
10
- * `validate: () => ref.current?.()` bridge each RHF step used to wire.
11
- */
12
- registerStepValidate: (fn: () => ValidateResult | Promise<ValidateResult>) => () => void;
13
- /** Lets the mounted step disable Next/Skip (e.g. invalid tenant shares). */
14
- setNextBlocked: (blocked: boolean) => void;
15
- }
16
-
17
- const WizardContext = createContext<WizardContextValue | null>(null);
18
-
19
- export const WizardContextProvider = WizardContext.Provider;
20
-
21
- export function useWizardContext(): WizardContextValue {
22
- const ctx = useContext(WizardContext);
23
- if (!ctx) {
24
- throw new Error("useWizardContext must be used within a <StepperNav>");
25
- }
26
- return ctx;
27
- }
28
-
29
- /**
30
- * The wizard context, or `null` outside a `<StepperNav>`. For a hook that registers
31
- * with the wizard when there is one and works without it — `useRhfWizardStep` in
32
- * `@eifi1/ui-kit/rhf`, whose returned `validate` a custom nav can call itself.
33
- */
34
- export function useOptionalWizardContext(): WizardContextValue | null {
35
- return useContext(WizardContext);
36
- }
37
-
38
- /**
39
- * Registers a plain validator for the mounted step — the counterpart to
40
- * `useRhfWizardStep` (in `@eifi1/ui-kit/rhf`) for a step that gates on its own state
41
- * (a hand-managed list of lines, a sum that has to balance) rather than a form.
42
- *
43
- * ```tsx
44
- * useWizardStepValidate(() => ({ ok: lines.length >= 2, errors: { lines: t("…") } }));
45
- * ```
46
- *
47
- * Next (and Finish) run it with the step's other validators; a `false` or a result
48
- * with `ok: false` keeps the wizard where it is. `validate` is read through a ref, so
49
- * an inline closure over the latest state registers exactly once. Throws outside a
50
- * `<StepperNav>`, like {@link useWizardContext}: a validator with nothing to run it is
51
- * a bug to hear about.
52
- */
53
- export function useWizardStepValidate(validate: () => ValidateResult | Promise<ValidateResult>): void {
54
- const { registerStepValidate } = useWizardContext();
55
- const ref = useRef(validate);
56
- useEffect(() => {
57
- ref.current = validate;
58
- });
59
- useEffect(() => registerStepValidate(() => ref.current()), [registerStepValidate]);
60
- }
61
-
62
- /**
63
- * Disables the wizard's Next and Skip while `blocked` holds (tenant shares that do not
64
- * add up to 100 %). Unlike {@link useWizardStepValidate}, which answers a click, this
65
- * greys the button out before one. The gate is lifted again when the step unmounts, so
66
- * the next step starts unblocked.
67
- */
68
- export function useWizardNextGate(blocked: boolean): void {
69
- const { setNextBlocked } = useWizardContext();
70
- useEffect(() => {
71
- setNextBlocked(blocked);
72
- return () => setNextBlocked(false);
73
- }, [blocked, setNextBlocked]);
74
- }