@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,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
- };