@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
@@ -48,9 +48,9 @@ export interface MultiSelectOption<V extends string | number = string | number>
48
48
  * ids and `string[]` for string ones, and no call site casts. */
49
49
  export interface MultiSelectProps<V extends string | number = string | number>
50
50
  extends Omit<ComponentPropsWithoutRef<"div">, "onChange">, FieldHelpProps {
51
- options: MultiSelectOption<V>[];
51
+ options: readonly MultiSelectOption<V>[];
52
52
  /** The chosen values — the select family's `value` (API-4). */
53
- value?: V[];
53
+ value?: readonly V[];
54
54
  onChange: (next: V[]) => void;
55
55
  /** Singular/plural countable label, used when 1+ items are selected. Default:
56
56
  * `labels.selectedCount`, else `multiSelect.selectedCount` from the provider — the
@@ -116,6 +116,10 @@ export interface MultiSelectProps<V extends string | number = string | number>
116
116
  ref?: Ref<HTMLButtonElement>;
117
117
  }
118
118
 
119
+ /** "Select all" and "Clear": dimmed, with no hover, while there is nothing for them to do. */
120
+ const TOOLBAR_BUTTON =
121
+ "rounded px-2 py-0.5 text-secondary hover:bg-hover aria-disabled:cursor-not-allowed aria-disabled:opacity-40 aria-disabled:hover:bg-transparent";
122
+
119
123
  /**
120
124
  * Pick several of a fixed list — a filter's accounts, a comparison's data sets — with a
121
125
  * search box, "Select all" and "Clear"; nothing picked reads as "all".
@@ -158,7 +162,7 @@ export function MultiSelect<V extends string | number = string | number>(props:
158
162
  "aria-required": ariaRequired,
159
163
  ...rest
160
164
  } = props;
161
- const value = useMemo<V[]>(() => valueProp ?? [], [valueProp]);
165
+ const value = useMemo<readonly V[]>(() => valueProp ?? [], [valueProp]);
162
166
  // The rows as the family's options — the hint is the sublabel, searched like the label.
163
167
  const comboOptions = useMemo(
164
168
  () =>
@@ -338,21 +342,29 @@ export function MultiSelect<V extends string | number = string | number>(props:
338
342
  // hints are why it was widened at all (keksdose #147).
339
343
  width={{ minRem: 16, fit: true, maxRem: 32 }}
340
344
  className={panelClassName}
345
+ // Reached by Tab from the search box (the panel's rows are not tab stops), and
346
+ // `aria-disabled` with a guarded click rather than `disabled`: a pressed "Clear"
347
+ // with nothing left to clear disabled itself under the focus, which dropped it to
348
+ // <body> — JumpCalendar's arrows are the rule (refactor audit 2026-10-30, INP-9).
341
349
  toolbar={
342
350
  <div className="flex items-center justify-between gap-2 px-2 py-1.5 text-xs">
343
351
  <button
344
352
  type="button"
345
- onClick={selectAll}
346
- disabled={!canSelectAll}
347
- className="rounded px-2 py-0.5 text-secondary hover:bg-hover disabled:opacity-40"
353
+ onClick={() => {
354
+ if (canSelectAll) selectAll();
355
+ }}
356
+ aria-disabled={!canSelectAll || undefined}
357
+ className={TOOLBAR_BUTTON}
348
358
  >
349
359
  {text.selectAll}
350
360
  </button>
351
361
  <button
352
362
  type="button"
353
- onClick={clearAll}
354
- disabled={!canClear}
355
- className="rounded px-2 py-0.5 text-secondary hover:bg-hover disabled:opacity-40"
363
+ onClick={() => {
364
+ if (canClear) clearAll();
365
+ }}
366
+ aria-disabled={!canClear || undefined}
367
+ className={TOOLBAR_BUTTON}
356
368
  >
357
369
  {text.clear}
358
370
  </button>
@@ -3,6 +3,7 @@ import { createPortal } from "react-dom";
3
3
  import { X } from "lucide-react";
4
4
  import type { ComponentPropsWithoutRef, KeyboardEvent, ReactNode, Ref, RefObject } from "react";
5
5
  import { cn } from "../lib/cn";
6
+ import { hasContent } from "../lib/presence";
6
7
  import { mergeRefs } from "./field-parts";
7
8
  import { CLIPS_ATTRIBUTE } from "../lib/clipping";
8
9
  import { DropdownSearchHeader } from "./dropdown";
@@ -119,7 +120,8 @@ export function PickerSheet({
119
120
  // one way out of a full-screen sheet speak the app's language without each of
120
121
  // them having to (see the prop's note in `EntityCombobox`).
121
122
  const labels = useKitLabels("pickerSheet", DEFAULT_PICKER_SHEET_LABELS, { close: closeLabel, done: doneLabel });
122
- const hasFooter = (footer !== undefined && footer !== null && footer !== false) || Boolean(done);
123
+ // `hasContent`, so a `footer` of "" draws no empty bar (refactor audit 2026-10-30, DUP-14).
124
+ const hasFooter = hasContent(footer) || Boolean(done);
123
125
  useBodyScrollLock(open);
124
126
  /**
125
127
  * Back closes THE SHEET, not the dialog it was opened from (Keksdose live #309:
@@ -169,14 +171,15 @@ export function PickerSheet({
169
171
  * sheet knows when its own input exists. Popping the keyboard is the POINT here,
170
172
  * where in a form dialog it is the cost.
171
173
  *
172
- * **`restoreFocus` is off**, which is the uncomfortable half. Every caller in this
173
- * kit opens the sheet from the field's own `onFocus` handler, so handing focus back
174
- * to that field on close re-opens the sheet the user has just dismissed — a row tap
175
- * would select a value and immediately put the list back over it. The field that
176
- * opened it is the only thing that knows whether re-focusing it means "open"; a sheet
177
- * that cannot tell must not guess. The cost is that focus lands on `<body>` after a
178
- * dismissal, which on the phone this shape is for costs nothing, and on a pointer
179
- * device is what happened before this change too.
174
+ * **`restoreFocus` is off**, which is the uncomfortable half. `Combobox` and
175
+ * `InlineEntityCombobox` open the sheet from the field's own `onFocus` handler, so
176
+ * handing focus back to that field on close re-opens the sheet the user has just
177
+ * dismissed — a row tap would select a value and immediately put the list back over
178
+ * it. The field that opened it is the only thing that knows whether re-focusing it
179
+ * means "open"; a sheet that cannot tell must not guess. So the caller does it in
180
+ * `onClose` where it can: `ComboboxPanel`'s triggers open on a click, and its
181
+ * `onClose` hands focus back to the trigger (0.52, refactor audit 2026-10-30, INP-7) —
182
+ * a screen-reader user is in exactly this layout, and <body> was where they landed.
180
183
  */
181
184
  useFocusTrap(sheetRef, {
182
185
  active: open,
@@ -15,6 +15,13 @@ export interface PieChartLabels {
15
15
  * German, "42%" in English) — the function only arranges them.
16
16
  */
17
17
  slice: (label: string, value: string, percent: string) => string;
18
+ /**
19
+ * One slice's accessible name under `redact` (0.52): the label and the share, with no
20
+ * amount. `redact` blurs every figure on screen but not the ring, and the ring's names
21
+ * are attributes on untagged elements, which a session replay or a redaction keyed on
22
+ * `[data-private]` reads as they are. `percent` as for {@link PieChartLabels.slice}.
23
+ */
24
+ sliceShare: (label: string, percent: string) => string;
18
25
  /** The caption over the donut's centre figure. */
19
26
  total: string;
20
27
  /** What a chart with nothing to draw says, when the caller passes no `empty`. */
@@ -26,6 +33,7 @@ export interface PieChartLabels {
26
33
  export const DEFAULT_PIE_CHART_LABELS: PieChartLabels = {
27
34
  slices: "Chart slices",
28
35
  slice: (label, value, percent) => `${label}: ${value} (${percent})`,
36
+ sliceShare: (label, percent) => `${label}: ${percent}`,
29
37
  total: "Total",
30
38
  empty: "No data",
31
39
  legend: "Categories",
@@ -12,7 +12,8 @@ import type { ComponentProps, ComponentPropsWithRef, KeyboardEvent, ReactNode }
12
12
  import { Pie, PieChart as RechartsPieChart, Sector } from "recharts";
13
13
  import type { PieLabelRenderProps, PieSectorShapeProps } from "recharts";
14
14
  import { cn } from "../lib/cn";
15
- import { horizontalStep } from "../lib/direction";
15
+ import { dirOf, rovingTarget } from "../lib/direction";
16
+ import { shareFormat } from "../lib/share-format";
16
17
  import { useKitLabels, useKitLocale, type LabelOverride } from "../i18n/kit-labels";
17
18
  import { paletteFor } from "../theme/chart-palette";
18
19
  import { ChartContainer, ChartTooltip, ChartTooltipContent, type ChartConfig } from "./chart";
@@ -93,7 +94,8 @@ export interface PieChartProps extends Omit<ComponentPropsWithRef<"div">, "child
93
94
  * Tag every figure ON SCREEN `data-private` — the tooltip bubble, the centre and
94
95
  * `"value"` slice labels — so the host's demo-mode rule blurs it. A percentage alone
95
96
  * reveals no amount, so `"percent"` labels stay readable, and the slices themselves
96
- * are not tagged: a blurred ring is no picture at all.
97
+ * are not tagged: a blurred ring is no picture at all. So a slice's NAME says no
98
+ * amount either (0.52): "Occupied: 60%" (`labels.sliceShare`), not `labels.slice`.
97
99
  */
98
100
  redact?: boolean;
99
101
  /** What to show with nothing to draw. Default: `labels.empty`. */
@@ -138,8 +140,9 @@ function RedactedTooltipContent(props: ComponentProps<typeof ChartTooltipContent
138
140
  * clockwise from twelve o'clock, the order of the legend — with ←/→ following the
139
141
  * reading direction in RTL; Home/End go to the first and last. Each slice is named
140
142
  * "Label: value (xx%)" (`labels.slice`), because a colour and an angle are nothing a
141
- * screen reader can say, and focusing one reads it out in the donut's centre. With
142
- * `onSliceClick`, Enter and Space activate it as a click does.
143
+ * screen reader can say — under `redact` "Label: xx%" (`labels.sliceShare`) — and
144
+ * focusing one reads it out in the donut's centre. With `onSliceClick`, Enter and Space
145
+ * activate it as a click does.
143
146
  *
144
147
  * The legend switches slices off (`legend="toggle"`); the percentages are always of
145
148
  * what is drawn. The plot is not mirrored in RTL (see `ChartContainer`); the legend
@@ -177,25 +180,14 @@ export function PieChart({
177
180
  const { scale } = useTextSize();
178
181
  const box = chartHeightProps(height);
179
182
  const numberFormat = useMemo(() => new Intl.NumberFormat(locale), [locale]);
180
- const percentFormats = useMemo(
181
- () => ({
182
- whole: new Intl.NumberFormat(locale, { style: "percent", maximumFractionDigits: 0 }),
183
- fine: new Intl.NumberFormat(locale, { style: "percent", maximumFractionDigits: 1 }),
184
- }),
185
- [locale],
186
- );
187
183
  // Memoised, like everything the sectors are drawn from: they must not be rebuilt on
188
184
  // this component's own re-renders (see `pie` below).
189
185
  const formatValue = useCallback(
190
186
  (v: number) => (formatValueProp ? formatValueProp(v) : formatWithMinus(numberFormat, v)),
191
187
  [formatValueProp, numberFormat],
192
188
  );
193
- // One decimal under 10 %, where rounding to whole percents starts to lie — a slice
194
- // of 0.4 % labelled "0%" says it is not there.
195
- const formatShare = useCallback(
196
- (share: number) => (share < 0.1 ? percentFormats.fine : percentFormats.whole).format(share),
197
- [percentFormats],
198
- );
189
+ // One decimal under 10 %, the rule Treemap says its shares by too (lib/share-format).
190
+ const formatShare = useMemo(() => shareFormat(locale), [locale]);
199
191
 
200
192
  const [ownHidden, setOwnHidden] = useState<ReadonlySet<string>>(() => new Set());
201
193
  const hidden = hiddenProp ?? ownHidden;
@@ -273,17 +265,11 @@ export function PieChart({
273
265
  const d = drawn[index];
274
266
  if (!d) return <Sector key={key ?? undefined} {...sector} />;
275
267
  const onKeyDown = (event: KeyboardEvent<SVGGElement>) => {
276
- const step = horizontalStep(event.key, event.currentTarget);
277
- let target: number | undefined;
278
- if (step) target = index + step;
279
- else if (event.key === "ArrowDown") target = index + 1;
280
- else if (event.key === "ArrowUp") target = index - 1;
281
- else if (event.key === "Home") target = 0;
282
- else if (event.key === "End") target = drawn.length - 1;
268
+ // Round the circle: past the last slice is the first, as the eye goes.
269
+ const target = rovingTarget(event.key, dirOf(event.currentTarget), index, drawn.length, true);
283
270
  if (target !== undefined) {
284
271
  event.preventDefault();
285
- // Round the circle: past the last slice is the first, as the eye goes.
286
- refs.current[((target % drawn.length) + drawn.length) % drawn.length]?.focus();
272
+ refs.current[target]?.focus();
287
273
  } else if (clickable && (event.key === "Enter" || event.key === " ")) {
288
274
  event.preventDefault();
289
275
  clickRef.current?.(d.slice.key, d.slice);
@@ -297,7 +283,15 @@ export function PieChart({
297
283
  role={clickable ? "button" : "img"}
298
284
  // The first slice until the effect below moves the stop.
299
285
  tabIndex={index === 0 ? 0 : -1}
300
- aria-label={labels.slice(d.slice.label, formatValue(d.value), formatShare(d.share))}
286
+ // Under `redact` with no amount: the ring is left untagged so it stays a picture,
287
+ // and its names are attributes a session replay or a redaction keyed on
288
+ // `[data-private]` reads as they are — "Occupied: €6.00 (60%)" told the amount the
289
+ // blurred centre and tooltip hid (0.52 code review; Marcel's decision).
290
+ aria-label={
291
+ redact
292
+ ? labels.sliceShare(d.slice.label, formatShare(d.share))
293
+ : labels.slice(d.slice.label, formatValue(d.value), formatShare(d.share))
294
+ }
301
295
  data-slice={d.slice.key}
302
296
  onKeyDown={onKeyDown}
303
297
  onFocus={() => {
@@ -313,7 +307,7 @@ export function PieChart({
313
307
  </g>
314
308
  );
315
309
  },
316
- [drawn, labels, formatValue, formatShare, clickable],
310
+ [drawn, labels, formatValue, formatShare, clickable, redact],
317
311
  );
318
312
 
319
313
  const label = useCallback(
@@ -37,6 +37,9 @@ export { DEFAULT_POPOVER_LABELS };
37
37
  */
38
38
  export interface PopoverProps extends Omit<ComponentPropsWithoutRef<"div">, "children"> {
39
39
  trigger: (state: { open: boolean; toggle: () => void; ref: RefObject<HTMLButtonElement | null> }) => ReactNode;
40
+ /** The panel's content. `close` shuts the panel and, when focus is in it, puts focus
41
+ * on the trigger before returning — so a dialog the same handler opens gives it back
42
+ * there (0.52). */
40
43
  children: (close: () => void) => ReactNode;
41
44
  /**
42
45
  * The panel's width: `"18rem"` (the default) grows with the text size — the panel
@@ -125,6 +128,17 @@ export function Popover({
125
128
  // across a right-to-left calendar or filter rendered left-to-right.
126
129
  const [dir, setDir] = useState<Direction>("ltr");
127
130
  const close = () => setOpen(false);
131
+ // The `close` the children get also hands focus to the trigger, AT ONCE, when it is
132
+ // inside the panel. The trap restores it too, but only after the commit — and a dialog
133
+ // opened in the same handler records its own restore target during that commit's
134
+ // render: the menu item that is about to go. RowActions' "Delete" asks first, and the
135
+ // answered confirm dropped focus on <body>, mid-table (refactor audit 2026-10-30,
136
+ // INP-2). Escape and an outside press keep the plain close: nothing opens after them.
137
+ const closeFromPanel = () => {
138
+ const focusInside = panelRef.current?.contains(document.activeElement) ?? false;
139
+ setOpen(false);
140
+ if (focusInside) triggerRef.current?.focus();
141
+ };
128
142
  const toggle = () => {
129
143
  setDir(dirOf(triggerRef.current));
130
144
  setOpen((v) => !v);
@@ -242,7 +256,10 @@ export function Popover({
242
256
  className,
243
257
  )}
244
258
  >
245
- {children(close)}
259
+ {
260
+ // eslint-disable-next-line react-hooks/refs -- handed to the items' handlers: it reads the trigger and the focus when an item is chosen, never while rendering
261
+ children(closeFromPanel)
262
+ }
246
263
  </div>,
247
264
  document.body,
248
265
  )}
@@ -3,6 +3,7 @@ import type { KeyboardEvent, MouseEvent, ReactElement, ReactNode } from "react";
3
3
  import { MoreHorizontal } from "lucide-react";
4
4
  import type { LucideIcon } from "lucide-react";
5
5
  import { cn } from "../lib/cn";
6
+ import { hasContent } from "../lib/presence";
6
7
  import { useLargeText } from "../hooks/use-large-text";
7
8
  import { useKitLabels, type LabelOverride } from "../i18n/kit-labels";
8
9
  import { Popover } from "./popover";
@@ -466,7 +467,7 @@ function stopActivationKeys(e: KeyboardEvent) {
466
467
  */
467
468
  function useActionHref(action: RowAction): string | undefined {
468
469
  const reason = useCommitReason(action.commit, action.disabledReason);
469
- const refused = reason !== undefined && reason !== null && reason !== false && reason !== "";
470
+ const refused = hasContent(reason);
470
471
  return action.href !== undefined && !action.pending && !refused ? action.href : undefined;
471
472
  }
472
473
 
@@ -3,6 +3,8 @@ import { NavPills } from "./nav-pills";
3
3
  import type { NavPillItem, NavPillLinkProps } from "./nav-pills";
4
4
  import type { ReactElement, Ref } from "react";
5
5
 
6
+ /** @deprecated 0.52 — `NavPillsProps` with `layout="scroll"`, what SectionNav wraps; removed in
7
+ * 0.53 (no app renders SectionNav: refactor audit 2026-10-30, MOD-5). */
6
8
  export interface SectionNavProps<T extends string> {
7
9
  /** The section's pages, each with its `href` (a pill without one is a button that
8
10
  * calls `onSelect`). Labels short: the row is one line. */
@@ -37,6 +39,11 @@ export interface SectionNavProps<T extends string> {
37
39
  * Place it right under the page's title (`PageHeader`); the AppShell's own row of a
38
40
  * group's pages above the bar (`mobileSubNav`) is the shell-wide alternative — use one,
39
41
  * not both, for the same pages.
42
+ *
43
+ * @deprecated 0.52 — `<NavPills layout="scroll" itemClassName="min-h-11 focus-visible:ring-inset"
44
+ * className="md:hidden">`, the same row; removed in 0.53. kastlan, whose section pills it
45
+ * was made for (0.49 KIT-6), never adopted it: no app renders it (refactor audit
46
+ * 2026-10-30, MOD-5).
40
47
  */
41
48
  export function SectionNav<T extends string>({
42
49
  items,
@@ -143,8 +143,8 @@ export function oneAxis(
143
143
 
144
144
  /** One source's samples: an abscissa and the channels measured against it. */
145
145
  export interface SeriesSource {
146
- x: number[];
147
- channels: Record<string, number[]>;
146
+ x: readonly number[];
147
+ channels: Readonly<Record<string, readonly number[]>>;
148
148
  }
149
149
 
150
150
  /**
@@ -155,7 +155,7 @@ export interface SeriesSource {
155
155
  * has no sample the key is absent, and `connectNulls` bridges the hole with the same
156
156
  * straight segment an interpolation would have drawn — without claiming a measurement.
157
157
  */
158
- export function mergeSeries(sources: SeriesSource[]): Record<string, number>[] {
158
+ export function mergeSeries(sources: readonly SeriesSource[]): Record<string, number>[] {
159
159
  const byAbscissa = new Map<number, Record<string, number>>();
160
160
  for (const source of sources) {
161
161
  source.x.forEach((value, index) => {
@@ -8,15 +8,18 @@
8
8
  export interface SeriesChartLabels {
9
9
  /** The button that puts a zoomed chart back to its full extent. Visible text. */
10
10
  resetZoom: string;
11
- /** Accessible name of the drag surface laid over the plot. It is the only place the
12
- * gesture is explained, so it says how the drag is read and how to undo it. */
11
+ /** The drag-to-zoom gesture, said at the end of a zoomable chart's description (the
12
+ * figure's `aria-describedby`; until 0.52 the name of the drag surface, an
13
+ * `application` nothing could focus). It is the only place the gesture is explained,
14
+ * so it says how the drag is read and how to undo it. */
13
15
  zoomHint: string;
14
16
  /** What a chart with nothing to draw says, when the caller passes no `empty`. */
15
17
  empty: string;
16
18
  /** Accessible name of a `ToggleLegend` — a group of switches, one per series. */
17
19
  legend: string;
18
- /** Accessible name of the group of keyboard stops a clickable chart (`onPointClick`)
19
- * lays over its bars or periods — one tab stop, arrow keys between them. */
20
+ /** Accessible name of the group of keyboard stops a chart lays over its bars or
21
+ * periods — one tab stop, arrow keys between them; buttons with `onPointClick`, and
22
+ * since 0.52 images to read without. */
20
23
  points: string;
21
24
  }
22
25