@n-dx/web 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +96 -0
- package/README.md +5 -0
- package/build.js +243 -0
- package/dist/cli/index.d.ts +8 -0
- package/dist/cli/index.js +50 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/landing/index.html +325 -0
- package/dist/landing/landing.d.ts +38 -0
- package/dist/landing/landing.js +299 -0
- package/dist/landing/landing.js.map +1 -0
- package/dist/public.d.ts +55 -0
- package/dist/public.js +51 -0
- package/dist/public.js.map +1 -0
- package/dist/schema/features.d.ts +28 -0
- package/dist/schema/features.js +9 -0
- package/dist/schema/features.js.map +1 -0
- package/dist/schema/v1.d.ts +317 -0
- package/dist/schema/v1.js +3 -0
- package/dist/schema/v1.js.map +1 -0
- package/dist/server/aggregation-cache.d.ts +105 -0
- package/dist/server/aggregation-cache.js +163 -0
- package/dist/server/aggregation-cache.js.map +1 -0
- package/dist/server/concurrent-execution-metrics.d.ts +103 -0
- package/dist/server/concurrent-execution-metrics.js +253 -0
- package/dist/server/concurrent-execution-metrics.js.map +1 -0
- package/dist/server/domain-gateway.d.ts +18 -0
- package/dist/server/domain-gateway.js +19 -0
- package/dist/server/domain-gateway.js.map +1 -0
- package/dist/server/incremental-task-usage.d.ts +92 -0
- package/dist/server/incremental-task-usage.js +251 -0
- package/dist/server/incremental-task-usage.js.map +1 -0
- package/dist/server/index.d.ts +39 -0
- package/dist/server/index.js +36 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/port.d.ts +96 -0
- package/dist/server/port.js +134 -0
- package/dist/server/port.js.map +1 -0
- package/dist/server/pr-markdown-refresh-diagnostics.d.ts +59 -0
- package/dist/server/pr-markdown-refresh-diagnostics.js +429 -0
- package/dist/server/pr-markdown-refresh-diagnostics.js.map +1 -0
- package/dist/server/prd-io.d.ts +40 -0
- package/dist/server/prd-io.js +66 -0
- package/dist/server/prd-io.js.map +1 -0
- package/dist/server/process-memory-tracker.d.ts +79 -0
- package/dist/server/process-memory-tracker.js +194 -0
- package/dist/server/process-memory-tracker.js.map +1 -0
- package/dist/server/register-scheduler.d.ts +53 -0
- package/dist/server/register-scheduler.js +36 -0
- package/dist/server/register-scheduler.js.map +1 -0
- package/dist/server/rex-gateway.d.ts +39 -0
- package/dist/server/rex-gateway.js +47 -0
- package/dist/server/rex-gateway.js.map +1 -0
- package/dist/server/routes-adaptive.d.ts +21 -0
- package/dist/server/routes-adaptive.js +659 -0
- package/dist/server/routes-adaptive.js.map +1 -0
- package/dist/server/routes-config.d.ts +47 -0
- package/dist/server/routes-config.js +222 -0
- package/dist/server/routes-config.js.map +1 -0
- package/dist/server/routes-data.d.ts +14 -0
- package/dist/server/routes-data.js +129 -0
- package/dist/server/routes-data.js.map +1 -0
- package/dist/server/routes-features.d.ts +14 -0
- package/dist/server/routes-features.js +245 -0
- package/dist/server/routes-features.js.map +1 -0
- package/dist/server/routes-hench.d.ts +116 -0
- package/dist/server/routes-hench.js +2016 -0
- package/dist/server/routes-hench.js.map +1 -0
- package/dist/server/routes-integrations.d.ts +23 -0
- package/dist/server/routes-integrations.js +277 -0
- package/dist/server/routes-integrations.js.map +1 -0
- package/dist/server/routes-mcp.d.ts +31 -0
- package/dist/server/routes-mcp.js +175 -0
- package/dist/server/routes-mcp.js.map +1 -0
- package/dist/server/routes-notion.d.ts +23 -0
- package/dist/server/routes-notion.js +723 -0
- package/dist/server/routes-notion.js.map +1 -0
- package/dist/server/routes-project.d.ts +47 -0
- package/dist/server/routes-project.js +128 -0
- package/dist/server/routes-project.js.map +1 -0
- package/dist/server/routes-rex/analysis.d.ts +11 -0
- package/dist/server/routes-rex/analysis.js +583 -0
- package/dist/server/routes-rex/analysis.js.map +1 -0
- package/dist/server/routes-rex/execution.d.ts +37 -0
- package/dist/server/routes-rex/execution.js +355 -0
- package/dist/server/routes-rex/execution.js.map +1 -0
- package/dist/server/routes-rex/health.d.ts +8 -0
- package/dist/server/routes-rex/health.js +136 -0
- package/dist/server/routes-rex/health.js.map +1 -0
- package/dist/server/routes-rex/index.d.ts +35 -0
- package/dist/server/routes-rex/index.js +72 -0
- package/dist/server/routes-rex/index.js.map +1 -0
- package/dist/server/routes-rex/items.d.ts +8 -0
- package/dist/server/routes-rex/items.js +359 -0
- package/dist/server/routes-rex/items.js.map +1 -0
- package/dist/server/routes-rex/prune.d.ts +11 -0
- package/dist/server/routes-rex/prune.js +379 -0
- package/dist/server/routes-rex/prune.js.map +1 -0
- package/dist/server/routes-rex/reads.d.ts +9 -0
- package/dist/server/routes-rex/reads.js +119 -0
- package/dist/server/routes-rex/reads.js.map +1 -0
- package/dist/server/routes-rex/requirements.d.ts +10 -0
- package/dist/server/routes-rex/requirements.js +408 -0
- package/dist/server/routes-rex/requirements.js.map +1 -0
- package/dist/server/routes-rex/shared.d.ts +37 -0
- package/dist/server/routes-rex/shared.js +73 -0
- package/dist/server/routes-rex/shared.js.map +1 -0
- package/dist/server/routes-search.d.ts +26 -0
- package/dist/server/routes-search.js +82 -0
- package/dist/server/routes-search.js.map +1 -0
- package/dist/server/routes-sourcevision.d.ts +18 -0
- package/dist/server/routes-sourcevision.js +444 -0
- package/dist/server/routes-sourcevision.js.map +1 -0
- package/dist/server/routes-static.d.ts +20 -0
- package/dist/server/routes-static.js +168 -0
- package/dist/server/routes-static.js.map +1 -0
- package/dist/server/routes-status.d.ts +58 -0
- package/dist/server/routes-status.js +191 -0
- package/dist/server/routes-status.js.map +1 -0
- package/dist/server/routes-token-usage.d.ts +63 -0
- package/dist/server/routes-token-usage.js +720 -0
- package/dist/server/routes-token-usage.js.map +1 -0
- package/dist/server/routes-validation.d.ts +10 -0
- package/dist/server/routes-validation.js +365 -0
- package/dist/server/routes-validation.js.map +1 -0
- package/dist/server/routes-workflow.d.ts +15 -0
- package/dist/server/routes-workflow.js +498 -0
- package/dist/server/routes-workflow.js.map +1 -0
- package/dist/server/search-index.d.ts +111 -0
- package/dist/server/search-index.js +348 -0
- package/dist/server/search-index.js.map +1 -0
- package/dist/server/shared-types.d.ts +65 -0
- package/dist/server/shared-types.js +31 -0
- package/dist/server/shared-types.js.map +1 -0
- package/dist/server/start.d.ts +68 -0
- package/dist/server/start.js +568 -0
- package/dist/server/start.js.map +1 -0
- package/dist/server/task-usage.d.ts +17 -0
- package/dist/server/task-usage.js +20 -0
- package/dist/server/task-usage.js.map +1 -0
- package/dist/server/types.d.ts +27 -0
- package/dist/server/types.js +26 -0
- package/dist/server/types.js.map +1 -0
- package/dist/server/usage-cleanup-scheduler.d.ts +107 -0
- package/dist/server/usage-cleanup-scheduler.js +232 -0
- package/dist/server/usage-cleanup-scheduler.js.map +1 -0
- package/dist/server/websocket.d.ts +131 -0
- package/dist/server/websocket.js +512 -0
- package/dist/server/websocket.js.map +1 -0
- package/dist/shared/data-files.d.ts +17 -0
- package/dist/shared/data-files.js +18 -0
- package/dist/shared/data-files.js.map +1 -0
- package/dist/shared/index.d.ts +9 -0
- package/dist/shared/index.js +9 -0
- package/dist/shared/index.js.map +1 -0
- package/dist/shared/view-id.d.ts +8 -0
- package/dist/shared/view-id.js +9 -0
- package/dist/shared/view-id.js.map +1 -0
- package/dist/viewer/Hench-F.png +0 -0
- package/dist/viewer/Rex-F.png +0 -0
- package/dist/viewer/SourceVision-F.png +0 -0
- package/dist/viewer/SourceVision.png +0 -0
- package/dist/viewer/api.d.ts +19 -0
- package/dist/viewer/api.js +17 -0
- package/dist/viewer/api.js.map +1 -0
- package/dist/viewer/bootstrap.d.ts +13 -0
- package/dist/viewer/bootstrap.js +40 -0
- package/dist/viewer/bootstrap.js.map +1 -0
- package/dist/viewer/components/active-tasks-panel.d.ts +36 -0
- package/dist/viewer/components/active-tasks-panel.js +183 -0
- package/dist/viewer/components/active-tasks-panel.js.map +1 -0
- package/dist/viewer/components/breadcrumb.d.ts +21 -0
- package/dist/viewer/components/breadcrumb.js +117 -0
- package/dist/viewer/components/breadcrumb.js.map +1 -0
- package/dist/viewer/components/concurrency-panel.d.ts +18 -0
- package/dist/viewer/components/concurrency-panel.js +175 -0
- package/dist/viewer/components/concurrency-panel.js.map +1 -0
- package/dist/viewer/components/config-footer.d.ts +11 -0
- package/dist/viewer/components/config-footer.js +132 -0
- package/dist/viewer/components/config-footer.js.map +1 -0
- package/dist/viewer/components/constants.d.ts +10 -0
- package/dist/viewer/components/constants.js +11 -0
- package/dist/viewer/components/constants.js.map +1 -0
- package/dist/viewer/components/copy-link-button.d.ts +30 -0
- package/dist/viewer/components/copy-link-button.js +74 -0
- package/dist/viewer/components/copy-link-button.js.map +1 -0
- package/dist/viewer/components/crash-recovery-banner.d.ts +28 -0
- package/dist/viewer/components/crash-recovery-banner.js +47 -0
- package/dist/viewer/components/crash-recovery-banner.js.map +1 -0
- package/dist/viewer/components/data-display/collapsible-section.d.ts +14 -0
- package/dist/viewer/components/data-display/collapsible-section.js +66 -0
- package/dist/viewer/components/data-display/collapsible-section.js.map +1 -0
- package/dist/viewer/components/data-display/findings-list.d.ts +13 -0
- package/dist/viewer/components/data-display/findings-list.js +136 -0
- package/dist/viewer/components/data-display/findings-list.js.map +1 -0
- package/dist/viewer/components/data-display/health-gauge.d.ts +37 -0
- package/dist/viewer/components/data-display/health-gauge.js +62 -0
- package/dist/viewer/components/data-display/health-gauge.js.map +1 -0
- package/dist/viewer/components/data-display/mini-charts.d.ts +36 -0
- package/dist/viewer/components/data-display/mini-charts.js +124 -0
- package/dist/viewer/components/data-display/mini-charts.js.map +1 -0
- package/dist/viewer/components/data-display/tree-view.d.ts +18 -0
- package/dist/viewer/components/data-display/tree-view.js +107 -0
- package/dist/viewer/components/data-display/tree-view.js.map +1 -0
- package/dist/viewer/components/data-display/zone-map.d.ts +28 -0
- package/dist/viewer/components/data-display/zone-map.js +197 -0
- package/dist/viewer/components/data-display/zone-map.js.map +1 -0
- package/dist/viewer/components/degradation-banner.d.ts +28 -0
- package/dist/viewer/components/degradation-banner.js +47 -0
- package/dist/viewer/components/degradation-banner.js.map +1 -0
- package/dist/viewer/components/detail-panel.d.ts +12 -0
- package/dist/viewer/components/detail-panel.js +166 -0
- package/dist/viewer/components/detail-panel.js.map +1 -0
- package/dist/viewer/components/elapsed-time.d.ts +38 -0
- package/dist/viewer/components/elapsed-time.js +35 -0
- package/dist/viewer/components/elapsed-time.js.map +1 -0
- package/dist/viewer/components/faq.d.ts +12 -0
- package/dist/viewer/components/faq.js +237 -0
- package/dist/viewer/components/faq.js.map +1 -0
- package/dist/viewer/components/favicon.d.ts +30 -0
- package/dist/viewer/components/favicon.js +90 -0
- package/dist/viewer/components/favicon.js.map +1 -0
- package/dist/viewer/components/guide.d.ts +5 -0
- package/dist/viewer/components/guide.js +116 -0
- package/dist/viewer/components/guide.js.map +1 -0
- package/dist/viewer/components/index.d.ts +37 -0
- package/dist/viewer/components/index.js +46 -0
- package/dist/viewer/components/index.js.map +1 -0
- package/dist/viewer/components/logos.d.ts +42 -0
- package/dist/viewer/components/logos.js +46 -0
- package/dist/viewer/components/logos.js.map +1 -0
- package/dist/viewer/components/memory-panel.d.ts +19 -0
- package/dist/viewer/components/memory-panel.js +181 -0
- package/dist/viewer/components/memory-panel.js.map +1 -0
- package/dist/viewer/components/memory-warning.d.ts +23 -0
- package/dist/viewer/components/memory-warning.js +42 -0
- package/dist/viewer/components/memory-warning.js.map +1 -0
- package/dist/viewer/components/notion-schema-wizard.d.ts +16 -0
- package/dist/viewer/components/notion-schema-wizard.js +263 -0
- package/dist/viewer/components/notion-schema-wizard.js.map +1 -0
- package/dist/viewer/components/polling-suspension-indicator.d.ts +24 -0
- package/dist/viewer/components/polling-suspension-indicator.js +31 -0
- package/dist/viewer/components/polling-suspension-indicator.js.map +1 -0
- package/dist/viewer/components/prd-tree/add-item-form.d.ts +31 -0
- package/dist/viewer/components/prd-tree/add-item-form.js +231 -0
- package/dist/viewer/components/prd-tree/add-item-form.js.map +1 -0
- package/dist/viewer/components/prd-tree/analyze-panel.d.ts +13 -0
- package/dist/viewer/components/prd-tree/analyze-panel.js +245 -0
- package/dist/viewer/components/prd-tree/analyze-panel.js.map +1 -0
- package/dist/viewer/components/prd-tree/batch-import-panel.d.ts +34 -0
- package/dist/viewer/components/prd-tree/batch-import-panel.js +415 -0
- package/dist/viewer/components/prd-tree/batch-import-panel.js.map +1 -0
- package/dist/viewer/components/prd-tree/bulk-actions.d.ts +19 -0
- package/dist/viewer/components/prd-tree/bulk-actions.js +90 -0
- package/dist/viewer/components/prd-tree/bulk-actions.js.map +1 -0
- package/dist/viewer/components/prd-tree/compute.d.ts +32 -0
- package/dist/viewer/components/prd-tree/compute.js +129 -0
- package/dist/viewer/components/prd-tree/compute.js.map +1 -0
- package/dist/viewer/components/prd-tree/delete-confirmation.d.ts +23 -0
- package/dist/viewer/components/prd-tree/delete-confirmation.js +83 -0
- package/dist/viewer/components/prd-tree/delete-confirmation.js.map +1 -0
- package/dist/viewer/components/prd-tree/execution-panel.d.ts +14 -0
- package/dist/viewer/components/prd-tree/execution-panel.js +291 -0
- package/dist/viewer/components/prd-tree/execution-panel.js.map +1 -0
- package/dist/viewer/components/prd-tree/facet-filter.d.ts +40 -0
- package/dist/viewer/components/prd-tree/facet-filter.js +188 -0
- package/dist/viewer/components/prd-tree/facet-filter.js.map +1 -0
- package/dist/viewer/components/prd-tree/index.d.ts +24 -0
- package/dist/viewer/components/prd-tree/index.js +16 -0
- package/dist/viewer/components/prd-tree/index.js.map +1 -0
- package/dist/viewer/components/prd-tree/inline-add-form.d.ts +32 -0
- package/dist/viewer/components/prd-tree/inline-add-form.js +175 -0
- package/dist/viewer/components/prd-tree/inline-add-form.js.map +1 -0
- package/dist/viewer/components/prd-tree/inline-status-picker.d.ts +31 -0
- package/dist/viewer/components/prd-tree/inline-status-picker.js +110 -0
- package/dist/viewer/components/prd-tree/inline-status-picker.js.map +1 -0
- package/dist/viewer/components/prd-tree/lazy-children.d.ts +40 -0
- package/dist/viewer/components/prd-tree/lazy-children.js +73 -0
- package/dist/viewer/components/prd-tree/lazy-children.js.map +1 -0
- package/dist/viewer/components/prd-tree/levels.d.ts +31 -0
- package/dist/viewer/components/prd-tree/levels.js +72 -0
- package/dist/viewer/components/prd-tree/levels.js.map +1 -0
- package/dist/viewer/components/prd-tree/listener-lifecycle.d.ts +105 -0
- package/dist/viewer/components/prd-tree/listener-lifecycle.js +173 -0
- package/dist/viewer/components/prd-tree/listener-lifecycle.js.map +1 -0
- package/dist/viewer/components/prd-tree/merge-preview.d.ts +25 -0
- package/dist/viewer/components/prd-tree/merge-preview.js +181 -0
- package/dist/viewer/components/prd-tree/merge-preview.js.map +1 -0
- package/dist/viewer/components/prd-tree/prd-tree.d.ts +91 -0
- package/dist/viewer/components/prd-tree/prd-tree.js +565 -0
- package/dist/viewer/components/prd-tree/prd-tree.js.map +1 -0
- package/dist/viewer/components/prd-tree/proposal-editor.d.ts +44 -0
- package/dist/viewer/components/prd-tree/proposal-editor.js +438 -0
- package/dist/viewer/components/prd-tree/proposal-editor.js.map +1 -0
- package/dist/viewer/components/prd-tree/prune-confirmation.d.ts +25 -0
- package/dist/viewer/components/prd-tree/prune-confirmation.js +336 -0
- package/dist/viewer/components/prd-tree/prune-confirmation.js.map +1 -0
- package/dist/viewer/components/prd-tree/prune-diff-tree.d.ts +39 -0
- package/dist/viewer/components/prd-tree/prune-diff-tree.js +319 -0
- package/dist/viewer/components/prd-tree/prune-diff-tree.js.map +1 -0
- package/dist/viewer/components/prd-tree/reorganize-panel.d.ts +16 -0
- package/dist/viewer/components/prd-tree/reorganize-panel.js +213 -0
- package/dist/viewer/components/prd-tree/reorganize-panel.js.map +1 -0
- package/dist/viewer/components/prd-tree/smart-add-input.d.ts +19 -0
- package/dist/viewer/components/prd-tree/smart-add-input.js +383 -0
- package/dist/viewer/components/prd-tree/smart-add-input.js.map +1 -0
- package/dist/viewer/components/prd-tree/status-filter.d.ts +40 -0
- package/dist/viewer/components/prd-tree/status-filter.js +131 -0
- package/dist/viewer/components/prd-tree/status-filter.js.map +1 -0
- package/dist/viewer/components/prd-tree/task-detail.d.ts +41 -0
- package/dist/viewer/components/prd-tree/task-detail.js +1205 -0
- package/dist/viewer/components/prd-tree/task-detail.js.map +1 -0
- package/dist/viewer/components/prd-tree/task-utilization.d.ts +7 -0
- package/dist/viewer/components/prd-tree/task-utilization.js +25 -0
- package/dist/viewer/components/prd-tree/task-utilization.js.map +1 -0
- package/dist/viewer/components/prd-tree/tree-differ.d.ts +59 -0
- package/dist/viewer/components/prd-tree/tree-differ.js +200 -0
- package/dist/viewer/components/prd-tree/tree-differ.js.map +1 -0
- package/dist/viewer/components/prd-tree/tree-event-delegate.d.ts +70 -0
- package/dist/viewer/components/prd-tree/tree-event-delegate.js +176 -0
- package/dist/viewer/components/prd-tree/tree-event-delegate.js.map +1 -0
- package/dist/viewer/components/prd-tree/tree-search.d.ts +65 -0
- package/dist/viewer/components/prd-tree/tree-search.js +178 -0
- package/dist/viewer/components/prd-tree/tree-search.js.map +1 -0
- package/dist/viewer/components/prd-tree/tree-utils.d.ts +38 -0
- package/dist/viewer/components/prd-tree/tree-utils.js +107 -0
- package/dist/viewer/components/prd-tree/tree-utils.js.map +1 -0
- package/dist/viewer/components/prd-tree/types.d.ts +93 -0
- package/dist/viewer/components/prd-tree/types.js +16 -0
- package/dist/viewer/components/prd-tree/types.js.map +1 -0
- package/dist/viewer/components/prd-tree/virtual-scroll.d.ts +119 -0
- package/dist/viewer/components/prd-tree/virtual-scroll.js +169 -0
- package/dist/viewer/components/prd-tree/virtual-scroll.js.map +1 -0
- package/dist/viewer/components/progressive-loader.d.ts +114 -0
- package/dist/viewer/components/progressive-loader.js +225 -0
- package/dist/viewer/components/progressive-loader.js.map +1 -0
- package/dist/viewer/components/refresh-queue-status.d.ts +20 -0
- package/dist/viewer/components/refresh-queue-status.js +65 -0
- package/dist/viewer/components/refresh-queue-status.js.map +1 -0
- package/dist/viewer/components/rex-task-link.d.ts +50 -0
- package/dist/viewer/components/rex-task-link.js +218 -0
- package/dist/viewer/components/rex-task-link.js.map +1 -0
- package/dist/viewer/components/search-filter.d.ts +20 -0
- package/dist/viewer/components/search-filter.js +28 -0
- package/dist/viewer/components/search-filter.js.map +1 -0
- package/dist/viewer/components/search-overlay.d.ts +31 -0
- package/dist/viewer/components/search-overlay.js +472 -0
- package/dist/viewer/components/search-overlay.js.map +1 -0
- package/dist/viewer/components/sidebar.d.ts +18 -0
- package/dist/viewer/components/sidebar.js +357 -0
- package/dist/viewer/components/sidebar.js.map +1 -0
- package/dist/viewer/components/status-indicators.d.ts +63 -0
- package/dist/viewer/components/status-indicators.js +136 -0
- package/dist/viewer/components/status-indicators.js.map +1 -0
- package/dist/viewer/components/theme-toggle.d.ts +8 -0
- package/dist/viewer/components/theme-toggle.js +28 -0
- package/dist/viewer/components/theme-toggle.js.map +1 -0
- package/dist/viewer/components/throttle-controls.d.ts +18 -0
- package/dist/viewer/components/throttle-controls.js +304 -0
- package/dist/viewer/components/throttle-controls.js.map +1 -0
- package/dist/viewer/components/ws-health-panel.d.ts +18 -0
- package/dist/viewer/components/ws-health-panel.js +250 -0
- package/dist/viewer/components/ws-health-panel.js.map +1 -0
- package/dist/viewer/components/zone-slideout.d.ts +17 -0
- package/dist/viewer/components/zone-slideout.js +162 -0
- package/dist/viewer/components/zone-slideout.js.map +1 -0
- package/dist/viewer/crash/crash-detector.d.ts +69 -0
- package/dist/viewer/crash/crash-detector.js +239 -0
- package/dist/viewer/crash/crash-detector.js.map +1 -0
- package/dist/viewer/crash/index.d.ts +7 -0
- package/dist/viewer/crash/index.js +8 -0
- package/dist/viewer/crash/index.js.map +1 -0
- package/dist/viewer/deployed-mode.d.ts +37 -0
- package/dist/viewer/deployed-mode.js +94 -0
- package/dist/viewer/deployed-mode.js.map +1 -0
- package/dist/viewer/external.d.ts +17 -0
- package/dist/viewer/external.js +17 -0
- package/dist/viewer/external.js.map +1 -0
- package/dist/viewer/graph/index.d.ts +9 -0
- package/dist/viewer/graph/index.js +12 -0
- package/dist/viewer/graph/index.js.map +1 -0
- package/dist/viewer/graph/physics.d.ts +96 -0
- package/dist/viewer/graph/physics.js +366 -0
- package/dist/viewer/graph/physics.js.map +1 -0
- package/dist/viewer/graph/renderer.d.ts +184 -0
- package/dist/viewer/graph/renderer.js +1438 -0
- package/dist/viewer/graph/renderer.js.map +1 -0
- package/dist/viewer/hooks/index.d.ts +27 -0
- package/dist/viewer/hooks/index.js +28 -0
- package/dist/viewer/hooks/index.js.map +1 -0
- package/dist/viewer/hooks/use-app-data.d.ts +31 -0
- package/dist/viewer/hooks/use-app-data.js +152 -0
- package/dist/viewer/hooks/use-app-data.js.map +1 -0
- package/dist/viewer/hooks/use-crash-recovery.d.ts +50 -0
- package/dist/viewer/hooks/use-crash-recovery.js +76 -0
- package/dist/viewer/hooks/use-crash-recovery.js.map +1 -0
- package/dist/viewer/hooks/use-delete-actions.d.ts +48 -0
- package/dist/viewer/hooks/use-delete-actions.js +103 -0
- package/dist/viewer/hooks/use-delete-actions.js.map +1 -0
- package/dist/viewer/hooks/use-dom-performance-monitor.d.ts +68 -0
- package/dist/viewer/hooks/use-dom-performance-monitor.js +71 -0
- package/dist/viewer/hooks/use-dom-performance-monitor.js.map +1 -0
- package/dist/viewer/hooks/use-facet-state.d.ts +32 -0
- package/dist/viewer/hooks/use-facet-state.js +119 -0
- package/dist/viewer/hooks/use-facet-state.js.map +1 -0
- package/dist/viewer/hooks/use-feature-toggle.d.ts +18 -0
- package/dist/viewer/hooks/use-feature-toggle.js +57 -0
- package/dist/viewer/hooks/use-feature-toggle.js.map +1 -0
- package/dist/viewer/hooks/use-file-edges.d.ts +23 -0
- package/dist/viewer/hooks/use-file-edges.js +221 -0
- package/dist/viewer/hooks/use-file-edges.js.map +1 -0
- package/dist/viewer/hooks/use-graceful-degradation.d.ts +30 -0
- package/dist/viewer/hooks/use-graceful-degradation.js +45 -0
- package/dist/viewer/hooks/use-graceful-degradation.js.map +1 -0
- package/dist/viewer/hooks/use-item-selection.d.ts +49 -0
- package/dist/viewer/hooks/use-item-selection.js +117 -0
- package/dist/viewer/hooks/use-item-selection.js.map +1 -0
- package/dist/viewer/hooks/use-memory-monitor.d.ts +39 -0
- package/dist/viewer/hooks/use-memory-monitor.js +73 -0
- package/dist/viewer/hooks/use-memory-monitor.js.map +1 -0
- package/dist/viewer/hooks/use-pan-zoom.d.ts +33 -0
- package/dist/viewer/hooks/use-pan-zoom.js +110 -0
- package/dist/viewer/hooks/use-pan-zoom.js.map +1 -0
- package/dist/viewer/hooks/use-persistent-filter.d.ts +24 -0
- package/dist/viewer/hooks/use-persistent-filter.js +37 -0
- package/dist/viewer/hooks/use-persistent-filter.js.map +1 -0
- package/dist/viewer/hooks/use-polling-suspension.d.ts +32 -0
- package/dist/viewer/hooks/use-polling-suspension.js +41 -0
- package/dist/viewer/hooks/use-polling-suspension.js.map +1 -0
- package/dist/viewer/hooks/use-polling.d.ts +39 -0
- package/dist/viewer/hooks/use-polling.js +55 -0
- package/dist/viewer/hooks/use-polling.js.map +1 -0
- package/dist/viewer/hooks/use-prd-actions.d.ts +126 -0
- package/dist/viewer/hooks/use-prd-actions.js +250 -0
- package/dist/viewer/hooks/use-prd-actions.js.map +1 -0
- package/dist/viewer/hooks/use-prd-data.d.ts +45 -0
- package/dist/viewer/hooks/use-prd-data.js +159 -0
- package/dist/viewer/hooks/use-prd-data.js.map +1 -0
- package/dist/viewer/hooks/use-prd-deep-link.d.ts +45 -0
- package/dist/viewer/hooks/use-prd-deep-link.js +60 -0
- package/dist/viewer/hooks/use-prd-deep-link.js.map +1 -0
- package/dist/viewer/hooks/use-prd-websocket.d.ts +47 -0
- package/dist/viewer/hooks/use-prd-websocket.js +139 -0
- package/dist/viewer/hooks/use-prd-websocket.js.map +1 -0
- package/dist/viewer/hooks/use-project-metadata.d.ts +25 -0
- package/dist/viewer/hooks/use-project-metadata.js +55 -0
- package/dist/viewer/hooks/use-project-metadata.js.map +1 -0
- package/dist/viewer/hooks/use-project-status.d.ts +60 -0
- package/dist/viewer/hooks/use-project-status.js +133 -0
- package/dist/viewer/hooks/use-project-status.js.map +1 -0
- package/dist/viewer/hooks/use-refresh-throttle.d.ts +45 -0
- package/dist/viewer/hooks/use-refresh-throttle.js +52 -0
- package/dist/viewer/hooks/use-refresh-throttle.js.map +1 -0
- package/dist/viewer/hooks/use-route-state.d.ts +18 -0
- package/dist/viewer/hooks/use-route-state.js +115 -0
- package/dist/viewer/hooks/use-route-state.js.map +1 -0
- package/dist/viewer/hooks/use-subzone-edges.d.ts +21 -0
- package/dist/viewer/hooks/use-subzone-edges.js +147 -0
- package/dist/viewer/hooks/use-subzone-edges.js.map +1 -0
- package/dist/viewer/hooks/use-tab-visibility.d.ts +31 -0
- package/dist/viewer/hooks/use-tab-visibility.js +43 -0
- package/dist/viewer/hooks/use-tab-visibility.js.map +1 -0
- package/dist/viewer/hooks/use-tick.d.ts +43 -0
- package/dist/viewer/hooks/use-tick.js +76 -0
- package/dist/viewer/hooks/use-tick.js.map +1 -0
- package/dist/viewer/hooks/use-toast.d.ts +24 -0
- package/dist/viewer/hooks/use-toast.js +26 -0
- package/dist/viewer/hooks/use-toast.js.map +1 -0
- package/dist/viewer/hooks/use-zone-drag.d.ts +30 -0
- package/dist/viewer/hooks/use-zone-drag.js +60 -0
- package/dist/viewer/hooks/use-zone-drag.js.map +1 -0
- package/dist/viewer/index.html +36 -0
- package/dist/viewer/loader.d.ts +33 -0
- package/dist/viewer/loader.js +195 -0
- package/dist/viewer/loader.js.map +1 -0
- package/dist/viewer/main.d.ts +1 -0
- package/dist/viewer/main.js +121 -0
- package/dist/viewer/main.js.map +1 -0
- package/dist/viewer/messaging/call-rate-limiter.d.ts +50 -0
- package/dist/viewer/messaging/call-rate-limiter.js +103 -0
- package/dist/viewer/messaging/call-rate-limiter.js.map +1 -0
- package/dist/viewer/messaging/fetch-pipeline.d.ts +58 -0
- package/dist/viewer/messaging/fetch-pipeline.js +58 -0
- package/dist/viewer/messaging/fetch-pipeline.js.map +1 -0
- package/dist/viewer/messaging/index.d.ts +43 -0
- package/dist/viewer/messaging/index.js +46 -0
- package/dist/viewer/messaging/index.js.map +1 -0
- package/dist/viewer/messaging/message-coalescer.d.ts +96 -0
- package/dist/viewer/messaging/message-coalescer.js +121 -0
- package/dist/viewer/messaging/message-coalescer.js.map +1 -0
- package/dist/viewer/messaging/message-throttle.d.ts +95 -0
- package/dist/viewer/messaging/message-throttle.js +147 -0
- package/dist/viewer/messaging/message-throttle.js.map +1 -0
- package/dist/viewer/messaging/request-dedup.d.ts +43 -0
- package/dist/viewer/messaging/request-dedup.js +55 -0
- package/dist/viewer/messaging/request-dedup.js.map +1 -0
- package/dist/viewer/messaging/ws-pipeline.d.ts +85 -0
- package/dist/viewer/messaging/ws-pipeline.js +68 -0
- package/dist/viewer/messaging/ws-pipeline.js.map +1 -0
- package/dist/viewer/n-dx.png +0 -0
- package/dist/viewer/performance/dom-performance-monitor.d.ts +157 -0
- package/dist/viewer/performance/dom-performance-monitor.js +341 -0
- package/dist/viewer/performance/dom-performance-monitor.js.map +1 -0
- package/dist/viewer/performance/dom-update-gate.d.ts +122 -0
- package/dist/viewer/performance/dom-update-gate.js +229 -0
- package/dist/viewer/performance/dom-update-gate.js.map +1 -0
- package/dist/viewer/performance/graceful-degradation.d.ts +73 -0
- package/dist/viewer/performance/graceful-degradation.js +152 -0
- package/dist/viewer/performance/graceful-degradation.js.map +1 -0
- package/dist/viewer/performance/index.d.ts +14 -0
- package/dist/viewer/performance/index.js +20 -0
- package/dist/viewer/performance/index.js.map +1 -0
- package/dist/viewer/performance/memory-monitor.d.ts +78 -0
- package/dist/viewer/performance/memory-monitor.js +218 -0
- package/dist/viewer/performance/memory-monitor.js.map +1 -0
- package/dist/viewer/performance/refresh-throttle.d.ts +90 -0
- package/dist/viewer/performance/refresh-throttle.js +266 -0
- package/dist/viewer/performance/refresh-throttle.js.map +1 -0
- package/dist/viewer/performance/response-buffer-gate.d.ts +108 -0
- package/dist/viewer/performance/response-buffer-gate.js +170 -0
- package/dist/viewer/performance/response-buffer-gate.js.map +1 -0
- package/dist/viewer/performance/update-batcher.d.ts +79 -0
- package/dist/viewer/performance/update-batcher.js +119 -0
- package/dist/viewer/performance/update-batcher.js.map +1 -0
- package/dist/viewer/polling/batched-tick-dispatcher.d.ts +83 -0
- package/dist/viewer/polling/batched-tick-dispatcher.js +183 -0
- package/dist/viewer/polling/batched-tick-dispatcher.js.map +1 -0
- package/dist/viewer/polling/index.d.ts +13 -0
- package/dist/viewer/polling/index.js +16 -0
- package/dist/viewer/polling/index.js.map +1 -0
- package/dist/viewer/polling/polling-manager.d.ts +82 -0
- package/dist/viewer/polling/polling-manager.js +254 -0
- package/dist/viewer/polling/polling-manager.js.map +1 -0
- package/dist/viewer/polling/polling-restart.d.ts +45 -0
- package/dist/viewer/polling/polling-restart.js +98 -0
- package/dist/viewer/polling/polling-restart.js.map +1 -0
- package/dist/viewer/polling/polling-state.d.ts +182 -0
- package/dist/viewer/polling/polling-state.js +306 -0
- package/dist/viewer/polling/polling-state.js.map +1 -0
- package/dist/viewer/polling/tab-visibility.d.ts +112 -0
- package/dist/viewer/polling/tab-visibility.js +276 -0
- package/dist/viewer/polling/tab-visibility.js.map +1 -0
- package/dist/viewer/polling/tick-timer.d.ts +70 -0
- package/dist/viewer/polling/tick-timer.js +168 -0
- package/dist/viewer/polling/tick-timer.js.map +1 -0
- package/dist/viewer/polling/tick-visibility-gate.d.ts +92 -0
- package/dist/viewer/polling/tick-visibility-gate.js +146 -0
- package/dist/viewer/polling/tick-visibility-gate.js.map +1 -0
- package/dist/viewer/route-state.d.ts +8 -0
- package/dist/viewer/route-state.js +77 -0
- package/dist/viewer/route-state.js.map +1 -0
- package/dist/viewer/schema-compat.d.ts +17 -0
- package/dist/viewer/schema-compat.js +49 -0
- package/dist/viewer/schema-compat.js.map +1 -0
- package/dist/viewer/types.d.ts +66 -0
- package/dist/viewer/types.js +2 -0
- package/dist/viewer/types.js.map +1 -0
- package/dist/viewer/usage/constants.d.ts +14 -0
- package/dist/viewer/usage/constants.js +14 -0
- package/dist/viewer/usage/constants.js.map +1 -0
- package/dist/viewer/usage/index.d.ts +7 -0
- package/dist/viewer/usage/index.js +8 -0
- package/dist/viewer/usage/index.js.map +1 -0
- package/dist/viewer/utils.d.ts +25 -0
- package/dist/viewer/utils.js +48 -0
- package/dist/viewer/utils.js.map +1 -0
- package/dist/viewer/validate.d.ts +23 -0
- package/dist/viewer/validate.js +275 -0
- package/dist/viewer/validate.js.map +1 -0
- package/dist/viewer/views/analysis.d.ts +10 -0
- package/dist/viewer/views/analysis.js +109 -0
- package/dist/viewer/views/analysis.js.map +1 -0
- package/dist/viewer/views/architecture.d.ts +10 -0
- package/dist/viewer/views/architecture.js +44 -0
- package/dist/viewer/views/architecture.js.map +1 -0
- package/dist/viewer/views/domain-hench.d.ts +13 -0
- package/dist/viewer/views/domain-hench.js +14 -0
- package/dist/viewer/views/domain-hench.js.map +1 -0
- package/dist/viewer/views/domain-rex.d.ts +17 -0
- package/dist/viewer/views/domain-rex.js +18 -0
- package/dist/viewer/views/domain-rex.js.map +1 -0
- package/dist/viewer/views/domain-settings.d.ts +12 -0
- package/dist/viewer/views/domain-settings.js +13 -0
- package/dist/viewer/views/domain-settings.js.map +1 -0
- package/dist/viewer/views/domain-sourcevision.d.ts +20 -0
- package/dist/viewer/views/domain-sourcevision.js +21 -0
- package/dist/viewer/views/domain-sourcevision.js.map +1 -0
- package/dist/viewer/views/enrichment-thresholds.d.ts +11 -0
- package/dist/viewer/views/enrichment-thresholds.js +12 -0
- package/dist/viewer/views/enrichment-thresholds.js.map +1 -0
- package/dist/viewer/views/feature-toggles.d.ts +13 -0
- package/dist/viewer/views/feature-toggles.js +185 -0
- package/dist/viewer/views/feature-toggles.js.map +1 -0
- package/dist/viewer/views/files.d.ts +13 -0
- package/dist/viewer/views/files.js +174 -0
- package/dist/viewer/views/files.js.map +1 -0
- package/dist/viewer/views/graph.d.ts +12 -0
- package/dist/viewer/views/graph.js +316 -0
- package/dist/viewer/views/graph.js.map +1 -0
- package/dist/viewer/views/hench-config.d.ts +39 -0
- package/dist/viewer/views/hench-config.js +473 -0
- package/dist/viewer/views/hench-config.js.map +1 -0
- package/dist/viewer/views/hench-runs.d.ts +19 -0
- package/dist/viewer/views/hench-runs.js +460 -0
- package/dist/viewer/views/hench-runs.js.map +1 -0
- package/dist/viewer/views/hench-templates.d.ts +17 -0
- package/dist/viewer/views/hench-templates.js +262 -0
- package/dist/viewer/views/hench-templates.js.map +1 -0
- package/dist/viewer/views/integration-config.d.ts +73 -0
- package/dist/viewer/views/integration-config.js +524 -0
- package/dist/viewer/views/integration-config.js.map +1 -0
- package/dist/viewer/views/notion-config.d.ts +16 -0
- package/dist/viewer/views/notion-config.js +357 -0
- package/dist/viewer/views/notion-config.js.map +1 -0
- package/dist/viewer/views/overview.d.ts +10 -0
- package/dist/viewer/views/overview.js +187 -0
- package/dist/viewer/views/overview.js.map +1 -0
- package/dist/viewer/views/pr-markdown.d.ts +3 -0
- package/dist/viewer/views/pr-markdown.js +350 -0
- package/dist/viewer/views/pr-markdown.js.map +1 -0
- package/dist/viewer/views/prd.d.ts +34 -0
- package/dist/viewer/views/prd.js +257 -0
- package/dist/viewer/views/prd.js.map +1 -0
- package/dist/viewer/views/problems.d.ts +8 -0
- package/dist/viewer/views/problems.js +50 -0
- package/dist/viewer/views/problems.js.map +1 -0
- package/dist/viewer/views/rex-dashboard.d.ts +14 -0
- package/dist/viewer/views/rex-dashboard.js +334 -0
- package/dist/viewer/views/rex-dashboard.js.map +1 -0
- package/dist/viewer/views/routes.d.ts +8 -0
- package/dist/viewer/views/routes.js +216 -0
- package/dist/viewer/views/routes.js.map +1 -0
- package/dist/viewer/views/sourcevision-tabs.d.ts +18 -0
- package/dist/viewer/views/sourcevision-tabs.js +14 -0
- package/dist/viewer/views/sourcevision-tabs.js.map +1 -0
- package/dist/viewer/views/suggestions.d.ts +8 -0
- package/dist/viewer/views/suggestions.js +36 -0
- package/dist/viewer/views/suggestions.js.map +1 -0
- package/dist/viewer/views/task-audit.d.ts +18 -0
- package/dist/viewer/views/task-audit.js +413 -0
- package/dist/viewer/views/task-audit.js.map +1 -0
- package/dist/viewer/views/token-usage.d.ts +10 -0
- package/dist/viewer/views/token-usage.js +410 -0
- package/dist/viewer/views/token-usage.js.map +1 -0
- package/dist/viewer/views/validation.d.ts +11 -0
- package/dist/viewer/views/validation.js +475 -0
- package/dist/viewer/views/validation.js.map +1 -0
- package/dist/viewer/views/view-registry.d.ts +27 -0
- package/dist/viewer/views/view-registry.js +70 -0
- package/dist/viewer/views/view-registry.js.map +1 -0
- package/dist/viewer/views/workflow-optimization.d.ts +12 -0
- package/dist/viewer/views/workflow-optimization.js +311 -0
- package/dist/viewer/views/workflow-optimization.js.map +1 -0
- package/dist/viewer/views/zone-types.d.ts +69 -0
- package/dist/viewer/views/zone-types.js +5 -0
- package/dist/viewer/views/zone-types.js.map +1 -0
- package/dist/viewer/views/zones.d.ts +50 -0
- package/dist/viewer/views/zones.js +1438 -0
- package/dist/viewer/views/zones.js.map +1 -0
- package/dist/viewer/visualization/colors.d.ts +16 -0
- package/dist/viewer/visualization/colors.js +31 -0
- package/dist/viewer/visualization/colors.js.map +1 -0
- package/dist/viewer/visualization/flow.d.ts +54 -0
- package/dist/viewer/visualization/flow.js +123 -0
- package/dist/viewer/visualization/flow.js.map +1 -0
- package/dist/viewer/visualization/index.d.ts +34 -0
- package/dist/viewer/visualization/index.js +40 -0
- package/dist/viewer/visualization/index.js.map +1 -0
- package/dist/viewer/visualization/metrics.d.ts +8 -0
- package/dist/viewer/visualization/metrics.js +16 -0
- package/dist/viewer/visualization/metrics.js.map +1 -0
- package/package.json +54 -0
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lazy rendering wrapper for collapsed tree branches.
|
|
3
|
+
*
|
|
4
|
+
* Defers DOM creation for child nodes until the parent is expanded by the
|
|
5
|
+
* user. On collapse, children are hidden via CSS immediately and then
|
|
6
|
+
* unmounted from the DOM after a short delay. Rapid expand/collapse cycles
|
|
7
|
+
* within the delay window reuse the existing DOM — preserving component
|
|
8
|
+
* state and avoiding expensive re-mounts.
|
|
9
|
+
*
|
|
10
|
+
* Lifecycle:
|
|
11
|
+
* 1. Initially collapsed → children not mounted (zero DOM cost)
|
|
12
|
+
* 2. Parent expanded → children mount, CSS class reveals them
|
|
13
|
+
* 3. Parent collapsed → CSS hides children; unmount scheduled after delay
|
|
14
|
+
* 4. Rapid re-expand before unmount → cancels timer, children stay mounted
|
|
15
|
+
*
|
|
16
|
+
* @see ./prd-tree.ts — TreeNodes component that wraps child branches
|
|
17
|
+
*/
|
|
18
|
+
import type { VNode, ComponentChildren } from "preact";
|
|
19
|
+
/**
|
|
20
|
+
* Delay in milliseconds before unmounting children after a collapse.
|
|
21
|
+
* During this window, rapid re-expansion reuses the existing DOM (no re-mount).
|
|
22
|
+
* @internal Exported for testing.
|
|
23
|
+
*/
|
|
24
|
+
export declare const UNMOUNT_DELAY_MS = 300;
|
|
25
|
+
export interface LazyChildrenProps {
|
|
26
|
+
/** Whether the parent node is currently expanded. */
|
|
27
|
+
isOpen: boolean;
|
|
28
|
+
/** Render function that produces the child VDOM tree. Only called when
|
|
29
|
+
* children should be in the DOM — avoids VDOM creation when unmounted. */
|
|
30
|
+
renderChildren: () => ComponentChildren;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Wrapper that defers child DOM creation until the parent node is expanded.
|
|
34
|
+
*
|
|
35
|
+
* When `isOpen` transitions from false → true, children are mounted and
|
|
36
|
+
* revealed via a CSS class. When `isOpen` transitions from true → false,
|
|
37
|
+
* children are hidden immediately (CSS) and unmounted after
|
|
38
|
+
* {@link UNMOUNT_DELAY_MS} to handle rapid toggling without flicker.
|
|
39
|
+
*/
|
|
40
|
+
export declare function LazyChildren({ isOpen, renderChildren }: LazyChildrenProps): VNode | null;
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lazy rendering wrapper for collapsed tree branches.
|
|
3
|
+
*
|
|
4
|
+
* Defers DOM creation for child nodes until the parent is expanded by the
|
|
5
|
+
* user. On collapse, children are hidden via CSS immediately and then
|
|
6
|
+
* unmounted from the DOM after a short delay. Rapid expand/collapse cycles
|
|
7
|
+
* within the delay window reuse the existing DOM — preserving component
|
|
8
|
+
* state and avoiding expensive re-mounts.
|
|
9
|
+
*
|
|
10
|
+
* Lifecycle:
|
|
11
|
+
* 1. Initially collapsed → children not mounted (zero DOM cost)
|
|
12
|
+
* 2. Parent expanded → children mount, CSS class reveals them
|
|
13
|
+
* 3. Parent collapsed → CSS hides children; unmount scheduled after delay
|
|
14
|
+
* 4. Rapid re-expand before unmount → cancels timer, children stay mounted
|
|
15
|
+
*
|
|
16
|
+
* @see ./prd-tree.ts — TreeNodes component that wraps child branches
|
|
17
|
+
*/
|
|
18
|
+
import { h } from "preact";
|
|
19
|
+
import { useState, useEffect, useRef } from "preact/hooks";
|
|
20
|
+
/**
|
|
21
|
+
* Delay in milliseconds before unmounting children after a collapse.
|
|
22
|
+
* During this window, rapid re-expansion reuses the existing DOM (no re-mount).
|
|
23
|
+
* @internal Exported for testing.
|
|
24
|
+
*/
|
|
25
|
+
export const UNMOUNT_DELAY_MS = 300;
|
|
26
|
+
// ─── Component ──────────────────────────────────────────────────────────────
|
|
27
|
+
/**
|
|
28
|
+
* Wrapper that defers child DOM creation until the parent node is expanded.
|
|
29
|
+
*
|
|
30
|
+
* When `isOpen` transitions from false → true, children are mounted and
|
|
31
|
+
* revealed via a CSS class. When `isOpen` transitions from true → false,
|
|
32
|
+
* children are hidden immediately (CSS) and unmounted after
|
|
33
|
+
* {@link UNMOUNT_DELAY_MS} to handle rapid toggling without flicker.
|
|
34
|
+
*/
|
|
35
|
+
export function LazyChildren({ isOpen, renderChildren }) {
|
|
36
|
+
// Whether children are currently mounted in the DOM.
|
|
37
|
+
const [mounted, setMounted] = useState(isOpen);
|
|
38
|
+
// Ref for the deferred-unmount timer.
|
|
39
|
+
const timerRef = useRef(null);
|
|
40
|
+
useEffect(() => {
|
|
41
|
+
if (isOpen) {
|
|
42
|
+
// Expanding: mount immediately, cancel any pending unmount.
|
|
43
|
+
if (timerRef.current !== null) {
|
|
44
|
+
clearTimeout(timerRef.current);
|
|
45
|
+
timerRef.current = null;
|
|
46
|
+
}
|
|
47
|
+
setMounted(true);
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
// Collapsing: defer unmount so rapid re-expansion reuses the DOM.
|
|
51
|
+
timerRef.current = setTimeout(() => {
|
|
52
|
+
setMounted(false);
|
|
53
|
+
timerRef.current = null;
|
|
54
|
+
}, UNMOUNT_DELAY_MS);
|
|
55
|
+
}
|
|
56
|
+
}, [isOpen]);
|
|
57
|
+
// Cleanup timer if the component itself unmounts (e.g. parent is removed).
|
|
58
|
+
useEffect(() => {
|
|
59
|
+
return () => {
|
|
60
|
+
if (timerRef.current !== null) {
|
|
61
|
+
clearTimeout(timerRef.current);
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
}, []);
|
|
65
|
+
if (!mounted)
|
|
66
|
+
return null;
|
|
67
|
+
return h("div", {
|
|
68
|
+
class: `prd-children${isOpen ? "" : " prd-children-collapsed"}`,
|
|
69
|
+
role: "group",
|
|
70
|
+
"aria-hidden": isOpen ? undefined : "true",
|
|
71
|
+
}, renderChildren());
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=lazy-children.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lazy-children.js","sourceRoot":"","sources":["../../../../src/viewer/components/prd-tree/lazy-children.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAE3B,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3D;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAYpC,+EAA+E;AAE/E;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAAC,EAAE,MAAM,EAAE,cAAc,EAAqB;IACxE,qDAAqD;IACrD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC/C,sCAAsC;IACtC,MAAM,QAAQ,GAAG,MAAM,CAAuC,IAAI,CAAC,CAAC;IAEpE,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,MAAM,EAAE,CAAC;YACX,4DAA4D;YAC5D,IAAI,QAAQ,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;gBAC9B,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;gBAC/B,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC;YAC1B,CAAC;YACD,UAAU,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC;aAAM,CAAC;YACN,kEAAkE;YAClE,QAAQ,CAAC,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;gBACjC,UAAU,CAAC,KAAK,CAAC,CAAC;gBAClB,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC;YAC1B,CAAC,EAAE,gBAAgB,CAAC,CAAC;QACvB,CAAC;IACH,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,2EAA2E;IAC3E,SAAS,CAAC,GAAG,EAAE;QACb,OAAO,GAAG,EAAE;YACV,IAAI,QAAQ,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;gBAC9B,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YACjC,CAAC;QACH,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAE1B,OAAO,CAAC,CACN,KAAK,EACL;QACE,KAAK,EAAE,eAAe,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,yBAAyB,EAAE;QAC/D,IAAI,EAAE,OAAO;QACb,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM;KAC3C,EACD,cAAc,EAAE,CACjB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Level system helpers for the browser-bundled viewer.
|
|
3
|
+
*
|
|
4
|
+
* These mirror the canonical helpers in rex/src/schema/levels.ts but are
|
|
5
|
+
* self-contained for browser bundling. They use the same level strings
|
|
6
|
+
* as the rex types mirror in ./types.ts.
|
|
7
|
+
*
|
|
8
|
+
* @see packages/rex/src/schema/levels.ts — canonical source
|
|
9
|
+
* @see ./types.ts — viewer-side type definitions
|
|
10
|
+
*/
|
|
11
|
+
import type { ItemLevel } from "./types.js";
|
|
12
|
+
/** Can this level exist at the tree root? Replaces: `level === "epic"` */
|
|
13
|
+
export declare function isRootLevel(level: string): boolean;
|
|
14
|
+
/**
|
|
15
|
+
* Is this a work item (actionable leaf-level)?
|
|
16
|
+
* Replaces: `level === "task" || level === "subtask"`
|
|
17
|
+
*/
|
|
18
|
+
export declare function isWorkItem(level: string): boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Is this a container level (groups other items)?
|
|
21
|
+
* Replaces: `level === "epic" || level === "feature"`
|
|
22
|
+
*/
|
|
23
|
+
export declare function isContainerLevel(level: string): boolean;
|
|
24
|
+
/** Get the display label for a level. e.g. "epic" → "Epic" */
|
|
25
|
+
export declare function getLevelLabel(level: string): string;
|
|
26
|
+
/** Get the plural display label. e.g. "epic" → "Epics" */
|
|
27
|
+
export declare function getLevelPlural(level: string): string;
|
|
28
|
+
/** Get the emoji for a level. e.g. "epic" → "📦" */
|
|
29
|
+
export declare function getLevelEmoji(level: string): string;
|
|
30
|
+
/** Get the default child level. e.g. "epic" → "feature" */
|
|
31
|
+
export declare function getChildLevel(level: string): ItemLevel | null;
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Level system helpers for the browser-bundled viewer.
|
|
3
|
+
*
|
|
4
|
+
* These mirror the canonical helpers in rex/src/schema/levels.ts but are
|
|
5
|
+
* self-contained for browser bundling. They use the same level strings
|
|
6
|
+
* as the rex types mirror in ./types.ts.
|
|
7
|
+
*
|
|
8
|
+
* @see packages/rex/src/schema/levels.ts — canonical source
|
|
9
|
+
* @see ./types.ts — viewer-side type definitions
|
|
10
|
+
*/
|
|
11
|
+
// ── Semantic helpers ────────────────────────────────────────────────
|
|
12
|
+
/** Can this level exist at the tree root? Replaces: `level === "epic"` */
|
|
13
|
+
export function isRootLevel(level) {
|
|
14
|
+
return level === "epic";
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Is this a work item (actionable leaf-level)?
|
|
18
|
+
* Replaces: `level === "task" || level === "subtask"`
|
|
19
|
+
*/
|
|
20
|
+
export function isWorkItem(level) {
|
|
21
|
+
return level === "task" || level === "subtask";
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Is this a container level (groups other items)?
|
|
25
|
+
* Replaces: `level === "epic" || level === "feature"`
|
|
26
|
+
*/
|
|
27
|
+
export function isContainerLevel(level) {
|
|
28
|
+
return level === "epic" || level === "feature";
|
|
29
|
+
}
|
|
30
|
+
// ── Display helpers ─────────────────────────────────────────────────
|
|
31
|
+
const LEVEL_LABELS = {
|
|
32
|
+
epic: "Epic",
|
|
33
|
+
feature: "Feature",
|
|
34
|
+
task: "Task",
|
|
35
|
+
subtask: "Subtask",
|
|
36
|
+
};
|
|
37
|
+
const LEVEL_LABELS_PLURAL = {
|
|
38
|
+
epic: "Epics",
|
|
39
|
+
feature: "Features",
|
|
40
|
+
task: "Tasks",
|
|
41
|
+
subtask: "Subtasks",
|
|
42
|
+
};
|
|
43
|
+
const LEVEL_EMOJI = {
|
|
44
|
+
epic: "\u{1F4E6}", // 📦
|
|
45
|
+
feature: "\u{2728}", // ✨
|
|
46
|
+
task: "\u{1F4CB}", // 📋
|
|
47
|
+
subtask: "\u{1F539}", // 🔹
|
|
48
|
+
};
|
|
49
|
+
/** Get the display label for a level. e.g. "epic" → "Epic" */
|
|
50
|
+
export function getLevelLabel(level) {
|
|
51
|
+
return LEVEL_LABELS[level] ?? level;
|
|
52
|
+
}
|
|
53
|
+
/** Get the plural display label. e.g. "epic" → "Epics" */
|
|
54
|
+
export function getLevelPlural(level) {
|
|
55
|
+
return LEVEL_LABELS_PLURAL[level] ?? `${level}s`;
|
|
56
|
+
}
|
|
57
|
+
/** Get the emoji for a level. e.g. "epic" → "📦" */
|
|
58
|
+
export function getLevelEmoji(level) {
|
|
59
|
+
return LEVEL_EMOJI[level] ?? "\u2022";
|
|
60
|
+
}
|
|
61
|
+
// ── Hierarchy ───────────────────────────────────────────────────────
|
|
62
|
+
const CHILD_LEVEL = {
|
|
63
|
+
epic: "feature",
|
|
64
|
+
feature: "task",
|
|
65
|
+
task: "subtask",
|
|
66
|
+
subtask: null,
|
|
67
|
+
};
|
|
68
|
+
/** Get the default child level. e.g. "epic" → "feature" */
|
|
69
|
+
export function getChildLevel(level) {
|
|
70
|
+
return CHILD_LEVEL[level] ?? null;
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=levels.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"levels.js","sourceRoot":"","sources":["../../../../src/viewer/components/prd-tree/levels.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,uEAAuE;AAEvE,0EAA0E;AAC1E,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,OAAO,KAAK,KAAK,MAAM,CAAC;AAC1B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,OAAO,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,SAAS,CAAC;AACjD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,OAAO,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,SAAS,CAAC;AACjD,CAAC;AAED,uEAAuE;AAEvE,MAAM,YAAY,GAA2B;IAC3C,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,SAAS;IAClB,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,SAAS;CACnB,CAAC;AAEF,MAAM,mBAAmB,GAA2B;IAClD,IAAI,EAAE,OAAO;IACb,OAAO,EAAE,UAAU;IACnB,IAAI,EAAE,OAAO;IACb,OAAO,EAAE,UAAU;CACpB,CAAC;AAEF,MAAM,WAAW,GAA2B;IAC1C,IAAI,EAAE,WAAW,EAAK,KAAK;IAC3B,OAAO,EAAE,UAAU,EAAI,IAAI;IAC3B,IAAI,EAAE,WAAW,EAAM,KAAK;IAC5B,OAAO,EAAE,WAAW,EAAG,KAAK;CAC7B,CAAC;AAEF,8DAA8D;AAC9D,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,OAAO,YAAY,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC;AACtC,CAAC;AAED,0DAA0D;AAC1D,MAAM,UAAU,cAAc,CAAC,KAAa;IAC1C,OAAO,mBAAmB,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,GAAG,CAAC;AACnD,CAAC;AAED,oDAAoD;AACpD,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,OAAO,WAAW,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC;AACxC,CAAC;AAED,uEAAuE;AAEvE,MAAM,WAAW,GAAqC;IACpD,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,MAAM;IACf,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,IAAI;CACd,CAAC;AAEF,2DAA2D;AAC3D,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,OAAO,WAAW,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC;AACpC,CAAC"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Event listener lifecycle manager for tree node DOM elements.
|
|
3
|
+
*
|
|
4
|
+
* Provides centralized tracking and scope-based cleanup of event listeners
|
|
5
|
+
* registered on per-node DOM elements. Each listener is associated with a
|
|
6
|
+
* "scope" (typically a node ID) so that all listeners for a node can be
|
|
7
|
+
* batch-removed when the node is destroyed or culled off-screen.
|
|
8
|
+
*
|
|
9
|
+
* The manager ensures:
|
|
10
|
+
* - Event listeners are removed when nodes are destroyed (cull or unmount)
|
|
11
|
+
* - No memory leaks from orphaned listeners after tree data changes
|
|
12
|
+
* - Listener count stays proportional to visible nodes
|
|
13
|
+
* - Diagnostic state is available for memory profiling
|
|
14
|
+
*
|
|
15
|
+
* Framework-agnostic core — the Preact hook `useNodeListeners` is provided
|
|
16
|
+
* below for convenient integration with component lifecycles.
|
|
17
|
+
*
|
|
18
|
+
* @see ./prd-tree.ts — PRDTree component that owns the manager instance
|
|
19
|
+
*/
|
|
20
|
+
/** A single tracked event listener registration. */
|
|
21
|
+
export interface ListenerRecord {
|
|
22
|
+
target: EventTarget;
|
|
23
|
+
event: string;
|
|
24
|
+
handler: EventListenerOrEventListenerObject;
|
|
25
|
+
options?: boolean | AddEventListenerOptions;
|
|
26
|
+
}
|
|
27
|
+
/** Read-only diagnostic snapshot of manager state. */
|
|
28
|
+
export interface ListenerLifecycleState {
|
|
29
|
+
/** Total number of active listeners tracked across all scopes. */
|
|
30
|
+
totalListeners: number;
|
|
31
|
+
/** Number of active scopes (typically = number of nodes with listeners). */
|
|
32
|
+
activeScopeCount: number;
|
|
33
|
+
/** Whether the manager has been disposed. */
|
|
34
|
+
disposed: boolean;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Centralized event listener lifecycle manager.
|
|
38
|
+
*
|
|
39
|
+
* Organizes listeners by scope (node ID). When a node is culled or destroyed,
|
|
40
|
+
* `cleanupScope()` removes all its listeners in one call. On tree unmount,
|
|
41
|
+
* `dispose()` cleans up everything.
|
|
42
|
+
*
|
|
43
|
+
* Usage:
|
|
44
|
+
* ```ts
|
|
45
|
+
* const manager = new ListenerLifecycleManager();
|
|
46
|
+
*
|
|
47
|
+
* // Register a listener tied to a node
|
|
48
|
+
* const cleanup = manager.addListener("node-1", element, "click", handler);
|
|
49
|
+
*
|
|
50
|
+
* // Remove all listeners for a node (e.g. when culled)
|
|
51
|
+
* manager.cleanupScope("node-1");
|
|
52
|
+
*
|
|
53
|
+
* // Tear down on tree unmount
|
|
54
|
+
* manager.dispose();
|
|
55
|
+
* ```
|
|
56
|
+
*/
|
|
57
|
+
export declare class ListenerLifecycleManager {
|
|
58
|
+
private scopes;
|
|
59
|
+
private _disposed;
|
|
60
|
+
/**
|
|
61
|
+
* Register a DOM event listener tied to a scope.
|
|
62
|
+
*
|
|
63
|
+
* The listener is added to the target immediately and tracked. Returns a
|
|
64
|
+
* cleanup function that removes the listener and its tracking entry.
|
|
65
|
+
* The cleanup function is idempotent — safe to call multiple times.
|
|
66
|
+
*
|
|
67
|
+
* After `dispose()`, this method is a no-op and returns a no-op cleanup.
|
|
68
|
+
*/
|
|
69
|
+
addListener(scopeId: string, target: EventTarget, event: string, handler: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): () => void;
|
|
70
|
+
/**
|
|
71
|
+
* Remove all listeners for a given scope and clear its tracking.
|
|
72
|
+
*
|
|
73
|
+
* Called when a node is destroyed or culled off-screen. Safe to call
|
|
74
|
+
* with a scope that doesn't exist (no-op) or after dispose.
|
|
75
|
+
*/
|
|
76
|
+
cleanupScope(scopeId: string): void;
|
|
77
|
+
/** Whether a scope has any active tracked listeners. */
|
|
78
|
+
hasScope(scopeId: string): boolean;
|
|
79
|
+
/**
|
|
80
|
+
* Dispose the manager, removing ALL tracked listeners across all scopes.
|
|
81
|
+
*
|
|
82
|
+
* After disposal, `addListener()` becomes a no-op. Safe to call multiple
|
|
83
|
+
* times — subsequent calls are no-ops.
|
|
84
|
+
*/
|
|
85
|
+
dispose(): void;
|
|
86
|
+
/** Whether this manager has been disposed. */
|
|
87
|
+
get disposed(): boolean;
|
|
88
|
+
/** Get a diagnostic snapshot of current state. */
|
|
89
|
+
getState(): ListenerLifecycleState;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Hook for registering scope-aware event listeners with automatic cleanup.
|
|
93
|
+
*
|
|
94
|
+
* Returns an `addListener` function that registers listeners through the
|
|
95
|
+
* lifecycle manager. All listeners registered via this hook are automatically
|
|
96
|
+
* removed when the component unmounts or when the scope/manager changes.
|
|
97
|
+
*
|
|
98
|
+
* When no manager is provided (null), listeners are added directly to the
|
|
99
|
+
* target and tracked locally for cleanup on unmount — a safe fallback that
|
|
100
|
+
* still prevents leaks.
|
|
101
|
+
*
|
|
102
|
+
* @param manager Shared lifecycle manager, or null to use local tracking only
|
|
103
|
+
* @param scopeId Scope identifier (typically a node ID)
|
|
104
|
+
*/
|
|
105
|
+
export declare function useNodeListeners(manager: ListenerLifecycleManager | null, scopeId: string): (target: EventTarget, event: string, handler: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions) => void;
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Event listener lifecycle manager for tree node DOM elements.
|
|
3
|
+
*
|
|
4
|
+
* Provides centralized tracking and scope-based cleanup of event listeners
|
|
5
|
+
* registered on per-node DOM elements. Each listener is associated with a
|
|
6
|
+
* "scope" (typically a node ID) so that all listeners for a node can be
|
|
7
|
+
* batch-removed when the node is destroyed or culled off-screen.
|
|
8
|
+
*
|
|
9
|
+
* The manager ensures:
|
|
10
|
+
* - Event listeners are removed when nodes are destroyed (cull or unmount)
|
|
11
|
+
* - No memory leaks from orphaned listeners after tree data changes
|
|
12
|
+
* - Listener count stays proportional to visible nodes
|
|
13
|
+
* - Diagnostic state is available for memory profiling
|
|
14
|
+
*
|
|
15
|
+
* Framework-agnostic core — the Preact hook `useNodeListeners` is provided
|
|
16
|
+
* below for convenient integration with component lifecycles.
|
|
17
|
+
*
|
|
18
|
+
* @see ./prd-tree.ts — PRDTree component that owns the manager instance
|
|
19
|
+
*/
|
|
20
|
+
import { useEffect, useRef, useCallback } from "preact/hooks";
|
|
21
|
+
// ─── ListenerLifecycleManager ────────────────────────────────────────────────
|
|
22
|
+
/**
|
|
23
|
+
* Centralized event listener lifecycle manager.
|
|
24
|
+
*
|
|
25
|
+
* Organizes listeners by scope (node ID). When a node is culled or destroyed,
|
|
26
|
+
* `cleanupScope()` removes all its listeners in one call. On tree unmount,
|
|
27
|
+
* `dispose()` cleans up everything.
|
|
28
|
+
*
|
|
29
|
+
* Usage:
|
|
30
|
+
* ```ts
|
|
31
|
+
* const manager = new ListenerLifecycleManager();
|
|
32
|
+
*
|
|
33
|
+
* // Register a listener tied to a node
|
|
34
|
+
* const cleanup = manager.addListener("node-1", element, "click", handler);
|
|
35
|
+
*
|
|
36
|
+
* // Remove all listeners for a node (e.g. when culled)
|
|
37
|
+
* manager.cleanupScope("node-1");
|
|
38
|
+
*
|
|
39
|
+
* // Tear down on tree unmount
|
|
40
|
+
* manager.dispose();
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
export class ListenerLifecycleManager {
|
|
44
|
+
scopes = new Map();
|
|
45
|
+
_disposed = false;
|
|
46
|
+
/**
|
|
47
|
+
* Register a DOM event listener tied to a scope.
|
|
48
|
+
*
|
|
49
|
+
* The listener is added to the target immediately and tracked. Returns a
|
|
50
|
+
* cleanup function that removes the listener and its tracking entry.
|
|
51
|
+
* The cleanup function is idempotent — safe to call multiple times.
|
|
52
|
+
*
|
|
53
|
+
* After `dispose()`, this method is a no-op and returns a no-op cleanup.
|
|
54
|
+
*/
|
|
55
|
+
addListener(scopeId, target, event, handler, options) {
|
|
56
|
+
if (this._disposed)
|
|
57
|
+
return () => { };
|
|
58
|
+
target.addEventListener(event, handler, options);
|
|
59
|
+
const record = { target, event, handler, options };
|
|
60
|
+
let records = this.scopes.get(scopeId);
|
|
61
|
+
if (!records) {
|
|
62
|
+
records = [];
|
|
63
|
+
this.scopes.set(scopeId, records);
|
|
64
|
+
}
|
|
65
|
+
records.push(record);
|
|
66
|
+
let removed = false;
|
|
67
|
+
return () => {
|
|
68
|
+
if (removed)
|
|
69
|
+
return;
|
|
70
|
+
removed = true;
|
|
71
|
+
target.removeEventListener(event, handler, options);
|
|
72
|
+
const recs = this.scopes.get(scopeId);
|
|
73
|
+
if (recs) {
|
|
74
|
+
const idx = recs.indexOf(record);
|
|
75
|
+
if (idx >= 0)
|
|
76
|
+
recs.splice(idx, 1);
|
|
77
|
+
if (recs.length === 0)
|
|
78
|
+
this.scopes.delete(scopeId);
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Remove all listeners for a given scope and clear its tracking.
|
|
84
|
+
*
|
|
85
|
+
* Called when a node is destroyed or culled off-screen. Safe to call
|
|
86
|
+
* with a scope that doesn't exist (no-op) or after dispose.
|
|
87
|
+
*/
|
|
88
|
+
cleanupScope(scopeId) {
|
|
89
|
+
const records = this.scopes.get(scopeId);
|
|
90
|
+
if (!records)
|
|
91
|
+
return;
|
|
92
|
+
for (const { target, event, handler, options } of records) {
|
|
93
|
+
target.removeEventListener(event, handler, options);
|
|
94
|
+
}
|
|
95
|
+
this.scopes.delete(scopeId);
|
|
96
|
+
}
|
|
97
|
+
/** Whether a scope has any active tracked listeners. */
|
|
98
|
+
hasScope(scopeId) {
|
|
99
|
+
const records = this.scopes.get(scopeId);
|
|
100
|
+
return !!records && records.length > 0;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Dispose the manager, removing ALL tracked listeners across all scopes.
|
|
104
|
+
*
|
|
105
|
+
* After disposal, `addListener()` becomes a no-op. Safe to call multiple
|
|
106
|
+
* times — subsequent calls are no-ops.
|
|
107
|
+
*/
|
|
108
|
+
dispose() {
|
|
109
|
+
if (this._disposed)
|
|
110
|
+
return;
|
|
111
|
+
this._disposed = true;
|
|
112
|
+
for (const records of this.scopes.values()) {
|
|
113
|
+
for (const { target, event, handler, options } of records) {
|
|
114
|
+
target.removeEventListener(event, handler, options);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
this.scopes.clear();
|
|
118
|
+
}
|
|
119
|
+
/** Whether this manager has been disposed. */
|
|
120
|
+
get disposed() {
|
|
121
|
+
return this._disposed;
|
|
122
|
+
}
|
|
123
|
+
/** Get a diagnostic snapshot of current state. */
|
|
124
|
+
getState() {
|
|
125
|
+
let totalListeners = 0;
|
|
126
|
+
for (const records of this.scopes.values()) {
|
|
127
|
+
totalListeners += records.length;
|
|
128
|
+
}
|
|
129
|
+
return {
|
|
130
|
+
totalListeners,
|
|
131
|
+
activeScopeCount: this.scopes.size,
|
|
132
|
+
disposed: this._disposed,
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
// ─── Preact hook ─────────────────────────────────────────────────────────────
|
|
137
|
+
/**
|
|
138
|
+
* Hook for registering scope-aware event listeners with automatic cleanup.
|
|
139
|
+
*
|
|
140
|
+
* Returns an `addListener` function that registers listeners through the
|
|
141
|
+
* lifecycle manager. All listeners registered via this hook are automatically
|
|
142
|
+
* removed when the component unmounts or when the scope/manager changes.
|
|
143
|
+
*
|
|
144
|
+
* When no manager is provided (null), listeners are added directly to the
|
|
145
|
+
* target and tracked locally for cleanup on unmount — a safe fallback that
|
|
146
|
+
* still prevents leaks.
|
|
147
|
+
*
|
|
148
|
+
* @param manager Shared lifecycle manager, or null to use local tracking only
|
|
149
|
+
* @param scopeId Scope identifier (typically a node ID)
|
|
150
|
+
*/
|
|
151
|
+
export function useNodeListeners(manager, scopeId) {
|
|
152
|
+
const cleanupsRef = useRef([]);
|
|
153
|
+
// Cleanup on unmount or scope/manager change.
|
|
154
|
+
useEffect(() => {
|
|
155
|
+
return () => {
|
|
156
|
+
for (const cleanup of cleanupsRef.current)
|
|
157
|
+
cleanup();
|
|
158
|
+
cleanupsRef.current = [];
|
|
159
|
+
};
|
|
160
|
+
}, [manager, scopeId]);
|
|
161
|
+
return useCallback((target, event, handler, options) => {
|
|
162
|
+
if (manager) {
|
|
163
|
+
const cleanup = manager.addListener(scopeId, target, event, handler, options);
|
|
164
|
+
cleanupsRef.current.push(cleanup);
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
// Fallback: track locally without a manager
|
|
168
|
+
target.addEventListener(event, handler, options);
|
|
169
|
+
cleanupsRef.current.push(() => target.removeEventListener(event, handler, options));
|
|
170
|
+
}
|
|
171
|
+
}, [manager, scopeId]);
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=listener-lifecycle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"listener-lifecycle.js","sourceRoot":"","sources":["../../../../src/viewer/components/prd-tree/listener-lifecycle.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Merge preview panel for PRD items.
|
|
3
|
+
*
|
|
4
|
+
* Shows a preview of what will happen when items are consolidated:
|
|
5
|
+
* - Which item survives (the target)
|
|
6
|
+
* - Which items are absorbed (removed)
|
|
7
|
+
* - Combined acceptance criteria, tags, description
|
|
8
|
+
* - Children that will be reparented
|
|
9
|
+
* - Dependencies that will be rewritten
|
|
10
|
+
*
|
|
11
|
+
* Lets the user optionally override the merged title/description
|
|
12
|
+
* before confirming.
|
|
13
|
+
*/
|
|
14
|
+
import type { PRDItemData } from "./types.js";
|
|
15
|
+
export interface MergePreviewProps {
|
|
16
|
+
/** All selected items to merge (must be siblings at the same level). */
|
|
17
|
+
selectedItems: PRDItemData[];
|
|
18
|
+
/** Called after a successful merge (to refresh data). */
|
|
19
|
+
onMergeComplete: () => void;
|
|
20
|
+
/** Called to close the preview without merging. */
|
|
21
|
+
onCancel: () => void;
|
|
22
|
+
}
|
|
23
|
+
export declare function MergePreview({ selectedItems, onMergeComplete, onCancel }: MergePreviewProps): import("preact").VNode<import("preact").ClassAttributes<HTMLElement> & {
|
|
24
|
+
class: string;
|
|
25
|
+
}>;
|