@eifi1/ui-kit 0.54.0 → 0.56.0

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 (847) hide show
  1. package/README.md +90 -76
  2. package/dist/admin/plan-change.js +2 -2
  3. package/dist/admin/plan-change.js.map +1 -1
  4. package/dist/admin/user-roster.d.ts +6 -0
  5. package/dist/admin/user-roster.js +4 -0
  6. package/dist/admin/user-roster.js.map +1 -1
  7. package/dist/billing/billing-labels.d.ts +26 -0
  8. package/dist/billing/billing-labels.js +9 -0
  9. package/dist/billing/billing-labels.js.map +1 -1
  10. package/dist/billing/subscription-standing.d.ts +61 -0
  11. package/dist/billing/subscription-standing.js +51 -0
  12. package/dist/billing/subscription-standing.js.map +1 -0
  13. package/dist/billing/usage-meter.d.ts +52 -0
  14. package/dist/billing/usage-meter.js +52 -0
  15. package/dist/billing/usage-meter.js.map +1 -0
  16. package/dist/chart.d.ts +1 -0
  17. package/dist/chart.js +4 -0
  18. package/dist/chart.js.map +1 -1
  19. package/dist/components/alert-banner.js +2 -3
  20. package/dist/components/alert-banner.js.map +1 -1
  21. package/dist/components/amount-input.js +3 -15
  22. package/dist/components/amount-input.js.map +1 -1
  23. package/dist/components/autocomplete.js +2 -2
  24. package/dist/components/autocomplete.js.map +1 -1
  25. package/dist/components/bulk-action-bar.js +2 -1
  26. package/dist/components/bulk-action-bar.js.map +1 -1
  27. package/dist/components/button.d.ts +35 -1
  28. package/dist/components/button.js +6 -9
  29. package/dist/components/button.js.map +1 -1
  30. package/dist/components/calendar-heatmap.js +2 -2
  31. package/dist/components/calendar-heatmap.js.map +1 -1
  32. package/dist/components/camera-button.d.ts +89 -0
  33. package/dist/components/camera-button.js +122 -0
  34. package/dist/components/camera-button.js.map +1 -0
  35. package/dist/components/camera-capture.d.ts +66 -0
  36. package/dist/components/camera-capture.js +190 -0
  37. package/dist/components/camera-capture.js.map +1 -0
  38. package/dist/components/camera-labels.d.ts +20 -0
  39. package/dist/components/camera-labels.js +15 -0
  40. package/dist/components/camera-labels.js.map +1 -0
  41. package/dist/components/chart-edge.d.ts +9 -0
  42. package/dist/components/chart-edge.js +14 -3
  43. package/dist/components/chart-edge.js.map +1 -1
  44. package/dist/components/chart-zoom-core.js +34 -29
  45. package/dist/components/chart-zoom-core.js.map +1 -1
  46. package/dist/components/checkbox-group.js +1 -1
  47. package/dist/components/checkbox-group.js.map +1 -1
  48. package/dist/components/combobox-core.js +3 -2
  49. package/dist/components/combobox-core.js.map +1 -1
  50. package/dist/components/combobox.js +2 -2
  51. package/dist/components/combobox.js.map +1 -1
  52. package/dist/components/consent-again-notice-labels.d.ts +25 -0
  53. package/dist/components/consent-again-notice-labels.js +15 -0
  54. package/dist/components/consent-again-notice-labels.js.map +1 -0
  55. package/dist/components/consent-again-notice.d.ts +85 -0
  56. package/dist/components/consent-again-notice.js +94 -0
  57. package/dist/components/consent-again-notice.js.map +1 -0
  58. package/dist/components/country-select.js +2 -7
  59. package/dist/components/country-select.js.map +1 -1
  60. package/dist/components/currency-select.js +2 -2
  61. package/dist/components/currency-select.js.map +1 -1
  62. package/dist/components/danger-confirm.js +2 -2
  63. package/dist/components/danger-confirm.js.map +1 -1
  64. package/dist/components/data-table-column-settings.js +2 -2
  65. package/dist/components/data-table-column-settings.js.map +1 -1
  66. package/dist/components/data-table-fit.js.map +1 -1
  67. package/dist/components/data-table-virtual.js +13 -3
  68. package/dist/components/data-table-virtual.js.map +1 -1
  69. package/dist/components/date-field.js +2 -2
  70. package/dist/components/date-field.js.map +1 -1
  71. package/dist/components/date-picker.js +2 -2
  72. package/dist/components/date-picker.js.map +1 -1
  73. package/dist/components/date-range-picker.js +2 -6
  74. package/dist/components/date-range-picker.js.map +1 -1
  75. package/dist/components/dialog-frame.d.ts +3 -1
  76. package/dist/components/dialog-frame.js.map +1 -1
  77. package/dist/components/dropdown.js +7 -3
  78. package/dist/components/dropdown.js.map +1 -1
  79. package/dist/components/entity-combobox.js +2 -2
  80. package/dist/components/entity-combobox.js.map +1 -1
  81. package/dist/components/field-parts.d.ts +108 -6
  82. package/dist/components/field-parts.js +59 -6
  83. package/dist/components/field-parts.js.map +1 -1
  84. package/dist/components/field-suggestion-labels.d.ts +2 -0
  85. package/dist/components/field-suggestion-labels.js +10 -0
  86. package/dist/components/field-suggestion-labels.js.map +1 -0
  87. package/dist/components/field.js +1 -1
  88. package/dist/components/field.js.map +1 -1
  89. package/dist/components/file-button.d.ts +1 -1
  90. package/dist/components/file-button.js.map +1 -1
  91. package/dist/components/floating-panel.d.ts +7 -6
  92. package/dist/components/floating-panel.js +3 -17
  93. package/dist/components/floating-panel.js.map +1 -1
  94. package/dist/components/form-actions.d.ts +3 -2
  95. package/dist/components/form-actions.js.map +1 -1
  96. package/dist/components/hover-menu.js +3 -2
  97. package/dist/components/hover-menu.js.map +1 -1
  98. package/dist/components/icon-button.d.ts +23 -5
  99. package/dist/components/icon-button.js +7 -8
  100. package/dist/components/icon-button.js.map +1 -1
  101. package/dist/components/inline-confirm.js +2 -1
  102. package/dist/components/inline-confirm.js.map +1 -1
  103. package/dist/components/inline-entity-combobox.js +2 -2
  104. package/dist/components/inline-entity-combobox.js.map +1 -1
  105. package/dist/components/input.js +2 -2
  106. package/dist/components/input.js.map +1 -1
  107. package/dist/components/jump-calendar.js +3 -3
  108. package/dist/components/jump-calendar.js.map +1 -1
  109. package/dist/components/legal.d.ts +13 -1
  110. package/dist/components/legal.js +12 -0
  111. package/dist/components/legal.js.map +1 -1
  112. package/dist/components/legended-series-chart.d.ts +83 -0
  113. package/dist/components/legended-series-chart.js +77 -0
  114. package/dist/components/legended-series-chart.js.map +1 -0
  115. package/dist/components/lightbox.js +2 -1
  116. package/dist/components/lightbox.js.map +1 -1
  117. package/dist/components/mini-calendar.js +13 -5
  118. package/dist/components/mini-calendar.js.map +1 -1
  119. package/dist/components/modal.d.ts +23 -2
  120. package/dist/components/modal.js +24 -6
  121. package/dist/components/modal.js.map +1 -1
  122. package/dist/components/month-picker.d.ts +1 -1
  123. package/dist/components/month-picker.js +6 -6
  124. package/dist/components/month-picker.js.map +1 -1
  125. package/dist/components/multi-entity-combobox.js +2 -2
  126. package/dist/components/multi-entity-combobox.js.map +1 -1
  127. package/dist/components/multi-select.js +2 -6
  128. package/dist/components/multi-select.js.map +1 -1
  129. package/dist/components/number-input.js +2 -2
  130. package/dist/components/number-input.js.map +1 -1
  131. package/dist/components/page-header-layout.d.ts +18 -0
  132. package/dist/components/page-header-layout.js +23 -0
  133. package/dist/components/page-header-layout.js.map +1 -0
  134. package/dist/components/page-header-skeleton.d.ts +41 -0
  135. package/dist/components/page-header-skeleton.js +52 -0
  136. package/dist/components/page-header-skeleton.js.map +1 -0
  137. package/dist/components/page-header.js +4 -17
  138. package/dist/components/page-header.js.map +1 -1
  139. package/dist/components/popover.js +7 -2
  140. package/dist/components/popover.js.map +1 -1
  141. package/dist/components/release-notes-labels.d.ts +16 -0
  142. package/dist/components/release-notes-labels.js +18 -0
  143. package/dist/components/release-notes-labels.js.map +1 -0
  144. package/dist/components/release-notes.d.ts +65 -0
  145. package/dist/components/release-notes.js +65 -0
  146. package/dist/components/release-notes.js.map +1 -0
  147. package/dist/components/select.js +2 -2
  148. package/dist/components/select.js.map +1 -1
  149. package/dist/components/series-chart-labels.d.ts +9 -0
  150. package/dist/components/series-chart-labels.js +3 -1
  151. package/dist/components/series-chart-labels.js.map +1 -1
  152. package/dist/components/series-chart.d.ts +5 -0
  153. package/dist/components/series-chart.js +89 -36
  154. package/dist/components/series-chart.js.map +1 -1
  155. package/dist/components/toggle-group.js +3 -2
  156. package/dist/components/toggle-group.js.map +1 -1
  157. package/dist/components/treemap-layout.js.map +1 -1
  158. package/dist/components/treemap.d.ts +17 -15
  159. package/dist/components/treemap.js +167 -85
  160. package/dist/components/treemap.js.map +1 -1
  161. package/dist/eslint/index.js +1 -1
  162. package/dist/eslint/role-utilities.d.ts +2 -2
  163. package/dist/eslint/role-utilities.js.map +1 -1
  164. package/dist/feedback/feedback-inbox-page.d.ts +260 -0
  165. package/dist/feedback/feedback-inbox-page.js +207 -0
  166. package/dist/feedback/feedback-inbox-page.js.map +1 -0
  167. package/dist/feedback/feedback-vocabulary.js +2 -2
  168. package/dist/feedback/feedback-vocabulary.js.map +1 -1
  169. package/dist/feedback.d.ts +1 -0
  170. package/dist/feedback.js +6 -0
  171. package/dist/feedback.js.map +1 -1
  172. package/dist/hooks/use-debounce.d.ts +32 -5
  173. package/dist/hooks/use-debounce.js +6 -5
  174. package/dist/hooks/use-debounce.js.map +1 -1
  175. package/dist/hooks/use-file-picker.d.ts +3 -1
  176. package/dist/hooks/use-file-picker.js.map +1 -1
  177. package/dist/hooks/use-focus-trap.d.ts +19 -3
  178. package/dist/hooks/use-focus-trap.js +15 -5
  179. package/dist/hooks/use-focus-trap.js.map +1 -1
  180. package/dist/hooks/use-has-camera.d.ts +36 -0
  181. package/dist/hooks/use-has-camera.js +53 -0
  182. package/dist/hooks/use-has-camera.js.map +1 -0
  183. package/dist/hooks/use-hotkey.js +1 -10
  184. package/dist/hooks/use-hotkey.js.map +1 -1
  185. package/dist/hooks/use-overlay-history.d.ts +6 -1
  186. package/dist/hooks/use-overlay-history.js +10 -2
  187. package/dist/hooks/use-overlay-history.js.map +1 -1
  188. package/dist/i18n/defaults.js +11 -1
  189. package/dist/i18n/defaults.js.map +1 -1
  190. package/dist/i18n/german.js +75 -3
  191. package/dist/i18n/german.js.map +1 -1
  192. package/dist/i18n/kit-labels.d.ts +20 -0
  193. package/dist/i18n/kit-labels.js.map +1 -1
  194. package/dist/i18n/locales/en.js +92 -4
  195. package/dist/i18n/locales/en.js.map +3 -3
  196. package/dist/i18n/locales/es.js +71 -3
  197. package/dist/i18n/locales/es.js.map +1 -1
  198. package/dist/i18n/locales/fr.js +72 -2
  199. package/dist/i18n/locales/fr.js.map +1 -1
  200. package/dist/i18n/locales/hu.js +74 -3
  201. package/dist/i18n/locales/hu.js.map +1 -1
  202. package/dist/i18n/locales/it.js +74 -3
  203. package/dist/i18n/locales/it.js.map +1 -1
  204. package/dist/i18n/locales/zh.js +71 -3
  205. package/dist/i18n/locales/zh.js.map +1 -1
  206. package/dist/i18n/review.js +22 -1
  207. package/dist/i18n/review.js.map +1 -1
  208. package/dist/index.d.ts +24 -5
  209. package/dist/index.js +35 -1
  210. package/dist/index.js.map +1 -1
  211. package/dist/landing/landing-labels.d.ts +8 -0
  212. package/dist/landing/landing-labels.js +2 -1
  213. package/dist/landing/landing-labels.js.map +1 -1
  214. package/dist/lib/changelog.d.ts +130 -0
  215. package/dist/lib/changelog.js +137 -0
  216. package/dist/lib/changelog.js.map +1 -0
  217. package/dist/lib/clipboard-minus.js +2 -2
  218. package/dist/lib/clipboard-minus.js.map +1 -1
  219. package/dist/lib/dates.d.ts +29 -3
  220. package/dist/lib/dates.js +41 -12
  221. package/dist/lib/dates.js.map +1 -1
  222. package/dist/lib/editable-content.d.ts +33 -0
  223. package/dist/lib/editable-content.js +15 -0
  224. package/dist/lib/editable-content.js.map +1 -0
  225. package/dist/lib/focus-left.d.ts +47 -1
  226. package/dist/lib/focus-left.js +11 -2
  227. package/dist/lib/focus-left.js.map +1 -1
  228. package/dist/lib/server-wake.d.ts +49 -9
  229. package/dist/lib/server-wake.js +25 -14
  230. package/dist/lib/server-wake.js.map +1 -1
  231. package/dist/lib/session-refresh.d.ts +53 -0
  232. package/dist/lib/session-refresh.js +27 -1
  233. package/dist/lib/session-refresh.js.map +1 -1
  234. package/dist/rhf/fields.js +3 -3
  235. package/dist/rhf/fields.js.map +1 -1
  236. package/dist/shell/app-shell.d.ts +25 -1
  237. package/dist/shell/app-shell.js +3 -1
  238. package/dist/shell/app-shell.js.map +1 -1
  239. package/dist/shell/dev-menu.d.ts +3 -0
  240. package/dist/shell/dev-menu.js +4 -2
  241. package/dist/shell/dev-menu.js.map +1 -1
  242. package/dist/shell/held-changes-banner-labels.d.ts +23 -0
  243. package/dist/shell/held-changes-banner-labels.js +14 -0
  244. package/dist/shell/held-changes-banner-labels.js.map +1 -0
  245. package/dist/shell/held-changes-banner.d.ts +75 -0
  246. package/dist/shell/held-changes-banner.js +106 -0
  247. package/dist/shell/held-changes-banner.js.map +1 -0
  248. package/dist/shell/sync-status-indicator.d.ts +27 -12
  249. package/dist/shell/sync-status-indicator.js +13 -4
  250. package/dist/shell/sync-status-indicator.js.map +1 -1
  251. package/dist/shell/top-bar-parts-labels.d.ts +5 -0
  252. package/dist/shell/top-bar-parts-labels.js +3 -1
  253. package/dist/shell/top-bar-parts-labels.js.map +1 -1
  254. package/dist/shell.d.ts +2 -0
  255. package/dist/shell.js +3 -0
  256. package/dist/shell.js.map +1 -1
  257. package/dist/sync/engine.d.ts +11 -2
  258. package/dist/sync/engine.js +13 -5
  259. package/dist/sync/engine.js.map +1 -1
  260. package/dist/sync/hooks.d.ts +3 -2
  261. package/dist/sync/hooks.js +4 -2
  262. package/dist/sync/hooks.js.map +1 -1
  263. package/dist/testing/css-variables.generated.d.ts +2 -2
  264. package/dist/testing/css-variables.generated.js +1 -1
  265. package/dist/testing/css-variables.generated.js.map +1 -1
  266. package/dist/theme/chart-palette.d.ts +18 -0
  267. package/dist/theme/chart-palette.js +17 -1
  268. package/dist/theme/chart-palette.js.map +1 -1
  269. package/dist/theme/contrast-tokens.d.ts +3 -3
  270. package/dist/theme/contrast-tokens.js.map +1 -1
  271. package/dist/theme/contrast.d.ts +4 -4
  272. package/dist/theme/contrast.js.map +1 -1
  273. package/dist/tour/tour-overlay.js +2 -1
  274. package/dist/tour/tour-overlay.js.map +1 -1
  275. package/package.json +9 -12
  276. package/tokens.css +19 -54
  277. package/src/account/account-parts.ts +0 -47
  278. package/src/account/account-settings-labels.ts +0 -240
  279. package/src/account/account-settings.tsx +0 -698
  280. package/src/account/data-export-setting-labels.ts +0 -20
  281. package/src/account/data-export-setting.tsx +0 -200
  282. package/src/account/delete-account-setting-labels.ts +0 -33
  283. package/src/account/delete-account-setting.tsx +0 -342
  284. package/src/account/email-change-setting-labels.ts +0 -31
  285. package/src/account/email-change-setting.tsx +0 -443
  286. package/src/account/passkeys-setting.tsx +0 -445
  287. package/src/account/sessions-setting-labels.ts +0 -24
  288. package/src/account/sessions-setting.tsx +0 -283
  289. package/src/admin/admin-action-confirm-labels.ts +0 -19
  290. package/src/admin/admin-action-confirm.tsx +0 -509
  291. package/src/admin/admin-action-log-labels.ts +0 -83
  292. package/src/admin/admin-action-log.tsx +0 -464
  293. package/src/admin/admin-area-labels.ts +0 -114
  294. package/src/admin/admin-forbidden.tsx +0 -75
  295. package/src/admin/admin-overview.tsx +0 -258
  296. package/src/admin/admin-parts.ts +0 -68
  297. package/src/admin/admin-sections.tsx +0 -208
  298. package/src/admin/admin-tool-links.tsx +0 -90
  299. package/src/admin/invitations-panel-labels.ts +0 -31
  300. package/src/admin/invitations-panel.tsx +0 -516
  301. package/src/admin/mail-test-card-labels.ts +0 -19
  302. package/src/admin/mail-test-card.tsx +0 -189
  303. package/src/admin/plan-change-labels.ts +0 -5
  304. package/src/admin/plan-change.tsx +0 -474
  305. package/src/admin/reviewer-scope-editor-labels.ts +0 -16
  306. package/src/admin/reviewer-scope-editor.tsx +0 -224
  307. package/src/admin/role-select-labels.ts +0 -16
  308. package/src/admin/role-select.tsx +0 -282
  309. package/src/admin/transfer-ownership-dialog-labels.ts +0 -20
  310. package/src/admin/transfer-ownership-dialog.tsx +0 -162
  311. package/src/admin/user-roster-labels.ts +0 -17
  312. package/src/admin/user-roster.tsx +0 -559
  313. package/src/auth/accept-invitation-labels.ts +0 -21
  314. package/src/auth/accept-invitation.tsx +0 -210
  315. package/src/auth/auth-errors-labels.ts +0 -23
  316. package/src/auth/auth-errors.ts +0 -439
  317. package/src/auth/complete-name-dialog-labels.ts +0 -16
  318. package/src/auth/complete-name-dialog.tsx +0 -253
  319. package/src/auth/email-tag.ts +0 -75
  320. package/src/auth/forgot-password-form-labels.ts +0 -20
  321. package/src/auth/forgot-password-form.tsx +0 -221
  322. package/src/auth/form-rules.ts +0 -40
  323. package/src/auth/new-password-fields.tsx +0 -85
  324. package/src/auth/not-found-page-labels.ts +0 -12
  325. package/src/auth/not-found-page.tsx +0 -95
  326. package/src/auth/register-form-labels.ts +0 -31
  327. package/src/auth/register-form.tsx +0 -456
  328. package/src/auth/reset-password-form-labels.ts +0 -27
  329. package/src/auth/reset-password-form.tsx +0 -341
  330. package/src/auth/sign-in-form-labels.ts +0 -44
  331. package/src/auth/sign-in-form.tsx +0 -858
  332. package/src/auth/status-parts.tsx +0 -132
  333. package/src/auth/verify-email-labels.ts +0 -26
  334. package/src/auth/verify-email.tsx +0 -445
  335. package/src/billing/billing-banner.tsx +0 -258
  336. package/src/billing/billing-labels.ts +0 -381
  337. package/src/billing/billing-lock.ts +0 -108
  338. package/src/billing/billing-overview.ts +0 -157
  339. package/src/billing/billing-standing.ts +0 -80
  340. package/src/billing/cancel-request.ts +0 -97
  341. package/src/billing/cancel-subscription.tsx +0 -98
  342. package/src/billing/checkout-processing.ts +0 -394
  343. package/src/billing/checkout-return.ts +0 -90
  344. package/src/billing/pay-page.ts +0 -330
  345. package/src/billing/plan-card.tsx +0 -562
  346. package/src/billing/plan-change-labels.ts +0 -66
  347. package/src/billing/plan-limit-notice.tsx +0 -148
  348. package/src/billing/plan-limit-toast.tsx +0 -90
  349. package/src/billing/plan-limit.ts +0 -52
  350. package/src/billing/plan-price.ts +0 -98
  351. package/src/billing/plan-switch.tsx +0 -216
  352. package/src/billing/provider-page.ts +0 -84
  353. package/src/billing/subscription-actions.tsx +0 -247
  354. package/src/billing/subscription-status-chip.tsx +0 -95
  355. package/src/chart.ts +0 -103
  356. package/src/components/account-chips-labels.ts +0 -16
  357. package/src/components/account-chips.tsx +0 -474
  358. package/src/components/alert-banner.tsx +0 -670
  359. package/src/components/amount-input.tsx +0 -816
  360. package/src/components/appearance-labels.ts +0 -63
  361. package/src/components/authed-image-labels.ts +0 -11
  362. package/src/components/authed-image.tsx +0 -209
  363. package/src/components/autocomplete.tsx +0 -645
  364. package/src/components/breadcrumbs-labels.ts +0 -10
  365. package/src/components/breadcrumbs.tsx +0 -205
  366. package/src/components/bulk-action-bar-labels.ts +0 -11
  367. package/src/components/bulk-action-bar.tsx +0 -443
  368. package/src/components/button-group.tsx +0 -223
  369. package/src/components/button-look.ts +0 -256
  370. package/src/components/button.tsx +0 -339
  371. package/src/components/calculator.tsx +0 -341
  372. package/src/components/calendar-heatmap-labels.ts +0 -15
  373. package/src/components/calendar-heatmap.tsx +0 -600
  374. package/src/components/card.tsx +0 -377
  375. package/src/components/chart-edge.ts +0 -106
  376. package/src/components/chart-figure.tsx +0 -35
  377. package/src/components/chart-height.ts +0 -30
  378. package/src/components/chart-zoom-core.tsx +0 -627
  379. package/src/components/chart-zoom.tsx +0 -22
  380. package/src/components/chart.tsx +0 -554
  381. package/src/components/checkbox-group.tsx +0 -247
  382. package/src/components/checkbox.tsx +0 -346
  383. package/src/components/chip-input.tsx +0 -370
  384. package/src/components/chip-labels.ts +0 -13
  385. package/src/components/chip.tsx +0 -843
  386. package/src/components/choice-card.tsx +0 -544
  387. package/src/components/column-mapper-labels.ts +0 -38
  388. package/src/components/column-mapper.tsx +0 -655
  389. package/src/components/combobox-core.tsx +0 -1321
  390. package/src/components/combobox-suggestions.tsx +0 -131
  391. package/src/components/combobox.tsx +0 -716
  392. package/src/components/confirm-context.ts +0 -7
  393. package/src/components/confirm-dialog-labels.ts +0 -13
  394. package/src/components/confirm-dialog.tsx +0 -341
  395. package/src/components/copy-button-labels.ts +0 -13
  396. package/src/components/copy-button.tsx +0 -192
  397. package/src/components/country-select-labels.ts +0 -11
  398. package/src/components/country-select.tsx +0 -539
  399. package/src/components/currency-option-list.tsx +0 -188
  400. package/src/components/currency-select.tsx +0 -343
  401. package/src/components/danger-confirm-labels.ts +0 -20
  402. package/src/components/danger-confirm.tsx +0 -987
  403. package/src/components/data-table-cells.tsx +0 -118
  404. package/src/components/data-table-column-settings.tsx +0 -198
  405. package/src/components/data-table-filter-popover.tsx +0 -289
  406. package/src/components/data-table-filters.ts +0 -315
  407. package/src/components/data-table-fit.ts +0 -301
  408. package/src/components/data-table-groups.tsx +0 -288
  409. package/src/components/data-table-head.tsx +0 -280
  410. package/src/components/data-table-labels.ts +0 -198
  411. package/src/components/data-table-leading-row.tsx +0 -58
  412. package/src/components/data-table-mobile.tsx +0 -1117
  413. package/src/components/data-table-pagination.tsx +0 -202
  414. package/src/components/data-table-resize.ts +0 -188
  415. package/src/components/data-table-row-actions.tsx +0 -302
  416. package/src/components/data-table-row.tsx +0 -496
  417. package/src/components/data-table-selection.ts +0 -71
  418. package/src/components/data-table-shared.tsx +0 -287
  419. package/src/components/data-table-sort.ts +0 -163
  420. package/src/components/data-table-virtual.ts +0 -576
  421. package/src/components/data-table.tsx +0 -2598
  422. package/src/components/date-field.tsx +0 -684
  423. package/src/components/date-format-setting.tsx +0 -64
  424. package/src/components/date-picker.tsx +0 -404
  425. package/src/components/date-range-picker.tsx +0 -518
  426. package/src/components/description-list-labels.ts +0 -9
  427. package/src/components/description-list.tsx +0 -386
  428. package/src/components/dialog-frame-labels.ts +0 -7
  429. package/src/components/dialog-frame.tsx +0 -284
  430. package/src/components/disclosure.tsx +0 -476
  431. package/src/components/dropdown.tsx +0 -461
  432. package/src/components/empty-state.tsx +0 -136
  433. package/src/components/entity-combobox.tsx +0 -422
  434. package/src/components/error-boundary-labels.ts +0 -20
  435. package/src/components/error-boundary.tsx +0 -675
  436. package/src/components/facing-pair.ts +0 -93
  437. package/src/components/field-base-labels.ts +0 -20
  438. package/src/components/field-base.tsx +0 -656
  439. package/src/components/field-parts.tsx +0 -825
  440. package/src/components/field-strip.tsx +0 -129
  441. package/src/components/field.tsx +0 -206
  442. package/src/components/file-button.tsx +0 -295
  443. package/src/components/file-dropzone.tsx +0 -559
  444. package/src/components/floating-panel-labels.ts +0 -10
  445. package/src/components/floating-panel.tsx +0 -828
  446. package/src/components/focus-ring.ts +0 -16
  447. package/src/components/form-actions-labels.ts +0 -11
  448. package/src/components/form-actions.tsx +0 -578
  449. package/src/components/full-bleed-dialog.tsx +0 -294
  450. package/src/components/grouped-picker.tsx +0 -184
  451. package/src/components/help-popover.tsx +0 -117
  452. package/src/components/hover-menu.tsx +0 -343
  453. package/src/components/iban-input-labels.ts +0 -14
  454. package/src/components/iban-input.tsx +0 -236
  455. package/src/components/icon-button.tsx +0 -959
  456. package/src/components/icon-picker-labels.ts +0 -13
  457. package/src/components/icon-picker.tsx +0 -232
  458. package/src/components/image-grid-labels.ts +0 -11
  459. package/src/components/image-grid.tsx +0 -202
  460. package/src/components/inline-confirm.tsx +0 -116
  461. package/src/components/inline-edit-field-labels.ts +0 -11
  462. package/src/components/inline-edit-field.tsx +0 -552
  463. package/src/components/inline-entity-combobox.tsx +0 -849
  464. package/src/components/input.tsx +0 -394
  465. package/src/components/jump-calendar.tsx +0 -265
  466. package/src/components/language-select.tsx +0 -93
  467. package/src/components/legal-labels.ts +0 -105
  468. package/src/components/legal-page.tsx +0 -711
  469. package/src/components/legal.tsx +0 -668
  470. package/src/components/lightbox-labels.ts +0 -18
  471. package/src/components/lightbox.tsx +0 -399
  472. package/src/components/line-items-labels.ts +0 -14
  473. package/src/components/line-items.tsx +0 -602
  474. package/src/components/list-labels.ts +0 -12
  475. package/src/components/list.tsx +0 -870
  476. package/src/components/loading-state.tsx +0 -78
  477. package/src/components/measured-grid-labels.ts +0 -25
  478. package/src/components/measured-grid.tsx +0 -837
  479. package/src/components/menu-item.tsx +0 -241
  480. package/src/components/mini-calendar-labels.ts +0 -17
  481. package/src/components/mini-calendar.tsx +0 -792
  482. package/src/components/modal.tsx +0 -534
  483. package/src/components/money-draft.ts +0 -83
  484. package/src/components/money-field.tsx +0 -76
  485. package/src/components/month-grid.tsx +0 -229
  486. package/src/components/month-picker-labels.ts +0 -22
  487. package/src/components/month-picker.tsx +0 -1087
  488. package/src/components/multi-entity-combobox.tsx +0 -369
  489. package/src/components/multi-select.tsx +0 -376
  490. package/src/components/nav-pills.tsx +0 -198
  491. package/src/components/number-field.tsx +0 -327
  492. package/src/components/number-input.tsx +0 -559
  493. package/src/components/numeric-field.ts +0 -169
  494. package/src/components/numpad-sheet.tsx +0 -285
  495. package/src/components/one-time-code-input.tsx +0 -270
  496. package/src/components/page-contents-labels.ts +0 -9
  497. package/src/components/page-contents.tsx +0 -282
  498. package/src/components/page-header-context.ts +0 -8
  499. package/src/components/page-header.tsx +0 -298
  500. package/src/components/password-strength-labels.ts +0 -22
  501. package/src/components/password-strength.tsx +0 -241
  502. package/src/components/phone-input-labels.ts +0 -10
  503. package/src/components/phone-input.tsx +0 -282
  504. package/src/components/picker-sheet.tsx +0 -330
  505. package/src/components/pie-chart-labels.ts +0 -40
  506. package/src/components/pie-chart.tsx +0 -480
  507. package/src/components/popover-labels.ts +0 -14
  508. package/src/components/popover.tsx +0 -268
  509. package/src/components/progress-bar-labels.ts +0 -10
  510. package/src/components/progress-bar.tsx +0 -479
  511. package/src/components/qr-code.tsx +0 -76
  512. package/src/components/reauth-dialog-labels.ts +0 -13
  513. package/src/components/reauth-dialog.tsx +0 -265
  514. package/src/components/row-actions-labels.ts +0 -12
  515. package/src/components/row-actions.tsx +0 -795
  516. package/src/components/scroll-area.tsx +0 -123
  517. package/src/components/search-field.tsx +0 -192
  518. package/src/components/select.tsx +0 -294
  519. package/src/components/separator.tsx +0 -33
  520. package/src/components/series-chart-axes.ts +0 -342
  521. package/src/components/series-chart-budget.ts +0 -150
  522. package/src/components/series-chart-labels.ts +0 -33
  523. package/src/components/series-chart-thin.ts +0 -180
  524. package/src/components/series-chart-ticks.ts +0 -194
  525. package/src/components/series-chart.tsx +0 -1906
  526. package/src/components/server-wake-labels.ts +0 -11
  527. package/src/components/server-wake.tsx +0 -129
  528. package/src/components/settings-fields.tsx +0 -237
  529. package/src/components/share-card-labels.ts +0 -30
  530. package/src/components/share-card.tsx +0 -675
  531. package/src/components/signature-pad-labels.ts +0 -24
  532. package/src/components/signature-pad.tsx +0 -747
  533. package/src/components/signed-amount-labels.ts +0 -10
  534. package/src/components/signed-amount.tsx +0 -336
  535. package/src/components/skeleton.tsx +0 -80
  536. package/src/components/slider.tsx +0 -338
  537. package/src/components/sparkline-labels.ts +0 -14
  538. package/src/components/sparkline.tsx +0 -322
  539. package/src/components/spinner.tsx +0 -81
  540. package/src/components/stat-tile-labels.ts +0 -15
  541. package/src/components/stat-tile.tsx +0 -754
  542. package/src/components/status-dot.tsx +0 -170
  543. package/src/components/swatch-picker-labels.ts +0 -10
  544. package/src/components/swatch-picker.tsx +0 -283
  545. package/src/components/swipeable-row.tsx +0 -386
  546. package/src/components/switch.tsx +0 -273
  547. package/src/components/table-skeleton.tsx +0 -136
  548. package/src/components/table.tsx +0 -647
  549. package/src/components/tabs-labels.ts +0 -13
  550. package/src/components/tabs.tsx +0 -693
  551. package/src/components/text-link.tsx +0 -359
  552. package/src/components/text.tsx +0 -150
  553. package/src/components/textarea.tsx +0 -330
  554. package/src/components/tile-radio.tsx +0 -332
  555. package/src/components/time-input.tsx +0 -121
  556. package/src/components/toast-labels.ts +0 -12
  557. package/src/components/toast.tsx +0 -519
  558. package/src/components/toggle-group.tsx +0 -752
  559. package/src/components/toggle-legend.tsx +0 -394
  560. package/src/components/tooltip.tsx +0 -1149
  561. package/src/components/translation-review-editor.tsx +0 -290
  562. package/src/components/translation-review-labels.ts +0 -181
  563. package/src/components/translation-review-parts.tsx +0 -272
  564. package/src/components/translation-review.tsx +0 -1240
  565. package/src/components/tree-view.tsx +0 -589
  566. package/src/components/treemap-labels.ts +0 -47
  567. package/src/components/treemap-layout.ts +0 -210
  568. package/src/components/treemap.tsx +0 -1184
  569. package/src/components/trigger-aria.ts +0 -44
  570. package/src/components/use-anchor-dir.ts +0 -20
  571. package/src/components/use-mobile-reveal.ts +0 -62
  572. package/src/components/use-table-state.ts +0 -753
  573. package/src/components/user-avatar.tsx +0 -116
  574. package/src/components/wizard-stepper.tsx +0 -42
  575. package/src/components/write-lock-labels.ts +0 -10
  576. package/src/components/write-lock.tsx +0 -253
  577. package/src/currencies.ts +0 -90
  578. package/src/data-table.ts +0 -42
  579. package/src/demo/demo-banner.tsx +0 -153
  580. package/src/demo/demo-countdown.ts +0 -136
  581. package/src/demo/demo-ended.tsx +0 -90
  582. package/src/demo/demo-labels.ts +0 -78
  583. package/src/demo/demo-session.ts +0 -32
  584. package/src/demo/demo-start.tsx +0 -156
  585. package/src/eslint/index.ts +0 -161
  586. package/src/eslint/role-utilities.generated.ts +0 -146
  587. package/src/eslint/role-utilities.ts +0 -233
  588. package/src/feedback/feedback-attachment-download.tsx +0 -77
  589. package/src/feedback/feedback-attachment-labels.ts +0 -37
  590. package/src/feedback/feedback-attachment.tsx +0 -1239
  591. package/src/feedback/feedback-capture.ts +0 -287
  592. package/src/feedback/feedback-comment-thread.tsx +0 -353
  593. package/src/feedback/feedback-context-labels.ts +0 -11
  594. package/src/feedback/feedback-context.tsx +0 -245
  595. package/src/feedback/feedback-crash.ts +0 -547
  596. package/src/feedback/feedback-diagnostics.tsx +0 -41
  597. package/src/feedback/feedback-dialog-labels.ts +0 -29
  598. package/src/feedback/feedback-dialog.tsx +0 -452
  599. package/src/feedback/feedback-entry-file.tsx +0 -150
  600. package/src/feedback/feedback-inbox.tsx +0 -552
  601. package/src/feedback/feedback-labels.ts +0 -144
  602. package/src/feedback/feedback-menu-labels.ts +0 -12
  603. package/src/feedback/feedback-menu.tsx +0 -177
  604. package/src/feedback/feedback-mutation.ts +0 -20
  605. package/src/feedback/feedback-page-link.ts +0 -90
  606. package/src/feedback/feedback-public-labels.ts +0 -81
  607. package/src/feedback/feedback-public-list.tsx +0 -524
  608. package/src/feedback/feedback-public-switch.tsx +0 -102
  609. package/src/feedback/feedback-public-types.ts +0 -101
  610. package/src/feedback/feedback-record.ts +0 -428
  611. package/src/feedback/feedback-replies-context.ts +0 -9
  612. package/src/feedback/feedback-replies.tsx +0 -343
  613. package/src/feedback/feedback-rework-entry-chip.tsx +0 -18
  614. package/src/feedback/feedback-row-detail-labels.ts +0 -31
  615. package/src/feedback/feedback-row-detail.tsx +0 -871
  616. package/src/feedback/feedback-status-undo.ts +0 -109
  617. package/src/feedback/feedback-submit-dialog.tsx +0 -131
  618. package/src/feedback/feedback-submit.tsx +0 -270
  619. package/src/feedback/feedback-swipe.tsx +0 -192
  620. package/src/feedback/feedback-table-labels.ts +0 -27
  621. package/src/feedback/feedback-table.tsx +0 -912
  622. package/src/feedback/feedback-thread-labels.ts +0 -22
  623. package/src/feedback/feedback-thread-parts-labels.ts +0 -41
  624. package/src/feedback/feedback-thread.tsx +0 -905
  625. package/src/feedback/feedback-vocabulary.ts +0 -263
  626. package/src/feedback/feedback-vote-button.tsx +0 -124
  627. package/src/feedback.ts +0 -116
  628. package/src/hooks/use-anchored-panel.ts +0 -396
  629. package/src/hooks/use-anchored-rect.ts +0 -77
  630. package/src/hooks/use-announce.ts +0 -85
  631. package/src/hooks/use-authed-src.ts +0 -167
  632. package/src/hooks/use-body-scroll-lock.ts +0 -119
  633. package/src/hooks/use-breakpoint.ts +0 -133
  634. package/src/hooks/use-close-transition.ts +0 -107
  635. package/src/hooks/use-copy-to-clipboard.ts +0 -122
  636. package/src/hooks/use-debounce.ts +0 -114
  637. package/src/hooks/use-dismiss.ts +0 -371
  638. package/src/hooks/use-document-title.ts +0 -33
  639. package/src/hooks/use-file-drop.ts +0 -121
  640. package/src/hooks/use-file-picker-labels.ts +0 -28
  641. package/src/hooks/use-file-picker.tsx +0 -359
  642. package/src/hooks/use-focus-trap.ts +0 -199
  643. package/src/hooks/use-hotkey.ts +0 -212
  644. package/src/hooks/use-large-text.ts +0 -41
  645. package/src/hooks/use-long-press.ts +0 -140
  646. package/src/hooks/use-media-query.ts +0 -39
  647. package/src/hooks/use-mounted.ts +0 -39
  648. package/src/hooks/use-noindex.ts +0 -37
  649. package/src/hooks/use-overlay-history.ts +0 -714
  650. package/src/hooks/use-row-swipe.ts +0 -207
  651. package/src/hooks/use-search-param-state.ts +0 -434
  652. package/src/hooks/use-windowed-rows.ts +0 -225
  653. package/src/i18n/defaults.ts +0 -267
  654. package/src/i18n/german.ts +0 -2059
  655. package/src/i18n/kit-labels.tsx +0 -1003
  656. package/src/i18n/languages.ts +0 -349
  657. package/src/i18n/locales/de-CH.ts +0 -24
  658. package/src/i18n/locales/en.ts +0 -267
  659. package/src/i18n/locales/es.ts +0 -1999
  660. package/src/i18n/locales/fr.ts +0 -2037
  661. package/src/i18n/locales/hu.ts +0 -2004
  662. package/src/i18n/locales/it.ts +0 -2014
  663. package/src/i18n/locales/zh.ts +0 -1912
  664. package/src/i18n/plurals.ts +0 -86
  665. package/src/i18n/review.ts +0 -475
  666. package/src/i18n/shared-labels.ts +0 -138
  667. package/src/i18n/swiss.ts +0 -29
  668. package/src/index.ts +0 -1191
  669. package/src/landing/access.ts +0 -93
  670. package/src/landing/landing-actions.tsx +0 -97
  671. package/src/landing/landing-labels.ts +0 -59
  672. package/src/landing/landing-sections.tsx +0 -341
  673. package/src/landing/page-seo.ts +0 -261
  674. package/src/landing/public-header.tsx +0 -121
  675. package/src/landing/public-page.tsx +0 -106
  676. package/src/landing/routing.tsx +0 -225
  677. package/src/lib/broadcast.ts +0 -52
  678. package/src/lib/calc.ts +0 -323
  679. package/src/lib/chip-edge-snap.ts +0 -212
  680. package/src/lib/clipboard-minus.ts +0 -107
  681. package/src/lib/clipping.ts +0 -34
  682. package/src/lib/cn.ts +0 -28
  683. package/src/lib/column-mapping.ts +0 -234
  684. package/src/lib/countries.ts +0 -91
  685. package/src/lib/data-attributes.ts +0 -14
  686. package/src/lib/date-format.ts +0 -227
  687. package/src/lib/dates.ts +0 -288
  688. package/src/lib/day-format.ts +0 -96
  689. package/src/lib/decimal-marks.ts +0 -108
  690. package/src/lib/describe-failure.ts +0 -18
  691. package/src/lib/device-settings.ts +0 -147
  692. package/src/lib/direction.ts +0 -74
  693. package/src/lib/document-navigation.ts +0 -17
  694. package/src/lib/document-title.ts +0 -41
  695. package/src/lib/download.ts +0 -172
  696. package/src/lib/float-clearance.ts +0 -70
  697. package/src/lib/floating-stack.ts +0 -70
  698. package/src/lib/focus-left.ts +0 -156
  699. package/src/lib/format.ts +0 -585
  700. package/src/lib/http-status.ts +0 -38
  701. package/src/lib/iban.ts +0 -251
  702. package/src/lib/ime.ts +0 -24
  703. package/src/lib/intl-cache.ts +0 -27
  704. package/src/lib/iso-day.ts +0 -13
  705. package/src/lib/lazy-with-fallback.ts +0 -82
  706. package/src/lib/logger.ts +0 -69
  707. package/src/lib/minus.ts +0 -50
  708. package/src/lib/path-pattern.ts +0 -55
  709. package/src/lib/person-name.ts +0 -155
  710. package/src/lib/phone.ts +0 -208
  711. package/src/lib/plain-text.ts +0 -22
  712. package/src/lib/presence.ts +0 -18
  713. package/src/lib/qr-encode.ts +0 -444
  714. package/src/lib/quiet-focus.ts +0 -32
  715. package/src/lib/reduced-motion.ts +0 -22
  716. package/src/lib/refs.ts +0 -22
  717. package/src/lib/round.ts +0 -43
  718. package/src/lib/safe-storage.ts +0 -119
  719. package/src/lib/server-wake.ts +0 -315
  720. package/src/lib/session-refresh.ts +0 -472
  721. package/src/lib/share-format.ts +0 -18
  722. package/src/lib/status-tone.ts +0 -43
  723. package/src/lib/strip-fade.ts +0 -287
  724. package/src/lib/table-text.ts +0 -554
  725. package/src/lib/text-case.ts +0 -19
  726. package/src/lib/text-match.ts +0 -169
  727. package/src/lib/thenable.ts +0 -19
  728. package/src/lib/translation-review.ts +0 -769
  729. package/src/notifications/device-zone-report.ts +0 -67
  730. package/src/notifications/feedback-notification-types-labels.ts +0 -33
  731. package/src/notifications/feedback-notification-types.ts +0 -71
  732. package/src/notifications/notification-bell.tsx +0 -119
  733. package/src/notifications/notification-inbox.tsx +0 -309
  734. package/src/notifications/notification-parts.tsx +0 -81
  735. package/src/notifications/notification-types-setting.tsx +0 -406
  736. package/src/notifications/notification-types.ts +0 -89
  737. package/src/notifications/notifications-labels.ts +0 -287
  738. package/src/notifications/push-device-setting.tsx +0 -230
  739. package/src/notifications/push-devices-setting.tsx +0 -374
  740. package/src/notifications/push-worker.ts +0 -168
  741. package/src/notifications/quiet-hours-setting.tsx +0 -238
  742. package/src/notifications/unsubscribe-panel.tsx +0 -200
  743. package/src/notifications/use-push-device.ts +0 -448
  744. package/src/offline/local-first.ts +0 -100
  745. package/src/offline/pwa-update-prompt-labels.ts +0 -9
  746. package/src/offline/pwa-update-prompt.tsx +0 -78
  747. package/src/offline/query-persistence.ts +0 -391
  748. package/src/offline/service-worker-updates.ts +0 -81
  749. package/src/offline/shared-computer-labels.ts +0 -8
  750. package/src/offline/shared-computer.tsx +0 -87
  751. package/src/offline/sign-out-pending-dialog-labels.ts +0 -21
  752. package/src/offline/sign-out-pending-dialog.tsx +0 -135
  753. package/src/offline.ts +0 -37
  754. package/src/push-worker.ts +0 -25
  755. package/src/rhf/fields.tsx +0 -2187
  756. package/src/rhf/form-core.tsx +0 -324
  757. package/src/rhf/form.tsx +0 -12
  758. package/src/rhf/line-items.tsx +0 -135
  759. package/src/rhf/use-rhf-wizard-step.ts +0 -104
  760. package/src/rhf.ts +0 -21
  761. package/src/search/command-palette-labels.ts +0 -16
  762. package/src/search/command-palette.tsx +0 -624
  763. package/src/search/global-search-labels.ts +0 -13
  764. package/src/search/global-search.tsx +0 -660
  765. package/src/search/search-index.ts +0 -283
  766. package/src/search/use-command-key.ts +0 -23
  767. package/src/search.ts +0 -14
  768. package/src/settings/device-reset-setting-labels.ts +0 -20
  769. package/src/settings/device-reset-setting.tsx +0 -116
  770. package/src/settings/settings-card-classes.ts +0 -11
  771. package/src/settings/settings-catalogue.ts +0 -150
  772. package/src/settings/settings-context.ts +0 -33
  773. package/src/settings/settings-heading.tsx +0 -67
  774. package/src/settings/settings-labels.ts +0 -87
  775. package/src/settings/settings-layout.tsx +0 -471
  776. package/src/settings/settings-section.tsx +0 -108
  777. package/src/settings/use-account-appearance.ts +0 -148
  778. package/src/settings/use-account-language.ts +0 -146
  779. package/src/settings/use-settings-focus.ts +0 -128
  780. package/src/settings/use-settings-route.ts +0 -258
  781. package/src/shell/account-menu-language.tsx +0 -130
  782. package/src/shell/account-menu-text-size.tsx +0 -80
  783. package/src/shell/admin-menu.tsx +0 -183
  784. package/src/shell/app-shell-labels.ts +0 -11
  785. package/src/shell/app-shell.tsx +0 -1560
  786. package/src/shell/auth-layout.tsx +0 -186
  787. package/src/shell/company-switcher-labels.ts +0 -13
  788. package/src/shell/company-switcher.tsx +0 -136
  789. package/src/shell/dev-menu.tsx +0 -257
  790. package/src/shell/fill-height.tsx +0 -45
  791. package/src/shell/language-code.ts +0 -5
  792. package/src/shell/option-switcher-menu.tsx +0 -84
  793. package/src/shell/sync-status-indicator.tsx +0 -303
  794. package/src/shell/top-bar-actions.tsx +0 -87
  795. package/src/shell/top-bar-brand.tsx +0 -78
  796. package/src/shell/top-bar-parts-labels.ts +0 -148
  797. package/src/shell/top-bar.tsx +0 -40
  798. package/src/shell/topbar-action-menu.tsx +0 -567
  799. package/src/shell/topbar-controls.tsx +0 -269
  800. package/src/shell/tour-menu.tsx +0 -187
  801. package/src/shell.ts +0 -108
  802. package/src/sync/db.ts +0 -129
  803. package/src/sync/engine.ts +0 -1011
  804. package/src/sync/hooks.ts +0 -98
  805. package/src/sync/testing.ts +0 -73
  806. package/src/sync/wire.ts +0 -61
  807. package/src/sync.ts +0 -37
  808. package/src/table-text.ts +0 -8
  809. package/src/testing/css-variables.generated.ts +0 -112
  810. package/src/testing/css-variables.ts +0 -189
  811. package/src/testing/index.ts +0 -29
  812. package/src/testing/react.ts +0 -58
  813. package/src/testing/tour.ts +0 -41
  814. package/src/testing/viewport.ts +0 -357
  815. package/src/theme/chart-palette.ts +0 -232
  816. package/src/theme/color.ts +0 -272
  817. package/src/theme/contrast-tokens.ts +0 -268
  818. package/src/theme/contrast.ts +0 -250
  819. package/src/theme/palette-derive.ts +0 -825
  820. package/src/theme/palette-presets.ts +0 -544
  821. package/src/theme/palette-store.ts +0 -108
  822. package/src/theme/text-size.ts +0 -289
  823. package/src/theme/theme-store.ts +0 -157
  824. package/src/tour/tour-catalogue-labels.ts +0 -75
  825. package/src/tour/tour-catalogue.tsx +0 -335
  826. package/src/tour/tour-dock.ts +0 -134
  827. package/src/tour/tour-engine.ts +0 -37
  828. package/src/tour/tour-gates.ts +0 -218
  829. package/src/tour/tour-guide-button.tsx +0 -64
  830. package/src/tour/tour-guide-labels.ts +0 -15
  831. package/src/tour/tour-info.ts +0 -144
  832. package/src/tour/tour-labels.ts +0 -23
  833. package/src/tour/tour-overlay.tsx +0 -1170
  834. package/src/tour/tour.tsx +0 -750
  835. package/src/tour/use-tour-progress.ts +0 -671
  836. package/src/tour/use-tour-url-sync.ts +0 -266
  837. package/src/tour.ts +0 -21
  838. package/src/vite-env.d.ts +0 -23
  839. package/src/wizard/stepper-nav.tsx +0 -360
  840. package/src/wizard/types.ts +0 -275
  841. package/src/wizard/use-wizard.ts +0 -560
  842. package/src/wizard/validation.ts +0 -39
  843. package/src/wizard/wizard-context.tsx +0 -74
  844. package/src/wizard/wizard-labels.ts +0 -29
  845. package/src/wizard/wizard-step.tsx +0 -76
  846. package/src/wizard/wizard-summary.tsx +0 -84
  847. package/src/wizard.ts +0 -15
@@ -1,602 +0,0 @@
1
- import { useCallback, useLayoutEffect, useRef, useState } from "react";
2
- import type { ComponentPropsWithRef, CSSProperties, HTMLAttributes, KeyboardEvent, Key, ReactNode } from "react";
3
- import { Plus, Trash2 } from "lucide-react";
4
- import { cn } from "../lib/cn";
5
- import { hasContent } from "../lib/presence";
6
- import { useKitLabels, type LabelOverride } from "../i18n/kit-labels";
7
- import { Button } from "./button";
8
- import { IconButton } from "./icon-button";
9
- import { DEFAULT_LINE_ITEMS_LABELS } from "./line-items-labels";
10
-
11
- /** The words {@link LineItems} renders on its own behalf. Row numbers are 1-based. */
12
- export interface LineItemsLabels {
13
- /** The dashed add button. */
14
- add: string;
15
- /** The remove button's name for one row. */
16
- remove: (row: number) => string;
17
- /** Its name while it waits for the second press (`confirmRemove`). */
18
- confirmRemove: (row: number) => string;
19
- /** A row's group name, when the caller gives no `rowLabel`. */
20
- row: (row: number) => string;
21
- /** The name a cell's field should carry: the column, and which row. */
22
- cell: (column: string, row: number) => string;
23
- /** The totals row's label, and its group name. */
24
- totals: string;
25
- }
26
-
27
- // Defined in ./line-items-labels, which holds no component code (0.34, KS U8).
28
- export { DEFAULT_LINE_ITEMS_LABELS };
29
-
30
- /** What a column's `render` receives for one row. */
31
- export interface LineItemCellContext<T> {
32
- item: T;
33
- /** 0-based. */
34
- index: number;
35
- /** The accessible name for the cell's field — "Debit, row 2". The header is
36
- * hidden from assistive tech (each row repeats it), so the field has to carry it:
37
- * `<Input aria-label={label} … />`. */
38
- label: string;
39
- /** The column's own name ("Debit") for the field's VISIBLE label — set only when the
40
- * cell's labels are `"floating"` (see {@link LineItemsProps.fieldLabels}), so one
41
- * render serves both modes: `<Input label={fieldLabel} aria-label={label} … />`.
42
- * Undefined there, the Input stays a bare compact control; set, it floats "Debit"
43
- * while `aria-label` still says which row. */
44
- fieldLabel?: string;
45
- }
46
-
47
- /** How a cell's field is labelled. `aria`: the field is a bare control named by
48
- * `aria-label`, under a header row (stacked: a small copy of the header over it).
49
- * `floating`: the field shows its own floating label ({@link LineItemCellContext.fieldLabel}),
50
- * so the list draws no header for it. */
51
- export type LineItemsFieldLabels = "aria" | "floating";
52
-
53
- /** The colour of a {@link LineItemsSummary}'s value — a verdict (`success` /
54
- * `danger`), quiet (`muted`), or the money pair (`income` / `expense`, the colours
55
- * `SignedAmount` draws a figure in) for a remainder that reads as the row it settles. */
56
- export type LineItemsSummaryTone = "neutral" | "success" | "danger" | "muted" | "income" | "expense";
57
-
58
- /**
59
- * A line under the lines that says where they stand — a split's remainder ("Left to
60
- * assign CHF 0.00", green at zero, red otherwise, muted while the total is not known
61
- * yet), with an optional action that settles it ("Set amount to total").
62
- */
63
- export interface LineItemsSummary {
64
- label: ReactNode;
65
- value?: ReactNode;
66
- /** The value's colour. Default `neutral`. The label stays neutral: the colour is a
67
- * second signal, never the only one — the value and label carry the meaning.
68
- * With no `value` the line is a state on its own ("Waiting for the total"), and
69
- * the tone colours the label instead — `muted` quiets the whole line. */
70
- tone?: LineItemsSummaryTone;
71
- /** Beside the value: a chip or badge that names the state ("Balanced" next to a
72
- * journal entry's zero difference). */
73
- status?: ReactNode;
74
- /** A small button at the end of the line. Disabled along with the list's
75
- * `disabled`. `variant`: `secondary` (default) is a boxed button; `link` a muted
76
- * text link, for an action that is an aside rather than the way to settle it. */
77
- action?: { label: ReactNode; onClick: () => void; disabled?: boolean; variant?: "secondary" | "link" };
78
- }
79
-
80
- /** Where a row's remove button sits. `row` (default): stacked, a row of the card to
81
- * itself (paired, the whole width); wide, its own track. `inline`: stacked, beside
82
- * the row's last field ("category + amount" over "memo + delete"); wide, unchanged. */
83
- export type LineItemsRemovePlacement = "row" | "inline";
84
-
85
- /** How the remove button sits in the height of a wide row: at its top, centred, or at
86
- * its foot. */
87
- export type LineItemsRemoveAlign = "start" | "center" | "end";
88
-
89
- export interface LineItemsColumn<T> {
90
- /** Stable id: the React key, and the key into `totals`. */
91
- key: string;
92
- /** The column header (and the small label over the cell once the rows stack). */
93
- header: ReactNode;
94
- /** The column's name for {@link LineItemCellContext.label}, when `header` is not a
95
- * string. */
96
- label?: string;
97
- /** The grid track once the rows are wide enough to be a table. Default
98
- * `minmax(0,1fr)`; `"7rem"` for an amount. */
99
- width?: string;
100
- /** `end` for figures: the header and the totals cell end-align with the field. */
101
- align?: "start" | "end";
102
- /** This column's labelling, over the list's {@link LineItemsProps.fieldLabels} — a
103
- * read-only "Sum" cell in a floating list keeps its header with `"aria"`. */
104
- fieldLabels?: LineItemsFieldLabels;
105
- /** With {@link LineItemsProps.narrowColumns} `2`: `2` gives the cell a whole row of
106
- * the stacked card (a description), where short fields pair up two to a row.
107
- * Default `1`. No effect on the wide grid. */
108
- narrowSpan?: 1 | 2;
109
- render: (ctx: LineItemCellContext<T>) => ReactNode;
110
- }
111
-
112
- /**
113
- * What {@link LineItemsProps.rowProps} returns for one row: `data-*` hooks, an `id`, a
114
- * class, handlers. A `data-*` attribute is typed so `{ "data-tour": "rule-condition" }`
115
- * needs no cast.
116
- */
117
- export type LineItemsRowProps = Omit<
118
- HTMLAttributes<HTMLDivElement>,
119
- "children" | "dangerouslySetInnerHTML" | "role"
120
- > & {
121
- [key: `data-${string}`]: string | number | boolean | undefined;
122
- };
123
-
124
- export interface LineItemsProps<T> extends Omit<ComponentPropsWithRef<"div">, "children"> {
125
- items: readonly T[];
126
- columns: readonly LineItemsColumn<T>[];
127
- /** The row's React key. Default: the item's `id` (react-hook-form's `useFieldArray`
128
- * `fields` carry one), else its index. */
129
- getKey?: (item: T, index: number) => Key;
130
- /** Append a row. Omitted: no add button. The first field of the new row is focused. */
131
- onAdd?: () => void;
132
- /** Remove the row at `index`. Omitted: no remove buttons. */
133
- onRemove?: (index: number) => void;
134
- /** Remove is disabled at or below this many rows (a journal entry needs two).
135
- * Default 0. */
136
- minItems?: number;
137
- /** Add is disabled at this many rows. */
138
- maxItems?: number;
139
- /**
140
- * Ask before a row goes:
141
- * - `true`: the remove button asks for a second press — it fills red and its name
142
- * becomes `lineItems.confirmRemove`; Escape, or leaving it, calls it off.
143
- * - a function: called with the row, and the row goes only if it answers `true`
144
- * (`(item, i) => confirm({ title: … , tone: "danger" })` with `useConfirm`).
145
- */
146
- confirmRemove?: boolean | ((item: T, index: number) => boolean | Promise<boolean>);
147
- /** The add button's text. Default `lineItems.add`. */
148
- addLabel?: ReactNode;
149
- /** A row's group name ("Line 2"). Default `lineItems.row`. */
150
- rowLabel?: (index: number, item: T) => string;
151
- /** A totals row under the lines, one entry per column `key`. The first column
152
- * without an entry carries {@link totalsLabel}. Omitted: no totals row. */
153
- totals?: Partial<Record<string, ReactNode>>;
154
- /** Default `lineItems.totals`, "Total". */
155
- totalsLabel?: ReactNode;
156
- /** Shown in place of the rows when there are none. */
157
- empty?: ReactNode;
158
- /** A message about the list as a whole ("The entry does not balance"). */
159
- error?: ReactNode;
160
- /** A line under the lines and totals — the remainder of a split, say. See
161
- * {@link LineItemsSummary}. */
162
- summary?: LineItemsSummary;
163
- /** How the cells' fields are labelled. Default `aria` (compact bare controls under a
164
- * header row); `floating` hands each cell its column's name as
165
- * {@link LineItemCellContext.fieldLabel} for a visible floating label, and drops the
166
- * header for those columns. A column's own `fieldLabels` wins. */
167
- fieldLabels?: LineItemsFieldLabels;
168
- /** Stacked (a narrow pane), how many fields share a row of a line's card: `2` pairs
169
- * them up (a column's `narrowSpan={2}` takes a whole row), once the pane is wide
170
- * enough for two fields (18rem); narrower still, one. Default `1`. */
171
- narrowColumns?: 1 | 2;
172
- /** Stacked, where the remove button goes: a row of its own (`row`, default) or
173
- * beside the last field (`inline`). See {@link LineItemsRemovePlacement}. */
174
- removePlacement?: LineItemsRemovePlacement;
175
- /** On the wide grid, the remove button's place in the row's height. Default `start`
176
- * — or `center` when a column floats its label (`fieldLabels="floating"`): a
177
- * floating field is taller than the button, and centred is level with its control.
178
- * A field that shows a message under itself grows the row; pin `start` then. */
179
- removeAlign?: LineItemsRemoveAlign;
180
- /** Disables add and remove (the fields are the caller's to disable). */
181
- disabled?: boolean;
182
- /**
183
- * Extra attributes for one row's element (the `role="group"` that holds its fields) —
184
- * keksdose K20: its rule editor's tour points at the first condition row with
185
- * `[data-tour="rule-condition"]` (dev#495), and with nowhere to put the anchor on the
186
- * row it wrapped a cell's field in a `span` instead, which the spotlight then drew
187
- * around one field rather than the row. Test ids the same way.
188
- *
189
- * MERGED under the list's own, which win: `role`, the group's `aria-label` (that is
190
- * {@link rowLabel}'s) and `data-line-items-row` stay the list's — the row's name and
191
- * the hook its focus handling finds rows by. `className` is added after the row's
192
- * own classes, `style` is passed through, and an `onKeyDown` runs BEFORE the row's
193
- * Ctrl/⌘+Enter "add a row" (call `preventDefault()` to keep that from happening).
194
- */
195
- rowProps?: (item: T, index: number) => LineItemsRowProps | undefined;
196
- labels?: LabelOverride<LineItemsLabels>;
197
- }
198
-
199
- const REMOVE_TRACK = "2.25rem";
200
- const SUMMARY_TONE: Record<LineItemsSummaryTone, string> = {
201
- neutral: "text-primary",
202
- success: "text-success",
203
- danger: "text-danger",
204
- muted: "text-muted",
205
- // SignedAmount's money palette (toneTextClass "income" / "expense").
206
- income: "text-money-income",
207
- expense: "text-money-expense",
208
- };
209
- const REMOVE_ALIGN: Record<LineItemsRemoveAlign, string> = {
210
- start: "@lg:self-start",
211
- center: "@lg:self-center",
212
- end: "@lg:self-end",
213
- };
214
- const FOCUSABLE =
215
- "input:not([disabled]):not([type=hidden]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), [tabindex]:not([tabindex='-1'])";
216
-
217
- function defaultKey(item: unknown, index: number): Key {
218
- if (typeof item === "object" && item !== null && "id" in item) {
219
- const id = (item as { id: unknown }).id;
220
- if (typeof id === "string" || typeof id === "number") return id;
221
- }
222
- return index;
223
- }
224
-
225
- type PendingFocus = { kind: "added" } | { kind: "removed"; index: number };
226
-
227
- /**
228
- * An editable list of lines — journal entry lines, lease components, invoice
229
- * positions, budget rows: column headers, a row of fields per item, a remove button
230
- * per row, a dashed "add" button under them, and an optional totals row.
231
- *
232
- * Presentation only: the rows are the caller's `items` and the fields are the
233
- * caller's, rendered per column. So it works over plain state —
234
- *
235
- * ```tsx
236
- * <LineItems items={lines} columns={cols} onAdd={() => setLines([...lines, blank()])}
237
- * onRemove={(i) => setLines(lines.filter((_, j) => j !== i))} minItems={2} />
238
- * ```
239
- *
240
- * — and over react-hook-form's `useFieldArray` alike (`items={fields}`, `onAdd={() =>
241
- * append(blank())}`, `onRemove={remove}`), for which `@eifi1/ui-kit/rhf` has
242
- * `RhfLineItems`.
243
- *
244
- * On a wide pane the rows are a grid under the headers; on a narrow one (a container
245
- * query, so a dialog stacks where it is cramped) each row stacks its fields, each
246
- * under a small copy of its header. The headers are `aria-hidden`: every row is a
247
- * named group and every field is named by `render`'s `label` ("Debit, row 2"), which
248
- * is what a screen reader needs — a header row it would read once, out of context.
249
- *
250
- * Keyboard: after Add, focus lands in the new row's first field; after a remove, on
251
- * the row that took its place (else the add button). Ctrl/⌘+Enter in any row adds a
252
- * row.
253
- */
254
- export function LineItems<T>({
255
- items,
256
- columns,
257
- getKey = defaultKey,
258
- onAdd,
259
- onRemove,
260
- minItems = 0,
261
- maxItems,
262
- confirmRemove,
263
- addLabel,
264
- rowLabel,
265
- totals,
266
- totalsLabel,
267
- empty,
268
- error,
269
- summary,
270
- fieldLabels = "aria",
271
- narrowColumns = 1,
272
- removePlacement = "row",
273
- removeAlign: removeAlignProp,
274
- disabled = false,
275
- rowProps,
276
- labels: labelsProp,
277
- className,
278
- style,
279
- ...rest
280
- }: LineItemsProps<T>) {
281
- const labels = useKitLabels("lineItems", DEFAULT_LINE_ITEMS_LABELS, labelsProp);
282
- const rowRefs = useRef<Array<HTMLDivElement | null>>([]);
283
- const addRef = useRef<HTMLButtonElement>(null);
284
- const pendingFocus = useRef<PendingFocus | null>(null);
285
- const [confirmingAt, setConfirming] = useState<number | null>(null);
286
- // A confirm waiting on a row that has since gone is void.
287
- const confirming = confirmingAt !== null && confirmingAt < items.length ? confirmingAt : null;
288
-
289
- const tracks = [...columns.map((c) => c.width ?? "minmax(0,1fr)"), ...(onRemove ? [REMOVE_TRACK] : [])];
290
- const gridStyle = { "--line-items-cols": tracks.join(" ") } as CSSProperties;
291
- const canAdd = Boolean(onAdd) && !disabled && (maxItems === undefined || items.length < maxItems);
292
- const canRemove = Boolean(onRemove) && !disabled && items.length > minItems;
293
- const hasError = hasContent(error);
294
-
295
- // Focus after the list has re-rendered with the new rows — a layout effect, so the
296
- // caret is where it belongs before paint.
297
- useLayoutEffect(() => {
298
- const pending = pendingFocus.current;
299
- if (!pending) return;
300
- pendingFocus.current = null;
301
- if (pending.kind === "added") {
302
- const row = rowRefs.current[items.length - 1];
303
- row?.querySelector<HTMLElement>(FOCUSABLE)?.focus();
304
- return;
305
- }
306
- const row = rowRefs.current[Math.min(pending.index, items.length - 1)];
307
- const target =
308
- row?.querySelector<HTMLElement>("[data-line-items-remove]:not([disabled])") ??
309
- row?.querySelector<HTMLElement>(FOCUSABLE) ??
310
- addRef.current;
311
- target?.focus();
312
- }, [items.length]);
313
-
314
- const add = useCallback(() => {
315
- if (!canAdd || !onAdd) return;
316
- pendingFocus.current = { kind: "added" };
317
- onAdd();
318
- }, [canAdd, onAdd]);
319
-
320
- const removeAt = async (index: number) => {
321
- if (!canRemove || !onRemove) return;
322
- if (confirmRemove === true && confirming !== index) {
323
- setConfirming(index);
324
- return;
325
- }
326
- if (typeof confirmRemove === "function") {
327
- const ok = await confirmRemove(items[index], index);
328
- if (!ok) return;
329
- }
330
- setConfirming(null);
331
- pendingFocus.current = { kind: "removed", index };
332
- onRemove(index);
333
- };
334
-
335
- const onRowKeyDown = (e: KeyboardEvent<HTMLDivElement>) => {
336
- if (e.key === "Enter" && (e.ctrlKey || e.metaKey) && canAdd) {
337
- e.preventDefault();
338
- add();
339
- }
340
- };
341
-
342
- const columnName = (column: LineItemsColumn<T>) =>
343
- column.label ?? (typeof column.header === "string" ? column.header : column.key);
344
- const floats = (column: LineItemsColumn<T>) => (column.fieldLabels ?? fieldLabels) === "floating";
345
- // A header row only for the columns that still need one: with every field floating
346
- // its own label, a row of headers would say each name twice.
347
- const showHeader = columns.some((c) => !floats(c));
348
- const pairs = narrowColumns === 2;
349
- const removeAlign = removeAlignProp ?? (columns.some(floats) ? "center" : "start");
350
- const inline = removePlacement === "inline" && Boolean(onRemove) && columns.length > 0;
351
- const lastColumn = columns[columns.length - 1];
352
-
353
- const headerCell = (column: LineItemsColumn<T>) => (
354
- <span
355
- key={column.key}
356
- className={cn("min-w-0 truncate text-xs font-medium text-muted", column.align === "end" && "text-end")}
357
- >
358
- {floats(column) ? null : column.header}
359
- </span>
360
- );
361
-
362
- const removeCell = (index: number, row: number, isConfirming: boolean) => (
363
- <div
364
- data-line-items-remove-cell=""
365
- className={cn(
366
- "flex justify-end @lg:justify-center",
367
- REMOVE_ALIGN[removeAlign],
368
- // Paired, the remove button keeps a row of its own at the card's end rather
369
- // than squeezing in beside the last field — unless asked to go `inline`.
370
- inline ? "shrink-0" : pairs && "@2xs:col-span-2 @lg:col-span-1",
371
- )}
372
- >
373
- <IconButton
374
- type="button"
375
- data-line-items-remove=""
376
- variant={isConfirming ? "danger" : "ghost"}
377
- tone={isConfirming ? undefined : "danger"}
378
- label={isConfirming ? labels.confirmRemove(row) : labels.remove(row)}
379
- // The icon alone at every text size (docs/text-size-harmonization.md §10.8): the
380
- // row's one control, in a grid column sized for an icon, whose name becomes a
381
- // sentence while it waits ("Remove row 3? Press again to confirm") — as text at
382
- // Large it would push the row's fields aside and change width between the two
383
- // presses. The name stays the accessible name; the red fill says "confirm".
384
- labelVisible={false}
385
- disabled={!canRemove}
386
- onClick={() => void removeAt(index)}
387
- onBlur={() => {
388
- if (isConfirming) setConfirming(null);
389
- }}
390
- onKeyDown={(e) => {
391
- if (e.key === "Escape" && isConfirming) {
392
- e.stopPropagation();
393
- setConfirming(null);
394
- }
395
- }}
396
- >
397
- <Trash2 />
398
- </IconButton>
399
- </div>
400
- );
401
-
402
- const showTotals = totals !== undefined;
403
- const summaryTone = summary?.tone ?? "neutral";
404
- const summaryHasValue = hasContent(summary?.value);
405
- const labelColumn = showTotals ? columns.find((c) => !hasContent(totals[c.key]))?.key : undefined;
406
-
407
- return (
408
- <div
409
- data-slot="line-items"
410
- {...rest}
411
- style={{ ...gridStyle, ...style }}
412
- className={cn("@container space-y-2", className)}
413
- >
414
- {showHeader && (
415
- <div aria-hidden className="hidden gap-2 @lg:grid @lg:grid-cols-[var(--line-items-cols)]">
416
- {columns.map(headerCell)}
417
- {onRemove && <span />}
418
- </div>
419
- )}
420
-
421
- {items.length === 0 && hasContent(empty) && (
422
- <div className="rounded-md border border-dashed border-subtle px-3 py-4 text-center text-sm text-muted">
423
- {empty}
424
- </div>
425
- )}
426
-
427
- {items.map((item, index) => {
428
- const row = index + 1;
429
- const isConfirming = confirming === index;
430
- const extra = rowProps?.(item, index);
431
- return (
432
- // The row's Ctrl/⌘+Enter is a shortcut for the add button, which is itself
433
- // reachable by Tab; the group only listens for it bubbling from its fields.
434
- // eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions
435
- <div
436
- {...extra}
437
- key={getKey(item, index)}
438
- ref={(el) => {
439
- rowRefs.current[index] = el;
440
- }}
441
- role="group"
442
- aria-label={rowLabel ? rowLabel(index, item) : labels.row(row)}
443
- data-line-items-row=""
444
- onKeyDown={(e) => {
445
- if (extra?.onKeyDown) {
446
- extra.onKeyDown(e);
447
- if (e.defaultPrevented) return;
448
- }
449
- onRowKeyDown(e);
450
- }}
451
- className={cn(
452
- "grid grid-cols-1 gap-2 @lg:grid-cols-[var(--line-items-cols)] @lg:items-start",
453
- // Two short fields to a row of the card — from 18rem, where two fields
454
- // still fit a figure each; on anything narrower they stack after all.
455
- pairs && "@2xs:grid-cols-2",
456
- // Stacked, each row is a card of its own so the rows stay apart.
457
- "@max-lg:rounded-md @max-lg:border @max-lg:border-subtle @max-lg:p-3",
458
- extra?.className,
459
- )}
460
- >
461
- {columns.map((column) => {
462
- const floating = floats(column);
463
- const isLast = inline && column === lastColumn;
464
- const span = pairs && column.narrowSpan === 2 && "@2xs:col-span-2 @lg:col-span-1";
465
- const cell = (
466
- <div
467
- key={column.key}
468
- className={cn(
469
- "min-w-0 space-y-1 @lg:space-y-0",
470
- // The wide grid places every cell in its own track again.
471
- isLast ? "flex-1" : span,
472
- )}
473
- >
474
- {!floating && (
475
- <span aria-hidden className="block text-xs font-medium text-muted @lg:hidden">
476
- {column.header}
477
- </span>
478
- )}
479
- {column.render({
480
- item,
481
- index,
482
- label: labels.cell(columnName(column), row),
483
- fieldLabel: floating ? columnName(column) : undefined,
484
- })}
485
- </div>
486
- );
487
- if (!isLast) return cell;
488
- // Inline, the last field and the remove button share one cell of the
489
- // card; on the wide grid the wrapper dissolves (`contents`) and each is a
490
- // track of its own again. Level with the field's control: its foot under
491
- // a header copy, its middle when it floats its own label.
492
- return (
493
- <div
494
- key={column.key}
495
- data-line-items-inline=""
496
- className={cn("flex min-w-0 gap-2 @lg:contents", floating ? "items-center" : "items-end", span)}
497
- >
498
- {cell}
499
- {removeCell(index, row, isConfirming)}
500
- </div>
501
- );
502
- })}
503
- {onRemove && !inline && removeCell(index, row, isConfirming)}
504
- </div>
505
- );
506
- })}
507
-
508
- {showTotals && (
509
- <div
510
- role="group"
511
- aria-label={typeof totalsLabel === "string" ? totalsLabel : labels.totals}
512
- data-line-items-totals=""
513
- className="grid grid-cols-1 gap-2 border-t border-subtle pt-2 text-sm font-semibold tabular-nums text-primary @lg:grid-cols-[var(--line-items-cols)]"
514
- >
515
- {columns.map((column) => {
516
- const value = totals[column.key];
517
- if (column.key === labelColumn) {
518
- return (
519
- <span key={column.key} className="min-w-0">
520
- {totalsLabel ?? labels.totals}
521
- </span>
522
- );
523
- }
524
- return (
525
- <span
526
- key={column.key}
527
- className={cn(
528
- "min-w-0",
529
- column.align === "end" && "@lg:text-end",
530
- // Stacked, a column with no total takes no line.
531
- !hasContent(value) && "@max-lg:hidden",
532
- )}
533
- >
534
- {hasContent(value) && (
535
- <span className="flex justify-between gap-2 @lg:block">
536
- <span aria-hidden className="font-normal text-muted @lg:hidden">
537
- {column.header}
538
- </span>
539
- {value}
540
- </span>
541
- )}
542
- </span>
543
- );
544
- })}
545
- {onRemove && <span className="@max-lg:hidden" />}
546
- </div>
547
- )}
548
-
549
- {summary && (
550
- <div data-line-items-summary="" className="flex flex-wrap items-center gap-x-3 gap-y-1 text-sm text-primary">
551
- {/* With no value the line is a state of its own, and the label takes the
552
- tone — the only place left to carry it. */}
553
- <span
554
- data-tone={summaryHasValue ? undefined : summaryTone}
555
- className={cn("min-w-0", !summaryHasValue && SUMMARY_TONE[summaryTone])}
556
- >
557
- {summary.label}
558
- </span>
559
- {summaryHasValue && (
560
- <span data-tone={summaryTone} className={cn("font-semibold tabular-nums", SUMMARY_TONE[summaryTone])}>
561
- {summary.value}
562
- </span>
563
- )}
564
- {hasContent(summary.status) && (
565
- <span data-line-items-summary-status="" className="inline-flex">
566
- {summary.status}
567
- </span>
568
- )}
569
- {summary.action && (
570
- <Button
571
- type="button"
572
- variant={summary.action.variant === "link" ? "link" : "secondary"}
573
- tone={summary.action.variant === "link" ? "muted" : undefined}
574
- size="sm"
575
- className="ms-auto"
576
- disabled={disabled || summary.action.disabled}
577
- onClick={summary.action.onClick}
578
- >
579
- {summary.action.label}
580
- </Button>
581
- )}
582
- </div>
583
- )}
584
-
585
- {hasError && <p className="text-caption leading-tight text-danger">{error}</p>}
586
-
587
- {onAdd && (
588
- <Button
589
- ref={addRef}
590
- type="button"
591
- variant="secondary"
592
- className="w-full border-dashed"
593
- disabled={!canAdd}
594
- onClick={add}
595
- >
596
- <Plus aria-hidden className="size-4" />
597
- {addLabel ?? labels.add}
598
- </Button>
599
- )}
600
- </div>
601
- );
602
- }
@@ -1,12 +0,0 @@
1
- // The English words of ./list, in a module with no component code: the English catalogue
2
- // (src/i18n/defaults.ts) imports them without the component, so `en` loads as one chunk
3
- // like the other languages (0.34, KS U8). ./list re-exports them.
4
-
5
- import type { ListLabels } from "./list";
6
-
7
- export const DEFAULT_LIST_LABELS: ListLabels = {
8
- unread: "Unread",
9
- opensInNewTab: "opens in a new tab",
10
- showAll: (count) => `Show all (${count})`,
11
- showFewer: "Show fewer",
12
- };