@eifi1/ui-kit 0.54.0 → 0.56.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (847) hide show
  1. package/README.md +90 -76
  2. package/dist/admin/plan-change.js +2 -2
  3. package/dist/admin/plan-change.js.map +1 -1
  4. package/dist/admin/user-roster.d.ts +6 -0
  5. package/dist/admin/user-roster.js +4 -0
  6. package/dist/admin/user-roster.js.map +1 -1
  7. package/dist/billing/billing-labels.d.ts +26 -0
  8. package/dist/billing/billing-labels.js +9 -0
  9. package/dist/billing/billing-labels.js.map +1 -1
  10. package/dist/billing/subscription-standing.d.ts +61 -0
  11. package/dist/billing/subscription-standing.js +51 -0
  12. package/dist/billing/subscription-standing.js.map +1 -0
  13. package/dist/billing/usage-meter.d.ts +52 -0
  14. package/dist/billing/usage-meter.js +52 -0
  15. package/dist/billing/usage-meter.js.map +1 -0
  16. package/dist/chart.d.ts +1 -0
  17. package/dist/chart.js +4 -0
  18. package/dist/chart.js.map +1 -1
  19. package/dist/components/alert-banner.js +2 -3
  20. package/dist/components/alert-banner.js.map +1 -1
  21. package/dist/components/amount-input.js +3 -15
  22. package/dist/components/amount-input.js.map +1 -1
  23. package/dist/components/autocomplete.js +2 -2
  24. package/dist/components/autocomplete.js.map +1 -1
  25. package/dist/components/bulk-action-bar.js +2 -1
  26. package/dist/components/bulk-action-bar.js.map +1 -1
  27. package/dist/components/button.d.ts +35 -1
  28. package/dist/components/button.js +6 -9
  29. package/dist/components/button.js.map +1 -1
  30. package/dist/components/calendar-heatmap.js +2 -2
  31. package/dist/components/calendar-heatmap.js.map +1 -1
  32. package/dist/components/camera-button.d.ts +89 -0
  33. package/dist/components/camera-button.js +122 -0
  34. package/dist/components/camera-button.js.map +1 -0
  35. package/dist/components/camera-capture.d.ts +66 -0
  36. package/dist/components/camera-capture.js +190 -0
  37. package/dist/components/camera-capture.js.map +1 -0
  38. package/dist/components/camera-labels.d.ts +20 -0
  39. package/dist/components/camera-labels.js +15 -0
  40. package/dist/components/camera-labels.js.map +1 -0
  41. package/dist/components/chart-edge.d.ts +9 -0
  42. package/dist/components/chart-edge.js +14 -3
  43. package/dist/components/chart-edge.js.map +1 -1
  44. package/dist/components/chart-zoom-core.js +34 -29
  45. package/dist/components/chart-zoom-core.js.map +1 -1
  46. package/dist/components/checkbox-group.js +1 -1
  47. package/dist/components/checkbox-group.js.map +1 -1
  48. package/dist/components/combobox-core.js +3 -2
  49. package/dist/components/combobox-core.js.map +1 -1
  50. package/dist/components/combobox.js +2 -2
  51. package/dist/components/combobox.js.map +1 -1
  52. package/dist/components/consent-again-notice-labels.d.ts +25 -0
  53. package/dist/components/consent-again-notice-labels.js +15 -0
  54. package/dist/components/consent-again-notice-labels.js.map +1 -0
  55. package/dist/components/consent-again-notice.d.ts +85 -0
  56. package/dist/components/consent-again-notice.js +94 -0
  57. package/dist/components/consent-again-notice.js.map +1 -0
  58. package/dist/components/country-select.js +2 -7
  59. package/dist/components/country-select.js.map +1 -1
  60. package/dist/components/currency-select.js +2 -2
  61. package/dist/components/currency-select.js.map +1 -1
  62. package/dist/components/danger-confirm.js +2 -2
  63. package/dist/components/danger-confirm.js.map +1 -1
  64. package/dist/components/data-table-column-settings.js +2 -2
  65. package/dist/components/data-table-column-settings.js.map +1 -1
  66. package/dist/components/data-table-fit.js.map +1 -1
  67. package/dist/components/data-table-virtual.js +13 -3
  68. package/dist/components/data-table-virtual.js.map +1 -1
  69. package/dist/components/date-field.js +2 -2
  70. package/dist/components/date-field.js.map +1 -1
  71. package/dist/components/date-picker.js +2 -2
  72. package/dist/components/date-picker.js.map +1 -1
  73. package/dist/components/date-range-picker.js +2 -6
  74. package/dist/components/date-range-picker.js.map +1 -1
  75. package/dist/components/dialog-frame.d.ts +3 -1
  76. package/dist/components/dialog-frame.js.map +1 -1
  77. package/dist/components/dropdown.js +7 -3
  78. package/dist/components/dropdown.js.map +1 -1
  79. package/dist/components/entity-combobox.js +2 -2
  80. package/dist/components/entity-combobox.js.map +1 -1
  81. package/dist/components/field-parts.d.ts +108 -6
  82. package/dist/components/field-parts.js +59 -6
  83. package/dist/components/field-parts.js.map +1 -1
  84. package/dist/components/field-suggestion-labels.d.ts +2 -0
  85. package/dist/components/field-suggestion-labels.js +10 -0
  86. package/dist/components/field-suggestion-labels.js.map +1 -0
  87. package/dist/components/field.js +1 -1
  88. package/dist/components/field.js.map +1 -1
  89. package/dist/components/file-button.d.ts +1 -1
  90. package/dist/components/file-button.js.map +1 -1
  91. package/dist/components/floating-panel.d.ts +7 -6
  92. package/dist/components/floating-panel.js +3 -17
  93. package/dist/components/floating-panel.js.map +1 -1
  94. package/dist/components/form-actions.d.ts +3 -2
  95. package/dist/components/form-actions.js.map +1 -1
  96. package/dist/components/hover-menu.js +3 -2
  97. package/dist/components/hover-menu.js.map +1 -1
  98. package/dist/components/icon-button.d.ts +23 -5
  99. package/dist/components/icon-button.js +7 -8
  100. package/dist/components/icon-button.js.map +1 -1
  101. package/dist/components/inline-confirm.js +2 -1
  102. package/dist/components/inline-confirm.js.map +1 -1
  103. package/dist/components/inline-entity-combobox.js +2 -2
  104. package/dist/components/inline-entity-combobox.js.map +1 -1
  105. package/dist/components/input.js +2 -2
  106. package/dist/components/input.js.map +1 -1
  107. package/dist/components/jump-calendar.js +3 -3
  108. package/dist/components/jump-calendar.js.map +1 -1
  109. package/dist/components/legal.d.ts +13 -1
  110. package/dist/components/legal.js +12 -0
  111. package/dist/components/legal.js.map +1 -1
  112. package/dist/components/legended-series-chart.d.ts +83 -0
  113. package/dist/components/legended-series-chart.js +77 -0
  114. package/dist/components/legended-series-chart.js.map +1 -0
  115. package/dist/components/lightbox.js +2 -1
  116. package/dist/components/lightbox.js.map +1 -1
  117. package/dist/components/mini-calendar.js +13 -5
  118. package/dist/components/mini-calendar.js.map +1 -1
  119. package/dist/components/modal.d.ts +23 -2
  120. package/dist/components/modal.js +24 -6
  121. package/dist/components/modal.js.map +1 -1
  122. package/dist/components/month-picker.d.ts +1 -1
  123. package/dist/components/month-picker.js +6 -6
  124. package/dist/components/month-picker.js.map +1 -1
  125. package/dist/components/multi-entity-combobox.js +2 -2
  126. package/dist/components/multi-entity-combobox.js.map +1 -1
  127. package/dist/components/multi-select.js +2 -6
  128. package/dist/components/multi-select.js.map +1 -1
  129. package/dist/components/number-input.js +2 -2
  130. package/dist/components/number-input.js.map +1 -1
  131. package/dist/components/page-header-layout.d.ts +18 -0
  132. package/dist/components/page-header-layout.js +23 -0
  133. package/dist/components/page-header-layout.js.map +1 -0
  134. package/dist/components/page-header-skeleton.d.ts +41 -0
  135. package/dist/components/page-header-skeleton.js +52 -0
  136. package/dist/components/page-header-skeleton.js.map +1 -0
  137. package/dist/components/page-header.js +4 -17
  138. package/dist/components/page-header.js.map +1 -1
  139. package/dist/components/popover.js +7 -2
  140. package/dist/components/popover.js.map +1 -1
  141. package/dist/components/release-notes-labels.d.ts +16 -0
  142. package/dist/components/release-notes-labels.js +18 -0
  143. package/dist/components/release-notes-labels.js.map +1 -0
  144. package/dist/components/release-notes.d.ts +65 -0
  145. package/dist/components/release-notes.js +65 -0
  146. package/dist/components/release-notes.js.map +1 -0
  147. package/dist/components/select.js +2 -2
  148. package/dist/components/select.js.map +1 -1
  149. package/dist/components/series-chart-labels.d.ts +9 -0
  150. package/dist/components/series-chart-labels.js +3 -1
  151. package/dist/components/series-chart-labels.js.map +1 -1
  152. package/dist/components/series-chart.d.ts +5 -0
  153. package/dist/components/series-chart.js +89 -36
  154. package/dist/components/series-chart.js.map +1 -1
  155. package/dist/components/toggle-group.js +3 -2
  156. package/dist/components/toggle-group.js.map +1 -1
  157. package/dist/components/treemap-layout.js.map +1 -1
  158. package/dist/components/treemap.d.ts +17 -15
  159. package/dist/components/treemap.js +167 -85
  160. package/dist/components/treemap.js.map +1 -1
  161. package/dist/eslint/index.js +1 -1
  162. package/dist/eslint/role-utilities.d.ts +2 -2
  163. package/dist/eslint/role-utilities.js.map +1 -1
  164. package/dist/feedback/feedback-inbox-page.d.ts +260 -0
  165. package/dist/feedback/feedback-inbox-page.js +207 -0
  166. package/dist/feedback/feedback-inbox-page.js.map +1 -0
  167. package/dist/feedback/feedback-vocabulary.js +2 -2
  168. package/dist/feedback/feedback-vocabulary.js.map +1 -1
  169. package/dist/feedback.d.ts +1 -0
  170. package/dist/feedback.js +6 -0
  171. package/dist/feedback.js.map +1 -1
  172. package/dist/hooks/use-debounce.d.ts +32 -5
  173. package/dist/hooks/use-debounce.js +6 -5
  174. package/dist/hooks/use-debounce.js.map +1 -1
  175. package/dist/hooks/use-file-picker.d.ts +3 -1
  176. package/dist/hooks/use-file-picker.js.map +1 -1
  177. package/dist/hooks/use-focus-trap.d.ts +19 -3
  178. package/dist/hooks/use-focus-trap.js +15 -5
  179. package/dist/hooks/use-focus-trap.js.map +1 -1
  180. package/dist/hooks/use-has-camera.d.ts +36 -0
  181. package/dist/hooks/use-has-camera.js +53 -0
  182. package/dist/hooks/use-has-camera.js.map +1 -0
  183. package/dist/hooks/use-hotkey.js +1 -10
  184. package/dist/hooks/use-hotkey.js.map +1 -1
  185. package/dist/hooks/use-overlay-history.d.ts +6 -1
  186. package/dist/hooks/use-overlay-history.js +10 -2
  187. package/dist/hooks/use-overlay-history.js.map +1 -1
  188. package/dist/i18n/defaults.js +11 -1
  189. package/dist/i18n/defaults.js.map +1 -1
  190. package/dist/i18n/german.js +75 -3
  191. package/dist/i18n/german.js.map +1 -1
  192. package/dist/i18n/kit-labels.d.ts +20 -0
  193. package/dist/i18n/kit-labels.js.map +1 -1
  194. package/dist/i18n/locales/en.js +92 -4
  195. package/dist/i18n/locales/en.js.map +3 -3
  196. package/dist/i18n/locales/es.js +71 -3
  197. package/dist/i18n/locales/es.js.map +1 -1
  198. package/dist/i18n/locales/fr.js +72 -2
  199. package/dist/i18n/locales/fr.js.map +1 -1
  200. package/dist/i18n/locales/hu.js +74 -3
  201. package/dist/i18n/locales/hu.js.map +1 -1
  202. package/dist/i18n/locales/it.js +74 -3
  203. package/dist/i18n/locales/it.js.map +1 -1
  204. package/dist/i18n/locales/zh.js +71 -3
  205. package/dist/i18n/locales/zh.js.map +1 -1
  206. package/dist/i18n/review.js +22 -1
  207. package/dist/i18n/review.js.map +1 -1
  208. package/dist/index.d.ts +24 -5
  209. package/dist/index.js +35 -1
  210. package/dist/index.js.map +1 -1
  211. package/dist/landing/landing-labels.d.ts +8 -0
  212. package/dist/landing/landing-labels.js +2 -1
  213. package/dist/landing/landing-labels.js.map +1 -1
  214. package/dist/lib/changelog.d.ts +130 -0
  215. package/dist/lib/changelog.js +137 -0
  216. package/dist/lib/changelog.js.map +1 -0
  217. package/dist/lib/clipboard-minus.js +2 -2
  218. package/dist/lib/clipboard-minus.js.map +1 -1
  219. package/dist/lib/dates.d.ts +29 -3
  220. package/dist/lib/dates.js +41 -12
  221. package/dist/lib/dates.js.map +1 -1
  222. package/dist/lib/editable-content.d.ts +33 -0
  223. package/dist/lib/editable-content.js +15 -0
  224. package/dist/lib/editable-content.js.map +1 -0
  225. package/dist/lib/focus-left.d.ts +47 -1
  226. package/dist/lib/focus-left.js +11 -2
  227. package/dist/lib/focus-left.js.map +1 -1
  228. package/dist/lib/server-wake.d.ts +49 -9
  229. package/dist/lib/server-wake.js +25 -14
  230. package/dist/lib/server-wake.js.map +1 -1
  231. package/dist/lib/session-refresh.d.ts +53 -0
  232. package/dist/lib/session-refresh.js +27 -1
  233. package/dist/lib/session-refresh.js.map +1 -1
  234. package/dist/rhf/fields.js +3 -3
  235. package/dist/rhf/fields.js.map +1 -1
  236. package/dist/shell/app-shell.d.ts +25 -1
  237. package/dist/shell/app-shell.js +3 -1
  238. package/dist/shell/app-shell.js.map +1 -1
  239. package/dist/shell/dev-menu.d.ts +3 -0
  240. package/dist/shell/dev-menu.js +4 -2
  241. package/dist/shell/dev-menu.js.map +1 -1
  242. package/dist/shell/held-changes-banner-labels.d.ts +23 -0
  243. package/dist/shell/held-changes-banner-labels.js +14 -0
  244. package/dist/shell/held-changes-banner-labels.js.map +1 -0
  245. package/dist/shell/held-changes-banner.d.ts +75 -0
  246. package/dist/shell/held-changes-banner.js +106 -0
  247. package/dist/shell/held-changes-banner.js.map +1 -0
  248. package/dist/shell/sync-status-indicator.d.ts +27 -12
  249. package/dist/shell/sync-status-indicator.js +13 -4
  250. package/dist/shell/sync-status-indicator.js.map +1 -1
  251. package/dist/shell/top-bar-parts-labels.d.ts +5 -0
  252. package/dist/shell/top-bar-parts-labels.js +3 -1
  253. package/dist/shell/top-bar-parts-labels.js.map +1 -1
  254. package/dist/shell.d.ts +2 -0
  255. package/dist/shell.js +3 -0
  256. package/dist/shell.js.map +1 -1
  257. package/dist/sync/engine.d.ts +11 -2
  258. package/dist/sync/engine.js +13 -5
  259. package/dist/sync/engine.js.map +1 -1
  260. package/dist/sync/hooks.d.ts +3 -2
  261. package/dist/sync/hooks.js +4 -2
  262. package/dist/sync/hooks.js.map +1 -1
  263. package/dist/testing/css-variables.generated.d.ts +2 -2
  264. package/dist/testing/css-variables.generated.js +1 -1
  265. package/dist/testing/css-variables.generated.js.map +1 -1
  266. package/dist/theme/chart-palette.d.ts +18 -0
  267. package/dist/theme/chart-palette.js +17 -1
  268. package/dist/theme/chart-palette.js.map +1 -1
  269. package/dist/theme/contrast-tokens.d.ts +3 -3
  270. package/dist/theme/contrast-tokens.js.map +1 -1
  271. package/dist/theme/contrast.d.ts +4 -4
  272. package/dist/theme/contrast.js.map +1 -1
  273. package/dist/tour/tour-overlay.js +2 -1
  274. package/dist/tour/tour-overlay.js.map +1 -1
  275. package/package.json +9 -12
  276. package/tokens.css +19 -54
  277. package/src/account/account-parts.ts +0 -47
  278. package/src/account/account-settings-labels.ts +0 -240
  279. package/src/account/account-settings.tsx +0 -698
  280. package/src/account/data-export-setting-labels.ts +0 -20
  281. package/src/account/data-export-setting.tsx +0 -200
  282. package/src/account/delete-account-setting-labels.ts +0 -33
  283. package/src/account/delete-account-setting.tsx +0 -342
  284. package/src/account/email-change-setting-labels.ts +0 -31
  285. package/src/account/email-change-setting.tsx +0 -443
  286. package/src/account/passkeys-setting.tsx +0 -445
  287. package/src/account/sessions-setting-labels.ts +0 -24
  288. package/src/account/sessions-setting.tsx +0 -283
  289. package/src/admin/admin-action-confirm-labels.ts +0 -19
  290. package/src/admin/admin-action-confirm.tsx +0 -509
  291. package/src/admin/admin-action-log-labels.ts +0 -83
  292. package/src/admin/admin-action-log.tsx +0 -464
  293. package/src/admin/admin-area-labels.ts +0 -114
  294. package/src/admin/admin-forbidden.tsx +0 -75
  295. package/src/admin/admin-overview.tsx +0 -258
  296. package/src/admin/admin-parts.ts +0 -68
  297. package/src/admin/admin-sections.tsx +0 -208
  298. package/src/admin/admin-tool-links.tsx +0 -90
  299. package/src/admin/invitations-panel-labels.ts +0 -31
  300. package/src/admin/invitations-panel.tsx +0 -516
  301. package/src/admin/mail-test-card-labels.ts +0 -19
  302. package/src/admin/mail-test-card.tsx +0 -189
  303. package/src/admin/plan-change-labels.ts +0 -5
  304. package/src/admin/plan-change.tsx +0 -474
  305. package/src/admin/reviewer-scope-editor-labels.ts +0 -16
  306. package/src/admin/reviewer-scope-editor.tsx +0 -224
  307. package/src/admin/role-select-labels.ts +0 -16
  308. package/src/admin/role-select.tsx +0 -282
  309. package/src/admin/transfer-ownership-dialog-labels.ts +0 -20
  310. package/src/admin/transfer-ownership-dialog.tsx +0 -162
  311. package/src/admin/user-roster-labels.ts +0 -17
  312. package/src/admin/user-roster.tsx +0 -559
  313. package/src/auth/accept-invitation-labels.ts +0 -21
  314. package/src/auth/accept-invitation.tsx +0 -210
  315. package/src/auth/auth-errors-labels.ts +0 -23
  316. package/src/auth/auth-errors.ts +0 -439
  317. package/src/auth/complete-name-dialog-labels.ts +0 -16
  318. package/src/auth/complete-name-dialog.tsx +0 -253
  319. package/src/auth/email-tag.ts +0 -75
  320. package/src/auth/forgot-password-form-labels.ts +0 -20
  321. package/src/auth/forgot-password-form.tsx +0 -221
  322. package/src/auth/form-rules.ts +0 -40
  323. package/src/auth/new-password-fields.tsx +0 -85
  324. package/src/auth/not-found-page-labels.ts +0 -12
  325. package/src/auth/not-found-page.tsx +0 -95
  326. package/src/auth/register-form-labels.ts +0 -31
  327. package/src/auth/register-form.tsx +0 -456
  328. package/src/auth/reset-password-form-labels.ts +0 -27
  329. package/src/auth/reset-password-form.tsx +0 -341
  330. package/src/auth/sign-in-form-labels.ts +0 -44
  331. package/src/auth/sign-in-form.tsx +0 -858
  332. package/src/auth/status-parts.tsx +0 -132
  333. package/src/auth/verify-email-labels.ts +0 -26
  334. package/src/auth/verify-email.tsx +0 -445
  335. package/src/billing/billing-banner.tsx +0 -258
  336. package/src/billing/billing-labels.ts +0 -381
  337. package/src/billing/billing-lock.ts +0 -108
  338. package/src/billing/billing-overview.ts +0 -157
  339. package/src/billing/billing-standing.ts +0 -80
  340. package/src/billing/cancel-request.ts +0 -97
  341. package/src/billing/cancel-subscription.tsx +0 -98
  342. package/src/billing/checkout-processing.ts +0 -394
  343. package/src/billing/checkout-return.ts +0 -90
  344. package/src/billing/pay-page.ts +0 -330
  345. package/src/billing/plan-card.tsx +0 -562
  346. package/src/billing/plan-change-labels.ts +0 -66
  347. package/src/billing/plan-limit-notice.tsx +0 -148
  348. package/src/billing/plan-limit-toast.tsx +0 -90
  349. package/src/billing/plan-limit.ts +0 -52
  350. package/src/billing/plan-price.ts +0 -98
  351. package/src/billing/plan-switch.tsx +0 -216
  352. package/src/billing/provider-page.ts +0 -84
  353. package/src/billing/subscription-actions.tsx +0 -247
  354. package/src/billing/subscription-status-chip.tsx +0 -95
  355. package/src/chart.ts +0 -103
  356. package/src/components/account-chips-labels.ts +0 -16
  357. package/src/components/account-chips.tsx +0 -474
  358. package/src/components/alert-banner.tsx +0 -670
  359. package/src/components/amount-input.tsx +0 -816
  360. package/src/components/appearance-labels.ts +0 -63
  361. package/src/components/authed-image-labels.ts +0 -11
  362. package/src/components/authed-image.tsx +0 -209
  363. package/src/components/autocomplete.tsx +0 -645
  364. package/src/components/breadcrumbs-labels.ts +0 -10
  365. package/src/components/breadcrumbs.tsx +0 -205
  366. package/src/components/bulk-action-bar-labels.ts +0 -11
  367. package/src/components/bulk-action-bar.tsx +0 -443
  368. package/src/components/button-group.tsx +0 -223
  369. package/src/components/button-look.ts +0 -256
  370. package/src/components/button.tsx +0 -339
  371. package/src/components/calculator.tsx +0 -341
  372. package/src/components/calendar-heatmap-labels.ts +0 -15
  373. package/src/components/calendar-heatmap.tsx +0 -600
  374. package/src/components/card.tsx +0 -377
  375. package/src/components/chart-edge.ts +0 -106
  376. package/src/components/chart-figure.tsx +0 -35
  377. package/src/components/chart-height.ts +0 -30
  378. package/src/components/chart-zoom-core.tsx +0 -627
  379. package/src/components/chart-zoom.tsx +0 -22
  380. package/src/components/chart.tsx +0 -554
  381. package/src/components/checkbox-group.tsx +0 -247
  382. package/src/components/checkbox.tsx +0 -346
  383. package/src/components/chip-input.tsx +0 -370
  384. package/src/components/chip-labels.ts +0 -13
  385. package/src/components/chip.tsx +0 -843
  386. package/src/components/choice-card.tsx +0 -544
  387. package/src/components/column-mapper-labels.ts +0 -38
  388. package/src/components/column-mapper.tsx +0 -655
  389. package/src/components/combobox-core.tsx +0 -1321
  390. package/src/components/combobox-suggestions.tsx +0 -131
  391. package/src/components/combobox.tsx +0 -716
  392. package/src/components/confirm-context.ts +0 -7
  393. package/src/components/confirm-dialog-labels.ts +0 -13
  394. package/src/components/confirm-dialog.tsx +0 -341
  395. package/src/components/copy-button-labels.ts +0 -13
  396. package/src/components/copy-button.tsx +0 -192
  397. package/src/components/country-select-labels.ts +0 -11
  398. package/src/components/country-select.tsx +0 -539
  399. package/src/components/currency-option-list.tsx +0 -188
  400. package/src/components/currency-select.tsx +0 -343
  401. package/src/components/danger-confirm-labels.ts +0 -20
  402. package/src/components/danger-confirm.tsx +0 -987
  403. package/src/components/data-table-cells.tsx +0 -118
  404. package/src/components/data-table-column-settings.tsx +0 -198
  405. package/src/components/data-table-filter-popover.tsx +0 -289
  406. package/src/components/data-table-filters.ts +0 -315
  407. package/src/components/data-table-fit.ts +0 -301
  408. package/src/components/data-table-groups.tsx +0 -288
  409. package/src/components/data-table-head.tsx +0 -280
  410. package/src/components/data-table-labels.ts +0 -198
  411. package/src/components/data-table-leading-row.tsx +0 -58
  412. package/src/components/data-table-mobile.tsx +0 -1117
  413. package/src/components/data-table-pagination.tsx +0 -202
  414. package/src/components/data-table-resize.ts +0 -188
  415. package/src/components/data-table-row-actions.tsx +0 -302
  416. package/src/components/data-table-row.tsx +0 -496
  417. package/src/components/data-table-selection.ts +0 -71
  418. package/src/components/data-table-shared.tsx +0 -287
  419. package/src/components/data-table-sort.ts +0 -163
  420. package/src/components/data-table-virtual.ts +0 -576
  421. package/src/components/data-table.tsx +0 -2598
  422. package/src/components/date-field.tsx +0 -684
  423. package/src/components/date-format-setting.tsx +0 -64
  424. package/src/components/date-picker.tsx +0 -404
  425. package/src/components/date-range-picker.tsx +0 -518
  426. package/src/components/description-list-labels.ts +0 -9
  427. package/src/components/description-list.tsx +0 -386
  428. package/src/components/dialog-frame-labels.ts +0 -7
  429. package/src/components/dialog-frame.tsx +0 -284
  430. package/src/components/disclosure.tsx +0 -476
  431. package/src/components/dropdown.tsx +0 -461
  432. package/src/components/empty-state.tsx +0 -136
  433. package/src/components/entity-combobox.tsx +0 -422
  434. package/src/components/error-boundary-labels.ts +0 -20
  435. package/src/components/error-boundary.tsx +0 -675
  436. package/src/components/facing-pair.ts +0 -93
  437. package/src/components/field-base-labels.ts +0 -20
  438. package/src/components/field-base.tsx +0 -656
  439. package/src/components/field-parts.tsx +0 -825
  440. package/src/components/field-strip.tsx +0 -129
  441. package/src/components/field.tsx +0 -206
  442. package/src/components/file-button.tsx +0 -295
  443. package/src/components/file-dropzone.tsx +0 -559
  444. package/src/components/floating-panel-labels.ts +0 -10
  445. package/src/components/floating-panel.tsx +0 -828
  446. package/src/components/focus-ring.ts +0 -16
  447. package/src/components/form-actions-labels.ts +0 -11
  448. package/src/components/form-actions.tsx +0 -578
  449. package/src/components/full-bleed-dialog.tsx +0 -294
  450. package/src/components/grouped-picker.tsx +0 -184
  451. package/src/components/help-popover.tsx +0 -117
  452. package/src/components/hover-menu.tsx +0 -343
  453. package/src/components/iban-input-labels.ts +0 -14
  454. package/src/components/iban-input.tsx +0 -236
  455. package/src/components/icon-button.tsx +0 -959
  456. package/src/components/icon-picker-labels.ts +0 -13
  457. package/src/components/icon-picker.tsx +0 -232
  458. package/src/components/image-grid-labels.ts +0 -11
  459. package/src/components/image-grid.tsx +0 -202
  460. package/src/components/inline-confirm.tsx +0 -116
  461. package/src/components/inline-edit-field-labels.ts +0 -11
  462. package/src/components/inline-edit-field.tsx +0 -552
  463. package/src/components/inline-entity-combobox.tsx +0 -849
  464. package/src/components/input.tsx +0 -394
  465. package/src/components/jump-calendar.tsx +0 -265
  466. package/src/components/language-select.tsx +0 -93
  467. package/src/components/legal-labels.ts +0 -105
  468. package/src/components/legal-page.tsx +0 -711
  469. package/src/components/legal.tsx +0 -668
  470. package/src/components/lightbox-labels.ts +0 -18
  471. package/src/components/lightbox.tsx +0 -399
  472. package/src/components/line-items-labels.ts +0 -14
  473. package/src/components/line-items.tsx +0 -602
  474. package/src/components/list-labels.ts +0 -12
  475. package/src/components/list.tsx +0 -870
  476. package/src/components/loading-state.tsx +0 -78
  477. package/src/components/measured-grid-labels.ts +0 -25
  478. package/src/components/measured-grid.tsx +0 -837
  479. package/src/components/menu-item.tsx +0 -241
  480. package/src/components/mini-calendar-labels.ts +0 -17
  481. package/src/components/mini-calendar.tsx +0 -792
  482. package/src/components/modal.tsx +0 -534
  483. package/src/components/money-draft.ts +0 -83
  484. package/src/components/money-field.tsx +0 -76
  485. package/src/components/month-grid.tsx +0 -229
  486. package/src/components/month-picker-labels.ts +0 -22
  487. package/src/components/month-picker.tsx +0 -1087
  488. package/src/components/multi-entity-combobox.tsx +0 -369
  489. package/src/components/multi-select.tsx +0 -376
  490. package/src/components/nav-pills.tsx +0 -198
  491. package/src/components/number-field.tsx +0 -327
  492. package/src/components/number-input.tsx +0 -559
  493. package/src/components/numeric-field.ts +0 -169
  494. package/src/components/numpad-sheet.tsx +0 -285
  495. package/src/components/one-time-code-input.tsx +0 -270
  496. package/src/components/page-contents-labels.ts +0 -9
  497. package/src/components/page-contents.tsx +0 -282
  498. package/src/components/page-header-context.ts +0 -8
  499. package/src/components/page-header.tsx +0 -298
  500. package/src/components/password-strength-labels.ts +0 -22
  501. package/src/components/password-strength.tsx +0 -241
  502. package/src/components/phone-input-labels.ts +0 -10
  503. package/src/components/phone-input.tsx +0 -282
  504. package/src/components/picker-sheet.tsx +0 -330
  505. package/src/components/pie-chart-labels.ts +0 -40
  506. package/src/components/pie-chart.tsx +0 -480
  507. package/src/components/popover-labels.ts +0 -14
  508. package/src/components/popover.tsx +0 -268
  509. package/src/components/progress-bar-labels.ts +0 -10
  510. package/src/components/progress-bar.tsx +0 -479
  511. package/src/components/qr-code.tsx +0 -76
  512. package/src/components/reauth-dialog-labels.ts +0 -13
  513. package/src/components/reauth-dialog.tsx +0 -265
  514. package/src/components/row-actions-labels.ts +0 -12
  515. package/src/components/row-actions.tsx +0 -795
  516. package/src/components/scroll-area.tsx +0 -123
  517. package/src/components/search-field.tsx +0 -192
  518. package/src/components/select.tsx +0 -294
  519. package/src/components/separator.tsx +0 -33
  520. package/src/components/series-chart-axes.ts +0 -342
  521. package/src/components/series-chart-budget.ts +0 -150
  522. package/src/components/series-chart-labels.ts +0 -33
  523. package/src/components/series-chart-thin.ts +0 -180
  524. package/src/components/series-chart-ticks.ts +0 -194
  525. package/src/components/series-chart.tsx +0 -1906
  526. package/src/components/server-wake-labels.ts +0 -11
  527. package/src/components/server-wake.tsx +0 -129
  528. package/src/components/settings-fields.tsx +0 -237
  529. package/src/components/share-card-labels.ts +0 -30
  530. package/src/components/share-card.tsx +0 -675
  531. package/src/components/signature-pad-labels.ts +0 -24
  532. package/src/components/signature-pad.tsx +0 -747
  533. package/src/components/signed-amount-labels.ts +0 -10
  534. package/src/components/signed-amount.tsx +0 -336
  535. package/src/components/skeleton.tsx +0 -80
  536. package/src/components/slider.tsx +0 -338
  537. package/src/components/sparkline-labels.ts +0 -14
  538. package/src/components/sparkline.tsx +0 -322
  539. package/src/components/spinner.tsx +0 -81
  540. package/src/components/stat-tile-labels.ts +0 -15
  541. package/src/components/stat-tile.tsx +0 -754
  542. package/src/components/status-dot.tsx +0 -170
  543. package/src/components/swatch-picker-labels.ts +0 -10
  544. package/src/components/swatch-picker.tsx +0 -283
  545. package/src/components/swipeable-row.tsx +0 -386
  546. package/src/components/switch.tsx +0 -273
  547. package/src/components/table-skeleton.tsx +0 -136
  548. package/src/components/table.tsx +0 -647
  549. package/src/components/tabs-labels.ts +0 -13
  550. package/src/components/tabs.tsx +0 -693
  551. package/src/components/text-link.tsx +0 -359
  552. package/src/components/text.tsx +0 -150
  553. package/src/components/textarea.tsx +0 -330
  554. package/src/components/tile-radio.tsx +0 -332
  555. package/src/components/time-input.tsx +0 -121
  556. package/src/components/toast-labels.ts +0 -12
  557. package/src/components/toast.tsx +0 -519
  558. package/src/components/toggle-group.tsx +0 -752
  559. package/src/components/toggle-legend.tsx +0 -394
  560. package/src/components/tooltip.tsx +0 -1149
  561. package/src/components/translation-review-editor.tsx +0 -290
  562. package/src/components/translation-review-labels.ts +0 -181
  563. package/src/components/translation-review-parts.tsx +0 -272
  564. package/src/components/translation-review.tsx +0 -1240
  565. package/src/components/tree-view.tsx +0 -589
  566. package/src/components/treemap-labels.ts +0 -47
  567. package/src/components/treemap-layout.ts +0 -210
  568. package/src/components/treemap.tsx +0 -1184
  569. package/src/components/trigger-aria.ts +0 -44
  570. package/src/components/use-anchor-dir.ts +0 -20
  571. package/src/components/use-mobile-reveal.ts +0 -62
  572. package/src/components/use-table-state.ts +0 -753
  573. package/src/components/user-avatar.tsx +0 -116
  574. package/src/components/wizard-stepper.tsx +0 -42
  575. package/src/components/write-lock-labels.ts +0 -10
  576. package/src/components/write-lock.tsx +0 -253
  577. package/src/currencies.ts +0 -90
  578. package/src/data-table.ts +0 -42
  579. package/src/demo/demo-banner.tsx +0 -153
  580. package/src/demo/demo-countdown.ts +0 -136
  581. package/src/demo/demo-ended.tsx +0 -90
  582. package/src/demo/demo-labels.ts +0 -78
  583. package/src/demo/demo-session.ts +0 -32
  584. package/src/demo/demo-start.tsx +0 -156
  585. package/src/eslint/index.ts +0 -161
  586. package/src/eslint/role-utilities.generated.ts +0 -146
  587. package/src/eslint/role-utilities.ts +0 -233
  588. package/src/feedback/feedback-attachment-download.tsx +0 -77
  589. package/src/feedback/feedback-attachment-labels.ts +0 -37
  590. package/src/feedback/feedback-attachment.tsx +0 -1239
  591. package/src/feedback/feedback-capture.ts +0 -287
  592. package/src/feedback/feedback-comment-thread.tsx +0 -353
  593. package/src/feedback/feedback-context-labels.ts +0 -11
  594. package/src/feedback/feedback-context.tsx +0 -245
  595. package/src/feedback/feedback-crash.ts +0 -547
  596. package/src/feedback/feedback-diagnostics.tsx +0 -41
  597. package/src/feedback/feedback-dialog-labels.ts +0 -29
  598. package/src/feedback/feedback-dialog.tsx +0 -452
  599. package/src/feedback/feedback-entry-file.tsx +0 -150
  600. package/src/feedback/feedback-inbox.tsx +0 -552
  601. package/src/feedback/feedback-labels.ts +0 -144
  602. package/src/feedback/feedback-menu-labels.ts +0 -12
  603. package/src/feedback/feedback-menu.tsx +0 -177
  604. package/src/feedback/feedback-mutation.ts +0 -20
  605. package/src/feedback/feedback-page-link.ts +0 -90
  606. package/src/feedback/feedback-public-labels.ts +0 -81
  607. package/src/feedback/feedback-public-list.tsx +0 -524
  608. package/src/feedback/feedback-public-switch.tsx +0 -102
  609. package/src/feedback/feedback-public-types.ts +0 -101
  610. package/src/feedback/feedback-record.ts +0 -428
  611. package/src/feedback/feedback-replies-context.ts +0 -9
  612. package/src/feedback/feedback-replies.tsx +0 -343
  613. package/src/feedback/feedback-rework-entry-chip.tsx +0 -18
  614. package/src/feedback/feedback-row-detail-labels.ts +0 -31
  615. package/src/feedback/feedback-row-detail.tsx +0 -871
  616. package/src/feedback/feedback-status-undo.ts +0 -109
  617. package/src/feedback/feedback-submit-dialog.tsx +0 -131
  618. package/src/feedback/feedback-submit.tsx +0 -270
  619. package/src/feedback/feedback-swipe.tsx +0 -192
  620. package/src/feedback/feedback-table-labels.ts +0 -27
  621. package/src/feedback/feedback-table.tsx +0 -912
  622. package/src/feedback/feedback-thread-labels.ts +0 -22
  623. package/src/feedback/feedback-thread-parts-labels.ts +0 -41
  624. package/src/feedback/feedback-thread.tsx +0 -905
  625. package/src/feedback/feedback-vocabulary.ts +0 -263
  626. package/src/feedback/feedback-vote-button.tsx +0 -124
  627. package/src/feedback.ts +0 -116
  628. package/src/hooks/use-anchored-panel.ts +0 -396
  629. package/src/hooks/use-anchored-rect.ts +0 -77
  630. package/src/hooks/use-announce.ts +0 -85
  631. package/src/hooks/use-authed-src.ts +0 -167
  632. package/src/hooks/use-body-scroll-lock.ts +0 -119
  633. package/src/hooks/use-breakpoint.ts +0 -133
  634. package/src/hooks/use-close-transition.ts +0 -107
  635. package/src/hooks/use-copy-to-clipboard.ts +0 -122
  636. package/src/hooks/use-debounce.ts +0 -114
  637. package/src/hooks/use-dismiss.ts +0 -371
  638. package/src/hooks/use-document-title.ts +0 -33
  639. package/src/hooks/use-file-drop.ts +0 -121
  640. package/src/hooks/use-file-picker-labels.ts +0 -28
  641. package/src/hooks/use-file-picker.tsx +0 -359
  642. package/src/hooks/use-focus-trap.ts +0 -199
  643. package/src/hooks/use-hotkey.ts +0 -212
  644. package/src/hooks/use-large-text.ts +0 -41
  645. package/src/hooks/use-long-press.ts +0 -140
  646. package/src/hooks/use-media-query.ts +0 -39
  647. package/src/hooks/use-mounted.ts +0 -39
  648. package/src/hooks/use-noindex.ts +0 -37
  649. package/src/hooks/use-overlay-history.ts +0 -714
  650. package/src/hooks/use-row-swipe.ts +0 -207
  651. package/src/hooks/use-search-param-state.ts +0 -434
  652. package/src/hooks/use-windowed-rows.ts +0 -225
  653. package/src/i18n/defaults.ts +0 -267
  654. package/src/i18n/german.ts +0 -2059
  655. package/src/i18n/kit-labels.tsx +0 -1003
  656. package/src/i18n/languages.ts +0 -349
  657. package/src/i18n/locales/de-CH.ts +0 -24
  658. package/src/i18n/locales/en.ts +0 -267
  659. package/src/i18n/locales/es.ts +0 -1999
  660. package/src/i18n/locales/fr.ts +0 -2037
  661. package/src/i18n/locales/hu.ts +0 -2004
  662. package/src/i18n/locales/it.ts +0 -2014
  663. package/src/i18n/locales/zh.ts +0 -1912
  664. package/src/i18n/plurals.ts +0 -86
  665. package/src/i18n/review.ts +0 -475
  666. package/src/i18n/shared-labels.ts +0 -138
  667. package/src/i18n/swiss.ts +0 -29
  668. package/src/index.ts +0 -1191
  669. package/src/landing/access.ts +0 -93
  670. package/src/landing/landing-actions.tsx +0 -97
  671. package/src/landing/landing-labels.ts +0 -59
  672. package/src/landing/landing-sections.tsx +0 -341
  673. package/src/landing/page-seo.ts +0 -261
  674. package/src/landing/public-header.tsx +0 -121
  675. package/src/landing/public-page.tsx +0 -106
  676. package/src/landing/routing.tsx +0 -225
  677. package/src/lib/broadcast.ts +0 -52
  678. package/src/lib/calc.ts +0 -323
  679. package/src/lib/chip-edge-snap.ts +0 -212
  680. package/src/lib/clipboard-minus.ts +0 -107
  681. package/src/lib/clipping.ts +0 -34
  682. package/src/lib/cn.ts +0 -28
  683. package/src/lib/column-mapping.ts +0 -234
  684. package/src/lib/countries.ts +0 -91
  685. package/src/lib/data-attributes.ts +0 -14
  686. package/src/lib/date-format.ts +0 -227
  687. package/src/lib/dates.ts +0 -288
  688. package/src/lib/day-format.ts +0 -96
  689. package/src/lib/decimal-marks.ts +0 -108
  690. package/src/lib/describe-failure.ts +0 -18
  691. package/src/lib/device-settings.ts +0 -147
  692. package/src/lib/direction.ts +0 -74
  693. package/src/lib/document-navigation.ts +0 -17
  694. package/src/lib/document-title.ts +0 -41
  695. package/src/lib/download.ts +0 -172
  696. package/src/lib/float-clearance.ts +0 -70
  697. package/src/lib/floating-stack.ts +0 -70
  698. package/src/lib/focus-left.ts +0 -156
  699. package/src/lib/format.ts +0 -585
  700. package/src/lib/http-status.ts +0 -38
  701. package/src/lib/iban.ts +0 -251
  702. package/src/lib/ime.ts +0 -24
  703. package/src/lib/intl-cache.ts +0 -27
  704. package/src/lib/iso-day.ts +0 -13
  705. package/src/lib/lazy-with-fallback.ts +0 -82
  706. package/src/lib/logger.ts +0 -69
  707. package/src/lib/minus.ts +0 -50
  708. package/src/lib/path-pattern.ts +0 -55
  709. package/src/lib/person-name.ts +0 -155
  710. package/src/lib/phone.ts +0 -208
  711. package/src/lib/plain-text.ts +0 -22
  712. package/src/lib/presence.ts +0 -18
  713. package/src/lib/qr-encode.ts +0 -444
  714. package/src/lib/quiet-focus.ts +0 -32
  715. package/src/lib/reduced-motion.ts +0 -22
  716. package/src/lib/refs.ts +0 -22
  717. package/src/lib/round.ts +0 -43
  718. package/src/lib/safe-storage.ts +0 -119
  719. package/src/lib/server-wake.ts +0 -315
  720. package/src/lib/session-refresh.ts +0 -472
  721. package/src/lib/share-format.ts +0 -18
  722. package/src/lib/status-tone.ts +0 -43
  723. package/src/lib/strip-fade.ts +0 -287
  724. package/src/lib/table-text.ts +0 -554
  725. package/src/lib/text-case.ts +0 -19
  726. package/src/lib/text-match.ts +0 -169
  727. package/src/lib/thenable.ts +0 -19
  728. package/src/lib/translation-review.ts +0 -769
  729. package/src/notifications/device-zone-report.ts +0 -67
  730. package/src/notifications/feedback-notification-types-labels.ts +0 -33
  731. package/src/notifications/feedback-notification-types.ts +0 -71
  732. package/src/notifications/notification-bell.tsx +0 -119
  733. package/src/notifications/notification-inbox.tsx +0 -309
  734. package/src/notifications/notification-parts.tsx +0 -81
  735. package/src/notifications/notification-types-setting.tsx +0 -406
  736. package/src/notifications/notification-types.ts +0 -89
  737. package/src/notifications/notifications-labels.ts +0 -287
  738. package/src/notifications/push-device-setting.tsx +0 -230
  739. package/src/notifications/push-devices-setting.tsx +0 -374
  740. package/src/notifications/push-worker.ts +0 -168
  741. package/src/notifications/quiet-hours-setting.tsx +0 -238
  742. package/src/notifications/unsubscribe-panel.tsx +0 -200
  743. package/src/notifications/use-push-device.ts +0 -448
  744. package/src/offline/local-first.ts +0 -100
  745. package/src/offline/pwa-update-prompt-labels.ts +0 -9
  746. package/src/offline/pwa-update-prompt.tsx +0 -78
  747. package/src/offline/query-persistence.ts +0 -391
  748. package/src/offline/service-worker-updates.ts +0 -81
  749. package/src/offline/shared-computer-labels.ts +0 -8
  750. package/src/offline/shared-computer.tsx +0 -87
  751. package/src/offline/sign-out-pending-dialog-labels.ts +0 -21
  752. package/src/offline/sign-out-pending-dialog.tsx +0 -135
  753. package/src/offline.ts +0 -37
  754. package/src/push-worker.ts +0 -25
  755. package/src/rhf/fields.tsx +0 -2187
  756. package/src/rhf/form-core.tsx +0 -324
  757. package/src/rhf/form.tsx +0 -12
  758. package/src/rhf/line-items.tsx +0 -135
  759. package/src/rhf/use-rhf-wizard-step.ts +0 -104
  760. package/src/rhf.ts +0 -21
  761. package/src/search/command-palette-labels.ts +0 -16
  762. package/src/search/command-palette.tsx +0 -624
  763. package/src/search/global-search-labels.ts +0 -13
  764. package/src/search/global-search.tsx +0 -660
  765. package/src/search/search-index.ts +0 -283
  766. package/src/search/use-command-key.ts +0 -23
  767. package/src/search.ts +0 -14
  768. package/src/settings/device-reset-setting-labels.ts +0 -20
  769. package/src/settings/device-reset-setting.tsx +0 -116
  770. package/src/settings/settings-card-classes.ts +0 -11
  771. package/src/settings/settings-catalogue.ts +0 -150
  772. package/src/settings/settings-context.ts +0 -33
  773. package/src/settings/settings-heading.tsx +0 -67
  774. package/src/settings/settings-labels.ts +0 -87
  775. package/src/settings/settings-layout.tsx +0 -471
  776. package/src/settings/settings-section.tsx +0 -108
  777. package/src/settings/use-account-appearance.ts +0 -148
  778. package/src/settings/use-account-language.ts +0 -146
  779. package/src/settings/use-settings-focus.ts +0 -128
  780. package/src/settings/use-settings-route.ts +0 -258
  781. package/src/shell/account-menu-language.tsx +0 -130
  782. package/src/shell/account-menu-text-size.tsx +0 -80
  783. package/src/shell/admin-menu.tsx +0 -183
  784. package/src/shell/app-shell-labels.ts +0 -11
  785. package/src/shell/app-shell.tsx +0 -1560
  786. package/src/shell/auth-layout.tsx +0 -186
  787. package/src/shell/company-switcher-labels.ts +0 -13
  788. package/src/shell/company-switcher.tsx +0 -136
  789. package/src/shell/dev-menu.tsx +0 -257
  790. package/src/shell/fill-height.tsx +0 -45
  791. package/src/shell/language-code.ts +0 -5
  792. package/src/shell/option-switcher-menu.tsx +0 -84
  793. package/src/shell/sync-status-indicator.tsx +0 -303
  794. package/src/shell/top-bar-actions.tsx +0 -87
  795. package/src/shell/top-bar-brand.tsx +0 -78
  796. package/src/shell/top-bar-parts-labels.ts +0 -148
  797. package/src/shell/top-bar.tsx +0 -40
  798. package/src/shell/topbar-action-menu.tsx +0 -567
  799. package/src/shell/topbar-controls.tsx +0 -269
  800. package/src/shell/tour-menu.tsx +0 -187
  801. package/src/shell.ts +0 -108
  802. package/src/sync/db.ts +0 -129
  803. package/src/sync/engine.ts +0 -1011
  804. package/src/sync/hooks.ts +0 -98
  805. package/src/sync/testing.ts +0 -73
  806. package/src/sync/wire.ts +0 -61
  807. package/src/sync.ts +0 -37
  808. package/src/table-text.ts +0 -8
  809. package/src/testing/css-variables.generated.ts +0 -112
  810. package/src/testing/css-variables.ts +0 -189
  811. package/src/testing/index.ts +0 -29
  812. package/src/testing/react.ts +0 -58
  813. package/src/testing/tour.ts +0 -41
  814. package/src/testing/viewport.ts +0 -357
  815. package/src/theme/chart-palette.ts +0 -232
  816. package/src/theme/color.ts +0 -272
  817. package/src/theme/contrast-tokens.ts +0 -268
  818. package/src/theme/contrast.ts +0 -250
  819. package/src/theme/palette-derive.ts +0 -825
  820. package/src/theme/palette-presets.ts +0 -544
  821. package/src/theme/palette-store.ts +0 -108
  822. package/src/theme/text-size.ts +0 -289
  823. package/src/theme/theme-store.ts +0 -157
  824. package/src/tour/tour-catalogue-labels.ts +0 -75
  825. package/src/tour/tour-catalogue.tsx +0 -335
  826. package/src/tour/tour-dock.ts +0 -134
  827. package/src/tour/tour-engine.ts +0 -37
  828. package/src/tour/tour-gates.ts +0 -218
  829. package/src/tour/tour-guide-button.tsx +0 -64
  830. package/src/tour/tour-guide-labels.ts +0 -15
  831. package/src/tour/tour-info.ts +0 -144
  832. package/src/tour/tour-labels.ts +0 -23
  833. package/src/tour/tour-overlay.tsx +0 -1170
  834. package/src/tour/tour.tsx +0 -750
  835. package/src/tour/use-tour-progress.ts +0 -671
  836. package/src/tour/use-tour-url-sync.ts +0 -266
  837. package/src/tour.ts +0 -21
  838. package/src/vite-env.d.ts +0 -23
  839. package/src/wizard/stepper-nav.tsx +0 -360
  840. package/src/wizard/types.ts +0 -275
  841. package/src/wizard/use-wizard.ts +0 -560
  842. package/src/wizard/validation.ts +0 -39
  843. package/src/wizard/wizard-context.tsx +0 -74
  844. package/src/wizard/wizard-labels.ts +0 -29
  845. package/src/wizard/wizard-step.tsx +0 -76
  846. package/src/wizard/wizard-summary.tsx +0 -84
  847. package/src/wizard.ts +0 -15
@@ -1,114 +0,0 @@
1
- import { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from "react";
2
-
3
- /**
4
- * A value that follows `value`, but only once it has stopped changing for `ms`.
5
- *
6
- * kastlan asked for the pair in this module because each of its search boxes carried
7
- * its own copy of the same six lines — a `useEffect` with a `setTimeout` — and two of
8
- * them forgot the cleanup, so a stale query landed AFTER the fresh one and replaced
9
- * its results. The cleanup is the whole point of having one implementation.
10
- *
11
- * The first render returns `value` itself, not `undefined`: a list filtered by the
12
- * debounced query must render its initial state immediately, not after `ms`.
13
- *
14
- * **It re-arms when `value`'s IDENTITY changes** (an effect on `[value, ms]`), not its
15
- * content. Pass a primitive — the typed query, a JSON string — or a value whose
16
- * identity is stable (state, a `useMemo`). An object or array built in render is a new
17
- * one every render, so the timer is re-armed on every render and the value never
18
- * settles — or, when the debounced value feeds the render that built it, settles,
19
- * renders, builds another and fires again, every `ms`, with nobody typing
20
- * (Kurvenschmiede's control page, KS U9). Debounce `JSON.stringify(body)`, or a key that
21
- * changes exactly when the content does, and build the object from that.
22
- */
23
- export function useDebounce<T>(value: T, ms: number): T {
24
- const [debounced, setDebounced] = useState(value);
25
- useEffect(() => {
26
- const timer = setTimeout(() => setDebounced(value), ms);
27
- return () => clearTimeout(timer);
28
- }, [value, ms]);
29
- return debounced;
30
- }
31
-
32
- export interface DebouncedCallbackOptions {
33
- /**
34
- * The longest a call may be held back, however often it is re-triggered. Without
35
- * it a user who never stops typing never saves; with it, a draft autosave still
36
- * lands every `maxWait` ms while the typing goes on.
37
- */
38
- maxWait?: number;
39
- }
40
-
41
- /** The debounced function, plus the two escapes a caller needs around it. */
42
- export type DebouncedFunction<A extends unknown[]> = ((...args: A) => void) & {
43
- /** Drop the pending call, if there is one. */
44
- cancel: () => void;
45
- /** Run the pending call now, if there is one — e.g. on blur or before navigating
46
- * away, so the last keystrokes of a form are not lost. */
47
- flush: () => void;
48
- /** Whether a call is waiting. */
49
- pending: () => boolean;
50
- };
51
-
52
- /**
53
- * `fn`, called only once calls have stopped arriving for `ms` — with the arguments
54
- * of the LAST call.
55
- *
56
- * The returned function keeps its identity across renders (so it can sit in an
57
- * effect's dependency list or be handed to a memoised child) and always calls the
58
- * LATEST `fn`, so a handler that closes over current state never runs a stale copy.
59
- * A pending call is cancelled on unmount: a debounced save firing into an unmounted
60
- * form is the bug kastlan reported, not a feature.
61
- */
62
- export function useDebouncedCallback<A extends unknown[]>(
63
- fn: (...args: A) => void,
64
- ms: number,
65
- { maxWait }: DebouncedCallbackOptions = {},
66
- ): DebouncedFunction<A> {
67
- const fnRef = useRef(fn);
68
- // Layout effect, not render-time assignment: a ref written during render is a
69
- // side effect React may replay or discard. Nothing can call the debounced function
70
- // between this commit and the layout effect, so it is never one render behind.
71
- useLayoutEffect(() => {
72
- fnRef.current = fn;
73
- });
74
-
75
- const timer = useRef<ReturnType<typeof setTimeout> | null>(null);
76
- const maxTimer = useRef<ReturnType<typeof setTimeout> | null>(null);
77
- const lastArgs = useRef<A | null>(null);
78
-
79
- const clear = useCallback(() => {
80
- if (timer.current) clearTimeout(timer.current);
81
- if (maxTimer.current) clearTimeout(maxTimer.current);
82
- timer.current = null;
83
- maxTimer.current = null;
84
- }, []);
85
-
86
- const invoke = useCallback(() => {
87
- const args = lastArgs.current;
88
- clear();
89
- lastArgs.current = null;
90
- if (args) fnRef.current(...args);
91
- }, [clear]);
92
-
93
- useEffect(() => clear, [clear]);
94
-
95
- return useMemo(() => {
96
- const debounced = ((...args: A) => {
97
- lastArgs.current = args;
98
- if (timer.current) clearTimeout(timer.current);
99
- timer.current = setTimeout(invoke, ms);
100
- if (maxWait !== undefined && !maxTimer.current) {
101
- maxTimer.current = setTimeout(invoke, maxWait);
102
- }
103
- }) as DebouncedFunction<A>;
104
- debounced.cancel = () => {
105
- clear();
106
- lastArgs.current = null;
107
- };
108
- debounced.flush = () => {
109
- if (lastArgs.current) invoke();
110
- };
111
- debounced.pending = () => lastArgs.current !== null;
112
- return debounced;
113
- }, [ms, maxWait, invoke, clear]);
114
- }
@@ -1,371 +0,0 @@
1
- import { useCallback, useEffect, useRef, useSyncExternalStore } from "react";
2
- import type { KeyboardEvent as ReactKeyboardEvent, RefObject } from "react";
3
- import { isComposing } from "../lib/ime";
4
-
5
- /*
6
- * # One Escape stack (round 0.34 Wave 2, DUP-1)
7
- *
8
- * Escape closes the TOPMOST thing on screen, and only that: a list open in a dialog
9
- * closes and the dialog stays; the next press closes the dialog.
10
- *
11
- * "Who owns Escape" used to be decided five ways. The anchored pickers listened on the
12
- * document; Modal, FullBleedDialog, PickerSheet and Popover closed in their own panel's
13
- * `onKeyDown` and stopped the key; CommandPalette closed without stopping it. A dialog's
14
- * handler sits earlier on the key's path than any document listener, so Escape in an
15
- * open list inside a Modal closed the MODAL and threw the form away (BUG-1, sev 4,
16
- * kastlan's lease dialog), and HoverMenu, the numpad and a tooltip could not be
17
- * dismissed inside a dialog at all. And Modal and FullBleedDialog disagreed on when a
18
- * child had "claimed" the key: a ChipInput clearing its draft kept a Modal open and
19
- * closed a FullBleedDialog.
20
- *
21
- * Now every overlay and picker pushes a layer while it is open ({@link useDismissLayer}),
22
- * last in, first out, the way `use-overlay-history` stacks the Back gesture. One
23
- * capture-phase listener on the document notes which layer is on top as each Escape
24
- * goes down — before any handler on the page runs, so a layer that closes on the way
25
- * cannot pass the key on to the one beneath it. That layer, and only that one, is
26
- * handed the key:
27
- *
28
- * - at the first layer element the key passes on its way back up ({@link takeEscape},
29
- * which Modal's panel, a picker's search box and the rest call from their
30
- * `onKeyDown`). The key is stopped there, so nothing around the layers — a
31
- * FloatingPanel, an app's own panel — closes with it;
32
- * - or, when focus is in none of them (a hover menu, a tooltip, the numpad over its
33
- * field, a press on the page), at the document once the key has been everywhere else.
34
- *
35
- * Layers stack in the order they OPEN, which is the order their effects run. Two that
36
- * open in the same commit stack child first — the one case that order gets wrong, and
37
- * one no overlay in the kit does: each opens on a press, after whatever it sits in.
38
- *
39
- * ## Claiming the key: one rule
40
- *
41
- * An Escape that means "undo this step" is not a dismissal: ChipInput clearing its
42
- * draft, InlineEditField cancelling its edit, the date picker's month grid going back to
43
- * the days. Those call {@link claimEscape}, and no layer is handed the key. The only
44
- * other claim is the layer owner's OWN handler — a dialog's `onKeyDown` prop calling
45
- * `preventDefault()` on Escape (Kurvenschmiede's gear wizard asking first), through
46
- * {@link runOwnKeyDown}. A dialog holding itself open while its request runs passes
47
- * Modal's `busy` instead (0.51.7, DUP-3), which holds the backdrop and Back as well. A `preventDefault()`
48
- * anywhere else claims nothing: a search box keeping Chromium from clearing itself
49
- * must not hold a dialog open (FullBleedDialog's 0.8.0 fix, which Modal never had).
50
- *
51
- * The owner's handler hears Escape only while its own layer is on top (0.35, KS). It
52
- * runs before the stack is asked, so with a tooltip, a hover menu or a list open over
53
- * the dialog and focus on the panel, the gear wizard asked "Discard this gear?" and the
54
- * tooltip stayed. Now the layer above takes that press, and the next one is the
55
- * owner's. Every other key reaches the handler as before.
56
- *
57
- * A handler that STOPS the key before it reaches a layer element has taken it too —
58
- * that is the DOM, and it is what the kit's cell editors and confirm buttons do.
59
- */
60
-
61
- /** A layer's handler, read through a ref so the stack holds one stable entry per open. */
62
- interface Layer {
63
- escape: (e: KeyboardEvent) => void;
64
- /** Whether it covers the page — a dialog, a sheet, a popover, a list — rather than
65
- * annotating it (a tooltip). Counted by {@link useOverlayOpen}. */
66
- overlay: boolean;
67
- }
68
-
69
- /** What {@link useDismissLayer} hands back: its layer while open, for
70
- * {@link runOwnKeyDown} to tell whether that layer is the one on top. */
71
- export type DismissLayer = RefObject<Layer | null>;
72
-
73
- /** Open layers, oldest first. Module-level, because the order is ACROSS instances. */
74
- const layers: Layer[] = [];
75
-
76
- /** Escapes a claimant has taken — see {@link claimEscape}. Weak: an event is garbage
77
- * once its dispatch is over. */
78
- const claimed = new WeakSet<Event>();
79
-
80
- /** The Escape on its way through the page: the layer that was topmost as it went down,
81
- * and whether that layer has been handed it yet. */
82
- let inFlight: { event: KeyboardEvent; layer: Layer; done: boolean } | null = null;
83
-
84
- function nativeOf(e: KeyboardEvent | ReactKeyboardEvent): KeyboardEvent {
85
- return "nativeEvent" in e ? e.nativeEvent : e;
86
- }
87
-
88
- function onCapture(e: KeyboardEvent): void {
89
- if (e.key !== "Escape") return;
90
- // An Escape inside an IME composition cancels the composition and nothing else.
91
- const top = isComposing(e) ? undefined : layers[layers.length - 1];
92
- inFlight = top ? { event: e, layer: top, done: false } : null;
93
- }
94
-
95
- /** The fallback: no layer element was on the key's path, or none took it. */
96
- function onBubble(e: KeyboardEvent): void {
97
- handOver(e, false);
98
- }
99
-
100
- function handOver(e: KeyboardEvent | ReactKeyboardEvent, stop: boolean): boolean {
101
- const native = nativeOf(e);
102
- const flight = inFlight;
103
- if (native.key !== "Escape" || !flight || flight.event !== native || flight.done) return false;
104
- if (claimed.has(native)) return false;
105
- flight.done = true;
106
- // Consumed: a type="search" box does not clear itself as well, and a handler further
107
- // out that checks `defaultPrevented` (FloatingPanel, an app's own panel) leaves it.
108
- e.preventDefault();
109
- if (stop) e.stopPropagation();
110
- // A layer that closed on the way, by a handler of its own, has had its Escape.
111
- if (layers.includes(flight.layer)) flight.layer.escape(native);
112
- return true;
113
- }
114
-
115
- function push(layer: Layer): void {
116
- if (layers.length === 0) {
117
- document.addEventListener("keydown", onCapture, true);
118
- document.addEventListener("keydown", onBubble);
119
- }
120
- layers.push(layer);
121
- if (layer.overlay) notifyOverlays();
122
- }
123
-
124
- function pop(layer: Layer): void {
125
- const at = layers.indexOf(layer);
126
- if (at >= 0) layers.splice(at, 1);
127
- if (at >= 0 && layer.overlay) notifyOverlays();
128
- if (layers.length > 0) return;
129
- document.removeEventListener("keydown", onCapture, true);
130
- document.removeEventListener("keydown", onBubble);
131
- inFlight = null;
132
- }
133
-
134
- /**
135
- * An Escape layer on the stack while `open`: the topmost layer is handed the next
136
- * Escape and calls `onEscape`, every layer under it waits its turn. A list opened inside
137
- * a dialog is above the dialog; a popover opened from a list, above the list.
138
- *
139
- * Where focus can be INSIDE the layer, its element's `onKeyDown` calls
140
- * {@link takeEscape} too, so the key stops there — see the module note. `onEscape` is
141
- * read live, so it need not be memoised; the layer is pushed and popped only when
142
- * `open` flips. The layer it returns is for the owner's {@link runOwnKeyDown}.
143
- */
144
- export function useDismissLayer(
145
- open: boolean,
146
- onEscape: (e: KeyboardEvent) => void,
147
- { overlay = true }: { overlay?: boolean } = {},
148
- ): DismissLayer {
149
- const handlerRef = useRef(onEscape);
150
- const layerRef = useRef<Layer | null>(null);
151
- // Written in an effect, not during render, so it satisfies react-hooks/refs: a
152
- // render that React starts and then discards — a transition, a Suspense retry —
153
- // would otherwise leave this holding a handler from a tree that never committed,
154
- // and the stack would go on to call it. Keydown events fire after the commit, so
155
- // the ref is always current by the time one arrives.
156
- useEffect(() => {
157
- handlerRef.current = onEscape;
158
- });
159
- useEffect(() => {
160
- if (!open || typeof document === "undefined") return;
161
- const layer: Layer = { escape: (e) => handlerRef.current(e), overlay };
162
- layerRef.current = layer;
163
- push(layer);
164
- return () => {
165
- pop(layer);
166
- layerRef.current = null;
167
- };
168
- }, [open, overlay]);
169
- return layerRef;
170
- }
171
-
172
- /*
173
- * Whether an overlay is open (0.49 KIT-11): every layer on the stack but a tooltip's is a
174
- * dialog, a sheet, a popover, a hover menu or a list covering part of the page, so the
175
- * stack is also the one place that knows. The floating launchers (`hideWhenOverlay`) step
176
- * aside while one is open instead of floating over it or beside it.
177
- */
178
- const overlayListeners = new Set<() => void>();
179
-
180
- function notifyOverlays(): void {
181
- for (const listener of overlayListeners) listener();
182
- }
183
-
184
- function subscribeOverlays(listener: () => void): () => void {
185
- overlayListeners.add(listener);
186
- return () => {
187
- overlayListeners.delete(listener);
188
- };
189
- }
190
-
191
- function anyOverlayOpen(): boolean {
192
- return layers.some((layer) => layer.overlay);
193
- }
194
-
195
- /** True while a kit dialog, sheet, popover, hover menu or list is open (any layer of the
196
- * Escape stack but a tooltip's). Internal. */
197
- export function useOverlayOpen(enabled = true): boolean {
198
- const open = useSyncExternalStore(subscribeOverlays, anyOverlayOpen, () => false);
199
- return enabled && open;
200
- }
201
-
202
- /**
203
- * For a layer's own element, in its `onKeyDown`: hands an Escape on its way up to the
204
- * topmost layer — this one, unless something opened over it without taking focus (a
205
- * tooltip, the numpad) — and stops it here. True when it did; false for any other key,
206
- * a claimed Escape, or one already handed over.
207
- */
208
- export function takeEscape(e: KeyboardEvent | ReactKeyboardEvent): boolean {
209
- return handOver(e, true);
210
- }
211
-
212
- /**
213
- * For an Escape that means "undo this step", not "close": the key is the caller's, and
214
- * no layer is handed it. `preventDefault()`s it as well, so a handler further out that
215
- * checks `defaultPrevented` leaves it alone, as before.
216
- */
217
- export function claimEscape(e: KeyboardEvent | ReactKeyboardEvent): void {
218
- claimed.add(nativeOf(e));
219
- e.preventDefault();
220
- }
221
-
222
- /**
223
- * Runs a layer owner's own key handler — a dialog's `onKeyDown` prop — and turns a
224
- * `preventDefault()` it makes on Escape into a claim: the one way, beside
225
- * {@link claimEscape}, to keep a layer open.
226
- *
227
- * Given the owner's `layer` (what {@link useDismissLayer} returned), an Escape that went
228
- * down while another layer was above that one skips the handler: the press is the
229
- * layer's on top, and the owner hears the next (0.35, KS). Without it, or while the
230
- * owner's layer is not open, the handler sees every key, as before.
231
- */
232
- export function runOwnKeyDown<E extends ReactKeyboardEvent>(
233
- e: E,
234
- handler: ((e: E) => void) | undefined,
235
- layer?: DismissLayer,
236
- ): void {
237
- if (!handler) return;
238
- if (layer && aboveOwner(e, layer.current)) return;
239
- const before = e.defaultPrevented;
240
- handler(e);
241
- if (e.key === "Escape" && !before && e.defaultPrevented) claimed.add(nativeOf(e));
242
- }
243
-
244
- /** Whether this Escape went down with a layer above `owner` — the topmost one then was
245
- * another, and `owner` is on the stack. An Escape the stack did not note (one inside an
246
- * IME composition) is nobody else's. */
247
- function aboveOwner(e: ReactKeyboardEvent, owner: Layer | null): boolean {
248
- const flight = inFlight;
249
- if (e.key !== "Escape" || !owner || !flight || flight.event !== nativeOf(e)) return false;
250
- return flight.layer !== owner && layers.includes(owner);
251
- }
252
-
253
- /**
254
- * Calls `handler` on an Escape while `enabled` — as an Escape layer. Since 0.34 this is
255
- * {@link useDismissLayer} with its arguments the other way round: it hears the key only
256
- * while nothing opened above it, and inside a dialog it no longer loses the key to the
257
- * dialog (Wave 2, DUP-1). `handler` is read live, so it need not be memoised.
258
- */
259
- export function useEscapeKey(handler: () => void, enabled = true): void {
260
- useDismissLayer(enabled, handler);
261
- }
262
-
263
- /** Called with each native press an owner's React tree saw — see {@link useOutsideClick}. */
264
- type PressMark = (press: Event) => void;
265
-
266
- /** The outside-click hooks watching each ref, for {@link pressInside}. */
267
- const watchers = new WeakMap<RefObject<HTMLElement | null>, Set<PressMark>>();
268
-
269
- /** What an `onPointerDownCapture` hands over: a React event, its press inside. */
270
- type ReactPress = { nativeEvent: Event };
271
-
272
- /**
273
- * An `onPointerDownCapture` for a panel whose `ref` an outside-click hook watches but
274
- * whose element the hook's owner does not render — {@link DropdownPanel} and
275
- * `ComboboxPanel` take `panelRef` from `useDropdown` / `useComboboxCore`. Every press
276
- * that reaches the panel through the React tree, a portalled list opened inside it
277
- * included, is marked inside for each hook watching `ref`. See {@link useOutsideClick}.
278
- */
279
- export function pressInside(ref: RefObject<HTMLElement | null> | undefined): ((e: ReactPress) => void) | undefined {
280
- if (!ref) return undefined;
281
- return (e) => {
282
- watchers.get(ref)?.forEach((mark) => mark(e.nativeEvent));
283
- };
284
- }
285
-
286
- /**
287
- * Calls `handler` on a press that lands outside every supplied element, while
288
- * `enabled` — the outside-click-to-close half of the same dismissal story. Pass one
289
- * ref or several (trigger + panel); a press inside any of them is ignored. Refs and
290
- * `handler` are read live, so an inline `[triggerRef, panelRef]` array is fine and
291
- * won't churn the listener.
292
- *
293
- * ## A panel opened from inside is inside (0.48, keksdose dev#623)
294
- *
295
- * A CurrencySelect in a Popover: the currency list is portalled to `<body>`, so in the
296
- * DOM it is outside the popover's panel, and the first press on a currency closed the
297
- * POPOVER at pointerdown — the list went with it and the choice never landed. The same
298
- * for a combobox, a menu, a date picker's popover, a dropdown, at any depth.
299
- *
300
- * In the React tree the portal is still where it was opened from, and React passes a
301
- * press up that tree, through portals. So the hook hands back an
302
- * `onPointerDownCapture`: put it on the element the press should count as inside of —
303
- * the kit's Popover panel, HoverMenu, DropdownPanel and ComboboxPanel do — and every
304
- * press that travels through that element in React, portalled panels opened inside it
305
- * included, is not outside. React's listeners sit on the root and on each portal's
306
- * container, so they hear the press before this document listener does. No owner chain
307
- * to keep: depth is free, and an app's own portal inside a kit panel is covered too. A
308
- * panel the hook's owner does not render takes {@link pressInside} with the watched ref.
309
- *
310
- * **`pointerdown`, not `mousedown`** — one event covering mouse, touch and pen.
311
- * This listened for `mousedown` alone, which on a touch platform is a SYNTHESISED
312
- * event: the browser emits it for most taps, which is why nothing obviously broke,
313
- * but the synthesis is not guaranteed. A tap that begins a scroll, or one that lands
314
- * on an element which preventDefaults the touch sequence, may never produce one — and
315
- * on a phone-first PWA whose pickers, menus and flyouts all dismiss through this hook,
316
- * inheriting that is worse than choosing it.
317
- *
318
- * The one behaviour this changes deliberately: a touch-drag that starts outside an
319
- * open panel now dismisses it at touch-down, where before it did not dismiss at all
320
- * (a drag synthesises no mousedown). That matches every other platform surface, and
321
- * the anchored panels re-measure on scroll precisely because the page moves under
322
- * them.
323
- */
324
- export function useOutsideClick(
325
- refs: RefObject<HTMLElement | null> | RefObject<HTMLElement | null>[],
326
- handler: () => void,
327
- enabled = true,
328
- ): (e: ReactPress) => void {
329
- const refsRef = useRef(refs);
330
- const handlerRef = useRef(handler);
331
- // The last press this owner's React tree saw: the one the document listener is about
332
- // to hear, when it went through a panel the owner marked.
333
- const insideRef = useRef<Event | null>(null);
334
- // In an effect rather than during render — see the note in useDismissLayer.
335
- useEffect(() => {
336
- refsRef.current = refs;
337
- handlerRef.current = handler;
338
- });
339
- const markInside = useCallback((e: ReactPress) => {
340
- insideRef.current = e.nativeEvent;
341
- }, []);
342
- useEffect(() => {
343
- if (!enabled) return;
344
- const mark: PressMark = (press) => {
345
- insideRef.current = press;
346
- };
347
- const watched = Array.isArray(refsRef.current) ? refsRef.current : [refsRef.current];
348
- for (const r of watched) {
349
- const set = watchers.get(r) ?? new Set<PressMark>();
350
- set.add(mark);
351
- watchers.set(r, set);
352
- }
353
- const onPointerDown = (e: Event) => {
354
- const inside = insideRef.current === e;
355
- insideRef.current = null;
356
- if (inside) return;
357
- const target = e.target as Node;
358
- const list = Array.isArray(refsRef.current) ? refsRef.current : [refsRef.current];
359
- for (const r of list) {
360
- if (r.current?.contains(target)) return;
361
- }
362
- handlerRef.current();
363
- };
364
- document.addEventListener("pointerdown", onPointerDown);
365
- return () => {
366
- document.removeEventListener("pointerdown", onPointerDown);
367
- for (const r of watched) watchers.get(r)?.delete(mark);
368
- };
369
- }, [enabled]);
370
- return markInside;
371
- }
@@ -1,33 +0,0 @@
1
- import { useEffect } from "react";
2
- import { useKitDocumentTitle } from "../i18n/kit-labels";
3
- import { DEFAULT_DOCUMENT_TITLE_FORMAT, formatDocumentTitle } from "../lib/document-title";
4
-
5
- /**
6
- * Writes the window's title (`document.title`) while the calling component is mounted,
7
- * and puts back the title it found when it unmounts (0.49 KIT-9).
8
- *
9
- * `parts` are positional: `[page, section, app]`. The app falls back to the provider's
10
- * `appName`, the format to the provider's `documentTitleFormat` (default
11
- * "{page} · {section} · {app}"); a missing part drops with its separator
12
- * ({@link formatDocumentTitle}). Parts that are ALL empty write nothing — the provider's
13
- * app alone is not a page's title.
14
- *
15
- * `PageHeader` calls it for its `h1` (`documentTitle`); call it yourself for a page
16
- * without one.
17
- */
18
- export function useDocumentTitle(parts: ReadonlyArray<string | null | undefined | false>): void {
19
- const { format, appName } = useKitDocumentTitle();
20
- const [page, section, app] = parts.map((p) => (typeof p === "string" && p.trim() !== "" ? p : undefined));
21
- const any = parts.some((p) => typeof p === "string" && p.trim() !== "");
22
- const title = any
23
- ? formatDocumentTitle(format ?? DEFAULT_DOCUMENT_TITLE_FORMAT, { page, section, app: app ?? appName })
24
- : null;
25
- useEffect(() => {
26
- if (title === null || title === "") return;
27
- const before = document.title;
28
- document.title = title;
29
- return () => {
30
- document.title = before;
31
- };
32
- }, [title]);
33
- }
@@ -1,121 +0,0 @@
1
- import { useRef, useState } from "react";
2
- import type { DragEvent, ReactElement } from "react";
3
- import { useFilePicker } from "./use-file-picker";
4
- import type { UseFilePickerOptions } from "./use-file-picker";
5
-
6
- /**
7
- * Turn ANY element into a file drop target — kastlan's ask, for the document list of
8
- * a booking and the rows of its gantt, which are drop targets without being a
9
- * `FileDropzone` (a dashed box with a Browse button inside would be the wrong thing
10
- * to draw over a list).
11
- *
12
- * ```tsx
13
- * const { dropProps, isOver, element } = useFileDrop({ accept: ".pdf", multiple: true,
14
- * maxSize: 10_000_000, onFiles: attach, onReject: ([r]) => setError(r.message) });
15
- * return <>{element}<ul {...dropProps} data-drop-over={isOver || undefined}>…</ul></>;
16
- * ```
17
- *
18
- * The screening is `useFilePicker`'s own — `accept` re-checked (a drop ignores the
19
- * dialog's filter), `maxSize`, `maxFiles`, `isValid`, `onPick` — so a file refused by
20
- * `FileButton` is refused here in the same words. It comes with `open()` as well, so
21
- * the same options can also back a "choose a file" menu item beside the drop target.
22
- */
23
-
24
- /** `useFilePicker`'s options, minus `capture` (a camera does not take drops). */
25
- export type UseFileDropOptions = Omit<UseFilePickerOptions, "capture">;
26
-
27
- /** Spread onto the drop target. Four handlers, nothing else: the element keeps its
28
- * own role, name and focus behaviour. */
29
- export interface FileDropProps<E extends Element = Element> {
30
- onDragEnter: (e: DragEvent<E>) => void;
31
- onDragOver: (e: DragEvent<E>) => void;
32
- onDragLeave: (e: DragEvent<E>) => void;
33
- onDrop: (e: DragEvent<E>) => void;
34
- }
35
-
36
- export interface UseFileDropReturn<E extends Element = Element> {
37
- dropProps: FileDropProps<E>;
38
- /** A FILE drag is over the target (and it is not `disabled`). Style from this. */
39
- isOver: boolean;
40
- /** Open the system picker with the same options — from a click handler only. */
41
- open: () => void;
42
- /** Screen and deliver files that arrived another way (a paste). */
43
- take: (files: ArrayLike<File> | null | undefined) => void;
44
- /** The live region that speaks a refusal (and the picker's hidden input). Render it
45
- * once, anywhere; without it a refusal reaches `onReject` but is not announced. */
46
- element: ReactElement;
47
- }
48
-
49
- /** Whether a drag carries files — a dragged link, text or a row of the page does not,
50
- * and must not light the target up or be swallowed by it. */
51
- export function dragHasFiles(e: DragEvent): boolean {
52
- return Array.from(e.dataTransfer?.types ?? []).includes("Files");
53
- }
54
-
55
- /**
56
- * @internal The drag half on its own, shared with `FileDropzone`.
57
- *
58
- * `dragenter`/`dragleave` fire for every CHILD the pointer crosses: moving from the
59
- * target onto a label inside it is a leave of the target followed by an enter of the
60
- * label, which bubbles. A boolean flipped by each one flickers off and on across
61
- * every child, and `relatedTarget` — the usual fix — is `null` in Safari's drag
62
- * events. So this counts: +1 per enter, -1 per leave, over while above zero, and a
63
- * drop resets it (the drop replaces the leave that would have balanced the enter).
64
- *
65
- * A file drag stops propagating here, so a target nested in another (a row inside a
66
- * page-wide drop area) takes its own drop, and the outer one's count falls back to
67
- * zero while the pointer is over the inner one — only one of them lights up.
68
- */
69
- export function useDragTarget<E extends Element = Element>({
70
- disabled,
71
- onDropFiles,
72
- }: {
73
- disabled?: boolean;
74
- onDropFiles: (files: FileList | File[]) => void;
75
- }): { dropProps: FileDropProps<E>; isOver: boolean } {
76
- const depth = useRef(0);
77
- const [over, setOver] = useState(false);
78
-
79
- const dropProps: FileDropProps<E> = {
80
- onDragEnter: (e) => {
81
- if (!dragHasFiles(e)) return;
82
- e.stopPropagation();
83
- e.preventDefault();
84
- depth.current += 1;
85
- if (!disabled) setOver(true);
86
- },
87
- onDragOver: (e) => {
88
- if (!dragHasFiles(e)) return;
89
- e.stopPropagation();
90
- // Always cancelled for a file drag, disabled or not: an uncancelled drop makes
91
- // the browser NAVIGATE to the file, which loses the page.
92
- e.preventDefault();
93
- e.dataTransfer.dropEffect = disabled ? "none" : "copy";
94
- },
95
- onDragLeave: (e) => {
96
- if (!dragHasFiles(e)) return;
97
- e.stopPropagation();
98
- depth.current = Math.max(0, depth.current - 1);
99
- if (depth.current === 0) setOver(false);
100
- },
101
- onDrop: (e) => {
102
- if (!dragHasFiles(e)) return;
103
- e.stopPropagation();
104
- e.preventDefault();
105
- depth.current = 0;
106
- setOver(false);
107
- if (!disabled) onDropFiles(e.dataTransfer.files);
108
- },
109
- };
110
-
111
- return { dropProps, isOver: over && !disabled };
112
- }
113
-
114
- export function useFileDrop<E extends Element = Element>(options: UseFileDropOptions): UseFileDropReturn<E> {
115
- const picker = useFilePicker(options);
116
- const { dropProps, isOver } = useDragTarget<E>({
117
- disabled: options.disabled,
118
- onDropFiles: picker.take,
119
- });
120
- return { dropProps, isOver, open: picker.open, take: picker.take, element: picker.element };
121
- }
@@ -1,28 +0,0 @@
1
- // The English words of the file pickers (./use-file-picker), in a module with no component
2
- // code: the English catalogue (src/i18n/defaults.ts) imports them without the component, so
3
- // `en` loads as one chunk like the other languages (0.34, KS U8). In hooks/ beside the hook
4
- // since 0.34 (MOD-8); components/file-button re-exports them.
5
-
6
- import type { FilePickerLabels } from "./use-file-picker";
7
-
8
- export const DEFAULT_FILE_PICKER_LABELS: FilePickerLabels = {
9
- rejectedType: (name) => `“${name}” is not a supported file type`,
10
- rejectedTypeOnly: (accept) => `Only ${accept} files`,
11
- rejectedSize: (name, maxSize) => `“${name}” is larger than ${maxSize}`,
12
- rejectedCount: (name, maxFiles) =>
13
- `“${name}” was not added: at most ${maxFiles} ${maxFiles === 1 ? "file" : "files"}`,
14
- rejectedInvalid: (name) => `“${name}” cannot be used here`,
15
- rejectedMany: (count) => `${count} files were not added`,
16
- rejectedPick: (count) => (count === 1 ? "The file was not added" : `None of the ${count} files were added`),
17
- selected: (count, firstName) => (count === 1 ? `“${firstName}” selected` : `${count} files selected`),
18
- remove: (name) => `Remove “${name}”`,
19
- clearAll: "Remove all files",
20
- removed: (name) => `“${name}” removed`,
21
- cleared: "All files removed",
22
- dropzone: "File upload",
23
- browse: "Browse",
24
- empty: "Drop a file here",
25
- emptyMultiple: "Drop files here",
26
- hint: (accept) => (accept ? `Accepted: ${accept}` : "Any file type"),
27
- busy: "Uploading…",
28
- };