@flowsterix/core 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,15 @@
1
+ import type { EventBus } from './events';
2
+ import type { StorageAdapter } from './storage';
3
+ import type { FlowAnalyticsHandlers, FlowDefinition, FlowEvents, FlowStore, VersionMismatchInfo } from './types';
4
+ export interface FlowStoreOptions<TContent = unknown> {
5
+ storageAdapter?: StorageAdapter;
6
+ storageKey?: string;
7
+ eventBus?: EventBus<FlowEvents<TContent>>;
8
+ now?: () => number;
9
+ persistOnChange?: boolean;
10
+ analytics?: FlowAnalyticsHandlers<TContent>;
11
+ /** Callback when a version mismatch is detected and resolved */
12
+ onVersionMismatch?: (info: VersionMismatchInfo) => void;
13
+ }
14
+ export declare const createFlowStore: <TContent>(definition: FlowDefinition<TContent>, flowOptions?: FlowStoreOptions<TContent>) => FlowStore<TContent>;
15
+ //# sourceMappingURL=state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAExC,OAAO,KAAK,EAAE,cAAc,EAAmB,MAAM,WAAW,CAAA;AAEhE,OAAO,KAAK,EACV,qBAAqB,EAErB,cAAc,EAEd,UAAU,EAEV,SAAS,EAQT,mBAAmB,EACpB,MAAM,SAAS,CAAA;AAQhB,MAAM,WAAW,gBAAgB,CAAC,QAAQ,GAAG,OAAO;IAClD,cAAc,CAAC,EAAE,cAAc,CAAA;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAA;IACzC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;IAClB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,SAAS,CAAC,EAAE,qBAAqB,CAAC,QAAQ,CAAC,CAAA;IAC3C,gEAAgE;IAChE,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,mBAAmB,KAAK,IAAI,CAAA;CACxD;AA0GD,eAAO,MAAM,eAAe,GAAI,QAAQ,EACtC,YAAY,cAAc,CAAC,QAAQ,CAAC,EACpC,cAAa,gBAAgB,CAAC,QAAQ,CAAM,KAC3C,SAAS,CAAC,QAAQ,CAqiBpB,CAAA"}
@@ -0,0 +1,51 @@
1
+ export interface StorageSnapshot<TValue = unknown> {
2
+ /** Version stored as "major.minor" string */
3
+ version: string;
4
+ value: TValue;
5
+ updatedAt: number;
6
+ }
7
+ export interface StorageAdapter {
8
+ get: (key: string) => StorageSnapshot | null | Promise<StorageSnapshot | null>;
9
+ set: (key: string, value: StorageSnapshot) => void | Promise<void>;
10
+ remove: (key: string) => void | Promise<void>;
11
+ subscribe?: (listener: () => void) => () => void;
12
+ }
13
+ export declare const resolveMaybePromise: <TValue>(value: TValue | Promise<TValue>) => Promise<TValue>;
14
+ export declare class MemoryStorageAdapter implements StorageAdapter {
15
+ private readonly store;
16
+ private readonly listeners;
17
+ get: StorageAdapter['get'];
18
+ set: StorageAdapter['set'];
19
+ remove: StorageAdapter['remove'];
20
+ subscribe: NonNullable<StorageAdapter['subscribe']>;
21
+ private emit;
22
+ }
23
+ export declare const createLocalStorageAdapter: (storage?: Storage | null) => StorageAdapter;
24
+ export interface ApiStorageAdapterOptions {
25
+ /** Base URL for the storage API (e.g., '/api/tour-state' or 'https://api.example.com/tours') */
26
+ baseUrl: string;
27
+ /** Function to get headers for each request (e.g., for auth tokens) */
28
+ getHeaders?: () => Promise<HeadersInit> | HeadersInit;
29
+ /** Custom fetch implementation (defaults to global fetch) */
30
+ fetch?: typeof fetch;
31
+ }
32
+ /**
33
+ * Creates a storage adapter that persists tour state via HTTP API.
34
+ *
35
+ * Expects the API to implement:
36
+ * - GET /{key} → returns StorageSnapshot JSON or 404
37
+ * - PUT /{key} → accepts StorageSnapshot JSON body
38
+ * - DELETE /{key} → removes the snapshot
39
+ *
40
+ * @example
41
+ * ```ts
42
+ * const storageAdapter = createApiStorageAdapter({
43
+ * baseUrl: '/api/tour-state',
44
+ * getHeaders: () => ({ Authorization: `Bearer ${getToken()}` }),
45
+ * })
46
+ *
47
+ * <TourProvider flows={flows} storageAdapter={storageAdapter}>
48
+ * ```
49
+ */
50
+ export declare function createApiStorageAdapter(options: ApiStorageAdapterOptions): StorageAdapter;
51
+ //# sourceMappingURL=storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe,CAAC,MAAM,GAAG,OAAO;IAC/C,6CAA6C;IAC7C,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,eAAe,GAAG,IAAI,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAAA;IAC9E,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAClE,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC7C,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,MAAM,IAAI,CAAA;CACjD;AAED,eAAO,MAAM,mBAAmB,GAAU,MAAM,EAC9C,OAAO,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,KAC9B,OAAO,CAAC,MAAM,CAAgB,CAAA;AAEjC,qBAAa,oBAAqB,YAAW,cAAc;IACzD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAqC;IAC3D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAwB;IAElD,GAAG,EAAE,cAAc,CAAC,KAAK,CAAC,CAEzB;IAED,GAAG,EAAE,cAAc,CAAC,KAAK,CAAC,CAGzB;IAED,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,CAG/B;IAED,SAAS,EAAE,WAAW,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAGlD;IAED,OAAO,CAAC,IAAI;CAKb;AAmBD,eAAO,MAAM,yBAAyB,GACpC,UAAS,OAAO,GAAG,IAAwB,KAC1C,cA+CF,CAAA;AAcD,MAAM,WAAW,wBAAwB;IACvC,gGAAgG;IAChG,OAAO,EAAE,MAAM,CAAA;IACf,uEAAuE;IACvE,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC,WAAW,CAAC,GAAG,WAAW,CAAA;IACrD,6DAA6D;IAC7D,KAAK,CAAC,EAAE,OAAO,KAAK,CAAA;CACrB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,wBAAwB,GAChC,cAAc,CAmEhB"}
@@ -0,0 +1,289 @@
1
+ import type { EventBus } from './events';
2
+ export type FlowStatus = 'idle' | 'running' | 'paused' | 'completed' | 'cancelled';
3
+ export type FlowCancelReason = 'skipped' | 'keyboard';
4
+ /**
5
+ * Semantic version for flow definitions.
6
+ * - major: Increment for breaking changes (steps restructured, removed, IDs changed)
7
+ * - minor: Increment for additive/cosmetic changes (content tweaks, new optional steps)
8
+ */
9
+ export interface FlowVersion {
10
+ major: number;
11
+ minor: number;
12
+ }
13
+ export interface FlowState {
14
+ status: FlowStatus;
15
+ stepIndex: number;
16
+ /** Serialized version stored as "major.minor" string for stable storage */
17
+ version: string;
18
+ /** Step ID at time of storage, used for migration matching */
19
+ stepId?: string;
20
+ updatedAt: number;
21
+ cancelReason?: FlowCancelReason;
22
+ }
23
+ export type StepDirection = 'forward' | 'backward' | 'none';
24
+ export type StepEnterReason = 'start' | 'resume' | 'advance' | 'back' | 'jump';
25
+ export type StepExitReason = 'advance' | 'back' | 'pause' | 'cancel' | 'complete' | 'unknown';
26
+ export type StepCompleteReason = 'advance' | 'flowComplete';
27
+ export interface StepTransitionPayload<TContent = unknown> {
28
+ flow: FlowDefinition<TContent>;
29
+ state: FlowState;
30
+ currentStep: Step<TContent> | null;
31
+ currentStepIndex: number;
32
+ previousStep: Step<TContent> | null;
33
+ previousStepIndex: number;
34
+ direction: StepDirection;
35
+ }
36
+ export interface StepEnterEvent<TContent = unknown> extends StepTransitionPayload<TContent> {
37
+ currentStep: Step<TContent>;
38
+ reason: StepEnterReason;
39
+ }
40
+ export interface StepExitEvent<TContent = unknown> extends StepTransitionPayload<TContent> {
41
+ previousStep: Step<TContent>;
42
+ reason: StepExitReason;
43
+ }
44
+ export interface StepCompleteEvent<TContent = unknown> extends StepTransitionPayload<TContent> {
45
+ previousStep: Step<TContent>;
46
+ reason: StepCompleteReason;
47
+ }
48
+ export type StepPlacement = 'auto' | 'top' | 'bottom' | 'left' | 'right' | 'auto-start' | 'auto-end' | 'top-start' | 'top-end' | 'bottom-start' | 'bottom-end' | 'left-start' | 'left-end' | 'right-start' | 'right-end';
49
+ export type StepMask = 'hole' | 'none' | {
50
+ padding?: number;
51
+ radius?: number;
52
+ };
53
+ export type HiddenTargetFallbackMode = 'screen' | 'skip';
54
+ export type ScrollMarginConfig = number | {
55
+ top?: number;
56
+ bottom?: number;
57
+ left?: number;
58
+ right?: number;
59
+ };
60
+ export type StepScrollMode = 'preserve' | 'start' | 'center';
61
+ export interface StepTargetBehavior {
62
+ hidden?: HiddenTargetFallbackMode;
63
+ hiddenDelayMs?: number;
64
+ scrollMargin?: ScrollMarginConfig;
65
+ scrollMode?: StepScrollMode;
66
+ }
67
+ export type StepTarget = 'screen' | {
68
+ selector?: string;
69
+ getNode?: () => Element | null;
70
+ description?: string;
71
+ };
72
+ export type StepControlState = 'auto' | 'hidden' | 'disabled';
73
+ export interface StepControls {
74
+ back?: StepControlState;
75
+ next?: StepControlState;
76
+ }
77
+ export interface StepWaitForSubscribeContext<TContent = unknown> extends StepHookContext<TContent> {
78
+ notify: (next?: boolean) => void;
79
+ }
80
+ export type StepWaitForPredicate<TContent = unknown> = (ctx: StepHookContext<TContent>) => boolean | Promise<boolean>;
81
+ export type StepWaitForSubscribe<TContent = unknown> = (ctx: StepWaitForSubscribeContext<TContent>) => void | (() => void);
82
+ export interface StepWaitFor<TContent = unknown> {
83
+ selector?: string;
84
+ timeout?: number;
85
+ predicate?: StepWaitForPredicate<TContent>;
86
+ pollMs?: number;
87
+ subscribe?: StepWaitForSubscribe<TContent>;
88
+ }
89
+ export interface AdvancePredicateContext<TContent = unknown> {
90
+ flow: FlowDefinition<TContent>;
91
+ state: FlowState;
92
+ step: Step<TContent>;
93
+ }
94
+ interface AdvanceRuleBase {
95
+ lockBack?: boolean;
96
+ }
97
+ export type AdvanceRule<TContent = unknown> = ({
98
+ type: 'manual';
99
+ } & AdvanceRuleBase) | ({
100
+ type: 'event';
101
+ event: string;
102
+ on?: 'target' | string;
103
+ } & AdvanceRuleBase) | ({
104
+ type: 'predicate';
105
+ check: (ctx: AdvancePredicateContext<TContent>) => boolean;
106
+ pollMs?: number;
107
+ timeoutMs?: number;
108
+ } & AdvanceRuleBase) | ({
109
+ type: 'delay';
110
+ ms: number;
111
+ } & AdvanceRuleBase) | ({
112
+ type: 'route';
113
+ to?: string | RegExp;
114
+ } & AdvanceRuleBase);
115
+ export interface StepHookContext<TContent = unknown> {
116
+ flow: FlowDefinition<TContent>;
117
+ state: FlowState;
118
+ step: Step<TContent>;
119
+ }
120
+ export type StepHook<TContent = unknown> = (ctx: StepHookContext<TContent>) => void | Promise<void>;
121
+ export interface Step<TContent = unknown> {
122
+ id: string;
123
+ target: StepTarget;
124
+ route?: string | RegExp;
125
+ placement?: StepPlacement;
126
+ mask?: StepMask;
127
+ targetBehavior?: StepTargetBehavior;
128
+ content: TContent;
129
+ advance?: Array<AdvanceRule<TContent>>;
130
+ waitFor?: StepWaitFor<TContent>;
131
+ onEnter?: StepHook<TContent>;
132
+ onResume?: StepHook<TContent>;
133
+ onExit?: StepHook<TContent>;
134
+ controls?: StepControls;
135
+ }
136
+ export type BackdropInteractionMode = 'block' | 'passthrough';
137
+ export interface FlowHudPopoverOptions {
138
+ offset?: number;
139
+ role?: string;
140
+ ariaLabel?: string;
141
+ ariaDescribedBy?: string;
142
+ ariaModal?: boolean;
143
+ width?: number | string;
144
+ maxWidth?: number | string;
145
+ }
146
+ export interface FlowHudBackdropOptions {
147
+ interaction?: BackdropInteractionMode;
148
+ }
149
+ export interface FlowHudBehaviorOptions {
150
+ lockBodyScroll?: boolean;
151
+ }
152
+ export type FlowHudRenderMode = 'default' | 'none';
153
+ export interface FlowHudTokenOverrides {
154
+ [key: string]: unknown;
155
+ }
156
+ export type ResumeStrategy = 'chain' | 'current';
157
+ export interface FlowHudOptions {
158
+ render?: FlowHudRenderMode;
159
+ popover?: FlowHudPopoverOptions;
160
+ tokens?: FlowHudTokenOverrides;
161
+ backdrop?: FlowHudBackdropOptions;
162
+ behavior?: FlowHudBehaviorOptions;
163
+ }
164
+ /**
165
+ * Result of comparing two flow versions.
166
+ * - 'same': Versions match exactly
167
+ * - 'minor': Only minor version differs (non-breaking)
168
+ * - 'major': Major version differs (breaking change)
169
+ */
170
+ export type VersionCompareResult = 'same' | 'minor' | 'major';
171
+ /**
172
+ * Action taken after version mismatch detection.
173
+ */
174
+ export type VersionMismatchAction = 'continued' | 'migrated' | 'reset';
175
+ /**
176
+ * Context provided to migration functions.
177
+ */
178
+ export interface MigrationContext<TContent = unknown> {
179
+ oldState: FlowState;
180
+ oldVersion: FlowVersion;
181
+ newVersion: FlowVersion;
182
+ /** Map of step ID to new index in current definition */
183
+ stepIdMap: Map<string, number>;
184
+ /** Current flow definition */
185
+ definition: FlowDefinition<TContent>;
186
+ }
187
+ /**
188
+ * Migration function type. Return new state or null to trigger reset.
189
+ */
190
+ export type FlowMigrateFn<TContent = unknown> = (ctx: MigrationContext<TContent>) => FlowState | null;
191
+ /**
192
+ * Information about a version mismatch event.
193
+ */
194
+ export interface VersionMismatchInfo {
195
+ flowId: string;
196
+ oldVersion: FlowVersion;
197
+ newVersion: FlowVersion;
198
+ action: VersionMismatchAction;
199
+ /** Step ID that was resolved to (if continued/migrated) */
200
+ resolvedStepId?: string;
201
+ /** Step index that was resolved to (if continued/migrated) */
202
+ resolvedStepIndex?: number;
203
+ }
204
+ export interface FlowDefinition<TContent = unknown> {
205
+ id: string;
206
+ version: FlowVersion;
207
+ steps: Array<Step<TContent>>;
208
+ hud?: FlowHudOptions;
209
+ resumeStrategy?: ResumeStrategy;
210
+ autoStart?: boolean;
211
+ metadata?: Record<string, unknown>;
212
+ /** Optional migration function for handling version upgrades */
213
+ migrate?: FlowMigrateFn<TContent>;
214
+ }
215
+ export type FlowErrorCode = 'async.schedule_failed' | 'storage.persist_failed' | 'storage.remove_failed' | 'storage.hydrate_failed' | 'flow.step_not_found' | 'flow.store_destroyed' | 'flow.migration_failed';
216
+ export interface FlowErrorEvent<TContent = unknown> {
217
+ flow: FlowDefinition<TContent>;
218
+ state: FlowState;
219
+ code: FlowErrorCode;
220
+ error?: unknown;
221
+ meta?: Record<string, unknown>;
222
+ }
223
+ export interface FlowEvents<TContent = unknown> extends Record<string, unknown> {
224
+ flowStart: {
225
+ flow: FlowDefinition<TContent>;
226
+ state: FlowState;
227
+ };
228
+ flowResume: {
229
+ flow: FlowDefinition<TContent>;
230
+ state: FlowState;
231
+ };
232
+ flowPause: {
233
+ flow: FlowDefinition<TContent>;
234
+ state: FlowState;
235
+ };
236
+ flowCancel: {
237
+ flow: FlowDefinition<TContent>;
238
+ state: FlowState;
239
+ reason?: FlowCancelReason;
240
+ };
241
+ flowComplete: {
242
+ flow: FlowDefinition<TContent>;
243
+ state: FlowState;
244
+ };
245
+ stepChange: {
246
+ flow: FlowDefinition<TContent>;
247
+ state: FlowState;
248
+ step: Step<TContent> | null;
249
+ previousStep: Step<TContent> | null;
250
+ };
251
+ stateChange: {
252
+ flow: FlowDefinition<TContent>;
253
+ state: FlowState;
254
+ };
255
+ stepEnter: StepEnterEvent<TContent>;
256
+ stepExit: StepExitEvent<TContent>;
257
+ stepComplete: StepCompleteEvent<TContent>;
258
+ flowError: FlowErrorEvent<TContent>;
259
+ versionMismatch: VersionMismatchInfo & {
260
+ flow: FlowDefinition<TContent>;
261
+ };
262
+ }
263
+ type AnalyticsHandlerName<TName extends string> = `on${Capitalize<TName>}`;
264
+ export type FlowAnalyticsHandlers<TContent = unknown> = {
265
+ [TKey in Extract<keyof FlowEvents<TContent>, string> as AnalyticsHandlerName<TKey>]?: (payload: FlowEvents<TContent>[TKey]) => void;
266
+ };
267
+ export interface StartFlowOptions {
268
+ fromStepId?: string;
269
+ fromStepIndex?: number;
270
+ resume?: boolean;
271
+ resumeStrategy?: ResumeStrategy;
272
+ }
273
+ export interface FlowStore<TContent = unknown> {
274
+ readonly definition: FlowDefinition<TContent>;
275
+ readonly events: EventBus<FlowEvents<TContent>>;
276
+ getState: () => FlowState;
277
+ start: (options?: StartFlowOptions) => FlowState;
278
+ next: () => FlowState;
279
+ back: () => FlowState;
280
+ goToStep: (step: number | string) => FlowState;
281
+ pause: () => FlowState;
282
+ resume: () => FlowState;
283
+ cancel: (reason?: FlowCancelReason) => FlowState;
284
+ complete: () => FlowState;
285
+ subscribe: (listener: (state: FlowState) => void) => () => void;
286
+ destroy: () => void;
287
+ }
288
+ export {};
289
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,90 @@
1
+ import { z } from 'zod';
2
+ import type { FlowDefinition } from './types';
3
+ export declare const flowDefinitionSchema: z.ZodObject<{
4
+ id: z.ZodString;
5
+ version: z.ZodObject<{
6
+ major: z.ZodNumber;
7
+ minor: z.ZodNumber;
8
+ }, z.core.$strip>;
9
+ steps: z.ZodArray<z.ZodObject<{
10
+ id: z.ZodString;
11
+ target: z.ZodUnion<readonly [z.ZodLiteral<"screen">, z.ZodObject<{
12
+ selector: z.ZodOptional<z.ZodString>;
13
+ getNode: z.ZodOptional<z.ZodCustom<() => Element | null, () => Element | null>>;
14
+ description: z.ZodOptional<z.ZodString>;
15
+ }, z.core.$strip>]>;
16
+ route: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodCustom<RegExp, RegExp>]>>;
17
+ placement: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"auto">, z.ZodLiteral<"top">, z.ZodLiteral<"bottom">, z.ZodLiteral<"left">, z.ZodLiteral<"right">, z.ZodLiteral<"auto-start">, z.ZodLiteral<"auto-end">, z.ZodLiteral<"top-start">, z.ZodLiteral<"top-end">, z.ZodLiteral<"bottom-start">, z.ZodLiteral<"bottom-end">, z.ZodLiteral<"left-start">, z.ZodLiteral<"left-end">, z.ZodLiteral<"right-start">, z.ZodLiteral<"right-end">]>>;
18
+ mask: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"hole">, z.ZodLiteral<"none">, z.ZodObject<{
19
+ padding: z.ZodOptional<z.ZodNumber>;
20
+ radius: z.ZodOptional<z.ZodNumber>;
21
+ }, z.core.$strip>]>>;
22
+ targetBehavior: z.ZodOptional<z.ZodObject<{
23
+ hidden: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"screen">, z.ZodLiteral<"skip">]>>;
24
+ hiddenDelayMs: z.ZodOptional<z.ZodNumber>;
25
+ scrollMargin: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodObject<{
26
+ top: z.ZodOptional<z.ZodNumber>;
27
+ bottom: z.ZodOptional<z.ZodNumber>;
28
+ left: z.ZodOptional<z.ZodNumber>;
29
+ right: z.ZodOptional<z.ZodNumber>;
30
+ }, z.core.$strict>]>>;
31
+ scrollMode: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"preserve">, z.ZodLiteral<"start">, z.ZodLiteral<"center">]>>;
32
+ }, z.core.$strip>>;
33
+ content: z.ZodAny;
34
+ advance: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodObject<{
35
+ type: z.ZodLiteral<"manual">;
36
+ }, z.core.$strip>, z.ZodObject<{
37
+ type: z.ZodLiteral<"event">;
38
+ event: z.ZodString;
39
+ on: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"target">, z.ZodString]>>;
40
+ }, z.core.$strip>, z.ZodObject<{
41
+ type: z.ZodLiteral<"predicate">;
42
+ pollMs: z.ZodOptional<z.ZodNumber>;
43
+ timeoutMs: z.ZodOptional<z.ZodNumber>;
44
+ check: z.ZodCustom<(ctx: unknown) => boolean | Promise<boolean>, (ctx: unknown) => boolean | Promise<boolean>>;
45
+ }, z.core.$strip>, z.ZodObject<{
46
+ type: z.ZodLiteral<"delay">;
47
+ ms: z.ZodNumber;
48
+ }, z.core.$strip>, z.ZodObject<{
49
+ type: z.ZodLiteral<"route">;
50
+ to: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodCustom<RegExp, RegExp>]>>;
51
+ }, z.core.$strip>]>>>;
52
+ waitFor: z.ZodOptional<z.ZodObject<{
53
+ selector: z.ZodOptional<z.ZodOptional<z.ZodString>>;
54
+ timeout: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
55
+ predicate: z.ZodOptional<z.ZodOptional<z.ZodCustom<(ctx: unknown) => boolean | Promise<boolean>, (ctx: unknown) => boolean | Promise<boolean>>>>;
56
+ pollMs: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
57
+ subscribe: z.ZodOptional<z.ZodOptional<z.ZodCustom<(ctx: unknown) => unknown, (ctx: unknown) => unknown>>>;
58
+ }, z.core.$strip>>;
59
+ onResume: z.ZodOptional<z.ZodCustom<(...args: Array<unknown>) => unknown, (...args: Array<unknown>) => unknown>>;
60
+ onEnter: z.ZodOptional<z.ZodCustom<(...args: Array<unknown>) => unknown, (...args: Array<unknown>) => unknown>>;
61
+ onExit: z.ZodOptional<z.ZodCustom<(...args: Array<unknown>) => unknown, (...args: Array<unknown>) => unknown>>;
62
+ controls: z.ZodOptional<z.ZodObject<{
63
+ back: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"auto">, z.ZodLiteral<"hidden">, z.ZodLiteral<"disabled">]>>;
64
+ next: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"auto">, z.ZodLiteral<"hidden">, z.ZodLiteral<"disabled">]>>;
65
+ }, z.core.$strip>>;
66
+ }, z.core.$strip>>;
67
+ hud: z.ZodOptional<z.ZodObject<{
68
+ render: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"default">, z.ZodLiteral<"none">]>>;
69
+ popover: z.ZodOptional<z.ZodObject<{
70
+ offset: z.ZodOptional<z.ZodNumber>;
71
+ role: z.ZodOptional<z.ZodString>;
72
+ ariaLabel: z.ZodOptional<z.ZodString>;
73
+ ariaDescribedBy: z.ZodOptional<z.ZodString>;
74
+ ariaModal: z.ZodOptional<z.ZodBoolean>;
75
+ }, z.core.$strip>>;
76
+ backdrop: z.ZodOptional<z.ZodObject<{
77
+ interaction: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"block">, z.ZodLiteral<"passthrough">]>>;
78
+ }, z.core.$strip>>;
79
+ behavior: z.ZodOptional<z.ZodObject<{
80
+ lockBodyScroll: z.ZodOptional<z.ZodBoolean>;
81
+ }, z.core.$strip>>;
82
+ tokens: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
83
+ }, z.core.$strip>>;
84
+ resumeStrategy: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"chain">, z.ZodLiteral<"current">]>>;
85
+ autoStart: z.ZodOptional<z.ZodBoolean>;
86
+ metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
87
+ migrate: z.ZodOptional<z.ZodCustom<(...args: Array<unknown>) => unknown, (...args: Array<unknown>) => unknown>>;
88
+ }, z.core.$strip>;
89
+ export declare const validateFlowDefinition: <TContent>(definition: FlowDefinition<TContent>) => FlowDefinition<TContent>;
90
+ //# sourceMappingURL=validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AA8M7C,eAAO,MAAM,oBAAoB;;;;;;;;;;qDArMT,OAAO,GAAG,IAAI,QAAd,OAAO,GAAG,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qCAyCZ,OAAO,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,QAAtC,OAAO,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;;;;;;;;;;;qEAmB5C,OAAO,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,QAAtC,OAAO,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;;qEAStC,OAAO,KAAK,OAAO,QAAnB,OAAO,KAAK,OAAO;;sDA2GvB,KAAK,CAAC,OAAO,CAAC,KAAK,OAAO,YAA1B,KAAK,CAAC,OAAO,CAAC,KAAK,OAAO;qDAK1B,KAAK,CAAC,OAAO,CAAC,KAAK,OAAO,YAA1B,KAAK,CAAC,OAAO,CAAC,KAAK,OAAO;oDAK1B,KAAK,CAAC,OAAO,CAAC,KAAK,OAAO,YAA1B,KAAK,CAAC,OAAO,CAAC,KAAK,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;iDAvDtB,KAAK,CAAC,OAAO,CAAC,KAAK,OAAO,YAA1B,KAAK,CAAC,OAAO,CAAC,KAAK,OAAO;iBA2E5C,CAAA;AAEF,eAAO,MAAM,sBAAsB,GAAI,QAAQ,EAC7C,YAAY,cAAc,CAAC,QAAQ,CAAC,KACnC,cAAc,CAAC,QAAQ,CAEzB,CAAA"}
@@ -0,0 +1,41 @@
1
+ import type { FlowDefinition, FlowState, FlowVersion, VersionCompareResult, VersionMismatchAction } from './types';
2
+ /**
3
+ * Serializes FlowVersion to string format "major.minor" for storage.
4
+ */
5
+ export declare const serializeVersion: (version: FlowVersion) => string;
6
+ /**
7
+ * Parses version string back to FlowVersion object.
8
+ * Used for reading stored versions from storage.
9
+ */
10
+ export declare const parseVersion: (versionStr: string) => FlowVersion;
11
+ /**
12
+ * Compares two versions and returns the type of difference.
13
+ */
14
+ export declare const compareVersions: (stored: FlowVersion, current: FlowVersion) => VersionCompareResult;
15
+ /**
16
+ * Builds a map of step ID to index for the given flow definition.
17
+ */
18
+ export declare const buildStepIdMap: <TContent>(definition: FlowDefinition<TContent>) => Map<string, number>;
19
+ export interface VersionMigrationResult {
20
+ state: FlowState;
21
+ action: VersionMismatchAction;
22
+ }
23
+ /**
24
+ * Handles version mismatch by attempting migration or reset.
25
+ *
26
+ * Strategy:
27
+ * - 'same': Return stored state unchanged
28
+ * - 'minor': Try to match by stepId, fallback to stepIndex
29
+ * - 'major': Call migrate() if present, else reset
30
+ *
31
+ * For terminal states (completed/cancelled), preserve status regardless of version.
32
+ */
33
+ export declare const handleVersionMismatch: <TContent>(params: {
34
+ storedState: FlowState;
35
+ storedVersion: FlowVersion;
36
+ definition: FlowDefinition<TContent>;
37
+ currentVersion: FlowVersion;
38
+ stepIdMap: Map<string, number>;
39
+ now: () => number;
40
+ }) => VersionMigrationResult;
41
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,SAAS,EACT,WAAW,EAEX,oBAAoB,EACpB,qBAAqB,EACtB,MAAM,SAAS,CAAA;AAEhB;;GAEG;AACH,eAAO,MAAM,gBAAgB,GAAI,SAAS,WAAW,KAAG,MACnB,CAAA;AAErC;;;GAGG;AACH,eAAO,MAAM,YAAY,GAAI,YAAY,MAAM,KAAG,WAYjD,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,eAAe,GAC1B,QAAQ,WAAW,EACnB,SAAS,WAAW,KACnB,oBAQF,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,GAAI,QAAQ,EACrC,YAAY,cAAc,CAAC,QAAQ,CAAC,KACnC,GAAG,CAAC,MAAM,EAAE,MAAM,CAMpB,CAAA;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,SAAS,CAAA;IAChB,MAAM,EAAE,qBAAqB,CAAA;CAC9B;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,qBAAqB,GAAI,QAAQ,EAAE,QAAQ;IACtD,WAAW,EAAE,SAAS,CAAA;IACtB,aAAa,EAAE,WAAW,CAAA;IAC1B,UAAU,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAA;IACpC,cAAc,EAAE,WAAW,CAAA;IAC3B,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC9B,GAAG,EAAE,MAAM,MAAM,CAAA;CAClB,KAAG,sBA4FH,CAAA"}
package/package.json ADDED
@@ -0,0 +1,42 @@
1
+ {
2
+ "name": "@flowsterix/core",
3
+ "version": "0.1.0",
4
+ "description": "Core engine for Flowsterix - guided tours and onboarding flows",
5
+ "license": "MIT",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "https://github.com/kvngrf/flowsterix.git",
9
+ "directory": "packages/core"
10
+ },
11
+ "keywords": [
12
+ "tour",
13
+ "onboarding",
14
+ "walkthrough",
15
+ "guide",
16
+ "flow"
17
+ ],
18
+ "type": "module",
19
+ "sideEffects": false,
20
+ "main": "dist/index.cjs",
21
+ "module": "dist/index.mjs",
22
+ "types": "./dist/index.d.ts",
23
+ "exports": {
24
+ ".": {
25
+ "types": "./dist/index.d.ts",
26
+ "import": "./dist/index.mjs",
27
+ "require": "./dist/index.cjs",
28
+ "default": "./dist/index.mjs"
29
+ }
30
+ },
31
+ "files": [
32
+ "dist"
33
+ ],
34
+ "dependencies": {
35
+ "zod": "^4.1.11"
36
+ },
37
+ "scripts": {
38
+ "build": "tsup --config tsup.config.ts && tsc --build tsconfig.json --force",
39
+ "lint": "eslint src --ext .ts",
40
+ "test": "vitest run"
41
+ }
42
+ }