@eifi1/ui-kit 0.51.4 → 0.51.6

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 (759) hide show
  1. package/README.md +5 -5
  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 +1 -4
  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 +10 -8
  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.map +1 -1
  106. package/dist/components/data-table-groups.js +3 -1
  107. package/dist/components/data-table-groups.js.map +1 -1
  108. package/dist/components/data-table-head.js +44 -56
  109. package/dist/components/data-table-head.js.map +1 -1
  110. package/dist/components/data-table-mobile.js +31 -44
  111. package/dist/components/data-table-mobile.js.map +1 -1
  112. package/dist/components/data-table-pagination.js.map +1 -1
  113. package/dist/components/data-table-row-actions.js +19 -16
  114. package/dist/components/data-table-row-actions.js.map +1 -1
  115. package/dist/components/data-table-row.js.map +1 -1
  116. package/dist/components/data-table-shared.js.map +1 -1
  117. package/dist/components/data-table-sort.js.map +1 -1
  118. package/dist/components/data-table-virtual.js +4 -1
  119. package/dist/components/data-table-virtual.js.map +1 -1
  120. package/dist/components/data-table.js +30 -39
  121. package/dist/components/data-table.js.map +1 -1
  122. package/dist/components/date-picker.js +1 -6
  123. package/dist/components/date-picker.js.map +1 -1
  124. package/dist/components/date-range-picker.js.map +1 -1
  125. package/dist/components/description-list.js +10 -10
  126. package/dist/components/description-list.js.map +1 -1
  127. package/dist/components/dialog-frame.js +9 -2
  128. package/dist/components/dialog-frame.js.map +1 -1
  129. package/dist/components/disclosure.js +17 -27
  130. package/dist/components/disclosure.js.map +1 -1
  131. package/dist/components/dropdown.js +25 -35
  132. package/dist/components/dropdown.js.map +1 -1
  133. package/dist/components/empty-state.js.map +1 -1
  134. package/dist/components/entity-combobox.js.map +1 -1
  135. package/dist/components/error-boundary.js.map +1 -1
  136. package/dist/components/field-base.js +5 -5
  137. package/dist/components/field-base.js.map +1 -1
  138. package/dist/components/field-parts.d.ts +1 -1
  139. package/dist/components/field-parts.js +10 -14
  140. package/dist/components/field-parts.js.map +1 -1
  141. package/dist/components/field-sync.js +8 -10
  142. package/dist/components/field-sync.js.map +1 -1
  143. package/dist/components/file-button.js.map +1 -1
  144. package/dist/components/file-dropzone.js.map +1 -1
  145. package/dist/components/floating-panel.js +4 -1
  146. package/dist/components/floating-panel.js.map +1 -1
  147. package/dist/components/focus-ring.js.map +1 -1
  148. package/dist/components/form-actions.js.map +1 -1
  149. package/dist/components/grouped-picker.js +6 -8
  150. package/dist/components/grouped-picker.js.map +1 -1
  151. package/dist/components/hover-menu.js +1 -4
  152. package/dist/components/hover-menu.js.map +1 -1
  153. package/dist/components/iban-input-labels.js.map +1 -1
  154. package/dist/components/icon-button.js +4 -1
  155. package/dist/components/icon-button.js.map +1 -1
  156. package/dist/components/icon-picker.js +2 -7
  157. package/dist/components/icon-picker.js.map +1 -1
  158. package/dist/components/image-grid.js +41 -50
  159. package/dist/components/image-grid.js.map +1 -1
  160. package/dist/components/inline-edit-field.js.map +1 -1
  161. package/dist/components/inline-entity-combobox.js +2 -8
  162. package/dist/components/inline-entity-combobox.js.map +1 -1
  163. package/dist/components/input.js +14 -2
  164. package/dist/components/input.js.map +1 -1
  165. package/dist/components/jump-calendar.js +1 -7
  166. package/dist/components/jump-calendar.js.map +1 -1
  167. package/dist/components/legal-labels.js.map +1 -1
  168. package/dist/components/legal-page.js +14 -2
  169. package/dist/components/legal-page.js.map +1 -1
  170. package/dist/components/legal.js +12 -2
  171. package/dist/components/legal.js.map +1 -1
  172. package/dist/components/lightbox.js.map +1 -1
  173. package/dist/components/line-items.js +26 -36
  174. package/dist/components/line-items.js.map +1 -1
  175. package/dist/components/list.js +22 -10
  176. package/dist/components/list.js.map +1 -1
  177. package/dist/components/measured-grid.js +29 -53
  178. package/dist/components/measured-grid.js.map +1 -1
  179. package/dist/components/menu-item.js.map +1 -1
  180. package/dist/components/mini-calendar.js +13 -31
  181. package/dist/components/mini-calendar.js.map +1 -1
  182. package/dist/components/money-field.js.map +1 -1
  183. package/dist/components/month-picker.js +10 -21
  184. package/dist/components/month-picker.js.map +1 -1
  185. package/dist/components/multi-entity-combobox.js +3 -16
  186. package/dist/components/multi-entity-combobox.js.map +1 -1
  187. package/dist/components/multi-select.js.map +1 -1
  188. package/dist/components/nav-pills.js +10 -1
  189. package/dist/components/nav-pills.js.map +1 -1
  190. package/dist/components/number-field.js.map +1 -1
  191. package/dist/components/number-input.js +1 -7
  192. package/dist/components/number-input.js.map +1 -1
  193. package/dist/components/numpad-sheet.js +1 -4
  194. package/dist/components/numpad-sheet.js.map +1 -1
  195. package/dist/components/one-time-code-input.js +1 -7
  196. package/dist/components/one-time-code-input.js.map +1 -1
  197. package/dist/components/page-contents.js +13 -22
  198. package/dist/components/page-contents.js.map +1 -1
  199. package/dist/components/page-header.js +1 -11
  200. package/dist/components/page-header.js.map +1 -1
  201. package/dist/components/password-strength-labels.js.map +1 -1
  202. package/dist/components/password-strength.js +2 -8
  203. package/dist/components/password-strength.js.map +1 -1
  204. package/dist/components/phone-input.js +42 -57
  205. package/dist/components/phone-input.js.map +1 -1
  206. package/dist/components/picker-sheet.js.map +1 -1
  207. package/dist/components/pie-chart.js +1 -8
  208. package/dist/components/pie-chart.js.map +1 -1
  209. package/dist/components/popover.js.map +1 -1
  210. package/dist/components/progress-bar.js +16 -9
  211. package/dist/components/progress-bar.js.map +1 -1
  212. package/dist/components/qr-code.js +1 -8
  213. package/dist/components/qr-code.js.map +1 -1
  214. package/dist/components/row-actions.js +5 -1
  215. package/dist/components/row-actions.js.map +1 -1
  216. package/dist/components/search-field.js.map +1 -1
  217. package/dist/components/select.js +28 -38
  218. package/dist/components/select.js.map +1 -1
  219. package/dist/components/separator.js +1 -5
  220. package/dist/components/separator.js.map +1 -1
  221. package/dist/components/series-chart-axes.js +4 -1
  222. package/dist/components/series-chart-axes.js.map +1 -1
  223. package/dist/components/series-chart-budget.js.map +1 -1
  224. package/dist/components/series-chart-ticks.js.map +1 -1
  225. package/dist/components/series-chart.js +29 -45
  226. package/dist/components/series-chart.js.map +1 -1
  227. package/dist/components/settings-fields.js +21 -17
  228. package/dist/components/settings-fields.js.map +1 -1
  229. package/dist/components/share-card.js +4 -9
  230. package/dist/components/share-card.js.map +1 -1
  231. package/dist/components/sign-chip.js.map +1 -1
  232. package/dist/components/signature-pad.js +4 -13
  233. package/dist/components/signature-pad.js.map +1 -1
  234. package/dist/components/signed-amount.js +12 -5
  235. package/dist/components/signed-amount.js.map +1 -1
  236. package/dist/components/skeleton.js +2 -17
  237. package/dist/components/skeleton.js.map +1 -1
  238. package/dist/components/slider.js +13 -36
  239. package/dist/components/slider.js.map +1 -1
  240. package/dist/components/sparkline.js.map +1 -1
  241. package/dist/components/stat-tile.js +14 -10
  242. package/dist/components/stat-tile.js.map +1 -1
  243. package/dist/components/swatch-picker.js +14 -4
  244. package/dist/components/swatch-picker.js.map +1 -1
  245. package/dist/components/swipeable-row.d.ts +1 -1
  246. package/dist/components/swipeable-row.js +1 -8
  247. package/dist/components/swipeable-row.js.map +1 -1
  248. package/dist/components/table-skeleton.js +4 -1
  249. package/dist/components/table-skeleton.js.map +1 -1
  250. package/dist/components/table.js +12 -9
  251. package/dist/components/table.js.map +1 -1
  252. package/dist/components/tabs.js +5 -24
  253. package/dist/components/tabs.js.map +1 -1
  254. package/dist/components/text-link.js.map +1 -1
  255. package/dist/components/text.js.map +1 -1
  256. package/dist/components/tile-radio.js +1 -7
  257. package/dist/components/tile-radio.js.map +1 -1
  258. package/dist/components/time-input.js.map +1 -1
  259. package/dist/components/toast.js.map +1 -1
  260. package/dist/components/toggle-group.js +6 -1
  261. package/dist/components/toggle-group.js.map +1 -1
  262. package/dist/components/toggle-legend.js +2 -11
  263. package/dist/components/toggle-legend.js.map +1 -1
  264. package/dist/components/tooltip.js +2 -22
  265. package/dist/components/tooltip.js.map +1 -1
  266. package/dist/components/translation-review-editor.js +1 -4
  267. package/dist/components/translation-review-editor.js.map +1 -1
  268. package/dist/components/translation-review-parts.d.ts +1 -1
  269. package/dist/components/translation-review-parts.js +7 -1
  270. package/dist/components/translation-review-parts.js.map +1 -1
  271. package/dist/components/translation-review.js +18 -7
  272. package/dist/components/translation-review.js.map +1 -1
  273. package/dist/components/tree-view.js +14 -10
  274. package/dist/components/tree-view.js.map +1 -1
  275. package/dist/components/treemap.d.ts +24 -2
  276. package/dist/components/treemap.js +28 -4
  277. package/dist/components/treemap.js.map +1 -1
  278. package/dist/components/trigger-aria.js.map +1 -1
  279. package/dist/components/use-table-state.js +14 -11
  280. package/dist/components/use-table-state.js.map +1 -1
  281. package/dist/components/user-avatar.js +3 -26
  282. package/dist/components/user-avatar.js.map +1 -1
  283. package/dist/demo/demo-start.js +8 -4
  284. package/dist/demo/demo-start.js.map +1 -1
  285. package/dist/eslint/index.js +1 -1
  286. package/dist/feedback/feedback-attachment-labels.js.map +1 -1
  287. package/dist/feedback/feedback-attachment.js +1 -8
  288. package/dist/feedback/feedback-attachment.js.map +1 -1
  289. package/dist/feedback/feedback-capture.d.ts +1 -1
  290. package/dist/feedback/feedback-capture.js +3 -1
  291. package/dist/feedback/feedback-capture.js.map +1 -1
  292. package/dist/feedback/feedback-comment-thread.js +27 -13
  293. package/dist/feedback/feedback-comment-thread.js.map +1 -1
  294. package/dist/feedback/feedback-context.js +1 -4
  295. package/dist/feedback/feedback-context.js.map +1 -1
  296. package/dist/feedback/feedback-dialog.js.map +1 -1
  297. package/dist/feedback/feedback-inbox.js.map +1 -1
  298. package/dist/feedback/feedback-public-list.js +7 -1
  299. package/dist/feedback/feedback-public-list.js.map +1 -1
  300. package/dist/feedback/feedback-record.js +1 -5
  301. package/dist/feedback/feedback-record.js.map +1 -1
  302. package/dist/feedback/feedback-replies.js +25 -10
  303. package/dist/feedback/feedback-replies.js.map +1 -1
  304. package/dist/feedback/feedback-row-detail.js.map +1 -1
  305. package/dist/feedback/feedback-status-undo.js.map +1 -1
  306. package/dist/feedback/feedback-submit-dialog.js.map +1 -1
  307. package/dist/feedback/feedback-table.js +4 -1
  308. package/dist/feedback/feedback-table.js.map +1 -1
  309. package/dist/feedback/feedback-thread.js +2 -13
  310. package/dist/feedback/feedback-thread.js.map +1 -1
  311. package/dist/feedback/feedback-vocabulary.js.map +1 -1
  312. package/dist/feedback/feedback-vote-button.js.map +1 -1
  313. package/dist/hooks/use-anchored-rect.js.map +1 -1
  314. package/dist/hooks/use-document-title.js.map +1 -1
  315. package/dist/hooks/use-file-drop.js.map +1 -1
  316. package/dist/hooks/use-file-picker-labels.js.map +1 -1
  317. package/dist/hooks/use-file-picker.js.map +1 -1
  318. package/dist/hooks/use-focus-trap.js.map +1 -1
  319. package/dist/hooks/use-overlay-history.js +10 -5
  320. package/dist/hooks/use-overlay-history.js.map +1 -1
  321. package/dist/hooks/use-row-swipe.d.ts +1 -1
  322. package/dist/hooks/use-row-swipe.js +1 -6
  323. package/dist/hooks/use-row-swipe.js.map +1 -1
  324. package/dist/i18n/defaults.js +1 -4
  325. package/dist/i18n/defaults.js.map +1 -1
  326. package/dist/i18n/german.js +4 -1
  327. package/dist/i18n/german.js.map +1 -1
  328. package/dist/i18n/kit-labels.js +2 -8
  329. package/dist/i18n/kit-labels.js.map +1 -1
  330. package/dist/i18n/languages.js.map +1 -1
  331. package/dist/i18n/locales/en.js +4 -1
  332. package/dist/i18n/locales/en.js.map +2 -2
  333. package/dist/i18n/locales/es.js +4 -1
  334. package/dist/i18n/locales/es.js.map +1 -1
  335. package/dist/i18n/locales/fr.js +4 -1
  336. package/dist/i18n/locales/fr.js.map +1 -1
  337. package/dist/i18n/locales/hu.js +4 -1
  338. package/dist/i18n/locales/hu.js.map +1 -1
  339. package/dist/i18n/locales/it.js +4 -1
  340. package/dist/i18n/locales/it.js.map +1 -1
  341. package/dist/i18n/locales/zh.js.map +1 -1
  342. package/dist/i18n/plurals.js.map +1 -1
  343. package/dist/i18n/review.js +13 -7
  344. package/dist/i18n/review.js.map +1 -1
  345. package/dist/i18n/shared-labels.js.map +1 -1
  346. package/dist/index.d.ts +16 -16
  347. package/dist/index.js +40 -23
  348. package/dist/index.js.map +1 -1
  349. package/dist/landing/access.js +1 -4
  350. package/dist/landing/access.js.map +1 -1
  351. package/dist/landing/landing-sections.js +35 -38
  352. package/dist/landing/landing-sections.js.map +1 -1
  353. package/dist/landing/page-seo.js.map +1 -1
  354. package/dist/lib/calc.js.map +1 -1
  355. package/dist/lib/clipboard-minus.js.map +1 -1
  356. package/dist/lib/dates.js.map +1 -1
  357. package/dist/lib/decimal-marks.js.map +1 -1
  358. package/dist/lib/device-settings.js +2 -1
  359. package/dist/lib/device-settings.js.map +1 -1
  360. package/dist/lib/direction.js.map +1 -1
  361. package/dist/lib/iban.js.map +1 -1
  362. package/dist/lib/logger.js +1 -5
  363. package/dist/lib/logger.js.map +1 -1
  364. package/dist/lib/person-name.js.map +1 -1
  365. package/dist/lib/phone.js.map +1 -1
  366. package/dist/lib/qr-encode.js +344 -8
  367. package/dist/lib/qr-encode.js.map +1 -1
  368. package/dist/lib/session-refresh.js.map +1 -1
  369. package/dist/lib/table-text.js +15 -3
  370. package/dist/lib/table-text.js.map +1 -1
  371. package/dist/lib/text-match.d.ts +4 -0
  372. package/dist/lib/text-match.js.map +1 -1
  373. package/dist/lib/translation-review.js.map +1 -1
  374. package/dist/notifications/notification-inbox.js +63 -44
  375. package/dist/notifications/notification-inbox.js.map +1 -1
  376. package/dist/notifications/notification-parts.js.map +1 -1
  377. package/dist/notifications/notification-types-setting.js.map +1 -1
  378. package/dist/notifications/notifications-labels.js.map +1 -1
  379. package/dist/notifications/push-device-setting.js +6 -1
  380. package/dist/notifications/push-device-setting.js.map +1 -1
  381. package/dist/notifications/push-devices-setting.js.map +1 -1
  382. package/dist/notifications/push-worker.js.map +1 -1
  383. package/dist/notifications/quiet-hours-setting.js.map +1 -1
  384. package/dist/notifications/use-push-device.js +4 -1
  385. package/dist/notifications/use-push-device.js.map +1 -1
  386. package/dist/offline/pwa-update-prompt.d.ts +1 -1
  387. package/dist/offline/pwa-update-prompt.js +7 -1
  388. package/dist/offline/pwa-update-prompt.js.map +1 -1
  389. package/dist/offline/query-persistence.js.map +1 -1
  390. package/dist/offline.d.ts +1 -1
  391. package/dist/offline.js +6 -1
  392. package/dist/offline.js.map +1 -1
  393. package/dist/pay/pay.css +8 -1
  394. package/dist/rhf/fields.d.ts +1 -2
  395. package/dist/rhf/fields.js +1 -10
  396. package/dist/rhf/fields.js.map +1 -1
  397. package/dist/rhf/form-core.js +1 -4
  398. package/dist/rhf/form-core.js.map +1 -1
  399. package/dist/rhf/line-items.js.map +1 -1
  400. package/dist/rhf/use-rhf-wizard-step.js.map +1 -1
  401. package/dist/search/command-palette.js +71 -62
  402. package/dist/search/command-palette.js.map +1 -1
  403. package/dist/search/global-search.js +34 -5
  404. package/dist/search/global-search.js.map +1 -1
  405. package/dist/search/search-index.js.map +1 -1
  406. package/dist/settings/device-reset-setting.js +1 -6
  407. package/dist/settings/device-reset-setting.js.map +1 -1
  408. package/dist/settings/settings-heading.js.map +1 -1
  409. package/dist/settings/settings-layout.js +9 -20
  410. package/dist/settings/settings-layout.js.map +1 -1
  411. package/dist/settings/use-settings-route.js.map +1 -1
  412. package/dist/shell/app-shell.js +62 -31
  413. package/dist/shell/app-shell.js.map +1 -1
  414. package/dist/shell/auth-layout.js +1 -10
  415. package/dist/shell/auth-layout.js.map +1 -1
  416. package/dist/shell/dev-menu.js +12 -6
  417. package/dist/shell/dev-menu.js.map +1 -1
  418. package/dist/shell/option-switcher-menu.js.map +1 -1
  419. package/dist/shell/sync-status-indicator.js +7 -6
  420. package/dist/shell/sync-status-indicator.js.map +1 -1
  421. package/dist/shell/top-bar-parts-labels.js.map +1 -1
  422. package/dist/shell/topbar-action-menu.js.map +1 -1
  423. package/dist/shell/topbar-controls.js +1 -10
  424. package/dist/shell/topbar-controls.js.map +1 -1
  425. package/dist/shell/tour-menu.js +9 -1
  426. package/dist/shell/tour-menu.js.map +1 -1
  427. package/dist/sync/db.js.map +1 -1
  428. package/dist/sync/engine.js +24 -6
  429. package/dist/sync/engine.js.map +1 -1
  430. package/dist/sync.d.ts +2 -2
  431. package/dist/sync.js +7 -1
  432. package/dist/sync.js.map +1 -1
  433. package/dist/testing/css-variables.js.map +1 -1
  434. package/dist/testing/index.d.ts +1 -1
  435. package/dist/testing/index.js +1 -3
  436. package/dist/testing/index.js.map +1 -1
  437. package/dist/testing/react.js.map +1 -1
  438. package/dist/testing/viewport.js +7 -4
  439. package/dist/testing/viewport.js.map +1 -1
  440. package/dist/theme/contrast-tokens.js +13 -2
  441. package/dist/theme/contrast-tokens.js.map +1 -1
  442. package/dist/theme/contrast.d.ts +2 -2
  443. package/dist/theme/palette-derive.d.ts +1 -1
  444. package/dist/theme/palette-derive.js +18 -29
  445. package/dist/theme/palette-derive.js.map +1 -1
  446. package/dist/theme/palette-presets.js.map +1 -1
  447. package/dist/theme/palette-store.js.map +1 -1
  448. package/dist/theme/text-size.js.map +1 -1
  449. package/dist/theme/theme-store.js +1 -3
  450. package/dist/theme/theme-store.js.map +1 -1
  451. package/dist/tour/tour-catalogue.js.map +1 -1
  452. package/dist/tour/tour-dock.js +5 -1
  453. package/dist/tour/tour-dock.js.map +1 -1
  454. package/dist/tour/tour-engine.js +1 -4
  455. package/dist/tour/tour-engine.js.map +1 -1
  456. package/dist/tour/tour.js +21 -12
  457. package/dist/tour/tour.js.map +1 -1
  458. package/dist/tour/use-tour-progress.js.map +1 -1
  459. package/dist/tour/use-tour-url-sync.js.map +1 -1
  460. package/dist/wizard/stepper-nav.js +3 -24
  461. package/dist/wizard/stepper-nav.js.map +1 -1
  462. package/dist/wizard/types.js.map +1 -1
  463. package/dist/wizard/use-wizard.js +24 -28
  464. package/dist/wizard/use-wizard.js.map +1 -1
  465. package/dist/wizard/validation.js.map +1 -1
  466. package/dist/wizard/wizard-context.js.map +1 -1
  467. package/dist/wizard/wizard-step.d.ts +1 -1
  468. package/dist/wizard/wizard-step.js +1 -8
  469. package/dist/wizard/wizard-step.js.map +1 -1
  470. package/dist/wizard/wizard-summary.js.map +1 -1
  471. package/package.json +5 -2
  472. package/src/account/account-settings-labels.ts +1 -2
  473. package/src/account/account-settings.tsx +11 -17
  474. package/src/account/delete-account-setting.tsx +1 -6
  475. package/src/account/email-change-setting-labels.ts +1 -2
  476. package/src/account/email-change-setting.tsx +3 -1
  477. package/src/account/passkeys-setting.tsx +1 -3
  478. package/src/account/sessions-setting.tsx +4 -2
  479. package/src/admin/admin-action-confirm.tsx +4 -7
  480. package/src/admin/admin-action-log.tsx +29 -29
  481. package/src/admin/admin-area-labels.ts +4 -1
  482. package/src/admin/admin-overview.tsx +8 -2
  483. package/src/admin/admin-sections.tsx +3 -1
  484. package/src/admin/admin-tool-links.tsx +7 -1
  485. package/src/admin/invitations-panel.tsx +5 -11
  486. package/src/admin/mail-test-card.tsx +1 -2
  487. package/src/admin/reviewer-scope-editor.tsx +4 -9
  488. package/src/admin/role-select.tsx +4 -2
  489. package/src/admin/user-roster.tsx +2 -11
  490. package/src/auth/accept-invitation.tsx +1 -7
  491. package/src/auth/auth-errors.ts +1 -6
  492. package/src/auth/forgot-password-form.tsx +2 -7
  493. package/src/auth/register-form.tsx +7 -8
  494. package/src/auth/reset-password-form.tsx +2 -5
  495. package/src/auth/sign-in-form.tsx +15 -14
  496. package/src/auth/verify-email.tsx +2 -7
  497. package/src/billing/billing-banner.tsx +3 -7
  498. package/src/billing/billing-labels.ts +6 -4
  499. package/src/billing/checkout-processing.ts +0 -1
  500. package/src/billing/plan-card.tsx +9 -8
  501. package/src/billing/plan-limit-toast.tsx +1 -2
  502. package/src/billing/plan-limit.ts +1 -2
  503. package/src/billing/plan-price.ts +1 -4
  504. package/src/billing/plan-switch.tsx +1 -2
  505. package/src/billing/subscription-actions.tsx +5 -2
  506. package/src/components/account-chips.tsx +1 -7
  507. package/src/components/alert-banner.tsx +2 -8
  508. package/src/components/amount-input.tsx +206 -178
  509. package/src/components/authed-image.tsx +7 -4
  510. package/src/components/autocomplete.tsx +7 -9
  511. package/src/components/bulk-action-bar.tsx +2 -7
  512. package/src/components/button-group.tsx +1 -2
  513. package/src/components/button-look.ts +6 -17
  514. package/src/components/button.tsx +1 -4
  515. package/src/components/calculator.tsx +6 -9
  516. package/src/components/calendar-heatmap.tsx +5 -10
  517. package/src/components/card.tsx +9 -13
  518. package/src/components/chart-zoom-core.tsx +6 -33
  519. package/src/components/chart.tsx +8 -31
  520. package/src/components/checkbox-group.tsx +1 -4
  521. package/src/components/chip-input.tsx +6 -6
  522. package/src/components/chip.tsx +14 -26
  523. package/src/components/choice-card.tsx +4 -18
  524. package/src/components/column-mapper-labels.ts +3 -10
  525. package/src/components/column-mapper.tsx +33 -122
  526. package/src/components/combobox-core.tsx +12 -42
  527. package/src/components/combobox.tsx +2 -6
  528. package/src/components/confirm-dialog.tsx +1 -3
  529. package/src/components/copy-button.tsx +2 -4
  530. package/src/components/country-select.tsx +9 -21
  531. package/src/components/currency-option-list.tsx +13 -14
  532. package/src/components/currency-select.tsx +2 -7
  533. package/src/components/danger-confirm.tsx +8 -9
  534. package/src/components/data-table-cells.tsx +1 -2
  535. package/src/components/data-table-column-settings.tsx +1 -3
  536. package/src/components/data-table-filter-popover.tsx +5 -19
  537. package/src/components/data-table-filters.ts +1 -6
  538. package/src/components/data-table-fit.ts +1 -3
  539. package/src/components/data-table-groups.tsx +3 -1
  540. package/src/components/data-table-head.tsx +27 -45
  541. package/src/components/data-table-mobile.tsx +99 -108
  542. package/src/components/data-table-pagination.tsx +2 -6
  543. package/src/components/data-table-row-actions.tsx +25 -24
  544. package/src/components/data-table-row.tsx +16 -17
  545. package/src/components/data-table-shared.tsx +10 -16
  546. package/src/components/data-table-sort.ts +1 -2
  547. package/src/components/data-table-virtual.ts +9 -4
  548. package/src/components/data-table.tsx +489 -501
  549. package/src/components/date-picker.tsx +1 -7
  550. package/src/components/date-range-picker.tsx +3 -13
  551. package/src/components/description-list.tsx +7 -13
  552. package/src/components/dialog-frame.tsx +12 -3
  553. package/src/components/disclosure.tsx +8 -12
  554. package/src/components/dropdown.tsx +3 -11
  555. package/src/components/empty-state.tsx +1 -3
  556. package/src/components/entity-combobox.tsx +2 -6
  557. package/src/components/error-boundary.tsx +7 -7
  558. package/src/components/field-base.tsx +8 -14
  559. package/src/components/field-parts.tsx +12 -23
  560. package/src/components/field-sync.tsx +7 -11
  561. package/src/components/file-button.tsx +7 -3
  562. package/src/components/file-dropzone.tsx +7 -12
  563. package/src/components/floating-panel.tsx +44 -51
  564. package/src/components/focus-ring.ts +1 -2
  565. package/src/components/form-actions.tsx +1 -4
  566. package/src/components/grouped-picker.tsx +6 -8
  567. package/src/components/hover-menu.tsx +1 -4
  568. package/src/components/iban-input-labels.ts +1 -2
  569. package/src/components/icon-button.tsx +46 -48
  570. package/src/components/icon-picker.tsx +4 -17
  571. package/src/components/image-grid.tsx +1 -6
  572. package/src/components/inline-edit-field.tsx +1 -5
  573. package/src/components/inline-entity-combobox.tsx +6 -21
  574. package/src/components/input.tsx +14 -2
  575. package/src/components/jump-calendar.tsx +2 -6
  576. package/src/components/legal-labels.ts +1 -2
  577. package/src/components/legal-page.tsx +18 -7
  578. package/src/components/legal.tsx +14 -5
  579. package/src/components/lightbox.tsx +1 -3
  580. package/src/components/line-items.tsx +7 -15
  581. package/src/components/list.tsx +29 -25
  582. package/src/components/measured-grid.tsx +8 -30
  583. package/src/components/menu-item.tsx +1 -3
  584. package/src/components/mini-calendar.tsx +129 -159
  585. package/src/components/money-field.tsx +4 -2
  586. package/src/components/month-picker.tsx +14 -21
  587. package/src/components/multi-entity-combobox.tsx +6 -26
  588. package/src/components/multi-select.tsx +5 -9
  589. package/src/components/nav-pills.tsx +10 -2
  590. package/src/components/number-field.tsx +18 -15
  591. package/src/components/number-input.tsx +3 -19
  592. package/src/components/numpad-sheet.tsx +9 -13
  593. package/src/components/one-time-code-input.tsx +6 -11
  594. package/src/components/page-contents.tsx +2 -9
  595. package/src/components/page-header.tsx +5 -10
  596. package/src/components/password-strength-labels.ts +1 -2
  597. package/src/components/password-strength.tsx +6 -9
  598. package/src/components/phone-input.tsx +2 -13
  599. package/src/components/picker-sheet.tsx +2 -5
  600. package/src/components/pie-chart.tsx +6 -12
  601. package/src/components/popover.tsx +2 -1
  602. package/src/components/progress-bar.tsx +16 -25
  603. package/src/components/qr-code.tsx +2 -9
  604. package/src/components/row-actions.tsx +9 -1
  605. package/src/components/search-field.tsx +4 -5
  606. package/src/components/select.tsx +2 -10
  607. package/src/components/separator.tsx +1 -5
  608. package/src/components/series-chart-axes.ts +5 -5
  609. package/src/components/series-chart-budget.ts +1 -4
  610. package/src/components/series-chart-ticks.ts +1 -4
  611. package/src/components/series-chart.tsx +43 -83
  612. package/src/components/settings-fields.tsx +20 -15
  613. package/src/components/share-card.tsx +6 -14
  614. package/src/components/sign-chip.tsx +16 -16
  615. package/src/components/signature-pad.tsx +21 -13
  616. package/src/components/signed-amount.tsx +6 -14
  617. package/src/components/skeleton.tsx +2 -13
  618. package/src/components/slider.tsx +9 -20
  619. package/src/components/sparkline.tsx +2 -13
  620. package/src/components/stat-tile.tsx +13 -24
  621. package/src/components/swatch-picker.tsx +8 -3
  622. package/src/components/swipeable-row.tsx +2 -11
  623. package/src/components/table-skeleton.tsx +4 -1
  624. package/src/components/table.tsx +12 -8
  625. package/src/components/tabs.tsx +24 -39
  626. package/src/components/text-link.tsx +6 -6
  627. package/src/components/text.tsx +1 -2
  628. package/src/components/tile-radio.tsx +6 -19
  629. package/src/components/time-input.tsx +4 -5
  630. package/src/components/toast.tsx +3 -12
  631. package/src/components/toggle-group.tsx +9 -9
  632. package/src/components/toggle-legend.tsx +4 -16
  633. package/src/components/tooltip.tsx +9 -48
  634. package/src/components/translation-review-editor.tsx +4 -4
  635. package/src/components/translation-review-parts.tsx +7 -1
  636. package/src/components/translation-review.tsx +15 -16
  637. package/src/components/tree-view.tsx +17 -20
  638. package/src/components/treemap.tsx +59 -9
  639. package/src/components/trigger-aria.ts +1 -4
  640. package/src/components/use-table-state.ts +16 -17
  641. package/src/components/user-avatar.tsx +4 -21
  642. package/src/demo/demo-start.tsx +8 -4
  643. package/src/feedback/feedback-attachment-labels.ts +2 -1
  644. package/src/feedback/feedback-attachment.tsx +16 -29
  645. package/src/feedback/feedback-capture.ts +3 -1
  646. package/src/feedback/feedback-comment-thread.tsx +9 -6
  647. package/src/feedback/feedback-context.tsx +1 -4
  648. package/src/feedback/feedback-dialog.tsx +3 -4
  649. package/src/feedback/feedback-inbox.tsx +3 -9
  650. package/src/feedback/feedback-public-list.tsx +7 -1
  651. package/src/feedback/feedback-record.ts +6 -14
  652. package/src/feedback/feedback-replies.tsx +10 -5
  653. package/src/feedback/feedback-row-detail.tsx +2 -5
  654. package/src/feedback/feedback-status-undo.ts +1 -4
  655. package/src/feedback/feedback-submit-dialog.tsx +4 -4
  656. package/src/feedback/feedback-table.tsx +12 -8
  657. package/src/feedback/feedback-thread.tsx +4 -16
  658. package/src/feedback/feedback-vocabulary.ts +72 -82
  659. package/src/feedback/feedback-vote-button.tsx +9 -8
  660. package/src/hooks/use-anchored-rect.ts +1 -4
  661. package/src/hooks/use-document-title.ts +3 -1
  662. package/src/hooks/use-file-drop.ts +1 -3
  663. package/src/hooks/use-file-picker-labels.ts +1 -2
  664. package/src/hooks/use-file-picker.tsx +1 -5
  665. package/src/hooks/use-focus-trap.ts +1 -2
  666. package/src/hooks/use-overlay-history.ts +10 -5
  667. package/src/hooks/use-row-swipe.ts +1 -6
  668. package/src/i18n/defaults.ts +1 -4
  669. package/src/i18n/german.ts +33 -49
  670. package/src/i18n/kit-labels.tsx +5 -20
  671. package/src/i18n/languages.ts +2 -8
  672. package/src/i18n/locales/en.ts +11 -31
  673. package/src/i18n/locales/es.ts +35 -49
  674. package/src/i18n/locales/fr.ts +34 -51
  675. package/src/i18n/locales/hu.ts +26 -37
  676. package/src/i18n/locales/it.ts +35 -52
  677. package/src/i18n/locales/zh.ts +14 -32
  678. package/src/i18n/plurals.ts +4 -1
  679. package/src/i18n/review.ts +18 -7
  680. package/src/i18n/shared-labels.ts +1 -2
  681. package/src/index.ts +106 -32
  682. package/src/landing/access.ts +2 -7
  683. package/src/landing/landing-sections.tsx +14 -15
  684. package/src/landing/page-seo.ts +1 -3
  685. package/src/lib/calc.ts +4 -1
  686. package/src/lib/clipboard-minus.ts +4 -1
  687. package/src/lib/dates.ts +2 -10
  688. package/src/lib/decimal-marks.ts +1 -3
  689. package/src/lib/device-settings.ts +2 -1
  690. package/src/lib/direction.ts +1 -3
  691. package/src/lib/iban.ts +89 -9
  692. package/src/lib/logger.ts +1 -5
  693. package/src/lib/person-name.ts +1 -3
  694. package/src/lib/phone.ts +5 -8
  695. package/src/lib/qr-encode.ts +32 -8
  696. package/src/lib/session-refresh.ts +5 -6
  697. package/src/lib/table-text.ts +24 -6
  698. package/src/lib/text-match.ts +15 -3
  699. package/src/lib/translation-review.ts +1 -3
  700. package/src/notifications/notification-inbox.tsx +17 -4
  701. package/src/notifications/notification-parts.tsx +1 -2
  702. package/src/notifications/notification-types-setting.tsx +19 -18
  703. package/src/notifications/notifications-labels.ts +1 -2
  704. package/src/notifications/push-device-setting.tsx +7 -1
  705. package/src/notifications/push-devices-setting.tsx +7 -3
  706. package/src/notifications/push-worker.ts +10 -2
  707. package/src/notifications/quiet-hours-setting.tsx +4 -1
  708. package/src/notifications/use-push-device.ts +4 -1
  709. package/src/offline/pwa-update-prompt.tsx +7 -1
  710. package/src/offline/query-persistence.ts +9 -6
  711. package/src/offline.ts +6 -1
  712. package/src/rhf/fields.tsx +50 -19
  713. package/src/rhf/form-core.tsx +2 -6
  714. package/src/rhf/line-items.tsx +5 -7
  715. package/src/rhf/use-rhf-wizard-step.ts +3 -12
  716. package/src/search/command-palette.tsx +15 -23
  717. package/src/search/global-search.tsx +38 -8
  718. package/src/search/search-index.ts +5 -1
  719. package/src/settings/device-reset-setting.tsx +5 -8
  720. package/src/settings/settings-heading.tsx +3 -1
  721. package/src/settings/settings-layout.tsx +6 -13
  722. package/src/settings/use-settings-route.ts +4 -3
  723. package/src/shell/app-shell.tsx +48 -24
  724. package/src/shell/auth-layout.tsx +1 -6
  725. package/src/shell/dev-menu.tsx +12 -6
  726. package/src/shell/option-switcher-menu.tsx +1 -3
  727. package/src/shell/sync-status-indicator.tsx +14 -12
  728. package/src/shell/top-bar-parts-labels.ts +1 -3
  729. package/src/shell/topbar-action-menu.tsx +9 -8
  730. package/src/shell/topbar-controls.tsx +5 -19
  731. package/src/shell/tour-menu.tsx +9 -1
  732. package/src/sync/db.ts +5 -1
  733. package/src/sync/engine.ts +44 -12
  734. package/src/sync.ts +16 -2
  735. package/src/testing/css-variables.ts +1 -2
  736. package/src/testing/index.ts +1 -6
  737. package/src/testing/react.ts +1 -2
  738. package/src/testing/viewport.ts +9 -9
  739. package/src/theme/contrast-tokens.ts +13 -2
  740. package/src/theme/palette-derive.ts +24 -50
  741. package/src/theme/palette-presets.ts +0 -1
  742. package/src/theme/palette-store.ts +1 -4
  743. package/src/theme/text-size.ts +1 -1
  744. package/src/theme/theme-store.ts +2 -6
  745. package/src/tour/tour-catalogue.tsx +4 -2
  746. package/src/tour/tour-dock.ts +5 -1
  747. package/src/tour/tour-engine.ts +2 -6
  748. package/src/tour/tour.tsx +28 -12
  749. package/src/tour/use-tour-progress.ts +8 -2
  750. package/src/tour/use-tour-url-sync.ts +3 -1
  751. package/src/vite-env.d.ts +1 -4
  752. package/src/wizard/stepper-nav.tsx +10 -35
  753. package/src/wizard/types.ts +1 -4
  754. package/src/wizard/use-wizard.ts +28 -43
  755. package/src/wizard/validation.ts +1 -5
  756. package/src/wizard/wizard-context.tsx +2 -6
  757. package/src/wizard/wizard-step.tsx +1 -8
  758. package/src/wizard/wizard-summary.tsx +2 -6
  759. package/tokens.css +393 -152
@@ -86,23 +86,23 @@ export function SignChip({ negative, onNegativeChange, disabled, labels: labelsP
86
86
  // and the bubble that said only that goes.
87
87
  const large = useLargeText();
88
88
  const chip = (
89
- <Chip
90
- size="lg"
91
- tone={negative ? "expense" : "income"}
92
- icon={negative ? Minus : Plus}
93
- onClick={() => onNegativeChange(!negative)}
94
- disabled={disabled}
95
- aria-label={name}
96
- // `gap-1.5 px-3`: the chip's narrower body, because on a 375px screen every
97
- // pixel of it is taken from the figure beside it (#430). `md:py-2.5` with the
98
- // hairline border is the 42px a labelled field measures (#431).
99
- className={cn("shrink-0 gap-1.5 whitespace-nowrap px-3 font-medium md:min-h-0 md:py-2.5", !large && className)}
100
- >
101
- {current}
102
- {/* The swap arrows after the word, in the label's own row: decoration (the
89
+ <Chip
90
+ size="lg"
91
+ tone={negative ? "expense" : "income"}
92
+ icon={negative ? Minus : Plus}
93
+ onClick={() => onNegativeChange(!negative)}
94
+ disabled={disabled}
95
+ aria-label={name}
96
+ // `gap-1.5 px-3`: the chip's narrower body, because on a 375px screen every
97
+ // pixel of it is taken from the figure beside it (#430). `md:py-2.5` with the
98
+ // hairline border is the 42px a labelled field measures (#431).
99
+ className={cn("shrink-0 gap-1.5 whitespace-nowrap px-3 font-medium md:min-h-0 md:py-2.5", !large && className)}
100
+ >
101
+ {current}
102
+ {/* The swap arrows after the word, in the label's own row: decoration (the
103
103
  name already says what a press does), set a little apart from the word. */}
104
- <ArrowUpDown className="ms-1.5 inline size-3.5 align-[-0.2em] opacity-60" aria-hidden />
105
- </Chip>
104
+ <ArrowUpDown className="ms-1.5 inline size-3.5 align-[-0.2em] opacity-60" aria-hidden />
105
+ </Chip>
106
106
  );
107
107
  if (!large) {
108
108
  return (
@@ -1,5 +1,11 @@
1
1
  import { useCallback, useEffect, useId, useImperativeHandle, useLayoutEffect, useRef, useState } from "react";
2
- import type { ComponentPropsWithoutRef, ComponentPropsWithRef, PointerEvent as ReactPointerEvent, ReactNode, Ref } from "react";
2
+ import type {
3
+ ComponentPropsWithoutRef,
4
+ ComponentPropsWithRef,
5
+ PointerEvent as ReactPointerEvent,
6
+ ReactNode,
7
+ Ref,
8
+ } from "react";
3
9
  import { Eraser, Keyboard, PenLine, Undo2 } from "lucide-react";
4
10
  import { cn } from "../lib/cn";
5
11
  import { hasContent } from "../lib/presence";
@@ -430,7 +436,10 @@ export function SignaturePad({
430
436
 
431
437
  /* ── Pointer ── */
432
438
 
433
- const toPoint = (e: { clientX: number; clientY: number; pressure: number; pointerType: string }, rect: DOMRect): Point => {
439
+ const toPoint = (
440
+ e: { clientX: number; clientY: number; pressure: number; pointerType: string },
441
+ rect: DOMRect,
442
+ ): Point => {
434
443
  const scale = refWidth.current > 0 && rect.width > 0 ? rect.width / refWidth.current : 1;
435
444
  return {
436
445
  x: (e.clientX - rect.left) / scale,
@@ -605,13 +614,12 @@ export function SignaturePad({
605
614
  {labels.clear}
606
615
  </Button>
607
616
  {allowTypedName && (
608
- <Button
609
- type="button"
610
- variant="secondary"
611
- onClick={switchMode}
612
- disabled={disabled}
613
- >
614
- {typed ? <PenLine aria-hidden="true" className="size-4" /> : <Keyboard aria-hidden="true" className="size-4" />}
617
+ <Button type="button" variant="secondary" onClick={switchMode} disabled={disabled}>
618
+ {typed ? (
619
+ <PenLine aria-hidden="true" className="size-4" />
620
+ ) : (
621
+ <Keyboard aria-hidden="true" className="size-4" />
622
+ )}
615
623
  {typed ? labels.useDrawn : labels.useTyped}
616
624
  </Button>
617
625
  )}
@@ -696,7 +704,9 @@ export function SignatureView({
696
704
  data-empty={kind === "empty" || undefined}
697
705
  >
698
706
  {captioned && (
699
- <figcaption id={captionId} className="block text-sm font-medium text-primary">{caption}</figcaption>
707
+ <figcaption id={captionId} className="block text-sm font-medium text-primary">
708
+ {caption}
709
+ </figcaption>
700
710
  )}
701
711
  <div
702
712
  className={cn(
@@ -725,9 +735,7 @@ export function SignatureView({
725
735
  {name}
726
736
  </span>
727
737
  )}
728
- {kind === "empty" && (
729
- <span className="relative text-xs text-muted">{labels.viewEmpty}</span>
730
- )}
738
+ {kind === "empty" && <span className="relative text-xs text-muted">{labels.viewEmpty}</span>}
731
739
  {/* The signing line, as on the pad. Decoration only. */}
732
740
  <div
733
741
  aria-hidden="true"
@@ -20,16 +20,7 @@ import { DEFAULT_SIGNED_AMOUNT_LABELS } from "./signed-amount-labels";
20
20
  * Colour is never the only carrier: pair a verdict with an arrow, a word, or a sign.
21
21
  */
22
22
  export type TextTone =
23
- | "default"
24
- | "muted"
25
- | "brand"
26
- | "income"
27
- | "expense"
28
- | "net"
29
- | "success"
30
- | "warning"
31
- | "danger"
32
- | "info";
23
+ "default" | "muted" | "brand" | "income" | "expense" | "net" | "success" | "warning" | "danger" | "info";
33
24
 
34
25
  const TEXT_TONE: Record<TextTone, string> = {
35
26
  default: "text-primary",
@@ -166,9 +157,7 @@ function signedToneClass(
166
157
 
167
158
  const ARROW = { up: ArrowUp, down: ArrowDown, flat: Minus } as const;
168
159
 
169
- export interface SignedAmountProps
170
- extends SignedFormatProps,
171
- Omit<ComponentPropsWithRef<"span">, "children"> {
160
+ export interface SignedAmountProps extends SignedFormatProps, Omit<ComponentPropsWithRef<"span">, "children"> {
172
161
  value: number;
173
162
  /** See {@link SignedAmountTone}. Default `signed`, or `verdict` with `goodDirection`. */
174
163
  tone?: SignedAmountTone;
@@ -324,7 +313,10 @@ export function Delta({
324
313
  data-direction={dir}
325
314
  className={cn("relative inline-flex flex-wrap items-center gap-x-1.5 tabular-nums", className)}
326
315
  >
327
- <span data-private={sensitive ? "" : undefined} className={cn("inline-flex items-center gap-0.5 font-medium", tone)}>
316
+ <span
317
+ data-private={sensitive ? "" : undefined}
318
+ className={cn("inline-flex items-center gap-0.5 font-medium", tone)}
319
+ >
328
320
  {arrow && <Icon className="size-[1em] shrink-0" aria-hidden />}
329
321
  {/* The figure at zero too, beside the flat dash (kastlan feedback #48). Before
330
322
  this a flat delta with an arrow drew the dash ALONE, as a StatTile does — so
@@ -71,21 +71,10 @@ function SkeletonFill({ shape = "line", lines, className, ...rest }: Omit<Skelet
71
71
  return (
72
72
  <div {...rest} aria-hidden className={cn("flex flex-col gap-2", className)} data-skeleton="lines">
73
73
  {Array.from({ length: lines }, (_, i) => (
74
- <div
75
- key={i}
76
- className={cn(SKELETON_CLASS, SHAPE.line, i === lines - 1 && "w-2/3")}
77
- data-skeleton="line"
78
- />
74
+ <div key={i} className={cn(SKELETON_CLASS, SHAPE.line, i === lines - 1 && "w-2/3")} data-skeleton="line" />
79
75
  ))}
80
76
  </div>
81
77
  );
82
78
  }
83
- return (
84
- <div
85
- {...rest}
86
- aria-hidden
87
- data-skeleton={shape}
88
- className={cn(SKELETON_CLASS, SHAPE[shape], className)}
89
- />
90
- );
79
+ return <div {...rest} aria-hidden data-skeleton={shape} className={cn(SKELETON_CLASS, SHAPE[shape], className)} />;
91
80
  }
@@ -120,10 +120,11 @@ export interface SliderMark {
120
120
  }
121
121
 
122
122
  export interface SliderProps
123
- extends Omit<
124
- InputHTMLAttributes<HTMLInputElement>,
125
- "type" | "value" | "defaultValue" | "onChange" | "min" | "max" | "step" | "children"
126
- >,
123
+ extends
124
+ Omit<
125
+ InputHTMLAttributes<HTMLInputElement>,
126
+ "type" | "value" | "defaultValue" | "onChange" | "min" | "max" | "step" | "children"
127
+ >,
127
128
  FieldHelpProps {
128
129
  /** The value. On a log scale this is the real value, not the track position. */
129
130
  value: number;
@@ -235,8 +236,7 @@ export function Slider({
235
236
  // digits; it is not formatting, and `formatValue` is how to get a locale.
236
237
  const valueText = formatValue
237
238
  ? formatValue(value)
238
- : (rest["aria-valuetext"] ??
239
- (log || outOfRange ? String(Number(value.toPrecision(4))) : undefined));
239
+ : (rest["aria-valuetext"] ?? (log || outOfRange ? String(Number(value.toPrecision(4))) : undefined));
240
240
 
241
241
  const handleChange = (e: ChangeEvent<HTMLInputElement>) => {
242
242
  const raw = Number(e.target.value);
@@ -280,21 +280,13 @@ export function Slider({
280
280
  // drops to a line of its own, still at the end, only when the two don't fit.
281
281
  <div className="flex flex-wrap items-center gap-x-2 gap-y-0.5">
282
282
  {label !== undefined && (
283
- <label
284
- htmlFor={inputId}
285
- className="min-w-0 select-none text-xs font-medium text-secondary"
286
- >
283
+ <label htmlFor={inputId} className="min-w-0 select-none text-xs font-medium text-secondary">
287
284
  {label}
288
285
  </label>
289
286
  )}
290
287
  {labelHint !== undefined && <span className="flex shrink-0 items-center">{labelHint}</span>}
291
288
  {readout !== undefined && (
292
- <span
293
- className={cn(
294
- "ms-auto max-w-full text-xs tabular-nums text-primary",
295
- plainReadout && "select-none",
296
- )}
297
- >
289
+ <span className={cn("ms-auto max-w-full text-xs tabular-nums text-primary", plainReadout && "select-none")}>
298
290
  {readout}
299
291
  </span>
300
292
  )}
@@ -323,10 +315,7 @@ export function Slider({
323
315
  // `min`, not under the track's rounded end. Each tick is a zero-width column
324
316
  // centred on its point, which centres its label on it in either direction
325
317
  // without a `translate` that would need flipping for right-to-left.
326
- <div
327
- aria-hidden
328
- className={cn("relative mx-2 -mt-1.5", MARKS_LARGE, hasMarkLabels ? "h-5" : "h-1.5")}
329
- >
318
+ <div aria-hidden className={cn("relative mx-2 -mt-1.5", MARKS_LARGE, hasMarkLabels ? "h-5" : "h-1.5")}>
330
319
  {normalizedMarks.map((m) => (
331
320
  <span
332
321
  key={m.value}
@@ -39,17 +39,7 @@ export { DEFAULT_SPARKLINE_LABELS };
39
39
  * own value, a line or area takes the colour of its LAST value (where it ended up).
40
40
  */
41
41
  export type SparklineTone =
42
- | "chart"
43
- | "brand"
44
- | "muted"
45
- | "income"
46
- | "expense"
47
- | "net"
48
- | "signed"
49
- | "success"
50
- | "warning"
51
- | "danger"
52
- | "info";
42
+ "chart" | "brand" | "muted" | "income" | "expense" | "net" | "signed" | "success" | "warning" | "danger" | "info";
53
43
 
54
44
  // `color`, not `stroke`/`fill`: every mark paints with `currentColor`, so one class
55
45
  // per element is enough and a signed bar chart needs no second lookup table.
@@ -70,8 +60,7 @@ const signedClass = (v: number) => (v < 0 ? TONE_CLASS.expense : TONE_CLASS.inco
70
60
 
71
61
  /** `children` is the marks and `width`/`height` are numbers here (or `fluid`), so
72
62
  * those three are the sparkline's own; everything else lands on the `<svg>`. */
73
- export interface SparklineProps
74
- extends Omit<ComponentPropsWithRef<"svg">, "children" | "width" | "height"> {
63
+ export interface SparklineProps extends Omit<ComponentPropsWithRef<"svg">, "children" | "width" | "height"> {
75
64
  /** The series, oldest first. `null`/`undefined`/`NaN` is a GAP — the line breaks
76
65
  * there rather than drawing a zero or bridging across the missing point. */
77
66
  data: ReadonlyArray<number | null | undefined>;
@@ -52,16 +52,7 @@ export { DEFAULT_STAT_TILE_LABELS };
52
52
  * below 30°"). Say it in the hint or description as well; colour alone is not one.
53
53
  */
54
54
  export type StatTileTone =
55
- | "neutral"
56
- | "brand"
57
- | "income"
58
- | "expense"
59
- | "net"
60
- | "signed"
61
- | "success"
62
- | "warning"
63
- | "danger"
64
- | "info";
55
+ "neutral" | "brand" | "income" | "expense" | "net" | "signed" | "success" | "warning" | "danger" | "info";
65
56
 
66
57
  const TONE_CLASS: Record<Exclude<StatTileTone, "signed">, string> = {
67
58
  neutral: "text-primary",
@@ -124,8 +115,7 @@ export interface StatTileLinkProps {
124
115
  * one to scroll into view or measure. `ComponentPropsWithoutRef` only kept it out of the
125
116
  * type; at runtime `{...rest}` already carried it there.
126
117
  */
127
- export interface StatTileProps
128
- extends Omit<ComponentPropsWithRef<"div">, "children" | "onClick"> {
118
+ export interface StatTileProps extends Omit<ComponentPropsWithRef<"div">, "children" | "onClick"> {
129
119
  /** What is measured. Also the tile's accessible name when it is a link/button. */
130
120
  label: ReactNode;
131
121
  /**
@@ -435,7 +425,11 @@ export function StatTile({
435
425
  // `relative`: the containing block for the sr-only sentence (see the
436
426
  // sr-only-containment test for what an escaped one does to the page).
437
427
  <div className="relative mt-1 flex flex-wrap items-center gap-x-1.5 text-xs tabular-nums">
438
- <span id={deltaId} data-private={priv} className={cn("inline-flex items-center gap-0.5 font-medium", deltaTone)}>
428
+ <span
429
+ id={deltaId}
430
+ data-private={priv}
431
+ className={cn("inline-flex items-center gap-0.5 font-medium", deltaTone)}
432
+ >
439
433
  <Icon className="size-3 shrink-0" aria-hidden />
440
434
  {/* The figure at zero too, like Delta (kastlan 48): "0 %" says the change was
441
435
  measured; a bare dash reads like a missing value. */}
@@ -448,11 +442,7 @@ export function StatTile({
448
442
  }
449
443
 
450
444
  // ── Headline ──
451
- const valueClass = cn(
452
- "whitespace-nowrap font-semibold tabular-nums",
453
- VALUE_TEXT[size],
454
- toneClass(tone, value),
455
- );
445
+ const valueClass = cn("whitespace-nowrap font-semibold tabular-nums", VALUE_TEXT[size], toneClass(tone, value));
456
446
  const headline = loading ? (
457
447
  <span id={valueId} className="relative block py-0.5">
458
448
  <span aria-hidden className={cn(SKELETON_CLASS, "block h-6 w-24 max-w-full")} />
@@ -461,9 +451,7 @@ export function StatTile({
461
451
  ) : hasValue ? (
462
452
  <span id={valueId} data-private={priv} className={cn(valueClass, valueLabel != null && !large && "ms-auto")}>
463
453
  {show(value)}
464
- {unit != null && (
465
- <span className="ms-1 text-[0.7em] font-medium text-muted">{unit}</span>
466
- )}
454
+ {unit != null && <span className="ms-1 text-[0.7em] font-medium text-muted">{unit}</span>}
467
455
  </span>
468
456
  ) : (
469
457
  <span id={valueId} className={cn("relative", valueClass, "text-muted")}>
@@ -472,8 +460,9 @@ export function StatTile({
472
460
  </span>
473
461
  );
474
462
 
475
- const graphic =
476
- loading ? null : sparkline ??
463
+ const graphic = loading
464
+ ? null
465
+ : (sparkline ??
477
466
  (trend && (
478
467
  <Sparkline
479
468
  data={trend}
@@ -485,7 +474,7 @@ export function StatTile({
485
474
  tone={tone === "signed" ? "signed" : tone === "neutral" ? "chart" : tone}
486
475
  data-private={priv}
487
476
  />
488
- ));
477
+ )));
489
478
 
490
479
  return (
491
480
  <Card
@@ -62,8 +62,7 @@ export interface SwatchOption<T extends string> {
62
62
  * is omitted rather than shadowed, as on {@link ToggleGroup}.
63
63
  */
64
64
  export interface SwatchPickerProps<T extends string>
65
- extends Omit<ComponentPropsWithRef<"div">, "onChange" | "children" | "defaultValue">,
66
- FieldHelpProps {
65
+ extends Omit<ComponentPropsWithRef<"div">, "onChange" | "children" | "defaultValue">, FieldHelpProps {
67
66
  options: SwatchOption<T>[];
68
67
  /** The chosen colour, or `null` for none. */
69
68
  value: T | null;
@@ -270,7 +269,13 @@ export function SwatchPicker<T extends string>({
270
269
  );
271
270
  if (!labelled) return group;
272
271
  return (
273
- <LabelStrip labelId={labelId} label={label} hint={messages.labelHint} disabled={disabled || locked} className={className}>
272
+ <LabelStrip
273
+ labelId={labelId}
274
+ label={label}
275
+ hint={messages.labelHint}
276
+ disabled={disabled || locked}
277
+ className={className}
278
+ >
274
279
  {group}
275
280
  {messages.below}
276
281
  </LabelStrip>
@@ -192,14 +192,7 @@ const PEEK_PX = 40;
192
192
  * the eye and not from the accessibility tree, so the row also ANNOUNCES what can be
193
193
  * done to it rather than keeping it behind a gesture nobody can hear.
194
194
  */
195
- export function SwipeableRow({
196
- right,
197
- left,
198
- enabled = true,
199
- actionsLabel,
200
- className,
201
- children,
202
- }: SwipeableRowProps) {
195
+ export function SwipeableRow({ right, left, enabled = true, actionsLabel, className, children }: SwipeableRowProps) {
203
196
  const labels = useKitLabels("swipeableRow", DEFAULT_SWIPEABLE_ROW_LABELS, {
204
197
  actions: actionsLabel,
205
198
  });
@@ -309,9 +302,7 @@ export function SwipeableRow({
309
302
  {shown.icon}
310
303
  </span>
311
304
  )}
312
- <span className={cn("truncate transition-all", armed && "text-sm font-semibold")}>
313
- {shown.label}
314
- </span>
305
+ <span className={cn("truncate transition-all", armed && "text-sm font-semibold")}>{shown.label}</span>
315
306
  </div>
316
307
  )}
317
308
  <div
@@ -70,7 +70,10 @@ export function TableSkeleton({
70
70
  ) : (
71
71
  <div
72
72
  key={key}
73
- className={cn("flex items-center gap-4 px-4 py-3", stack && "max-sm:flex-col max-sm:items-stretch max-sm:gap-2")}
73
+ className={cn(
74
+ "flex items-center gap-4 px-4 py-3",
75
+ stack && "max-sm:flex-col max-sm:items-stretch max-sm:gap-2",
76
+ )}
74
77
  data-skeleton-row=""
75
78
  >
76
79
  <Skeleton className={cn("h-4", NAME_WIDTHS[key % NAME_WIDTHS.length])} />
@@ -1,4 +1,14 @@
1
- import { Children, createContext, useCallback, useContext, useId, useLayoutEffect, useMemo, useRef, useState } from "react";
1
+ import {
2
+ Children,
3
+ createContext,
4
+ useCallback,
5
+ useContext,
6
+ useId,
7
+ useLayoutEffect,
8
+ useMemo,
9
+ useRef,
10
+ useState,
11
+ } from "react";
2
12
  import type { ComponentPropsWithRef, ReactNode, Ref } from "react";
3
13
  import { cn } from "../lib/cn";
4
14
  import { useEdgeFade } from "../lib/strip-fade";
@@ -633,11 +643,5 @@ export type TableCaptionProps = ComponentPropsWithRef<"caption">;
633
643
  export function TableCaption({ className, id, ...rest }: TableCaptionProps) {
634
644
  const { captionId, registerCaption } = useContext(TableContext);
635
645
  useLayoutEffect(() => (id ? undefined : registerCaption()), [id, registerCaption]);
636
- return (
637
- <caption
638
- {...rest}
639
- id={id ?? captionId}
640
- className={cn("mt-2 text-start text-sm text-muted", className)}
641
- />
642
- );
646
+ return <caption {...rest} id={id ?? captionId} className={cn("mt-2 text-start text-sm text-muted", className)} />;
643
647
  }
@@ -66,8 +66,7 @@ export { DEFAULT_TABS_LABELS };
66
66
  * `children` because the strip renders `tabs` — a caller who wants a PANEL wires it up
67
67
  * through `panelId`, which is the whole point of that prop.
68
68
  */
69
- export interface TabsProps<T extends string>
70
- extends Omit<ComponentPropsWithoutRef<"div">, "onChange" | "children"> {
69
+ export interface TabsProps<T extends string> extends Omit<ComponentPropsWithoutRef<"div">, "onChange" | "children"> {
71
70
  /** `label` is a ReactNode so tabs can pair an icon with text; `badge` is an
72
71
  * optional trailing node (e.g. a count pill). `href` marks a tab that IS a route:
73
72
  * it renders as an anchor so it can be middle-/⌘-clicked into a new tab (Keksdose
@@ -200,8 +199,7 @@ export interface TabsProps<T extends string>
200
199
  ref?: Ref<HTMLDivElement>;
201
200
  }
202
201
 
203
- const TABLIST_CLASSES =
204
- "flex gap-1 overflow-x-auto overflow-y-hidden border-b border-subtle";
202
+ const TABLIST_CLASSES = "flex gap-1 overflow-x-auto overflow-y-hidden border-b border-subtle";
205
203
  // The side nav. A column of full-width rows with the open one FILLED rather than
206
204
  // underlined: an underline under one row of a list reads as a separator, not as a
207
205
  // selection. `--bg-active` is the kit's own selected-row fill (the sidebar's), so the
@@ -211,8 +209,7 @@ const TAB_VERTICAL_CLASSES =
211
209
  FOCUS_RING_WIDTH +
212
210
  " flex w-full items-center rounded-md px-3 py-2 text-start text-sm font-medium transition-colors focus:outline-none focus-visible:ring-strong";
213
211
  const TAB_VERTICAL_ACTIVE_CLASSES = "bg-active text-primary";
214
- const TAB_VERTICAL_INACTIVE_CLASSES =
215
- "text-muted hover:bg-hover hover:text-primary";
212
+ const TAB_VERTICAL_INACTIVE_CLASSES = "text-muted hover:bg-hover hover:text-primary";
216
213
 
217
214
  // `max-w-full`: no tab outgrows its strip. A sheet's `detail` line ("Spurstangenkraft
218
215
  // links · … · 31 Punkte") made one tab 448px wide in a 390px strip, and a tab wider
@@ -222,8 +219,7 @@ const TAB_CLASSES =
222
219
  FOCUS_RING_WIDTH +
223
220
  " max-w-full whitespace-nowrap px-3 py-2 text-sm font-medium transition-colors border-b-2 -mb-px focus:outline-none focus-visible:ring-strong";
224
221
  const TAB_ACTIVE_CLASSES = "border-[var(--text-primary)] text-primary";
225
- const TAB_INACTIVE_CLASSES =
226
- "border-transparent text-muted hover:text-secondary hover:border-strong";
222
+ const TAB_INACTIVE_CLASSES = "border-transparent text-muted hover:text-secondary hover:border-strong";
227
223
 
228
224
  // The add/remove chrome. The × reserves its gutter on every removable tab (see
229
225
  // `onRemove`).
@@ -321,7 +317,11 @@ export function Tabs<T extends string>({
321
317
  labelVisible={false}
322
318
  onClick={() => onCue(side)}
323
319
  >
324
- {side === "start" ? <ChevronLeft className="rtl:-scale-x-100" /> : <ChevronRight className="rtl:-scale-x-100" />}
320
+ {side === "start" ? (
321
+ <ChevronLeft className="rtl:-scale-x-100" />
322
+ ) : (
323
+ <ChevronRight className="rtl:-scale-x-100" />
324
+ )}
325
325
  </IconButton>
326
326
  </div>
327
327
  )}
@@ -340,10 +340,8 @@ export function Tabs<T extends string>({
340
340
  }, [active]);
341
341
  const isRemovable = (tab: TabItem<T>) => onRemove !== undefined && tab.removable !== false;
342
342
  // Whether Delete reaches this tab: every removable tab, or only the open one.
343
- const deletesOnKey = (tab: TabItem<T>) =>
344
- isRemovable(tab) && (removeOn === "every" || tab.id === active);
345
- const nameOf = (tab: TabItem<T>) =>
346
- tab.name ?? (typeof tab.label === "string" ? tab.label : tab.id);
343
+ const deletesOnKey = (tab: TabItem<T>) => isRemovable(tab) && (removeOn === "every" || tab.id === active);
344
+ const nameOf = (tab: TabItem<T>) => tab.name ?? (typeof tab.label === "string" ? tab.label : tab.id);
347
345
 
348
346
  // Where focus goes once a removal the strip asked for has happened. The caller
349
347
  // owns `tabs` and may take its time (a confirmation, a request), so this waits
@@ -372,10 +370,7 @@ export function Tabs<T extends string>({
372
370
  if (focused && focused !== document.body && !strip.contains(focused) && focused !== removeRef.current) return;
373
371
  // The removed tab was open: focus follows the caller's new selection, which is
374
372
  // also the strip's tab stop. It was not: its neighbour, as the ARIA pattern has it.
375
- const target =
376
- !pending.wasActive && tabs.some((t) => t.id === pending.neighbour)
377
- ? pending.neighbour
378
- : active;
373
+ const target = !pending.wasActive && tabs.some((t) => t.id === pending.neighbour) ? pending.neighbour : active;
379
374
  const index = tabs.findIndex((t) => t.id === target);
380
375
  strip.querySelectorAll<HTMLElement>('[role="tab"]')[index]?.focus();
381
376
  }, [tabs, active]);
@@ -419,12 +414,7 @@ export function Tabs<T extends string>({
419
414
  const from = items.indexOf(e.currentTarget);
420
415
  if (from === -1) return;
421
416
  e.preventDefault();
422
- const to =
423
- e.key === "Home"
424
- ? 0
425
- : e.key === "End"
426
- ? items.length - 1
427
- : (from + step + items.length) % items.length;
417
+ const to = e.key === "Home" ? 0 : e.key === "End" ? items.length - 1 : (from + step + items.length) % items.length;
428
418
  items[to]?.focus();
429
419
  };
430
420
  const tablist = (
@@ -485,18 +475,16 @@ export function Tabs<T extends string>({
485
475
  isActive ? TAB_VERTICAL_ACTIVE_CLASSES : TAB_VERTICAL_INACTIVE_CLASSES,
486
476
  removable && "pe-8",
487
477
  )
488
- : cn(
489
- TAB_CLASSES,
490
- isActive ? TAB_ACTIVE_CLASSES : TAB_INACTIVE_CLASSES,
491
- removable && TAB_REMOVABLE_CLASSES,
492
- ),
478
+ : cn(TAB_CLASSES, isActive ? TAB_ACTIVE_CLASSES : TAB_INACTIVE_CLASSES, removable && TAB_REMOVABLE_CLASSES),
493
479
  };
494
480
  const inner = (
495
481
  <span
496
482
  className={cn(
497
483
  // In a side nav the row is the full width, so the label takes it and a
498
484
  // badge lands at the row's end, where a column of counts lines up.
499
- vertical ? "flex min-w-0 flex-1 items-center gap-1.5" : "inline-flex max-w-full min-w-0 items-center gap-1.5",
485
+ vertical
486
+ ? "flex min-w-0 flex-1 items-center gap-1.5"
487
+ : "inline-flex max-w-full min-w-0 items-center gap-1.5",
500
488
  tab.empty && TAB_EMPTY_CLASSES,
501
489
  )}
502
490
  >
@@ -523,7 +511,11 @@ export function Tabs<T extends string>({
523
511
  tab.label
524
512
  )}
525
513
  {tab.badge != null ? (
526
- vertical ? <span className="ms-auto flex shrink-0 items-center">{tab.badge}</span> : tab.badge
514
+ vertical ? (
515
+ <span className="ms-auto flex shrink-0 items-center">{tab.badge}</span>
516
+ ) : (
517
+ tab.badge
518
+ )
527
519
  ) : null}
528
520
  </span>
529
521
  );
@@ -671,15 +663,8 @@ export function Tabs<T extends string>({
671
663
  {removeButton}
672
664
  {/* Outside the tablist: an action, not a tab — and a tablist may own only
673
665
  tabs. The rule under the strip carries on beneath it. */}
674
- <div
675
- className="flex flex-1 items-center self-stretch border-b border-subtle"
676
- >
677
- <button
678
- type="button"
679
- onClick={onAdd}
680
- disabled={busy}
681
- className={cn(TAB_ADD_CLASSES, TAB_ADD_PHONE_CLASSES)}
682
- >
666
+ <div className="flex flex-1 items-center self-stretch border-b border-subtle">
667
+ <button type="button" onClick={onAdd} disabled={busy} className={cn(TAB_ADD_CLASSES, TAB_ADD_PHONE_CLASSES)}>
683
668
  <Plus aria-hidden />
684
669
  {/* Below md a scrolling strip keeps the room for tabs: the label is visually
685
670
  hidden and the "+" carries it as its name. Beside "+ Add loop" a 390px strip
@@ -177,8 +177,10 @@ export interface TextLinkRenderProps {
177
177
  [key: `data-${string}`]: unknown;
178
178
  }
179
179
 
180
- export interface TextLinkProps
181
- extends Omit<ComponentPropsWithoutRef<"a">, "href" | "children" | "aria-current" | "onClick" | "onKeyDown"> {
180
+ export interface TextLinkProps extends Omit<
181
+ ComponentPropsWithoutRef<"a">,
182
+ "href" | "children" | "aria-current" | "onClick" | "onKeyDown"
183
+ > {
182
184
  href: string;
183
185
  children: ReactNode;
184
186
  /** Default `brand`. */
@@ -285,8 +287,7 @@ export function TextLink({
285
287
  const common = useKitLabels("common", DEFAULT_COMMON_LABELS);
286
288
  const kitLink = useKitLink();
287
289
  const underline = underlineProp ?? (UNDERLINED_BY_DEFAULT.has(tone) ? "always" : "hover");
288
- const ariaCurrent: TextLinkCurrent | undefined =
289
- current === true ? "page" : current === false ? undefined : current;
290
+ const ariaCurrent: TextLinkCurrent | undefined = current === true ? "page" : current === false ? undefined : current;
290
291
 
291
292
  const look = cn(
292
293
  "rounded-sm underline-offset-2 transition-colors",
@@ -303,8 +304,7 @@ export function TextLink({
303
304
  {children}
304
305
  {external && (
305
306
  <>
306
- <ExternalLink aria-hidden className="ms-1 inline size-[0.85em] align-[-0.1em] rtl:-scale-x-100" />
307
- {" "}
307
+ <ExternalLink aria-hidden className="ms-1 inline size-[0.85em] align-[-0.1em] rtl:-scale-x-100" />{" "}
308
308
  <span className="sr-only">({common.opensInNewTab})</span>
309
309
  </>
310
310
  )}
@@ -69,8 +69,7 @@ const SECTION_LABEL_BAND_CLASS: Record<SectionLabelSize, string> = {
69
69
  md: "text-caption",
70
70
  sm: "text-xs",
71
71
  };
72
- const BAND =
73
- "block border-b border-subtle bg-surface-2 px-4 py-2 font-medium uppercase tracking-wide text-secondary";
72
+ const BAND = "block border-b border-subtle bg-surface-2 px-4 py-2 font-medium uppercase tracking-wide text-secondary";
74
73
 
75
74
  type SectionLabelElement = "h2" | "h3" | "h4" | "h5" | "h6" | "p" | "span" | "div" | "legend";
76
75