@eifi1/ui-kit 0.32.0 → 0.32.2

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 (216) hide show
  1. package/dist/account/delete-account-setting.d.ts +1 -1
  2. package/dist/admin/admin-action-confirm.d.ts +1 -1
  3. package/dist/admin/admin-action-log.d.ts +1 -1
  4. package/dist/admin/admin-action-log.js +4 -2
  5. package/dist/admin/admin-action-log.js.map +1 -1
  6. package/dist/admin/invitations-panel.d.ts +1 -1
  7. package/dist/admin/reviewer-scope-editor.d.ts +1 -1
  8. package/dist/admin/role-select.d.ts +1 -1
  9. package/dist/admin/transfer-ownership-dialog.d.ts +1 -1
  10. package/dist/admin/user-roster.d.ts +1 -1
  11. package/dist/auth/register-form.d.ts +1 -1
  12. package/dist/billing/billing-banner.d.ts +1 -1
  13. package/dist/billing/billing-labels.d.ts +1 -1
  14. package/dist/billing/billing-labels.js +3 -1
  15. package/dist/billing/billing-labels.js.map +1 -1
  16. package/dist/billing/billing-lock.d.ts +1 -1
  17. package/dist/billing/billing-standing.d.ts +1 -1
  18. package/dist/billing/plan-card.d.ts +1 -1
  19. package/dist/billing/plan-card.js +1 -1
  20. package/dist/billing/plan-card.js.map +1 -1
  21. package/dist/billing/plan-limit-notice.d.ts +1 -1
  22. package/dist/billing/subscription-actions.d.ts +1 -1
  23. package/dist/billing/subscription-status-chip.d.ts +1 -1
  24. package/dist/chart.d.ts +2 -2
  25. package/dist/chart.js.map +1 -1
  26. package/dist/components/alert-banner.js +1 -1
  27. package/dist/components/alert-banner.js.map +1 -1
  28. package/dist/components/amount-input.d.ts +1 -1
  29. package/dist/components/appearance-labels.d.ts +6 -0
  30. package/dist/components/appearance-labels.js +2 -1
  31. package/dist/components/appearance-labels.js.map +1 -1
  32. package/dist/components/button-group.d.ts +1 -1
  33. package/dist/components/button-group.js +7 -1
  34. package/dist/components/button-group.js.map +1 -1
  35. package/dist/components/calculator.d.ts +1 -1
  36. package/dist/components/chip.js +7 -2
  37. package/dist/components/chip.js.map +1 -1
  38. package/dist/components/choice-card.js +1 -1
  39. package/dist/components/choice-card.js.map +1 -1
  40. package/dist/components/confirm-dialog.d.ts +1 -1
  41. package/dist/components/copy-button.d.ts +1 -1
  42. package/dist/components/danger-confirm.d.ts +1 -1
  43. package/dist/components/data-table-pagination.d.ts +2 -1
  44. package/dist/components/data-table-pagination.js +15 -6
  45. package/dist/components/data-table-pagination.js.map +1 -1
  46. package/dist/components/data-table.js +2 -2
  47. package/dist/components/data-table.js.map +1 -1
  48. package/dist/components/date-picker.js +11 -1
  49. package/dist/components/date-picker.js.map +1 -1
  50. package/dist/components/facing-pair.d.ts +1 -1
  51. package/dist/components/file-button.d.ts +1 -1
  52. package/dist/components/file-dropzone.d.ts +1 -1
  53. package/dist/components/form-actions.d.ts +1 -1
  54. package/dist/components/iban-input.d.ts +1 -1
  55. package/dist/components/inline-edit-field.js +4 -1
  56. package/dist/components/inline-edit-field.js.map +1 -1
  57. package/dist/components/language-select.d.ts +1 -1
  58. package/dist/components/legal-page.d.ts +1 -1
  59. package/dist/components/legal.d.ts +1 -1
  60. package/dist/components/money-field.d.ts +1 -1
  61. package/dist/components/month-picker.js +41 -34
  62. package/dist/components/month-picker.js.map +1 -1
  63. package/dist/components/number-field.d.ts +1 -1
  64. package/dist/components/number-input.d.ts +1 -1
  65. package/dist/components/numpad-sheet.d.ts +1 -1
  66. package/dist/components/page-header.js +6 -1
  67. package/dist/components/page-header.js.map +1 -1
  68. package/dist/components/phone-input.d.ts +1 -1
  69. package/dist/components/phone-input.js +2 -2
  70. package/dist/components/phone-input.js.map +1 -1
  71. package/dist/components/popover.d.ts +1 -1
  72. package/dist/components/popover.js +2 -0
  73. package/dist/components/popover.js.map +1 -1
  74. package/dist/components/row-actions.d.ts +1 -1
  75. package/dist/components/row-actions.js +97 -37
  76. package/dist/components/row-actions.js.map +1 -1
  77. package/dist/components/series-chart.d.ts +1 -1
  78. package/dist/components/settings-fields.d.ts +7 -3
  79. package/dist/components/settings-fields.js +2 -1
  80. package/dist/components/settings-fields.js.map +1 -1
  81. package/dist/components/share-card.d.ts +1 -1
  82. package/dist/components/share-card.js +6 -2
  83. package/dist/components/share-card.js.map +1 -1
  84. package/dist/components/status-dot.js +9 -2
  85. package/dist/components/status-dot.js.map +1 -1
  86. package/dist/components/swipeable-row.js +8 -1
  87. package/dist/components/swipeable-row.js.map +1 -1
  88. package/dist/components/text-link.d.ts +1 -1
  89. package/dist/components/time-input.d.ts +1 -1
  90. package/dist/components/toggle-group.d.ts +9 -2
  91. package/dist/components/toggle-group.js +3 -3
  92. package/dist/components/toggle-group.js.map +1 -1
  93. package/dist/components/translation-review-editor.js +1 -1
  94. package/dist/components/translation-review-editor.js.map +1 -1
  95. package/dist/components/translation-review.js +2 -2
  96. package/dist/components/translation-review.js.map +1 -1
  97. package/dist/components/ui.d.ts +1 -1
  98. package/dist/components/ui.js +6 -6
  99. package/dist/components/ui.js.map +1 -1
  100. package/dist/components/wizard-stepper.js +20 -14
  101. package/dist/components/wizard-stepper.js.map +1 -1
  102. package/dist/{delete-account-setting-BvdQdbv3.d.ts → delete-account-setting-Dy4kJgUm.d.ts} +53 -14
  103. package/dist/feedback/feedback-attachment.d.ts +1 -1
  104. package/dist/feedback/feedback-context.d.ts +1 -1
  105. package/dist/feedback/feedback-crash.d.ts +1 -1
  106. package/dist/feedback/feedback-dialog.d.ts +1 -1
  107. package/dist/feedback/feedback-inbox.d.ts +1 -1
  108. package/dist/feedback/feedback-labels.d.ts +1 -1
  109. package/dist/feedback/feedback-menu.d.ts +1 -1
  110. package/dist/feedback/feedback-record.d.ts +1 -1
  111. package/dist/feedback/feedback-row-detail.d.ts +1 -1
  112. package/dist/feedback/feedback-status-undo.d.ts +1 -1
  113. package/dist/feedback/feedback-submit.d.ts +1 -1
  114. package/dist/feedback/feedback-swipe.d.ts +1 -1
  115. package/dist/feedback/feedback-table.d.ts +1 -1
  116. package/dist/feedback/feedback-thread.d.ts +1 -1
  117. package/dist/feedback.d.ts +1 -1
  118. package/dist/hooks/use-breakpoint.d.ts +19 -8
  119. package/dist/hooks/use-breakpoint.js +1 -1
  120. package/dist/hooks/use-breakpoint.js.map +1 -1
  121. package/dist/hooks/use-file-drop.d.ts +1 -1
  122. package/dist/i18n/defaults.d.ts +1 -1
  123. package/dist/i18n/german.d.ts +1 -1
  124. package/dist/i18n/german.js +7 -3
  125. package/dist/i18n/german.js.map +1 -1
  126. package/dist/i18n/kit-labels.d.ts +1 -1
  127. package/dist/i18n/languages.d.ts +1 -1
  128. package/dist/i18n/locales/de-CH.d.ts +1 -1
  129. package/dist/i18n/locales/en.d.ts +1 -1
  130. package/dist/i18n/locales/es.d.ts +1 -1
  131. package/dist/i18n/locales/es.js +7 -3
  132. package/dist/i18n/locales/es.js.map +1 -1
  133. package/dist/i18n/locales/fr.d.ts +1 -1
  134. package/dist/i18n/locales/fr.js +7 -3
  135. package/dist/i18n/locales/fr.js.map +1 -1
  136. package/dist/i18n/locales/hu.d.ts +1 -1
  137. package/dist/i18n/locales/hu.js +7 -3
  138. package/dist/i18n/locales/hu.js.map +1 -1
  139. package/dist/i18n/locales/it.d.ts +1 -1
  140. package/dist/i18n/locales/it.js +7 -3
  141. package/dist/i18n/locales/it.js.map +1 -1
  142. package/dist/i18n/locales/zh.d.ts +1 -1
  143. package/dist/i18n/locales/zh.js +7 -3
  144. package/dist/i18n/locales/zh.js.map +1 -1
  145. package/dist/i18n/review.d.ts +1 -1
  146. package/dist/index.d.ts +3 -3
  147. package/dist/index.js +3 -1
  148. package/dist/index.js.map +1 -1
  149. package/dist/landing/landing-actions.d.ts +1 -1
  150. package/dist/landing/landing-sections.d.ts +1 -1
  151. package/dist/landing/landing-sections.js +7 -3
  152. package/dist/landing/landing-sections.js.map +1 -1
  153. package/dist/landing/public-header.d.ts +1 -1
  154. package/dist/landing/routing.d.ts +1 -1
  155. package/dist/rhf/fields.d.ts +1 -1
  156. package/dist/rhf/form.d.ts +1 -1
  157. package/dist/rhf.d.ts +1 -1
  158. package/dist/settings/settings-section.d.ts +1 -1
  159. package/dist/settings/use-account-appearance.d.ts +1 -1
  160. package/dist/settings/use-account-appearance.js.map +1 -1
  161. package/dist/shell/app-shell.d.ts +1 -1
  162. package/dist/shell/app-shell.js +2 -1
  163. package/dist/shell/app-shell.js.map +1 -1
  164. package/dist/shell/top-bar-brand.d.ts +1 -1
  165. package/dist/shell.d.ts +1 -1
  166. package/dist/theme/contrast.d.ts +3 -2
  167. package/dist/theme/contrast.js.map +1 -1
  168. package/dist/theme/text-size.d.ts +19 -3
  169. package/dist/theme/text-size.js.map +1 -1
  170. package/dist/wizard/stepper-nav.d.ts +1 -1
  171. package/dist/wizard/wizard-summary.js +1 -1
  172. package/dist/wizard/wizard-summary.js.map +1 -1
  173. package/dist/wizard.d.ts +1 -1
  174. package/package.json +1 -1
  175. package/src/admin/admin-action-log.tsx +6 -1
  176. package/src/billing/billing-labels.ts +16 -0
  177. package/src/billing/plan-card.tsx +1 -1
  178. package/src/chart.ts +2 -0
  179. package/src/components/alert-banner.tsx +5 -1
  180. package/src/components/appearance-labels.ts +7 -0
  181. package/src/components/button-group.tsx +21 -0
  182. package/src/components/chip.tsx +34 -6
  183. package/src/components/choice-card.tsx +1 -1
  184. package/src/components/data-table-pagination.tsx +60 -31
  185. package/src/components/data-table.tsx +8 -4
  186. package/src/components/date-picker.tsx +32 -1
  187. package/src/components/inline-edit-field.tsx +20 -1
  188. package/src/components/month-picker.tsx +6 -1
  189. package/src/components/page-header.tsx +15 -1
  190. package/src/components/phone-input.tsx +7 -2
  191. package/src/components/popover.tsx +4 -0
  192. package/src/components/row-actions.tsx +156 -49
  193. package/src/components/settings-fields.tsx +8 -3
  194. package/src/components/share-card.tsx +21 -2
  195. package/src/components/status-dot.tsx +25 -2
  196. package/src/components/swipeable-row.tsx +8 -1
  197. package/src/components/toggle-group.tsx +26 -12
  198. package/src/components/translation-review-editor.tsx +1 -1
  199. package/src/components/translation-review.tsx +5 -4
  200. package/src/components/ui.tsx +28 -9
  201. package/src/components/wizard-stepper.tsx +5 -1
  202. package/src/hooks/use-breakpoint.ts +20 -9
  203. package/src/i18n/german.ts +4 -0
  204. package/src/i18n/locales/es.ts +4 -0
  205. package/src/i18n/locales/fr.ts +4 -0
  206. package/src/i18n/locales/hu.ts +4 -0
  207. package/src/i18n/locales/it.ts +4 -0
  208. package/src/i18n/locales/zh.ts +4 -0
  209. package/src/index.ts +4 -2
  210. package/src/landing/landing-sections.tsx +7 -3
  211. package/src/settings/use-account-appearance.ts +1 -1
  212. package/src/shell/app-shell.tsx +11 -6
  213. package/src/theme/contrast.ts +3 -2
  214. package/src/theme/text-size.ts +19 -3
  215. package/src/wizard/wizard-summary.tsx +4 -2
  216. package/tokens.css +15 -7
@@ -7,20 +7,26 @@ function WizardStepper({
7
7
  ariaLabel
8
8
  }) {
9
9
  const currentIndex = steps.findIndex((s) => s.key === current);
10
- return /* @__PURE__ */ jsx("ol", { className: "flex items-center gap-1 text-xs", "aria-label": ariaLabel, children: steps.map((step, i) => /* @__PURE__ */ jsxs("li", { className: "flex items-center gap-1", children: [
11
- i > 0 && /* @__PURE__ */ jsx("span", { className: "w-4 border-t border-[var(--border)]" }),
12
- /* @__PURE__ */ jsx(
13
- "span",
14
- {
15
- "aria-current": step.key === current ? "step" : void 0,
16
- className: cn(
17
- "rounded-full px-2 py-0.5",
18
- i === currentIndex ? "bg-[var(--bg-inverse)] text-[var(--text-inverse)] font-medium" : i < currentIndex ? "text-[var(--text-secondary)]" : "text-[var(--text-placeholder)]"
19
- ),
20
- children: step.label
21
- }
22
- )
23
- ] }, step.key)) });
10
+ return (
11
+ // `flex-wrap`: the steps flow onto a second line rather than past the screen
12
+ // (0.32.1, the 360 px Extra-large sweep; docs/text-size-harmonization.md §4).
13
+ // "Upload — Map columns — Confirm" ran 22 px past a 360 px phone at Extra large.
14
+ // Where the steps fit, they stay one row.
15
+ /* @__PURE__ */ jsx("ol", { className: "flex flex-wrap items-center gap-1 text-xs", "aria-label": ariaLabel, children: steps.map((step, i) => /* @__PURE__ */ jsxs("li", { className: "flex items-center gap-1", children: [
16
+ i > 0 && /* @__PURE__ */ jsx("span", { className: "w-4 border-t border-[var(--border)]" }),
17
+ /* @__PURE__ */ jsx(
18
+ "span",
19
+ {
20
+ "aria-current": step.key === current ? "step" : void 0,
21
+ className: cn(
22
+ "rounded-full px-2 py-0.5",
23
+ i === currentIndex ? "bg-[var(--bg-inverse)] text-[var(--text-inverse)] font-medium" : i < currentIndex ? "text-[var(--text-secondary)]" : "text-[var(--text-placeholder)]"
24
+ ),
25
+ children: step.label
26
+ }
27
+ )
28
+ ] }, step.key)) })
29
+ );
24
30
  }
25
31
  export {
26
32
  WizardStepper
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/wizard-stepper.tsx"],"sourcesContent":["import { cn } from \"../lib/cn\";\n\n/** Compact step indicator for the import wizards. Past steps are plain, the\n * current one is highlighted, future ones muted. */\nexport function WizardStepper({\n steps,\n current,\n ariaLabel,\n}: {\n steps: { key: string; label: string }[];\n current: string;\n ariaLabel?: string;\n}) {\n const currentIndex = steps.findIndex((s) => s.key === current);\n return (\n <ol className=\"flex items-center gap-1 text-xs\" aria-label={ariaLabel}>\n {steps.map((step, i) => (\n <li key={step.key} className=\"flex items-center gap-1\">\n {i > 0 && <span className=\"w-4 border-t border-[var(--border)]\" />}\n <span\n aria-current={step.key === current ? \"step\" : undefined}\n className={cn(\n \"rounded-full px-2 py-0.5\",\n i === currentIndex\n ? \"bg-[var(--bg-inverse)] text-[var(--text-inverse)] font-medium\"\n : i < currentIndex\n ? \"text-[var(--text-secondary)]\"\n : \"text-[var(--text-placeholder)]\",\n )}\n >\n {step.label}\n </span>\n </li>\n ))}\n </ol>\n );\n}\n"],"mappings":";AAiBQ,SACY,KADZ;AAjBR,SAAS,UAAU;AAIZ,SAAS,cAAc;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,QAAM,eAAe,MAAM,UAAU,CAAC,MAAM,EAAE,QAAQ,OAAO;AAC7D,SACE,oBAAC,QAAG,WAAU,mCAAkC,cAAY,WACzD,gBAAM,IAAI,CAAC,MAAM,MAChB,qBAAC,QAAkB,WAAU,2BAC1B;AAAA,QAAI,KAAK,oBAAC,UAAK,WAAU,uCAAsC;AAAA,IAChE;AAAA,MAAC;AAAA;AAAA,QACC,gBAAc,KAAK,QAAQ,UAAU,SAAS;AAAA,QAC9C,WAAW;AAAA,UACT;AAAA,UACA,MAAM,eACF,kEACA,IAAI,eACF,iCACA;AAAA,QACR;AAAA,QAEC,eAAK;AAAA;AAAA,IACR;AAAA,OAdO,KAAK,GAed,CACD,GACH;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../src/components/wizard-stepper.tsx"],"sourcesContent":["import { cn } from \"../lib/cn\";\n\n/** Compact step indicator for the import wizards. Past steps are plain, the\n * current one is highlighted, future ones muted. */\nexport function WizardStepper({\n steps,\n current,\n ariaLabel,\n}: {\n steps: { key: string; label: string }[];\n current: string;\n ariaLabel?: string;\n}) {\n const currentIndex = steps.findIndex((s) => s.key === current);\n return (\n // `flex-wrap`: the steps flow onto a second line rather than past the screen\n // (0.32.1, the 360 px Extra-large sweep; docs/text-size-harmonization.md §4).\n // \"Upload — Map columns — Confirm\" ran 22 px past a 360 px phone at Extra large.\n // Where the steps fit, they stay one row.\n <ol className=\"flex flex-wrap items-center gap-1 text-xs\" aria-label={ariaLabel}>\n {steps.map((step, i) => (\n <li key={step.key} className=\"flex items-center gap-1\">\n {i > 0 && <span className=\"w-4 border-t border-[var(--border)]\" />}\n <span\n aria-current={step.key === current ? \"step\" : undefined}\n className={cn(\n \"rounded-full px-2 py-0.5\",\n i === currentIndex\n ? \"bg-[var(--bg-inverse)] text-[var(--text-inverse)] font-medium\"\n : i < currentIndex\n ? \"text-[var(--text-secondary)]\"\n : \"text-[var(--text-placeholder)]\",\n )}\n >\n {step.label}\n </span>\n </li>\n ))}\n </ol>\n );\n}\n"],"mappings":";AAqBQ,SACY,KADZ;AArBR,SAAS,UAAU;AAIZ,SAAS,cAAc;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,QAAM,eAAe,MAAM,UAAU,CAAC,MAAM,EAAE,QAAQ,OAAO;AAC7D;AAAA;AAAA;AAAA;AAAA;AAAA,IAKE,oBAAC,QAAG,WAAU,6CAA4C,cAAY,WACnE,gBAAM,IAAI,CAAC,MAAM,MAChB,qBAAC,QAAkB,WAAU,2BAC1B;AAAA,UAAI,KAAK,oBAAC,UAAK,WAAU,uCAAsC;AAAA,MAChE;AAAA,QAAC;AAAA;AAAA,UACC,gBAAc,KAAK,QAAQ,UAAU,SAAS;AAAA,UAC9C,WAAW;AAAA,YACT;AAAA,YACA,MAAM,eACF,kEACA,IAAI,eACF,iCACA;AAAA,UACR;AAAA,UAEC,eAAK;AAAA;AAAA,MACR;AAAA,SAdO,KAAK,GAed,CACD,GACH;AAAA;AAEJ;","names":[]}
@@ -3904,8 +3904,25 @@ interface RowAction {
3904
3904
  key?: string;
3905
3905
  /** The action's name: the inline icon's name and tooltip, the menu entry's words. */
3906
3906
  label: string;
3907
- /** Runs it. The kit sends nothing — the app opens its confirmation or calls its API. */
3908
- onSelect: () => void;
3907
+ /**
3908
+ * Runs it. The kit sends nothing — the app opens its confirmation or calls its API.
3909
+ * Optional only beside `href`; an action has one or the other (or both: `onSelect`
3910
+ * then runs as the link is followed).
3911
+ */
3912
+ onSelect?: () => void;
3913
+ /**
3914
+ * The action NAVIGATES — an edit page, a mail to compose (0.32.1, kastlan's 0.32
3915
+ * report): a real link inline and in the menu, so open in a new tab, a middle click
3916
+ * and the URL on hover work, which `onSelect` + `navigate` lost. The kit's link rule
3917
+ * applies ({@link Button}'s `href`): in-app through the provider's `linkComponent`, an
3918
+ * external or `#anchor` one a plain `<a>`, `mailto:` included.
3919
+ *
3920
+ * A link cannot carry a reason or a spinner, so an action with a `disabledReason`
3921
+ * (or under a write lock, with `commit`) or `pending` stays a button and says why.
3922
+ */
3923
+ href?: string;
3924
+ /** With `href`: leaves the app — a new tab, and a screen reader is told so. */
3925
+ external?: boolean;
3909
3926
  /**
3910
3927
  * The glyph: a Lucide icon (`Pencil`), or an element (`<Pencil />`, an app's own
3911
3928
  * svg) — DataTable's `rowActions` hand their `icon` node through. Inline, an action
@@ -3968,8 +3985,8 @@ type RowActionsSize = Extract<IconButtonSize, "md" | "sm" | "xs" | "2xs">;
3968
3985
  interface RowActionsProps {
3969
3986
  actions: RowActionList;
3970
3987
  /** The row's name, for the menu button's name — "Actions for Ada Example". Without it
3971
- * the button is "Actions". */
3972
- name?: string;
3988
+ * (or `null`, as API fields often are) the button is "Actions". */
3989
+ name?: string | null;
3973
3990
  /** When the actions collapse into the menu — see {@link RowActionsCollapse}. */
3974
3991
  collapse?: RowActionsCollapse;
3975
3992
  /** The inline icons' and the "⋯" button's size. Default `xs`, a list row's action. */
@@ -4002,8 +4019,9 @@ interface RowActionsColumnOptions<T> {
4002
4019
  key?: string;
4003
4020
  /** The row's actions — `false` / `null` for the ones a condition leaves out. */
4004
4021
  actions: (row: T) => RowActionList;
4005
- /** The row's name, for the "⋯" button's name ("Actions for Ada Example"). */
4006
- name?: (row: T) => string | undefined;
4022
+ /** The row's name, for the "⋯" button's name ("Actions for Ada Example"). `null` and
4023
+ * `undefined` both mean "Actions". */
4024
+ name?: (row: T) => string | null | undefined;
4007
4025
  collapse?: RowActionsCollapse;
4008
4026
  /** Default `xs`. */
4009
4027
  size?: RowActionsSize;
@@ -4951,6 +4969,17 @@ interface BillingLabels {
4951
4969
  waitingChanges: (count: number) => string;
4952
4970
  /** The sign-out guard's way out for someone who will not pay. */
4953
4971
  discardWaiting: string;
4972
+ /**
4973
+ * `billing_not_configured`: billing is on but the provider's settings are missing — the
4974
+ * operator's mistake, so the words ask the payer to wait, not to act. For the toast or
4975
+ * alert after "Choose a plan" or "Payment and invoices" (`isBillingError(err,
4976
+ * "billing_not_configured")`). `billing_read_only` and `plan_limit` need none: the
4977
+ * write lock, the banner and `PlanLimitNotice` say them.
4978
+ */
4979
+ notConfigured: string;
4980
+ /** `billing_disabled`: billing is switched off on this server (§2.9), for a page or a
4981
+ * link that reached it anyway. */
4982
+ disabled: string;
4954
4983
  }
4955
4984
  declare const DEFAULT_BILLING_LABELS: BillingLabels;
4956
4985
  /** The `billing` namespace, resolved: English, then the provider, then `labels` — which
@@ -5117,11 +5146,15 @@ interface AppShellProps extends ComponentPropsWithoutRef<"div"> {
5117
5146
  mobileSubNav?: boolean;
5118
5147
  /**
5119
5148
  * How the phone sub-nav lays out a group with more pages than fit on one row.
5120
- * `"wrap"` (default): every page in view, on as many rows as it takes — the bar
5121
- * grows. `"scroll"`: one row that scrolls sideways, faded at a cut edge, with the
5122
- * current page scrolled into view. A long group took four rows (~130px) of a 390px
5123
- * screen above the bottom bar (showcase audit); scrolling gives that back at the
5124
- * price of pages hidden past the edge, so it is the app's call, per shell.
5149
+ * `"wrap"`: every page in view, on as many rows as it takes — the bar grows.
5150
+ * `"scroll"`: one row that scrolls sideways, faded at a cut edge, with the current
5151
+ * page scrolled into view. A long group took four rows (~130px) of a 390px screen
5152
+ * above the bottom bar (showcase audit); scrolling gives that back at the price of
5153
+ * pages hidden past the edge, so it is the app's call, per shell.
5154
+ *
5155
+ * Unset (0.32.2, kastlan's 0.32.1 report): `"wrap"` at Normal and `"scroll"` at Large
5156
+ * and Extra large, where a wrapped group of eight pages took six or seven rows and
5157
+ * covered the page — the other half of what `mobileBarMax` does for the bar.
5125
5158
  */
5126
5159
  mobileSubNavLayout?: "wrap" | "scroll";
5127
5160
  /**
@@ -5160,7 +5193,7 @@ interface AppShellProps extends ComponentPropsWithoutRef<"div"> {
5160
5193
  * `NavLink`; domain-free — nav items, brand, footer and the top bar's actions
5161
5194
  * are all supplied by the app.
5162
5195
  */
5163
- declare function AppShell({ nav, topBar, children, footer, sidebarFooter, sidebarFooterItems, renderLink, collapseStorageKey: collapseStorageKeyProp, collapseLabel, expandLabel, subNav, mobileSubNav, mobileSubNavLayout, mobileBarMax, moreLabels, toggleGroupLabel, embedded: embeddedProp, className, ...rest }: AppShellProps): react.JSX.Element;
5196
+ declare function AppShell({ nav, topBar, children, footer, sidebarFooter, sidebarFooterItems, renderLink, collapseStorageKey: collapseStorageKeyProp, collapseLabel, expandLabel, subNav, mobileSubNav, mobileSubNavLayout: mobileSubNavLayoutProp, mobileBarMax, moreLabels, toggleGroupLabel, embedded: embeddedProp, className, ...rest }: AppShellProps): react.JSX.Element;
5164
5197
 
5165
5198
  /**
5166
5199
  * Who holds one record, and the owner's every way of changing that — Kurvenschmiede's
@@ -6876,8 +6909,14 @@ interface CardHeaderProps extends ComponentPropsWithoutRef<"div"> {
6876
6909
  * description instead of beside them. For an action that is wider than an icon —
6877
6910
  * a "Set up two-factor" button, a checkbox and a filter — which, kept in the
6878
6911
  * top-end column on a 390px phone, squeezed the title into a ribbon two words wide
6879
- * (keksdose's settings cards). Off by default: an icon action (the wizard summary's
6880
- * pencil) is narrow enough to stay beside the title at every width.
6912
+ * (keksdose's settings cards). Off by default at Normal: an icon action (the wizard
6913
+ * summary's pencil) is narrow enough to stay beside the title at every width.
6914
+ *
6915
+ * Unset, it stacks at Large and Extra large only (0.32.1, the 360 px Extra-large
6916
+ * sweep; docs/text-size-harmonization.md §4): there an IconButton shows its label as
6917
+ * text, so the "icon" action is a word-wide pill, and "Refresh sessions" beside
6918
+ * "Sessions" ran 47 px past a 360 px phone. `false` keeps the action beside the title
6919
+ * at every size, for an action the caller knows stays narrow (`labelVisible={false}`).
6881
6920
  */
6882
6921
  stackAction?: boolean;
6883
6922
  }
@@ -1,5 +1,5 @@
1
1
  import 'react';
2
- export { D as DEFAULT_ATTACHMENT_ACCEPT, e as DEFAULT_FEEDBACK_ATTACHMENT_LABELS, p as DEFAULT_MAX_ATTACHMENTS, q as DEFAULT_MAX_ATTACHMENT_BYTES, A as FeedbackAttachmentError, B as FeedbackAttachmentErrorInfo, E as FeedbackAttachmentField, G as FeedbackAttachmentFieldLabels, H as FeedbackAttachmentFieldMultipleProps, I as FeedbackAttachmentFieldProps, J as FeedbackAttachmentFieldRefsProps, K as FeedbackAttachmentFieldSingleProps, M as FeedbackAttachmentRef, N as FeedbackAttachmentRefsError, be as pastedName } from '../delete-account-setting-BvdQdbv3.js';
2
+ export { D as DEFAULT_ATTACHMENT_ACCEPT, e as DEFAULT_FEEDBACK_ATTACHMENT_LABELS, p as DEFAULT_MAX_ATTACHMENTS, q as DEFAULT_MAX_ATTACHMENT_BYTES, A as FeedbackAttachmentError, B as FeedbackAttachmentErrorInfo, E as FeedbackAttachmentField, G as FeedbackAttachmentFieldLabels, H as FeedbackAttachmentFieldMultipleProps, I as FeedbackAttachmentFieldProps, J as FeedbackAttachmentFieldRefsProps, K as FeedbackAttachmentFieldSingleProps, M as FeedbackAttachmentRef, N as FeedbackAttachmentRefsError, be as pastedName } from '../delete-account-setting-Dy4kJgUm.js';
3
3
  import '../components/tooltip.js';
4
4
  import '../hooks/use-anchored-rect.js';
5
5
  import '../lib/clipping.js';
@@ -1,5 +1,5 @@
1
1
  import 'react';
2
- export { h as DEFAULT_FEEDBACK_CONTEXT_LABELS, a0 as FeedbackContextBox, a1 as FeedbackContextBoxProps, a2 as FeedbackContextInput, a3 as FeedbackContextLabels, aM as FeedbackSubmitter, b2 as feedbackContext } from '../delete-account-setting-BvdQdbv3.js';
2
+ export { h as DEFAULT_FEEDBACK_CONTEXT_LABELS, a0 as FeedbackContextBox, a1 as FeedbackContextBoxProps, a2 as FeedbackContextInput, a3 as FeedbackContextLabels, aM as FeedbackSubmitter, b2 as feedbackContext } from '../delete-account-setting-Dy4kJgUm.js';
3
3
  import '../components/tooltip.js';
4
4
  import '../hooks/use-anchored-rect.js';
5
5
  import '../lib/clipping.js';
@@ -1,5 +1,5 @@
1
1
  import { CrashReport } from '../components/error-boundary.js';
2
- import { ah as FeedbackEnvironment } from '../delete-account-setting-BvdQdbv3.js';
2
+ import { ah as FeedbackEnvironment } from '../delete-account-setting-Dy4kJgUm.js';
3
3
  import 'react';
4
4
  import '../components/tooltip.js';
5
5
  import '../hooks/use-anchored-rect.js';
@@ -1,5 +1,5 @@
1
1
  import 'react';
2
- export { j as DEFAULT_FEEDBACK_DIALOG_LABELS, L as FeedbackAttachmentLabels, T as FeedbackCategoryOption, a9 as FeedbackDialog, aa as FeedbackDialogLabels, ab as FeedbackDialogMultipleProps, ac as FeedbackDialogProps, ad as FeedbackDialogSingleProps, ae as FeedbackDialogTextLabels, an as FeedbackMultipleSubmission, aK as FeedbackSubmission, aL as FeedbackSubmitHint } from '../delete-account-setting-BvdQdbv3.js';
2
+ export { j as DEFAULT_FEEDBACK_DIALOG_LABELS, L as FeedbackAttachmentLabels, T as FeedbackCategoryOption, a9 as FeedbackDialog, aa as FeedbackDialogLabels, ab as FeedbackDialogMultipleProps, ac as FeedbackDialogProps, ad as FeedbackDialogSingleProps, ae as FeedbackDialogTextLabels, an as FeedbackMultipleSubmission, aK as FeedbackSubmission, aL as FeedbackSubmitHint } from '../delete-account-setting-Dy4kJgUm.js';
3
3
  import '../components/tooltip.js';
4
4
  import '../hooks/use-anchored-rect.js';
5
5
  import '../lib/clipping.js';
@@ -1,6 +1,6 @@
1
1
  import 'react';
2
2
  import 'lucide-react';
3
- export { t as FEEDBACK_CATEGORY_META, u as FEEDBACK_CATEGORY_ORDER, x as FEEDBACK_STATUS_META, y as FEEDBACK_STATUS_ORDER, Q as FeedbackCategory, R as FeedbackCategoryBadge, a4 as FeedbackDetail, a7 as FeedbackDetailSection, ao as FeedbackNoteAttachment, ap as FeedbackNoteEditor, ar as FeedbackProse, az as FeedbackStatus, aA as FeedbackStatusBadge, aG as FeedbackStatusTransitions, b0 as feedbackCategoryRank, bd as nextFeedbackStatus, bh as selectableFeedbackStatuses, bs as visibleFeedbackStatuses } from '../delete-account-setting-BvdQdbv3.js';
3
+ export { t as FEEDBACK_CATEGORY_META, u as FEEDBACK_CATEGORY_ORDER, x as FEEDBACK_STATUS_META, y as FEEDBACK_STATUS_ORDER, Q as FeedbackCategory, R as FeedbackCategoryBadge, a4 as FeedbackDetail, a7 as FeedbackDetailSection, ao as FeedbackNoteAttachment, ap as FeedbackNoteEditor, ar as FeedbackProse, az as FeedbackStatus, aA as FeedbackStatusBadge, aG as FeedbackStatusTransitions, b0 as feedbackCategoryRank, bd as nextFeedbackStatus, bh as selectableFeedbackStatuses, bs as visibleFeedbackStatuses } from '../delete-account-setting-Dy4kJgUm.js';
4
4
  import '../components/tooltip.js';
5
5
  import '../hooks/use-anchored-rect.js';
6
6
  import '../lib/clipping.js';
@@ -1,4 +1,4 @@
1
- export { f as DEFAULT_FEEDBACK_CATEGORY_LABELS, m as DEFAULT_FEEDBACK_STATUS_LABELS, o as DEFAULT_FEEDBACK_TOAST_LABELS, S as FeedbackCategoryLabels, aC as FeedbackStatusLabels, aV as FeedbackToastLabels, bk as useFeedbackCategoryLabels, bp as useFeedbackStatusLabels, br as useFeedbackToastLabels } from '../delete-account-setting-BvdQdbv3.js';
1
+ export { f as DEFAULT_FEEDBACK_CATEGORY_LABELS, m as DEFAULT_FEEDBACK_STATUS_LABELS, o as DEFAULT_FEEDBACK_TOAST_LABELS, S as FeedbackCategoryLabels, aC as FeedbackStatusLabels, aV as FeedbackToastLabels, bk as useFeedbackCategoryLabels, bp as useFeedbackStatusLabels, br as useFeedbackToastLabels } from '../delete-account-setting-Dy4kJgUm.js';
2
2
  import 'react';
3
3
  import '../components/tooltip.js';
4
4
  import '../hooks/use-anchored-rect.js';
@@ -1,7 +1,7 @@
1
1
  import 'react';
2
2
  import '../components/user-avatar.js';
3
3
  import '../shell/topbar-action-menu.js';
4
- export { k as DEFAULT_FEEDBACK_MENU_LABELS, ai as FeedbackMenu, aj as FeedbackMenuLabels, ak as FeedbackMenuProps } from '../delete-account-setting-BvdQdbv3.js';
4
+ export { k as DEFAULT_FEEDBACK_MENU_LABELS, ai as FeedbackMenu, aj as FeedbackMenuLabels, ak as FeedbackMenuProps } from '../delete-account-setting-Dy4kJgUm.js';
5
5
  import '../lib/person-name.js';
6
6
  import '../components/status-dot.js';
7
7
  import '../components/progress-bar.js';
@@ -1,4 +1,4 @@
1
- export { F as FEEDBACK_ATTACHMENT_ACCEPT, r as FEEDBACK_AUTHOR_EDITABLE_STATUSES, s as FEEDBACK_AWAITING_STATUSES, v as FEEDBACK_PICKABLE_CATEGORIES, w as FEEDBACK_REWORKABLE_STATUSES, $ as FeedbackContext, ah as FeedbackEnvironment, as as FeedbackRecord, aY as appendRework, aZ as attachmentName, a_ as feedbackAttachmentLine, bc as isImageAttachment, bf as replaceDescription, bg as reworkCount, bi as splitBodyAttachments, bj as splitDescription } from '../delete-account-setting-BvdQdbv3.js';
1
+ export { F as FEEDBACK_ATTACHMENT_ACCEPT, r as FEEDBACK_AUTHOR_EDITABLE_STATUSES, s as FEEDBACK_AWAITING_STATUSES, v as FEEDBACK_PICKABLE_CATEGORIES, w as FEEDBACK_REWORKABLE_STATUSES, $ as FeedbackContext, ah as FeedbackEnvironment, as as FeedbackRecord, aY as appendRework, aZ as attachmentName, a_ as feedbackAttachmentLine, bc as isImageAttachment, bf as replaceDescription, bg as reworkCount, bi as splitBodyAttachments, bj as splitDescription } from '../delete-account-setting-Dy4kJgUm.js';
2
2
  import 'react';
3
3
  import '../components/tooltip.js';
4
4
  import '../hooks/use-anchored-rect.js';
@@ -1,6 +1,6 @@
1
1
  import 'react';
2
2
  import '../hooks/use-authed-src.js';
3
- export { i as DEFAULT_FEEDBACK_DETAIL_LABELS, a5 as FeedbackDetailLabels, a6 as FeedbackDetailPatch, a8 as FeedbackDetailUpdate, au as FeedbackReworkSection, av as FeedbackReworkSectionProps, aw as FeedbackRowAccess, ax as FeedbackRowDetail, ay as FeedbackRowDetailProps, aW as FeedbackUpload, a$ as feedbackAttachmentUrls, b5 as feedbackPageHref, b6 as feedbackPagePath, b7 as feedbackPageUrl, b8 as feedbackRowAccess, bm as useFeedbackDetailLabels } from '../delete-account-setting-BvdQdbv3.js';
3
+ export { i as DEFAULT_FEEDBACK_DETAIL_LABELS, a5 as FeedbackDetailLabels, a6 as FeedbackDetailPatch, a8 as FeedbackDetailUpdate, au as FeedbackReworkSection, av as FeedbackReworkSectionProps, aw as FeedbackRowAccess, ax as FeedbackRowDetail, ay as FeedbackRowDetailProps, aW as FeedbackUpload, a$ as feedbackAttachmentUrls, b5 as feedbackPageHref, b6 as feedbackPagePath, b7 as feedbackPageUrl, b8 as feedbackRowAccess, bm as useFeedbackDetailLabels } from '../delete-account-setting-Dy4kJgUm.js';
4
4
  import '../components/tooltip.js';
5
5
  import '../hooks/use-anchored-rect.js';
6
6
  import '../lib/clipping.js';
@@ -1,4 +1,4 @@
1
- export { z as FEEDBACK_UNDO_DURATION, aB as FeedbackStatusChange, aD as FeedbackStatusMutate, aE as FeedbackStatusPatch, aF as FeedbackStatusRow, aH as FeedbackStatusUndoOptions, bq as useFeedbackStatusUndo } from '../delete-account-setting-BvdQdbv3.js';
1
+ export { z as FEEDBACK_UNDO_DURATION, aB as FeedbackStatusChange, aD as FeedbackStatusMutate, aE as FeedbackStatusPatch, aF as FeedbackStatusRow, aH as FeedbackStatusUndoOptions, bq as useFeedbackStatusUndo } from '../delete-account-setting-Dy4kJgUm.js';
2
2
  import 'react';
3
3
  import '../components/tooltip.js';
4
4
  import '../hooks/use-anchored-rect.js';
@@ -1,5 +1,5 @@
1
1
  import { ReactNode } from 'react';
2
- import { Q as FeedbackCategory, $ as FeedbackContext, aM as FeedbackSubmitter, ah as FeedbackEnvironment } from '../delete-account-setting-BvdQdbv3.js';
2
+ import { Q as FeedbackCategory, $ as FeedbackContext, aM as FeedbackSubmitter, ah as FeedbackEnvironment } from '../delete-account-setting-Dy4kJgUm.js';
3
3
  import '../components/tooltip.js';
4
4
  import '../hooks/use-anchored-rect.js';
5
5
  import '../lib/clipping.js';
@@ -1,5 +1,5 @@
1
1
  import { M as MobileSwipeActions } from '../data-table-labels-kpAAVi6g.js';
2
- import { aB as FeedbackStatusChange, aC as FeedbackStatusLabels, aF as FeedbackStatusRow } from '../delete-account-setting-BvdQdbv3.js';
2
+ import { aB as FeedbackStatusChange, aC as FeedbackStatusLabels, aF as FeedbackStatusRow } from '../delete-account-setting-Dy4kJgUm.js';
3
3
  import 'react';
4
4
  import '../components/data-table-sort.js';
5
5
  import '../components/swipeable-row.js';
@@ -1,7 +1,7 @@
1
1
  import 'react';
2
2
  import '../components/floating-panel.js';
3
3
  import '../data-table-labels-kpAAVi6g.js';
4
- export { l as DEFAULT_FEEDBACK_PAGE_LABELS, O as FeedbackAwaitingToggle, P as FeedbackAwaitingToggleProps, U as FeedbackColumnsOptions, af as FeedbackEmptyState, ag as FeedbackEmptyStateProps, al as FeedbackMobileCard, am as FeedbackMobileCardProps, aq as FeedbackPageLabels, at as FeedbackRenderDate, aI as FeedbackSubject, aJ as FeedbackSubjectProps, aN as FeedbackTableRow, aX as UseFeedbackColumnsOptions, b1 as feedbackColumns, b3 as feedbackEnvironment, b4 as feedbackMobileGroupBy, b9 as feedbackSubmitter, ba as feedbackSubmitterEmail, bb as isFeedbackAwaiting, bl as useFeedbackColumns, bn as useFeedbackPageLabels, bo as useFeedbackRenderDate } from '../delete-account-setting-BvdQdbv3.js';
4
+ export { l as DEFAULT_FEEDBACK_PAGE_LABELS, O as FeedbackAwaitingToggle, P as FeedbackAwaitingToggleProps, U as FeedbackColumnsOptions, af as FeedbackEmptyState, ag as FeedbackEmptyStateProps, al as FeedbackMobileCard, am as FeedbackMobileCardProps, aq as FeedbackPageLabels, at as FeedbackRenderDate, aI as FeedbackSubject, aJ as FeedbackSubjectProps, aN as FeedbackTableRow, aX as UseFeedbackColumnsOptions, b1 as feedbackColumns, b3 as feedbackEnvironment, b4 as feedbackMobileGroupBy, b9 as feedbackSubmitter, ba as feedbackSubmitterEmail, bb as isFeedbackAwaiting, bl as useFeedbackColumns, bn as useFeedbackPageLabels, bo as useFeedbackRenderDate } from '../delete-account-setting-Dy4kJgUm.js';
5
5
  import '../components/tooltip.js';
6
6
  import '../hooks/use-anchored-rect.js';
7
7
  import '../lib/clipping.js';
@@ -1,5 +1,5 @@
1
1
  import 'react';
2
- export { C as ChatComposer, a as ChatComposerHandle, b as ChatComposerLabels, c as ChatComposerProps, d as ChatComposerSlotContext, g as DEFAULT_FEEDBACK_COMPOSER_LABELS, n as DEFAULT_FEEDBACK_THREAD_LABELS, V as FeedbackComposer, W as FeedbackComposerAttachment, X as FeedbackComposerHandle, Y as FeedbackComposerLabels, Z as FeedbackComposerProps, _ as FeedbackComposerSlotContext, aO as FeedbackThread, aP as FeedbackThreadAttachment, aQ as FeedbackThreadEvent, aR as FeedbackThreadItem, aS as FeedbackThreadLabels, aT as FeedbackThreadMessage, aU as FeedbackThreadProps } from '../delete-account-setting-BvdQdbv3.js';
2
+ export { C as ChatComposer, a as ChatComposerHandle, b as ChatComposerLabels, c as ChatComposerProps, d as ChatComposerSlotContext, g as DEFAULT_FEEDBACK_COMPOSER_LABELS, n as DEFAULT_FEEDBACK_THREAD_LABELS, V as FeedbackComposer, W as FeedbackComposerAttachment, X as FeedbackComposerHandle, Y as FeedbackComposerLabels, Z as FeedbackComposerProps, _ as FeedbackComposerSlotContext, aO as FeedbackThread, aP as FeedbackThreadAttachment, aQ as FeedbackThreadEvent, aR as FeedbackThreadItem, aS as FeedbackThreadLabels, aT as FeedbackThreadMessage, aU as FeedbackThreadProps } from '../delete-account-setting-Dy4kJgUm.js';
3
3
  import '../components/tooltip.js';
4
4
  import '../hooks/use-anchored-rect.js';
5
5
  import '../lib/clipping.js';
@@ -1,4 +1,4 @@
1
- export { C as ChatComposer, a as ChatComposerHandle, b as ChatComposerLabels, c as ChatComposerProps, d as ChatComposerSlotContext, D as DEFAULT_ATTACHMENT_ACCEPT, e as DEFAULT_FEEDBACK_ATTACHMENT_LABELS, f as DEFAULT_FEEDBACK_CATEGORY_LABELS, g as DEFAULT_FEEDBACK_COMPOSER_LABELS, h as DEFAULT_FEEDBACK_CONTEXT_LABELS, i as DEFAULT_FEEDBACK_DETAIL_LABELS, j as DEFAULT_FEEDBACK_DIALOG_LABELS, k as DEFAULT_FEEDBACK_MENU_LABELS, l as DEFAULT_FEEDBACK_PAGE_LABELS, m as DEFAULT_FEEDBACK_STATUS_LABELS, n as DEFAULT_FEEDBACK_THREAD_LABELS, o as DEFAULT_FEEDBACK_TOAST_LABELS, p as DEFAULT_MAX_ATTACHMENTS, q as DEFAULT_MAX_ATTACHMENT_BYTES, F as FEEDBACK_ATTACHMENT_ACCEPT, r as FEEDBACK_AUTHOR_EDITABLE_STATUSES, s as FEEDBACK_AWAITING_STATUSES, t as FEEDBACK_CATEGORY_META, u as FEEDBACK_CATEGORY_ORDER, v as FEEDBACK_PICKABLE_CATEGORIES, w as FEEDBACK_REWORKABLE_STATUSES, x as FEEDBACK_STATUS_META, y as FEEDBACK_STATUS_ORDER, z as FEEDBACK_UNDO_DURATION, A as FeedbackAttachmentError, B as FeedbackAttachmentErrorInfo, E as FeedbackAttachmentField, G as FeedbackAttachmentFieldLabels, H as FeedbackAttachmentFieldMultipleProps, I as FeedbackAttachmentFieldProps, J as FeedbackAttachmentFieldRefsProps, K as FeedbackAttachmentFieldSingleProps, L as FeedbackAttachmentLabels, M as FeedbackAttachmentRef, N as FeedbackAttachmentRefsError, O as FeedbackAwaitingToggle, P as FeedbackAwaitingToggleProps, Q as FeedbackCategory, R as FeedbackCategoryBadge, S as FeedbackCategoryLabels, T as FeedbackCategoryOption, U as FeedbackColumnsOptions, V as FeedbackComposer, W as FeedbackComposerAttachment, X as FeedbackComposerHandle, Y as FeedbackComposerLabels, Z as FeedbackComposerProps, _ as FeedbackComposerSlotContext, $ as FeedbackContext, a0 as FeedbackContextBox, a1 as FeedbackContextBoxProps, a2 as FeedbackContextInput, a3 as FeedbackContextLabels, a4 as FeedbackDetail, a5 as FeedbackDetailLabels, a6 as FeedbackDetailPatch, a7 as FeedbackDetailSection, a8 as FeedbackDetailUpdate, a9 as FeedbackDialog, aa as FeedbackDialogLabels, ab as FeedbackDialogMultipleProps, ac as FeedbackDialogProps, ad as FeedbackDialogSingleProps, ae as FeedbackDialogTextLabels, af as FeedbackEmptyState, ag as FeedbackEmptyStateProps, ah as FeedbackEnvironment, ai as FeedbackMenu, aj as FeedbackMenuLabels, ak as FeedbackMenuProps, al as FeedbackMobileCard, am as FeedbackMobileCardProps, an as FeedbackMultipleSubmission, ao as FeedbackNoteAttachment, ap as FeedbackNoteEditor, aq as FeedbackPageLabels, ar as FeedbackProse, as as FeedbackRecord, at as FeedbackRenderDate, au as FeedbackReworkSection, av as FeedbackReworkSectionProps, aw as FeedbackRowAccess, ax as FeedbackRowDetail, ay as FeedbackRowDetailProps, az as FeedbackStatus, aA as FeedbackStatusBadge, aB as FeedbackStatusChange, aC as FeedbackStatusLabels, aD as FeedbackStatusMutate, aE as FeedbackStatusPatch, aF as FeedbackStatusRow, aG as FeedbackStatusTransitions, aH as FeedbackStatusUndoOptions, aI as FeedbackSubject, aJ as FeedbackSubjectProps, aK as FeedbackSubmission, aL as FeedbackSubmitHint, aM as FeedbackSubmitter, aN as FeedbackTableRow, aO as FeedbackThread, aP as FeedbackThreadAttachment, aQ as FeedbackThreadEvent, aR as FeedbackThreadItem, aS as FeedbackThreadLabels, aT as FeedbackThreadMessage, aU as FeedbackThreadProps, aV as FeedbackToastLabels, aW as FeedbackUpload, aX as UseFeedbackColumnsOptions, aY as appendRework, aZ as attachmentName, a_ as feedbackAttachmentLine, a$ as feedbackAttachmentUrls, b0 as feedbackCategoryRank, b1 as feedbackColumns, b2 as feedbackContext, b3 as feedbackEnvironment, b4 as feedbackMobileGroupBy, b5 as feedbackPageHref, b6 as feedbackPagePath, b7 as feedbackPageUrl, b8 as feedbackRowAccess, b9 as feedbackSubmitter, ba as feedbackSubmitterEmail, bb as isFeedbackAwaiting, bc as isImageAttachment, bd as nextFeedbackStatus, be as pastedName, bf as replaceDescription, bg as reworkCount, bh as selectableFeedbackStatuses, bi as splitBodyAttachments, bj as splitDescription, bk as useFeedbackCategoryLabels, bl as useFeedbackColumns, bm as useFeedbackDetailLabels, bn as useFeedbackPageLabels, bo as useFeedbackRenderDate, bp as useFeedbackStatusLabels, bq as useFeedbackStatusUndo, br as useFeedbackToastLabels, bs as visibleFeedbackStatuses } from './delete-account-setting-BvdQdbv3.js';
1
+ export { C as ChatComposer, a as ChatComposerHandle, b as ChatComposerLabels, c as ChatComposerProps, d as ChatComposerSlotContext, D as DEFAULT_ATTACHMENT_ACCEPT, e as DEFAULT_FEEDBACK_ATTACHMENT_LABELS, f as DEFAULT_FEEDBACK_CATEGORY_LABELS, g as DEFAULT_FEEDBACK_COMPOSER_LABELS, h as DEFAULT_FEEDBACK_CONTEXT_LABELS, i as DEFAULT_FEEDBACK_DETAIL_LABELS, j as DEFAULT_FEEDBACK_DIALOG_LABELS, k as DEFAULT_FEEDBACK_MENU_LABELS, l as DEFAULT_FEEDBACK_PAGE_LABELS, m as DEFAULT_FEEDBACK_STATUS_LABELS, n as DEFAULT_FEEDBACK_THREAD_LABELS, o as DEFAULT_FEEDBACK_TOAST_LABELS, p as DEFAULT_MAX_ATTACHMENTS, q as DEFAULT_MAX_ATTACHMENT_BYTES, F as FEEDBACK_ATTACHMENT_ACCEPT, r as FEEDBACK_AUTHOR_EDITABLE_STATUSES, s as FEEDBACK_AWAITING_STATUSES, t as FEEDBACK_CATEGORY_META, u as FEEDBACK_CATEGORY_ORDER, v as FEEDBACK_PICKABLE_CATEGORIES, w as FEEDBACK_REWORKABLE_STATUSES, x as FEEDBACK_STATUS_META, y as FEEDBACK_STATUS_ORDER, z as FEEDBACK_UNDO_DURATION, A as FeedbackAttachmentError, B as FeedbackAttachmentErrorInfo, E as FeedbackAttachmentField, G as FeedbackAttachmentFieldLabels, H as FeedbackAttachmentFieldMultipleProps, I as FeedbackAttachmentFieldProps, J as FeedbackAttachmentFieldRefsProps, K as FeedbackAttachmentFieldSingleProps, L as FeedbackAttachmentLabels, M as FeedbackAttachmentRef, N as FeedbackAttachmentRefsError, O as FeedbackAwaitingToggle, P as FeedbackAwaitingToggleProps, Q as FeedbackCategory, R as FeedbackCategoryBadge, S as FeedbackCategoryLabels, T as FeedbackCategoryOption, U as FeedbackColumnsOptions, V as FeedbackComposer, W as FeedbackComposerAttachment, X as FeedbackComposerHandle, Y as FeedbackComposerLabels, Z as FeedbackComposerProps, _ as FeedbackComposerSlotContext, $ as FeedbackContext, a0 as FeedbackContextBox, a1 as FeedbackContextBoxProps, a2 as FeedbackContextInput, a3 as FeedbackContextLabels, a4 as FeedbackDetail, a5 as FeedbackDetailLabels, a6 as FeedbackDetailPatch, a7 as FeedbackDetailSection, a8 as FeedbackDetailUpdate, a9 as FeedbackDialog, aa as FeedbackDialogLabels, ab as FeedbackDialogMultipleProps, ac as FeedbackDialogProps, ad as FeedbackDialogSingleProps, ae as FeedbackDialogTextLabels, af as FeedbackEmptyState, ag as FeedbackEmptyStateProps, ah as FeedbackEnvironment, ai as FeedbackMenu, aj as FeedbackMenuLabels, ak as FeedbackMenuProps, al as FeedbackMobileCard, am as FeedbackMobileCardProps, an as FeedbackMultipleSubmission, ao as FeedbackNoteAttachment, ap as FeedbackNoteEditor, aq as FeedbackPageLabels, ar as FeedbackProse, as as FeedbackRecord, at as FeedbackRenderDate, au as FeedbackReworkSection, av as FeedbackReworkSectionProps, aw as FeedbackRowAccess, ax as FeedbackRowDetail, ay as FeedbackRowDetailProps, az as FeedbackStatus, aA as FeedbackStatusBadge, aB as FeedbackStatusChange, aC as FeedbackStatusLabels, aD as FeedbackStatusMutate, aE as FeedbackStatusPatch, aF as FeedbackStatusRow, aG as FeedbackStatusTransitions, aH as FeedbackStatusUndoOptions, aI as FeedbackSubject, aJ as FeedbackSubjectProps, aK as FeedbackSubmission, aL as FeedbackSubmitHint, aM as FeedbackSubmitter, aN as FeedbackTableRow, aO as FeedbackThread, aP as FeedbackThreadAttachment, aQ as FeedbackThreadEvent, aR as FeedbackThreadItem, aS as FeedbackThreadLabels, aT as FeedbackThreadMessage, aU as FeedbackThreadProps, aV as FeedbackToastLabels, aW as FeedbackUpload, aX as UseFeedbackColumnsOptions, aY as appendRework, aZ as attachmentName, a_ as feedbackAttachmentLine, a$ as feedbackAttachmentUrls, b0 as feedbackCategoryRank, b1 as feedbackColumns, b2 as feedbackContext, b3 as feedbackEnvironment, b4 as feedbackMobileGroupBy, b5 as feedbackPageHref, b6 as feedbackPagePath, b7 as feedbackPageUrl, b8 as feedbackRowAccess, b9 as feedbackSubmitter, ba as feedbackSubmitterEmail, bb as isFeedbackAwaiting, bc as isImageAttachment, bd as nextFeedbackStatus, be as pastedName, bf as replaceDescription, bg as reworkCount, bh as selectableFeedbackStatuses, bi as splitBodyAttachments, bj as splitDescription, bk as useFeedbackCategoryLabels, bl as useFeedbackColumns, bm as useFeedbackDetailLabels, bn as useFeedbackPageLabels, bo as useFeedbackRenderDate, bp as useFeedbackStatusLabels, bq as useFeedbackStatusUndo, br as useFeedbackToastLabels, bs as visibleFeedbackStatuses } from './delete-account-setting-Dy4kJgUm.js';
2
2
  export { DEFAULT_FEEDBACK_SWIPE, FEEDBACK_SWIPE_ACTIONS, FeedbackSwipeAction, FeedbackSwipeBinding, FeedbackSwipeOptions, feedbackSwipePlan } from './feedback/feedback-swipe.js';
3
3
  export { CaptureAppScreenshotOptions, captureAppScreenshot } from './feedback/feedback-capture.js';
4
4
  export { FeedbackCreatePayload, FeedbackSubmit, UseFeedbackSubmitOptions, useFeedbackSubmit } from './feedback/feedback-submit.js';
@@ -48,15 +48,26 @@ declare function lengthPx(length: number | RemLength | undefined, rootRemPx: num
48
48
  /**
49
49
  * The media query a breakpoint variant means at `scale` (`TEXT_SCALE` of the size in
50
50
  * force). `"md"` → `(min-width: 768px)` at Normal, `(min-width: 960px)` at Large;
51
- * `"max-md"` → `(max-width: 767px)` at Normal. In px, scaled by the browser's own
52
- * default font size as well, so a person who set 20 px in the browser gets 960 px for
53
- * `md` at Normal — as the CSS does.
51
+ * `"max-md"` → `(width < 768px)` at Normal. In px, scaled by the browser's own default
52
+ * font size as well, so a person who set 20 px in the browser gets 960 px for `md` at
53
+ * Normal — as the CSS does.
54
54
  *
55
- * At Normal these are, character for character, the strings the kit queried before
56
- * (`PHONE_QUERY`, DataTable's `isMdUp`), so a test's `matchMedia` stub keeps working.
57
- * Like those, the pair is exact at whole-pixel widths; on a fractional viewport width
58
- * between the two (767.2 px at a 1.25 device-pixel ratio) neither matches, where the
59
- * CSS's `width < 48rem` says phone. Verified in Chromium at 700–1300 px × three sizes.
55
+ * `max-*` is written in range syntax, `(width < N)`, against the same `N` its `min-*`
56
+ * twin starts at, so the two are exact complements at EVERY width: exactly one of
57
+ * `md` and `max-md` matches, as with tokens.css's `width >= 48rem` / `width < 48rem`
58
+ * (and Tailwind's own `max-*`). Until 0.32.1 it was `(max-width: 767px)`, which left a
59
+ * gap: on a fractional viewport width (767.5 px under zoom or at some Android
60
+ * device-pixel ratios) neither query matched, so DataTable, asking `!md`, said phone
61
+ * while `usePhoneLayout()`, asking `max-md`, said not (0.32.1, keksdose's 0.32 report;
62
+ * docs/text-size-harmonization.md §3.3: "the CSS and JS answers always agree").
63
+ *
64
+ * Range syntax in media queries is Chrome / Edge 104, Firefox 63, Safari 16.4. That is
65
+ * inside the floor the kit already sets: tokens.css's breakpoint variants are written in
66
+ * it, and Tailwind v4 itself needs Safari 16.4, Chrome 111 and Firefox 128.
67
+ *
68
+ * A test's `matchMedia` stub that keyed on the old string (`"max-width: 767px"`, the
69
+ * deprecated `PHONE_QUERY`) has to answer `(width < 768px)` now. `min-*` is unchanged,
70
+ * character for character.
60
71
  */
61
72
  declare function breakpointQuery(variant: BreakpointVariant, scale?: number, remPx?: number): string;
62
73
  /**
@@ -29,7 +29,7 @@ function breakpointQuery(variant, scale = 1, remPx2 = readBrowserRemPx()) {
29
29
  const max = variant.startsWith("max-");
30
30
  const name = max ? variant.slice(4) : variant;
31
31
  const px = Math.round(BREAKPOINT_REM[name] * remPx2 * scale);
32
- return max ? `(max-width: ${px - 1}px)` : `(min-width: ${px}px)`;
32
+ return max ? `(width < ${px}px)` : `(min-width: ${px}px)`;
33
33
  }
34
34
  function useBreakpoint(variant, fallback = false) {
35
35
  const { scale } = useTextSize();
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/hooks/use-breakpoint.ts"],"sourcesContent":["import { useMediaQuery } from \"./use-media-query\";\nimport { useTextSize } from \"../theme/text-size\";\n\n/**\n * Breakpoints that follow the text size, in JS (docs/text-size-harmonization.md §3.3,\n * §10.4).\n *\n * A media query's rem resolves against the browser's default font size, not `<html>`'s,\n * so Tailwind's `md:` would stay at 48rem when the root grows. tokens.css therefore\n * redefines every breakpoint variant per text size — `md:` is 48rem at Normal, 60rem at\n * Large, 72rem at Extra large — and these hooks ask the same question with the same\n * numbers, so the CSS and the JS answer always agree: AppShell's `md:hidden` and its\n * `isMdUp`, DataTable's cards and its full-screen dialog, an app's sticky footer\n * (keksdose's must be the SAME `usePhoneLayout()` the dialog uses, §10.4).\n *\n * Width queries only. Pointer and display-mode queries stay `useMediaQuery` (§10.4).\n */\n\n/** The breakpoints at Normal, in rem: Tailwind's five, and `3xl` (keksdose's\n * `min-[2400px]`, §10.4). tokens.css multiplies each by the text size. */\nexport const BREAKPOINT_REM = { sm: 40, md: 48, lg: 64, xl: 80, \"2xl\": 96, \"3xl\": 150 } as const;\n\nexport type Breakpoint = keyof typeof BREAKPOINT_REM;\n\n/** A breakpoint variant, spelled as in a class: `\"md\"` is `md:` (at least md), `\"max-md\"`\n * is `max-md:` (below md). */\nexport type BreakpointVariant = Breakpoint | `max-${Breakpoint}`;\n\n/**\n * The browser's own default font size in px — what a media query's rem means (the\n * initial `font-size: medium`, never `<html>`'s). 16 unless the person changed it, and 16\n * outside a browser. Read once: changing it takes a browser setting, after which the\n * page is reloaded in practice.\n */\nlet browserRemPx: number | null = null;\nfunction readBrowserRemPx(): number {\n if (browserRemPx !== null) return browserRemPx;\n // Outside a browser (SSR): 16, uncached, so the client's first real read still counts.\n if (typeof document === \"undefined\" || !document.body) return 16;\n const probe = document.createElement(\"div\");\n probe.style.cssText = \"position:absolute;visibility:hidden;font-size:medium\";\n document.body.appendChild(probe);\n const px = Number.parseFloat(getComputedStyle(probe).fontSize);\n probe.remove();\n // jsdom computes no font size (\"medium\" or nothing): the default it stands for.\n browserRemPx = px > 0 ? px : 16;\n return browserRemPx;\n}\n\n/**\n * How many CSS px one `rem` is at `scale` (`TEXT_SCALE` of the size in force): the\n * browser's own default font size times the text size — what `<html>`'s computed font\n * size is, by tokens.css. For the few lengths JS has to do arithmetic with: a popover's\n * width against the viewport edge, a chart constant (§3.1, §3.2). 16 × `scale` outside a\n * browser and in jsdom, which computes no default font size.\n */\nexport function remPx(scale = 1): number {\n return readBrowserRemPx() * scale;\n}\n\n/** {@link remPx} at the text size in force, re-rendering when it changes. */\nexport function useRemPx(): number {\n const { scale } = useTextSize();\n return remPx(scale);\n}\n\n/** A length in rem as the kit spells one in JS — `\"18rem\"` — where a prop also takes px\n * as a plain number. */\nexport type RemLength = `${number}rem`;\n\n/**\n * A `number | RemLength` in CSS px now: a number is px as given, `\"18rem\"` is 18 ×\n * `rootRemPx` (see {@link remPx}). `undefined` stays `undefined`.\n */\nexport function lengthPx(length: number | RemLength, rootRemPx: number): number;\nexport function lengthPx(length: number | RemLength | undefined, rootRemPx: number): number | undefined;\nexport function lengthPx(length: number | RemLength | undefined, rootRemPx: number): number | undefined {\n if (length === undefined) return undefined;\n return typeof length === \"number\" ? length : Number.parseFloat(length) * rootRemPx;\n}\n\n/**\n * The media query a breakpoint variant means at `scale` (`TEXT_SCALE` of the size in\n * force). `\"md\"` → `(min-width: 768px)` at Normal, `(min-width: 960px)` at Large;\n * `\"max-md\"` → `(max-width: 767px)` at Normal. In px, scaled by the browser's own\n * default font size as well, so a person who set 20 px in the browser gets 960 px for\n * `md` at Normal — as the CSS does.\n *\n * At Normal these are, character for character, the strings the kit queried before\n * (`PHONE_QUERY`, DataTable's `isMdUp`), so a test's `matchMedia` stub keeps working.\n * Like those, the pair is exact at whole-pixel widths; on a fractional viewport width\n * between the two (767.2 px at a 1.25 device-pixel ratio) neither matches, where the\n * CSS's `width < 48rem` says phone. Verified in Chromium at 700–1300 px × three sizes.\n */\nexport function breakpointQuery(variant: BreakpointVariant, scale = 1, remPx: number = readBrowserRemPx()): string {\n const max = variant.startsWith(\"max-\");\n const name = (max ? variant.slice(4) : variant) as Breakpoint;\n const px = Math.round(BREAKPOINT_REM[name] * remPx * scale);\n return max ? `(max-width: ${px - 1}px)` : `(min-width: ${px}px)`;\n}\n\n/**\n * Whether the viewport matches a breakpoint variant at the text size in force — the JS\n * twin of the class: `useBreakpoint(\"md\")` is true exactly where `md:` applies,\n * `useBreakpoint(\"max-sm\")` where `max-sm:` does. `fallback` answers where there is no\n * `matchMedia` (SSR, jsdom).\n */\nexport function useBreakpoint(variant: BreakpointVariant, fallback = false): boolean {\n const { scale } = useTextSize();\n return useMediaQuery(breakpointQuery(variant, scale), fallback);\n}\n\n/**\n * The phone layout: below `md` at the text size in force — `max-md:` in CSS. The single\n * answer for \"is this the phone layout\" (§10.4): the kit's own sheets and cards use it,\n * and an app's phone checks must too, so a tablet at 150 % gets every phone treatment\n * at once or none of them. Replaces `useMediaQuery(PHONE_QUERY)`.\n */\nexport function usePhoneLayout(fallback = false): boolean {\n return useBreakpoint(\"max-md\", fallback);\n}\n"],"mappings":";AAAA,SAAS,qBAAqB;AAC9B,SAAS,mBAAmB;AAmBrB,MAAM,iBAAiB,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,OAAO,IAAI,OAAO,IAAI;AActF,IAAI,eAA8B;AAClC,SAAS,mBAA2B;AAClC,MAAI,iBAAiB,KAAM,QAAO;AAElC,MAAI,OAAO,aAAa,eAAe,CAAC,SAAS,KAAM,QAAO;AAC9D,QAAM,QAAQ,SAAS,cAAc,KAAK;AAC1C,QAAM,MAAM,UAAU;AACtB,WAAS,KAAK,YAAY,KAAK;AAC/B,QAAM,KAAK,OAAO,WAAW,iBAAiB,KAAK,EAAE,QAAQ;AAC7D,QAAM,OAAO;AAEb,iBAAe,KAAK,IAAI,KAAK;AAC7B,SAAO;AACT;AASO,SAAS,MAAM,QAAQ,GAAW;AACvC,SAAO,iBAAiB,IAAI;AAC9B;AAGO,SAAS,WAAmB;AACjC,QAAM,EAAE,MAAM,IAAI,YAAY;AAC9B,SAAO,MAAM,KAAK;AACpB;AAYO,SAAS,SAAS,QAAwC,WAAuC;AACtG,MAAI,WAAW,OAAW,QAAO;AACjC,SAAO,OAAO,WAAW,WAAW,SAAS,OAAO,WAAW,MAAM,IAAI;AAC3E;AAeO,SAAS,gBAAgB,SAA4B,QAAQ,GAAGA,SAAgB,iBAAiB,GAAW;AACjH,QAAM,MAAM,QAAQ,WAAW,MAAM;AACrC,QAAM,OAAQ,MAAM,QAAQ,MAAM,CAAC,IAAI;AACvC,QAAM,KAAK,KAAK,MAAM,eAAe,IAAI,IAAIA,SAAQ,KAAK;AAC1D,SAAO,MAAM,eAAe,KAAK,CAAC,QAAQ,eAAe,EAAE;AAC7D;AAQO,SAAS,cAAc,SAA4B,WAAW,OAAgB;AACnF,QAAM,EAAE,MAAM,IAAI,YAAY;AAC9B,SAAO,cAAc,gBAAgB,SAAS,KAAK,GAAG,QAAQ;AAChE;AAQO,SAAS,eAAe,WAAW,OAAgB;AACxD,SAAO,cAAc,UAAU,QAAQ;AACzC;","names":["remPx"]}
1
+ {"version":3,"sources":["../../src/hooks/use-breakpoint.ts"],"sourcesContent":["import { useMediaQuery } from \"./use-media-query\";\nimport { useTextSize } from \"../theme/text-size\";\n\n/**\n * Breakpoints that follow the text size, in JS (docs/text-size-harmonization.md §3.3,\n * §10.4).\n *\n * A media query's rem resolves against the browser's default font size, not `<html>`'s,\n * so Tailwind's `md:` would stay at 48rem when the root grows. tokens.css therefore\n * redefines every breakpoint variant per text size — `md:` is 48rem at Normal, 60rem at\n * Large, 72rem at Extra large — and these hooks ask the same question with the same\n * numbers, so the CSS and the JS answer always agree: AppShell's `md:hidden` and its\n * `isMdUp`, DataTable's cards and its full-screen dialog, an app's sticky footer\n * (keksdose's must be the SAME `usePhoneLayout()` the dialog uses, §10.4).\n *\n * Width queries only. Pointer and display-mode queries stay `useMediaQuery` (§10.4).\n */\n\n/** The breakpoints at Normal, in rem: Tailwind's five, and `3xl` (keksdose's\n * `min-[2400px]`, §10.4). tokens.css multiplies each by the text size. */\nexport const BREAKPOINT_REM = { sm: 40, md: 48, lg: 64, xl: 80, \"2xl\": 96, \"3xl\": 150 } as const;\n\nexport type Breakpoint = keyof typeof BREAKPOINT_REM;\n\n/** A breakpoint variant, spelled as in a class: `\"md\"` is `md:` (at least md), `\"max-md\"`\n * is `max-md:` (below md). */\nexport type BreakpointVariant = Breakpoint | `max-${Breakpoint}`;\n\n/**\n * The browser's own default font size in px — what a media query's rem means (the\n * initial `font-size: medium`, never `<html>`'s). 16 unless the person changed it, and 16\n * outside a browser. Read once: changing it takes a browser setting, after which the\n * page is reloaded in practice.\n */\nlet browserRemPx: number | null = null;\nfunction readBrowserRemPx(): number {\n if (browserRemPx !== null) return browserRemPx;\n // Outside a browser (SSR): 16, uncached, so the client's first real read still counts.\n if (typeof document === \"undefined\" || !document.body) return 16;\n const probe = document.createElement(\"div\");\n probe.style.cssText = \"position:absolute;visibility:hidden;font-size:medium\";\n document.body.appendChild(probe);\n const px = Number.parseFloat(getComputedStyle(probe).fontSize);\n probe.remove();\n // jsdom computes no font size (\"medium\" or nothing): the default it stands for.\n browserRemPx = px > 0 ? px : 16;\n return browserRemPx;\n}\n\n/**\n * How many CSS px one `rem` is at `scale` (`TEXT_SCALE` of the size in force): the\n * browser's own default font size times the text size — what `<html>`'s computed font\n * size is, by tokens.css. For the few lengths JS has to do arithmetic with: a popover's\n * width against the viewport edge, a chart constant (§3.1, §3.2). 16 × `scale` outside a\n * browser and in jsdom, which computes no default font size.\n */\nexport function remPx(scale = 1): number {\n return readBrowserRemPx() * scale;\n}\n\n/** {@link remPx} at the text size in force, re-rendering when it changes. */\nexport function useRemPx(): number {\n const { scale } = useTextSize();\n return remPx(scale);\n}\n\n/** A length in rem as the kit spells one in JS — `\"18rem\"` — where a prop also takes px\n * as a plain number. */\nexport type RemLength = `${number}rem`;\n\n/**\n * A `number | RemLength` in CSS px now: a number is px as given, `\"18rem\"` is 18 ×\n * `rootRemPx` (see {@link remPx}). `undefined` stays `undefined`.\n */\nexport function lengthPx(length: number | RemLength, rootRemPx: number): number;\nexport function lengthPx(length: number | RemLength | undefined, rootRemPx: number): number | undefined;\nexport function lengthPx(length: number | RemLength | undefined, rootRemPx: number): number | undefined {\n if (length === undefined) return undefined;\n return typeof length === \"number\" ? length : Number.parseFloat(length) * rootRemPx;\n}\n\n/**\n * The media query a breakpoint variant means at `scale` (`TEXT_SCALE` of the size in\n * force). `\"md\"` → `(min-width: 768px)` at Normal, `(min-width: 960px)` at Large;\n * `\"max-md\"` → `(width < 768px)` at Normal. In px, scaled by the browser's own default\n * font size as well, so a person who set 20 px in the browser gets 960 px for `md` at\n * Normal — as the CSS does.\n *\n * `max-*` is written in range syntax, `(width < N)`, against the same `N` its `min-*`\n * twin starts at, so the two are exact complements at EVERY width: exactly one of\n * `md` and `max-md` matches, as with tokens.css's `width >= 48rem` / `width < 48rem`\n * (and Tailwind's own `max-*`). Until 0.32.1 it was `(max-width: 767px)`, which left a\n * gap: on a fractional viewport width (767.5 px under zoom or at some Android\n * device-pixel ratios) neither query matched, so DataTable, asking `!md`, said phone\n * while `usePhoneLayout()`, asking `max-md`, said not (0.32.1, keksdose's 0.32 report;\n * docs/text-size-harmonization.md §3.3: \"the CSS and JS answers always agree\").\n *\n * Range syntax in media queries is Chrome / Edge 104, Firefox 63, Safari 16.4. That is\n * inside the floor the kit already sets: tokens.css's breakpoint variants are written in\n * it, and Tailwind v4 itself needs Safari 16.4, Chrome 111 and Firefox 128.\n *\n * A test's `matchMedia` stub that keyed on the old string (`\"max-width: 767px\"`, the\n * deprecated `PHONE_QUERY`) has to answer `(width < 768px)` now. `min-*` is unchanged,\n * character for character.\n */\nexport function breakpointQuery(variant: BreakpointVariant, scale = 1, remPx: number = readBrowserRemPx()): string {\n const max = variant.startsWith(\"max-\");\n const name = (max ? variant.slice(4) : variant) as Breakpoint;\n const px = Math.round(BREAKPOINT_REM[name] * remPx * scale);\n return max ? `(width < ${px}px)` : `(min-width: ${px}px)`;\n}\n\n/**\n * Whether the viewport matches a breakpoint variant at the text size in force — the JS\n * twin of the class: `useBreakpoint(\"md\")` is true exactly where `md:` applies,\n * `useBreakpoint(\"max-sm\")` where `max-sm:` does. `fallback` answers where there is no\n * `matchMedia` (SSR, jsdom).\n */\nexport function useBreakpoint(variant: BreakpointVariant, fallback = false): boolean {\n const { scale } = useTextSize();\n return useMediaQuery(breakpointQuery(variant, scale), fallback);\n}\n\n/**\n * The phone layout: below `md` at the text size in force — `max-md:` in CSS. The single\n * answer for \"is this the phone layout\" (§10.4): the kit's own sheets and cards use it,\n * and an app's phone checks must too, so a tablet at 150 % gets every phone treatment\n * at once or none of them. Replaces `useMediaQuery(PHONE_QUERY)`.\n */\nexport function usePhoneLayout(fallback = false): boolean {\n return useBreakpoint(\"max-md\", fallback);\n}\n"],"mappings":";AAAA,SAAS,qBAAqB;AAC9B,SAAS,mBAAmB;AAmBrB,MAAM,iBAAiB,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,OAAO,IAAI,OAAO,IAAI;AActF,IAAI,eAA8B;AAClC,SAAS,mBAA2B;AAClC,MAAI,iBAAiB,KAAM,QAAO;AAElC,MAAI,OAAO,aAAa,eAAe,CAAC,SAAS,KAAM,QAAO;AAC9D,QAAM,QAAQ,SAAS,cAAc,KAAK;AAC1C,QAAM,MAAM,UAAU;AACtB,WAAS,KAAK,YAAY,KAAK;AAC/B,QAAM,KAAK,OAAO,WAAW,iBAAiB,KAAK,EAAE,QAAQ;AAC7D,QAAM,OAAO;AAEb,iBAAe,KAAK,IAAI,KAAK;AAC7B,SAAO;AACT;AASO,SAAS,MAAM,QAAQ,GAAW;AACvC,SAAO,iBAAiB,IAAI;AAC9B;AAGO,SAAS,WAAmB;AACjC,QAAM,EAAE,MAAM,IAAI,YAAY;AAC9B,SAAO,MAAM,KAAK;AACpB;AAYO,SAAS,SAAS,QAAwC,WAAuC;AACtG,MAAI,WAAW,OAAW,QAAO;AACjC,SAAO,OAAO,WAAW,WAAW,SAAS,OAAO,WAAW,MAAM,IAAI;AAC3E;AA0BO,SAAS,gBAAgB,SAA4B,QAAQ,GAAGA,SAAgB,iBAAiB,GAAW;AACjH,QAAM,MAAM,QAAQ,WAAW,MAAM;AACrC,QAAM,OAAQ,MAAM,QAAQ,MAAM,CAAC,IAAI;AACvC,QAAM,KAAK,KAAK,MAAM,eAAe,IAAI,IAAIA,SAAQ,KAAK;AAC1D,SAAO,MAAM,YAAY,EAAE,QAAQ,eAAe,EAAE;AACtD;AAQO,SAAS,cAAc,SAA4B,WAAW,OAAgB;AACnF,QAAM,EAAE,MAAM,IAAI,YAAY;AAC9B,SAAO,cAAc,gBAAgB,SAAS,KAAK,GAAG,QAAQ;AAChE;AAQO,SAAS,eAAe,WAAW,OAAgB;AACxD,SAAO,cAAc,UAAU,QAAQ;AACzC;","names":["remPx"]}
@@ -1,5 +1,5 @@
1
1
  import { DragEvent, ReactElement } from 'react';
2
- import { fA as UseFilePickerOptions } from '../delete-account-setting-BvdQdbv3.js';
2
+ import { fA as UseFilePickerOptions } from '../delete-account-setting-Dy4kJgUm.js';
3
3
  import '../components/tooltip.js';
4
4
  import './use-anchored-rect.js';
5
5
  import '../lib/clipping.js';
@@ -1,4 +1,4 @@
1
- import { fx as UiKitLabels } from '../delete-account-setting-BvdQdbv3.js';
1
+ import { fx as UiKitLabels } from '../delete-account-setting-Dy4kJgUm.js';
2
2
  import 'react';
3
3
  import '../components/tooltip.js';
4
4
  import '../hooks/use-anchored-rect.js';
@@ -1,4 +1,4 @@
1
- import { fx as UiKitLabels } from '../delete-account-setting-BvdQdbv3.js';
1
+ import { fx as UiKitLabels } from '../delete-account-setting-Dy4kJgUm.js';
2
2
  import 'react';
3
3
  import '../components/tooltip.js';
4
4
  import '../hooks/use-anchored-rect.js';
@@ -1127,7 +1127,8 @@ Die vollst\xE4ndige Postanschrift wird betroffenen Personen und Aufsichtsbeh\xF6
1127
1127
  transfer: "Arbeit \xFCbergeben",
1128
1128
  deletion_request: "L\xF6schung beantragt",
1129
1129
  deletion_cancel: "L\xF6schung aufgehoben",
1130
- erase: "Konto endg\xFCltig gel\xF6scht"
1130
+ erase: "Konto endg\xFCltig gel\xF6scht",
1131
+ plan: "Tarif ge\xE4ndert"
1131
1132
  }
1132
1133
  },
1133
1134
  transferOwnership: {
@@ -1426,7 +1427,9 @@ Die vollst\xE4ndige Postanschrift wird betroffenen Personen und Aufsichtsbeh\xF6
1426
1427
  cancel: "Vertr\xE4ge hier k\xFCndigen",
1427
1428
  waitingChanges: (count) => count === 1 ? `${n(count)} \xC4nderung wartet auf einen Tarif` : `${n(count)} \xC4nderungen warten auf einen Tarif`,
1428
1429
  // "Verwerfen", as `wizard.cancelConfirmLabel`.
1429
- discardWaiting: "Wartende \xC4nderungen verwerfen"
1430
+ discardWaiting: "Wartende \xC4nderungen verwerfen",
1431
+ notConfigured: "Zahlungen sind noch nicht eingerichtet. Bitte versuchen Sie es sp\xE4ter noch einmal.",
1432
+ disabled: "Abonnements sind hier nicht verf\xFCgbar."
1430
1433
  },
1431
1434
  // 0.32.0 — docs/text-size-harmonization.md §6: the text-size and contrast settings in
1432
1435
  // the "Darstellung" group.
@@ -1436,7 +1439,8 @@ Die vollst\xE4ndige Postanschrift wird betroffenen Personen und Aufsichtsbeh\xF6
1436
1439
  textSizes: { normal: "Normal", large: "Gro\xDF", xlarge: "Sehr gro\xDF" },
1437
1440
  contrast: "Kontrast",
1438
1441
  contrastHelp: "Mehr Kontrast macht dezente Texte und Linien dunkler und Fokusrahmen dicker. \u201ESystem\u201C richtet sich nach diesem Ger\xE4t.",
1439
- contrastModes: { system: "System", standard: "Standard", more: "Mehr" }
1442
+ contrastModes: { system: "System", standard: "Standard", more: "Mehr" },
1443
+ saveFailed: "Konnte nicht in Ihrem Konto gespeichert werden. Auf diesem Ger\xE4t gilt es trotzdem."
1440
1444
  },
1441
1445
  rowActions: {
1442
1446
  actions: "Aktionen",