@adoptai/genui-components 0.1.32
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 +56 -0
- package/dist/builders/BuilderForm.d.ts +25 -0
- package/dist/builders/BuilderForm.d.ts.map +1 -0
- package/dist/builders/BuilderRecap.d.ts +12 -0
- package/dist/builders/BuilderRecap.d.ts.map +1 -0
- package/dist/builders/ContextSlot.d.ts +6 -0
- package/dist/builders/ContextSlot.d.ts.map +1 -0
- package/dist/builders/EscalationCard.d.ts +12 -0
- package/dist/builders/EscalationCard.d.ts.map +1 -0
- package/dist/builders/FieldRenderer.d.ts +12 -0
- package/dist/builders/FieldRenderer.d.ts.map +1 -0
- package/dist/builders/FormBuilder.d.ts +13 -0
- package/dist/builders/FormBuilder.d.ts.map +1 -0
- package/dist/builders/StepperBuilder.d.ts +20 -0
- package/dist/builders/StepperBuilder.d.ts.map +1 -0
- package/dist/builders/fields.d.ts +27 -0
- package/dist/builders/fields.d.ts.map +1 -0
- package/dist/builders/hooks.d.ts +22 -0
- package/dist/builders/hooks.d.ts.map +1 -0
- package/dist/builders/index.d.ts +20 -0
- package/dist/builders/index.d.ts.map +1 -0
- package/dist/builders/resolver.d.ts +10 -0
- package/dist/builders/resolver.d.ts.map +1 -0
- package/dist/builders/schemas.d.ts +130 -0
- package/dist/builders/schemas.d.ts.map +1 -0
- package/dist/builders/validateBuilder.d.ts +10 -0
- package/dist/builders/validateBuilder.d.ts.map +1 -0
- package/dist/composites/aging-report/resolver.cjs +339 -0
- package/dist/composites/aging-report/resolver.cjs.map +1 -0
- package/dist/composites/aging-report/resolver.d.ts +3 -0
- package/dist/composites/aging-report/resolver.d.ts.map +1 -0
- package/dist/composites/aging-report/resolver.js +337 -0
- package/dist/composites/aging-report/resolver.js.map +1 -0
- package/dist/composites/alert/resolver.cjs +510 -0
- package/dist/composites/alert/resolver.cjs.map +1 -0
- package/dist/composites/alert/resolver.d.ts +3 -0
- package/dist/composites/alert/resolver.d.ts.map +1 -0
- package/dist/composites/alert/resolver.js +508 -0
- package/dist/composites/alert/resolver.js.map +1 -0
- package/dist/composites/allocation-donut/resolver.cjs +363 -0
- package/dist/composites/allocation-donut/resolver.cjs.map +1 -0
- package/dist/composites/allocation-donut/resolver.d.ts +3 -0
- package/dist/composites/allocation-donut/resolver.d.ts.map +1 -0
- package/dist/composites/allocation-donut/resolver.js +361 -0
- package/dist/composites/allocation-donut/resolver.js.map +1 -0
- package/dist/composites/amortization-table/resolver.cjs +692 -0
- package/dist/composites/amortization-table/resolver.cjs.map +1 -0
- package/dist/composites/amortization-table/resolver.d.ts +3 -0
- package/dist/composites/amortization-table/resolver.d.ts.map +1 -0
- package/dist/composites/amortization-table/resolver.js +690 -0
- package/dist/composites/amortization-table/resolver.js.map +1 -0
- package/dist/composites/area-chart/resolver.cjs +334 -0
- package/dist/composites/area-chart/resolver.cjs.map +1 -0
- package/dist/composites/area-chart/resolver.d.ts +3 -0
- package/dist/composites/area-chart/resolver.d.ts.map +1 -0
- package/dist/composites/area-chart/resolver.js +332 -0
- package/dist/composites/area-chart/resolver.js.map +1 -0
- package/dist/composites/audit-trail/resolver.cjs +564 -0
- package/dist/composites/audit-trail/resolver.cjs.map +1 -0
- package/dist/composites/audit-trail/resolver.d.ts +3 -0
- package/dist/composites/audit-trail/resolver.d.ts.map +1 -0
- package/dist/composites/audit-trail/resolver.js +562 -0
- package/dist/composites/audit-trail/resolver.js.map +1 -0
- package/dist/composites/balance-sheet/resolver.cjs +475 -0
- package/dist/composites/balance-sheet/resolver.cjs.map +1 -0
- package/dist/composites/balance-sheet/resolver.d.ts +3 -0
- package/dist/composites/balance-sheet/resolver.d.ts.map +1 -0
- package/dist/composites/balance-sheet/resolver.js +469 -0
- package/dist/composites/balance-sheet/resolver.js.map +1 -0
- package/dist/composites/bullet-chart/resolver.cjs +300 -0
- package/dist/composites/bullet-chart/resolver.cjs.map +1 -0
- package/dist/composites/bullet-chart/resolver.d.ts +3 -0
- package/dist/composites/bullet-chart/resolver.d.ts.map +1 -0
- package/dist/composites/bullet-chart/resolver.js +298 -0
- package/dist/composites/bullet-chart/resolver.js.map +1 -0
- package/dist/composites/cash-flow-statement/resolver.cjs +757 -0
- package/dist/composites/cash-flow-statement/resolver.cjs.map +1 -0
- package/dist/composites/cash-flow-statement/resolver.d.ts +3 -0
- package/dist/composites/cash-flow-statement/resolver.d.ts.map +1 -0
- package/dist/composites/cash-flow-statement/resolver.js +751 -0
- package/dist/composites/cash-flow-statement/resolver.js.map +1 -0
- package/dist/composites/chart-of-accounts/resolver.cjs +603 -0
- package/dist/composites/chart-of-accounts/resolver.cjs.map +1 -0
- package/dist/composites/chart-of-accounts/resolver.d.ts +3 -0
- package/dist/composites/chart-of-accounts/resolver.d.ts.map +1 -0
- package/dist/composites/chart-of-accounts/resolver.js +601 -0
- package/dist/composites/chart-of-accounts/resolver.js.map +1 -0
- package/dist/composites/cited-answer/resolver.cjs +829 -0
- package/dist/composites/cited-answer/resolver.cjs.map +1 -0
- package/dist/composites/cited-answer/resolver.d.ts +3 -0
- package/dist/composites/cited-answer/resolver.d.ts.map +1 -0
- package/dist/composites/cited-answer/resolver.js +827 -0
- package/dist/composites/cited-answer/resolver.js.map +1 -0
- package/dist/composites/combo-chart/resolver.cjs +402 -0
- package/dist/composites/combo-chart/resolver.cjs.map +1 -0
- package/dist/composites/combo-chart/resolver.d.ts +3 -0
- package/dist/composites/combo-chart/resolver.d.ts.map +1 -0
- package/dist/composites/combo-chart/resolver.js +400 -0
- package/dist/composites/combo-chart/resolver.js.map +1 -0
- package/dist/composites/comparative-bar-chart/resolver.cjs +366 -0
- package/dist/composites/comparative-bar-chart/resolver.cjs.map +1 -0
- package/dist/composites/comparative-bar-chart/resolver.d.ts +3 -0
- package/dist/composites/comparative-bar-chart/resolver.d.ts.map +1 -0
- package/dist/composites/comparative-bar-chart/resolver.js +364 -0
- package/dist/composites/comparative-bar-chart/resolver.js.map +1 -0
- package/dist/composites/compliance-checklist/resolver.cjs +618 -0
- package/dist/composites/compliance-checklist/resolver.cjs.map +1 -0
- package/dist/composites/compliance-checklist/resolver.d.ts +3 -0
- package/dist/composites/compliance-checklist/resolver.d.ts.map +1 -0
- package/dist/composites/compliance-checklist/resolver.js +616 -0
- package/dist/composites/compliance-checklist/resolver.js.map +1 -0
- package/dist/composites/connect-integration/resolver.d.ts +3 -0
- package/dist/composites/connect-integration/resolver.d.ts.map +1 -0
- package/dist/composites/data-table/resolver.cjs +324 -0
- package/dist/composites/data-table/resolver.cjs.map +1 -0
- package/dist/composites/data-table/resolver.d.ts +3 -0
- package/dist/composites/data-table/resolver.d.ts.map +1 -0
- package/dist/composites/data-table/resolver.js +322 -0
- package/dist/composites/data-table/resolver.js.map +1 -0
- package/dist/composites/depreciation-schedule/resolver.cjs +726 -0
- package/dist/composites/depreciation-schedule/resolver.cjs.map +1 -0
- package/dist/composites/depreciation-schedule/resolver.d.ts +3 -0
- package/dist/composites/depreciation-schedule/resolver.d.ts.map +1 -0
- package/dist/composites/depreciation-schedule/resolver.js +724 -0
- package/dist/composites/depreciation-schedule/resolver.js.map +1 -0
- package/dist/composites/document-preview/ExcelViewer.d.ts +8 -0
- package/dist/composites/document-preview/ExcelViewer.d.ts.map +1 -0
- package/dist/composites/document-preview/PdfViewer.d.ts +10 -0
- package/dist/composites/document-preview/PdfViewer.d.ts.map +1 -0
- package/dist/composites/document-preview/resolver.cjs +1036 -0
- package/dist/composites/document-preview/resolver.cjs.map +1 -0
- package/dist/composites/document-preview/resolver.d.ts +3 -0
- package/dist/composites/document-preview/resolver.d.ts.map +1 -0
- package/dist/composites/document-preview/resolver.js +1011 -0
- package/dist/composites/document-preview/resolver.js.map +1 -0
- package/dist/composites/document-preview/useFullscreen.d.ts +8 -0
- package/dist/composites/document-preview/useFullscreen.d.ts.map +1 -0
- package/dist/composites/download-card/resolver.cjs +1831 -0
- package/dist/composites/download-card/resolver.cjs.map +1 -0
- package/dist/composites/download-card/resolver.d.ts +3 -0
- package/dist/composites/download-card/resolver.d.ts.map +1 -0
- package/dist/composites/download-card/resolver.js +1804 -0
- package/dist/composites/download-card/resolver.js.map +1 -0
- package/dist/composites/engagement-pipeline/resolver.cjs +834 -0
- package/dist/composites/engagement-pipeline/resolver.cjs.map +1 -0
- package/dist/composites/engagement-pipeline/resolver.d.ts +3 -0
- package/dist/composites/engagement-pipeline/resolver.d.ts.map +1 -0
- package/dist/composites/engagement-pipeline/resolver.js +828 -0
- package/dist/composites/engagement-pipeline/resolver.js.map +1 -0
- package/dist/composites/entity-card-grid/resolver.cjs +444 -0
- package/dist/composites/entity-card-grid/resolver.cjs.map +1 -0
- package/dist/composites/entity-card-grid/resolver.d.ts +3 -0
- package/dist/composites/entity-card-grid/resolver.d.ts.map +1 -0
- package/dist/composites/entity-card-grid/resolver.js +442 -0
- package/dist/composites/entity-card-grid/resolver.js.map +1 -0
- package/dist/composites/escalation-card/resolver.cjs +359 -0
- package/dist/composites/escalation-card/resolver.cjs.map +1 -0
- package/dist/composites/escalation-card/resolver.d.ts +3 -0
- package/dist/composites/escalation-card/resolver.d.ts.map +1 -0
- package/dist/composites/escalation-card/resolver.js +357 -0
- package/dist/composites/escalation-card/resolver.js.map +1 -0
- package/dist/composites/file-browser/resolver.cjs +440 -0
- package/dist/composites/file-browser/resolver.cjs.map +1 -0
- package/dist/composites/file-browser/resolver.d.ts +3 -0
- package/dist/composites/file-browser/resolver.d.ts.map +1 -0
- package/dist/composites/file-browser/resolver.js +438 -0
- package/dist/composites/file-browser/resolver.js.map +1 -0
- package/dist/composites/flow-canvas/DiagramStreamParser.d.ts +15 -0
- package/dist/composites/flow-canvas/DiagramStreamParser.d.ts.map +1 -0
- package/dist/composites/flow-canvas/ElementStreamParser.d.ts +19 -0
- package/dist/composites/flow-canvas/ElementStreamParser.d.ts.map +1 -0
- package/dist/composites/flow-canvas/ExcalidrawCanvas.d.ts +8 -0
- package/dist/composites/flow-canvas/ExcalidrawCanvas.d.ts.map +1 -0
- package/dist/composites/flow-canvas/FlowGraph.d.ts +11 -0
- package/dist/composites/flow-canvas/FlowGraph.d.ts.map +1 -0
- package/dist/composites/flow-canvas/layoutFlow.d.ts +18 -0
- package/dist/composites/flow-canvas/layoutFlow.d.ts.map +1 -0
- package/dist/composites/flow-canvas/parseMermaidFlow.d.ts +24 -0
- package/dist/composites/flow-canvas/parseMermaidFlow.d.ts.map +1 -0
- package/dist/composites/flow-canvas/resolver.cjs +1295 -0
- package/dist/composites/flow-canvas/resolver.cjs.map +1 -0
- package/dist/composites/flow-canvas/resolver.d.ts +12 -0
- package/dist/composites/flow-canvas/resolver.d.ts.map +1 -0
- package/dist/composites/flow-canvas/resolver.js +1287 -0
- package/dist/composites/flow-canvas/resolver.js.map +1 -0
- package/dist/composites/funnel-chart/resolver.cjs +315 -0
- package/dist/composites/funnel-chart/resolver.cjs.map +1 -0
- package/dist/composites/funnel-chart/resolver.d.ts +3 -0
- package/dist/composites/funnel-chart/resolver.d.ts.map +1 -0
- package/dist/composites/funnel-chart/resolver.js +313 -0
- package/dist/composites/funnel-chart/resolver.js.map +1 -0
- package/dist/composites/gauge-chart/resolver.cjs +294 -0
- package/dist/composites/gauge-chart/resolver.cjs.map +1 -0
- package/dist/composites/gauge-chart/resolver.d.ts +3 -0
- package/dist/composites/gauge-chart/resolver.d.ts.map +1 -0
- package/dist/composites/gauge-chart/resolver.js +292 -0
- package/dist/composites/gauge-chart/resolver.js.map +1 -0
- package/dist/composites/general-ledger/resolver.cjs +543 -0
- package/dist/composites/general-ledger/resolver.cjs.map +1 -0
- package/dist/composites/general-ledger/resolver.d.ts +3 -0
- package/dist/composites/general-ledger/resolver.d.ts.map +1 -0
- package/dist/composites/general-ledger/resolver.js +541 -0
- package/dist/composites/general-ledger/resolver.js.map +1 -0
- package/dist/composites/grouped-table/resolver.cjs +388 -0
- package/dist/composites/grouped-table/resolver.cjs.map +1 -0
- package/dist/composites/grouped-table/resolver.d.ts +3 -0
- package/dist/composites/grouped-table/resolver.d.ts.map +1 -0
- package/dist/composites/grouped-table/resolver.js +386 -0
- package/dist/composites/grouped-table/resolver.js.map +1 -0
- package/dist/composites/heatmap-table/resolver.cjs +380 -0
- package/dist/composites/heatmap-table/resolver.cjs.map +1 -0
- package/dist/composites/heatmap-table/resolver.d.ts +3 -0
- package/dist/composites/heatmap-table/resolver.d.ts.map +1 -0
- package/dist/composites/heatmap-table/resolver.js +378 -0
- package/dist/composites/heatmap-table/resolver.js.map +1 -0
- package/dist/composites/income-statement/resolver.cjs +583 -0
- package/dist/composites/income-statement/resolver.cjs.map +1 -0
- package/dist/composites/income-statement/resolver.d.ts +3 -0
- package/dist/composites/income-statement/resolver.d.ts.map +1 -0
- package/dist/composites/income-statement/resolver.js +577 -0
- package/dist/composites/income-statement/resolver.js.map +1 -0
- package/dist/composites/integrations-list/resolver.d.ts +3 -0
- package/dist/composites/integrations-list/resolver.d.ts.map +1 -0
- package/dist/composites/invoice-detail/resolver.cjs +1086 -0
- package/dist/composites/invoice-detail/resolver.cjs.map +1 -0
- package/dist/composites/invoice-detail/resolver.d.ts +3 -0
- package/dist/composites/invoice-detail/resolver.d.ts.map +1 -0
- package/dist/composites/invoice-detail/resolver.js +1084 -0
- package/dist/composites/invoice-detail/resolver.js.map +1 -0
- package/dist/composites/job-tracker/resolver.cjs +830 -0
- package/dist/composites/job-tracker/resolver.cjs.map +1 -0
- package/dist/composites/job-tracker/resolver.d.ts +3 -0
- package/dist/composites/job-tracker/resolver.d.ts.map +1 -0
- package/dist/composites/job-tracker/resolver.js +828 -0
- package/dist/composites/job-tracker/resolver.js.map +1 -0
- package/dist/composites/journal-entry/resolver.cjs +324 -0
- package/dist/composites/journal-entry/resolver.cjs.map +1 -0
- package/dist/composites/journal-entry/resolver.d.ts +3 -0
- package/dist/composites/journal-entry/resolver.d.ts.map +1 -0
- package/dist/composites/journal-entry/resolver.js +322 -0
- package/dist/composites/journal-entry/resolver.js.map +1 -0
- package/dist/composites/key-value-list/resolver.cjs +708 -0
- package/dist/composites/key-value-list/resolver.cjs.map +1 -0
- package/dist/composites/key-value-list/resolver.d.ts +3 -0
- package/dist/composites/key-value-list/resolver.d.ts.map +1 -0
- package/dist/composites/key-value-list/resolver.js +702 -0
- package/dist/composites/key-value-list/resolver.js.map +1 -0
- package/dist/composites/legal-test-result/resolver.cjs +666 -0
- package/dist/composites/legal-test-result/resolver.cjs.map +1 -0
- package/dist/composites/legal-test-result/resolver.d.ts +3 -0
- package/dist/composites/legal-test-result/resolver.d.ts.map +1 -0
- package/dist/composites/legal-test-result/resolver.js +664 -0
- package/dist/composites/legal-test-result/resolver.js.map +1 -0
- package/dist/composites/line-chart/resolver.cjs +344 -0
- package/dist/composites/line-chart/resolver.cjs.map +1 -0
- package/dist/composites/line-chart/resolver.d.ts +3 -0
- package/dist/composites/line-chart/resolver.d.ts.map +1 -0
- package/dist/composites/line-chart/resolver.js +342 -0
- package/dist/composites/line-chart/resolver.js.map +1 -0
- package/dist/composites/news-feed/resolver.cjs +539 -0
- package/dist/composites/news-feed/resolver.cjs.map +1 -0
- package/dist/composites/news-feed/resolver.d.ts +3 -0
- package/dist/composites/news-feed/resolver.d.ts.map +1 -0
- package/dist/composites/news-feed/resolver.js +537 -0
- package/dist/composites/news-feed/resolver.js.map +1 -0
- package/dist/composites/ops-dashboard/resolver.cjs +430 -0
- package/dist/composites/ops-dashboard/resolver.cjs.map +1 -0
- package/dist/composites/ops-dashboard/resolver.d.ts +3 -0
- package/dist/composites/ops-dashboard/resolver.d.ts.map +1 -0
- package/dist/composites/ops-dashboard/resolver.js +428 -0
- package/dist/composites/ops-dashboard/resolver.js.map +1 -0
- package/dist/composites/pipeline-preview/layout.d.ts +39 -0
- package/dist/composites/pipeline-preview/layout.d.ts.map +1 -0
- package/dist/composites/pipeline-preview/opMeta.d.ts +9 -0
- package/dist/composites/pipeline-preview/opMeta.d.ts.map +1 -0
- package/dist/composites/pipeline-preview/resolver.d.ts +3 -0
- package/dist/composites/pipeline-preview/resolver.d.ts.map +1 -0
- package/dist/composites/provenance-chain/resolver.cjs +797 -0
- package/dist/composites/provenance-chain/resolver.cjs.map +1 -0
- package/dist/composites/provenance-chain/resolver.d.ts +3 -0
- package/dist/composites/provenance-chain/resolver.d.ts.map +1 -0
- package/dist/composites/provenance-chain/resolver.js +795 -0
- package/dist/composites/provenance-chain/resolver.js.map +1 -0
- package/dist/composites/radar-chart/resolver.cjs +323 -0
- package/dist/composites/radar-chart/resolver.cjs.map +1 -0
- package/dist/composites/radar-chart/resolver.d.ts +3 -0
- package/dist/composites/radar-chart/resolver.d.ts.map +1 -0
- package/dist/composites/radar-chart/resolver.js +321 -0
- package/dist/composites/radar-chart/resolver.js.map +1 -0
- package/dist/composites/reconciliation-view/resolver.cjs +917 -0
- package/dist/composites/reconciliation-view/resolver.cjs.map +1 -0
- package/dist/composites/reconciliation-view/resolver.d.ts +3 -0
- package/dist/composites/reconciliation-view/resolver.d.ts.map +1 -0
- package/dist/composites/reconciliation-view/resolver.js +915 -0
- package/dist/composites/reconciliation-view/resolver.js.map +1 -0
- package/dist/composites/scatter-chart/resolver.cjs +357 -0
- package/dist/composites/scatter-chart/resolver.cjs.map +1 -0
- package/dist/composites/scatter-chart/resolver.d.ts +3 -0
- package/dist/composites/scatter-chart/resolver.d.ts.map +1 -0
- package/dist/composites/scatter-chart/resolver.js +355 -0
- package/dist/composites/scatter-chart/resolver.js.map +1 -0
- package/dist/composites/screener-table/resolver.cjs +372 -0
- package/dist/composites/screener-table/resolver.cjs.map +1 -0
- package/dist/composites/screener-table/resolver.d.ts +3 -0
- package/dist/composites/screener-table/resolver.d.ts.map +1 -0
- package/dist/composites/screener-table/resolver.js +370 -0
- package/dist/composites/screener-table/resolver.js.map +1 -0
- package/dist/composites/search-results/resolver.cjs +391 -0
- package/dist/composites/search-results/resolver.cjs.map +1 -0
- package/dist/composites/search-results/resolver.d.ts +3 -0
- package/dist/composites/search-results/resolver.d.ts.map +1 -0
- package/dist/composites/search-results/resolver.js +389 -0
- package/dist/composites/search-results/resolver.js.map +1 -0
- package/dist/composites/sparkline-table/resolver.cjs +361 -0
- package/dist/composites/sparkline-table/resolver.cjs.map +1 -0
- package/dist/composites/sparkline-table/resolver.d.ts +3 -0
- package/dist/composites/sparkline-table/resolver.d.ts.map +1 -0
- package/dist/composites/sparkline-table/resolver.js +359 -0
- package/dist/composites/sparkline-table/resolver.js.map +1 -0
- package/dist/composites/stacked-breakdown/resolver.cjs +397 -0
- package/dist/composites/stacked-breakdown/resolver.cjs.map +1 -0
- package/dist/composites/stacked-breakdown/resolver.d.ts +3 -0
- package/dist/composites/stacked-breakdown/resolver.d.ts.map +1 -0
- package/dist/composites/stacked-breakdown/resolver.js +395 -0
- package/dist/composites/stacked-breakdown/resolver.js.map +1 -0
- package/dist/composites/stat-grid/resolver.cjs +498 -0
- package/dist/composites/stat-grid/resolver.cjs.map +1 -0
- package/dist/composites/stat-grid/resolver.d.ts +3 -0
- package/dist/composites/stat-grid/resolver.d.ts.map +1 -0
- package/dist/composites/stat-grid/resolver.js +496 -0
- package/dist/composites/stat-grid/resolver.js.map +1 -0
- package/dist/composites/status-card/resolver.cjs +593 -0
- package/dist/composites/status-card/resolver.cjs.map +1 -0
- package/dist/composites/status-card/resolver.d.ts +3 -0
- package/dist/composites/status-card/resolver.d.ts.map +1 -0
- package/dist/composites/status-card/resolver.js +591 -0
- package/dist/composites/status-card/resolver.js.map +1 -0
- package/dist/composites/tabs-panel/resolver.cjs +564 -0
- package/dist/composites/tabs-panel/resolver.cjs.map +1 -0
- package/dist/composites/tabs-panel/resolver.d.ts +3 -0
- package/dist/composites/tabs-panel/resolver.d.ts.map +1 -0
- package/dist/composites/tabs-panel/resolver.js +562 -0
- package/dist/composites/tabs-panel/resolver.js.map +1 -0
- package/dist/composites/transaction-feed/resolver.cjs +830 -0
- package/dist/composites/transaction-feed/resolver.cjs.map +1 -0
- package/dist/composites/transaction-feed/resolver.d.ts +3 -0
- package/dist/composites/transaction-feed/resolver.d.ts.map +1 -0
- package/dist/composites/transaction-feed/resolver.js +828 -0
- package/dist/composites/transaction-feed/resolver.js.map +1 -0
- package/dist/composites/treemap-chart/resolver.cjs +323 -0
- package/dist/composites/treemap-chart/resolver.cjs.map +1 -0
- package/dist/composites/treemap-chart/resolver.d.ts +3 -0
- package/dist/composites/treemap-chart/resolver.d.ts.map +1 -0
- package/dist/composites/treemap-chart/resolver.js +321 -0
- package/dist/composites/treemap-chart/resolver.js.map +1 -0
- package/dist/composites/trial-balance/resolver.cjs +359 -0
- package/dist/composites/trial-balance/resolver.cjs.map +1 -0
- package/dist/composites/trial-balance/resolver.d.ts +3 -0
- package/dist/composites/trial-balance/resolver.d.ts.map +1 -0
- package/dist/composites/trial-balance/resolver.js +353 -0
- package/dist/composites/trial-balance/resolver.js.map +1 -0
- package/dist/composites/variance-analysis/resolver.cjs +310 -0
- package/dist/composites/variance-analysis/resolver.cjs.map +1 -0
- package/dist/composites/variance-analysis/resolver.d.ts +3 -0
- package/dist/composites/variance-analysis/resolver.d.ts.map +1 -0
- package/dist/composites/variance-analysis/resolver.js +308 -0
- package/dist/composites/variance-analysis/resolver.js.map +1 -0
- package/dist/composites/waterfall-chart/resolver.cjs +347 -0
- package/dist/composites/waterfall-chart/resolver.cjs.map +1 -0
- package/dist/composites/waterfall-chart/resolver.d.ts +3 -0
- package/dist/composites/waterfall-chart/resolver.d.ts.map +1 -0
- package/dist/composites/waterfall-chart/resolver.js +345 -0
- package/dist/composites/waterfall-chart/resolver.js.map +1 -0
- package/dist/index.cjs +18271 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +52 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +18184 -0
- package/dist/index.js.map +1 -0
- package/dist/renderer.cjs +17092 -0
- package/dist/renderer.cjs.map +1 -0
- package/dist/renderer.d.ts +7 -0
- package/dist/renderer.d.ts.map +1 -0
- package/dist/renderer.js +17064 -0
- package/dist/renderer.js.map +1 -0
- package/dist/resolver.cjs +17061 -0
- package/dist/resolver.cjs.map +1 -0
- package/dist/resolver.d.ts +6 -0
- package/dist/resolver.d.ts.map +1 -0
- package/dist/resolver.js +17033 -0
- package/dist/resolver.js.map +1 -0
- package/dist/schemas/aging-report.d.ts +74 -0
- package/dist/schemas/aging-report.d.ts.map +1 -0
- package/dist/schemas/alert.d.ts +39 -0
- package/dist/schemas/alert.d.ts.map +1 -0
- package/dist/schemas/allocation-donut.d.ts +53 -0
- package/dist/schemas/allocation-donut.d.ts.map +1 -0
- package/dist/schemas/amortization-table.d.ts +102 -0
- package/dist/schemas/amortization-table.d.ts.map +1 -0
- package/dist/schemas/area-chart.d.ts +61 -0
- package/dist/schemas/area-chart.d.ts.map +1 -0
- package/dist/schemas/audit-trail.d.ts +88 -0
- package/dist/schemas/audit-trail.d.ts.map +1 -0
- package/dist/schemas/balance-sheet.d.ts +170 -0
- package/dist/schemas/balance-sheet.d.ts.map +1 -0
- package/dist/schemas/buildRenderUITool.d.ts +7 -0
- package/dist/schemas/buildRenderUITool.d.ts.map +1 -0
- package/dist/schemas/bullet-chart.d.ts +58 -0
- package/dist/schemas/bullet-chart.d.ts.map +1 -0
- package/dist/schemas/cash-flow-statement.d.ts +165 -0
- package/dist/schemas/cash-flow-statement.d.ts.map +1 -0
- package/dist/schemas/chart-of-accounts.d.ts +93 -0
- package/dist/schemas/chart-of-accounts.d.ts.map +1 -0
- package/dist/schemas/cited-answer.d.ts +76 -0
- package/dist/schemas/cited-answer.d.ts.map +1 -0
- package/dist/schemas/coercePayload.d.ts +16 -0
- package/dist/schemas/coercePayload.d.ts.map +1 -0
- package/dist/schemas/combo-chart.d.ts +111 -0
- package/dist/schemas/combo-chart.d.ts.map +1 -0
- package/dist/schemas/comparative-bar-chart.d.ts +83 -0
- package/dist/schemas/comparative-bar-chart.d.ts.map +1 -0
- package/dist/schemas/compliance-checklist.d.ts +91 -0
- package/dist/schemas/compliance-checklist.d.ts.map +1 -0
- package/dist/schemas/connect-integration.d.ts +47 -0
- package/dist/schemas/connect-integration.d.ts.map +1 -0
- package/dist/schemas/data-table.d.ts +63 -0
- package/dist/schemas/data-table.d.ts.map +1 -0
- package/dist/schemas/depreciation-schedule.d.ts +125 -0
- package/dist/schemas/depreciation-schedule.d.ts.map +1 -0
- package/dist/schemas/document-preview.d.ts +128 -0
- package/dist/schemas/document-preview.d.ts.map +1 -0
- package/dist/schemas/download-card.d.ts +62 -0
- package/dist/schemas/download-card.d.ts.map +1 -0
- package/dist/schemas/engagement-pipeline.d.ts +119 -0
- package/dist/schemas/engagement-pipeline.d.ts.map +1 -0
- package/dist/schemas/entity-card-grid.d.ts +101 -0
- package/dist/schemas/entity-card-grid.d.ts.map +1 -0
- package/dist/schemas/escalation-card.d.ts +44 -0
- package/dist/schemas/escalation-card.d.ts.map +1 -0
- package/dist/schemas/file-browser.d.ts +81 -0
- package/dist/schemas/file-browser.d.ts.map +1 -0
- package/dist/schemas/flow-canvas.d.ts +58 -0
- package/dist/schemas/flow-canvas.d.ts.map +1 -0
- package/dist/schemas/funnel-chart.d.ts +53 -0
- package/dist/schemas/funnel-chart.d.ts.map +1 -0
- package/dist/schemas/gauge-chart.d.ts +58 -0
- package/dist/schemas/gauge-chart.d.ts.map +1 -0
- package/dist/schemas/general-ledger.d.ts +120 -0
- package/dist/schemas/general-ledger.d.ts.map +1 -0
- package/dist/schemas/grouped-table.d.ts +101 -0
- package/dist/schemas/grouped-table.d.ts.map +1 -0
- package/dist/schemas/heatmap-table.d.ts +76 -0
- package/dist/schemas/heatmap-table.d.ts.map +1 -0
- package/dist/schemas/income-statement.d.ts +170 -0
- package/dist/schemas/income-statement.d.ts.map +1 -0
- package/dist/schemas/index.cjs +3509 -0
- package/dist/schemas/index.cjs.map +1 -0
- package/dist/schemas/index.d.ts +5030 -0
- package/dist/schemas/index.d.ts.map +1 -0
- package/dist/schemas/index.js +3505 -0
- package/dist/schemas/index.js.map +1 -0
- package/dist/schemas/integrations-list.d.ts +62 -0
- package/dist/schemas/integrations-list.d.ts.map +1 -0
- package/dist/schemas/invoice-detail.d.ts +157 -0
- package/dist/schemas/invoice-detail.d.ts.map +1 -0
- package/dist/schemas/job-tracker.d.ts +114 -0
- package/dist/schemas/job-tracker.d.ts.map +1 -0
- package/dist/schemas/journal-entry.d.ts +90 -0
- package/dist/schemas/journal-entry.d.ts.map +1 -0
- package/dist/schemas/key-value-list.d.ts +108 -0
- package/dist/schemas/key-value-list.d.ts.map +1 -0
- package/dist/schemas/legal-test-result.d.ts +130 -0
- package/dist/schemas/legal-test-result.d.ts.map +1 -0
- package/dist/schemas/line-chart.d.ts +71 -0
- package/dist/schemas/line-chart.d.ts.map +1 -0
- package/dist/schemas/news-feed.d.ts +63 -0
- package/dist/schemas/news-feed.d.ts.map +1 -0
- package/dist/schemas/ops-dashboard.d.ts +92 -0
- package/dist/schemas/ops-dashboard.d.ts.map +1 -0
- package/dist/schemas/pipeline-preview.d.ts +209 -0
- package/dist/schemas/pipeline-preview.d.ts.map +1 -0
- package/dist/schemas/provenance-chain.d.ts +121 -0
- package/dist/schemas/provenance-chain.d.ts.map +1 -0
- package/dist/schemas/radar-chart.d.ts +70 -0
- package/dist/schemas/radar-chart.d.ts.map +1 -0
- package/dist/schemas/reconciliation-view.d.ts +156 -0
- package/dist/schemas/reconciliation-view.d.ts.map +1 -0
- package/dist/schemas/scatter-chart.d.ts +90 -0
- package/dist/schemas/scatter-chart.d.ts.map +1 -0
- package/dist/schemas/screener-table.d.ts +74 -0
- package/dist/schemas/screener-table.d.ts.map +1 -0
- package/dist/schemas/search-results.d.ts +87 -0
- package/dist/schemas/search-results.d.ts.map +1 -0
- package/dist/schemas/sparkline-table.d.ts +74 -0
- package/dist/schemas/sparkline-table.d.ts.map +1 -0
- package/dist/schemas/stacked-breakdown.d.ts +70 -0
- package/dist/schemas/stacked-breakdown.d.ts.map +1 -0
- package/dist/schemas/stat-grid.d.ts +55 -0
- package/dist/schemas/stat-grid.d.ts.map +1 -0
- package/dist/schemas/status-card.d.ts +84 -0
- package/dist/schemas/status-card.d.ts.map +1 -0
- package/dist/schemas/tabs-panel.d.ts +42 -0
- package/dist/schemas/tabs-panel.d.ts.map +1 -0
- package/dist/schemas/transaction-feed.d.ts +82 -0
- package/dist/schemas/transaction-feed.d.ts.map +1 -0
- package/dist/schemas/treemap-chart.d.ts +53 -0
- package/dist/schemas/treemap-chart.d.ts.map +1 -0
- package/dist/schemas/trial-balance.d.ts +85 -0
- package/dist/schemas/trial-balance.d.ts.map +1 -0
- package/dist/schemas/validatePayload.d.ts +10 -0
- package/dist/schemas/validatePayload.d.ts.map +1 -0
- package/dist/schemas/variance-analysis.d.ts +73 -0
- package/dist/schemas/variance-analysis.d.ts.map +1 -0
- package/dist/schemas/waterfall-chart.d.ts +53 -0
- package/dist/schemas/waterfall-chart.d.ts.map +1 -0
- package/dist/shared/ColumnSettingsPanel.d.ts +13 -0
- package/dist/shared/ColumnSettingsPanel.d.ts.map +1 -0
- package/dist/shared/ComponentActions.d.ts +20 -0
- package/dist/shared/ComponentActions.d.ts.map +1 -0
- package/dist/shared/FileCard.d.ts +35 -0
- package/dist/shared/FileCard.d.ts.map +1 -0
- package/dist/shared/Markdown.d.ts +22 -0
- package/dist/shared/Markdown.d.ts.map +1 -0
- package/dist/shared/PreviewModal.d.ts +19 -0
- package/dist/shared/PreviewModal.d.ts.map +1 -0
- package/dist/shared/ThemeContext.d.ts +18 -0
- package/dist/shared/ThemeContext.d.ts.map +1 -0
- package/dist/shared/brandIcons.d.ts +3 -0
- package/dist/shared/brandIcons.d.ts.map +1 -0
- package/dist/shared/downloadCSV.d.ts +5 -0
- package/dist/shared/downloadCSV.d.ts.map +1 -0
- package/dist/shared/fileType.d.ts +19 -0
- package/dist/shared/fileType.d.ts.map +1 -0
- package/dist/shared/theme.d.ts +48 -0
- package/dist/shared/theme.d.ts.map +1 -0
- package/dist/shared/useColumnVisibility.d.ts +13 -0
- package/dist/shared/useColumnVisibility.d.ts.map +1 -0
- package/dist/shared/useSeriesToggle.d.ts +8 -0
- package/dist/shared/useSeriesToggle.d.ts.map +1 -0
- package/dist/shared/viewers/CsvViewer.d.ts +13 -0
- package/dist/shared/viewers/CsvViewer.d.ts.map +1 -0
- package/dist/shared/viewers/DocxViewer.d.ts +8 -0
- package/dist/shared/viewers/DocxViewer.d.ts.map +1 -0
- package/dist/shared/viewers/PreviewHost.d.ts +17 -0
- package/dist/shared/viewers/PreviewHost.d.ts.map +1 -0
- package/dist/shared/viewers/TextViewer.d.ts +13 -0
- package/dist/shared/viewers/TextViewer.d.ts.map +1 -0
- package/dist/shared/viewers/decode.d.ts +14 -0
- package/dist/shared/viewers/decode.d.ts.map +1 -0
- package/dist/tool-definitions.json +4629 -0
- package/dist/types.d.ts +8 -0
- package/dist/types.d.ts.map +1 -0
- package/package.json +110 -0
- package/styles/contract.css +17 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/shared/theme.ts","../../../src/shared/ThemeContext.tsx","../../../src/composites/flow-canvas/parseMermaidFlow.ts","../../../src/composites/flow-canvas/layoutFlow.ts","../../../src/composites/flow-canvas/FlowGraph.tsx","../../../src/shared/ColumnSettingsPanel.tsx","../../../src/shared/ComponentActions.tsx","../../../src/composites/flow-canvas/resolver.tsx"],"names":["jsxs","jsx","useState","useRef","useEffect","_a","useMemo","useCallback","FlowGraph","React","ACCENT","BORDER","MUTED","PAPER"],"mappings":"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","file":"resolver.js","sourcesContent":["export const BORDER = \"#dedede\";\nexport const MUTED = \"#777777\";\nexport const PAPER = \"#f6f6f6\";\nexport const ACCENT = \"#ff5000\";\nexport const ACCENT_SOFT = \"#cc4000\";\nexport const SECONDARY = \"#0364ff\";\n\nexport const ACCOUNT_TYPE_COLORS = {\n asset: { bg: \"#eff6ff\", color: \"#1d4ed8\" },\n liability: { bg: \"#fff7ed\", color: \"#92400e\" },\n equity: { bg: \"#f5f3ff\", color: \"#7c3aed\" },\n revenue: { bg: \"#dcfce7\", color: \"#15803d\" },\n expense: { bg: \"#fef2f2\", color: \"#dc2626\" },\n} as const;\n\nexport const STATUS_COLORS = {\n draft: { bg: \"#fff7ed\", color: \"#92400e\" },\n \"pending-review\": { bg: \"#eff6ff\", color: \"#1d4ed8\" },\n approved: { bg: \"#dcfce7\", color: \"#15803d\" },\n filed: { bg: \"#f5f3ff\", color: \"#7c3aed\" },\n} as const;\n\nexport const CHART_PALETTE = [\n \"#ff5000\",\n \"#0364ff\",\n \"#16a34a\",\n \"#dc2626\",\n \"#7c3aed\",\n \"#0891b2\",\n \"#f59e0b\",\n \"#6366f1\",\n \"#ec4899\",\n \"#84cc16\",\n \"#e11d48\",\n \"#0ea5e9\",\n];\n","\"use client\";\n\nimport React, { createContext, useContext, useMemo } from \"react\";\nimport {\n BORDER,\n MUTED,\n PAPER,\n ACCENT,\n ACCENT_SOFT,\n SECONDARY,\n CHART_PALETTE,\n} from \"./theme\";\n\nexport interface ThemeTokens {\n BORDER: string;\n MUTED: string;\n PAPER: string;\n ACCENT: string;\n ACCENT_SOFT: string;\n SECONDARY: string;\n CHART_PALETTE: string[];\n}\n\nexport const DEFAULT_TOKENS: ThemeTokens = {\n BORDER,\n MUTED,\n PAPER,\n ACCENT,\n ACCENT_SOFT,\n SECONDARY,\n CHART_PALETTE: [...CHART_PALETTE],\n};\n\nconst GenUIThemeContext = createContext<ThemeTokens>(DEFAULT_TOKENS);\n\nexport interface GenUIThemeProviderProps {\n colors?: Partial<ThemeTokens>;\n children: React.ReactNode;\n}\n\nexport function GenUIThemeProvider({ colors, children }: GenUIThemeProviderProps) {\n const merged = useMemo(\n () => (colors ? { ...DEFAULT_TOKENS, ...colors } : DEFAULT_TOKENS),\n [colors]\n );\n return (\n <GenUIThemeContext.Provider value={merged}>\n {children}\n </GenUIThemeContext.Provider>\n );\n}\n\nexport function useTheme(): ThemeTokens {\n return useContext(GenUIThemeContext);\n}\n","/**\n * Lightweight Mermaid flowchart parser.\n * Handles the common subset of `flowchart TD/LR/TB/RL/BT` syntax used in blog posts.\n * Returns null for non-flowchart diagram types (sequenceDiagram, erDiagram, etc.)\n * so the caller can fall back to Mermaid SVG rendering.\n */\n\nexport type NodeShape = 'rect' | 'rounded' | 'diamond' | 'circle' | 'cylinder';\n\nexport interface FlowNode {\n id: string;\n label: string;\n shape: NodeShape;\n}\n\nexport interface FlowEdge {\n source: string;\n target: string;\n label?: string;\n}\n\nexport interface ParsedFlow {\n direction: 'TB' | 'LR' | 'RL' | 'BT';\n nodes: FlowNode[];\n edges: FlowEdge[];\n}\n\n// ── Shape detection ──────────────────────────────────────────────────────────\n//\n// Mermaid node syntax:\n// id[Label] → rect\n// id([Label]) → rounded (stadium)\n// id{Label} → diamond\n// id((Label)) → circle\n// id[(Label)] → cylinder\n// id[[Label]] → subroutine (treat as rect)\n// id>Label] → asymmetric (treat as rect)\n//\n// A bare `id` with no brackets also represents a node.\n\nfunction detectShape(rawNode: string): { id: string; label: string; shape: NodeShape } {\n // cylinder: id[(label)]\n let m = rawNode.match(/^(\\w+)\\[(?:"|\")?([^\\]]*?)(?:"|\")?\\]$/);\n\n // Try each pattern in order of specificity\n const patterns: [RegExp, NodeShape][] = [\n [/^(\\w+)\\[\\((.+?)\\)\\]$/, 'rounded'], // ([label]) — stadium\n [/^(\\w+)\\[\\[(.+?)\\]\\]$/, 'rect'], // [[label]] — subroutine → rect\n [/^(\\w+)\\[\\((.+?)\\)\\]$/, 'rounded'], // [(label)] — cylinder approximation\n [/^(\\w+)\\(\\((.+?)\\)\\)$/, 'circle'], // ((label))\n [/^(\\w+)\\(\\[(.+?)\\]\\)$/, 'rounded'], // ([label])\n [/^(\\w+)\\[(.+?)\\]$/, 'rect'], // [label]\n [/^(\\w+)\\{(.+?)\\}$/, 'diamond'], // {label}\n ];\n\n for (const [re, shape] of patterns) {\n m = rawNode.match(re);\n if (m) return { id: m[1]!, label: unquote(m[2]!), shape };\n }\n\n // cylinder: id[(label)]\n m = rawNode.match(/^(\\w+)\\[\\((.+?)\\)\\]$/);\n if (m) return { id: m[1]!, label: unquote(m[2]!), shape: 'cylinder' };\n\n // bare id — no brackets\n const bare = rawNode.match(/^(\\w+)$/);\n if (bare) return { id: bare[1]!, label: bare[1]!, shape: 'rect' };\n\n // fallback: use the whole thing as id+label\n return { id: rawNode.replace(/\\W/g, '_'), label: rawNode, shape: 'rect' };\n}\n\nfunction unquote(s: string): string {\n return s.replace(/^[\"']|[\"']$/g, '').trim();\n}\n\n// ── Edge / inline node extraction ────────────────────────────────────────────\n//\n// Supported edge patterns:\n// A --> B\n// A[Label] --> B[Label]\n// A -->|edge label| B\n// A ---> B (long arrow, treat same)\n// A --- B (no arrow, treat same)\n\n// Split a line on edge tokens, returning [left, edgeLabel | undefined, right] or null\nfunction splitEdge(line: string): { left: string; right: string; edgeLabel?: string } | null {\n // Arrow with label: A -->|label| B\n let m = line.match(/^(.+?)\\s*--+>\\|([^|]*)\\|\\s*(.+)$/);\n if (m) return { left: m[1]!.trim(), right: m[3]!.trim(), edgeLabel: m[2]!.trim() || undefined };\n\n // Arrow without label: A --> B or A ---> B or A --- B\n m = line.match(/^(.+?)\\s*---*>?\\s+(.+)$/);\n if (m) return { left: m[1]!.trim(), right: m[2]!.trim() };\n\n return null;\n}\n\n// ── Main parser ───────────────────────────────────────────────────────────────\n\nexport function parseMermaidFlow(source: string): ParsedFlow | null {\n const lines = source\n .split('\\n')\n .map(l => l.trim())\n .filter(l => l && !l.startsWith('%%'));\n\n if (!lines.length) return null;\n\n // First non-empty line must be the flowchart header\n const header = lines[0]!.toLowerCase();\n if (!header.startsWith('flowchart') && !header.startsWith('graph')) return null;\n\n const directionMap: Record<string, ParsedFlow['direction']> = {\n td: 'TB', tb: 'TB', lr: 'LR', rl: 'RL', bt: 'BT',\n };\n const dirToken = header.split(/\\s+/)[1]?.toLowerCase() ?? 'td';\n const direction = directionMap[dirToken] ?? 'TB';\n\n const nodeMap = new Map<string, FlowNode>();\n const edges: FlowEdge[] = [];\n\n function ensureNode(raw: string) {\n const parsed = detectShape(raw);\n if (!nodeMap.has(parsed.id)) {\n nodeMap.set(parsed.id, parsed);\n } else if (parsed.label !== parsed.id) {\n // Update label if we have a more specific one\n const existing = nodeMap.get(parsed.id)!;\n if (existing.label === existing.id) {\n nodeMap.set(parsed.id, { ...existing, label: parsed.label, shape: parsed.shape });\n }\n }\n return parsed.id;\n }\n\n let inSubgraph = false;\n\n for (let i = 1; i < lines.length; i++) {\n const line = lines[i]!;\n\n // Skip subgraph declarations and ends (we ignore grouping for now)\n if (line.startsWith('subgraph')) { inSubgraph = true; continue; }\n if (line === 'end') { inSubgraph = false; continue; }\n\n // Check for edge\n const edgeParts = splitEdge(line);\n if (edgeParts) {\n // Expand chained edges: A --> B --> C → two edges\n let parts = [edgeParts.left];\n let rest = edgeParts.right;\n // Keep splitting right side for chained arrows\n let chain = splitEdge(rest);\n while (chain) {\n parts.push(chain.left);\n rest = chain.right;\n chain = splitEdge(rest);\n }\n parts.push(rest);\n\n for (let j = 0; j < parts.length - 1; j++) {\n const srcId = ensureNode(parts[j]!);\n const dstId = ensureNode(parts[j + 1]!);\n edges.push({\n source: srcId,\n target: dstId,\n label: j === 0 ? edgeParts.edgeLabel : undefined,\n });\n }\n continue;\n }\n\n // Standalone node definition (no edge arrow)\n if (line && !line.startsWith('style') && !line.startsWith('classDef') && !line.startsWith('class ')) {\n ensureNode(line);\n }\n }\n\n return {\n direction,\n nodes: Array.from(nodeMap.values()),\n edges,\n };\n}\n","/**\n * Dagre layout pass for Mermaid-parsed flowcharts.\n *\n * After dagre runs we optionally apply a snake (serpentine) transformation:\n * when a graph is too wide / too tall, we fold it into multiple rows that\n * alternate direction (LR → RL → LR …), keeping the flow continuous without\n * requiring the reader to scroll.\n */\n\nimport dagre from '@dagrejs/dagre';\nimport type { Node, Edge } from '@xyflow/react';\nimport type { ParsedFlow } from './parseMermaidFlow';\n\nconst RANK_DIR: Record<ParsedFlow['direction'], string> = {\n TB: 'TB', BT: 'BT', LR: 'LR', RL: 'RL',\n};\n\n// Apply snake when the primary-axis span exceeds this multiple of the\n// secondary-axis span (e.g., a graph 3× wider than it is tall).\nconst SNAKE_RATIO = 2.6;\n\nexport interface LayoutResult {\n nodes: Node[];\n edges: Edge[];\n graphWidth: number;\n graphHeight: number;\n}\n\n// ── Helpers ───────────────────────────────────────────────────────────────────\n\nfunction reverseDir(dir: ParsedFlow['direction']): ParsedFlow['direction'] {\n return dir === 'LR' ? 'RL' : dir === 'RL' ? 'LR' : dir === 'TB' ? 'BT' : 'TB';\n}\n\nfunction measureBounds(nodes: Node[]): { w: number; h: number } {\n let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;\n for (const n of nodes) {\n const x2 = n.position.x + (n.width as number);\n const y2 = n.position.y + (n.height as number);\n if (n.position.x < minX) minX = n.position.x;\n if (n.position.y < minY) minY = n.position.y;\n if (x2 > maxX) maxX = x2;\n if (y2 > maxY) maxY = y2;\n }\n return { w: maxX - minX + 40, h: maxY - minY + 40 };\n}\n\n/**\n * Serpentine / snake layout.\n *\n * Groups nodes by dagre rank (their position on the primary axis), then\n * redistributes them into multiple \"snake rows\" that alternate direction.\n * Each row contains at most `nodesPerRow` ranks. The turn points are\n * naturally at the row boundaries — edges between them route cleanly with\n * ReactFlow's smoothstep algorithm.\n *\n * Also updates each node's `data.direction` so that handles in reversed rows\n * are oriented correctly (target→left, source→right becomes target→right,\n * source→left in RL rows).\n */\nfunction applySnake(\n nodes: Node[],\n direction: ParsedFlow['direction'],\n rowGap: number,\n): void {\n const isHoriz = direction === 'LR' || direction === 'RL';\n // primary axis = the axis dagre laid ranks along\n const primary = (isHoriz ? 'x' : 'y') as 'x' | 'y';\n const secondary = (isHoriz ? 'y' : 'x') as 'x' | 'y';\n\n // ── 1. Group by rank (rounded to avoid float drift) ───────────────────────\n const rankMap = new Map<number, Node[]>();\n for (const n of nodes) {\n const key = Math.round(n.position[primary] / 2) * 2;\n if (!rankMap.has(key)) rankMap.set(key, []);\n rankMap.get(key)!.push(n);\n }\n const ranks = [...rankMap.keys()].sort((a, b) => a - b);\n if (ranks.length <= 5) return; // keep up to 5 in a single row before wrapping\n\n // ── 2. How many ranks per snake-row? ─────────────────────────────────────\n // Show up to 5 across, then fold to the next (reversed) row.\n const nodesPerRow = 5;\n\n // Average spacing between consecutive dagre ranks on the primary axis.\n const primarySpan = ranks[ranks.length - 1] - ranks[0];\n const rankStep = primarySpan / Math.max(ranks.length - 1, 1);\n\n // ── 3. Redistribute node positions ───────────────────────────────────────\n let secondaryOffset = 0; // Y offset for the current snake row (for LR graphs)\n\n for (let rowIdx = 0; rowIdx < Math.ceil(ranks.length / nodesPerRow); rowIdx++) {\n const rowRanks = ranks.slice(rowIdx * nodesPerRow, (rowIdx + 1) * nodesPerRow);\n const isReversed = rowIdx % 2 === 1;\n const rowDir = isReversed ? reverseDir(direction) : direction;\n\n let rowSecondaryMax = secondaryOffset;\n\n for (let colIdx = 0; colIdx < rowRanks.length; colIdx++) {\n const rank = rowRanks[colIdx];\n const rankNodes = rankMap.get(rank)!;\n\n // Snake column: even rows go 0→N, odd rows go N→0.\n const effectiveCol = isReversed ? (nodesPerRow - 1 - colIdx) : colIdx;\n const newPrimary = effectiveCol * rankStep;\n\n // Keep relative secondary positioning within the rank (e.g. stacked branches).\n const minSec = Math.min(...rankNodes.map(n => n.position[secondary]));\n\n for (const n of rankNodes) {\n const secOffset = n.position[secondary] - minSec;\n const newPos = { ...n.position };\n newPos[primary] = newPrimary;\n newPos[secondary] = secondaryOffset + secOffset;\n n.position = newPos;\n\n // Update direction so handles flip on reversed rows.\n n.data = { ...n.data, direction: rowDir };\n\n const nodeSecSize = (isHoriz\n ? (n.height as number)\n : (n.width as number)) || 40;\n rowSecondaryMax = Math.max(rowSecondaryMax,\n secondaryOffset + secOffset + nodeSecSize);\n }\n }\n\n secondaryOffset = rowSecondaryMax + rowGap;\n }\n}\n\n// ── Main export ───────────────────────────────────────────────────────────────\n\nexport function computeLayout(\n flow: ParsedFlow,\n nodeWidth = 148,\n nodeHeight = 40,\n): LayoutResult {\n const g = new dagre.graphlib.Graph();\n g.setDefaultEdgeLabel(() => ({}));\n g.setGraph({\n rankdir: RANK_DIR[flow.direction],\n ranksep: 60,\n nodesep: 40,\n marginx: 20,\n marginy: 20,\n });\n\n for (const node of flow.nodes) {\n const w = node.shape === 'diamond' ? nodeWidth + 40 : nodeWidth;\n const h = node.shape === 'diamond' ? nodeHeight + 24 : nodeHeight;\n g.setNode(node.id, { width: w, height: h });\n }\n for (const edge of flow.edges) {\n g.setEdge(edge.source, edge.target, {});\n }\n\n dagre.layout(g);\n\n // ── Build nodes ───────────────────────────────────────────────────────────\n const nodes: Node[] = flow.nodes.map((n) => {\n const pos = g.node(n.id);\n const w = n.shape === 'diamond' ? nodeWidth + 40 : nodeWidth;\n const h = n.shape === 'diamond' ? nodeHeight + 24 : nodeHeight;\n return {\n id: n.id,\n type: n.shape,\n position: { x: pos.x - w / 2, y: pos.y - h / 2 },\n data: { label: n.label, direction: flow.direction },\n width: w,\n height: h,\n };\n });\n\n // ── Snake transform if graph is too elongated ─────────────────────────────\n const pre = measureBounds(nodes);\n const isHoriz = flow.direction === 'LR' || flow.direction === 'RL';\n const preRatio = isHoriz\n ? pre.w / Math.max(pre.h, 1)\n : pre.h / Math.max(pre.w, 1);\n\n if (preRatio > SNAKE_RATIO && nodes.length > 4) {\n applySnake(nodes, flow.direction, 60);\n }\n\n // ── Measure final bounding box ────────────────────────────────────────────\n const { w: graphWidth, h: graphHeight } = measureBounds(nodes);\n\n // ── Build edges ───────────────────────────────────────────────────────────\n const edges: Edge[] = flow.edges.map((e, i) => ({\n id: `e-${e.source}-${e.target}-${i}`,\n source: e.source,\n target: e.target,\n label: e.label,\n type: 'smoothstep',\n style: { stroke: '#c93d1e', strokeWidth: 1.75 },\n labelStyle: {\n fill: '#6b6b6b',\n fontSize: 10,\n fontFamily: 'Plus Jakarta Sans, system-ui, sans-serif',\n },\n labelBgStyle: { fill: '#f8f8f7', fillOpacity: 0.92 },\n labelBgPadding: [3, 5] as [number, number],\n markerEnd: {\n type: 'arrowclosed' as const,\n color: '#c93d1e',\n width: 16,\n height: 16,\n },\n }));\n\n return { nodes, edges, graphWidth, graphHeight };\n}\n","\"use client\";\n\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport {\n ReactFlow,\n Background,\n BackgroundVariant,\n Handle,\n Position,\n useNodesState,\n useEdgesState,\n useReactFlow,\n ReactFlowProvider,\n type NodeProps,\n type Node,\n type Edge,\n} from \"@xyflow/react\";\nimport \"@xyflow/react/dist/style.css\";\nimport { useTheme, type ThemeTokens } from \"../../shared/ThemeContext\";\nimport { parseMermaidFlow } from \"./parseMermaidFlow\";\nimport { computeLayout } from \"./layoutFlow\";\n\n// Tokens reach the custom nodes (rendered by React Flow, outside our JSX tree)\n// via CSS variables set on the wrapper — this keeps `nodeTypes` a stable module\n// constant, which React Flow requires.\nfunction themeVars(t: ThemeTokens): React.CSSProperties {\n return {\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n [\"--gx-accent\" as string]: t.ACCENT,\n [\"--gx-border\" as string]: t.BORDER,\n [\"--gx-muted\" as string]: t.MUTED,\n [\"--gx-bg\" as string]: \"#ffffff\",\n [\"--gx-bg-subtle\" as string]: t.PAPER,\n [\"--gx-text\" as string]: \"var(--foreground)\",\n [\"--gx-outline\" as string]: \"var(--foreground)\",\n [\"--gx-font\" as string]: \"var(--font-sans, Figtree, system-ui, sans-serif)\",\n } as React.CSSProperties;\n}\n\ntype Dir = \"TB\" | \"BT\" | \"LR\" | \"RL\";\n\nconst hDot: React.CSSProperties = {\n width: 8,\n height: 8,\n background: \"var(--gx-accent)\",\n border: \"2px solid var(--gx-bg)\",\n borderRadius: \"50%\",\n};\n\nfunction Handles({ dir }: { dir?: Dir }) {\n switch (dir) {\n case \"BT\":\n return (\n <>\n <Handle type=\"target\" position={Position.Bottom} style={hDot} />\n <Handle type=\"source\" position={Position.Top} style={hDot} />\n </>\n );\n case \"LR\":\n return (\n <>\n <Handle type=\"target\" position={Position.Left} style={hDot} />\n <Handle type=\"source\" position={Position.Right} style={hDot} />\n </>\n );\n case \"RL\":\n return (\n <>\n <Handle type=\"target\" position={Position.Right} style={hDot} />\n <Handle type=\"source\" position={Position.Left} style={hDot} />\n </>\n );\n default:\n return (\n <>\n <Handle type=\"target\" position={Position.Top} style={hDot} />\n <Handle type=\"source\" position={Position.Bottom} style={hDot} />\n </>\n );\n }\n}\n\ntype Status = \"pending\" | \"active\" | \"done\" | \"error\";\n\n// Per-status styling is class-driven (keyframes can't live in inline styles).\n// The classes override border/background and pulse, with smooth transitions so an\n// in-place state change visibly \"paints\" the next stage.\nconst FLOW_ANIM_CSS = `\n.gx-flow-node{transition:opacity .3s ease,box-shadow .35s ease,border-color .3s ease,background-color .3s ease;}\n.gx-flow-pending{opacity:.45;}\n.gx-flow-active{border-color:var(--gx-accent)!important;background-color:color-mix(in srgb,var(--gx-accent) 9%,#fff)!important;animation:gxFlowPulse 1.5s ease-in-out infinite;}\n.gx-flow-done{border-color:var(--gx-accent)!important;background-color:color-mix(in srgb,var(--gx-accent) 15%,#fff)!important;}\n.gx-flow-error{border-color:#dc2626!important;background-color:#fdecec!important;}\n.gx-flow-poly{transition:stroke .3s ease,fill .3s ease;}\n.gx-flow-active .gx-flow-poly{stroke:var(--gx-accent);fill:color-mix(in srgb,var(--gx-accent) 9%,#fff);}\n.gx-flow-done .gx-flow-poly{stroke:var(--gx-accent);fill:color-mix(in srgb,var(--gx-accent) 15%,#fff);}\n.gx-done-badge{position:absolute;top:-7px;right:-7px;width:15px;height:15px;border-radius:50%;background:var(--gx-accent);color:#fff;display:flex;align-items:center;justify-content:center;z-index:3;box-shadow:0 1px 2px rgba(0,0,0,.2);}\n@keyframes gxFlowPulse{0%,100%{box-shadow:0 0 0 0 color-mix(in srgb,var(--gx-accent) 50%,transparent);}50%{box-shadow:0 0 0 7px color-mix(in srgb,var(--gx-accent) 0%,transparent);}}\n@media (prefers-reduced-motion: reduce){.gx-flow-active{animation:none;}}\n`;\n\nfunction nodeClass(status?: Status): string {\n return \"gx-flow-node\" + (status ? ` gx-flow-${status}` : \"\");\n}\n\nfunction DoneBadge() {\n return (\n <span className=\"gx-done-badge\" aria-hidden=\"true\">\n <svg width=\"9\" height=\"9\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"4\" strokeLinecap=\"round\" strokeLinejoin=\"round\"><path d=\"M20 6 9 17l-5-5\" /></svg>\n </span>\n );\n}\n\nconst nodeBase: React.CSSProperties = {\n position: \"relative\",\n background: \"var(--gx-bg)\",\n color: \"var(--gx-text)\",\n border: \"1.5px solid var(--gx-outline)\",\n fontFamily: \"var(--gx-font)\",\n fontSize: \"12px\",\n fontWeight: 500,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n textAlign: \"center\",\n padding: \"8px 14px\",\n width: \"100%\",\n height: \"100%\",\n boxSizing: \"border-box\",\n userSelect: \"none\",\n lineHeight: 1.3,\n};\n\nfunction RectNode({ data }: NodeProps) {\n const s = data.status as Status | undefined;\n return (\n <div className={nodeClass(s)} style={{ ...nodeBase, borderRadius: \"6px\" }}>\n <Handles dir={data.direction as Dir} />\n {s === \"done\" && <DoneBadge />}\n {String(data.label ?? \"\")}\n </div>\n );\n}\n\nfunction RoundedNode({ data }: NodeProps) {\n const s = data.status as Status | undefined;\n return (\n <div className={nodeClass(s)} style={{ ...nodeBase, borderRadius: \"999px\" }}>\n <Handles dir={data.direction as Dir} />\n {s === \"done\" && <DoneBadge />}\n {String(data.label ?? \"\")}\n </div>\n );\n}\n\nfunction CircleNode({ data }: NodeProps) {\n const s = data.status as Status | undefined;\n return (\n <div className={nodeClass(s)} style={{ ...nodeBase, borderRadius: \"50%\", padding: \"6px\" }}>\n <Handles dir={data.direction as Dir} />\n {s === \"done\" && <DoneBadge />}\n {String(data.label ?? \"\")}\n </div>\n );\n}\n\nfunction DiamondNode({ data }: NodeProps) {\n const s = data.status as Status | undefined;\n return (\n <div className={nodeClass(s)} style={{ position: \"relative\", width: \"100%\", height: \"100%\", display: \"flex\", alignItems: \"center\", justifyContent: \"center\", border: \"none\", background: \"transparent\" }}>\n <Handles dir={data.direction as Dir} />\n {s === \"done\" && <DoneBadge />}\n <svg style={{ position: \"absolute\", inset: 0, width: \"100%\", height: \"100%\", overflow: \"visible\" }} viewBox=\"0 0 1 1\" preserveAspectRatio=\"none\">\n <polygon className=\"gx-flow-poly\" points=\"0.5,0.03 0.97,0.5 0.5,0.97 0.03,0.5\" fill=\"var(--gx-bg)\" stroke=\"var(--gx-outline)\" strokeWidth=\"1.5\" vectorEffect=\"non-scaling-stroke\" />\n </svg>\n <span style={{ position: \"relative\", zIndex: 1, fontFamily: \"var(--gx-font)\", fontSize: \"11px\", fontWeight: 500, color: \"var(--gx-text)\", textAlign: \"center\", lineHeight: 1.25, userSelect: \"none\", padding: \"0 22px\", maxWidth: \"100%\" }}>\n {String(data.label ?? \"\")}\n </span>\n </div>\n );\n}\n\nfunction CylinderNode({ data }: NodeProps) {\n const a = 5;\n const s = data.status as Status | undefined;\n return (\n <div className={nodeClass(s)} style={{ position: \"relative\", width: \"100%\", height: \"100%\", border: \"none\", background: \"transparent\" }}>\n <Handles dir={data.direction as Dir} />\n {s === \"done\" && <DoneBadge />}\n <div style={{ position: \"absolute\", top: 0, left: 0, right: 0, height: a * 2, border: \"1.5px solid var(--gx-outline)\", borderRadius: \"50%\", background: \"var(--gx-bg)\", zIndex: 1 }} />\n <div style={{ position: \"absolute\", inset: `${a}px 0`, border: \"1.5px solid var(--gx-outline)\", borderTop: \"none\", borderBottom: \"none\", background: \"var(--gx-bg)\", display: \"flex\", alignItems: \"center\", justifyContent: \"center\", fontFamily: \"var(--gx-font)\", fontSize: \"12px\", fontWeight: 500, color: \"var(--gx-text)\" }}>\n {String(data.label ?? \"\")}\n </div>\n <div style={{ position: \"absolute\", bottom: 0, left: 0, right: 0, height: a * 2, border: \"1.5px solid var(--gx-outline)\", borderRadius: \"50%\", background: \"var(--gx-bg)\", zIndex: 1 }} />\n </div>\n );\n}\n\nconst nodeTypes = {\n rect: RectNode,\n rounded: RoundedNode,\n circle: CircleNode,\n diamond: DiamondNode,\n cylinder: CylinderNode,\n};\n\n// ── Pill button ─────────────────────────────────────────────────────────────\nconst pillStyle: React.CSSProperties = {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"5px\",\n height: \"26px\",\n padding: \"0 10px\",\n background: \"rgba(255,255,255,0.9)\",\n backdropFilter: \"blur(10px)\",\n WebkitBackdropFilter: \"blur(10px)\",\n border: \"1px solid var(--gx-border)\",\n borderRadius: \"100px\",\n cursor: \"pointer\",\n color: \"var(--gx-muted)\",\n fontSize: \"11px\",\n fontFamily: \"var(--gx-font)\",\n fontWeight: 500,\n boxShadow: \"0 1px 3px rgba(0,0,0,0.07)\",\n transition: \"background 0.12s, color 0.12s\",\n};\nconst onEnter = (e: React.MouseEvent<HTMLButtonElement>) => { e.currentTarget.style.background = \"var(--gx-bg)\"; e.currentTarget.style.color = \"var(--gx-text)\"; };\nconst onLeave = (e: React.MouseEvent<HTMLButtonElement>) => { e.currentTarget.style.background = \"rgba(255,255,255,0.9)\"; e.currentTarget.style.color = \"var(--gx-muted)\"; };\n\nconst ExpandIcon = () => <svg width=\"11\" height=\"11\" viewBox=\"0 0 11 11\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\"><path d=\"M1 4V1h3M7 1h3v3M10 7v3H7M4 10H1V7\" /></svg>;\nconst CloseIcon = () => <svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\"><line x1=\"1\" y1=\"1\" x2=\"9\" y2=\"9\" /><line x1=\"9\" y1=\"1\" x2=\"1\" y2=\"9\" /></svg>;\n\nfunction FitBtn() {\n const { fitView } = useReactFlow();\n return (\n <button style={pillStyle} onClick={() => fitView({ padding: 0.1, duration: 300 })} onMouseEnter={onEnter} onMouseLeave={onLeave}>\n <svg width=\"11\" height=\"11\" viewBox=\"0 0 11 11\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\"><path d=\"M1 4V1h3M7 1h3v3M10 7v3H7M4 10H1V7\" /></svg>\n <span>Fit</span>\n </button>\n );\n}\n\n// ── Aspect-derived display height ─────────────────────────────────────────────\n// Height tracks the laid-out graph's natural aspect ratio against the measured\n// container width, clamped to a readable band. Keeps short graphs short and\n// snake-folded graphs compact instead of a tall thin column.\nfunction idealHeight(boxW: number, graphWidth: number, graphHeight: number): number {\n if (!graphWidth || !graphHeight || !boxW) return 300;\n const ratio = graphWidth / graphHeight;\n const h = Math.round(boxW / ratio);\n return Math.max(220, Math.min(480, h));\n}\n\n// ── Mermaid fallback (sequence / ER / class — anything parseMermaidFlow rejects)\nlet mermaidReady = false;\nlet mermaidSig = \"\";\nlet renderSeq = 0;\nasync function getMermaid(t: ThemeTokens) {\n const m = (await import(\"mermaid\")).default;\n const sig = `${t.ACCENT}|${t.BORDER}|${t.PAPER}|${t.MUTED}`;\n if (!mermaidReady || mermaidSig !== sig) {\n m.initialize({\n startOnLoad: false,\n logLevel: 5,\n theme: \"base\",\n themeVariables: {\n primaryColor: \"#ffffff\",\n primaryBorderColor: \"#171717\",\n primaryTextColor: \"#171717\",\n mainBkg: \"#ffffff\",\n nodeBorder: \"#171717\",\n lineColor: t.ACCENT,\n secondaryColor: t.PAPER,\n clusterBkg: t.PAPER,\n clusterBorder: t.BORDER,\n noteBkgColor: t.PAPER,\n noteBorderColor: t.BORDER,\n actorLineColor: t.ACCENT,\n loopTextColor: t.MUTED,\n fontFamily: \"Figtree, system-ui, sans-serif\",\n fontSize: \"12px\",\n },\n });\n mermaidReady = true;\n mermaidSig = sig;\n }\n return m;\n}\nfunction MermaidFallback({ diagram, title }: { diagram: string; title?: string }) {\n const tokens = useTheme();\n const [svg, setSvg] = useState(\"\");\n const [err, setErr] = useState(false);\n const [full, setFull] = useState(false);\n const idRef = useRef(0);\n useEffect(() => {\n const id = ++renderSeq;\n idRef.current = id;\n setErr(false);\n (async () => {\n try {\n const m = await getMermaid(tokens);\n if (idRef.current !== id) return;\n const { svg: out } = await m.render(`gx-mm-${id}`, diagram);\n if (idRef.current !== id) return;\n setSvg(out);\n } catch {\n if (idRef.current === id) setErr(true);\n }\n })();\n }, [diagram, tokens]);\n\n if (err) {\n return (\n <div style={{ height: \"100%\", overflow: \"auto\", padding: 20, fontSize: 12, fontFamily: \"var(--font-sans)\", display: \"flex\", flexDirection: \"column\", gap: 8 }}>\n <span style={{ color: tokens.ACCENT, fontWeight: 500 }}>Diagram syntax error</span>\n <pre style={{ fontSize: 11, background: \"#ffffff\", border: `1px solid ${tokens.BORDER}`, borderRadius: 6, padding: \"10px 12px\", overflowX: \"auto\", whiteSpace: \"pre-wrap\", wordBreak: \"break-word\", color: \"var(--foreground)\", margin: 0 }}>{diagram}</pre>\n </div>\n );\n }\n if (!svg) {\n return <div style={{ height: \"100%\", display: \"flex\", alignItems: \"center\", justifyContent: \"center\", color: tokens.MUTED, fontSize: 11, fontFamily: \"var(--font-sans)\", letterSpacing: \"0.06em\", textTransform: \"uppercase\" }}>rendering</div>;\n }\n return (\n <div style={{ position: \"relative\", height: \"100%\", overflow: \"auto\" }}>\n <div className=\"mermaid-output\" dangerouslySetInnerHTML={{ __html: svg }} />\n <button style={{ ...pillStyle, position: \"absolute\", top: 10, right: 10, zIndex: 10 }} onClick={() => setFull(true)} onMouseEnter={onEnter} onMouseLeave={onLeave}>\n <ExpandIcon /><span>Expand</span>\n </button>\n {full && typeof document !== \"undefined\" && createPortal(\n <div style={{ ...themeVars(tokens), position: \"fixed\", inset: 0, zIndex: 9999, background: \"rgba(23,23,23,0.55)\", display: \"flex\", alignItems: \"center\", justifyContent: \"center\", backdropFilter: \"blur(6px)\", WebkitBackdropFilter: \"blur(6px)\" }} onClick={(e) => { if (e.target === e.currentTarget) setFull(false); }}>\n <div style={{ background: \"#ffffff\", borderRadius: 10, border: `1px solid ${tokens.BORDER}`, boxShadow: \"0 8px 32px rgba(23,23,23,0.12)\", width: \"min(92vw,1280px)\", height: \"min(88vh,960px)\", display: \"flex\", flexDirection: \"column\", overflow: \"hidden\" }}>\n <div style={{ padding: \"8px 12px\", borderBottom: `1px solid ${tokens.BORDER}`, display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\", background: tokens.PAPER }}>\n <span style={{ fontFamily: \"var(--font-sans)\", fontSize: 12, color: tokens.MUTED }}>{title ?? \"Diagram\"}</span>\n <button style={{ ...pillStyle, color: tokens.ACCENT }} onClick={() => setFull(false)}><CloseIcon /><span>Close</span></button>\n </div>\n <div style={{ flex: 1, overflow: \"auto\", display: \"flex\", alignItems: \"center\", justifyContent: \"center\", padding: 32 }}>\n <div dangerouslySetInnerHTML={{ __html: svg }} style={{ maxWidth: \"100%\" }} />\n </div>\n </div>\n </div>,\n document.body,\n )}\n </div>\n );\n}\n\n// ── Fullscreen modal (React Flow — own provider so it doesn't share store) ────\nfunction FullscreenModalInner({ nodes, edges, title, onClose }: { nodes: Node[]; edges: Edge[]; title?: string; onClose: () => void }) {\n const tokens = useTheme();\n const [n, , onNC] = useNodesState(nodes);\n const [e, , onEC] = useEdgesState(edges);\n return (\n <div style={{ ...themeVars(tokens), position: \"fixed\", inset: 0, zIndex: 9999, background: \"rgba(23,23,23,0.55)\", display: \"flex\", alignItems: \"center\", justifyContent: \"center\", backdropFilter: \"blur(6px)\", WebkitBackdropFilter: \"blur(6px)\" }} onClick={(ev) => { if (ev.target === ev.currentTarget) onClose(); }}>\n <div style={{ background: \"#ffffff\", borderRadius: \"10px\", border: `1px solid ${tokens.BORDER}`, boxShadow: \"0 8px 32px rgba(23,23,23,0.12)\", width: \"min(92vw,1280px)\", height: \"min(88vh,960px)\", display: \"flex\", flexDirection: \"column\", overflow: \"hidden\" }}>\n <div style={{ padding: \"8px 12px\", borderBottom: `1px solid ${tokens.BORDER}`, display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\", background: tokens.PAPER, flexShrink: 0 }}>\n <span style={{ fontFamily: \"var(--font-sans)\", fontSize: \"12px\", color: tokens.MUTED }}>{title ?? \"Diagram\"}</span>\n <div style={{ display: \"flex\", gap: \"6px\" }}>\n <FitBtn />\n <button style={{ ...pillStyle, color: tokens.ACCENT }} onClick={onClose}><CloseIcon /><span>Close</span></button>\n </div>\n </div>\n <div style={{ flex: 1, position: \"relative\" }}>\n <ReactFlow nodes={n} edges={e} nodeTypes={nodeTypes} onNodesChange={onNC} onEdgesChange={onEC} fitView fitViewOptions={{ padding: 0.1 }} nodesDraggable={false} nodesConnectable={false} elementsSelectable={false} panOnDrag zoomOnScroll minZoom={0.15} maxZoom={4} proOptions={{ hideAttribution: true }} style={{ background: tokens.PAPER, width: \"100%\", height: \"100%\" }}>\n <Background variant={BackgroundVariant.Dots} gap={20} size={1} color={tokens.BORDER} />\n </ReactFlow>\n </div>\n </div>\n </div>\n );\n}\n\nfunction FullscreenModal({ nodes, edges, title, onClose }: { nodes: Node[]; edges: Edge[]; title?: string; onClose: () => void }) {\n useEffect(() => {\n const h = (e: KeyboardEvent) => { if (e.key === \"Escape\") onClose(); };\n window.addEventListener(\"keydown\", h);\n return () => window.removeEventListener(\"keydown\", h);\n }, [onClose]);\n return createPortal(\n <ReactFlowProvider>\n <FullscreenModalInner nodes={nodes} edges={edges} title={title} onClose={onClose} />\n </ReactFlowProvider>,\n document.body,\n );\n}\n\n// ── Animation helpers ────────────────────────────────────────────────────────\nfunction usePrefersReducedMotion(): boolean {\n const [reduced, setReduced] = useState(false);\n useEffect(() => {\n if (typeof matchMedia === \"undefined\") return;\n const mq = matchMedia(\"(prefers-reduced-motion: reduce)\");\n setReduced(mq.matches);\n const h = () => setReduced(mq.matches);\n mq.addEventListener?.(\"change\", h);\n return () => mq.removeEventListener?.(\"change\", h);\n }, []);\n return reduced;\n}\n\n// Topological order of node ids (Kahn); leftovers (cycles) appended in input order.\nfunction topoOrder(nodeIds: string[], edges: { source: string; target: string }[]): string[] {\n const indeg = new Map<string, number>(nodeIds.map((id) => [id, 0]));\n const adj = new Map<string, string[]>(nodeIds.map((id) => [id, []]));\n for (const e of edges) {\n if (!indeg.has(e.target) || !adj.has(e.source)) continue;\n indeg.set(e.target, (indeg.get(e.target) ?? 0) + 1);\n adj.get(e.source)!.push(e.target);\n }\n const queue = nodeIds.filter((id) => (indeg.get(id) ?? 0) === 0);\n const seen = new Set<string>();\n const order: string[] = [];\n while (queue.length) {\n const id = queue.shift() as string;\n if (seen.has(id)) continue;\n seen.add(id);\n order.push(id);\n for (const t of adj.get(id) ?? []) {\n indeg.set(t, (indeg.get(t) ?? 1) - 1);\n if ((indeg.get(t) ?? 0) <= 0 && !seen.has(t)) queue.push(t);\n }\n }\n for (const id of nodeIds) if (!seen.has(id)) order.push(id);\n return order;\n}\n\n// Walk the graph: each tick advances the active node (prior=done), holds on\n// all-done, then loops. Disabled under reduced-motion.\nfunction useAutoplay(order: string[], enabled: boolean): Record<string, Status> {\n const reduced = usePrefersReducedMotion();\n const [step, setStep] = useState(0);\n const key = order.join(\"|\");\n useEffect(() => {\n if (!enabled || reduced || order.length === 0) { setStep(0); return; }\n let s = 0;\n setStep(0);\n let timer: ReturnType<typeof setTimeout>;\n const tick = () => {\n s += 1;\n if (s > order.length) { s = 0; setStep(0); timer = setTimeout(tick, 850); return; }\n setStep(s);\n timer = setTimeout(tick, s === order.length ? 1100 : 850);\n };\n timer = setTimeout(tick, 850);\n return () => clearTimeout(timer);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [enabled, reduced, key]);\n return useMemo(() => {\n const m: Record<string, Status> = {};\n order.forEach((id, i) => { m[id] = i < step ? \"done\" : i === step ? \"active\" : \"pending\"; });\n if (step >= order.length) order.forEach((id) => (m[id] = \"done\"));\n return m;\n }, [order, step]);\n}\n\n// Resolve explicit per-node states keyed by node id OR label.\nfunction resolveStates(\n nodes: Node[],\n nodeStates?: Record<string, Status>\n): Record<string, Status> {\n if (!nodeStates) return {};\n const m: Record<string, Status> = {};\n for (const n of nodes) {\n const label = (n.data as { label?: string } | undefined)?.label;\n const st = nodeStates[n.id] ?? (label ? nodeStates[label] : undefined);\n if (st) m[n.id] = st;\n }\n return m;\n}\n\n// ── Main inner component (inside ReactFlowProvider) ──────────────────────────\ninterface FlowGraphProps {\n diagram: string;\n title?: string;\n autoplay?: boolean;\n nodeStates?: Record<string, Status>;\n}\n\nfunction Inner({ diagram, title, autoplay, nodeStates }: FlowGraphProps) {\n const tokens = useTheme();\n const [full, setFull] = useState(false);\n const [focused, setFocused] = useState(false);\n const [boxW, setBoxW] = useState(640);\n const containerRef = useRef<HTMLDivElement>(null);\n\n const parsed = useMemo(() => parseMermaidFlow(diagram), [diagram]);\n const layout = useMemo(() => (parsed ? computeLayout(parsed) : null), [parsed]);\n\n // computeLayout (ported verbatim) bakes the reference's own edge colors —\n // re-theme them here where the platform tokens are available.\n const themedEdges = useMemo<Edge[]>(\n () =>\n (layout?.edges ?? []).map((e) => ({\n ...e,\n style: { ...e.style, stroke: tokens.ACCENT, strokeWidth: 1.75 },\n labelStyle: { fill: tokens.MUTED, fontSize: 10, fontFamily: \"var(--font-sans, Figtree, system-ui, sans-serif)\" },\n labelBgStyle: { fill: \"#ffffff\", fillOpacity: 0.92 },\n markerEnd: { type: \"arrowclosed\" as const, color: tokens.ACCENT, width: 12, height: 12 },\n })),\n [layout, tokens.ACCENT, tokens.MUTED]\n );\n\n // Per-node run status: autoplay walker (demo) or explicit nodeStates (live data).\n const order = useMemo(\n () => topoOrder((layout?.nodes ?? []).map((n) => n.id), layout?.edges ?? []),\n [layout]\n );\n const autoStatus = useAutoplay(order, !!autoplay);\n const staticStatus = useMemo(() => resolveStates(layout?.nodes ?? [], nodeStates), [layout, nodeStates]);\n const statusMap = autoplay ? autoStatus : staticStatus;\n\n // Apply status to nodes (data.status drives styling) and edges (flowing/dim).\n const displayNodes = useMemo<Node[]>(\n () => (layout?.nodes ?? []).map((n) => ({ ...n, data: { ...n.data, status: statusMap[n.id] } })),\n [layout, statusMap]\n );\n const displayEdges = useMemo<Edge[]>(\n () =>\n themedEdges.map((e) => {\n const ss = statusMap[e.source];\n const ts = statusMap[e.target];\n const flowing = ss === \"done\" && ts === \"active\";\n const bothDone = ss === \"done\" && ts === \"done\";\n const anyStatus = !!(ss || ts);\n const lit = flowing || bothDone;\n const stroke = lit || !anyStatus ? tokens.ACCENT : tokens.BORDER;\n return {\n ...e,\n animated: flowing,\n style: { ...e.style, stroke, strokeWidth: flowing ? 2.25 : 1.75, opacity: anyStatus && !lit ? 0.5 : 1, transition: \"stroke 0.3s ease, opacity 0.3s ease\" },\n markerEnd: { type: \"arrowclosed\" as const, color: stroke, width: 12, height: 12 },\n };\n }),\n [themedEdges, statusMap, tokens.ACCENT, tokens.BORDER]\n );\n\n const [nodes, setNodes, onNC] = useNodesState(displayNodes);\n const [edges, setEdges, onEC] = useEdgesState(displayEdges);\n const rf = useReactFlow();\n\n // Push status-updated nodes/edges into React Flow (every tick / state change).\n useEffect(() => { setNodes(displayNodes); }, [displayNodes, setNodes]);\n useEffect(() => { setEdges(displayEdges); }, [displayEdges, setEdges]);\n\n // Fit only when the graph (layout) changes — not on every status tick.\n useEffect(() => {\n const id = requestAnimationFrame(() => { try { rf.fitView({ padding: 0.1 }); } catch { /* not ready */ } });\n return () => cancelAnimationFrame(id);\n }, [layout, rf]);\n\n const handleClickOutside = useCallback((e: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(e.target as globalThis.Node)) setFocused(false);\n }, []);\n useEffect(() => {\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\n }, [handleClickOutside]);\n\n // Measure container width to derive display height. Debounced via rAF and\n // guarded on real width change so it can't feedback-loop with React Flow's\n // own ResizeObserver (the height we set would otherwise retrigger it).\n useEffect(() => {\n const el = containerRef.current;\n if (!el) return;\n let raf = 0;\n const measure = () => {\n const w = el.clientWidth || 640;\n setBoxW((prev) => (Math.abs(prev - w) > 1 ? w : prev));\n };\n measure();\n if (typeof ResizeObserver === \"undefined\") return;\n const ro = new ResizeObserver(() => {\n cancelAnimationFrame(raf);\n raf = requestAnimationFrame(measure);\n });\n ro.observe(el);\n return () => { cancelAnimationFrame(raf); ro.disconnect(); };\n }, []);\n\n if (!parsed || !layout) {\n return (\n <div style={{ ...themeVars(tokens), height: 320 }}>\n <MermaidFallback diagram={diagram} title={title} />\n </div>\n );\n }\n\n const h = idealHeight(boxW, layout.graphWidth, layout.graphHeight);\n\n return (\n <div ref={containerRef} style={{ ...themeVars(tokens), position: \"relative\", width: \"100%\", height: h }} onMouseDown={() => setFocused(true)}>\n <style>{FLOW_ANIM_CSS}</style>\n <ReactFlow\n nodes={nodes}\n edges={edges}\n nodeTypes={nodeTypes}\n onNodesChange={onNC}\n onEdgesChange={onEC}\n fitView\n fitViewOptions={{ padding: 0.1 }}\n nodesDraggable={false}\n nodesConnectable={false}\n elementsSelectable={false}\n panOnDrag\n zoomOnScroll={focused}\n preventScrolling={focused}\n minZoom={0.2}\n maxZoom={4}\n proOptions={{ hideAttribution: true }}\n style={{ background: tokens.PAPER, width: \"100%\", height: \"100%\", borderRadius: 10 }}\n >\n <Background variant={BackgroundVariant.Dots} gap={20} size={1} color={tokens.BORDER} />\n </ReactFlow>\n\n <div style={{ position: \"absolute\", top: 10, right: 10, zIndex: 10, display: \"flex\", gap: 6 }}>\n <FitBtn />\n <button style={pillStyle} onClick={() => setFull(true)} onMouseEnter={onEnter} onMouseLeave={onLeave}>\n <ExpandIcon /><span>Expand</span>\n </button>\n </div>\n\n {full && typeof document !== \"undefined\" && (\n <FullscreenModal nodes={displayNodes} edges={displayEdges} title={title} onClose={() => setFull(false)} />\n )}\n </div>\n );\n}\n\nexport function FlowGraph({ diagram, title, autoplay, nodeStates }: FlowGraphProps) {\n return (\n <ReactFlowProvider>\n <Inner diagram={diagram} title={title} autoplay={autoplay} nodeStates={nodeStates} />\n </ReactFlowProvider>\n );\n}\n","\"use client\";\n\nimport React from \"react\";\nimport { BORDER, MUTED, ACCENT } from \"./theme\";\n\ninterface ColumnSettingsPanelProps {\n columns: { key: string; label: string }[];\n hidden: Set<string>;\n onToggle: (key: string) => void;\n onShowAll: () => void;\n onHideAll: () => void;\n}\n\nexport function ColumnSettingsPanel({ columns, hidden, onToggle, onShowAll, onHideAll }: ColumnSettingsPanelProps) {\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: \"6px\", minWidth: \"180px\" }}>\n <div style={{ display: \"flex\", justifyContent: \"space-between\", paddingBottom: \"4px\", borderBottom: `1px solid ${BORDER}` }}>\n <button\n onClick={onShowAll}\n style={{ background: \"none\", border: \"none\", cursor: \"pointer\", fontSize: \"11px\", color: ACCENT, fontWeight: 500, padding: 0 }}\n >\n Show all\n </button>\n <button\n onClick={onHideAll}\n style={{ background: \"none\", border: \"none\", cursor: \"pointer\", fontSize: \"11px\", color: MUTED, fontWeight: 500, padding: 0 }}\n >\n Hide all\n </button>\n </div>\n {columns.map((col) => (\n <label\n key={col.key}\n style={{ display: \"flex\", alignItems: \"center\", gap: \"8px\", cursor: \"pointer\", fontSize: \"12px\", color: \"var(--foreground)\" }}\n >\n <input\n type=\"checkbox\"\n checked={!hidden.has(col.key)}\n onChange={() => onToggle(col.key)}\n style={{ accentColor: ACCENT, width: \"14px\", height: \"14px\", margin: 0, cursor: \"pointer\" }}\n />\n {col.label}\n </label>\n ))}\n </div>\n );\n}\n","\"use client\";\n\nimport React, { useState, useRef, useEffect, useCallback } from \"react\";\nimport { toPng } from \"html-to-image\";\nimport { ColumnSettingsPanel } from \"./ColumnSettingsPanel\";\nimport { BORDER, MUTED } from \"./theme\";\n\nconst DOT_COLOR = \"#aaaaaa\";\nconst DOT_HOVER = \"#555555\";\n\ninterface ColumnConfig {\n columns: { key: string; label: string }[];\n hidden: Set<string>;\n onToggle: (key: string) => void;\n onShowAll: () => void;\n onHideAll: () => void;\n}\n\ninterface ComponentActionsProps {\n children: React.ReactNode;\n onDownloadCSV?: () => void;\n columnConfig?: ColumnConfig;\n filename?: string;\n}\n\ntype MenuView = \"main\" | \"columns\";\n\nexport function ComponentActions({ children, onDownloadCSV, columnConfig, filename = \"component\" }: ComponentActionsProps) {\n const [open, setOpen] = useState(false);\n const [view, setView] = useState<MenuView>(\"main\");\n const contentRef = useRef<HTMLDivElement>(null);\n const menuRef = useRef<HTMLDivElement>(null);\n const btnRef = useRef<HTMLButtonElement>(null);\n\n const close = useCallback(() => {\n setOpen(false);\n setView(\"main\");\n }, []);\n\n useEffect(() => {\n if (!open) return;\n const handler = (e: MouseEvent) => {\n if (menuRef.current?.contains(e.target as Node)) return;\n if (btnRef.current?.contains(e.target as Node)) return;\n close();\n };\n document.addEventListener(\"mousedown\", handler);\n return () => document.removeEventListener(\"mousedown\", handler);\n }, [open, close]);\n\n const handleDownloadPNG = useCallback(async () => {\n if (!contentRef.current) return;\n try {\n const url = await toPng(contentRef.current, { backgroundColor: \"white\", pixelRatio: 2 });\n const a = document.createElement(\"a\");\n a.href = url;\n a.download = `${filename}.png`;\n a.click();\n } catch {\n // silent fail\n }\n close();\n }, [filename, close]);\n\n const handleCSV = useCallback(() => {\n onDownloadCSV?.();\n close();\n }, [onDownloadCSV, close]);\n\n return (\n <div style={{ width: \"100%\", display: \"flex\", flexDirection: \"column\" }}>\n <div ref={contentRef} style={{ width: \"100%\" }}>\n {children}\n </div>\n <div style={{ display: \"flex\", justifyContent: \"flex-end\", marginTop: \"4px\", position: \"relative\", zIndex: 10, flexShrink: 0 }}>\n <button\n ref={btnRef}\n onClick={() => { setOpen((o) => !o); setView(\"main\"); }}\n aria-label=\"Component actions\"\n style={{\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n padding: \"4px 8px\",\n display: \"flex\",\n gap: \"3px\",\n alignItems: \"center\",\n borderRadius: \"6px\",\n transition: \"background 0.15s\",\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.background = \"#f2f2f2\";\n e.currentTarget.querySelectorAll<SVGCircleElement>(\"circle\").forEach((c) => (c.style.fill = DOT_HOVER));\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.background = \"none\";\n e.currentTarget.querySelectorAll<SVGCircleElement>(\"circle\").forEach((c) => (c.style.fill = DOT_COLOR));\n }}\n >\n <svg width=\"20\" height=\"6\" viewBox=\"0 0 20 6\">\n <circle cx=\"3\" cy=\"3\" r=\"2\" style={{ fill: DOT_COLOR, transition: \"fill 0.15s\" }} />\n <circle cx=\"10\" cy=\"3\" r=\"2\" style={{ fill: DOT_COLOR, transition: \"fill 0.15s\" }} />\n <circle cx=\"17\" cy=\"3\" r=\"2\" style={{ fill: DOT_COLOR, transition: \"fill 0.15s\" }} />\n </svg>\n </button>\n\n {open && (\n <div\n ref={menuRef}\n style={{\n position: \"absolute\",\n bottom: \"100%\",\n right: 0,\n marginBottom: \"4px\",\n background: \"white\",\n border: `1px solid ${BORDER}`,\n borderRadius: \"0.75rem\",\n boxShadow: \"0 4px 12px rgba(0,0,0,0.06)\",\n zIndex: 50,\n padding: view === \"columns\" ? \"10px\" : \"4px\",\n minWidth: view === \"columns\" ? \"200px\" : \"160px\",\n }}\n >\n {view === \"main\" ? (\n <div style={{ display: \"flex\", flexDirection: \"column\" }}>\n {columnConfig && (\n <MenuButton label=\"Customize columns\" onClick={() => setView(\"columns\")} />\n )}\n {onDownloadCSV && (\n <MenuButton label=\"Download CSV\" onClick={handleCSV} />\n )}\n <MenuButton label=\"Download PNG\" onClick={handleDownloadPNG} />\n </div>\n ) : (\n <div>\n <button\n onClick={() => setView(\"main\")}\n style={{ background: \"none\", border: \"none\", cursor: \"pointer\", fontSize: \"11px\", color: MUTED, marginBottom: \"6px\", padding: 0 }}\n >\n ← Back\n </button>\n <ColumnSettingsPanel\n columns={columnConfig!.columns}\n hidden={columnConfig!.hidden}\n onToggle={columnConfig!.onToggle}\n onShowAll={columnConfig!.onShowAll}\n onHideAll={columnConfig!.onHideAll}\n />\n </div>\n )}\n </div>\n )}\n </div>\n </div>\n );\n}\n\nfunction MenuButton({ label, onClick }: { label: string; onClick: () => void }) {\n return (\n <button\n onClick={onClick}\n style={{\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n padding: \"8px 12px\",\n fontSize: \"12.5px\",\n color: \"var(--foreground)\",\n textAlign: \"left\",\n borderRadius: \"8px\",\n transition: \"background 0.15s\",\n whiteSpace: \"nowrap\",\n }}\n onMouseEnter={(e) => (e.currentTarget.style.background = \"#f2f2f2\")}\n onMouseLeave={(e) => (e.currentTarget.style.background = \"none\")}\n >\n {label}\n </button>\n );\n}\n","\"use client\";\n\nimport React, { Suspense } from \"react\";\nimport type { SchemaPayload } from \"../../schemas\";\nimport { ComponentActions } from \"../../shared/ComponentActions\";\nimport { useTheme } from \"../../shared/ThemeContext\";\n\nconst FlowGraph = React.lazy(() =>\n import(\"./FlowGraph\").then((m) => ({ default: m.FlowGraph }))\n);\n\nexport interface FlowCanvasRendererProps {\n diagram: string;\n title?: string;\n description?: string;\n streaming?: boolean;\n autoplay?: boolean;\n nodeStates?: Record<string, \"pending\" | \"active\" | \"done\" | \"error\">;\n}\n\nexport function FlowCanvasRenderer({\n diagram,\n title,\n description,\n streaming = false,\n autoplay,\n nodeStates,\n}: FlowCanvasRendererProps) {\n const { ACCENT, BORDER, MUTED, PAPER } = useTheme();\n return (\n <div style={{ width: \"100%\", display: \"flex\", flexDirection: \"column\", gap: \"8px\" }}>\n {(title || streaming) && (\n <div style={{ display: \"flex\", alignItems: \"center\", gap: \"8px\" }}>\n {title && (\n <p style={{\n fontFamily: \"var(--font-serif)\", fontSize: \"15px\", fontWeight: 600,\n color: \"var(--foreground)\", letterSpacing: \"-0.005em\", margin: 0,\n }}>\n {title}\n </p>\n )}\n {streaming && (\n <span style={{\n display: \"inline-block\",\n width: \"7px\", height: \"7px\", borderRadius: \"50%\",\n background: ACCENT,\n animation: \"canvasPulse 1.2s ease-in-out infinite\",\n flexShrink: 0,\n }} />\n )}\n </div>\n )}\n {description && !streaming && (\n <p style={{ fontSize: \"12.5px\", color: \"#888888\", margin: 0, fontFamily: \"var(--font-sans)\" }}>\n {description}\n </p>\n )}\n\n <div style={{\n width: \"100%\",\n borderRadius: \"0.75rem\",\n border: `1px solid ${BORDER}`,\n boxShadow: \"0 1px 2px rgba(0,0,0,0.03), 0 4px 12px rgba(0,0,0,0.05)\",\n overflow: \"hidden\",\n background: \"#ffffff\",\n position: \"relative\",\n // Height is owned by FlowGraph (derived from the laid-out graph's aspect\n // ratio); only the empty/streaming placeholder needs a fixed stage.\n ...(diagram ? {} : { height: \"320px\" }),\n }}>\n {diagram ? (\n <Suspense fallback={null}>\n <FlowGraph diagram={diagram} title={title} autoplay={autoplay} nodeStates={nodeStates} />\n </Suspense>\n ) : (\n <div style={{\n position: \"absolute\", inset: 0,\n display: \"flex\", alignItems: \"center\", justifyContent: \"center\",\n }}>\n <div style={{ display: \"flex\", flexDirection: \"column\", alignItems: \"center\", gap: \"12px\" }}>\n <div style={{ display: \"flex\", gap: \"5px\" }}>\n {[0, 1, 2].map((i) => (\n <span key={i} style={{\n width: \"6px\", height: \"6px\", borderRadius: \"50%\",\n background: ACCENT,\n display: \"inline-block\",\n animation: `bounce 1s ease-in-out ${i * 0.18}s infinite`,\n }} />\n ))}\n </div>\n <span style={{ fontSize: \"12px\", color: \"#888888\", fontFamily: \"var(--font-sans)\" }}>\n Drawing diagram…\n </span>\n </div>\n </div>\n )}\n </div>\n\n <style>{`\n @keyframes canvasPulse {\n 0%, 100% { opacity: 1; transform: scale(1); }\n 50% { opacity: 0.4; transform: scale(0.75); }\n }\n\n /* ── Mermaid output container ─────────────────────── */\n /* Centering + padding handled by the shared Viewport; let the svg size\n naturally so fit-to-view can scale it. */\n .mermaid-output {\n display: flex;\n align-items: flex-start;\n justify-content: center;\n width: 100%;\n box-sizing: border-box;\n padding: 24px 20px;\n }\n .mermaid-output svg { display: block; max-width: 100%; height: auto; }\n\n /* ── All SVG text ─────────────────────────────────── */\n .mermaid-output text,\n .mermaid-output text tspan {\n font-family: Figtree, system-ui, sans-serif !important;\n font-size: 12px !important;\n fill: #111111 !important;\n }\n\n /* ── Flowchart: node shapes ───────────────────────── */\n .mermaid-output .node rect,\n .mermaid-output .node circle,\n .mermaid-output .node ellipse,\n .mermaid-output .node polygon,\n .mermaid-output .node path {\n stroke: #111111 !important;\n stroke-width: 2 !important;\n }\n\n /* ── Edges / arrows ───────────────────────────────── */\n .mermaid-output .edgePath .path,\n .mermaid-output .flowchart-link {\n stroke: ${ACCENT} !important;\n stroke-width: 2 !important;\n }\n .mermaid-output marker path {\n fill: ${ACCENT} !important;\n stroke: ${ACCENT} !important;\n }\n .mermaid-output .edgeLabel rect {\n fill: #ffffff !important;\n stroke: none !important;\n }\n .mermaid-output .edgeLabel text,\n .mermaid-output .edgeLabel text tspan {\n fill: ${MUTED} !important;\n font-size: 11px !important;\n }\n\n /* ── Clusters / subgraphs ─────────────────────────── */\n .mermaid-output .cluster rect {\n fill: ${PAPER} !important;\n stroke: ${BORDER} !important;\n stroke-width: 2 !important;\n }\n .mermaid-output .cluster text,\n .mermaid-output .cluster text tspan {\n font-size: 10px !important;\n font-weight: 600 !important;\n letter-spacing: 0.05em !important;\n fill: ${MUTED} !important;\n text-transform: uppercase !important;\n }\n\n /* ── Sequence diagrams ────────────────────────────── */\n .mermaid-output .actor {\n fill: #ffffff !important;\n stroke: #111111 !important;\n stroke-width: 2 !important;\n }\n .mermaid-output line.actor-line {\n stroke: ${ACCENT} !important;\n stroke-width: 1.5 !important;\n stroke-dasharray: 5 4 !important;\n }\n .mermaid-output .messageLine0,\n .mermaid-output .messageLine1 {\n stroke: ${ACCENT} !important;\n stroke-width: 2 !important;\n }\n .mermaid-output .note {\n fill: #fef8e7 !important;\n stroke: #e0c97c !important;\n stroke-width: 2 !important;\n }\n .mermaid-output .activation0,\n .mermaid-output .activation1 {\n fill: #fef3c7 !important;\n stroke: ${ACCENT} !important;\n stroke-width: 2 !important;\n }\n .mermaid-output .loopLine {\n stroke: ${BORDER} !important;\n stroke-dasharray: 4 4 !important;\n }\n\n /* ── ER diagrams ──────────────────────────────────── */\n .mermaid-output .er.entityBox {\n fill: #ffffff !important;\n stroke: #111111 !important;\n stroke-width: 2 !important;\n }\n .mermaid-output .er.relationshipLine {\n stroke: ${ACCENT} !important;\n stroke-width: 2 !important;\n }\n .mermaid-output .er.reltext tspan {\n fill: ${MUTED} !important;\n font-size: 11px !important;\n }\n\n /* ── Class diagrams ───────────────────────────────── */\n .mermaid-output g.classGroup rect {\n fill: #ffffff !important;\n stroke: #111111 !important;\n stroke-width: 2 !important;\n }\n .mermaid-output .relation {\n stroke: ${ACCENT} !important;\n stroke-width: 2 !important;\n }\n `}</style>\n </div>\n );\n}\n\nexport function FlowCanvasResolver(p: SchemaPayload<\"flow-canvas\">) {\n const { ACCENT, BORDER } = useTheme();\n return (\n <ComponentActions filename={p.title ?? \"flow-canvas\"}>\n <FlowCanvasRenderer\n diagram={p.diagram}\n title={p.title}\n description={p.description}\n streaming={false}\n autoplay={p.autoplay}\n nodeStates={p.node_states}\n />\n </ComponentActions>\n );\n}\n"]}
|
|
@@ -0,0 +1,315 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
var recharts = require('recharts');
|
|
5
|
+
var react = require('react');
|
|
6
|
+
var htmlToImage = require('html-to-image');
|
|
7
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
8
|
+
|
|
9
|
+
// src/shared/theme.ts
|
|
10
|
+
var BORDER = "#dedede";
|
|
11
|
+
var MUTED = "#777777";
|
|
12
|
+
var PAPER = "#f6f6f6";
|
|
13
|
+
var ACCENT = "#ff5000";
|
|
14
|
+
var ACCENT_SOFT = "#cc4000";
|
|
15
|
+
var SECONDARY = "#0364ff";
|
|
16
|
+
var CHART_PALETTE = [
|
|
17
|
+
"#ff5000",
|
|
18
|
+
"#0364ff",
|
|
19
|
+
"#16a34a",
|
|
20
|
+
"#dc2626",
|
|
21
|
+
"#7c3aed",
|
|
22
|
+
"#0891b2",
|
|
23
|
+
"#f59e0b",
|
|
24
|
+
"#6366f1",
|
|
25
|
+
"#ec4899",
|
|
26
|
+
"#84cc16",
|
|
27
|
+
"#e11d48",
|
|
28
|
+
"#0ea5e9"
|
|
29
|
+
];
|
|
30
|
+
function ColumnSettingsPanel({ columns, hidden, onToggle, onShowAll, onHideAll }) {
|
|
31
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", flexDirection: "column", gap: "6px", minWidth: "180px" }, children: [
|
|
32
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", justifyContent: "space-between", paddingBottom: "4px", borderBottom: `1px solid ${BORDER}` }, children: [
|
|
33
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
34
|
+
"button",
|
|
35
|
+
{
|
|
36
|
+
onClick: onShowAll,
|
|
37
|
+
style: { background: "none", border: "none", cursor: "pointer", fontSize: "11px", color: ACCENT, fontWeight: 500, padding: 0 },
|
|
38
|
+
children: "Show all"
|
|
39
|
+
}
|
|
40
|
+
),
|
|
41
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
42
|
+
"button",
|
|
43
|
+
{
|
|
44
|
+
onClick: onHideAll,
|
|
45
|
+
style: { background: "none", border: "none", cursor: "pointer", fontSize: "11px", color: MUTED, fontWeight: 500, padding: 0 },
|
|
46
|
+
children: "Hide all"
|
|
47
|
+
}
|
|
48
|
+
)
|
|
49
|
+
] }),
|
|
50
|
+
columns.map((col) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
51
|
+
"label",
|
|
52
|
+
{
|
|
53
|
+
style: { display: "flex", alignItems: "center", gap: "8px", cursor: "pointer", fontSize: "12px", color: "var(--foreground)" },
|
|
54
|
+
children: [
|
|
55
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
56
|
+
"input",
|
|
57
|
+
{
|
|
58
|
+
type: "checkbox",
|
|
59
|
+
checked: !hidden.has(col.key),
|
|
60
|
+
onChange: () => onToggle(col.key),
|
|
61
|
+
style: { accentColor: ACCENT, width: "14px", height: "14px", margin: 0, cursor: "pointer" }
|
|
62
|
+
}
|
|
63
|
+
),
|
|
64
|
+
col.label
|
|
65
|
+
]
|
|
66
|
+
},
|
|
67
|
+
col.key
|
|
68
|
+
))
|
|
69
|
+
] });
|
|
70
|
+
}
|
|
71
|
+
var DOT_COLOR = "#aaaaaa";
|
|
72
|
+
var DOT_HOVER = "#555555";
|
|
73
|
+
function ComponentActions({ children, onDownloadCSV, columnConfig, filename = "component" }) {
|
|
74
|
+
const [open, setOpen] = react.useState(false);
|
|
75
|
+
const [view, setView] = react.useState("main");
|
|
76
|
+
const contentRef = react.useRef(null);
|
|
77
|
+
const menuRef = react.useRef(null);
|
|
78
|
+
const btnRef = react.useRef(null);
|
|
79
|
+
const close = react.useCallback(() => {
|
|
80
|
+
setOpen(false);
|
|
81
|
+
setView("main");
|
|
82
|
+
}, []);
|
|
83
|
+
react.useEffect(() => {
|
|
84
|
+
if (!open) return;
|
|
85
|
+
const handler = (e) => {
|
|
86
|
+
var _a, _b;
|
|
87
|
+
if ((_a = menuRef.current) == null ? void 0 : _a.contains(e.target)) return;
|
|
88
|
+
if ((_b = btnRef.current) == null ? void 0 : _b.contains(e.target)) return;
|
|
89
|
+
close();
|
|
90
|
+
};
|
|
91
|
+
document.addEventListener("mousedown", handler);
|
|
92
|
+
return () => document.removeEventListener("mousedown", handler);
|
|
93
|
+
}, [open, close]);
|
|
94
|
+
const handleDownloadPNG = react.useCallback(async () => {
|
|
95
|
+
if (!contentRef.current) return;
|
|
96
|
+
try {
|
|
97
|
+
const url = await htmlToImage.toPng(contentRef.current, { backgroundColor: "white", pixelRatio: 2 });
|
|
98
|
+
const a = document.createElement("a");
|
|
99
|
+
a.href = url;
|
|
100
|
+
a.download = `${filename}.png`;
|
|
101
|
+
a.click();
|
|
102
|
+
} catch (e) {
|
|
103
|
+
}
|
|
104
|
+
close();
|
|
105
|
+
}, [filename, close]);
|
|
106
|
+
const handleCSV = react.useCallback(() => {
|
|
107
|
+
onDownloadCSV == null ? void 0 : onDownloadCSV();
|
|
108
|
+
close();
|
|
109
|
+
}, [onDownloadCSV, close]);
|
|
110
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { width: "100%", display: "flex", flexDirection: "column" }, children: [
|
|
111
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { ref: contentRef, style: { width: "100%" }, children }),
|
|
112
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", justifyContent: "flex-end", marginTop: "4px", position: "relative", zIndex: 10, flexShrink: 0 }, children: [
|
|
113
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
114
|
+
"button",
|
|
115
|
+
{
|
|
116
|
+
ref: btnRef,
|
|
117
|
+
onClick: () => {
|
|
118
|
+
setOpen((o) => !o);
|
|
119
|
+
setView("main");
|
|
120
|
+
},
|
|
121
|
+
"aria-label": "Component actions",
|
|
122
|
+
style: {
|
|
123
|
+
background: "none",
|
|
124
|
+
border: "none",
|
|
125
|
+
cursor: "pointer",
|
|
126
|
+
padding: "4px 8px",
|
|
127
|
+
display: "flex",
|
|
128
|
+
gap: "3px",
|
|
129
|
+
alignItems: "center",
|
|
130
|
+
borderRadius: "6px",
|
|
131
|
+
transition: "background 0.15s"
|
|
132
|
+
},
|
|
133
|
+
onMouseEnter: (e) => {
|
|
134
|
+
e.currentTarget.style.background = "#f2f2f2";
|
|
135
|
+
e.currentTarget.querySelectorAll("circle").forEach((c) => c.style.fill = DOT_HOVER);
|
|
136
|
+
},
|
|
137
|
+
onMouseLeave: (e) => {
|
|
138
|
+
e.currentTarget.style.background = "none";
|
|
139
|
+
e.currentTarget.querySelectorAll("circle").forEach((c) => c.style.fill = DOT_COLOR);
|
|
140
|
+
},
|
|
141
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs("svg", { width: "20", height: "6", viewBox: "0 0 20 6", children: [
|
|
142
|
+
/* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "3", cy: "3", r: "2", style: { fill: DOT_COLOR, transition: "fill 0.15s" } }),
|
|
143
|
+
/* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "10", cy: "3", r: "2", style: { fill: DOT_COLOR, transition: "fill 0.15s" } }),
|
|
144
|
+
/* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "17", cy: "3", r: "2", style: { fill: DOT_COLOR, transition: "fill 0.15s" } })
|
|
145
|
+
] })
|
|
146
|
+
}
|
|
147
|
+
),
|
|
148
|
+
open && /* @__PURE__ */ jsxRuntime.jsx(
|
|
149
|
+
"div",
|
|
150
|
+
{
|
|
151
|
+
ref: menuRef,
|
|
152
|
+
style: {
|
|
153
|
+
position: "absolute",
|
|
154
|
+
bottom: "100%",
|
|
155
|
+
right: 0,
|
|
156
|
+
marginBottom: "4px",
|
|
157
|
+
background: "white",
|
|
158
|
+
border: `1px solid ${BORDER}`,
|
|
159
|
+
borderRadius: "0.75rem",
|
|
160
|
+
boxShadow: "0 4px 12px rgba(0,0,0,0.06)",
|
|
161
|
+
zIndex: 50,
|
|
162
|
+
padding: view === "columns" ? "10px" : "4px",
|
|
163
|
+
minWidth: view === "columns" ? "200px" : "160px"
|
|
164
|
+
},
|
|
165
|
+
children: view === "main" ? /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", flexDirection: "column" }, children: [
|
|
166
|
+
columnConfig && /* @__PURE__ */ jsxRuntime.jsx(MenuButton, { label: "Customize columns", onClick: () => setView("columns") }),
|
|
167
|
+
onDownloadCSV && /* @__PURE__ */ jsxRuntime.jsx(MenuButton, { label: "Download CSV", onClick: handleCSV }),
|
|
168
|
+
/* @__PURE__ */ jsxRuntime.jsx(MenuButton, { label: "Download PNG", onClick: handleDownloadPNG })
|
|
169
|
+
] }) : /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
170
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
171
|
+
"button",
|
|
172
|
+
{
|
|
173
|
+
onClick: () => setView("main"),
|
|
174
|
+
style: { background: "none", border: "none", cursor: "pointer", fontSize: "11px", color: MUTED, marginBottom: "6px", padding: 0 },
|
|
175
|
+
children: "\u2190 Back"
|
|
176
|
+
}
|
|
177
|
+
),
|
|
178
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
179
|
+
ColumnSettingsPanel,
|
|
180
|
+
{
|
|
181
|
+
columns: columnConfig.columns,
|
|
182
|
+
hidden: columnConfig.hidden,
|
|
183
|
+
onToggle: columnConfig.onToggle,
|
|
184
|
+
onShowAll: columnConfig.onShowAll,
|
|
185
|
+
onHideAll: columnConfig.onHideAll
|
|
186
|
+
}
|
|
187
|
+
)
|
|
188
|
+
] })
|
|
189
|
+
}
|
|
190
|
+
)
|
|
191
|
+
] })
|
|
192
|
+
] });
|
|
193
|
+
}
|
|
194
|
+
function MenuButton({ label, onClick }) {
|
|
195
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
196
|
+
"button",
|
|
197
|
+
{
|
|
198
|
+
onClick,
|
|
199
|
+
style: {
|
|
200
|
+
background: "none",
|
|
201
|
+
border: "none",
|
|
202
|
+
cursor: "pointer",
|
|
203
|
+
padding: "8px 12px",
|
|
204
|
+
fontSize: "12.5px",
|
|
205
|
+
color: "var(--foreground)",
|
|
206
|
+
textAlign: "left",
|
|
207
|
+
borderRadius: "8px",
|
|
208
|
+
transition: "background 0.15s",
|
|
209
|
+
whiteSpace: "nowrap"
|
|
210
|
+
},
|
|
211
|
+
onMouseEnter: (e) => e.currentTarget.style.background = "#f2f2f2",
|
|
212
|
+
onMouseLeave: (e) => e.currentTarget.style.background = "none",
|
|
213
|
+
children: label
|
|
214
|
+
}
|
|
215
|
+
);
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
// src/shared/downloadCSV.ts
|
|
219
|
+
function escapeCSV(value) {
|
|
220
|
+
const str = value == null ? "" : String(value);
|
|
221
|
+
if (str.includes(",") || str.includes('"') || str.includes("\n")) {
|
|
222
|
+
return `"${str.replace(/"/g, '""')}"`;
|
|
223
|
+
}
|
|
224
|
+
return str;
|
|
225
|
+
}
|
|
226
|
+
function downloadCSV(columns, rows, filename) {
|
|
227
|
+
const header = columns.map((c) => escapeCSV(c.label)).join(",");
|
|
228
|
+
const body = rows.map((row) => columns.map((c) => escapeCSV(row[c.key])).join(",")).join("\n");
|
|
229
|
+
const csv = `${header}
|
|
230
|
+
${body}`;
|
|
231
|
+
const blob = new Blob([csv], { type: "text/csv;charset=utf-8;" });
|
|
232
|
+
const url = URL.createObjectURL(blob);
|
|
233
|
+
const a = document.createElement("a");
|
|
234
|
+
a.href = url;
|
|
235
|
+
a.download = filename.endsWith(".csv") ? filename : `${filename}.csv`;
|
|
236
|
+
a.click();
|
|
237
|
+
URL.revokeObjectURL(url);
|
|
238
|
+
}
|
|
239
|
+
var DEFAULT_TOKENS = {
|
|
240
|
+
BORDER,
|
|
241
|
+
MUTED,
|
|
242
|
+
PAPER,
|
|
243
|
+
ACCENT,
|
|
244
|
+
ACCENT_SOFT,
|
|
245
|
+
SECONDARY,
|
|
246
|
+
CHART_PALETTE: [...CHART_PALETTE]
|
|
247
|
+
};
|
|
248
|
+
var GenUIThemeContext = react.createContext(DEFAULT_TOKENS);
|
|
249
|
+
function useTheme() {
|
|
250
|
+
return react.useContext(GenUIThemeContext);
|
|
251
|
+
}
|
|
252
|
+
var tooltipStyle = {
|
|
253
|
+
fontSize: "12px",
|
|
254
|
+
borderRadius: "8px",
|
|
255
|
+
border: `1px solid ${BORDER}`,
|
|
256
|
+
background: "white",
|
|
257
|
+
boxShadow: "0 4px 12px rgba(0,0,0,0.08)",
|
|
258
|
+
color: "var(--foreground)"
|
|
259
|
+
};
|
|
260
|
+
function money(v, currency) {
|
|
261
|
+
const n = v.toLocaleString(void 0, { maximumFractionDigits: 0 });
|
|
262
|
+
return currency ? `${currency}${n}` : n;
|
|
263
|
+
}
|
|
264
|
+
function FunnelChartResolver(p) {
|
|
265
|
+
var _a, _b, _c, _d;
|
|
266
|
+
const { MUTED: MUTED2 } = useTheme();
|
|
267
|
+
const stages = (_a = p.stages) != null ? _a : [];
|
|
268
|
+
const data = stages.map((s, i) => {
|
|
269
|
+
var _a2;
|
|
270
|
+
return {
|
|
271
|
+
name: s.label,
|
|
272
|
+
value: s.value,
|
|
273
|
+
fill: (_a2 = s.color) != null ? _a2 : CHART_PALETTE[i % CHART_PALETTE.length]
|
|
274
|
+
};
|
|
275
|
+
});
|
|
276
|
+
const first = (_c = (_b = stages[0]) == null ? void 0 : _b.value) != null ? _c : 0;
|
|
277
|
+
const csv = () => {
|
|
278
|
+
var _a2;
|
|
279
|
+
return downloadCSV(
|
|
280
|
+
[{ key: "label", label: "Stage" }, { key: "value", label: "Value" }],
|
|
281
|
+
stages.map((s) => ({ label: s.label, value: s.value })),
|
|
282
|
+
(_a2 = p.title) != null ? _a2 : "funnel-chart"
|
|
283
|
+
);
|
|
284
|
+
};
|
|
285
|
+
return /* @__PURE__ */ jsxRuntime.jsx(ComponentActions, { filename: (_d = p.title) != null ? _d : "funnel-chart", onDownloadCSV: csv, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { width: "100%", display: "flex", flexDirection: "column", gap: "12px" }, children: [
|
|
286
|
+
p.title && /* @__PURE__ */ jsxRuntime.jsx("p", { style: { fontFamily: "var(--font-serif)", fontSize: "15px", fontWeight: 600, color: "var(--foreground)", letterSpacing: "-0.005em" }, children: p.title }),
|
|
287
|
+
/* @__PURE__ */ jsxRuntime.jsx(recharts.ResponsiveContainer, { width: "100%", height: Math.max(180, stages.length * 44), children: /* @__PURE__ */ jsxRuntime.jsxs(recharts.FunnelChart, { margin: { top: 4, right: 96, bottom: 4, left: 8 }, children: [
|
|
288
|
+
/* @__PURE__ */ jsxRuntime.jsx(recharts.Tooltip, { contentStyle: tooltipStyle, formatter: (value) => money(Number(value), p.currency) }),
|
|
289
|
+
/* @__PURE__ */ jsxRuntime.jsxs(recharts.Funnel, { dataKey: "value", data, isAnimationActive: false, stroke: "white", children: [
|
|
290
|
+
/* @__PURE__ */ jsxRuntime.jsx(recharts.LabelList, { position: "right", dataKey: "name", fontSize: 12, fill: "var(--foreground)", stroke: "none" }),
|
|
291
|
+
data.map((d, i) => /* @__PURE__ */ jsxRuntime.jsx(recharts.Cell, { fill: d.fill }, i))
|
|
292
|
+
] })
|
|
293
|
+
] }) }),
|
|
294
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { style: { display: "flex", flexDirection: "column", gap: "4px" }, children: stages.map((s, i) => {
|
|
295
|
+
var _a2;
|
|
296
|
+
const prior = i === 0 ? null : stages[i - 1].value;
|
|
297
|
+
const stepPct = prior && prior > 0 ? Math.round(s.value / prior * 100) : null;
|
|
298
|
+
const ofTop = first > 0 ? Math.round(s.value / first * 100) : null;
|
|
299
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", alignItems: "center", justifyContent: "space-between", fontSize: "12px" }, children: [
|
|
300
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { style: { display: "flex", alignItems: "center", gap: "8px", color: "var(--foreground)" }, children: [
|
|
301
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { style: { width: "10px", height: "10px", borderRadius: "3px", background: (_a2 = s.color) != null ? _a2 : CHART_PALETTE[i % CHART_PALETTE.length] } }),
|
|
302
|
+
s.label
|
|
303
|
+
] }),
|
|
304
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { style: { color: MUTED2, fontVariantNumeric: "tabular-nums" }, children: [
|
|
305
|
+
money(s.value, p.currency),
|
|
306
|
+
stepPct != null ? ` \xB7 ${stepPct}% of prior` : ofTop != null ? ` \xB7 ${ofTop}%` : ""
|
|
307
|
+
] })
|
|
308
|
+
] }, i);
|
|
309
|
+
}) })
|
|
310
|
+
] }) });
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
exports.FunnelChartResolver = FunnelChartResolver;
|
|
314
|
+
//# sourceMappingURL=resolver.cjs.map
|
|
315
|
+
//# sourceMappingURL=resolver.cjs.map
|