@eifi1/ui-kit 0.51.4 → 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 (757) hide show
  1. package/README.md +3 -3
  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.js +1 -13
  276. package/dist/components/treemap.js.map +1 -1
  277. package/dist/components/trigger-aria.js.map +1 -1
  278. package/dist/components/use-table-state.js +14 -11
  279. package/dist/components/use-table-state.js.map +1 -1
  280. package/dist/components/user-avatar.js +3 -26
  281. package/dist/components/user-avatar.js.map +1 -1
  282. package/dist/demo/demo-start.js +8 -4
  283. package/dist/demo/demo-start.js.map +1 -1
  284. package/dist/eslint/index.js +1 -1
  285. package/dist/feedback/feedback-attachment-labels.js.map +1 -1
  286. package/dist/feedback/feedback-attachment.js +1 -8
  287. package/dist/feedback/feedback-attachment.js.map +1 -1
  288. package/dist/feedback/feedback-capture.d.ts +1 -1
  289. package/dist/feedback/feedback-capture.js +3 -1
  290. package/dist/feedback/feedback-capture.js.map +1 -1
  291. package/dist/feedback/feedback-comment-thread.js +27 -13
  292. package/dist/feedback/feedback-comment-thread.js.map +1 -1
  293. package/dist/feedback/feedback-context.js +1 -4
  294. package/dist/feedback/feedback-context.js.map +1 -1
  295. package/dist/feedback/feedback-dialog.js.map +1 -1
  296. package/dist/feedback/feedback-inbox.js.map +1 -1
  297. package/dist/feedback/feedback-public-list.js +7 -1
  298. package/dist/feedback/feedback-public-list.js.map +1 -1
  299. package/dist/feedback/feedback-record.js +1 -5
  300. package/dist/feedback/feedback-record.js.map +1 -1
  301. package/dist/feedback/feedback-replies.js +25 -10
  302. package/dist/feedback/feedback-replies.js.map +1 -1
  303. package/dist/feedback/feedback-row-detail.js.map +1 -1
  304. package/dist/feedback/feedback-status-undo.js.map +1 -1
  305. package/dist/feedback/feedback-submit-dialog.js.map +1 -1
  306. package/dist/feedback/feedback-table.js +4 -1
  307. package/dist/feedback/feedback-table.js.map +1 -1
  308. package/dist/feedback/feedback-thread.js +2 -13
  309. package/dist/feedback/feedback-thread.js.map +1 -1
  310. package/dist/feedback/feedback-vocabulary.js.map +1 -1
  311. package/dist/feedback/feedback-vote-button.js.map +1 -1
  312. package/dist/hooks/use-anchored-rect.js.map +1 -1
  313. package/dist/hooks/use-document-title.js.map +1 -1
  314. package/dist/hooks/use-file-drop.js.map +1 -1
  315. package/dist/hooks/use-file-picker-labels.js.map +1 -1
  316. package/dist/hooks/use-file-picker.js.map +1 -1
  317. package/dist/hooks/use-focus-trap.js.map +1 -1
  318. package/dist/hooks/use-overlay-history.js +10 -5
  319. package/dist/hooks/use-overlay-history.js.map +1 -1
  320. package/dist/hooks/use-row-swipe.d.ts +1 -1
  321. package/dist/hooks/use-row-swipe.js +1 -6
  322. package/dist/hooks/use-row-swipe.js.map +1 -1
  323. package/dist/i18n/defaults.js +1 -4
  324. package/dist/i18n/defaults.js.map +1 -1
  325. package/dist/i18n/german.js +4 -1
  326. package/dist/i18n/german.js.map +1 -1
  327. package/dist/i18n/kit-labels.js +2 -8
  328. package/dist/i18n/kit-labels.js.map +1 -1
  329. package/dist/i18n/languages.js.map +1 -1
  330. package/dist/i18n/locales/en.js +4 -1
  331. package/dist/i18n/locales/en.js.map +2 -2
  332. package/dist/i18n/locales/es.js +4 -1
  333. package/dist/i18n/locales/es.js.map +1 -1
  334. package/dist/i18n/locales/fr.js +4 -1
  335. package/dist/i18n/locales/fr.js.map +1 -1
  336. package/dist/i18n/locales/hu.js +4 -1
  337. package/dist/i18n/locales/hu.js.map +1 -1
  338. package/dist/i18n/locales/it.js +4 -1
  339. package/dist/i18n/locales/it.js.map +1 -1
  340. package/dist/i18n/locales/zh.js.map +1 -1
  341. package/dist/i18n/plurals.js.map +1 -1
  342. package/dist/i18n/review.js +13 -7
  343. package/dist/i18n/review.js.map +1 -1
  344. package/dist/i18n/shared-labels.js.map +1 -1
  345. package/dist/index.d.ts +16 -16
  346. package/dist/index.js +40 -23
  347. package/dist/index.js.map +1 -1
  348. package/dist/landing/access.js +1 -4
  349. package/dist/landing/access.js.map +1 -1
  350. package/dist/landing/landing-sections.js +35 -38
  351. package/dist/landing/landing-sections.js.map +1 -1
  352. package/dist/landing/page-seo.js.map +1 -1
  353. package/dist/lib/calc.js.map +1 -1
  354. package/dist/lib/clipboard-minus.js.map +1 -1
  355. package/dist/lib/dates.js.map +1 -1
  356. package/dist/lib/decimal-marks.js.map +1 -1
  357. package/dist/lib/device-settings.js +2 -1
  358. package/dist/lib/device-settings.js.map +1 -1
  359. package/dist/lib/direction.js.map +1 -1
  360. package/dist/lib/iban.js.map +1 -1
  361. package/dist/lib/logger.js +1 -5
  362. package/dist/lib/logger.js.map +1 -1
  363. package/dist/lib/person-name.js.map +1 -1
  364. package/dist/lib/phone.js.map +1 -1
  365. package/dist/lib/qr-encode.js +344 -8
  366. package/dist/lib/qr-encode.js.map +1 -1
  367. package/dist/lib/session-refresh.js.map +1 -1
  368. package/dist/lib/table-text.js +15 -3
  369. package/dist/lib/table-text.js.map +1 -1
  370. package/dist/lib/text-match.d.ts +4 -0
  371. package/dist/lib/text-match.js.map +1 -1
  372. package/dist/lib/translation-review.js.map +1 -1
  373. package/dist/notifications/notification-inbox.js +63 -44
  374. package/dist/notifications/notification-inbox.js.map +1 -1
  375. package/dist/notifications/notification-parts.js.map +1 -1
  376. package/dist/notifications/notification-types-setting.js.map +1 -1
  377. package/dist/notifications/notifications-labels.js.map +1 -1
  378. package/dist/notifications/push-device-setting.js +6 -1
  379. package/dist/notifications/push-device-setting.js.map +1 -1
  380. package/dist/notifications/push-devices-setting.js.map +1 -1
  381. package/dist/notifications/push-worker.js.map +1 -1
  382. package/dist/notifications/quiet-hours-setting.js.map +1 -1
  383. package/dist/notifications/use-push-device.js +4 -1
  384. package/dist/notifications/use-push-device.js.map +1 -1
  385. package/dist/offline/pwa-update-prompt.d.ts +1 -1
  386. package/dist/offline/pwa-update-prompt.js +7 -1
  387. package/dist/offline/pwa-update-prompt.js.map +1 -1
  388. package/dist/offline/query-persistence.js.map +1 -1
  389. package/dist/offline.d.ts +1 -1
  390. package/dist/offline.js +6 -1
  391. package/dist/offline.js.map +1 -1
  392. package/dist/pay/pay.css +8 -1
  393. package/dist/rhf/fields.d.ts +1 -2
  394. package/dist/rhf/fields.js +1 -10
  395. package/dist/rhf/fields.js.map +1 -1
  396. package/dist/rhf/form-core.js +1 -4
  397. package/dist/rhf/form-core.js.map +1 -1
  398. package/dist/rhf/line-items.js.map +1 -1
  399. package/dist/rhf/use-rhf-wizard-step.js.map +1 -1
  400. package/dist/search/command-palette.js +71 -62
  401. package/dist/search/command-palette.js.map +1 -1
  402. package/dist/search/global-search.js +34 -5
  403. package/dist/search/global-search.js.map +1 -1
  404. package/dist/search/search-index.js.map +1 -1
  405. package/dist/settings/device-reset-setting.js +1 -6
  406. package/dist/settings/device-reset-setting.js.map +1 -1
  407. package/dist/settings/settings-heading.js.map +1 -1
  408. package/dist/settings/settings-layout.js +9 -20
  409. package/dist/settings/settings-layout.js.map +1 -1
  410. package/dist/settings/use-settings-route.js.map +1 -1
  411. package/dist/shell/app-shell.js +62 -31
  412. package/dist/shell/app-shell.js.map +1 -1
  413. package/dist/shell/auth-layout.js +1 -10
  414. package/dist/shell/auth-layout.js.map +1 -1
  415. package/dist/shell/dev-menu.js +12 -6
  416. package/dist/shell/dev-menu.js.map +1 -1
  417. package/dist/shell/option-switcher-menu.js.map +1 -1
  418. package/dist/shell/sync-status-indicator.js +7 -6
  419. package/dist/shell/sync-status-indicator.js.map +1 -1
  420. package/dist/shell/top-bar-parts-labels.js.map +1 -1
  421. package/dist/shell/topbar-action-menu.js.map +1 -1
  422. package/dist/shell/topbar-controls.js +1 -10
  423. package/dist/shell/topbar-controls.js.map +1 -1
  424. package/dist/shell/tour-menu.js +9 -1
  425. package/dist/shell/tour-menu.js.map +1 -1
  426. package/dist/sync/db.js.map +1 -1
  427. package/dist/sync/engine.js +24 -6
  428. package/dist/sync/engine.js.map +1 -1
  429. package/dist/sync.d.ts +2 -2
  430. package/dist/sync.js +7 -1
  431. package/dist/sync.js.map +1 -1
  432. package/dist/testing/css-variables.js.map +1 -1
  433. package/dist/testing/index.d.ts +1 -1
  434. package/dist/testing/index.js +1 -3
  435. package/dist/testing/index.js.map +1 -1
  436. package/dist/testing/react.js.map +1 -1
  437. package/dist/testing/viewport.js +7 -4
  438. package/dist/testing/viewport.js.map +1 -1
  439. package/dist/theme/contrast-tokens.js +13 -2
  440. package/dist/theme/contrast-tokens.js.map +1 -1
  441. package/dist/theme/palette-derive.d.ts +1 -1
  442. package/dist/theme/palette-derive.js +18 -29
  443. package/dist/theme/palette-derive.js.map +1 -1
  444. package/dist/theme/palette-presets.js.map +1 -1
  445. package/dist/theme/palette-store.js.map +1 -1
  446. package/dist/theme/text-size.js.map +1 -1
  447. package/dist/theme/theme-store.js +1 -3
  448. package/dist/theme/theme-store.js.map +1 -1
  449. package/dist/tour/tour-catalogue.js.map +1 -1
  450. package/dist/tour/tour-dock.js +5 -1
  451. package/dist/tour/tour-dock.js.map +1 -1
  452. package/dist/tour/tour-engine.js +1 -4
  453. package/dist/tour/tour-engine.js.map +1 -1
  454. package/dist/tour/tour.js +21 -12
  455. package/dist/tour/tour.js.map +1 -1
  456. package/dist/tour/use-tour-progress.js.map +1 -1
  457. package/dist/tour/use-tour-url-sync.js.map +1 -1
  458. package/dist/wizard/stepper-nav.js +3 -24
  459. package/dist/wizard/stepper-nav.js.map +1 -1
  460. package/dist/wizard/types.js.map +1 -1
  461. package/dist/wizard/use-wizard.js +24 -28
  462. package/dist/wizard/use-wizard.js.map +1 -1
  463. package/dist/wizard/validation.js.map +1 -1
  464. package/dist/wizard/wizard-context.js.map +1 -1
  465. package/dist/wizard/wizard-step.d.ts +1 -1
  466. package/dist/wizard/wizard-step.js +1 -8
  467. package/dist/wizard/wizard-step.js.map +1 -1
  468. package/dist/wizard/wizard-summary.js.map +1 -1
  469. package/package.json +5 -2
  470. package/src/account/account-settings-labels.ts +1 -2
  471. package/src/account/account-settings.tsx +11 -17
  472. package/src/account/delete-account-setting.tsx +1 -6
  473. package/src/account/email-change-setting-labels.ts +1 -2
  474. package/src/account/email-change-setting.tsx +3 -1
  475. package/src/account/passkeys-setting.tsx +1 -3
  476. package/src/account/sessions-setting.tsx +4 -2
  477. package/src/admin/admin-action-confirm.tsx +4 -7
  478. package/src/admin/admin-action-log.tsx +29 -29
  479. package/src/admin/admin-area-labels.ts +4 -1
  480. package/src/admin/admin-overview.tsx +8 -2
  481. package/src/admin/admin-sections.tsx +3 -1
  482. package/src/admin/admin-tool-links.tsx +7 -1
  483. package/src/admin/invitations-panel.tsx +5 -11
  484. package/src/admin/mail-test-card.tsx +1 -2
  485. package/src/admin/reviewer-scope-editor.tsx +4 -9
  486. package/src/admin/role-select.tsx +4 -2
  487. package/src/admin/user-roster.tsx +2 -11
  488. package/src/auth/accept-invitation.tsx +1 -7
  489. package/src/auth/auth-errors.ts +1 -6
  490. package/src/auth/forgot-password-form.tsx +2 -7
  491. package/src/auth/register-form.tsx +7 -8
  492. package/src/auth/reset-password-form.tsx +2 -5
  493. package/src/auth/sign-in-form.tsx +15 -14
  494. package/src/auth/verify-email.tsx +2 -7
  495. package/src/billing/billing-banner.tsx +3 -7
  496. package/src/billing/billing-labels.ts +6 -4
  497. package/src/billing/checkout-processing.ts +0 -1
  498. package/src/billing/plan-card.tsx +9 -8
  499. package/src/billing/plan-limit-toast.tsx +1 -2
  500. package/src/billing/plan-limit.ts +1 -2
  501. package/src/billing/plan-price.ts +1 -4
  502. package/src/billing/plan-switch.tsx +1 -2
  503. package/src/billing/subscription-actions.tsx +5 -2
  504. package/src/components/account-chips.tsx +1 -7
  505. package/src/components/alert-banner.tsx +2 -8
  506. package/src/components/amount-input.tsx +206 -178
  507. package/src/components/authed-image.tsx +7 -4
  508. package/src/components/autocomplete.tsx +7 -9
  509. package/src/components/bulk-action-bar.tsx +2 -7
  510. package/src/components/button-group.tsx +1 -2
  511. package/src/components/button-look.ts +6 -17
  512. package/src/components/button.tsx +1 -4
  513. package/src/components/calculator.tsx +6 -9
  514. package/src/components/calendar-heatmap.tsx +5 -10
  515. package/src/components/card.tsx +9 -13
  516. package/src/components/chart-zoom-core.tsx +6 -33
  517. package/src/components/chart.tsx +8 -31
  518. package/src/components/checkbox-group.tsx +1 -4
  519. package/src/components/chip-input.tsx +6 -6
  520. package/src/components/chip.tsx +14 -26
  521. package/src/components/choice-card.tsx +4 -18
  522. package/src/components/column-mapper-labels.ts +3 -10
  523. package/src/components/column-mapper.tsx +33 -122
  524. package/src/components/combobox-core.tsx +12 -42
  525. package/src/components/combobox.tsx +2 -6
  526. package/src/components/confirm-dialog.tsx +1 -3
  527. package/src/components/copy-button.tsx +2 -4
  528. package/src/components/country-select.tsx +9 -21
  529. package/src/components/currency-option-list.tsx +13 -14
  530. package/src/components/currency-select.tsx +2 -7
  531. package/src/components/danger-confirm.tsx +8 -9
  532. package/src/components/data-table-cells.tsx +1 -2
  533. package/src/components/data-table-column-settings.tsx +1 -3
  534. package/src/components/data-table-filter-popover.tsx +5 -19
  535. package/src/components/data-table-filters.ts +1 -6
  536. package/src/components/data-table-fit.ts +1 -3
  537. package/src/components/data-table-groups.tsx +3 -1
  538. package/src/components/data-table-head.tsx +27 -45
  539. package/src/components/data-table-mobile.tsx +99 -108
  540. package/src/components/data-table-pagination.tsx +2 -6
  541. package/src/components/data-table-row-actions.tsx +25 -24
  542. package/src/components/data-table-row.tsx +16 -17
  543. package/src/components/data-table-shared.tsx +10 -16
  544. package/src/components/data-table-sort.ts +1 -2
  545. package/src/components/data-table-virtual.ts +9 -4
  546. package/src/components/data-table.tsx +489 -501
  547. package/src/components/date-picker.tsx +1 -7
  548. package/src/components/date-range-picker.tsx +3 -13
  549. package/src/components/description-list.tsx +7 -13
  550. package/src/components/dialog-frame.tsx +12 -3
  551. package/src/components/disclosure.tsx +8 -12
  552. package/src/components/dropdown.tsx +3 -11
  553. package/src/components/empty-state.tsx +1 -3
  554. package/src/components/entity-combobox.tsx +2 -6
  555. package/src/components/error-boundary.tsx +7 -7
  556. package/src/components/field-base.tsx +8 -14
  557. package/src/components/field-parts.tsx +12 -23
  558. package/src/components/field-sync.tsx +7 -11
  559. package/src/components/file-button.tsx +7 -3
  560. package/src/components/file-dropzone.tsx +7 -12
  561. package/src/components/floating-panel.tsx +44 -51
  562. package/src/components/focus-ring.ts +1 -2
  563. package/src/components/form-actions.tsx +1 -4
  564. package/src/components/grouped-picker.tsx +6 -8
  565. package/src/components/hover-menu.tsx +1 -4
  566. package/src/components/iban-input-labels.ts +1 -2
  567. package/src/components/icon-button.tsx +46 -48
  568. package/src/components/icon-picker.tsx +4 -17
  569. package/src/components/image-grid.tsx +1 -6
  570. package/src/components/inline-edit-field.tsx +1 -5
  571. package/src/components/inline-entity-combobox.tsx +6 -21
  572. package/src/components/input.tsx +14 -2
  573. package/src/components/jump-calendar.tsx +2 -6
  574. package/src/components/legal-labels.ts +1 -2
  575. package/src/components/legal-page.tsx +18 -7
  576. package/src/components/legal.tsx +14 -5
  577. package/src/components/lightbox.tsx +1 -3
  578. package/src/components/line-items.tsx +7 -15
  579. package/src/components/list.tsx +29 -25
  580. package/src/components/measured-grid.tsx +8 -30
  581. package/src/components/menu-item.tsx +1 -3
  582. package/src/components/mini-calendar.tsx +129 -159
  583. package/src/components/money-field.tsx +4 -2
  584. package/src/components/month-picker.tsx +14 -21
  585. package/src/components/multi-entity-combobox.tsx +6 -26
  586. package/src/components/multi-select.tsx +5 -9
  587. package/src/components/nav-pills.tsx +10 -2
  588. package/src/components/number-field.tsx +18 -15
  589. package/src/components/number-input.tsx +3 -19
  590. package/src/components/numpad-sheet.tsx +9 -13
  591. package/src/components/one-time-code-input.tsx +6 -11
  592. package/src/components/page-contents.tsx +2 -9
  593. package/src/components/page-header.tsx +5 -10
  594. package/src/components/password-strength-labels.ts +1 -2
  595. package/src/components/password-strength.tsx +6 -9
  596. package/src/components/phone-input.tsx +2 -13
  597. package/src/components/picker-sheet.tsx +2 -5
  598. package/src/components/pie-chart.tsx +6 -12
  599. package/src/components/popover.tsx +2 -1
  600. package/src/components/progress-bar.tsx +16 -25
  601. package/src/components/qr-code.tsx +2 -9
  602. package/src/components/row-actions.tsx +9 -1
  603. package/src/components/search-field.tsx +4 -5
  604. package/src/components/select.tsx +2 -10
  605. package/src/components/separator.tsx +1 -5
  606. package/src/components/series-chart-axes.ts +5 -5
  607. package/src/components/series-chart-budget.ts +1 -4
  608. package/src/components/series-chart-ticks.ts +1 -4
  609. package/src/components/series-chart.tsx +43 -83
  610. package/src/components/settings-fields.tsx +20 -15
  611. package/src/components/share-card.tsx +6 -14
  612. package/src/components/sign-chip.tsx +16 -16
  613. package/src/components/signature-pad.tsx +21 -13
  614. package/src/components/signed-amount.tsx +6 -14
  615. package/src/components/skeleton.tsx +2 -13
  616. package/src/components/slider.tsx +9 -20
  617. package/src/components/sparkline.tsx +2 -13
  618. package/src/components/stat-tile.tsx +13 -24
  619. package/src/components/swatch-picker.tsx +8 -3
  620. package/src/components/swipeable-row.tsx +2 -11
  621. package/src/components/table-skeleton.tsx +4 -1
  622. package/src/components/table.tsx +12 -8
  623. package/src/components/tabs.tsx +24 -39
  624. package/src/components/text-link.tsx +6 -6
  625. package/src/components/text.tsx +1 -2
  626. package/src/components/tile-radio.tsx +6 -19
  627. package/src/components/time-input.tsx +4 -5
  628. package/src/components/toast.tsx +3 -12
  629. package/src/components/toggle-group.tsx +9 -9
  630. package/src/components/toggle-legend.tsx +4 -16
  631. package/src/components/tooltip.tsx +9 -48
  632. package/src/components/translation-review-editor.tsx +4 -4
  633. package/src/components/translation-review-parts.tsx +7 -1
  634. package/src/components/translation-review.tsx +15 -16
  635. package/src/components/tree-view.tsx +17 -20
  636. package/src/components/treemap.tsx +3 -15
  637. package/src/components/trigger-aria.ts +1 -4
  638. package/src/components/use-table-state.ts +16 -17
  639. package/src/components/user-avatar.tsx +4 -21
  640. package/src/demo/demo-start.tsx +8 -4
  641. package/src/feedback/feedback-attachment-labels.ts +2 -1
  642. package/src/feedback/feedback-attachment.tsx +16 -29
  643. package/src/feedback/feedback-capture.ts +3 -1
  644. package/src/feedback/feedback-comment-thread.tsx +9 -6
  645. package/src/feedback/feedback-context.tsx +1 -4
  646. package/src/feedback/feedback-dialog.tsx +3 -4
  647. package/src/feedback/feedback-inbox.tsx +3 -9
  648. package/src/feedback/feedback-public-list.tsx +7 -1
  649. package/src/feedback/feedback-record.ts +6 -14
  650. package/src/feedback/feedback-replies.tsx +10 -5
  651. package/src/feedback/feedback-row-detail.tsx +2 -5
  652. package/src/feedback/feedback-status-undo.ts +1 -4
  653. package/src/feedback/feedback-submit-dialog.tsx +4 -4
  654. package/src/feedback/feedback-table.tsx +12 -8
  655. package/src/feedback/feedback-thread.tsx +4 -16
  656. package/src/feedback/feedback-vocabulary.ts +72 -82
  657. package/src/feedback/feedback-vote-button.tsx +9 -8
  658. package/src/hooks/use-anchored-rect.ts +1 -4
  659. package/src/hooks/use-document-title.ts +3 -1
  660. package/src/hooks/use-file-drop.ts +1 -3
  661. package/src/hooks/use-file-picker-labels.ts +1 -2
  662. package/src/hooks/use-file-picker.tsx +1 -5
  663. package/src/hooks/use-focus-trap.ts +1 -2
  664. package/src/hooks/use-overlay-history.ts +10 -5
  665. package/src/hooks/use-row-swipe.ts +1 -6
  666. package/src/i18n/defaults.ts +1 -4
  667. package/src/i18n/german.ts +33 -49
  668. package/src/i18n/kit-labels.tsx +5 -20
  669. package/src/i18n/languages.ts +2 -8
  670. package/src/i18n/locales/en.ts +11 -31
  671. package/src/i18n/locales/es.ts +35 -49
  672. package/src/i18n/locales/fr.ts +34 -51
  673. package/src/i18n/locales/hu.ts +26 -37
  674. package/src/i18n/locales/it.ts +35 -52
  675. package/src/i18n/locales/zh.ts +14 -32
  676. package/src/i18n/plurals.ts +4 -1
  677. package/src/i18n/review.ts +18 -7
  678. package/src/i18n/shared-labels.ts +1 -2
  679. package/src/index.ts +106 -32
  680. package/src/landing/access.ts +2 -7
  681. package/src/landing/landing-sections.tsx +14 -15
  682. package/src/landing/page-seo.ts +1 -3
  683. package/src/lib/calc.ts +4 -1
  684. package/src/lib/clipboard-minus.ts +4 -1
  685. package/src/lib/dates.ts +2 -10
  686. package/src/lib/decimal-marks.ts +1 -3
  687. package/src/lib/device-settings.ts +2 -1
  688. package/src/lib/direction.ts +1 -3
  689. package/src/lib/iban.ts +89 -9
  690. package/src/lib/logger.ts +1 -5
  691. package/src/lib/person-name.ts +1 -3
  692. package/src/lib/phone.ts +5 -8
  693. package/src/lib/qr-encode.ts +32 -8
  694. package/src/lib/session-refresh.ts +5 -6
  695. package/src/lib/table-text.ts +24 -6
  696. package/src/lib/text-match.ts +15 -3
  697. package/src/lib/translation-review.ts +1 -3
  698. package/src/notifications/notification-inbox.tsx +17 -4
  699. package/src/notifications/notification-parts.tsx +1 -2
  700. package/src/notifications/notification-types-setting.tsx +19 -18
  701. package/src/notifications/notifications-labels.ts +1 -2
  702. package/src/notifications/push-device-setting.tsx +7 -1
  703. package/src/notifications/push-devices-setting.tsx +7 -3
  704. package/src/notifications/push-worker.ts +10 -2
  705. package/src/notifications/quiet-hours-setting.tsx +4 -1
  706. package/src/notifications/use-push-device.ts +4 -1
  707. package/src/offline/pwa-update-prompt.tsx +7 -1
  708. package/src/offline/query-persistence.ts +9 -6
  709. package/src/offline.ts +6 -1
  710. package/src/rhf/fields.tsx +50 -19
  711. package/src/rhf/form-core.tsx +2 -6
  712. package/src/rhf/line-items.tsx +5 -7
  713. package/src/rhf/use-rhf-wizard-step.ts +3 -12
  714. package/src/search/command-palette.tsx +15 -23
  715. package/src/search/global-search.tsx +38 -8
  716. package/src/search/search-index.ts +5 -1
  717. package/src/settings/device-reset-setting.tsx +5 -8
  718. package/src/settings/settings-heading.tsx +3 -1
  719. package/src/settings/settings-layout.tsx +6 -13
  720. package/src/settings/use-settings-route.ts +4 -3
  721. package/src/shell/app-shell.tsx +48 -24
  722. package/src/shell/auth-layout.tsx +1 -6
  723. package/src/shell/dev-menu.tsx +12 -6
  724. package/src/shell/option-switcher-menu.tsx +1 -3
  725. package/src/shell/sync-status-indicator.tsx +14 -12
  726. package/src/shell/top-bar-parts-labels.ts +1 -3
  727. package/src/shell/topbar-action-menu.tsx +9 -8
  728. package/src/shell/topbar-controls.tsx +5 -19
  729. package/src/shell/tour-menu.tsx +9 -1
  730. package/src/sync/db.ts +5 -1
  731. package/src/sync/engine.ts +44 -12
  732. package/src/sync.ts +16 -2
  733. package/src/testing/css-variables.ts +1 -2
  734. package/src/testing/index.ts +1 -6
  735. package/src/testing/react.ts +1 -2
  736. package/src/testing/viewport.ts +9 -9
  737. package/src/theme/contrast-tokens.ts +13 -2
  738. package/src/theme/palette-derive.ts +24 -50
  739. package/src/theme/palette-presets.ts +0 -1
  740. package/src/theme/palette-store.ts +1 -4
  741. package/src/theme/text-size.ts +1 -1
  742. package/src/theme/theme-store.ts +2 -6
  743. package/src/tour/tour-catalogue.tsx +4 -2
  744. package/src/tour/tour-dock.ts +5 -1
  745. package/src/tour/tour-engine.ts +2 -6
  746. package/src/tour/tour.tsx +28 -12
  747. package/src/tour/use-tour-progress.ts +8 -2
  748. package/src/tour/use-tour-url-sync.ts +3 -1
  749. package/src/vite-env.d.ts +1 -4
  750. package/src/wizard/stepper-nav.tsx +10 -35
  751. package/src/wizard/types.ts +1 -4
  752. package/src/wizard/use-wizard.ts +28 -43
  753. package/src/wizard/validation.ts +1 -5
  754. package/src/wizard/wizard-context.tsx +2 -6
  755. package/src/wizard/wizard-step.tsx +1 -8
  756. package/src/wizard/wizard-summary.tsx +2 -6
  757. package/tokens.css +393 -152
@@ -45,10 +45,7 @@ import { useCallback, useEffect, useRef } from "react";
45
45
  import type { FieldPath, FieldValues, UseFormReturn } from "react-hook-form";
46
46
  import { useOptionalWizardContext } from "../wizard/wizard-context";
47
47
 
48
- export type RhfWizardStepOptions<
49
- TFieldValues extends FieldValues,
50
- TTransformed = TFieldValues,
51
- > =
48
+ export type RhfWizardStepOptions<TFieldValues extends FieldValues, TTransformed = TFieldValues> =
52
49
  | {
53
50
  /** Validate only these fields — the step's share of a form that spans steps. */
54
51
  fields: readonly FieldPath<TFieldValues>[];
@@ -68,15 +65,9 @@ export type RhfWizardStepOptions<
68
65
  * Connects `form` to the wizard's step validation and returns the step's validator.
69
66
  * See the module note for the two modes.
70
67
  */
71
- export function useRhfWizardStep<
72
- TFieldValues extends FieldValues,
73
- TContext = unknown,
74
- TTransformed = TFieldValues,
75
- >(
68
+ export function useRhfWizardStep<TFieldValues extends FieldValues, TContext = unknown, TTransformed = TFieldValues>(
76
69
  form: UseFormReturn<TFieldValues, TContext, TTransformed>,
77
- options?:
78
- | RhfWizardStepOptions<TFieldValues, TTransformed>
79
- | ((values: TTransformed) => void),
70
+ options?: RhfWizardStepOptions<TFieldValues, TTransformed> | ((values: TTransformed) => void),
80
71
  ): () => Promise<boolean> {
81
72
  const opts = typeof options === "function" ? { onValid: options } : (options ?? {});
82
73
  const optsRef = useRef(opts);
@@ -227,8 +227,7 @@ export function CommandPalette({
227
227
  // go from a German name to an English "Search" on update — so a translated
228
228
  // placeholder keeps doing the job until a `dialog` is supplied.
229
229
  const dialogName =
230
- l.dialog ??
231
- (l.placeholder !== DEFAULT_COMMAND_PALETTE_LABELS.placeholder ? l.placeholder : DEFAULT_DIALOG_NAME);
230
+ l.dialog ?? (l.placeholder !== DEFAULT_COMMAND_PALETTE_LABELS.placeholder ? l.placeholder : DEFAULT_DIALOG_NAME);
232
231
  const [ownQuery, setOwnQuery] = useState("");
233
232
  const controlled = queryProp !== undefined;
234
233
  const query = controlled ? queryProp : ownQuery;
@@ -426,9 +425,7 @@ export function CommandPalette({
426
425
  data-fullscreen={isPhone || undefined}
427
426
  className={cn(
428
427
  "flex w-full flex-col overflow-hidden bg-surface outline-none",
429
- isPhone
430
- ? "h-full"
431
- : "max-h-[70vh] max-w-xl rounded-xl border border-subtle shadow-2xl",
428
+ isPhone ? "h-full" : "max-h-[70vh] max-w-xl rounded-xl border border-subtle shadow-2xl",
432
429
  )}
433
430
  // Full screen means edge to edge, so the notch, the home indicator and the
434
431
  // rounded corners are the panel's to keep clear of.
@@ -518,7 +515,13 @@ export function CommandPalette({
518
515
  the list markup in between is presentational so the listbox's children are
519
516
  groups and options only — as a plain <li>/<ul> tree a reader announced
520
517
  "list, 2 items" between options and never tied the heading to its rows. */}
521
- <ul id={listId} ref={listRef} role="listbox" aria-label={dialogName} className="min-h-0 flex-1 overflow-y-auto py-1">
518
+ <ul
519
+ id={listId}
520
+ ref={listRef}
521
+ role="listbox"
522
+ aria-label={dialogName}
523
+ className="min-h-0 flex-1 overflow-y-auto py-1"
524
+ >
522
525
  {groups.map(({ group, items }, groupIndex) => (
523
526
  <li key={group} role="presentation">
524
527
  <div
@@ -540,7 +543,9 @@ export function CommandPalette({
540
543
  comfortable ? "min-h-11 py-2.5" : "py-2",
541
544
  )}
542
545
  >
543
- {item.icon && <span className="flex size-4 shrink-0 items-center justify-center">{item.icon}</span>}
546
+ {item.icon && (
547
+ <span className="flex size-4 shrink-0 items-center justify-center">{item.icon}</span>
548
+ )}
544
549
  <span className="min-w-0 flex-1 truncate">{item.label}</span>
545
550
  </li>
546
551
  );
@@ -561,9 +566,7 @@ export function CommandPalette({
561
566
  className: cn(
562
567
  "flex w-full items-center gap-2.5 px-3 text-start",
563
568
  comfortable ? "min-h-11 py-2.5 text-base" : "py-2 text-sm",
564
- isActive
565
- ? "bg-active text-primary"
566
- : "text-secondary",
569
+ isActive ? "bg-active text-primary" : "text-secondary",
567
570
  ),
568
571
  };
569
572
  const inner = (
@@ -595,14 +598,7 @@ export function CommandPalette({
595
598
  // #451) — and the palette deliberately stays OPEN for
596
599
  // it: ⌘-clicking three results in a row is the reason to
597
600
  // want this, and closing after the first would undo it.
598
- if (
599
- e.button !== 0 ||
600
- e.metaKey ||
601
- e.ctrlKey ||
602
- e.shiftKey ||
603
- e.altKey
604
- )
605
- return;
601
+ if (e.button !== 0 || e.metaKey || e.ctrlKey || e.shiftKey || e.altKey) return;
606
602
  e.preventDefault();
607
603
  choose(item);
608
604
  }}
@@ -622,11 +618,7 @@ export function CommandPalette({
622
618
  ))}
623
619
  </ul>
624
620
 
625
- {l.hint && (
626
- <div className="border-t border-subtle px-3 py-1.5 text-caption text-placeholder">
627
- {l.hint}
628
- </div>
629
- )}
621
+ {l.hint && <div className="border-t border-subtle px-3 py-1.5 text-caption text-placeholder">{l.hint}</div>}
630
622
  </div>
631
623
  </div>,
632
624
  document.body,
@@ -206,9 +206,17 @@ const identity = (href: string) => href;
206
206
  function signature(entries: readonly SearchEntry[]): string {
207
207
  return entries
208
208
  .map((e) =>
209
- [e.id, e.title, (e.keywords ?? []).join("\u0003"), e.description, e.group, e.hint, e.href, e.weight, e.redact].join(
210
- "\u0001",
211
- ),
209
+ [
210
+ e.id,
211
+ e.title,
212
+ (e.keywords ?? []).join("\u0003"),
213
+ e.description,
214
+ e.group,
215
+ e.hint,
216
+ e.href,
217
+ e.weight,
218
+ e.redact,
219
+ ].join("\u0001"),
212
220
  )
213
221
  .join("\u0002");
214
222
  }
@@ -217,7 +225,9 @@ function signature(entries: readonly SearchEntry[]): string {
217
225
  * row that was clicked (and held focus) is gone. */
218
226
  function refocusField() {
219
227
  requestAnimationFrame(() => {
220
- const fields = document.querySelectorAll<HTMLInputElement>('[role="dialog"][aria-modal="true"] input[role="combobox"]');
228
+ const fields = document.querySelectorAll<HTMLInputElement>(
229
+ '[role="dialog"][aria-modal="true"] input[role="combobox"]',
230
+ );
221
231
  fields[fields.length - 1]?.focus();
222
232
  });
223
233
  }
@@ -458,8 +468,7 @@ function GlobalSearchImpl({
458
468
 
459
469
  if (!q) {
460
470
  const out: CommandItem[] = [];
461
- const groupOf = (entry: SearchEntry) =>
462
- suggestionsKeepGroups ? (entry.group ?? l.suggestions) : l.suggestions;
471
+ const groupOf = (entry: SearchEntry) => (suggestionsKeepGroups ? (entry.group ?? l.suggestions) : l.suggestions);
463
472
  suggestionList.forEach((s, i) => {
464
473
  if (typeof s === "string") {
465
474
  const entry = byId.get(s);
@@ -532,7 +541,26 @@ function GlobalSearchImpl({
532
541
  }
533
542
 
534
543
  return ordered(out);
535
- }, [q, suggestionList, suggestionsKeepGroups, byId, index, sourceList, sourceResults, order, groupLimit, toItem, l.suggestions, l.results, pl.loading, pl.error, setOpen, setQuery, noop, redactLabels]);
544
+ }, [
545
+ q,
546
+ suggestionList,
547
+ suggestionsKeepGroups,
548
+ byId,
549
+ index,
550
+ sourceList,
551
+ sourceResults,
552
+ order,
553
+ groupLimit,
554
+ toItem,
555
+ l.suggestions,
556
+ l.results,
557
+ pl.loading,
558
+ pl.error,
559
+ setOpen,
560
+ setQuery,
561
+ noop,
562
+ redactLabels,
563
+ ]);
536
564
  /* eslint-enable react-hooks/refs */
537
565
 
538
566
  // The palette re-runs its provider on a `revision` change, never on the provider's
@@ -577,7 +605,9 @@ function GlobalSearchImpl({
577
605
  >
578
606
  <Search
579
607
  className={triggerIconSize === undefined ? "size-4" : undefined}
580
- style={triggerIconSize === undefined ? undefined : { width: triggerIconSize, height: triggerIconSize }}
608
+ style={
609
+ triggerIconSize === undefined ? undefined : { width: triggerIconSize, height: triggerIconSize }
610
+ }
581
611
  />
582
612
  </button>
583
613
  </Tooltip>
@@ -158,7 +158,11 @@ function withinDistance(a: string, b: string, max: number): boolean {
158
158
 
159
159
  type WordKind = keyof typeof WORD_SCORE;
160
160
 
161
- function matchWord(q: string, word: string, opts: Required<Pick<SearchIndexOptions, "typoMinLength" | "infixMinLength">>): WordKind | null {
161
+ function matchWord(
162
+ q: string,
163
+ word: string,
164
+ opts: Required<Pick<SearchIndexOptions, "typoMinLength" | "infixMinLength">>,
165
+ ): WordKind | null {
162
166
  if (word === q) return "exact";
163
167
  if (word.startsWith(q)) return "prefix";
164
168
  if (q.length >= opts.infixMinLength && word.includes(q)) return "infix";
@@ -41,8 +41,10 @@ export { DEFAULT_DEVICE_RESET_LABELS };
41
41
  export const DEVICE_RESET_ANCHOR = "settings-device-reset";
42
42
 
43
43
  // `onReset` is the card's own: the DOM's form-reset handler never fires on a div.
44
- export interface DeviceResetSettingProps
45
- extends Omit<SettingsSectionProps, "anchor" | "title" | "description" | "children" | "onReset"> {
44
+ export interface DeviceResetSettingProps extends Omit<
45
+ SettingsSectionProps,
46
+ "anchor" | "title" | "description" | "children" | "onReset"
47
+ > {
46
48
  /** The app's sentence after the kit's description: what of its own goes back, and what
47
49
  * stays (keksdose: the date format, the feature set and the gestures go; presentation
48
50
  * mode and the home position stay). */
@@ -72,12 +74,7 @@ export interface DeviceResetSettingProps
72
74
  * `deviceReset`; `title` and `keywords` from these labels), last in its appearance group:
73
75
  * inside a `SettingsLayout`, `SettingsSection` throws in development without it.
74
76
  */
75
- export function DeviceResetSetting({
76
- description,
77
- labels: labelsProp,
78
- onReset,
79
- ...rest
80
- }: DeviceResetSettingProps) {
77
+ export function DeviceResetSetting({ description, labels: labelsProp, onReset, ...rest }: DeviceResetSettingProps) {
81
78
  const labels = useKitLabels("deviceReset", DEFAULT_DEVICE_RESET_LABELS, labelsProp);
82
79
  const confirm = useConfirm();
83
80
 
@@ -50,7 +50,9 @@ export function useSettingsHeadingLevel(): SettingsHeadingTag | null {
50
50
  export function SettingsCardTitle({ className, ...props }: ComponentPropsWithoutRef<"div">) {
51
51
  const level = useSettingsHeadingLevel();
52
52
  if (!level) return <div {...props} className={cn(CARD_TITLE_CLASS, className)} />;
53
- return <SettingsHeading as={level} tabIndex={-1} {...props} className={cn(CARD_TITLE_CLASS, "outline-none", className)} />;
53
+ return (
54
+ <SettingsHeading as={level} tabIndex={-1} {...props} className={cn(CARD_TITLE_CLASS, "outline-none", className)} />
55
+ );
54
56
  }
55
57
 
56
58
  /**
@@ -16,12 +16,7 @@ import { cn } from "../lib/cn";
16
16
  import { useKitLabels, type LabelOverride } from "../i18n/kit-labels";
17
17
  import { createSearchIndex } from "../search/search-index";
18
18
  import type { SearchEntry } from "../search/search-index";
19
- import {
20
- normalizeSettingsBase,
21
- settingsHref,
22
- settingsKeywords,
23
- visibleSettingsEntries,
24
- } from "./settings-catalogue";
19
+ import { normalizeSettingsBase, settingsHref, settingsKeywords, visibleSettingsEntries } from "./settings-catalogue";
25
20
  import type { SettingsEntry, SettingsGroup } from "./settings-catalogue";
26
21
  import { SettingsLayoutContext } from "./settings-context";
27
22
  import type { SettingsLayoutContextValue } from "./settings-context";
@@ -337,7 +332,10 @@ export function SettingsLayout<G extends string>({
337
332
  e.preventDefault();
338
333
  route.back();
339
334
  }}
340
- className={cn("-ms-1 inline-flex items-center gap-0.5 self-start rounded-md pe-1 text-sm font-medium text-muted hover:text-primary", FOCUS_RING)}
335
+ className={cn(
336
+ "-ms-1 inline-flex items-center gap-0.5 self-start rounded-md pe-1 text-sm font-medium text-muted hover:text-primary",
337
+ FOCUS_RING,
338
+ )}
341
339
  >
342
340
  <ChevronLeft aria-hidden className="size-4 rtl:-scale-x-100" />
343
341
  {pageTitle}
@@ -458,12 +456,7 @@ export function SettingsLayout<G extends string>({
458
456
  {searching ? (
459
457
  results
460
458
  ) : open ? (
461
- <div
462
- id={panelId}
463
- role="tabpanel"
464
- aria-labelledby={`${panelId}-tab`}
465
- className="space-y-4"
466
- >
459
+ <div id={panelId} role="tabpanel" aria-labelledby={`${panelId}-tab`} className="space-y-4">
467
460
  <PageHeader as="h2" size="sm" title={open.title} description={open.help} />
468
461
  {cards(open.id)}
469
462
  </div>
@@ -70,7 +70,9 @@ export function settingsFromListState(): Record<string, true> {
70
70
  }
71
71
 
72
72
  function isFromList(state: unknown): boolean {
73
- return typeof state === "object" && state !== null && (state as Record<string, unknown>)[SETTINGS_FROM_LIST_STATE] === true;
73
+ return (
74
+ typeof state === "object" && state !== null && (state as Record<string, unknown>)[SETTINGS_FROM_LIST_STATE] === true
75
+ );
74
76
  }
75
77
 
76
78
  export interface SettingsLocation {
@@ -197,8 +199,7 @@ export function useSettingsRoute<G extends string>(options: UseSettingsRouteOpti
197
199
  return map;
198
200
  }, [entries]);
199
201
  const ids = visible.map((g) => g.id);
200
- const fallback =
201
- defaultGroup !== undefined && ids.includes(defaultGroup) ? defaultGroup : (ids[0] ?? null);
202
+ const fallback = defaultGroup !== undefined && ids.includes(defaultGroup) ? defaultGroup : (ids[0] ?? null);
202
203
 
203
204
  const { group, sub, redirect } = resolveSettingsLocation(location, {
204
205
  basePath: base,
@@ -1,4 +1,14 @@
1
- import { createContext, useCallback, useContext, useEffect, useId, useLayoutEffect, useMemo, useRef, useState } from "react";
1
+ import {
2
+ createContext,
3
+ useCallback,
4
+ useContext,
5
+ useEffect,
6
+ useId,
7
+ useLayoutEffect,
8
+ useMemo,
9
+ useRef,
10
+ useState,
11
+ } from "react";
2
12
  import type { ComponentPropsWithoutRef, ReactNode, Ref } from "react";
3
13
  import { createPortal } from "react-dom";
4
14
  import { Link, NavLink, matchPath, useHref, useLocation } from "react-router";
@@ -401,9 +411,7 @@ function useNavHeightVar(
401
411
  // the OUTERMOST shell, for what it portals to <body> (a sheet docking on the bar).
402
412
  // The DOM check backs up the context for a shell mounted in a separate React root.
403
413
  const global = !embedded && !shell?.parentElement?.closest("[data-app-shell]");
404
- const targets = [shell, global ? document.documentElement : null].filter(
405
- (el): el is HTMLElement => el !== null,
406
- );
414
+ const targets = [shell, global ? document.documentElement : null].filter((el): el is HTMLElement => el !== null);
407
415
  // `getBoundingClientRect().height`, rounded DOWN — not `offsetHeight`, and not
408
416
  // ceil. Measured on the running app at 406x816: the bar is **55.5px** tall, and
409
417
  // both `offsetHeight` and `Math.ceil` answer 56. That is why live #314 round four
@@ -484,8 +492,7 @@ export function AppShell({
484
492
  useNavDevWarnings(nav);
485
493
  // An embedded shell sharing the default key would overwrite the outer app's sidebar
486
494
  // preference with its own — so it persists only when given a key of its own.
487
- const collapseStorageKey =
488
- collapseStorageKeyProp ?? (embedded ? null : "appLayout.sidebarCollapsed");
495
+ const collapseStorageKey = collapseStorageKeyProp ?? (embedded ? null : "appLayout.sidebarCollapsed");
489
496
  // The three props are per-shell overrides of the provider's `appShell`; one left
490
497
  // undefined falls through to the provider rather than to English.
491
498
  const labels = useKitLabels("appShell", DEFAULT_APP_SHELL_LABELS, {
@@ -692,10 +699,7 @@ export function AppShell({
692
699
  group's `items` were simply unreachable below `md`. ONE measured box, so
693
700
  `--app-nav-h` covers both rows and whatever docks on the bar sits on the
694
701
  whole of it. */}
695
- <div
696
- ref={navRef}
697
- className="md:hidden fixed bottom-0 inset-x-0 z-30 border-t border-subtle bg-surface"
698
- >
702
+ <div ref={navRef} className="md:hidden fixed bottom-0 inset-x-0 z-30 border-t border-subtle bg-surface">
699
703
  {mobileSubNav && <MobileSubNav nav={nav} layout={mobileSubNavLayout} />}
700
704
  <nav
701
705
  data-tour="nav"
@@ -854,9 +858,7 @@ const mobileCellClass = (active: boolean) =>
854
858
  // label on two lines never leaves its neighbours a different shape.
855
859
  "relative flex h-full w-full flex-col items-center justify-start py-2 text-caption gap-0.5 transition-colors",
856
860
  "before:absolute before:content-[''] before:inset-x-4 before:top-0 before:h-0.5 before:rounded-full before:transition-colors",
857
- active
858
- ? "font-semibold text-brand before:bg-brand"
859
- : "text-muted before:bg-transparent",
861
+ active ? "font-semibold text-brand before:bg-brand" : "text-muted before:bg-transparent",
860
862
  );
861
863
 
862
864
  /**
@@ -939,7 +941,11 @@ function SheetLink({
939
941
  level === "entry"
940
942
  ? "flex min-h-11 items-center gap-3 rounded-md px-3 py-2 text-sm transition-colors"
941
943
  : "flex min-h-11 items-center gap-2.5 rounded-md px-2.5 py-1.5 text-sm transition-colors",
942
- isActive ? "bg-inverse text-inverse" : level === "entry" ? "text-primary hover:bg-hover" : "text-secondary hover:bg-hover",
944
+ isActive
945
+ ? "bg-inverse text-inverse"
946
+ : level === "entry"
947
+ ? "text-primary hover:bg-hover"
948
+ : "text-secondary hover:bg-hover",
943
949
  )
944
950
  }
945
951
  >
@@ -1001,7 +1007,14 @@ function MobileGroupCell({
1001
1007
  <ul className="space-y-1">
1002
1008
  {!ownPageListed && (
1003
1009
  <li>
1004
- <SheetLink to={item.to} end={item.end} icon={item.icon} label={labels.overview} onClick={close} level="entry" />
1010
+ <SheetLink
1011
+ to={item.to}
1012
+ end={item.end}
1013
+ icon={item.icon}
1014
+ label={labels.overview}
1015
+ onClick={close}
1016
+ level="entry"
1017
+ />
1005
1018
  </li>
1006
1019
  )}
1007
1020
  {pages.map((sub) => (
@@ -1090,12 +1103,26 @@ function MobileMoreCell({
1090
1103
  <ul className="space-y-1">
1091
1104
  {hidden.map((item) => (
1092
1105
  <li key={item.to}>
1093
- <SheetLink to={item.to} end={item.end} icon={item.icon} label={item.label} onClick={close} level="entry" />
1106
+ <SheetLink
1107
+ to={item.to}
1108
+ end={item.end}
1109
+ icon={item.icon}
1110
+ label={item.label}
1111
+ onClick={close}
1112
+ level="entry"
1113
+ />
1094
1114
  {!!item.items?.length && (
1095
1115
  <ul aria-label={item.label} className="ms-[1.3rem] mt-0.5 space-y-0.5 border-s border-subtle ps-2">
1096
1116
  {item.items.map((sub) => (
1097
1117
  <li key={sub.to}>
1098
- <SheetLink to={sub.to} end={sub.end} icon={sub.icon} label={sub.label} onClick={close} level="page" />
1118
+ <SheetLink
1119
+ to={sub.to}
1120
+ end={sub.end}
1121
+ icon={sub.icon}
1122
+ label={sub.label}
1123
+ onClick={close}
1124
+ level="page"
1125
+ />
1099
1126
  </li>
1100
1127
  ))}
1101
1128
  </ul>
@@ -1182,7 +1209,8 @@ function MobileSubNav({ nav, layout }: { nav: AppShellNavItem[]; layout: "wrap"
1182
1209
 
1183
1210
  /** `strong` is the current page; `trail` is the group that CONTAINS the current page
1184
1211
  * while the page itself is shown elsewhere (the inline list below it). */
1185
- const navLinkClass = (collapsed: boolean, forceActive: boolean, trail = false) =>
1212
+ const navLinkClass =
1213
+ (collapsed: boolean, forceActive: boolean, trail = false) =>
1186
1214
  ({ isActive }: { isActive: boolean }) =>
1187
1215
  `flex items-center gap-3 min-h-9 ${collapsed ? "justify-center px-2" : "px-3"} py-2 rounded-md text-sm transition-colors duration-150 ${
1188
1216
  isActive || (forceActive && !trail)
@@ -1390,9 +1418,7 @@ function SidebarGroup({
1390
1418
  className={({ isActive }) =>
1391
1419
  cn(
1392
1420
  "flex min-h-8 items-center gap-2.5 rounded-md px-2.5 py-1.5 text-sm transition-colors",
1393
- isActive
1394
- ? "bg-inverse text-inverse"
1395
- : "text-secondary hover:bg-hover",
1421
+ isActive ? "bg-inverse text-inverse" : "text-secondary hover:bg-hover",
1396
1422
  )
1397
1423
  }
1398
1424
  >
@@ -1528,9 +1554,7 @@ function SidebarFlyout({ item, children }: { item: AppShellNavItem; children: Re
1528
1554
  className={({ isActive }) =>
1529
1555
  cn(
1530
1556
  "flex items-center gap-2.5 px-3 py-2 text-sm",
1531
- isActive
1532
- ? "bg-active font-medium text-primary"
1533
- : "text-secondary hover:bg-hover",
1557
+ isActive ? "bg-active font-medium text-primary" : "text-secondary hover:bg-hover",
1534
1558
  )
1535
1559
  }
1536
1560
  >
@@ -125,12 +125,7 @@ export function AuthLayout({
125
125
  <div className="mb-2">{logo}</div>
126
126
  ))}
127
127
  {title != null && (
128
- <Heading
129
- className={cn(
130
- "font-semibold leading-tight text-primary",
131
- wide ? "text-2xl md:text-3xl" : "text-2xl",
132
- )}
133
- >
128
+ <Heading className={cn("font-semibold leading-tight text-primary", wide ? "text-2xl md:text-3xl" : "text-2xl")}>
134
129
  {title}
135
130
  </Heading>
136
131
  )}
@@ -182,9 +182,12 @@ export function DevMenu<R extends string, P extends string>({
182
182
  roles && roles.length > 0 && role !== undefined && onRole
183
183
  ? [
184
184
  { kind: "heading", key: "head-role", label: words.roleHeading },
185
- ...roles.map(
186
- (r): TopBarMenuEntry => ({ key: `role-${r}`, label: roleLabel(r), checked: r === role, onSelect: () => pickRole(r) }),
187
- ),
185
+ ...roles.map((r): TopBarMenuEntry => ({
186
+ key: `role-${r}`,
187
+ label: roleLabel(r),
188
+ checked: r === role,
189
+ onSelect: () => pickRole(r),
190
+ })),
188
191
  // Behind a rule, which ends the role group: "Back to" is a way out, not a role.
189
192
  ...(original !== undefined && original !== role
190
193
  ? ([
@@ -225,9 +228,12 @@ export function DevMenu<R extends string, P extends string>({
225
228
  words.planHeading
226
229
  ),
227
230
  },
228
- ...plans.map(
229
- (p): TopBarMenuEntry => ({ key: `plan-${p}`, label: planLabel(p), checked: p === plan, onSelect: () => onPlan(p) }),
230
- ),
231
+ ...plans.map((p): TopBarMenuEntry => ({
232
+ key: `plan-${p}`,
233
+ label: planLabel(p),
234
+ checked: p === plan,
235
+ onSelect: () => onPlan(p),
236
+ })),
231
237
  ]
232
238
  : [];
233
239
 
@@ -60,9 +60,7 @@ export function OptionSwitcherMenu<T extends string>({
60
60
  {(close) => (
61
61
  <ul className="py-1">
62
62
  {heading && (
63
- <li className="px-3 py-1 text-micro font-semibold uppercase tracking-wide text-placeholder">
64
- {heading}
65
- </li>
63
+ <li className="px-3 py-1 text-micro font-semibold uppercase tracking-wide text-placeholder">{heading}</li>
66
64
  )}
67
65
  {options.map((opt) => (
68
66
  <li key={opt.value}>
@@ -160,10 +160,7 @@ export function SyncStatusIndicator({
160
160
 
161
161
  const onlineOnly = storage === "none";
162
162
  // Online-only: nothing waits on the device, so only offline, error, saving and settled.
163
- const state = syncState(
164
- onlineOnly ? { ...status, pending: 0, blocked: 0, waitingForPlan: 0 } : status,
165
- refreshing,
166
- );
163
+ const state = syncState(onlineOnly ? { ...status, pending: 0, blocked: 0, waitingForPlan: 0 } : status, refreshing);
167
164
  const data = dataAttributes(rest);
168
165
  if (hideWhenIdle && state === "synced") return null;
169
166
 
@@ -190,12 +187,13 @@ export function SyncStatusIndicator({
190
187
  text = words.pending(status.pending);
191
188
  break;
192
189
  default:
193
- text = !onlineOnly && status.lastSyncedAt
194
- ? words.syncedAt(
195
- // A clock time in the UI's language, never the browser's (keksdose live #246).
196
- new Date(status.lastSyncedAt).toLocaleTimeString(locale, { hour: "2-digit", minute: "2-digit" }),
197
- )
198
- : words.idle;
190
+ text =
191
+ !onlineOnly && status.lastSyncedAt
192
+ ? words.syncedAt(
193
+ // A clock time in the UI's language, never the browser's (keksdose live #246).
194
+ new Date(status.lastSyncedAt).toLocaleTimeString(locale, { hour: "2-digit", minute: "2-digit" }),
195
+ )
196
+ : words.idle;
199
197
  }
200
198
  if (scope) {
201
199
  text = state === "offline" && scope.offline ? scope.offline : words.scoped(scope.name, text);
@@ -272,7 +270,10 @@ export function SyncStatusIndicator({
272
270
  {...data}
273
271
  role="status"
274
272
  data-sync-state={state}
275
- className={cn("relative inline-flex size-9 shrink-0 items-center justify-center [&>svg]:size-5", TEXT_TONE[tone])}
273
+ className={cn(
274
+ "relative inline-flex size-9 shrink-0 items-center justify-center [&>svg]:size-5",
275
+ TEXT_TONE[tone],
276
+ )}
276
277
  >
277
278
  {glyph}
278
279
  <span className="sr-only">{name}</span>
@@ -288,7 +289,8 @@ export function SyncStatusIndicator({
288
289
  </Tooltip>
289
290
  );
290
291
 
291
- if (!showLabel || !short) return className ? <span className={cn("inline-flex", className)}>{control}</span> : control;
292
+ if (!showLabel || !short)
293
+ return className ? <span className={cn("inline-flex", className)}>{control}</span> : control;
292
294
  return (
293
295
  <span className={cn("inline-flex items-center gap-1", className)}>
294
296
  {control}
@@ -115,9 +115,7 @@ export const DEFAULT_TOP_BAR_PARTS_LABELS: TopBarPartsLabels = {
115
115
  },
116
116
  sync: {
117
117
  blocked: (count) =>
118
- count === 1
119
- ? "1 change cannot be sent from this device"
120
- : `${count} changes cannot be sent from this device`,
118
+ count === 1 ? "1 change cannot be sent from this device" : `${count} changes cannot be sent from this device`,
121
119
  offline: "Offline — changes are saved on this device and will sync when you reconnect",
122
120
  refused: "The server refused the last sync",
123
121
  syncing: "Syncing…",
@@ -83,7 +83,8 @@ type DividerEntry = Extract<TopBarMenuEntry, { kind: "divider" }>;
83
83
  type RowEntry = Exclude<TopBarMenuEntry, HeadingEntry | DividerEntry>;
84
84
 
85
85
  /** What the panel draws from `entries`: loose rows and rules, and headed groups. */
86
- type Block = { kind: "loose"; entry: RowEntry | DividerEntry } | { kind: "group"; heading: HeadingEntry; rows: RowEntry[] };
86
+ type Block =
87
+ { kind: "loose"; entry: RowEntry | DividerEntry } | { kind: "group"; heading: HeadingEntry; rows: RowEntry[] };
87
88
 
88
89
  /**
89
90
  * Cut `entries` into blocks: a heading opens a group that takes the rows after it until
@@ -167,7 +168,8 @@ export interface TopBarMenuHeader {
167
168
  /** What a control is, as far as `HoverMenu` is concerned, when it lives in the header
168
169
  * or the footer: not a menu row. */
169
170
  const SECTION_CONTROLS = "a[href]:not([role]),button:not([role])";
170
- const TABBABLE = 'a[href],button:not([disabled]),input:not([disabled]),select:not([disabled]),textarea:not([disabled]),[tabindex]';
171
+ const TABBABLE =
172
+ "a[href],button:not([disabled]),input:not([disabled]),select:not([disabled]),textarea:not([disabled]),[tabindex]";
171
173
 
172
174
  /**
173
175
  * `scrollable`'s cap (0.51, DevMenu): the glass under the bar. Under `TopBar` the panel
@@ -402,8 +404,7 @@ export function TopBarActionMenu({
402
404
  <>
403
405
  <span className="sr-only">{ariaLabel}</span>
404
406
  {/* The space keeps the name from running into the face's text ("Account
405
- menu3 unread"); as a flex item it takes no room. */}
406
- {" "}
407
+ menu3 unread"); as a flex item it takes no room. */}{" "}
407
408
  {trigger({ open })}
408
409
  </>,
409
410
  );
@@ -500,15 +501,15 @@ export function TopBarActionMenu({
500
501
  // eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions -- a Tab bubbling up from a row or footer link, see keepTabInsidePanel
501
502
  <ul
502
503
  className={cn("py-1", scrollable && SCROLLABLE_PANEL, laidOut && COLUMNS_PANEL, panelClassName)}
503
- style={laidOut ? ({ "--menu-columns-width": `${laidOut.columns.length * 14}rem` } as CSSProperties) : undefined}
504
+ style={
505
+ laidOut ? ({ "--menu-columns-width": `${laidOut.columns.length * 14}rem` } as CSSProperties) : undefined
506
+ }
504
507
  onKeyDown={keepTabInsidePanel}
505
508
  >
506
509
  {header && (
507
510
  <MenuSection className={cn("mb-1 border-b border-subtle px-3 py-2", laidOut && SPAN_ALL)}>
508
511
  <div className="truncate text-sm font-medium text-primary">{header.title}</div>
509
- {header.subtitle != null && (
510
- <div className="truncate text-xs text-muted">{header.subtitle}</div>
511
- )}
512
+ {header.subtitle != null && <div className="truncate text-xs text-muted">{header.subtitle}</div>}
512
513
  {headerExtra != null && headerExtra !== false && <div className="mt-1">{headerExtra}</div>}
513
514
  </MenuSection>
514
515
  )}