@flanksource/clicky-ui 0.3.58 → 0.3.60
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/NOTICE.md +58 -0
- package/dist/clicky.cjs +3 -1
- package/dist/clicky.d.ts +1 -0
- package/dist/clicky.d.ts.map +1 -1
- package/dist/clicky.js +3 -1
- package/dist/data/Clicky.cjs +23 -270
- package/dist/data/Clicky.cjs.map +1 -1
- package/dist/data/Clicky.d.ts +5 -29
- package/dist/data/Clicky.d.ts.map +1 -1
- package/dist/data/Clicky.js +11 -259
- package/dist/data/Clicky.js.map +1 -1
- package/dist/data/PromptBanner.model.cjs +10 -0
- package/dist/data/PromptBanner.model.cjs.map +1 -1
- package/dist/data/PromptBanner.model.d.ts +2 -0
- package/dist/data/PromptBanner.model.d.ts.map +1 -1
- package/dist/data/PromptBanner.model.js +10 -1
- package/dist/data/PromptBanner.model.js.map +1 -1
- package/dist/data/PromptDialog.cjs +16 -49
- package/dist/data/PromptDialog.cjs.map +1 -1
- package/dist/data/PromptDialog.d.ts +7 -1
- package/dist/data/PromptDialog.d.ts.map +1 -1
- package/dist/data/PromptDialog.js +17 -50
- package/dist/data/PromptDialog.js.map +1 -1
- package/dist/data/PromptForm.cjs +79 -0
- package/dist/data/PromptForm.cjs.map +1 -0
- package/dist/data/PromptForm.d.ts +26 -0
- package/dist/data/PromptForm.d.ts.map +1 -0
- package/dist/data/PromptForm.js +79 -0
- package/dist/data/PromptForm.js.map +1 -0
- package/dist/data/PromptIndicator.cjs +82 -0
- package/dist/data/PromptIndicator.cjs.map +1 -0
- package/dist/data/PromptIndicator.d.ts +19 -0
- package/dist/data/PromptIndicator.d.ts.map +1 -0
- package/dist/data/PromptIndicator.js +82 -0
- package/dist/data/PromptIndicator.js.map +1 -0
- package/dist/data/PromptList.cjs +67 -0
- package/dist/data/PromptList.cjs.map +1 -0
- package/dist/data/PromptList.d.ts +13 -0
- package/dist/data/PromptList.d.ts.map +1 -0
- package/dist/data/PromptList.js +67 -0
- package/dist/data/PromptList.js.map +1 -0
- package/dist/data/clicky-download.cjs +251 -0
- package/dist/data/clicky-download.cjs.map +1 -0
- package/dist/data/clicky-download.d.ts +55 -0
- package/dist/data/clicky-download.d.ts.map +1 -0
- package/dist/data/clicky-download.js +244 -0
- package/dist/data/clicky-download.js.map +1 -0
- package/dist/data/git/GitChangeList.cjs +11 -4
- package/dist/data/git/GitChangeList.cjs.map +1 -1
- package/dist/data/git/GitChangeList.d.ts +2 -35
- package/dist/data/git/GitChangeList.d.ts.map +1 -1
- package/dist/data/git/GitChangeList.js +11 -4
- package/dist/data/git/GitChangeList.js.map +1 -1
- package/dist/data/git/GitLink.cjs +13 -0
- package/dist/data/git/GitLink.cjs.map +1 -0
- package/dist/data/git/GitLink.d.ts +8 -0
- package/dist/data/git/GitLink.d.ts.map +1 -0
- package/dist/data/git/GitLink.js +13 -0
- package/dist/data/git/GitLink.js.map +1 -0
- package/dist/data/git/git-links.cjs +54 -0
- package/dist/data/git/git-links.cjs.map +1 -0
- package/dist/data/git/git-links.d.ts +4 -0
- package/dist/data/git/git-links.d.ts.map +1 -0
- package/dist/data/git/git-links.js +53 -0
- package/dist/data/git/git-links.js.map +1 -0
- package/dist/data/git/index.d.ts +3 -0
- package/dist/data/git/index.d.ts.map +1 -1
- package/dist/data/git/types.d.ts +54 -0
- package/dist/data/git/types.d.ts.map +1 -0
- package/dist/data/test-runner/MatrixMarks.cjs +4 -3
- package/dist/data/test-runner/MatrixMarks.cjs.map +1 -1
- package/dist/data/test-runner/MatrixMarks.d.ts +7 -4
- package/dist/data/test-runner/MatrixMarks.d.ts.map +1 -1
- package/dist/data/test-runner/MatrixMarks.js +4 -3
- package/dist/data/test-runner/MatrixMarks.js.map +1 -1
- package/dist/data/test-runner/TestRunSummary.cjs +1 -1
- package/dist/data/test-runner/TestRunSummary.cjs.map +1 -1
- package/dist/data/test-runner/TestRunSummary.js +1 -1
- package/dist/data/test-runner/TestRunSummary.js.map +1 -1
- package/dist/data/test-runner/TestTree.cjs +1 -1
- package/dist/data/test-runner/TestTree.cjs.map +1 -1
- package/dist/data/test-runner/TestTree.js +1 -1
- package/dist/data/test-runner/TestTree.js.map +1 -1
- package/dist/data/test-runner/TestTreeNode.cjs +2 -2
- package/dist/data/test-runner/TestTreeNode.cjs.map +1 -1
- package/dist/data/test-runner/TestTreeNode.js +2 -2
- package/dist/data/test-runner/TestTreeNode.js.map +1 -1
- package/dist/data/test-runner/adapter.cjs +7 -0
- package/dist/data/test-runner/adapter.cjs.map +1 -1
- package/dist/data/test-runner/adapter.d.ts +7 -0
- package/dist/data/test-runner/adapter.d.ts.map +1 -1
- package/dist/data/test-runner/adapter.js +7 -0
- package/dist/data/test-runner/adapter.js.map +1 -1
- package/dist/data/test-runner/index.d.ts +1 -1
- package/dist/data/test-runner/index.d.ts.map +1 -1
- package/dist/data/test-runner/marks.cjs +3 -3
- package/dist/data/test-runner/marks.cjs.map +1 -1
- package/dist/data/test-runner/marks.js +3 -3
- package/dist/data/test-runner/marks.js.map +1 -1
- package/dist/data/test-runner/matrix-marks.cjs +12 -3
- package/dist/data/test-runner/matrix-marks.cjs.map +1 -1
- package/dist/data/test-runner/matrix-marks.d.ts +13 -0
- package/dist/data/test-runner/matrix-marks.d.ts.map +1 -1
- package/dist/data/test-runner/matrix-marks.js +12 -3
- package/dist/data/test-runner/matrix-marks.js.map +1 -1
- package/dist/data/test-runner/status.cjs +1 -1
- package/dist/data/test-runner/status.cjs.map +1 -1
- package/dist/data/test-runner/status.js +1 -1
- package/dist/data/test-runner/status.js.map +1 -1
- package/dist/data/test-runner/types.d.ts +2 -0
- package/dist/data/test-runner/types.d.ts.map +1 -1
- package/dist/data/traces/index.d.ts +2 -0
- package/dist/data/traces/index.d.ts.map +1 -1
- package/dist/data/traces/otel/OtelTraceDetail.cjs +102 -78
- package/dist/data/traces/otel/OtelTraceDetail.cjs.map +1 -1
- package/dist/data/traces/otel/OtelTraceDetail.d.ts +6 -2
- package/dist/data/traces/otel/OtelTraceDetail.d.ts.map +1 -1
- package/dist/data/traces/otel/OtelTraceDetail.js +102 -78
- package/dist/data/traces/otel/OtelTraceDetail.js.map +1 -1
- package/dist/data/traces/otel/OtelTraceTable.cjs +43 -7
- package/dist/data/traces/otel/OtelTraceTable.cjs.map +1 -1
- package/dist/data/traces/otel/OtelTraceTable.d.ts +14 -3
- package/dist/data/traces/otel/OtelTraceTable.d.ts.map +1 -1
- package/dist/data/traces/otel/OtelTraceTable.js +44 -8
- package/dist/data/traces/otel/OtelTraceTable.js.map +1 -1
- package/dist/data/traces/otel/profile-listing.cjs +61 -0
- package/dist/data/traces/otel/profile-listing.cjs.map +1 -0
- package/dist/data/traces/otel/profile-listing.d.ts +23 -0
- package/dist/data/traces/otel/profile-listing.d.ts.map +1 -0
- package/dist/data/traces/otel/profile-listing.js +60 -0
- package/dist/data/traces/otel/profile-listing.js.map +1 -0
- package/dist/data/traces/otel/profile-spans.cjs +22 -0
- package/dist/data/traces/otel/profile-spans.cjs.map +1 -0
- package/dist/data/traces/otel/profile-spans.d.ts +4 -0
- package/dist/data/traces/otel/profile-spans.d.ts.map +1 -0
- package/dist/data/traces/otel/profile-spans.js +22 -0
- package/dist/data/traces/otel/profile-spans.js.map +1 -0
- package/dist/data/traces/otel/span-traces.cjs +7 -1
- package/dist/data/traces/otel/span-traces.cjs.map +1 -1
- package/dist/data/traces/otel/span-traces.d.ts +2 -0
- package/dist/data/traces/otel/span-traces.d.ts.map +1 -1
- package/dist/data/traces/otel/span-traces.js +7 -2
- package/dist/data/traces/otel/span-traces.js.map +1 -1
- package/dist/data/useClickyTableMenu.cjs +33 -0
- package/dist/data/useClickyTableMenu.cjs.map +1 -0
- package/dist/data/useClickyTableMenu.d.ts +17 -0
- package/dist/data/useClickyTableMenu.d.ts.map +1 -0
- package/dist/data/useClickyTableMenu.js +33 -0
- package/dist/data/useClickyTableMenu.js.map +1 -0
- package/dist/data/verification/adapterViews.cjs +3 -1
- package/dist/data/verification/adapterViews.cjs.map +1 -1
- package/dist/data/verification/adapterViews.d.ts +5 -2
- package/dist/data/verification/adapterViews.d.ts.map +1 -1
- package/dist/data/verification/adapterViews.js +4 -2
- package/dist/data/verification/adapterViews.js.map +1 -1
- package/dist/data/verification/adapters.cjs +28 -7
- package/dist/data/verification/adapters.cjs.map +1 -1
- package/dist/data/verification/adapters.d.ts +7 -1
- package/dist/data/verification/adapters.d.ts.map +1 -1
- package/dist/data/verification/adapters.js +28 -7
- package/dist/data/verification/adapters.js.map +1 -1
- package/dist/data/verification/stepKind.cjs +1 -0
- package/dist/data/verification/stepKind.cjs.map +1 -1
- package/dist/data/verification/stepKind.d.ts.map +1 -1
- package/dist/data/verification/stepKind.js +1 -0
- package/dist/data/verification/stepKind.js.map +1 -1
- package/dist/data/verification/stepKindViews.cjs +17 -0
- package/dist/data/verification/stepKindViews.cjs.map +1 -1
- package/dist/data/verification/stepKindViews.d.ts +4 -0
- package/dist/data/verification/stepKindViews.d.ts.map +1 -1
- package/dist/data/verification/stepKindViews.js +17 -1
- package/dist/data/verification/stepKindViews.js.map +1 -1
- package/dist/data/version-info.cjs +3 -3
- package/dist/data/version-info.js +3 -3
- package/dist/data.cjs +121 -2
- package/dist/data.d.ts +3 -0
- package/dist/data.d.ts.map +1 -1
- package/dist/data.js +55 -3
- package/dist/git.cjs +6 -0
- package/dist/git.d.ts +4 -0
- package/dist/git.d.ts.map +1 -0
- package/dist/git.js +3 -0
- package/dist/hooks/use-prompts.cjs +18 -11
- package/dist/hooks/use-prompts.cjs.map +1 -1
- package/dist/hooks/use-prompts.d.ts.map +1 -1
- package/dist/hooks/use-prompts.js +18 -11
- package/dist/hooks/use-prompts.js.map +1 -1
- package/dist/icons/components/UiApi.cjs +37 -0
- package/dist/icons/components/UiApi.cjs.map +1 -0
- package/dist/icons/components/UiApi.d.ts +9 -0
- package/dist/icons/components/UiApi.d.ts.map +1 -0
- package/dist/icons/components/UiApi.js +35 -0
- package/dist/icons/components/UiApi.js.map +1 -0
- package/dist/icons/components/UiApiBridge.cjs +38 -0
- package/dist/icons/components/UiApiBridge.cjs.map +1 -0
- package/dist/icons/components/UiApiBridge.d.ts +9 -0
- package/dist/icons/components/UiApiBridge.d.ts.map +1 -0
- package/dist/icons/components/UiApiBridge.js +36 -0
- package/dist/icons/components/UiApiBridge.js.map +1 -0
- package/dist/icons/components/UiApiGateway.cjs +33 -0
- package/dist/icons/components/UiApiGateway.cjs.map +1 -0
- package/dist/icons/components/UiApiGateway.d.ts +9 -0
- package/dist/icons/components/UiApiGateway.d.ts.map +1 -0
- package/dist/icons/components/UiApiGateway.js +31 -0
- package/dist/icons/components/UiApiGateway.js.map +1 -0
- package/dist/icons/components/UiApiRequest.cjs +37 -0
- package/dist/icons/components/UiApiRequest.cjs.map +1 -0
- package/dist/icons/components/UiApiRequest.d.ts +9 -0
- package/dist/icons/components/UiApiRequest.d.ts.map +1 -0
- package/dist/icons/components/UiApiRequest.js +35 -0
- package/dist/icons/components/UiApiRequest.js.map +1 -0
- package/dist/icons/components/UiArrowDecision.cjs +51 -0
- package/dist/icons/components/UiArrowDecision.cjs.map +1 -0
- package/dist/icons/components/UiArrowDecision.d.ts +15 -0
- package/dist/icons/components/UiArrowDecision.d.ts.map +1 -0
- package/dist/icons/components/UiArrowDecision.js +48 -0
- package/dist/icons/components/UiArrowDecision.js.map +1 -0
- package/dist/icons/components/UiArrowSquareIn.cjs +51 -0
- package/dist/icons/components/UiArrowSquareIn.cjs.map +1 -0
- package/dist/icons/components/UiArrowSquareIn.d.ts +15 -0
- package/dist/icons/components/UiArrowSquareIn.d.ts.map +1 -0
- package/dist/icons/components/UiArrowSquareIn.js +48 -0
- package/dist/icons/components/UiArrowSquareIn.js.map +1 -0
- package/dist/icons/components/UiBatchCheck.cjs +55 -0
- package/dist/icons/components/UiBatchCheck.cjs.map +1 -0
- package/dist/icons/components/UiBatchCheck.d.ts +15 -0
- package/dist/icons/components/UiBatchCheck.d.ts.map +1 -0
- package/dist/icons/components/UiBatchCheck.js +52 -0
- package/dist/icons/components/UiBatchCheck.js.map +1 -0
- package/dist/icons/components/UiBatchJob.cjs +39 -0
- package/dist/icons/components/UiBatchJob.cjs.map +1 -0
- package/dist/icons/components/UiBatchJob.d.ts +9 -0
- package/dist/icons/components/UiBatchJob.d.ts.map +1 -0
- package/dist/icons/components/UiBatchJob.js +37 -0
- package/dist/icons/components/UiBatchJob.js.map +1 -0
- package/dist/icons/components/UiBatchRequest.cjs +39 -0
- package/dist/icons/components/UiBatchRequest.cjs.map +1 -0
- package/dist/icons/components/UiBatchRequest.d.ts +9 -0
- package/dist/icons/components/UiBatchRequest.d.ts.map +1 -0
- package/dist/icons/components/UiBatchRequest.js +37 -0
- package/dist/icons/components/UiBatchRequest.js.map +1 -0
- package/dist/icons/components/UiBpmnConditional.cjs +29 -0
- package/dist/icons/components/UiBpmnConditional.cjs.map +1 -0
- package/dist/icons/components/UiBpmnConditional.d.ts +9 -0
- package/dist/icons/components/UiBpmnConditional.d.ts.map +1 -0
- package/dist/icons/components/UiBpmnConditional.js +27 -0
- package/dist/icons/components/UiBpmnConditional.js.map +1 -0
- package/dist/icons/components/UiBranchFlow.cjs +33 -0
- package/dist/icons/components/UiBranchFlow.cjs.map +1 -0
- package/dist/icons/components/UiBranchFlow.d.ts +9 -0
- package/dist/icons/components/UiBranchFlow.d.ts.map +1 -0
- package/dist/icons/components/UiBranchFlow.js +31 -0
- package/dist/icons/components/UiBranchFlow.js.map +1 -0
- package/dist/icons/components/UiClassicBatch.cjs +29 -0
- package/dist/icons/components/UiClassicBatch.cjs.map +1 -0
- package/dist/icons/components/UiClassicBatch.d.ts +9 -0
- package/dist/icons/components/UiClassicBatch.d.ts.map +1 -0
- package/dist/icons/components/UiClassicBatch.js +27 -0
- package/dist/icons/components/UiClassicBatch.js.map +1 -0
- package/dist/icons/components/UiCodeFile.cjs +29 -0
- package/dist/icons/components/UiCodeFile.cjs.map +1 -0
- package/dist/icons/components/UiCodeFile.d.ts +9 -0
- package/dist/icons/components/UiCodeFile.d.ts.map +1 -0
- package/dist/icons/components/UiCodeFile.js +27 -0
- package/dist/icons/components/UiCodeFile.js.map +1 -0
- package/dist/icons/components/UiColumnsLayout.cjs +29 -0
- package/dist/icons/components/UiColumnsLayout.cjs.map +1 -0
- package/dist/icons/components/UiColumnsLayout.d.ts +9 -0
- package/dist/icons/components/UiColumnsLayout.d.ts.map +1 -0
- package/dist/icons/components/UiColumnsLayout.js +27 -0
- package/dist/icons/components/UiColumnsLayout.js.map +1 -0
- package/dist/icons/components/UiCondition.cjs +37 -0
- package/dist/icons/components/UiCondition.cjs.map +1 -0
- package/dist/icons/components/UiCondition.d.ts +9 -0
- package/dist/icons/components/UiCondition.d.ts.map +1 -0
- package/dist/icons/components/UiCondition.js +35 -0
- package/dist/icons/components/UiCondition.js.map +1 -0
- package/dist/icons/components/UiConditions.cjs +29 -0
- package/dist/icons/components/UiConditions.cjs.map +1 -0
- package/dist/icons/components/UiConditions.d.ts +9 -0
- package/dist/icons/components/UiConditions.d.ts.map +1 -0
- package/dist/icons/components/UiConditions.js +27 -0
- package/dist/icons/components/UiConditions.js.map +1 -0
- package/dist/icons/components/UiDelayQueue.cjs +40 -0
- package/dist/icons/components/UiDelayQueue.cjs.map +1 -0
- package/dist/icons/components/UiDelayQueue.d.ts +9 -0
- package/dist/icons/components/UiDelayQueue.d.ts.map +1 -0
- package/dist/icons/components/UiDelayQueue.js +38 -0
- package/dist/icons/components/UiDelayQueue.js.map +1 -0
- package/dist/icons/components/UiDynamicForm.cjs +51 -0
- package/dist/icons/components/UiDynamicForm.cjs.map +1 -0
- package/dist/icons/components/UiDynamicForm.d.ts +15 -0
- package/dist/icons/components/UiDynamicForm.d.ts.map +1 -0
- package/dist/icons/components/UiDynamicForm.js +48 -0
- package/dist/icons/components/UiDynamicForm.js.map +1 -0
- package/dist/icons/components/UiFlowArrow.cjs +51 -0
- package/dist/icons/components/UiFlowArrow.cjs.map +1 -0
- package/dist/icons/components/UiFlowArrow.d.ts +15 -0
- package/dist/icons/components/UiFlowArrow.d.ts.map +1 -0
- package/dist/icons/components/UiFlowArrow.js +48 -0
- package/dist/icons/components/UiFlowArrow.js.map +1 -0
- package/dist/icons/components/UiFormFields.cjs +33 -0
- package/dist/icons/components/UiFormFields.cjs.map +1 -0
- package/dist/icons/components/UiFormFields.d.ts +9 -0
- package/dist/icons/components/UiFormFields.d.ts.map +1 -0
- package/dist/icons/components/UiFormFields.js +31 -0
- package/dist/icons/components/UiFormFields.js.map +1 -0
- package/dist/icons/components/UiFormStep.cjs +38 -0
- package/dist/icons/components/UiFormStep.cjs.map +1 -0
- package/dist/icons/components/UiFormStep.d.ts +9 -0
- package/dist/icons/components/UiFormStep.d.ts.map +1 -0
- package/dist/icons/components/UiFormStep.js +36 -0
- package/dist/icons/components/UiFormStep.js.map +1 -0
- package/dist/icons/components/UiGatewayApi.cjs +32 -0
- package/dist/icons/components/UiGatewayApi.cjs.map +1 -0
- package/dist/icons/components/UiGatewayApi.d.ts +9 -0
- package/dist/icons/components/UiGatewayApi.d.ts.map +1 -0
- package/dist/icons/components/UiGatewayApi.js +30 -0
- package/dist/icons/components/UiGatewayApi.js.map +1 -0
- package/dist/icons/components/UiImportArrow.cjs +29 -0
- package/dist/icons/components/UiImportArrow.cjs.map +1 -0
- package/dist/icons/components/UiImportArrow.d.ts +9 -0
- package/dist/icons/components/UiImportArrow.d.ts.map +1 -0
- package/dist/icons/components/UiImportArrow.js +27 -0
- package/dist/icons/components/UiImportArrow.js.map +1 -0
- package/dist/icons/components/UiInputField.cjs +33 -0
- package/dist/icons/components/UiInputField.cjs.map +1 -0
- package/dist/icons/components/UiInputField.d.ts +9 -0
- package/dist/icons/components/UiInputField.d.ts.map +1 -0
- package/dist/icons/components/UiInputField.js +31 -0
- package/dist/icons/components/UiInputField.js.map +1 -0
- package/dist/icons/components/UiInsertTable.cjs +29 -0
- package/dist/icons/components/UiInsertTable.cjs.map +1 -0
- package/dist/icons/components/UiInsertTable.d.ts +9 -0
- package/dist/icons/components/UiInsertTable.d.ts.map +1 -0
- package/dist/icons/components/UiInsertTable.js +27 -0
- package/dist/icons/components/UiInsertTable.js.map +1 -0
- package/dist/icons/components/UiLayoutTemplate.cjs +32 -0
- package/dist/icons/components/UiLayoutTemplate.cjs.map +1 -0
- package/dist/icons/components/UiLayoutTemplate.d.ts +9 -0
- package/dist/icons/components/UiLayoutTemplate.d.ts.map +1 -0
- package/dist/icons/components/UiLayoutTemplate.js +30 -0
- package/dist/icons/components/UiLayoutTemplate.js.map +1 -0
- package/dist/icons/components/UiLayoutWindow.cjs +56 -0
- package/dist/icons/components/UiLayoutWindow.cjs.map +1 -0
- package/dist/icons/components/UiLayoutWindow.d.ts +15 -0
- package/dist/icons/components/UiLayoutWindow.d.ts.map +1 -0
- package/dist/icons/components/UiLayoutWindow.js +53 -0
- package/dist/icons/components/UiLayoutWindow.js.map +1 -0
- package/dist/icons/components/UiListEnd.cjs +33 -0
- package/dist/icons/components/UiListEnd.cjs.map +1 -0
- package/dist/icons/components/UiListEnd.d.ts +9 -0
- package/dist/icons/components/UiListEnd.d.ts.map +1 -0
- package/dist/icons/components/UiListEnd.js +31 -0
- package/dist/icons/components/UiListEnd.js.map +1 -0
- package/dist/icons/components/UiListEndLine.cjs +51 -0
- package/dist/icons/components/UiListEndLine.cjs.map +1 -0
- package/dist/icons/components/UiListEndLine.d.ts +15 -0
- package/dist/icons/components/UiListEndLine.d.ts.map +1 -0
- package/dist/icons/components/UiListEndLine.js +48 -0
- package/dist/icons/components/UiListEndLine.js.map +1 -0
- package/dist/icons/components/UiListNumbers.cjs +51 -0
- package/dist/icons/components/UiListNumbers.cjs.map +1 -0
- package/dist/icons/components/UiListNumbers.d.ts +15 -0
- package/dist/icons/components/UiListNumbers.d.ts.map +1 -0
- package/dist/icons/components/UiListNumbers.js +48 -0
- package/dist/icons/components/UiListNumbers.js.map +1 -0
- package/dist/icons/components/UiLowPriority.cjs +29 -0
- package/dist/icons/components/UiLowPriority.cjs.map +1 -0
- package/dist/icons/components/UiLowPriority.d.ts +9 -0
- package/dist/icons/components/UiLowPriority.d.ts.map +1 -0
- package/dist/icons/components/UiLowPriority.js +27 -0
- package/dist/icons/components/UiLowPriority.js.map +1 -0
- package/dist/icons/components/UiMergeQueue.cjs +38 -0
- package/dist/icons/components/UiMergeQueue.cjs.map +1 -0
- package/dist/icons/components/UiMergeQueue.d.ts +9 -0
- package/dist/icons/components/UiMergeQueue.d.ts.map +1 -0
- package/dist/icons/components/UiMergeQueue.js +36 -0
- package/dist/icons/components/UiMergeQueue.js.map +1 -0
- package/dist/icons/components/UiPipelineStage.cjs +33 -0
- package/dist/icons/components/UiPipelineStage.cjs.map +1 -0
- package/dist/icons/components/UiPipelineStage.d.ts +9 -0
- package/dist/icons/components/UiPipelineStage.d.ts.map +1 -0
- package/dist/icons/components/UiPipelineStage.js +31 -0
- package/dist/icons/components/UiPipelineStage.js.map +1 -0
- package/dist/icons/components/UiPlaylistRemove.cjs +29 -0
- package/dist/icons/components/UiPlaylistRemove.cjs.map +1 -0
- package/dist/icons/components/UiPlaylistRemove.d.ts +9 -0
- package/dist/icons/components/UiPlaylistRemove.d.ts.map +1 -0
- package/dist/icons/components/UiPlaylistRemove.js +27 -0
- package/dist/icons/components/UiPlaylistRemove.js.map +1 -0
- package/dist/icons/components/UiReportForms.cjs +51 -0
- package/dist/icons/components/UiReportForms.cjs.map +1 -0
- package/dist/icons/components/UiReportForms.d.ts +15 -0
- package/dist/icons/components/UiReportForms.d.ts.map +1 -0
- package/dist/icons/components/UiReportForms.js +48 -0
- package/dist/icons/components/UiReportForms.js.map +1 -0
- package/dist/icons/components/UiScreenTemplate.cjs +29 -0
- package/dist/icons/components/UiScreenTemplate.cjs.map +1 -0
- package/dist/icons/components/UiScreenTemplate.d.ts +9 -0
- package/dist/icons/components/UiScreenTemplate.d.ts.map +1 -0
- package/dist/icons/components/UiScreenTemplate.js +27 -0
- package/dist/icons/components/UiScreenTemplate.js.map +1 -0
- package/dist/icons/components/UiServices.cjs +29 -0
- package/dist/icons/components/UiServices.cjs.map +1 -0
- package/dist/icons/components/UiServices.d.ts +9 -0
- package/dist/icons/components/UiServices.d.ts.map +1 -0
- package/dist/icons/components/UiServices.js +27 -0
- package/dist/icons/components/UiServices.js.map +1 -0
- package/dist/icons/components/UiSkipCircle.cjs +51 -0
- package/dist/icons/components/UiSkipCircle.cjs.map +1 -0
- package/dist/icons/components/UiSkipCircle.d.ts +15 -0
- package/dist/icons/components/UiSkipCircle.d.ts.map +1 -0
- package/dist/icons/components/UiSkipCircle.js +48 -0
- package/dist/icons/components/UiSkipCircle.js.map +1 -0
- package/dist/icons/components/UiTaskBatch.cjs +33 -0
- package/dist/icons/components/UiTaskBatch.cjs.map +1 -0
- package/dist/icons/components/UiTaskBatch.d.ts +9 -0
- package/dist/icons/components/UiTaskBatch.d.ts.map +1 -0
- package/dist/icons/components/UiTaskBatch.js +31 -0
- package/dist/icons/components/UiTaskBatch.js.map +1 -0
- package/dist/icons/components/UiTodoList.cjs +29 -0
- package/dist/icons/components/UiTodoList.cjs.map +1 -0
- package/dist/icons/components/UiTodoList.d.ts +9 -0
- package/dist/icons/components/UiTodoList.d.ts.map +1 -0
- package/dist/icons/components/UiTodoList.js +27 -0
- package/dist/icons/components/UiTodoList.js.map +1 -0
- package/dist/icons/components/UiTrayArrowDown.cjs +51 -0
- package/dist/icons/components/UiTrayArrowDown.cjs.map +1 -0
- package/dist/icons/components/UiTrayArrowDown.d.ts +15 -0
- package/dist/icons/components/UiTrayArrowDown.d.ts.map +1 -0
- package/dist/icons/components/UiTrayArrowDown.js +48 -0
- package/dist/icons/components/UiTrayArrowDown.js.map +1 -0
- package/dist/icons/components/UiVault.cjs +51 -0
- package/dist/icons/components/UiVault.cjs.map +1 -0
- package/dist/icons/components/UiVault.d.ts +15 -0
- package/dist/icons/components/UiVault.d.ts.map +1 -0
- package/dist/icons/components/UiVault.js +48 -0
- package/dist/icons/components/UiVault.js.map +1 -0
- package/dist/icons/components/UiWebServiceDefinition.cjs +39 -0
- package/dist/icons/components/UiWebServiceDefinition.cjs.map +1 -0
- package/dist/icons/components/UiWebServiceDefinition.d.ts +9 -0
- package/dist/icons/components/UiWebServiceDefinition.d.ts.map +1 -0
- package/dist/icons/components/UiWebServiceDefinition.js +37 -0
- package/dist/icons/components/UiWebServiceDefinition.js.map +1 -0
- package/dist/icons/components/UiWebhook.cjs +29 -0
- package/dist/icons/components/UiWebhook.cjs.map +1 -0
- package/dist/icons/components/UiWebhook.d.ts +9 -0
- package/dist/icons/components/UiWebhook.d.ts.map +1 -0
- package/dist/icons/components/UiWebhook.js +27 -0
- package/dist/icons/components/UiWebhook.js.map +1 -0
- package/dist/icons/components/UiWebhookLine.cjs +51 -0
- package/dist/icons/components/UiWebhookLine.cjs.map +1 -0
- package/dist/icons/components/UiWebhookLine.d.ts +15 -0
- package/dist/icons/components/UiWebhookLine.d.ts.map +1 -0
- package/dist/icons/components/UiWebhookLine.js +48 -0
- package/dist/icons/components/UiWebhookLine.js.map +1 -0
- package/dist/icons/index.d.ts +58 -0
- package/dist/icons/index.d.ts.map +1 -1
- package/dist/icons/registry.cjs +90 -0
- package/dist/icons/registry.cjs.map +1 -1
- package/dist/icons/registry.d.ts.map +1 -1
- package/dist/icons/registry.js +90 -0
- package/dist/icons/registry.js.map +1 -1
- package/dist/icons.cjs +103 -0
- package/dist/icons.js +46 -1
- package/dist/index.cjs +128 -3
- package/dist/index.js +59 -4
- package/dist/overlay/DropdownMenu.cjs +17 -14
- package/dist/overlay/DropdownMenu.cjs.map +1 -1
- package/dist/overlay/DropdownMenu.d.ts +1 -0
- package/dist/overlay/DropdownMenu.d.ts.map +1 -1
- package/dist/overlay/DropdownMenu.js +18 -15
- package/dist/overlay/DropdownMenu.js.map +1 -1
- package/dist/rpc/EntityExplorerApp.cjs +49 -12
- package/dist/rpc/EntityExplorerApp.cjs.map +1 -1
- package/dist/rpc/EntityExplorerApp.d.ts +10 -1
- package/dist/rpc/EntityExplorerApp.d.ts.map +1 -1
- package/dist/rpc/EntityExplorerApp.js +51 -14
- package/dist/rpc/EntityExplorerApp.js.map +1 -1
- package/dist/rpc/EntitySurface.cjs +38 -0
- package/dist/rpc/EntitySurface.cjs.map +1 -0
- package/dist/rpc/EntitySurface.d.ts +17 -0
- package/dist/rpc/EntitySurface.d.ts.map +1 -0
- package/dist/rpc/EntitySurface.js +38 -0
- package/dist/rpc/EntitySurface.js.map +1 -0
- package/dist/rpc/ExplorerNav.cjs +48 -0
- package/dist/rpc/ExplorerNav.cjs.map +1 -0
- package/dist/rpc/ExplorerNav.d.ts +12 -0
- package/dist/rpc/ExplorerNav.d.ts.map +1 -0
- package/dist/rpc/ExplorerNav.js +48 -0
- package/dist/rpc/ExplorerNav.js.map +1 -0
- package/dist/rpc/explorer-nav-context.cjs +5 -0
- package/dist/rpc/explorer-nav-context.cjs.map +1 -0
- package/dist/rpc/explorer-nav-context.d.ts +11 -0
- package/dist/rpc/explorer-nav-context.d.ts.map +1 -0
- package/dist/rpc/explorer-nav-context.js +6 -0
- package/dist/rpc/explorer-nav-context.js.map +1 -0
- package/dist/rpc.cjs +4 -0
- package/dist/rpc.d.ts +2 -0
- package/dist/rpc.d.ts.map +1 -1
- package/dist/rpc.js +3 -1
- package/dist/styles.css +1 -1
- package/package.json +6 -1
|
@@ -38,7 +38,7 @@ var CATEGORY_ICON = {
|
|
|
38
38
|
};
|
|
39
39
|
var ROW_HEIGHT = 28;
|
|
40
40
|
var NAME_COLUMN = "minmax(15rem, 36%) minmax(0, 1fr)";
|
|
41
|
-
function OtelTraceDetail({ trace: TRACE, selectedSpanId, onSelectSpan }) {
|
|
41
|
+
function OtelTraceDetail({ trace: TRACE, selectedSpanId, onSelectSpan, renderTitle }) {
|
|
42
42
|
const index = (0, react.useMemo)(() => require_model.indexTrace(TRACE), [TRACE]);
|
|
43
43
|
const suspects = (0, react.useMemo)(() => require_model.misparented(index), [index]);
|
|
44
44
|
const selected = selectedSpanId ?? TRACE.spans[0]?.spanId ?? "";
|
|
@@ -99,7 +99,11 @@ function OtelTraceDetail({ trace: TRACE, selectedSpanId, onSelectSpan }) {
|
|
|
99
99
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
|
|
100
100
|
className: "space-y-4 rounded-xl border border-border bg-background p-density-4",
|
|
101
101
|
children: [
|
|
102
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
102
|
+
renderTitle ? renderTitle(/* @__PURE__ */ (0, react_jsx_runtime.jsx)(TraceTitle, {
|
|
103
|
+
trace: TRACE,
|
|
104
|
+
compact: true
|
|
105
|
+
})) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TraceTitle, { trace: TRACE }),
|
|
106
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(TraceStats, {
|
|
103
107
|
index,
|
|
104
108
|
trace: TRACE
|
|
105
109
|
}),
|
|
@@ -191,7 +195,69 @@ function OtelTraceDetail({ trace: TRACE, selectedSpanId, onSelectSpan }) {
|
|
|
191
195
|
})
|
|
192
196
|
});
|
|
193
197
|
}
|
|
194
|
-
function
|
|
198
|
+
function TraceTitle({ trace: { summary }, compact }) {
|
|
199
|
+
const status = summary.errors === 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Badge.Badge, {
|
|
200
|
+
tone: "success",
|
|
201
|
+
variant: "soft",
|
|
202
|
+
children: "no errors"
|
|
203
|
+
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_Badge.Badge, {
|
|
204
|
+
tone: "danger",
|
|
205
|
+
variant: "soft",
|
|
206
|
+
children: [summary.errors, " errors"]
|
|
207
|
+
});
|
|
208
|
+
const meta = /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
|
|
209
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("code", { children: summary.traceId }),
|
|
210
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_CopyButton.CopyButton, {
|
|
211
|
+
value: summary.traceId,
|
|
212
|
+
label: "Copy trace ID"
|
|
213
|
+
}),
|
|
214
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", { children: [
|
|
215
|
+
"· ",
|
|
216
|
+
summary.services.join(", "),
|
|
217
|
+
" · ",
|
|
218
|
+
new Date(summary.startedAt).toLocaleString()
|
|
219
|
+
] })
|
|
220
|
+
] });
|
|
221
|
+
if (compact) return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
222
|
+
className: "flex min-w-0 flex-1 items-center gap-density-2",
|
|
223
|
+
children: [
|
|
224
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("h1", {
|
|
225
|
+
className: "flex min-w-0 items-center gap-2 text-base font-semibold tracking-tight",
|
|
226
|
+
title: summary.operation,
|
|
227
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_SpanCategory.Tinted, {
|
|
228
|
+
icon: require_UiRobotAi.UiRobotAi,
|
|
229
|
+
color: require_model.CATEGORY_COLOR.agent
|
|
230
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
231
|
+
className: "min-w-0 truncate",
|
|
232
|
+
children: require_model.shortOperation(summary.operation)
|
|
233
|
+
})]
|
|
234
|
+
}),
|
|
235
|
+
status,
|
|
236
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
237
|
+
className: "hidden min-w-0 items-center gap-2 truncate text-xs text-muted-foreground lg:flex",
|
|
238
|
+
children: meta
|
|
239
|
+
})
|
|
240
|
+
]
|
|
241
|
+
});
|
|
242
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
243
|
+
className: "min-w-0 space-y-1",
|
|
244
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("h2", {
|
|
245
|
+
className: "flex items-center gap-2 text-xl font-semibold tracking-tight",
|
|
246
|
+
children: [
|
|
247
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_SpanCategory.Tinted, {
|
|
248
|
+
icon: require_UiRobotAi.UiRobotAi,
|
|
249
|
+
color: require_model.CATEGORY_COLOR.agent
|
|
250
|
+
}),
|
|
251
|
+
require_model.shortOperation(summary.operation),
|
|
252
|
+
status
|
|
253
|
+
]
|
|
254
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
255
|
+
className: "flex flex-wrap items-center gap-2 text-xs text-muted-foreground",
|
|
256
|
+
children: meta
|
|
257
|
+
})]
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
function TraceStats({ index, trace: TRACE }) {
|
|
195
261
|
const { summary } = TRACE;
|
|
196
262
|
const by = (c) => TRACE.spans.filter((span) => require_model.category(span) === c);
|
|
197
263
|
const llm = by("llm");
|
|
@@ -206,81 +272,39 @@ function TraceHeader({ index, trace: TRACE }) {
|
|
|
206
272
|
const tokensIn = sum(llm, "gen_ai.usage.input_tokens");
|
|
207
273
|
const tokensOut = sum(llm, "gen_ai.usage.output_tokens");
|
|
208
274
|
const ms = (spans) => spans.reduce((total, span) => total + span.durationMs, 0);
|
|
209
|
-
return /* @__PURE__ */ (0, react_jsx_runtime.
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
"· ",
|
|
243
|
-
summary.services.join(", "),
|
|
244
|
-
" · ",
|
|
245
|
-
new Date(summary.startedAt).toLocaleString()
|
|
246
|
-
] })
|
|
247
|
-
]
|
|
248
|
-
})]
|
|
249
|
-
})
|
|
250
|
-
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_StatStrip.StatStrip, { items: [
|
|
251
|
-
{
|
|
252
|
-
label: "Duration",
|
|
253
|
-
value: require_model.duration(summary.durationMs),
|
|
254
|
-
sub: `${summary.spanCount} spans`,
|
|
255
|
-
icon: require_UiClock.UiClock
|
|
256
|
-
},
|
|
257
|
-
{
|
|
258
|
-
label: "LLM",
|
|
259
|
-
value: require_model.duration(ms(llm)),
|
|
260
|
-
sub: `${llm.length} calls · ${require_metrics.metric(tokensIn)} in / ${require_metrics.metric(tokensOut)} out`,
|
|
261
|
-
icon: require_UiSparkles.UiSparkles
|
|
262
|
-
},
|
|
263
|
-
{
|
|
264
|
-
label: "Database",
|
|
265
|
-
value: require_model.duration(ms(db)),
|
|
266
|
-
sub: `${db.length} calls · ${new Set(db.map((span) => span.attributes?.["db.sql.table"])).size} tables`,
|
|
267
|
-
icon: require_UiDatabase.UiDatabase
|
|
268
|
-
},
|
|
269
|
-
{
|
|
270
|
-
label: "Cost",
|
|
271
|
-
value: require_metrics.metric(cost, (value) => `$${value.toFixed(4)}`),
|
|
272
|
-
sub: budget ? `of $${budget} budget` : "budget unavailable",
|
|
273
|
-
icon: require_UiCoins.UiCoins
|
|
274
|
-
},
|
|
275
|
-
{
|
|
276
|
-
label: "Root self-time",
|
|
277
|
-
value: require_model.duration(require_model.selfTimeMs(index, root)),
|
|
278
|
-
sub: "not covered by any child span",
|
|
279
|
-
icon: require_UiRobotAi.UiRobotAi,
|
|
280
|
-
tone: "warning"
|
|
281
|
-
}
|
|
282
|
-
] })]
|
|
283
|
-
});
|
|
275
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_StatStrip.StatStrip, { items: [
|
|
276
|
+
{
|
|
277
|
+
label: "Duration",
|
|
278
|
+
value: require_model.duration(summary.durationMs),
|
|
279
|
+
sub: `${summary.spanCount} spans`,
|
|
280
|
+
icon: require_UiClock.UiClock
|
|
281
|
+
},
|
|
282
|
+
{
|
|
283
|
+
label: "LLM",
|
|
284
|
+
value: require_model.duration(ms(llm)),
|
|
285
|
+
sub: `${llm.length} calls · ${require_metrics.metric(tokensIn)} in / ${require_metrics.metric(tokensOut)} out`,
|
|
286
|
+
icon: require_UiSparkles.UiSparkles
|
|
287
|
+
},
|
|
288
|
+
{
|
|
289
|
+
label: "Database",
|
|
290
|
+
value: require_model.duration(ms(db)),
|
|
291
|
+
sub: `${db.length} calls · ${new Set(db.map((span) => span.attributes?.["db.sql.table"])).size} tables`,
|
|
292
|
+
icon: require_UiDatabase.UiDatabase
|
|
293
|
+
},
|
|
294
|
+
{
|
|
295
|
+
label: "Cost",
|
|
296
|
+
value: require_metrics.metric(cost, (value) => `$${value.toFixed(4)}`),
|
|
297
|
+
sub: budget ? `of $${budget} budget` : "budget unavailable",
|
|
298
|
+
icon: require_UiCoins.UiCoins
|
|
299
|
+
},
|
|
300
|
+
{
|
|
301
|
+
label: "Root self-time",
|
|
302
|
+
value: require_model.duration(require_model.selfTimeMs(index, root)),
|
|
303
|
+
sub: "not covered by any child span",
|
|
304
|
+
icon: require_UiRobotAi.UiRobotAi,
|
|
305
|
+
tone: "warning"
|
|
306
|
+
}
|
|
307
|
+
] });
|
|
284
308
|
}
|
|
285
309
|
function Toolbar(props) {
|
|
286
310
|
const counts = props.trace.spans.reduce((acc, span) => ({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OtelTraceDetail.cjs","names":["UiRobotAi","UiSparkles","UiDatabase","UiClock","useMemo","indexTrace","misparented","useState","buildRows","category","withAncestors","Callout","shortOperation","Button","SplitPane","GroupDetail","num","Tinted","CATEGORY_COLOR","Badge","CopyButton","StatStrip","duration","metric","UiCoins","selfTimeMs","SearchInput","CATEGORY_LABEL","Switch","Icon","UiExpandAll","UiCollapseAll","niceStep","useRef","UiChevronDown","UiChevronRight","_Fragment","UiWarningTriangle","isError","AgentCard","LlmCard","DbCard","Section","Properties","CodeBlock"],"sources":["../../../../src/data/traces/otel/OtelTraceDetail.tsx"],"sourcesContent":["import { Tinted } from \"./SpanCategory\";\nimport { AgentCard, LlmCard, DbCard, GroupDetail } from \"./SpanCards\";\nimport { metric } from \"./metrics\";\nimport { StatStrip } from \"../../StatStrip\";\nimport { Icon } from \"../../Icon\";\nimport { Callout } from \"../../Callout\";\nimport { Badge } from \"../../Badge\";\nimport { CodeBlock } from \"../../CodeBlock\";\nimport { Properties } from \"../../Properties\";\n/**\n * OpenTelemetry waterfall with grouped calls and an adjacent span inspector.\n */\nimport { useEffect, useMemo, useRef, useState, type KeyboardEvent } from \"react\";\nimport {\n Button,\n CopyButton,\n SearchInput,\n Section,\n SplitPane,\n Switch,\n} from \"../../../components\";\nimport {\n UiChevronDown,\n UiChevronRight,\n UiClock,\n UiCoins,\n UiCollapseAll,\n UiDatabase,\n UiExpandAll,\n UiRobotAi,\n UiSparkles,\n UiWarningTriangle,\n} from \"../../../icons\";\n\n\nimport {\n CATEGORY_COLOR,\n CATEGORY_LABEL,\n buildRows,\n category,\n duration,\n indexTrace,\n isError,\n misparented,\n niceStep,\n num,\n selfTimeMs,\n shortOperation,\n withAncestors,\n type Category,\n type Row,\n type Span,\n type TraceIndex,\n type Trace,\n} from \"./model\";\n\nconst CATEGORY_ICON = { agent: UiRobotAi, llm: UiSparkles, db: UiDatabase, other: UiClock } as const;\nconst ROW_HEIGHT = 28;\n\nconst NAME_COLUMN = \"minmax(15rem, 36%) minmax(0, 1fr)\";\n\n\nexport function OtelTraceDetail({ trace: TRACE, selectedSpanId, onSelectSpan }: { trace: Trace; selectedSpanId?: string; onSelectSpan: (id: string) => void }) {\n const index = useMemo(() => indexTrace(TRACE), [TRACE]);\n const suspects = useMemo(() => misparented(index), [index]);\n const selected = selectedSpanId ?? TRACE.spans[0]?.spanId ?? \"\";\n const [collapsed, setCollapsed] = useState(new Set<string>());\n const groupOf = (id: string) => buildRows(index, { collapsed: new Set(), expanded: new Set(), group: true }).find(row => row.type === \"group\" && row.spans.some(span => span.spanId === id))?.id;\n const [expanded, setExpanded] = useState(() => new Set([groupOf(selected)].filter(id => id !== undefined)));\n const [group, setGroup] = useState(true);\n const [query, setQuery] = useState(\"\");\n const [categories, setCategories] = useState(new Set<Category>());\n const [onlySuspects, setOnlySuspects] = useState(false);\n\n const visible = useMemo(() => {\n const q = query.trim().toLowerCase();\n if (!q && categories.size === 0 && !onlySuspects) return undefined;\n const hits = TRACE.spans.filter(span =>\n (!q || [span.operation, span.service, ...Object.values(span.attributes ?? {}).map(String)].some(text => text.toLowerCase().includes(q))) &&\n (categories.size === 0 || categories.has(category(span))) &&\n (!onlySuspects || suspects.has(span.spanId)));\n return withAncestors(index, hits.map(span => span.spanId));\n }, [index, query, categories, onlySuspects, suspects, TRACE]);\n\n const rows = useMemo(() => buildRows(index, { collapsed, expanded, group, ...(visible ? { visible } : {}) }), [index, collapsed, expanded, group, visible]);\n\n const select = (id: string) => {\n const group = groupOf(id);\n if (group) setExpanded(previous => new Set(previous).add(group));\n onSelectSpan(id);\n };\n const toggle = (set: typeof setCollapsed, id: string) => set(previous => {\n const next = new Set(previous);\n if (!next.delete(id)) next.add(id);\n return next;\n });\n\n const selectedSpan = index.byId.get(selected);\n const selectedGroup = rows.find((row): row is Extract<Row, { type: \"group\" }> => row.type === \"group\" && row.id === selected);\n\n return (\n <div className=\"space-y-8\">\n <section className=\"space-y-4 rounded-xl border border-border bg-background p-density-4\">\n <TraceHeader index={index} trace={TRACE} />\n {TRACE.missingParents.length > 0 && <p role=\"status\">Partial trace: {TRACE.missingParents.length} parent spans are missing from this source.</p>}\n {suspects.size > 0 && (\n <Callout variant=\"warning\" title={`${suspects.size} spans run inside a nested agent but hang off its parent`}>\n <p className=\"text-sm\">\n They start and end within <code>{shortOperation(suspects.values().next().value!.operation)}</code>, yet their parent is the root span, so the nested agent looks like it made a single LLM call. This usually means the agent's context is not propagated to its database client.{\" \"}\n <Button size=\"sm\" variant=\"link\" className=\"h-auto p-0\" onClick={() => setOnlySuspects(on => !on)}>{onlySuspects ? \"Show all spans\" : \"Show only these spans\"}</Button>\n </p>\n </Callout>\n )}\n <Toolbar\n trace={TRACE}\n query={query}\n setQuery={setQuery}\n categories={categories}\n toggleCategory={c => setCategories(previous => {\n const next = new Set(previous);\n if (!next.delete(c)) next.add(c);\n return next;\n })}\n group={group}\n setGroup={setGroup}\n expandAll={() => {\n setCollapsed(new Set());\n setExpanded(new Set(rows.filter(row => row.type === \"group\").map(row => row.id)));\n }}\n collapseAll={() => {\n setExpanded(new Set());\n setCollapsed(new Set(TRACE.spans.filter(span => index.children.has(span.spanId) && !span.parentId).map(span => span.spanId)));\n }}\n shown={rows.length}\n />\n <SplitPane\n stackOnMobile\n defaultSplit={62}\n minLeft={40}\n minRight={25}\n className=\"rounded-lg border border-border\"\n left={<Waterfall index={index} rows={rows} selected={selected} onSelect={select} suspects={suspects} onToggleSpan={id => toggle(setCollapsed, id)} onToggleGroup={id => toggle(setExpanded, id)} expanded={expanded} collapsed={collapsed} />}\n right={\n <div className=\"h-72 overflow-auto p-density-3 md:h-[calc(100dvh-14rem)] md:min-h-[30rem]\">\n {selectedGroup ? <GroupDetail index={index} spans={selectedGroup.spans} onSelect={select} />\n : selectedSpan ? <SpanDetail index={index} span={selectedSpan} host={suspects.get(selectedSpan.spanId)} onSelect={select} />\n : <p className=\"text-sm text-muted-foreground\">Select a span.</p>}\n </div>\n }\n />\n </section>\n </div>\n );\n}\n\nfunction TraceHeader({ index, trace: TRACE }: { index: TraceIndex; trace: Trace }) {\n const { summary } = TRACE;\n const by = (c: Category) => TRACE.spans.filter(span => category(span) === c);\n const llm = by(\"llm\");\n const db = by(\"db\");\n const sum = (spans: Span[], key: string) => { const values = spans.map(span => num(span.attributes?.[key])).filter(value => value !== undefined); return values.length ? values.reduce((total, value) => total + value, 0) : undefined; };\n const root = index.roots[0]!;\n const cost = num(root.attributes?.[\"captain.cost_usd\"]);\n const budget = num(root.attributes?.[\"captain.budget.cost_usd\"]);\n const tokensIn = sum(llm, \"gen_ai.usage.input_tokens\");\n const tokensOut = sum(llm, \"gen_ai.usage.output_tokens\");\n const ms = (spans: Span[]) => spans.reduce((total, span) => total + span.durationMs, 0);\n return (\n <div className=\"space-y-3\">\n <div className=\"flex flex-wrap items-start justify-between gap-3\">\n <div className=\"min-w-0 space-y-1\">\n \n <h2 className=\"flex items-center gap-2 text-xl font-semibold tracking-tight\">\n <Tinted icon={UiRobotAi} color={CATEGORY_COLOR.agent} />\n {shortOperation(summary.operation)}\n {summary.errors === 0 ? <Badge tone=\"success\" variant=\"soft\">no errors</Badge> : <Badge tone=\"danger\" variant=\"soft\">{summary.errors} errors</Badge>}\n </h2>\n <p className=\"flex flex-wrap items-center gap-2 text-xs text-muted-foreground\">\n <code>{summary.traceId}</code>\n <CopyButton value={summary.traceId} label=\"Copy trace ID\" />\n <span>· {summary.services.join(\", \")} · {new Date(summary.startedAt).toLocaleString()}</span>\n </p>\n </div>\n </div>\n <StatStrip\n items={[\n { label: \"Duration\", value: duration(summary.durationMs), sub: `${summary.spanCount} spans`, icon: UiClock },\n { label: \"LLM\", value: duration(ms(llm)), sub: `${llm.length} calls · ${metric(tokensIn)} in / ${metric(tokensOut)} out`, icon: UiSparkles },\n { label: \"Database\", value: duration(ms(db)), sub: `${db.length} calls · ${new Set(db.map(span => span.attributes?.[\"db.sql.table\"])).size} tables`, icon: UiDatabase },\n { label: \"Cost\", value: metric(cost, value => `$${value.toFixed(4)}`), sub: budget ? `of $${budget} budget` : \"budget unavailable\", icon: UiCoins },\n { label: \"Root self-time\", value: duration(selfTimeMs(index, root)), sub: \"not covered by any child span\", icon: UiRobotAi, tone: \"warning\" },\n ]}\n />\n </div>\n );\n}\n\nfunction Toolbar(props: {\n trace: Trace;\n query: string; setQuery: (q: string) => void;\n categories: Set<Category>; toggleCategory: (c: Category) => void;\n group: boolean; setGroup: (on: boolean) => void;\n expandAll: () => void; collapseAll: () => void; shown: number;\n}) {\n const counts = props.trace.spans.reduce((acc, span) => ({ ...acc, [category(span)]: (acc[category(span)] ?? 0) + 1 }), {} as Partial<Record<Category, number>>);\n return (\n <div className=\"flex flex-wrap items-center gap-2\">\n <SearchInput className=\"w-72\" placeholder=\"Filter by name, table or attribute\" value={props.query} onChange={props.setQuery} />\n {(Object.keys(counts) as Category[]).map(c => {\n const on = props.categories.has(c);\n return (\n <Button key={c} size=\"sm\" variant={on ? \"default\" : \"outline\"} aria-pressed={on} onClick={() => props.toggleCategory(c)}>\n <span className=\"mr-1.5 inline-block size-2 rounded-full\" style={{ background: CATEGORY_COLOR[c] }} />\n {CATEGORY_LABEL[c]} <span className=\"ml-1 text-muted-foreground\">{counts[c]}</span>\n </Button>\n );\n })}\n <label className=\"ml-2 inline-flex items-center gap-2 text-xs text-muted-foreground\">\n <Switch checked={props.group} aria-label=\"Group repeated database calls\" onChange={props.setGroup} />\n Group repeated DB calls\n </label>\n <div className=\"ml-auto flex items-center gap-1\">\n <span className=\"mr-2 text-xs text-muted-foreground\">{props.shown} rows</span>\n <Button size=\"sm\" variant=\"ghost\" onClick={props.expandAll}><Icon icon={UiExpandAll} className=\"mr-1\" />Expand all</Button>\n <Button size=\"sm\" variant=\"ghost\" onClick={props.collapseAll}><Icon icon={UiCollapseAll} className=\"mr-1\" />Collapse</Button>\n </div>\n </div>\n );\n}\n\nfunction Waterfall(props: {\n index: TraceIndex; rows: Row[]; selected: string; onSelect: (id: string) => void; suspects: Map<string, Span>;\n onToggleSpan: (id: string) => void; onToggleGroup: (id: string) => void; expanded: Set<string>; collapsed: Set<string>;\n}) {\n const { index, rows, selected, onSelect } = props;\n const total = Math.max(index.totalMs, 0.001);\n const step = niceStep(total);\n const ticks = Array.from({ length: Math.floor(total / step) + 1 }, (_, i) => i * step);\n const scroller = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n scroller.current?.querySelector<HTMLElement>(`[data-row-id=\"${CSS.escape(selected)}\"]`)?.scrollIntoView?.({ block: \"nearest\" });\n }, [selected]);\n\n const onKey = (event: KeyboardEvent) => {\n const at = rows.findIndex(row => row.id === selected);\n const next = event.key === \"ArrowDown\" ? rows[at + 1] : event.key === \"ArrowUp\" ? rows[at - 1] : undefined;\n const row = rows[at];\n if (next) onSelect(next.id);\n else if (row && (event.key === \"ArrowRight\" || event.key === \"ArrowLeft\")) {\n const open = row.type === \"group\" ? props.expanded.has(row.id) : !props.collapsed.has(row.id);\n const want = event.key === \"ArrowRight\";\n if (open !== want && (row.type === \"group\" || row.childCount > 0)) (row.type === \"group\" ? props.onToggleGroup : props.onToggleSpan)(row.id);\n } else return;\n event.preventDefault();\n };\n\n const pct = (ms: number) => `${(ms / total) * 100}%`;\n return (\n <div ref={scroller} tabIndex={0} onKeyDown={onKey} aria-label=\"Span waterfall\" className=\"h-72 overflow-auto text-xs outline-none focus-visible:ring-2 focus-visible:ring-ring md:h-[calc(100dvh-14rem)] md:min-h-[30rem]\">\n <div className=\"min-w-[40rem]\">\n <div className=\"sticky top-0 z-10 grid border-b border-border bg-muted text-muted-foreground\" style={{ gridTemplateColumns: NAME_COLUMN, height: ROW_HEIGHT }}>\n <div className=\"flex items-center px-density-2 font-medium\">Span</div>\n <div className=\"relative mr-12\">\n {ticks.map(t => <span key={t} className=\"absolute top-1.5 -translate-x-1/2 tabular-nums\" style={{ left: pct(t) }}>{t === 0 ? \"0\" : duration(t)}</span>)}\n </div>\n </div>\n <div className=\"relative\">\n <div aria-hidden className=\"pointer-events-none absolute inset-y-0 grid\" style={{ gridTemplateColumns: NAME_COLUMN, left: 0, right: 0 }}>\n <div />\n <div className=\"relative mr-12\">{ticks.map(t => <span key={t} className=\"absolute inset-y-0 border-l border-border\" style={{ left: pct(t), opacity: 0.6 }} />)}</div>\n </div>\n {rows.map(row => <WaterfallRow key={row.id} {...props} row={row} pct={pct} active={row.id === selected} />)}\n {rows.length === 0 && <p className=\"p-density-4 text-sm text-muted-foreground\">No spans match these filters.</p>}\n </div>\n </div>\n </div>\n );\n}\n\nfunction WaterfallRow({ index, row, active, pct, onSelect, suspects, onToggleSpan, onToggleGroup, expanded, collapsed }: Parameters<typeof Waterfall>[0] & { row: Row; active: boolean; pct: (ms: number) => string }) {\n const indent = { paddingLeft: `${row.depth * 14 + 4}px` };\n const toggleButton = (open: boolean, onClick: () => void, label: string) => (\n <button type=\"button\" aria-label={`${open ? \"Collapse\" : \"Expand\"} ${label}`} className=\"flex size-5 shrink-0 items-center justify-center rounded text-muted-foreground hover:bg-muted\" onClick={event => { event.stopPropagation(); onClick(); }}>\n <Icon icon={open ? UiChevronDown : UiChevronRight} />\n </button>\n );\n const rowClass = `relative grid w-full cursor-pointer items-center text-left ${active ? \"bg-accent\" : \"hover:bg-muted\"}`;\n\n if (row.type === \"group\") {\n const open = expanded.has(row.id);\n const ops = Object.entries(row.spans.reduce<Record<string, number>>((acc, span) => ({ ...acc, [span.operation.replace(\"gorm.\", \"\")]: (acc[span.operation.replace(\"gorm.\", \"\")] ?? 0) + 1 }), {}));\n const first = index.offsetMs(row.spans[0]!);\n const last = row.spans.at(-1)!;\n const end = index.offsetMs(last) + last.durationMs;\n const busy = row.spans.reduce((total, span) => total + span.durationMs, 0);\n const suspectCount = row.spans.filter(span => suspects.has(span.spanId)).length;\n return (\n <div role=\"button\" tabIndex={-1} data-row-id={row.id} aria-selected={active} className={rowClass} style={{ gridTemplateColumns: NAME_COLUMN, height: ROW_HEIGHT }} onClick={() => onSelect(row.id)}>\n <div className=\"flex min-w-0 items-center gap-1 pr-2\" style={indent}>\n {toggleButton(open, () => onToggleGroup(row.id), \"database group\")}\n <Tinted icon={UiDatabase} color={CATEGORY_COLOR.db} />\n <span className=\"truncate\"><span className=\"font-medium\">{row.spans.length} DB calls</span> <span className=\"text-muted-foreground\">{ops.map(([op, n]) => `${op} ×${n}`).join(\", \")}</span></span>\n {suspectCount > 0 && <><Tinted icon={UiWarningTriangle} color=\"var(--fs-warning)\" label={`${suspectCount} calls run inside a nested agent but are parented elsewhere`} /><span className=\"text-muted-foreground\">{suspectCount}</span></>}\n </div>\n <div className=\"relative mr-12 h-full\">\n <span className=\"absolute rounded-sm\" style={{ left: pct(first), width: pct(end - first), top: 11, height: 6, background: CATEGORY_COLOR.db, opacity: 0.18 }} />\n {row.spans.map(span => <span key={span.spanId} className=\"absolute rounded-sm\" style={{ left: pct(index.offsetMs(span)), width: pct(span.durationMs), minWidth: 2, top: 8, height: 12, background: CATEGORY_COLOR.db }} />)}\n <BarLabel start={(first / Math.max(index.totalMs, 0.001)) * 100} end={(end / Math.max(index.totalMs, 0.001)) * 100} text={`${duration(busy)} busy`} />\n </div>\n </div>\n );\n }\n\n const { span } = row;\n const c = category(span);\n const parent = span.parentId ? index.byId.get(span.parentId) : undefined;\n const left = (index.offsetMs(span) / Math.max(index.totalMs, 0.001)) * 100;\n const width = (span.durationMs / Math.max(index.totalMs, 0.001)) * 100;\n const error = isError(span);\n const label = shortOperation(span.operation);\n const table = span.attributes?.[\"db.sql.table\"];\n return (\n <div role=\"button\" tabIndex={-1} data-row-id={row.id} aria-selected={active} className={rowClass} style={{ gridTemplateColumns: NAME_COLUMN, height: ROW_HEIGHT }} onClick={() => onSelect(row.id)} title={span.operation}>\n <div className=\"flex min-w-0 items-center gap-1 pr-2\" style={indent}>\n {row.childCount > 0 ? toggleButton(!collapsed.has(span.spanId), () => onToggleSpan(span.spanId), label) : <span className=\"size-5 shrink-0\" />}\n <Tinted icon={CATEGORY_ICON[c]} color={CATEGORY_COLOR[c]} />\n {parent && parent.service !== span.service && <Badge size=\"sm\" variant=\"outline\">{span.service}</Badge>}\n <span className={`truncate ${c === \"db\" ? \"\" : \"font-medium\"}`}>{label}</span>\n {typeof table === \"string\" && <span className=\"truncate text-muted-foreground\">{table}</span>}\n {row.childCount > 0 && collapsed.has(span.spanId) && <span className=\"text-muted-foreground\">+{row.childCount}</span>}\n {suspects.has(span.spanId) && <Tinted icon={UiWarningTriangle} color=\"var(--fs-warning)\" label=\"Runs inside a nested agent but is parented elsewhere\" />}\n {error && <Badge size=\"sm\" tone=\"danger\" variant=\"soft\">error</Badge>}\n </div>\n <div className=\"relative mr-12 h-full\">\n <span className=\"absolute rounded-sm\" style={{ left: `${left}%`, width: `${width}%`, minWidth: 2, top: 7, height: 14, background: error ? \"var(--destructive)\" : CATEGORY_COLOR[c], opacity: c === \"agent\" ? 0.85 : 1 }} />\n <BarLabel start={left} end={left + width} inside={width > 14} text={duration(span.durationMs)} />\n </div>\n </div>\n );\n}\n\n/** Duration next to the bar's end — or inside a wide bar — and flipped left of the start near the right edge. */\nfunction BarLabel({ start, end, inside, text }: { start: number; end: number; inside?: boolean; text: string }) {\n if (inside) return <span className=\"absolute top-1.5 px-1.5 font-medium text-white tabular-nums\" style={{ left: `${start}%` }}>{text}</span>;\n const position = end > 90 ? { right: `${100 - start}%`, paddingRight: 4 } : { left: `${end}%`, paddingLeft: 4 };\n return <span className=\"absolute top-1.5 whitespace-nowrap tabular-nums text-muted-foreground\" style={position}>{text}</span>;\n}\n\nfunction SpanDetail({ index, span, host, onSelect }: { index: TraceIndex; span: Span; host: Span | undefined; onSelect: (id: string) => void }) {\n const c = category(span);\n const ancestors: Span[] = [];\n for (let p = span.parentId ? index.byId.get(span.parentId) : undefined; p; p = p.parentId ? index.byId.get(p.parentId) : undefined) ancestors.unshift(p);\n const attributes = Object.entries(span.attributes ?? {});\n return (\n <div className=\"space-y-4\">\n <div className=\"space-y-1.5\">\n {ancestors.length > 0 && (\n <p className=\"flex flex-wrap items-center gap-1 text-xs text-muted-foreground\">\n {ancestors.map(a => (\n <span key={a.spanId} className=\"inline-flex items-center gap-1\">\n <button type=\"button\" className=\"hover:underline\" onClick={() => onSelect(a.spanId)}>{shortOperation(a.operation)}</button>\n <Icon icon={UiChevronRight} />\n </span>\n ))}\n </p>\n )}\n <h3 className=\"flex items-center gap-2 text-base font-semibold\" title={span.operation}>\n <Tinted icon={CATEGORY_ICON[c]} color={CATEGORY_COLOR[c]} />\n <span className=\"truncate\">{shortOperation(span.operation)}</span>\n </h3>\n <div className=\"flex flex-wrap items-center gap-1.5 text-xs\">\n <Badge variant=\"soft\" size=\"sm\">{CATEGORY_LABEL[c]}</Badge>\n {span.kind && <Badge variant=\"outline\" size=\"sm\">{span.kind}</Badge>}\n {isError(span) && <Badge tone=\"danger\" variant=\"soft\" size=\"sm\">error</Badge>}\n <span className=\"tabular-nums text-muted-foreground\">{duration(span.durationMs)} · starts at +{duration(index.offsetMs(span))}</span>\n <span className=\"ml-auto inline-flex items-center gap-1 text-muted-foreground\"><code>{span.spanId}</code><CopyButton value={span.spanId} label=\"Copy span ID\" /></span>\n </div>\n </div>\n {host && (\n <Callout variant=\"warning\" title=\"Likely mis-parented\">\n <p className=\"text-sm\">Runs entirely inside <button type=\"button\" className=\"underline\" onClick={() => onSelect(host.spanId)}>{shortOperation(host.operation)}</button> but its parent is {span.parentId ? shortOperation(index.byId.get(span.parentId)?.operation ?? span.parentId) : \"missing\"}.</p>\n </Callout>\n )}\n {c === \"agent\" && <AgentCard index={index} span={span} />}\n {c === \"llm\" && <LlmCard span={span} />}\n {c === \"db\" && <DbCard span={span} />}\n <Section title={`All attributes (${attributes.length})`} defaultOpen={c === \"other\"}>\n <Properties renderLabel={key => <code className=\"text-xs\">{key}</code>} items={attributes.map(([key, value]) => ({ key, value }))} />\n </Section>\n {span.otlp && <Section title=\"OpenTelemetry metadata\" defaultOpen={false}><CodeBlock language=\"json\" source={JSON.stringify(span.otlp, null, 2)} jsonDefaultOpenDepth={4} copyable /></Section>}\n <Section title={`Resource (${Object.keys(span.resource ?? {}).length})`} defaultOpen={false}>\n <Properties renderLabel={key => <code className=\"text-xs\">{key}</code>} items={Object.entries(span.resource ?? {}).map(([key, value]) => ({ key, value }))} />\n </Section>\n </div>\n );\n}\n\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwDA,IAAM,gBAAgB;CAAE,OAAOA,kBAAAA;CAAW,KAAKC,mBAAAA;CAAY,IAAIC,mBAAAA;CAAY,OAAOC,gBAAAA;AAAQ;AAC1F,IAAM,aAAa;AAEnB,IAAM,cAAc;AAGpB,SAAgB,gBAAgB,EAAE,OAAO,OAAO,gBAAgB,gBAA+F;CAC7J,MAAM,SAAA,GAAQC,MAAAA,QAAAA,OAAcC,cAAAA,WAAW,KAAK,GAAG,CAAC,KAAK,CAAC;CACtD,MAAM,YAAA,GAAWD,MAAAA,QAAAA,OAAcE,cAAAA,YAAY,KAAK,GAAG,CAAC,KAAK,CAAC;CAC1D,MAAM,WAAW,kBAAkB,MAAM,MAAM,EAAE,EAAE,UAAU;CAC7D,MAAM,CAAC,WAAW,iBAAA,GAAgBC,MAAAA,SAAAA,iBAAS,IAAI,IAAY,CAAC;CAC5D,MAAM,WAAW,OAAeC,cAAAA,UAAU,OAAO;EAAE,2BAAW,IAAI,IAAI;EAAG,0BAAU,IAAI,IAAI;EAAG,OAAO;CAAK,CAAC,CAAC,CAAC,MAAK,QAAO,IAAI,SAAS,WAAW,IAAI,MAAM,MAAK,SAAQ,KAAK,WAAW,EAAE,CAAC,CAAC,EAAE;CAC9L,MAAM,CAAC,UAAU,gBAAA,GAAeD,MAAAA,SAAAA,OAAe,IAAI,IAAI,CAAC,QAAQ,QAAQ,CAAC,CAAC,CAAC,QAAO,OAAM,OAAO,KAAA,CAAS,CAAC,CAAC;CAC1G,MAAM,CAAC,OAAO,aAAA,GAAYA,MAAAA,SAAAA,CAAS,IAAI;CACvC,MAAM,CAAC,OAAO,aAAA,GAAYA,MAAAA,SAAAA,CAAS,EAAE;CACrC,MAAM,CAAC,YAAY,kBAAA,GAAiBA,MAAAA,SAAAA,iBAAS,IAAI,IAAc,CAAC;CAChE,MAAM,CAAC,cAAc,oBAAA,GAAmBA,MAAAA,SAAAA,CAAS,KAAK;CAEtD,MAAM,WAAA,GAAUH,MAAAA,QAAAA,OAAc;EAC5B,MAAM,IAAI,MAAM,KAAK,CAAC,CAAC,YAAY;EACnC,IAAI,CAAC,KAAK,WAAW,SAAS,KAAK,CAAC,cAAc,OAAO,KAAA;EACzD,MAAM,OAAO,MAAM,MAAM,QAAO,UAC7B,CAAC,KAAK;GAAC,KAAK;GAAW,KAAK;GAAS,GAAG,OAAO,OAAO,KAAK,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM;EAAC,CAAC,CAAC,MAAK,SAAQ,KAAK,YAAY,CAAC,CAAC,SAAS,CAAC,CAAC,OACrI,WAAW,SAAS,KAAK,WAAW,IAAIK,cAAAA,SAAS,IAAI,CAAC,OACtD,CAAC,gBAAgB,SAAS,IAAI,KAAK,MAAM,EAAE;EAC9C,OAAOC,cAAAA,cAAc,OAAO,KAAK,KAAI,SAAQ,KAAK,MAAM,CAAC;CAC3D,GAAG;EAAC;EAAO;EAAO;EAAY;EAAc;EAAU;CAAK,CAAC;CAE5D,MAAM,QAAA,GAAON,MAAAA,QAAAA,OAAcI,cAAAA,UAAU,OAAO;EAAE;EAAW;EAAU;EAAO,GAAI,UAAU,EAAE,QAAQ,IAAI,CAAC;CAAG,CAAC,GAAG;EAAC;EAAO;EAAW;EAAU;EAAO;CAAO,CAAC;CAE1J,MAAM,UAAU,OAAe;EAC7B,MAAM,QAAQ,QAAQ,EAAE;EACxB,IAAI,OAAO,aAAY,aAAY,IAAI,IAAI,QAAQ,CAAC,CAAC,IAAI,KAAK,CAAC;EAC/D,aAAa,EAAE;CACjB;CACA,MAAM,UAAU,KAA0B,OAAe,KAAI,aAAY;EACvE,MAAM,OAAO,IAAI,IAAI,QAAQ;EAC7B,IAAI,CAAC,KAAK,OAAO,EAAE,GAAG,KAAK,IAAI,EAAE;EACjC,OAAO;CACT,CAAC;CAED,MAAM,eAAe,MAAM,KAAK,IAAI,QAAQ;CAC5C,MAAM,gBAAgB,KAAK,MAAM,QAAgD,IAAI,SAAS,WAAW,IAAI,OAAO,QAAQ;CAE5H,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;EAAK,WAAU;EACb,UAAA,iBAAA,GAAA,kBAAA,KAAA,CAAC,WAAD;GAAS,WAAU;GAAnB,UAAA;IACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,aAAD;KAAoB;KAAO,OAAO;IAAQ,CAAA;IACzC,MAAM,eAAe,SAAS,KAAK,iBAAA,GAAA,kBAAA,KAAA,CAAC,KAAD;KAAG,MAAK;KAAR,UAAA;MAAiB;MAAgB,MAAM,eAAe;MAAO;KAA8C;;IAC9I,SAAS,OAAO,KACf,iBAAA,GAAA,kBAAA,IAAA,CAACG,gBAAAA,SAAD;KAAS,SAAQ;KAAU,OAAO,GAAG,SAAS,KAAK;KACjD,UAAA,iBAAA,GAAA,kBAAA,KAAA,CAAC,KAAD;MAAG,WAAU;MAAb,UAAA;OAAuB;OACK,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAA,UAAOC,cAAAA,eAAe,SAAS,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,MAAO,SAAS,EAAQ,CAAA;OAAC;OAAgL;OAClR,iBAAA,GAAA,kBAAA,IAAA,CAACC,eAAAA,QAAD;QAAQ,MAAK;QAAK,SAAQ;QAAO,WAAU;QAAa,eAAe,iBAAgB,OAAM,CAAC,EAAE;QAAI,UAAA,eAAe,mBAAmB;OAAgC,CAAA;MACrK;;IACI,CAAA;IAEX,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;KACE,OAAO;KACA;KACG;KACE;KACZ,iBAAgB,MAAK,eAAc,aAAY;MAC7C,MAAM,OAAO,IAAI,IAAI,QAAQ;MAC7B,IAAI,CAAC,KAAK,OAAO,CAAC,GAAG,KAAK,IAAI,CAAC;MAC/B,OAAO;KACT,CAAC;KACM;KACG;KACV,iBAAiB;MACf,6BAAa,IAAI,IAAI,CAAC;MACtB,YAAY,IAAI,IAAI,KAAK,QAAO,QAAO,IAAI,SAAS,OAAO,CAAC,CAAC,KAAI,QAAO,IAAI,EAAE,CAAC,CAAC;KAClF;KACA,mBAAmB;MACjB,4BAAY,IAAI,IAAI,CAAC;MACrB,aAAa,IAAI,IAAI,MAAM,MAAM,QAAO,SAAQ,MAAM,SAAS,IAAI,KAAK,MAAM,KAAK,CAAC,KAAK,QAAQ,CAAC,CAAC,KAAI,SAAQ,KAAK,MAAM,CAAC,CAAC;KAC9H;KACA,OAAO,KAAK;IACb,CAAA;IACD,iBAAA,GAAA,kBAAA,IAAA,CAACC,kBAAAA,WAAD;KACE,eAAA;KACA,cAAc;KACd,SAAS;KACT,UAAU;KACV,WAAU;KACV,MAAM,iBAAA,GAAA,kBAAA,IAAA,CAAC,WAAD;MAAkB;MAAa;MAAgB;MAAU,UAAU;MAAkB;MAAU,eAAc,OAAM,OAAO,cAAc,EAAE;MAAG,gBAAe,OAAM,OAAO,aAAa,EAAE;MAAa;MAAqB;KAAY,CAAA;KAC5O,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;MAAK,WAAU;MACZ,UAAA,gBAAgB,iBAAA,GAAA,kBAAA,IAAA,CAACC,kBAAAA,aAAD;OAAoB;OAAO,OAAO,cAAc;OAAO,UAAU;MAAS,CAAA,IACvF,eAAe,iBAAA,GAAA,kBAAA,IAAA,CAAC,YAAD;OAAmB;OAAO,MAAM;OAAc,MAAM,SAAS,IAAI,aAAa,MAAM;OAAG,UAAU;MAAS,CAAA,IACzH,iBAAA,GAAA,kBAAA,IAAA,CAAC,KAAD;OAAG,WAAU;OAAgC,UAAA;MAAiB,CAAA;KAC/D,CAAA;IAER,CAAA;GACM;;CACN,CAAA;AAET;AAEA,SAAS,YAAY,EAAE,OAAO,OAAO,SAA8C;CACjF,MAAM,EAAE,YAAY;CACpB,MAAM,MAAM,MAAgB,MAAM,MAAM,QAAO,SAAQN,cAAAA,SAAS,IAAI,MAAM,CAAC;CAC3E,MAAM,MAAM,GAAG,KAAK;CACpB,MAAM,KAAK,GAAG,IAAI;CAClB,MAAM,OAAO,OAAe,QAAgB;EAAE,MAAM,SAAS,MAAM,KAAI,SAAQO,cAAAA,IAAI,KAAK,aAAa,IAAI,CAAC,CAAC,CAAC,QAAO,UAAS,UAAU,KAAA,CAAS;EAAG,OAAO,OAAO,SAAS,OAAO,QAAQ,OAAO,UAAU,QAAQ,OAAO,CAAC,IAAI,KAAA;CAAW;CACxO,MAAM,OAAO,MAAM,MAAM;CACzB,MAAM,OAAOA,cAAAA,IAAI,KAAK,aAAa,mBAAmB;CACtD,MAAM,SAASA,cAAAA,IAAI,KAAK,aAAa,0BAA0B;CAC/D,MAAM,WAAW,IAAI,KAAK,2BAA2B;CACrD,MAAM,YAAY,IAAI,KAAK,4BAA4B;CACvD,MAAM,MAAM,UAAkB,MAAM,QAAQ,OAAO,SAAS,QAAQ,KAAK,YAAY,CAAC;CACtF,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;EAAK,WAAU;EAAf,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;GAAK,WAAU;GACb,UAAA,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;IAAK,WAAU;IAAf,UAAA,CAEE,iBAAA,GAAA,kBAAA,KAAA,CAAC,MAAD;KAAI,WAAU;KAAd,UAAA;MACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,qBAAAA,QAAD;OAAQ,MAAMjB,kBAAAA;OAAW,OAAOkB,cAAAA,eAAe;MAAQ,CAAA;MACtDN,cAAAA,eAAe,QAAQ,SAAS;MAChC,QAAQ,WAAW,IAAI,iBAAA,GAAA,kBAAA,IAAA,CAACO,cAAAA,OAAD;OAAO,MAAK;OAAU,SAAQ;OAAO,UAAA;MAAgB,CAAA,IAAI,iBAAA,GAAA,kBAAA,KAAA,CAACA,cAAAA,OAAD;OAAO,MAAK;OAAS,SAAQ;OAA7B,UAAA,CAAqC,QAAQ,QAAO,SAAc;;KACjJ;IACJ,CAAA,GAAA,iBAAA,GAAA,kBAAA,KAAA,CAAC,KAAD;KAAG,WAAU;KAAb,UAAA;MACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAA,UAAO,QAAQ,QAAc,CAAA;MAC7B,iBAAA,GAAA,kBAAA,IAAA,CAACC,mBAAAA,YAAD;OAAY,OAAO,QAAQ;OAAS,OAAM;MAAiB,CAAA;MAC3D,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD,EAAA,UAAA;OAAM;OAAG,QAAQ,SAAS,KAAK,IAAI;OAAE;OAAI,IAAI,KAAK,QAAQ,SAAS,CAAC,CAAC,eAAe;MAAQ,EAAA,CAAA;KAC3F;IACA,CAAA,CAAA;;EACF,CAAA,GACL,iBAAA,GAAA,kBAAA,IAAA,CAACC,kBAAAA,WAAD,EACE,OAAO;GACL;IAAE,OAAO;IAAY,OAAOC,cAAAA,SAAS,QAAQ,UAAU;IAAG,KAAK,GAAG,QAAQ,UAAU;IAAS,MAAMnB,gBAAAA;GAAQ;GAC3G;IAAE,OAAO;IAAO,OAAOmB,cAAAA,SAAS,GAAG,GAAG,CAAC;IAAG,KAAK,GAAG,IAAI,OAAO,WAAWC,gBAAAA,OAAO,QAAQ,EAAE,QAAQA,gBAAAA,OAAO,SAAS,EAAE;IAAO,MAAMtB,mBAAAA;GAAW;GAC3I;IAAE,OAAO;IAAY,OAAOqB,cAAAA,SAAS,GAAG,EAAE,CAAC;IAAG,KAAK,GAAG,GAAG,OAAO,WAAW,IAAI,IAAI,GAAG,KAAI,SAAQ,KAAK,aAAa,eAAe,CAAC,CAAC,CAAC,KAAK;IAAU,MAAMpB,mBAAAA;GAAW;GACtK;IAAE,OAAO;IAAQ,OAAOqB,gBAAAA,OAAO,OAAM,UAAS,IAAI,MAAM,QAAQ,CAAC,GAAG;IAAG,KAAK,SAAS,OAAO,OAAO,WAAW;IAAsB,MAAMC,gBAAAA;GAAQ;GAClJ;IAAE,OAAO;IAAkB,OAAOF,cAAAA,SAASG,cAAAA,WAAW,OAAO,IAAI,CAAC;IAAG,KAAK;IAAiC,MAAMzB,kBAAAA;IAAW,MAAM;GAAU;EAC9I,EACD,CAAA,CACE;;AAET;AAEA,SAAS,QAAQ,OAMd;CACD,MAAM,SAAS,MAAM,MAAM,MAAM,QAAQ,KAAK,UAAU;EAAE,GAAG;GAAMS,cAAAA,SAAS,IAAI,KAAK,IAAIA,cAAAA,SAAS,IAAI,MAAM,KAAK;CAAE,IAAI,CAAC,CAAsC;CAC9J,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;EAAK,WAAU;EAAf,UAAA;GACE,iBAAA,GAAA,kBAAA,IAAA,CAACiB,oBAAAA,aAAD;IAAa,WAAU;IAAO,aAAY;IAAqC,OAAO,MAAM;IAAO,UAAU,MAAM;GAAW,CAAA;GAC5H,OAAO,KAAK,MAAM,CAAC,CAAgB,KAAI,MAAK;IAC5C,MAAM,KAAK,MAAM,WAAW,IAAI,CAAC;IACjC,OACE,iBAAA,GAAA,kBAAA,KAAA,CAACb,eAAAA,QAAD;KAAgB,MAAK;KAAK,SAAS,KAAK,YAAY;KAAW,gBAAc;KAAI,eAAe,MAAM,eAAe,CAAC;KAAtH,UAAA;MACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;OAAM,WAAU;OAA0C,OAAO,EAAE,YAAYK,cAAAA,eAAe,GAAG;MAAI,CAAA;MACpGS,cAAAA,eAAe;MAAG;MAAC,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;OAAM,WAAU;OAA8B,UAAA,OAAO;MAAS,CAAA;KAC5E;IAHK,GAAA,CAGL;GAEZ,CAAC;GACD,iBAAA,GAAA,kBAAA,KAAA,CAAC,SAAD;IAAO,WAAU;IAAjB,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,eAAAA,QAAD;KAAQ,SAAS,MAAM;KAAO,cAAW;KAAgC,UAAU,MAAM;IAAW,CAAA,GAAC,yBAEhG;;GACP,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;IAAK,WAAU;IAAf,UAAA;KACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;MAAM,WAAU;MAAhB,UAAA,CAAsD,MAAM,OAAM,OAAW;;KAC7E,iBAAA,GAAA,kBAAA,KAAA,CAACf,eAAAA,QAAD;MAAQ,MAAK;MAAK,SAAQ;MAAQ,SAAS,MAAM;MAAjD,UAAA,CAA4D,iBAAA,GAAA,kBAAA,IAAA,CAACgB,aAAAA,MAAD;OAAM,MAAMC,oBAAAA;OAAa,WAAU;MAAQ,CAAA,GAAC,YAAkB;;KAC1H,iBAAA,GAAA,kBAAA,KAAA,CAACjB,eAAAA,QAAD;MAAQ,MAAK;MAAK,SAAQ;MAAQ,SAAS,MAAM;MAAjD,UAAA,CAA8D,iBAAA,GAAA,kBAAA,IAAA,CAACgB,aAAAA,MAAD;OAAM,MAAME,sBAAAA;OAAe,WAAU;MAAQ,CAAA,GAAC,UAAgB;;IACzH;;EACF;;AAET;AAEA,SAAS,UAAU,OAGhB;CACD,MAAM,EAAE,OAAO,MAAM,UAAU,aAAa;CAC5C,MAAM,QAAQ,KAAK,IAAI,MAAM,SAAS,IAAK;CAC3C,MAAM,OAAOC,cAAAA,SAAS,KAAK;CAC3B,MAAM,QAAQ,MAAM,KAAK,EAAE,QAAQ,KAAK,MAAM,QAAQ,IAAI,IAAI,EAAE,IAAI,GAAG,MAAM,IAAI,IAAI;CACrF,MAAM,YAAA,GAAWC,MAAAA,OAAAA,CAAuB,IAAI;CAE5C,CAAA,GAAA,MAAA,UAAA,OAAgB;EACd,SAAS,SAAS,cAA2B,iBAAiB,IAAI,OAAO,QAAQ,EAAE,GAAG,CAAC,EAAE,iBAAiB,EAAE,OAAO,UAAU,CAAC;CAChI,GAAG,CAAC,QAAQ,CAAC;CAEb,MAAM,SAAS,UAAyB;EACtC,MAAM,KAAK,KAAK,WAAU,QAAO,IAAI,OAAO,QAAQ;EACpD,MAAM,OAAO,MAAM,QAAQ,cAAc,KAAK,KAAK,KAAK,MAAM,QAAQ,YAAY,KAAK,KAAK,KAAK,KAAA;EACjG,MAAM,MAAM,KAAK;EACjB,IAAI,MAAM,SAAS,KAAK,EAAE;OACrB,IAAI,QAAQ,MAAM,QAAQ,gBAAgB,MAAM,QAAQ,cAC9C;QAAA,IAAI,SAAS,UAAU,MAAM,SAAS,IAAI,IAAI,EAAE,IAAI,CAAC,MAAM,UAAU,IAAI,IAAI,EAAE,QAC/E,MAAM,QAAQ,kBACL,IAAI,SAAS,WAAW,IAAI,aAAa,IAAI,CAAC,IAAI,SAAS,UAAU,MAAM,gBAAgB,MAAM,aAAA,CAAc,IAAI,EAAE;EAAA,OACtI;EACP,MAAM,eAAe;CACvB;CAEA,MAAM,OAAO,OAAe,GAAI,KAAK,QAAS,IAAI;CAClD,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;EAAK,KAAK;EAAU,UAAU;EAAG,WAAW;EAAO,cAAW;EAAiB,WAAU;EACvF,UAAA,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;GAAK,WAAU;GAAf,UAAA,CACA,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;IAAK,WAAU;IAA+E,OAAO;KAAE,qBAAqB;KAAa,QAAQ;IAAW;IAA5J,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;KAAK,WAAU;KAA6C,UAAA;IAAS,CAAA,GACrE,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;KAAK,WAAU;KACZ,UAAA,MAAM,KAAI,MAAK,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;MAAc,WAAU;MAAiD,OAAO,EAAE,MAAM,IAAI,CAAC,EAAE;MAAI,UAAA,MAAM,IAAI,MAAMX,cAAAA,SAAS,CAAC;KAAQ,GAA1H,CAA0H,CAAC;IACnJ,CAAA,CACF;GACL,CAAA,GAAA,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;IAAK,WAAU;IAAf,UAAA;KACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;MAAK,eAAA;MAAY,WAAU;MAA8C,OAAO;OAAE,qBAAqB;OAAa,MAAM;OAAG,OAAO;MAAE;MAAtI,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD,CAAM,CAAA,GACN,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;OAAK,WAAU;OAAkB,UAAA,MAAM,KAAI,MAAK,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;QAAc,WAAU;QAA4C,OAAO;SAAE,MAAM,IAAI,CAAC;SAAG,SAAS;QAAI;OAAI,GAAjG,CAAiG,CAAC;MAAO,CAAA,CACjK;;KACJ,KAAK,KAAI,QAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,cAAD;MAA2B,GAAI;MAAY;MAAU;MAAK,QAAQ,IAAI,OAAO;KAAW,GAArE,IAAI,EAAiE,CAAC;KACzG,KAAK,WAAW,KAAK,iBAAA,GAAA,kBAAA,IAAA,CAAC,KAAD;MAAG,WAAU;MAA4C,UAAA;KAAgC,CAAA;IAC5G;GACA,CAAA,CAAA;;CACF,CAAA;AAET;AAEA,SAAS,aAAa,EAAE,OAAO,KAAK,QAAQ,KAAK,UAAU,UAAU,cAAc,eAAe,UAAU,aAA2G;CACrN,MAAM,SAAS,EAAE,aAAa,GAAG,IAAI,QAAQ,KAAK,EAAE,IAAI;CACxD,MAAM,gBAAgB,MAAe,SAAqB,UACxD,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;EAAQ,MAAK;EAAS,cAAY,GAAG,OAAO,aAAa,SAAS,GAAG;EAAS,WAAU;EAAgG,UAAS,UAAS;GAAE,MAAM,gBAAgB;GAAG,QAAQ;EAAG;EAC9O,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACO,aAAAA,MAAD,EAAM,MAAM,OAAOK,sBAAAA,gBAAgBC,uBAAAA,eAAiB,CAAA;CAC9C,CAAA;CAEV,MAAM,WAAW,8DAA8D,SAAS,cAAc;CAEtG,IAAI,IAAI,SAAS,SAAS;EACxB,MAAM,OAAO,SAAS,IAAI,IAAI,EAAE;EAChC,MAAM,MAAM,OAAO,QAAQ,IAAI,MAAM,QAAgC,KAAK,UAAU;GAAE,GAAG;IAAM,KAAK,UAAU,QAAQ,SAAS,EAAE,KAAK,IAAI,KAAK,UAAU,QAAQ,SAAS,EAAE,MAAM,KAAK;EAAE,IAAI,CAAC,CAAC,CAAC;EAChM,MAAM,QAAQ,MAAM,SAAS,IAAI,MAAM,EAAG;EAC1C,MAAM,OAAO,IAAI,MAAM,GAAG,EAAE;EAC5B,MAAM,MAAM,MAAM,SAAS,IAAI,IAAI,KAAK;EACxC,MAAM,OAAO,IAAI,MAAM,QAAQ,OAAO,SAAS,QAAQ,KAAK,YAAY,CAAC;EACzE,MAAM,eAAe,IAAI,MAAM,QAAO,SAAQ,SAAS,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC;EACzE,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;GAAK,MAAK;GAAS,UAAU;GAAI,eAAa,IAAI;GAAI,iBAAe;GAAQ,WAAW;GAAU,OAAO;IAAE,qBAAqB;IAAa,QAAQ;GAAW;GAAG,eAAe,SAAS,IAAI,EAAE;GAAjM,UAAA,CACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;IAAK,WAAU;IAAuC,OAAO;IAA7D,UAAA;KACG,aAAa,YAAY,cAAc,IAAI,EAAE,GAAG,gBAAgB;KACjE,iBAAA,GAAA,kBAAA,IAAA,CAAClB,qBAAAA,QAAD;MAAQ,MAAMf,mBAAAA;MAAY,OAAOgB,cAAAA,eAAe;KAAK,CAAA;KACrD,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;MAAM,WAAU;MAAhB,UAAA;OAA2B,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;QAAM,WAAU;QAAhB,UAAA,CAA+B,IAAI,MAAM,QAAO,WAAe;;OAAC;OAAC,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;QAAM,WAAU;QAAyB,UAAA,IAAI,KAAK,CAAC,IAAI,OAAO,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,IAAI;OAAQ,CAAA;MAAO;;KAChM,eAAe,KAAK,iBAAA,GAAA,kBAAA,KAAA,CAAAkB,kBAAAA,UAAA,EAAA,UAAA,CAAE,iBAAA,GAAA,kBAAA,IAAA,CAACnB,qBAAAA,QAAD;MAAQ,MAAMoB,0BAAAA;MAAmB,OAAM;MAAoB,OAAO,GAAG,aAAa;KAA+D,CAAA,GAAC,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;MAAM,WAAU;MAAyB,UAAA;KAAmB,CAAA,CAAG,EAAA,CAAA;IACrO;GACL,CAAA,GAAA,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;IAAK,WAAU;IAAf,UAAA;KACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;MAAM,WAAU;MAAsB,OAAO;OAAE,MAAM,IAAI,KAAK;OAAG,OAAO,IAAI,MAAM,KAAK;OAAG,KAAK;OAAI,QAAQ;OAAG,YAAYnB,cAAAA,eAAe;OAAI,SAAS;MAAK;KAAI,CAAA;KAC9J,IAAI,MAAM,KAAI,SAAQ,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;MAAwB,WAAU;MAAsB,OAAO;OAAE,MAAM,IAAI,MAAM,SAAS,IAAI,CAAC;OAAG,OAAO,IAAI,KAAK,UAAU;OAAG,UAAU;OAAG,KAAK;OAAG,QAAQ;OAAI,YAAYA,cAAAA,eAAe;MAAG;KAAI,GAAvL,KAAK,MAAkL,CAAC;KAC1N,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;MAAU,OAAQ,QAAQ,KAAK,IAAI,MAAM,SAAS,IAAK,IAAK;MAAK,KAAM,MAAM,KAAK,IAAI,MAAM,SAAS,IAAK,IAAK;MAAK,MAAM,GAAGI,cAAAA,SAAS,IAAI,EAAE;KAAS,CAAA;IAClJ;GACF,CAAA,CAAA;;CAET;CAEA,MAAM,EAAE,SAAS;CACjB,MAAM,IAAIb,cAAAA,SAAS,IAAI;CACvB,MAAM,SAAS,KAAK,WAAW,MAAM,KAAK,IAAI,KAAK,QAAQ,IAAI,KAAA;CAC/D,MAAM,OAAQ,MAAM,SAAS,IAAI,IAAI,KAAK,IAAI,MAAM,SAAS,IAAK,IAAK;CACvE,MAAM,QAAS,KAAK,aAAa,KAAK,IAAI,MAAM,SAAS,IAAK,IAAK;CACnE,MAAM,QAAQ6B,cAAAA,QAAQ,IAAI;CAC1B,MAAM,QAAQ1B,cAAAA,eAAe,KAAK,SAAS;CAC3C,MAAM,QAAQ,KAAK,aAAa;CAChC,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;EAAK,MAAK;EAAS,UAAU;EAAI,eAAa,IAAI;EAAI,iBAAe;EAAQ,WAAW;EAAU,OAAO;GAAE,qBAAqB;GAAa,QAAQ;EAAW;EAAG,eAAe,SAAS,IAAI,EAAE;EAAG,OAAO,KAAK;EAAhN,UAAA,CACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;GAAK,WAAU;GAAuC,OAAO;GAA7D,UAAA;IACG,IAAI,aAAa,IAAI,aAAa,CAAC,UAAU,IAAI,KAAK,MAAM,SAAS,aAAa,KAAK,MAAM,GAAG,KAAK,IAAI,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAM,WAAU,kBAAmB,CAAA;IAC7I,iBAAA,GAAA,kBAAA,IAAA,CAACK,qBAAAA,QAAD;KAAQ,MAAM,cAAc;KAAI,OAAOC,cAAAA,eAAe;IAAK,CAAA;IAC1D,UAAU,OAAO,YAAY,KAAK,WAAW,iBAAA,GAAA,kBAAA,IAAA,CAACC,cAAAA,OAAD;KAAO,MAAK;KAAK,SAAQ;KAAW,UAAA,KAAK;IAAe,CAAA;IACtG,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;KAAM,WAAW,YAAY,MAAM,OAAO,KAAK;KAAkB,UAAA;IAAY,CAAA;IAC5E,OAAO,UAAU,YAAY,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;KAAM,WAAU;KAAkC,UAAA;IAAY,CAAA;IAC3F,IAAI,aAAa,KAAK,UAAU,IAAI,KAAK,MAAM,KAAK,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;KAAM,WAAU;KAAhB,UAAA,CAAwC,KAAE,IAAI,UAAiB;;IACnH,SAAS,IAAI,KAAK,MAAM,KAAK,iBAAA,GAAA,kBAAA,IAAA,CAACF,qBAAAA,QAAD;KAAQ,MAAMoB,0BAAAA;KAAmB,OAAM;KAAoB,OAAM;IAAwD,CAAA;IACtJ,SAAS,iBAAA,GAAA,kBAAA,IAAA,CAAClB,cAAAA,OAAD;KAAO,MAAK;KAAK,MAAK;KAAS,SAAQ;KAAO,UAAA;IAAY,CAAA;GACjE;EACL,CAAA,GAAA,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;GAAK,WAAU;GAAf,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;IAAM,WAAU;IAAsB,OAAO;KAAE,MAAM,GAAG,KAAK;KAAI,OAAO,GAAG,MAAM;KAAI,UAAU;KAAG,KAAK;KAAG,QAAQ;KAAI,YAAY,QAAQ,uBAAuBD,cAAAA,eAAe;KAAI,SAAS,MAAM,UAAU,MAAO;IAAE;GAAI,CAAA,GAC1N,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;IAAU,OAAO;IAAM,KAAK,OAAO;IAAO,QAAQ,QAAQ;IAAI,MAAMI,cAAAA,SAAS,KAAK,UAAU;GAAI,CAAA,CAC7F;EACF,CAAA,CAAA;;AAET;;AAGA,SAAS,SAAS,EAAE,OAAO,KAAK,QAAQ,QAAwE;CAC9G,IAAI,QAAQ,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;EAAM,WAAU;EAA8D,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG;EAAI,UAAA;CAAW,CAAA;CAC3I,MAAM,WAAW,MAAM,KAAK;EAAE,OAAO,GAAG,MAAM,MAAM;EAAI,cAAc;CAAE,IAAI;EAAE,MAAM,GAAG,IAAI;EAAI,aAAa;CAAE;CAC9G,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;EAAM,WAAU;EAAwE,OAAO;EAAW,UAAA;CAAW,CAAA;AAC9H;AAEA,SAAS,WAAW,EAAE,OAAO,MAAM,MAAM,YAAuG;CAC9I,MAAM,IAAIb,cAAAA,SAAS,IAAI;CACvB,MAAM,YAAoB,CAAC;CAC3B,KAAK,IAAI,IAAI,KAAK,WAAW,MAAM,KAAK,IAAI,KAAK,QAAQ,IAAI,KAAA,GAAW,GAAG,IAAI,EAAE,WAAW,MAAM,KAAK,IAAI,EAAE,QAAQ,IAAI,KAAA,GAAW,UAAU,QAAQ,CAAC;CACvJ,MAAM,aAAa,OAAO,QAAQ,KAAK,cAAc,CAAC,CAAC;CACvD,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;EAAK,WAAU;EAAf,UAAA;GACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;IAAK,WAAU;IAAf,UAAA;KACG,UAAU,SAAS,KAClB,iBAAA,GAAA,kBAAA,IAAA,CAAC,KAAD;MAAG,WAAU;MACV,UAAA,UAAU,KAAI,MACb,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;OAAqB,WAAU;OAA/B,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;QAAQ,MAAK;QAAS,WAAU;QAAkB,eAAe,SAAS,EAAE,MAAM;QAAI,UAAAG,cAAAA,eAAe,EAAE,SAAS;OAAU,CAAA,GAC1H,iBAAA,GAAA,kBAAA,IAAA,CAACiB,aAAAA,MAAD,EAAM,MAAMM,uBAAAA,eAAiB,CAAA,CACzB;MAHK,GAAA,EAAE,MAGP,CACP;KACA,CAAA;KAEL,iBAAA,GAAA,kBAAA,KAAA,CAAC,MAAD;MAAI,WAAU;MAAkD,OAAO,KAAK;MAA5E,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAClB,qBAAAA,QAAD;OAAQ,MAAM,cAAc;OAAI,OAAOC,cAAAA,eAAe;MAAK,CAAA,GAC3D,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;OAAM,WAAU;OAAY,UAAAN,cAAAA,eAAe,KAAK,SAAS;MAAQ,CAAA,CAC/D;;KACJ,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;MAAK,WAAU;MAAf,UAAA;OACE,iBAAA,GAAA,kBAAA,IAAA,CAACO,cAAAA,OAAD;QAAO,SAAQ;QAAO,MAAK;QAAM,UAAAQ,cAAAA,eAAe;OAAU,CAAA;OACzD,KAAK,QAAQ,iBAAA,GAAA,kBAAA,IAAA,CAACR,cAAAA,OAAD;QAAO,SAAQ;QAAU,MAAK;QAAM,UAAA,KAAK;OAAY,CAAA;OAClEmB,cAAAA,QAAQ,IAAI,KAAK,iBAAA,GAAA,kBAAA,IAAA,CAACnB,cAAAA,OAAD;QAAO,MAAK;QAAS,SAAQ;QAAO,MAAK;QAAK,UAAA;OAAY,CAAA;OAC5E,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;QAAM,WAAU;QAAhB,UAAA;SAAsDG,cAAAA,SAAS,KAAK,UAAU;SAAE;SAAeA,cAAAA,SAAS,MAAM,SAAS,IAAI,CAAC;QAAQ;;OACpI,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;QAAM,WAAU;QAAhB,UAAA,CAA+E,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAA,UAAO,KAAK,OAAa,CAAA,GAAC,iBAAA,GAAA,kBAAA,IAAA,CAACF,mBAAAA,YAAD;SAAY,OAAO,KAAK;SAAQ,OAAM;QAAgB,CAAA,CAAO;;MACnK;;IACF;;GACJ,QACC,iBAAA,GAAA,kBAAA,IAAA,CAACT,gBAAAA,SAAD;IAAS,SAAQ;IAAU,OAAM;IAC/B,UAAA,iBAAA,GAAA,kBAAA,KAAA,CAAC,KAAD;KAAG,WAAU;KAAb,UAAA;MAAuB;MAAqB,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;OAAQ,MAAK;OAAS,WAAU;OAAY,eAAe,SAAS,KAAK,MAAM;OAAI,UAAAC,cAAAA,eAAe,KAAK,SAAS;MAAU,CAAA;MAAC;MAAoB,KAAK,WAAWA,cAAAA,eAAe,MAAM,KAAK,IAAI,KAAK,QAAQ,CAAC,EAAE,aAAa,KAAK,QAAQ,IAAI;MAAU;KAAI;;GAC9R,CAAA;GAEV,MAAM,WAAW,iBAAA,GAAA,kBAAA,IAAA,CAAC2B,kBAAAA,WAAD;IAAkB;IAAa;GAAO,CAAA;GACvD,MAAM,SAAS,iBAAA,GAAA,kBAAA,IAAA,CAACC,kBAAAA,SAAD,EAAe,KAAO,CAAA;GACrC,MAAM,QAAQ,iBAAA,GAAA,kBAAA,IAAA,CAACC,kBAAAA,QAAD,EAAc,KAAO,CAAA;GACpC,iBAAA,GAAA,kBAAA,IAAA,CAACC,gBAAAA,SAAD;IAAS,OAAO,mBAAmB,WAAW,OAAO;IAAI,aAAa,MAAM;IAC1E,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACC,mBAAAA,YAAD;KAAY,cAAa,QAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;MAAM,WAAU;MAAW,UAAA;KAAU,CAAA;KAAG,OAAO,WAAW,KAAK,CAAC,KAAK,YAAY;MAAE;MAAK;KAAM,EAAE;IAAI,CAAA;GAC7H,CAAA;GACR,KAAK,QAAQ,iBAAA,GAAA,kBAAA,IAAA,CAACD,gBAAAA,SAAD;IAAS,OAAM;IAAyB,aAAa;IAAO,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACE,kBAAAA,WAAD;KAAW,UAAS;KAAO,QAAQ,KAAK,UAAU,KAAK,MAAM,MAAM,CAAC;KAAG,sBAAsB;KAAG,UAAA;IAAU,CAAA;GAAU,CAAA;GAC9L,iBAAA,GAAA,kBAAA,IAAA,CAACF,gBAAAA,SAAD;IAAS,OAAO,aAAa,OAAO,KAAK,KAAK,YAAY,CAAC,CAAC,CAAC,CAAC,OAAO;IAAI,aAAa;IACpF,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACC,mBAAAA,YAAD;KAAY,cAAa,QAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;MAAM,WAAU;MAAW,UAAA;KAAU,CAAA;KAAG,OAAO,OAAO,QAAQ,KAAK,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,YAAY;MAAE;MAAK;KAAM,EAAE;IAAI,CAAA;GACtJ,CAAA;EACN;;AAET"}
|
|
1
|
+
{"version":3,"file":"OtelTraceDetail.cjs","names":["UiRobotAi","UiSparkles","UiDatabase","UiClock","useMemo","indexTrace","misparented","useState","buildRows","category","withAncestors","Callout","shortOperation","Button","SplitPane","GroupDetail","Badge","_Fragment","CopyButton","Tinted","CATEGORY_COLOR","num","StatStrip","duration","metric","UiCoins","selfTimeMs","SearchInput","CATEGORY_LABEL","Switch","Icon","UiExpandAll","UiCollapseAll","niceStep","useRef","UiChevronDown","UiChevronRight","UiWarningTriangle","isError","AgentCard","LlmCard","DbCard","Section","Properties","CodeBlock"],"sources":["../../../../src/data/traces/otel/OtelTraceDetail.tsx"],"sourcesContent":["import { Tinted } from \"./SpanCategory\";\nimport { AgentCard, LlmCard, DbCard, GroupDetail } from \"./SpanCards\";\nimport { metric } from \"./metrics\";\nimport { StatStrip } from \"../../StatStrip\";\nimport { Icon } from \"../../Icon\";\nimport { Callout } from \"../../Callout\";\nimport { Badge } from \"../../Badge\";\nimport { CodeBlock } from \"../../CodeBlock\";\nimport { Properties } from \"../../Properties\";\n/**\n * OpenTelemetry waterfall with grouped calls and an adjacent span inspector.\n */\nimport { useEffect, useMemo, useRef, useState, type KeyboardEvent, type ReactNode } from \"react\";\nimport {\n Button,\n CopyButton,\n SearchInput,\n Section,\n SplitPane,\n Switch,\n} from \"../../../components\";\nimport {\n UiChevronDown,\n UiChevronRight,\n UiClock,\n UiCoins,\n UiCollapseAll,\n UiDatabase,\n UiExpandAll,\n UiRobotAi,\n UiSparkles,\n UiWarningTriangle,\n} from \"../../../icons\";\n\n\nimport {\n CATEGORY_COLOR,\n CATEGORY_LABEL,\n buildRows,\n category,\n duration,\n indexTrace,\n isError,\n misparented,\n niceStep,\n num,\n selfTimeMs,\n shortOperation,\n withAncestors,\n type Category,\n type Row,\n type Span,\n type TraceIndex,\n type Trace,\n} from \"./model\";\n\nconst CATEGORY_ICON = { agent: UiRobotAi, llm: UiSparkles, db: UiDatabase, other: UiClock } as const;\nconst ROW_HEIGHT = 28;\n\nconst NAME_COLUMN = \"minmax(15rem, 36%) minmax(0, 1fr)\";\n\n\nexport type OtelTraceDetailProps = {\n trace: Trace;\n selectedSpanId?: string;\n onSelectSpan: (id: string) => void;\n /** Places the trace title elsewhere, e.g. an app shell's top bar; rendered inline when unset. */\n renderTitle?: (title: ReactNode) => ReactNode;\n};\n\nexport function OtelTraceDetail({ trace: TRACE, selectedSpanId, onSelectSpan, renderTitle }: OtelTraceDetailProps) {\n const index = useMemo(() => indexTrace(TRACE), [TRACE]);\n const suspects = useMemo(() => misparented(index), [index]);\n const selected = selectedSpanId ?? TRACE.spans[0]?.spanId ?? \"\";\n const [collapsed, setCollapsed] = useState(new Set<string>());\n const groupOf = (id: string) => buildRows(index, { collapsed: new Set(), expanded: new Set(), group: true }).find(row => row.type === \"group\" && row.spans.some(span => span.spanId === id))?.id;\n const [expanded, setExpanded] = useState(() => new Set([groupOf(selected)].filter(id => id !== undefined)));\n const [group, setGroup] = useState(true);\n const [query, setQuery] = useState(\"\");\n const [categories, setCategories] = useState(new Set<Category>());\n const [onlySuspects, setOnlySuspects] = useState(false);\n\n const visible = useMemo(() => {\n const q = query.trim().toLowerCase();\n if (!q && categories.size === 0 && !onlySuspects) return undefined;\n const hits = TRACE.spans.filter(span =>\n (!q || [span.operation, span.service, ...Object.values(span.attributes ?? {}).map(String)].some(text => text.toLowerCase().includes(q))) &&\n (categories.size === 0 || categories.has(category(span))) &&\n (!onlySuspects || suspects.has(span.spanId)));\n return withAncestors(index, hits.map(span => span.spanId));\n }, [index, query, categories, onlySuspects, suspects, TRACE]);\n\n const rows = useMemo(() => buildRows(index, { collapsed, expanded, group, ...(visible ? { visible } : {}) }), [index, collapsed, expanded, group, visible]);\n\n const select = (id: string) => {\n const group = groupOf(id);\n if (group) setExpanded(previous => new Set(previous).add(group));\n onSelectSpan(id);\n };\n const toggle = (set: typeof setCollapsed, id: string) => set(previous => {\n const next = new Set(previous);\n if (!next.delete(id)) next.add(id);\n return next;\n });\n\n const selectedSpan = index.byId.get(selected);\n const selectedGroup = rows.find((row): row is Extract<Row, { type: \"group\" }> => row.type === \"group\" && row.id === selected);\n\n return (\n <div className=\"space-y-8\">\n <section className=\"space-y-4 rounded-xl border border-border bg-background p-density-4\">\n {renderTitle ? renderTitle(<TraceTitle trace={TRACE} compact />) : <TraceTitle trace={TRACE} />}\n <TraceStats index={index} trace={TRACE} />\n {TRACE.missingParents.length > 0 && <p role=\"status\">Partial trace: {TRACE.missingParents.length} parent spans are missing from this source.</p>}\n {suspects.size > 0 && (\n <Callout variant=\"warning\" title={`${suspects.size} spans run inside a nested agent but hang off its parent`}>\n <p className=\"text-sm\">\n They start and end within <code>{shortOperation(suspects.values().next().value!.operation)}</code>, yet their parent is the root span, so the nested agent looks like it made a single LLM call. This usually means the agent's context is not propagated to its database client.{\" \"}\n <Button size=\"sm\" variant=\"link\" className=\"h-auto p-0\" onClick={() => setOnlySuspects(on => !on)}>{onlySuspects ? \"Show all spans\" : \"Show only these spans\"}</Button>\n </p>\n </Callout>\n )}\n <Toolbar\n trace={TRACE}\n query={query}\n setQuery={setQuery}\n categories={categories}\n toggleCategory={c => setCategories(previous => {\n const next = new Set(previous);\n if (!next.delete(c)) next.add(c);\n return next;\n })}\n group={group}\n setGroup={setGroup}\n expandAll={() => {\n setCollapsed(new Set());\n setExpanded(new Set(rows.filter(row => row.type === \"group\").map(row => row.id)));\n }}\n collapseAll={() => {\n setExpanded(new Set());\n setCollapsed(new Set(TRACE.spans.filter(span => index.children.has(span.spanId) && !span.parentId).map(span => span.spanId)));\n }}\n shown={rows.length}\n />\n <SplitPane\n stackOnMobile\n defaultSplit={62}\n minLeft={40}\n minRight={25}\n className=\"rounded-lg border border-border\"\n left={<Waterfall index={index} rows={rows} selected={selected} onSelect={select} suspects={suspects} onToggleSpan={id => toggle(setCollapsed, id)} onToggleGroup={id => toggle(setExpanded, id)} expanded={expanded} collapsed={collapsed} />}\n right={\n <div className=\"h-72 overflow-auto p-density-3 md:h-[calc(100dvh-14rem)] md:min-h-[30rem]\">\n {selectedGroup ? <GroupDetail index={index} spans={selectedGroup.spans} onSelect={select} />\n : selectedSpan ? <SpanDetail index={index} span={selectedSpan} host={suspects.get(selectedSpan.spanId)} onSelect={select} />\n : <p className=\"text-sm text-muted-foreground\">Select a span.</p>}\n </div>\n }\n />\n </section>\n </div>\n );\n}\n\nfunction TraceTitle({ trace: { summary }, compact }: { trace: Trace; compact?: boolean }) {\n const status = summary.errors === 0 ? <Badge tone=\"success\" variant=\"soft\">no errors</Badge> : <Badge tone=\"danger\" variant=\"soft\">{summary.errors} errors</Badge>;\n const meta = (\n <>\n <code>{summary.traceId}</code>\n <CopyButton value={summary.traceId} label=\"Copy trace ID\" />\n <span>· {summary.services.join(\", \")} · {new Date(summary.startedAt).toLocaleString()}</span>\n </>\n );\n if (compact)\n return (\n <div className=\"flex min-w-0 flex-1 items-center gap-density-2\">\n <h1 className=\"flex min-w-0 items-center gap-2 text-base font-semibold tracking-tight\" title={summary.operation}>\n <Tinted icon={UiRobotAi} color={CATEGORY_COLOR.agent} />\n <span className=\"min-w-0 truncate\">{shortOperation(summary.operation)}</span>\n </h1>\n {status}\n <p className=\"hidden min-w-0 items-center gap-2 truncate text-xs text-muted-foreground lg:flex\">{meta}</p>\n </div>\n );\n return (\n <div className=\"min-w-0 space-y-1\">\n <h2 className=\"flex items-center gap-2 text-xl font-semibold tracking-tight\">\n <Tinted icon={UiRobotAi} color={CATEGORY_COLOR.agent} />\n {shortOperation(summary.operation)}\n {status}\n </h2>\n <p className=\"flex flex-wrap items-center gap-2 text-xs text-muted-foreground\">{meta}</p>\n </div>\n );\n}\n\nfunction TraceStats({ index, trace: TRACE }: { index: TraceIndex; trace: Trace }) {\n const { summary } = TRACE;\n const by = (c: Category) => TRACE.spans.filter(span => category(span) === c);\n const llm = by(\"llm\");\n const db = by(\"db\");\n const sum = (spans: Span[], key: string) => { const values = spans.map(span => num(span.attributes?.[key])).filter(value => value !== undefined); return values.length ? values.reduce((total, value) => total + value, 0) : undefined; };\n const root = index.roots[0]!;\n const cost = num(root.attributes?.[\"captain.cost_usd\"]);\n const budget = num(root.attributes?.[\"captain.budget.cost_usd\"]);\n const tokensIn = sum(llm, \"gen_ai.usage.input_tokens\");\n const tokensOut = sum(llm, \"gen_ai.usage.output_tokens\");\n const ms = (spans: Span[]) => spans.reduce((total, span) => total + span.durationMs, 0);\n return (\n <StatStrip\n items={[\n { label: \"Duration\", value: duration(summary.durationMs), sub: `${summary.spanCount} spans`, icon: UiClock },\n { label: \"LLM\", value: duration(ms(llm)), sub: `${llm.length} calls · ${metric(tokensIn)} in / ${metric(tokensOut)} out`, icon: UiSparkles },\n { label: \"Database\", value: duration(ms(db)), sub: `${db.length} calls · ${new Set(db.map(span => span.attributes?.[\"db.sql.table\"])).size} tables`, icon: UiDatabase },\n { label: \"Cost\", value: metric(cost, value => `$${value.toFixed(4)}`), sub: budget ? `of $${budget} budget` : \"budget unavailable\", icon: UiCoins },\n { label: \"Root self-time\", value: duration(selfTimeMs(index, root)), sub: \"not covered by any child span\", icon: UiRobotAi, tone: \"warning\" },\n ]}\n />\n );\n}\n\nfunction Toolbar(props: {\n trace: Trace;\n query: string; setQuery: (q: string) => void;\n categories: Set<Category>; toggleCategory: (c: Category) => void;\n group: boolean; setGroup: (on: boolean) => void;\n expandAll: () => void; collapseAll: () => void; shown: number;\n}) {\n const counts = props.trace.spans.reduce((acc, span) => ({ ...acc, [category(span)]: (acc[category(span)] ?? 0) + 1 }), {} as Partial<Record<Category, number>>);\n return (\n <div className=\"flex flex-wrap items-center gap-2\">\n <SearchInput className=\"w-72\" placeholder=\"Filter by name, table or attribute\" value={props.query} onChange={props.setQuery} />\n {(Object.keys(counts) as Category[]).map(c => {\n const on = props.categories.has(c);\n return (\n <Button key={c} size=\"sm\" variant={on ? \"default\" : \"outline\"} aria-pressed={on} onClick={() => props.toggleCategory(c)}>\n <span className=\"mr-1.5 inline-block size-2 rounded-full\" style={{ background: CATEGORY_COLOR[c] }} />\n {CATEGORY_LABEL[c]} <span className=\"ml-1 text-muted-foreground\">{counts[c]}</span>\n </Button>\n );\n })}\n <label className=\"ml-2 inline-flex items-center gap-2 text-xs text-muted-foreground\">\n <Switch checked={props.group} aria-label=\"Group repeated database calls\" onChange={props.setGroup} />\n Group repeated DB calls\n </label>\n <div className=\"ml-auto flex items-center gap-1\">\n <span className=\"mr-2 text-xs text-muted-foreground\">{props.shown} rows</span>\n <Button size=\"sm\" variant=\"ghost\" onClick={props.expandAll}><Icon icon={UiExpandAll} className=\"mr-1\" />Expand all</Button>\n <Button size=\"sm\" variant=\"ghost\" onClick={props.collapseAll}><Icon icon={UiCollapseAll} className=\"mr-1\" />Collapse</Button>\n </div>\n </div>\n );\n}\n\nfunction Waterfall(props: {\n index: TraceIndex; rows: Row[]; selected: string; onSelect: (id: string) => void; suspects: Map<string, Span>;\n onToggleSpan: (id: string) => void; onToggleGroup: (id: string) => void; expanded: Set<string>; collapsed: Set<string>;\n}) {\n const { index, rows, selected, onSelect } = props;\n const total = Math.max(index.totalMs, 0.001);\n const step = niceStep(total);\n const ticks = Array.from({ length: Math.floor(total / step) + 1 }, (_, i) => i * step);\n const scroller = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n scroller.current?.querySelector<HTMLElement>(`[data-row-id=\"${CSS.escape(selected)}\"]`)?.scrollIntoView?.({ block: \"nearest\" });\n }, [selected]);\n\n const onKey = (event: KeyboardEvent) => {\n const at = rows.findIndex(row => row.id === selected);\n const next = event.key === \"ArrowDown\" ? rows[at + 1] : event.key === \"ArrowUp\" ? rows[at - 1] : undefined;\n const row = rows[at];\n if (next) onSelect(next.id);\n else if (row && (event.key === \"ArrowRight\" || event.key === \"ArrowLeft\")) {\n const open = row.type === \"group\" ? props.expanded.has(row.id) : !props.collapsed.has(row.id);\n const want = event.key === \"ArrowRight\";\n if (open !== want && (row.type === \"group\" || row.childCount > 0)) (row.type === \"group\" ? props.onToggleGroup : props.onToggleSpan)(row.id);\n } else return;\n event.preventDefault();\n };\n\n const pct = (ms: number) => `${(ms / total) * 100}%`;\n return (\n <div ref={scroller} tabIndex={0} onKeyDown={onKey} aria-label=\"Span waterfall\" className=\"h-72 overflow-auto text-xs outline-none focus-visible:ring-2 focus-visible:ring-ring md:h-[calc(100dvh-14rem)] md:min-h-[30rem]\">\n <div className=\"min-w-[40rem]\">\n <div className=\"sticky top-0 z-10 grid border-b border-border bg-muted text-muted-foreground\" style={{ gridTemplateColumns: NAME_COLUMN, height: ROW_HEIGHT }}>\n <div className=\"flex items-center px-density-2 font-medium\">Span</div>\n <div className=\"relative mr-12\">\n {ticks.map(t => <span key={t} className=\"absolute top-1.5 -translate-x-1/2 tabular-nums\" style={{ left: pct(t) }}>{t === 0 ? \"0\" : duration(t)}</span>)}\n </div>\n </div>\n <div className=\"relative\">\n <div aria-hidden className=\"pointer-events-none absolute inset-y-0 grid\" style={{ gridTemplateColumns: NAME_COLUMN, left: 0, right: 0 }}>\n <div />\n <div className=\"relative mr-12\">{ticks.map(t => <span key={t} className=\"absolute inset-y-0 border-l border-border\" style={{ left: pct(t), opacity: 0.6 }} />)}</div>\n </div>\n {rows.map(row => <WaterfallRow key={row.id} {...props} row={row} pct={pct} active={row.id === selected} />)}\n {rows.length === 0 && <p className=\"p-density-4 text-sm text-muted-foreground\">No spans match these filters.</p>}\n </div>\n </div>\n </div>\n );\n}\n\nfunction WaterfallRow({ index, row, active, pct, onSelect, suspects, onToggleSpan, onToggleGroup, expanded, collapsed }: Parameters<typeof Waterfall>[0] & { row: Row; active: boolean; pct: (ms: number) => string }) {\n const indent = { paddingLeft: `${row.depth * 14 + 4}px` };\n const toggleButton = (open: boolean, onClick: () => void, label: string) => (\n <button type=\"button\" aria-label={`${open ? \"Collapse\" : \"Expand\"} ${label}`} className=\"flex size-5 shrink-0 items-center justify-center rounded text-muted-foreground hover:bg-muted\" onClick={event => { event.stopPropagation(); onClick(); }}>\n <Icon icon={open ? UiChevronDown : UiChevronRight} />\n </button>\n );\n const rowClass = `relative grid w-full cursor-pointer items-center text-left ${active ? \"bg-accent\" : \"hover:bg-muted\"}`;\n\n if (row.type === \"group\") {\n const open = expanded.has(row.id);\n const ops = Object.entries(row.spans.reduce<Record<string, number>>((acc, span) => ({ ...acc, [span.operation.replace(\"gorm.\", \"\")]: (acc[span.operation.replace(\"gorm.\", \"\")] ?? 0) + 1 }), {}));\n const first = index.offsetMs(row.spans[0]!);\n const last = row.spans.at(-1)!;\n const end = index.offsetMs(last) + last.durationMs;\n const busy = row.spans.reduce((total, span) => total + span.durationMs, 0);\n const suspectCount = row.spans.filter(span => suspects.has(span.spanId)).length;\n return (\n <div role=\"button\" tabIndex={-1} data-row-id={row.id} aria-selected={active} className={rowClass} style={{ gridTemplateColumns: NAME_COLUMN, height: ROW_HEIGHT }} onClick={() => onSelect(row.id)}>\n <div className=\"flex min-w-0 items-center gap-1 pr-2\" style={indent}>\n {toggleButton(open, () => onToggleGroup(row.id), \"database group\")}\n <Tinted icon={UiDatabase} color={CATEGORY_COLOR.db} />\n <span className=\"truncate\"><span className=\"font-medium\">{row.spans.length} DB calls</span> <span className=\"text-muted-foreground\">{ops.map(([op, n]) => `${op} ×${n}`).join(\", \")}</span></span>\n {suspectCount > 0 && <><Tinted icon={UiWarningTriangle} color=\"var(--fs-warning)\" label={`${suspectCount} calls run inside a nested agent but are parented elsewhere`} /><span className=\"text-muted-foreground\">{suspectCount}</span></>}\n </div>\n <div className=\"relative mr-12 h-full\">\n <span className=\"absolute rounded-sm\" style={{ left: pct(first), width: pct(end - first), top: 11, height: 6, background: CATEGORY_COLOR.db, opacity: 0.18 }} />\n {row.spans.map(span => <span key={span.spanId} className=\"absolute rounded-sm\" style={{ left: pct(index.offsetMs(span)), width: pct(span.durationMs), minWidth: 2, top: 8, height: 12, background: CATEGORY_COLOR.db }} />)}\n <BarLabel start={(first / Math.max(index.totalMs, 0.001)) * 100} end={(end / Math.max(index.totalMs, 0.001)) * 100} text={`${duration(busy)} busy`} />\n </div>\n </div>\n );\n }\n\n const { span } = row;\n const c = category(span);\n const parent = span.parentId ? index.byId.get(span.parentId) : undefined;\n const left = (index.offsetMs(span) / Math.max(index.totalMs, 0.001)) * 100;\n const width = (span.durationMs / Math.max(index.totalMs, 0.001)) * 100;\n const error = isError(span);\n const label = shortOperation(span.operation);\n const table = span.attributes?.[\"db.sql.table\"];\n return (\n <div role=\"button\" tabIndex={-1} data-row-id={row.id} aria-selected={active} className={rowClass} style={{ gridTemplateColumns: NAME_COLUMN, height: ROW_HEIGHT }} onClick={() => onSelect(row.id)} title={span.operation}>\n <div className=\"flex min-w-0 items-center gap-1 pr-2\" style={indent}>\n {row.childCount > 0 ? toggleButton(!collapsed.has(span.spanId), () => onToggleSpan(span.spanId), label) : <span className=\"size-5 shrink-0\" />}\n <Tinted icon={CATEGORY_ICON[c]} color={CATEGORY_COLOR[c]} />\n {parent && parent.service !== span.service && <Badge size=\"sm\" variant=\"outline\">{span.service}</Badge>}\n <span className={`truncate ${c === \"db\" ? \"\" : \"font-medium\"}`}>{label}</span>\n {typeof table === \"string\" && <span className=\"truncate text-muted-foreground\">{table}</span>}\n {row.childCount > 0 && collapsed.has(span.spanId) && <span className=\"text-muted-foreground\">+{row.childCount}</span>}\n {suspects.has(span.spanId) && <Tinted icon={UiWarningTriangle} color=\"var(--fs-warning)\" label=\"Runs inside a nested agent but is parented elsewhere\" />}\n {error && <Badge size=\"sm\" tone=\"danger\" variant=\"soft\">error</Badge>}\n </div>\n <div className=\"relative mr-12 h-full\">\n <span className=\"absolute rounded-sm\" style={{ left: `${left}%`, width: `${width}%`, minWidth: 2, top: 7, height: 14, background: error ? \"var(--destructive)\" : CATEGORY_COLOR[c], opacity: c === \"agent\" ? 0.85 : 1 }} />\n <BarLabel start={left} end={left + width} inside={width > 14} text={duration(span.durationMs)} />\n </div>\n </div>\n );\n}\n\n/** Duration next to the bar's end — or inside a wide bar — and flipped left of the start near the right edge. */\nfunction BarLabel({ start, end, inside, text }: { start: number; end: number; inside?: boolean; text: string }) {\n if (inside) return <span className=\"absolute top-1.5 px-1.5 font-medium text-white tabular-nums\" style={{ left: `${start}%` }}>{text}</span>;\n const position = end > 90 ? { right: `${100 - start}%`, paddingRight: 4 } : { left: `${end}%`, paddingLeft: 4 };\n return <span className=\"absolute top-1.5 whitespace-nowrap tabular-nums text-muted-foreground\" style={position}>{text}</span>;\n}\n\nfunction SpanDetail({ index, span, host, onSelect }: { index: TraceIndex; span: Span; host: Span | undefined; onSelect: (id: string) => void }) {\n const c = category(span);\n const ancestors: Span[] = [];\n for (let p = span.parentId ? index.byId.get(span.parentId) : undefined; p; p = p.parentId ? index.byId.get(p.parentId) : undefined) ancestors.unshift(p);\n const attributes = Object.entries(span.attributes ?? {});\n return (\n <div className=\"space-y-4\">\n <div className=\"space-y-1.5\">\n {ancestors.length > 0 && (\n <p className=\"flex flex-wrap items-center gap-1 text-xs text-muted-foreground\">\n {ancestors.map(a => (\n <span key={a.spanId} className=\"inline-flex items-center gap-1\">\n <button type=\"button\" className=\"hover:underline\" onClick={() => onSelect(a.spanId)}>{shortOperation(a.operation)}</button>\n <Icon icon={UiChevronRight} />\n </span>\n ))}\n </p>\n )}\n <h3 className=\"flex items-center gap-2 text-base font-semibold\" title={span.operation}>\n <Tinted icon={CATEGORY_ICON[c]} color={CATEGORY_COLOR[c]} />\n <span className=\"truncate\">{shortOperation(span.operation)}</span>\n </h3>\n <div className=\"flex flex-wrap items-center gap-1.5 text-xs\">\n <Badge variant=\"soft\" size=\"sm\">{CATEGORY_LABEL[c]}</Badge>\n {span.kind && <Badge variant=\"outline\" size=\"sm\">{span.kind}</Badge>}\n {isError(span) && <Badge tone=\"danger\" variant=\"soft\" size=\"sm\">error</Badge>}\n <span className=\"tabular-nums text-muted-foreground\">{duration(span.durationMs)} · starts at +{duration(index.offsetMs(span))}</span>\n <span className=\"ml-auto inline-flex items-center gap-1 text-muted-foreground\"><code>{span.spanId}</code><CopyButton value={span.spanId} label=\"Copy span ID\" /></span>\n </div>\n </div>\n {host && (\n <Callout variant=\"warning\" title=\"Likely mis-parented\">\n <p className=\"text-sm\">Runs entirely inside <button type=\"button\" className=\"underline\" onClick={() => onSelect(host.spanId)}>{shortOperation(host.operation)}</button> but its parent is {span.parentId ? shortOperation(index.byId.get(span.parentId)?.operation ?? span.parentId) : \"missing\"}.</p>\n </Callout>\n )}\n {c === \"agent\" && <AgentCard index={index} span={span} />}\n {c === \"llm\" && <LlmCard span={span} />}\n {c === \"db\" && <DbCard span={span} />}\n <Section title={`All attributes (${attributes.length})`} defaultOpen={c === \"other\"}>\n <Properties renderLabel={key => <code className=\"text-xs\">{key}</code>} items={attributes.map(([key, value]) => ({ key, value }))} />\n </Section>\n {span.otlp && <Section title=\"OpenTelemetry metadata\" defaultOpen={false}><CodeBlock language=\"json\" source={JSON.stringify(span.otlp, null, 2)} jsonDefaultOpenDepth={4} copyable /></Section>}\n <Section title={`Resource (${Object.keys(span.resource ?? {}).length})`} defaultOpen={false}>\n <Properties renderLabel={key => <code className=\"text-xs\">{key}</code>} items={Object.entries(span.resource ?? {}).map(([key, value]) => ({ key, value }))} />\n </Section>\n </div>\n );\n}\n\n"],"mappings":"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"}
|
|
@@ -1,7 +1,11 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
1
2
|
import { Trace } from './model.js';
|
|
2
|
-
export
|
|
3
|
+
export type OtelTraceDetailProps = {
|
|
3
4
|
trace: Trace;
|
|
4
5
|
selectedSpanId?: string;
|
|
5
6
|
onSelectSpan: (id: string) => void;
|
|
6
|
-
|
|
7
|
+
/** Places the trace title elsewhere, e.g. an app shell's top bar; rendered inline when unset. */
|
|
8
|
+
renderTitle?: (title: ReactNode) => ReactNode;
|
|
9
|
+
};
|
|
10
|
+
export declare function OtelTraceDetail({ trace: TRACE, selectedSpanId, onSelectSpan, renderTitle }: OtelTraceDetailProps): import("react").JSX.Element;
|
|
7
11
|
//# sourceMappingURL=OtelTraceDetail.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OtelTraceDetail.d.ts","sourceRoot":"","sources":["../../../../src/data/traces/otel/OtelTraceDetail.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"OtelTraceDetail.d.ts","sourceRoot":"","sources":["../../../../src/data/traces/otel/OtelTraceDetail.tsx"],"names":[],"mappings":"AASA;;GAEG;AACH,OAAO,EAA4D,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAuBjG,OAAO,EAkBL,KAAK,KAAK,EACX,MAAM,SAAS,CAAC;AAQjB,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,EAAE,KAAK,CAAC;IACb,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,iGAAiG;IACjG,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,SAAS,CAAC;CAC/C,CAAC;AAEF,wBAAgB,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,WAAW,EAAE,EAAE,oBAAoB,+BA4FhH"}
|