@parhelia/core 0.1.12901 → 0.1.12903
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/agents-view/AgentsWorkspaceView.js +40 -5
- package/dist/agents-view/AgentsWorkspaceView.js.map +1 -1
- package/dist/components/ui/button.js +1 -1
- package/dist/components/ui/button.js.map +1 -1
- package/dist/components/ui/context-menu.d.ts +2 -2
- package/dist/components/ui/context-menu.js +64 -7
- package/dist/components/ui/context-menu.js.map +1 -1
- package/dist/components/ui/dialog.d.ts +2 -2
- package/dist/components/ui/dialog.js +27 -5
- package/dist/components/ui/dialog.js.map +1 -1
- package/dist/config/config.js +83 -3
- package/dist/config/config.js.map +1 -1
- package/dist/editor/AspectRatioSelector.js +27 -24
- package/dist/editor/AspectRatioSelector.js.map +1 -1
- package/dist/editor/ConcurrentUserLimitDialog.js +1 -1
- package/dist/editor/ConcurrentUserLimitDialog.js.map +1 -1
- package/dist/editor/ConfirmationDialog.js +6 -4
- package/dist/editor/ConfirmationDialog.js.map +1 -1
- package/dist/editor/ContentTree.js +4 -3
- package/dist/editor/ContentTree.js.map +1 -1
- package/dist/editor/EditorWarning.js +1 -1
- package/dist/editor/EditorWarning.js.map +1 -1
- package/dist/editor/FieldListField.js +12 -8
- package/dist/editor/FieldListField.js.map +1 -1
- package/dist/editor/PictureCropper.js +73 -37
- package/dist/editor/PictureCropper.js.map +1 -1
- package/dist/editor/SetupWizard.js +14 -12
- package/dist/editor/SetupWizard.js.map +1 -1
- package/dist/editor/WorkspaceTitleSwitcher.js +1 -1
- package/dist/editor/WorkspaceTitleSwitcher.js.map +1 -1
- package/dist/editor/ai/Agents.js +19 -3
- package/dist/editor/ai/Agents.js.map +1 -1
- package/dist/editor/ai/dialogs/AgentDialogHandler.js +87 -9
- package/dist/editor/ai/dialogs/AgentDialogHandler.js.map +1 -1
- package/dist/editor/ai/dialogs/agentDialogTypes.d.ts +18 -0
- package/dist/editor/ai/dialogs/agentDialogTypes.js +5 -0
- package/dist/editor/ai/dialogs/agentDialogTypes.js.map +1 -1
- package/dist/editor/ai/dialogs/browserBoundCapture.d.ts +6 -9
- package/dist/editor/ai/dialogs/browserBoundCapture.js +17 -25
- package/dist/editor/ai/dialogs/browserBoundCapture.js.map +1 -1
- package/dist/editor/ai/dialogs/capturePageDom.js +2 -18
- package/dist/editor/ai/dialogs/capturePageDom.js.map +1 -1
- package/dist/editor/ai/dialogs/capturePageScreenshot.d.ts +27 -1
- package/dist/editor/ai/dialogs/capturePageScreenshot.js +11 -24
- package/dist/editor/ai/dialogs/capturePageScreenshot.js.map +1 -1
- package/dist/editor/ai/dialogs/captureShared.d.ts +10 -0
- package/dist/editor/ai/dialogs/captureShared.js +39 -0
- package/dist/editor/ai/dialogs/captureShared.js.map +1 -0
- package/dist/editor/ai/dialogs/offscreenPageCapture.d.ts +44 -0
- package/dist/editor/ai/dialogs/offscreenPageCapture.js +300 -0
- package/dist/editor/ai/dialogs/offscreenPageCapture.js.map +1 -0
- package/dist/editor/ai/terminal/agentContextMerge.d.ts +2 -7
- package/dist/editor/ai/terminal/agentContextMerge.js +33 -10
- package/dist/editor/ai/terminal/agentContextMerge.js.map +1 -1
- package/dist/editor/ai/terminal/agentSessionState.d.ts +28 -0
- package/dist/editor/ai/terminal/agentSessionState.js +63 -3
- package/dist/editor/ai/terminal/agentSessionState.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentContextItemPicker.d.ts +11 -0
- package/dist/editor/ai/terminal/components/AgentContextItemPicker.js +81 -0
- package/dist/editor/ai/terminal/components/AgentContextItemPicker.js.map +1 -0
- package/dist/editor/ai/terminal/components/AgentProjectProgress.js +1 -1
- package/dist/editor/ai/terminal/components/AgentProjectProgress.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentPromptTrayPopovers.d.ts +3 -1
- package/dist/editor/ai/terminal/components/AgentPromptTrayPopovers.js +40 -25
- package/dist/editor/ai/terminal/components/AgentPromptTrayPopovers.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentSuggestionBanner.d.ts +16 -0
- package/dist/editor/ai/terminal/components/AgentSuggestionBanner.js +41 -0
- package/dist/editor/ai/terminal/components/AgentSuggestionBanner.js.map +1 -0
- package/dist/editor/ai/terminal/components/AgentSummaryAssistantResponse.d.ts +1 -3
- package/dist/editor/ai/terminal/components/AgentSummaryAssistantResponse.js +2 -2
- package/dist/editor/ai/terminal/components/AgentSummaryAssistantResponse.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentTerminalContextChrome.d.ts +3 -0
- package/dist/editor/ai/terminal/components/AgentTerminalContextChrome.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentTerminalFullUpperContent.d.ts +10 -5
- package/dist/editor/ai/terminal/components/AgentTerminalFullUpperContent.js +3 -3
- package/dist/editor/ai/terminal/components/AgentTerminalFullUpperContent.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentTerminalMessageGroups.d.ts +1 -3
- package/dist/editor/ai/terminal/components/AgentTerminalMessageGroups.js +2 -2
- package/dist/editor/ai/terminal/components/AgentTerminalMessageGroups.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentTerminalSummaryLayout.d.ts +2 -5
- package/dist/editor/ai/terminal/components/AgentTerminalSummaryLayout.js +2 -2
- package/dist/editor/ai/terminal/components/AgentTerminalSummaryLayout.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentTerminalView.js +3 -2
- package/dist/editor/ai/terminal/components/AgentTerminalView.js.map +1 -1
- package/dist/editor/ai/terminal/components/AiResponseMessage.d.ts +1 -11
- package/dist/editor/ai/terminal/components/AiResponseMessage.js +42 -5
- package/dist/editor/ai/terminal/components/AiResponseMessage.js.map +1 -1
- package/dist/editor/ai/terminal/components/ContextInfoBar.d.ts +4 -1
- package/dist/editor/ai/terminal/components/ContextInfoBar.js +69 -35
- package/dist/editor/ai/terminal/components/ContextInfoBar.js.map +1 -1
- package/dist/editor/ai/terminal/components/ToolCallDisplay.d.ts +14 -11
- package/dist/editor/ai/terminal/components/ToolCallDisplay.js +13 -71
- package/dist/editor/ai/terminal/components/ToolCallDisplay.js.map +1 -1
- package/dist/editor/ai/terminal/components/UserMessage.js +104 -58
- package/dist/editor/ai/terminal/components/UserMessage.js.map +1 -1
- package/dist/editor/ai/terminal/components/toolCallApprovalGate.d.ts +21 -0
- package/dist/editor/ai/terminal/components/toolCallApprovalGate.js +32 -0
- package/dist/editor/ai/terminal/components/toolCallApprovalGate.js.map +1 -0
- package/dist/editor/ai/terminal/types.d.ts +1 -3
- package/dist/editor/ai/terminal/useAgentEditorContext.d.ts +2 -6
- package/dist/editor/ai/terminal/useAgentEditorContext.js +41 -10
- package/dist/editor/ai/terminal/useAgentEditorContext.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentInitialPrompt.js +4 -1
- package/dist/editor/ai/terminal/useAgentInitialPrompt.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentLoadErrorHandler.d.ts +3 -0
- package/dist/editor/ai/terminal/useAgentLoadErrorHandler.js +7 -5
- package/dist/editor/ai/terminal/useAgentLoadErrorHandler.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentLoadPipeline.d.ts +1 -0
- package/dist/editor/ai/terminal/useAgentLoadPipeline.js +3 -1
- package/dist/editor/ai/terminal/useAgentLoadPipeline.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentLoader.js +4 -1
- package/dist/editor/ai/terminal/useAgentLoader.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentRunResyncSocketHandler.js +3 -3
- package/dist/editor/ai/terminal/useAgentRunResyncSocketHandler.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentRunStatusSocketHandler.d.ts +0 -2
- package/dist/editor/ai/terminal/useAgentRunStatusSocketHandler.js +4 -9
- package/dist/editor/ai/terminal/useAgentRunStatusSocketHandler.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentSession.d.ts +0 -1
- package/dist/editor/ai/terminal/useAgentSession.js +0 -5
- package/dist/editor/ai/terminal/useAgentSession.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentSessionCommandBindings.d.ts +0 -2
- package/dist/editor/ai/terminal/useAgentSessionCommandBindings.js +1 -5
- package/dist/editor/ai/terminal/useAgentSessionCommandBindings.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentSessionFacade.d.ts +0 -2
- package/dist/editor/ai/terminal/useAgentSessionFacade.js +0 -3
- package/dist/editor/ai/terminal/useAgentSessionFacade.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentSessionSync.d.ts +1 -6
- package/dist/editor/ai/terminal/useAgentSessionSync.js +1 -14
- package/dist/editor/ai/terminal/useAgentSessionSync.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentSettingsPanel.js +2 -0
- package/dist/editor/ai/terminal/useAgentSettingsPanel.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentSkillActions.d.ts +2 -0
- package/dist/editor/ai/terminal/useAgentSkillActions.js +10 -4
- package/dist/editor/ai/terminal/useAgentSkillActions.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentSocketMessageRouter.d.ts +1 -0
- package/dist/editor/ai/terminal/useAgentSocketMessageRouter.js +6 -1
- package/dist/editor/ai/terminal/useAgentSocketMessageRouter.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentStreamPipeline.d.ts +2 -2
- package/dist/editor/ai/terminal/useAgentStreamPipeline.js +7 -3
- package/dist/editor/ai/terminal/useAgentStreamPipeline.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentSubmitContextBuilder.d.ts +4 -0
- package/dist/editor/ai/terminal/useAgentSubmitContextBuilder.js +48 -6
- package/dist/editor/ai/terminal/useAgentSubmitContextBuilder.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentSubmitHandlers.d.ts +2 -0
- package/dist/editor/ai/terminal/useAgentSubmitHandlers.js +7 -1
- package/dist/editor/ai/terminal/useAgentSubmitHandlers.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentSuggestionSocketHandler.d.ts +25 -0
- package/dist/editor/ai/terminal/useAgentSuggestionSocketHandler.js +35 -0
- package/dist/editor/ai/terminal/useAgentSuggestionSocketHandler.js.map +1 -0
- package/dist/editor/ai/terminal/useAgentTerminalChrome.d.ts +3 -0
- package/dist/editor/ai/terminal/useAgentTerminalChrome.js +2 -2
- package/dist/editor/ai/terminal/useAgentTerminalChrome.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentTerminalController.d.ts +1 -1
- package/dist/editor/ai/terminal/useAgentTerminalController.js +65 -26
- package/dist/editor/ai/terminal/useAgentTerminalController.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentTerminalViewProps.d.ts +1 -1
- package/dist/editor/ai/terminal/useAgentTerminalViewProps.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentToolResultHandler.d.ts +6 -0
- package/dist/editor/ai/terminal/useAgentToolResultHandler.js +18 -1
- package/dist/editor/ai/terminal/useAgentToolResultHandler.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentUserMessageSocketHandler.js +3 -1
- package/dist/editor/ai/terminal/useAgentUserMessageSocketHandler.js.map +1 -1
- package/dist/editor/ai/useAgentPanes.d.ts +1 -1
- package/dist/editor/ai/useAgentPanes.js +25 -3
- package/dist/editor/ai/useAgentPanes.js.map +1 -1
- package/dist/editor/ai-image-editor/AiImageEditorDialog.js +107 -16
- package/dist/editor/ai-image-editor/AiImageEditorDialog.js.map +1 -1
- package/dist/editor/bridge/protocol.d.ts +4 -0
- package/dist/editor/bridge/protocol.js.map +1 -1
- package/dist/editor/client/EditorShell.d.ts +0 -10
- package/dist/editor/client/EditorShell.js +17 -5
- package/dist/editor/client/EditorShell.js.map +1 -1
- package/dist/editor/client/editContext.d.ts +19 -2
- package/dist/editor/client/editContext.js.map +1 -1
- package/dist/editor/client/hooks/useSocketMessageHandler.js +0 -20
- package/dist/editor/client/hooks/useSocketMessageHandler.js.map +1 -1
- package/dist/editor/client/operations.d.ts +4 -2
- package/dist/editor/client/operations.js +106 -33
- package/dist/editor/client/operations.js.map +1 -1
- package/dist/editor/field-types/AttachmentEditor.js +42 -4
- package/dist/editor/field-types/AttachmentEditor.js.map +1 -1
- package/dist/editor/media-selector/MediaFolderBrowser.js +142 -32
- package/dist/editor/media-selector/MediaFolderBrowser.js.map +1 -1
- package/dist/editor/media-selector/Preview.d.ts +2 -1
- package/dist/editor/media-selector/Preview.js +45 -2
- package/dist/editor/media-selector/Preview.js.map +1 -1
- package/dist/editor/media-selector/Thumbnails.d.ts +5 -1
- package/dist/editor/media-selector/Thumbnails.js +72 -11
- package/dist/editor/media-selector/Thumbnails.js.map +1 -1
- package/dist/editor/media-selector/TreeSelector.js +130 -22
- package/dist/editor/media-selector/TreeSelector.js.map +1 -1
- package/dist/editor/media-selector/UploadZone.d.ts +2 -1
- package/dist/editor/media-selector/UploadZone.js +7 -15
- package/dist/editor/media-selector/UploadZone.js.map +1 -1
- package/dist/editor/media-selector/mediaFileType.d.ts +12 -0
- package/dist/editor/media-selector/mediaFileType.js +95 -0
- package/dist/editor/media-selector/mediaFileType.js.map +1 -0
- package/dist/editor/media-selector/mediaSelectionPath.d.ts +5 -0
- package/dist/editor/media-selector/mediaSelectionPath.js +21 -0
- package/dist/editor/media-selector/mediaSelectionPath.js.map +1 -0
- package/dist/editor/media-selector/mediaUpload.d.ts +30 -0
- package/dist/editor/media-selector/mediaUpload.js +155 -0
- package/dist/editor/media-selector/mediaUpload.js.map +1 -0
- package/dist/editor/menubar/toolbar-sections/UndoRedoControls.js +52 -29
- package/dist/editor/menubar/toolbar-sections/UndoRedoControls.js.map +1 -1
- package/dist/editor/page-editor-chrome/ComponentOperationBubble.d.ts +8 -0
- package/dist/editor/page-editor-chrome/ComponentOperationBubble.js +8 -0
- package/dist/editor/page-editor-chrome/ComponentOperationBubble.js.map +1 -0
- package/dist/editor/page-editor-chrome/DragInsertionOverlay.js +207 -19
- package/dist/editor/page-editor-chrome/DragInsertionOverlay.js.map +1 -1
- package/dist/editor/page-editor-chrome/FrameMenu.js +101 -12
- package/dist/editor/page-editor-chrome/FrameMenu.js.map +1 -1
- package/dist/editor/page-editor-chrome/FrameMenus.js +6 -1
- package/dist/editor/page-editor-chrome/FrameMenus.js.map +1 -1
- package/dist/editor/page-editor-chrome/InsertComponentMenu.d.ts +2 -1
- package/dist/editor/page-editor-chrome/InsertComponentMenu.js +7 -2
- package/dist/editor/page-editor-chrome/InsertComponentMenu.js.map +1 -1
- package/dist/editor/page-editor-chrome/LockedFieldIndicator.js +3 -2
- package/dist/editor/page-editor-chrome/LockedFieldIndicator.js.map +1 -1
- package/dist/editor/page-editor-chrome/PageEditorChrome.js +95 -24
- package/dist/editor/page-editor-chrome/PageEditorChrome.js.map +1 -1
- package/dist/editor/page-editor-chrome/PlaceholderDropZone.js +85 -7
- package/dist/editor/page-editor-chrome/PlaceholderDropZone.js.map +1 -1
- package/dist/editor/page-editor-chrome/insertTargetLabel.d.ts +6 -0
- package/dist/editor/page-editor-chrome/insertTargetLabel.js +21 -0
- package/dist/editor/page-editor-chrome/insertTargetLabel.js.map +1 -0
- package/dist/editor/page-editor-chrome/overlay/geometry.js +13 -1
- package/dist/editor/page-editor-chrome/overlay/geometry.js.map +1 -1
- package/dist/editor/page-editor-chrome/overlay/placeholderZones.d.ts +1 -0
- package/dist/editor/page-editor-chrome/overlay/placeholderZones.js +14 -9
- package/dist/editor/page-editor-chrome/overlay/placeholderZones.js.map +1 -1
- package/dist/editor/page-editor-chrome/useBridgeInlineEditing.d.ts +6 -3
- package/dist/editor/page-editor-chrome/useBridgeInlineEditing.js +112 -6
- package/dist/editor/page-editor-chrome/useBridgeInlineEditing.js.map +1 -1
- package/dist/editor/page-viewer/PageViewer.js +1 -0
- package/dist/editor/page-viewer/PageViewer.js.map +1 -1
- package/dist/editor/page-viewer/PageViewerFrame.js +119 -100
- package/dist/editor/page-viewer/PageViewerFrame.js.map +1 -1
- package/dist/editor/page-viewer/bridgeKeyboardShortcuts.d.ts +3 -0
- package/dist/editor/page-viewer/bridgeKeyboardShortcuts.js +36 -0
- package/dist/editor/page-viewer/bridgeKeyboardShortcuts.js.map +1 -0
- package/dist/editor/page-viewer/renderUrl.d.ts +14 -0
- package/dist/editor/page-viewer/renderUrl.js +83 -0
- package/dist/editor/page-viewer/renderUrl.js.map +1 -0
- package/dist/editor/reviews/CreateReviewDialog.js +1 -1
- package/dist/editor/reviews/CreateReviewDialog.js.map +1 -1
- package/dist/editor/reviews/EditReviewSettingsDialog.js +1 -1
- package/dist/editor/reviews/EditReviewSettingsDialog.js.map +1 -1
- package/dist/editor/services/agentService.d.ts +22 -29
- package/dist/editor/services/agentService.js +24 -22
- package/dist/editor/services/agentService.js.map +1 -1
- package/dist/editor/services/aiService.d.ts +3 -0
- package/dist/editor/services/aiService.js.map +1 -1
- package/dist/editor/services/contentService.d.ts +5 -0
- package/dist/editor/services/contentService.js.map +1 -1
- package/dist/editor/services/editService.d.ts +12 -0
- package/dist/editor/services/editService.js +3 -0
- package/dist/editor/services/editService.js.map +1 -1
- package/dist/editor/settings/panels/AgentsPanel.js +1 -1
- package/dist/editor/settings/panels/AgentsPanel.js.map +1 -1
- package/dist/editor/settings/panels/ModelsPanel.js +94 -26
- package/dist/editor/settings/panels/ModelsPanel.js.map +1 -1
- package/dist/editor/setup-wizard/SetupStepError.d.ts +8 -0
- package/dist/editor/setup-wizard/SetupStepError.js +7 -0
- package/dist/editor/setup-wizard/SetupStepError.js.map +1 -0
- package/dist/editor/setup-wizard/SetupStepHeader.d.ts +15 -0
- package/dist/editor/setup-wizard/SetupStepHeader.js +6 -0
- package/dist/editor/setup-wizard/SetupStepHeader.js.map +1 -0
- package/dist/editor/setup-wizard/SetupStepLayout.d.ts +33 -0
- package/dist/editor/setup-wizard/SetupStepLayout.js +16 -0
- package/dist/editor/setup-wizard/SetupStepLayout.js.map +1 -0
- package/dist/editor/setup-wizard/steps/CompleteStep.js +12 -10
- package/dist/editor/setup-wizard/steps/CompleteStep.js.map +1 -1
- package/dist/editor/setup-wizard/steps/CreateSettingsStep.js +4 -2
- package/dist/editor/setup-wizard/steps/CreateSettingsStep.js.map +1 -1
- package/dist/editor/setup-wizard/steps/LicenseActivationStep.js +95 -28
- package/dist/editor/setup-wizard/steps/LicenseActivationStep.js.map +1 -1
- package/dist/editor/setup-wizard/steps/LicenseEmailStep.d.ts +2 -1
- package/dist/editor/setup-wizard/steps/LicenseEmailStep.js +12 -4
- package/dist/editor/setup-wizard/steps/LicenseEmailStep.js.map +1 -1
- package/dist/editor/setup-wizard/steps/ModelSelectionStep.d.ts +1 -1
- package/dist/editor/setup-wizard/steps/ModelSelectionStep.js +62 -58
- package/dist/editor/setup-wizard/steps/ModelSelectionStep.js.map +1 -1
- package/dist/editor/setup-wizard/steps/ProviderStep.js +63 -19
- package/dist/editor/setup-wizard/steps/ProviderStep.js.map +1 -1
- package/dist/editor/setup-wizard/steps/WelcomeStep.js +2 -1
- package/dist/editor/setup-wizard/steps/WelcomeStep.js.map +1 -1
- package/dist/editor/sidebar/ComponentPalette.js +1 -1
- package/dist/editor/sidebar/ComponentPalette.js.map +1 -1
- package/dist/editor/sidebar/ComponentTree.js +24 -30
- package/dist/editor/sidebar/ComponentTree.js.map +1 -1
- package/dist/editor/template-wizard/TemplateStructureInlineEditor.js +1 -1
- package/dist/editor/template-wizard/TemplateStructureInlineEditor.js.map +1 -1
- package/dist/editor/ui/CopyMoveTargetSelectorDialog.js +2 -2
- package/dist/editor/ui/CopyMoveTargetSelectorDialog.js.map +1 -1
- package/dist/editor/ui/DialogButtons.js +1 -1
- package/dist/editor/ui/DialogButtons.js.map +1 -1
- package/dist/editor/ui/IconSelectorDialog.js +1 -1
- package/dist/editor/ui/IconSelectorDialog.js.map +1 -1
- package/dist/editor/ui/ItemNameDialogNew.js +1 -1
- package/dist/editor/ui/ItemNameDialogNew.js.map +1 -1
- package/dist/editor/ui/PerfectTree.js +1 -1
- package/dist/editor/ui/PerfectTree.js.map +1 -1
- package/dist/editor/ui/PublishDialog.js +1 -1
- package/dist/editor/ui/PublishDialog.js.map +1 -1
- package/dist/editor/ui/PublishItemDialog.js +1 -1
- package/dist/editor/ui/PublishItemDialog.js.map +1 -1
- package/dist/editor/ui/SharedFolderSelectorDialog.js +1 -1
- package/dist/editor/ui/SharedFolderSelectorDialog.js.map +1 -1
- package/dist/editor/ui/TemplateSelectorDialog.js +1 -1
- package/dist/editor/ui/TemplateSelectorDialog.js.map +1 -1
- package/dist/editor/views/EditorSlot.js +1 -1
- package/dist/editor/views/EditorSlot.js.map +1 -1
- package/dist/editor/views/MediaFolderEditView.js +1 -1
- package/dist/editor/views/MediaFolderEditView.js.map +1 -1
- package/dist/lib/viewTransition.js +7 -1
- package/dist/lib/viewTransition.js.map +1 -1
- package/dist/logging/consolePrefix.js +13 -0
- package/dist/logging/consolePrefix.js.map +1 -1
- package/dist/revision.d.ts +2 -2
- package/dist/revision.js +2 -2
- package/dist/setup/services/setupWizardService.d.ts +2 -0
- package/dist/setup/services/setupWizardService.js +12 -0
- package/dist/setup/services/setupWizardService.js.map +1 -1
- package/dist/setup/wizard/steps/ImportModelDialog.js +35 -86
- package/dist/setup/wizard/steps/ImportModelDialog.js.map +1 -1
- package/dist/splash-screen/ModernSplashScreen.js +12 -0
- package/dist/splash-screen/ModernSplashScreen.js.map +1 -1
- package/dist/task-board/components/ItemCollectionEditorDialog.js +1 -1
- package/dist/task-board/components/ItemCollectionEditorDialog.js.map +1 -1
- package/dist/task-board/components/ProjectOverviewContent.js +1 -1
- package/dist/task-board/components/ProjectOverviewContent.js.map +1 -1
- package/dist/task-board/components/ProjectSettingsDialog.js +1 -1
- package/dist/task-board/components/ProjectSettingsDialog.js.map +1 -1
- package/images/Parhelia-Onboarding-BG.jpg +0 -0
- package/package.json +1 -1
- package/dist/editor/ai/terminal/components/AgentBrowserClaimBanner.d.ts +0 -10
- package/dist/editor/ai/terminal/components/AgentBrowserClaimBanner.js +0 -24
- package/dist/editor/ai/terminal/components/AgentBrowserClaimBanner.js.map +0 -1
- package/dist/editor/ai/terminal/useAgentBrowserCapture.d.ts +0 -24
- package/dist/editor/ai/terminal/useAgentBrowserCapture.js +0 -147
- package/dist/editor/ai/terminal/useAgentBrowserCapture.js.map +0 -1
- package/dist/editor/ai/terminal/useAgentBrowserCapturePanel.d.ts +0 -29
- package/dist/editor/ai/terminal/useAgentBrowserCapturePanel.js +0 -36
- package/dist/editor/ai/terminal/useAgentBrowserCapturePanel.js.map +0 -1
- package/dist/editor/ai/terminal/useAgentBrowserCaptureUi.d.ts +0 -18
- package/dist/editor/ai/terminal/useAgentBrowserCaptureUi.js +0 -36
- package/dist/editor/ai/terminal/useAgentBrowserCaptureUi.js.map +0 -1
- package/images/bg-shape-black.webp +0 -0
- package/images/parhelia-logo-1.jpg +0 -0
- package/images/phlogo.png +0 -0
- package/images/wizard-bg.png +0 -0
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
export const normalizeMediaFileType = (value) => {
|
|
2
|
+
const type = value?.trim().replace(/^\./, "").toLowerCase();
|
|
3
|
+
if (!type)
|
|
4
|
+
return undefined;
|
|
5
|
+
if (type === "jpeg")
|
|
6
|
+
return "jpg";
|
|
7
|
+
if (type === "svg+xml")
|
|
8
|
+
return "svg";
|
|
9
|
+
return type;
|
|
10
|
+
};
|
|
11
|
+
const getFileTypeFromName = (name) => {
|
|
12
|
+
const match = name?.match(/\.([a-z0-9]{1,10})$/i);
|
|
13
|
+
return normalizeMediaFileType(match?.[1]);
|
|
14
|
+
};
|
|
15
|
+
const getFileTypeFromMimeType = (mimeType) => {
|
|
16
|
+
const normalized = mimeType?.split(";")[0]?.trim().toLowerCase();
|
|
17
|
+
if (!normalized)
|
|
18
|
+
return undefined;
|
|
19
|
+
const knownTypes = {
|
|
20
|
+
"application/pdf": "pdf",
|
|
21
|
+
"image/jpeg": "jpg",
|
|
22
|
+
"image/svg+xml": "svg",
|
|
23
|
+
"text/plain": "txt",
|
|
24
|
+
"video/quicktime": "mov",
|
|
25
|
+
};
|
|
26
|
+
if (knownTypes[normalized])
|
|
27
|
+
return knownTypes[normalized];
|
|
28
|
+
const subtype = normalized.split("/")[1];
|
|
29
|
+
if (!subtype)
|
|
30
|
+
return undefined;
|
|
31
|
+
return normalizeMediaFileType(subtype.split("+")[0]);
|
|
32
|
+
};
|
|
33
|
+
const getFileTypeFromUrl = (url) => {
|
|
34
|
+
if (!url)
|
|
35
|
+
return undefined;
|
|
36
|
+
try {
|
|
37
|
+
const parsed = new URL(url, typeof window === "undefined"
|
|
38
|
+
? "http://localhost"
|
|
39
|
+
: window.location.origin);
|
|
40
|
+
const pathType = getFileTypeFromName(parsed.pathname);
|
|
41
|
+
if (pathType && !["ashx", "aspx"].includes(pathType))
|
|
42
|
+
return pathType;
|
|
43
|
+
const queryFileName = parsed.searchParams.get("file") ||
|
|
44
|
+
parsed.searchParams.get("filename") ||
|
|
45
|
+
parsed.searchParams.get("download");
|
|
46
|
+
return getFileTypeFromName(queryFileName || undefined);
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
const [path] = url.split(/[?#]/);
|
|
50
|
+
const pathType = getFileTypeFromName(path);
|
|
51
|
+
return pathType && !["ashx", "aspx"].includes(pathType)
|
|
52
|
+
? pathType
|
|
53
|
+
: undefined;
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
const getFileTypeFromTemplateName = (templateName) => {
|
|
57
|
+
const normalized = templateName?.trim().toLowerCase();
|
|
58
|
+
if (!normalized)
|
|
59
|
+
return undefined;
|
|
60
|
+
const templateTypes = {
|
|
61
|
+
jpeg: "jpg",
|
|
62
|
+
jpg: "jpg",
|
|
63
|
+
png: "png",
|
|
64
|
+
gif: "gif",
|
|
65
|
+
svg: "svg",
|
|
66
|
+
webp: "webp",
|
|
67
|
+
avif: "avif",
|
|
68
|
+
bmp: "bmp",
|
|
69
|
+
bitmap: "bmp",
|
|
70
|
+
pdf: "pdf",
|
|
71
|
+
};
|
|
72
|
+
for (const [templateType, label] of Object.entries(templateTypes)) {
|
|
73
|
+
if (normalized.includes(templateType))
|
|
74
|
+
return label;
|
|
75
|
+
}
|
|
76
|
+
return undefined;
|
|
77
|
+
};
|
|
78
|
+
const getFileTypeFromTemplateId = (templateId) => {
|
|
79
|
+
const normalized = templateId?.replace(/[{}]/g, "").toLowerCase();
|
|
80
|
+
if (!normalized)
|
|
81
|
+
return undefined;
|
|
82
|
+
const templateTypes = {
|
|
83
|
+
"daf085e8-602e-43a6-8299-038ff171349f": "jpg",
|
|
84
|
+
};
|
|
85
|
+
return templateTypes[normalized];
|
|
86
|
+
};
|
|
87
|
+
export const getMediaFileTypeLabel = (media) => normalizeMediaFileType(media.extension) ||
|
|
88
|
+
getFileTypeFromMimeType(media.mimeType) ||
|
|
89
|
+
getFileTypeFromName(media.name) ||
|
|
90
|
+
getFileTypeFromUrl(media.downloadUrl) ||
|
|
91
|
+
getFileTypeFromUrl(media.previewUrl) ||
|
|
92
|
+
getFileTypeFromUrl(media.thumbUrl) ||
|
|
93
|
+
getFileTypeFromTemplateName(media.templateName) ||
|
|
94
|
+
getFileTypeFromTemplateId(media.templateId);
|
|
95
|
+
//# sourceMappingURL=mediaFileType.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mediaFileType.js","sourceRoot":"","sources":["../../../src/editor/media-selector/mediaFileType.ts"],"names":[],"mappings":"AAWA,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,KAAyB,EAAE,EAAE;IAClE,MAAM,IAAI,GAAG,KAAK,EAAE,IAAI,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IAC5D,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IAE5B,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,KAAK,CAAC;IAClC,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAErC,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,IAAwB,EAAE,EAAE;IACvD,MAAM,KAAK,GAAG,IAAI,EAAE,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAClD,OAAO,sBAAsB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5C,CAAC,CAAC;AAEF,MAAM,uBAAuB,GAAG,CAAC,QAA4B,EAAE,EAAE;IAC/D,MAAM,UAAU,GAAG,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACjE,IAAI,CAAC,UAAU;QAAE,OAAO,SAAS,CAAC;IAElC,MAAM,UAAU,GAA2B;QACzC,iBAAiB,EAAE,KAAK;QACxB,YAAY,EAAE,KAAK;QACnB,eAAe,EAAE,KAAK;QACtB,YAAY,EAAE,KAAK;QACnB,iBAAiB,EAAE,KAAK;KACzB,CAAC;IAEF,IAAI,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,UAAU,CAAC,UAAU,CAAC,CAAC;IAE1D,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACzC,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IAE/B,OAAO,sBAAsB,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvD,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,GAAuB,EAAE,EAAE;IACrD,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAC;IAE3B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,GAAG,CACpB,GAAG,EACH,OAAO,MAAM,KAAK,WAAW;YAC3B,CAAC,CAAC,kBAAkB;YACpB,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAC3B,CAAC;QACF,MAAM,QAAQ,GAAG,mBAAmB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACtD,IAAI,QAAQ,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAAE,OAAO,QAAQ,CAAC;QAEtE,MAAM,aAAa,GACjB,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC;YAC/B,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC;YACnC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAEtC,OAAO,mBAAmB,CAAC,aAAa,IAAI,SAAS,CAAC,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACjC,MAAM,QAAQ,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC3C,OAAO,QAAQ,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACrD,CAAC,CAAC,QAAQ;YACV,CAAC,CAAC,SAAS,CAAC;IAChB,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,2BAA2B,GAAG,CAAC,YAAgC,EAAE,EAAE;IACvE,MAAM,UAAU,GAAG,YAAY,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACtD,IAAI,CAAC,UAAU;QAAE,OAAO,SAAS,CAAC;IAElC,MAAM,aAAa,GAA2B;QAC5C,IAAI,EAAE,KAAK;QACX,GAAG,EAAE,KAAK;QACV,GAAG,EAAE,KAAK;QACV,GAAG,EAAE,KAAK;QACV,GAAG,EAAE,KAAK;QACV,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,MAAM;QACZ,GAAG,EAAE,KAAK;QACV,MAAM,EAAE,KAAK;QACb,GAAG,EAAE,KAAK;KACX,CAAC;IAEF,KAAK,MAAM,CAAC,YAAY,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;QAClE,IAAI,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC;YAAE,OAAO,KAAK,CAAC;IACtD,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAEF,MAAM,yBAAyB,GAAG,CAAC,UAA8B,EAAE,EAAE;IACnE,MAAM,UAAU,GAAG,UAAU,EAAE,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IAClE,IAAI,CAAC,UAAU;QAAE,OAAO,SAAS,CAAC;IAElC,MAAM,aAAa,GAA2B;QAC5C,sCAAsC,EAAE,KAAK;KAC9C,CAAC;IAEF,OAAO,aAAa,CAAC,UAAU,CAAC,CAAC;AACnC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,KAA0B,EAAE,EAAE,CAClE,sBAAsB,CAAC,KAAK,CAAC,SAAS,CAAC;IACvC,uBAAuB,CAAC,KAAK,CAAC,QAAQ,CAAC;IACvC,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC;IAC/B,kBAAkB,CAAC,KAAK,CAAC,WAAW,CAAC;IACrC,kBAAkB,CAAC,KAAK,CAAC,UAAU,CAAC;IACpC,kBAAkB,CAAC,KAAK,CAAC,QAAQ,CAAC;IAClC,2BAA2B,CAAC,KAAK,CAAC,YAAY,CAAC;IAC/C,yBAAyB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export function normalizeMediaSelectionId(id) {
|
|
2
|
+
const normalized = id
|
|
3
|
+
?.trim()
|
|
4
|
+
.replace(/[{}()]/g, "")
|
|
5
|
+
.toLowerCase();
|
|
6
|
+
return normalized || undefined;
|
|
7
|
+
}
|
|
8
|
+
export function parseMediaSelectionIdPath(selectedIdPath) {
|
|
9
|
+
const ids = (selectedIdPath ?? "")
|
|
10
|
+
.split("/")
|
|
11
|
+
.map(normalizeMediaSelectionId)
|
|
12
|
+
.filter((id) => !!id);
|
|
13
|
+
if (ids.length === 0) {
|
|
14
|
+
return {};
|
|
15
|
+
}
|
|
16
|
+
return {
|
|
17
|
+
folderId: ids.length > 1 ? ids[ids.length - 2] : undefined,
|
|
18
|
+
mediaId: ids[ids.length - 1],
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=mediaSelectionPath.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mediaSelectionPath.js","sourceRoot":"","sources":["../../../src/editor/media-selector/mediaSelectionPath.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,yBAAyB,CACvC,EAA6B;IAE7B,MAAM,UAAU,GAAG,EAAE;QACnB,EAAE,IAAI,EAAE;SACP,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;SACtB,WAAW,EAAE,CAAC;IACjB,OAAO,UAAU,IAAI,SAAS,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,cAAuB;IAI/D,MAAM,GAAG,GAAG,CAAC,cAAc,IAAI,EAAE,CAAC;SAC/B,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,yBAAyB,CAAC;SAC9B,MAAM,CAAC,CAAC,EAAE,EAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAEtC,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;QAC1D,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;KAC7B,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { EditContextType } from "../client/editContext";
|
|
2
|
+
import type { ItemDescriptor } from "../pageModel";
|
|
3
|
+
import type { Thumbnail } from "../services/contentService";
|
|
4
|
+
export type MediaUploadResponse = {
|
|
5
|
+
success: boolean;
|
|
6
|
+
message?: string;
|
|
7
|
+
id?: string;
|
|
8
|
+
requiresReplaceConfirmation: boolean;
|
|
9
|
+
replaced: boolean;
|
|
10
|
+
existingId?: string;
|
|
11
|
+
existingName?: string;
|
|
12
|
+
};
|
|
13
|
+
type UploadMediaFilesOptions = {
|
|
14
|
+
files: File[];
|
|
15
|
+
folderId: string;
|
|
16
|
+
editContext?: EditContextType;
|
|
17
|
+
language?: string;
|
|
18
|
+
};
|
|
19
|
+
type ReplaceMediaItemOptions = {
|
|
20
|
+
file: File;
|
|
21
|
+
mediaItem: Pick<Thumbnail, "id" | "name">;
|
|
22
|
+
editContext?: EditContextType;
|
|
23
|
+
language?: string;
|
|
24
|
+
itemDescriptor?: ItemDescriptor;
|
|
25
|
+
refreshFields?: string[];
|
|
26
|
+
skipConfirmation?: boolean;
|
|
27
|
+
};
|
|
28
|
+
export declare function uploadMediaFiles({ files, folderId, editContext, language, }: UploadMediaFilesOptions): Promise<MediaUploadResponse[]>;
|
|
29
|
+
export declare function replaceMediaItemWithFile({ file, mediaItem, editContext, language, itemDescriptor, refreshFields, skipConfirmation, }: ReplaceMediaItemOptions): Promise<MediaUploadResponse | undefined>;
|
|
30
|
+
export {};
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import { toast } from "sonner";
|
|
2
|
+
const read = (raw, lower, pascal) => raw[lower] ?? raw[pascal];
|
|
3
|
+
const readString = (raw, lower, pascal) => {
|
|
4
|
+
const value = read(raw, lower, pascal);
|
|
5
|
+
return typeof value === "string" && value.length > 0 ? value : undefined;
|
|
6
|
+
};
|
|
7
|
+
const readBoolean = (raw, lower, pascal) => {
|
|
8
|
+
const value = read(raw, lower, pascal);
|
|
9
|
+
return typeof value === "boolean" ? value : false;
|
|
10
|
+
};
|
|
11
|
+
const normalizeUploadResponse = (raw) => ({
|
|
12
|
+
success: readBoolean(raw, "success", "Success"),
|
|
13
|
+
message: readString(raw, "message", "Message"),
|
|
14
|
+
id: readString(raw, "id", "Id"),
|
|
15
|
+
requiresReplaceConfirmation: readBoolean(raw, "requiresReplaceConfirmation", "RequiresReplaceConfirmation"),
|
|
16
|
+
replaced: readBoolean(raw, "replaced", "Replaced"),
|
|
17
|
+
existingId: readString(raw, "existingId", "ExistingId"),
|
|
18
|
+
existingName: readString(raw, "existingName", "ExistingName"),
|
|
19
|
+
});
|
|
20
|
+
async function confirmReplace({ editContext, fileName, mediaName, directUpdate, }) {
|
|
21
|
+
const message = directUpdate
|
|
22
|
+
? `Update "${mediaName}" with "${fileName}"? The media item ID and existing references will stay the same.`
|
|
23
|
+
: `A media item named "${mediaName}" already exists. Replace it with "${fileName}"? The media item ID and existing references will stay the same.`;
|
|
24
|
+
if (!editContext?.confirm) {
|
|
25
|
+
return typeof window !== "undefined" ? window.confirm(message) : false;
|
|
26
|
+
}
|
|
27
|
+
return await new Promise((resolve) => {
|
|
28
|
+
editContext.confirm({
|
|
29
|
+
header: directUpdate ? "Update media item?" : "Replace media item?",
|
|
30
|
+
message,
|
|
31
|
+
acceptLabel: directUpdate ? "Update" : "Replace",
|
|
32
|
+
rejectLabel: "Cancel",
|
|
33
|
+
accept: () => resolve(true),
|
|
34
|
+
reject: () => resolve(false),
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
async function postMediaFile({ file, folderId, replaceItemId, replace, }) {
|
|
39
|
+
const params = new URLSearchParams();
|
|
40
|
+
if (folderId)
|
|
41
|
+
params.set("folder", folderId);
|
|
42
|
+
if (replaceItemId)
|
|
43
|
+
params.set("replaceItemId", replaceItemId);
|
|
44
|
+
if (replace)
|
|
45
|
+
params.set("replace", "true");
|
|
46
|
+
const formData = new FormData();
|
|
47
|
+
formData.append("file", file);
|
|
48
|
+
const query = params.toString();
|
|
49
|
+
const response = await fetch(`/parhelia/upload${query ? `?${query}` : ""}`, {
|
|
50
|
+
method: "POST",
|
|
51
|
+
body: formData,
|
|
52
|
+
});
|
|
53
|
+
const body = await response.text();
|
|
54
|
+
let raw = {};
|
|
55
|
+
if (body) {
|
|
56
|
+
try {
|
|
57
|
+
raw = JSON.parse(body);
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
raw = { Message: body };
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
if (!response.ok) {
|
|
64
|
+
throw new Error(normalizeUploadResponse(raw).message ||
|
|
65
|
+
response.statusText ||
|
|
66
|
+
"Upload failed");
|
|
67
|
+
}
|
|
68
|
+
return normalizeUploadResponse(raw);
|
|
69
|
+
}
|
|
70
|
+
async function refreshMediaItem(editContext, mediaItemId, language = "en", itemDescriptor, refreshFields) {
|
|
71
|
+
if (!editContext || !mediaItemId)
|
|
72
|
+
return;
|
|
73
|
+
await editContext.itemsRepository.refreshItems([
|
|
74
|
+
itemDescriptor ?? {
|
|
75
|
+
id: mediaItemId,
|
|
76
|
+
language,
|
|
77
|
+
version: 0,
|
|
78
|
+
database: "master",
|
|
79
|
+
},
|
|
80
|
+
], {
|
|
81
|
+
properties: true,
|
|
82
|
+
...(refreshFields?.length ? { fields: refreshFields } : {}),
|
|
83
|
+
});
|
|
84
|
+
editContext.requestRefresh("immediate");
|
|
85
|
+
}
|
|
86
|
+
export async function uploadMediaFiles({ files, folderId, editContext, language, }) {
|
|
87
|
+
const uploaded = [];
|
|
88
|
+
for (const file of files) {
|
|
89
|
+
try {
|
|
90
|
+
let result = await postMediaFile({ file, folderId });
|
|
91
|
+
if (result.requiresReplaceConfirmation && result.existingId) {
|
|
92
|
+
const accepted = await confirmReplace({
|
|
93
|
+
editContext,
|
|
94
|
+
fileName: file.name,
|
|
95
|
+
mediaName: result.existingName || file.name,
|
|
96
|
+
});
|
|
97
|
+
if (!accepted)
|
|
98
|
+
continue;
|
|
99
|
+
result = await postMediaFile({
|
|
100
|
+
file,
|
|
101
|
+
folderId,
|
|
102
|
+
replace: true,
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
if (!result.success) {
|
|
106
|
+
toast.error(result.message || `Failed to upload ${file.name}.`);
|
|
107
|
+
continue;
|
|
108
|
+
}
|
|
109
|
+
if (result.replaced) {
|
|
110
|
+
toast.success("Media item updated.");
|
|
111
|
+
}
|
|
112
|
+
await refreshMediaItem(editContext, result.id, language);
|
|
113
|
+
uploaded.push(result);
|
|
114
|
+
}
|
|
115
|
+
catch (error) {
|
|
116
|
+
console.error("Error uploading media file:", error);
|
|
117
|
+
toast.error(error instanceof Error
|
|
118
|
+
? error.message
|
|
119
|
+
: `Failed to upload ${file.name}.`);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
return uploaded;
|
|
123
|
+
}
|
|
124
|
+
export async function replaceMediaItemWithFile({ file, mediaItem, editContext, language, itemDescriptor, refreshFields, skipConfirmation, }) {
|
|
125
|
+
const accepted = skipConfirmation ||
|
|
126
|
+
(await confirmReplace({
|
|
127
|
+
editContext,
|
|
128
|
+
fileName: file.name,
|
|
129
|
+
mediaName: mediaItem.name,
|
|
130
|
+
directUpdate: true,
|
|
131
|
+
}));
|
|
132
|
+
if (!accepted)
|
|
133
|
+
return undefined;
|
|
134
|
+
try {
|
|
135
|
+
const result = await postMediaFile({
|
|
136
|
+
file,
|
|
137
|
+
replaceItemId: mediaItem.id,
|
|
138
|
+
});
|
|
139
|
+
if (!result.success) {
|
|
140
|
+
toast.error(result.message || `Failed to update ${mediaItem.name}.`);
|
|
141
|
+
return undefined;
|
|
142
|
+
}
|
|
143
|
+
toast.success("Media item updated.");
|
|
144
|
+
await refreshMediaItem(editContext, result.id || mediaItem.id, language, itemDescriptor, refreshFields);
|
|
145
|
+
return result;
|
|
146
|
+
}
|
|
147
|
+
catch (error) {
|
|
148
|
+
console.error("Error updating media item:", error);
|
|
149
|
+
toast.error(error instanceof Error
|
|
150
|
+
? error.message
|
|
151
|
+
: `Failed to update ${mediaItem.name}.`);
|
|
152
|
+
return undefined;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=mediaUpload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mediaUpload.js","sourceRoot":"","sources":["../../../src/editor/media-selector/mediaUpload.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,72 +1,90 @@
|
|
|
1
|
-
import { jsx as _jsx,
|
|
2
|
-
import { useMemo } from "react";
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useMemo, useState } from "react";
|
|
3
3
|
import { useEditContext } from "../../client/editContext";
|
|
4
4
|
import { SimpleIconButton } from "../../ui/SimpleIconButton";
|
|
5
5
|
import { getUndoCommand, getRedoCommand } from "../../commands/undo";
|
|
6
|
+
import { ChevronDown, History } from "lucide-react";
|
|
7
|
+
import { Popover, PopoverContent, PopoverTrigger, } from "../../../components/ui/popover";
|
|
8
|
+
import { Button } from "../../../components/ui/button";
|
|
9
|
+
import { Tooltip, TooltipContent, TooltipTrigger, } from "../../../components/ui/tooltip";
|
|
10
|
+
import { cn } from "../../../lib/utils";
|
|
11
|
+
import { OperationItem } from "../../sidebar/OperationItem";
|
|
12
|
+
const EMPTY_EDIT_HISTORY = [];
|
|
6
13
|
export function UndoRedoControls() {
|
|
7
14
|
const editContext = useEditContext();
|
|
15
|
+
const [historyOpen, setHistoryOpen] = useState(false);
|
|
16
|
+
const editHistory = editContext?.editHistory ?? EMPTY_EDIT_HISTORY;
|
|
17
|
+
const hasEditContext = Boolean(editContext);
|
|
18
|
+
const showOnlyMyChanges = editContext?.showOnlyMyChanges ?? false;
|
|
19
|
+
const sessionId = editContext?.sessionId;
|
|
20
|
+
const currentItem = editContext?.item?.descriptor;
|
|
21
|
+
const currentItemId = currentItem?.id;
|
|
22
|
+
const currentItemLanguage = currentItem?.language;
|
|
23
|
+
const currentItemVersion = currentItem?.version;
|
|
24
|
+
const historyMode = editContext?.historyMode;
|
|
8
25
|
// Filter operations based on historyMode and showOnlyMyChanges
|
|
9
26
|
const filterOperation = useMemo(() => {
|
|
10
|
-
if (!
|
|
27
|
+
if (!hasEditContext)
|
|
11
28
|
return () => false;
|
|
12
|
-
const filterBySession = editContext.showOnlyMyChanges;
|
|
13
|
-
const currentItem = editContext.item?.descriptor;
|
|
14
|
-
const historyMode = editContext.historyMode;
|
|
15
29
|
return (op) => {
|
|
16
30
|
// Session filter (showOnlyMyChanges)
|
|
17
|
-
if (
|
|
31
|
+
if (showOnlyMyChanges && op.sessionId !== sessionId) {
|
|
18
32
|
return false;
|
|
19
33
|
}
|
|
20
34
|
// Page-centric filter: only show operations for current item and language (any version)
|
|
21
35
|
// EXCEPTION: delete-items operations are always shown because after deleting an item,
|
|
22
36
|
// the user navigates to parent but should still be able to undo the deletion
|
|
23
37
|
if (historyMode === "page-centric" &&
|
|
24
|
-
|
|
38
|
+
currentItemId &&
|
|
25
39
|
op.type !== "delete-items") {
|
|
26
40
|
if (!op.mainItem ||
|
|
27
|
-
op.mainItem.id !==
|
|
28
|
-
op.mainItem.language !==
|
|
41
|
+
op.mainItem.id !== currentItemId ||
|
|
42
|
+
op.mainItem.language !== currentItemLanguage) {
|
|
29
43
|
return false;
|
|
30
44
|
}
|
|
31
45
|
}
|
|
32
46
|
// Current-version filter: only show operations for current item and version
|
|
33
|
-
if (historyMode === "current-version" &&
|
|
47
|
+
if (historyMode === "current-version" && currentItemId) {
|
|
34
48
|
if (!op.mainItem ||
|
|
35
|
-
op.mainItem.id !==
|
|
36
|
-
op.mainItem.version !==
|
|
49
|
+
op.mainItem.id !== currentItemId ||
|
|
50
|
+
op.mainItem.version !== currentItemVersion) {
|
|
37
51
|
return false;
|
|
38
52
|
}
|
|
39
53
|
}
|
|
40
54
|
return true;
|
|
41
55
|
};
|
|
42
56
|
}, [
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
57
|
+
hasEditContext,
|
|
58
|
+
showOnlyMyChanges,
|
|
59
|
+
sessionId,
|
|
60
|
+
historyMode,
|
|
61
|
+
currentItemId,
|
|
62
|
+
currentItemLanguage,
|
|
63
|
+
currentItemVersion,
|
|
49
64
|
]);
|
|
50
65
|
// Get the next undoable operation (first operation where canUndo is true)
|
|
51
66
|
const nextUndoOperation = useMemo(() => {
|
|
52
|
-
if (!
|
|
67
|
+
if (!hasEditContext)
|
|
53
68
|
return undefined;
|
|
54
|
-
const
|
|
55
|
-
const undoableOps = allOps.filter((x) => x.canUndo);
|
|
69
|
+
const undoableOps = editHistory.filter((x) => x.canUndo);
|
|
56
70
|
const filteredOps = undoableOps.filter(filterOperation);
|
|
57
71
|
const result = filteredOps[0];
|
|
58
72
|
return result;
|
|
59
|
-
}, [
|
|
73
|
+
}, [editHistory, filterOperation, hasEditContext]);
|
|
60
74
|
// Get the next redoable operation (last operation where canRedo is true)
|
|
61
75
|
const nextRedoOperation = useMemo(() => {
|
|
62
|
-
if (!
|
|
76
|
+
if (!hasEditContext)
|
|
63
77
|
return undefined;
|
|
64
|
-
const
|
|
65
|
-
const result = [...editContext.editHistory]
|
|
78
|
+
const result = [...editHistory]
|
|
66
79
|
.reverse()
|
|
67
80
|
.find((x) => x.canRedo && filterOperation(x));
|
|
68
81
|
return result;
|
|
69
|
-
}, [
|
|
82
|
+
}, [editHistory, filterOperation, hasEditContext]);
|
|
83
|
+
const historyOperations = useMemo(() => {
|
|
84
|
+
if (!hasEditContext)
|
|
85
|
+
return [];
|
|
86
|
+
return editHistory.filter(filterOperation);
|
|
87
|
+
}, [editHistory, filterOperation, hasEditContext]);
|
|
70
88
|
if (!editContext)
|
|
71
89
|
return null;
|
|
72
90
|
const undoCommand = getUndoCommand();
|
|
@@ -78,7 +96,11 @@ export function UndoRedoControls() {
|
|
|
78
96
|
const redoLabel = nextRedoOperation
|
|
79
97
|
? `Redo: ${nextRedoOperation.title}`
|
|
80
98
|
: "Redo";
|
|
81
|
-
|
|
99
|
+
const handleOpenHistorySidepanel = () => {
|
|
100
|
+
editContext.openSidebar("history");
|
|
101
|
+
setHistoryOpen(false);
|
|
102
|
+
};
|
|
103
|
+
return (_jsxs("div", { className: "group/undo-redo flex shrink-0 items-center gap-0.5", children: [_jsx(SimpleIconButton, { onClick: async (ev) => {
|
|
82
104
|
// Pass the operation ID from current React state to avoid stale ref issues
|
|
83
105
|
// Await to ensure the operation completes before the click handler returns
|
|
84
106
|
await editContext.executeCommand({
|
|
@@ -94,6 +116,7 @@ export function UndoRedoControls() {
|
|
|
94
116
|
event: ev,
|
|
95
117
|
data: { operationId: nextRedoOperation?.id },
|
|
96
118
|
});
|
|
97
|
-
}, icon: redoCommand.icon, label: redoLabel, size: "large", "data-testid": "toolbar-redo-button", disabled: editContext.isCommandDisabled({ command: redoCommand }) })]
|
|
119
|
+
}, icon: redoCommand.icon, label: redoLabel, size: "large", "data-testid": "toolbar-redo-button", disabled: editContext.isCommandDisabled({ command: redoCommand }) }), _jsxs(Popover, { open: historyOpen, onOpenChange: setHistoryOpen, children: [_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx(PopoverTrigger, { asChild: true, children: _jsx("button", { type: "button", "aria-label": "Open edit history", "data-testid": "toolbar-edit-history-trigger", className: cn("text-neutral-grey-50 hover:border-neutral-grey-10 hover:bg-neutral-grey-5 hover:text-neutral-grey-100 inline-flex h-7 w-4 shrink-0 items-center justify-center rounded-[4px] border border-transparent opacity-0 transition-all group-hover/undo-redo:opacity-100 focus-visible:opacity-100", historyOpen &&
|
|
120
|
+
"bg-neutral-grey-5 text-neutral-grey-100 opacity-100"), children: _jsx(ChevronDown, { className: "h-3 w-3", strokeWidth: 1.5 }) }) }) }), _jsx(TooltipContent, { side: "bottom", children: "Edit history" })] }), _jsxs(PopoverContent, { align: "start", side: "bottom", sideOffset: 6, className: "w-[420px] max-w-[90vw] p-0", "data-testid": "toolbar-edit-history-popover", children: [_jsxs("div", { className: "border-border-default flex items-center justify-between gap-2 border-b px-3 py-2", children: [_jsxs("div", { className: "flex min-w-0 items-center gap-1.5", children: [_jsx(History, { className: "text-neutral-grey-50 h-3.5 w-3.5 shrink-0", strokeWidth: 1.5 }), _jsx("span", { className: "text-neutral-grey-100 truncate text-xs font-medium", children: "Edit history" })] }), _jsx("span", { className: "text-neutral-grey-50 shrink-0 text-[10px]", children: historyOperations.length })] }), _jsx("div", { className: "max-h-[60vh] overflow-y-auto", children: historyOperations.length > 0 ? (historyOperations.map((operation, index) => (_jsx(OperationItem, { operation: operation, index: index, showUserName: !editContext.showOnlyMyChanges, showDescription: false, hidePath: editContext.historyMode !== "global", showLanguage: editContext.historyMode === "global" }, operation.id || index)))) : (_jsx("div", { className: "text-neutral-grey-50 p-4 text-center text-xs", children: "No edit history available" })) }), _jsx("div", { className: "border-border-default flex justify-start border-t p-2", children: _jsx(Button, { type: "button", variant: "ghost", size: "xs", onClick: handleOpenHistorySidepanel, "data-testid": "toolbar-edit-history-open-sidepanel-button", children: "Open sidepanel" }) })] })] })] }));
|
|
98
121
|
}
|
|
99
122
|
//# sourceMappingURL=UndoRedoControls.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UndoRedoControls.js","sourceRoot":"","sources":["../../../../src/editor/menubar/toolbar-sections/UndoRedoControls.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"UndoRedoControls.js","sourceRoot":"","sources":["../../../../src/editor/menubar/toolbar-sections/UndoRedoControls.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { CSSProperties } from "react";
|
|
2
|
+
import { type ComponentFrameInsertColor } from "../componentFrameColors";
|
|
3
|
+
export declare function ComponentOperationBubble({ color, className, style, testId, }: {
|
|
4
|
+
color?: ComponentFrameInsertColor;
|
|
5
|
+
className?: string;
|
|
6
|
+
style?: CSSProperties;
|
|
7
|
+
testId?: string;
|
|
8
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { cn } from "../../lib/utils";
|
|
3
|
+
import { componentFrameBgColorVariants, } from "../componentFrameColors";
|
|
4
|
+
export function ComponentOperationBubble({ color = "default", className, style, testId, }) {
|
|
5
|
+
const colorClassName = componentFrameBgColorVariants[color];
|
|
6
|
+
return (_jsxs("div", { className: cn("pointer-events-none absolute flex h-8 w-8", className), "data-testid": testId, style: style, children: [_jsx("span", { className: `${colorClassName} absolute inline-flex h-full w-full animate-ping rounded-full opacity-75` }), _jsx("span", { className: `${colorClassName} relative inline-flex h-8 w-8 rounded-full` })] }));
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=ComponentOperationBubble.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ComponentOperationBubble.js","sourceRoot":"","sources":["../../../src/editor/page-editor-chrome/ComponentOperationBubble.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AACrC,OAAO,EACL,6BAA6B,GAE9B,MAAM,yBAAyB,CAAC;AAEjC,MAAM,UAAU,wBAAwB,CAAC,EACvC,KAAK,GAAG,SAAS,EACjB,SAAS,EACT,KAAK,EACL,MAAM,GAMP;IACC,MAAM,cAAc,GAAG,6BAA6B,CAAC,KAAK,CAAC,CAAC;IAE5D,OAAO,CACL,eACE,SAAS,EAAE,EAAE,CAAC,2CAA2C,EAAE,SAAS,CAAC,iBACxD,MAAM,EACnB,KAAK,EAAE,KAAK,aAEZ,eACE,SAAS,EAAE,GAAG,cAAc,0EAA0E,GACtG,EACF,eACE,SAAS,EAAE,GAAG,cAAc,4CAA4C,GACxE,IACE,CACP,CAAC;AACJ,CAAC"}
|