@eifi1/ui-kit 0.51.6 → 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 (805) hide show
  1. package/README.md +146 -26
  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 +3 -7
  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.d.ts +3 -2
  39. package/dist/auth/complete-name-dialog.js +3 -5
  40. package/dist/auth/complete-name-dialog.js.map +1 -1
  41. package/dist/auth/forgot-password-form-labels.js +1 -1
  42. package/dist/auth/forgot-password-form-labels.js.map +1 -1
  43. package/dist/auth/forgot-password-form.js +7 -2
  44. package/dist/auth/forgot-password-form.js.map +1 -1
  45. package/dist/auth/register-form-labels.js +1 -1
  46. package/dist/auth/register-form-labels.js.map +1 -1
  47. package/dist/auth/reset-password-form-labels.js +1 -1
  48. package/dist/auth/reset-password-form-labels.js.map +1 -1
  49. package/dist/auth/reset-password-form.js +5 -1
  50. package/dist/auth/reset-password-form.js.map +1 -1
  51. package/dist/auth/sign-in-form-labels.js +1 -1
  52. package/dist/auth/sign-in-form-labels.js.map +1 -1
  53. package/dist/auth/status-parts.d.ts +0 -3
  54. package/dist/auth/status-parts.js +0 -4
  55. package/dist/auth/status-parts.js.map +1 -1
  56. package/dist/auth/verify-email-labels.js +1 -1
  57. package/dist/auth/verify-email-labels.js.map +1 -1
  58. package/dist/auth/verify-email.js +7 -2
  59. package/dist/auth/verify-email.js.map +1 -1
  60. package/dist/billing/cancel-request.d.ts +11 -2
  61. package/dist/billing/cancel-request.js +15 -3
  62. package/dist/billing/cancel-request.js.map +1 -1
  63. package/dist/billing/cancel-subscription.d.ts +22 -10
  64. package/dist/billing/cancel-subscription.js +8 -11
  65. package/dist/billing/cancel-subscription.js.map +1 -1
  66. package/dist/billing/dialog-close.d.ts +29 -0
  67. package/dist/billing/dialog-close.js +8 -0
  68. package/dist/billing/dialog-close.js.map +1 -0
  69. package/dist/billing/plan-card.d.ts +14 -4
  70. package/dist/billing/plan-card.js +15 -8
  71. package/dist/billing/plan-card.js.map +1 -1
  72. package/dist/billing/plan-change-labels.d.ts +42 -0
  73. package/dist/billing/plan-change-labels.js +22 -0
  74. package/dist/billing/plan-change-labels.js.map +1 -0
  75. package/dist/billing/plan-switch.d.ts +21 -9
  76. package/dist/billing/plan-switch.js +10 -8
  77. package/dist/billing/plan-switch.js.map +1 -1
  78. package/dist/chart.d.ts +12 -0
  79. package/dist/chart.js +16 -1
  80. package/dist/chart.js.map +1 -1
  81. package/dist/components/account-chips.d.ts +5 -5
  82. package/dist/components/account-chips.js +11 -13
  83. package/dist/components/account-chips.js.map +1 -1
  84. package/dist/components/alert-banner.d.ts +16 -5
  85. package/dist/components/alert-banner.js +46 -1
  86. package/dist/components/alert-banner.js.map +1 -1
  87. package/dist/components/amount-input.d.ts +22 -4
  88. package/dist/components/amount-input.js +3 -3
  89. package/dist/components/amount-input.js.map +1 -1
  90. package/dist/components/autocomplete.js +57 -65
  91. package/dist/components/autocomplete.js.map +1 -1
  92. package/dist/components/bulk-action-bar.d.ts +12 -2
  93. package/dist/components/bulk-action-bar.js +65 -21
  94. package/dist/components/bulk-action-bar.js.map +1 -1
  95. package/dist/components/button-look.d.ts +5 -5
  96. package/dist/components/button-look.js.map +1 -1
  97. package/dist/components/button.d.ts +2 -2
  98. package/dist/components/button.js.map +1 -1
  99. package/dist/components/calculator.d.ts +21 -2
  100. package/dist/components/calculator.js +53 -14
  101. package/dist/components/calculator.js.map +1 -1
  102. package/dist/components/chart-edge.d.ts +16 -0
  103. package/dist/components/chart-edge.js +14 -1
  104. package/dist/components/chart-edge.js.map +1 -1
  105. package/dist/components/chart-figure.d.ts +13 -0
  106. package/dist/components/chart-figure.js +15 -0
  107. package/dist/components/chart-figure.js.map +1 -0
  108. package/dist/components/chart-zoom-core.js +1 -4
  109. package/dist/components/chart-zoom-core.js.map +1 -1
  110. package/dist/components/chart.d.ts +8 -1
  111. package/dist/components/chart.js +19 -10
  112. package/dist/components/chart.js.map +1 -1
  113. package/dist/components/combobox-core.d.ts +119 -7
  114. package/dist/components/combobox-core.js +151 -46
  115. package/dist/components/combobox-core.js.map +1 -1
  116. package/dist/components/combobox.d.ts +1 -1
  117. package/dist/components/combobox.js +142 -131
  118. package/dist/components/combobox.js.map +1 -1
  119. package/dist/components/copy-button.d.ts +6 -5
  120. package/dist/components/copy-button.js +5 -3
  121. package/dist/components/copy-button.js.map +1 -1
  122. package/dist/components/country-select.js +2 -2
  123. package/dist/components/country-select.js.map +1 -1
  124. package/dist/components/data-table-column-settings.d.ts +1 -1
  125. package/dist/components/data-table-column-settings.js +33 -7
  126. package/dist/components/data-table-column-settings.js.map +1 -1
  127. package/dist/components/data-table-filters.d.ts +4 -2
  128. package/dist/components/data-table-filters.js +2 -2
  129. package/dist/components/data-table-filters.js.map +1 -1
  130. package/dist/components/data-table-fit.d.ts +6 -4
  131. package/dist/components/data-table-fit.js +4 -1
  132. package/dist/components/data-table-fit.js.map +1 -1
  133. package/dist/components/data-table-groups.d.ts +1 -1
  134. package/dist/components/data-table-groups.js.map +1 -1
  135. package/dist/components/data-table-head.d.ts +1 -1
  136. package/dist/components/data-table-head.js +15 -12
  137. package/dist/components/data-table-head.js.map +1 -1
  138. package/dist/components/data-table-mobile.d.ts +36 -7
  139. package/dist/components/data-table-mobile.js +63 -31
  140. package/dist/components/data-table-mobile.js.map +1 -1
  141. package/dist/components/data-table-pagination.js +11 -6
  142. package/dist/components/data-table-pagination.js.map +1 -1
  143. package/dist/components/data-table-resize.d.ts +1 -1
  144. package/dist/components/data-table-resize.js.map +1 -1
  145. package/dist/components/data-table-row-actions.d.ts +2 -2
  146. package/dist/components/data-table-row-actions.js.map +1 -1
  147. package/dist/components/data-table-row.d.ts +6 -2
  148. package/dist/components/data-table-row.js +17 -10
  149. package/dist/components/data-table-row.js.map +1 -1
  150. package/dist/components/data-table-selection.d.ts +1 -1
  151. package/dist/components/data-table-selection.js.map +1 -1
  152. package/dist/components/data-table-shared.d.ts +10 -2
  153. package/dist/components/data-table-shared.js +18 -0
  154. package/dist/components/data-table-shared.js.map +1 -1
  155. package/dist/components/data-table-sort.d.ts +21 -2
  156. package/dist/components/data-table-sort.js +24 -0
  157. package/dist/components/data-table-sort.js.map +1 -1
  158. package/dist/components/data-table-virtual.d.ts +1 -1
  159. package/dist/components/data-table-virtual.js +18 -6
  160. package/dist/components/data-table-virtual.js.map +1 -1
  161. package/dist/components/data-table.d.ts +25 -8
  162. package/dist/components/data-table.js +154 -25
  163. package/dist/components/data-table.js.map +1 -1
  164. package/dist/components/date-field.d.ts +24 -2
  165. package/dist/components/date-field.js +33 -8
  166. package/dist/components/date-field.js.map +1 -1
  167. package/dist/components/date-picker.d.ts +15 -2
  168. package/dist/components/date-picker.js +55 -26
  169. package/dist/components/date-picker.js.map +1 -1
  170. package/dist/components/date-range-picker.d.ts +47 -20
  171. package/dist/components/date-range-picker.js +23 -7
  172. package/dist/components/date-range-picker.js.map +1 -1
  173. package/dist/components/dialog-frame.d.ts +2 -1
  174. package/dist/components/dialog-frame.js.map +1 -1
  175. package/dist/components/entity-combobox.js +4 -2
  176. package/dist/components/entity-combobox.js.map +1 -1
  177. package/dist/components/error-boundary.js +37 -30
  178. package/dist/components/error-boundary.js.map +1 -1
  179. package/dist/components/{ui-labels.d.ts → field-base-labels.d.ts} +0 -2
  180. package/dist/components/{ui-labels.js → field-base-labels.js} +2 -9
  181. package/dist/components/field-base-labels.js.map +1 -0
  182. package/dist/components/field-base.d.ts +4 -3
  183. package/dist/components/field-base.js +3 -3
  184. package/dist/components/field-base.js.map +1 -1
  185. package/dist/components/field-sync-labels.d.ts +1 -0
  186. package/dist/components/field-sync-labels.js.map +1 -1
  187. package/dist/components/field-sync.d.ts +23 -1
  188. package/dist/components/field-sync.js.map +1 -1
  189. package/dist/components/form-actions.js +11 -5
  190. package/dist/components/form-actions.js.map +1 -1
  191. package/dist/components/hover-menu.d.ts +3 -0
  192. package/dist/components/hover-menu.js +5 -3
  193. package/dist/components/hover-menu.js.map +1 -1
  194. package/dist/components/icon-button.js +14 -9
  195. package/dist/components/icon-button.js.map +1 -1
  196. package/dist/components/inline-confirm.d.ts +43 -0
  197. package/dist/components/inline-confirm.js +67 -0
  198. package/dist/components/inline-confirm.js.map +1 -0
  199. package/dist/components/inline-entity-combobox.d.ts +4 -3
  200. package/dist/components/inline-entity-combobox.js +150 -141
  201. package/dist/components/inline-entity-combobox.js.map +1 -1
  202. package/dist/components/input.js +1 -1
  203. package/dist/components/input.js.map +1 -1
  204. package/dist/components/jump-calendar.js +28 -112
  205. package/dist/components/jump-calendar.js.map +1 -1
  206. package/dist/components/legal-page.d.ts +3 -1
  207. package/dist/components/legal-page.js +3 -2
  208. package/dist/components/legal-page.js.map +1 -1
  209. package/dist/components/legal.d.ts +4 -2
  210. package/dist/components/legal.js.map +1 -1
  211. package/dist/components/lightbox.d.ts +2 -2
  212. package/dist/components/lightbox.js +17 -6
  213. package/dist/components/lightbox.js.map +1 -1
  214. package/dist/components/list.d.ts +6 -2
  215. package/dist/components/list.js +4 -3
  216. package/dist/components/list.js.map +1 -1
  217. package/dist/components/measured-grid.d.ts +1 -1
  218. package/dist/components/measured-grid.js +2 -1
  219. package/dist/components/measured-grid.js.map +1 -1
  220. package/dist/components/mini-calendar.js +3 -5
  221. package/dist/components/mini-calendar.js.map +1 -1
  222. package/dist/components/modal.d.ts +24 -0
  223. package/dist/components/modal.js +12 -4
  224. package/dist/components/modal.js.map +1 -1
  225. package/dist/components/money-draft.js +7 -5
  226. package/dist/components/money-draft.js.map +1 -1
  227. package/dist/components/money-field.d.ts +2 -2
  228. package/dist/components/money-field.js.map +1 -1
  229. package/dist/components/month-grid.d.ts +55 -0
  230. package/dist/components/month-grid.js +148 -0
  231. package/dist/components/month-grid.js.map +1 -0
  232. package/dist/components/month-picker.d.ts +36 -4
  233. package/dist/components/month-picker.js +123 -146
  234. package/dist/components/month-picker.js.map +1 -1
  235. package/dist/components/multi-entity-combobox.js +2 -1
  236. package/dist/components/multi-entity-combobox.js.map +1 -1
  237. package/dist/components/multi-select.d.ts +2 -2
  238. package/dist/components/multi-select.js +11 -6
  239. package/dist/components/multi-select.js.map +1 -1
  240. package/dist/components/number-field.d.ts +6 -4
  241. package/dist/components/number-field.js +3 -2
  242. package/dist/components/number-field.js.map +1 -1
  243. package/dist/components/number-input.d.ts +4 -1
  244. package/dist/components/number-input.js +3 -2
  245. package/dist/components/number-input.js.map +1 -1
  246. package/dist/components/numpad-sheet.js.map +1 -1
  247. package/dist/components/picker-sheet.js +2 -1
  248. package/dist/components/picker-sheet.js.map +1 -1
  249. package/dist/components/pie-chart-labels.d.ts +7 -0
  250. package/dist/components/pie-chart-labels.js +1 -0
  251. package/dist/components/pie-chart-labels.js.map +1 -1
  252. package/dist/components/pie-chart.d.ts +5 -3
  253. package/dist/components/pie-chart.js +7 -22
  254. package/dist/components/pie-chart.js.map +1 -1
  255. package/dist/components/popover.d.ts +3 -0
  256. package/dist/components/popover.js +7 -1
  257. package/dist/components/popover.js.map +1 -1
  258. package/dist/components/reauth-dialog.d.ts +4 -5
  259. package/dist/components/reauth-dialog.js +1 -4
  260. package/dist/components/reauth-dialog.js.map +1 -1
  261. package/dist/components/row-actions.js +2 -1
  262. package/dist/components/row-actions.js.map +1 -1
  263. package/dist/components/section-nav.d.ts +7 -0
  264. package/dist/components/section-nav.js.map +1 -1
  265. package/dist/components/series-chart-axes.d.ts +10 -3
  266. package/dist/components/series-chart-axes.js +1 -0
  267. package/dist/components/series-chart-axes.js.map +1 -1
  268. package/dist/components/series-chart-labels.d.ts +7 -4
  269. package/dist/components/series-chart-labels.js.map +1 -1
  270. package/dist/components/series-chart.d.ts +31 -7
  271. package/dist/components/series-chart.js +72 -29
  272. package/dist/components/series-chart.js.map +1 -1
  273. package/dist/components/share-card.js +3 -3
  274. package/dist/components/share-card.js.map +1 -1
  275. package/dist/components/sign-chip-labels.d.ts +1 -0
  276. package/dist/components/sign-chip-labels.js.map +1 -1
  277. package/dist/components/sign-chip.d.ts +10 -1
  278. package/dist/components/sign-chip.js.map +1 -1
  279. package/dist/components/tabs-labels.d.ts +2 -0
  280. package/dist/components/tabs-labels.js +11 -0
  281. package/dist/components/tabs-labels.js.map +1 -0
  282. package/dist/components/tabs.d.ts +1 -1
  283. package/dist/components/tabs.js +13 -11
  284. package/dist/components/tabs.js.map +1 -1
  285. package/dist/components/toggle-legend.d.ts +2 -2
  286. package/dist/components/toggle-legend.js +6 -6
  287. package/dist/components/toggle-legend.js.map +1 -1
  288. package/dist/components/translation-review-editor.d.ts +4 -2
  289. package/dist/components/translation-review-editor.js +2 -3
  290. package/dist/components/translation-review-editor.js.map +1 -1
  291. package/dist/components/translation-review.d.ts +2 -1
  292. package/dist/components/translation-review.js +2 -2
  293. package/dist/components/translation-review.js.map +1 -1
  294. package/dist/components/treemap-labels.d.ts +26 -0
  295. package/dist/components/treemap-labels.js +10 -0
  296. package/dist/components/treemap-labels.js.map +1 -0
  297. package/dist/components/treemap-layout.d.ts +62 -0
  298. package/dist/components/treemap-layout.js +126 -0
  299. package/dist/components/treemap-layout.js.map +1 -0
  300. package/dist/components/treemap.d.ts +140 -17
  301. package/dist/components/treemap.js +324 -97
  302. package/dist/components/treemap.js.map +1 -1
  303. package/dist/components/use-table-state.d.ts +5 -5
  304. package/dist/components/use-table-state.js +4 -1
  305. package/dist/components/use-table-state.js.map +1 -1
  306. package/dist/data-table.d.ts +6 -2
  307. package/dist/data-table.js +7 -2
  308. package/dist/data-table.js.map +1 -1
  309. package/dist/eslint/index.js +1 -1
  310. package/dist/eslint/role-utilities.d.ts +36 -7
  311. package/dist/eslint/role-utilities.js +42 -9
  312. package/dist/eslint/role-utilities.js.map +1 -1
  313. package/dist/feedback/feedback-dialog.d.ts +25 -16
  314. package/dist/feedback/feedback-dialog.js +6 -2
  315. package/dist/feedback/feedback-dialog.js.map +1 -1
  316. package/dist/feedback/feedback-mutation.d.ts +30 -0
  317. package/dist/feedback/feedback-mutation.js +16 -0
  318. package/dist/feedback/feedback-mutation.js.map +1 -0
  319. package/dist/feedback/feedback-page-link.d.ts +53 -0
  320. package/dist/feedback/feedback-page-link.js +37 -0
  321. package/dist/feedback/feedback-page-link.js.map +1 -0
  322. package/dist/feedback/feedback-public-list.d.ts +12 -3
  323. package/dist/feedback/feedback-public-list.js +2 -1
  324. package/dist/feedback/feedback-public-list.js.map +1 -1
  325. package/dist/feedback/feedback-replies.d.ts +3 -1
  326. package/dist/feedback/feedback-replies.js +5 -4
  327. package/dist/feedback/feedback-replies.js.map +1 -1
  328. package/dist/feedback/feedback-row-detail-labels.js +5 -0
  329. package/dist/feedback/feedback-row-detail-labels.js.map +1 -1
  330. package/dist/feedback/feedback-row-detail.d.ts +64 -28
  331. package/dist/feedback/feedback-row-detail.js +30 -28
  332. package/dist/feedback/feedback-row-detail.js.map +1 -1
  333. package/dist/feedback/feedback-status-undo.d.ts +30 -11
  334. package/dist/feedback/feedback-status-undo.js +10 -15
  335. package/dist/feedback/feedback-status-undo.js.map +1 -1
  336. package/dist/feedback/feedback-submit-dialog.d.ts +1 -1
  337. package/dist/feedback/feedback-submit-dialog.js +1 -1
  338. package/dist/feedback/feedback-submit-dialog.js.map +1 -1
  339. package/dist/feedback/feedback-submit.js +9 -3
  340. package/dist/feedback/feedback-submit.js.map +1 -1
  341. package/dist/feedback/feedback-swipe.d.ts +1 -1
  342. package/dist/feedback/feedback-swipe.js.map +1 -1
  343. package/dist/feedback/feedback-table.d.ts +21 -9
  344. package/dist/feedback/feedback-table.js +45 -25
  345. package/dist/feedback/feedback-table.js.map +1 -1
  346. package/dist/feedback/feedback-thread-labels.d.ts +2 -2
  347. package/dist/feedback/feedback-thread-labels.js.map +1 -1
  348. package/dist/feedback/feedback-thread.d.ts +24 -23
  349. package/dist/feedback/feedback-thread.js +2 -1
  350. package/dist/feedback/feedback-thread.js.map +1 -1
  351. package/dist/feedback.d.ts +34 -0
  352. package/dist/feedback.js +42 -0
  353. package/dist/feedback.js.map +1 -1
  354. package/dist/hooks/use-dismiss.js.map +1 -1
  355. package/dist/hooks/use-focus-trap.d.ts +35 -0
  356. package/dist/hooks/use-focus-trap.js +6 -4
  357. package/dist/hooks/use-focus-trap.js.map +1 -1
  358. package/dist/hooks/use-hotkey.d.ts +5 -2
  359. package/dist/hooks/use-hotkey.js +5 -4
  360. package/dist/hooks/use-hotkey.js.map +1 -1
  361. package/dist/hooks/use-long-press.d.ts +7 -4
  362. package/dist/hooks/use-long-press.js +3 -0
  363. package/dist/hooks/use-long-press.js.map +1 -1
  364. package/dist/hooks/use-media-query.js +12 -4
  365. package/dist/hooks/use-media-query.js.map +1 -1
  366. package/dist/hooks/use-mounted.d.ts +22 -0
  367. package/dist/hooks/use-mounted.js +24 -0
  368. package/dist/hooks/use-mounted.js.map +1 -0
  369. package/dist/hooks/use-overlay-history.d.ts +7 -1
  370. package/dist/hooks/use-overlay-history.js +35 -5
  371. package/dist/hooks/use-overlay-history.js.map +1 -1
  372. package/dist/i18n/defaults.js +4 -5
  373. package/dist/i18n/defaults.js.map +1 -1
  374. package/dist/i18n/german.js +7 -1
  375. package/dist/i18n/german.js.map +1 -1
  376. package/dist/i18n/kit-labels.d.ts +9 -2
  377. package/dist/i18n/kit-labels.js.map +1 -1
  378. package/dist/i18n/locales/en.js +20 -41
  379. package/dist/i18n/locales/en.js.map +3 -3
  380. package/dist/i18n/locales/es.js +7 -1
  381. package/dist/i18n/locales/es.js.map +1 -1
  382. package/dist/i18n/locales/fr.js +20 -10
  383. package/dist/i18n/locales/fr.js.map +1 -1
  384. package/dist/i18n/locales/hu.js +9 -1
  385. package/dist/i18n/locales/hu.js.map +1 -1
  386. package/dist/i18n/locales/it.js +7 -1
  387. package/dist/i18n/locales/it.js.map +1 -1
  388. package/dist/i18n/locales/zh.js +8 -1
  389. package/dist/i18n/locales/zh.js.map +1 -1
  390. package/dist/i18n/review.js +5 -0
  391. package/dist/i18n/review.js.map +1 -1
  392. package/dist/index.d.ts +64 -17
  393. package/dist/index.js +77 -12
  394. package/dist/index.js.map +1 -1
  395. package/dist/landing/routing.d.ts +3 -1
  396. package/dist/landing/routing.js +4 -7
  397. package/dist/landing/routing.js.map +1 -1
  398. package/dist/lib/broadcast.d.ts +17 -0
  399. package/dist/lib/broadcast.js +30 -0
  400. package/dist/lib/broadcast.js.map +1 -0
  401. package/dist/lib/calc.d.ts +7 -1
  402. package/dist/lib/calc.js +3 -1
  403. package/dist/lib/calc.js.map +1 -1
  404. package/dist/lib/clipboard-minus.d.ts +2 -2
  405. package/dist/lib/clipboard-minus.js +1 -1
  406. package/dist/lib/clipboard-minus.js.map +1 -1
  407. package/dist/lib/date-format.d.ts +37 -2
  408. package/dist/lib/date-format.js +34 -8
  409. package/dist/lib/date-format.js.map +1 -1
  410. package/dist/lib/day-format.d.ts +46 -0
  411. package/dist/lib/day-format.js +46 -0
  412. package/dist/lib/day-format.js.map +1 -0
  413. package/dist/lib/decimal-marks.d.ts +7 -1
  414. package/dist/lib/decimal-marks.js +5 -2
  415. package/dist/lib/decimal-marks.js.map +1 -1
  416. package/dist/lib/describe-failure.d.ts +14 -0
  417. package/dist/lib/describe-failure.js +9 -0
  418. package/dist/lib/describe-failure.js.map +1 -0
  419. package/dist/lib/direction.d.ts +16 -0
  420. package/dist/lib/direction.js +9 -1
  421. package/dist/lib/direction.js.map +1 -1
  422. package/dist/lib/focus-left.d.ts +63 -0
  423. package/dist/lib/focus-left.js +67 -0
  424. package/dist/lib/focus-left.js.map +1 -0
  425. package/dist/lib/format.d.ts +5 -3
  426. package/dist/lib/format.js +16 -13
  427. package/dist/lib/format.js.map +1 -1
  428. package/dist/lib/http-status.d.ts +24 -0
  429. package/dist/lib/http-status.js +14 -0
  430. package/dist/lib/http-status.js.map +1 -0
  431. package/dist/lib/intl-cache.d.ts +14 -0
  432. package/dist/lib/intl-cache.js +15 -0
  433. package/dist/lib/intl-cache.js.map +1 -0
  434. package/dist/lib/isin.d.ts +10 -0
  435. package/dist/lib/isin.js.map +1 -1
  436. package/dist/lib/iso-day.d.ts +11 -0
  437. package/dist/lib/iso-day.js +8 -0
  438. package/dist/lib/iso-day.js.map +1 -0
  439. package/dist/lib/lazy-with-fallback.d.ts +31 -0
  440. package/dist/lib/lazy-with-fallback.js +40 -0
  441. package/dist/lib/lazy-with-fallback.js.map +1 -0
  442. package/dist/lib/path-pattern.d.ts +34 -0
  443. package/dist/lib/path-pattern.js +24 -0
  444. package/dist/lib/path-pattern.js.map +1 -0
  445. package/dist/lib/reduced-motion.d.ts +2 -1
  446. package/dist/lib/reduced-motion.js.map +1 -1
  447. package/dist/lib/round.d.ts +2 -1
  448. package/dist/lib/round.js +2 -1
  449. package/dist/lib/round.js.map +1 -1
  450. package/dist/lib/safe-storage.d.ts +24 -5
  451. package/dist/lib/safe-storage.js +27 -2
  452. package/dist/lib/safe-storage.js.map +1 -1
  453. package/dist/lib/session-refresh.js +1 -1
  454. package/dist/lib/session-refresh.js.map +1 -1
  455. package/dist/lib/share-format.d.ts +13 -0
  456. package/dist/lib/share-format.js +10 -0
  457. package/dist/lib/share-format.js.map +1 -0
  458. package/dist/lib/text-case.d.ts +17 -0
  459. package/dist/lib/text-case.js +8 -0
  460. package/dist/lib/text-case.js.map +1 -0
  461. package/dist/lib/text-match.d.ts +38 -0
  462. package/dist/lib/text-match.js +24 -2
  463. package/dist/lib/text-match.js.map +1 -1
  464. package/dist/lib/thenable.d.ts +13 -0
  465. package/dist/lib/thenable.js +8 -0
  466. package/dist/lib/thenable.js.map +1 -0
  467. package/dist/lib/translation-review.d.ts +7 -2
  468. package/dist/lib/translation-review.js +4 -4
  469. package/dist/lib/translation-review.js.map +1 -1
  470. package/dist/notifications/device-zone-report.js +1 -1
  471. package/dist/notifications/device-zone-report.js.map +1 -1
  472. package/dist/notifications/notification-bell.d.ts +2 -1
  473. package/dist/notifications/notification-bell.js +3 -3
  474. package/dist/notifications/notification-bell.js.map +1 -1
  475. package/dist/notifications/notification-inbox.d.ts +10 -6
  476. package/dist/notifications/notification-inbox.js +26 -48
  477. package/dist/notifications/notification-inbox.js.map +1 -1
  478. package/dist/notifications/notification-parts.d.ts +3 -2
  479. package/dist/notifications/notification-parts.js +1 -3
  480. package/dist/notifications/notification-parts.js.map +1 -1
  481. package/dist/notifications/notification-types-setting.js +1 -1
  482. package/dist/notifications/notification-types-setting.js.map +1 -1
  483. package/dist/notifications/notifications-labels.d.ts +6 -0
  484. package/dist/notifications/notifications-labels.js +1 -0
  485. package/dist/notifications/notifications-labels.js.map +1 -1
  486. package/dist/notifications/push-device-setting.js +1 -1
  487. package/dist/notifications/push-device-setting.js.map +1 -1
  488. package/dist/notifications/push-devices-setting.d.ts +2 -1
  489. package/dist/notifications/push-devices-setting.js +27 -49
  490. package/dist/notifications/push-devices-setting.js.map +1 -1
  491. package/dist/notifications/quiet-hours-setting.d.ts +10 -3
  492. package/dist/notifications/quiet-hours-setting.js +65 -26
  493. package/dist/notifications/quiet-hours-setting.js.map +1 -1
  494. package/dist/notifications/unsubscribe-panel.js +4 -7
  495. package/dist/notifications/unsubscribe-panel.js.map +1 -1
  496. package/dist/notifications/use-push-device.d.ts +39 -1
  497. package/dist/notifications/use-push-device.js +28 -7
  498. package/dist/notifications/use-push-device.js.map +1 -1
  499. package/dist/offline/query-persistence.d.ts +3 -1
  500. package/dist/offline/query-persistence.js +19 -2
  501. package/dist/offline/query-persistence.js.map +1 -1
  502. package/dist/rhf/fields.d.ts +11 -4
  503. package/dist/rhf/fields.js.map +1 -1
  504. package/dist/search/command-palette.js +1 -1
  505. package/dist/search/command-palette.js.map +1 -1
  506. package/dist/search/global-search.js +19 -9
  507. package/dist/search/global-search.js.map +1 -1
  508. package/dist/search/use-command-key.d.ts +12 -1
  509. package/dist/search/use-command-key.js +3 -12
  510. package/dist/search/use-command-key.js.map +1 -1
  511. package/dist/search.d.ts +7 -0
  512. package/dist/search.js +10 -0
  513. package/dist/search.js.map +1 -1
  514. package/dist/settings/use-settings-focus.js +1 -0
  515. package/dist/settings/use-settings-focus.js.map +1 -1
  516. package/dist/shell/account-menu-language.d.ts +21 -5
  517. package/dist/shell/account-menu-language.js +3 -1
  518. package/dist/shell/account-menu-language.js.map +1 -1
  519. package/dist/shell/account-menu-text-size.d.ts +26 -9
  520. package/dist/shell/account-menu-text-size.js +3 -2
  521. package/dist/shell/account-menu-text-size.js.map +1 -1
  522. package/dist/shell/dev-menu.js +5 -18
  523. package/dist/shell/dev-menu.js.map +1 -1
  524. package/dist/shell/role-switcher.d.ts +7 -0
  525. package/dist/shell/role-switcher.js.map +1 -1
  526. package/dist/shell/top-bar-actions.d.ts +1 -1
  527. package/dist/shell/top-bar-actions.js.map +1 -1
  528. package/dist/shell/top-bar-parts-labels.d.ts +0 -2
  529. package/dist/shell/top-bar-parts-labels.js +0 -1
  530. package/dist/shell/top-bar-parts-labels.js.map +1 -1
  531. package/dist/shell.d.ts +27 -8
  532. package/dist/shell.js +28 -7
  533. package/dist/shell.js.map +1 -1
  534. package/dist/sync/engine.d.ts +30 -4
  535. package/dist/sync/engine.js +172 -52
  536. package/dist/sync/engine.js.map +1 -1
  537. package/dist/sync.d.ts +6 -2
  538. package/dist/sync.js +6 -1
  539. package/dist/sync.js.map +1 -1
  540. package/dist/testing/css-variables.js +3 -8
  541. package/dist/testing/css-variables.js.map +1 -1
  542. package/dist/theme/contrast.d.ts +2 -1
  543. package/dist/theme/contrast.js +3 -8
  544. package/dist/theme/contrast.js.map +1 -1
  545. package/dist/theme/palette-store.js +6 -6
  546. package/dist/theme/palette-store.js.map +1 -1
  547. package/dist/theme/text-size.js +3 -8
  548. package/dist/theme/text-size.js.map +1 -1
  549. package/dist/theme/theme-store.js +3 -6
  550. package/dist/theme/theme-store.js.map +1 -1
  551. package/dist/tour/tour-catalogue.d.ts +7 -4
  552. package/dist/tour/tour-catalogue.js +12 -10
  553. package/dist/tour/tour-catalogue.js.map +1 -1
  554. package/dist/tour/tour-dock.d.ts +0 -2
  555. package/dist/tour/tour-dock.js +0 -2
  556. package/dist/tour/tour-dock.js.map +1 -1
  557. package/dist/tour/tour-gates.d.ts +4 -0
  558. package/dist/tour/tour-gates.js +14 -0
  559. package/dist/tour/tour-gates.js.map +1 -1
  560. package/dist/tour/tour-overlay.d.ts +27 -0
  561. package/dist/tour/tour-overlay.js +741 -0
  562. package/dist/tour/tour-overlay.js.map +1 -0
  563. package/dist/tour/tour.d.ts +16 -4
  564. package/dist/tour/tour.js +62 -778
  565. package/dist/tour/tour.js.map +1 -1
  566. package/dist/tour/use-tour-progress.js +1 -1
  567. package/dist/tour/use-tour-progress.js.map +1 -1
  568. package/dist/tour/use-tour-url-sync.js +2 -2
  569. package/dist/tour/use-tour-url-sync.js.map +1 -1
  570. package/dist/wizard/stepper-nav.d.ts +5 -1
  571. package/dist/wizard/stepper-nav.js.map +1 -1
  572. package/dist/wizard/types.d.ts +6 -2
  573. package/dist/wizard/types.js.map +1 -1
  574. package/dist/wizard/use-wizard.d.ts +3 -1
  575. package/dist/wizard/use-wizard.js.map +1 -1
  576. package/dist/wizard/validation.d.ts +3 -1
  577. package/dist/wizard/validation.js.map +1 -1
  578. package/package.json +12 -8
  579. package/src/account/account-parts.ts +5 -25
  580. package/src/account/data-export-setting-labels.ts +1 -1
  581. package/src/account/delete-account-setting-labels.ts +1 -1
  582. package/src/account/email-change-setting-labels.ts +1 -1
  583. package/src/account/passkeys-setting.tsx +60 -38
  584. package/src/account/sessions-setting.tsx +18 -12
  585. package/src/admin/admin-action-confirm.tsx +5 -10
  586. package/src/admin/admin-parts.ts +11 -25
  587. package/src/admin/mail-test-card-labels.ts +1 -1
  588. package/src/admin/plan-change-labels.ts +5 -23
  589. package/src/admin/plan-change.tsx +7 -44
  590. package/src/admin/reviewer-scope-editor.tsx +3 -3
  591. package/src/auth/auth-errors-labels.ts +23 -0
  592. package/src/auth/auth-errors.ts +11 -38
  593. package/src/auth/complete-name-dialog.tsx +9 -8
  594. package/src/auth/forgot-password-form-labels.ts +1 -1
  595. package/src/auth/forgot-password-form.tsx +11 -6
  596. package/src/auth/register-form-labels.ts +1 -1
  597. package/src/auth/reset-password-form-labels.ts +1 -1
  598. package/src/auth/reset-password-form.tsx +8 -4
  599. package/src/auth/sign-in-form-labels.ts +1 -1
  600. package/src/auth/status-parts.tsx +0 -6
  601. package/src/auth/verify-email-labels.ts +1 -1
  602. package/src/auth/verify-email.tsx +11 -6
  603. package/src/billing/cancel-request.ts +28 -6
  604. package/src/billing/cancel-subscription.tsx +29 -22
  605. package/src/billing/dialog-close.ts +34 -0
  606. package/src/billing/plan-card.tsx +36 -11
  607. package/src/billing/plan-change-labels.ts +66 -0
  608. package/src/billing/plan-switch.tsx +31 -20
  609. package/src/chart.ts +21 -3
  610. package/src/components/account-chips.tsx +20 -23
  611. package/src/components/alert-banner.tsx +82 -5
  612. package/src/components/amount-input.tsx +32 -14
  613. package/src/components/autocomplete.tsx +64 -70
  614. package/src/components/bulk-action-bar.tsx +70 -2
  615. package/src/components/button-look.ts +5 -5
  616. package/src/components/button.tsx +2 -2
  617. package/src/components/calculator.tsx +98 -17
  618. package/src/components/chart-edge.ts +34 -1
  619. package/src/components/chart-figure.tsx +35 -0
  620. package/src/components/chart-zoom-core.tsx +6 -5
  621. package/src/components/chart.tsx +26 -5
  622. package/src/components/combobox-core.tsx +303 -69
  623. package/src/components/combobox.tsx +184 -155
  624. package/src/components/copy-button.tsx +34 -23
  625. package/src/components/country-select.tsx +16 -11
  626. package/src/components/data-table-column-settings.tsx +52 -10
  627. package/src/components/data-table-filters.ts +6 -4
  628. package/src/components/data-table-fit.ts +19 -5
  629. package/src/components/data-table-groups.tsx +1 -1
  630. package/src/components/data-table-head.tsx +32 -22
  631. package/src/components/data-table-mobile.tsx +110 -27
  632. package/src/components/data-table-pagination.tsx +21 -6
  633. package/src/components/data-table-resize.ts +1 -1
  634. package/src/components/data-table-row-actions.tsx +3 -3
  635. package/src/components/data-table-row.tsx +25 -14
  636. package/src/components/data-table-selection.ts +1 -1
  637. package/src/components/data-table-shared.tsx +33 -1
  638. package/src/components/data-table-sort.ts +57 -2
  639. package/src/components/data-table-virtual.ts +32 -8
  640. package/src/components/data-table.tsx +267 -41
  641. package/src/components/date-field.tsx +65 -8
  642. package/src/components/date-picker.tsx +125 -48
  643. package/src/components/date-range-picker.tsx +82 -31
  644. package/src/components/dialog-frame.tsx +2 -1
  645. package/src/components/entity-combobox.tsx +4 -1
  646. package/src/components/error-boundary.tsx +53 -39
  647. package/src/components/field-base-labels.ts +20 -0
  648. package/src/components/field-base.tsx +13 -7
  649. package/src/components/field-sync-labels.ts +1 -0
  650. package/src/components/field-sync.tsx +23 -1
  651. package/src/components/form-actions.tsx +20 -5
  652. package/src/components/hover-menu.tsx +18 -8
  653. package/src/components/icon-button.tsx +14 -9
  654. package/src/components/inline-confirm.tsx +116 -0
  655. package/src/components/inline-entity-combobox.tsx +198 -152
  656. package/src/components/input.tsx +1 -1
  657. package/src/components/jump-calendar.tsx +30 -146
  658. package/src/components/legal-page.tsx +10 -7
  659. package/src/components/legal.tsx +4 -2
  660. package/src/components/lightbox.tsx +21 -8
  661. package/src/components/list.tsx +14 -5
  662. package/src/components/measured-grid.tsx +8 -4
  663. package/src/components/mini-calendar.tsx +6 -5
  664. package/src/components/modal.tsx +45 -4
  665. package/src/components/money-draft.ts +16 -5
  666. package/src/components/money-field.tsx +2 -2
  667. package/src/components/month-grid.tsx +229 -0
  668. package/src/components/month-picker.tsx +192 -200
  669. package/src/components/multi-entity-combobox.tsx +1 -0
  670. package/src/components/multi-select.tsx +21 -9
  671. package/src/components/number-field.tsx +14 -7
  672. package/src/components/number-input.tsx +9 -3
  673. package/src/components/numpad-sheet.tsx +4 -3
  674. package/src/components/picker-sheet.tsx +12 -9
  675. package/src/components/pie-chart-labels.ts +8 -0
  676. package/src/components/pie-chart.tsx +22 -28
  677. package/src/components/popover.tsx +18 -1
  678. package/src/components/reauth-dialog.tsx +6 -10
  679. package/src/components/row-actions.tsx +2 -1
  680. package/src/components/section-nav.tsx +7 -0
  681. package/src/components/series-chart-axes.ts +11 -3
  682. package/src/components/series-chart-labels.ts +7 -4
  683. package/src/components/series-chart.tsx +178 -69
  684. package/src/components/share-card.tsx +6 -6
  685. package/src/components/sign-chip-labels.ts +1 -0
  686. package/src/components/sign-chip.tsx +10 -1
  687. package/src/components/tabs-labels.ts +13 -0
  688. package/src/components/tabs.tsx +35 -19
  689. package/src/components/toggle-legend.tsx +16 -11
  690. package/src/components/translation-review-editor.tsx +6 -5
  691. package/src/components/translation-review.tsx +4 -3
  692. package/src/components/treemap-labels.ts +39 -0
  693. package/src/components/treemap-layout.ts +210 -0
  694. package/src/components/treemap.tsx +722 -133
  695. package/src/components/use-table-state.ts +12 -9
  696. package/src/data-table.ts +9 -2
  697. package/src/eslint/role-utilities.ts +97 -19
  698. package/src/feedback/feedback-dialog.tsx +30 -19
  699. package/src/feedback/feedback-mutation.ts +41 -0
  700. package/src/feedback/feedback-page-link.ts +90 -0
  701. package/src/feedback/feedback-public-list.tsx +17 -5
  702. package/src/feedback/feedback-replies.tsx +13 -6
  703. package/src/feedback/feedback-row-detail-labels.ts +5 -0
  704. package/src/feedback/feedback-row-detail.tsx +103 -67
  705. package/src/feedback/feedback-status-undo.ts +41 -27
  706. package/src/feedback/feedback-submit-dialog.tsx +2 -2
  707. package/src/feedback/feedback-submit.tsx +21 -7
  708. package/src/feedback/feedback-swipe.tsx +1 -1
  709. package/src/feedback/feedback-table.tsx +86 -38
  710. package/src/feedback/feedback-thread-labels.ts +2 -2
  711. package/src/feedback/feedback-thread.tsx +27 -25
  712. package/src/feedback.ts +42 -0
  713. package/src/hooks/use-dismiss.ts +3 -2
  714. package/src/hooks/use-focus-trap.ts +8 -24
  715. package/src/hooks/use-hotkey.ts +24 -7
  716. package/src/hooks/use-long-press.ts +16 -2
  717. package/src/hooks/use-media-query.ts +20 -4
  718. package/src/hooks/use-mounted.ts +39 -0
  719. package/src/hooks/use-overlay-history.ts +70 -5
  720. package/src/i18n/defaults.ts +4 -5
  721. package/src/i18n/german.ts +8 -2
  722. package/src/i18n/kit-labels.tsx +9 -2
  723. package/src/i18n/locales/es.ts +8 -2
  724. package/src/i18n/locales/fr.ts +21 -13
  725. package/src/i18n/locales/hu.ts +10 -2
  726. package/src/i18n/locales/it.ts +8 -2
  727. package/src/i18n/locales/zh.ts +9 -2
  728. package/src/i18n/review.ts +5 -0
  729. package/src/index.ts +103 -13
  730. package/src/landing/routing.tsx +14 -10
  731. package/src/lib/broadcast.ts +52 -0
  732. package/src/lib/calc.ts +13 -2
  733. package/src/lib/clipboard-minus.ts +14 -4
  734. package/src/lib/date-format.ts +89 -13
  735. package/src/lib/day-format.ts +96 -0
  736. package/src/lib/decimal-marks.ts +12 -3
  737. package/src/lib/describe-failure.ts +18 -0
  738. package/src/lib/direction.ts +39 -0
  739. package/src/lib/focus-left.ts +156 -0
  740. package/src/lib/format.ts +34 -19
  741. package/src/lib/http-status.ts +38 -0
  742. package/src/lib/intl-cache.ts +25 -0
  743. package/src/lib/isin.ts +10 -0
  744. package/src/lib/iso-day.ts +13 -0
  745. package/src/lib/lazy-with-fallback.ts +82 -0
  746. package/src/lib/path-pattern.ts +55 -0
  747. package/src/lib/reduced-motion.ts +2 -1
  748. package/src/lib/round.ts +7 -2
  749. package/src/lib/safe-storage.ts +48 -6
  750. package/src/lib/session-refresh.ts +1 -1
  751. package/src/lib/share-format.ts +18 -0
  752. package/src/lib/text-case.ts +19 -0
  753. package/src/lib/text-match.ts +69 -2
  754. package/src/lib/thenable.ts +19 -0
  755. package/src/lib/translation-review.ts +13 -5
  756. package/src/notifications/device-zone-report.ts +1 -1
  757. package/src/notifications/notification-bell.tsx +7 -4
  758. package/src/notifications/notification-inbox.tsx +40 -58
  759. package/src/notifications/notification-parts.tsx +3 -4
  760. package/src/notifications/notification-types-setting.tsx +1 -1
  761. package/src/notifications/notifications-labels.ts +7 -0
  762. package/src/notifications/push-device-setting.tsx +1 -1
  763. package/src/notifications/push-devices-setting.tsx +30 -55
  764. package/src/notifications/quiet-hours-setting.tsx +93 -31
  765. package/src/notifications/unsubscribe-panel.tsx +4 -7
  766. package/src/notifications/use-push-device.ts +76 -10
  767. package/src/offline/query-persistence.ts +35 -3
  768. package/src/rhf/fields.tsx +11 -4
  769. package/src/search/command-palette.tsx +2 -4
  770. package/src/search/global-search.tsx +36 -15
  771. package/src/search/use-command-key.ts +13 -12
  772. package/src/search.ts +9 -0
  773. package/src/settings/use-settings-focus.ts +3 -0
  774. package/src/shell/account-menu-language.tsx +27 -5
  775. package/src/shell/account-menu-text-size.tsx +32 -10
  776. package/src/shell/dev-menu.tsx +7 -21
  777. package/src/shell/role-switcher.tsx +7 -0
  778. package/src/shell/top-bar-actions.tsx +1 -1
  779. package/src/shell/top-bar-parts-labels.ts +0 -3
  780. package/src/shell.ts +40 -9
  781. package/src/sync/engine.ts +339 -61
  782. package/src/sync.ts +8 -1
  783. package/src/testing/css-variables.ts +8 -9
  784. package/src/theme/contrast.ts +8 -9
  785. package/src/theme/palette-store.ts +9 -9
  786. package/src/theme/text-size.ts +6 -8
  787. package/src/theme/theme-store.ts +7 -9
  788. package/src/tour/tour-catalogue.tsx +26 -15
  789. package/src/tour/tour-dock.ts +0 -2
  790. package/src/tour/tour-gates.ts +23 -0
  791. package/src/tour/tour-overlay.tsx +1170 -0
  792. package/src/tour/tour.tsx +116 -1193
  793. package/src/tour/use-tour-progress.ts +1 -1
  794. package/src/tour/use-tour-url-sync.ts +7 -3
  795. package/src/wizard/stepper-nav.tsx +3 -1
  796. package/src/wizard/types.ts +11 -2
  797. package/src/wizard/use-wizard.ts +2 -1
  798. package/src/wizard/validation.ts +8 -2
  799. package/tokens.css +2 -1
  800. package/dist/components/ui-labels.js.map +0 -1
  801. package/dist/shell/dev-switchers.d.ts +0 -6
  802. package/dist/shell/dev-switchers.js +0 -12
  803. package/dist/shell/dev-switchers.js.map +0 -1
  804. package/src/components/ui-labels.ts +0 -24
  805. package/src/shell/dev-switchers.tsx +0 -18
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eifi1/ui-kit",
3
- "version": "0.51.6",
3
+ "version": "0.52.0",
4
4
  "type": "module",
5
5
  "description": "App-agnostic shared design system: domain-free React components, theme and tokens.",
6
6
  "_sideEffects": "The barrel (src/index.ts) re-exports EVERY component, including components/chart, which statically imports recharts. Without this field a bundler must assume each of those modules has side effects, so it cannot drop the unused ones: importing a Button from '@eifi1/ui-kit' dragged all 433KB of recharts into the consumer's ENTRY chunk, and Keksdose was preloading it on every page load, login included. Nothing in src/ imports for side effects (no bare imports, no CSS imports from JS, no module-level global writes) — the token stylesheet is its own './tokens.css' export — so this is safe. CSS is still listed so any future stylesheet survives. Re-checked when `flag-icons` left `dependencies` and tsup started emitting a `\"use client\"` banner: neither touches this. The flag stylesheet was never imported from JS in the first place (that was the finding), and a directive prologue is a string literal every bundler lifts out before it decides whether a module is inert.",
@@ -106,13 +106,14 @@
106
106
  "test:coverage": "vitest run --coverage",
107
107
  "check:graph": "node scripts/check-module-graph.mjs",
108
108
  "check:package": "node scripts/verify-package.mjs --quiet",
109
+ "check:api": "node scripts/check-api-compat.mjs",
109
110
  "check:tailwind": "node scripts/check-tailwind-scan.mjs",
110
111
  "check:security": "npm audit --audit-level=high",
111
112
  "check:commits": "node scripts/check-commit-range.cjs",
112
113
  "check:commit-rules": "node scripts/check-commit-rules.mjs",
113
114
  "sync:commit-rules": "node scripts/sync-commit-rules.mjs",
114
- "format": "prettier --write .",
115
- "format:check": "prettier --check .",
115
+ "format": "prettier --write . --cache --cache-location node_modules/.cache/prettier/.prettier-cache --cache-strategy content",
116
+ "format:check": "prettier --check . --cache --cache-location node_modules/.cache/prettier/.prettier-cache --cache-strategy content",
116
117
  "check:static": "npm run format:check && npm run typecheck && npm run lint && npm run check:tokens && npm run check:security && npm run check:commit-rules && npm run check:commits",
117
118
  "check:test": "npm run test:coverage",
118
119
  "check:build": "npm run build && npm run check:graph && npm run check:package && node scripts/gen-export-inventory.mjs --check && node scripts/gen-styling-inventory.mjs --check && npm run build:showcase && npm run check:tailwind",
@@ -121,7 +122,7 @@
121
122
  "test:watch": "vitest",
122
123
  "build": "node scripts/tsup-quiet.mjs && node scripts/build-dts.mjs && node scripts/fix-esm-extensions.mjs && node scripts/flatten-en.mjs && node scripts/build-pay-page.mjs",
123
124
  "verify:package": "npm run build && node scripts/verify-package.mjs",
124
- "dev": "tsup --watch --onSuccess \"node scripts/build-dts.mjs && node scripts/fix-esm-extensions.mjs\"",
125
+ "dev": "tsup --watch --onSuccess \"node scripts/build-dts.mjs && node scripts/fix-esm-extensions.mjs && node scripts/flatten-en.mjs && node scripts/build-pay-page.mjs\"",
125
126
  "dev:showcase": "vite --config showcase/vite.config.ts",
126
127
  "build:showcase": "vite build --config showcase/vite.config.ts --logLevel warn",
127
128
  "preview:showcase": "vite preview --config showcase/vite.config.ts",
@@ -140,7 +141,7 @@
140
141
  "@testing-library/react": ">=16",
141
142
  "dexie": "^4",
142
143
  "idb-keyval": "^6",
143
- "lucide-react": ">=0.400.0 <2",
144
+ "lucide-react": ">=0.577.0 <2",
144
145
  "modern-screenshot": "^4.7.0",
145
146
  "react": ">=19.2",
146
147
  "react-dom": ">=19.2",
@@ -178,7 +179,7 @@
178
179
  "optional": true
179
180
  }
180
181
  },
181
- "_dependencies": "Only what the package imports AND owns the version of. `lucide-react` is a PEER: every consumer already declares `lucide-react: ^0.511.0` itself, so a hard dependency here bought each of them a second copy of the icon set in node_modules — and pinned to 0.511.x it held all three behind a release line that is now at 1.x. The range is deliberately wide (`>=0.400.0 <2`): the kit imports named icon components and nothing else, which has been stable across that whole span, so the app picks the version. `flag-icons` was never imported at all — 5.6 MB of stylesheet and SVG installed into every consumer to support class NAMES (`fi fi-xx`) that CurrencyFlag, CurrencySelect and LanguageMenu render as strings. The host supplies that stylesheet; see the dependency section of README.md. It stays a devDependency because the showcase imports it.",
182
+ "_dependencies": "Only what the package imports AND owns the version of. `lucide-react` is a PEER: every consumer already declares `lucide-react: ^0.511.0` itself, so a hard dependency here bought each of them a second copy of the icon set in node_modules — and pinned to 0.511.x it held all three behind a release line that is now at 1.x. The range is deliberately wide (`>=0.577.0 <2`): the kit imports named icon components and nothing else, so the app picks the version. Its floor is the version all three apps run, and scripts/verify-package.mjs installs that floor rather than the 1.x devDependency, so an icon that exists only in 1.x fails the kit's gate, not the apps' builds (MOD-2, refactor audit 2026-10-30; the old `>=0.400.0` floor had never been loaded by anything). `flag-icons` was never imported at all — 5.6 MB of stylesheet and SVG installed into every consumer to support class NAMES (`fi fi-xx`) that CurrencyFlag, CurrencySelect and LanguageMenu render as strings. The host supplies that stylesheet; see the dependency section of README.md. It stays a devDependency because the showcase imports it.",
182
183
  "dependencies": {
183
184
  "clsx": "^2.1.1",
184
185
  "tailwind-merge": "^3.7.0",
@@ -186,6 +187,7 @@
186
187
  },
187
188
  "devDependencies": {
188
189
  "@eslint/js": "^10.0.1",
190
+ "@tailwindcss/oxide": "^4.3.3",
189
191
  "@tailwindcss/vite": "^4.3.3",
190
192
  "@tanstack/query-async-storage-persister": "^5.104.1",
191
193
  "@tanstack/react-query": "^5.104.1",
@@ -201,6 +203,7 @@
201
203
  "axe-core": "4.13.0",
202
204
  "commit-and-tag-version": "^13.2.1",
203
205
  "dexie": "^4.4.6",
206
+ "esbuild": "^0.28.2",
204
207
  "eslint": "^10.11.0",
205
208
  "eslint-import-resolver-typescript": "^4.4.5",
206
209
  "eslint-plugin-import-x": "^4.17.1",
@@ -219,6 +222,7 @@
219
222
  "react-hook-form": "^7.88.0",
220
223
  "react-router": "^8.3.0",
221
224
  "recharts": "^3.8.1",
225
+ "rollup": "^4.63.5",
222
226
  "sonner": "^2.0.7",
223
227
  "tailwindcss": "^4.3.3",
224
228
  "tsup": "^8.5.0",
@@ -249,9 +253,9 @@
249
253
  "engines": {
250
254
  "node": ">=20.18"
251
255
  },
252
- "_overrides": "esbuild is forced to ^0.28.2 for GHSA-g7r4-m6w7-qqqr (dev-server file read on Windows, fixed in 0.28.1). vite already allows ^0.28; tsup 8.5.1 still pins ^0.27, and `npm run check` (build + package verification) proves it works on 0.28. Drop this once tsup allows 0.28 itself. eslint-plugin-jsx-a11y 6.10.2 (its latest) declares eslint peers up to ^9; it runs unchanged on eslint 10 — every a11y rule still fires, same counts — so its eslint peer is pointed at ours. Drop that entry once jsx-a11y declares ^10.",
256
+ "_overrides": "esbuild is forced to ^0.28.2 for GHSA-g7r4-m6w7-qqqr (dev-server file read on Windows, fixed in 0.28.1). vite already allows ^0.28; tsup 8.5.1 still pins ^0.27, and `npm run check` (build + package verification) proves it works on 0.28. The override is `$esbuild`, the devDependency's own range: npm refuses an override of a direct dependency that names a different spec. Drop it once tsup allows 0.28 itself; the devDependency stays. esbuild and rollup are devDependencies because scripts import them (flatten-en and check-module-graph; refactor audit 2026-10-30, TST-9): they came only through tsup and vite, so a move off tsup would have broken check:graph. eslint-plugin-jsx-a11y 6.10.2 (its latest) declares eslint peers up to ^9; it runs unchanged on eslint 10 — every a11y rule still fires, same counts — so its eslint peer is pointed at ours. Drop that entry once jsx-a11y declares ^10.",
253
257
  "overrides": {
254
- "esbuild": "^0.28.2",
258
+ "esbuild": "$esbuild",
255
259
  "eslint-plugin-jsx-a11y": {
256
260
  "eslint": "$eslint"
257
261
  }
@@ -1,8 +1,6 @@
1
- import { useEffect, useRef } from "react";
2
-
3
1
  /**
4
2
  * What the account's own settings parts share (docs/user-admin-harmonization.md §6):
5
- * the companies a refusal names, a mounted guard, and the card's type.
3
+ * the companies a refusal names and the card's type (the mounted guard re-exported).
6
4
  *
7
5
  * @internal Not part of the barrel; the parts are.
8
6
  */
@@ -39,28 +37,10 @@ export function refusalCompanies(err: unknown): string[] | undefined {
39
37
  );
40
38
  }
41
39
 
42
- /** Whether the component is still mounted — a late answer after the app navigated away
43
- * (the deletion signs out) must not set state. */
44
- export function useMounted(): { readonly current: boolean } {
45
- const mounted = useRef(true);
46
- useEffect(() => {
47
- mounted.current = true;
48
- return () => {
49
- mounted.current = false;
50
- };
51
- }, []);
52
- return mounted;
53
- }
54
-
55
- /** Call `call` and hand back a promise, a throw included — a callback may return
56
- * nothing (done at once), a promise, or throw before it returns one. */
57
- export function settle(call: () => unknown): Promise<unknown> {
58
- try {
59
- return Promise.resolve(call());
60
- } catch (error) {
61
- return Promise.reject(error);
62
- }
63
- }
40
+ /** The mounted guard and the callback-to-promise bridge, in `hooks/use-mounted.ts` since
41
+ * 0.52: seven notifications modules imported them from here (refactor audit
42
+ * 2026-10-30, MOD-6). Re-exported for the account parts that still do. */
43
+ export { settle, useMounted } from "../hooks/use-mounted";
64
44
 
65
45
  /** The settings cards' type scale, PasskeysSetting's: a small title and a muted line.
66
46
  * Defined with the card look in settings/ since 0.34 (MOD-8, refactor audit 2026-10). */
@@ -3,7 +3,7 @@
3
3
  // loads as one chunk like the other languages (0.34, KS U8). ./data-export-setting
4
4
  // re-exports them.
5
5
 
6
- import { englishWait } from "../auth/auth-errors";
6
+ import { englishWait } from "../auth/auth-errors-labels";
7
7
  import type { DataExportLabels } from "./data-export-setting";
8
8
 
9
9
  export const DEFAULT_DATA_EXPORT_LABELS: DataExportLabels = {
@@ -3,7 +3,7 @@
3
3
  // loads as one chunk like the other languages (0.34, KS U8). ./delete-account-setting
4
4
  // re-exports them.
5
5
 
6
- import { englishRateLimited } from "../auth/auth-errors";
6
+ import { englishRateLimited } from "../auth/auth-errors-labels";
7
7
  import type { DeleteAccountLabels } from "./delete-account-setting";
8
8
 
9
9
  export const DEFAULT_DELETE_ACCOUNT_LABELS: DeleteAccountLabels = {
@@ -3,7 +3,7 @@
3
3
  // loads as one chunk like the other languages (0.34, KS U8). ./email-change-setting
4
4
  // re-exports them.
5
5
 
6
- import { englishRateLimited } from "../auth/auth-errors";
6
+ import { englishRateLimited } from "../auth/auth-errors-labels";
7
7
  import type { EmailChangeLabels } from "./email-change-setting";
8
8
 
9
9
  export const DEFAULT_EMAIL_CHANGE_LABELS: EmailChangeLabels = {
@@ -1,13 +1,17 @@
1
- import { useEffect, useRef, useState } from "react";
1
+ import { useEffect, useMemo, useRef, useState } from "react";
2
2
  import type { KeyboardEvent, ReactNode } from "react";
3
3
  import { KeyRound } from "lucide-react";
4
4
  import { cn } from "../lib/cn";
5
- import { useKitLocale, type LabelOverride } from "../i18n/kit-labels";
5
+ import { useDayFormatter } from "../lib/day-format";
6
+ import { toDate } from "../lib/format";
7
+ import type { LabelOverride } from "../i18n/kit-labels";
6
8
  import { Button } from "../components/button";
7
9
  import { Card } from "../components/card";
8
10
  import { EmptyState } from "../components/empty-state";
11
+ import { InlineConfirm } from "../components/inline-confirm";
9
12
  import { Input } from "../components/input";
10
13
  import { Skeleton } from "../components/skeleton";
14
+ import { COMMIT_EXCEPT_BILLING, useWriteLock } from "../components/write-lock";
11
15
  import { useAccountSettingsLabels } from "./account-settings-labels";
12
16
  import { SettingsCardTitle } from "../settings/settings-heading";
13
17
  import type { PasskeysSettingLabels } from "./account-settings-labels";
@@ -88,7 +92,9 @@ export interface PasskeysSettingProps<Id extends PasskeyId = PasskeyId> extends
88
92
  * app knows which of those it detected.
89
93
  */
90
94
  unavailable?: ReactNode;
91
- /** A date for the "Added …" / "Last used …" lines. Default: the locale's medium date. */
95
+ /** A date for the "Added …" / "Last used …" lines. Default: the provider's `formatDate`
96
+ * (the app's date preference), else a medium date in the provider's locale and
97
+ * `timeZone`. */
92
98
  formatDate?: (date: Date) => string;
93
99
  /** Overrides the provider's locale for the default date format. */
94
100
  locale?: string;
@@ -117,6 +123,11 @@ export interface PasskeysSettingProps<Id extends PasskeyId = PasskeyId> extends
117
123
  * must work in an app without a `ConfirmProvider`, and the question belongs next to
118
124
  * the passkey it names. Focus moves to Cancel, as in every destructive confirm in the
119
125
  * kit, so the Enter that pressed Delete cannot also answer it.
126
+ *
127
+ * **Under a write lock** (0.52) Add, Rename, Delete and the confirm are `commit` controls
128
+ * exempt from billing — a lapsed plan still lets the account manage how it signs in, the
129
+ * demo does not. Until 0.52 the passkeys' confirm was the one inline confirm without it,
130
+ * so the demo could delete, rename and add (refactor audit 2026-10-30, DUP-10).
120
131
  */
121
132
  export function PasskeysSetting<Id extends PasskeyId = PasskeyId>({
122
133
  passkeys,
@@ -138,7 +149,21 @@ export function PasskeysSetting<Id extends PasskeyId = PasskeyId>({
138
149
  ...rest
139
150
  }: PasskeysSettingProps<Id>) {
140
151
  const labels = useAccountSettingsLabels("passkeys", labelsProp);
141
- const locale = useKitLocale(localeProp);
152
+ // The prop, else the provider's `formatDate`, else the kit's in the provider's locale and
153
+ // `timeZone`; a bare "YYYY-MM-DD" is read on its calendar (refactor audit 2026-10-30,
154
+ // DUP-2: this card parsed with `new Date` and built its own `Intl` formatter).
155
+ // The raw value goes in, so a bare day keeps its calendar; the prop still gets a Date.
156
+ const own = useMemo(
157
+ () =>
158
+ formatDate &&
159
+ ((value: PasskeyItem["createdAt"]) => {
160
+ const date = toDate(value);
161
+ return date ? formatDate(date) : "";
162
+ }),
163
+ [formatDate],
164
+ );
165
+ const day = useDayFormatter(own, localeProp);
166
+ const lock = useWriteLock(COMMIT_EXCEPT_BILLING);
142
167
  const [name, setName] = useState("");
143
168
  // `beforeAdd` is running. State for the button, and a ref for the guard: two clicks
144
169
  // in one frame both read the state from before either set it.
@@ -146,14 +171,12 @@ export function PasskeysSetting<Id extends PasskeyId = PasskeyId>({
146
171
  const checkingRef = useRef(false);
147
172
 
148
173
  const date = (value: PasskeyItem["createdAt"]): string | null => {
149
- if (value === null || value === undefined || value === "") return null;
150
- const d = value instanceof Date ? value : new Date(value);
151
- if (Number.isNaN(d.getTime())) return null;
152
- return formatDate ? formatDate(d) : new Intl.DateTimeFormat(locale, { dateStyle: "medium" }).format(d);
174
+ return toDate(value) ? day(value) : null;
153
175
  };
154
176
 
155
177
  const add = () => {
156
- if (adding || checkingRef.current) return;
178
+ // The name field's Enter reaches here too, past the locked button.
179
+ if (adding || checkingRef.current || lock.locked) return;
157
180
  const typed = name;
158
181
  const value = typed.trim();
159
182
  const send = () =>
@@ -211,6 +234,7 @@ export function PasskeysSetting<Id extends PasskeyId = PasskeyId>({
211
234
  lastUsed={date(item.lastUsedAt)}
212
235
  attributes={rowProps?.(item)}
213
236
  busy={busyId !== undefined && busyId !== null && busyId === item.id}
237
+ locked={lock.locked}
214
238
  onRename={onRename}
215
239
  onDelete={onDelete}
216
240
  labels={labels}
@@ -234,7 +258,7 @@ export function PasskeysSetting<Id extends PasskeyId = PasskeyId>({
234
258
  }}
235
259
  />
236
260
  )}
237
- <Button onClick={add} disabled={busy} aria-busy={busy || undefined}>
261
+ <Button onClick={add} commit={COMMIT_EXCEPT_BILLING} disabled={busy} aria-busy={busy || undefined}>
238
262
  <KeyRound className="size-4" aria-hidden />
239
263
  {adding ? labels.adding : labels.add}
240
264
  </Button>
@@ -265,6 +289,7 @@ function PasskeyRow<Id extends PasskeyId>({
265
289
  lastUsed,
266
290
  attributes,
267
291
  busy,
292
+ locked,
268
293
  onRename,
269
294
  onDelete,
270
295
  labels,
@@ -274,24 +299,26 @@ function PasskeyRow<Id extends PasskeyId>({
274
299
  lastUsed: string | null;
275
300
  attributes?: { id?: string } & PasskeyDataAttributes;
276
301
  busy: boolean;
302
+ /** A write lock holds: the rename field's Enter saves nothing. */
303
+ locked: boolean;
277
304
  onRename?: PasskeysSettingProps<Id>["onRename"];
278
305
  onDelete?: PasskeysSettingProps<Id>["onDelete"];
279
306
  labels: PasskeysSettingLabels;
280
307
  }) {
281
308
  const [mode, setMode] = useState<RowMode>("view");
282
309
  const [draft, setDraft] = useState(item.name);
283
- // Which button opened the sub-mode, so leaving it puts focus back there — the
284
- // confirm or the field unmounts under the focus, which otherwise falls to <body>.
310
+ // Which button opened the sub-mode, so leaving it puts focus back there — the field or
311
+ // the confirm unmounts under the focus, which otherwise falls to <body>. InlineConfirm
312
+ // returns it on Cancel and Escape; this also covers a delete that succeeded while the
313
+ // row stayed (the list not refreshed yet) and a rename.
285
314
  const [returnTo, setReturnTo] = useState<"rename" | "delete" | null>(null);
286
- const cancelDeleteRef = useRef<HTMLButtonElement>(null);
287
315
  const renameRef = useRef<HTMLInputElement>(null);
288
316
  const renameButtonRef = useRef<HTMLButtonElement>(null);
289
317
  const deleteButtonRef = useRef<HTMLButtonElement>(null);
290
318
 
291
319
  useEffect(() => {
292
- if (mode === "delete") cancelDeleteRef.current?.focus();
293
- else if (mode === "rename") renameRef.current?.select();
294
- else if (returnTo) (returnTo === "rename" ? renameButtonRef : deleteButtonRef).current?.focus();
320
+ if (mode === "rename") renameRef.current?.select();
321
+ else if (mode === "view" && returnTo) (returnTo === "rename" ? renameButtonRef : deleteButtonRef).current?.focus();
295
322
  }, [mode, returnTo]);
296
323
 
297
324
  const open = (next: "rename" | "delete") => {
@@ -300,17 +327,10 @@ function PasskeyRow<Id extends PasskeyId>({
300
327
  setMode(next);
301
328
  };
302
329
  const leave = () => setMode("view");
303
- const escapeLeaves = (e: KeyboardEvent<HTMLButtonElement>) => {
304
- if (e.key === "Escape") {
305
- e.preventDefault();
306
- e.stopPropagation();
307
- leave();
308
- }
309
- };
310
330
 
311
331
  const saveRename = () => {
312
332
  const next = draft.trim();
313
- if (!onRename || !next || busy) return;
333
+ if (!onRename || !next || busy || locked) return;
314
334
  if (next === item.name) {
315
335
  leave();
316
336
  return;
@@ -356,7 +376,7 @@ function PasskeyRow<Id extends PasskeyId>({
356
376
  }
357
377
  }}
358
378
  />
359
- <Button size="sm" onClick={saveRename} disabled={busy || !draft.trim()}>
379
+ <Button size="sm" onClick={saveRename} commit={COMMIT_EXCEPT_BILLING} disabled={busy || !draft.trim()}>
360
380
  {labels.save}
361
381
  </Button>
362
382
  <Button size="sm" variant="ghost" onClick={leave}>
@@ -368,19 +388,19 @@ function PasskeyRow<Id extends PasskeyId>({
368
388
 
369
389
  if (mode === "delete") {
370
390
  return (
371
- <li {...li} className="space-y-2 py-2">
372
- <p role="alert" className="text-sm">
373
- {labels.deleteConfirm(item.name)}
374
- </p>
375
- <div className="flex flex-wrap gap-2">
376
- <Button size="sm" variant="danger" onClick={confirmDelete} onKeyDown={escapeLeaves} disabled={busy}>
377
- {labels.confirmDelete}
378
- </Button>
379
- <Button ref={cancelDeleteRef} size="sm" variant="ghost" onClick={leave} onKeyDown={escapeLeaves}>
380
- {labels.cancel}
381
- </Button>
382
- </div>
383
- </li>
391
+ <InlineConfirm
392
+ as="li"
393
+ {...li}
394
+ className="py-2"
395
+ prompt={labels.deleteConfirm(item.name)}
396
+ confirmLabel={labels.confirmDelete}
397
+ cancelLabel={labels.cancel}
398
+ onConfirm={confirmDelete}
399
+ onLeave={leave}
400
+ busy={busy}
401
+ commit={COMMIT_EXCEPT_BILLING}
402
+ returnFocusRef={deleteButtonRef}
403
+ />
384
404
  );
385
405
  }
386
406
 
@@ -398,6 +418,7 @@ function PasskeyRow<Id extends PasskeyId>({
398
418
  ref={renameButtonRef}
399
419
  size="sm"
400
420
  variant="ghost"
421
+ commit={COMMIT_EXCEPT_BILLING}
401
422
  disabled={busy}
402
423
  onClick={() => open("rename")}
403
424
  aria-label={labels.renameItem(item.name)}
@@ -411,6 +432,7 @@ function PasskeyRow<Id extends PasskeyId>({
411
432
  size="sm"
412
433
  variant="ghost"
413
434
  tone="danger"
435
+ commit={COMMIT_EXCEPT_BILLING}
414
436
  disabled={busy}
415
437
  onClick={() => open("delete")}
416
438
  aria-label={labels.deleteItem(item.name)}
@@ -2,9 +2,11 @@ import { useState } from "react";
2
2
  import type { ComponentPropsWithRef, ReactNode } from "react";
3
3
  import { MonitorSmartphone } from "lucide-react";
4
4
 
5
- import { useKitLabels, useKitLocale, type LabelOverride } from "../i18n/kit-labels";
5
+ import { useKitLabels, type LabelOverride } from "../i18n/kit-labels";
6
6
  import { cn } from "../lib/cn";
7
- import { formatRelativeTime, toDate } from "../lib/format";
7
+ import { useDayFormatter } from "../lib/day-format";
8
+ import { describeFailure } from "../lib/describe-failure";
9
+ import { toDate, useKitFormat } from "../lib/format";
8
10
  import type { DateInput } from "../lib/format";
9
11
  import { AlertBanner } from "../components/alert-banner";
10
12
  import { Chip } from "../components/chip";
@@ -107,8 +109,9 @@ export interface SessionsSettingProps<Id extends SessionId = SessionId> extends
107
109
  onRevoke?: (id: Id) => Promise<unknown> | void;
108
110
  /** The app's own words for a failure, or `undefined` for the kit's `failed`. */
109
111
  describeError?: (error: unknown, action: SessionsAction) => ReactNode | undefined;
110
- /** The "Last active" text. Default: how long ago, in the provider's locale, and the
111
- * date once it is more than a week back. */
112
+ /** The "Last active" text. Default: how long ago, in the provider's locale and
113
+ * `timeZone`, and the date once it is more than a week back — through the provider's
114
+ * `formatDate` (the app's date preference) when it has one. */
112
115
  formatLastActive?: (date: Date) => string;
113
116
  /** Overrides the provider's locale for the default format. */
114
117
  locale?: string;
@@ -152,22 +155,25 @@ export function SessionsSetting<Id extends SessionId = SessionId>({
152
155
  ...rest
153
156
  }: SessionsSettingProps<Id>) {
154
157
  const labels = useKitLabels("sessions", DEFAULT_SESSIONS_LABELS, labelsProp);
155
- const locale = useKitLocale(localeProp);
158
+ // The provider's locale and `timeZone`; past a week the words are a date, and a date
159
+ // that names a day follows the app's preference (refactor audit 2026-10-30, DUP-2).
160
+ const { formatDate, formatRelativeTime } = useKitFormat(localeProp);
161
+ const day = useDayFormatter(null, localeProp);
156
162
  const [busyId, setBusyId] = useState<Id | null>(null);
157
163
  const [failure, setFailure] = useState<ReactNode>(null);
158
164
  const mounted = useMounted();
159
165
 
160
- const describe = (error: unknown, action: SessionsAction): ReactNode => {
161
- const own = describeError?.(error, action);
162
- return hasContent(own) ? own : labels.failed;
163
- };
166
+ const describe = (error: unknown, action: SessionsAction): ReactNode =>
167
+ describeFailure(describeError?.(error, action), labels.failed);
164
168
 
165
169
  const lastActive = (value: DateInput): string | null => {
166
170
  const date = toDate(value);
167
171
  if (!date) return null;
168
- return formatLastActive
169
- ? formatLastActive(date)
170
- : formatRelativeTime(date, { locale, absoluteAfterDays: 7, absoluteStyle: "medium" });
172
+ if (formatLastActive) return formatLastActive(date);
173
+ const words = formatRelativeTime(date, { absoluteAfterDays: 7, absoluteStyle: "medium" });
174
+ // Past a week the words ARE the medium date ("5 weeks ago" makes a reader do sums);
175
+ // then the day as the app's preference writes it.
176
+ return words === formatDate(date, "medium") ? day(date) : words;
171
177
  };
172
178
 
173
179
  const signOutEverywhere = () => {
@@ -1,5 +1,5 @@
1
1
  import { Children, useContext, useEffect, useId, useRef, useState } from "react";
2
- import type { KeyboardEvent, ReactNode } from "react";
2
+ import type { ReactNode } from "react";
3
3
  import { useKitLabels, type LabelOverride } from "../i18n/kit-labels";
4
4
  import { AlertBanner } from "../components/alert-banner";
5
5
  import { Checkbox } from "../components/checkbox";
@@ -12,6 +12,7 @@ import { authErrorCode } from "../auth/auth-errors";
12
12
  import type { KitErrorCode } from "../auth/auth-errors";
13
13
  import { usePersonLabel } from "./admin-parts";
14
14
  import { hasContent } from "../lib/presence";
15
+ import { isThenable } from "../lib/thenable";
15
16
  import type { AdminPerson, MaybePromise } from "./admin-parts";
16
17
  import { isGroupTarget } from "./admin-action-log";
17
18
  import type { AdminGroupTarget } from "./admin-action-log";
@@ -176,11 +177,6 @@ interface AdminActionConfirmCommonProps {
176
177
  * and `acknowledge`. */
177
178
  export type AdminActionConfirmProps = AdminActionConfirmCommonProps & AdminActionConfirmTarget;
178
179
 
179
- /** Whether a callback answered a promise. */
180
- function isThenable(value: unknown): value is PromiseLike<unknown> {
181
- return typeof value === "object" && value !== null && typeof (value as PromiseLike<unknown>).then === "function";
182
- }
183
-
184
180
  /** The refusal's words and code. */
185
181
  function refusalOf(
186
182
  error: unknown,
@@ -378,6 +374,8 @@ export function AdminActionConfirm({
378
374
  title={heading}
379
375
  description={identity}
380
376
  onClose={() => onClose(confirmed.current)}
377
+ // The removal offered with the refusal is a request too.
378
+ busy={busy}
381
379
  actions={(close) => (
382
380
  <CloseOnDone done={done}>
383
381
  <Button type="button" variant="secondary" disabled={busy} onClick={close}>
@@ -426,10 +424,7 @@ export function AdminActionConfirm({
426
424
  description={identity}
427
425
  onClose={() => onClose(confirmed.current)}
428
426
  // A request that has left cannot be called back by closing the dialog.
429
- onKeyDown={(event: KeyboardEvent<HTMLDivElement>) => {
430
- if (busy && event.key === "Escape") event.preventDefault();
431
- }}
432
- aria-busy={busy || undefined}
427
+ busy={busy}
433
428
  actions={(close) => (
434
429
  <CloseOnDone done={done}>
435
430
  <Button type="button" variant="ghost" disabled={busy} onClick={close}>
@@ -1,8 +1,8 @@
1
1
  import { useCallback } from "react";
2
- import { useKitDateFormatter, useKitLocale } from "../i18n/kit-labels";
3
- import { formatDate, toDate } from "../lib/format";
2
+ import { useKitLocale } from "../i18n/kit-labels";
3
+ import { useDayFormatter } from "../lib/day-format";
4
+ import { toDate } from "../lib/format";
4
5
  import type { DateInput } from "../lib/format";
5
- import { toLocalIso } from "../lib/dates";
6
6
  import { formatPersonName } from "../lib/person-name";
7
7
 
8
8
  /**
@@ -54,29 +54,15 @@ export function usePersonLabel(localeProp?: string): (person: AdminPerson | null
54
54
  /**
55
55
  * A day as words in a sentence ("6 Nov 2026"): the provider's `formatDate` when the app
56
56
  * set one (keksdose K12), asked for no weekday — a date in a sentence carries none — else
57
- * `Intl`'s medium date. `""` for no date.
57
+ * `Intl`'s medium date, in the provider's locale and `timeZone` (0.52: the kit's one day
58
+ * ladder, `useDayFormatter` — refactor audit 2026-10-30, DUP-2). `""` for no date or one
59
+ * that does not parse: the caller leaves the sentence out.
58
60
  */
59
61
  export function useDayText(localeProp?: string): (value: DateInput) => string {
60
- const locale = useKitLocale(localeProp);
61
- const fromProvider = useKitDateFormatter();
62
- return useCallback(
63
- (value) => {
64
- const date = toDate(value);
65
- if (!date) return "";
66
- const own = fromProvider
67
- ? fromProvider(toLocalIso(date), { unit: "day", source: "dateMark", locale, weekday: false })
68
- : "";
69
- return own || formatDate(date, "medium", { locale });
70
- },
71
- [fromProvider, locale],
72
- );
62
+ const day = useDayFormatter(undefined, localeProp);
63
+ return useCallback((value) => (toDate(value) ? day(value) : ""), [day]);
73
64
  }
74
65
 
75
- /** Call a callback that may throw or answer a promise, as a promise. */
76
- export function settle<T>(call: () => MaybePromise<T>): Promise<T | void> {
77
- try {
78
- return Promise.resolve(call());
79
- } catch (error) {
80
- return Promise.reject(error);
81
- }
82
- }
66
+ /** Call a callback that may throw or answer a promise, as a promise — the kit's one
67
+ * (hooks/use-mounted), not a copy of it (0.52 code review, this file). */
68
+ export { settle } from "../hooks/use-mounted";
@@ -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). ./mail-test-card re-exports them.
4
4
 
5
- import { englishRateLimited } from "../auth/auth-errors";
5
+ import { englishRateLimited } from "../auth/auth-errors-labels";
6
6
  import type { MailTestCardLabels } from "./mail-test-card";
7
7
 
8
8
  /** docs/admin-harmonization.md §9.2.4, word for word. */
@@ -1,23 +1,5 @@
1
- // The English words of ./plan-change, in a module with no component code: the English
2
- // catalogue (src/i18n/defaults.ts) imports them without the component, so `en` loads as one
3
- // chunk like the other languages (0.34, KS U8). ./plan-change re-exports them.
4
-
5
- import type { PlanChangeLabels } from "./plan-change";
6
-
7
- export const DEFAULT_PLAN_CHANGE_LABELS: PlanChangeLabels = {
8
- column: "Plan",
9
- title: "Change plan",
10
- confirm: "Change plan",
11
- plan: "Plan",
12
- current: (plan) => `Current plan: ${plan}`,
13
- keepsItems: "A smaller plan only blocks creating more; nothing is deleted.",
14
- until: "Free until",
15
- untilHint: "Leave empty for no end. A running beta keeps its own end.",
16
- needsChange: "Pick another plan or an end date.",
17
- changed: (from, to) => `Plan changed from ${from} to ${to}.`,
18
- set: (to) => `Plan set to ${to}.`,
19
- keptBeta: "The beta keeps its end; only the plan changed.",
20
- untilDone: (date) => `Free until ${date}.`,
21
- overLimit: "Above the new plan’s limit: nothing is removed, new items are blocked.",
22
- usageOf: (used, limit, dimension) => `${used} of ${limit} ${dimension}`,
23
- };
1
+ // Moved to billing/plan-change-labels in 0.52 (refactor audit 2026-10-30, MOD-6): the
2
+ // billing and admin folders imported each other through it. Kept so the old path still
3
+ // answers; nothing in the kit imports it any more but the English catalogue.
4
+ export { DEFAULT_PLAN_CHANGE_LABELS } from "../billing/plan-change-labels";
5
+ export type { PlanChangeLabels } from "../billing/plan-change-labels";