@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,221 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback, useEffect, useMemo, useState } from "react";
|
|
3
|
+
import { AlertCircle, ChevronDown, ChevronRight, Folder, Gauge, Globe, KeyRound, ListChecks, ShieldCheck, Users, Wrench, X, } from "lucide-react";
|
|
4
|
+
import { toast } from "sonner";
|
|
5
|
+
import { Badge } from "../../../components/ui/badge";
|
|
6
|
+
import { Button } from "../../../components/ui/button";
|
|
7
|
+
import { Checkbox } from "../../../components/ui/checkbox";
|
|
8
|
+
import { Input } from "../../../components/ui/input";
|
|
9
|
+
import { Select } from "../../../components/ui/select";
|
|
10
|
+
import { Switch } from "../../../components/ui/switch";
|
|
11
|
+
import { Textarea } from "../../../components/ui/textarea";
|
|
12
|
+
import { SearchInput } from "../../../components/SearchInput";
|
|
13
|
+
import { cn } from "../../../lib/utils";
|
|
14
|
+
import { mcpAccessService, } from "../../services/mcpAccessService";
|
|
15
|
+
import { LoadingState } from "../../ui/LoadingState";
|
|
16
|
+
import { SettingsCard as Card } from "../SettingsCard";
|
|
17
|
+
import { SettingsPanelLayout } from "../SettingsPanelLayout";
|
|
18
|
+
const getErrorMessage = (error, fallback) => error instanceof Error ? error.message : fallback;
|
|
19
|
+
const cleanLines = (values) => values.map((value) => value.trim()).filter((value) => value.length > 0);
|
|
20
|
+
/** Normalizes list fields the way the server stores them, so dirty tracking ignores blank lines. */
|
|
21
|
+
function normalize(form) {
|
|
22
|
+
return {
|
|
23
|
+
...form,
|
|
24
|
+
publicBaseUrl: form.publicBaseUrl.trim(),
|
|
25
|
+
instructions: form.instructions.trim(),
|
|
26
|
+
allowedOrigins: cleanLines(form.allowedOrigins),
|
|
27
|
+
allowedRoles: cleanLines(form.allowedRoles),
|
|
28
|
+
signingSecretConnectionStringName: form.signingSecretConnectionStringName.trim(),
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
const sameForm = (a, b) => JSON.stringify(normalize(a)) === JSON.stringify(normalize(b));
|
|
32
|
+
function SettingRow({ label, description, children, className, }) {
|
|
33
|
+
return (_jsxs("div", { className: cn("flex items-center justify-between gap-4", className), children: [_jsxs("div", { className: "min-w-0", children: [_jsx("div", { className: "text-neutral-grey-100 text-xs font-medium", children: label }), description && _jsx("div", { className: "text-neutral-grey-50 mt-0.5 text-xs", children: description })] }), children] }));
|
|
34
|
+
}
|
|
35
|
+
function SwitchRow({ label, description, checked, onChange, testId, }) {
|
|
36
|
+
return (_jsx(SettingRow, { label: label, description: description, children: _jsx(Switch, { checked: checked, onCheckedChange: onChange, "aria-label": label, "data-testid": testId }) }));
|
|
37
|
+
}
|
|
38
|
+
function FieldBlock({ label, description, children, }) {
|
|
39
|
+
return (_jsxs("div", { className: "space-y-1.5", children: [_jsxs("div", { children: [_jsx("div", { className: "text-neutral-grey-100 text-xs font-medium", children: label }), description && _jsx("div", { className: "text-neutral-grey-50 mt-0.5 text-xs", children: description })] }), children] }));
|
|
40
|
+
}
|
|
41
|
+
function NumberInput({ label, description, value, onChange, min, max, step = 1, testId, }) {
|
|
42
|
+
const invalid = !Number.isFinite(value) || value < min || value > max;
|
|
43
|
+
return (_jsx(SettingRow, { label: label, description: invalid ? `Between ${min} and ${max}.` : description, children: _jsx(Input, { type: "number", min: min, max: max, step: step, value: Number.isFinite(value) ? value : "", "aria-invalid": invalid, "aria-label": label, onChange: (event) => onChange(event.target.value === "" ? Number.NaN : Number(event.target.value)), className: "h-8 w-28 shrink-0 text-right text-xs md:text-xs", "data-testid": testId }) }));
|
|
44
|
+
}
|
|
45
|
+
function buildToolTree(tools) {
|
|
46
|
+
const byId = new Map(tools.map((tool) => [tool.id, tool]));
|
|
47
|
+
const children = new Map();
|
|
48
|
+
tools.forEach((tool) => {
|
|
49
|
+
const parent = tool.parentId && byId.has(tool.parentId) ? tool.parentId : null;
|
|
50
|
+
children.set(parent, [...(children.get(parent) ?? []), tool]);
|
|
51
|
+
});
|
|
52
|
+
return { byId, children };
|
|
53
|
+
}
|
|
54
|
+
function ancestorIds(tree, id) {
|
|
55
|
+
const result = [];
|
|
56
|
+
let current = tree.byId.get(id)?.parentId ?? null;
|
|
57
|
+
while (current && tree.byId.has(current)) {
|
|
58
|
+
result.push(current);
|
|
59
|
+
current = tree.byId.get(current)?.parentId ?? null;
|
|
60
|
+
}
|
|
61
|
+
return result;
|
|
62
|
+
}
|
|
63
|
+
function descendantTools(tree, id) {
|
|
64
|
+
const node = tree.byId.get(id);
|
|
65
|
+
if (!node)
|
|
66
|
+
return [];
|
|
67
|
+
const own = node.functionName ? [node] : [];
|
|
68
|
+
return own.concat((tree.children.get(id) ?? []).flatMap((child) => descendantTools(tree, child.id)));
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* A checkbox tree over tool folders and tools with TreelistEx semantics: a selected folder
|
|
72
|
+
* includes everything below it, so its descendants show as included and cannot be ticked alone.
|
|
73
|
+
*/
|
|
74
|
+
function ToolTreeSelect({ tree, selected, onChange, filter, isSelectable = () => true, testId, }) {
|
|
75
|
+
const selectedSet = useMemo(() => new Set(selected), [selected]);
|
|
76
|
+
const [expanded, setExpanded] = useState(() => {
|
|
77
|
+
const initial = new Set();
|
|
78
|
+
(tree.children.get(null) ?? []).forEach((root) => initial.add(root.id));
|
|
79
|
+
selected.forEach((id) => ancestorIds(tree, id).forEach((ancestor) => initial.add(ancestor)));
|
|
80
|
+
return initial;
|
|
81
|
+
});
|
|
82
|
+
const needle = filter.trim().toLowerCase();
|
|
83
|
+
const visible = useMemo(() => {
|
|
84
|
+
if (!needle)
|
|
85
|
+
return null;
|
|
86
|
+
const ids = new Set();
|
|
87
|
+
tree.byId.forEach((node) => {
|
|
88
|
+
const text = `${node.displayName ?? ""} ${node.name} ${node.functionName ?? ""}`.toLowerCase();
|
|
89
|
+
if (text.includes(needle)) {
|
|
90
|
+
ids.add(node.id);
|
|
91
|
+
ancestorIds(tree, node.id).forEach((ancestor) => ids.add(ancestor));
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
return ids;
|
|
95
|
+
}, [needle, tree]);
|
|
96
|
+
const toggle = (node, checked) => {
|
|
97
|
+
if (checked) {
|
|
98
|
+
// A folder replaces any selection below it.
|
|
99
|
+
const below = new Set(descendantTools(tree, node.id).map((tool) => tool.id));
|
|
100
|
+
const collect = (id) => (tree.children.get(id) ?? []).forEach((child) => {
|
|
101
|
+
below.add(child.id);
|
|
102
|
+
collect(child.id);
|
|
103
|
+
});
|
|
104
|
+
collect(node.id);
|
|
105
|
+
onChange([...selected.filter((id) => !below.has(id)), node.id]);
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
onChange(selected.filter((id) => id !== node.id));
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
const renderNode = (node, depth, includedByAncestor) => {
|
|
112
|
+
if (visible && !visible.has(node.id))
|
|
113
|
+
return null;
|
|
114
|
+
const children = tree.children.get(node.id) ?? [];
|
|
115
|
+
const isFolder = children.length > 0;
|
|
116
|
+
const isOpen = visible !== null || expanded.has(node.id);
|
|
117
|
+
const isChecked = includedByAncestor || selectedSet.has(node.id);
|
|
118
|
+
const selectable = !includedByAncestor && isSelectable(node);
|
|
119
|
+
const label = node.displayName || node.name;
|
|
120
|
+
return (_jsxs("li", { children: [_jsxs("div", { className: "hover:bg-neutral-grey-5 flex items-center gap-2 rounded py-0.5 pr-2", style: { paddingLeft: depth * 16 }, "data-testid": `${testId}-node`, "data-tool-id": node.id, children: [isFolder ? (_jsx("button", { type: "button", className: "text-neutral-grey-50 hover:text-neutral-grey-100 flex h-4 w-4 items-center justify-center", "aria-label": isOpen ? `Collapse ${label}` : `Expand ${label}`, onClick: () => setExpanded((current) => {
|
|
121
|
+
const next = new Set(current);
|
|
122
|
+
if (next.has(node.id))
|
|
123
|
+
next.delete(node.id);
|
|
124
|
+
else
|
|
125
|
+
next.add(node.id);
|
|
126
|
+
return next;
|
|
127
|
+
}), children: isOpen ? _jsx(ChevronDown, { className: "h-3.5 w-3.5", strokeWidth: 1.5 }) : _jsx(ChevronRight, { className: "h-3.5 w-3.5", strokeWidth: 1.5 }) })) : (_jsx("span", { className: "h-4 w-4" })), _jsx(Checkbox, { checked: isChecked, disabled: !selectable, onCheckedChange: (value) => toggle(node, value === true), "aria-label": label }), isFolder && _jsx(Folder, { className: "text-neutral-grey-50 h-3.5 w-3.5 shrink-0", strokeWidth: 1.5 }), _jsx("span", { className: cn("truncate text-xs", !selectable && !isChecked && "text-neutral-grey-50"), children: label }), node.functionName && node.functionName !== node.name && (_jsx("span", { className: "text-neutral-grey-50 truncate font-mono text-[10px]", children: node.functionName })), node.hiddenFromMcp && (_jsx(Badge, { variant: "secondary", className: "ml-auto shrink-0", children: "hidden from MCP" }))] }), isFolder && isOpen && (_jsx("ul", { children: children.map((child) => renderNode(child, depth + 1, isChecked)) }))] }, node.id));
|
|
128
|
+
};
|
|
129
|
+
const roots = tree.children.get(null) ?? [];
|
|
130
|
+
return (_jsx("ul", { className: "border-border-default max-h-80 overflow-y-auto rounded border p-1", "data-testid": testId, children: roots.length === 0 ? (_jsx("li", { className: "text-neutral-grey-50 p-2 text-xs", children: "No tools found." })) : (roots.map((root) => renderNode(root, 0, false))) }));
|
|
131
|
+
}
|
|
132
|
+
function effectiveToolCount(tree, selected) {
|
|
133
|
+
const names = new Set();
|
|
134
|
+
selected.forEach((id) => descendantTools(tree, id)
|
|
135
|
+
.filter((tool) => !tool.hiddenFromMcp)
|
|
136
|
+
.forEach((tool) => names.add(tool.name)));
|
|
137
|
+
return names.size;
|
|
138
|
+
}
|
|
139
|
+
function RoleList({ roles, availableRoles, onChange, }) {
|
|
140
|
+
const [custom, setCustom] = useState("");
|
|
141
|
+
const add = (role) => {
|
|
142
|
+
const trimmed = role.trim();
|
|
143
|
+
if (!trimmed || roles.some((r) => r.toLowerCase() === trimmed.toLowerCase()))
|
|
144
|
+
return;
|
|
145
|
+
onChange([...cleanLines(roles), trimmed]);
|
|
146
|
+
};
|
|
147
|
+
const options = availableRoles
|
|
148
|
+
.filter((role) => !roles.some((r) => r.toLowerCase() === role.toLowerCase()))
|
|
149
|
+
.map((role) => ({ value: role, label: role }));
|
|
150
|
+
return (_jsxs("div", { className: "space-y-2", children: [_jsx("div", { className: "flex flex-wrap gap-1.5", "data-testid": "mcp-settings-roles", children: cleanLines(roles).length === 0 ? (_jsx("span", { className: "text-feedback-orange text-xs", children: "No role yet, so only administrators can connect." })) : (cleanLines(roles).map((role) => (_jsxs("span", { className: "bg-neutral-grey-5 border-border-default inline-flex items-center gap-1 rounded border py-0.5 pr-1 pl-2 text-xs", children: [role, _jsx("button", { type: "button", className: "text-neutral-grey-50 hover:text-neutral-grey-100", "aria-label": `Remove ${role}`, onClick: () => onChange(roles.filter((r) => r !== role)), children: _jsx(X, { className: "h-3 w-3", strokeWidth: 1.5 }) })] }, role)))) }), _jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [options.length > 0 && (_jsx(Select, { options: options, value: "", onValueChange: add, placeholder: "Add a role", className: "w-64", searchable: true, searchPlaceholder: "Search roles", "data-testid": "mcp-settings-role-select" })), _jsxs("form", { className: "flex items-center gap-2", onSubmit: (event) => {
|
|
151
|
+
event.preventDefault();
|
|
152
|
+
add(custom);
|
|
153
|
+
setCustom("");
|
|
154
|
+
}, children: [_jsx(Input, { value: custom, onChange: (event) => setCustom(event.target.value), placeholder: "sitecore\\Role name", "aria-label": "Role name", className: "h-8 w-48 text-xs md:text-xs" }), _jsx(Button, { type: "submit", size: "sm", variant: "outline", disabled: !custom.trim(), children: "Add" })] })] })] }));
|
|
155
|
+
}
|
|
156
|
+
function SkillList({ skills, selected, onChange, }) {
|
|
157
|
+
if (skills.length === 0)
|
|
158
|
+
return _jsx("p", { className: "text-neutral-grey-50 text-xs", children: "No agent skills found." });
|
|
159
|
+
const selectedSet = new Set(selected);
|
|
160
|
+
return (_jsx("ul", { className: "border-border-default max-h-60 overflow-y-auto rounded border p-1", "data-testid": "mcp-settings-skills", children: skills.map((skill) => (_jsxs("li", { className: "hover:bg-neutral-grey-5 flex items-start gap-2 rounded px-2 py-1", children: [_jsx(Checkbox, { className: "mt-0.5", checked: selectedSet.has(skill.id), onCheckedChange: (value) => onChange(value === true ? [...selected, skill.id] : selected.filter((id) => id !== skill.id)), "aria-label": skill.name }), _jsxs("div", { className: "min-w-0", children: [_jsxs("div", { className: "flex items-center gap-2 text-xs", children: [_jsx("span", { className: "truncate", children: skill.name }), skill.disabled && _jsx(Badge, { variant: "secondary", children: "disabled" })] }), skill.description && _jsx("div", { className: "text-neutral-grey-50 truncate text-xs", children: skill.description })] })] }, skill.id))) }));
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Administrator form for the "MCP Access" settings item: server address, who may connect, which
|
|
164
|
+
* tools clients see, consent defaults, OAuth and limits. Saves all fields in one request.
|
|
165
|
+
*/
|
|
166
|
+
export function McpAccessSettingsView({ onSaved }) {
|
|
167
|
+
const [data, setData] = useState(null);
|
|
168
|
+
const [draft, setDraft] = useState(null);
|
|
169
|
+
const [loadError, setLoadError] = useState(null);
|
|
170
|
+
const [saveError, setSaveError] = useState(null);
|
|
171
|
+
const [saving, setSaving] = useState(false);
|
|
172
|
+
const [toolFilter, setToolFilter] = useState("");
|
|
173
|
+
const load = useCallback(async () => {
|
|
174
|
+
setLoadError(null);
|
|
175
|
+
try {
|
|
176
|
+
const response = await mcpAccessService.getSettings();
|
|
177
|
+
setData(response);
|
|
178
|
+
setDraft(response.settings);
|
|
179
|
+
}
|
|
180
|
+
catch (e) {
|
|
181
|
+
setLoadError(getErrorMessage(e, "Failed to load the MCP settings"));
|
|
182
|
+
}
|
|
183
|
+
}, []);
|
|
184
|
+
useEffect(() => {
|
|
185
|
+
void load();
|
|
186
|
+
}, [load]);
|
|
187
|
+
const tree = useMemo(() => buildToolTree(data?.options?.tools ?? []), [data]);
|
|
188
|
+
if (loadError) {
|
|
189
|
+
return (_jsx(SettingsPanelLayout, { children: _jsxs("div", { className: "border-feedback-red bg-feedback-red-light text-feedback-red flex items-start gap-2 rounded border p-3 text-sm", children: [_jsx(AlertCircle, { className: "mt-0.5 h-4 w-4 shrink-0", strokeWidth: 1 }), _jsx("span", { children: loadError })] }) }));
|
|
190
|
+
}
|
|
191
|
+
if (!data || !draft) {
|
|
192
|
+
return _jsx(LoadingState, { variant: "inline", className: "justify-center py-8", spinnerClassName: "text-neutral-grey-50", spinnerSize: "lg" });
|
|
193
|
+
}
|
|
194
|
+
const saved = data.settings;
|
|
195
|
+
const dirty = !sameForm(draft, saved);
|
|
196
|
+
const set = (key, value) => setDraft((current) => (current ? { ...current, [key]: value } : current));
|
|
197
|
+
const save = async () => {
|
|
198
|
+
setSaving(true);
|
|
199
|
+
setSaveError(null);
|
|
200
|
+
try {
|
|
201
|
+
const next = await mcpAccessService.saveSettings(normalize(draft));
|
|
202
|
+
setData((current) => (current ? { ...current, settings: next } : current));
|
|
203
|
+
setDraft(next);
|
|
204
|
+
toast.success("MCP settings saved.");
|
|
205
|
+
onSaved();
|
|
206
|
+
}
|
|
207
|
+
catch (e) {
|
|
208
|
+
setSaveError(getErrorMessage(e, "Failed to save the MCP settings"));
|
|
209
|
+
}
|
|
210
|
+
finally {
|
|
211
|
+
setSaving(false);
|
|
212
|
+
}
|
|
213
|
+
};
|
|
214
|
+
const suggestedUrl = data.suggestedPublicBaseUrl ?? "";
|
|
215
|
+
const skills = data.options?.skills ?? [];
|
|
216
|
+
const toolCount = effectiveToolCount(tree, draft.toolIds);
|
|
217
|
+
const readOnlyCount = new Set(draft.readOnlyToolIds.flatMap((id) => descendantTools(tree, id).filter((tool) => tool.verifiedRead).map((tool) => tool.name))).size;
|
|
218
|
+
return (_jsxs(SettingsPanelLayout, { testId: "mcp-access-settings", contentClassName: "flex flex-col gap-4", children: [_jsxs("div", { className: cn("border-border-default bg-background sticky top-0 z-10 flex flex-wrap items-center gap-3 rounded border px-4 py-2", dirty && "border-highlight-100"), children: [_jsxs("div", { className: "text-neutral-grey-50 min-w-0 flex-1 text-xs", children: [dirty ? "You have unsaved changes." : "All changes saved.", data.itemPath && _jsx("span", { className: "ml-2 font-mono", children: data.itemPath })] }), _jsx(Button, { size: "sm", variant: "outline", disabled: !dirty || saving, onClick: () => setDraft(saved), "data-testid": "mcp-settings-discard", children: "Discard" }), _jsx(Button, { size: "sm", disabled: !dirty || saving, onClick: () => void save(), "data-testid": "mcp-settings-save", children: saving ? "Saving…" : "Save" }), saveError && (_jsx("div", { className: "text-feedback-red w-full text-xs", role: "alert", "data-testid": "mcp-settings-error", children: saveError }))] }), _jsx(Card, { icon: _jsx(Globe, { strokeWidth: 1 }), title: "Server", description: "Whether the MCP server runs, and the address clients use to reach it.", children: _jsxs("div", { className: "space-y-4", children: [_jsx(SwitchRow, { label: "Enabled", description: "Turns the MCP server on. It also needs the signing secret and at least one allowed role.", checked: draft.enabled, onChange: (value) => set("enabled", value), testId: "mcp-settings-enabled" }), _jsxs(FieldBlock, { label: "Public Base Url", description: "The public origin of this CM, e.g. https://cm.example.com. Required unless the server is only used on localhost.", children: [_jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [_jsx(Input, { value: draft.publicBaseUrl, onChange: (event) => set("publicBaseUrl", event.target.value), placeholder: "https://cm.example.com", "aria-label": "Public Base Url", className: "h-8 min-w-64 flex-1 text-xs md:text-xs", "data-testid": "mcp-settings-public-base-url" }), suggestedUrl && draft.publicBaseUrl.trim() !== suggestedUrl && (_jsxs(Button, { size: "sm", variant: "outline", onClick: () => set("publicBaseUrl", suggestedUrl), "data-testid": "mcp-settings-use-current-url", children: ["Use ", suggestedUrl] }))] }), !draft.publicBaseUrl.trim() && (_jsx("div", { className: "text-feedback-orange text-xs", children: "Empty: MCP clients can only connect on localhost." }))] }), _jsx(FieldBlock, { label: "Allowed Origins", description: "Browser origins allowed to call the MCP endpoint, one per line. Desktop clients need none.", children: _jsx(Textarea, { value: draft.allowedOrigins.join("\n"), onChange: (event) => set("allowedOrigins", event.target.value.split("\n")), placeholder: "https://claude.ai", className: "font-mono text-xs", "data-testid": "mcp-settings-allowed-origins" }) }), _jsx(FieldBlock, { label: "Instructions", description: "Sent to MCP clients when they connect. At most 4 KB.", children: _jsx(Textarea, { value: draft.instructions, onChange: (event) => set("instructions", event.target.value), className: "text-xs", "data-testid": "mcp-settings-instructions" }) })] }) }), _jsx(Card, { icon: _jsx(Users, { strokeWidth: 1 }), title: "Who can connect", description: "Users need one of these roles; administrators can always connect. Clients act with the user's own Sitecore permissions.", children: _jsxs("div", { className: "space-y-4", children: [_jsx(RoleList, { roles: draft.allowedRoles, availableRoles: data.options?.roles ?? [], onChange: (roles) => set("allowedRoles", roles) }), _jsx(SwitchRow, { label: "Exclude preview and demo users", description: "Sandbox, preview and demo accounts cannot connect even when they have an allowed role.", checked: draft.excludePreviewAndDemoUsers, onChange: (value) => set("excludePreviewAndDemoUsers", value), testId: "mcp-settings-exclude-demo" })] }) }), _jsx(Card, { icon: _jsx(Wrench, { strokeWidth: 1 }), title: "Tools", description: "What MCP clients may call. A folder includes every tool below it, also ones added later.", children: _jsxs("div", { className: "space-y-4", children: [_jsx(SearchInput, { value: toolFilter, onChange: setToolFilter, placeholder: "Filter tools", testId: "mcp-settings-tool-filter" }), _jsx(FieldBlock, { label: "Tools", description: `${toolCount} tool${toolCount === 1 ? "" : "s"} selected. Tools the MCP policy refuses are never exposed.`, children: _jsx(ToolTreeSelect, { tree: tree, selected: draft.toolIds, onChange: (ids) => set("toolIds", ids), filter: toolFilter, testId: "mcp-settings-tools" }) }), _jsx(FieldBlock, { label: "Read-only tools", description: `${readOnlyCount} verified read tool${readOnlyCount === 1 ? "" : "s"}. These count as reads, so clients with only the read scope may call them.`, children: _jsx(ToolTreeSelect, { tree: tree, selected: draft.readOnlyToolIds, onChange: (ids) => set("readOnlyToolIds", ids), filter: toolFilter, isSelectable: (node) => descendantTools(tree, node.id).some((tool) => tool.verifiedRead), testId: "mcp-settings-readonly-tools" }) }), _jsx(FieldBlock, { label: "Allowed skills", description: "Skills add their tools to the selection above (only when it is not empty).", children: _jsx(SkillList, { skills: skills, selected: draft.allowedSkillIds, onChange: (ids) => set("allowedSkillIds", ids) }) }), _jsx(SwitchRow, { label: "Allow changes (write scope)", description: "Clients may request permission to change content.", checked: draft.writeScopeEnabled, onChange: (value) => set("writeScopeEnabled", value), testId: "mcp-settings-write-scope" }), _jsx(SwitchRow, { label: "Allow agents (agents scope)", description: "Clients may start Parhelia agents, which cost AI budget.", checked: draft.agentsScopeEnabled, onChange: (value) => set("agentsScopeEnabled", value), testId: "mcp-settings-agents-scope" })] }) }), _jsx(Card, { icon: _jsx(ListChecks, { strokeWidth: 1 }), title: "Approval defaults", description: "What is pre-selected on the approval page when a user connects a client.", children: _jsxs("div", { className: "space-y-3", children: [_jsx(SwitchRow, { label: "Read", checked: draft.readChecked, onChange: (value) => set("readChecked", value), testId: "mcp-settings-read-checked" }), _jsx(SwitchRow, { label: "Change", checked: draft.writeChecked, onChange: (value) => set("writeChecked", value), testId: "mcp-settings-write-checked" }), _jsx(SwitchRow, { label: "Agents", checked: draft.agentsChecked, onChange: (value) => set("agentsChecked", value), testId: "mcp-settings-agents-checked" }), _jsx(SwitchRow, { label: "Ask before changes", description: "The client asks the user before each change.", checked: draft.askBeforeWritesDefault, onChange: (value) => set("askBeforeWritesDefault", value), testId: "mcp-settings-ask-before-writes" })] }) }), _jsx(Card, { icon: _jsx(ShieldCheck, { strokeWidth: 1 }), title: "Sign-in", description: "How MCP clients register and how long their tokens last.", children: _jsxs("div", { className: "space-y-3", children: [_jsx(SwitchRow, { label: "Client ID metadata documents (CIMD)", description: "Clients identify themselves with a URL. Claude Code uses this.", checked: draft.cimdEnabled, onChange: (value) => set("cimdEnabled", value), testId: "mcp-settings-cimd" }), _jsx(SwitchRow, { label: "Dynamic client registration (DCR)", description: "Clients may register themselves. Off unless a client needs it.", checked: draft.dcrEnabled, onChange: (value) => set("dcrEnabled", value), testId: "mcp-settings-dcr" }), _jsx(NumberInput, { label: "Access token lifetime (minutes)", value: draft.accessTokenLifetimeMinutes, onChange: (value) => set("accessTokenLifetimeMinutes", value), min: 5, max: 1440, testId: "mcp-settings-access-token-minutes" }), _jsx(NumberInput, { label: "Refresh token lifetime (days)", value: draft.refreshTokenLifetimeDays, onChange: (value) => set("refreshTokenLifetimeDays", value), min: 1, max: 365, testId: "mcp-settings-refresh-token-days" }), _jsx(FieldBlock, { label: "Signing secret connection string", description: "Name of the connection string that holds the signing secret (at least 16 characters). The secret itself never goes into an item.", children: _jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Input, { value: draft.signingSecretConnectionStringName, onChange: (event) => set("signingSecretConnectionStringName", event.target.value), "aria-label": "Signing secret connection string", className: "h-8 flex-1 font-mono text-xs md:text-xs", "data-testid": "mcp-settings-secret-name" }), _jsxs(Badge, { variant: saved.signingSecretFound ? "default" : "destructive", "data-testid": "mcp-settings-secret-status", children: [_jsx(KeyRound, { className: "h-3 w-3", strokeWidth: 1.5 }), saved.signingSecretFound ? "found" : "missing"] })] }) })] }) }), _jsx(Card, { icon: _jsx(Gauge, { strokeWidth: 1 }), title: "Limits", description: "Rate and cost limits that protect the CM.", children: _jsxs("div", { className: "space-y-3", children: [_jsx(NumberInput, { label: "Max agent cost limit", description: "Highest cost limit a client may set for an agent it starts.", value: draft.maxAgentCostLimit, onChange: (value) => set("maxAgentCostLimit", value), min: 0, max: 1000, step: 0.5, testId: "mcp-settings-max-cost" }), _jsx(NumberInput, { label: "Requests per minute per connection", value: draft.requestsPerMinutePerGrant, onChange: (value) => set("requestsPerMinutePerGrant", value), min: 1, max: 6000, testId: "mcp-settings-rpm" }), _jsx(NumberInput, { label: "Status polls per minute per connection", value: draft.statusPollsPerMinutePerGrant, onChange: (value) => set("statusPollsPerMinutePerGrant", value), min: 1, max: 600, testId: "mcp-settings-status-polls" }), _jsx(NumberInput, { label: "Anonymous requests per minute", description: "For all unauthenticated requests together (sign-in, discovery).", value: draft.globalAnonymousRequestsPerMinute, onChange: (value) => set("globalAnonymousRequestsPerMinute", value), min: 1, max: 60000, testId: "mcp-settings-anonymous-rpm" }), _jsx(NumberInput, { label: "Max dynamic clients", value: draft.maxDynamicClients, onChange: (value) => set("maxDynamicClients", value), min: 0, max: 100000, testId: "mcp-settings-max-dynamic-clients" })] }) })] }));
|
|
219
|
+
}
|
|
220
|
+
export default McpAccessSettingsView;
|
|
221
|
+
//# sourceMappingURL=McpAccessSettingsView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"McpAccessSettingsView.js","sourceRoot":"","sources":["../../../../src/editor/settings/panels/McpAccessSettingsView.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAC;AAClF,OAAO,EACL,WAAW,EACX,WAAW,EACX,YAAY,EACZ,MAAM,EACN,KAAK,EACL,KAAK,EACL,QAAQ,EACR,UAAU,EACV,WAAW,EACX,KAAK,EACL,MAAM,EACN,CAAC,GACF,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAE/B,OAAO,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAC3D,OAAO,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAC9D,OAAO,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAC;AACxC,OAAO,EACL,gBAAgB,GAKjB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,YAAY,IAAI,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAE7D,MAAM,eAAe,GAAG,CAAC,KAAc,EAAE,QAAgB,EAAE,EAAE,CAC3D,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC;AAEpD,MAAM,UAAU,GAAG,CAAC,MAAgB,EAAE,EAAE,CACtC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAE1E,oGAAoG;AACpG,SAAS,SAAS,CAAC,IAA2B;IAC5C,OAAO;QACL,GAAG,IAAI;QACP,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;QACxC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;QACtC,cAAc,EAAE,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC;QAC/C,YAAY,EAAE,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC;QAC3C,iCAAiC,EAAE,IAAI,CAAC,iCAAiC,CAAC,IAAI,EAAE;KACjF,CAAC;AACJ,CAAC;AAED,MAAM,QAAQ,GAAG,CAAC,CAAwB,EAAE,CAAwB,EAAE,EAAE,CACtE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAEhE,SAAS,UAAU,CAAC,EAClB,KAAK,EACL,WAAW,EACX,QAAQ,EACR,SAAS,GAMV;IACC,OAAO,CACL,eAAK,SAAS,EAAE,EAAE,CAAC,yCAAyC,EAAE,SAAS,CAAC,aACtE,eAAK,SAAS,EAAC,SAAS,aACtB,cAAK,SAAS,EAAC,2CAA2C,YAAE,KAAK,GAAO,EACvE,WAAW,IAAI,cAAK,SAAS,EAAC,qCAAqC,YAAE,WAAW,GAAO,IACpF,EACL,QAAQ,IACL,CACP,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,EACjB,KAAK,EACL,WAAW,EACX,OAAO,EACP,QAAQ,EACR,MAAM,GAOP;IACC,OAAO,CACL,KAAC,UAAU,IAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,YAChD,KAAC,MAAM,IAAC,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,gBAAc,KAAK,iBAAe,MAAM,GAAI,GACpF,CACd,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,EAClB,KAAK,EACL,WAAW,EACX,QAAQ,GAKT;IACC,OAAO,CACL,eAAK,SAAS,EAAC,aAAa,aAC1B,0BACE,cAAK,SAAS,EAAC,2CAA2C,YAAE,KAAK,GAAO,EACvE,WAAW,IAAI,cAAK,SAAS,EAAC,qCAAqC,YAAE,WAAW,GAAO,IACpF,EACL,QAAQ,IACL,CACP,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,EACnB,KAAK,EACL,WAAW,EACX,KAAK,EACL,QAAQ,EACR,GAAG,EACH,GAAG,EACH,IAAI,GAAG,CAAC,EACR,MAAM,GAUP;IACC,MAAM,OAAO,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,GAAG,IAAI,KAAK,GAAG,GAAG,CAAC;IACtE,OAAO,CACL,KAAC,UAAU,IAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,WAAW,GAAG,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC,WAAW,YACzF,KAAC,KAAK,IACJ,IAAI,EAAC,QAAQ,EACb,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,GAAG,EACR,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,kBAC5B,OAAO,gBACT,KAAK,EACjB,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAClG,SAAS,EAAC,iDAAiD,iBAC9C,MAAM,GACnB,GACS,CACd,CAAC;AACJ,CAAC;AAOD,SAAS,aAAa,CAAC,KAAsB;IAC3C,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IAC3D,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkC,CAAC;IAC3D,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QACrB,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;QAC/E,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AAC5B,CAAC;AAED,SAAS,WAAW,CAAC,IAAc,EAAE,EAAU;IAC7C,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,QAAQ,IAAI,IAAI,CAAC;IAClD,OAAO,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;QACzC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACrB,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,QAAQ,IAAI,IAAI,CAAC;IACrD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,eAAe,CAAC,IAAc,EAAE,EAAU;IACjD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC/B,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IACrB,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5C,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACvG,CAAC;AAED;;;GAGG;AACH,SAAS,cAAc,CAAC,EACtB,IAAI,EACJ,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,YAAY,GAAG,GAAG,EAAE,CAAC,IAAI,EACzB,MAAM,GAQP;IACC,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IACjE,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAc,GAAG,EAAE;QACzD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAClC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACxE,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC7F,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC3C,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE;QAC3B,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QACzB,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;QAC9B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACzB,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC,WAAW,IAAI,EAAE,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,YAAY,IAAI,EAAE,EAAE,CAAC,WAAW,EAAE,CAAC;YAC/F,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC1B,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACjB,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;YACtE,CAAC;QACH,CAAC,CAAC,CAAC;QACH,OAAO,GAAG,CAAC;IACb,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;IAEnB,MAAM,MAAM,GAAG,CAAC,IAAmB,EAAE,OAAgB,EAAE,EAAE;QACvD,IAAI,OAAO,EAAE,CAAC;YACZ,4CAA4C;YAC5C,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YAC7E,MAAM,OAAO,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;gBAC9E,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBACpB,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACpB,CAAC,CAAC,CAAC;YACH,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjB,QAAQ,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAClE,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACpD,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,UAAU,GAAG,CAAC,IAAmB,EAAE,KAAa,EAAE,kBAA2B,EAAa,EAAE;QAChG,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAAE,OAAO,IAAI,CAAC;QAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;QAClD,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;QACrC,MAAM,MAAM,GAAG,OAAO,KAAK,IAAI,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACzD,MAAM,SAAS,GAAG,kBAAkB,IAAI,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjE,MAAM,UAAU,GAAG,CAAC,kBAAkB,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;QAC7D,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,IAAI,CAAC;QAE5C,OAAO,CACL,yBACE,eACE,SAAS,EAAC,qEAAqE,EAC/E,KAAK,EAAE,EAAE,WAAW,EAAE,KAAK,GAAG,EAAE,EAAE,iBACrB,GAAG,MAAM,OAAO,kBACf,IAAI,CAAC,EAAE,aAEpB,QAAQ,CAAC,CAAC,CAAC,CACV,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,2FAA2F,gBACzF,MAAM,CAAC,CAAC,CAAC,YAAY,KAAK,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,EAAE,EAC5D,OAAO,EAAE,GAAG,EAAE,CACZ,WAAW,CAAC,CAAC,OAAO,EAAE,EAAE;gCACtB,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;gCAC9B,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;oCAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;;oCACvC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gCACvB,OAAO,IAAI,CAAC;4BACd,CAAC,CAAC,YAGH,MAAM,CAAC,CAAC,CAAC,KAAC,WAAW,IAAC,SAAS,EAAC,aAAa,EAAC,WAAW,EAAE,GAAG,GAAI,CAAC,CAAC,CAAC,KAAC,YAAY,IAAC,SAAS,EAAC,aAAa,EAAC,WAAW,EAAE,GAAG,GAAI,GACzH,CACV,CAAC,CAAC,CAAC,CACF,eAAM,SAAS,EAAC,SAAS,GAAG,CAC7B,EACD,KAAC,QAAQ,IACP,OAAO,EAAE,SAAS,EAClB,QAAQ,EAAE,CAAC,UAAU,EACrB,eAAe,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,KAAK,IAAI,CAAC,gBAC5C,KAAK,GACjB,EACD,QAAQ,IAAI,KAAC,MAAM,IAAC,SAAS,EAAC,2CAA2C,EAAC,WAAW,EAAE,GAAG,GAAI,EAC/F,eAAM,SAAS,EAAE,EAAE,CAAC,kBAAkB,EAAE,CAAC,UAAU,IAAI,CAAC,SAAS,IAAI,sBAAsB,CAAC,YAAG,KAAK,GAAQ,EAC3G,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,IAAI,IAAI,CACvD,eAAM,SAAS,EAAC,qDAAqD,YAAE,IAAI,CAAC,YAAY,GAAQ,CACjG,EACA,IAAI,CAAC,aAAa,IAAI,CACrB,KAAC,KAAK,IAAC,OAAO,EAAC,WAAW,EAAC,SAAS,EAAC,kBAAkB,gCAE/C,CACT,IACG,EACL,QAAQ,IAAI,MAAM,IAAI,CACrB,uBAAK,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC,GAAM,CAC5E,KA7CM,IAAI,CAAC,EAAE,CA8CX,CACN,CAAC;IACJ,CAAC,CAAC;IAEF,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5C,OAAO,CACL,aAAI,SAAS,EAAC,mEAAmE,iBAAc,MAAM,YAClG,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CACpB,aAAI,SAAS,EAAC,kCAAkC,gCAAqB,CACtE,CAAC,CAAC,CAAC,CACF,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAChD,GACE,CACN,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAc,EAAE,QAAkB;IAC5D,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CACtB,eAAe,CAAC,IAAI,EAAE,EAAE,CAAC;SACtB,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC;SACrC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAC3C,CAAC;IACF,OAAO,KAAK,CAAC,IAAI,CAAC;AACpB,CAAC;AAED,SAAS,QAAQ,CAAC,EAChB,KAAK,EACL,cAAc,EACd,QAAQ,GAKT;IACC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACzC,MAAM,GAAG,GAAG,CAAC,IAAY,EAAE,EAAE;QAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC,WAAW,EAAE,CAAC;YAAE,OAAO;QACrF,QAAQ,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;IAC5C,CAAC,CAAC;IACF,MAAM,OAAO,GAAG,cAAc;SAC3B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;SAC5E,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAEjD,OAAO,CACL,eAAK,SAAS,EAAC,WAAW,aACxB,cAAK,SAAS,EAAC,wBAAwB,iBAAa,oBAAoB,YACrE,UAAU,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAChC,eAAM,SAAS,EAAC,8BAA8B,iEAAwD,CACvG,CAAC,CAAC,CAAC,CACF,UAAU,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAC9B,gBAEE,SAAS,EAAC,gHAAgH,aAEzH,IAAI,EACL,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,kDAAkD,gBAChD,UAAU,IAAI,EAAE,EAC5B,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,YAExD,KAAC,CAAC,IAAC,SAAS,EAAC,SAAS,EAAC,WAAW,EAAE,GAAG,GAAI,GACpC,KAXJ,IAAI,CAYJ,CACR,CAAC,CACH,GACG,EACN,eAAK,SAAS,EAAC,mCAAmC,aAC/C,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CACrB,KAAC,MAAM,IACL,OAAO,EAAE,OAAO,EAChB,KAAK,EAAC,EAAE,EACR,aAAa,EAAE,GAAG,EAClB,WAAW,EAAC,YAAY,EACxB,SAAS,EAAC,MAAM,EAChB,UAAU,QACV,iBAAiB,EAAC,cAAc,iBACpB,0BAA0B,GACtC,CACH,EACD,gBACE,SAAS,EAAC,yBAAyB,EACnC,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;4BAClB,KAAK,CAAC,cAAc,EAAE,CAAC;4BACvB,GAAG,CAAC,MAAM,CAAC,CAAC;4BACZ,SAAS,CAAC,EAAE,CAAC,CAAC;wBAChB,CAAC,aAED,KAAC,KAAK,IACJ,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAClD,WAAW,EAAC,qBAAoB,gBACrB,WAAW,EACtB,SAAS,EAAC,6BAA6B,GACvC,EACF,KAAC,MAAM,IAAC,IAAI,EAAC,QAAQ,EAAC,IAAI,EAAC,IAAI,EAAC,OAAO,EAAC,SAAS,EAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,oBAEjE,IACJ,IACH,IACF,CACP,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,EACjB,MAAM,EACN,QAAQ,EACR,QAAQ,GAKT;IACC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,YAAG,SAAS,EAAC,8BAA8B,uCAA2B,CAAC;IACvG,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;IACtC,OAAO,CACL,aAAI,SAAS,EAAC,mEAAmE,iBAAa,qBAAqB,YAChH,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CACrB,cAAmB,SAAS,EAAC,kEAAkE,aAC7F,KAAC,QAAQ,IACP,SAAS,EAAC,QAAQ,EAClB,OAAO,EAAE,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAClC,eAAe,EAAE,CAAC,KAAK,EAAE,EAAE,CACzB,QAAQ,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE,CAAC,CAAC,gBAEnF,KAAK,CAAC,IAAI,GACtB,EACF,eAAK,SAAS,EAAC,SAAS,aACtB,eAAK,SAAS,EAAC,iCAAiC,aAC9C,eAAM,SAAS,EAAC,UAAU,YAAE,KAAK,CAAC,IAAI,GAAQ,EAC7C,KAAK,CAAC,QAAQ,IAAI,KAAC,KAAK,IAAC,OAAO,EAAC,WAAW,yBAAiB,IAC1D,EACL,KAAK,CAAC,WAAW,IAAI,cAAK,SAAS,EAAC,uCAAuC,YAAE,KAAK,CAAC,WAAW,GAAO,IAClG,KAfC,KAAK,CAAC,EAAE,CAgBZ,CACN,CAAC,GACC,CACN,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,EAAE,OAAO,EAA2B;IACxE,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAmC,IAAI,CAAC,CAAC;IACzE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAA+B,IAAI,CAAC,CAAC;IACvE,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAChE,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAChE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC5C,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAEjD,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QAClC,YAAY,CAAC,IAAI,CAAC,CAAC;QACnB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,WAAW,EAAE,CAAC;YACtD,OAAO,CAAC,QAAQ,CAAC,CAAC;YAClB,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC9B,CAAC;QAAC,OAAO,CAAU,EAAE,CAAC;YACpB,YAAY,CAAC,eAAe,CAAC,CAAC,EAAE,iCAAiC,CAAC,CAAC,CAAC;QACtE,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,SAAS,CAAC,GAAG,EAAE;QACb,KAAK,IAAI,EAAE,CAAC;IACd,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAEX,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAE9E,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,CACL,KAAC,mBAAmB,cAClB,eAAK,SAAS,EAAC,+GAA+G,aAC5H,KAAC,WAAW,IAAC,SAAS,EAAC,yBAAyB,EAAC,WAAW,EAAE,CAAC,GAAI,EACnE,yBAAO,SAAS,GAAQ,IACpB,GACc,CACvB,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACpB,OAAO,KAAC,YAAY,IAAC,OAAO,EAAC,QAAQ,EAAC,SAAS,EAAC,qBAAqB,EAAC,gBAAgB,EAAC,sBAAsB,EAAC,WAAW,EAAC,IAAI,GAAG,CAAC;IACpI,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC;IAC5B,MAAM,KAAK,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACtC,MAAM,GAAG,GAAG,CAAwC,GAAM,EAAE,KAA+B,EAAE,EAAE,CAC7F,QAAQ,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IAE5E,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE;QACtB,SAAS,CAAC,IAAI,CAAC,CAAC;QAChB,YAAY,CAAC,IAAI,CAAC,CAAC;QACnB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;YACnE,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;YAC3E,QAAQ,CAAC,IAAI,CAAC,CAAC;YACf,KAAK,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;YACrC,OAAO,EAAE,CAAC;QACZ,CAAC;QAAC,OAAO,CAAU,EAAE,CAAC;YACpB,YAAY,CAAC,eAAe,CAAC,CAAC,EAAE,iCAAiC,CAAC,CAAC,CAAC;QACtE,CAAC;gBAAS,CAAC;YACT,SAAS,CAAC,KAAK,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,IAAI,CAAC,sBAAsB,IAAI,EAAE,CAAC;IACvD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,IAAI,EAAE,CAAC;IAC1C,MAAM,SAAS,GAAG,kBAAkB,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IAC1D,MAAM,aAAa,GAAG,IAAI,GAAG,CAC3B,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAC9H,CAAC,IAAI,CAAC;IAEP,OAAO,CACL,MAAC,mBAAmB,IAAC,MAAM,EAAC,qBAAqB,EAAC,gBAAgB,EAAC,qBAAqB,aACtF,eACE,SAAS,EAAE,EAAE,CACX,kHAAkH,EAClH,KAAK,IAAI,sBAAsB,CAChC,aAED,eAAK,SAAS,EAAC,6CAA6C,aACzD,KAAK,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,oBAAoB,EAC1D,IAAI,CAAC,QAAQ,IAAI,eAAM,SAAS,EAAC,gBAAgB,YAAE,IAAI,CAAC,QAAQ,GAAQ,IACrE,EACN,KAAC,MAAM,IAAC,IAAI,EAAC,IAAI,EAAC,OAAO,EAAC,SAAS,EAAC,QAAQ,EAAE,CAAC,KAAK,IAAI,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,iBAAc,sBAAsB,wBAEzH,EACT,KAAC,MAAM,IAAC,IAAI,EAAC,IAAI,EAAC,QAAQ,EAAE,CAAC,KAAK,IAAI,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,IAAI,EAAE,iBAAc,mBAAmB,YACtG,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,GACrB,EACR,SAAS,IAAI,CACZ,cAAK,SAAS,EAAC,kCAAkC,EAAC,IAAI,EAAC,OAAO,iBAAa,oBAAoB,YAC5F,SAAS,GACN,CACP,IACG,EAEN,KAAC,IAAI,IAAC,IAAI,EAAE,KAAC,KAAK,IAAC,WAAW,EAAE,CAAC,GAAI,EAAE,KAAK,EAAC,QAAQ,EAAC,WAAW,EAAC,uEAAuE,YACvI,eAAK,SAAS,EAAC,WAAW,aACxB,KAAC,SAAS,IACR,KAAK,EAAC,SAAS,EACf,WAAW,EAAC,0FAA0F,EACtG,OAAO,EAAE,KAAK,CAAC,OAAO,EACtB,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,EAC1C,MAAM,EAAC,sBAAsB,GAC7B,EACF,MAAC,UAAU,IACT,KAAK,EAAC,iBAAiB,EACvB,WAAW,EAAC,kHAAkH,aAE9H,eAAK,SAAS,EAAC,mCAAmC,aAChD,KAAC,KAAK,IACJ,KAAK,EAAE,KAAK,CAAC,aAAa,EAC1B,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAC7D,WAAW,EAAC,wBAAwB,gBACzB,iBAAiB,EAC5B,SAAS,EAAC,wCAAwC,iBACtC,8BAA8B,GAC1C,EACD,YAAY,IAAI,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,KAAK,YAAY,IAAI,CAC9D,MAAC,MAAM,IAAC,IAAI,EAAC,IAAI,EAAC,OAAO,EAAC,SAAS,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,eAAe,EAAE,YAAY,CAAC,iBAAc,8BAA8B,qBAC1H,YAAY,IACV,CACV,IACG,EACL,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAC9B,cAAK,SAAS,EAAC,8BAA8B,kEAAwD,CACtG,IACU,EACb,KAAC,UAAU,IAAC,KAAK,EAAC,iBAAiB,EAAC,WAAW,EAAC,4FAA4F,YAC1I,KAAC,QAAQ,IACP,KAAK,EAAE,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EACtC,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,gBAAgB,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAC1E,WAAW,EAAC,mBAAmB,EAC/B,SAAS,EAAC,mBAAmB,iBACjB,8BAA8B,GAC1C,GACS,EACb,KAAC,UAAU,IAAC,KAAK,EAAC,cAAc,EAAC,WAAW,EAAC,sDAAsD,YACjG,KAAC,QAAQ,IACP,KAAK,EAAE,KAAK,CAAC,YAAY,EACzB,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,cAAc,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAC5D,SAAS,EAAC,SAAS,iBACP,2BAA2B,GACvC,GACS,IACT,GACD,EAEP,KAAC,IAAI,IAAC,IAAI,EAAE,KAAC,KAAK,IAAC,WAAW,EAAE,CAAC,GAAI,EAAE,KAAK,EAAC,iBAAiB,EAAC,WAAW,EAAC,yHAAyH,YAClM,eAAK,SAAS,EAAC,WAAW,aACxB,KAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,CAAC,YAAY,EAAE,cAAc,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,cAAc,EAAE,KAAK,CAAC,GAAI,EACnI,KAAC,SAAS,IACR,KAAK,EAAC,gCAAgC,EACtC,WAAW,EAAC,wFAAwF,EACpG,OAAO,EAAE,KAAK,CAAC,0BAA0B,EACzC,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,4BAA4B,EAAE,KAAK,CAAC,EAC7D,MAAM,EAAC,2BAA2B,GAClC,IACE,GACD,EAEP,KAAC,IAAI,IACH,IAAI,EAAE,KAAC,MAAM,IAAC,WAAW,EAAE,CAAC,GAAI,EAChC,KAAK,EAAC,OAAO,EACb,WAAW,EAAC,0FAA0F,YAEtG,eAAK,SAAS,EAAC,WAAW,aACxB,KAAC,WAAW,IAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,aAAa,EAAE,WAAW,EAAC,cAAc,EAAC,MAAM,EAAC,0BAA0B,GAAG,EACxH,KAAC,UAAU,IAAC,KAAK,EAAC,OAAO,EAAC,WAAW,EAAE,GAAG,SAAS,QAAQ,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,4DAA4D,YAC/I,KAAC,cAAc,IACb,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,KAAK,CAAC,OAAO,EACvB,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,EACtC,MAAM,EAAE,UAAU,EAClB,MAAM,EAAC,oBAAoB,GAC3B,GACS,EACb,KAAC,UAAU,IACT,KAAK,EAAC,iBAAiB,EACvB,WAAW,EAAE,GAAG,aAAa,sBAAsB,aAAa,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,4EAA4E,YAE7J,KAAC,cAAc,IACb,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,KAAK,CAAC,eAAe,EAC/B,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,iBAAiB,EAAE,GAAG,CAAC,EAC9C,MAAM,EAAE,UAAU,EAClB,YAAY,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,EACxF,MAAM,EAAC,6BAA6B,GACpC,GACS,EACb,KAAC,UAAU,IAAC,KAAK,EAAC,gBAAgB,EAAC,WAAW,EAAC,4EAA4E,YACzH,KAAC,SAAS,IAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,eAAe,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,iBAAiB,EAAE,GAAG,CAAC,GAAI,GACnG,EACb,KAAC,SAAS,IACR,KAAK,EAAC,6BAA6B,EACnC,WAAW,EAAC,mDAAmD,EAC/D,OAAO,EAAE,KAAK,CAAC,iBAAiB,EAChC,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,mBAAmB,EAAE,KAAK,CAAC,EACpD,MAAM,EAAC,0BAA0B,GACjC,EACF,KAAC,SAAS,IACR,KAAK,EAAC,6BAA6B,EACnC,WAAW,EAAC,0DAA0D,EACtE,OAAO,EAAE,KAAK,CAAC,kBAAkB,EACjC,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,oBAAoB,EAAE,KAAK,CAAC,EACrD,MAAM,EAAC,2BAA2B,GAClC,IACE,GACD,EAEP,KAAC,IAAI,IAAC,IAAI,EAAE,KAAC,UAAU,IAAC,WAAW,EAAE,CAAC,GAAI,EAAE,KAAK,EAAC,mBAAmB,EAAC,WAAW,EAAC,0EAA0E,YAC1J,eAAK,SAAS,EAAC,WAAW,aACxB,KAAC,SAAS,IAAC,KAAK,EAAC,MAAM,EAAC,OAAO,EAAE,KAAK,CAAC,WAAW,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,aAAa,EAAE,KAAK,CAAC,EAAE,MAAM,EAAC,2BAA2B,GAAG,EACzI,KAAC,SAAS,IAAC,KAAK,EAAC,QAAQ,EAAC,OAAO,EAAE,KAAK,CAAC,YAAY,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,cAAc,EAAE,KAAK,CAAC,EAAE,MAAM,EAAC,4BAA4B,GAAG,EAC9I,KAAC,SAAS,IAAC,KAAK,EAAC,QAAQ,EAAC,OAAO,EAAE,KAAK,CAAC,aAAa,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,CAAC,EAAE,MAAM,EAAC,6BAA6B,GAAG,EACjJ,KAAC,SAAS,IACR,KAAK,EAAC,oBAAoB,EAC1B,WAAW,EAAC,8CAA8C,EAC1D,OAAO,EAAE,KAAK,CAAC,sBAAsB,EACrC,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,wBAAwB,EAAE,KAAK,CAAC,EACzD,MAAM,EAAC,gCAAgC,GACvC,IACE,GACD,EAEP,KAAC,IAAI,IAAC,IAAI,EAAE,KAAC,WAAW,IAAC,WAAW,EAAE,CAAC,GAAI,EAAE,KAAK,EAAC,SAAS,EAAC,WAAW,EAAC,0DAA0D,YACjI,eAAK,SAAS,EAAC,WAAW,aACxB,KAAC,SAAS,IACR,KAAK,EAAC,qCAAqC,EAC3C,WAAW,EAAC,gEAAgE,EAC5E,OAAO,EAAE,KAAK,CAAC,WAAW,EAC1B,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,aAAa,EAAE,KAAK,CAAC,EAC9C,MAAM,EAAC,mBAAmB,GAC1B,EACF,KAAC,SAAS,IACR,KAAK,EAAC,mCAAmC,EACzC,WAAW,EAAC,gEAAgE,EAC5E,OAAO,EAAE,KAAK,CAAC,UAAU,EACzB,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,YAAY,EAAE,KAAK,CAAC,EAC7C,MAAM,EAAC,kBAAkB,GACzB,EACF,KAAC,WAAW,IAAC,KAAK,EAAC,iCAAiC,EAAC,KAAK,EAAE,KAAK,CAAC,0BAA0B,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,4BAA4B,EAAE,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAC,mCAAmC,GAAG,EAC7N,KAAC,WAAW,IAAC,KAAK,EAAC,+BAA+B,EAAC,KAAK,EAAE,KAAK,CAAC,wBAAwB,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,0BAA0B,EAAE,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAC,iCAAiC,GAAG,EACpN,KAAC,UAAU,IACT,KAAK,EAAC,kCAAkC,EACxC,WAAW,EAAC,kIAAkI,YAE9I,eAAK,SAAS,EAAC,yBAAyB,aACtC,KAAC,KAAK,IACJ,KAAK,EAAE,KAAK,CAAC,iCAAiC,EAC9C,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,mCAAmC,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,gBACtE,kCAAkC,EAC7C,SAAS,EAAC,yCAAyC,iBACvC,0BAA0B,GACtC,EACF,MAAC,KAAK,IAAC,OAAO,EAAE,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,iBAAc,4BAA4B,aAC5G,KAAC,QAAQ,IAAC,SAAS,EAAC,SAAS,EAAC,WAAW,EAAE,GAAG,GAAI,EACjD,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,IACzC,IACJ,GACK,IACT,GACD,EAEP,KAAC,IAAI,IAAC,IAAI,EAAE,KAAC,KAAK,IAAC,WAAW,EAAE,CAAC,GAAI,EAAE,KAAK,EAAC,QAAQ,EAAC,WAAW,EAAC,2CAA2C,YAC3G,eAAK,SAAS,EAAC,WAAW,aACxB,KAAC,WAAW,IAAC,KAAK,EAAC,sBAAsB,EAAC,WAAW,EAAC,6DAA6D,EAAC,KAAK,EAAE,KAAK,CAAC,iBAAiB,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,mBAAmB,EAAE,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAC,uBAAuB,GAAG,EACzQ,KAAC,WAAW,IAAC,KAAK,EAAC,oCAAoC,EAAC,KAAK,EAAE,KAAK,CAAC,yBAAyB,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,2BAA2B,EAAE,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAC,kBAAkB,GAAG,EAC7M,KAAC,WAAW,IAAC,KAAK,EAAC,wCAAwC,EAAC,KAAK,EAAE,KAAK,CAAC,4BAA4B,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,8BAA8B,EAAE,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAC,2BAA2B,GAAG,EAC/N,KAAC,WAAW,IAAC,KAAK,EAAC,+BAA+B,EAAC,WAAW,EAAC,iEAAiE,EAAC,KAAK,EAAE,KAAK,CAAC,gCAAgC,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,kCAAkC,EAAE,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAC,4BAA4B,GAAG,EAC/S,KAAC,WAAW,IAAC,KAAK,EAAC,qBAAqB,EAAC,KAAK,EAAE,KAAK,CAAC,iBAAiB,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,mBAAmB,EAAE,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAC,kCAAkC,GAAG,IAC5L,GACD,IACa,CACvB,CAAC;AACJ,CAAC;AAED,eAAe,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { SpellCheckDictionaryStatus } from "../../spellcheck/spellCheckTypes";
|
|
2
|
+
/**
|
|
3
|
+
* Mirrors the server's language → dictionary resolution so the panel can show
|
|
4
|
+
* which site languages a dictionary serves.
|
|
5
|
+
*/
|
|
6
|
+
export declare function resolveDictionaryIdForLanguage(language: string, dictionaries: Pick<SpellCheckDictionaryStatus, "id" | "language" | "isDefaultForLanguage">[]): string | undefined;
|
|
7
|
+
export declare function SpellCheckPanel(): import("react").JSX.Element;
|
|
8
|
+
export default SpellCheckPanel;
|
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback, useEffect, useMemo, useState } from "react";
|
|
3
|
+
import { BookOpen, Download, HardDriveDownload, RefreshCw, SpellCheck } from "lucide-react";
|
|
4
|
+
import { toast } from "sonner";
|
|
5
|
+
import { Badge } from "../../../components/ui/badge";
|
|
6
|
+
import { Button } from "../../../components/ui/button";
|
|
7
|
+
import { DeleteButton } from "../../../components/ui/delete-button";
|
|
8
|
+
import { Input } from "../../../components/ui/input";
|
|
9
|
+
import { Select } from "../../../components/ui/select";
|
|
10
|
+
import { SearchInput } from "../../../components/SearchInput";
|
|
11
|
+
import { useEditContext } from "../../client/editContext";
|
|
12
|
+
import { getLanguages } from "../../services/contentService";
|
|
13
|
+
import { addCustomWord, downloadDictionary, getCustomWords, getSpellCheckStatus, reloadDictionaries, removeCustomWord, } from "../../services/spellCheckService";
|
|
14
|
+
import { spellCheckClient } from "../../spellcheck/spellCheckClient";
|
|
15
|
+
import { SimpleTable } from "../../ui/SimpleTable";
|
|
16
|
+
import { SettingsCard } from "../SettingsCard";
|
|
17
|
+
import { useRequiredSettingsHeaderActions } from "../SettingsHeaderActionsContext";
|
|
18
|
+
import { SettingsPanelLayout } from "../SettingsPanelLayout";
|
|
19
|
+
const POLL_INTERVAL_MS = 5_000;
|
|
20
|
+
/**
|
|
21
|
+
* Mirrors the server's language → dictionary resolution so the panel can show
|
|
22
|
+
* which site languages a dictionary serves.
|
|
23
|
+
*/
|
|
24
|
+
export function resolveDictionaryIdForLanguage(language, dictionaries) {
|
|
25
|
+
const parts = language.trim().replace(/_/g, "-").split("-").filter(Boolean);
|
|
26
|
+
if (parts.length === 0)
|
|
27
|
+
return undefined;
|
|
28
|
+
const code = parts[0].toLowerCase();
|
|
29
|
+
const last = parts[parts.length - 1];
|
|
30
|
+
if (parts.length > 1 && /^[A-Za-z]{2}$/.test(last)) {
|
|
31
|
+
const exact = dictionaries.find((d) => d.id.toLowerCase() === `${code}_${last.toLowerCase()}`);
|
|
32
|
+
if (exact)
|
|
33
|
+
return exact.id;
|
|
34
|
+
}
|
|
35
|
+
return dictionaries.find((d) => d.isDefaultForLanguage && d.language === code)?.id;
|
|
36
|
+
}
|
|
37
|
+
const STATUS_LABELS = {
|
|
38
|
+
available: "Ready",
|
|
39
|
+
downloading: "Downloading",
|
|
40
|
+
missing: "Not downloaded",
|
|
41
|
+
failed: "Failed",
|
|
42
|
+
disabled: "Disabled",
|
|
43
|
+
unsupported: "Unsupported",
|
|
44
|
+
};
|
|
45
|
+
function statusVariant(status) {
|
|
46
|
+
switch (status) {
|
|
47
|
+
case "available":
|
|
48
|
+
return "default";
|
|
49
|
+
case "failed":
|
|
50
|
+
return "destructive";
|
|
51
|
+
case "downloading":
|
|
52
|
+
return "outline";
|
|
53
|
+
default:
|
|
54
|
+
return "secondary";
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
function formatDate(value) {
|
|
58
|
+
if (!value)
|
|
59
|
+
return "";
|
|
60
|
+
const date = new Date(value);
|
|
61
|
+
return Number.isNaN(date.getTime()) ? "" : date.toLocaleString();
|
|
62
|
+
}
|
|
63
|
+
export function SpellCheckPanel() {
|
|
64
|
+
const editContext = useEditContext();
|
|
65
|
+
const isAdmin = editContext?.userInfo?.user?.isAdministrator ?? false;
|
|
66
|
+
const setHeaderActions = useRequiredSettingsHeaderActions();
|
|
67
|
+
const [status, setStatus] = useState();
|
|
68
|
+
const [languages, setLanguages] = useState([]);
|
|
69
|
+
const [error, setError] = useState();
|
|
70
|
+
const [busy, setBusy] = useState([]);
|
|
71
|
+
const [reloading, setReloading] = useState(false);
|
|
72
|
+
const [selectedDictionary, setSelectedDictionary] = useState();
|
|
73
|
+
const [words, setWords] = useState([]);
|
|
74
|
+
const [wordsLoading, setWordsLoading] = useState(false);
|
|
75
|
+
const [filter, setFilter] = useState("");
|
|
76
|
+
const [newWord, setNewWord] = useState("");
|
|
77
|
+
const [adding, setAdding] = useState(false);
|
|
78
|
+
const load = useCallback(async () => {
|
|
79
|
+
setError(undefined);
|
|
80
|
+
const [statusResult, languagesResult] = await Promise.all([
|
|
81
|
+
getSpellCheckStatus(),
|
|
82
|
+
getLanguages(),
|
|
83
|
+
]);
|
|
84
|
+
if (statusResult.type === "success" && statusResult.data) {
|
|
85
|
+
setStatus(statusResult.data);
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
setError(statusResult.summary || statusResult.details || "Failed to load the spell-check status.");
|
|
89
|
+
}
|
|
90
|
+
if (languagesResult.type === "success" && languagesResult.data) {
|
|
91
|
+
setLanguages(languagesResult.data);
|
|
92
|
+
}
|
|
93
|
+
}, []);
|
|
94
|
+
useEffect(() => {
|
|
95
|
+
void load();
|
|
96
|
+
}, [load]);
|
|
97
|
+
const dictionaries = useMemo(() => status?.dictionaries ?? [], [status]);
|
|
98
|
+
const downloading = dictionaries.some((d) => d.status === "downloading");
|
|
99
|
+
// Poll while a download is in progress so the row flips to Ready by itself.
|
|
100
|
+
useEffect(() => {
|
|
101
|
+
if (!downloading)
|
|
102
|
+
return;
|
|
103
|
+
const timer = window.setInterval(() => void load(), POLL_INTERVAL_MS);
|
|
104
|
+
return () => window.clearInterval(timer);
|
|
105
|
+
}, [downloading, load]);
|
|
106
|
+
const languagesByDictionary = useMemo(() => {
|
|
107
|
+
const map = new Map();
|
|
108
|
+
languages.forEach((language) => {
|
|
109
|
+
const id = resolveDictionaryIdForLanguage(language.name, dictionaries);
|
|
110
|
+
if (!id)
|
|
111
|
+
return;
|
|
112
|
+
map.set(id, [...(map.get(id) ?? []), language.name]);
|
|
113
|
+
});
|
|
114
|
+
return map;
|
|
115
|
+
}, [languages, dictionaries]);
|
|
116
|
+
const dictionaryOptions = useMemo(() => dictionaries.map((dictionary) => ({
|
|
117
|
+
value: dictionary.id,
|
|
118
|
+
label: dictionary.id.replace("_", "-"),
|
|
119
|
+
description: (languagesByDictionary.get(dictionary.id) ?? []).join(", ") || undefined,
|
|
120
|
+
})), [dictionaries, languagesByDictionary]);
|
|
121
|
+
useEffect(() => {
|
|
122
|
+
if (selectedDictionary || dictionaries.length === 0)
|
|
123
|
+
return;
|
|
124
|
+
const preferred = dictionaries.find((d) => (languagesByDictionary.get(d.id) ?? []).length > 0) ??
|
|
125
|
+
dictionaries[0];
|
|
126
|
+
setSelectedDictionary(preferred?.id);
|
|
127
|
+
}, [dictionaries, languagesByDictionary, selectedDictionary]);
|
|
128
|
+
const loadWords = useCallback(async (dictionaryId) => {
|
|
129
|
+
setWordsLoading(true);
|
|
130
|
+
const result = await getCustomWords(dictionaryId);
|
|
131
|
+
setWordsLoading(false);
|
|
132
|
+
if (result.type === "success" && result.data) {
|
|
133
|
+
setWords(result.data.words);
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
toast.error(result.summary || "Failed to load the custom words.");
|
|
137
|
+
}
|
|
138
|
+
}, []);
|
|
139
|
+
useEffect(() => {
|
|
140
|
+
if (selectedDictionary)
|
|
141
|
+
void loadWords(selectedDictionary);
|
|
142
|
+
}, [selectedDictionary, loadWords]);
|
|
143
|
+
const download = async (dictionary, force) => {
|
|
144
|
+
setBusy((current) => [...current, dictionary.id]);
|
|
145
|
+
const result = await downloadDictionary(dictionary.id, force);
|
|
146
|
+
setBusy((current) => current.filter((id) => id !== dictionary.id));
|
|
147
|
+
if (result.type === "success" && result.data) {
|
|
148
|
+
if (result.data.status === "available") {
|
|
149
|
+
toast.success(`Dictionary ${dictionary.id} is ready.`);
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
toast.error(result.data.lastError || `Dictionary ${dictionary.id} is ${STATUS_LABELS[result.data.status]}.`);
|
|
153
|
+
}
|
|
154
|
+
spellCheckClient.invalidateDictionary(dictionary.id);
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
toast.error(result.summary || `Could not download ${dictionary.id}.`);
|
|
158
|
+
}
|
|
159
|
+
await load();
|
|
160
|
+
};
|
|
161
|
+
const reload = async () => {
|
|
162
|
+
setReloading(true);
|
|
163
|
+
const result = await reloadDictionaries();
|
|
164
|
+
setReloading(false);
|
|
165
|
+
if (result.type === "success" && result.data) {
|
|
166
|
+
setStatus(result.data);
|
|
167
|
+
result.data.dictionaries.forEach((d) => spellCheckClient.invalidateDictionary(d.id));
|
|
168
|
+
toast.success("Dictionaries reloaded from disk.");
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
toast.error(result.summary || "Could not reload the dictionaries.");
|
|
172
|
+
}
|
|
173
|
+
};
|
|
174
|
+
const addWord = async () => {
|
|
175
|
+
if (!selectedDictionary || !newWord.trim())
|
|
176
|
+
return;
|
|
177
|
+
setAdding(true);
|
|
178
|
+
const result = await addCustomWord(selectedDictionary, newWord.trim());
|
|
179
|
+
setAdding(false);
|
|
180
|
+
const response = result.type === "success" ? result.data : undefined;
|
|
181
|
+
if (response?.success) {
|
|
182
|
+
toast.success(`"${response.word ?? newWord.trim()}" was added.`);
|
|
183
|
+
setNewWord("");
|
|
184
|
+
spellCheckClient.invalidateDictionary(response.dictionaryId ?? selectedDictionary);
|
|
185
|
+
await Promise.all([loadWords(selectedDictionary), load()]);
|
|
186
|
+
}
|
|
187
|
+
else {
|
|
188
|
+
toast.error(response?.message ?? result.summary ?? "The word could not be added.");
|
|
189
|
+
}
|
|
190
|
+
};
|
|
191
|
+
const removeWord = async (word) => {
|
|
192
|
+
if (!selectedDictionary)
|
|
193
|
+
return;
|
|
194
|
+
const result = await removeCustomWord(selectedDictionary, word.word);
|
|
195
|
+
const response = result.type === "success" ? result.data : undefined;
|
|
196
|
+
if (response?.success) {
|
|
197
|
+
spellCheckClient.invalidateDictionary(response.dictionaryId ?? selectedDictionary);
|
|
198
|
+
await Promise.all([loadWords(selectedDictionary), load()]);
|
|
199
|
+
}
|
|
200
|
+
else {
|
|
201
|
+
toast.error(response?.message ?? result.summary ?? "The word could not be removed.");
|
|
202
|
+
}
|
|
203
|
+
};
|
|
204
|
+
const headerActions = useMemo(() => (_jsxs("div", { className: "flex items-center gap-2", children: [isAdmin && (_jsxs(Button, { size: "sm", variant: "outline", "data-testid": "spell-check-reload", disabled: reloading, onClick: () => void reload(), children: [_jsx(HardDriveDownload, { className: "h-4 w-4", strokeWidth: 1 }), "Reload from disk"] })), _jsxs(Button, { size: "sm", variant: "outline", "data-testid": "spell-check-refresh", onClick: () => void load(), children: [_jsx(RefreshCw, { className: "h-4 w-4", strokeWidth: 1 }), "Refresh"] })] })),
|
|
205
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
206
|
+
[isAdmin, reloading, load]);
|
|
207
|
+
useEffect(() => {
|
|
208
|
+
setHeaderActions(headerActions);
|
|
209
|
+
return () => setHeaderActions(null);
|
|
210
|
+
}, [headerActions, setHeaderActions]);
|
|
211
|
+
const filteredWords = useMemo(() => {
|
|
212
|
+
const needle = filter.trim().toLowerCase();
|
|
213
|
+
return needle ? words.filter((w) => w.word.toLowerCase().includes(needle)) : words;
|
|
214
|
+
}, [words, filter]);
|
|
215
|
+
return (_jsxs(SettingsPanelLayout, { testId: "spell-check-panel", contentClassName: "flex flex-col gap-4", children: [_jsxs(SettingsCard, { icon: _jsx(SpellCheck, { strokeWidth: 1, className: "h-5 w-5" }), title: "Dictionaries", description: "Hunspell dictionaries are downloaded on demand into the data folder and keep their own license files. They are never part of the Parhelia package.", children: [status && !status.enabled && (_jsx("div", { className: "text-feedback-orange mb-3 text-xs", children: "Spell checking is disabled by configuration (Parhelia.SpellCheck.Enabled)." })), status && (_jsxs("div", { className: "text-neutral-grey-50 mb-3 text-xs", children: ["Source: ", status.dictionaryBaseUrl ?? "downloads disabled", status.dictionaryFolder ? ` · Folder: ${status.dictionaryFolder}` : ""] })), error && (_jsx("div", { className: "text-feedback-red mb-3 text-xs", role: "alert", children: error })), _jsx(SimpleTable, { "data-testid": "spell-check-dictionaries", items: dictionaries, rowKey: (d) => d.id, rowTestId: (d) => `spell-check-dictionary-${d.id}`, columns: [
|
|
216
|
+
{
|
|
217
|
+
header: "Dictionary",
|
|
218
|
+
body: (d) => (_jsxs("div", { children: [_jsx("div", { className: "text-neutral-grey-100 text-xs font-medium", children: d.id.replace("_", "-") }), _jsx("div", { className: "text-neutral-grey-50 text-2xs", children: (languagesByDictionary.get(d.id) ?? []).join(", ") || "not used by a site language" })] })),
|
|
219
|
+
},
|
|
220
|
+
{
|
|
221
|
+
header: "Status",
|
|
222
|
+
body: (d) => (_jsxs("div", { className: "flex flex-col gap-1", children: [_jsx(Badge, { variant: statusVariant(d.status), "data-testid": `spell-check-status-${d.id}`, children: STATUS_LABELS[d.status] }), d.status === "failed" && d.lastError && (_jsx("span", { className: "text-feedback-red text-2xs", title: d.lastError, children: d.lastError }))] })),
|
|
223
|
+
},
|
|
224
|
+
{
|
|
225
|
+
header: "Installed",
|
|
226
|
+
body: (d) => d.installId ? (_jsxs("div", { className: "text-neutral-grey-50 text-2xs", children: [_jsx("div", { children: formatDate(d.downloadedUtc) }), _jsxs("div", { title: d.installId, children: ["ref ", d.sourceRef?.slice(0, 10) ?? "?"] })] })) : null,
|
|
227
|
+
},
|
|
228
|
+
{
|
|
229
|
+
header: "Custom words",
|
|
230
|
+
align: "right",
|
|
231
|
+
body: (d) => _jsx("span", { className: "text-xs", children: d.customWordCount }),
|
|
232
|
+
},
|
|
233
|
+
{
|
|
234
|
+
header: "",
|
|
235
|
+
align: "right",
|
|
236
|
+
body: (d) => isAdmin ? (_jsxs(Button, { size: "xs", variant: "outline", "data-testid": `spell-check-download-${d.id}`, disabled: busy.includes(d.id) || d.status === "downloading" || !status?.dictionaryBaseUrl, onClick: () => void download(d, d.status === "available"), children: [_jsx(Download, { className: "h-3 w-3", strokeWidth: 1 }), d.status === "available" ? "Update" : d.status === "failed" ? "Retry" : "Download"] })) : null,
|
|
237
|
+
},
|
|
238
|
+
] })] }), _jsxs(SettingsCard, { icon: _jsx(BookOpen, { strokeWidth: 1, className: "h-5 w-5" }), title: "Custom words", description: "Words every editor may use without being flagged, shared by everyone and kept per dictionary.", children: [_jsxs("div", { className: "mb-3 flex flex-wrap items-center gap-2", children: [_jsx(Select, { "data-testid": "spell-check-words-dictionary", value: selectedDictionary, onValueChange: setSelectedDictionary, options: dictionaryOptions, placeholder: "Dictionary", size: "sm" }), _jsx(SearchInput, { value: filter, onValueChange: setFilter, placeholder: "Filter words", "data-testid": "spell-check-words-filter" }), _jsxs("form", { className: "ml-auto flex items-center gap-2", onSubmit: (event) => {
|
|
239
|
+
event.preventDefault();
|
|
240
|
+
void addWord();
|
|
241
|
+
}, children: [_jsx(Input, { "aria-label": "New word", "data-testid": "spell-check-new-word", className: "h-8 w-48 text-xs", value: newWord, placeholder: "Add a word", spellCheck: false, onChange: (event) => setNewWord(event.target.value) }), _jsx(Button, { size: "sm", type: "submit", disabled: adding || !newWord.trim() || !selectedDictionary, "data-testid": "spell-check-add-word", children: "Add" })] })] }), wordsLoading && words.length === 0 ? (_jsx("div", { className: "text-neutral-grey-50 py-4 text-xs", children: "Loading words\u2026" })) : filteredWords.length === 0 ? (_jsx("div", { className: "text-neutral-grey-50 py-4 text-xs", "data-testid": "spell-check-words-empty", children: "No custom words yet." })) : (_jsx(SimpleTable, { "data-testid": "spell-check-words", items: filteredWords, rowKey: (w) => w.word, rowTestId: (w) => `spell-check-word-${w.word}`, columns: [
|
|
242
|
+
{ header: "Word", body: (w) => _jsx("span", { className: "text-xs font-medium", children: w.word }) },
|
|
243
|
+
{ header: "Added", body: (w) => _jsx("span", { className: "text-neutral-grey-50 text-2xs", children: formatDate(w.created) }) },
|
|
244
|
+
{ header: "By", body: (w) => _jsx("span", { className: "text-neutral-grey-50 text-2xs", children: w.createdBy }) },
|
|
245
|
+
{
|
|
246
|
+
header: "",
|
|
247
|
+
align: "right",
|
|
248
|
+
body: (w) => isAdmin ? (_jsx(DeleteButton, { label: `Remove ${w.word}`, "data-testid": `spell-check-remove-${w.word}`, onClick: () => void removeWord(w) })) : null,
|
|
249
|
+
},
|
|
250
|
+
] }))] })] }));
|
|
251
|
+
}
|
|
252
|
+
export default SpellCheckPanel;
|
|
253
|
+
//# sourceMappingURL=SpellCheckPanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SpellCheckPanel.js","sourceRoot":"","sources":["../../../../src/editor/settings/panels/SpellCheckPanel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The feedback sidebar: pick a root item and see every comment and suggestion
|
|
3
|
+
* on the items beneath it, grouped per item, with a click taking you to the
|
|
4
|
+
* item and the thread in the comment margin. The workbox sidebar is the model
|
|
5
|
+
* for the root picker; the threads follow the margin's filters.
|
|
6
|
+
*/
|
|
7
|
+
export declare function FeedbackSidebar(): import("react").JSX.Element | null;
|