@eifi1/ui-kit 0.51.7 → 0.52.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 (746) hide show
  1. package/README.md +141 -23
  2. package/dist/account/account-parts.d.ts +10 -8
  3. package/dist/account/account-parts.js +1 -18
  4. package/dist/account/account-parts.js.map +1 -1
  5. package/dist/account/data-export-setting-labels.js +1 -1
  6. package/dist/account/data-export-setting-labels.js.map +1 -1
  7. package/dist/account/delete-account-setting-labels.js +1 -1
  8. package/dist/account/delete-account-setting-labels.js.map +1 -1
  9. package/dist/account/email-change-setting-labels.js +1 -1
  10. package/dist/account/email-change-setting-labels.js.map +1 -1
  11. package/dist/account/passkeys-setting.d.ts +9 -2
  12. package/dist/account/passkeys-setting.js +41 -29
  13. package/dist/account/passkeys-setting.js.map +1 -1
  14. package/dist/account/sessions-setting.d.ts +3 -2
  15. package/dist/account/sessions-setting.js +10 -8
  16. package/dist/account/sessions-setting.js.map +1 -1
  17. package/dist/admin/admin-action-confirm.js +1 -3
  18. package/dist/admin/admin-action-confirm.js.map +1 -1
  19. package/dist/admin/admin-parts.d.ts +6 -3
  20. package/dist/admin/admin-parts.js +6 -21
  21. package/dist/admin/admin-parts.js.map +1 -1
  22. package/dist/admin/mail-test-card-labels.js +1 -1
  23. package/dist/admin/mail-test-card-labels.js.map +1 -1
  24. package/dist/admin/plan-change-labels.d.ts +2 -2
  25. package/dist/admin/plan-change-labels.js +1 -17
  26. package/dist/admin/plan-change-labels.js.map +1 -1
  27. package/dist/admin/plan-change.d.ts +3 -42
  28. package/dist/admin/plan-change.js +1 -1
  29. package/dist/admin/plan-change.js.map +1 -1
  30. package/dist/admin/reviewer-scope-editor.js +3 -3
  31. package/dist/admin/reviewer-scope-editor.js.map +1 -1
  32. package/dist/auth/auth-errors-labels.d.ts +11 -0
  33. package/dist/auth/auth-errors-labels.js +13 -0
  34. package/dist/auth/auth-errors-labels.js.map +1 -0
  35. package/dist/auth/auth-errors.d.ts +7 -23
  36. package/dist/auth/auth-errors.js +2 -15
  37. package/dist/auth/auth-errors.js.map +1 -1
  38. package/dist/auth/complete-name-dialog.js +2 -1
  39. package/dist/auth/complete-name-dialog.js.map +1 -1
  40. package/dist/auth/forgot-password-form-labels.js +1 -1
  41. package/dist/auth/forgot-password-form-labels.js.map +1 -1
  42. package/dist/auth/forgot-password-form.js +7 -2
  43. package/dist/auth/forgot-password-form.js.map +1 -1
  44. package/dist/auth/register-form-labels.js +1 -1
  45. package/dist/auth/register-form-labels.js.map +1 -1
  46. package/dist/auth/reset-password-form-labels.js +1 -1
  47. package/dist/auth/reset-password-form-labels.js.map +1 -1
  48. package/dist/auth/reset-password-form.js +5 -1
  49. package/dist/auth/reset-password-form.js.map +1 -1
  50. package/dist/auth/sign-in-form-labels.js +1 -1
  51. package/dist/auth/sign-in-form-labels.js.map +1 -1
  52. package/dist/auth/status-parts.d.ts +0 -3
  53. package/dist/auth/status-parts.js +0 -4
  54. package/dist/auth/status-parts.js.map +1 -1
  55. package/dist/auth/verify-email-labels.js +1 -1
  56. package/dist/auth/verify-email-labels.js.map +1 -1
  57. package/dist/auth/verify-email.js +7 -2
  58. package/dist/auth/verify-email.js.map +1 -1
  59. package/dist/billing/cancel-subscription.d.ts +20 -8
  60. package/dist/billing/cancel-subscription.js +7 -5
  61. package/dist/billing/cancel-subscription.js.map +1 -1
  62. package/dist/billing/dialog-close.d.ts +29 -0
  63. package/dist/billing/dialog-close.js +8 -0
  64. package/dist/billing/dialog-close.js.map +1 -0
  65. package/dist/billing/plan-card.d.ts +14 -4
  66. package/dist/billing/plan-card.js +15 -8
  67. package/dist/billing/plan-card.js.map +1 -1
  68. package/dist/billing/plan-change-labels.d.ts +42 -0
  69. package/dist/billing/plan-change-labels.js +22 -0
  70. package/dist/billing/plan-change-labels.js.map +1 -0
  71. package/dist/billing/plan-switch.d.ts +19 -7
  72. package/dist/billing/plan-switch.js +8 -4
  73. package/dist/billing/plan-switch.js.map +1 -1
  74. package/dist/chart.d.ts +12 -0
  75. package/dist/chart.js +16 -1
  76. package/dist/chart.js.map +1 -1
  77. package/dist/components/account-chips.d.ts +5 -5
  78. package/dist/components/account-chips.js +11 -13
  79. package/dist/components/account-chips.js.map +1 -1
  80. package/dist/components/alert-banner.d.ts +16 -5
  81. package/dist/components/alert-banner.js +46 -1
  82. package/dist/components/alert-banner.js.map +1 -1
  83. package/dist/components/amount-input.d.ts +13 -0
  84. package/dist/components/amount-input.js +1 -0
  85. package/dist/components/amount-input.js.map +1 -1
  86. package/dist/components/autocomplete.js +57 -65
  87. package/dist/components/autocomplete.js.map +1 -1
  88. package/dist/components/bulk-action-bar.d.ts +12 -2
  89. package/dist/components/bulk-action-bar.js +65 -21
  90. package/dist/components/bulk-action-bar.js.map +1 -1
  91. package/dist/components/button-look.d.ts +5 -5
  92. package/dist/components/button-look.js.map +1 -1
  93. package/dist/components/button.d.ts +2 -2
  94. package/dist/components/button.js.map +1 -1
  95. package/dist/components/chart-edge.d.ts +16 -0
  96. package/dist/components/chart-edge.js +14 -1
  97. package/dist/components/chart-edge.js.map +1 -1
  98. package/dist/components/chart-figure.d.ts +13 -0
  99. package/dist/components/chart-figure.js +15 -0
  100. package/dist/components/chart-figure.js.map +1 -0
  101. package/dist/components/chart-zoom-core.js +1 -4
  102. package/dist/components/chart-zoom-core.js.map +1 -1
  103. package/dist/components/chart.d.ts +8 -1
  104. package/dist/components/chart.js +19 -10
  105. package/dist/components/chart.js.map +1 -1
  106. package/dist/components/combobox-core.d.ts +111 -2
  107. package/dist/components/combobox-core.js +148 -42
  108. package/dist/components/combobox-core.js.map +1 -1
  109. package/dist/components/combobox.d.ts +1 -1
  110. package/dist/components/combobox.js +141 -130
  111. package/dist/components/combobox.js.map +1 -1
  112. package/dist/components/copy-button.d.ts +6 -5
  113. package/dist/components/copy-button.js +5 -3
  114. package/dist/components/copy-button.js.map +1 -1
  115. package/dist/components/country-select.js +2 -2
  116. package/dist/components/country-select.js.map +1 -1
  117. package/dist/components/data-table-column-settings.d.ts +1 -1
  118. package/dist/components/data-table-column-settings.js +33 -7
  119. package/dist/components/data-table-column-settings.js.map +1 -1
  120. package/dist/components/data-table-filters.d.ts +4 -2
  121. package/dist/components/data-table-filters.js +2 -2
  122. package/dist/components/data-table-filters.js.map +1 -1
  123. package/dist/components/data-table-fit.d.ts +6 -4
  124. package/dist/components/data-table-fit.js +4 -1
  125. package/dist/components/data-table-fit.js.map +1 -1
  126. package/dist/components/data-table-groups.d.ts +1 -1
  127. package/dist/components/data-table-groups.js.map +1 -1
  128. package/dist/components/data-table-head.d.ts +1 -1
  129. package/dist/components/data-table-head.js +15 -12
  130. package/dist/components/data-table-head.js.map +1 -1
  131. package/dist/components/data-table-mobile.d.ts +12 -7
  132. package/dist/components/data-table-mobile.js +43 -30
  133. package/dist/components/data-table-mobile.js.map +1 -1
  134. package/dist/components/data-table-pagination.js +11 -6
  135. package/dist/components/data-table-pagination.js.map +1 -1
  136. package/dist/components/data-table-resize.d.ts +1 -1
  137. package/dist/components/data-table-resize.js.map +1 -1
  138. package/dist/components/data-table-row-actions.d.ts +2 -2
  139. package/dist/components/data-table-row-actions.js.map +1 -1
  140. package/dist/components/data-table-row.d.ts +6 -2
  141. package/dist/components/data-table-row.js +17 -10
  142. package/dist/components/data-table-row.js.map +1 -1
  143. package/dist/components/data-table-selection.d.ts +1 -1
  144. package/dist/components/data-table-selection.js.map +1 -1
  145. package/dist/components/data-table-shared.d.ts +10 -2
  146. package/dist/components/data-table-shared.js +18 -0
  147. package/dist/components/data-table-shared.js.map +1 -1
  148. package/dist/components/data-table-sort.d.ts +21 -2
  149. package/dist/components/data-table-sort.js +24 -0
  150. package/dist/components/data-table-sort.js.map +1 -1
  151. package/dist/components/data-table-virtual.d.ts +1 -1
  152. package/dist/components/data-table-virtual.js +18 -6
  153. package/dist/components/data-table-virtual.js.map +1 -1
  154. package/dist/components/data-table.d.ts +13 -4
  155. package/dist/components/data-table.js +139 -36
  156. package/dist/components/data-table.js.map +1 -1
  157. package/dist/components/date-field.d.ts +24 -2
  158. package/dist/components/date-field.js +33 -8
  159. package/dist/components/date-field.js.map +1 -1
  160. package/dist/components/date-picker.d.ts +15 -2
  161. package/dist/components/date-picker.js +55 -26
  162. package/dist/components/date-picker.js.map +1 -1
  163. package/dist/components/date-range-picker.d.ts +47 -20
  164. package/dist/components/date-range-picker.js +23 -7
  165. package/dist/components/date-range-picker.js.map +1 -1
  166. package/dist/components/error-boundary.js +37 -30
  167. package/dist/components/error-boundary.js.map +1 -1
  168. package/dist/components/{ui-labels.d.ts → field-base-labels.d.ts} +0 -2
  169. package/dist/components/{ui-labels.js → field-base-labels.js} +2 -9
  170. package/dist/components/field-base-labels.js.map +1 -0
  171. package/dist/components/field-base.d.ts +4 -3
  172. package/dist/components/field-base.js +3 -3
  173. package/dist/components/field-base.js.map +1 -1
  174. package/dist/components/field-sync-labels.d.ts +1 -0
  175. package/dist/components/field-sync-labels.js.map +1 -1
  176. package/dist/components/field-sync.d.ts +23 -1
  177. package/dist/components/field-sync.js.map +1 -1
  178. package/dist/components/form-actions.js +11 -5
  179. package/dist/components/form-actions.js.map +1 -1
  180. package/dist/components/hover-menu.d.ts +3 -0
  181. package/dist/components/hover-menu.js +5 -3
  182. package/dist/components/hover-menu.js.map +1 -1
  183. package/dist/components/icon-button.js +14 -9
  184. package/dist/components/icon-button.js.map +1 -1
  185. package/dist/components/inline-confirm.d.ts +43 -0
  186. package/dist/components/inline-confirm.js +67 -0
  187. package/dist/components/inline-confirm.js.map +1 -0
  188. package/dist/components/inline-entity-combobox.d.ts +4 -3
  189. package/dist/components/inline-entity-combobox.js +148 -140
  190. package/dist/components/inline-entity-combobox.js.map +1 -1
  191. package/dist/components/input.js +1 -1
  192. package/dist/components/input.js.map +1 -1
  193. package/dist/components/jump-calendar.js +28 -112
  194. package/dist/components/jump-calendar.js.map +1 -1
  195. package/dist/components/legal-page.d.ts +3 -1
  196. package/dist/components/legal-page.js +3 -2
  197. package/dist/components/legal-page.js.map +1 -1
  198. package/dist/components/legal.d.ts +4 -2
  199. package/dist/components/legal.js.map +1 -1
  200. package/dist/components/lightbox.d.ts +2 -2
  201. package/dist/components/lightbox.js +17 -6
  202. package/dist/components/lightbox.js.map +1 -1
  203. package/dist/components/list.d.ts +6 -2
  204. package/dist/components/list.js +3 -2
  205. package/dist/components/list.js.map +1 -1
  206. package/dist/components/measured-grid.d.ts +1 -1
  207. package/dist/components/measured-grid.js +2 -1
  208. package/dist/components/measured-grid.js.map +1 -1
  209. package/dist/components/mini-calendar.js +3 -5
  210. package/dist/components/mini-calendar.js.map +1 -1
  211. package/dist/components/modal.js +3 -1
  212. package/dist/components/modal.js.map +1 -1
  213. package/dist/components/month-grid.d.ts +55 -0
  214. package/dist/components/month-grid.js +148 -0
  215. package/dist/components/month-grid.js.map +1 -0
  216. package/dist/components/month-picker.d.ts +36 -4
  217. package/dist/components/month-picker.js +123 -146
  218. package/dist/components/month-picker.js.map +1 -1
  219. package/dist/components/multi-select.d.ts +2 -2
  220. package/dist/components/multi-select.js +11 -6
  221. package/dist/components/multi-select.js.map +1 -1
  222. package/dist/components/picker-sheet.js +2 -1
  223. package/dist/components/picker-sheet.js.map +1 -1
  224. package/dist/components/pie-chart-labels.d.ts +7 -0
  225. package/dist/components/pie-chart-labels.js +1 -0
  226. package/dist/components/pie-chart-labels.js.map +1 -1
  227. package/dist/components/pie-chart.d.ts +5 -3
  228. package/dist/components/pie-chart.js +7 -22
  229. package/dist/components/pie-chart.js.map +1 -1
  230. package/dist/components/popover.d.ts +3 -0
  231. package/dist/components/popover.js +7 -1
  232. package/dist/components/popover.js.map +1 -1
  233. package/dist/components/row-actions.js +2 -1
  234. package/dist/components/row-actions.js.map +1 -1
  235. package/dist/components/section-nav.d.ts +7 -0
  236. package/dist/components/section-nav.js.map +1 -1
  237. package/dist/components/series-chart-axes.d.ts +3 -3
  238. package/dist/components/series-chart-axes.js.map +1 -1
  239. package/dist/components/series-chart-labels.d.ts +7 -4
  240. package/dist/components/series-chart-labels.js.map +1 -1
  241. package/dist/components/series-chart.d.ts +31 -7
  242. package/dist/components/series-chart.js +72 -29
  243. package/dist/components/series-chart.js.map +1 -1
  244. package/dist/components/share-card.js +3 -3
  245. package/dist/components/share-card.js.map +1 -1
  246. package/dist/components/sign-chip-labels.d.ts +1 -0
  247. package/dist/components/sign-chip-labels.js.map +1 -1
  248. package/dist/components/sign-chip.d.ts +10 -1
  249. package/dist/components/sign-chip.js.map +1 -1
  250. package/dist/components/tabs-labels.d.ts +2 -0
  251. package/dist/components/tabs-labels.js +11 -0
  252. package/dist/components/tabs-labels.js.map +1 -0
  253. package/dist/components/tabs.d.ts +1 -1
  254. package/dist/components/tabs.js +1 -1
  255. package/dist/components/tabs.js.map +1 -1
  256. package/dist/components/toggle-legend.d.ts +2 -2
  257. package/dist/components/toggle-legend.js +6 -6
  258. package/dist/components/toggle-legend.js.map +1 -1
  259. package/dist/components/translation-review-editor.d.ts +4 -2
  260. package/dist/components/translation-review-editor.js +2 -3
  261. package/dist/components/translation-review-editor.js.map +1 -1
  262. package/dist/components/translation-review.d.ts +2 -1
  263. package/dist/components/translation-review.js +2 -2
  264. package/dist/components/translation-review.js.map +1 -1
  265. package/dist/components/treemap-labels.d.ts +26 -0
  266. package/dist/components/treemap-labels.js +10 -0
  267. package/dist/components/treemap-labels.js.map +1 -0
  268. package/dist/components/treemap-layout.d.ts +62 -0
  269. package/dist/components/treemap-layout.js +126 -0
  270. package/dist/components/treemap-layout.js.map +1 -0
  271. package/dist/components/treemap.d.ts +140 -17
  272. package/dist/components/treemap.js +324 -97
  273. package/dist/components/treemap.js.map +1 -1
  274. package/dist/components/use-table-state.d.ts +5 -5
  275. package/dist/components/use-table-state.js +4 -1
  276. package/dist/components/use-table-state.js.map +1 -1
  277. package/dist/data-table.d.ts +6 -2
  278. package/dist/data-table.js +7 -2
  279. package/dist/data-table.js.map +1 -1
  280. package/dist/eslint/index.js +1 -1
  281. package/dist/eslint/role-utilities.d.ts +36 -7
  282. package/dist/eslint/role-utilities.js +42 -9
  283. package/dist/eslint/role-utilities.js.map +1 -1
  284. package/dist/feedback/feedback-dialog.d.ts +25 -16
  285. package/dist/feedback/feedback-dialog.js +6 -2
  286. package/dist/feedback/feedback-dialog.js.map +1 -1
  287. package/dist/feedback/feedback-mutation.d.ts +30 -0
  288. package/dist/feedback/feedback-mutation.js +16 -0
  289. package/dist/feedback/feedback-mutation.js.map +1 -0
  290. package/dist/feedback/feedback-page-link.d.ts +53 -0
  291. package/dist/feedback/feedback-page-link.js +37 -0
  292. package/dist/feedback/feedback-page-link.js.map +1 -0
  293. package/dist/feedback/feedback-public-list.d.ts +12 -3
  294. package/dist/feedback/feedback-public-list.js +2 -1
  295. package/dist/feedback/feedback-public-list.js.map +1 -1
  296. package/dist/feedback/feedback-replies.d.ts +3 -1
  297. package/dist/feedback/feedback-replies.js +5 -4
  298. package/dist/feedback/feedback-replies.js.map +1 -1
  299. package/dist/feedback/feedback-row-detail-labels.js +5 -0
  300. package/dist/feedback/feedback-row-detail-labels.js.map +1 -1
  301. package/dist/feedback/feedback-row-detail.d.ts +64 -28
  302. package/dist/feedback/feedback-row-detail.js +30 -28
  303. package/dist/feedback/feedback-row-detail.js.map +1 -1
  304. package/dist/feedback/feedback-status-undo.d.ts +30 -11
  305. package/dist/feedback/feedback-status-undo.js +10 -15
  306. package/dist/feedback/feedback-status-undo.js.map +1 -1
  307. package/dist/feedback/feedback-submit-dialog.d.ts +1 -1
  308. package/dist/feedback/feedback-submit-dialog.js +1 -1
  309. package/dist/feedback/feedback-submit-dialog.js.map +1 -1
  310. package/dist/feedback/feedback-submit.js +9 -3
  311. package/dist/feedback/feedback-submit.js.map +1 -1
  312. package/dist/feedback/feedback-swipe.d.ts +1 -1
  313. package/dist/feedback/feedback-swipe.js.map +1 -1
  314. package/dist/feedback/feedback-table.d.ts +21 -9
  315. package/dist/feedback/feedback-table.js +45 -25
  316. package/dist/feedback/feedback-table.js.map +1 -1
  317. package/dist/feedback/feedback-thread-labels.d.ts +2 -2
  318. package/dist/feedback/feedback-thread-labels.js.map +1 -1
  319. package/dist/feedback/feedback-thread.d.ts +24 -23
  320. package/dist/feedback/feedback-thread.js +2 -1
  321. package/dist/feedback/feedback-thread.js.map +1 -1
  322. package/dist/feedback.d.ts +34 -0
  323. package/dist/feedback.js +42 -0
  324. package/dist/feedback.js.map +1 -1
  325. package/dist/hooks/use-focus-trap.d.ts +35 -0
  326. package/dist/hooks/use-focus-trap.js +6 -4
  327. package/dist/hooks/use-focus-trap.js.map +1 -1
  328. package/dist/hooks/use-hotkey.d.ts +5 -2
  329. package/dist/hooks/use-hotkey.js +5 -4
  330. package/dist/hooks/use-hotkey.js.map +1 -1
  331. package/dist/hooks/use-long-press.d.ts +7 -4
  332. package/dist/hooks/use-long-press.js +3 -0
  333. package/dist/hooks/use-long-press.js.map +1 -1
  334. package/dist/hooks/use-media-query.js +12 -4
  335. package/dist/hooks/use-media-query.js.map +1 -1
  336. package/dist/hooks/use-mounted.d.ts +22 -0
  337. package/dist/hooks/use-mounted.js +24 -0
  338. package/dist/hooks/use-mounted.js.map +1 -0
  339. package/dist/hooks/use-overlay-history.js +19 -3
  340. package/dist/hooks/use-overlay-history.js.map +1 -1
  341. package/dist/i18n/defaults.js +4 -5
  342. package/dist/i18n/defaults.js.map +1 -1
  343. package/dist/i18n/german.js +7 -1
  344. package/dist/i18n/german.js.map +1 -1
  345. package/dist/i18n/kit-labels.d.ts +9 -2
  346. package/dist/i18n/kit-labels.js.map +1 -1
  347. package/dist/i18n/locales/en.js +20 -41
  348. package/dist/i18n/locales/en.js.map +3 -3
  349. package/dist/i18n/locales/es.js +7 -1
  350. package/dist/i18n/locales/es.js.map +1 -1
  351. package/dist/i18n/locales/fr.js +20 -10
  352. package/dist/i18n/locales/fr.js.map +1 -1
  353. package/dist/i18n/locales/hu.js +9 -1
  354. package/dist/i18n/locales/hu.js.map +1 -1
  355. package/dist/i18n/locales/it.js +7 -1
  356. package/dist/i18n/locales/it.js.map +1 -1
  357. package/dist/i18n/locales/zh.js +8 -1
  358. package/dist/i18n/locales/zh.js.map +1 -1
  359. package/dist/i18n/review.js +5 -0
  360. package/dist/i18n/review.js.map +1 -1
  361. package/dist/index.d.ts +64 -17
  362. package/dist/index.js +77 -12
  363. package/dist/index.js.map +1 -1
  364. package/dist/landing/routing.d.ts +3 -1
  365. package/dist/landing/routing.js +4 -7
  366. package/dist/landing/routing.js.map +1 -1
  367. package/dist/lib/broadcast.d.ts +17 -0
  368. package/dist/lib/broadcast.js +30 -0
  369. package/dist/lib/broadcast.js.map +1 -0
  370. package/dist/lib/date-format.d.ts +37 -2
  371. package/dist/lib/date-format.js +34 -8
  372. package/dist/lib/date-format.js.map +1 -1
  373. package/dist/lib/day-format.d.ts +46 -0
  374. package/dist/lib/day-format.js +46 -0
  375. package/dist/lib/day-format.js.map +1 -0
  376. package/dist/lib/describe-failure.d.ts +14 -0
  377. package/dist/lib/describe-failure.js +9 -0
  378. package/dist/lib/describe-failure.js.map +1 -0
  379. package/dist/lib/direction.d.ts +16 -0
  380. package/dist/lib/direction.js +9 -1
  381. package/dist/lib/direction.js.map +1 -1
  382. package/dist/lib/focus-left.d.ts +63 -0
  383. package/dist/lib/focus-left.js +67 -0
  384. package/dist/lib/focus-left.js.map +1 -0
  385. package/dist/lib/format.js +5 -14
  386. package/dist/lib/format.js.map +1 -1
  387. package/dist/lib/http-status.d.ts +24 -0
  388. package/dist/lib/http-status.js +14 -0
  389. package/dist/lib/http-status.js.map +1 -0
  390. package/dist/lib/intl-cache.d.ts +14 -0
  391. package/dist/lib/intl-cache.js +15 -0
  392. package/dist/lib/intl-cache.js.map +1 -0
  393. package/dist/lib/isin.d.ts +10 -0
  394. package/dist/lib/isin.js.map +1 -1
  395. package/dist/lib/iso-day.d.ts +11 -0
  396. package/dist/lib/iso-day.js +8 -0
  397. package/dist/lib/iso-day.js.map +1 -0
  398. package/dist/lib/lazy-with-fallback.d.ts +31 -0
  399. package/dist/lib/lazy-with-fallback.js +40 -0
  400. package/dist/lib/lazy-with-fallback.js.map +1 -0
  401. package/dist/lib/path-pattern.d.ts +34 -0
  402. package/dist/lib/path-pattern.js +24 -0
  403. package/dist/lib/path-pattern.js.map +1 -0
  404. package/dist/lib/reduced-motion.d.ts +2 -1
  405. package/dist/lib/reduced-motion.js.map +1 -1
  406. package/dist/lib/round.d.ts +2 -1
  407. package/dist/lib/round.js +2 -1
  408. package/dist/lib/round.js.map +1 -1
  409. package/dist/lib/safe-storage.d.ts +24 -5
  410. package/dist/lib/safe-storage.js +27 -2
  411. package/dist/lib/safe-storage.js.map +1 -1
  412. package/dist/lib/session-refresh.js +1 -1
  413. package/dist/lib/session-refresh.js.map +1 -1
  414. package/dist/lib/share-format.d.ts +13 -0
  415. package/dist/lib/share-format.js +10 -0
  416. package/dist/lib/share-format.js.map +1 -0
  417. package/dist/lib/text-case.d.ts +17 -0
  418. package/dist/lib/text-case.js +8 -0
  419. package/dist/lib/text-case.js.map +1 -0
  420. package/dist/lib/text-match.d.ts +29 -0
  421. package/dist/lib/text-match.js +20 -2
  422. package/dist/lib/text-match.js.map +1 -1
  423. package/dist/lib/thenable.d.ts +13 -0
  424. package/dist/lib/thenable.js +8 -0
  425. package/dist/lib/thenable.js.map +1 -0
  426. package/dist/lib/translation-review.d.ts +7 -2
  427. package/dist/lib/translation-review.js +4 -4
  428. package/dist/lib/translation-review.js.map +1 -1
  429. package/dist/notifications/device-zone-report.js +1 -1
  430. package/dist/notifications/device-zone-report.js.map +1 -1
  431. package/dist/notifications/notification-bell.d.ts +2 -1
  432. package/dist/notifications/notification-bell.js +3 -3
  433. package/dist/notifications/notification-bell.js.map +1 -1
  434. package/dist/notifications/notification-inbox.d.ts +10 -6
  435. package/dist/notifications/notification-inbox.js +26 -48
  436. package/dist/notifications/notification-inbox.js.map +1 -1
  437. package/dist/notifications/notification-parts.d.ts +3 -2
  438. package/dist/notifications/notification-parts.js +1 -3
  439. package/dist/notifications/notification-parts.js.map +1 -1
  440. package/dist/notifications/notification-types-setting.js +1 -1
  441. package/dist/notifications/notification-types-setting.js.map +1 -1
  442. package/dist/notifications/notifications-labels.d.ts +6 -0
  443. package/dist/notifications/notifications-labels.js +1 -0
  444. package/dist/notifications/notifications-labels.js.map +1 -1
  445. package/dist/notifications/push-device-setting.js +1 -1
  446. package/dist/notifications/push-device-setting.js.map +1 -1
  447. package/dist/notifications/push-devices-setting.d.ts +2 -1
  448. package/dist/notifications/push-devices-setting.js +27 -49
  449. package/dist/notifications/push-devices-setting.js.map +1 -1
  450. package/dist/notifications/quiet-hours-setting.d.ts +10 -3
  451. package/dist/notifications/quiet-hours-setting.js +65 -26
  452. package/dist/notifications/quiet-hours-setting.js.map +1 -1
  453. package/dist/notifications/unsubscribe-panel.js +4 -7
  454. package/dist/notifications/unsubscribe-panel.js.map +1 -1
  455. package/dist/notifications/use-push-device.d.ts +39 -1
  456. package/dist/notifications/use-push-device.js +28 -7
  457. package/dist/notifications/use-push-device.js.map +1 -1
  458. package/dist/offline/query-persistence.d.ts +3 -1
  459. package/dist/offline/query-persistence.js +19 -2
  460. package/dist/offline/query-persistence.js.map +1 -1
  461. package/dist/rhf/fields.d.ts +11 -4
  462. package/dist/rhf/fields.js.map +1 -1
  463. package/dist/search/command-palette.js +1 -1
  464. package/dist/search/command-palette.js.map +1 -1
  465. package/dist/search/global-search.js +19 -9
  466. package/dist/search/global-search.js.map +1 -1
  467. package/dist/search/use-command-key.d.ts +12 -1
  468. package/dist/search/use-command-key.js +3 -12
  469. package/dist/search/use-command-key.js.map +1 -1
  470. package/dist/search.d.ts +7 -0
  471. package/dist/search.js +10 -0
  472. package/dist/search.js.map +1 -1
  473. package/dist/settings/use-settings-focus.js +1 -0
  474. package/dist/settings/use-settings-focus.js.map +1 -1
  475. package/dist/shell/account-menu-language.d.ts +21 -5
  476. package/dist/shell/account-menu-language.js +3 -1
  477. package/dist/shell/account-menu-language.js.map +1 -1
  478. package/dist/shell/account-menu-text-size.d.ts +26 -9
  479. package/dist/shell/account-menu-text-size.js +3 -2
  480. package/dist/shell/account-menu-text-size.js.map +1 -1
  481. package/dist/shell/dev-menu.js +5 -18
  482. package/dist/shell/dev-menu.js.map +1 -1
  483. package/dist/shell/role-switcher.d.ts +7 -0
  484. package/dist/shell/role-switcher.js.map +1 -1
  485. package/dist/shell/top-bar-actions.d.ts +1 -1
  486. package/dist/shell/top-bar-actions.js.map +1 -1
  487. package/dist/shell/top-bar-parts-labels.d.ts +0 -2
  488. package/dist/shell/top-bar-parts-labels.js +0 -1
  489. package/dist/shell/top-bar-parts-labels.js.map +1 -1
  490. package/dist/shell.d.ts +27 -8
  491. package/dist/shell.js +28 -7
  492. package/dist/shell.js.map +1 -1
  493. package/dist/sync/engine.d.ts +30 -4
  494. package/dist/sync/engine.js +172 -52
  495. package/dist/sync/engine.js.map +1 -1
  496. package/dist/sync.d.ts +6 -2
  497. package/dist/sync.js +6 -1
  498. package/dist/sync.js.map +1 -1
  499. package/dist/testing/css-variables.js +3 -8
  500. package/dist/testing/css-variables.js.map +1 -1
  501. package/dist/theme/contrast.d.ts +2 -1
  502. package/dist/theme/contrast.js +3 -8
  503. package/dist/theme/contrast.js.map +1 -1
  504. package/dist/theme/palette-store.js +6 -6
  505. package/dist/theme/palette-store.js.map +1 -1
  506. package/dist/theme/text-size.js +3 -8
  507. package/dist/theme/text-size.js.map +1 -1
  508. package/dist/theme/theme-store.js +3 -6
  509. package/dist/theme/theme-store.js.map +1 -1
  510. package/dist/tour/tour-catalogue.d.ts +7 -4
  511. package/dist/tour/tour-catalogue.js +12 -10
  512. package/dist/tour/tour-catalogue.js.map +1 -1
  513. package/dist/tour/tour-dock.d.ts +0 -2
  514. package/dist/tour/tour-dock.js +0 -2
  515. package/dist/tour/tour-dock.js.map +1 -1
  516. package/dist/tour/tour-gates.d.ts +4 -0
  517. package/dist/tour/tour-gates.js +14 -0
  518. package/dist/tour/tour-gates.js.map +1 -1
  519. package/dist/tour/tour-overlay.d.ts +27 -0
  520. package/dist/tour/tour-overlay.js +741 -0
  521. package/dist/tour/tour-overlay.js.map +1 -0
  522. package/dist/tour/tour.d.ts +13 -3
  523. package/dist/tour/tour.js +59 -781
  524. package/dist/tour/tour.js.map +1 -1
  525. package/dist/tour/use-tour-progress.js +1 -1
  526. package/dist/tour/use-tour-progress.js.map +1 -1
  527. package/dist/wizard/stepper-nav.d.ts +5 -1
  528. package/dist/wizard/stepper-nav.js.map +1 -1
  529. package/dist/wizard/types.d.ts +6 -2
  530. package/dist/wizard/types.js.map +1 -1
  531. package/dist/wizard/use-wizard.d.ts +3 -1
  532. package/dist/wizard/use-wizard.js.map +1 -1
  533. package/dist/wizard/validation.d.ts +3 -1
  534. package/dist/wizard/validation.js.map +1 -1
  535. package/package.json +10 -6
  536. package/src/account/account-parts.ts +5 -25
  537. package/src/account/data-export-setting-labels.ts +1 -1
  538. package/src/account/delete-account-setting-labels.ts +1 -1
  539. package/src/account/email-change-setting-labels.ts +1 -1
  540. package/src/account/passkeys-setting.tsx +60 -38
  541. package/src/account/sessions-setting.tsx +18 -12
  542. package/src/admin/admin-action-confirm.tsx +1 -5
  543. package/src/admin/admin-parts.ts +11 -25
  544. package/src/admin/mail-test-card-labels.ts +1 -1
  545. package/src/admin/plan-change-labels.ts +5 -23
  546. package/src/admin/plan-change.tsx +7 -44
  547. package/src/admin/reviewer-scope-editor.tsx +3 -3
  548. package/src/auth/auth-errors-labels.ts +23 -0
  549. package/src/auth/auth-errors.ts +11 -38
  550. package/src/auth/complete-name-dialog.tsx +4 -1
  551. package/src/auth/forgot-password-form-labels.ts +1 -1
  552. package/src/auth/forgot-password-form.tsx +11 -6
  553. package/src/auth/register-form-labels.ts +1 -1
  554. package/src/auth/reset-password-form-labels.ts +1 -1
  555. package/src/auth/reset-password-form.tsx +8 -4
  556. package/src/auth/sign-in-form-labels.ts +1 -1
  557. package/src/auth/status-parts.tsx +0 -6
  558. package/src/auth/verify-email-labels.ts +1 -1
  559. package/src/auth/verify-email.tsx +11 -6
  560. package/src/billing/cancel-subscription.tsx +26 -12
  561. package/src/billing/dialog-close.ts +34 -0
  562. package/src/billing/plan-card.tsx +36 -11
  563. package/src/billing/plan-change-labels.ts +66 -0
  564. package/src/billing/plan-switch.tsx +26 -12
  565. package/src/chart.ts +21 -3
  566. package/src/components/account-chips.tsx +20 -23
  567. package/src/components/alert-banner.tsx +82 -5
  568. package/src/components/amount-input.tsx +18 -7
  569. package/src/components/autocomplete.tsx +64 -70
  570. package/src/components/bulk-action-bar.tsx +70 -2
  571. package/src/components/button-look.ts +5 -5
  572. package/src/components/button.tsx +2 -2
  573. package/src/components/chart-edge.ts +34 -1
  574. package/src/components/chart-figure.tsx +35 -0
  575. package/src/components/chart-zoom-core.tsx +6 -5
  576. package/src/components/chart.tsx +26 -5
  577. package/src/components/combobox-core.tsx +293 -62
  578. package/src/components/combobox.tsx +183 -153
  579. package/src/components/copy-button.tsx +34 -23
  580. package/src/components/country-select.tsx +16 -11
  581. package/src/components/data-table-column-settings.tsx +52 -10
  582. package/src/components/data-table-filters.ts +6 -4
  583. package/src/components/data-table-fit.ts +19 -5
  584. package/src/components/data-table-groups.tsx +1 -1
  585. package/src/components/data-table-head.tsx +32 -22
  586. package/src/components/data-table-mobile.tsx +61 -26
  587. package/src/components/data-table-pagination.tsx +21 -6
  588. package/src/components/data-table-resize.ts +1 -1
  589. package/src/components/data-table-row-actions.tsx +3 -3
  590. package/src/components/data-table-row.tsx +25 -14
  591. package/src/components/data-table-selection.ts +1 -1
  592. package/src/components/data-table-shared.tsx +33 -1
  593. package/src/components/data-table-sort.ts +57 -2
  594. package/src/components/data-table-virtual.ts +32 -8
  595. package/src/components/data-table.tsx +239 -68
  596. package/src/components/date-field.tsx +65 -8
  597. package/src/components/date-picker.tsx +125 -48
  598. package/src/components/date-range-picker.tsx +82 -31
  599. package/src/components/error-boundary.tsx +53 -39
  600. package/src/components/field-base-labels.ts +20 -0
  601. package/src/components/field-base.tsx +13 -7
  602. package/src/components/field-sync-labels.ts +1 -0
  603. package/src/components/field-sync.tsx +23 -1
  604. package/src/components/form-actions.tsx +20 -5
  605. package/src/components/hover-menu.tsx +18 -8
  606. package/src/components/icon-button.tsx +14 -9
  607. package/src/components/inline-confirm.tsx +116 -0
  608. package/src/components/inline-entity-combobox.tsx +197 -153
  609. package/src/components/input.tsx +1 -1
  610. package/src/components/jump-calendar.tsx +30 -146
  611. package/src/components/legal-page.tsx +10 -7
  612. package/src/components/legal.tsx +4 -2
  613. package/src/components/lightbox.tsx +21 -8
  614. package/src/components/list.tsx +10 -4
  615. package/src/components/measured-grid.tsx +8 -4
  616. package/src/components/mini-calendar.tsx +6 -5
  617. package/src/components/modal.tsx +6 -1
  618. package/src/components/month-grid.tsx +229 -0
  619. package/src/components/month-picker.tsx +192 -200
  620. package/src/components/multi-select.tsx +21 -9
  621. package/src/components/picker-sheet.tsx +12 -9
  622. package/src/components/pie-chart-labels.ts +8 -0
  623. package/src/components/pie-chart.tsx +22 -28
  624. package/src/components/popover.tsx +18 -1
  625. package/src/components/row-actions.tsx +2 -1
  626. package/src/components/section-nav.tsx +7 -0
  627. package/src/components/series-chart-axes.ts +3 -3
  628. package/src/components/series-chart-labels.ts +7 -4
  629. package/src/components/series-chart.tsx +178 -69
  630. package/src/components/share-card.tsx +6 -6
  631. package/src/components/sign-chip-labels.ts +1 -0
  632. package/src/components/sign-chip.tsx +10 -1
  633. package/src/components/tabs-labels.ts +13 -0
  634. package/src/components/tabs.tsx +2 -2
  635. package/src/components/toggle-legend.tsx +16 -11
  636. package/src/components/translation-review-editor.tsx +6 -5
  637. package/src/components/translation-review.tsx +4 -3
  638. package/src/components/treemap-labels.ts +39 -0
  639. package/src/components/treemap-layout.ts +210 -0
  640. package/src/components/treemap.tsx +722 -133
  641. package/src/components/use-table-state.ts +12 -9
  642. package/src/data-table.ts +9 -2
  643. package/src/eslint/role-utilities.ts +97 -19
  644. package/src/feedback/feedback-dialog.tsx +30 -19
  645. package/src/feedback/feedback-mutation.ts +41 -0
  646. package/src/feedback/feedback-page-link.ts +90 -0
  647. package/src/feedback/feedback-public-list.tsx +17 -5
  648. package/src/feedback/feedback-replies.tsx +13 -6
  649. package/src/feedback/feedback-row-detail-labels.ts +5 -0
  650. package/src/feedback/feedback-row-detail.tsx +103 -67
  651. package/src/feedback/feedback-status-undo.ts +41 -27
  652. package/src/feedback/feedback-submit-dialog.tsx +2 -2
  653. package/src/feedback/feedback-submit.tsx +21 -7
  654. package/src/feedback/feedback-swipe.tsx +1 -1
  655. package/src/feedback/feedback-table.tsx +86 -38
  656. package/src/feedback/feedback-thread-labels.ts +2 -2
  657. package/src/feedback/feedback-thread.tsx +27 -25
  658. package/src/feedback.ts +42 -0
  659. package/src/hooks/use-focus-trap.ts +8 -24
  660. package/src/hooks/use-hotkey.ts +24 -7
  661. package/src/hooks/use-long-press.ts +16 -2
  662. package/src/hooks/use-media-query.ts +20 -4
  663. package/src/hooks/use-mounted.ts +39 -0
  664. package/src/hooks/use-overlay-history.ts +32 -3
  665. package/src/i18n/defaults.ts +4 -5
  666. package/src/i18n/german.ts +8 -2
  667. package/src/i18n/kit-labels.tsx +9 -2
  668. package/src/i18n/locales/es.ts +8 -2
  669. package/src/i18n/locales/fr.ts +21 -13
  670. package/src/i18n/locales/hu.ts +10 -2
  671. package/src/i18n/locales/it.ts +8 -2
  672. package/src/i18n/locales/zh.ts +9 -2
  673. package/src/i18n/review.ts +5 -0
  674. package/src/index.ts +103 -13
  675. package/src/landing/routing.tsx +14 -10
  676. package/src/lib/broadcast.ts +52 -0
  677. package/src/lib/date-format.ts +89 -13
  678. package/src/lib/day-format.ts +96 -0
  679. package/src/lib/describe-failure.ts +18 -0
  680. package/src/lib/direction.ts +39 -0
  681. package/src/lib/focus-left.ts +156 -0
  682. package/src/lib/format.ts +5 -17
  683. package/src/lib/http-status.ts +38 -0
  684. package/src/lib/intl-cache.ts +25 -0
  685. package/src/lib/isin.ts +10 -0
  686. package/src/lib/iso-day.ts +13 -0
  687. package/src/lib/lazy-with-fallback.ts +82 -0
  688. package/src/lib/path-pattern.ts +55 -0
  689. package/src/lib/reduced-motion.ts +2 -1
  690. package/src/lib/round.ts +7 -2
  691. package/src/lib/safe-storage.ts +48 -6
  692. package/src/lib/session-refresh.ts +1 -1
  693. package/src/lib/share-format.ts +18 -0
  694. package/src/lib/text-case.ts +19 -0
  695. package/src/lib/text-match.ts +57 -2
  696. package/src/lib/thenable.ts +19 -0
  697. package/src/lib/translation-review.ts +13 -5
  698. package/src/notifications/device-zone-report.ts +1 -1
  699. package/src/notifications/notification-bell.tsx +7 -4
  700. package/src/notifications/notification-inbox.tsx +40 -58
  701. package/src/notifications/notification-parts.tsx +3 -4
  702. package/src/notifications/notification-types-setting.tsx +1 -1
  703. package/src/notifications/notifications-labels.ts +7 -0
  704. package/src/notifications/push-device-setting.tsx +1 -1
  705. package/src/notifications/push-devices-setting.tsx +30 -55
  706. package/src/notifications/quiet-hours-setting.tsx +93 -31
  707. package/src/notifications/unsubscribe-panel.tsx +4 -7
  708. package/src/notifications/use-push-device.ts +76 -10
  709. package/src/offline/query-persistence.ts +35 -3
  710. package/src/rhf/fields.tsx +11 -4
  711. package/src/search/command-palette.tsx +2 -4
  712. package/src/search/global-search.tsx +36 -15
  713. package/src/search/use-command-key.ts +13 -12
  714. package/src/search.ts +9 -0
  715. package/src/settings/use-settings-focus.ts +3 -0
  716. package/src/shell/account-menu-language.tsx +27 -5
  717. package/src/shell/account-menu-text-size.tsx +32 -10
  718. package/src/shell/dev-menu.tsx +7 -21
  719. package/src/shell/role-switcher.tsx +7 -0
  720. package/src/shell/top-bar-actions.tsx +1 -1
  721. package/src/shell/top-bar-parts-labels.ts +0 -3
  722. package/src/shell.ts +40 -9
  723. package/src/sync/engine.ts +339 -61
  724. package/src/sync.ts +8 -1
  725. package/src/testing/css-variables.ts +8 -9
  726. package/src/theme/contrast.ts +8 -9
  727. package/src/theme/palette-store.ts +9 -9
  728. package/src/theme/text-size.ts +6 -8
  729. package/src/theme/theme-store.ts +7 -9
  730. package/src/tour/tour-catalogue.tsx +26 -15
  731. package/src/tour/tour-dock.ts +0 -2
  732. package/src/tour/tour-gates.ts +23 -0
  733. package/src/tour/tour-overlay.tsx +1170 -0
  734. package/src/tour/tour.tsx +108 -1202
  735. package/src/tour/use-tour-progress.ts +1 -1
  736. package/src/wizard/stepper-nav.tsx +3 -1
  737. package/src/wizard/types.ts +11 -2
  738. package/src/wizard/use-wizard.ts +2 -1
  739. package/src/wizard/validation.ts +8 -2
  740. package/tokens.css +2 -1
  741. package/dist/components/ui-labels.js.map +0 -1
  742. package/dist/shell/dev-switchers.d.ts +0 -6
  743. package/dist/shell/dev-switchers.js +0 -12
  744. package/dist/shell/dev-switchers.js.map +0 -1
  745. package/src/components/ui-labels.ts +0 -24
  746. package/src/shell/dev-switchers.tsx +0 -18
@@ -57,6 +57,8 @@ import {
57
57
  type BarShapeProps,
58
58
  } from "recharts";
59
59
  import { ChartContainer, ChartTooltip, ChartTooltipContent, type ChartConfig } from "./chart";
60
+ import { useFigureDescription } from "./chart-figure";
61
+ import { rovingTarget } from "../lib/direction";
60
62
  import {
61
63
  DEFAULT_Y_AXIS,
62
64
  axisExtent,
@@ -123,7 +125,7 @@ import {
123
125
  import { useBreakpoint } from "../hooks/use-breakpoint";
124
126
  import { useTextSize } from "../theme/text-size";
125
127
  import { chartHeightProps, type ChartHeight } from "./chart-height";
126
- import { useChartEdge } from "./chart-edge";
128
+ import { useChartEdge, useEdgesInForce } from "./chart-edge";
127
129
  import { cn } from "../lib/cn";
128
130
  import { formatWithMinus } from "../lib/minus";
129
131
 
@@ -562,11 +564,18 @@ export interface SeriesChartHit {
562
564
  }
563
565
 
564
566
  export interface SeriesChartProps {
565
- /** One row per abscissa value. A missing key is a hole (see `connectNulls`). */
566
- rows: readonly SeriesChartRow[];
567
- series: SeriesChartSeries[];
567
+ /**
568
+ * One row per abscissa value. A missing key is a hole (see `connectNulls`).
569
+ *
570
+ * Any object (0.52, refactor audit 2026-10-30, API-2): an `interface` has no index
571
+ * signature, so a typed sweep did not fit `SeriesChartRow` and Kurvenschmiede cast its
572
+ * Ackermann rows `as unknown as Record<string, number>[]`. The chart reads the keys
573
+ * `series` and `x` name, and hands the row back as {@link SeriesChartRow}.
574
+ */
575
+ rows: readonly object[];
576
+ series: readonly SeriesChartSeries[];
568
577
  /** Default: one untitled axis, `"y"`. */
569
- axes?: SeriesChartAxis[];
578
+ axes?: readonly SeriesChartAxis[];
570
579
  x?: SeriesChartX;
571
580
  /** A value in the tooltip, where a number stands on its own and needs its unit.
572
581
  * Default: `Intl.NumberFormat` in the kit's locale. */
@@ -598,11 +607,11 @@ export interface SeriesChartProps {
598
607
  * as the curve twitching. Turn it on where series come and go by choice.
599
608
  */
600
609
  animationMs?: number;
601
- spans?: SeriesChartSpan[];
610
+ spans?: readonly SeriesChartSpan[];
602
611
  /** Lines across the plot at one value. */
603
- references?: SeriesChartReference[];
612
+ references?: readonly SeriesChartReference[];
604
613
  /** Single labelled points. */
605
- markers?: SeriesChartMarker[];
614
+ markers?: readonly SeriesChartMarker[];
606
615
  /**
607
616
  * Which axes a drag may zoom: `"both"`, `"x"`, `"y"` or `"none"`. Default: read off
608
617
  * the marks — see `defaultZoomAxes` (lines both, areas x, bars none). An axis carrying
@@ -614,6 +623,10 @@ export interface SeriesChartProps {
614
623
  * A click on the plot: the slot under the pointer, and the series when it landed on a
615
624
  * bar. keksdose's drilldowns — a payee's month, a budget line, a spending category.
616
625
  * A drag that zoomed is not a click.
626
+ *
627
+ * The keyboard's stops are there either way (0.52, DSP-5): one per bar, or per slot of
628
+ * a chart without bars, named "period — series: value", behind ONE tab stop. With this
629
+ * they are buttons that Enter and Space activate; without, images to read.
617
630
  */
618
631
  onPointClick?: (hit: SeriesChartHit) => void;
619
632
  /** Where the tooltip may go: for a chart inside a scroll wrapper. See
@@ -662,6 +675,19 @@ export interface SeriesChartProps {
662
675
  labels?: LabelOverride<SeriesChartLabels>;
663
676
  /** BCP 47 tag for the default number formats. Default: the provider's. */
664
677
  locale?: string;
678
+ /**
679
+ * The chart's name. The chart is a `role="figure"` (0.52, refactor audit 2026-10-30,
680
+ * DSP-5), and a figure is found and told apart by its name — "Net worth", "Load over
681
+ * travel". Its values are read stop by stop (see {@link SeriesChartProps.onPointClick}).
682
+ */
683
+ "aria-label"?: string;
684
+ /**
685
+ * What the picture SHOWS, in a sentence — "Spending rose 12 % in May, led by rent." —
686
+ * the figure's accessible description: a line, an area and a ruler are nothing a screen
687
+ * reader can say. Followed, on a zoomable chart, by the drag gesture (`zoomHint`). Not
688
+ * drawn; a caption the eye should read too belongs in the page.
689
+ */
690
+ description?: string;
665
691
  /** Onto the chart's root (`ChartContainer`) — e.g. an app's own grid ink. */
666
692
  className?: string;
667
693
  /** The shortest bar drawn, in px, for every bar series that does not set its own
@@ -778,9 +804,9 @@ const STEP_WIDTH = 1.5;
778
804
  const BAR_RADIUS: [number, number, number, number] = [3, 3, 0, 0];
779
805
 
780
806
  /**
781
- * One keyboard stop of a clickable chart: a bar, or (a chart with no bars) a whole slot.
782
- * `from`/`to` bound its slot on the plotted number line — half way to each neighbour,
783
- * or to the edge of the window on show.
807
+ * One keyboard stop: a bar, or (a chart with no bars) a whole slot. `from`/`to` bound its
808
+ * slot on the plotted number line — half way to each neighbour, or to the edge of the
809
+ * window on show.
784
810
  */
785
811
  interface PointStop {
786
812
  index: number;
@@ -788,10 +814,21 @@ interface PointStop {
788
814
  key?: string;
789
815
  from: number;
790
816
  to: number;
791
- /** The accessible name: where it is and what it says. */
792
- name: string;
817
+ /** The accessible name: where it is and what it says. Asked only of a stop that is
818
+ * drawn — see {@link ALL_STOPS_UP_TO}. */
819
+ name: () => string;
793
820
  }
794
821
 
822
+ /**
823
+ * Up to this many stops, every one is drawn; past it, only the roving one, its two
824
+ * neighbours and the two ends (0.52, DSP-5) — every stop is still reached, by the arrows,
825
+ * Home and End. Since every chart has stops, a measurement chart has one per row:
826
+ * Kurvenschmiede draws 2000-row profiles (`maxRows`), and 2000 named `<rect>`s, each
827
+ * named through `Intl` on every render, are a DOM and an accessibility tree nobody walks
828
+ * one by one. A year of months, or of weeks, stays whole for browse mode.
829
+ */
830
+ const ALL_STOPS_UP_TO = 100;
831
+
795
832
  /**
796
833
  * The shape of a series whose bar has keyboard focus: recharts' own rectangle, with an
797
834
  * outline on the one bar at `index` — drawn at the bar's exact geometry, which an
@@ -853,23 +890,25 @@ function MarkerLabel({ viewBox, value }: { viewBox?: { x?: number; y?: number; w
853
890
  }
854
891
 
855
892
  /**
856
- * The keyboard's way onto a clickable chart (`onPointClick`): one focusable `<rect>` per
857
- * bar, or per slot when there are no bars, laid over the plot INSIDE the recharts chart,
858
- * where the x scale answers.
893
+ * The keyboard's way onto a chart: one focusable `<rect>` per bar, or per slot when there
894
+ * are no bars, laid over the plot INSIDE the recharts chart, where the x scale answers.
859
895
  *
860
896
  * keksdose drew its weekday pattern as seven real `<button>`s (spending-tab.tsx) because
861
897
  * a recharts bar is reachable by nothing but the pointer. This is that, for every chart:
862
898
  *
863
899
  * - ONE tab stop (roving `tabIndex`): Tab moves past the chart, not through 30 bars.
864
900
  * - ←/→ step through the stops in order, ↑/↓ between the bars of one slot, Home/End.
865
- * - ↵ and Space report the stop as a click would — with the series for a bar.
866
- * - Each is a `role="button"` named "period — series: value".
901
+ * - Each is named "period — series: value".
902
+ * - With `onPointClick` (`onPick`) each is a `role="button"`, and ↵ and Space report the
903
+ * stop as a click would — with the series for a bar. Without (0.52, refactor audit
904
+ * 2026-10-30, DSP-5) each is a `role="img"` to read, as PieChart's slices are: before,
905
+ * such a chart was recharts' unnamed `role="application"` stop, whose arrows moved a
906
+ * tooltip nothing announced.
867
907
  *
868
908
  * The stops take NO pointer events, so the drag-to-zoom layer, the tooltip and the
869
909
  * pointer's own clicks underneath behave exactly as they did. Focus is shown by the
870
910
  * slot tinted and, for a bar, its own outline (`focusedBarShape`) — and by the tooltip,
871
- * moved to the stop through `defaultIndex`, which recharts honours until a pointer has
872
- * hovered the chart.
911
+ * which recharts' own pointer is stood on the stop for (`pointAt`).
873
912
  */
874
913
  function PointKeys({
875
914
  stops,
@@ -884,40 +923,30 @@ function PointKeys({
884
923
  label: string;
885
924
  onFocusStop: (at: number) => void;
886
925
  onBlurStops: () => void;
887
- onPick: (stop: PointStop) => void;
926
+ onPick?: (stop: PointStop) => void;
888
927
  }) {
889
928
  const plot = usePlotArea();
890
929
  const scale = useXAxisScale();
891
930
  const refs = useRef<(SVGRectElement | null)[]>([]);
892
931
  if (!plot || !scale || plot.width <= 0 || plot.height <= 0) return null;
893
932
 
894
- const move = (at: number) => {
895
- const next = Math.max(0, Math.min(stops.length - 1, at));
896
- refs.current[next]?.focus();
897
- };
898
933
  const onKeyDown = (at: number) => (event: KeyboardEvent<SVGRectElement>) => {
899
934
  const stop = stops[at];
900
935
  // ↑/↓ stay in the slot: the next or previous bar of the same period. The stops are
901
- // in slot order, so a slot's bars are neighbours.
936
+ // in slot order, so a slot's bars are neighbours. ←/→, Home and End as Treemap's tiles
937
+ // take them (0.52 code review, deep, charts, finding 14): → is the next stop in any
938
+ // page, since the plot runs left to right in an RTL one too (see `ChartContainer`).
902
939
  const inSlot = (step: 1 | -1) => (stops[at + step]?.index === stop.index ? at + step : at);
903
940
  const target =
904
- event.key === "ArrowRight"
905
- ? at + 1
906
- : event.key === "ArrowLeft"
907
- ? at - 1
908
- : event.key === "ArrowDown"
909
- ? inSlot(1)
910
- : event.key === "ArrowUp"
911
- ? inSlot(-1)
912
- : event.key === "Home"
913
- ? 0
914
- : event.key === "End"
915
- ? stops.length - 1
916
- : undefined;
941
+ event.key === "ArrowDown"
942
+ ? inSlot(1)
943
+ : event.key === "ArrowUp"
944
+ ? inSlot(-1)
945
+ : rovingTarget(event.key, "ltr", at, stops.length, false);
917
946
  if (target !== undefined) {
918
947
  event.preventDefault();
919
- move(target);
920
- } else if (event.key === "Enter" || event.key === " ") {
948
+ refs.current[target]?.focus();
949
+ } else if (onPick && (event.key === "Enter" || event.key === " ")) {
921
950
  event.preventDefault();
922
951
  onPick(stop);
923
952
  }
@@ -925,9 +954,14 @@ function PointKeys({
925
954
 
926
955
  const left = plot.x;
927
956
  const right = plot.x + plot.width;
957
+ const middle = plot.y + plot.height / 2;
958
+ // Every target an arrow, Home or End can name from the roving stop — see ALL_STOPS_UP_TO.
959
+ const drawn =
960
+ stops.length <= ALL_STOPS_UP_TO ? undefined : new Set([0, current - 1, current, current + 1, stops.length - 1]);
928
961
  return (
929
962
  <g role="group" aria-label={label}>
930
963
  {stops.map((stop, at) => {
964
+ if (drawn && !drawn.has(at)) return null;
931
965
  // An edge with no neighbour runs to the plot's edge.
932
966
  const a = finite(scale(stop.from)) ?? left;
933
967
  const b = finite(scale(stop.to)) ?? right;
@@ -939,9 +973,9 @@ function PointKeys({
939
973
  ref={(node) => {
940
974
  refs.current[at] = node;
941
975
  }}
942
- role="button"
976
+ role={onPick ? "button" : "img"}
943
977
  tabIndex={at === current ? 0 : -1}
944
- aria-label={stop.name}
978
+ aria-label={stop.name()}
945
979
  data-point-key={stop.key}
946
980
  x={x0}
947
981
  y={plot.y}
@@ -956,8 +990,19 @@ function PointKeys({
956
990
  // A bar outlines ITSELF (see `FOCUSED_BAR`); a slot has nothing else to.
957
991
  stop.key === undefined && "focus-visible:stroke-[var(--brand)]",
958
992
  )}
959
- onFocus={() => onFocusStop(at)}
960
- onBlur={onBlurStops}
993
+ onFocus={(event) => {
994
+ onFocusStop(at);
995
+ pointAt(event.currentTarget, (x0 + x1) / 2, middle);
996
+ }}
997
+ onBlur={(event) => {
998
+ onBlurStops();
999
+ // On to another stop: that one stands the pointer on itself. (`refs` holds a
1000
+ // null for every stop not drawn, so a blur to nowhere is no stop.)
1001
+ const next = event.relatedTarget as SVGRectElement | null;
1002
+ if (!next || !refs.current.includes(next)) {
1003
+ pointAt(event.currentTarget, left - 1, middle);
1004
+ }
1005
+ }}
961
1006
  onKeyDown={onKeyDown(at)}
962
1007
  />
963
1008
  );
@@ -966,6 +1011,32 @@ function PointKeys({
966
1011
  );
967
1012
  }
968
1013
 
1014
+ /**
1015
+ * Stands recharts' pointer at (`x`, `y`) in the chart's own px, as a mouse moved there
1016
+ * would — what the keyboard's stops show their tooltip by (0.52 code review, deep, charts,
1017
+ * finding 4). Their `defaultIndex` alone moved it only until a pointer had hovered the
1018
+ * chart: recharts reads it no more once a hover has an index, and a mouse that has left
1019
+ * keeps its index. After one hover the arrows moved the tint, and the tooltip, the one
1020
+ * place the value is drawn, stayed where the mouse had left it. recharts' own keyboard
1021
+ * layer, which these stops replaced (DSP-5), drove the tooltip through its own state.
1022
+ *
1023
+ * A point off the plot (`x` left of it) takes the pointer off the chart: recharts hides
1024
+ * its tooltip there, through the same frame-throttled path a pending move takes, so a
1025
+ * blur right after a focus is never overtaken by it. recharts reads the pointer against
1026
+ * its wrapper's box, scaled as the box is drawn (`getRelativeCoordinate`); the point is
1027
+ * put back into that box.
1028
+ */
1029
+ function pointAt(within: Element, x: number, y: number) {
1030
+ const wrapper = within.closest<HTMLElement>(".recharts-wrapper");
1031
+ if (!wrapper) return;
1032
+ const box = wrapper.getBoundingClientRect();
1033
+ const scaleX = wrapper.offsetWidth > 0 ? box.width / wrapper.offsetWidth : 1;
1034
+ const scaleY = wrapper.offsetHeight > 0 ? box.height / wrapper.offsetHeight : 1;
1035
+ wrapper.dispatchEvent(
1036
+ new MouseEvent("mousemove", { bubbles: true, clientX: box.left + x * scaleX, clientY: box.top + y * scaleY }),
1037
+ );
1038
+ }
1039
+
969
1040
  interface PlotProps extends Omit<SeriesChartProps, "rows" | "x"> {
970
1041
  /** The rows AS PLOTTED — what the zoom fits on. The caller's are `model.source`. */
971
1042
  rows: readonly SeriesChartRow[];
@@ -1000,6 +1071,8 @@ function SeriesPlot({
1000
1071
  axisBudget = "auto",
1001
1072
  onAxisBudget,
1002
1073
  maxRows,
1074
+ "aria-label": ariaLabel,
1075
+ description,
1003
1076
  }: PlotProps) {
1004
1077
  const labels = useKitLabels("seriesChart", DEFAULT_SERIES_CHART_LABELS, labelsProp);
1005
1078
  const locale = useKitLocale(localeProp);
@@ -1010,6 +1083,10 @@ function SeriesPlot({
1010
1083
  // Strokes, dashes and the grid stay px.
1011
1084
  const { scale } = useTextSize();
1012
1085
  const edgeFor = useChartEdge();
1086
+ // The tiles' rule (0.52, DSP-18, Marcel's decision 3): the ink edge under More contrast
1087
+ // only — at Standard it fell on 5 of 8 hues in light and on 2 in dark, the unevenness
1088
+ // #642 took off the tiles.
1089
+ const edges = useEdgesInForce("auto");
1013
1090
  const ticksAim = tickTarget(scale);
1014
1091
  const grow = (px: number) => (scale === 1 ? px : Math.round(px * scale));
1015
1092
  // The keyboard stops' roving tab stop, and the one that has focus (see `PointKeys`).
@@ -1085,13 +1162,31 @@ function SeriesPlot({
1085
1162
  // one value sizes both the chart and its empty state.
1086
1163
  const { className: heightClass, style: heightStyle } = chartHeightProps(height);
1087
1164
 
1165
+ // A named figure, described by the caller's sentence and — where a drag zooms — the
1166
+ // gesture (0.52, refactor audit 2026-10-30, DSP-5). The hint used to be the name of the
1167
+ // zoom layer's rect, a `role="application"` that could not take focus. The description
1168
+ // is `hidden`: read through `aria-describedby`, never twice in browse mode.
1169
+ const drawable = model.source.length > 0 && series.length > 0;
1170
+ const spoken = [description, drawable && zoom?.layer ? labels.zoomHint : undefined].filter(Boolean).join(" ");
1171
+ // Inside the root, not after it as a sibling: a StaticSeriesChart then stopped being its
1172
+ // parent's last child, and a stack's `space-y-*` / `divide-y` gave it a margin or a rule
1173
+ // it never had (0.52 code review, deep, charts, findings 7 and 14 — Treemap's copy of this
1174
+ // went the same way). The plot's root is `ChartContainer`, which takes the sentence itself.
1175
+ const about = useFigureDescription(spoken || undefined);
1176
+ const figure = { role: "figure", "aria-label": ariaLabel, "aria-describedby": about.describedBy } as const;
1177
+
1088
1178
  // The empty state takes the chart's own height and is centred in it: a chart that
1089
1179
  // shrank to its "nothing to draw" sentence moved everything under it up the page
1090
1180
  // the moment a legend entry was switched off.
1091
- if (!model.source.length || !series.length) {
1181
+ if (!drawable) {
1092
1182
  return (
1093
- <div className={cn("flex w-full items-center justify-center px-2 text-center", heightClass)} style={heightStyle}>
1183
+ <div
1184
+ {...figure}
1185
+ className={cn("flex w-full items-center justify-center px-2 text-center", heightClass)}
1186
+ style={heightStyle}
1187
+ >
1094
1188
  {empty !== undefined ? empty : <p className="text-xs text-muted">{labels.empty}</p>}
1189
+ {about.node}
1095
1190
  </div>
1096
1191
  );
1097
1192
  }
@@ -1268,14 +1363,15 @@ function SeriesPlot({
1268
1363
  return row ? { index: origin(index), row, x: xOf(index), key } : undefined;
1269
1364
  };
1270
1365
 
1271
- // The keyboard stops of a clickable chart — every bar with a value, slot by slot; or,
1272
- // with no bars, every slot with any value. Only what is inside the window on show.
1366
+ // The keyboard stops — every bar with a value, slot by slot; or, with no bars, every
1367
+ // slot with any value. Only what is inside the window on show. Named on demand: past
1368
+ // ALL_STOPS_UP_TO only five are drawn, and naming is a date and a number format each.
1273
1369
  const stops: PointStop[] = [];
1274
- if (onPointClick) {
1370
+ {
1275
1371
  const valueText = valueFormat ?? number;
1276
1372
  const nameOf = (entry: SeriesChartSeries) =>
1277
1373
  typeof entry.label === "string" || typeof entry.label === "number" ? String(entry.label) : entry.key;
1278
- const said = (entry: SeriesChartSeries, value: number) => {
1374
+ const cellText = (entry: SeriesChartSeries, value: number) => {
1279
1375
  const name = nameOf(entry);
1280
1376
  return name ? `${name}: ${valueText(value)}` : valueText(value);
1281
1377
  };
@@ -1291,21 +1387,23 @@ function SeriesPlot({
1291
1387
  const from = k > 0 ? (placed[k - 1].at + at) / 2 : low;
1292
1388
  const to = k < placed.length - 1 ? (placed[k + 1].at + at) / 2 : high;
1293
1389
  // The heading the tooltip would give it, when that is text; else the tick.
1294
- const heading = xLabel(at);
1295
- const where = typeof heading === "string" && heading ? heading : xFormat(at);
1390
+ const where = () => {
1391
+ const heading = xLabel(at);
1392
+ return typeof heading === "string" && heading ? heading : xFormat(at);
1393
+ };
1296
1394
  const valued = (bars.length ? bars : series)
1297
1395
  .map((entry) => ({ entry, value: finite(rows[index]?.[entry.key]) }))
1298
1396
  .filter((cell): cell is { entry: SeriesChartSeries; value: number } => cell.value !== undefined);
1299
1397
  if (bars.length) {
1300
1398
  for (const { entry, value } of valued) {
1301
- stops.push({ index, key: entry.key, from, to, name: `${where} — ${said(entry, value)}` });
1399
+ stops.push({ index, key: entry.key, from, to, name: () => `${where()} — ${cellText(entry, value)}` });
1302
1400
  }
1303
1401
  } else if (valued.length) {
1304
1402
  stops.push({
1305
1403
  index,
1306
1404
  from,
1307
1405
  to,
1308
- name: `${where} — ${valued.map(({ entry, value }) => said(entry, value)).join(", ")}`,
1406
+ name: () => `${where()} — ${valued.map(({ entry, value }) => cellText(entry, value)).join(", ")}`,
1309
1407
  });
1310
1408
  }
1311
1409
  });
@@ -1359,6 +1457,7 @@ function SeriesPlot({
1359
1457
  const inRow = placement !== "cursor";
1360
1458
  const chart = (
1361
1459
  <ChartContainer
1460
+ {...(inRow ? {} : { role: "figure", "aria-label": ariaLabel, description: spoken || undefined })}
1362
1461
  ref={setBox}
1363
1462
  data-axis-budget={budgeted.length ? budgetKey.replace(/\n/g, " ") : undefined}
1364
1463
  // "drawn/all" while `maxRows` thins: what a reader of the DOM (a test, a bug
@@ -1381,9 +1480,10 @@ function SeriesPlot({
1381
1480
  // Positive and negative layers stacked apart, as `axisExtent` fits them — a
1382
1481
  // month's expenses hang below the axis instead of eating into its income.
1383
1482
  stackOffset="sign"
1384
- // recharts' own keyboard layer makes the whole surface a tab stop whose arrows
1385
- // move the tooltip — a second stop beside `PointKeys`, and one ↵ does nothing on.
1386
- accessibilityLayer={!onPointClick}
1483
+ // recharts' own keyboard layer makes the whole surface an unnamed
1484
+ // `role="application"` tab stop whose arrows move a tooltip nothing announces —
1485
+ // a second stop beside `PointKeys`, which every chart has since 0.52 (DSP-5).
1486
+ accessibilityLayer={false}
1387
1487
  onClick={
1388
1488
  onPointClick
1389
1489
  ? (state) => {
@@ -1515,9 +1615,10 @@ function SeriesPlot({
1515
1615
  const type = entry.type ?? "line";
1516
1616
  const yAxisId = entry.axis ?? DEFAULT_Y_AXIS;
1517
1617
  const color = `var(--color-${entry.key})`;
1518
- // A filled mark in a hue under 3:1 against the ground gets a 1px ink edge
1519
- // (WCAG 1.4.11, anyplot's rule) — measured on the colour the config paints.
1520
- const edge = edgeFor(config[entry.key]?.color);
1618
+ // Under More contrast, a filled mark in a hue under 3:1 against the ground gets
1619
+ // a 1px ink edge (WCAG 1.4.11, anyplot's rule) — measured on the colour the
1620
+ // config paints. At Standard none does (see `edges`).
1621
+ const edge = edges === "contrast" ? edgeFor(config[entry.key]?.color) : undefined;
1521
1622
  const own = entry.dash ?? (entry.dashed ? 1 : 0);
1522
1623
  const dash = entry.step ? strokeDash(STEP_DASH) : typeof own === "string" ? own : strokeDash(own);
1523
1624
  const curve = entry.step ? "stepAfter" : (entry.curve ?? "monotone");
@@ -1568,9 +1669,11 @@ function SeriesPlot({
1568
1669
  type={curve}
1569
1670
  dataKey={entry.key}
1570
1671
  stackId={entry.stack}
1571
- // The edge replaces the hue on the area's outline only; the fill keeps it.
1672
+ // The edge replaces the hue on the area's outline only; the fill keeps it,
1673
+ // and the outline its width (0.52, DSP-18: it was 1px, whatever
1674
+ // `strokeWidth` said).
1572
1675
  stroke={edge ?? color}
1573
- strokeWidth={edge ? 1 : width}
1676
+ strokeWidth={width}
1574
1677
  strokeDasharray={dash}
1575
1678
  fill={color}
1576
1679
  fillOpacity={entry.fillOpacity ?? (entry.stack !== undefined ? 0.55 : 0.2)}
@@ -1670,10 +1773,14 @@ function SeriesPlot({
1670
1773
  setKeyFocus(at);
1671
1774
  }}
1672
1775
  onBlurStops={() => setKeyFocus(undefined)}
1673
- onPick={(stop) => {
1674
- const hit = hitAt(stop.index, stop.key);
1675
- if (hit) onPointClick?.(hit);
1676
- }}
1776
+ onPick={
1777
+ onPointClick
1778
+ ? (stop) => {
1779
+ const hit = hitAt(stop.index, stop.key);
1780
+ if (hit) onPointClick(hit);
1781
+ }
1782
+ : undefined
1783
+ }
1677
1784
  />
1678
1785
  )}
1679
1786
  {zoom?.layer}
@@ -1695,10 +1802,11 @@ function SeriesPlot({
1695
1802
  />
1696
1803
  );
1697
1804
  return (
1698
- <div className={cn("flex w-full flex-col", heightClass)} style={heightStyle}>
1805
+ <div {...figure} className={cn("flex w-full flex-col", heightClass)} style={heightStyle}>
1699
1806
  {placement === "above" && row}
1700
1807
  {chart}
1701
1808
  {placement === "below" && row}
1809
+ {about.node}
1702
1810
  </div>
1703
1811
  );
1704
1812
  }
@@ -1715,7 +1823,8 @@ function usePlotProps(props: SeriesChartProps): PlotProps {
1715
1823
  const x = props.x ?? {};
1716
1824
  const { rows } = props;
1717
1825
  const { type, key } = x;
1718
- const model = useMemo(() => xModel(rows, { type, key }), [rows, type, key]);
1826
+ // Read by key, so any object is a row (API-2); `SeriesChartRow` is how the plot reads it.
1827
+ const model = useMemo(() => xModel(rows as readonly SeriesChartRow[], { type, key }), [rows, type, key]);
1719
1828
  return { ...props, rows: model.rows, x: { key: model.plotKey }, model, xAxis: x };
1720
1829
  }
1721
1830
 
@@ -4,7 +4,7 @@ import { Trash2, UserPlus, UsersRound } from "lucide-react";
4
4
 
5
5
  import { useKitLabels, useKitLocale, type LabelOverride } from "../i18n/kit-labels";
6
6
  import { cn } from "../lib/cn";
7
- import { foldForSearch } from "../lib/text-match";
7
+ import { matchesSearch, searchWords } from "../lib/text-match";
8
8
  import { AlertBanner } from "./alert-banner";
9
9
  import { Autocomplete } from "./autocomplete";
10
10
  import type { ComboOption } from "./combobox-core";
@@ -368,11 +368,11 @@ export function SharePanel({
368
368
  // The completion is a convenience, not a search: an address that matches nobody is
369
369
  // the ordinary case (somebody new), so no "No results" box opens over the field —
370
370
  // and over its error. The same narrowing Autocomplete applies, asked first — folded as
371
- // every kit list folds (DUP-5).
372
- const needle = foldForSearch((target ? "" : email).trim(), locale);
373
- const offers =
374
- needle !== "" &&
375
- options.some((o) => [o.label, o.sublabel ?? ""].some((s) => foldForSearch(s, locale).includes(needle)));
371
+ // every kit list folds (DUP-5), and word by word as its list matches since 0.51.4
372
+ // (refactor audit 2026-10-30, DUP-4): "weber jonas" kept the list shut over a
373
+ // candidate the list itself would have shown.
374
+ const words = searchWords(target ? "" : email, locale);
375
+ const offers = words.length > 0 && options.some((o) => matchesSearch(words, [o.label, o.sublabel], locale));
376
376
 
377
377
  const captionNode = typeof caption === "function" ? caption(target) : caption;
378
378
  const shownError = error ?? failure;
@@ -4,6 +4,7 @@
4
4
 
5
5
  import type { SignChipLabels } from "./sign-chip";
6
6
 
7
+ /** @deprecated 0.52 — a `Chip` of your own, as keksdose's DirectionToggle is (MOD-5); removed in 0.53. */
7
8
  export const DEFAULT_SIGN_CHIP_LABELS: SignChipLabels = {
8
9
  outflow: "Outflow",
9
10
  inflow: "Inflow",
@@ -9,7 +9,9 @@ import { DEFAULT_SIGN_CHIP_LABELS } from "./sign-chip-labels";
9
9
  // ── Labels ────────────────────────────────────────────────────────────────────
10
10
 
11
11
  /** The words a {@link SignChip} says — the `signChip` namespace of
12
- * `<UiKitProvider labels>`, and per chip through its `labels` prop. */
12
+ * `<UiKitProvider labels>`, and per chip through its `labels` prop.
13
+ *
14
+ * @deprecated 0.52 — a `Chip` of your own, as keksdose's DirectionToggle is (MOD-5); removed in 0.53. */
13
15
  export interface SignChipLabels {
14
16
  /** The chip's text while the figure is negative — money going out. */
15
17
  outflow: string;
@@ -28,6 +30,7 @@ export interface SignChipLabels {
28
30
  // Defined in ./sign-chip-labels, which holds no component code (0.34, KS U8).
29
31
  export { DEFAULT_SIGN_CHIP_LABELS };
30
32
 
33
+ /** @deprecated 0.52 — a `Chip` of your own, as keksdose's DirectionToggle is (MOD-5); removed in 0.53. */
31
34
  export interface SignChipProps {
32
35
  /** The figure is negative (an outflow) — the same flag {@link AmountInput}'s
33
36
  * `negative` is, so one state feeds both: `<AmountInput negative={neg}
@@ -76,6 +79,12 @@ export interface SignChipProps {
76
79
  * to own the row the two share, and every form lays that row out differently (beside
77
80
  * the figure on a phone, in a grid column on a desktop). The chip is the part that was
78
81
  * being re-written; the row stays the form's.
82
+ *
83
+ * Deprecated in 0.52, removed in 0.53 (decision 4 of the refactor audit 2026-10-30,
84
+ * MOD-5): keksdose, whose chip this was (K15), kept its own `DirectionToggle` on `Chip`
85
+ * and `Tooltip`, and no other app renders one.
86
+ *
87
+ * @deprecated 0.52 — a `Chip` of your own, as keksdose's DirectionToggle is (MOD-5); removed in 0.53.
79
88
  */
80
89
  export function SignChip({ negative, onNegativeChange, disabled, labels: labelsProp, className }: SignChipProps) {
81
90
  const labels = useKitLabels("signChip", DEFAULT_SIGN_CHIP_LABELS, labelsProp);
@@ -0,0 +1,13 @@
1
+ // The English words of ./tabs, in a module with no component code: the English catalogue
2
+ // (src/i18n/defaults.ts) imports them without the component, so `en` loads as one chunk
3
+ // like the other languages (0.34, KS U8). ./tabs re-exports them. (In ui-labels.ts with the
4
+ // field base's until 0.52, MOD-7.)
5
+
6
+ import type { TabsLabels } from "./tabs";
7
+
8
+ export const DEFAULT_TABS_LABELS: TabsLabels = {
9
+ add: "Add tab",
10
+ remove: (tab) => `Remove ${tab}`,
11
+ more: "More tabs",
12
+ previous: "Previous tabs",
13
+ };
@@ -9,7 +9,7 @@ import { usePhoneLayout } from "../hooks/use-breakpoint";
9
9
  import { prefersReducedMotion } from "../lib/reduced-motion";
10
10
  import { useKitLabels, type LabelOverride } from "../i18n/kit-labels";
11
11
  import { mergeRefs } from "./field-parts";
12
- import { DEFAULT_TABS_LABELS } from "./ui-labels";
12
+ import { DEFAULT_TABS_LABELS } from "./tabs-labels";
13
13
  import { IconButton } from "./icon-button";
14
14
  import { HIT_AREA_LARGE } from "./button-look";
15
15
 
@@ -55,7 +55,7 @@ export interface TabsLabels {
55
55
  previous: string;
56
56
  }
57
57
 
58
- // Defined in ./ui-labels, which holds no component code (0.34, KS U8).
58
+ // Defined in ./tabs-labels, which holds no component code (0.34, KS U8).
59
59
  export { DEFAULT_TABS_LABELS };
60
60
 
61
61
  /**