@founderhq/journeys 0.3.67 → 0.4.1
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.
- package/README.md +44 -6
- package/dist/_tsup-dts-rollup.d.cts +2300 -0
- package/dist/_tsup-dts-rollup.d.ts +2300 -0
- package/dist/index.cjs +540 -54
- package/dist/index.d.cts +140 -1446
- package/dist/index.d.ts +140 -1446
- package/dist/index.js +540 -54
- package/dist/styles.css +2 -2
- package/package.json +12 -9
|
@@ -0,0 +1,2300 @@
|
|
|
1
|
+
import { Accordion as Accordion_2 } from 'radix-ui';
|
|
2
|
+
import { Checkbox as Checkbox_2 } from 'radix-ui';
|
|
3
|
+
import { ClassProp } from 'class-variance-authority/types';
|
|
4
|
+
import { ClassValue } from 'clsx';
|
|
5
|
+
import type { ComponentType } from 'react';
|
|
6
|
+
import { Context } from 'react';
|
|
7
|
+
import { ForwardRefExoticComponent } from 'react';
|
|
8
|
+
import { JSX } from 'react';
|
|
9
|
+
import { RadioGroup as RadioGroup_2 } from 'radix-ui';
|
|
10
|
+
import * as React_2 from 'react';
|
|
11
|
+
import { ReactNode } from 'react';
|
|
12
|
+
import { Ref } from 'react';
|
|
13
|
+
import { RefAttributes } from 'react';
|
|
14
|
+
import { Tooltip as Tooltip_2 } from 'radix-ui';
|
|
15
|
+
import useEmblaCarousel from 'embla-carousel-react';
|
|
16
|
+
import { UseEmblaCarouselType } from 'embla-carousel-react';
|
|
17
|
+
import { VariantProps } from 'class-variance-authority';
|
|
18
|
+
|
|
19
|
+
export declare function Accordion({ ...props }: React_2.ComponentProps<typeof Accordion_2.Root>): React_2.JSX.Element;
|
|
20
|
+
|
|
21
|
+
export declare function AccordionBlock({ items, type, defaultOpen, className, }: AccordionBlockProps): JSX.Element;
|
|
22
|
+
|
|
23
|
+
declare type AccordionBlockProps = {
|
|
24
|
+
items: AccordionItem[];
|
|
25
|
+
type?: "single" | "multiple";
|
|
26
|
+
defaultOpen?: number[];
|
|
27
|
+
className?: string;
|
|
28
|
+
};
|
|
29
|
+
export { AccordionBlockProps }
|
|
30
|
+
export { AccordionBlockProps as AccordionBlockProps_alias_1 }
|
|
31
|
+
|
|
32
|
+
export declare function AccordionContent({ className, children, ...props }: React_2.ComponentProps<typeof Accordion_2.Content>): React_2.JSX.Element;
|
|
33
|
+
|
|
34
|
+
declare type AccordionItem = {
|
|
35
|
+
title: string;
|
|
36
|
+
content: string;
|
|
37
|
+
};
|
|
38
|
+
export { AccordionItem }
|
|
39
|
+
export { AccordionItem as AccordionItem_alias_1 }
|
|
40
|
+
|
|
41
|
+
export declare function AccordionItem_alias_2({ className, ...props }: React_2.ComponentProps<typeof Accordion_2.Item>): React_2.JSX.Element;
|
|
42
|
+
|
|
43
|
+
export declare function AccordionTrigger({ className, children, ...props }: React_2.ComponentProps<typeof Accordion_2.Trigger>): React_2.JSX.Element;
|
|
44
|
+
|
|
45
|
+
declare type AnimationPreset = "fade-in" | "slide-up" | "slide-down" | "slide-left" | "slide-right" | "scale-up" | "blur-in" | "none";
|
|
46
|
+
export { AnimationPreset }
|
|
47
|
+
export { AnimationPreset as AnimationPreset_alias_1 }
|
|
48
|
+
|
|
49
|
+
declare type AppliedDiscountAnswer = {
|
|
50
|
+
code: string;
|
|
51
|
+
/** Plan id this discount was validated against. Omit for plan-agnostic offers. */
|
|
52
|
+
planId?: string;
|
|
53
|
+
planVariable?: string;
|
|
54
|
+
message?: string;
|
|
55
|
+
pricing?: AppliedDiscountPricing;
|
|
56
|
+
summaryLines?: DiscountCodeSummaryLine[];
|
|
57
|
+
metadata?: Record<string, unknown>;
|
|
58
|
+
};
|
|
59
|
+
export { AppliedDiscountAnswer }
|
|
60
|
+
export { AppliedDiscountAnswer as AppliedDiscountAnswer_alias_1 }
|
|
61
|
+
|
|
62
|
+
declare type AppliedDiscountPricing = {
|
|
63
|
+
/** Optional display override for the discounted plan price. When set, pricing_plans renders it verbatim. */
|
|
64
|
+
display?: string;
|
|
65
|
+
/** Optional numeric discounted amount for consumers that want Journeys to format the card price. */
|
|
66
|
+
amount?: number;
|
|
67
|
+
currency?: string;
|
|
68
|
+
period?: PricingPlanPeriod;
|
|
69
|
+
perUnitLabel?: string;
|
|
70
|
+
originalAmount?: number;
|
|
71
|
+
/** Generic presentation fields; values and units are consumer-owned. `total` is used as a card-price fallback. */
|
|
72
|
+
baseAmount?: number;
|
|
73
|
+
discountAmount?: number;
|
|
74
|
+
subtotal?: number;
|
|
75
|
+
taxAmount?: number;
|
|
76
|
+
total?: number;
|
|
77
|
+
};
|
|
78
|
+
export { AppliedDiscountPricing }
|
|
79
|
+
export { AppliedDiscountPricing as AppliedDiscountPricing_alias_1 }
|
|
80
|
+
|
|
81
|
+
declare type Arc = {
|
|
82
|
+
id: string;
|
|
83
|
+
label: string;
|
|
84
|
+
stepIds: string[];
|
|
85
|
+
};
|
|
86
|
+
export { Arc }
|
|
87
|
+
export { Arc as Arc_alias_1 }
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Returns true when every input block on the page that contributes a required answer
|
|
91
|
+
* has a satisfying value in `answers`. Blocks whose `condition` evaluates false are
|
|
92
|
+
* skipped (they aren't visible, so they can't gate the next button).
|
|
93
|
+
*/
|
|
94
|
+
declare function arePageInputsValid(blocks: BlockConfig[], answers: JourneyAnswers): boolean;
|
|
95
|
+
export { arePageInputsValid }
|
|
96
|
+
export { arePageInputsValid as arePageInputsValid_alias_1 }
|
|
97
|
+
|
|
98
|
+
export declare function AvatarBlock({ src, name, size, borderColor, borderWidth, className, }: AvatarBlockProps): JSX.Element;
|
|
99
|
+
|
|
100
|
+
export declare type AvatarBlockProps = {
|
|
101
|
+
src?: string;
|
|
102
|
+
name?: string;
|
|
103
|
+
size?: number;
|
|
104
|
+
borderColor?: string;
|
|
105
|
+
borderWidth?: number;
|
|
106
|
+
className?: string;
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
export declare function AvatarGroupBlock({ avatars, size, overlap, max, borderColor, borderWidth, className, }: AvatarGroupBlockProps): JSX.Element;
|
|
110
|
+
|
|
111
|
+
declare type AvatarGroupBlockProps = {
|
|
112
|
+
avatars: AvatarItem[];
|
|
113
|
+
size?: number;
|
|
114
|
+
overlap?: number;
|
|
115
|
+
max?: number;
|
|
116
|
+
borderColor?: string;
|
|
117
|
+
borderWidth?: number;
|
|
118
|
+
className?: string;
|
|
119
|
+
};
|
|
120
|
+
export { AvatarGroupBlockProps }
|
|
121
|
+
export { AvatarGroupBlockProps as AvatarGroupBlockProps_alias_1 }
|
|
122
|
+
|
|
123
|
+
declare type AvatarItem = {
|
|
124
|
+
src?: string;
|
|
125
|
+
name?: string;
|
|
126
|
+
};
|
|
127
|
+
export { AvatarItem }
|
|
128
|
+
export { AvatarItem as AvatarItem_alias_1 }
|
|
129
|
+
|
|
130
|
+
export declare function BadgeBlock({ text, variant, items, gap, className, }: BadgeBlockProps): JSX.Element | null;
|
|
131
|
+
|
|
132
|
+
declare type BadgeBlockProps = {
|
|
133
|
+
/** Single badge text (backward compat). Ignored when `items` is set. */
|
|
134
|
+
text?: string;
|
|
135
|
+
variant?: BadgeVariant;
|
|
136
|
+
/** Multiple badges. Takes precedence over `text`/`variant`. */
|
|
137
|
+
items?: BadgeItem[];
|
|
138
|
+
gap?: number;
|
|
139
|
+
className?: string;
|
|
140
|
+
};
|
|
141
|
+
export { BadgeBlockProps }
|
|
142
|
+
export { BadgeBlockProps as BadgeBlockProps_alias_1 }
|
|
143
|
+
|
|
144
|
+
declare type BadgeItem = {
|
|
145
|
+
text: string;
|
|
146
|
+
variant?: BadgeVariant;
|
|
147
|
+
icon?: string;
|
|
148
|
+
};
|
|
149
|
+
export { BadgeItem }
|
|
150
|
+
export { BadgeItem as BadgeItem_alias_1 }
|
|
151
|
+
|
|
152
|
+
declare type BadgeVariant = "default" | "outline" | "success" | "warning" | "info";
|
|
153
|
+
export { BadgeVariant }
|
|
154
|
+
export { BadgeVariant as BadgeVariant_alias_1 }
|
|
155
|
+
|
|
156
|
+
export declare function BeforeAfterBlock(props: BeforeAfterBlockProps): JSX.Element;
|
|
157
|
+
|
|
158
|
+
declare type BeforeAfterBlockProps = {
|
|
159
|
+
before: BeforeAfterSide;
|
|
160
|
+
after: BeforeAfterSide;
|
|
161
|
+
style?: "split" | "swipe" | "stacked";
|
|
162
|
+
className?: string;
|
|
163
|
+
};
|
|
164
|
+
export { BeforeAfterBlockProps }
|
|
165
|
+
export { BeforeAfterBlockProps as BeforeAfterBlockProps_alias_1 }
|
|
166
|
+
|
|
167
|
+
declare type BeforeAfterSide = {
|
|
168
|
+
label: string;
|
|
169
|
+
items: string[];
|
|
170
|
+
color?: string;
|
|
171
|
+
icon?: string;
|
|
172
|
+
};
|
|
173
|
+
export { BeforeAfterSide }
|
|
174
|
+
export { BeforeAfterSide as BeforeAfterSide_alias_1 }
|
|
175
|
+
|
|
176
|
+
declare type BlobConfig = {
|
|
177
|
+
position: {
|
|
178
|
+
x: string;
|
|
179
|
+
y: string;
|
|
180
|
+
};
|
|
181
|
+
/** Explicit RGBA fill. Omit to inherit `--jy-blob-color` from the theme
|
|
182
|
+
* (used by autogenerated random blobs so they match the active theme). */
|
|
183
|
+
color?: {
|
|
184
|
+
r: number;
|
|
185
|
+
g: number;
|
|
186
|
+
b: number;
|
|
187
|
+
a: number;
|
|
188
|
+
};
|
|
189
|
+
size?: string;
|
|
190
|
+
};
|
|
191
|
+
export { BlobConfig }
|
|
192
|
+
export { BlobConfig as BlobConfig_alias_1 }
|
|
193
|
+
|
|
194
|
+
/** Metadata for each block type — seed for a future journey editor drag-and-drop palette */
|
|
195
|
+
declare const BLOCK_META: Record<BlockType, {
|
|
196
|
+
label: string;
|
|
197
|
+
description: string;
|
|
198
|
+
}>;
|
|
199
|
+
export { BLOCK_META }
|
|
200
|
+
export { BLOCK_META as BLOCK_META_alias_1 }
|
|
201
|
+
|
|
202
|
+
export declare const BLOCK_REGISTRY: Record<BlockType, ComponentType<any>>;
|
|
203
|
+
|
|
204
|
+
declare type BlockAnimation = {
|
|
205
|
+
/** Predefined animation preset. Defaults to "fade-in" */
|
|
206
|
+
preset?: AnimationPreset;
|
|
207
|
+
/** Duration in seconds. Defaults to 0.5 */
|
|
208
|
+
duration?: number;
|
|
209
|
+
/** Delay in seconds. If omitted, auto-calculated from block index (index * 0.08s) */
|
|
210
|
+
delay?: number;
|
|
211
|
+
/** If true, element reserves its space before the animation starts (animates opacity/transform only).
|
|
212
|
+
* If false (default), element is hidden and pushes content down as it appears. */
|
|
213
|
+
reserveSpace?: boolean;
|
|
214
|
+
/** When to trigger the entrance animation.
|
|
215
|
+
* "mount" (default) — animate immediately on mount.
|
|
216
|
+
* "visible" — animate when the block enters the viewport (fires once). */
|
|
217
|
+
animateOn?: "mount" | "visible";
|
|
218
|
+
};
|
|
219
|
+
export { BlockAnimation }
|
|
220
|
+
export { BlockAnimation as BlockAnimation_alias_1 }
|
|
221
|
+
|
|
222
|
+
declare type BlockCondition = {
|
|
223
|
+
/** The step ID whose answer is checked */
|
|
224
|
+
answerKey: string;
|
|
225
|
+
/** Operator: defaults to "truthy" */
|
|
226
|
+
op?: "truthy" | "falsy" | "equals" | "includes" | "notEquals";
|
|
227
|
+
/** Value to compare against (for equals/includes/notEquals) */
|
|
228
|
+
value?: string | number;
|
|
229
|
+
};
|
|
230
|
+
export { BlockCondition }
|
|
231
|
+
export { BlockCondition as BlockCondition_alias_1 }
|
|
232
|
+
|
|
233
|
+
/**
|
|
234
|
+
* Discriminated union: `type` narrows `props` to the correct block-specific interface.
|
|
235
|
+
* e.g. `{ type: "heading" }` → `props: HeadingBlockProps`
|
|
236
|
+
*/
|
|
237
|
+
declare type BlockConfig = {
|
|
238
|
+
[K in BlockType]: {
|
|
239
|
+
type: K;
|
|
240
|
+
props: BlockPropsMap[K];
|
|
241
|
+
} & BlockConfigBase;
|
|
242
|
+
}[BlockType];
|
|
243
|
+
export { BlockConfig }
|
|
244
|
+
export { BlockConfig as BlockConfig_alias_1 }
|
|
245
|
+
|
|
246
|
+
/** Base fields shared by every block config entry */
|
|
247
|
+
declare type BlockConfigBase = {
|
|
248
|
+
/** Optional stable anchor ID that scroll timelines can target */
|
|
249
|
+
anchorId?: string;
|
|
250
|
+
/** Optional Tailwind className override applied to the block wrapper */
|
|
251
|
+
className?: string;
|
|
252
|
+
/** Optional inline style override on the block wrapper */
|
|
253
|
+
style?: React.CSSProperties;
|
|
254
|
+
/** Optional animation override. Defaults to staggered fade-in */
|
|
255
|
+
animation?: BlockAnimation;
|
|
256
|
+
/** Optional exit animation played when the block disappears (e.g. condition becomes false) */
|
|
257
|
+
exitAnimation?: BlockExitAnimation;
|
|
258
|
+
/** If true, block is pinned to the bottom of the page outside the scrollable area */
|
|
259
|
+
sticky?: boolean;
|
|
260
|
+
/** Optional condition — block is only rendered if condition evaluates true */
|
|
261
|
+
condition?: BlockCondition;
|
|
262
|
+
/** Per-block override of the journey's `contentMaxWidth`. Numbers are interpreted as px;
|
|
263
|
+
* strings are passed through as CSS (e.g. "32rem"). Use "none" to opt out of the journey
|
|
264
|
+
* default and let this block fill the available width. */
|
|
265
|
+
maxWidth?: number | string | "none";
|
|
266
|
+
};
|
|
267
|
+
|
|
268
|
+
declare type BlockExitAnimation = {
|
|
269
|
+
/** Predefined exit animation preset. Defaults to "fade-out" */
|
|
270
|
+
preset?: ExitAnimationPreset;
|
|
271
|
+
/** Duration in seconds. Defaults to 0.35 */
|
|
272
|
+
duration?: number;
|
|
273
|
+
/** Delay in seconds before exit starts (after trigger). Defaults to 0 */
|
|
274
|
+
delay?: number;
|
|
275
|
+
/** Auto-hide: seconds after the block appears before it automatically exits.
|
|
276
|
+
* Works independently of conditions — the block disappears on a timer. */
|
|
277
|
+
autoHideAfter?: number;
|
|
278
|
+
};
|
|
279
|
+
export { BlockExitAnimation }
|
|
280
|
+
export { BlockExitAnimation as BlockExitAnimation_alias_1 }
|
|
281
|
+
|
|
282
|
+
/** Maps each BlockType to its typed props interface */
|
|
283
|
+
declare type BlockPropsMap = {
|
|
284
|
+
heading: HeadingBlockProps;
|
|
285
|
+
text: TextBlockProps;
|
|
286
|
+
image: ImageBlockProps;
|
|
287
|
+
button: ButtonBlockProps;
|
|
288
|
+
spacer: SpacerBlockProps;
|
|
289
|
+
divider: DividerBlockProps;
|
|
290
|
+
stat: StatBlockProps;
|
|
291
|
+
icon: IconBlockProps;
|
|
292
|
+
badge: BadgeBlockProps;
|
|
293
|
+
list: ListBlockProps;
|
|
294
|
+
comparison_bar: ComparisonBarBlockProps;
|
|
295
|
+
counter: CounterBlockProps;
|
|
296
|
+
decorated_text: DecoratedTextBlockProps;
|
|
297
|
+
quote: QuoteBlockProps;
|
|
298
|
+
video: VideoBlockProps;
|
|
299
|
+
card: CardBlockProps;
|
|
300
|
+
callout: CalloutBlockProps;
|
|
301
|
+
progress_bar: ProgressBarBlockProps;
|
|
302
|
+
lottie: LottieBlockProps;
|
|
303
|
+
carousel: CarouselBlockProps;
|
|
304
|
+
checklist: ChecklistBlockProps;
|
|
305
|
+
accordion: AccordionBlockProps;
|
|
306
|
+
columns: ColumnsBlockProps;
|
|
307
|
+
circular_progress: CircularProgressBlockProps;
|
|
308
|
+
line_chart: LineChartBlockProps;
|
|
309
|
+
avatar_group: AvatarGroupBlockProps;
|
|
310
|
+
table: TableBlockProps;
|
|
311
|
+
gravity_bin: GravityBinBlockProps;
|
|
312
|
+
timeline: TimelineBlockProps;
|
|
313
|
+
feature_row: FeatureRowBlockProps;
|
|
314
|
+
metric: MetricBlockProps;
|
|
315
|
+
device_frame: DeviceFrameBlockProps;
|
|
316
|
+
before_after: BeforeAfterBlockProps;
|
|
317
|
+
notification_stack: NotificationStackBlockProps;
|
|
318
|
+
floating_label: FloatingLabelBlockProps;
|
|
319
|
+
single_select: SingleSelectBlockProps;
|
|
320
|
+
multi_select: MultiSelectBlockProps;
|
|
321
|
+
pricing_plans: PricingPlansBlockProps;
|
|
322
|
+
};
|
|
323
|
+
export { BlockPropsMap }
|
|
324
|
+
export { BlockPropsMap as BlockPropsMap_alias_1 }
|
|
325
|
+
|
|
326
|
+
export declare function BlockRenderer({ blocks, layout, answers, onNext, onBack, onGoToStep, isLastStep, scrollViewportRef, wrapInScrollViewport, }: BlockRendererProps): JSX.Element;
|
|
327
|
+
|
|
328
|
+
declare type BlockRendererProps = {
|
|
329
|
+
blocks: BlockConfig[];
|
|
330
|
+
layout?: PageLayout;
|
|
331
|
+
answers: JourneyAnswers;
|
|
332
|
+
onNext: () => void;
|
|
333
|
+
onBack: () => void;
|
|
334
|
+
onGoToStep?: (stepId: string) => void;
|
|
335
|
+
isLastStep?: boolean;
|
|
336
|
+
scrollViewportRef?: Ref<HTMLDivElement>;
|
|
337
|
+
wrapInScrollViewport?: boolean;
|
|
338
|
+
};
|
|
339
|
+
|
|
340
|
+
declare type BlockType = "heading" | "text" | "image" | "button" | "spacer" | "divider" | "stat" | "icon" | "badge" | "list" | "comparison_bar" | "counter" | "decorated_text" | "quote" | "video" | "card" | "callout" | "progress_bar" | "lottie" | "carousel" | "checklist" | "accordion" | "columns" | "circular_progress" | "line_chart" | "avatar_group" | "table" | "gravity_bin" | "timeline" | "feature_row" | "metric" | "device_frame" | "before_after" | "notification_stack" | "floating_label" | "single_select" | "multi_select" | "pricing_plans";
|
|
341
|
+
export { BlockType }
|
|
342
|
+
export { BlockType as BlockType_alias_1 }
|
|
343
|
+
|
|
344
|
+
export declare function Button({ className, variant, size, asChild, ...props }: React_2.ComponentProps<"button"> & VariantProps<typeof buttonVariants> & {
|
|
345
|
+
asChild?: boolean;
|
|
346
|
+
}): React_2.JSX.Element;
|
|
347
|
+
|
|
348
|
+
declare type ButtonAction = {
|
|
349
|
+
type: "next";
|
|
350
|
+
} | {
|
|
351
|
+
type: "back";
|
|
352
|
+
} | {
|
|
353
|
+
type: "skip";
|
|
354
|
+
skipTo?: string;
|
|
355
|
+
} | {
|
|
356
|
+
type: "link";
|
|
357
|
+
url: string;
|
|
358
|
+
external?: boolean;
|
|
359
|
+
/** Final-step links complete before navigating by default. Set false to opt out, or true to force this on non-final steps. */
|
|
360
|
+
completeBeforeNavigate?: boolean;
|
|
361
|
+
} | {
|
|
362
|
+
type: "purchase";
|
|
363
|
+
planVariable?: string;
|
|
364
|
+
discountVariable?: string;
|
|
365
|
+
} | {
|
|
366
|
+
type: "open_discount_code";
|
|
367
|
+
variable: string;
|
|
368
|
+
planVariable?: string;
|
|
369
|
+
title?: string;
|
|
370
|
+
placeholder?: string;
|
|
371
|
+
applyLabel?: string;
|
|
372
|
+
};
|
|
373
|
+
export { ButtonAction }
|
|
374
|
+
export { ButtonAction as ButtonAction_alias_1 }
|
|
375
|
+
|
|
376
|
+
export declare function ButtonBlock({ label, action, variant, className, onNext, onBack, onGoToStep, onPurchase, onOpenDiscountCode, disabled, isLastStep, }: ButtonBlockComponentProps): JSX.Element;
|
|
377
|
+
|
|
378
|
+
declare type ButtonBlockComponentProps = ButtonBlockProps & {
|
|
379
|
+
onNext?: () => void;
|
|
380
|
+
onBack?: () => void;
|
|
381
|
+
onGoToStep?: (stepId: string) => void;
|
|
382
|
+
/** Injected by BlockRenderer when action.type === "purchase". Fires purchase_intent event;
|
|
383
|
+
* consumer takes over for payment and calls navigation actions when ready. */
|
|
384
|
+
onPurchase?: () => void;
|
|
385
|
+
/** Injected by BlockRenderer when action.type === "open_discount_code". */
|
|
386
|
+
onOpenDiscountCode?: () => void;
|
|
387
|
+
/** Injected by BlockRenderer when sibling input blocks have unmet validation. */
|
|
388
|
+
disabled?: boolean;
|
|
389
|
+
isLastStep?: boolean;
|
|
390
|
+
};
|
|
391
|
+
|
|
392
|
+
declare type ButtonBlockProps = {
|
|
393
|
+
label: string;
|
|
394
|
+
action: ButtonAction;
|
|
395
|
+
variant?: "default" | "outline" | "ghost" | "link";
|
|
396
|
+
className?: string;
|
|
397
|
+
};
|
|
398
|
+
export { ButtonBlockProps }
|
|
399
|
+
export { ButtonBlockProps as ButtonBlockProps_alias_1 }
|
|
400
|
+
|
|
401
|
+
export declare const buttonVariants: (props?: ({
|
|
402
|
+
variant?: "link" | "default" | "outline" | "ghost" | "destructive" | "secondary" | null | undefined;
|
|
403
|
+
size?: "icon" | "default" | "xs" | "sm" | "lg" | "icon-xs" | "icon-sm" | "icon-lg" | null | undefined;
|
|
404
|
+
} & ClassProp) | undefined) => string;
|
|
405
|
+
|
|
406
|
+
export declare function CalloutBlock({ text, title, variant, icon, className, }: CalloutBlockProps): JSX.Element;
|
|
407
|
+
|
|
408
|
+
declare type CalloutBlockProps = {
|
|
409
|
+
text: string;
|
|
410
|
+
title?: string;
|
|
411
|
+
variant?: "info" | "warning" | "success" | "tip";
|
|
412
|
+
icon?: string;
|
|
413
|
+
className?: string;
|
|
414
|
+
};
|
|
415
|
+
export { CalloutBlockProps }
|
|
416
|
+
export { CalloutBlockProps as CalloutBlockProps_alias_1 }
|
|
417
|
+
|
|
418
|
+
export declare function CardBlock({ title, description, icon, image, variant, padding, borderRadius, className, }: CardBlockProps): JSX.Element;
|
|
419
|
+
|
|
420
|
+
declare type CardBlockProps = {
|
|
421
|
+
title?: string;
|
|
422
|
+
description?: string;
|
|
423
|
+
icon?: string;
|
|
424
|
+
image?: string;
|
|
425
|
+
variant?: "default" | "outlined" | "elevated" | "glass";
|
|
426
|
+
padding?: number;
|
|
427
|
+
borderRadius?: number;
|
|
428
|
+
className?: string;
|
|
429
|
+
};
|
|
430
|
+
export { CardBlockProps }
|
|
431
|
+
export { CardBlockProps as CardBlockProps_alias_1 }
|
|
432
|
+
|
|
433
|
+
export declare function Carousel({ orientation, opts, setApi, plugins, className, children, ...props }: React_2.ComponentProps<"div"> & CarouselProps): React_2.JSX.Element;
|
|
434
|
+
|
|
435
|
+
export declare type CarouselApi = UseEmblaCarouselType[1];
|
|
436
|
+
|
|
437
|
+
export declare function CarouselBlock({ items, autoplay, autoplayInterval, loop, showDots, showArrows, className, }: CarouselBlockProps): JSX.Element;
|
|
438
|
+
|
|
439
|
+
declare type CarouselBlockProps = {
|
|
440
|
+
items: CarouselSlide[];
|
|
441
|
+
autoplay?: boolean;
|
|
442
|
+
autoplayInterval?: number;
|
|
443
|
+
loop?: boolean;
|
|
444
|
+
showDots?: boolean;
|
|
445
|
+
showArrows?: boolean;
|
|
446
|
+
className?: string;
|
|
447
|
+
};
|
|
448
|
+
export { CarouselBlockProps }
|
|
449
|
+
export { CarouselBlockProps as CarouselBlockProps_alias_1 }
|
|
450
|
+
|
|
451
|
+
export declare function CarouselContent({ className, ...props }: React_2.ComponentProps<"div">): React_2.JSX.Element;
|
|
452
|
+
|
|
453
|
+
export declare function CarouselItem({ className, ...props }: React_2.ComponentProps<"div">): React_2.JSX.Element;
|
|
454
|
+
|
|
455
|
+
export declare function CarouselNext({ className, variant, size, ...props }: React_2.ComponentProps<typeof Button>): React_2.JSX.Element;
|
|
456
|
+
|
|
457
|
+
declare type CarouselOptions = UseCarouselParameters[0];
|
|
458
|
+
|
|
459
|
+
declare type CarouselPlugin = UseCarouselParameters[1];
|
|
460
|
+
|
|
461
|
+
export declare function CarouselPrevious({ className, variant, size, ...props }: React_2.ComponentProps<typeof Button>): React_2.JSX.Element;
|
|
462
|
+
|
|
463
|
+
declare type CarouselProps = {
|
|
464
|
+
opts?: CarouselOptions;
|
|
465
|
+
plugins?: CarouselPlugin;
|
|
466
|
+
orientation?: "horizontal" | "vertical";
|
|
467
|
+
setApi?: (api: CarouselApi) => void;
|
|
468
|
+
};
|
|
469
|
+
|
|
470
|
+
declare type CarouselSlide = MediaSlide | QuoteSlide;
|
|
471
|
+
export { CarouselSlide }
|
|
472
|
+
export { CarouselSlide as CarouselSlide_alias_1 }
|
|
473
|
+
|
|
474
|
+
declare type ChartLine = {
|
|
475
|
+
points: [number, number][];
|
|
476
|
+
color: string;
|
|
477
|
+
fill?: {
|
|
478
|
+
from: string;
|
|
479
|
+
to: string;
|
|
480
|
+
opacity?: number;
|
|
481
|
+
};
|
|
482
|
+
strokeWidth?: number;
|
|
483
|
+
dashed?: boolean;
|
|
484
|
+
endLabel?: string;
|
|
485
|
+
endIcon?: string;
|
|
486
|
+
endLabelColor?: string;
|
|
487
|
+
endLabelOffset?: {
|
|
488
|
+
x?: number;
|
|
489
|
+
y?: number;
|
|
490
|
+
};
|
|
491
|
+
endDot?: ChartLineEndDot;
|
|
492
|
+
};
|
|
493
|
+
export { ChartLine }
|
|
494
|
+
export { ChartLine as ChartLine_alias_1 }
|
|
495
|
+
|
|
496
|
+
declare type ChartLineEndDot = {
|
|
497
|
+
icon?: string;
|
|
498
|
+
lucideIcon?: string;
|
|
499
|
+
lucideIconColor?: string;
|
|
500
|
+
imageSrc?: string;
|
|
501
|
+
imageAlt?: string;
|
|
502
|
+
imageScale?: number;
|
|
503
|
+
color?: string;
|
|
504
|
+
gradient?: {
|
|
505
|
+
from: string;
|
|
506
|
+
to: string;
|
|
507
|
+
angle?: number;
|
|
508
|
+
};
|
|
509
|
+
size?: number;
|
|
510
|
+
};
|
|
511
|
+
export { ChartLineEndDot }
|
|
512
|
+
export { ChartLineEndDot as ChartLineEndDot_alias_1 }
|
|
513
|
+
|
|
514
|
+
export declare function Checkbox({ className, ...props }: React_2.ComponentProps<typeof Checkbox_2.Root>): React_2.JSX.Element;
|
|
515
|
+
|
|
516
|
+
export declare function ChecklistBlock({ items, animateOnMount, staggerDelay, className, }: ChecklistBlockProps): JSX.Element;
|
|
517
|
+
|
|
518
|
+
declare type ChecklistBlockProps = {
|
|
519
|
+
items: ChecklistItem[];
|
|
520
|
+
animateOnMount?: boolean;
|
|
521
|
+
staggerDelay?: number;
|
|
522
|
+
className?: string;
|
|
523
|
+
};
|
|
524
|
+
export { ChecklistBlockProps }
|
|
525
|
+
export { ChecklistBlockProps as ChecklistBlockProps_alias_1 }
|
|
526
|
+
|
|
527
|
+
declare type ChecklistItem = {
|
|
528
|
+
text?: string;
|
|
529
|
+
segments?: TextSegment[];
|
|
530
|
+
textColor?: string;
|
|
531
|
+
lineHeight?: string | number;
|
|
532
|
+
checked?: boolean;
|
|
533
|
+
icon?: string;
|
|
534
|
+
iconColor?: string;
|
|
535
|
+
iconGradient?: {
|
|
536
|
+
from: string;
|
|
537
|
+
to: string;
|
|
538
|
+
};
|
|
539
|
+
loadDelay?: number;
|
|
540
|
+
loadDuration?: number;
|
|
541
|
+
};
|
|
542
|
+
export { ChecklistItem }
|
|
543
|
+
export { ChecklistItem as ChecklistItem_alias_1 }
|
|
544
|
+
|
|
545
|
+
export declare function CircularProgressBlock({ segments, startDelay, size, strokeWidth, trackColor, color, gradient, showPercentage, percentageColor, percentageOpacity, percentageFontSize, hapticInterval, className, }: CircularProgressBlockProps): JSX.Element;
|
|
546
|
+
|
|
547
|
+
declare type CircularProgressBlockProps = {
|
|
548
|
+
segments: ProgressSegment[];
|
|
549
|
+
startDelay?: number;
|
|
550
|
+
size?: number;
|
|
551
|
+
strokeWidth?: number;
|
|
552
|
+
trackColor?: string;
|
|
553
|
+
color?: string;
|
|
554
|
+
gradient?: {
|
|
555
|
+
from: string;
|
|
556
|
+
to: string;
|
|
557
|
+
};
|
|
558
|
+
showPercentage?: boolean;
|
|
559
|
+
percentageColor?: string;
|
|
560
|
+
percentageOpacity?: number;
|
|
561
|
+
percentageFontSize?: string;
|
|
562
|
+
hapticInterval?: number;
|
|
563
|
+
className?: string;
|
|
564
|
+
};
|
|
565
|
+
export { CircularProgressBlockProps }
|
|
566
|
+
export { CircularProgressBlockProps as CircularProgressBlockProps_alias_1 }
|
|
567
|
+
|
|
568
|
+
export declare function cn(...inputs: ClassValue[]): string;
|
|
569
|
+
|
|
570
|
+
declare type ColumnConfig = {
|
|
571
|
+
blocks: BlockConfig[];
|
|
572
|
+
flex?: number;
|
|
573
|
+
/** Explicit CSS width (e.g. "75%", "200px"). Overrides flex when set. */
|
|
574
|
+
width?: string;
|
|
575
|
+
};
|
|
576
|
+
export { ColumnConfig }
|
|
577
|
+
export { ColumnConfig as ColumnConfig_alias_1 }
|
|
578
|
+
|
|
579
|
+
export declare function ColumnsBlock({ columns, gap, responsive, className, answers, onNext, onBack, onGoToStep, isLastStep, }: ColumnsBlockComponentProps): JSX.Element;
|
|
580
|
+
|
|
581
|
+
declare type ColumnsBlockComponentProps = ColumnsBlockProps & {
|
|
582
|
+
answers?: JourneyAnswers;
|
|
583
|
+
onNext?: () => void;
|
|
584
|
+
onBack?: () => void;
|
|
585
|
+
onGoToStep?: (stepId: string) => void;
|
|
586
|
+
isLastStep?: boolean;
|
|
587
|
+
};
|
|
588
|
+
|
|
589
|
+
declare type ColumnsBlockProps = {
|
|
590
|
+
columns: ColumnConfig[];
|
|
591
|
+
gap?: number | string;
|
|
592
|
+
responsive?: boolean;
|
|
593
|
+
className?: string;
|
|
594
|
+
};
|
|
595
|
+
export { ColumnsBlockProps }
|
|
596
|
+
export { ColumnsBlockProps as ColumnsBlockProps_alias_1 }
|
|
597
|
+
|
|
598
|
+
declare type ComparisonBar = {
|
|
599
|
+
label: string;
|
|
600
|
+
value: number | string;
|
|
601
|
+
color?: string;
|
|
602
|
+
gradient?: GradientValue;
|
|
603
|
+
percentageColor?: string;
|
|
604
|
+
};
|
|
605
|
+
export { ComparisonBar }
|
|
606
|
+
export { ComparisonBar as ComparisonBar_alias_1 }
|
|
607
|
+
|
|
608
|
+
export declare function ComparisonBarBlock({ bars, showPercentage, maxBarHeight, barWidth, gap, animationDuration, staggerDelay, borderRadius, className, }: ComparisonBarBlockProps): JSX.Element;
|
|
609
|
+
|
|
610
|
+
declare type ComparisonBarBlockProps = {
|
|
611
|
+
bars: ComparisonBar[];
|
|
612
|
+
showPercentage?: boolean;
|
|
613
|
+
maxBarHeight?: number;
|
|
614
|
+
barWidth?: number;
|
|
615
|
+
gap?: number;
|
|
616
|
+
animationDuration?: number;
|
|
617
|
+
staggerDelay?: number;
|
|
618
|
+
borderRadius?: number;
|
|
619
|
+
className?: string;
|
|
620
|
+
};
|
|
621
|
+
export { ComparisonBarBlockProps }
|
|
622
|
+
export { ComparisonBarBlockProps as ComparisonBarBlockProps_alias_1 }
|
|
623
|
+
|
|
624
|
+
declare type ComputedVariable = {
|
|
625
|
+
/** Variable name — must be a valid JS identifier. */
|
|
626
|
+
id: string;
|
|
627
|
+
/** Human-readable label for the journey editor. */
|
|
628
|
+
label?: string;
|
|
629
|
+
/** JS expression evaluated against current answers, e.g. "age >= 18 ? 'adult' : 'minor'" */
|
|
630
|
+
expression: string;
|
|
631
|
+
};
|
|
632
|
+
export { ComputedVariable }
|
|
633
|
+
export { ComputedVariable as ComputedVariable_alias_1 }
|
|
634
|
+
|
|
635
|
+
declare type ContinuousScrollTimelineEvent = ScrollTimelineEventBase & {
|
|
636
|
+
action: "continuous_scroll";
|
|
637
|
+
/** Scroll speed in px/sec */
|
|
638
|
+
speedPxPerSecond: number;
|
|
639
|
+
/** Stop condition for this continuous segment. Defaults to "next_event". */
|
|
640
|
+
until?: "next_event" | "end" | "user_interrupt";
|
|
641
|
+
};
|
|
642
|
+
export { ContinuousScrollTimelineEvent }
|
|
643
|
+
export { ContinuousScrollTimelineEvent as ContinuousScrollTimelineEvent_alias_1 }
|
|
644
|
+
|
|
645
|
+
export declare function CounterBlock({ value, prefix, suffix, startDelay, duration, decimals, hapticInterval, fontSize, fontWeight, color, gradient, fontFamily, className, }: CounterBlockProps): JSX.Element;
|
|
646
|
+
|
|
647
|
+
declare type CounterBlockProps = {
|
|
648
|
+
value: number | string;
|
|
649
|
+
prefix?: string;
|
|
650
|
+
suffix?: string;
|
|
651
|
+
startDelay?: number;
|
|
652
|
+
duration?: number;
|
|
653
|
+
decimals?: number;
|
|
654
|
+
hapticInterval?: number;
|
|
655
|
+
fontSize?: string;
|
|
656
|
+
fontWeight?: string | number;
|
|
657
|
+
color?: string;
|
|
658
|
+
gradient?: GradientValue;
|
|
659
|
+
fontFamily?: string;
|
|
660
|
+
className?: string;
|
|
661
|
+
};
|
|
662
|
+
export { CounterBlockProps }
|
|
663
|
+
export { CounterBlockProps as CounterBlockProps_alias_1 }
|
|
664
|
+
|
|
665
|
+
export declare function CounterSelectStep({ config, answer, onAnswer, onNext, }: StepComponentProps): JSX.Element;
|
|
666
|
+
|
|
667
|
+
declare type CounterStyle = {
|
|
668
|
+
/** Whether to show the gravity bin physics background. Default true */
|
|
669
|
+
showGravityBin?: boolean;
|
|
670
|
+
/** Matter.js gravity Y value. Default 1 */
|
|
671
|
+
gravity?: number;
|
|
672
|
+
/** Bounce restitution 0-1. Default 0.4 */
|
|
673
|
+
restitution?: number;
|
|
674
|
+
/** Body friction. Default 0.3 */
|
|
675
|
+
friction?: number;
|
|
676
|
+
/** Icon body radius in px. Default 20 */
|
|
677
|
+
iconSize?: number;
|
|
678
|
+
/** Max total count across all options */
|
|
679
|
+
maxTotal?: number;
|
|
680
|
+
};
|
|
681
|
+
export { CounterStyle }
|
|
682
|
+
export { CounterStyle as CounterStyle_alias_1 }
|
|
683
|
+
|
|
684
|
+
export declare function createCaptureEventId(runtime: Pick<RuntimeIds, "clientSessionId">, event: JourneyEvent, sequence: number): string;
|
|
685
|
+
|
|
686
|
+
export declare function DecoratedTextBlock({ text, segments, leftImage, rightImage, imageSize, fontSize, fontWeight, lineHeight, color, gradient, textAlign, className, }: DecoratedTextBlockProps): JSX.Element;
|
|
687
|
+
|
|
688
|
+
declare type DecoratedTextBlockProps = {
|
|
689
|
+
text?: string;
|
|
690
|
+
segments?: TextSegment[];
|
|
691
|
+
leftImage?: string;
|
|
692
|
+
rightImage?: string;
|
|
693
|
+
imageSize?: number;
|
|
694
|
+
fontSize?: string;
|
|
695
|
+
fontWeight?: string | number;
|
|
696
|
+
lineHeight?: string | number;
|
|
697
|
+
color?: string;
|
|
698
|
+
gradient?: GradientValue;
|
|
699
|
+
textAlign?: "left" | "center" | "right";
|
|
700
|
+
className?: string;
|
|
701
|
+
};
|
|
702
|
+
export { DecoratedTextBlockProps }
|
|
703
|
+
export { DecoratedTextBlockProps as DecoratedTextBlockProps_alias_1 }
|
|
704
|
+
|
|
705
|
+
export declare function DeviceFrameBlock({ src, alt, variant, shadow, mediaType, previewImage, playback, autoplay, loop, className, }: DeviceFrameBlockProps): JSX.Element;
|
|
706
|
+
|
|
707
|
+
declare type DeviceFrameBlockProps = {
|
|
708
|
+
src: string;
|
|
709
|
+
alt?: string;
|
|
710
|
+
variant?: "iphone" | "android";
|
|
711
|
+
shadow?: boolean;
|
|
712
|
+
mediaType?: "image" | "video";
|
|
713
|
+
previewImage?: string;
|
|
714
|
+
playback?: DeviceFrameVideoPlayback;
|
|
715
|
+
autoplay?: boolean;
|
|
716
|
+
loop?: boolean;
|
|
717
|
+
muted?: boolean;
|
|
718
|
+
controls?: boolean;
|
|
719
|
+
className?: string;
|
|
720
|
+
};
|
|
721
|
+
export { DeviceFrameBlockProps }
|
|
722
|
+
export { DeviceFrameBlockProps as DeviceFrameBlockProps_alias_1 }
|
|
723
|
+
|
|
724
|
+
export declare type DeviceFrameVideoPlayback = "paused" | "on_mount" | "on_view" | "on_click";
|
|
725
|
+
|
|
726
|
+
export declare function discountAppliesToPlan(discount: AppliedDiscountAnswer | undefined, planId: string): discount is AppliedDiscountAnswer;
|
|
727
|
+
|
|
728
|
+
declare type DiscountCodeApplyRequest = {
|
|
729
|
+
code: string;
|
|
730
|
+
variable: string;
|
|
731
|
+
planVariable?: string;
|
|
732
|
+
plan?: PricingPlan;
|
|
733
|
+
answers: JourneyAnswers;
|
|
734
|
+
};
|
|
735
|
+
export { DiscountCodeApplyRequest }
|
|
736
|
+
export { DiscountCodeApplyRequest as DiscountCodeApplyRequest_alias_1 }
|
|
737
|
+
|
|
738
|
+
declare type DiscountCodeApplyResult = {
|
|
739
|
+
valid: true;
|
|
740
|
+
code?: string;
|
|
741
|
+
planId?: string;
|
|
742
|
+
message?: string;
|
|
743
|
+
pricing?: AppliedDiscountPricing;
|
|
744
|
+
summaryLines?: DiscountCodeSummaryLine[];
|
|
745
|
+
metadata?: Record<string, unknown>;
|
|
746
|
+
} | {
|
|
747
|
+
valid: false;
|
|
748
|
+
reason: string;
|
|
749
|
+
metadata?: Record<string, unknown>;
|
|
750
|
+
};
|
|
751
|
+
export { DiscountCodeApplyResult }
|
|
752
|
+
export { DiscountCodeApplyResult as DiscountCodeApplyResult_alias_1 }
|
|
753
|
+
|
|
754
|
+
declare function DiscountCodeDialog({ state, onClose, onApply, onClear, }: DiscountCodeDialogProps): JSX.Element;
|
|
755
|
+
export { DiscountCodeDialog }
|
|
756
|
+
export { DiscountCodeDialog as DiscountCodeDialog_alias_1 }
|
|
757
|
+
|
|
758
|
+
declare type DiscountCodeDialogProps = {
|
|
759
|
+
state: DiscountCodeDialogState | null;
|
|
760
|
+
onClose: () => void;
|
|
761
|
+
onApply: (code: string, state: DiscountCodeDialogState) => Promise<DiscountCodeApplyResult>;
|
|
762
|
+
onClear: (state: DiscountCodeDialogState) => void;
|
|
763
|
+
};
|
|
764
|
+
|
|
765
|
+
declare type DiscountCodeDialogState = {
|
|
766
|
+
variable: string;
|
|
767
|
+
planVariable?: string;
|
|
768
|
+
plan?: PricingPlan;
|
|
769
|
+
initialCode?: string;
|
|
770
|
+
title?: string;
|
|
771
|
+
placeholder?: string;
|
|
772
|
+
applyLabel?: string;
|
|
773
|
+
};
|
|
774
|
+
export { DiscountCodeDialogState }
|
|
775
|
+
export { DiscountCodeDialogState as DiscountCodeDialogState_alias_1 }
|
|
776
|
+
|
|
777
|
+
declare type DiscountCodeSummaryLine = {
|
|
778
|
+
label: string;
|
|
779
|
+
value: string;
|
|
780
|
+
};
|
|
781
|
+
export { DiscountCodeSummaryLine }
|
|
782
|
+
export { DiscountCodeSummaryLine as DiscountCodeSummaryLine_alias_1 }
|
|
783
|
+
|
|
784
|
+
export declare function DividerBlock({ color, gradient, thickness, decorative, className, }: DividerBlockProps): JSX.Element;
|
|
785
|
+
|
|
786
|
+
declare type DividerBlockProps = {
|
|
787
|
+
color?: string;
|
|
788
|
+
gradient?: GradientValue;
|
|
789
|
+
thickness?: number;
|
|
790
|
+
decorative?: "dots" | "diamond" | "wave" | "fade";
|
|
791
|
+
className?: string;
|
|
792
|
+
};
|
|
793
|
+
export { DividerBlockProps }
|
|
794
|
+
export { DividerBlockProps as DividerBlockProps_alias_1 }
|
|
795
|
+
|
|
796
|
+
/**
|
|
797
|
+
* Evaluates a BlockCondition against the current answers.
|
|
798
|
+
* Returns true if the block should be rendered.
|
|
799
|
+
*/
|
|
800
|
+
declare function evaluateCondition(condition: BlockCondition, answers: JourneyAnswers): boolean;
|
|
801
|
+
export { evaluateCondition }
|
|
802
|
+
export { evaluateCondition as evaluateCondition_alias_1 }
|
|
803
|
+
|
|
804
|
+
declare type ExitAnimationPreset = "fade-out" | "slide-up" | "slide-down" | "slide-left" | "slide-right" | "scale-down" | "blur-out" | "none";
|
|
805
|
+
export { ExitAnimationPreset }
|
|
806
|
+
export { ExitAnimationPreset as ExitAnimationPreset_alias_1 }
|
|
807
|
+
|
|
808
|
+
export declare function FeatureRowBlock({ title, description, icon, iconSize, iconColor, iconGradient, iconBg, iconBgColor, layout, className, }: FeatureRowBlockProps): JSX.Element;
|
|
809
|
+
|
|
810
|
+
declare type FeatureRowBlockProps = {
|
|
811
|
+
title: string;
|
|
812
|
+
description?: string;
|
|
813
|
+
icon?: string;
|
|
814
|
+
iconSize?: number;
|
|
815
|
+
iconColor?: string;
|
|
816
|
+
iconGradient?: {
|
|
817
|
+
from: string;
|
|
818
|
+
to: string;
|
|
819
|
+
};
|
|
820
|
+
iconBg?: FeatureRowIconBg;
|
|
821
|
+
iconBgColor?: string;
|
|
822
|
+
layout?: "horizontal" | "vertical";
|
|
823
|
+
className?: string;
|
|
824
|
+
};
|
|
825
|
+
export { FeatureRowBlockProps }
|
|
826
|
+
export { FeatureRowBlockProps as FeatureRowBlockProps_alias_1 }
|
|
827
|
+
|
|
828
|
+
declare type FeatureRowIconBg = "circle" | "rounded-square" | "none";
|
|
829
|
+
export { FeatureRowIconBg }
|
|
830
|
+
export { FeatureRowIconBg as FeatureRowIconBg_alias_1 }
|
|
831
|
+
|
|
832
|
+
declare type FetchState = {
|
|
833
|
+
status: "loading";
|
|
834
|
+
} | {
|
|
835
|
+
status: "ready";
|
|
836
|
+
config: JourneyConfig;
|
|
837
|
+
} | {
|
|
838
|
+
status: "error";
|
|
839
|
+
error: Error;
|
|
840
|
+
};
|
|
841
|
+
export { FetchState }
|
|
842
|
+
export { FetchState as FetchState_alias_1 }
|
|
843
|
+
|
|
844
|
+
export declare function FloatingLabelBlock({ text, variant, color, gradient, className, }: FloatingLabelBlockProps): JSX.Element;
|
|
845
|
+
|
|
846
|
+
declare type FloatingLabelBlockProps = {
|
|
847
|
+
text: string;
|
|
848
|
+
variant?: "pill" | "badge" | "step";
|
|
849
|
+
color?: string;
|
|
850
|
+
gradient?: GradientValue;
|
|
851
|
+
className?: string;
|
|
852
|
+
};
|
|
853
|
+
export { FloatingLabelBlockProps }
|
|
854
|
+
export { FloatingLabelBlockProps as FloatingLabelBlockProps_alias_1 }
|
|
855
|
+
|
|
856
|
+
export declare const FOUNDERHQ_BASE_URL = "https://getfounderhq.com";
|
|
857
|
+
|
|
858
|
+
/** Read the plan id from an answer that may be either the new flattened object or a legacy plain string id. */
|
|
859
|
+
export declare function getSelectedPlanId(answer: StepAnswer | undefined): string;
|
|
860
|
+
|
|
861
|
+
export declare type GradientValue = string | {
|
|
862
|
+
from: string;
|
|
863
|
+
to: string;
|
|
864
|
+
angle?: number;
|
|
865
|
+
};
|
|
866
|
+
|
|
867
|
+
declare function GravityBin({ items, height, gravity, restitution, friction, iconSize, interactive, className, }: GravityBinProps): JSX.Element;
|
|
868
|
+
export { GravityBin }
|
|
869
|
+
export { GravityBin as GravityBin_alias_1 }
|
|
870
|
+
|
|
871
|
+
export declare function GravityBinBlock({ items: staticItems, fromAnswer, iconMap, height, gravity, restitution, friction, iconSize, interactive, className, answers, }: GravityBinBlockProps & {
|
|
872
|
+
answers?: JourneyAnswers;
|
|
873
|
+
}): JSX.Element;
|
|
874
|
+
|
|
875
|
+
declare type GravityBinBlockProps = {
|
|
876
|
+
/** Static items to render */
|
|
877
|
+
items?: GravityBinItem[];
|
|
878
|
+
/** Answer key to read items from (used with iconMap) */
|
|
879
|
+
fromAnswer?: string;
|
|
880
|
+
/** Maps answer keys to icon names when using fromAnswer */
|
|
881
|
+
iconMap?: Record<string, string>;
|
|
882
|
+
/** Container height CSS value. Default "300px" */
|
|
883
|
+
height?: string;
|
|
884
|
+
/** Physics gravity Y. Default 1 */
|
|
885
|
+
gravity?: number;
|
|
886
|
+
/** Bounce restitution 0-1. Default 0.4 */
|
|
887
|
+
restitution?: number;
|
|
888
|
+
/** Friction. Default 0.3 */
|
|
889
|
+
friction?: number;
|
|
890
|
+
/** Icon body radius in px. Default 20 */
|
|
891
|
+
iconSize?: number;
|
|
892
|
+
/** Whether items are draggable. Default false */
|
|
893
|
+
interactive?: boolean;
|
|
894
|
+
className?: string;
|
|
895
|
+
};
|
|
896
|
+
export { GravityBinBlockProps }
|
|
897
|
+
export { GravityBinBlockProps as GravityBinBlockProps_alias_1 }
|
|
898
|
+
|
|
899
|
+
declare type GravityBinItem = {
|
|
900
|
+
icon: string;
|
|
901
|
+
/** Optional image URL. If present, renders image instead of icon. */
|
|
902
|
+
image?: string;
|
|
903
|
+
count: number;
|
|
904
|
+
};
|
|
905
|
+
export { GravityBinItem }
|
|
906
|
+
export { GravityBinItem as GravityBinItem_alias_1 }
|
|
907
|
+
|
|
908
|
+
declare type GravityBinProps = {
|
|
909
|
+
/** Flat array of items — each entry = one physics body */
|
|
910
|
+
items: Array<{
|
|
911
|
+
id: string;
|
|
912
|
+
icon: string;
|
|
913
|
+
image?: string;
|
|
914
|
+
}>;
|
|
915
|
+
/** Container height CSS value. Default "100%" */
|
|
916
|
+
height?: string;
|
|
917
|
+
/** Matter.js gravity.y. Default 1 */
|
|
918
|
+
gravity?: number;
|
|
919
|
+
/** Bounce restitution 0-1. Default 0.4 */
|
|
920
|
+
restitution?: number;
|
|
921
|
+
/** Body friction. Default 0.3 */
|
|
922
|
+
friction?: number;
|
|
923
|
+
/** Radius of each icon circle body in px. Default 20 */
|
|
924
|
+
iconSize?: number;
|
|
925
|
+
/** Whether items are draggable. Default false */
|
|
926
|
+
interactive?: boolean;
|
|
927
|
+
className?: string;
|
|
928
|
+
};
|
|
929
|
+
export { GravityBinProps }
|
|
930
|
+
export { GravityBinProps as GravityBinProps_alias_1 }
|
|
931
|
+
|
|
932
|
+
/**
|
|
933
|
+
* Returns true if <SegmentedProgress /> will render visible progress UI
|
|
934
|
+
* for the given step. Keep in sync with the render logic below — used by
|
|
935
|
+
* JourneyShell to decide whether to reserve header space at all.
|
|
936
|
+
*/
|
|
937
|
+
declare function hasVisibleProgress(config: JourneyConfig, currentStepIndex: number): boolean;
|
|
938
|
+
export { hasVisibleProgress }
|
|
939
|
+
export { hasVisibleProgress as hasVisibleProgress_alias_1 }
|
|
940
|
+
|
|
941
|
+
export declare function HeadingBlock({ text, segments, level, fontSize, fontFamily, fontStyle, fontWeight, lineHeight, color, gradient, textAlign, className, }: HeadingBlockProps): JSX.Element;
|
|
942
|
+
|
|
943
|
+
declare type HeadingBlockProps = {
|
|
944
|
+
text?: string;
|
|
945
|
+
segments?: TextSegment[];
|
|
946
|
+
level?: "h1" | "h2" | "h3";
|
|
947
|
+
fontSize?: string;
|
|
948
|
+
fontFamily?: string;
|
|
949
|
+
fontStyle?: "normal" | "italic";
|
|
950
|
+
fontWeight?: string | number;
|
|
951
|
+
lineHeight?: string | number;
|
|
952
|
+
color?: string;
|
|
953
|
+
gradient?: GradientValue;
|
|
954
|
+
textAlign?: "left" | "center" | "right";
|
|
955
|
+
className?: string;
|
|
956
|
+
};
|
|
957
|
+
export { HeadingBlockProps }
|
|
958
|
+
export { HeadingBlockProps as HeadingBlockProps_alias_1 }
|
|
959
|
+
|
|
960
|
+
export declare function IconBlock({ name, size, color, gradient, className, }: IconBlockProps): JSX.Element;
|
|
961
|
+
|
|
962
|
+
declare type IconBlockProps = {
|
|
963
|
+
name: string;
|
|
964
|
+
size?: number;
|
|
965
|
+
color?: string;
|
|
966
|
+
gradient?: {
|
|
967
|
+
from: string;
|
|
968
|
+
to: string;
|
|
969
|
+
};
|
|
970
|
+
className?: string;
|
|
971
|
+
};
|
|
972
|
+
export { IconBlockProps }
|
|
973
|
+
export { IconBlockProps as IconBlockProps_alias_1 }
|
|
974
|
+
|
|
975
|
+
export declare function ImageBlock({ src, alt, width, height, className }: ImageBlockProps): JSX.Element;
|
|
976
|
+
|
|
977
|
+
declare type ImageBlockProps = {
|
|
978
|
+
src: string;
|
|
979
|
+
alt?: string;
|
|
980
|
+
width?: string;
|
|
981
|
+
height?: string;
|
|
982
|
+
className?: string;
|
|
983
|
+
};
|
|
984
|
+
export { ImageBlockProps }
|
|
985
|
+
export { ImageBlockProps as ImageBlockProps_alias_1 }
|
|
986
|
+
|
|
987
|
+
export declare function InfoPageStep({ config, onNext, isLastStep, }: StepComponentProps): JSX.Element | null;
|
|
988
|
+
|
|
989
|
+
export declare function Input({ className, type, ...props }: React_2.ComponentProps<"input">): React_2.JSX.Element;
|
|
990
|
+
|
|
991
|
+
export declare function InputStep({ config, answer, onAnswer, onNext, }: StepComponentProps): JSX.Element;
|
|
992
|
+
|
|
993
|
+
export declare function isAppliedDiscountAnswer(answer: StepAnswer | undefined): answer is AppliedDiscountAnswer;
|
|
994
|
+
|
|
995
|
+
/** True when an answer is the flattened plan object (vs legacy string id or unset). */
|
|
996
|
+
export declare function isSelectedPlanAnswer(answer: StepAnswer | undefined): answer is SelectedPlanAnswer;
|
|
997
|
+
|
|
998
|
+
declare function Journey({ apiKey, journeyId, config, baseUrl, storageKey, onEvent, className, theme, initialAnswers, initialOptions, onDiscountCodeApply, loadingComponent, errorComponent, capture, }: JourneyProps): JSX.Element;
|
|
999
|
+
export { Journey }
|
|
1000
|
+
export { Journey as Journey_alias_1 }
|
|
1001
|
+
|
|
1002
|
+
declare type JourneyActions = {
|
|
1003
|
+
goNext: (answer?: StepAnswer) => void;
|
|
1004
|
+
goBack: () => void;
|
|
1005
|
+
goToStep: (stepId: string) => void;
|
|
1006
|
+
setAnswer: (stepId: string, answer: StepAnswer) => void;
|
|
1007
|
+
getCurrentStep: () => StepConfig;
|
|
1008
|
+
getStepAnswer: (stepId: string) => StepAnswer | undefined;
|
|
1009
|
+
isFirstStep: () => boolean;
|
|
1010
|
+
isLastStep: () => boolean;
|
|
1011
|
+
/** Fires a purchase_intent event without auto-navigating. Consumer takes over for payment,
|
|
1012
|
+
* then calls goNext/goToStep when ready. */
|
|
1013
|
+
firePurchaseIntent: (variable: string, plan: PricingPlan, discount?: AppliedDiscountAnswer) => void;
|
|
1014
|
+
openDiscountCodeDialog: (state: DiscountCodeDialogState) => void;
|
|
1015
|
+
};
|
|
1016
|
+
|
|
1017
|
+
declare type JourneyAnswers = Record<string, StepAnswer>;
|
|
1018
|
+
export { JourneyAnswers }
|
|
1019
|
+
export { JourneyAnswers as JourneyAnswers_alias_1 }
|
|
1020
|
+
|
|
1021
|
+
declare type JourneyCaptureConfig = JourneyCaptureOptions & {
|
|
1022
|
+
apiKey: string;
|
|
1023
|
+
journeyId: string;
|
|
1024
|
+
baseUrl: string;
|
|
1025
|
+
};
|
|
1026
|
+
|
|
1027
|
+
export declare type JourneyCaptureOption = false | JourneyCaptureConfig;
|
|
1028
|
+
|
|
1029
|
+
declare type JourneyCaptureOptions = {
|
|
1030
|
+
context?: Record<string, unknown>;
|
|
1031
|
+
contextFactory?: () => Record<string, unknown> | null | undefined;
|
|
1032
|
+
captureContext?: boolean;
|
|
1033
|
+
redactUrlParams?: true | string[];
|
|
1034
|
+
batchSize?: number;
|
|
1035
|
+
flushIntervalMs?: number;
|
|
1036
|
+
maxRetries?: number;
|
|
1037
|
+
};
|
|
1038
|
+
export { JourneyCaptureOptions }
|
|
1039
|
+
export { JourneyCaptureOptions as JourneyCaptureOptions_alias_1 }
|
|
1040
|
+
|
|
1041
|
+
declare type JourneyConfig = {
|
|
1042
|
+
arcs: Arc[];
|
|
1043
|
+
steps: StepConfig[];
|
|
1044
|
+
computedVariables?: ComputedVariable[];
|
|
1045
|
+
/** Split the header progress bar into arc segments. Defaults to true. */
|
|
1046
|
+
splitProgressByArcs?: boolean;
|
|
1047
|
+
/** Show past and future arc segments. When false, only the current arc is shown. Defaults to true. */
|
|
1048
|
+
showAllProgressArcs?: boolean;
|
|
1049
|
+
/** Show arc progress segments that have no steps counted for progress. Defaults to false. */
|
|
1050
|
+
showEmptyProgressArcs?: boolean;
|
|
1051
|
+
/** Allow users to navigate backward through the journey. Defaults to true. */
|
|
1052
|
+
allowBackNavigation?: boolean;
|
|
1053
|
+
/** Show autogenerated background blobs for steps that do not define blobs explicitly. Defaults to true. */
|
|
1054
|
+
showRandomBlobs?: boolean;
|
|
1055
|
+
/** CSS class(es) applied to the journey root, e.g. "dark jy-dark-gold" or "jy-light jy-light-gold" */
|
|
1056
|
+
theme?: string;
|
|
1057
|
+
/** CSS variable overrides applied as inline styles on the journey root, e.g. { "--primary": "oklch(0.7 0.15 250)" } */
|
|
1058
|
+
themeVariables?: Record<string, string>;
|
|
1059
|
+
/** Background pattern overlay. Defaults to "grid-dots". */
|
|
1060
|
+
backgroundPattern?: "none" | "grid-dots" | "grid-lines";
|
|
1061
|
+
/** Default max-width for blocks on every page (centers them via `margin-inline: auto`).
|
|
1062
|
+
* Numbers are interpreted as px; strings are passed through as CSS. Individual blocks can
|
|
1063
|
+
* override or opt out via their own `maxWidth` (set to `"none"` to disable). When unset,
|
|
1064
|
+
* blocks fill the page width — except `timeline` and `notification_stack`, which default
|
|
1065
|
+
* to 400px because they read poorly when stretched. */
|
|
1066
|
+
contentMaxWidth?: number | string;
|
|
1067
|
+
};
|
|
1068
|
+
export { JourneyConfig }
|
|
1069
|
+
export { JourneyConfig as JourneyConfig_alias_1 }
|
|
1070
|
+
|
|
1071
|
+
declare const JourneyContext: Context<JourneyContextValue | null>;
|
|
1072
|
+
export { JourneyContext }
|
|
1073
|
+
export { JourneyContext as JourneyContext_alias_1 }
|
|
1074
|
+
|
|
1075
|
+
declare type JourneyContextValue = {
|
|
1076
|
+
state: JourneyState;
|
|
1077
|
+
actions: JourneyActions;
|
|
1078
|
+
};
|
|
1079
|
+
|
|
1080
|
+
declare type JourneyEvent = {
|
|
1081
|
+
type: "session_start";
|
|
1082
|
+
step: StepConfig;
|
|
1083
|
+
answers: JourneyAnswers;
|
|
1084
|
+
computedVariables: JourneyEventComputedVariables;
|
|
1085
|
+
variables: string[];
|
|
1086
|
+
} | {
|
|
1087
|
+
type: "step_view";
|
|
1088
|
+
step: StepConfig;
|
|
1089
|
+
answers: JourneyAnswers;
|
|
1090
|
+
computedVariables: JourneyEventComputedVariables;
|
|
1091
|
+
variables: string[];
|
|
1092
|
+
} | {
|
|
1093
|
+
type: "step_submit";
|
|
1094
|
+
step: StepConfig;
|
|
1095
|
+
submitted: {
|
|
1096
|
+
variable: string;
|
|
1097
|
+
value: StepAnswer | undefined;
|
|
1098
|
+
};
|
|
1099
|
+
answers: JourneyAnswers;
|
|
1100
|
+
computedVariables: JourneyEventComputedVariables;
|
|
1101
|
+
variables: string[];
|
|
1102
|
+
} | {
|
|
1103
|
+
type: "navigate";
|
|
1104
|
+
from: StepConfig;
|
|
1105
|
+
to: StepConfig;
|
|
1106
|
+
direction: NavigationDirection;
|
|
1107
|
+
answers: JourneyAnswers;
|
|
1108
|
+
computedVariables: JourneyEventComputedVariables;
|
|
1109
|
+
} | {
|
|
1110
|
+
type: "complete";
|
|
1111
|
+
answers: JourneyAnswers;
|
|
1112
|
+
computedVariables: JourneyEventComputedVariables;
|
|
1113
|
+
variables: string[];
|
|
1114
|
+
} | {
|
|
1115
|
+
/** Fired when the user clicks a button with action.type === "purchase".
|
|
1116
|
+
* Does NOT auto-navigate — the consumer takes over for payment, then calls
|
|
1117
|
+
* navigation actions (goNext/goToStep) from useJourneyActions(). */
|
|
1118
|
+
type: "purchase_intent";
|
|
1119
|
+
variable: string;
|
|
1120
|
+
plan: PricingPlan;
|
|
1121
|
+
discount?: AppliedDiscountAnswer;
|
|
1122
|
+
stepId: string;
|
|
1123
|
+
answers: JourneyAnswers;
|
|
1124
|
+
computedVariables: JourneyEventComputedVariables;
|
|
1125
|
+
};
|
|
1126
|
+
export { JourneyEvent }
|
|
1127
|
+
export { JourneyEvent as JourneyEvent_alias_1 }
|
|
1128
|
+
|
|
1129
|
+
declare type JourneyEventComputedVariables = JourneyAnswers;
|
|
1130
|
+
export { JourneyEventComputedVariables }
|
|
1131
|
+
export { JourneyEventComputedVariables as JourneyEventComputedVariables_alias_1 }
|
|
1132
|
+
|
|
1133
|
+
declare type JourneyOptionOverrides = Record<string, StepOption[]>;
|
|
1134
|
+
export { JourneyOptionOverrides }
|
|
1135
|
+
export { JourneyOptionOverrides as JourneyOptionOverrides_alias_1 }
|
|
1136
|
+
|
|
1137
|
+
declare type JourneyProps = {
|
|
1138
|
+
apiKey: string;
|
|
1139
|
+
journeyId: string;
|
|
1140
|
+
/** Optional local config. Access is still validated with apiKey + journeyId before render. */
|
|
1141
|
+
config?: JourneyConfig;
|
|
1142
|
+
/** Local testing override only. Non-local values fall back to https://getfounderhq.com. */
|
|
1143
|
+
baseUrl?: string;
|
|
1144
|
+
storageKey?: string;
|
|
1145
|
+
onEvent?: (event: JourneyEvent) => void;
|
|
1146
|
+
/** Capture Journey events/responses to FounderHQ by default; pass false to opt out. */
|
|
1147
|
+
capture?: false | JourneyCaptureOptions;
|
|
1148
|
+
className?: string;
|
|
1149
|
+
/** CSS class(es) for the journey root, e.g. "dark jy-dark-gold" or "jy-light jy-light-gold". Overrides config.theme when set. */
|
|
1150
|
+
theme?: string;
|
|
1151
|
+
/** Seed answers available at first render. Useful for runtime-injected data (e.g. live pricing plans referenced via `"${pricingPlans}"` templates). Keys declared in `computedVariables` are ignored because formulas own those values. */
|
|
1152
|
+
initialAnswers?: JourneyAnswers;
|
|
1153
|
+
/** Runtime option lists keyed by answer key (`step.variable ?? step.id`, or select block `props.variable`). Values override inspector-configured options for rendering only. */
|
|
1154
|
+
initialOptions?: JourneyOptionOverrides;
|
|
1155
|
+
/** Consumer-owned discount validation/repricing callback. Journeys only handles UI/state. */
|
|
1156
|
+
onDiscountCodeApply?: (request: DiscountCodeApplyRequest) => Promise<DiscountCodeApplyResult> | DiscountCodeApplyResult;
|
|
1157
|
+
/** Custom loading component shown while fetching config */
|
|
1158
|
+
loadingComponent?: ReactNode;
|
|
1159
|
+
/** Custom error component shown on fetch failure */
|
|
1160
|
+
errorComponent?: (error: Error) => ReactNode;
|
|
1161
|
+
};
|
|
1162
|
+
export { JourneyProps }
|
|
1163
|
+
export { JourneyProps as JourneyProps_alias_1 }
|
|
1164
|
+
|
|
1165
|
+
declare function JourneyProvider({ config: rawConfig, storageKey, theme, onEvent, initialAnswers, initialOptions, onDiscountCodeApply, children, }: JourneyProviderProps): JSX.Element;
|
|
1166
|
+
export { JourneyProvider }
|
|
1167
|
+
export { JourneyProvider as JourneyProvider_alias_1 }
|
|
1168
|
+
|
|
1169
|
+
declare type JourneyProviderProps = {
|
|
1170
|
+
config: JourneyConfig;
|
|
1171
|
+
storageKey?: string;
|
|
1172
|
+
/** Theme class override applied to the provider scope so global UI like dialogs inherits journey tokens. */
|
|
1173
|
+
theme?: string;
|
|
1174
|
+
onEvent?: (event: JourneyEvent) => void;
|
|
1175
|
+
/** Runtime-injected answers that override persisted (sessionStorage) values *for keys that
|
|
1176
|
+
* appear in `initialAnswers`*. Other persisted keys (e.g. the user's in-progress selections)
|
|
1177
|
+
* are preserved across reloads.
|
|
1178
|
+
* Use this for dynamic data the consumer fetched at startup, e.g. pricing plans resolved
|
|
1179
|
+
* from StoreKit/Play Billing/Stripe: `{ pricingPlans: [...] }`. Keys declared in
|
|
1180
|
+
* `computedVariables` are ignored here because formulas own those values. Refreshed prices
|
|
1181
|
+
* always win over a stale snapshot in storage. */
|
|
1182
|
+
initialAnswers?: JourneyAnswers;
|
|
1183
|
+
/** Runtime option lists keyed by answer key (`step.variable ?? step.id`, or select block
|
|
1184
|
+
* `props.variable`). These override editor-configured options in the rendered journey only;
|
|
1185
|
+
* they are not persisted in answers. Event step configs omit option arrays. */
|
|
1186
|
+
initialOptions?: JourneyOptionOverrides;
|
|
1187
|
+
/** Consumer-owned discount validation/repricing callback. Journeys only handles UI/state. */
|
|
1188
|
+
onDiscountCodeApply?: (request: DiscountCodeApplyRequest) => Promise<DiscountCodeApplyResult> | DiscountCodeApplyResult;
|
|
1189
|
+
children: ReactNode;
|
|
1190
|
+
};
|
|
1191
|
+
export { JourneyProviderProps }
|
|
1192
|
+
export { JourneyProviderProps as JourneyProviderProps_alias_1 }
|
|
1193
|
+
|
|
1194
|
+
declare function JourneyShell({ className, theme }?: {
|
|
1195
|
+
className?: string;
|
|
1196
|
+
theme?: string;
|
|
1197
|
+
}): JSX.Element;
|
|
1198
|
+
export { JourneyShell }
|
|
1199
|
+
export { JourneyShell as JourneyShell_alias_1 }
|
|
1200
|
+
|
|
1201
|
+
declare type JourneyState = {
|
|
1202
|
+
config: JourneyConfig;
|
|
1203
|
+
currentStepIndex: number;
|
|
1204
|
+
answers: JourneyAnswers;
|
|
1205
|
+
direction: NavigationDirection;
|
|
1206
|
+
};
|
|
1207
|
+
|
|
1208
|
+
export declare function LineChartBlock({ lines, width, height, yLabelGutter, yLabels, xLabels, animationDuration, startDelay, showGrid, axisColor, labelColor, className, }: LineChartBlockProps): JSX.Element;
|
|
1209
|
+
|
|
1210
|
+
declare type LineChartBlockProps = {
|
|
1211
|
+
lines: ChartLine[];
|
|
1212
|
+
width?: number | string;
|
|
1213
|
+
height?: number | string;
|
|
1214
|
+
yLabelGutter?: number;
|
|
1215
|
+
yLabels?: {
|
|
1216
|
+
top?: string;
|
|
1217
|
+
bottom?: string;
|
|
1218
|
+
topAt?: number;
|
|
1219
|
+
bottomAt?: number;
|
|
1220
|
+
};
|
|
1221
|
+
xLabels?: {
|
|
1222
|
+
left?: string;
|
|
1223
|
+
right?: string;
|
|
1224
|
+
leftAt?: number;
|
|
1225
|
+
rightAt?: number;
|
|
1226
|
+
};
|
|
1227
|
+
animationDuration?: number;
|
|
1228
|
+
startDelay?: number;
|
|
1229
|
+
showGrid?: boolean;
|
|
1230
|
+
axisColor?: string;
|
|
1231
|
+
labelColor?: string;
|
|
1232
|
+
className?: string;
|
|
1233
|
+
};
|
|
1234
|
+
export { LineChartBlockProps }
|
|
1235
|
+
export { LineChartBlockProps as LineChartBlockProps_alias_1 }
|
|
1236
|
+
|
|
1237
|
+
export declare function ListBlock({ items, style, className, }: ListBlockProps): JSX.Element;
|
|
1238
|
+
|
|
1239
|
+
declare type ListBlockProps = {
|
|
1240
|
+
items: string[];
|
|
1241
|
+
style?: "bullet" | "numbered" | "check";
|
|
1242
|
+
className?: string;
|
|
1243
|
+
};
|
|
1244
|
+
export { ListBlockProps }
|
|
1245
|
+
export { ListBlockProps as ListBlockProps_alias_1 }
|
|
1246
|
+
|
|
1247
|
+
export declare function LottieBlock({ src, autoplay, loop, speed, width, height, className, }: LottieBlockProps): JSX.Element;
|
|
1248
|
+
|
|
1249
|
+
declare type LottieBlockProps = {
|
|
1250
|
+
src: string;
|
|
1251
|
+
autoplay?: boolean;
|
|
1252
|
+
loop?: boolean;
|
|
1253
|
+
speed?: number;
|
|
1254
|
+
width?: string;
|
|
1255
|
+
height?: string;
|
|
1256
|
+
className?: string;
|
|
1257
|
+
};
|
|
1258
|
+
export { LottieBlockProps }
|
|
1259
|
+
export { LottieBlockProps as LottieBlockProps_alias_1 }
|
|
1260
|
+
|
|
1261
|
+
export declare function LucideStrokeGradient({ id, from, to, }: {
|
|
1262
|
+
id: string;
|
|
1263
|
+
from: string;
|
|
1264
|
+
to: string;
|
|
1265
|
+
}): JSX.Element;
|
|
1266
|
+
|
|
1267
|
+
declare type MediaSlide = {
|
|
1268
|
+
type?: "media";
|
|
1269
|
+
image?: string;
|
|
1270
|
+
title?: string;
|
|
1271
|
+
description?: string;
|
|
1272
|
+
};
|
|
1273
|
+
export { MediaSlide }
|
|
1274
|
+
export { MediaSlide as MediaSlide_alias_1 }
|
|
1275
|
+
|
|
1276
|
+
export declare function MetricBlock({ value, prefix, suffix, label, description, icon, iconPosition, color, gradient, accentColor, variant, compact, duration, decimals, startDelay, className, }: MetricBlockProps): JSX.Element;
|
|
1277
|
+
|
|
1278
|
+
declare type MetricBlockProps = {
|
|
1279
|
+
value: number | string;
|
|
1280
|
+
prefix?: string;
|
|
1281
|
+
suffix?: string;
|
|
1282
|
+
label: string;
|
|
1283
|
+
description?: string;
|
|
1284
|
+
icon?: string;
|
|
1285
|
+
iconPosition?: "top" | "left" | "left-inline";
|
|
1286
|
+
color?: string;
|
|
1287
|
+
gradient?: GradientValue;
|
|
1288
|
+
accentColor?: string;
|
|
1289
|
+
variant?: MetricVariant;
|
|
1290
|
+
/** Compact/dense mode — smaller padding, font sizes, and icon. Designed for tight vertical stacks or side-by-side tiles in columns. */
|
|
1291
|
+
compact?: boolean;
|
|
1292
|
+
duration?: number;
|
|
1293
|
+
decimals?: number;
|
|
1294
|
+
startDelay?: number;
|
|
1295
|
+
className?: string;
|
|
1296
|
+
};
|
|
1297
|
+
export { MetricBlockProps }
|
|
1298
|
+
export { MetricBlockProps as MetricBlockProps_alias_1 }
|
|
1299
|
+
|
|
1300
|
+
declare type MetricVariant = "card" | "inline" | "minimal";
|
|
1301
|
+
export { MetricVariant }
|
|
1302
|
+
export { MetricVariant as MetricVariant_alias_1 }
|
|
1303
|
+
|
|
1304
|
+
export declare function MultiSelectBlock({ variable, options, layout, iconIndicator, style, maxSelections, }: MultiSelectBlockProps): JSX.Element;
|
|
1305
|
+
|
|
1306
|
+
declare type MultiSelectBlockProps = {
|
|
1307
|
+
/** Variable name in `answers` that the user's picks are written to. Required. */
|
|
1308
|
+
variable: string;
|
|
1309
|
+
options: StepOption[];
|
|
1310
|
+
/** Top-level shortcut. Wins over `style.layout`. */
|
|
1311
|
+
layout?: "list" | "grid";
|
|
1312
|
+
/** Top-level shortcut. Wins over `style.iconIndicator`. Required when options carry icons. */
|
|
1313
|
+
iconIndicator?: boolean;
|
|
1314
|
+
/** Finer styling (colors, hover/selected backgrounds, border radius). */
|
|
1315
|
+
style?: WidgetStyle;
|
|
1316
|
+
/** Hard cap; selecting beyond it replaces the most-recent pick. */
|
|
1317
|
+
maxSelections?: number;
|
|
1318
|
+
/** Minimum picks required before sibling next/skip buttons enable. */
|
|
1319
|
+
minSelections?: number;
|
|
1320
|
+
};
|
|
1321
|
+
export { MultiSelectBlockProps }
|
|
1322
|
+
export { MultiSelectBlockProps as MultiSelectBlockProps_alias_1 }
|
|
1323
|
+
|
|
1324
|
+
export declare function MultiSelectStep({ config, answer, onAnswer, onNext, }: StepComponentProps): JSX.Element;
|
|
1325
|
+
|
|
1326
|
+
export declare function MultiSelectWidget({ options, value, onChange, style, maxSelections, inspectPathPrefix, scrollable, }: MultiSelectWidgetProps): JSX.Element;
|
|
1327
|
+
|
|
1328
|
+
export declare type MultiSelectWidgetProps = {
|
|
1329
|
+
options: StepOption[];
|
|
1330
|
+
value: string[];
|
|
1331
|
+
onChange: (next: string[]) => void;
|
|
1332
|
+
style?: WidgetStyle;
|
|
1333
|
+
/** Hard cap on selections — when reached, selecting a new option replaces the most recent. */
|
|
1334
|
+
maxSelections?: number;
|
|
1335
|
+
/** Prefix used for `data-inspect-path` on each rendered option. */
|
|
1336
|
+
inspectPathPrefix?: string;
|
|
1337
|
+
scrollable?: boolean;
|
|
1338
|
+
};
|
|
1339
|
+
|
|
1340
|
+
declare type NavigationDirection = "forward" | "backward";
|
|
1341
|
+
export { NavigationDirection }
|
|
1342
|
+
export { NavigationDirection as NavigationDirection_alias_1 }
|
|
1343
|
+
|
|
1344
|
+
/**
|
|
1345
|
+
* Reorder config.steps to match the navigation order defined by arcs.
|
|
1346
|
+
* Steps not in any arc are appended at the end.
|
|
1347
|
+
*/
|
|
1348
|
+
declare function normalizeStepOrder(config: JourneyConfig): JourneyConfig;
|
|
1349
|
+
export { normalizeStepOrder }
|
|
1350
|
+
export { normalizeStepOrder as normalizeStepOrder_alias_1 }
|
|
1351
|
+
|
|
1352
|
+
declare type NotificationColor = "none" | "white" | "black" | "orange" | "indigo" | "green" | "sunset" | "blue" | "purple";
|
|
1353
|
+
export { NotificationColor }
|
|
1354
|
+
export { NotificationColor as NotificationColor_alias_1 }
|
|
1355
|
+
|
|
1356
|
+
declare type NotificationItem = {
|
|
1357
|
+
title: string;
|
|
1358
|
+
message: string;
|
|
1359
|
+
icon?: string;
|
|
1360
|
+
time?: string;
|
|
1361
|
+
color?: NotificationColor;
|
|
1362
|
+
};
|
|
1363
|
+
export { NotificationItem }
|
|
1364
|
+
export { NotificationItem as NotificationItem_alias_1 }
|
|
1365
|
+
|
|
1366
|
+
export declare function NotificationStackBlock({ notifications, staggerDelay, className, }: NotificationStackBlockProps): JSX.Element;
|
|
1367
|
+
|
|
1368
|
+
declare type NotificationStackBlockProps = {
|
|
1369
|
+
notifications: NotificationItem[];
|
|
1370
|
+
staggerDelay?: number;
|
|
1371
|
+
className?: string;
|
|
1372
|
+
};
|
|
1373
|
+
export { NotificationStackBlockProps }
|
|
1374
|
+
export { NotificationStackBlockProps as NotificationStackBlockProps_alias_1 }
|
|
1375
|
+
|
|
1376
|
+
export declare function OptionIcon({ icon, className, style, }: {
|
|
1377
|
+
icon?: string;
|
|
1378
|
+
className?: string;
|
|
1379
|
+
style?: React.CSSProperties;
|
|
1380
|
+
}): JSX.Element | null;
|
|
1381
|
+
|
|
1382
|
+
declare type PageLayout = {
|
|
1383
|
+
/** Flex align-items. Defaults to "center" */
|
|
1384
|
+
align?: "start" | "center" | "end" | "stretch";
|
|
1385
|
+
/** Flex justify-content. Defaults to "center" */
|
|
1386
|
+
justify?: "start" | "center" | "end" | "between" | "around";
|
|
1387
|
+
/** Gap in rem units. Defaults to 2 */
|
|
1388
|
+
gap?: number;
|
|
1389
|
+
/** Flex direction. Defaults to "col" */
|
|
1390
|
+
direction?: "col" | "row";
|
|
1391
|
+
/** Text alignment. Defaults to "center" */
|
|
1392
|
+
textAlign?: "left" | "center" | "right";
|
|
1393
|
+
/** Max width CSS value. Defaults to none */
|
|
1394
|
+
maxWidth?: string;
|
|
1395
|
+
/** Extra Tailwind className on the page wrapper */
|
|
1396
|
+
className?: string;
|
|
1397
|
+
};
|
|
1398
|
+
export { PageLayout }
|
|
1399
|
+
export { PageLayout as PageLayout_alias_1 }
|
|
1400
|
+
|
|
1401
|
+
/**
|
|
1402
|
+
* Converts a lightweight markdown string into TextSegment[].
|
|
1403
|
+
*
|
|
1404
|
+
* Supported syntax:
|
|
1405
|
+
* **bold** → fontWeight: "bold"
|
|
1406
|
+
* *italic* → fontStyle: "italic"
|
|
1407
|
+
* ~~strikethrough~~ → className: "line-through"
|
|
1408
|
+
* {#f87171} → color (suffix after any closing marker)
|
|
1409
|
+
*
|
|
1410
|
+
* Examples:
|
|
1411
|
+
* "This is **bold** text"
|
|
1412
|
+
* "A *colored*{#f87171} word"
|
|
1413
|
+
* "~~old~~ vs **new**{#4ade80}"
|
|
1414
|
+
*
|
|
1415
|
+
* No nesting. Unmatched markers are literal text.
|
|
1416
|
+
*/
|
|
1417
|
+
export declare function parseMarkdown(input: string): TextSegment[];
|
|
1418
|
+
|
|
1419
|
+
declare type PauseScrollTimelineEvent = ScrollTimelineEventBase & {
|
|
1420
|
+
action: "pause_scroll";
|
|
1421
|
+
};
|
|
1422
|
+
export { PauseScrollTimelineEvent }
|
|
1423
|
+
export { PauseScrollTimelineEvent as PauseScrollTimelineEvent_alias_1 }
|
|
1424
|
+
|
|
1425
|
+
declare type PricingPlan = {
|
|
1426
|
+
/** String fields anywhere inside a plan support templates. `currentPlan` exposes this card's
|
|
1427
|
+
* flattened price/plan fields (`id`, `name`, `amount`, `currency`, `period`, `trialDays`, ...);
|
|
1428
|
+
* other answers from the journey are available as their own keys. */
|
|
1429
|
+
/** Stable id. Stored in answers[variable] when selected; consumer maps id → payment-provider price ID. */
|
|
1430
|
+
id: string;
|
|
1431
|
+
/** Display name, e.g. "Pro", "Monthly", "Annual". */
|
|
1432
|
+
name: string;
|
|
1433
|
+
price: {
|
|
1434
|
+
/** Numeric amount. Used for math/sorting and Intl currency formatting when `display` is unset. */
|
|
1435
|
+
amount: number;
|
|
1436
|
+
/** ISO 4217 currency code, e.g. "USD", "EUR", "GBP". */
|
|
1437
|
+
currency: string;
|
|
1438
|
+
/** Subscription period. Defaults to one-time when omitted. */
|
|
1439
|
+
period?: PricingPlanPeriod;
|
|
1440
|
+
/** Strikethrough original price, same currency. Only rendered when `display` is unset. */
|
|
1441
|
+
originalAmount?: number;
|
|
1442
|
+
/** Override the default period suffix ("/mo", "/yr", etc.) with custom text like "/seat/mo". */
|
|
1443
|
+
perUnitLabel?: string;
|
|
1444
|
+
/** Verbatim price string. When set, this is rendered as-is and Intl/period/originalAmount are skipped.
|
|
1445
|
+
* Use for store-localized strings (StoreKit/Play Billing already format) or special cases ("Free", "Custom"). */
|
|
1446
|
+
display?: string;
|
|
1447
|
+
/** Free trial period (StoreKit-compatible). Exposed as `currentPlan.trialDays` in plan templates. */
|
|
1448
|
+
trial?: {
|
|
1449
|
+
days: number;
|
|
1450
|
+
};
|
|
1451
|
+
/** Introductory pricing (StoreKit-compatible). Exposed as `currentPlan.introOffer` in plan templates. */
|
|
1452
|
+
introOffer?: {
|
|
1453
|
+
amount: number;
|
|
1454
|
+
periods: number;
|
|
1455
|
+
periodUnit: "day" | "week" | "month";
|
|
1456
|
+
};
|
|
1457
|
+
};
|
|
1458
|
+
description?: string;
|
|
1459
|
+
/** Small line rendered under the price. Example: `"${currentPlan.trialDays} days free"`.
|
|
1460
|
+
* Replaces the previously auto-derived
|
|
1461
|
+
* trial / intro-offer subtext — those are no longer rendered automatically. */
|
|
1462
|
+
subtext?: string;
|
|
1463
|
+
features?: PricingPlanFeature[];
|
|
1464
|
+
/** Floating tag above the card, e.g. "7 Days Free", "Most Popular". */
|
|
1465
|
+
badge?: string;
|
|
1466
|
+
/** Lucide icon name; rendered via OptionIcon. */
|
|
1467
|
+
icon?: string;
|
|
1468
|
+
/** Optional visibility gate, evaluated against current answers. Reuses BlockCondition. */
|
|
1469
|
+
condition?: BlockCondition;
|
|
1470
|
+
/** Opaque pass-through for consumer use (Stripe price ID, RevenueCat package, App Store / Play Store
|
|
1471
|
+
* product ID, internal SKUs). The block reads nothing from this — it flows through the
|
|
1472
|
+
* purchase_intent event for the consumer's payment service. */
|
|
1473
|
+
metadata?: Record<string, unknown>;
|
|
1474
|
+
};
|
|
1475
|
+
export { PricingPlan }
|
|
1476
|
+
export { PricingPlan as PricingPlan_alias_1 }
|
|
1477
|
+
|
|
1478
|
+
/** A single feature row in a plan. Strings render as a checkmarked bullet in featured/minimal,
|
|
1479
|
+
* and as a ✓ in the comparison style. Object form `{ key, value }` lets the comparison style
|
|
1480
|
+
* group rows by `key` and show different `value`s per plan (e.g. "Storage: 10GB" vs "100GB"). */
|
|
1481
|
+
declare type PricingPlanFeature = string | {
|
|
1482
|
+
key: string;
|
|
1483
|
+
value: string | boolean;
|
|
1484
|
+
};
|
|
1485
|
+
export { PricingPlanFeature }
|
|
1486
|
+
export { PricingPlanFeature as PricingPlanFeature_alias_1 }
|
|
1487
|
+
|
|
1488
|
+
declare type PricingPlanPeriod = "day" | "week" | "month" | "year" | "one_time";
|
|
1489
|
+
export { PricingPlanPeriod }
|
|
1490
|
+
export { PricingPlanPeriod as PricingPlanPeriod_alias_1 }
|
|
1491
|
+
|
|
1492
|
+
export declare function PricingPlansBlock({ variable, plans, cardStyle, layout, style, defaultPlanId, discountVariable, showDecimals, }: PricingPlansBlockProps): JSX.Element;
|
|
1493
|
+
|
|
1494
|
+
declare type PricingPlansBlockProps = {
|
|
1495
|
+
/** Variable name in `answers` where the selected plan id is written. Required. */
|
|
1496
|
+
variable: string;
|
|
1497
|
+
/** Plan list, or a whole-value template string like `"${pricingPlans}"` that resolves to one
|
|
1498
|
+
* at render time (used for dynamic StoreKit/Stripe pricing fed in via `answers`). */
|
|
1499
|
+
plans: PricingPlan[] | string;
|
|
1500
|
+
/** Card visual style. Defaults to "featured". */
|
|
1501
|
+
cardStyle?: "featured" | "minimal" | "comparison";
|
|
1502
|
+
/** Layout for featured/minimal. Defaults to "list". Ignored when cardStyle="comparison". */
|
|
1503
|
+
layout?: "list" | "grid";
|
|
1504
|
+
/** When true, sibling button blocks with action.type "next", "skip", or "purchase" auto-disable until a plan is selected. */
|
|
1505
|
+
required?: boolean;
|
|
1506
|
+
/** When set and no answer exists for `variable` yet, this plan id is auto-selected on mount. */
|
|
1507
|
+
defaultPlanId?: string;
|
|
1508
|
+
/** Optional answer key containing an applied discount. Used only for display; consumers own pricing math. */
|
|
1509
|
+
discountVariable?: string;
|
|
1510
|
+
/** Whether to render currency decimals (e.g. $29.00 vs $29). Defaults to true.
|
|
1511
|
+
* Set false for currencies like JPY/KRW where pricing is conventionally whole-unit. */
|
|
1512
|
+
showDecimals?: boolean;
|
|
1513
|
+
style?: PricingStyle;
|
|
1514
|
+
};
|
|
1515
|
+
export { PricingPlansBlockProps }
|
|
1516
|
+
export { PricingPlansBlockProps as PricingPlansBlockProps_alias_1 }
|
|
1517
|
+
|
|
1518
|
+
export declare function PricingPlansWidget({ plans, value, onChange, cardStyle, layout, style, showDecimals, discountVariable, answers, inspectPathPrefix, }: PricingPlansWidgetProps): JSX.Element;
|
|
1519
|
+
|
|
1520
|
+
export declare type PricingPlansWidgetProps = {
|
|
1521
|
+
/** Resolved plan list. Accepts a string for the templated config form (`"${pricingPlans}"`)
|
|
1522
|
+
* that hasn't yet been resolved — the widget treats it as empty. */
|
|
1523
|
+
plans: PricingPlan[] | string;
|
|
1524
|
+
value: string;
|
|
1525
|
+
onChange: (next: string) => void;
|
|
1526
|
+
cardStyle?: "featured" | "minimal" | "comparison";
|
|
1527
|
+
layout?: "list" | "grid";
|
|
1528
|
+
style?: PricingStyle;
|
|
1529
|
+
/** Whether to render currency decimals. Defaults to true (Intl default — usually 2 digits). */
|
|
1530
|
+
showDecimals?: boolean;
|
|
1531
|
+
/** Optional answer key containing an applied discount used for display only. */
|
|
1532
|
+
discountVariable?: string;
|
|
1533
|
+
/** Current answers, used to evaluate per-plan `condition` for visibility. */
|
|
1534
|
+
answers: JourneyAnswers;
|
|
1535
|
+
inspectPathPrefix?: string;
|
|
1536
|
+
};
|
|
1537
|
+
|
|
1538
|
+
/** Pricing-specific styling, layered on top of WidgetStyle for shared card chrome. */
|
|
1539
|
+
declare type PricingStyle = Partial<WidgetStyle> & {
|
|
1540
|
+
badgeBackground?: string;
|
|
1541
|
+
badgeColor?: string;
|
|
1542
|
+
};
|
|
1543
|
+
export { PricingStyle }
|
|
1544
|
+
export { PricingStyle as PricingStyle_alias_1 }
|
|
1545
|
+
|
|
1546
|
+
export declare function ProgressBarBlock({ value, label, color, gradient, height, animated, showPercentage, borderRadius, className, }: ProgressBarBlockProps): JSX.Element;
|
|
1547
|
+
|
|
1548
|
+
declare type ProgressBarBlockProps = {
|
|
1549
|
+
value: number | string;
|
|
1550
|
+
label?: string;
|
|
1551
|
+
color?: string;
|
|
1552
|
+
gradient?: GradientValue;
|
|
1553
|
+
height?: number;
|
|
1554
|
+
animated?: boolean;
|
|
1555
|
+
showPercentage?: boolean;
|
|
1556
|
+
borderRadius?: number;
|
|
1557
|
+
className?: string;
|
|
1558
|
+
};
|
|
1559
|
+
export { ProgressBarBlockProps }
|
|
1560
|
+
export { ProgressBarBlockProps as ProgressBarBlockProps_alias_1 }
|
|
1561
|
+
|
|
1562
|
+
declare type ProgressSegment = {
|
|
1563
|
+
to: number | string;
|
|
1564
|
+
duration: number;
|
|
1565
|
+
};
|
|
1566
|
+
export { ProgressSegment }
|
|
1567
|
+
export { ProgressSegment as ProgressSegment_alias_1 }
|
|
1568
|
+
|
|
1569
|
+
export declare function QuoteBlock({ quote, author, role, avatar, stars, className, }: QuoteBlockProps): JSX.Element;
|
|
1570
|
+
|
|
1571
|
+
declare type QuoteBlockProps = {
|
|
1572
|
+
quote: string;
|
|
1573
|
+
author: string;
|
|
1574
|
+
role?: string;
|
|
1575
|
+
avatar?: string;
|
|
1576
|
+
stars?: number;
|
|
1577
|
+
className?: string;
|
|
1578
|
+
};
|
|
1579
|
+
export { QuoteBlockProps }
|
|
1580
|
+
export { QuoteBlockProps as QuoteBlockProps_alias_1 }
|
|
1581
|
+
|
|
1582
|
+
declare type QuoteSlide = {
|
|
1583
|
+
type: "quote";
|
|
1584
|
+
quote: string;
|
|
1585
|
+
author: string;
|
|
1586
|
+
role?: string;
|
|
1587
|
+
avatar?: string;
|
|
1588
|
+
stars?: number;
|
|
1589
|
+
};
|
|
1590
|
+
export { QuoteSlide }
|
|
1591
|
+
export { QuoteSlide as QuoteSlide_alias_1 }
|
|
1592
|
+
|
|
1593
|
+
export declare function RadioGroup({ className, ...props }: React_2.ComponentProps<typeof RadioGroup_2.Root>): React_2.JSX.Element;
|
|
1594
|
+
|
|
1595
|
+
export declare function RadioGroupItem({ className, ...props }: React_2.ComponentProps<typeof RadioGroup_2.Item>): React_2.JSX.Element;
|
|
1596
|
+
|
|
1597
|
+
export declare const renderTemplate: (template: string, variables: Record<string, unknown>, fallback: string) => string;
|
|
1598
|
+
|
|
1599
|
+
/**
|
|
1600
|
+
* Evaluates all computed variable expressions against the current answers.
|
|
1601
|
+
* Returns a new answers object with computed values merged in.
|
|
1602
|
+
*/
|
|
1603
|
+
declare function resolveComputedVariables(computedVariables: ComputedVariable[] | undefined, answers: JourneyAnswers): JourneyAnswers;
|
|
1604
|
+
export { resolveComputedVariables }
|
|
1605
|
+
export { resolveComputedVariables as resolveComputedVariables_alias_1 }
|
|
1606
|
+
|
|
1607
|
+
/**
|
|
1608
|
+
* Evaluates all computed variable expressions against the current answers.
|
|
1609
|
+
* Returns only the computed values.
|
|
1610
|
+
* Computed variable ids are formula-owned; if a raw answer has the same key,
|
|
1611
|
+
* the computed value wins in the merged result.
|
|
1612
|
+
*
|
|
1613
|
+
* Variables are evaluated in order so later ones can reference earlier ones.
|
|
1614
|
+
*/
|
|
1615
|
+
declare function resolveComputedVariableValues(computedVariables: ComputedVariable[] | undefined, answers: JourneyAnswers): JourneyAnswers;
|
|
1616
|
+
export { resolveComputedVariableValues }
|
|
1617
|
+
export { resolveComputedVariableValues as resolveComputedVariableValues_alias_1 }
|
|
1618
|
+
|
|
1619
|
+
export declare function resolveGradient(gradient: GradientValue | undefined): string | undefined;
|
|
1620
|
+
|
|
1621
|
+
export declare function resolveJourneyBaseUrl(baseUrl?: string): string;
|
|
1622
|
+
|
|
1623
|
+
/** Resolve templated strings anywhere inside a plan with `currentPlan` scoped to that plan. */
|
|
1624
|
+
export declare function resolvePricingPlanTemplates(plan: PricingPlan, answers: JourneyAnswers): PricingPlan;
|
|
1625
|
+
|
|
1626
|
+
/** Resolves an explicit gradient prop into a CSS background string. */
|
|
1627
|
+
export declare function resolveSelectedBorderGradient(gradient: GradientValue | undefined,
|
|
1628
|
+
/** Default angle to use for object-form gradients. PlanCard historically used 135. */
|
|
1629
|
+
defaultAngle?: number): string | undefined;
|
|
1630
|
+
|
|
1631
|
+
/**
|
|
1632
|
+
* Resolves ${expression} template literals in a string using onboarding answers as variables.
|
|
1633
|
+
* Supports full JS expressions: ${name.toUpperCase()}, ${goals.length}, ternaries, etc.
|
|
1634
|
+
*/
|
|
1635
|
+
export declare function resolveTemplate(template: string, answers: JourneyAnswers): string;
|
|
1636
|
+
|
|
1637
|
+
/**
|
|
1638
|
+
* Recursively resolves all string values in a props object.
|
|
1639
|
+
* Handles nested objects and arrays. Non-string values pass through unchanged.
|
|
1640
|
+
*
|
|
1641
|
+
* Strings that are a single whole-value `${var}` reference resolve to the raw
|
|
1642
|
+
* variable value (object/array/etc); mid-string templates keep string-coercion.
|
|
1643
|
+
*/
|
|
1644
|
+
export declare function resolveTemplateProps(props: Record<string, unknown>, answers: JourneyAnswers): Record<string, unknown>;
|
|
1645
|
+
|
|
1646
|
+
export declare function RichText({ content, className, style }: RichTextProps): JSX.Element;
|
|
1647
|
+
|
|
1648
|
+
export declare type RichTextProps = {
|
|
1649
|
+
/** Simple string or array of styled segments */
|
|
1650
|
+
content: string | TextSegment[];
|
|
1651
|
+
className?: string;
|
|
1652
|
+
style?: React.CSSProperties;
|
|
1653
|
+
};
|
|
1654
|
+
|
|
1655
|
+
declare type RoutingRule = {
|
|
1656
|
+
/** Single condition or array of conditions to evaluate */
|
|
1657
|
+
when: BlockCondition | BlockCondition[];
|
|
1658
|
+
/** How to combine multiple conditions: "all" = AND (default), "any" = OR */
|
|
1659
|
+
match?: "all" | "any";
|
|
1660
|
+
/** Step ID to navigate to when this rule matches */
|
|
1661
|
+
goTo: string;
|
|
1662
|
+
};
|
|
1663
|
+
export { RoutingRule }
|
|
1664
|
+
export { RoutingRule as RoutingRule_alias_1 }
|
|
1665
|
+
|
|
1666
|
+
declare type RuntimeIds = {
|
|
1667
|
+
journeyId: string;
|
|
1668
|
+
visitorId: string;
|
|
1669
|
+
clientSessionId: string;
|
|
1670
|
+
queueKey: string;
|
|
1671
|
+
};
|
|
1672
|
+
|
|
1673
|
+
export declare function sanitizeSvgId(id: string): string;
|
|
1674
|
+
|
|
1675
|
+
export declare const ScrollFade: ForwardRefExoticComponent<ScrollFadeProps & RefAttributes<HTMLDivElement>>;
|
|
1676
|
+
|
|
1677
|
+
declare type ScrollFadeProps = {
|
|
1678
|
+
children: React.ReactNode;
|
|
1679
|
+
className?: string;
|
|
1680
|
+
};
|
|
1681
|
+
|
|
1682
|
+
declare type ScrollTimelineBehavior = "auto" | "smooth";
|
|
1683
|
+
export { ScrollTimelineBehavior }
|
|
1684
|
+
export { ScrollTimelineBehavior as ScrollTimelineBehavior_alias_1 }
|
|
1685
|
+
|
|
1686
|
+
declare type ScrollTimelineEvent = ScrollToTimelineEvent | ContinuousScrollTimelineEvent | PauseScrollTimelineEvent;
|
|
1687
|
+
export { ScrollTimelineEvent }
|
|
1688
|
+
export { ScrollTimelineEvent as ScrollTimelineEvent_alias_1 }
|
|
1689
|
+
|
|
1690
|
+
export declare type ScrollTimelineEventBase = {
|
|
1691
|
+
/** Stable event ID for editor bookkeeping and future references */
|
|
1692
|
+
id: string;
|
|
1693
|
+
/** Time offset from step mount in seconds */
|
|
1694
|
+
at: number;
|
|
1695
|
+
};
|
|
1696
|
+
|
|
1697
|
+
declare type ScrollToTimelineEvent = ScrollTimelineEventBase & {
|
|
1698
|
+
action: "scroll_to";
|
|
1699
|
+
/** Target location. Use "anchor" for a block anchorId, or top/bottom edges of the info page. */
|
|
1700
|
+
target: "anchor" | "top" | "bottom";
|
|
1701
|
+
/** Required when target is "anchor" */
|
|
1702
|
+
targetId?: string;
|
|
1703
|
+
/** Alignment within the viewport. Defaults to "start". */
|
|
1704
|
+
block?: "start" | "center" | "end";
|
|
1705
|
+
/** Native scroll behavior. Defaults to "smooth". */
|
|
1706
|
+
behavior?: ScrollTimelineBehavior;
|
|
1707
|
+
};
|
|
1708
|
+
export { ScrollToTimelineEvent }
|
|
1709
|
+
export { ScrollToTimelineEvent as ScrollToTimelineEvent_alias_1 }
|
|
1710
|
+
|
|
1711
|
+
declare function SegmentedProgress(): JSX.Element | null;
|
|
1712
|
+
export { SegmentedProgress }
|
|
1713
|
+
export { SegmentedProgress as SegmentedProgress_alias_1 }
|
|
1714
|
+
|
|
1715
|
+
export declare function SelectCard({ children, id, index, isSelected, style, hoveredId, onHover, disabled, "data-inspect-path": inspectPath, }: SelectCardProps): JSX.Element;
|
|
1716
|
+
|
|
1717
|
+
declare type SelectCardProps = {
|
|
1718
|
+
children: React.ReactNode;
|
|
1719
|
+
id: string;
|
|
1720
|
+
index?: number;
|
|
1721
|
+
isSelected: boolean;
|
|
1722
|
+
style?: WidgetStyle;
|
|
1723
|
+
hoveredId: string | null;
|
|
1724
|
+
onHover: (id: string | null) => void;
|
|
1725
|
+
disabled?: boolean;
|
|
1726
|
+
"data-inspect-path"?: string;
|
|
1727
|
+
};
|
|
1728
|
+
|
|
1729
|
+
/** CSS variable holding the theme-level default selected border gradient. */
|
|
1730
|
+
export declare const SELECTED_BORDER_GRADIENT_VAR = "--jy-selected-border-gradient";
|
|
1731
|
+
|
|
1732
|
+
export declare const SELECTED_BORDER_WIDTH_VAR = "--jy-selected-border-width";
|
|
1733
|
+
|
|
1734
|
+
/** CSS background expression for the selected border wrapper.
|
|
1735
|
+
* Prefers the explicit prop, then falls back to the theme variable. The CSS var
|
|
1736
|
+
* itself acts as the final no-op fallback (resolves to nothing → fully
|
|
1737
|
+
* transparent wrapper, so the wrapped card visually identical to no border). */
|
|
1738
|
+
export declare function selectedBorderBackground(gradient: GradientValue | undefined): string;
|
|
1739
|
+
|
|
1740
|
+
/** CSS expression for the selected border thickness, in pixels. */
|
|
1741
|
+
export declare function selectedBorderWidthExpr(width: number | undefined): string;
|
|
1742
|
+
|
|
1743
|
+
/** Flattened plan snapshot stored in `answers[variable]` when a pricing_plans block selection is made.
|
|
1744
|
+
* Mirrors `PricingPlan` but lifts `price.*` fields to the top level so templates can use
|
|
1745
|
+
* `${selectedPlan.amount}` instead of `${selectedPlan.price.amount}`.
|
|
1746
|
+
* Persisted across reloads via storage; legacy plain-string `id` answers are upgraded on mount. */
|
|
1747
|
+
declare type SelectedPlanAnswer = {
|
|
1748
|
+
id: string;
|
|
1749
|
+
name: string;
|
|
1750
|
+
amount: number;
|
|
1751
|
+
currency: string;
|
|
1752
|
+
period?: PricingPlanPeriod;
|
|
1753
|
+
originalAmount?: number;
|
|
1754
|
+
perUnitLabel?: string;
|
|
1755
|
+
display?: string;
|
|
1756
|
+
trialDays?: number;
|
|
1757
|
+
introOffer?: {
|
|
1758
|
+
amount: number;
|
|
1759
|
+
periods: number;
|
|
1760
|
+
periodUnit: "day" | "week" | "month";
|
|
1761
|
+
};
|
|
1762
|
+
description?: string;
|
|
1763
|
+
features?: PricingPlanFeature[];
|
|
1764
|
+
badge?: string;
|
|
1765
|
+
icon?: string;
|
|
1766
|
+
metadata?: Record<string, unknown>;
|
|
1767
|
+
};
|
|
1768
|
+
export { SelectedPlanAnswer }
|
|
1769
|
+
export { SelectedPlanAnswer as SelectedPlanAnswer_alias_1 }
|
|
1770
|
+
|
|
1771
|
+
export declare function SingleSelectBlock({ variable, options, layout, iconIndicator, style, searchThreshold, }: SingleSelectBlockProps): JSX.Element;
|
|
1772
|
+
|
|
1773
|
+
declare type SingleSelectBlockProps = {
|
|
1774
|
+
/** Variable name in `answers` that the user's pick is written to. Required. */
|
|
1775
|
+
variable: string;
|
|
1776
|
+
options: StepOption[];
|
|
1777
|
+
/** Top-level shortcut. Wins over `style.layout`. */
|
|
1778
|
+
layout?: "list" | "grid" | "segmented";
|
|
1779
|
+
/** Top-level shortcut. Wins over `style.iconIndicator`. Required when options carry icons. */
|
|
1780
|
+
iconIndicator?: boolean;
|
|
1781
|
+
/** Finer styling (colors, hover/selected backgrounds, border radius). */
|
|
1782
|
+
style?: WidgetStyle;
|
|
1783
|
+
searchThreshold?: number;
|
|
1784
|
+
/** When true, sibling next/skip buttons on the same page are disabled until a pick exists. */
|
|
1785
|
+
required?: boolean;
|
|
1786
|
+
};
|
|
1787
|
+
export { SingleSelectBlockProps }
|
|
1788
|
+
export { SingleSelectBlockProps as SingleSelectBlockProps_alias_1 }
|
|
1789
|
+
|
|
1790
|
+
export declare function SingleSelectStep({ config, answer, onAnswer, onNext, }: StepComponentProps): JSX.Element;
|
|
1791
|
+
|
|
1792
|
+
export declare function SingleSelectWidget({ options, value, onChange, style, searchThreshold, autoAdvance, onAutoAdvance, inspectPathPrefix, scrollable, }: SingleSelectWidgetProps): JSX.Element;
|
|
1793
|
+
|
|
1794
|
+
export declare type SingleSelectWidgetProps = {
|
|
1795
|
+
options: StepOption[];
|
|
1796
|
+
value: string;
|
|
1797
|
+
onChange: (next: string) => void;
|
|
1798
|
+
style?: WidgetStyle;
|
|
1799
|
+
searchThreshold?: number;
|
|
1800
|
+
autoAdvance?: boolean;
|
|
1801
|
+
onAutoAdvance?: () => void;
|
|
1802
|
+
/** Prefix used for `data-inspect-path` on each rendered option (e.g. "options" or "props.options"). */
|
|
1803
|
+
inspectPathPrefix?: string;
|
|
1804
|
+
/** When true, wraps options list in a ScrollFade. Steps want this; embedded blocks usually don't. */
|
|
1805
|
+
scrollable?: boolean;
|
|
1806
|
+
};
|
|
1807
|
+
|
|
1808
|
+
export declare function SliderStep({ config, answer, onAnswer, onNext, }: StepComponentProps): JSX.Element;
|
|
1809
|
+
|
|
1810
|
+
declare type SliderStyle = {
|
|
1811
|
+
trackFillColor?: string;
|
|
1812
|
+
trackFillGradient?: string;
|
|
1813
|
+
trackBgColor?: string;
|
|
1814
|
+
trackHeight?: number;
|
|
1815
|
+
thumbColor?: string;
|
|
1816
|
+
thumbWidth?: number;
|
|
1817
|
+
thumbHeight?: number;
|
|
1818
|
+
thumbBorderRadius?: string;
|
|
1819
|
+
thumbShadow?: string;
|
|
1820
|
+
valueColor?: string;
|
|
1821
|
+
valueGradient?: string;
|
|
1822
|
+
valueTemplate?: string;
|
|
1823
|
+
valueDecimals?: number;
|
|
1824
|
+
dynamicTextSize?: boolean;
|
|
1825
|
+
reverseDynamicTextSize?: boolean;
|
|
1826
|
+
minFontSize?: number;
|
|
1827
|
+
maxFontSize?: number;
|
|
1828
|
+
snapPoints?: number;
|
|
1829
|
+
haptics?: boolean;
|
|
1830
|
+
/** Initial slider value on page load. Defaults to midpoint of min–max. */
|
|
1831
|
+
defaultValue?: number;
|
|
1832
|
+
};
|
|
1833
|
+
export { SliderStyle }
|
|
1834
|
+
export { SliderStyle as SliderStyle_alias_1 }
|
|
1835
|
+
|
|
1836
|
+
export declare function SpacerBlock({ size }: SpacerBlockProps): JSX.Element;
|
|
1837
|
+
|
|
1838
|
+
declare type SpacerBlockProps = {
|
|
1839
|
+
size?: number;
|
|
1840
|
+
};
|
|
1841
|
+
export { SpacerBlockProps }
|
|
1842
|
+
export { SpacerBlockProps as SpacerBlockProps_alias_1 }
|
|
1843
|
+
|
|
1844
|
+
export declare function StatBlock({ value, label, className }: StatBlockProps): JSX.Element;
|
|
1845
|
+
|
|
1846
|
+
declare type StatBlockProps = {
|
|
1847
|
+
value: string;
|
|
1848
|
+
label: string;
|
|
1849
|
+
className?: string;
|
|
1850
|
+
};
|
|
1851
|
+
export { StatBlockProps }
|
|
1852
|
+
export { StatBlockProps as StatBlockProps_alias_1 }
|
|
1853
|
+
|
|
1854
|
+
declare type StepAnswer = string | string[] | number | boolean | Record<string, string> | Record<string, number> | SelectedPlanAnswer | AppliedDiscountAnswer | readonly PricingPlan[] | null;
|
|
1855
|
+
export { StepAnswer }
|
|
1856
|
+
export { StepAnswer as StepAnswer_alias_1 }
|
|
1857
|
+
|
|
1858
|
+
declare type StepBackground = {
|
|
1859
|
+
color?: string;
|
|
1860
|
+
gradient?: string;
|
|
1861
|
+
image?: string;
|
|
1862
|
+
};
|
|
1863
|
+
export { StepBackground }
|
|
1864
|
+
export { StepBackground as StepBackground_alias_1 }
|
|
1865
|
+
|
|
1866
|
+
declare type StepComponentProps = {
|
|
1867
|
+
config: StepConfig;
|
|
1868
|
+
answer: StepAnswer | undefined;
|
|
1869
|
+
onAnswer: (answer: StepAnswer) => void;
|
|
1870
|
+
onNext: () => void;
|
|
1871
|
+
isLastStep?: boolean;
|
|
1872
|
+
};
|
|
1873
|
+
export { StepComponentProps }
|
|
1874
|
+
export { StepComponentProps as StepComponentProps_alias_1 }
|
|
1875
|
+
|
|
1876
|
+
declare type StepConfig = {
|
|
1877
|
+
id: string;
|
|
1878
|
+
type: StepType;
|
|
1879
|
+
/** Custom variable name for storing this step's answer. Defaults to `id`. */
|
|
1880
|
+
variable?: string;
|
|
1881
|
+
preface?: string;
|
|
1882
|
+
question?: string;
|
|
1883
|
+
description?: string;
|
|
1884
|
+
options?: StepOption[];
|
|
1885
|
+
validation?: StepValidation;
|
|
1886
|
+
fields?: StepField[];
|
|
1887
|
+
background?: StepBackground;
|
|
1888
|
+
style?: WidgetStyle;
|
|
1889
|
+
buttonText?: string;
|
|
1890
|
+
/** Centered text shown sticky just above the CTA button */
|
|
1891
|
+
footerText?: string;
|
|
1892
|
+
/** If true, hides the Next button and auto-advances when an option is selected (single_select only) */
|
|
1893
|
+
autoAdvance?: boolean;
|
|
1894
|
+
searchThreshold?: number;
|
|
1895
|
+
sliderStyle?: SliderStyle;
|
|
1896
|
+
swipeCards?: SwipeCardItem[];
|
|
1897
|
+
swipeLabels?: SwipeLabels;
|
|
1898
|
+
swipeIconAlign?: SwipeCardAlign;
|
|
1899
|
+
swipeTextAlign?: SwipeCardAlign;
|
|
1900
|
+
swipeIconStyle?: SwipeIconStyle;
|
|
1901
|
+
swipeIconColor?: string;
|
|
1902
|
+
counterStyle?: CounterStyle;
|
|
1903
|
+
showProgress?: boolean;
|
|
1904
|
+
countsForProgress?: boolean;
|
|
1905
|
+
/** Per-step override for back navigation. When set, takes precedence over the journey-level
|
|
1906
|
+
* `allowBackNavigation`. Useful for confirmation/success pages where the user should not
|
|
1907
|
+
* be able to walk back into the form. */
|
|
1908
|
+
allowBackNavigation?: boolean;
|
|
1909
|
+
customComponentId?: string;
|
|
1910
|
+
computeEndpoint?: string;
|
|
1911
|
+
inputSteps?: string[];
|
|
1912
|
+
/** Block-based composition for info_page steps */
|
|
1913
|
+
blocks?: BlockConfig[];
|
|
1914
|
+
/** Layout settings for the block-based page */
|
|
1915
|
+
layout?: PageLayout;
|
|
1916
|
+
/** Gradient blob configuration for animated background orbs (1-5 blobs per step) */
|
|
1917
|
+
blobs?: BlobConfig[];
|
|
1918
|
+
/** Conditional routing — determines which step to navigate to based on answers */
|
|
1919
|
+
routing?: StepRouting;
|
|
1920
|
+
/** Optional timeline of staggered scroll actions for info_page steps */
|
|
1921
|
+
scrollTimeline?: StepScrollTimeline;
|
|
1922
|
+
};
|
|
1923
|
+
export { StepConfig }
|
|
1924
|
+
export { StepConfig as StepConfig_alias_1 }
|
|
1925
|
+
|
|
1926
|
+
declare type StepField = {
|
|
1927
|
+
id: string;
|
|
1928
|
+
type: "text" | "email" | "number" | "tel";
|
|
1929
|
+
label: string;
|
|
1930
|
+
placeholder?: string;
|
|
1931
|
+
required?: boolean;
|
|
1932
|
+
min?: number;
|
|
1933
|
+
max?: number;
|
|
1934
|
+
options?: StepOption[];
|
|
1935
|
+
/** Custom variable name for this field in the answers Record. Defaults to `id`. */
|
|
1936
|
+
variable?: string;
|
|
1937
|
+
};
|
|
1938
|
+
export { StepField }
|
|
1939
|
+
export { StepField as StepField_alias_1 }
|
|
1940
|
+
|
|
1941
|
+
declare type StepOption = {
|
|
1942
|
+
id: string;
|
|
1943
|
+
label: string;
|
|
1944
|
+
description?: string;
|
|
1945
|
+
icon?: string;
|
|
1946
|
+
/** Optional image URL used in gravity bin physics visualization */
|
|
1947
|
+
image?: string;
|
|
1948
|
+
};
|
|
1949
|
+
export { StepOption }
|
|
1950
|
+
export { StepOption as StepOption_alias_1 }
|
|
1951
|
+
|
|
1952
|
+
declare function StepRenderer({ config }: {
|
|
1953
|
+
config: StepConfig;
|
|
1954
|
+
}): JSX.Element;
|
|
1955
|
+
export { StepRenderer }
|
|
1956
|
+
export { StepRenderer as StepRenderer_alias_1 }
|
|
1957
|
+
|
|
1958
|
+
declare type StepRouting = {
|
|
1959
|
+
/** Evaluated top-to-bottom; first matching rule wins */
|
|
1960
|
+
conditions: RoutingRule[];
|
|
1961
|
+
/** Fallback step ID if no condition matches. Omit to use next sequential step. */
|
|
1962
|
+
default?: string;
|
|
1963
|
+
};
|
|
1964
|
+
export { StepRouting }
|
|
1965
|
+
export { StepRouting as StepRouting_alias_1 }
|
|
1966
|
+
|
|
1967
|
+
declare type StepScrollTimeline = {
|
|
1968
|
+
/** Pause the timeline when the user scrolls, taps, wheels, or presses keys. Defaults to true. */
|
|
1969
|
+
pauseOnUserInput?: boolean;
|
|
1970
|
+
/** Optional auto-resume delay after user interruption, in seconds. */
|
|
1971
|
+
resumeAfter?: number;
|
|
1972
|
+
/** Ordered timeline of scroll actions for info pages. */
|
|
1973
|
+
events: ScrollTimelineEvent[];
|
|
1974
|
+
};
|
|
1975
|
+
export { StepScrollTimeline }
|
|
1976
|
+
export { StepScrollTimeline as StepScrollTimeline_alias_1 }
|
|
1977
|
+
|
|
1978
|
+
declare type StepType = "single_select" | "multi_select" | "input" | "slider" | "swipe_cards" | "counter_select" | "info_page" | "computed" | "custom";
|
|
1979
|
+
export { StepType }
|
|
1980
|
+
export { StepType as StepType_alias_1 }
|
|
1981
|
+
|
|
1982
|
+
declare type StepValidation = {
|
|
1983
|
+
required?: boolean;
|
|
1984
|
+
min?: number;
|
|
1985
|
+
max?: number;
|
|
1986
|
+
};
|
|
1987
|
+
export { StepValidation }
|
|
1988
|
+
export { StepValidation as StepValidation_alias_1 }
|
|
1989
|
+
|
|
1990
|
+
declare type SwipeCardAlign = "left" | "center" | "right";
|
|
1991
|
+
export { SwipeCardAlign }
|
|
1992
|
+
export { SwipeCardAlign as SwipeCardAlign_alias_1 }
|
|
1993
|
+
|
|
1994
|
+
declare type SwipeCardItem = {
|
|
1995
|
+
variable: string;
|
|
1996
|
+
text: string;
|
|
1997
|
+
description?: string;
|
|
1998
|
+
icon?: string;
|
|
1999
|
+
};
|
|
2000
|
+
export { SwipeCardItem }
|
|
2001
|
+
export { SwipeCardItem as SwipeCardItem_alias_1 }
|
|
2002
|
+
|
|
2003
|
+
export declare function SwipeCardsStep({ config, answer, onAnswer, onNext, }: StepComponentProps): JSX.Element;
|
|
2004
|
+
|
|
2005
|
+
declare type SwipeIconStyle = "circle" | "bare";
|
|
2006
|
+
export { SwipeIconStyle }
|
|
2007
|
+
export { SwipeIconStyle as SwipeIconStyle_alias_1 }
|
|
2008
|
+
|
|
2009
|
+
declare type SwipeLabels = {
|
|
2010
|
+
yes?: string;
|
|
2011
|
+
no?: string;
|
|
2012
|
+
};
|
|
2013
|
+
export { SwipeLabels }
|
|
2014
|
+
export { SwipeLabels as SwipeLabels_alias_1 }
|
|
2015
|
+
|
|
2016
|
+
export declare function TableBlock({ rowLabels, columns, highlightColor, highlightBorderRadius, rowLabelColor, headerColor, dividerColor, className, }: TableBlockProps): JSX.Element;
|
|
2017
|
+
|
|
2018
|
+
declare type TableBlockProps = {
|
|
2019
|
+
rowLabels: TableRowLabel[];
|
|
2020
|
+
columns: TableColumn[];
|
|
2021
|
+
highlightColor?: string;
|
|
2022
|
+
highlightBorderRadius?: number;
|
|
2023
|
+
rowLabelColor?: string;
|
|
2024
|
+
headerColor?: string;
|
|
2025
|
+
dividerColor?: string;
|
|
2026
|
+
className?: string;
|
|
2027
|
+
};
|
|
2028
|
+
export { TableBlockProps }
|
|
2029
|
+
export { TableBlockProps as TableBlockProps_alias_1 }
|
|
2030
|
+
|
|
2031
|
+
declare type TableCell = string | {
|
|
2032
|
+
type: "check";
|
|
2033
|
+
color?: string;
|
|
2034
|
+
iconLabel?: string;
|
|
2035
|
+
iconTooltip?: string;
|
|
2036
|
+
} | {
|
|
2037
|
+
type: "cross";
|
|
2038
|
+
color?: string;
|
|
2039
|
+
iconLabel?: string;
|
|
2040
|
+
iconTooltip?: string;
|
|
2041
|
+
} | {
|
|
2042
|
+
type: "lock";
|
|
2043
|
+
color?: string;
|
|
2044
|
+
iconLabel?: string;
|
|
2045
|
+
iconTooltip?: string;
|
|
2046
|
+
} | {
|
|
2047
|
+
type: "warning";
|
|
2048
|
+
color?: string;
|
|
2049
|
+
iconLabel?: string;
|
|
2050
|
+
iconTooltip?: string;
|
|
2051
|
+
} | {
|
|
2052
|
+
type: "icon";
|
|
2053
|
+
name: string;
|
|
2054
|
+
color?: string;
|
|
2055
|
+
size?: number;
|
|
2056
|
+
iconLabel?: string;
|
|
2057
|
+
iconTooltip?: string;
|
|
2058
|
+
} | {
|
|
2059
|
+
type: "text";
|
|
2060
|
+
text: string;
|
|
2061
|
+
color?: string;
|
|
2062
|
+
fontSize?: string;
|
|
2063
|
+
fontWeight?: string | number;
|
|
2064
|
+
};
|
|
2065
|
+
export { TableCell }
|
|
2066
|
+
export { TableCell as TableCell_alias_1 }
|
|
2067
|
+
|
|
2068
|
+
declare type TableColumn = {
|
|
2069
|
+
header: string;
|
|
2070
|
+
headerImage?: string;
|
|
2071
|
+
highlight?: boolean;
|
|
2072
|
+
cells: TableCell[];
|
|
2073
|
+
};
|
|
2074
|
+
export { TableColumn }
|
|
2075
|
+
export { TableColumn as TableColumn_alias_1 }
|
|
2076
|
+
|
|
2077
|
+
declare type TableRowLabel = string | {
|
|
2078
|
+
text: string;
|
|
2079
|
+
icon?: string;
|
|
2080
|
+
iconColor?: string;
|
|
2081
|
+
};
|
|
2082
|
+
export { TableRowLabel }
|
|
2083
|
+
export { TableRowLabel as TableRowLabel_alias_1 }
|
|
2084
|
+
|
|
2085
|
+
export declare function TextBlock({ text, segments, variant, fontSize, fontFamily, fontStyle, fontWeight, lineHeight, color, gradient, textAlign, className, }: TextBlockProps): JSX.Element;
|
|
2086
|
+
|
|
2087
|
+
declare type TextBlockProps = {
|
|
2088
|
+
text?: string;
|
|
2089
|
+
segments?: TextSegment[];
|
|
2090
|
+
variant?: "subtitle" | "body" | "caption";
|
|
2091
|
+
fontSize?: string;
|
|
2092
|
+
fontFamily?: string;
|
|
2093
|
+
fontStyle?: "normal" | "italic";
|
|
2094
|
+
fontWeight?: string | number;
|
|
2095
|
+
lineHeight?: string | number;
|
|
2096
|
+
color?: string;
|
|
2097
|
+
gradient?: GradientValue;
|
|
2098
|
+
textAlign?: "left" | "center" | "right";
|
|
2099
|
+
className?: string;
|
|
2100
|
+
};
|
|
2101
|
+
export { TextBlockProps }
|
|
2102
|
+
export { TextBlockProps as TextBlockProps_alias_1 }
|
|
2103
|
+
|
|
2104
|
+
/** A styled span within a text/heading block for inline color, gradient, weight, etc.
|
|
2105
|
+
* When `type === "icon"`, `text` is interpreted as a Lucide icon name (or emoji fallback)
|
|
2106
|
+
* and the segment renders as an inline icon sized to the surrounding font. */
|
|
2107
|
+
declare type TextSegment = {
|
|
2108
|
+
/** "text" (default) renders `text` as a styled span. "icon" renders `text` as an inline icon. */
|
|
2109
|
+
type?: "text" | "icon";
|
|
2110
|
+
text: string;
|
|
2111
|
+
color?: string;
|
|
2112
|
+
/** CSS gradient string or { from, to, angle? } for gradient text */
|
|
2113
|
+
gradient?: GradientValue;
|
|
2114
|
+
fontWeight?: string | number;
|
|
2115
|
+
fontStyle?: "normal" | "italic";
|
|
2116
|
+
fontSize?: string;
|
|
2117
|
+
fontFamily?: string;
|
|
2118
|
+
lineHeight?: string | number;
|
|
2119
|
+
className?: string;
|
|
2120
|
+
};
|
|
2121
|
+
export { TextSegment }
|
|
2122
|
+
export { TextSegment as TextSegment_alias_1 }
|
|
2123
|
+
|
|
2124
|
+
declare function TimelineBlock({ items, iconPlacement, labelPlacement, nodeSize, lineThickness, itemSpacing, titleDescGap, lineStyle, lineColor, lineOpacity, startLine, endLine, animated, entryAnimation, staggerDelay, className, }: TimelineBlockProps): JSX.Element;
|
|
2125
|
+
export { TimelineBlock }
|
|
2126
|
+
export { TimelineBlock as TimelineBlock_alias_1 }
|
|
2127
|
+
|
|
2128
|
+
declare type TimelineBlockProps = {
|
|
2129
|
+
items: TimelineItem[];
|
|
2130
|
+
/** Where the item icon renders. Default "node" (inside a filled badge).
|
|
2131
|
+
* "content" = above the title (old look). "before-title" = inline before title. "none" = hide icon. */
|
|
2132
|
+
iconPlacement?: "node" | "content" | "before-title" | "none";
|
|
2133
|
+
/** Where the item label renders. Default "hidden" (title IS the time).
|
|
2134
|
+
* "above" = small uppercase label above title (old look). */
|
|
2135
|
+
labelPlacement?: "above" | "hidden";
|
|
2136
|
+
/** Node diameter in px. Default 44. */
|
|
2137
|
+
nodeSize?: number;
|
|
2138
|
+
/** Connecting line thickness in px. Default 3. */
|
|
2139
|
+
lineThickness?: number;
|
|
2140
|
+
/** Vertical gap (px) between items. Default `max(16, nodeSize * 0.4)`. Increase to breathe long descriptions. */
|
|
2141
|
+
itemSpacing?: number;
|
|
2142
|
+
/** Vertical gap (px) between an item's title and its description. Default 6 when `iconPlacement="node"`, else 4. */
|
|
2143
|
+
titleDescGap?: number;
|
|
2144
|
+
lineStyle?: "solid" | "dashed";
|
|
2145
|
+
/** Fallback for any item that doesn't set its own `lineColor`. Default `rgba(255,255,255,0.1)`. */
|
|
2146
|
+
lineColor?: TimelineColor;
|
|
2147
|
+
/** Fallback line opacity (0–1) for any item that doesn't set its own `lineOpacity`. Default 1. */
|
|
2148
|
+
lineOpacity?: number;
|
|
2149
|
+
/** Line segment rendered above the first item. */
|
|
2150
|
+
startLine?: {
|
|
2151
|
+
show?: boolean;
|
|
2152
|
+
feathered?: boolean;
|
|
2153
|
+
color?: TimelineColor;
|
|
2154
|
+
opacity?: number;
|
|
2155
|
+
};
|
|
2156
|
+
/** Line segment rendered below the last item. */
|
|
2157
|
+
endLine?: {
|
|
2158
|
+
show?: boolean;
|
|
2159
|
+
feathered?: boolean;
|
|
2160
|
+
color?: TimelineColor;
|
|
2161
|
+
opacity?: number;
|
|
2162
|
+
};
|
|
2163
|
+
animated?: boolean;
|
|
2164
|
+
/** Which animation plays on mount when `animated=true`. Default "slide-left". */
|
|
2165
|
+
entryAnimation?: "slide-left" | "fade" | "slide-up" | "scale";
|
|
2166
|
+
staggerDelay?: number;
|
|
2167
|
+
className?: string;
|
|
2168
|
+
};
|
|
2169
|
+
export { TimelineBlockProps }
|
|
2170
|
+
export { TimelineBlockProps as TimelineBlockProps_alias_1 }
|
|
2171
|
+
|
|
2172
|
+
/** Solid CSS color, a full `linear-gradient(...)` string, or a vertical-gradient shorthand. */
|
|
2173
|
+
declare type TimelineColor = string | {
|
|
2174
|
+
from: string;
|
|
2175
|
+
to: string;
|
|
2176
|
+
};
|
|
2177
|
+
export { TimelineColor }
|
|
2178
|
+
export { TimelineColor as TimelineColor_alias_1 }
|
|
2179
|
+
|
|
2180
|
+
declare type TimelineItem = {
|
|
2181
|
+
/** Small uppercase text rendered above the title when `labelPlacement="above"`. */
|
|
2182
|
+
label?: string;
|
|
2183
|
+
/** Bold heading (e.g. "Today", "In 6 Days"). */
|
|
2184
|
+
title: string;
|
|
2185
|
+
description?: string;
|
|
2186
|
+
/** Lucide icon name. Placement controlled by block-level `iconPlacement`. */
|
|
2187
|
+
icon?: string;
|
|
2188
|
+
/** Node fill (badge) or ring (dot) color. */
|
|
2189
|
+
color?: string;
|
|
2190
|
+
/** Icon tint when rendered inside the badge. Defaults to white. */
|
|
2191
|
+
iconColor?: string;
|
|
2192
|
+
/** Wrap this item's content column (content icon, title, description) in a card. */
|
|
2193
|
+
contentCard?: boolean;
|
|
2194
|
+
/** Color of the outgoing line from this item down to the next. Ignored on the last item.
|
|
2195
|
+
* Falls back to block-level `lineColor`. */
|
|
2196
|
+
lineColor?: TimelineColor;
|
|
2197
|
+
/** Opacity of the outgoing line (0–1). Ignored on the last item. Falls back to block-level `lineOpacity`. */
|
|
2198
|
+
lineOpacity?: number;
|
|
2199
|
+
};
|
|
2200
|
+
export { TimelineItem }
|
|
2201
|
+
export { TimelineItem as TimelineItem_alias_1 }
|
|
2202
|
+
|
|
2203
|
+
export declare function toAppliedDiscountAnswer({ result, code, planVariable, }: {
|
|
2204
|
+
result: Extract<DiscountCodeApplyResult, {
|
|
2205
|
+
valid: true;
|
|
2206
|
+
}>;
|
|
2207
|
+
code: string;
|
|
2208
|
+
planVariable?: string;
|
|
2209
|
+
}): AppliedDiscountAnswer;
|
|
2210
|
+
|
|
2211
|
+
export declare function Tooltip({ ...props }: React_2.ComponentProps<typeof Tooltip_2.Root>): React_2.JSX.Element;
|
|
2212
|
+
|
|
2213
|
+
export declare function TooltipContent({ className, sideOffset, children, ...props }: React_2.ComponentProps<typeof Tooltip_2.Content>): React_2.JSX.Element;
|
|
2214
|
+
|
|
2215
|
+
export declare function TooltipProvider({ delayDuration, ...props }: React_2.ComponentProps<typeof Tooltip_2.Provider>): React_2.JSX.Element;
|
|
2216
|
+
|
|
2217
|
+
export declare function TooltipTrigger({ ...props }: React_2.ComponentProps<typeof Tooltip_2.Trigger>): React_2.JSX.Element;
|
|
2218
|
+
|
|
2219
|
+
/** Build the flattened answer payload stored in `answers[variable]` for a selected plan. */
|
|
2220
|
+
export declare function toSelectedPlanAnswer(plan: PricingPlan): SelectedPlanAnswer;
|
|
2221
|
+
|
|
2222
|
+
declare type UseCarouselParameters = Parameters<typeof useEmblaCarousel>;
|
|
2223
|
+
|
|
2224
|
+
export declare function useCounter({ value, duration, decimals, startDelay, onTick, }: {
|
|
2225
|
+
value: number;
|
|
2226
|
+
duration?: number;
|
|
2227
|
+
decimals?: number;
|
|
2228
|
+
startDelay?: number;
|
|
2229
|
+
onTick?: (rounded: number) => void;
|
|
2230
|
+
}): number;
|
|
2231
|
+
|
|
2232
|
+
declare function useJourneyActions(): JourneyActions;
|
|
2233
|
+
export { useJourneyActions }
|
|
2234
|
+
export { useJourneyActions as useJourneyActions_alias_1 }
|
|
2235
|
+
|
|
2236
|
+
export declare function useJourneyCapture(params: {
|
|
2237
|
+
config: JourneyConfig | null;
|
|
2238
|
+
capture: JourneyCaptureOption | null;
|
|
2239
|
+
onEvent?: (event: JourneyEvent) => void;
|
|
2240
|
+
}): (event: JourneyEvent) => void;
|
|
2241
|
+
|
|
2242
|
+
declare function useJourneyConfig({ apiKey, journeyId, baseUrl, config, capture, }: {
|
|
2243
|
+
apiKey: string;
|
|
2244
|
+
journeyId: string;
|
|
2245
|
+
baseUrl?: string;
|
|
2246
|
+
config?: JourneyConfig;
|
|
2247
|
+
capture?: boolean;
|
|
2248
|
+
}): FetchState;
|
|
2249
|
+
export { useJourneyConfig }
|
|
2250
|
+
export { useJourneyConfig as useJourneyConfig_alias_1 }
|
|
2251
|
+
|
|
2252
|
+
declare function useJourneyState(): JourneyState;
|
|
2253
|
+
export { useJourneyState }
|
|
2254
|
+
export { useJourneyState as useJourneyState_alias_1 }
|
|
2255
|
+
|
|
2256
|
+
export declare function VideoBlock({ src, previewImage, autoplay, loop, muted, controls, aspectRatio, youtubeId, vimeoId, className, }: VideoBlockProps): JSX.Element;
|
|
2257
|
+
|
|
2258
|
+
declare type VideoBlockProps = {
|
|
2259
|
+
src?: string;
|
|
2260
|
+
previewImage?: string;
|
|
2261
|
+
autoplay?: boolean;
|
|
2262
|
+
loop?: boolean;
|
|
2263
|
+
muted?: boolean;
|
|
2264
|
+
controls?: boolean;
|
|
2265
|
+
aspectRatio?: string;
|
|
2266
|
+
youtubeId?: string;
|
|
2267
|
+
vimeoId?: string;
|
|
2268
|
+
className?: string;
|
|
2269
|
+
};
|
|
2270
|
+
export { VideoBlockProps }
|
|
2271
|
+
export { VideoBlockProps as VideoBlockProps_alias_1 }
|
|
2272
|
+
|
|
2273
|
+
declare type WidgetStyle = {
|
|
2274
|
+
layout?: "list" | "grid" | "segmented";
|
|
2275
|
+
background?: string;
|
|
2276
|
+
borderColor?: string;
|
|
2277
|
+
borderRadius?: string;
|
|
2278
|
+
hoverBackground?: string;
|
|
2279
|
+
selectedBackground?: string;
|
|
2280
|
+
selectedBorderColor?: string;
|
|
2281
|
+
/** Gradient applied as a true rounded border on the selected card (uses CSS mask trick).
|
|
2282
|
+
* Pass any CSS background value: a `linear-gradient(...)` / `conic-gradient(...)` string,
|
|
2283
|
+
* or a `{ from, to, angle? }` shorthand. When unset, falls back to the
|
|
2284
|
+
* `--jy-selected-border-gradient` theme variable, then to `selectedBorderColor`. */
|
|
2285
|
+
selectedBorderGradient?: GradientValue;
|
|
2286
|
+
/** Border thickness in px when a gradient border is in play. Defaults to the
|
|
2287
|
+
* `--jy-selected-border-width` theme variable, then to 2. */
|
|
2288
|
+
selectedBorderWidth?: number;
|
|
2289
|
+
selectedBoxShadow?: string;
|
|
2290
|
+
className?: string;
|
|
2291
|
+
iconIndicator?: boolean;
|
|
2292
|
+
iconBg?: string;
|
|
2293
|
+
iconColor?: string;
|
|
2294
|
+
selectedIconBg?: string;
|
|
2295
|
+
selectedIconColor?: string;
|
|
2296
|
+
};
|
|
2297
|
+
export { WidgetStyle }
|
|
2298
|
+
export { WidgetStyle as WidgetStyle_alias_1 }
|
|
2299
|
+
|
|
2300
|
+
export { }
|