@eifi1/ui-kit 0.53.0 → 0.55.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (902) hide show
  1. package/README.md +96 -82
  2. package/dist/account/delete-account-setting.d.ts +3 -2
  3. package/dist/account/delete-account-setting.js.map +1 -1
  4. package/dist/admin/plan-change.js +2 -2
  5. package/dist/admin/plan-change.js.map +1 -1
  6. package/dist/admin/user-roster.d.ts +6 -0
  7. package/dist/admin/user-roster.js +4 -0
  8. package/dist/admin/user-roster.js.map +1 -1
  9. package/dist/auth/auth-errors.d.ts +36 -0
  10. package/dist/auth/auth-errors.js +20 -0
  11. package/dist/auth/auth-errors.js.map +1 -1
  12. package/dist/billing/billing-labels.d.ts +26 -0
  13. package/dist/billing/billing-labels.js +9 -0
  14. package/dist/billing/billing-labels.js.map +1 -1
  15. package/dist/billing/subscription-standing.d.ts +61 -0
  16. package/dist/billing/subscription-standing.js +51 -0
  17. package/dist/billing/subscription-standing.js.map +1 -0
  18. package/dist/billing/usage-meter.d.ts +52 -0
  19. package/dist/billing/usage-meter.js +52 -0
  20. package/dist/billing/usage-meter.js.map +1 -0
  21. package/dist/chart.d.ts +1 -0
  22. package/dist/chart.js +4 -0
  23. package/dist/chart.js.map +1 -1
  24. package/dist/components/alert-banner.js +2 -3
  25. package/dist/components/alert-banner.js.map +1 -1
  26. package/dist/components/amount-input.d.ts +2 -1
  27. package/dist/components/amount-input.js +3 -15
  28. package/dist/components/amount-input.js.map +1 -1
  29. package/dist/components/autocomplete.js +2 -2
  30. package/dist/components/autocomplete.js.map +1 -1
  31. package/dist/components/bulk-action-bar.js +2 -1
  32. package/dist/components/bulk-action-bar.js.map +1 -1
  33. package/dist/components/button.d.ts +35 -1
  34. package/dist/components/button.js +5 -9
  35. package/dist/components/button.js.map +1 -1
  36. package/dist/components/calendar-heatmap.js +6 -4
  37. package/dist/components/calendar-heatmap.js.map +1 -1
  38. package/dist/components/camera-button.d.ts +89 -0
  39. package/dist/components/camera-button.js +122 -0
  40. package/dist/components/camera-button.js.map +1 -0
  41. package/dist/components/camera-capture.d.ts +66 -0
  42. package/dist/components/camera-capture.js +190 -0
  43. package/dist/components/camera-capture.js.map +1 -0
  44. package/dist/components/camera-labels.d.ts +20 -0
  45. package/dist/components/camera-labels.js +15 -0
  46. package/dist/components/camera-labels.js.map +1 -0
  47. package/dist/components/chart-edge.d.ts +9 -0
  48. package/dist/components/chart-edge.js +14 -3
  49. package/dist/components/chart-edge.js.map +1 -1
  50. package/dist/components/chart-zoom-core.js +34 -29
  51. package/dist/components/chart-zoom-core.js.map +1 -1
  52. package/dist/components/checkbox-group.js +1 -1
  53. package/dist/components/checkbox-group.js.map +1 -1
  54. package/dist/components/combobox-core.js +3 -2
  55. package/dist/components/combobox-core.js.map +1 -1
  56. package/dist/components/combobox.js +2 -2
  57. package/dist/components/combobox.js.map +1 -1
  58. package/dist/components/consent-again-notice-labels.d.ts +25 -0
  59. package/dist/components/consent-again-notice-labels.js +15 -0
  60. package/dist/components/consent-again-notice-labels.js.map +1 -0
  61. package/dist/components/consent-again-notice.d.ts +85 -0
  62. package/dist/components/consent-again-notice.js +94 -0
  63. package/dist/components/consent-again-notice.js.map +1 -0
  64. package/dist/components/country-select.js +2 -7
  65. package/dist/components/country-select.js.map +1 -1
  66. package/dist/components/currency-option-list.d.ts +2 -1
  67. package/dist/components/currency-option-list.js +10 -3
  68. package/dist/components/currency-option-list.js.map +1 -1
  69. package/dist/components/currency-select.d.ts +3 -1
  70. package/dist/components/currency-select.js +2 -2
  71. package/dist/components/currency-select.js.map +1 -1
  72. package/dist/components/danger-confirm.d.ts +22 -1
  73. package/dist/components/danger-confirm.js +52 -30
  74. package/dist/components/danger-confirm.js.map +1 -1
  75. package/dist/components/data-table-column-settings.js +2 -2
  76. package/dist/components/data-table-column-settings.js.map +1 -1
  77. package/dist/components/data-table-filter-popover.d.ts +2 -1
  78. package/dist/components/data-table-filter-popover.js +3 -2
  79. package/dist/components/data-table-filter-popover.js.map +1 -1
  80. package/dist/components/data-table-filters.d.ts +33 -3
  81. package/dist/components/data-table-filters.js +6 -4
  82. package/dist/components/data-table-filters.js.map +1 -1
  83. package/dist/components/data-table-fit.js.map +1 -1
  84. package/dist/components/data-table-virtual.js +13 -3
  85. package/dist/components/data-table-virtual.js.map +1 -1
  86. package/dist/components/date-field.js +2 -2
  87. package/dist/components/date-field.js.map +1 -1
  88. package/dist/components/date-picker.js +2 -2
  89. package/dist/components/date-picker.js.map +1 -1
  90. package/dist/components/date-range-picker.js +2 -6
  91. package/dist/components/date-range-picker.js.map +1 -1
  92. package/dist/components/dialog-frame.d.ts +5 -1
  93. package/dist/components/dialog-frame.js +6 -2
  94. package/dist/components/dialog-frame.js.map +1 -1
  95. package/dist/components/dropdown.js +7 -3
  96. package/dist/components/dropdown.js.map +1 -1
  97. package/dist/components/entity-combobox.js +2 -2
  98. package/dist/components/entity-combobox.js.map +1 -1
  99. package/dist/components/field-parts.d.ts +108 -6
  100. package/dist/components/field-parts.js +59 -6
  101. package/dist/components/field-parts.js.map +1 -1
  102. package/dist/components/field-suggestion-labels.d.ts +2 -0
  103. package/dist/components/field-suggestion-labels.js +10 -0
  104. package/dist/components/field-suggestion-labels.js.map +1 -0
  105. package/dist/components/field.js +1 -1
  106. package/dist/components/field.js.map +1 -1
  107. package/dist/components/file-button.d.ts +1 -1
  108. package/dist/components/file-button.js.map +1 -1
  109. package/dist/components/floating-panel.d.ts +7 -6
  110. package/dist/components/floating-panel.js +3 -17
  111. package/dist/components/floating-panel.js.map +1 -1
  112. package/dist/components/form-actions.d.ts +3 -2
  113. package/dist/components/form-actions.js.map +1 -1
  114. package/dist/components/hover-menu.js +3 -2
  115. package/dist/components/hover-menu.js.map +1 -1
  116. package/dist/components/icon-button.d.ts +23 -5
  117. package/dist/components/icon-button.js +6 -8
  118. package/dist/components/icon-button.js.map +1 -1
  119. package/dist/components/inline-confirm.js +2 -1
  120. package/dist/components/inline-confirm.js.map +1 -1
  121. package/dist/components/inline-entity-combobox.js +2 -2
  122. package/dist/components/inline-entity-combobox.js.map +1 -1
  123. package/dist/components/input.js +2 -2
  124. package/dist/components/input.js.map +1 -1
  125. package/dist/components/jump-calendar.js +3 -3
  126. package/dist/components/jump-calendar.js.map +1 -1
  127. package/dist/components/legal.d.ts +13 -1
  128. package/dist/components/legal.js +12 -0
  129. package/dist/components/legal.js.map +1 -1
  130. package/dist/components/legended-series-chart.d.ts +80 -0
  131. package/dist/components/legended-series-chart.js +70 -0
  132. package/dist/components/legended-series-chart.js.map +1 -0
  133. package/dist/components/lightbox.js +2 -1
  134. package/dist/components/lightbox.js.map +1 -1
  135. package/dist/components/mini-calendar.js +16 -7
  136. package/dist/components/mini-calendar.js.map +1 -1
  137. package/dist/components/modal.d.ts +48 -0
  138. package/dist/components/modal.js +26 -6
  139. package/dist/components/modal.js.map +1 -1
  140. package/dist/components/month-picker.d.ts +1 -1
  141. package/dist/components/month-picker.js +6 -6
  142. package/dist/components/month-picker.js.map +1 -1
  143. package/dist/components/multi-entity-combobox.js +2 -2
  144. package/dist/components/multi-entity-combobox.js.map +1 -1
  145. package/dist/components/multi-select.js +2 -6
  146. package/dist/components/multi-select.js.map +1 -1
  147. package/dist/components/number-input.js +2 -2
  148. package/dist/components/number-input.js.map +1 -1
  149. package/dist/components/page-header-layout.d.ts +18 -0
  150. package/dist/components/page-header-layout.js +23 -0
  151. package/dist/components/page-header-layout.js.map +1 -0
  152. package/dist/components/page-header-skeleton.d.ts +41 -0
  153. package/dist/components/page-header-skeleton.js +52 -0
  154. package/dist/components/page-header-skeleton.js.map +1 -0
  155. package/dist/components/page-header.js +4 -17
  156. package/dist/components/page-header.js.map +1 -1
  157. package/dist/components/popover.js +7 -2
  158. package/dist/components/popover.js.map +1 -1
  159. package/dist/components/release-notes-labels.d.ts +16 -0
  160. package/dist/components/release-notes-labels.js +18 -0
  161. package/dist/components/release-notes-labels.js.map +1 -0
  162. package/dist/components/release-notes.d.ts +65 -0
  163. package/dist/components/release-notes.js +65 -0
  164. package/dist/components/release-notes.js.map +1 -0
  165. package/dist/components/select.js +2 -2
  166. package/dist/components/select.js.map +1 -1
  167. package/dist/components/series-chart-labels.d.ts +9 -0
  168. package/dist/components/series-chart-labels.js +3 -1
  169. package/dist/components/series-chart-labels.js.map +1 -1
  170. package/dist/components/series-chart.d.ts +5 -0
  171. package/dist/components/series-chart.js +89 -36
  172. package/dist/components/series-chart.js.map +1 -1
  173. package/dist/components/stat-tile.d.ts +21 -2
  174. package/dist/components/stat-tile.js +4 -2
  175. package/dist/components/stat-tile.js.map +1 -1
  176. package/dist/components/toggle-group.js +3 -2
  177. package/dist/components/toggle-group.js.map +1 -1
  178. package/dist/components/treemap-layout.js.map +1 -1
  179. package/dist/components/treemap.d.ts +17 -15
  180. package/dist/components/treemap.js +167 -85
  181. package/dist/components/treemap.js.map +1 -1
  182. package/dist/currencies.d.ts +16 -2
  183. package/dist/currencies.js +2 -1
  184. package/dist/currencies.js.map +1 -1
  185. package/dist/eslint/index.js +1 -1
  186. package/dist/eslint/role-utilities.d.ts +2 -2
  187. package/dist/eslint/role-utilities.js.map +1 -1
  188. package/dist/feedback/feedback-context-labels.js +2 -1
  189. package/dist/feedback/feedback-context-labels.js.map +1 -1
  190. package/dist/feedback/feedback-context.d.ts +19 -3
  191. package/dist/feedback/feedback-context.js +12 -1
  192. package/dist/feedback/feedback-context.js.map +1 -1
  193. package/dist/feedback/feedback-diagnostics.d.ts +17 -0
  194. package/dist/feedback/feedback-diagnostics.js +27 -0
  195. package/dist/feedback/feedback-diagnostics.js.map +1 -0
  196. package/dist/feedback/feedback-dialog.d.ts +10 -0
  197. package/dist/feedback/feedback-dialog.js +6 -4
  198. package/dist/feedback/feedback-dialog.js.map +1 -1
  199. package/dist/feedback/feedback-inbox-page.d.ts +260 -0
  200. package/dist/feedback/feedback-inbox-page.js +207 -0
  201. package/dist/feedback/feedback-inbox-page.js.map +1 -0
  202. package/dist/feedback/feedback-record.d.ts +5 -0
  203. package/dist/feedback/feedback-record.js.map +1 -1
  204. package/dist/feedback/feedback-row-detail-labels.js +1 -0
  205. package/dist/feedback/feedback-row-detail-labels.js.map +1 -1
  206. package/dist/feedback/feedback-row-detail.d.ts +3 -0
  207. package/dist/feedback/feedback-row-detail.js +3 -0
  208. package/dist/feedback/feedback-row-detail.js.map +1 -1
  209. package/dist/feedback/feedback-submit-dialog.d.ts +5 -1
  210. package/dist/feedback/feedback-submit-dialog.js +15 -3
  211. package/dist/feedback/feedback-submit-dialog.js.map +1 -1
  212. package/dist/feedback/feedback-submit.d.ts +30 -2
  213. package/dist/feedback/feedback-submit.js +5 -2
  214. package/dist/feedback/feedback-submit.js.map +1 -1
  215. package/dist/feedback/feedback-vocabulary.js +2 -2
  216. package/dist/feedback/feedback-vocabulary.js.map +1 -1
  217. package/dist/feedback.d.ts +1 -0
  218. package/dist/feedback.js +6 -0
  219. package/dist/feedback.js.map +1 -1
  220. package/dist/hooks/use-debounce.d.ts +32 -5
  221. package/dist/hooks/use-debounce.js +6 -5
  222. package/dist/hooks/use-debounce.js.map +1 -1
  223. package/dist/hooks/use-file-picker.d.ts +3 -1
  224. package/dist/hooks/use-file-picker.js.map +1 -1
  225. package/dist/hooks/use-focus-trap.d.ts +19 -3
  226. package/dist/hooks/use-focus-trap.js +15 -5
  227. package/dist/hooks/use-focus-trap.js.map +1 -1
  228. package/dist/hooks/use-has-camera.d.ts +36 -0
  229. package/dist/hooks/use-has-camera.js +53 -0
  230. package/dist/hooks/use-has-camera.js.map +1 -0
  231. package/dist/hooks/use-hotkey.js +2 -1
  232. package/dist/hooks/use-hotkey.js.map +1 -1
  233. package/dist/hooks/use-overlay-history.d.ts +6 -1
  234. package/dist/hooks/use-overlay-history.js +10 -2
  235. package/dist/hooks/use-overlay-history.js.map +1 -1
  236. package/dist/i18n/defaults.js +11 -1
  237. package/dist/i18n/defaults.js.map +1 -1
  238. package/dist/i18n/german.js +78 -4
  239. package/dist/i18n/german.js.map +1 -1
  240. package/dist/i18n/kit-labels.d.ts +20 -0
  241. package/dist/i18n/kit-labels.js.map +1 -1
  242. package/dist/i18n/locales/en.js +95 -5
  243. package/dist/i18n/locales/en.js.map +3 -3
  244. package/dist/i18n/locales/es.js +74 -4
  245. package/dist/i18n/locales/es.js.map +1 -1
  246. package/dist/i18n/locales/fr.js +75 -3
  247. package/dist/i18n/locales/fr.js.map +1 -1
  248. package/dist/i18n/locales/hu.js +77 -4
  249. package/dist/i18n/locales/hu.js.map +1 -1
  250. package/dist/i18n/locales/it.js +77 -4
  251. package/dist/i18n/locales/it.js.map +1 -1
  252. package/dist/i18n/locales/zh.js +74 -4
  253. package/dist/i18n/locales/zh.js.map +1 -1
  254. package/dist/i18n/review.js +22 -1
  255. package/dist/i18n/review.js.map +1 -1
  256. package/dist/index.d.ts +27 -8
  257. package/dist/index.js +41 -2
  258. package/dist/index.js.map +1 -1
  259. package/dist/landing/landing-labels.d.ts +8 -0
  260. package/dist/landing/landing-labels.js +2 -1
  261. package/dist/landing/landing-labels.js.map +1 -1
  262. package/dist/lib/changelog.d.ts +130 -0
  263. package/dist/lib/changelog.js +137 -0
  264. package/dist/lib/changelog.js.map +1 -0
  265. package/dist/lib/clipboard-minus.js +2 -2
  266. package/dist/lib/clipboard-minus.js.map +1 -1
  267. package/dist/lib/dates.d.ts +36 -4
  268. package/dist/lib/dates.js +49 -13
  269. package/dist/lib/dates.js.map +1 -1
  270. package/dist/lib/editable-content.d.ts +33 -0
  271. package/dist/lib/editable-content.js +15 -0
  272. package/dist/lib/editable-content.js.map +1 -0
  273. package/dist/lib/focus-left.d.ts +47 -1
  274. package/dist/lib/focus-left.js +11 -2
  275. package/dist/lib/focus-left.js.map +1 -1
  276. package/dist/lib/format.d.ts +37 -2
  277. package/dist/lib/format.js +25 -1
  278. package/dist/lib/format.js.map +1 -1
  279. package/dist/lib/intl-cache.d.ts +4 -2
  280. package/dist/lib/intl-cache.js.map +1 -1
  281. package/dist/lib/server-wake.d.ts +49 -9
  282. package/dist/lib/server-wake.js +25 -14
  283. package/dist/lib/server-wake.js.map +1 -1
  284. package/dist/lib/session-refresh.d.ts +53 -0
  285. package/dist/lib/session-refresh.js +27 -1
  286. package/dist/lib/session-refresh.js.map +1 -1
  287. package/dist/lib/translation-review.d.ts +26 -0
  288. package/dist/lib/translation-review.js +14 -0
  289. package/dist/lib/translation-review.js.map +1 -1
  290. package/dist/rhf/fields.js +3 -3
  291. package/dist/rhf/fields.js.map +1 -1
  292. package/dist/shell/app-shell.d.ts +25 -1
  293. package/dist/shell/app-shell.js +3 -1
  294. package/dist/shell/app-shell.js.map +1 -1
  295. package/dist/shell/dev-menu.d.ts +3 -0
  296. package/dist/shell/dev-menu.js +4 -2
  297. package/dist/shell/dev-menu.js.map +1 -1
  298. package/dist/shell/held-changes-banner-labels.d.ts +23 -0
  299. package/dist/shell/held-changes-banner-labels.js +14 -0
  300. package/dist/shell/held-changes-banner-labels.js.map +1 -0
  301. package/dist/shell/held-changes-banner.d.ts +75 -0
  302. package/dist/shell/held-changes-banner.js +106 -0
  303. package/dist/shell/held-changes-banner.js.map +1 -0
  304. package/dist/shell/sync-status-indicator.d.ts +27 -12
  305. package/dist/shell/sync-status-indicator.js +13 -4
  306. package/dist/shell/sync-status-indicator.js.map +1 -1
  307. package/dist/shell/top-bar-parts-labels.d.ts +5 -0
  308. package/dist/shell/top-bar-parts-labels.js +3 -1
  309. package/dist/shell/top-bar-parts-labels.js.map +1 -1
  310. package/dist/shell.d.ts +2 -0
  311. package/dist/shell.js +3 -0
  312. package/dist/shell.js.map +1 -1
  313. package/dist/sync/engine.d.ts +11 -2
  314. package/dist/sync/engine.js +13 -5
  315. package/dist/sync/engine.js.map +1 -1
  316. package/dist/sync/hooks.d.ts +3 -2
  317. package/dist/sync/hooks.js +4 -2
  318. package/dist/sync/hooks.js.map +1 -1
  319. package/dist/testing/css-variables.generated.d.ts +2 -2
  320. package/dist/testing/css-variables.generated.js +1 -1
  321. package/dist/testing/css-variables.generated.js.map +1 -1
  322. package/dist/theme/chart-palette.d.ts +18 -0
  323. package/dist/theme/chart-palette.js +17 -1
  324. package/dist/theme/chart-palette.js.map +1 -1
  325. package/dist/theme/contrast-tokens.d.ts +3 -3
  326. package/dist/theme/contrast-tokens.js.map +1 -1
  327. package/dist/theme/contrast.d.ts +4 -4
  328. package/dist/theme/contrast.js.map +1 -1
  329. package/dist/tour/tour-overlay.js +2 -1
  330. package/dist/tour/tour-overlay.js.map +1 -1
  331. package/package.json +5 -9
  332. package/tokens.css +19 -54
  333. package/src/account/account-parts.ts +0 -47
  334. package/src/account/account-settings-labels.ts +0 -240
  335. package/src/account/account-settings.tsx +0 -698
  336. package/src/account/data-export-setting-labels.ts +0 -20
  337. package/src/account/data-export-setting.tsx +0 -200
  338. package/src/account/delete-account-setting-labels.ts +0 -33
  339. package/src/account/delete-account-setting.tsx +0 -341
  340. package/src/account/email-change-setting-labels.ts +0 -31
  341. package/src/account/email-change-setting.tsx +0 -443
  342. package/src/account/passkeys-setting.tsx +0 -445
  343. package/src/account/sessions-setting-labels.ts +0 -24
  344. package/src/account/sessions-setting.tsx +0 -283
  345. package/src/admin/admin-action-confirm-labels.ts +0 -19
  346. package/src/admin/admin-action-confirm.tsx +0 -509
  347. package/src/admin/admin-action-log-labels.ts +0 -83
  348. package/src/admin/admin-action-log.tsx +0 -464
  349. package/src/admin/admin-area-labels.ts +0 -114
  350. package/src/admin/admin-forbidden.tsx +0 -75
  351. package/src/admin/admin-overview.tsx +0 -258
  352. package/src/admin/admin-parts.ts +0 -68
  353. package/src/admin/admin-sections.tsx +0 -208
  354. package/src/admin/admin-tool-links.tsx +0 -90
  355. package/src/admin/invitations-panel-labels.ts +0 -31
  356. package/src/admin/invitations-panel.tsx +0 -516
  357. package/src/admin/mail-test-card-labels.ts +0 -19
  358. package/src/admin/mail-test-card.tsx +0 -189
  359. package/src/admin/plan-change-labels.ts +0 -5
  360. package/src/admin/plan-change.tsx +0 -474
  361. package/src/admin/reviewer-scope-editor-labels.ts +0 -16
  362. package/src/admin/reviewer-scope-editor.tsx +0 -224
  363. package/src/admin/role-select-labels.ts +0 -16
  364. package/src/admin/role-select.tsx +0 -282
  365. package/src/admin/transfer-ownership-dialog-labels.ts +0 -20
  366. package/src/admin/transfer-ownership-dialog.tsx +0 -162
  367. package/src/admin/user-roster-labels.ts +0 -17
  368. package/src/admin/user-roster.tsx +0 -559
  369. package/src/auth/accept-invitation-labels.ts +0 -21
  370. package/src/auth/accept-invitation.tsx +0 -210
  371. package/src/auth/auth-errors-labels.ts +0 -23
  372. package/src/auth/auth-errors.ts +0 -370
  373. package/src/auth/complete-name-dialog-labels.ts +0 -16
  374. package/src/auth/complete-name-dialog.tsx +0 -253
  375. package/src/auth/email-tag.ts +0 -75
  376. package/src/auth/forgot-password-form-labels.ts +0 -20
  377. package/src/auth/forgot-password-form.tsx +0 -221
  378. package/src/auth/form-rules.ts +0 -40
  379. package/src/auth/new-password-fields.tsx +0 -85
  380. package/src/auth/not-found-page-labels.ts +0 -12
  381. package/src/auth/not-found-page.tsx +0 -95
  382. package/src/auth/register-form-labels.ts +0 -31
  383. package/src/auth/register-form.tsx +0 -456
  384. package/src/auth/reset-password-form-labels.ts +0 -27
  385. package/src/auth/reset-password-form.tsx +0 -341
  386. package/src/auth/sign-in-form-labels.ts +0 -44
  387. package/src/auth/sign-in-form.tsx +0 -858
  388. package/src/auth/status-parts.tsx +0 -132
  389. package/src/auth/verify-email-labels.ts +0 -26
  390. package/src/auth/verify-email.tsx +0 -445
  391. package/src/billing/billing-banner.tsx +0 -258
  392. package/src/billing/billing-labels.ts +0 -381
  393. package/src/billing/billing-lock.ts +0 -108
  394. package/src/billing/billing-overview.ts +0 -157
  395. package/src/billing/billing-standing.ts +0 -80
  396. package/src/billing/cancel-request.ts +0 -97
  397. package/src/billing/cancel-subscription.tsx +0 -98
  398. package/src/billing/checkout-processing.ts +0 -394
  399. package/src/billing/checkout-return.ts +0 -90
  400. package/src/billing/pay-page.ts +0 -330
  401. package/src/billing/plan-card.tsx +0 -562
  402. package/src/billing/plan-change-labels.ts +0 -66
  403. package/src/billing/plan-limit-notice.tsx +0 -148
  404. package/src/billing/plan-limit-toast.tsx +0 -90
  405. package/src/billing/plan-limit.ts +0 -52
  406. package/src/billing/plan-price.ts +0 -98
  407. package/src/billing/plan-switch.tsx +0 -216
  408. package/src/billing/provider-page.ts +0 -84
  409. package/src/billing/subscription-actions.tsx +0 -247
  410. package/src/billing/subscription-status-chip.tsx +0 -95
  411. package/src/chart.ts +0 -103
  412. package/src/components/account-chips-labels.ts +0 -16
  413. package/src/components/account-chips.tsx +0 -474
  414. package/src/components/alert-banner.tsx +0 -670
  415. package/src/components/amount-input.tsx +0 -815
  416. package/src/components/appearance-labels.ts +0 -63
  417. package/src/components/authed-image-labels.ts +0 -11
  418. package/src/components/authed-image.tsx +0 -209
  419. package/src/components/autocomplete.tsx +0 -645
  420. package/src/components/breadcrumbs-labels.ts +0 -10
  421. package/src/components/breadcrumbs.tsx +0 -205
  422. package/src/components/bulk-action-bar-labels.ts +0 -11
  423. package/src/components/bulk-action-bar.tsx +0 -443
  424. package/src/components/button-group.tsx +0 -223
  425. package/src/components/button-look.ts +0 -256
  426. package/src/components/button.tsx +0 -339
  427. package/src/components/calculator.tsx +0 -341
  428. package/src/components/calendar-heatmap-labels.ts +0 -15
  429. package/src/components/calendar-heatmap.tsx +0 -594
  430. package/src/components/card.tsx +0 -377
  431. package/src/components/chart-edge.ts +0 -106
  432. package/src/components/chart-figure.tsx +0 -35
  433. package/src/components/chart-height.ts +0 -30
  434. package/src/components/chart-zoom-core.tsx +0 -627
  435. package/src/components/chart-zoom.tsx +0 -22
  436. package/src/components/chart.tsx +0 -554
  437. package/src/components/checkbox-group.tsx +0 -247
  438. package/src/components/checkbox.tsx +0 -346
  439. package/src/components/chip-input.tsx +0 -370
  440. package/src/components/chip-labels.ts +0 -13
  441. package/src/components/chip.tsx +0 -843
  442. package/src/components/choice-card.tsx +0 -544
  443. package/src/components/column-mapper-labels.ts +0 -38
  444. package/src/components/column-mapper.tsx +0 -655
  445. package/src/components/combobox-core.tsx +0 -1321
  446. package/src/components/combobox-suggestions.tsx +0 -131
  447. package/src/components/combobox.tsx +0 -716
  448. package/src/components/confirm-context.ts +0 -7
  449. package/src/components/confirm-dialog-labels.ts +0 -13
  450. package/src/components/confirm-dialog.tsx +0 -341
  451. package/src/components/copy-button-labels.ts +0 -13
  452. package/src/components/copy-button.tsx +0 -192
  453. package/src/components/country-select-labels.ts +0 -11
  454. package/src/components/country-select.tsx +0 -539
  455. package/src/components/currency-option-list.tsx +0 -180
  456. package/src/components/currency-select.tsx +0 -341
  457. package/src/components/danger-confirm-labels.ts +0 -20
  458. package/src/components/danger-confirm.tsx +0 -934
  459. package/src/components/data-table-cells.tsx +0 -118
  460. package/src/components/data-table-column-settings.tsx +0 -198
  461. package/src/components/data-table-filter-popover.tsx +0 -281
  462. package/src/components/data-table-filters.ts +0 -287
  463. package/src/components/data-table-fit.ts +0 -301
  464. package/src/components/data-table-groups.tsx +0 -288
  465. package/src/components/data-table-head.tsx +0 -280
  466. package/src/components/data-table-labels.ts +0 -198
  467. package/src/components/data-table-leading-row.tsx +0 -58
  468. package/src/components/data-table-mobile.tsx +0 -1117
  469. package/src/components/data-table-pagination.tsx +0 -202
  470. package/src/components/data-table-resize.ts +0 -188
  471. package/src/components/data-table-row-actions.tsx +0 -302
  472. package/src/components/data-table-row.tsx +0 -496
  473. package/src/components/data-table-selection.ts +0 -71
  474. package/src/components/data-table-shared.tsx +0 -287
  475. package/src/components/data-table-sort.ts +0 -163
  476. package/src/components/data-table-virtual.ts +0 -576
  477. package/src/components/data-table.tsx +0 -2598
  478. package/src/components/date-field.tsx +0 -684
  479. package/src/components/date-format-setting.tsx +0 -64
  480. package/src/components/date-picker.tsx +0 -404
  481. package/src/components/date-range-picker.tsx +0 -518
  482. package/src/components/description-list-labels.ts +0 -9
  483. package/src/components/description-list.tsx +0 -386
  484. package/src/components/dialog-frame-labels.ts +0 -7
  485. package/src/components/dialog-frame.tsx +0 -276
  486. package/src/components/disclosure.tsx +0 -476
  487. package/src/components/dropdown.tsx +0 -461
  488. package/src/components/empty-state.tsx +0 -136
  489. package/src/components/entity-combobox.tsx +0 -422
  490. package/src/components/error-boundary-labels.ts +0 -20
  491. package/src/components/error-boundary.tsx +0 -675
  492. package/src/components/facing-pair.ts +0 -93
  493. package/src/components/field-base-labels.ts +0 -20
  494. package/src/components/field-base.tsx +0 -656
  495. package/src/components/field-parts.tsx +0 -825
  496. package/src/components/field-strip.tsx +0 -129
  497. package/src/components/field.tsx +0 -206
  498. package/src/components/file-button.tsx +0 -295
  499. package/src/components/file-dropzone.tsx +0 -559
  500. package/src/components/floating-panel-labels.ts +0 -10
  501. package/src/components/floating-panel.tsx +0 -828
  502. package/src/components/focus-ring.ts +0 -16
  503. package/src/components/form-actions-labels.ts +0 -11
  504. package/src/components/form-actions.tsx +0 -578
  505. package/src/components/full-bleed-dialog.tsx +0 -294
  506. package/src/components/grouped-picker.tsx +0 -184
  507. package/src/components/help-popover.tsx +0 -117
  508. package/src/components/hover-menu.tsx +0 -343
  509. package/src/components/iban-input-labels.ts +0 -14
  510. package/src/components/iban-input.tsx +0 -236
  511. package/src/components/icon-button.tsx +0 -959
  512. package/src/components/icon-picker-labels.ts +0 -13
  513. package/src/components/icon-picker.tsx +0 -232
  514. package/src/components/image-grid-labels.ts +0 -11
  515. package/src/components/image-grid.tsx +0 -202
  516. package/src/components/inline-confirm.tsx +0 -116
  517. package/src/components/inline-edit-field-labels.ts +0 -11
  518. package/src/components/inline-edit-field.tsx +0 -552
  519. package/src/components/inline-entity-combobox.tsx +0 -849
  520. package/src/components/input.tsx +0 -394
  521. package/src/components/jump-calendar.tsx +0 -265
  522. package/src/components/language-select.tsx +0 -93
  523. package/src/components/legal-labels.ts +0 -105
  524. package/src/components/legal-page.tsx +0 -711
  525. package/src/components/legal.tsx +0 -668
  526. package/src/components/lightbox-labels.ts +0 -18
  527. package/src/components/lightbox.tsx +0 -399
  528. package/src/components/line-items-labels.ts +0 -14
  529. package/src/components/line-items.tsx +0 -602
  530. package/src/components/list-labels.ts +0 -12
  531. package/src/components/list.tsx +0 -870
  532. package/src/components/loading-state.tsx +0 -78
  533. package/src/components/measured-grid-labels.ts +0 -25
  534. package/src/components/measured-grid.tsx +0 -837
  535. package/src/components/menu-item.tsx +0 -241
  536. package/src/components/mini-calendar-labels.ts +0 -17
  537. package/src/components/mini-calendar.tsx +0 -789
  538. package/src/components/modal.tsx +0 -505
  539. package/src/components/money-draft.ts +0 -83
  540. package/src/components/money-field.tsx +0 -76
  541. package/src/components/month-grid.tsx +0 -229
  542. package/src/components/month-picker-labels.ts +0 -22
  543. package/src/components/month-picker.tsx +0 -1087
  544. package/src/components/multi-entity-combobox.tsx +0 -369
  545. package/src/components/multi-select.tsx +0 -376
  546. package/src/components/nav-pills.tsx +0 -198
  547. package/src/components/number-field.tsx +0 -327
  548. package/src/components/number-input.tsx +0 -558
  549. package/src/components/numeric-field.ts +0 -169
  550. package/src/components/numpad-sheet.tsx +0 -285
  551. package/src/components/one-time-code-input.tsx +0 -270
  552. package/src/components/page-contents-labels.ts +0 -9
  553. package/src/components/page-contents.tsx +0 -282
  554. package/src/components/page-header-context.ts +0 -8
  555. package/src/components/page-header.tsx +0 -298
  556. package/src/components/password-strength-labels.ts +0 -22
  557. package/src/components/password-strength.tsx +0 -241
  558. package/src/components/phone-input-labels.ts +0 -10
  559. package/src/components/phone-input.tsx +0 -282
  560. package/src/components/picker-sheet.tsx +0 -330
  561. package/src/components/pie-chart-labels.ts +0 -40
  562. package/src/components/pie-chart.tsx +0 -480
  563. package/src/components/popover-labels.ts +0 -14
  564. package/src/components/popover.tsx +0 -268
  565. package/src/components/progress-bar-labels.ts +0 -10
  566. package/src/components/progress-bar.tsx +0 -479
  567. package/src/components/qr-code.tsx +0 -76
  568. package/src/components/reauth-dialog-labels.ts +0 -13
  569. package/src/components/reauth-dialog.tsx +0 -265
  570. package/src/components/row-actions-labels.ts +0 -12
  571. package/src/components/row-actions.tsx +0 -795
  572. package/src/components/scroll-area.tsx +0 -123
  573. package/src/components/search-field.tsx +0 -192
  574. package/src/components/select.tsx +0 -294
  575. package/src/components/separator.tsx +0 -33
  576. package/src/components/series-chart-axes.ts +0 -342
  577. package/src/components/series-chart-budget.ts +0 -150
  578. package/src/components/series-chart-labels.ts +0 -33
  579. package/src/components/series-chart-thin.ts +0 -180
  580. package/src/components/series-chart-ticks.ts +0 -194
  581. package/src/components/series-chart.tsx +0 -1906
  582. package/src/components/server-wake-labels.ts +0 -11
  583. package/src/components/server-wake.tsx +0 -129
  584. package/src/components/settings-fields.tsx +0 -237
  585. package/src/components/share-card-labels.ts +0 -30
  586. package/src/components/share-card.tsx +0 -675
  587. package/src/components/signature-pad-labels.ts +0 -24
  588. package/src/components/signature-pad.tsx +0 -747
  589. package/src/components/signed-amount-labels.ts +0 -10
  590. package/src/components/signed-amount.tsx +0 -336
  591. package/src/components/skeleton.tsx +0 -80
  592. package/src/components/slider.tsx +0 -338
  593. package/src/components/sparkline-labels.ts +0 -14
  594. package/src/components/sparkline.tsx +0 -322
  595. package/src/components/spinner.tsx +0 -81
  596. package/src/components/stat-tile-labels.ts +0 -15
  597. package/src/components/stat-tile.tsx +0 -725
  598. package/src/components/status-dot.tsx +0 -170
  599. package/src/components/swatch-picker-labels.ts +0 -10
  600. package/src/components/swatch-picker.tsx +0 -283
  601. package/src/components/swipeable-row.tsx +0 -386
  602. package/src/components/switch.tsx +0 -273
  603. package/src/components/table-skeleton.tsx +0 -136
  604. package/src/components/table.tsx +0 -647
  605. package/src/components/tabs-labels.ts +0 -13
  606. package/src/components/tabs.tsx +0 -693
  607. package/src/components/text-link.tsx +0 -359
  608. package/src/components/text.tsx +0 -150
  609. package/src/components/textarea.tsx +0 -330
  610. package/src/components/tile-radio.tsx +0 -332
  611. package/src/components/time-input.tsx +0 -121
  612. package/src/components/toast-labels.ts +0 -12
  613. package/src/components/toast.tsx +0 -519
  614. package/src/components/toggle-group.tsx +0 -752
  615. package/src/components/toggle-legend.tsx +0 -394
  616. package/src/components/tooltip.tsx +0 -1149
  617. package/src/components/translation-review-editor.tsx +0 -290
  618. package/src/components/translation-review-labels.ts +0 -181
  619. package/src/components/translation-review-parts.tsx +0 -272
  620. package/src/components/translation-review.tsx +0 -1240
  621. package/src/components/tree-view.tsx +0 -589
  622. package/src/components/treemap-labels.ts +0 -47
  623. package/src/components/treemap-layout.ts +0 -210
  624. package/src/components/treemap.tsx +0 -1184
  625. package/src/components/trigger-aria.ts +0 -44
  626. package/src/components/use-anchor-dir.ts +0 -20
  627. package/src/components/use-mobile-reveal.ts +0 -62
  628. package/src/components/use-table-state.ts +0 -753
  629. package/src/components/user-avatar.tsx +0 -116
  630. package/src/components/wizard-stepper.tsx +0 -42
  631. package/src/components/write-lock-labels.ts +0 -10
  632. package/src/components/write-lock.tsx +0 -253
  633. package/src/currencies.ts +0 -70
  634. package/src/data-table.ts +0 -42
  635. package/src/demo/demo-banner.tsx +0 -153
  636. package/src/demo/demo-countdown.ts +0 -136
  637. package/src/demo/demo-ended.tsx +0 -90
  638. package/src/demo/demo-labels.ts +0 -78
  639. package/src/demo/demo-session.ts +0 -32
  640. package/src/demo/demo-start.tsx +0 -156
  641. package/src/eslint/index.ts +0 -161
  642. package/src/eslint/role-utilities.generated.ts +0 -146
  643. package/src/eslint/role-utilities.ts +0 -233
  644. package/src/feedback/feedback-attachment-download.tsx +0 -77
  645. package/src/feedback/feedback-attachment-labels.ts +0 -37
  646. package/src/feedback/feedback-attachment.tsx +0 -1239
  647. package/src/feedback/feedback-capture.ts +0 -287
  648. package/src/feedback/feedback-comment-thread.tsx +0 -353
  649. package/src/feedback/feedback-context-labels.ts +0 -10
  650. package/src/feedback/feedback-context.tsx +0 -213
  651. package/src/feedback/feedback-crash.ts +0 -547
  652. package/src/feedback/feedback-dialog-labels.ts +0 -29
  653. package/src/feedback/feedback-dialog.tsx +0 -440
  654. package/src/feedback/feedback-entry-file.tsx +0 -150
  655. package/src/feedback/feedback-inbox.tsx +0 -552
  656. package/src/feedback/feedback-labels.ts +0 -144
  657. package/src/feedback/feedback-menu-labels.ts +0 -12
  658. package/src/feedback/feedback-menu.tsx +0 -177
  659. package/src/feedback/feedback-mutation.ts +0 -20
  660. package/src/feedback/feedback-page-link.ts +0 -90
  661. package/src/feedback/feedback-public-labels.ts +0 -81
  662. package/src/feedback/feedback-public-list.tsx +0 -524
  663. package/src/feedback/feedback-public-switch.tsx +0 -102
  664. package/src/feedback/feedback-public-types.ts +0 -101
  665. package/src/feedback/feedback-record.ts +0 -423
  666. package/src/feedback/feedback-replies-context.ts +0 -9
  667. package/src/feedback/feedback-replies.tsx +0 -343
  668. package/src/feedback/feedback-rework-entry-chip.tsx +0 -18
  669. package/src/feedback/feedback-row-detail-labels.ts +0 -30
  670. package/src/feedback/feedback-row-detail.tsx +0 -858
  671. package/src/feedback/feedback-status-undo.ts +0 -109
  672. package/src/feedback/feedback-submit-dialog.tsx +0 -118
  673. package/src/feedback/feedback-submit.tsx +0 -237
  674. package/src/feedback/feedback-swipe.tsx +0 -192
  675. package/src/feedback/feedback-table-labels.ts +0 -27
  676. package/src/feedback/feedback-table.tsx +0 -912
  677. package/src/feedback/feedback-thread-labels.ts +0 -22
  678. package/src/feedback/feedback-thread-parts-labels.ts +0 -41
  679. package/src/feedback/feedback-thread.tsx +0 -905
  680. package/src/feedback/feedback-vocabulary.ts +0 -263
  681. package/src/feedback/feedback-vote-button.tsx +0 -124
  682. package/src/feedback.ts +0 -116
  683. package/src/hooks/use-anchored-panel.ts +0 -396
  684. package/src/hooks/use-anchored-rect.ts +0 -77
  685. package/src/hooks/use-announce.ts +0 -85
  686. package/src/hooks/use-authed-src.ts +0 -167
  687. package/src/hooks/use-body-scroll-lock.ts +0 -119
  688. package/src/hooks/use-breakpoint.ts +0 -133
  689. package/src/hooks/use-close-transition.ts +0 -107
  690. package/src/hooks/use-copy-to-clipboard.ts +0 -122
  691. package/src/hooks/use-debounce.ts +0 -114
  692. package/src/hooks/use-dismiss.ts +0 -371
  693. package/src/hooks/use-document-title.ts +0 -33
  694. package/src/hooks/use-file-drop.ts +0 -121
  695. package/src/hooks/use-file-picker-labels.ts +0 -28
  696. package/src/hooks/use-file-picker.tsx +0 -359
  697. package/src/hooks/use-focus-trap.ts +0 -199
  698. package/src/hooks/use-hotkey.ts +0 -189
  699. package/src/hooks/use-large-text.ts +0 -41
  700. package/src/hooks/use-long-press.ts +0 -140
  701. package/src/hooks/use-media-query.ts +0 -39
  702. package/src/hooks/use-mounted.ts +0 -39
  703. package/src/hooks/use-noindex.ts +0 -37
  704. package/src/hooks/use-overlay-history.ts +0 -714
  705. package/src/hooks/use-row-swipe.ts +0 -207
  706. package/src/hooks/use-search-param-state.ts +0 -434
  707. package/src/hooks/use-windowed-rows.ts +0 -225
  708. package/src/i18n/defaults.ts +0 -267
  709. package/src/i18n/german.ts +0 -2057
  710. package/src/i18n/kit-labels.tsx +0 -1003
  711. package/src/i18n/languages.ts +0 -349
  712. package/src/i18n/locales/de-CH.ts +0 -24
  713. package/src/i18n/locales/en.ts +0 -267
  714. package/src/i18n/locales/es.ts +0 -1997
  715. package/src/i18n/locales/fr.ts +0 -2035
  716. package/src/i18n/locales/hu.ts +0 -2002
  717. package/src/i18n/locales/it.ts +0 -2012
  718. package/src/i18n/locales/zh.ts +0 -1910
  719. package/src/i18n/plurals.ts +0 -86
  720. package/src/i18n/review.ts +0 -475
  721. package/src/i18n/shared-labels.ts +0 -138
  722. package/src/i18n/swiss.ts +0 -29
  723. package/src/index.ts +0 -1179
  724. package/src/landing/access.ts +0 -93
  725. package/src/landing/landing-actions.tsx +0 -97
  726. package/src/landing/landing-labels.ts +0 -59
  727. package/src/landing/landing-sections.tsx +0 -341
  728. package/src/landing/page-seo.ts +0 -261
  729. package/src/landing/public-header.tsx +0 -121
  730. package/src/landing/public-page.tsx +0 -106
  731. package/src/landing/routing.tsx +0 -225
  732. package/src/lib/broadcast.ts +0 -52
  733. package/src/lib/calc.ts +0 -323
  734. package/src/lib/chip-edge-snap.ts +0 -212
  735. package/src/lib/clipboard-minus.ts +0 -107
  736. package/src/lib/clipping.ts +0 -34
  737. package/src/lib/cn.ts +0 -28
  738. package/src/lib/column-mapping.ts +0 -234
  739. package/src/lib/countries.ts +0 -91
  740. package/src/lib/data-attributes.ts +0 -14
  741. package/src/lib/date-format.ts +0 -227
  742. package/src/lib/dates.ts +0 -266
  743. package/src/lib/day-format.ts +0 -96
  744. package/src/lib/decimal-marks.ts +0 -108
  745. package/src/lib/describe-failure.ts +0 -18
  746. package/src/lib/device-settings.ts +0 -147
  747. package/src/lib/direction.ts +0 -74
  748. package/src/lib/document-navigation.ts +0 -17
  749. package/src/lib/document-title.ts +0 -41
  750. package/src/lib/download.ts +0 -172
  751. package/src/lib/float-clearance.ts +0 -70
  752. package/src/lib/floating-stack.ts +0 -70
  753. package/src/lib/focus-left.ts +0 -156
  754. package/src/lib/format.ts +0 -522
  755. package/src/lib/http-status.ts +0 -38
  756. package/src/lib/iban.ts +0 -251
  757. package/src/lib/ime.ts +0 -24
  758. package/src/lib/intl-cache.ts +0 -25
  759. package/src/lib/iso-day.ts +0 -13
  760. package/src/lib/lazy-with-fallback.ts +0 -82
  761. package/src/lib/logger.ts +0 -69
  762. package/src/lib/minus.ts +0 -50
  763. package/src/lib/path-pattern.ts +0 -55
  764. package/src/lib/person-name.ts +0 -155
  765. package/src/lib/phone.ts +0 -208
  766. package/src/lib/plain-text.ts +0 -22
  767. package/src/lib/presence.ts +0 -18
  768. package/src/lib/qr-encode.ts +0 -444
  769. package/src/lib/quiet-focus.ts +0 -32
  770. package/src/lib/reduced-motion.ts +0 -22
  771. package/src/lib/refs.ts +0 -22
  772. package/src/lib/round.ts +0 -43
  773. package/src/lib/safe-storage.ts +0 -119
  774. package/src/lib/server-wake.ts +0 -315
  775. package/src/lib/session-refresh.ts +0 -472
  776. package/src/lib/share-format.ts +0 -18
  777. package/src/lib/status-tone.ts +0 -43
  778. package/src/lib/strip-fade.ts +0 -287
  779. package/src/lib/table-text.ts +0 -554
  780. package/src/lib/text-case.ts +0 -19
  781. package/src/lib/text-match.ts +0 -169
  782. package/src/lib/thenable.ts +0 -19
  783. package/src/lib/translation-review.ts +0 -717
  784. package/src/notifications/device-zone-report.ts +0 -67
  785. package/src/notifications/feedback-notification-types-labels.ts +0 -33
  786. package/src/notifications/feedback-notification-types.ts +0 -71
  787. package/src/notifications/notification-bell.tsx +0 -119
  788. package/src/notifications/notification-inbox.tsx +0 -309
  789. package/src/notifications/notification-parts.tsx +0 -81
  790. package/src/notifications/notification-types-setting.tsx +0 -406
  791. package/src/notifications/notification-types.ts +0 -89
  792. package/src/notifications/notifications-labels.ts +0 -287
  793. package/src/notifications/push-device-setting.tsx +0 -230
  794. package/src/notifications/push-devices-setting.tsx +0 -374
  795. package/src/notifications/push-worker.ts +0 -168
  796. package/src/notifications/quiet-hours-setting.tsx +0 -238
  797. package/src/notifications/unsubscribe-panel.tsx +0 -200
  798. package/src/notifications/use-push-device.ts +0 -448
  799. package/src/offline/local-first.ts +0 -100
  800. package/src/offline/pwa-update-prompt-labels.ts +0 -9
  801. package/src/offline/pwa-update-prompt.tsx +0 -78
  802. package/src/offline/query-persistence.ts +0 -391
  803. package/src/offline/service-worker-updates.ts +0 -81
  804. package/src/offline/shared-computer-labels.ts +0 -8
  805. package/src/offline/shared-computer.tsx +0 -87
  806. package/src/offline/sign-out-pending-dialog-labels.ts +0 -21
  807. package/src/offline/sign-out-pending-dialog.tsx +0 -135
  808. package/src/offline.ts +0 -37
  809. package/src/push-worker.ts +0 -25
  810. package/src/rhf/fields.tsx +0 -2187
  811. package/src/rhf/form-core.tsx +0 -324
  812. package/src/rhf/form.tsx +0 -12
  813. package/src/rhf/line-items.tsx +0 -135
  814. package/src/rhf/use-rhf-wizard-step.ts +0 -104
  815. package/src/rhf.ts +0 -21
  816. package/src/search/command-palette-labels.ts +0 -16
  817. package/src/search/command-palette.tsx +0 -624
  818. package/src/search/global-search-labels.ts +0 -13
  819. package/src/search/global-search.tsx +0 -660
  820. package/src/search/search-index.ts +0 -283
  821. package/src/search/use-command-key.ts +0 -23
  822. package/src/search.ts +0 -14
  823. package/src/settings/device-reset-setting-labels.ts +0 -20
  824. package/src/settings/device-reset-setting.tsx +0 -116
  825. package/src/settings/settings-card-classes.ts +0 -11
  826. package/src/settings/settings-catalogue.ts +0 -150
  827. package/src/settings/settings-context.ts +0 -33
  828. package/src/settings/settings-heading.tsx +0 -67
  829. package/src/settings/settings-labels.ts +0 -87
  830. package/src/settings/settings-layout.tsx +0 -471
  831. package/src/settings/settings-section.tsx +0 -108
  832. package/src/settings/use-account-appearance.ts +0 -148
  833. package/src/settings/use-account-language.ts +0 -146
  834. package/src/settings/use-settings-focus.ts +0 -128
  835. package/src/settings/use-settings-route.ts +0 -258
  836. package/src/shell/account-menu-language.tsx +0 -130
  837. package/src/shell/account-menu-text-size.tsx +0 -80
  838. package/src/shell/admin-menu.tsx +0 -183
  839. package/src/shell/app-shell-labels.ts +0 -11
  840. package/src/shell/app-shell.tsx +0 -1560
  841. package/src/shell/auth-layout.tsx +0 -186
  842. package/src/shell/company-switcher-labels.ts +0 -13
  843. package/src/shell/company-switcher.tsx +0 -136
  844. package/src/shell/dev-menu.tsx +0 -257
  845. package/src/shell/fill-height.tsx +0 -45
  846. package/src/shell/language-code.ts +0 -5
  847. package/src/shell/option-switcher-menu.tsx +0 -84
  848. package/src/shell/sync-status-indicator.tsx +0 -303
  849. package/src/shell/top-bar-actions.tsx +0 -87
  850. package/src/shell/top-bar-brand.tsx +0 -78
  851. package/src/shell/top-bar-parts-labels.ts +0 -148
  852. package/src/shell/top-bar.tsx +0 -40
  853. package/src/shell/topbar-action-menu.tsx +0 -567
  854. package/src/shell/topbar-controls.tsx +0 -269
  855. package/src/shell/tour-menu.tsx +0 -187
  856. package/src/shell.ts +0 -108
  857. package/src/sync/db.ts +0 -129
  858. package/src/sync/engine.ts +0 -1011
  859. package/src/sync/hooks.ts +0 -98
  860. package/src/sync/testing.ts +0 -73
  861. package/src/sync/wire.ts +0 -61
  862. package/src/sync.ts +0 -37
  863. package/src/table-text.ts +0 -8
  864. package/src/testing/css-variables.generated.ts +0 -112
  865. package/src/testing/css-variables.ts +0 -189
  866. package/src/testing/index.ts +0 -29
  867. package/src/testing/react.ts +0 -58
  868. package/src/testing/tour.ts +0 -41
  869. package/src/testing/viewport.ts +0 -357
  870. package/src/theme/chart-palette.ts +0 -232
  871. package/src/theme/color.ts +0 -272
  872. package/src/theme/contrast-tokens.ts +0 -268
  873. package/src/theme/contrast.ts +0 -250
  874. package/src/theme/palette-derive.ts +0 -825
  875. package/src/theme/palette-presets.ts +0 -544
  876. package/src/theme/palette-store.ts +0 -108
  877. package/src/theme/text-size.ts +0 -289
  878. package/src/theme/theme-store.ts +0 -157
  879. package/src/tour/tour-catalogue-labels.ts +0 -75
  880. package/src/tour/tour-catalogue.tsx +0 -335
  881. package/src/tour/tour-dock.ts +0 -134
  882. package/src/tour/tour-engine.ts +0 -37
  883. package/src/tour/tour-gates.ts +0 -218
  884. package/src/tour/tour-guide-button.tsx +0 -64
  885. package/src/tour/tour-guide-labels.ts +0 -15
  886. package/src/tour/tour-info.ts +0 -144
  887. package/src/tour/tour-labels.ts +0 -23
  888. package/src/tour/tour-overlay.tsx +0 -1170
  889. package/src/tour/tour.tsx +0 -750
  890. package/src/tour/use-tour-progress.ts +0 -671
  891. package/src/tour/use-tour-url-sync.ts +0 -266
  892. package/src/tour.ts +0 -21
  893. package/src/vite-env.d.ts +0 -23
  894. package/src/wizard/stepper-nav.tsx +0 -360
  895. package/src/wizard/types.ts +0 -275
  896. package/src/wizard/use-wizard.ts +0 -560
  897. package/src/wizard/validation.ts +0 -39
  898. package/src/wizard/wizard-context.tsx +0 -74
  899. package/src/wizard/wizard-labels.ts +0 -29
  900. package/src/wizard/wizard-step.tsx +0 -76
  901. package/src/wizard/wizard-summary.tsx +0 -84
  902. package/src/wizard.ts +0 -15
@@ -1,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
- };