@eifi1/ui-kit 0.32.2 → 0.33.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 (363) hide show
  1. package/README.md +16 -8
  2. package/dist/account/delete-account-setting.d.ts +10 -10
  3. package/dist/account/delete-account-setting.js +2 -1
  4. package/dist/account/delete-account-setting.js.map +1 -1
  5. package/dist/account/email-change-setting.d.ts +5 -0
  6. package/dist/account/email-change-setting.js +4 -3
  7. package/dist/account/email-change-setting.js.map +1 -1
  8. package/dist/account/sessions-setting.d.ts +4 -0
  9. package/dist/account/sessions-setting.js +3 -2
  10. package/dist/account/sessions-setting.js.map +1 -1
  11. package/dist/admin/admin-action-confirm.d.ts +10 -10
  12. package/dist/admin/admin-action-confirm.js.map +1 -1
  13. package/dist/admin/invitations-panel.d.ts +10 -10
  14. package/dist/admin/invitations-panel.js +4 -3
  15. package/dist/admin/invitations-panel.js.map +1 -1
  16. package/dist/admin/plan-change.d.ts +100 -0
  17. package/dist/admin/plan-change.js +208 -0
  18. package/dist/admin/plan-change.js.map +1 -0
  19. package/dist/admin/reviewer-scope-editor.d.ts +10 -10
  20. package/dist/admin/reviewer-scope-editor.js.map +1 -1
  21. package/dist/admin/role-select.d.ts +7 -7
  22. package/dist/admin/role-select.js.map +1 -1
  23. package/dist/admin/transfer-ownership-dialog.d.ts +10 -10
  24. package/dist/admin/user-roster.d.ts +7 -7
  25. package/dist/admin/user-roster.js +2 -2
  26. package/dist/admin/user-roster.js.map +1 -1
  27. package/dist/auth/auth-errors.d.ts +13 -2
  28. package/dist/auth/auth-errors.js +5 -1
  29. package/dist/auth/auth-errors.js.map +1 -1
  30. package/dist/auth/complete-name-dialog.d.ts +4 -1
  31. package/dist/auth/complete-name-dialog.js +2 -1
  32. package/dist/auth/complete-name-dialog.js.map +1 -1
  33. package/dist/auth/register-form.d.ts +10 -10
  34. package/dist/billing/billing-banner.d.ts +13 -11
  35. package/dist/billing/billing-banner.js.map +1 -1
  36. package/dist/billing/billing-labels.d.ts +10 -10
  37. package/dist/billing/billing-labels.js +10 -1
  38. package/dist/billing/billing-labels.js.map +1 -1
  39. package/dist/billing/billing-lock.d.ts +39 -12
  40. package/dist/billing/billing-lock.js +9 -3
  41. package/dist/billing/billing-lock.js.map +1 -1
  42. package/dist/billing/billing-overview.d.ts +154 -0
  43. package/dist/billing/billing-overview.js +2 -0
  44. package/dist/billing/billing-overview.js.map +1 -0
  45. package/dist/billing/billing-standing.d.ts +10 -10
  46. package/dist/billing/checkout-processing.d.ts +217 -0
  47. package/dist/billing/checkout-processing.js +198 -0
  48. package/dist/billing/checkout-processing.js.map +1 -0
  49. package/dist/billing/checkout-return.d.ts +51 -0
  50. package/dist/billing/checkout-return.js +43 -0
  51. package/dist/billing/checkout-return.js.map +1 -0
  52. package/dist/billing/pay-page.d.ts +210 -0
  53. package/dist/billing/pay-page.js +113 -0
  54. package/dist/billing/pay-page.js.map +1 -0
  55. package/dist/billing/plan-card.d.ts +10 -10
  56. package/dist/billing/plan-limit-notice.d.ts +10 -10
  57. package/dist/billing/plan-limit-toast.d.ts +143 -0
  58. package/dist/billing/plan-limit-toast.js +40 -0
  59. package/dist/billing/plan-limit-toast.js.map +1 -0
  60. package/dist/billing/subscription-actions.d.ts +38 -15
  61. package/dist/billing/subscription-actions.js +9 -2
  62. package/dist/billing/subscription-actions.js.map +1 -1
  63. package/dist/billing/subscription-status-chip.d.ts +9 -9
  64. package/dist/bin/eifi1-pay-page.mjs +166 -0
  65. package/dist/chart.d.ts +10 -10
  66. package/dist/components/account-chips.d.ts +6 -1
  67. package/dist/components/account-settings.d.ts +4 -1
  68. package/dist/components/account-settings.js +2 -1
  69. package/dist/components/account-settings.js.map +1 -1
  70. package/dist/components/amount-input.d.ts +10 -10
  71. package/dist/components/autocomplete.d.ts +2 -1
  72. package/dist/components/autocomplete.js +3 -1
  73. package/dist/components/autocomplete.js.map +1 -1
  74. package/dist/components/button-group.d.ts +10 -10
  75. package/dist/components/button-group.js +1 -1
  76. package/dist/components/button-group.js.map +1 -1
  77. package/dist/components/calculator.d.ts +10 -10
  78. package/dist/components/calculator.js +3 -3
  79. package/dist/components/calculator.js.map +1 -1
  80. package/dist/components/checkbox-group.d.ts +2 -1
  81. package/dist/components/checkbox-group.js.map +1 -1
  82. package/dist/components/checkbox.d.ts +2 -1
  83. package/dist/components/checkbox.js.map +1 -1
  84. package/dist/components/chip.d.ts +2 -1
  85. package/dist/components/chip.js +19 -17
  86. package/dist/components/chip.js.map +1 -1
  87. package/dist/components/choice-card.d.ts +3 -1
  88. package/dist/components/choice-card.js +1 -1
  89. package/dist/components/choice-card.js.map +1 -1
  90. package/dist/components/combobox.d.ts +4 -3
  91. package/dist/components/combobox.js.map +1 -1
  92. package/dist/components/confirm-dialog.d.ts +10 -10
  93. package/dist/components/confirm-dialog.js +6 -3
  94. package/dist/components/confirm-dialog.js.map +1 -1
  95. package/dist/components/copy-button.d.ts +11 -11
  96. package/dist/components/country-select.d.ts +2 -1
  97. package/dist/components/country-select.js.map +1 -1
  98. package/dist/components/danger-confirm.d.ts +10 -10
  99. package/dist/components/danger-confirm.js.map +1 -1
  100. package/dist/components/data-table-cells.d.ts +12 -1
  101. package/dist/components/data-table-filter-popover.d.ts +12 -1
  102. package/dist/components/data-table-filters.d.ts +12 -1
  103. package/dist/components/data-table-labels.d.ts +12 -1
  104. package/dist/components/data-table-pagination.d.ts +12 -1
  105. package/dist/components/data-table.d.ts +12 -1
  106. package/dist/components/data-table.js +3 -3
  107. package/dist/components/data-table.js.map +1 -1
  108. package/dist/components/date-picker.js +6 -4
  109. package/dist/components/date-picker.js.map +1 -1
  110. package/dist/components/entity-combobox.d.ts +3 -2
  111. package/dist/components/entity-combobox.js.map +1 -1
  112. package/dist/components/facing-pair.d.ts +10 -10
  113. package/dist/components/field-parts.d.ts +32 -4
  114. package/dist/components/field-parts.js +54 -19
  115. package/dist/components/field-parts.js.map +1 -1
  116. package/dist/components/file-button.d.ts +10 -10
  117. package/dist/components/file-button.js +3 -2
  118. package/dist/components/file-button.js.map +1 -1
  119. package/dist/components/file-dropzone.d.ts +11 -11
  120. package/dist/components/file-dropzone.js.map +1 -1
  121. package/dist/components/floating-panel.js +5 -5
  122. package/dist/components/floating-panel.js.map +1 -1
  123. package/dist/components/form-actions.d.ts +9 -9
  124. package/dist/components/form-actions.js +3 -3
  125. package/dist/components/form-actions.js.map +1 -1
  126. package/dist/components/iban-input.d.ts +10 -10
  127. package/dist/components/inline-edit-field.d.ts +2 -1
  128. package/dist/components/inline-edit-field.js +6 -6
  129. package/dist/components/inline-edit-field.js.map +1 -1
  130. package/dist/components/language-select.d.ts +10 -10
  131. package/dist/components/legal-page.d.ts +10 -10
  132. package/dist/components/legal.d.ts +10 -10
  133. package/dist/components/list.d.ts +2 -1
  134. package/dist/components/list.js +4 -5
  135. package/dist/components/list.js.map +1 -1
  136. package/dist/components/money-field.d.ts +10 -10
  137. package/dist/components/month-picker.js +54 -44
  138. package/dist/components/month-picker.js.map +1 -1
  139. package/dist/components/multi-entity-combobox.d.ts +3 -2
  140. package/dist/components/multi-entity-combobox.js.map +1 -1
  141. package/dist/components/number-field.d.ts +10 -10
  142. package/dist/components/number-input.d.ts +10 -10
  143. package/dist/components/numpad-sheet.d.ts +10 -10
  144. package/dist/components/numpad-sheet.js +2 -2
  145. package/dist/components/numpad-sheet.js.map +1 -1
  146. package/dist/components/phone-input.d.ts +10 -10
  147. package/dist/components/row-actions.d.ts +5 -5
  148. package/dist/components/row-actions.js +130 -32
  149. package/dist/components/row-actions.js.map +1 -1
  150. package/dist/components/series-chart.d.ts +10 -10
  151. package/dist/components/settings-fields.d.ts +10 -10
  152. package/dist/components/share-card.d.ts +7 -7
  153. package/dist/components/share-card.js +26 -10
  154. package/dist/components/share-card.js.map +1 -1
  155. package/dist/components/status-dot.d.ts +1 -0
  156. package/dist/components/status-dot.js +2 -2
  157. package/dist/components/status-dot.js.map +1 -1
  158. package/dist/components/swatch-picker.d.ts +2 -1
  159. package/dist/components/swatch-picker.js.map +1 -1
  160. package/dist/components/swipeable-row.d.ts +88 -17
  161. package/dist/components/swipeable-row.js +46 -9
  162. package/dist/components/swipeable-row.js.map +1 -1
  163. package/dist/components/switch.d.ts +2 -1
  164. package/dist/components/switch.js.map +1 -1
  165. package/dist/components/table.d.ts +2 -1
  166. package/dist/components/table.js +6 -0
  167. package/dist/components/table.js.map +1 -1
  168. package/dist/components/text-link.d.ts +9 -9
  169. package/dist/components/time-input.d.ts +10 -10
  170. package/dist/components/toggle-group.d.ts +2 -1
  171. package/dist/components/toggle-group.js +1 -1
  172. package/dist/components/toggle-group.js.map +1 -1
  173. package/dist/components/translation-review-editor.d.ts +4 -0
  174. package/dist/components/translation-review-editor.js +4 -3
  175. package/dist/components/translation-review-editor.js.map +1 -1
  176. package/dist/components/translation-review-parts.d.ts +1 -0
  177. package/dist/components/translation-review.d.ts +1 -0
  178. package/dist/components/translation-review.js +15 -18
  179. package/dist/components/translation-review.js.map +1 -1
  180. package/dist/components/ui.d.ts +9 -9
  181. package/dist/components/ui.js +47 -27
  182. package/dist/components/ui.js.map +1 -1
  183. package/dist/components/use-table-state.d.ts +12 -1
  184. package/dist/components/user-avatar.d.ts +1 -0
  185. package/dist/components/write-lock.d.ts +101 -13
  186. package/dist/components/write-lock.js +37 -13
  187. package/dist/components/write-lock.js.map +1 -1
  188. package/dist/{data-table-labels-kpAAVi6g.d.ts → data-table-labels-BJ5JE_X2.d.ts} +17 -0
  189. package/dist/data-table.d.ts +12 -1
  190. package/dist/{delete-account-setting-Dy4kJgUm.d.ts → delete-account-setting-DiPX4Vue.d.ts} +355 -41
  191. package/dist/feedback/feedback-attachment.d.ts +10 -10
  192. package/dist/feedback/feedback-attachment.js +7 -7
  193. package/dist/feedback/feedback-attachment.js.map +1 -1
  194. package/dist/feedback/feedback-context.d.ts +10 -10
  195. package/dist/feedback/feedback-crash.d.ts +10 -10
  196. package/dist/feedback/feedback-dialog.d.ts +10 -10
  197. package/dist/feedback/feedback-inbox.d.ts +9 -9
  198. package/dist/feedback/feedback-inbox.js +7 -3
  199. package/dist/feedback/feedback-inbox.js.map +1 -1
  200. package/dist/feedback/feedback-labels.d.ts +10 -10
  201. package/dist/feedback/feedback-menu.d.ts +3 -3
  202. package/dist/feedback/feedback-record.d.ts +10 -10
  203. package/dist/feedback/feedback-row-detail.d.ts +10 -10
  204. package/dist/feedback/feedback-row-detail.js.map +1 -1
  205. package/dist/feedback/feedback-status-undo.d.ts +10 -10
  206. package/dist/feedback/feedback-submit.d.ts +10 -10
  207. package/dist/feedback/feedback-swipe.d.ts +10 -10
  208. package/dist/feedback/feedback-swipe.js +3 -6
  209. package/dist/feedback/feedback-swipe.js.map +1 -1
  210. package/dist/feedback/feedback-table.d.ts +10 -10
  211. package/dist/feedback/feedback-table.js.map +1 -1
  212. package/dist/feedback/feedback-thread.d.ts +10 -10
  213. package/dist/feedback.d.ts +10 -10
  214. package/dist/hooks/use-file-drop.d.ts +10 -10
  215. package/dist/i18n/defaults.d.ts +10 -10
  216. package/dist/i18n/defaults.js +2 -0
  217. package/dist/i18n/defaults.js.map +1 -1
  218. package/dist/i18n/german.d.ts +10 -10
  219. package/dist/i18n/german.js +34 -1
  220. package/dist/i18n/german.js.map +1 -1
  221. package/dist/i18n/kit-labels.d.ts +4 -4
  222. package/dist/i18n/kit-labels.js.map +1 -1
  223. package/dist/i18n/languages.d.ts +10 -10
  224. package/dist/i18n/locales/de-CH.d.ts +10 -10
  225. package/dist/i18n/locales/en.d.ts +10 -10
  226. package/dist/i18n/locales/es.d.ts +10 -10
  227. package/dist/i18n/locales/es.js +34 -1
  228. package/dist/i18n/locales/es.js.map +1 -1
  229. package/dist/i18n/locales/fr.d.ts +10 -10
  230. package/dist/i18n/locales/fr.js +35 -1
  231. package/dist/i18n/locales/fr.js.map +1 -1
  232. package/dist/i18n/locales/hu.d.ts +10 -10
  233. package/dist/i18n/locales/hu.js +36 -1
  234. package/dist/i18n/locales/hu.js.map +1 -1
  235. package/dist/i18n/locales/it.d.ts +10 -10
  236. package/dist/i18n/locales/it.js +34 -1
  237. package/dist/i18n/locales/it.js.map +1 -1
  238. package/dist/i18n/locales/zh.d.ts +10 -10
  239. package/dist/i18n/locales/zh.js +34 -1
  240. package/dist/i18n/locales/zh.js.map +1 -1
  241. package/dist/i18n/review.d.ts +10 -10
  242. package/dist/i18n/review.js +8 -1
  243. package/dist/i18n/review.js.map +1 -1
  244. package/dist/index.d.ts +10 -5
  245. package/dist/index.js +40 -2
  246. package/dist/index.js.map +1 -1
  247. package/dist/landing/landing-actions.d.ts +10 -10
  248. package/dist/landing/landing-sections.d.ts +10 -10
  249. package/dist/landing/public-header.d.ts +10 -10
  250. package/dist/landing/routing.d.ts +10 -10
  251. package/dist/pay/.well-known/apple-developer-merchantid-domain-association +1 -0
  252. package/dist/pay/index.html +30 -0
  253. package/dist/pay/pay.css +126 -0
  254. package/dist/pay/pay.js +198 -0
  255. package/dist/rhf/fields.d.ts +10 -10
  256. package/dist/rhf/form.d.ts +10 -10
  257. package/dist/rhf.d.ts +10 -10
  258. package/dist/settings/settings-section.d.ts +10 -10
  259. package/dist/shell/app-shell.d.ts +9 -9
  260. package/dist/shell/top-bar-brand.d.ts +10 -10
  261. package/dist/shell/topbar-action-menu.d.ts +1 -0
  262. package/dist/shell.d.ts +10 -10
  263. package/dist/testing/css-variables.d.ts +74 -0
  264. package/dist/testing/css-variables.generated.d.ts +7 -0
  265. package/dist/testing/css-variables.generated.js +8 -0
  266. package/dist/testing/css-variables.generated.js.map +1 -0
  267. package/dist/testing/css-variables.js +93 -0
  268. package/dist/testing/css-variables.js.map +1 -0
  269. package/dist/testing/index.d.ts +1 -0
  270. package/dist/testing/index.js +12 -0
  271. package/dist/testing/index.js.map +1 -0
  272. package/dist/theme/contrast-tokens.d.ts +44 -1
  273. package/dist/theme/contrast-tokens.js +21 -0
  274. package/dist/theme/contrast-tokens.js.map +1 -1
  275. package/dist/theme/contrast.d.ts +2 -2
  276. package/dist/theme/palette-derive.js +60 -11
  277. package/dist/theme/palette-derive.js.map +1 -1
  278. package/dist/theme/palette-presets.js +45 -43
  279. package/dist/theme/palette-presets.js.map +1 -1
  280. package/dist/wizard/stepper-nav.d.ts +11 -11
  281. package/dist/wizard/stepper-nav.js.map +1 -1
  282. package/dist/wizard.d.ts +10 -10
  283. package/package.json +10 -2
  284. package/src/account/delete-account-setting.tsx +6 -1
  285. package/src/account/email-change-setting.tsx +9 -3
  286. package/src/account/sessions-setting.tsx +7 -2
  287. package/src/admin/admin-action-confirm.tsx +2 -1
  288. package/src/admin/invitations-panel.tsx +9 -3
  289. package/src/admin/plan-change.tsx +459 -0
  290. package/src/admin/reviewer-scope-editor.tsx +2 -1
  291. package/src/admin/role-select.tsx +2 -1
  292. package/src/admin/user-roster.tsx +5 -3
  293. package/src/auth/auth-errors.ts +25 -2
  294. package/src/auth/complete-name-dialog.tsx +6 -2
  295. package/src/billing/billing-banner.tsx +3 -1
  296. package/src/billing/billing-labels.ts +45 -0
  297. package/src/billing/billing-lock.ts +36 -3
  298. package/src/billing/billing-overview.ts +58 -0
  299. package/src/billing/checkout-processing.ts +391 -0
  300. package/src/billing/checkout-return.ts +90 -0
  301. package/src/billing/pay-page.ts +242 -0
  302. package/src/billing/plan-limit-toast.tsx +91 -0
  303. package/src/billing/subscription-actions.tsx +41 -8
  304. package/src/components/account-settings.tsx +6 -2
  305. package/src/components/autocomplete.tsx +5 -2
  306. package/src/components/button-group.tsx +4 -1
  307. package/src/components/calculator.tsx +10 -6
  308. package/src/components/checkbox-group.tsx +2 -2
  309. package/src/components/checkbox.tsx +2 -1
  310. package/src/components/chip.tsx +37 -32
  311. package/src/components/choice-card.tsx +4 -2
  312. package/src/components/combobox.tsx +4 -4
  313. package/src/components/confirm-dialog.tsx +13 -6
  314. package/src/components/country-select.tsx +2 -2
  315. package/src/components/danger-confirm.tsx +2 -2
  316. package/src/components/data-table.tsx +20 -9
  317. package/src/components/date-picker.tsx +10 -7
  318. package/src/components/entity-combobox.tsx +3 -3
  319. package/src/components/field-parts.tsx +61 -14
  320. package/src/components/file-button.tsx +5 -4
  321. package/src/components/file-dropzone.tsx +2 -2
  322. package/src/components/floating-panel.tsx +7 -5
  323. package/src/components/form-actions.tsx +12 -5
  324. package/src/components/inline-edit-field.tsx +13 -13
  325. package/src/components/list.tsx +10 -9
  326. package/src/components/month-picker.tsx +8 -2
  327. package/src/components/multi-entity-combobox.tsx +3 -3
  328. package/src/components/numpad-sheet.tsx +8 -4
  329. package/src/components/row-actions.tsx +208 -58
  330. package/src/components/share-card.tsx +67 -13
  331. package/src/components/status-dot.tsx +7 -7
  332. package/src/components/swatch-picker.tsx +2 -2
  333. package/src/components/swipeable-row.tsx +138 -27
  334. package/src/components/switch.tsx +2 -1
  335. package/src/components/table.tsx +8 -1
  336. package/src/components/toggle-group.tsx +5 -3
  337. package/src/components/translation-review-editor.tsx +8 -3
  338. package/src/components/translation-review.tsx +18 -22
  339. package/src/components/ui.tsx +92 -43
  340. package/src/components/write-lock.tsx +150 -24
  341. package/src/feedback/feedback-attachment.tsx +13 -9
  342. package/src/feedback/feedback-inbox.tsx +10 -6
  343. package/src/feedback/feedback-row-detail.tsx +3 -2
  344. package/src/feedback/feedback-swipe.tsx +6 -11
  345. package/src/feedback/feedback-table.tsx +2 -1
  346. package/src/i18n/defaults.ts +2 -0
  347. package/src/i18n/german.ts +38 -0
  348. package/src/i18n/kit-labels.tsx +4 -0
  349. package/src/i18n/locales/es.ts +34 -0
  350. package/src/i18n/locales/fr.ts +39 -0
  351. package/src/i18n/locales/hu.ts +37 -0
  352. package/src/i18n/locales/it.ts +35 -0
  353. package/src/i18n/locales/zh.ts +33 -0
  354. package/src/i18n/review.ts +7 -0
  355. package/src/index.ts +48 -4
  356. package/src/testing/css-variables.generated.ts +112 -0
  357. package/src/testing/css-variables.ts +191 -0
  358. package/src/testing/index.ts +13 -0
  359. package/src/theme/contrast-tokens.ts +53 -2
  360. package/src/theme/palette-derive.ts +87 -10
  361. package/src/theme/palette-presets.ts +45 -43
  362. package/src/wizard/stepper-nav.tsx +2 -1
  363. package/tokens.css +306 -46
@@ -37,6 +37,7 @@ import {
37
37
  import type { FeedbackContext, FeedbackRecord } from "./feedback-record";
38
38
  import { useFeedbackStatusUndo } from "./feedback-status-undo";
39
39
  import type { FeedbackStatusChange } from "./feedback-status-undo";
40
+ import type { CommitScope } from "../components/write-lock";
40
41
 
41
42
  /**
42
43
  * One report, opened — the panel a feedback table unfolds under its row (§4.4 of
@@ -410,7 +411,7 @@ export interface FeedbackReworkSectionProps {
410
411
  * `feedbackToast` refusals, the `feedbackAttachment` words. */
411
412
  attachment?: Partial<FeedbackNoteAttachment>;
412
413
  /** The send COMMITS — see `FeedbackNoteEditor`'s `commit`. */
413
- commit?: boolean;
414
+ commit?: CommitScope;
414
415
  labels?: Partial<FeedbackDetailLabels>;
415
416
  }
416
417
 
@@ -569,7 +570,7 @@ export interface FeedbackRowDetailProps {
569
570
  * reaches `onUpdate`. Off by default — keksdose's shell lock is a read-only demo
570
571
  * BUDGET, and a person viewing one still owns their own reports.
571
572
  */
572
- commit?: boolean;
573
+ commit?: CommitScope;
573
574
  /**
574
575
  * Open with the subject: the category badge and the title (feedback contract §8.1,
575
576
  * keksdose live #395). On by default; `false` for a page that already shows the title
@@ -79,11 +79,9 @@ function targetOf(id: string, status: FeedbackStatus): FeedbackStatus | null {
79
79
  }
80
80
  }
81
81
 
82
- /** One action's panel. Each fill carries its text colour (0.26): the fills turn pastel
83
- * in dark mode, where SwipeableRow's default white text was unreadable. `--info` has no
84
- * contrast token, so `advance` writes in the surface colour — white on sky in light
85
- * mode, the dark page on the pale sky in dark (the translation list's reset does the
86
- * same on its grey). */
82
+ /** One action's panel, by tone (0.33): SwipeableRow paints the tone's soft wash idle,
83
+ * and its fill under that fill's own foreground once armed — the same pairs in light
84
+ * and dark, where the fills turn pastel. */
87
85
  function panel(
88
86
  id: FeedbackSwipeAction,
89
87
  target: FeedbackStatus,
@@ -97,24 +95,21 @@ function panel(
97
95
  onCommit,
98
96
  label: labels[target],
99
97
  icon: <ChevronsRight className="size-4" aria-hidden />,
100
- className: "bg-[var(--info)] text-[var(--info-contrast)]",
101
- armedClassName: "bg-[var(--info)] text-[var(--info-contrast)]",
98
+ tone: "info",
102
99
  };
103
100
  case "done":
104
101
  return {
105
102
  onCommit,
106
103
  label: labels.DONE,
107
104
  icon: <Check className="size-4" aria-hidden />,
108
- className: "bg-[var(--success)] text-[var(--success-contrast)]",
109
- armedClassName: "bg-[var(--success)] text-[var(--success-contrast)]",
105
+ tone: "success",
110
106
  };
111
107
  case "wont_do":
112
108
  return {
113
109
  onCommit,
114
110
  label: labels.WONT_DO,
115
111
  icon: <Ban className="size-4" aria-hidden />,
116
- className: "bg-[var(--danger)] text-[var(--danger-contrast)]",
117
- armedClassName: "bg-[var(--danger-hover)] text-[var(--danger-contrast)]",
112
+ tone: "danger",
118
113
  };
119
114
  }
120
115
  }
@@ -31,6 +31,7 @@ import {
31
31
  import { FEEDBACK_AWAITING_STATUSES, reworkCount, type FeedbackContext, type FeedbackRecord } from "./feedback-record";
32
32
  import type { FeedbackStatusChange } from "./feedback-status-undo";
33
33
  import { feedbackPageHref, feedbackPagePath } from "./feedback-row-detail";
34
+ import type { CommitScope } from "../components/write-lock";
34
35
 
35
36
  /**
36
37
  * The two feedback pages' TABLE — `/feedback` (the admin inbox) and `/my-feedback` (the
@@ -399,7 +400,7 @@ export interface FeedbackColumnsOptions {
399
400
  /** The status buttons SAVE when pressed: pass `true` to put them under the page's
400
401
  * `WriteLockProvider` (FeedbackStatusTransitions' `commit`). Off by default — a
401
402
  * feedback inbox is rarely what an app's lock is about. */
402
- commit?: boolean;
403
+ commit?: CommitScope;
403
404
  labels: FeedbackPageLabels;
404
405
  statusLabels: FeedbackStatusLabels;
405
406
  categoryLabels: FeedbackCategoryLabels;
@@ -85,6 +85,7 @@ import { DEFAULT_SETTINGS_LABELS } from "../settings/settings-labels";
85
85
  import { DEFAULT_LANDING_LABELS } from "../landing/landing-labels";
86
86
  import { DEFAULT_DEMO_LABELS } from "../demo/demo-labels";
87
87
  import { DEFAULT_BILLING_LABELS } from "../billing/billing-labels";
88
+ import { DEFAULT_PLAN_CHANGE_LABELS } from "../admin/plan-change";
88
89
  import { DEFAULT_APPEARANCE_LABELS } from "../components/appearance-labels";
89
90
  import { DEFAULT_ROW_ACTIONS_LABELS } from "../components/row-actions";
90
91
  import { DEFAULT_APP_SHELL_MORE_LABELS } from "../shell/app-shell";
@@ -219,6 +220,7 @@ export const DEFAULT_UI_KIT_LABELS: UiKitLabels = {
219
220
  landing: DEFAULT_LANDING_LABELS,
220
221
  demo: DEFAULT_DEMO_LABELS,
221
222
  billing: DEFAULT_BILLING_LABELS,
223
+ planChange: DEFAULT_PLAN_CHANGE_LABELS,
222
224
  appearance: DEFAULT_APPEARANCE_LABELS,
223
225
  rowActions: DEFAULT_ROW_ACTIONS_LABELS,
224
226
  appShellMore: DEFAULT_APP_SHELL_MORE_LABELS,
@@ -1525,9 +1525,22 @@ export function germanLabels(numberLocale: string): UiKitLabels {
1525
1525
  // Both figures arrive formatted.
1526
1526
  usage: (used, limit) => `${used} von ${limit}`,
1527
1527
  contactSubject: (dimension) => `Tariflimit: ${dimension}`,
1528
+ // The toast's figure line (§14.11) and the plan change's over-limit lines (§14.12).
1529
+ limitUsageLine: (dimension, used, limit) => `${dimension}: ${used} von ${limit}`,
1528
1530
  manage: "Zahlung und Rechnungen",
1529
1531
  // §312k BGB: the button that leads to the cancellation says exactly this (§12.26).
1530
1532
  cancel: "Verträge hier kündigen",
1533
+ // §14.5: no customer at the provider yet, so no portal to open.
1534
+ notAtProvider:
1535
+ "Noch nichts zu verwalten. Zahlungen und Rechnungen erscheinen hier, sobald Sie einen kostenpflichtigen Tarif haben.",
1536
+ // §14.4: the pay page's lines, built into its bundle. "Bezahlvorgang", Paddle's own
1537
+ // German for its checkout.
1538
+ payOpening: "Der sichere Bezahlvorgang wird geöffnet…",
1539
+ payNothing: "Hier ist nichts zu bezahlen. Um einen Tarif zu wählen, kehren Sie zur App zurück.",
1540
+ payFailed:
1541
+ "Der Bezahlvorgang konnte nicht geöffnet werden. Bitte kehren Sie zurück und versuchen Sie es gleich noch einmal.",
1542
+ payBack:
1543
+ "Der Bezahlvorgang wurde geschlossen. Sie können zurückkehren oder diese Seite neu laden, um ihn wieder zu öffnen.",
1531
1544
  waitingChanges: (count) =>
1532
1545
  count === 1
1533
1546
  ? `${n(count)} Änderung wartet auf einen Tarif`
@@ -1536,6 +1549,31 @@ export function germanLabels(numberLocale: string): UiKitLabels {
1536
1549
  discardWaiting: "Wartende Änderungen verwerfen",
1537
1550
  notConfigured: "Zahlungen sind noch nicht eingerichtet. Bitte versuchen Sie es später noch einmal.",
1538
1551
  disabled: "Abonnements sind hier nicht verfügbar.",
1552
+ // §14.2: server-kit 0.7's refusals. "Zahlung und Rechnungen", as `manage`.
1553
+ providerUnavailable:
1554
+ "Der Zahlungsanbieter ist gerade nicht erreichbar. Bitte versuchen Sie es gleich noch einmal.",
1555
+ alreadySubscribed: "Sie haben bereits ein Abonnement. Ihren Tarif ändern Sie unter „Zahlung und Rechnungen“.",
1556
+ planNotSold:
1557
+ "Dieser Tarif ist für diesen Abrechnungszeitraum oder diese Währung nicht erhältlich. Bitte wählen Sie einen anderen.",
1558
+ },
1559
+ // 0.33.0 — docs/billing-harmonization.md §14.12: the operator's plan parts, "Tarif" as
1560
+ // in `billing`; keksdose's reviewed admin wording where it had one.
1561
+ planChange: {
1562
+ column: "Tarif",
1563
+ title: "Tarif ändern",
1564
+ confirm: "Tarif ändern",
1565
+ plan: "Tarif",
1566
+ current: (plan) => `Aktueller Tarif: ${plan}`,
1567
+ keepsItems: "Ein kleinerer Tarif sperrt nur das Anlegen weiterer Einträge; gelöscht wird nichts.",
1568
+ until: "Kostenlos bis",
1569
+ untilHint: "Leer lassen für kein Ende. Eine laufende Beta behält ihr eigenes Ende.",
1570
+ needsChange: "Wählen Sie einen anderen Tarif oder ein Enddatum.",
1571
+ changed: (from, to) => `Tarif von ${from} auf ${to} geändert.`,
1572
+ set: (to) => `Tarif auf ${to} gesetzt.`,
1573
+ keptBeta: "Die Beta behält ihr Ende; nur der Tarif wurde geändert.",
1574
+ untilDone: (date) => `Kostenlos bis ${date}.`,
1575
+ overLimit: "Über dem Limit des neuen Tarifs: Nichts wird entfernt, neue Einträge sind gesperrt.",
1576
+ usageOf: (used, limit, dimension) => `${used} von ${limit} ${dimension}`,
1539
1577
  },
1540
1578
  // 0.32.0 — docs/text-size-harmonization.md §6: the text-size and contrast settings in
1541
1579
  // the "Darstellung" group.
@@ -81,6 +81,7 @@ import type { SettingsLabels } from "../settings/settings-labels";
81
81
  import type { LandingLabels } from "../landing/landing-labels";
82
82
  import type { DemoLabels } from "../demo/demo-labels";
83
83
  import type { BillingLabels } from "../billing/billing-labels";
84
+ import type { PlanChangeLabels } from "../admin/plan-change";
84
85
  import type { AppearanceLabels } from "../components/appearance-labels";
85
86
  import type { RowActionsLabels } from "../components/row-actions";
86
87
  import type { AppShellMoreLabels } from "../shell/app-shell";
@@ -398,6 +399,9 @@ export interface UiKitLabels {
398
399
  demo: DemoLabels;
399
400
  /** 0.32.0: plans, standing, banners and the limit notice (docs/billing-harmonization.md §7). */
400
401
  billing: BillingLabels;
402
+ /** 0.33.0: the operator's plan parts — `planColumn`, `PlanChangeConfirm` and the
403
+ * lines of `usePlanChangeResult` (docs/billing-harmonization.md §14.12). */
404
+ planChange: PlanChangeLabels;
401
405
  /** 0.32.0: the text-size and contrast settings (docs/text-size-harmonization.md §6). */
402
406
  appearance: AppearanceLabels;
403
407
  /** 0.32.0: a row's actions folded into a "⋯" menu at Large (text size §10.8). */
@@ -1485,13 +1485,47 @@ export function uiKitLabelsEs(numberLocale = "es-ES"): UiKitLabels {
1485
1485
  // Both figures arrive formatted; "de", as `characterCount.count`.
1486
1486
  usage: (used, limit) => `${used} de ${limit}`,
1487
1487
  contactSubject: (dimension) => `Límite del plan: ${dimension}`,
1488
+ // The toast's figure line (§14.11) and the plan change's over-limit lines (§14.12).
1489
+ limitUsageLine: (dimension, used, limit) => `${dimension}: ${used} de ${limit}`,
1488
1490
  manage: "Pagos y facturas",
1489
1491
  cancel: "Cancelar la suscripción",
1492
+ // §14.5: no customer at the provider yet, so no portal to open.
1493
+ notAtProvider:
1494
+ "Todavía no hay nada que gestionar. Los pagos y las facturas aparecerán aquí cuando tenga un plan de pago.",
1495
+ // §14.4: the pay page's lines, built into its bundle. "Usted".
1496
+ payOpening: "Abriendo el pago seguro…",
1497
+ payNothing: "Aquí no hay nada que pagar. Para elegir un plan, vuelva a la aplicación.",
1498
+ payFailed: "No se ha podido abrir el pago. Vuelva atrás e inténtelo de nuevo en un momento.",
1499
+ payBack: "El pago se ha cerrado. Puede volver atrás o recargar esta página para abrirlo de nuevo.",
1490
1500
  waitingChanges: (count) => `${n(count)} ${plural(count, "cambio", "cambios")} a la espera de un plan`,
1491
1501
  // "Descartar", as `wizard.cancelConfirmLabel`.
1492
1502
  discardWaiting: "Descartar los cambios en espera",
1493
1503
  notConfigured: "Los pagos aún no están configurados. Inténtelo de nuevo más tarde.",
1494
1504
  disabled: "Las suscripciones no están disponibles aquí.",
1505
+ // §14.2: server-kit 0.7's refusals. "Pagos y facturas", as `manage`. "Usted".
1506
+ providerUnavailable: "El proveedor de pagos no está disponible en este momento. Inténtelo de nuevo en un momento.",
1507
+ alreadySubscribed: "Ya tiene una suscripción. Para cambiar de plan, vaya a «Pagos y facturas».",
1508
+ planNotSold: "Este plan no está disponible para ese periodo de facturación o esa moneda. Elija otro.",
1509
+ },
1510
+ // 0.33.0 — docs/billing-harmonization.md §14.12: the operator's plan parts, "plan" as
1511
+ // in `billing`. "Usted".
1512
+ planChange: {
1513
+ column: "Plan",
1514
+ title: "Cambiar de plan",
1515
+ confirm: "Cambiar de plan",
1516
+ plan: "Plan",
1517
+ current: (plan) => `Plan actual: ${plan}`,
1518
+ keepsItems: "Un plan más pequeño solo impide crear más; no se elimina nada.",
1519
+ until: "Gratis hasta el",
1520
+ untilHint: "Déjelo vacío para que no tenga fin. Una beta en curso conserva su propio fin.",
1521
+ needsChange: "Elija otro plan o una fecha de fin.",
1522
+ changed: (from, to) => `Plan cambiado de ${from} a ${to}.`,
1523
+ set: (to) => `Plan establecido en ${to}.`,
1524
+ keptBeta: "La beta conserva su fin; solo ha cambiado el plan.",
1525
+ untilDone: (date) => `Gratis hasta el ${date}.`,
1526
+ overLimit: "Por encima del límite del nuevo plan: no se elimina nada, los elementos nuevos quedan bloqueados.",
1527
+ // Figures formatted; "de", as `billing.usage`.
1528
+ usageOf: (used, limit, dimension) => `${used} de ${limit} ${dimension}`,
1495
1529
  },
1496
1530
  // 0.32.0 — docs/text-size-harmonization.md §6: the text-size and contrast settings in
1497
1531
  // the "Apariencia" group.
@@ -1516,14 +1516,53 @@ export function uiKitLabelsFr(numberLocale = "fr-FR"): UiKitLabels {
1516
1516
  // Both figures arrive formatted; "sur", as `characterCount.count`.
1517
1517
  usage: (used, limit) => `${used} sur ${limit}`,
1518
1518
  contactSubject: (dimension) => `Limite de la formule\u00a0: ${dimension}`,
1519
+ // The toast's figure line (§14.11) and the plan change's over-limit lines (§14.12):
1520
+ // a key of its own for the space before the colon.
1521
+ limitUsageLine: (dimension, used, limit) => `${dimension}\u00a0: ${used} sur ${limit}`,
1519
1522
  manage: "Paiement et factures",
1520
1523
  cancel: "Résilier l’abonnement",
1524
+ // §14.5: no customer at the provider yet, so no portal to open.
1525
+ notAtProvider:
1526
+ "Rien à gérer pour l’instant. Les paiements et les factures apparaîtront ici dès que vous aurez une formule payante.",
1527
+ // §14.4: the pay page's lines, built into its bundle.
1528
+ payOpening: "Ouverture du paiement sécurisé…",
1529
+ payNothing: "Il n’y a rien à payer ici. Pour choisir une formule, revenez à l’application.",
1530
+ payFailed: "Le paiement n’a pas pu s’ouvrir. Veuillez revenir en arrière et réessayer dans un instant.",
1531
+ payBack: "Le paiement a été fermé. Vous pouvez revenir en arrière, ou recharger cette page pour le rouvrir.",
1521
1532
  waitingChanges: (count) =>
1522
1533
  `${n(count)} ${plural(count, "modification en attente", "modifications en attente")} d’une formule`,
1523
1534
  // "Abandonner", as `wizard.cancelConfirmLabel`.
1524
1535
  discardWaiting: "Abandonner les modifications en attente",
1525
1536
  notConfigured: "Les paiements ne sont pas encore configurés. Veuillez réessayer plus tard.",
1526
1537
  disabled: "Les abonnements ne sont pas disponibles ici.",
1538
+ // §14.2: server-kit 0.7's refusals. "Paiement et factures", as `manage`.
1539
+ providerUnavailable:
1540
+ "Le prestataire de paiement est injoignable pour le moment. Veuillez réessayer dans un instant.",
1541
+ alreadySubscribed:
1542
+ "Vous avez déjà un abonnement. Pour changer de formule, allez dans «\u202fPaiement et factures\u202f».",
1543
+ planNotSold:
1544
+ "Cette formule n’est pas proposée pour cette période de facturation ou cette devise. Veuillez en choisir une autre.",
1545
+ },
1546
+ // 0.33.0 — docs/billing-harmonization.md §14.12: the operator's plan parts, "formule"
1547
+ // as in `billing`. "Vous".
1548
+ planChange: {
1549
+ column: "Formule",
1550
+ title: "Changer de formule",
1551
+ confirm: "Changer de formule",
1552
+ plan: "Formule",
1553
+ current: (plan) => `Formule actuelle\u00a0: ${plan}`,
1554
+ keepsItems: "Une formule plus petite bloque seulement les nouvelles créations\u202f; rien n’est supprimé.",
1555
+ until: "Gratuit jusqu’au",
1556
+ untilHint: "Laissez vide pour aucune fin. Une bêta en cours garde sa propre fin.",
1557
+ needsChange: "Choisissez une autre formule ou une date de fin.",
1558
+ changed: (from, to) => `Formule changée de ${from} à ${to}.`,
1559
+ set: (to) => `Formule définie sur ${to}.`,
1560
+ keptBeta: "La bêta garde sa fin\u202f; seule la formule a changé.",
1561
+ untilDone: (date) => `Gratuit jusqu’au ${date}.`,
1562
+ overLimit:
1563
+ "Au-delà de la limite de la nouvelle formule\u00a0: rien n’est supprimé, les nouveaux éléments sont bloqués.",
1564
+ // Figures formatted; "sur", as `billing.usage`.
1565
+ usageOf: (used, limit, dimension) => `${used} sur ${limit} ${dimension}`,
1527
1566
  },
1528
1567
  // 0.32.0 — docs/text-size-harmonization.md §6: the text-size and contrast settings in
1529
1568
  // the "Apparence" group. The steps agree with "taille", the modes with "contraste".
@@ -1488,14 +1488,51 @@ export function uiKitLabelsHu(numberLocale = "hu-HU"): UiKitLabels {
1488
1488
  // Both figures arrive formatted and stay bare, as `characterCount.count` (convention 3).
1489
1489
  usage: (used, limit) => `${used} / ${limit}`,
1490
1490
  contactSubject: (dimension) => `Csomagkorlát: ${dimension}`,
1491
+ // The toast's figure line (§14.11) and the plan change's over-limit lines (§14.12);
1492
+ // the figures bare, as `usage` (convention 3).
1493
+ limitUsageLine: (dimension, used, limit) => `${dimension}: ${used} / ${limit}`,
1491
1494
  manage: "Fizetés és számlák",
1492
1495
  cancel: "Előfizetés lemondása",
1496
+ // §14.5: no customer at the provider yet, so no portal to open.
1497
+ notAtProvider:
1498
+ "Egyelőre nincs mit kezelni. A fizetések és a számlák itt jelennek meg, amint fizetős csomagja lesz.",
1499
+ // §14.4: the pay page's lines, built into its bundle — in Hungarian, though Paddle's
1500
+ // checkout beside them is English (it has no Hungarian).
1501
+ payOpening: "A biztonságos fizetés megnyitása…",
1502
+ payNothing: "Itt nincs mit kifizetni. Csomag választásához térjen vissza az alkalmazásba.",
1503
+ payFailed: "A fizetést nem sikerült megnyitni. Kérjük, lépjen vissza, és próbálja újra egy kis idő múlva.",
1504
+ payBack: "A fizetés bezárult. Visszaléphet, vagy a megnyitásához töltse újra ezt az oldalt.",
1493
1505
  // No plural after a numeral (convention 2).
1494
1506
  waitingChanges: (count) => `${n(count)} módosítás csomagra vár`,
1495
1507
  // "Elvetés", as `wizard.cancelConfirmLabel`.
1496
1508
  discardWaiting: "Várakozó módosítások elvetése",
1497
1509
  notConfigured: "A fizetés még nincs beállítva. Kérjük, próbálja újra később.",
1498
1510
  disabled: "Az előfizetés itt nem érhető el.",
1511
+ // §14.2: server-kit 0.7's refusals. "Fizetés és számlák", as `manage`.
1512
+ providerUnavailable: "A fizetési szolgáltató jelenleg nem érhető el. Kérjük, próbálja újra egy kis idő múlva.",
1513
+ alreadySubscribed: "Már van előfizetése. A csomag módosításához nyissa meg a „Fizetés és számlák” részt.",
1514
+ planNotSold:
1515
+ "Ez a csomag ehhez a számlázási időszakhoz vagy pénznemhez nem érhető el. Kérjük, válasszon másikat.",
1516
+ },
1517
+ // 0.33.0 — docs/billing-harmonization.md §14.12: the operator's plan parts, "csomag"
1518
+ // as in `billing`. A plan's name takes no case ending: it follows a colon or an arrow.
1519
+ planChange: {
1520
+ column: "Csomag",
1521
+ title: "Csomag módosítása",
1522
+ confirm: "Csomag módosítása",
1523
+ plan: "Csomag",
1524
+ current: (plan) => `Jelenlegi csomag: ${plan}`,
1525
+ keepsItems: "A kisebb csomag csak újak létrehozását tiltja; semmi sem törlődik.",
1526
+ until: "Ingyenes eddig",
1527
+ untilHint: "Hagyja üresen, ha nincs vége. A futó béta megtartja a saját lejáratát.",
1528
+ needsChange: "Válasszon másik csomagot vagy egy záró dátumot.",
1529
+ changed: (from, to) => `Csomag módosítva: ${from} → ${to}.`,
1530
+ set: (to) => `Beállított csomag: ${to}.`,
1531
+ keptBeta: "A béta megtartja a lejáratát; csak a csomag változott.",
1532
+ untilDone: (date) => `Ingyenes eddig: ${date}.`,
1533
+ overLimit: "Az új csomag korlátja felett: semmi sem törlődik, de újak nem hozhatók létre.",
1534
+ // The figures bare, as `billing.usage` (convention 3).
1535
+ usageOf: (used, limit, dimension) => `${dimension}: ${used} / ${limit}`,
1499
1536
  },
1500
1537
  // 0.32.0 — docs/text-size-harmonization.md §6: the text-size and contrast settings in
1501
1538
  // the "Megjelenés" group.
@@ -1500,14 +1500,49 @@ export function uiKitLabelsIt(numberLocale = "it-IT"): UiKitLabels {
1500
1500
  // Both figures arrive formatted; "di", as `characterCount.count`.
1501
1501
  usage: (used, limit) => `${used} di ${limit}`,
1502
1502
  contactSubject: (dimension) => `Limite del piano: ${dimension}`,
1503
+ // The toast's figure line (§14.11) and the plan change's over-limit lines (§14.12).
1504
+ limitUsageLine: (dimension, used, limit) => `${dimension}: ${used} di ${limit}`,
1503
1505
  manage: "Pagamento e fatture",
1504
1506
  cancel: "Disdici l’abbonamento",
1507
+ // §14.5: no customer at the provider yet, so no portal to open.
1508
+ notAtProvider:
1509
+ "Ancora niente da gestire. Pagamenti e fatture compariranno qui quando avrà un piano a pagamento.",
1510
+ // §14.4: the pay page's lines, built into its bundle. "Lei".
1511
+ payOpening: "Apertura del pagamento sicuro…",
1512
+ payNothing: "Qui non c’è nulla da pagare. Per scegliere un piano, torni all’app.",
1513
+ payFailed: "Non è stato possibile aprire il pagamento. Torni indietro e riprovi tra un momento.",
1514
+ payBack: "Il pagamento è stato chiuso. Può tornare indietro, oppure ricaricare questa pagina per riaprirlo.",
1505
1515
  waitingChanges: (count) =>
1506
1516
  `${n(count)} ${plural(count, "modifica in attesa", "modifiche in attesa")} di un piano`,
1507
1517
  // "Scarta", as `wizard.cancelConfirmLabel`.
1508
1518
  discardWaiting: "Scarta le modifiche in attesa",
1509
1519
  notConfigured: "I pagamenti non sono ancora configurati. Riprovi più tardi.",
1510
1520
  disabled: "Gli abbonamenti non sono disponibili qui.",
1521
+ // §14.2: server-kit 0.7's refusals. "Pagamento e fatture", as `manage`. "Lei".
1522
+ providerUnavailable: "Il fornitore dei pagamenti non è raggiungibile al momento. Riprovi tra un momento.",
1523
+ alreadySubscribed: "Ha già un abbonamento. Per cambiare piano, vada su «Pagamento e fatture».",
1524
+ planNotSold:
1525
+ "Questo piano non è disponibile per questo periodo di fatturazione o questa valuta. Ne scelga un altro.",
1526
+ },
1527
+ // 0.33.0 — docs/billing-harmonization.md §14.12: the operator's plan parts, "piano" as
1528
+ // in `billing`. "Lei" in sentences, the imperative on the title and the button.
1529
+ planChange: {
1530
+ column: "Piano",
1531
+ title: "Cambia piano",
1532
+ confirm: "Cambia piano",
1533
+ plan: "Piano",
1534
+ current: (plan) => `Piano attuale: ${plan}`,
1535
+ keepsItems: "Un piano più piccolo blocca solo la creazione di nuovi elementi; non viene eliminato nulla.",
1536
+ until: "Gratuito fino al",
1537
+ untilHint: "Lasci vuoto per nessuna scadenza. Una beta in corso mantiene la propria scadenza.",
1538
+ needsChange: "Scelga un altro piano o una data di fine.",
1539
+ changed: (from, to) => `Piano cambiato da ${from} a ${to}.`,
1540
+ set: (to) => `Piano impostato su ${to}.`,
1541
+ keptBeta: "La beta mantiene la sua scadenza; è cambiato solo il piano.",
1542
+ untilDone: (date) => `Gratuito fino al ${date}.`,
1543
+ overLimit: "Oltre il limite del nuovo piano: non viene rimosso nulla, i nuovi elementi sono bloccati.",
1544
+ // Figures formatted; "di", as `billing.usage`.
1545
+ usageOf: (used, limit, dimension) => `${used} di ${limit} ${dimension}`,
1511
1546
  },
1512
1547
  // 0.32.0 — docs/text-size-harmonization.md §6: the text-size and contrast settings in
1513
1548
  // the "Aspetto" group.
@@ -1425,13 +1425,46 @@ export function uiKitLabelsZh(numberLocale = "zh-CN"): UiKitLabels {
1425
1425
  // Both figures arrive formatted; written as `characterCount.count` writes them.
1426
1426
  usage: (used, limit) => `${used}/${limit}`,
1427
1427
  contactSubject: (dimension) => `套餐上限:${dimension}`,
1428
+ // The toast's figure line (§14.11) and the plan change's over-limit lines (§14.12);
1429
+ // written as `usage` writes the figures.
1430
+ limitUsageLine: (dimension, used, limit) => `${dimension}:${used}/${limit}`,
1428
1431
  manage: "付款与发票",
1429
1432
  cancel: "取消订阅",
1433
+ // §14.5: no customer at the provider yet, so no portal to open.
1434
+ notAtProvider: "暂无可管理的内容。开通付费套餐后,付款和发票会显示在这里。",
1435
+ // §14.4: the pay page's lines, built into its bundle.
1436
+ payOpening: "正在打开安全支付页面…",
1437
+ payNothing: "这里没有需要支付的款项。如需选择套餐,请返回应用。",
1438
+ payFailed: "无法打开支付页面。请返回后稍候再试。",
1439
+ payBack: "支付页面已关闭。您可以返回,或重新加载此页面以再次打开。",
1430
1440
  waitingChanges: (count) => `${n(count)} 项修改正在等待套餐`,
1431
1441
  // "放弃", as `wizard.cancelConfirmLabel`.
1432
1442
  discardWaiting: "放弃等待中的修改",
1433
1443
  notConfigured: "付款尚未设置,请稍后再试。",
1434
1444
  disabled: "此处不提供订阅。",
1445
+ // §14.2: server-kit 0.7's refusals. "付款与发票", as `manage`.
1446
+ providerUnavailable: "暂时无法连接支付服务商,请稍后再试。",
1447
+ alreadySubscribed: "您已有订阅。如需更改套餐,请前往“付款与发票”。",
1448
+ planNotSold: "该套餐不支持此计费周期或货币,请选择其他套餐。",
1449
+ },
1450
+ // 0.33.0 — docs/billing-harmonization.md §14.12: the operator's plan parts, "套餐" as
1451
+ // in `billing`. "测试版", as `landing.beta`.
1452
+ planChange: {
1453
+ column: "套餐",
1454
+ title: "更改套餐",
1455
+ confirm: "更改套餐",
1456
+ plan: "套餐",
1457
+ current: (plan) => `当前套餐:${plan}`,
1458
+ keepsItems: "较小的套餐只会阻止新建更多内容,不会删除任何内容。",
1459
+ until: "免费至",
1460
+ untilHint: "留空表示没有结束日期。正在进行的测试版保留其自身的结束日期。",
1461
+ needsChange: "请选择其他套餐或结束日期。",
1462
+ changed: (from, to) => `套餐已从 ${from} 更改为 ${to}。`,
1463
+ set: (to) => `套餐已设为 ${to}。`,
1464
+ keptBeta: "测试版保留其结束日期;只更改了套餐。",
1465
+ untilDone: (date) => `免费至 ${date}。`,
1466
+ overLimit: "超出新套餐的上限:不会删除任何内容,但无法新建。",
1467
+ usageOf: (used, limit, dimension) => `${used}/${limit} ${dimension}`,
1435
1468
  },
1436
1469
  // 0.32.0 — docs/text-size-harmonization.md §6: the text-size and contrast settings in
1437
1470
  // the "外观" group.
@@ -366,4 +366,11 @@ export const KIT_LABEL_SAMPLES: Readonly<Record<string, readonly (readonly unkno
366
366
  "billing.usage": [["{{used}}", "{{limit}}"]],
367
367
  "billing.contactSubject": [["{{dimension}}"]],
368
368
  "billing.waitingChanges": one,
369
+ // 0.33.0: the limit's figure line (§14.11) and the operator's plan parts (§14.12).
370
+ "billing.limitUsageLine": [["{{dimension}}", "{{used}}", "{{limit}}"]],
371
+ "planChange.current": [["{{plan}}"]],
372
+ "planChange.changed": [["{{from}}", "{{to}}"]],
373
+ "planChange.set": [["{{to}}"]],
374
+ "planChange.untilDone": [["{{date}}"]],
375
+ "planChange.usageOf": [["{{used}}", "{{limit}}", "{{dimension}}"]],
369
376
  };
package/src/index.ts CHANGED
@@ -88,7 +88,7 @@ export * from "./components/search-field";
88
88
  export * from "./components/dropdown";
89
89
  export * from "./components/popover";
90
90
  export { SwipeableRow } from "./components/swipeable-row";
91
- export type { SwipeAction, SwipeableRowProps } from "./components/swipeable-row";
91
+ export type { SwipeAction, SwipePaint, SwipeTone, SwipeableRowProps } from "./components/swipeable-row";
92
92
  export * from "./components/calculator";
93
93
  export * from "./components/numpad-sheet";
94
94
  export * from "./components/number-input";
@@ -214,8 +214,11 @@ export * from "./components/description-list";
214
214
  export * from "./components/form-actions";
215
215
  // 0.18: lock every opted-in commit under one provider, the reason in its tooltip
216
216
  // (Kurvenschmiede 2). `useCommitReason` stays internal.
217
- export { WriteLockProvider, useWriteLock, DEFAULT_WRITE_LOCK_LABELS } from "./components/write-lock";
218
- export type { WriteLock, WriteLockLabels, WriteLockProviderProps } from "./components/write-lock";
217
+ // 0.33: a lock says its source, and a control can be exempt from one
218
+ // (docs/billing-harmonization.md §12.36): the kinds, the holds, `CommitScope`,
219
+ // `COMMIT_EXCEPT_BILLING` and the pure `writeLockFor`.
220
+ export { WriteLockProvider, useWriteLock, writeLockFor, COMMIT_EXCEPT_BILLING, DEFAULT_WRITE_LOCK_LABELS } from "./components/write-lock";
221
+ export type { WriteLock, WriteLockLabels, WriteLockProviderProps, WriteLockKind, WriteLockHold, CommitScope } from "./components/write-lock";
219
222
  // 0.18: the parts both apps' admin rosters repeat (Kurvenschmiede 6).
220
223
  export { RoleChip, AccountStateChip, DateMark, dateColumn, DEFAULT_ACCOUNT_STATE_LABELS, ACCOUNT_STATE_TONES } from "./components/account-chips";
221
224
  export type { RoleChipProps, RoleDefinition, RoleVocabulary, AccountState, AccountStateLabels, AccountStateChipProps, DateMarkProps, DateColumnOptions } from "./components/account-chips";
@@ -784,6 +787,7 @@ export type {
784
787
  RowActionsCollapse,
785
788
  RowActionsSize,
786
789
  RowActionsColumnOptions,
790
+ RowActionTone,
787
791
  } from "./components/row-actions";
788
792
  export { useLargeText, useCoarsePointer, useInlineFacts } from "./hooks/use-large-text";
789
793
  export type { AppearanceLabels } from "./components/appearance-labels";
@@ -803,12 +807,52 @@ export { PlanLimitNotice, planLimitMailto } from "./billing/plan-limit-notice";
803
807
  export type { PlanLimitNoticeProps } from "./billing/plan-limit-notice";
804
808
  export { isPlanLimit } from "./billing/plan-limit";
805
809
  export type { PlanLimitRefusal } from "./billing/plan-limit";
806
- export { combineWriteLocks, useBillingLockReason } from "./billing/billing-lock";
810
+ // 0.33.0: sources name their kind, the combined lock holds them all, and billing's is one
811
+ // hook (docs/billing-harmonization.md §12.36).
812
+ export { combineWriteLocks, useBillingLockReason, useBillingWriteLock } from "./billing/billing-lock";
807
813
  export type { WriteLockSource, CombinedWriteLock, BillingLockReasonOptions } from "./billing/billing-lock";
808
814
  export { billingLockAt, isBillingReadOnly, billingDaysLeft } from "./billing/billing-standing";
809
815
  export type { BillingStanding } from "./billing/billing-standing";
810
816
  export { SubscriptionActions } from "./billing/subscription-actions";
811
817
  export type { SubscriptionActionsProps } from "./billing/subscription-actions";
818
+ // ── 0.33.0: billing's round 0.33 (docs/billing-harmonization.md §14) ──
819
+ // The way back from a checkout and its "processing", router-agnostic (§14.4).
820
+ export {
821
+ CHECKOUT_RETURN_PARAM,
822
+ CHECKOUT_RETURN_VALUE,
823
+ isCheckoutReturn,
824
+ withoutCheckoutReturn,
825
+ checkoutReturnUrl,
826
+ } from "./billing/checkout-return";
827
+ export { checkoutFingerprint, checkoutLanded, noteCheckoutStarted, useCheckoutProcessing } from "./billing/checkout-processing";
828
+ export type { CheckoutOverview, CheckoutProcessingOptions } from "./billing/checkout-processing";
829
+ // The link to the pay page and Paddle's locale (§14.4); the page itself ships as dist/pay/.
830
+ export { PAY_PAGE_LANG_PARAM, paddleLocale, payPageUrl } from "./billing/pay-page";
831
+ export type { PaddleEnvironment } from "./billing/pay-page";
832
+ // The API's shapes the parts read, server-kit 0.7's (§4, §14.5), and the plan limit as
833
+ // a toast (§14.11).
834
+ export type { BillingOverview, SubscriptionSource, PortalTarget, PortalRequest } from "./billing/billing-overview";
835
+ export { usePlanLimitToast } from "./billing/plan-limit-toast";
836
+ export type { PlanLimitToastOptions } from "./billing/plan-limit-toast";
837
+ // The operator's plan parts (§14.12).
838
+ export {
839
+ planColumn,
840
+ usePlanColumn,
841
+ PlanChangeConfirm,
842
+ usePlanChangeResult,
843
+ DEFAULT_PLAN_CHANGE_LABELS,
844
+ } from "./admin/plan-change";
845
+ export type {
846
+ PlanChangeLabels,
847
+ PlanColumnOptions,
848
+ PlanColumnUsage,
849
+ PlanChange,
850
+ PlanChangeConfirmProps,
851
+ PlanChangeOutcome,
852
+ PlanChangeTone,
853
+ PlanChangeLine,
854
+ PlanChangeResultOptions,
855
+ } from "./admin/plan-change";
812
856
 
813
857
  // ── 0.22.0: the inputs round (kastlan's, keksdose's and Kurvenschmiede's audits) ──
814
858
  export * from "./components/checkbox-group";