@eifi1/ui-kit 0.53.0 → 0.55.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 (902) hide show
  1. package/README.md +96 -82
  2. package/dist/account/delete-account-setting.d.ts +3 -2
  3. package/dist/account/delete-account-setting.js.map +1 -1
  4. package/dist/admin/plan-change.js +2 -2
  5. package/dist/admin/plan-change.js.map +1 -1
  6. package/dist/admin/user-roster.d.ts +6 -0
  7. package/dist/admin/user-roster.js +4 -0
  8. package/dist/admin/user-roster.js.map +1 -1
  9. package/dist/auth/auth-errors.d.ts +36 -0
  10. package/dist/auth/auth-errors.js +20 -0
  11. package/dist/auth/auth-errors.js.map +1 -1
  12. package/dist/billing/billing-labels.d.ts +26 -0
  13. package/dist/billing/billing-labels.js +9 -0
  14. package/dist/billing/billing-labels.js.map +1 -1
  15. package/dist/billing/subscription-standing.d.ts +61 -0
  16. package/dist/billing/subscription-standing.js +51 -0
  17. package/dist/billing/subscription-standing.js.map +1 -0
  18. package/dist/billing/usage-meter.d.ts +52 -0
  19. package/dist/billing/usage-meter.js +52 -0
  20. package/dist/billing/usage-meter.js.map +1 -0
  21. package/dist/chart.d.ts +1 -0
  22. package/dist/chart.js +4 -0
  23. package/dist/chart.js.map +1 -1
  24. package/dist/components/alert-banner.js +2 -3
  25. package/dist/components/alert-banner.js.map +1 -1
  26. package/dist/components/amount-input.d.ts +2 -1
  27. package/dist/components/amount-input.js +3 -15
  28. package/dist/components/amount-input.js.map +1 -1
  29. package/dist/components/autocomplete.js +2 -2
  30. package/dist/components/autocomplete.js.map +1 -1
  31. package/dist/components/bulk-action-bar.js +2 -1
  32. package/dist/components/bulk-action-bar.js.map +1 -1
  33. package/dist/components/button.d.ts +35 -1
  34. package/dist/components/button.js +5 -9
  35. package/dist/components/button.js.map +1 -1
  36. package/dist/components/calendar-heatmap.js +6 -4
  37. package/dist/components/calendar-heatmap.js.map +1 -1
  38. package/dist/components/camera-button.d.ts +89 -0
  39. package/dist/components/camera-button.js +122 -0
  40. package/dist/components/camera-button.js.map +1 -0
  41. package/dist/components/camera-capture.d.ts +66 -0
  42. package/dist/components/camera-capture.js +190 -0
  43. package/dist/components/camera-capture.js.map +1 -0
  44. package/dist/components/camera-labels.d.ts +20 -0
  45. package/dist/components/camera-labels.js +15 -0
  46. package/dist/components/camera-labels.js.map +1 -0
  47. package/dist/components/chart-edge.d.ts +9 -0
  48. package/dist/components/chart-edge.js +14 -3
  49. package/dist/components/chart-edge.js.map +1 -1
  50. package/dist/components/chart-zoom-core.js +34 -29
  51. package/dist/components/chart-zoom-core.js.map +1 -1
  52. package/dist/components/checkbox-group.js +1 -1
  53. package/dist/components/checkbox-group.js.map +1 -1
  54. package/dist/components/combobox-core.js +3 -2
  55. package/dist/components/combobox-core.js.map +1 -1
  56. package/dist/components/combobox.js +2 -2
  57. package/dist/components/combobox.js.map +1 -1
  58. package/dist/components/consent-again-notice-labels.d.ts +25 -0
  59. package/dist/components/consent-again-notice-labels.js +15 -0
  60. package/dist/components/consent-again-notice-labels.js.map +1 -0
  61. package/dist/components/consent-again-notice.d.ts +85 -0
  62. package/dist/components/consent-again-notice.js +94 -0
  63. package/dist/components/consent-again-notice.js.map +1 -0
  64. package/dist/components/country-select.js +2 -7
  65. package/dist/components/country-select.js.map +1 -1
  66. package/dist/components/currency-option-list.d.ts +2 -1
  67. package/dist/components/currency-option-list.js +10 -3
  68. package/dist/components/currency-option-list.js.map +1 -1
  69. package/dist/components/currency-select.d.ts +3 -1
  70. package/dist/components/currency-select.js +2 -2
  71. package/dist/components/currency-select.js.map +1 -1
  72. package/dist/components/danger-confirm.d.ts +22 -1
  73. package/dist/components/danger-confirm.js +52 -30
  74. package/dist/components/danger-confirm.js.map +1 -1
  75. package/dist/components/data-table-column-settings.js +2 -2
  76. package/dist/components/data-table-column-settings.js.map +1 -1
  77. package/dist/components/data-table-filter-popover.d.ts +2 -1
  78. package/dist/components/data-table-filter-popover.js +3 -2
  79. package/dist/components/data-table-filter-popover.js.map +1 -1
  80. package/dist/components/data-table-filters.d.ts +33 -3
  81. package/dist/components/data-table-filters.js +6 -4
  82. package/dist/components/data-table-filters.js.map +1 -1
  83. package/dist/components/data-table-fit.js.map +1 -1
  84. package/dist/components/data-table-virtual.js +13 -3
  85. package/dist/components/data-table-virtual.js.map +1 -1
  86. package/dist/components/date-field.js +2 -2
  87. package/dist/components/date-field.js.map +1 -1
  88. package/dist/components/date-picker.js +2 -2
  89. package/dist/components/date-picker.js.map +1 -1
  90. package/dist/components/date-range-picker.js +2 -6
  91. package/dist/components/date-range-picker.js.map +1 -1
  92. package/dist/components/dialog-frame.d.ts +5 -1
  93. package/dist/components/dialog-frame.js +6 -2
  94. package/dist/components/dialog-frame.js.map +1 -1
  95. package/dist/components/dropdown.js +7 -3
  96. package/dist/components/dropdown.js.map +1 -1
  97. package/dist/components/entity-combobox.js +2 -2
  98. package/dist/components/entity-combobox.js.map +1 -1
  99. package/dist/components/field-parts.d.ts +108 -6
  100. package/dist/components/field-parts.js +59 -6
  101. package/dist/components/field-parts.js.map +1 -1
  102. package/dist/components/field-suggestion-labels.d.ts +2 -0
  103. package/dist/components/field-suggestion-labels.js +10 -0
  104. package/dist/components/field-suggestion-labels.js.map +1 -0
  105. package/dist/components/field.js +1 -1
  106. package/dist/components/field.js.map +1 -1
  107. package/dist/components/file-button.d.ts +1 -1
  108. package/dist/components/file-button.js.map +1 -1
  109. package/dist/components/floating-panel.d.ts +7 -6
  110. package/dist/components/floating-panel.js +3 -17
  111. package/dist/components/floating-panel.js.map +1 -1
  112. package/dist/components/form-actions.d.ts +3 -2
  113. package/dist/components/form-actions.js.map +1 -1
  114. package/dist/components/hover-menu.js +3 -2
  115. package/dist/components/hover-menu.js.map +1 -1
  116. package/dist/components/icon-button.d.ts +23 -5
  117. package/dist/components/icon-button.js +6 -8
  118. package/dist/components/icon-button.js.map +1 -1
  119. package/dist/components/inline-confirm.js +2 -1
  120. package/dist/components/inline-confirm.js.map +1 -1
  121. package/dist/components/inline-entity-combobox.js +2 -2
  122. package/dist/components/inline-entity-combobox.js.map +1 -1
  123. package/dist/components/input.js +2 -2
  124. package/dist/components/input.js.map +1 -1
  125. package/dist/components/jump-calendar.js +3 -3
  126. package/dist/components/jump-calendar.js.map +1 -1
  127. package/dist/components/legal.d.ts +13 -1
  128. package/dist/components/legal.js +12 -0
  129. package/dist/components/legal.js.map +1 -1
  130. package/dist/components/legended-series-chart.d.ts +80 -0
  131. package/dist/components/legended-series-chart.js +70 -0
  132. package/dist/components/legended-series-chart.js.map +1 -0
  133. package/dist/components/lightbox.js +2 -1
  134. package/dist/components/lightbox.js.map +1 -1
  135. package/dist/components/mini-calendar.js +16 -7
  136. package/dist/components/mini-calendar.js.map +1 -1
  137. package/dist/components/modal.d.ts +48 -0
  138. package/dist/components/modal.js +26 -6
  139. package/dist/components/modal.js.map +1 -1
  140. package/dist/components/month-picker.d.ts +1 -1
  141. package/dist/components/month-picker.js +6 -6
  142. package/dist/components/month-picker.js.map +1 -1
  143. package/dist/components/multi-entity-combobox.js +2 -2
  144. package/dist/components/multi-entity-combobox.js.map +1 -1
  145. package/dist/components/multi-select.js +2 -6
  146. package/dist/components/multi-select.js.map +1 -1
  147. package/dist/components/number-input.js +2 -2
  148. package/dist/components/number-input.js.map +1 -1
  149. package/dist/components/page-header-layout.d.ts +18 -0
  150. package/dist/components/page-header-layout.js +23 -0
  151. package/dist/components/page-header-layout.js.map +1 -0
  152. package/dist/components/page-header-skeleton.d.ts +41 -0
  153. package/dist/components/page-header-skeleton.js +52 -0
  154. package/dist/components/page-header-skeleton.js.map +1 -0
  155. package/dist/components/page-header.js +4 -17
  156. package/dist/components/page-header.js.map +1 -1
  157. package/dist/components/popover.js +7 -2
  158. package/dist/components/popover.js.map +1 -1
  159. package/dist/components/release-notes-labels.d.ts +16 -0
  160. package/dist/components/release-notes-labels.js +18 -0
  161. package/dist/components/release-notes-labels.js.map +1 -0
  162. package/dist/components/release-notes.d.ts +65 -0
  163. package/dist/components/release-notes.js +65 -0
  164. package/dist/components/release-notes.js.map +1 -0
  165. package/dist/components/select.js +2 -2
  166. package/dist/components/select.js.map +1 -1
  167. package/dist/components/series-chart-labels.d.ts +9 -0
  168. package/dist/components/series-chart-labels.js +3 -1
  169. package/dist/components/series-chart-labels.js.map +1 -1
  170. package/dist/components/series-chart.d.ts +5 -0
  171. package/dist/components/series-chart.js +89 -36
  172. package/dist/components/series-chart.js.map +1 -1
  173. package/dist/components/stat-tile.d.ts +21 -2
  174. package/dist/components/stat-tile.js +4 -2
  175. package/dist/components/stat-tile.js.map +1 -1
  176. package/dist/components/toggle-group.js +3 -2
  177. package/dist/components/toggle-group.js.map +1 -1
  178. package/dist/components/treemap-layout.js.map +1 -1
  179. package/dist/components/treemap.d.ts +17 -15
  180. package/dist/components/treemap.js +167 -85
  181. package/dist/components/treemap.js.map +1 -1
  182. package/dist/currencies.d.ts +16 -2
  183. package/dist/currencies.js +2 -1
  184. package/dist/currencies.js.map +1 -1
  185. package/dist/eslint/index.js +1 -1
  186. package/dist/eslint/role-utilities.d.ts +2 -2
  187. package/dist/eslint/role-utilities.js.map +1 -1
  188. package/dist/feedback/feedback-context-labels.js +2 -1
  189. package/dist/feedback/feedback-context-labels.js.map +1 -1
  190. package/dist/feedback/feedback-context.d.ts +19 -3
  191. package/dist/feedback/feedback-context.js +12 -1
  192. package/dist/feedback/feedback-context.js.map +1 -1
  193. package/dist/feedback/feedback-diagnostics.d.ts +17 -0
  194. package/dist/feedback/feedback-diagnostics.js +27 -0
  195. package/dist/feedback/feedback-diagnostics.js.map +1 -0
  196. package/dist/feedback/feedback-dialog.d.ts +10 -0
  197. package/dist/feedback/feedback-dialog.js +6 -4
  198. package/dist/feedback/feedback-dialog.js.map +1 -1
  199. package/dist/feedback/feedback-inbox-page.d.ts +260 -0
  200. package/dist/feedback/feedback-inbox-page.js +207 -0
  201. package/dist/feedback/feedback-inbox-page.js.map +1 -0
  202. package/dist/feedback/feedback-record.d.ts +5 -0
  203. package/dist/feedback/feedback-record.js.map +1 -1
  204. package/dist/feedback/feedback-row-detail-labels.js +1 -0
  205. package/dist/feedback/feedback-row-detail-labels.js.map +1 -1
  206. package/dist/feedback/feedback-row-detail.d.ts +3 -0
  207. package/dist/feedback/feedback-row-detail.js +3 -0
  208. package/dist/feedback/feedback-row-detail.js.map +1 -1
  209. package/dist/feedback/feedback-submit-dialog.d.ts +5 -1
  210. package/dist/feedback/feedback-submit-dialog.js +15 -3
  211. package/dist/feedback/feedback-submit-dialog.js.map +1 -1
  212. package/dist/feedback/feedback-submit.d.ts +30 -2
  213. package/dist/feedback/feedback-submit.js +5 -2
  214. package/dist/feedback/feedback-submit.js.map +1 -1
  215. package/dist/feedback/feedback-vocabulary.js +2 -2
  216. package/dist/feedback/feedback-vocabulary.js.map +1 -1
  217. package/dist/feedback.d.ts +1 -0
  218. package/dist/feedback.js +6 -0
  219. package/dist/feedback.js.map +1 -1
  220. package/dist/hooks/use-debounce.d.ts +32 -5
  221. package/dist/hooks/use-debounce.js +6 -5
  222. package/dist/hooks/use-debounce.js.map +1 -1
  223. package/dist/hooks/use-file-picker.d.ts +3 -1
  224. package/dist/hooks/use-file-picker.js.map +1 -1
  225. package/dist/hooks/use-focus-trap.d.ts +19 -3
  226. package/dist/hooks/use-focus-trap.js +15 -5
  227. package/dist/hooks/use-focus-trap.js.map +1 -1
  228. package/dist/hooks/use-has-camera.d.ts +36 -0
  229. package/dist/hooks/use-has-camera.js +53 -0
  230. package/dist/hooks/use-has-camera.js.map +1 -0
  231. package/dist/hooks/use-hotkey.js +2 -1
  232. package/dist/hooks/use-hotkey.js.map +1 -1
  233. package/dist/hooks/use-overlay-history.d.ts +6 -1
  234. package/dist/hooks/use-overlay-history.js +10 -2
  235. package/dist/hooks/use-overlay-history.js.map +1 -1
  236. package/dist/i18n/defaults.js +11 -1
  237. package/dist/i18n/defaults.js.map +1 -1
  238. package/dist/i18n/german.js +78 -4
  239. package/dist/i18n/german.js.map +1 -1
  240. package/dist/i18n/kit-labels.d.ts +20 -0
  241. package/dist/i18n/kit-labels.js.map +1 -1
  242. package/dist/i18n/locales/en.js +95 -5
  243. package/dist/i18n/locales/en.js.map +3 -3
  244. package/dist/i18n/locales/es.js +74 -4
  245. package/dist/i18n/locales/es.js.map +1 -1
  246. package/dist/i18n/locales/fr.js +75 -3
  247. package/dist/i18n/locales/fr.js.map +1 -1
  248. package/dist/i18n/locales/hu.js +77 -4
  249. package/dist/i18n/locales/hu.js.map +1 -1
  250. package/dist/i18n/locales/it.js +77 -4
  251. package/dist/i18n/locales/it.js.map +1 -1
  252. package/dist/i18n/locales/zh.js +74 -4
  253. package/dist/i18n/locales/zh.js.map +1 -1
  254. package/dist/i18n/review.js +22 -1
  255. package/dist/i18n/review.js.map +1 -1
  256. package/dist/index.d.ts +27 -8
  257. package/dist/index.js +41 -2
  258. package/dist/index.js.map +1 -1
  259. package/dist/landing/landing-labels.d.ts +8 -0
  260. package/dist/landing/landing-labels.js +2 -1
  261. package/dist/landing/landing-labels.js.map +1 -1
  262. package/dist/lib/changelog.d.ts +130 -0
  263. package/dist/lib/changelog.js +137 -0
  264. package/dist/lib/changelog.js.map +1 -0
  265. package/dist/lib/clipboard-minus.js +2 -2
  266. package/dist/lib/clipboard-minus.js.map +1 -1
  267. package/dist/lib/dates.d.ts +36 -4
  268. package/dist/lib/dates.js +49 -13
  269. package/dist/lib/dates.js.map +1 -1
  270. package/dist/lib/editable-content.d.ts +33 -0
  271. package/dist/lib/editable-content.js +15 -0
  272. package/dist/lib/editable-content.js.map +1 -0
  273. package/dist/lib/focus-left.d.ts +47 -1
  274. package/dist/lib/focus-left.js +11 -2
  275. package/dist/lib/focus-left.js.map +1 -1
  276. package/dist/lib/format.d.ts +37 -2
  277. package/dist/lib/format.js +25 -1
  278. package/dist/lib/format.js.map +1 -1
  279. package/dist/lib/intl-cache.d.ts +4 -2
  280. package/dist/lib/intl-cache.js.map +1 -1
  281. package/dist/lib/server-wake.d.ts +49 -9
  282. package/dist/lib/server-wake.js +25 -14
  283. package/dist/lib/server-wake.js.map +1 -1
  284. package/dist/lib/session-refresh.d.ts +53 -0
  285. package/dist/lib/session-refresh.js +27 -1
  286. package/dist/lib/session-refresh.js.map +1 -1
  287. package/dist/lib/translation-review.d.ts +26 -0
  288. package/dist/lib/translation-review.js +14 -0
  289. package/dist/lib/translation-review.js.map +1 -1
  290. package/dist/rhf/fields.js +3 -3
  291. package/dist/rhf/fields.js.map +1 -1
  292. package/dist/shell/app-shell.d.ts +25 -1
  293. package/dist/shell/app-shell.js +3 -1
  294. package/dist/shell/app-shell.js.map +1 -1
  295. package/dist/shell/dev-menu.d.ts +3 -0
  296. package/dist/shell/dev-menu.js +4 -2
  297. package/dist/shell/dev-menu.js.map +1 -1
  298. package/dist/shell/held-changes-banner-labels.d.ts +23 -0
  299. package/dist/shell/held-changes-banner-labels.js +14 -0
  300. package/dist/shell/held-changes-banner-labels.js.map +1 -0
  301. package/dist/shell/held-changes-banner.d.ts +75 -0
  302. package/dist/shell/held-changes-banner.js +106 -0
  303. package/dist/shell/held-changes-banner.js.map +1 -0
  304. package/dist/shell/sync-status-indicator.d.ts +27 -12
  305. package/dist/shell/sync-status-indicator.js +13 -4
  306. package/dist/shell/sync-status-indicator.js.map +1 -1
  307. package/dist/shell/top-bar-parts-labels.d.ts +5 -0
  308. package/dist/shell/top-bar-parts-labels.js +3 -1
  309. package/dist/shell/top-bar-parts-labels.js.map +1 -1
  310. package/dist/shell.d.ts +2 -0
  311. package/dist/shell.js +3 -0
  312. package/dist/shell.js.map +1 -1
  313. package/dist/sync/engine.d.ts +11 -2
  314. package/dist/sync/engine.js +13 -5
  315. package/dist/sync/engine.js.map +1 -1
  316. package/dist/sync/hooks.d.ts +3 -2
  317. package/dist/sync/hooks.js +4 -2
  318. package/dist/sync/hooks.js.map +1 -1
  319. package/dist/testing/css-variables.generated.d.ts +2 -2
  320. package/dist/testing/css-variables.generated.js +1 -1
  321. package/dist/testing/css-variables.generated.js.map +1 -1
  322. package/dist/theme/chart-palette.d.ts +18 -0
  323. package/dist/theme/chart-palette.js +17 -1
  324. package/dist/theme/chart-palette.js.map +1 -1
  325. package/dist/theme/contrast-tokens.d.ts +3 -3
  326. package/dist/theme/contrast-tokens.js.map +1 -1
  327. package/dist/theme/contrast.d.ts +4 -4
  328. package/dist/theme/contrast.js.map +1 -1
  329. package/dist/tour/tour-overlay.js +2 -1
  330. package/dist/tour/tour-overlay.js.map +1 -1
  331. package/package.json +5 -9
  332. package/tokens.css +19 -54
  333. package/src/account/account-parts.ts +0 -47
  334. package/src/account/account-settings-labels.ts +0 -240
  335. package/src/account/account-settings.tsx +0 -698
  336. package/src/account/data-export-setting-labels.ts +0 -20
  337. package/src/account/data-export-setting.tsx +0 -200
  338. package/src/account/delete-account-setting-labels.ts +0 -33
  339. package/src/account/delete-account-setting.tsx +0 -341
  340. package/src/account/email-change-setting-labels.ts +0 -31
  341. package/src/account/email-change-setting.tsx +0 -443
  342. package/src/account/passkeys-setting.tsx +0 -445
  343. package/src/account/sessions-setting-labels.ts +0 -24
  344. package/src/account/sessions-setting.tsx +0 -283
  345. package/src/admin/admin-action-confirm-labels.ts +0 -19
  346. package/src/admin/admin-action-confirm.tsx +0 -509
  347. package/src/admin/admin-action-log-labels.ts +0 -83
  348. package/src/admin/admin-action-log.tsx +0 -464
  349. package/src/admin/admin-area-labels.ts +0 -114
  350. package/src/admin/admin-forbidden.tsx +0 -75
  351. package/src/admin/admin-overview.tsx +0 -258
  352. package/src/admin/admin-parts.ts +0 -68
  353. package/src/admin/admin-sections.tsx +0 -208
  354. package/src/admin/admin-tool-links.tsx +0 -90
  355. package/src/admin/invitations-panel-labels.ts +0 -31
  356. package/src/admin/invitations-panel.tsx +0 -516
  357. package/src/admin/mail-test-card-labels.ts +0 -19
  358. package/src/admin/mail-test-card.tsx +0 -189
  359. package/src/admin/plan-change-labels.ts +0 -5
  360. package/src/admin/plan-change.tsx +0 -474
  361. package/src/admin/reviewer-scope-editor-labels.ts +0 -16
  362. package/src/admin/reviewer-scope-editor.tsx +0 -224
  363. package/src/admin/role-select-labels.ts +0 -16
  364. package/src/admin/role-select.tsx +0 -282
  365. package/src/admin/transfer-ownership-dialog-labels.ts +0 -20
  366. package/src/admin/transfer-ownership-dialog.tsx +0 -162
  367. package/src/admin/user-roster-labels.ts +0 -17
  368. package/src/admin/user-roster.tsx +0 -559
  369. package/src/auth/accept-invitation-labels.ts +0 -21
  370. package/src/auth/accept-invitation.tsx +0 -210
  371. package/src/auth/auth-errors-labels.ts +0 -23
  372. package/src/auth/auth-errors.ts +0 -370
  373. package/src/auth/complete-name-dialog-labels.ts +0 -16
  374. package/src/auth/complete-name-dialog.tsx +0 -253
  375. package/src/auth/email-tag.ts +0 -75
  376. package/src/auth/forgot-password-form-labels.ts +0 -20
  377. package/src/auth/forgot-password-form.tsx +0 -221
  378. package/src/auth/form-rules.ts +0 -40
  379. package/src/auth/new-password-fields.tsx +0 -85
  380. package/src/auth/not-found-page-labels.ts +0 -12
  381. package/src/auth/not-found-page.tsx +0 -95
  382. package/src/auth/register-form-labels.ts +0 -31
  383. package/src/auth/register-form.tsx +0 -456
  384. package/src/auth/reset-password-form-labels.ts +0 -27
  385. package/src/auth/reset-password-form.tsx +0 -341
  386. package/src/auth/sign-in-form-labels.ts +0 -44
  387. package/src/auth/sign-in-form.tsx +0 -858
  388. package/src/auth/status-parts.tsx +0 -132
  389. package/src/auth/verify-email-labels.ts +0 -26
  390. package/src/auth/verify-email.tsx +0 -445
  391. package/src/billing/billing-banner.tsx +0 -258
  392. package/src/billing/billing-labels.ts +0 -381
  393. package/src/billing/billing-lock.ts +0 -108
  394. package/src/billing/billing-overview.ts +0 -157
  395. package/src/billing/billing-standing.ts +0 -80
  396. package/src/billing/cancel-request.ts +0 -97
  397. package/src/billing/cancel-subscription.tsx +0 -98
  398. package/src/billing/checkout-processing.ts +0 -394
  399. package/src/billing/checkout-return.ts +0 -90
  400. package/src/billing/pay-page.ts +0 -330
  401. package/src/billing/plan-card.tsx +0 -562
  402. package/src/billing/plan-change-labels.ts +0 -66
  403. package/src/billing/plan-limit-notice.tsx +0 -148
  404. package/src/billing/plan-limit-toast.tsx +0 -90
  405. package/src/billing/plan-limit.ts +0 -52
  406. package/src/billing/plan-price.ts +0 -98
  407. package/src/billing/plan-switch.tsx +0 -216
  408. package/src/billing/provider-page.ts +0 -84
  409. package/src/billing/subscription-actions.tsx +0 -247
  410. package/src/billing/subscription-status-chip.tsx +0 -95
  411. package/src/chart.ts +0 -103
  412. package/src/components/account-chips-labels.ts +0 -16
  413. package/src/components/account-chips.tsx +0 -474
  414. package/src/components/alert-banner.tsx +0 -670
  415. package/src/components/amount-input.tsx +0 -815
  416. package/src/components/appearance-labels.ts +0 -63
  417. package/src/components/authed-image-labels.ts +0 -11
  418. package/src/components/authed-image.tsx +0 -209
  419. package/src/components/autocomplete.tsx +0 -645
  420. package/src/components/breadcrumbs-labels.ts +0 -10
  421. package/src/components/breadcrumbs.tsx +0 -205
  422. package/src/components/bulk-action-bar-labels.ts +0 -11
  423. package/src/components/bulk-action-bar.tsx +0 -443
  424. package/src/components/button-group.tsx +0 -223
  425. package/src/components/button-look.ts +0 -256
  426. package/src/components/button.tsx +0 -339
  427. package/src/components/calculator.tsx +0 -341
  428. package/src/components/calendar-heatmap-labels.ts +0 -15
  429. package/src/components/calendar-heatmap.tsx +0 -594
  430. package/src/components/card.tsx +0 -377
  431. package/src/components/chart-edge.ts +0 -106
  432. package/src/components/chart-figure.tsx +0 -35
  433. package/src/components/chart-height.ts +0 -30
  434. package/src/components/chart-zoom-core.tsx +0 -627
  435. package/src/components/chart-zoom.tsx +0 -22
  436. package/src/components/chart.tsx +0 -554
  437. package/src/components/checkbox-group.tsx +0 -247
  438. package/src/components/checkbox.tsx +0 -346
  439. package/src/components/chip-input.tsx +0 -370
  440. package/src/components/chip-labels.ts +0 -13
  441. package/src/components/chip.tsx +0 -843
  442. package/src/components/choice-card.tsx +0 -544
  443. package/src/components/column-mapper-labels.ts +0 -38
  444. package/src/components/column-mapper.tsx +0 -655
  445. package/src/components/combobox-core.tsx +0 -1321
  446. package/src/components/combobox-suggestions.tsx +0 -131
  447. package/src/components/combobox.tsx +0 -716
  448. package/src/components/confirm-context.ts +0 -7
  449. package/src/components/confirm-dialog-labels.ts +0 -13
  450. package/src/components/confirm-dialog.tsx +0 -341
  451. package/src/components/copy-button-labels.ts +0 -13
  452. package/src/components/copy-button.tsx +0 -192
  453. package/src/components/country-select-labels.ts +0 -11
  454. package/src/components/country-select.tsx +0 -539
  455. package/src/components/currency-option-list.tsx +0 -180
  456. package/src/components/currency-select.tsx +0 -341
  457. package/src/components/danger-confirm-labels.ts +0 -20
  458. package/src/components/danger-confirm.tsx +0 -934
  459. package/src/components/data-table-cells.tsx +0 -118
  460. package/src/components/data-table-column-settings.tsx +0 -198
  461. package/src/components/data-table-filter-popover.tsx +0 -281
  462. package/src/components/data-table-filters.ts +0 -287
  463. package/src/components/data-table-fit.ts +0 -301
  464. package/src/components/data-table-groups.tsx +0 -288
  465. package/src/components/data-table-head.tsx +0 -280
  466. package/src/components/data-table-labels.ts +0 -198
  467. package/src/components/data-table-leading-row.tsx +0 -58
  468. package/src/components/data-table-mobile.tsx +0 -1117
  469. package/src/components/data-table-pagination.tsx +0 -202
  470. package/src/components/data-table-resize.ts +0 -188
  471. package/src/components/data-table-row-actions.tsx +0 -302
  472. package/src/components/data-table-row.tsx +0 -496
  473. package/src/components/data-table-selection.ts +0 -71
  474. package/src/components/data-table-shared.tsx +0 -287
  475. package/src/components/data-table-sort.ts +0 -163
  476. package/src/components/data-table-virtual.ts +0 -576
  477. package/src/components/data-table.tsx +0 -2598
  478. package/src/components/date-field.tsx +0 -684
  479. package/src/components/date-format-setting.tsx +0 -64
  480. package/src/components/date-picker.tsx +0 -404
  481. package/src/components/date-range-picker.tsx +0 -518
  482. package/src/components/description-list-labels.ts +0 -9
  483. package/src/components/description-list.tsx +0 -386
  484. package/src/components/dialog-frame-labels.ts +0 -7
  485. package/src/components/dialog-frame.tsx +0 -276
  486. package/src/components/disclosure.tsx +0 -476
  487. package/src/components/dropdown.tsx +0 -461
  488. package/src/components/empty-state.tsx +0 -136
  489. package/src/components/entity-combobox.tsx +0 -422
  490. package/src/components/error-boundary-labels.ts +0 -20
  491. package/src/components/error-boundary.tsx +0 -675
  492. package/src/components/facing-pair.ts +0 -93
  493. package/src/components/field-base-labels.ts +0 -20
  494. package/src/components/field-base.tsx +0 -656
  495. package/src/components/field-parts.tsx +0 -825
  496. package/src/components/field-strip.tsx +0 -129
  497. package/src/components/field.tsx +0 -206
  498. package/src/components/file-button.tsx +0 -295
  499. package/src/components/file-dropzone.tsx +0 -559
  500. package/src/components/floating-panel-labels.ts +0 -10
  501. package/src/components/floating-panel.tsx +0 -828
  502. package/src/components/focus-ring.ts +0 -16
  503. package/src/components/form-actions-labels.ts +0 -11
  504. package/src/components/form-actions.tsx +0 -578
  505. package/src/components/full-bleed-dialog.tsx +0 -294
  506. package/src/components/grouped-picker.tsx +0 -184
  507. package/src/components/help-popover.tsx +0 -117
  508. package/src/components/hover-menu.tsx +0 -343
  509. package/src/components/iban-input-labels.ts +0 -14
  510. package/src/components/iban-input.tsx +0 -236
  511. package/src/components/icon-button.tsx +0 -959
  512. package/src/components/icon-picker-labels.ts +0 -13
  513. package/src/components/icon-picker.tsx +0 -232
  514. package/src/components/image-grid-labels.ts +0 -11
  515. package/src/components/image-grid.tsx +0 -202
  516. package/src/components/inline-confirm.tsx +0 -116
  517. package/src/components/inline-edit-field-labels.ts +0 -11
  518. package/src/components/inline-edit-field.tsx +0 -552
  519. package/src/components/inline-entity-combobox.tsx +0 -849
  520. package/src/components/input.tsx +0 -394
  521. package/src/components/jump-calendar.tsx +0 -265
  522. package/src/components/language-select.tsx +0 -93
  523. package/src/components/legal-labels.ts +0 -105
  524. package/src/components/legal-page.tsx +0 -711
  525. package/src/components/legal.tsx +0 -668
  526. package/src/components/lightbox-labels.ts +0 -18
  527. package/src/components/lightbox.tsx +0 -399
  528. package/src/components/line-items-labels.ts +0 -14
  529. package/src/components/line-items.tsx +0 -602
  530. package/src/components/list-labels.ts +0 -12
  531. package/src/components/list.tsx +0 -870
  532. package/src/components/loading-state.tsx +0 -78
  533. package/src/components/measured-grid-labels.ts +0 -25
  534. package/src/components/measured-grid.tsx +0 -837
  535. package/src/components/menu-item.tsx +0 -241
  536. package/src/components/mini-calendar-labels.ts +0 -17
  537. package/src/components/mini-calendar.tsx +0 -789
  538. package/src/components/modal.tsx +0 -505
  539. package/src/components/money-draft.ts +0 -83
  540. package/src/components/money-field.tsx +0 -76
  541. package/src/components/month-grid.tsx +0 -229
  542. package/src/components/month-picker-labels.ts +0 -22
  543. package/src/components/month-picker.tsx +0 -1087
  544. package/src/components/multi-entity-combobox.tsx +0 -369
  545. package/src/components/multi-select.tsx +0 -376
  546. package/src/components/nav-pills.tsx +0 -198
  547. package/src/components/number-field.tsx +0 -327
  548. package/src/components/number-input.tsx +0 -558
  549. package/src/components/numeric-field.ts +0 -169
  550. package/src/components/numpad-sheet.tsx +0 -285
  551. package/src/components/one-time-code-input.tsx +0 -270
  552. package/src/components/page-contents-labels.ts +0 -9
  553. package/src/components/page-contents.tsx +0 -282
  554. package/src/components/page-header-context.ts +0 -8
  555. package/src/components/page-header.tsx +0 -298
  556. package/src/components/password-strength-labels.ts +0 -22
  557. package/src/components/password-strength.tsx +0 -241
  558. package/src/components/phone-input-labels.ts +0 -10
  559. package/src/components/phone-input.tsx +0 -282
  560. package/src/components/picker-sheet.tsx +0 -330
  561. package/src/components/pie-chart-labels.ts +0 -40
  562. package/src/components/pie-chart.tsx +0 -480
  563. package/src/components/popover-labels.ts +0 -14
  564. package/src/components/popover.tsx +0 -268
  565. package/src/components/progress-bar-labels.ts +0 -10
  566. package/src/components/progress-bar.tsx +0 -479
  567. package/src/components/qr-code.tsx +0 -76
  568. package/src/components/reauth-dialog-labels.ts +0 -13
  569. package/src/components/reauth-dialog.tsx +0 -265
  570. package/src/components/row-actions-labels.ts +0 -12
  571. package/src/components/row-actions.tsx +0 -795
  572. package/src/components/scroll-area.tsx +0 -123
  573. package/src/components/search-field.tsx +0 -192
  574. package/src/components/select.tsx +0 -294
  575. package/src/components/separator.tsx +0 -33
  576. package/src/components/series-chart-axes.ts +0 -342
  577. package/src/components/series-chart-budget.ts +0 -150
  578. package/src/components/series-chart-labels.ts +0 -33
  579. package/src/components/series-chart-thin.ts +0 -180
  580. package/src/components/series-chart-ticks.ts +0 -194
  581. package/src/components/series-chart.tsx +0 -1906
  582. package/src/components/server-wake-labels.ts +0 -11
  583. package/src/components/server-wake.tsx +0 -129
  584. package/src/components/settings-fields.tsx +0 -237
  585. package/src/components/share-card-labels.ts +0 -30
  586. package/src/components/share-card.tsx +0 -675
  587. package/src/components/signature-pad-labels.ts +0 -24
  588. package/src/components/signature-pad.tsx +0 -747
  589. package/src/components/signed-amount-labels.ts +0 -10
  590. package/src/components/signed-amount.tsx +0 -336
  591. package/src/components/skeleton.tsx +0 -80
  592. package/src/components/slider.tsx +0 -338
  593. package/src/components/sparkline-labels.ts +0 -14
  594. package/src/components/sparkline.tsx +0 -322
  595. package/src/components/spinner.tsx +0 -81
  596. package/src/components/stat-tile-labels.ts +0 -15
  597. package/src/components/stat-tile.tsx +0 -725
  598. package/src/components/status-dot.tsx +0 -170
  599. package/src/components/swatch-picker-labels.ts +0 -10
  600. package/src/components/swatch-picker.tsx +0 -283
  601. package/src/components/swipeable-row.tsx +0 -386
  602. package/src/components/switch.tsx +0 -273
  603. package/src/components/table-skeleton.tsx +0 -136
  604. package/src/components/table.tsx +0 -647
  605. package/src/components/tabs-labels.ts +0 -13
  606. package/src/components/tabs.tsx +0 -693
  607. package/src/components/text-link.tsx +0 -359
  608. package/src/components/text.tsx +0 -150
  609. package/src/components/textarea.tsx +0 -330
  610. package/src/components/tile-radio.tsx +0 -332
  611. package/src/components/time-input.tsx +0 -121
  612. package/src/components/toast-labels.ts +0 -12
  613. package/src/components/toast.tsx +0 -519
  614. package/src/components/toggle-group.tsx +0 -752
  615. package/src/components/toggle-legend.tsx +0 -394
  616. package/src/components/tooltip.tsx +0 -1149
  617. package/src/components/translation-review-editor.tsx +0 -290
  618. package/src/components/translation-review-labels.ts +0 -181
  619. package/src/components/translation-review-parts.tsx +0 -272
  620. package/src/components/translation-review.tsx +0 -1240
  621. package/src/components/tree-view.tsx +0 -589
  622. package/src/components/treemap-labels.ts +0 -47
  623. package/src/components/treemap-layout.ts +0 -210
  624. package/src/components/treemap.tsx +0 -1184
  625. package/src/components/trigger-aria.ts +0 -44
  626. package/src/components/use-anchor-dir.ts +0 -20
  627. package/src/components/use-mobile-reveal.ts +0 -62
  628. package/src/components/use-table-state.ts +0 -753
  629. package/src/components/user-avatar.tsx +0 -116
  630. package/src/components/wizard-stepper.tsx +0 -42
  631. package/src/components/write-lock-labels.ts +0 -10
  632. package/src/components/write-lock.tsx +0 -253
  633. package/src/currencies.ts +0 -70
  634. package/src/data-table.ts +0 -42
  635. package/src/demo/demo-banner.tsx +0 -153
  636. package/src/demo/demo-countdown.ts +0 -136
  637. package/src/demo/demo-ended.tsx +0 -90
  638. package/src/demo/demo-labels.ts +0 -78
  639. package/src/demo/demo-session.ts +0 -32
  640. package/src/demo/demo-start.tsx +0 -156
  641. package/src/eslint/index.ts +0 -161
  642. package/src/eslint/role-utilities.generated.ts +0 -146
  643. package/src/eslint/role-utilities.ts +0 -233
  644. package/src/feedback/feedback-attachment-download.tsx +0 -77
  645. package/src/feedback/feedback-attachment-labels.ts +0 -37
  646. package/src/feedback/feedback-attachment.tsx +0 -1239
  647. package/src/feedback/feedback-capture.ts +0 -287
  648. package/src/feedback/feedback-comment-thread.tsx +0 -353
  649. package/src/feedback/feedback-context-labels.ts +0 -10
  650. package/src/feedback/feedback-context.tsx +0 -213
  651. package/src/feedback/feedback-crash.ts +0 -547
  652. package/src/feedback/feedback-dialog-labels.ts +0 -29
  653. package/src/feedback/feedback-dialog.tsx +0 -440
  654. package/src/feedback/feedback-entry-file.tsx +0 -150
  655. package/src/feedback/feedback-inbox.tsx +0 -552
  656. package/src/feedback/feedback-labels.ts +0 -144
  657. package/src/feedback/feedback-menu-labels.ts +0 -12
  658. package/src/feedback/feedback-menu.tsx +0 -177
  659. package/src/feedback/feedback-mutation.ts +0 -20
  660. package/src/feedback/feedback-page-link.ts +0 -90
  661. package/src/feedback/feedback-public-labels.ts +0 -81
  662. package/src/feedback/feedback-public-list.tsx +0 -524
  663. package/src/feedback/feedback-public-switch.tsx +0 -102
  664. package/src/feedback/feedback-public-types.ts +0 -101
  665. package/src/feedback/feedback-record.ts +0 -423
  666. package/src/feedback/feedback-replies-context.ts +0 -9
  667. package/src/feedback/feedback-replies.tsx +0 -343
  668. package/src/feedback/feedback-rework-entry-chip.tsx +0 -18
  669. package/src/feedback/feedback-row-detail-labels.ts +0 -30
  670. package/src/feedback/feedback-row-detail.tsx +0 -858
  671. package/src/feedback/feedback-status-undo.ts +0 -109
  672. package/src/feedback/feedback-submit-dialog.tsx +0 -118
  673. package/src/feedback/feedback-submit.tsx +0 -237
  674. package/src/feedback/feedback-swipe.tsx +0 -192
  675. package/src/feedback/feedback-table-labels.ts +0 -27
  676. package/src/feedback/feedback-table.tsx +0 -912
  677. package/src/feedback/feedback-thread-labels.ts +0 -22
  678. package/src/feedback/feedback-thread-parts-labels.ts +0 -41
  679. package/src/feedback/feedback-thread.tsx +0 -905
  680. package/src/feedback/feedback-vocabulary.ts +0 -263
  681. package/src/feedback/feedback-vote-button.tsx +0 -124
  682. package/src/feedback.ts +0 -116
  683. package/src/hooks/use-anchored-panel.ts +0 -396
  684. package/src/hooks/use-anchored-rect.ts +0 -77
  685. package/src/hooks/use-announce.ts +0 -85
  686. package/src/hooks/use-authed-src.ts +0 -167
  687. package/src/hooks/use-body-scroll-lock.ts +0 -119
  688. package/src/hooks/use-breakpoint.ts +0 -133
  689. package/src/hooks/use-close-transition.ts +0 -107
  690. package/src/hooks/use-copy-to-clipboard.ts +0 -122
  691. package/src/hooks/use-debounce.ts +0 -114
  692. package/src/hooks/use-dismiss.ts +0 -371
  693. package/src/hooks/use-document-title.ts +0 -33
  694. package/src/hooks/use-file-drop.ts +0 -121
  695. package/src/hooks/use-file-picker-labels.ts +0 -28
  696. package/src/hooks/use-file-picker.tsx +0 -359
  697. package/src/hooks/use-focus-trap.ts +0 -199
  698. package/src/hooks/use-hotkey.ts +0 -189
  699. package/src/hooks/use-large-text.ts +0 -41
  700. package/src/hooks/use-long-press.ts +0 -140
  701. package/src/hooks/use-media-query.ts +0 -39
  702. package/src/hooks/use-mounted.ts +0 -39
  703. package/src/hooks/use-noindex.ts +0 -37
  704. package/src/hooks/use-overlay-history.ts +0 -714
  705. package/src/hooks/use-row-swipe.ts +0 -207
  706. package/src/hooks/use-search-param-state.ts +0 -434
  707. package/src/hooks/use-windowed-rows.ts +0 -225
  708. package/src/i18n/defaults.ts +0 -267
  709. package/src/i18n/german.ts +0 -2057
  710. package/src/i18n/kit-labels.tsx +0 -1003
  711. package/src/i18n/languages.ts +0 -349
  712. package/src/i18n/locales/de-CH.ts +0 -24
  713. package/src/i18n/locales/en.ts +0 -267
  714. package/src/i18n/locales/es.ts +0 -1997
  715. package/src/i18n/locales/fr.ts +0 -2035
  716. package/src/i18n/locales/hu.ts +0 -2002
  717. package/src/i18n/locales/it.ts +0 -2012
  718. package/src/i18n/locales/zh.ts +0 -1910
  719. package/src/i18n/plurals.ts +0 -86
  720. package/src/i18n/review.ts +0 -475
  721. package/src/i18n/shared-labels.ts +0 -138
  722. package/src/i18n/swiss.ts +0 -29
  723. package/src/index.ts +0 -1179
  724. package/src/landing/access.ts +0 -93
  725. package/src/landing/landing-actions.tsx +0 -97
  726. package/src/landing/landing-labels.ts +0 -59
  727. package/src/landing/landing-sections.tsx +0 -341
  728. package/src/landing/page-seo.ts +0 -261
  729. package/src/landing/public-header.tsx +0 -121
  730. package/src/landing/public-page.tsx +0 -106
  731. package/src/landing/routing.tsx +0 -225
  732. package/src/lib/broadcast.ts +0 -52
  733. package/src/lib/calc.ts +0 -323
  734. package/src/lib/chip-edge-snap.ts +0 -212
  735. package/src/lib/clipboard-minus.ts +0 -107
  736. package/src/lib/clipping.ts +0 -34
  737. package/src/lib/cn.ts +0 -28
  738. package/src/lib/column-mapping.ts +0 -234
  739. package/src/lib/countries.ts +0 -91
  740. package/src/lib/data-attributes.ts +0 -14
  741. package/src/lib/date-format.ts +0 -227
  742. package/src/lib/dates.ts +0 -266
  743. package/src/lib/day-format.ts +0 -96
  744. package/src/lib/decimal-marks.ts +0 -108
  745. package/src/lib/describe-failure.ts +0 -18
  746. package/src/lib/device-settings.ts +0 -147
  747. package/src/lib/direction.ts +0 -74
  748. package/src/lib/document-navigation.ts +0 -17
  749. package/src/lib/document-title.ts +0 -41
  750. package/src/lib/download.ts +0 -172
  751. package/src/lib/float-clearance.ts +0 -70
  752. package/src/lib/floating-stack.ts +0 -70
  753. package/src/lib/focus-left.ts +0 -156
  754. package/src/lib/format.ts +0 -522
  755. package/src/lib/http-status.ts +0 -38
  756. package/src/lib/iban.ts +0 -251
  757. package/src/lib/ime.ts +0 -24
  758. package/src/lib/intl-cache.ts +0 -25
  759. package/src/lib/iso-day.ts +0 -13
  760. package/src/lib/lazy-with-fallback.ts +0 -82
  761. package/src/lib/logger.ts +0 -69
  762. package/src/lib/minus.ts +0 -50
  763. package/src/lib/path-pattern.ts +0 -55
  764. package/src/lib/person-name.ts +0 -155
  765. package/src/lib/phone.ts +0 -208
  766. package/src/lib/plain-text.ts +0 -22
  767. package/src/lib/presence.ts +0 -18
  768. package/src/lib/qr-encode.ts +0 -444
  769. package/src/lib/quiet-focus.ts +0 -32
  770. package/src/lib/reduced-motion.ts +0 -22
  771. package/src/lib/refs.ts +0 -22
  772. package/src/lib/round.ts +0 -43
  773. package/src/lib/safe-storage.ts +0 -119
  774. package/src/lib/server-wake.ts +0 -315
  775. package/src/lib/session-refresh.ts +0 -472
  776. package/src/lib/share-format.ts +0 -18
  777. package/src/lib/status-tone.ts +0 -43
  778. package/src/lib/strip-fade.ts +0 -287
  779. package/src/lib/table-text.ts +0 -554
  780. package/src/lib/text-case.ts +0 -19
  781. package/src/lib/text-match.ts +0 -169
  782. package/src/lib/thenable.ts +0 -19
  783. package/src/lib/translation-review.ts +0 -717
  784. package/src/notifications/device-zone-report.ts +0 -67
  785. package/src/notifications/feedback-notification-types-labels.ts +0 -33
  786. package/src/notifications/feedback-notification-types.ts +0 -71
  787. package/src/notifications/notification-bell.tsx +0 -119
  788. package/src/notifications/notification-inbox.tsx +0 -309
  789. package/src/notifications/notification-parts.tsx +0 -81
  790. package/src/notifications/notification-types-setting.tsx +0 -406
  791. package/src/notifications/notification-types.ts +0 -89
  792. package/src/notifications/notifications-labels.ts +0 -287
  793. package/src/notifications/push-device-setting.tsx +0 -230
  794. package/src/notifications/push-devices-setting.tsx +0 -374
  795. package/src/notifications/push-worker.ts +0 -168
  796. package/src/notifications/quiet-hours-setting.tsx +0 -238
  797. package/src/notifications/unsubscribe-panel.tsx +0 -200
  798. package/src/notifications/use-push-device.ts +0 -448
  799. package/src/offline/local-first.ts +0 -100
  800. package/src/offline/pwa-update-prompt-labels.ts +0 -9
  801. package/src/offline/pwa-update-prompt.tsx +0 -78
  802. package/src/offline/query-persistence.ts +0 -391
  803. package/src/offline/service-worker-updates.ts +0 -81
  804. package/src/offline/shared-computer-labels.ts +0 -8
  805. package/src/offline/shared-computer.tsx +0 -87
  806. package/src/offline/sign-out-pending-dialog-labels.ts +0 -21
  807. package/src/offline/sign-out-pending-dialog.tsx +0 -135
  808. package/src/offline.ts +0 -37
  809. package/src/push-worker.ts +0 -25
  810. package/src/rhf/fields.tsx +0 -2187
  811. package/src/rhf/form-core.tsx +0 -324
  812. package/src/rhf/form.tsx +0 -12
  813. package/src/rhf/line-items.tsx +0 -135
  814. package/src/rhf/use-rhf-wizard-step.ts +0 -104
  815. package/src/rhf.ts +0 -21
  816. package/src/search/command-palette-labels.ts +0 -16
  817. package/src/search/command-palette.tsx +0 -624
  818. package/src/search/global-search-labels.ts +0 -13
  819. package/src/search/global-search.tsx +0 -660
  820. package/src/search/search-index.ts +0 -283
  821. package/src/search/use-command-key.ts +0 -23
  822. package/src/search.ts +0 -14
  823. package/src/settings/device-reset-setting-labels.ts +0 -20
  824. package/src/settings/device-reset-setting.tsx +0 -116
  825. package/src/settings/settings-card-classes.ts +0 -11
  826. package/src/settings/settings-catalogue.ts +0 -150
  827. package/src/settings/settings-context.ts +0 -33
  828. package/src/settings/settings-heading.tsx +0 -67
  829. package/src/settings/settings-labels.ts +0 -87
  830. package/src/settings/settings-layout.tsx +0 -471
  831. package/src/settings/settings-section.tsx +0 -108
  832. package/src/settings/use-account-appearance.ts +0 -148
  833. package/src/settings/use-account-language.ts +0 -146
  834. package/src/settings/use-settings-focus.ts +0 -128
  835. package/src/settings/use-settings-route.ts +0 -258
  836. package/src/shell/account-menu-language.tsx +0 -130
  837. package/src/shell/account-menu-text-size.tsx +0 -80
  838. package/src/shell/admin-menu.tsx +0 -183
  839. package/src/shell/app-shell-labels.ts +0 -11
  840. package/src/shell/app-shell.tsx +0 -1560
  841. package/src/shell/auth-layout.tsx +0 -186
  842. package/src/shell/company-switcher-labels.ts +0 -13
  843. package/src/shell/company-switcher.tsx +0 -136
  844. package/src/shell/dev-menu.tsx +0 -257
  845. package/src/shell/fill-height.tsx +0 -45
  846. package/src/shell/language-code.ts +0 -5
  847. package/src/shell/option-switcher-menu.tsx +0 -84
  848. package/src/shell/sync-status-indicator.tsx +0 -303
  849. package/src/shell/top-bar-actions.tsx +0 -87
  850. package/src/shell/top-bar-brand.tsx +0 -78
  851. package/src/shell/top-bar-parts-labels.ts +0 -148
  852. package/src/shell/top-bar.tsx +0 -40
  853. package/src/shell/topbar-action-menu.tsx +0 -567
  854. package/src/shell/topbar-controls.tsx +0 -269
  855. package/src/shell/tour-menu.tsx +0 -187
  856. package/src/shell.ts +0 -108
  857. package/src/sync/db.ts +0 -129
  858. package/src/sync/engine.ts +0 -1011
  859. package/src/sync/hooks.ts +0 -98
  860. package/src/sync/testing.ts +0 -73
  861. package/src/sync/wire.ts +0 -61
  862. package/src/sync.ts +0 -37
  863. package/src/table-text.ts +0 -8
  864. package/src/testing/css-variables.generated.ts +0 -112
  865. package/src/testing/css-variables.ts +0 -189
  866. package/src/testing/index.ts +0 -29
  867. package/src/testing/react.ts +0 -58
  868. package/src/testing/tour.ts +0 -41
  869. package/src/testing/viewport.ts +0 -357
  870. package/src/theme/chart-palette.ts +0 -232
  871. package/src/theme/color.ts +0 -272
  872. package/src/theme/contrast-tokens.ts +0 -268
  873. package/src/theme/contrast.ts +0 -250
  874. package/src/theme/palette-derive.ts +0 -825
  875. package/src/theme/palette-presets.ts +0 -544
  876. package/src/theme/palette-store.ts +0 -108
  877. package/src/theme/text-size.ts +0 -289
  878. package/src/theme/theme-store.ts +0 -157
  879. package/src/tour/tour-catalogue-labels.ts +0 -75
  880. package/src/tour/tour-catalogue.tsx +0 -335
  881. package/src/tour/tour-dock.ts +0 -134
  882. package/src/tour/tour-engine.ts +0 -37
  883. package/src/tour/tour-gates.ts +0 -218
  884. package/src/tour/tour-guide-button.tsx +0 -64
  885. package/src/tour/tour-guide-labels.ts +0 -15
  886. package/src/tour/tour-info.ts +0 -144
  887. package/src/tour/tour-labels.ts +0 -23
  888. package/src/tour/tour-overlay.tsx +0 -1170
  889. package/src/tour/tour.tsx +0 -750
  890. package/src/tour/use-tour-progress.ts +0 -671
  891. package/src/tour/use-tour-url-sync.ts +0 -266
  892. package/src/tour.ts +0 -21
  893. package/src/vite-env.d.ts +0 -23
  894. package/src/wizard/stepper-nav.tsx +0 -360
  895. package/src/wizard/types.ts +0 -275
  896. package/src/wizard/use-wizard.ts +0 -560
  897. package/src/wizard/validation.ts +0 -39
  898. package/src/wizard/wizard-context.tsx +0 -74
  899. package/src/wizard/wizard-labels.ts +0 -29
  900. package/src/wizard/wizard-step.tsx +0 -76
  901. package/src/wizard/wizard-summary.tsx +0 -84
  902. package/src/wizard.ts +0 -15
@@ -1,440 +0,0 @@
1
- import { useId, useState } from "react";
2
- import type { ReactNode } from "react";
3
- import { Button } from "../components/button";
4
- import { Input } from "../components/input";
5
- import { Select } from "../components/select";
6
- import { Textarea } from "../components/textarea";
7
- import type { ButtonSize, ButtonVariant } from "../components/button-look";
8
- import { Modal } from "../components/modal";
9
- import { isApplePlatform } from "../hooks/use-hotkey";
10
- import { usePhoneLayout } from "../hooks/use-breakpoint";
11
- import { useKitLabels, type LabelOverride } from "../i18n/kit-labels";
12
- import { hasContent } from "../lib/presence";
13
- import {
14
- DEFAULT_ATTACHMENT_ACCEPT,
15
- DEFAULT_FEEDBACK_ATTACHMENT_LABELS,
16
- DEFAULT_MAX_ATTACHMENT_BYTES,
17
- FeedbackAttachmentField,
18
- type FeedbackAttachmentError,
19
- type FeedbackAttachmentErrorInfo,
20
- } from "./feedback-attachment";
21
- import { DEFAULT_FEEDBACK_DIALOG_LABELS } from "./feedback-dialog-labels";
22
-
23
- /** One category the dialog offers. `C` (0.52): the app's category type — the kit's
24
- * `FeedbackCategory`, or `string` (the default) for a vocabulary of the app's own. */
25
- export interface FeedbackCategoryOption<C extends string = string> {
26
- value: C;
27
- label: string;
28
- }
29
-
30
- export interface FeedbackAttachmentLabels {
31
- /** The heading over the field. Optional: a note editor puts the buttons
32
- * straight under its textarea, where a second heading is noise. */
33
- attachment?: string;
34
- attachmentAdd: string;
35
- /** Label for the "capture screenshot" button. Optional — falls back to the provider's
36
- * `feedbackAttachment.attachmentCapture`, then English. */
37
- attachmentCapture?: string;
38
- /** The line under the attachment buttons saying a screenshot can be pasted
39
- * straight in. Optional — falls back to the provider's `feedbackAttachment`, then English. */
40
- attachmentPaste?: string;
41
- attachmentRemove: string;
42
- /** `multiple` mode (0.15.5): the chip list's accessible name — and, in
43
- * `<FeedbackDialog attachments="multiple">`, the heading over it (0.16.0). Optional,
44
- * as are the keys below — they fall back to the provider's `feedbackAttachment`,
45
- * then English. */
46
- attachmentList?: string;
47
- /** `multiple` mode (0.16.0): the screenshot slot's chip title, in place of its file name. */
48
- attachmentScreenshot?: string;
49
- /** `multiple` mode: one chip's remove button, given the file's name. */
50
- attachmentRemoveFile?: (name: string) => string;
51
- /** `multiple` mode: the line shown once `max` files are attached. */
52
- attachmentLimit?: (max: number) => string;
53
- /** `refs` mode (0.22.0): the second line of a chip whose upload is still running. */
54
- attachmentUploading?: string;
55
- }
56
-
57
- export interface FeedbackDialogLabels extends FeedbackAttachmentLabels {
58
- title: string;
59
- category: string;
60
- subject: string;
61
- body: string;
62
- attachment: string;
63
- /** See {@link FeedbackDialogTextLabels.submitHint}. */
64
- submitHint: FeedbackSubmitHint;
65
- cancel: string;
66
- save: string;
67
- }
68
-
69
- /** The submit hint: a string, or the line for the platform (`apple`: Mac, iPhone, iPad). */
70
- export type FeedbackSubmitHint = string | ((apple: boolean) => string);
71
-
72
- /**
73
- * The dialog's own strings — the `feedbackDialog` namespace of `<UiKitProvider
74
- * labels>` (0.12.0). The attachment keys are not repeated here: they are the
75
- * `feedbackAttachment` namespace's, which the field inside already reads.
76
- *
77
- * Before, every key was required at the call site, so each app restated ten strings
78
- * wherever it mounted the dialog (kastlan feedback-button.tsx built the object inline).
79
- */
80
- export interface FeedbackDialogTextLabels {
81
- title: string;
82
- category: string;
83
- subject: string;
84
- body: string;
85
- /** The body's label when `requireBody={false}`: "What happened? (optional)".
86
- * Optional, so a complete `UiKitLabels` typed before 0.14.2 still compiles. */
87
- bodyOptional?: string;
88
- /** The heading over the attachment buttons. */
89
- attachment: string;
90
- /**
91
- * The line beside the buttons naming the shortcut. Since 0.27.0 a function of the
92
- * platform, like `form.submitShortcut`: `apple` is true on a Mac, iPhone or iPad, where
93
- * the key is Cmd — "⌘ Enter to send" there, keksdose's "Ctrl+Enter to send" elsewhere
94
- * (§7.12). A plain string is still taken and shown everywhere, as before 0.27.0.
95
- */
96
- submitHint: FeedbackSubmitHint;
97
- cancel: string;
98
- save: string;
99
- /** 0.38 (docs/feedback-harmonization.md §9.2 decision 6): the line under the body when
100
- * reports are public — `useFeedbackSubmit({ publicNotice: true })` shows it. Optional,
101
- * so a complete `UiKitLabels` typed before 0.38 still compiles. de-CH "Andere Personen
102
- * sehen Titel und Text (nie Ihre Screenshots oder Dateien)." */
103
- publicNotice?: string;
104
- }
105
-
106
- // Defined in ./feedback-dialog-labels, which holds no component code (0.34, KS U8).
107
- export { DEFAULT_FEEDBACK_DIALOG_LABELS };
108
-
109
- export interface FeedbackSubmission<C extends string = string> {
110
- title: string;
111
- body: string;
112
- category: C;
113
- attachment: File | null;
114
- }
115
-
116
- /**
117
- * What `onSubmit` gets under `attachments="multiple"` (0.15.5): the screenshot and
118
- * the picked/pasted files apart, because an app files them differently — keksdose
119
- * attaches the screenshot to the report and the photos as its evidence list. No
120
- * `attachment`: there is no one file it could name.
121
- */
122
- export interface FeedbackMultipleSubmission<C extends string = string> {
123
- title: string;
124
- body: string;
125
- category: C;
126
- /** What `onCaptureScreenshot` returned, or `null` — at most one. */
127
- screenshot: File | null;
128
- /** Picked and pasted files, in the order they were added; at most `maxAttachments`. */
129
- attachments: File[];
130
- }
131
-
132
- /**
133
- * `C` (0.52, refactor audit 2026-10-30, API-7): the category type, inferred from
134
- * `categories` and `category` — `FeedbackCategory` hands `onCategoryChange` and
135
- * `onSubmit` a `FeedbackCategory` back, where a plain `string` had to be cast (the kit's
136
- * own `useFeedbackSubmit` did). `string` by default, so an app's own vocabulary fits.
137
- */
138
- interface FeedbackDialogBaseProps<C extends string = string> {
139
- open: boolean;
140
- onClose: () => void;
141
- /** `readonly` since 0.52: the dialog never changes it. */
142
- categories: readonly FeedbackCategoryOption<C>[];
143
- category: C;
144
- onCategoryChange: (value: C) => void;
145
- /** Prop > `<UiKitProvider labels={{ feedbackDialog, feedbackAttachment }}>` >
146
- * English. Optional since 0.12.0; a whole `FeedbackDialogLabels` still fits. */
147
- labels?: LabelOverride<FeedbackDialogLabels>;
148
- submitting?: boolean;
149
- contextSlot?: ReactNode;
150
- attachmentAccept?: string[];
151
- maxAttachmentBytes?: number;
152
- /**
153
- * Optional: capture a screenshot of the underlying app view and return it as a
154
- * File. When provided, a "Capture screenshot" button is shown next to "Add
155
- * attachment"; the returned file is fed through the same validation + preview.
156
- */
157
- onCaptureScreenshot?: () => Promise<File | null>;
158
- /**
159
- * `false`: a report with only a subject can be sent, and the body's label says it is
160
- * optional (`bodyOptional`, unless `labels.body` is passed). Default `true`, the
161
- * dialog's behaviour until 0.14.2 (keksdose K1: its backend takes title-only reports).
162
- */
163
- requireBody?: boolean;
164
- /**
165
- * The attachment field's add and capture buttons: its `buttonVariant` (0.25.0),
166
- * Button's own `variant`. Default `"secondary"`, the look they always had.
167
- *
168
- * The field took `buttonVariant` / `buttonSize` in 0.24.0 (keksdose's support chat),
169
- * but the dialog builds its field itself and passed neither, so a host that wanted
170
- * quieter buttons here — a dialog that already ends in a row of Cancel / Send — had
171
- * no way to say so short of rebuilding the dialog. Named after the dialog's other
172
- * attachment options (`attachmentAccept`, `onAttachmentError`) and handed through
173
- * unchanged, in both `attachments` modes.
174
- */
175
- attachmentButtonVariant?: ButtonVariant;
176
- /** The attachment field's `buttonSize` (0.25.0) — with {@link attachmentButtonVariant}.
177
- * Default `"md"`; `"sm"` draws the paperclip and camera at 14px. */
178
- attachmentButtonSize?: ButtonSize;
179
- /**
180
- * A muted line under the body saying who will read it (0.38, docs/feedback-harmonization.md
181
- * §9.2 decision 6) — the kit's sentence is `feedbackDialog.publicNotice`, "Other users
182
- * will see the title and text (never your screenshots or files)", which
183
- * `useFeedbackSubmit({ publicNotice: true })` passes. Attached to the body field with
184
- * `aria-describedby`, so it is heard where the text is written. Left out: no line.
185
- */
186
- publicNotice?: ReactNode;
187
- }
188
-
189
- /** One attachment — a screenshot, a picked or a pasted image; a second replaces
190
- * nothing, it has to wait for the first to be removed. The default. */
191
- export interface FeedbackDialogSingleProps<C extends string = string> extends FeedbackDialogBaseProps<C> {
192
- attachments?: "single";
193
- onSubmit: (data: FeedbackSubmission<C>) => void | Promise<void>;
194
- /** `info` (0.23.0) names the refused file and the limit — see
195
- * {@link FeedbackAttachmentErrorInfo}. */
196
- onAttachmentError?: (kind: "type" | "size", info: FeedbackAttachmentErrorInfo) => void;
197
- /** Multiple mode only — refused here rather than silently ignored. */
198
- maxAttachments?: never;
199
- }
200
-
201
- /**
202
- * One screenshot plus up to `maxAttachments` picked or pasted files (0.15.5, keksdose
203
- * dev#578: "pasted two photos, the second overwrote the first"). The capture button is
204
- * offered while there is no screenshot yet; the add button while there is room.
205
- */
206
- export interface FeedbackDialogMultipleProps<C extends string = string> extends FeedbackDialogBaseProps<C> {
207
- attachments: "multiple";
208
- /** Default `DEFAULT_MAX_ATTACHMENTS` (5). The screenshot does not count. */
209
- maxAttachments?: number;
210
- onSubmit: (data: FeedbackMultipleSubmission<C>) => void | Promise<void>;
211
- /** `"count"`: more files arrived at once than there was room for; the surplus was
212
- * dropped. `info` (0.23.0) names the refused file(s) and the limit. */
213
- onAttachmentError?: (kind: FeedbackAttachmentError, info: FeedbackAttachmentErrorInfo) => void;
214
- }
215
-
216
- export type FeedbackDialogProps<C extends string = string> =
217
- FeedbackDialogSingleProps<C> | FeedbackDialogMultipleProps<C>;
218
-
219
- /**
220
- * The generic feedback form dialog: category + subject + body + an optional image
221
- * attachment, with Ctrl/Cmd+Enter to submit. Domain-free — the app supplies the
222
- * category options, labels and an `onSubmit` that talks to its own backend, plus
223
- * an optional `contextSlot` for app-specific context (user, current URL, …).
224
- *
225
- * **A screenshot can be pasted straight in.** Ctrl/Cmd+V anywhere in the dialog
226
- * takes an image off the clipboard and makes it the attachment, through the same
227
- * validation and the same preview as the file picker. It is the gesture the two
228
- * ways in did not cover: `onCaptureScreenshot` snapshots the *whole* app view,
229
- * and the file picker needs a file — so somebody who wanted to show one panel,
230
- * or one region of one, had to save a crop to disk first and then find it again
231
- * (Steering Design feedback #39). The clipboard is where a region snip already
232
- * is on every platform.
233
- *
234
- * **`attachments="multiple"`** (0.15.5) takes several: every paste and pick adds a
235
- * chip, and `onSubmit` gets `{ screenshot, attachments }` ({@link
236
- * FeedbackMultipleSubmission}) instead of `attachment`. Opt-in, so a caller typed
237
- * against the one-file submission keeps compiling and behaving as before.
238
- */
239
- export function FeedbackDialog<C extends string = string>(props: FeedbackDialogProps<C>) {
240
- const {
241
- open,
242
- onClose,
243
- categories,
244
- category,
245
- onCategoryChange,
246
- labels: labelsProp,
247
- submitting = false,
248
- contextSlot,
249
- attachmentAccept = DEFAULT_ATTACHMENT_ACCEPT,
250
- maxAttachmentBytes = DEFAULT_MAX_ATTACHMENT_BYTES,
251
- onCaptureScreenshot,
252
- requireBody = true,
253
- attachmentButtonVariant,
254
- attachmentButtonSize,
255
- publicNotice,
256
- } = props;
257
- const [title, setTitle] = useState("");
258
- const [body, setBody] = useState("");
259
- const [attachment, setAttachment] = useState<File | null>(null);
260
- // `attachments="multiple"` only: the capture, apart from the picked/pasted files.
261
- const [screenshot, setScreenshot] = useState<File | null>(null);
262
- const [files, setFiles] = useState<File[]>([]);
263
- const isMobile = usePhoneLayout();
264
- const noticeId = useId();
265
- const hasNotice = hasContent(publicNotice);
266
- const labels = useKitLabels("feedbackDialog", DEFAULT_FEEDBACK_DIALOG_LABELS, labelsProp);
267
- const attachmentText = useKitLabels("feedbackAttachment", DEFAULT_FEEDBACK_ATTACHMENT_LABELS, labelsProp);
268
- // Under `multiple` the heading is `attachmentList` — a screenshot AND photos — which
269
- // also names the chip list beneath it: one string, so the two cannot disagree. Its old
270
- // second name, `feedbackDialog.attachments`, went in 0.34.
271
- const listHeading =
272
- labelsProp?.attachmentList ?? attachmentText.attachmentList ?? DEFAULT_FEEDBACK_ATTACHMENT_LABELS.attachmentList!;
273
- // The attachment field resolves its own keys from `feedbackAttachment`; it gets the
274
- // prop's (so a caller's `attachmentAdd` still wins) plus the resolved heading.
275
- const attachmentLabels =
276
- props.attachments === "multiple"
277
- ? { ...labelsProp, attachment: listHeading, attachmentList: listHeading }
278
- : { ...labelsProp, attachment: labels.attachment };
279
-
280
- // Reset the form whenever the dialog is (re)opened — during render, on the
281
- // closed-to-open transition, so the old draft never paints for a frame.
282
- const [wasOpen, setWasOpen] = useState(open);
283
- if (open !== wasOpen) {
284
- setWasOpen(open);
285
- if (open) {
286
- setTitle("");
287
- setBody("");
288
- setAttachment(null);
289
- setScreenshot(null);
290
- setFiles([]);
291
- }
292
- }
293
-
294
- // Trimmed: a subject or body of spaces is empty (keksdose's API answers a blank title
295
- // with a 422, and a blank report is no report).
296
- const canSubmit = !!title.trim() && (!requireBody || !!body.trim()) && !submitting;
297
- const trySubmit = () => {
298
- if (!canSubmit) return;
299
- if (props.attachments === "multiple") {
300
- void props.onSubmit({ title, body, category, screenshot, attachments: files });
301
- } else {
302
- void props.onSubmit({ title, body, category, attachment });
303
- }
304
- };
305
-
306
- if (!open) return null;
307
-
308
- const categoryField = (
309
- // The select offers exactly `categories`' values, so what it answers is one of them.
310
- <Select label={labels.category} value={category} onChange={(e) => onCategoryChange(e.target.value as C)}>
311
- {categories.map((c) => (
312
- <option key={c.value} value={c.value}>
313
- {c.label}
314
- </option>
315
- ))}
316
- </Select>
317
- );
318
- // On a phone the subject leads as a heading rather than as the second of two
319
- // identical boxes under a select (Keksdose feedback #179). `variant="display"`
320
- // is a no-op above the phone breakpoint, so the desktop dialog is unchanged.
321
- const subjectField = (
322
- <Input label={labels.subject} value={title} onChange={(e) => setTitle(e.target.value)} variant="display" />
323
- );
324
- const bodyTextarea = (
325
- <Textarea
326
- rows={5}
327
- label={requireBody ? labels.body : (labelsProp?.body ?? labels.bodyOptional ?? labels.body)}
328
- value={body}
329
- onChange={(e) => setBody(e.target.value)}
330
- aria-describedby={hasNotice ? noticeId : undefined}
331
- />
332
- );
333
- // 0.38: who will read it, right under what they are writing (§9.2 decision 6).
334
- const bodyField = hasNotice ? (
335
- <div className="space-y-1">
336
- {bodyTextarea}
337
- <p id={noticeId} className="text-xs text-muted" data-feedback-public-notice="">
338
- {publicNotice}
339
- </p>
340
- </div>
341
- ) : (
342
- bodyTextarea
343
- );
344
- const fieldProps = {
345
- labels: attachmentLabels,
346
- accept: attachmentAccept,
347
- maxBytes: maxAttachmentBytes,
348
- onCaptureScreenshot,
349
- // Left undefined they are the field's own defaults (secondary / md).
350
- buttonVariant: attachmentButtonVariant,
351
- buttonSize: attachmentButtonSize,
352
- // On `document`, not on the panel: the Modal focuses its own panel on open
353
- // and traps Tab inside it, so while this dialog is up every paste in the
354
- // page is meant for it — including the one made with nothing in
355
- // particular focused, which never reaches a React `onPaste` on a child.
356
- documentPaste: open,
357
- };
358
- const attachmentField =
359
- props.attachments === "multiple" ? (
360
- <FeedbackAttachmentField
361
- {...fieldProps}
362
- multiple
363
- value={files}
364
- onChange={setFiles}
365
- max={props.maxAttachments}
366
- // The capture goes to its own slot, so it is offered once and never crowds
367
- // out a photo; a paste is a photo (a region snip is chosen evidence, not "the
368
- // screenshot").
369
- screenshot={screenshot}
370
- onScreenshotChange={setScreenshot}
371
- onError={props.onAttachmentError}
372
- />
373
- ) : (
374
- <FeedbackAttachmentField
375
- {...fieldProps}
376
- value={attachment}
377
- onChange={setAttachment}
378
- onError={props.onAttachmentError}
379
- />
380
- );
381
-
382
- return (
383
- <Modal
384
- onClose={onClose}
385
- // The one dialog whose subject is the page behind it (Keksdose dev#460: "Make
386
- // the feedback dialog draggable so I can see behind it if it blocks
387
- // something") — you are describing what is under it while you type.
388
- draggable
389
- onKeyDown={(e) => {
390
- if ((e.ctrlKey || e.metaKey) && e.key === "Enter") {
391
- e.preventDefault();
392
- trySubmit();
393
- }
394
- }}
395
- >
396
- {/* Also the drag handle: pressing anywhere on the panel's own chrome moves it,
397
- and the heading is the strip a user reaches for. */}
398
- <h2 className="mb-3 text-lg font-semibold">{labels.title}</h2>
399
- <div className="space-y-3">
400
- {isMobile ? (
401
- // Phone shape, the same reasoning as the transaction editor's (#177):
402
- // the desktop order is the DATA MODEL's order — category, then subject,
403
- // then body — but nobody opens this dialog to pick a category. What they
404
- // came to do is say the thing, so that leads; the classification and the
405
- // evidence follow, a tier down.
406
- <>
407
- {subjectField}
408
- {bodyField}
409
- <div className="space-y-3 border-t border-subtle pt-3">
410
- {categoryField}
411
- {attachmentField}
412
- {contextSlot}
413
- </div>
414
- </>
415
- ) : (
416
- <>
417
- {categoryField}
418
- {subjectField}
419
- {bodyField}
420
- {attachmentField}
421
- {contextSlot}
422
- </>
423
- )}
424
- <div className="flex items-center justify-between gap-2">
425
- <div className="text-xs text-placeholder">
426
- {typeof labels.submitHint === "function" ? labels.submitHint(isApplePlatform()) : labels.submitHint}
427
- </div>
428
- <div className="flex gap-2">
429
- <Button variant="ghost" onClick={onClose}>
430
- {labels.cancel}
431
- </Button>
432
- <Button onClick={trySubmit} disabled={!canSubmit}>
433
- {labels.save}
434
- </Button>
435
- </div>
436
- </div>
437
- </div>
438
- </Modal>
439
- );
440
- }
@@ -1,150 +0,0 @@
1
- import { useState } from "react";
2
- import { AuthedImage } from "../components/authed-image";
3
- import { toast } from "../components/toast";
4
- import type { AuthedFetcher } from "../hooks/use-authed-src";
5
- import { useKitLabels } from "../i18n/kit-labels";
6
- import { cn } from "../lib/cn";
7
- import { DEFAULT_FEEDBACK_ATTACHMENT_LABELS, DEFAULT_MAX_ATTACHMENT_BYTES } from "./feedback-attachment";
8
- import type { FeedbackNoteAttachment } from "./feedback-inbox";
9
- import { useFeedbackToastLabels } from "./feedback-labels";
10
- import { FeedbackAttachmentDownload, plainFeedbackFetch } from "./feedback-attachment-download";
11
- import { FEEDBACK_ATTACHMENT_ACCEPT, isImageAttachment } from "./feedback-record";
12
- import { DEFAULT_FEEDBACK_DETAIL_LABELS } from "./feedback-row-detail-labels";
13
- import type { FeedbackComposerAttachment } from "./feedback-thread";
14
-
15
- /**
16
- * One file of a conversation entry, and the upload behind an entry's composer
17
- * (docs/feedback-harmonization.md §12, round 0.47; keksdose run 82 R1, live #447).
18
- *
19
- * - {@link FeedbackEntryFile}: a picture drawn INLINE — a thumbnail fetched through the
20
- * app's authenticated GET, a tap opens it full size in a tab — and any other file a
21
- * download button, as the row detail's Attachment section draws them. The reply
22
- * timeline, the rework entries and the comment thread all draw their file with it.
23
- * - {@link useFeedbackEntryUpload}: the rework note's one-file field (paste from the
24
- * clipboard, capture, pick; the contract's types and 10 MB, §3.5) for a
25
- * {@link ChatComposer}, and the upload that runs FIRST on send, so an entry never names
26
- * a file that did not arrive.
27
- */
28
-
29
- export interface FeedbackEntryFileProps {
30
- /** The entry's `attachment_url` — `/api/v1/feedback/attachments/<key>`. */
31
- url: string;
32
- /** The app's authenticated GET (`AuthedImage`'s): the attachment route wants the
33
- * bearer token (§3.5). Left out, the browser's own fetch with same-origin cookies. */
34
- fetcher?: AuthedFetcher | null;
35
- className?: string;
36
- }
37
-
38
- /**
39
- * An entry's one file (§12): a picture (`png`, `jpg`, `webp`, `gif` — by the key's
40
- * extension, which the server minted from the sniffed bytes) as an inline thumbnail that
41
- * opens full size in a new tab (`AuthedImage`'s `link`: the `blob:` URL, never the API
42
- * path); anything else a download button. A picture that will not load falls back to the
43
- * download button, so a broken file still says it is there. `alt`:
44
- * `feedbackDetail.attachment`.
45
- */
46
- export function FeedbackEntryFile({ url, fetcher, className }: FeedbackEntryFileProps) {
47
- const labels = useKitLabels("feedbackDetail", DEFAULT_FEEDBACK_DETAIL_LABELS);
48
- const fetchFile = fetcher ?? plainFeedbackFetch;
49
- return (
50
- <span className={cn("inline-block min-w-0 max-w-full", className)} data-feedback-entry-file={url}>
51
- {isImageAttachment(url) ? (
52
- <AuthedImage
53
- src={url}
54
- alt={labels.attachment}
55
- fetcher={fetchFile}
56
- link
57
- stopPropagation
58
- errorFallback={<FeedbackAttachmentDownload url={url} fetcher={fetchFile} />}
59
- wrapperClassName="inline-block max-w-full"
60
- className="max-h-40 max-w-full rounded border border-subtle"
61
- />
62
- ) : (
63
- <FeedbackAttachmentDownload url={url} fetcher={fetchFile} />
64
- )}
65
- </span>
66
- );
67
- }
68
-
69
- /* ── The composer's one file ──────────────────────────────────────────────── */
70
-
71
- /** `POST /feedback/attachments` — the file, answered with its URL. */
72
- export type FeedbackEntryUpload = (file: File) => Promise<string>;
73
-
74
- export interface FeedbackEntryUploadOptions {
75
- /** The upload. Left out, the composer is text only. */
76
- onUpload?: FeedbackEntryUpload;
77
- /** The "Capture screenshot" button — the kit's `captureAppScreenshot` or the app's
78
- * own. A rejection toasts `feedbackToast.captureFailed` and adds nothing. */
79
- onCaptureScreenshot?: () => Promise<File | null>;
80
- /** Over the field's defaults: the contract's types and 10 MB (§3.5), the
81
- * `feedbackToast` refusals. The same object the rework section takes. */
82
- attachment?: Partial<FeedbackNoteAttachment>;
83
- }
84
-
85
- export interface FeedbackEntryUploadState {
86
- /** For {@link ChatComposer}'s `attachment`; `undefined` without `onUpload`. */
87
- composerAttachment: FeedbackComposerAttachment | undefined;
88
- /** Upload the picked file, if any: its URL, `undefined` for none. Rejects after a
89
- * toast (`feedbackAttachment.attachmentUploadFailed`) when the upload fails — the
90
- * send then stops and the composer keeps the draft and the file. */
91
- upload: (file: File | null) => Promise<string | undefined>;
92
- /** An upload is running — add it to the composer's `pending`. */
93
- uploading: boolean;
94
- }
95
-
96
- /**
97
- * The rework note's file field for a reply or a comment composer (§12): one file, added,
98
- * captured or pasted from the clipboard into the box, the contract's types and 10 MB; and
99
- * the upload, awaited before the entry is sent.
100
- */
101
- export function useFeedbackEntryUpload({
102
- onUpload,
103
- onCaptureScreenshot,
104
- attachment,
105
- }: FeedbackEntryUploadOptions): FeedbackEntryUploadState {
106
- const toasts = useFeedbackToastLabels();
107
- const fieldLabels = useKitLabels("feedbackAttachment", DEFAULT_FEEDBACK_ATTACHMENT_LABELS);
108
- const [uploading, setUploading] = useState(false);
109
-
110
- const capture = onCaptureScreenshot
111
- ? async () => {
112
- try {
113
- return await onCaptureScreenshot();
114
- } catch {
115
- toast.error(toasts.captureFailed);
116
- return null;
117
- }
118
- }
119
- : undefined;
120
-
121
- const composerAttachment: FeedbackComposerAttachment | undefined = onUpload
122
- ? {
123
- accept: FEEDBACK_ATTACHMENT_ACCEPT,
124
- maxBytes: DEFAULT_MAX_ATTACHMENT_BYTES,
125
- onError: (kind) => {
126
- toast.error(kind === "type" ? toasts.attachmentUnsupported : toasts.attachmentTooLarge);
127
- },
128
- onCaptureScreenshot: capture,
129
- buttonVariant: "ghost",
130
- buttonSize: "sm",
131
- ...attachment,
132
- }
133
- : undefined;
134
-
135
- const upload = async (file: File | null) => {
136
- if (!file || !onUpload) return undefined;
137
- setUploading(true);
138
- try {
139
- return await onUpload(file);
140
- } catch (error) {
141
- const failed = fieldLabels.attachmentUploadFailed ?? DEFAULT_FEEDBACK_ATTACHMENT_LABELS.attachmentUploadFailed!;
142
- toast.error(failed(file.name));
143
- throw error;
144
- } finally {
145
- setUploading(false);
146
- }
147
- };
148
-
149
- return { composerAttachment, upload, uploading };
150
- }