@flowsterix/react 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.
Files changed (96) hide show
  1. package/dist/adapters/radixDialog.d.ts +18 -0
  2. package/dist/adapters/radixDialog.d.ts.map +1 -0
  3. package/dist/chunk-RCASLQRS.mjs +24 -0
  4. package/dist/chunk-RPA2S5UP.mjs +280 -0
  5. package/dist/chunk-U757YVZP.mjs +50 -0
  6. package/dist/components/OverlayBackdrop.d.ts +34 -0
  7. package/dist/components/OverlayBackdrop.d.ts.map +1 -0
  8. package/dist/components/TourFocusManager.d.ts +11 -0
  9. package/dist/components/TourFocusManager.d.ts.map +1 -0
  10. package/dist/components/TourPopoverPortal.d.ts +57 -0
  11. package/dist/components/TourPopoverPortal.d.ts.map +1 -0
  12. package/dist/components/__tests__/TourFocusManager.test.d.ts +2 -0
  13. package/dist/components/__tests__/TourFocusManager.test.d.ts.map +1 -0
  14. package/dist/context.d.ts +56 -0
  15. package/dist/context.d.ts.map +1 -0
  16. package/dist/hooks/__tests__/scrollMargin.test.d.ts +2 -0
  17. package/dist/hooks/__tests__/scrollMargin.test.d.ts.map +1 -0
  18. package/dist/hooks/__tests__/useBodyScrollLock.test.d.ts +2 -0
  19. package/dist/hooks/__tests__/useBodyScrollLock.test.d.ts.map +1 -0
  20. package/dist/hooks/__tests__/useHiddenTargetFallback.test.d.ts +2 -0
  21. package/dist/hooks/__tests__/useHiddenTargetFallback.test.d.ts.map +1 -0
  22. package/dist/hooks/__tests__/waitForPredicate.test.d.ts +2 -0
  23. package/dist/hooks/__tests__/waitForPredicate.test.d.ts.map +1 -0
  24. package/dist/hooks/scrollMargin.d.ts +15 -0
  25. package/dist/hooks/scrollMargin.d.ts.map +1 -0
  26. package/dist/hooks/useAdvanceRules.d.ts +3 -0
  27. package/dist/hooks/useAdvanceRules.d.ts.map +1 -0
  28. package/dist/hooks/useBodyScrollLock.d.ts +2 -0
  29. package/dist/hooks/useBodyScrollLock.d.ts.map +1 -0
  30. package/dist/hooks/useDelayAdvance.d.ts +14 -0
  31. package/dist/hooks/useDelayAdvance.d.ts.map +1 -0
  32. package/dist/hooks/useHiddenTargetFallback.d.ts +16 -0
  33. package/dist/hooks/useHiddenTargetFallback.d.ts.map +1 -0
  34. package/dist/hooks/useHudDescription.d.ts +13 -0
  35. package/dist/hooks/useHudDescription.d.ts.map +1 -0
  36. package/dist/hooks/useHudShortcuts.d.ts +7 -0
  37. package/dist/hooks/useHudShortcuts.d.ts.map +1 -0
  38. package/dist/hooks/useHudState.d.ts +27 -0
  39. package/dist/hooks/useHudState.d.ts.map +1 -0
  40. package/dist/hooks/useHudTargetIssue.d.ts +21 -0
  41. package/dist/hooks/useHudTargetIssue.d.ts.map +1 -0
  42. package/dist/hooks/useTourControls.d.ts +17 -0
  43. package/dist/hooks/useTourControls.d.ts.map +1 -0
  44. package/dist/hooks/useTourFocusDominance.d.ts +9 -0
  45. package/dist/hooks/useTourFocusDominance.d.ts.map +1 -0
  46. package/dist/hooks/useTourHud.d.ts +61 -0
  47. package/dist/hooks/useTourHud.d.ts.map +1 -0
  48. package/dist/hooks/useTourOverlay.d.ts +70 -0
  49. package/dist/hooks/useTourOverlay.d.ts.map +1 -0
  50. package/dist/hooks/useTourTarget.d.ts +16 -0
  51. package/dist/hooks/useTourTarget.d.ts.map +1 -0
  52. package/dist/hooks/useViewportRect.d.ts +3 -0
  53. package/dist/hooks/useViewportRect.d.ts.map +1 -0
  54. package/dist/hooks/waitForPredicate.d.ts +15 -0
  55. package/dist/hooks/waitForPredicate.d.ts.map +1 -0
  56. package/dist/index.cjs +4207 -0
  57. package/dist/index.d.ts +45 -0
  58. package/dist/index.d.ts.map +1 -0
  59. package/dist/index.mjs +3851 -0
  60. package/dist/labels.d.ts +22 -0
  61. package/dist/labels.d.ts.map +1 -0
  62. package/dist/motion/animationAdapter.d.ts +40 -0
  63. package/dist/motion/animationAdapter.d.ts.map +1 -0
  64. package/dist/motion/useHudMotion.d.ts +14 -0
  65. package/dist/motion/useHudMotion.d.ts.map +1 -0
  66. package/dist/router/index.cjs +275 -0
  67. package/dist/router/index.d.ts +5 -0
  68. package/dist/router/index.d.ts.map +1 -0
  69. package/dist/router/index.mjs +30 -0
  70. package/dist/router/nextAppRouterAdapter.cjs +224 -0
  71. package/dist/router/nextAppRouterAdapter.d.ts +2 -0
  72. package/dist/router/nextAppRouterAdapter.d.ts.map +1 -0
  73. package/dist/router/nextAppRouterAdapter.mjs +35 -0
  74. package/dist/router/nextPagesRouterAdapter.cjs +217 -0
  75. package/dist/router/nextPagesRouterAdapter.d.ts +2 -0
  76. package/dist/router/nextPagesRouterAdapter.d.ts.map +1 -0
  77. package/dist/router/nextPagesRouterAdapter.mjs +28 -0
  78. package/dist/router/reactRouterAdapter.cjs +220 -0
  79. package/dist/router/reactRouterAdapter.d.ts +2 -0
  80. package/dist/router/reactRouterAdapter.d.ts.map +1 -0
  81. package/dist/router/reactRouterAdapter.mjs +31 -0
  82. package/dist/router/routeGating.d.ts +13 -0
  83. package/dist/router/routeGating.d.ts.map +1 -0
  84. package/dist/router/tanstackRouterAdapter.cjs +202 -0
  85. package/dist/router/tanstackRouterAdapter.d.ts +2 -0
  86. package/dist/router/tanstackRouterAdapter.d.ts.map +1 -0
  87. package/dist/router/tanstackRouterAdapter.mjs +7 -0
  88. package/dist/router/tanstackRouterSync.d.ts +20 -0
  89. package/dist/router/tanstackRouterSync.d.ts.map +1 -0
  90. package/dist/router/utils.d.ts +2 -0
  91. package/dist/router/utils.d.ts.map +1 -0
  92. package/dist/utils/dom.d.ts +22 -0
  93. package/dist/utils/dom.d.ts.map +1 -0
  94. package/dist/utils/focus.d.ts +4 -0
  95. package/dist/utils/focus.d.ts.map +1 -0
  96. package/package.json +96 -0
@@ -0,0 +1,18 @@
1
+ import type { UseTourFocusDominanceOptions } from '../hooks/useTourFocusDominance';
2
+ export interface UseRadixDialogAdapterOptions extends UseTourFocusDominanceOptions {
3
+ disableEscapeClose?: boolean;
4
+ }
5
+ export interface RadixDialogAdapterResult {
6
+ dialogProps: {
7
+ modal: boolean;
8
+ };
9
+ contentProps: {
10
+ trapFocus: boolean;
11
+ onInteractOutside: (event: Event) => void;
12
+ onFocusOutside: (event: Event) => void;
13
+ onEscapeKeyDown: (event: Event) => void;
14
+ };
15
+ suspendExternalFocusTrap: boolean;
16
+ }
17
+ export declare const useRadixDialogAdapter: (options?: UseRadixDialogAdapterOptions) => RadixDialogAdapterResult;
18
+ //# sourceMappingURL=radixDialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"radixDialog.d.ts","sourceRoot":"","sources":["../../src/adapters/radixDialog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAA;AAGlF,MAAM,WAAW,4BACf,SAAQ,4BAA4B;IACpC,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAC7B;AAED,MAAM,WAAW,wBAAwB;IACvC,WAAW,EAAE;QACX,KAAK,EAAE,OAAO,CAAA;KACf,CAAA;IACD,YAAY,EAAE;QACZ,SAAS,EAAE,OAAO,CAAA;QAClB,iBAAiB,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;QACzC,cAAc,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;QACtC,eAAe,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;KACxC,CAAA;IACD,wBAAwB,EAAE,OAAO,CAAA;CAClC;AAED,eAAO,MAAM,qBAAqB,GAChC,UAAS,4BAAiC,KACzC,wBA0BF,CAAA"}
@@ -0,0 +1,24 @@
1
+ import {
2
+ createPathString,
3
+ notifyRouteChange
4
+ } from "./chunk-RPA2S5UP.mjs";
5
+
6
+ // src/router/tanstackRouterAdapter.tsx
7
+ import { useRouterState } from "@tanstack/react-router";
8
+ import { useEffect } from "react";
9
+ var useTanStackRouterTourAdapter = () => {
10
+ const location = useRouterState({
11
+ select: (state) => state.location
12
+ });
13
+ useEffect(() => {
14
+ const resolvedPathname = typeof location.pathname === "string" && location.pathname.length > 0 ? location.pathname : "/";
15
+ const resolvedSearch = "searchStr" in location && typeof location.searchStr === "string" ? location.searchStr : typeof location.search === "string" ? location.search : "";
16
+ const resolvedHash = typeof location.hash === "string" ? location.hash : "";
17
+ const path = typeof location.href === "string" && location.href.length > 0 ? location.href : createPathString(resolvedPathname, resolvedSearch, resolvedHash);
18
+ notifyRouteChange(path);
19
+ }, [location]);
20
+ };
21
+
22
+ export {
23
+ useTanStackRouterTourAdapter
24
+ };
@@ -0,0 +1,280 @@
1
+ // src/utils/dom.ts
2
+ var isBrowser = typeof window !== "undefined" && typeof document !== "undefined";
3
+ var createRect = ({
4
+ top,
5
+ left,
6
+ width,
7
+ height
8
+ }) => ({
9
+ top,
10
+ left,
11
+ width,
12
+ height,
13
+ right: left + width,
14
+ bottom: top + height
15
+ });
16
+ var toClientRect = (rect) => createRect({
17
+ top: rect.top,
18
+ left: rect.left,
19
+ width: rect.width,
20
+ height: rect.height
21
+ });
22
+ var getViewportRect = () => {
23
+ if (!isBrowser) {
24
+ return createRect({ top: 0, left: 0, width: 0, height: 0 });
25
+ }
26
+ const clientWidth = document.documentElement.clientWidth;
27
+ const clientHeight = document.documentElement.clientHeight;
28
+ const width = clientWidth > 0 ? clientWidth : window.innerWidth;
29
+ const height = clientHeight > 0 ? clientHeight : window.innerHeight;
30
+ return createRect({
31
+ top: 0,
32
+ left: 0,
33
+ width,
34
+ height
35
+ });
36
+ };
37
+ var expandRect = (rect, padding) => {
38
+ if (!isBrowser) return rect;
39
+ const viewport = getViewportRect();
40
+ const top = Math.max(0, rect.top - padding);
41
+ const left = Math.max(0, rect.left - padding);
42
+ const width = Math.min(viewport.width - left, rect.width + padding * 2);
43
+ const height = Math.min(viewport.height - top, rect.height + padding * 2);
44
+ return createRect({
45
+ top,
46
+ left,
47
+ width: Math.max(0, width),
48
+ height: Math.max(0, height)
49
+ });
50
+ };
51
+ var getClientRect = (element) => toClientRect(element.getBoundingClientRect());
52
+ var SCROLLABLE_OVERFLOW = /(auto|scroll|overlay)/i;
53
+ var isElementScrollable = (node) => {
54
+ if (!isBrowser) return false;
55
+ const style = window.getComputedStyle(node);
56
+ if (style.position === "fixed") return false;
57
+ return SCROLLABLE_OVERFLOW.test(style.overflow) || SCROLLABLE_OVERFLOW.test(style.overflowX) || SCROLLABLE_OVERFLOW.test(style.overflowY);
58
+ };
59
+ var getScrollParents = (element) => {
60
+ if (!isBrowser) return [];
61
+ const parents = [];
62
+ const seen = /* @__PURE__ */ new Set();
63
+ let current = element.parentElement;
64
+ while (current && current !== document.documentElement) {
65
+ if (current !== document.body && isElementScrollable(current)) {
66
+ if (!seen.has(current)) {
67
+ parents.push(current);
68
+ seen.add(current);
69
+ }
70
+ }
71
+ current = current.parentElement;
72
+ }
73
+ const scrollingElement = document.scrollingElement;
74
+ if (scrollingElement && scrollingElement instanceof Element && !seen.has(scrollingElement) && isElementScrollable(scrollingElement)) {
75
+ parents.push(scrollingElement);
76
+ seen.add(scrollingElement);
77
+ }
78
+ return parents;
79
+ };
80
+ var portalHost = () => isBrowser ? document.body : null;
81
+ var cachedMaskSupport = null;
82
+ var detectMaskSupport = () => {
83
+ if (!isBrowser) return false;
84
+ if ("CSS" in window) {
85
+ try {
86
+ if (window.CSS.supports("mask-image", "linear-gradient(#000,#000)")) {
87
+ return true;
88
+ }
89
+ if (window.CSS.supports("-webkit-mask-image", "linear-gradient(#000,#000)")) {
90
+ return true;
91
+ }
92
+ } catch (error) {
93
+ if (typeof console !== "undefined") {
94
+ console.warn("Flowsterix: CSS.supports check failed", error);
95
+ }
96
+ }
97
+ }
98
+ const probe = document.createElement("div");
99
+ return "maskImage" in probe.style || "webkitMaskImage" in probe.style;
100
+ };
101
+ var supportsMasking = () => {
102
+ if (!isBrowser) return false;
103
+ if (cachedMaskSupport === null) {
104
+ cachedMaskSupport = detectMaskSupport();
105
+ }
106
+ return cachedMaskSupport;
107
+ };
108
+
109
+ // src/router/routeGating.ts
110
+ var DEFAULT_POLL_MS = 150;
111
+ var normalizePathname = (pathname) => {
112
+ if (typeof pathname !== "string" || pathname.length === 0) {
113
+ return "/";
114
+ }
115
+ return pathname.startsWith("/") ? pathname : `/${pathname}`;
116
+ };
117
+ var normalizePrefixedSegment = (value, prefix) => {
118
+ if (typeof value !== "string" || value.length === 0) {
119
+ return "";
120
+ }
121
+ return value.startsWith(prefix) ? value : `${prefix}${value}`;
122
+ };
123
+ var getWindowPath = () => {
124
+ if (!isBrowser) return "/";
125
+ const { pathname, search, hash } = window.location;
126
+ return normalizePathname(pathname) + normalizePrefixedSegment(search, "?") + normalizePrefixedSegment(hash, "#");
127
+ };
128
+ var normalizeExternalPath = (path) => {
129
+ if (path.length === 0) {
130
+ return "/";
131
+ }
132
+ try {
133
+ const parsed = new URL(path, "http://flowsterix.local");
134
+ return normalizePathname(parsed.pathname) + normalizePrefixedSegment(parsed.search, "?") + normalizePrefixedSegment(parsed.hash, "#");
135
+ } catch {
136
+ const [withoutHash, hash = ""] = path.split("#");
137
+ const [base, search = ""] = withoutHash.split("?");
138
+ return normalizePathname(base) + normalizePrefixedSegment(search ? `?${search}` : "", "?") + normalizePrefixedSegment(hash ? `#${hash}` : "", "#");
139
+ }
140
+ };
141
+ var RouteGatingChannel = class {
142
+ #listeners = /* @__PURE__ */ new Set();
143
+ #currentPath = getWindowPath();
144
+ #teardown = null;
145
+ #attachDefaultListeners() {
146
+ if (!isBrowser) return;
147
+ if (this.#teardown) return;
148
+ let lastPath = getWindowPath();
149
+ const emitIfChanged = () => {
150
+ const nextPath = getWindowPath();
151
+ if (nextPath === lastPath) return;
152
+ lastPath = nextPath;
153
+ this.notify(nextPath);
154
+ };
155
+ const handler = () => emitIfChanged();
156
+ window.addEventListener("popstate", handler);
157
+ window.addEventListener("hashchange", handler);
158
+ const pollId = window.setInterval(emitIfChanged, DEFAULT_POLL_MS);
159
+ this.#teardown = () => {
160
+ window.removeEventListener("popstate", handler);
161
+ window.removeEventListener("hashchange", handler);
162
+ window.clearInterval(pollId);
163
+ this.#teardown = null;
164
+ };
165
+ }
166
+ #detachDefaultListeners() {
167
+ if (this.#listeners.size > 0) return;
168
+ this.#teardown?.();
169
+ this.#teardown = null;
170
+ }
171
+ getCurrentPath() {
172
+ if (isBrowser) {
173
+ this.#currentPath = getWindowPath();
174
+ }
175
+ return this.#currentPath;
176
+ }
177
+ notify(path) {
178
+ const resolved = typeof path === "string" && path.length > 0 ? normalizeExternalPath(path) : this.getCurrentPath();
179
+ if (resolved === this.#currentPath) {
180
+ this.#currentPath = resolved;
181
+ return;
182
+ }
183
+ this.#currentPath = resolved;
184
+ for (const listener of Array.from(this.#listeners)) {
185
+ try {
186
+ listener(resolved);
187
+ } catch (error) {
188
+ console.warn("[tour][route-gating] listener error", error);
189
+ }
190
+ }
191
+ }
192
+ subscribe(listener) {
193
+ if (this.#listeners.has(listener)) {
194
+ return () => {
195
+ this.#listeners.delete(listener);
196
+ this.#detachDefaultListeners();
197
+ };
198
+ }
199
+ this.#listeners.add(listener);
200
+ if (this.#listeners.size === 1) {
201
+ this.#attachDefaultListeners();
202
+ }
203
+ const current = this.getCurrentPath();
204
+ try {
205
+ listener(current);
206
+ } catch (error) {
207
+ console.warn("[tour][route-gating] listener error", error);
208
+ }
209
+ return () => {
210
+ this.#listeners.delete(listener);
211
+ this.#detachDefaultListeners();
212
+ };
213
+ }
214
+ };
215
+ var routeGatingChannel = new RouteGatingChannel();
216
+ var getCurrentRoutePath = () => routeGatingChannel.getCurrentPath();
217
+ var notifyRouteChange = (path) => {
218
+ routeGatingChannel.notify(path);
219
+ };
220
+ var subscribeToRouteChanges = (listener) => {
221
+ return routeGatingChannel.subscribe(listener);
222
+ };
223
+
224
+ // src/router/utils.ts
225
+ var ensurePrefix = (value, prefix) => value.startsWith(prefix) ? value : `${prefix}${value}`;
226
+ var isNonEmptyString = (value) => typeof value === "string" && value.length > 0;
227
+ var toSearchString = (value) => {
228
+ if (!isNonEmptyString(value)) {
229
+ if (value instanceof URLSearchParams) {
230
+ const serialized = value.toString();
231
+ return serialized.length > 0 ? `?${serialized}` : "";
232
+ }
233
+ if (typeof value === "object" && value !== null) {
234
+ try {
235
+ const params = new URLSearchParams();
236
+ for (const [key, raw] of Object.entries(
237
+ value
238
+ )) {
239
+ if (raw === void 0 || raw === null) continue;
240
+ params.set(key, String(raw));
241
+ }
242
+ const serialized = params.toString();
243
+ return serialized.length > 0 ? `?${serialized}` : "";
244
+ } catch {
245
+ return "";
246
+ }
247
+ }
248
+ return "";
249
+ }
250
+ if (value === "?") return "";
251
+ return value.startsWith("?") ? value : ensurePrefix(value, "?");
252
+ };
253
+ var toHashString = (value) => {
254
+ if (!isNonEmptyString(value)) {
255
+ return "";
256
+ }
257
+ if (value === "#") return "";
258
+ return value.startsWith("#") ? value : ensurePrefix(value, "#");
259
+ };
260
+ var createPathString = (pathname, search, hash) => {
261
+ const normalizedPath = isNonEmptyString(pathname) ? pathname.startsWith("/") ? pathname : `/${pathname}` : "/";
262
+ const searchPart = toSearchString(search);
263
+ const hashPart = toHashString(hash);
264
+ return `${normalizedPath}${searchPart}${hashPart}`;
265
+ };
266
+
267
+ export {
268
+ isBrowser,
269
+ getViewportRect,
270
+ expandRect,
271
+ getClientRect,
272
+ getScrollParents,
273
+ portalHost,
274
+ supportsMasking,
275
+ routeGatingChannel,
276
+ getCurrentRoutePath,
277
+ notifyRouteChange,
278
+ subscribeToRouteChanges,
279
+ createPathString
280
+ };
@@ -0,0 +1,50 @@
1
+ import {
2
+ useTanStackRouterTourAdapter
3
+ } from "./chunk-RCASLQRS.mjs";
4
+
5
+ // src/router/tanstackRouterSync.tsx
6
+ import * as TanStackRouter from "@tanstack/react-router";
7
+ import { useEffect } from "react";
8
+ var currentRouter = null;
9
+ var setTourRouter = (router) => {
10
+ currentRouter = router;
11
+ };
12
+ var setTanStackRouter = setTourRouter;
13
+ var getTourRouter = () => {
14
+ return currentRouter;
15
+ };
16
+ var getTanStackRouter = getTourRouter;
17
+ var TanStackRouterSync = ({
18
+ onRouterAvailable
19
+ }) => {
20
+ const useRouter2 = TanStackRouter.useRouter;
21
+ if (typeof useRouter2 !== "function") {
22
+ if (typeof console !== "undefined") {
23
+ console.warn(
24
+ "[tour][router] TanStackRouterSync requires @tanstack/react-router. Call this component only inside TanStack Router environments."
25
+ );
26
+ }
27
+ return null;
28
+ }
29
+ useTanStackRouterTourAdapter();
30
+ const router = useRouter2();
31
+ useEffect(() => {
32
+ setTourRouter(router);
33
+ onRouterAvailable?.(router);
34
+ return () => {
35
+ if (getTourRouter() === router) {
36
+ setTourRouter(null);
37
+ }
38
+ onRouterAvailable?.(null);
39
+ };
40
+ }, [router, onRouterAvailable]);
41
+ return null;
42
+ };
43
+
44
+ export {
45
+ setTourRouter,
46
+ setTanStackRouter,
47
+ getTourRouter,
48
+ getTanStackRouter,
49
+ TanStackRouterSync
50
+ };
@@ -0,0 +1,34 @@
1
+ import type { Transition } from 'motion/react';
2
+ import type { UseTourOverlayResult } from '../hooks/useTourOverlay';
3
+ import type { AnimationAdapterTransitions } from '../motion/animationAdapter';
4
+ export interface OverlayBackdropTransitionsOverride extends Partial<Pick<AnimationAdapterTransitions, 'overlayHighlight' | 'overlayFade'>> {
5
+ overlayHighlightCollapse?: Transition;
6
+ }
7
+ export interface OverlayBackdropProps {
8
+ overlay: UseTourOverlayResult;
9
+ zIndex?: number;
10
+ /** Background color of the overlay */
11
+ color?: string;
12
+ /**
13
+ * @deprecated Use `color` prop instead. This is kept for backwards compatibility but has no effect.
14
+ */
15
+ colorClassName?: string;
16
+ opacity?: number;
17
+ /** Box shadow for the highlight ring */
18
+ shadow?: string;
19
+ blurAmount?: number;
20
+ ariaHidden?: boolean;
21
+ /** Additional class name for the root element */
22
+ rootClassName?: string;
23
+ /** Additional class name for the overlay backdrop */
24
+ overlayClassName?: string;
25
+ /** Additional class name for fallback segments */
26
+ segmentClassName?: string;
27
+ /** Additional class name for the highlight ring */
28
+ ringClassName?: string;
29
+ showHighlightRing?: boolean;
30
+ showInteractionBlocker?: boolean;
31
+ transitionsOverride?: OverlayBackdropTransitionsOverride;
32
+ }
33
+ export declare const OverlayBackdrop: ({ overlay, zIndex, color, colorClassName: _colorClassName, opacity, shadow, blurAmount, ariaHidden, rootClassName, overlayClassName, segmentClassName, ringClassName, showHighlightRing, showInteractionBlocker, transitionsOverride, }: OverlayBackdropProps) => import("react").ReactPortal | null;
34
+ //# sourceMappingURL=OverlayBackdrop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OverlayBackdrop.d.ts","sourceRoot":"","sources":["../../src/components/OverlayBackdrop.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAG9C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AACnE,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAA;AAgE7E,MAAM,WAAW,kCACf,SAAQ,OAAO,CACb,IAAI,CAAC,2BAA2B,EAAE,kBAAkB,GAAG,aAAa,CAAC,CACtE;IACD,wBAAwB,CAAC,EAAE,UAAU,CAAA;CACtC;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,oBAAoB,CAAA;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,wCAAwC;IACxC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,iDAAiD;IACjD,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,qDAAqD;IACrD,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,kDAAkD;IAClD,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,mDAAmD;IACnD,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAChC,mBAAmB,CAAC,EAAE,kCAAkC,CAAA;CACzD;AAED,eAAO,MAAM,eAAe,GAAI,yOAgB7B,oBAAoB,uCAkStB,CAAA"}
@@ -0,0 +1,11 @@
1
+ import type { TourOverlayRect } from '../hooks/useTourOverlay';
2
+ import type { TourTargetInfo } from '../hooks/useTourTarget';
3
+ export interface TourFocusManagerProps {
4
+ active: boolean;
5
+ target: TourTargetInfo;
6
+ popoverNode: HTMLElement | null;
7
+ highlightRect?: TourOverlayRect | null;
8
+ targetRingOffset?: number;
9
+ }
10
+ export declare const TourFocusManager: ({ active, target, popoverNode, highlightRect, targetRingOffset, }: TourFocusManagerProps) => import("react").ReactPortal | null;
11
+ //# sourceMappingURL=TourFocusManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TourFocusManager.d.ts","sourceRoot":"","sources":["../../src/components/TourFocusManager.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAgB5D,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,OAAO,CAAA;IACf,MAAM,EAAE,cAAc,CAAA;IACtB,WAAW,EAAE,WAAW,GAAG,IAAI,CAAA;IAC/B,aAAa,CAAC,EAAE,eAAe,GAAG,IAAI,CAAA;IACtC,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B;AAED,eAAO,MAAM,gBAAgB,GAAI,mEAM9B,qBAAqB,uCAkVvB,CAAA"}
@@ -0,0 +1,57 @@
1
+ import type { CSSProperties, ComponentType, HTMLAttributes, PointerEventHandler, ReactNode, RefCallback } from 'react';
2
+ import type { StepPlacement } from '@flowsterix/core';
3
+ import type { MotionProps, MotionStyle } from 'motion/react';
4
+ import type { TourTargetInfo } from '../hooks/useTourTarget';
5
+ import type { AnimationAdapterTransitions } from '../motion/animationAdapter';
6
+ type MotionElementProps = MotionProps & Omit<HTMLAttributes<HTMLElement>, 'style'> & {
7
+ style?: CSSProperties | MotionStyle;
8
+ };
9
+ type MotionElementComponent = ComponentType<MotionElementProps>;
10
+ export type TourPopoverLayoutMode = 'floating' | 'docked' | 'manual' | 'mobile';
11
+ export interface TourPopoverPortalRenderProps {
12
+ Container: MotionElementComponent;
13
+ Content: MotionElementComponent;
14
+ containerProps: MotionElementProps & Record<string, unknown> & {
15
+ ref: RefCallback<HTMLElement>;
16
+ style: CSSProperties;
17
+ };
18
+ contentProps: MotionElementProps & Record<string, unknown> & {
19
+ key?: string | null;
20
+ };
21
+ layoutMode: TourPopoverLayoutMode;
22
+ isDragging: boolean;
23
+ showDragHandle: boolean;
24
+ dragHandleProps: {
25
+ type: 'button';
26
+ 'aria-label': string;
27
+ style: CSSProperties;
28
+ onPointerDown: PointerEventHandler<HTMLButtonElement>;
29
+ };
30
+ descriptionProps: {
31
+ id?: string;
32
+ text?: string;
33
+ };
34
+ }
35
+ export interface TourPopoverPortalProps {
36
+ target: TourTargetInfo;
37
+ children: (props: TourPopoverPortalRenderProps) => ReactNode;
38
+ offset?: number;
39
+ width?: number | string;
40
+ maxWidth?: number | string;
41
+ zIndex?: number;
42
+ placement?: StepPlacement;
43
+ role?: string;
44
+ ariaLabel?: string;
45
+ ariaDescribedBy?: string;
46
+ ariaModal?: boolean;
47
+ descriptionId?: string;
48
+ descriptionText?: string;
49
+ onContainerChange?: (node: HTMLDivElement | null) => void;
50
+ layoutId?: string;
51
+ containerComponent?: MotionElementComponent;
52
+ contentComponent?: MotionElementComponent;
53
+ transitionsOverride?: Partial<AnimationAdapterTransitions>;
54
+ }
55
+ export declare const TourPopoverPortal: ({ target, children, offset, width, maxWidth, zIndex, placement, role, ariaLabel, ariaDescribedBy, ariaModal, descriptionId, descriptionText, onContainerChange, layoutId, containerComponent, contentComponent, transitionsOverride, }: TourPopoverPortalProps) => import("react").ReactPortal | null;
56
+ export {};
57
+ //# sourceMappingURL=TourPopoverPortal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TourPopoverPortal.d.ts","sourceRoot":"","sources":["../../src/components/TourPopoverPortal.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EACb,cAAc,EACd,mBAAmB,EACnB,SAAS,EACT,WAAW,EACZ,MAAM,OAAO,CAAA;AAYd,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAc,MAAM,cAAc,CAAA;AAExE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAE5D,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAA;AAuB7E,KAAK,kBAAkB,GAAG,WAAW,GACnC,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC,GAAG;IAC3C,KAAK,CAAC,EAAE,aAAa,GAAG,WAAW,CAAA;CACpC,CAAA;AAEH,KAAK,sBAAsB,GAAG,aAAa,CAAC,kBAAkB,CAAC,CAAA;AAoB/D,MAAM,MAAM,qBAAqB,GAAG,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAA;AAE/E,MAAM,WAAW,4BAA4B;IAC3C,SAAS,EAAE,sBAAsB,CAAA;IACjC,OAAO,EAAE,sBAAsB,CAAA;IAC/B,cAAc,EAAE,kBAAkB,GAChC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;QACxB,GAAG,EAAE,WAAW,CAAC,WAAW,CAAC,CAAA;QAC7B,KAAK,EAAE,aAAa,CAAA;KACrB,CAAA;IACH,YAAY,EAAE,kBAAkB,GAC9B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;QAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAA;IACnD,UAAU,EAAE,qBAAqB,CAAA;IACjC,UAAU,EAAE,OAAO,CAAA;IACnB,cAAc,EAAE,OAAO,CAAA;IACvB,eAAe,EAAE;QACf,IAAI,EAAE,QAAQ,CAAA;QACd,YAAY,EAAE,MAAM,CAAA;QACpB,KAAK,EAAE,aAAa,CAAA;QACpB,aAAa,EAAE,mBAAmB,CAAC,iBAAiB,CAAC,CAAA;KACtD,CAAA;IACD,gBAAgB,EAAE;QAChB,EAAE,CAAC,EAAE,MAAM,CAAA;QACX,IAAI,CAAC,EAAE,MAAM,CAAA;KACd,CAAA;CACF;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,cAAc,CAAA;IACtB,QAAQ,EAAE,CAAC,KAAK,EAAE,4BAA4B,KAAK,SAAS,CAAA;IAC5D,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACvB,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,aAAa,CAAA;IACzB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI,KAAK,IAAI,CAAA;IACzD,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,kBAAkB,CAAC,EAAE,sBAAsB,CAAA;IAC3C,gBAAgB,CAAC,EAAE,sBAAsB,CAAA;IACzC,mBAAmB,CAAC,EAAE,OAAO,CAAC,2BAA2B,CAAC,CAAA;CAC3D;AAED,eAAO,MAAM,iBAAiB,GAAI,wOAmB/B,sBAAsB,uCAmsBxB,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=TourFocusManager.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TourFocusManager.test.d.ts","sourceRoot":"","sources":["../../../src/components/__tests__/TourFocusManager.test.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,56 @@
1
+ import type { BackdropInteractionMode, EventBus, FlowAnalyticsHandlers, FlowCancelReason, FlowDefinition, FlowEvents, FlowState, StartFlowOptions, Step, StorageAdapter, VersionMismatchInfo } from '@flowsterix/core';
2
+ import type { Dispatch, PropsWithChildren, ReactNode, SetStateAction } from 'react';
3
+ import type { TourLabels } from './labels';
4
+ import type { AnimationAdapter } from './motion/animationAdapter';
5
+ export interface DelayAdvanceInfo {
6
+ flowId: string;
7
+ stepId: string;
8
+ totalMs: number;
9
+ startedAt: number;
10
+ endsAt: number;
11
+ }
12
+ export interface TourProviderProps {
13
+ flows: Array<FlowDefinition<ReactNode>>;
14
+ children: ReactNode;
15
+ storageAdapter?: StorageAdapter;
16
+ storageNamespace?: string;
17
+ persistOnChange?: boolean;
18
+ defaultDebug?: boolean;
19
+ animationAdapter?: AnimationAdapter;
20
+ reducedMotionAdapter?: AnimationAdapter;
21
+ autoDetectReducedMotion?: boolean;
22
+ analytics?: FlowAnalyticsHandlers<ReactNode>;
23
+ backdropInteraction?: BackdropInteractionMode;
24
+ lockBodyScroll?: boolean;
25
+ /** Customize UI labels for internationalization */
26
+ labels?: Partial<TourLabels>;
27
+ /** Callback when a version mismatch is detected and resolved */
28
+ onVersionMismatch?: (info: VersionMismatchInfo) => void;
29
+ }
30
+ export interface TourContextValue {
31
+ flows: Map<string, FlowDefinition<ReactNode>>;
32
+ activeFlowId: string | null;
33
+ state: FlowState | null;
34
+ activeStep: Step<ReactNode> | null;
35
+ startFlow: (flowId: string, options?: StartFlowOptions) => FlowState;
36
+ next: () => FlowState;
37
+ back: () => FlowState;
38
+ goToStep: (step: number | string) => FlowState;
39
+ pause: () => FlowState;
40
+ resume: () => FlowState;
41
+ cancel: (reason?: FlowCancelReason) => FlowState;
42
+ complete: () => FlowState;
43
+ events: EventBus<FlowEvents<ReactNode>> | null;
44
+ debugEnabled: boolean;
45
+ setDebugEnabled: (value: boolean) => void;
46
+ toggleDebug: () => void;
47
+ delayInfo: DelayAdvanceInfo | null;
48
+ /** @internal */
49
+ setDelayInfo: Dispatch<SetStateAction<DelayAdvanceInfo | null>>;
50
+ backdropInteraction: BackdropInteractionMode;
51
+ lockBodyScroll: boolean;
52
+ }
53
+ export declare const TourProvider: ({ flows, children, storageAdapter, storageNamespace, persistOnChange, defaultDebug, animationAdapter: animationAdapterProp, reducedMotionAdapter, autoDetectReducedMotion, analytics, backdropInteraction: backdropInteractionProp, lockBodyScroll: lockBodyScrollProp, labels: labelsProp, onVersionMismatch, }: PropsWithChildren<TourProviderProps>) => import("react/jsx-runtime").JSX.Element;
54
+ export declare const useTour: () => TourContextValue;
55
+ export declare const useTourEvents: <TEventKey extends Extract<keyof FlowEvents<ReactNode>, string>>(event: TEventKey, handler: (payload: FlowEvents<ReactNode>[TEventKey]) => void) => void;
56
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=scrollMargin.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scrollMargin.test.d.ts","sourceRoot":"","sources":["../../../src/hooks/__tests__/scrollMargin.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=useBodyScrollLock.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useBodyScrollLock.test.d.ts","sourceRoot":"","sources":["../../../src/hooks/__tests__/useBodyScrollLock.test.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=useHiddenTargetFallback.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useHiddenTargetFallback.test.d.ts","sourceRoot":"","sources":["../../../src/hooks/__tests__/useHiddenTargetFallback.test.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=waitForPredicate.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"waitForPredicate.test.d.ts","sourceRoot":"","sources":["../../../src/hooks/__tests__/waitForPredicate.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,15 @@
1
+ export type ScrollMarginInput = number | {
2
+ top?: number;
3
+ bottom?: number;
4
+ left?: number;
5
+ right?: number;
6
+ };
7
+ export interface ScrollMargin {
8
+ top: number;
9
+ bottom: number;
10
+ left: number;
11
+ right: number;
12
+ }
13
+ export declare const DEFAULT_SCROLL_MARGIN = 16;
14
+ export declare const resolveScrollMargin: (margin?: ScrollMarginInput, fallback?: number) => ScrollMargin;
15
+ //# sourceMappingURL=scrollMargin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scrollMargin.d.ts","sourceRoot":"","sources":["../../src/hooks/scrollMargin.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,GACzB,MAAM,GACN;IACE,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAEL,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;CACd;AAED,eAAO,MAAM,qBAAqB,KAAK,CAAA;AASvC,eAAO,MAAM,mBAAmB,GAC9B,SAAS,iBAAiB,EAC1B,iBAAgC,KAC/B,YAiBF,CAAA"}
@@ -0,0 +1,3 @@
1
+ import type { TourTargetInfo } from './useTourTarget';
2
+ export declare const useAdvanceRules: (target: TourTargetInfo) => void;
3
+ //# sourceMappingURL=useAdvanceRules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAdvanceRules.d.ts","sourceRoot":"","sources":["../../src/hooks/useAdvanceRules.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AA2DrD,eAAO,MAAM,eAAe,GAAI,QAAQ,cAAc,SA6MrD,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare const useBodyScrollLock: (enabled: boolean) => void;
2
+ //# sourceMappingURL=useBodyScrollLock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useBodyScrollLock.d.ts","sourceRoot":"","sources":["../../src/hooks/useBodyScrollLock.ts"],"names":[],"mappings":"AA0BA,eAAO,MAAM,iBAAiB,GAAI,SAAS,OAAO,SAQjD,CAAA"}
@@ -0,0 +1,14 @@
1
+ export interface DelayAdvanceProgress {
2
+ isActive: boolean;
3
+ flowId: string | null;
4
+ stepId: string | null;
5
+ totalMs: number;
6
+ remainingMs: number;
7
+ elapsedMs: number;
8
+ fractionElapsed: number;
9
+ fractionRemaining: number;
10
+ startedAt: number | null;
11
+ endsAt: number | null;
12
+ }
13
+ export declare const useDelayAdvance: () => DelayAdvanceProgress;
14
+ //# sourceMappingURL=useDelayAdvance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDelayAdvance.d.ts","sourceRoot":"","sources":["../../src/hooks/useDelayAdvance.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,OAAO,CAAA;IACjB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,eAAe,EAAE,MAAM,CAAA;IACvB,iBAAiB,EAAE,MAAM,CAAA;IACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CACtB;AAOD,eAAO,MAAM,eAAe,QAAO,oBAwFlC,CAAA"}