@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
@@ -2,7 +2,7 @@
2
2
  // catalogue (src/i18n/defaults.ts) imports them without the component, so `en` loads as one
3
3
  // chunk like the other languages (0.34, KS U8). ./register-form re-exports them.
4
4
 
5
- import { englishRateLimited } from "./auth-errors";
5
+ import { englishRateLimited } from "./auth-errors-labels";
6
6
  import type { RegisterLabels } from "./register-form";
7
7
 
8
8
  /** `Required`: every key, the 0.30 one included, has its English here. */
@@ -3,7 +3,7 @@
3
3
  // loads as one chunk like the other languages (0.34, KS U8). ./reset-password-form
4
4
  // re-exports them.
5
5
 
6
- import { englishRateLimited } from "./auth-errors";
6
+ import { englishRateLimited } from "./auth-errors-labels";
7
7
  import type { ResetPasswordLabels } from "./reset-password-form";
8
8
 
9
9
  /** `Required`: every key, the 0.30 one included, has its English here. */
@@ -2,6 +2,7 @@ import { useEffect, useId, useRef, useState } from "react";
2
2
  import type { ComponentPropsWithRef, FormEvent, ReactNode } from "react";
3
3
  import { CheckCircle2, XCircle } from "lucide-react";
4
4
  import { cn } from "../lib/cn";
5
+ import { describeFailure } from "../lib/describe-failure";
5
6
  import { useKitLabels, type LabelOverride } from "../i18n/kit-labels";
6
7
  import { AlertBanner } from "../components/alert-banner";
7
8
  import { LoadingState } from "../components/loading-state";
@@ -291,12 +292,15 @@ export function ResetPasswordForm({
291
292
  setPhase({ token, phase: { kind: "invalid" } });
292
293
  return;
293
294
  }
294
- // The app's words first, then the throttle's, then the kit's catch-all.
295
+ // The app's words first, then the throttle's, then the kit's catch-all — an app's
296
+ // "" is no words (refactor audit 2026-10-30, DUP-14: `??` drew an empty alert).
295
297
  setFailure(
296
- describeError?.(error) ??
297
- (isRateLimited(error)
298
+ describeFailure(
299
+ describeError?.(error),
300
+ isRateLimited(error)
298
301
  ? (labels.rateLimited ?? DEFAULT_RESET_PASSWORD_LABELS.rateLimited)(retryAfterSeconds(error))
299
- : labels.failed),
302
+ : labels.failed,
303
+ ),
300
304
  );
301
305
  },
302
306
  );
@@ -2,7 +2,7 @@
2
2
  // catalogue (src/i18n/defaults.ts) imports them without the component, so `en` loads as one
3
3
  // chunk like the other languages (0.34, KS U8). ./sign-in-form re-exports them.
4
4
 
5
- import { englishRateLimited } from "./auth-errors";
5
+ import { englishRateLimited } from "./auth-errors-labels";
6
6
  import type { SignInLabels } from "./sign-in-form";
7
7
 
8
8
  /** `Required`: every key, the 0.30 ones included, has its English here. */
@@ -91,12 +91,6 @@ export function useOncePerKey<T>(
91
91
  }, [key]);
92
92
  }
93
93
 
94
- /** Whether a callback's return is a promise to wait for. A callback that returns
95
- * nothing is done when it returns. */
96
- export function isThenable(value: unknown): value is PromiseLike<unknown> {
97
- return typeof (value as PromiseLike<unknown> | null)?.then === "function";
98
- }
99
-
100
94
  /**
101
95
  * Move focus to `ref` when `active` turns true — the outcome a person's own submit led
102
96
  * to ("If an account exists … the link is on its way", "Your password has been
@@ -2,7 +2,7 @@
2
2
  // catalogue (src/i18n/defaults.ts) imports them without the component, so `en` loads as one
3
3
  // chunk like the other languages (0.34, KS U8). ./verify-email re-exports them.
4
4
 
5
- import { englishRateLimited } from "./auth-errors";
5
+ import { englishRateLimited } from "./auth-errors-labels";
6
6
  import type { VerifyEmailLabels } from "./verify-email";
7
7
 
8
8
  export const DEFAULT_VERIFY_EMAIL_LABELS: VerifyEmailLabels = {
@@ -2,13 +2,15 @@ import { useEffect, useState } from "react";
2
2
  import type { ComponentPropsWithRef, ReactNode } from "react";
3
3
  import { CheckCircle2, MailWarning, TimerOff, XCircle } from "lucide-react";
4
4
  import { cn } from "../lib/cn";
5
+ import { describeFailure } from "../lib/describe-failure";
5
6
  import { useKitLabels, type LabelOverride } from "../i18n/kit-labels";
6
7
  import { useAnnounce } from "../hooks/use-announce";
7
8
  import { AlertBanner } from "../components/alert-banner";
8
9
  import { LoadingState } from "../components/loading-state";
9
10
  import { Button } from "../components/button";
10
11
  import { EmptyState } from "../components/empty-state";
11
- import { OUTCOME_CLASS, STATUS_HEADING_CLASS, isThenable, useOncePerKey } from "./status-parts";
12
+ import { isThenable } from "../lib/thenable";
13
+ import { OUTCOME_CLASS, STATUS_HEADING_CLASS, useOncePerKey } from "./status-parts";
12
14
  import { authErrorCode, englishRateLimited, isRateLimited, retryAfterSeconds } from "./auth-errors";
13
15
  import type { AuthHeadingLevel } from "./status-parts";
14
16
  import { DEFAULT_VERIFY_EMAIL_LABELS } from "./verify-email-labels";
@@ -150,13 +152,16 @@ function ResendStatus({
150
152
  labels: VerifyEmailLabels;
151
153
  className?: string;
152
154
  }) {
153
- // The app's words first, then the throttle's, then the kit's catch-all.
155
+ // The app's words first, then the throttle's, then the kit's catch-all — an app's ""
156
+ // is no words (refactor audit 2026-10-30, DUP-14: `??` printed an empty status).
154
157
  const failed =
155
158
  phase === "failed"
156
- ? (describeError?.(error) ??
157
- (isRateLimited(error)
158
- ? (labels.rateLimited ?? englishRateLimited)(retryAfterSeconds(error))
159
- : labels.resendError))
159
+ ? describeFailure(
160
+ describeError?.(error),
161
+ isRateLimited(error)
162
+ ? (labels.rateLimited ?? englishRateLimited)(retryAfterSeconds(error))
163
+ : labels.resendError,
164
+ )
160
165
  : "";
161
166
  return (
162
167
  <span role="status" className={cn(phase === "failed" ? "text-danger" : "text-success", className)}>
@@ -1,21 +1,29 @@
1
- import { useKitLabels, useKitLocale } from "../i18n/kit-labels";
1
+ import { useKitLabels } from "../i18n/kit-labels";
2
2
  import type { LabelOverride } from "../i18n/kit-labels";
3
3
  import { DEFAULT_COMMON_LABELS } from "../i18n/shared-labels";
4
- import { formatDate } from "../lib/format";
4
+ import { useDayFormatter } from "../lib/day-format";
5
5
  import type { DateInput } from "../lib/format";
6
6
  import { Button } from "../components/button";
7
7
  import { DialogFrame } from "../components/dialog-frame";
8
8
  import { COMMIT_EXCEPT_BILLING } from "../components/write-lock";
9
9
  import { useBillingLabels } from "./billing-labels";
10
10
  import type { BillingLabels } from "./billing-labels";
11
+ import { dialogClose } from "./dialog-close";
12
+ import type { WithDialogClose } from "./dialog-close";
11
13
 
12
- export interface CancelSubscriptionConfirmProps {
14
+ /** {@link CancelSubscriptionConfirmProps} before one of its two close props is required. */
15
+ interface CancelSubscriptionConfirmFields {
13
16
  open: boolean;
14
- /** `false` when the admin dismisses it — Back, Escape, the backdrop. Confirm leaves it
15
- * open: close it once `POST /billing/cancel` answers. */
16
- onOpenChange: (open: boolean) => void;
17
- /** The overview's `current_period_end`: the day the subscription ends. Formatted with
18
- * the kit's date formatter (`formatDate`, `"medium"`). */
17
+ /** The admin dismissed it — Back, Escape, the backdrop. Confirm leaves it open: close it
18
+ * once `POST /billing/cancel` answers. 0.52: every other kit dialog's `onClose`
19
+ * (CONTRIBUTING §4; refactor audit 2026-10-30, API-5). */
20
+ onClose?: () => void;
21
+ /** @deprecated 0.52 — `onClose`, as every other kit dialog; removed in 0.53. Called with
22
+ * `false` when there is no `onClose`. */
23
+ onOpenChange?: (open: boolean) => void;
24
+ /** The overview's `current_period_end`: the day the subscription ends, in a sentence —
25
+ * the `<UiKitProvider formatDate>` (the app's date preference) when it set one, else the
26
+ * kit's `formatDate`, `"medium"`, in the provider's locale and `timeZone` (0.52). */
19
27
  periodEnd: DateInput;
20
28
  /** Confirm: the app's `POST /billing/cancel` (server-kit 0.14, §16.3). */
21
29
  onConfirm: () => void;
@@ -28,6 +36,11 @@ export interface CancelSubscriptionConfirmProps {
28
36
  labels?: LabelOverride<BillingLabels>;
29
37
  }
30
38
 
39
+ /** What {@link CancelSubscriptionConfirm} takes: `onClose`, or alone the deprecated
40
+ * `onOpenChange`, is required (0.52 code review: with neither it compiled, and nothing
41
+ * could dismiss it). */
42
+ export type CancelSubscriptionConfirmProps = WithDialogClose<CancelSubscriptionConfirmFields>;
43
+
31
44
  /**
32
45
  * The in-app cancel's confirm (docs/billing-harmonization.md §16.2 decision 2, §16.4,
33
46
  * ui-kit 0.42): "Cancel subscription" for an admin the provider's portal doesn't open for
@@ -38,7 +51,7 @@ export interface CancelSubscriptionConfirmProps {
38
51
  *
39
52
  * <CancelSubscriptionConfirm
40
53
  * open={asking}
41
- * onOpenChange={setAsking}
54
+ * onClose={() => setAsking(false)}
42
55
  * periodEnd={overview.current_period_end}
43
56
  * pending={cancel.isPending}
44
57
  * onConfirm={() => cancel.mutate()}
@@ -54,6 +67,7 @@ export interface CancelSubscriptionConfirmProps {
54
67
  */
55
68
  export function CancelSubscriptionConfirm({
56
69
  open,
70
+ onClose,
57
71
  onOpenChange,
58
72
  periodEnd,
59
73
  onConfirm,
@@ -63,14 +77,14 @@ export function CancelSubscriptionConfirm({
63
77
  }: CancelSubscriptionConfirmProps) {
64
78
  const labels = useBillingLabels(labelsProp);
65
79
  const common = useKitLabels("common", DEFAULT_COMMON_LABELS);
66
- const locale = useKitLocale(localeProp);
80
+ const day = useDayFormatter(undefined, localeProp);
67
81
 
68
82
  return (
69
83
  <DialogFrame
70
84
  open={open}
71
85
  title={labels.cancelConfirmTitle}
72
- description={labels.cancelConfirmBody(formatDate(periodEnd, "medium", { locale }))}
73
- onClose={() => onOpenChange(false)}
86
+ description={labels.cancelConfirmBody(day(periodEnd))}
87
+ onClose={dialogClose({ onClose, onOpenChange })}
74
88
  busy={pending}
75
89
  data-cancel-subscription-confirm=""
76
90
  actions={(close) => (
@@ -0,0 +1,34 @@
1
+ /**
2
+ * How the three billing confirms — `CancelSubscriptionConfirm`, `PlanSwitchConfirm`,
3
+ * `GrantWarningConfirm` — are closed in 0.52: `onClose`, as every other kit dialog
4
+ * (CONTRIBUTING §4; refactor audit 2026-10-30, API-5), and for one minor the deprecated
5
+ * `onOpenChange`, called with `false` when there is no `onClose`.
6
+ *
7
+ * 0.52 made `onOpenChange` optional for its deprecation and gave `onClose` beside it as
8
+ * optional too, so a confirm given NEITHER compiled — `<CancelSubscriptionConfirm open
9
+ * periodEnd={…} onConfirm={…} />` — and Back, Escape and the backdrop then called nothing:
10
+ * a dialog nobody could dismiss, where 0.51's compiler had required `onOpenChange` (0.52
11
+ * code review, cancel-subscription.tsx). And the fallback between the two was written
12
+ * three times, once per dialog.
13
+ *
14
+ * @internal Not part of the barrel; each dialog's props type is.
15
+ */
16
+
17
+ /** The two close props as a dialog's own props interface declares them. */
18
+ interface CloseProps {
19
+ onClose?: () => void;
20
+ onOpenChange?: (open: boolean) => void;
21
+ }
22
+
23
+ /**
24
+ * `P` with ONE of its two close props required — `onClose`, or alone the deprecated
25
+ * `onOpenChange`; both may be given, and `onClose` is then the one called. Built from
26
+ * `P`'s own members (`Pick`), so their docs and the deprecation stay the ones `P` writes.
27
+ */
28
+ export type WithDialogClose<P extends CloseProps> = P &
29
+ (Required<Pick<P, "onClose">> | Required<Pick<P, "onOpenChange">>);
30
+
31
+ /** The dialog's close: `onClose`, else `onOpenChange(false)`. */
32
+ export function dialogClose({ onClose, onOpenChange }: CloseProps): () => void {
33
+ return () => (onClose ? onClose() : onOpenChange?.(false));
34
+ }
@@ -14,6 +14,8 @@ import { Button } from "../components/button";
14
14
  import { DialogFrame } from "../components/dialog-frame";
15
15
  import { useBillingLabels } from "./billing-labels";
16
16
  import type { BillingLabels } from "./billing-labels";
17
+ import { dialogClose } from "./dialog-close";
18
+ import type { WithDialogClose } from "./dialog-close";
17
19
  import { BILLING_INTERVALS, billingCurrencyFor, formatPlanPrice, planPrice } from "./plan-price";
18
20
  import type { BillingCurrency, BillingInterval, PlanPrices } from "./plan-price";
19
21
 
@@ -489,9 +491,7 @@ export function PlanPicker({
489
491
  {permanentGrant && !switching && (
490
492
  <GrantWarningConfirm
491
493
  open={warned !== null}
492
- onOpenChange={(open) => {
493
- if (!open) setWarned(null);
494
- }}
494
+ onClose={() => setWarned(null)}
495
495
  onConfirm={() => {
496
496
  if (warned) onChoose(warned);
497
497
  }}
@@ -502,11 +502,16 @@ export function PlanPicker({
502
502
  );
503
503
  }
504
504
 
505
- export interface GrantWarningConfirmProps {
505
+ /** {@link GrantWarningConfirmProps} before one of its two close props is required. */
506
+ interface GrantWarningConfirmFields {
506
507
  /** Shown, controlled. */
507
508
  open: boolean;
508
- /** `false` on "Back", Escape, the backdrop — and after "Buy anyway". */
509
- onOpenChange: (open: boolean) => void;
509
+ /** "Back", Escape, the backdrop — and after "Buy anyway". 0.52: every other kit
510
+ * dialog's `onClose` (CONTRIBUTING §4; refactor audit 2026-10-30, API-5). */
511
+ onClose?: () => void;
512
+ /** @deprecated 0.52 — `onClose`, as every other kit dialog; removed in 0.53. Called with
513
+ * `false` when there is no `onClose`. */
514
+ onOpenChange?: (open: boolean) => void;
510
515
  /** "Buy anyway": the app opens its checkout. The dialog closes itself after it. */
511
516
  onConfirm: () => void;
512
517
  /** Prop > `<UiKitProvider labels={{ billing }}>` > English: `grantWarningTitle`,
@@ -514,6 +519,11 @@ export interface GrantWarningConfirmProps {
514
519
  labels?: LabelOverride<BillingLabels>;
515
520
  }
516
521
 
522
+ /** What {@link GrantWarningConfirm} takes: `onClose`, or alone the deprecated
523
+ * `onOpenChange`, is required (0.52 code review: with neither it compiled, and nothing
524
+ * could dismiss it). */
525
+ export type GrantWarningConfirmProps = WithDialogClose<GrantWarningConfirmFields>;
526
+
517
527
  /**
518
528
  * 0.42 (§16.8 B): the permanent-grant warning before a checkout — `grantWarningTitle`,
519
529
  * `grantWarningBody`, "Back" and "Buy anyway" (`grantWarningAction`). {@link PlanPicker}
@@ -523,26 +533,41 @@ export interface GrantWarningConfirmProps {
523
533
  * to a checkout — show this before that checkout, so a permanent-grant holder is still
524
534
  * warned. Carries `data-grant-warning`.
525
535
  */
526
- export function GrantWarningConfirm({ open, onOpenChange, onConfirm, labels: labelsProp }: GrantWarningConfirmProps) {
536
+ export function GrantWarningConfirm({
537
+ open,
538
+ onClose,
539
+ onOpenChange,
540
+ onConfirm,
541
+ labels: labelsProp,
542
+ }: GrantWarningConfirmProps) {
527
543
  const labels = useBillingLabels(labelsProp);
528
544
  const common = useKitLabels("common", DEFAULT_COMMON_LABELS);
545
+ const close = dialogClose({ onClose, onOpenChange });
529
546
  return (
530
547
  <DialogFrame
531
548
  open={open}
532
549
  title={labels.grantWarningTitle}
533
550
  description={labels.grantWarningBody}
534
- onClose={() => onOpenChange(false)}
551
+ onClose={close}
535
552
  data-grant-warning=""
536
- actions={(close) => (
553
+ actions={(lower) => (
537
554
  <>
538
- <Button variant="secondary" onClick={close}>
555
+ <Button variant="secondary" onClick={lower}>
539
556
  {common.back}
540
557
  </Button>
541
558
  <Button
542
559
  variant="default"
543
560
  onClick={() => {
561
+ // Already closed, and lowering: a second press is no second checkout, for an
562
+ // app that shows this dialog itself as much as for PlanPicker.
563
+ if (!open) return;
544
564
  onConfirm();
545
- onOpenChange(false);
565
+ // The caller's close, at once — not `lower`, the panel's animated one, which
566
+ // reports the close 220 ms later. PlanPicker clears the warned choice in it,
567
+ // and the lowering panel is not inert: a double click on "Buy anyway" opened
568
+ // the checkout twice (0.52 code review, plan-card.tsx). The caller's `open`
569
+ // turning false still plays the exit.
570
+ close();
546
571
  }}
547
572
  >
548
573
  {labels.grantWarningAction}
@@ -0,0 +1,66 @@
1
+ // The words of admin/plan-change and their type, in a module with no component code: the
2
+ // English catalogue (src/i18n/defaults.ts) imports them without the component, so `en`
3
+ // loads as one chunk like the other languages (0.34, KS U8). In billing/ since 0.52:
4
+ // PlanSwitchConfirm reads them too, and with them in admin/ the billing and admin folders
5
+ // imported each other (refactor audit 2026-10-30, MOD-6). admin/plan-change re-exports
6
+ // both, and admin/plan-change-labels still answers for the old path.
7
+
8
+ /** The `planChange` namespace: the column, the grant dialog and the result's lines. */
9
+ export interface PlanChangeLabels {
10
+ /** The column's header: "Plan". */
11
+ column: string;
12
+ /** The dialog's title: "Change plan". */
13
+ title: string;
14
+ /** Its confirm button: "Change plan". */
15
+ confirm: string;
16
+ /** The plan select's label: "Plan". */
17
+ plan: string;
18
+ /** The line over the select: "Current plan: Free". */
19
+ current: (plan: string) => string;
20
+ /** Under the select — the fact that is not on the button. */
21
+ keepsItems: string;
22
+ /** The end of a free grant's field: "Free until". */
23
+ until: string;
24
+ /** Under it. */
25
+ untilHint: string;
26
+ /** Why the confirm is held while nothing would change. */
27
+ needsChange: string;
28
+ /** The result: the plan moved from one to another. */
29
+ changed: (from: string, to: string) => string;
30
+ /** The result: an account with no plan before, or the same plan again. */
31
+ set: (to: string) => string;
32
+ /** The result: a running beta kept its own end (§12.34); only the plan moved. */
33
+ keptBeta: string;
34
+ /** The result: the grant runs until `date` (formatted). */
35
+ untilDone: (date: string) => string;
36
+ /** The result: the account owns more than the new plan allows. */
37
+ overLimit: string;
38
+ /**
39
+ * The column's usage, spelled out (its tooltip): "1 of 5 budgets". Figures arrive
40
+ * formatted; `dimension` is the app's word, as `usage.label` gives it — since 0.33.1
41
+ * in the form the LIMIT takes when the label gives its plural forms ("1 of 1 budget",
42
+ * "1 of 5 budgets"): in every shipped language the word follows the limit, or heads
43
+ * the line in German, whose `von` would want a dative plural no app form carries
44
+ * ("Budgets: 1 von 5"). An override of yours gets the same word. Since 0.34 the grant
45
+ * dialog's usage line too, when `usage` comes as the column's shape.
46
+ */
47
+ usageOf: (used: string, limit: string, dimension: string) => string;
48
+ }
49
+
50
+ export const DEFAULT_PLAN_CHANGE_LABELS: PlanChangeLabels = {
51
+ column: "Plan",
52
+ title: "Change plan",
53
+ confirm: "Change plan",
54
+ plan: "Plan",
55
+ current: (plan) => `Current plan: ${plan}`,
56
+ keepsItems: "A smaller plan only blocks creating more; nothing is deleted.",
57
+ until: "Free until",
58
+ untilHint: "Leave empty for no end. A running beta keeps its own end.",
59
+ needsChange: "Pick another plan or an end date.",
60
+ changed: (from, to) => `Plan changed from ${from} to ${to}.`,
61
+ set: (to) => `Plan set to ${to}.`,
62
+ keptBeta: "The beta keeps its end; only the plan changed.",
63
+ untilDone: (date) => `Free until ${date}.`,
64
+ overLimit: "Above the new plan’s limit: nothing is removed, new items are blocked.",
65
+ usageOf: (used, limit, dimension) => `${used} of ${limit} ${dimension}`,
66
+ };
@@ -3,15 +3,18 @@ import type { LabelOverride } from "../i18n/kit-labels";
3
3
  import { DEFAULT_COMMON_LABELS } from "../i18n/shared-labels";
4
4
  import { pluralForm } from "../i18n/plurals";
5
5
  import type { PluralForms } from "../i18n/plurals";
6
- import { formatDate, formatMoney, formatNumber } from "../lib/format";
6
+ import { useDayFormatter } from "../lib/day-format";
7
+ import { formatMoney, formatNumber } from "../lib/format";
7
8
  import { AlertBanner } from "../components/alert-banner";
8
9
  import { Button } from "../components/button";
9
10
  import { DialogFrame } from "../components/dialog-frame";
10
11
  import { Spinner } from "../components/spinner";
11
12
  import { COMMIT_EXCEPT_BILLING } from "../components/write-lock";
12
- import { DEFAULT_PLAN_CHANGE_LABELS } from "../admin/plan-change-labels";
13
+ import { DEFAULT_PLAN_CHANGE_LABELS } from "./plan-change-labels";
13
14
  import { useBillingLabels } from "./billing-labels";
14
15
  import type { BillingLabels } from "./billing-labels";
16
+ import { dialogClose } from "./dialog-close";
17
+ import type { WithDialogClose } from "./dialog-close";
15
18
  import type { PlanSwitchPreview } from "./billing-overview";
16
19
  import { minorToMajor } from "./plan-price";
17
20
  import type { BillingInterval } from "./plan-price";
@@ -36,11 +39,16 @@ export interface PlanSwitchSide {
36
39
  interval: BillingInterval;
37
40
  }
38
41
 
39
- export interface PlanSwitchConfirmProps {
42
+ /** {@link PlanSwitchConfirmProps} before one of its two close props is required. */
43
+ interface PlanSwitchConfirmFields {
40
44
  open: boolean;
41
- /** `false` when the payer dismisses it — Cancel, Escape, the backdrop. Confirm leaves
42
- * it open: close it once the switch answers. */
43
- onOpenChange: (open: boolean) => void;
45
+ /** The payer dismissed it — Cancel, Escape, the backdrop. Confirm leaves it open: close
46
+ * it once the switch answers. 0.52: every other kit dialog's `onClose` (CONTRIBUTING
47
+ * §4; refactor audit 2026-10-30, API-5). */
48
+ onClose?: () => void;
49
+ /** @deprecated 0.52 — `onClose`, as every other kit dialog; removed in 0.53. Called with
50
+ * `false` when there is no `onClose`. */
51
+ onOpenChange?: (open: boolean) => void;
44
52
  /** What the payer pays now: the overview's `paid`. */
45
53
  from: PlanSwitchSide;
46
54
  /** The pick. */
@@ -64,7 +72,8 @@ export interface PlanSwitchConfirmProps {
64
72
  formatLimit?: (dimension: string, value: number) => string;
65
73
  /** Confirm: the app's `POST /billing/plan` with `{plan, interval}` of `to`. */
66
74
  onConfirm: () => void;
67
- /** The figures' and the date's locale. Default: the provider's. */
75
+ /** The figures' and the date's locale. Default: the provider's. The next charge's date
76
+ * is written by the `<UiKitProvider formatDate>` when the app set one (0.52). */
68
77
  locale?: string;
69
78
  /**
70
79
  * 0.42 (§16.2 decision 5, §16.8 B): the payer's free grant runs without an end —
@@ -79,6 +88,11 @@ export interface PlanSwitchConfirmProps {
79
88
  labels?: LabelOverride<BillingLabels>;
80
89
  }
81
90
 
91
+ /** What {@link PlanSwitchConfirm} takes: `onClose`, or alone the deprecated
92
+ * `onOpenChange`, is required (0.52 code review: with neither it compiled, and nothing
93
+ * could dismiss it). */
94
+ export type PlanSwitchConfirmProps = WithDialogClose<PlanSwitchConfirmFields>;
95
+
82
96
  /**
83
97
  * The confirm for a plan switch (§15.2.10): from → to, each with its billing period;
84
98
  * Paddle's preview — "Charged now" (an upgrade) or "Credited towards your next charges"
@@ -88,7 +102,7 @@ export interface PlanSwitchConfirmProps {
88
102
  * const preview = useMutation({ mutationFn: api.previewPlanSwitch });
89
103
  * <PlanSwitchConfirm
90
104
  * open={pick !== null}
91
- * onOpenChange={(open) => !open && setPick(null)}
105
+ * onClose={() => setPick(null)}
92
106
  * from={overview.paid}
93
107
  * to={pick}
94
108
  * preview={preview.data}
@@ -103,6 +117,7 @@ export interface PlanSwitchConfirmProps {
103
117
  */
104
118
  export function PlanSwitchConfirm({
105
119
  open,
120
+ onClose,
106
121
  onOpenChange,
107
122
  from,
108
123
  to,
@@ -120,6 +135,7 @@ export function PlanSwitchConfirm({
120
135
  const planChange = useKitLabels("planChange", DEFAULT_PLAN_CHANGE_LABELS);
121
136
  const common = useKitLabels("common", DEFAULT_COMMON_LABELS);
122
137
  const locale = useKitLocale(localeProp);
138
+ const day = useDayFormatter(undefined, localeProp);
123
139
 
124
140
  const period = (interval: BillingInterval) => (interval === "year" ? labels.yearly : labels.monthly);
125
141
  const side = (s: PlanSwitchSide) => `${planName(s.plan.toLowerCase())} (${period(s.interval)})`;
@@ -149,7 +165,7 @@ export function PlanSwitchConfirm({
149
165
  open={open}
150
166
  title={labels.switchTitle}
151
167
  description={labels.switchFromTo(side(from), side(to))}
152
- onClose={() => onOpenChange(false)}
168
+ onClose={dialogClose({ onClose, onOpenChange })}
153
169
  busy={pending}
154
170
  // A preview that loads is busy too, but holds nothing: Cancel stays a way out.
155
171
  aria-busy={preview === undefined || undefined}
@@ -189,9 +205,7 @@ export function PlanSwitchConfirm({
189
205
  </dd>
190
206
  {preview.next_billed_at && preview.next_minor != null && (
191
207
  <>
192
- <dt className="text-secondary">
193
- {labels.switchNextCharge(formatDate(preview.next_billed_at, "medium", { locale }))}
194
- </dt>
208
+ <dt className="text-secondary">{labels.switchNextCharge(day(preview.next_billed_at))}</dt>
195
209
  <dd className="text-right tabular-nums">{money(preview.next_minor, preview.currency)}</dd>
196
210
  </>
197
211
  )}
package/src/chart.ts CHANGED
@@ -2,22 +2,36 @@
2
2
  //
3
3
  // A re-slicing of what the main barrel already exports, not a new API. It exists so a
4
4
  // consumer can reach the chart kit WITHOUT the barrel: `import("@eifi1/ui-kit/chart")`
5
- // is a 31KB chunk, where the same lazy import through the barrel pulls 221KB, because
6
- // a dynamic import of the barrel cannot be tree-shaken down to one of its members.
5
+ // is a chunk of its own (50.4 KB min, 19.9 KB gzip at 0.51.6, refactor audit 2026-10-30
6
+ // MOD-7; it was 31KB when this was written), where the same lazy import through the barrel
7
+ // pulls the barrel, because a dynamic import of it cannot be tree-shaken down to one member.
7
8
  //
8
9
  // It is about chunk size, not about the peer: `recharts` is a REQUIRED peer (since 0.5.0),
9
10
  // because the main barrel re-exports everything here too, so `import { Button } from
10
11
  // "@eifi1/ui-kit"` reaches recharts as well (packaging-contract.test.ts asserts it).
11
12
  export * from "./components/chart";
12
13
  export * from "./theme/chart-palette";
14
+ // 0.52: the slice's share of the 55 names no app reads (refactor audit 2026-10-30, API-4,
15
+ // decision 4), tagged on their specifiers as the barrel's are — the modules keep them.
16
+ export {
17
+ /** @deprecated 0.52 — `chartEdge`, which measures a fill against it (API-4); removed in 0.53 */
18
+ EDGE_MIN_CONTRAST,
19
+ /** @deprecated 0.52 — `--chart-ink` (`CHART_ROLES.outline`), the same ink as a token (API-4); removed in 0.53 */
20
+ CHART_INK_HEX,
21
+ } from "./theme/chart-palette";
13
22
 
14
23
  // The tile chart (treemap) the apps share — moved here from keksdose so every consumer
15
- // derives it from the package rather than from a copy.
24
+ // derives it from the package rather than from a copy. 0.52: its `treemap` label namespace.
16
25
  export * from "./components/treemap";
26
+ export * from "./components/treemap-labels";
17
27
 
18
28
  // lenkbank's zoomable series chart, its synced x-zoom, the toggle legend and the
19
29
  // mirrored-pair axis geometry — moved here so the apps derive them from the package.
20
30
  export * from "./components/series-chart";
31
+ export {
32
+ /** @deprecated 0.52 — `SeriesChart`, which places its tooltip with it (API-4); removed in 0.53 */
33
+ resolveTooltipPlacement,
34
+ } from "./components/series-chart";
21
35
  // 0.32.1 (keksdose's 0.32 report): the height every chart takes, for an app's wrappers.
22
36
  export type { ChartHeight } from "./components/chart-height";
23
37
  // SharedXZoom and the zoom's types: the public face of ./chart-zoom-core, whose arithmetic
@@ -28,6 +42,10 @@ export * from "./components/chart-zoom";
28
42
  // recharts, so chart-zoom-core has to be one of them (MOD-6).
29
43
  export { SharedXZoom } from "./components/chart-zoom-core";
30
44
  export * from "./components/toggle-legend";
45
+ export {
46
+ /** @deprecated 0.52 — `strokeDash`, which picks a series' pattern from it (API-4); removed in 0.53 */
47
+ STROKE_PATTERNS,
48
+ } from "./components/toggle-legend";
31
49
  export * from "./components/facing-pair";
32
50
  export * from "./components/series-chart-labels";
33
51