@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
package/src/tour/tour.tsx DELETED
@@ -1,750 +0,0 @@
1
- import {
2
- createContext,
3
- Suspense,
4
- useCallback,
5
- useContext,
6
- useEffect,
7
- useLayoutEffect,
8
- useMemo,
9
- useRef,
10
- useState,
11
- } from "react";
12
- import type { ReactNode } from "react";
13
- import { useKitLabels, type LabelOverride } from "../i18n/kit-labels";
14
- import { DEFAULT_TOUR_LABELS } from "./tour-labels";
15
- import type { TourInfo } from "./tour-info";
16
- import { completeStored, rememberAccount, rememberMigrate, type UseTourProgressOptions } from "./use-tour-progress";
17
- import { createGateRegistry, devWarnings, isShown, stepContext, TourInternalContext } from "./tour-gates";
18
- import { liveEngine } from "./tour-engine";
19
- import { lazyWithFallback } from "../lib/lazy-with-fallback";
20
- // Types only, gone from the built module: the overlay's modules load with the overlay.
21
- import type { Refusal } from "./tour-overlay";
22
-
23
- /**
24
- * The overlay — the card, the spotlight and its shields, the placement, the dock — loaded
25
- * when a tour first starts, not with the provider every app mounts above its routes
26
- * (refactor audit 2026-10-30, MOD-1: about 28.5 kB minified, 10.3 kB gzip of each app's
27
- * first load at 0.51.6). A LITERAL relative `import()`, as feedback-submit.tsx's dialog
28
- * is (0.34, MOD-1): the library build keeps the module its own (`bundle: false`), and a
29
- * path an app's bundler can read is a chunk it can split off.
30
- *
31
- * A fetch that fails — a tab left open across a deploy, a local-first app offline — ends
32
- * the run and leaves the page (0.52 code review, tour.tsx): the provider sits above the
33
- * routes, in keksdose and Kurvenschmiede above the app's own boundary, and the rejected
34
- * import unmounted the whole app — for a tour, whose start fetched nothing before 0.52.
35
- * `lazyWithFallback` logs it, and the next start fetches again.
36
- */
37
- const LazyTourOverlay = lazyWithFallback(
38
- () => import("./tour-overlay").then((module) => module.TourOverlay),
39
- TourOverlayUnavailable,
40
- );
41
-
42
- /** The provider's end of a run whose overlay did not load; see {@link TourOverlayUnavailable}. */
43
- const TourUnavailableContext = createContext<() => void>(() => {});
44
-
45
- /**
46
- * Stands in for an overlay whose chunk did not arrive: ends the run with the start's
47
- * `onSkip("unavailable")` and draws nothing. It ended with `stop()` at first, which calls
48
- * nothing — after the start's `onStart` had run, so what the app turned on for the run
49
- * stayed on: kastlan's practice mode, which its launcher turns on and its `onSkip` and
50
- * `onFinish` turn off (0.52 code review, tour.tsx).
51
- */
52
- function TourOverlayUnavailable() {
53
- const unavailable = useContext(TourUnavailableContext);
54
- useLayoutEffect(unavailable, [unavailable]);
55
- return null;
56
- }
57
-
58
- /**
59
- * Hears Escape while the overlay's chunk is on its way, as the overlay does before it has
60
- * located its step: the run is skipped. With nothing mounted the tour was `active` and
61
- * deaf, and on a slow first start the overlay came up seconds after the person had
62
- * pressed Escape and gone back to the page (0.52 code review, tour.tsx).
63
- */
64
- function TourOverlayLoading({ onSkip }: { onSkip: () => void }) {
65
- useEffect(() => {
66
- const onKey = (e: KeyboardEvent) => {
67
- if (e.key === "Escape") onSkip();
68
- };
69
- document.addEventListener("keydown", onKey);
70
- return () => document.removeEventListener("keydown", onKey);
71
- }, [onSkip]);
72
- return null;
73
- }
74
-
75
- export { useTourGate, useTourGateRelease } from "./tour-gates";
76
- export type { TourGateRelease } from "./tour-gates";
77
-
78
- /**
79
- * `start`/`end` follow the reading direction (`end` is the right side in LTR and the
80
- * left side in RTL) and are what a translated app wants. `left`/`right` stay physical
81
- * for the steps that genuinely mean a screen side.
82
- */
83
- export type TourPlacement = "top" | "right" | "bottom" | "left" | "start" | "end" | "center" | "dock";
84
-
85
- export interface TourStep {
86
- /** CSS selector for the element to spotlight. Omit for a centered step
87
- * (welcome/finish). If the target isn't found/visible, the step centers. */
88
- target?: string;
89
- title: string;
90
- body: ReactNode;
91
- /** Extra footer content, e.g. a "load sample data" shortcut. */
92
- action?: ReactNode;
93
- /** Spotlight padding around the target, px (default 8). On a field step the spot also
94
- * takes in the lines the field's `aria-describedby` names when they sit within the
95
- * ring's reach of it (a hint or warning line under the field, keksdose S1, §11.6). */
96
- padding?: number;
97
- /** Where the card sits relative to the target. Omit for auto placement
98
- * (below → above → centered). "center" ignores the target and centers on
99
- * screen. "start"/"end" are the logical sides and flip in RTL; "left"/"right"
100
- * are physical. An explicit side flips to the opposite side if it would
101
- * overflow, then clamps into the viewport.
102
- *
103
- * `"dock"` (0.50, §11.7): below `sm` (640 px at Normal text, 800 at Large, as
104
- * `max-sm:` since 0.52) the card is pinned full-width to the top or bottom edge of the
105
- * usable band — the visual viewport less the keyboard and any
106
- * `[data-tour-obstruction]` (the number pad) — on the edge away from the field, and the
107
- * field's scroll container brings it into the other half. From `sm` up it is auto
108
- * placement. On a phone a field step (`interactive`, `awaitInput`, `gate`, `awaitGate`)
109
- * with a target and no `placement` docks by default (`TourProvider dockOnPhones`). */
110
- placement?: TourPlacement;
111
- /** Advance only when the user clicks the spotlighted target itself (not the
112
- * card's Next button). Requires `target`: the real control's own handler runs
113
- * first, then the tour steps forward on a microtask. The spotlight hole stays
114
- * click-through to the target; the rest of the page does not. */
115
- awaitClick?: boolean;
116
- /**
117
- * The spotlighted control is for USING, not only for looking at (0.46, keksdose live
118
- * #436): the layers it opens sit above the scrim and work. A plain step's overlay is
119
- * `z-[60]`, over every kit layer, so a field whose number pad (`NumberPadSheet`), a
120
- * select's menu or a popover opens at `z-50` opened UNDER the shields, where nothing
121
- * could be tapped. Here the overlay drops to `z-[45]`: still over the top bar and the
122
- * page (`z-40` and below, still dimmed and shielded), under every `z-50` layer the
123
- * target opens — so an app's own layer wants `z-50` or more to clear it. Keys pressed
124
- * in the target or in such a layer are theirs (Escape closes the pad, arrows walk a
125
- * list); from the card the tour's keys work as on any step. The overlay is not
126
- * `aria-modal` then, and carries `data-tour-interactive`.
127
- *
128
- * The card is in the same layer as the scrim, so an open pad or sheet may cover it
129
- * until it closes. Requires `target`. A `HoverMenu` (`z-40`, the top bar's menus) stays
130
- * under the scrim: point an `awaitClick` step at its trigger instead.
131
- */
132
- interactive?: boolean;
133
- /**
134
- * Advance once a value was ENTERED in the spotlighted control (0.46, keksdose live
135
- * #436) — `awaitClick` for a field. Implies `interactive`. Counted when focus leaves
136
- * the target (the number pad's Done, a Tab, a tap elsewhere), or Enter is pressed in
137
- * it, and one of its fields (`input`, `textarea`, `select`: the target itself or
138
- * inside it) then holds another value than when the step began; a native `change`
139
- * (a select, a checkbox) counts at once. The card swaps Next for `awaitInputHint`,
140
- * as for `awaitClick`. A picker whose value is not a field's (the kit's `Select`
141
- * button) has nothing to compare: call `useTour().next()` from its `onChange`.
142
- */
143
- awaitInput?: boolean;
144
- /**
145
- * 0.50 (docs/tours-harmonization.md §11.1): Next stays locked until the gate `key` is
146
- * satisfied — the form publishes it with `useTourGate(key, satisfied)` beside the field.
147
- * Implies `interactive`. The locked Next is `aria-disabled` with {@link gateHint} under
148
- * it; pressing it focuses the field. Once satisfied the tour does NOT advance by itself:
149
- * Next, Enter in the field, or focus leaving the field to nowhere or to the card (the
150
- * number pad's Done) moves on. A key nobody publishes is not enforced (the form closed
151
- * under the tour): Next opens. A step may have a `gate` and no `target`.
152
- */
153
- gate?: string;
154
- /** Overrides `labels.gateHint` for this step. */
155
- gateHint?: string;
156
- /**
157
- * 0.50 (§11.4): wait for the app to RELEASE this key — `useTourGateRelease().release(key)`
158
- * from the save's `onSuccess`. Implies `interactive`; usually it targets the Save button,
159
- * whose hole stays click-through. Next is replaced by {@link awaitGateHint}, and a click
160
- * does not advance: only `release` does. A release that arrives on an earlier step (Enter
161
- * in the last field submitted the form) jumps past the first later step awaiting the key.
162
- * `refuse(key, reason)` keeps the step and shows the reason, with a "Back to …" link to the
163
- * first earlier field whose gate is now unsatisfied; the kit never jumps there itself.
164
- * A viewer who cannot save gets `awaitGate: undefined`, so a plain Next.
165
- */
166
- awaitGate?: string;
167
- /** Overrides `labels.awaitGateHint` for this step. */
168
- awaitGateHint?: string;
169
- /**
170
- * 0.50 (§11.2): the field may stay empty. While the `gate` is unsatisfied the card
171
- * offers "Leave empty" beside the locked Next, which moves on without touching the field
172
- * (the kit never writes app values); the title carries an "Optional" chip. Not a skip:
173
- * the run continues and can complete. Without a `gate`, only the chip.
174
- */
175
- optional?: boolean;
176
- /**
177
- * 0.50 (§11.3): shown only if this returns true on ARRIVAL (evaluated before
178
- * `beforeStep`, so a skipped step never navigates). Next walks forward to the first step
179
- * shown, Back to the nearest earlier one shown now. Branch facts are gates:
180
- * `when: (c) => c.gate("txn.transfer") === true`. Keep it pure and cheap: the counter
181
- * evaluates every step's `when` on each arrival. A throw counts as skipped.
182
- */
183
- when?: (ctx: TourStepContext) => boolean;
184
- /** Runs before the step is shown — e.g. navigate to a route, open a panel.
185
- * May be async; the step waits for it, then locates the target. Receives the
186
- * {@link TourStepContext} (0.50); a step entered by "Guide me" sees `via: "at"` and
187
- * should leave an open form alone. One that throws or rejects is logged to the
188
- * console, and the step is located and shown anyway. Enter and the arrows wait for
189
- * it; Escape does not. */
190
- beforeStep?: (ctx: TourStepContext) => void | Promise<void>;
191
- }
192
-
193
- /** What a step's `when` and `beforeStep` may ask on arrival (0.50, §11.3). */
194
- export interface TourStepContext {
195
- /** The gate's current value: true/false, or undefined while nobody publishes it. */
196
- gate(key: string): boolean | undefined;
197
- /** How this step is being entered. */
198
- via: "start" | "at" | "next" | "back" | "goto";
199
- }
200
-
201
- export interface TourLabels {
202
- next: string;
203
- back: string;
204
- skip: string;
205
- done: string;
206
- /** Shown in place of the Next button on an `awaitClick` step. */
207
- awaitClickHint: string;
208
- /** Shown in place of the Next button on an `awaitInput` step (0.46). */
209
- awaitInputHint: string;
210
- /** Step counter, e.g. (2, 7) => "2 / 7". Counts the steps the run shows (0.50). */
211
- step: (current: number, total: number) => string;
212
- /** 0.50: an `optional` gate step's button while the field is empty. */
213
- leaveEmpty: string;
214
- /** 0.50: the chip beside an `optional` step's title. */
215
- optional: string;
216
- /** 0.50: under a `gate` step's locked Next (`TourStep.gateHint` overrides it). */
217
- gateHint: string;
218
- /** 0.50: announced (screen readers only) when a gate step's field is filled. */
219
- gateReady: string;
220
- /** 0.50: in place of Next on an `awaitGate` step (`TourStep.awaitGateHint` overrides it). */
221
- awaitGateHint: string;
222
- /** 0.50: the warning when the app `refuse`s an `awaitGate` step without a reason. */
223
- awaitGateRefused: string;
224
- /** 0.50: the link to an earlier step whose field was emptied, after a refused save. */
225
- backToStep: (title: string) => string;
226
- }
227
-
228
- // Defined in ./tour-labels, which holds no component code (0.34, KS U8).
229
- export { DEFAULT_TOUR_LABELS };
230
-
231
- /** 0.50 (§11.5): a step index, or the `data-tour` value of the step's anchor. */
232
- export type TourAt = number | string;
233
-
234
- /** `useTour().start`, both forms: what `TourProvider` hands its `launch` as the third argument. */
235
- export type TourStart = TourContextValue["start"];
236
-
237
- /**
238
- * 0.50 (§11.5): the app's launcher — the shape `useTourUrlSync` already takes, plus `at`.
239
- * It builds the steps (`prepare()`, `build()`, `tour: tourInfo(def)`) and passes `at` on to
240
- * `start(steps, { …, at })`. Give the same function to `TourProvider launch` and to
241
- * `useTourUrlSync`.
242
- *
243
- * `start` is the provider's own `start` (keksdose N4), so the launcher needs no ref to a
244
- * component below the provider and may be defined above it. `engine` (0.50.1, keksdose N1)
245
- * is the rest of the engine — `stop`, `next`, `active`, … — read live, see {@link TourEngine}.
246
- * `useTourUrlSync` passes both (under a provider). A launcher taking fewer arguments still
247
- * works.
248
- */
249
- export type TourLauncher = (
250
- id: string,
251
- opts: { startIndex?: number; at?: TourAt },
252
- start: TourStart,
253
- engine: TourEngine,
254
- ) => void | Promise<unknown>;
255
-
256
- /**
257
- * 0.50.1 (keksdose N1): the whole engine `useTour()` returns, handed to a launcher as its
258
- * FOURTH argument by `TourProvider` and `useTourUrlSync`, so a tour built above the provider
259
- * can also `stop`, `next` or read `active` with no `useTour()` registered from below. One
260
- * object per provider whose fields read the latest render (`engine.active` after an
261
- * `await` is current); its methods are the provider's own. `start` (the third argument) is
262
- * `engine.start`.
263
- */
264
- export type TourEngine = TourContextValue;
265
-
266
- const ENGINE_KEYS = [
267
- "active",
268
- "activeId",
269
- "start",
270
- "stop",
271
- "next",
272
- "prev",
273
- "goToStep",
274
- "index",
275
- "total",
276
- "position",
277
- "count",
278
- ] as const satisfies readonly (keyof TourContextValue)[];
279
-
280
- interface StartOptions {
281
- /** Stable id of the tour, surfaced as `activeId` so the app can mirror it to
282
- * the URL (deep-link / evaluation tracking) and record completion. Defaults to
283
- * `tour.id`. */
284
- id?: string;
285
- /** The tour being started, as the app lists it (docs/tours-harmonization.md §9.6.1).
286
- * When its last step is finished, the provider records the completion in its
287
- * `progress` and hands this to `onComplete`. */
288
- tour?: TourInfo;
289
- /** Start at this step index instead of 0 (clamped) — for URL/deep-link resume. */
290
- startIndex?: number;
291
- /**
292
- * 0.50 (§11.5): start here AND make it the floor — earlier steps never run (nor their
293
- * `beforeStep`), Back stops here, `position`/`count` count from here, and the finish
294
- * records the completion as a full run does (Marcel, Q2). A number is a step index
295
- * (clamped); a string is the first step whose `target` contains `data-tour="<at>"`
296
- * verbatim (unknown: 0, with a development warning). The `at` step is entered with
297
- * `via: "at"`. With `startIndex` too, `startIndex` picks the step and `at` the floor.
298
- */
299
- at?: TourAt;
300
- /** Fires synchronously when the tour starts (e.g. enable a mock interceptor). */
301
- onStart?: () => void;
302
- /** After the last step: runs after the provider's progress write and `onComplete`. */
303
- onFinish?: () => void;
304
- /**
305
- * The run ended before its last step — undo here what `onStart` or the launcher turned
306
- * on. `reason` says why: `"skipped"`, the person left (Skip, Escape); `"unavailable"`
307
- * (0.52), the overlay's chunk did not load (a tab left open across a deploy, offline),
308
- * so no step was shown — the moment to say so, if the app wants to. `stop()` calls
309
- * nothing.
310
- */
311
- onSkip?: (reason?: TourSkipReason) => void;
312
- }
313
-
314
- /** Why a run ended before its last step, as `onSkip` hears it. */
315
- type TourSkipReason = "skipped" | "unavailable";
316
-
317
- /** What `TourProvider`'s `onComplete` learns besides the tour (§9.1, §9.6). */
318
- export interface TourCompletion {
319
- /**
320
- * `true` when the completion counts anew (the first time, or the first time after the
321
- * tour's update, §8): the moment for the app's points toast. `false` for a replay, and
322
- * when the stored text is in an old shape no `migrate` reads: nothing is overwritten
323
- * then, and the error goes to `console.error` (keksdose B-1). `undefined` when the provider has no `progress` or the start carried no `tour`, so
324
- * nothing was recorded.
325
- */
326
- awarded: boolean | undefined;
327
- }
328
-
329
- interface TourContextValue {
330
- active: boolean;
331
- /** Id of the running tour (from {@link StartOptions.id}), else null. */
332
- activeId: string | null;
333
- /**
334
- * Start a tour with the given steps — or, by id (0.50), through the provider's `launch`:
335
- * `start("create-transaction", { at: "txn-entry-mode" })`. Without a `launch` the id form
336
- * does nothing (a development build warns).
337
- */
338
- start: {
339
- // The id form first: `Parameters<typeof start>` reads the LAST overload, which stays
340
- // the 0.49 one.
341
- (id: string, opts?: { at?: TourAt }): void;
342
- (steps: TourStep[], opts?: StartOptions): void;
343
- };
344
- /** End the current tour (no callbacks fire). */
345
- stop: () => void;
346
- /** Advance one step; past the last step it finishes the tour (fires onFinish). */
347
- next: () => void;
348
- /** Go back one step (no-op on the first). */
349
- prev: () => void;
350
- /** Jump to a step by index, clamped to range — e.g. for URL/deep-link resume. */
351
- goToStep: (index: number) => void;
352
- /** Current step (0-based; 0 while inactive). */
353
- index: number;
354
- /** Total steps (0 while inactive). */
355
- total: number;
356
- /** 0.50: 1-based position among the steps this run shows, for "3 of 9"; 0 while inactive. */
357
- position: number;
358
- /** 0.50: how many steps this run shows, from its first (the `at` floor) to the end; 0 while inactive. */
359
- count: number;
360
- }
361
-
362
- const TourContext = createContext<TourContextValue | null>(null);
363
-
364
- export function useTour(): TourContextValue {
365
- const ctx = useContext(TourContext);
366
- if (!ctx) throw new Error("useTour must be used within <TourProvider>");
367
- return ctx;
368
- }
369
-
370
- /**
371
- * The tour engine if it is there, `null` if it is not — for a control that is a
372
- * DECORATION rather than a participant.
373
- *
374
- * {@link useTour}'s throw is correct and stays: a component that runs a tour cannot do
375
- * its job without the provider, and failing loudly is how that gets fixed. But the
376
- * throw's blast radius is whatever error boundary is above it, and for a launcher in
377
- * the app shell that is the whole app.
378
- *
379
- * Keksdose feedback dev#524 is what that costs: an `@hb/ui` module was edited while a
380
- * dev server was running, vite re-evaluated it, and the module's freshly created
381
- * context object was no longer the one the mounted provider was providing. React's
382
- * `useContext` then answers `null` for a provider that is, structurally, right there —
383
- * and the top bar's tour menu took the entire shell down with it. **Build-time module
384
- * graphs cannot produce that**, so it is a development-only failure; a menu that
385
- * disappears for a second is the proportionate response to it either way.
386
- *
387
- * Only for controls that can honestly render nothing. If a component would show a
388
- * broken half of itself without the tour, it wants {@link useTour}.
389
- */
390
- export function useTourOptional(): TourContextValue | null {
391
- return useContext(TourContext);
392
- }
393
-
394
- /**
395
- * Provides the guided-tour engine: a dimmed spotlight overlay + step card driven
396
- * by a list of {@link TourStep}s. Domain-free — the app supplies the steps (copy,
397
- * selectors, per-step navigation, placement) and the translated {@link TourLabels}.
398
- * Mount once inside the router; start a tour from anywhere via {@link useTour},
399
- * which also exposes step control (`next`/`prev`/`goToStep`) and the current
400
- * `index`/`total` for URL mirroring, `awaitClick` and deep-link resume.
401
- *
402
- * **Completion in one place** (docs/tours-harmonization.md §9.6): give the provider the
403
- * app's `progress` (the same `{storageKey, migrate}` as `useTourProgress`) and start each
404
- * tour with `start(steps, {tour})`. When the last step is finished the provider writes the
405
- * completion ONCE, through the store every `useTourProgress` reader of the key shares
406
- * (never a second copy), then calls `onComplete(tour, {awarded})`, then the start's own
407
- * `onFinish`. A skip or `stop()` records nothing and calls neither. The app removes its
408
- * own `complete()` from `onFinish`, or that second write answers `false`.
409
- *
410
- * Both props are optional: without `progress` or a `tour` on the start, `onComplete`
411
- * still fires, with `awarded: undefined` (and `tour` as given, possibly `undefined`). A
412
- * new `storageKey` (an account switch on a shared PC) is followed on the next
413
- * completion, without a remount.
414
- */
415
- export function TourProvider({
416
- children,
417
- labels,
418
- progress,
419
- onComplete,
420
- launch,
421
- dockOnPhones = true,
422
- }: {
423
- children: ReactNode;
424
- labels?: LabelOverride<TourLabels>;
425
- /**
426
- * 0.50 (§11.5): lets `start(id)` and `<TourGuideButton>` start a tour by id. Usually the
427
- * same function the app gives `useTourUrlSync`.
428
- */
429
- launch?: TourLauncher;
430
- /** The app's tour progress: the same options its `useTourProgress` readers use. */
431
- progress?: UseTourProgressOptions;
432
- /** A tour's last step was finished; see {@link TourCompletion}. */
433
- onComplete?: (tour: TourInfo | undefined, completion: TourCompletion) => void;
434
- /**
435
- * 0.50 (§11.7, Marcel's Q1): below `sm`, a field step with a target and no `placement`
436
- * docks. Default `true`; `false` makes docking strictly opt-in (`placement: "dock"`).
437
- */
438
- dockOnPhones?: boolean;
439
- }) {
440
- // `labels` over the provider's `tour` over English. Resolved once here and handed
441
- // down: the step card is portalled, but context crosses portals anyway — this is
442
- // simply the one place that already owned the merge.
443
- const merged = useKitLabels("tour", DEFAULT_TOUR_LABELS, labels);
444
- const [steps, setSteps] = useState<TourStep[] | null>(null);
445
- // Where the run is: the raw index (what `?tourStep=` mirrors), how it got there, and
446
- // its place among the steps shown (§11.3), computed once on arrival.
447
- const [nav, setNav] = useState<Nav>(NO_NAV);
448
- const index = nav.index;
449
- // The app's last `refuse` on the step awaiting its key; any arrival clears it.
450
- const [refusal, setRefusal] = useState<Refusal | null>(null);
451
- const [activeId, setActiveId] = useState<string | null>(null);
452
- const optsRef = useRef<StartOptions>({});
453
- // The latest props, read at the finish: a new `storageKey` or callback needs no remount.
454
- const progressRef = useRef(progress);
455
- const onCompleteRef = useRef(onComplete);
456
- const launchRef = useRef(launch);
457
- useLayoutEffect(() => {
458
- progressRef.current = progress;
459
- onCompleteRef.current = onComplete;
460
- launchRef.current = launch;
461
- });
462
- // The provider's migrate becomes the key's, for readers that pass none (keksdose B-2).
463
- const storageKey = progress?.storageKey;
464
- const migrate = progress?.migrate;
465
- // 0.45: and its `account` (§10.3), so a finish on an account key is sent as readers' are.
466
- const account = progress?.account;
467
- useLayoutEffect(() => {
468
- if (storageKey !== undefined) rememberMigrate(storageKey, migrate);
469
- if (storageKey !== undefined) rememberAccount(storageKey, account);
470
- }, [storageKey, migrate, account]);
471
- const warnedNoTourRef = useRef(false);
472
- // Live mirrors so the step-control callbacks can stay stable (identity-safe for
473
- // consumers) while still reading the current steps/index. Synced in a layout
474
- // effect — after the commit, before paint and before any passive effect or event
475
- // can call them — rather than written during render.
476
- const stepsRef = useRef<TourStep[] | null>(null);
477
- const indexRef = useRef(0);
478
- useLayoutEffect(() => {
479
- stepsRef.current = steps;
480
- indexRef.current = index;
481
- }, [steps, index]);
482
- /** The run's first step: earlier steps never run, Back stops here (the `at` floor). */
483
- const floorRef = useRef(0);
484
- const active = !!steps && steps.length > 0;
485
- const total = steps?.length ?? 0;
486
- // The gate registry (§11.1): one per provider, read by the overlay while a tour runs.
487
- const [gates] = useState(createGateRegistry);
488
- useLayoutEffect(() => {
489
- gates.setActive(active);
490
- }, [gates, active]);
491
- const canLaunch = !!launch;
492
- const internals = useMemo(() => ({ gates, canLaunch }), [gates, canLaunch]);
493
-
494
- /** Is step `i` shown, asked now (§11.3)? */
495
- const shown = useCallback(
496
- (s: TourStep[], i: number, via: TourStepContext["via"]) => isShown(s[i], stepContext(gates, via)),
497
- [gates],
498
- );
499
- /** Arrive at `i`: the counter is recomputed from every step's `when`, against the gates now. */
500
- const arrive = useCallback(
501
- (s: TourStep[], i: number, via: TourStepContext["via"]) => {
502
- const ctx = stepContext(gates, via);
503
- let position = 0;
504
- let count = 0;
505
- for (let j = floorRef.current; j < s.length; j++) {
506
- if (j !== i && !isShown(s[j], ctx)) continue;
507
- count++;
508
- if (j <= i) position++;
509
- }
510
- indexRef.current = i;
511
- setRefusal(null);
512
- setNav({ index: i, floor: floorRef.current, via, position, count });
513
- },
514
- [gates],
515
- );
516
- /** The first step shown at or after `from`, or -1. */
517
- const forward = useCallback(
518
- (s: TourStep[], from: number, via: TourStepContext["via"]) => {
519
- for (let j = Math.max(from, floorRef.current); j < s.length; j++) if (shown(s, j, via)) return j;
520
- return -1;
521
- },
522
- [shown],
523
- );
524
- /** The nearest step shown at or before `from`, not below the floor, or -1. */
525
- const backward = useCallback(
526
- (s: TourStep[], from: number, via: TourStepContext["via"]) => {
527
- for (let j = Math.min(from, s.length - 1); j >= floorRef.current; j--) if (shown(s, j, via)) return j;
528
- return -1;
529
- },
530
- [shown],
531
- );
532
-
533
- const startSteps = useCallback(
534
- (s: TourStep[], opts?: StartOptions) => {
535
- optsRef.current = opts ?? {};
536
- optsRef.current.onStart?.();
537
- const last = Math.max(0, s.length - 1);
538
- floorRef.current = opts?.at === undefined ? 0 : resolveAt(s, opts.at);
539
- const via: TourStepContext["via"] = opts?.at === undefined ? "start" : "at";
540
- // Floored, as `at` is (FLW-9): `steps[1.5]` is undefined, and `forward` threw on
541
- // its `when` — an edited `?tourStep=2.5` was enough.
542
- const asked = opts?.startIndex === undefined ? floorRef.current : Math.floor(opts.startIndex);
543
- const wanted = Math.min(Math.max(floorRef.current, asked), last);
544
- let to = forward(s, wanted, via);
545
- if (to < 0) to = backward(s, wanted, via);
546
- // Not one step of the run is shown: there is nothing to tour.
547
- if (to < 0) return;
548
- arrive(s, to, via);
549
- setActiveId(opts?.id ?? opts?.tour?.id ?? null);
550
- setSteps(s);
551
- },
552
- [arrive, forward, backward],
553
- );
554
- // The provider's own `start` and the live engine, handed to `launch` as its third and
555
- // fourth arguments (keksdose N4, N1).
556
- const ownStartRef = useRef<TourContextValue["start"] | null>(null);
557
- const [live] = useState(() => liveEngine<TourEngine>(ENGINE_KEYS));
558
- const engine = live.engine;
559
- const start = useCallback(
560
- (what: TourStep[] | string, opts?: StartOptions | { at?: TourAt }) => {
561
- if (typeof what !== "string") {
562
- startSteps(what, opts as StartOptions | undefined);
563
- return;
564
- }
565
- const run = launchRef.current;
566
- if (!run) {
567
- if (devWarnings()) console.warn(`[ui-kit] start("${what}") needs TourProvider's \`launch\` prop.`);
568
- return;
569
- }
570
- void Promise.resolve(run(what, { at: opts?.at }, ownStartRef.current!, engine)).catch((error: unknown) =>
571
- console.error(error),
572
- );
573
- },
574
- [startSteps, engine],
575
- ) as TourContextValue["start"];
576
- useLayoutEffect(() => {
577
- ownStartRef.current = start;
578
- }, [start]);
579
- const stop = useCallback(() => {
580
- setSteps(null);
581
- setActiveId(null);
582
- }, []);
583
- const finish = useCallback(() => {
584
- // Once per tour: a second "Done" before the overlay unmounts records nothing more.
585
- if (!stepsRef.current) return;
586
- stepsRef.current = null;
587
- const { tour, onFinish } = optsRef.current;
588
- const store = progressRef.current;
589
- // Exactly one write per completion (§9.6.2), so `awarded` is what `complete(tour)` answered.
590
- let awarded: boolean | undefined;
591
- if (store && tour) {
592
- try {
593
- awarded = completeStored(store.storageKey, store.migrate, tour);
594
- } catch (error) {
595
- // A stored text no migrate reads is left as it is (keksdose B-1); the tour still ends.
596
- console.error(error);
597
- awarded = false;
598
- }
599
- } else if (store && !tour && devWarnings() && !warnedNoTourRef.current) {
600
- warnedNoTourRef.current = true;
601
- console.warn(
602
- "[ui-kit] TourProvider has `progress`, but a finished tour's start carried no `tour`: " +
603
- "nothing was recorded and `awarded` is undefined. Start it with `start(steps, { tour })`.",
604
- );
605
- }
606
- onCompleteRef.current?.(tour, { awarded });
607
- onFinish?.();
608
- setSteps(null);
609
- setActiveId(null);
610
- }, []);
611
- // Takes no argument: the card's Skip passes its click event.
612
- const skip = useCallback(() => {
613
- optsRef.current.onSkip?.("skipped");
614
- setSteps(null);
615
- setActiveId(null);
616
- }, []);
617
- const unavailable = useCallback(() => {
618
- // Once per run: the fallback's layout effect runs twice under StrictMode.
619
- if (!stepsRef.current) return;
620
- stepsRef.current = null;
621
- optsRef.current.onSkip?.("unavailable");
622
- setSteps(null);
623
- setActiveId(null);
624
- }, []);
625
-
626
- // A step whose `when` is false is passed over: `goToStep` lands on the next step shown
627
- // after it, failing that the previous one; Next past the last shown step finishes.
628
- const goToStep = useCallback(
629
- (i: number) => {
630
- const s = stepsRef.current;
631
- if (!s || s.length === 0) return;
632
- const wanted = Math.min(Math.max(floorRef.current, Math.floor(i)), s.length - 1);
633
- let to = forward(s, wanted, "goto");
634
- if (to < 0) to = backward(s, wanted, "goto");
635
- if (to >= 0) arrive(s, to, "goto");
636
- },
637
- [arrive, forward, backward],
638
- );
639
- const next = useCallback(() => {
640
- const s = stepsRef.current;
641
- if (!s || s.length === 0) return;
642
- const to = forward(s, indexRef.current + 1, "next");
643
- if (to < 0) finish();
644
- else arrive(s, to, "next");
645
- }, [arrive, forward, finish]);
646
- const prev = useCallback(() => {
647
- const s = stepsRef.current;
648
- if (!s) return;
649
- const to = backward(s, indexRef.current - 1, "back");
650
- if (to >= 0) arrive(s, to, "back");
651
- }, [arrive, backward]);
652
-
653
- // awaitGate (§11.4): `release` and `refuse` are events, heard only while a tour runs.
654
- useEffect(() => {
655
- if (!active) return;
656
- let seq = 0;
657
- return gates.listen((signal) => {
658
- const s = stepsRef.current;
659
- if (!s) return;
660
- const i = indexRef.current;
661
- if (signal.kind === "refuse") {
662
- // On any other step the form's own errors speak.
663
- if (s[i]?.awaitGate === signal.key) setRefusal({ step: s[i], reason: signal.reason, seq: ++seq });
664
- return;
665
- }
666
- // The step awaiting it, or the first later one: the record is saved, so the fields
667
- // between are passed over.
668
- const awaiting =
669
- s[i]?.awaitGate === signal.key ? i : s.findIndex((st, k) => k > i && st.awaitGate === signal.key);
670
- if (awaiting < 0) return;
671
- const to = forward(s, awaiting + 1, "next");
672
- if (to < 0) finish();
673
- else arrive(s, to, "next");
674
- });
675
- }, [active, gates, arrive, forward, finish]);
676
-
677
- const value: TourContextValue = {
678
- active,
679
- activeId,
680
- start,
681
- stop,
682
- next,
683
- prev,
684
- goToStep,
685
- index,
686
- total,
687
- position: active ? nav.position : 0,
688
- count: active ? nav.count : 0,
689
- };
690
- // Read by the live engine (`launch`'s fourth argument) after this render commits.
691
- useLayoutEffect(() => {
692
- live.set(value);
693
- });
694
-
695
- return (
696
- <TourInternalContext.Provider value={internals}>
697
- <TourContext.Provider value={value}>
698
- {children}
699
- {active ? (
700
- // Its own boundary, so the first start's chunk fetch suspends nothing of the
701
- // app's; it shows nothing meanwhile, as the overlay itself does until it has
702
- // located the step, and hears Escape as it does. A failed fetch ends the run
703
- // (`TourOverlayUnavailable`).
704
- <Suspense fallback={<TourOverlayLoading onSkip={skip} />}>
705
- <TourUnavailableContext.Provider value={unavailable}>
706
- <LazyTourOverlay
707
- steps={steps!}
708
- index={index}
709
- via={nav.via}
710
- floor={nav.floor}
711
- position={nav.position}
712
- count={nav.count}
713
- refusal={refusal?.step === steps![index] ? refusal : null}
714
- onGoTo={goToStep}
715
- labels={merged}
716
- gates={gates}
717
- dockOnPhones={dockOnPhones}
718
- onNext={next}
719
- onPrev={prev}
720
- onSkip={skip}
721
- />
722
- </TourUnavailableContext.Provider>
723
- </Suspense>
724
- ) : null}
725
- </TourContext.Provider>
726
- </TourInternalContext.Provider>
727
- );
728
- }
729
-
730
- interface Nav {
731
- index: number;
732
- /** The run's first step (the `at` floor). */
733
- floor: number;
734
- via: TourStepContext["via"];
735
- position: number;
736
- count: number;
737
- }
738
-
739
- const NO_NAV: Nav = { index: 0, floor: 0, via: "start", position: 0, count: 0 };
740
-
741
- /** `StartOptions.at` as a step index: a number clamped, an anchor's first step, else 0. */
742
- function resolveAt(steps: TourStep[], at: TourAt): number {
743
- if (typeof at === "number") return Math.min(Math.max(0, Math.floor(at)), Math.max(0, steps.length - 1));
744
- const anchor = `data-tour="${at}"`;
745
- const found = steps.findIndex((step) => step.target?.includes(anchor));
746
- if (found >= 0) return found;
747
- if (devWarnings())
748
- console.warn(`[ui-kit] A tour was started at "${at}", but no step targets [${anchor}]: it starts at 0.`);
749
- return 0;
750
- }