@parhelia/core 0.3.12771 → 0.3.12777
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agents-view/AgentCard.js +1 -5
- package/dist/agents-view/AgentCard.js.map +1 -1
- package/dist/agents-view/AgentsView.js +1 -1
- package/dist/agents-view/AgentsView.js.map +1 -1
- package/dist/components/ActionButton.d.ts +7 -0
- package/dist/components/ActionButton.js +2 -2
- package/dist/components/ActionButton.js.map +1 -1
- package/dist/components/MarkdownDisplay.js +1 -1
- package/dist/components/ui/CardConnector.js +1 -1
- package/dist/components/ui/LanguageSelectionGrid.js +1 -1
- package/dist/components/ui/LanguageSelector.js +3 -3
- package/dist/components/ui/LanguageSelector.js.map +1 -1
- package/dist/components/ui/PlaceholderItemSelector.js +1 -1
- package/dist/components/ui/alert.d.ts +1 -1
- package/dist/components/ui/button.d.ts +2 -2
- package/dist/components/ui/card.js +1 -1
- package/dist/components/ui/close-button.d.ts +1 -1
- package/dist/components/ui/context-menu.js +1 -1
- package/dist/components/ui/copy-button.js +1 -1
- package/dist/components/ui/delete-button.d.ts +1 -1
- package/dist/components/ui/paste-button.js +1 -1
- package/dist/components/ui/popover.d.ts +1 -0
- package/dist/components/ui/popover.js +16 -7
- package/dist/components/ui/popover.js.map +1 -1
- package/dist/components/ui/sonner.js +1 -1
- package/dist/components/ui/upload-button.js +1 -1
- package/dist/config/config.js +18 -4
- package/dist/config/config.js.map +1 -1
- package/dist/editor/ConcurrentUserLimitDialog.js +1 -1
- package/dist/editor/ContentTree.d.ts +12 -1
- package/dist/editor/ContentTree.js +20 -3
- package/dist/editor/ContentTree.js.map +1 -1
- package/dist/editor/FieldActionsOverlay.js.map +1 -1
- package/dist/editor/FieldHistory.d.ts +15 -1
- package/dist/editor/FieldHistory.js +85 -52
- package/dist/editor/FieldHistory.js.map +1 -1
- package/dist/editor/FieldList.js +5 -2
- package/dist/editor/FieldList.js.map +1 -1
- package/dist/editor/FieldListField.js +7 -2
- package/dist/editor/FieldListField.js.map +1 -1
- package/dist/editor/FieldListFieldWithFallbacks.js +1 -1
- package/dist/editor/GlobalMenuBar.js +1 -1
- package/dist/editor/ItemInfo.js +2 -2
- package/dist/editor/ItemInfo.js.map +1 -1
- package/dist/editor/LinkEditorDialog.js +1 -1
- package/dist/editor/MigrationsView.js +1 -1
- package/dist/editor/PictureCropper.js +1 -1
- package/dist/editor/PictureCropper.js.map +1 -1
- package/dist/editor/SetupWizard.js.map +1 -1
- package/dist/editor/WorkspaceTitleSwitcher.js +1 -1
- package/dist/editor/ai/AgentImageCopyButton.d.ts +6 -0
- package/dist/editor/ai/AgentImageCopyButton.js +93 -0
- package/dist/editor/ai/AgentImageCopyButton.js.map +1 -0
- package/dist/editor/ai/AgentSharingSection.js +1 -1
- package/dist/editor/ai/Agents.d.ts +2 -2
- package/dist/editor/ai/Agents.js +2 -10
- package/dist/editor/ai/Agents.js.map +1 -1
- package/dist/editor/ai/GuidanceOverlay.js +1 -1
- package/dist/editor/ai/GuidanceOverlay.js.map +1 -1
- package/dist/editor/ai/InlineAiDialog.js +1 -1
- package/dist/editor/ai/InlineAiDialog.js.map +1 -1
- package/dist/editor/ai/InlineAiTrigger.js +1 -1
- package/dist/editor/ai/MediaImage.js +2 -1
- package/dist/editor/ai/MediaImage.js.map +1 -1
- package/dist/editor/ai/agentActivitySummary.js.map +1 -1
- package/dist/editor/ai/agentMessageHelpers.js.map +1 -1
- package/dist/editor/ai/dialogs/AgentDialogHandler.js +103 -6
- package/dist/editor/ai/dialogs/AgentDialogHandler.js.map +1 -1
- package/dist/editor/ai/dialogs/QuestionnaireInline.js +1 -1
- package/dist/editor/ai/dialogs/agentDialogTypes.d.ts +21 -0
- package/dist/editor/ai/dialogs/agentDialogTypes.js +3 -1
- package/dist/editor/ai/dialogs/agentDialogTypes.js.map +1 -1
- package/dist/editor/ai/terminal/agentCost.d.ts +1 -0
- package/dist/editor/ai/terminal/agentCost.js +10 -3
- package/dist/editor/ai/terminal/agentCost.js.map +1 -1
- package/dist/editor/ai/terminal/agentSessionSelectors.js.map +1 -1
- package/dist/editor/ai/terminal/agentSessionState.js +4 -1
- package/dist/editor/ai/terminal/agentSessionState.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentCostDisplay.d.ts +1 -1
- package/dist/editor/ai/terminal/components/AgentCostDisplay.js +3 -3
- package/dist/editor/ai/terminal/components/AgentCostDisplay.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentDocumentList.js +2 -2
- package/dist/editor/ai/terminal/components/AgentDocumentList.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentFullPromptControls.js +1 -1
- package/dist/editor/ai/terminal/components/AgentMemoryPanel.d.ts +22 -5
- package/dist/editor/ai/terminal/components/AgentMemoryPanel.js +102 -19
- package/dist/editor/ai/terminal/components/AgentMemoryPanel.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentProfileModelSettingsSection.js +1 -1
- package/dist/editor/ai/terminal/components/AgentProfileSwitcher.js +1 -1
- package/dist/editor/ai/terminal/components/AgentPromptInputArea.js +8 -3
- package/dist/editor/ai/terminal/components/AgentPromptInputArea.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentPromptTrayPopovers.js +46 -6
- package/dist/editor/ai/terminal/components/AgentPromptTrayPopovers.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentRunStatusBanners.js +1 -1
- package/dist/editor/ai/terminal/components/AgentSettingsContent.js +1 -1
- package/dist/editor/ai/terminal/components/AgentTerminalContextChrome.d.ts +1 -0
- package/dist/editor/ai/terminal/components/AgentTerminalContextChrome.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentTerminalContextPanels.js +1 -1
- package/dist/editor/ai/terminal/components/AgentTerminalContextPanels.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentTerminalFullLayout.js +1 -1
- package/dist/editor/ai/terminal/components/AgentTerminalMessageGroups.js +1 -1
- package/dist/editor/ai/terminal/components/AgentTerminalStatusBar.js +1 -1
- package/dist/editor/ai/terminal/components/AgentTerminalStatusBar.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentTerminalView.d.ts +1 -1
- package/dist/editor/ai/terminal/components/AgentTerminalView.js +1 -1
- package/dist/editor/ai/terminal/components/AiResponseMessage.js +1 -1
- package/dist/editor/ai/terminal/components/AiResponseMessage.js.map +1 -1
- package/dist/editor/ai/terminal/components/ContextInfoBar.d.ts +2 -1
- package/dist/editor/ai/terminal/components/ContextInfoBar.js +2 -2
- package/dist/editor/ai/terminal/components/ContextInfoBar.js.map +1 -1
- package/dist/editor/ai/terminal/components/EditOperationsPanel.js +1 -1
- package/dist/editor/ai/terminal/components/QuestionnaireRecap.d.ts +2 -2
- package/dist/editor/ai/terminal/components/ToolCallDisplay.js +3 -2
- package/dist/editor/ai/terminal/components/ToolCallDisplay.js.map +1 -1
- package/dist/editor/ai/terminal/components/UserMessage.js +1 -1
- package/dist/editor/ai/terminal/useAgentContextDisplayNames.d.ts +2 -0
- package/dist/editor/ai/terminal/useAgentContextDisplayNames.js +37 -28
- package/dist/editor/ai/terminal/useAgentContextDisplayNames.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentEditorContextPipeline.d.ts +1 -0
- package/dist/editor/ai/terminal/useAgentInlineDialogPipeline.d.ts +1 -1
- package/dist/editor/ai/terminal/useAgentLoader.js +5 -2
- package/dist/editor/ai/terminal/useAgentLoader.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentPromptComposerSurface.d.ts +2 -2
- package/dist/editor/ai/terminal/useAgentPromptQueueSocketHandler.d.ts +2 -0
- package/dist/editor/ai/terminal/useAgentPromptQueueSocketHandler.js +5 -3
- package/dist/editor/ai/terminal/useAgentPromptQueueSocketHandler.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentRunMessagePipeline.d.ts +4 -4
- package/dist/editor/ai/terminal/useAgentRunStatusSocketHandler.js +3 -0
- package/dist/editor/ai/terminal/useAgentRunStatusSocketHandler.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentSettingsPanel.d.ts +31 -31
- package/dist/editor/ai/terminal/useAgentSettleCompletedRun.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentStopCommand.js +4 -0
- package/dist/editor/ai/terminal/useAgentStopCommand.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentStreamPipeline.js +1 -0
- package/dist/editor/ai/terminal/useAgentStreamPipeline.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentTerminalChrome.d.ts +1 -0
- package/dist/editor/ai/terminal/useAgentTerminalChrome.js +2 -2
- package/dist/editor/ai/terminal/useAgentTerminalChrome.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentTerminalController.js +3 -1
- package/dist/editor/ai/terminal/useAgentTerminalController.js.map +1 -1
- package/dist/editor/ai/useAgentPanes.js.map +1 -1
- package/dist/editor/ai/useAgentStatus.js.map +1 -1
- package/dist/editor/ai/useInlineAiPosition.js.map +1 -1
- package/dist/editor/ai-image-editor/AiImageEditorDialog.js +42 -23
- package/dist/editor/ai-image-editor/AiImageEditorDialog.js.map +1 -1
- package/dist/editor/bridge/BridgeClient.js +6 -6
- package/dist/editor/bridge/BridgeClient.js.map +1 -1
- package/dist/editor/bridge/protocol.d.ts +26 -0
- package/dist/editor/bridge/protocol.js +1 -1
- package/dist/editor/bridge/protocol.js.map +1 -1
- package/dist/editor/client/AboutDialog.js +1 -1
- package/dist/editor/client/EditorShell.js +125 -90
- package/dist/editor/client/EditorShell.js.map +1 -1
- package/dist/editor/client/SessionExpiredOverlay.js +1 -1
- package/dist/editor/client/SessionExpiredOverlay.js.map +1 -1
- package/dist/editor/client/editContext.d.ts +26 -3
- package/dist/editor/client/editContext.js.map +1 -1
- package/dist/editor/client/fieldModificationStore.js +0 -21
- package/dist/editor/client/fieldModificationStore.js.map +1 -1
- package/dist/editor/client/hooks/useClientInfoRegistration.d.ts +13 -0
- package/dist/editor/client/hooks/useClientInfoRegistration.js +38 -0
- package/dist/editor/client/hooks/useClientInfoRegistration.js.map +1 -0
- package/dist/editor/client/itemsRepository.js +1 -34
- package/dist/editor/client/itemsRepository.js.map +1 -1
- package/dist/editor/client/operations.d.ts +4 -2
- package/dist/editor/client/operations.js +89 -65
- package/dist/editor/client/operations.js.map +1 -1
- package/dist/editor/client/pageModelBuilder.js.map +1 -1
- package/dist/editor/client/ui/EditorChrome.d.ts +1 -0
- package/dist/editor/client/ui/EditorChrome.js +7 -2
- package/dist/editor/client/ui/EditorChrome.js.map +1 -1
- package/dist/editor/client/ui/FullscreenControls.d.ts +3 -0
- package/dist/editor/client/ui/FullscreenControls.js +7 -12
- package/dist/editor/client/ui/FullscreenControls.js.map +1 -1
- package/dist/editor/client/undoTargetResolution.d.ts +28 -0
- package/dist/editor/client/undoTargetResolution.js +69 -0
- package/dist/editor/client/undoTargetResolution.js.map +1 -0
- package/dist/editor/commands/componentCommands.js +2 -2
- package/dist/editor/commands/componentCommands.js.map +1 -1
- package/dist/editor/commands/customCommandConverter.js.map +1 -1
- package/dist/editor/commands/itemCommands.js +19 -2
- package/dist/editor/commands/itemCommands.js.map +1 -1
- package/dist/editor/content-tree/IndicatorSettings.js +1 -1
- package/dist/editor/content-tree/TreeOptions.js +1 -1
- package/dist/editor/context-menu/InsertMenu.js +1 -1
- package/dist/editor/editor-warnings/NoLanguageWriteAccess.js +1 -1
- package/dist/editor/field-types/AttachmentEditor.js +7 -0
- package/dist/editor/field-types/AttachmentEditor.js.map +1 -1
- package/dist/editor/field-types/LinkFieldEditor.js +1 -1
- package/dist/editor/field-types/PictureFieldEditor.js +21 -21
- package/dist/editor/field-types/PictureFieldEditor.js.map +1 -1
- package/dist/editor/field-types/RichTextEditor.js +1 -1
- package/dist/editor/field-types/RichTextEditorComponent.js +6 -0
- package/dist/editor/field-types/RichTextEditorComponent.js.map +1 -1
- package/dist/editor/field-types/SingleLineText.js +0 -34
- package/dist/editor/field-types/SingleLineText.js.map +1 -1
- package/dist/editor/field-types/richtext/bridgeRichTextProfile.d.ts +1 -1
- package/dist/editor/field-types/richtext/components/EditorDropdown.js +1 -1
- package/dist/editor/field-types/richtext/components/ReactSlate.js +1 -1
- package/dist/editor/field-types/richtext/components/SimpleDropdown.js +1 -1
- package/dist/editor/field-types/richtext/components/SimpleToolbar.js +1 -1
- package/dist/editor/field-types/richtext/hooks/useRichTextProfile.js.map +1 -1
- package/dist/editor/field-types/richtext/utils/conversion.js +2 -4
- package/dist/editor/field-types/richtext/utils/conversion.js.map +1 -1
- package/dist/editor/field-types/richtext/utils/plugins.d.ts +1 -0
- package/dist/editor/field-types/richtext/utils/plugins.js +12 -0
- package/dist/editor/field-types/richtext/utils/plugins.js.map +1 -1
- package/dist/editor/field-types/richtext/utils/profileMapper.js.map +1 -1
- package/dist/editor/field-types/useFormFieldCaretPresence.js.map +1 -1
- package/dist/editor/fieldValueDiagnostics.js.map +1 -1
- package/dist/editor/media-selector/MediaFolderBrowser.js +26 -4
- package/dist/editor/media-selector/MediaFolderBrowser.js.map +1 -1
- package/dist/editor/media-selector/Preview.js +6 -11
- package/dist/editor/media-selector/Preview.js.map +1 -1
- package/dist/editor/media-selector/Thumbnails.js +31 -3
- package/dist/editor/media-selector/Thumbnails.js.map +1 -1
- package/dist/editor/media-selector/TreeSelector.js +53 -6
- package/dist/editor/media-selector/TreeSelector.js.map +1 -1
- package/dist/editor/media-selector/UploadZone.d.ts +1 -2
- package/dist/editor/media-selector/UploadZone.js +3 -4
- package/dist/editor/media-selector/UploadZone.js.map +1 -1
- package/dist/editor/media-selector/mediaItemDrag.d.ts +28 -0
- package/dist/editor/media-selector/mediaItemDrag.js +42 -0
- package/dist/editor/media-selector/mediaItemDrag.js.map +1 -0
- package/dist/editor/menubar/ActiveUsers.js +6 -3
- package/dist/editor/menubar/ActiveUsers.js.map +1 -1
- package/dist/editor/menubar/GenericToolbar.js +1 -1
- package/dist/editor/menubar/GenericToolbar.js.map +1 -1
- package/dist/editor/menubar/ItemActionsMenu.js +1 -1
- package/dist/editor/menubar/ItemLanguageVersion.js +1 -1
- package/dist/editor/menubar/ItemLanguageVersion.js.map +1 -1
- package/dist/editor/menubar/OperationsIndicator.js +1 -1
- package/dist/editor/menubar/PageSelector.d.ts +2 -1
- package/dist/editor/menubar/PageSelector.js +14 -4
- package/dist/editor/menubar/PageSelector.js.map +1 -1
- package/dist/editor/menubar/VersionPreviewCard.js +1 -1
- package/dist/editor/menubar/VersionSelector.js +1 -1
- package/dist/editor/menubar/toolbar-sections/CustomCommandsToolbar.js +1 -1
- package/dist/editor/menubar/toolbar-sections/DeviceSwitchToolbar.d.ts +3 -1
- package/dist/editor/menubar/toolbar-sections/DeviceSwitchToolbar.js +6 -7
- package/dist/editor/menubar/toolbar-sections/DeviceSwitchToolbar.js.map +1 -1
- package/dist/editor/menubar/toolbar-sections/EditControls.js +5 -5
- package/dist/editor/menubar/toolbar-sections/EditControls.js.map +1 -1
- package/dist/editor/menubar/toolbar-sections/InsertControls.js +1 -1
- package/dist/editor/menubar/toolbar-sections/InsertControls.js.map +1 -1
- package/dist/editor/menubar/toolbar-sections/ManualBrowser.js +14 -4
- package/dist/editor/menubar/toolbar-sections/ManualBrowser.js.map +1 -1
- package/dist/editor/menubar/toolbar-sections/PreviewModeControl.d.ts +1 -0
- package/dist/editor/menubar/toolbar-sections/PreviewModeControl.js +14 -0
- package/dist/editor/menubar/toolbar-sections/PreviewModeControl.js.map +1 -0
- package/dist/editor/menubar/toolbar-sections/RefreshPageControl.d.ts +7 -0
- package/dist/editor/menubar/toolbar-sections/RefreshPageControl.js +44 -0
- package/dist/editor/menubar/toolbar-sections/RefreshPageControl.js.map +1 -0
- package/dist/editor/menubar/toolbar-sections/ReviewCommands.js +1 -1
- package/dist/editor/menubar/toolbar-sections/UtilityControls.js +1 -1
- package/dist/editor/menubar/toolbar-sections/ViewportControls.d.ts +7 -0
- package/dist/editor/menubar/toolbar-sections/ViewportControls.js +16 -8
- package/dist/editor/menubar/toolbar-sections/ViewportControls.js.map +1 -1
- package/dist/editor/menubar/toolbar-sections/index.d.ts +1 -0
- package/dist/editor/menubar/toolbar-sections/index.js +1 -0
- package/dist/editor/menubar/toolbar-sections/index.js.map +1 -1
- package/dist/editor/notifications/NotificationCenter.js +1 -1
- package/dist/editor/notifications/WatchButton.js +1 -1
- package/dist/editor/notifications/notificationListState.d.ts +1 -1
- package/dist/editor/notifications/notificationRoutes.js.map +1 -1
- package/dist/editor/notifications/useNotifications.d.ts +1 -1
- package/dist/editor/page-editor-chrome/BridgeInlineFormatOverlay.js +6 -3
- package/dist/editor/page-editor-chrome/BridgeInlineFormatOverlay.js.map +1 -1
- package/dist/editor/page-editor-chrome/CommentHighlightings.js +1 -1
- package/dist/editor/page-editor-chrome/DragInsertionOverlay.js +50 -22
- package/dist/editor/page-editor-chrome/DragInsertionOverlay.js.map +1 -1
- package/dist/editor/page-editor-chrome/EmptyImageFieldIndicators.js +1 -1
- package/dist/editor/page-editor-chrome/FeedbackHighlightBadge.js.map +1 -1
- package/dist/editor/page-editor-chrome/FieldActionIndicators.js +1 -1
- package/dist/editor/page-editor-chrome/FieldEditedIndicators.js +1 -1
- package/dist/editor/page-editor-chrome/FrameMenu.js +1 -1
- package/dist/editor/page-editor-chrome/FrameMenus.js +1 -1
- package/dist/editor/page-editor-chrome/InlineFieldHistoryButton.d.ts +58 -0
- package/dist/editor/page-editor-chrome/InlineFieldHistoryButton.js +709 -0
- package/dist/editor/page-editor-chrome/InlineFieldHistoryButton.js.map +1 -0
- package/dist/editor/page-editor-chrome/LockedFieldIndicator.js +12 -2
- package/dist/editor/page-editor-chrome/LockedFieldIndicator.js.map +1 -1
- package/dist/editor/page-editor-chrome/PageEditorChrome.js +7 -2
- package/dist/editor/page-editor-chrome/PageEditorChrome.js.map +1 -1
- package/dist/editor/page-editor-chrome/PictureEditorOverlay.js +57 -10
- package/dist/editor/page-editor-chrome/PictureEditorOverlay.js.map +1 -1
- package/dist/editor/page-editor-chrome/PlaceholderDropZone.js +1 -8
- package/dist/editor/page-editor-chrome/PlaceholderDropZone.js.map +1 -1
- package/dist/editor/page-editor-chrome/PlaceholderDropZones.d.ts +1 -0
- package/dist/editor/page-editor-chrome/PlaceholderDropZones.js +10 -3
- package/dist/editor/page-editor-chrome/PlaceholderDropZones.js.map +1 -1
- package/dist/editor/page-editor-chrome/SuggestionHighlightings.js +5 -2
- package/dist/editor/page-editor-chrome/SuggestionHighlightings.js.map +1 -1
- package/dist/editor/page-editor-chrome/SuggestionVariantSwitcher.js +7 -2
- package/dist/editor/page-editor-chrome/SuggestionVariantSwitcher.js.map +1 -1
- package/dist/editor/page-editor-chrome/VersionDiffHighlightings.d.ts +5 -2
- package/dist/editor/page-editor-chrome/VersionDiffHighlightings.js +153 -51
- package/dist/editor/page-editor-chrome/VersionDiffHighlightings.js.map +1 -1
- package/dist/editor/page-editor-chrome/overlay/IframeOverlayProvider.js.map +1 -1
- package/dist/editor/page-editor-chrome/overlay/geometry.d.ts +7 -0
- package/dist/editor/page-editor-chrome/overlay/geometry.js +35 -17
- package/dist/editor/page-editor-chrome/overlay/geometry.js.map +1 -1
- package/dist/editor/page-editor-chrome/overlay/placeholderZones.js.map +1 -1
- package/dist/editor/page-editor-chrome/useBridgeInlineEditing.js +18 -70
- package/dist/editor/page-editor-chrome/useBridgeInlineEditing.js.map +1 -1
- package/dist/editor/page-viewer/MiniMap.js +1 -1
- package/dist/editor/page-viewer/MiniMap.js.map +1 -1
- package/dist/editor/page-viewer/MinimapDropTargets.js +1 -1
- package/dist/editor/page-viewer/PageViewer.js +5 -3
- package/dist/editor/page-viewer/PageViewer.js.map +1 -1
- package/dist/editor/page-viewer/PageViewerFrame.js +252 -121
- package/dist/editor/page-viewer/PageViewerFrame.js.map +1 -1
- package/dist/editor/page-viewer/bridgeFieldPatch.js +0 -45
- package/dist/editor/page-viewer/bridgeFieldPatch.js.map +1 -1
- package/dist/editor/page-viewer/bridgeKeyboardShortcuts.d.ts +12 -0
- package/dist/editor/page-viewer/bridgeKeyboardShortcuts.js +27 -0
- package/dist/editor/page-viewer/bridgeKeyboardShortcuts.js.map +1 -1
- package/dist/editor/page-viewer/fullscreenPagePath.d.ts +1 -0
- package/dist/editor/page-viewer/fullscreenPagePath.js +11 -0
- package/dist/editor/page-viewer/fullscreenPagePath.js.map +1 -0
- package/dist/editor/page-viewer/internalLinkNavigation.d.ts +9 -0
- package/dist/editor/page-viewer/internalLinkNavigation.js +104 -0
- package/dist/editor/page-viewer/internalLinkNavigation.js.map +1 -0
- package/dist/editor/page-viewer/pageViewContext.d.ts +3 -1
- package/dist/editor/page-viewer/pageViewContext.js +14 -10
- package/dist/editor/page-viewer/pageViewContext.js.map +1 -1
- package/dist/editor/page-viewer/parentBridgeInjection.d.ts +2 -0
- package/dist/editor/page-viewer/parentBridgeInjection.js +63 -16
- package/dist/editor/page-viewer/parentBridgeInjection.js.map +1 -1
- package/dist/editor/page-viewer/renderUrl.d.ts +1 -1
- 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/TreeItemPicker.js +7 -1
- package/dist/editor/personalization/TreeItemPicker.js.map +1 -1
- package/dist/editor/personalization/utils.js.map +1 -1
- package/dist/editor/reviews/CommentEditor.js +1 -1
- package/dist/editor/reviews/CommentEditor.js.map +1 -1
- package/dist/editor/reviews/CommentView.js +1 -1
- package/dist/editor/reviews/Comments.js +5 -20
- package/dist/editor/reviews/Comments.js.map +1 -1
- package/dist/editor/reviews/CreateReviewDialog.js +1 -1
- package/dist/editor/reviews/DecisionsMatrix.js +1 -1
- package/dist/editor/reviews/EditReviewSettingsDialog.js +1 -1
- package/dist/editor/reviews/FeedbackFilters.d.ts +16 -0
- package/dist/editor/reviews/FeedbackFilters.js +45 -0
- package/dist/editor/reviews/FeedbackFilters.js.map +1 -0
- package/dist/editor/reviews/FeedbackModeIntro.js +2 -2
- package/dist/editor/reviews/FeedbackModeIntro.js.map +1 -1
- package/dist/editor/reviews/MentionText.js +1 -1
- package/dist/editor/reviews/ReviewCard.js +1 -1
- package/dist/editor/reviews/ReviewDetail.js +1 -1
- package/dist/editor/reviews/ReviewItemsPanel.js +74 -11
- package/dist/editor/reviews/ReviewItemsPanel.js.map +1 -1
- package/dist/editor/reviews/SecretPhraseInput.js +1 -1
- package/dist/editor/reviews/suggestedEditState.js.map +1 -1
- package/dist/editor/reviews/useMultiReview.js +5 -2
- package/dist/editor/reviews/useMultiReview.js.map +1 -1
- package/dist/editor/services/agentService.d.ts +91 -10
- package/dist/editor/services/agentService.js +100 -27
- package/dist/editor/services/agentService.js.map +1 -1
- package/dist/editor/services/aiService.js.map +1 -1
- package/dist/editor/services/contentService.d.ts +3 -1
- package/dist/editor/services/contentService.js +8 -0
- package/dist/editor/services/contentService.js.map +1 -1
- package/dist/editor/services/contextService.js.map +1 -1
- package/dist/editor/services/editService.js.map +1 -1
- package/dist/editor/services/favouritesService.d.ts +0 -7
- package/dist/editor/services/favouritesService.js +0 -7
- package/dist/editor/services/favouritesService.js.map +1 -1
- package/dist/editor/services/indexService.d.ts +3 -1
- package/dist/editor/services/indexService.js +8 -0
- package/dist/editor/services/indexService.js.map +1 -1
- package/dist/editor/services/localStorageService.js.map +1 -1
- package/dist/editor/services/reviewsService.js.map +1 -1
- package/dist/editor/services/serviceHelper.d.ts +3 -0
- package/dist/editor/services/serviceHelper.js +51 -1
- package/dist/editor/services/serviceHelper.js.map +1 -1
- package/dist/editor/services/suggestedEditsService.js.map +1 -1
- package/dist/editor/services/systemService.d.ts +10 -0
- package/dist/editor/services/systemService.js +3 -0
- package/dist/editor/services/systemService.js.map +1 -1
- package/dist/editor/services/textCompletionService.js +5 -0
- package/dist/editor/services/textCompletionService.js.map +1 -1
- package/dist/editor/settings/About.js +2 -4
- package/dist/editor/settings/About.js.map +1 -1
- package/dist/editor/settings/IndexOverview.js +3 -2
- package/dist/editor/settings/IndexOverview.js.map +1 -1
- package/dist/editor/settings/SettingsBreadcrumb.js +1 -1
- package/dist/editor/settings/SettingsView.js +1 -1
- package/dist/editor/settings/StatusSummary.js +1 -1
- package/dist/editor/settings/index/IndexGenerationsSection.d.ts +8 -0
- package/dist/editor/settings/index/IndexGenerationsSection.js +93 -0
- package/dist/editor/settings/index/IndexGenerationsSection.js.map +1 -0
- package/dist/editor/settings/panels/AgentProfileConfigPanel.js +1 -1
- package/dist/editor/settings/panels/AgentsPanel.js +1 -1
- package/dist/editor/settings/panels/CreateAgentProfileDialog.js +1 -1
- package/dist/editor/settings/panels/CreateJavaScriptToolDialog.js +1 -1
- package/dist/editor/settings/panels/CreateMcpServerDialog.js +1 -1
- package/dist/editor/settings/panels/JavaScriptToolsPanel.js +1 -1
- package/dist/editor/settings/panels/MemoriesPanel.d.ts +16 -0
- package/dist/editor/settings/panels/MemoriesPanel.js +291 -0
- package/dist/editor/settings/panels/MemoriesPanel.js.map +1 -0
- package/dist/editor/settings/panels/MemoryEntryDialog.d.ts +45 -0
- package/dist/editor/settings/panels/MemoryEntryDialog.js +167 -0
- package/dist/editor/settings/panels/MemoryEntryDialog.js.map +1 -0
- package/dist/editor/settings/panels/ModelsPanel.js +1 -1
- package/dist/editor/settings/panels/ModelsPanel.js.map +1 -1
- package/dist/editor/settings/panels/NotificationSubscriptionsPanel.js +1 -1
- package/dist/editor/settings/panels/NotificationSubscriptionsPanel.js.map +1 -1
- package/dist/editor/settings/panels/ProjectTemplatesPanel.js +1 -1
- package/dist/editor/settings/panels/ProjectTemplatesPanel.js.map +1 -1
- package/dist/editor/settings/panels/ProvidersPanel.js +1 -1
- package/dist/editor/settings/panels/RenderingHostsPanel.d.ts +2 -0
- package/dist/editor/settings/panels/RenderingHostsPanel.js +63 -0
- package/dist/editor/settings/panels/RenderingHostsPanel.js.map +1 -0
- package/dist/editor/settings/panels/SearchConfigPanel.js +6 -4
- package/dist/editor/settings/panels/SearchConfigPanel.js.map +1 -1
- package/dist/editor/settings/panels/StatusPanel.js +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/setup-wizard/steps/CompleteStep.js +1 -1
- package/dist/editor/setup-wizard/steps/CreateSettingsStep.js +1 -1
- package/dist/editor/setup-wizard/steps/LicenseActivationStep.js +1 -1
- package/dist/editor/setup-wizard/steps/LicenseEmailStep.js +1 -1
- package/dist/editor/setup-wizard/steps/ModelSelectionStep.js +1 -1
- package/dist/editor/setup-wizard/steps/ProviderStep.js +1 -1
- package/dist/editor/sidebar/ComponentPalette.js +4 -4
- package/dist/editor/sidebar/ComponentPalette.js.map +1 -1
- package/dist/editor/sidebar/ComponentTree.js +182 -61
- package/dist/editor/sidebar/ComponentTree.js.map +1 -1
- package/dist/editor/sidebar/ContentTreePanel.d.ts +2 -2
- package/dist/editor/sidebar/DictionaryEditor.js +1 -1
- package/dist/editor/sidebar/EditHistory.js +1 -1
- package/dist/editor/sidebar/Favorites.js.map +1 -1
- package/dist/editor/sidebar/NavigationPanelItem.js +1 -1
- package/dist/editor/sidebar/OperationItem.js +1 -1
- package/dist/editor/sidebar/Sessions.js +20 -9
- package/dist/editor/sidebar/Sessions.js.map +1 -1
- package/dist/editor/sidebar/Workbox.d.ts +8 -0
- package/dist/editor/sidebar/Workbox.js +94 -12
- package/dist/editor/sidebar/Workbox.js.map +1 -1
- package/dist/editor/sidebar/WorkboxFilters.d.ts +11 -0
- package/dist/editor/sidebar/WorkboxFilters.js +61 -0
- package/dist/editor/sidebar/WorkboxFilters.js.map +1 -0
- package/dist/editor/sidebar/WorkspaceRail.js +1 -1
- package/dist/editor/sidebar/useSharedComponentPublishState.js.map +1 -1
- package/dist/editor/template-wizard/TemplateBuilderDialog.js +1 -1
- package/dist/editor/template-wizard/TemplateStructureInlineEditor.js +1 -1
- package/dist/editor/tree-indicators/GutterColumns.js +1 -1
- package/dist/editor/tree-indicators/GutterContext.js +2 -2
- package/dist/editor/tree-indicators/GutterContext.js.map +1 -1
- package/dist/editor/ui/DragPreview.js.map +1 -1
- package/dist/editor/ui/ItemCollectionEditor.js +1 -1
- package/dist/editor/ui/ItemNameDialogNew.d.ts +11 -0
- package/dist/editor/ui/ItemNameDialogNew.js +12 -7
- package/dist/editor/ui/ItemNameDialogNew.js.map +1 -1
- package/dist/editor/ui/ItemSearch.js +1 -1
- package/dist/editor/ui/PerfectTree.d.ts +5 -1
- package/dist/editor/ui/PerfectTree.js +7 -5
- package/dist/editor/ui/PerfectTree.js.map +1 -1
- package/dist/editor/ui/PublishDialog.js +1 -1
- package/dist/editor/ui/PublishItemDialog.js +1 -1
- package/dist/editor/ui/PublishRestrictionsDialog.js +2 -2
- package/dist/editor/ui/PublishRestrictionsDialog.js.map +1 -1
- package/dist/editor/ui/RemoveComponentsConfirmMessage.js +1 -1
- package/dist/editor/ui/SimpleIconButton.d.ts +1 -1
- package/dist/editor/ui/SimpleTable.d.ts +5 -1
- package/dist/editor/ui/SimpleTable.js +5 -1
- package/dist/editor/ui/SimpleTable.js.map +1 -1
- package/dist/editor/ui/Spinner.js +1 -1
- package/dist/editor/ui/Spinner.js.map +1 -1
- package/dist/editor/ui/WorkboxItemsTable.js +49 -20
- package/dist/editor/ui/WorkboxItemsTable.js.map +1 -1
- package/dist/editor/utils/selectionContext.js.map +1 -1
- package/dist/editor/utils/sitecoreDate.js +8 -2
- package/dist/editor/utils/sitecoreDate.js.map +1 -1
- package/dist/editor/version-diff/versionDiffGeometryKeys.d.ts +10 -0
- package/dist/editor/version-diff/versionDiffGeometryKeys.js +16 -0
- package/dist/editor/version-diff/versionDiffGeometryKeys.js.map +1 -0
- package/dist/editor/version-diff/versionDiffHighlightStyles.d.ts +6 -0
- package/dist/editor/version-diff/versionDiffHighlightStyles.js +6 -0
- package/dist/editor/version-diff/versionDiffHighlightStyles.js.map +1 -1
- package/dist/editor/version-diff/versionDiffTargets.d.ts +40 -1
- package/dist/editor/version-diff/versionDiffTargets.js +176 -15
- package/dist/editor/version-diff/versionDiffTargets.js.map +1 -1
- package/dist/editor/views/ItemEditor.js +1 -1
- package/dist/editor/views/ItemEditorPane.js +1 -1
- package/dist/editor/views/ItemEditorPane.js.map +1 -1
- package/dist/editor/views/SingleEditView.js +1 -1
- package/dist/lib/pointerDrag.js.map +1 -1
- package/dist/lib/safelist.js +1 -1
- package/dist/licensing/FeatureGate.d.ts +1 -1
- package/dist/licensing/LicenseContext.js.map +1 -1
- package/dist/licensing/LicenseOverlay.js +1 -1
- package/dist/logging/consolePrefix.js.map +1 -1
- package/dist/revision.d.ts +2 -2
- package/dist/revision.js +2 -2
- package/dist/setup/services/setupWizardService.d.ts +3 -56
- package/dist/setup/services/setupWizardService.js +0 -43
- package/dist/setup/services/setupWizardService.js.map +1 -1
- package/dist/setup/wizard/steps/ImportModelDialog.js +1 -1
- package/dist/splash-screen/NewPage.js +1 -1
- package/dist/splash-screen/RecentPages.js +1 -1
- package/dist/task-board/TaskBoardWorkspace.js +5 -0
- package/dist/task-board/TaskBoardWorkspace.js.map +1 -1
- package/dist/task-board/components/ItemCollectionEditorDialog.js +1 -1
- package/dist/task-board/components/ProjectDashboard.js +1 -1
- package/dist/task-board/components/ProjectGoalsPanel.js +1 -1
- package/dist/task-board/components/ProjectSettingsDialog.js +1 -1
- package/dist/task-board/components/TaskBoardBreadcrumb.js +1 -1
- package/dist/task-board/components/TaskBoardProjectListSidebar.js +1 -1
- package/dist/task-board/components/TaskBoardProjectListSidebar.js.map +1 -1
- package/dist/task-board/components/TaskBoardTitlebar.js +1 -1
- package/dist/task-board/components/TaskDetailPanel.js +1 -1
- package/dist/task-board/components/TaskReviewActions.js +1 -1
- package/dist/task-board/components/TaskRow.js +1 -1
- package/dist/task-board/components/TaskboardPersistentLogPanel.js +1 -1
- package/dist/task-board/components/WizardCommunicationCenter.js +1 -1
- package/dist/task-board/components/WizardTask.js +1 -1
- package/dist/task-board/components/WizardTaskDetailsPanel.js +1 -1
- package/dist/task-board/services/goalService.d.ts +1 -14
- package/dist/task-board/services/goalService.js +0 -10
- package/dist/task-board/services/goalService.js.map +1 -1
- package/dist/task-board/services/taskService.d.ts +0 -11
- package/dist/task-board/services/taskService.js +0 -3
- package/dist/task-board/services/taskService.js.map +1 -1
- package/dist/task-board/views/DependencyGraphView.d.ts +13 -0
- package/dist/task-board/views/DependencyGraphView.js +62 -11
- package/dist/task-board/views/DependencyGraphView.js.map +1 -1
- package/dist/task-board/views/ListView.js +1 -1
- package/dist/tour/Tour.js +1 -1
- package/dist/tour/Tour.js.map +1 -1
- package/dist/tour/default-tour.js +1 -1
- package/dist/tour/preview-tour.js +1 -1
- package/dist/types.d.ts +33 -9
- package/package.json +3 -2
- package/styles.css +4 -4
- package/dist/editor/ai/terminal/components/AgentEditHistoryButton.d.ts +0 -5
- package/dist/editor/ai/terminal/components/AgentEditHistoryButton.js +0 -12
- package/dist/editor/ai/terminal/components/AgentEditHistoryButton.js.map +0 -1
- package/dist/editor/ai/terminal/components/AgentThinkingDots.d.ts +0 -5
- package/dist/editor/ai/terminal/components/AgentThinkingDots.js +0 -9
- package/dist/editor/ai/terminal/components/AgentThinkingDots.js.map +0 -1
- package/dist/editor/reviews/CommentsAndFeedback.d.ts +0 -8
- package/dist/editor/reviews/CommentsAndFeedback.js +0 -17
- package/dist/editor/reviews/CommentsAndFeedback.js.map +0 -1
- package/dist/editor/reviews/CreateReviewDetailsStep.d.ts +0 -53
- package/dist/editor/reviews/CreateReviewDetailsStep.js +0 -77
- package/dist/editor/reviews/CreateReviewDetailsStep.js.map +0 -1
- package/dist/splash-screen/ParheliaAssistantChat.d.ts +0 -8
- package/dist/splash-screen/ParheliaAssistantChat.js +0 -507
- package/dist/splash-screen/ParheliaAssistantChat.js.map +0 -1
- package/dist/splash-screen/SplashScreenAgentContext.d.ts +0 -28
- package/dist/splash-screen/SplashScreenAgentContext.js +0 -51
- package/dist/splash-screen/SplashScreenAgentContext.js.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { providerDistinguishesSharedComponents } from "../services/contentService";
|
|
4
4
|
import { useCanvasSelection, useEditContext, useEditContextRef, } from "../client/editContext";
|
|
5
5
|
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
@@ -15,6 +15,7 @@ import { SimpleIconButton, SimpleIconButtonStyleProvider, } from "../ui/SimpleIc
|
|
|
15
15
|
import { Spinner } from "../ui/Spinner";
|
|
16
16
|
import { SearchInput } from "../../components/SearchInput";
|
|
17
17
|
import { Tooltip, TooltipContent, TooltipTrigger, } from "../../components/ui/tooltip";
|
|
18
|
+
import { Popover, PopoverContent, PopoverTrigger, } from "../../components/ui/popover";
|
|
18
19
|
import { cn } from "../../lib/utils";
|
|
19
20
|
import { InsertComponentMenu } from "../page-editor-chrome/InsertComponentMenu";
|
|
20
21
|
import { useSharedComponentPublishState } from "./useSharedComponentPublishState";
|
|
@@ -53,7 +54,8 @@ export function ComponentTree({ pageViewContext, itemDescriptor, item, isLoading
|
|
|
53
54
|
const [nodeDictionary, setNodeDictionary] = useState({});
|
|
54
55
|
const [isTreeReady, setIsTreeReady] = useState(false);
|
|
55
56
|
const [treeKey, setTreeKey] = useState(null);
|
|
56
|
-
const [
|
|
57
|
+
const [activeInsertTargetKey, setActiveInsertTargetKey] = useState(null);
|
|
58
|
+
const [hoveredInsertTargetKey, setHoveredInsertTargetKey] = useState(null);
|
|
57
59
|
let editContextRef = useEditContextRef();
|
|
58
60
|
const editContext = useEditContext();
|
|
59
61
|
const canvasSelection = useCanvasSelection();
|
|
@@ -190,7 +192,7 @@ export function ComponentTree({ pageViewContext, itemDescriptor, item, isLoading
|
|
|
190
192
|
const selection = canvasSelection;
|
|
191
193
|
useEffect(() => {
|
|
192
194
|
if (editContext?.currentOverlay !== "context-menu") {
|
|
193
|
-
|
|
195
|
+
setActiveInsertTargetKey(null);
|
|
194
196
|
}
|
|
195
197
|
}, [editContext?.currentOverlay]);
|
|
196
198
|
useEffect(() => {
|
|
@@ -926,40 +928,82 @@ export function ComponentTree({ pageViewContext, itemDescriptor, item, isLoading
|
|
|
926
928
|
}
|
|
927
929
|
};
|
|
928
930
|
}, []);
|
|
929
|
-
//
|
|
930
|
-
//
|
|
931
|
-
|
|
932
|
-
const canInsertBelow = useCallback((component) => {
|
|
931
|
+
// A tree insertion target is useful only when its placeholder is editable and
|
|
932
|
+
// has at least one visible component option.
|
|
933
|
+
const canInsertIntoPlaceholder = useCallback((placeholder) => {
|
|
933
934
|
if (!editContext || editContext.readonly || editContext.mode !== "edit") {
|
|
934
935
|
return false;
|
|
935
936
|
}
|
|
936
|
-
|
|
937
|
-
if (!placeholder?.editable)
|
|
937
|
+
if (!placeholder.editable)
|
|
938
938
|
return false;
|
|
939
939
|
return getVisibleInsertOptions(placeholder.insertOptions).length > 0;
|
|
940
940
|
}, [editContext]);
|
|
941
|
-
const
|
|
942
|
-
|
|
943
|
-
if (!placeholder?.editable)
|
|
941
|
+
const getPlaceholderInsertOptions = useCallback((placeholder) => {
|
|
942
|
+
if (!placeholder.editable)
|
|
944
943
|
return [];
|
|
945
944
|
return getVisibleInsertOptions(placeholder.insertOptions);
|
|
946
945
|
}, []);
|
|
947
|
-
|
|
948
|
-
// popover used by WYSIWYG placeholder dropzones; this keeps only the
|
|
949
|
-
// component-tree-specific insertion index here.
|
|
950
|
-
const handleInsertBelowSelect = useCallback(async (component, option) => {
|
|
946
|
+
const handleInsertSelect = useCallback(async (placeholder, insertIndex, option) => {
|
|
951
947
|
const ctx = editContextRef.current;
|
|
952
|
-
|
|
948
|
+
setActiveInsertTargetKey(null);
|
|
953
949
|
if (!ctx || ctx.readonly || ctx.mode !== "edit")
|
|
954
950
|
return;
|
|
955
|
-
|
|
956
|
-
if (!placeholder?.editable)
|
|
951
|
+
if (!placeholder.editable)
|
|
957
952
|
return;
|
|
958
|
-
const insertIndex = placeholder.components.findIndex((c) => c.id === component.id) + 1;
|
|
959
953
|
await editContextRef.current?.operations.addComponent(option.typeId, placeholder.key, insertIndex, pageItemDescriptor);
|
|
960
954
|
}, [editContextRef, pageItemDescriptor]);
|
|
961
|
-
const
|
|
962
|
-
|
|
955
|
+
const handleInsertOpenChange = useCallback((targetKey, open) => {
|
|
956
|
+
setActiveInsertTargetKey(open ? targetKey : null);
|
|
957
|
+
}, []);
|
|
958
|
+
const handleNodeInsertTargetHover = useCallback((node, event) => {
|
|
959
|
+
const treeNode = node;
|
|
960
|
+
if (treeNode.type !== "component") {
|
|
961
|
+
return;
|
|
962
|
+
}
|
|
963
|
+
const component = treeNode.data;
|
|
964
|
+
const parentPlaceholder = component.parentPlaceholder;
|
|
965
|
+
const canInsertSibling = !!parentPlaceholder && canInsertIntoPlaceholder(parentPlaceholder);
|
|
966
|
+
const componentIndex = parentPlaceholder?.components.findIndex((sibling) => sibling.id === component.id) ?? -1;
|
|
967
|
+
const precedingComponent = componentIndex > 0
|
|
968
|
+
? parentPlaceholder?.components[componentIndex - 1]
|
|
969
|
+
: undefined;
|
|
970
|
+
const precedingGapTargetKey = precedingComponent
|
|
971
|
+
? `below:${precedingComponent.id}`
|
|
972
|
+
: `above:${component.id}`;
|
|
973
|
+
const innerPlaceholders = component.placeholders?.filter(canInsertIntoPlaceholder) ?? [];
|
|
974
|
+
const innerTargetKey = innerPlaceholders.length === 1
|
|
975
|
+
? getPlaceholderInsertTargetKey(component, innerPlaceholders[0])
|
|
976
|
+
: innerPlaceholders.length > 1
|
|
977
|
+
? getPlaceholderPickerTargetKey(component)
|
|
978
|
+
: null;
|
|
979
|
+
const rowRect = event.currentTarget.getBoundingClientRect();
|
|
980
|
+
const relativeY = Math.max(0, Math.min(rowRect.height, event.clientY - rowRect.top));
|
|
981
|
+
const verticalRatio = rowRect.height > 0 ? relativeY / rowRect.height : 0;
|
|
982
|
+
let targetKey = null;
|
|
983
|
+
if (canInsertSibling && innerTargetKey) {
|
|
984
|
+
targetKey =
|
|
985
|
+
verticalRatio < 1 / 3
|
|
986
|
+
? precedingGapTargetKey
|
|
987
|
+
: verticalRatio > 2 / 3
|
|
988
|
+
? `below:${component.id}`
|
|
989
|
+
: innerTargetKey;
|
|
990
|
+
}
|
|
991
|
+
else if (innerTargetKey) {
|
|
992
|
+
targetKey = innerTargetKey;
|
|
993
|
+
}
|
|
994
|
+
else if (canInsertSibling) {
|
|
995
|
+
targetKey =
|
|
996
|
+
verticalRatio < 1 / 2
|
|
997
|
+
? precedingGapTargetKey
|
|
998
|
+
: `below:${component.id}`;
|
|
999
|
+
}
|
|
1000
|
+
setHoveredInsertTargetKey((current) => current === targetKey ? current : targetKey);
|
|
1001
|
+
}, [canInsertIntoPlaceholder]);
|
|
1002
|
+
const handleNodeInsertTargetLeave = useCallback(() => {
|
|
1003
|
+
setHoveredInsertTargetKey(null);
|
|
1004
|
+
}, []);
|
|
1005
|
+
const handleInsertTargetHover = useCallback((targetKey) => {
|
|
1006
|
+
setHoveredInsertTargetKey(targetKey);
|
|
963
1007
|
}, []);
|
|
964
1008
|
// Check if we have a valid page model
|
|
965
1009
|
const hasPageModel = page && page.rootComponent && page.item;
|
|
@@ -998,44 +1042,49 @@ export function ComponentTree({ pageViewContext, itemDescriptor, item, isLoading
|
|
|
998
1042
|
};
|
|
999
1043
|
// Only show error if page model failed to load (not if page is just empty)
|
|
1000
1044
|
if (hasInvalidPageModel && isTreeReady && !isSlotLoading && !isRefreshing) {
|
|
1001
|
-
return (_jsxs("div", { className: "flex h-full flex-col", children: [_jsx(SimpleIconButtonStyleProvider, { selectedClassName: "bg-neutral-grey-5 text-neutral-grey-100", children: _jsxs("div", { className: "border-border-default badge-pad flex items-center justify-between border-b", children: [_jsx("div", { className: "flex items-center gap-1", children: _jsx(SimpleIconButton, { icon: _jsx(Plus, { strokeWidth: 1, className: "
|
|
1045
|
+
return (_jsxs("div", { className: "flex h-full flex-col", children: [_jsx(SimpleIconButtonStyleProvider, { selectedClassName: "bg-neutral-grey-5 text-neutral-grey-100", children: _jsxs("div", { className: "border-border-default badge-pad flex items-center justify-between border-b", children: [_jsx("div", { className: "flex items-center gap-1", children: _jsx(SimpleIconButton, { icon: _jsx(Plus, { size: 16, strokeWidth: 1, absoluteStrokeWidth: true, className: "m-0.5" }), label: "Add component (Insert)", size: "small", className: "min-w-0 shrink gap-1.5 px-2 py-1 [&>svg]:shrink-0", "data-testid": "component-tree-add-component", selected: insertMode, showTooltip: false, disabled: !canWriteItem ||
|
|
1002
1046
|
!editContext ||
|
|
1003
1047
|
editContext.readonly ||
|
|
1004
|
-
editContext.mode !== "edit", onClick: toggleInsertMode }) }), _jsx("div", { className: "flex items-center gap-1", children: _jsx(SimpleIconButton, { icon: _jsx(LayoutTemplate, { strokeWidth: 1, className: "h-5 w-5" }), label: editContext?.showLayoutComponents
|
|
1048
|
+
editContext.mode !== "edit", onClick: toggleInsertMode, children: _jsx("span", { className: "min-w-0 truncate", children: "Add component" }) }) }), _jsx("div", { className: "flex items-center gap-1", children: _jsx(SimpleIconButton, { icon: _jsx(LayoutTemplate, { strokeWidth: 1, className: "h-5 w-5" }), label: editContext?.showLayoutComponents
|
|
1005
1049
|
? "Hide layout"
|
|
1006
1050
|
: "Show layout", size: "small", className: "h-[30px] w-[30px]", selected: editContext?.showLayoutComponents, "data-testid": "component-tree-toggle-layout", onClick: () => editContext?.setShowLayoutComponents(!editContext.showLayoutComponents) }) })] }) }), _jsx("div", { className: "text-neutral-grey-50 flex flex-1 items-center justify-center text-xs", children: "Page did not load. Please refresh or try again." }), _jsx(ConfirmationDialog, { ref: confirmDialogRef })] }));
|
|
1007
1051
|
}
|
|
1008
|
-
return (_jsxs("div", { className: "flex h-full flex-col", children: [_jsx(SimpleIconButtonStyleProvider, { selectedClassName: "bg-neutral-grey-5 text-neutral-grey-100", children: _jsxs("div", { className: "border-border-default badge-pad flex items-center justify-between border-b", children: [_jsx("div", { className: "flex items-center gap-1", children: _jsx(SimpleIconButton, { icon: _jsx(Plus, { strokeWidth: 1, className: "
|
|
1052
|
+
return (_jsxs("div", { className: "flex h-full flex-col", children: [_jsx(SimpleIconButtonStyleProvider, { selectedClassName: "bg-neutral-grey-5 text-neutral-grey-100", children: _jsxs("div", { className: "border-border-default badge-pad flex items-center justify-between border-b", children: [_jsx("div", { className: "flex items-center gap-1", children: _jsx(SimpleIconButton, { icon: _jsx(Plus, { size: 16, strokeWidth: 1, absoluteStrokeWidth: true, className: "m-0.5" }), label: "Add component (Insert)", size: "small", className: "min-w-0 shrink gap-1.5 px-2 py-1 [&>svg]:shrink-0", "data-testid": "component-tree-add-component", selected: insertMode, showTooltip: false, disabled: !canWriteItem ||
|
|
1009
1053
|
!editContext ||
|
|
1010
1054
|
editContext.readonly ||
|
|
1011
|
-
editContext.mode !== "edit", onClick: toggleInsertMode }) }), _jsx("div", { className: "flex items-center gap-1", children: _jsx(SimpleIconButton, { icon: _jsx(LayoutTemplate, { strokeWidth: 1, className: "h-5 w-5" }), label: editContext?.showLayoutComponents
|
|
1055
|
+
editContext.mode !== "edit", onClick: toggleInsertMode, children: _jsx("span", { className: "min-w-0 truncate", children: "Add component" }) }) }), _jsx("div", { className: "flex items-center gap-1", children: _jsx(SimpleIconButton, { icon: _jsx(LayoutTemplate, { strokeWidth: 1, className: "h-5 w-5" }), label: editContext?.showLayoutComponents
|
|
1012
1056
|
? "Hide layout"
|
|
1013
|
-
: "Show layout", size: "small", className: "h-[30px] w-[30px]", selected: editContext?.showLayoutComponents, "data-testid": "component-tree-toggle-layout", onClick: () => editContext?.setShowLayoutComponents(!editContext.showLayoutComponents) }) })] }) }), _jsx("div", { className: "border-border-default border-b p-2", "data-testid": "component-tree-search", children: _jsx(SearchInput, { value: filter, onChange: setFilter, className: "w-full", placeholder: "Search IDs, names, types..." }) }), _jsx("div", { className: "min-h-0 flex-1 overflow-auto overflow-x-hidden p-2", ref: treeRef, "data-testid": "component-tree", children: isFiltering && visibleRootNodes.length === 0 ? (_jsxs("div", { className: "text-neutral-grey-50 flex h-full items-center justify-center px-4 text-center text-xs", children: ["No components match \"", filter.trim(), "\"."] })) : (_jsx(PerfectTree, { nodes: visibleRootNodes, isDragging: !isFiltering && !!editContext?.dragObject, multiDragNoun: "components", selectedKeys: selectedItems, expandedKeys: expandedItems, onToggleExpand: isFiltering ? undefined : handleToggle, onSelect: handleTreeSelection, onContextMenu: handleTreeContextMenu, enableDragAndDrop: !isFiltering, onDragOverZone: handleDragOverZone, isValidDropZone: handleIsValidDropZone, onStartDrag: handleStartDrag, onDragEnd: handleDragEnd, onDrop: handleDropZone, renderNodePrefix: (node) => {
|
|
1057
|
+
: "Show layout", size: "small", className: "h-[30px] w-[30px]", selected: editContext?.showLayoutComponents, "data-testid": "component-tree-toggle-layout", onClick: () => editContext?.setShowLayoutComponents(!editContext.showLayoutComponents) }) })] }) }), _jsx("div", { className: "border-border-default border-b p-2", "data-testid": "component-tree-search", children: _jsx(SearchInput, { value: filter, onChange: setFilter, className: "w-full", placeholder: "Search IDs, names, types..." }) }), _jsx("div", { className: "min-h-0 flex-1 overflow-auto overflow-x-hidden p-2", ref: treeRef, "data-testid": "component-tree", children: isFiltering && visibleRootNodes.length === 0 ? (_jsxs("div", { className: "text-neutral-grey-50 flex h-full items-center justify-center px-4 text-center text-xs", children: ["No components match \"", filter.trim(), "\"."] })) : (_jsx(PerfectTree, { nodes: visibleRootNodes, isDragging: !isFiltering && !!editContext?.dragObject, multiDragNoun: "components", selectedKeys: selectedItems, expandedKeys: expandedItems, onToggleExpand: isFiltering ? undefined : handleToggle, onSelect: handleTreeSelection, onContextMenu: handleTreeContextMenu, enableDragAndDrop: !isFiltering, onDragOverZone: handleDragOverZone, isValidDropZone: handleIsValidDropZone, onStartDrag: handleStartDrag, onDragEnd: handleDragEnd, onDrop: handleDropZone, onNodeMouseMove: handleNodeInsertTargetHover, onNodeMouseLeave: handleNodeInsertTargetLeave, renderNodePrefix: (node) => {
|
|
1014
1058
|
const treeNode = node;
|
|
1015
1059
|
if (treeNode.type !== "component")
|
|
1016
1060
|
return null;
|
|
1017
|
-
return (_jsx("span", { className: cn("text-neutral-grey-50 hover:text-neutral-grey-100 flex h-[23px] w-4 flex-none cursor-grab items-center justify-center transition-colors active:cursor-grabbing"), "data-testid": "component-tree-drag-handle", "aria-hidden": "true", children: _jsx(GripVertical, { strokeWidth: 1, className: "h-4 w-4" }) }));
|
|
1061
|
+
return (_jsx("span", { className: cn("text-neutral-grey-50 hover:text-neutral-grey-100 group-hover:text-neutral-grey-100 flex h-[23px] w-4 flex-none cursor-grab items-center justify-center transition-colors active:cursor-grabbing"), "data-testid": "component-tree-drag-handle", "aria-hidden": "true", children: _jsx(GripVertical, { strokeWidth: 1, className: "h-4 w-4" }) }));
|
|
1018
1062
|
}, renderToggleIcon: () => (_jsx("svg", { width: "12", height: "12", viewBox: "0 0 12 12", fill: "none", className: "text-neutral-grey-100", "aria-hidden": "true", children: _jsx("path", { d: "M9 6L4.5 1.66987L4.5 10.3301L9 6Z", fill: "currentColor" }) })), suppressDefaultNodeChrome: (node) => node.type === "component", getRowClassName: (node, _depth, { isSelected, isDragOver }) => {
|
|
1019
1063
|
const nodeType = node.type;
|
|
1020
1064
|
if (nodeType === "component") {
|
|
1021
|
-
return cn("group mb-
|
|
1065
|
+
return cn("group mb-2 gap-1 rounded-[2px] border px-1 py-2 transition-colors", isDragOver
|
|
1022
1066
|
? "border-component-default bg-component-default/10"
|
|
1023
1067
|
: isSelected
|
|
1024
1068
|
? "border-border-default bg-neutral-grey-5"
|
|
1025
1069
|
: "border-border-default hover:border-neutral-grey-50");
|
|
1026
1070
|
}
|
|
1027
|
-
if (nodeType === "page"
|
|
1028
|
-
return "mb-1.5 [&>div:last-child]:py-2 [&[data-selected=true]>div:last-child]:bg-neutral-grey-5";
|
|
1071
|
+
if (nodeType === "page") {
|
|
1072
|
+
return cn("mb-1.5 [&>div:last-child]:py-2 [&[data-selected=true]>div:last-child]:bg-neutral-grey-5", isSelected && "bg-neutral-grey-5");
|
|
1073
|
+
}
|
|
1074
|
+
if (nodeType === "placeholder") {
|
|
1075
|
+
return cn("mb-1.5 [&>div:last-child]:py-2 [&[data-selected=true]>div:last-child]:bg-neutral-grey-5", isSelected && "bg-neutral-grey-5");
|
|
1029
1076
|
}
|
|
1030
1077
|
return undefined;
|
|
1031
1078
|
}, renderNode: (node) => {
|
|
1032
1079
|
const treeNode = node;
|
|
1033
1080
|
return renderNode(treeNode, filter, {
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
|
|
1081
|
+
canInsertIntoPlaceholder,
|
|
1082
|
+
getPlaceholderInsertOptions,
|
|
1083
|
+
onInsertSelect: handleInsertSelect,
|
|
1084
|
+
onInsertOpenChange: handleInsertOpenChange,
|
|
1085
|
+
onInsertTargetHover: handleInsertTargetHover,
|
|
1086
|
+
activeInsertTargetKey,
|
|
1087
|
+
hoveredInsertTargetKey,
|
|
1039
1088
|
});
|
|
1040
1089
|
} })) }), _jsx(ConfirmationDialog, { ref: confirmDialogRef })] }));
|
|
1041
1090
|
}
|
|
@@ -1043,34 +1092,106 @@ function renderNode(node, filter = "", opts) {
|
|
|
1043
1092
|
const trimmedFilter = filter.trim();
|
|
1044
1093
|
const filterDetails = trimmedFilter ? getNodeFilterDetails(node) : null;
|
|
1045
1094
|
const component = node.type === "component" ? node.data : null;
|
|
1046
|
-
const
|
|
1047
|
-
const
|
|
1048
|
-
|
|
1049
|
-
|
|
1095
|
+
const parentPlaceholder = component?.parentPlaceholder;
|
|
1096
|
+
const showSiblingInsertTargets = !!parentPlaceholder &&
|
|
1097
|
+
(opts?.canInsertIntoPlaceholder?.(parentPlaceholder) ?? false);
|
|
1098
|
+
const componentIndex = component && parentPlaceholder
|
|
1099
|
+
? parentPlaceholder.components.findIndex((item) => item.id === component.id)
|
|
1100
|
+
: -1;
|
|
1101
|
+
const siblingInsertOptions = showSiblingInsertTargets && parentPlaceholder
|
|
1102
|
+
? (opts?.getPlaceholderInsertOptions?.(parentPlaceholder) ?? [])
|
|
1050
1103
|
: [];
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
|
|
1063
|
-
e.preventDefault();
|
|
1064
|
-
const matchingOption = getMatchingInsertBelowOption(component, insertBelowOptions);
|
|
1065
|
-
if (matchingOption) {
|
|
1066
|
-
opts?.onInsertBelowSelect?.(component, matchingOption);
|
|
1104
|
+
const isBetweenGap = !!parentPlaceholder &&
|
|
1105
|
+
componentIndex >= 0 &&
|
|
1106
|
+
componentIndex < parentPlaceholder.components.length - 1;
|
|
1107
|
+
const placeholderInsertTargets = component?.placeholders?.filter((placeholder) => opts?.canInsertIntoPlaceholder?.(placeholder) ?? false) ?? [];
|
|
1108
|
+
return (_jsxs("div", { className: `component-tree-node w-full min-w-0 ${node.type ? `component-tree-${node.type}` : ""}`, "data-component-node": node.type === "component" ? "true" : undefined, "data-testid": "component-tree-node", "data-component-key": node.key, "data-component-type": node.type, children: [_jsxs("div", { className: "text-neutral-grey-100 flex min-w-0 items-center gap-2 text-[12px]", children: [_jsxs("div", { className: "flex min-w-0 items-center gap-2", children: [typeof node.icon === "string" ? (_jsx("i", { className: node.icon })) : (node.icon), _jsx("span", { className: cn("truncate", node.className), "data-testid": "component-tree-node-label", children: highlightSearchMatch(node.label, trimmedFilter) }), node.tags?.map((x) => (_jsx("div", { children: _jsxs("span", { id: `id-${node.key}-${x.id}`, className: "ml-2 flex rounded p-0.5 px-1.5 text-xs text-white", style: {
|
|
1109
|
+
backgroundColor: x.color,
|
|
1110
|
+
marginLeft: "8px",
|
|
1111
|
+
fontSize: "10px",
|
|
1112
|
+
}, title: x.tooltip, onClick: x.onClick
|
|
1113
|
+
? (e) => {
|
|
1114
|
+
e.stopPropagation();
|
|
1115
|
+
x.onClick();
|
|
1067
1116
|
}
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
1117
|
+
: undefined, children: [x.icon, highlightSearchMatch(x.value, trimmedFilter)] }) }, `tag-${node.key}-${x.id}`)))] }), component && placeholderInsertTargets.length > 0 ? (_jsx(ComponentTreePlaceholderInsertControl, { component: component, placeholders: placeholderInsertTargets, activeTargetKey: opts?.activeInsertTargetKey, hoveredTargetKey: opts?.hoveredInsertTargetKey, getOptions: (placeholder) => opts?.getPlaceholderInsertOptions?.(placeholder) ?? [], onOpenChange: opts?.onInsertOpenChange, onSelect: (placeholder, option) => opts?.onInsertSelect?.(placeholder, placeholder.components.length, option) })) : null] }), filterDetails ? (_jsx("div", { className: "text-neutral-grey-50 mt-0.5 ml-6 truncate text-[10px]", title: filterDetails, children: highlightSearchMatch(filterDetails, trimmedFilter) })) : null, showSiblingInsertTargets && parentPlaceholder && componentIndex >= 0 ? (_jsxs(_Fragment, { children: [componentIndex === 0 ? (_jsx(ComponentTreeGapInsertControl, { placement: "above", targetKey: `above:${component.id}`, activeTargetKey: opts?.activeInsertTargetKey, hoveredTargetKey: opts?.hoveredInsertTargetKey, onHoverTarget: opts?.onInsertTargetHover, testId: "component-tree-insert-above", title: "Insert above", ariaLabel: "Insert component above", options: siblingInsertOptions, onOpenChange: opts?.onInsertOpenChange, onSelect: (option) => opts?.onInsertSelect?.(parentPlaceholder, componentIndex, option), quickInsertComponent: component })) : null, _jsx(ComponentTreeGapInsertControl, { placement: "below", targetKey: `below:${component.id}`, activeTargetKey: opts?.activeInsertTargetKey, hoveredTargetKey: opts?.hoveredInsertTargetKey, onHoverTarget: opts?.onInsertTargetHover, testId: "component-tree-insert-below", title: isBetweenGap ? "Insert between" : "Insert below", ariaLabel: isBetweenGap
|
|
1118
|
+
? "Insert component between"
|
|
1119
|
+
: "Insert component below", options: siblingInsertOptions, onOpenChange: opts?.onInsertOpenChange, onSelect: (option) => opts?.onInsertSelect?.(parentPlaceholder, componentIndex + 1, option), quickInsertComponent: component })] })) : null] }));
|
|
1120
|
+
}
|
|
1121
|
+
function ComponentTreePlaceholderInsertControl({ component, placeholders, activeTargetKey, hoveredTargetKey, getOptions, onOpenChange, onSelect, }) {
|
|
1122
|
+
const [selectedPlaceholder, setSelectedPlaceholder] = useState(null);
|
|
1123
|
+
const pickerTargetKey = getPlaceholderPickerTargetKey(component);
|
|
1124
|
+
const selectedTargetKey = selectedPlaceholder
|
|
1125
|
+
? getPlaceholderInsertTargetKey(component, selectedPlaceholder)
|
|
1126
|
+
: null;
|
|
1127
|
+
if (placeholders.length === 1) {
|
|
1128
|
+
const placeholder = placeholders[0];
|
|
1129
|
+
const targetKey = getPlaceholderInsertTargetKey(component, placeholder);
|
|
1130
|
+
const label = cleanComponentTreePlaceholderLabel(placeholder);
|
|
1131
|
+
return (_jsx("div", { className: "ml-auto flex max-w-[60%] min-w-0 shrink items-center justify-end", "data-testid": "component-tree-placeholder-actions", children: _jsx(ComponentTreeInsertButton, { targetKey: targetKey, activeTargetKey: activeTargetKey, hoverVisible: hoveredTargetKey === targetKey, testId: "component-tree-insert-placeholder", title: `Insert into ${label}`, ariaLabel: `Insert component into ${label} placeholder`, options: getOptions(placeholder), onOpenChange: onOpenChange, onSelect: (option) => onSelect(placeholder, option), className: "relative h-6 w-6 shrink-0", children: _jsx(Plus, { className: "h-4 w-4", strokeWidth: 1 }) }) }));
|
|
1132
|
+
}
|
|
1133
|
+
if (selectedPlaceholder &&
|
|
1134
|
+
selectedTargetKey &&
|
|
1135
|
+
activeTargetKey === selectedTargetKey) {
|
|
1136
|
+
const label = cleanComponentTreePlaceholderLabel(selectedPlaceholder);
|
|
1137
|
+
return (_jsx("div", { className: "ml-auto flex max-w-[60%] min-w-0 shrink items-center justify-end", "data-testid": "component-tree-placeholder-actions", children: _jsx(ComponentTreeInsertButton, { targetKey: selectedTargetKey, activeTargetKey: activeTargetKey, hoverVisible: hoveredTargetKey === selectedTargetKey, testId: "component-tree-insert-placeholder", title: `Insert into ${label}`, ariaLabel: `Insert component into ${label} placeholder`, options: getOptions(selectedPlaceholder), onOpenChange: (targetKey, open) => {
|
|
1138
|
+
if (!open)
|
|
1139
|
+
setSelectedPlaceholder(null);
|
|
1140
|
+
onOpenChange?.(targetKey, open);
|
|
1141
|
+
}, onSelect: (option) => {
|
|
1142
|
+
setSelectedPlaceholder(null);
|
|
1143
|
+
onSelect(selectedPlaceholder, option);
|
|
1144
|
+
}, className: "relative h-6 w-6 shrink-0", children: _jsx(Plus, { className: "h-4 w-4", strokeWidth: 1 }) }) }));
|
|
1145
|
+
}
|
|
1146
|
+
const pickerOpen = activeTargetKey === pickerTargetKey;
|
|
1147
|
+
const pickerHoverVisible = hoveredTargetKey === pickerTargetKey;
|
|
1148
|
+
return (_jsx("div", { className: "ml-auto flex max-w-[60%] min-w-0 shrink items-center justify-end", "data-testid": "component-tree-placeholder-actions", children: _jsxs(Popover, { open: pickerOpen, onOpenChange: (open) => onOpenChange?.(pickerTargetKey, open), children: [_jsx(PopoverTrigger, { asChild: true, children: _jsx("button", { type: "button", "data-testid": "component-tree-insert-placeholder", "data-insert-target": pickerTargetKey, "data-active": pickerOpen ? "true" : undefined, "aria-label": "Choose a placeholder to insert a component into", onMouseDown: (event) => event.stopPropagation(), onClick: (event) => event.stopPropagation(), className: cn("bg-component-default relative flex h-6 w-6 shrink-0 items-center justify-center rounded-[4px] text-white transition-all hover:brightness-105 active:scale-95", pickerOpen || pickerHoverVisible
|
|
1149
|
+
? "pointer-events-auto opacity-100"
|
|
1150
|
+
: "pointer-events-none opacity-0 focus-visible:pointer-events-auto focus-visible:opacity-100"), children: _jsx(Plus, { className: "h-4 w-4", strokeWidth: 1 }) }) }), _jsxs(PopoverContent, { side: "right", align: "start", sideOffset: 12, collisionPadding: 12, onOpenAutoFocus: (event) => event.preventDefault(), "data-testid": "component-tree-placeholder-picker", className: "border-border-default text-popover-foreground z-250 w-60 max-w-[15rem] overflow-hidden rounded-[4px] border bg-white/95 p-1.5 backdrop-blur-md", children: [_jsx("div", { className: "text-neutral-grey-50 px-2 pt-1 pb-1.5 text-[11px] font-semibold tracking-wide uppercase", children: "Choose placeholder" }), _jsx("div", { className: "flex flex-col gap-0.5", children: placeholders.map((placeholder) => {
|
|
1151
|
+
const label = cleanComponentTreePlaceholderLabel(placeholder);
|
|
1152
|
+
return (_jsxs("button", { type: "button", "data-testid": "component-tree-placeholder-option", "data-placeholder-key": placeholder.key, onClick: (event) => {
|
|
1153
|
+
event.preventDefault();
|
|
1154
|
+
event.stopPropagation();
|
|
1155
|
+
setSelectedPlaceholder(placeholder);
|
|
1156
|
+
onOpenChange?.(getPlaceholderInsertTargetKey(component, placeholder), true);
|
|
1157
|
+
}, className: "hover:bg-neutral-grey-5 focus-visible:bg-neutral-grey-5 flex w-full items-center gap-2 rounded-[4px] px-2 py-1.5 text-left text-[12px] transition-colors focus-visible:outline-none", children: [_jsx(Folder, { className: "text-neutral-grey-50 h-4 w-4 shrink-0", strokeWidth: 1 }), _jsx("span", { className: "min-w-0 flex-1 truncate", children: label }), _jsx(ChevronRight, { className: "text-neutral-grey-50 h-3.5 w-3.5 shrink-0", strokeWidth: 1 })] }, placeholder.key));
|
|
1158
|
+
}) })] })] }) }));
|
|
1159
|
+
}
|
|
1160
|
+
function ComponentTreeGapInsertControl({ placement, targetKey, activeTargetKey, hoveredTargetKey, onHoverTarget, testId, title, ariaLabel, options, onOpenChange, onSelect, quickInsertComponent, }) {
|
|
1161
|
+
const isActive = activeTargetKey === targetKey;
|
|
1162
|
+
const isHoverVisible = hoveredTargetKey === targetKey;
|
|
1163
|
+
return (_jsxs("div", { className: cn("pointer-events-none absolute right-0 left-0 z-20 flex h-6 items-center justify-center transition-opacity", placement === "above"
|
|
1164
|
+
? "top-0 -translate-y-[17px]"
|
|
1165
|
+
: "bottom-0 translate-y-[17px]", isActive || isHoverVisible
|
|
1166
|
+
? "opacity-100"
|
|
1167
|
+
: "opacity-0 focus-within:opacity-100"), "data-testid": `${testId}-gap`, onMouseEnter: () => onHoverTarget?.(targetKey), onMouseLeave: () => onHoverTarget?.(null), children: [_jsx("span", { className: "pointer-events-auto absolute inset-x-0 top-1/2 h-2 -translate-y-1/2", "data-testid": "component-tree-insert-gap-hover-zone", "data-insert-target": targetKey }), _jsx("span", { className: "bg-component-default absolute inset-x-0 top-1/2 h-[2px] -translate-y-1/2 rounded-full", "data-testid": "component-tree-insert-gap-line" }), _jsx(ComponentTreeInsertButton, { targetKey: targetKey, activeTargetKey: activeTargetKey, hoverVisible: isHoverVisible, testId: testId, title: title, ariaLabel: ariaLabel, options: options, onOpenChange: onOpenChange, onSelect: onSelect, quickInsertComponent: quickInsertComponent, className: "relative z-10 h-6 w-6 shrink-0", children: _jsx(Plus, { className: "h-4 w-4", strokeWidth: 1 }) })] }));
|
|
1168
|
+
}
|
|
1169
|
+
function ComponentTreeInsertButton({ targetKey, activeTargetKey, hoverVisible, testId, title, ariaLabel, options, onOpenChange, onSelect, quickInsertComponent, className, children, }) {
|
|
1170
|
+
const isActive = activeTargetKey === targetKey;
|
|
1171
|
+
return (_jsxs(Tooltip, { children: [_jsx(InsertComponentMenu, { open: isActive, onOpenChange: (open) => onOpenChange?.(targetKey, open), title: title, options: options, onSelect: onSelect, side: "right", align: "start", sideOffset: 12, children: _jsx(TooltipTrigger, { asChild: true, children: _jsx("button", { type: "button", "data-testid": testId, "data-insert-target": targetKey, "data-active": isActive ? "true" : undefined, "aria-label": ariaLabel, onMouseDown: (event) => event.stopPropagation(), onClick: (event) => {
|
|
1172
|
+
event.stopPropagation();
|
|
1173
|
+
if (quickInsertComponent && (event.ctrlKey || event.metaKey)) {
|
|
1174
|
+
event.preventDefault();
|
|
1175
|
+
const matchingOption = getMatchingInsertOption(quickInsertComponent, options);
|
|
1176
|
+
if (matchingOption)
|
|
1177
|
+
onSelect(matchingOption);
|
|
1178
|
+
}
|
|
1179
|
+
}, className: cn("bg-component-default flex items-center justify-center rounded-[4px] text-white transition-all hover:brightness-105 active:scale-95", isActive || hoverVisible
|
|
1180
|
+
? "pointer-events-auto opacity-100"
|
|
1181
|
+
: "pointer-events-none opacity-0 focus-visible:pointer-events-auto focus-visible:opacity-100", className), children: children }) }) }), _jsx(TooltipContent, { side: "right", sideOffset: 8, children: title })] }));
|
|
1182
|
+
}
|
|
1183
|
+
function getPlaceholderInsertTargetKey(component, placeholder) {
|
|
1184
|
+
return `placeholder:${component.id}:${placeholder.key}`;
|
|
1185
|
+
}
|
|
1186
|
+
function getPlaceholderPickerTargetKey(component) {
|
|
1187
|
+
return `placeholder-picker:${component.id}`;
|
|
1188
|
+
}
|
|
1189
|
+
function cleanComponentTreePlaceholderLabel(placeholder) {
|
|
1190
|
+
return (placeholder.description ||
|
|
1191
|
+
placeholder.name ||
|
|
1192
|
+
placeholder.key).replace(/_{[0-9a-fA-F-]+}$/, "");
|
|
1072
1193
|
}
|
|
1073
|
-
function
|
|
1194
|
+
function getMatchingInsertOption(component, insertOptions) {
|
|
1074
1195
|
const componentTypeId = normalizeInsertTypeId(component.typeId);
|
|
1075
1196
|
if (!componentTypeId)
|
|
1076
1197
|
return undefined;
|