@eifi1/ui-kit 0.53.0 → 0.55.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (902) hide show
  1. package/README.md +96 -82
  2. package/dist/account/delete-account-setting.d.ts +3 -2
  3. package/dist/account/delete-account-setting.js.map +1 -1
  4. package/dist/admin/plan-change.js +2 -2
  5. package/dist/admin/plan-change.js.map +1 -1
  6. package/dist/admin/user-roster.d.ts +6 -0
  7. package/dist/admin/user-roster.js +4 -0
  8. package/dist/admin/user-roster.js.map +1 -1
  9. package/dist/auth/auth-errors.d.ts +36 -0
  10. package/dist/auth/auth-errors.js +20 -0
  11. package/dist/auth/auth-errors.js.map +1 -1
  12. package/dist/billing/billing-labels.d.ts +26 -0
  13. package/dist/billing/billing-labels.js +9 -0
  14. package/dist/billing/billing-labels.js.map +1 -1
  15. package/dist/billing/subscription-standing.d.ts +61 -0
  16. package/dist/billing/subscription-standing.js +51 -0
  17. package/dist/billing/subscription-standing.js.map +1 -0
  18. package/dist/billing/usage-meter.d.ts +52 -0
  19. package/dist/billing/usage-meter.js +52 -0
  20. package/dist/billing/usage-meter.js.map +1 -0
  21. package/dist/chart.d.ts +1 -0
  22. package/dist/chart.js +4 -0
  23. package/dist/chart.js.map +1 -1
  24. package/dist/components/alert-banner.js +2 -3
  25. package/dist/components/alert-banner.js.map +1 -1
  26. package/dist/components/amount-input.d.ts +2 -1
  27. package/dist/components/amount-input.js +3 -15
  28. package/dist/components/amount-input.js.map +1 -1
  29. package/dist/components/autocomplete.js +2 -2
  30. package/dist/components/autocomplete.js.map +1 -1
  31. package/dist/components/bulk-action-bar.js +2 -1
  32. package/dist/components/bulk-action-bar.js.map +1 -1
  33. package/dist/components/button.d.ts +35 -1
  34. package/dist/components/button.js +5 -9
  35. package/dist/components/button.js.map +1 -1
  36. package/dist/components/calendar-heatmap.js +6 -4
  37. package/dist/components/calendar-heatmap.js.map +1 -1
  38. package/dist/components/camera-button.d.ts +89 -0
  39. package/dist/components/camera-button.js +122 -0
  40. package/dist/components/camera-button.js.map +1 -0
  41. package/dist/components/camera-capture.d.ts +66 -0
  42. package/dist/components/camera-capture.js +190 -0
  43. package/dist/components/camera-capture.js.map +1 -0
  44. package/dist/components/camera-labels.d.ts +20 -0
  45. package/dist/components/camera-labels.js +15 -0
  46. package/dist/components/camera-labels.js.map +1 -0
  47. package/dist/components/chart-edge.d.ts +9 -0
  48. package/dist/components/chart-edge.js +14 -3
  49. package/dist/components/chart-edge.js.map +1 -1
  50. package/dist/components/chart-zoom-core.js +34 -29
  51. package/dist/components/chart-zoom-core.js.map +1 -1
  52. package/dist/components/checkbox-group.js +1 -1
  53. package/dist/components/checkbox-group.js.map +1 -1
  54. package/dist/components/combobox-core.js +3 -2
  55. package/dist/components/combobox-core.js.map +1 -1
  56. package/dist/components/combobox.js +2 -2
  57. package/dist/components/combobox.js.map +1 -1
  58. package/dist/components/consent-again-notice-labels.d.ts +25 -0
  59. package/dist/components/consent-again-notice-labels.js +15 -0
  60. package/dist/components/consent-again-notice-labels.js.map +1 -0
  61. package/dist/components/consent-again-notice.d.ts +85 -0
  62. package/dist/components/consent-again-notice.js +94 -0
  63. package/dist/components/consent-again-notice.js.map +1 -0
  64. package/dist/components/country-select.js +2 -7
  65. package/dist/components/country-select.js.map +1 -1
  66. package/dist/components/currency-option-list.d.ts +2 -1
  67. package/dist/components/currency-option-list.js +10 -3
  68. package/dist/components/currency-option-list.js.map +1 -1
  69. package/dist/components/currency-select.d.ts +3 -1
  70. package/dist/components/currency-select.js +2 -2
  71. package/dist/components/currency-select.js.map +1 -1
  72. package/dist/components/danger-confirm.d.ts +22 -1
  73. package/dist/components/danger-confirm.js +52 -30
  74. package/dist/components/danger-confirm.js.map +1 -1
  75. package/dist/components/data-table-column-settings.js +2 -2
  76. package/dist/components/data-table-column-settings.js.map +1 -1
  77. package/dist/components/data-table-filter-popover.d.ts +2 -1
  78. package/dist/components/data-table-filter-popover.js +3 -2
  79. package/dist/components/data-table-filter-popover.js.map +1 -1
  80. package/dist/components/data-table-filters.d.ts +33 -3
  81. package/dist/components/data-table-filters.js +6 -4
  82. package/dist/components/data-table-filters.js.map +1 -1
  83. package/dist/components/data-table-fit.js.map +1 -1
  84. package/dist/components/data-table-virtual.js +13 -3
  85. package/dist/components/data-table-virtual.js.map +1 -1
  86. package/dist/components/date-field.js +2 -2
  87. package/dist/components/date-field.js.map +1 -1
  88. package/dist/components/date-picker.js +2 -2
  89. package/dist/components/date-picker.js.map +1 -1
  90. package/dist/components/date-range-picker.js +2 -6
  91. package/dist/components/date-range-picker.js.map +1 -1
  92. package/dist/components/dialog-frame.d.ts +5 -1
  93. package/dist/components/dialog-frame.js +6 -2
  94. package/dist/components/dialog-frame.js.map +1 -1
  95. package/dist/components/dropdown.js +7 -3
  96. package/dist/components/dropdown.js.map +1 -1
  97. package/dist/components/entity-combobox.js +2 -2
  98. package/dist/components/entity-combobox.js.map +1 -1
  99. package/dist/components/field-parts.d.ts +108 -6
  100. package/dist/components/field-parts.js +59 -6
  101. package/dist/components/field-parts.js.map +1 -1
  102. package/dist/components/field-suggestion-labels.d.ts +2 -0
  103. package/dist/components/field-suggestion-labels.js +10 -0
  104. package/dist/components/field-suggestion-labels.js.map +1 -0
  105. package/dist/components/field.js +1 -1
  106. package/dist/components/field.js.map +1 -1
  107. package/dist/components/file-button.d.ts +1 -1
  108. package/dist/components/file-button.js.map +1 -1
  109. package/dist/components/floating-panel.d.ts +7 -6
  110. package/dist/components/floating-panel.js +3 -17
  111. package/dist/components/floating-panel.js.map +1 -1
  112. package/dist/components/form-actions.d.ts +3 -2
  113. package/dist/components/form-actions.js.map +1 -1
  114. package/dist/components/hover-menu.js +3 -2
  115. package/dist/components/hover-menu.js.map +1 -1
  116. package/dist/components/icon-button.d.ts +23 -5
  117. package/dist/components/icon-button.js +6 -8
  118. package/dist/components/icon-button.js.map +1 -1
  119. package/dist/components/inline-confirm.js +2 -1
  120. package/dist/components/inline-confirm.js.map +1 -1
  121. package/dist/components/inline-entity-combobox.js +2 -2
  122. package/dist/components/inline-entity-combobox.js.map +1 -1
  123. package/dist/components/input.js +2 -2
  124. package/dist/components/input.js.map +1 -1
  125. package/dist/components/jump-calendar.js +3 -3
  126. package/dist/components/jump-calendar.js.map +1 -1
  127. package/dist/components/legal.d.ts +13 -1
  128. package/dist/components/legal.js +12 -0
  129. package/dist/components/legal.js.map +1 -1
  130. package/dist/components/legended-series-chart.d.ts +80 -0
  131. package/dist/components/legended-series-chart.js +70 -0
  132. package/dist/components/legended-series-chart.js.map +1 -0
  133. package/dist/components/lightbox.js +2 -1
  134. package/dist/components/lightbox.js.map +1 -1
  135. package/dist/components/mini-calendar.js +16 -7
  136. package/dist/components/mini-calendar.js.map +1 -1
  137. package/dist/components/modal.d.ts +48 -0
  138. package/dist/components/modal.js +26 -6
  139. package/dist/components/modal.js.map +1 -1
  140. package/dist/components/month-picker.d.ts +1 -1
  141. package/dist/components/month-picker.js +6 -6
  142. package/dist/components/month-picker.js.map +1 -1
  143. package/dist/components/multi-entity-combobox.js +2 -2
  144. package/dist/components/multi-entity-combobox.js.map +1 -1
  145. package/dist/components/multi-select.js +2 -6
  146. package/dist/components/multi-select.js.map +1 -1
  147. package/dist/components/number-input.js +2 -2
  148. package/dist/components/number-input.js.map +1 -1
  149. package/dist/components/page-header-layout.d.ts +18 -0
  150. package/dist/components/page-header-layout.js +23 -0
  151. package/dist/components/page-header-layout.js.map +1 -0
  152. package/dist/components/page-header-skeleton.d.ts +41 -0
  153. package/dist/components/page-header-skeleton.js +52 -0
  154. package/dist/components/page-header-skeleton.js.map +1 -0
  155. package/dist/components/page-header.js +4 -17
  156. package/dist/components/page-header.js.map +1 -1
  157. package/dist/components/popover.js +7 -2
  158. package/dist/components/popover.js.map +1 -1
  159. package/dist/components/release-notes-labels.d.ts +16 -0
  160. package/dist/components/release-notes-labels.js +18 -0
  161. package/dist/components/release-notes-labels.js.map +1 -0
  162. package/dist/components/release-notes.d.ts +65 -0
  163. package/dist/components/release-notes.js +65 -0
  164. package/dist/components/release-notes.js.map +1 -0
  165. package/dist/components/select.js +2 -2
  166. package/dist/components/select.js.map +1 -1
  167. package/dist/components/series-chart-labels.d.ts +9 -0
  168. package/dist/components/series-chart-labels.js +3 -1
  169. package/dist/components/series-chart-labels.js.map +1 -1
  170. package/dist/components/series-chart.d.ts +5 -0
  171. package/dist/components/series-chart.js +89 -36
  172. package/dist/components/series-chart.js.map +1 -1
  173. package/dist/components/stat-tile.d.ts +21 -2
  174. package/dist/components/stat-tile.js +4 -2
  175. package/dist/components/stat-tile.js.map +1 -1
  176. package/dist/components/toggle-group.js +3 -2
  177. package/dist/components/toggle-group.js.map +1 -1
  178. package/dist/components/treemap-layout.js.map +1 -1
  179. package/dist/components/treemap.d.ts +17 -15
  180. package/dist/components/treemap.js +167 -85
  181. package/dist/components/treemap.js.map +1 -1
  182. package/dist/currencies.d.ts +16 -2
  183. package/dist/currencies.js +2 -1
  184. package/dist/currencies.js.map +1 -1
  185. package/dist/eslint/index.js +1 -1
  186. package/dist/eslint/role-utilities.d.ts +2 -2
  187. package/dist/eslint/role-utilities.js.map +1 -1
  188. package/dist/feedback/feedback-context-labels.js +2 -1
  189. package/dist/feedback/feedback-context-labels.js.map +1 -1
  190. package/dist/feedback/feedback-context.d.ts +19 -3
  191. package/dist/feedback/feedback-context.js +12 -1
  192. package/dist/feedback/feedback-context.js.map +1 -1
  193. package/dist/feedback/feedback-diagnostics.d.ts +17 -0
  194. package/dist/feedback/feedback-diagnostics.js +27 -0
  195. package/dist/feedback/feedback-diagnostics.js.map +1 -0
  196. package/dist/feedback/feedback-dialog.d.ts +10 -0
  197. package/dist/feedback/feedback-dialog.js +6 -4
  198. package/dist/feedback/feedback-dialog.js.map +1 -1
  199. package/dist/feedback/feedback-inbox-page.d.ts +260 -0
  200. package/dist/feedback/feedback-inbox-page.js +207 -0
  201. package/dist/feedback/feedback-inbox-page.js.map +1 -0
  202. package/dist/feedback/feedback-record.d.ts +5 -0
  203. package/dist/feedback/feedback-record.js.map +1 -1
  204. package/dist/feedback/feedback-row-detail-labels.js +1 -0
  205. package/dist/feedback/feedback-row-detail-labels.js.map +1 -1
  206. package/dist/feedback/feedback-row-detail.d.ts +3 -0
  207. package/dist/feedback/feedback-row-detail.js +3 -0
  208. package/dist/feedback/feedback-row-detail.js.map +1 -1
  209. package/dist/feedback/feedback-submit-dialog.d.ts +5 -1
  210. package/dist/feedback/feedback-submit-dialog.js +15 -3
  211. package/dist/feedback/feedback-submit-dialog.js.map +1 -1
  212. package/dist/feedback/feedback-submit.d.ts +30 -2
  213. package/dist/feedback/feedback-submit.js +5 -2
  214. package/dist/feedback/feedback-submit.js.map +1 -1
  215. package/dist/feedback/feedback-vocabulary.js +2 -2
  216. package/dist/feedback/feedback-vocabulary.js.map +1 -1
  217. package/dist/feedback.d.ts +1 -0
  218. package/dist/feedback.js +6 -0
  219. package/dist/feedback.js.map +1 -1
  220. package/dist/hooks/use-debounce.d.ts +32 -5
  221. package/dist/hooks/use-debounce.js +6 -5
  222. package/dist/hooks/use-debounce.js.map +1 -1
  223. package/dist/hooks/use-file-picker.d.ts +3 -1
  224. package/dist/hooks/use-file-picker.js.map +1 -1
  225. package/dist/hooks/use-focus-trap.d.ts +19 -3
  226. package/dist/hooks/use-focus-trap.js +15 -5
  227. package/dist/hooks/use-focus-trap.js.map +1 -1
  228. package/dist/hooks/use-has-camera.d.ts +36 -0
  229. package/dist/hooks/use-has-camera.js +53 -0
  230. package/dist/hooks/use-has-camera.js.map +1 -0
  231. package/dist/hooks/use-hotkey.js +2 -1
  232. package/dist/hooks/use-hotkey.js.map +1 -1
  233. package/dist/hooks/use-overlay-history.d.ts +6 -1
  234. package/dist/hooks/use-overlay-history.js +10 -2
  235. package/dist/hooks/use-overlay-history.js.map +1 -1
  236. package/dist/i18n/defaults.js +11 -1
  237. package/dist/i18n/defaults.js.map +1 -1
  238. package/dist/i18n/german.js +78 -4
  239. package/dist/i18n/german.js.map +1 -1
  240. package/dist/i18n/kit-labels.d.ts +20 -0
  241. package/dist/i18n/kit-labels.js.map +1 -1
  242. package/dist/i18n/locales/en.js +95 -5
  243. package/dist/i18n/locales/en.js.map +3 -3
  244. package/dist/i18n/locales/es.js +74 -4
  245. package/dist/i18n/locales/es.js.map +1 -1
  246. package/dist/i18n/locales/fr.js +75 -3
  247. package/dist/i18n/locales/fr.js.map +1 -1
  248. package/dist/i18n/locales/hu.js +77 -4
  249. package/dist/i18n/locales/hu.js.map +1 -1
  250. package/dist/i18n/locales/it.js +77 -4
  251. package/dist/i18n/locales/it.js.map +1 -1
  252. package/dist/i18n/locales/zh.js +74 -4
  253. package/dist/i18n/locales/zh.js.map +1 -1
  254. package/dist/i18n/review.js +22 -1
  255. package/dist/i18n/review.js.map +1 -1
  256. package/dist/index.d.ts +27 -8
  257. package/dist/index.js +41 -2
  258. package/dist/index.js.map +1 -1
  259. package/dist/landing/landing-labels.d.ts +8 -0
  260. package/dist/landing/landing-labels.js +2 -1
  261. package/dist/landing/landing-labels.js.map +1 -1
  262. package/dist/lib/changelog.d.ts +130 -0
  263. package/dist/lib/changelog.js +137 -0
  264. package/dist/lib/changelog.js.map +1 -0
  265. package/dist/lib/clipboard-minus.js +2 -2
  266. package/dist/lib/clipboard-minus.js.map +1 -1
  267. package/dist/lib/dates.d.ts +36 -4
  268. package/dist/lib/dates.js +49 -13
  269. package/dist/lib/dates.js.map +1 -1
  270. package/dist/lib/editable-content.d.ts +33 -0
  271. package/dist/lib/editable-content.js +15 -0
  272. package/dist/lib/editable-content.js.map +1 -0
  273. package/dist/lib/focus-left.d.ts +47 -1
  274. package/dist/lib/focus-left.js +11 -2
  275. package/dist/lib/focus-left.js.map +1 -1
  276. package/dist/lib/format.d.ts +37 -2
  277. package/dist/lib/format.js +25 -1
  278. package/dist/lib/format.js.map +1 -1
  279. package/dist/lib/intl-cache.d.ts +4 -2
  280. package/dist/lib/intl-cache.js.map +1 -1
  281. package/dist/lib/server-wake.d.ts +49 -9
  282. package/dist/lib/server-wake.js +25 -14
  283. package/dist/lib/server-wake.js.map +1 -1
  284. package/dist/lib/session-refresh.d.ts +53 -0
  285. package/dist/lib/session-refresh.js +27 -1
  286. package/dist/lib/session-refresh.js.map +1 -1
  287. package/dist/lib/translation-review.d.ts +26 -0
  288. package/dist/lib/translation-review.js +14 -0
  289. package/dist/lib/translation-review.js.map +1 -1
  290. package/dist/rhf/fields.js +3 -3
  291. package/dist/rhf/fields.js.map +1 -1
  292. package/dist/shell/app-shell.d.ts +25 -1
  293. package/dist/shell/app-shell.js +3 -1
  294. package/dist/shell/app-shell.js.map +1 -1
  295. package/dist/shell/dev-menu.d.ts +3 -0
  296. package/dist/shell/dev-menu.js +4 -2
  297. package/dist/shell/dev-menu.js.map +1 -1
  298. package/dist/shell/held-changes-banner-labels.d.ts +23 -0
  299. package/dist/shell/held-changes-banner-labels.js +14 -0
  300. package/dist/shell/held-changes-banner-labels.js.map +1 -0
  301. package/dist/shell/held-changes-banner.d.ts +75 -0
  302. package/dist/shell/held-changes-banner.js +106 -0
  303. package/dist/shell/held-changes-banner.js.map +1 -0
  304. package/dist/shell/sync-status-indicator.d.ts +27 -12
  305. package/dist/shell/sync-status-indicator.js +13 -4
  306. package/dist/shell/sync-status-indicator.js.map +1 -1
  307. package/dist/shell/top-bar-parts-labels.d.ts +5 -0
  308. package/dist/shell/top-bar-parts-labels.js +3 -1
  309. package/dist/shell/top-bar-parts-labels.js.map +1 -1
  310. package/dist/shell.d.ts +2 -0
  311. package/dist/shell.js +3 -0
  312. package/dist/shell.js.map +1 -1
  313. package/dist/sync/engine.d.ts +11 -2
  314. package/dist/sync/engine.js +13 -5
  315. package/dist/sync/engine.js.map +1 -1
  316. package/dist/sync/hooks.d.ts +3 -2
  317. package/dist/sync/hooks.js +4 -2
  318. package/dist/sync/hooks.js.map +1 -1
  319. package/dist/testing/css-variables.generated.d.ts +2 -2
  320. package/dist/testing/css-variables.generated.js +1 -1
  321. package/dist/testing/css-variables.generated.js.map +1 -1
  322. package/dist/theme/chart-palette.d.ts +18 -0
  323. package/dist/theme/chart-palette.js +17 -1
  324. package/dist/theme/chart-palette.js.map +1 -1
  325. package/dist/theme/contrast-tokens.d.ts +3 -3
  326. package/dist/theme/contrast-tokens.js.map +1 -1
  327. package/dist/theme/contrast.d.ts +4 -4
  328. package/dist/theme/contrast.js.map +1 -1
  329. package/dist/tour/tour-overlay.js +2 -1
  330. package/dist/tour/tour-overlay.js.map +1 -1
  331. package/package.json +5 -9
  332. package/tokens.css +19 -54
  333. package/src/account/account-parts.ts +0 -47
  334. package/src/account/account-settings-labels.ts +0 -240
  335. package/src/account/account-settings.tsx +0 -698
  336. package/src/account/data-export-setting-labels.ts +0 -20
  337. package/src/account/data-export-setting.tsx +0 -200
  338. package/src/account/delete-account-setting-labels.ts +0 -33
  339. package/src/account/delete-account-setting.tsx +0 -341
  340. package/src/account/email-change-setting-labels.ts +0 -31
  341. package/src/account/email-change-setting.tsx +0 -443
  342. package/src/account/passkeys-setting.tsx +0 -445
  343. package/src/account/sessions-setting-labels.ts +0 -24
  344. package/src/account/sessions-setting.tsx +0 -283
  345. package/src/admin/admin-action-confirm-labels.ts +0 -19
  346. package/src/admin/admin-action-confirm.tsx +0 -509
  347. package/src/admin/admin-action-log-labels.ts +0 -83
  348. package/src/admin/admin-action-log.tsx +0 -464
  349. package/src/admin/admin-area-labels.ts +0 -114
  350. package/src/admin/admin-forbidden.tsx +0 -75
  351. package/src/admin/admin-overview.tsx +0 -258
  352. package/src/admin/admin-parts.ts +0 -68
  353. package/src/admin/admin-sections.tsx +0 -208
  354. package/src/admin/admin-tool-links.tsx +0 -90
  355. package/src/admin/invitations-panel-labels.ts +0 -31
  356. package/src/admin/invitations-panel.tsx +0 -516
  357. package/src/admin/mail-test-card-labels.ts +0 -19
  358. package/src/admin/mail-test-card.tsx +0 -189
  359. package/src/admin/plan-change-labels.ts +0 -5
  360. package/src/admin/plan-change.tsx +0 -474
  361. package/src/admin/reviewer-scope-editor-labels.ts +0 -16
  362. package/src/admin/reviewer-scope-editor.tsx +0 -224
  363. package/src/admin/role-select-labels.ts +0 -16
  364. package/src/admin/role-select.tsx +0 -282
  365. package/src/admin/transfer-ownership-dialog-labels.ts +0 -20
  366. package/src/admin/transfer-ownership-dialog.tsx +0 -162
  367. package/src/admin/user-roster-labels.ts +0 -17
  368. package/src/admin/user-roster.tsx +0 -559
  369. package/src/auth/accept-invitation-labels.ts +0 -21
  370. package/src/auth/accept-invitation.tsx +0 -210
  371. package/src/auth/auth-errors-labels.ts +0 -23
  372. package/src/auth/auth-errors.ts +0 -370
  373. package/src/auth/complete-name-dialog-labels.ts +0 -16
  374. package/src/auth/complete-name-dialog.tsx +0 -253
  375. package/src/auth/email-tag.ts +0 -75
  376. package/src/auth/forgot-password-form-labels.ts +0 -20
  377. package/src/auth/forgot-password-form.tsx +0 -221
  378. package/src/auth/form-rules.ts +0 -40
  379. package/src/auth/new-password-fields.tsx +0 -85
  380. package/src/auth/not-found-page-labels.ts +0 -12
  381. package/src/auth/not-found-page.tsx +0 -95
  382. package/src/auth/register-form-labels.ts +0 -31
  383. package/src/auth/register-form.tsx +0 -456
  384. package/src/auth/reset-password-form-labels.ts +0 -27
  385. package/src/auth/reset-password-form.tsx +0 -341
  386. package/src/auth/sign-in-form-labels.ts +0 -44
  387. package/src/auth/sign-in-form.tsx +0 -858
  388. package/src/auth/status-parts.tsx +0 -132
  389. package/src/auth/verify-email-labels.ts +0 -26
  390. package/src/auth/verify-email.tsx +0 -445
  391. package/src/billing/billing-banner.tsx +0 -258
  392. package/src/billing/billing-labels.ts +0 -381
  393. package/src/billing/billing-lock.ts +0 -108
  394. package/src/billing/billing-overview.ts +0 -157
  395. package/src/billing/billing-standing.ts +0 -80
  396. package/src/billing/cancel-request.ts +0 -97
  397. package/src/billing/cancel-subscription.tsx +0 -98
  398. package/src/billing/checkout-processing.ts +0 -394
  399. package/src/billing/checkout-return.ts +0 -90
  400. package/src/billing/pay-page.ts +0 -330
  401. package/src/billing/plan-card.tsx +0 -562
  402. package/src/billing/plan-change-labels.ts +0 -66
  403. package/src/billing/plan-limit-notice.tsx +0 -148
  404. package/src/billing/plan-limit-toast.tsx +0 -90
  405. package/src/billing/plan-limit.ts +0 -52
  406. package/src/billing/plan-price.ts +0 -98
  407. package/src/billing/plan-switch.tsx +0 -216
  408. package/src/billing/provider-page.ts +0 -84
  409. package/src/billing/subscription-actions.tsx +0 -247
  410. package/src/billing/subscription-status-chip.tsx +0 -95
  411. package/src/chart.ts +0 -103
  412. package/src/components/account-chips-labels.ts +0 -16
  413. package/src/components/account-chips.tsx +0 -474
  414. package/src/components/alert-banner.tsx +0 -670
  415. package/src/components/amount-input.tsx +0 -815
  416. package/src/components/appearance-labels.ts +0 -63
  417. package/src/components/authed-image-labels.ts +0 -11
  418. package/src/components/authed-image.tsx +0 -209
  419. package/src/components/autocomplete.tsx +0 -645
  420. package/src/components/breadcrumbs-labels.ts +0 -10
  421. package/src/components/breadcrumbs.tsx +0 -205
  422. package/src/components/bulk-action-bar-labels.ts +0 -11
  423. package/src/components/bulk-action-bar.tsx +0 -443
  424. package/src/components/button-group.tsx +0 -223
  425. package/src/components/button-look.ts +0 -256
  426. package/src/components/button.tsx +0 -339
  427. package/src/components/calculator.tsx +0 -341
  428. package/src/components/calendar-heatmap-labels.ts +0 -15
  429. package/src/components/calendar-heatmap.tsx +0 -594
  430. package/src/components/card.tsx +0 -377
  431. package/src/components/chart-edge.ts +0 -106
  432. package/src/components/chart-figure.tsx +0 -35
  433. package/src/components/chart-height.ts +0 -30
  434. package/src/components/chart-zoom-core.tsx +0 -627
  435. package/src/components/chart-zoom.tsx +0 -22
  436. package/src/components/chart.tsx +0 -554
  437. package/src/components/checkbox-group.tsx +0 -247
  438. package/src/components/checkbox.tsx +0 -346
  439. package/src/components/chip-input.tsx +0 -370
  440. package/src/components/chip-labels.ts +0 -13
  441. package/src/components/chip.tsx +0 -843
  442. package/src/components/choice-card.tsx +0 -544
  443. package/src/components/column-mapper-labels.ts +0 -38
  444. package/src/components/column-mapper.tsx +0 -655
  445. package/src/components/combobox-core.tsx +0 -1321
  446. package/src/components/combobox-suggestions.tsx +0 -131
  447. package/src/components/combobox.tsx +0 -716
  448. package/src/components/confirm-context.ts +0 -7
  449. package/src/components/confirm-dialog-labels.ts +0 -13
  450. package/src/components/confirm-dialog.tsx +0 -341
  451. package/src/components/copy-button-labels.ts +0 -13
  452. package/src/components/copy-button.tsx +0 -192
  453. package/src/components/country-select-labels.ts +0 -11
  454. package/src/components/country-select.tsx +0 -539
  455. package/src/components/currency-option-list.tsx +0 -180
  456. package/src/components/currency-select.tsx +0 -341
  457. package/src/components/danger-confirm-labels.ts +0 -20
  458. package/src/components/danger-confirm.tsx +0 -934
  459. package/src/components/data-table-cells.tsx +0 -118
  460. package/src/components/data-table-column-settings.tsx +0 -198
  461. package/src/components/data-table-filter-popover.tsx +0 -281
  462. package/src/components/data-table-filters.ts +0 -287
  463. package/src/components/data-table-fit.ts +0 -301
  464. package/src/components/data-table-groups.tsx +0 -288
  465. package/src/components/data-table-head.tsx +0 -280
  466. package/src/components/data-table-labels.ts +0 -198
  467. package/src/components/data-table-leading-row.tsx +0 -58
  468. package/src/components/data-table-mobile.tsx +0 -1117
  469. package/src/components/data-table-pagination.tsx +0 -202
  470. package/src/components/data-table-resize.ts +0 -188
  471. package/src/components/data-table-row-actions.tsx +0 -302
  472. package/src/components/data-table-row.tsx +0 -496
  473. package/src/components/data-table-selection.ts +0 -71
  474. package/src/components/data-table-shared.tsx +0 -287
  475. package/src/components/data-table-sort.ts +0 -163
  476. package/src/components/data-table-virtual.ts +0 -576
  477. package/src/components/data-table.tsx +0 -2598
  478. package/src/components/date-field.tsx +0 -684
  479. package/src/components/date-format-setting.tsx +0 -64
  480. package/src/components/date-picker.tsx +0 -404
  481. package/src/components/date-range-picker.tsx +0 -518
  482. package/src/components/description-list-labels.ts +0 -9
  483. package/src/components/description-list.tsx +0 -386
  484. package/src/components/dialog-frame-labels.ts +0 -7
  485. package/src/components/dialog-frame.tsx +0 -276
  486. package/src/components/disclosure.tsx +0 -476
  487. package/src/components/dropdown.tsx +0 -461
  488. package/src/components/empty-state.tsx +0 -136
  489. package/src/components/entity-combobox.tsx +0 -422
  490. package/src/components/error-boundary-labels.ts +0 -20
  491. package/src/components/error-boundary.tsx +0 -675
  492. package/src/components/facing-pair.ts +0 -93
  493. package/src/components/field-base-labels.ts +0 -20
  494. package/src/components/field-base.tsx +0 -656
  495. package/src/components/field-parts.tsx +0 -825
  496. package/src/components/field-strip.tsx +0 -129
  497. package/src/components/field.tsx +0 -206
  498. package/src/components/file-button.tsx +0 -295
  499. package/src/components/file-dropzone.tsx +0 -559
  500. package/src/components/floating-panel-labels.ts +0 -10
  501. package/src/components/floating-panel.tsx +0 -828
  502. package/src/components/focus-ring.ts +0 -16
  503. package/src/components/form-actions-labels.ts +0 -11
  504. package/src/components/form-actions.tsx +0 -578
  505. package/src/components/full-bleed-dialog.tsx +0 -294
  506. package/src/components/grouped-picker.tsx +0 -184
  507. package/src/components/help-popover.tsx +0 -117
  508. package/src/components/hover-menu.tsx +0 -343
  509. package/src/components/iban-input-labels.ts +0 -14
  510. package/src/components/iban-input.tsx +0 -236
  511. package/src/components/icon-button.tsx +0 -959
  512. package/src/components/icon-picker-labels.ts +0 -13
  513. package/src/components/icon-picker.tsx +0 -232
  514. package/src/components/image-grid-labels.ts +0 -11
  515. package/src/components/image-grid.tsx +0 -202
  516. package/src/components/inline-confirm.tsx +0 -116
  517. package/src/components/inline-edit-field-labels.ts +0 -11
  518. package/src/components/inline-edit-field.tsx +0 -552
  519. package/src/components/inline-entity-combobox.tsx +0 -849
  520. package/src/components/input.tsx +0 -394
  521. package/src/components/jump-calendar.tsx +0 -265
  522. package/src/components/language-select.tsx +0 -93
  523. package/src/components/legal-labels.ts +0 -105
  524. package/src/components/legal-page.tsx +0 -711
  525. package/src/components/legal.tsx +0 -668
  526. package/src/components/lightbox-labels.ts +0 -18
  527. package/src/components/lightbox.tsx +0 -399
  528. package/src/components/line-items-labels.ts +0 -14
  529. package/src/components/line-items.tsx +0 -602
  530. package/src/components/list-labels.ts +0 -12
  531. package/src/components/list.tsx +0 -870
  532. package/src/components/loading-state.tsx +0 -78
  533. package/src/components/measured-grid-labels.ts +0 -25
  534. package/src/components/measured-grid.tsx +0 -837
  535. package/src/components/menu-item.tsx +0 -241
  536. package/src/components/mini-calendar-labels.ts +0 -17
  537. package/src/components/mini-calendar.tsx +0 -789
  538. package/src/components/modal.tsx +0 -505
  539. package/src/components/money-draft.ts +0 -83
  540. package/src/components/money-field.tsx +0 -76
  541. package/src/components/month-grid.tsx +0 -229
  542. package/src/components/month-picker-labels.ts +0 -22
  543. package/src/components/month-picker.tsx +0 -1087
  544. package/src/components/multi-entity-combobox.tsx +0 -369
  545. package/src/components/multi-select.tsx +0 -376
  546. package/src/components/nav-pills.tsx +0 -198
  547. package/src/components/number-field.tsx +0 -327
  548. package/src/components/number-input.tsx +0 -558
  549. package/src/components/numeric-field.ts +0 -169
  550. package/src/components/numpad-sheet.tsx +0 -285
  551. package/src/components/one-time-code-input.tsx +0 -270
  552. package/src/components/page-contents-labels.ts +0 -9
  553. package/src/components/page-contents.tsx +0 -282
  554. package/src/components/page-header-context.ts +0 -8
  555. package/src/components/page-header.tsx +0 -298
  556. package/src/components/password-strength-labels.ts +0 -22
  557. package/src/components/password-strength.tsx +0 -241
  558. package/src/components/phone-input-labels.ts +0 -10
  559. package/src/components/phone-input.tsx +0 -282
  560. package/src/components/picker-sheet.tsx +0 -330
  561. package/src/components/pie-chart-labels.ts +0 -40
  562. package/src/components/pie-chart.tsx +0 -480
  563. package/src/components/popover-labels.ts +0 -14
  564. package/src/components/popover.tsx +0 -268
  565. package/src/components/progress-bar-labels.ts +0 -10
  566. package/src/components/progress-bar.tsx +0 -479
  567. package/src/components/qr-code.tsx +0 -76
  568. package/src/components/reauth-dialog-labels.ts +0 -13
  569. package/src/components/reauth-dialog.tsx +0 -265
  570. package/src/components/row-actions-labels.ts +0 -12
  571. package/src/components/row-actions.tsx +0 -795
  572. package/src/components/scroll-area.tsx +0 -123
  573. package/src/components/search-field.tsx +0 -192
  574. package/src/components/select.tsx +0 -294
  575. package/src/components/separator.tsx +0 -33
  576. package/src/components/series-chart-axes.ts +0 -342
  577. package/src/components/series-chart-budget.ts +0 -150
  578. package/src/components/series-chart-labels.ts +0 -33
  579. package/src/components/series-chart-thin.ts +0 -180
  580. package/src/components/series-chart-ticks.ts +0 -194
  581. package/src/components/series-chart.tsx +0 -1906
  582. package/src/components/server-wake-labels.ts +0 -11
  583. package/src/components/server-wake.tsx +0 -129
  584. package/src/components/settings-fields.tsx +0 -237
  585. package/src/components/share-card-labels.ts +0 -30
  586. package/src/components/share-card.tsx +0 -675
  587. package/src/components/signature-pad-labels.ts +0 -24
  588. package/src/components/signature-pad.tsx +0 -747
  589. package/src/components/signed-amount-labels.ts +0 -10
  590. package/src/components/signed-amount.tsx +0 -336
  591. package/src/components/skeleton.tsx +0 -80
  592. package/src/components/slider.tsx +0 -338
  593. package/src/components/sparkline-labels.ts +0 -14
  594. package/src/components/sparkline.tsx +0 -322
  595. package/src/components/spinner.tsx +0 -81
  596. package/src/components/stat-tile-labels.ts +0 -15
  597. package/src/components/stat-tile.tsx +0 -725
  598. package/src/components/status-dot.tsx +0 -170
  599. package/src/components/swatch-picker-labels.ts +0 -10
  600. package/src/components/swatch-picker.tsx +0 -283
  601. package/src/components/swipeable-row.tsx +0 -386
  602. package/src/components/switch.tsx +0 -273
  603. package/src/components/table-skeleton.tsx +0 -136
  604. package/src/components/table.tsx +0 -647
  605. package/src/components/tabs-labels.ts +0 -13
  606. package/src/components/tabs.tsx +0 -693
  607. package/src/components/text-link.tsx +0 -359
  608. package/src/components/text.tsx +0 -150
  609. package/src/components/textarea.tsx +0 -330
  610. package/src/components/tile-radio.tsx +0 -332
  611. package/src/components/time-input.tsx +0 -121
  612. package/src/components/toast-labels.ts +0 -12
  613. package/src/components/toast.tsx +0 -519
  614. package/src/components/toggle-group.tsx +0 -752
  615. package/src/components/toggle-legend.tsx +0 -394
  616. package/src/components/tooltip.tsx +0 -1149
  617. package/src/components/translation-review-editor.tsx +0 -290
  618. package/src/components/translation-review-labels.ts +0 -181
  619. package/src/components/translation-review-parts.tsx +0 -272
  620. package/src/components/translation-review.tsx +0 -1240
  621. package/src/components/tree-view.tsx +0 -589
  622. package/src/components/treemap-labels.ts +0 -47
  623. package/src/components/treemap-layout.ts +0 -210
  624. package/src/components/treemap.tsx +0 -1184
  625. package/src/components/trigger-aria.ts +0 -44
  626. package/src/components/use-anchor-dir.ts +0 -20
  627. package/src/components/use-mobile-reveal.ts +0 -62
  628. package/src/components/use-table-state.ts +0 -753
  629. package/src/components/user-avatar.tsx +0 -116
  630. package/src/components/wizard-stepper.tsx +0 -42
  631. package/src/components/write-lock-labels.ts +0 -10
  632. package/src/components/write-lock.tsx +0 -253
  633. package/src/currencies.ts +0 -70
  634. package/src/data-table.ts +0 -42
  635. package/src/demo/demo-banner.tsx +0 -153
  636. package/src/demo/demo-countdown.ts +0 -136
  637. package/src/demo/demo-ended.tsx +0 -90
  638. package/src/demo/demo-labels.ts +0 -78
  639. package/src/demo/demo-session.ts +0 -32
  640. package/src/demo/demo-start.tsx +0 -156
  641. package/src/eslint/index.ts +0 -161
  642. package/src/eslint/role-utilities.generated.ts +0 -146
  643. package/src/eslint/role-utilities.ts +0 -233
  644. package/src/feedback/feedback-attachment-download.tsx +0 -77
  645. package/src/feedback/feedback-attachment-labels.ts +0 -37
  646. package/src/feedback/feedback-attachment.tsx +0 -1239
  647. package/src/feedback/feedback-capture.ts +0 -287
  648. package/src/feedback/feedback-comment-thread.tsx +0 -353
  649. package/src/feedback/feedback-context-labels.ts +0 -10
  650. package/src/feedback/feedback-context.tsx +0 -213
  651. package/src/feedback/feedback-crash.ts +0 -547
  652. package/src/feedback/feedback-dialog-labels.ts +0 -29
  653. package/src/feedback/feedback-dialog.tsx +0 -440
  654. package/src/feedback/feedback-entry-file.tsx +0 -150
  655. package/src/feedback/feedback-inbox.tsx +0 -552
  656. package/src/feedback/feedback-labels.ts +0 -144
  657. package/src/feedback/feedback-menu-labels.ts +0 -12
  658. package/src/feedback/feedback-menu.tsx +0 -177
  659. package/src/feedback/feedback-mutation.ts +0 -20
  660. package/src/feedback/feedback-page-link.ts +0 -90
  661. package/src/feedback/feedback-public-labels.ts +0 -81
  662. package/src/feedback/feedback-public-list.tsx +0 -524
  663. package/src/feedback/feedback-public-switch.tsx +0 -102
  664. package/src/feedback/feedback-public-types.ts +0 -101
  665. package/src/feedback/feedback-record.ts +0 -423
  666. package/src/feedback/feedback-replies-context.ts +0 -9
  667. package/src/feedback/feedback-replies.tsx +0 -343
  668. package/src/feedback/feedback-rework-entry-chip.tsx +0 -18
  669. package/src/feedback/feedback-row-detail-labels.ts +0 -30
  670. package/src/feedback/feedback-row-detail.tsx +0 -858
  671. package/src/feedback/feedback-status-undo.ts +0 -109
  672. package/src/feedback/feedback-submit-dialog.tsx +0 -118
  673. package/src/feedback/feedback-submit.tsx +0 -237
  674. package/src/feedback/feedback-swipe.tsx +0 -192
  675. package/src/feedback/feedback-table-labels.ts +0 -27
  676. package/src/feedback/feedback-table.tsx +0 -912
  677. package/src/feedback/feedback-thread-labels.ts +0 -22
  678. package/src/feedback/feedback-thread-parts-labels.ts +0 -41
  679. package/src/feedback/feedback-thread.tsx +0 -905
  680. package/src/feedback/feedback-vocabulary.ts +0 -263
  681. package/src/feedback/feedback-vote-button.tsx +0 -124
  682. package/src/feedback.ts +0 -116
  683. package/src/hooks/use-anchored-panel.ts +0 -396
  684. package/src/hooks/use-anchored-rect.ts +0 -77
  685. package/src/hooks/use-announce.ts +0 -85
  686. package/src/hooks/use-authed-src.ts +0 -167
  687. package/src/hooks/use-body-scroll-lock.ts +0 -119
  688. package/src/hooks/use-breakpoint.ts +0 -133
  689. package/src/hooks/use-close-transition.ts +0 -107
  690. package/src/hooks/use-copy-to-clipboard.ts +0 -122
  691. package/src/hooks/use-debounce.ts +0 -114
  692. package/src/hooks/use-dismiss.ts +0 -371
  693. package/src/hooks/use-document-title.ts +0 -33
  694. package/src/hooks/use-file-drop.ts +0 -121
  695. package/src/hooks/use-file-picker-labels.ts +0 -28
  696. package/src/hooks/use-file-picker.tsx +0 -359
  697. package/src/hooks/use-focus-trap.ts +0 -199
  698. package/src/hooks/use-hotkey.ts +0 -189
  699. package/src/hooks/use-large-text.ts +0 -41
  700. package/src/hooks/use-long-press.ts +0 -140
  701. package/src/hooks/use-media-query.ts +0 -39
  702. package/src/hooks/use-mounted.ts +0 -39
  703. package/src/hooks/use-noindex.ts +0 -37
  704. package/src/hooks/use-overlay-history.ts +0 -714
  705. package/src/hooks/use-row-swipe.ts +0 -207
  706. package/src/hooks/use-search-param-state.ts +0 -434
  707. package/src/hooks/use-windowed-rows.ts +0 -225
  708. package/src/i18n/defaults.ts +0 -267
  709. package/src/i18n/german.ts +0 -2057
  710. package/src/i18n/kit-labels.tsx +0 -1003
  711. package/src/i18n/languages.ts +0 -349
  712. package/src/i18n/locales/de-CH.ts +0 -24
  713. package/src/i18n/locales/en.ts +0 -267
  714. package/src/i18n/locales/es.ts +0 -1997
  715. package/src/i18n/locales/fr.ts +0 -2035
  716. package/src/i18n/locales/hu.ts +0 -2002
  717. package/src/i18n/locales/it.ts +0 -2012
  718. package/src/i18n/locales/zh.ts +0 -1910
  719. package/src/i18n/plurals.ts +0 -86
  720. package/src/i18n/review.ts +0 -475
  721. package/src/i18n/shared-labels.ts +0 -138
  722. package/src/i18n/swiss.ts +0 -29
  723. package/src/index.ts +0 -1179
  724. package/src/landing/access.ts +0 -93
  725. package/src/landing/landing-actions.tsx +0 -97
  726. package/src/landing/landing-labels.ts +0 -59
  727. package/src/landing/landing-sections.tsx +0 -341
  728. package/src/landing/page-seo.ts +0 -261
  729. package/src/landing/public-header.tsx +0 -121
  730. package/src/landing/public-page.tsx +0 -106
  731. package/src/landing/routing.tsx +0 -225
  732. package/src/lib/broadcast.ts +0 -52
  733. package/src/lib/calc.ts +0 -323
  734. package/src/lib/chip-edge-snap.ts +0 -212
  735. package/src/lib/clipboard-minus.ts +0 -107
  736. package/src/lib/clipping.ts +0 -34
  737. package/src/lib/cn.ts +0 -28
  738. package/src/lib/column-mapping.ts +0 -234
  739. package/src/lib/countries.ts +0 -91
  740. package/src/lib/data-attributes.ts +0 -14
  741. package/src/lib/date-format.ts +0 -227
  742. package/src/lib/dates.ts +0 -266
  743. package/src/lib/day-format.ts +0 -96
  744. package/src/lib/decimal-marks.ts +0 -108
  745. package/src/lib/describe-failure.ts +0 -18
  746. package/src/lib/device-settings.ts +0 -147
  747. package/src/lib/direction.ts +0 -74
  748. package/src/lib/document-navigation.ts +0 -17
  749. package/src/lib/document-title.ts +0 -41
  750. package/src/lib/download.ts +0 -172
  751. package/src/lib/float-clearance.ts +0 -70
  752. package/src/lib/floating-stack.ts +0 -70
  753. package/src/lib/focus-left.ts +0 -156
  754. package/src/lib/format.ts +0 -522
  755. package/src/lib/http-status.ts +0 -38
  756. package/src/lib/iban.ts +0 -251
  757. package/src/lib/ime.ts +0 -24
  758. package/src/lib/intl-cache.ts +0 -25
  759. package/src/lib/iso-day.ts +0 -13
  760. package/src/lib/lazy-with-fallback.ts +0 -82
  761. package/src/lib/logger.ts +0 -69
  762. package/src/lib/minus.ts +0 -50
  763. package/src/lib/path-pattern.ts +0 -55
  764. package/src/lib/person-name.ts +0 -155
  765. package/src/lib/phone.ts +0 -208
  766. package/src/lib/plain-text.ts +0 -22
  767. package/src/lib/presence.ts +0 -18
  768. package/src/lib/qr-encode.ts +0 -444
  769. package/src/lib/quiet-focus.ts +0 -32
  770. package/src/lib/reduced-motion.ts +0 -22
  771. package/src/lib/refs.ts +0 -22
  772. package/src/lib/round.ts +0 -43
  773. package/src/lib/safe-storage.ts +0 -119
  774. package/src/lib/server-wake.ts +0 -315
  775. package/src/lib/session-refresh.ts +0 -472
  776. package/src/lib/share-format.ts +0 -18
  777. package/src/lib/status-tone.ts +0 -43
  778. package/src/lib/strip-fade.ts +0 -287
  779. package/src/lib/table-text.ts +0 -554
  780. package/src/lib/text-case.ts +0 -19
  781. package/src/lib/text-match.ts +0 -169
  782. package/src/lib/thenable.ts +0 -19
  783. package/src/lib/translation-review.ts +0 -717
  784. package/src/notifications/device-zone-report.ts +0 -67
  785. package/src/notifications/feedback-notification-types-labels.ts +0 -33
  786. package/src/notifications/feedback-notification-types.ts +0 -71
  787. package/src/notifications/notification-bell.tsx +0 -119
  788. package/src/notifications/notification-inbox.tsx +0 -309
  789. package/src/notifications/notification-parts.tsx +0 -81
  790. package/src/notifications/notification-types-setting.tsx +0 -406
  791. package/src/notifications/notification-types.ts +0 -89
  792. package/src/notifications/notifications-labels.ts +0 -287
  793. package/src/notifications/push-device-setting.tsx +0 -230
  794. package/src/notifications/push-devices-setting.tsx +0 -374
  795. package/src/notifications/push-worker.ts +0 -168
  796. package/src/notifications/quiet-hours-setting.tsx +0 -238
  797. package/src/notifications/unsubscribe-panel.tsx +0 -200
  798. package/src/notifications/use-push-device.ts +0 -448
  799. package/src/offline/local-first.ts +0 -100
  800. package/src/offline/pwa-update-prompt-labels.ts +0 -9
  801. package/src/offline/pwa-update-prompt.tsx +0 -78
  802. package/src/offline/query-persistence.ts +0 -391
  803. package/src/offline/service-worker-updates.ts +0 -81
  804. package/src/offline/shared-computer-labels.ts +0 -8
  805. package/src/offline/shared-computer.tsx +0 -87
  806. package/src/offline/sign-out-pending-dialog-labels.ts +0 -21
  807. package/src/offline/sign-out-pending-dialog.tsx +0 -135
  808. package/src/offline.ts +0 -37
  809. package/src/push-worker.ts +0 -25
  810. package/src/rhf/fields.tsx +0 -2187
  811. package/src/rhf/form-core.tsx +0 -324
  812. package/src/rhf/form.tsx +0 -12
  813. package/src/rhf/line-items.tsx +0 -135
  814. package/src/rhf/use-rhf-wizard-step.ts +0 -104
  815. package/src/rhf.ts +0 -21
  816. package/src/search/command-palette-labels.ts +0 -16
  817. package/src/search/command-palette.tsx +0 -624
  818. package/src/search/global-search-labels.ts +0 -13
  819. package/src/search/global-search.tsx +0 -660
  820. package/src/search/search-index.ts +0 -283
  821. package/src/search/use-command-key.ts +0 -23
  822. package/src/search.ts +0 -14
  823. package/src/settings/device-reset-setting-labels.ts +0 -20
  824. package/src/settings/device-reset-setting.tsx +0 -116
  825. package/src/settings/settings-card-classes.ts +0 -11
  826. package/src/settings/settings-catalogue.ts +0 -150
  827. package/src/settings/settings-context.ts +0 -33
  828. package/src/settings/settings-heading.tsx +0 -67
  829. package/src/settings/settings-labels.ts +0 -87
  830. package/src/settings/settings-layout.tsx +0 -471
  831. package/src/settings/settings-section.tsx +0 -108
  832. package/src/settings/use-account-appearance.ts +0 -148
  833. package/src/settings/use-account-language.ts +0 -146
  834. package/src/settings/use-settings-focus.ts +0 -128
  835. package/src/settings/use-settings-route.ts +0 -258
  836. package/src/shell/account-menu-language.tsx +0 -130
  837. package/src/shell/account-menu-text-size.tsx +0 -80
  838. package/src/shell/admin-menu.tsx +0 -183
  839. package/src/shell/app-shell-labels.ts +0 -11
  840. package/src/shell/app-shell.tsx +0 -1560
  841. package/src/shell/auth-layout.tsx +0 -186
  842. package/src/shell/company-switcher-labels.ts +0 -13
  843. package/src/shell/company-switcher.tsx +0 -136
  844. package/src/shell/dev-menu.tsx +0 -257
  845. package/src/shell/fill-height.tsx +0 -45
  846. package/src/shell/language-code.ts +0 -5
  847. package/src/shell/option-switcher-menu.tsx +0 -84
  848. package/src/shell/sync-status-indicator.tsx +0 -303
  849. package/src/shell/top-bar-actions.tsx +0 -87
  850. package/src/shell/top-bar-brand.tsx +0 -78
  851. package/src/shell/top-bar-parts-labels.ts +0 -148
  852. package/src/shell/top-bar.tsx +0 -40
  853. package/src/shell/topbar-action-menu.tsx +0 -567
  854. package/src/shell/topbar-controls.tsx +0 -269
  855. package/src/shell/tour-menu.tsx +0 -187
  856. package/src/shell.ts +0 -108
  857. package/src/sync/db.ts +0 -129
  858. package/src/sync/engine.ts +0 -1011
  859. package/src/sync/hooks.ts +0 -98
  860. package/src/sync/testing.ts +0 -73
  861. package/src/sync/wire.ts +0 -61
  862. package/src/sync.ts +0 -37
  863. package/src/table-text.ts +0 -8
  864. package/src/testing/css-variables.generated.ts +0 -112
  865. package/src/testing/css-variables.ts +0 -189
  866. package/src/testing/index.ts +0 -29
  867. package/src/testing/react.ts +0 -58
  868. package/src/testing/tour.ts +0 -41
  869. package/src/testing/viewport.ts +0 -357
  870. package/src/theme/chart-palette.ts +0 -232
  871. package/src/theme/color.ts +0 -272
  872. package/src/theme/contrast-tokens.ts +0 -268
  873. package/src/theme/contrast.ts +0 -250
  874. package/src/theme/palette-derive.ts +0 -825
  875. package/src/theme/palette-presets.ts +0 -544
  876. package/src/theme/palette-store.ts +0 -108
  877. package/src/theme/text-size.ts +0 -289
  878. package/src/theme/theme-store.ts +0 -157
  879. package/src/tour/tour-catalogue-labels.ts +0 -75
  880. package/src/tour/tour-catalogue.tsx +0 -335
  881. package/src/tour/tour-dock.ts +0 -134
  882. package/src/tour/tour-engine.ts +0 -37
  883. package/src/tour/tour-gates.ts +0 -218
  884. package/src/tour/tour-guide-button.tsx +0 -64
  885. package/src/tour/tour-guide-labels.ts +0 -15
  886. package/src/tour/tour-info.ts +0 -144
  887. package/src/tour/tour-labels.ts +0 -23
  888. package/src/tour/tour-overlay.tsx +0 -1170
  889. package/src/tour/tour.tsx +0 -750
  890. package/src/tour/use-tour-progress.ts +0 -671
  891. package/src/tour/use-tour-url-sync.ts +0 -266
  892. package/src/tour.ts +0 -21
  893. package/src/vite-env.d.ts +0 -23
  894. package/src/wizard/stepper-nav.tsx +0 -360
  895. package/src/wizard/types.ts +0 -275
  896. package/src/wizard/use-wizard.ts +0 -560
  897. package/src/wizard/validation.ts +0 -39
  898. package/src/wizard/wizard-context.tsx +0 -74
  899. package/src/wizard/wizard-labels.ts +0 -29
  900. package/src/wizard/wizard-step.tsx +0 -76
  901. package/src/wizard/wizard-summary.tsx +0 -84
  902. package/src/wizard.ts +0 -15
@@ -1,266 +0,0 @@
1
- import { createContext, useContext, useEffect, useLayoutEffect, useRef, useState, type Context } from "react";
2
- import * as ReactRouter from "react-router";
3
- import { useLocation, useNavigate, type Navigator } from "react-router";
4
- import { useSearchParamsState } from "../hooks/use-search-param-state";
5
- import { useTourOptional, type TourEngine, type TourStart } from "./tour";
6
- import { liveEngine } from "./tour-engine";
7
- import { devWarnings } from "./tour-gates";
8
-
9
- /* ── useTourUrlSync ─────────────────────────────────────────────────────────── */
10
-
11
- export interface UseTourUrlSyncOptions {
12
- /**
13
- * Start the tour `id` at `startIndex` (0-based) — the app's launcher, which builds the
14
- * steps, awaits its own `prepare()` and passes `onFinish` (the completion, the points
15
- * toast) to `useTour().start`. An unknown id should do nothing. May return a promise:
16
- * the parameters are kept until it settles. Under a `TourProvider` the third argument is
17
- * that provider's `start` (0.50, as `TourProvider launch` gets it), so one launcher serves
18
- * both; the fourth is its whole engine, read live (0.50.1, `TourEngine`: `stop`, `next`,
19
- * `active`, …). Without a provider `start` and the engine's methods do nothing (a
20
- * development build warns) and the engine reads as idle.
21
- */
22
- launch: (
23
- id: string,
24
- options: { startIndex: number },
25
- start: TourStart,
26
- engine: TourEngine,
27
- ) => void | Promise<unknown>;
28
- /**
29
- * Are the facts a tour's steps are built from loaded yet (keksdose's `ready`: the
30
- * caches a branching tour reads)? A deep link waits for it, keeping its parameters, so
31
- * an F5 mid-tour resumes the right variant at the right step. Default `true`.
32
- */
33
- ready?: boolean;
34
- /**
35
- * Older names of `tourStep`, read when it is absent and removed with it — kastlan's
36
- * `ts` (§2.7, for one minor). Their value is a 0-based step index, as kastlan wrote it.
37
- */
38
- stepAliases?: readonly string[];
39
- }
40
-
41
- type Place = { pathname: string; search: string; hash: string };
42
-
43
- /**
44
- * Has the router already moved on from the location React is still rendering?
45
- * keksdose's check (tour-url-sync.tsx, tours audit 2026-10-02): a mirror write built
46
- * from the page being LEFT is a replace back onto it, which cancels a step's `go()`.
47
- *
48
- * - A data router (`createBrowserRouter`, kastlan): its navigator has no location (build
49
- * review 0.43, kastlan A2), so the router's own state answers — a navigation still
50
- * loading, or a location it has committed that React has not rendered yet.
51
- * - A declarative router (`BrowserRouter`, keksdose): its navigator is its history and
52
- * carries where it is.
53
- * - Anything else answers "not in flight".
54
- */
55
- function navigationInFlight(history: Navigator | undefined, dataRouter: DataRouterProbe, rendered: Place) {
56
- const state = dataRouter?.router?.state;
57
- if (state && (state.navigation?.state ?? "idle") !== "idle") return true;
58
- const live = state?.location ?? (history as (Navigator & { location?: Partial<Place> }) | undefined)?.location;
59
- if (!live) return false;
60
- return (
61
- live.pathname !== rendered.pathname ||
62
- (live.search ?? "") !== rendered.search ||
63
- (live.hash ?? "") !== rendered.hash
64
- );
65
- }
66
-
67
- type NavigationProbe = { navigator?: Navigator } | null;
68
- const NO_NAVIGATION = createContext<NavigationProbe>(null);
69
- /** The data router's state, as `useSearchParamState` reads it. */
70
- type DataRouterProbe = {
71
- router?: { state?: { navigation?: { state?: string }; location?: Partial<Place> } };
72
- } | null;
73
- const NO_DATA_ROUTER = createContext<DataRouterProbe>(null);
74
- const DataRouterContext: Context<DataRouterProbe> = (() => {
75
- try {
76
- return (
77
- (ReactRouter as unknown as { UNSAFE_DataRouterContext?: Context<DataRouterProbe> }).UNSAFE_DataRouterContext ??
78
- NO_DATA_ROUTER
79
- );
80
- } catch {
81
- return NO_DATA_ROUTER;
82
- }
83
- })();
84
- /** Read off the namespace inside a `try`, as `useSearchParamState` reads the data router:
85
- * a test's partial `vi.mock("react-router")` throws on an export it does not define. */
86
- const NavigationContext: Context<NavigationProbe> = (() => {
87
- try {
88
- return (
89
- (ReactRouter as unknown as { UNSAFE_NavigationContext?: Context<NavigationProbe> }).UNSAFE_NavigationContext ??
90
- NO_NAVIGATION
91
- );
92
- } catch {
93
- return NO_NAVIGATION;
94
- }
95
- })();
96
-
97
- /** The step a link asks for, 0-based: `tourStep` is 1-based (keksdose), an alias 0-based.
98
- * Floored, as the aliases always were (FLW-9): `?tourStep=2.5` was index 1.5. */
99
- function stepOf(params: URLSearchParams, aliases: readonly string[]): number {
100
- const step = Number(params.get("tourStep"));
101
- if (params.has("tourStep")) return Number.isFinite(step) && step >= 1 ? Math.floor(step) - 1 : 0;
102
- for (const alias of aliases) {
103
- const value = Number(params.get(alias));
104
- if (params.has(alias)) return Number.isFinite(value) && value > 0 ? Math.floor(value) : 0;
105
- }
106
- return 0;
107
- }
108
-
109
- /**
110
- * Tours and the URL (docs/tours-harmonization.md §2.7, §6.4) — keksdose's `TourUrlSync`,
111
- * on the kit's engine (`useTourOptional`):
112
- *
113
- * - **`?tour=<id>` starts that tour whenever it APPEARS** — on load, and on in-app
114
- * navigation too (kastlan's assistant links to `/help/tours?tour=<id>`, ka F4) —
115
- * resuming at `&tourStep=<n>` (1-based). It waits for `ready`.
116
- * - **While a tour runs, `?tour=&tourStep=` mirror where it is**, so a reload or a copied
117
- * link pins the step (kk K-3). A step that navigates drops them; this puts them back.
118
- * - **At the end it strips only its own parameters**; `?q=`, `?state=` and the hash stay.
119
- *
120
- * Mount it once inside the router and the `TourProvider`. Without a provider it still
121
- * launches through `launch` and never mirrors.
122
- */
123
- export function useTourUrlSync({ launch, ready = true, stepAliases = [] }: UseTourUrlSyncOptions): void {
124
- const navigate = useNavigate();
125
- const location = useLocation();
126
- const { pathname, search, hash } = location;
127
- const history = useContext(NavigationContext)?.navigator;
128
- const dataRouter = useContext(DataRouterContext);
129
- const engine = useTourOptional();
130
- const active = engine?.active ?? false;
131
- const activeId = engine?.activeId ?? null;
132
- const index = engine?.index ?? 0;
133
- const urlTour = new URLSearchParams(search).get("tour");
134
- const aliases = stepAliases.join("\n");
135
-
136
- const launchRef = useRef(launch);
137
- const startRef = useRef<TourStart>(engine?.start ?? noProviderStart);
138
- const [live] = useState(() => liveEngine<TourEngine>(ENGINE_KEYS, NO_PROVIDER_ENGINE));
139
- const activeIdRef = useRef(activeId);
140
- useLayoutEffect(() => {
141
- launchRef.current = launch;
142
- startRef.current = engine?.start ?? noProviderStart;
143
- live.set(engine ?? NO_PROVIDER_ENGINE);
144
- activeIdRef.current = active ? activeId : null;
145
- });
146
- /** The `tour` value last seen in the URL: a tour starts when it CHANGES to an id. */
147
- const seenRef = useRef<string | null>(null);
148
- /** A deep link waiting for `ready`. */
149
- const pendingRef = useRef<{ id: string; startIndex: number } | null>(null);
150
- /** A launch under way (an app's `prepare()`). */
151
- const launchingRef = useRef(false);
152
- /** Bumped when a launch settles, so the mirror looks again. */
153
- const [settled, setSettled] = useState(0);
154
-
155
- useEffect(() => {
156
- if (urlTour !== seenRef.current) {
157
- seenRef.current = urlTour;
158
- // Its own mirror writing the running tour back is no new link.
159
- pendingRef.current =
160
- urlTour && urlTour !== activeIdRef.current
161
- ? { id: urlTour, startIndex: stepOf(new URLSearchParams(search), aliases ? aliases.split("\n") : []) }
162
- : null;
163
- }
164
- const pending = pendingRef.current;
165
- if (!pending || !ready) return;
166
- pendingRef.current = null;
167
- launchingRef.current = true;
168
- void Promise.resolve()
169
- .then(() => launchRef.current(pending.id, { startIndex: pending.startIndex }, startRef.current, live.engine))
170
- // Said, as `TourProvider`'s own `launch` path says it (FLW-9): swallowed, a launch
171
- // that failed was a tour that silently did not start — in kastlan after its
172
- // launcher had already turned practice mode on.
173
- .catch((error: unknown) => console.error(error))
174
- .finally(() => {
175
- launchingRef.current = false;
176
- setSettled((n) => n + 1);
177
- });
178
- // Only a change of the parameter, or readiness, starts a tour.
179
- // eslint-disable-next-line react-hooks/exhaustive-deps
180
- }, [urlTour, ready]);
181
-
182
- useEffect(() => {
183
- if (navigationInFlight(history, dataRouter, { pathname, search, hash })) return;
184
- // A link not yet used keeps its parameters: a reload in that window resumes.
185
- if (pendingRef.current || launchingRef.current) return;
186
- const tourId = active && activeId ? activeId : null;
187
- const own = ["tour", "tourStep", ...(aliases ? aliases.split("\n") : [])];
188
- const current = new URLSearchParams(search);
189
- // Nothing to mirror and nothing to strip: never touch the URL (a no-op replace
190
- // clobbers a page's own just-issued navigation, keksdose feedback #4).
191
- if (!tourId && !own.some((key) => current.has(key))) return;
192
- const next = new URLSearchParams(search);
193
- // `set` keeps a parameter where it stands; only the aliases (and, at the end, the
194
- // tour's own) go.
195
- for (const key of tourId ? own.slice(2) : own) next.delete(key);
196
- if (tourId) {
197
- next.set("tour", tourId);
198
- next.set("tourStep", String(index + 1));
199
- }
200
- if (next.toString() === current.toString()) return;
201
- // Spelled out, not `setSearchParams` ("?…" drops the hash, keksdose dev#495).
202
- void navigate({ pathname, search: next.toString(), hash }, { replace: true, state: location.state });
203
- // eslint-disable-next-line react-hooks/exhaustive-deps
204
- }, [active, activeId, index, pathname, search, hash, settled, aliases]);
205
- }
206
-
207
- /** `start` for a launcher run with no `TourProvider` above `useTourUrlSync`. */
208
- const noProviderStart: TourStart = () => {
209
- if (devWarnings()) console.warn("[ui-kit] useTourUrlSync: the launcher's start needs a TourProvider above it.");
210
- };
211
-
212
- const noProviderCall = () => {
213
- if (devWarnings()) console.warn("[ui-kit] useTourUrlSync: the launcher's engine needs a TourProvider above it.");
214
- };
215
- /** The engine for a launcher run with no `TourProvider` above `useTourUrlSync`: idle. */
216
- const NO_PROVIDER_ENGINE: TourEngine = {
217
- active: false,
218
- activeId: null,
219
- start: noProviderStart,
220
- stop: noProviderCall,
221
- next: noProviderCall,
222
- prev: noProviderCall,
223
- goToStep: noProviderCall,
224
- index: 0,
225
- total: 0,
226
- position: 0,
227
- count: 0,
228
- };
229
- const ENGINE_KEYS = Object.keys(NO_PROVIDER_ENGINE) as (keyof TourEngine)[];
230
-
231
- /* ── useTourCatalogueUrlState ───────────────────────────────────────────────── */
232
-
233
- /** The catalogue's state filter. */
234
- export type TourStateFilter = "all" | "todo" | "done";
235
-
236
- /** The catalogue's filters: the search, the group (`null`: every group), the state. */
237
- export interface TourCatalogueFilter {
238
- query: string;
239
- group: string | null;
240
- state: TourStateFilter;
241
- }
242
-
243
- const STATES: readonly TourStateFilter[] = ["all", "todo", "done"];
244
-
245
- /**
246
- * The catalogue's filters in the URL (§2.8) — keksdose's `?q`, `?topic`, `?state`, each
247
- * written with `replace` (typing does not bury the Back button), the defaults as the
248
- * clean URL. Spread it onto the catalogue: `<TourCatalogue {...useTourCatalogueUrlState()} … />`.
249
- * `params` renames them (kastlan's `?group`). Requires a react-router Router.
250
- */
251
- export function useTourCatalogueUrlState(
252
- params: { query?: string; group?: string; state?: string } = {},
253
- ): TourCatalogueFilter & { onChange: (patch: Partial<TourCatalogueFilter>) => void } {
254
- const [filter, setFilter] = useSearchParamsState<TourCatalogueFilter>({
255
- query: { param: params.query ?? "q", default: "", history: "replace" },
256
- group: { param: params.group ?? "topic", default: null, history: "replace", parse: (raw) => raw || undefined },
257
- state: {
258
- param: params.state ?? "state",
259
- default: "all",
260
- history: "replace",
261
- parse: (raw) => STATES.find((x) => x === raw),
262
- },
263
- });
264
- // `group: null` is a value to the setter (it clears `?topic`); `undefined` leaves it.
265
- return { ...filter, onChange: setFilter };
266
- }
package/src/tour.ts DELETED
@@ -1,21 +0,0 @@
1
- // `@eifi1/ui-kit/tour` — guided tours.
2
- // A re-slicing of the main barrel, not a new API.
3
- export * from "./tour/tour";
4
- // 0.43.0: the tours page (docs/tours-harmonization.md §3, §8) — keksdose's catalogue, its
5
- // card, the NEW and reset rules, device progress and the URL. `useTourUrlSync` and
6
- // `useTourCatalogueUrlState` need react-router (a peer already, for /shell).
7
- export { TourCatalogue, TourCatalogueCard, DEFAULT_TOUR_CATALOGUE_LABELS } from "./tour/tour-catalogue";
8
- export type { TourCatalogueProps, TourCatalogueCardProps, TourCatalogueLabels } from "./tour/tour-catalogue";
9
- export { isTourNew, isTourReset, isTourDone, doneCount, earnedPoints } from "./tour/tour-info";
10
- export type { TourInfo, TourGroup, TourUpdate, TourCompletions } from "./tour/tour-info";
11
- // 0.44.0: the writer outside a page (§9.2).
12
- export { useTourProgress, resetTourProgress, completeTour } from "./tour/use-tour-progress";
13
- export type { UseTourProgressOptions, TourProgress } from "./tour/use-tour-progress";
14
- // 0.45.0: progress on the account (§10.2–§10.3) and the end of a session.
15
- export { signOutTourProgress } from "./tour/use-tour-progress";
16
- export type { TourProgressAccount, TourProgressAdopt, TourProgressBody } from "./tour/use-tour-progress";
17
- export { useTourUrlSync, useTourCatalogueUrlState } from "./tour/use-tour-url-sync";
18
- export type { UseTourUrlSyncOptions, TourCatalogueFilter, TourStateFilter } from "./tour/use-tour-url-sync";
19
- // 0.50.0: guided form tours (docs/tours-harmonization.md §11) — "Guide me" inside a form.
20
- export { TourGuideButton, DEFAULT_TOUR_GUIDE_LABELS } from "./tour/tour-guide-button";
21
- export type { TourGuideButtonProps, TourGuideLabels } from "./tour/tour-guide-button";
package/src/vite-env.d.ts DELETED
@@ -1,23 +0,0 @@
1
- // Minimal ambient typing for the Vite-injected `import.meta.env` so the package
2
- // type-checks standalone (consumers provide the real values at build time).
3
- interface ImportMetaEnv {
4
- readonly DEV: boolean;
5
- /** Set by vitest, and by nothing else. `DEV` cannot answer "am I under test" —
6
- * a test run is neither a dev build nor a production one, and vitest reports
7
- * `DEV=true` — so anything that should be quiet in a suite has to ask this. */
8
- readonly VITEST?: boolean;
9
- }
10
- interface ImportMeta {
11
- readonly env: ImportMetaEnv;
12
- /**
13
- * Vite's compile-time glob. Declared here rather than by pulling in
14
- * `vite/client` (which drags every asset-module shim with it) or `@types/node`
15
- * (which this package deliberately does not depend on — it ships browser code).
16
- *
17
- * It is what lets a TEST read the package's own sources: `field-invalid.test.tsx`
18
- * sweeps the component directory to find a field-shaped control that forgot a
19
- * prop, which is the kind of guard the consumer app writes with `readFileSync`
20
- * and cannot be written that way here.
21
- */
22
- glob<T = unknown>(pattern: string, options?: { query?: string; import?: string; eager?: boolean }): Record<string, T>;
23
- }
@@ -1,360 +0,0 @@
1
- import { useId, useLayoutEffect, useMemo, useRef, useState } from "react";
2
- import type { ReactElement, ReactNode } from "react";
3
- import { Check } from "lucide-react";
4
- import { cn } from "../lib/cn";
5
- import { Button } from "../components/button";
6
- import { Spinner } from "../components/spinner";
7
- import type { ButtonVariant } from "../components/button-look";
8
- import { Modal } from "../components/modal";
9
- import { alertFrameClass } from "../components/alert-banner";
10
- import { WizardContextProvider } from "./wizard-context";
11
- import { DEFAULT_WIZARD_LABELS } from "./types";
12
- import { useKitLabels, type LabelOverride } from "../i18n/kit-labels";
13
- import type { UseWizardReturn, WizardFinishResult, WizardLabels } from "./types";
14
- import type { CommitScope } from "../components/write-lock";
15
- import { useTourGateRelease } from "../tour/tour-gates";
16
-
17
- /**
18
- * The chrome around a wizard: the step indicator, the step content, and the
19
- * Cancel / Back / Skip / Next / Finish bar — plus the cancel-confirmation
20
- * dialog, because "are you sure you want to lose this" is part of the wizard's
21
- * contract rather than something each app should re-decide.
22
- *
23
- * It is a component and not a set of parts for one reason: which button shows,
24
- * and whether it is enabled, is a function of `wizard` state that was getting
25
- * re-derived (and re-derived slightly differently) at every call site. Finish is
26
- * gated on `canFinish`, Next and Skip on `nextBlocked`, and Skip only appears on
27
- * an `optional` step that is not the last — that policy lives here now.
28
- *
29
- * The `<StepperNav>` is also what publishes {@link WizardContextProvider}, which
30
- * is how a mounted step registers its own validator. A step's
31
- * `useRhfWizardStep` / `useWizardStepValidate` therefore only works inside one.
32
- *
33
- * Which buttons show is read off `wizard` (`canCancel`, `canGoBack`, `canDone`,
34
- * `isCommitStep`), so the policy options — `cancellable`, `onExit`, `commits`,
35
- * `onDone` — are all set on `useWizard`. What is set HERE is how the Finish button
36
- * looks and what wraps it, because that is presentation and usually depends on
37
- * state the app holds (a "replace everything" toggle, a write lock — `finishCommit`).
38
- *
39
- * `TData`'s constraint is `UseWizardOptions`' (its mapped half is for `Parameters<>`).
40
- */
41
- export function StepperNav<TData extends object & { [K in keyof TData]: unknown }>({
42
- wizard,
43
- children,
44
- title,
45
- description,
46
- className,
47
- labels,
48
- finishVariant = "accent",
49
- finishDisabled = false,
50
- finishCommit,
51
- finishDisabledReason,
52
- doneDisabled = false,
53
- renderFinish,
54
- }: {
55
- wizard: UseWizardReturn<TData>;
56
- children: ReactNode;
57
- title?: ReactNode;
58
- description?: ReactNode;
59
- className?: string;
60
- labels?: LabelOverride<WizardLabels>;
61
- /** The Finish button's variant — `"danger"` for a destructive commit (an import
62
- * that replaces what is there). Default `"accent"`. Next keeps `"accent"`. */
63
- finishVariant?: ButtonVariant;
64
- /** Disable Finish for a reason of the app's own, on top of the kit's gates
65
- * (`canFinish`, submitting, validating). */
66
- finishDisabled?: boolean;
67
- /**
68
- * Finish COMMITS — {@link Button}'s `commit`, handed to the Finish button. Under a
69
- * locked {@link WriteLockProvider} it is `aria-disabled` but focusable, with the lock's
70
- * reason in the kit Tooltip, and a click (or Enter) does not run `wizard.finish`.
71
- * Every other button of the bar stays live: the steps before the commit write nothing,
72
- * so the whole wizard can still be walked through on a read-only page.
73
- *
74
- * keksdose G1: its YNAB import runs the mapping wizard on the read-only demo (dev#497)
75
- * and locks only the confirm step's Finish — by cloning `commit` into the element
76
- * `renderFinish` hands it, because StepperNav took no `commit` of its own. That clone
77
- * still works; this is the same thing without one. Named `finishCommit` beside
78
- * `finishVariant` / `finishDisabled` rather than a bare `commit`, which on a component
79
- * with five buttons would not say which one saves — and would read like `useWizard`'s
80
- * `commits`, which is a step's policy, not a lock.
81
- */
82
- finishCommit?: CommitScope;
83
- /**
84
- * Why Finish is not available — {@link Button}'s `disabledReason` on the Finish button:
85
- * `aria-disabled` and focusable, the reason in the kit Tooltip and on the button's
86
- * `aria-describedby`, `wizard.finish` not run. The explained form of `finishDisabled`
87
- * (a native `disabled` takes the button out of the tab order, so its reason never
88
- * reaches a keyboard). Under a lock with `finishCommit`, the lock's reason wins.
89
- */
90
- finishDisabledReason?: ReactNode;
91
- /**
92
- * Disable Done — the button of the last step after a commit — while the step still
93
- * has work of its own running. keksdose's YNAB import ends on a recurring step whose
94
- * convert loop writes one rule at a time (ynab-import-panel.tsx): leaving mid-loop
95
- * abandons the rest. Until now the panel dropped `onDone` for the duration, which
96
- * takes the button away instead of saying "not yet": disabled, it stays where the
97
- * eye left it and comes back to life when the loop ends.
98
- */
99
- doneDisabled?: boolean;
100
- /**
101
- * Wrap the Finish button: receives the kit's button element — already labelled,
102
- * gated and wired to `wizard.finish` — and returns what to render in its place.
103
- *
104
- * ```tsx
105
- * renderFinish={(button) => <SaveGuard lock={lock}>{button}</SaveGuard>}
106
- * ```
107
- *
108
- * A wrapper and not a replacement (`finishButton: (props) => …`) or a hook
109
- * (`onBeforeFinish`): the app's need is to put something AROUND the commit — a
110
- * write-lock tooltip, which has to sit on a wrapping element because a disabled
111
- * button receives no pointer events — while the kit keeps owning what the button
112
- * says and when it is enabled. A replacement would hand every app the gating to
113
- * re-derive (the problem this component exists to end); `onBeforeFinish` can veto
114
- * a click but cannot explain a disabled button. The element is a plain `<Button>`,
115
- * so a wrapper that clones it with `disabled` works as expected.
116
- *
117
- * For the write lock itself there is no need to wrap any more: `finishCommit` (and
118
- * `finishDisabledReason`) put the kit Button's own Tooltip on Finish. An element
119
- * cloned with `commit` here keeps working the same way.
120
- */
121
- renderFinish?: (button: ReactElement) => ReactNode;
122
- }) {
123
- const l = useKitLabels("wizard", DEFAULT_WIZARD_LABELS, labels);
124
- const cancelTitleId = useId();
125
-
126
- // The step area never shrinks below the tallest step shown so far, so the button
127
- // bar does not jump up and down as Next and Back move between a long step and a
128
- // short one. This replaces a fixed `min-h-[300px]` (carried over from Kastlan,
129
- // whose steps are all long forms), which did the same for steps under 300px but
130
- // left a short wizard — two fields a step — with a ~200px hole above its buttons.
131
- // Measured rather than guessed: the floor is whatever the app's own steps need.
132
- const contentRef = useRef<HTMLDivElement>(null);
133
- const [contentFloor, setContentFloor] = useState(0);
134
- useLayoutEffect(() => {
135
- const el = contentRef.current;
136
- if (!el || typeof ResizeObserver === "undefined") return;
137
- const observer = new ResizeObserver(() => {
138
- const h = el.offsetHeight;
139
- setContentFloor((floor) => (h > floor ? h : floor));
140
- });
141
- observer.observe(el);
142
- return () => observer.disconnect();
143
- }, []);
144
-
145
- const contextValue = useMemo(
146
- () => ({
147
- registerStepValidate: wizard.registerStepValidate,
148
- setNextBlocked: wizard.setNextBlocked,
149
- }),
150
- [wizard.registerStepValidate, wizard.setNextBlocked],
151
- );
152
-
153
- // Finish is only valid once every step before the last has been completed or
154
- // skipped (derived once in useWizard). Prevents a restored last-step index
155
- // (empty data after a reload) from firing an empty submit.
156
- const canFinish = wizard.canFinish;
157
-
158
- // A running tour's `awaitGate` steps (0.50, docs/tours-harmonization.md §11.9): Next
159
- // releases "wizard-next" when the wizard moved and refuses it when a validator kept it
160
- // in place; Finish releases "wizard-finish" once `onComplete` resolved and refuses it,
161
- // with the error's message, when it threw. No-ops without a TourProvider or a tour.
162
- const tourGates = useTourGateRelease();
163
- // `useWizard`'s goNext/finish resolve their outcome at run time (see their types); a
164
- // wizard object built some other way resolves nothing, and nothing is signalled.
165
- const goNext = async () => {
166
- const moved = (await wizard.goNext()) as unknown as boolean | undefined;
167
- if (moved === true) tourGates.release("wizard-next");
168
- else if (moved === false) tourGates.refuse("wizard-next");
169
- };
170
- const finish = async () => {
171
- const result = (await wizard.finish()) as unknown as WizardFinishResult | undefined;
172
- if (!result) return;
173
- if (result.ok) tourGates.release("wizard-finish");
174
- else tourGates.refuse("wizard-finish", result.error);
175
- };
176
-
177
- // Pending while the step's validators run (an async server check): a spinner and
178
- // `aria-busy`, and disabled — the hook's own re-entry guard still refuses a second
179
- // press, this just stops it looking like the first one did nothing.
180
- const pending = wizard.isValidating;
181
- const stepNextLabel = wizard.currentStep.nextLabel;
182
-
183
- // Every branch below assigns it; no initial value to overwrite.
184
- let forwardButton: ReactNode;
185
- if (wizard.isCommitStep) {
186
- const finishButton = (
187
- <Button
188
- variant={finishVariant}
189
- data-tour="wizard-finish"
190
- onClick={() => void finish()}
191
- // The kit Button's lock: a reason (its own or, with `commit`, the provider's)
192
- // wins over `disabled` and keeps the button reachable, saying why.
193
- commit={finishCommit}
194
- disabledReason={finishDisabledReason}
195
- disabled={wizard.isSubmitting || pending || !canFinish || finishDisabled}
196
- aria-busy={wizard.isSubmitting || pending || undefined}
197
- >
198
- {/* Decorative: the button's text is what a reader hears. */}
199
- {pending && <Spinner label={null} className="size-4" />}
200
- {wizard.isSubmitting ? l.submitting : (stepNextLabel ?? l.finish)}
201
- </Button>
202
- );
203
- forwardButton = renderFinish ? renderFinish(finishButton) : finishButton;
204
- } else if (wizard.isLastStep) {
205
- // The last step after a commit. Nothing to finish; Done only when the app gave
206
- // an `onDone` — otherwise the step carries its own way out.
207
- forwardButton = wizard.canDone ? (
208
- <Button variant="accent" data-tour="wizard-done" onClick={wizard.done} disabled={doneDisabled}>
209
- {stepNextLabel ?? l.done ?? DEFAULT_WIZARD_LABELS.done}
210
- </Button>
211
- ) : null;
212
- } else {
213
- forwardButton = (
214
- <Button
215
- variant="accent"
216
- data-tour="wizard-next"
217
- onClick={() => void goNext()}
218
- disabled={wizard.nextBlocked || pending}
219
- aria-busy={pending || undefined}
220
- >
221
- {pending && <Spinner label={null} className="size-4" />}
222
- {stepNextLabel ?? l.next}
223
- </Button>
224
- );
225
- }
226
-
227
- return (
228
- <div className={cn("flex flex-col gap-6", className)}>
229
- {(title || description) && (
230
- <div>
231
- {title && <h1 className="text-2xl font-bold tracking-tight text-primary">{title}</h1>}
232
- {description && <p className="mt-1 text-sm text-muted">{description}</p>}
233
- </div>
234
- )}
235
-
236
- {/* Step indicator */}
237
- <nav aria-label={l.steps}>
238
- <ol className="flex w-full items-center">
239
- {wizard.steps.map((step, index) => {
240
- const status = wizard.stepStatus(index);
241
- const isLast = index === wizard.steps.length - 1;
242
-
243
- return (
244
- <li key={step.id} className={cn("flex items-center", !isLast && "flex-1")}>
245
- <button
246
- type="button"
247
- onClick={() => wizard.goToStep(index)}
248
- // `canGoToStep` adds the commit lock: once past a committing step,
249
- // the steps up to it are done with and cannot be reopened.
250
- disabled={status === "upcoming" || !wizard.canGoToStep(index)}
251
- aria-current={status === "active" ? "step" : undefined}
252
- className={cn(
253
- "group flex flex-col items-center gap-1.5",
254
- status === "upcoming" ? "cursor-default" : "cursor-pointer",
255
- )}
256
- >
257
- {/* Circle */}
258
- <span
259
- className={cn(
260
- "flex size-8 shrink-0 items-center justify-center rounded-full border-2 text-xs font-semibold transition-colors",
261
- status === "completed" && "border-brand bg-brand text-brand-contrast",
262
- status === "active" && "border-brand bg-surface text-brand",
263
- status === "upcoming" && "border-subtle bg-surface text-placeholder",
264
- status === "skipped" && "border-subtle bg-surface-2 text-muted",
265
- )}
266
- >
267
- {status === "completed" ? <Check className="size-4" /> : index + 1}
268
- </span>
269
- {/* Label — hidden on mobile, where the line below carries it */}
270
- <span
271
- className={cn(
272
- "hidden text-xs font-medium md:block",
273
- status === "active" || status === "completed" ? "text-primary" : "text-muted",
274
- )}
275
- >
276
- {step.label}
277
- </span>
278
- </button>
279
-
280
- {/* Connector line */}
281
- {!isLast && (
282
- <div
283
- className={cn("mx-2 h-0.5 flex-1", status === "completed" ? "bg-brand" : "bg-[var(--border)]")}
284
- />
285
- )}
286
- </li>
287
- );
288
- })}
289
- </ol>
290
- {/* Mobile: the labels above are hidden, so name the current step here */}
291
- <p className="mt-2 text-center text-sm font-medium text-primary md:hidden">
292
- {l.step(wizard.currentStepIndex + 1, wizard.steps.length)}
293
- {" — "}
294
- {wizard.currentStep.label}
295
- </p>
296
- </nav>
297
-
298
- {/* Step content */}
299
- <WizardContextProvider value={contextValue}>
300
- <div style={contentFloor > 0 ? { minHeight: contentFloor } : undefined}>
301
- <div ref={contentRef}>{children}</div>
302
- </div>
303
- </WizardContextProvider>
304
-
305
- {/* Submit error */}
306
- {wizard.error && (
307
- <div role="alert" className={cn("text-sm text-danger", alertFrameClass("danger"))}>
308
- {wizard.error}
309
- </div>
310
- )}
311
-
312
- {/* Navigation bar */}
313
- <div className="flex items-center justify-between border-t border-subtle pt-4">
314
- {/* The empty span keeps the right-hand group on the right when Cancel is off. */}
315
- {wizard.canCancel ? (
316
- <Button variant="secondary" onClick={wizard.cancel}>
317
- {l.cancel}
318
- </Button>
319
- ) : (
320
- <span />
321
- )}
322
- <div className="flex items-center gap-2">
323
- {wizard.canGoBack && (
324
- // Disabled, not hidden, while the commit runs: it comes back if the commit
325
- // fails, and a button that vanishes mid-click is its own kind of surprise.
326
- <Button variant="secondary" onClick={wizard.goBack} disabled={wizard.isSubmitting}>
327
- {l.back}
328
- </Button>
329
- )}
330
- {wizard.currentStep.optional && !wizard.isLastStep && !wizard.isCommitStep && (
331
- <Button variant="ghost" onClick={wizard.skip} disabled={wizard.nextBlocked || wizard.isValidating}>
332
- {l.skip}
333
- </Button>
334
- )}
335
- {forwardButton}
336
- </div>
337
- </div>
338
-
339
- {/* Cancel confirmation */}
340
- {wizard.showCancelDialog && (
341
- <Modal onClose={wizard.dismissCancel} labelledBy={cancelTitleId} className="space-y-4">
342
- <div className="space-y-1.5">
343
- <h2 id={cancelTitleId} className="text-lg font-semibold text-primary">
344
- {l.cancelTitle}
345
- </h2>
346
- <p className="text-sm text-muted">{l.confirmCancel}</p>
347
- </div>
348
- <div className="flex flex-col-reverse gap-2 sm:flex-row sm:justify-end">
349
- <Button variant="secondary" onClick={wizard.dismissCancel}>
350
- {l.cancelDismissLabel}
351
- </Button>
352
- <Button variant="danger" onClick={wizard.confirmCancel}>
353
- {l.cancelConfirmLabel}
354
- </Button>
355
- </div>
356
- </Modal>
357
- )}
358
- </div>
359
- );
360
- }