@eifi1/ui-kit 0.51.3 → 0.51.5

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 (780) hide show
  1. package/README.md +6 -6
  2. package/dist/account/account-settings-labels.js.map +1 -1
  3. package/dist/account/account-settings.js +11 -9
  4. package/dist/account/account-settings.js.map +1 -1
  5. package/dist/account/delete-account-setting.js +56 -65
  6. package/dist/account/delete-account-setting.js.map +1 -1
  7. package/dist/account/email-change-setting-labels.js.map +1 -1
  8. package/dist/account/email-change-setting.js.map +1 -1
  9. package/dist/account/passkeys-setting.js.map +1 -1
  10. package/dist/account/sessions-setting.js.map +1 -1
  11. package/dist/admin/admin-action-confirm.js +1 -3
  12. package/dist/admin/admin-action-confirm.js.map +1 -1
  13. package/dist/admin/admin-action-log.js.map +1 -1
  14. package/dist/admin/admin-area-labels.js +4 -1
  15. package/dist/admin/admin-area-labels.js.map +1 -1
  16. package/dist/admin/admin-overview.js +19 -11
  17. package/dist/admin/admin-overview.js.map +1 -1
  18. package/dist/admin/admin-sections.js.map +1 -1
  19. package/dist/admin/admin-tool-links.d.ts +1 -1
  20. package/dist/admin/admin-tool-links.js +7 -1
  21. package/dist/admin/admin-tool-links.js.map +1 -1
  22. package/dist/admin/invitations-panel.js +2 -13
  23. package/dist/admin/invitations-panel.js.map +1 -1
  24. package/dist/admin/mail-test-card.js.map +1 -1
  25. package/dist/admin/reviewer-scope-editor.js +4 -11
  26. package/dist/admin/reviewer-scope-editor.js.map +1 -1
  27. package/dist/admin/role-select.js.map +1 -1
  28. package/dist/admin/user-roster.js +1 -9
  29. package/dist/admin/user-roster.js.map +1 -1
  30. package/dist/auth/accept-invitation.js.map +1 -1
  31. package/dist/auth/auth-errors.js.map +1 -1
  32. package/dist/auth/forgot-password-form.js +23 -31
  33. package/dist/auth/forgot-password-form.js.map +1 -1
  34. package/dist/auth/register-form.js.map +1 -1
  35. package/dist/auth/reset-password-form.js.map +1 -1
  36. package/dist/auth/sign-in-form.js +13 -5
  37. package/dist/auth/sign-in-form.js.map +1 -1
  38. package/dist/auth/verify-email.js +1 -8
  39. package/dist/auth/verify-email.js.map +1 -1
  40. package/dist/billing/billing-banner.js.map +1 -1
  41. package/dist/billing/billing-labels.js.map +1 -1
  42. package/dist/billing/checkout-processing.js.map +1 -1
  43. package/dist/billing/plan-card.js +91 -85
  44. package/dist/billing/plan-card.js.map +1 -1
  45. package/dist/billing/plan-limit-toast.js.map +1 -1
  46. package/dist/billing/plan-limit.js.map +1 -1
  47. package/dist/billing/plan-price.js.map +1 -1
  48. package/dist/billing/plan-switch.js.map +1 -1
  49. package/dist/billing/subscription-actions.js.map +1 -1
  50. package/dist/bin/eifi1-pay-page.mjs +6 -1
  51. package/dist/components/account-chips.js.map +1 -1
  52. package/dist/components/alert-banner.js +1 -5
  53. package/dist/components/alert-banner.js.map +1 -1
  54. package/dist/components/amount-input.js +29 -12
  55. package/dist/components/amount-input.js.map +1 -1
  56. package/dist/components/authed-image.js.map +1 -1
  57. package/dist/components/autocomplete.js.map +1 -1
  58. package/dist/components/bulk-action-bar.js +1 -4
  59. package/dist/components/bulk-action-bar.js.map +1 -1
  60. package/dist/components/button-group.js.map +1 -1
  61. package/dist/components/button-look.js.map +1 -1
  62. package/dist/components/button.js +1 -7
  63. package/dist/components/button.js.map +1 -1
  64. package/dist/components/calculator.js +5 -5
  65. package/dist/components/calculator.js.map +1 -1
  66. package/dist/components/calendar-heatmap.js +4 -10
  67. package/dist/components/calendar-heatmap.js.map +1 -1
  68. package/dist/components/card.js +1 -8
  69. package/dist/components/card.js.map +1 -1
  70. package/dist/components/chart-zoom-core.js +3 -17
  71. package/dist/components/chart-zoom-core.js.map +1 -1
  72. package/dist/components/chart.d.ts +1 -1
  73. package/dist/components/chart.js +4 -22
  74. package/dist/components/chart.js.map +1 -1
  75. package/dist/components/checkbox-group.js +1 -4
  76. package/dist/components/checkbox-group.js.map +1 -1
  77. package/dist/components/chip-input.js +4 -1
  78. package/dist/components/chip-input.js.map +1 -1
  79. package/dist/components/chip.js +10 -5
  80. package/dist/components/chip.js.map +1 -1
  81. package/dist/components/choice-card.js +58 -74
  82. package/dist/components/choice-card.js.map +1 -1
  83. package/dist/components/column-mapper-labels.js.map +1 -1
  84. package/dist/components/column-mapper.js +167 -227
  85. package/dist/components/column-mapper.js.map +1 -1
  86. package/dist/components/combobox-core.js +5 -9
  87. package/dist/components/combobox-core.js.map +1 -1
  88. package/dist/components/combobox.js +1 -4
  89. package/dist/components/combobox.js.map +1 -1
  90. package/dist/components/confirm-dialog.js.map +1 -1
  91. package/dist/components/copy-button.js.map +1 -1
  92. package/dist/components/country-select.d.ts +5 -4
  93. package/dist/components/country-select.js +3 -19
  94. package/dist/components/country-select.js.map +1 -1
  95. package/dist/components/currency-option-list.js +13 -11
  96. package/dist/components/currency-option-list.js.map +1 -1
  97. package/dist/components/currency-select.js +1 -6
  98. package/dist/components/currency-select.js.map +1 -1
  99. package/dist/components/danger-confirm.js.map +1 -1
  100. package/dist/components/data-table-cells.js.map +1 -1
  101. package/dist/components/data-table-column-settings.js.map +1 -1
  102. package/dist/components/data-table-filter-popover.js +2 -18
  103. package/dist/components/data-table-filter-popover.js.map +1 -1
  104. package/dist/components/data-table-filters.js.map +1 -1
  105. package/dist/components/data-table-fit.js +7 -5
  106. package/dist/components/data-table-fit.js.map +1 -1
  107. package/dist/components/data-table-groups.js +3 -1
  108. package/dist/components/data-table-groups.js.map +1 -1
  109. package/dist/components/data-table-head.js +49 -57
  110. package/dist/components/data-table-head.js.map +1 -1
  111. package/dist/components/data-table-mobile.js +31 -44
  112. package/dist/components/data-table-mobile.js.map +1 -1
  113. package/dist/components/data-table-pagination.js.map +1 -1
  114. package/dist/components/data-table-row-actions.js +19 -16
  115. package/dist/components/data-table-row-actions.js.map +1 -1
  116. package/dist/components/data-table-row.js.map +1 -1
  117. package/dist/components/data-table-shared.js.map +1 -1
  118. package/dist/components/data-table-sort.js.map +1 -1
  119. package/dist/components/data-table-virtual.js +4 -1
  120. package/dist/components/data-table-virtual.js.map +1 -1
  121. package/dist/components/data-table.d.ts +8 -0
  122. package/dist/components/data-table.js +30 -39
  123. package/dist/components/data-table.js.map +1 -1
  124. package/dist/components/date-picker.js +1 -6
  125. package/dist/components/date-picker.js.map +1 -1
  126. package/dist/components/date-range-picker.js.map +1 -1
  127. package/dist/components/description-list.js +10 -10
  128. package/dist/components/description-list.js.map +1 -1
  129. package/dist/components/dialog-frame.js +9 -2
  130. package/dist/components/dialog-frame.js.map +1 -1
  131. package/dist/components/disclosure.js +17 -27
  132. package/dist/components/disclosure.js.map +1 -1
  133. package/dist/components/dropdown.js +25 -35
  134. package/dist/components/dropdown.js.map +1 -1
  135. package/dist/components/empty-state.js.map +1 -1
  136. package/dist/components/entity-combobox.js.map +1 -1
  137. package/dist/components/error-boundary.js.map +1 -1
  138. package/dist/components/field-base.js +5 -5
  139. package/dist/components/field-base.js.map +1 -1
  140. package/dist/components/field-parts.d.ts +1 -1
  141. package/dist/components/field-parts.js +10 -14
  142. package/dist/components/field-parts.js.map +1 -1
  143. package/dist/components/field-sync.js +8 -10
  144. package/dist/components/field-sync.js.map +1 -1
  145. package/dist/components/file-button.js.map +1 -1
  146. package/dist/components/file-dropzone.js.map +1 -1
  147. package/dist/components/floating-panel.js +4 -1
  148. package/dist/components/floating-panel.js.map +1 -1
  149. package/dist/components/focus-ring.js.map +1 -1
  150. package/dist/components/form-actions.js.map +1 -1
  151. package/dist/components/grouped-picker.js +11 -12
  152. package/dist/components/grouped-picker.js.map +1 -1
  153. package/dist/components/hover-menu.js +1 -4
  154. package/dist/components/hover-menu.js.map +1 -1
  155. package/dist/components/iban-input-labels.js.map +1 -1
  156. package/dist/components/icon-button.js +4 -1
  157. package/dist/components/icon-button.js.map +1 -1
  158. package/dist/components/icon-picker.js +6 -10
  159. package/dist/components/icon-picker.js.map +1 -1
  160. package/dist/components/image-grid.js +41 -50
  161. package/dist/components/image-grid.js.map +1 -1
  162. package/dist/components/inline-edit-field.js.map +1 -1
  163. package/dist/components/inline-entity-combobox.js +6 -12
  164. package/dist/components/inline-entity-combobox.js.map +1 -1
  165. package/dist/components/input.js +14 -2
  166. package/dist/components/input.js.map +1 -1
  167. package/dist/components/jump-calendar.js +1 -7
  168. package/dist/components/jump-calendar.js.map +1 -1
  169. package/dist/components/legal-labels.js +8 -2
  170. package/dist/components/legal-labels.js.map +1 -1
  171. package/dist/components/legal-page.d.ts +18 -1
  172. package/dist/components/legal-page.js +27 -2
  173. package/dist/components/legal-page.js.map +1 -1
  174. package/dist/components/legal.d.ts +40 -5
  175. package/dist/components/legal.js +41 -5
  176. package/dist/components/legal.js.map +1 -1
  177. package/dist/components/lightbox.js.map +1 -1
  178. package/dist/components/line-items.js +26 -36
  179. package/dist/components/line-items.js.map +1 -1
  180. package/dist/components/list-labels.js +3 -1
  181. package/dist/components/list-labels.js.map +1 -1
  182. package/dist/components/list.d.ts +18 -1
  183. package/dist/components/list.js +54 -13
  184. package/dist/components/list.js.map +1 -1
  185. package/dist/components/measured-grid.js +29 -53
  186. package/dist/components/measured-grid.js.map +1 -1
  187. package/dist/components/menu-item.js.map +1 -1
  188. package/dist/components/mini-calendar.js +13 -31
  189. package/dist/components/mini-calendar.js.map +1 -1
  190. package/dist/components/money-field.js.map +1 -1
  191. package/dist/components/month-picker.js +10 -21
  192. package/dist/components/month-picker.js.map +1 -1
  193. package/dist/components/multi-entity-combobox.js +3 -16
  194. package/dist/components/multi-entity-combobox.js.map +1 -1
  195. package/dist/components/multi-select.js.map +1 -1
  196. package/dist/components/nav-pills.js +10 -1
  197. package/dist/components/nav-pills.js.map +1 -1
  198. package/dist/components/number-field.js.map +1 -1
  199. package/dist/components/number-input.js +1 -7
  200. package/dist/components/number-input.js.map +1 -1
  201. package/dist/components/numpad-sheet.js +1 -4
  202. package/dist/components/numpad-sheet.js.map +1 -1
  203. package/dist/components/one-time-code-input.js +1 -7
  204. package/dist/components/one-time-code-input.js.map +1 -1
  205. package/dist/components/page-contents.js +13 -22
  206. package/dist/components/page-contents.js.map +1 -1
  207. package/dist/components/page-header.js +1 -11
  208. package/dist/components/page-header.js.map +1 -1
  209. package/dist/components/password-strength-labels.js.map +1 -1
  210. package/dist/components/password-strength.js +2 -8
  211. package/dist/components/password-strength.js.map +1 -1
  212. package/dist/components/phone-input.js +42 -57
  213. package/dist/components/phone-input.js.map +1 -1
  214. package/dist/components/picker-sheet.js.map +1 -1
  215. package/dist/components/pie-chart.js +1 -8
  216. package/dist/components/pie-chart.js.map +1 -1
  217. package/dist/components/popover.js.map +1 -1
  218. package/dist/components/progress-bar.js +16 -9
  219. package/dist/components/progress-bar.js.map +1 -1
  220. package/dist/components/qr-code.js +1 -8
  221. package/dist/components/qr-code.js.map +1 -1
  222. package/dist/components/row-actions.js +5 -1
  223. package/dist/components/row-actions.js.map +1 -1
  224. package/dist/components/search-field.js.map +1 -1
  225. package/dist/components/select.js +28 -38
  226. package/dist/components/select.js.map +1 -1
  227. package/dist/components/separator.js +1 -5
  228. package/dist/components/separator.js.map +1 -1
  229. package/dist/components/series-chart-axes.js +4 -1
  230. package/dist/components/series-chart-axes.js.map +1 -1
  231. package/dist/components/series-chart-budget.js.map +1 -1
  232. package/dist/components/series-chart-ticks.js.map +1 -1
  233. package/dist/components/series-chart.js +29 -45
  234. package/dist/components/series-chart.js.map +1 -1
  235. package/dist/components/settings-fields.js +21 -17
  236. package/dist/components/settings-fields.js.map +1 -1
  237. package/dist/components/share-card.js +4 -9
  238. package/dist/components/share-card.js.map +1 -1
  239. package/dist/components/sign-chip.js.map +1 -1
  240. package/dist/components/signature-pad.js +4 -13
  241. package/dist/components/signature-pad.js.map +1 -1
  242. package/dist/components/signed-amount.js +12 -5
  243. package/dist/components/signed-amount.js.map +1 -1
  244. package/dist/components/skeleton.js +2 -17
  245. package/dist/components/skeleton.js.map +1 -1
  246. package/dist/components/slider.js +13 -36
  247. package/dist/components/slider.js.map +1 -1
  248. package/dist/components/sparkline.js.map +1 -1
  249. package/dist/components/stat-tile.js +14 -10
  250. package/dist/components/stat-tile.js.map +1 -1
  251. package/dist/components/swatch-picker.js +14 -4
  252. package/dist/components/swatch-picker.js.map +1 -1
  253. package/dist/components/swipeable-row.d.ts +1 -1
  254. package/dist/components/swipeable-row.js +1 -8
  255. package/dist/components/swipeable-row.js.map +1 -1
  256. package/dist/components/table-skeleton.js +4 -1
  257. package/dist/components/table-skeleton.js.map +1 -1
  258. package/dist/components/table.js +12 -9
  259. package/dist/components/table.js.map +1 -1
  260. package/dist/components/tabs.js +5 -24
  261. package/dist/components/tabs.js.map +1 -1
  262. package/dist/components/text-link.js.map +1 -1
  263. package/dist/components/text.js.map +1 -1
  264. package/dist/components/tile-radio.js +1 -7
  265. package/dist/components/tile-radio.js.map +1 -1
  266. package/dist/components/time-input.js.map +1 -1
  267. package/dist/components/toast.js.map +1 -1
  268. package/dist/components/toggle-group.js +6 -1
  269. package/dist/components/toggle-group.js.map +1 -1
  270. package/dist/components/toggle-legend.js +2 -11
  271. package/dist/components/toggle-legend.js.map +1 -1
  272. package/dist/components/tooltip.js +2 -22
  273. package/dist/components/tooltip.js.map +1 -1
  274. package/dist/components/translation-review-editor.js +1 -4
  275. package/dist/components/translation-review-editor.js.map +1 -1
  276. package/dist/components/translation-review-parts.d.ts +1 -1
  277. package/dist/components/translation-review-parts.js +7 -1
  278. package/dist/components/translation-review-parts.js.map +1 -1
  279. package/dist/components/translation-review.js +18 -7
  280. package/dist/components/translation-review.js.map +1 -1
  281. package/dist/components/tree-view.js +14 -10
  282. package/dist/components/tree-view.js.map +1 -1
  283. package/dist/components/treemap.js +1 -13
  284. package/dist/components/treemap.js.map +1 -1
  285. package/dist/components/trigger-aria.js.map +1 -1
  286. package/dist/components/use-table-state.js +14 -11
  287. package/dist/components/use-table-state.js.map +1 -1
  288. package/dist/components/user-avatar.js +3 -26
  289. package/dist/components/user-avatar.js.map +1 -1
  290. package/dist/demo/demo-start.js +8 -4
  291. package/dist/demo/demo-start.js.map +1 -1
  292. package/dist/eslint/index.js +1 -1
  293. package/dist/feedback/feedback-attachment-labels.js.map +1 -1
  294. package/dist/feedback/feedback-attachment.js +1 -8
  295. package/dist/feedback/feedback-attachment.js.map +1 -1
  296. package/dist/feedback/feedback-capture.d.ts +1 -1
  297. package/dist/feedback/feedback-capture.js +3 -1
  298. package/dist/feedback/feedback-capture.js.map +1 -1
  299. package/dist/feedback/feedback-comment-thread.js +27 -13
  300. package/dist/feedback/feedback-comment-thread.js.map +1 -1
  301. package/dist/feedback/feedback-context.js +1 -4
  302. package/dist/feedback/feedback-context.js.map +1 -1
  303. package/dist/feedback/feedback-dialog.js.map +1 -1
  304. package/dist/feedback/feedback-inbox.js.map +1 -1
  305. package/dist/feedback/feedback-public-list.js +7 -1
  306. package/dist/feedback/feedback-public-list.js.map +1 -1
  307. package/dist/feedback/feedback-record.js +1 -5
  308. package/dist/feedback/feedback-record.js.map +1 -1
  309. package/dist/feedback/feedback-replies.js +25 -10
  310. package/dist/feedback/feedback-replies.js.map +1 -1
  311. package/dist/feedback/feedback-row-detail.js.map +1 -1
  312. package/dist/feedback/feedback-status-undo.js.map +1 -1
  313. package/dist/feedback/feedback-submit-dialog.js.map +1 -1
  314. package/dist/feedback/feedback-table.d.ts +3 -1
  315. package/dist/feedback/feedback-table.js +22 -5
  316. package/dist/feedback/feedback-table.js.map +1 -1
  317. package/dist/feedback/feedback-thread.js +2 -13
  318. package/dist/feedback/feedback-thread.js.map +1 -1
  319. package/dist/feedback/feedback-vocabulary.js.map +1 -1
  320. package/dist/feedback/feedback-vote-button.js.map +1 -1
  321. package/dist/hooks/use-anchored-rect.js.map +1 -1
  322. package/dist/hooks/use-document-title.js.map +1 -1
  323. package/dist/hooks/use-file-drop.js.map +1 -1
  324. package/dist/hooks/use-file-picker-labels.js.map +1 -1
  325. package/dist/hooks/use-file-picker.js.map +1 -1
  326. package/dist/hooks/use-focus-trap.js.map +1 -1
  327. package/dist/hooks/use-overlay-history.js +10 -5
  328. package/dist/hooks/use-overlay-history.js.map +1 -1
  329. package/dist/hooks/use-row-swipe.d.ts +1 -1
  330. package/dist/hooks/use-row-swipe.js +1 -6
  331. package/dist/hooks/use-row-swipe.js.map +1 -1
  332. package/dist/i18n/defaults.js +1 -4
  333. package/dist/i18n/defaults.js.map +1 -1
  334. package/dist/i18n/german.js +15 -4
  335. package/dist/i18n/german.js.map +1 -1
  336. package/dist/i18n/kit-labels.js +2 -8
  337. package/dist/i18n/kit-labels.js.map +1 -1
  338. package/dist/i18n/languages.js.map +1 -1
  339. package/dist/i18n/locales/en.js +19 -4
  340. package/dist/i18n/locales/en.js.map +2 -2
  341. package/dist/i18n/locales/es.js +15 -4
  342. package/dist/i18n/locales/es.js.map +1 -1
  343. package/dist/i18n/locales/fr.js +15 -4
  344. package/dist/i18n/locales/fr.js.map +1 -1
  345. package/dist/i18n/locales/hu.js +15 -4
  346. package/dist/i18n/locales/hu.js.map +1 -1
  347. package/dist/i18n/locales/it.js +15 -4
  348. package/dist/i18n/locales/it.js.map +1 -1
  349. package/dist/i18n/locales/zh.js +11 -3
  350. package/dist/i18n/locales/zh.js.map +1 -1
  351. package/dist/i18n/plurals.js.map +1 -1
  352. package/dist/i18n/review.js +15 -7
  353. package/dist/i18n/review.js.map +1 -1
  354. package/dist/i18n/shared-labels.js.map +1 -1
  355. package/dist/index.d.ts +17 -17
  356. package/dist/index.js +40 -23
  357. package/dist/index.js.map +1 -1
  358. package/dist/landing/access.js +1 -4
  359. package/dist/landing/access.js.map +1 -1
  360. package/dist/landing/landing-sections.js +35 -38
  361. package/dist/landing/landing-sections.js.map +1 -1
  362. package/dist/landing/page-seo.js.map +1 -1
  363. package/dist/lib/calc.js.map +1 -1
  364. package/dist/lib/clipboard-minus.js.map +1 -1
  365. package/dist/lib/dates.js.map +1 -1
  366. package/dist/lib/decimal-marks.js.map +1 -1
  367. package/dist/lib/device-settings.js +2 -1
  368. package/dist/lib/device-settings.js.map +1 -1
  369. package/dist/lib/direction.js.map +1 -1
  370. package/dist/lib/iban.js.map +1 -1
  371. package/dist/lib/logger.js +1 -5
  372. package/dist/lib/logger.js.map +1 -1
  373. package/dist/lib/person-name.js.map +1 -1
  374. package/dist/lib/phone.js.map +1 -1
  375. package/dist/lib/qr-encode.js +344 -8
  376. package/dist/lib/qr-encode.js.map +1 -1
  377. package/dist/lib/session-refresh.js.map +1 -1
  378. package/dist/lib/table-text.js +15 -3
  379. package/dist/lib/table-text.js.map +1 -1
  380. package/dist/lib/text-match.d.ts +20 -0
  381. package/dist/lib/text-match.js +11 -1
  382. package/dist/lib/text-match.js.map +1 -1
  383. package/dist/lib/translation-review.js.map +1 -1
  384. package/dist/notifications/notification-inbox.js +63 -44
  385. package/dist/notifications/notification-inbox.js.map +1 -1
  386. package/dist/notifications/notification-parts.js.map +1 -1
  387. package/dist/notifications/notification-types-setting.js.map +1 -1
  388. package/dist/notifications/notifications-labels.js.map +1 -1
  389. package/dist/notifications/push-device-setting.js +6 -1
  390. package/dist/notifications/push-device-setting.js.map +1 -1
  391. package/dist/notifications/push-devices-setting.js.map +1 -1
  392. package/dist/notifications/push-worker.js.map +1 -1
  393. package/dist/notifications/quiet-hours-setting.js.map +1 -1
  394. package/dist/notifications/use-push-device.js +4 -1
  395. package/dist/notifications/use-push-device.js.map +1 -1
  396. package/dist/offline/pwa-update-prompt.d.ts +1 -1
  397. package/dist/offline/pwa-update-prompt.js +7 -1
  398. package/dist/offline/pwa-update-prompt.js.map +1 -1
  399. package/dist/offline/query-persistence.js.map +1 -1
  400. package/dist/offline.d.ts +1 -1
  401. package/dist/offline.js +6 -1
  402. package/dist/offline.js.map +1 -1
  403. package/dist/pay/pay.css +8 -1
  404. package/dist/rhf/fields.d.ts +1 -2
  405. package/dist/rhf/fields.js +1 -10
  406. package/dist/rhf/fields.js.map +1 -1
  407. package/dist/rhf/form-core.js +1 -4
  408. package/dist/rhf/form-core.js.map +1 -1
  409. package/dist/rhf/line-items.js.map +1 -1
  410. package/dist/rhf/use-rhf-wizard-step.js.map +1 -1
  411. package/dist/search/command-palette.js +71 -62
  412. package/dist/search/command-palette.js.map +1 -1
  413. package/dist/search/global-search.js +34 -5
  414. package/dist/search/global-search.js.map +1 -1
  415. package/dist/search/search-index.js.map +1 -1
  416. package/dist/settings/device-reset-setting.js +1 -6
  417. package/dist/settings/device-reset-setting.js.map +1 -1
  418. package/dist/settings/settings-heading.js.map +1 -1
  419. package/dist/settings/settings-layout.js +9 -20
  420. package/dist/settings/settings-layout.js.map +1 -1
  421. package/dist/settings/use-settings-focus.d.ts +7 -0
  422. package/dist/settings/use-settings-focus.js +2 -0
  423. package/dist/settings/use-settings-focus.js.map +1 -1
  424. package/dist/settings/use-settings-route.js.map +1 -1
  425. package/dist/shell/app-shell.js +62 -31
  426. package/dist/shell/app-shell.js.map +1 -1
  427. package/dist/shell/auth-layout.js +1 -10
  428. package/dist/shell/auth-layout.js.map +1 -1
  429. package/dist/shell/dev-menu.d.ts +5 -0
  430. package/dist/shell/dev-menu.js +14 -7
  431. package/dist/shell/dev-menu.js.map +1 -1
  432. package/dist/shell/option-switcher-menu.js.map +1 -1
  433. package/dist/shell/sync-status-indicator.js +7 -6
  434. package/dist/shell/sync-status-indicator.js.map +1 -1
  435. package/dist/shell/top-bar-parts-labels.js.map +1 -1
  436. package/dist/shell/topbar-action-menu.d.ts +14 -1
  437. package/dist/shell/topbar-action-menu.js +85 -34
  438. package/dist/shell/topbar-action-menu.js.map +1 -1
  439. package/dist/shell/topbar-controls.js +1 -10
  440. package/dist/shell/topbar-controls.js.map +1 -1
  441. package/dist/shell/tour-menu.js +9 -1
  442. package/dist/shell/tour-menu.js.map +1 -1
  443. package/dist/shell.d.ts +1 -1
  444. package/dist/shell.js +2 -1
  445. package/dist/shell.js.map +1 -1
  446. package/dist/sync/db.js.map +1 -1
  447. package/dist/sync/engine.js +24 -6
  448. package/dist/sync/engine.js.map +1 -1
  449. package/dist/sync.d.ts +2 -2
  450. package/dist/sync.js +7 -1
  451. package/dist/sync.js.map +1 -1
  452. package/dist/testing/css-variables.js.map +1 -1
  453. package/dist/testing/index.d.ts +1 -1
  454. package/dist/testing/index.js +1 -3
  455. package/dist/testing/index.js.map +1 -1
  456. package/dist/testing/react.js.map +1 -1
  457. package/dist/testing/viewport.js +7 -4
  458. package/dist/testing/viewport.js.map +1 -1
  459. package/dist/theme/contrast-tokens.js +13 -2
  460. package/dist/theme/contrast-tokens.js.map +1 -1
  461. package/dist/theme/palette-derive.d.ts +1 -1
  462. package/dist/theme/palette-derive.js +18 -29
  463. package/dist/theme/palette-derive.js.map +1 -1
  464. package/dist/theme/palette-presets.js.map +1 -1
  465. package/dist/theme/palette-store.js.map +1 -1
  466. package/dist/theme/text-size.js.map +1 -1
  467. package/dist/theme/theme-store.js +1 -3
  468. package/dist/theme/theme-store.js.map +1 -1
  469. package/dist/tour/tour-catalogue.js.map +1 -1
  470. package/dist/tour/tour-dock.js +5 -1
  471. package/dist/tour/tour-dock.js.map +1 -1
  472. package/dist/tour/tour-engine.js +1 -4
  473. package/dist/tour/tour-engine.js.map +1 -1
  474. package/dist/tour/tour.js +21 -12
  475. package/dist/tour/tour.js.map +1 -1
  476. package/dist/tour/use-tour-progress.js.map +1 -1
  477. package/dist/tour/use-tour-url-sync.js.map +1 -1
  478. package/dist/wizard/stepper-nav.js +3 -24
  479. package/dist/wizard/stepper-nav.js.map +1 -1
  480. package/dist/wizard/types.js.map +1 -1
  481. package/dist/wizard/use-wizard.js +24 -28
  482. package/dist/wizard/use-wizard.js.map +1 -1
  483. package/dist/wizard/validation.js.map +1 -1
  484. package/dist/wizard/wizard-context.js.map +1 -1
  485. package/dist/wizard/wizard-step.d.ts +1 -1
  486. package/dist/wizard/wizard-step.js +1 -8
  487. package/dist/wizard/wizard-step.js.map +1 -1
  488. package/dist/wizard/wizard-summary.js.map +1 -1
  489. package/package.json +5 -2
  490. package/src/account/account-settings-labels.ts +1 -2
  491. package/src/account/account-settings.tsx +11 -17
  492. package/src/account/delete-account-setting.tsx +1 -6
  493. package/src/account/email-change-setting-labels.ts +1 -2
  494. package/src/account/email-change-setting.tsx +3 -1
  495. package/src/account/passkeys-setting.tsx +1 -3
  496. package/src/account/sessions-setting.tsx +4 -2
  497. package/src/admin/admin-action-confirm.tsx +4 -7
  498. package/src/admin/admin-action-log.tsx +29 -29
  499. package/src/admin/admin-area-labels.ts +4 -1
  500. package/src/admin/admin-overview.tsx +8 -2
  501. package/src/admin/admin-sections.tsx +3 -1
  502. package/src/admin/admin-tool-links.tsx +7 -1
  503. package/src/admin/invitations-panel.tsx +5 -11
  504. package/src/admin/mail-test-card.tsx +1 -2
  505. package/src/admin/reviewer-scope-editor.tsx +4 -9
  506. package/src/admin/role-select.tsx +4 -2
  507. package/src/admin/user-roster.tsx +2 -11
  508. package/src/auth/accept-invitation.tsx +1 -7
  509. package/src/auth/auth-errors.ts +1 -6
  510. package/src/auth/forgot-password-form.tsx +2 -7
  511. package/src/auth/register-form.tsx +7 -8
  512. package/src/auth/reset-password-form.tsx +2 -5
  513. package/src/auth/sign-in-form.tsx +15 -14
  514. package/src/auth/verify-email.tsx +2 -7
  515. package/src/billing/billing-banner.tsx +3 -7
  516. package/src/billing/billing-labels.ts +6 -4
  517. package/src/billing/checkout-processing.ts +0 -1
  518. package/src/billing/plan-card.tsx +9 -8
  519. package/src/billing/plan-limit-toast.tsx +1 -2
  520. package/src/billing/plan-limit.ts +1 -2
  521. package/src/billing/plan-price.ts +1 -4
  522. package/src/billing/plan-switch.tsx +1 -2
  523. package/src/billing/subscription-actions.tsx +5 -2
  524. package/src/components/account-chips.tsx +1 -7
  525. package/src/components/alert-banner.tsx +2 -8
  526. package/src/components/amount-input.tsx +206 -178
  527. package/src/components/authed-image.tsx +7 -4
  528. package/src/components/autocomplete.tsx +7 -9
  529. package/src/components/bulk-action-bar.tsx +2 -7
  530. package/src/components/button-group.tsx +1 -2
  531. package/src/components/button-look.ts +6 -17
  532. package/src/components/button.tsx +1 -4
  533. package/src/components/calculator.tsx +6 -9
  534. package/src/components/calendar-heatmap.tsx +5 -10
  535. package/src/components/card.tsx +9 -13
  536. package/src/components/chart-zoom-core.tsx +6 -33
  537. package/src/components/chart.tsx +8 -31
  538. package/src/components/checkbox-group.tsx +1 -4
  539. package/src/components/chip-input.tsx +6 -6
  540. package/src/components/chip.tsx +14 -26
  541. package/src/components/choice-card.tsx +4 -18
  542. package/src/components/column-mapper-labels.ts +3 -10
  543. package/src/components/column-mapper.tsx +33 -122
  544. package/src/components/combobox-core.tsx +17 -47
  545. package/src/components/combobox.tsx +2 -6
  546. package/src/components/confirm-dialog.tsx +1 -3
  547. package/src/components/copy-button.tsx +2 -4
  548. package/src/components/country-select.tsx +9 -21
  549. package/src/components/currency-option-list.tsx +16 -18
  550. package/src/components/currency-select.tsx +2 -7
  551. package/src/components/danger-confirm.tsx +8 -9
  552. package/src/components/data-table-cells.tsx +1 -2
  553. package/src/components/data-table-column-settings.tsx +1 -3
  554. package/src/components/data-table-filter-popover.tsx +5 -19
  555. package/src/components/data-table-filters.ts +1 -6
  556. package/src/components/data-table-fit.ts +7 -7
  557. package/src/components/data-table-groups.tsx +3 -1
  558. package/src/components/data-table-head.tsx +32 -46
  559. package/src/components/data-table-mobile.tsx +99 -108
  560. package/src/components/data-table-pagination.tsx +2 -6
  561. package/src/components/data-table-row-actions.tsx +25 -24
  562. package/src/components/data-table-row.tsx +16 -17
  563. package/src/components/data-table-shared.tsx +10 -16
  564. package/src/components/data-table-sort.ts +1 -2
  565. package/src/components/data-table-virtual.ts +9 -4
  566. package/src/components/data-table.tsx +497 -501
  567. package/src/components/date-picker.tsx +1 -7
  568. package/src/components/date-range-picker.tsx +3 -13
  569. package/src/components/description-list.tsx +7 -13
  570. package/src/components/dialog-frame.tsx +12 -3
  571. package/src/components/disclosure.tsx +8 -12
  572. package/src/components/dropdown.tsx +3 -11
  573. package/src/components/empty-state.tsx +1 -3
  574. package/src/components/entity-combobox.tsx +2 -6
  575. package/src/components/error-boundary.tsx +7 -7
  576. package/src/components/field-base.tsx +8 -14
  577. package/src/components/field-parts.tsx +12 -23
  578. package/src/components/field-sync.tsx +7 -11
  579. package/src/components/file-button.tsx +7 -3
  580. package/src/components/file-dropzone.tsx +7 -12
  581. package/src/components/floating-panel.tsx +44 -51
  582. package/src/components/focus-ring.ts +1 -2
  583. package/src/components/form-actions.tsx +1 -4
  584. package/src/components/grouped-picker.tsx +21 -16
  585. package/src/components/hover-menu.tsx +1 -4
  586. package/src/components/iban-input-labels.ts +1 -2
  587. package/src/components/icon-button.tsx +46 -48
  588. package/src/components/icon-picker.tsx +9 -20
  589. package/src/components/image-grid.tsx +1 -6
  590. package/src/components/inline-edit-field.tsx +1 -5
  591. package/src/components/inline-entity-combobox.tsx +11 -25
  592. package/src/components/input.tsx +14 -2
  593. package/src/components/jump-calendar.tsx +2 -6
  594. package/src/components/legal-labels.ts +8 -3
  595. package/src/components/legal-page.tsx +56 -6
  596. package/src/components/legal.tsx +83 -10
  597. package/src/components/lightbox.tsx +1 -3
  598. package/src/components/line-items.tsx +7 -15
  599. package/src/components/list-labels.ts +2 -0
  600. package/src/components/list.tsx +81 -27
  601. package/src/components/measured-grid.tsx +8 -30
  602. package/src/components/menu-item.tsx +1 -3
  603. package/src/components/mini-calendar.tsx +129 -159
  604. package/src/components/money-field.tsx +4 -2
  605. package/src/components/month-picker.tsx +14 -21
  606. package/src/components/multi-entity-combobox.tsx +6 -26
  607. package/src/components/multi-select.tsx +5 -9
  608. package/src/components/nav-pills.tsx +10 -2
  609. package/src/components/number-field.tsx +18 -15
  610. package/src/components/number-input.tsx +3 -19
  611. package/src/components/numpad-sheet.tsx +9 -13
  612. package/src/components/one-time-code-input.tsx +6 -11
  613. package/src/components/page-contents.tsx +2 -9
  614. package/src/components/page-header.tsx +5 -10
  615. package/src/components/password-strength-labels.ts +1 -2
  616. package/src/components/password-strength.tsx +6 -9
  617. package/src/components/phone-input.tsx +2 -13
  618. package/src/components/picker-sheet.tsx +2 -5
  619. package/src/components/pie-chart.tsx +6 -12
  620. package/src/components/popover.tsx +2 -1
  621. package/src/components/progress-bar.tsx +16 -25
  622. package/src/components/qr-code.tsx +2 -9
  623. package/src/components/row-actions.tsx +9 -1
  624. package/src/components/search-field.tsx +4 -5
  625. package/src/components/select.tsx +2 -10
  626. package/src/components/separator.tsx +1 -5
  627. package/src/components/series-chart-axes.ts +5 -5
  628. package/src/components/series-chart-budget.ts +1 -4
  629. package/src/components/series-chart-ticks.ts +1 -4
  630. package/src/components/series-chart.tsx +43 -83
  631. package/src/components/settings-fields.tsx +20 -15
  632. package/src/components/share-card.tsx +6 -14
  633. package/src/components/sign-chip.tsx +16 -16
  634. package/src/components/signature-pad.tsx +21 -13
  635. package/src/components/signed-amount.tsx +6 -14
  636. package/src/components/skeleton.tsx +2 -13
  637. package/src/components/slider.tsx +9 -20
  638. package/src/components/sparkline.tsx +2 -13
  639. package/src/components/stat-tile.tsx +13 -24
  640. package/src/components/swatch-picker.tsx +8 -3
  641. package/src/components/swipeable-row.tsx +2 -11
  642. package/src/components/table-skeleton.tsx +4 -1
  643. package/src/components/table.tsx +12 -8
  644. package/src/components/tabs.tsx +24 -39
  645. package/src/components/text-link.tsx +6 -6
  646. package/src/components/text.tsx +1 -2
  647. package/src/components/tile-radio.tsx +6 -19
  648. package/src/components/time-input.tsx +4 -5
  649. package/src/components/toast.tsx +3 -12
  650. package/src/components/toggle-group.tsx +9 -9
  651. package/src/components/toggle-legend.tsx +4 -16
  652. package/src/components/tooltip.tsx +9 -48
  653. package/src/components/translation-review-editor.tsx +4 -4
  654. package/src/components/translation-review-parts.tsx +7 -1
  655. package/src/components/translation-review.tsx +15 -16
  656. package/src/components/tree-view.tsx +17 -20
  657. package/src/components/treemap.tsx +3 -15
  658. package/src/components/trigger-aria.ts +1 -4
  659. package/src/components/use-table-state.ts +16 -17
  660. package/src/components/user-avatar.tsx +4 -21
  661. package/src/demo/demo-start.tsx +8 -4
  662. package/src/feedback/feedback-attachment-labels.ts +2 -1
  663. package/src/feedback/feedback-attachment.tsx +16 -29
  664. package/src/feedback/feedback-capture.ts +3 -1
  665. package/src/feedback/feedback-comment-thread.tsx +9 -6
  666. package/src/feedback/feedback-context.tsx +1 -4
  667. package/src/feedback/feedback-dialog.tsx +3 -4
  668. package/src/feedback/feedback-inbox.tsx +3 -9
  669. package/src/feedback/feedback-public-list.tsx +7 -1
  670. package/src/feedback/feedback-record.ts +6 -14
  671. package/src/feedback/feedback-replies.tsx +10 -5
  672. package/src/feedback/feedback-row-detail.tsx +2 -5
  673. package/src/feedback/feedback-status-undo.ts +1 -4
  674. package/src/feedback/feedback-submit-dialog.tsx +4 -4
  675. package/src/feedback/feedback-table.tsx +29 -9
  676. package/src/feedback/feedback-thread.tsx +4 -16
  677. package/src/feedback/feedback-vocabulary.ts +72 -82
  678. package/src/feedback/feedback-vote-button.tsx +9 -8
  679. package/src/hooks/use-anchored-rect.ts +1 -4
  680. package/src/hooks/use-document-title.ts +3 -1
  681. package/src/hooks/use-file-drop.ts +1 -3
  682. package/src/hooks/use-file-picker-labels.ts +1 -2
  683. package/src/hooks/use-file-picker.tsx +1 -5
  684. package/src/hooks/use-focus-trap.ts +1 -2
  685. package/src/hooks/use-overlay-history.ts +10 -5
  686. package/src/hooks/use-row-swipe.ts +1 -6
  687. package/src/i18n/defaults.ts +1 -4
  688. package/src/i18n/german.ts +42 -50
  689. package/src/i18n/kit-labels.tsx +5 -20
  690. package/src/i18n/languages.ts +2 -8
  691. package/src/i18n/locales/en.ts +15 -31
  692. package/src/i18n/locales/es.ts +44 -50
  693. package/src/i18n/locales/fr.ts +43 -52
  694. package/src/i18n/locales/hu.ts +35 -38
  695. package/src/i18n/locales/it.ts +44 -53
  696. package/src/i18n/locales/zh.ts +23 -33
  697. package/src/i18n/plurals.ts +4 -1
  698. package/src/i18n/review.ts +20 -7
  699. package/src/i18n/shared-labels.ts +1 -2
  700. package/src/index.ts +107 -32
  701. package/src/landing/access.ts +2 -7
  702. package/src/landing/landing-sections.tsx +14 -15
  703. package/src/landing/page-seo.ts +1 -3
  704. package/src/lib/calc.ts +4 -1
  705. package/src/lib/clipboard-minus.ts +4 -1
  706. package/src/lib/dates.ts +2 -10
  707. package/src/lib/decimal-marks.ts +1 -3
  708. package/src/lib/device-settings.ts +2 -1
  709. package/src/lib/direction.ts +1 -3
  710. package/src/lib/iban.ts +89 -9
  711. package/src/lib/logger.ts +1 -5
  712. package/src/lib/person-name.ts +1 -3
  713. package/src/lib/phone.ts +5 -8
  714. package/src/lib/qr-encode.ts +32 -8
  715. package/src/lib/session-refresh.ts +5 -6
  716. package/src/lib/table-text.ts +24 -6
  717. package/src/lib/text-match.ts +43 -1
  718. package/src/lib/translation-review.ts +1 -3
  719. package/src/notifications/notification-inbox.tsx +17 -4
  720. package/src/notifications/notification-parts.tsx +1 -2
  721. package/src/notifications/notification-types-setting.tsx +19 -18
  722. package/src/notifications/notifications-labels.ts +1 -2
  723. package/src/notifications/push-device-setting.tsx +7 -1
  724. package/src/notifications/push-devices-setting.tsx +7 -3
  725. package/src/notifications/push-worker.ts +10 -2
  726. package/src/notifications/quiet-hours-setting.tsx +4 -1
  727. package/src/notifications/use-push-device.ts +4 -1
  728. package/src/offline/pwa-update-prompt.tsx +7 -1
  729. package/src/offline/query-persistence.ts +9 -6
  730. package/src/offline.ts +6 -1
  731. package/src/rhf/fields.tsx +50 -19
  732. package/src/rhf/form-core.tsx +2 -6
  733. package/src/rhf/line-items.tsx +5 -7
  734. package/src/rhf/use-rhf-wizard-step.ts +3 -12
  735. package/src/search/command-palette.tsx +15 -23
  736. package/src/search/global-search.tsx +38 -8
  737. package/src/search/search-index.ts +5 -1
  738. package/src/settings/device-reset-setting.tsx +5 -8
  739. package/src/settings/settings-heading.tsx +3 -1
  740. package/src/settings/settings-layout.tsx +6 -13
  741. package/src/settings/use-settings-focus.ts +8 -0
  742. package/src/settings/use-settings-route.ts +4 -3
  743. package/src/shell/app-shell.tsx +48 -24
  744. package/src/shell/auth-layout.tsx +1 -6
  745. package/src/shell/dev-menu.tsx +18 -6
  746. package/src/shell/option-switcher-menu.tsx +1 -3
  747. package/src/shell/sync-status-indicator.tsx +14 -12
  748. package/src/shell/top-bar-parts-labels.ts +1 -3
  749. package/src/shell/topbar-action-menu.tsx +130 -45
  750. package/src/shell/topbar-controls.tsx +5 -19
  751. package/src/shell/tour-menu.tsx +9 -1
  752. package/src/shell.ts +1 -1
  753. package/src/sync/db.ts +5 -1
  754. package/src/sync/engine.ts +44 -12
  755. package/src/sync.ts +16 -2
  756. package/src/testing/css-variables.ts +1 -2
  757. package/src/testing/index.ts +1 -6
  758. package/src/testing/react.ts +1 -2
  759. package/src/testing/viewport.ts +9 -9
  760. package/src/theme/contrast-tokens.ts +13 -2
  761. package/src/theme/palette-derive.ts +24 -50
  762. package/src/theme/palette-presets.ts +0 -1
  763. package/src/theme/palette-store.ts +1 -4
  764. package/src/theme/text-size.ts +1 -1
  765. package/src/theme/theme-store.ts +2 -6
  766. package/src/tour/tour-catalogue.tsx +4 -2
  767. package/src/tour/tour-dock.ts +5 -1
  768. package/src/tour/tour-engine.ts +2 -6
  769. package/src/tour/tour.tsx +28 -12
  770. package/src/tour/use-tour-progress.ts +8 -2
  771. package/src/tour/use-tour-url-sync.ts +3 -1
  772. package/src/vite-env.d.ts +1 -4
  773. package/src/wizard/stepper-nav.tsx +10 -35
  774. package/src/wizard/types.ts +1 -4
  775. package/src/wizard/use-wizard.ts +28 -43
  776. package/src/wizard/validation.ts +1 -5
  777. package/src/wizard/wizard-context.tsx +2 -6
  778. package/src/wizard/wizard-step.tsx +1 -8
  779. package/src/wizard/wizard-summary.tsx +2 -6
  780. package/tokens.css +393 -152
@@ -6,14 +6,7 @@ import { hasContent } from "../lib/presence";
6
6
  import { FOCUS_RING, FOCUS_RING_WIDTH } from "./focus-ring";
7
7
  import { horizontalStep } from "../lib/direction";
8
8
  import { useAnnounce } from "../hooks/use-announce";
9
- import {
10
- addMonthsClamped,
11
- localeWeekStart,
12
- monthKey,
13
- parseIsoDate,
14
- sameYmd,
15
- toLocalIso,
16
- } from "../lib/dates";
9
+ import { addMonthsClamped, localeWeekStart, monthKey, parseIsoDate, sameYmd, toLocalIso } from "../lib/dates";
17
10
  import { useKitLabels, useKitLocale, useKitWeekStart, type LabelOverride } from "../i18n/kit-labels";
18
11
  import { DEFAULT_MINI_CALENDAR_LABELS } from "./mini-calendar-labels";
19
12
 
@@ -514,41 +507,39 @@ export function MiniCalendar({
514
507
  {monthLabel}
515
508
  </div>
516
509
  ) : (
517
- <div className={cn("flex items-center justify-between", lg ? "pb-2" : "pb-1")}>
518
- <button
519
- type="button"
520
- onClick={() => moveMonth(-1)}
521
- aria-label={labels.previousMonth}
522
- className="rounded p-1 text-muted hover:bg-hover"
523
- >
524
- {/* Mirrored in RTL: "previous" points to the reading START, which is right. */}
525
- <ChevronLeft className="size-4 rtl:-scale-x-100" aria-hidden />
526
- </button>
527
- {/* Named by this element rather than by a string of its own, and `aria-live`
510
+ <div className={cn("flex items-center justify-between", lg ? "pb-2" : "pb-1")}>
511
+ <button
512
+ type="button"
513
+ onClick={() => moveMonth(-1)}
514
+ aria-label={labels.previousMonth}
515
+ className="rounded p-1 text-muted hover:bg-hover"
516
+ >
517
+ {/* Mirrored in RTL: "previous" points to the reading START, which is right. */}
518
+ <ChevronLeft className="size-4 rtl:-scale-x-100" aria-hidden />
519
+ </button>
520
+ {/* Named by this element rather than by a string of its own, and `aria-live`
528
521
  so paging months says which month you have landed on — the caption is the
529
522
  only thing on screen that changes when the grid moves, and the user
530
523
  pressing the arrow is not inside the grid to hear the cells change. */}
531
- <div
532
- id={monthId}
533
- aria-live="polite"
534
- className={cn(
535
- "capitalize",
536
- lg
537
- ? "text-base font-semibold text-primary"
538
- : "text-xs font-medium text-secondary",
539
- )}
540
- >
541
- {monthLabel}
524
+ <div
525
+ id={monthId}
526
+ aria-live="polite"
527
+ className={cn(
528
+ "capitalize",
529
+ lg ? "text-base font-semibold text-primary" : "text-xs font-medium text-secondary",
530
+ )}
531
+ >
532
+ {monthLabel}
533
+ </div>
534
+ <button
535
+ type="button"
536
+ onClick={() => moveMonth(1)}
537
+ aria-label={labels.nextMonth}
538
+ className="rounded p-1 text-muted hover:bg-hover"
539
+ >
540
+ <ChevronRight className="size-4 rtl:-scale-x-100" aria-hidden />
541
+ </button>
542
542
  </div>
543
- <button
544
- type="button"
545
- onClick={() => moveMonth(1)}
546
- aria-label={labels.nextMonth}
547
- className="rounded p-1 text-muted hover:bg-hover"
548
- >
549
- <ChevronRight className="size-4 rtl:-scale-x-100" aria-hidden />
550
- </button>
551
- </div>
552
543
  )}
553
544
  <div
554
545
  ref={gridRef}
@@ -559,27 +550,18 @@ export function MiniCalendar({
559
550
  "grid",
560
551
  // The month view is RULED: a 1px gap over a border-coloured ground draws the
561
552
  // lines between the cells, the way a wall calendar does.
562
- lg
563
- ? "gap-px overflow-hidden rounded-lg border border-subtle bg-[var(--border)]"
564
- : "gap-y-0.5",
553
+ lg ? "gap-px overflow-hidden rounded-lg border border-subtle bg-[var(--border)]" : "gap-y-0.5",
565
554
  )}
566
555
  >
567
556
  <div
568
557
  role="row"
569
558
  className={cn(
570
559
  "grid grid-cols-7 text-center font-medium",
571
- lg
572
- ? "gap-px text-xs text-muted"
573
- : "text-micro uppercase text-placeholder",
560
+ lg ? "gap-px text-xs text-muted" : "text-micro uppercase text-placeholder",
574
561
  )}
575
562
  >
576
563
  {weekdayLabels.map((w, i) => (
577
- <div
578
- key={i}
579
- role="columnheader"
580
- aria-label={w.long}
581
- className={lg ? "bg-surface py-2" : "py-0.5"}
582
- >
564
+ <div key={i} role="columnheader" aria-label={w.long} className={lg ? "bg-surface py-2" : "py-0.5"}>
583
565
  {lg ? w.short : w.narrow}
584
566
  </div>
585
567
  ))}
@@ -592,13 +574,7 @@ export function MiniCalendar({
592
574
  // The padding cells still have to BE cells, or the rows are ragged and
593
575
  // a screen reader's "column 3" stops meaning Wednesday.
594
576
  if (!d) {
595
- return (
596
- <div
597
- key={di}
598
- role="gridcell"
599
- className={lg ? cn(LG_CELL_HEIGHT, "bg-surface-2") : "h-8"}
600
- />
601
- );
577
+ return <div key={di} role="gridcell" className={lg ? cn(LG_CELL_HEIGHT, "bg-surface-2") : "h-8"} />;
602
578
  }
603
579
  const iso = toLocalIso(d);
604
580
  const disabled = isDisabled(d);
@@ -678,8 +654,7 @@ export function MiniCalendar({
678
654
  // or the month breaks it. Only when both ends exist and differ — a lone
679
655
  // start is a dot, not a band of one. The month view tints whole cells
680
656
  // instead, so it has no band.
681
- const banded =
682
- !lg && hasBand && !disabled && (isStart || isEnd || isInRange);
657
+ const banded = !lg && hasBand && !disabled && (isStart || isEnd || isInRange);
683
658
  const lastOfMonth = d.getDate() === daysInMonth(d);
684
659
  const band = banded
685
660
  ? cn(
@@ -695,109 +670,104 @@ export function MiniCalendar({
695
670
  <div
696
671
  key={di}
697
672
  role="none"
698
- className={cn(
699
- "relative flex",
700
- lg ? "min-w-0" : "h-8 items-center justify-center",
701
- )}
702
- >
703
- {band && <span aria-hidden className={band} />}
704
- <button
705
- key={di}
706
- type="button"
707
- role="gridcell"
708
- data-iso={iso}
709
- // The roving tabindex: ONE tab stop for the whole month. Every day
710
- // being tabbable meant 31 stops between a date field and the next
711
- // control, which is the same reason the pattern exists.
712
- tabIndex={isActive ? 0 : -1}
713
- aria-label={labels.day(formatDay(d))}
714
- // The custom content is the day's DESCRIPTION: `aria-label` replaces
715
- // the button's text as its name, so without this link a screen
716
- // reader would hear the date and never the events drawn under it.
717
- aria-describedby={filled ? contentId : undefined}
718
- aria-selected={isSelected}
719
- aria-disabled={disabled || undefined}
720
- aria-current={isToday ? "date" : undefined}
721
- onClick={() => handleClick(d)}
722
- onKeyDown={onDayKeyDown}
723
- className={
724
- lg
725
- ? cn(
726
- "flex w-full min-w-0 flex-col items-stretch gap-1 overflow-hidden p-1.5 text-start text-xs transition-colors",
727
- LG_CELL_HEIGHT,
728
- FOCUS_RING,
729
- "focus-visible:ring-inset",
730
- disabled
731
- ? "cursor-not-allowed bg-surface text-placeholder"
732
- : isSelected
733
- ? "bg-brand-soft text-primary hover:bg-brand-soft-hover"
734
- : "bg-surface text-primary hover:bg-hover",
735
- )
736
- : cn(
737
- "relative size-8 rounded-full text-xs tabular-nums transition-colors",
738
- // A grid you can walk with the keyboard needs to show where the
739
- // keyboard IS. Inset because the cells sit half a pixel apart and
740
- // an outset ring would be drawn over by its neighbours; the
741
- // colour flips on the selected days for the reason the numpad's
742
- // "Done" key does — a --brand ring on a --brand fill is a ring
743
- // that exists only in the DOM.
744
- FOCUS_RING_WIDTH,
745
- "focus-visible:outline-none focus-visible:ring-inset",
746
- isStart || isEnd
747
- ? "focus-visible:ring-brand-contrast"
748
- : "focus-visible:ring-brand",
749
- disabled
750
- ? "cursor-not-allowed text-placeholder"
751
- // The two selected states are the BRAND, not a fixed sky: the endpoints
752
- // are the solid fill and the days between them its soft tint. Hardcoding
753
- // them left an app that changed `--brand` with a calendar in the old
754
- // colour (docs/module-audit-2026-09-22.md §theming). Both token pairs
755
- // flip light/dark themselves, so there is no `dark:` partner to carry —
756
- // one would override the token and bring the hardcoded hue back.
757
- : isStart || isEnd
758
- ? "bg-brand text-brand-contrast hover:bg-brand-hover"
759
- : isInRange
760
- ? "font-medium text-brand-muted hover:bg-brand-soft-hover"
761
- : "text-primary hover:bg-hover",
762
- isToday && !isStart && !isEnd && !isInRange && !disabled && "ring-1 ring-inset ring-strong",
763
- )
764
- }
673
+ className={cn("relative flex", lg ? "min-w-0" : "h-8 items-center justify-center")}
765
674
  >
766
- {lg ? (
767
- <>
768
- <span
769
- className={cn(
770
- "inline-flex size-6 shrink-0 items-center justify-center self-start rounded-full tabular-nums",
771
- isStart || isEnd
772
- ? "bg-brand font-semibold text-brand-contrast"
773
- : isToday && !disabled
774
- ? "font-semibold text-brand ring-1 ring-inset ring-brand"
775
- : isInRange && "font-medium text-brand-muted",
776
- )}
777
- >
778
- {label}
779
- </span>
780
- {filled && (
781
- <span id={contentId} className="flex min-w-0 flex-col gap-0.5">
782
- {content}
783
- </span>
784
- )}
785
- </>
786
- ) : (
787
- <>
788
- {label}
789
- {/* Under the number, inside the circle: room for a dot or two. */}
790
- {filled && (
675
+ {band && <span aria-hidden className={band} />}
676
+ <button
677
+ key={di}
678
+ type="button"
679
+ role="gridcell"
680
+ data-iso={iso}
681
+ // The roving tabindex: ONE tab stop for the whole month. Every day
682
+ // being tabbable meant 31 stops between a date field and the next
683
+ // control, which is the same reason the pattern exists.
684
+ tabIndex={isActive ? 0 : -1}
685
+ aria-label={labels.day(formatDay(d))}
686
+ // The custom content is the day's DESCRIPTION: `aria-label` replaces
687
+ // the button's text as its name, so without this link a screen
688
+ // reader would hear the date and never the events drawn under it.
689
+ aria-describedby={filled ? contentId : undefined}
690
+ aria-selected={isSelected}
691
+ aria-disabled={disabled || undefined}
692
+ aria-current={isToday ? "date" : undefined}
693
+ onClick={() => handleClick(d)}
694
+ onKeyDown={onDayKeyDown}
695
+ className={
696
+ lg
697
+ ? cn(
698
+ "flex w-full min-w-0 flex-col items-stretch gap-1 overflow-hidden p-1.5 text-start text-xs transition-colors",
699
+ LG_CELL_HEIGHT,
700
+ FOCUS_RING,
701
+ "focus-visible:ring-inset",
702
+ disabled
703
+ ? "cursor-not-allowed bg-surface text-placeholder"
704
+ : isSelected
705
+ ? "bg-brand-soft text-primary hover:bg-brand-soft-hover"
706
+ : "bg-surface text-primary hover:bg-hover",
707
+ )
708
+ : cn(
709
+ "relative size-8 rounded-full text-xs tabular-nums transition-colors",
710
+ // A grid you can walk with the keyboard needs to show where the
711
+ // keyboard IS. Inset because the cells sit half a pixel apart and
712
+ // an outset ring would be drawn over by its neighbours; the
713
+ // colour flips on the selected days for the reason the numpad's
714
+ // "Done" key does — a --brand ring on a --brand fill is a ring
715
+ // that exists only in the DOM.
716
+ FOCUS_RING_WIDTH,
717
+ "focus-visible:outline-none focus-visible:ring-inset",
718
+ isStart || isEnd ? "focus-visible:ring-brand-contrast" : "focus-visible:ring-brand",
719
+ disabled
720
+ ? "cursor-not-allowed text-placeholder"
721
+ : // The two selected states are the BRAND, not a fixed sky: the endpoints
722
+ // are the solid fill and the days between them its soft tint. Hardcoding
723
+ // them left an app that changed `--brand` with a calendar in the old
724
+ // colour (docs/module-audit-2026-09-22.md §theming). Both token pairs
725
+ // flip light/dark themselves, so there is no `dark:` partner to carry —
726
+ // one would override the token and bring the hardcoded hue back.
727
+ isStart || isEnd
728
+ ? "bg-brand text-brand-contrast hover:bg-brand-hover"
729
+ : isInRange
730
+ ? "font-medium text-brand-muted hover:bg-brand-soft-hover"
731
+ : "text-primary hover:bg-hover",
732
+ isToday && !isStart && !isEnd && !isInRange && !disabled && "ring-1 ring-inset ring-strong",
733
+ )
734
+ }
735
+ >
736
+ {lg ? (
737
+ <>
791
738
  <span
792
- id={contentId}
793
- className="pointer-events-none absolute inset-x-0 bottom-0.5 flex justify-center gap-px leading-none"
739
+ className={cn(
740
+ "inline-flex size-6 shrink-0 items-center justify-center self-start rounded-full tabular-nums",
741
+ isStart || isEnd
742
+ ? "bg-brand font-semibold text-brand-contrast"
743
+ : isToday && !disabled
744
+ ? "font-semibold text-brand ring-1 ring-inset ring-brand"
745
+ : isInRange && "font-medium text-brand-muted",
746
+ )}
794
747
  >
795
- {content}
748
+ {label}
796
749
  </span>
797
- )}
798
- </>
799
- )}
800
- </button>
750
+ {filled && (
751
+ <span id={contentId} className="flex min-w-0 flex-col gap-0.5">
752
+ {content}
753
+ </span>
754
+ )}
755
+ </>
756
+ ) : (
757
+ <>
758
+ {label}
759
+ {/* Under the number, inside the circle: room for a dot or two. */}
760
+ {filled && (
761
+ <span
762
+ id={contentId}
763
+ className="pointer-events-none absolute inset-x-0 bottom-0.5 flex justify-center gap-px leading-none"
764
+ >
765
+ {content}
766
+ </span>
767
+ )}
768
+ </>
769
+ )}
770
+ </button>
801
771
  </div>
802
772
  );
803
773
  })}
@@ -4,8 +4,10 @@ import { useMoneyDraft } from "./money-draft";
4
4
 
5
5
  type AmountInputProps = ComponentProps<typeof AmountInput>;
6
6
 
7
- export interface MoneyFieldProps
8
- extends Omit<AmountInputProps, "value" | "onChange" | "onCommit" | "negative" | "onNegativeChange" | "ref"> {
7
+ export interface MoneyFieldProps extends Omit<
8
+ AmountInputProps,
9
+ "value" | "onChange" | "onCommit" | "negative" | "onNegativeChange" | "ref"
10
+ > {
9
11
  /** The amount, or `null` for an empty field. */
10
12
  value: number | null;
11
13
  /**
@@ -13,7 +13,14 @@ import { splitTriggerAria } from "./trigger-aria";
13
13
  import type { TriggerAria } from "./trigger-aria";
14
14
  import { useKitDateFormatter, useKitLabels, useKitLocale, type LabelOverride } from "../i18n/kit-labels";
15
15
  import { hasContent } from "../lib/presence";
16
- import { FieldBox, FieldLabelLine, LABEL_ABOVE_BOX, mergeRefs, useFieldMessages, type FieldHelpProps } from "./field-parts";
16
+ import {
17
+ FieldBox,
18
+ FieldLabelLine,
19
+ LABEL_ABOVE_BOX,
20
+ mergeRefs,
21
+ useFieldMessages,
22
+ type FieldHelpProps,
23
+ } from "./field-parts";
17
24
  import { DEFAULT_MONTH_PICKER_LABELS } from "./month-picker-labels";
18
25
 
19
26
  /**
@@ -381,10 +388,7 @@ function MonthFieldTrigger({
381
388
  "Septiembre De 2026". It wraps from Large up, as DatePicker's value does
382
389
  (`truncate-until-large`, text size §10.17; round 0.34 T1: the sweep read
383
390
  "Choose a mo…" at 360 px / Extra large). */}
384
- <span
385
- id={valueId}
386
- className={cn("truncate-until-large", !hasValue && "text-placeholder")}
387
- >
391
+ <span id={valueId} className={cn("truncate-until-large", !hasValue && "text-placeholder")}>
388
392
  {triggerText || " "}
389
393
  </span>
390
394
  </button>
@@ -425,8 +429,7 @@ function MonthGrid({
425
429
  currentKey: string;
426
430
  labels: MonthPickerLabels;
427
431
  }) {
428
- const outOfBounds = (key: string) =>
429
- Boolean((minKey && key < minKey) || (maxKey && key > maxKey));
432
+ const outOfBounds = (key: string) => Boolean((minKey && key < minKey) || (maxKey && key > maxKey));
430
433
 
431
434
  // The month holding the tab order, and with it the year on screen — one piece of
432
435
  // state, as in MiniCalendar, so the two cannot disagree. Opens on the value, or on
@@ -448,9 +451,7 @@ function MonthGrid({
448
451
  return Array.from({ length: 12 }, (_, i) => fmt.format(new Date(2000, i, 1)));
449
452
  }, [locale]);
450
453
  const longName = useMemo(() => new Intl.DateTimeFormat(locale, MONTH_NAME_FORMAT), [locale]);
451
- const yearCaption = new Intl.DateTimeFormat(locale, { year: "numeric" }).format(
452
- firstOf({ year, month: 1 }),
453
- );
454
+ const yearCaption = new Intl.DateTimeFormat(locale, { year: "numeric" }).format(firstOf({ year, month: 1 }));
454
455
 
455
456
  // A month whose cell must take focus after the next commit. Arrowing across a year
456
457
  // boundary re-labels the same twelve buttons, so the one to focus is a DIFFERENT
@@ -536,11 +537,7 @@ function MonthGrid({
536
537
  </button>
537
538
  {/* Names the grid, and `aria-live` so stepping a year says which one you are
538
539
  on — the user pressing the arrow is not inside the grid to hear it change. */}
539
- <div
540
- id={captionId}
541
- aria-live="polite"
542
- className="text-sm font-semibold tabular-nums text-primary"
543
- >
540
+ <div id={captionId} aria-live="polite" className="text-sm font-semibold tabular-nums text-primary">
544
541
  {yearCaption}
545
542
  </div>
546
543
  <button
@@ -585,9 +582,7 @@ function MonthGrid({
585
582
  FOCUS_RING_WIDTH,
586
583
  "focus-visible:outline-none focus-visible:ring-inset",
587
584
  // A --brand ring on a --brand fill exists only in the DOM.
588
- selected && !disabled
589
- ? "focus-visible:ring-brand-contrast"
590
- : "focus-visible:ring-brand",
585
+ selected && !disabled ? "focus-visible:ring-brand-contrast" : "focus-visible:ring-brand",
591
586
  disabled
592
587
  ? "cursor-not-allowed text-placeholder"
593
588
  : selected
@@ -776,9 +771,7 @@ function YearGrid({
776
771
  "rounded px-2 py-1.5 text-sm tabular-nums transition-colors",
777
772
  FOCUS_RING_WIDTH,
778
773
  "focus-visible:outline-none focus-visible:ring-inset",
779
- selected && !disabled
780
- ? "focus-visible:ring-brand-contrast"
781
- : "focus-visible:ring-brand",
774
+ selected && !disabled ? "focus-visible:ring-brand-contrast" : "focus-visible:ring-brand",
782
775
  disabled
783
776
  ? "cursor-not-allowed text-placeholder"
784
777
  : selected
@@ -3,19 +3,8 @@ import { X } from "lucide-react";
3
3
  import { cn } from "../lib/cn";
4
4
  import { FieldChevron, FIELD_TRIGGER, FIELD_FLOATING_PAD, FIELD_INVALID } from "./field-base";
5
5
  import { FieldLabel } from "./field-parts";
6
- import {
7
- ComboboxPanel,
8
- endHintRowProps,
9
- offersCreate,
10
- useComboboxCore,
11
- type ComboOption,
12
- } from "./combobox-core";
13
- import {
14
- DEFAULT_COMBOBOX_LABELS,
15
- DEFAULT_COMMON_LABELS,
16
- useKitLabels,
17
- useKitLocale,
18
- } from "../i18n/kit-labels";
6
+ import { ComboboxPanel, endHintRowProps, offersCreate, useComboboxCore, type ComboOption } from "./combobox-core";
7
+ import { DEFAULT_COMBOBOX_LABELS, DEFAULT_COMMON_LABELS, useKitLabels, useKitLocale } from "../i18n/kit-labels";
19
8
  import {
20
9
  assignRef,
21
10
  EndHintRow,
@@ -35,8 +24,7 @@ import { useCommitReason, type CommitScope } from "./write-lock";
35
24
  /** `onChange` is the kit's — "a selection was made", carrying values — rather
36
25
  * than the div's form event, so the DOM's spelling of it is omitted. */
37
26
  export interface MultiEntityComboboxProps<V extends string | number>
38
- extends Omit<ComponentPropsWithoutRef<"div">, "onChange">,
39
- FieldHelpProps {
27
+ extends Omit<ComponentPropsWithoutRef<"div">, "onChange">, FieldHelpProps {
40
28
  /** Selected ids. */
41
29
  value: V[];
42
30
  onChange: (value: V[]) => void;
@@ -210,17 +198,12 @@ export function MultiEntityCombobox<V extends string | number>(props: MultiEntit
210
198
  // natural fit for a summary, but in ja/zh it concatenates the names with nothing
211
199
  // between them at all.
212
200
  const locale = useKitLocale();
213
- const listFormat = useMemo(
214
- () => new Intl.ListFormat(locale, { type: "conjunction", style: "narrow" }),
215
- [locale],
216
- );
201
+ const listFormat = useMemo(() => new Intl.ListFormat(locale, { type: "conjunction", style: "narrow" }), [locale]);
217
202
  const summary = (() => {
218
203
  if (value.length === 0) return placeholder ?? "";
219
204
  if (itemLabel) return itemLabel(value.length);
220
205
  const chosen = value.map(resolve);
221
- return chosen.every(Boolean)
222
- ? listFormat.format(chosen.map((o) => o!.label))
223
- : labels.selectedCount(value.length);
206
+ return chosen.every(Boolean) ? listFormat.format(chosen.map((o) => o!.label)) : labels.selectedCount(value.length);
224
207
  })();
225
208
 
226
209
  // While locked the trigger sits in the reason's Tooltip, as on EntityCombobox.
@@ -282,10 +265,7 @@ export function MultiEntityCombobox<V extends string | number>(props: MultiEntit
282
265
  // A caller's own name wins over the composition: two fields labelled
283
266
  // "Account" on a transfer form are the from and the to, and only the
284
267
  // caller knows which is which.
285
- aria-label={
286
- ariaLabel ??
287
- (typeof label === "string" ? common.fieldValue(label, summary) : undefined)
288
- }
268
+ aria-label={ariaLabel ?? (typeof label === "string" ? common.fieldValue(label, summary) : undefined)}
289
269
  // Focusable while locked — see EntityCombobox.
290
270
  disabled={lock.locked ? undefined : disabled}
291
271
  aria-disabled={lock.locked || undefined}
@@ -47,8 +47,7 @@ export interface MultiSelectOption<V extends string | number = string | number>
47
47
  * inferred from `options` and `value`, so `onChange` hands back `number[]` for number
48
48
  * ids and `string[]` for string ones, and no call site casts. */
49
49
  export interface MultiSelectProps<V extends string | number = string | number>
50
- extends Omit<ComponentPropsWithoutRef<"div">, "onChange">,
51
- FieldHelpProps {
50
+ extends Omit<ComponentPropsWithoutRef<"div">, "onChange">, FieldHelpProps {
52
51
  options: MultiSelectOption<V>[];
53
52
  /** The chosen values — the select family's `value` (API-4). */
54
53
  value?: V[];
@@ -162,7 +161,8 @@ export function MultiSelect<V extends string | number = string | number>(props:
162
161
  const value = useMemo<V[]>(() => valueProp ?? [], [valueProp]);
163
162
  // The rows as the family's options — the hint is the sublabel, searched like the label.
164
163
  const comboOptions = useMemo(
165
- () => options.map((o): ComboOption<V> => ({ value: o.value, label: o.label, sublabel: o.hint, disabled: o.disabled })),
164
+ () =>
165
+ options.map((o): ComboOption<V> => ({ value: o.value, label: o.label, sublabel: o.hint, disabled: o.disabled })),
166
166
  [options],
167
167
  );
168
168
  // Back closes the open list, as it did on `useDropdown` (keksdose live #309).
@@ -213,9 +213,7 @@ export function MultiSelect<V extends string | number = string | number>(props:
213
213
  const valueSet = useMemo(() => new Set<V>(value), [value]);
214
214
  const allChecked = options.length > 0 && options.every((o) => valueSet.has(o.value));
215
215
  const selectedSummary =
216
- value.length === 0 || allChecked
217
- ? (labelsProp?.all ?? placeholder ?? text.all)
218
- : text.selectedCount(value.length);
216
+ value.length === 0 || allChecked ? (labelsProp?.all ?? placeholder ?? text.all) : text.selectedCount(value.length);
219
217
 
220
218
  const toggle = (o: ComboOption<V>) => {
221
219
  if (lock.locked) return;
@@ -256,9 +254,7 @@ export function MultiSelect<V extends string | number = string | number>(props:
256
254
  // siblings use, so a form row of pickers reads the same way throughout.
257
255
  // A caller's own name wins: two filters labelled "Accounts" on one screen have
258
256
  // to be told apart, and only the caller knows by what.
259
- aria-label={
260
- ariaLabel ?? (typeof label === "string" ? common.fieldValue(label, selectedSummary) : undefined)
261
- }
257
+ aria-label={ariaLabel ?? (typeof label === "string" ? common.fieldValue(label, selectedSummary) : undefined)}
262
258
  onClick={() => {
263
259
  if (!inert) setOpen((v) => !v);
264
260
  }}
@@ -31,7 +31,10 @@ export interface NavPillLinkProps {
31
31
  /** The `aria-current` token the current pill carries. */
32
32
  export type NavPillsCurrent = "page" | "step" | "location" | "true";
33
33
 
34
- export interface NavPillsProps<T extends string> extends Omit<ComponentPropsWithoutRef<"nav">, "children" | "onSelect"> {
34
+ export interface NavPillsProps<T extends string> extends Omit<
35
+ ComponentPropsWithoutRef<"nav">,
36
+ "children" | "onSelect"
37
+ > {
35
38
  items: NavPillItem<T>[];
36
39
  /** The pill that is current. `null` or a value not in `items`: none is. */
37
40
  current: T | null;
@@ -161,7 +164,12 @@ export function NavPills<T extends string>({
161
164
  ) : kit ? (
162
165
  <RenderedKitLink render={kit} props={props} />
163
166
  ) : (
164
- <a href={props.href} className={props.className} aria-current={props["aria-current"]} onClick={props.onClick}>
167
+ <a
168
+ href={props.href}
169
+ className={props.className}
170
+ aria-current={props["aria-current"]}
171
+ onClick={props.onClick}
172
+ >
165
173
  {props.children}
166
174
  </a>
167
175
  );
@@ -8,8 +8,10 @@ import { useKitLocale } from "../i18n/kit-labels";
8
8
 
9
9
  type NumberInputProps = ComponentProps<typeof NumberInput>;
10
10
 
11
- export interface NumberFieldProps
12
- extends Omit<NumberInputProps, "value" | "onChange" | "onCommit" | "suffix" | "invalid" | "error" | "locale"> {
11
+ export interface NumberFieldProps extends Omit<
12
+ NumberInputProps,
13
+ "value" | "onChange" | "onCommit" | "suffix" | "invalid" | "error" | "locale"
14
+ > {
13
15
  /** The committed number. `null` is "no value" — shown as an empty field. */
14
16
  value: number | null;
15
17
  /**
@@ -205,8 +207,7 @@ export function NumberField(props: NumberFieldProps) {
205
207
  // Live mode echoing back what it was just told: the draft already says it, in
206
208
  // the typist's own spelling ("1," or "12+5"), and reformatting would fight them.
207
209
  // Only a changed `value` qualifies — a new mark or `digits` still re-renders.
208
- const echo =
209
- onValueChange !== undefined && value === reported && seen.mark === mark && seen.digits === digits;
210
+ const echo = onValueChange !== undefined && value === reported && seen.mark === mark && seen.digits === digits;
210
211
  if (!echo) {
211
212
  setDraft(format(value));
212
213
  setCommitted(value);
@@ -263,17 +264,19 @@ export function NumberField(props: NumberFieldProps) {
263
264
  const required = ariaRequired === true || ariaRequired === "true";
264
265
 
265
266
  const labelWithUnit =
266
- unit !== undefined && unitPlacement === "label"
267
- ? label === undefined || label === ""
268
- ? unit
269
- : typeof label === "string" && typeof unit === "string"
270
- ? `${label} (${unit})`
271
- : (
272
- <>
273
- {label} ({unit})
274
- </>
275
- )
276
- : label;
267
+ unit !== undefined && unitPlacement === "label" ? (
268
+ label === undefined || label === "" ? (
269
+ unit
270
+ ) : typeof label === "string" && typeof unit === "string" ? (
271
+ `${label} (${unit})`
272
+ ) : (
273
+ <>
274
+ {label} ({unit})
275
+ </>
276
+ )
277
+ ) : (
278
+ label
279
+ );
277
280
 
278
281
  return (
279
282
  <NumberInput