@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
@@ -30,8 +30,7 @@ const AVATAR_SIZES = {
30
30
  lg: "size-12 text-base",
31
31
  } as const;
32
32
 
33
- const CHIP =
34
- "inline-flex shrink-0 items-center justify-center rounded-full bg-inverse font-semibold text-inverse";
33
+ const CHIP = "inline-flex shrink-0 items-center justify-center rounded-full bg-inverse font-semibold text-inverse";
35
34
 
36
35
  /** The dot grows with the avatar: 8px on `sm`, 10px on `md` (keksdose's), 12px on `lg`. */
37
36
  const BADGE_SIZES: Record<keyof typeof AVATAR_SIZES, StatusDotSize> = { sm: "sm", md: "md", lg: "lg" };
@@ -90,22 +89,10 @@ export function UserAvatar({ name, email, person, size = "md", badge, className,
90
89
  // also contains the sr-only text.
91
90
  return (
92
91
  <span {...rest} className="relative inline-flex shrink-0">
93
- <span
94
- aria-hidden
95
- className={cn(
96
- CHIP,
97
- AVATAR_SIZES[size],
98
- className,
99
- )}
100
- >
92
+ <span aria-hidden className={cn(CHIP, AVATAR_SIZES[size], className)}>
101
93
  {initials}
102
94
  </span>
103
- <StatusDot
104
- ring
105
- tone={badge.tone ?? "danger"}
106
- size={BADGE_SIZES[size]}
107
- className="absolute -end-0.5 -top-0.5"
108
- />
95
+ <StatusDot ring tone={badge.tone ?? "danger"} size={BADGE_SIZES[size]} className="absolute -end-0.5 -top-0.5" />
109
96
  <span className="sr-only">{badge.label}</span>
110
97
  </span>
111
98
  );
@@ -121,11 +108,7 @@ export function UserAvatar({ name, email, person, size = "md", badge, className,
121
108
  // `aria-label` arrives through `...rest` and wins.
122
109
  aria-hidden
123
110
  {...rest}
124
- className={cn(
125
- CHIP,
126
- AVATAR_SIZES[size],
127
- className,
128
- )}
111
+ className={cn(CHIP, AVATAR_SIZES[size], className)}
129
112
  >
130
113
  {initials}
131
114
  </span>
@@ -116,10 +116,14 @@ export function DemoStart<T>({
116
116
  const accessLink = useAccessAction(access, landingLabels);
117
117
  const [refusal, setRefusal] = useState<Refusal | null>(null);
118
118
  useNoIndex(noIndex);
119
- useOncePerKey<T>(ONCE, () => start(), (_key, result) => {
120
- if (result.ok) onStarted(result.value);
121
- else setRefusal(refusalOf(result.error));
122
- });
119
+ useOncePerKey<T>(
120
+ ONCE,
121
+ () => start(),
122
+ (_key, result) => {
123
+ if (result.ok) onStarted(result.value);
124
+ else setRefusal(refusalOf(result.error));
125
+ },
126
+ );
123
127
 
124
128
  return (
125
129
  <div {...rest} className={cn("flex flex-col items-center gap-4 py-4 text-center", className)}>
@@ -22,7 +22,8 @@ import type { FeedbackAttachmentFieldLabels } from "./feedback-attachment";
22
22
  export const DEFAULT_FEEDBACK_ATTACHMENT_LABELS: FeedbackAttachmentFieldLabels = {
23
23
  attachmentAdd: "Add attachment",
24
24
  attachmentCapture: "Capture screenshot",
25
- attachmentPaste: "…or paste a screenshot straight from the clipboard, so you can show one corner rather than the whole page.",
25
+ attachmentPaste:
26
+ "…or paste a screenshot straight from the clipboard, so you can show one corner rather than the whole page.",
26
27
  attachmentRemove: "Remove attachment",
27
28
  attachmentList: "Attachments",
28
29
  attachmentScreenshot: "Screenshot",
@@ -328,9 +328,7 @@ export interface FeedbackAttachmentFieldRefsProps extends FeedbackAttachmentFiel
328
328
  }
329
329
 
330
330
  export type FeedbackAttachmentFieldProps =
331
- | FeedbackAttachmentFieldSingleProps
332
- | FeedbackAttachmentFieldMultipleProps
333
- | FeedbackAttachmentFieldRefsProps;
331
+ FeedbackAttachmentFieldSingleProps | FeedbackAttachmentFieldMultipleProps | FeedbackAttachmentFieldRefsProps;
334
332
 
335
333
  /**
336
334
  * Picking one picture: the file dialog, a capture of the app view, or a paste.
@@ -444,11 +442,7 @@ function SingleField({
444
442
  {value ? (
445
443
  <div className="flex items-start gap-2">
446
444
  {value.type.startsWith("image/") && preview ? (
447
- <img
448
- src={preview}
449
- alt={value.name}
450
- className="h-20 w-20 rounded border border-subtle object-cover"
451
- />
445
+ <img src={preview} alt={value.name} className="h-20 w-20 rounded border border-subtle object-cover" />
452
446
  ) : (
453
447
  // Non-image attachments (PDF, text) can't preview as an <img>, so
454
448
  // show a neutral file tile with the name/size beside it instead.
@@ -458,9 +452,7 @@ function SingleField({
458
452
  )}
459
453
  <div className="min-w-0 flex-1">
460
454
  <div className="truncate-until-large text-sm text-secondary">{value.name}</div>
461
- <div className="text-xs text-muted">
462
- {fileText.size(value.size)}
463
- </div>
455
+ <div className="text-xs text-muted">{fileText.size(value.size)}</div>
464
456
  </div>
465
457
  <RemoveButton label={text.attachmentRemove} onClick={() => onChange(null)} disabled={disabled} />
466
458
  </div>
@@ -489,9 +481,7 @@ function SingleField({
489
481
  </div>
490
482
  {/* Said out loud, because a gesture with no affordance is a gesture
491
483
  nobody finds. */}
492
- <p className="text-xs text-muted">
493
- {text.attachmentPaste}
494
- </p>
484
+ <p className="text-xs text-muted">{text.attachmentPaste}</p>
495
485
  </div>
496
486
  )}
497
487
  <input
@@ -614,8 +604,7 @@ function MultipleField({
614
604
  const root = rootRef.current;
615
605
  if (!root) return;
616
606
  const removes = root.querySelectorAll<HTMLElement>("[data-attachment-remove]");
617
- const target =
618
- removes[index] ?? root.querySelector<HTMLElement>("[data-attachment-action]") ?? removes[index - 1];
607
+ const target = removes[index] ?? root.querySelector<HTMLElement>("[data-attachment-action]") ?? removes[index - 1];
619
608
  target?.focus();
620
609
  }, [value, screenshot]);
621
610
 
@@ -650,7 +639,9 @@ function MultipleField({
650
639
  <div className="truncate-until-large text-xs text-muted">
651
640
  {/* The screenshot's file name moves down here: still there for the
652
641
  reporter who wants to know what will be sent, not its title. */}
653
- {chip.screenshot ? `${chip.file.name} · ${fileText.size(chip.file.size)}` : fileText.size(chip.file.size)}
642
+ {chip.screenshot
643
+ ? `${chip.file.name} · ${fileText.size(chip.file.size)}`
644
+ : fileText.size(chip.file.size)}
654
645
  </div>
655
646
  </div>
656
647
  <RemoveButton
@@ -692,9 +683,7 @@ function MultipleField({
692
683
  )}
693
684
  </div>
694
685
  )}
695
- <p className="text-xs text-muted">
696
- {room > 0 ? text.attachmentPaste : limitLabel(max)}
697
- </p>
686
+ <p className="text-xs text-muted">{room > 0 ? text.attachmentPaste : limitLabel(max)}</p>
698
687
  <input
699
688
  ref={fileInputRef}
700
689
  type="file"
@@ -857,8 +846,7 @@ function RefsField({
857
846
  const root = rootRef.current;
858
847
  if (!root) return;
859
848
  const removes = root.querySelectorAll<HTMLElement>("[data-attachment-remove]");
860
- const target =
861
- removes[index] ?? root.querySelector<HTMLElement>("[data-attachment-action]") ?? removes[index - 1];
849
+ const target = removes[index] ?? root.querySelector<HTMLElement>("[data-attachment-action]") ?? removes[index - 1];
862
850
  target?.focus();
863
851
  }, [value]);
864
852
 
@@ -973,18 +961,18 @@ function RefsField({
973
961
  function RefGlyph({ type }: { type?: string }) {
974
962
  return (
975
963
  <span className="flex size-12 shrink-0 items-center justify-center rounded border border-subtle bg-surface-2 text-placeholder">
976
- {type?.startsWith("image/") ? <ImageIcon aria-hidden className="size-6" /> : <FileText aria-hidden className="size-6" />}
964
+ {type?.startsWith("image/") ? (
965
+ <ImageIcon aria-hidden className="size-6" />
966
+ ) : (
967
+ <FileText aria-hidden className="size-6" />
968
+ )}
977
969
  </span>
978
970
  );
979
971
  }
980
972
 
981
973
  function Heading({ text, className }: { text?: string; className?: string }) {
982
974
  if (!text) return null;
983
- return (
984
- <div className={cn("mb-1 text-xs font-medium uppercase tracking-wide text-muted", className)}>
985
- {text}
986
- </div>
987
- );
975
+ return <div className={cn("mb-1 text-xs font-medium uppercase tracking-wide text-muted", className)}>{text}</div>;
988
976
  }
989
977
 
990
978
  function CaptureButton({
@@ -1064,7 +1052,6 @@ function RemoveButton({
1064
1052
  );
1065
1053
  }
1066
1054
 
1067
-
1068
1055
  /**
1069
1056
  * The {@link FeedbackAttachmentErrorInfo} builder of one field: its limits, and the
1070
1057
  * sentence for each refusal. The sentences are the `filePicker` namespace's — the ones
@@ -260,7 +260,9 @@ export interface CaptureAppScreenshotOptions {
260
260
  * Call it from the "Capture screenshot" button's own click and nowhere else (keksdose
261
261
  * checked: running it at dialog OPEN was suspected and was never the cause of the wait).
262
262
  */
263
- export async function captureAppScreenshot({ rootId = "root" }: CaptureAppScreenshotOptions = {}): Promise<File | null> {
263
+ export async function captureAppScreenshot({
264
+ rootId = "root",
265
+ }: CaptureAppScreenshotOptions = {}): Promise<File | null> {
264
266
  let domToBlob: (typeof import("modern-screenshot"))["domToBlob"];
265
267
  try {
266
268
  ({ domToBlob } = await import("modern-screenshot"));
@@ -128,10 +128,7 @@ type Entry = { at: number; order: number; message: FeedbackThreadMessage };
128
128
 
129
129
  /** The admin's Hide / Unhide as a promise — a sync throw or a `void` return included —
130
130
  * so the click can catch it as Delete's does. */
131
- const hideComment = async (
132
- onHide: NonNullable<FeedbackCommentThreadProps["onHide"]>,
133
- comment: FeedbackComment,
134
- ) => {
131
+ const hideComment = async (onHide: NonNullable<FeedbackCommentThreadProps["onHide"]>, comment: FeedbackComment) => {
135
132
  await onHide(comment, !comment.hidden);
136
133
  };
137
134
 
@@ -186,7 +183,10 @@ export function FeedbackCommentThread({
186
183
  ? [{ name: attachmentName(reply.attachment_url), url: reply.attachment_url }]
187
184
  : undefined,
188
185
  badge: (
189
- <span className="inline-flex min-w-0 max-w-full flex-wrap items-center gap-1" data-feedback-entry-kind="rework">
186
+ <span
187
+ className="inline-flex min-w-0 max-w-full flex-wrap items-center gap-1"
188
+ data-feedback-entry-kind="rework"
189
+ >
190
190
  <FeedbackReworkEntryChip />
191
191
  {reply.status_to && (
192
192
  <span className="inline-flex items-center gap-1" data-feedback-reply-status={reply.status_to}>
@@ -215,7 +215,10 @@ export function FeedbackCommentThread({
215
215
  : undefined,
216
216
  staff: true,
217
217
  badge: reply.status_to ? (
218
- <span className="inline-flex min-w-0 max-w-full flex-wrap items-center gap-1" data-feedback-reply-status={reply.status_to}>
218
+ <span
219
+ className="inline-flex min-w-0 max-w-full flex-wrap items-center gap-1"
220
+ data-feedback-reply-status={reply.status_to}
221
+ >
219
222
  <span className="sr-only">{replyLabels.statusChanged}</span>
220
223
  <span aria-hidden>→</span>
221
224
  <FeedbackStatusBadge status={reply.status_to} />
@@ -179,10 +179,7 @@ export function FeedbackContextBox({
179
179
  const lead = line.endsWith(submitter) ? line.slice(0, line.length - submitter.length) : null;
180
180
  return (
181
181
  <div
182
- className={cn(
183
- "space-y-1 rounded-md border border-subtle bg-surface-2 px-3 py-2 text-xs text-muted",
184
- className,
185
- )}
182
+ className={cn("space-y-1 rounded-md border border-subtle bg-surface-2 px-3 py-2 text-xs text-muted", className)}
186
183
  >
187
184
  <div className="[overflow-wrap:anywhere]">
188
185
  {lead === null ? (
@@ -251,16 +251,15 @@ export function FeedbackDialog(props: FeedbackDialogProps) {
251
251
  const [files, setFiles] = useState<File[]>([]);
252
252
  const isMobile = usePhoneLayout();
253
253
  const noticeId = useId();
254
- const hasNotice = publicNotice !== undefined && publicNotice !== null && publicNotice !== false && publicNotice !== "";
254
+ const hasNotice =
255
+ publicNotice !== undefined && publicNotice !== null && publicNotice !== false && publicNotice !== "";
255
256
  const labels = useKitLabels("feedbackDialog", DEFAULT_FEEDBACK_DIALOG_LABELS, labelsProp);
256
257
  const attachmentText = useKitLabels("feedbackAttachment", DEFAULT_FEEDBACK_ATTACHMENT_LABELS, labelsProp);
257
258
  // Under `multiple` the heading is `attachmentList` — a screenshot AND photos — which
258
259
  // also names the chip list beneath it: one string, so the two cannot disagree. Its old
259
260
  // second name, `feedbackDialog.attachments`, went in 0.34.
260
261
  const listHeading =
261
- labelsProp?.attachmentList ??
262
- attachmentText.attachmentList ??
263
- DEFAULT_FEEDBACK_ATTACHMENT_LABELS.attachmentList!;
262
+ labelsProp?.attachmentList ?? attachmentText.attachmentList ?? DEFAULT_FEEDBACK_ATTACHMENT_LABELS.attachmentList!;
264
263
  // The attachment field resolves its own keys from `feedbackAttachment`; it gets the
265
264
  // prop's (so a caller's `attachmentAdd` still wins) plus the resolved heading.
266
265
  const attachmentLabels =
@@ -239,9 +239,7 @@ export function FeedbackStatusTransitions({
239
239
  variant === "icon"
240
240
  ? cn(
241
241
  "flex size-7 items-center justify-center rounded",
242
- active
243
- ? cn(meta.activeBg, meta.activeText)
244
- : "text-placeholder hover:text-secondary",
242
+ active ? cn(meta.activeBg, meta.activeText) : "text-placeholder hover:text-secondary",
245
243
  )
246
244
  : cn(
247
245
  "inline-flex items-center gap-1.5 rounded-md border px-2 py-1 text-xs font-medium",
@@ -529,9 +527,7 @@ export function FeedbackDetailSection({
529
527
  return (
530
528
  <div>
531
529
  <div className="mb-1 flex items-center justify-between gap-2">
532
- <div className="text-xs font-medium uppercase tracking-wide text-muted">
533
- {title}
534
- </div>
530
+ <div className="text-xs font-medium uppercase tracking-wide text-muted">{title}</div>
535
531
  {action}
536
532
  </div>
537
533
  {children}
@@ -552,7 +548,5 @@ export function FeedbackDetail({ children, className }: { children: ReactNode; c
552
548
  * carry the entire "this arrived after the answer" reading. */
553
549
  export function FeedbackProse({ children, empty }: { children?: string; empty?: ReactNode }) {
554
550
  if (!children) return <p className="text-placeholder">{empty ?? "—"}</p>;
555
- return (
556
- <p className="whitespace-pre-wrap text-secondary">{children}</p>
557
- );
551
+ return <p className="whitespace-pre-wrap text-secondary">{children}</p>;
558
552
  }
@@ -12,7 +12,13 @@ import { useKitLabels, type LabelOverride } from "../i18n/kit-labels";
12
12
  import { cn } from "../lib/cn";
13
13
  import { FILL_HEIGHT_CLASS } from "../shell/fill-height";
14
14
  import { EMPTY_FORMATTED_VALUE } from "../lib/format";
15
- import { FeedbackCategoryBadge, FeedbackDetail, FeedbackDetailSection, FeedbackProse, FeedbackStatusBadge } from "./feedback-inbox";
15
+ import {
16
+ FeedbackCategoryBadge,
17
+ FeedbackDetail,
18
+ FeedbackDetailSection,
19
+ FeedbackProse,
20
+ FeedbackStatusBadge,
21
+ } from "./feedback-inbox";
16
22
  import { useFeedbackCategoryLabels } from "./feedback-labels";
17
23
  import { FeedbackCommentThread, type FeedbackCommentsLabels } from "./feedback-comment-thread";
18
24
  import type { FeedbackEntryUploadOptions } from "./feedback-entry-file";
@@ -161,11 +161,7 @@ export const DEFAULT_MAX_ATTACHMENTS = 5;
161
161
  * A plain array (not frozen) because `accept` takes `string[]`, as
162
162
  * `DEFAULT_ATTACHMENT_ACCEPT` does — copy it before changing it.
163
163
  */
164
- export const FEEDBACK_ATTACHMENT_ACCEPT: string[] = [
165
- ...DEFAULT_ATTACHMENT_ACCEPT,
166
- "application/pdf",
167
- "text/plain",
168
- ];
164
+ export const FEEDBACK_ATTACHMENT_ACCEPT: string[] = [...DEFAULT_ATTACHMENT_ACCEPT, "application/pdf", "text/plain"];
169
165
 
170
166
  /**
171
167
  * The categories a person can pick — every one but `CRASH`, in triage order (Bug, Idea,
@@ -305,12 +301,7 @@ export function feedbackAttachmentLine(url: string): string {
305
301
  * something foreign — and written anyway it would sit in the body as prose that no
306
302
  * reader recognises as a file.
307
303
  */
308
- export function appendRework(
309
- body: string,
310
- note: string,
311
- url?: string | null,
312
- now: Date = new Date(),
313
- ): string | null {
304
+ export function appendRework(body: string, note: string, url?: string | null, now: Date = new Date()): string | null {
314
305
  const text = note.trim();
315
306
  if (!text) return null;
316
307
  if (url && !ATTACHMENT_URL.test(url)) {
@@ -339,9 +330,10 @@ export function reworkCount(body: string): number {
339
330
  * before server-kit 0.13, whose reworks are still `--- REWORK … ---` blocks). What the
340
331
  * Rework chip counts.
341
332
  */
342
- export function feedbackReworkCount(
343
- row: { body?: string | null; replies?: readonly Pick<FeedbackReply, "kind">[] | null },
344
- ): number {
333
+ export function feedbackReworkCount(row: {
334
+ body?: string | null;
335
+ replies?: readonly Pick<FeedbackReply, "kind">[] | null;
336
+ }): number {
345
337
  if (row.replies) {
346
338
  const entries = row.replies.filter((reply) => reply.kind === "rework").length;
347
339
  // A row migrated by an app that answers `replies` but not yet `kind` keeps its body's
@@ -102,7 +102,10 @@ export interface FeedbackReplyTimelineProps {
102
102
  function EntryStatus({ reply, statusChanged }: { reply: FeedbackReply; statusChanged: string }) {
103
103
  if (!reply.status_to) return null;
104
104
  return (
105
- <span className="inline-flex min-w-0 max-w-full flex-wrap items-center gap-1" data-feedback-reply-status={reply.status_to}>
105
+ <span
106
+ className="inline-flex min-w-0 max-w-full flex-wrap items-center gap-1"
107
+ data-feedback-reply-status={reply.status_to}
108
+ >
106
109
  <span className="sr-only">{statusChanged}</span>
107
110
  {reply.status_from && reply.status_from !== reply.status_to && (
108
111
  <>
@@ -167,7 +170,11 @@ export function FeedbackReplyTimeline({
167
170
  </time>
168
171
  <EntryStatus reply={reply} statusChanged={labels.statusChanged} />
169
172
  </div>
170
- <p data-private={priv} dir="auto" className="mt-0.5 whitespace-pre-wrap break-words text-start text-primary">
173
+ <p
174
+ data-private={priv}
175
+ dir="auto"
176
+ className="mt-0.5 whitespace-pre-wrap break-words text-start text-primary"
177
+ >
171
178
  {reply.body}
172
179
  </p>
173
180
  {reply.attachment_url && (
@@ -312,9 +319,7 @@ export function FeedbackReplyComposer({
312
319
  aria-label={labels.status}
313
320
  value={picked}
314
321
  disabled={pending || uploading}
315
- onChange={(event) =>
316
- setPick({ under: suggestedStatus, value: event.target.value as FeedbackStatus | "" })
317
- }
322
+ onChange={(event) => setPick({ under: suggestedStatus, value: event.target.value as FeedbackStatus | "" })}
318
323
  data-feedback-reply-status-pick=""
319
324
  >
320
325
  <option value="">{labels.noChange}</option>
@@ -234,8 +234,7 @@ export function feedbackPageUrl(context: FeedbackContext | null | undefined): st
234
234
  * keyed by URL, a React key clash keksdose had).
235
235
  */
236
236
  export function feedbackAttachmentUrls(
237
- row: Pick<FeedbackRecord, "screenshot_url" | "attachment_urls" | "body"> &
238
- Partial<Pick<FeedbackRecord, "replies">>,
237
+ row: Pick<FeedbackRecord, "screenshot_url" | "attachment_urls" | "body"> & Partial<Pick<FeedbackRecord, "replies">>,
239
238
  ): string[] {
240
239
  const urls = [
241
240
  ...(row.screenshot_url ? [row.screenshot_url] : []),
@@ -695,9 +694,7 @@ export function FeedbackRowDetail({
695
694
  <FeedbackDetailSection title={labels.subject}>
696
695
  <p className="flex flex-wrap items-center gap-x-2 gap-y-1 text-sm" data-feedback-subject="">
697
696
  <FeedbackCategoryBadge category={row.category} />
698
- <span className="min-w-0 font-medium text-primary [overflow-wrap:anywhere]">
699
- {row.title}
700
- </span>
697
+ <span className="min-w-0 font-medium text-primary [overflow-wrap:anywhere]">{row.title}</span>
701
698
  </p>
702
699
  </FeedbackDetailSection>
703
700
  )}
@@ -37,10 +37,7 @@ export interface FeedbackStatusPatch {
37
37
  * Failure is the mutation's own business: its `onError` toasts the server's `detail`,
38
38
  * else `feedbackToast.updateFailed` (§4.4) — this hook adds no second error toast.
39
39
  */
40
- export type FeedbackStatusMutate = (
41
- patch: FeedbackStatusPatch,
42
- callbacks: { onSuccess: () => void },
43
- ) => void;
40
+ export type FeedbackStatusMutate = (patch: FeedbackStatusPatch, callbacks: { onSuccess: () => void }) => void;
44
41
 
45
42
  /** What the change needs to know about the row: which one, what it is called in the
46
43
  * toast, and where it stood (the status Undo goes back to). */
@@ -107,12 +107,12 @@ export function FeedbackSubmitDialog({
107
107
  )
108
108
  }
109
109
  onCaptureScreenshot={onCaptureScreenshot}
110
- publicNotice={
111
- publicNotice ? (dialogText.publicNotice ?? DEFAULT_FEEDBACK_DIALOG_LABELS.publicNotice) : undefined
112
- }
110
+ publicNotice={publicNotice ? (dialogText.publicNotice ?? DEFAULT_FEEDBACK_DIALOG_LABELS.publicNotice) : undefined}
113
111
  // The context is read off the very values the box below shows (§3.2).
114
112
  onSubmit={(data) => onSubmit(data, feedbackContext({ user, attachUrl, url, environment, version }))}
115
- contextSlot={<FeedbackContextBox user={user} url={url} attachUrl={attachUrl} onAttachUrlChange={onAttachUrlChange} />}
113
+ contextSlot={
114
+ <FeedbackContextBox user={user} url={url} attachUrl={attachUrl} onAttachUrlChange={onAttachUrlChange} />
115
+ }
116
116
  />
117
117
  );
118
118
  }
@@ -29,7 +29,12 @@ import {
29
29
  type FeedbackCategoryLabels,
30
30
  type FeedbackStatusLabels,
31
31
  } from "./feedback-labels";
32
- import { FEEDBACK_AWAITING_STATUSES, feedbackReworkCount, type FeedbackContext, type FeedbackRecord } from "./feedback-record";
32
+ import {
33
+ FEEDBACK_AWAITING_STATUSES,
34
+ feedbackReworkCount,
35
+ type FeedbackContext,
36
+ type FeedbackRecord,
37
+ } from "./feedback-record";
33
38
  import type { FeedbackStatusChange } from "./feedback-status-undo";
34
39
  import { feedbackPageHref, feedbackPagePath } from "./feedback-row-detail";
35
40
  import type { CommitScope } from "../components/write-lock";
@@ -356,8 +361,7 @@ function FeedbackPageLinkCell({ context, openPage }: { context: FeedbackContext
356
361
  <>
357
362
  {/* The space outside the hidden span: a flex container drops it from the layout,
358
363
  and the accessible name keeps it ("Open page /accounts"). */}
359
- <span className="sr-only">{openPage}</span>{" "}
360
- <code className="min-w-0 truncate text-xs">{path}</code>
364
+ <span className="sr-only">{openPage}</span> <code className="min-w-0 truncate text-xs">{path}</code>
361
365
  <ExternalLink className="size-3 shrink-0" aria-hidden />
362
366
  </>
363
367
  );
@@ -568,9 +572,7 @@ export function feedbackColumns<T extends FeedbackTableRow>({
568
572
  // Name AND email, so either finds the person; the erased ones by the placeholder
569
573
  // (their context holds no name any more).
570
574
  filterBy: (row) =>
571
- row.user_id == null
572
- ? labels.deletedUser
573
- : `${feedbackSubmitter(row, labels)} ${feedbackSubmitterEmail(row)}`,
575
+ row.user_id == null ? labels.deletedUser : `${feedbackSubmitter(row, labels)} ${feedbackSubmitterEmail(row)}`,
574
576
  // Sixth to go (0.51.4, Kurvenschmiede): with only 1–5, Subject reached its floor while
575
577
  // #, Date and User were still drawn, and the inbox scrolled sideways from 768 to
576
578
  // ~1115px beside an open sidebar. The open report names the submitter.
@@ -654,8 +656,10 @@ export function feedbackColumns<T extends FeedbackTableRow>({
654
656
 
655
657
  /** What {@link useFeedbackColumns} takes: {@link FeedbackColumnsOptions} with the words
656
658
  * read from the provider, and `renderDate` optional. */
657
- export interface UseFeedbackColumnsOptions
658
- extends Omit<FeedbackColumnsOptions, "renderDate" | "labels" | "statusLabels" | "categoryLabels" | "votesHeader"> {
659
+ export interface UseFeedbackColumnsOptions extends Omit<
660
+ FeedbackColumnsOptions,
661
+ "renderDate" | "labels" | "statusLabels" | "categoryLabels" | "votesHeader"
662
+ > {
659
663
  /** Default: the kit's date with the weekday ({@link useFeedbackRenderDate}). */
660
664
  renderDate?: FeedbackRenderDate;
661
665
  /** Over the `feedbackPage` namespace. Keep it stable (module scope or memoised): it is
@@ -18,10 +18,7 @@ import { FeedbackAttachmentField } from "./feedback-attachment";
18
18
  import type { FeedbackAttachmentFieldSingleProps } from "./feedback-attachment";
19
19
  import type { FeedbackNoteAttachment } from "./feedback-inbox";
20
20
  import type { FeedbackAttachmentLabels } from "./feedback-dialog";
21
- import {
22
- DEFAULT_FEEDBACK_COMPOSER_LABELS,
23
- DEFAULT_FEEDBACK_THREAD_LABELS,
24
- } from "./feedback-thread-labels";
21
+ import { DEFAULT_FEEDBACK_COMPOSER_LABELS, DEFAULT_FEEDBACK_THREAD_LABELS } from "./feedback-thread-labels";
25
22
 
26
23
  /**
27
24
  * The conversation under a report: who said what, when, with what attached — and the
@@ -217,12 +214,7 @@ export function FeedbackThread({
217
214
  }
218
215
  if (messages.length === 0) {
219
216
  return (
220
- <EmptyState
221
- variant="inline"
222
- size="sm"
223
- title={empty ?? labels.empty}
224
- className={cn("justify-start", className)}
225
- />
217
+ <EmptyState variant="inline" size="sm" title={empty ?? labels.empty} className={cn("justify-start", className)} />
226
218
  );
227
219
  }
228
220
 
@@ -288,9 +280,7 @@ export function FeedbackThread({
288
280
  <article
289
281
  className={cn(
290
282
  "max-w-[85%] min-w-0 rounded-lg px-3 py-2 text-sm",
291
- message.own
292
- ? "rounded-ee-sm bg-brand-soft"
293
- : "rounded-es-sm bg-surface-2",
283
+ message.own ? "rounded-ee-sm bg-brand-soft" : "rounded-es-sm bg-surface-2",
294
284
  )}
295
285
  >
296
286
  <header className="mb-0.5 flex flex-wrap items-center gap-x-2 gap-y-0.5 text-caption text-muted">
@@ -361,9 +351,7 @@ function DefaultAttachment({
361
351
  {/* A file name wraps from Large up, as the attachments of the composer do (text
362
352
  size §10.17; round 0.34 T1: the sweep read "export-20…"). */}
363
353
  <span className="min-w-0 truncate-until-large">{name}</span>
364
- {attachment.size !== undefined && (
365
- <span className="shrink-0 text-muted">{size(attachment.size)}</span>
366
- )}
354
+ {attachment.size !== undefined && <span className="shrink-0 text-muted">{size(attachment.size)}</span>}
367
355
  </>
368
356
  );
369
357
  const chip =