@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
@@ -237,49 +237,45 @@ export function FloatingActionButton({
237
237
  // tooltip replaces it outright.
238
238
  const nativeTip = !wrapped && nativeTitle && title !== "" ? (title ?? label) : undefined;
239
239
  const button = (
240
- <button
241
- {...rest}
242
- hidden={wrapped ? undefined : hidden}
243
- ref={buttonRef}
244
- type={type}
245
- dir={dir}
246
- aria-label={label}
247
- aria-pressed={pressed ?? rest["aria-pressed"]}
248
- title={nativeTip}
249
- style={wrapped ? style : { ...cornerStyle(corner, offset), ...style }}
250
- className={cn(
251
- // Wrapped, the wrapper is the fixed thing and the button sits in it.
252
- !wrapped && "fixed z-40",
253
- "inline-flex items-center justify-center rounded-full",
254
- extended ? "h-12 gap-2 px-4 text-sm font-medium [&_svg]:size-5" : "size-12 [&_svg]:size-6",
255
- "shadow-lg transition-colors disabled:cursor-default",
256
- !toggle &&
257
- variant === "accent" &&
258
- "bg-brand text-brand-contrast hover:bg-brand-hover",
259
- !toggle &&
260
- variant === "surface" &&
261
- "border border-subtle bg-surface text-primary hover:bg-hover disabled:hover:bg-surface",
262
- // A toggle sits on the page's surface — a solid brand disc would read as
263
- // "on" in both states — and says "on" in the brand family.
264
- toggle && "border border-subtle",
265
- pressed === false &&
266
- "bg-surface text-secondary hover:bg-hover hover:text-primary",
267
- pressed === true &&
268
- "border-brand bg-brand-soft text-brand hover:bg-brand-soft-hover hover:text-brand-muted",
269
- "outline-none focus-visible:ring-offset-2",
270
- FOCUS_RING,
271
- className,
272
- )}
273
- >
274
- {icon}
275
- {/* Visible words, not the name: `aria-label` already is the name, and the
240
+ <button
241
+ {...rest}
242
+ hidden={wrapped ? undefined : hidden}
243
+ ref={buttonRef}
244
+ type={type}
245
+ dir={dir}
246
+ aria-label={label}
247
+ aria-pressed={pressed ?? rest["aria-pressed"]}
248
+ title={nativeTip}
249
+ style={wrapped ? style : { ...cornerStyle(corner, offset), ...style }}
250
+ className={cn(
251
+ // Wrapped, the wrapper is the fixed thing and the button sits in it.
252
+ !wrapped && "fixed z-40",
253
+ "inline-flex items-center justify-center rounded-full",
254
+ extended ? "h-12 gap-2 px-4 text-sm font-medium [&_svg]:size-5" : "size-12 [&_svg]:size-6",
255
+ "shadow-lg transition-colors disabled:cursor-default",
256
+ !toggle && variant === "accent" && "bg-brand text-brand-contrast hover:bg-brand-hover",
257
+ !toggle &&
258
+ variant === "surface" &&
259
+ "border border-subtle bg-surface text-primary hover:bg-hover disabled:hover:bg-surface",
260
+ // A toggle sits on the page's surface — a solid brand disc would read as
261
+ // "on" in both states — and says "on" in the brand family.
262
+ toggle && "border border-subtle",
263
+ pressed === false && "bg-surface text-secondary hover:bg-hover hover:text-primary",
264
+ pressed === true && "border-brand bg-brand-soft text-brand hover:bg-brand-soft-hover hover:text-brand-muted",
265
+ "outline-none focus-visible:ring-offset-2",
266
+ FOCUS_RING,
267
+ className,
268
+ )}
269
+ >
270
+ {icon}
271
+ {/* Visible words, not the name: `aria-label` already is the name, and the
276
272
  span would only repeat it. */}
277
- {extended && (
278
- <span aria-hidden className="whitespace-nowrap">
279
- {label}
280
- </span>
281
- )}
282
- </button>
273
+ {extended && (
274
+ <span aria-hidden className="whitespace-nowrap">
275
+ {label}
276
+ </span>
277
+ )}
278
+ </button>
283
279
  );
284
280
  return (
285
281
  <>
@@ -561,14 +557,15 @@ export function FloatingPanel({
561
557
  setOpen(false);
562
558
  }}
563
559
  aria-label={labels.close}
564
- className={cn("-me-1.5 shrink-0 rounded p-1.5 text-muted outline-none hover:bg-hover hover:text-secondary", FOCUS_RING)}
560
+ className={cn(
561
+ "-me-1.5 shrink-0 rounded p-1.5 text-muted outline-none hover:bg-hover hover:text-secondary",
562
+ FOCUS_RING,
563
+ )}
565
564
  >
566
565
  <X aria-hidden className="size-5" />
567
566
  </button>
568
567
  </div>
569
- <div className={cn("min-h-0 flex-1 overflow-y-auto overscroll-contain p-4", bodyClassName)}>
570
- {children}
571
- </div>
568
+ <div className={cn("min-h-0 flex-1 overflow-y-auto overscroll-contain p-4", bodyClassName)}>{children}</div>
572
569
  </div>,
573
570
  document.body,
574
571
  )}
@@ -796,11 +793,7 @@ export function FloatingAction({
796
793
  };
797
794
  const { children: content, ...anchor } = linkProps;
798
795
  const render = pickLinkRenderer(renderLink, kitLink, href);
799
- member = render ? (
800
- <RenderedFloatingLink render={render} {...linkProps} />
801
- ) : (
802
- <a {...anchor}>{content}</a>
803
- );
796
+ member = render ? <RenderedFloatingLink render={render} {...linkProps} /> : <a {...anchor}>{content}</a>;
804
797
  } else {
805
798
  member = (
806
799
  <button
@@ -9,8 +9,7 @@
9
9
  * card — write `focus-visible:after:ring-focus` or `has-[:focus-visible]:outline-focus`
10
10
  * rather than spelling the width out.
11
11
  */
12
- export const FOCUS_RING =
13
- "focus-visible:outline-none focus-visible:ring-focus focus-visible:ring-brand";
12
+ export const FOCUS_RING = "focus-visible:outline-none focus-visible:ring-focus focus-visible:ring-brand";
14
13
 
15
14
  /** Just the width of {@link FOCUS_RING}, for a ring in another colour (a danger control's,
16
15
  * `--brand-contrast` on a filled button): `cn(FOCUS_RING_WIDTH, "focus-visible:ring-brand-contrast")`. */
@@ -90,9 +90,7 @@ const BREAKPOINTS = ["xl", "lg", "md", "sm"] as const;
90
90
  * `base`. The queries are subscribed unconditionally (hooks cannot be skipped); a
91
91
  * plain string ignores them. Without `matchMedia` (SSR, tests) none match, so the row
92
92
  * renders its `base`, the phone's. The same resolution as BulkActionBar's variant. */
93
- function useResolvedPlacement(
94
- placement: FormActionsPlacement | ResponsiveFormActionsPlacement,
95
- ): FormActionsPlacement {
93
+ function useResolvedPlacement(placement: FormActionsPlacement | ResponsiveFormActionsPlacement): FormActionsPlacement {
96
94
  const matches = {
97
95
  xl: useBreakpoint("xl"),
98
96
  lg: useBreakpoint("lg"),
@@ -328,7 +326,6 @@ export interface FormActionsProps extends Omit<ComponentPropsWithoutRef<"div">,
328
326
  ref?: Ref<HTMLDivElement>;
329
327
  }
330
328
 
331
-
332
329
  /**
333
330
  * Where {@link FormActionsProps.submitShortcut} listens: the form Save submits (named
334
331
  * by `formId`, else the enclosing one), else the nearest dialog, else the row's parent.
@@ -2,7 +2,7 @@ import { useCallback, useId, useMemo } from "react";
2
2
  import type { ComponentPropsWithoutRef, ReactNode, Ref } from "react";
3
3
  import { ChevronDown } from "lucide-react";
4
4
  import { cn } from "../lib/cn";
5
- import { foldForSearch } from "../lib/text-match";
5
+ import { matchesSearch, searchWords } from "../lib/text-match";
6
6
  import { ComboboxPanel, useComboboxCore, type ComboOption } from "./combobox-core";
7
7
  import { assignRef } from "./field-parts";
8
8
  import { DEFAULT_COMBOBOX_LABELS, useKitLabels, useKitLocale } from "../i18n/kit-labels";
@@ -90,22 +90,27 @@ export function GroupedPicker({
90
90
  // plain `toLowerCase` gets wrong), and now the accents too — "zurich" finds Zürich.
91
91
  const locale = useKitLocale();
92
92
  const results = useMemo(() => {
93
- const q = foldForSearch(query.trim(), locale);
94
- const has = (s: string) => foldForSearch(s, locale).includes(q);
95
- const kept = q
96
- ? groups
97
- .map((g) => (has(g.label) ? g : { ...g, items: g.items.filter((i) => has(i.label)) }))
98
- .filter((g) => g.items.length > 0)
99
- : groups;
93
+ // Every word of the query (0.51.4): all in the group's name keeps the whole group;
94
+ // otherwise an item stays when each word is in its label or its group's name, so
95
+ // "migros 8004" finds Migros' 8004 shop.
96
+ const words = searchWords(query, locale);
97
+ const kept =
98
+ words.length > 0
99
+ ? groups
100
+ .map((g) =>
101
+ matchesSearch(words, [g.label], locale)
102
+ ? g
103
+ : { ...g, items: g.items.filter((i) => matchesSearch(words, [g.label, i.label], locale)) },
104
+ )
105
+ .filter((g) => g.items.length > 0)
106
+ : groups;
100
107
  return kept.flatMap((g) =>
101
- g.items.map(
102
- (item): ComboOption<string> => ({
103
- value: itemValue(g.key, item.key),
104
- label: item.label,
105
- icon: item.icon,
106
- group: g.label,
107
- }),
108
- ),
108
+ g.items.map((item): ComboOption<string> => ({
109
+ value: itemValue(g.key, item.key),
110
+ label: item.label,
111
+ icon: item.icon,
112
+ group: g.label,
113
+ })),
109
114
  );
110
115
  }, [groups, query, locale]);
111
116
  // Back to keys for `onSelect`, by the value the row carries.
@@ -310,10 +310,7 @@ export function HoverMenu({
310
310
  {open && (
311
311
  <div
312
312
  ref={panelRef}
313
- className={cn(
314
- "absolute top-full z-40 pt-2",
315
- ALIGN_CLASS[align],
316
- )}
313
+ className={cn("absolute top-full z-40 pt-2", ALIGN_CLASS[align])}
317
314
  style={shiftX ? { transform: `translateX(${shiftX}px)` } : undefined}
318
315
  >
319
316
  <div
@@ -7,8 +7,7 @@ import type { IbanInputLabels } from "./iban-input";
7
7
  export const DEFAULT_IBAN_INPUT_LABELS: IbanInputLabels = {
8
8
  format: "An IBAN starts with a two-letter country code and two check digits.",
9
9
  country: (code) => `“${code}” is not the country code of an IBAN.`,
10
- length: (actual, expected) =>
11
- `An IBAN from this country has ${expected} characters — this one has ${actual}.`,
10
+ length: (actual, expected) => `An IBAN from this country has ${expected} characters — this one has ${actual}.`,
12
11
  checksum: "The check digits don’t match — a character is probably mistyped.",
13
12
  qrRequired: "This is a regular IBAN. A QR-bill needs the account’s QR-IBAN.",
14
13
  qrNotAllowed: "This is a QR-IBAN, which only receives QR-bill payments. Enter the account’s regular IBAN.",
@@ -139,25 +139,21 @@ type ColouredTone = "danger" | "warning" | "info" | "success" | "custom";
139
139
 
140
140
  const ICON_BUTTON_TONES: Record<ColouredTone, { quiet: string; toned: string }> = {
141
141
  danger: {
142
- quiet:
143
- "text-placeholder hover:bg-danger-soft hover:text-danger focus-visible:ring-danger-strong",
142
+ quiet: "text-placeholder hover:bg-danger-soft hover:text-danger focus-visible:ring-danger-strong",
144
143
  toned: "text-danger hover:bg-danger-soft focus-visible:ring-danger-strong",
145
144
  },
146
145
  warning: {
147
- quiet:
148
- "text-placeholder hover:bg-warning-soft hover:text-warning focus-visible:ring-warning-strong",
146
+ quiet: "text-placeholder hover:bg-warning-soft hover:text-warning focus-visible:ring-warning-strong",
149
147
  // The ring is warning's loud line (0.33, k27): `--warning-border`, amber-300, was a
150
148
  // focus ring at 1.1:1 on the light surfaces.
151
149
  toned: "text-warning hover:bg-warning-soft focus-visible:ring-warning-strong",
152
150
  },
153
151
  info: {
154
- quiet:
155
- "text-placeholder hover:bg-info-soft hover:text-info focus-visible:ring-[var(--info-border)]",
152
+ quiet: "text-placeholder hover:bg-info-soft hover:text-info focus-visible:ring-[var(--info-border)]",
156
153
  toned: "text-info hover:bg-info-soft focus-visible:ring-[var(--info-border)]",
157
154
  },
158
155
  success: {
159
- quiet:
160
- "text-placeholder hover:bg-success-soft hover:text-success focus-visible:ring-[var(--success-border)]",
156
+ quiet: "text-placeholder hover:bg-success-soft hover:text-success focus-visible:ring-[var(--success-border)]",
161
157
  toned: "text-success hover:bg-success-soft focus-visible:ring-[var(--success-border)]",
162
158
  },
163
159
  // The hover fill and the ring are MIXED from the one colour, since a custom tone
@@ -520,7 +516,8 @@ export interface IconButtonProps extends ButtonHTMLAttributes<HTMLButtonElement>
520
516
  * that explains why it cannot be followed is a job for a disabled BUTTON.
521
517
  */
522
518
  export interface IconButtonLinkProps
523
- extends Omit<AnchorHTMLAttributes<HTMLAnchorElement>, "type" | "href">,
519
+ extends
520
+ Omit<AnchorHTMLAttributes<HTMLAnchorElement>, "type" | "href">,
524
521
  Pick<
525
522
  IconButtonProps,
526
523
  | "variant"
@@ -636,7 +633,10 @@ function iconButtonLook({
636
633
  return cn(
637
634
  ICON_BUTTON_BASE,
638
635
  withText
639
- ? cn("font-medium whitespace-nowrap", stretch ? ICON_BUTTON_TEXT_STRETCH_SIZES[size] : ICON_BUTTON_TEXT_SIZES[size])
636
+ ? cn(
637
+ "font-medium whitespace-nowrap",
638
+ stretch ? ICON_BUTTON_TEXT_STRETCH_SIZES[size] : ICON_BUTTON_TEXT_SIZES[size],
639
+ )
640
640
  : stretch
641
641
  ? ICON_BUTTON_STRETCH_SIZES[size]
642
642
  : ICON_BUTTON_SIZES[size],
@@ -822,44 +822,42 @@ function IconButtonLink({
822
822
  );
823
823
  }
824
824
 
825
- function IconButtonElement(
826
- {
827
- variant = "ghost",
828
- size = "md",
829
- tone: toneProp,
830
- quiet,
831
- pressed,
832
- stopPropagation,
833
- stretch,
834
- shape = "square",
835
- toneColor,
836
- label,
837
- labelVisible,
838
- tooltip = true,
839
- tooltipSide,
840
- tooltipPortal,
841
- tooltipLazy = true,
842
- disabledReason: ownDisabledReason,
843
- disabledReasonDisplay,
844
- commit,
845
- pending,
846
- glyphSize,
847
- badge,
848
- disabledStyle = "dim",
849
- className,
850
- style,
851
- onClick,
852
- onKeyDown,
853
- children,
854
- href: _href,
855
- renderLink: _renderLink,
856
- external: _external,
857
- replace: _replace,
858
- reloadDocument: _reloadDocument,
859
- ref,
860
- ...rest
861
- }: IconButtonProps,
862
- ) {
825
+ function IconButtonElement({
826
+ variant = "ghost",
827
+ size = "md",
828
+ tone: toneProp,
829
+ quiet,
830
+ pressed,
831
+ stopPropagation,
832
+ stretch,
833
+ shape = "square",
834
+ toneColor,
835
+ label,
836
+ labelVisible,
837
+ tooltip = true,
838
+ tooltipSide,
839
+ tooltipPortal,
840
+ tooltipLazy = true,
841
+ disabledReason: ownDisabledReason,
842
+ disabledReasonDisplay,
843
+ commit,
844
+ pending,
845
+ glyphSize,
846
+ badge,
847
+ disabledStyle = "dim",
848
+ className,
849
+ style,
850
+ onClick,
851
+ onKeyDown,
852
+ children,
853
+ href: _href,
854
+ renderLink: _renderLink,
855
+ external: _external,
856
+ replace: _replace,
857
+ reloadDocument: _reloadDocument,
858
+ ref,
859
+ ...rest
860
+ }: IconButtonProps) {
863
861
  const tone = toneProp ?? (toneColor !== undefined ? "custom" : "default");
864
862
  const keep = disabledStyle === "keep";
865
863
  const withText = useIconButtonText(label, labelVisible, variant, tooltip);
@@ -6,7 +6,7 @@ import { SearchField } from "./search-field";
6
6
  import { TILE_SIZE, TileRadioGroup } from "./tile-radio";
7
7
  import type { TileItem, TileSize } from "./tile-radio";
8
8
  import { hasContent } from "../lib/presence";
9
- import { foldForSearch } from "../lib/text-match";
9
+ import { matchesSearch, searchWords } from "../lib/text-match";
10
10
  import { LabelStrip, useFieldMessages, type FieldHelpProps } from "./field-parts";
11
11
  import { DEFAULT_ICON_PICKER_LABELS } from "./icon-picker-labels";
12
12
 
@@ -52,8 +52,7 @@ export interface IconOption<T extends string> {
52
52
  }
53
53
 
54
54
  export interface IconPickerProps<T extends string>
55
- extends Omit<ComponentPropsWithRef<"div">, "onChange" | "children" | "defaultValue">,
56
- FieldHelpProps {
55
+ extends Omit<ComponentPropsWithRef<"div">, "onChange" | "children" | "defaultValue">, FieldHelpProps {
57
56
  options: IconOption<T>[];
58
57
  /** The chosen icon, or `null` for none. */
59
58
  value: T | null;
@@ -147,16 +146,13 @@ export function IconPicker<T extends string>({
147
146
  });
148
147
  const [query, setQuery] = useState("");
149
148
  // Case- and accent-insensitive, so "cafe" finds "Café" — every kit list's fold (DUP-5).
150
- const needle = foldForSearch(query.trim(), locale);
149
+ // Every word of the query, in the label or a keyword (0.51.4).
150
+ const words = useMemo(() => searchWords(query, locale), [query, locale]);
151
+ const needle = words.length > 0;
151
152
 
152
153
  const visible = useMemo(
153
- () =>
154
- needle
155
- ? options.filter((o) =>
156
- [o.label, ...(o.keywords ?? [])].some((w) => foldForSearch(w, locale).includes(needle)),
157
- )
158
- : options,
159
- [options, needle, locale],
154
+ () => (needle ? options.filter((o) => matchesSearch(words, [o.label, ...(o.keywords ?? [])], locale)) : options),
155
+ [options, needle, words, locale],
160
156
  );
161
157
  const byValue = useMemo(() => new Map(options.map((o) => [o.value, o])), [options]);
162
158
  const items: TileItem<T>[] = [
@@ -207,17 +203,10 @@ export function IconPicker<T extends string>({
207
203
  const Icon = item.key === null ? undefined : byValue.get(item.key)?.icon;
208
204
  return Icon ? <Icon aria-hidden className={TILE_SIZE[size].glyph} /> : null;
209
205
  }}
210
- tileClassName={(_item, selected) =>
211
- cn(
212
- selected ? "text-primary" : "text-secondary",
213
- tileClassName,
214
- )
215
- }
206
+ tileClassName={(_item, selected) => cn(selected ? "text-primary" : "text-secondary", tileClassName)}
216
207
  />
217
208
  </div>
218
- {needle && visible.length === 0 && (
219
- <p className="text-xs text-muted">{text.noResults}</p>
220
- )}
209
+ {needle && visible.length === 0 && <p className="text-xs text-muted">{text.noResults}</p>}
221
210
  {mixed && (
222
211
  <span id={mixedId} hidden>
223
212
  {text.mixed}
@@ -119,12 +119,7 @@ export function ImageGrid({
119
119
 
120
120
  return (
121
121
  <>
122
- <ul
123
- aria-label={labels.list}
124
- {...rest}
125
- className={cn("grid gap-2", className)}
126
- style={gridStyle}
127
- >
122
+ <ul aria-label={labels.list} {...rest} className={cn("grid gap-2", className)} style={gridStyle}>
128
123
  {items.map((item, i) => {
129
124
  const name = item.alt || labels.item(i + 1, count);
130
125
  const kind = imageItemKind(item);
@@ -423,11 +423,7 @@ export function InlineEditField<T = string>(props: InlineEditFieldProps<T>) {
423
423
 
424
424
  const private_ = redact ? { "data-private": true } : undefined;
425
425
  const shown = display ? display(value) : value === null || value === undefined ? "" : String(value);
426
- const content = hasContent(shown) ? (
427
- shown
428
- ) : (
429
- <span className="text-muted">{placeholder ?? labels.empty}</span>
430
- );
426
+ const content = hasContent(shown) ? shown : <span className="text-muted">{placeholder ?? labels.empty}</span>;
431
427
  const alignClass = align === "end" ? "text-end" : "text-start";
432
428
 
433
429
  let body: ReactNode;
@@ -24,7 +24,7 @@ import {
24
24
  type ComboOption,
25
25
  } from "./combobox-core";
26
26
  import { DEFAULT_COMBOBOX_LABELS, useKitLabels, useKitLocale } from "../i18n/kit-labels";
27
- import { foldForSearch, rankMatch } from "../lib/text-match";
27
+ import { matchesSearch, rankMatch, searchWords } from "../lib/text-match";
28
28
  import {
29
29
  EndHintRow,
30
30
  FieldCaption,
@@ -50,8 +50,7 @@ const CREATE_ROW_CLASS = "flex items-center gap-2 font-medium text-brand";
50
50
  /** `id` is the INPUT's and `onChange` is the field's — see {@link ComboboxProps}
51
51
  * for why the div's spellings of them are omitted. */
52
52
  export interface InlineEntityComboboxProps<V extends string | number, C extends ComboClearValue = null>
53
- extends Omit<ComponentPropsWithoutRef<"div">, "id" | "onChange">,
54
- FieldHelpProps {
53
+ extends Omit<ComponentPropsWithoutRef<"div">, "id" | "onChange">, FieldHelpProps {
55
54
  /** Selected option id; `null` or `clearValue` when nothing is selected. */
56
55
  value: V | C | null;
57
56
  /** Required and unanswered — see {@link Combobox}'s `invalid`. */
@@ -311,8 +310,9 @@ export function InlineEntityCombobox<V extends string | number, C extends ComboC
311
310
  const matches = useMemo(() => {
312
311
  let ranked = options;
313
312
  if (query) {
314
- const q = foldForSearch(query, locale);
315
- const hit = (s: string | undefined) => s !== undefined && foldForSearch(s, locale).includes(q);
313
+ // Every word of the query, in the label or the sublabel (0.51.4).
314
+ const words = searchWords(query, locale);
315
+ const hit = (o: ComboOption<V>) => matchesSearch(words, [o.label, o.sublabel], locale);
316
316
  // The label's whole name or its start first (`rankMatch` 0 and 1), then a match
317
317
  // anywhere in the label or the sublabel. Not the group (0.40, kk run 79): with
318
318
  // first-letter groups one typed letter matched its whole group.
@@ -321,7 +321,7 @@ export function InlineEntityCombobox<V extends string | number, C extends ComboC
321
321
  return rank === 0 || rank === 1;
322
322
  };
323
323
  const starts = options.filter(leads);
324
- const rest = options.filter((o) => !leads(o) && (hit(o.label) || hit(o.sublabel)));
324
+ const rest = options.filter((o) => !leads(o) && hit(o));
325
325
  ranked = [...starts, ...rest];
326
326
  }
327
327
  if (!ranked.some((o) => o.group)) return ranked;
@@ -357,9 +357,7 @@ export function InlineEntityCombobox<V extends string | number, C extends ComboC
357
357
  const createText = createQuery ? labels.create(createQuery) : createEmptyLabel;
358
358
  // Every row the keyboard can land on: the options, then the create row — passed over
359
359
  // like a disabled option while a write lock holds it.
360
- const rows: readonly { disabled?: boolean }[] = showCreate
361
- ? [...matches, { disabled: createLocked }]
362
- : matches;
360
+ const rows: readonly { disabled?: boolean }[] = showCreate ? [...matches, { disabled: createLocked }] : matches;
363
361
  const createIndex = matches.length;
364
362
 
365
363
  // Pointer-device only: the phone's rows live in a {@link PickerSheet} whose own
@@ -413,9 +411,7 @@ export function InlineEntityCombobox<V extends string | number, C extends ComboC
413
411
  } else {
414
412
  // A disabled option's label typed out in full is not a way round `disabled`:
415
413
  // it is not a hit, so the text reverts like any other non-answer.
416
- const hits = options.filter(
417
- (o) => !o.disabled && o.label.toLowerCase() === q.toLowerCase(),
418
- );
414
+ const hits = options.filter((o) => !o.disabled && o.label.toLowerCase() === q.toLowerCase());
419
415
  const ids = new Set(hits.map((h) => h.value));
420
416
  if (ids.size === 1 && hits[0].value !== value) onChange(hits[0].value);
421
417
  }
@@ -434,9 +430,7 @@ export function InlineEntityCombobox<V extends string | number, C extends ComboC
434
430
  <span className="min-w-0 flex-1">
435
431
  <span className="block truncate-until-large">{createText}</span>
436
432
  {createLocked && (
437
- <span className="block truncate-until-large text-xs font-normal text-placeholder">
438
- {createReason}
439
- </span>
433
+ <span className="block truncate-until-large text-xs font-normal text-placeholder">{createReason}</span>
440
434
  )}
441
435
  </span>
442
436
  </>
@@ -701,11 +695,7 @@ export function InlineEntityCombobox<V extends string | number, C extends ComboC
701
695
  aria-selected={false}
702
696
  aria-disabled={createLocked || undefined}
703
697
  onClick={create}
704
- className={cn(
705
- SHEET_ROW_CLASS,
706
- CREATE_ROW_CLASS,
707
- createLocked && DISABLED_ROW_CLASS,
708
- )}
698
+ className={cn(SHEET_ROW_CLASS, CREATE_ROW_CLASS, createLocked && DISABLED_ROW_CLASS)}
709
699
  >
710
700
  {createRowContent}
711
701
  </button>
@@ -771,11 +761,7 @@ export function InlineEntityCombobox<V extends string | number, C extends ComboC
771
761
  )}
772
762
  >
773
763
  {o.label}
774
- {o.sublabel && (
775
- <span className="ms-2 text-xs text-placeholder">
776
- {o.sublabel}
777
- </span>
778
- )}
764
+ {o.sublabel && <span className="ms-2 text-xs text-placeholder">{o.sublabel}</span>}
779
765
  </button>
780
766
  </li>
781
767
  </Fragment>
@@ -299,7 +299,13 @@ export function Input(props: InputProps) {
299
299
  aria-describedby={describedBy}
300
300
  onClick={handleClick}
301
301
  onChange={onChange}
302
- className={cn(FIELD_BASE, ownClass, inputClassName, isInvalid && FIELD_INVALID, locked && "cursor-not-allowed")}
302
+ className={cn(
303
+ FIELD_BASE,
304
+ ownClass,
305
+ inputClassName,
306
+ isInvalid && FIELD_INVALID,
307
+ locked && "cursor-not-allowed",
308
+ )}
303
309
  />
304
310
  </EndHintRow>,
305
311
  )}
@@ -321,7 +327,13 @@ export function Input(props: InputProps) {
321
327
  aria-invalid={isInvalid || rest["aria-invalid"] || undefined}
322
328
  aria-describedby={describedBy}
323
329
  onChange={onChange}
324
- className={cn(FIELD_BASE, "pe-9", inputClassName, isInvalid && FIELD_INVALID, locked && "cursor-not-allowed")}
330
+ className={cn(
331
+ FIELD_BASE,
332
+ "pe-9",
333
+ inputClassName,
334
+ isInvalid && FIELD_INVALID,
335
+ locked && "cursor-not-allowed",
336
+ )}
325
337
  />
326
338
  {revealToggle}
327
339
  </div>
@@ -19,8 +19,7 @@ import { claimEscape } from "../hooks/use-dismiss";
19
19
  /** A "YYYY-MM" key as a count of months, and back: month arithmetic with no `Date`
20
20
  * rollover to step around. */
21
21
  const monthIndex = (key: string) => Number(key.slice(0, 4)) * 12 + Number(key.slice(5, 7)) - 1;
22
- const keyOfIndex = (index: number) =>
23
- `${String(Math.floor(index / 12)).padStart(4, "0")}-${pad((index % 12) + 1)}`;
22
+ const keyOfIndex = (index: number) => `${String(Math.floor(index / 12)).padStart(4, "0")}-${pad((index % 12) + 1)}`;
24
23
  const shiftKey = (key: string, delta: number) => keyOfIndex(monthIndex(key) + delta);
25
24
  /** The 1st of a "YYYY-MM" month, for `Intl` to name. */
26
25
  const firstOfKey = (key: string) => new Date(Number(key.slice(0, 4)), Number(key.slice(5, 7)) - 1, 1);
@@ -287,10 +286,7 @@ function JumpCalendar({
287
286
  <span id={captionId} aria-live="polite" className="truncate">
288
287
  {caption}
289
288
  </span>
290
- <ChevronDown
291
- aria-hidden
292
- className={cn("size-3.5 shrink-0 text-muted", !inDays && "rotate-180")}
293
- />
289
+ <ChevronDown aria-hidden className={cn("size-3.5 shrink-0 text-muted", !inDays && "rotate-180")} />
294
290
  </button>
295
291
  <button
296
292
  type="button"
@@ -10,6 +10,8 @@ export const DEFAULT_LEGAL_LABELS: LegalLabels = {
10
10
  impressum: "Imprint",
11
11
  privacy: "Privacy Policy",
12
12
  terms: "Terms",
13
+ security: "Security",
14
+ accessibility: "Accessibility",
13
15
  },
14
16
  titles: {
15
17
  impressum: "Imprint",
@@ -24,11 +26,14 @@ export const DEFAULT_LEGAL_LABELS: LegalLabels = {
24
26
  "Closed beta. The legal wording below has not been reviewed by a lawyer yet and will be before a public launch. The technical descriptions — what is stored, where, and who can read it — describe what the software actually does today, and are meant to be checked against it.",
25
27
  },
26
28
  translation: {
27
- note: (o) =>
28
- `This is a translation for your convenience. The ${o.bindingLanguage} version is binding.`,
29
+ note: (o) => `This is a translation for your convenience. The ${o.bindingLanguage} version is binding.`,
29
30
  show: (o) => `Show the ${o.bindingLanguage} version`,
30
31
  },
31
32
  updated: (date) => `Last updated: ${date}`,
33
+ summary: {
34
+ title: "In short",
35
+ note: "This summary is for orientation; only the full text is binding.",
36
+ },
32
37
  sections: {
33
38
  impressum: {
34
39
  operator: {
@@ -83,7 +88,7 @@ export const DEFAULT_LEGAL_LABELS: LegalLabels = {
83
88
  },
84
89
  changes: {
85
90
  title: "Changes to these terms",
86
- body: "We may update these terms as the service evolves. We announce a material change at least 30 days before it takes effect, by email and in the app, together with the new text. If you do not agree, you can object or delete your account before that date, and you can export your data until then. If you keep using the service after that date, the changed terms apply.",
91
+ body: "We may update these terms as the service evolves. We announce a material change at least 30 days before it takes effect, by email and in the app, together with the new text. If you do not agree, you can object or delete your account before that date, and you can export your data until then. If you keep using the service after that date, the changed terms apply. Changes that only benefit you, or that the law requires, apply without this notice and cannot be objected to. If you object to a change, we may end your account on the date it takes effect. If you have paid for a period that runs beyond that date, we refund the unused part.",
87
92
  },
88
93
  language: {
89
94
  title: "Language",