@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,624 +0,0 @@
1
- import { useEffect, useEffectEvent, useId, useMemo, useRef, useState } from "react";
2
- import type { ReactNode } from "react";
3
- import { createPortal } from "react-dom";
4
- import { CornerDownLeft, Search, X } from "lucide-react";
5
- import { cn } from "../lib/cn";
6
- import { FIELD_TOUCH_TEXT } from "../components/field-base";
7
- import { usePhoneLayout } from "../hooks/use-breakpoint";
8
- import { useOverlayHistory } from "../hooks/use-overlay-history";
9
- import { useFocusTrap } from "../hooks/use-focus-trap";
10
- import { useBodyScrollLock } from "../hooks/use-body-scroll-lock";
11
- import { takeEscape, useDismissLayer } from "../hooks/use-dismiss";
12
- import { isImeEnter } from "../lib/ime";
13
- // A provider's answer is a promise: the only case with anything to wait for.
14
- import { isThenable } from "../lib/thenable";
15
- import { useKitLabels, type LabelOverride } from "../i18n/kit-labels";
16
- import { DEFAULT_COMMAND_PALETTE_LABELS } from "./command-palette-labels";
17
-
18
- export interface CommandItem {
19
- id: string;
20
- /** Primary text. */
21
- label: string;
22
- /** Secondary text on the right (e.g. an amount, a date, a group hint). */
23
- hint?: string;
24
- /** Heading this item is grouped under. */
25
- group: string;
26
- /** Leading icon / element. */
27
- icon?: ReactNode;
28
- /** Invoked when the item is chosen (navigate, run an action, …). */
29
- onSelect: () => void;
30
- /** Where this item leads, when it is a navigation rather than an action. Renders
31
- * the row as a real anchor so it can be middle-/⌘-clicked into a new tab
32
- * (Keksdose feedback #451); `onSelect` still runs for a plain click and for ↵, so
33
- * in-app navigation stays client-side. `href` only adds what the browser can do
34
- * with a link and JavaScript cannot fake — the rejected alternative, an
35
- * `onAuxClick` calling `window.open`, gets the middle click and nothing else. */
36
- href?: string;
37
- /** Marks this row's label and hint `data-private`, so session replay and screenshot
38
- * tooling masks them — a payee, an account name, an amount. Overrides the palette's
39
- * {@link CommandPaletteProps.redactLabels} either way, so `false` un-masks one
40
- * harmless row ("Settings") in a palette that masks by default. */
41
- redact?: boolean;
42
- /**
43
- * `"status"` makes the row a line of text rather than a choice — a group's
44
- * "Searching…" while its source is still out, or its error. It is skipped by the
45
- * arrow keys and ↵, has no hover highlight, and its `onSelect` is never called.
46
- * Default `"option"`.
47
- */
48
- kind?: "option" | "status";
49
- }
50
-
51
- /** Group items preserving first-seen group order; `flat` is the navigable rows only. */
52
- function groupItems(items: CommandItem[]) {
53
- const order: string[] = [];
54
- const byGroup = new Map<string, CommandItem[]>();
55
- for (const item of items) {
56
- if (!byGroup.has(item.group)) {
57
- byGroup.set(item.group, []);
58
- order.push(item.group);
59
- }
60
- byGroup.get(item.group)!.push(item);
61
- }
62
- const flat = order.flatMap((g) => byGroup.get(g)!).filter((item) => item.kind !== "status");
63
- return {
64
- groups: order.map((g) => ({ group: g, items: byGroup.get(g)! })),
65
- flat,
66
- /** Each selectable item's position in `flat` — its `data-index` and keyboard slot. */
67
- flatIndex: new Map(flat.map((item, index) => [item, index])),
68
- };
69
- }
70
-
71
- export interface CommandPaletteLabels {
72
- placeholder: string;
73
- empty: string;
74
- loading: string;
75
- /** Hint shown in the footer, e.g. "↑↓ to navigate · ↵ to select · esc to close". */
76
- hint?: string;
77
- /**
78
- * Accessible name of the dialog itself. It used to borrow `placeholder`, which is
79
- * written to sit greyed-out in an empty box ("Search…", "Type a command"), not to
80
- * name a window — and a reader heard the ellipsis read out as part of the name.
81
- *
82
- * Optional, unlike `placeholder`, so a translation annotated as
83
- * `CommandPaletteLabels` keeps compiling; the default always carries it.
84
- */
85
- dialog?: string;
86
- /**
87
- * Shown in place of the results when the `search` provider throws or its promise
88
- * rejects. Optional for the same reason as `dialog`; the default always carries it.
89
- */
90
- error?: string;
91
- /** Names the "×" that empties the field. Optional like `dialog`. */
92
- clear?: string;
93
- /** Names the button that commits the typed text when `searchOn="submit"`. */
94
- submit?: string;
95
- /** Names the close button of the full-screen phone presentation, which has no
96
- * backdrop to tap and, on a phone, no Escape key. */
97
- close?: string;
98
- }
99
-
100
- // Defined in ./command-palette-labels, which holds no component code (0.34, KS U8).
101
- export { DEFAULT_COMMAND_PALETTE_LABELS };
102
-
103
- /**
104
- * How tall the palette's rows are. `"compact"` (the default) is the desktop list the
105
- * palette always drew, 36px a row; `"comfortable"` gives every row the kit's 44px touch
106
- * target (`min-h-11`) and body-size text — keksdose's phone search, where a 36px row
107
- * under a thumb picks its neighbour.
108
- */
109
- export type CommandPaletteDensity = "compact" | "comfortable";
110
-
111
- /** The defaults minus `dialog`, so a resolved `dialog` means someone SUPPLIED one —
112
- * see the dialog's `aria-label` for why that distinction matters. */
113
- const { dialog: DEFAULT_DIALOG_NAME, ...DEFAULTS_WITHOUT_DIALOG } = DEFAULT_COMMAND_PALETTE_LABELS;
114
-
115
- interface CommandPaletteProps {
116
- open: boolean;
117
- onClose: () => void;
118
- /**
119
- * Returns results for a query (called debounced as the user types; an empty
120
- * query is allowed — return defaults like pages/recent). Sync or async; stale
121
- * async responses are ignored.
122
- *
123
- * A SYNCHRONOUS provider (one returning an array, not a promise) never shows the
124
- * "Searching…" hint: its answer is there the moment it is asked, and the hint only
125
- * flashed through the debounce before results that were never late — keksdose's
126
- * transaction search filters a list already in memory. The palette tells the two
127
- * apart by what the provider RETURNS, call by call, so there is no prop to keep in
128
- * step with the implementation: an async provider shows the hint from the first
129
- * promise on (and during the debounce of every later query), a sync one never.
130
- *
131
- * Its IDENTITY is not a re-run signal — it is read through a ref, so the palette
132
- * never re-searches merely because the caller rebuilt the callback. That is
133
- * deliberate: a provider closing over a list rendered from a query allocates a new
134
- * function on most renders, and re-running the search on each would make typing
135
- * stutter. Use {@link CommandPaletteProps.revision} when the DATA behind the
136
- * provider changes.
137
- */
138
- search: (query: string) => CommandItem[] | Promise<CommandItem[]>;
139
- /**
140
- * Anything whose change means the current results are out of date — typically the
141
- * arrays the provider searches over. Compared by identity (as an effect dependency
142
- * would be), so pass stable references: a `data = []` default allocates a fresh
143
- * array on every render while a query is pending and would re-search forever.
144
- *
145
- * Without it, a provider whose data arrives AFTER the palette opened never gets
146
- * asked again: the user's last keystroke settles the debounce, the queries resolve a
147
- * moment later, and the groups they would have contributed are simply absent until
148
- * another keystroke. That is the ordinary first open on a cold cache.
149
- */
150
- revision?: unknown;
151
- /**
152
- * The search text, CONTROLLED. Keksdose binds it to the URL's `q`, so a search
153
- * survives a reload, can be shared as a link, and Back walks through it — none of
154
- * which state inside the palette can do.
155
- *
156
- * Leave it out and the palette keeps its own, as before, starting empty on every
157
- * open. Given, it is never reset on open: the owner decides what an open shows, and
158
- * a palette that blanked the URL's `q` each time would fight its own address bar.
159
- * `onQueryChange` is then how a keystroke gets anywhere, since it is the only writer.
160
- */
161
- query?: string;
162
- /** Every edit of the field's text. Fires in both modes — uncontrolled, it only
163
- * observes. */
164
- onQueryChange?: (query: string) => void;
165
- /**
166
- * When the typed text becomes THE query — the one `search` runs on and
167
- * `onQueryChange` reports.
168
- *
169
- * - `"input"` (default): every keystroke, debounced for the search, as before.
170
- * - `"submit"`: typing edits a draft; the query is committed by ↵ or the submit
171
- * button beside the field. Until then the results stay on the last committed query
172
- * and `onQueryChange` stays quiet — which is what an owner binding `query` to the
173
- * URL's `q` needs, or every keystroke re-filters the page behind and pushes history.
174
- * ↵ with a draft that differs from the committed query COMMITS; ↵ with nothing new
175
- * typed chooses the highlighted row, as in `"input"` mode. The draft follows any
176
- * outside change of the committed query (Back through the URL), and an uncommitted
177
- * draft is dropped when the palette is closed.
178
- *
179
- * The clear "×" commits the empty query in both modes: an emptied box over results
180
- * (or a page) still filtered by the old text is the stuck state Keksdose #423 was.
181
- */
182
- searchOn?: "input" | "submit";
183
- /** Mark every row's label and hint `data-private` (see {@link CommandItem.redact},
184
- * which overrides it per row). Off by default. */
185
- redactLabels?: boolean;
186
- /**
187
- * In the phone layout (`usePhoneLayout()`) the palette fills the screen:
188
- * no inset, no rounded panel, the field pinned at the top inside the safe areas and
189
- * the list scrolling under it, with a close button since there is no backdrop to tap.
190
- * On by default — a top-centred card at 70vh leaves little room once the keyboard is
191
- * up. `false` keeps the card on every viewport.
192
- */
193
- fullScreenOnPhone?: boolean;
194
- /** Row height — see {@link CommandPaletteDensity}. Default `"compact"`. */
195
- density?: CommandPaletteDensity;
196
- labels?: LabelOverride<CommandPaletteLabels>;
197
- }
198
-
199
- // Defined in ./use-command-key, so `GlobalSearch` can listen for ⌘K without loading the
200
- // palette before it is opened (0.34, MOD-1).
201
- export { useCommandKey } from "./use-command-key";
202
-
203
- /**
204
- * A ⌘K-style command palette: a top-centred modal with a search field and a
205
- * grouped, keyboard-navigable result list. Domain-free — the app supplies
206
- * results via the `search` provider (pages, actions, records, …); each result
207
- * carries its own `onSelect`.
208
- */
209
- export function CommandPalette({
210
- open,
211
- onClose,
212
- search,
213
- revision,
214
- query: queryProp,
215
- onQueryChange,
216
- searchOn = "input",
217
- redactLabels = false,
218
- fullScreenOnPhone = true,
219
- density = "compact",
220
- labels,
221
- }: CommandPaletteProps) {
222
- const l = useKitLabels("commandPalette", DEFAULTS_WITHOUT_DIALOG, labels);
223
- // `dialog` is new, and until it existed the dialog was named by `placeholder`. An
224
- // app that translated `placeholder` and has not heard of `dialog` would otherwise
225
- // go from a German name to an English "Search" on update — so a translated
226
- // placeholder keeps doing the job until a `dialog` is supplied.
227
- const dialogName =
228
- l.dialog ?? (l.placeholder !== DEFAULT_COMMAND_PALETTE_LABELS.placeholder ? l.placeholder : DEFAULT_DIALOG_NAME);
229
- const [ownQuery, setOwnQuery] = useState("");
230
- const controlled = queryProp !== undefined;
231
- const query = controlled ? queryProp : ownQuery;
232
- const setQuery = (next: string) => {
233
- if (!controlled) setOwnQuery(next);
234
- onQueryChange?.(next);
235
- };
236
- const submitMode = searchOn === "submit";
237
- // The field's text in `"submit"` mode. It follows the committed query whenever that
238
- // changes — adjusted during render, React's pattern for state derived from a prop,
239
- // rather than in an effect that would paint the stale draft first.
240
- const [draft, setDraft] = useState(query);
241
- const [draftBase, setDraftBase] = useState(query);
242
- if (draftBase !== query) {
243
- setDraftBase(query);
244
- setDraft(query);
245
- }
246
- const fieldText = submitMode ? draft : query;
247
- const commit = (next: string) => {
248
- setDraft(next);
249
- setQuery(next);
250
- };
251
- const dirty = submitMode && draft !== query;
252
- const isPhone = usePhoneLayout() && fullScreenOnPhone;
253
- const [results, setResults] = useState<CommandItem[]>([]);
254
- const [loading, setLoading] = useState(false);
255
- const [failed, setFailed] = useState(false);
256
- const [active, setActive] = useState(0);
257
- // Per instance: these were the literal "command-palette-list" / "command-item-<id>",
258
- // so two palettes on one page (an app-wide one and a scoped one) pointed each
259
- // other's `aria-controls` and `aria-activedescendant` at the wrong list.
260
- const uid = useId();
261
- const listId = `${uid}-list`;
262
- const itemId = (id: string) => `${uid}-item-${id}`;
263
- const groupId = (index: number) => `${uid}-group-${index}`;
264
- const dialogRef = useRef<HTMLDivElement>(null);
265
- const inputRef = useRef<HTMLInputElement>(null);
266
- const listRef = useRef<HTMLUListElement>(null);
267
- // The latest `search`, callable from the debounced effect without being one of its
268
- // dependencies — `revision` is what re-runs it (see the prop's docstring).
269
- const runSearch = useEffectEvent((q: string) => search(q));
270
- const reqId = useRef(0);
271
- /** What the provider's last answer was: a promise (`false`), an array (`true`), or
272
- * not known yet. Only a provider known to be async shows "Searching…" while the
273
- * debounce runs — see `search`. */
274
- const syncRef = useRef<boolean | undefined>(undefined);
275
- /** The query the results on screen answer, and the row highlighted in them — so a
276
- * re-run for the SAME query (a `revision` change: a source streaming in) keeps the
277
- * highlight on its row instead of throwing it back to the top mid-arrow. */
278
- const shownQuery = useRef<string | null>(null);
279
- const activeIdRef = useRef<string | undefined>(undefined);
280
-
281
- // Back dismisses the palette (Keksdose feedback #172). Declared with the other
282
- // hooks, above the `if (!open) return null` below — a hook past a conditional
283
- // return changes the hook order between renders. Passing `open` rather than
284
- // mounting-while-open is what lets it sit here.
285
- useOverlayHistory(open, onClose);
286
-
287
- // A modal like any other: Tab stays inside, the page behind does not scroll, and
288
- // focus goes back to whatever opened it — the palette used to drop it on <body>.
289
- // Initial focus is the field, not the container: typing is the only reason to open it.
290
- useFocusTrap(dialogRef, { active: open, initialFocus: () => inputRef.current });
291
- useBodyScrollLock(open);
292
-
293
- // Reset when opened — the palette's OWN text only; a controlled query belongs to
294
- // its owner (see the prop). Adjusted during render on the closed-to-open transition
295
- // (starting from "closed", so a palette mounted open resets too). `controlled` is
296
- // read at the open, not watched: a caller switching modes while the palette is open
297
- // is not a reason to wipe what is typed.
298
- const [wasOpen, setWasOpen] = useState(false);
299
- if (open !== wasOpen) {
300
- setWasOpen(open);
301
- if (open) {
302
- if (!controlled) setOwnQuery("");
303
- // An uncommitted draft does not outlive the open it was typed in.
304
- setDraft(controlled ? query : "");
305
- setActive(0);
306
- }
307
- }
308
- // The ref half of that reset: results from a previous open do not carry a
309
- // highlight into this one.
310
- useEffect(() => {
311
- if (open) shownQuery.current = null;
312
- }, [open]);
313
-
314
- // Debounced, race-safe search.
315
- useEffect(() => {
316
- if (!open) return;
317
- const id = ++reqId.current;
318
- if (syncRef.current === false) setLoading(true);
319
- const run = async () => {
320
- try {
321
- const answer = runSearch(query);
322
- syncRef.current = !isThenable(answer);
323
- if (!syncRef.current) setLoading(true);
324
- const r = await answer;
325
- if (reqId.current === id) {
326
- const keep = shownQuery.current === query ? activeIdRef.current : undefined;
327
- const at = keep === undefined ? -1 : groupItems(r).flat.findIndex((item) => item.id === keep);
328
- shownQuery.current = query;
329
- setResults(r);
330
- setFailed(false);
331
- setActive(Math.max(at, 0));
332
- }
333
- } catch (err) {
334
- // There was no catch: the previous query's results stayed on screen as if they
335
- // answered this one, and the rejection went unhandled. Clear them and say so.
336
- if (reqId.current === id) {
337
- shownQuery.current = null;
338
- setResults([]);
339
- setFailed(true);
340
- setActive(0);
341
- }
342
- console.error("CommandPalette: search failed", err);
343
- } finally {
344
- if (reqId.current === id) setLoading(false);
345
- }
346
- };
347
- const t = setTimeout(run, query ? 150 : 0);
348
- return () => clearTimeout(t);
349
- // `revision`, not `search`: see the prop's docstring. The debounce is re-armed on a
350
- // revision change, which is right — data arriving is not a keystroke and there is
351
- // nothing to feel laggy about.
352
- }, [query, open, revision]);
353
-
354
- // Group results, preserving first-seen group order; keep a flat list for nav.
355
- const { groups, flat, flatIndex } = useMemo(() => groupItems(results), [results]);
356
- useEffect(() => {
357
- activeIdRef.current = flat[active]?.id;
358
- });
359
-
360
- const choose = (item: CommandItem | undefined) => {
361
- if (!item) return;
362
- onClose();
363
- item.onSelect();
364
- };
365
-
366
- const onKeyDown = (e: React.KeyboardEvent) => {
367
- if (e.key === "ArrowDown") {
368
- e.preventDefault();
369
- setActive((i) => Math.min(i + 1, flat.length - 1));
370
- } else if (e.key === "ArrowUp") {
371
- e.preventDefault();
372
- setActive((i) => Math.max(i - 1, 0));
373
- } else if (e.key === "Enter") {
374
- // The Enter that confirms an IME composition is the IME's (BUG-9).
375
- if (isImeEnter(e)) return;
376
- e.preventDefault();
377
- if (dirty) commit(draft);
378
- else choose(flat[active]);
379
- }
380
- };
381
-
382
- // A layer on the kit's Escape stack while open (Wave 2, DUP-1), taken on the whole
383
- // dialog, not only the field: once Tab has moved focus to a row (or a footer
384
- // control), Escape used to do nothing at all. It closed without stopping the key, so
385
- // a dialog the palette was opened from closed with it.
386
- useDismissLayer(open, onClose);
387
- const onDialogKeyDown = (e: React.KeyboardEvent) => {
388
- takeEscape(e);
389
- };
390
-
391
- // Keep the active row scrolled into view.
392
- useEffect(() => {
393
- const el = listRef.current?.querySelector<HTMLElement>(`[data-index="${active}"]`);
394
- // Optional-called, as in combobox-core: jsdom has no scrollIntoView, and every
395
- // consumer's tests crashed on the first highlighted row (kastlan stubbed it).
396
- el?.scrollIntoView?.({ block: "nearest" });
397
- }, [active]);
398
-
399
- if (!open) return null;
400
-
401
- const comfortable = density === "comfortable";
402
- return createPortal(
403
- // eslint-disable-next-line jsx-a11y/no-static-element-interactions -- pointer-only backdrop dismiss; Escape is the keyboard path
404
- <div
405
- className={cn(
406
- "fixed inset-0 z-[70] flex items-start justify-center bg-black/40",
407
- isPhone ? "p-0" : "p-4 pt-[10vh]",
408
- )}
409
- onMouseDown={(e) => {
410
- if (e.target === e.currentTarget) onClose();
411
- }}
412
- >
413
- {/* eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions -- Escape from anywhere in the dialog */}
414
- <div
415
- ref={dialogRef}
416
- role="dialog"
417
- aria-modal="true"
418
- aria-label={dialogName}
419
- // The trap's fallback target when the field is not there to take focus.
420
- tabIndex={-1}
421
- // Escape bubbling up from anything inside — a dialog is where it belongs.
422
- onKeyDown={onDialogKeyDown}
423
- data-fullscreen={isPhone || undefined}
424
- className={cn(
425
- "flex w-full flex-col overflow-hidden bg-surface outline-none",
426
- isPhone ? "h-full" : "max-h-[70vh] max-w-xl rounded-xl border border-subtle shadow-2xl",
427
- )}
428
- // Full screen means edge to edge, so the notch, the home indicator and the
429
- // rounded corners are the panel's to keep clear of.
430
- style={
431
- isPhone
432
- ? {
433
- paddingTop: "max(0px, env(safe-area-inset-top))",
434
- paddingBottom: "max(0px, env(safe-area-inset-bottom))",
435
- paddingLeft: "max(0px, env(safe-area-inset-left))",
436
- paddingRight: "max(0px, env(safe-area-inset-right))",
437
- }
438
- : undefined
439
- }
440
- >
441
- <div className="flex shrink-0 items-center gap-2 border-b border-subtle px-3">
442
- <Search className="size-4 shrink-0 text-placeholder" />
443
- <input
444
- ref={inputRef}
445
- role="combobox"
446
- aria-expanded
447
- aria-controls={listId}
448
- aria-activedescendant={flat[active] ? itemId(flat[active].id) : undefined}
449
- value={fieldText}
450
- onChange={(e) => (submitMode ? setDraft(e.target.value) : setQuery(e.target.value))}
451
- onKeyDown={onKeyDown}
452
- placeholder={l.placeholder}
453
- enterKeyHint={submitMode ? "search" : undefined}
454
- className={cn(
455
- "w-full bg-transparent py-3 outline-none placeholder:text-placeholder text-primary",
456
- // 16px on a phone, or iOS zooms the page in on focus — and on any other
457
- // touch screen too (a tablet's popover), FIELD_TOUCH_TEXT (§10.1).
458
- isPhone ? "text-base" : cn("text-sm", FIELD_TOUCH_TEXT),
459
- )}
460
- />
461
- {loading && <span className="shrink-0 text-caption text-placeholder">{l.loading}</span>}
462
- {fieldText !== "" && (
463
- <button
464
- type="button"
465
- aria-label={l.clear ?? DEFAULT_COMMAND_PALETTE_LABELS.clear}
466
- onClick={() => {
467
- commit("");
468
- // Clearing starts the next query far more often than it ends this one.
469
- inputRef.current?.focus();
470
- }}
471
- className="shrink-0 rounded p-1 text-placeholder hover:text-secondary"
472
- >
473
- <X className="size-4" />
474
- </button>
475
- )}
476
- {dirty && (
477
- <button
478
- type="button"
479
- aria-label={l.submit ?? DEFAULT_COMMAND_PALETTE_LABELS.submit}
480
- onClick={() => {
481
- commit(draft);
482
- inputRef.current?.focus();
483
- }}
484
- className="shrink-0 rounded p-1 text-secondary hover:text-primary"
485
- >
486
- <CornerDownLeft className="size-4" />
487
- </button>
488
- )}
489
- {isPhone && (
490
- <button
491
- type="button"
492
- onClick={onClose}
493
- className="-me-1 shrink-0 rounded px-1 py-2 text-sm text-secondary hover:text-primary"
494
- >
495
- {l.close ?? DEFAULT_COMMAND_PALETTE_LABELS.close}
496
- </button>
497
- )}
498
- </div>
499
-
500
- {/* The status lines sit outside the listbox: a listbox owns options and groups,
501
- and "No results" is neither. */}
502
- {failed && !loading && (
503
- <div role="alert" className="px-3 py-6 text-center text-sm text-muted">
504
- {l.error ?? DEFAULT_COMMAND_PALETTE_LABELS.error}
505
- </div>
506
- )}
507
- {/* `results`, not `flat`: a group whose only row is its "Searching…" line is not
508
- an empty result. */}
509
- {!failed && results.length === 0 && !loading && (
510
- <div className="px-3 py-6 text-center text-sm text-muted">{l.empty}</div>
511
- )}
512
- {/* Listbox grouping: each group is a `role="group"` named by its heading, and
513
- the list markup in between is presentational so the listbox's children are
514
- groups and options only — as a plain <li>/<ul> tree a reader announced
515
- "list, 2 items" between options and never tied the heading to its rows. */}
516
- <ul
517
- id={listId}
518
- ref={listRef}
519
- role="listbox"
520
- aria-label={dialogName}
521
- className="min-h-0 flex-1 overflow-y-auto py-1"
522
- >
523
- {groups.map(({ group, items }, groupIndex) => (
524
- <li key={group} role="presentation">
525
- <div
526
- id={groupId(groupIndex)}
527
- role="presentation"
528
- className="px-3 pb-0.5 pt-2 text-micro font-semibold uppercase tracking-wide text-placeholder"
529
- >
530
- {group}
531
- </div>
532
- <ul role="group" aria-labelledby={groupId(groupIndex)}>
533
- {items.map((item) => {
534
- if (item.kind === "status") {
535
- return (
536
- <li
537
- key={item.id}
538
- role="presentation"
539
- className={cn(
540
- "flex items-center gap-2.5 px-3 text-xs text-placeholder",
541
- comfortable ? "min-h-11 py-2.5" : "py-2",
542
- )}
543
- >
544
- {item.icon && (
545
- <span className="flex size-4 shrink-0 items-center justify-center">{item.icon}</span>
546
- )}
547
- <span className="min-w-0 flex-1 truncate">{item.label}</span>
548
- </li>
549
- );
550
- }
551
- const idx = flatIndex.get(item) ?? -1;
552
- const isActive = idx === active;
553
- const redact = item.redact ?? redactLabels;
554
- // Written once and worn by either tag below, so the anchor and the
555
- // button can never drift apart in looks or in listbox semantics.
556
- // `role="option"` on an <a href> is fine: the browser's middle-click
557
- // behaviour keys off the element, not the ARIA role.
558
- const shared = {
559
- id: itemId(item.id),
560
- role: "option" as const,
561
- "aria-selected": isActive,
562
- "data-index": idx,
563
- onMouseMove: () => setActive(idx),
564
- className: cn(
565
- "flex w-full items-center gap-2.5 px-3 text-start",
566
- comfortable ? "min-h-11 py-2.5 text-base" : "py-2 text-sm",
567
- isActive ? "bg-active text-primary" : "text-secondary",
568
- ),
569
- };
570
- const inner = (
571
- <>
572
- {item.icon && (
573
- <span className="flex size-4 shrink-0 items-center justify-center text-placeholder">
574
- {item.icon}
575
- </span>
576
- )}
577
- <span data-private={redact || undefined} className="min-w-0 flex-1 truncate">
578
- {item.label}
579
- </span>
580
- {item.hint && (
581
- <span data-private={redact || undefined} className="shrink-0 text-xs text-placeholder">
582
- {item.hint}
583
- </span>
584
- )}
585
- </>
586
- );
587
- return (
588
- <li key={item.id} role="presentation">
589
- {item.href ? (
590
- <a
591
- {...shared}
592
- href={item.href}
593
- draggable={false}
594
- onClick={(e) => {
595
- // A modified click belongs to the browser (feedback
596
- // #451) — and the palette deliberately stays OPEN for
597
- // it: ⌘-clicking three results in a row is the reason to
598
- // want this, and closing after the first would undo it.
599
- if (e.button !== 0 || e.metaKey || e.ctrlKey || e.shiftKey || e.altKey) return;
600
- e.preventDefault();
601
- choose(item);
602
- }}
603
- >
604
- {inner}
605
- </a>
606
- ) : (
607
- <button type="button" {...shared} onClick={() => choose(item)}>
608
- {inner}
609
- </button>
610
- )}
611
- </li>
612
- );
613
- })}
614
- </ul>
615
- </li>
616
- ))}
617
- </ul>
618
-
619
- {l.hint && <div className="border-t border-subtle px-3 py-1.5 text-caption text-placeholder">{l.hint}</div>}
620
- </div>
621
- </div>,
622
- document.body,
623
- );
624
- }
@@ -1,13 +0,0 @@
1
- // The English words of ./global-search, in a module with no component code: the English
2
- // catalogue (src/i18n/defaults.ts) imports them without the component, so `en` loads as one
3
- // chunk like the other languages (0.34, KS U8). ./global-search re-exports them.
4
-
5
- import type { GlobalSearchLabels } from "./global-search";
6
-
7
- export const DEFAULT_GLOBAL_SEARCH_LABELS: GlobalSearchLabels = {
8
- trigger: "Search",
9
- placeholder: "Search or jump to…",
10
- shortcut: (keys) => `Search (${keys})`,
11
- suggestions: "Try",
12
- results: "Results",
13
- };