@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
|
@@ -117,6 +117,15 @@ function summarizePrompts(prompts) {
|
|
|
117
117
|
expired: 0
|
|
118
118
|
});
|
|
119
119
|
}
|
|
120
|
+
var STATE_RANK = {
|
|
121
|
+
pending: 0,
|
|
122
|
+
answered: 1
|
|
123
|
+
};
|
|
124
|
+
/** Pending prompts first, then answered, then closed (cancelled, expired); each group keeps its order. */
|
|
125
|
+
function orderPrompts(prompts) {
|
|
126
|
+
const rank = (prompt) => STATE_RANK[prompt.state] ?? 2;
|
|
127
|
+
return [...prompts].sort((a, b) => rank(a) - rank(b));
|
|
128
|
+
}
|
|
120
129
|
function summarizePromptAnswer(prompt) {
|
|
121
130
|
if (prompt.cancelled || prompt.state === "cancelled") return "Cancelled";
|
|
122
131
|
if (prompt.state === "expired") return "Expired";
|
|
@@ -142,6 +151,7 @@ function summarizePromptAnswer(prompt) {
|
|
|
142
151
|
exports.analyzePromptInlineActions = analyzePromptInlineActions;
|
|
143
152
|
exports.buildPromptInlineValues = buildPromptInlineValues;
|
|
144
153
|
exports.initialPromptComment = initialPromptComment;
|
|
154
|
+
exports.orderPrompts = orderPrompts;
|
|
145
155
|
exports.summarizePromptAnswer = summarizePromptAnswer;
|
|
146
156
|
exports.summarizePrompts = summarizePrompts;
|
|
147
157
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PromptBanner.model.cjs","names":[],"sources":["../../src/data/PromptBanner.model.ts"],"sourcesContent":["import type { JsonSchemaObject, JsonSchemaProperty } from \"../components/json-schema-form-types\";\nimport type { PromptSnapshot } from \"../hooks/use-prompts\";\n\nexport type PromptInlineDecision = \"approve\" | \"reject\";\n\nexport interface PromptInlineActionSpec {\n field: string;\n approveValue: unknown;\n rejectValue: unknown;\n commentField?: string;\n commentRequired: boolean;\n commentLabel?: string;\n}\n\nexport interface PromptSummary {\n total: number;\n pending: number;\n answered: number;\n cancelled: number;\n expired: number;\n}\n\nconst ACTION_FIELD_PRIORITY = [\"decision\", \"choice\", \"action\", \"value\", \"approve\", \"approved\"];\nconst COMMENT_FIELD_PRIORITY = [\"comment\", \"reason\", \"message\", \"note\"];\n\nconst APPROVE_RE = /\\b(approve|approved|allow|allowed|continue|yes|accept|accepted|proceed|run)\\b/i;\nconst REJECT_RE = /\\b(reject|rejected|deny|denied|cancel|cancelled|canceled|no|block|stop|decline|declined)\\b/i;\n\nfunction hasType(schema: JsonSchemaProperty | undefined, type: string): boolean {\n if (!schema?.type) return false;\n return Array.isArray(schema.type) ? schema.type.includes(type as never) : schema.type === type;\n}\n\nfunction sortedPropertyEntries(schema: JsonSchemaObject): [string, JsonSchemaProperty][] {\n const entries = Object.entries(schema.properties ?? {});\n return entries.sort(([a], [b]) => {\n const ia = ACTION_FIELD_PRIORITY.indexOf(a);\n const ib = ACTION_FIELD_PRIORITY.indexOf(b);\n if (ia === -1 && ib === -1) return 0;\n if (ia === -1) return 1;\n if (ib === -1) return -1;\n return ia - ib;\n });\n}\n\nfunction optionText(schema: JsonSchemaProperty, value: unknown): string {\n const key = String(value);\n const label = schema[\"x-enum-labels\"]?.[key];\n return [key, label].filter(Boolean).join(\" \");\n}\n\nfunction findCommentField(schema: JsonSchemaObject): Pick<\n PromptInlineActionSpec,\n \"commentField\" | \"commentRequired\" | \"commentLabel\"\n> {\n const properties = schema.properties ?? {};\n const required = new Set(schema.required ?? []);\n for (const key of COMMENT_FIELD_PRIORITY) {\n const property = properties[key];\n if (!property || !hasType(property, \"string\") || property.enum) continue;\n return {\n commentField: key,\n commentRequired: required.has(key),\n commentLabel: property.title ?? \"Comment\",\n };\n }\n return { commentRequired: false };\n}\n\nfunction findEnumAction(schema: JsonSchemaObject): PromptInlineActionSpec | null {\n for (const [field, property] of sortedPropertyEntries(schema)) {\n const values = property.enum ?? [];\n if (values.length === 0) continue;\n\n const approve = values.find((value) => APPROVE_RE.test(optionText(property, value)));\n const reject = values.find((value) => REJECT_RE.test(optionText(property, value)));\n if (approve === undefined || reject === undefined) continue;\n\n return {\n field,\n approveValue: approve,\n rejectValue: reject,\n ...findCommentField(schema),\n };\n }\n return null;\n}\n\nfunction findBooleanAction(schema: JsonSchemaObject): PromptInlineActionSpec | null {\n const properties = schema.properties ?? {};\n const preferred = [\"value\", \"approve\", \"approved\", \"confirm\", \"confirmed\", \"allowed\"];\n const field =\n preferred.find((key) => hasType(properties[key], \"boolean\")) ??\n Object.entries(properties).find(([, property]) => hasType(property, \"boolean\"))?.[0];\n\n if (!field) return null;\n return {\n field,\n approveValue: true,\n rejectValue: false,\n ...findCommentField(schema),\n };\n}\n\nexport function analyzePromptInlineActions(prompt: PromptSnapshot): PromptInlineActionSpec | null {\n const schema = prompt.schema;\n if (!schema?.properties) return null;\n return findEnumAction(schema) ?? findBooleanAction(schema);\n}\n\nexport function initialPromptComment(prompt: PromptSnapshot, spec: PromptInlineActionSpec | null): string {\n if (!spec?.commentField) return \"\";\n const value = prompt.value?.[spec.commentField];\n return typeof value === \"string\" ? value : \"\";\n}\n\nexport function buildPromptInlineValues(\n prompt: PromptSnapshot,\n spec: PromptInlineActionSpec,\n decision: PromptInlineDecision,\n comment: string,\n): Record<string, unknown> {\n const values: Record<string, unknown> = { ...prompt.value };\n values[spec.field] = decision === \"approve\" ? spec.approveValue : spec.rejectValue;\n\n if (spec.commentField) {\n const trimmed = comment.trim();\n if (trimmed || spec.commentRequired) {\n values[spec.commentField] = trimmed;\n } else {\n delete values[spec.commentField];\n }\n }\n\n return values;\n}\n\nexport function summarizePrompts(prompts: PromptSnapshot[]): PromptSummary {\n return prompts.reduce<PromptSummary>(\n (acc, prompt) => {\n acc.total += 1;\n if (prompt.state === \"pending\") acc.pending += 1;\n else if (prompt.state === \"answered\") acc.answered += 1;\n else if (prompt.state === \"cancelled\") acc.cancelled += 1;\n else if (prompt.state === \"expired\") acc.expired += 1;\n return acc;\n },\n { total: 0, pending: 0, answered: 0, cancelled: 0, expired: 0 },\n );\n}\n\nexport function summarizePromptAnswer(prompt: PromptSnapshot): string {\n if (prompt.cancelled || prompt.state === \"cancelled\") return \"Cancelled\";\n if (prompt.state === \"expired\") return \"Expired\";\n if (prompt.state === \"pending\") return prompt.kind ? `Pending ${prompt.kind}` : \"Pending\";\n\n const values = prompt.value ?? {};\n const spec = analyzePromptInlineActions(prompt);\n const parts: string[] = [];\n if (spec && spec.field in values) {\n if (Object.is(values[spec.field], spec.approveValue)) parts.push(\"Approved\");\n else if (Object.is(values[spec.field], spec.rejectValue)) parts.push(\"Rejected\");\n }\n if (spec?.commentField) {\n const comment = values[spec.commentField];\n if (typeof comment === \"string\" && comment) parts.push(comment);\n }\n if (parts.length > 0) return parts.join(\" - \");\n\n const primitive = Object.entries(values)\n .filter(([, value]) => [\"string\", \"number\", \"boolean\"].includes(typeof value))\n .slice(0, 2)\n .map(([key, value]) => `${key}: ${String(value)}`);\n return primitive.join(\" - \") || prompt.state;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"PromptBanner.model.cjs","names":[],"sources":["../../src/data/PromptBanner.model.ts"],"sourcesContent":["import type { JsonSchemaObject, JsonSchemaProperty } from \"../components/json-schema-form-types\";\nimport type { PromptSnapshot } from \"../hooks/use-prompts\";\n\nexport type PromptInlineDecision = \"approve\" | \"reject\";\n\nexport interface PromptInlineActionSpec {\n field: string;\n approveValue: unknown;\n rejectValue: unknown;\n commentField?: string;\n commentRequired: boolean;\n commentLabel?: string;\n}\n\nexport interface PromptSummary {\n total: number;\n pending: number;\n answered: number;\n cancelled: number;\n expired: number;\n}\n\nconst ACTION_FIELD_PRIORITY = [\"decision\", \"choice\", \"action\", \"value\", \"approve\", \"approved\"];\nconst COMMENT_FIELD_PRIORITY = [\"comment\", \"reason\", \"message\", \"note\"];\n\nconst APPROVE_RE = /\\b(approve|approved|allow|allowed|continue|yes|accept|accepted|proceed|run)\\b/i;\nconst REJECT_RE = /\\b(reject|rejected|deny|denied|cancel|cancelled|canceled|no|block|stop|decline|declined)\\b/i;\n\nfunction hasType(schema: JsonSchemaProperty | undefined, type: string): boolean {\n if (!schema?.type) return false;\n return Array.isArray(schema.type) ? schema.type.includes(type as never) : schema.type === type;\n}\n\nfunction sortedPropertyEntries(schema: JsonSchemaObject): [string, JsonSchemaProperty][] {\n const entries = Object.entries(schema.properties ?? {});\n return entries.sort(([a], [b]) => {\n const ia = ACTION_FIELD_PRIORITY.indexOf(a);\n const ib = ACTION_FIELD_PRIORITY.indexOf(b);\n if (ia === -1 && ib === -1) return 0;\n if (ia === -1) return 1;\n if (ib === -1) return -1;\n return ia - ib;\n });\n}\n\nfunction optionText(schema: JsonSchemaProperty, value: unknown): string {\n const key = String(value);\n const label = schema[\"x-enum-labels\"]?.[key];\n return [key, label].filter(Boolean).join(\" \");\n}\n\nfunction findCommentField(schema: JsonSchemaObject): Pick<\n PromptInlineActionSpec,\n \"commentField\" | \"commentRequired\" | \"commentLabel\"\n> {\n const properties = schema.properties ?? {};\n const required = new Set(schema.required ?? []);\n for (const key of COMMENT_FIELD_PRIORITY) {\n const property = properties[key];\n if (!property || !hasType(property, \"string\") || property.enum) continue;\n return {\n commentField: key,\n commentRequired: required.has(key),\n commentLabel: property.title ?? \"Comment\",\n };\n }\n return { commentRequired: false };\n}\n\nfunction findEnumAction(schema: JsonSchemaObject): PromptInlineActionSpec | null {\n for (const [field, property] of sortedPropertyEntries(schema)) {\n const values = property.enum ?? [];\n if (values.length === 0) continue;\n\n const approve = values.find((value) => APPROVE_RE.test(optionText(property, value)));\n const reject = values.find((value) => REJECT_RE.test(optionText(property, value)));\n if (approve === undefined || reject === undefined) continue;\n\n return {\n field,\n approveValue: approve,\n rejectValue: reject,\n ...findCommentField(schema),\n };\n }\n return null;\n}\n\nfunction findBooleanAction(schema: JsonSchemaObject): PromptInlineActionSpec | null {\n const properties = schema.properties ?? {};\n const preferred = [\"value\", \"approve\", \"approved\", \"confirm\", \"confirmed\", \"allowed\"];\n const field =\n preferred.find((key) => hasType(properties[key], \"boolean\")) ??\n Object.entries(properties).find(([, property]) => hasType(property, \"boolean\"))?.[0];\n\n if (!field) return null;\n return {\n field,\n approveValue: true,\n rejectValue: false,\n ...findCommentField(schema),\n };\n}\n\nexport function analyzePromptInlineActions(prompt: PromptSnapshot): PromptInlineActionSpec | null {\n const schema = prompt.schema;\n if (!schema?.properties) return null;\n return findEnumAction(schema) ?? findBooleanAction(schema);\n}\n\nexport function initialPromptComment(prompt: PromptSnapshot, spec: PromptInlineActionSpec | null): string {\n if (!spec?.commentField) return \"\";\n const value = prompt.value?.[spec.commentField];\n return typeof value === \"string\" ? value : \"\";\n}\n\nexport function buildPromptInlineValues(\n prompt: PromptSnapshot,\n spec: PromptInlineActionSpec,\n decision: PromptInlineDecision,\n comment: string,\n): Record<string, unknown> {\n const values: Record<string, unknown> = { ...prompt.value };\n values[spec.field] = decision === \"approve\" ? spec.approveValue : spec.rejectValue;\n\n if (spec.commentField) {\n const trimmed = comment.trim();\n if (trimmed || spec.commentRequired) {\n values[spec.commentField] = trimmed;\n } else {\n delete values[spec.commentField];\n }\n }\n\n return values;\n}\n\nexport function summarizePrompts(prompts: PromptSnapshot[]): PromptSummary {\n return prompts.reduce<PromptSummary>(\n (acc, prompt) => {\n acc.total += 1;\n if (prompt.state === \"pending\") acc.pending += 1;\n else if (prompt.state === \"answered\") acc.answered += 1;\n else if (prompt.state === \"cancelled\") acc.cancelled += 1;\n else if (prompt.state === \"expired\") acc.expired += 1;\n return acc;\n },\n { total: 0, pending: 0, answered: 0, cancelled: 0, expired: 0 },\n );\n}\n\nconst STATE_RANK: Record<string, number> = { pending: 0, answered: 1 };\n\n/** Pending prompts first, then answered, then closed (cancelled, expired); each group keeps its order. */\nexport function orderPrompts(prompts: readonly PromptSnapshot[]): PromptSnapshot[] {\n const rank = (prompt: PromptSnapshot) => STATE_RANK[prompt.state] ?? 2;\n return [...prompts].sort((a, b) => rank(a) - rank(b));\n}\n\nexport function summarizePromptAnswer(prompt: PromptSnapshot): string {\n if (prompt.cancelled || prompt.state === \"cancelled\") return \"Cancelled\";\n if (prompt.state === \"expired\") return \"Expired\";\n if (prompt.state === \"pending\") return prompt.kind ? `Pending ${prompt.kind}` : \"Pending\";\n\n const values = prompt.value ?? {};\n const spec = analyzePromptInlineActions(prompt);\n const parts: string[] = [];\n if (spec && spec.field in values) {\n if (Object.is(values[spec.field], spec.approveValue)) parts.push(\"Approved\");\n else if (Object.is(values[spec.field], spec.rejectValue)) parts.push(\"Rejected\");\n }\n if (spec?.commentField) {\n const comment = values[spec.commentField];\n if (typeof comment === \"string\" && comment) parts.push(comment);\n }\n if (parts.length > 0) return parts.join(\" - \");\n\n const primitive = Object.entries(values)\n .filter(([, value]) => [\"string\", \"number\", \"boolean\"].includes(typeof value))\n .slice(0, 2)\n .map(([key, value]) => `${key}: ${String(value)}`);\n return primitive.join(\" - \") || prompt.state;\n}\n"],"mappings":"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"}
|
|
@@ -19,5 +19,7 @@ export declare function analyzePromptInlineActions(prompt: PromptSnapshot): Prom
|
|
|
19
19
|
export declare function initialPromptComment(prompt: PromptSnapshot, spec: PromptInlineActionSpec | null): string;
|
|
20
20
|
export declare function buildPromptInlineValues(prompt: PromptSnapshot, spec: PromptInlineActionSpec, decision: PromptInlineDecision, comment: string): Record<string, unknown>;
|
|
21
21
|
export declare function summarizePrompts(prompts: PromptSnapshot[]): PromptSummary;
|
|
22
|
+
/** Pending prompts first, then answered, then closed (cancelled, expired); each group keeps its order. */
|
|
23
|
+
export declare function orderPrompts(prompts: readonly PromptSnapshot[]): PromptSnapshot[];
|
|
22
24
|
export declare function summarizePromptAnswer(prompt: PromptSnapshot): string;
|
|
23
25
|
//# sourceMappingURL=PromptBanner.model.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PromptBanner.model.d.ts","sourceRoot":"","sources":["../../src/data/PromptBanner.model.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,MAAM,MAAM,oBAAoB,GAAG,SAAS,GAAG,QAAQ,CAAC;AAExD,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAoFD,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,cAAc,GAAG,sBAAsB,GAAG,IAAI,CAIhG;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,sBAAsB,GAAG,IAAI,GAAG,MAAM,CAIxG;AAED,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,sBAAsB,EAC5B,QAAQ,EAAE,oBAAoB,EAC9B,OAAO,EAAE,MAAM,GACd,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAczB;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,aAAa,CAYzE;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAuBpE"}
|
|
1
|
+
{"version":3,"file":"PromptBanner.model.d.ts","sourceRoot":"","sources":["../../src/data/PromptBanner.model.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,MAAM,MAAM,oBAAoB,GAAG,SAAS,GAAG,QAAQ,CAAC;AAExD,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAoFD,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,cAAc,GAAG,sBAAsB,GAAG,IAAI,CAIhG;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,sBAAsB,GAAG,IAAI,GAAG,MAAM,CAIxG;AAED,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,sBAAsB,EAC5B,QAAQ,EAAE,oBAAoB,EAC9B,OAAO,EAAE,MAAM,GACd,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAczB;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,aAAa,CAYzE;AAID,0GAA0G;AAC1G,wBAAgB,YAAY,CAAC,OAAO,EAAE,SAAS,cAAc,EAAE,GAAG,cAAc,EAAE,CAGjF;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAuBpE"}
|
|
@@ -117,6 +117,15 @@ function summarizePrompts(prompts) {
|
|
|
117
117
|
expired: 0
|
|
118
118
|
});
|
|
119
119
|
}
|
|
120
|
+
var STATE_RANK = {
|
|
121
|
+
pending: 0,
|
|
122
|
+
answered: 1
|
|
123
|
+
};
|
|
124
|
+
/** Pending prompts first, then answered, then closed (cancelled, expired); each group keeps its order. */
|
|
125
|
+
function orderPrompts(prompts) {
|
|
126
|
+
const rank = (prompt) => STATE_RANK[prompt.state] ?? 2;
|
|
127
|
+
return [...prompts].sort((a, b) => rank(a) - rank(b));
|
|
128
|
+
}
|
|
120
129
|
function summarizePromptAnswer(prompt) {
|
|
121
130
|
if (prompt.cancelled || prompt.state === "cancelled") return "Cancelled";
|
|
122
131
|
if (prompt.state === "expired") return "Expired";
|
|
@@ -139,6 +148,6 @@ function summarizePromptAnswer(prompt) {
|
|
|
139
148
|
"boolean"
|
|
140
149
|
].includes(typeof value)).slice(0, 2).map(([key, value]) => `${key}: ${String(value)}`).join(" - ") || prompt.state;
|
|
141
150
|
}
|
|
142
|
-
export { analyzePromptInlineActions, buildPromptInlineValues, initialPromptComment, summarizePromptAnswer, summarizePrompts };
|
|
151
|
+
export { analyzePromptInlineActions, buildPromptInlineValues, initialPromptComment, orderPrompts, summarizePromptAnswer, summarizePrompts };
|
|
143
152
|
|
|
144
153
|
//# sourceMappingURL=PromptBanner.model.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PromptBanner.model.js","names":[],"sources":["../../src/data/PromptBanner.model.ts"],"sourcesContent":["import type { JsonSchemaObject, JsonSchemaProperty } from \"../components/json-schema-form-types\";\nimport type { PromptSnapshot } from \"../hooks/use-prompts\";\n\nexport type PromptInlineDecision = \"approve\" | \"reject\";\n\nexport interface PromptInlineActionSpec {\n field: string;\n approveValue: unknown;\n rejectValue: unknown;\n commentField?: string;\n commentRequired: boolean;\n commentLabel?: string;\n}\n\nexport interface PromptSummary {\n total: number;\n pending: number;\n answered: number;\n cancelled: number;\n expired: number;\n}\n\nconst ACTION_FIELD_PRIORITY = [\"decision\", \"choice\", \"action\", \"value\", \"approve\", \"approved\"];\nconst COMMENT_FIELD_PRIORITY = [\"comment\", \"reason\", \"message\", \"note\"];\n\nconst APPROVE_RE = /\\b(approve|approved|allow|allowed|continue|yes|accept|accepted|proceed|run)\\b/i;\nconst REJECT_RE = /\\b(reject|rejected|deny|denied|cancel|cancelled|canceled|no|block|stop|decline|declined)\\b/i;\n\nfunction hasType(schema: JsonSchemaProperty | undefined, type: string): boolean {\n if (!schema?.type) return false;\n return Array.isArray(schema.type) ? schema.type.includes(type as never) : schema.type === type;\n}\n\nfunction sortedPropertyEntries(schema: JsonSchemaObject): [string, JsonSchemaProperty][] {\n const entries = Object.entries(schema.properties ?? {});\n return entries.sort(([a], [b]) => {\n const ia = ACTION_FIELD_PRIORITY.indexOf(a);\n const ib = ACTION_FIELD_PRIORITY.indexOf(b);\n if (ia === -1 && ib === -1) return 0;\n if (ia === -1) return 1;\n if (ib === -1) return -1;\n return ia - ib;\n });\n}\n\nfunction optionText(schema: JsonSchemaProperty, value: unknown): string {\n const key = String(value);\n const label = schema[\"x-enum-labels\"]?.[key];\n return [key, label].filter(Boolean).join(\" \");\n}\n\nfunction findCommentField(schema: JsonSchemaObject): Pick<\n PromptInlineActionSpec,\n \"commentField\" | \"commentRequired\" | \"commentLabel\"\n> {\n const properties = schema.properties ?? {};\n const required = new Set(schema.required ?? []);\n for (const key of COMMENT_FIELD_PRIORITY) {\n const property = properties[key];\n if (!property || !hasType(property, \"string\") || property.enum) continue;\n return {\n commentField: key,\n commentRequired: required.has(key),\n commentLabel: property.title ?? \"Comment\",\n };\n }\n return { commentRequired: false };\n}\n\nfunction findEnumAction(schema: JsonSchemaObject): PromptInlineActionSpec | null {\n for (const [field, property] of sortedPropertyEntries(schema)) {\n const values = property.enum ?? [];\n if (values.length === 0) continue;\n\n const approve = values.find((value) => APPROVE_RE.test(optionText(property, value)));\n const reject = values.find((value) => REJECT_RE.test(optionText(property, value)));\n if (approve === undefined || reject === undefined) continue;\n\n return {\n field,\n approveValue: approve,\n rejectValue: reject,\n ...findCommentField(schema),\n };\n }\n return null;\n}\n\nfunction findBooleanAction(schema: JsonSchemaObject): PromptInlineActionSpec | null {\n const properties = schema.properties ?? {};\n const preferred = [\"value\", \"approve\", \"approved\", \"confirm\", \"confirmed\", \"allowed\"];\n const field =\n preferred.find((key) => hasType(properties[key], \"boolean\")) ??\n Object.entries(properties).find(([, property]) => hasType(property, \"boolean\"))?.[0];\n\n if (!field) return null;\n return {\n field,\n approveValue: true,\n rejectValue: false,\n ...findCommentField(schema),\n };\n}\n\nexport function analyzePromptInlineActions(prompt: PromptSnapshot): PromptInlineActionSpec | null {\n const schema = prompt.schema;\n if (!schema?.properties) return null;\n return findEnumAction(schema) ?? findBooleanAction(schema);\n}\n\nexport function initialPromptComment(prompt: PromptSnapshot, spec: PromptInlineActionSpec | null): string {\n if (!spec?.commentField) return \"\";\n const value = prompt.value?.[spec.commentField];\n return typeof value === \"string\" ? value : \"\";\n}\n\nexport function buildPromptInlineValues(\n prompt: PromptSnapshot,\n spec: PromptInlineActionSpec,\n decision: PromptInlineDecision,\n comment: string,\n): Record<string, unknown> {\n const values: Record<string, unknown> = { ...prompt.value };\n values[spec.field] = decision === \"approve\" ? spec.approveValue : spec.rejectValue;\n\n if (spec.commentField) {\n const trimmed = comment.trim();\n if (trimmed || spec.commentRequired) {\n values[spec.commentField] = trimmed;\n } else {\n delete values[spec.commentField];\n }\n }\n\n return values;\n}\n\nexport function summarizePrompts(prompts: PromptSnapshot[]): PromptSummary {\n return prompts.reduce<PromptSummary>(\n (acc, prompt) => {\n acc.total += 1;\n if (prompt.state === \"pending\") acc.pending += 1;\n else if (prompt.state === \"answered\") acc.answered += 1;\n else if (prompt.state === \"cancelled\") acc.cancelled += 1;\n else if (prompt.state === \"expired\") acc.expired += 1;\n return acc;\n },\n { total: 0, pending: 0, answered: 0, cancelled: 0, expired: 0 },\n );\n}\n\nexport function summarizePromptAnswer(prompt: PromptSnapshot): string {\n if (prompt.cancelled || prompt.state === \"cancelled\") return \"Cancelled\";\n if (prompt.state === \"expired\") return \"Expired\";\n if (prompt.state === \"pending\") return prompt.kind ? `Pending ${prompt.kind}` : \"Pending\";\n\n const values = prompt.value ?? {};\n const spec = analyzePromptInlineActions(prompt);\n const parts: string[] = [];\n if (spec && spec.field in values) {\n if (Object.is(values[spec.field], spec.approveValue)) parts.push(\"Approved\");\n else if (Object.is(values[spec.field], spec.rejectValue)) parts.push(\"Rejected\");\n }\n if (spec?.commentField) {\n const comment = values[spec.commentField];\n if (typeof comment === \"string\" && comment) parts.push(comment);\n }\n if (parts.length > 0) return parts.join(\" - \");\n\n const primitive = Object.entries(values)\n .filter(([, value]) => [\"string\", \"number\", \"boolean\"].includes(typeof value))\n .slice(0, 2)\n .map(([key, value]) => `${key}: ${String(value)}`);\n return primitive.join(\" - \") || prompt.state;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"PromptBanner.model.js","names":[],"sources":["../../src/data/PromptBanner.model.ts"],"sourcesContent":["import type { JsonSchemaObject, JsonSchemaProperty } from \"../components/json-schema-form-types\";\nimport type { PromptSnapshot } from \"../hooks/use-prompts\";\n\nexport type PromptInlineDecision = \"approve\" | \"reject\";\n\nexport interface PromptInlineActionSpec {\n field: string;\n approveValue: unknown;\n rejectValue: unknown;\n commentField?: string;\n commentRequired: boolean;\n commentLabel?: string;\n}\n\nexport interface PromptSummary {\n total: number;\n pending: number;\n answered: number;\n cancelled: number;\n expired: number;\n}\n\nconst ACTION_FIELD_PRIORITY = [\"decision\", \"choice\", \"action\", \"value\", \"approve\", \"approved\"];\nconst COMMENT_FIELD_PRIORITY = [\"comment\", \"reason\", \"message\", \"note\"];\n\nconst APPROVE_RE = /\\b(approve|approved|allow|allowed|continue|yes|accept|accepted|proceed|run)\\b/i;\nconst REJECT_RE = /\\b(reject|rejected|deny|denied|cancel|cancelled|canceled|no|block|stop|decline|declined)\\b/i;\n\nfunction hasType(schema: JsonSchemaProperty | undefined, type: string): boolean {\n if (!schema?.type) return false;\n return Array.isArray(schema.type) ? schema.type.includes(type as never) : schema.type === type;\n}\n\nfunction sortedPropertyEntries(schema: JsonSchemaObject): [string, JsonSchemaProperty][] {\n const entries = Object.entries(schema.properties ?? {});\n return entries.sort(([a], [b]) => {\n const ia = ACTION_FIELD_PRIORITY.indexOf(a);\n const ib = ACTION_FIELD_PRIORITY.indexOf(b);\n if (ia === -1 && ib === -1) return 0;\n if (ia === -1) return 1;\n if (ib === -1) return -1;\n return ia - ib;\n });\n}\n\nfunction optionText(schema: JsonSchemaProperty, value: unknown): string {\n const key = String(value);\n const label = schema[\"x-enum-labels\"]?.[key];\n return [key, label].filter(Boolean).join(\" \");\n}\n\nfunction findCommentField(schema: JsonSchemaObject): Pick<\n PromptInlineActionSpec,\n \"commentField\" | \"commentRequired\" | \"commentLabel\"\n> {\n const properties = schema.properties ?? {};\n const required = new Set(schema.required ?? []);\n for (const key of COMMENT_FIELD_PRIORITY) {\n const property = properties[key];\n if (!property || !hasType(property, \"string\") || property.enum) continue;\n return {\n commentField: key,\n commentRequired: required.has(key),\n commentLabel: property.title ?? \"Comment\",\n };\n }\n return { commentRequired: false };\n}\n\nfunction findEnumAction(schema: JsonSchemaObject): PromptInlineActionSpec | null {\n for (const [field, property] of sortedPropertyEntries(schema)) {\n const values = property.enum ?? [];\n if (values.length === 0) continue;\n\n const approve = values.find((value) => APPROVE_RE.test(optionText(property, value)));\n const reject = values.find((value) => REJECT_RE.test(optionText(property, value)));\n if (approve === undefined || reject === undefined) continue;\n\n return {\n field,\n approveValue: approve,\n rejectValue: reject,\n ...findCommentField(schema),\n };\n }\n return null;\n}\n\nfunction findBooleanAction(schema: JsonSchemaObject): PromptInlineActionSpec | null {\n const properties = schema.properties ?? {};\n const preferred = [\"value\", \"approve\", \"approved\", \"confirm\", \"confirmed\", \"allowed\"];\n const field =\n preferred.find((key) => hasType(properties[key], \"boolean\")) ??\n Object.entries(properties).find(([, property]) => hasType(property, \"boolean\"))?.[0];\n\n if (!field) return null;\n return {\n field,\n approveValue: true,\n rejectValue: false,\n ...findCommentField(schema),\n };\n}\n\nexport function analyzePromptInlineActions(prompt: PromptSnapshot): PromptInlineActionSpec | null {\n const schema = prompt.schema;\n if (!schema?.properties) return null;\n return findEnumAction(schema) ?? findBooleanAction(schema);\n}\n\nexport function initialPromptComment(prompt: PromptSnapshot, spec: PromptInlineActionSpec | null): string {\n if (!spec?.commentField) return \"\";\n const value = prompt.value?.[spec.commentField];\n return typeof value === \"string\" ? value : \"\";\n}\n\nexport function buildPromptInlineValues(\n prompt: PromptSnapshot,\n spec: PromptInlineActionSpec,\n decision: PromptInlineDecision,\n comment: string,\n): Record<string, unknown> {\n const values: Record<string, unknown> = { ...prompt.value };\n values[spec.field] = decision === \"approve\" ? spec.approveValue : spec.rejectValue;\n\n if (spec.commentField) {\n const trimmed = comment.trim();\n if (trimmed || spec.commentRequired) {\n values[spec.commentField] = trimmed;\n } else {\n delete values[spec.commentField];\n }\n }\n\n return values;\n}\n\nexport function summarizePrompts(prompts: PromptSnapshot[]): PromptSummary {\n return prompts.reduce<PromptSummary>(\n (acc, prompt) => {\n acc.total += 1;\n if (prompt.state === \"pending\") acc.pending += 1;\n else if (prompt.state === \"answered\") acc.answered += 1;\n else if (prompt.state === \"cancelled\") acc.cancelled += 1;\n else if (prompt.state === \"expired\") acc.expired += 1;\n return acc;\n },\n { total: 0, pending: 0, answered: 0, cancelled: 0, expired: 0 },\n );\n}\n\nconst STATE_RANK: Record<string, number> = { pending: 0, answered: 1 };\n\n/** Pending prompts first, then answered, then closed (cancelled, expired); each group keeps its order. */\nexport function orderPrompts(prompts: readonly PromptSnapshot[]): PromptSnapshot[] {\n const rank = (prompt: PromptSnapshot) => STATE_RANK[prompt.state] ?? 2;\n return [...prompts].sort((a, b) => rank(a) - rank(b));\n}\n\nexport function summarizePromptAnswer(prompt: PromptSnapshot): string {\n if (prompt.cancelled || prompt.state === \"cancelled\") return \"Cancelled\";\n if (prompt.state === \"expired\") return \"Expired\";\n if (prompt.state === \"pending\") return prompt.kind ? `Pending ${prompt.kind}` : \"Pending\";\n\n const values = prompt.value ?? {};\n const spec = analyzePromptInlineActions(prompt);\n const parts: string[] = [];\n if (spec && spec.field in values) {\n if (Object.is(values[spec.field], spec.approveValue)) parts.push(\"Approved\");\n else if (Object.is(values[spec.field], spec.rejectValue)) parts.push(\"Rejected\");\n }\n if (spec?.commentField) {\n const comment = values[spec.commentField];\n if (typeof comment === \"string\" && comment) parts.push(comment);\n }\n if (parts.length > 0) return parts.join(\" - \");\n\n const primitive = Object.entries(values)\n .filter(([, value]) => [\"string\", \"number\", \"boolean\"].includes(typeof value))\n .slice(0, 2)\n .map(([key, value]) => `${key}: ${String(value)}`);\n return primitive.join(\" - \") || prompt.state;\n}\n"],"mappings":";AAsBA,IAAM,wBAAwB;CAAC;CAAY;CAAU;CAAU;CAAS;CAAW;AAAU;AAC7F,IAAM,yBAAyB;CAAC;CAAW;CAAU;CAAW;AAAM;AAEtE,IAAM,aAAa;AACnB,IAAM,YAAY;AAElB,SAAS,QAAQ,QAAwC,MAAuB;CAC9E,IAAI,CAAC,QAAQ,MAAM,OAAO;CAC1B,OAAO,MAAM,QAAQ,OAAO,IAAI,IAAI,OAAO,KAAK,SAAS,IAAa,IAAI,OAAO,SAAS;AAC5F;AAEA,SAAS,sBAAsB,QAA0D;CAEvF,OADgB,OAAO,QAAQ,OAAO,cAAc,CAAC,CAC9C,CAAA,CAAQ,MAAM,CAAC,IAAI,CAAC,OAAO;EAChC,MAAM,KAAK,sBAAsB,QAAQ,CAAC;EAC1C,MAAM,KAAK,sBAAsB,QAAQ,CAAC;EAC1C,IAAI,OAAO,MAAM,OAAO,IAAI,OAAO;EACnC,IAAI,OAAO,IAAI,OAAO;EACtB,IAAI,OAAO,IAAI,OAAO;EACtB,OAAO,KAAK;CACd,CAAC;AACH;AAEA,SAAS,WAAW,QAA4B,OAAwB;CACtE,MAAM,MAAM,OAAO,KAAK;CAExB,OAAO,CAAC,KADM,OAAO,gBAAgB,GAAG,IACtB,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG;AAC9C;AAEA,SAAS,iBAAiB,QAGxB;CACA,MAAM,aAAa,OAAO,cAAc,CAAC;CACzC,MAAM,WAAW,IAAI,IAAI,OAAO,YAAY,CAAC,CAAC;CAC9C,KAAK,MAAM,OAAO,wBAAwB;EACxC,MAAM,WAAW,WAAW;EAC5B,IAAI,CAAC,YAAY,CAAC,QAAQ,UAAU,QAAQ,KAAK,SAAS,MAAM;EAChE,OAAO;GACL,cAAc;GACd,iBAAiB,SAAS,IAAI,GAAG;GACjC,cAAc,SAAS,SAAS;EAClC;CACF;CACA,OAAO,EAAE,iBAAiB,MAAM;AAClC;AAEA,SAAS,eAAe,QAAyD;CAC/E,KAAK,MAAM,CAAC,OAAO,aAAa,sBAAsB,MAAM,GAAG;EAC7D,MAAM,SAAS,SAAS,QAAQ,CAAC;EACjC,IAAI,OAAO,WAAW,GAAG;EAEzB,MAAM,UAAU,OAAO,MAAM,UAAU,WAAW,KAAK,WAAW,UAAU,KAAK,CAAC,CAAC;EACnF,MAAM,SAAS,OAAO,MAAM,UAAU,UAAU,KAAK,WAAW,UAAU,KAAK,CAAC,CAAC;EACjF,IAAI,YAAY,KAAA,KAAa,WAAW,KAAA,GAAW;EAEnD,OAAO;GACL;GACA,cAAc;GACd,aAAa;GACb,GAAG,iBAAiB,MAAM;EAC5B;CACF;CACA,OAAO;AACT;AAEA,SAAS,kBAAkB,QAAyD;CAClF,MAAM,aAAa,OAAO,cAAc,CAAC;CAEzC,MAAM,QACJ;EAFiB;EAAS;EAAW;EAAY;EAAW;EAAa;CAEzE,CAAA,CAAU,MAAM,QAAQ,QAAQ,WAAW,MAAM,SAAS,CAAC,KAC3D,OAAO,QAAQ,UAAU,CAAC,CAAC,MAAM,GAAG,cAAc,QAAQ,UAAU,SAAS,CAAC,CAAC,GAAG;CAEpF,IAAI,CAAC,OAAO,OAAO;CACnB,OAAO;EACL;EACA,cAAc;EACd,aAAa;EACb,GAAG,iBAAiB,MAAM;CAC5B;AACF;AAEA,SAAgB,2BAA2B,QAAuD;CAChG,MAAM,SAAS,OAAO;CACtB,IAAI,CAAC,QAAQ,YAAY,OAAO;CAChC,OAAO,eAAe,MAAM,KAAK,kBAAkB,MAAM;AAC3D;AAEA,SAAgB,qBAAqB,QAAwB,MAA6C;CACxG,IAAI,CAAC,MAAM,cAAc,OAAO;CAChC,MAAM,QAAQ,OAAO,QAAQ,KAAK;CAClC,OAAO,OAAO,UAAU,WAAW,QAAQ;AAC7C;AAEA,SAAgB,wBACd,QACA,MACA,UACA,SACyB;CACzB,MAAM,SAAkC,EAAE,GAAG,OAAO,MAAM;CAC1D,OAAO,KAAK,SAAS,aAAa,YAAY,KAAK,eAAe,KAAK;CAEvE,IAAI,KAAK,cAAc;EACrB,MAAM,UAAU,QAAQ,KAAK;EAC7B,IAAI,WAAW,KAAK,iBAClB,OAAO,KAAK,gBAAgB;OAE5B,OAAO,OAAO,KAAK;CAEvB;CAEA,OAAO;AACT;AAEA,SAAgB,iBAAiB,SAA0C;CACzE,OAAO,QAAQ,QACZ,KAAK,WAAW;EACf,IAAI,SAAS;EACb,IAAI,OAAO,UAAU,WAAW,IAAI,WAAW;OAC1C,IAAI,OAAO,UAAU,YAAY,IAAI,YAAY;OACjD,IAAI,OAAO,UAAU,aAAa,IAAI,aAAa;OACnD,IAAI,OAAO,UAAU,WAAW,IAAI,WAAW;EACpD,OAAO;CACT,GACA;EAAE,OAAO;EAAG,SAAS;EAAG,UAAU;EAAG,WAAW;EAAG,SAAS;CAAE,CAChE;AACF;AAEA,IAAM,aAAqC;CAAE,SAAS;CAAG,UAAU;AAAE;;AAGrE,SAAgB,aAAa,SAAsD;CACjF,MAAM,QAAQ,WAA2B,WAAW,OAAO,UAAU;CACrE,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,MAAM,GAAG,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC;AACtD;AAEA,SAAgB,sBAAsB,QAAgC;CACpE,IAAI,OAAO,aAAa,OAAO,UAAU,aAAa,OAAO;CAC7D,IAAI,OAAO,UAAU,WAAW,OAAO;CACvC,IAAI,OAAO,UAAU,WAAW,OAAO,OAAO,OAAO,WAAW,OAAO,SAAS;CAEhF,MAAM,SAAS,OAAO,SAAS,CAAC;CAChC,MAAM,OAAO,2BAA2B,MAAM;CAC9C,MAAM,QAAkB,CAAC;CACzB,IAAI,QAAQ,KAAK,SAAS,QAAQ;EAChC,IAAI,OAAO,GAAG,OAAO,KAAK,QAAQ,KAAK,YAAY,GAAG,MAAM,KAAK,UAAU;OACtE,IAAI,OAAO,GAAG,OAAO,KAAK,QAAQ,KAAK,WAAW,GAAG,MAAM,KAAK,UAAU;CACjF;CACA,IAAI,MAAM,cAAc;EACtB,MAAM,UAAU,OAAO,KAAK;EAC5B,IAAI,OAAO,YAAY,YAAY,SAAS,MAAM,KAAK,OAAO;CAChE;CACA,IAAI,MAAM,SAAS,GAAG,OAAO,MAAM,KAAK,KAAK;CAM7C,OAJkB,OAAO,QAAQ,MAAM,CAAC,CACrC,QAAQ,GAAG,WAAW;EAAC;EAAU;EAAU;CAAS,CAAC,CAAC,SAAS,OAAO,KAAK,CAAC,CAAC,CAC7E,MAAM,GAAG,CAAC,CAAC,CACX,KAAK,CAAC,KAAK,WAAW,GAAG,IAAI,IAAI,OAAO,KAAK,GACzC,CAAA,CAAU,KAAK,KAAK,KAAK,OAAO;AACzC"}
|
|
@@ -1,57 +1,24 @@
|
|
|
1
|
-
const require_use_prompts = require("../hooks/use-prompts.cjs");
|
|
2
|
-
const require_button = require("../components/button.cjs");
|
|
3
1
|
const require_Modal = require("../overlay/Modal.cjs");
|
|
4
|
-
const
|
|
5
|
-
let react = require("react");
|
|
2
|
+
const require_PromptForm = require("./PromptForm.cjs");
|
|
6
3
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
7
4
|
// src/data/PromptDialog.tsx
|
|
8
|
-
function PromptDialog({ prompt, basePath, open, onClose, onResolved }) {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
setError(null);
|
|
15
|
-
try {
|
|
16
|
-
await require_use_prompts.answerPrompt(basePath, prompt.id, answer);
|
|
5
|
+
function PromptDialog({ prompt, basePath, open, onClose, onResolved, lookupFetcher, size = "lg" }) {
|
|
6
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_PromptForm.PromptForm, {
|
|
7
|
+
prompt,
|
|
8
|
+
basePath,
|
|
9
|
+
lookupFetcher,
|
|
10
|
+
onResolved: () => {
|
|
17
11
|
onResolved?.();
|
|
18
12
|
onClose();
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
title: prompt.title,
|
|
29
|
-
subtitle: prompt.description,
|
|
30
|
-
footer: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
31
|
-
className: "flex items-center justify-end gap-2",
|
|
32
|
-
children: [
|
|
33
|
-
error ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
34
|
-
className: "mr-auto text-sm text-red-600",
|
|
35
|
-
children: error
|
|
36
|
-
}) : null,
|
|
37
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_button.Button, {
|
|
38
|
-
variant: "ghost",
|
|
39
|
-
disabled: busy,
|
|
40
|
-
onClick: () => void resolve({ cancelled: true }),
|
|
41
|
-
children: "Cancel"
|
|
42
|
-
}),
|
|
43
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_button.Button, {
|
|
44
|
-
disabled: busy,
|
|
45
|
-
onClick: () => void resolve({ values: value }),
|
|
46
|
-
children: "Submit"
|
|
47
|
-
})
|
|
48
|
-
]
|
|
49
|
-
}),
|
|
50
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_JsonSchemaForm.JsonSchemaForm, {
|
|
51
|
-
schema: prompt.schema,
|
|
52
|
-
value,
|
|
53
|
-
onChange: setValue,
|
|
54
|
-
idPrefix: `prompt-${prompt.id}`
|
|
13
|
+
},
|
|
14
|
+
frame: ({ form, actions }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Modal.Modal, {
|
|
15
|
+
open,
|
|
16
|
+
size,
|
|
17
|
+
onClose,
|
|
18
|
+
title: prompt.title,
|
|
19
|
+
subtitle: prompt.description,
|
|
20
|
+
footer: actions,
|
|
21
|
+
children: form
|
|
55
22
|
})
|
|
56
23
|
});
|
|
57
24
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PromptDialog.cjs","names":["
|
|
1
|
+
{"version":3,"file":"PromptDialog.cjs","names":["PromptForm","Modal"],"sources":["../../src/data/PromptDialog.tsx"],"sourcesContent":["import type { LookupFetcher } from \"../components/json-schema-form-runtime-types\";\nimport { Modal, type ModalSize } from \"../overlay/Modal\";\nimport type { PromptSnapshot } from \"../hooks/use-prompts\";\nimport { PromptForm } from \"./PromptForm\";\n\nexport interface PromptDialogProps {\n /** The pending prompt to answer. Its `schema` drives the rendered form. */\n prompt: PromptSnapshot;\n /** Base path the prompt API is mounted under, e.g. \"/api/todos\". */\n basePath: string;\n open: boolean;\n /** Closes the modal without answering (the prompt stays pending). */\n onClose: () => void;\n /** Called after the prompt is successfully answered or cancelled. */\n onResolved?: (() => void) | undefined;\n /** Resolves the options of the schema's `x-clicky-lookup` fields (e.g. a connection picker). */\n lookupFetcher?: LookupFetcher | undefined;\n /** The dialog width; a form of several fields needs more than a confirm box. */\n size?: ModalSize | undefined;\n}\n\n// PromptDialog is PromptForm inside a Modal: the prompt's title and description\n// head the dialog, Submit/Cancel are pinned in its footer, and answering closes\n// it. It is the human side of the same mechanism an AI model elicits through.\nexport function PromptDialog({ prompt, basePath, open, onClose, onResolved, lookupFetcher, size = \"lg\" }: PromptDialogProps) {\n return (\n <PromptForm\n prompt={prompt}\n basePath={basePath}\n lookupFetcher={lookupFetcher}\n onResolved={() => {\n onResolved?.();\n onClose();\n }}\n frame={({ form, actions }) => (\n <Modal open={open} size={size} onClose={onClose} title={prompt.title} subtitle={prompt.description} footer={actions}>\n {form}\n </Modal>\n )}\n />\n );\n}\n"],"mappings":";;;;AAwBA,SAAgB,aAAa,EAAE,QAAQ,UAAU,MAAM,SAAS,YAAY,eAAe,OAAO,QAA2B;CAC3H,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACA,mBAAAA,YAAD;EACU;EACE;EACK;EACf,kBAAkB;GAChB,aAAa;GACb,QAAQ;EACV;EACA,QAAQ,EAAE,MAAM,cACd,iBAAA,GAAA,kBAAA,IAAA,CAACC,cAAAA,OAAD;GAAa;GAAY;GAAe;GAAS,OAAO,OAAO;GAAO,UAAU,OAAO;GAAa,QAAQ;GACzG,UAAA;EACI,CAAA;CAEV,CAAA;AAEL"}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { LookupFetcher } from '../components/json-schema-form-runtime-types.js';
|
|
2
|
+
import { ModalSize } from '../overlay/Modal.js';
|
|
1
3
|
import { PromptSnapshot } from '../hooks/use-prompts.js';
|
|
2
4
|
export interface PromptDialogProps {
|
|
3
5
|
/** The pending prompt to answer. Its `schema` drives the rendered form. */
|
|
@@ -9,6 +11,10 @@ export interface PromptDialogProps {
|
|
|
9
11
|
onClose: () => void;
|
|
10
12
|
/** Called after the prompt is successfully answered or cancelled. */
|
|
11
13
|
onResolved?: (() => void) | undefined;
|
|
14
|
+
/** Resolves the options of the schema's `x-clicky-lookup` fields (e.g. a connection picker). */
|
|
15
|
+
lookupFetcher?: LookupFetcher | undefined;
|
|
16
|
+
/** The dialog width; a form of several fields needs more than a confirm box. */
|
|
17
|
+
size?: ModalSize | undefined;
|
|
12
18
|
}
|
|
13
|
-
export declare function PromptDialog({ prompt, basePath, open, onClose, onResolved }: PromptDialogProps): import("react").JSX.Element;
|
|
19
|
+
export declare function PromptDialog({ prompt, basePath, open, onClose, onResolved, lookupFetcher, size }: PromptDialogProps): import("react").JSX.Element;
|
|
14
20
|
//# sourceMappingURL=PromptDialog.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PromptDialog.d.ts","sourceRoot":"","sources":["../../src/data/PromptDialog.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PromptDialog.d.ts","sourceRoot":"","sources":["../../src/data/PromptDialog.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8CAA8C,CAAC;AAClF,OAAO,EAAS,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAG3D,MAAM,WAAW,iBAAiB;IAChC,2EAA2E;IAC3E,MAAM,EAAE,cAAc,CAAC;IACvB,oEAAoE;IACpE,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,qEAAqE;IACrE,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,qEAAqE;IACrE,UAAU,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;IACtC,gGAAgG;IAChG,aAAa,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;IAC1C,gFAAgF;IAChF,IAAI,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;CAC9B;AAKD,wBAAgB,YAAY,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,IAAW,EAAE,EAAE,iBAAiB,+BAiB1H"}
|
|
@@ -1,57 +1,24 @@
|
|
|
1
|
-
import { answerPrompt } from "../hooks/use-prompts.js";
|
|
2
|
-
import { Button } from "../components/button.js";
|
|
3
1
|
import { Modal } from "../overlay/Modal.js";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { PromptForm } from "./PromptForm.js";
|
|
3
|
+
import { jsx } from "react/jsx-runtime";
|
|
7
4
|
// src/data/PromptDialog.tsx
|
|
8
|
-
function PromptDialog({ prompt, basePath, open, onClose, onResolved }) {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
setError(null);
|
|
15
|
-
try {
|
|
16
|
-
await answerPrompt(basePath, prompt.id, answer);
|
|
5
|
+
function PromptDialog({ prompt, basePath, open, onClose, onResolved, lookupFetcher, size = "lg" }) {
|
|
6
|
+
return /* @__PURE__ */ jsx(PromptForm, {
|
|
7
|
+
prompt,
|
|
8
|
+
basePath,
|
|
9
|
+
lookupFetcher,
|
|
10
|
+
onResolved: () => {
|
|
17
11
|
onResolved?.();
|
|
18
12
|
onClose();
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
title: prompt.title,
|
|
29
|
-
subtitle: prompt.description,
|
|
30
|
-
footer: /* @__PURE__ */ jsxs("div", {
|
|
31
|
-
className: "flex items-center justify-end gap-2",
|
|
32
|
-
children: [
|
|
33
|
-
error ? /* @__PURE__ */ jsx("span", {
|
|
34
|
-
className: "mr-auto text-sm text-red-600",
|
|
35
|
-
children: error
|
|
36
|
-
}) : null,
|
|
37
|
-
/* @__PURE__ */ jsx(Button, {
|
|
38
|
-
variant: "ghost",
|
|
39
|
-
disabled: busy,
|
|
40
|
-
onClick: () => void resolve({ cancelled: true }),
|
|
41
|
-
children: "Cancel"
|
|
42
|
-
}),
|
|
43
|
-
/* @__PURE__ */ jsx(Button, {
|
|
44
|
-
disabled: busy,
|
|
45
|
-
onClick: () => void resolve({ values: value }),
|
|
46
|
-
children: "Submit"
|
|
47
|
-
})
|
|
48
|
-
]
|
|
49
|
-
}),
|
|
50
|
-
children: /* @__PURE__ */ jsx(JsonSchemaForm, {
|
|
51
|
-
schema: prompt.schema,
|
|
52
|
-
value,
|
|
53
|
-
onChange: setValue,
|
|
54
|
-
idPrefix: `prompt-${prompt.id}`
|
|
13
|
+
},
|
|
14
|
+
frame: ({ form, actions }) => /* @__PURE__ */ jsx(Modal, {
|
|
15
|
+
open,
|
|
16
|
+
size,
|
|
17
|
+
onClose,
|
|
18
|
+
title: prompt.title,
|
|
19
|
+
subtitle: prompt.description,
|
|
20
|
+
footer: actions,
|
|
21
|
+
children: form
|
|
55
22
|
})
|
|
56
23
|
});
|
|
57
24
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PromptDialog.js","names":[],"sources":["../../src/data/PromptDialog.tsx"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"PromptDialog.js","names":[],"sources":["../../src/data/PromptDialog.tsx"],"sourcesContent":["import type { LookupFetcher } from \"../components/json-schema-form-runtime-types\";\nimport { Modal, type ModalSize } from \"../overlay/Modal\";\nimport type { PromptSnapshot } from \"../hooks/use-prompts\";\nimport { PromptForm } from \"./PromptForm\";\n\nexport interface PromptDialogProps {\n /** The pending prompt to answer. Its `schema` drives the rendered form. */\n prompt: PromptSnapshot;\n /** Base path the prompt API is mounted under, e.g. \"/api/todos\". */\n basePath: string;\n open: boolean;\n /** Closes the modal without answering (the prompt stays pending). */\n onClose: () => void;\n /** Called after the prompt is successfully answered or cancelled. */\n onResolved?: (() => void) | undefined;\n /** Resolves the options of the schema's `x-clicky-lookup` fields (e.g. a connection picker). */\n lookupFetcher?: LookupFetcher | undefined;\n /** The dialog width; a form of several fields needs more than a confirm box. */\n size?: ModalSize | undefined;\n}\n\n// PromptDialog is PromptForm inside a Modal: the prompt's title and description\n// head the dialog, Submit/Cancel are pinned in its footer, and answering closes\n// it. It is the human side of the same mechanism an AI model elicits through.\nexport function PromptDialog({ prompt, basePath, open, onClose, onResolved, lookupFetcher, size = \"lg\" }: PromptDialogProps) {\n return (\n <PromptForm\n prompt={prompt}\n basePath={basePath}\n lookupFetcher={lookupFetcher}\n onResolved={() => {\n onResolved?.();\n onClose();\n }}\n frame={({ form, actions }) => (\n <Modal open={open} size={size} onClose={onClose} title={prompt.title} subtitle={prompt.description} footer={actions}>\n {form}\n </Modal>\n )}\n />\n );\n}\n"],"mappings":";;;;AAwBA,SAAgB,aAAa,EAAE,QAAQ,UAAU,MAAM,SAAS,YAAY,eAAe,OAAO,QAA2B;CAC3H,OACE,oBAAC,YAAD;EACU;EACE;EACK;EACf,kBAAkB;GAChB,aAAa;GACb,QAAQ;EACV;EACA,QAAQ,EAAE,MAAM,cACd,oBAAC,OAAD;GAAa;GAAY;GAAe;GAAS,OAAO,OAAO;GAAO,UAAU,OAAO;GAAa,QAAQ;GACzG,UAAA;EACI,CAAA;CAEV,CAAA;AAEL"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
const require_use_prompts = require("../hooks/use-prompts.cjs");
|
|
2
|
+
const require_button = require("../components/button.cjs");
|
|
3
|
+
const require_JsonSchemaForm = require("../components/JsonSchemaForm.cjs");
|
|
4
|
+
let react = require("react");
|
|
5
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
6
|
+
// src/data/PromptForm.tsx
|
|
7
|
+
function PromptForm({ prompt, basePath, onResolved, lookupFetcher, idPrefix, frame }) {
|
|
8
|
+
const [value, setValue] = (0, react.useState)(() => ({ ...prompt.value }));
|
|
9
|
+
const [busy, setBusy] = (0, react.useState)(false);
|
|
10
|
+
const [error, setError] = (0, react.useState)(null);
|
|
11
|
+
const [answering, setAnswering] = (0, react.useState)(prompt.id);
|
|
12
|
+
if (answering !== prompt.id) {
|
|
13
|
+
setAnswering(prompt.id);
|
|
14
|
+
setValue({ ...prompt.value });
|
|
15
|
+
setBusy(false);
|
|
16
|
+
setError(null);
|
|
17
|
+
}
|
|
18
|
+
const resolve = async (answer) => {
|
|
19
|
+
setBusy(true);
|
|
20
|
+
setError(null);
|
|
21
|
+
try {
|
|
22
|
+
await require_use_prompts.answerPrompt(basePath, prompt.id, answer);
|
|
23
|
+
onResolved?.();
|
|
24
|
+
} catch (e) {
|
|
25
|
+
setError(e instanceof Error ? e.message : String(e));
|
|
26
|
+
} finally {
|
|
27
|
+
setBusy(false);
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
const form = /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_JsonSchemaForm.JsonSchemaForm, {
|
|
31
|
+
schema: prompt.schema,
|
|
32
|
+
value,
|
|
33
|
+
onChange: setValue,
|
|
34
|
+
idPrefix: idPrefix ?? `prompt-${prompt.id}`,
|
|
35
|
+
...lookupFetcher ? { lookupFetcher } : {}
|
|
36
|
+
});
|
|
37
|
+
const actions = /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
38
|
+
className: "flex items-center justify-end gap-2",
|
|
39
|
+
children: [
|
|
40
|
+
error ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
41
|
+
className: "mr-auto text-sm text-destructive",
|
|
42
|
+
children: error
|
|
43
|
+
}) : null,
|
|
44
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_button.Button, {
|
|
45
|
+
variant: "ghost",
|
|
46
|
+
disabled: busy,
|
|
47
|
+
onClick: () => void resolve({ cancelled: true }),
|
|
48
|
+
children: "Cancel"
|
|
49
|
+
}),
|
|
50
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_button.Button, {
|
|
51
|
+
disabled: busy,
|
|
52
|
+
onClick: () => void resolve({ values: value }),
|
|
53
|
+
children: "Submit"
|
|
54
|
+
})
|
|
55
|
+
]
|
|
56
|
+
});
|
|
57
|
+
if (frame) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_jsx_runtime.Fragment, { children: frame({
|
|
58
|
+
form,
|
|
59
|
+
actions
|
|
60
|
+
}) });
|
|
61
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
62
|
+
className: "min-w-0 space-y-density-2",
|
|
63
|
+
"data-prompt-form": prompt.id,
|
|
64
|
+
children: [
|
|
65
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
66
|
+
className: "text-sm font-medium",
|
|
67
|
+
children: prompt.title
|
|
68
|
+
}), prompt.description ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
69
|
+
className: "text-xs text-muted-foreground",
|
|
70
|
+
children: prompt.description
|
|
71
|
+
}) : null] }),
|
|
72
|
+
form,
|
|
73
|
+
actions
|
|
74
|
+
]
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
exports.PromptForm = PromptForm;
|
|
78
|
+
|
|
79
|
+
//# sourceMappingURL=PromptForm.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PromptForm.cjs","names":["useState","answerPrompt","JsonSchemaForm","Button","_Fragment"],"sources":["../../src/data/PromptForm.tsx"],"sourcesContent":["import { useState, type ReactNode } from \"react\";\nimport { Button } from \"../components/button\";\nimport { JsonSchemaForm } from \"../components/JsonSchemaForm\";\nimport type { LookupFetcher } from \"../components/json-schema-form-runtime-types\";\nimport { answerPrompt, type PromptSnapshot } from \"../hooks/use-prompts\";\n\nexport interface PromptFormProps {\n /** The pending prompt to answer. Its `schema` drives the rendered form. */\n prompt: PromptSnapshot;\n /** Base path the prompt API is mounted under, e.g. \"/api/todos\". */\n basePath: string;\n /** Called after the prompt is successfully answered or cancelled. */\n onResolved?: (() => void) | undefined;\n /** Resolves the options of the schema's `x-clicky-lookup` fields (e.g. a connection picker). */\n lookupFetcher?: LookupFetcher | undefined;\n /** Prefix for the form's field ids; give each copy of the same prompt on a page its own. Defaults to `prompt-<id>`. */\n idPrefix?: string | undefined;\n /**\n * Lays out the form and its Submit/Cancel actions. PromptDialog pins the\n * actions in its Modal footer; without a frame the prompt's title and\n * description head the form and the actions sit below it.\n */\n frame?: ((parts: { form: ReactNode; actions: ReactNode }) => ReactNode) | undefined;\n}\n\n// PromptForm renders a pending prompt's JSON Schema via the generic\n// JsonSchemaForm and POSTs the answer back to the prompt manager: Submit sends\n// the values, Cancel sends `{cancelled: true}`. PromptDialog is this form in a\n// Modal; a host can also render it inline, beside what the prompt is about.\nexport function PromptForm({ prompt, basePath, onResolved, lookupFetcher, idPrefix, frame }: PromptFormProps) {\n const [value, setValue] = useState<Record<string, unknown>>(() => ({ ...prompt.value }));\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState<string | null>(null);\n // Handed another prompt, start over from its value; a refetched snapshot of the same prompt keeps the edits.\n const [answering, setAnswering] = useState(prompt.id);\n if (answering !== prompt.id) {\n setAnswering(prompt.id);\n setValue({ ...prompt.value });\n setBusy(false);\n setError(null);\n }\n\n const resolve = async (answer: { values?: Record<string, unknown>; cancelled?: boolean }) => {\n setBusy(true);\n setError(null);\n try {\n await answerPrompt(basePath, prompt.id, answer);\n onResolved?.();\n } catch (e) {\n setError(e instanceof Error ? e.message : String(e));\n } finally {\n setBusy(false);\n }\n };\n\n const form = (\n <JsonSchemaForm\n schema={prompt.schema}\n value={value}\n onChange={setValue}\n idPrefix={idPrefix ?? `prompt-${prompt.id}`}\n {...(lookupFetcher ? { lookupFetcher } : {})}\n />\n );\n const actions = (\n <div className=\"flex items-center justify-end gap-2\">\n {error ? <span className=\"mr-auto text-sm text-destructive\">{error}</span> : null}\n <Button variant=\"ghost\" disabled={busy} onClick={() => void resolve({ cancelled: true })}>\n Cancel\n </Button>\n <Button disabled={busy} onClick={() => void resolve({ values: value })}>\n Submit\n </Button>\n </div>\n );\n\n if (frame) return <>{frame({ form, actions })}</>;\n return (\n <div className=\"min-w-0 space-y-density-2\" data-prompt-form={prompt.id}>\n <div>\n <div className=\"text-sm font-medium\">{prompt.title}</div>\n {prompt.description ? <div className=\"text-xs text-muted-foreground\">{prompt.description}</div> : null}\n </div>\n {form}\n {actions}\n </div>\n );\n}\n"],"mappings":";;;;;;AA6BA,SAAgB,WAAW,EAAE,QAAQ,UAAU,YAAY,eAAe,UAAU,SAA0B;CAC5G,MAAM,CAAC,OAAO,aAAA,GAAYA,MAAAA,SAAAA,QAAyC,EAAE,GAAG,OAAO,MAAM,EAAE;CACvF,MAAM,CAAC,MAAM,YAAA,GAAWA,MAAAA,SAAAA,CAAS,KAAK;CACtC,MAAM,CAAC,OAAO,aAAA,GAAYA,MAAAA,SAAAA,CAAwB,IAAI;CAEtD,MAAM,CAAC,WAAW,iBAAA,GAAgBA,MAAAA,SAAAA,CAAS,OAAO,EAAE;CACpD,IAAI,cAAc,OAAO,IAAI;EAC3B,aAAa,OAAO,EAAE;EACtB,SAAS,EAAE,GAAG,OAAO,MAAM,CAAC;EAC5B,QAAQ,KAAK;EACb,SAAS,IAAI;CACf;CAEA,MAAM,UAAU,OAAO,WAAsE;EAC3F,QAAQ,IAAI;EACZ,SAAS,IAAI;EACb,IAAI;GACF,MAAMC,oBAAAA,aAAa,UAAU,OAAO,IAAI,MAAM;GAC9C,aAAa;EACf,SAAS,GAAG;GACV,SAAS,aAAa,QAAQ,EAAE,UAAU,OAAO,CAAC,CAAC;EACrD,UAAU;GACR,QAAQ,KAAK;EACf;CACF;CAEA,MAAM,OACJ,iBAAA,GAAA,kBAAA,IAAA,CAACC,uBAAAA,gBAAD;EACE,QAAQ,OAAO;EACR;EACP,UAAU;EACV,UAAU,YAAY,UAAU,OAAO;EACvC,GAAK,gBAAgB,EAAE,cAAc,IAAI,CAAC;CAC3C,CAAA;CAEH,MAAM,UACJ,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;EAAK,WAAU;EAAf,UAAA;GACG,QAAQ,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;IAAM,WAAU;IAAoC,UAAA;GAAY,CAAA,IAAI;GAC7E,iBAAA,GAAA,kBAAA,IAAA,CAACC,eAAAA,QAAD;IAAQ,SAAQ;IAAQ,UAAU;IAAM,eAAe,KAAK,QAAQ,EAAE,WAAW,KAAK,CAAC;IAAG,UAAA;GAElF,CAAA;GACR,iBAAA,GAAA,kBAAA,IAAA,CAACA,eAAAA,QAAD;IAAQ,UAAU;IAAM,eAAe,KAAK,QAAQ,EAAE,QAAQ,MAAM,CAAC;IAAG,UAAA;GAEhE,CAAA;EACL;;CAGP,IAAI,OAAO,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAAC,kBAAAA,UAAA,EAAA,UAAG,MAAM;EAAE;EAAM;CAAQ,CAAC,EAAI,CAAA;CAChD,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;EAAK,WAAU;EAA4B,oBAAkB,OAAO;EAApE,UAAA;GACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD,EAAA,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;IAAK,WAAU;IAAuB,UAAA,OAAO;GAAW,CAAA,GACvD,OAAO,cAAc,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;IAAK,WAAU;IAAiC,UAAA,OAAO;GAAiB,CAAA,IAAI,IAC/F,EAAA,CAAA;GACJ;GACA;EACE;;AAET"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import { LookupFetcher } from '../components/json-schema-form-runtime-types.js';
|
|
3
|
+
import { PromptSnapshot } from '../hooks/use-prompts.js';
|
|
4
|
+
export interface PromptFormProps {
|
|
5
|
+
/** The pending prompt to answer. Its `schema` drives the rendered form. */
|
|
6
|
+
prompt: PromptSnapshot;
|
|
7
|
+
/** Base path the prompt API is mounted under, e.g. "/api/todos". */
|
|
8
|
+
basePath: string;
|
|
9
|
+
/** Called after the prompt is successfully answered or cancelled. */
|
|
10
|
+
onResolved?: (() => void) | undefined;
|
|
11
|
+
/** Resolves the options of the schema's `x-clicky-lookup` fields (e.g. a connection picker). */
|
|
12
|
+
lookupFetcher?: LookupFetcher | undefined;
|
|
13
|
+
/** Prefix for the form's field ids; give each copy of the same prompt on a page its own. Defaults to `prompt-<id>`. */
|
|
14
|
+
idPrefix?: string | undefined;
|
|
15
|
+
/**
|
|
16
|
+
* Lays out the form and its Submit/Cancel actions. PromptDialog pins the
|
|
17
|
+
* actions in its Modal footer; without a frame the prompt's title and
|
|
18
|
+
* description head the form and the actions sit below it.
|
|
19
|
+
*/
|
|
20
|
+
frame?: ((parts: {
|
|
21
|
+
form: ReactNode;
|
|
22
|
+
actions: ReactNode;
|
|
23
|
+
}) => ReactNode) | undefined;
|
|
24
|
+
}
|
|
25
|
+
export declare function PromptForm({ prompt, basePath, onResolved, lookupFetcher, idPrefix, frame }: PromptFormProps): import("react").JSX.Element;
|
|
26
|
+
//# sourceMappingURL=PromptForm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PromptForm.d.ts","sourceRoot":"","sources":["../../src/data/PromptForm.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAGjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8CAA8C,CAAC;AAClF,OAAO,EAAgB,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEzE,MAAM,WAAW,eAAe;IAC9B,2EAA2E;IAC3E,MAAM,EAAE,cAAc,CAAC;IACvB,oEAAoE;IACpE,QAAQ,EAAE,MAAM,CAAC;IACjB,qEAAqE;IACrE,UAAU,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;IACtC,gGAAgG;IAChG,aAAa,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;IAC1C,uHAAuH;IACvH,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B;;;;OAIG;IACH,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,SAAS,CAAC;QAAC,OAAO,EAAE,SAAS,CAAA;KAAE,KAAK,SAAS,CAAC,GAAG,SAAS,CAAC;CACrF;AAMD,wBAAgB,UAAU,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,eAAe,+BA0D3G"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { answerPrompt } from "../hooks/use-prompts.js";
|
|
2
|
+
import { Button } from "../components/button.js";
|
|
3
|
+
import { JsonSchemaForm } from "../components/JsonSchemaForm.js";
|
|
4
|
+
import { useState } from "react";
|
|
5
|
+
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
6
|
+
// src/data/PromptForm.tsx
|
|
7
|
+
function PromptForm({ prompt, basePath, onResolved, lookupFetcher, idPrefix, frame }) {
|
|
8
|
+
const [value, setValue] = useState(() => ({ ...prompt.value }));
|
|
9
|
+
const [busy, setBusy] = useState(false);
|
|
10
|
+
const [error, setError] = useState(null);
|
|
11
|
+
const [answering, setAnswering] = useState(prompt.id);
|
|
12
|
+
if (answering !== prompt.id) {
|
|
13
|
+
setAnswering(prompt.id);
|
|
14
|
+
setValue({ ...prompt.value });
|
|
15
|
+
setBusy(false);
|
|
16
|
+
setError(null);
|
|
17
|
+
}
|
|
18
|
+
const resolve = async (answer) => {
|
|
19
|
+
setBusy(true);
|
|
20
|
+
setError(null);
|
|
21
|
+
try {
|
|
22
|
+
await answerPrompt(basePath, prompt.id, answer);
|
|
23
|
+
onResolved?.();
|
|
24
|
+
} catch (e) {
|
|
25
|
+
setError(e instanceof Error ? e.message : String(e));
|
|
26
|
+
} finally {
|
|
27
|
+
setBusy(false);
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
const form = /* @__PURE__ */ jsx(JsonSchemaForm, {
|
|
31
|
+
schema: prompt.schema,
|
|
32
|
+
value,
|
|
33
|
+
onChange: setValue,
|
|
34
|
+
idPrefix: idPrefix ?? `prompt-${prompt.id}`,
|
|
35
|
+
...lookupFetcher ? { lookupFetcher } : {}
|
|
36
|
+
});
|
|
37
|
+
const actions = /* @__PURE__ */ jsxs("div", {
|
|
38
|
+
className: "flex items-center justify-end gap-2",
|
|
39
|
+
children: [
|
|
40
|
+
error ? /* @__PURE__ */ jsx("span", {
|
|
41
|
+
className: "mr-auto text-sm text-destructive",
|
|
42
|
+
children: error
|
|
43
|
+
}) : null,
|
|
44
|
+
/* @__PURE__ */ jsx(Button, {
|
|
45
|
+
variant: "ghost",
|
|
46
|
+
disabled: busy,
|
|
47
|
+
onClick: () => void resolve({ cancelled: true }),
|
|
48
|
+
children: "Cancel"
|
|
49
|
+
}),
|
|
50
|
+
/* @__PURE__ */ jsx(Button, {
|
|
51
|
+
disabled: busy,
|
|
52
|
+
onClick: () => void resolve({ values: value }),
|
|
53
|
+
children: "Submit"
|
|
54
|
+
})
|
|
55
|
+
]
|
|
56
|
+
});
|
|
57
|
+
if (frame) return /* @__PURE__ */ jsx(Fragment$1, { children: frame({
|
|
58
|
+
form,
|
|
59
|
+
actions
|
|
60
|
+
}) });
|
|
61
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
62
|
+
className: "min-w-0 space-y-density-2",
|
|
63
|
+
"data-prompt-form": prompt.id,
|
|
64
|
+
children: [
|
|
65
|
+
/* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
|
|
66
|
+
className: "text-sm font-medium",
|
|
67
|
+
children: prompt.title
|
|
68
|
+
}), prompt.description ? /* @__PURE__ */ jsx("div", {
|
|
69
|
+
className: "text-xs text-muted-foreground",
|
|
70
|
+
children: prompt.description
|
|
71
|
+
}) : null] }),
|
|
72
|
+
form,
|
|
73
|
+
actions
|
|
74
|
+
]
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
export { PromptForm };
|
|
78
|
+
|
|
79
|
+
//# sourceMappingURL=PromptForm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PromptForm.js","names":["_Fragment"],"sources":["../../src/data/PromptForm.tsx"],"sourcesContent":["import { useState, type ReactNode } from \"react\";\nimport { Button } from \"../components/button\";\nimport { JsonSchemaForm } from \"../components/JsonSchemaForm\";\nimport type { LookupFetcher } from \"../components/json-schema-form-runtime-types\";\nimport { answerPrompt, type PromptSnapshot } from \"../hooks/use-prompts\";\n\nexport interface PromptFormProps {\n /** The pending prompt to answer. Its `schema` drives the rendered form. */\n prompt: PromptSnapshot;\n /** Base path the prompt API is mounted under, e.g. \"/api/todos\". */\n basePath: string;\n /** Called after the prompt is successfully answered or cancelled. */\n onResolved?: (() => void) | undefined;\n /** Resolves the options of the schema's `x-clicky-lookup` fields (e.g. a connection picker). */\n lookupFetcher?: LookupFetcher | undefined;\n /** Prefix for the form's field ids; give each copy of the same prompt on a page its own. Defaults to `prompt-<id>`. */\n idPrefix?: string | undefined;\n /**\n * Lays out the form and its Submit/Cancel actions. PromptDialog pins the\n * actions in its Modal footer; without a frame the prompt's title and\n * description head the form and the actions sit below it.\n */\n frame?: ((parts: { form: ReactNode; actions: ReactNode }) => ReactNode) | undefined;\n}\n\n// PromptForm renders a pending prompt's JSON Schema via the generic\n// JsonSchemaForm and POSTs the answer back to the prompt manager: Submit sends\n// the values, Cancel sends `{cancelled: true}`. PromptDialog is this form in a\n// Modal; a host can also render it inline, beside what the prompt is about.\nexport function PromptForm({ prompt, basePath, onResolved, lookupFetcher, idPrefix, frame }: PromptFormProps) {\n const [value, setValue] = useState<Record<string, unknown>>(() => ({ ...prompt.value }));\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState<string | null>(null);\n // Handed another prompt, start over from its value; a refetched snapshot of the same prompt keeps the edits.\n const [answering, setAnswering] = useState(prompt.id);\n if (answering !== prompt.id) {\n setAnswering(prompt.id);\n setValue({ ...prompt.value });\n setBusy(false);\n setError(null);\n }\n\n const resolve = async (answer: { values?: Record<string, unknown>; cancelled?: boolean }) => {\n setBusy(true);\n setError(null);\n try {\n await answerPrompt(basePath, prompt.id, answer);\n onResolved?.();\n } catch (e) {\n setError(e instanceof Error ? e.message : String(e));\n } finally {\n setBusy(false);\n }\n };\n\n const form = (\n <JsonSchemaForm\n schema={prompt.schema}\n value={value}\n onChange={setValue}\n idPrefix={idPrefix ?? `prompt-${prompt.id}`}\n {...(lookupFetcher ? { lookupFetcher } : {})}\n />\n );\n const actions = (\n <div className=\"flex items-center justify-end gap-2\">\n {error ? <span className=\"mr-auto text-sm text-destructive\">{error}</span> : null}\n <Button variant=\"ghost\" disabled={busy} onClick={() => void resolve({ cancelled: true })}>\n Cancel\n </Button>\n <Button disabled={busy} onClick={() => void resolve({ values: value })}>\n Submit\n </Button>\n </div>\n );\n\n if (frame) return <>{frame({ form, actions })}</>;\n return (\n <div className=\"min-w-0 space-y-density-2\" data-prompt-form={prompt.id}>\n <div>\n <div className=\"text-sm font-medium\">{prompt.title}</div>\n {prompt.description ? <div className=\"text-xs text-muted-foreground\">{prompt.description}</div> : null}\n </div>\n {form}\n {actions}\n </div>\n );\n}\n"],"mappings":";;;;;;AA6BA,SAAgB,WAAW,EAAE,QAAQ,UAAU,YAAY,eAAe,UAAU,SAA0B;CAC5G,MAAM,CAAC,OAAO,YAAY,gBAAyC,EAAE,GAAG,OAAO,MAAM,EAAE;CACvF,MAAM,CAAC,MAAM,WAAW,SAAS,KAAK;CACtC,MAAM,CAAC,OAAO,YAAY,SAAwB,IAAI;CAEtD,MAAM,CAAC,WAAW,gBAAgB,SAAS,OAAO,EAAE;CACpD,IAAI,cAAc,OAAO,IAAI;EAC3B,aAAa,OAAO,EAAE;EACtB,SAAS,EAAE,GAAG,OAAO,MAAM,CAAC;EAC5B,QAAQ,KAAK;EACb,SAAS,IAAI;CACf;CAEA,MAAM,UAAU,OAAO,WAAsE;EAC3F,QAAQ,IAAI;EACZ,SAAS,IAAI;EACb,IAAI;GACF,MAAM,aAAa,UAAU,OAAO,IAAI,MAAM;GAC9C,aAAa;EACf,SAAS,GAAG;GACV,SAAS,aAAa,QAAQ,EAAE,UAAU,OAAO,CAAC,CAAC;EACrD,UAAU;GACR,QAAQ,KAAK;EACf;CACF;CAEA,MAAM,OACJ,oBAAC,gBAAD;EACE,QAAQ,OAAO;EACR;EACP,UAAU;EACV,UAAU,YAAY,UAAU,OAAO;EACvC,GAAK,gBAAgB,EAAE,cAAc,IAAI,CAAC;CAC3C,CAAA;CAEH,MAAM,UACJ,qBAAC,OAAD;EAAK,WAAU;EAAf,UAAA;GACG,QAAQ,oBAAC,QAAD;IAAM,WAAU;IAAoC,UAAA;GAAY,CAAA,IAAI;GAC7E,oBAAC,QAAD;IAAQ,SAAQ;IAAQ,UAAU;IAAM,eAAe,KAAK,QAAQ,EAAE,WAAW,KAAK,CAAC;IAAG,UAAA;GAElF,CAAA;GACR,oBAAC,QAAD;IAAQ,UAAU;IAAM,eAAe,KAAK,QAAQ,EAAE,QAAQ,MAAM,CAAC;IAAG,UAAA;GAEhE,CAAA;EACL;;CAGP,IAAI,OAAO,OAAO,oBAAAA,YAAA,EAAA,UAAG,MAAM;EAAE;EAAM;CAAQ,CAAC,EAAI,CAAA;CAChD,OACE,qBAAC,OAAD;EAAK,WAAU;EAA4B,oBAAkB,OAAO;EAApE,UAAA;GACE,qBAAC,OAAD,EAAA,UAAA,CACE,oBAAC,OAAD;IAAK,WAAU;IAAuB,UAAA,OAAO;GAAW,CAAA,GACvD,OAAO,cAAc,oBAAC,OAAD;IAAK,WAAU;IAAiC,UAAA,OAAO;GAAiB,CAAA,IAAI,IAC/F,EAAA,CAAA;GACJ;GACA;EACE;;AAET"}
|