@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,645 +0,0 @@
1
- import { useId, useRef, useState } from "react";
2
- import type { ComponentPropsWithoutRef, ReactNode, Ref } from "react";
3
- import { createPortal } from "react-dom";
4
- import { cn } from "../lib/cn";
5
- import { hasContent } from "../lib/presence";
6
- import { FIELD_BASE, FIELD_FLOATING_PAD, FIELD_INVALID } from "./field-base";
7
- import { Spinner } from "./spinner";
8
- import { useAnchoredPanel } from "../hooks/use-anchored-panel";
9
- import { takeEscape, useDismissLayer } from "../hooks/use-dismiss";
10
- import { isImeEnter } from "../lib/ime";
11
- import { isQuietFocus } from "../lib/quiet-focus";
12
- import { useAnchorDir } from "./use-anchor-dir";
13
- import {
14
- anchoredHeadingClass,
15
- ComboboxFieldLabel,
16
- DISABLED_ROW_CLASS,
17
- endHintRowProps,
18
- GroupedOptions,
19
- groupRuns,
20
- isOptionEnabled,
21
- stepEnabled,
22
- SUGGESTION_LIST_CLASS,
23
- suggestionRowClass,
24
- useActiveOptionScroll,
25
- useOptionSource,
26
- type ComboOption,
27
- } from "./combobox-core";
28
- import { DEFAULT_COMBOBOX_LABELS, useKitLabels } from "../i18n/kit-labels";
29
- import {
30
- EndHintRow,
31
- FieldCaption,
32
- LABEL_IN_ROW,
33
- LockedReason,
34
- mergeDescribedBy,
35
- StaticLabelRow,
36
- useFieldError,
37
- useFieldHint,
38
- useLockReason,
39
- type DisabledReasonDisplay,
40
- type FieldHelpProps,
41
- } from "./field-parts";
42
- import type { CommitScope } from "./write-lock";
43
-
44
- /**
45
- * `value`/`onChange` are the TEXT's, and `onSelect` is "a suggestion was taken" —
46
- * not the DOM's text-selection event — so the input's own spellings of those three
47
- * are omitted. Everything else reaches the `<input>`, the way it does on {@link Input}.
48
- */
49
- export interface AutocompleteProps<V extends string | number = string>
50
- extends
51
- Omit<
52
- ComponentPropsWithoutRef<"input">,
53
- "value" | "defaultValue" | "onChange" | "onSelect" | "children" | "type" | "size"
54
- >,
55
- FieldHelpProps {
56
- /** What is in the field. Controlled, and never reset by the component: opening,
57
- * closing and a failed lookup all leave it exactly as typed. */
58
- value: string;
59
- /** Every keystroke — and, with `fillOnSelect`, the label of a taken suggestion. */
60
- onChange: (text: string) => void;
61
- /** Suggestions the caller already has (e.g. from its own query hook). Narrowed by
62
- * the text unless `filter={false}`. An option with `disabled: true` is listed but
63
- * cannot be taken — see {@link ComboOption.disabled}. */
64
- options?: ComboOption<V>[];
65
- /** Or: fetch them. Debounced (`debounceMs`), race-safe, only at `minChars` and up,
66
- * never while the field is idle; a rejection shows `loadErrorLabel` and empties
67
- * the list rather than leaving the previous text's rows under it. */
68
- loadOptions?: (query: string) => Promise<ComboOption<V>[]>;
69
- /** Narrow `options` by label/sublabel substring. Default `true`. Pass `false` for
70
- * a list a server has already searched and ranked — it is shown as given. */
71
- filter?: boolean;
72
- /** External loading flag (a caller-side fetch), OR-ed with `loadOptions`'. */
73
- loading?: boolean;
74
- /** Below this many characters nothing is offered or fetched. Default 1: an empty
75
- * field asks nothing — focusing it is not a search. */
76
- minChars?: number;
77
- /** Quiet time before `loadOptions` runs. Default 300 ms — an ordinary typist's
78
- * inter-key interval is 150–250 ms, so the pickers' 150 fires on nearly every
79
- * letter, which a rate-limited geocoder cannot afford. */
80
- debounceMs?: number;
81
- /**
82
- * Whether the list MAY show — controlled. Omit (or pass `undefined`) and the field
83
- * decides: open while focused, until Escape, Tab or a taken row. `false` keeps it
84
- * shut whatever the user does, and stops `loadOptions` asking — keksdose's address
85
- * search, with its confirm map up, where it used to pass `minChars={Infinity}`.
86
- * `true` shows it even unfocused.
87
- *
88
- * Even open, the list only APPEARS when it has something to show (rows, or a
89
- * status line); `aria-expanded` follows what appears, not this flag.
90
- */
91
- open?: boolean;
92
- /** The field wants the list open or shut — focus, typing, ↓/↑ open it; blur,
93
- * Escape, Tab and taking a row shut it. Called on every change, controlled or not. */
94
- onOpenChange?: (open: boolean) => void;
95
- /**
96
- * `"sm"`: the 28px, 12px-type field of {@link Select}'s `size="sm"`, with the icon,
97
- * spinner and list rows scaled to match — for a card or toolbar whose buttons are
98
- * small. `"md"` (default) is the form field. Unlabelled only, as on `Select`: a
99
- * floating label needs the tall box, so a labelled field ignores `"sm"`.
100
- *
101
- * A NUMBER is still the native `size` attribute (the width in characters), passed
102
- * straight through.
103
- */
104
- size?: "sm" | "md" | number;
105
- /** A suggestion was taken (click, or Enter on the highlighted row). */
106
- onSelect?: (option: ComboOption<V>) => void;
107
- /**
108
- * Put the taken suggestion's label into the field (`onChange(label)`). Default
109
- * `true` — the free-text case, where the text IS the value and a suggestion only
110
- * completes it (an address field). Pass `false` where taking a row is an ACTION
111
- * and the field is only the search that found it; the text then stays as typed.
112
- */
113
- fillOnSelect?: boolean;
114
- /** A floating label, as on {@link Combobox} — a real `<label for>` on the input.
115
- * Names the field (`aria-labelledby`) unless an `aria-label` is given. */
116
- label?: ReactNode;
117
- /** Leading decoration inside the field (a pin, a magnifier). Decorative: the
118
- * label names the field. An `<svg>` child is sized by the field — 16px, or 14px
119
- * at `size="sm"` — so a lucide icon needs no class of its own. */
120
- icon?: ReactNode;
121
- /** Required and unanswered — {@link FIELD_INVALID}. */
122
- invalid?: boolean;
123
- /** What is wrong with the VALUE, as {@link Input}'s `error`: under the field, on
124
- * its `aria-describedby`, implies `invalid`. Not a failed lookup — that is
125
- * `loadErrorLabel`, shown in the list. */
126
- error?: ReactNode;
127
- /**
128
- * Standing advice — {@link Combobox}'s `hint`, so this field reads like every other
129
- * (keksdose K4): plain TEXT is a caption under the field on the input's
130
- * `aria-describedby`, before any error; a {@link FieldHint} "?" rides the label line,
131
- * or with no label sits at the field's end edge, outside the box. Not the list's
132
- * `status` line, which talks about the lookup, not the field.
133
- *
134
- * Pass it — even as `undefined` — on a field whose hint comes and goes (0.24): the
135
- * unlabelled field then keeps its end-hint row whether or not a "?" is in it, so the
136
- * `<input>` is never re-parented, and focus and caret survive the toggle. The rule
137
- * the rest of the family has had since 0.23 (and the fields since 0.22).
138
- */
139
- hint?: ReactNode;
140
- /**
141
- * The caller's own line in the list, replacing the automatic one (loading / failed
142
- * / no results). For what only the caller knows: "offline", "the address service
143
- * is switched off", a privacy note, the hint a caller-fetched list needs below its
144
- * own minimum. While set, the list opens even with no rows. Announced politely.
145
- */
146
- status?: ReactNode;
147
- /** Default: `combobox.noResults` from the {@link UiKitProvider}, else English. */
148
- emptyLabel?: string;
149
- /** Default: `combobox.loadError`. */
150
- loadErrorLabel?: string;
151
- /** Classes for the `<input>` itself; `className` styles the wrapper. */
152
- inputClassName?: string;
153
- /**
154
- * Why the field cannot be changed — {@link Button}'s `disabledReason`, the Combobox
155
- * family's write lock (keksdose G2, 0.23), for a field whose pick SAVES: an address
156
- * search whose taken row writes the address, a lookup that links a record.
157
- *
158
- * With a reason the input stays focusable and `aria-disabled`, is `readOnly` (the
159
- * settled grey FIELD_BASE gives a `[readonly]` field), opens no list and asks no
160
- * `loadOptions` — whatever `open` says — and nothing reaches `onChange`, `onSelect` or
161
- * `onOpenChange(true)`. Enter is swallowed, so a locked field does not submit the form
162
- * around it, and a caller's `onKeyDown` does not hear it; every other key still
163
- * reaches the caller (an Escape that closes its panel) and the caret. The reason is in
164
- * the kit {@link Tooltip} and on the input's `aria-describedby`. Wins over `disabled`.
165
- */
166
- disabledReason?: ReactNode;
167
- /**
168
- * This field COMMITS. Under a locked {@link WriteLockProvider} it is locked the
169
- * `disabledReason` way with the lock's reason (which wins over its own). A search
170
- * whose result is only draft state — the form's Save writes it — leaves this off and
171
- * stays live under the lock. No provider, or an unlocked one: no effect.
172
- */
173
- commit?: CommitScope;
174
- /** Where the reason shows — {@link Button}'s `disabledReasonDisplay`: a line under the
175
- * field at Large and on a touch screen by default, the tooltip otherwise (DUP-3). */
176
- disabledReasonDisplay?: DisabledReasonDisplay;
177
- /** The `<input>`. A React 19 ref prop since 0.34 (MOD-4, refactor audit 2026-10): it was
178
- * `forwardRef`, cast back to a generic function, with a `displayName` line beside it. */
179
- ref?: Ref<HTMLInputElement>;
180
- }
181
-
182
- /**
183
- * An inline, async-capable text field with a suggestion list under it — the
184
- * WAI-ARIA APG "editable combobox with list autocomplete".
185
- *
186
- * Two jobs, one control:
187
- * - **free text** (kastlan's address field): the text is the value, the list only
188
- * offers completions, and taking one fills the field (`fillOnSelect`, default);
189
- * - **search-then-act** (keksdose's address search): the text is a query, taking a
190
- * row calls `onSelect` and nothing is held (`fillOnSelect={false}`).
191
- *
192
- * How it differs from its siblings: {@link Combobox} is free text over a STATIC
193
- * string pool and opens on focus; {@link EntityCombobox} is a trigger holding an id.
194
- * This one keeps no value of its own, never resets the text, asks nothing below
195
- * `minChars`, and reports a failed lookup instead of showing stale rows.
196
- *
197
- * Focus never leaves the `<input>`: `aria-activedescendant` names the highlighted
198
- * row, `aria-controls` the list, and a polite live region says what the list now
199
- * holds. Keyboard: ↓/↑ move (↓ opens) over every row but a `disabled` one, Enter
200
- * takes the highlighted row (with none,
201
- * Enter is left to the form), Escape closes, Tab closes and moves on; Home/End stay
202
- * with the caret. An Escape that closes an open list is consumed and never reaches the
203
- * caller; with the list closed it does. For every other key a caller's `onKeyDown`
204
- * runs first and may `preventDefault()` to
205
- * keep a key for itself.
206
- *
207
- * The list is portalled and anchored under the field on every screen size: the
208
- * field already carries the keyboard, and `useAnchoredPanel` keeps the list clear
209
- * of it on a phone. There is no full-screen sheet as {@link Combobox} has.
210
- *
211
- * Generic over the option value (`ComboOption<V>`); the ref is the `<input>`'s.
212
- */
213
- export function Autocomplete<V extends string | number = string>(props: AutocompleteProps<V>) {
214
- const {
215
- ref,
216
- value,
217
- onChange,
218
- options,
219
- loadOptions,
220
- filter,
221
- loading,
222
- minChars = 1,
223
- debounceMs = 300,
224
- onSelect,
225
- fillOnSelect = true,
226
- label,
227
- icon,
228
- invalid,
229
- error,
230
- hint,
231
- help,
232
- status,
233
- emptyLabel,
234
- loadErrorLabel,
235
- open: openProp,
236
- onOpenChange,
237
- size,
238
- className,
239
- inputClassName,
240
- id,
241
- disabled,
242
- disabledReason,
243
- disabledReasonDisplay,
244
- commit,
245
- onKeyDown,
246
- onFocus,
247
- onBlur,
248
- "aria-label": ariaLabel,
249
- "aria-labelledby": ariaLabelledBy,
250
- "aria-describedby": ariaDescribedBy,
251
- ...rest
252
- } = props;
253
- const generated = useId();
254
- const fieldId = id ?? generated;
255
- // Off the GENERATED id: a caller's `id` is theirs to collide with.
256
- const listboxId = `${generated}-listbox`;
257
- const labelId = `${generated}-label`;
258
- const optionId = (index: number) => `${generated}-option-${index}`;
259
- const fieldRef = useRef<HTMLDivElement>(null);
260
- const labels = useKitLabels("combobox", DEFAULT_COMBOBOX_LABELS, {
261
- noResults: emptyLabel,
262
- loadError: loadErrorLabel,
263
- });
264
- const hintParts = useFieldHint(hint, ariaDescribedBy, { help, name: label ?? ariaLabel });
265
- // A form library's `aria-invalid` paints as well as announces (DUP-8: it only
266
- // announced, through the spread below).
267
- const field = useFieldError(error, invalid, hintParts.describedBy, rest["aria-invalid"]);
268
-
269
- /** The user's intent: the field is focused and the list has not been dismissed.
270
- * Whether anything SHOWS is decided below, from what there is to show. */
271
- const [ownOpen, setOwnOpen] = useState(false);
272
- // Controlled when the caller passes a boolean. The own state is kept up to date
273
- // either way, so a caller that controls only SOMETIMES (`open={confirming ? false :
274
- // undefined}`) hands back a field that is exactly as open as focus says it is.
275
- const open = openProp ?? ownOpen;
276
- // The field took the tour's quiet focus (§11.8) and has not opened since.
277
- const quietRef = useRef(false);
278
- const setOpen = (next: boolean) => {
279
- setOwnOpen(next);
280
- if (next !== open) onOpenChange?.(next);
281
- };
282
- const [active, setActive] = useState(-1);
283
- // The lock: focusable, `readOnly`, no list — see `disabledReason`. Folded into `live`,
284
- // so a locked field asks nothing and shows nothing even with `open` held true.
285
- const lock = useLockReason(commit, disabledReason);
286
- const locked = lock.locked;
287
- const live = open && !disabled && !locked;
288
- const { results, busy, failed, tooShort } = useOptionSource<V>({
289
- options,
290
- loadOptions,
291
- loading,
292
- filter,
293
- minChars,
294
- debounceMs,
295
- query: value,
296
- active: live,
297
- });
298
-
299
- const hasStatus = hasContent(status);
300
- // The visible line under the rows. Nothing below `minChars` unless the caller has
301
- // something to say — an empty field opening a box that says "type more" is noise.
302
- const statusLine: ReactNode = hasStatus
303
- ? status
304
- : tooShort
305
- ? null
306
- : busy && results.length === 0
307
- ? labels.loading
308
- : failed
309
- ? labels.loadError
310
- : !busy && results.length === 0
311
- ? labels.noResults
312
- : null;
313
- const expanded = live && (results.length > 0 || statusLine !== null);
314
- // A disabled row is never the keyboard's — not even when a list that changed under
315
- // the highlight put one there.
316
- const activeId = expanded && isOptionEnabled(results[active]) ? optionId(active) : undefined;
317
- useActiveOptionScroll(activeId);
318
- const { rect, top, bottom, maxHeight, above } = useAnchoredPanel(fieldRef, expanded, { preferredHeight: 256 });
319
- const dir = useAnchorDir(fieldRef, expanded);
320
-
321
- const close = () => {
322
- setOpen(false);
323
- setActive(-1);
324
- };
325
- // The list is a layer on the kit's Escape stack while it shows (Wave 2, DUP-1).
326
- useDismissLayer(expanded, close);
327
- const take = (o: ComboOption<V>) => {
328
- if (o.disabled || locked) return;
329
- if (fillOnSelect) onChange(o.label);
330
- onSelect?.(o);
331
- close();
332
- };
333
-
334
- const hasLabel = label !== undefined;
335
- // `size="sm"` is for an UNLABELLED field, as on Select: the floating label needs the
336
- // tall box. A number is the native attribute.
337
- const small = size === "sm" && !hasLabel;
338
- const nativeSize = typeof size === "number" ? size : undefined;
339
- // The caller's name wins; else the floating label, by reference so a non-string
340
- // label still names the field.
341
- const labelledBy = ariaLabel === undefined ? (ariaLabelledBy ?? (hasLabel ? labelId : undefined)) : undefined;
342
- // While locked the field sits in the reason's Tooltip — in a fragment with a hidden
343
- // copy of the reason, Button's anatomy; `block` so a full-width field stays full width.
344
- const withLock = (box: ReactNode) =>
345
- locked ? (
346
- <LockedReason lock={lock} display={disabledReasonDisplay} className="block">
347
- {box}
348
- </LockedReason>
349
- ) : (
350
- box
351
- );
352
-
353
- return (
354
- // `relative`: the floating label and the live region's `sr-only` both need a
355
- // local containing block.
356
- <div className={cn("relative", className)}>
357
- {/* A real <label for> (lenkbank), and still `aria-labelledby`'s target, so the
358
- name — and the listbox's, which borrows it — is exactly what it was. */}
359
- {hasLabel && hintParts.labelHint === undefined && (
360
- <ComboboxFieldLabel id={labelId} htmlFor={fieldId}>
361
- {label}
362
- </ComboboxFieldLabel>
363
- )}
364
- {/* `"hint" in props`: the family's 0.22 rule (see `endHintRowProps`) — passed at
365
- all, even as `undefined`, a hint keeps the unlabelled field's end-hint row, so
366
- a "?" coming and going never re-parents the <input> under the caret (0.24, the
367
- last of the family to get it; the siblings had it in 0.23). */}
368
- <EndHintRow {...endHintRowProps("hint" in props, hasLabel, hintParts.labelHint)}>
369
- {withLock(
370
- <div ref={fieldRef} className={cn("relative", locked && "cursor-not-allowed")}>
371
- {icon && (
372
- <span
373
- aria-hidden
374
- className={cn(
375
- "pointer-events-none absolute flex text-muted",
376
- small ? "start-2 [&>svg]:size-3.5" : "start-2.5 [&>svg]:size-4",
377
- // Labelled, the icon sits on the VALUE's line — the one line box below
378
- // FIELD_FLOATING_PAD's `pt-4` and the 1px border — not on the middle of
379
- // the box. Centred on the box it rose into the top strip and sat on the
380
- // label's first letters, which float at the same start inset. On the
381
- // value line it is beside what it describes, and the label keeps the
382
- // start edge every other label in the form's column shares.
383
- // At Large the label stands above the field and the strip is gone
384
- // (0.33, §10.17): the value's line is under FIELD_BASE's `py-2`.
385
- hasLabel
386
- ? "top-[calc(1rem+1px)] h-5 items-center large:top-[calc(0.5rem+1px)]"
387
- : "top-1/2 -translate-y-1/2",
388
- )}
389
- >
390
- {icon}
391
- </span>
392
- )}
393
- <input
394
- {...rest}
395
- ref={ref}
396
- id={fieldId}
397
- size={nativeSize}
398
- type="text"
399
- value={value}
400
- // Locked: focusable, `readOnly`, `aria-disabled` — see `disabledReason`.
401
- disabled={locked ? undefined : disabled}
402
- readOnly={locked || rest.readOnly}
403
- aria-disabled={locked || rest["aria-disabled"]}
404
- role="combobox"
405
- aria-autocomplete="list"
406
- aria-expanded={expanded}
407
- // Required by the role, and set while closed too, as on the siblings.
408
- aria-controls={listboxId}
409
- aria-activedescendant={activeId}
410
- aria-label={ariaLabel}
411
- aria-labelledby={labelledBy}
412
- aria-invalid={field.isInvalid || rest["aria-invalid"] || undefined}
413
- aria-describedby={mergeDescribedBy(field.describedBy, locked && lock.reasonId)}
414
- autoComplete="off"
415
- onFocus={(e) => {
416
- onFocus?.(e);
417
- // A locked field takes focus to say why, and opens nothing.
418
- if (locked) return;
419
- // The tour's focus on arrival (§11.8) looks nothing up: the list would
420
- // cover its card (0.50.1). A click, ArrowDown or typing opens it.
421
- if (isQuietFocus(e.currentTarget)) {
422
- quietRef.current = true;
423
- return;
424
- }
425
- // A seeded field (keksdose's `initialQuery`) is looked up as it is
426
- // focused; an empty one asks nothing, because of `minChars`.
427
- setOpen(true);
428
- }}
429
- // After a quiet focus, the person's click on the already-focused field
430
- // fires no `focus`: the click is their "open" instead.
431
- onClick={(e) => {
432
- rest.onClick?.(e);
433
- if (!quietRef.current || locked) return;
434
- quietRef.current = false;
435
- setOpen(true);
436
- }}
437
- onBlur={(e) => {
438
- quietRef.current = false;
439
- onBlur?.(e);
440
- close();
441
- }}
442
- onChange={(e) => {
443
- if (locked) return;
444
- onChange(e.target.value);
445
- setOpen(true);
446
- setActive(-1);
447
- }}
448
- onKeyDown={(e) => {
449
- // Locked: Enter is swallowed (no form submit, no caller's "search now");
450
- // every other key is the caller's and the caret's. No list to drive.
451
- if (locked) {
452
- if (e.key === "Enter") e.preventDefault();
453
- else onKeyDown?.(e);
454
- return;
455
- }
456
- // An Escape that closes the OPEN list is the list's, and is consumed before
457
- // the caller sees it. A caller whose Escape means "close the panel" (keksdose's
458
- // address search) otherwise closed the whole panel when the user only meant
459
- // to dismiss the suggestions — the opposite of what the docs promised.
460
- if (e.key === "Escape" && expanded && takeEscape(e)) return;
461
- onKeyDown?.(e);
462
- if (e.defaultPrevented) return;
463
- // Disabled rows are passed over; at either end the highlight stays put.
464
- if (e.key === "ArrowDown") {
465
- e.preventDefault();
466
- if (!open) setOpen(true);
467
- else setActive((i) => stepEnabled(results, i, 1));
468
- } else if (e.key === "ArrowUp") {
469
- e.preventDefault();
470
- if (!open) setOpen(true);
471
- // From "nothing highlighted", Up goes to the bottom, as the APG has it.
472
- else setActive((i) => stepEnabled(results, i < 0 ? results.length : i, -1));
473
- } else if (e.key === "Enter") {
474
- // No row highlighted: the text is the answer, and a form's own submit
475
- // is left alone. Nor is a row taken by the Enter that confirms an IME
476
- // composition, which is the IME's (BUG-9).
477
- if (expanded && activeId && !isImeEnter(e)) {
478
- e.preventDefault();
479
- take(results[active]);
480
- }
481
- } else if (e.key === "Tab") {
482
- close();
483
- }
484
- }}
485
- className={cn(
486
- FIELD_BASE,
487
- hasLabel && FIELD_FLOATING_PAD,
488
- // Select's `SELECT_SM` box: a fixed 28px, so the caller's line height
489
- // cannot grow it.
490
- small && "h-7 py-0 pe-2 ps-2 text-xs",
491
- icon ? (small ? "ps-7" : "ps-8") : undefined,
492
- busy && (small ? "pe-7" : "pe-9"),
493
- field.isInvalid && FIELD_INVALID,
494
- inputClassName,
495
- )}
496
- />
497
- {busy && live && (
498
- // Decorative: the live region below already says "Loading…".
499
- <span
500
- className={cn(
501
- "pointer-events-none absolute top-1/2 flex -translate-y-1/2",
502
- small ? "end-2" : "end-2.5",
503
- )}
504
- >
505
- <Spinner label={null} className={small ? "h-3.5 w-3.5" : "h-4 w-4"} />
506
- </span>
507
- )}
508
- </div>,
509
- )}
510
- </EndHintRow>
511
- {/* With a "?" the label shares the top strip with it, after the field so the "?"
512
- follows the control in the tab order (as on Input and Select). */}
513
- {hasLabel && hintParts.labelHint !== undefined && (
514
- <StaticLabelRow hint={hintParts.labelHint}>
515
- <ComboboxFieldLabel id={labelId} htmlFor={fieldId} className={LABEL_IN_ROW}>
516
- {label}
517
- </ComboboxFieldLabel>
518
- </StaticLabelRow>
519
- )}
520
- <FieldCaption parts={hintParts} />
521
- {field.errorEl}
522
- {/* The live region, kept mounted so a change IS an announcement: focus stays
523
- in the field, and without it a reader typed into a geocoder and heard only
524
- their own letters. The panel's visible line is aria-hidden in favour of
525
- this, which also carries the row count the eye reads off the list. */}
526
- <div role="status" aria-live="polite" className="sr-only">
527
- {!live
528
- ? null
529
- : statusLine !== null
530
- ? statusLine
531
- : results.length > 0
532
- ? labels.resultCount(results.length)
533
- : null}
534
- </div>
535
- {expanded &&
536
- rect &&
537
- typeof document !== "undefined" &&
538
- createPortal(
539
- <div
540
- // Every press inside the list keeps focus in the field — rows, the status
541
- // line, the scrollbar — or the input's blur would close the list first.
542
- role="presentation"
543
- // A kit layer, for the tour's layer order (0.50, docs/tours-harmonization.md §11.6).
544
- data-kit-layer=""
545
- // Portalled out of the form's `dir`; the field's is put back. The list is
546
- // exactly the field's width, so `left` places it in either direction.
547
- dir={dir}
548
- onMouseDown={(e) => e.preventDefault()}
549
- // The family's suggestion box (DUP-4), as a column: the list scrolls inside
550
- // it and the status line stays under the rows.
551
- className={cn(SUGGESTION_LIST_CLASS, "fixed z-50 flex flex-col overflow-hidden py-0")}
552
- // Flipped above, the list hangs from its bottom edge: three rows under a
553
- // 256 px cap, placed by `top`, floated ~176 px above the field (keksdose K1),
554
- // and the rows come and go as the user types.
555
- style={{ ...(above ? { bottom } : { top }), left: rect.left, width: rect.width, maxHeight }}
556
- >
557
- {results.length > 0 && (
558
- <ul
559
- id={listboxId}
560
- role="listbox"
561
- aria-label={ariaLabel}
562
- aria-labelledby={labelledBy}
563
- className="min-h-0 flex-1 overflow-y-auto py-1"
564
- >
565
- {/* One heading per group, a `role="group"` it names, as in the core panel
566
- (refactor audit 2026-10-30, INP-8), drawn by the same renderer: an
567
- option may appear once per group. */}
568
- <GroupedOptions
569
- runs={groupRuns(results, (o) => o.group)}
570
- listboxId={listboxId}
571
- rowKey={(o) => String(o.value)}
572
- headingClassName={(run) => anchoredHeadingClass(run)}
573
- row={(o, i) => (
574
- <li role="presentation">
575
- <button
576
- type="button"
577
- id={optionId(i)}
578
- role="option"
579
- // CHOSEN, never "highlighted" — the family's rule. This
580
- // field holds no value, so the only row that can be chosen
581
- // is the one whose label the text already is.
582
- aria-selected={fillOnSelect && o.label === value}
583
- // Listed, announced as unavailable, never taken: `take`
584
- // refuses it and the arrows pass it over.
585
- aria-disabled={o.disabled || undefined}
586
- tabIndex={-1}
587
- onClick={() => take(o)}
588
- onMouseEnter={() => {
589
- if (!o.disabled) setActive(i);
590
- }}
591
- className={cn(
592
- // The family's suggestion row (DUP-4): it hand-rolled its
593
- // own with a plain `truncate`, so a long address was cut at
594
- // Large, where Combobox's rows wrap (text size §10.17, T1).
595
- // A flex row here, for the icon and the two lines.
596
- suggestionRowClass(i === active && !o.disabled),
597
- "flex items-center gap-2",
598
- small && "py-1 text-xs",
599
- o.disabled && DISABLED_ROW_CLASS,
600
- o.group && "ps-6",
601
- )}
602
- >
603
- {o.icon && (
604
- <span aria-hidden className="shrink-0 text-muted">
605
- {o.icon}
606
- </span>
607
- )}
608
- <span className="min-w-0 flex-1">
609
- <span className="block truncate-until-large text-primary">{o.label}</span>
610
- {o.sublabel && (
611
- <span
612
- className={cn(
613
- "block truncate-until-large text-placeholder",
614
- small ? "text-caption" : "text-xs",
615
- )}
616
- >
617
- {o.sublabel}
618
- </span>
619
- )}
620
- </span>
621
- </button>
622
- </li>
623
- )}
624
- />
625
- </ul>
626
- )}
627
- {statusLine !== null && (
628
- // Visible, not live — the region above speaks for it.
629
- <div
630
- aria-hidden
631
- className={cn(
632
- small ? "px-3 py-1.5 text-xs" : "px-3 py-2 text-sm",
633
- failed && !hasStatus ? "text-danger" : "text-muted",
634
- results.length > 0 && "border-t border-subtle text-xs",
635
- )}
636
- >
637
- {statusLine}
638
- </div>
639
- )}
640
- </div>,
641
- document.body,
642
- )}
643
- </div>
644
- );
645
- }
@@ -1,10 +0,0 @@
1
- // The English words of ./breadcrumbs, 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). ./breadcrumbs re-exports them.
4
-
5
- import type { BreadcrumbsLabels } from "./breadcrumbs";
6
-
7
- export const DEFAULT_BREADCRUMBS_LABELS: BreadcrumbsLabels = {
8
- label: "Breadcrumb",
9
- showAll: "Show full path",
10
- };