@flanksource/clicky-ui 0.3.59 → 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/data/Clicky.cjs +2 -1
- package/dist/data/Clicky.cjs.map +1 -1
- package/dist/data/Clicky.d.ts +2 -0
- package/dist/data/Clicky.d.ts.map +1 -1
- package/dist/data/Clicky.js +2 -1
- 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/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/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 +114 -0
- package/dist/data.d.ts +3 -0
- package/dist/data.d.ts.map +1 -1
- package/dist/data.js +51 -1
- 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 +114 -0
- package/dist/index.js +51 -1
- 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/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"}
|
|
@@ -14,6 +14,7 @@ const require_Checkbox = require("../../components/Checkbox.cjs");
|
|
|
14
14
|
const require_code_highlight = require("../code-highlight.cjs");
|
|
15
15
|
const require_CodeDiff = require("../CodeDiff.cjs");
|
|
16
16
|
const require_git_dates = require("./git-dates.cjs");
|
|
17
|
+
const require_git_links = require("./git-links.cjs");
|
|
17
18
|
let react = require("react");
|
|
18
19
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
19
20
|
// src/data/git/GitChangeList.tsx
|
|
@@ -156,6 +157,7 @@ function CommitRow({ commit, selected, slots }) {
|
|
|
156
157
|
const [expandedState, diffState, toggle] = useLazyDiff(commit, loadDiff);
|
|
157
158
|
const expanded = !onOpen && expandedState;
|
|
158
159
|
const author = displayAuthor(commit);
|
|
160
|
+
const href = commit.href ?? (commit.repository ? require_git_links.gitWebLink(commit.repository, { commit: commit.sha }) : void 0);
|
|
159
161
|
const canExpand = Boolean(onOpen || loadDiff || renderExpanded || commit.body);
|
|
160
162
|
const activate = onOpen ? () => onOpen(commit) : toggle;
|
|
161
163
|
const selectable = onToggleSelect !== void 0;
|
|
@@ -228,8 +230,8 @@ function CommitRow({ commit, selected, slots }) {
|
|
|
228
230
|
})
|
|
229
231
|
]
|
|
230
232
|
}),
|
|
231
|
-
|
|
232
|
-
href
|
|
233
|
+
href ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("a", {
|
|
234
|
+
href,
|
|
233
235
|
target: "_blank",
|
|
234
236
|
rel: "noopener noreferrer",
|
|
235
237
|
className: "mt-0.5 inline-flex shrink-0 items-center gap-1 font-mono text-cyan-600 hover:underline",
|
|
@@ -359,6 +361,11 @@ function FileRow({ file, loadDiff, diffMaxHeightClassName }) {
|
|
|
359
361
|
const status = statusView(file.status);
|
|
360
362
|
const StatusIcon = status.icon;
|
|
361
363
|
const path = splitPath(file.path);
|
|
364
|
+
if (file.href === void 0 && file.repository && !file.commit) throw new Error(`Git file "${file.path}" requires a commit for its repository link`);
|
|
365
|
+
const href = file.href ?? (file.repository && file.commit ? require_git_links.gitWebLink(file.repository, {
|
|
366
|
+
commit: file.commit,
|
|
367
|
+
file: file.path
|
|
368
|
+
}) : void 0);
|
|
362
369
|
const canExpand = Boolean(loadDiff);
|
|
363
370
|
function onKeyDown(event) {
|
|
364
371
|
if (!canExpand || !isActivationKey(event)) return;
|
|
@@ -403,8 +410,8 @@ function FileRow({ file, loadDiff, diffMaxHeightClassName }) {
|
|
|
403
410
|
...file.additions !== void 0 ? { additions: file.additions } : {},
|
|
404
411
|
...file.deletions !== void 0 ? { deletions: file.deletions } : {}
|
|
405
412
|
}),
|
|
406
|
-
|
|
407
|
-
href
|
|
413
|
+
href && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("a", {
|
|
414
|
+
href,
|
|
408
415
|
target: "_blank",
|
|
409
416
|
rel: "noopener noreferrer",
|
|
410
417
|
className: "shrink-0 text-muted-foreground hover:text-foreground",
|