@eifi1/ui-kit 0.53.0 → 0.55.0

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