@eifi1/ui-kit 0.31.0 → 0.32.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 (565) hide show
  1. package/README.md +53 -30
  2. package/dist/account/delete-account-setting.d.ts +8 -3
  3. package/dist/admin/admin-action-confirm.d.ts +8 -3
  4. package/dist/admin/admin-parts.d.ts +8 -1
  5. package/dist/admin/admin-parts.js +1 -1
  6. package/dist/admin/admin-parts.js.map +1 -1
  7. package/dist/admin/invitations-panel.d.ts +8 -3
  8. package/dist/admin/invitations-panel.js +29 -26
  9. package/dist/admin/invitations-panel.js.map +1 -1
  10. package/dist/admin/reviewer-scope-editor.d.ts +8 -3
  11. package/dist/admin/role-select.d.ts +10 -5
  12. package/dist/admin/transfer-ownership-dialog.d.ts +8 -3
  13. package/dist/admin/user-roster.d.ts +10 -5
  14. package/dist/admin/user-roster.js +8 -47
  15. package/dist/admin/user-roster.js.map +1 -1
  16. package/dist/auth/auth-errors.d.ts +43 -8
  17. package/dist/auth/auth-errors.js +24 -1
  18. package/dist/auth/auth-errors.js.map +1 -1
  19. package/dist/auth/register-form.d.ts +8 -3
  20. package/dist/auth/reset-password-form.d.ts +1 -1
  21. package/dist/auth/reset-password-form.js +2 -1
  22. package/dist/auth/reset-password-form.js.map +1 -1
  23. package/dist/auth/verify-email.d.ts +4 -0
  24. package/dist/auth/verify-email.js +3 -2
  25. package/dist/auth/verify-email.js.map +1 -1
  26. package/dist/billing/billing-banner.d.ts +184 -0
  27. package/dist/billing/billing-banner.js +98 -0
  28. package/dist/billing/billing-banner.js.map +1 -0
  29. package/dist/billing/billing-labels.d.ts +100 -0
  30. package/dist/billing/billing-labels.js +74 -0
  31. package/dist/billing/billing-labels.js.map +1 -0
  32. package/dist/billing/billing-lock.d.ts +158 -0
  33. package/dist/billing/billing-lock.js +17 -0
  34. package/dist/billing/billing-lock.js.map +1 -0
  35. package/dist/billing/billing-standing.d.ts +149 -0
  36. package/dist/billing/billing-standing.js +28 -0
  37. package/dist/billing/billing-standing.js.map +1 -0
  38. package/dist/billing/plan-card.d.ts +248 -0
  39. package/dist/billing/plan-card.js +248 -0
  40. package/dist/billing/plan-card.js.map +1 -0
  41. package/dist/billing/plan-limit-notice.d.ts +156 -0
  42. package/dist/billing/plan-limit-notice.js +76 -0
  43. package/dist/billing/plan-limit-notice.js.map +1 -0
  44. package/dist/billing/plan-limit.d.ts +34 -0
  45. package/dist/billing/plan-limit.js +20 -0
  46. package/dist/billing/plan-limit.js.map +1 -0
  47. package/dist/billing/plan-price.d.ts +61 -0
  48. package/dist/billing/plan-price.js +45 -0
  49. package/dist/billing/plan-price.js.map +1 -0
  50. package/dist/billing/subscription-actions.d.ts +133 -0
  51. package/dist/billing/subscription-actions.js +28 -0
  52. package/dist/billing/subscription-actions.js.map +1 -0
  53. package/dist/billing/subscription-status-chip.d.ts +149 -0
  54. package/dist/billing/subscription-status-chip.js +48 -0
  55. package/dist/billing/subscription-status-chip.js.map +1 -0
  56. package/dist/chart.d.ts +9 -3
  57. package/dist/components/account-chips.d.ts +16 -4
  58. package/dist/components/account-chips.js +21 -3
  59. package/dist/components/account-chips.js.map +1 -1
  60. package/dist/components/alert-banner.d.ts +6 -1
  61. package/dist/components/alert-banner.js +4 -3
  62. package/dist/components/alert-banner.js.map +1 -1
  63. package/dist/components/amount-input.d.ts +8 -3
  64. package/dist/components/amount-input.js +5 -5
  65. package/dist/components/amount-input.js.map +1 -1
  66. package/dist/components/appearance-labels.d.ts +32 -0
  67. package/dist/components/appearance-labels.js +18 -0
  68. package/dist/components/appearance-labels.js.map +1 -0
  69. package/dist/components/autocomplete.js +2 -2
  70. package/dist/components/autocomplete.js.map +1 -1
  71. package/dist/components/breadcrumbs.js +3 -2
  72. package/dist/components/breadcrumbs.js.map +1 -1
  73. package/dist/components/bulk-action-bar.d.ts +2 -2
  74. package/dist/components/bulk-action-bar.js +7 -12
  75. package/dist/components/bulk-action-bar.js.map +1 -1
  76. package/dist/components/button-group.d.ts +8 -3
  77. package/dist/components/calculator.d.ts +8 -3
  78. package/dist/components/calculator.js +4 -3
  79. package/dist/components/calculator.js.map +1 -1
  80. package/dist/components/calendar-heatmap.js +5 -5
  81. package/dist/components/calendar-heatmap.js.map +1 -1
  82. package/dist/components/chart-height.d.ts +23 -0
  83. package/dist/components/chart-height.js +15 -0
  84. package/dist/components/chart-height.js.map +1 -0
  85. package/dist/components/chart-zoom.js +6 -1
  86. package/dist/components/chart-zoom.js.map +1 -1
  87. package/dist/components/checkbox-group.js +2 -2
  88. package/dist/components/checkbox-group.js.map +1 -1
  89. package/dist/components/checkbox.d.ts +10 -0
  90. package/dist/components/checkbox.js +25 -10
  91. package/dist/components/checkbox.js.map +1 -1
  92. package/dist/components/chip.d.ts +19 -3
  93. package/dist/components/chip.js +47 -21
  94. package/dist/components/chip.js.map +1 -1
  95. package/dist/components/choice-card.d.ts +1 -1
  96. package/dist/components/choice-card.js +8 -7
  97. package/dist/components/choice-card.js.map +1 -1
  98. package/dist/components/column-mapper.js +1 -1
  99. package/dist/components/column-mapper.js.map +1 -1
  100. package/dist/components/combobox-core.js +8 -7
  101. package/dist/components/combobox-core.js.map +1 -1
  102. package/dist/components/combobox.js +8 -8
  103. package/dist/components/combobox.js.map +1 -1
  104. package/dist/components/confirm-dialog.d.ts +8 -3
  105. package/dist/components/confirm-dialog.js +7 -1
  106. package/dist/components/confirm-dialog.js.map +1 -1
  107. package/dist/components/copy-button.d.ts +10 -5
  108. package/dist/components/country-select.js +1 -1
  109. package/dist/components/country-select.js.map +1 -1
  110. package/dist/components/currency-select.js +3 -3
  111. package/dist/components/currency-select.js.map +1 -1
  112. package/dist/components/danger-confirm.d.ts +8 -3
  113. package/dist/components/data-table-cells.d.ts +1 -1
  114. package/dist/components/data-table-filter-popover.d.ts +1 -1
  115. package/dist/components/data-table-filter-popover.js +4 -1
  116. package/dist/components/data-table-filter-popover.js.map +1 -1
  117. package/dist/components/data-table-filters.d.ts +1 -1
  118. package/dist/components/data-table-labels.d.ts +1 -1
  119. package/dist/components/data-table-pagination.d.ts +1 -1
  120. package/dist/components/data-table.d.ts +1 -1
  121. package/dist/components/data-table.js +123 -52
  122. package/dist/components/data-table.js.map +1 -1
  123. package/dist/components/date-picker.d.ts +1 -1
  124. package/dist/components/date-picker.js +7 -5
  125. package/dist/components/date-picker.js.map +1 -1
  126. package/dist/components/description-list.js +2 -2
  127. package/dist/components/description-list.js.map +1 -1
  128. package/dist/components/dialog-frame.js +2 -1
  129. package/dist/components/dialog-frame.js.map +1 -1
  130. package/dist/components/disclosure.js +3 -2
  131. package/dist/components/disclosure.js.map +1 -1
  132. package/dist/components/dropdown.d.ts +1 -1
  133. package/dist/components/dropdown.js +7 -1
  134. package/dist/components/dropdown.js.map +1 -1
  135. package/dist/components/facing-pair.d.ts +19 -6
  136. package/dist/components/facing-pair.js +3 -2
  137. package/dist/components/facing-pair.js.map +1 -1
  138. package/dist/components/field-parts.d.ts +102 -6
  139. package/dist/components/field-parts.js +81 -6
  140. package/dist/components/field-parts.js.map +1 -1
  141. package/dist/components/field-sync.d.ts +4 -1
  142. package/dist/components/field-sync.js +12 -2
  143. package/dist/components/field-sync.js.map +1 -1
  144. package/dist/components/field.js +2 -2
  145. package/dist/components/field.js.map +1 -1
  146. package/dist/components/file-button.d.ts +8 -3
  147. package/dist/components/file-dropzone.d.ts +8 -3
  148. package/dist/components/floating-panel.js +7 -4
  149. package/dist/components/floating-panel.js.map +1 -1
  150. package/dist/components/focus-ring.d.ts +12 -0
  151. package/dist/components/focus-ring.js +8 -0
  152. package/dist/components/focus-ring.js.map +1 -0
  153. package/dist/components/form-actions.d.ts +8 -3
  154. package/dist/components/form-actions.js +33 -19
  155. package/dist/components/form-actions.js.map +1 -1
  156. package/dist/components/full-bleed-dialog.d.ts +11 -1
  157. package/dist/components/full-bleed-dialog.js +3 -1
  158. package/dist/components/full-bleed-dialog.js.map +1 -1
  159. package/dist/components/iban-input.d.ts +8 -3
  160. package/dist/components/image-grid.js +1 -1
  161. package/dist/components/image-grid.js.map +1 -1
  162. package/dist/components/inline-edit-field.js +6 -3
  163. package/dist/components/inline-edit-field.js.map +1 -1
  164. package/dist/components/language-select.d.ts +8 -3
  165. package/dist/components/legal-page.d.ts +26 -5
  166. package/dist/components/legal-page.js +3 -1
  167. package/dist/components/legal-page.js.map +1 -1
  168. package/dist/components/legal.d.ts +8 -3
  169. package/dist/components/legal.js +2 -1
  170. package/dist/components/legal.js.map +1 -1
  171. package/dist/components/lightbox.js +24 -2
  172. package/dist/components/lightbox.js.map +1 -1
  173. package/dist/components/line-items.js +2 -1
  174. package/dist/components/line-items.js.map +1 -1
  175. package/dist/components/list.d.ts +5 -0
  176. package/dist/components/list.js +13 -9
  177. package/dist/components/list.js.map +1 -1
  178. package/dist/components/measured-grid.d.ts +3 -1
  179. package/dist/components/measured-grid.js +38 -20
  180. package/dist/components/measured-grid.js.map +1 -1
  181. package/dist/components/menu-item.js +2 -1
  182. package/dist/components/menu-item.js.map +1 -1
  183. package/dist/components/mini-calendar.js +8 -4
  184. package/dist/components/mini-calendar.js.map +1 -1
  185. package/dist/components/money-field.d.ts +8 -3
  186. package/dist/components/month-picker.js +9 -5
  187. package/dist/components/month-picker.js.map +1 -1
  188. package/dist/components/nav-pills.js +1 -1
  189. package/dist/components/nav-pills.js.map +1 -1
  190. package/dist/components/number-field.d.ts +8 -3
  191. package/dist/components/number-input.d.ts +11 -4
  192. package/dist/components/number-input.js +8 -6
  193. package/dist/components/number-input.js.map +1 -1
  194. package/dist/components/numpad-sheet.d.ts +8 -3
  195. package/dist/components/numpad-sheet.js +2 -1
  196. package/dist/components/numpad-sheet.js.map +1 -1
  197. package/dist/components/one-time-code-input.js +2 -2
  198. package/dist/components/one-time-code-input.js.map +1 -1
  199. package/dist/components/page-contents.js +2 -2
  200. package/dist/components/page-contents.js.map +1 -1
  201. package/dist/components/phone-input.d.ts +8 -3
  202. package/dist/components/phone-input.js +2 -2
  203. package/dist/components/phone-input.js.map +1 -1
  204. package/dist/components/pie-chart.d.ts +8 -2
  205. package/dist/components/pie-chart.js +11 -7
  206. package/dist/components/pie-chart.js.map +1 -1
  207. package/dist/components/popover.d.ts +9 -1
  208. package/dist/components/popover.js +8 -4
  209. package/dist/components/popover.js.map +1 -1
  210. package/dist/components/row-actions.d.ts +100 -0
  211. package/dist/components/row-actions.js +165 -0
  212. package/dist/components/row-actions.js.map +1 -0
  213. package/dist/components/scroll-area.js +1 -1
  214. package/dist/components/scroll-area.js.map +1 -1
  215. package/dist/components/search-field.js +3 -2
  216. package/dist/components/search-field.js.map +1 -1
  217. package/dist/components/series-chart-budget.d.ts +30 -7
  218. package/dist/components/series-chart-budget.js +12 -4
  219. package/dist/components/series-chart-budget.js.map +1 -1
  220. package/dist/components/series-chart-ticks.d.ts +7 -1
  221. package/dist/components/series-chart-ticks.js +6 -0
  222. package/dist/components/series-chart-ticks.js.map +1 -1
  223. package/dist/components/series-chart.d.ts +58 -28
  224. package/dist/components/series-chart.js +42 -32
  225. package/dist/components/series-chart.js.map +1 -1
  226. package/dist/components/settings-fields.d.ts +51 -6
  227. package/dist/components/settings-fields.js +37 -0
  228. package/dist/components/settings-fields.js.map +1 -1
  229. package/dist/components/share-card.d.ts +11 -6
  230. package/dist/components/share-card.js +2 -0
  231. package/dist/components/share-card.js.map +1 -1
  232. package/dist/components/sign-chip.d.ts +4 -0
  233. package/dist/components/sign-chip.js +17 -4
  234. package/dist/components/sign-chip.js.map +1 -1
  235. package/dist/components/signature-pad.d.ts +3 -1
  236. package/dist/components/signature-pad.js +8 -5
  237. package/dist/components/signature-pad.js.map +1 -1
  238. package/dist/components/slider.js +7 -6
  239. package/dist/components/slider.js.map +1 -1
  240. package/dist/components/sparkline.d.ts +5 -1
  241. package/dist/components/sparkline.js +4 -2
  242. package/dist/components/sparkline.js.map +1 -1
  243. package/dist/components/stat-tile.d.ts +17 -1
  244. package/dist/components/stat-tile.js +48 -20
  245. package/dist/components/stat-tile.js.map +1 -1
  246. package/dist/components/status-dot.d.ts +4 -0
  247. package/dist/components/swipeable-row.js +2 -1
  248. package/dist/components/swipeable-row.js.map +1 -1
  249. package/dist/components/switch.d.ts +21 -7
  250. package/dist/components/switch.js +24 -11
  251. package/dist/components/switch.js.map +1 -1
  252. package/dist/components/table.js +2 -2
  253. package/dist/components/table.js.map +1 -1
  254. package/dist/components/text-link.d.ts +8 -3
  255. package/dist/components/text-link.js +1 -1
  256. package/dist/components/text-link.js.map +1 -1
  257. package/dist/components/text.d.ts +7 -2
  258. package/dist/components/text.js +5 -5
  259. package/dist/components/text.js.map +1 -1
  260. package/dist/components/tile-radio.js +2 -1
  261. package/dist/components/tile-radio.js.map +1 -1
  262. package/dist/components/time-input.d.ts +8 -3
  263. package/dist/components/toast.d.ts +18 -2
  264. package/dist/components/toast.js +8 -5
  265. package/dist/components/toast.js.map +1 -1
  266. package/dist/components/toggle-group.d.ts +16 -1
  267. package/dist/components/toggle-group.js +40 -11
  268. package/dist/components/toggle-group.js.map +1 -1
  269. package/dist/components/toggle-legend.d.ts +10 -1
  270. package/dist/components/toggle-legend.js +21 -7
  271. package/dist/components/toggle-legend.js.map +1 -1
  272. package/dist/components/translation-review-parts.d.ts +4 -0
  273. package/dist/components/translation-review.d.ts +4 -0
  274. package/dist/components/translation-review.js +3 -3
  275. package/dist/components/translation-review.js.map +1 -1
  276. package/dist/components/tree-view.js +3 -2
  277. package/dist/components/tree-view.js.map +1 -1
  278. package/dist/components/treemap.d.ts +5 -2
  279. package/dist/components/treemap.js +33 -16
  280. package/dist/components/treemap.js.map +1 -1
  281. package/dist/components/ui.d.ts +8 -3
  282. package/dist/components/ui.js +202 -114
  283. package/dist/components/ui.js.map +1 -1
  284. package/dist/components/use-table-state.d.ts +1 -1
  285. package/dist/components/user-avatar.d.ts +5 -1
  286. package/dist/components/user-avatar.js +1 -1
  287. package/dist/components/user-avatar.js.map +1 -1
  288. package/dist/{data-table-labels-DUELeXpa.d.ts → data-table-labels-kpAAVi6g.d.ts} +26 -2
  289. package/dist/data-table.d.ts +1 -1
  290. package/dist/{delete-account-setting-DCFS5Vof.d.ts → delete-account-setting-BvdQdbv3.d.ts} +613 -58
  291. package/dist/demo/demo-banner.js +1 -0
  292. package/dist/demo/demo-banner.js.map +1 -1
  293. package/dist/feedback/feedback-attachment.d.ts +8 -3
  294. package/dist/feedback/feedback-context.d.ts +8 -3
  295. package/dist/feedback/feedback-crash.d.ts +8 -3
  296. package/dist/feedback/feedback-dialog.d.ts +8 -3
  297. package/dist/feedback/feedback-dialog.js +3 -3
  298. package/dist/feedback/feedback-dialog.js.map +1 -1
  299. package/dist/feedback/feedback-inbox.d.ts +8 -3
  300. package/dist/feedback/feedback-inbox.js +2 -2
  301. package/dist/feedback/feedback-inbox.js.map +1 -1
  302. package/dist/feedback/feedback-labels.d.ts +8 -3
  303. package/dist/feedback/feedback-menu.d.ts +9 -4
  304. package/dist/feedback/feedback-record.d.ts +8 -3
  305. package/dist/feedback/feedback-row-detail.d.ts +8 -3
  306. package/dist/feedback/feedback-status-undo.d.ts +8 -3
  307. package/dist/feedback/feedback-submit.d.ts +8 -3
  308. package/dist/feedback/feedback-swipe.d.ts +8 -3
  309. package/dist/feedback/feedback-table.d.ts +8 -3
  310. package/dist/feedback/feedback-thread.d.ts +8 -3
  311. package/dist/feedback/feedback-thread.js +3 -3
  312. package/dist/feedback/feedback-thread.js.map +1 -1
  313. package/dist/feedback.d.ts +8 -3
  314. package/dist/hooks/use-anchored-panel.d.ts +32 -3
  315. package/dist/hooks/use-anchored-panel.js +21 -3
  316. package/dist/hooks/use-anchored-panel.js.map +1 -1
  317. package/dist/hooks/use-breakpoint.d.ts +77 -0
  318. package/dist/hooks/use-breakpoint.js +50 -0
  319. package/dist/hooks/use-breakpoint.js.map +1 -0
  320. package/dist/hooks/use-file-drop.d.ts +8 -3
  321. package/dist/hooks/use-large-text.d.ts +29 -0
  322. package/dist/hooks/use-large-text.js +20 -0
  323. package/dist/hooks/use-large-text.js.map +1 -0
  324. package/dist/hooks/use-windowed-rows.d.ts +52 -8
  325. package/dist/hooks/use-windowed-rows.js +94 -5
  326. package/dist/hooks/use-windowed-rows.js.map +1 -1
  327. package/dist/i18n/defaults.d.ts +8 -3
  328. package/dist/i18n/defaults.js +8 -0
  329. package/dist/i18n/defaults.js.map +1 -1
  330. package/dist/i18n/german.d.ts +8 -3
  331. package/dist/i18n/german.js +91 -3
  332. package/dist/i18n/german.js.map +1 -1
  333. package/dist/i18n/kit-labels.d.ts +8 -3
  334. package/dist/i18n/kit-labels.js.map +1 -1
  335. package/dist/i18n/languages.d.ts +10 -5
  336. package/dist/i18n/locales/de-CH.d.ts +8 -3
  337. package/dist/i18n/locales/en.d.ts +8 -3
  338. package/dist/i18n/locales/es.d.ts +8 -3
  339. package/dist/i18n/locales/es.js +86 -3
  340. package/dist/i18n/locales/es.js.map +1 -1
  341. package/dist/i18n/locales/fr.d.ts +8 -3
  342. package/dist/i18n/locales/fr.js +88 -3
  343. package/dist/i18n/locales/fr.js.map +1 -1
  344. package/dist/i18n/locales/hu.d.ts +8 -3
  345. package/dist/i18n/locales/hu.js +88 -3
  346. package/dist/i18n/locales/hu.js.map +1 -1
  347. package/dist/i18n/locales/it.d.ts +8 -3
  348. package/dist/i18n/locales/it.js +89 -3
  349. package/dist/i18n/locales/it.js.map +1 -1
  350. package/dist/i18n/locales/zh.d.ts +8 -3
  351. package/dist/i18n/locales/zh.js +86 -3
  352. package/dist/i18n/locales/zh.js.map +1 -1
  353. package/dist/i18n/review.d.ts +8 -3
  354. package/dist/i18n/review.js +16 -1
  355. package/dist/i18n/review.js.map +1 -1
  356. package/dist/index.d.ts +29 -13
  357. package/dist/index.js +77 -5
  358. package/dist/index.js.map +1 -1
  359. package/dist/landing/landing-actions.d.ts +12 -5
  360. package/dist/landing/landing-actions.js +1 -1
  361. package/dist/landing/landing-actions.js.map +1 -1
  362. package/dist/landing/landing-sections.d.ts +8 -3
  363. package/dist/landing/public-header.d.ts +9 -4
  364. package/dist/landing/public-header.js +3 -3
  365. package/dist/landing/public-header.js.map +1 -1
  366. package/dist/landing/routing.d.ts +27 -9
  367. package/dist/landing/routing.js +5 -2
  368. package/dist/landing/routing.js.map +1 -1
  369. package/dist/lib/cn.js +3 -2
  370. package/dist/lib/cn.js.map +1 -1
  371. package/dist/rhf/fields.d.ts +8 -3
  372. package/dist/rhf/fields.js +1 -1
  373. package/dist/rhf/fields.js.map +1 -1
  374. package/dist/rhf/form.d.ts +8 -3
  375. package/dist/rhf/form.js +2 -2
  376. package/dist/rhf/form.js.map +1 -1
  377. package/dist/rhf.d.ts +8 -3
  378. package/dist/search/command-palette.d.ts +1 -1
  379. package/dist/search/command-palette.js +9 -8
  380. package/dist/search/command-palette.js.map +1 -1
  381. package/dist/settings/settings-labels.d.ts +8 -1
  382. package/dist/settings/settings-labels.js +7 -2
  383. package/dist/settings/settings-labels.js.map +1 -1
  384. package/dist/settings/settings-layout.js +2 -1
  385. package/dist/settings/settings-layout.js.map +1 -1
  386. package/dist/settings/settings-section.d.ts +8 -3
  387. package/dist/settings/use-account-appearance.d.ts +92 -0
  388. package/dist/settings/use-account-appearance.js +63 -0
  389. package/dist/settings/use-account-appearance.js.map +1 -0
  390. package/dist/settings/use-settings-route.d.ts +1 -1
  391. package/dist/settings/use-settings-route.js +2 -3
  392. package/dist/settings/use-settings-route.js.map +1 -1
  393. package/dist/shell/app-shell.d.ts +12 -171
  394. package/dist/shell/app-shell.js +144 -28
  395. package/dist/shell/app-shell.js.map +1 -1
  396. package/dist/shell/auth-layout.js +1 -1
  397. package/dist/shell/auth-layout.js.map +1 -1
  398. package/dist/shell/option-switcher-menu.js +1 -1
  399. package/dist/shell/option-switcher-menu.js.map +1 -1
  400. package/dist/shell/top-bar-brand.d.ts +8 -3
  401. package/dist/shell/top-bar-brand.js +3 -1
  402. package/dist/shell/top-bar-brand.js.map +1 -1
  403. package/dist/shell/topbar-action-menu.d.ts +4 -0
  404. package/dist/shell/topbar-action-menu.js +3 -3
  405. package/dist/shell/topbar-action-menu.js.map +1 -1
  406. package/dist/shell/topbar-controls.js +4 -4
  407. package/dist/shell/topbar-controls.js.map +1 -1
  408. package/dist/shell.d.ts +10 -6
  409. package/dist/shell.js.map +1 -1
  410. package/dist/theme/contrast-tokens.d.ts +41 -0
  411. package/dist/theme/contrast-tokens.js +59 -0
  412. package/dist/theme/contrast-tokens.js.map +1 -0
  413. package/dist/theme/contrast.d.ts +109 -0
  414. package/dist/theme/contrast.js +128 -0
  415. package/dist/theme/contrast.js.map +1 -0
  416. package/dist/theme/palette-presets.d.ts +12 -1
  417. package/dist/theme/palette-presets.js +9 -4
  418. package/dist/theme/palette-presets.js.map +1 -1
  419. package/dist/theme/palette-store.js.map +1 -1
  420. package/dist/theme/text-size.d.ts +157 -0
  421. package/dist/theme/text-size.js +121 -0
  422. package/dist/theme/text-size.js.map +1 -0
  423. package/dist/wizard/stepper-nav.d.ts +8 -3
  424. package/dist/wizard.d.ts +8 -3
  425. package/package.json +1 -1
  426. package/src/admin/admin-parts.ts +9 -2
  427. package/src/admin/invitations-panel.tsx +36 -29
  428. package/src/admin/user-roster.tsx +17 -72
  429. package/src/auth/auth-errors.ts +68 -7
  430. package/src/auth/reset-password-form.tsx +6 -2
  431. package/src/auth/verify-email.tsx +14 -2
  432. package/src/billing/billing-banner.tsx +205 -0
  433. package/src/billing/billing-labels.ts +224 -0
  434. package/src/billing/billing-lock.ts +75 -0
  435. package/src/billing/billing-standing.ts +72 -0
  436. package/src/billing/plan-card.tsx +458 -0
  437. package/src/billing/plan-limit-notice.tsx +145 -0
  438. package/src/billing/plan-limit.ts +53 -0
  439. package/src/billing/plan-price.ts +101 -0
  440. package/src/billing/subscription-actions.tsx +76 -0
  441. package/src/billing/subscription-status-chip.tsx +95 -0
  442. package/src/components/account-chips.tsx +36 -10
  443. package/src/components/alert-banner.tsx +11 -6
  444. package/src/components/amount-input.tsx +5 -5
  445. package/src/components/appearance-labels.ts +40 -0
  446. package/src/components/autocomplete.tsx +2 -2
  447. package/src/components/breadcrumbs.tsx +3 -3
  448. package/src/components/bulk-action-bar.tsx +11 -14
  449. package/src/components/calculator.tsx +4 -3
  450. package/src/components/calendar-heatmap.tsx +5 -5
  451. package/src/components/chart-height.ts +30 -0
  452. package/src/components/chart-zoom.tsx +6 -1
  453. package/src/components/checkbox-group.tsx +2 -2
  454. package/src/components/checkbox.tsx +62 -20
  455. package/src/components/chip.tsx +105 -24
  456. package/src/components/choice-card.tsx +15 -10
  457. package/src/components/column-mapper.tsx +1 -1
  458. package/src/components/combobox-core.tsx +8 -7
  459. package/src/components/combobox.tsx +8 -8
  460. package/src/components/confirm-dialog.tsx +20 -1
  461. package/src/components/country-select.tsx +1 -1
  462. package/src/components/currency-select.tsx +3 -3
  463. package/src/components/data-table-filter-popover.tsx +7 -1
  464. package/src/components/data-table.tsx +160 -43
  465. package/src/components/date-picker.tsx +12 -9
  466. package/src/components/description-list.tsx +2 -2
  467. package/src/components/dialog-frame.tsx +2 -1
  468. package/src/components/disclosure.tsx +3 -2
  469. package/src/components/dropdown.tsx +10 -2
  470. package/src/components/facing-pair.ts +12 -5
  471. package/src/components/field-parts.tsx +190 -7
  472. package/src/components/field-sync.tsx +17 -3
  473. package/src/components/field.tsx +2 -2
  474. package/src/components/floating-panel.tsx +7 -4
  475. package/src/components/focus-ring.ts +12 -0
  476. package/src/components/form-actions.tsx +55 -18
  477. package/src/components/full-bleed-dialog.tsx +18 -4
  478. package/src/components/image-grid.tsx +1 -1
  479. package/src/components/inline-edit-field.tsx +6 -3
  480. package/src/components/legal-page.tsx +28 -2
  481. package/src/components/legal.tsx +19 -1
  482. package/src/components/lightbox.tsx +24 -2
  483. package/src/components/line-items.tsx +7 -1
  484. package/src/components/list.tsx +36 -10
  485. package/src/components/measured-grid.tsx +49 -24
  486. package/src/components/menu-item.tsx +2 -2
  487. package/src/components/mini-calendar.tsx +8 -4
  488. package/src/components/month-picker.tsx +9 -5
  489. package/src/components/nav-pills.tsx +1 -1
  490. package/src/components/number-input.tsx +14 -7
  491. package/src/components/numpad-sheet.tsx +2 -2
  492. package/src/components/one-time-code-input.tsx +2 -2
  493. package/src/components/page-contents.tsx +2 -2
  494. package/src/components/phone-input.tsx +2 -2
  495. package/src/components/pie-chart.tsx +19 -9
  496. package/src/components/popover.tsx +22 -5
  497. package/src/components/row-actions.tsx +344 -0
  498. package/src/components/scroll-area.tsx +1 -1
  499. package/src/components/search-field.tsx +4 -2
  500. package/src/components/series-chart-budget.ts +40 -8
  501. package/src/components/series-chart-ticks.ts +10 -0
  502. package/src/components/series-chart.tsx +123 -72
  503. package/src/components/settings-fields.tsx +81 -2
  504. package/src/components/share-card.tsx +10 -0
  505. package/src/components/sign-chip.tsx +28 -4
  506. package/src/components/signature-pad.tsx +13 -7
  507. package/src/components/slider.tsx +22 -9
  508. package/src/components/sparkline.tsx +11 -3
  509. package/src/components/stat-tile.tsx +70 -14
  510. package/src/components/swipeable-row.tsx +2 -1
  511. package/src/components/switch.tsx +57 -23
  512. package/src/components/table.tsx +2 -2
  513. package/src/components/text-link.tsx +1 -1
  514. package/src/components/text.tsx +11 -6
  515. package/src/components/tile-radio.tsx +4 -1
  516. package/src/components/toast.tsx +27 -7
  517. package/src/components/toggle-group.tsx +99 -12
  518. package/src/components/toggle-legend.tsx +53 -8
  519. package/src/components/translation-review.tsx +10 -5
  520. package/src/components/tree-view.tsx +3 -2
  521. package/src/components/treemap.tsx +27 -10
  522. package/src/components/ui.tsx +331 -145
  523. package/src/components/user-avatar.tsx +1 -1
  524. package/src/demo/demo-banner.tsx +5 -0
  525. package/src/feedback/feedback-dialog.tsx +3 -3
  526. package/src/feedback/feedback-inbox.tsx +2 -2
  527. package/src/feedback/feedback-thread.tsx +3 -3
  528. package/src/hooks/use-anchored-panel.ts +67 -5
  529. package/src/hooks/use-breakpoint.ts +121 -0
  530. package/src/hooks/use-large-text.ts +41 -0
  531. package/src/hooks/use-windowed-rows.ts +168 -12
  532. package/src/i18n/defaults.ts +8 -0
  533. package/src/i18n/german.ts +105 -1
  534. package/src/i18n/kit-labels.tsx +12 -0
  535. package/src/i18n/locales/es.ts +96 -1
  536. package/src/i18n/locales/fr.ts +100 -1
  537. package/src/i18n/locales/hu.ts +98 -1
  538. package/src/i18n/locales/it.ts +101 -1
  539. package/src/i18n/locales/zh.ts +92 -1
  540. package/src/i18n/review.ts +15 -0
  541. package/src/index.ts +82 -8
  542. package/src/landing/landing-actions.tsx +9 -5
  543. package/src/landing/public-header.tsx +4 -4
  544. package/src/landing/routing.tsx +22 -5
  545. package/src/lib/cn.ts +13 -2
  546. package/src/rhf/fields.tsx +1 -1
  547. package/src/rhf/form.tsx +2 -2
  548. package/src/search/command-palette.tsx +10 -9
  549. package/src/settings/settings-labels.ts +13 -1
  550. package/src/settings/settings-layout.tsx +2 -1
  551. package/src/settings/use-account-appearance.ts +148 -0
  552. package/src/settings/use-settings-route.ts +3 -4
  553. package/src/shell/app-shell.tsx +278 -54
  554. package/src/shell/auth-layout.tsx +1 -1
  555. package/src/shell/option-switcher-menu.tsx +1 -1
  556. package/src/shell/top-bar-brand.tsx +3 -1
  557. package/src/shell/topbar-action-menu.tsx +3 -3
  558. package/src/shell/topbar-controls.tsx +4 -4
  559. package/src/shell.ts +7 -1
  560. package/src/theme/contrast-tokens.ts +112 -0
  561. package/src/theme/contrast.ts +224 -0
  562. package/src/theme/palette-presets.ts +24 -4
  563. package/src/theme/palette-store.ts +6 -1
  564. package/src/theme/text-size.ts +267 -0
  565. package/tokens.css +143 -1
@@ -23,6 +23,10 @@ export function uiKitLabelsIt(numberLocale = "it-IT"): UiKitLabels {
23
23
  !seconds || seconds <= 0
24
24
  ? "Troppi tentativi. Attenda un momento e riprovi."
25
25
  : `Troppi tentativi. Riprovi tra ${wait(seconds)}.`;
26
+ // 0.32.0 — when a trial or a grant ends, as `inDays` in src/billing/billing-labels.ts:
27
+ // 0 (or less) is today, 1 tomorrow.
28
+ const inDays = (days: number) =>
29
+ days <= 0 ? "oggi" : days === 1 ? "domani" : `tra ${n(days)} ${plural(days, "giorno", "giorni")}`;
26
30
 
27
31
  return {
28
32
  feedbackAttachment: {
@@ -801,6 +805,10 @@ export function uiKitLabelsIt(numberLocale = "it-IT"): UiKitLabels {
801
805
  disclaimer: {
802
806
  title: "Responsabilità per contenuti e link",
803
807
  body: "Questo è un progetto privato e non commerciale, offerto nell’ambito di una beta chiusa, senza garanzia. I siti esterni a cui rimandiamo sono di responsabilità dei rispettivi gestori; non abbiamo alcun controllo sui loro contenuti.",
808
+ // 0.32.0 — the commercial variant (docs/billing-harmonization.md §8). "Piano"
809
+ // and "abbonamento" as the `billing` namespace.
810
+ commercial:
811
+ "Questo è un servizio commerciale. I piani a pagamento sono venduti dal nostro rivenditore, che agisce in qualità di Merchant of Record: vende l’abbonamento in nome proprio, incassa il pagamento, emette la fattura e gestisce l’IVA, e all’acquisto si applicano le sue condizioni di vendita. Ci impegniamo affinché i contenuti di questo servizio siano corretti, ma non possiamo garantire che siano completi o aggiornati. I siti esterni a cui rimandiamo sono di responsabilità dei rispettivi gestori; non abbiamo alcun controllo sui loro contenuti.",
804
812
  },
805
813
  },
806
814
  privacy: {
@@ -982,6 +990,7 @@ export function uiKitLabelsIt(numberLocale = "it-IT"): UiKitLabels {
982
990
  resendIn: (seconds) => `Invia di nuovo tra ${n(seconds)} s`,
983
991
  resent: "Email di conferma inviata",
984
992
  resendError: "Impossibile inviare l’email di conferma",
993
+ rateLimited,
985
994
  banner: "Confermi il Suo indirizzo email.",
986
995
  dismiss: "Non ora",
987
996
  },
@@ -1252,6 +1261,7 @@ export function uiKitLabelsIt(numberLocale = "it-IT"): UiKitLabels {
1252
1261
  inflow: "Entrata",
1253
1262
  // "premere per…": an instruction without a tu imperative, as the kit's Italian is formal.
1254
1263
  direction: (current, next) => `Direzione: ${current} – premere per passare a ${next}`,
1264
+ switchTo: (next) => `Passa a ${next}`,
1255
1265
  },
1256
1266
  columnMapper: {
1257
1267
  paste: "Incolla una tabella",
@@ -1374,7 +1384,7 @@ export function uiKitLabelsIt(numberLocale = "it-IT"): UiKitLabels {
1374
1384
  },
1375
1385
  security: {
1376
1386
  title: "Sicurezza",
1377
- help: "Come accede: password, codici 2FA, passkey e sessioni.",
1387
+ help: "Come accede, e su quali dispositivi la sessione è aperta.",
1378
1388
  },
1379
1389
  notifications: {
1380
1390
  title: "Notifiche",
@@ -1425,6 +1435,96 @@ export function uiKitLabelsIt(numberLocale = "it-IT"): UiKitLabels {
1425
1435
  "I dati di esempio vengono reimpostati regolarmente; quello che ha creato nella demo viene eliminato.",
1426
1436
  restart: "Avvia una nuova demo",
1427
1437
  },
1438
+ // 0.32.0 — docs/billing-harmonization.md §7, §10 and §12.24: "piano" is what is bought
1439
+ // (Free, Pro), "abbonamento" the standing arrangement and the settings group;
1440
+ // "disdire", the word for ending a contract. "Lei" in sentences, the imperative on
1441
+ // buttons, as everywhere in this catalogue.
1442
+ billing: {
1443
+ group: "Abbonamento",
1444
+ plans: "Piani",
1445
+ interval: "Periodo di fatturazione",
1446
+ yearly: "Annuale",
1447
+ monthly: "Mensile",
1448
+ // As `currency.currency`.
1449
+ currency: "Valuta",
1450
+ perYear: "all’anno",
1451
+ perMonth: "al mese",
1452
+ vatIncluded: "IVA inclusa",
1453
+ free: "Gratuito",
1454
+ notOffered: "Non disponibile per questo periodo di fatturazione",
1455
+ // As `progressBar.unlimited`.
1456
+ unlimited: "Illimitato",
1457
+ limits: "Limiti",
1458
+ features: "Incluso",
1459
+ current: "Piano attuale",
1460
+ choose: (plan) => `Scegli ${plan}`,
1461
+ upgrade: (plan) => `Passa a ${plan}`,
1462
+ // "Passare a" either way: Italian has no plain verb for a downgrade.
1463
+ downgrade: (plan) => `Passa a ${plan}`,
1464
+ isCurrent: "Questo è il Suo piano attuale.",
1465
+ pickFirst: "Scelga prima un piano.",
1466
+ // Agreeing with "abbonamento"; "scaduto", as `invitations.status.expired`.
1467
+ status: {
1468
+ trialing: "In prova",
1469
+ active: "Attivo",
1470
+ past_due: "Pagamento in ritardo",
1471
+ canceled: "Disdetto",
1472
+ expired: "Scaduto",
1473
+ comped: "In omaggio",
1474
+ },
1475
+ trialEnding: (days) =>
1476
+ `Il Suo periodo di prova termina ${inDays(days)}. In seguito potrà ancora vedere tutto, ma per apportare modifiche servirà un piano.`,
1477
+ grantEnding: (days) =>
1478
+ `Il Suo accesso gratuito termina ${inDays(days)}. In seguito potrà ancora vedere tutto, ma per apportare modifiche servirà un piano.`,
1479
+ paymentFailed:
1480
+ "Il Suo ultimo pagamento non è andato a buon fine. Aggiorni il metodo di pagamento per mantenere il Suo piano.",
1481
+ planEnded:
1482
+ "Il Suo piano è terminato. Può ancora vedere ed esportare tutto; scelga un piano per apportare di nuovo modifiche.",
1483
+ // Never why: the owner's payment status is the owner's personal data (§12.6).
1484
+ guestReadOnly: (item) =>
1485
+ item
1486
+ ? `«${item}» per ora è in sola lettura; il proprietario può rimuovere questa limitazione.`
1487
+ : "Per ora è in sola lettura; il proprietario può rimuovere questa limitazione.",
1488
+ processing:
1489
+ "Il Suo pagamento è in elaborazione. Il Suo piano inizia non appena viene confermato; questa pagina si aggiorna da sola.",
1490
+ choosePlan: "Scegli un piano",
1491
+ updatePayment: "Aggiorna il metodo di pagamento",
1492
+ checkAgain: "Verifica di nuovo",
1493
+ lockReason: "Il Suo piano è terminato. Scelga un piano per apportare di nuovo modifiche.",
1494
+ // As `characterCount.limitReached` ("Limite di caratteri raggiunto").
1495
+ limitReached: "Limite del piano raggiunto",
1496
+ limitUpgrade: "Per aggiungerne altri, scelga un piano con un limite più alto.",
1497
+ limitContact: "Per aggiungerne altri, ci chieda un limite più alto.",
1498
+ askForMore: "Chiedi di più",
1499
+ // Both figures arrive formatted; "di", as `characterCount.count`.
1500
+ usage: (used, limit) => `${used} di ${limit}`,
1501
+ contactSubject: (dimension) => `Limite del piano: ${dimension}`,
1502
+ manage: "Pagamento e fatture",
1503
+ cancel: "Disdici l’abbonamento",
1504
+ waitingChanges: (count) =>
1505
+ `${n(count)} ${plural(count, "modifica in attesa", "modifiche in attesa")} di un piano`,
1506
+ // "Scarta", as `wizard.cancelConfirmLabel`.
1507
+ discardWaiting: "Scarta le modifiche in attesa",
1508
+ },
1509
+ // 0.32.0 — docs/text-size-harmonization.md §6: the text-size and contrast settings in
1510
+ // the "Aspetto" group.
1511
+ appearance: {
1512
+ textSize: "Dimensione del testo",
1513
+ textSizeHelp: "Lettere più grandi e un layout che fa loro spazio.",
1514
+ textSizes: { normal: "Normale", large: "Grande", xlarge: "Molto grande" },
1515
+ contrast: "Contrasto",
1516
+ contrastHelp:
1517
+ "Il contrasto aumentato scurisce i testi tenui e le linee e ispessisce i riquadri di focus. «Sistema» segue l’impostazione di questo dispositivo.",
1518
+ contrastModes: { system: "Sistema", standard: "Standard", more: "Aumentato" },
1519
+ },
1520
+ rowActions: {
1521
+ actions: "Azioni",
1522
+ actionsFor: (name) => `Azioni per ${name}`,
1523
+ },
1524
+ appShellMore: {
1525
+ more: "Altro",
1526
+ moreTitle: "Altre pagine",
1527
+ },
1428
1528
  };
1429
1529
  }
1430
1530
 
@@ -20,6 +20,9 @@ export function uiKitLabelsZh(numberLocale = "zh-CN"): UiKitLabels {
20
20
  seconds < 60 ? `${n(Math.ceil(seconds))} 秒` : `${n(Math.ceil(seconds / 60))} 分钟`;
21
21
  const rateLimited = (seconds?: number) =>
22
22
  !seconds || seconds <= 0 ? "尝试次数过多,请稍候再试。" : `尝试次数过多,请 ${wait(seconds)}后重试。`;
23
+ // 0.32.0 — when a trial or a grant ends, as `inDays` in src/billing/billing-labels.ts:
24
+ // 0 (or less) is today, 1 tomorrow. A numeral brings its own leading space.
25
+ const inDays = (days: number) => (days <= 0 ? "今天" : days === 1 ? "明天" : ` ${n(days)} 天后`);
23
26
 
24
27
  return {
25
28
  feedbackAttachment: {
@@ -777,6 +780,10 @@ export function uiKitLabelsZh(numberLocale = "zh-CN"): UiKitLabels {
777
780
  disclaimer: {
778
781
  title: "内容与链接的责任",
779
782
  body: "这是一个私人的非商业项目,在封闭测试期间提供,不作任何保证。我们所链接的外部网站由其各自的运营者负责;我们无法控制其内容。",
783
+ // 0.32.0 — the commercial variant (docs/billing-harmonization.md §8). "套餐"
784
+ // and "订阅" as the `billing` namespace.
785
+ commercial:
786
+ "这是一项商业服务。付费套餐由我们的经销商销售,该经销商作为记录商户(Merchant of Record)行事:它以自己的名义销售订阅、收取款项、开具发票并处理增值税,且该笔购买适用其销售条款。我们尽力确保本服务的内容准确,但无法保证其完整或最新。我们所链接的外部网站由其各自的运营者负责;我们无法控制其内容。",
780
787
  },
781
788
  },
782
789
  privacy: {
@@ -949,6 +956,7 @@ export function uiKitLabelsZh(numberLocale = "zh-CN"): UiKitLabels {
949
956
  resendIn: (seconds) => `${n(seconds)} 秒后可重新发送`,
950
957
  resent: "确认邮件已发送",
951
958
  resendError: "无法发送确认邮件",
959
+ rateLimited,
952
960
  banner: "请确认您的电子邮箱地址。",
953
961
  dismiss: "暂不",
954
962
  },
@@ -1195,6 +1203,7 @@ export function uiKitLabelsZh(numberLocale = "zh-CN"): UiKitLabels {
1195
1203
  outflow: "支出",
1196
1204
  inflow: "收入",
1197
1205
  direction: (current, next) => `方向:${current},切换为${next}`,
1206
+ switchTo: (next) => `切换为${next}`,
1198
1207
  },
1199
1208
  columnMapper: {
1200
1209
  paste: "粘贴表格",
@@ -1308,7 +1317,7 @@ export function uiKitLabelsZh(numberLocale = "zh-CN"): UiKitLabels {
1308
1317
  },
1309
1318
  security: {
1310
1319
  title: "安全",
1311
- help: "您的登录方式:密码、双重验证码、通行密钥和会话。",
1320
+ help: "您的登录方式,以及已在哪些设备上登录。",
1312
1321
  },
1313
1322
  notifications: {
1314
1323
  title: "通知",
@@ -1357,6 +1366,88 @@ export function uiKitLabelsZh(numberLocale = "zh-CN"): UiKitLabels {
1357
1366
  endedSandbox: "示例数据会定期重置;您在演示中创建的内容会被删除。",
1358
1367
  restart: "开始新的演示",
1359
1368
  },
1369
+ // 0.32.0 — docs/billing-harmonization.md §7, §10 and §12.24: "套餐" is what is bought
1370
+ // (Free, Pro), "订阅" the standing arrangement and the settings group. "您".
1371
+ billing: {
1372
+ group: "订阅",
1373
+ plans: "套餐",
1374
+ interval: "计费周期",
1375
+ yearly: "按年",
1376
+ monthly: "按月",
1377
+ // As `currency.currency`.
1378
+ currency: "货币",
1379
+ perYear: "每年",
1380
+ perMonth: "每月",
1381
+ vatIncluded: "含增值税",
1382
+ free: "免费",
1383
+ notOffered: "此计费周期不提供",
1384
+ // As `progressBar.unlimited`.
1385
+ unlimited: "无限制",
1386
+ limits: "限额",
1387
+ features: "包含内容",
1388
+ current: "当前套餐",
1389
+ choose: (plan) => `选择 ${plan}`,
1390
+ upgrade: (plan) => `升级到 ${plan}`,
1391
+ downgrade: (plan) => `切换到 ${plan}`,
1392
+ isCurrent: "这是您当前的套餐。",
1393
+ pickFirst: "请先选择一个套餐。",
1394
+ status: {
1395
+ trialing: "试用中",
1396
+ active: "有效",
1397
+ past_due: "付款逾期",
1398
+ canceled: "已取消",
1399
+ // As `invitations.status.expired`.
1400
+ expired: "已过期",
1401
+ comped: "免费赠送",
1402
+ },
1403
+ trialEnding: (days) =>
1404
+ `您的试用期将于${inDays(days)}结束。之后您仍可查看所有内容,但需要套餐才能进行修改。`,
1405
+ grantEnding: (days) =>
1406
+ `您的免费使用权将于${inDays(days)}结束。之后您仍可查看所有内容,但需要套餐才能进行修改。`,
1407
+ paymentFailed: "您的上一笔付款未成功。请更新付款方式,以保留您的套餐。",
1408
+ planEnded: "您的套餐已结束。您仍可查看和导出所有内容;选择套餐后即可再次进行修改。",
1409
+ // Never why: the owner's payment status is the owner's personal data (§12.6).
1410
+ guestReadOnly: (item) =>
1411
+ item
1412
+ ? `“${item}”目前为只读;其所有者可以解除此限制。`
1413
+ : "此内容目前为只读;其所有者可以解除此限制。",
1414
+ processing: "您的付款正在处理中。确认后您的套餐即会生效;此页面会自动更新。",
1415
+ choosePlan: "选择套餐",
1416
+ updatePayment: "更新付款方式",
1417
+ checkAgain: "再次检查",
1418
+ lockReason: "您的套餐已结束。选择套餐后即可再次进行修改。",
1419
+ // As `characterCount.limitReached` ("已达到字符数上限").
1420
+ limitReached: "已达到套餐上限",
1421
+ limitUpgrade: "如需添加更多,请选择上限更高的套餐。",
1422
+ limitContact: "如需添加更多,请向我们申请更高的上限。",
1423
+ askForMore: "申请提高上限",
1424
+ // Both figures arrive formatted; written as `characterCount.count` writes them.
1425
+ usage: (used, limit) => `${used}/${limit}`,
1426
+ contactSubject: (dimension) => `套餐上限:${dimension}`,
1427
+ manage: "付款与发票",
1428
+ cancel: "取消订阅",
1429
+ waitingChanges: (count) => `${n(count)} 项修改正在等待套餐`,
1430
+ // "放弃", as `wizard.cancelConfirmLabel`.
1431
+ discardWaiting: "放弃等待中的修改",
1432
+ },
1433
+ // 0.32.0 — docs/text-size-harmonization.md §6: the text-size and contrast settings in
1434
+ // the "外观" group.
1435
+ appearance: {
1436
+ textSize: "文字大小",
1437
+ textSizeHelp: "更大的文字,以及为其留出空间的布局。",
1438
+ textSizes: { normal: "标准", large: "大", xlarge: "特大" },
1439
+ contrast: "对比度",
1440
+ contrastHelp: "增强对比度会加深浅色文字和线条,并加粗焦点框。“跟随系统”沿用此设备的设置。",
1441
+ contrastModes: { system: "跟随系统", standard: "标准", more: "增强" },
1442
+ },
1443
+ rowActions: {
1444
+ actions: "操作",
1445
+ actionsFor: (name) => `${name} 的操作`,
1446
+ },
1447
+ appShellMore: {
1448
+ more: "更多",
1449
+ moreTitle: "更多页面",
1450
+ },
1360
1451
  };
1361
1452
  }
1362
1453
 
@@ -267,6 +267,8 @@ export const KIT_LABEL_SAMPLES: Readonly<Record<string, readonly (readonly unkno
267
267
  "ibanInput.country": [["{{code}}"]],
268
268
  "ibanInput.length": [[20, 21]],
269
269
  "signChip.direction": [["{{current}}", "{{next}}"]],
270
+ "signChip.switchTo": [["{{next}}"]],
271
+ "rowActions.actionsFor": [["{{name}}"]],
270
272
  "columnMapper.readError": [["{{name}}"]],
271
273
  "columnMapper.summary": [
272
274
  [1, 1],
@@ -309,6 +311,7 @@ export const KIT_LABEL_SAMPLES: Readonly<Record<string, readonly (readonly unkno
309
311
  "register.rateLimited": [[], [30], [300]],
310
312
  "forgotPassword.rateLimited": [[], [30], [300]],
311
313
  "resetPassword.rateLimited": [[], [30], [300]],
314
+ "verifyEmail.rateLimited": [[], [30], [300]],
312
315
  "emailChange.emailTagUse": [["{{address}}"]],
313
316
  "emailChange.pending": [["{{newEmail}}"]],
314
317
  "emailChange.pendingHint": [["{{currentEmail}}"]],
@@ -351,4 +354,16 @@ export const KIT_LABEL_SAMPLES: Readonly<Record<string, readonly (readonly unkno
351
354
  [3, 12],
352
355
  ],
353
356
  "demo.minutesLeft": one,
357
+ // 0.32.0: the subscription parts (docs/billing-harmonization.md §7). A trial or a grant
358
+ // ending today, tomorrow and in five days; the guest's notice with and without the
359
+ // item's name.
360
+ "billing.choose": [["{{plan}}"]],
361
+ "billing.upgrade": [["{{plan}}"]],
362
+ "billing.downgrade": [["{{plan}}"]],
363
+ "billing.trialEnding": [[0], [1], [5]],
364
+ "billing.grantEnding": [[0], [1], [5]],
365
+ "billing.guestReadOnly": [["{{item}}"], [undefined]],
366
+ "billing.usage": [["{{used}}", "{{limit}}"]],
367
+ "billing.contactSubject": [["{{dimension}}"]],
368
+ "billing.waitingChanges": one,
354
369
  };
package/src/index.ts CHANGED
@@ -19,11 +19,17 @@ export { useMediaQuery } from "./hooks/use-media-query";
19
19
  export { useBodyScrollLock } from "./hooks/use-body-scroll-lock";
20
20
  export { useAnchoredRect } from "./hooks/use-anchored-rect";
21
21
  export type { AnchorRect } from "./hooks/use-anchored-rect";
22
- export { useAnchoredPanel, anchoredPanelPlacement, useVisualViewport } from "./hooks/use-anchored-panel";
22
+ export {
23
+ useAnchoredPanel,
24
+ anchoredPanelPlacement,
25
+ useVisualViewport,
26
+ readKeyboardInset,
27
+ } from "./hooks/use-anchored-panel";
23
28
  export type {
24
29
  AnchoredPanel,
25
30
  AnchoredPanelOptions,
26
31
  ViewportBox,
32
+ KeyboardInsetOptions,
27
33
  } from "./hooks/use-anchored-panel";
28
34
  export { useEscapeKey, useOutsideClick } from "./hooks/use-dismiss";
29
35
  // Focus containment for an overlay, and a live region for a change that moves no focus.
@@ -151,7 +157,7 @@ export * from "./components/icon-picker";
151
157
  export * from "./components/choice-card";
152
158
  export * from "./components/autocomplete";
153
159
  export * from "./components/measured-grid";
154
- export { useWindowedRows } from "./hooks/use-windowed-rows";
160
+ export { useWindowedRows, WINDOWED_ROW_INDEX } from "./hooks/use-windowed-rows";
155
161
  export type { WindowedRows } from "./hooks/use-windowed-rows";
156
162
  // Named, not `export *`: file-button.tsx also holds the screening helpers the
157
163
  // dropzone shares, which are internal.
@@ -260,7 +266,14 @@ export type {
260
266
  // The toast layer over sonner (an OPTIONAL peer, loaded lazily): `toast` mirrors sonner's
261
267
  // API so apps migrate by swapping the import; `<Toaster>` carries the placement, theme,
262
268
  // tones and z-index both apps had wired by hand.
263
- export { toast, Toaster, DEFAULT_TOAST_LABELS, TOAST_ACTION_DURATION } from "./components/toast";
269
+ export {
270
+ toast,
271
+ Toaster,
272
+ DEFAULT_TOAST_LABELS,
273
+ TOAST_ACTION_DURATION,
274
+ TOASTER_OFFSET_TOP,
275
+ TOASTER_OFFSET_BOTTOM,
276
+ } from "./components/toast";
264
277
  export type {
265
278
  ToastId,
266
279
  ToastAction,
@@ -485,6 +498,7 @@ export type {
485
498
  LegalTextSectionLabels,
486
499
  LegalOperatorSectionLabels,
487
500
  LegalFramedSectionLabels,
501
+ LegalDisclaimerSectionLabels,
488
502
  } from "./components/legal";
489
503
  export { LegalPage, LegalKitSection, LegalAcceptCheckbox, LEGAL_SKELETON } from "./components/legal-page";
490
504
 
@@ -507,7 +521,7 @@ export type { RegisterFormProps, RegisterLabels, RegisterValues } from "./auth/r
507
521
  export { CompleteNameDialog, DEFAULT_COMPLETE_NAME_LABELS } from "./auth/complete-name-dialog";
508
522
  export type { CompleteNameDialogProps, CompleteNameLabels, CompleteNameValues } from "./auth/complete-name-dialog";
509
523
  export { taggedEmail } from "./auth/email-tag";
510
- export { isAuthError, authErrorCode } from "./auth/auth-errors";
524
+ export { isAuthError, authErrorCode, isBillingError } from "./auth/auth-errors";
511
525
  export type { AuthErrorCode } from "./auth/auth-errors";
512
526
  export { ForgotPasswordForm, DEFAULT_FORGOT_PASSWORD_LABELS } from "./auth/forgot-password-form";
513
527
  export type { ForgotPasswordFormProps, ForgotPasswordLabels } from "./auth/forgot-password-form";
@@ -545,7 +559,7 @@ export type { CompanySwitcherProps, CompanySwitcherLabels, CompanySwitcherCompan
545
559
  // invitations panel, and the account's own settings — email change, sessions, deletion,
546
560
  // export. Callbacks only; the confirmation level is the server's.
547
561
  export { isRateLimited, retryAfterSeconds } from "./auth/auth-errors";
548
- export type { AccountErrorCode, DemoErrorCode, KitErrorCode } from "./auth/auth-errors";
562
+ export type { AccountErrorCode, BillingErrorCode, DemoErrorCode, KitErrorCode } from "./auth/auth-errors";
549
563
  export { EmailChangeSetting, DEFAULT_EMAIL_CHANGE_LABELS } from "./account/email-change-setting";
550
564
  export type {
551
565
  EmailChangeSettingProps,
@@ -667,9 +681,10 @@ export {
667
681
  settingsHref,
668
682
  } from "./settings/settings-catalogue";
669
683
  export type { SettingsGroup, SettingsEntry, SettingsSearchEntriesOptions } from "./settings/settings-catalogue";
670
- export { DEFAULT_SETTINGS_LABELS } from "./settings/settings-labels";
684
+ export { DEFAULT_SETTINGS_LABELS, useSettingsLabels } from "./settings/settings-labels";
671
685
  export type { SettingsLabels, SettingsGroupLabels, SettingsCoreGroup } from "./settings/settings-labels";
672
- // Only the language follows the account (§6.2).
686
+ // The language follows the account (§6.2); since 0.32 so do the text size and the
687
+ // contrast (useAccountAppearance below, docs/text-size-harmonization.md §6).
673
688
  export { useAccountLanguage, resolveAccountLanguage, matchOfferedLanguage } from "./settings/use-account-language";
674
689
  export type {
675
690
  UseAccountLanguageOptions,
@@ -709,7 +724,13 @@ export {
709
724
  NEXT_PARAM,
710
725
  DEFAULT_LAST_VISITED_EXCLUDES,
711
726
  } from "./landing/routing";
712
- export type { RootEntryProps, RedirectIfAuthedProps, LastVisitedPageOptions, PathPattern } from "./landing/routing";
727
+ export type {
728
+ RootEntryProps,
729
+ RedirectIfAuthedProps,
730
+ RoutingSession,
731
+ LastVisitedPageOptions,
732
+ PathPattern,
733
+ } from "./landing/routing";
713
734
  export { PublicHeader } from "./landing/public-header";
714
735
  export type { PublicHeaderProps, PublicHeaderBrand } from "./landing/public-header";
715
736
  export { DEFAULT_DEMO_LABELS, useDemoLabels } from "./demo/demo-labels";
@@ -732,8 +753,61 @@ export type {
732
753
  LegalSkeletonEntry,
733
754
  LegalSkeletonPage,
734
755
  LegalSectionOwner,
756
+ LegalDisclaimerVariant,
735
757
  } from "./components/legal-page";
736
758
 
759
+ // ── 0.32.0: text size and contrast (docs/text-size-harmonization.md) ──
760
+ export * from "./theme/text-size";
761
+ export * from "./theme/contrast";
762
+ export { useBreakpoint, usePhoneLayout, breakpointQuery, BREAKPOINT_REM } from "./hooks/use-breakpoint";
763
+ export type { Breakpoint, BreakpointVariant } from "./hooks/use-breakpoint";
764
+ export { useAccountAppearance, resolveAccountAppearance } from "./settings/use-account-appearance";
765
+ export type {
766
+ AppearanceSource,
767
+ AccountAppearanceFields,
768
+ DeviceAppearance,
769
+ AccountAppearancePatch,
770
+ ResolvedAccountAppearance,
771
+ UseAccountAppearanceOptions,
772
+ AccountAppearance,
773
+ } from "./settings/use-account-appearance";
774
+ export { DEFAULT_APPEARANCE_LABELS, useAppearanceLabels } from "./components/appearance-labels";
775
+ // The behaviours at Large (§4, §10.7–10.9): a row's actions, the hooks components read.
776
+ export { RowActions, rowActionsColumn, DEFAULT_ROW_ACTIONS_LABELS } from "./components/row-actions";
777
+ export type {
778
+ RowAction,
779
+ RowActionList,
780
+ RowActionsLabels,
781
+ RowActionsProps,
782
+ RowActionsCollapse,
783
+ RowActionsSize,
784
+ RowActionsColumnOptions,
785
+ } from "./components/row-actions";
786
+ export { useLargeText, useCoarsePointer, useInlineFacts } from "./hooks/use-large-text";
787
+ export type { AppearanceLabels } from "./components/appearance-labels";
788
+
789
+ // ── 0.32.0: billing — plans, standing, banners, the limit notice (docs/billing-harmonization.md §7) ──
790
+ export { DEFAULT_BILLING_LABELS, useBillingLabels, SUBSCRIPTION_STATUSES } from "./billing/billing-labels";
791
+ export type { BillingLabels, SubscriptionStatus } from "./billing/billing-labels";
792
+ export { BILLING_INTERVALS, planPrice, minorToMajor, formatPlanPrice, billingCurrencyFor } from "./billing/plan-price";
793
+ export type { BillingInterval, BillingCurrency, PlanIntervalPrices, PlanPrices, PlanPriceAnswer } from "./billing/plan-price";
794
+ export { PlanCard, PlanPicker, planRelation } from "./billing/plan-card";
795
+ export type { BillingPlan, PlanRelation, PlanCardProps, PlanPickerProps, PlanChoice } from "./billing/plan-card";
796
+ export { SubscriptionStatusChip, SUBSCRIPTION_STATUS_TONES } from "./billing/subscription-status-chip";
797
+ export type { SubscriptionStatusChipProps } from "./billing/subscription-status-chip";
798
+ export { BillingBanner } from "./billing/billing-banner";
799
+ export type { BillingBannerProps, BillingBannerKind } from "./billing/billing-banner";
800
+ export { PlanLimitNotice, planLimitMailto } from "./billing/plan-limit-notice";
801
+ export type { PlanLimitNoticeProps } from "./billing/plan-limit-notice";
802
+ export { isPlanLimit } from "./billing/plan-limit";
803
+ export type { PlanLimitRefusal } from "./billing/plan-limit";
804
+ export { combineWriteLocks, useBillingLockReason } from "./billing/billing-lock";
805
+ export type { WriteLockSource, CombinedWriteLock, BillingLockReasonOptions } from "./billing/billing-lock";
806
+ export { billingLockAt, isBillingReadOnly, billingDaysLeft } from "./billing/billing-standing";
807
+ export type { BillingStanding } from "./billing/billing-standing";
808
+ export { SubscriptionActions } from "./billing/subscription-actions";
809
+ export type { SubscriptionActionsProps } from "./billing/subscription-actions";
810
+
737
811
  // ── 0.22.0: the inputs round (kastlan's, keksdose's and Kurvenschmiede's audits) ──
738
812
  export * from "./components/checkbox-group";
739
813
  export * from "./components/one-time-code-input";
@@ -23,8 +23,10 @@ export interface LandingActionsProps extends Omit<ComponentPropsWithoutRef<"div"
23
23
  session: LandingSession;
24
24
  access: AccessChoice;
25
25
  /** "Try the demo" without a session, "Continue the demo" with a demo one. Default
26
- * `/demo`, which starts a demo — or, for a live one, continues it (§3.1). */
27
- demoHref?: string;
26
+ * `/demo`, which starts a demo — or, for a live one, continues it (§3.1). `null`
27
+ * (0.31.1): the app has no demo yet, and the action is left out — "Request access"
28
+ * stands alone (Kurvenschmiede's 0.31 adoption). */
29
+ demoHref?: string | null;
28
30
  /** "Open app" for a real session: the resume target. Default `/`, which resumes
29
31
  * through `RootEntry`. */
30
32
  openAppHref?: string;
@@ -82,9 +84,11 @@ export function LandingActions({
82
84
  <Button href={accessLink.href} variant="brand" size={buttonSize} className={extra}>
83
85
  {accessLink.label}
84
86
  </Button>
85
- <Button href={demoHref} variant="secondary" size={buttonSize} className={extra}>
86
- {session === "demo" ? labels.continueDemo : labels.tryDemo}
87
- </Button>
87
+ {demoHref !== null && (
88
+ <Button href={demoHref} variant="secondary" size={buttonSize} className={extra}>
89
+ {session === "demo" ? labels.continueDemo : labels.tryDemo}
90
+ </Button>
91
+ )}
88
92
  </>
89
93
  )}
90
94
  </div>
@@ -1,7 +1,7 @@
1
1
  import type { ReactNode } from "react";
2
2
 
3
- import { Button, PHONE_QUERY } from "../components/ui";
4
- import { useMediaQuery } from "../hooks/use-media-query";
3
+ import { Button } from "../components/ui";
4
+ import { usePhoneLayout } from "../hooks/use-breakpoint";
5
5
  import { TopBar } from "../shell/top-bar";
6
6
  import type { TopBarProps } from "../shell/top-bar";
7
7
  import { TopBarBrand } from "../shell/top-bar-brand";
@@ -55,7 +55,7 @@ export interface PublicHeaderProps extends Omit<TopBarProps, "brand" | "actions"
55
55
  * | user | **Open app** (primary) |
56
56
  *
57
57
  * A demo session is not "signed in" here: it is still offered access, which is the point
58
- * of the demo (§5.6). On a phone (`PHONE_QUERY`) the actions take the kit's `sm` size, so
58
+ * of the demo (§5.6). In the phone layout (`usePhoneLayout()`) the actions take the kit's `sm` size, so
59
59
  * the brand mark, the two controls and two actions fit 390px; "Sign in" gives way below
60
60
  * `sm` as in keksdose — the sign-in page is one tap away from "Request access" anyway.
61
61
  */
@@ -75,7 +75,7 @@ export function PublicHeader({
75
75
  }: PublicHeaderProps) {
76
76
  const labels = useLandingLabels(labelsProp);
77
77
  const accessLink = useAccessAction(access, labelsProp);
78
- const phone = useMediaQuery(PHONE_QUERY, false);
78
+ const phone = usePhoneLayout();
79
79
  const size = phone ? "sm" : "md";
80
80
  const home = homeHref ?? (session === "none" ? "/" : "/welcome");
81
81
 
@@ -4,6 +4,15 @@ import { Navigate, Outlet, useLocation } from "react-router";
4
4
 
5
5
  import { readStored, writeStored } from "../lib/safe-storage";
6
6
  import type { LandingSession } from "./landing-actions";
7
+ import { LoadingState } from "../components/loading-state";
8
+
9
+ /**
10
+ * 0.31.1: a session that is still being restored — an app whose access token lives in
11
+ * memory reads it back from its refresh token first (kastlan's 0.31 adoption). Until
12
+ * then `/` neither shows the landing nor resumes, and a public page neither shows nor
13
+ * redirects: both render `loading` instead.
14
+ */
15
+ export type RoutingSession = LandingSession | "loading";
7
16
 
8
17
  /**
9
18
  * The public routes' logic (docs/landing-demo-harmonization.md §3): what `/` shows,
@@ -144,8 +153,11 @@ export function clearLastVisitedPage(key: string): void {
144
153
  /* ── RootEntry ───────────────────────────────────────────────────────────── */
145
154
 
146
155
  export interface RootEntryProps {
147
- /** Without a session `/` is the landing; with one (real or demo) it resumes. */
148
- session: LandingSession;
156
+ /** Without a session `/` is the landing; with one (real or demo) it resumes;
157
+ * `"loading"` while the app restores one. */
158
+ session: RoutingSession;
159
+ /** What shows while `session` is `"loading"`. Default: the kit's `LoadingState`. */
160
+ loading?: ReactNode;
149
161
  /** The remembered page — `readLastVisitedPage(key)`. */
150
162
  resumePath?: string | null;
151
163
  /** The landing page element. */
@@ -164,7 +176,8 @@ export interface RootEntryProps {
164
176
  * home instead, because a session at `/` came to use the app. The landing stays one tap
165
177
  * away at `/welcome`, where the signed-in brand link points.
166
178
  */
167
- export function RootEntry({ session, resumePath, landing, home }: RootEntryProps) {
179
+ export function RootEntry({ session, resumePath, landing, home, loading }: RootEntryProps) {
180
+ if (session === "loading") return <>{loading ?? <LoadingState />}</>;
168
181
  if (session === "none") return <>{landing}</>;
169
182
  const resume = safeNextPath(resumePath);
170
183
  return <Navigate to={resume && resume !== "/" ? resume : home} replace />;
@@ -173,7 +186,10 @@ export function RootEntry({ session, resumePath, landing, home }: RootEntryProps
173
186
  /* ── RedirectIfAuthed ────────────────────────────────────────────────────── */
174
187
 
175
188
  export interface RedirectIfAuthedProps {
176
- session: LandingSession;
189
+ /** `"loading"` while the app restores a session: neither the page nor a redirect. */
190
+ session: RoutingSession;
191
+ /** What shows while `session` is `"loading"`. Default: the kit's `LoadingState`. */
192
+ loading?: ReactNode;
177
193
  /**
178
194
  * Let a DEMO session through (§5.6): on `/login`, `/register` and the app's invitation
179
195
  * pages, so a demo visitor can sign in or accept an invitation — a successful one
@@ -199,8 +215,9 @@ export interface RedirectIfAuthedProps {
199
215
  * `allowDemo` around `/login`, `/register` and the invitation pages, and one without
200
216
  * around `/demo` (and `/forgot-password`).
201
217
  */
202
- export function RedirectIfAuthed({ session, allowDemo = false, fallback, children }: RedirectIfAuthedProps) {
218
+ export function RedirectIfAuthed({ session, allowDemo = false, fallback, children, loading }: RedirectIfAuthedProps) {
203
219
  const { search } = useLocation();
220
+ if (session === "loading") return <>{loading ?? <LoadingState />}</>;
204
221
  if (session === "none" || (session === "demo" && allowDemo)) {
205
222
  return children === undefined ? <Outlet /> : <>{children}</>;
206
223
  }
package/src/lib/cn.ts CHANGED
@@ -1,5 +1,16 @@
1
1
  import { clsx } from "clsx";
2
- import { twMerge } from "tailwind-merge";
2
+ import { extendTailwindMerge } from "tailwind-merge";
3
+
4
+ /**
5
+ * tailwind-merge, told about the kit's own font sizes (docs/text-size-harmonization.md
6
+ * §3.2): `text-micro` and `text-caption` are `@theme` sizes in tokens.css, which
7
+ * tailwind-merge cannot see. Unknown, a `text-<word>` is taken for a COLOUR, so
8
+ * `cn("text-caption text-[var(--text-muted)]")` dropped the size — the later colour
9
+ * "won" over it — and `cn("text-xs", "text-caption")` kept both sizes. Registered as
10
+ * sizes, they merge like `text-xs`: a later size replaces an earlier one, a colour sits
11
+ * beside them.
12
+ */
13
+ const merge = extendTailwindMerge({ extend: { theme: { text: ["micro", "caption"] } } });
3
14
 
4
15
  /** Merge class lists with Tailwind conflict resolution (later wins). */
5
- export const cn = (...inputs: Parameters<typeof clsx>) => twMerge(clsx(inputs));
16
+ export const cn = (...inputs: Parameters<typeof clsx>) => merge(clsx(inputs));
@@ -1003,7 +1003,7 @@ function RangeBody({
1003
1003
  key={message}
1004
1004
  id={messageIds[i]}
1005
1005
  data-slot="form-message"
1006
- className="text-[11px] leading-tight text-[var(--danger)]"
1006
+ className="text-caption leading-tight text-[var(--danger)]"
1007
1007
  >
1008
1008
  {message}
1009
1009
  </p>
package/src/rhf/form.tsx CHANGED
@@ -287,7 +287,7 @@ export function FormDescription({ className, ...rest }: FormDescriptionProps) {
287
287
  data-slot="form-description"
288
288
  {...rest}
289
289
  id={formDescriptionId}
290
- className={cn("text-[11px] leading-tight text-[var(--text-muted)]", className)}
290
+ className={cn("text-caption leading-tight text-[var(--text-muted)]", className)}
291
291
  />
292
292
  );
293
293
  }
@@ -315,7 +315,7 @@ export function FormMessage({ className, children, ...rest }: FormMessageProps)
315
315
  data-slot="form-message"
316
316
  {...rest}
317
317
  id={formMessageId}
318
- className={cn("text-[11px] leading-tight text-[var(--danger)]", className)}
318
+ className={cn("text-caption leading-tight text-[var(--danger)]", className)}
319
319
  >
320
320
  {body}
321
321
  </p>