@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
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
const require_utils = require("../lib/utils.cjs");
|
|
2
|
+
const require_UiQuestion = require("../icons/components/UiQuestion.cjs");
|
|
3
|
+
const require_use_prompts = require("../hooks/use-prompts.cjs");
|
|
4
|
+
const require_Icon = require("./Icon.cjs");
|
|
5
|
+
const require_button = require("../components/button.cjs");
|
|
6
|
+
const require_DropdownMenu = require("../overlay/DropdownMenu.cjs");
|
|
7
|
+
const require_marks = require("./test-runner/marks.cjs");
|
|
8
|
+
const require_PromptDialog = require("./PromptDialog.cjs");
|
|
9
|
+
const require_PromptBanner_model = require("./PromptBanner.model.cjs");
|
|
10
|
+
const require_PromptList = require("./PromptList.cjs");
|
|
11
|
+
let react = require("react");
|
|
12
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
13
|
+
// src/data/PromptIndicator.tsx
|
|
14
|
+
function PromptIndicator({ basePath = "/api/todos", enabled, className, lookupFetcher, autoOpen = false, state: _ignoredState, ...filter }) {
|
|
15
|
+
const { prompts, pending } = require_use_prompts.usePrompts({
|
|
16
|
+
...filter,
|
|
17
|
+
basePath,
|
|
18
|
+
...enabled !== void 0 ? { enabled } : {}
|
|
19
|
+
});
|
|
20
|
+
const [active, setActive] = (0, react.useState)(null);
|
|
21
|
+
const [activeBase, setActiveBase] = (0, react.useState)(basePath);
|
|
22
|
+
if (activeBase !== basePath) {
|
|
23
|
+
setActiveBase(basePath);
|
|
24
|
+
setActive(null);
|
|
25
|
+
}
|
|
26
|
+
const ordered = (0, react.useMemo)(() => require_PromptBanner_model.orderPrompts(prompts), [prompts]);
|
|
27
|
+
const count = (0, react.useMemo)(() => require_PromptBanner_model.summarizePrompts(prompts).pending, [prompts]);
|
|
28
|
+
const autoOpened = (0, react.useRef)(/* @__PURE__ */ new Set());
|
|
29
|
+
const unopened = autoOpen ? pending.find((prompt) => !autoOpened.current.has(prompt.id)) : void 0;
|
|
30
|
+
(0, react.useEffect)(() => {
|
|
31
|
+
if (!unopened || active) return;
|
|
32
|
+
autoOpened.current.add(unopened.id);
|
|
33
|
+
setActive(unopened);
|
|
34
|
+
}, [unopened, active]);
|
|
35
|
+
const closePrompt = (id) => setActive((current) => current?.id === id ? null : current);
|
|
36
|
+
const label = count > 0 ? `${count} pending` : "Prompts";
|
|
37
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_DropdownMenu.DropdownMenu, {
|
|
38
|
+
role: "dialog",
|
|
39
|
+
menuLabel: "Prompts",
|
|
40
|
+
align: "right",
|
|
41
|
+
menuClassName: "w-80 max-w-[calc(100vw-2rem)] p-1",
|
|
42
|
+
trigger: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_button.Button, {
|
|
43
|
+
type: "button",
|
|
44
|
+
variant: "ghost",
|
|
45
|
+
size: "sm",
|
|
46
|
+
title: count > 0 ? `${label} — answer from the list` : "No pending prompts",
|
|
47
|
+
className: require_utils.cn("gap-1.5", count > 0 ? require_marks.TEST_OUTCOMES.warned.className : "text-muted-foreground", className),
|
|
48
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
49
|
+
className: "relative inline-flex",
|
|
50
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Icon.Icon, {
|
|
51
|
+
icon: require_UiQuestion.UiQuestion,
|
|
52
|
+
className: "size-4"
|
|
53
|
+
}), count > 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
54
|
+
"data-prompt-pulse": "",
|
|
55
|
+
"aria-hidden": true,
|
|
56
|
+
className: "absolute -right-0.5 -top-0.5 size-1.5 animate-pulse rounded-full bg-current"
|
|
57
|
+
}) : null]
|
|
58
|
+
}), label]
|
|
59
|
+
}),
|
|
60
|
+
children: (close) => ordered.length === 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
61
|
+
className: "px-2 py-1.5 text-xs text-muted-foreground",
|
|
62
|
+
children: "No prompts"
|
|
63
|
+
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_PromptList.PromptList, {
|
|
64
|
+
prompts: ordered,
|
|
65
|
+
activeId: active?.id,
|
|
66
|
+
className: "border-0",
|
|
67
|
+
onSelect: (prompt) => {
|
|
68
|
+
close();
|
|
69
|
+
setActive(prompt);
|
|
70
|
+
}
|
|
71
|
+
})
|
|
72
|
+
}), active ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_PromptDialog.PromptDialog, {
|
|
73
|
+
prompt: active,
|
|
74
|
+
basePath,
|
|
75
|
+
open: true,
|
|
76
|
+
onClose: () => closePrompt(active.id),
|
|
77
|
+
lookupFetcher
|
|
78
|
+
}, active.id) : null] });
|
|
79
|
+
}
|
|
80
|
+
exports.PromptIndicator = PromptIndicator;
|
|
81
|
+
|
|
82
|
+
//# sourceMappingURL=PromptIndicator.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PromptIndicator.cjs","names":["usePrompts","useState","useMemo","orderPrompts","summarizePrompts","useRef","_Fragment","DropdownMenu","Button","cn","TEST_OUTCOMES","Icon","UiQuestion","PromptList","PromptDialog"],"sources":["../../src/data/PromptIndicator.tsx"],"sourcesContent":["import { useEffect, useMemo, useRef, useState } from \"react\";\nimport { Button } from \"../components/button\";\nimport { DropdownMenu } from \"../overlay/DropdownMenu\";\nimport { Icon } from \"./Icon\";\nimport { UiQuestion } from \"../icons\";\nimport { cn } from \"../lib/utils\";\nimport { usePrompts, type PromptFilter, type PromptSnapshot } from \"../hooks/use-prompts\";\nimport type { LookupFetcher } from \"../components/json-schema-form-runtime-types\";\nimport { PromptDialog } from \"./PromptDialog\";\nimport { PromptList } from \"./PromptList\";\nimport { orderPrompts, summarizePrompts } from \"./PromptBanner.model\";\nimport { TEST_OUTCOMES } from \"./test-runner/marks\";\n\nexport interface PromptIndicatorProps extends PromptFilter {\n /** Base path the prompt API is mounted under, e.g. \"/api/todos\". */\n basePath?: string | undefined;\n enabled?: boolean | undefined;\n /** Classes for the trigger button. */\n className?: string | undefined;\n /** Passed to the answer dialog to resolve the schema's `x-clicky-lookup` fields. */\n lookupFetcher?: LookupFetcher | undefined;\n /**\n * Open each prompt's answer dialog once, as soon as it becomes pending:\n * closing it without answering leaves it pending in the panel rather than\n * reopening it.\n */\n autoOpen?: boolean | undefined;\n}\n\n// PromptIndicator is the compact form of PromptBanner for a header: \"N pending\"\n// in amber while prompts wait, a muted \"Prompts\" otherwise. It toggles a panel\n// listing the scope's prompts (pending first), and a pending one opens the\n// answer dialog.\nexport function PromptIndicator({\n basePath = \"/api/todos\",\n enabled,\n className,\n lookupFetcher,\n autoOpen = false,\n state: _ignoredState,\n ...filter\n}: PromptIndicatorProps) {\n const { prompts, pending } = usePrompts({ ...filter, basePath, ...(enabled !== undefined ? { enabled } : {}) });\n const [active, setActive] = useState<PromptSnapshot | null>(null);\n // An open prompt belongs to the API it came from; answering it on another would post its id there.\n const [activeBase, setActiveBase] = useState(basePath);\n if (activeBase !== basePath) {\n setActiveBase(basePath);\n setActive(null);\n }\n const ordered = useMemo(() => orderPrompts(prompts), [prompts]);\n const count = useMemo(() => summarizePrompts(prompts).pending, [prompts]);\n\n const autoOpened = useRef(new Set<string>());\n const unopened = autoOpen ? pending.find((prompt) => !autoOpened.current.has(prompt.id)) : undefined;\n useEffect(() => {\n if (!unopened || active) return;\n autoOpened.current.add(unopened.id);\n setActive(unopened);\n }, [unopened, active]);\n\n // A dialog's answer can land after it was closed and another opened: clear only the prompt it was for.\n const closePrompt = (id: string) => setActive((current) => (current?.id === id ? null : current));\n\n const label = count > 0 ? `${count} pending` : \"Prompts\";\n return (\n <>\n <DropdownMenu\n role=\"dialog\"\n menuLabel=\"Prompts\"\n align=\"right\"\n menuClassName=\"w-80 max-w-[calc(100vw-2rem)] p-1\"\n trigger={\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n title={count > 0 ? `${label} — answer from the list` : \"No pending prompts\"}\n className={cn(\"gap-1.5\", count > 0 ? TEST_OUTCOMES.warned.className : \"text-muted-foreground\", className)}\n >\n <span className=\"relative inline-flex\">\n <Icon icon={UiQuestion} className=\"size-4\" />\n {count > 0 ? (\n <span data-prompt-pulse=\"\" aria-hidden className=\"absolute -right-0.5 -top-0.5 size-1.5 animate-pulse rounded-full bg-current\" />\n ) : null}\n </span>\n {label}\n </Button>\n }\n >\n {(close) =>\n ordered.length === 0 ? (\n <div className=\"px-2 py-1.5 text-xs text-muted-foreground\">No prompts</div>\n ) : (\n <PromptList\n prompts={ordered}\n activeId={active?.id}\n className=\"border-0\"\n onSelect={(prompt) => {\n close();\n setActive(prompt);\n }}\n />\n )\n }\n </DropdownMenu>\n {active ? (\n <PromptDialog\n key={active.id}\n prompt={active}\n basePath={basePath}\n open={true}\n onClose={() => closePrompt(active.id)}\n lookupFetcher={lookupFetcher}\n />\n ) : null}\n </>\n );\n}\n"],"mappings":";;;;;;;;;;;;;AAiCA,SAAgB,gBAAgB,EAC9B,WAAW,cACX,SACA,WACA,eACA,WAAW,OACX,OAAO,eACP,GAAG,UACoB;CACvB,MAAM,EAAE,SAAS,YAAYA,oBAAAA,WAAW;EAAE,GAAG;EAAQ;EAAU,GAAI,YAAY,KAAA,IAAY,EAAE,QAAQ,IAAI,CAAC;CAAG,CAAC;CAC9G,MAAM,CAAC,QAAQ,cAAA,GAAaC,MAAAA,SAAAA,CAAgC,IAAI;CAEhE,MAAM,CAAC,YAAY,kBAAA,GAAiBA,MAAAA,SAAAA,CAAS,QAAQ;CACrD,IAAI,eAAe,UAAU;EAC3B,cAAc,QAAQ;EACtB,UAAU,IAAI;CAChB;CACA,MAAM,WAAA,GAAUC,MAAAA,QAAAA,OAAcC,2BAAAA,aAAa,OAAO,GAAG,CAAC,OAAO,CAAC;CAC9D,MAAM,SAAA,GAAQD,MAAAA,QAAAA,OAAcE,2BAAAA,iBAAiB,OAAO,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC;CAExE,MAAM,cAAA,GAAaC,MAAAA,OAAAA,iBAAO,IAAI,IAAY,CAAC;CAC3C,MAAM,WAAW,WAAW,QAAQ,MAAM,WAAW,CAAC,WAAW,QAAQ,IAAI,OAAO,EAAE,CAAC,IAAI,KAAA;CAC3F,CAAA,GAAA,MAAA,UAAA,OAAgB;EACd,IAAI,CAAC,YAAY,QAAQ;EACzB,WAAW,QAAQ,IAAI,SAAS,EAAE;EAClC,UAAU,QAAQ;CACpB,GAAG,CAAC,UAAU,MAAM,CAAC;CAGrB,MAAM,eAAe,OAAe,WAAW,YAAa,SAAS,OAAO,KAAK,OAAO,OAAQ;CAEhG,MAAM,QAAQ,QAAQ,IAAI,GAAG,MAAM,YAAY;CAC/C,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAAC,kBAAAA,UAAA,EAAA,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,qBAAAA,cAAD;EACE,MAAK;EACL,WAAU;EACV,OAAM;EACN,eAAc;EACd,SACE,iBAAA,GAAA,kBAAA,KAAA,CAACC,eAAAA,QAAD;GACE,MAAK;GACL,SAAQ;GACR,MAAK;GACL,OAAO,QAAQ,IAAI,GAAG,MAAM,2BAA2B;GACvD,WAAWC,cAAAA,GAAG,WAAW,QAAQ,IAAIC,cAAAA,cAAc,OAAO,YAAY,yBAAyB,SAAS;GAL1G,UAAA,CAOE,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;IAAM,WAAU;IAAhB,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,aAAAA,MAAD;KAAM,MAAMC,mBAAAA;KAAY,WAAU;IAAU,CAAA,GAC3C,QAAQ,IACP,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;KAAM,qBAAkB;KAAG,eAAA;KAAY,WAAU;IAA+E,CAAA,IAC9H,IACA;GACL,CAAA,GAAA,KACK;;EAGR,WAAA,UACA,QAAQ,WAAW,IACjB,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;GAAK,WAAU;GAA4C,UAAA;EAAe,CAAA,IAE1E,iBAAA,GAAA,kBAAA,IAAA,CAACC,mBAAAA,YAAD;GACE,SAAS;GACT,UAAU,QAAQ;GAClB,WAAU;GACV,WAAW,WAAW;IACpB,MAAM;IACN,UAAU,MAAM;GAClB;EACD,CAAA;CAGO,CAAA,GACb,SACC,iBAAA,GAAA,kBAAA,IAAA,CAACC,qBAAAA,cAAD;EAEE,QAAQ;EACE;EACV,MAAM;EACN,eAAe,YAAY,OAAO,EAAE;EACrB;CAChB,GANM,OAAO,EAMb,IACC,IACJ,EAAA,CAAA;AAEN"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { PromptFilter } from '../hooks/use-prompts.js';
|
|
2
|
+
import { LookupFetcher } from '../components/json-schema-form-runtime-types.js';
|
|
3
|
+
export interface PromptIndicatorProps extends PromptFilter {
|
|
4
|
+
/** Base path the prompt API is mounted under, e.g. "/api/todos". */
|
|
5
|
+
basePath?: string | undefined;
|
|
6
|
+
enabled?: boolean | undefined;
|
|
7
|
+
/** Classes for the trigger button. */
|
|
8
|
+
className?: string | undefined;
|
|
9
|
+
/** Passed to the answer dialog to resolve the schema's `x-clicky-lookup` fields. */
|
|
10
|
+
lookupFetcher?: LookupFetcher | undefined;
|
|
11
|
+
/**
|
|
12
|
+
* Open each prompt's answer dialog once, as soon as it becomes pending:
|
|
13
|
+
* closing it without answering leaves it pending in the panel rather than
|
|
14
|
+
* reopening it.
|
|
15
|
+
*/
|
|
16
|
+
autoOpen?: boolean | undefined;
|
|
17
|
+
}
|
|
18
|
+
export declare function PromptIndicator({ basePath, enabled, className, lookupFetcher, autoOpen, state: _ignoredState, ...filter }: PromptIndicatorProps): import("react").JSX.Element;
|
|
19
|
+
//# sourceMappingURL=PromptIndicator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PromptIndicator.d.ts","sourceRoot":"","sources":["../../src/data/PromptIndicator.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAc,KAAK,YAAY,EAAuB,MAAM,sBAAsB,CAAC;AAC1F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8CAA8C,CAAC;AAMlF,MAAM,WAAW,oBAAqB,SAAQ,YAAY;IACxD,oEAAoE;IACpE,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,sCAAsC;IACtC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,oFAAoF;IACpF,aAAa,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;IAC1C;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAChC;AAMD,wBAAgB,eAAe,CAAC,EAC9B,QAAuB,EACvB,OAAO,EACP,SAAS,EACT,aAAa,EACb,QAAgB,EAChB,KAAK,EAAE,aAAa,EACpB,GAAG,MAAM,EACV,EAAE,oBAAoB,+BA6EtB"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { cn } from "../lib/utils.js";
|
|
2
|
+
import { UiQuestion } from "../icons/components/UiQuestion.js";
|
|
3
|
+
import { usePrompts } from "../hooks/use-prompts.js";
|
|
4
|
+
import { Icon } from "./Icon.js";
|
|
5
|
+
import { Button } from "../components/button.js";
|
|
6
|
+
import { DropdownMenu } from "../overlay/DropdownMenu.js";
|
|
7
|
+
import { TEST_OUTCOMES } from "./test-runner/marks.js";
|
|
8
|
+
import { PromptDialog } from "./PromptDialog.js";
|
|
9
|
+
import { orderPrompts, summarizePrompts } from "./PromptBanner.model.js";
|
|
10
|
+
import { PromptList } from "./PromptList.js";
|
|
11
|
+
import { useEffect, useMemo, useRef, useState } from "react";
|
|
12
|
+
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
13
|
+
// src/data/PromptIndicator.tsx
|
|
14
|
+
function PromptIndicator({ basePath = "/api/todos", enabled, className, lookupFetcher, autoOpen = false, state: _ignoredState, ...filter }) {
|
|
15
|
+
const { prompts, pending } = usePrompts({
|
|
16
|
+
...filter,
|
|
17
|
+
basePath,
|
|
18
|
+
...enabled !== void 0 ? { enabled } : {}
|
|
19
|
+
});
|
|
20
|
+
const [active, setActive] = useState(null);
|
|
21
|
+
const [activeBase, setActiveBase] = useState(basePath);
|
|
22
|
+
if (activeBase !== basePath) {
|
|
23
|
+
setActiveBase(basePath);
|
|
24
|
+
setActive(null);
|
|
25
|
+
}
|
|
26
|
+
const ordered = useMemo(() => orderPrompts(prompts), [prompts]);
|
|
27
|
+
const count = useMemo(() => summarizePrompts(prompts).pending, [prompts]);
|
|
28
|
+
const autoOpened = useRef(/* @__PURE__ */ new Set());
|
|
29
|
+
const unopened = autoOpen ? pending.find((prompt) => !autoOpened.current.has(prompt.id)) : void 0;
|
|
30
|
+
useEffect(() => {
|
|
31
|
+
if (!unopened || active) return;
|
|
32
|
+
autoOpened.current.add(unopened.id);
|
|
33
|
+
setActive(unopened);
|
|
34
|
+
}, [unopened, active]);
|
|
35
|
+
const closePrompt = (id) => setActive((current) => current?.id === id ? null : current);
|
|
36
|
+
const label = count > 0 ? `${count} pending` : "Prompts";
|
|
37
|
+
return /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(DropdownMenu, {
|
|
38
|
+
role: "dialog",
|
|
39
|
+
menuLabel: "Prompts",
|
|
40
|
+
align: "right",
|
|
41
|
+
menuClassName: "w-80 max-w-[calc(100vw-2rem)] p-1",
|
|
42
|
+
trigger: /* @__PURE__ */ jsxs(Button, {
|
|
43
|
+
type: "button",
|
|
44
|
+
variant: "ghost",
|
|
45
|
+
size: "sm",
|
|
46
|
+
title: count > 0 ? `${label} — answer from the list` : "No pending prompts",
|
|
47
|
+
className: cn("gap-1.5", count > 0 ? TEST_OUTCOMES.warned.className : "text-muted-foreground", className),
|
|
48
|
+
children: [/* @__PURE__ */ jsxs("span", {
|
|
49
|
+
className: "relative inline-flex",
|
|
50
|
+
children: [/* @__PURE__ */ jsx(Icon, {
|
|
51
|
+
icon: UiQuestion,
|
|
52
|
+
className: "size-4"
|
|
53
|
+
}), count > 0 ? /* @__PURE__ */ jsx("span", {
|
|
54
|
+
"data-prompt-pulse": "",
|
|
55
|
+
"aria-hidden": true,
|
|
56
|
+
className: "absolute -right-0.5 -top-0.5 size-1.5 animate-pulse rounded-full bg-current"
|
|
57
|
+
}) : null]
|
|
58
|
+
}), label]
|
|
59
|
+
}),
|
|
60
|
+
children: (close) => ordered.length === 0 ? /* @__PURE__ */ jsx("div", {
|
|
61
|
+
className: "px-2 py-1.5 text-xs text-muted-foreground",
|
|
62
|
+
children: "No prompts"
|
|
63
|
+
}) : /* @__PURE__ */ jsx(PromptList, {
|
|
64
|
+
prompts: ordered,
|
|
65
|
+
activeId: active?.id,
|
|
66
|
+
className: "border-0",
|
|
67
|
+
onSelect: (prompt) => {
|
|
68
|
+
close();
|
|
69
|
+
setActive(prompt);
|
|
70
|
+
}
|
|
71
|
+
})
|
|
72
|
+
}), active ? /* @__PURE__ */ jsx(PromptDialog, {
|
|
73
|
+
prompt: active,
|
|
74
|
+
basePath,
|
|
75
|
+
open: true,
|
|
76
|
+
onClose: () => closePrompt(active.id),
|
|
77
|
+
lookupFetcher
|
|
78
|
+
}, active.id) : null] });
|
|
79
|
+
}
|
|
80
|
+
export { PromptIndicator };
|
|
81
|
+
|
|
82
|
+
//# sourceMappingURL=PromptIndicator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PromptIndicator.js","names":["_Fragment"],"sources":["../../src/data/PromptIndicator.tsx"],"sourcesContent":["import { useEffect, useMemo, useRef, useState } from \"react\";\nimport { Button } from \"../components/button\";\nimport { DropdownMenu } from \"../overlay/DropdownMenu\";\nimport { Icon } from \"./Icon\";\nimport { UiQuestion } from \"../icons\";\nimport { cn } from \"../lib/utils\";\nimport { usePrompts, type PromptFilter, type PromptSnapshot } from \"../hooks/use-prompts\";\nimport type { LookupFetcher } from \"../components/json-schema-form-runtime-types\";\nimport { PromptDialog } from \"./PromptDialog\";\nimport { PromptList } from \"./PromptList\";\nimport { orderPrompts, summarizePrompts } from \"./PromptBanner.model\";\nimport { TEST_OUTCOMES } from \"./test-runner/marks\";\n\nexport interface PromptIndicatorProps extends PromptFilter {\n /** Base path the prompt API is mounted under, e.g. \"/api/todos\". */\n basePath?: string | undefined;\n enabled?: boolean | undefined;\n /** Classes for the trigger button. */\n className?: string | undefined;\n /** Passed to the answer dialog to resolve the schema's `x-clicky-lookup` fields. */\n lookupFetcher?: LookupFetcher | undefined;\n /**\n * Open each prompt's answer dialog once, as soon as it becomes pending:\n * closing it without answering leaves it pending in the panel rather than\n * reopening it.\n */\n autoOpen?: boolean | undefined;\n}\n\n// PromptIndicator is the compact form of PromptBanner for a header: \"N pending\"\n// in amber while prompts wait, a muted \"Prompts\" otherwise. It toggles a panel\n// listing the scope's prompts (pending first), and a pending one opens the\n// answer dialog.\nexport function PromptIndicator({\n basePath = \"/api/todos\",\n enabled,\n className,\n lookupFetcher,\n autoOpen = false,\n state: _ignoredState,\n ...filter\n}: PromptIndicatorProps) {\n const { prompts, pending } = usePrompts({ ...filter, basePath, ...(enabled !== undefined ? { enabled } : {}) });\n const [active, setActive] = useState<PromptSnapshot | null>(null);\n // An open prompt belongs to the API it came from; answering it on another would post its id there.\n const [activeBase, setActiveBase] = useState(basePath);\n if (activeBase !== basePath) {\n setActiveBase(basePath);\n setActive(null);\n }\n const ordered = useMemo(() => orderPrompts(prompts), [prompts]);\n const count = useMemo(() => summarizePrompts(prompts).pending, [prompts]);\n\n const autoOpened = useRef(new Set<string>());\n const unopened = autoOpen ? pending.find((prompt) => !autoOpened.current.has(prompt.id)) : undefined;\n useEffect(() => {\n if (!unopened || active) return;\n autoOpened.current.add(unopened.id);\n setActive(unopened);\n }, [unopened, active]);\n\n // A dialog's answer can land after it was closed and another opened: clear only the prompt it was for.\n const closePrompt = (id: string) => setActive((current) => (current?.id === id ? null : current));\n\n const label = count > 0 ? `${count} pending` : \"Prompts\";\n return (\n <>\n <DropdownMenu\n role=\"dialog\"\n menuLabel=\"Prompts\"\n align=\"right\"\n menuClassName=\"w-80 max-w-[calc(100vw-2rem)] p-1\"\n trigger={\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n title={count > 0 ? `${label} — answer from the list` : \"No pending prompts\"}\n className={cn(\"gap-1.5\", count > 0 ? TEST_OUTCOMES.warned.className : \"text-muted-foreground\", className)}\n >\n <span className=\"relative inline-flex\">\n <Icon icon={UiQuestion} className=\"size-4\" />\n {count > 0 ? (\n <span data-prompt-pulse=\"\" aria-hidden className=\"absolute -right-0.5 -top-0.5 size-1.5 animate-pulse rounded-full bg-current\" />\n ) : null}\n </span>\n {label}\n </Button>\n }\n >\n {(close) =>\n ordered.length === 0 ? (\n <div className=\"px-2 py-1.5 text-xs text-muted-foreground\">No prompts</div>\n ) : (\n <PromptList\n prompts={ordered}\n activeId={active?.id}\n className=\"border-0\"\n onSelect={(prompt) => {\n close();\n setActive(prompt);\n }}\n />\n )\n }\n </DropdownMenu>\n {active ? (\n <PromptDialog\n key={active.id}\n prompt={active}\n basePath={basePath}\n open={true}\n onClose={() => closePrompt(active.id)}\n lookupFetcher={lookupFetcher}\n />\n ) : null}\n </>\n );\n}\n"],"mappings":";;;;;;;;;;;;;AAiCA,SAAgB,gBAAgB,EAC9B,WAAW,cACX,SACA,WACA,eACA,WAAW,OACX,OAAO,eACP,GAAG,UACoB;CACvB,MAAM,EAAE,SAAS,YAAY,WAAW;EAAE,GAAG;EAAQ;EAAU,GAAI,YAAY,KAAA,IAAY,EAAE,QAAQ,IAAI,CAAC;CAAG,CAAC;CAC9G,MAAM,CAAC,QAAQ,aAAa,SAAgC,IAAI;CAEhE,MAAM,CAAC,YAAY,iBAAiB,SAAS,QAAQ;CACrD,IAAI,eAAe,UAAU;EAC3B,cAAc,QAAQ;EACtB,UAAU,IAAI;CAChB;CACA,MAAM,UAAU,cAAc,aAAa,OAAO,GAAG,CAAC,OAAO,CAAC;CAC9D,MAAM,QAAQ,cAAc,iBAAiB,OAAO,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC;CAExE,MAAM,aAAa,uBAAO,IAAI,IAAY,CAAC;CAC3C,MAAM,WAAW,WAAW,QAAQ,MAAM,WAAW,CAAC,WAAW,QAAQ,IAAI,OAAO,EAAE,CAAC,IAAI,KAAA;CAC3F,gBAAgB;EACd,IAAI,CAAC,YAAY,QAAQ;EACzB,WAAW,QAAQ,IAAI,SAAS,EAAE;EAClC,UAAU,QAAQ;CACpB,GAAG,CAAC,UAAU,MAAM,CAAC;CAGrB,MAAM,eAAe,OAAe,WAAW,YAAa,SAAS,OAAO,KAAK,OAAO,OAAQ;CAEhG,MAAM,QAAQ,QAAQ,IAAI,GAAG,MAAM,YAAY;CAC/C,OACE,qBAAAA,YAAA,EAAA,UAAA,CACE,oBAAC,cAAD;EACE,MAAK;EACL,WAAU;EACV,OAAM;EACN,eAAc;EACd,SACE,qBAAC,QAAD;GACE,MAAK;GACL,SAAQ;GACR,MAAK;GACL,OAAO,QAAQ,IAAI,GAAG,MAAM,2BAA2B;GACvD,WAAW,GAAG,WAAW,QAAQ,IAAI,cAAc,OAAO,YAAY,yBAAyB,SAAS;GAL1G,UAAA,CAOE,qBAAC,QAAD;IAAM,WAAU;IAAhB,UAAA,CACE,oBAAC,MAAD;KAAM,MAAM;KAAY,WAAU;IAAU,CAAA,GAC3C,QAAQ,IACP,oBAAC,QAAD;KAAM,qBAAkB;KAAG,eAAA;KAAY,WAAU;IAA+E,CAAA,IAC9H,IACA;GACL,CAAA,GAAA,KACK;;EAGR,WAAA,UACA,QAAQ,WAAW,IACjB,oBAAC,OAAD;GAAK,WAAU;GAA4C,UAAA;EAAe,CAAA,IAE1E,oBAAC,YAAD;GACE,SAAS;GACT,UAAU,QAAQ;GAClB,WAAU;GACV,WAAW,WAAW;IACpB,MAAM;IACN,UAAU,MAAM;GAClB;EACD,CAAA;CAGO,CAAA,GACb,SACC,oBAAC,cAAD;EAEE,QAAQ;EACE;EACV,MAAM;EACN,eAAe,YAAY,OAAO,EAAE;EACrB;CAChB,GANM,OAAO,EAMb,IACC,IACJ,EAAA,CAAA;AAEN"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
const require_utils = require("../lib/utils.cjs");
|
|
2
|
+
const require_UiClose = require("../icons/components/UiClose.cjs");
|
|
3
|
+
const require_UiCheck = require("../icons/components/UiCheck.cjs");
|
|
4
|
+
const require_UiComment = require("../icons/components/UiComment.cjs");
|
|
5
|
+
const require_UiHourglass = require("../icons/components/UiHourglass.cjs");
|
|
6
|
+
const require_Icon = require("./Icon.cjs");
|
|
7
|
+
const require_PromptBanner_model = require("./PromptBanner.model.cjs");
|
|
8
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
9
|
+
// src/data/PromptList.tsx
|
|
10
|
+
/** Each prompt's state, title, kind and answer summary — the list PromptBanner and PromptIndicator share. */
|
|
11
|
+
function PromptList({ prompts, activeId, onSelect, className }) {
|
|
12
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("ol", {
|
|
13
|
+
className: require_utils.cn("divide-y divide-border overflow-hidden rounded-md border border-border bg-background text-xs", className),
|
|
14
|
+
children: prompts.map((prompt) => {
|
|
15
|
+
const rowClass = require_utils.cn("flex w-full min-w-0 items-start gap-2 px-2 py-1.5 text-left", prompt.id === activeId && "bg-muted/60");
|
|
16
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("li", { children: onSelect && prompt.state === "pending" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
17
|
+
type: "button",
|
|
18
|
+
className: require_utils.cn(rowClass, "hover:bg-muted focus-visible:bg-muted focus-visible:outline-none"),
|
|
19
|
+
onClick: () => onSelect(prompt),
|
|
20
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(PromptRow, { prompt })
|
|
21
|
+
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
22
|
+
className: rowClass,
|
|
23
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(PromptRow, { prompt })
|
|
24
|
+
}) }, prompt.id);
|
|
25
|
+
})
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
function PromptRow({ prompt }) {
|
|
29
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(PromptStateIcon, { prompt }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
30
|
+
className: "block min-w-0 flex-1",
|
|
31
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
32
|
+
className: "flex min-w-0 items-center gap-2",
|
|
33
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
34
|
+
className: "truncate font-medium text-foreground",
|
|
35
|
+
"data-testid": "prompt-list-title",
|
|
36
|
+
children: prompt.title
|
|
37
|
+
}), prompt.kind ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
38
|
+
className: "shrink-0 text-muted-foreground",
|
|
39
|
+
children: prompt.kind
|
|
40
|
+
}) : null]
|
|
41
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
42
|
+
className: "mt-0.5 block truncate text-muted-foreground",
|
|
43
|
+
children: require_PromptBanner_model.summarizePromptAnswer(prompt)
|
|
44
|
+
})]
|
|
45
|
+
})] });
|
|
46
|
+
}
|
|
47
|
+
function PromptStateIcon({ prompt }) {
|
|
48
|
+
if (prompt.state === "answered") return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Icon.Icon, {
|
|
49
|
+
icon: require_UiCheck.UiCheck,
|
|
50
|
+
className: "mt-0.5 size-3.5 shrink-0 text-emerald-600"
|
|
51
|
+
});
|
|
52
|
+
if (prompt.state === "cancelled" || prompt.state === "expired") return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Icon.Icon, {
|
|
53
|
+
icon: require_UiClose.UiClose,
|
|
54
|
+
className: "mt-0.5 size-3.5 shrink-0 text-rose-600"
|
|
55
|
+
});
|
|
56
|
+
if (prompt.kind === "comment") return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Icon.Icon, {
|
|
57
|
+
icon: require_UiComment.UiComment,
|
|
58
|
+
className: "mt-0.5 size-3.5 shrink-0"
|
|
59
|
+
});
|
|
60
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Icon.Icon, {
|
|
61
|
+
icon: require_UiHourglass.UiHourglass,
|
|
62
|
+
className: "mt-0.5 size-3.5 shrink-0"
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
exports.PromptList = PromptList;
|
|
66
|
+
|
|
67
|
+
//# sourceMappingURL=PromptList.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PromptList.cjs","names":["cn","_Fragment","summarizePromptAnswer","Icon","UiCheck","UiClose","UiComment","UiHourglass"],"sources":["../../src/data/PromptList.tsx"],"sourcesContent":["import { Icon } from \"./Icon\";\nimport { UiCheck, UiClose, UiComment, UiHourglass } from \"../icons\";\nimport { cn } from \"../lib/utils\";\nimport type { PromptSnapshot } from \"../hooks/use-prompts\";\nimport { summarizePromptAnswer } from \"./PromptBanner.model\";\n\nexport interface PromptListProps {\n /** Rendered in the given order; `orderPrompts` puts pending first. */\n prompts: readonly PromptSnapshot[];\n /** Highlights the prompt currently being answered. */\n activeId?: string | undefined;\n /** Makes each pending prompt a button that answers it; answered and closed prompts stay read-only. */\n onSelect?: ((prompt: PromptSnapshot) => void) | undefined;\n className?: string | undefined;\n}\n\n/** Each prompt's state, title, kind and answer summary — the list PromptBanner and PromptIndicator share. */\nexport function PromptList({ prompts, activeId, onSelect, className }: PromptListProps) {\n return (\n <ol className={cn(\"divide-y divide-border overflow-hidden rounded-md border border-border bg-background text-xs\", className)}>\n {prompts.map((prompt) => {\n const rowClass = cn(\"flex w-full min-w-0 items-start gap-2 px-2 py-1.5 text-left\", prompt.id === activeId && \"bg-muted/60\");\n return (\n <li key={prompt.id}>\n {onSelect && prompt.state === \"pending\" ? (\n <button type=\"button\" className={cn(rowClass, \"hover:bg-muted focus-visible:bg-muted focus-visible:outline-none\")} onClick={() => onSelect(prompt)}>\n <PromptRow prompt={prompt} />\n </button>\n ) : (\n <div className={rowClass}>\n <PromptRow prompt={prompt} />\n </div>\n )}\n </li>\n );\n })}\n </ol>\n );\n}\n\nfunction PromptRow({ prompt }: { prompt: PromptSnapshot }) {\n return (\n <>\n <PromptStateIcon prompt={prompt} />\n <span className=\"block min-w-0 flex-1\">\n <span className=\"flex min-w-0 items-center gap-2\">\n <span className=\"truncate font-medium text-foreground\" data-testid=\"prompt-list-title\">{prompt.title}</span>\n {prompt.kind ? <span className=\"shrink-0 text-muted-foreground\">{prompt.kind}</span> : null}\n </span>\n <span className=\"mt-0.5 block truncate text-muted-foreground\">{summarizePromptAnswer(prompt)}</span>\n </span>\n </>\n );\n}\n\nfunction PromptStateIcon({ prompt }: { prompt: PromptSnapshot }) {\n if (prompt.state === \"answered\") return <Icon icon={UiCheck} className=\"mt-0.5 size-3.5 shrink-0 text-emerald-600\" />;\n if (prompt.state === \"cancelled\" || prompt.state === \"expired\") {\n return <Icon icon={UiClose} className=\"mt-0.5 size-3.5 shrink-0 text-rose-600\" />;\n }\n if (prompt.kind === \"comment\") return <Icon icon={UiComment} className=\"mt-0.5 size-3.5 shrink-0\" />;\n return <Icon icon={UiHourglass} className=\"mt-0.5 size-3.5 shrink-0\" />;\n}\n"],"mappings":";;;;;;;;;;AAiBA,SAAgB,WAAW,EAAE,SAAS,UAAU,UAAU,aAA8B;CACtF,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD;EAAI,WAAWA,cAAAA,GAAG,gGAAgG,SAAS;EACxH,UAAA,QAAQ,KAAK,WAAW;GACvB,MAAM,WAAWA,cAAAA,GAAG,+DAA+D,OAAO,OAAO,YAAY,aAAa;GAC1H,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAA,UACG,YAAY,OAAO,UAAU,YAC5B,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;IAAQ,MAAK;IAAS,WAAWA,cAAAA,GAAG,UAAU,kEAAkE;IAAG,eAAe,SAAS,MAAM;IAC/I,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,WAAD,EAAmB,OAAS,CAAA;GACtB,CAAA,IAER,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;IAAK,WAAW;IACd,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,WAAD,EAAmB,OAAS,CAAA;GACzB,CAAA,EAEL,GAVK,OAAO,EAUZ;EAER,CAAC;CACC,CAAA;AAER;AAEA,SAAS,UAAU,EAAE,UAAsC;CACzD,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAAC,kBAAAA,UAAA,EAAA,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,iBAAD,EAAyB,OAAS,CAAA,GAClC,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;EAAM,WAAU;EAAhB,UAAA,CACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;GAAM,WAAU;GAAhB,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;IAAM,WAAU;IAAuC,eAAY;IAAqB,UAAA,OAAO;GAAY,CAAA,GAC1G,OAAO,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;IAAM,WAAU;IAAkC,UAAA,OAAO;GAAW,CAAA,IAAI,IACnF;EACN,CAAA,GAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;GAAM,WAAU;GAA+C,UAAAC,2BAAAA,sBAAsB,MAAM;EAAQ,CAAA,CAC/F;CACN,CAAA,CAAA,EAAA,CAAA;AAEN;AAEA,SAAS,gBAAgB,EAAE,UAAsC;CAC/D,IAAI,OAAO,UAAU,YAAY,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAACC,aAAAA,MAAD;EAAM,MAAMC,gBAAAA;EAAS,WAAU;CAA6C,CAAA;CACpH,IAAI,OAAO,UAAU,eAAe,OAAO,UAAU,WACnD,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAACD,aAAAA,MAAD;EAAM,MAAME,gBAAAA;EAAS,WAAU;CAA0C,CAAA;CAElF,IAAI,OAAO,SAAS,WAAW,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAACF,aAAAA,MAAD;EAAM,MAAMG,kBAAAA;EAAW,WAAU;CAA4B,CAAA;CACnG,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAACH,aAAAA,MAAD;EAAM,MAAMI,oBAAAA;EAAa,WAAU;CAA4B,CAAA;AACxE"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { PromptSnapshot } from '../hooks/use-prompts.js';
|
|
2
|
+
export interface PromptListProps {
|
|
3
|
+
/** Rendered in the given order; `orderPrompts` puts pending first. */
|
|
4
|
+
prompts: readonly PromptSnapshot[];
|
|
5
|
+
/** Highlights the prompt currently being answered. */
|
|
6
|
+
activeId?: string | undefined;
|
|
7
|
+
/** Makes each pending prompt a button that answers it; answered and closed prompts stay read-only. */
|
|
8
|
+
onSelect?: ((prompt: PromptSnapshot) => void) | undefined;
|
|
9
|
+
className?: string | undefined;
|
|
10
|
+
}
|
|
11
|
+
/** Each prompt's state, title, kind and answer summary — the list PromptBanner and PromptIndicator share. */
|
|
12
|
+
export declare function PromptList({ prompts, activeId, onSelect, className }: PromptListProps): import("react").JSX.Element;
|
|
13
|
+
//# sourceMappingURL=PromptList.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PromptList.d.ts","sourceRoot":"","sources":["../../src/data/PromptList.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAG3D,MAAM,WAAW,eAAe;IAC9B,sEAAsE;IACtE,OAAO,EAAE,SAAS,cAAc,EAAE,CAAC;IACnC,sDAAsD;IACtD,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,sGAAsG;IACtG,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,cAAc,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAC1D,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC;AAED,6GAA6G;AAC7G,wBAAgB,UAAU,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,eAAe,+BAqBrF"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { cn } from "../lib/utils.js";
|
|
2
|
+
import { UiClose } from "../icons/components/UiClose.js";
|
|
3
|
+
import { UiCheck } from "../icons/components/UiCheck.js";
|
|
4
|
+
import { UiComment } from "../icons/components/UiComment.js";
|
|
5
|
+
import { UiHourglass } from "../icons/components/UiHourglass.js";
|
|
6
|
+
import { Icon } from "./Icon.js";
|
|
7
|
+
import { summarizePromptAnswer } from "./PromptBanner.model.js";
|
|
8
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
9
|
+
// src/data/PromptList.tsx
|
|
10
|
+
/** Each prompt's state, title, kind and answer summary — the list PromptBanner and PromptIndicator share. */
|
|
11
|
+
function PromptList({ prompts, activeId, onSelect, className }) {
|
|
12
|
+
return /* @__PURE__ */ jsx("ol", {
|
|
13
|
+
className: cn("divide-y divide-border overflow-hidden rounded-md border border-border bg-background text-xs", className),
|
|
14
|
+
children: prompts.map((prompt) => {
|
|
15
|
+
const rowClass = cn("flex w-full min-w-0 items-start gap-2 px-2 py-1.5 text-left", prompt.id === activeId && "bg-muted/60");
|
|
16
|
+
return /* @__PURE__ */ jsx("li", { children: onSelect && prompt.state === "pending" ? /* @__PURE__ */ jsx("button", {
|
|
17
|
+
type: "button",
|
|
18
|
+
className: cn(rowClass, "hover:bg-muted focus-visible:bg-muted focus-visible:outline-none"),
|
|
19
|
+
onClick: () => onSelect(prompt),
|
|
20
|
+
children: /* @__PURE__ */ jsx(PromptRow, { prompt })
|
|
21
|
+
}) : /* @__PURE__ */ jsx("div", {
|
|
22
|
+
className: rowClass,
|
|
23
|
+
children: /* @__PURE__ */ jsx(PromptRow, { prompt })
|
|
24
|
+
}) }, prompt.id);
|
|
25
|
+
})
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
function PromptRow({ prompt }) {
|
|
29
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(PromptStateIcon, { prompt }), /* @__PURE__ */ jsxs("span", {
|
|
30
|
+
className: "block min-w-0 flex-1",
|
|
31
|
+
children: [/* @__PURE__ */ jsxs("span", {
|
|
32
|
+
className: "flex min-w-0 items-center gap-2",
|
|
33
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
34
|
+
className: "truncate font-medium text-foreground",
|
|
35
|
+
"data-testid": "prompt-list-title",
|
|
36
|
+
children: prompt.title
|
|
37
|
+
}), prompt.kind ? /* @__PURE__ */ jsx("span", {
|
|
38
|
+
className: "shrink-0 text-muted-foreground",
|
|
39
|
+
children: prompt.kind
|
|
40
|
+
}) : null]
|
|
41
|
+
}), /* @__PURE__ */ jsx("span", {
|
|
42
|
+
className: "mt-0.5 block truncate text-muted-foreground",
|
|
43
|
+
children: summarizePromptAnswer(prompt)
|
|
44
|
+
})]
|
|
45
|
+
})] });
|
|
46
|
+
}
|
|
47
|
+
function PromptStateIcon({ prompt }) {
|
|
48
|
+
if (prompt.state === "answered") return /* @__PURE__ */ jsx(Icon, {
|
|
49
|
+
icon: UiCheck,
|
|
50
|
+
className: "mt-0.5 size-3.5 shrink-0 text-emerald-600"
|
|
51
|
+
});
|
|
52
|
+
if (prompt.state === "cancelled" || prompt.state === "expired") return /* @__PURE__ */ jsx(Icon, {
|
|
53
|
+
icon: UiClose,
|
|
54
|
+
className: "mt-0.5 size-3.5 shrink-0 text-rose-600"
|
|
55
|
+
});
|
|
56
|
+
if (prompt.kind === "comment") return /* @__PURE__ */ jsx(Icon, {
|
|
57
|
+
icon: UiComment,
|
|
58
|
+
className: "mt-0.5 size-3.5 shrink-0"
|
|
59
|
+
});
|
|
60
|
+
return /* @__PURE__ */ jsx(Icon, {
|
|
61
|
+
icon: UiHourglass,
|
|
62
|
+
className: "mt-0.5 size-3.5 shrink-0"
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
export { PromptList };
|
|
66
|
+
|
|
67
|
+
//# sourceMappingURL=PromptList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PromptList.js","names":["_Fragment"],"sources":["../../src/data/PromptList.tsx"],"sourcesContent":["import { Icon } from \"./Icon\";\nimport { UiCheck, UiClose, UiComment, UiHourglass } from \"../icons\";\nimport { cn } from \"../lib/utils\";\nimport type { PromptSnapshot } from \"../hooks/use-prompts\";\nimport { summarizePromptAnswer } from \"./PromptBanner.model\";\n\nexport interface PromptListProps {\n /** Rendered in the given order; `orderPrompts` puts pending first. */\n prompts: readonly PromptSnapshot[];\n /** Highlights the prompt currently being answered. */\n activeId?: string | undefined;\n /** Makes each pending prompt a button that answers it; answered and closed prompts stay read-only. */\n onSelect?: ((prompt: PromptSnapshot) => void) | undefined;\n className?: string | undefined;\n}\n\n/** Each prompt's state, title, kind and answer summary — the list PromptBanner and PromptIndicator share. */\nexport function PromptList({ prompts, activeId, onSelect, className }: PromptListProps) {\n return (\n <ol className={cn(\"divide-y divide-border overflow-hidden rounded-md border border-border bg-background text-xs\", className)}>\n {prompts.map((prompt) => {\n const rowClass = cn(\"flex w-full min-w-0 items-start gap-2 px-2 py-1.5 text-left\", prompt.id === activeId && \"bg-muted/60\");\n return (\n <li key={prompt.id}>\n {onSelect && prompt.state === \"pending\" ? (\n <button type=\"button\" className={cn(rowClass, \"hover:bg-muted focus-visible:bg-muted focus-visible:outline-none\")} onClick={() => onSelect(prompt)}>\n <PromptRow prompt={prompt} />\n </button>\n ) : (\n <div className={rowClass}>\n <PromptRow prompt={prompt} />\n </div>\n )}\n </li>\n );\n })}\n </ol>\n );\n}\n\nfunction PromptRow({ prompt }: { prompt: PromptSnapshot }) {\n return (\n <>\n <PromptStateIcon prompt={prompt} />\n <span className=\"block min-w-0 flex-1\">\n <span className=\"flex min-w-0 items-center gap-2\">\n <span className=\"truncate font-medium text-foreground\" data-testid=\"prompt-list-title\">{prompt.title}</span>\n {prompt.kind ? <span className=\"shrink-0 text-muted-foreground\">{prompt.kind}</span> : null}\n </span>\n <span className=\"mt-0.5 block truncate text-muted-foreground\">{summarizePromptAnswer(prompt)}</span>\n </span>\n </>\n );\n}\n\nfunction PromptStateIcon({ prompt }: { prompt: PromptSnapshot }) {\n if (prompt.state === \"answered\") return <Icon icon={UiCheck} className=\"mt-0.5 size-3.5 shrink-0 text-emerald-600\" />;\n if (prompt.state === \"cancelled\" || prompt.state === \"expired\") {\n return <Icon icon={UiClose} className=\"mt-0.5 size-3.5 shrink-0 text-rose-600\" />;\n }\n if (prompt.kind === \"comment\") return <Icon icon={UiComment} className=\"mt-0.5 size-3.5 shrink-0\" />;\n return <Icon icon={UiHourglass} className=\"mt-0.5 size-3.5 shrink-0\" />;\n}\n"],"mappings":";;;;;;;;;;AAiBA,SAAgB,WAAW,EAAE,SAAS,UAAU,UAAU,aAA8B;CACtF,OACE,oBAAC,MAAD;EAAI,WAAW,GAAG,gGAAgG,SAAS;EACxH,UAAA,QAAQ,KAAK,WAAW;GACvB,MAAM,WAAW,GAAG,+DAA+D,OAAO,OAAO,YAAY,aAAa;GAC1H,OACE,oBAAC,MAAD,EAAA,UACG,YAAY,OAAO,UAAU,YAC5B,oBAAC,UAAD;IAAQ,MAAK;IAAS,WAAW,GAAG,UAAU,kEAAkE;IAAG,eAAe,SAAS,MAAM;IAC/I,UAAA,oBAAC,WAAD,EAAmB,OAAS,CAAA;GACtB,CAAA,IAER,oBAAC,OAAD;IAAK,WAAW;IACd,UAAA,oBAAC,WAAD,EAAmB,OAAS,CAAA;GACzB,CAAA,EAEL,GAVK,OAAO,EAUZ;EAER,CAAC;CACC,CAAA;AAER;AAEA,SAAS,UAAU,EAAE,UAAsC;CACzD,OACE,qBAAAA,UAAA,EAAA,UAAA,CACE,oBAAC,iBAAD,EAAyB,OAAS,CAAA,GAClC,qBAAC,QAAD;EAAM,WAAU;EAAhB,UAAA,CACE,qBAAC,QAAD;GAAM,WAAU;GAAhB,UAAA,CACE,oBAAC,QAAD;IAAM,WAAU;IAAuC,eAAY;IAAqB,UAAA,OAAO;GAAY,CAAA,GAC1G,OAAO,OAAO,oBAAC,QAAD;IAAM,WAAU;IAAkC,UAAA,OAAO;GAAW,CAAA,IAAI,IACnF;EACN,CAAA,GAAA,oBAAC,QAAD;GAAM,WAAU;GAA+C,UAAA,sBAAsB,MAAM;EAAQ,CAAA,CAC/F;CACN,CAAA,CAAA,EAAA,CAAA;AAEN;AAEA,SAAS,gBAAgB,EAAE,UAAsC;CAC/D,IAAI,OAAO,UAAU,YAAY,OAAO,oBAAC,MAAD;EAAM,MAAM;EAAS,WAAU;CAA6C,CAAA;CACpH,IAAI,OAAO,UAAU,eAAe,OAAO,UAAU,WACnD,OAAO,oBAAC,MAAD;EAAM,MAAM;EAAS,WAAU;CAA0C,CAAA;CAElF,IAAI,OAAO,SAAS,WAAW,OAAO,oBAAC,MAAD;EAAM,MAAM;EAAW,WAAU;CAA4B,CAAA;CACnG,OAAO,oBAAC,MAAD;EAAM,MAAM;EAAa,WAAU;CAA4B,CAAA;AACxE"}
|