@flowsterix/react 0.4.2 → 0.5.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.
@@ -51,7 +51,12 @@ export interface TourPopoverPortalProps {
51
51
  containerComponent?: MotionElementComponent;
52
52
  contentComponent?: MotionElementComponent;
53
53
  transitionsOverride?: Partial<AnimationAdapterTransitions>;
54
+ /**
55
+ * When true, the popover is hidden during the grace period while waiting for target.
56
+ * The backdrop will show but the popover content remains invisible.
57
+ */
58
+ isInGracePeriod?: boolean;
54
59
  }
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;
60
+ export declare const TourPopoverPortal: ({ target, children, offset, width, maxWidth, zIndex, placement, role, ariaLabel, ariaDescribedBy, ariaModal, descriptionId, descriptionText, onContainerChange, layoutId, containerComponent, contentComponent, transitionsOverride, isInGracePeriod, }: TourPopoverPortalProps) => import("react").ReactPortal | null;
56
61
  export {};
57
62
  //# sourceMappingURL=TourPopoverPortal.d.ts.map
@@ -1 +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"}
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;IAC1D;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAA;CAC1B;AAED,eAAO,MAAM,iBAAiB,GAAI,yPAoB/B,sBAAsB,uCAysBxB,CAAA"}
@@ -11,6 +11,11 @@ export interface UseHiddenTargetFallbackConfig {
11
11
  export interface UseHiddenTargetFallbackResult {
12
12
  target: TourTargetInfo;
13
13
  usingScreenFallback: boolean;
14
+ /**
15
+ * True during the initial grace period while waiting for target to resolve.
16
+ * During this time, backdrop should show but popover should be hidden.
17
+ */
18
+ isInGracePeriod: boolean;
14
19
  }
15
20
  export declare const useHiddenTargetFallback: ({ step, target, viewportRect, onSkip, }: UseHiddenTargetFallbackConfig) => UseHiddenTargetFallbackResult;
16
21
  //# sourceMappingURL=useHiddenTargetFallback.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useHiddenTargetFallback.d.ts","sourceRoot":"","sources":["../../src/hooks/useHiddenTargetFallback.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AAC5C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAGtC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAElD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAMrD,MAAM,WAAW,6BAA6B;IAC5C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAA;IAC5B,MAAM,EAAE,cAAc,CAAA;IACtB,YAAY,EAAE,cAAc,CAAA;IAC5B,MAAM,EAAE,MAAM,IAAI,CAAA;CACnB;AAED,MAAM,WAAW,6BAA6B;IAC5C,MAAM,EAAE,cAAc,CAAA;IACtB,mBAAmB,EAAE,OAAO,CAAA;CAC7B;AAED,eAAO,MAAM,uBAAuB,GAAI,yCAKrC,6BAA6B,KAAG,6BAkGlC,CAAA"}
1
+ {"version":3,"file":"useHiddenTargetFallback.d.ts","sourceRoot":"","sources":["../../src/hooks/useHiddenTargetFallback.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AAC5C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAGtC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAElD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAOrD,MAAM,WAAW,6BAA6B;IAC5C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAA;IAC5B,MAAM,EAAE,cAAc,CAAA;IACtB,YAAY,EAAE,cAAc,CAAA;IAC5B,MAAM,EAAE,MAAM,IAAI,CAAA;CACnB;AAED,MAAM,WAAW,6BAA6B;IAC5C,MAAM,EAAE,cAAc,CAAA;IACtB,mBAAmB,EAAE,OAAO,CAAA;IAC5B;;;OAGG;IACH,eAAe,EAAE,OAAO,CAAA;CACzB;AAED,eAAO,MAAM,uBAAuB,GAAI,yCAKrC,6BAA6B,KAAG,6BA+HlC,CAAA"}
@@ -22,6 +22,11 @@ export interface UseHudStateResult {
22
22
  hudRenderMode: FlowHudRenderMode;
23
23
  matchesFlowFilter: boolean;
24
24
  activeFlowId: string | null;
25
+ /**
26
+ * True during grace period while waiting for target to resolve.
27
+ * Backdrop should show but popover should be hidden.
28
+ */
29
+ isInGracePeriod: boolean;
25
30
  }
26
31
  export declare const useHudState: (options?: UseHudStateOptions) => UseHudStateResult;
27
32
  //# sourceMappingURL=useHudState.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useHudState.d.ts","sourceRoot":"","sources":["../../src/hooks/useHudState.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,iBAAiB,EACjB,SAAS,EACT,IAAI,EACL,MAAM,kBAAkB,CAAA;AACzB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAMtC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAIrD,MAAM,WAAW,kBAAkB;IACjC;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAA;CAChC;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,SAAS,GAAG,IAAI,CAAA;IACvB,YAAY,EAAE,SAAS,GAAG,IAAI,CAAA;IAC9B,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAA;IACnC,YAAY,EAAE,OAAO,CAAA;IACrB,aAAa,EAAE,OAAO,CAAA;IACtB,eAAe,EAAE,OAAO,CAAA;IACxB,MAAM,EAAE,cAAc,CAAA;IACtB,SAAS,EAAE,cAAc,CAAA;IACzB,cAAc,EAAE,cAAc,GAAG,IAAI,CAAA;IACrC,aAAa,EAAE,iBAAiB,CAAA;IAChC,iBAAiB,EAAE,OAAO,CAAA;IAC1B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;CAC5B;AASD,eAAO,MAAM,WAAW,GACtB,UAAS,kBAAuB,KAC/B,iBAsFF,CAAA"}
1
+ {"version":3,"file":"useHudState.d.ts","sourceRoot":"","sources":["../../src/hooks/useHudState.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,iBAAiB,EACjB,SAAS,EACT,IAAI,EACL,MAAM,kBAAkB,CAAA;AACzB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAMtC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAIrD,MAAM,WAAW,kBAAkB;IACjC;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAA;CAChC;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,SAAS,GAAG,IAAI,CAAA;IACvB,YAAY,EAAE,SAAS,GAAG,IAAI,CAAA;IAC9B,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAA;IACnC,YAAY,EAAE,OAAO,CAAA;IACrB,aAAa,EAAE,OAAO,CAAA;IACtB,eAAe,EAAE,OAAO,CAAA;IACxB,MAAM,EAAE,cAAc,CAAA;IACtB,SAAS,EAAE,cAAc,CAAA;IACzB,cAAc,EAAE,cAAc,GAAG,IAAI,CAAA;IACrC,aAAa,EAAE,iBAAiB,CAAA;IAChC,iBAAiB,EAAE,OAAO,CAAA;IAC1B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B;;;OAGG;IACH,eAAe,EAAE,OAAO,CAAA;CACzB;AASD,eAAO,MAAM,WAAW,GACtB,UAAS,kBAAuB,KAC/B,iBAuFF,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"useHudTargetIssue.d.ts","sourceRoot":"","sources":["../../src/hooks/useHudTargetIssue.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAErD,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,QAAQ,GAAG,UAAU,CAAA;AAElE,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,kBAAkB,CAAA;IACxB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,wBAAwB;IACvC;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,cAAc,GAAG,IAAI,CAAA;IAC5B,QAAQ,EAAE,cAAc,GAAG,IAAI,CAAA;CAChC;AAiCD,eAAO,MAAM,iBAAiB,GAC5B,QAAQ,cAAc,EACtB,UAAU,wBAAwB,KACjC,uBA6BF,CAAA"}
1
+ {"version":3,"file":"useHudTargetIssue.d.ts","sourceRoot":"","sources":["../../src/hooks/useHudTargetIssue.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAErD,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,QAAQ,GAAG,UAAU,CAAA;AAElE,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,kBAAkB,CAAA;IACxB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,wBAAwB;IACvC;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,cAAc,GAAG,IAAI,CAAA;IAC5B,QAAQ,EAAE,cAAc,GAAG,IAAI,CAAA;CAChC;AA4BD,eAAO,MAAM,iBAAiB,GAC5B,QAAQ,cAAc,EACtB,UAAU,wBAAwB,KACjC,uBA6BF,CAAA"}
@@ -21,6 +21,11 @@ export interface UseTourOverlayOptions {
21
21
  radius?: number;
22
22
  edgeBuffer?: number;
23
23
  interactionMode?: BackdropInteractionMode;
24
+ /**
25
+ * When true, the overlay is in a grace period waiting for the target to resolve.
26
+ * The backdrop will show but without a highlight cutout.
27
+ */
28
+ isInGracePeriod?: boolean;
24
29
  }
25
30
  export interface UseTourOverlayResult {
26
31
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"useTourOverlay.d.ts","sourceRoot":"","sources":["../../src/hooks/useTourOverlay.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAA;AAG/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAOlD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAErD,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,cAAc,CAAA;IACtB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,eAAe,CAAC,EAAE,uBAAuB,CAAA;CAC1C;AAED,MAAM,WAAW,oBAAoB;IACnC;;OAEG;IACH,QAAQ,EAAE,OAAO,CAAA;IACjB;;OAEG;IACH,SAAS,EAAE;QACT,IAAI,EAAE,eAAe,GAAG,IAAI,CAAA;QAC5B,OAAO,EAAE,MAAM,CAAA;QACf,OAAO,EAAE,MAAM,CAAA;QACf,MAAM,EAAE,cAAc,GAAG,IAAI,CAAA;QAC7B,QAAQ,EAAE,OAAO,CAAA;KAClB,CAAA;IACD;;OAEG;IACH,UAAU,EAAE,OAAO,CAAA;IACnB;;OAEG;IACH,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB;;OAEG;IACH,gBAAgB,EAAE,KAAK,CAAC,kBAAkB,CAAC,GAAG,IAAI,CAAA;IAClD;;OAEG;IACH,eAAe,EAAE,KAAK,CAAC,kBAAkB,CAAC,GAAG,IAAI,CAAA;IACjD;;OAEG;IACH,eAAe,EAAE,OAAO,CAAA;IACxB;;OAEG;IACH,QAAQ,EAAE,cAAc,CAAA;CACzB;AAMD,eAAO,MAAM,cAAc,GACzB,SAAS,qBAAqB,KAC7B,oBAyPF,CAAA"}
1
+ {"version":3,"file":"useTourOverlay.d.ts","sourceRoot":"","sources":["../../src/hooks/useTourOverlay.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAA;AAG/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAOlD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAErD,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,cAAc,CAAA;IACtB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,eAAe,CAAC,EAAE,uBAAuB,CAAA;IACzC;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAA;CAC1B;AAED,MAAM,WAAW,oBAAoB;IACnC;;OAEG;IACH,QAAQ,EAAE,OAAO,CAAA;IACjB;;OAEG;IACH,SAAS,EAAE;QACT,IAAI,EAAE,eAAe,GAAG,IAAI,CAAA;QAC5B,OAAO,EAAE,MAAM,CAAA;QACf,OAAO,EAAE,MAAM,CAAA;QACf,MAAM,EAAE,cAAc,GAAG,IAAI,CAAA;QAC7B,QAAQ,EAAE,OAAO,CAAA;KAClB,CAAA;IACD;;OAEG;IACH,UAAU,EAAE,OAAO,CAAA;IACnB;;OAEG;IACH,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB;;OAEG;IACH,gBAAgB,EAAE,KAAK,CAAC,kBAAkB,CAAC,GAAG,IAAI,CAAA;IAClD;;OAEG;IACH,eAAe,EAAE,KAAK,CAAC,kBAAkB,CAAC,GAAG,IAAI,CAAA;IACjD;;OAEG;IACH,eAAe,EAAE,OAAO,CAAA;IACxB;;OAEG;IACH,QAAQ,EAAE,cAAc,CAAA;CACzB;AAMD,eAAO,MAAM,cAAc,GACzB,SAAS,qBAAqB,KAC7B,oBA2PF,CAAA"}
package/dist/index.cjs CHANGED
@@ -1878,6 +1878,7 @@ var useAdvanceRules = (target) => {
1878
1878
  // src/hooks/useHiddenTargetFallback.ts
1879
1879
  var import_react7 = require("react");
1880
1880
  var DEFAULT_DELAY_MS = 900;
1881
+ var DEFAULT_GRACE_PERIOD_MS = 400;
1881
1882
  var useHiddenTargetFallback = ({
1882
1883
  step,
1883
1884
  target,
@@ -1885,7 +1886,9 @@ var useHiddenTargetFallback = ({
1885
1886
  onSkip
1886
1887
  }) => {
1887
1888
  const [usingScreenFallback, setUsingScreenFallback] = (0, import_react7.useState)(false);
1889
+ const [isInGracePeriod, setIsInGracePeriod] = (0, import_react7.useState)(false);
1888
1890
  const timeoutRef = (0, import_react7.useRef)(null);
1891
+ const graceTimeoutRef = (0, import_react7.useRef)(null);
1889
1892
  const skipTriggeredRef = (0, import_react7.useRef)(false);
1890
1893
  const hiddenMode = step?.targetBehavior?.hidden ?? "screen";
1891
1894
  const hiddenDelayMs = Math.max(
@@ -1898,26 +1901,43 @@ var useHiddenTargetFallback = ({
1898
1901
  timeoutRef.current = null;
1899
1902
  }
1900
1903
  };
1904
+ const clearGraceTimeout = () => {
1905
+ if (graceTimeoutRef.current !== null) {
1906
+ globalThis.clearTimeout(graceTimeoutRef.current);
1907
+ graceTimeoutRef.current = null;
1908
+ }
1909
+ };
1901
1910
  (0, import_react7.useEffect)(() => {
1902
1911
  skipTriggeredRef.current = false;
1903
1912
  setUsingScreenFallback(false);
1913
+ setIsInGracePeriod(false);
1904
1914
  clearPendingTimeout();
1905
- return clearPendingTimeout;
1915
+ clearGraceTimeout();
1916
+ return () => {
1917
+ clearPendingTimeout();
1918
+ clearGraceTimeout();
1919
+ };
1906
1920
  }, [step?.id]);
1907
1921
  (0, import_react7.useEffect)(() => {
1908
1922
  if (!isBrowser) return void 0;
1909
1923
  if (!step) return void 0;
1910
1924
  clearPendingTimeout();
1925
+ clearGraceTimeout();
1911
1926
  const isHiddenOrDetached = (target.visibility === "hidden" || target.visibility === "detached") && target.status === "ready";
1912
1927
  const isMissingWithNoRect = target.visibility === "missing" && target.status === "resolving" && target.rect === null && target.lastResolvedRect === null;
1913
1928
  const shouldHandleHiddenTarget = !target.isScreen && (isHiddenOrDetached || isMissingWithNoRect);
1914
1929
  if (!shouldHandleHiddenTarget) {
1915
1930
  setUsingScreenFallback(false);
1931
+ setIsInGracePeriod(false);
1916
1932
  return void 0;
1917
1933
  }
1934
+ setIsInGracePeriod(true);
1918
1935
  if (hiddenMode !== "screen") {
1919
1936
  setUsingScreenFallback(false);
1920
1937
  }
1938
+ graceTimeoutRef.current = globalThis.setTimeout(() => {
1939
+ setIsInGracePeriod(false);
1940
+ }, DEFAULT_GRACE_PERIOD_MS);
1921
1941
  timeoutRef.current = globalThis.setTimeout(() => {
1922
1942
  if (hiddenMode === "screen") {
1923
1943
  setUsingScreenFallback(true);
@@ -1928,7 +1948,10 @@ var useHiddenTargetFallback = ({
1928
1948
  onSkip();
1929
1949
  }
1930
1950
  }, hiddenDelayMs);
1931
- return clearPendingTimeout;
1951
+ return () => {
1952
+ clearPendingTimeout();
1953
+ clearGraceTimeout();
1954
+ };
1932
1955
  }, [
1933
1956
  step,
1934
1957
  target.visibility,
@@ -1956,7 +1979,8 @@ var useHiddenTargetFallback = ({
1956
1979
  }, [target, usingScreenFallback, viewportRect]);
1957
1980
  return {
1958
1981
  target: resolvedTarget,
1959
- usingScreenFallback
1982
+ usingScreenFallback,
1983
+ isInGracePeriod
1960
1984
  };
1961
1985
  };
1962
1986
 
@@ -2053,7 +2077,7 @@ var useHudState = (options = {}) => {
2053
2077
  next();
2054
2078
  }
2055
2079
  }, [activeFlowId, complete, flows, next, runningState]);
2056
- const { target: hudTarget } = useHiddenTargetFallback({
2080
+ const { target: hudTarget, isInGracePeriod } = useHiddenTargetFallback({
2057
2081
  step: runningStep,
2058
2082
  target,
2059
2083
  viewportRect,
@@ -2075,7 +2099,8 @@ var useHudState = (options = {}) => {
2075
2099
  flowHudOptions,
2076
2100
  hudRenderMode,
2077
2101
  matchesFlowFilter,
2078
- activeFlowId
2102
+ activeFlowId,
2103
+ isInGracePeriod
2079
2104
  };
2080
2105
  };
2081
2106
 
@@ -2338,17 +2363,12 @@ var deriveTargetIssue = (target) => {
2338
2363
  if (target.status === "idle") return null;
2339
2364
  switch (target.visibility) {
2340
2365
  case "missing":
2341
- return {
2342
- type: "missing",
2343
- title: "Looking for the target",
2344
- body: "Flowsterix is still trying to find this element. Make sure the UI piece is mounted or adjust the selector.",
2345
- hint: target.rectSource === "stored" ? "Showing the last known position until the element returns." : void 0
2346
- };
2347
2366
  case "hidden":
2348
2367
  return {
2349
- type: "hidden",
2350
- title: "Target is hidden",
2351
- body: "The element exists but is currently hidden, collapsed, or zero-sized. Expand it so the highlight can lock on."
2368
+ type: target.visibility,
2369
+ title: "Target not visible",
2370
+ body: "The target element is not currently visible. Make sure the UI piece is mounted and displayed.",
2371
+ hint: target.rectSource === "stored" ? "Showing the last known position until the element returns." : void 0
2352
2372
  };
2353
2373
  case "detached":
2354
2374
  return {
@@ -2483,7 +2503,8 @@ var useTourOverlay = (options) => {
2483
2503
  padding = DEFAULT_PADDING,
2484
2504
  radius = DEFAULT_RADIUS,
2485
2505
  edgeBuffer = DEFAULT_EDGE_BUFFER,
2486
- interactionMode = "passthrough"
2506
+ interactionMode = "passthrough",
2507
+ isInGracePeriod = false
2487
2508
  } = options;
2488
2509
  const hasShownRef = (0, import_react16.useRef)(false);
2489
2510
  const lastReadyTargetRef = (0, import_react16.useRef)(null);
@@ -2538,7 +2559,7 @@ var useTourOverlay = (options) => {
2538
2559
  radius: highlightRadius
2539
2560
  } : null;
2540
2561
  const maskCapable = (0, import_react16.useMemo)(() => supportsMasking(), []);
2541
- const isActive = target.status === "ready" || target.status === "resolving" && cachedTarget !== null;
2562
+ const isActive = target.status === "ready" || target.status === "resolving" && cachedTarget !== null || isInGracePeriod;
2542
2563
  const shouldMask = maskCapable && isActive;
2543
2564
  const maskId = (0, import_react16.useMemo)(
2544
2565
  () => `tour-overlay-mask-${Math.random().toString(36).slice(2, 10)}`,
@@ -3179,7 +3200,8 @@ var TourPopoverPortal = ({
3179
3200
  layoutId,
3180
3201
  containerComponent,
3181
3202
  contentComponent,
3182
- transitionsOverride
3203
+ transitionsOverride,
3204
+ isInGracePeriod = false
3183
3205
  }) => {
3184
3206
  if (!isBrowser) return null;
3185
3207
  const host = portalHost();
@@ -3210,6 +3232,7 @@ var TourPopoverPortal = ({
3210
3232
  const cachedTarget = lastReadyTargetRef.current;
3211
3233
  const resolvedRect = target.rect ?? target.lastResolvedRect ?? cachedTarget?.rect ?? null;
3212
3234
  const resolvedIsScreen = target.status === "ready" ? target.isScreen : cachedTarget?.isScreen ?? target.isScreen;
3235
+ const shouldHideForGracePeriod = isInGracePeriod && !resolvedRect;
3213
3236
  const fallbackRect = resolvedRect ?? viewport;
3214
3237
  const fallbackIsScreen = resolvedIsScreen;
3215
3238
  const [floatingSize, setFloatingSize] = (0, import_react20.useState)(null);
@@ -3715,6 +3738,7 @@ var TourPopoverPortal = ({
3715
3738
  dragHandleProps,
3716
3739
  descriptionProps
3717
3740
  };
3741
+ if (shouldHideForGracePeriod) return null;
3718
3742
  return (0, import_react_dom2.createPortal)(children(context), host);
3719
3743
  };
3720
3744
 
package/dist/index.mjs CHANGED
@@ -1619,6 +1619,7 @@ var useAdvanceRules = (target) => {
1619
1619
  // src/hooks/useHiddenTargetFallback.ts
1620
1620
  import { useEffect as useEffect5, useMemo as useMemo3, useRef as useRef3, useState as useState4 } from "react";
1621
1621
  var DEFAULT_DELAY_MS = 900;
1622
+ var DEFAULT_GRACE_PERIOD_MS = 400;
1622
1623
  var useHiddenTargetFallback = ({
1623
1624
  step,
1624
1625
  target,
@@ -1626,7 +1627,9 @@ var useHiddenTargetFallback = ({
1626
1627
  onSkip
1627
1628
  }) => {
1628
1629
  const [usingScreenFallback, setUsingScreenFallback] = useState4(false);
1630
+ const [isInGracePeriod, setIsInGracePeriod] = useState4(false);
1629
1631
  const timeoutRef = useRef3(null);
1632
+ const graceTimeoutRef = useRef3(null);
1630
1633
  const skipTriggeredRef = useRef3(false);
1631
1634
  const hiddenMode = step?.targetBehavior?.hidden ?? "screen";
1632
1635
  const hiddenDelayMs = Math.max(
@@ -1639,26 +1642,43 @@ var useHiddenTargetFallback = ({
1639
1642
  timeoutRef.current = null;
1640
1643
  }
1641
1644
  };
1645
+ const clearGraceTimeout = () => {
1646
+ if (graceTimeoutRef.current !== null) {
1647
+ globalThis.clearTimeout(graceTimeoutRef.current);
1648
+ graceTimeoutRef.current = null;
1649
+ }
1650
+ };
1642
1651
  useEffect5(() => {
1643
1652
  skipTriggeredRef.current = false;
1644
1653
  setUsingScreenFallback(false);
1654
+ setIsInGracePeriod(false);
1645
1655
  clearPendingTimeout();
1646
- return clearPendingTimeout;
1656
+ clearGraceTimeout();
1657
+ return () => {
1658
+ clearPendingTimeout();
1659
+ clearGraceTimeout();
1660
+ };
1647
1661
  }, [step?.id]);
1648
1662
  useEffect5(() => {
1649
1663
  if (!isBrowser) return void 0;
1650
1664
  if (!step) return void 0;
1651
1665
  clearPendingTimeout();
1666
+ clearGraceTimeout();
1652
1667
  const isHiddenOrDetached = (target.visibility === "hidden" || target.visibility === "detached") && target.status === "ready";
1653
1668
  const isMissingWithNoRect = target.visibility === "missing" && target.status === "resolving" && target.rect === null && target.lastResolvedRect === null;
1654
1669
  const shouldHandleHiddenTarget = !target.isScreen && (isHiddenOrDetached || isMissingWithNoRect);
1655
1670
  if (!shouldHandleHiddenTarget) {
1656
1671
  setUsingScreenFallback(false);
1672
+ setIsInGracePeriod(false);
1657
1673
  return void 0;
1658
1674
  }
1675
+ setIsInGracePeriod(true);
1659
1676
  if (hiddenMode !== "screen") {
1660
1677
  setUsingScreenFallback(false);
1661
1678
  }
1679
+ graceTimeoutRef.current = globalThis.setTimeout(() => {
1680
+ setIsInGracePeriod(false);
1681
+ }, DEFAULT_GRACE_PERIOD_MS);
1662
1682
  timeoutRef.current = globalThis.setTimeout(() => {
1663
1683
  if (hiddenMode === "screen") {
1664
1684
  setUsingScreenFallback(true);
@@ -1669,7 +1689,10 @@ var useHiddenTargetFallback = ({
1669
1689
  onSkip();
1670
1690
  }
1671
1691
  }, hiddenDelayMs);
1672
- return clearPendingTimeout;
1692
+ return () => {
1693
+ clearPendingTimeout();
1694
+ clearGraceTimeout();
1695
+ };
1673
1696
  }, [
1674
1697
  step,
1675
1698
  target.visibility,
@@ -1697,7 +1720,8 @@ var useHiddenTargetFallback = ({
1697
1720
  }, [target, usingScreenFallback, viewportRect]);
1698
1721
  return {
1699
1722
  target: resolvedTarget,
1700
- usingScreenFallback
1723
+ usingScreenFallback,
1724
+ isInGracePeriod
1701
1725
  };
1702
1726
  };
1703
1727
 
@@ -1794,7 +1818,7 @@ var useHudState = (options = {}) => {
1794
1818
  next();
1795
1819
  }
1796
1820
  }, [activeFlowId, complete, flows, next, runningState]);
1797
- const { target: hudTarget } = useHiddenTargetFallback({
1821
+ const { target: hudTarget, isInGracePeriod } = useHiddenTargetFallback({
1798
1822
  step: runningStep,
1799
1823
  target,
1800
1824
  viewportRect,
@@ -1816,7 +1840,8 @@ var useHudState = (options = {}) => {
1816
1840
  flowHudOptions,
1817
1841
  hudRenderMode,
1818
1842
  matchesFlowFilter,
1819
- activeFlowId
1843
+ activeFlowId,
1844
+ isInGracePeriod
1820
1845
  };
1821
1846
  };
1822
1847
 
@@ -2079,17 +2104,12 @@ var deriveTargetIssue = (target) => {
2079
2104
  if (target.status === "idle") return null;
2080
2105
  switch (target.visibility) {
2081
2106
  case "missing":
2082
- return {
2083
- type: "missing",
2084
- title: "Looking for the target",
2085
- body: "Flowsterix is still trying to find this element. Make sure the UI piece is mounted or adjust the selector.",
2086
- hint: target.rectSource === "stored" ? "Showing the last known position until the element returns." : void 0
2087
- };
2088
2107
  case "hidden":
2089
2108
  return {
2090
- type: "hidden",
2091
- title: "Target is hidden",
2092
- body: "The element exists but is currently hidden, collapsed, or zero-sized. Expand it so the highlight can lock on."
2109
+ type: target.visibility,
2110
+ title: "Target not visible",
2111
+ body: "The target element is not currently visible. Make sure the UI piece is mounted and displayed.",
2112
+ hint: target.rectSource === "stored" ? "Showing the last known position until the element returns." : void 0
2093
2113
  };
2094
2114
  case "detached":
2095
2115
  return {
@@ -2224,7 +2244,8 @@ var useTourOverlay = (options) => {
2224
2244
  padding = DEFAULT_PADDING,
2225
2245
  radius = DEFAULT_RADIUS,
2226
2246
  edgeBuffer = DEFAULT_EDGE_BUFFER,
2227
- interactionMode = "passthrough"
2247
+ interactionMode = "passthrough",
2248
+ isInGracePeriod = false
2228
2249
  } = options;
2229
2250
  const hasShownRef = useRef5(false);
2230
2251
  const lastReadyTargetRef = useRef5(null);
@@ -2279,7 +2300,7 @@ var useTourOverlay = (options) => {
2279
2300
  radius: highlightRadius
2280
2301
  } : null;
2281
2302
  const maskCapable = useMemo9(() => supportsMasking(), []);
2282
- const isActive = target.status === "ready" || target.status === "resolving" && cachedTarget !== null;
2303
+ const isActive = target.status === "ready" || target.status === "resolving" && cachedTarget !== null || isInGracePeriod;
2283
2304
  const shouldMask = maskCapable && isActive;
2284
2305
  const maskId = useMemo9(
2285
2306
  () => `tour-overlay-mask-${Math.random().toString(36).slice(2, 10)}`,
@@ -2926,7 +2947,8 @@ var TourPopoverPortal = ({
2926
2947
  layoutId,
2927
2948
  containerComponent,
2928
2949
  contentComponent,
2929
- transitionsOverride
2950
+ transitionsOverride,
2951
+ isInGracePeriod = false
2930
2952
  }) => {
2931
2953
  if (!isBrowser) return null;
2932
2954
  const host = portalHost();
@@ -2957,6 +2979,7 @@ var TourPopoverPortal = ({
2957
2979
  const cachedTarget = lastReadyTargetRef.current;
2958
2980
  const resolvedRect = target.rect ?? target.lastResolvedRect ?? cachedTarget?.rect ?? null;
2959
2981
  const resolvedIsScreen = target.status === "ready" ? target.isScreen : cachedTarget?.isScreen ?? target.isScreen;
2982
+ const shouldHideForGracePeriod = isInGracePeriod && !resolvedRect;
2960
2983
  const fallbackRect = resolvedRect ?? viewport;
2961
2984
  const fallbackIsScreen = resolvedIsScreen;
2962
2985
  const [floatingSize, setFloatingSize] = useState10(null);
@@ -3462,6 +3485,7 @@ var TourPopoverPortal = ({
3462
3485
  dragHandleProps,
3463
3486
  descriptionProps
3464
3487
  };
3488
+ if (shouldHideForGracePeriod) return null;
3465
3489
  return createPortal2(children(context), host);
3466
3490
  };
3467
3491
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flowsterix/react",
3
- "version": "0.4.2",
3
+ "version": "0.5.0",
4
4
  "description": "React bindings for Flowsterix - guided tours and onboarding flows",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -75,7 +75,9 @@
75
75
  "react-router-dom": ">=6"
76
76
  },
77
77
  "devDependencies": {
78
- "motion": "^12.29.0"
78
+ "motion": "^12.29.0",
79
+ "react": "^19.2.0",
80
+ "react-dom": "^19.2.0"
79
81
  },
80
82
  "peerDependenciesMeta": {
81
83
  "motion": {
@@ -94,6 +96,7 @@
94
96
  "scripts": {
95
97
  "build": "tsup --config tsup.config.ts --format esm,cjs --clean && tsc --build tsconfig.json --force",
96
98
  "lint": "eslint src --ext .ts,.tsx",
99
+ "typecheck": "tsc --noEmit",
97
100
  "test": "vitest run"
98
101
  }
99
102
  }