@flowsterix/react 0.4.1 → 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;AAUrD,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,6BAsFlC,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,10 +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 HIDDEN_VISIBILITIES = [
1882
- "hidden",
1883
- "detached"
1884
- ];
1881
+ var DEFAULT_GRACE_PERIOD_MS = 400;
1885
1882
  var useHiddenTargetFallback = ({
1886
1883
  step,
1887
1884
  target,
@@ -1889,7 +1886,9 @@ var useHiddenTargetFallback = ({
1889
1886
  onSkip
1890
1887
  }) => {
1891
1888
  const [usingScreenFallback, setUsingScreenFallback] = (0, import_react7.useState)(false);
1889
+ const [isInGracePeriod, setIsInGracePeriod] = (0, import_react7.useState)(false);
1892
1890
  const timeoutRef = (0, import_react7.useRef)(null);
1891
+ const graceTimeoutRef = (0, import_react7.useRef)(null);
1893
1892
  const skipTriggeredRef = (0, import_react7.useRef)(false);
1894
1893
  const hiddenMode = step?.targetBehavior?.hidden ?? "screen";
1895
1894
  const hiddenDelayMs = Math.max(
@@ -1902,24 +1901,43 @@ var useHiddenTargetFallback = ({
1902
1901
  timeoutRef.current = null;
1903
1902
  }
1904
1903
  };
1904
+ const clearGraceTimeout = () => {
1905
+ if (graceTimeoutRef.current !== null) {
1906
+ globalThis.clearTimeout(graceTimeoutRef.current);
1907
+ graceTimeoutRef.current = null;
1908
+ }
1909
+ };
1905
1910
  (0, import_react7.useEffect)(() => {
1906
1911
  skipTriggeredRef.current = false;
1907
1912
  setUsingScreenFallback(false);
1913
+ setIsInGracePeriod(false);
1908
1914
  clearPendingTimeout();
1909
- return clearPendingTimeout;
1915
+ clearGraceTimeout();
1916
+ return () => {
1917
+ clearPendingTimeout();
1918
+ clearGraceTimeout();
1919
+ };
1910
1920
  }, [step?.id]);
1911
1921
  (0, import_react7.useEffect)(() => {
1912
1922
  if (!isBrowser) return void 0;
1913
1923
  if (!step) return void 0;
1914
1924
  clearPendingTimeout();
1915
- const shouldHandleHiddenTarget = HIDDEN_VISIBILITIES.includes(target.visibility) && !target.isScreen && target.status === "ready";
1925
+ clearGraceTimeout();
1926
+ const isHiddenOrDetached = (target.visibility === "hidden" || target.visibility === "detached") && target.status === "ready";
1927
+ const isMissingWithNoRect = target.visibility === "missing" && target.status === "resolving" && target.rect === null && target.lastResolvedRect === null;
1928
+ const shouldHandleHiddenTarget = !target.isScreen && (isHiddenOrDetached || isMissingWithNoRect);
1916
1929
  if (!shouldHandleHiddenTarget) {
1917
1930
  setUsingScreenFallback(false);
1931
+ setIsInGracePeriod(false);
1918
1932
  return void 0;
1919
1933
  }
1934
+ setIsInGracePeriod(true);
1920
1935
  if (hiddenMode !== "screen") {
1921
1936
  setUsingScreenFallback(false);
1922
1937
  }
1938
+ graceTimeoutRef.current = globalThis.setTimeout(() => {
1939
+ setIsInGracePeriod(false);
1940
+ }, DEFAULT_GRACE_PERIOD_MS);
1923
1941
  timeoutRef.current = globalThis.setTimeout(() => {
1924
1942
  if (hiddenMode === "screen") {
1925
1943
  setUsingScreenFallback(true);
@@ -1930,12 +1948,17 @@ var useHiddenTargetFallback = ({
1930
1948
  onSkip();
1931
1949
  }
1932
1950
  }, hiddenDelayMs);
1933
- return clearPendingTimeout;
1951
+ return () => {
1952
+ clearPendingTimeout();
1953
+ clearGraceTimeout();
1954
+ };
1934
1955
  }, [
1935
1956
  step,
1936
1957
  target.visibility,
1937
1958
  target.isScreen,
1938
1959
  target.status,
1960
+ target.rect,
1961
+ target.lastResolvedRect,
1939
1962
  hiddenMode,
1940
1963
  hiddenDelayMs,
1941
1964
  onSkip
@@ -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,10 +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 HIDDEN_VISIBILITIES = [
1623
- "hidden",
1624
- "detached"
1625
- ];
1622
+ var DEFAULT_GRACE_PERIOD_MS = 400;
1626
1623
  var useHiddenTargetFallback = ({
1627
1624
  step,
1628
1625
  target,
@@ -1630,7 +1627,9 @@ var useHiddenTargetFallback = ({
1630
1627
  onSkip
1631
1628
  }) => {
1632
1629
  const [usingScreenFallback, setUsingScreenFallback] = useState4(false);
1630
+ const [isInGracePeriod, setIsInGracePeriod] = useState4(false);
1633
1631
  const timeoutRef = useRef3(null);
1632
+ const graceTimeoutRef = useRef3(null);
1634
1633
  const skipTriggeredRef = useRef3(false);
1635
1634
  const hiddenMode = step?.targetBehavior?.hidden ?? "screen";
1636
1635
  const hiddenDelayMs = Math.max(
@@ -1643,24 +1642,43 @@ var useHiddenTargetFallback = ({
1643
1642
  timeoutRef.current = null;
1644
1643
  }
1645
1644
  };
1645
+ const clearGraceTimeout = () => {
1646
+ if (graceTimeoutRef.current !== null) {
1647
+ globalThis.clearTimeout(graceTimeoutRef.current);
1648
+ graceTimeoutRef.current = null;
1649
+ }
1650
+ };
1646
1651
  useEffect5(() => {
1647
1652
  skipTriggeredRef.current = false;
1648
1653
  setUsingScreenFallback(false);
1654
+ setIsInGracePeriod(false);
1649
1655
  clearPendingTimeout();
1650
- return clearPendingTimeout;
1656
+ clearGraceTimeout();
1657
+ return () => {
1658
+ clearPendingTimeout();
1659
+ clearGraceTimeout();
1660
+ };
1651
1661
  }, [step?.id]);
1652
1662
  useEffect5(() => {
1653
1663
  if (!isBrowser) return void 0;
1654
1664
  if (!step) return void 0;
1655
1665
  clearPendingTimeout();
1656
- const shouldHandleHiddenTarget = HIDDEN_VISIBILITIES.includes(target.visibility) && !target.isScreen && target.status === "ready";
1666
+ clearGraceTimeout();
1667
+ const isHiddenOrDetached = (target.visibility === "hidden" || target.visibility === "detached") && target.status === "ready";
1668
+ const isMissingWithNoRect = target.visibility === "missing" && target.status === "resolving" && target.rect === null && target.lastResolvedRect === null;
1669
+ const shouldHandleHiddenTarget = !target.isScreen && (isHiddenOrDetached || isMissingWithNoRect);
1657
1670
  if (!shouldHandleHiddenTarget) {
1658
1671
  setUsingScreenFallback(false);
1672
+ setIsInGracePeriod(false);
1659
1673
  return void 0;
1660
1674
  }
1675
+ setIsInGracePeriod(true);
1661
1676
  if (hiddenMode !== "screen") {
1662
1677
  setUsingScreenFallback(false);
1663
1678
  }
1679
+ graceTimeoutRef.current = globalThis.setTimeout(() => {
1680
+ setIsInGracePeriod(false);
1681
+ }, DEFAULT_GRACE_PERIOD_MS);
1664
1682
  timeoutRef.current = globalThis.setTimeout(() => {
1665
1683
  if (hiddenMode === "screen") {
1666
1684
  setUsingScreenFallback(true);
@@ -1671,12 +1689,17 @@ var useHiddenTargetFallback = ({
1671
1689
  onSkip();
1672
1690
  }
1673
1691
  }, hiddenDelayMs);
1674
- return clearPendingTimeout;
1692
+ return () => {
1693
+ clearPendingTimeout();
1694
+ clearGraceTimeout();
1695
+ };
1675
1696
  }, [
1676
1697
  step,
1677
1698
  target.visibility,
1678
1699
  target.isScreen,
1679
1700
  target.status,
1701
+ target.rect,
1702
+ target.lastResolvedRect,
1680
1703
  hiddenMode,
1681
1704
  hiddenDelayMs,
1682
1705
  onSkip
@@ -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.1",
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
  }