@alfadocs/ui-kit 0.44.0 → 0.46.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 (121) hide show
  1. package/dist/_chunks/{alia-sidebar-BpX4z_af.js → alia-sidebar-Be8FhKYd.js} +332 -237
  2. package/dist/_chunks/{autocomplete-DIgdhCGJ.js → autocomplete-CDqxB68B.js} +2 -2
  3. package/dist/_chunks/bmi-calculator-CQqXTVNL.js +258 -0
  4. package/dist/_chunks/{booking-CtLwaxkK.js → booking-DlDVuWMd.js} +2 -2
  5. package/dist/_chunks/{cycle-calculator-ChHBcjet.js → cycle-calculator-KxA8dqDf.js} +31 -20
  6. package/dist/_chunks/{due-date-calculator-CYXKLoof.js → due-date-calculator-mFxpHLml.js} +51 -39
  7. package/dist/_chunks/{editable-currency-cell-renderer-9jqwDv5x.js → editable-currency-cell-renderer-BEBUQl9P.js} +2 -2
  8. package/dist/_chunks/{freemium-paywall-BLXESpH4.js → freemium-paywall-DzpD63WY.js} +2 -2
  9. package/dist/_chunks/{gestational-age-calculator-sRmoqgVr.js → gestational-age-calculator-gWI_uRA1.js} +52 -39
  10. package/dist/_chunks/insert-result-C5ABnzDl.js +711 -0
  11. package/dist/_chunks/{marketplace-app-shell-Dc5cTIt8.js → marketplace-app-shell-Gfsf78ge.js} +2 -2
  12. package/dist/_chunks/{patient-search-DPe2ZYEL.js → patient-search-CocVcGJ3.js} +2 -2
  13. package/dist/_chunks/payment-form-BNTx4876.js +671 -0
  14. package/dist/_chunks/{pdf-viewer-B6MC6VTx.js → pdf-viewer-CWEXTlwq.js} +2 -2
  15. package/dist/_chunks/{practice-results-CrLpEiiW.js → practice-results-DDi-kvaD.js} +2 -2
  16. package/dist/_chunks/{pregnancy-weight-gain-C5YhfYnL.js → pregnancy-weight-gain-BtEHaSqy.js} +26 -13
  17. package/dist/_chunks/{search-bar-CP6wUJFY.js → search-bar-CvN_S0jW.js} +2 -2
  18. package/dist/_chunks/{search-input-C1C3jQpD.js → search-input-D3aMvi4l.js} +2 -2
  19. package/dist/_chunks/{sign-document-B-3k_0LO.js → sign-document-BCyLpFHJ.js} +2 -2
  20. package/dist/_chunks/{sign-in-with-alfadocs-button-DeHBFRNS.js → sign-in-with-alfadocs-button-CuYn_kKP.js} +2 -2
  21. package/dist/_chunks/{social-sign-in-button-X54ySJr1.js → social-sign-in-button-uJYLM366.js} +2 -2
  22. package/dist/_chunks/{spinner-CCByyvcb.js → spinner-OjQNn8oN.js} +7 -3
  23. package/dist/_chunks/{transcript-panel-CR7VY1uw.js → transcript-panel-B4HiC7ed.js} +2 -2
  24. package/dist/_chunks/{unit-converter-Ds9jalbN.js → unit-converter-u3CwNDpP.js} +63 -52
  25. package/dist/_chunks/{wallet-pay-button-DK4ESYge.js → wallet-pay-button-DuDPBlCO.js} +2 -2
  26. package/dist/agent-catalog.json +1 -1
  27. package/dist/components/_shared/banded-gauge.d.ts +193 -0
  28. package/dist/components/_shared/insert-result.d.ts +81 -8
  29. package/dist/components/autocomplete/index.js +1 -1
  30. package/dist/components/bmi-calculator/bmi-calculator.d.ts +2 -2
  31. package/dist/components/bmi-calculator/index.js +1 -1
  32. package/dist/components/booking/index.js +1 -1
  33. package/dist/components/cycle-calculator/cycle-calculator.d.ts +2 -2
  34. package/dist/components/cycle-calculator/index.js +1 -1
  35. package/dist/components/data-table/index.js +1 -1
  36. package/dist/components/due-date-calculator/due-date-calculator.d.ts +2 -2
  37. package/dist/components/due-date-calculator/index.js +1 -1
  38. package/dist/components/freemium-paywall/index.js +1 -1
  39. package/dist/components/gestational-age-calculator/gestational-age-calculator.d.ts +2 -2
  40. package/dist/components/gestational-age-calculator/index.js +1 -1
  41. package/dist/components/patient-search/index.js +1 -1
  42. package/dist/components/payment-form/index.js +1 -1
  43. package/dist/components/payment-form/payment-form.d.ts +30 -2
  44. package/dist/components/pdf-viewer/index.js +1 -1
  45. package/dist/components/practice-results/index.js +1 -1
  46. package/dist/components/pregnancy-weight-gain/index.js +1 -1
  47. package/dist/components/pregnancy-weight-gain/pregnancy-weight-gain.d.ts +2 -2
  48. package/dist/components/search-bar/index.js +1 -1
  49. package/dist/components/search-input/index.js +1 -1
  50. package/dist/components/sign-document/index.js +1 -1
  51. package/dist/components/sign-in-with-alfadocs-button/index.js +1 -1
  52. package/dist/components/social-sign-in-button/index.js +1 -1
  53. package/dist/components/spinner/index.js +1 -1
  54. package/dist/components/spinner/spinner.d.ts +2 -2
  55. package/dist/components/transcript-panel/index.js +1 -1
  56. package/dist/components/unit-converter/index.js +1 -1
  57. package/dist/components/unit-converter/unit-converter.d.ts +2 -2
  58. package/dist/components/wallet-pay-button/index.js +1 -1
  59. package/dist/i18n/locales/ar.d.ts +1 -1
  60. package/dist/i18n/locales/ar.js +1 -1
  61. package/dist/i18n/locales/de.d.ts +1 -1
  62. package/dist/i18n/locales/de.js +1 -1
  63. package/dist/i18n/locales/el.d.ts +1 -1
  64. package/dist/i18n/locales/el.js +1 -1
  65. package/dist/i18n/locales/en.d.ts +1 -1
  66. package/dist/i18n/locales/en.js +1 -1
  67. package/dist/i18n/locales/es.d.ts +1 -1
  68. package/dist/i18n/locales/es.js +1 -1
  69. package/dist/i18n/locales/fr.d.ts +1 -1
  70. package/dist/i18n/locales/fr.js +1 -1
  71. package/dist/i18n/locales/hi.d.ts +1 -1
  72. package/dist/i18n/locales/hi.js +1 -1
  73. package/dist/i18n/locales/it.d.ts +1 -1
  74. package/dist/i18n/locales/it.js +1 -1
  75. package/dist/i18n/locales/ja.d.ts +1 -1
  76. package/dist/i18n/locales/ja.js +1 -1
  77. package/dist/i18n/locales/nl.d.ts +1 -1
  78. package/dist/i18n/locales/nl.js +1 -1
  79. package/dist/i18n/locales/pl.d.ts +1 -1
  80. package/dist/i18n/locales/pl.js +1 -1
  81. package/dist/i18n/locales/pt.d.ts +1 -1
  82. package/dist/i18n/locales/pt.js +1 -1
  83. package/dist/i18n/locales/ro.d.ts +1 -1
  84. package/dist/i18n/locales/ro.js +1 -1
  85. package/dist/i18n/locales/ru.d.ts +1 -1
  86. package/dist/i18n/locales/ru.js +1 -1
  87. package/dist/i18n/locales/sq.d.ts +1 -1
  88. package/dist/i18n/locales/sq.js +1 -1
  89. package/dist/i18n/locales/sv.d.ts +1 -1
  90. package/dist/i18n/locales/sv.js +1 -1
  91. package/dist/i18n/locales/tr.d.ts +1 -1
  92. package/dist/i18n/locales/tr.js +1 -1
  93. package/dist/i18n/locales/zh.d.ts +1 -1
  94. package/dist/i18n/locales/zh.js +1 -1
  95. package/dist/index.js +25 -25
  96. package/dist/locales/ar.json +1 -1
  97. package/dist/locales/de.json +1 -1
  98. package/dist/locales/el.json +1 -1
  99. package/dist/locales/en.json +1 -1
  100. package/dist/locales/es.json +1 -1
  101. package/dist/locales/fr.json +1 -1
  102. package/dist/locales/hi.json +1 -1
  103. package/dist/locales/it.json +1 -1
  104. package/dist/locales/ja.json +1 -1
  105. package/dist/locales/nl.json +1 -1
  106. package/dist/locales/pl.json +1 -1
  107. package/dist/locales/pt.json +1 -1
  108. package/dist/locales/ro.json +1 -1
  109. package/dist/locales/ru.json +1 -1
  110. package/dist/locales/sq.json +1 -1
  111. package/dist/locales/sv.json +1 -1
  112. package/dist/locales/tr.json +1 -1
  113. package/dist/locales/zh.json +1 -1
  114. package/dist/patterns/alia-assistant/alia-types.d.ts +20 -0
  115. package/dist/patterns/alia-assistant/index.js +1 -1
  116. package/dist/patterns/marketplace-app-shell/index.js +1 -1
  117. package/dist/tokens.css +1 -1
  118. package/package.json +1 -1
  119. package/dist/_chunks/bmi-calculator-DFPWL2OJ.js +0 -273
  120. package/dist/_chunks/insert-result-CoC1oo6R.js +0 -334
  121. package/dist/_chunks/payment-form-BzVsG6Ks.js +0 -590
@@ -0,0 +1,193 @@
1
+ /** One coloured zone of the track, filled up to (and excluding) `upTo`. */
2
+ export interface BandedGaugeBand {
3
+ /**
4
+ * Upper boundary of the band on the scale (exclusive). The final band's
5
+ * `upTo` is conventionally the scale `max` so it fills to the bar end.
6
+ */
7
+ upTo: number;
8
+ /**
9
+ * DS token NAME for the band fill — e.g. `'--info'`, `'--success'`,
10
+ * `'--warning-readable'`, `'--destructive'`. Resolved by the surface's
11
+ * `resolve` callback (concrete `rgb()` for the card, `var(<token>)` for the
12
+ * widget). Never a hex/rgb literal in source.
13
+ */
14
+ colorToken: string;
15
+ }
16
+ /**
17
+ * A banded-linear gauge. Every visible string (`valueLabel`, `categoryLabel`,
18
+ * `rangeLabel`, `ariaLabel`) arrives ALREADY TRANSLATED — this module is
19
+ * i18n-agnostic; the BMI calculator supplies `t()`-resolved text.
20
+ */
21
+ export interface BandedGaugeModel {
22
+ /** The true value (printed verbatim even when clamped to a bar end). */
23
+ value: number;
24
+ /** Ascending coloured zones; the last `upTo` should equal `max`. */
25
+ bands: BandedGaugeBand[];
26
+ /** Low end of the drawn scale (maps to the bar's inline start). */
27
+ min: number;
28
+ /** High end of the drawn scale (maps to the bar's inline end). */
29
+ max: number;
30
+ /** Big number rendered above the marker (e.g. `'24.6'`). */
31
+ valueLabel: string;
32
+ /** Band name shown beside the value (e.g. `'normal'`). Pre-translated. */
33
+ categoryLabel?: string;
34
+ /** Range string for the band (e.g. `'18.5–24.9'`). Pre-translated. */
35
+ rangeLabel?: string;
36
+ /** Full accessible name, e.g. `'BMI 24.6 — normal (18.5–24.9)'`. */
37
+ ariaLabel: string;
38
+ /** Threshold tick values drawn under the bar (e.g. `[18.5, 25, 30]`). */
39
+ ticks?: number[];
40
+ }
41
+ /** Drawn BMI scale: 15 (deep underweight) → 40 (deep obesity). */
42
+ export declare const BMI_BANDED_MIN = 15;
43
+ export declare const BMI_BANDED_MAX = 40;
44
+ /** WHO adult cut-offs drawn as ticks under the bar. */
45
+ export declare const BMI_BAND_THRESHOLDS: readonly [18.5, 25, 30];
46
+ /**
47
+ * The four WHO zones as `{ upTo, colorToken }`, plus the scale + ticks, so
48
+ * both the on-screen widget and the insert card share ONE definition:
49
+ *
50
+ * underweight < 18.5 → `--info`
51
+ * normal 18.5–24.9 → `--success`
52
+ * overweight 25–29.9 → `--warning-readable` (contrast-safe orange)
53
+ * obese ≥ 30 → `--destructive` (one obese zone)
54
+ *
55
+ * `--warning-readable` is the kit's contrast-safe orange token — it already
56
+ * resolves correctly per theme (orange-600 in light/non-accessible, `--warning`
57
+ * elsewhere), so NO `document.documentElement` JS override is needed here.
58
+ */
59
+ export declare function bmiBands(): {
60
+ bands: BandedGaugeBand[];
61
+ min: number;
62
+ max: number;
63
+ ticks: number[];
64
+ };
65
+ /** One filled zone rect in card/widget coordinates. */
66
+ export interface BandRect {
67
+ /** Inline-start x of the zone. */
68
+ x: number;
69
+ /** Zone width. */
70
+ w: number;
71
+ /** Token NAME to fill it with (resolved by the surface). */
72
+ colorToken: string;
73
+ }
74
+ /** The value marker: its drawn x plus the clamp envelope it lives in. */
75
+ export interface MarkerGeometry {
76
+ /** Drawn x of the marker (clamped into `[clampedStart, clampedEnd]`). */
77
+ x: number;
78
+ /** Inline-start x the marker can reach (bar start). */
79
+ clampedStart: number;
80
+ /** Inline-end x the marker can reach (bar end). */
81
+ clampedEnd: number;
82
+ /**
83
+ * `'start'` when the true value sits below `min` (marker pinned to the bar
84
+ * start), `'end'` when it sits above `max`, `null` when it's in range. Drives
85
+ * the out-of-range caret/chevron.
86
+ */
87
+ overflow: 'start' | 'end' | null;
88
+ }
89
+ /** A threshold tick: its x plus the scale value it marks. */
90
+ export interface TickGeometry {
91
+ x: number;
92
+ value: number;
93
+ }
94
+ /** Everything the two builders need, derived once. */
95
+ export interface BandedGaugeGeometry {
96
+ /** Outer SVG width. */
97
+ width: number;
98
+ /** Outer SVG height. */
99
+ height: number;
100
+ /** Inline-start x of the bar. */
101
+ barStart: number;
102
+ /** Inline-end x of the bar. */
103
+ barEnd: number;
104
+ /** Bar top y. */
105
+ barY: number;
106
+ /** Bar thickness. */
107
+ barH: number;
108
+ /** Bar corner radius. */
109
+ barRadius: number;
110
+ /** Coloured zones, left → right. */
111
+ bands: BandRect[];
112
+ /** The value marker. */
113
+ marker: MarkerGeometry;
114
+ /** Threshold ticks under the bar. */
115
+ ticks: TickGeometry[];
116
+ /** Baseline y for the value label above the bar. */
117
+ valueLabelY: number;
118
+ /** Baseline y for the tick number labels under the bar. */
119
+ tickLabelY: number;
120
+ /** Pre-translated value label (verbatim from the model). */
121
+ valueLabel: string;
122
+ /** Optional `category (range)` summary shown beside the value. */
123
+ summaryLabel: string;
124
+ /** Full accessible name for `<title>` / `aria-label`. */
125
+ ariaLabel: string;
126
+ }
127
+ /** Layout knobs for {@link computeBandedGaugeGeometry}. */
128
+ export interface BandedGaugeLayoutOptions {
129
+ /** Outer SVG width. */
130
+ width: number;
131
+ /** Outer SVG height. */
132
+ height: number;
133
+ }
134
+ export declare const INSET_X = 14;
135
+ /**
136
+ * Pure geometry pass — the ONE place value→x mapping, band widths, marker
137
+ * clamping, and tick positions are computed. Both the SVG-string builder and
138
+ * the JSX component consume this so the two surfaces never drift.
139
+ *
140
+ * The marker x is CLAMPED to `[barStart, barEnd]`, but `valueLabel` always
141
+ * prints the true value; `marker.overflow` flags an out-of-range value so the
142
+ * surface can draw a caret at the clamped end.
143
+ */
144
+ export declare function computeBandedGaugeGeometry(model: BandedGaugeModel, { width, height }: BandedGaugeLayoutOptions): BandedGaugeGeometry;
145
+ /** A token-name → concrete-colour resolver supplied by each surface. */
146
+ export type ColorResolver = (colorToken: string) => string;
147
+ /** Theme colours + font + resolver for {@link buildBandedGaugeSvgString}. */
148
+ export interface BandedGaugeSvgOptions {
149
+ /**
150
+ * Maps a band token NAME to the colour string painted into the markup. The
151
+ * card passes a probe-resolved `rgb(...)` resolver so the baked PNG carries
152
+ * theme-correct colours; never a literal in source.
153
+ */
154
+ resolve: ColorResolver;
155
+ /** Font family for the text (resolved from the theme, e.g. `--font-sans`). */
156
+ font: string;
157
+ /** Foreground colour for the value label + marker (concrete). */
158
+ fg: string;
159
+ /** Muted colour for the tick numbers + summary (concrete). */
160
+ muted: string;
161
+ /** Track / unfilled-rail colour, also used for tick rules (concrete). */
162
+ track: string;
163
+ }
164
+ export declare function buildBandedGaugeSvgString(geometry: BandedGaugeGeometry, options: BandedGaugeSvgOptions): string;
165
+ export declare const DEFAULT_HEIGHT = 64;
166
+ export interface BandedGaugeProps {
167
+ /** The gauge model (value, bands, scale, pre-translated labels). */
168
+ model: BandedGaugeModel;
169
+ /** SVG width. Defaults to {@link DEFAULT_WIDTH}. */
170
+ width?: number;
171
+ /** SVG height. Defaults to {@link DEFAULT_HEIGHT}. */
172
+ height?: number;
173
+ /** Extra class names on the root `<svg>`. */
174
+ className?: string;
175
+ }
176
+ /**
177
+ * Presentational banded-linear gauge for the on-screen widget. Renders the SAME
178
+ * geometry as {@link buildBandedGaugeSvgString} but as JSX, filling each band
179
+ * with `fill="var(<token>)"` so the live theme resolves the colour (and a theme
180
+ * switch repaints with no re-sample). Visually equivalent to the card string.
181
+ *
182
+ * The track + marker are decorative; the accessible name on the root carries
183
+ * the meaning (`role="img"` + `aria-label`, mirrored in `<title>`). All text in
184
+ * the model is pre-translated by the caller.
185
+ *
186
+ * The measurement axis runs low→high left-to-right regardless of document
187
+ * direction — SVG coordinates are inherently LTR (a `<rect x>` is unaffected by
188
+ * `direction`), and `direction="ltr"` is pinned on the root to keep any nested
189
+ * `<text>` directionality explicit. Logical properties govern the surrounding
190
+ * layout, never this axis.
191
+ */
192
+ export declare const BandedGauge: import("react").ForwardRefExoticComponent<BandedGaugeProps & import("react").RefAttributes<SVGSVGElement>>;
193
+ //# sourceMappingURL=banded-gauge.d.ts.map
@@ -1,16 +1,40 @@
1
1
  import { type ButtonProps } from '../button';
2
+ import { type BandedGaugeBand } from './banded-gauge';
2
3
  export type InsertMode = 'text' | 'image' | 'text-image';
3
4
  export type InsertVariant = 'insert' | 'copy';
5
+ /**
6
+ * The handful of lucide glyphs the result-card header can carry. Each maps to a
7
+ * static native-SVG geometry string in {@link ICON_GEOMETRY}, hand-transcribed
8
+ * from lucide-react 1.8.0's `__iconNode` arrays (pinned to that version so the
9
+ * paths match the on-screen React glyphs exactly). We do NOT import the lucide
10
+ * React components into the raster path — they can't be serialised into the
11
+ * `<img>` data-URI — so the geometry is inlined as raw `<path>` elements.
12
+ */
13
+ export type IconKey = 'activity' | 'scale' | 'ruler' | 'calendar' | 'calendar-heart' | 'baby' | 'heart' | 'droplets' | 'clock' | 'tag' | 'trending-up' | 'percent';
4
14
  export interface InsertCardField {
5
15
  label: string;
6
16
  value: string;
17
+ /**
18
+ * Optional leading glyph for the row, drawn at {@link FIELD_ICON_SLOT} in
19
+ * place of the default bullet dot. One of the known {@link IconKey} names; an
20
+ * unknown / omitted value falls back to the muted bullet (fully
21
+ * back-compatible — a field without an icon renders exactly as before).
22
+ */
23
+ icon?: IconKey;
7
24
  }
8
25
  /**
9
- * Optional radial gauge, drawn as a hand-rolled native-SVG donut (track
10
- * `<circle>` + value arc via `stroke-dasharray`) so it survives the
11
- * `<img>` → `<canvas>` → `toBlob` raster. No `<foreignObject>`, no charting lib.
26
+ * Radial gauge a hand-rolled native-SVG donut (track `<circle>` + value arc
27
+ * via `stroke-dasharray`) drawn in the card's inline-end corner box. Survives
28
+ * the `<img>` → `<canvas>` → `toBlob` raster. No `<foreignObject>`, no charting
29
+ * lib.
30
+ *
31
+ * This is the original gauge shape; `variant` is optional and defaults to
32
+ * `'radial'`, so a gauge object authored before the banded variant existed
33
+ * renders exactly as before.
12
34
  */
13
- export interface InsertCardGauge {
35
+ export interface InsertCardRadialGauge {
36
+ /** Discriminant. Optional — omitted means `'radial'` (back-compat). */
37
+ variant?: 'radial';
14
38
  /** Big number rendered in the gauge centre (e.g. `'22.4'`). */
15
39
  value: string;
16
40
  /**
@@ -36,11 +60,59 @@ export interface InsertCardGauge {
36
60
  /** Small category label under the value inside the ring. */
37
61
  label?: string;
38
62
  }
63
+ /**
64
+ * Banded gauge — a full-width horizontal track split into coloured zones with a
65
+ * marker at the value's position (the WHO BMI dial, drawn via the shared
66
+ * `banded-gauge` module). It spans the card edge-to-edge below the field rows.
67
+ * Same raster-safety guarantees as the radial donut: pure native SVG, no
68
+ * `<foreignObject>`.
69
+ *
70
+ * Every visible string (`valueLabel`, `categoryLabel`, `rangeLabel`,
71
+ * `ariaLabel`) arrives ALREADY TRANSLATED — the calculator supplies `t()`-
72
+ * resolved text. Every band's `colorToken` is registered for probe sampling so
73
+ * the baked raster carries theme-correct fills.
74
+ */
75
+ export interface InsertCardBandedGauge {
76
+ /** Discriminant for the banded layout. */
77
+ variant: 'banded';
78
+ /** The true value (printed verbatim even when clamped to a bar end). */
79
+ value: number;
80
+ /** Ascending coloured zones; the last `upTo` should equal `max`. */
81
+ bands: BandedGaugeBand[];
82
+ /** Low end of the drawn scale (maps to the bar's inline start). */
83
+ min: number;
84
+ /** High end of the drawn scale (maps to the bar's inline end). */
85
+ max: number;
86
+ /** Big number rendered above the marker (e.g. `'24.6'`). */
87
+ valueLabel: string;
88
+ /** Band name shown beside the value (e.g. `'normal'`). Pre-translated. */
89
+ categoryLabel?: string;
90
+ /** Range string for the band (e.g. `'18.5–24.9'`). Pre-translated. */
91
+ rangeLabel?: string;
92
+ /** Full accessible name, e.g. `'BMI 24.6 — normal (18.5–24.9)'`. */
93
+ ariaLabel: string;
94
+ /** Threshold tick values drawn under the bar (e.g. `[18.5, 25, 30]`). */
95
+ ticks?: number[];
96
+ }
97
+ /**
98
+ * Optional in-card gauge. A discriminated union on `variant`:
99
+ *
100
+ * • `'radial'` (default when `variant` is omitted) — the corner-box donut.
101
+ * • `'banded'` — a full-width horizontal banded bar below the fields.
102
+ */
103
+ export type InsertCardGauge = InsertCardRadialGauge | InsertCardBandedGauge;
39
104
  export interface InsertCardData {
40
105
  /** Card heading. */
41
106
  title: string;
42
107
  /** Key/value rows. */
43
108
  fields: InsertCardField[];
109
+ /**
110
+ * Optional header glyph drawn inline-end of the title, tinted with the card's
111
+ * category colour ({@link InsertCardData.highlightToken}). One of the known
112
+ * {@link IconKey} names; an unknown / omitted value simply skips the glyph
113
+ * (fully back-compatible — a card without an icon renders as before).
114
+ */
115
+ icon?: IconKey;
44
116
  /** Optional highlighted line, rendered as a category chip (pill). */
45
117
  highlight?: string;
46
118
  /**
@@ -52,11 +124,12 @@ export interface InsertCardData {
52
124
  /** Optional radial gauge drawn natively in the card. */
53
125
  gauge?: InsertCardGauge;
54
126
  /**
55
- * Brand wordmark printed in the card footer.
127
+ * Optional brand wordmark line printed at the foot of the card.
56
128
  *
57
- * - omitted → the default `'AlfaDocs'` wordmark.
58
- * - a string → that custom wordmark.
59
- * - `false`no brand line at all.
129
+ * - omitted / `false` no brand line and no footer at all; the card ends
130
+ * after the fields/gauge.
131
+ * - a string that wordmark, rendered as a single quiet line (no hairline
132
+ * rule above it).
60
133
  *
61
134
  * A `brand` passed to {@link SvgCardToPngOptions} overrides this per-render.
62
135
  */
@@ -1,4 +1,4 @@
1
- import { A as e, a as o, b as m } from "../../_chunks/autocomplete-DIgdhCGJ.js";
1
+ import { A as e, a as o, b as m } from "../../_chunks/autocomplete-CDqxB68B.js";
2
2
  export {
3
3
  e as Autocomplete,
4
4
  o as autocompleteAgent,
@@ -29,8 +29,8 @@ export interface BmiCalculatorProps extends VariantProps<typeof rootVariants> {
29
29
  onError?: (error: unknown) => void;
30
30
  /**
31
31
  * Brand wordmark printed in the inserted/copied result-card footer.
32
- * Omitted → the default `'AlfaDocs'` wordmark; a string overrides it;
33
- * `false` removes the brand line.
32
+ * Omitted → no brand line (and no footer hairline); a string that custom
33
+ * brand; `false` no brand line. Brand is opt-in.
34
34
  */
35
35
  insertBrand?: string | false;
36
36
  /** Opaque instance id, emitted as `data-component-id`. */
@@ -1,4 +1,4 @@
1
- import { B as m } from "../../_chunks/bmi-calculator-DFPWL2OJ.js";
1
+ import { B as m } from "../../_chunks/bmi-calculator-CQqXTVNL.js";
2
2
  import { b as e, a as t, c as r, d as T, e as c, f as i, i as b, k as n, l as f } from "../../_chunks/bmi-BxD-tFzU.js";
3
3
  export {
4
4
  m as BmiCalculator,
@@ -1,4 +1,4 @@
1
- import { B as A, C as R, O as a, b as s } from "../../_chunks/booking-CtLwaxkK.js";
1
+ import { B as A, C as R, O as a, b as s } from "../../_chunks/booking-DlDVuWMd.js";
2
2
  export {
3
3
  A as Booking,
4
4
  R as CONFIRMATION_CHANNEL_ORDER,
@@ -23,8 +23,8 @@ export interface CycleCalculatorProps extends VariantProps<typeof rootVariants>
23
23
  onError?: (error: unknown) => void;
24
24
  /**
25
25
  * Brand wordmark printed in the inserted/copied result-card footer.
26
- * Omitted → the default `'AlfaDocs'` wordmark; a string overrides it;
27
- * `false` removes the brand line.
26
+ * Omitted → no brand line (and no footer hairline); a string that custom
27
+ * brand; `false` no brand line. Brand is opt-in.
28
28
  */
29
29
  insertBrand?: string | false;
30
30
  /** Opaque instance id, emitted as `data-component-id`. */
@@ -1,4 +1,4 @@
1
- import { C as e, L as l, p as r } from "../../_chunks/cycle-calculator-ChHBcjet.js";
1
+ import { C as e, L as l, p as r } from "../../_chunks/cycle-calculator-KxA8dqDf.js";
2
2
  export {
3
3
  e as CycleCalculator,
4
4
  l as LUTEAL_PHASE_DAYS,
@@ -1,4 +1,4 @@
1
- import { A as l, B as r, C as t, a as s, D as n, b as d, c as i, d as o, E as C, e as R, I as F, L as g, N as T, f as b, S as u, g as c, h as D, T as m, i as p, j as x, k as f, l as y, m as E, n as S, o as h, U as A, p as L, q as N, u as k } from "../../_chunks/editable-currency-cell-renderer-9jqwDv5x.js";
1
+ import { A as l, B as r, C as t, a as s, D as n, b as d, c as i, d as o, E as C, e as R, I as F, L as g, N as T, f as b, S as u, g as c, h as D, T as m, i as p, j as x, k as f, l as y, m as E, n as S, o as h, U as A, p as L, q as N, u as k } from "../../_chunks/editable-currency-cell-renderer-BEBUQl9P.js";
2
2
  export {
3
3
  l as ActionsCellRenderer,
4
4
  r as BalanceCellRenderer,
@@ -23,8 +23,8 @@ export interface DueDateCalculatorProps extends VariantProps<typeof rootVariants
23
23
  onError?: (error: unknown) => void;
24
24
  /**
25
25
  * Brand wordmark printed in the inserted/copied result-card footer.
26
- * Omitted → the default `'AlfaDocs'` wordmark; a string overrides it;
27
- * `false` removes the brand line.
26
+ * Omitted → no brand line (and no footer hairline); a string that custom
27
+ * brand; `false` no brand line. Brand is opt-in.
28
28
  */
29
29
  insertBrand?: string | false;
30
30
  /** Opaque instance id, emitted as `data-component-id`. */
@@ -1,4 +1,4 @@
1
- import { D as s } from "../../_chunks/due-date-calculator-CYXKLoof.js";
1
+ import { D as s } from "../../_chunks/due-date-calculator-mFxpHLml.js";
2
2
  import { D as E, G as o, M as D, T as r, c as T, g as _, t as C } from "../../_chunks/gestation-mWF4AXea.js";
3
3
  export {
4
4
  E as DEFAULT_CYCLE_LENGTH,
@@ -1,4 +1,4 @@
1
- import { F as m, f as l } from "../../_chunks/freemium-paywall-BLXESpH4.js";
1
+ import { F as m, f as l } from "../../_chunks/freemium-paywall-DzpD63WY.js";
2
2
  export {
3
3
  m as FreemiumPaywall,
4
4
  l as freemiumPaywallAgent
@@ -29,8 +29,8 @@ export interface GestationalAgeCalculatorProps extends VariantProps<typeof rootV
29
29
  onError?: (error: unknown) => void;
30
30
  /**
31
31
  * Brand wordmark printed in the inserted/copied result-card footer.
32
- * Omitted → the default `'AlfaDocs'` wordmark; a string overrides it;
33
- * `false` removes the brand line.
32
+ * Omitted → no brand line (and no footer hairline); a string that custom
33
+ * brand; `false` no brand line. Brand is opt-in.
34
34
  */
35
35
  insertBrand?: string | false;
36
36
  /** Opaque instance id, emitted as `data-component-id`. */
@@ -1,4 +1,4 @@
1
- import { G as t } from "../../_chunks/gestational-age-calculator-sRmoqgVr.js";
1
+ import { G as t } from "../../_chunks/gestational-age-calculator-gWI_uRA1.js";
2
2
  export {
3
3
  t as GestationalAgeCalculator
4
4
  };
@@ -1,4 +1,4 @@
1
- import { P as t, p as r } from "../../_chunks/patient-search-DPe2ZYEL.js";
1
+ import { P as t, p as r } from "../../_chunks/patient-search-CocVcGJ3.js";
2
2
  export {
3
3
  t as PatientSearch,
4
4
  r as patientSearchAgent
@@ -1,4 +1,4 @@
1
- import { P as r, f as s, p as m, a as e, s as n, b as o, c as i } from "../../_chunks/payment-form-BzVsG6Ks.js";
1
+ import { P as r, f as s, p as m, a as e, s as n, b as o, c as i } from "../../_chunks/payment-form-BNTx4876.js";
2
2
  export {
3
3
  r as PaymentForm,
4
4
  s as formatPaymentAmount,
@@ -3,8 +3,30 @@ export type PaymentCurrency = string;
3
3
  export interface PaymentFormProps {
4
4
  /** Opaque instance id — emitted as `data-component-id` for the agent registry. */
5
5
  id?: string;
6
- /** Required — from your server, created via the PaymentIntents API. */
7
- clientSecret: string;
6
+ /**
7
+ * Client secret from your server, created via the PaymentIntents API.
8
+ *
9
+ * Omit to use **deferred-intent mode** — the Payment Element renders from
10
+ * just the publishable key (no `clientSecret`, no backend round-trip up
11
+ * front). In deferred mode supply `onCreatePaymentIntent` to actually
12
+ * confirm: your server mints + returns the client secret at submit time.
13
+ */
14
+ clientSecret?: string;
15
+ /**
16
+ * Deferred-intent setup: `'payment'` collects a charge, `'setup'` saves a
17
+ * method for later. Ignored when `clientSecret` is supplied (the secret's
18
+ * own intent type wins). Defaults to `'payment'`.
19
+ */
20
+ mode?: 'payment' | 'setup';
21
+ /**
22
+ * Deferred-confirm callback. Called at submit time (after client-side
23
+ * field validation succeeds) so your server can mint a PaymentIntent and
24
+ * return its `client_secret`. The returned secret is used ONLY to confirm
25
+ * and is never logged or sent to any third-party origin. When omitted in
26
+ * deferred mode the form runs in PREVIEW: fields render + validate, but no
27
+ * charge is attempted.
28
+ */
29
+ onCreatePaymentIntent?: () => Promise<string>;
8
30
  /** Stripe publishable key (`pk_test_…` / `pk_live_…`). */
9
31
  publishableKey: string;
10
32
  /** ISO-4217 currency code (e.g. 'EUR', 'USD', 'JPY'). */
@@ -28,6 +50,12 @@ export interface PaymentFormProps {
28
50
  returnUrl?: string;
29
51
  /** Pre-injected Stripe instance — used by tests + stories to bypass the network. */
30
52
  stripePromise?: Promise<Stripe | null> | null;
53
+ /**
54
+ * Payment Element layout. `tabs` (default) renders methods as a tile row —
55
+ * best in wide containers. `accordion` stacks them as full-width rows — use
56
+ * it in narrow columns (< ~400px) where Stripe's tab row clips a partial tile.
57
+ */
58
+ layout?: 'tabs' | 'accordion';
31
59
  className?: string;
32
60
  }
33
61
  export interface PaymentFormHandle {
@@ -1,4 +1,4 @@
1
- import { P as p, p as a } from "../../_chunks/pdf-viewer-B6MC6VTx.js";
1
+ import { P as p, p as a } from "../../_chunks/pdf-viewer-CWEXTlwq.js";
2
2
  export {
3
3
  p as PDFViewer,
4
4
  a as pdfViewerAgent
@@ -1,4 +1,4 @@
1
- import { P as t, p as a } from "../../_chunks/practice-results-CrLpEiiW.js";
1
+ import { P as t, p as a } from "../../_chunks/practice-results-DDi-kvaD.js";
2
2
  export {
3
3
  t as PracticeResults,
4
4
  a as practiceResultsAgent
@@ -1,4 +1,4 @@
1
- import { P as s, R as n, T as i, a as r, r as A } from "../../_chunks/pregnancy-weight-gain-C5YhfYnL.js";
1
+ import { P as s, R as n, T as i, a as r, r as A } from "../../_chunks/pregnancy-weight-gain-BtEHaSqy.js";
2
2
  export {
3
3
  s as PregnancyWeightGain,
4
4
  n as RATE_BANDS,
@@ -21,8 +21,8 @@ export interface PregnancyWeightGainProps extends VariantProps<typeof rootVarian
21
21
  onError?: (error: unknown) => void;
22
22
  /**
23
23
  * Brand wordmark printed in the inserted/copied result-card footer.
24
- * Omitted → the default `'AlfaDocs'` wordmark; a string overrides it;
25
- * `false` removes the brand line.
24
+ * Omitted → no brand line (and no footer hairline); a string that custom
25
+ * brand; `false` no brand line. Brand is opt-in.
26
26
  */
27
27
  insertBrand?: string | false;
28
28
  /** Opaque instance id, emitted as `data-component-id`. */
@@ -1,4 +1,4 @@
1
- import { S as e, f as s, s as t } from "../../_chunks/search-bar-CP6wUJFY.js";
1
+ import { S as e, f as s, s as t } from "../../_chunks/search-bar-CvN_S0jW.js";
2
2
  export {
3
3
  e as SearchBar,
4
4
  s as filterSearchResults,
@@ -1,4 +1,4 @@
1
- import { S as t } from "../../_chunks/search-input-C1C3jQpD.js";
1
+ import { S as t } from "../../_chunks/search-input-D3aMvi4l.js";
2
2
  import { s as o } from "../../_chunks/search-input.agent-CfZvViOd.js";
3
3
  export {
4
4
  t as SearchInput,
@@ -1,4 +1,4 @@
1
- import { S as o, s } from "../../_chunks/sign-document-B-3k_0LO.js";
1
+ import { S as o, s } from "../../_chunks/sign-document-BCyLpFHJ.js";
2
2
  export {
3
3
  o as SignDocument,
4
4
  s as signDocumentAgent
@@ -1,4 +1,4 @@
1
- import { S as n } from "../../_chunks/sign-in-with-alfadocs-button-DeHBFRNS.js";
1
+ import { S as n } from "../../_chunks/sign-in-with-alfadocs-button-CuYn_kKP.js";
2
2
  export {
3
3
  n as SignInWithAlfadocsButton
4
4
  };
@@ -1,4 +1,4 @@
1
- import { S as t } from "../../_chunks/social-sign-in-button-X54ySJr1.js";
1
+ import { S as t } from "../../_chunks/social-sign-in-button-uJYLM366.js";
2
2
  export {
3
3
  t as SocialSignInButton
4
4
  };
@@ -1,4 +1,4 @@
1
- import { S as n } from "../../_chunks/spinner-CCByyvcb.js";
1
+ import { S as n } from "../../_chunks/spinner-OjQNn8oN.js";
2
2
  export {
3
3
  n as Spinner
4
4
  };
@@ -2,10 +2,10 @@ import { type HTMLAttributes } from 'react';
2
2
  import { type VariantProps } from 'class-variance-authority';
3
3
  declare const spinnerVariants: (props?: ({
4
4
  size?: "sm" | "md" | "lg" | null | undefined;
5
- variant?: "pulse" | "chase" | "prism" | null | undefined;
5
+ variant?: "static" | "pulse" | "chase" | "prism" | null | undefined;
6
6
  speed?: "slower" | "slow" | "normal" | "fast" | "faster" | null | undefined;
7
7
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
8
- export type SpinnerVariant = 'pulse' | 'chase' | 'prism';
8
+ export type SpinnerVariant = 'pulse' | 'chase' | 'prism' | 'static';
9
9
  export type SpinnerSpeed = 'slower' | 'slow' | 'normal' | 'fast' | 'faster';
10
10
  export interface SpinnerProps extends Omit<HTMLAttributes<HTMLSpanElement>, 'role' | 'children'>, VariantProps<typeof spinnerVariants> {
11
11
  size?: 'sm' | 'md' | 'lg';
@@ -1,4 +1,4 @@
1
- import { T as t, t as n } from "../../_chunks/transcript-panel-CR7VY1uw.js";
1
+ import { T as t, t as n } from "../../_chunks/transcript-panel-B4HiC7ed.js";
2
2
  export {
3
3
  t as TranscriptPanel,
4
4
  n as transcriptPanelAgent
@@ -1,4 +1,4 @@
1
- import { C as r, U as t, a as U, b as e, c as n } from "../../_chunks/unit-converter-Ds9jalbN.js";
1
+ import { C as r, U as t, a as U, b as e, c as n } from "../../_chunks/unit-converter-u3CwNDpP.js";
2
2
  export {
3
3
  r as CATEGORIES,
4
4
  t as UNITS,
@@ -23,8 +23,8 @@ export interface UnitConverterProps extends VariantProps<typeof rootVariants> {
23
23
  onError?: (error: unknown) => void;
24
24
  /**
25
25
  * Brand wordmark printed in the inserted/copied result-card footer.
26
- * Omitted → the default `'AlfaDocs'` wordmark; a string overrides it;
27
- * `false` removes the brand line.
26
+ * Omitted → no brand line (and no footer hairline); a string that custom
27
+ * brand; `false` no brand line. Brand is opt-in.
28
28
  */
29
29
  insertBrand?: string | false;
30
30
  /** Opaque instance id, emitted as `data-component-id`. */
@@ -1,4 +1,4 @@
1
- import { W as o } from "../../_chunks/wallet-pay-button-DK4ESYge.js";
1
+ import { W as o } from "../../_chunks/wallet-pay-button-DuDPBlCO.js";
2
2
  export {
3
3
  o as WalletPayButton
4
4
  };
@@ -1673,7 +1673,7 @@ export declare const arUi: {
1673
1673
  readonly overweight: "25.0 – 29.9";
1674
1674
  readonly obese: "30.0 فأكثر";
1675
1675
  };
1676
- readonly gaugeAria: "مؤشر كتلة الجسم {{bmi}}، {{category}}";
1676
+ readonly gaugeAria: "مؤشر كتلة الجسم {{bmi}} {{category}} ({{range}})";
1677
1677
  readonly empty: "أدخل الطول والوزن لحساب مؤشر كتلة الجسم.";
1678
1678
  };
1679
1679
  readonly dueDateCalculator: {
@@ -1650,7 +1650,7 @@ const e = {
1650
1650
  overweight: "25.0 – 29.9",
1651
1651
  obese: "30.0 فأكثر"
1652
1652
  },
1653
- gaugeAria: "مؤشر كتلة الجسم {{bmi}}، {{category}}",
1653
+ gaugeAria: "مؤشر كتلة الجسم {{bmi}} {{category}} ({{range}})",
1654
1654
  empty: "أدخل الطول والوزن لحساب مؤشر كتلة الجسم."
1655
1655
  },
1656
1656
  dueDateCalculator: {
@@ -1673,7 +1673,7 @@ export declare const deUi: {
1673
1673
  readonly overweight: "25,0 – 29,9";
1674
1674
  readonly obese: "30,0 und mehr";
1675
1675
  };
1676
- readonly gaugeAria: "Body-Mass-Index {{bmi}}, {{category}}";
1676
+ readonly gaugeAria: "Body-Mass-Index {{bmi}} {{category}} ({{range}})";
1677
1677
  readonly empty: "Größe und Gewicht eingeben, um den BMI zu berechnen.";
1678
1678
  };
1679
1679
  readonly dueDateCalculator: {