@buoy-gg/route-events 1.7.2

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 (79) hide show
  1. package/README.md +654 -0
  2. package/lib/commonjs/RouteObserver.js +54 -0
  3. package/lib/commonjs/RouteParser.js +310 -0
  4. package/lib/commonjs/RouteTracker.js +39 -0
  5. package/lib/commonjs/components/NavigationStack.js +584 -0
  6. package/lib/commonjs/components/RouteEventDetailContent.js +492 -0
  7. package/lib/commonjs/components/RouteEventExpandedContent.js +187 -0
  8. package/lib/commonjs/components/RouteEventItemCompact.js +175 -0
  9. package/lib/commonjs/components/RouteEventsModalWithTabs.js +560 -0
  10. package/lib/commonjs/components/RouteEventsTimeline.js +82 -0
  11. package/lib/commonjs/components/RouteFilterViewV2.js +42 -0
  12. package/lib/commonjs/components/RoutesSitemap.js +948 -0
  13. package/lib/commonjs/expoRouterStore.js +104 -0
  14. package/lib/commonjs/index.js +99 -0
  15. package/lib/commonjs/package.json +1 -0
  16. package/lib/commonjs/preset.js +83 -0
  17. package/lib/commonjs/useNavigationStack.js +241 -0
  18. package/lib/commonjs/useRouteObserver.js +73 -0
  19. package/lib/commonjs/useRouteSitemap.js +234 -0
  20. package/lib/commonjs/utils/safeExpoRouter.js +129 -0
  21. package/lib/commonjs/utils/safeReactNavigation.js +104 -0
  22. package/lib/module/RouteObserver.js +49 -0
  23. package/lib/module/RouteParser.js +305 -0
  24. package/lib/module/RouteTracker.js +35 -0
  25. package/lib/module/components/NavigationStack.js +580 -0
  26. package/lib/module/components/RouteEventDetailContent.js +487 -0
  27. package/lib/module/components/RouteEventExpandedContent.js +183 -0
  28. package/lib/module/components/RouteEventItemCompact.js +171 -0
  29. package/lib/module/components/RouteEventsModalWithTabs.js +557 -0
  30. package/lib/module/components/RouteEventsTimeline.js +78 -0
  31. package/lib/module/components/RouteFilterViewV2.js +38 -0
  32. package/lib/module/components/RoutesSitemap.js +944 -0
  33. package/lib/module/expoRouterStore.js +98 -0
  34. package/lib/module/index.js +23 -0
  35. package/lib/module/preset.js +79 -0
  36. package/lib/module/useNavigationStack.js +238 -0
  37. package/lib/module/useRouteObserver.js +70 -0
  38. package/lib/module/useRouteSitemap.js +229 -0
  39. package/lib/module/utils/safeExpoRouter.js +120 -0
  40. package/lib/module/utils/safeReactNavigation.js +98 -0
  41. package/lib/typescript/RouteObserver.d.ts +37 -0
  42. package/lib/typescript/RouteObserver.d.ts.map +1 -0
  43. package/lib/typescript/RouteParser.d.ts +129 -0
  44. package/lib/typescript/RouteParser.d.ts.map +1 -0
  45. package/lib/typescript/RouteTracker.d.ts +29 -0
  46. package/lib/typescript/RouteTracker.d.ts.map +1 -0
  47. package/lib/typescript/components/NavigationStack.d.ts +11 -0
  48. package/lib/typescript/components/NavigationStack.d.ts.map +1 -0
  49. package/lib/typescript/components/RouteEventDetailContent.d.ts +21 -0
  50. package/lib/typescript/components/RouteEventDetailContent.d.ts.map +1 -0
  51. package/lib/typescript/components/RouteEventExpandedContent.d.ts +16 -0
  52. package/lib/typescript/components/RouteEventExpandedContent.d.ts.map +1 -0
  53. package/lib/typescript/components/RouteEventItemCompact.d.ts +15 -0
  54. package/lib/typescript/components/RouteEventItemCompact.d.ts.map +1 -0
  55. package/lib/typescript/components/RouteEventsModalWithTabs.d.ts +15 -0
  56. package/lib/typescript/components/RouteEventsModalWithTabs.d.ts.map +1 -0
  57. package/lib/typescript/components/RouteEventsTimeline.d.ts +17 -0
  58. package/lib/typescript/components/RouteEventsTimeline.d.ts.map +1 -0
  59. package/lib/typescript/components/RouteFilterViewV2.d.ts +9 -0
  60. package/lib/typescript/components/RouteFilterViewV2.d.ts.map +1 -0
  61. package/lib/typescript/components/RoutesSitemap.d.ts +15 -0
  62. package/lib/typescript/components/RoutesSitemap.d.ts.map +1 -0
  63. package/lib/typescript/expoRouterStore.d.ts +28 -0
  64. package/lib/typescript/expoRouterStore.d.ts.map +1 -0
  65. package/lib/typescript/index.d.ts +18 -0
  66. package/lib/typescript/index.d.ts.map +1 -0
  67. package/lib/typescript/preset.d.ts +76 -0
  68. package/lib/typescript/preset.d.ts.map +1 -0
  69. package/lib/typescript/useNavigationStack.d.ts +48 -0
  70. package/lib/typescript/useNavigationStack.d.ts.map +1 -0
  71. package/lib/typescript/useRouteObserver.d.ts +27 -0
  72. package/lib/typescript/useRouteObserver.d.ts.map +1 -0
  73. package/lib/typescript/useRouteSitemap.d.ts +102 -0
  74. package/lib/typescript/useRouteSitemap.d.ts.map +1 -0
  75. package/lib/typescript/utils/safeExpoRouter.d.ts +13 -0
  76. package/lib/typescript/utils/safeExpoRouter.d.ts.map +1 -0
  77. package/lib/typescript/utils/safeReactNavigation.d.ts +10 -0
  78. package/lib/typescript/utils/safeReactNavigation.d.ts.map +1 -0
  79. package/package.json +72 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RouteEventDetailContent.d.ts","sourceRoot":"","sources":["../../../src/components/RouteEventDetailContent.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAezD,UAAU,iBAAiB;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,gBAAgB,CAAC;IAC5B,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,UAAU,4BAA4B;IACpC,YAAY,EAAE,iBAAiB,CAAC;IAChC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED,wBAAgB,uBAAuB,CAAC,EACtC,YAAY,EACZ,kBAAsB,EACtB,kBAA6B,EAC7B,qBAA6B,GAC9B,EAAE,4BAA4B,+BAwT9B;AAGD,wBAAgB,sBAAsB,CAAC,EACrC,YAAY,EACZ,kBAAsB,EACtB,kBAA6B,GAC9B,EAAE;IACD,YAAY,EAAE,iBAAiB,CAAC;IAChC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9C,sCA2EA"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * RouteEventExpandedContent - Expanded view for route event details
3
+ *
4
+ * Shows 3 organized sections:
5
+ * - Section A: Route Information (Template, From, To)
6
+ * - Section B: Timing Information (Duration, Time)
7
+ * - Section C: Parameters & Metadata (Segments, Parameters, Visit count)
8
+ */
9
+ import type { RouteChangeEvent } from "../RouteObserver";
10
+ export interface RouteEventExpandedContentProps {
11
+ event: RouteChangeEvent;
12
+ visitNumber: number;
13
+ routeTemplate: string | null;
14
+ }
15
+ export declare function RouteEventExpandedContent({ event, visitNumber, routeTemplate, }: RouteEventExpandedContentProps): import("react").JSX.Element;
16
+ //# sourceMappingURL=RouteEventExpandedContent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RouteEventExpandedContent.d.ts","sourceRoot":"","sources":["../../../src/components/RouteEventExpandedContent.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEzD,MAAM,WAAW,8BAA8B;IAC7C,KAAK,EAAE,gBAAgB,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAeD,wBAAgB,yBAAyB,CAAC,EACxC,KAAK,EACL,WAAW,EACX,aAAa,GACd,EAAE,8BAA8B,+BA+GhC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * RouteEventItemCompact - Compact list item for route events
3
+ *
4
+ * Uses CompactRow pattern matching network/storage components
5
+ */
6
+ import type { RouteChangeEvent } from "../RouteObserver";
7
+ export interface RouteEventItemCompactProps {
8
+ event: RouteChangeEvent;
9
+ visitNumber: number;
10
+ isExpanded: boolean;
11
+ onPress: () => void;
12
+ onNavigate?: (pathname: string) => void;
13
+ }
14
+ export declare function RouteEventItemCompact({ event, visitNumber, isExpanded, onPress, onNavigate, }: RouteEventItemCompactProps): import("react").JSX.Element;
15
+ //# sourceMappingURL=RouteEventItemCompact.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RouteEventItemCompact.d.ts","sourceRoot":"","sources":["../../../src/components/RouteEventItemCompact.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAGzD,MAAM,WAAW,0BAA0B;IACzC,KAAK,EAAE,gBAAgB,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CACzC;AAmFD,wBAAgB,qBAAqB,CAAC,EACpC,KAAK,EACL,WAAW,EACX,UAAU,EACV,OAAO,EACP,UAAU,GACX,EAAE,0BAA0B,+BAyD5B"}
@@ -0,0 +1,15 @@
1
+ import { routeObserver as defaultRouteObserver } from "../RouteObserver";
2
+ export interface RouteEventsModalWithTabsProps {
3
+ visible: boolean;
4
+ onClose: () => void;
5
+ onBack?: () => void;
6
+ onMinimize?: (modalState: any) => void;
7
+ enableSharedModalDimensions?: boolean;
8
+ /**
9
+ * Optional route observer instance. If not provided, uses the default singleton.
10
+ * Route tracking will start automatically when the modal is opened.
11
+ */
12
+ routeObserver?: typeof defaultRouteObserver;
13
+ }
14
+ export declare function RouteEventsModalWithTabs({ visible, onClose, onBack, onMinimize, enableSharedModalDimensions, routeObserver, }: RouteEventsModalWithTabsProps): import("react").JSX.Element | null;
15
+ //# sourceMappingURL=RouteEventsModalWithTabs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RouteEventsModalWithTabs.d.ts","sourceRoot":"","sources":["../../../src/components/RouteEventsModalWithTabs.tsx"],"names":[],"mappings":"AA0DA,OAAO,EACL,aAAa,IAAI,oBAAoB,EAEtC,MAAM,kBAAkB,CAAC;AAU1B,MAAM,WAAW,6BAA6B;IAC5C,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,UAAU,CAAC,EAAE,CAAC,UAAU,EAAE,GAAG,KAAK,IAAI,CAAC;IACvC,2BAA2B,CAAC,EAAE,OAAO,CAAC;IACtC;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,oBAAoB,CAAC;CAC7C;AAID,wBAAgB,wBAAwB,CAAC,EACvC,OAAO,EACP,OAAO,EACP,MAAM,EACN,UAAU,EACV,2BAAmC,EACnC,aAAoC,GACrC,EAAE,6BAA6B,sCAshB/B"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * RouteEventsTimeline - Chronological timeline of route navigation events
3
+ *
4
+ * Shows events in the order they happened (most recent first),
5
+ * providing a clear history of navigation actions.
6
+ *
7
+ * Uses two-level expansion pattern matching network/storage components.
8
+ */
9
+ import type { RouteChangeEvent } from "../RouteObserver";
10
+ interface RouteEventsTimelineProps {
11
+ events: RouteChangeEvent[];
12
+ visitCounts: Map<number, number>;
13
+ onNavigate?: (pathname: string) => void;
14
+ }
15
+ export declare function RouteEventsTimeline({ events, visitCounts, onNavigate, }: RouteEventsTimelineProps): import("react").JSX.Element;
16
+ export {};
17
+ //# sourceMappingURL=RouteEventsTimeline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RouteEventsTimeline.d.ts","sourceRoot":"","sources":["../../../src/components/RouteEventsTimeline.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAaH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAGzD,UAAU,wBAAwB;IAChC,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CACzC;AAED,wBAAgB,mBAAmB,CAAC,EAClC,MAAM,EACN,WAAW,EACX,UAAU,GACX,EAAE,wBAAwB,+BAiC1B"}
@@ -0,0 +1,9 @@
1
+ interface RouteFilterViewV2Props {
2
+ ignoredPatterns: Set<string>;
3
+ onTogglePattern: (pattern: string) => void;
4
+ onAddPattern: (pattern: string) => void;
5
+ availablePathnames?: string[];
6
+ }
7
+ export declare function RouteFilterViewV2({ ignoredPatterns, onTogglePattern, onAddPattern, availablePathnames, }: RouteFilterViewV2Props): import("react").JSX.Element;
8
+ export {};
9
+ //# sourceMappingURL=RouteFilterViewV2.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RouteFilterViewV2.d.ts","sourceRoot":"","sources":["../../../src/components/RouteFilterViewV2.tsx"],"names":[],"mappings":"AAMA,UAAU,sBAAsB;IAC9B,eAAe,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC7B,eAAe,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC/B;AAED,wBAAgB,iBAAiB,CAAC,EAChC,eAAe,EACf,eAAe,EACf,YAAY,EACZ,kBAAuB,GACxB,EAAE,sBAAsB,+BAiCxB"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * RoutesSitemap - Visual sitemap of all app routes
3
+ *
4
+ * Displays parsed route information from Expo Router with:
5
+ * - Search/filter
6
+ * - Organized groups
7
+ * - Route details
8
+ * - Copy to clipboard
9
+ * - Navigation
10
+ */
11
+ export interface RoutesSitemapProps {
12
+ style?: any;
13
+ }
14
+ export declare function RoutesSitemap({ style }: RoutesSitemapProps): import("react").JSX.Element;
15
+ //# sourceMappingURL=RoutesSitemap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RoutesSitemap.d.ts","sourceRoot":"","sources":["../../../src/components/RoutesSitemap.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAuDH,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,GAAG,CAAC;CACb;AAmBD,wBAAgB,aAAa,CAAC,EAAE,KAAK,EAAE,EAAE,kBAAkB,+BAqW1D"}
@@ -0,0 +1,28 @@
1
+ import type { RouteNode } from "expo-router/build/Route";
2
+ type ExpoRouterStore = {
3
+ routeNode?: RouteNode | null;
4
+ navigationRef?: {
5
+ isReady?: () => boolean;
6
+ };
7
+ };
8
+ /**
9
+ * Attempt to require the expo-router store from known locations.
10
+ * Returns null (with a logged error in dev) when expo-router is not available.
11
+ *
12
+ * Note: The store uses getters that read from an internal storeRef.
13
+ * The storeRef gets populated when Expo Router's useStore() hook runs.
14
+ * So we cache the store reference but its property values update over time.
15
+ */
16
+ export declare function getExpoRouterStore(): ExpoRouterStore | null;
17
+ /**
18
+ * Returns the current RouteNode tree (if available).
19
+ * Logs a helpful warning in development when the tree is missing even though
20
+ * the navigation ref is ready.
21
+ */
22
+ export declare function loadRouteNode(): RouteNode | null;
23
+ export declare function getRouteNodeMetadata(): {
24
+ source: "build" | "src" | null;
25
+ lastLoadedAt: number | null;
26
+ };
27
+ export {};
28
+ //# sourceMappingURL=expoRouterStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expoRouterStore.d.ts","sourceRoot":"","sources":["../../src/expoRouterStore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEzD,KAAK,eAAe,GAAG;IACrB,SAAS,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IAC7B,aAAa,CAAC,EAAE;QACd,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC;KACzB,CAAC;CACH,CAAC;AAmBF;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,IAAI,eAAe,GAAG,IAAI,CAkD3D;AAED;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,SAAS,GAAG,IAAI,CAqBhD;AAED,wBAAgB,oBAAoB,IAAI;IACtC,MAAM,EAAE,OAAO,GAAG,KAAK,GAAG,IAAI,CAAC;IAC/B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B,CAKA"}
@@ -0,0 +1,18 @@
1
+ export { RouteEventsModalWithTabs } from "./components/RouteEventsModalWithTabs";
2
+ export type { RouteEventsModalWithTabsProps } from "./components/RouteEventsModalWithTabs";
3
+ export { routeEventsToolPreset, createRouteEventsTool } from "./preset";
4
+ export { RouteTracker } from "./RouteTracker";
5
+ export { RoutesSitemap } from "./components/RoutesSitemap";
6
+ export type { RoutesSitemapProps } from "./components/RoutesSitemap";
7
+ export { NavigationStack } from "./components/NavigationStack";
8
+ export type { NavigationStackProps } from "./components/NavigationStack";
9
+ export { RouteObserver, routeObserver } from "./RouteObserver";
10
+ export { useRouteObserver } from "./useRouteObserver";
11
+ export type { RouteChangeEvent } from "./RouteObserver";
12
+ export { RouteParser } from "./RouteParser";
13
+ export type { RouteInfo, RouteType, RouteGroup, RouteStats, } from "./RouteParser";
14
+ export { useRouteSitemap, useRoute, useParentRoutes } from "./useRouteSitemap";
15
+ export type { UseRouteSitemapOptions, UseRouteSitemapResult, } from "./useRouteSitemap";
16
+ export { useNavigationStack } from "./useNavigationStack";
17
+ export type { UseNavigationStackResult, StackDisplayItem, } from "./useNavigationStack";
18
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AACjF,YAAY,EAAE,6BAA6B,EAAE,MAAM,uCAAuC,CAAC;AAG3F,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAGxE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG9C,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,YAAY,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,YAAY,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAIzE,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAGxD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,YAAY,EACV,SAAS,EACT,SAAS,EACT,UAAU,EACV,UAAU,GACX,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAC/E,YAAY,EACV,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,YAAY,EACV,wBAAwB,EACxB,gBAAgB,GACjB,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Pre-configured route events tool for FloatingDevTools
3
+ *
4
+ * This preset provides a zero-config way to add route tracking to your dev tools.
5
+ * Just import and spread it into your apps array!
6
+ *
7
+ * @example
8
+ * ```tsx
9
+ * import { routeEventsToolPreset } from '@buoy-gg/route-events';
10
+ *
11
+ * const installedApps = [
12
+ * routeEventsToolPreset, // That's it!
13
+ * // ...other tools
14
+ * ];
15
+ * ```
16
+ */
17
+ import { RouteEventsModalWithTabs } from "./components/RouteEventsModalWithTabs";
18
+ /**
19
+ * Pre-configured route events tool for FloatingDevTools.
20
+ * Includes:
21
+ * - Route sitemap browser
22
+ * - Event timeline with filtering
23
+ * - Navigation stack visualization
24
+ * - Automatic route tracking (no setup needed)
25
+ */
26
+ export declare const routeEventsToolPreset: {
27
+ id: string;
28
+ name: string;
29
+ description: string;
30
+ slot: "both";
31
+ icon: ({ size }: {
32
+ size: number;
33
+ }) => import("react").JSX.Element;
34
+ component: typeof RouteEventsModalWithTabs;
35
+ props: {
36
+ enableSharedModalDimensions: boolean;
37
+ };
38
+ };
39
+ /**
40
+ * Create a custom route events tool configuration.
41
+ * Use this if you want to override default settings.
42
+ *
43
+ * @example
44
+ * ```tsx
45
+ * import { createRouteEventsTool } from '@buoy-gg/route-events';
46
+ *
47
+ * const myRouteTool = createRouteEventsTool({
48
+ * name: "MY ROUTES",
49
+ * color: "#a78bfa",
50
+ * enableSharedModalDimensions: true,
51
+ * });
52
+ * ```
53
+ */
54
+ export declare function createRouteEventsTool(options?: {
55
+ /** Tool name (default: "ROUTES") */
56
+ name?: string;
57
+ /** Tool description */
58
+ description?: string;
59
+ /** Custom tool ID (default: "route-events") */
60
+ id?: string;
61
+ /** Enable shared modal dimensions */
62
+ enableSharedModalDimensions?: boolean;
63
+ }): {
64
+ id: string;
65
+ name: string;
66
+ description: string;
67
+ slot: "both";
68
+ icon: ({ size }: {
69
+ size: number;
70
+ }) => import("react").JSX.Element;
71
+ component: typeof RouteEventsModalWithTabs;
72
+ props: {
73
+ enableSharedModalDimensions: boolean;
74
+ };
75
+ };
76
+ //# sourceMappingURL=preset.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preset.d.ts","sourceRoot":"","sources":["../../src/preset.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AAEjF;;;;;;;GAOG;AACH,eAAO,MAAM,qBAAqB;;;;;qBAKf;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE;;;;;CAKlC,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,CAAC,EAAE;IAC9C,oCAAoC;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uBAAuB;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+CAA+C;IAC/C,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,qCAAqC;IACrC,2BAA2B,CAAC,EAAE,OAAO,CAAC;CACvC;;;;;qBAOoB;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE;;;;;EASpC"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * useNavigationStack - Hook to access current navigation stack state
3
+ *
4
+ * Provides real-time access to the navigation stack from Expo Router,
5
+ * showing what screens are currently mounted in memory and which is visible.
6
+ *
7
+ * Data source: @react-navigation/native
8
+ */
9
+ export interface StackDisplayItem {
10
+ key: string;
11
+ name: string;
12
+ pathname: string;
13
+ params: Record<string, any>;
14
+ isFocused: boolean;
15
+ index: number;
16
+ canPop: boolean;
17
+ }
18
+ export interface UseNavigationStackResult {
19
+ stack: StackDisplayItem[];
20
+ focusedRoute: StackDisplayItem | null;
21
+ stackDepth: number;
22
+ isAtRoot: boolean;
23
+ isLoaded: boolean;
24
+ error: Error | null;
25
+ refresh: () => void;
26
+ navigateToIndex: (index: number) => void;
27
+ popToIndex: (index: number) => void;
28
+ goBack: () => void;
29
+ popToTop: () => void;
30
+ }
31
+ /**
32
+ * Access the current navigation stack from Expo Router
33
+ *
34
+ * @example
35
+ * ```tsx
36
+ * const { stack, focusedRoute, goBack, popToTop } = useNavigationStack();
37
+ *
38
+ * // Display stack
39
+ * stack.map(item => (
40
+ * <View key={item.key}>
41
+ * <Text>{item.pathname}</Text>
42
+ * {item.isFocused && <Text>VISIBLE</Text>}
43
+ * </View>
44
+ * ));
45
+ * ```
46
+ */
47
+ export declare function useNavigationStack(): UseNavigationStackResult;
48
+ //# sourceMappingURL=useNavigationStack.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useNavigationStack.d.ts","sourceRoot":"","sources":["../../src/useNavigationStack.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAkBH,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,wBAAwB;IAEvC,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,YAAY,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAGlB,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IAGpB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAsED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,kBAAkB,IAAI,wBAAwB,CAkK7D"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * useRouteObserver - React hook for observing route changes
3
+ *
4
+ * Uses public Expo Router hooks to track route changes and emits them
5
+ * to the global RouteObserver singleton.
6
+ */
7
+ import { type RouteChangeEvent } from "./RouteObserver";
8
+ /**
9
+ * Hook to observe route changes in Expo Router
10
+ * Automatically emits events to the global RouteObserver
11
+ *
12
+ * @param callback - Optional function to call on route changes (in addition to the observer)
13
+ *
14
+ * @example
15
+ * ```tsx
16
+ * // Just track routes (no custom callback)
17
+ * useRouteObserver();
18
+ *
19
+ * // Track routes with custom callback
20
+ * useRouteObserver((event) => {
21
+ * // Handle route change
22
+ * analytics.trackPageView(event.pathname);
23
+ * });
24
+ * ```
25
+ */
26
+ export declare function useRouteObserver(callback?: (event: RouteChangeEvent) => void): void;
27
+ //# sourceMappingURL=useRouteObserver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useRouteObserver.d.ts","sourceRoot":"","sources":["../../src/useRouteObserver.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAiB,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEvE;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,QAyC5E"}
@@ -0,0 +1,102 @@
1
+ /**
2
+ * useRouteSitemap - React hooks for accessing parsed route information
3
+ *
4
+ * Provides access to the Expo Router route tree with parsing, filtering,
5
+ * and search capabilities.
6
+ */
7
+ import { type RouteInfo, type RouteGroup, type RouteStats } from "./RouteParser";
8
+ export interface UseRouteSitemapOptions {
9
+ /**
10
+ * Search query to filter routes
11
+ */
12
+ searchQuery?: string;
13
+ /**
14
+ * How to sort routes
15
+ */
16
+ sortBy?: "path" | "type" | "name";
17
+ /**
18
+ * Auto-refresh when route tree changes
19
+ * @default false
20
+ */
21
+ autoRefresh?: boolean;
22
+ /**
23
+ * Refresh interval in milliseconds (when autoRefresh is true)
24
+ * @default 1000
25
+ */
26
+ refreshInterval?: number;
27
+ }
28
+ export interface UseRouteSitemapResult {
29
+ /**
30
+ * All parsed routes (nested structure)
31
+ */
32
+ routes: RouteInfo[];
33
+ /**
34
+ * Routes organized into groups
35
+ */
36
+ groups: RouteGroup[];
37
+ /**
38
+ * Route statistics
39
+ */
40
+ stats: RouteStats;
41
+ /**
42
+ * Filtered routes based on search query
43
+ */
44
+ filteredRoutes: RouteInfo[];
45
+ /**
46
+ * Is route data loaded
47
+ */
48
+ isLoaded: boolean;
49
+ /**
50
+ * Manually refresh route data
51
+ */
52
+ refresh: () => void;
53
+ /**
54
+ * Find a route by path
55
+ */
56
+ findRoute: (path: string) => RouteInfo | null;
57
+ /**
58
+ * Get parent routes for a path
59
+ */
60
+ getParents: (path: string) => RouteInfo[];
61
+ /**
62
+ * Timestamp of the most recent successful load
63
+ */
64
+ lastUpdatedAt: number | null;
65
+ /**
66
+ * Which expo-router path provided the route store ("build" or "src")
67
+ */
68
+ source: "build" | "src" | null;
69
+ }
70
+ /**
71
+ * Hook to access and parse Expo Router's route tree
72
+ *
73
+ * @example
74
+ * ```tsx
75
+ * const { routes, groups, stats, filteredRoutes } = useRouteSitemap({
76
+ * searchQuery: 'pokemon',
77
+ * sortBy: 'path',
78
+ * autoRefresh: true
79
+ * });
80
+ * ```
81
+ */
82
+ export declare function useRouteSitemap(options?: UseRouteSitemapOptions): UseRouteSitemapResult;
83
+ /**
84
+ * Get a specific route by path
85
+ *
86
+ * @example
87
+ * ```tsx
88
+ * const pokemonRoute = useRoute('/pokemon/[id]');
89
+ * ```
90
+ */
91
+ export declare function useRoute(path: string): RouteInfo | null;
92
+ /**
93
+ * Get all parent routes for a given path
94
+ *
95
+ * @example
96
+ * ```tsx
97
+ * const parents = useParentRoutes('/pokemon/[id]');
98
+ * // Returns: [{ path: '/pokemon', ... }]
99
+ * ```
100
+ */
101
+ export declare function useParentRoutes(path: string): RouteInfo[];
102
+ //# sourceMappingURL=useRouteSitemap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useRouteSitemap.d.ts","sourceRoot":"","sources":["../../src/useRouteSitemap.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAEL,KAAK,SAAS,EACd,KAAK,UAAU,EACf,KAAK,UAAU,EAChB,MAAM,eAAe,CAAC;AAoEvB,MAAM,WAAW,sBAAsB;IACrC;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IAElC;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,qBAAqB;IACpC;;OAEG;IACH,MAAM,EAAE,SAAS,EAAE,CAAC;IAEpB;;OAEG;IACH,MAAM,EAAE,UAAU,EAAE,CAAC;IAErB;;OAEG;IACH,KAAK,EAAE,UAAU,CAAC;IAElB;;OAEG;IACH,cAAc,EAAE,SAAS,EAAE,CAAC;IAE5B;;OAEG;IACH,QAAQ,EAAE,OAAO,CAAC;IAElB;;OAEG;IACH,OAAO,EAAE,MAAM,IAAI,CAAC;IAEpB;;OAEG;IACH,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,SAAS,GAAG,IAAI,CAAC;IAE9C;;OAEG;IACH,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,SAAS,EAAE,CAAC;IAE1C;;OAEG;IACH,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAE7B;;OAEG;IACH,MAAM,EAAE,OAAO,GAAG,KAAK,GAAG,IAAI,CAAC;CAChC;AAMD;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAC7B,OAAO,GAAE,sBAA2B,GACnC,qBAAqB,CAuHvB;AAMD;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAGvD;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,CAGzD"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Safe wrapper for expo-router
3
+ *
4
+ * Provides optional imports for expo-router hooks and utilities.
5
+ * Falls back to no-op implementations when expo-router is not installed.
6
+ */
7
+ export declare function useSafeRouter(): any;
8
+ export declare function useSafePathname(): string;
9
+ export declare function useSafeSegments(): string[];
10
+ export declare function useSafeGlobalSearchParams(): Record<string, string | string[]>;
11
+ export declare function getSafeRouter(): any;
12
+ export declare function isExpoRouterAvailable(): boolean;
13
+ //# sourceMappingURL=safeExpoRouter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safeExpoRouter.d.ts","sourceRoot":"","sources":["../../../src/utils/safeExpoRouter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAoDH,wBAAgB,aAAa,QAW5B;AAED,wBAAgB,eAAe,IAAI,MAAM,CAWxC;AAED,wBAAgB,eAAe,IAAI,MAAM,EAAE,CAW1C;AAED,wBAAgB,yBAAyB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAW7E;AAMD,wBAAgB,aAAa,QAU5B;AAMD,wBAAgB,qBAAqB,IAAI,OAAO,CAE/C"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Safe wrapper for @react-navigation/native
3
+ *
4
+ * Provides optional imports for React Navigation hooks.
5
+ * Falls back to no-op implementations when @react-navigation/native is not installed.
6
+ */
7
+ export declare function useSafeNavigation(): any;
8
+ export declare function useSafeNavigationState(selector: (state: any) => any): any;
9
+ export declare function isReactNavigationAvailable(): boolean;
10
+ //# sourceMappingURL=safeReactNavigation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safeReactNavigation.d.ts","sourceRoot":"","sources":["../../../src/utils/safeReactNavigation.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA2EH,wBAAgB,iBAAiB,QAWhC;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,GAAG,OAWnE;AAMD,wBAAgB,0BAA0B,IAAI,OAAO,CAEpD"}
package/package.json ADDED
@@ -0,0 +1,72 @@
1
+ {
2
+ "name": "@buoy-gg/route-events",
3
+ "version": "1.7.2",
4
+ "description": "route-events package",
5
+ "main": "lib/commonjs/index.js",
6
+ "module": "lib/module/index.js",
7
+ "types": "lib/typescript/index.d.ts",
8
+ "react-native": "src/index.tsx",
9
+ "source": "src/index.tsx",
10
+ "files": [
11
+ "lib"
12
+ ],
13
+ "sideEffects": false,
14
+ "scripts": {
15
+ "build": "bob build",
16
+ "typecheck": "tsc --noEmit",
17
+ "prepublishOnly": "bob build",
18
+ "clean": "rimraf lib",
19
+ "test": "pnpm run typecheck"
20
+ },
21
+ "dependencies": {
22
+ "@buoy-gg/floating-tools-core": "workspace:*",
23
+ "@buoy-gg/shared-ui": "workspace:*"
24
+ },
25
+ "peerDependencies": {
26
+ "@react-native-async-storage/async-storage": "*",
27
+ "@react-navigation/native": "*",
28
+ "expo-router": "*",
29
+ "react": "*",
30
+ "react-native": "*"
31
+ },
32
+ "devDependencies": {
33
+ "@react-native-async-storage/async-storage": "^2.1.0",
34
+ "@react-navigation/native": "^7.1.18",
35
+ "@types/react": "^19.1.0",
36
+ "@types/react-native": "^0.73.0",
37
+ "expo-router": "~5.0.7",
38
+ "typescript": "~5.8.3"
39
+ },
40
+ "react-native-builder-bob": {
41
+ "source": "src",
42
+ "output": "lib",
43
+ "targets": [
44
+ [
45
+ "commonjs",
46
+ {
47
+ "sourceMaps": false
48
+ }
49
+ ],
50
+ [
51
+ "module",
52
+ {
53
+ "sourceMaps": false
54
+ }
55
+ ],
56
+ "typescript"
57
+ ]
58
+ },
59
+ "repository": {
60
+ "type": "git",
61
+ "url": "https://github.com/LovesWorking/react-native-buoy.git",
62
+ "directory": "packages/route-events"
63
+ },
64
+ "bugs": {
65
+ "url": "https://github.com/LovesWorking/react-native-buoy/issues"
66
+ },
67
+ "homepage": "https://github.com/LovesWorking/react-native-buoy/tree/main/packages/route-events#readme",
68
+ "publishConfig": {
69
+ "access": "public",
70
+ "tag": "latest"
71
+ }
72
+ }