@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,294 +0,0 @@
1
- import { useId, useMemo, useRef } from "react";
2
- import { createPortal } from "react-dom";
3
- import type { ComponentPropsWithoutRef, KeyboardEvent, ReactNode, Ref } from "react";
4
- import { X } from "lucide-react";
5
-
6
- import { cn } from "../lib/cn";
7
- import { mergeRefs } from "./field-parts";
8
- import { useBackdropClose } from "./modal";
9
- import { useBodyScrollLock } from "../hooks/use-body-scroll-lock";
10
- import { useOverlayHistory } from "../hooks/use-overlay-history";
11
- import { useCloseTransition } from "../hooks/use-close-transition";
12
- import { useFocusTrap } from "../hooks/use-focus-trap";
13
- import { runOwnKeyDown, takeEscape, useDismissLayer } from "../hooks/use-dismiss";
14
-
15
- /**
16
- * The padding around the dialog's scrolling body, as a CSS length (0.32,
17
- * docs/text-size-harmonization.md §10.11). Exported because a caller's sticky footer has
18
- * to reach across it: Chrome resolves a sticky offset against the scrollport's CONTENT
19
- * box, so a pinned row sits this far short of the panel's edge unless it cancels it
20
- * (keksdose's editor footer). In rem, so it grows with the text size — keksdose's px
21
- * copy (`SCROLLER_GUTTER_PX = 12`) was 3–6 px off at 125/150 %. Use it in `calc()`:
22
- * `bottom: calc(${inset}px - ${DIALOG_GUTTER})`.
23
- */
24
- export const DIALOG_GUTTER = "0.75rem";
25
-
26
- /**
27
- * Named and exported, because `ComponentProps<typeof FullBleedDialog>` was the only way
28
- * to say "the props of this" and five call sites across keksdose and kastlan had already
29
- * written one (audit §api-design).
30
- *
31
- * It extends the `<div>` attributes so a caller can reach the OUTER element — the one
32
- * carrying `role="dialog"`, and therefore the one an `aria-label`, an
33
- * `aria-describedby` or a `data-tour` anchor belongs on. {@link className} keeps going
34
- * to the panel inside it, which is what it has always meant here.
35
- */
36
- export interface FullBleedDialogProps extends Omit<ComponentPropsWithoutRef<"div">, "title"> {
37
- open: boolean;
38
- /** The X, the backdrop (where one shows) and — unless {@link backCloses} is off —
39
- * the platform Back gesture all call this. */
40
- onClose: () => void;
41
- /**
42
- * The dialog's HEADING: rendered as a real `h2` (see {@link headingAs}) at the start
43
- * of the header strip, and wired to the dialog's `aria-labelledby`, so the dialog is
44
- * announced by name rather than as just "dialog".
45
- *
46
- * Before this the strip was a styled `div`, and a caller that wanted its full-screen
47
- * phone editor NAMED had to leave this component for `DialogFrame fullBleed` —
48
- * keksdose's budget-table phone editor says so in a comment at the call site. A
49
- * caller's own `aria-label` / `aria-labelledby` still wins.
50
- */
51
- title?: ReactNode;
52
- /** The heading level of {@link title}. `h2` by default, as `DialogFrame`'s. */
53
- headingAs?: "h1" | "h2" | "h3" | "h4";
54
- /**
55
- * Free content for the header strip, beside the close button — after the
56
- * {@link title} when there is one, or on its own (the row editor shows the row's
57
- * own first cell here). It does not name the dialog; `title` does.
58
- */
59
- header?: ReactNode;
60
- closeLabel: string;
61
- children: ReactNode;
62
- /**
63
- * Push a history entry so Back dismisses this dialog instead of navigating
64
- * (Keksdose feedback #172). On by default, because a full-screen form that ignores
65
- * the phone's universal "go back" gesture does not merely fail to close — the
66
- * navigation lands somewhere else with the form still notionally open.
67
- *
68
- * **Off for a caller whose open state is already in the URL.** The transactions
69
- * create card is `?action=new`, so Back already pops it through the router; a
70
- * sentinel on top of that would cost two presses to close one dialog. One owner of
71
- * the Back press, always.
72
- */
73
- backCloses?: boolean;
74
- /** Extra classes for the PANEL (not the backdrop). */
75
- className?: string;
76
- /**
77
- * A row pinned under the scrolling body — an Apply, a Save. Keksdose's `RangeSheet`
78
- * (reports/report-range-field.tsx) is a hand-rolled copy of this dialog for want of
79
- * exactly this slot: a date range picked on a phone is committed by a sticky Apply,
80
- * and a button at the end of the body scrolls away with the calendar.
81
- *
82
- * Outside the scroller, so it stays put without `position: sticky` (which would
83
- * need the body to be the scroll container of its own child and paint over the
84
- * last field); padded for the home indicator, since it is the panel's bottom edge.
85
- */
86
- footer?: ReactNode;
87
- /** The `role="dialog"` element, where the rest of the props go (0.34, API-2, refactor
88
- * audit 2026-10) — merged with its own ref, which the focus trap holds. */
89
- ref?: Ref<HTMLDivElement>;
90
- }
91
-
92
- /**
93
- * The phone's full-screen dialog: a panel that covers the viewport edge to edge.
94
- *
95
- * Not {@link Modal}, and that is a decision rather than an omission. Keksdose feedback
96
- * #32: the inset panel #204 shipped left a strip of page showing beside it on a phone,
97
- * and tapping that strip dismissed a form mid-edit. With no backdrop exposed there is
98
- * nothing to mis-tap, so the X is the way out — `backdropClose` stays wired for any
99
- * layout that does leave a backdrop visible, and costs nothing where none is.
100
- *
101
- * ## Why it is a component
102
- *
103
- * It was markup inside `data-table.tsx`, where it is the phone's row EDITOR. Keksdose
104
- * live #307's follow-up needed the same shell for the transactions CREATE card —
105
- * *"Is the creation window of the tx still different than the edit window? Since the tx
106
- * list still appears below when scrolling down?"* — and the two answers to that are
107
- * either one component or two copies that drift. Every previous convergence in that app
108
- * drifted the moment a second surface was written beside the first, which is what
109
- * `field-layer-parity` exists to catch one layer down.
110
- *
111
- * So the panel, the header strip, the scrolling body, the body-scroll lock and the Back
112
- * handling are all here, once.
113
- *
114
- * ## What the caller still owns
115
- *
116
- * The HEADER's content, because the two callers name themselves differently: the row
117
- * editor shows the row's own first column, the create card a plain title. A plain
118
- * title belongs in `title`, which is a real heading and the dialog's name; `header`
119
- * stays the free slot beside it. And `open`,
120
- * because who decides is the caller's business — see {@link backCloses}.
121
- */
122
- export function FullBleedDialog({
123
- open,
124
- onClose,
125
- title,
126
- headingAs: Heading = "h2",
127
- header,
128
- closeLabel,
129
- children,
130
- backCloses = true,
131
- className,
132
- footer,
133
- onMouseDown,
134
- onMouseUp,
135
- onKeyDown,
136
- ref,
137
- ...rest
138
- }: FullBleedDialogProps) {
139
- // Every way OUT goes through `requestClose`, so the panel lowers itself before the
140
- // caller unmounts it (live #320 rework). `onClose` is still what finally runs — this
141
- // only delays it by the length of the animation.
142
- const { closing, requestClose } = useCloseTransition(onClose);
143
- const backdropClose = useBackdropClose(requestClose);
144
- // The page behind must not scroll or jump under the overlay (feedback #204).
145
- useBodyScrollLock(open);
146
- useOverlayHistory(open && backCloses, requestClose);
147
-
148
- const dialogRef = useRef<HTMLDivElement>(null);
149
- const setDialog = useMemo(() => mergeRefs(dialogRef, ref), [ref]);
150
- const titleId = useId();
151
- const hasTitle = title !== undefined && title !== null && title !== false;
152
- const hasHeader = header !== undefined && header !== null && header !== false;
153
- // The half of "modal" this dialog was only claiming. It has said
154
- // `aria-modal="true"` since it was extracted from `data-table.tsx`, which tells
155
- // assistive technology to hide everything outside it — while the user's focus stayed
156
- // on the row they tapped, in the part that is now hidden. Tab then walked them
157
- // through a table the screen reader would not describe, and on a phone this dialog
158
- // covers the whole screen, so there was nothing on screen to say where they were.
159
- //
160
- // `initialFocus` is left at the default — the dialog itself, not the first field.
161
- // This is the phone's row EDITOR and its first child is usually an input; focusing it
162
- // would pull the software keyboard up over half the form before the user has said
163
- // which field they came for. `Modal` made the same call for the same reason.
164
- //
165
- // That default only decides when nothing inside asked for focus. A field the app
166
- // autofocuses on purpose keeps it (0.33.1): keksdose's create card autofocuses its
167
- // amount, and the trap used to take focus straight back to the dialog — and on a
168
- // phone the numpad sheet, which shows only while the field is focused, went with it
169
- // (live #402). Closing still hands focus back to whatever opened the dialog.
170
- useFocusTrap(dialogRef, { active: open });
171
-
172
- // A layer on the Escape stack while open (Wave 2, DUP-1). This dialog is what a
173
- // `PickerSheet`, a list or the numpad opens on top of, and the stack hands the key
174
- // to whichever of them is topmost — one press dismissing the sheet AND the edit
175
- // behind it was Keksdose live #309 (*"Mouse Back does not only close the select but
176
- // also the whole edit or create dialog"*) on a different key.
177
- const layer = useDismissLayer(open, requestClose);
178
- const handleKeyDown = (e: KeyboardEvent<HTMLDivElement>) => {
179
- // The caller's handler first (keksdose's transaction-search keeps its list keys on
180
- // the dialog); a `preventDefault()` IN THAT HANDLER claims Escape. Only there: a
181
- // descendant's does not count. A SearchField in the header prevents Escape to stop
182
- // Chromium clearing a type=search input, and in 0.8.0 that silently stopped Escape
183
- // from closing the dialog (keksdose). The one rule `Modal` now shares — as is this
184
- // one: the handler sees Escape only while this dialog is the layer on top (0.35).
185
- runOwnKeyDown(e, onKeyDown, layer);
186
- takeEscape(e);
187
- };
188
-
189
- if (!open || typeof document === "undefined") return null;
190
-
191
- return createPortal(
192
- /* eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions -- the dialog
193
- container, per the APG dialog pattern: `onKeyDown` is Escape-to-close for whatever
194
- inside it holds focus, and the mouse handlers are the backdrop press (Escape and the
195
- close button are its keyboard path). */
196
- <div
197
- // `animate-overlay` on the backdrop and `animate-sheet` on the panel (live #320):
198
- // the backdrop fades, the panel rises from the bottom edge it is anchored to.
199
- // Both are no-ops under prefers-reduced-motion — see tokens.css.
200
- //
201
- // …and the same two backwards while `closing`, which is the #320 rework. The
202
- // backdrop keeps taking pointer events on the way out: a tap during those 220ms
203
- // is a tap on a dialog that is leaving, and letting it through to the row
204
- // underneath would open a second one.
205
- //
206
- // `...rest` first, the dialog's own contract after it. A caller adding a
207
- // `data-tour` anchor must not be able to take away the role, the modality or the
208
- // `tabIndex` below by passing one of them too — this is the element the focus
209
- // trap holds, and each of those failures is invisible on screen.
210
- {...rest}
211
- // A kit layer, for the tour's layer order (0.50, docs/tours-harmonization.md §11.6):
212
- // a backdrop, so the tour measures the panel inside it to tell a full-screen sheet.
213
- data-kit-layer="backdrop"
214
- className={cn(
215
- "fixed inset-0 z-50 flex items-stretch justify-center bg-black/40 outline-none",
216
- closing ? "animate-overlay-out" : "animate-overlay",
217
- )}
218
- role="dialog"
219
- aria-modal="true"
220
- // The heading names the dialog unless the caller named it some other way — an
221
- // `aria-labelledby` of its own, or an `aria-label` (which a `labelledby` would
222
- // silently outrank).
223
- aria-labelledby={rest["aria-labelledby"] ?? (hasTitle && !rest["aria-label"] ? titleId : undefined)}
224
- // `tabIndex={-1}` is what makes the line above more than a claim: without it the
225
- // container cannot take focus and `useFocusTrap` silently does nothing.
226
- tabIndex={-1}
227
- ref={setDialog}
228
- onKeyDown={handleKeyDown}
229
- // COMPOSED with the backdrop's, not overridden by them. These two used to ride
230
- // `...rest` and then lose to `{...backdropClose}` spread after it, silently —
231
- // and the one caller about to pass one is keksdose's RangeSheet, whose
232
- // `onMouseDown={(e) => e.stopPropagation()}` is its dev#477 fix: a press in a
233
- // portalled sheet must not reach a document-level "outside click" listener,
234
- // which would unmount the day cell before its `click`. The caller's runs first;
235
- // the backdrop's still runs after it, since it is the same element.
236
- onMouseDown={(e) => {
237
- onMouseDown?.(e);
238
- backdropClose.onMouseDown(e);
239
- }}
240
- onMouseUp={(e) => {
241
- onMouseUp?.(e);
242
- backdropClose.onMouseUp(e);
243
- }}
244
- >
245
- <div
246
- className={cn(
247
- "flex h-full w-full flex-col overflow-hidden bg-surface shadow-xl",
248
- closing ? "animate-sheet-out" : "animate-sheet",
249
- className,
250
- )}
251
- >
252
- <div className="flex items-center justify-between gap-2 border-b border-subtle px-3 py-3">
253
- {hasTitle ? (
254
- <div className="flex min-w-0 flex-1 items-center gap-2">
255
- <Heading id={titleId} className="min-w-0 break-words text-base font-semibold leading-snug text-primary">
256
- {title}
257
- </Heading>
258
- {hasHeader && <div className="min-w-0 flex-1 font-medium">{header}</div>}
259
- </div>
260
- ) : (
261
- <div className="min-w-0 flex-1 font-medium">{header}</div>
262
- )}
263
- <button
264
- type="button"
265
- onClick={requestClose}
266
- aria-label={closeLabel}
267
- className="-me-1 shrink-0 rounded p-1.5 text-muted hover:bg-hover hover:text-secondary"
268
- >
269
- <X className="size-5" />
270
- </button>
271
- </div>
272
- {/* DIALOG_GUTTER (0.75rem, the px-3 py-3 it was), not px-4: every pixel of
273
- chrome here is width the form fields lose on a phone (feedback #32). The
274
- body is the only thing that scrolls, so the header stays put and the page
275
- underneath cannot move at all. */}
276
- {/* `min-h-0` so it is the BODY that gives way to a footer, not the footer that
277
- is pushed off the bottom edge. */}
278
- <div className="min-h-0 flex-1 overflow-y-auto overscroll-contain" style={{ padding: DIALOG_GUTTER }}>
279
- {children}
280
- </div>
281
- {footer !== undefined && footer !== null && footer !== false && (
282
- <div
283
- data-full-bleed-footer=""
284
- className="flex shrink-0 flex-wrap items-center justify-end gap-2 border-t border-subtle px-3 pt-3"
285
- style={{ paddingBottom: "max(0.75rem, env(safe-area-inset-bottom))" }}
286
- >
287
- {footer}
288
- </div>
289
- )}
290
- </div>
291
- </div>,
292
- document.body,
293
- );
294
- }
@@ -1,184 +0,0 @@
1
- import { useCallback, useId, useMemo } from "react";
2
- import type { ComponentPropsWithoutRef, ReactNode, Ref } from "react";
3
- import { ChevronDown } from "lucide-react";
4
- import { cn } from "../lib/cn";
5
- import { matchesSearch, searchWords } from "../lib/text-match";
6
- import { ComboboxPanel, useComboboxCore, type ComboOption } from "./combobox-core";
7
- import { assignRef } from "./field-parts";
8
- import { DEFAULT_COMBOBOX_LABELS, useKitLabels, useKitLocale } from "../i18n/kit-labels";
9
-
10
- export interface PickerGroup {
11
- key: string;
12
- label: string;
13
- /** `icon` is an optional leading glyph, drawn before the label — the same slot
14
- * `ComboOption` has always had, so the two pickers can present one option set
15
- * the same way. Omitted, a row is exactly what it was: label only, with no
16
- * reserved space, so a list where nothing has an icon does not indent. */
17
- items: { key: string; label: string; icon?: ReactNode }[];
18
- }
19
-
20
- /**
21
- * `onSelect` is omitted from the div's own attributes because this component's
22
- * means "an item was chosen", not the DOM's "text was selected inside me" — two
23
- * different signatures under one name, and the kit's meaning is the one three apps
24
- * are written against.
25
- */
26
- export interface GroupedPickerProps extends Omit<ComponentPropsWithoutRef<"div">, "onSelect"> {
27
- groups: PickerGroup[];
28
- /** Face of the closed picker button. A string also names the trigger when no
29
- * `aria-label` does. */
30
- buttonLabel: ReactNode;
31
- /** Keys of the current selection, if any. */
32
- selected: { group: string; item: string } | null;
33
- onSelect: (groupKey: string, itemKey: string) => void;
34
- /** The filter box's prompt, and its accessible name. Default: `combobox.search` from
35
- * the {@link UiKitProvider}, else "Search". */
36
- filterPlaceholder?: string;
37
- /** The TRIGGER — the focusable `<button>` — as on every picker of the kit (MultiSelect,
38
- * CountrySelect, CurrencySelect), not the wrapper the rest of the props go on (0.34,
39
- * API-2, refactor audit 2026-10). */
40
- ref?: Ref<HTMLButtonElement>;
41
- }
42
-
43
- /** An item's value in the list: the group's key and the item's, which together are
44
- * unique where an item key alone is not (two groups may each have an "Other"). */
45
- const itemValue = (group: string, item: string) => `${group}\u0000${item}`;
46
-
47
- /** Panel picker for large grouped option sets: instead of one long flat
48
- * dropdown, the groups sit side by side as columns with their items listed
49
- * beneath (feedback #267/#276), narrowed by a filter box at the top (feedback
50
- * #267 rework). A query that matches a group's name keeps the whole group;
51
- * otherwise groups are reduced to their matching items.
52
- *
53
- * On the picker family's foundation since round 0.34 (Wave 2, DUP-4 + BUG-12):
54
- * `useComboboxCore` + `ComboboxPanel` in its `columns` layout. Its trigger promised a
55
- * dialog that was no dialog, and the choice showed by colour alone; it is a combobox over
56
- * a listbox now — one `role="group"` per column, named by its heading, the chosen item
57
- * `aria-selected` and checked — with the arrow keys, Enter, a named filter box, the live
58
- * result count, portal anchoring (dev#548) and, on a phone, the full-screen sheet
59
- * (live #200) in one column. */
60
- export function GroupedPicker({
61
- groups,
62
- buttonLabel,
63
- selected,
64
- onSelect,
65
- "aria-label": ariaLabel,
66
- filterPlaceholder,
67
- className,
68
- ref,
69
- ...rest
70
- }: GroupedPickerProps) {
71
- // `filter: false`: the filter below keeps a whole group when its name matches, so the
72
- // panel is handed the rows, as CountrySelect's are. Escape is the core's layer on the
73
- // kit's stack — this kept an Escape handler of its own on its panel (round 0.34 BUG-1),
74
- // and the stack is the one answer to it now (DUP-1). Back closes the list, as it did on
75
- // `useDropdown`.
76
- const core = useComboboxCore<string>({ filter: false, backCloses: true });
77
- const { open, setOpen, triggerRef, closeToTrigger, query } = core;
78
- // The core anchors the panel to the trigger and hands focus back to it; the caller's
79
- // `ref` wants the same element. One callback feeds both, as on MultiSelect.
80
- const setTrigger = useCallback(
81
- (el: HTMLButtonElement | null) => {
82
- triggerRef.current = el;
83
- assignRef(ref, el);
84
- },
85
- [ref, triggerRef],
86
- );
87
- const comboText = useKitLabels("combobox", DEFAULT_COMBOBOX_LABELS);
88
-
89
- // Folded as every kit list folds (DUP-5): the locale's case (the Turkish "İ" that
90
- // plain `toLowerCase` gets wrong), and now the accents too — "zurich" finds Zürich.
91
- const locale = useKitLocale();
92
- const results = useMemo(() => {
93
- // Every word of the query (0.51.4): all in the group's name keeps the whole group;
94
- // otherwise an item stays when each word is in its label or its group's name, so
95
- // "migros 8004" finds Migros' 8004 shop.
96
- const words = searchWords(query, locale);
97
- const kept =
98
- words.length > 0
99
- ? groups
100
- .map((g) =>
101
- matchesSearch(words, [g.label], locale)
102
- ? g
103
- : { ...g, items: g.items.filter((i) => matchesSearch(words, [g.label, i.label], locale)) },
104
- )
105
- .filter((g) => g.items.length > 0)
106
- : groups;
107
- return kept.flatMap((g) =>
108
- g.items.map((item): ComboOption<string> => ({
109
- value: itemValue(g.key, item.key),
110
- label: item.label,
111
- icon: item.icon,
112
- group: g.label,
113
- })),
114
- );
115
- }, [groups, query, locale]);
116
- // Back to keys for `onSelect`, by the value the row carries.
117
- const keysOf = useMemo(() => {
118
- const map = new Map<string, [string, string]>();
119
- for (const g of groups) for (const item of g.items) map.set(itemValue(g.key, item.key), [g.key, item.key]);
120
- return map;
121
- }, [groups]);
122
- const chosen = selected ? itemValue(selected.group, selected.item) : null;
123
-
124
- const listboxId = `${useId()}-listbox`;
125
- // The trigger's NAME: a combobox takes none from its content. The caller's
126
- // `aria-label`, as on every picker of the kit, else the face when it is text.
127
- const name = ariaLabel ?? (typeof buttonLabel === "string" ? buttonLabel : undefined);
128
-
129
- return (
130
- // `rest` goes on the wrapper, but the accessible NAME does not: this div is a
131
- // positioning box with no role, so a label parked on it would be announced by
132
- // nothing. It belongs to the control — the same split every picker in this wave
133
- // makes, and the reason `aria-label` is destructured out rather than left in
134
- // `rest`. Spread FIRST so the attributes below, each of them a fix with an
135
- // incident behind it, cannot be clobbered from outside.
136
- <div {...rest} className={cn("relative", className)}>
137
- <button
138
- ref={setTrigger}
139
- type="button"
140
- // A closed choice that expands into the list below — the role every trigger
141
- // picker in the kit wears. It said `aria-haspopup="dialog"` over a panel that was
142
- // no dialog (BUG-12).
143
- role="combobox"
144
- aria-haspopup="listbox"
145
- aria-controls={listboxId}
146
- aria-expanded={open}
147
- aria-label={name}
148
- onClick={() => setOpen((o) => !o)}
149
- // Down/Up opens the list from the closed trigger, per the APG.
150
- onKeyDown={(e) => {
151
- if (e.key === "ArrowDown" || e.key === "ArrowUp") {
152
- e.preventDefault();
153
- setOpen(true);
154
- }
155
- }}
156
- className="flex w-full items-center justify-between gap-2 rounded-md border border-strong bg-surface px-2.5 py-1.5 text-sm text-primary hover:bg-hover"
157
- >
158
- {/* The trigger's label and each item wrap from Large up (text size §10.17,
159
- round 0.34 T1: the sweep read "Choose a cat…" at 360 px / Extra large). */}
160
- <span className="truncate-until-large">{buttonLabel}</span>
161
- <ChevronDown className="size-4 shrink-0 text-placeholder" />
162
- </button>
163
- <ComboboxPanel
164
- core={{ ...core, results }}
165
- listboxId={listboxId}
166
- columns
167
- // As wide as four columns want (56rem), within the glass, from the trigger's
168
- // start — the panel it always was.
169
- width={{ minRem: 56 }}
170
- searchPlaceholder={filterPlaceholder ?? comboText.search}
171
- sheetTitle={ariaLabel ?? buttonLabel}
172
- isSelected={(v) => v === chosen}
173
- onChoose={(o) => {
174
- const keys = keysOf.get(o.value);
175
- if (keys) onSelect(keys[0], keys[1]);
176
- closeToTrigger();
177
- }}
178
- showCreate={false}
179
- onCreate={() => {}}
180
- createContent={null}
181
- />
182
- </div>
183
- );
184
- }
@@ -1,117 +0,0 @@
1
- import { useId } from "react";
2
- import type { ReactNode } from "react";
3
- import { HelpCircle } from "lucide-react";
4
- import { cn } from "../lib/cn";
5
- import type { RemLength } from "../hooks/use-breakpoint";
6
- import { FOCUS_RING } from "./focus-ring";
7
- import { Popover } from "./popover";
8
-
9
- /** {@link HelpPopover}'s props. */
10
- export interface HelpPopoverProps {
11
- /**
12
- * Names the "?" and the panel — a short question ("What do the statuses mean?") or
13
- * "About <field>" ("About the settlement date"), in the reader's language. Required:
14
- * a "?" named "?" tells a screen reader nothing about what it opens. Not the help
15
- * itself, which is `children`.
16
- */
17
- label: string;
18
- /** The help: a paragraph, or a few. Rendered in the panel at body size. */
19
- children: ReactNode;
20
- /** The panel's width — {@link Popover}'s `width`. Default `"20rem"`, a paragraph's
21
- * measure; it follows the text size and never exceeds the viewport. */
22
- width?: number | RemLength;
23
- /** Classes for the "?" button. */
24
- className?: string;
25
- }
26
-
27
- /** A paragraph's measure: 320 px at Normal, in rem so it grows with the text size. */
28
- const HELP_WIDTH: RemLength = "20rem";
29
-
30
- /**
31
- * A "?" whose HELP opens on a tap, a click or Enter — for a paragraph too long to print
32
- * under a field (0.34, keksdose K3, live #400: *"Remove the long text and move it behind
33
- * a clickable notice like a circle"*).
34
- *
35
- * **Help, not a fact** (docs/text-size-harmonization.md §10.23). {@link FieldHint} is
36
- * the "?" for a FACT — a format, a limit, a consequence — and since 0.32 it turns into
37
- * its own words under the field at Large and on a touch screen (`useInlineHint`, §4 "No
38
- * fact only in a tooltip"), because a fact a reader cannot reach is a fact they do not
39
- * have. That rule stays. This part is for HELP: why the field exists, how to choose,
40
- * what the options mean — text the field is usable without. Printed inline it was the
41
- * longest thing in keksdose's transaction form (four statuses, ~500 characters, on every
42
- * new row on a phone). `useInlineHint` turns only a FieldHint into a caption, so this
43
- * one stays on the label line at every size.
44
- *
45
- * **On a field: its `help`** (0.36, round 0.36 decision 1). Every kit field that takes a
46
- * `hint` takes a `help` beside it, and the `@eifi1/ui-kit/rhf` bindings too: pass the
47
- * help's words and the field draws this "?" on its label line (an unlabelled one at its
48
- * end edge, outside the box), named "About “<label>”" — or pass a HelpPopover to name it
49
- * yourself. `hint` stays the FACT, printed under the field; while `help` is set a
50
- * FieldHint there draws no "?" of its own, so the field has one. Passed as `hint`, as in
51
- * 0.34, it still rides the label line. It also stands on its own, beside a heading or a
52
- * column title.
53
- *
54
- * **A popover, not a tooltip**: a tooltip bubble is for a line, and opens on hover a
55
- * finger never makes. This is the kit {@link Popover}: it opens and closes on a tap or a
56
- * click (and on Enter or Space, as any button does), closes on Escape and on a press
57
- * outside, and takes the focus into its panel and gives it back to the "?" on close. The
58
- * panel is a `dialog` named by `label` and described by the help, so a screen reader
59
- * reads both on opening. The "?" says `aria-expanded` and `aria-haspopup="dialog"`.
60
- *
61
- * **"?" rather than "!"**: it answers a question ("what is the difference between
62
- * accepted and cleared?", keksdose live #247); "!" is a warning.
63
- *
64
- * ```tsx
65
- * <Select label="Status" hint="Cleared and reconciled rows are locked." help={
66
- * <HelpPopover label="What do the statuses mean?">
67
- * Pending: … Accepted: … Cleared: … Reconciled: …
68
- * </HelpPopover>
69
- * } … />
70
- * ```
71
- */
72
- export function HelpPopover({ label, children, width = HELP_WIDTH, className }: HelpPopoverProps) {
73
- const panelId = useId();
74
- const bodyId = useId();
75
- return (
76
- <Popover
77
- width={width}
78
- panelId={panelId}
79
- // The panel is named by the question and described by the answer, so focus moving
80
- // into it reads both.
81
- aria-label={label}
82
- aria-describedby={bodyId}
83
- trigger={({ open, toggle, ref }) => (
84
- <button
85
- ref={ref}
86
- // Never `submit`: the "?" sits on a field's label line, inside a form.
87
- type="button"
88
- aria-label={label}
89
- aria-expanded={open}
90
- aria-haspopup="dialog"
91
- aria-controls={open ? panelId : undefined}
92
- onClick={(e) => {
93
- // The "?" sits in a label strip: the press is the "?"'s, not the field's.
94
- e.preventDefault();
95
- toggle();
96
- }}
97
- // FieldHint's look, so the two marks read as one family on a label line; the
98
- // open one holds its hover colour while its panel shows.
99
- className={cn(
100
- "flex rounded-full text-placeholder transition-colors hover:text-secondary",
101
- open && "text-secondary",
102
- FOCUS_RING,
103
- className,
104
- )}
105
- >
106
- <HelpCircle aria-hidden className="size-3.5" />
107
- </button>
108
- )}
109
- >
110
- {() => (
111
- <div id={bodyId} className="space-y-2 text-sm leading-snug text-primary">
112
- {children}
113
- </div>
114
- )}
115
- </Popover>
116
- );
117
- }