@parhelia/core 0.3.12832 → 0.3.12833
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/dist/components/emoji/EmojiPicker.d.ts +18 -0
- package/dist/components/emoji/EmojiPicker.js +102 -0
- package/dist/components/emoji/EmojiPicker.js.map +1 -0
- package/dist/components/emoji/EmojiText.d.ts +19 -0
- package/dist/components/emoji/EmojiText.js +30 -0
- package/dist/components/emoji/EmojiText.js.map +1 -0
- package/dist/components/emoji/emojiData.generated.d.ts +2 -0
- package/dist/components/emoji/emojiData.generated.js +1878 -0
- package/dist/components/emoji/emojiData.generated.js.map +1 -0
- package/dist/components/emoji/emojiIndex.d.ts +46 -0
- package/dist/components/emoji/emojiIndex.js +173 -0
- package/dist/components/emoji/emojiIndex.js.map +1 -0
- package/dist/components/emoji/emoticons.d.ts +21 -0
- package/dist/components/emoji/emoticons.js +167 -0
- package/dist/components/emoji/emoticons.js.map +1 -0
- package/dist/components/emoji/textareaInsert.d.ts +19 -0
- package/dist/components/emoji/textareaInsert.js +29 -0
- package/dist/components/emoji/textareaInsert.js.map +1 -0
- package/dist/components/emoji/twemoji.d.ts +30 -0
- package/dist/components/emoji/twemoji.js +84 -0
- package/dist/components/emoji/twemoji.js.map +1 -0
- package/dist/editor/agent-changes/agentChangeTargets.js +6 -0
- package/dist/editor/agent-changes/agentChangeTargets.js.map +1 -1
- package/dist/editor/agent-changes/agentChangeTextHighlight.d.ts +48 -4
- package/dist/editor/agent-changes/agentChangeTextHighlight.js +67 -9
- package/dist/editor/agent-changes/agentChangeTextHighlight.js.map +1 -1
- package/dist/editor/ai/AgentImagePreview.d.ts +13 -0
- package/dist/editor/ai/AgentImagePreview.js +41 -0
- package/dist/editor/ai/AgentImagePreview.js.map +1 -0
- package/dist/editor/ai/terminal/components/CreateItemToolCallContent.js +1 -1
- package/dist/editor/ai/terminal/components/CreateItemToolCallContent.js.map +1 -1
- package/dist/editor/ai/terminal/components/ResponseTurnDuration.js +1 -2
- package/dist/editor/ai/terminal/components/ResponseTurnDuration.js.map +1 -1
- package/dist/editor/ai/terminal/components/ToolCallDiagnosticsPanel.d.ts +6 -0
- package/dist/editor/ai/terminal/components/ToolCallDiagnosticsPanel.js +61 -0
- package/dist/editor/ai/terminal/components/ToolCallDiagnosticsPanel.js.map +1 -0
- package/dist/editor/ai/terminal/toolCallDiagnostics.d.ts +34 -0
- package/dist/editor/ai/terminal/toolCallDiagnostics.js +218 -0
- package/dist/editor/ai/terminal/toolCallDiagnostics.js.map +1 -0
- package/dist/editor/bridge/linkDownload.d.ts +3 -0
- package/dist/editor/bridge/linkDownload.js +52 -0
- package/dist/editor/bridge/linkDownload.js.map +1 -0
- package/dist/editor/client/clipboardStorage.d.ts +10 -0
- package/dist/editor/client/clipboardStorage.js +57 -0
- package/dist/editor/client/clipboardStorage.js.map +1 -0
- package/dist/editor/client/hooks/useRepositoryItemRefresh.d.ts +4 -0
- package/dist/editor/client/hooks/useRepositoryItemRefresh.js +62 -0
- package/dist/editor/client/hooks/useRepositoryItemRefresh.js.map +1 -0
- package/dist/editor/client/liveEditState.d.ts +16 -0
- package/dist/editor/client/liveEditState.js +25 -0
- package/dist/editor/client/liveEditState.js.map +1 -0
- package/dist/editor/client/liveSessionState.d.ts +6 -0
- package/dist/editor/client/liveSessionState.js +20 -0
- package/dist/editor/client/liveSessionState.js.map +1 -0
- package/dist/editor/client/valueStore.d.ts +22 -0
- package/dist/editor/client/valueStore.js +29 -0
- package/dist/editor/client/valueStore.js.map +1 -0
- package/dist/editor/commands/componentClipboardCommands.d.ts +35 -0
- package/dist/editor/commands/componentClipboardCommands.js +271 -0
- package/dist/editor/commands/componentClipboardCommands.js.map +1 -0
- package/dist/editor/commands/componentMenuGroups.d.ts +2 -0
- package/dist/editor/commands/componentMenuGroups.js +43 -0
- package/dist/editor/commands/componentMenuGroups.js.map +1 -0
- package/dist/editor/component-conversion/ComponentTypePickerDialog.d.ts +12 -0
- package/dist/editor/component-conversion/ComponentTypePickerDialog.js +40 -0
- package/dist/editor/component-conversion/ComponentTypePickerDialog.js.map +1 -0
- package/dist/editor/component-conversion/ConversionAiDebugButton.d.ts +17 -0
- package/dist/editor/component-conversion/ConversionAiDebugButton.js +80 -0
- package/dist/editor/component-conversion/ConversionAiDebugButton.js.map +1 -0
- package/dist/editor/component-conversion/ConvertComponentDialog.d.ts +28 -0
- package/dist/editor/component-conversion/ConvertComponentDialog.js +633 -0
- package/dist/editor/component-conversion/ConvertComponentDialog.js.map +1 -0
- package/dist/editor/component-conversion/conversionModel.d.ts +109 -0
- package/dist/editor/component-conversion/conversionModel.js +519 -0
- package/dist/editor/component-conversion/conversionModel.js.map +1 -0
- package/dist/editor/component-conversion/conversionService.d.ts +12 -0
- package/dist/editor/component-conversion/conversionService.js +16 -0
- package/dist/editor/component-conversion/conversionService.js.map +1 -0
- package/dist/editor/component-conversion/conversionTypes.d.ts +214 -0
- package/dist/editor/component-conversion/conversionTypes.js +2 -0
- package/dist/editor/component-conversion/conversionTypes.js.map +1 -0
- package/dist/editor/component-conversion/convertComponentsCommand.d.ts +25 -0
- package/dist/editor/component-conversion/convertComponentsCommand.js +196 -0
- package/dist/editor/component-conversion/convertComponentsCommand.js.map +1 -0
- package/dist/editor/field-types/FieldHistoryBoundary.js +28 -7
- package/dist/editor/field-types/FieldHistoryBoundary.js.map +1 -1
- package/dist/editor/field-types/fieldStyles.d.ts +21 -0
- package/dist/editor/field-types/fieldStyles.js +22 -0
- package/dist/editor/field-types/fieldStyles.js.map +1 -0
- package/dist/editor/field-types/richtext/utils/changeHighlight.d.ts +14 -0
- package/dist/editor/field-types/richtext/utils/changeHighlight.js +12 -1
- package/dist/editor/field-types/richtext/utils/changeHighlight.js.map +1 -1
- package/dist/editor/field-types/richtext/utils/spellCheckText.d.ts +31 -0
- package/dist/editor/field-types/richtext/utils/spellCheckText.js +82 -0
- package/dist/editor/field-types/richtext/utils/spellCheckText.js.map +1 -0
- package/dist/editor/field-types/useFocusedFieldInput.d.ts +13 -0
- package/dist/editor/field-types/useFocusedFieldInput.js +50 -0
- package/dist/editor/field-types/useFocusedFieldInput.js.map +1 -0
- package/dist/editor/field-types/useFormFieldSelectionRange.d.ts +43 -0
- package/dist/editor/field-types/useFormFieldSelectionRange.js +149 -0
- package/dist/editor/field-types/useFormFieldSelectionRange.js.map +1 -0
- package/dist/editor/find-replace/FindReplacePanel.d.ts +11 -0
- package/dist/editor/find-replace/FindReplacePanel.js +311 -0
- package/dist/editor/find-replace/FindReplacePanel.js.map +1 -0
- package/dist/editor/find-replace/findReplaceCommand.d.ts +8 -0
- package/dist/editor/find-replace/findReplaceCommand.js +25 -0
- package/dist/editor/find-replace/findReplaceCommand.js.map +1 -0
- package/dist/editor/find-replace/findReplaceMatches.d.ts +42 -0
- package/dist/editor/find-replace/findReplaceMatches.js +66 -0
- package/dist/editor/find-replace/findReplaceMatches.js.map +1 -0
- package/dist/editor/find-replace/findReplaceStore.d.ts +30 -0
- package/dist/editor/find-replace/findReplaceStore.js +61 -0
- package/dist/editor/find-replace/findReplaceStore.js.map +1 -0
- package/dist/editor/find-replace/findReplaceTargets.d.ts +51 -0
- package/dist/editor/find-replace/findReplaceTargets.js +110 -0
- package/dist/editor/find-replace/findReplaceTargets.js.map +1 -0
- package/dist/editor/find-replace/findReplaceText.d.ts +50 -0
- package/dist/editor/find-replace/findReplaceText.js +189 -0
- package/dist/editor/find-replace/findReplaceText.js.map +1 -0
- package/dist/editor/itemContextMenuGroups.js +10 -1
- package/dist/editor/itemContextMenuGroups.js.map +1 -1
- package/dist/editor/media-selector/MediaDetailsView.d.ts +14 -0
- package/dist/editor/media-selector/MediaDetailsView.js +152 -0
- package/dist/editor/media-selector/MediaDetailsView.js.map +1 -0
- package/dist/editor/media-selector/useMediaFolderDrag.d.ts +26 -0
- package/dist/editor/media-selector/useMediaFolderDrag.js +153 -0
- package/dist/editor/media-selector/useMediaFolderDrag.js.map +1 -0
- package/dist/editor/menubar/toolbar-sections/CommentsToggleControl.d.ts +11 -0
- package/dist/editor/menubar/toolbar-sections/CommentsToggleControl.js +65 -0
- package/dist/editor/menubar/toolbar-sections/CommentsToggleControl.js.map +1 -0
- package/dist/editor/menubar/toolbar-sections/FindReplaceControls.d.ts +6 -0
- package/dist/editor/menubar/toolbar-sections/FindReplaceControls.js +31 -0
- package/dist/editor/menubar/toolbar-sections/FindReplaceControls.js.map +1 -0
- package/dist/editor/menubar/toolbar-sections/SpellCheckToggleControl.d.ts +5 -0
- package/dist/editor/menubar/toolbar-sections/SpellCheckToggleControl.js +16 -0
- package/dist/editor/menubar/toolbar-sections/SpellCheckToggleControl.js.map +1 -0
- package/dist/editor/mobileBottomPanel.d.ts +40 -0
- package/dist/editor/mobileBottomPanel.js +63 -0
- package/dist/editor/mobileBottomPanel.js.map +1 -0
- package/dist/editor/page-editor-chrome/AgentChangeHighlightings.d.ts +3 -6
- package/dist/editor/page-editor-chrome/AgentChangeHighlightings.js +8 -6
- package/dist/editor/page-editor-chrome/AgentChangeHighlightings.js.map +1 -1
- package/dist/editor/page-editor-chrome/BridgePasteCleanupOverlay.d.ts +6 -0
- package/dist/editor/page-editor-chrome/BridgePasteCleanupOverlay.js +100 -0
- package/dist/editor/page-editor-chrome/BridgePasteCleanupOverlay.js.map +1 -0
- package/dist/editor/page-editor-chrome/CanvasOverviewRulerBinding.d.ts +9 -0
- package/dist/editor/page-editor-chrome/CanvasOverviewRulerBinding.js +32 -0
- package/dist/editor/page-editor-chrome/CanvasOverviewRulerBinding.js.map +1 -0
- package/dist/editor/page-editor-chrome/CommentTargetPickerCanvasLayer.d.ts +14 -0
- package/dist/editor/page-editor-chrome/CommentTargetPickerCanvasLayer.js +110 -0
- package/dist/editor/page-editor-chrome/CommentTargetPickerCanvasLayer.js.map +1 -0
- package/dist/editor/page-editor-chrome/ConversionIndicators.d.ts +8 -0
- package/dist/editor/page-editor-chrome/ConversionIndicators.js +75 -0
- package/dist/editor/page-editor-chrome/ConversionIndicators.js.map +1 -0
- package/dist/editor/page-editor-chrome/DiffHighlightOverlay.d.ts +9 -13
- package/dist/editor/page-editor-chrome/DiffHighlightOverlay.js +25 -20
- package/dist/editor/page-editor-chrome/DiffHighlightOverlay.js.map +1 -1
- package/dist/editor/page-editor-chrome/FeedbackLeaderCanvasSegment.d.ts +15 -0
- package/dist/editor/page-editor-chrome/FeedbackLeaderCanvasSegment.js +31 -0
- package/dist/editor/page-editor-chrome/FeedbackLeaderCanvasSegment.js.map +1 -0
- package/dist/editor/page-editor-chrome/FindReplaceHighlightings.d.ts +11 -0
- package/dist/editor/page-editor-chrome/FindReplaceHighlightings.js +120 -0
- package/dist/editor/page-editor-chrome/FindReplaceHighlightings.js.map +1 -0
- package/dist/editor/page-editor-chrome/SpellCheckHighlightings.d.ts +12 -0
- package/dist/editor/page-editor-chrome/SpellCheckHighlightings.js +197 -0
- package/dist/editor/page-editor-chrome/SpellCheckHighlightings.js.map +1 -0
- package/dist/editor/page-editor-chrome/ValidationRulerMarks.d.ts +11 -0
- package/dist/editor/page-editor-chrome/ValidationRulerMarks.js +56 -0
- package/dist/editor/page-editor-chrome/ValidationRulerMarks.js.map +1 -0
- package/dist/editor/page-editor-chrome/overlay/feedbackAnchorMeasurements.d.ts +44 -0
- package/dist/editor/page-editor-chrome/overlay/feedbackAnchorMeasurements.js +89 -0
- package/dist/editor/page-editor-chrome/overlay/feedbackAnchorMeasurements.js.map +1 -0
- package/dist/editor/page-editor-chrome/overlay/feedbackAnchorStore.d.ts +17 -0
- package/dist/editor/page-editor-chrome/overlay/feedbackAnchorStore.js +53 -0
- package/dist/editor/page-editor-chrome/overlay/feedbackAnchorStore.js.map +1 -0
- package/dist/editor/page-editor-chrome/overlay/useBridgeTextRangeRequest.d.ts +11 -0
- package/dist/editor/page-editor-chrome/overlay/useBridgeTextRangeRequest.js +84 -0
- package/dist/editor/page-editor-chrome/overlay/useBridgeTextRangeRequest.js.map +1 -0
- package/dist/editor/page-editor-chrome/overlay/useCommentAnchorMeasurements.d.ts +34 -0
- package/dist/editor/page-editor-chrome/overlay/useCommentAnchorMeasurements.js +229 -0
- package/dist/editor/page-editor-chrome/overlay/useCommentAnchorMeasurements.js.map +1 -0
- package/dist/editor/page-editor-chrome/overlay/useOverlayViewportRight.d.ts +9 -0
- package/dist/editor/page-editor-chrome/overlay/useOverlayViewportRight.js +34 -0
- package/dist/editor/page-editor-chrome/overlay/useOverlayViewportRight.js.map +1 -0
- package/dist/editor/page-editor-chrome/overlay/useSuggestionAnchorMeasurements.d.ts +49 -0
- package/dist/editor/page-editor-chrome/overlay/useSuggestionAnchorMeasurements.js +241 -0
- package/dist/editor/page-editor-chrome/overlay/useSuggestionAnchorMeasurements.js.map +1 -0
- package/dist/editor/page-viewer/CanvasOverviewRuler.d.ts +11 -0
- package/dist/editor/page-viewer/CanvasOverviewRuler.js +65 -0
- package/dist/editor/page-viewer/CanvasOverviewRuler.js.map +1 -0
- package/dist/editor/page-viewer/DynamicRenderingsBar.d.ts +23 -0
- package/dist/editor/page-viewer/DynamicRenderingsBar.js +28 -0
- package/dist/editor/page-viewer/DynamicRenderingsBar.js.map +1 -0
- package/dist/editor/page-viewer/DynamicRenderingsStrip.d.ts +18 -0
- package/dist/editor/page-viewer/DynamicRenderingsStrip.js +29 -0
- package/dist/editor/page-viewer/DynamicRenderingsStrip.js.map +1 -0
- package/dist/editor/page-viewer/FeedbackMargin.d.ts +57 -0
- package/dist/editor/page-viewer/FeedbackMargin.js +377 -0
- package/dist/editor/page-viewer/FeedbackMargin.js.map +1 -0
- package/dist/editor/page-viewer/FeedbackMarginController.d.ts +76 -0
- package/dist/editor/page-viewer/FeedbackMarginController.js +241 -0
- package/dist/editor/page-viewer/FeedbackMarginController.js.map +1 -0
- package/dist/editor/page-viewer/FeedbackMarginMarker.d.ts +16 -0
- package/dist/editor/page-viewer/FeedbackMarginMarker.js +24 -0
- package/dist/editor/page-viewer/FeedbackMarginMarker.js.map +1 -0
- package/dist/editor/page-viewer/FeedbackMarginResizeHandle.d.ts +23 -0
- package/dist/editor/page-viewer/FeedbackMarginResizeHandle.js +105 -0
- package/dist/editor/page-viewer/FeedbackMarginResizeHandle.js.map +1 -0
- package/dist/editor/page-viewer/InteractivePreviewBar.d.ts +24 -0
- package/dist/editor/page-viewer/InteractivePreviewBar.js +31 -0
- package/dist/editor/page-viewer/InteractivePreviewBar.js.map +1 -0
- package/dist/editor/page-viewer/MobileCommentsPanel.d.ts +16 -0
- package/dist/editor/page-viewer/MobileCommentsPanel.js +112 -0
- package/dist/editor/page-viewer/MobileCommentsPanel.js.map +1 -0
- package/dist/editor/page-viewer/RenderingAiCheck.d.ts +18 -0
- package/dist/editor/page-viewer/RenderingAiCheck.js +45 -0
- package/dist/editor/page-viewer/RenderingAiCheck.js.map +1 -0
- package/dist/editor/page-viewer/RenderingApprovalDialog.d.ts +32 -0
- package/dist/editor/page-viewer/RenderingApprovalDialog.js +191 -0
- package/dist/editor/page-viewer/RenderingApprovalDialog.js.map +1 -0
- package/dist/editor/page-viewer/SealedClientCodePreview.d.ts +17 -0
- package/dist/editor/page-viewer/SealedClientCodePreview.js +38 -0
- package/dist/editor/page-viewer/SealedClientCodePreview.js.map +1 -0
- package/dist/editor/page-viewer/canvasFrameNavigation.d.ts +18 -0
- package/dist/editor/page-viewer/canvasFrameNavigation.js +36 -0
- package/dist/editor/page-viewer/canvasFrameNavigation.js.map +1 -0
- package/dist/editor/page-viewer/canvasLoadSettling.d.ts +42 -0
- package/dist/editor/page-viewer/canvasLoadSettling.js +46 -0
- package/dist/editor/page-viewer/canvasLoadSettling.js.map +1 -0
- package/dist/editor/page-viewer/canvasScrollHandoff.d.ts +34 -0
- package/dist/editor/page-viewer/canvasScrollHandoff.js +55 -0
- package/dist/editor/page-viewer/canvasScrollHandoff.js.map +1 -0
- package/dist/editor/page-viewer/compareFrameWidth.d.ts +8 -0
- package/dist/editor/page-viewer/compareFrameWidth.js +25 -0
- package/dist/editor/page-viewer/compareFrameWidth.js.map +1 -0
- package/dist/editor/page-viewer/feedbackMarginLayout.d.ts +119 -0
- package/dist/editor/page-viewer/feedbackMarginLayout.js +155 -0
- package/dist/editor/page-viewer/feedbackMarginLayout.js.map +1 -0
- package/dist/editor/page-viewer/feedbackMarginSources.d.ts +36 -0
- package/dist/editor/page-viewer/feedbackMarginSources.js +196 -0
- package/dist/editor/page-viewer/feedbackMarginSources.js.map +1 -0
- package/dist/editor/page-viewer/feedbackMarginWidth.d.ts +43 -0
- package/dist/editor/page-viewer/feedbackMarginWidth.js +107 -0
- package/dist/editor/page-viewer/feedbackMarginWidth.js.map +1 -0
- package/dist/editor/page-viewer/interactivePreview.d.ts +168 -0
- package/dist/editor/page-viewer/interactivePreview.js +344 -0
- package/dist/editor/page-viewer/interactivePreview.js.map +1 -0
- package/dist/editor/page-viewer/minimapViewport.d.ts +2 -0
- package/dist/editor/page-viewer/minimapViewport.js +34 -0
- package/dist/editor/page-viewer/minimapViewport.js.map +1 -0
- package/dist/editor/page-viewer/openPageItems.d.ts +29 -0
- package/dist/editor/page-viewer/openPageItems.js +73 -0
- package/dist/editor/page-viewer/openPageItems.js.map +1 -0
- package/dist/editor/page-viewer/overviewRuler.d.ts +128 -0
- package/dist/editor/page-viewer/overviewRuler.js +226 -0
- package/dist/editor/page-viewer/overviewRuler.js.map +1 -0
- package/dist/editor/page-viewer/renderingApproval.d.ts +59 -0
- package/dist/editor/page-viewer/renderingApproval.js +186 -0
- package/dist/editor/page-viewer/renderingApproval.js.map +1 -0
- package/dist/editor/page-viewer/renderingChanges.d.ts +29 -0
- package/dist/editor/page-viewer/renderingChanges.js +40 -0
- package/dist/editor/page-viewer/renderingChanges.js.map +1 -0
- package/dist/editor/page-viewer/scrollIntoViewTextRanges.d.ts +23 -0
- package/dist/editor/page-viewer/scrollIntoViewTextRanges.js +26 -0
- package/dist/editor/page-viewer/scrollIntoViewTextRanges.js.map +1 -0
- package/dist/editor/page-viewer/useInteractivePreview.d.ts +77 -0
- package/dist/editor/page-viewer/useInteractivePreview.js +210 -0
- package/dist/editor/page-viewer/useInteractivePreview.js.map +1 -0
- package/dist/editor/reviews/CollapsibleText.d.ts +13 -0
- package/dist/editor/reviews/CollapsibleText.js +41 -0
- package/dist/editor/reviews/CollapsibleText.js.map +1 -0
- package/dist/editor/reviews/CommentImageAttachments.d.ts +12 -0
- package/dist/editor/reviews/CommentImageAttachments.js +19 -0
- package/dist/editor/reviews/CommentImageAttachments.js.map +1 -0
- package/dist/editor/reviews/CommentQuote.d.ts +13 -0
- package/dist/editor/reviews/CommentQuote.js +35 -0
- package/dist/editor/reviews/CommentQuote.js.map +1 -0
- package/dist/editor/reviews/CommentTargetOutline.d.ts +13 -0
- package/dist/editor/reviews/CommentTargetOutline.js +21 -0
- package/dist/editor/reviews/CommentTargetOutline.js.map +1 -0
- package/dist/editor/reviews/CommentTargetPickerDomLayer.d.ts +7 -0
- package/dist/editor/reviews/CommentTargetPickerDomLayer.js +117 -0
- package/dist/editor/reviews/CommentTargetPickerDomLayer.js.map +1 -0
- package/dist/editor/reviews/CommentThreadAgentLink.d.ts +28 -0
- package/dist/editor/reviews/CommentThreadAgentLink.js +37 -0
- package/dist/editor/reviews/CommentThreadAgentLink.js.map +1 -0
- package/dist/editor/reviews/CommentThreadCard.d.ts +34 -0
- package/dist/editor/reviews/CommentThreadCard.js +156 -0
- package/dist/editor/reviews/CommentThreadCard.js.map +1 -0
- package/dist/editor/reviews/SuggestionThreadCard.d.ts +19 -0
- package/dist/editor/reviews/SuggestionThreadCard.js +25 -0
- package/dist/editor/reviews/SuggestionThreadCard.js.map +1 -0
- package/dist/editor/reviews/addCommentOnTarget.d.ts +22 -0
- package/dist/editor/reviews/addCommentOnTarget.js +32 -0
- package/dist/editor/reviews/addCommentOnTarget.js.map +1 -0
- package/dist/editor/reviews/balloonLayout.d.ts +51 -0
- package/dist/editor/reviews/balloonLayout.js +101 -0
- package/dist/editor/reviews/balloonLayout.js.map +1 -0
- package/dist/editor/reviews/commentAgentAttachments.d.ts +5 -0
- package/dist/editor/reviews/commentAgentAttachments.js +51 -0
- package/dist/editor/reviews/commentAgentAttachments.js.map +1 -0
- package/dist/editor/reviews/commentImages.d.ts +48 -0
- package/dist/editor/reviews/commentImages.js +128 -0
- package/dist/editor/reviews/commentImages.js.map +1 -0
- package/dist/editor/reviews/commentTargetPicker.d.ts +114 -0
- package/dist/editor/reviews/commentTargetPicker.js +153 -0
- package/dist/editor/reviews/commentTargetPicker.js.map +1 -0
- package/dist/editor/reviews/feedbackBalloonDate.d.ts +8 -0
- package/dist/editor/reviews/feedbackBalloonDate.js +22 -0
- package/dist/editor/reviews/feedbackBalloonDate.js.map +1 -0
- package/dist/editor/reviews/feedbackDrafts.d.ts +49 -0
- package/dist/editor/reviews/feedbackDrafts.js +74 -0
- package/dist/editor/reviews/feedbackDrafts.js.map +1 -0
- package/dist/editor/reviews/feedbackHoverState.d.ts +18 -0
- package/dist/editor/reviews/feedbackHoverState.js +35 -0
- package/dist/editor/reviews/feedbackHoverState.js.map +1 -0
- package/dist/editor/reviews/feedbackPersonFilter.d.ts +3 -0
- package/dist/editor/reviews/feedbackPersonFilter.js +32 -0
- package/dist/editor/reviews/feedbackPersonFilter.js.map +1 -0
- package/dist/editor/reviews/feedbackThreadSelection.d.ts +10 -0
- package/dist/editor/reviews/feedbackThreadSelection.js +31 -0
- package/dist/editor/reviews/feedbackThreadSelection.js.map +1 -0
- package/dist/editor/reviews/feedbackThreads.d.ts +50 -0
- package/dist/editor/reviews/feedbackThreads.js +135 -0
- package/dist/editor/reviews/feedbackThreads.js.map +1 -0
- package/dist/editor/reviews/feedbackWheelForwarding.d.ts +34 -0
- package/dist/editor/reviews/feedbackWheelForwarding.js +108 -0
- package/dist/editor/reviews/feedbackWheelForwarding.js.map +1 -0
- package/dist/editor/reviews/reviewUrlScope.d.ts +23 -0
- package/dist/editor/reviews/reviewUrlScope.js +86 -0
- package/dist/editor/reviews/reviewUrlScope.js.map +1 -0
- package/dist/editor/reviews/scrollWithin.d.ts +29 -0
- package/dist/editor/reviews/scrollWithin.js +87 -0
- package/dist/editor/reviews/scrollWithin.js.map +1 -0
- package/dist/editor/reviews/subtreeFeedback.d.ts +57 -0
- package/dist/editor/reviews/subtreeFeedback.js +137 -0
- package/dist/editor/reviews/subtreeFeedback.js.map +1 -0
- package/dist/editor/reviews/useCommentImagePaste.d.ts +80 -0
- package/dist/editor/reviews/useCommentImagePaste.js +252 -0
- package/dist/editor/reviews/useCommentImagePaste.js.map +1 -0
- package/dist/editor/reviews/useFeedbackThreads.d.ts +35 -0
- package/dist/editor/reviews/useFeedbackThreads.js +137 -0
- package/dist/editor/reviews/useFeedbackThreads.js.map +1 -0
- package/dist/editor/reviews/useMeasuredHeights.d.ts +25 -0
- package/dist/editor/reviews/useMeasuredHeights.js +176 -0
- package/dist/editor/reviews/useMeasuredHeights.js.map +1 -0
- package/dist/editor/reviews/usePendingFeedbackFocus.d.ts +7 -0
- package/dist/editor/reviews/usePendingFeedbackFocus.js +42 -0
- package/dist/editor/reviews/usePendingFeedbackFocus.js.map +1 -0
- package/dist/editor/services/mcpAccessService.d.ts +93 -0
- package/dist/editor/services/mcpAccessService.js +41 -0
- package/dist/editor/services/mcpAccessService.js.map +1 -0
- package/dist/editor/services/previewTokenService.d.ts +14 -0
- package/dist/editor/services/previewTokenService.js +34 -0
- package/dist/editor/services/previewTokenService.js.map +1 -0
- package/dist/editor/services/renderingsService.d.ts +117 -0
- package/dist/editor/services/renderingsService.js +245 -0
- package/dist/editor/services/renderingsService.js.map +1 -0
- package/dist/editor/services/spellCheckService.d.ts +13 -0
- package/dist/editor/services/spellCheckService.js +33 -0
- package/dist/editor/services/spellCheckService.js.map +1 -0
- package/dist/editor/settings/panels/McpAccessPanel.d.ts +7 -0
- package/dist/editor/settings/panels/McpAccessPanel.js +95 -0
- package/dist/editor/settings/panels/McpAccessPanel.js.map +1 -0
- package/dist/editor/settings/panels/McpAccessSettingsView.d.ts +8 -0
- package/dist/editor/settings/panels/McpAccessSettingsView.js +221 -0
- package/dist/editor/settings/panels/McpAccessSettingsView.js.map +1 -0
- package/dist/editor/settings/panels/SpellCheckPanel.d.ts +8 -0
- package/dist/editor/settings/panels/SpellCheckPanel.js +253 -0
- package/dist/editor/settings/panels/SpellCheckPanel.js.map +1 -0
- package/dist/editor/sidebar/FeedbackSidebar.d.ts +7 -0
- package/dist/editor/sidebar/FeedbackSidebar.js +300 -0
- package/dist/editor/sidebar/FeedbackSidebar.js.map +1 -0
- package/dist/editor/sidebar/OperationDetailsContent.js +50 -0
- package/dist/editor/sidebar/OperationDetailsContent.js.map +1 -1
- package/dist/editor/sidebar/liveComponentThumbnails.d.ts +19 -6
- package/dist/editor/sidebar/liveComponentThumbnails.js +39 -18
- package/dist/editor/sidebar/liveComponentThumbnails.js.map +1 -1
- package/dist/editor/spellcheck/canvasSpellCheckContextMenu.d.ts +30 -0
- package/dist/editor/spellcheck/canvasSpellCheckContextMenu.js +69 -0
- package/dist/editor/spellcheck/canvasSpellCheckContextMenu.js.map +1 -0
- package/dist/editor/spellcheck/htmlSpellDocument.d.ts +60 -0
- package/dist/editor/spellcheck/htmlSpellDocument.js +181 -0
- package/dist/editor/spellcheck/htmlSpellDocument.js.map +1 -0
- package/dist/editor/spellcheck/htmlSpellTokenizer.d.ts +45 -0
- package/dist/editor/spellcheck/htmlSpellTokenizer.js +277 -0
- package/dist/editor/spellcheck/htmlSpellTokenizer.js.map +1 -0
- package/dist/editor/spellcheck/replacementGuard.d.ts +27 -0
- package/dist/editor/spellcheck/replacementGuard.js +29 -0
- package/dist/editor/spellcheck/replacementGuard.js.map +1 -0
- package/dist/editor/spellcheck/spellCheckCanvasStore.d.ts +17 -0
- package/dist/editor/spellcheck/spellCheckCanvasStore.js +37 -0
- package/dist/editor/spellcheck/spellCheckCanvasStore.js.map +1 -0
- package/dist/editor/spellcheck/spellCheckCanvasTargets.d.ts +71 -0
- package/dist/editor/spellcheck/spellCheckCanvasTargets.js +126 -0
- package/dist/editor/spellcheck/spellCheckCanvasTargets.js.map +1 -0
- package/dist/editor/spellcheck/spellCheckClient.d.ts +66 -0
- package/dist/editor/spellcheck/spellCheckClient.js +0 -0
- package/dist/editor/spellcheck/spellCheckClient.js.map +1 -0
- package/dist/editor/spellcheck/spellCheckContextMenu.d.ts +52 -0
- package/dist/editor/spellcheck/spellCheckContextMenu.js +120 -0
- package/dist/editor/spellcheck/spellCheckContextMenu.js.map +1 -0
- package/dist/editor/spellcheck/spellCheckReplace.d.ts +8 -0
- package/dist/editor/spellcheck/spellCheckReplace.js +20 -0
- package/dist/editor/spellcheck/spellCheckReplace.js.map +1 -0
- package/dist/editor/spellcheck/spellCheckStyles.d.ts +11 -0
- package/dist/editor/spellcheck/spellCheckStyles.js +12 -0
- package/dist/editor/spellcheck/spellCheckStyles.js.map +1 -0
- package/dist/editor/spellcheck/spellCheckTypes.d.ts +94 -0
- package/dist/editor/spellcheck/spellCheckTypes.js +2 -0
- package/dist/editor/spellcheck/spellCheckTypes.js.map +1 -0
- package/dist/editor/spellcheck/textMarkHitTest.d.ts +14 -0
- package/dist/editor/spellcheck/textMarkHitTest.js +39 -0
- package/dist/editor/spellcheck/textMarkHitTest.js.map +1 -0
- package/dist/editor/spellcheck/useSpellCheck.d.ts +16 -0
- package/dist/editor/spellcheck/useSpellCheck.js +57 -0
- package/dist/editor/spellcheck/useSpellCheck.js.map +1 -0
- package/dist/editor/ui/DynamicRenderingsPublishWarning.d.ts +14 -0
- package/dist/editor/ui/DynamicRenderingsPublishWarning.js +40 -0
- package/dist/editor/ui/DynamicRenderingsPublishWarning.js.map +1 -0
- package/dist/editor/ui/ParheliaMark.d.ts +15 -0
- package/dist/editor/ui/ParheliaMark.js +12 -0
- package/dist/editor/ui/ParheliaMark.js.map +1 -0
- package/dist/editor/ui/RootItemPicker.d.ts +18 -0
- package/dist/editor/ui/RootItemPicker.js +112 -0
- package/dist/editor/ui/RootItemPicker.js.map +1 -0
- package/dist/editor/undoEligibility.d.ts +2 -0
- package/dist/editor/undoEligibility.js +8 -0
- package/dist/editor/undoEligibility.js.map +1 -0
- package/dist/editor/utils/dataTransferImages.d.ts +7 -0
- package/dist/editor/utils/dataTransferImages.js +43 -0
- package/dist/editor/utils/dataTransferImages.js.map +1 -0
- package/dist/editor/validation/navigateToValidationIssue.d.ts +2 -2
- package/dist/editor/validation/navigateToValidationIssue.js +1 -1
- package/dist/editor/validation/navigateToValidationIssue.js.map +1 -1
- package/dist/editor/validation/validationRulerIssues.d.ts +17 -0
- package/dist/editor/validation/validationRulerIssues.js +44 -0
- package/dist/editor/validation/validationRulerIssues.js.map +1 -0
- package/dist/revision.d.ts +2 -2
- package/dist/revision.js +2 -2
- package/dist/task-board/components/AttentionPromptDialog.d.ts +13 -0
- package/dist/task-board/components/AttentionPromptDialog.js +45 -0
- package/dist/task-board/components/AttentionPromptDialog.js.map +1 -0
- package/dist/task-board/components/GoalFindingsTable.d.ts +43 -0
- package/dist/task-board/components/GoalFindingsTable.js +160 -0
- package/dist/task-board/components/GoalFindingsTable.js.map +1 -0
- package/dist/task-board/components/IssuePanel.d.ts +31 -0
- package/dist/task-board/components/IssuePanel.js +268 -0
- package/dist/task-board/components/IssuePanel.js.map +1 -0
- package/dist/task-board/components/SubgoalFindings.d.ts +40 -0
- package/dist/task-board/components/SubgoalFindings.js +88 -0
- package/dist/task-board/components/SubgoalFindings.js.map +1 -0
- package/dist/task-board/services/issueService.d.ts +193 -0
- package/dist/task-board/services/issueService.js +97 -0
- package/dist/task-board/services/issueService.js.map +1 -0
- package/dist/task-board/taskBlockers.d.ts +10 -0
- package/dist/task-board/taskBlockers.js +66 -0
- package/dist/task-board/taskBlockers.js.map +1 -0
- package/dist/task-board/utils/projectDashboardModel.js +14 -0
- package/dist/task-board/utils/projectDashboardModel.js.map +1 -1
- package/dist/task-board/views/ProjectDashboardView.js +5 -13
- package/dist/task-board/views/ProjectDashboardView.js.map +1 -1
- package/dist/tour/sandbox-tour-copy.d.ts +8 -0
- package/dist/tour/sandbox-tour-copy.js +8 -0
- package/dist/tour/sandbox-tour-copy.js.map +1 -1
- package/dist/tour/sandbox-tour.d.ts +3 -0
- package/dist/tour/sandbox-tour.js +107 -3
- package/dist/tour/sandbox-tour.js.map +1 -1
- package/package.json +1 -1
- package/dist/editor/page-editor-chrome/bridgeLinkValue.d.ts +0 -10
- package/dist/editor/page-editor-chrome/bridgeLinkValue.js +0 -55
- package/dist/editor/page-editor-chrome/bridgeLinkValue.js.map +0 -1
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useMemo, useState } from "react";
|
|
3
|
+
import { ArrowUpRight, Download, Plus } from "lucide-react";
|
|
4
|
+
import { cn } from "../../lib/utils";
|
|
5
|
+
import { SEVERITIES, asRecord, asRecommendations, normalizeGoalGuid, severityStyles, } from "./GoalDataView";
|
|
6
|
+
const severityRank = new Map(SEVERITIES.map((severity, index) => [severity, index]));
|
|
7
|
+
function rankOf(severity) {
|
|
8
|
+
return severity
|
|
9
|
+
? (severityRank.get(severity) ?? SEVERITIES.length)
|
|
10
|
+
: SEVERITIES.length;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Flattens the `recommendations` of every subgoal into findings, ordered by
|
|
14
|
+
* severity, then page, then the order the subgoal listed them in. Subgoals
|
|
15
|
+
* whose data carries no recommendations contribute nothing, so goal templates
|
|
16
|
+
* that never write them simply get no table.
|
|
17
|
+
*/
|
|
18
|
+
export function collectGoalFindings(subgoals) {
|
|
19
|
+
const findings = [];
|
|
20
|
+
for (const subgoal of subgoals) {
|
|
21
|
+
const record = asRecord(subgoal.data);
|
|
22
|
+
const recommendations = record
|
|
23
|
+
? asRecommendations(record.recommendations)
|
|
24
|
+
: null;
|
|
25
|
+
if (!recommendations)
|
|
26
|
+
continue;
|
|
27
|
+
const page = subgoal.targetItemPath?.trim() || subgoal.title?.trim() || null;
|
|
28
|
+
const pageItemId = normalizeGoalGuid(subgoal.targetItemId);
|
|
29
|
+
recommendations.forEach((recommendation, index) => {
|
|
30
|
+
findings.push({
|
|
31
|
+
key: `${subgoal.subgoalId}:${index}`,
|
|
32
|
+
subgoalId: subgoal.subgoalId,
|
|
33
|
+
page,
|
|
34
|
+
pageItemId,
|
|
35
|
+
itemId: normalizeGoalGuid(recommendation.itemId) ?? pageItemId,
|
|
36
|
+
language: recommendation.language ?? subgoal.targetItemLanguage ?? null,
|
|
37
|
+
severity: recommendation.severity ?? null,
|
|
38
|
+
text: recommendation.text,
|
|
39
|
+
recommendation,
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
return findings;
|
|
44
|
+
}
|
|
45
|
+
function csvCell(value) {
|
|
46
|
+
const text = value ?? "";
|
|
47
|
+
return /[",\r\n]/.test(text) ? `"${text.replace(/"/g, '""')}"` : text;
|
|
48
|
+
}
|
|
49
|
+
/** RFC 4180 CSV with a header row; one line per finding. */
|
|
50
|
+
export function findingsToCsv(findings) {
|
|
51
|
+
const rows = [
|
|
52
|
+
["Severity", "Page", "Finding", "Item ID", "Language"],
|
|
53
|
+
...findings.map((finding) => [
|
|
54
|
+
finding.severity ?? "",
|
|
55
|
+
finding.page ?? "",
|
|
56
|
+
finding.text,
|
|
57
|
+
finding.itemId ?? "",
|
|
58
|
+
finding.language ?? "",
|
|
59
|
+
]),
|
|
60
|
+
];
|
|
61
|
+
return rows.map((row) => row.map(csvCell).join(",")).join("\r\n") + "\r\n";
|
|
62
|
+
}
|
|
63
|
+
function downloadCsv(fileName, csv) {
|
|
64
|
+
const blob = new Blob(["", csv], { type: "text/csv;charset=utf-8" });
|
|
65
|
+
const url = URL.createObjectURL(blob);
|
|
66
|
+
const anchor = document.createElement("a");
|
|
67
|
+
anchor.href = url;
|
|
68
|
+
anchor.download = fileName;
|
|
69
|
+
document.body.appendChild(anchor);
|
|
70
|
+
anchor.click();
|
|
71
|
+
anchor.remove();
|
|
72
|
+
URL.revokeObjectURL(url);
|
|
73
|
+
}
|
|
74
|
+
function safeFileName(value) {
|
|
75
|
+
return value.replace(/[^\w.-]+/g, "-").replace(/^-+|-+$/g, "") || "goal";
|
|
76
|
+
}
|
|
77
|
+
const MAX_VISIBLE_ROWS = 300;
|
|
78
|
+
function PagePath({ value }) {
|
|
79
|
+
const trimmed = value.replace(/\/+$/, "");
|
|
80
|
+
const cut = trimmed.lastIndexOf("/");
|
|
81
|
+
if (cut <= 0)
|
|
82
|
+
return _jsx("span", { className: "text-neutral-grey-100", children: value });
|
|
83
|
+
return (_jsxs(_Fragment, { children: [_jsx("span", { className: "text-neutral-grey-50 min-w-0 shrink truncate", children: trimmed.slice(0, cut + 1) }), _jsx("span", { className: "text-neutral-grey-100 shrink-0 font-medium group-hover:underline", children: trimmed.slice(cut + 1) })] }));
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Every finding of the given subgoals as one flat, sortable table with a
|
|
87
|
+
* severity filter and a CSV export. Callers pass the subgoals that survive
|
|
88
|
+
* their own page-level filters, so a check or text filter narrows this too.
|
|
89
|
+
*/
|
|
90
|
+
export function GoalFindingsTable({ subgoals, query = "", exportName, onOpenItem, onCreateTaskFromRecommendation, }) {
|
|
91
|
+
const [excluded, setExcluded] = useState(() => new Set());
|
|
92
|
+
const [sortKey, setSortKey] = useState("severity");
|
|
93
|
+
const [showAll, setShowAll] = useState(false);
|
|
94
|
+
const all = useMemo(() => collectGoalFindings(subgoals), [subgoals]);
|
|
95
|
+
const terms = query.trim().toLowerCase().split(/\s+/).filter(Boolean);
|
|
96
|
+
const matching = useMemo(() => terms.length === 0
|
|
97
|
+
? all
|
|
98
|
+
: all.filter((finding) => {
|
|
99
|
+
const haystack = `${finding.page ?? ""}\n${finding.text}`.toLowerCase();
|
|
100
|
+
return terms.every((term) => haystack.includes(term));
|
|
101
|
+
}),
|
|
102
|
+
// terms derives from query; comparing the joined string keeps the memo stable.
|
|
103
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
104
|
+
[all, terms.join(" ")]);
|
|
105
|
+
const countsBySeverity = useMemo(() => {
|
|
106
|
+
const counts = new Map();
|
|
107
|
+
for (const finding of matching) {
|
|
108
|
+
const key = finding.severity ?? "none";
|
|
109
|
+
counts.set(key, (counts.get(key) ?? 0) + 1);
|
|
110
|
+
}
|
|
111
|
+
return counts;
|
|
112
|
+
}, [matching]);
|
|
113
|
+
const severityKeys = [
|
|
114
|
+
...SEVERITIES.filter((severity) => countsBySeverity.has(severity)),
|
|
115
|
+
...(countsBySeverity.has("none") ? ["none"] : []),
|
|
116
|
+
];
|
|
117
|
+
const rows = useMemo(() => {
|
|
118
|
+
const filtered = matching.filter((finding) => !excluded.has(finding.severity ?? "none"));
|
|
119
|
+
if (sortKey === "page") {
|
|
120
|
+
return [...filtered].sort((a, b) => (a.page ?? "").localeCompare(b.page ?? "") ||
|
|
121
|
+
rankOf(a.severity) - rankOf(b.severity));
|
|
122
|
+
}
|
|
123
|
+
return [...filtered].sort((a, b) => rankOf(a.severity) - rankOf(b.severity) ||
|
|
124
|
+
(a.page ?? "").localeCompare(b.page ?? ""));
|
|
125
|
+
}, [matching, excluded, sortKey]);
|
|
126
|
+
const visibleRows = showAll ? rows : rows.slice(0, MAX_VISIBLE_ROWS);
|
|
127
|
+
const pageCount = new Set(rows.map((finding) => finding.subgoalId)).size;
|
|
128
|
+
const toggleSeverity = (key) => setExcluded((current) => {
|
|
129
|
+
const next = new Set(current);
|
|
130
|
+
if (next.has(key))
|
|
131
|
+
next.delete(key);
|
|
132
|
+
else
|
|
133
|
+
next.add(key);
|
|
134
|
+
return next;
|
|
135
|
+
});
|
|
136
|
+
const headerButton = (key, label) => (_jsxs("button", { type: "button", className: cn("hover:text-neutral-grey-100 flex items-center gap-1 text-left", sortKey === key ? "text-neutral-grey-100" : "text-neutral-grey-50"), "aria-sort": sortKey === key ? "ascending" : undefined, title: `Sort by ${label.toLowerCase()}`, onClick: () => setSortKey(key), children: [label, sortKey === key ? _jsx("span", { "aria-hidden": "true", children: "\u2193" }) : null] }));
|
|
137
|
+
return (_jsxs("div", { "data-testid": "taskboard-goal-findings", className: "mt-2 flex flex-col gap-2", children: [_jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [severityKeys.map((key) => {
|
|
138
|
+
const active = !excluded.has(key);
|
|
139
|
+
return (_jsxs("button", { type: "button", "data-testid": "taskboard-goal-findings-severity", "data-severity": key, "aria-pressed": active, title: active ? `Hide ${key} findings` : `Show ${key} findings`, className: cn("inline-flex items-center gap-1 rounded-md px-2 py-1 text-[11px] leading-none transition-opacity", key === "none"
|
|
140
|
+
? "bg-neutral-grey-5 text-neutral-grey-50"
|
|
141
|
+
: severityStyles[key].chip, !active && "line-through opacity-40"), onClick: () => toggleSeverity(key), children: [_jsx("span", { children: key === "none" ? "no severity" : key }), _jsx("span", { className: "font-semibold tabular-nums", children: countsBySeverity.get(key) ?? 0 })] }, key));
|
|
142
|
+
}), _jsxs("span", { className: "text-neutral-grey-50 text-[11px] tabular-nums", "data-testid": "taskboard-goal-findings-count", children: [rows.length, " ", rows.length === 1 ? "finding" : "findings", " on", " ", pageCount, " ", pageCount === 1 ? "page" : "pages"] }), _jsxs("button", { type: "button", "data-testid": "taskboard-goal-findings-export", className: "text-neutral-grey-50 hover:text-neutral-grey-100 ml-auto inline-flex items-center gap-1 text-[11px] hover:underline disabled:opacity-50", disabled: rows.length === 0, onClick: () => downloadCsv(`${safeFileName(exportName)}-findings.csv`, findingsToCsv(rows)), children: [_jsx(Download, { strokeWidth: 1.5, className: "size-3.5", "aria-hidden": "true" }), "Export CSV"] })] }), rows.length > 0 ? (_jsx("div", { className: "border-border-default overflow-x-auto rounded-md border", children: _jsxs("table", { className: "w-full text-xs", children: [_jsx("thead", { children: _jsxs("tr", { className: "bg-neutral-grey-5 text-neutral-grey-50 text-[10px] font-bold tracking-wider uppercase", children: [_jsx("th", { className: "px-2.5 py-1.5 text-left font-bold", children: headerButton("severity", "Severity") }), _jsx("th", { className: "px-2.5 py-1.5 text-left font-bold", children: headerButton("page", "Page") }), _jsx("th", { className: "px-2.5 py-1.5 text-left font-bold", children: "Finding" }), _jsx("th", { className: "px-2.5 py-1.5", children: _jsx("span", { className: "sr-only", children: "Actions" }) })] }) }), _jsx("tbody", { className: "divide-border-default divide-y", children: visibleRows.map((finding) => {
|
|
143
|
+
const openPage = finding.pageItemId && onOpenItem
|
|
144
|
+
? () => onOpenItem({
|
|
145
|
+
itemId: finding.pageItemId,
|
|
146
|
+
language: finding.language,
|
|
147
|
+
})
|
|
148
|
+
: null;
|
|
149
|
+
const open = finding.itemId && onOpenItem
|
|
150
|
+
? () => onOpenItem({
|
|
151
|
+
itemId: finding.itemId,
|
|
152
|
+
language: finding.language,
|
|
153
|
+
})
|
|
154
|
+
: null;
|
|
155
|
+
return (_jsxs("tr", { "data-testid": "taskboard-goal-finding", "data-severity": finding.severity ?? "none", className: "align-top", children: [_jsx("td", { className: "px-2.5 py-1.5 whitespace-nowrap", children: finding.severity ? (_jsx("span", { className: cn("rounded px-1.5 py-0.5 text-[10px] leading-none font-medium", severityStyles[finding.severity].chip), children: finding.severity })) : (_jsx("span", { className: "text-neutral-grey-50", children: "\u2014" })) }), _jsx("td", { className: "max-w-64 px-2.5 py-1.5", children: finding.page ? (openPage ? (_jsx("button", { type: "button", className: "group flex w-full min-w-0 text-left", title: `${finding.page}\nOpen page`, onClick: openPage, children: _jsx(PagePath, { value: finding.page }) })) : (_jsx("span", { className: "flex min-w-0", title: finding.page, children: _jsx(PagePath, { value: finding.page }) }))) : (_jsx("span", { className: "text-neutral-grey-50", children: "\u2014" })) }), _jsx("td", { className: "text-neutral-grey-100 min-w-64 px-2.5 py-1.5 leading-snug", children: finding.text }), _jsx("td", { className: "px-2.5 py-1.5 whitespace-nowrap", children: _jsxs("span", { className: "inline-flex items-center gap-1", children: [open ? (_jsxs("button", { type: "button", className: "text-feedback-blue inline-flex items-center gap-0.5 text-[11px] hover:underline", onClick: open, children: ["Open", _jsx(ArrowUpRight, { strokeWidth: 1.5, className: "size-3", "aria-hidden": "true" })] })) : null, onCreateTaskFromRecommendation ? (_jsx("button", { type: "button", "data-testid": "taskboard-goal-finding-create-task", "aria-label": `Create task: ${finding.text}`, title: "Create task", className: "text-neutral-grey-50 hover:bg-neutral-grey-5 hover:text-neutral-grey-100 inline-flex rounded p-0.5 transition-colors", onClick: () => onCreateTaskFromRecommendation(finding.recommendation), children: _jsx(Plus, { strokeWidth: 1, className: "size-3.5", "aria-hidden": "true" }) })) : null] }) })] }, finding.key));
|
|
156
|
+
}) })] }) })) : (_jsx("div", { className: "text-neutral-grey-50 text-xs", "data-testid": "taskboard-goal-findings-empty", children: "No findings match the current filter." })), rows.length > MAX_VISIBLE_ROWS ? (_jsx("button", { type: "button", className: "text-neutral-grey-50 hover:text-neutral-grey-100 self-start text-[11px] hover:underline", onClick: () => setShowAll((value) => !value), children: showAll
|
|
157
|
+
? "Show fewer"
|
|
158
|
+
: `+${rows.length - MAX_VISIBLE_ROWS} more · show all ${rows.length}` })) : null] }));
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=GoalFindingsTable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GoalFindingsTable.js","sourceRoot":"","sources":["../../../src/task-board/components/GoalFindingsTable.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { type Issue, type QaCheck } from "../services/issueService";
|
|
2
|
+
export type IssuePanelSubgoal = {
|
|
3
|
+
subgoalId: string;
|
|
4
|
+
title: string;
|
|
5
|
+
targetItemId?: string | null;
|
|
6
|
+
targetItemLanguage?: string | null;
|
|
7
|
+
targetItemPath?: string | null;
|
|
8
|
+
};
|
|
9
|
+
type Props = {
|
|
10
|
+
goalId: string;
|
|
11
|
+
revision?: number;
|
|
12
|
+
scopeVersion?: string;
|
|
13
|
+
canEdit: boolean;
|
|
14
|
+
actionsEnabled?: boolean;
|
|
15
|
+
qaEnabled?: boolean;
|
|
16
|
+
/** Page subgoals offered as subjects when a human adds an issue by hand. */
|
|
17
|
+
subgoals?: IssuePanelSubgoal[];
|
|
18
|
+
onChanged: () => void;
|
|
19
|
+
onRequestReview?: (issues: Issue[]) => void;
|
|
20
|
+
/** Creates a review task asking an agent to run the check again; the UI never starts a generation itself. */
|
|
21
|
+
onRequestRecheck?: (check: QaCheck) => void;
|
|
22
|
+
onOpenItem?: (ref: {
|
|
23
|
+
itemId: string;
|
|
24
|
+
language?: string | null;
|
|
25
|
+
}) => void;
|
|
26
|
+
onSelectTask?: (ref: {
|
|
27
|
+
taskId: string;
|
|
28
|
+
}) => void;
|
|
29
|
+
};
|
|
30
|
+
export declare function IssuePanel({ goalId, revision, scopeVersion, canEdit, actionsEnabled, qaEnabled, subgoals, onChanged, onRequestReview, onRequestRecheck, onOpenItem, onSelectTask, }: Props): import("react").JSX.Element;
|
|
31
|
+
export {};
|
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useRef, useState } from "react";
|
|
3
|
+
import { Button } from "../../components/ui/button";
|
|
4
|
+
import { Input } from "../../components/ui/input";
|
|
5
|
+
import { abandonQaCheck, createIssueTasks, createIssues, exportIssues, issueHistory, issueQuery, IssueRequestError, listIssues, listQaChecks, updateIssues, } from "../services/issueService";
|
|
6
|
+
const SEVERITIES = ["critical", "high", "medium", "low", "info"];
|
|
7
|
+
const emptyDraft = {
|
|
8
|
+
title: "",
|
|
9
|
+
severity: "medium",
|
|
10
|
+
subgoalId: "",
|
|
11
|
+
label: "",
|
|
12
|
+
suggestion: "",
|
|
13
|
+
};
|
|
14
|
+
export function IssuePanel({ goalId, revision, scopeVersion, canEdit, actionsEnabled, qaEnabled, subgoals, onChanged, onRequestReview, onRequestRecheck, onOpenItem, onSelectTask, }) {
|
|
15
|
+
const [data, setData] = useState();
|
|
16
|
+
const [page, setPage] = useState(1);
|
|
17
|
+
const [search, setSearch] = useState("");
|
|
18
|
+
const [disposition, setDisposition] = useState("");
|
|
19
|
+
const [severity, setSeverity] = useState("");
|
|
20
|
+
const [selected, setSelected] = useState([]);
|
|
21
|
+
const [error, setError] = useState("");
|
|
22
|
+
const [busy, setBusy] = useState(false);
|
|
23
|
+
const [refresh, setRefresh] = useState(0);
|
|
24
|
+
const [decision, setDecision] = useState("");
|
|
25
|
+
const [reason, setReason] = useState("");
|
|
26
|
+
const [preview, setPreview] = useState();
|
|
27
|
+
const [history, setHistory] = useState();
|
|
28
|
+
const [checks, setChecks] = useState([]);
|
|
29
|
+
const [checkWarnings, setCheckWarnings] = useState([]);
|
|
30
|
+
const [checkPage, setCheckPage] = useState(1);
|
|
31
|
+
const [moreChecks, setMoreChecks] = useState(false);
|
|
32
|
+
const [abandoning, setAbandoning] = useState();
|
|
33
|
+
const [abandonReason, setAbandonReason] = useState("");
|
|
34
|
+
const [adding, setAdding] = useState(false);
|
|
35
|
+
const [draft, setDraft] = useState(emptyDraft);
|
|
36
|
+
const request = useRef(0);
|
|
37
|
+
const query = { goalId, page, limit: 50, search, disposition, severity };
|
|
38
|
+
useEffect(() => {
|
|
39
|
+
const token = ++request.current;
|
|
40
|
+
setSelected([]);
|
|
41
|
+
setData(undefined);
|
|
42
|
+
listIssues({ goalId, page, limit: 50, search, disposition, severity })
|
|
43
|
+
.then((result) => {
|
|
44
|
+
if (token === request.current) {
|
|
45
|
+
setData(result);
|
|
46
|
+
setError("");
|
|
47
|
+
}
|
|
48
|
+
})
|
|
49
|
+
.catch((e) => {
|
|
50
|
+
if (token === request.current)
|
|
51
|
+
setError(e.message);
|
|
52
|
+
});
|
|
53
|
+
return () => {
|
|
54
|
+
request.current++;
|
|
55
|
+
};
|
|
56
|
+
}, [goalId, revision, page, search, disposition, severity, refresh]);
|
|
57
|
+
useEffect(() => {
|
|
58
|
+
if (!qaEnabled)
|
|
59
|
+
return;
|
|
60
|
+
let active = true;
|
|
61
|
+
listQaChecks(goalId, checkPage)
|
|
62
|
+
.then((result) => {
|
|
63
|
+
if (active) {
|
|
64
|
+
setChecks(result.checks);
|
|
65
|
+
setMoreChecks(result.hasMore);
|
|
66
|
+
setCheckWarnings(result.warnings ?? []);
|
|
67
|
+
}
|
|
68
|
+
})
|
|
69
|
+
.catch((e) => {
|
|
70
|
+
if (active)
|
|
71
|
+
setError(e.message);
|
|
72
|
+
});
|
|
73
|
+
return () => {
|
|
74
|
+
active = false;
|
|
75
|
+
};
|
|
76
|
+
}, [goalId, qaEnabled, revision, scopeVersion, refresh, checkPage]);
|
|
77
|
+
const rows = (data?.issues || []).filter((i) => selected.includes(i.issueId));
|
|
78
|
+
const selections = rows.map((i) => ({
|
|
79
|
+
issueId: i.issueId,
|
|
80
|
+
version: i.version,
|
|
81
|
+
}));
|
|
82
|
+
const changed = () => {
|
|
83
|
+
setRefresh((n) => n + 1);
|
|
84
|
+
onChanged();
|
|
85
|
+
};
|
|
86
|
+
const run = async (action) => {
|
|
87
|
+
setBusy(true);
|
|
88
|
+
setError("");
|
|
89
|
+
try {
|
|
90
|
+
await action();
|
|
91
|
+
}
|
|
92
|
+
catch (e) {
|
|
93
|
+
if (e instanceof IssueRequestError && e.conflict) {
|
|
94
|
+
// The server answered with the current issues: show them, drop every
|
|
95
|
+
// stale intent (selection, pending decision, task preview), reload.
|
|
96
|
+
const fresh = e.conflict.issues ?? [];
|
|
97
|
+
setData((current) => current && {
|
|
98
|
+
...current,
|
|
99
|
+
issues: current.issues.map((issue) => fresh.find((f) => f.issueId === issue.issueId) ?? issue),
|
|
100
|
+
});
|
|
101
|
+
setPreview(undefined);
|
|
102
|
+
setDecision("");
|
|
103
|
+
setReason("");
|
|
104
|
+
setSelected([]);
|
|
105
|
+
setError(e.message);
|
|
106
|
+
changed();
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
setError(e instanceof Error ? e.message : String(e));
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
finally {
|
|
113
|
+
setBusy(false);
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
const apply = () => run(async () => {
|
|
117
|
+
await updateIssues(selections, decision, reason || undefined);
|
|
118
|
+
setDecision("");
|
|
119
|
+
setReason("");
|
|
120
|
+
changed();
|
|
121
|
+
});
|
|
122
|
+
const prepare = (groupBySubject) => run(async () => {
|
|
123
|
+
const eligible = rows.filter((i) => ["Open", "AwaitingConfirmation"].includes(i.disposition) &&
|
|
124
|
+
!i.taskLinks.some((l) => l.active));
|
|
125
|
+
if (!eligible.length)
|
|
126
|
+
throw new Error("Select unresolved issues without an active task.");
|
|
127
|
+
const groups = new Map();
|
|
128
|
+
for (const issue of eligible) {
|
|
129
|
+
const key = groupBySubject
|
|
130
|
+
? issue.subjectType + issue.subjectKey
|
|
131
|
+
: issue.issueId;
|
|
132
|
+
groups.set(key, [...(groups.get(key) || []), issue]);
|
|
133
|
+
}
|
|
134
|
+
const bundles = [...groups.values()].map((group) => ({
|
|
135
|
+
title: (group.length === 1
|
|
136
|
+
? group[0].title
|
|
137
|
+
: `Resolve ${group.length} issues: ${group[0].subjectLabel || group[0].subjectKey}`).slice(0, 255),
|
|
138
|
+
description: group
|
|
139
|
+
.map((i) => `${i.title}\n${i.suggestion || ""}\nSubject: ${i.subjectLabel || i.subjectKey}\nIssue: ${i.issueId}`)
|
|
140
|
+
.join("\n\n"),
|
|
141
|
+
priority: group.some((i) => ["critical", "high"].includes(i.severity))
|
|
142
|
+
? "High"
|
|
143
|
+
: "Medium",
|
|
144
|
+
issues: group.map((i) => ({ issueId: i.issueId, version: i.version })),
|
|
145
|
+
}));
|
|
146
|
+
const operationKey = crypto.randomUUID();
|
|
147
|
+
await createIssueTasks(goalId, operationKey, bundles, true);
|
|
148
|
+
setPreview({
|
|
149
|
+
operationKey,
|
|
150
|
+
bundles,
|
|
151
|
+
issueRevision: data?.issueRevision ?? 0,
|
|
152
|
+
});
|
|
153
|
+
});
|
|
154
|
+
const submitDraft = () => run(async () => {
|
|
155
|
+
const subgoal = subgoals?.find((s) => s.subgoalId === draft.subgoalId);
|
|
156
|
+
const label = draft.label.trim();
|
|
157
|
+
if (!draft.title.trim())
|
|
158
|
+
throw new Error("Give the issue a title.");
|
|
159
|
+
if (!subgoal && !label)
|
|
160
|
+
throw new Error("Choose a page or describe the subject.");
|
|
161
|
+
const issue = {
|
|
162
|
+
title: draft.title.trim(),
|
|
163
|
+
severity: draft.severity,
|
|
164
|
+
suggestion: draft.suggestion.trim() || undefined,
|
|
165
|
+
categoryKey: "manual",
|
|
166
|
+
categoryTitle: "Manual",
|
|
167
|
+
subgoalId: subgoal?.subgoalId,
|
|
168
|
+
subjectLabel: label || subgoal?.targetItemPath || subgoal?.title,
|
|
169
|
+
...(subgoal?.targetItemId && subgoal.targetItemLanguage
|
|
170
|
+
? {
|
|
171
|
+
subjectType: "SitecoreItem",
|
|
172
|
+
targetItemId: subgoal.targetItemId,
|
|
173
|
+
language: subgoal.targetItemLanguage,
|
|
174
|
+
}
|
|
175
|
+
: {
|
|
176
|
+
subjectType: "Local",
|
|
177
|
+
subjectKey: (label || subgoal?.title || "").slice(0, 255),
|
|
178
|
+
}),
|
|
179
|
+
};
|
|
180
|
+
await createIssues(goalId, [issue]);
|
|
181
|
+
setDraft(emptyDraft);
|
|
182
|
+
setAdding(false);
|
|
183
|
+
changed();
|
|
184
|
+
});
|
|
185
|
+
const download = (csv) => {
|
|
186
|
+
const url = URL.createObjectURL(new Blob([csv], { type: "text/csv;charset=utf-8" }));
|
|
187
|
+
const anchor = document.createElement("a");
|
|
188
|
+
anchor.href = url;
|
|
189
|
+
anchor.download = "issues.csv";
|
|
190
|
+
anchor.click();
|
|
191
|
+
URL.revokeObjectURL(url);
|
|
192
|
+
};
|
|
193
|
+
const previewStale = preview !== undefined && preview.issueRevision !== data?.issueRevision;
|
|
194
|
+
return (_jsxs("section", { className: "mt-3 space-y-3 rounded border p-3", "data-testid": "taskboard-issues", children: [_jsxs("div", { className: "flex flex-wrap items-center gap-3", children: [_jsx("strong", { children: "Issues" }), data && (_jsxs("span", { className: "text-sm", children: [data.totals.open, " open \u00B7 ", data.totals.awaitingConfirmation, " ", "awaiting confirmation \u00B7 ", data.totals.needsHumanReview, " need review \u00B7", " ", data.totals.resolved, " resolved \u00B7 ", data.totals.dismissed, " dismissed"] })), canEdit && (_jsx(Button, { size: "sm", disabled: busy, onClick: () => setAdding((value) => !value), children: adding ? "Close form" : "Add issue" }))] }), data?.consistent === false && (_jsxs("p", { role: "status", "data-testid": "taskboard-issues-inconsistent", className: "text-sm text-amber-700", children: ["Issue counts are changing.", " ", _jsx(Button, { size: "sm", disabled: busy, onClick: changed, children: "Refresh" })] })), error && (_jsxs("div", { role: "alert", className: "text-destructive text-sm", children: [error, " ", _jsx(Button, { size: "sm", onClick: changed, children: "Refresh current state" })] })), adding && canEdit && (_jsxs("form", { "aria-label": "Add issue", className: "space-y-2 rounded border p-3", onSubmit: (e) => {
|
|
195
|
+
e.preventDefault();
|
|
196
|
+
void submitDraft();
|
|
197
|
+
}, children: [_jsxs("div", { className: "flex flex-wrap gap-2", children: [_jsx(Input, { "aria-label": "Issue title", value: draft.title, onChange: (e) => setDraft({ ...draft, title: e.target.value }), placeholder: "What is wrong?", className: "max-w-md" }), _jsx("select", { "aria-label": "New issue severity", value: draft.severity, onChange: (e) => setDraft({ ...draft, severity: e.target.value }), className: "bg-background rounded border p-1", children: SEVERITIES.map((s) => (_jsx("option", { children: s }, s))) })] }), _jsxs("div", { className: "flex flex-wrap gap-2", children: [_jsxs("select", { "aria-label": "Issue subject", value: draft.subgoalId, onChange: (e) => setDraft({ ...draft, subgoalId: e.target.value }), className: "bg-background max-w-md rounded border p-1", children: [_jsx("option", { value: "", children: "Goal-level subject (label below)" }), (subgoals ?? []).map((s) => (_jsx("option", { value: s.subgoalId, children: s.targetItemPath || s.title }, s.subgoalId)))] }), _jsx(Input, { "aria-label": "Subject label", value: draft.label, onChange: (e) => setDraft({ ...draft, label: e.target.value }), placeholder: "Subject label (required without a page)", className: "max-w-xs" })] }), _jsx(Input, { "aria-label": "Suggestion", value: draft.suggestion, onChange: (e) => setDraft({ ...draft, suggestion: e.target.value }), placeholder: "How to fix it (optional)", className: "max-w-md" }), _jsx(Button, { type: "submit", size: "sm", disabled: busy, children: "Create issue" })] })), _jsxs("div", { className: "flex flex-wrap gap-2", children: [_jsx(Input, { "aria-label": "Search issues", value: search, onChange: (e) => {
|
|
198
|
+
setSearch(e.target.value);
|
|
199
|
+
setPage(1);
|
|
200
|
+
}, placeholder: "Search issues", className: "max-w-xs" }), _jsxs("select", { "aria-label": "Issue disposition", value: disposition, onChange: (e) => {
|
|
201
|
+
setDisposition(e.target.value);
|
|
202
|
+
setPage(1);
|
|
203
|
+
}, className: "bg-background rounded border p-1", children: [_jsx("option", { value: "", children: "Unresolved" }), ["All", "Open", "AwaitingConfirmation", "Resolved", "Dismissed"].map((s) => (_jsx("option", { children: s }, s)))] }), _jsxs("select", { "aria-label": "Issue severity", value: severity, onChange: (e) => {
|
|
204
|
+
setSeverity(e.target.value);
|
|
205
|
+
setPage(1);
|
|
206
|
+
}, className: "bg-background rounded border p-1", children: [_jsx("option", { value: "", children: "All severities" }), SEVERITIES.map((s) => (_jsx("option", { children: s }, s)))] }), _jsx("button", { type: "button", className: "self-center text-sm underline disabled:opacity-50", disabled: busy, "data-href": `/parhelia/tasks/exportIssues?${issueQuery(query)}`, onClick: () => run(async () => download(await exportIssues(query))), children: "Export all matching issues" })] }), !data ? (_jsx("p", { role: "status", children: "Loading issues\u2026" })) : (_jsxs(_Fragment, { children: [_jsx("div", { className: "overflow-x-auto", children: _jsxs("table", { className: "w-full text-left text-sm", children: [_jsx("thead", { children: _jsxs("tr", { children: [_jsx("th", { children: canEdit && (_jsx("input", { type: "checkbox", "aria-label": "Select visible issues", checked: data.issues.length > 0 &&
|
|
207
|
+
selected.length === data.issues.length, onChange: (e) => setSelected(e.target.checked
|
|
208
|
+
? data.issues.map((i) => i.issueId)
|
|
209
|
+
: []) })) }), _jsx("th", { children: "Severity / check" }), _jsx("th", { children: "Subject and issue" }), _jsx("th", { children: "Status" }), _jsx("th", { children: "Tasks / history" })] }) }), _jsx("tbody", { children: data.issues.map((issue) => (_jsxs("tr", { className: "border-t align-top", "data-testid": "taskboard-issue-row", children: [_jsx("td", { className: "p-2", children: canEdit && (_jsx("input", { type: "checkbox", "aria-label": `Select ${issue.title}`, checked: selected.includes(issue.issueId), onChange: (e) => setSelected((s) => e.target.checked
|
|
210
|
+
? [...s, issue.issueId]
|
|
211
|
+
: s.filter((id) => id !== issue.issueId)) })) }), _jsxs("td", { className: "p-2", children: [issue.severity, _jsx("div", { className: "text-muted-foreground text-xs", children: issue.categoryTitle || issue.categoryKey })] }), _jsxs("td", { className: "p-2", children: [_jsx("button", { className: "underline", disabled: !issue.targetItemId || !onOpenItem, onClick: () => issue.targetItemId &&
|
|
212
|
+
onOpenItem?.({
|
|
213
|
+
itemId: issue.targetItemId,
|
|
214
|
+
language: issue.language,
|
|
215
|
+
}), children: issue.subjectLabel || issue.subjectKey }), _jsx("div", { children: issue.title }), issue.suggestion && (_jsx("p", { className: "text-muted-foreground", children: issue.suggestion })), issue.evidence != null && (_jsxs("details", { children: [_jsx("summary", { children: "Evidence" }), _jsx("pre", { className: "max-w-xl whitespace-pre-wrap", children: JSON.stringify(issue.evidence, null, 2) })] }))] }), _jsxs("td", { className: "p-2", children: [issue.disposition === "AwaitingConfirmation"
|
|
216
|
+
? "Awaiting confirmation"
|
|
217
|
+
: issue.disposition, issue.closureBasis && (_jsxs("div", { className: "text-xs", children: [issue.closureBasis, ": ", issue.closureReason] })), issue.needsHumanReview && (_jsxs("div", { className: "text-amber-700", children: ["Needs review: ", issue.reviewReason] }))] }), _jsxs("td", { className: "p-2", children: [issue.taskLinks.map((link) => (_jsxs("div", { children: [_jsx("button", { disabled: !link.taskId || !onSelectTask, className: "underline", onClick: () => link.taskId &&
|
|
218
|
+
onSelectTask?.({ taskId: link.taskId }), children: link.taskTitle }), " ", link.taskId ? link.taskStatus : "(deleted)", !link.active && link.taskId ? " · retired" : ""] }, link.originalTaskId))), _jsx("button", { className: "underline", onClick: () => run(async () => setHistory({
|
|
219
|
+
title: issue.title,
|
|
220
|
+
rows: (await issueHistory(issue.issueId)).history,
|
|
221
|
+
})), children: "History" })] })] }, issue.issueId))) })] }) }), !data.issues.length && (_jsx("p", { children: "No matching issues. This does not mean all checks passed." })), _jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Button, { size: "sm", disabled: page === 1, onClick: () => setPage((p) => p - 1), children: "Previous" }), _jsxs("span", { children: ["Page ", page, " \u00B7 ", data.filteredTotals.total, " matching"] }), _jsx(Button, { size: "sm", disabled: !data.hasMore, onClick: () => setPage((p) => p + 1), children: "Next" })] })] })), canEdit && rows.length > 0 && (_jsxs("div", { className: "space-y-2", children: [_jsxs("div", { className: "flex flex-wrap gap-2", children: [_jsxs("span", { children: [rows.length, " selected"] }), onRequestReview &&
|
|
222
|
+
rows.some((i) => i.resolutionMode === "Recheck" || i.needsHumanReview) ? (_jsx(Button, { size: "sm", disabled: busy, onClick: () => onRequestReview(rows), children: "Request recheck or review" })) : null, [
|
|
223
|
+
"Dismiss",
|
|
224
|
+
"Reopen",
|
|
225
|
+
...(rows.every((i) => i.resolutionMode === "Decision")
|
|
226
|
+
? ["Resolve"]
|
|
227
|
+
: []),
|
|
228
|
+
...(rows.every((i) => i.resolutionMode === "Decision" &&
|
|
229
|
+
i.disposition === "AwaitingConfirmation")
|
|
230
|
+
? ["ConfirmResolved"]
|
|
231
|
+
: []),
|
|
232
|
+
].map((action) => (_jsx(Button, { "data-testid": action === "ConfirmResolved"
|
|
233
|
+
? "taskboard-issue-confirm-resolved"
|
|
234
|
+
: undefined, size: "sm", disabled: busy, onClick: () => {
|
|
235
|
+
setDecision(action);
|
|
236
|
+
setReason(action === "ConfirmResolved"
|
|
237
|
+
? "Task completion confirmed"
|
|
238
|
+
: "");
|
|
239
|
+
}, children: action === "ConfirmResolved" ? "Confirm resolved" : action }, action))), actionsEnabled && (_jsxs(_Fragment, { children: [_jsx(Button, { size: "sm", disabled: busy, onClick: () => prepare(false), children: "One task per issue" }), _jsx(Button, { size: "sm", disabled: busy, onClick: () => prepare(true), children: "Group tasks by subject" })] }))] }), decision && (_jsxs("div", { className: "flex gap-2", children: [_jsx(Input, { "aria-label": "Decision reason", value: reason, onChange: (e) => setReason(e.target.value), placeholder: "Reason for this decision" }), _jsxs(Button, { disabled: busy ||
|
|
240
|
+
(["Dismiss", "Resolve"].includes(decision) && !reason.trim()), onClick: apply, children: ["Apply", " ", decision === "ConfirmResolved"
|
|
241
|
+
? "confirmation"
|
|
242
|
+
: decision.toLowerCase()] }), _jsx(Button, { onClick: () => setDecision(""), children: "Cancel" })] }))] })), preview && (_jsxs("div", { className: "space-y-2 rounded border p-3", role: "dialog", "aria-label": "Task creation preview", children: [_jsxs("strong", { children: ["Create ", preview.bundles.length, " tasks"] }), preview.bundles.map((bundle, index) => (_jsxs("div", { children: [_jsxs("p", { children: [bundle.title, " \u00B7 ", bundle.priority, " \u00B7 ", bundle.issues.length, " ", "issues"] }), _jsx("pre", { className: "text-xs whitespace-pre-wrap", children: bundle.description })] }, index))), previewStale && (_jsx("p", { role: "status", className: "text-sm text-amber-700", children: "Issues changed since this preview. Select the issues again and run a new preview." })), _jsx(Button, { disabled: busy || previewStale, onClick: () => run(async () => {
|
|
243
|
+
await createIssueTasks(goalId, preview.operationKey, preview.bundles, false);
|
|
244
|
+
setPreview(undefined);
|
|
245
|
+
changed();
|
|
246
|
+
}), children: "Create tasks" }), _jsx(Button, { disabled: busy, onClick: () => setPreview(undefined), children: "Cancel" }), _jsx("p", { className: "text-xs", children: "Completing a task will request confirmation. It will not resolve its issues automatically." })] })), history && (_jsxs("div", { className: "rounded border p-3", role: "dialog", "aria-label": "Issue history", children: [_jsx("strong", { children: history.title }), _jsx("ol", { children: history.rows.map((h) => (_jsxs("li", { className: "py-1 text-sm", children: [new Date(h.createdAt).toLocaleString(), " \u00B7 ", h.actor, " \u00B7", " ", h.action, " \u2192 ", h.disposition, h.basis && ` (${h.basis})`, h.reason && `: ${h.reason}`] }, h.historyId))) }), _jsx(Button, { onClick: () => setHistory(undefined), children: "Close history" })] })), qaEnabled && (_jsxs("details", { children: [_jsx("summary", { children: "QA checks and observation times" }), _jsx("p", { className: "text-xs", children: "These are recorded observations. Content may have changed since the check. Completed with \u201CNeedsReview\u201D requires a human decision." }), checkWarnings.map((warning) => (_jsx("p", { role: "status", className: "text-sm text-amber-700", children: warning }, warning))), _jsx("ul", { children: checks.map((check) => (_jsxs("li", { className: "flex flex-wrap items-center gap-2 border-t py-2 text-sm", children: [_jsxs("span", { children: [check.subjectLabel, " \u00B7 ", check.definition.title, " \u00B7", " ", check.state, " \u00B7 ", check.outcome, " \u00B7 ", check.definitionStatus, check.reportedAt &&
|
|
247
|
+
` · ${new Date(check.reportedAt).toLocaleString()}`] }), check.state === "Running" && (_jsxs("span", { className: "text-muted-foreground text-xs", children: ["began ", check.beganBy ? `by ${check.beganBy} ` : "", check.beganAt
|
|
248
|
+
? `at ${new Date(check.beganAt).toLocaleString()}`
|
|
249
|
+
: ""] })), check.abandonedAt && (_jsxs("span", { className: "text-muted-foreground text-xs", children: ["abandoned by ", check.abandonedBy, " at", " ", new Date(check.abandonedAt).toLocaleString(), check.abandonReason ? `: ${check.abandonReason}` : ""] })), check.reason && !check.abandonedAt && (_jsx("span", { children: check.reason })), (check.diagnostics ?? []).map((line) => (_jsx("span", { className: "text-destructive text-xs", children: line }, line))), canEdit &&
|
|
250
|
+
check.state === "Running" &&
|
|
251
|
+
check.definitionStatus !== "Retired" && (_jsx(Button, { size: "sm", disabled: busy, onClick: () => {
|
|
252
|
+
setAbandoning(check);
|
|
253
|
+
setAbandonReason("");
|
|
254
|
+
}, children: "Abandon check" })), canEdit &&
|
|
255
|
+
onRequestRecheck &&
|
|
256
|
+
check.state !== "Running" &&
|
|
257
|
+
check.definitionStatus !== "Retired" && (_jsx(Button, { size: "sm", disabled: busy, onClick: () => onRequestRecheck(check), children: "Request re-check" }))] }, check.domainKey))) }), abandoning && (_jsxs("div", { role: "dialog", "aria-label": "Abandon check", className: "space-y-2 rounded border p-3", children: [_jsxs("p", { className: "text-sm", children: ["Abandon generation ", abandoning.generation, " of", " ", abandoning.definition.title, " on ", abandoning.subjectLabel, "? Began", abandoning.beganBy ? ` by ${abandoning.beganBy}` : "", abandoning.beganAt
|
|
258
|
+
? ` at ${new Date(abandoning.beganAt).toLocaleString()}`
|
|
259
|
+
: "", "."] }), _jsx("p", { className: "text-xs", children: "The 30-minute \u201Cinterrupted\u201D hint is a heuristic. Make sure no worker is still reporting on this generation; its report will be refused once the check is abandoned, and a re-check needs a new begin." }), _jsx(Input, { "aria-label": "Abandon reason", value: abandonReason, onChange: (e) => setAbandonReason(e.target.value), placeholder: "Why this run is abandoned" }), _jsx(Button, { size: "sm", disabled: busy || !abandonReason.trim(), onClick: () => run(async () => {
|
|
260
|
+
await abandonQaCheck(goalId, {
|
|
261
|
+
checkKey: abandoning.checkKey,
|
|
262
|
+
subgoalId: abandoning.subgoalId,
|
|
263
|
+
}, abandoning.generation, abandonReason.trim());
|
|
264
|
+
setAbandoning(undefined);
|
|
265
|
+
changed();
|
|
266
|
+
}), children: "Confirm abandon" }), _jsx(Button, { size: "sm", disabled: busy, onClick: () => setAbandoning(undefined), children: "Cancel" })] })), _jsx(Button, { size: "sm", disabled: checkPage === 1, onClick: () => setCheckPage((p) => p - 1), children: "Previous checks" }), _jsx(Button, { size: "sm", disabled: !moreChecks, onClick: () => setCheckPage((p) => p + 1), children: "Next checks" })] }))] }));
|
|
267
|
+
}
|
|
268
|
+
//# sourceMappingURL=IssuePanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IssuePanel.js","sourceRoot":"","sources":["../../../src/task-board/components/IssuePanel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { GoalData } from "../types";
|
|
2
|
+
import type { IssueSummary } from "../services/issueService";
|
|
3
|
+
import { type GoalSeverity } from "./GoalDataView";
|
|
4
|
+
export type SubgoalFindings = {
|
|
5
|
+
/** Non-zero severity buckets in severity order (critical first). */
|
|
6
|
+
counts: Array<{
|
|
7
|
+
severity: GoalSeverity;
|
|
8
|
+
count: number;
|
|
9
|
+
}>;
|
|
10
|
+
/** Findings that carry a severity, info included. */
|
|
11
|
+
total: number;
|
|
12
|
+
/** Checks with status "fail"; 0 when the data has no checks. */
|
|
13
|
+
failedChecks: number;
|
|
14
|
+
/** Where the numbers come from: the typed issue summary or legacy report data. */
|
|
15
|
+
source: "issues" | "legacy";
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Condenses a subgoal's findings into what a list row needs: how many findings
|
|
19
|
+
* each severity has and how many checks failed.
|
|
20
|
+
*
|
|
21
|
+
* The data source is an explicit choice, not a guess from the numbers: when the
|
|
22
|
+
* goal has Issues enabled the typed summary is authoritative, a missing summary
|
|
23
|
+
* meaning zero unresolved issues. Otherwise the legacy report data is read and
|
|
24
|
+
* null is returned when it carries neither severity counts nor checks, so
|
|
25
|
+
* callers can leave the row blank instead of claiming "no findings". When
|
|
26
|
+
* `issuesEnabled` is not given, the presence of a summary decides.
|
|
27
|
+
*/
|
|
28
|
+
export declare function readSubgoalFindings(data: GoalData, summary?: IssueSummary, issuesEnabled?: boolean): SubgoalFindings | null;
|
|
29
|
+
export declare function describeSubgoalFindings(findings: SubgoalFindings): string;
|
|
30
|
+
type FindingsProps = {
|
|
31
|
+
data: GoalData;
|
|
32
|
+
summary?: IssueSummary;
|
|
33
|
+
/** The owning goal's Issues flag; decides the data source (see readSubgoalFindings). */
|
|
34
|
+
issuesEnabled?: boolean;
|
|
35
|
+
};
|
|
36
|
+
/** Inline severity chips for a subgoal row; "No findings" when the data is clean. */
|
|
37
|
+
export declare function SubgoalFindingsChips({ data, summary, issuesEnabled, }: FindingsProps): import("react").JSX.Element | null;
|
|
38
|
+
/** Compact count for a matrix cell, coloured by the worst severity present. */
|
|
39
|
+
export declare function SubgoalFindingsBadge({ data, summary, issuesEnabled, }: FindingsProps): import("react").JSX.Element | null;
|
|
40
|
+
export {};
|