@workflow/web-shared 5.0.0-beta.4 → 5.0.0-beta.41
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.
- package/README.md +5 -13
- package/dist/components/error-boundary.js +1 -1
- package/dist/components/event-list-view.d.ts +46 -1
- package/dist/components/event-list-view.d.ts.map +1 -1
- package/dist/components/event-list-view.js +235 -97
- package/dist/components/hook-actions.js +1 -1
- package/dist/components/index.d.ts +8 -5
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +6 -4
- package/dist/components/sidebar/attribute-panel.d.ts +4 -1
- package/dist/components/sidebar/attribute-panel.d.ts.map +1 -1
- package/dist/components/sidebar/attribute-panel.js +173 -119
- package/dist/components/sidebar/attributes-block.d.ts +40 -0
- package/dist/components/sidebar/attributes-block.d.ts.map +1 -0
- package/dist/components/sidebar/attributes-block.js +140 -0
- package/dist/components/sidebar/conversation-view.js +1 -1
- package/dist/components/sidebar/copyable-data-block.d.ts +2 -0
- package/dist/components/sidebar/copyable-data-block.d.ts.map +1 -1
- package/dist/components/sidebar/copyable-data-block.js +17 -16
- package/dist/components/sidebar/entity-detail-panel.d.ts +11 -11
- package/dist/components/sidebar/entity-detail-panel.d.ts.map +1 -1
- package/dist/components/sidebar/entity-detail-panel.js +37 -71
- package/dist/components/sidebar/events-list.d.ts +6 -2
- package/dist/components/sidebar/events-list.d.ts.map +1 -1
- package/dist/components/sidebar/events-list.js +77 -63
- package/dist/components/sidebar/resolve-hook-modal.js +1 -1
- package/dist/components/sidebar/sidebar-data-context.d.ts +10 -7
- package/dist/components/sidebar/sidebar-data-context.d.ts.map +1 -1
- package/dist/components/sidebar/sidebar-data-context.js +1 -1
- package/dist/components/sidebar/span-detail-merge.d.ts +31 -0
- package/dist/components/sidebar/span-detail-merge.d.ts.map +1 -0
- package/dist/components/sidebar/span-detail-merge.js +92 -0
- package/dist/components/sidebar/use-selected-span-detail.d.ts +16 -0
- package/dist/components/sidebar/use-selected-span-detail.d.ts.map +1 -0
- package/dist/components/sidebar/use-selected-span-detail.js +93 -0
- package/dist/components/stream-viewer-skeleton.d.ts +2 -0
- package/dist/components/stream-viewer-skeleton.d.ts.map +1 -0
- package/dist/components/stream-viewer-skeleton.js +12 -0
- package/dist/components/stream-viewer.d.ts +1 -1
- package/dist/components/stream-viewer.d.ts.map +1 -1
- package/dist/components/stream-viewer.js +9 -26
- package/dist/components/trace-viewer/components/copy-button.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/copy-button.js +27 -0
- package/dist/components/trace-viewer/components/detail-panel-width.d.ts +34 -0
- package/dist/components/trace-viewer/components/detail-panel-width.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/detail-panel-width.js +67 -0
- package/dist/components/trace-viewer/components/detail-panel.d.ts +14 -0
- package/dist/components/trace-viewer/components/detail-panel.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/detail-panel.js +122 -0
- package/dist/components/trace-viewer/components/draggable-border.d.ts +31 -0
- package/dist/components/trace-viewer/components/draggable-border.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/draggable-border.js +140 -0
- package/dist/components/trace-viewer/components/event-list.d.ts +10 -0
- package/dist/components/trace-viewer/components/event-list.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/event-list.js +47 -0
- package/dist/components/trace-viewer/components/middle-truncate/copy-selection.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/middle-truncate/copy-selection.js +54 -0
- package/dist/components/trace-viewer/components/middle-truncate/middle-truncate.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/middle-truncate/middle-truncate.js +81 -0
- package/dist/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/truncate.d.ts +1 -1
- package/dist/components/trace-viewer/components/middle-truncate/truncate.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/middle-truncate/truncate.js +101 -0
- package/dist/components/trace-viewer/components/middle-truncate/use-middle-truncate.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/middle-truncate/use-middle-truncate.js +114 -0
- package/dist/components/trace-viewer/components/minimap.d.ts +14 -0
- package/dist/components/trace-viewer/components/minimap.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/minimap.js +337 -0
- package/dist/components/trace-viewer/components/pane-constants.d.ts +14 -0
- package/dist/components/trace-viewer/components/pane-constants.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/pane-constants.js +16 -0
- package/dist/components/trace-viewer/components/span-markers.d.ts +46 -0
- package/dist/components/trace-viewer/components/span-markers.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/span-markers.js +85 -0
- package/dist/components/trace-viewer/components/split-pane.d.ts +10 -0
- package/dist/components/trace-viewer/components/split-pane.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/split-pane.js +41 -0
- package/dist/components/trace-viewer/components/timeline.d.ts +42 -0
- package/dist/components/trace-viewer/components/timeline.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/timeline.js +321 -0
- package/dist/components/trace-viewer/components/timeline.module.css +46 -0
- package/dist/components/trace-viewer/components/trace-shortcut-helper.d.ts +5 -0
- package/dist/components/trace-viewer/components/trace-shortcut-helper.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/trace-shortcut-helper.js +55 -0
- package/dist/components/trace-viewer/components/trace-shortcut-helper.module.css +20 -0
- package/dist/components/trace-viewer/components/trace-viewer-skeleton.d.ts +2 -0
- package/dist/components/trace-viewer/components/trace-viewer-skeleton.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/trace-viewer-skeleton.js +26 -0
- package/dist/components/trace-viewer/components/use-element-width.d.ts +8 -0
- package/dist/components/trace-viewer/components/use-element-width.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/use-element-width.js +25 -0
- package/dist/components/trace-viewer/components/use-row-window.d.ts +34 -0
- package/dist/components/trace-viewer/components/use-row-window.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/use-row-window.js +107 -0
- package/dist/components/trace-viewer/context.d.ts +14 -182
- package/dist/components/trace-viewer/context.d.ts.map +1 -1
- package/dist/components/trace-viewer/context.js +44 -351
- package/dist/components/trace-viewer/icons.d.ts.map +1 -0
- package/dist/components/trace-viewer/icons.js +15 -0
- package/dist/components/trace-viewer/search.d.ts +19 -0
- package/dist/components/trace-viewer/search.d.ts.map +1 -0
- package/dist/components/trace-viewer/search.js +134 -0
- package/dist/components/trace-viewer/trace-viewer.d.ts +7 -28
- package/dist/components/trace-viewer/trace-viewer.d.ts.map +1 -1
- package/dist/components/trace-viewer/trace-viewer.js +306 -356
- package/dist/components/trace-viewer/types.d.ts +2 -211
- package/dist/components/trace-viewer/types.d.ts.map +1 -1
- package/dist/components/trace-viewer/types.js +1 -1
- package/dist/components/trace-viewer/util/timing.d.ts +2 -2
- package/dist/components/trace-viewer/util/timing.d.ts.map +1 -1
- package/dist/components/trace-viewer/util/timing.js +3 -3
- package/dist/components/trace-viewer/utils.d.ts +111 -0
- package/dist/components/trace-viewer/utils.d.ts.map +1 -0
- package/dist/components/trace-viewer/utils.js +430 -0
- package/dist/components/{trace-viewer-new.d.ts → trace-viewer.d.ts} +7 -3
- package/dist/components/trace-viewer.d.ts.map +1 -0
- package/dist/components/trace-viewer.js +21 -0
- package/dist/components/ui/alert.js +3 -3
- package/dist/components/ui/button.d.ts +10 -0
- package/dist/components/ui/button.d.ts.map +1 -0
- package/dist/components/ui/button.js +46 -0
- package/dist/components/ui/card.d.ts.map +1 -1
- package/dist/components/ui/card.js +4 -4
- package/dist/components/ui/collapsible.d.ts +46 -0
- package/dist/components/ui/collapsible.d.ts.map +1 -0
- package/dist/components/ui/collapsible.js +66 -0
- package/dist/components/ui/context-card.d.ts +47 -0
- package/dist/components/ui/context-card.d.ts.map +1 -0
- package/dist/components/ui/context-card.js +471 -0
- package/dist/components/ui/data-inspector.d.ts +7 -6
- package/dist/components/ui/data-inspector.d.ts.map +1 -1
- package/dist/components/ui/data-inspector.js +232 -99
- package/dist/components/ui/data-inspector.styles.d.ts +29 -0
- package/dist/components/ui/data-inspector.styles.d.ts.map +1 -0
- package/dist/components/ui/data-inspector.styles.js +95 -0
- package/dist/components/ui/decrypt-button.js +1 -1
- package/dist/components/ui/error-card.js +3 -3
- package/dist/components/ui/error-stack-block.d.ts +17 -10
- package/dist/components/ui/error-stack-block.d.ts.map +1 -1
- package/dist/components/ui/error-stack-block.js +49 -30
- package/dist/components/ui/icon-button.d.ts +19 -0
- package/dist/components/ui/icon-button.d.ts.map +1 -0
- package/dist/components/ui/icon-button.js +29 -0
- package/dist/components/ui/kbd.d.ts +10 -0
- package/dist/components/ui/kbd.d.ts.map +1 -0
- package/dist/components/ui/kbd.js +25 -0
- package/dist/components/ui/load-more-button.js +1 -1
- package/dist/components/ui/menu-dropdown.js +1 -1
- package/dist/components/ui/skeleton.js +2 -2
- package/dist/components/ui/spinner.js +1 -1
- package/dist/components/ui/timestamp-tooltip.d.ts +34 -1
- package/dist/components/ui/timestamp-tooltip.d.ts.map +1 -1
- package/dist/components/ui/timestamp-tooltip.js +80 -132
- package/dist/components/ui/tooltip.d.ts +10 -0
- package/dist/components/ui/tooltip.d.ts.map +1 -0
- package/dist/components/ui/tooltip.js +12 -0
- package/dist/components/workflow-traces/event-colors.d.ts +2 -1
- package/dist/components/workflow-traces/event-colors.d.ts.map +1 -1
- package/dist/components/workflow-traces/event-colors.js +15 -7
- package/dist/components/workflow-traces/trace-span-construction.d.ts +6 -3
- package/dist/components/workflow-traces/trace-span-construction.d.ts.map +1 -1
- package/dist/components/workflow-traces/trace-span-construction.js +71 -30
- package/dist/components/workflow-traces/trace-time-utils.js +1 -1
- package/dist/hooks/use-dark-mode.js +1 -1
- package/dist/hooks/use-intersection-observer.d.ts +17 -0
- package/dist/hooks/use-intersection-observer.d.ts.map +1 -0
- package/dist/hooks/use-intersection-observer.js +29 -0
- package/dist/hooks/use-load-more-on-scroll.d.ts +21 -0
- package/dist/hooks/use-load-more-on-scroll.d.ts.map +1 -0
- package/dist/hooks/use-load-more-on-scroll.js +28 -0
- package/dist/hooks/use-reduced-motion.d.ts +10 -0
- package/dist/hooks/use-reduced-motion.d.ts.map +1 -0
- package/dist/hooks/use-reduced-motion.js +29 -0
- package/dist/index.d.ts +4 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -3
- package/dist/lib/cn.d.ts +10 -0
- package/dist/lib/cn.d.ts.map +1 -0
- package/dist/lib/cn.js +83 -0
- package/dist/lib/event-analysis.d.ts +1 -1
- package/dist/lib/event-analysis.d.ts.map +1 -1
- package/dist/lib/event-analysis.js +3 -2
- package/dist/lib/event-materialization.d.ts +1 -1
- package/dist/lib/event-materialization.d.ts.map +1 -1
- package/dist/lib/event-materialization.js +29 -21
- package/dist/lib/exact-event-search-id.d.ts +25 -0
- package/dist/lib/exact-event-search-id.d.ts.map +1 -0
- package/dist/lib/exact-event-search-id.js +39 -0
- package/dist/lib/hydration.d.ts +17 -2
- package/dist/lib/hydration.d.ts.map +1 -1
- package/dist/lib/hydration.js +194 -23
- package/dist/lib/stream-display.js +1 -1
- package/dist/lib/toast.js +1 -1
- package/dist/lib/trace-builder.d.ts +17 -5
- package/dist/lib/trace-builder.d.ts.map +1 -1
- package/dist/lib/trace-builder.js +32 -14
- package/dist/lib/trace-types.d.ts +54 -0
- package/dist/lib/trace-types.d.ts.map +1 -0
- package/dist/lib/trace-types.js +2 -0
- package/dist/lib/utils.d.ts +14 -2
- package/dist/lib/utils.d.ts.map +1 -1
- package/dist/lib/utils.js +46 -6
- package/dist/lib/zstd-browser-decoder.d.ts +7 -0
- package/dist/lib/zstd-browser-decoder.d.ts.map +1 -0
- package/dist/lib/zstd-browser-decoder.js +41 -0
- package/dist/styles.css +210 -139
- package/package.json +11 -8
- package/src/components/event-list-view.tsx +385 -123
- package/src/components/index.ts +14 -8
- package/src/components/sidebar/attribute-panel.tsx +331 -282
- package/src/components/sidebar/attributes-block.tsx +326 -0
- package/src/components/sidebar/copyable-data-block.tsx +50 -28
- package/src/components/sidebar/entity-detail-panel.tsx +92 -126
- package/src/components/sidebar/events-list.tsx +197 -179
- package/src/components/sidebar/sidebar-data-context.tsx +11 -11
- package/src/components/sidebar/span-detail-merge.ts +134 -0
- package/src/components/sidebar/use-selected-span-detail.ts +146 -0
- package/src/components/stream-viewer-skeleton.tsx +34 -0
- package/src/components/stream-viewer.tsx +34 -106
- package/src/components/{new-trace-viewer → trace-viewer}/components/copy-button.tsx +2 -2
- package/src/components/trace-viewer/components/detail-panel-width.test.ts +123 -0
- package/src/components/trace-viewer/components/detail-panel-width.ts +76 -0
- package/src/components/trace-viewer/components/detail-panel.tsx +273 -0
- package/src/components/trace-viewer/components/draggable-border.tsx +216 -0
- package/src/components/trace-viewer/components/event-list.tsx +144 -0
- package/src/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/middle-truncate.tsx +8 -8
- package/src/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/truncate.ts +1 -1
- package/src/components/trace-viewer/components/minimap.tsx +556 -0
- package/src/components/trace-viewer/components/pane-constants.ts +19 -0
- package/src/components/trace-viewer/components/span-markers.tsx +173 -0
- package/src/components/trace-viewer/components/split-pane.tsx +141 -0
- package/src/components/trace-viewer/components/timeline.module.css +46 -0
- package/src/components/trace-viewer/components/timeline.tsx +850 -0
- package/src/components/trace-viewer/components/trace-shortcut-helper.module.css +20 -0
- package/src/components/trace-viewer/components/trace-shortcut-helper.tsx +116 -0
- package/src/components/trace-viewer/components/trace-viewer-skeleton.tsx +114 -0
- package/src/components/trace-viewer/components/use-element-width.ts +29 -0
- package/src/components/trace-viewer/components/use-row-window.ts +140 -0
- package/src/components/trace-viewer/context.tsx +63 -656
- package/src/components/{new-trace-viewer → trace-viewer}/icons.tsx +2 -2
- package/src/components/trace-viewer/search.ts +178 -0
- package/src/components/trace-viewer/trace-viewer.tsx +563 -531
- package/src/components/trace-viewer/types.ts +2 -234
- package/src/components/trace-viewer/util/timing.ts +2 -2
- package/src/components/trace-viewer/utils.test.ts +458 -0
- package/src/components/{new-trace-viewer → trace-viewer}/utils.ts +271 -50
- package/src/components/{trace-viewer-new.tsx → trace-viewer.tsx} +24 -18
- package/src/components/ui/alert.tsx +2 -2
- package/src/components/ui/button.tsx +68 -0
- package/src/components/ui/card.tsx +3 -10
- package/src/components/ui/collapsible.tsx +219 -0
- package/src/components/ui/context-card.tsx +784 -0
- package/src/components/ui/data-inspector.styles.ts +96 -0
- package/src/components/ui/data-inspector.tsx +501 -204
- package/src/components/ui/error-card.tsx +4 -4
- package/src/components/ui/error-stack-block.tsx +84 -55
- package/src/components/ui/icon-button.tsx +53 -0
- package/src/components/ui/kbd.tsx +43 -0
- package/src/components/ui/skeleton.tsx +1 -1
- package/src/components/ui/timestamp-tooltip.tsx +132 -194
- package/src/components/ui/tooltip.tsx +47 -0
- package/src/components/workflow-traces/event-colors.ts +15 -11
- package/src/components/workflow-traces/trace-span-construction.test.ts +85 -0
- package/src/components/workflow-traces/trace-span-construction.ts +97 -32
- package/src/hooks/use-intersection-observer.ts +57 -0
- package/src/hooks/use-load-more-on-scroll.ts +49 -0
- package/src/hooks/use-reduced-motion.ts +34 -0
- package/src/index.ts +10 -4
- package/src/lib/cn.ts +93 -0
- package/src/lib/event-analysis.ts +6 -4
- package/src/lib/event-materialization.ts +35 -21
- package/src/lib/exact-event-search-id.ts +67 -0
- package/src/lib/hydration.ts +210 -30
- package/src/lib/trace-builder.ts +43 -19
- package/src/lib/trace-types.ts +56 -0
- package/src/lib/utils.test.ts +33 -0
- package/src/lib/utils.ts +53 -6
- package/src/lib/zstd-browser-decoder.ts +42 -0
- package/src/styles.css +210 -139
- package/dist/components/error-boundary.js.map +0 -1
- package/dist/components/event-list-view.js.map +0 -1
- package/dist/components/hook-actions.js.map +0 -1
- package/dist/components/index.js.map +0 -1
- package/dist/components/new-trace-viewer/components/copy-button.d.ts.map +0 -1
- package/dist/components/new-trace-viewer/components/copy-button.js +0 -27
- package/dist/components/new-trace-viewer/components/copy-button.js.map +0 -1
- package/dist/components/new-trace-viewer/components/event-list.d.ts +0 -8
- package/dist/components/new-trace-viewer/components/event-list.d.ts.map +0 -1
- package/dist/components/new-trace-viewer/components/event-list.js +0 -38
- package/dist/components/new-trace-viewer/components/event-list.js.map +0 -1
- package/dist/components/new-trace-viewer/components/middle-truncate/copy-selection.d.ts.map +0 -1
- package/dist/components/new-trace-viewer/components/middle-truncate/copy-selection.js +0 -54
- package/dist/components/new-trace-viewer/components/middle-truncate/copy-selection.js.map +0 -1
- package/dist/components/new-trace-viewer/components/middle-truncate/middle-truncate.d.ts.map +0 -1
- package/dist/components/new-trace-viewer/components/middle-truncate/middle-truncate.js +0 -81
- package/dist/components/new-trace-viewer/components/middle-truncate/middle-truncate.js.map +0 -1
- package/dist/components/new-trace-viewer/components/middle-truncate/truncate.d.ts.map +0 -1
- package/dist/components/new-trace-viewer/components/middle-truncate/truncate.js +0 -101
- package/dist/components/new-trace-viewer/components/middle-truncate/truncate.js.map +0 -1
- package/dist/components/new-trace-viewer/components/middle-truncate/use-middle-truncate.d.ts.map +0 -1
- package/dist/components/new-trace-viewer/components/middle-truncate/use-middle-truncate.js +0 -114
- package/dist/components/new-trace-viewer/components/middle-truncate/use-middle-truncate.js.map +0 -1
- package/dist/components/new-trace-viewer/components/split-pane.d.ts +0 -14
- package/dist/components/new-trace-viewer/components/split-pane.d.ts.map +0 -1
- package/dist/components/new-trace-viewer/components/split-pane.js +0 -99
- package/dist/components/new-trace-viewer/components/split-pane.js.map +0 -1
- package/dist/components/new-trace-viewer/components/timeline.d.ts +0 -31
- package/dist/components/new-trace-viewer/components/timeline.d.ts.map +0 -1
- package/dist/components/new-trace-viewer/components/timeline.js +0 -138
- package/dist/components/new-trace-viewer/components/timeline.js.map +0 -1
- package/dist/components/new-trace-viewer/context.d.ts +0 -15
- package/dist/components/new-trace-viewer/context.d.ts.map +0 -1
- package/dist/components/new-trace-viewer/context.js +0 -47
- package/dist/components/new-trace-viewer/context.js.map +0 -1
- package/dist/components/new-trace-viewer/detail-panel.d.ts +0 -10
- package/dist/components/new-trace-viewer/detail-panel.d.ts.map +0 -1
- package/dist/components/new-trace-viewer/detail-panel.js +0 -12
- package/dist/components/new-trace-viewer/detail-panel.js.map +0 -1
- package/dist/components/new-trace-viewer/icons.d.ts.map +0 -1
- package/dist/components/new-trace-viewer/icons.js +0 -15
- package/dist/components/new-trace-viewer/icons.js.map +0 -1
- package/dist/components/new-trace-viewer/trace-viewer.d.ts +0 -8
- package/dist/components/new-trace-viewer/trace-viewer.d.ts.map +0 -1
- package/dist/components/new-trace-viewer/trace-viewer.js +0 -349
- package/dist/components/new-trace-viewer/trace-viewer.js.map +0 -1
- package/dist/components/new-trace-viewer/types.d.ts +0 -1
- package/dist/components/new-trace-viewer/types.d.ts.map +0 -1
- package/dist/components/new-trace-viewer/types.js +0 -2
- package/dist/components/new-trace-viewer/types.js.map +0 -1
- package/dist/components/new-trace-viewer/util/constants.d.ts +0 -1
- package/dist/components/new-trace-viewer/util/constants.d.ts.map +0 -1
- package/dist/components/new-trace-viewer/util/constants.js +0 -2
- package/dist/components/new-trace-viewer/util/constants.js.map +0 -1
- package/dist/components/new-trace-viewer/utils.d.ts +0 -42
- package/dist/components/new-trace-viewer/utils.d.ts.map +0 -1
- package/dist/components/new-trace-viewer/utils.js +0 -305
- package/dist/components/new-trace-viewer/utils.js.map +0 -1
- package/dist/components/run-trace-view.d.ts +0 -25
- package/dist/components/run-trace-view.d.ts.map +0 -1
- package/dist/components/run-trace-view.js +0 -11
- package/dist/components/run-trace-view.js.map +0 -1
- package/dist/components/sidebar/attribute-panel.js.map +0 -1
- package/dist/components/sidebar/conversation-view.js.map +0 -1
- package/dist/components/sidebar/copyable-data-block.js.map +0 -1
- package/dist/components/sidebar/detail-card.d.ts +0 -14
- package/dist/components/sidebar/detail-card.d.ts.map +0 -1
- package/dist/components/sidebar/detail-card.js +0 -20
- package/dist/components/sidebar/detail-card.js.map +0 -1
- package/dist/components/sidebar/entity-detail-panel.js.map +0 -1
- package/dist/components/sidebar/events-list.js.map +0 -1
- package/dist/components/sidebar/resolve-hook-modal.js.map +0 -1
- package/dist/components/sidebar/sidebar-data-context.js.map +0 -1
- package/dist/components/stream-viewer.js.map +0 -1
- package/dist/components/trace-viewer/components/map.d.ts +0 -8
- package/dist/components/trace-viewer/components/map.d.ts.map +0 -1
- package/dist/components/trace-viewer/components/map.js +0 -162
- package/dist/components/trace-viewer/components/map.js.map +0 -1
- package/dist/components/trace-viewer/components/markers.d.ts +0 -23
- package/dist/components/trace-viewer/components/markers.d.ts.map +0 -1
- package/dist/components/trace-viewer/components/markers.js +0 -416
- package/dist/components/trace-viewer/components/markers.js.map +0 -1
- package/dist/components/trace-viewer/components/node.d.ts +0 -35
- package/dist/components/trace-viewer/components/node.d.ts.map +0 -1
- package/dist/components/trace-viewer/components/node.js +0 -285
- package/dist/components/trace-viewer/components/node.js.map +0 -1
- package/dist/components/trace-viewer/components/search-input.d.ts +0 -9
- package/dist/components/trace-viewer/components/search-input.d.ts.map +0 -1
- package/dist/components/trace-viewer/components/search-input.js +0 -9
- package/dist/components/trace-viewer/components/search-input.js.map +0 -1
- package/dist/components/trace-viewer/components/search.d.ts +0 -3
- package/dist/components/trace-viewer/components/search.d.ts.map +0 -1
- package/dist/components/trace-viewer/components/search.js +0 -25
- package/dist/components/trace-viewer/components/search.js.map +0 -1
- package/dist/components/trace-viewer/components/span-content.d.ts +0 -19
- package/dist/components/trace-viewer/components/span-content.d.ts.map +0 -1
- package/dist/components/trace-viewer/components/span-content.js +0 -137
- package/dist/components/trace-viewer/components/span-content.js.map +0 -1
- package/dist/components/trace-viewer/components/span-detail-panel.d.ts +0 -10
- package/dist/components/trace-viewer/components/span-detail-panel.d.ts.map +0 -1
- package/dist/components/trace-viewer/components/span-detail-panel.js +0 -285
- package/dist/components/trace-viewer/components/span-detail-panel.js.map +0 -1
- package/dist/components/trace-viewer/components/span-segments.d.ts +0 -50
- package/dist/components/trace-viewer/components/span-segments.d.ts.map +0 -1
- package/dist/components/trace-viewer/components/span-segments.js +0 -445
- package/dist/components/trace-viewer/components/span-segments.js.map +0 -1
- package/dist/components/trace-viewer/components/span-strategies.d.ts +0 -46
- package/dist/components/trace-viewer/components/span-strategies.d.ts.map +0 -1
- package/dist/components/trace-viewer/components/span-strategies.js +0 -108
- package/dist/components/trace-viewer/components/span-strategies.js.map +0 -1
- package/dist/components/trace-viewer/components/ui.d.ts +0 -28
- package/dist/components/trace-viewer/components/ui.d.ts.map +0 -1
- package/dist/components/trace-viewer/components/ui.js +0 -39
- package/dist/components/trace-viewer/components/ui.js.map +0 -1
- package/dist/components/trace-viewer/components/zoom-button.d.ts +0 -3
- package/dist/components/trace-viewer/components/zoom-button.d.ts.map +0 -1
- package/dist/components/trace-viewer/components/zoom-button.js +0 -29
- package/dist/components/trace-viewer/components/zoom-button.js.map +0 -1
- package/dist/components/trace-viewer/components/zoom-icons.d.ts +0 -11
- package/dist/components/trace-viewer/components/zoom-icons.d.ts.map +0 -1
- package/dist/components/trace-viewer/components/zoom-icons.js +0 -11
- package/dist/components/trace-viewer/components/zoom-icons.js.map +0 -1
- package/dist/components/trace-viewer/context.js.map +0 -1
- package/dist/components/trace-viewer/index.d.ts +0 -5
- package/dist/components/trace-viewer/index.d.ts.map +0 -1
- package/dist/components/trace-viewer/index.js +0 -4
- package/dist/components/trace-viewer/index.js.map +0 -1
- package/dist/components/trace-viewer/trace-viewer.js.map +0 -1
- package/dist/components/trace-viewer/trace-viewer.module.css +0 -1465
- package/dist/components/trace-viewer/types.js.map +0 -1
- package/dist/components/trace-viewer/util/constants.d.ts +0 -9
- package/dist/components/trace-viewer/util/constants.d.ts.map +0 -1
- package/dist/components/trace-viewer/util/constants.js +0 -9
- package/dist/components/trace-viewer/util/constants.js.map +0 -1
- package/dist/components/trace-viewer/util/scrollbar-width.d.ts +0 -2
- package/dist/components/trace-viewer/util/scrollbar-width.d.ts.map +0 -1
- package/dist/components/trace-viewer/util/scrollbar-width.js +0 -14
- package/dist/components/trace-viewer/util/scrollbar-width.js.map +0 -1
- package/dist/components/trace-viewer/util/timing.js.map +0 -1
- package/dist/components/trace-viewer/util/tree.d.ts +0 -13
- package/dist/components/trace-viewer/util/tree.d.ts.map +0 -1
- package/dist/components/trace-viewer/util/tree.js +0 -227
- package/dist/components/trace-viewer/util/tree.js.map +0 -1
- package/dist/components/trace-viewer/util/use-immediate-style.d.ts +0 -15
- package/dist/components/trace-viewer/util/use-immediate-style.d.ts.map +0 -1
- package/dist/components/trace-viewer/util/use-immediate-style.js +0 -23
- package/dist/components/trace-viewer/util/use-immediate-style.js.map +0 -1
- package/dist/components/trace-viewer/util/use-streaming-spans.d.ts +0 -8
- package/dist/components/trace-viewer/util/use-streaming-spans.d.ts.map +0 -1
- package/dist/components/trace-viewer/util/use-streaming-spans.js +0 -345
- package/dist/components/trace-viewer/util/use-streaming-spans.js.map +0 -1
- package/dist/components/trace-viewer/util/use-trackpad-zoom.d.ts +0 -6
- package/dist/components/trace-viewer/util/use-trackpad-zoom.d.ts.map +0 -1
- package/dist/components/trace-viewer/util/use-trackpad-zoom.js +0 -39
- package/dist/components/trace-viewer/util/use-trackpad-zoom.js.map +0 -1
- package/dist/components/trace-viewer/worker.d.ts +0 -2
- package/dist/components/trace-viewer/worker.d.ts.map +0 -1
- package/dist/components/trace-viewer/worker.js +0 -109
- package/dist/components/trace-viewer/worker.js.map +0 -1
- package/dist/components/trace-viewer-new.d.ts.map +0 -1
- package/dist/components/trace-viewer-new.js +0 -23
- package/dist/components/trace-viewer-new.js.map +0 -1
- package/dist/components/ui/alert.js.map +0 -1
- package/dist/components/ui/card.js.map +0 -1
- package/dist/components/ui/data-inspector.js.map +0 -1
- package/dist/components/ui/decrypt-button.js.map +0 -1
- package/dist/components/ui/error-card.js.map +0 -1
- package/dist/components/ui/error-stack-block.js.map +0 -1
- package/dist/components/ui/inspector-theme.d.ts +0 -95
- package/dist/components/ui/inspector-theme.d.ts.map +0 -1
- package/dist/components/ui/inspector-theme.js +0 -82
- package/dist/components/ui/inspector-theme.js.map +0 -1
- package/dist/components/ui/load-more-button.js.map +0 -1
- package/dist/components/ui/menu-dropdown.js.map +0 -1
- package/dist/components/ui/skeleton.js.map +0 -1
- package/dist/components/ui/spinner.js.map +0 -1
- package/dist/components/ui/timestamp-tooltip.js.map +0 -1
- package/dist/components/workflow-trace-view.d.ts +0 -40
- package/dist/components/workflow-trace-view.d.ts.map +0 -1
- package/dist/components/workflow-trace-view.js +0 -695
- package/dist/components/workflow-trace-view.js.map +0 -1
- package/dist/components/workflow-traces/event-colors.js.map +0 -1
- package/dist/components/workflow-traces/trace-colors.d.ts +0 -15
- package/dist/components/workflow-traces/trace-colors.d.ts.map +0 -1
- package/dist/components/workflow-traces/trace-colors.js +0 -87
- package/dist/components/workflow-traces/trace-colors.js.map +0 -1
- package/dist/components/workflow-traces/trace-span-construction.js.map +0 -1
- package/dist/components/workflow-traces/trace-time-utils.js.map +0 -1
- package/dist/hooks/use-dark-mode.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/lib/event-analysis.js.map +0 -1
- package/dist/lib/event-materialization.js.map +0 -1
- package/dist/lib/hydration.js.map +0 -1
- package/dist/lib/stream-display.js.map +0 -1
- package/dist/lib/toast.js.map +0 -1
- package/dist/lib/trace-builder.js.map +0 -1
- package/dist/lib/utils.js.map +0 -1
- package/src/components/new-trace-viewer/components/event-list.tsx +0 -116
- package/src/components/new-trace-viewer/components/split-pane.tsx +0 -185
- package/src/components/new-trace-viewer/components/timeline.tsx +0 -382
- package/src/components/new-trace-viewer/context.tsx +0 -92
- package/src/components/new-trace-viewer/detail-panel.tsx +0 -58
- package/src/components/new-trace-viewer/trace-viewer.tsx +0 -645
- package/src/components/new-trace-viewer/types.ts +0 -0
- package/src/components/new-trace-viewer/util/constants.ts +0 -0
- package/src/components/run-trace-view.tsx +0 -84
- package/src/components/sidebar/detail-card.tsx +0 -65
- package/src/components/trace-viewer/components/map.tsx +0 -226
- package/src/components/trace-viewer/components/markers.tsx +0 -612
- package/src/components/trace-viewer/components/node.tsx +0 -505
- package/src/components/trace-viewer/components/search-input.tsx +0 -52
- package/src/components/trace-viewer/components/search.tsx +0 -47
- package/src/components/trace-viewer/components/span-content.tsx +0 -247
- package/src/components/trace-viewer/components/span-detail-panel.tsx +0 -655
- package/src/components/trace-viewer/components/span-segments.ts +0 -585
- package/src/components/trace-viewer/components/span-strategies.ts +0 -205
- package/src/components/trace-viewer/components/ui.tsx +0 -156
- package/src/components/trace-viewer/components/zoom-button.tsx +0 -61
- package/src/components/trace-viewer/components/zoom-icons.tsx +0 -65
- package/src/components/trace-viewer/index.tsx +0 -4
- package/src/components/trace-viewer/trace-viewer.module.css +0 -1465
- package/src/components/trace-viewer/util/constants.ts +0 -8
- package/src/components/trace-viewer/util/scrollbar-width.ts +0 -13
- package/src/components/trace-viewer/util/tree.ts +0 -277
- package/src/components/trace-viewer/util/use-immediate-style.ts +0 -38
- package/src/components/trace-viewer/util/use-streaming-spans.ts +0 -426
- package/src/components/trace-viewer/util/use-trackpad-zoom.tsx +0 -51
- package/src/components/trace-viewer/worker.ts +0 -131
- package/src/components/ui/inspector-theme.ts +0 -110
- package/src/components/workflow-trace-view.tsx +0 -1171
- package/src/components/workflow-traces/trace-colors.ts +0 -112
- /package/dist/components/{new-trace-viewer → trace-viewer}/components/copy-button.d.ts +0 -0
- /package/dist/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/copy-selection.d.ts +0 -0
- /package/dist/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/middle-truncate.d.ts +0 -0
- /package/dist/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/use-middle-truncate.d.ts +0 -0
- /package/dist/components/{new-trace-viewer → trace-viewer}/icons.d.ts +0 -0
- /package/src/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/copy-selection.ts +0 -0
- /package/src/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/use-middle-truncate.ts +0 -0
- /package/src/{components/trace-viewer/modules.d.ts → modules.d.ts} +0 -0
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* Functions for constructing OpenTelemetry spans from workflow entities
|
|
3
3
|
*/
|
|
4
4
|
import { parseStepName, parseWorkflowName } from '@workflow/utils/parse-name';
|
|
5
|
+
import { isTerminalStepEventType, } from '@workflow/world';
|
|
5
6
|
import { shouldShowVerticalLine } from './event-colors';
|
|
6
7
|
import { calculateDuration, dateToOtelTime } from './trace-time-utils';
|
|
7
8
|
export const WORKFLOW_LIBRARY = {
|
|
@@ -21,17 +22,27 @@ const MARKER_EVENT_TYPES = new Set([
|
|
|
21
22
|
'run_failed',
|
|
22
23
|
'wait_created',
|
|
23
24
|
'wait_completed',
|
|
25
|
+
'attr_set',
|
|
24
26
|
]);
|
|
27
|
+
export const getEventTimestamp = (event) => {
|
|
28
|
+
const value = event?.occurredAt ?? event?.createdAt;
|
|
29
|
+
if (!value)
|
|
30
|
+
return undefined;
|
|
31
|
+
const date = value instanceof Date ? value : new Date(value);
|
|
32
|
+
return Number.isNaN(date.getTime()) ? undefined : date;
|
|
33
|
+
};
|
|
25
34
|
/**
|
|
26
35
|
* Convert workflow events to span events
|
|
27
36
|
* Only includes events that should be displayed as markers
|
|
28
37
|
*/
|
|
29
|
-
export function convertEventsToSpanEvents(events, filterTypes = true) {
|
|
38
|
+
export function convertEventsToSpanEvents(events, filterTypes = true, options = {}) {
|
|
30
39
|
return events
|
|
31
40
|
.filter((event) => filterTypes ? MARKER_EVENT_TYPES.has(event.eventType) : true)
|
|
32
41
|
.map((event) => ({
|
|
33
42
|
name: event.eventType,
|
|
34
|
-
timestamp: dateToOtelTime(
|
|
43
|
+
timestamp: dateToOtelTime(options.preferOccurredAt
|
|
44
|
+
? (getEventTimestamp(event) ?? event.createdAt)
|
|
45
|
+
: event.createdAt),
|
|
35
46
|
attributes: {
|
|
36
47
|
eventId: event.eventId,
|
|
37
48
|
correlationId: event.correlationId,
|
|
@@ -50,11 +61,11 @@ export const waitEventsToWaitEntity = (events) => {
|
|
|
50
61
|
return {
|
|
51
62
|
waitId: startEvent.correlationId,
|
|
52
63
|
runId: startEvent.runId,
|
|
53
|
-
createdAt: startEvent.createdAt,
|
|
64
|
+
createdAt: getEventTimestamp(startEvent) ?? startEvent.createdAt,
|
|
54
65
|
resumeAt: startEvent.eventData?.resumeAt
|
|
55
66
|
? new Date(startEvent.eventData.resumeAt)
|
|
56
67
|
: undefined,
|
|
57
|
-
completedAt: completedEvent
|
|
68
|
+
completedAt: getEventTimestamp(completedEvent),
|
|
58
69
|
};
|
|
59
70
|
};
|
|
60
71
|
/**
|
|
@@ -121,16 +132,16 @@ export const stepEventsToStepEntity = (events) => {
|
|
|
121
132
|
status = 'running';
|
|
122
133
|
attempt += 1;
|
|
123
134
|
if (!startedAt)
|
|
124
|
-
startedAt = e.createdAt;
|
|
135
|
+
startedAt = getEventTimestamp(e) ?? e.createdAt;
|
|
125
136
|
completedAt = undefined;
|
|
126
137
|
break;
|
|
127
138
|
case 'step_completed':
|
|
128
139
|
status = 'completed';
|
|
129
|
-
completedAt = e.createdAt;
|
|
140
|
+
completedAt = getEventTimestamp(e) ?? e.createdAt;
|
|
130
141
|
break;
|
|
131
142
|
case 'step_failed':
|
|
132
143
|
status = 'failed';
|
|
133
|
-
completedAt = e.createdAt;
|
|
144
|
+
completedAt = getEventTimestamp(e) ?? e.createdAt;
|
|
134
145
|
break;
|
|
135
146
|
case 'step_retrying':
|
|
136
147
|
status = 'pending';
|
|
@@ -148,8 +159,10 @@ export const stepEventsToStepEntity = (events) => {
|
|
|
148
159
|
stepName: createdEvent?.eventData?.stepName ?? '',
|
|
149
160
|
status,
|
|
150
161
|
attempt,
|
|
151
|
-
createdAt: anchorEvent.createdAt,
|
|
152
|
-
updatedAt: lastEvent
|
|
162
|
+
createdAt: getEventTimestamp(anchorEvent) ?? anchorEvent.createdAt,
|
|
163
|
+
updatedAt: getEventTimestamp(lastEvent) ??
|
|
164
|
+
lastEvent?.createdAt ??
|
|
165
|
+
anchorEvent.createdAt,
|
|
153
166
|
startedAt,
|
|
154
167
|
completedAt,
|
|
155
168
|
specVersion: anchorEvent.specVersion,
|
|
@@ -169,21 +182,30 @@ export function stepToSpan(stepEvents, maxEndTime) {
|
|
|
169
182
|
data: step,
|
|
170
183
|
};
|
|
171
184
|
const resource = 'step';
|
|
172
|
-
const endTime = new Date(step.completedAt ?? maxEndTime);
|
|
173
185
|
// Include ALL correlated events on the span so the sidebar detail view
|
|
174
186
|
// can display them. The timeline uses the `showVerticalLine` flag to
|
|
175
187
|
// determine which events appear as markers.
|
|
176
|
-
const events = convertEventsToSpanEvents(stepEvents, false
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
188
|
+
const events = convertEventsToSpanEvents(stepEvents, false, {
|
|
189
|
+
preferOccurredAt: true,
|
|
190
|
+
});
|
|
191
|
+
// Use the event occurrence timestamp for step spans when it is available,
|
|
192
|
+
// falling back to the ingest timestamp used by older event streams.
|
|
193
|
+
const spanStartEvent = stepEvents.find((event) => event.eventType === 'step_created') ??
|
|
194
|
+
stepEvents[0];
|
|
195
|
+
const spanStartTime = getEventTimestamp(spanStartEvent) ?? new Date(step.createdAt);
|
|
180
196
|
let activeStartTime = step.startedAt ? new Date(step.startedAt) : undefined;
|
|
181
197
|
const firstStartEvent = stepEvents.find((event) => event.eventType === 'step_started');
|
|
182
198
|
if (firstStartEvent) {
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
199
|
+
activeStartTime =
|
|
200
|
+
getEventTimestamp(firstStartEvent) ?? new Date(firstStartEvent.createdAt);
|
|
201
|
+
}
|
|
202
|
+
let endTime = new Date(maxEndTime);
|
|
203
|
+
if (step.completedAt) {
|
|
204
|
+
const completedEvent = stepEvents
|
|
205
|
+
.slice()
|
|
206
|
+
.reverse()
|
|
207
|
+
.find((event) => isTerminalStepEventType(event.eventType));
|
|
208
|
+
endTime = getEventTimestamp(completedEvent) ?? new Date(step.completedAt);
|
|
187
209
|
}
|
|
188
210
|
return {
|
|
189
211
|
spanId: String(step.stepId),
|
|
@@ -217,10 +239,10 @@ export const hookEventsToHookEntity = (events) => {
|
|
|
217
239
|
hookId: createdEvent.correlationId,
|
|
218
240
|
runId: createdEvent.runId,
|
|
219
241
|
token: createdEvent.eventData?.token,
|
|
220
|
-
createdAt: createdEvent.createdAt,
|
|
242
|
+
createdAt: getEventTimestamp(createdEvent) ?? createdEvent.createdAt,
|
|
221
243
|
receivedCount: receivedEvents.length,
|
|
222
|
-
lastReceivedAt: lastReceivedEvent
|
|
223
|
-
disposedAt: disposedEvents.at(-1)
|
|
244
|
+
lastReceivedAt: getEventTimestamp(lastReceivedEvent),
|
|
245
|
+
disposedAt: getEventTimestamp(disposedEvents.at(-1)),
|
|
224
246
|
};
|
|
225
247
|
};
|
|
226
248
|
/**
|
|
@@ -236,7 +258,7 @@ export function hookToSpan(hookEvents, maxEndTime) {
|
|
|
236
258
|
const endTime = hook.disposedAt || maxEndTime;
|
|
237
259
|
return {
|
|
238
260
|
spanId: String(hook.hookId),
|
|
239
|
-
name: String(hook.hookId),
|
|
261
|
+
name: hook.token ?? String(hook.hookId),
|
|
240
262
|
kind: 1, // INTERNAL span kind
|
|
241
263
|
resource: 'hook',
|
|
242
264
|
library: WORKFLOW_LIBRARY,
|
|
@@ -258,19 +280,38 @@ export function hookToSpan(hookEvents, maxEndTime) {
|
|
|
258
280
|
*/
|
|
259
281
|
export function runToSpan(run, runEvents, nowTime) {
|
|
260
282
|
const now = nowTime ?? new Date();
|
|
283
|
+
// Prefer the event occurrence timestamp when available so the root span
|
|
284
|
+
// lines up with child spans that already use event occurrence time.
|
|
285
|
+
const runCreatedEvent = runEvents.find((event) => event.eventType === 'run_created');
|
|
286
|
+
const runStartedEvent = runEvents.find((event) => event.eventType === 'run_started');
|
|
287
|
+
const terminalEvent = runEvents
|
|
288
|
+
.slice()
|
|
289
|
+
.reverse()
|
|
290
|
+
.find((event) => event.eventType === 'run_completed' ||
|
|
291
|
+
event.eventType === 'run_failed' ||
|
|
292
|
+
event.eventType === 'run_cancelled');
|
|
293
|
+
const spanStartTime = getEventTimestamp(runCreatedEvent) ?? new Date(run.createdAt);
|
|
294
|
+
const activeStartTime = getEventTimestamp(runStartedEvent) ??
|
|
295
|
+
(run.startedAt ? new Date(run.startedAt) : undefined);
|
|
296
|
+
const completedAt = getEventTimestamp(terminalEvent) ?? run.completedAt ?? undefined;
|
|
297
|
+
const endTime = completedAt ?? now;
|
|
261
298
|
// Only embed identification fields — not the full object with
|
|
262
|
-
// input/output/error which may contain non-cloneable types.
|
|
299
|
+
// input/output/error which may contain non-cloneable types. Lifecycle
|
|
300
|
+
// timestamps are event-derived so detail rows align with the span timeline.
|
|
263
301
|
const { input: _i, output: _o, error: _e, ...runIdentity } = run;
|
|
264
302
|
const attributes = {
|
|
265
303
|
resource: 'run',
|
|
266
|
-
data:
|
|
304
|
+
data: {
|
|
305
|
+
...runIdentity,
|
|
306
|
+
createdAt: spanStartTime,
|
|
307
|
+
startedAt: activeStartTime,
|
|
308
|
+
completedAt,
|
|
309
|
+
},
|
|
267
310
|
};
|
|
268
|
-
// Use createdAt as span start time, with activeStartTime for when execution began
|
|
269
|
-
const spanStartTime = new Date(run.createdAt);
|
|
270
|
-
const activeStartTime = run.startedAt ? new Date(run.startedAt) : undefined;
|
|
271
|
-
const endTime = run.completedAt ?? now;
|
|
272
311
|
// Convert run-level events to span events
|
|
273
|
-
const events = convertEventsToSpanEvents(runEvents, false
|
|
312
|
+
const events = convertEventsToSpanEvents(runEvents, false, {
|
|
313
|
+
preferOccurredAt: true,
|
|
314
|
+
});
|
|
274
315
|
return {
|
|
275
316
|
spanId: String(run.runId),
|
|
276
317
|
name: String(parseWorkflowName(run.workflowName)?.shortName ?? '?'),
|
|
@@ -291,4 +332,4 @@ export function runToSpan(run, runEvents, nowTime) {
|
|
|
291
332
|
: undefined,
|
|
292
333
|
};
|
|
293
334
|
}
|
|
294
|
-
//# sourceMappingURL=trace-span-construction.js.map
|
|
335
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2Utc3Bhbi1jb25zdHJ1Y3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy93b3JrZmxvdy10cmFjZXMvdHJhY2Utc3Bhbi1jb25zdHJ1Y3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxPQUFPLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDOUUsT0FBTyxFQUVMLHVCQUF1QixHQUV4QixNQUFNLGlCQUFpQixDQUFDO0FBRXpCLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUV2RSxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRztJQUM5QixJQUFJLEVBQUUsMEJBQTBCO0lBQ2hDLE9BQU8sRUFBRSxPQUFPO0NBQ2pCLENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sa0JBQWtCLEdBQTRCLElBQUksR0FBRyxDQUFDO0lBQzFELGNBQWM7SUFDZCxlQUFlO0lBQ2YsZUFBZTtJQUNmLGNBQWM7SUFDZCxlQUFlO0lBQ2YsYUFBYTtJQUNiLFlBQVk7SUFDWixjQUFjO0lBQ2QsZ0JBQWdCO0lBQ2hCLFVBQVU7Q0FDWCxDQUFDLENBQUM7QUFFSCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxDQUMvQixLQUF3QixFQUNOLEVBQUU7SUFDcEIsTUFBTSxLQUFLLEdBQUcsS0FBSyxFQUFFLFVBQVUsSUFBSSxLQUFLLEVBQUUsU0FBUyxDQUFDO0lBQ3BELElBQUksQ0FBQyxLQUFLO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFFN0IsTUFBTSxJQUFJLEdBQUcsS0FBSyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3RCxP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QUFTLEVBQUUsS0FBSyxFQUFFO1FBQ3pELGdCQUFnQixFQUFFLElBQUk7S0FDdkIsQ0FBQyxDQUFDO0lBRUgsT0FBTztRQUNMLE1BQU0sRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztRQUN6QixJQUFJLEVBQUUsTUFBTSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsRUFBRSxTQUFTLElBQUksR0FBRyxDQUFDO1FBQ25FLElBQUksRUFBRSxDQUFDLEVBQUUscUJBQXFCO1FBQzlCLFFBQVEsRUFBRSxLQUFLO1FBQ2YsT0FBTyxFQUFFLGdCQUFnQjtRQUN6QixNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFO1FBQ25CLFVBQVUsRUFBRSxDQUFDO1FBQ2IsVUFBVTtRQUNWLEtBQUssRUFBRSxFQUFFO1FBQ1QsTUFBTTtRQUNOLFNBQVMsRUFBRSxjQUFjLENBQUMsYUFBYSxDQUFDO1FBQ3hDLE9BQU8sRUFBRSxjQUFjLENBQUMsT0FBTyxDQUFDO1FBQ2hDLFFBQVEsRUFBRSxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDO1FBQ25ELDBGQUEwRjtRQUMxRixlQUFlLEVBQ2IsZUFBZSxJQUFJLGVBQWUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxhQUFhLENBQUMsT0FBTyxFQUFFO1lBQ3BFLENBQUMsQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDO1lBQ2pDLENBQUMsQ0FBQyxTQUFTO0tBQ2hCLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBGdW5jdGlvbnMgZm9yIGNvbnN0cnVjdGluZyBPcGVuVGVsZW1ldHJ5IHNwYW5zIGZyb20gd29ya2Zsb3cgZW50aXRpZXNcbiAqL1xuXG5pbXBvcnQgeyBwYXJzZVN0ZXBOYW1lLCBwYXJzZVdvcmtmbG93TmFtZSB9IGZyb20gJ0B3b3JrZmxvdy91dGlscy9wYXJzZS1uYW1lJztcbmltcG9ydCB7XG4gIHR5cGUgRXZlbnQsXG4gIGlzVGVybWluYWxTdGVwRXZlbnRUeXBlLFxuICB0eXBlIFdvcmtmbG93UnVuLFxufSBmcm9tICdAd29ya2Zsb3cvd29ybGQnO1xuaW1wb3J0IHR5cGUgeyBTcGFuLCBTcGFuRXZlbnQgfSBmcm9tICcuLi8uLi9saWIvdHJhY2UtdHlwZXMnO1xuaW1wb3J0IHsgc2hvdWxkU2hvd1ZlcnRpY2FsTGluZSB9IGZyb20gJy4vZXZlbnQtY29sb3JzJztcbmltcG9ydCB7IGNhbGN1bGF0ZUR1cmF0aW9uLCBkYXRlVG9PdGVsVGltZSB9IGZyb20gJy4vdHJhY2UtdGltZS11dGlscyc7XG5cbmV4cG9ydCBjb25zdCBXT1JLRkxPV19MSUJSQVJZID0ge1xuICBuYW1lOiAnd29ya2Zsb3ctZGV2ZWxvcG1lbnQta2l0JyxcbiAgdmVyc2lvbjogJzQuMC4wJyxcbn07XG5cbi8qKlxuICogRXZlbnQgdHlwZXMgdGhhdCBzaG91bGQgYmUgZGlzcGxheWVkIGFzIHZpc3VhbCBtYXJrZXJzIGluIHRoZSB0cmFjZSB2aWV3ZXJcbiAqL1xuY29uc3QgTUFSS0VSX0VWRU5UX1RZUEVTOiBTZXQ8RXZlbnRbJ2V2ZW50VHlwZSddPiA9IG5ldyBTZXQoW1xuICAnaG9va19jcmVhdGVkJyxcbiAgJ2hvb2tfcmVjZWl2ZWQnLFxuICAnaG9va19kaXNwb3NlZCcsXG4gICdzdGVwX3N0YXJ0ZWQnLFxuICAnc3RlcF9yZXRyeWluZycsXG4gICdzdGVwX2ZhaWxlZCcsXG4gICdydW5fZmFpbGVkJyxcbiAgJ3dhaXRfY3JlYXRlZCcsXG4gICd3YWl0X2NvbXBsZXRlZCcsXG4gICdhdHRyX3NldCcsXG5dKTtcblxuZXhwb3J0IGNvbnN0IGdldEV2ZW50VGltZXN0YW1wID0gKFxuICBldmVudDogRXZlbnQgfCB1bmRlZmluZWRcbik6IERhdGUgfCB1bmRlZmluZWQgPT4ge1xuICBjb25zdCB2YWx1ZSA9IGV2ZW50Py5vY2N1cnJlZEF0ID8/IGV2ZW50Py5jcmVhdGVkQXQ7XG4gIGlmICghdmFsdWUpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgY29uc3QgZGF0ZSA9IHZhbHVlIGluc3RhbmNlb2YgRGF0ZSA/IHZhbHVlIDogbmV3IERhdGUodmFsdWUpO1xuICByZXR1cm4gTnVtYmVyLmlzTmFOKGRhdGUuZ2V0VGltZSgpKSA/IHVuZGVmaW5lZCA6IGRhdGU7XG59O1xuXG4vKipcbiAqIENvbnZlcnQgd29ya2Zsb3cgZXZlbnRzIHRvIHNwYW4gZXZlbnRzXG4gKiBPbmx5IGluY2x1ZGVzIGV2ZW50cyB0aGF0IHNob3VsZCBiZSBkaXNwbGF5ZWQgYXMgbWFya2Vyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydEV2ZW50c1RvU3BhbkV2ZW50cyhcbiAgZXZlbnRzOiBFdmVudFtdLFxuICBmaWx0ZXJUeXBlcyA9IHRydWUsXG4gIG9wdGlvbnM6IHsgcHJlZmVyT2NjdXJyZWRBdD86IGJvb2xlYW4gfSA9IHt9XG4pOiBTcGFuRXZlbnRbXSB7XG4gIHJldHVybiBldmVudHNcbiAgICAuZmlsdGVyKChldmVudCkgPT5cbiAgICAgIGZpbHRlclR5cGVzID8gTUFSS0VSX0VWRU5UX1RZUEVTLmhhcyhldmVudC5ldmVudFR5cGUpIDogdHJ1ZVxuICAgIClcbiAgICAubWFwKChldmVudCkgPT4gKHtcbiAgICAgIG5hbWU6IGV2ZW50LmV2ZW50VHlwZSxcbiAgICAgIHRpbWVzdGFtcDogZGF0ZVRvT3RlbFRpbWUoXG4gICAgICAgIG9wdGlvbnMucHJlZmVyT2NjdXJyZWRBdFxuICAgICAgICAgID8gKGdldEV2ZW50VGltZXN0YW1wKGV2ZW50KSA/PyBldmVudC5jcmVhdGVkQXQpXG4gICAgICAgICAgOiBldmVudC5jcmVhdGVkQXRcbiAgICAgICksXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIGV2ZW50SWQ6IGV2ZW50LmV2ZW50SWQsXG4gICAgICAgIGNvcnJlbGF0aW9uSWQ6IGV2ZW50LmNvcnJlbGF0aW9uSWQsXG4gICAgICAgIGV2ZW50RGF0YTogJ2V2ZW50RGF0YScgaW4gZXZlbnQgPyBldmVudC5ldmVudERhdGEgOiB1bmRlZmluZWQsXG4gICAgICB9LFxuICAgICAgLy8gQ29udHJvbCB3aGV0aGVyIHRvIHNob3cgdmVydGljYWwgbGluZSBpbiB0aW1lbGluZVxuICAgICAgc2hvd1ZlcnRpY2FsTGluZTogc2hvdWxkU2hvd1ZlcnRpY2FsTGluZShldmVudC5ldmVudFR5cGUpLFxuICAgIH0pKTtcbn1cblxuZXhwb3J0IGNvbnN0IHdhaXRFdmVudHNUb1dhaXRFbnRpdHkgPSAoXG4gIGV2ZW50czogRXZlbnRbXVxuKToge1xuICB3YWl0SWQ6IHN0cmluZztcbiAgcnVuSWQ6IHN0cmluZztcbiAgY3JlYXRlZEF0OiBEYXRlO1xuICByZXN1bWVBdD86IERhdGU7XG4gIGNvbXBsZXRlZEF0PzogRGF0ZTtcbn0gfCBudWxsID0+IHtcbiAgY29uc3Qgc3RhcnRFdmVudCA9IGV2ZW50cy5maW5kKChldmVudCkgPT4gZXZlbnQuZXZlbnRUeXBlID09PSAnd2FpdF9jcmVhdGVkJyk7XG4gIGlmICghc3RhcnRFdmVudCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IGNvbXBsZXRlZEV2ZW50ID0gZXZlbnRzLmZpbmQoXG4gICAgKGV2ZW50KSA9PiBldmVudC5ldmVudFR5cGUgPT09ICd3YWl0X2NvbXBsZXRlZCdcbiAgKTtcbiAgcmV0dXJuIHtcbiAgICB3YWl0SWQ6IHN0YXJ0RXZlbnQuY29ycmVsYXRpb25JZCxcbiAgICBydW5JZDogc3RhcnRFdmVudC5ydW5JZCxcbiAgICBjcmVhdGVkQXQ6IGdldEV2ZW50VGltZXN0YW1wKHN0YXJ0RXZlbnQpID8/IHN0YXJ0RXZlbnQuY3JlYXRlZEF0LFxuICAgIHJlc3VtZUF0OiBzdGFydEV2ZW50LmV2ZW50RGF0YT8ucmVzdW1lQXRcbiAgICAgID8gbmV3IERhdGUoc3RhcnRFdmVudC5ldmVudERhdGEucmVzdW1lQXQpXG4gICAgICA6IHVuZGVmaW5lZCxcbiAgICBjb21wbGV0ZWRBdDogZ2V0RXZlbnRUaW1lc3RhbXAoY29tcGxldGVkRXZlbnQpLFxuICB9O1xufTtcblxuLyoqXG4gKiBDb252ZXJ0cyBhIHdvcmtmbG93IFdhaXQgdG8gYW4gT3BlblRlbGVtZXRyeSBTcGFuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3YWl0VG9TcGFuKFxuICBldmVudHM6IEV2ZW50W10sXG4gIG1heEVuZFRpbWU6IERhdGUsXG4gIGZhbGxiYWNrRW5kVGltZSA9IG1heEVuZFRpbWVcbik6IFNwYW4gfCBudWxsIHtcbiAgY29uc3Qgd2FpdCA9IHdhaXRFdmVudHNUb1dhaXRFbnRpdHkoZXZlbnRzKTtcbiAgaWYgKCF3YWl0KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3Qgc3RhcnRUaW1lID0gd2FpdC5jcmVhdGVkQXQ7XG4gIGNvbnN0IHN0YXJ0TXMgPSBzdGFydFRpbWUuZ2V0VGltZSgpO1xuICBsZXQgZW5kVGltZSA9IHdhaXQuY29tcGxldGVkQXQ7XG4gIGlmICghZW5kVGltZSkge1xuICAgIGNvbnN0IGZhbGxiYWNrQ2FwID1cbiAgICAgIHdhaXQucmVzdW1lQXQgJiYgd2FpdC5yZXN1bWVBdC5nZXRUaW1lKCkgPCBmYWxsYmFja0VuZFRpbWUuZ2V0VGltZSgpXG4gICAgICAgID8gd2FpdC5yZXN1bWVBdFxuICAgICAgICA6IGZhbGxiYWNrRW5kVGltZTtcbiAgICBlbmRUaW1lID1cbiAgICAgIG1heEVuZFRpbWUuZ2V0VGltZSgpID4gc3RhcnRNcyAmJlxuICAgICAgbWF4RW5kVGltZS5nZXRUaW1lKCkgPCBmYWxsYmFja0NhcC5nZXRUaW1lKClcbiAgICAgICAgPyBtYXhFbmRUaW1lXG4gICAgICAgIDogZmFsbGJhY2tDYXA7XG4gIH1cbiAgY29uc3Qgc3RhcnQgPSBkYXRlVG9PdGVsVGltZShzdGFydFRpbWUpO1xuICBjb25zdCBlbmQgPSBkYXRlVG9PdGVsVGltZShlbmRUaW1lKTtcbiAgY29uc3QgZHVyYXRpb24gPSBjYWxjdWxhdGVEdXJhdGlvbihzdGFydFRpbWUsIGVuZFRpbWUpO1xuICBjb25zdCBzcGFuRXZlbnRzID0gY29udmVydEV2ZW50c1RvU3BhbkV2ZW50cyhldmVudHMsIGZhbHNlKTtcbiAgcmV0dXJuIHtcbiAgICBzcGFuSWQ6IHdhaXQud2FpdElkLFxuICAgIG5hbWU6ICdzbGVlcCcsXG4gICAga2luZDogMSwgLy8gSU5URVJOQUwgc3BhbiBraW5kXG4gICAgcmVzb3VyY2U6ICdzbGVlcCcsXG4gICAgbGlicmFyeTogV09SS0ZMT1dfTElCUkFSWSxcbiAgICBzdGF0dXM6IHsgY29kZTogMCB9LFxuICAgIHRyYWNlRmxhZ3M6IDEsXG4gICAgYXR0cmlidXRlczoge1xuICAgICAgcmVzb3VyY2U6ICdzbGVlcCcgYXMgY29uc3QsXG4gICAgICBkYXRhOiB3YWl0LCAvLyB3YWl0IGlzIGEgcGxhaW4gb2JqZWN0IGJ1aWx0IGZyb20gZXZlbnRzLCBubyBub24tY2xvbmVhYmxlIHR5cGVzXG4gICAgfSxcbiAgICBsaW5rczogW10sXG4gICAgZXZlbnRzOiBzcGFuRXZlbnRzLFxuICAgIGR1cmF0aW9uLFxuICAgIHN0YXJ0VGltZTogc3RhcnQsXG4gICAgZW5kVGltZTogZW5kLFxuICB9O1xufVxuXG5leHBvcnQgY29uc3Qgc3RlcEV2ZW50c1RvU3RlcEVudGl0eSA9IChcbiAgZXZlbnRzOiBFdmVudFtdXG4pOiB7XG4gIHN0ZXBJZDogc3RyaW5nO1xuICBydW5JZDogc3RyaW5nO1xuICBzdGVwTmFtZTogc3RyaW5nO1xuICBzdGF0dXM6ICdwZW5kaW5nJyB8ICdydW5uaW5nJyB8ICdjb21wbGV0ZWQnIHwgJ2ZhaWxlZCcgfCAnY2FuY2VsbGVkJztcbiAgYXR0ZW1wdDogbnVtYmVyO1xuICBjcmVhdGVkQXQ6IERhdGU7XG4gIHVwZGF0ZWRBdDogRGF0ZTtcbiAgc3RhcnRlZEF0PzogRGF0ZTtcbiAgY29tcGxldGVkQXQ/OiBEYXRlO1xuICBzcGVjVmVyc2lvbj86IG51bWJlcjtcbn0gfCBudWxsID0+IHtcbiAgY29uc3QgY3JlYXRlZEV2ZW50ID0gZXZlbnRzLmZpbmQoXG4gICAgKGV2ZW50KSA9PiBldmVudC5ldmVudFR5cGUgPT09ICdzdGVwX2NyZWF0ZWQnXG4gICk7XG5cbiAgLy8gVjEgcnVucyBkb24ndCBlbWl0IHN0ZXBfY3JlYXRlZCBldmVudHMuIEZhbGwgYmFjayB0byB0aGUgZWFybGllc3QgZXZlbnRcbiAgLy8gaW4gdGhlIGdyb3VwIHNvIHdlIGNhbiBzdGlsbCBidWlsZCBhIHN0ZXAgc3Bhbi5cbiAgY29uc3QgYW5jaG9yRXZlbnQgPSBjcmVhdGVkRXZlbnQgPz8gZXZlbnRzWzBdO1xuICBpZiAoIWFuY2hvckV2ZW50KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBXYWxrIGV2ZW50cyBpbiBvcmRlciB0byBkZXJpdmUgc3RhdHVzLCBhdHRlbXB0IGNvdW50LCBhbmQgdGltZXN0YW1wcy5cbiAgLy8gSGFuZGxlcyBib3RoIHN0ZXBfcmV0cnlpbmcgYW5kIGNvbnNlY3V0aXZlIHN0ZXBfc3RhcnRlZCBhcyByZXRyeSBzaWduYWxzLlxuICBsZXQgc3RhdHVzOiAncGVuZGluZycgfCAncnVubmluZycgfCAnY29tcGxldGVkJyB8ICdmYWlsZWQnIHwgJ2NhbmNlbGxlZCcgPVxuICAgICdwZW5kaW5nJztcbiAgbGV0IGF0dGVtcHQgPSAwO1xuICBsZXQgc3RhcnRlZEF0OiBEYXRlIHwgdW5kZWZpbmVkO1xuICBsZXQgY29tcGxldGVkQXQ6IERhdGUgfCB1bmRlZmluZWQ7XG5cbiAgZm9yIChjb25zdCBlIG9mIGV2ZW50cykge1xuICAgIHN3aXRjaCAoZS5ldmVudFR5cGUpIHtcbiAgICAgIGNhc2UgJ3N0ZXBfc3RhcnRlZCc6XG4gICAgICAgIHN0YXR1cyA9ICdydW5uaW5nJztcbiAgICAgICAgYXR0ZW1wdCArPSAxO1xuICAgICAgICBpZiAoIXN0YXJ0ZWRBdCkgc3RhcnRlZEF0ID0gZ2V0RXZlbnRUaW1lc3RhbXAoZSkgPz8gZS5jcmVhdGVkQXQ7XG4gICAgICAgIGNvbXBsZXRlZEF0ID0gdW5kZWZpbmVkO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3N0ZXBfY29tcGxldGVkJzpcbiAgICAgICAgc3RhdHVzID0gJ2NvbXBsZXRlZCc7XG4gICAgICAgIGNvbXBsZXRlZEF0ID0gZ2V0RXZlbnRUaW1lc3RhbXAoZSkgPz8gZS5jcmVhdGVkQXQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnc3RlcF9mYWlsZWQnOlxuICAgICAgICBzdGF0dXMgPSAnZmFpbGVkJztcbiAgICAgICAgY29tcGxldGVkQXQgPSBnZXRFdmVudFRpbWVzdGFtcChlKSA/PyBlLmNyZWF0ZWRBdDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdzdGVwX3JldHJ5aW5nJzpcbiAgICAgICAgc3RhdHVzID0gJ3BlbmRpbmcnO1xuICAgICAgICBjb21wbGV0ZWRBdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgLy8gRW5zdXJlIGF0IGxlYXN0IGF0dGVtcHQgMSBpZiB3ZSBuZXZlciBzYXcgc3RlcF9zdGFydGVkXG4gIGlmIChhdHRlbXB0ID09PSAwKSBhdHRlbXB0ID0gMTtcblxuICBjb25zdCBsYXN0RXZlbnQgPSBldmVudHNbZXZlbnRzLmxlbmd0aCAtIDFdO1xuXG4gIHJldHVybiB7XG4gICAgc3RlcElkOiBhbmNob3JFdmVudC5jb3JyZWxhdGlvbklkID8/ICcnLFxuICAgIHJ1bklkOiBhbmNob3JFdmVudC5ydW5JZCxcbiAgICBzdGVwTmFtZTogY3JlYXRlZEV2ZW50Py5ldmVudERhdGE/LnN0ZXBOYW1lID8/ICcnLFxuICAgIHN0YXR1cyxcbiAgICBhdHRlbXB0LFxuICAgIGNyZWF0ZWRBdDogZ2V0RXZlbnRUaW1lc3RhbXAoYW5jaG9yRXZlbnQpID8/IGFuY2hvckV2ZW50LmNyZWF0ZWRBdCxcbiAgICB1cGRhdGVkQXQ6XG4gICAgICBnZXRFdmVudFRpbWVzdGFtcChsYXN0RXZlbnQpID8/XG4gICAgICBsYXN0RXZlbnQ/LmNyZWF0ZWRBdCA/P1xuICAgICAgYW5jaG9yRXZlbnQuY3JlYXRlZEF0LFxuICAgIHN0YXJ0ZWRBdCxcbiAgICBjb21wbGV0ZWRBdCxcbiAgICBzcGVjVmVyc2lvbjogYW5jaG9yRXZlbnQuc3BlY1ZlcnNpb24sXG4gIH07XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIHN0ZXAgZXZlbnRzIHRvIGFuIE9wZW5UZWxlbWV0cnkgU3BhblxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RlcFRvU3BhbihzdGVwRXZlbnRzOiBFdmVudFtdLCBtYXhFbmRUaW1lOiBEYXRlKTogU3BhbiB8IG51bGwge1xuICBjb25zdCBzdGVwID0gc3RlcEV2ZW50c1RvU3RlcEVudGl0eShzdGVwRXZlbnRzKTtcbiAgaWYgKCFzdGVwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgcGFyc2VkTmFtZSA9IHBhcnNlU3RlcE5hbWUoU3RyaW5nKHN0ZXAuc3RlcE5hbWUpKTtcblxuICBjb25zdCBhdHRyaWJ1dGVzID0ge1xuICAgIHJlc291cmNlOiAnc3RlcCcgYXMgY29uc3QsXG4gICAgZGF0YTogc3RlcCxcbiAgfTtcblxuICBjb25zdCByZXNvdXJjZSA9ICdzdGVwJztcblxuICAvLyBJbmNsdWRlIEFMTCBjb3JyZWxhdGVkIGV2ZW50cyBvbiB0aGUgc3BhbiBzbyB0aGUgc2lkZWJhciBkZXRhaWwgdmlld1xuICAvLyBjYW4gZGlzcGxheSB0aGVtLiBUaGUgdGltZWxpbmUgdXNlcyB0aGUgYHNob3dWZXJ0aWNhbExpbmVgIGZsYWcgdG9cbiAgLy8gZGV0ZXJtaW5lIHdoaWNoIGV2ZW50cyBhcHBlYXIgYXMgbWFya2Vycy5cbiAgY29uc3QgZXZlbnRzID0gY29udmVydEV2ZW50c1RvU3BhbkV2ZW50cyhzdGVwRXZlbnRzLCBmYWxzZSwge1xuICAgIHByZWZlck9jY3VycmVkQXQ6IHRydWUsXG4gIH0pO1xuXG4gIC8vIFVzZSB0aGUgZXZlbnQgb2NjdXJyZW5jZSB0aW1lc3RhbXAgZm9yIHN0ZXAgc3BhbnMgd2hlbiBpdCBpcyBhdmFpbGFibGUsXG4gIC8vIGZhbGxpbmcgYmFjayB0byB0aGUgaW5nZXN0IHRpbWVzdGFtcCB1c2VkIGJ5IG9sZGVyIGV2ZW50IHN0cmVhbXMuXG4gIGNvbnN0IHNwYW5TdGFydEV2ZW50ID1cbiAgICBzdGVwRXZlbnRzLmZpbmQoKGV2ZW50KSA9PiBldmVudC5ldmVudFR5cGUgPT09ICdzdGVwX2NyZWF0ZWQnKSA/P1xuICAgIHN0ZXBFdmVudHNbMF07XG4gIGNvbnN0IHNwYW5TdGFydFRpbWUgPVxuICAgIGdldEV2ZW50VGltZXN0YW1wKHNwYW5TdGFydEV2ZW50KSA/PyBuZXcgRGF0ZShzdGVwLmNyZWF0ZWRBdCk7XG4gIGxldCBhY3RpdmVTdGFydFRpbWUgPSBzdGVwLnN0YXJ0ZWRBdCA/IG5ldyBEYXRlKHN0ZXAuc3RhcnRlZEF0KSA6IHVuZGVmaW5lZDtcbiAgY29uc3QgZmlyc3RTdGFydEV2ZW50ID0gc3RlcEV2ZW50cy5maW5kKFxuICAgIChldmVudCkgPT4gZXZlbnQuZXZlbnRUeXBlID09PSAnc3RlcF9zdGFydGVkJ1xuICApO1xuICBpZiAoZmlyc3RTdGFydEV2ZW50KSB7XG4gICAgYWN0aXZlU3RhcnRUaW1lID1cbiAgICAgIGdldEV2ZW50VGltZXN0YW1wKGZpcnN0U3RhcnRFdmVudCkgPz8gbmV3IERhdGUoZmlyc3RTdGFydEV2ZW50LmNyZWF0ZWRBdCk7XG4gIH1cblxuICBsZXQgZW5kVGltZSA9IG5ldyBEYXRlKG1heEVuZFRpbWUpO1xuICBpZiAoc3RlcC5jb21wbGV0ZWRBdCkge1xuICAgIGNvbnN0IGNvbXBsZXRlZEV2ZW50ID0gc3RlcEV2ZW50c1xuICAgICAgLnNsaWNlKClcbiAgICAgIC5yZXZlcnNlKClcbiAgICAgIC5maW5kKChldmVudCkgPT4gaXNUZXJtaW5hbFN0ZXBFdmVudFR5cGUoZXZlbnQuZXZlbnRUeXBlKSk7XG4gICAgZW5kVGltZSA9IGdldEV2ZW50VGltZXN0YW1wKGNvbXBsZXRlZEV2ZW50KSA/PyBuZXcgRGF0ZShzdGVwLmNvbXBsZXRlZEF0KTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc3BhbklkOiBTdHJpbmcoc3RlcC5zdGVwSWQpLFxuICAgIG5hbWU6IHBhcnNlZE5hbWU/LnNob3J0TmFtZSA/PyBTdHJpbmcoc3RlcC5zdGVwTmFtZSksXG4gICAga2luZDogMSwgLy8gSU5URVJOQUwgc3BhbiBraW5kXG4gICAgcmVzb3VyY2UsXG4gICAgbGlicmFyeTogV09SS0ZMT1dfTElCUkFSWSxcbiAgICBzdGF0dXM6IHsgY29kZTogMCB9LFxuICAgIHRyYWNlRmxhZ3M6IDEsXG4gICAgYXR0cmlidXRlcyxcbiAgICBsaW5rczogW10sXG4gICAgZXZlbnRzLFxuICAgIHN0YXJ0VGltZTogZGF0ZVRvT3RlbFRpbWUoc3BhblN0YXJ0VGltZSksXG4gICAgZW5kVGltZTogZGF0ZVRvT3RlbFRpbWUoZW5kVGltZSksXG4gICAgZHVyYXRpb246IGNhbGN1bGF0ZUR1cmF0aW9uKHNwYW5TdGFydFRpbWUsIGVuZFRpbWUpLFxuICAgIC8vIE9ubHkgc2V0IGFjdGl2ZVN0YXJ0VGltZSBpZiBpdCBkaWZmZXJzIGZyb20gc3RhcnRUaW1lIChpLmUuLCB0aGVyZSB3YXMgYSBxdWV1ZWQgcGVyaW9kKVxuICAgIGFjdGl2ZVN0YXJ0VGltZTpcbiAgICAgIGFjdGl2ZVN0YXJ0VGltZSAmJiBhY3RpdmVTdGFydFRpbWUuZ2V0VGltZSgpID4gc3BhblN0YXJ0VGltZS5nZXRUaW1lKClcbiAgICAgICAgPyBkYXRlVG9PdGVsVGltZShhY3RpdmVTdGFydFRpbWUpXG4gICAgICAgIDogdW5kZWZpbmVkLFxuICB9O1xufVxuXG5leHBvcnQgY29uc3QgaG9va0V2ZW50c1RvSG9va0VudGl0eSA9IChcbiAgZXZlbnRzOiBFdmVudFtdXG4pOiB7XG4gIGhvb2tJZDogc3RyaW5nO1xuICBydW5JZDogc3RyaW5nO1xuICB0b2tlbj86IHN0cmluZztcbiAgY3JlYXRlZEF0OiBEYXRlO1xuICByZWNlaXZlZENvdW50OiBudW1iZXI7XG4gIGxhc3RSZWNlaXZlZEF0PzogRGF0ZTtcbiAgZGlzcG9zZWRBdD86IERhdGU7XG59IHwgbnVsbCA9PiB7XG4gIGNvbnN0IGNyZWF0ZWRFdmVudCA9IGV2ZW50cy5maW5kKFxuICAgIChldmVudCkgPT4gZXZlbnQuZXZlbnRUeXBlID09PSAnaG9va19jcmVhdGVkJ1xuICApO1xuICBpZiAoIWNyZWF0ZWRFdmVudCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IHJlY2VpdmVkRXZlbnRzID0gZXZlbnRzLmZpbHRlcihcbiAgICAoZXZlbnQpID0+IGV2ZW50LmV2ZW50VHlwZSA9PT0gJ2hvb2tfcmVjZWl2ZWQnXG4gICk7XG4gIGNvbnN0IGRpc3Bvc2VkRXZlbnRzID0gZXZlbnRzLmZpbHRlcihcbiAgICAoZXZlbnQpID0+IGV2ZW50LmV2ZW50VHlwZSA9PT0gJ2hvb2tfZGlzcG9zZWQnXG4gICk7XG4gIGNvbnN0IGxhc3RSZWNlaXZlZEV2ZW50ID0gcmVjZWl2ZWRFdmVudHMuYXQoLTEpO1xuICByZXR1cm4ge1xuICAgIGhvb2tJZDogY3JlYXRlZEV2ZW50LmNvcnJlbGF0aW9uSWQsXG4gICAgcnVuSWQ6IGNyZWF0ZWRFdmVudC5ydW5JZCxcbiAgICB0b2tlbjogY3JlYXRlZEV2ZW50LmV2ZW50RGF0YT8udG9rZW4sXG4gICAgY3JlYXRlZEF0OiBnZXRFdmVudFRpbWVzdGFtcChjcmVhdGVkRXZlbnQpID8/IGNyZWF0ZWRFdmVudC5jcmVhdGVkQXQsXG4gICAgcmVjZWl2ZWRDb3VudDogcmVjZWl2ZWRFdmVudHMubGVuZ3RoLFxuICAgIGxhc3RSZWNlaXZlZEF0OiBnZXRFdmVudFRpbWVzdGFtcChsYXN0UmVjZWl2ZWRFdmVudCksXG4gICAgZGlzcG9zZWRBdDogZ2V0RXZlbnRUaW1lc3RhbXAoZGlzcG9zZWRFdmVudHMuYXQoLTEpKSxcbiAgfTtcbn07XG5cbi8qKlxuICogQ29udmVydHMgYSB3b3JrZmxvdyBIb29rIHRvIGFuIE9wZW5UZWxlbWV0cnkgU3BhblxuICovXG5leHBvcnQgZnVuY3Rpb24gaG9va1RvU3Bhbihob29rRXZlbnRzOiBFdmVudFtdLCBtYXhFbmRUaW1lOiBEYXRlKTogU3BhbiB8IG51bGwge1xuICBjb25zdCBob29rID0gaG9va0V2ZW50c1RvSG9va0VudGl0eShob29rRXZlbnRzKTtcbiAgaWYgKCFob29rKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBDb252ZXJ0IGhvb2stcmVsYXRlZCBldmVudHMgdG8gc3BhbiBldmVudHNcbiAgY29uc3QgZXZlbnRzID0gY29udmVydEV2ZW50c1RvU3BhbkV2ZW50cyhob29rRXZlbnRzLCBmYWxzZSk7XG5cbiAgY29uc3QgZW5kVGltZSA9IGhvb2suZGlzcG9zZWRBdCB8fCBtYXhFbmRUaW1lO1xuXG4gIHJldHVybiB7XG4gICAgc3BhbklkOiBTdHJpbmcoaG9vay5ob29rSWQpLFxuICAgIG5hbWU6IGhvb2sudG9rZW4gPz8gU3RyaW5nKGhvb2suaG9va0lkKSxcbiAgICBraW5kOiAxLCAvLyBJTlRFUk5BTCBzcGFuIGtpbmRcbiAgICByZXNvdXJjZTogJ2hvb2snLFxuICAgIGxpYnJhcnk6IFdPUktGTE9XX0xJQlJBUlksXG4gICAgc3RhdHVzOiB7IGNvZGU6IDEgfSxcbiAgICB0cmFjZUZsYWdzOiAxLFxuICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgIHJlc291cmNlOiAnaG9vaycgYXMgY29uc3QsXG4gICAgICBkYXRhOiBob29rLFxuICAgIH0sXG4gICAgbGlua3M6IFtdLFxuICAgIGV2ZW50cyxcbiAgICBzdGFydFRpbWU6IGRhdGVUb090ZWxUaW1lKGhvb2suY3JlYXRlZEF0KSxcbiAgICBlbmRUaW1lOiBkYXRlVG9PdGVsVGltZShlbmRUaW1lKSxcbiAgICBkdXJhdGlvbjogY2FsY3VsYXRlRHVyYXRpb24oaG9vay5jcmVhdGVkQXQsIGVuZFRpbWUpLFxuICB9O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSByb290IHNwYW4gZm9yIHRoZSB3b3JrZmxvdyBydW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJ1blRvU3BhbihcbiAgcnVuOiBXb3JrZmxvd1J1bixcbiAgcnVuRXZlbnRzOiBFdmVudFtdLFxuICBub3dUaW1lPzogRGF0ZVxuKTogU3BhbiB7XG4gIGNvbnN0IG5vdyA9IG5vd1RpbWUgPz8gbmV3IERhdGUoKTtcblxuICAvLyBQcmVmZXIgdGhlIGV2ZW50IG9jY3VycmVuY2UgdGltZXN0YW1wIHdoZW4gYXZhaWxhYmxlIHNvIHRoZSByb290IHNwYW5cbiAgLy8gbGluZXMgdXAgd2l0aCBjaGlsZCBzcGFucyB0aGF0IGFscmVhZHkgdXNlIGV2ZW50IG9jY3VycmVuY2UgdGltZS5cbiAgY29uc3QgcnVuQ3JlYXRlZEV2ZW50ID0gcnVuRXZlbnRzLmZpbmQoXG4gICAgKGV2ZW50KSA9PiBldmVudC5ldmVudFR5cGUgPT09ICdydW5fY3JlYXRlZCdcbiAgKTtcbiAgY29uc3QgcnVuU3RhcnRlZEV2ZW50ID0gcnVuRXZlbnRzLmZpbmQoXG4gICAgKGV2ZW50KSA9PiBldmVudC5ldmVudFR5cGUgPT09ICdydW5fc3RhcnRlZCdcbiAgKTtcbiAgY29uc3QgdGVybWluYWxFdmVudCA9IHJ1bkV2ZW50c1xuICAgIC5zbGljZSgpXG4gICAgLnJldmVyc2UoKVxuICAgIC5maW5kKFxuICAgICAgKGV2ZW50KSA9PlxuICAgICAgICBldmVudC5ldmVudFR5cGUgPT09ICdydW5fY29tcGxldGVkJyB8fFxuICAgICAgICBldmVudC5ldmVudFR5cGUgPT09ICdydW5fZmFpbGVkJyB8fFxuICAgICAgICBldmVudC5ldmVudFR5cGUgPT09ICdydW5fY2FuY2VsbGVkJ1xuICAgICk7XG4gIGNvbnN0IHNwYW5TdGFydFRpbWUgPVxuICAgIGdldEV2ZW50VGltZXN0YW1wKHJ1bkNyZWF0ZWRFdmVudCkgPz8gbmV3IERhdGUocnVuLmNyZWF0ZWRBdCk7XG4gIGNvbnN0IGFjdGl2ZVN0YXJ0VGltZSA9XG4gICAgZ2V0RXZlbnRUaW1lc3RhbXAocnVuU3RhcnRlZEV2ZW50KSA/P1xuICAgIChydW4uc3RhcnRlZEF0ID8gbmV3IERhdGUocnVuLnN0YXJ0ZWRBdCkgOiB1bmRlZmluZWQpO1xuICBjb25zdCBjb21wbGV0ZWRBdCA9XG4gICAgZ2V0RXZlbnRUaW1lc3RhbXAodGVybWluYWxFdmVudCkgPz8gcnVuLmNvbXBsZXRlZEF0ID8/IHVuZGVmaW5lZDtcbiAgY29uc3QgZW5kVGltZSA9IGNvbXBsZXRlZEF0ID8/IG5vdztcblxuICAvLyBPbmx5IGVtYmVkIGlkZW50aWZpY2F0aW9uIGZpZWxkcyDigJQgbm90IHRoZSBmdWxsIG9iamVjdCB3aXRoXG4gIC8vIGlucHV0L291dHB1dC9lcnJvciB3aGljaCBtYXkgY29udGFpbiBub24tY2xvbmVhYmxlIHR5cGVzLiBMaWZlY3ljbGVcbiAgLy8gdGltZXN0YW1wcyBhcmUgZXZlbnQtZGVyaXZlZCBzbyBkZXRhaWwgcm93cyBhbGlnbiB3aXRoIHRoZSBzcGFuIHRpbWVsaW5lLlxuICBjb25zdCB7IGlucHV0OiBfaSwgb3V0cHV0OiBfbywgZXJyb3I6IF9lLCAuLi5ydW5JZGVudGl0eSB9ID0gcnVuO1xuICBjb25zdCBhdHRyaWJ1dGVzID0ge1xuICAgIHJlc291cmNlOiAncnVuJyBhcyBjb25zdCxcbiAgICBkYXRhOiB7XG4gICAgICAuLi5ydW5JZGVudGl0eSxcbiAgICAgIGNyZWF0ZWRBdDogc3BhblN0YXJ0VGltZSxcbiAgICAgIHN0YXJ0ZWRBdDogYWN0aXZlU3RhcnRUaW1lLFxuICAgICAgY29tcGxldGVkQXQsXG4gICAgfSxcbiAgfTtcblxuICAvLyBDb252ZXJ0IHJ1bi1sZXZlbCBldmVudHMgdG8gc3BhbiBldmVudHNcbiAgY29uc3QgZXZlbnRzID0gY29udmVydEV2ZW50c1RvU3BhbkV2ZW50cyhydW5FdmVudHMsIGZhbHNlLCB7XG4gICAgcHJlZmVyT2NjdXJyZWRBdDogdHJ1ZSxcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICBzcGFuSWQ6IFN0cmluZyhydW4ucnVuSWQpLFxuICAgIG5hbWU6IFN0cmluZyhwYXJzZVdvcmtmbG93TmFtZShydW4ud29ya2Zsb3dOYW1lKT8uc2hvcnROYW1lID8/ICc/JyksXG4gICAga2luZDogMSwgLy8gSU5URVJOQUwgc3BhbiBraW5kXG4gICAgcmVzb3VyY2U6ICdydW4nLFxuICAgIGxpYnJhcnk6IFdPUktGTE9XX0xJQlJBUlksXG4gICAgc3RhdHVzOiB7IGNvZGU6IDAgfSxcbiAgICB0cmFjZUZsYWdzOiAxLFxuICAgIGF0dHJpYnV0ZXMsXG4gICAgbGlua3M6IFtdLFxuICAgIGV2ZW50cyxcbiAgICBzdGFydFRpbWU6IGRhdGVUb090ZWxUaW1lKHNwYW5TdGFydFRpbWUpLFxuICAgIGVuZFRpbWU6IGRhdGVUb090ZWxUaW1lKGVuZFRpbWUpLFxuICAgIGR1cmF0aW9uOiBjYWxjdWxhdGVEdXJhdGlvbihzcGFuU3RhcnRUaW1lLCBlbmRUaW1lKSxcbiAgICAvLyBPbmx5IHNldCBhY3RpdmVTdGFydFRpbWUgaWYgaXQgZGlmZmVycyBmcm9tIHN0YXJ0VGltZSAoaS5lLiwgdGhlcmUgd2FzIGEgcXVldWVkIHBlcmlvZClcbiAgICBhY3RpdmVTdGFydFRpbWU6XG4gICAgICBhY3RpdmVTdGFydFRpbWUgJiYgYWN0aXZlU3RhcnRUaW1lLmdldFRpbWUoKSA+IHNwYW5TdGFydFRpbWUuZ2V0VGltZSgpXG4gICAgICAgID8gZGF0ZVRvT3RlbFRpbWUoYWN0aXZlU3RhcnRUaW1lKVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgfTtcbn1cbiJdfQ==
|
|
@@ -40,4 +40,4 @@ export function calculateDuration(start, end) {
|
|
|
40
40
|
const nanoseconds = (durationMs % 1000) * 1_000_000;
|
|
41
41
|
return [seconds, nanoseconds];
|
|
42
42
|
}
|
|
43
|
-
//# sourceMappingURL=
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2UtdGltZS11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3dvcmtmbG93LXRyYWNlcy90cmFjZS10aW1lLXV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUg7O0dBRUc7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUM1QixJQUE2QjtJQUU3QixJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzdCLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBQ0QsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxZQUFZLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDckMsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNoQixDQUFDO0lBQ0QsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzFCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQ3RDLE1BQU0sV0FBVyxHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLFNBQVMsQ0FBQztJQUM1QyxPQUFPLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQ2hDLENBQUM7QUFFRCxNQUFNLFVBQVUsWUFBWSxDQUFDLElBQXNCO0lBQ2pELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDcEMsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQztJQUM1QyxPQUFPLFdBQVcsR0FBRyxlQUFlLENBQUM7QUFDdkMsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLGlCQUFpQixDQUMvQixLQUE4QixFQUM5QixHQUE0QjtJQUU1QixJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzlCLEtBQUssR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBQ0QsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUM1QixHQUFHLEdBQUcsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdEIsQ0FBQztJQUNELElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLEtBQUssWUFBWSxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3ZDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEIsQ0FBQztJQUNELE1BQU0sT0FBTyxHQUFHLEdBQUcsSUFBSSxHQUFHLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7SUFDOUQsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLE9BQU8sRUFBRSxHQUFHLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUN2RCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUM5QyxNQUFNLFdBQVcsR0FBRyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUM7SUFDcEQsT0FBTyxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztBQUNoQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaW1lIGNvbnZlcnNpb24gdXRpbGl0aWVzIGZvciB3b3JrZmxvdyB0cmFjZSBjb25zdHJ1Y3Rpb25cbiAqL1xuXG4vKipcbiAqIENvbnZlcnRzIGEgRGF0ZSB0byBPcGVuVGVsZW1ldHJ5IHRpbWUgZm9ybWF0IFtzZWNvbmRzLCBuYW5vc2Vjb25kc11cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRhdGVUb090ZWxUaW1lKFxuICBkYXRlOiBEYXRlIHwgc3RyaW5nIHwgdW5rbm93blxuKTogW251bWJlciwgbnVtYmVyXSB7XG4gIGlmICh0eXBlb2YgZGF0ZSA9PT0gJ3N0cmluZycpIHtcbiAgICBkYXRlID0gbmV3IERhdGUoZGF0ZSk7XG4gIH1cbiAgaWYgKCFkYXRlIHx8ICEoZGF0ZSBpbnN0YW5jZW9mIERhdGUpKSB7XG4gICAgcmV0dXJuIFswLCAwXTtcbiAgfVxuICBjb25zdCBtcyA9IGRhdGUuZ2V0VGltZSgpO1xuICBjb25zdCBzZWNvbmRzID0gTWF0aC5mbG9vcihtcyAvIDEwMDApO1xuICBjb25zdCBuYW5vc2Vjb25kcyA9IChtcyAlIDEwMDApICogMV8wMDBfMDAwO1xuICByZXR1cm4gW3NlY29uZHMsIG5hbm9zZWNvbmRzXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG90ZWxUaW1lVG9Ncyh0aW1lOiBbbnVtYmVyLCBudW1iZXJdKTogbnVtYmVyIHtcbiAgY29uc3Qgc2Vjb25kc1RvTXMgPSB0aW1lWzBdICogMV8wMDA7XG4gIGNvbnN0IG5hbm9zZWNvbmRzVG9NcyA9IHRpbWVbMV0gLyAxXzAwMF8wMDA7XG4gIHJldHVybiBzZWNvbmRzVG9NcyArIG5hbm9zZWNvbmRzVG9Ncztcbn1cblxuLyoqXG4gKiBDYWxjdWxhdGVzIGR1cmF0aW9uIGluIFtzZWNvbmRzLCBuYW5vc2Vjb25kc10gZm9ybWF0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhdGVEdXJhdGlvbihcbiAgc3RhcnQ6IERhdGUgfCBzdHJpbmcgfCB1bmtub3duLFxuICBlbmQ6IERhdGUgfCBzdHJpbmcgfCB1bmtub3duXG4pOiBbbnVtYmVyLCBudW1iZXJdIHtcbiAgaWYgKHR5cGVvZiBzdGFydCA9PT0gJ3N0cmluZycpIHtcbiAgICBzdGFydCA9IG5ldyBEYXRlKHN0YXJ0KTtcbiAgfVxuICBpZiAodHlwZW9mIGVuZCA9PT0gJ3N0cmluZycpIHtcbiAgICBlbmQgPSBuZXcgRGF0ZShlbmQpO1xuICB9XG4gIGlmICghc3RhcnQgfHwgIShzdGFydCBpbnN0YW5jZW9mIERhdGUpKSB7XG4gICAgcmV0dXJuIFswLCAwXTtcbiAgfVxuICBjb25zdCBlbmRUaW1lID0gZW5kICYmIGVuZCBpbnN0YW5jZW9mIERhdGUgPyBlbmQgOiBuZXcgRGF0ZSgpO1xuICBjb25zdCBkdXJhdGlvbk1zID0gZW5kVGltZS5nZXRUaW1lKCkgLSBzdGFydC5nZXRUaW1lKCk7XG4gIGNvbnN0IHNlY29uZHMgPSBNYXRoLmZsb29yKGR1cmF0aW9uTXMgLyAxMDAwKTtcbiAgY29uc3QgbmFub3NlY29uZHMgPSAoZHVyYXRpb25NcyAlIDEwMDApICogMV8wMDBfMDAwO1xuICByZXR1cm4gW3NlY29uZHMsIG5hbm9zZWNvbmRzXTtcbn1cbiJdfQ==
|
|
@@ -27,4 +27,4 @@ export const useDarkMode = () => {
|
|
|
27
27
|
}, []);
|
|
28
28
|
return isDark;
|
|
29
29
|
};
|
|
30
|
-
//# sourceMappingURL=
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLWRhcmstbW9kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ob29rcy91c2UtZGFyay1tb2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksQ0FBQztBQUViLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBRTVDOzs7Ozs7R0FNRztBQUNILE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxHQUFZLEVBQUU7SUFDdkMsTUFBTSxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1FBQ3hDLElBQUksT0FBTyxRQUFRLEtBQUssV0FBVztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ2xELE9BQU8sUUFBUSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzdELENBQUMsQ0FBQyxDQUFDO0lBRUgsU0FBUyxDQUFDLEdBQUcsRUFBRTtRQUNiLElBQUksT0FBTyxRQUFRLEtBQUssV0FBVztZQUFFLE9BQU87UUFFNUMsTUFBTSxRQUFRLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUU7WUFDekMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ2pFLENBQUMsQ0FBQyxDQUFDO1FBRUgsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsZUFBZSxFQUFFO1lBQ3pDLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLGVBQWUsRUFBRSxDQUFDLE9BQU8sQ0FBQztTQUMzQixDQUFDLENBQUM7UUFFSCxPQUFPLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNyQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFUCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5cbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5cbi8qKlxuICogSG9vayB0aGF0IGRldGVjdHMgaWYgZGFyayBtb2RlIGlzIGFjdGl2ZSBhbmQgcmVhY3RzIHRvIHRoZW1lIGNoYW5nZXMuXG4gKiBPYnNlcnZlcyB0aGUgJ2RhcmsnIGNsYXNzIG9uIHRoZSBkb2N1bWVudCBlbGVtZW50LCB3aGljaCBpcyBob3dcbiAqIG5leHQtdGhlbWVzIGFuZCBzaW1pbGFyIGxpYnJhcmllcyBhcHBseSB0aGUgdGhlbWUuXG4gKlxuICogQHJldHVybnMgYHRydWVgIGlmIGRhcmsgbW9kZSBpcyBhY3RpdmUsIGBmYWxzZWAgb3RoZXJ3aXNlXG4gKi9cbmV4cG9ydCBjb25zdCB1c2VEYXJrTW9kZSA9ICgpOiBib29sZWFuID0+IHtcbiAgY29uc3QgW2lzRGFyaywgc2V0SXNEYXJrXSA9IHVzZVN0YXRlKCgpID0+IHtcbiAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJykgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdkYXJrJyk7XG4gIH0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybjtcblxuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgc2V0SXNEYXJrKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ2RhcmsnKSk7XG4gICAgfSk7XG5cbiAgICBvYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwge1xuICAgICAgYXR0cmlidXRlczogdHJ1ZSxcbiAgICAgIGF0dHJpYnV0ZUZpbHRlcjogWydjbGFzcyddLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuICgpID0+IG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgfSwgW10pO1xuXG4gIHJldHVybiBpc0Rhcms7XG59O1xuIl19
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { RefObject } from 'react';
|
|
2
|
+
interface UseIntersectionObserverArgs extends Omit<IntersectionObserverInit, 'root'> {
|
|
3
|
+
/**
|
|
4
|
+
* Scroll container the target is observed within. Defaults to the viewport.
|
|
5
|
+
* Passed as a ref so it resolves after commit (when the node exists).
|
|
6
|
+
*/
|
|
7
|
+
rootRef?: RefObject<Element | null>;
|
|
8
|
+
freezeOnceVisible?: boolean;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Returns the latest IntersectionObserverEntry for `elementRef`.
|
|
12
|
+
* Ported from vercel/front's `@vercel/hooks` `useIntersectionObserver`, with
|
|
13
|
+
* `root` threaded as a ref so we can observe inside a custom scroll container.
|
|
14
|
+
*/
|
|
15
|
+
export declare function useIntersectionObserver(elementRef: RefObject<Element | null>, { threshold, rootRef, rootMargin, freezeOnceVisible, }?: UseIntersectionObserverArgs): IntersectionObserverEntry | undefined;
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=use-intersection-observer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-intersection-observer.d.ts","sourceRoot":"","sources":["../../src/hooks/use-intersection-observer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,UAAU,2BACR,SAAQ,IAAI,CAAC,wBAAwB,EAAE,MAAM,CAAC;IAC9C;;;OAGG;IACH,OAAO,CAAC,EAAE,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IACpC,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC,EACrC,EACE,SAAa,EACb,OAAO,EACP,UAAiB,EACjB,iBAAyB,GAC1B,GAAE,2BAAgC,GAClC,yBAAyB,GAAG,SAAS,CA4BvC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { useEffect, useState } from 'react';
|
|
3
|
+
/**
|
|
4
|
+
* Returns the latest IntersectionObserverEntry for `elementRef`.
|
|
5
|
+
* Ported from vercel/front's `@vercel/hooks` `useIntersectionObserver`, with
|
|
6
|
+
* `root` threaded as a ref so we can observe inside a custom scroll container.
|
|
7
|
+
*/
|
|
8
|
+
export function useIntersectionObserver(elementRef, { threshold = 0, rootRef, rootMargin = '0%', freezeOnceVisible = false, } = {}) {
|
|
9
|
+
const [entry, setEntry] = useState();
|
|
10
|
+
const frozen = entry?.isIntersecting && freezeOnceVisible;
|
|
11
|
+
useEffect(() => {
|
|
12
|
+
const node = elementRef?.current;
|
|
13
|
+
const hasIOSupport = !!window.IntersectionObserver;
|
|
14
|
+
if (!hasIOSupport || frozen || !node)
|
|
15
|
+
return;
|
|
16
|
+
const updateEntry = ([entry]) => {
|
|
17
|
+
setEntry(entry);
|
|
18
|
+
};
|
|
19
|
+
const observer = new IntersectionObserver(updateEntry, {
|
|
20
|
+
threshold,
|
|
21
|
+
root: rootRef?.current ?? null,
|
|
22
|
+
rootMargin,
|
|
23
|
+
});
|
|
24
|
+
observer.observe(node);
|
|
25
|
+
return () => observer.disconnect();
|
|
26
|
+
}, [elementRef, threshold, rootRef, rootMargin, frozen]);
|
|
27
|
+
return entry;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLWludGVyc2VjdGlvbi1vYnNlcnZlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ob29rcy91c2UtaW50ZXJzZWN0aW9uLW9ic2VydmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksQ0FBQztBQUdiLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBWTVDOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsdUJBQXVCLENBQ3JDLFVBQXFDLEVBQ3JDLEVBQ0UsU0FBUyxHQUFHLENBQUMsRUFDYixPQUFPLEVBQ1AsVUFBVSxHQUFHLElBQUksRUFDakIsaUJBQWlCLEdBQUcsS0FBSyxNQUNNLEVBQUU7SUFFbkMsTUFBTSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsR0FBRyxRQUFRLEVBQTZCLENBQUM7SUFFaEUsTUFBTSxNQUFNLEdBQUcsS0FBSyxFQUFFLGNBQWMsSUFBSSxpQkFBaUIsQ0FBQztJQUUxRCxTQUFTLENBQUMsR0FBRyxFQUFFO1FBQ2IsTUFBTSxJQUFJLEdBQUcsVUFBVSxFQUFFLE9BQU8sQ0FBQztRQUVqQyxNQUFNLFlBQVksR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLG9CQUFvQixDQUFDO1FBRW5ELElBQUksQ0FBQyxZQUFZLElBQUksTUFBTSxJQUFJLENBQUMsSUFBSTtZQUFFLE9BQU87UUFFN0MsTUFBTSxXQUFXLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBOEIsRUFBUSxFQUFFO1lBQ2pFLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsQixDQUFDLENBQUM7UUFFRixNQUFNLFFBQVEsR0FBRyxJQUFJLG9CQUFvQixDQUFDLFdBQVcsRUFBRTtZQUNyRCxTQUFTO1lBQ1QsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLElBQUksSUFBSTtZQUM5QixVQUFVO1NBQ1gsQ0FBQyxDQUFDO1FBRUgsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV2QixPQUFPLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNyQyxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUV6RCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5cbmltcG9ydCB0eXBlIHsgUmVmT2JqZWN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcblxuaW50ZXJmYWNlIFVzZUludGVyc2VjdGlvbk9ic2VydmVyQXJnc1xuICBleHRlbmRzIE9taXQ8SW50ZXJzZWN0aW9uT2JzZXJ2ZXJJbml0LCAncm9vdCc+IHtcbiAgLyoqXG4gICAqIFNjcm9sbCBjb250YWluZXIgdGhlIHRhcmdldCBpcyBvYnNlcnZlZCB3aXRoaW4uIERlZmF1bHRzIHRvIHRoZSB2aWV3cG9ydC5cbiAgICogUGFzc2VkIGFzIGEgcmVmIHNvIGl0IHJlc29sdmVzIGFmdGVyIGNvbW1pdCAod2hlbiB0aGUgbm9kZSBleGlzdHMpLlxuICAgKi9cbiAgcm9vdFJlZj86IFJlZk9iamVjdDxFbGVtZW50IHwgbnVsbD47XG4gIGZyZWV6ZU9uY2VWaXNpYmxlPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBsYXRlc3QgSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeSBmb3IgYGVsZW1lbnRSZWZgLlxuICogUG9ydGVkIGZyb20gdmVyY2VsL2Zyb250J3MgYEB2ZXJjZWwvaG9va3NgIGB1c2VJbnRlcnNlY3Rpb25PYnNlcnZlcmAsIHdpdGhcbiAqIGByb290YCB0aHJlYWRlZCBhcyBhIHJlZiBzbyB3ZSBjYW4gb2JzZXJ2ZSBpbnNpZGUgYSBjdXN0b20gc2Nyb2xsIGNvbnRhaW5lci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUludGVyc2VjdGlvbk9ic2VydmVyKFxuICBlbGVtZW50UmVmOiBSZWZPYmplY3Q8RWxlbWVudCB8IG51bGw+LFxuICB7XG4gICAgdGhyZXNob2xkID0gMCxcbiAgICByb290UmVmLFxuICAgIHJvb3RNYXJnaW4gPSAnMCUnLFxuICAgIGZyZWV6ZU9uY2VWaXNpYmxlID0gZmFsc2UsXG4gIH06IFVzZUludGVyc2VjdGlvbk9ic2VydmVyQXJncyA9IHt9XG4pOiBJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgW2VudHJ5LCBzZXRFbnRyeV0gPSB1c2VTdGF0ZTxJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5PigpO1xuXG4gIGNvbnN0IGZyb3plbiA9IGVudHJ5Py5pc0ludGVyc2VjdGluZyAmJiBmcmVlemVPbmNlVmlzaWJsZTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IG5vZGUgPSBlbGVtZW50UmVmPy5jdXJyZW50O1xuXG4gICAgY29uc3QgaGFzSU9TdXBwb3J0ID0gISF3aW5kb3cuSW50ZXJzZWN0aW9uT2JzZXJ2ZXI7XG5cbiAgICBpZiAoIWhhc0lPU3VwcG9ydCB8fCBmcm96ZW4gfHwgIW5vZGUpIHJldHVybjtcblxuICAgIGNvbnN0IHVwZGF0ZUVudHJ5ID0gKFtlbnRyeV06IEludGVyc2VjdGlvbk9ic2VydmVyRW50cnlbXSk6IHZvaWQgPT4ge1xuICAgICAgc2V0RW50cnkoZW50cnkpO1xuICAgIH07XG5cbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcih1cGRhdGVFbnRyeSwge1xuICAgICAgdGhyZXNob2xkLFxuICAgICAgcm9vdDogcm9vdFJlZj8uY3VycmVudCA/PyBudWxsLFxuICAgICAgcm9vdE1hcmdpbixcbiAgICB9KTtcblxuICAgIG9ic2VydmVyLm9ic2VydmUobm9kZSk7XG5cbiAgICByZXR1cm4gKCkgPT4gb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICB9LCBbZWxlbWVudFJlZiwgdGhyZXNob2xkLCByb290UmVmLCByb290TWFyZ2luLCBmcm96ZW5dKTtcblxuICByZXR1cm4gZW50cnk7XG59XG4iXX0=
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { RefObject } from 'react';
|
|
2
|
+
interface UseLoadMoreOnScrollOptions {
|
|
3
|
+
hasMore: boolean;
|
|
4
|
+
isLoadingMore: boolean;
|
|
5
|
+
/** Scroll container the sentinel lives in. Defaults to the viewport. */
|
|
6
|
+
rootRef?: RefObject<Element | null>;
|
|
7
|
+
rootMargin?: string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Triggers `loadMore` when a sentinel element scrolls into view.
|
|
11
|
+
* Returns a ref to attach to an invisible sentinel `<div>` placed after the
|
|
12
|
+
* list content. Ported from vercel/front's `@vercel/hooks`
|
|
13
|
+
* `useLoadMoreOnScroll`.
|
|
14
|
+
*
|
|
15
|
+
* Because it keys off `isIntersecting`/`isLoadingMore`, it self-continues:
|
|
16
|
+
* if the sentinel is still in view once a page finishes loading, the next
|
|
17
|
+
* page is requested automatically.
|
|
18
|
+
*/
|
|
19
|
+
export declare function useLoadMoreOnScroll(loadMore: () => void, { hasMore, isLoadingMore, rootRef, rootMargin, }: UseLoadMoreOnScrollOptions): RefObject<HTMLDivElement | null>;
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=use-load-more-on-scroll.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-load-more-on-scroll.d.ts","sourceRoot":"","sources":["../../src/hooks/use-load-more-on-scroll.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIvC,UAAU,0BAA0B;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,OAAO,CAAC;IACvB,wEAAwE;IACxE,OAAO,CAAC,EAAE,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,IAAI,EACpB,EACE,OAAO,EACP,aAAa,EACb,OAAO,EACP,UAAoB,GACrB,EAAE,0BAA0B,oCAiB9B"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { useEffect, useRef } from 'react';
|
|
3
|
+
import { useIntersectionObserver } from './use-intersection-observer';
|
|
4
|
+
/**
|
|
5
|
+
* Triggers `loadMore` when a sentinel element scrolls into view.
|
|
6
|
+
* Returns a ref to attach to an invisible sentinel `<div>` placed after the
|
|
7
|
+
* list content. Ported from vercel/front's `@vercel/hooks`
|
|
8
|
+
* `useLoadMoreOnScroll`.
|
|
9
|
+
*
|
|
10
|
+
* Because it keys off `isIntersecting`/`isLoadingMore`, it self-continues:
|
|
11
|
+
* if the sentinel is still in view once a page finishes loading, the next
|
|
12
|
+
* page is requested automatically.
|
|
13
|
+
*/
|
|
14
|
+
export function useLoadMoreOnScroll(loadMore, { hasMore, isLoadingMore, rootRef, rootMargin = '400px', }) {
|
|
15
|
+
const sentinelRef = useRef(null);
|
|
16
|
+
const entry = useIntersectionObserver(sentinelRef, { rootRef, rootMargin });
|
|
17
|
+
const loadMoreRef = useRef(loadMore);
|
|
18
|
+
useEffect(() => {
|
|
19
|
+
loadMoreRef.current = loadMore;
|
|
20
|
+
}, [loadMore]);
|
|
21
|
+
useEffect(() => {
|
|
22
|
+
if (entry?.isIntersecting && hasMore && !isLoadingMore) {
|
|
23
|
+
loadMoreRef.current();
|
|
24
|
+
}
|
|
25
|
+
}, [entry?.isIntersecting, hasMore, isLoadingMore]);
|
|
26
|
+
return sentinelRef;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLWxvYWQtbW9yZS1vbi1zY3JvbGwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaG9va3MvdXNlLWxvYWQtbW9yZS1vbi1zY3JvbGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDO0FBR2IsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDMUMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFVdEU7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxVQUFVLG1CQUFtQixDQUNqQyxRQUFvQixFQUNwQixFQUNFLE9BQU8sRUFDUCxhQUFhLEVBQ2IsT0FBTyxFQUNQLFVBQVUsR0FBRyxPQUFPLEdBQ087SUFFN0IsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFpQixJQUFJLENBQUMsQ0FBQztJQUNqRCxNQUFNLEtBQUssR0FBRyx1QkFBdUIsQ0FBQyxXQUFXLEVBQUUsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUU1RSxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDckMsU0FBUyxDQUFDLEdBQUcsRUFBRTtRQUNiLFdBQVcsQ0FBQyxPQUFPLEdBQUcsUUFBUSxDQUFDO0lBQ2pDLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFFZixTQUFTLENBQUMsR0FBRyxFQUFFO1FBQ2IsSUFBSSxLQUFLLEVBQUUsY0FBYyxJQUFJLE9BQU8sSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3ZELFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN4QixDQUFDO0lBQ0gsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQztJQUVwRCxPQUFPLFdBQVcsQ0FBQztBQUNyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgdHlwZSB7IFJlZk9iamVjdCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgfSBmcm9tICcuL3VzZS1pbnRlcnNlY3Rpb24tb2JzZXJ2ZXInO1xuXG5pbnRlcmZhY2UgVXNlTG9hZE1vcmVPblNjcm9sbE9wdGlvbnMge1xuICBoYXNNb3JlOiBib29sZWFuO1xuICBpc0xvYWRpbmdNb3JlOiBib29sZWFuO1xuICAvKiogU2Nyb2xsIGNvbnRhaW5lciB0aGUgc2VudGluZWwgbGl2ZXMgaW4uIERlZmF1bHRzIHRvIHRoZSB2aWV3cG9ydC4gKi9cbiAgcm9vdFJlZj86IFJlZk9iamVjdDxFbGVtZW50IHwgbnVsbD47XG4gIHJvb3RNYXJnaW4/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVHJpZ2dlcnMgYGxvYWRNb3JlYCB3aGVuIGEgc2VudGluZWwgZWxlbWVudCBzY3JvbGxzIGludG8gdmlldy5cbiAqIFJldHVybnMgYSByZWYgdG8gYXR0YWNoIHRvIGFuIGludmlzaWJsZSBzZW50aW5lbCBgPGRpdj5gIHBsYWNlZCBhZnRlciB0aGVcbiAqIGxpc3QgY29udGVudC4gUG9ydGVkIGZyb20gdmVyY2VsL2Zyb250J3MgYEB2ZXJjZWwvaG9va3NgXG4gKiBgdXNlTG9hZE1vcmVPblNjcm9sbGAuXG4gKlxuICogQmVjYXVzZSBpdCBrZXlzIG9mZiBgaXNJbnRlcnNlY3RpbmdgL2Bpc0xvYWRpbmdNb3JlYCwgaXQgc2VsZi1jb250aW51ZXM6XG4gKiBpZiB0aGUgc2VudGluZWwgaXMgc3RpbGwgaW4gdmlldyBvbmNlIGEgcGFnZSBmaW5pc2hlcyBsb2FkaW5nLCB0aGUgbmV4dFxuICogcGFnZSBpcyByZXF1ZXN0ZWQgYXV0b21hdGljYWxseS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUxvYWRNb3JlT25TY3JvbGwoXG4gIGxvYWRNb3JlOiAoKSA9PiB2b2lkLFxuICB7XG4gICAgaGFzTW9yZSxcbiAgICBpc0xvYWRpbmdNb3JlLFxuICAgIHJvb3RSZWYsXG4gICAgcm9vdE1hcmdpbiA9ICc0MDBweCcsXG4gIH06IFVzZUxvYWRNb3JlT25TY3JvbGxPcHRpb25zXG4pIHtcbiAgY29uc3Qgc2VudGluZWxSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBlbnRyeSA9IHVzZUludGVyc2VjdGlvbk9ic2VydmVyKHNlbnRpbmVsUmVmLCB7IHJvb3RSZWYsIHJvb3RNYXJnaW4gfSk7XG5cbiAgY29uc3QgbG9hZE1vcmVSZWYgPSB1c2VSZWYobG9hZE1vcmUpO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGxvYWRNb3JlUmVmLmN1cnJlbnQgPSBsb2FkTW9yZTtcbiAgfSwgW2xvYWRNb3JlXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoZW50cnk/LmlzSW50ZXJzZWN0aW5nICYmIGhhc01vcmUgJiYgIWlzTG9hZGluZ01vcmUpIHtcbiAgICAgIGxvYWRNb3JlUmVmLmN1cnJlbnQoKTtcbiAgICB9XG4gIH0sIFtlbnRyeT8uaXNJbnRlcnNlY3RpbmcsIGhhc01vcmUsIGlzTG9hZGluZ01vcmVdKTtcblxuICByZXR1cm4gc2VudGluZWxSZWY7XG59XG4iXX0=
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hook that detects whether the user has requested reduced motion and reacts
|
|
3
|
+
* to changes. Mirrors the `prefers-reduced-motion: reduce` media query so
|
|
4
|
+
* components can skip or shorten animations for users with motion
|
|
5
|
+
* sensitivities (e.g. vestibular disorders).
|
|
6
|
+
*
|
|
7
|
+
* @returns `true` if the user prefers reduced motion, `false` otherwise
|
|
8
|
+
*/
|
|
9
|
+
export declare const useReducedMotion: () => boolean;
|
|
10
|
+
//# sourceMappingURL=use-reduced-motion.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-reduced-motion.d.ts","sourceRoot":"","sources":["../../src/hooks/use-reduced-motion.ts"],"names":[],"mappings":"AAMA;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB,QAAO,OAmBnC,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { useEffect, useState } from 'react';
|
|
3
|
+
const QUERY = '(prefers-reduced-motion: reduce)';
|
|
4
|
+
/**
|
|
5
|
+
* Hook that detects whether the user has requested reduced motion and reacts
|
|
6
|
+
* to changes. Mirrors the `prefers-reduced-motion: reduce` media query so
|
|
7
|
+
* components can skip or shorten animations for users with motion
|
|
8
|
+
* sensitivities (e.g. vestibular disorders).
|
|
9
|
+
*
|
|
10
|
+
* @returns `true` if the user prefers reduced motion, `false` otherwise
|
|
11
|
+
*/
|
|
12
|
+
export const useReducedMotion = () => {
|
|
13
|
+
const [reduced, setReduced] = useState(() => {
|
|
14
|
+
if (typeof window === 'undefined' || !window.matchMedia)
|
|
15
|
+
return false;
|
|
16
|
+
return window.matchMedia(QUERY).matches;
|
|
17
|
+
});
|
|
18
|
+
useEffect(() => {
|
|
19
|
+
if (typeof window === 'undefined' || !window.matchMedia)
|
|
20
|
+
return;
|
|
21
|
+
const media = window.matchMedia(QUERY);
|
|
22
|
+
const onChange = () => setReduced(media.matches);
|
|
23
|
+
media.addEventListener('change', onChange);
|
|
24
|
+
onChange();
|
|
25
|
+
return () => media.removeEventListener('change', onChange);
|
|
26
|
+
}, []);
|
|
27
|
+
return reduced;
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLXJlZHVjZWQtbW90aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2hvb2tzL3VzZS1yZWR1Y2VkLW1vdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZLENBQUM7QUFFYixPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUU1QyxNQUFNLEtBQUssR0FBRyxrQ0FBa0MsQ0FBQztBQUVqRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsR0FBWSxFQUFFO0lBQzVDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtRQUMxQyxJQUFJLE9BQU8sTUFBTSxLQUFLLFdBQVcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDdEUsT0FBTyxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQztJQUMxQyxDQUFDLENBQUMsQ0FBQztJQUVILFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDYixJQUFJLE9BQU8sTUFBTSxLQUFLLFdBQVcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVO1lBQUUsT0FBTztRQUVoRSxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sUUFBUSxHQUFHLEdBQVMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFdkQsS0FBSyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUMzQyxRQUFRLEVBQUUsQ0FBQztRQUVYLE9BQU8sR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM3RCxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFUCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5cbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5cbmNvbnN0IFFVRVJZID0gJyhwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpJztcblxuLyoqXG4gKiBIb29rIHRoYXQgZGV0ZWN0cyB3aGV0aGVyIHRoZSB1c2VyIGhhcyByZXF1ZXN0ZWQgcmVkdWNlZCBtb3Rpb24gYW5kIHJlYWN0c1xuICogdG8gY2hhbmdlcy4gTWlycm9ycyB0aGUgYHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZWAgbWVkaWEgcXVlcnkgc29cbiAqIGNvbXBvbmVudHMgY2FuIHNraXAgb3Igc2hvcnRlbiBhbmltYXRpb25zIGZvciB1c2VycyB3aXRoIG1vdGlvblxuICogc2Vuc2l0aXZpdGllcyAoZS5nLiB2ZXN0aWJ1bGFyIGRpc29yZGVycykuXG4gKlxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSB1c2VyIHByZWZlcnMgcmVkdWNlZCBtb3Rpb24sIGBmYWxzZWAgb3RoZXJ3aXNlXG4gKi9cbmV4cG9ydCBjb25zdCB1c2VSZWR1Y2VkTW90aW9uID0gKCk6IGJvb2xlYW4gPT4ge1xuICBjb25zdCBbcmVkdWNlZCwgc2V0UmVkdWNlZF0gPSB1c2VTdGF0ZSgoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnIHx8ICF3aW5kb3cubWF0Y2hNZWRpYSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB3aW5kb3cubWF0Y2hNZWRpYShRVUVSWSkubWF0Y2hlcztcbiAgfSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgfHwgIXdpbmRvdy5tYXRjaE1lZGlhKSByZXR1cm47XG5cbiAgICBjb25zdCBtZWRpYSA9IHdpbmRvdy5tYXRjaE1lZGlhKFFVRVJZKTtcbiAgICBjb25zdCBvbkNoYW5nZSA9ICgpOiB2b2lkID0+IHNldFJlZHVjZWQobWVkaWEubWF0Y2hlcyk7XG5cbiAgICBtZWRpYS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBvbkNoYW5nZSk7XG4gICAgb25DaGFuZ2UoKTtcblxuICAgIHJldHVybiAoKSA9PiBtZWRpYS5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBvbkNoYW5nZSk7XG4gIH0sIFtdKTtcblxuICByZXR1cm4gcmVkdWNlZDtcbn07XG4iXX0=
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type {
|
|
1
|
+
export type { HealthCheckResult } from '@workflow/core/runtime';
|
|
2
2
|
export { parseStepName, parseWorkflowName, } from '@workflow/utils/parse-name';
|
|
3
3
|
export type { Event, Hook, Step, WorkflowRun } from '@workflow/world';
|
|
4
4
|
export * from './components';
|
|
@@ -7,11 +7,12 @@ export type { EventAnalysis } from './lib/event-analysis';
|
|
|
7
7
|
export { analyzeEvents, hasPendingHooksFromEvents, hasPendingStepsFromEvents, isTerminalStatus, shouldShowReenqueueButton, } from './lib/event-analysis';
|
|
8
8
|
export type { MaterializedEntities, MaterializedHook, MaterializedStep, MaterializedWait, } from './lib/event-materialization';
|
|
9
9
|
export { materializeAll, materializeHooks, materializeSteps, materializeWaits, } from './lib/event-materialization';
|
|
10
|
+
export { type ExactIdSearchResult, type ExactWorkflowSearchId, type ExactWorkflowSearchIdKind, looksLikeWorkflowIdSearchInput, parseExactWorkflowSearchId, } from './lib/exact-event-search-id';
|
|
10
11
|
export type { Revivers, StreamRef } from './lib/hydration';
|
|
11
|
-
export { CLASS_INSTANCE_REF_TYPE, ClassInstanceRef, ENCRYPTED_PLACEHOLDER, extractStreamIds, getWebRevivers, hasEncryptedFields, hydrateResourceIO, hydrateResourceIOWithKey, isClassInstanceRef, isEncryptedMarker, isStreamId, isStreamRef, STREAM_REF_TYPE, truncateId, } from './lib/hydration';
|
|
12
|
+
export { CLASS_INSTANCE_REF_TYPE, ClassInstanceRef, ENCRYPTED_PLACEHOLDER, extractStreamIds, getWebRevivers, hasEncryptedFields, hydrateResourceIO, hydrateResourceIOAsync, hydrateResourceIOWithKey, isClassInstanceRef, isEncryptedMarker, isStreamId, isStreamRef, STREAM_REF_TYPE, truncateId, } from './lib/hydration';
|
|
12
13
|
export type { DecodedStreamChunkSource } from './lib/stream-display';
|
|
13
14
|
export type { ToastAdapter } from './lib/toast';
|
|
14
15
|
export { ToastProvider, useToast } from './lib/toast';
|
|
15
16
|
export type { StreamStep } from './lib/utils';
|
|
16
|
-
export { extractConversation, formatDuration, identifyStreamSteps, isDoStreamStep, } from './lib/utils';
|
|
17
|
+
export { extractConversation, formatDuration, formatDurationPrecise, identifyStreamSteps, isDoStreamStep, } from './lib/utils';
|
|
17
18
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EACL,aAAa,EACb,iBAAiB,GAClB,MAAM,4BAA4B,CAAC;AACpC,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACtE,cAAc,cAAc,CAAC;AAC7B,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,sDAAsD,CAAC;AAC9D,YAAY,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EACL,aAAa,EACb,yBAAyB,EACzB,yBAAyB,EACzB,gBAAgB,EAChB,yBAAyB,GAC1B,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACV,oBAAoB,EACpB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,yBAAyB,EAC9B,8BAA8B,EAC9B,0BAA0B,GAC3B,MAAM,6BAA6B,CAAC;AACrC,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAChB,qBAAqB,EACrB,gBAAgB,EAChB,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,sBAAsB,EACtB,wBAAwB,EACxB,kBAAkB,EAClB,iBAAiB,EACjB,UAAU,EACV,WAAW,EACX,eAAe,EACf,UAAU,GACX,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AACrE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACtD,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EACL,mBAAmB,EACnB,cAAc,EACd,qBAAqB,EACrB,mBAAmB,EACnB,cAAc,GACf,MAAM,aAAa,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -3,7 +3,8 @@ export * from './components';
|
|
|
3
3
|
export { hookEventsToHookEntity, stepEventsToStepEntity, waitEventsToWaitEntity, } from './components/workflow-traces/trace-span-construction';
|
|
4
4
|
export { analyzeEvents, hasPendingHooksFromEvents, hasPendingStepsFromEvents, isTerminalStatus, shouldShowReenqueueButton, } from './lib/event-analysis';
|
|
5
5
|
export { materializeAll, materializeHooks, materializeSteps, materializeWaits, } from './lib/event-materialization';
|
|
6
|
-
export {
|
|
6
|
+
export { looksLikeWorkflowIdSearchInput, parseExactWorkflowSearchId, } from './lib/exact-event-search-id';
|
|
7
|
+
export { CLASS_INSTANCE_REF_TYPE, ClassInstanceRef, ENCRYPTED_PLACEHOLDER, extractStreamIds, getWebRevivers, hasEncryptedFields, hydrateResourceIO, hydrateResourceIOAsync, hydrateResourceIOWithKey, isClassInstanceRef, isEncryptedMarker, isStreamId, isStreamRef, STREAM_REF_TYPE, truncateId, } from './lib/hydration';
|
|
7
8
|
export { ToastProvider, useToast } from './lib/toast';
|
|
8
|
-
export { extractConversation, formatDuration, identifyStreamSteps, isDoStreamStep, } from './lib/utils';
|
|
9
|
-
//# sourceMappingURL=
|
|
9
|
+
export { extractConversation, formatDuration, formatDurationPrecise, identifyStreamSteps, isDoStreamStep, } from './lib/utils';
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUNMLGFBQWEsRUFDYixpQkFBaUIsR0FDbEIsTUFBTSw0QkFBNEIsQ0FBQztBQUVwQyxjQUFjLGNBQWMsQ0FBQztBQUM3QixPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLHNCQUFzQixFQUN0QixzQkFBc0IsR0FDdkIsTUFBTSxzREFBc0QsQ0FBQztBQUU5RCxPQUFPLEVBQ0wsYUFBYSxFQUNiLHlCQUF5QixFQUN6Qix5QkFBeUIsRUFDekIsZ0JBQWdCLEVBQ2hCLHlCQUF5QixHQUMxQixNQUFNLHNCQUFzQixDQUFDO0FBTzlCLE9BQU8sRUFDTCxjQUFjLEVBQ2QsZ0JBQWdCLEVBQ2hCLGdCQUFnQixFQUNoQixnQkFBZ0IsR0FDakIsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEVBSUwsOEJBQThCLEVBQzlCLDBCQUEwQixHQUMzQixNQUFNLDZCQUE2QixDQUFDO0FBRXJDLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsZ0JBQWdCLEVBQ2hCLHFCQUFxQixFQUNyQixnQkFBZ0IsRUFDaEIsY0FBYyxFQUNkLGtCQUFrQixFQUNsQixpQkFBaUIsRUFDakIsc0JBQXNCLEVBQ3RCLHdCQUF3QixFQUN4QixrQkFBa0IsRUFDbEIsaUJBQWlCLEVBQ2pCLFVBQVUsRUFDVixXQUFXLEVBQ1gsZUFBZSxFQUNmLFVBQVUsR0FDWCxNQUFNLGlCQUFpQixDQUFDO0FBR3pCLE9BQU8sRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRXRELE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsY0FBYyxFQUNkLHFCQUFxQixFQUNyQixtQkFBbUIsRUFDbkIsY0FBYyxHQUNmLE1BQU0sYUFBYSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUgeyBIZWFsdGhDaGVja1Jlc3VsdCB9IGZyb20gJ0B3b3JrZmxvdy9jb3JlL3J1bnRpbWUnO1xuZXhwb3J0IHtcbiAgcGFyc2VTdGVwTmFtZSxcbiAgcGFyc2VXb3JrZmxvd05hbWUsXG59IGZyb20gJ0B3b3JrZmxvdy91dGlscy9wYXJzZS1uYW1lJztcbmV4cG9ydCB0eXBlIHsgRXZlbnQsIEhvb2ssIFN0ZXAsIFdvcmtmbG93UnVuIH0gZnJvbSAnQHdvcmtmbG93L3dvcmxkJztcbmV4cG9ydCAqIGZyb20gJy4vY29tcG9uZW50cyc7XG5leHBvcnQge1xuICBob29rRXZlbnRzVG9Ib29rRW50aXR5LFxuICBzdGVwRXZlbnRzVG9TdGVwRW50aXR5LFxuICB3YWl0RXZlbnRzVG9XYWl0RW50aXR5LFxufSBmcm9tICcuL2NvbXBvbmVudHMvd29ya2Zsb3ctdHJhY2VzL3RyYWNlLXNwYW4tY29uc3RydWN0aW9uJztcbmV4cG9ydCB0eXBlIHsgRXZlbnRBbmFseXNpcyB9IGZyb20gJy4vbGliL2V2ZW50LWFuYWx5c2lzJztcbmV4cG9ydCB7XG4gIGFuYWx5emVFdmVudHMsXG4gIGhhc1BlbmRpbmdIb29rc0Zyb21FdmVudHMsXG4gIGhhc1BlbmRpbmdTdGVwc0Zyb21FdmVudHMsXG4gIGlzVGVybWluYWxTdGF0dXMsXG4gIHNob3VsZFNob3dSZWVucXVldWVCdXR0b24sXG59IGZyb20gJy4vbGliL2V2ZW50LWFuYWx5c2lzJztcbmV4cG9ydCB0eXBlIHtcbiAgTWF0ZXJpYWxpemVkRW50aXRpZXMsXG4gIE1hdGVyaWFsaXplZEhvb2ssXG4gIE1hdGVyaWFsaXplZFN0ZXAsXG4gIE1hdGVyaWFsaXplZFdhaXQsXG59IGZyb20gJy4vbGliL2V2ZW50LW1hdGVyaWFsaXphdGlvbic7XG5leHBvcnQge1xuICBtYXRlcmlhbGl6ZUFsbCxcbiAgbWF0ZXJpYWxpemVIb29rcyxcbiAgbWF0ZXJpYWxpemVTdGVwcyxcbiAgbWF0ZXJpYWxpemVXYWl0cyxcbn0gZnJvbSAnLi9saWIvZXZlbnQtbWF0ZXJpYWxpemF0aW9uJztcbmV4cG9ydCB7XG4gIHR5cGUgRXhhY3RJZFNlYXJjaFJlc3VsdCxcbiAgdHlwZSBFeGFjdFdvcmtmbG93U2VhcmNoSWQsXG4gIHR5cGUgRXhhY3RXb3JrZmxvd1NlYXJjaElkS2luZCxcbiAgbG9va3NMaWtlV29ya2Zsb3dJZFNlYXJjaElucHV0LFxuICBwYXJzZUV4YWN0V29ya2Zsb3dTZWFyY2hJZCxcbn0gZnJvbSAnLi9saWIvZXhhY3QtZXZlbnQtc2VhcmNoLWlkJztcbmV4cG9ydCB0eXBlIHsgUmV2aXZlcnMsIFN0cmVhbVJlZiB9IGZyb20gJy4vbGliL2h5ZHJhdGlvbic7XG5leHBvcnQge1xuICBDTEFTU19JTlNUQU5DRV9SRUZfVFlQRSxcbiAgQ2xhc3NJbnN0YW5jZVJlZixcbiAgRU5DUllQVEVEX1BMQUNFSE9MREVSLFxuICBleHRyYWN0U3RyZWFtSWRzLFxuICBnZXRXZWJSZXZpdmVycyxcbiAgaGFzRW5jcnlwdGVkRmllbGRzLFxuICBoeWRyYXRlUmVzb3VyY2VJTyxcbiAgaHlkcmF0ZVJlc291cmNlSU9Bc3luYyxcbiAgaHlkcmF0ZVJlc291cmNlSU9XaXRoS2V5LFxuICBpc0NsYXNzSW5zdGFuY2VSZWYsXG4gIGlzRW5jcnlwdGVkTWFya2VyLFxuICBpc1N0cmVhbUlkLFxuICBpc1N0cmVhbVJlZixcbiAgU1RSRUFNX1JFRl9UWVBFLFxuICB0cnVuY2F0ZUlkLFxufSBmcm9tICcuL2xpYi9oeWRyYXRpb24nO1xuZXhwb3J0IHR5cGUgeyBEZWNvZGVkU3RyZWFtQ2h1bmtTb3VyY2UgfSBmcm9tICcuL2xpYi9zdHJlYW0tZGlzcGxheSc7XG5leHBvcnQgdHlwZSB7IFRvYXN0QWRhcHRlciB9IGZyb20gJy4vbGliL3RvYXN0JztcbmV4cG9ydCB7IFRvYXN0UHJvdmlkZXIsIHVzZVRvYXN0IH0gZnJvbSAnLi9saWIvdG9hc3QnO1xuZXhwb3J0IHR5cGUgeyBTdHJlYW1TdGVwIH0gZnJvbSAnLi9saWIvdXRpbHMnO1xuZXhwb3J0IHtcbiAgZXh0cmFjdENvbnZlcnNhdGlvbixcbiAgZm9ybWF0RHVyYXRpb24sXG4gIGZvcm1hdER1cmF0aW9uUHJlY2lzZSxcbiAgaWRlbnRpZnlTdHJlYW1TdGVwcyxcbiAgaXNEb1N0cmVhbVN0ZXAsXG59IGZyb20gJy4vbGliL3V0aWxzJztcbiJdfQ==
|
package/dist/lib/cn.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type ClassValue } from 'clsx';
|
|
2
|
+
/**
|
|
3
|
+
* Merges Tailwind class names and resolves any conflicts using `clsx` with `tailwind-merge`.
|
|
4
|
+
*
|
|
5
|
+
* @param inputs - An array of class names to merge.
|
|
6
|
+
* @returns A string of merged and optimized class names.
|
|
7
|
+
*/
|
|
8
|
+
declare function cn(...classes: ClassValue[]): string;
|
|
9
|
+
export { cn };
|
|
10
|
+
//# sourceMappingURL=cn.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cn.d.ts","sourceRoot":"","sources":["../../src/lib/cn.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAQ,MAAM,MAAM,CAAC;AAkF7C;;;;;GAKG;AACH,iBAAS,EAAE,CAAC,GAAG,OAAO,EAAE,UAAU,EAAE,UAEnC;AAED,OAAO,EAAE,EAAE,EAAE,CAAC"}
|