@parhelia/core 0.4.12818 → 0.4.12871
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/components/ui/alert.d.ts +6 -1
- package/dist/components/ui/alert.js +12 -3
- package/dist/components/ui/alert.js.map +1 -1
- package/dist/components/ui/context-menu.d.ts +25 -0
- package/dist/components/ui/context-menu.js +54 -36
- package/dist/components/ui/context-menu.js.map +1 -1
- package/dist/components/ui/copy-button.d.ts +3 -1
- package/dist/components/ui/copy-button.js +13 -2
- package/dist/components/ui/copy-button.js.map +1 -1
- package/dist/components/ui/mention-textarea.d.ts +8 -0
- package/dist/components/ui/mention-textarea.js +98 -46
- package/dist/components/ui/mention-textarea.js.map +1 -1
- package/dist/components/ui/paste-button.js +11 -1
- package/dist/components/ui/paste-button.js.map +1 -1
- package/dist/config/config.js +46 -4
- package/dist/config/config.js.map +1 -1
- package/dist/config/types.d.ts +2 -0
- package/dist/config/types.js.map +1 -1
- package/dist/editor/ConcurrentUserLimitDialog.js +5 -2
- package/dist/editor/ConcurrentUserLimitDialog.js.map +1 -1
- package/dist/editor/ContentTree.js +7 -2
- package/dist/editor/ContentTree.js.map +1 -1
- package/dist/editor/ContextMenu.js +11 -36
- package/dist/editor/ContextMenu.js.map +1 -1
- package/dist/editor/EditorWarning.js +8 -4
- package/dist/editor/EditorWarning.js.map +1 -1
- package/dist/editor/FieldList.js +1 -1
- package/dist/editor/FieldList.js.map +1 -1
- package/dist/editor/FieldListField.js +18 -13
- package/dist/editor/FieldListField.js.map +1 -1
- package/dist/editor/FieldListFieldWithFallbacks.js +1 -1
- package/dist/editor/GlobalMenuBar.js +2 -1
- package/dist/editor/GlobalMenuBar.js.map +1 -1
- package/dist/editor/ImageEditor.js +3 -1
- package/dist/editor/ImageEditor.js.map +1 -1
- package/dist/editor/MainLayout.js +1 -1
- package/dist/editor/MainLayout.js.map +1 -1
- package/dist/editor/MigrationsView.js +3 -2
- package/dist/editor/MigrationsView.js.map +1 -1
- package/dist/editor/MobileLayout.js +43 -20
- package/dist/editor/MobileLayout.js.map +1 -1
- package/dist/editor/PictureEditor.js +4 -2
- package/dist/editor/PictureEditor.js.map +1 -1
- package/dist/editor/QuickItemSwitcher.js +4 -2
- package/dist/editor/QuickItemSwitcher.js.map +1 -1
- 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/AgentStatusBadge.js +11 -9
- package/dist/editor/ai/AgentStatusBadge.js.map +1 -1
- package/dist/editor/ai/Agents.js +2 -2
- package/dist/editor/ai/Agents.js.map +1 -1
- package/dist/editor/ai/HeartbeatDiagnosticsPanel.js +1 -1
- package/dist/editor/ai/InlineAiDialog.js +11 -8
- package/dist/editor/ai/InlineAiDialog.js.map +1 -1
- package/dist/editor/ai/InlineAiTrigger.js +18 -14
- package/dist/editor/ai/InlineAiTrigger.js.map +1 -1
- package/dist/editor/ai/agentActivitySummary.js +5 -0
- package/dist/editor/ai/agentActivitySummary.js.map +1 -1
- package/dist/editor/ai/agentDiagnostics.d.ts +1 -1
- package/dist/editor/ai/agentDiagnostics.js +8 -0
- package/dist/editor/ai/agentDiagnostics.js.map +1 -1
- package/dist/editor/ai/agentMessageConversion.js +1 -0
- package/dist/editor/ai/agentMessageConversion.js.map +1 -1
- package/dist/editor/ai/agentMessageMarkdown.js +4 -4
- package/dist/editor/ai/agentMessageMarkdown.js.map +1 -1
- package/dist/editor/ai/dialogs/capturePageScreenshot.d.ts +4 -1
- package/dist/editor/ai/dialogs/capturePageScreenshot.js +214 -44
- package/dist/editor/ai/dialogs/capturePageScreenshot.js.map +1 -1
- package/dist/editor/ai/dialogs/captureShared.d.ts +8 -1
- package/dist/editor/ai/dialogs/captureShared.js +4 -1
- package/dist/editor/ai/dialogs/captureShared.js.map +1 -1
- package/dist/editor/ai/dialogs/offscreenPageCapture.js +1 -1
- package/dist/editor/ai/dialogs/offscreenPageCapture.js.map +1 -1
- package/dist/editor/ai/prepareInlineAiTextSelection.d.ts +2 -1
- package/dist/editor/ai/prepareInlineAiTextSelection.js +1 -2
- package/dist/editor/ai/prepareInlineAiTextSelection.js.map +1 -1
- package/dist/editor/ai/terminal/agentCost.d.ts +2 -0
- package/dist/editor/ai/terminal/agentCost.js +1 -0
- package/dist/editor/ai/terminal/agentCost.js.map +1 -1
- package/dist/editor/ai/terminal/agentSessionLiveTotals.js +3 -0
- package/dist/editor/ai/terminal/agentSessionLiveTotals.js.map +1 -1
- package/dist/editor/ai/terminal/agentSessionSelectors.d.ts +5 -2
- package/dist/editor/ai/terminal/agentSessionSelectors.js +5 -2
- package/dist/editor/ai/terminal/agentSessionSelectors.js.map +1 -1
- package/dist/editor/ai/terminal/agentSessionSnapshot.d.ts +15 -0
- package/dist/editor/ai/terminal/agentSessionSnapshot.js +103 -3
- package/dist/editor/ai/terminal/agentSessionSnapshot.js.map +1 -1
- package/dist/editor/ai/terminal/agentSessionState.js +13 -2
- package/dist/editor/ai/terminal/agentSessionState.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentActivityOverviewPanel.js +7 -7
- package/dist/editor/ai/terminal/components/AgentActivityOverviewPanel.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentBanners.js +2 -2
- package/dist/editor/ai/terminal/components/AgentBanners.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentCostDisplay.d.ts +2 -0
- package/dist/editor/ai/terminal/components/AgentCostDisplay.js +2 -1
- package/dist/editor/ai/terminal/components/AgentCostDisplay.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentFullPromptControls.js +1 -1
- package/dist/editor/ai/terminal/components/AgentFullPromptControls.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentModeSelector.js +7 -3
- package/dist/editor/ai/terminal/components/AgentModeSelector.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentPromptActionButtons.js +3 -3
- package/dist/editor/ai/terminal/components/AgentPromptActionButtons.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentPromptInputArea.js +2 -2
- package/dist/editor/ai/terminal/components/AgentPromptTrayPopovers.js +1 -1
- package/dist/editor/ai/terminal/components/AgentPromptTrayPopovers.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentReadOnlyNotice.js +1 -1
- package/dist/editor/ai/terminal/components/AgentReadOnlyNotice.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentSkillSettingsSection.js +2 -2
- package/dist/editor/ai/terminal/components/AgentSkillSettingsSection.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentTerminalFullLayout.js +1 -1
- package/dist/editor/ai/terminal/components/AgentTerminalStatusBar.d.ts +5 -2
- package/dist/editor/ai/terminal/components/AgentTerminalStatusBar.js +43 -4
- package/dist/editor/ai/terminal/components/AgentTerminalStatusBar.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentTerminalSummaryLayout.js +1 -1
- package/dist/editor/ai/terminal/components/AgentTerminalSummaryLayout.js.map +1 -1
- package/dist/editor/ai/terminal/components/AiResponseMessage.js +40 -22
- package/dist/editor/ai/terminal/components/AiResponseMessage.js.map +1 -1
- package/dist/editor/ai/terminal/components/ApprovalCard.d.ts +3 -1
- package/dist/editor/ai/terminal/components/ApprovalCard.js +8 -16
- package/dist/editor/ai/terminal/components/ApprovalCard.js.map +1 -1
- package/dist/editor/ai/terminal/components/ContextInfoBar.js +1 -1
- package/dist/editor/ai/terminal/components/ContextInfoBar.js.map +1 -1
- 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/EditFieldToolCallContent.d.ts +7 -4
- package/dist/editor/ai/terminal/components/EditFieldToolCallContent.js +57 -32
- package/dist/editor/ai/terminal/components/EditFieldToolCallContent.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/components/ToolCallDisplay.d.ts +5 -0
- package/dist/editor/ai/terminal/components/ToolCallDisplay.js +19 -8
- package/dist/editor/ai/terminal/components/ToolCallDisplay.js.map +1 -1
- package/dist/editor/ai/terminal/components/UserMessage.js +4 -2
- package/dist/editor/ai/terminal/components/UserMessage.js.map +1 -1
- package/dist/editor/ai/terminal/components/ValueDiff.js +1 -1
- package/dist/editor/ai/terminal/components/ValueDiff.js.map +1 -1
- package/dist/editor/ai/terminal/components/toolCallContentRenderers.js +7 -4
- package/dist/editor/ai/terminal/components/toolCallContentRenderers.js.map +1 -1
- package/dist/editor/ai/terminal/components/useApprovalActions.js +1 -1
- package/dist/editor/ai/terminal/components/useApprovalActions.js.map +1 -1
- 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/ai/terminal/types.d.ts +1 -0
- package/dist/editor/ai/terminal/useAgentEditorContext.js +16 -4
- package/dist/editor/ai/terminal/useAgentEditorContext.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentLoadPipeline.d.ts +1 -0
- package/dist/editor/ai/terminal/useAgentLoadPipeline.js +2 -1
- package/dist/editor/ai/terminal/useAgentLoadPipeline.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentLoader.d.ts +2 -0
- package/dist/editor/ai/terminal/useAgentLoader.js +17 -2
- package/dist/editor/ai/terminal/useAgentLoader.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentModeState.d.ts +5 -1
- package/dist/editor/ai/terminal/useAgentModeState.js +11 -3
- package/dist/editor/ai/terminal/useAgentModeState.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentOperationHistoryLoader.js +5 -1
- package/dist/editor/ai/terminal/useAgentOperationHistoryLoader.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentOperationSocketHandler.js +33 -1
- package/dist/editor/ai/terminal/useAgentOperationSocketHandler.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentRunDeltaSocketHandler.d.ts +1 -0
- package/dist/editor/ai/terminal/useAgentRunDeltaSocketHandler.js +5 -1
- package/dist/editor/ai/terminal/useAgentRunDeltaSocketHandler.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentRunRefs.d.ts +1 -0
- package/dist/editor/ai/terminal/useAgentRunRefs.js +3 -0
- package/dist/editor/ai/terminal/useAgentRunRefs.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentServerReconciler.js +11 -0
- package/dist/editor/ai/terminal/useAgentServerReconciler.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentSessionSync.d.ts +6 -0
- package/dist/editor/ai/terminal/useAgentSessionSync.js +27 -3
- package/dist/editor/ai/terminal/useAgentSessionSync.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentSettingsData.d.ts +1 -1
- package/dist/editor/ai/terminal/useAgentSettingsPanel.js +7 -6
- package/dist/editor/ai/terminal/useAgentSettingsPanel.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentSettingsSelectOptions.js +14 -2
- package/dist/editor/ai/terminal/useAgentSettingsSelectOptions.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentStatusBarContent.js +11 -4
- package/dist/editor/ai/terminal/useAgentStatusBarContent.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentStreamPipeline.d.ts +1 -0
- package/dist/editor/ai/terminal/useAgentStreamPipeline.js +2 -1
- package/dist/editor/ai/terminal/useAgentStreamPipeline.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentSubmitHandlers.d.ts +1 -0
- package/dist/editor/ai/terminal/useAgentSubmitHandlers.js +17 -4
- package/dist/editor/ai/terminal/useAgentSubmitHandlers.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentTerminalController.js +7 -1
- package/dist/editor/ai/terminal/useAgentTerminalController.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentToolCallHandler.js +1 -0
- package/dist/editor/ai/terminal/useAgentToolCallHandler.js.map +1 -1
- package/dist/editor/ai/types.d.ts +4 -0
- package/dist/editor/ai-image-editor/AiImageEditorDialog.d.ts +33 -0
- package/dist/editor/ai-image-editor/AiImageEditorDialog.js +372 -127
- package/dist/editor/ai-image-editor/AiImageEditorDialog.js.map +1 -1
- package/dist/editor/ai-image-editor/AiImageResultOverlay.js +4 -2
- package/dist/editor/ai-image-editor/AiImageResultOverlay.js.map +1 -1
- package/dist/editor/bridge/BridgeClient.js +11 -0
- package/dist/editor/bridge/BridgeClient.js.map +1 -1
- package/dist/editor/bridge/protocol.d.ts +61 -0
- package/dist/editor/bridge/protocol.js +3 -0
- package/dist/editor/bridge/protocol.js.map +1 -1
- package/dist/editor/client/EditorShell.js +335 -125
- package/dist/editor/client/EditorShell.js.map +1 -1
- package/dist/editor/client/SessionExpiredOverlay.js +9 -2
- package/dist/editor/client/SessionExpiredOverlay.js.map +1 -1
- 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/editContext.d.ts +92 -11
- package/dist/editor/client/editContext.js.map +1 -1
- package/dist/editor/client/editHistoryReconciliation.d.ts +2 -1
- package/dist/editor/client/editHistoryReconciliation.js +5 -2
- package/dist/editor/client/editHistoryReconciliation.js.map +1 -1
- 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/hooks/useSocketMessageHandler.d.ts +6 -0
- package/dist/editor/client/hooks/useSocketMessageHandler.js +69 -4
- package/dist/editor/client/hooks/useSocketMessageHandler.js.map +1 -1
- package/dist/editor/client/itemsRepository.d.ts +10 -2
- package/dist/editor/client/itemsRepository.js +224 -43
- package/dist/editor/client/itemsRepository.js.map +1 -1
- 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/operations.d.ts +13 -2
- package/dist/editor/client/operations.js +134 -31
- package/dist/editor/client/operations.js.map +1 -1
- package/dist/editor/client/pageModelBuilder.d.ts +6 -0
- package/dist/editor/client/pageModelBuilder.js +74 -7
- package/dist/editor/client/pageModelBuilder.js.map +1 -1
- package/dist/editor/client/ui/EditorChrome.d.ts +2 -2
- package/dist/editor/client/ui/EditorChrome.js +12 -8
- package/dist/editor/client/ui/EditorChrome.js.map +1 -1
- package/dist/editor/client/ui/FullscreenControls.d.ts +3 -5
- package/dist/editor/client/ui/FullscreenControls.js +2 -2
- package/dist/editor/client/ui/FullscreenControls.js.map +1 -1
- 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/commands.d.ts +6 -0
- package/dist/editor/commands/commands.js.map +1 -1
- 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/componentCommands.js +80 -19
- package/dist/editor/commands/componentCommands.js.map +1 -1
- 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/commands/itemCommands.d.ts +9 -0
- package/dist/editor/commands/itemCommands.js +76 -9
- package/dist/editor/commands/itemCommands.js.map +1 -1
- 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/editor-warnings/ValidationErrors.js +4 -4
- package/dist/editor/editor-warnings/ValidationErrors.js.map +1 -1
- package/dist/editor/field-types/AttachmentEditor.js +4 -3
- package/dist/editor/field-types/AttachmentEditor.js.map +1 -1
- package/dist/editor/field-types/DateFieldEditor.js +2 -1
- package/dist/editor/field-types/DateFieldEditor.js.map +1 -1
- package/dist/editor/field-types/DateTimeFieldEditor.js +2 -1
- package/dist/editor/field-types/DateTimeFieldEditor.js.map +1 -1
- package/dist/editor/field-types/DropLinkEditor.js +3 -1
- package/dist/editor/field-types/DropLinkEditor.js.map +1 -1
- package/dist/editor/field-types/DropListEditor.js +3 -1
- package/dist/editor/field-types/DropListEditor.js.map +1 -1
- package/dist/editor/field-types/FieldHistoryBoundary.js +28 -7
- package/dist/editor/field-types/FieldHistoryBoundary.js.map +1 -1
- package/dist/editor/field-types/ImageFieldEditor.js +3 -1
- package/dist/editor/field-types/ImageFieldEditor.js.map +1 -1
- package/dist/editor/field-types/InternalLinkFieldEditor.js +2 -1
- package/dist/editor/field-types/InternalLinkFieldEditor.js.map +1 -1
- package/dist/editor/field-types/LinkFieldEditor.js +2 -1
- package/dist/editor/field-types/LinkFieldEditor.js.map +1 -1
- package/dist/editor/field-types/MultiLineText.js +68 -22
- package/dist/editor/field-types/MultiLineText.js.map +1 -1
- package/dist/editor/field-types/NameValueListEditor.js +3 -1
- package/dist/editor/field-types/NameValueListEditor.js.map +1 -1
- package/dist/editor/field-types/PictureFieldEditor.js +4 -2
- package/dist/editor/field-types/PictureFieldEditor.js.map +1 -1
- package/dist/editor/field-types/RawEditor.js +7 -4
- package/dist/editor/field-types/RawEditor.js.map +1 -1
- package/dist/editor/field-types/RichTextEditor.d.ts +1 -2
- package/dist/editor/field-types/RichTextEditor.js +5 -26
- package/dist/editor/field-types/RichTextEditor.js.map +1 -1
- package/dist/editor/field-types/RichTextEditorComponent.d.ts +1 -2
- package/dist/editor/field-types/RichTextEditorComponent.js +121 -26
- package/dist/editor/field-types/RichTextEditorComponent.js.map +1 -1
- package/dist/editor/field-types/SingleLineText.js +68 -22
- package/dist/editor/field-types/SingleLineText.js.map +1 -1
- package/dist/editor/field-types/TreeListEditor.js +4 -2
- package/dist/editor/field-types/TreeListEditor.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/bridgeRichTextProfile.d.ts +15 -1
- package/dist/editor/field-types/richtext/bridgeRichTextProfile.js +27 -0
- package/dist/editor/field-types/richtext/bridgeRichTextProfile.js.map +1 -1
- package/dist/editor/field-types/richtext/components/EditorDropdown.css +14 -0
- package/dist/editor/field-types/richtext/components/EditorDropdown.d.ts +3 -1
- package/dist/editor/field-types/richtext/components/EditorDropdown.js +33 -8
- package/dist/editor/field-types/richtext/components/EditorDropdown.js.map +1 -1
- package/dist/editor/field-types/richtext/components/ReactSlate.css +23 -54
- package/dist/editor/field-types/richtext/components/ReactSlate.d.ts +10 -1
- package/dist/editor/field-types/richtext/components/ReactSlate.js +373 -174
- package/dist/editor/field-types/richtext/components/ReactSlate.js.map +1 -1
- package/dist/editor/field-types/richtext/components/SimpleRichTextEditor.js +1 -1
- package/dist/editor/field-types/richtext/components/SimpleRichTextEditor.js.map +1 -1
- package/dist/editor/field-types/richtext/components/ToolbarButton.js +13 -5
- package/dist/editor/field-types/richtext/components/ToolbarButton.js.map +1 -1
- package/dist/editor/field-types/richtext/config/pluginFactory.d.ts +2 -0
- package/dist/editor/field-types/richtext/config/pluginFactory.js +2 -1
- package/dist/editor/field-types/richtext/config/pluginFactory.js.map +1 -1
- package/dist/editor/field-types/richtext/hooks/useProfileCache.js +1 -0
- package/dist/editor/field-types/richtext/hooks/useProfileCache.js.map +1 -1
- package/dist/editor/field-types/richtext/hooks/useRichTextProfile.d.ts +0 -2
- package/dist/editor/field-types/richtext/hooks/useRichTextProfile.js +2 -5
- package/dist/editor/field-types/richtext/hooks/useRichTextProfile.js.map +1 -1
- package/dist/editor/field-types/richtext/types.d.ts +47 -2
- package/dist/editor/field-types/richtext/types.js +19 -0
- package/dist/editor/field-types/richtext/types.js.map +1 -1
- 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/conversion.js +108 -32
- package/dist/editor/field-types/richtext/utils/conversion.js.map +1 -1
- package/dist/editor/field-types/richtext/utils/cssClasses.d.ts +27 -0
- package/dist/editor/field-types/richtext/utils/cssClasses.js +98 -0
- package/dist/editor/field-types/richtext/utils/cssClasses.js.map +1 -0
- package/dist/editor/field-types/richtext/utils/plugins.d.ts +40 -1
- package/dist/editor/field-types/richtext/utils/plugins.js +178 -4
- package/dist/editor/field-types/richtext/utils/plugins.js.map +1 -1
- package/dist/editor/field-types/richtext/utils/profileMapper.d.ts +17 -1
- package/dist/editor/field-types/richtext/utils/profileMapper.js +153 -55
- package/dist/editor/field-types/richtext/utils/profileMapper.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/useFormFieldCaretPresence.js +9 -1
- package/dist/editor/field-types/useFormFieldCaretPresence.js.map +1 -1
- package/dist/editor/field-types/useFormFieldSelectionRange.d.ts +20 -13
- package/dist/editor/field-types/useFormFieldSelectionRange.js +40 -14
- package/dist/editor/field-types/useFormFieldSelectionRange.js.map +1 -1
- 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/AiImageSearch.js +1 -163
- package/dist/editor/media-selector/AiImageSearch.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/MediaFolderBrowser.js +326 -106
- package/dist/editor/media-selector/MediaFolderBrowser.js.map +1 -1
- package/dist/editor/media-selector/TreeSelector.js +40 -2
- package/dist/editor/media-selector/TreeSelector.js.map +1 -1
- package/dist/editor/media-selector/UploadZone.js +1 -1
- package/dist/editor/media-selector/UploadZone.js.map +1 -1
- 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/ActiveUsers.js +6 -4
- package/dist/editor/menubar/ActiveUsers.js.map +1 -1
- package/dist/editor/menubar/PageSelector.js +21 -22
- package/dist/editor/menubar/PageSelector.js.map +1 -1
- package/dist/editor/menubar/ToolbarFactory.js +16 -2
- package/dist/editor/menubar/ToolbarFactory.js.map +1 -1
- package/dist/editor/menubar/VersionPreviewCard.js +4 -2
- package/dist/editor/menubar/VersionPreviewCard.js.map +1 -1
- package/dist/editor/menubar/VersionSelector.js +2 -2
- package/dist/editor/menubar/VersionSelector.js.map +1 -1
- package/dist/editor/menubar/WorkflowButton.js +10 -10
- package/dist/editor/menubar/WorkflowButton.js.map +1 -1
- package/dist/editor/menubar/toolbar-sections/CommentsToggleControl.d.ts +13 -0
- package/dist/editor/menubar/toolbar-sections/CommentsToggleControl.js +88 -0
- package/dist/editor/menubar/toolbar-sections/CommentsToggleControl.js.map +1 -0
- package/dist/editor/menubar/toolbar-sections/DeviceSwitchToolbar.d.ts +3 -4
- package/dist/editor/menubar/toolbar-sections/DeviceSwitchToolbar.js +15 -13
- package/dist/editor/menubar/toolbar-sections/DeviceSwitchToolbar.js.map +1 -1
- package/dist/editor/menubar/toolbar-sections/EditControls.d.ts +9 -0
- package/dist/editor/menubar/toolbar-sections/EditControls.js +24 -1
- package/dist/editor/menubar/toolbar-sections/EditControls.js.map +1 -1
- 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/FullscreenControl.js +3 -2
- package/dist/editor/menubar/toolbar-sections/FullscreenControl.js.map +1 -1
- package/dist/editor/menubar/toolbar-sections/InsertControls.js +4 -2
- package/dist/editor/menubar/toolbar-sections/InsertControls.js.map +1 -1
- package/dist/editor/menubar/toolbar-sections/LayoutModeControls.js +3 -2
- package/dist/editor/menubar/toolbar-sections/LayoutModeControls.js.map +1 -1
- package/dist/editor/menubar/toolbar-sections/ReviewCommands.js +2 -2
- package/dist/editor/menubar/toolbar-sections/ReviewCommands.js.map +1 -1
- 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/menubar/toolbar-sections/UndoRedoControls.js +2 -2
- package/dist/editor/menubar/toolbar-sections/UndoRedoControls.js.map +1 -1
- package/dist/editor/menubar/toolbar-sections/UtilityControls.js +7 -7
- package/dist/editor/menubar/toolbar-sections/UtilityControls.js.map +1 -1
- package/dist/editor/menubar/toolbar-sections/ViewportControls.d.ts +3 -4
- package/dist/editor/menubar/toolbar-sections/ViewportControls.js +19 -31
- package/dist/editor/menubar/toolbar-sections/ViewportControls.js.map +1 -1
- package/dist/editor/menubar/toolbar-sections/index.d.ts +2 -1
- package/dist/editor/menubar/toolbar-sections/index.js +2 -1
- package/dist/editor/menubar/toolbar-sections/index.js.map +1 -1
- 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/notifications/useNotifications.js +12 -17
- package/dist/editor/notifications/useNotifications.js.map +1 -1
- 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/BridgeInlineFormatOverlay.d.ts +5 -1
- package/dist/editor/page-editor-chrome/BridgeInlineFormatOverlay.js +60 -10
- package/dist/editor/page-editor-chrome/BridgeInlineFormatOverlay.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/BridgeToolbarDropdown.d.ts +16 -0
- package/dist/editor/page-editor-chrome/BridgeToolbarDropdown.js +23 -0
- package/dist/editor/page-editor-chrome/BridgeToolbarDropdown.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/CommentHighlightings.d.ts +4 -1
- package/dist/editor/page-editor-chrome/CommentHighlightings.js +195 -388
- package/dist/editor/page-editor-chrome/CommentHighlightings.js.map +1 -1
- 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/DragInsertionOverlay.js +21 -17
- package/dist/editor/page-editor-chrome/DragInsertionOverlay.js.map +1 -1
- package/dist/editor/page-editor-chrome/EmptyImageFieldIndicators.d.ts +1 -1
- package/dist/editor/page-editor-chrome/EmptyImageFieldIndicators.js +9 -6
- package/dist/editor/page-editor-chrome/EmptyImageFieldIndicators.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/FieldActionIndicator.d.ts +1 -1
- package/dist/editor/page-editor-chrome/FieldActionIndicator.js +14 -7
- package/dist/editor/page-editor-chrome/FieldActionIndicator.js.map +1 -1
- package/dist/editor/page-editor-chrome/FieldEditedIndicator.js +10 -6
- package/dist/editor/page-editor-chrome/FieldEditedIndicator.js.map +1 -1
- 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/FrameMenu.d.ts +1 -1
- package/dist/editor/page-editor-chrome/FrameMenu.js +13 -11
- package/dist/editor/page-editor-chrome/FrameMenu.js.map +1 -1
- package/dist/editor/page-editor-chrome/FrameMenus.d.ts +1 -1
- package/dist/editor/page-editor-chrome/FrameMenus.js +7 -5
- package/dist/editor/page-editor-chrome/FrameMenus.js.map +1 -1
- package/dist/editor/page-editor-chrome/InlineFieldHistoryButton.d.ts +2 -2
- package/dist/editor/page-editor-chrome/InlineFieldHistoryButton.js +20 -39
- package/dist/editor/page-editor-chrome/InlineFieldHistoryButton.js.map +1 -1
- package/dist/editor/page-editor-chrome/LockedFieldIndicator.d.ts +1 -1
- package/dist/editor/page-editor-chrome/LockedFieldIndicator.js +27 -21
- package/dist/editor/page-editor-chrome/LockedFieldIndicator.js.map +1 -1
- package/dist/editor/page-editor-chrome/NoLayout.js +5 -3
- package/dist/editor/page-editor-chrome/NoLayout.js.map +1 -1
- package/dist/editor/page-editor-chrome/PageEditorChrome.d.ts +1 -1
- package/dist/editor/page-editor-chrome/PageEditorChrome.js +30 -23
- package/dist/editor/page-editor-chrome/PageEditorChrome.js.map +1 -1
- package/dist/editor/page-editor-chrome/PictureEditorOverlay.d.ts +1 -1
- package/dist/editor/page-editor-chrome/PictureEditorOverlay.js +24 -21
- package/dist/editor/page-editor-chrome/PictureEditorOverlay.js.map +1 -1
- package/dist/editor/page-editor-chrome/PlaceholderDropZone.js +10 -4
- package/dist/editor/page-editor-chrome/PlaceholderDropZone.js.map +1 -1
- package/dist/editor/page-editor-chrome/PlaceholderDropZones.d.ts +1 -1
- package/dist/editor/page-editor-chrome/PlaceholderDropZones.js +11 -10
- package/dist/editor/page-editor-chrome/PlaceholderDropZones.js.map +1 -1
- 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/SuggestionHighlightings.d.ts +1 -1
- package/dist/editor/page-editor-chrome/SuggestionHighlightings.js +226 -381
- package/dist/editor/page-editor-chrome/SuggestionHighlightings.js.map +1 -1
- 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/VersionDiffHighlightings.d.ts +1 -1
- package/dist/editor/page-editor-chrome/VersionDiffHighlightings.js +11 -8
- package/dist/editor/page-editor-chrome/VersionDiffHighlightings.js.map +1 -1
- package/dist/editor/page-editor-chrome/overlay/IframeOverlayProvider.d.ts +15 -2
- package/dist/editor/page-editor-chrome/overlay/IframeOverlayProvider.js +70 -9
- package/dist/editor/page-editor-chrome/overlay/IframeOverlayProvider.js.map +1 -1
- 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/geometry.d.ts +15 -0
- package/dist/editor/page-editor-chrome/overlay/geometry.js +40 -0
- package/dist/editor/page-editor-chrome/overlay/geometry.js.map +1 -1
- 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-editor-chrome/useBridgeInlineEditing.d.ts +7 -0
- package/dist/editor/page-editor-chrome/useBridgeInlineEditing.js +63 -5
- package/dist/editor/page-editor-chrome/useBridgeInlineEditing.js.map +1 -1
- package/dist/editor/page-editor-chrome/useBridgeRichTextFieldOptions.d.ts +12 -0
- package/dist/editor/page-editor-chrome/useBridgeRichTextFieldOptions.js +79 -0
- package/dist/editor/page-editor-chrome/useBridgeRichTextFieldOptions.js.map +1 -0
- package/dist/editor/page-editor-chrome/useComponentDragHandle.js +1 -1
- package/dist/editor/page-editor-chrome/useComponentDragHandle.js.map +1 -1
- package/dist/editor/page-editor-chrome/useDragInsertionGesture.js +1 -1
- package/dist/editor/page-editor-chrome/useDragInsertionGesture.js.map +1 -1
- package/dist/editor/page-editor-chrome/usePinnedHoveredComponentId.d.ts +1 -1
- package/dist/editor/page-editor-chrome/usePinnedHoveredComponentId.js +4 -2
- package/dist/editor/page-editor-chrome/usePinnedHoveredComponentId.js.map +1 -1
- 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/DeviceToolbar.d.ts +1 -1
- package/dist/editor/page-viewer/DeviceToolbar.js +8 -3
- package/dist/editor/page-viewer/DeviceToolbar.js.map +1 -1
- 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/EditorForm.js +29 -24
- package/dist/editor/page-viewer/EditorForm.js.map +1 -1
- package/dist/editor/page-viewer/FeedbackMargin.d.ts +57 -0
- package/dist/editor/page-viewer/FeedbackMargin.js +378 -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/MiniMap.d.ts +15 -5
- package/dist/editor/page-viewer/MiniMap.js +175 -67
- package/dist/editor/page-viewer/MiniMap.js.map +1 -1
- package/dist/editor/page-viewer/MinimapDropTargets.d.ts +1 -1
- package/dist/editor/page-viewer/MinimapDropTargets.js +9 -7
- package/dist/editor/page-viewer/MinimapDropTargets.js.map +1 -1
- 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/PageViewer.js +22 -67
- package/dist/editor/page-viewer/PageViewer.js.map +1 -1
- package/dist/editor/page-viewer/PageViewerFrame.d.ts +1 -0
- package/dist/editor/page-viewer/PageViewerFrame.js +631 -229
- package/dist/editor/page-viewer/PageViewerFrame.js.map +1 -1
- 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/bridgeFieldPatch.d.ts +9 -0
- package/dist/editor/page-viewer/bridgeFieldPatch.js +21 -0
- package/dist/editor/page-viewer/bridgeFieldPatch.js.map +1 -1
- package/dist/editor/page-viewer/bridgeInlineEditSession.js +8 -0
- package/dist/editor/page-viewer/bridgeInlineEditSession.js.map +1 -1
- package/dist/editor/page-viewer/bridgeKeyboardShortcuts.d.ts +6 -0
- package/dist/editor/page-viewer/bridgeKeyboardShortcuts.js +19 -1
- package/dist/editor/page-viewer/bridgeKeyboardShortcuts.js.map +1 -1
- 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/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/pageViewContext.d.ts +99 -37
- package/dist/editor/page-viewer/pageViewContext.js +207 -238
- package/dist/editor/page-viewer/pageViewContext.js.map +1 -1
- 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/pageModel.d.ts +12 -0
- package/dist/editor/personalization/ConditionTreeEditor.js +1 -1
- package/dist/editor/personalization/ConditionTreeEditor.js.map +1 -1
- package/dist/editor/personalization/PersonalizationPanel.js +1 -1
- package/dist/editor/personalization/PersonalizationPanel.js.map +1 -1
- 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/Comment.d.ts +10 -1
- package/dist/editor/reviews/Comment.js +47 -26
- package/dist/editor/reviews/Comment.js.map +1 -1
- package/dist/editor/reviews/CommentDisplayPopover.js +29 -25
- package/dist/editor/reviews/CommentDisplayPopover.js.map +1 -1
- package/dist/editor/reviews/CommentEditor.d.ts +25 -1
- package/dist/editor/reviews/CommentEditor.js +158 -47
- package/dist/editor/reviews/CommentEditor.js.map +1 -1
- 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/CommentPopover.d.ts +0 -4
- package/dist/editor/reviews/CommentPopover.js +4 -8
- package/dist/editor/reviews/CommentPopover.js.map +1 -1
- package/dist/editor/reviews/CommentQuote.d.ts +10 -1
- package/dist/editor/reviews/CommentQuote.js +15 -10
- package/dist/editor/reviews/CommentQuote.js.map +1 -1
- 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 +6 -1
- package/dist/editor/reviews/CommentThreadAgentLink.js +4 -4
- package/dist/editor/reviews/CommentThreadAgentLink.js.map +1 -1
- 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/CommentView.d.ts +7 -1
- package/dist/editor/reviews/CommentView.js +24 -6
- package/dist/editor/reviews/CommentView.js.map +1 -1
- package/dist/editor/reviews/Comments.js +5 -14
- package/dist/editor/reviews/Comments.js.map +1 -1
- package/dist/editor/reviews/CreateReviewDialog.js +36 -9
- 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/reviews/FeedbackCard.d.ts +16 -1
- package/dist/editor/reviews/FeedbackCard.js +14 -3
- package/dist/editor/reviews/FeedbackCard.js.map +1 -1
- package/dist/editor/reviews/FeedbackFilters.d.ts +9 -5
- package/dist/editor/reviews/FeedbackFilters.js +15 -36
- package/dist/editor/reviews/FeedbackFilters.js.map +1 -1
- package/dist/editor/reviews/FeedbackModeIntro.d.ts +7 -1
- package/dist/editor/reviews/FeedbackModeIntro.js +11 -6
- package/dist/editor/reviews/FeedbackModeIntro.js.map +1 -1
- package/dist/editor/reviews/MentionText.d.ts +2 -1
- package/dist/editor/reviews/MentionText.js +5 -3
- package/dist/editor/reviews/MentionText.js.map +1 -1
- package/dist/editor/reviews/MultiReviewManager.js +18 -3
- package/dist/editor/reviews/MultiReviewManager.js.map +1 -1
- package/dist/editor/reviews/ReviewItemsPanel.js +4 -0
- package/dist/editor/reviews/ReviewItemsPanel.js.map +1 -1
- package/dist/editor/reviews/SuggestedEdit.d.ts +10 -1
- package/dist/editor/reviews/SuggestedEdit.js +77 -10
- package/dist/editor/reviews/SuggestedEdit.js.map +1 -1
- package/dist/editor/reviews/SuggestionCommentThread.d.ts +5 -1
- package/dist/editor/reviews/SuggestionCommentThread.js +48 -17
- package/dist/editor/reviews/SuggestionCommentThread.js.map +1 -1
- 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/applySuggestedEditActions.js +7 -1
- package/dist/editor/reviews/applySuggestedEditActions.js.map +1 -1
- 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/commentAi.d.ts +4 -2
- package/dist/editor/reviews/commentAi.js +19 -12
- package/dist/editor/reviews/commentAi.js.map +1 -1
- package/dist/editor/reviews/commentImages.d.ts +1 -2
- package/dist/editor/reviews/commentImages.js +1 -37
- package/dist/editor/reviews/commentImages.js.map +1 -1
- 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/feedbackAvatar.js +2 -1
- package/dist/editor/reviews/feedbackAvatar.js.map +1 -1
- 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/feedbackSelection.js +7 -3
- package/dist/editor/reviews/feedbackSelection.js.map +1 -1
- 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/openCommentsFeedback.d.ts +1 -1
- package/dist/editor/reviews/openCommentsFeedback.js +2 -1
- package/dist/editor/reviews/openCommentsFeedback.js.map +1 -1
- package/dist/editor/reviews/pendingReviewSelection.d.ts +13 -0
- package/dist/editor/reviews/pendingReviewSelection.js +29 -0
- package/dist/editor/reviews/pendingReviewSelection.js.map +1 -0
- package/dist/editor/reviews/requestReview.d.ts +27 -0
- package/dist/editor/reviews/requestReview.js +36 -0
- package/dist/editor/reviews/requestReview.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 +49 -14
- package/dist/editor/reviews/useCommentImagePaste.js +165 -62
- package/dist/editor/reviews/useCommentImagePaste.js.map +1 -1
- 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/agentService.d.ts +101 -5
- package/dist/editor/services/agentService.js +16 -0
- package/dist/editor/services/agentService.js.map +1 -1
- package/dist/editor/services/agentStatus.d.ts +1 -0
- package/dist/editor/services/agentStatus.js +14 -0
- package/dist/editor/services/agentStatus.js.map +1 -1
- package/dist/editor/services/aiService.d.ts +2 -0
- package/dist/editor/services/aiService.js.map +1 -1
- package/dist/editor/services/contentService.d.ts +11 -1
- package/dist/editor/services/contentService.js +2 -1
- package/dist/editor/services/contentService.js.map +1 -1
- package/dist/editor/services/editService.d.ts +2 -0
- package/dist/editor/services/editService.js.map +1 -1
- package/dist/editor/services/indexService.d.ts +1 -0
- package/dist/editor/services/indexService.js +4 -0
- package/dist/editor/services/indexService.js.map +1 -1
- 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/reviewsService.d.ts +6 -1
- package/dist/editor/services/reviewsService.js +14 -6
- package/dist/editor/services/reviewsService.js.map +1 -1
- package/dist/editor/services/serviceHelper.d.ts +17 -1
- package/dist/editor/services/serviceHelper.js +67 -12
- package/dist/editor/services/serviceHelper.js.map +1 -1
- 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/services/suggestedEditsService.d.ts +1 -0
- package/dist/editor/services/suggestedEditsService.js +7 -0
- package/dist/editor/services/suggestedEditsService.js.map +1 -1
- package/dist/editor/settings/MigrationJournalCard.js +2 -2
- package/dist/editor/settings/MigrationJournalCard.js.map +1 -1
- package/dist/editor/settings/StatusSummary.js +5 -2
- package/dist/editor/settings/StatusSummary.js.map +1 -1
- package/dist/editor/settings/index/CollectionWarningsDisplay.js +1 -1
- package/dist/editor/settings/index/CollectionWarningsDisplay.js.map +1 -1
- package/dist/editor/settings/index/IndexGenerationsSection.d.ts +4 -5
- package/dist/editor/settings/index/IndexGenerationsSection.js +83 -33
- package/dist/editor/settings/index/IndexGenerationsSection.js.map +1 -1
- package/dist/editor/settings/index/RecentBatchesList.js +2 -1
- package/dist/editor/settings/index/RecentBatchesList.js.map +1 -1
- package/dist/editor/settings/panels/AgentProfileConfigPanel.js +1 -1
- package/dist/editor/settings/panels/AgentProfileConfigPanel.js.map +1 -1
- package/dist/editor/settings/panels/AgentToolsPanel.js +1 -1
- package/dist/editor/settings/panels/AgentToolsPanel.js.map +1 -1
- package/dist/editor/settings/panels/JavaScriptToolAgentPanel.js +1 -1
- package/dist/editor/settings/panels/JavaScriptToolAgentPanel.js.map +1 -1
- package/dist/editor/settings/panels/McpAccessPanel.d.ts +7 -0
- package/dist/editor/settings/panels/McpAccessPanel.js +96 -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/ModelConfigPanel.js +1 -0
- package/dist/editor/settings/panels/ModelConfigPanel.js.map +1 -1
- package/dist/editor/settings/panels/ModelsPanel.js +60 -6
- package/dist/editor/settings/panels/ModelsPanel.js.map +1 -1
- package/dist/editor/settings/panels/PersistentLogsPanel.js +2 -1
- package/dist/editor/settings/panels/PersistentLogsPanel.js.map +1 -1
- package/dist/editor/settings/panels/ProjectTemplateAgentPanel.js +1 -1
- package/dist/editor/settings/panels/ProjectTemplateAgentPanel.js.map +1 -1
- package/dist/editor/settings/panels/ProvidersPanel.js +2 -1
- package/dist/editor/settings/panels/ProvidersPanel.js.map +1 -1
- package/dist/editor/settings/panels/SearchConfigPanel.js +6 -5
- package/dist/editor/settings/panels/SearchConfigPanel.js.map +1 -1
- 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/settings/panels/StatusPanel.js +5 -6
- package/dist/editor/settings/panels/StatusPanel.js.map +1 -1
- package/dist/editor/settings/panels/UserPreferencesPanel.js +5 -2
- package/dist/editor/settings/panels/UserPreferencesPanel.js.map +1 -1
- package/dist/editor/settings/panels/index.d.ts +2 -0
- package/dist/editor/settings/panels/index.js +2 -0
- package/dist/editor/settings/panels/index.js.map +1 -1
- package/dist/editor/sidebar/ComponentPalette.js +7 -3
- package/dist/editor/sidebar/ComponentPalette.js.map +1 -1
- package/dist/editor/sidebar/ComponentTree.d.ts +1 -1
- package/dist/editor/sidebar/ComponentTree.js +37 -58
- package/dist/editor/sidebar/ComponentTree.js.map +1 -1
- package/dist/editor/sidebar/DictionaryEditor.js +2 -1
- package/dist/editor/sidebar/DictionaryEditor.js.map +1 -1
- package/dist/editor/sidebar/EditHistory.js +5 -4
- package/dist/editor/sidebar/EditHistory.js.map +1 -1
- 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/OperationItem.js +4 -1
- package/dist/editor/sidebar/OperationItem.js.map +1 -1
- package/dist/editor/sidebar/Sessions.js +3 -1
- package/dist/editor/sidebar/Sessions.js.map +1 -1
- package/dist/editor/sidebar/Validation.js +1 -1
- package/dist/editor/sidebar/Validation.js.map +1 -1
- package/dist/editor/sidebar/Workbox.js +3 -108
- package/dist/editor/sidebar/Workbox.js.map +1 -1
- package/dist/editor/sidebar/liveComponentThumbnails.d.ts +7 -3
- package/dist/editor/sidebar/liveComponentThumbnails.js +26 -16
- 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/ItemNameDialogNew.js +11 -2
- package/dist/editor/ui/ItemNameDialogNew.js.map +1 -1
- package/dist/editor/ui/ItemSearch.d.ts +2 -0
- package/dist/editor/ui/ItemSearch.js +2 -2
- package/dist/editor/ui/ItemSearch.js.map +1 -1
- 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/PublishDialog.d.ts +2 -0
- package/dist/editor/ui/PublishDialog.js +4 -1
- package/dist/editor/ui/PublishDialog.js.map +1 -1
- package/dist/editor/ui/PublishItemDialog.js +3 -2
- package/dist/editor/ui/PublishItemDialog.js.map +1 -1
- package/dist/editor/ui/PublishReadinessSummary.js +1 -1
- package/dist/editor/ui/PublishReadinessSummary.js.map +1 -1
- package/dist/editor/ui/PublishRestrictionsDialog.d.ts +33 -0
- package/dist/editor/ui/PublishRestrictionsDialog.js +208 -38
- package/dist/editor/ui/PublishRestrictionsDialog.js.map +1 -1
- 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/ui/WorkboxItemsTable.js +1 -1
- package/dist/editor/ui/WorkboxItemsTable.js.map +1 -1
- 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/utils/itemConverters.js +9 -0
- package/dist/editor/utils/itemConverters.js.map +1 -1
- package/dist/editor/utils/keyboardNavigation.js +54 -4
- package/dist/editor/utils/keyboardNavigation.js.map +1 -1
- package/dist/editor/utils.d.ts +4 -4
- package/dist/editor/utils.js +9 -8
- package/dist/editor/utils.js.map +1 -1
- 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/editor/views/CompareView.js +3 -4
- package/dist/editor/views/CompareView.js.map +1 -1
- package/dist/editor/views/EditorSlot.js +10 -4
- package/dist/editor/views/EditorSlot.js.map +1 -1
- package/dist/editor/views/ItemEditor.d.ts +3 -1
- package/dist/editor/views/ItemEditor.js +43 -38
- package/dist/editor/views/ItemEditor.js.map +1 -1
- package/dist/editor/views/ItemEditorPane.js +3 -3
- package/dist/editor/views/ItemEditorPane.js.map +1 -1
- package/dist/editor/views/SingleEditView.js +10 -32
- package/dist/editor/views/SingleEditView.js.map +1 -1
- package/dist/editor/views/editorSlotContext.js +62 -90
- package/dist/editor/views/editorSlotContext.js.map +1 -1
- package/dist/index.d.ts +11 -5
- package/dist/index.js +9 -4
- package/dist/index.js.map +1 -1
- package/dist/lib/utils.d.ts +5 -0
- package/dist/lib/utils.js +7 -0
- package/dist/lib/utils.js.map +1 -1
- package/dist/licensing/FeatureGate.js +1 -1
- package/dist/licensing/FeatureGate.js.map +1 -1
- package/dist/licensing/LicenseContext.js +31 -17
- package/dist/licensing/LicenseContext.js.map +1 -1
- package/dist/revision.d.ts +2 -2
- package/dist/revision.js +2 -2
- package/dist/setup/services/setupWizardService.d.ts +6 -2
- package/dist/setup/services/setupWizardService.js +10 -0
- package/dist/setup/services/setupWizardService.js.map +1 -1
- package/dist/setup/wizard/steps/AddModelDialog.js +1 -0
- package/dist/setup/wizard/steps/AddModelDialog.js.map +1 -1
- package/dist/setup/wizard/steps/ImportModelDialog.js +2 -1
- package/dist/setup/wizard/steps/ImportModelDialog.js.map +1 -1
- package/dist/splash-screen/ModernSplashScreen.js +8 -6
- package/dist/splash-screen/ModernSplashScreen.js.map +1 -1
- package/dist/splash-screen/RecentPages.js +8 -5
- package/dist/splash-screen/RecentPages.js.map +1 -1
- package/dist/task-board/TaskBoardWorkspace.js +218 -35
- package/dist/task-board/TaskBoardWorkspace.js.map +1 -1
- 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/GoalDataView.d.ts +22 -1
- package/dist/task-board/components/GoalDataView.js +63 -17
- package/dist/task-board/components/GoalDataView.js.map +1 -1
- 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/GoalsMatrix.js +33 -6
- package/dist/task-board/components/GoalsMatrix.js.map +1 -1
- 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/ProjectBudgetBanner.js +1 -1
- package/dist/task-board/components/ProjectBudgetBanner.js.map +1 -1
- package/dist/task-board/components/ProjectGoalsPanel.js +66 -13
- package/dist/task-board/components/ProjectGoalsPanel.js.map +1 -1
- 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/components/TaskAgentPanel.d.ts +2 -0
- package/dist/task-board/components/TaskAgentPanel.js +5 -4
- package/dist/task-board/components/TaskAgentPanel.js.map +1 -1
- package/dist/task-board/components/TaskDetailPanel.js +22 -16
- package/dist/task-board/components/TaskDetailPanel.js.map +1 -1
- package/dist/task-board/components/WizardCommunicationCards.js +1 -1
- package/dist/task-board/components/WizardCommunicationCards.js.map +1 -1
- package/dist/task-board/components/WizardCommunicationCenter.d.ts +2 -0
- package/dist/task-board/components/WizardCommunicationCenter.js +5 -3
- package/dist/task-board/components/WizardCommunicationCenter.js.map +1 -1
- package/dist/task-board/components/WizardCommunicationShared.js +2 -1
- package/dist/task-board/components/WizardCommunicationShared.js.map +1 -1
- package/dist/task-board/components/WizardTask.d.ts +2 -0
- package/dist/task-board/components/WizardTask.js +2 -2
- package/dist/task-board/components/WizardTask.js.map +1 -1
- package/dist/task-board/components/WizardTaskDetailsPanel.d.ts +4 -0
- package/dist/task-board/components/WizardTaskDetailsPanel.js +16 -3
- package/dist/task-board/components/WizardTaskDetailsPanel.js.map +1 -1
- 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/services/taskService.d.ts +1 -2
- package/dist/task-board/services/taskService.js +0 -3
- package/dist/task-board/services/taskService.js.map +1 -1
- 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/types.d.ts +24 -7
- package/dist/task-board/utils/projectDashboardModel.js +14 -0
- package/dist/task-board/utils/projectDashboardModel.js.map +1 -1
- package/dist/task-board/views/DependencyGraphView.d.ts +22 -0
- package/dist/task-board/views/DependencyGraphView.js +111 -14
- package/dist/task-board/views/DependencyGraphView.js.map +1 -1
- package/dist/task-board/views/KanbanView.js +8 -10
- package/dist/task-board/views/KanbanView.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/Tour.js +4 -1
- package/dist/tour/Tour.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/dist/types.d.ts +85 -1
- package/package.json +6 -2
- package/styles.css +74 -3
- 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
|
@@ -7,9 +7,8 @@ import { Button } from "../../components/ui/button";
|
|
|
7
7
|
import { CloseButton } from "../../components/ui/close-button";
|
|
8
8
|
import { Textarea } from "../../components/ui/textarea";
|
|
9
9
|
import { Tooltip, TooltipContent, TooltipTrigger, } from "../../components/ui/tooltip";
|
|
10
|
-
import DialogButtons from "../ui/DialogButtons";
|
|
11
10
|
import { Popover, PopoverContent, PopoverTrigger, } from "../../components/ui/popover";
|
|
12
|
-
import { Check, ChevronDown, Cpu, X, Upload, Loader2, Image as ImageIcon, FolderOpen, FolderPlus, Lightbulb, Sparkles, Search,
|
|
11
|
+
import { AlertCircle, ArrowUp, Check, ChevronDown, Cpu, X, Upload, Loader2, Image as ImageIcon, ImagePlus, FolderOpen, FolderPlus, Lightbulb, Sparkles, Search, } from "lucide-react";
|
|
13
12
|
import { cn } from "../../lib/utils";
|
|
14
13
|
import { useEditContext, useEditContextRef } from "../client/editContext";
|
|
15
14
|
import { closeAgent, startSuggestionAgent, awaitAgentResponse, } from "../services/agentService";
|
|
@@ -52,13 +51,94 @@ export function formatFolderPath(path) {
|
|
|
52
51
|
}
|
|
53
52
|
return segments.join(" / ");
|
|
54
53
|
}
|
|
54
|
+
const MODEL_NAME_ACRONYMS = {
|
|
55
|
+
ai: "AI",
|
|
56
|
+
gpt: "GPT",
|
|
57
|
+
hd: "HD",
|
|
58
|
+
sd: "SD",
|
|
59
|
+
sdxl: "SDXL",
|
|
60
|
+
xl: "XL",
|
|
61
|
+
};
|
|
62
|
+
/**
|
|
63
|
+
* Turns an API model id into a readable name, dropping the provider prefix:
|
|
64
|
+
* "google/gemini-3.1-flash-image" -> "Gemini 3.1 Flash Image",
|
|
65
|
+
* "gpt-image-1-mini" -> "GPT Image 1 Mini".
|
|
66
|
+
* Names that already read as display names (contain spaces) stay unchanged.
|
|
67
|
+
*/
|
|
68
|
+
export function formatImageModelName(name) {
|
|
69
|
+
const trimmed = (name || "").trim();
|
|
70
|
+
if (!trimmed || /\s/.test(trimmed))
|
|
71
|
+
return trimmed;
|
|
72
|
+
const modelPart = trimmed.slice(trimmed.lastIndexOf("/") + 1);
|
|
73
|
+
const words = modelPart.split(/[-_]+/).filter(Boolean);
|
|
74
|
+
if (words.length === 0)
|
|
75
|
+
return trimmed;
|
|
76
|
+
return words
|
|
77
|
+
.map((word) => {
|
|
78
|
+
const acronym = MODEL_NAME_ACRONYMS[word.toLowerCase()];
|
|
79
|
+
if (acronym)
|
|
80
|
+
return acronym;
|
|
81
|
+
return word.charAt(0).toUpperCase() + word.slice(1);
|
|
82
|
+
})
|
|
83
|
+
.join(" ");
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* One-line message for a failed service call. A bare summary such as
|
|
87
|
+
* "Forbidden" says nothing, so the details are appended when they add to it.
|
|
88
|
+
*/
|
|
89
|
+
export function describeServiceError(result, fallback) {
|
|
90
|
+
const summary = result.summary?.trim();
|
|
91
|
+
const details = result.details?.trim();
|
|
92
|
+
if (summary && details && details !== summary) {
|
|
93
|
+
return `${summary}: ${details}`;
|
|
94
|
+
}
|
|
95
|
+
return summary || details || fallback;
|
|
96
|
+
}
|
|
97
|
+
/** Label for the submit shortcut, matching the platform's modifier key. */
|
|
98
|
+
function getSubmitShortcutLabel() {
|
|
99
|
+
if (typeof navigator === "undefined")
|
|
100
|
+
return "Ctrl+Enter";
|
|
101
|
+
return /Mac|iPhone|iPad|iPod/i.test(navigator.userAgent)
|
|
102
|
+
? "⌘Enter"
|
|
103
|
+
: "Ctrl+Enter";
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Ratios every configured image provider can honour. OpenRouter passes them
|
|
107
|
+
* through; the OpenAI client maps them to its closest fixed size.
|
|
108
|
+
*/
|
|
109
|
+
export const ASPECT_RATIO_OPTIONS = [
|
|
110
|
+
{ value: "1:1", description: "Square", ratio: 1 },
|
|
111
|
+
{ value: "4:3", description: "Landscape", ratio: 4 / 3 },
|
|
112
|
+
{ value: "3:2", description: "Landscape", ratio: 3 / 2 },
|
|
113
|
+
{ value: "16:9", description: "Wide", ratio: 16 / 9 },
|
|
114
|
+
{ value: "3:4", description: "Portrait", ratio: 3 / 4 },
|
|
115
|
+
{ value: "2:3", description: "Portrait", ratio: 2 / 3 },
|
|
116
|
+
{ value: "9:16", description: "Tall", ratio: 9 / 16 },
|
|
117
|
+
];
|
|
118
|
+
/** Landscape is the safer default for web imagery when nothing else is known. */
|
|
119
|
+
const DEFAULT_ASPECT_RATIO = "3:2";
|
|
120
|
+
/** The option closest to a width / height ratio, or undefined for no ratio. */
|
|
121
|
+
export function nearestAspectRatio(ratio) {
|
|
122
|
+
if (!ratio || !Number.isFinite(ratio) || ratio <= 0)
|
|
123
|
+
return undefined;
|
|
124
|
+
let best;
|
|
125
|
+
let bestDistance = Number.POSITIVE_INFINITY;
|
|
126
|
+
for (const option of ASPECT_RATIO_OPTIONS) {
|
|
127
|
+
const distance = Math.abs(Math.log(option.ratio / ratio));
|
|
128
|
+
if (distance < bestDistance) {
|
|
129
|
+
best = option;
|
|
130
|
+
bestDistance = distance;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
return best;
|
|
134
|
+
}
|
|
55
135
|
const IMAGE_MODEL_STORAGE_KEY = "aiImageEditor.selectedModelId";
|
|
56
136
|
const AI_IMAGE_EDITOR_OVERLAY_ID = "ai-image-editor";
|
|
57
137
|
/** /sitecore/media library */
|
|
58
138
|
const MEDIA_LIBRARY_ROOT_ID = "3D6658D8-A0BF-4E75-B3E2-D050FABCF4E1";
|
|
59
139
|
/** Media Folder template */
|
|
60
140
|
const MEDIA_FOLDER_TEMPLATE_ID = "FE5DD826-48C6-436D-B87A-7C4210C7413B";
|
|
61
|
-
export const AiImageEditorDialog = forwardRef(({ open, onClose, onComplete, fieldDescriptor, initialPrompt = "", originalRawValue, variantName, currentImageSrc, currentMediaItemId, }, ref) => {
|
|
141
|
+
export const AiImageEditorDialog = forwardRef(({ open, onClose, onComplete, fieldDescriptor, initialPrompt = "", originalRawValue, variantName, currentImageSrc, currentMediaItemId, lockedAspectRatio, }, ref) => {
|
|
62
142
|
const editContext = useEditContext();
|
|
63
143
|
const editContextRef = useEditContextRef();
|
|
64
144
|
const itemsRepository = editContext?.itemsRepository;
|
|
@@ -80,14 +160,59 @@ export const AiImageEditorDialog = forwardRef(({ open, onClose, onComplete, fiel
|
|
|
80
160
|
const [uploading, setUploading] = useState(false);
|
|
81
161
|
const [browsingMedia, setBrowsingMedia] = useState(false);
|
|
82
162
|
const initialImageLoadedRef = useRef(false);
|
|
83
|
-
//
|
|
84
|
-
|
|
85
|
-
const [
|
|
163
|
+
// One prompt for both modes: text typed before adding an image carries
|
|
164
|
+
// over as the edit instruction instead of being hidden.
|
|
165
|
+
const [prompt, setPrompt] = useState(initialPrompt);
|
|
166
|
+
const promptRef = useRef(null);
|
|
86
167
|
// Image model state
|
|
87
168
|
const [imageModels, setImageModels] = useState([]);
|
|
88
169
|
const [selectedImageModelId, setSelectedImageModelId] = useState("");
|
|
89
170
|
const [imageModelsLoading, setImageModelsLoading] = useState(false);
|
|
171
|
+
// Why the model list is empty (request failed or nothing configured for
|
|
172
|
+
// this user); bumping the reload key fetches the list again.
|
|
173
|
+
const [imageModelsError, setImageModelsError] = useState(null);
|
|
174
|
+
const [imageModelsReloadKey, setImageModelsReloadKey] = useState(0);
|
|
90
175
|
const [imageModelPopoverOpen, setImageModelPopoverOpen] = useState(false);
|
|
176
|
+
// Output aspect ratio: the variant's lock wins, then the source image's
|
|
177
|
+
// own ratio in edit mode, then a landscape default. A manual choice is
|
|
178
|
+
// never overridden by a later automatic one.
|
|
179
|
+
const lockedAspectRatioOption = useMemo(() => nearestAspectRatio(lockedAspectRatio), [lockedAspectRatio]);
|
|
180
|
+
const [aspectRatio, setAspectRatio] = useState(() => lockedAspectRatioOption?.value ?? DEFAULT_ASPECT_RATIO);
|
|
181
|
+
const aspectRatioManuallySetRef = useRef(false);
|
|
182
|
+
const [aspectRatioPopoverOpen, setAspectRatioPopoverOpen] = useState(false);
|
|
183
|
+
const [addImagePopoverOpen, setAddImagePopoverOpen] = useState(false);
|
|
184
|
+
// True once the field's current image has been fetched (or that fetch
|
|
185
|
+
// failed), so the dialog knows whether it is editing or generating.
|
|
186
|
+
const [initialImageSettled, setInitialImageSettled] = useState(false);
|
|
187
|
+
useEffect(() => {
|
|
188
|
+
if (!lockedAspectRatioOption || aspectRatioManuallySetRef.current)
|
|
189
|
+
return;
|
|
190
|
+
setAspectRatio(lockedAspectRatioOption.value);
|
|
191
|
+
}, [lockedAspectRatioOption]);
|
|
192
|
+
const firstImageUrl = images[0]?.thumbnailUrl;
|
|
193
|
+
useEffect(() => {
|
|
194
|
+
if (!firstImageUrl ||
|
|
195
|
+
lockedAspectRatioOption ||
|
|
196
|
+
aspectRatioManuallySetRef.current ||
|
|
197
|
+
typeof Image === "undefined") {
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
let cancelled = false;
|
|
201
|
+
const probe = new Image();
|
|
202
|
+
probe.onload = () => {
|
|
203
|
+
if (cancelled || aspectRatioManuallySetRef.current)
|
|
204
|
+
return;
|
|
205
|
+
const option = nearestAspectRatio(probe.naturalHeight > 0
|
|
206
|
+
? probe.naturalWidth / probe.naturalHeight
|
|
207
|
+
: undefined);
|
|
208
|
+
if (option)
|
|
209
|
+
setAspectRatio(option.value);
|
|
210
|
+
};
|
|
211
|
+
probe.src = firstImageUrl;
|
|
212
|
+
return () => {
|
|
213
|
+
cancelled = true;
|
|
214
|
+
};
|
|
215
|
+
}, [firstImageUrl, lockedAspectRatioOption]);
|
|
91
216
|
// Suggestion state
|
|
92
217
|
const [suggesting, setSuggesting] = useState(false);
|
|
93
218
|
// Submission state
|
|
@@ -167,7 +292,8 @@ export const AiImageEditorDialog = forwardRef(({ open, onClose, onComplete, fiel
|
|
|
167
292
|
]);
|
|
168
293
|
const imageModelOptions = useMemo(() => imageModels.map((model) => ({
|
|
169
294
|
value: model.id,
|
|
170
|
-
label: model.name || model.id,
|
|
295
|
+
label: formatImageModelName(model.name || model.id),
|
|
296
|
+
rawName: model.name || model.id,
|
|
171
297
|
description: model.providerName
|
|
172
298
|
? model.isDefault
|
|
173
299
|
? `${model.providerName} - Default`
|
|
@@ -192,6 +318,7 @@ export const AiImageEditorDialog = forwardRef(({ open, onClose, onComplete, fiel
|
|
|
192
318
|
let cancelled = false;
|
|
193
319
|
const loadImageModels = async () => {
|
|
194
320
|
setImageModelsLoading(true);
|
|
321
|
+
setImageModelsError(null);
|
|
195
322
|
try {
|
|
196
323
|
const result = await getImageModels();
|
|
197
324
|
if (cancelled)
|
|
@@ -199,9 +326,13 @@ export const AiImageEditorDialog = forwardRef(({ open, onClose, onComplete, fiel
|
|
|
199
326
|
if (result.type !== "success" || !result.data) {
|
|
200
327
|
setImageModels([]);
|
|
201
328
|
setSelectedImageModelId("");
|
|
329
|
+
setImageModelsError(describeServiceError(result, "Could not load image models"));
|
|
202
330
|
return;
|
|
203
331
|
}
|
|
204
332
|
const models = result.data.models ?? [];
|
|
333
|
+
if (models.length === 0) {
|
|
334
|
+
setImageModelsError("No image models are available to your account");
|
|
335
|
+
}
|
|
205
336
|
const defaultModelId = result.data.defaultModelId ||
|
|
206
337
|
models.find((model) => model.isDefault)?.id ||
|
|
207
338
|
models[0]?.id ||
|
|
@@ -218,6 +349,9 @@ export const AiImageEditorDialog = forwardRef(({ open, onClose, onComplete, fiel
|
|
|
218
349
|
console.error("[AiImageEditorDialog] Failed to load models:", err);
|
|
219
350
|
setImageModels([]);
|
|
220
351
|
setSelectedImageModelId("");
|
|
352
|
+
setImageModelsError(err instanceof Error && err.message
|
|
353
|
+
? `Could not load image models: ${err.message}`
|
|
354
|
+
: "Could not load image models");
|
|
221
355
|
}
|
|
222
356
|
}
|
|
223
357
|
finally {
|
|
@@ -230,7 +364,7 @@ export const AiImageEditorDialog = forwardRef(({ open, onClose, onComplete, fiel
|
|
|
230
364
|
return () => {
|
|
231
365
|
cancelled = true;
|
|
232
366
|
};
|
|
233
|
-
}, [open]);
|
|
367
|
+
}, [open, imageModelsReloadKey]);
|
|
234
368
|
useEffect(() => {
|
|
235
369
|
if (selectedImageModelId &&
|
|
236
370
|
imageModels.some((model) => model.id === selectedImageModelId)) {
|
|
@@ -308,7 +442,7 @@ export const AiImageEditorDialog = forwardRef(({ open, onClose, onComplete, fiel
|
|
|
308
442
|
}, [editContext, handleFileUpload]);
|
|
309
443
|
// Search media library with generated description
|
|
310
444
|
const handleSearchMedia = useCallback(async () => {
|
|
311
|
-
if (!editContext?.selectMedia || !
|
|
445
|
+
if (!editContext?.selectMedia || !prompt.trim())
|
|
312
446
|
return;
|
|
313
447
|
setBrowsingMedia(true);
|
|
314
448
|
setError(null);
|
|
@@ -317,7 +451,7 @@ export const AiImageEditorDialog = forwardRef(({ open, onClose, onComplete, fiel
|
|
|
317
451
|
const mediaId = await editContext.selectMedia({
|
|
318
452
|
selectedIdPath: "",
|
|
319
453
|
mode: "images",
|
|
320
|
-
initialSearchTerm:
|
|
454
|
+
initialSearchTerm: prompt.trim(),
|
|
321
455
|
});
|
|
322
456
|
if (!mediaId) {
|
|
323
457
|
setBrowsingMedia(false);
|
|
@@ -350,7 +484,7 @@ export const AiImageEditorDialog = forwardRef(({ open, onClose, onComplete, fiel
|
|
|
350
484
|
finally {
|
|
351
485
|
setBrowsingMedia(false);
|
|
352
486
|
}
|
|
353
|
-
}, [editContext, handleFileUpload,
|
|
487
|
+
}, [editContext, handleFileUpload, prompt]);
|
|
354
488
|
// Delete an uploaded image
|
|
355
489
|
const handleDeleteImage = useCallback(async (imageId) => {
|
|
356
490
|
setImages((prev) => {
|
|
@@ -385,20 +519,39 @@ export const AiImageEditorDialog = forwardRef(({ open, onClose, onComplete, fiel
|
|
|
385
519
|
handleFileUpload(files);
|
|
386
520
|
}
|
|
387
521
|
}, [handleFileUpload]);
|
|
388
|
-
// Drag and drop
|
|
522
|
+
// Drag and drop: the whole dialog is the drop target. dragenter/dragleave
|
|
523
|
+
// fire for every child the pointer crosses, so a depth counter tells a
|
|
524
|
+
// real leave from a hop between children.
|
|
525
|
+
const dragDepthRef = useRef(0);
|
|
526
|
+
const isFileDrag = (e) => Array.from(e.dataTransfer?.types ?? []).includes("Files");
|
|
527
|
+
const handleDragEnter = useCallback((e) => {
|
|
528
|
+
if (!isFileDrag(e))
|
|
529
|
+
return;
|
|
530
|
+
e.preventDefault();
|
|
531
|
+
e.stopPropagation();
|
|
532
|
+
dragDepthRef.current += 1;
|
|
533
|
+
setIsDragOver(true);
|
|
534
|
+
}, []);
|
|
389
535
|
const handleDragOver = useCallback((e) => {
|
|
536
|
+
if (!isFileDrag(e))
|
|
537
|
+
return;
|
|
390
538
|
e.preventDefault();
|
|
391
539
|
e.stopPropagation();
|
|
392
540
|
setIsDragOver(true);
|
|
393
541
|
}, []);
|
|
394
542
|
const handleDragLeave = useCallback((e) => {
|
|
543
|
+
if (!isFileDrag(e))
|
|
544
|
+
return;
|
|
395
545
|
e.preventDefault();
|
|
396
546
|
e.stopPropagation();
|
|
397
|
-
|
|
547
|
+
dragDepthRef.current = Math.max(0, dragDepthRef.current - 1);
|
|
548
|
+
if (dragDepthRef.current === 0)
|
|
549
|
+
setIsDragOver(false);
|
|
398
550
|
}, []);
|
|
399
551
|
const handleDrop = useCallback((e) => {
|
|
400
552
|
e.preventDefault();
|
|
401
553
|
e.stopPropagation();
|
|
554
|
+
dragDepthRef.current = 0;
|
|
402
555
|
setIsDragOver(false);
|
|
403
556
|
if (e.dataTransfer.files && e.dataTransfer.files.length > 0) {
|
|
404
557
|
// Filter to only image files
|
|
@@ -424,8 +577,8 @@ export const AiImageEditorDialog = forwardRef(({ open, onClose, onComplete, fiel
|
|
|
424
577
|
}, []);
|
|
425
578
|
// Submit the prompt to start the backend image job (no agent)
|
|
426
579
|
const handleSubmit = useCallback(async () => {
|
|
427
|
-
const
|
|
428
|
-
const activePrompt =
|
|
580
|
+
const withSourceImages = images.length > 0;
|
|
581
|
+
const activePrompt = prompt;
|
|
429
582
|
if (!activePrompt.trim())
|
|
430
583
|
return;
|
|
431
584
|
if (!fieldDescriptor) {
|
|
@@ -443,7 +596,7 @@ export const AiImageEditorDialog = forwardRef(({ open, onClose, onComplete, fiel
|
|
|
443
596
|
setSubmitting(true);
|
|
444
597
|
setError(null);
|
|
445
598
|
try {
|
|
446
|
-
const sourceImages =
|
|
599
|
+
const sourceImages = withSourceImages
|
|
447
600
|
? await Promise.all(images.map(async (img) => {
|
|
448
601
|
if (!img.file)
|
|
449
602
|
throw new Error(`Missing image file: ${img.fileName}`);
|
|
@@ -463,10 +616,11 @@ export const AiImageEditorDialog = forwardRef(({ open, onClose, onComplete, fiel
|
|
|
463
616
|
variantName,
|
|
464
617
|
pageItemId: editContext.page?.item?.id,
|
|
465
618
|
targetFolderId,
|
|
619
|
+
aspectRatio: aspectRatio || undefined,
|
|
466
620
|
sourceImages,
|
|
467
621
|
}, editContext.sessionId);
|
|
468
622
|
if (response.type !== "success") {
|
|
469
|
-
setError(response
|
|
623
|
+
setError(describeServiceError(response, "Failed to start image job"));
|
|
470
624
|
setSubmitting(false);
|
|
471
625
|
return;
|
|
472
626
|
}
|
|
@@ -480,8 +634,7 @@ export const AiImageEditorDialog = forwardRef(({ open, onClose, onComplete, fiel
|
|
|
480
634
|
}
|
|
481
635
|
}, [
|
|
482
636
|
images,
|
|
483
|
-
|
|
484
|
-
generatePrompt,
|
|
637
|
+
prompt,
|
|
485
638
|
fieldDescriptor,
|
|
486
639
|
variantName,
|
|
487
640
|
editContext,
|
|
@@ -490,6 +643,7 @@ export const AiImageEditorDialog = forwardRef(({ open, onClose, onComplete, fiel
|
|
|
490
643
|
onClose,
|
|
491
644
|
targetFolderId,
|
|
492
645
|
selectedImageModelId,
|
|
646
|
+
aspectRatio,
|
|
493
647
|
]);
|
|
494
648
|
// Handle suggesting a description based on context
|
|
495
649
|
const handleSuggestDescription = useCallback(async () => {
|
|
@@ -530,11 +684,11 @@ export const AiImageEditorDialog = forwardRef(({ open, onClose, onComplete, fiel
|
|
|
530
684
|
addSocketMessageListener: editContext.addSocketMessageListener,
|
|
531
685
|
timeout: 60000,
|
|
532
686
|
onContentUpdate: (content) => {
|
|
533
|
-
|
|
687
|
+
setPrompt(extractSuggestionFromFence(content));
|
|
534
688
|
},
|
|
535
689
|
});
|
|
536
690
|
if (result.success) {
|
|
537
|
-
|
|
691
|
+
setPrompt(extractSuggestionFromFence(result.content));
|
|
538
692
|
}
|
|
539
693
|
else {
|
|
540
694
|
setError(result.error || "Failed to get suggestion");
|
|
@@ -567,7 +721,7 @@ export const AiImageEditorDialog = forwardRef(({ open, onClose, onComplete, fiel
|
|
|
567
721
|
try {
|
|
568
722
|
const result = await executeCreateItem({ id: parentId, language: targetFolderLanguage, version: 0 }, MEDIA_FOLDER_TEMPLATE_ID, name, editContext?.sessionId);
|
|
569
723
|
if (result.type !== "success" || !result.data?.id) {
|
|
570
|
-
setNewFolderError(result
|
|
724
|
+
setNewFolderError(describeServiceError(result, "Failed to create folder"));
|
|
571
725
|
return;
|
|
572
726
|
}
|
|
573
727
|
const createdId = result.data.id;
|
|
@@ -654,6 +808,13 @@ export const AiImageEditorDialog = forwardRef(({ open, onClose, onComplete, fiel
|
|
|
654
808
|
useEffect(() => {
|
|
655
809
|
if (!open) {
|
|
656
810
|
initialImageLoadedRef.current = false;
|
|
811
|
+
aspectRatioManuallySetRef.current = false;
|
|
812
|
+
dragDepthRef.current = 0;
|
|
813
|
+
setIsDragOver(false);
|
|
814
|
+
setInitialImageSettled(false);
|
|
815
|
+
setAspectRatioPopoverOpen(false);
|
|
816
|
+
setAddImagePopoverOpen(false);
|
|
817
|
+
setAspectRatio(lockedAspectRatioOption?.value ?? DEFAULT_ASPECT_RATIO);
|
|
657
818
|
targetFolderManuallySelectedRef.current = false;
|
|
658
819
|
setTargetFolderInitialized(false);
|
|
659
820
|
setTargetFolderIsPersonal(false);
|
|
@@ -873,129 +1034,213 @@ export const AiImageEditorDialog = forwardRef(({ open, onClose, onComplete, fiel
|
|
|
873
1034
|
}
|
|
874
1035
|
finally {
|
|
875
1036
|
setUploading(false);
|
|
1037
|
+
setInitialImageSettled(true);
|
|
876
1038
|
}
|
|
877
1039
|
};
|
|
878
1040
|
loadCurrentImage();
|
|
879
1041
|
}, [open, currentImageSrc, currentMediaItemId, handleFileUpload]);
|
|
880
|
-
//
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
},
|
|
886
|
-
{
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
},
|
|
890
|
-
{ label: "Upscale", prompt: "Upscale this image to higher resolution" },
|
|
891
|
-
{
|
|
892
|
-
label: "Fix Lighting",
|
|
893
|
-
prompt: "Improve the lighting and color balance of this image",
|
|
894
|
-
},
|
|
1042
|
+
// Starters for edit mode. Each one is an opening the user completes, so
|
|
1043
|
+
// the chips teach how to phrase an edit instead of promising operations
|
|
1044
|
+
// (background removal, upscaling) that a re-rendering pipeline with JPEG
|
|
1045
|
+
// output cannot deliver.
|
|
1046
|
+
const editStarters = [
|
|
1047
|
+
{ label: "Change background", prompt: "Change the background to " },
|
|
1048
|
+
{ label: "Change lighting", prompt: "Change the lighting to " },
|
|
1049
|
+
{ label: "Remove something", prompt: "Remove the " },
|
|
1050
|
+
{ label: "Change style", prompt: "Render this image in the style of " },
|
|
895
1051
|
];
|
|
896
|
-
const
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
!
|
|
1052
|
+
const applyStarter = (starter) => {
|
|
1053
|
+
setPrompt(starter.prompt);
|
|
1054
|
+
const textarea = promptRef.current;
|
|
1055
|
+
if (!textarea)
|
|
1056
|
+
return;
|
|
1057
|
+
requestAnimationFrame(() => {
|
|
1058
|
+
textarea.focus({ preventScroll: true });
|
|
1059
|
+
const end = textarea.value.length;
|
|
1060
|
+
textarea.setSelectionRange(end, end);
|
|
1061
|
+
});
|
|
1062
|
+
};
|
|
1063
|
+
const expectsSourceImage = !!(currentImageSrc || currentMediaItemId);
|
|
1064
|
+
// A dialog opened on an existing image is an edit from the first frame,
|
|
1065
|
+
// so the title does not flip once the image has been fetched.
|
|
1066
|
+
const isModifyMode = images.length > 0 || (expectsSourceImage && !initialImageSettled);
|
|
1067
|
+
const hasPrompt = prompt.trim().length > 0;
|
|
1068
|
+
const canSubmit = hasPrompt && !!targetFolderId && !submitting && !uploading;
|
|
1069
|
+
const submitShortcutLabel = getSubmitShortcutLabel();
|
|
1070
|
+
const submitLabel = isModifyMode ? "Edit image" : "Generate image";
|
|
1071
|
+
const submitHint = !targetFolderInitialized
|
|
1072
|
+
? "Loading the target folder..."
|
|
1073
|
+
: !targetFolderId
|
|
1074
|
+
? "Choose a folder to save the image first"
|
|
1075
|
+
: uploading
|
|
1076
|
+
? "Loading the current image..."
|
|
1077
|
+
: !hasPrompt
|
|
1078
|
+
? isModifyMode
|
|
1079
|
+
? "Describe the change first"
|
|
1080
|
+
: "Describe the image first"
|
|
1081
|
+
: `${submitLabel} · ${submitShortcutLabel}`;
|
|
1082
|
+
const canBrowseMedia = !!editContext?.selectMedia;
|
|
1083
|
+
const selectedAspectRatioOption = ASPECT_RATIO_OPTIONS.find((option) => option.value === aspectRatio) ??
|
|
1084
|
+
ASPECT_RATIO_OPTIONS[0];
|
|
1085
|
+
const aspectRatioFromVariant = !!lockedAspectRatioOption &&
|
|
1086
|
+
lockedAspectRatioOption.value === aspectRatio;
|
|
1087
|
+
// Ctrl/Cmd+Enter submits from the prompt, like the other AI dialogs
|
|
1088
|
+
const handlePromptKeyDown = (e) => {
|
|
1089
|
+
if (e.key !== "Enter" || !(e.ctrlKey || e.metaKey))
|
|
1090
|
+
return;
|
|
1091
|
+
if (e.nativeEvent.isComposing)
|
|
1092
|
+
return;
|
|
1093
|
+
e.preventDefault();
|
|
1094
|
+
e.stopPropagation();
|
|
1095
|
+
if (canSubmit)
|
|
1096
|
+
void handleSubmit();
|
|
1097
|
+
};
|
|
1098
|
+
const toolbarButtonClassName = "text-neutral-grey-50 hover:text-neutral-grey-100 hover:bg-neutral-grey-5 h-7 gap-1.5 px-2";
|
|
1099
|
+
const popoverRowClassName = (isSelected) => cn("flex w-full cursor-pointer items-center gap-2 rounded-[4px] px-2 py-1.5 text-left text-xs transition-colors focus-visible:outline-none", isSelected
|
|
1100
|
+
? "bg-neutral-grey-5 text-neutral-grey-100 hover:bg-neutral-grey-10 focus-visible:bg-neutral-grey-10"
|
|
1101
|
+
: "text-neutral-grey-50 hover:bg-neutral-grey-5 hover:text-neutral-grey-100 focus-visible:bg-neutral-grey-5 focus-visible:text-neutral-grey-100");
|
|
900
1102
|
const renderImageModelPopover = () => {
|
|
901
|
-
if (!showImageModelSelector)
|
|
902
|
-
|
|
903
|
-
|
|
1103
|
+
if (!showImageModelSelector) {
|
|
1104
|
+
if (!imageModelsError)
|
|
1105
|
+
return null;
|
|
1106
|
+
const reason = imageModelsError.replace(/\.+$/, "");
|
|
1107
|
+
return (_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsxs(Button, { type: "button", variant: "ghost", size: "xs", className: cn(toolbarButtonClassName, "text-feedback-red hover:text-feedback-red max-w-[220px]"), disabled: submitting, "aria-label": `${reason}. Retry`, onClick: () => setImageModelsReloadKey((key) => key + 1), "data-testid": "ai-image-models-error", children: [_jsx(AlertCircle, { className: "h-3.5 w-3.5", strokeWidth: 1 }), _jsx("span", { className: "truncate", children: "No image models" })] }) }), _jsxs(TooltipContent, { side: "top", sideOffset: 6, children: [reason, ". Click to retry."] })] }));
|
|
1108
|
+
}
|
|
1109
|
+
const ariaLabel = selectedImageModelOption
|
|
904
1110
|
? `Image model: ${selectedImageModelOption.label}`
|
|
905
1111
|
: "Choose image model";
|
|
1112
|
+
const tooltipLabel = selectedImageModelOption
|
|
1113
|
+
? `Image model: ${selectedImageModelOption.rawName}`
|
|
1114
|
+
: "Choose image model";
|
|
906
1115
|
const visibleLabel = imageModelsLoading
|
|
907
1116
|
? "Loading model..."
|
|
908
1117
|
: selectedImageModelOption?.label || "Choose image model";
|
|
909
|
-
return (_jsxs(Popover, { open: imageModelPopoverOpen, onOpenChange: setImageModelPopoverOpen, enableIframeClickDetection: false, children: [_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx(PopoverTrigger, { asChild: true, children: _jsxs(Button, { type: "button", variant: "ghost", size: "xs", className: "
|
|
1118
|
+
return (_jsxs(Popover, { open: imageModelPopoverOpen, onOpenChange: setImageModelPopoverOpen, enableIframeClickDetection: false, children: [_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx(PopoverTrigger, { asChild: true, children: _jsxs(Button, { type: "button", variant: "ghost", size: "xs", className: cn(toolbarButtonClassName, "max-w-[220px]"), disabled: submitting, "aria-label": ariaLabel, "data-testid": "ai-image-model-selector", children: [imageModelsLoading ? (_jsx(Loader2, { strokeWidth: 1, className: "h-3.5 w-3.5 animate-spin" })) : (_jsx(Cpu, { className: "h-3.5 w-3.5", strokeWidth: 1 })), _jsx("span", { className: "truncate", children: visibleLabel }), _jsx(ChevronDown, { className: `h-3.5 w-3.5 transition-transform ${imageModelPopoverOpen ? "rotate-180" : ""}`, strokeWidth: 1, "aria-hidden": "true", "data-testid": "ai-image-model-selector-chevron" })] }) }) }), _jsx(TooltipContent, { side: "top", sideOffset: 6, children: tooltipLabel })] }), _jsxs(PopoverContent, { className: "w-64 p-1.5", align: "start", side: "bottom", sideOffset: 6, children: [_jsx("div", { className: "text-neutral-grey-50 px-2 py-1 text-[10px] font-medium tracking-wider", children: "Image model" }), imageModelsLoading ? (_jsxs("div", { className: "text-neutral-grey-50 flex items-center gap-2 px-2 py-2 text-xs", children: [_jsx(Loader2, { strokeWidth: 1, className: "h-3.5 w-3.5 animate-spin" }), "Loading models..."] })) : (_jsx("div", { className: "space-y-0.5", children: imageModelOptions.map((option) => {
|
|
910
1119
|
const isSelected = selectedImageModelId === option.value;
|
|
911
|
-
return (_jsxs("button", { type: "button", onClick: () => {
|
|
1120
|
+
return (_jsxs("button", { type: "button", title: option.rawName, onClick: () => {
|
|
912
1121
|
setSelectedImageModelId(option.value);
|
|
913
1122
|
setImageModelPopoverOpen(false);
|
|
914
|
-
}, className:
|
|
915
|
-
? "bg-neutral-grey-5 text-neutral-grey-100 hover:bg-neutral-grey-10 focus-visible:bg-neutral-grey-10"
|
|
916
|
-
: "text-neutral-grey-50 hover:bg-neutral-grey-5 hover:text-neutral-grey-100 focus-visible:bg-neutral-grey-5 focus-visible:text-neutral-grey-100"}`, children: [_jsxs("span", { className: "min-w-0 flex-1", children: [_jsx("span", { className: "block truncate font-medium", children: option.label }), option.description && (_jsx("span", { className: "text-neutral-grey-50 mt-0.5 block truncate text-[10px]", children: option.description }))] }), _jsx(Check, { className: `mt-0.5 h-3.5 w-3.5 shrink-0 ${isSelected ? "opacity-100" : "opacity-0"}`, strokeWidth: 1 })] }, option.value));
|
|
1123
|
+
}, className: cn(popoverRowClassName(isSelected), "items-start"), children: [_jsxs("span", { className: "min-w-0 flex-1", children: [_jsx("span", { className: "block truncate font-medium", children: option.label }), option.description && (_jsx("span", { className: "text-neutral-grey-50 mt-0.5 block truncate text-[10px]", children: option.description }))] }), _jsx(Check, { className: `mt-0.5 h-3.5 w-3.5 shrink-0 ${isSelected ? "opacity-100" : "opacity-0"}`, strokeWidth: 1 })] }, option.value));
|
|
917
1124
|
}) }))] })] }));
|
|
918
1125
|
};
|
|
919
|
-
|
|
1126
|
+
const renderAspectRatioGlyph = (ratio) => {
|
|
1127
|
+
const width = ratio >= 1 ? 14 : Math.round(14 * ratio);
|
|
1128
|
+
const height = ratio >= 1 ? Math.round(14 / ratio) : 14;
|
|
1129
|
+
return (_jsx("span", { "aria-hidden": "true", className: "flex h-3.5 w-3.5 shrink-0 items-center justify-center", children: _jsx("span", { className: "rounded-[2px] border border-current", style: { width, height } }) }));
|
|
1130
|
+
};
|
|
1131
|
+
const renderAspectRatioPopover = () => {
|
|
1132
|
+
const variantLabel = variantName
|
|
1133
|
+
? `the ${variantName} variant`
|
|
1134
|
+
: "the picture variant";
|
|
1135
|
+
const tooltipLabel = aspectRatioFromVariant
|
|
1136
|
+
? `Aspect ratio ${aspectRatio} (${selectedAspectRatioOption.description}), from ${variantLabel}`
|
|
1137
|
+
: `Aspect ratio ${aspectRatio} (${selectedAspectRatioOption.description})`;
|
|
1138
|
+
return (_jsxs(Popover, { open: aspectRatioPopoverOpen, onOpenChange: setAspectRatioPopoverOpen, enableIframeClickDetection: false, children: [_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx(PopoverTrigger, { asChild: true, children: _jsxs(Button, { type: "button", variant: "ghost", size: "xs", className: toolbarButtonClassName, disabled: submitting, "aria-label": `Aspect ratio: ${aspectRatio}`, "data-testid": "ai-image-aspect-ratio", children: [renderAspectRatioGlyph(selectedAspectRatioOption.ratio), _jsx("span", { children: aspectRatio }), _jsx(ChevronDown, { className: `h-3.5 w-3.5 transition-transform ${aspectRatioPopoverOpen ? "rotate-180" : ""}`, strokeWidth: 1, "aria-hidden": "true" })] }) }) }), _jsx(TooltipContent, { side: "top", sideOffset: 6, children: tooltipLabel })] }), _jsxs(PopoverContent, { className: "w-56 p-1.5", align: "start", side: "bottom", sideOffset: 6, children: [_jsx("div", { className: "text-neutral-grey-50 px-2 py-1 text-[10px] font-medium tracking-wider", children: "Aspect ratio" }), _jsx("div", { className: "space-y-0.5", children: ASPECT_RATIO_OPTIONS.map((option) => {
|
|
1139
|
+
const isSelected = option.value === aspectRatio;
|
|
1140
|
+
const isVariantRatio = lockedAspectRatioOption?.value === option.value;
|
|
1141
|
+
return (_jsxs("button", { type: "button", onClick: () => {
|
|
1142
|
+
aspectRatioManuallySetRef.current = true;
|
|
1143
|
+
setAspectRatio(option.value);
|
|
1144
|
+
setAspectRatioPopoverOpen(false);
|
|
1145
|
+
}, className: popoverRowClassName(isSelected), "data-testid": `ai-image-aspect-ratio-${option.value.replace(":", "x")}`, children: [renderAspectRatioGlyph(option.ratio), _jsx("span", { className: "w-9 shrink-0 font-medium", children: option.value }), _jsxs("span", { className: "text-neutral-grey-50 min-w-0 flex-1 truncate text-[10px]", children: [option.description, isVariantRatio ? " · variant" : ""] }), _jsx(Check, { className: `h-3.5 w-3.5 shrink-0 ${isSelected ? "opacity-100" : "opacity-0"}`, strokeWidth: 1 })] }, option.value));
|
|
1146
|
+
}) })] })] }));
|
|
1147
|
+
};
|
|
1148
|
+
const renderAddImageMenu = () => {
|
|
1149
|
+
const busy = uploading || browsingMedia;
|
|
1150
|
+
const triggerContent = (_jsxs(_Fragment, { children: [busy ? (_jsx(Loader2, { className: "h-3.5 w-3.5 animate-spin", strokeWidth: 1 })) : (_jsx(ImagePlus, { className: "h-3.5 w-3.5", strokeWidth: 1 })), "Add reference image"] }));
|
|
1151
|
+
if (!canBrowseMedia) {
|
|
1152
|
+
return (_jsx(Button, { type: "button", variant: "ghost", size: "xs", className: toolbarButtonClassName, onClick: () => fileInputRef.current?.click(), disabled: submitting || busy, "data-testid": "ai-image-add-reference", children: triggerContent }));
|
|
1153
|
+
}
|
|
1154
|
+
return (_jsxs(Popover, { open: addImagePopoverOpen, onOpenChange: setAddImagePopoverOpen, enableIframeClickDetection: false, children: [_jsx(PopoverTrigger, { asChild: true, children: _jsx(Button, { type: "button", variant: "ghost", size: "xs", className: toolbarButtonClassName, disabled: submitting || busy, "data-testid": "ai-image-add-reference", children: triggerContent }) }), _jsxs(PopoverContent, { className: "w-60 p-1.5", align: "start", side: "bottom", sideOffset: 6, children: [_jsxs("div", { className: "space-y-0.5", children: [_jsxs("button", { type: "button", onClick: () => {
|
|
1155
|
+
setAddImagePopoverOpen(false);
|
|
1156
|
+
fileInputRef.current?.click();
|
|
1157
|
+
}, className: popoverRowClassName(false), "data-testid": "ai-image-upload", children: [_jsx(Upload, { className: "h-3.5 w-3.5 shrink-0", strokeWidth: 1 }), "Upload from computer"] }), _jsxs("button", { type: "button", onClick: () => {
|
|
1158
|
+
setAddImagePopoverOpen(false);
|
|
1159
|
+
void handleBrowseMedia();
|
|
1160
|
+
}, className: popoverRowClassName(false), "data-testid": "ai-image-browse-media", children: [_jsx(FolderOpen, { className: "h-3.5 w-3.5 shrink-0", strokeWidth: 1 }), "Browse media library"] })] }), _jsx("div", { className: "text-neutral-grey-50 px-2 pt-1.5 pb-1 text-[10px]", children: "You can also paste or drop images anywhere in this dialog." })] })] }));
|
|
1161
|
+
};
|
|
1162
|
+
const renderTargetFolderPicker = () => (_jsxs(Popover, { open: targetFolderPickerOpen, onOpenChange: handleTargetFolderPickerOpenChange, enableIframeClickDetection: false, children: [_jsx(PopoverTrigger, { asChild: true, children: _jsx("button", { type: "button", className: "text-highlight-100 hover:text-highlight-100-hover shrink-0 font-medium underline-offset-2 transition-colors hover:underline disabled:cursor-default disabled:opacity-50 disabled:hover:no-underline", disabled: !targetFolderInitialized || submitting, "aria-busy": !targetFolderInitialized, "data-testid": "ai-image-target-folder-trigger", children: targetFolderId ? "Change" : "Choose folder" }) }), _jsxs(PopoverContent, { ref: targetFolderPickerContentRef, className: "pointer-events-auto z-[110] w-[min(520px,calc(100vw-2rem))] p-2", align: "start", side: "top", sideOffset: 8, "aria-label": "Select folder", children: [_jsxs("div", { className: "mb-2 flex items-center justify-between gap-2 pl-2", children: [_jsxs("div", { className: "flex min-w-0 items-center gap-2", children: [_jsx("div", { className: "bg-highlight-10 text-highlight-100 flex h-7 w-7 shrink-0 items-center justify-center rounded-lg", children: _jsx(FolderOpen, { className: "h-4 w-4", strokeWidth: 1 }) }), _jsxs("div", { className: "flex min-w-0 flex-col", children: [_jsx("span", { className: "text-neutral-grey-100 text-xs font-medium", children: "Select folder" }), _jsx("span", { className: "text-neutral-grey-50 text-2xs truncate", title: folderPickerSelection?.path, children: folderPickerSelection
|
|
1163
|
+
? `Highlighted: ${formatFolderPath(folderPickerSelection.path)}`
|
|
1164
|
+
: "Pick a media folder for the generated image" })] })] }), _jsx(CloseButton, { label: "Close folder picker", showTooltip: false, onClick: () => handleTargetFolderPickerOpenChange(false), "data-testid": "ai-image-target-folder-close" })] }), _jsx("div", { className: "border-border-default h-[360px] overflow-auto overscroll-contain rounded-lg border bg-white p-1", children: _jsx(ContentTree, { rootItemIds: folderPickerRootItemIds, selectionMode: "single", selectedItemIds: folderPickerSelectedItemIds, templateIds: folderPickerTemplateIds, hideRootNodes: true, expandIdPath: folderPickerSelection?.idPath ??
|
|
1165
|
+
targetFolderExpandIdPath ??
|
|
1166
|
+
"3D6658D8-A0BF-4E75-B3E2-D050FABCF4E1", onSelectionChange: (selection) => {
|
|
1167
|
+
const node = selection[0];
|
|
1168
|
+
if (!node?.id)
|
|
1169
|
+
return;
|
|
1170
|
+
setFolderPickerSelection({
|
|
1171
|
+
id: node.id,
|
|
1172
|
+
name: node.displayName || node.name || "",
|
|
1173
|
+
path: node.path || "",
|
|
1174
|
+
idPath: node.idPath,
|
|
1175
|
+
canCreate: node.canCreate !== false,
|
|
1176
|
+
});
|
|
1177
|
+
}, renderNode: (node, defaultRenderer) => node.data?.canCreate ===
|
|
1178
|
+
false ? (_jsx("span", { className: "opacity-50", title: "You cannot save images into this folder", children: defaultRenderer(node) })) : (defaultRenderer(node)), language: targetFolderLanguage, includeItemPath: true, database: "master" }) }), _jsx("div", { className: "border-border-default mt-2 border-t pt-2", children: creatingFolder ? (_jsxs(_Fragment, { children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Input, { autoFocus: true, value: newFolderName, onChange: (e) => setNewFolderName(e.target.value), onKeyDown: (e) => {
|
|
1179
|
+
if (e.key === "Enter") {
|
|
1180
|
+
e.preventDefault();
|
|
1181
|
+
handleCreateFolder();
|
|
1182
|
+
}
|
|
1183
|
+
else if (e.key === "Escape") {
|
|
1184
|
+
e.stopPropagation();
|
|
1185
|
+
setCreatingFolder(false);
|
|
1186
|
+
setNewFolderName("");
|
|
1187
|
+
setNewFolderError(null);
|
|
1188
|
+
}
|
|
1189
|
+
}, placeholder: "Folder name", className: "h-8 flex-1 text-xs", disabled: newFolderSubmitting, "data-testid": "ai-image-new-folder-name" }), _jsxs(Button, { size: "sm", onClick: handleCreateFolder, disabled: !newFolderName.trim() || newFolderSubmitting, "data-testid": "ai-image-new-folder-create", children: [newFolderSubmitting ? (_jsx(Loader2, { className: "h-3.5 w-3.5 animate-spin", strokeWidth: 1 })) : null, "Create"] }), _jsx(Button, { size: "sm", variant: "ghost", onClick: () => {
|
|
1190
|
+
setCreatingFolder(false);
|
|
1191
|
+
setNewFolderName("");
|
|
1192
|
+
setNewFolderError(null);
|
|
1193
|
+
}, disabled: newFolderSubmitting, children: "Cancel" })] }), newFolderError && (_jsx("div", { className: "text-feedback-red mt-1 text-xs", children: newFolderError }))] })) : (_jsxs("div", { className: "flex items-center justify-between gap-2", children: [_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsxs(Button, { variant: "ghost", size: "sm", className: "min-w-0 gap-1.5", onClick: () => {
|
|
1194
|
+
setCreatingFolder(true);
|
|
1195
|
+
setNewFolderError(null);
|
|
1196
|
+
}, disabled: !folderPickerCanCreate, "data-testid": "ai-image-new-folder", children: [_jsx(FolderPlus, { className: "h-3.5 w-3.5 shrink-0", strokeWidth: 1 }), _jsx("span", { className: "shrink-0", children: "New folder" }), _jsxs("span", { className: "text-neutral-grey-50 truncate font-normal", children: ["in", " ", folderPickerSelection
|
|
1197
|
+
? folderPickerSelection.name ||
|
|
1198
|
+
folderPickerSelection.path.split("/").pop() ||
|
|
1199
|
+
"selected folder"
|
|
1200
|
+
: "Media Library"] })] }) }), _jsx(TooltipContent, { side: "bottom", sideOffset: 6, children: folderPickerCanCreate
|
|
1201
|
+
? folderPickerSelection
|
|
1202
|
+
? "Create a subfolder inside the highlighted folder"
|
|
1203
|
+
: "Create a folder at the Media Library root"
|
|
1204
|
+
: folderPickerSelection
|
|
1205
|
+
? "You cannot create folders in the highlighted folder"
|
|
1206
|
+
: "You cannot create folders at the Media Library root. Select a folder first." })] }), _jsx(Button, { size: "sm", className: "shrink-0", onClick: handleSelectTargetFolder, disabled: !folderPickerSelection?.canCreate, "data-testid": "ai-image-target-folder-select", children: "Select folder" })] })) })] })] }));
|
|
1207
|
+
return (_jsx(Dialog, { open: open, onOpenChange: (isOpen) => !isOpen && handleCancel(), children: _jsxs(DialogContent, { className: "flex max-w-2xl flex-col overflow-hidden border-none p-0 shadow-2xl", style: { height: "auto", maxHeight: "90vh" }, onPaste: handlePaste, onDragEnter: handleDragEnter, onDragOver: handleDragOver, onDragLeave: handleDragLeave, onDrop: handleDrop, onOpenAutoFocus: (e) => {
|
|
1208
|
+
const textarea = promptRef.current;
|
|
1209
|
+
if (!textarea)
|
|
1210
|
+
return;
|
|
1211
|
+
e.preventDefault();
|
|
1212
|
+
textarea.focus({ preventScroll: true });
|
|
1213
|
+
const end = textarea.value.length;
|
|
1214
|
+
textarea.setSelectionRange(end, end);
|
|
1215
|
+
}, children: [_jsx(StyledDialogTitle, { icon: _jsx(Sparkles, { strokeWidth: 1 }), title: isModifyMode ? "Edit image" : "Generate image" }), isDragOver && (_jsx("div", { className: "border-highlight-100 bg-highlight-10/90 text-highlight-100 pointer-events-none absolute inset-0 z-20 flex items-center justify-center rounded-[inherit] border-2 border-dashed text-sm font-medium", "data-testid": "ai-image-drop-overlay", children: "Drop images to add them as references" })), _jsx("div", { className: "flex min-h-0 flex-1 flex-col overflow-y-auto overscroll-y-contain px-6 py-5", children: _jsxs("div", { className: "flex flex-col gap-3", children: [error && (_jsx("div", { className: "border-feedback-red bg-feedback-red-light text-feedback-red rounded-lg border p-3 text-sm", children: error })), _jsxs("div", { className: cn("border-border-default relative min-w-0 rounded-[12px] border bg-white transition-colors duration-200", isDragOver && "border-highlight-100"), "data-testid": "ai-image-composer", children: [_jsx(Textarea, { ref: promptRef, value: prompt, onChange: (e) => setPrompt(e.target.value), onKeyDown: handlePromptKeyDown, placeholder: isModifyMode
|
|
1216
|
+
? "E.g., Remove the background, change the lighting, add a person on the left..."
|
|
1217
|
+
: "Describe the image you want to create...", "aria-label": isModifyMode
|
|
1218
|
+
? "Describe how to change the images"
|
|
1219
|
+
: "Describe the image to create", className: "max-h-60 min-h-[96px] w-full resize-none overflow-y-auto rounded-none border-0 bg-transparent px-4 pt-3.5 pb-2 text-sm shadow-none focus-visible:border-0 focus-visible:shadow-none focus-visible:ring-0", disabled: submitting, "data-testid": "ai-image-prompt", "data-mode": isModifyMode ? "modify" : "generate" }), images.length > 0 && (_jsx("div", { className: "flex flex-wrap gap-2 px-4 pb-2", "data-testid": "ai-image-reference-strip", children: images.map((img) => (_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsxs("div", { className: "border-border-default bg-neutral-grey-5 relative h-16 w-16 overflow-hidden rounded-lg border", children: [img.loading ? (_jsx("div", { className: "flex h-full w-full items-center justify-center", children: _jsx(Loader2, { className: "text-neutral-grey-50 h-5 w-5 animate-spin", strokeWidth: 1 }) })) : img.thumbnailUrl ? (_jsx("img", { src: img.thumbnailUrl, alt: img.fileName, className: "h-full w-full object-cover" })) : (_jsx("div", { className: "flex h-full w-full items-center justify-center", children: _jsx(ImageIcon, { className: "text-neutral-grey-50 h-6 w-6", strokeWidth: 1 }) })), _jsx("button", { type: "button", onClick: () => handleDeleteImage(img.id), className: "bg-neutral-grey-100/70 hover:bg-neutral-grey-100 absolute top-1 right-1 flex h-5 w-5 items-center justify-center rounded-full text-white transition-colors disabled:opacity-50", title: "Remove image", "aria-label": `Remove ${img.fileName}`, disabled: submitting, children: _jsx(X, { className: "h-3 w-3", strokeWidth: 1.5 }) })] }) }), _jsx(TooltipContent, { side: "top", sideOffset: 6, className: "max-w-xs break-words", children: img.fileName })] }, img.id))) })), _jsxs("div", { className: "flex flex-wrap items-center gap-1 px-2 pt-1 pb-2", children: [renderImageModelPopover(), renderAspectRatioPopover(), renderAddImageMenu(), _jsx("div", { className: "ml-auto flex items-center gap-1", children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("span", { className: "inline-flex", children: _jsx("button", { type: "button", onClick: () => void handleSubmit(), disabled: !canSubmit, "aria-label": submitLabel, "aria-keyshortcuts": "Control+Enter Meta+Enter", "data-testid": "ai-image-submit", className: cn("flex h-7 w-7 items-center justify-center rounded-[6px] transition-colors duration-200", canSubmit
|
|
1220
|
+
? "bg-neutral-grey-100 hover:bg-neutral-grey-100/90 text-white"
|
|
1221
|
+
: "bg-neutral-grey-5 text-neutral-grey-50 cursor-not-allowed"), children: submitting ? (_jsx(Loader2, { className: "h-4 w-4 animate-spin", strokeWidth: 1 })) : (_jsx(ArrowUp, { className: "h-4 w-4", strokeWidth: 1 })) }) }) }), _jsx(TooltipContent, { side: "top", sideOffset: 6, children: submitHint })] }) })] })] }), isModifyMode ? (_jsx("div", { className: "flex flex-wrap items-center gap-1.5", "data-testid": "ai-image-edit-starters", children: editStarters.map((starter) => (_jsx("button", { type: "button", onClick: (e) => {
|
|
1222
|
+
e.stopPropagation();
|
|
1223
|
+
applyStarter(starter);
|
|
1224
|
+
}, className: "border-border-default text-neutral-grey-50 hover:border-highlight-100 hover:text-highlight-100 text-2xs rounded-full border bg-white px-2.5 py-0.5 transition-colors disabled:opacity-50", disabled: submitting, children: starter.label }, starter.label))) })) : ((fieldDescriptor || canBrowseMedia) && (_jsxs("div", { className: "flex flex-wrap items-center gap-x-4 gap-y-1", children: [fieldDescriptor && (_jsxs("button", { type: "button", onClick: (e) => {
|
|
920
1225
|
e.stopPropagation();
|
|
921
1226
|
handleSuggestDescription();
|
|
922
|
-
}, disabled: suggesting || submitting,
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
}, className: `text-2xs rounded-full border px-2 py-0.5 transition-colors ${modifyPrompt === preset.prompt
|
|
940
|
-
? "border-highlight-100 bg-highlight-100 text-white"
|
|
941
|
-
: "border-border-default text-neutral-grey-50 hover:border-highlight-100 hover:text-highlight-100 bg-white"}`, disabled: submitting, children: preset.label }, preset.label))) }), renderImageModelPopover()] })] })), _jsxs("div", { className: cn("rounded-xl border bg-white p-4 transition-colors", targetFolderId
|
|
942
|
-
? "border-border-default"
|
|
943
|
-
: "border-feedback-orange/30"), "data-testid": "ai-image-target-folder-card", children: [_jsx("div", { className: "text-neutral-grey-50 text-2xs mb-2", children: "Save generated image to" }), _jsxs("div", { className: "flex items-center justify-between gap-3", children: [_jsxs("div", { className: "flex min-w-0 flex-1 items-center gap-3", children: [_jsx("div", { className: cn("flex h-9 w-9 shrink-0 items-center justify-center rounded-lg", targetFolderId
|
|
944
|
-
? "bg-highlight-10 text-highlight-100"
|
|
945
|
-
: "bg-feedback-orange-light text-feedback-orange"), children: _jsx(FolderOpen, { className: "h-4.5 w-4.5", strokeWidth: 1 }) }), _jsxs("div", { className: "flex min-w-0 flex-1 flex-col", children: [_jsxs("div", { className: "flex min-w-0 items-center gap-2", children: [_jsx("span", { className: "text-neutral-grey-100 truncate text-sm font-medium", "data-testid": "ai-image-target-folder-name", children: targetFolderInitialized
|
|
946
|
-
? targetFolderName ||
|
|
947
|
-
(targetFolderId ? "Selected folder" : "No folder selected")
|
|
948
|
-
: "Loading folder..." }), targetFolderIsPersonal && targetFolderId && (_jsx("span", { className: "bg-highlight-10 text-highlight-100 text-2xs shrink-0 rounded-full px-2 py-0.5 font-medium", "data-testid": "ai-image-target-folder-personal-badge", children: "Your media folder" }))] }), targetFolderPath ? (_jsx("div", { className: "text-neutral-grey-50 truncate text-xs", title: targetFolderPath, children: formatFolderPath(targetFolderPath) })) : (_jsx("div", { className: "text-neutral-grey-50 text-xs", children: "Choose where the generated image is saved" }))] })] }), _jsxs(Popover, { open: targetFolderPickerOpen, onOpenChange: handleTargetFolderPickerOpenChange, enableIframeClickDetection: false, children: [_jsx(PopoverTrigger, { asChild: true, children: _jsxs(Button, { variant: "outline", size: "sm", className: "shrink-0", disabled: !targetFolderInitialized, "aria-busy": !targetFolderInitialized, "data-testid": "ai-image-target-folder-trigger", children: [!targetFolderInitialized ? (_jsx(Loader2, { className: "h-3.5 w-3.5 animate-spin", strokeWidth: 1 })) : null, !targetFolderInitialized
|
|
949
|
-
? "Loading"
|
|
950
|
-
: targetFolderId
|
|
951
|
-
? "Change folder"
|
|
952
|
-
: "Select"] }) }), _jsxs(PopoverContent, { ref: targetFolderPickerContentRef, className: "pointer-events-auto z-[110] w-[520px] p-2", align: "end", "aria-label": "Select folder", children: [_jsxs("div", { className: "mb-2 flex items-center justify-between gap-2 pl-2", children: [_jsxs("div", { className: "flex min-w-0 items-center gap-2", children: [_jsx("div", { className: "bg-highlight-10 text-highlight-100 flex h-7 w-7 shrink-0 items-center justify-center rounded-lg", children: _jsx(FolderOpen, { className: "h-4 w-4", strokeWidth: 1 }) }), _jsxs("div", { className: "flex min-w-0 flex-col", children: [_jsx("span", { className: "text-neutral-grey-100 text-xs font-medium", children: "Select folder" }), _jsx("span", { className: "text-neutral-grey-50 text-2xs truncate", title: folderPickerSelection?.path, children: folderPickerSelection
|
|
953
|
-
? `Highlighted: ${formatFolderPath(folderPickerSelection.path)}`
|
|
954
|
-
: "Pick a media folder for the generated image" })] })] }), _jsx(CloseButton, { label: "Close folder picker", showTooltip: false, onClick: () => handleTargetFolderPickerOpenChange(false), "data-testid": "ai-image-target-folder-close" })] }), _jsx("div", { className: "border-border-default h-[360px] overflow-auto overscroll-contain rounded-lg border bg-white p-1", children: _jsx(ContentTree, { rootItemIds: folderPickerRootItemIds, selectionMode: "single", selectedItemIds: folderPickerSelectedItemIds, templateIds: folderPickerTemplateIds, hideRootNodes: true, expandIdPath: folderPickerSelection?.idPath ??
|
|
955
|
-
targetFolderExpandIdPath ??
|
|
956
|
-
"3D6658D8-A0BF-4E75-B3E2-D050FABCF4E1", onSelectionChange: (selection) => {
|
|
957
|
-
const node = selection[0];
|
|
958
|
-
if (!node?.id)
|
|
959
|
-
return;
|
|
960
|
-
setFolderPickerSelection({
|
|
961
|
-
id: node.id,
|
|
962
|
-
name: node.displayName || node.name || "",
|
|
963
|
-
path: node.path || "",
|
|
964
|
-
idPath: node.idPath,
|
|
965
|
-
canCreate: node.canCreate !== false,
|
|
966
|
-
});
|
|
967
|
-
}, renderNode: (node, defaultRenderer) => node.data
|
|
968
|
-
?.canCreate === false ? (_jsx("span", { className: "opacity-50", title: "You cannot save images into this folder", children: defaultRenderer(node) })) : (defaultRenderer(node)), language: targetFolderLanguage, includeItemPath: true, database: "master" }) }), _jsx("div", { className: "border-border-default mt-2 border-t pt-2", children: creatingFolder ? (_jsxs(_Fragment, { children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Input, { autoFocus: true, value: newFolderName, onChange: (e) => setNewFolderName(e.target.value), onKeyDown: (e) => {
|
|
969
|
-
if (e.key === "Enter") {
|
|
970
|
-
e.preventDefault();
|
|
971
|
-
handleCreateFolder();
|
|
972
|
-
}
|
|
973
|
-
else if (e.key === "Escape") {
|
|
974
|
-
e.stopPropagation();
|
|
975
|
-
setCreatingFolder(false);
|
|
976
|
-
setNewFolderName("");
|
|
977
|
-
setNewFolderError(null);
|
|
978
|
-
}
|
|
979
|
-
}, placeholder: "Folder name", className: "h-8 flex-1 text-xs", disabled: newFolderSubmitting, "data-testid": "ai-image-new-folder-name" }), _jsxs(Button, { size: "sm", onClick: handleCreateFolder, disabled: !newFolderName.trim() || newFolderSubmitting, "data-testid": "ai-image-new-folder-create", children: [newFolderSubmitting ? (_jsx(Loader2, { className: "h-3.5 w-3.5 animate-spin", strokeWidth: 1 })) : null, "Create"] }), _jsx(Button, { size: "sm", variant: "ghost", onClick: () => {
|
|
980
|
-
setCreatingFolder(false);
|
|
981
|
-
setNewFolderName("");
|
|
982
|
-
setNewFolderError(null);
|
|
983
|
-
}, disabled: newFolderSubmitting, children: "Cancel" })] }), newFolderError && (_jsx("div", { className: "text-feedback-red mt-1 text-xs", children: newFolderError }))] })) : (_jsxs("div", { className: "flex items-center justify-between gap-2", children: [_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsxs(Button, { variant: "ghost", size: "sm", className: "min-w-0 gap-1.5", onClick: () => {
|
|
984
|
-
setCreatingFolder(true);
|
|
985
|
-
setNewFolderError(null);
|
|
986
|
-
}, disabled: !folderPickerCanCreate, "data-testid": "ai-image-new-folder", children: [_jsx(FolderPlus, { className: "h-3.5 w-3.5 shrink-0", strokeWidth: 1 }), _jsx("span", { className: "shrink-0", children: "New folder" }), _jsxs("span", { className: "text-neutral-grey-50 truncate font-normal", children: ["in", " ", folderPickerSelection
|
|
987
|
-
? folderPickerSelection.name ||
|
|
988
|
-
folderPickerSelection.path
|
|
989
|
-
.split("/")
|
|
990
|
-
.pop() ||
|
|
991
|
-
"selected folder"
|
|
992
|
-
: "Media Library"] })] }) }), _jsx(TooltipContent, { side: "bottom", sideOffset: 6, children: folderPickerCanCreate
|
|
993
|
-
? folderPickerSelection
|
|
994
|
-
? "Create a subfolder inside the highlighted folder"
|
|
995
|
-
: "Create a folder at the Media Library root"
|
|
996
|
-
: folderPickerSelection
|
|
997
|
-
? "You cannot create folders in the highlighted folder"
|
|
998
|
-
: "You cannot create folders at the Media Library root. Select a folder first." })] }), _jsx(Button, { size: "sm", className: "shrink-0", onClick: handleSelectTargetFolder, disabled: !folderPickerSelection?.canCreate, "data-testid": "ai-image-target-folder-select", children: "Select folder" })] })) })] })] })] }), targetFolderInitialized && !targetFolderId && (_jsx("div", { className: "bg-feedback-orange-light text-feedback-orange mt-3 rounded-lg px-3 py-2 text-xs", children: "Select a target folder to enable generation." }))] })] }) }), _jsxs(DialogButtons, { className: "bg-white", children: [_jsx(Button, { variant: "outline", onClick: handleCancel, disabled: submitting, children: "Cancel" }), _jsx(Button, { onClick: handleSubmit, disabled: !canSubmit, className: "min-w-[100px] gap-1", children: submitting ? (_jsxs(_Fragment, { children: [_jsx(Loader2, { className: "h-4 w-4 animate-spin", strokeWidth: 1 }), "Generating..."] })) : (_jsx(_Fragment, { children: "Generate Image" })) })] })] }) }));
|
|
1227
|
+
}, disabled: suggesting || submitting, className: "text-highlight-100 hover:text-highlight-100-hover inline-flex items-center gap-1.5 text-xs transition-colors disabled:cursor-not-allowed disabled:opacity-60", "data-testid": "ai-image-describe", children: [suggesting ? (_jsx(Loader2, { className: "h-3.5 w-3.5 animate-spin", strokeWidth: 1 })) : (_jsx(Lightbulb, { className: "h-3.5 w-3.5", strokeWidth: 1 })), suggesting
|
|
1228
|
+
? "Describing..."
|
|
1229
|
+
: "Describe from page context"] })), canBrowseMedia && (_jsxs("button", { type: "button", onClick: handleSearchMedia, disabled: browsingMedia || !hasPrompt, className: "text-neutral-grey-50 hover:text-highlight-100 disabled:hover:text-neutral-grey-50 inline-flex items-center gap-1.5 text-xs transition-colors disabled:cursor-not-allowed disabled:opacity-60", title: hasPrompt
|
|
1230
|
+
? "Find media library images matching the description"
|
|
1231
|
+
: "Describe the image first to search the media library", "data-testid": "ai-image-search-media", children: [_jsx(Search, { className: "h-3.5 w-3.5", strokeWidth: 1 }), browsingMedia
|
|
1232
|
+
? "Opening the media library..."
|
|
1233
|
+
: "Search the media library for this description"] }))] }))), _jsx("input", { ref: fileInputRef, type: "file", className: "hidden", accept: "image/*", multiple: true, onChange: (e) => {
|
|
1234
|
+
const files = e.target.files
|
|
1235
|
+
? Array.from(e.target.files)
|
|
1236
|
+
: null;
|
|
1237
|
+
e.target.value = "";
|
|
1238
|
+
handleFileUpload(files);
|
|
1239
|
+
} })] }) }), _jsxs("div", { className: "border-border-default flex flex-wrap items-center justify-between gap-x-4 gap-y-2 border-t bg-white px-6 py-3", "data-testid": "ai-image-target-folder-card", children: [_jsxs("div", { className: "flex min-w-0 flex-1 items-center gap-2 text-xs", children: [_jsx(FolderOpen, { className: cn("h-4 w-4 shrink-0", targetFolderId
|
|
1240
|
+
? "text-neutral-grey-50"
|
|
1241
|
+
: "text-feedback-orange"), strokeWidth: 1 }), targetFolderId ? (_jsxs(_Fragment, { children: [_jsx("span", { className: "text-neutral-grey-50 shrink-0", children: "Saving to" }), _jsx("span", { className: "text-neutral-grey-100 truncate font-medium", title: targetFolderPath, "data-testid": "ai-image-target-folder-name", children: formatFolderPath(targetFolderPath) ||
|
|
1242
|
+
targetFolderName ||
|
|
1243
|
+
"Selected folder" }), targetFolderIsPersonal && (_jsx("span", { className: "bg-highlight-10 text-highlight-100 text-2xs shrink-0 rounded-full px-2 py-0.5 font-medium", "data-testid": "ai-image-target-folder-personal-badge", children: "Your folder" }))] })) : !targetFolderInitialized ? (_jsx("span", { className: "text-neutral-grey-50", children: "Loading folder..." })) : (_jsx("span", { className: "text-feedback-orange", "data-testid": "ai-image-target-folder-name", children: "No folder selected" })), renderTargetFolderPicker()] }), _jsx(Button, { variant: "outline", size: "sm", onClick: handleCancel, disabled: submitting, children: "Cancel" })] })] }) }));
|
|
999
1244
|
});
|
|
1000
1245
|
AiImageEditorDialog.displayName = "AiImageEditorDialog";
|
|
1001
1246
|
export default AiImageEditorDialog;
|