@next-core/brick-container 2.69.21 → 2.69.22
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/CHANGELOG.md +8 -0
- package/dist/dll-of-editor-bricks-helper.afd5e139.js +8 -0
- package/dist/dll-of-editor-bricks-helper.afd5e139.js.map +1 -0
- package/dist/index.html +1 -1
- package/dist/{main.236e454fd56462d6a7a5.js → main.ee34aad7877647414852.js} +2 -2
- package/dist/{main.236e454fd56462d6a7a5.js.map → main.ee34aad7877647414852.js.map} +1 -1
- package/package.json +3 -3
- package/dist/dll-of-editor-bricks-helper.c23df485.js +0 -8
- package/dist/dll-of-editor-bricks-helper.c23df485.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["webpack://[name]/webpack/bootstrap","webpack://[name]/external \"DllOfReactDnd\"","webpack://[name]/delegated ./node_modules/@babel/runtime/helpers/objectSpread2.js from dll-reference dll","webpack://[name]/delegated ./node_modules/@next-core/brick-utils/dist/index.esm.js from dll-reference dll","webpack://[name]/delegated ./node_modules/@babel/runtime/helpers/decorate.js from dll-reference dll","webpack://[name]/delegated ./node_modules/react-dnd/dist/esm/index.js from dll-reference DllOfReactDnd","webpack://[name]/delegated ./node_modules/lodash/lodash.js from dll-reference dll","webpack://[name]/delegated ./node_modules/@babel/runtime/helpers/objectWithoutProperties.js from dll-reference dll","webpack://[name]/./node_modules/@next-core/editor-bricks-helper/src/interfaces.ts","webpack://[name]/./node_modules/node_modules/classnames/index.js","webpack://[name]/./node_modules/node_modules/@ungap/event-target/esm/index.js","webpack://[name]/./node_modules/@next-core/editor-bricks-helper/src/internal/getUniqueNodeId.ts","webpack://[name]/./node_modules/@next-core/editor-bricks-helper/src/internal/expandTemplateEdges.ts","webpack://[name]/./node_modules/@next-core/editor-bricks-helper/src/internal/reorderBuilderEdges.ts","webpack://[name]/./node_modules/@next-core/editor-bricks-helper/src/internal/deleteNodeFromTree.ts","webpack://[name]/./node_modules/@next-core/editor-bricks-helper/src/processors/getRelatedNodesBasedOnEvents.ts","webpack://[name]/./node_modules/@next-core/editor-bricks-helper/src/internal/getBuilderNode.ts","webpack://[name]/./node_modules/@next-core/editor-bricks-helper/src/internal/getAppendingNodesAndEdges.ts","webpack://[name]/./node_modules/@next-core/editor-bricks-helper/src/internal/isParentExpandableTemplate.ts","webpack://[name]/./node_modules/@next-core/editor-bricks-helper/src/DropZone/reverseNormalize.ts","webpack://[name]/./node_modules/@next-core/editor-bricks-helper/src/internal/BuilderDataManager.ts","webpack://[name]/./node_modules/@next-core/editor-bricks-helper/src/DropZone/getSnippetNodeDetail.ts","webpack://[name]/./node_modules/@next-core/editor-bricks-helper/src/BuilderContext.ts","webpack://[name]/./node_modules/@next-core/editor-bricks-helper/src/hooks/useBuilderDataManager.ts","webpack://[name]/./node_modules/@next-core/editor-bricks-helper/src/hooks/useBuilderData.ts","webpack://[name]/./node_modules/@next-core/editor-bricks-helper/src/hooks/useBuilderNode.ts","webpack://[name]/./node_modules/@next-core/editor-bricks-helper/src/hooks/useBuilderContextMenuStatus.ts","webpack://[name]/./node_modules/@next-core/editor-bricks-helper/src/hooks/useShowRelatedNodesBasedOnEvents.ts","webpack://[name]/./node_modules/node_modules/style-inject/dist/style-inject.es.js","webpack://[name]/./node_modules/@next-core/editor-bricks-helper/src/EditorContainer/isCurrentTargetByClassName.ts","webpack://[name]/./node_modules/@next-core/editor-bricks-helper/src/hooks/useHoverNodeUid.ts","webpack://[name]/./node_modules/@next-core/editor-bricks-helper/src/hooks/useHighlightNodes.ts","webpack://[name]/./node_modules/@next-core/editor-bricks-helper/src/hooks/useDroppingStatus.ts","webpack://[name]/./node_modules/@next-core/editor-bricks-helper/src/EditorContainer/EditorContainer.tsx","webpack://[name]/./node_modules/@next-core/editor-bricks-helper/src/EditorBrickAsComponent/getEditorBrick.ts","webpack://[name]/./node_modules/@next-core/editor-bricks-helper/src/EditorBrickAsComponent/EditorBrickAsComponent.tsx","webpack://[name]/./node_modules/@next-core/editor-bricks-helper/src/hooks/useStoryList.ts","webpack://[name]/./node_modules/@next-core/editor-bricks-helper/src/EditorBrickAsComponent/getBrickDoc.ts","webpack://[name]/./node_modules/@next-core/editor-bricks-helper/src/hooks/useSharedEditorMap.ts","webpack://[name]/./node_modules/@next-core/editor-bricks-helper/src/hooks/useBuilderGroupedChildNodes.ts","webpack://[name]/./node_modules/@next-core/editor-bricks-helper/src/hooks/useCanDrop.ts","webpack://[name]/./node_modules/@next-core/editor-bricks-helper/src/DropZone/getDropPosition.ts","webpack://[name]/./node_modules/@next-core/editor-bricks-helper/src/processors/getSortedIdsAfterDropped.ts","webpack://[name]/./node_modules/@next-core/editor-bricks-helper/src/hooks/useCanvasList.ts","webpack://[name]/./node_modules/@next-core/editor-bricks-helper/src/DropZone/DropZone.tsx","webpack://[name]/./node_modules/@next-core/editor-bricks-helper/src/DropZone/processDrop.ts","webpack://[name]/./node_modules/@next-core/editor-bricks-helper/src/SlotContainer/SlotContainer.tsx","webpack://[name]/./node_modules/@next-core/editor-bricks-helper/src/BuilderProvider.tsx","webpack://[name]/./node_modules/@next-core/editor-bricks-helper/src/EditorElementFactory.tsx","webpack://[name]/./node_modules/@next-core/editor-bricks-helper/src/DroppingStatusContext.ts","webpack://[name]/./node_modules/@next-core/editor-bricks-helper/src/hooks/useBuilderNodeMountPoints.ts","webpack://[name]/./node_modules/@next-core/editor-bricks-helper/src/hooks/useBuilderParentNode.ts","webpack://[name]/./node_modules/@next-core/editor-bricks-helper/src/hooks/useRouteList.ts","webpack://[name]/./node_modules/@next-core/editor-bricks-helper/src/hooks/useActiveNodeUid.ts","webpack://[name]/./node_modules/@next-core/editor-bricks-helper/src/hooks/useOutlineEnabled.ts","webpack://[name]/external \"dll\"","webpack://[name]/delegated ./node_modules/js-yaml/index.js from dll-reference dll","webpack://[name]/delegated ./node_modules/react-dom/index.js from dll-reference dll","webpack://[name]/delegated ./node_modules/@babel/runtime/helpers/defineProperty.js from dll-reference dll","webpack://[name]/delegated ./node_modules/react/index.js from dll-reference DllOfReactDnd","webpack://[name]/delegated ./node_modules/react-dnd-html5-backend/dist/esm/index.js from dll-reference DllOfReactDnd","webpack://[name]/delegated ./node_modules/@next-core/brick-kit/dist/index.esm.js from dll-reference dll","webpack://[name]/delegated ./node_modules/@babel/runtime/helpers/asyncToGenerator.js from dll-reference dll"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","DllOfReactDnd","BuilderDataTransferType","EditorBrickType","EditorSelfLayout","EditorSlotContentLayout","hasOwn","classNames","classes","arguments","length","arg","argType","push","Array","isArray","inner","apply","toString","join","default","window","self","EventTarget","constructor","wm","proto","set","this","define","target","configurable","writable","dispatch","info","options","once","removeEventListener","type","listener","handleEvent","_stopImmediatePropagationFlag","secret","listeners","event","slice","some","currentTarget","splice","WeakMap","uniqueIdCursor","getUniqueNodeId","expandTemplateEdges","nodes","edges","rootId","newEdges","reorderedEdgesMap","walk","uid","callback","node","find","item","$$uid","childEdges","sortBy","filter","edge","parent","sort","child","expandEdgesThroughTemplateChain","mountPoint","childUid","proxySlotConf","delegateToParentUid","$$isExpandableTemplate","$$templateProxy","slots","$$templateRefToUid","ref","nextNode","nextMountPoint","refSlot","expandedEdge","undefined","$$isTemplateExpanded","siblingEdges","internalEdges","$$isTemplateInternal","refPosition","clampedRefPosition","clamp","findIndex","forEach","index","childEdge","map","reorderBuilderEdges","parentUid","nodeUids","indexOf","deleteNodeFromTree","nodeUid","wrapperNode","idsToDelete","Set","collectIdsToDelete","add","ids","id","has","collectRelatedNodes","handlers","nodesMap","targetMap","targetRefMap","handler","targetNodeUid","downstreamNodes","upstreamNodes","targetRef","concat","targetRefNodeUid","callbackHandlers","values","nodeIgnoreFields","computationRegExp","getBuilderNode","nodeData","isTemplateInternalNode","matchedSelectors","brick","replace","parsedId","parsedTestId","normalized","normalizeBuilderNode","parsedFields","field","parsed","cloneDeep","upperFirst","tempParsedTestId","tempParsedId","dataset","testid","test","fromEntries","entries","entry","includes","alias","isBrickNode","split","pop","getAppendingNodesAndEdges","templateSourceMap","storyList","isRoot","currentUid","processedTemplateSet","inheritedTemplateRefToUid","layoutType","templateSource","builderNode","startsWith","children","storyId","originData","proxy","JSON","parse","templateRefToUid","Map","Infinity","$$isTemplateInternalNode","processDelegatingSlots","cursorNode","rootMountPoint","slotEntries","slotName","slotConf","refUid","refNode","$$delegatedSlots","delegatedSlotsByRefSlot","templateUid","templateMountPoint","processDelegatingProperties","previousPropertyName","properties","propertyEntries","propertyName","propertyConf","$$parsedProperties","isBasicRefProperty","propertyValue","refProperty","overrideChildrenMountPoint","$$isTemplateDelegated","propRef","isParentExpandableTemplate","BuilderInternalEventType","jsonFieldsInBrick","yamlFieldsInBrick","ignoredFieldsInBrick","reverseNormalize","brickConf","ctx","stringify","yaml","safeDump","Boolean","template","isPortalCanvas","portal","getSnippetNodeDetail","bg","flatMap","bricks","childBrickConf","BuilderDataManager","active","JsonStorage","localStorage","localJsonStorage","getItem","getData","data","getContextMenuStatus","contextMenuStatus","getRelatedNodesBasedOnEventsMap","relatedNodesBasedOnEventsMap","sharedEditorListInit","sharedEditorList","eventTarget","dispatchEvent","CustomEvent","SHARED_EDITOR_LIST_CHANGE","getSharedEditorList","onSharedEditorListChange","fn","addEventListener","routeListInit","routeList","ROUTE_LIST_CHANGE","getRouteList","storyListInit","getStoryList","onRouteListChange","dataInit","root","newData","triggerDataChange","rootNodeIsCustomTemplate","selector","$$matchedSelectors","isEmpty","$$parsedEvents","flat","$$parsedLifeCycle","lifeCycleName","lifeCycleConf","messageConf","console","warn","getRelatedNodesBasedOnEvents","DATA_CHANGE","detail","runAddNodeAction","addNodes","addEdges","omit","updateBrick","updateNode","instanceId","newNodes","NODE_UPDATE","redirectMountPoint","redirectSnippetMountPoint","nodeDetails","nodeAdd","NODE_ADD","nodeAddStored","snippetApply","appendingNodes","appendingEdges","SNIPPET_APPLY","snippetApplyStored","flattenNodeDetails","found","nodeMove","NODE_MOVE","moveNode","direction","relatedEdges","mountPoints","getRelatedEdgesAndMountPoint","orderedSiblingEdges","moveItemInList","orderedEdges","reorder","getDragInfo","sortIndex","dragNodeUid","dragOverNodeUid","dragStatus","isDragRoot","dragEdge","dragOverEdge","parentEdge","parnetNodeData","siblingEdge","sortUids","sortNodeIds","Math","max","overIndex","workbenchNodeAdd","isNeedUpdateSnippet","dragOverInstanceId","parentInstanceId","newNodeUid","realDragStatus","overEdge","nodeIds","snippetData","workbenchTreeNodeMove","originParentUid","originParentNode","WORKBENCH_TREE_NODE_MOVE","nodeInstanceId","objectId","moveMountPoint","orderedMountPoints","childUids","childIds","NODE_REORDER","contextUpdated","context","nodeReorder","nodeDelete","nodeClick","setActiveNodeUid","NODE_CLICK","contextMenuChange","CONTEXT_MENU_CHANGE","onDataChange","onNodeAdd","onSnippetApply","onNodeReorder","onNodeMove","onWorkbenchTreeNodeMove","onNodeClick","onNodeUpdate","onContextMenuChange","setShowRelatedNodesBasedOnEvents","show","showRelatedNodesBasedOnEvents","SHOW_RELATED_NODES_BASED_ON_EVENTS","getShowRelatedNodesBasedOnEvents","onShowRelatedNodesBasedOnEventsChange","setHoverNodeUid","hoverNodeUid","HOVER_NODE_CHANGE","getHoverNodeUid","onHoverNodeChange","activeNodeUid","ACTIVE_NODE_CHANGE","getActiveNodeUid","onActiveNodeChange","toggleOutline","outlineDisabledNodes","delete","setItem","from","OUTLINE_DISABLED_NODES_CHANGE","isOutlineEnabled","onOutlineEnabledNodesChange","setHighlightNodes","highlightNodes","HIGHLIGHT_NODES_CHANGE","getHighlightNodes","onHighlightNodesChange","updateDroppingStatus","isDraggingOver","nodeStatus","droppingStatus","DROPPING_STATUS_CHANGE","getDroppingStatus","onDroppingStatusChange","mountPointSet","list","upperIndex","BuilderContext","React","createContext","useBuilderDataManager","manager","useContext","Error","useBuilderData","setData","useState","useEffect","useBuilderNode","isWrapper","useMemo","useBuilderContextMenuStatus","status","setStatus","useShowRelatedNodesBasedOnEvents","styleInject","css","insertAt","document","head","getElementsByTagName","style","createElement","firstChild","insertBefore","appendChild","styleSheet","cssText","createTextNode","isCurrentTargetByClassName","targetElement","currentElement","element","classList","contains","editorContainerStyles","editorContainer","parentElement","useHoverNodeUid","useHighlightNodes","useDroppingStatus","setDroppingStatus","EditorContainer","isTransparentContainer","editorContainerStyle","editorBodyStyle","editorContainerRef","useRef","isUpstreamNode","setIsUpstreamNode","isDownstreamNode","setIsDownstreamNode","showRelatedEvents","hover","setHover","editorType","DEFAULT","hoverNodeUidRef","current","handleMouseOver","useCallback","stopPropagation","handleMouseOut","relatedNodes","isCurrentTarget","handleClick","handleContextMenu","preventDefault","x","clientX","y","clientY","className","styles","transparentContainer","dropping","highlight","onClick","onContextMenu","nodeAlias","arrow","editorBody","editor","tryEditorBricks","isRouteNode","isWidget","editorBrick","developHelper","loadEditorBricks","error","customElements","EditorBrickAsComponent","slotContentLayout","initialized","setInitialized","setEditorBrick","loadEditorError","setLoadEditorError","hasChildren","installedBricksEnabled","getRuntime","getFeatureFlags","brickDoc","doc","getBrickDoc","editorMap","getSharedEditorMap","conf","useSharedEditorMap","editorConf","editorName","editorError","getEditorBrick","message","editorProps","selfLayout","layout","CONTAINER","INLINE","isDragging","dragRef","useDrag","NODE_TO_MOVE","nodeId","dropEffect","collect","monitor","BLOCK","__isTemplateInternalNode","draggable","useBrick","useBuilderGroupedChildNodes","doNotExpandTemplates","getBuilderGroupedChildNodes","groups","childNode","childNodes","useCanDrop","draggingUid","traverse","parentId","getDropPosition","dropZone","dropZoneGrid","positions","zoneRect","getBoundingClientRect","gridItemList","currentRow","cells","rows","gridItem","rect","cell","top","bottom","left","right","prevCell","compareApproximately","min","lastRectBottom","nextCursorTop","row","rowIndex","rectBottom","cursor","nextRow","lastRectRight","nextCursorLeft","cursorDefault","isVertical","height","cellIndex","rectRight","getDropPositions","a","b","diff","abs","getSortedIdsAfterDropped","droppingInfo","draggingNodeUid","draggingNodeId","draggingIndex","droppingMountPoint","droppingSiblingGroups","droppingIndex","draggingNodeUids","fullChildNodes","group","uids","useCanvasList","rootChildNodes","mainCanvas","portalCanvasList","DropZone","separateCanvas","independentPortalCanvas","canvasIndex","fullscreen","delegatedContext","dropZoneStyle","dropZoneBodyStyle","showOutlineIfEmpty","hiddenWrapper","emptyClassName","dropZoneBody","dropPositionCursor","setDropPositionCursor","dropPositionCursorRef","groupedChildNodes","isGeneralizedPortalCanvas","hasTabs","canDrop","refinedSlotContentLayout","selfChildNodes","canvasList","selfChildNodesInCurrentCanvas","Number","canvasSettings","_canvas_","getDroppingIndexInFullCanvas","droppingIndexInCurrentCanvas","getDroppingContext","siblingGroups","droppingParentUid","droppingParentInstanceId","droppingChildNodes","isDraggingOverCurrent","dropRef","useDrop","accept","NODE_TO_ADD","SNIPPET_TO_APPLY","isOver","shallow","getClientOffset","drop","didDrop","brickType","draggingNodeInstanceId","processDrop","droppable","dropZoneRef","dropZoneRefCallback","String","isSlot","slotContentLayoutBlock","slotContentLayoutInline","slotContentLayoutGrid","GRID","data-slot-id","dropCursor","dropCursorVertical","dropCursorHorizontal","SlotContainer","slotContainerStyle","delegatedSlots","BuilderProvider","memo","LegacyBuilderProvider","instanceSymbol","for","createSingletonBuilderContext","refCount","Provider","EditorElementFactory","EditorComponent","attribute","display","brickStyle","_render","ReactDOM","unmountComponentAtNode","isConnected","render","backend","HTML5Backend","UpdatingElement","DroppingStatusContext","useBuilderNodeMountPoints","useBuilderParentNode","useRouteList","useActiveNodeUid","useOutlineEnabled","inapplicable","enabled","setEnabled","dll"],"mappings":"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","file":"dll-of-editor-bricks-helper.afd5e139.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","module.exports = DllOfReactDnd;","module.exports = (__webpack_require__(\"XuQu\"))(\"3tO9\");","module.exports = (__webpack_require__(\"XuQu\"))(\"A+yw\");","module.exports = (__webpack_require__(\"XuQu\"))(\"ACCw\");","module.exports = (__webpack_require__(\"/8r5\"))(\"IYwU\");","module.exports = (__webpack_require__(\"XuQu\"))(\"LvDl\");","module.exports = (__webpack_require__(\"XuQu\"))(\"QILm\");","import {\n BrickEventsMap,\n BuilderRouteOrBrickNode,\n CustomTemplateProxy,\n ContextConf,\n BuilderRouteNode,\n BrickLifeCycle,\n BrickConf,\n RouteConf,\n} from \"@next-core/brick-types\";\n\nexport interface BuilderCanvasData {\n rootId: number;\n nodes: BuilderRuntimeNode[];\n edges: BuilderRuntimeEdge[];\n wrapperNode?: BuilderRuntimeNode;\n}\n\nexport interface BuilderCanvasSettings {\n mode: \"page\" | \"dialog\";\n}\n\nexport type BuilderRuntimeNode<P = Record<string, unknown>> =\n BuilderRouteOrBrickNode & {\n $$uid?: number;\n $$parsedProperties?: P;\n $$parsedEvents?: BrickEventsMap;\n $$parsedLifeCycle?: BrickLifeCycle;\n $$matchedSelectors?: string[];\n $$isTemplateInternalNode?: boolean;\n $$isExpandableTemplate?: boolean;\n $$templateProxy?: CustomTemplateProxy;\n $$templateRefToUid?: Map<string, number>;\n $$delegatedSlots?: Map<string, TemplateDelegatedContext[]>;\n $$normalized?: BrickConf | RouteConf | null;\n };\n\nexport interface BuilderRuntimeEdge {\n child: number;\n parent: number;\n mountPoint: string;\n sort: number;\n $$isTemplateInternal?: boolean;\n $$isTemplateDelegated?: boolean;\n $$isTemplateExpanded?: boolean;\n}\n\nexport interface TemplateDelegatedContext {\n templateUid: number;\n templateMountPoint: string;\n}\n\nexport interface BuilderGroupedChildNode {\n mountPoint: string;\n childNodes: BuilderRuntimeNode[];\n}\n\nexport interface EventDetailOfNodeAdd {\n nodeUid: number;\n parentUid: number;\n nodeUids: number[];\n nodeIds: string[];\n nodeData: NodeInstance;\n sort?: number;\n}\n\nexport interface EventDetailOfContextUpdated {\n context: ContextConf[];\n}\n\nexport interface NodeInstance {\n parent: string;\n type: \"brick\" | \"provider\" | \"template\";\n brick: string;\n mountPoint: string;\n bg?: boolean;\n portal?: boolean;\n properties?: string;\n events?: string;\n lifeCycle?: string;\n sort?: number;\n}\n\nexport interface EventDetailOfNodeAddStored {\n nodeUid: number;\n nodeData: BuilderRouteOrBrickNode;\n}\n\nexport interface EventDetailOfSnippetApply {\n parentUid: number;\n /** First level node only. */\n nodeUids: number[];\n /** First level node only. */\n nodeIds: string[];\n nodeDetails: SnippetNodeDetail[];\n}\n\nexport interface SnippetNodeDetail {\n nodeUid: number;\n parentUid: number;\n nodeData: SnippetNodeInstance;\n children: SnippetNodeDetail[];\n}\n\nexport type SnippetNodeInstance = Omit<NodeInstance, \"parent\"> & {\n parent?: string;\n};\n\nexport interface EventDetailOfSnippetApplyStored {\n flattenNodeDetails: EventDetailOfNodeAddStored[];\n}\n\nexport type EventDetailOfNodeMove = Omit<EventDetailOfNodeAdd, \"nodeData\"> & {\n nodeInstanceId: string;\n nodeData: {\n parent: string;\n mountPoint: string;\n };\n};\n\nexport type EventDetailOfWorkbenchTreeNodeMove = {\n nodeUid: number;\n nodeInstanceId: string;\n nodeIds: string[];\n objectId: string;\n nodeData?: {\n parent: string;\n mountPoint: string;\n };\n};\n\nexport type dragStatus = \"inside\" | \"top\" | \"bottom\";\n\nexport interface WorkbenchNodeData extends NodeInstance {\n instanceId: string;\n id: string;\n}\nexport interface WorkbenchNodeAdd {\n nodeData: WorkbenchNodeData & {\n bricks: BrickConf[];\n $$uid?: number;\n };\n mountPoint: string;\n dragOverInstanceId: string;\n /**\n * @deprecated 请使用 parent。\n * @internal\n */\n parentInstanceId?: string;\n parent: string;\n dragStatus: dragStatus;\n}\nexport interface WorkbenchTreeNodeMoveProps {\n dragNodeUid: number;\n dragOverNodeUid: number;\n dragParentNodeUid: number;\n dragStatus: \"inside\" | \"top\" | \"bottom\";\n}\n\nexport interface EventDetailOfNodeReorder {\n nodeUids: number[];\n parentUid: number;\n nodeIds: string[];\n}\n\nexport interface EventDetailOfNodeDragStart {\n nodeUid: number;\n}\n\nexport interface BuilderContextMenuStatus {\n active: boolean;\n node?: BuilderRuntimeNode;\n /** `x` is relative to the viewport. */\n x?: number;\n /** `y` is relative to the viewport. */\n y?: number;\n}\n\nexport enum BuilderDataTransferType {\n NODE_TO_ADD = \"builder/node-to-add\",\n NODE_TO_MOVE = \"builder/node-to-move\",\n SNIPPET_TO_APPLY = \"builder/snippet-to-apply\",\n}\n\nexport interface BuilderDataTransferPayloadOfNodeToAdd {\n brickType?: \"brick\" | \"provider\" | \"template\";\n brick: string;\n}\n\nexport interface BuilderDataTransferPayloadOfNodeToMove {\n nodeUid: number;\n nodeInstanceId: string;\n nodeId: string;\n}\n\nexport interface BuilderDataTransferPayloadOfSnippetToApply {\n bricks: BrickConf[];\n}\n\nexport enum EditorBrickType {\n DEFAULT = \"editorOfDefault\",\n CONTAINER = \"editorOfContainer\",\n TRANSPARENT_CONTAINER = \"editorOfTransparentContainer\",\n}\n\nexport enum EditorSelfLayout {\n BLOCK = \"block\",\n INLINE = \"inline\",\n CONTAINER = \"container\",\n}\n\nexport enum EditorSlotContentLayout {\n BLOCK = \"block\",\n INLINE = \"inline\",\n GRID = \"grid\",\n}\n\nexport interface SharedEditorConf {\n id: string;\n editor: string;\n editorProps?: Record<string, unknown>;\n}\n\nexport type BuilderDroppingStatus = Map<number, Map<string, boolean>>;\n","/*!\n Copyright (c) 2018 Jed Watson.\n Licensed under the MIT License (MIT), see\n http://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames() {\n\t\tvar classes = [];\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (!arg) continue;\n\n\t\t\tvar argType = typeof arg;\n\n\t\t\tif (argType === 'string' || argType === 'number') {\n\t\t\t\tclasses.push(arg);\n\t\t\t} else if (Array.isArray(arg)) {\n\t\t\t\tif (arg.length) {\n\t\t\t\t\tvar inner = classNames.apply(null, arg);\n\t\t\t\t\tif (inner) {\n\t\t\t\t\t\tclasses.push(inner);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (argType === 'object') {\n\t\t\t\tif (arg.toString === Object.prototype.toString) {\n\t\t\t\t\tfor (var key in arg) {\n\t\t\t\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\t\t\t\tclasses.push(key);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tclasses.push(arg.toString());\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn classes.join(' ');\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","/*! (c) Andrea Giammarchi - ISC */\nvar self = {};\ntry {\n self.EventTarget = (new EventTarget).constructor;\n} catch(EventTarget) {\n (function (Object, wm) {\n var create = Object.create;\n var defineProperty = Object.defineProperty;\n var proto = EventTarget.prototype;\n define(proto, 'addEventListener', function (type, listener, options) {\n for (var\n secret = wm.get(this),\n listeners = secret[type] || (secret[type] = []),\n i = 0, length = listeners.length; i < length; i++\n ) {\n if (listeners[i].listener === listener)\n return;\n }\n listeners.push({target: this, listener: listener, options: options});\n });\n define(proto, 'dispatchEvent', function (event) {\n var secret = wm.get(this);\n var listeners = secret[event.type];\n if (listeners) {\n define(event, 'target', this);\n define(event, 'currentTarget', this);\n listeners.slice(0).some(dispatch, event);\n delete event.currentTarget;\n delete event.target;\n }\n return true;\n });\n define(proto, 'removeEventListener', function (type, listener) {\n for (var\n secret = wm.get(this),\n /* istanbul ignore next */\n listeners = secret[type] || (secret[type] = []),\n i = 0, length = listeners.length; i < length; i++\n ) {\n if (listeners[i].listener === listener) {\n listeners.splice(i, 1);\n return;\n }\n }\n });\n self.EventTarget = EventTarget;\n function EventTarget() {'use strict';\n wm.set(this, create(null));\n }\n function define(target, name, value) {\n defineProperty(\n target,\n name,\n {\n configurable: true,\n writable: true,\n value: value\n }\n );\n }\n function dispatch(info) {\n var options = info.options;\n if (options && options.once)\n info.target.removeEventListener(this.type, info.listener);\n if (typeof info.listener === 'function')\n info.listener.call(info.target, this);\n else\n info.listener.handleEvent(this);\n return this._stopImmediatePropagationFlag;\n }\n }(Object, new WeakMap));\n}\nexport default self.EventTarget;\n","let uniqueIdCursor = 0;\n\nexport function getUniqueNodeId(): number {\n return (uniqueIdCursor += 1);\n}\n","import { clamp, sortBy } from \"lodash\";\nimport { CustomTemplateProxySlot } from \"@next-core/brick-types\";\nimport { hasOwnProperty } from \"@next-core/brick-utils\";\nimport {\n BuilderCanvasData,\n BuilderRuntimeEdge,\n BuilderRuntimeNode,\n} from \"../interfaces\";\n\nexport function expandTemplateEdges({\n nodes,\n // Here expanded edges should be excluded.\n edges,\n rootId,\n}: BuilderCanvasData): BuilderRuntimeEdge[] {\n const newEdges = edges.slice();\n const reorderedEdgesMap = new WeakMap<BuilderRuntimeEdge, number>();\n\n const walk = (\n uid: number,\n callback: (\n node: BuilderRuntimeNode,\n childEdges: BuilderRuntimeEdge[]\n ) => void\n ): void => {\n const node = nodes.find((item) => item.$$uid === uid);\n const childEdges = sortBy(\n edges.filter((edge) => edge.parent === node.$$uid),\n (edge) => edge.sort\n );\n callback(node, childEdges);\n for (const edge of childEdges) {\n walk(edge.child, callback);\n }\n };\n\n const expandEdgesThroughTemplateChain = (\n node: BuilderRuntimeNode,\n mountPoint: string,\n childUid: number\n ): void => {\n let proxySlotConf: CustomTemplateProxySlot;\n let delegateToParentUid: number;\n if (\n node.$$isExpandableTemplate &&\n node.$$templateProxy?.slots &&\n hasOwnProperty(node.$$templateProxy.slots, mountPoint) &&\n (proxySlotConf = node.$$templateProxy.slots[mountPoint]) &&\n (delegateToParentUid = node.$$templateRefToUid.get(proxySlotConf.ref))\n ) {\n const nextNode = nodes.find((n) => n.$$uid === delegateToParentUid);\n const nextMountPoint = proxySlotConf.refSlot;\n if (nextNode.$$isExpandableTemplate) {\n expandEdgesThroughTemplateChain(nextNode, nextMountPoint, childUid);\n } else {\n const expandedEdge: BuilderRuntimeEdge = {\n child: childUid,\n parent: delegateToParentUid,\n mountPoint: nextMountPoint,\n sort: undefined,\n $$isTemplateExpanded: true,\n };\n const siblingEdges = sortBy(\n newEdges.filter((edge) => edge.parent === delegateToParentUid),\n (edge) => reorderedEdgesMap.get(edge) ?? edge.sort\n );\n const internalEdges = siblingEdges.filter(\n (edge) => edge.$$isTemplateInternal\n );\n // For more details about refPosition implementation detail,\n // see `packages/brick-kit/src/core/CustomTemplates/expandCustomTemplate.ts`.\n const refPosition = proxySlotConf.refPosition ?? -1;\n const clampedRefPosition = clamp(\n refPosition < 0\n ? internalEdges.length + 1 + refPosition\n : refPosition,\n 0,\n internalEdges.length\n );\n siblingEdges.splice(\n clampedRefPosition < internalEdges.length\n ? siblingEdges.findIndex(\n (edge) => edge === internalEdges[clampedRefPosition]\n )\n : siblingEdges.length,\n 0,\n expandedEdge\n );\n siblingEdges.forEach((edge, index) => {\n reorderedEdgesMap.set(edge, index);\n });\n newEdges.push(expandedEdge);\n }\n }\n };\n\n walk(rootId, (node, childEdges) => {\n if (!node.$$isExpandableTemplate) {\n return;\n }\n for (const childEdge of childEdges) {\n // Recursively expand templates.\n expandEdgesThroughTemplateChain(\n node,\n childEdge.mountPoint,\n childEdge.child\n );\n }\n });\n\n if (newEdges.length > edges.length) {\n return newEdges.map((edge) => {\n const sort = reorderedEdgesMap.get(edge);\n return sort === undefined\n ? edge\n : {\n ...edge,\n sort,\n };\n });\n }\n\n return edges;\n}\n","import { BuilderCanvasData, BuilderRuntimeEdge } from \"../interfaces\";\nimport { expandTemplateEdges } from \"./expandTemplateEdges\";\n\nexport function reorderBuilderEdges(\n { rootId, nodes, edges }: BuilderCanvasData,\n {\n parentUid,\n nodeUids,\n }: {\n parentUid: number;\n nodeUids: number[];\n }\n): BuilderRuntimeEdge[] {\n // When we do edge-reordering, we simply remove existed\n // expanded edges and re-expand them.\n const edgesExcludeExpanded = edges.filter(\n (edge) => !edge.$$isTemplateExpanded\n );\n\n return expandTemplateEdges({\n rootId,\n nodes,\n edges: edgesExcludeExpanded.map((edge) => {\n // `nodeUids` are sorted, so reorder related edges based on it.\n const index =\n edge.parent === parentUid ? nodeUids.indexOf(edge.child) : -1;\n return index >= 0\n ? {\n ...edge,\n sort: index,\n }\n : edge;\n }),\n });\n}\n","import { BuilderCanvasData, BuilderRuntimeEdge } from \"../interfaces\";\n\nexport function deleteNodeFromTree(\n nodeUid: number,\n { rootId, nodes, edges, wrapperNode }: BuilderCanvasData\n): BuilderCanvasData {\n const idsToDelete = new Set<number>();\n collectIdsToDelete(nodeUid, edges, idsToDelete);\n return {\n rootId,\n nodes: nodes.filter((node) => !idsToDelete.has(node.$$uid)),\n edges: edges.filter(\n (edge) => !idsToDelete.has(edge.parent) && !idsToDelete.has(edge.child)\n ),\n wrapperNode: wrapperNode?.$$uid === nodeUid ? null : wrapperNode,\n };\n}\n\nfunction collectIdsToDelete(\n nodeUid: number,\n edges: BuilderRuntimeEdge[],\n idsToDelete: Set<number>\n): void {\n idsToDelete.add(nodeUid);\n const ids = new Set<number>();\n for (const edge of edges) {\n if (edge.parent === nodeUid) {\n ids.add(edge.child);\n }\n }\n for (const id of ids) {\n collectIdsToDelete(id, edges, idsToDelete);\n }\n}\n","import { BuilderRuntimeNode } from \"../interfaces\";\nimport {\n BrickEventHandler,\n ExecuteCustomBrickEventHandler,\n MessageConf,\n} from \"@next-core/brick-types\";\nimport { isEmpty } from \"lodash\";\n\nexport type RelatedNodesBasedOnEventsMap = Map<\n number,\n {\n upstreamNodes: Set<number>;\n downstreamNodes: Set<number>;\n }\n>;\n\nexport function getRelatedNodesBasedOnEvents(\n nodes: BuilderRuntimeNode[],\n rootNodeIsCustomTemplate?: boolean\n): RelatedNodesBasedOnEventsMap {\n const nodesMap: RelatedNodesBasedOnEventsMap = new Map();\n\n const targetMap = new Map<string, number>();\n const targetRefMap = new Map<string, number>();\n for (const n of nodes) {\n nodesMap.set(n.$$uid, {\n upstreamNodes: new Set<number>(),\n downstreamNodes: new Set<number>(),\n });\n for (const selector of n.$$matchedSelectors) {\n if (!targetMap.get(selector)) {\n targetMap.set(selector, n.$$uid);\n }\n }\n if (rootNodeIsCustomTemplate) {\n if (n.ref) {\n targetRefMap.set(n.ref as string, n.$$uid);\n }\n }\n }\n\n for (const node of nodes) {\n let handlers: BrickEventHandler[] = [];\n if (!isEmpty(node.$$parsedEvents)) {\n handlers = Object.values(node.$$parsedEvents).flat();\n }\n if (!isEmpty(node.$$parsedLifeCycle)) {\n handlers = handlers.concat(\n Object.entries(node.$$parsedLifeCycle).flatMap(\n ([lifeCycleName, lifeCycleConf]) => {\n switch (lifeCycleName) {\n case \"onBeforePageLoad\":\n case \"onPageLoad\":\n case \"onPageLeave\":\n case \"onBeforePageLeave\":\n case \"onAnchorLoad\":\n case \"onAnchorUnload\":\n case \"onMessageClose\":\n return lifeCycleConf as BrickEventHandler[];\n case \"onMessage\":\n return ([] as MessageConf[])\n .concat(lifeCycleConf)\n .flatMap((messageConf) =>\n ([] as BrickEventHandler[]).concat(messageConf.handlers)\n );\n default:\n // eslint-disable-next-line no-console\n console.warn(`unknown lifeCycle: ${lifeCycleName}`);\n return [];\n }\n }\n )\n );\n }\n if (handlers.length > 0) {\n collectRelatedNodes(node, handlers, nodesMap, targetMap, targetRefMap);\n }\n }\n\n return nodesMap;\n}\n\nfunction collectRelatedNodes(\n node: BuilderRuntimeNode,\n handlers: BrickEventHandler[],\n nodesMap: RelatedNodesBasedOnEventsMap,\n targetMap: Map<string, number>,\n targetRefMap: Map<string, number>\n): void {\n for (const handler of handlers as ExecuteCustomBrickEventHandler[]) {\n if (handler) {\n if (handler.target) {\n const targetNodeUid = targetMap.get(handler.target as string);\n if (targetNodeUid) {\n nodesMap.get(node.$$uid).downstreamNodes.add(targetNodeUid);\n nodesMap.get(targetNodeUid).upstreamNodes.add(node.$$uid);\n }\n } else if (handler.targetRef) {\n for (const ref of [].concat(handler.targetRef)) {\n const targetRefNodeUid = targetRefMap.get(ref);\n if (targetRefNodeUid) {\n nodesMap.get(node.$$uid).downstreamNodes.add(targetRefNodeUid);\n nodesMap.get(targetRefNodeUid).upstreamNodes.add(node.$$uid);\n }\n }\n }\n if (handler.callback) {\n for (const callbackHandlers of Object.values(handler.callback)) {\n collectRelatedNodes(\n node,\n [].concat(callbackHandlers),\n nodesMap,\n targetMap,\n targetRefMap\n );\n }\n }\n }\n }\n}\n","import { cloneDeep, upperFirst } from \"lodash\";\nimport { normalizeBuilderNode } from \"@next-core/brick-utils\";\nimport { BuilderRouteOrBrickNode } from \"@next-core/brick-types\";\nimport { BuilderRuntimeNode } from \"../interfaces\";\nimport { isBrickNode } from \"../assertions\";\n\nconst nodeIgnoreFields = [\"parent\", \"children\", \"graphInfo\", \"mountPoint\"];\n\n// Match evaluations and placeholders,\n// E.g.: `<% QUERY.x %>` or `${QUERY.x}`.\nconst computationRegExp = /[<{]/;\n\nexport function getBuilderNode(\n nodeData: BuilderRouteOrBrickNode,\n nodeUid: number,\n isTemplateInternalNode?: boolean\n): BuilderRuntimeNode {\n const matchedSelectors: string[] = [];\n\n if (nodeData.brick) {\n matchedSelectors.push((nodeData.brick as string).replace(/\\./g, \"\\\\.\"));\n }\n\n const normalized = normalizeBuilderNode(nodeData);\n\n const jsonFieldsInBrick = [\"properties\", \"events\", \"lifeCycle\"];\n const parsedFields: [string, unknown][] = [];\n let parsedId: string;\n let parsedTestId: string;\n\n for (const field of jsonFieldsInBrick) {\n const parsed = cloneDeep(\n (normalized as Record<string, unknown>)?.[field]\n ) as Record<string, unknown>;\n parsedFields.push([`$$parsed${upperFirst(field)}`, parsed ?? {}]);\n\n if (field === \"properties\") {\n let tempParsedId: string;\n let tempParsedTestId: string;\n if (\n ((tempParsedTestId = (parsed?.dataset as Record<string, string>)\n ?.testid),\n typeof tempParsedTestId === \"string\") &&\n !computationRegExp.test(tempParsedTestId)\n ) {\n parsedTestId = tempParsedTestId;\n } else if (\n ((tempParsedId = parsed?.id as string),\n typeof tempParsedId === \"string\") &&\n !computationRegExp.test(tempParsedId)\n ) {\n parsedId = tempParsedId;\n matchedSelectors.push(`#${parsedId}`);\n }\n }\n }\n\n return Object.fromEntries(\n Object.entries(nodeData)\n .filter((entry) => !nodeIgnoreFields.includes(entry[0]))\n .concat([\n [\n \"alias\",\n nodeData.alias ||\n (isBrickNode(nodeData)\n ? nodeData.ref ||\n parsedTestId ||\n parsedId ||\n nodeData.brick.split(\".\").pop()\n : undefined),\n ],\n [\"$$uid\", nodeUid],\n [\"$$matchedSelectors\", matchedSelectors],\n [\"$$isTemplateInternalNode\", isTemplateInternalNode],\n [\"$$normalized\", normalized],\n ])\n .concat(parsedFields)\n ) as BuilderRuntimeNode;\n}\n","import { sortBy } from \"lodash\";\nimport { hasOwnProperty } from \"@next-core/brick-utils\";\nimport {\n BuilderRouteOrBrickNode,\n BuilderCustomTemplateNode,\n CustomTemplateProxyProperty,\n CustomTemplateProxyBasicProperty,\n Story,\n TemplateLayoutType,\n} from \"@next-core/brick-types\";\nimport { BuilderRuntimeEdge, BuilderRuntimeNode } from \"../interfaces\";\nimport { getBuilderNode } from \"./getBuilderNode\";\nimport { getUniqueNodeId } from \"./getUniqueNodeId\";\nimport { isBrickNode } from \"../assertions\";\n\nexport function getAppendingNodesAndEdges(\n nodeData: BuilderRouteOrBrickNode,\n nodeUid: number,\n templateSourceMap: Map<string, BuilderCustomTemplateNode>,\n storyList: Story[] = [],\n isRoot?: boolean\n): {\n nodes: BuilderRuntimeNode[];\n edges: BuilderRuntimeEdge[];\n wrapperNode?: BuilderRuntimeNode;\n} {\n const nodes: BuilderRuntimeNode[] = [];\n const edges: BuilderRuntimeEdge[] = [];\n let wrapperNode: BuilderRuntimeNode;\n\n const walk = (\n nodeData: BuilderRouteOrBrickNode,\n currentUid: number,\n processedTemplateSet: Set<string>,\n isTemplateInternalNode?: boolean,\n inheritedTemplateRefToUid?: Map<string, number>,\n layoutType?: TemplateLayoutType\n ): void => {\n const builderNode = getBuilderNode(\n nodeData,\n currentUid,\n isTemplateInternalNode\n );\n nodes.push(builderNode);\n\n if (inheritedTemplateRefToUid && builderNode.ref) {\n inheritedTemplateRefToUid.set(builderNode.ref as string, currentUid);\n }\n\n let templateSource: BuilderCustomTemplateNode;\n\n if (\n isBrickNode(builderNode) &&\n ((!builderNode.brick.includes(\".\") &&\n builderNode.brick.startsWith(\"tpl-\") &&\n !processedTemplateSet.has(builderNode.brick) &&\n (templateSource = templateSourceMap?.get(builderNode.brick)) &&\n templateSource.children?.length > 0) ||\n (builderNode.brick.includes(\".tpl-\") &&\n (templateSource = storyList?.find(\n (item) => item.storyId === builderNode.brick\n )?.originData) &&\n templateSource.children?.length > 0))\n ) {\n if (templateSource.layoutType === \"wrapper\") {\n builderNode.layoutType = \"wrapper\";\n }\n // Avoid nesting the same templates.\n processedTemplateSet.add(builderNode.brick);\n builderNode.$$isExpandableTemplate = true;\n builderNode.$$templateProxy =\n templateSource.proxy && JSON.parse(templateSource.proxy);\n const templateRefToUid = new Map<string, number>();\n builderNode.$$templateRefToUid = templateRefToUid;\n\n const sortedChildren = sortBy(templateSource.children, [\n (item) => item.sort ?? -Infinity,\n ]);\n sortedChildren.forEach((child, index) => {\n const childUid = getUniqueNodeId();\n walk(\n child,\n childUid,\n // Each child should be a branch.\n new Set(processedTemplateSet),\n true,\n templateRefToUid,\n layoutType\n );\n edges.push({\n child: childUid,\n parent: currentUid,\n mountPoint: \"\",\n sort: index,\n $$isTemplateInternal: true,\n });\n });\n\n if (!builderNode.$$isTemplateInternalNode) {\n // Here all internal nodes of the template including nested templates are ready.\n const processDelegatingSlots = (\n cursorNode: BuilderRuntimeNode,\n mountPoint?: string,\n rootMountPoint?: string\n ): void => {\n if (cursorNode.$$templateProxy?.slots) {\n const slotEntries = Object.entries(\n cursorNode.$$templateProxy?.slots\n ).filter(\n (entry) => mountPoint === undefined || entry[0] === mountPoint\n );\n for (const [slotName, slotConf] of slotEntries) {\n const refUid = cursorNode.$$templateRefToUid.get(slotConf.ref);\n if (refUid) {\n const refNode = nodes.find((node) => node.$$uid === refUid);\n if (refNode.$$isExpandableTemplate) {\n processDelegatingSlots(refNode, slotConf.refSlot, slotName);\n } else {\n if (!refNode.$$delegatedSlots) {\n refNode.$$delegatedSlots = new Map();\n }\n let delegatedSlotsByRefSlot = refNode.$$delegatedSlots.get(\n slotConf.refSlot\n );\n if (!delegatedSlotsByRefSlot) {\n delegatedSlotsByRefSlot = [];\n refNode.$$delegatedSlots.set(\n slotConf.refSlot,\n delegatedSlotsByRefSlot\n );\n }\n delegatedSlotsByRefSlot.push({\n templateUid: builderNode.$$uid,\n templateMountPoint: rootMountPoint || slotName,\n });\n }\n }\n }\n }\n };\n processDelegatingSlots(builderNode);\n\n const processDelegatingProperties = (\n cursorNode: BuilderRuntimeNode,\n previousPropertyName?: string\n ): void => {\n if (cursorNode.$$templateProxy?.properties) {\n const propertyEntries = Object.entries(\n cursorNode.$$templateProxy?.properties\n ).filter(\n (entry) =>\n previousPropertyName === undefined ||\n entry[0] === previousPropertyName\n );\n for (const [propertyName, propertyConf] of propertyEntries) {\n if (\n hasOwnProperty(cursorNode.$$parsedProperties, propertyName) &&\n isBasicRefProperty(propertyConf)\n ) {\n const refUid = cursorNode.$$templateRefToUid.get(\n propertyConf.ref\n );\n const propertyValue =\n cursorNode.$$parsedProperties[propertyName];\n if (refUid) {\n const refNode = nodes.find((node) => node.$$uid === refUid);\n refNode.$$parsedProperties[propertyConf.refProperty] =\n propertyValue;\n if (refNode.$$isExpandableTemplate) {\n processDelegatingProperties(\n refNode,\n propertyConf.refProperty\n );\n }\n }\n }\n }\n }\n };\n processDelegatingProperties(builderNode);\n }\n }\n\n if (Array.isArray(nodeData.children)) {\n // For routes and custom-templates, their children are fixed\n // and mount points should be ignored. To unify tree edge\n // data structure, just override their mount points.\n let overrideChildrenMountPoint: string;\n switch (builderNode.type) {\n case \"bricks\":\n case \"custom-template\":\n case \"snippet\":\n overrideChildrenMountPoint = \"bricks\";\n break;\n case \"routes\":\n overrideChildrenMountPoint = \"routes\";\n break;\n }\n const sortedChildren = sortBy(nodeData.children, [\n (item) => item.sort ?? -Infinity,\n ]);\n sortedChildren.forEach((child, index) => {\n const childUid = getUniqueNodeId();\n walk(\n child,\n childUid,\n // Each child should be a branch.\n new Set(processedTemplateSet),\n isTemplateInternalNode,\n inheritedTemplateRefToUid\n );\n edges.push({\n child: childUid,\n parent: currentUid,\n mountPoint: overrideChildrenMountPoint ?? child.mountPoint,\n sort: index,\n $$isTemplateInternal: isTemplateInternalNode,\n $$isTemplateDelegated: builderNode.$$isExpandableTemplate,\n });\n });\n }\n };\n walk(nodeData, nodeUid, new Set());\n for (let i = 0; i < nodes.length; i++) {\n // 布局模板属于第一层\n const item = nodes[i];\n if (\n item.layoutType === \"wrapper\" &&\n isRoot &&\n edges.find((edge) => edge.child === item.$$uid).parent === nodeUid\n ) {\n if (!wrapperNode) {\n wrapperNode = item;\n }\n break;\n }\n }\n return {\n nodes,\n edges,\n wrapperNode,\n };\n}\n\nexport function isBasicRefProperty(\n propRef: CustomTemplateProxyProperty\n): propRef is CustomTemplateProxyBasicProperty {\n return (\n !!(propRef as CustomTemplateProxyBasicProperty).ref &&\n !!(propRef as CustomTemplateProxyBasicProperty).refProperty\n );\n}\n","import { BuilderRuntimeNode } from \"../interfaces\";\n\nexport function isParentExpandableTemplate(\n nodes: BuilderRuntimeNode[],\n parentUid: number\n): boolean {\n return nodes.find((node) => node.$$uid === parentUid).$$isExpandableTemplate;\n}\n","import yaml from \"js-yaml\";\nimport { BrickConf } from \"@next-core/brick-types\";\nimport { SnippetNodeInstance } from \"../interfaces\";\n\nconst jsonFieldsInBrick = [\n \"properties\",\n \"events\",\n \"lifeCycle\",\n \"params\",\n \"if\",\n \"transform\",\n];\nconst yamlFieldsInBrick = [\"permissionsPreCheck\", \"transformFrom\"];\nconst ignoredFieldsInBrick = [\n \"brick\",\n \"template\",\n \"portal\",\n \"slots\",\n \"id\",\n \"children\",\n \"instanceId\",\n];\n\nexport interface ReverseNormalizeContext {\n isPortalCanvas: boolean;\n nodeData: {\n type: \"brick\" | \"template\" | \"provider\";\n parent: string;\n mountPoint: string;\n sort: number;\n };\n}\n\n// The reverse operation of *normalize*.\n// https://github.com/easyops-cn/next-basics/blob/5a6710d567821bcb4a0c71e22d55212193d8b0cb/bricks/next-builder/src/shared/storyboard/buildStoryboard.ts#L394\nexport function reverseNormalize(\n brickConf: BrickConf,\n ctx: ReverseNormalizeContext\n): SnippetNodeInstance {\n return Object.fromEntries(\n Object.entries(brickConf)\n .map<[string, unknown]>(([key, value]) =>\n value === undefined || ignoredFieldsInBrick.includes(key)\n ? undefined\n : jsonFieldsInBrick.includes(key)\n ? [key, JSON.stringify(value)]\n : yamlFieldsInBrick.includes(key)\n ? [key, yaml.safeDump(value)]\n : [key, value]\n )\n .filter(Boolean)\n .concat(Object.entries(ctx.nodeData), [\n [\n \"brick\",\n ctx.nodeData.type === \"template\"\n ? brickConf.template\n : brickConf.brick,\n ],\n [\"portal\", ctx.isPortalCanvas || brickConf.portal],\n ])\n ) as SnippetNodeInstance;\n}\n","import { omit, sortBy } from \"lodash\";\nimport EventTarget from \"@ungap/event-target\";\nimport {\n BuilderRouteOrBrickNode,\n BuilderRouteNode,\n Story,\n BuilderCustomTemplateNode,\n} from \"@next-core/brick-types\";\nimport { JsonStorage } from \"@next-core/brick-utils\";\nimport {\n BuilderCanvasData,\n BuilderContextMenuStatus,\n BuilderRuntimeEdge,\n BuilderRuntimeNode,\n EventDetailOfNodeAdd,\n EventDetailOfNodeAddStored,\n EventDetailOfNodeMove,\n EventDetailOfNodeReorder,\n EventDetailOfContextUpdated,\n SnippetNodeDetail,\n EventDetailOfSnippetApply,\n EventDetailOfSnippetApplyStored,\n SharedEditorConf,\n BuilderDroppingStatus,\n WorkbenchTreeNodeMoveProps,\n EventDetailOfWorkbenchTreeNodeMove,\n WorkbenchNodeAdd,\n} from \"../interfaces\";\nimport { getUniqueNodeId } from \"./getUniqueNodeId\";\nimport { reorderBuilderEdges } from \"./reorderBuilderEdges\";\nimport { deleteNodeFromTree } from \"./deleteNodeFromTree\";\nimport {\n getRelatedNodesBasedOnEvents,\n RelatedNodesBasedOnEventsMap,\n} from \"../processors/getRelatedNodesBasedOnEvents\";\nimport { expandTemplateEdges } from \"./expandTemplateEdges\";\nimport { getAppendingNodesAndEdges } from \"./getAppendingNodesAndEdges\";\nimport { isParentExpandableTemplate } from \"./isParentExpandableTemplate\";\nimport { getSnippetNodeDetail } from \"../DropZone/getSnippetNodeDetail\";\n\nenum BuilderInternalEventType {\n NODE_ADD = \"builder.node.add\",\n NODE_MOVE = \"builder.node.move\",\n NODE_REORDER = \"builder.node.reorder\",\n NODE_CLICK = \"builder.node.click\",\n NODE_UPDATE = \"builder.node.update\",\n SNIPPET_APPLY = \"builder.snippet.apply\",\n CONTEXT_MENU_CHANGE = \"builder.contextMenu.change\",\n DATA_CHANGE = \"builder.data.change\",\n SHARED_EDITOR_LIST_CHANGE = \"builder.sharedEditorList.change\",\n ROUTE_LIST_CHANGE = \"builder.routeList.change\",\n HOVER_NODE_CHANGE = \"builder.hoverNode.change\",\n ACTIVE_NODE_CHANGE = \"builder.activeNode.change\",\n SHOW_RELATED_NODES_BASED_ON_EVENTS = \"builder.showRelatedNodesBasedOnEvents.change\",\n HIGHLIGHT_NODES_CHANGE = \"builder.highlightNodes.change\",\n OUTLINE_DISABLED_NODES_CHANGE = \"builder.outlineDisabledNodes.change\",\n DROPPING_STATUS_CHANGE = \"builder.droppingStatus.change\",\n WORKBENCH_TREE_NODE_MOVE = \"workbench.tree.node.move\",\n}\n\nconst storageKeyOfOutlineDisabledNodes = \"builder-outline-disabled-nodes\";\n\nexport class BuilderDataManager {\n private data: BuilderCanvasData = {\n rootId: null,\n nodes: [],\n edges: [],\n wrapperNode: null,\n };\n\n private hoverNodeUid: number;\n private activeNodeUid: number;\n\n private sharedEditorList: SharedEditorConf[];\n\n private routeList: BuilderRouteNode[];\n\n private storyList: Story[];\n\n private readonly eventTarget = new EventTarget();\n\n private contextMenuStatus: BuilderContextMenuStatus = {\n active: false,\n };\n\n private showRelatedNodesBasedOnEvents: boolean;\n\n private relatedNodesBasedOnEventsMap: RelatedNodesBasedOnEventsMap;\n\n private highlightNodes: Set<number> = new Set();\n\n private templateSourceMap: Map<string, BuilderCustomTemplateNode>;\n\n private droppingStatus: BuilderDroppingStatus = new Map();\n\n private readonly localJsonStorage = new JsonStorage<{\n [storageKeyOfOutlineDisabledNodes]: string[];\n }>(localStorage);\n\n private readonly outlineDisabledNodes: Set<string> = new Set(\n this.localJsonStorage.getItem(storageKeyOfOutlineDisabledNodes) ?? []\n );\n\n getData(): BuilderCanvasData {\n return this.data;\n }\n\n getContextMenuStatus(): BuilderContextMenuStatus {\n return this.contextMenuStatus;\n }\n\n getRelatedNodesBasedOnEventsMap(): RelatedNodesBasedOnEventsMap {\n return this.relatedNodesBasedOnEventsMap;\n }\n\n sharedEditorListInit(data: SharedEditorConf[]): void {\n this.sharedEditorList = data;\n this.eventTarget.dispatchEvent(\n new CustomEvent(BuilderInternalEventType.SHARED_EDITOR_LIST_CHANGE)\n );\n }\n\n getSharedEditorList(): SharedEditorConf[] {\n return this.sharedEditorList ?? [];\n }\n\n onSharedEditorListChange(fn: EventListener): () => void {\n this.eventTarget.addEventListener(\n BuilderInternalEventType.SHARED_EDITOR_LIST_CHANGE,\n fn\n );\n return (): void => {\n this.eventTarget.removeEventListener(\n BuilderInternalEventType.SHARED_EDITOR_LIST_CHANGE,\n fn\n );\n };\n }\n\n routeListInit(data: BuilderRouteNode[]): void {\n this.routeList = data;\n this.eventTarget.dispatchEvent(\n new CustomEvent(BuilderInternalEventType.ROUTE_LIST_CHANGE)\n );\n }\n\n getRouteList(): BuilderRouteNode[] {\n return this.routeList ?? [];\n }\n\n storyListInit(data: Story[]): void {\n this.storyList = data;\n }\n\n getStoryList(): Story[] {\n return this.storyList;\n }\n\n onRouteListChange(fn: EventListener): () => void {\n this.eventTarget.addEventListener(\n BuilderInternalEventType.ROUTE_LIST_CHANGE,\n fn\n );\n return (): void => {\n this.eventTarget.removeEventListener(\n BuilderInternalEventType.ROUTE_LIST_CHANGE,\n fn\n );\n };\n }\n\n dataInit(\n root: BuilderRuntimeNode,\n templateSourceMap?: Map<string, BuilderCustomTemplateNode>\n ): void {\n this.templateSourceMap = templateSourceMap;\n const rootId = getUniqueNodeId();\n const newData = {\n rootId,\n ...getAppendingNodesAndEdges(\n root,\n rootId,\n templateSourceMap,\n this.storyList,\n true\n ),\n };\n this.data = {\n ...newData,\n edges: expandTemplateEdges(newData),\n };\n this.triggerDataChange();\n }\n\n private triggerDataChange(): void {\n const { rootId, nodes } = this.data;\n const rootNode = nodes.find((node) => node.$$uid === rootId);\n const rootNodeIsCustomTemplate = rootNode.type === \"custom-template\";\n this.relatedNodesBasedOnEventsMap = getRelatedNodesBasedOnEvents(\n nodes,\n rootNodeIsCustomTemplate\n );\n this.eventTarget.dispatchEvent(\n new CustomEvent(BuilderInternalEventType.DATA_CHANGE, {\n detail: this.data,\n })\n );\n }\n\n private runAddNodeAction(detail: EventDetailOfNodeAdd): void {\n const { rootId, nodes, edges, wrapperNode } = this.data;\n const { nodeUid, parentUid, nodeUids, nodeData, sort } = detail;\n\n const { nodes: addNodes, edges: addEdges } = getAppendingNodesAndEdges(\n omit(nodeData, [\n \"parent\",\n ]) as Partial<BuilderRouteOrBrickNode> as BuilderRouteOrBrickNode,\n nodeUid,\n this.templateSourceMap,\n this.getStoryList()\n );\n const newNodes = nodes.concat(addNodes);\n const newEdges = edges\n .concat({\n parent: parentUid,\n child: nodeUid,\n mountPoint: nodeData.mountPoint,\n sort: sort ?? undefined,\n $$isTemplateDelegated: isParentExpandableTemplate(nodes, parentUid),\n })\n .concat(addEdges);\n\n const newData = {\n rootId,\n nodes: newNodes,\n edges: newEdges,\n wrapperNode,\n };\n this.data = {\n ...newData,\n edges: reorderBuilderEdges(newData, {\n parentUid,\n nodeUids,\n }),\n };\n this.triggerDataChange();\n }\n\n updateBrick(detail: EventDetailOfNodeAdd): void {\n this.data = deleteNodeFromTree(detail.nodeUid, this.data);\n\n this.runAddNodeAction(detail);\n }\n\n updateNode(instanceId: string, detail: BuilderRuntimeNode): void {\n const { rootId, nodes, edges, wrapperNode } = this.data;\n const updateNode = nodes.find((item) => item.instanceId === instanceId);\n const newNodes = nodes.map((item) => {\n if (item.instanceId === instanceId) {\n return {\n ...item,\n ...detail,\n };\n }\n return item;\n });\n const newEdges =\n detail.mountPoint === undefined || detail.mountPoint === null\n ? edges\n : edges.map((item) => {\n if (item.child === updateNode.$$uid) {\n return {\n ...item,\n mountPoint: detail.mountPoint,\n };\n }\n return item;\n });\n this.data = {\n rootId,\n nodes: newNodes,\n edges: newEdges,\n wrapperNode,\n };\n this.eventTarget.dispatchEvent(\n new CustomEvent(BuilderInternalEventType.NODE_UPDATE, {\n detail: this.data,\n })\n );\n }\n\n private redirectMountPoint(\n detail: EventDetailOfNodeAdd | EventDetailOfNodeMove | SnippetNodeDetail\n ): void {\n const { rootId, wrapperNode } = this.data;\n if (detail.parentUid === rootId) {\n detail.nodeData.mountPoint = \"bricks\";\n }\n if (wrapperNode && wrapperNode.instanceId === detail.nodeData.parent) {\n detail.nodeData.mountPoint = \"content\";\n }\n }\n\n private redirectSnippetMountPoint(detail: EventDetailOfSnippetApply): void {\n detail.nodeDetails?.forEach((item) => {\n this.redirectMountPoint(item);\n });\n }\n\n nodeAdd(detail: EventDetailOfNodeAdd): void {\n this.redirectMountPoint(detail);\n this.runAddNodeAction(detail);\n\n this.eventTarget.dispatchEvent(\n new CustomEvent(BuilderInternalEventType.NODE_ADD, { detail })\n );\n }\n\n nodeAddStored(detail: EventDetailOfNodeAddStored): void {\n const { rootId, nodes, edges, wrapperNode } = this.data;\n const { nodeUid, nodeData } = detail;\n this.data = {\n rootId,\n nodes: nodes.map((node) =>\n node.$$uid === nodeUid\n ? { ...node, id: nodeData.id, instanceId: nodeData.instanceId }\n : node\n ),\n edges,\n wrapperNode,\n };\n this.triggerDataChange();\n }\n\n snippetApply(detail: EventDetailOfSnippetApply): void {\n this.redirectSnippetMountPoint(detail);\n const { rootId, nodes, edges, wrapperNode } = this.data;\n const { nodeDetails, parentUid, nodeUids } = detail;\n\n const newNodes: BuilderRuntimeNode[] = nodes.slice();\n const newEdges: BuilderRuntimeEdge[] = edges.slice();\n\n const walk = ({\n parentUid,\n nodeUid,\n nodeData,\n children,\n }: SnippetNodeDetail): void => {\n const { nodes: appendingNodes, edges: appendingEdges } =\n getAppendingNodesAndEdges(\n omit(nodeData, [\n \"parent\",\n ]) as Partial<BuilderRouteOrBrickNode> as BuilderRouteOrBrickNode,\n nodeUid,\n this.templateSourceMap,\n this.storyList\n );\n newNodes.push(...appendingNodes);\n newEdges.push(\n {\n parent: parentUid,\n child: nodeUid,\n mountPoint: nodeData.mountPoint,\n sort: nodeData.sort,\n $$isTemplateDelegated: isParentExpandableTemplate(\n newNodes,\n parentUid\n ),\n },\n ...appendingEdges\n );\n for (const item of children) {\n walk(item);\n }\n };\n\n for (const item of nodeDetails) {\n walk(item);\n }\n\n const newData = {\n rootId,\n nodes: newNodes,\n edges: newEdges,\n wrapperNode,\n };\n this.data = {\n ...newData,\n edges: reorderBuilderEdges(newData, {\n parentUid,\n nodeUids,\n }),\n };\n this.triggerDataChange();\n this.eventTarget.dispatchEvent(\n new CustomEvent(BuilderInternalEventType.SNIPPET_APPLY, { detail })\n );\n }\n\n snippetApplyStored(detail: EventDetailOfSnippetApplyStored): void {\n const { rootId, nodes, edges, wrapperNode } = this.data;\n const { flattenNodeDetails } = detail;\n this.data = {\n rootId,\n nodes: nodes.map((node) => {\n const found = flattenNodeDetails.find((n) => n.nodeUid === node.$$uid);\n return found\n ? {\n ...node,\n id: found.nodeData.id,\n instanceId: found.nodeData.instanceId,\n }\n : node;\n }),\n edges,\n wrapperNode,\n };\n this.triggerDataChange();\n }\n\n /**\n * Move node anywhere by drag-n-drop.\n * @deprecated use `moveNode` instead.\n */\n nodeMove(detail: EventDetailOfNodeMove): void {\n const { rootId, nodes, edges, wrapperNode } = this.data;\n this.redirectMountPoint(detail);\n const { nodeUid, parentUid, nodeUids, nodeData } = detail;\n const newData = {\n rootId,\n nodes,\n edges: edges\n .filter((edge) => edge.child !== nodeUid)\n .concat({\n parent: parentUid,\n child: nodeUid,\n mountPoint: nodeData.mountPoint,\n sort: undefined,\n $$isTemplateDelegated: isParentExpandableTemplate(nodes, parentUid),\n }),\n wrapperNode,\n };\n this.data = {\n ...newData,\n edges: reorderBuilderEdges(newData, {\n parentUid,\n nodeUids,\n }),\n };\n this.triggerDataChange();\n this.eventTarget.dispatchEvent(\n new CustomEvent(BuilderInternalEventType.NODE_MOVE, { detail })\n );\n }\n\n /**\n * Move node up or down.\n */\n moveNode(\n { $$uid: nodeUid }: BuilderRuntimeNode,\n direction: \"up\" | \"down\"\n ): void {\n const { parent: parentUid, mountPoint } = this.data.edges.find(\n (edge) => edge.child === nodeUid\n );\n const { relatedEdges, mountPoints } = getRelatedEdgesAndMountPoint(\n this.data.edges,\n parentUid\n );\n /** Edges of the same mount-point */\n const siblingEdges = relatedEdges.filter(\n (edge) => edge.mountPoint === mountPoint\n );\n const index = siblingEdges.findIndex((edge) => edge.child === nodeUid);\n const orderedSiblingEdges = moveItemInList(siblingEdges, index, direction);\n if (!orderedSiblingEdges) {\n return;\n }\n const orderedEdges = sortBy(\n relatedEdges,\n (edge) => mountPoints.indexOf(edge.mountPoint),\n (edge) => orderedSiblingEdges.indexOf(edge)\n );\n this.reorder(parentUid, orderedEdges);\n }\n\n private getDragInfo({\n nodeData,\n dragNodeUid,\n dragOverNodeUid,\n dragStatus,\n }: {\n nodeData: BuilderRuntimeNode;\n dragNodeUid: number;\n dragOverNodeUid: number;\n dragStatus: string;\n }) {\n const { rootId, nodes, edges } = this.data;\n const isDragRoot = dragOverNodeUid === rootId;\n /*\n * 如果没有id, 则为新增状态, 没有edge, 否则为移动状态\n */\n const isAdd = nodeData.id;\n const dragEdge = !isAdd\n ? edges.find((item) => item.child === dragNodeUid)\n : null;\n const dragOverEdge = edges.find((item) => item.child === dragOverNodeUid);\n /**\n * 如果是根节点, 则mountPoint强制等于 bricks\n * 如果是属于拖动进某个节点中, 则使用原mountPoint(新增节点为content)\n * 其他情况, 使用被拖拽节点的mountPoint\n */\n const mountPoint = isDragRoot\n ? \"bricks\"\n : dragStatus === \"inside\"\n ? dragEdge?.mountPoint ?? \"content\"\n : dragOverEdge.mountPoint;\n\n const parentEdge = edges.find((item) => item.child === dragOverNodeUid);\n /**\n * 如果是根节点, parentUid强制等于rootId\n * 如果是拖动进某个节点, 则当前节点为该节点parent\n * 否则, 等于该节点的父节点\n */\n const parentUid = isDragRoot\n ? rootId\n : dragStatus === \"inside\"\n ? parentEdge.child\n : parentEdge.parent;\n const parnetNodeData = nodes.find((item) => item.$$uid === parentUid);\n // 找到节点父亲等于拖动节点的父节点(寻找兄弟节点)\n const siblingEdge = edges.filter(\n (edge) => edge.child !== dragNodeUid && edge.parent === parentUid\n );\n const sortUids = sortBy(siblingEdge, \"sort\").map((item) => item.child);\n const sortNodeIds: string[] = sortUids.map((item) => {\n return nodes.find((node) => node.$$uid === item).id;\n });\n let sortIndex: number;\n if (dragStatus === \"inside\") {\n sortIndex = siblingEdge.length\n ? Math.max(...siblingEdge.map((item) => item.sort)) + 1\n : 0;\n // 插入默认插最后\n sortNodeIds.push(nodeData.id);\n } else if (dragStatus === \"top\" || dragStatus === \"bottom\") {\n const overIndex = sortUids.findIndex((item) => item === dragOverNodeUid);\n sortIndex = dragStatus === \"top\" ? overIndex : overIndex + 1;\n // 排序修正\n sortNodeIds.splice(sortIndex, 0, nodeData.id);\n // 如果是新增的情况下, 没有edge, 则取dragNodeUid(新创建的uid)\n sortUids.splice(sortIndex, 0, dragEdge?.child ?? dragNodeUid);\n }\n\n return {\n parentUid,\n mountPoint,\n sortIndex,\n parnetNodeData,\n sortUids,\n sortNodeIds,\n };\n }\n\n workbenchNodeAdd(\n detail: WorkbenchNodeAdd,\n isNeedUpdateSnippet = true\n ): void | EventDetailOfSnippetApply {\n const { nodes, edges, rootId } = this.data;\n const { nodeData, dragOverInstanceId, dragStatus, mountPoint } = detail;\n if (nodeData.instanceId && !nodeData.instanceId.startsWith(\"mock\")) {\n // move\n } else {\n // insert\n const parentInstanceId = detail.parent || detail.parentInstanceId;\n const newNodeUid = nodeData.$$uid || getUniqueNodeId();\n const overNode = nodes.find(\n (item) => item.instanceId === dragOverInstanceId\n );\n let dragOverNodeUid = overNode.$$uid;\n let realDragStatus = dragStatus;\n if (dragOverNodeUid === rootId) {\n realDragStatus = \"inside\";\n } else {\n const overEdge = edges.find((item) => item.child === dragOverNodeUid);\n const overParentNode = nodes.find((item) =>\n dragStatus === \"inside\"\n ? item.$$uid === overEdge.child\n : item.$$uid === overEdge.parent\n );\n\n if (overParentNode.instanceId !== parentInstanceId) {\n // 如果instanceId不相同, 说明父元素被修改, dragStatus强制等于inside, uid也需要切换成实际父元素的uid\n realDragStatus = \"inside\";\n dragOverNodeUid = nodes.find(\n (item) => item.instanceId === parentInstanceId\n ).$$uid;\n }\n }\n\n const {\n parentUid,\n sortIndex,\n sortUids: nodeUids,\n sortNodeIds: nodeIds,\n } = this.getDragInfo({\n nodeData: {\n id: null,\n } as BuilderRuntimeNode,\n dragNodeUid: newNodeUid,\n dragOverNodeUid,\n dragStatus: realDragStatus,\n });\n\n nodeData.parent = parentInstanceId;\n nodeData.mountPoint = mountPoint;\n nodeData.sort = sortIndex;\n\n if (nodeData.bricks) {\n // snippet\n const snippetData = {\n parentUid,\n nodeDetails: nodeData.bricks.map((brickConf) =>\n getSnippetNodeDetail({\n parent: parentInstanceId,\n parentUid: parentUid,\n mountPoint: mountPoint,\n nodeUid: newNodeUid,\n brickConf: brickConf,\n isPortalCanvas: false,\n })\n ),\n nodeIds,\n nodeUids,\n };\n if (isNeedUpdateSnippet) {\n this.snippetApply(snippetData);\n } else {\n return snippetData;\n }\n }\n\n this.runAddNodeAction({\n nodeUid: newNodeUid,\n parentUid,\n nodeUids,\n nodeIds,\n nodeData,\n sort: sortIndex,\n });\n this.eventTarget.dispatchEvent(\n new CustomEvent(BuilderInternalEventType.NODE_ADD, {\n detail: {\n nodeUid: newNodeUid,\n parentUid,\n nodeUids,\n nodeIds,\n nodeData,\n },\n })\n );\n }\n }\n\n workbenchTreeNodeMove(detail: WorkbenchTreeNodeMoveProps): void {\n const { rootId, nodes, edges, wrapperNode } = this.data;\n const { dragNodeUid, dragOverNodeUid, dragStatus } = detail;\n const nodeData = nodes.find((item) => item.$$uid === dragNodeUid);\n const originParentUid = edges.find(\n (edge) => edge.child === nodeData.$$uid\n ).parent;\n const originParentNode = nodes.find(\n (node) => node.$$uid === originParentUid\n );\n const {\n parentUid,\n parnetNodeData,\n mountPoint,\n sortIndex,\n sortUids: nodeUids,\n sortNodeIds: nodeIds,\n } = this.getDragInfo({\n nodeData,\n dragNodeUid,\n dragOverNodeUid,\n dragStatus,\n });\n\n const newData = {\n rootId,\n nodes,\n edges: edges\n .filter((edge) => edge.child !== dragNodeUid)\n .concat({\n parent: parentUid,\n child: dragNodeUid,\n mountPoint: mountPoint,\n sort: sortIndex,\n $$isTemplateDelegated: isParentExpandableTemplate(nodes, parentUid),\n }),\n wrapperNode,\n };\n this.data = {\n ...newData,\n edges: reorderBuilderEdges(newData, {\n parentUid,\n nodeUids,\n }),\n };\n this.triggerDataChange();\n this.eventTarget.dispatchEvent(\n new CustomEvent<EventDetailOfWorkbenchTreeNodeMove>(\n BuilderInternalEventType.WORKBENCH_TREE_NODE_MOVE,\n {\n detail: {\n nodeUid: dragNodeUid,\n nodeInstanceId: nodeData.instanceId,\n nodeIds,\n ...(originParentNode.instanceId !== parnetNodeData.instanceId\n ? {\n nodeData: {\n parent: parnetNodeData.instanceId,\n mountPoint: mountPoint,\n },\n }\n : {}),\n objectId: nodeData[\"_object_id\"] as string,\n },\n }\n )\n );\n }\n\n /**\n * Move mount-point up or down.\n */\n moveMountPoint(\n { $$uid: parentUid }: BuilderRuntimeNode,\n mountPoint: string,\n direction: \"up\" | \"down\"\n ): void {\n const { relatedEdges, mountPoints } = getRelatedEdgesAndMountPoint(\n this.data.edges,\n parentUid\n );\n const index = mountPoints.indexOf(mountPoint);\n const orderedMountPoints = moveItemInList(mountPoints, index, direction);\n if (!orderedMountPoints) {\n return;\n }\n const orderedEdges = sortBy(\n relatedEdges,\n (edge) => orderedMountPoints.indexOf(edge.mountPoint),\n \"sort\"\n );\n this.reorder(parentUid, orderedEdges);\n }\n\n private reorder(parentUid: number, orderedEdges: BuilderRuntimeEdge[]): void {\n const { nodes } = this.data;\n const childUids = orderedEdges.map((edge) => edge.child);\n this.data = {\n ...this.data,\n edges: reorderBuilderEdges(this.data, { parentUid, nodeUids: childUids }),\n };\n this.triggerDataChange();\n const childIds = childUids\n .map((uid) => nodes.find((node) => node.$$uid === uid))\n .map((node) => node.id);\n this.eventTarget.dispatchEvent(\n new CustomEvent<EventDetailOfNodeReorder>(\n BuilderInternalEventType.NODE_REORDER,\n {\n detail: {\n nodeUids: childUids,\n parentUid,\n nodeIds: childIds,\n },\n }\n )\n );\n }\n\n contextUpdated(detail: EventDetailOfContextUpdated): void {\n const { rootId, nodes, edges, wrapperNode } = this.data;\n this.data = {\n rootId,\n edges,\n nodes: nodes.map((node) =>\n node.$$uid === rootId ? { ...node, context: detail.context } : node\n ),\n wrapperNode,\n };\n this.triggerDataChange();\n }\n\n nodeReorder(detail: EventDetailOfNodeReorder): void {\n const { nodeUids, parentUid } = detail;\n this.data = {\n ...this.data,\n edges: reorderBuilderEdges(this.data, { parentUid, nodeUids }),\n };\n this.triggerDataChange();\n this.eventTarget.dispatchEvent(\n new CustomEvent(BuilderInternalEventType.NODE_REORDER, { detail })\n );\n }\n\n nodeDelete(detail: BuilderRuntimeNode): void {\n this.data = deleteNodeFromTree(detail.$$uid, this.data);\n this.triggerDataChange();\n }\n\n nodeClick(detail: BuilderRuntimeNode): void {\n this.setActiveNodeUid(detail.$$uid);\n this.eventTarget.dispatchEvent(\n new CustomEvent(BuilderInternalEventType.NODE_CLICK, { detail })\n );\n }\n\n contextMenuChange(detail: BuilderContextMenuStatus): void {\n this.contextMenuStatus = detail;\n this.eventTarget.dispatchEvent(\n new CustomEvent(BuilderInternalEventType.CONTEXT_MENU_CHANGE)\n );\n }\n\n onDataChange(fn: EventListener): () => void {\n this.eventTarget.addEventListener(BuilderInternalEventType.DATA_CHANGE, fn);\n return (): void => {\n this.eventTarget.removeEventListener(\n BuilderInternalEventType.DATA_CHANGE,\n fn\n );\n };\n }\n\n onNodeAdd(\n fn: (event: CustomEvent<EventDetailOfNodeAdd>) => void\n ): () => void {\n this.eventTarget.addEventListener(\n BuilderInternalEventType.NODE_ADD,\n fn as EventListener\n );\n return (): void => {\n this.eventTarget.removeEventListener(\n BuilderInternalEventType.NODE_ADD,\n fn as EventListener\n );\n };\n }\n\n onSnippetApply(\n fn: (event: CustomEvent<EventDetailOfSnippetApply>) => void\n ): () => void {\n this.eventTarget.addEventListener(\n BuilderInternalEventType.SNIPPET_APPLY,\n fn as EventListener\n );\n return (): void => {\n this.eventTarget.removeEventListener(\n BuilderInternalEventType.SNIPPET_APPLY,\n fn as EventListener\n );\n };\n }\n\n onNodeReorder(\n fn: (event: CustomEvent<EventDetailOfNodeReorder>) => void\n ): () => void {\n this.eventTarget.addEventListener(\n BuilderInternalEventType.NODE_REORDER,\n fn as EventListener\n );\n return () => {\n this.eventTarget.removeEventListener(\n BuilderInternalEventType.NODE_REORDER,\n fn as EventListener\n );\n };\n }\n\n onNodeMove(\n fn: (event: CustomEvent<EventDetailOfNodeMove>) => void\n ): () => void {\n this.eventTarget.addEventListener(\n BuilderInternalEventType.NODE_MOVE,\n fn as EventListener\n );\n return () => {\n this.eventTarget.removeEventListener(\n BuilderInternalEventType.NODE_MOVE,\n fn as EventListener\n );\n };\n }\n\n onWorkbenchTreeNodeMove(\n fn: (event: CustomEvent<EventDetailOfNodeMove>) => void\n ): () => void {\n this.eventTarget.addEventListener(\n BuilderInternalEventType.WORKBENCH_TREE_NODE_MOVE,\n fn as EventListener\n );\n return () => {\n this.eventTarget.removeEventListener(\n BuilderInternalEventType.WORKBENCH_TREE_NODE_MOVE,\n fn as EventListener\n );\n };\n }\n\n onNodeClick(\n fn: (event: CustomEvent<BuilderRuntimeNode>) => void\n ): () => void {\n this.eventTarget.addEventListener(\n BuilderInternalEventType.NODE_CLICK,\n fn as EventListener\n );\n return () => {\n this.eventTarget.removeEventListener(\n BuilderInternalEventType.NODE_CLICK,\n fn as EventListener\n );\n };\n }\n\n onNodeUpdate(\n fn: (event: CustomEvent<BuilderCanvasData>) => void\n ): () => void {\n this.eventTarget.addEventListener(\n BuilderInternalEventType.NODE_UPDATE,\n fn as EventListener\n );\n return () => {\n this.eventTarget.removeEventListener(\n BuilderInternalEventType.NODE_UPDATE,\n fn as EventListener\n );\n };\n }\n\n onContextMenuChange(\n fn: (event: CustomEvent<BuilderContextMenuStatus>) => void\n ): () => void {\n this.eventTarget.addEventListener(\n BuilderInternalEventType.CONTEXT_MENU_CHANGE,\n fn as EventListener\n );\n return () => {\n this.eventTarget.removeEventListener(\n BuilderInternalEventType.CONTEXT_MENU_CHANGE,\n fn as EventListener\n );\n };\n }\n\n setShowRelatedNodesBasedOnEvents(show: boolean): void {\n this.showRelatedNodesBasedOnEvents = show;\n this.eventTarget.dispatchEvent(\n new CustomEvent(\n BuilderInternalEventType.SHOW_RELATED_NODES_BASED_ON_EVENTS\n )\n );\n }\n\n getShowRelatedNodesBasedOnEvents(): boolean {\n return this.showRelatedNodesBasedOnEvents;\n }\n\n onShowRelatedNodesBasedOnEventsChange(fn: EventListener): () => void {\n this.eventTarget.addEventListener(\n BuilderInternalEventType.SHOW_RELATED_NODES_BASED_ON_EVENTS,\n fn\n );\n return (): void => {\n this.eventTarget.removeEventListener(\n BuilderInternalEventType.SHOW_RELATED_NODES_BASED_ON_EVENTS,\n fn\n );\n };\n }\n\n setHoverNodeUid(uid: number): void {\n if (this.hoverNodeUid !== uid) {\n this.hoverNodeUid = uid;\n this.eventTarget.dispatchEvent(\n new CustomEvent(BuilderInternalEventType.HOVER_NODE_CHANGE)\n );\n }\n }\n\n getHoverNodeUid(): number {\n return this.hoverNodeUid;\n }\n\n onHoverNodeChange(fn: EventListener): () => void {\n this.eventTarget.addEventListener(\n BuilderInternalEventType.HOVER_NODE_CHANGE,\n fn\n );\n return (): void => {\n this.eventTarget.removeEventListener(\n BuilderInternalEventType.HOVER_NODE_CHANGE,\n fn\n );\n };\n }\n\n setActiveNodeUid(uid: number): void {\n if (this.activeNodeUid !== uid) {\n this.activeNodeUid = uid;\n this.eventTarget.dispatchEvent(\n new CustomEvent(BuilderInternalEventType.ACTIVE_NODE_CHANGE)\n );\n }\n }\n\n getActiveNodeUid(): number {\n return this.activeNodeUid;\n }\n\n onActiveNodeChange(fn: EventListener): () => void {\n this.eventTarget.addEventListener(\n BuilderInternalEventType.ACTIVE_NODE_CHANGE,\n fn\n );\n return (): void => {\n this.eventTarget.removeEventListener(\n BuilderInternalEventType.ACTIVE_NODE_CHANGE,\n fn\n );\n };\n }\n\n toggleOutline(nodeInstanceId: string): void {\n if (this.outlineDisabledNodes.has(nodeInstanceId)) {\n this.outlineDisabledNodes.delete(nodeInstanceId);\n } else {\n this.outlineDisabledNodes.add(nodeInstanceId);\n }\n this.localJsonStorage.setItem(\n storageKeyOfOutlineDisabledNodes,\n Array.from(this.outlineDisabledNodes)\n );\n this.eventTarget.dispatchEvent(\n new CustomEvent(BuilderInternalEventType.OUTLINE_DISABLED_NODES_CHANGE)\n );\n }\n\n isOutlineEnabled(nodeInstanceId: string): boolean {\n return !this.outlineDisabledNodes.has(nodeInstanceId);\n }\n\n onOutlineEnabledNodesChange(fn: EventListener): () => void {\n this.eventTarget.addEventListener(\n BuilderInternalEventType.OUTLINE_DISABLED_NODES_CHANGE,\n fn\n );\n return (): void => {\n this.eventTarget.removeEventListener(\n BuilderInternalEventType.OUTLINE_DISABLED_NODES_CHANGE,\n fn\n );\n };\n }\n\n setHighlightNodes(nodeUids: Set<number>): void {\n this.highlightNodes = nodeUids;\n this.eventTarget.dispatchEvent(\n new CustomEvent(BuilderInternalEventType.HIGHLIGHT_NODES_CHANGE)\n );\n }\n\n getHighlightNodes(): Set<number> {\n return this.highlightNodes;\n }\n\n onHighlightNodesChange(fn: EventListener): () => void {\n this.eventTarget.addEventListener(\n BuilderInternalEventType.HIGHLIGHT_NODES_CHANGE,\n fn\n );\n return (): void => {\n this.eventTarget.removeEventListener(\n BuilderInternalEventType.HIGHLIGHT_NODES_CHANGE,\n fn\n );\n };\n }\n\n updateDroppingStatus(\n nodeUid: number,\n mountPoint: string,\n isDraggingOver: boolean\n ): void {\n const nodeStatus = this.droppingStatus.get(nodeUid);\n this.droppingStatus = new Map(\n Array.from(this.droppingStatus.entries()).concat([\n [\n nodeUid,\n new Map(\n (nodeStatus ? Array.from(nodeStatus) : []).concat([\n [mountPoint, isDraggingOver],\n ])\n ),\n ],\n ])\n );\n this.eventTarget.dispatchEvent(\n new CustomEvent(BuilderInternalEventType.DROPPING_STATUS_CHANGE)\n );\n\n // When dragging nodes over `EditorContainer`, the `mouseout` events\n // are not triggered, which causes hover status does not get cleared.\n // So we manually reset hover status once dragging starts.\n if (\n this.hoverNodeUid &&\n Array.from(this.droppingStatus.values())\n .flatMap((nodeStatus) => Array.from(nodeStatus.values()))\n .some(Boolean)\n ) {\n this.setHoverNodeUid(undefined);\n }\n }\n\n getDroppingStatus(): BuilderDroppingStatus {\n return this.droppingStatus;\n }\n\n onDroppingStatusChange(fn: EventListener): () => void {\n this.eventTarget.addEventListener(\n BuilderInternalEventType.DROPPING_STATUS_CHANGE,\n fn\n );\n return (): void => {\n this.eventTarget.removeEventListener(\n BuilderInternalEventType.DROPPING_STATUS_CHANGE,\n fn\n );\n };\n }\n}\n\nfunction getRelatedEdgesAndMountPoint(\n edges: BuilderRuntimeEdge[],\n parentUid: number\n): {\n /** Edges of the same parent */\n relatedEdges: BuilderRuntimeEdge[];\n /** Mount-point of the same parent */\n mountPoints: string[];\n} {\n const relatedEdges = sortBy(\n edges.filter(\n (edge) => edge.parent === parentUid && !edge.$$isTemplateExpanded\n ),\n \"sort\"\n );\n const mountPointSet = new Set<string>();\n for (const edge of relatedEdges) {\n mountPointSet.add(edge.mountPoint);\n }\n const mountPoints = Array.from(mountPointSet);\n return { relatedEdges, mountPoints };\n}\n\nfunction moveItemInList<T>(\n list: T[],\n index: number,\n direction: \"up\" | \"down\"\n): T[] | undefined {\n let upperIndex: number;\n if (direction === \"up\") {\n if (index <= 0) {\n return;\n }\n upperIndex = index - 1;\n } else {\n if (index === -1 || index >= list.length - 1) {\n return;\n }\n upperIndex = index;\n }\n return [\n ...list.slice(0, upperIndex),\n list[upperIndex + 1],\n list[upperIndex],\n ...list.slice(upperIndex + 2),\n ];\n}\n","import { BrickConf, SlotConfOfBricks } from \"@next-core/brick-types\";\nimport { SnippetNodeDetail } from \"../interfaces\";\nimport { getUniqueNodeId } from \"../internal/getUniqueNodeId\";\nimport { reverseNormalize } from \"./reverseNormalize\";\n\nexport function getSnippetNodeDetail({\n parent,\n parentUid,\n mountPoint,\n nodeUid,\n brickConf,\n isPortalCanvas,\n sort,\n}: {\n parent?: string;\n parentUid: number;\n mountPoint: string;\n nodeUid: number;\n brickConf: BrickConf;\n isPortalCanvas?: boolean;\n sort?: number;\n}): SnippetNodeDetail {\n const type = brickConf.template\n ? \"template\"\n : brickConf.bg\n ? \"provider\"\n : \"brick\";\n\n return {\n nodeUid,\n parentUid,\n nodeData: reverseNormalize(brickConf, {\n isPortalCanvas,\n nodeData: {\n type,\n parent,\n mountPoint,\n sort,\n },\n }),\n children: brickConf.slots\n ? Object.entries(brickConf.slots)\n .flatMap(([mountPoint, slotConf]) =>\n (slotConf as SlotConfOfBricks).bricks.map((childBrickConf) => ({\n childBrickConf,\n mountPoint,\n }))\n )\n .map(({ childBrickConf, mountPoint }, index) =>\n getSnippetNodeDetail({\n parentUid: nodeUid,\n mountPoint,\n nodeUid: getUniqueNodeId(),\n brickConf: childBrickConf,\n sort: index,\n })\n )\n : [],\n };\n}\n","import React from \"react\";\nimport { BuilderDataManager } from \"./internal/BuilderDataManager\";\n\nexport interface ContextOfBuilder {\n manager?: BuilderDataManager;\n}\n\nexport const BuilderContext = React.createContext<ContextOfBuilder>({});\n\nexport function createBuilderContext(): ContextOfBuilder {\n return {\n manager: new BuilderDataManager(),\n };\n}\n","import React from \"react\";\nimport { BuilderContext } from \"../BuilderContext\";\nimport { BuilderDataManager } from \"../internal/BuilderDataManager\";\n\nexport function useBuilderDataManager(): BuilderDataManager {\n const { manager } = React.useContext(BuilderContext);\n if (!manager) {\n throw new Error(\"Expected builder data context\");\n }\n return manager;\n}\n","import { useEffect, useState } from \"react\";\nimport { BuilderCanvasData } from \"../interfaces\";\nimport { useBuilderDataManager } from \"./useBuilderDataManager\";\n\nexport function useBuilderData(): BuilderCanvasData {\n const manager = useBuilderDataManager();\n const [data, setData] = useState(manager.getData());\n useEffect(\n () =>\n manager.onDataChange(() => {\n setData(manager.getData());\n }),\n [manager]\n );\n return data;\n}\n","import { useMemo } from \"react\";\nimport { BuilderRuntimeNode } from \"../interfaces\";\nimport { useBuilderData } from \"./useBuilderData\";\n\nexport function useBuilderNode<P = Record<string, unknown>>({\n nodeUid,\n isRoot,\n isWrapper,\n}: {\n nodeUid?: number;\n isRoot?: boolean;\n isWrapper?: boolean;\n}): BuilderRuntimeNode<P> {\n const { rootId, nodes, wrapperNode } = useBuilderData();\n const currentUid = isRoot ? rootId : nodeUid;\n return useMemo(() => {\n if (isWrapper) {\n return wrapperNode as BuilderRuntimeNode<P>;\n }\n return nodes.find(\n (node) => node.$$uid === currentUid\n ) as BuilderRuntimeNode<P>;\n }, [nodes, currentUid, isWrapper, wrapperNode]);\n}\n","import { useEffect, useState } from \"react\";\nimport { BuilderContextMenuStatus } from \"../interfaces\";\nimport { useBuilderDataManager } from \"./useBuilderDataManager\";\n\nexport function useBuilderContextMenuStatus(): BuilderContextMenuStatus {\n const manager = useBuilderDataManager();\n const [status, setStatus] = useState(manager.getContextMenuStatus());\n useEffect(\n () =>\n manager.onContextMenuChange(() => {\n setStatus(manager.getContextMenuStatus());\n }),\n [manager]\n );\n return status;\n}\n","import { useEffect, useState } from \"react\";\nimport { useBuilderDataManager } from \"./useBuilderDataManager\";\n\nexport function useShowRelatedNodesBasedOnEvents(): boolean {\n const manager = useBuilderDataManager();\n const [data, setData] = useState(manager.getShowRelatedNodesBasedOnEvents());\n useEffect(\n () =>\n manager.onShowRelatedNodesBasedOnEventsChange(() => {\n setData(manager.getShowRelatedNodesBasedOnEvents());\n }),\n [manager]\n );\n return data;\n}\n","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","import editorContainerStyles from \"./EditorContainer.module.css\";\n\nexport function isCurrentTargetByClassName(\n targetElement: HTMLElement,\n currentElement: HTMLElement\n): boolean {\n // Traverse DOM from bottom to top.\n let element = targetElement;\n while (element) {\n if (element === currentElement) {\n return true;\n }\n if (\n element.classList.contains(editorContainerStyles.editorContainer) &&\n !element.classList.contains(editorContainerStyles.isTemplateInternalNode)\n ) {\n // It's not the current target if\n // matches another editor container first.\n return false;\n }\n element = element.parentElement;\n }\n return false;\n}\n","import { useEffect, useState } from \"react\";\nimport { useBuilderDataManager } from \"./useBuilderDataManager\";\n\nexport function useHoverNodeUid(): number {\n const manager = useBuilderDataManager();\n const [data, setData] = useState(manager.getHoverNodeUid());\n useEffect(\n () =>\n manager.onHoverNodeChange(() => {\n setData(manager.getHoverNodeUid());\n }),\n [manager]\n );\n return data;\n}\n","import { useEffect, useState } from \"react\";\nimport { useBuilderDataManager } from \"./useBuilderDataManager\";\n\nexport function useHighlightNodes(): Set<number> {\n const manager = useBuilderDataManager();\n const [data, setData] = useState(manager.getHighlightNodes());\n useEffect(\n () =>\n manager.onHighlightNodesChange(() => {\n setData(manager.getHighlightNodes());\n }),\n [manager]\n );\n return data;\n}\n","import { useEffect, useState } from \"react\";\nimport { BuilderDroppingStatus } from \"../interfaces\";\nimport { useBuilderDataManager } from \"./useBuilderDataManager\";\n\nexport function useDroppingStatus(): BuilderDroppingStatus {\n const manager = useBuilderDataManager();\n const [droppingStatus, setDroppingStatus] = useState(\n manager.getDroppingStatus()\n );\n useEffect(\n () =>\n manager.onDroppingStatusChange(() => {\n setDroppingStatus(manager.getDroppingStatus());\n }),\n [manager]\n );\n return droppingStatus;\n}\n","import React, { useCallback, useEffect, useRef, useState } from \"react\";\nimport classNames from \"classnames\";\nimport { EditorBrickType } from \"../interfaces\";\nimport { useBuilderNode } from \"../hooks/useBuilderNode\";\nimport { useBuilderDataManager } from \"../hooks/useBuilderDataManager\";\nimport { useBuilderContextMenuStatus } from \"../hooks/useBuilderContextMenuStatus\";\nimport { useShowRelatedNodesBasedOnEvents } from \"../hooks/useShowRelatedNodesBasedOnEvents\";\nimport { isCurrentTargetByClassName } from \"./isCurrentTargetByClassName\";\nimport { useHoverNodeUid } from \"../hooks/useHoverNodeUid\";\nimport { useHighlightNodes } from \"../hooks/useHighlightNodes\";\nimport { useDroppingStatus } from \"../hooks/useDroppingStatus\";\n\nimport styles from \"./EditorContainer.module.css\";\n\ninterface EditorContainerProps {\n nodeUid: number;\n type?: EditorBrickType;\n isTransparentContainer?: boolean;\n editorContainerStyle?: React.CSSProperties;\n editorBodyStyle?: React.CSSProperties;\n}\n\nexport function EditorContainer({\n nodeUid,\n type,\n isTransparentContainer,\n editorContainerStyle,\n editorBodyStyle,\n children,\n}: React.PropsWithChildren<EditorContainerProps>): React.ReactElement {\n const editorContainerRef = useRef<HTMLDivElement>();\n const highlightNodes = useHighlightNodes();\n const node = useBuilderNode({ nodeUid });\n const [isUpstreamNode, setIsUpstreamNode] = useState(false);\n const [isDownstreamNode, setIsDownstreamNode] = useState(false);\n const contextMenuStatus = useBuilderContextMenuStatus();\n const hoverNodeUid = useHoverNodeUid();\n const showRelatedEvents = useShowRelatedNodesBasedOnEvents();\n const manager = useBuilderDataManager();\n const [hover, setHover] = useState(hoverNodeUid === nodeUid);\n const editorType = type ?? EditorBrickType.DEFAULT;\n const hoverNodeUidRef = useRef(hoverNodeUid);\n const droppingStatus = useDroppingStatus();\n\n useEffect(() => {\n hoverNodeUidRef.current = hoverNodeUid;\n }, [hoverNodeUid]);\n\n const handleMouseOver = useCallback(\n (event: MouseEvent) => {\n event.stopPropagation();\n setHover(true);\n if (hoverNodeUidRef.current !== nodeUid) {\n manager.setHoverNodeUid(nodeUid);\n }\n },\n [nodeUid, manager]\n );\n\n const handleMouseOut = useCallback(\n (event: MouseEvent) => {\n event.stopPropagation();\n setHover(false);\n if (hoverNodeUidRef.current === nodeUid) {\n manager.setHoverNodeUid(undefined);\n }\n },\n [nodeUid, manager]\n );\n\n useEffect(() => {\n if (node.$$isTemplateInternalNode) {\n return;\n }\n // Manually bind listeners since events which cross custom-elements\n // seem not working in React v16.\n const editorContainer = editorContainerRef.current;\n editorContainer.addEventListener(\"mouseover\", handleMouseOver);\n editorContainer.addEventListener(\"mouseout\", handleMouseOut);\n return () => {\n editorContainer.removeEventListener(\"mouseover\", handleMouseOver);\n editorContainer.removeEventListener(\"mouseout\", handleMouseOut);\n };\n }, [handleMouseOver, handleMouseOut, node]);\n\n useEffect(() => {\n if (node.$$isTemplateInternalNode) {\n return;\n }\n setHover(hoverNodeUid === nodeUid);\n if (showRelatedEvents) {\n const relatedNodes = manager.getRelatedNodesBasedOnEventsMap();\n const isUpstreamNode = relatedNodes\n .get(hoverNodeUid)\n ?.upstreamNodes.has(nodeUid);\n setIsUpstreamNode(isUpstreamNode);\n const isDownstreamNode = relatedNodes\n .get(hoverNodeUid)\n ?.downstreamNodes.has(nodeUid);\n setIsDownstreamNode(isDownstreamNode);\n }\n }, [hoverNodeUid, node, nodeUid, showRelatedEvents, manager]);\n\n const isCurrentTarget = useCallback(\n (event: React.MouseEvent) =>\n !node.$$isTemplateInternalNode &&\n isCurrentTargetByClassName(\n event.target as HTMLElement,\n editorContainerRef.current\n ),\n [node]\n );\n\n const handleClick = useCallback(\n (event: React.MouseEvent) => {\n // `event.stopPropagation()` not working across bricks.\n if (isCurrentTarget(event)) {\n manager.nodeClick(node);\n }\n },\n [isCurrentTarget, manager, node]\n );\n\n const handleContextMenu = useCallback(\n (event: React.MouseEvent) => {\n // `event.stopPropagation()` not working across bricks.\n if (isCurrentTarget(event)) {\n event.preventDefault();\n manager.contextMenuChange({\n active: true,\n node,\n x: event.clientX,\n y: event.clientY,\n });\n }\n },\n [isCurrentTarget, manager, node]\n );\n\n return (\n <div\n className={classNames(styles.editorContainer, styles[editorType], {\n [styles.transparentContainer]: isTransparentContainer,\n [styles.dropping]: Array.from(\n droppingStatus.get(nodeUid)?.values() ?? []\n ).some(Boolean),\n [styles.hover]: hover,\n [styles.active]:\n contextMenuStatus.active && contextMenuStatus.node.$$uid === nodeUid,\n [styles.isDownstreamNode]: !hover && isDownstreamNode,\n [styles.isUpstreamNode]: !hover && isUpstreamNode,\n [styles.highlight]: highlightNodes.has(nodeUid),\n [styles.isTemplateInternalNode]: node.$$isTemplateInternalNode,\n })}\n style={editorContainerStyle}\n ref={editorContainerRef}\n onClick={handleClick}\n onContextMenu={handleContextMenu}\n >\n <div className={styles.nodeAlias}>\n {!hover &&\n (isDownstreamNode ? (\n <span className={styles.arrow}>↓</span>\n ) : isUpstreamNode ? (\n <span className={styles.arrow}>↑</span>\n ) : null)}\n {node.alias || node.brick}\n </div>\n <div className={styles.editorBody} style={editorBodyStyle}>\n {children}\n </div>\n </div>\n );\n}\n","import { developHelper } from \"@next-core/brick-kit\";\nimport { isBrickNode, isRouteNode } from \"../assertions\";\nimport { BuilderRuntimeNode } from \"../interfaces\";\n\nconst ANY_BRICK_EDITOR = \"basic-bricks.any-brick--editor\";\nconst ANY_ROUTE_EDITOR = \"basic-bricks.any-route--editor\";\n\n/**\n * Get editor brick name by node.\n *\n * @param node - Builder node.\n * @param editor - Using shared editor.\n *\n * @returns\n *\n * Returns editor brick name if the node is a brick, will fallback to `basic-bricks.any-brick--editor`\n * if the relevant editor brick is not found.\n *\n * Or returns `basic-bricks.any-route--editor` if the node is a route.\n *\n * And returns undefined if load failed.\n */\nexport async function getEditorBrick(\n node: BuilderRuntimeNode,\n editor?: string\n): Promise<string> {\n const tryEditorBricks: string[] = [];\n if (isRouteNode(node)) {\n tryEditorBricks.push(ANY_ROUTE_EDITOR);\n } else if (isBrickNode(node)) {\n if (node.brick.includes(\"-\")) {\n const isWidget = node.brick.split(\".\")[1]?.startsWith(\"tpl-\");\n tryEditorBricks.push(`${node.brick}--editor`);\n isWidget && tryEditorBricks.push(`editors-of-${node.brick}--editor`);\n }\n\n if (editor) {\n tryEditorBricks.push(editor);\n }\n\n tryEditorBricks.push(ANY_BRICK_EDITOR);\n } else {\n // Currently there should be no custom-template nodes to be rendered as editor.\n throw new Error(`Unsupported node type: ${node.type}`);\n }\n\n for (const editorBrick of tryEditorBricks) {\n try {\n await developHelper.loadEditorBricks([editorBrick]);\n } catch (error) {\n throw new Error(`Load editor brick \"${editorBrick}\" failed`);\n }\n if (customElements.get(editorBrick)) {\n return editorBrick;\n }\n }\n\n throw new Error(`Editor brick \"${tryEditorBricks.join(\", \")}\" not found`);\n}\n","import React, { useMemo } from \"react\";\nimport classNames from \"classnames\";\nimport { useDrag } from \"react-dnd\";\nimport { BrickAsComponent, getRuntime } from \"@next-core/brick-kit\";\nimport { UseBrickConf } from \"@next-core/brick-types\";\nimport { getEditorBrick } from \"./getEditorBrick\";\nimport {\n BuilderDataTransferType,\n BuilderRuntimeNode,\n EditorSelfLayout,\n EditorSlotContentLayout,\n} from \"../interfaces\";\nimport { EditorBrickElementConstructor } from \"../EditorElementFactory\";\nimport { useBuilderData } from \"../hooks/useBuilderData\";\nimport { useStoryList } from \"../hooks/useStoryList\";\nimport { getBrickDoc } from \"./getBrickDoc\";\nimport { useSharedEditorMap } from \"../hooks/useSharedEditorMap\";\nimport { isBrickNode } from \"../assertions\";\n\nimport styles from \"./EditorBrickAsComponent.module.css\";\n\ninterface EditorBrickAsComponentProps {\n node: BuilderRuntimeNode;\n slotContentLayout?: EditorSlotContentLayout;\n}\n\nexport function EditorBrickAsComponent({\n node,\n slotContentLayout,\n}: EditorBrickAsComponentProps): React.ReactElement {\n const [initialized, setInitialized] = React.useState(false);\n const [editorBrick, setEditorBrick] = React.useState<string>();\n const [loadEditorError, setLoadEditorError] = React.useState<string>();\n const { edges } = useBuilderData();\n const storyList = useStoryList();\n const hasChildren = React.useMemo(\n () => edges.some((edge) => edge.parent === node.$$uid),\n [node, edges]\n );\n\n const installedBricksEnabled = useMemo(\n () => getRuntime().getFeatureFlags()[\"next-builder-installed-bricks\"],\n []\n );\n\n const brickDoc = useMemo(\n () => (installedBricksEnabled ? null : getBrickDoc(node, storyList)),\n [installedBricksEnabled, node, storyList]\n );\n\n const editorMap = useSharedEditorMap();\n const editorConf = useMemo(\n () =>\n installedBricksEnabled && isBrickNode(node)\n ? editorMap.get(node.brick)\n : null,\n [editorMap, installedBricksEnabled, node]\n );\n\n React.useEffect(() => {\n (async () => {\n setInitialized(false);\n let editorName: string;\n let editorError: string;\n try {\n editorName = await getEditorBrick(\n node,\n installedBricksEnabled ? editorConf?.editor : brickDoc?.editor\n );\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(error);\n editorError = (error as Error).message;\n }\n setEditorBrick(editorName);\n setLoadEditorError(editorError);\n setInitialized(true);\n })();\n }, [brickDoc, editorConf, installedBricksEnabled, node]);\n\n const brickConf = React.useMemo<UseBrickConf>(\n () => ({\n brick: editorBrick,\n properties: {\n nodeUid: node.$$uid,\n editorProps: installedBricksEnabled\n ? editorConf?.editorProps\n : brickDoc?.editorProps,\n },\n }),\n [brickDoc, editorBrick, editorConf, installedBricksEnabled, node.$$uid]\n );\n\n const selfLayout = React.useMemo(() => {\n let layout: EditorSelfLayout;\n if (initialized && editorBrick) {\n const editorConstructor = customElements.get(\n editorBrick\n ) as EditorBrickElementConstructor;\n layout = editorConstructor.selfLayout;\n }\n // For bricks with no editors, display as a container if it has children.\n return (\n layout ??\n (hasChildren ? EditorSelfLayout.CONTAINER : EditorSelfLayout.INLINE)\n );\n }, [initialized, editorBrick, hasChildren]);\n\n const [{ isDragging }, dragRef] = useDrag({\n item: {\n type: BuilderDataTransferType.NODE_TO_MOVE,\n nodeUid: node.$$uid,\n nodeInstanceId: node.instanceId,\n nodeId: node.id,\n },\n options: {\n dropEffect: \"move\",\n },\n collect: (monitor) => ({\n isDragging: monitor.isDragging(),\n }),\n });\n\n return initialized ? (\n editorBrick ? (\n <div\n className={classNames({\n [styles.slotContentLayoutBlock]:\n slotContentLayout === EditorSlotContentLayout.BLOCK,\n [styles.slotContentLayoutInline]:\n slotContentLayout === EditorSlotContentLayout.INLINE,\n // [styles.slotContentLayoutGrid]: slotContentLayout === EditorSlotContentLayout.GRID,\n [styles.selfLayoutInline]: selfLayout === EditorSelfLayout.INLINE,\n [styles.selfLayoutBlock]: selfLayout === EditorSelfLayout.BLOCK,\n [styles.selfLayoutContainer]:\n selfLayout === EditorSelfLayout.CONTAINER,\n [styles.dragging]: isDragging,\n __isTemplateInternalNode: node.$$isTemplateInternalNode,\n })}\n >\n <div\n ref={node.$$isTemplateInternalNode ? undefined : dragRef}\n draggable={!node.$$isTemplateInternalNode}\n className={classNames({\n [styles.baseView]:\n node.brick === \"basic-bricks.micro-view\" ||\n node.brick === \"basic-bricks.micro-app\" ||\n node.brick === \"basic-bricks.easy-view\" ||\n node.brick === \"frame-bricks.side-bar\",\n })}\n >\n <BrickAsComponent useBrick={brickConf} />\n </div>\n </div>\n ) : (\n <span>{loadEditorError}</span>\n )\n ) : (\n <span>Loading...</span>\n );\n}\n","import { useMemo } from \"react\";\nimport { useBuilderDataManager } from \"./useBuilderDataManager\";\nimport { Story } from \"@next-core/brick-types\";\n\nexport function useStoryList(): Story[] {\n const manager = useBuilderDataManager();\n const data = useMemo(() => manager.getStoryList(), [manager]);\n\n return data;\n}\n","import { BuilderRuntimeNode } from \"../interfaces\";\nimport { Story, StoryDoc } from \"@next-core/brick-types\";\n\nexport function getBrickDoc(\n node: BuilderRuntimeNode,\n storyList: Story[]\n): StoryDoc {\n const find = storyList?.find((item) => item.storyId === node.brick);\n\n return find?.doc as StoryDoc;\n}\n","import { useCallback, useEffect, useState } from \"react\";\nimport { useBuilderDataManager } from \"./useBuilderDataManager\";\nimport { SharedEditorConf } from \"../interfaces\";\n\nexport function useSharedEditorMap(): Map<string, SharedEditorConf> {\n const manager = useBuilderDataManager();\n\n const getSharedEditorMap = useCallback(\n (): Map<string, SharedEditorConf> =>\n new Map(manager.getSharedEditorList().map((conf) => [conf.id, conf])),\n [manager]\n );\n\n const [data, setData] = useState(getSharedEditorMap());\n\n useEffect(\n () =>\n manager.onSharedEditorListChange(() => {\n setData(getSharedEditorMap());\n }),\n [getSharedEditorMap, manager]\n );\n\n return data;\n}\n","import { useMemo } from \"react\";\nimport { sortBy } from \"lodash\";\nimport {\n BuilderGroupedChildNode,\n BuilderRuntimeEdge,\n BuilderRuntimeNode,\n} from \"../interfaces\";\nimport { useBuilderData } from \"./useBuilderData\";\n\nexport function useBuilderGroupedChildNodes({\n nodeUid,\n isRoot,\n doNotExpandTemplates,\n isWrapper,\n}: {\n nodeUid?: number;\n isRoot?: boolean;\n doNotExpandTemplates?: boolean;\n isWrapper?: boolean;\n}): BuilderGroupedChildNode[] {\n const { rootId, nodes, edges, wrapperNode } = useBuilderData();\n return useMemo(\n () =>\n getBuilderGroupedChildNodes({\n nodes,\n edges,\n nodeUid: isRoot ? (isWrapper ? wrapperNode.$$uid : rootId) : nodeUid,\n doNotExpandTemplates,\n isWrapper: isWrapper,\n }),\n [\n doNotExpandTemplates,\n edges,\n isRoot,\n nodeUid,\n nodes,\n rootId,\n isWrapper,\n wrapperNode,\n ]\n );\n}\n\nexport function getBuilderGroupedChildNodes({\n nodeUid,\n nodes,\n edges,\n doNotExpandTemplates,\n isWrapper,\n}: {\n nodeUid: number;\n nodes: BuilderRuntimeNode[];\n edges: BuilderRuntimeEdge[];\n doNotExpandTemplates?: boolean;\n isWrapper?: boolean;\n}): BuilderGroupedChildNode[] {\n const groups = new Map<string, BuilderRuntimeNode[]>();\n const relatedEdges = sortBy(\n edges.filter(\n (edge) =>\n edge.parent === nodeUid &&\n (doNotExpandTemplates\n ? !edge.$$isTemplateInternal\n : !edge.$$isTemplateDelegated)\n ),\n [(edge) => edge.sort]\n );\n for (const edge of relatedEdges) {\n const childNode = nodes.find((node) => node.$$uid === edge.child);\n if (groups.has(edge.mountPoint)) {\n groups.get(edge.mountPoint).push(childNode);\n } else {\n groups.set(edge.mountPoint, [childNode]);\n }\n }\n return Array.from(groups.entries()).map(([mountPoint, childNodes]) => ({\n mountPoint: isWrapper ? \"bricks\" : mountPoint,\n childNodes,\n }));\n}\n","import { useCallback } from \"react\";\nimport { useBuilderData } from \"./useBuilderData\";\n\nexport type CanDrop = (draggingUid: number, nodeUid: number) => boolean;\n\n/**\n * Returns whether the current dragging node can be dropped\n * in specific node.\n *\n * This is useful for checking available drop zone and preventing\n * dragging a node into its internal mount points.\n */\nexport function useCanDrop(): CanDrop {\n const { edges } = useBuilderData();\n return useCallback(\n (draggingUid: number, nodeUid: number) => {\n const traverse = (parentId: number): boolean => {\n if (parentId === nodeUid) {\n return false;\n }\n return !edges.some((edge) => {\n if (edge.parent === parentId) {\n return !traverse(edge.child);\n }\n return false;\n });\n };\n return traverse(draggingUid);\n },\n [edges]\n );\n}\n","/* istanbul-ignore-file */\n// Todo(steve): Ignore tests temporarily for potential breaking change in the future.\nexport interface DropPosition {\n rect: DropPositionRect;\n cursor: DropPositionCursor;\n}\n\nexport interface DropPositionRect {\n top: number;\n bottom: number;\n left: number;\n right: number;\n}\n\nexport interface DropPositionCursor {\n index: number;\n y: number;\n isVertical?: boolean;\n x?: number;\n height?: number;\n}\n\nexport interface DropGridRow {\n cells: DropGridCell[];\n top?: number;\n bottom?: number;\n // isInline?: boolean;\n}\n\nexport interface DropGridCell extends DropPositionRect {\n index: number;\n}\n\nconst defaultGapHalf = 6;\n\nexport function getDropPositions(\n dropZone: HTMLElement,\n dropZoneGrid: HTMLElement\n): DropPosition[] {\n const zoneRect = dropZone.getBoundingClientRect();\n // const gridRect = dropZoneGrid.getBoundingClientRect();\n const positions: DropPosition[] = [];\n const gridItemList = Array.from(dropZoneGrid.children).filter(\n (item) => !item.classList.contains(\"__isTemplateInternalNode\")\n );\n if (gridItemList.length > 0) {\n let currentRow: DropGridRow = {\n cells: [],\n };\n const rows: DropGridRow[] = [currentRow];\n gridItemList.forEach((gridItem, index) => {\n const rect = gridItem.getBoundingClientRect();\n const cell: DropGridCell = {\n index,\n top: rect.top,\n bottom: rect.bottom,\n left: rect.left,\n right: rect.right,\n };\n const prevCell =\n currentRow.cells.length > 0 &&\n currentRow.cells[currentRow.cells.length - 1];\n if (\n !prevCell ||\n (compareApproximately(rect.left, prevCell.right) > 0 &&\n compareApproximately(rect.top, prevCell.bottom) < 0)\n ) {\n currentRow.cells.push(cell);\n currentRow.top = Math.min(currentRow.top ?? Infinity, rect.top);\n currentRow.bottom = Math.max(\n currentRow.bottom ?? -Infinity,\n rect.bottom\n );\n } else {\n currentRow = {\n cells: [cell],\n top: rect.top,\n bottom: rect.bottom,\n };\n rows.push(currentRow);\n }\n });\n // console.log(rows);\n\n let lastRectBottom = zoneRect.top;\n let nextCursorTop = zoneRect.top;\n rows.forEach((row, rowIndex) => {\n if (row.cells.length === 1) {\n const cell = row.cells[0];\n const rectBottom = (cell.top + cell.bottom) / 2;\n positions.push({\n rect: {\n top: lastRectBottom,\n bottom: rectBottom,\n left: zoneRect.left,\n right: zoneRect.right,\n },\n cursor: {\n index: cell.index,\n y: (nextCursorTop + cell.top) / 2 - zoneRect.top,\n },\n });\n lastRectBottom = rectBottom;\n nextCursorTop = cell.bottom;\n\n // Append one more insert position after reached the end.\n if (rowIndex === rows.length - 1) {\n positions.push({\n rect: {\n top: lastRectBottom,\n bottom: zoneRect.bottom,\n left: zoneRect.left,\n right: zoneRect.right,\n },\n cursor: {\n index: cell.index + 1,\n y:\n Math.min(\n cell.bottom + defaultGapHalf,\n (cell.bottom + zoneRect.bottom) / 2\n ) - zoneRect.top,\n },\n });\n } else if (rows[rowIndex + 1].cells.length > 1) {\n const nextRow = rows[rowIndex + 1];\n const rectBottom = (cell.bottom + nextRow.top) / 2;\n positions.push({\n rect: {\n top: lastRectBottom,\n bottom: rectBottom,\n left: zoneRect.left,\n right: zoneRect.right,\n },\n cursor: {\n index: cell.index + 1,\n y: rectBottom - zoneRect.top,\n },\n });\n lastRectBottom = rectBottom;\n }\n } else {\n let lastRectRight = zoneRect.left;\n let nextCursorLeft = zoneRect.left;\n const rectBottom =\n rowIndex < rows.length - 1\n ? (rows[rowIndex + 1].top + row.bottom) / 2\n : zoneRect.bottom;\n const cursorDefault: Pick<\n DropPositionCursor,\n \"isVertical\" | \"y\" | \"height\"\n > = {\n isVertical: true,\n y: row.top - zoneRect.top,\n height: row.bottom - row.top,\n };\n row.cells.forEach((cell, cellIndex) => {\n const rectRight = (cell.left + cell.right) / 2;\n positions.push({\n rect: {\n top: lastRectBottom,\n bottom: rectBottom,\n left: lastRectRight,\n right: rectRight,\n },\n cursor: {\n ...cursorDefault,\n index: cell.index,\n x: (nextCursorLeft + cell.left) / 2 - zoneRect.left,\n },\n });\n lastRectRight = rectRight;\n nextCursorLeft = cell.right;\n\n // Append one more insert position after reached the row end.\n if (cellIndex === row.cells.length - 1) {\n if (rowIndex === rows.length - 1) {\n positions.push({\n rect: {\n top: lastRectBottom,\n bottom: zoneRect.bottom,\n left: lastRectRight,\n right: zoneRect.right,\n },\n cursor: {\n ...cursorDefault,\n index: cell.index + 1,\n x:\n Math.min(nextCursorLeft + defaultGapHalf, zoneRect.right) -\n zoneRect.left,\n },\n });\n } else {\n positions.push({\n rect: {\n top: lastRectBottom,\n bottom: rectBottom,\n left: lastRectRight,\n right: zoneRect.right,\n },\n cursor: {\n ...cursorDefault,\n index: cell.index + 1,\n x:\n Math.min(nextCursorLeft + defaultGapHalf, zoneRect.right) -\n zoneRect.left,\n },\n });\n }\n }\n });\n lastRectBottom = rectBottom;\n nextCursorTop = row.bottom;\n }\n });\n }\n return positions;\n}\n\nexport function getDropPosition(\n x: number,\n y: number,\n dropZone: HTMLElement,\n dropZoneGrid: HTMLElement\n): DropPositionCursor {\n const positions = getDropPositions(dropZone, dropZoneGrid);\n for (const { rect, cursor } of positions) {\n if (\n x >= rect.left &&\n x <= rect.right &&\n y >= rect.top &&\n y <= rect.bottom\n ) {\n // console.log((event.target as HTMLElement).tagName, cursor.isVertical, cursor.index);\n return cursor;\n }\n }\n\n return {\n index: 0,\n y: 5,\n };\n}\n\nfunction compareApproximately(a: number, b: number): number {\n const diff = a - b;\n return Math.abs(diff) < 1 ? 0 : diff;\n}\n","import { BuilderGroupedChildNode } from \"../interfaces\";\n\nexport interface SortedIdsAfterDropped {\n nodeUids: number[];\n nodeIds: string[];\n}\n\nexport interface DroppingInfo {\n draggingNodeUid: number | number[];\n draggingNodeId: string | null;\n draggingIndex?: number;\n droppingMountPoint: string;\n droppingSiblingGroups: BuilderGroupedChildNode[];\n droppingIndex: number;\n}\n\n/**\n * Get sorted uids and ids of all children of the dropping parent node.\n *\n * @remark\n *\n * When dropping a node from library (add a node) or from a position\n * to a new position (move a node), we only reorder the children of\n * the dropping mount point. But the reorder API requires to reorder\n * all the children of the dropping parent, which maybe across multiple\n * mount points. So we also keep the original order among sibling mount\n * points at the same time.\n *\n * `draggingNodeId` will be `null` when adding a node.\n *\n * Params `droppingInfo.droppingIndex` and `droppingInfo.draggingIndex`\n * is relative to the belonged mount point.\n *\n * And `droppingInfo.draggingIndex` is required when moving a node\n * inside a mount point.\n *\n * ```\n * ▸ micro-view\n * ├ toolbar\n * │ │ ←─ [0]\n * │ ├ button-a <0>\n * │ │ ←─ [1]\n * │ └ input-b <1>\n * │ ←─ [2]\n * └ content\n * │ ←─ [0]\n * ├ table-a <0>\n * │ ←─ [1]\n * ├ grid-b <1>\n * │ ←─ [2]\n * └ tabs-c <2>\n * ←─ [3]\n * <m>: draggingIndex\n * [n]: droppingIndex\n * ```\n *\n * @param droppingInfo - Dropping info.\n *\n * @returns Both sorted uids and ids.\n */\nexport function getSortedIdsAfterDropped(\n droppingInfo: DroppingInfo\n): SortedIdsAfterDropped {\n const {\n draggingNodeUid,\n draggingNodeId,\n draggingIndex,\n droppingMountPoint,\n droppingSiblingGroups,\n droppingIndex,\n } = droppingInfo;\n // When applying a snippet, the dragging nodes will be an array.\n const draggingNodeUids = Array.isArray(draggingNodeUid)\n ? draggingNodeUid\n : [draggingNodeUid];\n const fullChildNodes = droppingSiblingGroups.flatMap(\n (group) => group.childNodes\n );\n const nodeUids = droppingSiblingGroups.flatMap((group) => {\n const uids = group.childNodes\n .map((item) => item.$$uid)\n .filter((uid) => !draggingNodeUids.includes(uid));\n if (group.mountPoint === droppingMountPoint) {\n uids.splice(\n (draggingIndex ?? -1) >= 0 && droppingIndex > draggingIndex\n ? droppingIndex - 1\n : droppingIndex,\n 0,\n ...draggingNodeUids\n );\n }\n return uids;\n });\n const nodeIds = nodeUids.map((uid) =>\n draggingNodeUids.includes(uid)\n ? draggingNodeId\n : fullChildNodes.find((item) => item.$$uid === uid).id\n );\n return { nodeUids, nodeIds };\n}\n","import { useMemo } from \"react\";\nimport { BuilderRuntimeNode } from \"../interfaces\";\n\nexport function useCanvasList(\n rootChildNodes: BuilderRuntimeNode[]\n): BuilderRuntimeNode[][] {\n return useMemo(() => {\n const mainCanvas: BuilderRuntimeNode[] = [];\n const portalCanvasList: BuilderRuntimeNode[][] = [];\n for (const child of rootChildNodes) {\n if (child.portal) {\n portalCanvasList.push([child]);\n } else {\n mainCanvas.push(child);\n }\n }\n return [mainCanvas, ...portalCanvasList, []];\n }, [rootChildNodes]);\n}\n","/* istanbul-ignore-file */\n// Todo(steve): Ignore tests temporarily for potential breaking change in the future.\nimport React from \"react\";\nimport { clamp, isEmpty } from \"lodash\";\nimport classNames from \"classnames\";\nimport { DragObjectWithType, useDrop } from \"react-dnd\";\nimport { EditorBrickAsComponent } from \"../EditorBrickAsComponent/EditorBrickAsComponent\";\nimport {\n BuilderCanvasSettings,\n BuilderDataTransferPayloadOfNodeToAdd,\n BuilderDataTransferPayloadOfNodeToMove,\n BuilderDataTransferType,\n BuilderGroupedChildNode,\n BuilderRuntimeNode,\n EditorSlotContentLayout,\n TemplateDelegatedContext,\n} from \"../interfaces\";\nimport { useBuilderNode } from \"../hooks/useBuilderNode\";\nimport {\n getBuilderGroupedChildNodes,\n useBuilderGroupedChildNodes,\n} from \"../hooks/useBuilderGroupedChildNodes\";\nimport { useCanDrop } from \"../hooks/useCanDrop\";\nimport { DropPositionCursor, getDropPosition } from \"./getDropPosition\";\nimport { processDrop } from \"./processDrop\";\nimport { useBuilderDataManager } from \"../hooks/useBuilderDataManager\";\nimport { useCanvasList } from \"../hooks/useCanvasList\";\nimport { useBuilderData } from \"../hooks/useBuilderData\";\nimport { useBuilderContextMenuStatus } from \"../hooks/useBuilderContextMenuStatus\";\nimport { isCurrentTargetByClassName } from \"../EditorContainer/isCurrentTargetByClassName\";\n\nimport styles from \"./DropZone.module.css\";\n\nexport interface DropZoneProps {\n nodeUid?: number;\n isRoot?: boolean;\n separateCanvas?: boolean;\n isPortalCanvas?: boolean;\n independentPortalCanvas?: boolean;\n canvasIndex?: number;\n mountPoint: string;\n fullscreen?: boolean;\n delegatedContext?: TemplateDelegatedContext;\n dropZoneStyle?: React.CSSProperties;\n dropZoneBodyStyle?: React.CSSProperties;\n slotContentLayout?: EditorSlotContentLayout;\n showOutlineIfEmpty?: boolean;\n hiddenWrapper?: boolean;\n emptyClassName?: string;\n}\n\nexport interface DroppingContext {\n droppingParentUid: number;\n droppingParentInstanceId: string;\n droppingMountPoint: string;\n droppingChildNodes: BuilderRuntimeNode[];\n droppingSiblingGroups: BuilderGroupedChildNode[];\n}\n\nexport function DropZone({\n nodeUid,\n isRoot,\n separateCanvas,\n isPortalCanvas,\n independentPortalCanvas,\n canvasIndex,\n mountPoint,\n fullscreen,\n delegatedContext,\n dropZoneStyle,\n dropZoneBodyStyle,\n slotContentLayout,\n showOutlineIfEmpty,\n hiddenWrapper = true,\n emptyClassName,\n}: DropZoneProps): React.ReactElement {\n const dropZoneBody = React.useRef<HTMLDivElement>();\n const [dropPositionCursor, setDropPositionCursor] =\n React.useState<DropPositionCursor>(null);\n const dropPositionCursorRef = React.useRef<DropPositionCursor>();\n const contextMenuStatus = useBuilderContextMenuStatus();\n const manager = useBuilderDataManager();\n const { nodes, edges, wrapperNode } = useBuilderData();\n const isWrapper = hiddenWrapper && isRoot && !isEmpty(wrapperNode);\n const node = useBuilderNode({ nodeUid, isRoot, isWrapper });\n const groupedChildNodes = useBuilderGroupedChildNodes({\n nodeUid,\n isRoot,\n doNotExpandTemplates: isWrapper,\n isWrapper,\n });\n\n const isGeneralizedPortalCanvas = independentPortalCanvas\n ? canvasIndex > 0\n : isPortalCanvas;\n const hasTabs = separateCanvas || independentPortalCanvas;\n\n const canDrop = useCanDrop();\n const refinedSlotContentLayout =\n slotContentLayout ?? EditorSlotContentLayout.BLOCK;\n\n const selfChildNodes = React.useMemo(\n () =>\n groupedChildNodes.find((group) => group.mountPoint === mountPoint)\n ?.childNodes ?? [],\n [groupedChildNodes, mountPoint]\n );\n\n const canvasList = useCanvasList(selfChildNodes);\n\n const selfChildNodesInCurrentCanvas = React.useMemo(\n () =>\n separateCanvas\n ? selfChildNodes.filter((child) =>\n Boolean(Number(Boolean(isPortalCanvas)) ^ Number(!child.portal))\n )\n : independentPortalCanvas\n ? canvasList[clamp(canvasIndex ?? 0, 0, canvasList.length - 1)]\n : selfChildNodes,\n [\n canvasIndex,\n independentPortalCanvas,\n isPortalCanvas,\n selfChildNodes,\n canvasList,\n separateCanvas,\n ]\n );\n\n const canvasSettings = React.useMemo(\n () =>\n selfChildNodesInCurrentCanvas[0]?.$$parsedProperties\n ._canvas_ as BuilderCanvasSettings,\n [selfChildNodesInCurrentCanvas]\n );\n\n const getDroppingIndexInFullCanvas = React.useCallback(\n (droppingIndexInCurrentCanvas: number) => {\n if (!hasTabs) {\n return droppingIndexInCurrentCanvas;\n }\n if (selfChildNodesInCurrentCanvas.length > 0) {\n const cursorNode =\n selfChildNodesInCurrentCanvas[\n droppingIndexInCurrentCanvas === 0\n ? 0\n : droppingIndexInCurrentCanvas - 1\n ];\n return (\n selfChildNodes.findIndex((child) => child === cursorNode) +\n (droppingIndexInCurrentCanvas === 0 ? 0 : 1)\n );\n }\n return isGeneralizedPortalCanvas ? selfChildNodes.length : 0;\n },\n [\n hasTabs,\n selfChildNodesInCurrentCanvas,\n isGeneralizedPortalCanvas,\n selfChildNodes,\n ]\n );\n\n const getDroppingContext = React.useCallback(() => {\n if (delegatedContext) {\n const siblingGroups = getBuilderGroupedChildNodes({\n nodeUid: delegatedContext.templateUid,\n nodes,\n edges,\n doNotExpandTemplates: true,\n });\n return {\n droppingParentUid: delegatedContext.templateUid,\n droppingParentInstanceId: nodes.find(\n (item) => item.$$uid === delegatedContext.templateUid\n ).instanceId,\n droppingMountPoint: delegatedContext.templateMountPoint,\n droppingChildNodes:\n siblingGroups.find(\n (group) => group.mountPoint === delegatedContext.templateMountPoint\n )?.childNodes ?? [],\n droppingSiblingGroups: siblingGroups,\n };\n }\n return {\n droppingParentUid: node.$$uid,\n droppingParentInstanceId: isWrapper\n ? wrapperNode.instanceId\n : node.instanceId,\n droppingMountPoint: mountPoint,\n droppingChildNodes: selfChildNodes,\n droppingSiblingGroups: groupedChildNodes,\n };\n }, [\n delegatedContext,\n edges,\n groupedChildNodes,\n mountPoint,\n node,\n nodes,\n selfChildNodes,\n isWrapper,\n wrapperNode,\n ]);\n\n const [{ isDraggingOverCurrent }, dropRef] = useDrop({\n accept: [\n BuilderDataTransferType.NODE_TO_ADD,\n BuilderDataTransferType.NODE_TO_MOVE,\n BuilderDataTransferType.SNIPPET_TO_APPLY,\n ],\n canDrop: (\n item: DragObjectWithType &\n (\n | BuilderDataTransferPayloadOfNodeToAdd\n | BuilderDataTransferPayloadOfNodeToMove\n )\n ) =>\n independentPortalCanvas && isGeneralizedPortalCanvas\n ? selfChildNodesInCurrentCanvas.length === 0\n : item.type === BuilderDataTransferType.NODE_TO_ADD ||\n item.type === BuilderDataTransferType.SNIPPET_TO_APPLY ||\n isRoot ||\n canDrop(\n (item as BuilderDataTransferPayloadOfNodeToMove).nodeUid,\n nodeUid\n ),\n collect: (monitor) => ({\n isDraggingOverCurrent:\n monitor.isOver({ shallow: true }) && monitor.canDrop(),\n }),\n hover: (item, monitor) => {\n if (monitor.isOver({ shallow: true }) && monitor.canDrop()) {\n const { x, y } = monitor.getClientOffset();\n dropPositionCursorRef.current = getDropPosition(\n x,\n y,\n dropZoneBody.current.parentElement,\n dropZoneBody.current\n );\n setDropPositionCursor(dropPositionCursorRef.current);\n }\n },\n drop: (item, monitor) => {\n if (!monitor.didDrop()) {\n const { type, ...data } = item;\n processDrop({\n type: type as BuilderDataTransferType,\n data,\n droppingIndex: getDroppingIndexInFullCanvas(\n dropPositionCursorRef.current.index\n ),\n isPortalCanvas: isGeneralizedPortalCanvas,\n manager,\n ...getDroppingContext(),\n });\n }\n },\n });\n\n React.useEffect(() => {\n manager.updateDroppingStatus(\n delegatedContext ? delegatedContext.templateUid : node.$$uid,\n delegatedContext ? delegatedContext.templateMountPoint : mountPoint,\n isDraggingOverCurrent\n );\n }, [isDraggingOverCurrent, mountPoint, manager, delegatedContext, node]);\n\n const droppable =\n !!delegatedContext ||\n isWrapper ||\n !(node.$$isExpandableTemplate || node.$$isTemplateInternalNode);\n\n const dropZoneRef = React.useRef<HTMLElement>();\n\n const dropZoneRefCallback = React.useCallback(\n (element: HTMLElement) => {\n dropZoneRef.current = element;\n if (droppable) {\n dropRef(element);\n }\n },\n [dropRef, droppable]\n );\n\n const handleContextMenu = React.useCallback(\n (event: React.MouseEvent) => {\n // `event.stopPropagation()` not working across bricks.\n if (\n !isGeneralizedPortalCanvas &&\n isCurrentTargetByClassName(\n event.target as HTMLElement,\n dropZoneRef.current\n )\n ) {\n event.preventDefault();\n manager.contextMenuChange({\n active: true,\n node,\n x: event.clientX,\n y: event.clientY,\n });\n }\n },\n [isGeneralizedPortalCanvas, manager, node]\n );\n\n return (\n <div\n ref={dropZoneRefCallback}\n className={classNames(\n styles.dropZone,\n isRoot\n ? classNames(\n styles.isRoot,\n canvasSettings?.mode &&\n String(canvasSettings.mode)\n .split(/\\s+/g)\n .map((mode) => styles[`mode-${mode}`]),\n {\n [styles.fullscreen]: fullscreen,\n [styles.hasTabs]: hasTabs,\n }\n )\n : styles.isSlot,\n {\n [styles.isPortalCanvas]: isGeneralizedPortalCanvas,\n [styles.dropping]: isDraggingOverCurrent,\n [styles.active]:\n isRoot &&\n contextMenuStatus.active &&\n contextMenuStatus.node.$$uid === node.$$uid,\n [styles.showOutlineIfEmpty]:\n !isRoot && showOutlineIfEmpty && selfChildNodes.length === 0,\n [styles.slotContentLayoutBlock]:\n refinedSlotContentLayout === EditorSlotContentLayout.BLOCK,\n [styles.slotContentLayoutInline]:\n refinedSlotContentLayout === EditorSlotContentLayout.INLINE,\n [styles.slotContentLayoutGrid]:\n refinedSlotContentLayout === EditorSlotContentLayout.GRID,\n }\n )}\n style={dropZoneStyle}\n onContextMenu={isRoot ? handleContextMenu : null}\n >\n <div\n ref={dropZoneBody}\n className={classNames(\n styles.dropZoneBody,\n selfChildNodesInCurrentCanvas.length === 0 && emptyClassName\n )}\n data-slot-id={mountPoint}\n style={dropZoneBodyStyle}\n >\n {selfChildNodesInCurrentCanvas.map((child) => (\n <EditorBrickAsComponent\n key={child.$$uid}\n node={child}\n slotContentLayout={refinedSlotContentLayout}\n />\n ))}\n </div>\n {\n <div\n className={classNames(\n styles.dropCursor,\n dropPositionCursor?.isVertical\n ? styles.dropCursorVertical\n : styles.dropCursorHorizontal\n )}\n style={{\n top: dropPositionCursor?.y,\n left: dropPositionCursor?.x,\n height: dropPositionCursor?.height,\n }}\n ></div>\n }\n </div>\n );\n}\n","import {\n BuilderDataTransferPayloadOfNodeToAdd,\n BuilderDataTransferPayloadOfNodeToMove,\n BuilderDataTransferPayloadOfSnippetToApply,\n BuilderDataTransferType,\n BuilderGroupedChildNode,\n BuilderRuntimeNode,\n} from \"../interfaces\";\nimport { BuilderDataManager } from \"../internal/BuilderDataManager\";\nimport { getUniqueNodeId } from \"../internal/getUniqueNodeId\";\nimport { getSortedIdsAfterDropped } from \"../processors/getSortedIdsAfterDropped\";\nimport { getSnippetNodeDetail } from \"./getSnippetNodeDetail\";\n\nexport interface HandleDropParams {\n manager: BuilderDataManager;\n type: BuilderDataTransferType;\n data:\n | BuilderDataTransferPayloadOfNodeToAdd\n | BuilderDataTransferPayloadOfNodeToMove\n | BuilderDataTransferPayloadOfSnippetToApply;\n droppingIndex: number;\n droppingParentUid: number;\n droppingParentInstanceId: string;\n droppingMountPoint: string;\n droppingChildNodes: BuilderRuntimeNode[];\n droppingSiblingGroups: BuilderGroupedChildNode[];\n isPortalCanvas?: boolean;\n}\n\nexport function processDrop({\n manager,\n type,\n data,\n droppingIndex,\n droppingParentUid,\n droppingParentInstanceId,\n droppingMountPoint,\n droppingChildNodes,\n droppingSiblingGroups,\n isPortalCanvas,\n}: HandleDropParams): void {\n if (type === BuilderDataTransferType.NODE_TO_ADD) {\n // Drag a new node into canvas.\n const { brickType = \"brick\", brick } =\n data as BuilderDataTransferPayloadOfNodeToAdd;\n const draggingNodeUid = getUniqueNodeId();\n manager.nodeAdd({\n ...getSortedIdsAfterDropped({\n draggingNodeUid,\n draggingNodeId: null,\n droppingIndex,\n droppingMountPoint,\n droppingSiblingGroups,\n }),\n nodeUid: draggingNodeUid,\n parentUid: droppingParentUid,\n nodeData: {\n parent: droppingParentInstanceId,\n type: brickType,\n brick,\n mountPoint: droppingMountPoint,\n bg: !isPortalCanvas && brickType === \"provider\" ? true : undefined,\n portal: isPortalCanvas,\n },\n });\n } else if (type === BuilderDataTransferType.SNIPPET_TO_APPLY) {\n const { bricks } = data as BuilderDataTransferPayloadOfSnippetToApply;\n // https://stackoverflow.com/questions/5501581/javascript-new-arrayn-and-array-prototype-map-weirdness\n const draggingNodeUids = [...new Array(bricks.length)].map(() =>\n getUniqueNodeId()\n );\n manager.snippetApply({\n ...getSortedIdsAfterDropped({\n draggingNodeUid: draggingNodeUids,\n draggingNodeId: null,\n droppingIndex,\n droppingMountPoint,\n droppingSiblingGroups,\n }),\n parentUid: droppingParentUid,\n nodeDetails: bricks.map((brickConf, index) =>\n getSnippetNodeDetail({\n parent: droppingParentInstanceId,\n parentUid: droppingParentUid,\n mountPoint: droppingMountPoint,\n nodeUid: draggingNodeUids[index],\n brickConf,\n isPortalCanvas,\n })\n ),\n });\n } else if (type === BuilderDataTransferType.NODE_TO_MOVE) {\n const {\n nodeUid: draggingNodeUid,\n nodeId: draggingNodeId,\n nodeInstanceId: draggingNodeInstanceId,\n } = data as BuilderDataTransferPayloadOfNodeToMove;\n\n const draggingIndex = droppingChildNodes.findIndex(\n (item) => item.$$uid === draggingNodeUid\n );\n // If found dragging node in the same drop zone,\n // then apply a node reorder, otherwise apply a node move.\n if (draggingIndex >= 0) {\n // If the index is not changed, then there is nothing to do.\n if (\n droppingIndex !== draggingIndex &&\n droppingIndex !== draggingIndex + 1\n ) {\n manager.nodeReorder({\n ...getSortedIdsAfterDropped({\n draggingNodeUid,\n draggingNodeId,\n draggingIndex,\n droppingIndex,\n droppingMountPoint,\n droppingSiblingGroups,\n }),\n parentUid: droppingParentUid,\n });\n }\n } else {\n manager.nodeMove({\n ...getSortedIdsAfterDropped({\n draggingNodeUid,\n draggingNodeId,\n droppingIndex,\n droppingMountPoint,\n droppingSiblingGroups,\n }),\n nodeUid: draggingNodeUid,\n parentUid: droppingParentUid,\n nodeInstanceId: draggingNodeInstanceId,\n nodeData: {\n parent: droppingParentInstanceId,\n mountPoint: droppingMountPoint,\n },\n });\n }\n }\n}\n","/* istanbul-ignore-file */\n// Todo(steve): Ignore tests temporarily for potential breaking change in the future.\nimport React, { useMemo } from \"react\";\nimport classNames from \"classnames\";\nimport { DropZone } from \"../DropZone/DropZone\";\nimport { EditorSlotContentLayout } from \"../interfaces\";\nimport { useBuilderNode } from \"../hooks/useBuilderNode\";\nimport { useDroppingStatus } from \"../hooks/useDroppingStatus\";\n\nimport styles from \"./SlotContainer.module.css\";\n\nexport interface SlotContainerProps {\n nodeUid: number;\n slotName: string;\n slotContainerStyle?: React.CSSProperties;\n dropZoneStyle?: React.CSSProperties;\n dropZoneBodyStyle?: React.CSSProperties;\n slotContentLayout?: EditorSlotContentLayout;\n showOutlineIfEmpty?: boolean;\n emptyClassName?: string;\n}\n\nexport function SlotContainer({\n nodeUid,\n slotName,\n slotContainerStyle,\n dropZoneStyle,\n dropZoneBodyStyle,\n slotContentLayout,\n showOutlineIfEmpty,\n emptyClassName,\n}: SlotContainerProps): React.ReactElement {\n const node = useBuilderNode({ nodeUid });\n const droppingStatus = useDroppingStatus();\n\n const delegatedContext = useMemo(() => {\n const delegatedSlots = node.$$delegatedSlots?.get(slotName);\n // Ignore when there are more than one delegated slots on a single slot.\n return delegatedSlots?.length === 1 ? delegatedSlots[0] : null;\n }, [node, slotName]);\n\n return (\n <div\n className={classNames(styles.slotContainer, {\n [styles.dropping]: droppingStatus\n .get(delegatedContext ? delegatedContext.templateUid : nodeUid)\n ?.get(\n delegatedContext ? delegatedContext.templateMountPoint : slotName\n ),\n })}\n style={slotContainerStyle}\n >\n <div className={styles.slotName}>\n {delegatedContext ? delegatedContext.templateMountPoint : slotName}\n </div>\n <DropZone\n nodeUid={nodeUid}\n mountPoint={slotName}\n delegatedContext={delegatedContext}\n dropZoneStyle={dropZoneStyle}\n dropZoneBodyStyle={dropZoneBodyStyle}\n slotContentLayout={slotContentLayout}\n showOutlineIfEmpty={showOutlineIfEmpty}\n emptyClassName={emptyClassName}\n />\n </div>\n );\n}\n","// See https://github.com/react-dnd/react-dnd/blob/main/packages/react-dnd/src/common/DndProvider.tsx\nimport React from \"react\";\nimport {\n BuilderContext,\n ContextOfBuilder,\n createBuilderContext,\n} from \"./BuilderContext\";\n\nexport const BuilderProvider = React.memo(LegacyBuilderProvider);\n\nconst instanceSymbol = Symbol.for(\"__BRICK_NEXT_BUILDER_CONTEXT_INSTANCE__\");\nfunction createSingletonBuilderContext(): ContextOfBuilder {\n const ctx = window as any;\n if (!ctx[instanceSymbol]) {\n ctx[instanceSymbol] = createBuilderContext();\n }\n return ctx[instanceSymbol];\n}\n\nlet refCount = 0;\n\nfunction LegacyBuilderProvider({\n children,\n}: React.PropsWithChildren<any>): React.ReactElement {\n const context = createSingletonBuilderContext();\n\n /**\n * If the global context was used to store the DND context\n * then where theres no more references to it we should\n * clean it up to avoid memory leaks\n */\n React.useEffect(() => {\n refCount++;\n\n return () => {\n refCount--;\n\n if (refCount === 0) {\n (window as any)[instanceSymbol] = null;\n }\n };\n }, []);\n\n return (\n <BuilderContext.Provider value={context}>\n {children}\n </BuilderContext.Provider>\n );\n}\n","/* istanbul-ignore-file */\n// Todo(steve): Ignore tests temporarily for potential breaking change in the future.\nimport React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { DndProvider } from \"react-dnd\";\nimport { HTML5Backend } from \"react-dnd-html5-backend\";\nimport { UpdatingElement, property, BrickWrapper } from \"@next-core/brick-kit\";\nimport { StoryDoc } from \"@next-core/brick-types\";\nimport { EditorSelfLayout } from \"./interfaces\";\nimport { BuilderProvider } from \"./BuilderProvider\";\n\nexport interface EditorComponentProps {\n nodeUid: number;\n editorProps?: StoryDoc[\"editorProps\"];\n}\n\nexport type EditorComponentType = React.FunctionComponent<EditorComponentProps>;\n\nexport interface EditorBrickElement extends HTMLElement {\n nodeUid: number;\n}\n\nexport interface EditorBrickElementConstructor {\n new (): EditorBrickElement;\n readonly selfLayout: EditorSelfLayout;\n}\n\nexport interface EditorElementOptions {\n brickStyle?: Record<string, string>;\n selfLayout?: EditorSelfLayout;\n}\n\nexport function EditorElementFactory(\n EditorComponent: EditorComponentType,\n options?: EditorElementOptions\n): EditorBrickElementConstructor {\n class NewEditorElement extends UpdatingElement {\n static get selfLayout(): EditorSelfLayout {\n return options?.selfLayout;\n }\n\n @property({ type: Number })\n nodeUid: number;\n\n @property({ attribute: false })\n editorProps: StoryDoc[\"editorProps\"];\n\n connectedCallback(): void {\n // Don't override user's style settings.\n // istanbul ignore else\n if (!this.style.display) {\n this.style.display = \"block\";\n }\n if (options?.brickStyle) {\n for (const [key, value] of Object.entries(options.brickStyle)) {\n (this.style as unknown as Record<string, string>)[key] = value;\n }\n }\n this._render();\n }\n\n disconnectedCallback(): void {\n ReactDOM.unmountComponentAtNode(this);\n }\n\n protected _render(): void {\n // istanbul ignore else\n if (this.isConnected && this.nodeUid) {\n ReactDOM.render(\n <BrickWrapper>\n <BuilderProvider>\n <DndProvider backend={HTML5Backend}>\n <EditorComponent\n nodeUid={this.nodeUid}\n editorProps={this.editorProps}\n />\n </DndProvider>\n </BuilderProvider>\n </BrickWrapper>,\n this\n );\n }\n }\n }\n return NewEditorElement;\n}\n","import { createContext, Dispatch, SetStateAction } from \"react\";\n\n// It indicates which mount point of a container is active dropping zone.\ntype DroppingStatus = {\n [mountPoint: string]: boolean;\n};\n\ninterface ContextOfDroppingStatus {\n droppingStatus?: DroppingStatus;\n setDroppingStatus?: Dispatch<SetStateAction<DroppingStatus>>;\n}\n\n// Todo(steve): remove this file.\n/** @deprecated no more usage but for compatibility only. */\nexport const DroppingStatusContext = createContext<ContextOfDroppingStatus>({});\n","import { useMemo } from \"react\";\nimport { sortBy } from \"lodash\";\nimport { useBuilderData } from \"./useBuilderData\";\n\nexport function useBuilderNodeMountPoints({\n nodeUid,\n isRoot,\n doNotExpandTemplates,\n}: {\n nodeUid?: number;\n isRoot?: boolean;\n doNotExpandTemplates?: boolean;\n}): string[] {\n const { rootId, edges } = useBuilderData();\n const currentUid = isRoot ? rootId : nodeUid;\n return useMemo(() => {\n const mountPoints = new Set<string>();\n const relatedEdges = sortBy(\n edges.filter(\n (edge) =>\n edge.parent === currentUid &&\n (doNotExpandTemplates\n ? !edge.$$isTemplateInternal\n : !edge.$$isTemplateDelegated)\n ),\n [(edge) => edge.sort]\n );\n for (const edge of relatedEdges) {\n mountPoints.add(edge.mountPoint);\n }\n return Array.from(mountPoints);\n }, [currentUid, edges, doNotExpandTemplates]);\n}\n","import { useMemo } from \"react\";\nimport { BuilderRuntimeNode } from \"../interfaces\";\nimport { useBuilderData } from \"./useBuilderData\";\n\nexport function useBuilderParentNode(nodeUid: number): BuilderRuntimeNode {\n const { nodes, edges } = useBuilderData();\n return useMemo(() => {\n const parentUid = edges.find(\n (edge) => edge.child === nodeUid && !edge.$$isTemplateExpanded\n ).parent;\n return nodes.find((node) => node.$$uid === parentUid);\n }, [edges, nodeUid, nodes]);\n}\n","import { useEffect, useState } from \"react\";\nimport { useBuilderDataManager } from \"./useBuilderDataManager\";\nimport { BuilderRouteNode } from \"@next-core/brick-types\";\n\nexport function useRouteList(): BuilderRouteNode[] {\n const manager = useBuilderDataManager();\n const [data, setData] = useState(manager.getRouteList());\n useEffect(\n () =>\n manager.onRouteListChange(() => {\n setData(manager.getRouteList());\n }),\n [manager]\n );\n return data;\n}\n","import { useEffect, useState } from \"react\";\nimport { useBuilderDataManager } from \"./useBuilderDataManager\";\n\nexport function useActiveNodeUid(): number {\n const manager = useBuilderDataManager();\n const [data, setData] = useState(manager.getActiveNodeUid());\n useEffect(\n () =>\n manager.onActiveNodeChange(() => {\n setData(manager.getActiveNodeUid());\n }),\n [manager]\n );\n return data;\n}\n","import { useEffect, useState } from \"react\";\nimport { useBuilderDataManager } from \"./useBuilderDataManager\";\n\nexport function useOutlineEnabled(\n nodeInstanceId: string,\n inapplicable?: boolean\n): boolean {\n const manager = useBuilderDataManager();\n const [enabled, setEnabled] = useState(\n inapplicable ? false : manager.isOutlineEnabled(nodeInstanceId)\n );\n useEffect(() => {\n if (!inapplicable) {\n return manager.onOutlineEnabledNodesChange(() => {\n setEnabled(manager.isOutlineEnabled(nodeInstanceId));\n });\n }\n }, [inapplicable, manager, nodeInstanceId]);\n return enabled;\n}\n","module.exports = dll;","module.exports = (__webpack_require__(\"XuQu\"))(\"ZR4k\");","module.exports = (__webpack_require__(\"XuQu\"))(\"i8i4\");","module.exports = (__webpack_require__(\"XuQu\"))(\"lSNA\");","module.exports = (__webpack_require__(\"/8r5\"))(\"q1tI\");","module.exports = (__webpack_require__(\"/8r5\"))(\"qJlv\");","module.exports = (__webpack_require__(\"XuQu\"))(\"tYg3\");","module.exports = (__webpack_require__(\"XuQu\"))(\"yXPU\");"],"sourceRoot":""}
|
package/dist/index.html
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<!doctype html><html lang="zh-CN" data-theme="light" data-mode="default"><head><meta charset="utf-8"><title>DevOps 管理专家</title><base href="<!--# echo var='base_href' default='/' -->"><link rel="shortcut icon" type="image/png" href="<!--# echo var='core_root' default='' -->assets/favicon.png"/><script>(!("documentMode" in document)&&CSS.supports("display","grid")&&window.customElements)||(location.href="<!--# echo var='base_href' default='/' -->browse-happy.html")</script><script>window.MOCK_DATE="<!--# echo var='mock_date' default='' -->"</script><link href="<!--# echo var='core_root' default='' -->main.ff879573b246ce8c2273.css" rel="stylesheet"></head><body><div id="root-layout"><nav id="menu-bar-mount-point" class="print-hide"></nav><div id="root-content"><header id="app-bar-mount-point" class="print-hide"></header><div id="main-mount-point"></div><div id="legacy-iframe-mount-point"></div></div><div id="loading-bar-mount-point"><div class="global-loading-bar initial-loading-bar"><div></div></div></div></div><div id="bg-mount-point"></div><div id="portal-mount-point"></div><script src="<!--# echo var='core_root' default='' -->dll.7d375535.js"></script><script src="<!--# echo var='core_root' default='' -->polyfill.f257e611b86e1c02a39d.js"></script><script src="<!--# echo var='core_root' default='' -->main.
|
|
1
|
+
<!doctype html><html lang="zh-CN" data-theme="light" data-mode="default"><head><meta charset="utf-8"><title>DevOps 管理专家</title><base href="<!--# echo var='base_href' default='/' -->"><link rel="shortcut icon" type="image/png" href="<!--# echo var='core_root' default='' -->assets/favicon.png"/><script>(!("documentMode" in document)&&CSS.supports("display","grid")&&window.customElements)||(location.href="<!--# echo var='base_href' default='/' -->browse-happy.html")</script><script>window.MOCK_DATE="<!--# echo var='mock_date' default='' -->"</script><link href="<!--# echo var='core_root' default='' -->main.ff879573b246ce8c2273.css" rel="stylesheet"></head><body><div id="root-layout"><nav id="menu-bar-mount-point" class="print-hide"></nav><div id="root-content"><header id="app-bar-mount-point" class="print-hide"></header><div id="main-mount-point"></div><div id="legacy-iframe-mount-point"></div></div><div id="loading-bar-mount-point"><div class="global-loading-bar initial-loading-bar"><div></div></div></div></div><div id="bg-mount-point"></div><div id="portal-mount-point"></div><script src="<!--# echo var='core_root' default='' -->dll.7d375535.js"></script><script src="<!--# echo var='core_root' default='' -->polyfill.f257e611b86e1c02a39d.js"></script><script src="<!--# echo var='core_root' default='' -->main.ee34aad7877647414852.js"></script></body></html>
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
!function(e){function t(t){for(var o,r,i=t[0],a=t[1],u=0,c=[];u<i.length;u++)r=i[u],Object.prototype.hasOwnProperty.call(n,r)&&n[r]&&c.push(n[r][0]),n[r]=0;for(o in a)Object.prototype.hasOwnProperty.call(a,o)&&(e[o]=a[o]);for(s&&s(t);c.length;)c.shift()()}var o={},n={0:0};function r(t){if(o[t])return o[t].exports;var n=o[t]={i:t,l:!1,exports:{}};return e[t].call(n.exports,n,n.exports,r),n.l=!0,n.exports}r.e=function(e){var t=[],o=n[e];if(0!==o)if(o)t.push(o[2]);else{var i=new Promise((function(t,r){o=n[e]=[t,r]}));t.push(o[2]=i);var a,u=document.createElement("script");u.charset="utf-8",u.timeout=120,r.nc&&u.setAttribute("nonce",r.nc),u.src=function(e){return r.p+""+({1:"mockdate"}[e]||e)+"."+{1:"59f45d37e8dce0f31118"}[e]+".js"}(e);var s=new Error;a=function(t){u.onerror=u.onload=null,clearTimeout(c);var o=n[e];if(0!==o){if(o){var r=t&&("load"===t.type?"missing":t.type),i=t&&t.target&&t.target.src;s.message="Loading chunk "+e+" failed.\n("+r+": "+i+")",s.name="ChunkLoadError",s.type=r,s.request=i,o[1](s)}n[e]=void 0}};var c=setTimeout((function(){a({type:"timeout",target:u})}),12e4);u.onerror=u.onload=a,document.head.appendChild(u)}return Promise.all(t)},r.m=e,r.c=o,r.d=function(e,t,o){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:o})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(r.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)r.d(o,n,function(t){return e[t]}.bind(null,n));return o},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r.oe=function(e){throw console.error(e),e};var i=window.webpackJsonp=window.webpackJsonp||[],a=i.push.bind(i);i.push=t,i=i.slice();for(var u=0;u<i.length;u++)t(i[u]);var s=a;r(r.s="GR0M")}({"1OyB":function(e,t,o){e.exports=o("XuQu")("1OyB")},"3tO9":function(e,t,o){e.exports=o("XuQu")("3tO9")},"9RIe":function(e,t,o){e.exports=o("XuQu")("9RIe")},"9kay":function(e,t,o){e.exports=o("XuQu")("9kay")},GR0M:function(e,t,o){"use strict";o.r(t);var n=o("yXPU"),r=o.n(n),i=o("3tO9"),a=o.n(i),u=o("wd/R"),s=o.n(u),c=(o("XDpg"),o("q1tI")),l=o.n(c),d=o("i8i4"),p=o.n(d),f=o("gdfu"),g=o("tYg3"),h=o("JxWY"),v=o("9RIe"),m=o("vA6H");f.message.config({top:40});var w=o("XzT5"),y=o("9kay"),k=o("1OyB"),b=o("vuIU"),S=[],x=S.forEach,O=S.slice;function E(e){return x.call(O.call(arguments,1),(function(t){if(t)for(var o in t)void 0===e[o]&&(e[o]=t[o])})),e}var I=/^[\u0009\u0020-\u007e\u0080-\u00ff]+$/,R=function(e,t,o){var n=o||{};n.path=n.path||"/";var r=e+"="+encodeURIComponent(t);if(n.maxAge>0){var i=n.maxAge-0;if(isNaN(i))throw new Error("maxAge should be a Number");r+="; Max-Age="+Math.floor(i)}if(n.domain){if(!I.test(n.domain))throw new TypeError("option domain is invalid");r+="; Domain="+n.domain}if(n.path){if(!I.test(n.path))throw new TypeError("option path is invalid");r+="; Path="+n.path}if(n.expires){if("function"!=typeof n.expires.toUTCString)throw new TypeError("option expires is invalid");r+="; Expires="+n.expires.toUTCString()}if(n.httpOnly&&(r+="; HttpOnly"),n.secure&&(r+="; Secure"),n.sameSite)switch("string"==typeof n.sameSite?n.sameSite.toLowerCase():n.sameSite){case!0:r+="; SameSite=Strict";break;case"lax":r+="; SameSite=Lax";break;case"strict":r+="; SameSite=Strict";break;case"none":r+="; SameSite=None";break;default:throw new TypeError("option sameSite is invalid")}return r},T=function(e,t,o,n){var r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{path:"/",sameSite:"strict"};o&&(r.expires=new Date,r.expires.setTime(r.expires.getTime()+60*o*1e3)),n&&(r.domain=n),document.cookie=R(e,encodeURIComponent(t),r)},A=function(e){for(var t=e+"=",o=document.cookie.split(";"),n=0;n<o.length;n++){for(var r=o[n];" "===r.charAt(0);)r=r.substring(1,r.length);if(0===r.indexOf(t))return r.substring(t.length,r.length)}return null},L={name:"cookie",lookup:function(e){var t;if(e.lookupCookie&&"undefined"!=typeof document){var o=A(e.lookupCookie);o&&(t=o)}return t},cacheUserLanguage:function(e,t){t.lookupCookie&&"undefined"!=typeof document&&T(t.lookupCookie,e,t.cookieMinutes,t.cookieDomain,t.cookieOptions)}},P={name:"querystring",lookup:function(e){var t;if("undefined"!=typeof window){var o=window.location.search;!window.location.search&&window.location.hash&&window.location.hash.indexOf("?")>-1&&(o=window.location.hash.substring(window.location.hash.indexOf("?")));for(var n=o.substring(1).split("&"),r=0;r<n.length;r++){var i=n[r].indexOf("=");if(i>0)n[r].substring(0,i)===e.lookupQuerystring&&(t=n[r].substring(i+1))}}return t}},C=null,X=function(){if(null!==C)return C;try{C="undefined"!==window&&null!==window.localStorage;window.localStorage.setItem("i18next.translate.boo","foo"),window.localStorage.removeItem("i18next.translate.boo")}catch(e){C=!1}return C},j={name:"localStorage",lookup:function(e){var t;if(e.lookupLocalStorage&&X()){var o=window.localStorage.getItem(e.lookupLocalStorage);o&&(t=o)}return t},cacheUserLanguage:function(e,t){t.lookupLocalStorage&&X()&&window.localStorage.setItem(t.lookupLocalStorage,e)}},D=null,_=function(){if(null!==D)return D;try{D="undefined"!==window&&null!==window.sessionStorage;window.sessionStorage.setItem("i18next.translate.boo","foo"),window.sessionStorage.removeItem("i18next.translate.boo")}catch(e){D=!1}return D},B={name:"sessionStorage",lookup:function(e){var t;if(e.lookupSessionStorage&&_()){var o=window.sessionStorage.getItem(e.lookupSessionStorage);o&&(t=o)}return t},cacheUserLanguage:function(e,t){t.lookupSessionStorage&&_()&&window.sessionStorage.setItem(t.lookupSessionStorage,e)}},U={name:"navigator",lookup:function(e){var t=[];if("undefined"!=typeof navigator){if(navigator.languages)for(var o=0;o<navigator.languages.length;o++)t.push(navigator.languages[o]);navigator.userLanguage&&t.push(navigator.userLanguage),navigator.language&&t.push(navigator.language)}return t.length>0?t:void 0}},Q={name:"htmlTag",lookup:function(e){var t,o=e.htmlTag||("undefined"!=typeof document?document.documentElement:null);return o&&"function"==typeof o.getAttribute&&(t=o.getAttribute("lang")),t}},q={name:"path",lookup:function(e){var t;if("undefined"!=typeof window){var o=window.location.pathname.match(/\/([a-zA-Z-]*)/g);if(o instanceof Array)if("number"==typeof e.lookupFromPathIndex){if("string"!=typeof o[e.lookupFromPathIndex])return;t=o[e.lookupFromPathIndex].replace("/","")}else t=o[0].replace("/","")}return t}},M={name:"subdomain",lookup:function(e){var t;if("undefined"!=typeof window){var o=window.location.href.match(/(?:http[s]*\:\/\/)*(.*?)\.(?=[^\/]*\..{2,5})/gi);o instanceof Array&&(t="number"==typeof e.lookupFromSubdomainIndex?o[e.lookupFromSubdomainIndex].replace("http://","").replace("https://","").replace(".",""):o[0].replace("http://","").replace("https://","").replace(".",""))}return t}};var F=function(){function e(t){var o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};Object(k.default)(this,e),this.type="languageDetector",this.detectors={},this.init(t,o)}return Object(b.default)(e,[{key:"init",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};this.services=e,this.options=E(t,this.options||{},{order:["querystring","cookie","localStorage","sessionStorage","navigator","htmlTag"],lookupQuerystring:"lng",lookupCookie:"i18next",lookupLocalStorage:"i18nextLng",lookupSessionStorage:"i18nextLng",caches:["localStorage"],excludeCacheFor:["cimode"]}),this.options.lookupFromUrlIndex&&(this.options.lookupFromPathIndex=this.options.lookupFromUrlIndex),this.i18nOptions=o,this.addDetector(L),this.addDetector(P),this.addDetector(j),this.addDetector(B),this.addDetector(U),this.addDetector(Q),this.addDetector(q),this.addDetector(M)}},{key:"addDetector",value:function(e){this.detectors[e.name]=e}},{key:"detect",value:function(e){var t=this;e||(e=this.options.order);var o=[];return e.forEach((function(e){if(t.detectors[e]){var n=t.detectors[e].lookup(t.options);n&&"string"==typeof n&&(n=[n]),n&&(o=o.concat(n))}})),this.services.languageUtils.getBestMatchFromCodes?o:o.length>0?o[0]:null}},{key:"cacheUserLanguage",value:function(e,t){var o=this;t||(t=this.options.caches),t&&(this.options.excludeCacheFor&&this.options.excludeCacheFor.indexOf(e)>-1||t.forEach((function(t){o.detectors[t]&&o.detectors[t].cacheUserLanguage(e,o.options)})))}}]),e}();F.type="languageDetector";var N;!function(e){e.BOOTSTRAP_ERROR="BOOTSTRAP_ERROR"}(N||(N={}));var z={[N.BOOTSTRAP_ERROR]:"Bootstrap Error"},H={[N.BOOTSTRAP_ERROR]:"启动错误"};w.default.on("languageChanged",(function(e){s.a.locale(e)})),w.default.use(F).use(y.initReactI18next).init({fallbackLng:"zh",debug:!1,supportedLngs:["zh","en"],nonExplicitSupportedLngs:!0,interpolation:{escapeValue:!1},react:{useSuspense:!1},compatibilityJSON:"v3",resources:{en:{"brick-container":z},zh:{"brick-container":H}}}),Object(g.initI18n)();var J=w.default;Object(v.initializeLibrary)(),window.DLL_PATH={ace:"dll-of-ace.1d453681.js",d3:"dll-of-d3.1991969b.js",echarts:"dll-of-echarts.d885e687.js","editor-bricks-helper":"dll-of-editor-bricks-helper.c23df485.js","react-dnd":"dll-of-react-dnd.0ca00465.js"},window.BRICK_NEXT_VERSIONS={"brick-container":"2.69.21","brick-dll":"2.33.3","brick-kit":"2.126.2","brick-utils":"2.38.1"},window.BRICK_NEXT_FEATURES=["edit-evaluations-and-transformations-in-devtools"];var Y,K=document.body,W=Object(g.createRuntime)(),G={menuBar:K.querySelector("#menu-bar-mount-point"),appBar:K.querySelector("#app-bar-mount-point"),loadingBar:K.querySelector("#loading-bar-mount-point"),main:K.querySelector("#main-mount-point"),bg:K.querySelector("#bg-mount-point"),portal:K.querySelector("#portal-mount-point")};if(!window.STANDALONE_MICRO_APPS){var V="".concat(W.getBasePath(),"api/gateway/data_exchange.store.ClickHouseInsertData/api/v1/data_exchange/frontend_stat");Y=m.apiAnalyzer.create({api:V})}h.http.interceptors.request.use((function(e){var t,o=new Headers((null===(t=e.options)||void 0===t?void 0:t.headers)||{});o.set("lang",J.resolvedLanguage);var n=Object(g.getMockInfo)(e.url,e.method);return n&&(e.url=n.url,o.set("easyops-mock-id",n.mockId)),a()(a()({},e),{},{options:a()(a()({},e.options),{},{headers:o})})})),h.http.interceptors.request.use((function(e){var t,o;if(Y){var{userInstanceId:n,username:r}=Object(g.getAuth)(),i=Date.now();e.meta={st:i,time:Math.round(i/1e3),uid:n,username:r}}return null!==(t=e.options)&&void 0!==t&&null!==(o=t.interceptorParams)&&void 0!==o&&o.ignoreLoadingBar||window.dispatchEvent(new CustomEvent("request.start")),e})),h.http.interceptors.response.use((function(e){var t,o;return window.dispatchEvent(new CustomEvent("request.end")),null===(t=Y)||void 0===t||t.analyses(e),"response"===(null===(o=e.config.options)||void 0===o?void 0:o.observe)?e:e.data}),(function(e){var t;return null===(t=Y)||void 0===t||t.analyses(e),window.dispatchEvent(new CustomEvent("request.end")),Promise.reject(e.error)}));var $,Z,ee="loading",te=!1;function oe(){return ne.apply(this,arguments)}function ne(){return(ne=r()((function*(){if(!te&&"ok"===ee&&$){te=!0;var e=$===location.origin||/^https?:\/\/localhost(?:$|:)/.test($);if(!e){var{allowedPreviewFromOrigins:t}=W.getMiscSettings();Array.isArray(t)&&(e=t.some(e=>e===$)),e||console.error("Preview is disallowed, from origin: ".concat($,", while allowing: ").concat(JSON.stringify(t)))}if(e){if(yield g.developHelper.loadDynamicBricksInBrickConf({brick:"next-previewer.preview-helper"}),customElements.get("next-previewer.preview-helper"))document.createElement("next-previewer.preview-helper").start($,Z)}}}))).apply(this,arguments)}if(window.parent){var re=function(){var e=r()((function*(e){var{data:t,origin:o}=e;t&&"preview-container"===t.sender&&"start-preview"===t.type&&(window.removeEventListener("message",re),$=o,Z=t.options,h.http.enableCache(!0),oe())}));return function(t){return e.apply(this,arguments)}}();window.addEventListener("message",re)}function ie(){return(ie=r()((function*(){try{if(window.MOCK_DATE){var{set:e}=yield o.e(1).then(o.t.bind(null,"xKHS",7));e(window.MOCK_DATE)}yield W.bootstrap(G),ee="ok"}catch(e){ee="failed",console.error(e),document.body.classList.add("bootstrap-error","bars-hidden"),p.a.render(l.a.createElement(f.Result,{status:"error",title:J.t("".concat("brick-container",":").concat(N.BOOTSTRAP_ERROR)),subTitle:Object(g.httpErrorToString)(e)}),G.main)}oe()}))).apply(this,arguments)}!function(){ie.apply(this,arguments)}()},JxWY:function(e,t,o){e.exports=o("XuQu")("JxWY")},XDpg:function(e,t,o){e.exports=o("XuQu")("XDpg")},XuQu:function(e,t){e.exports=dll},XzT5:function(e,t,o){e.exports=o("XuQu")("XzT5")},gdfu:function(e,t,o){e.exports=o("XuQu")("gdfu")},i8i4:function(e,t,o){e.exports=o("XuQu")("i8i4")},q1tI:function(e,t,o){e.exports=o("XuQu")("q1tI")},tYg3:function(e,t,o){e.exports=o("XuQu")("tYg3")},vA6H:function(e,t,o){e.exports=o("XuQu")("vA6H")},vuIU:function(e,t,o){e.exports=o("XuQu")("vuIU")},"wd/R":function(e,t,o){e.exports=o("XuQu")("wd/R")},yXPU:function(e,t,o){e.exports=o("XuQu")("yXPU")}});
|
|
2
|
-
//# sourceMappingURL=main.
|
|
1
|
+
!function(e){function t(t){for(var o,r,i=t[0],a=t[1],u=0,c=[];u<i.length;u++)r=i[u],Object.prototype.hasOwnProperty.call(n,r)&&n[r]&&c.push(n[r][0]),n[r]=0;for(o in a)Object.prototype.hasOwnProperty.call(a,o)&&(e[o]=a[o]);for(s&&s(t);c.length;)c.shift()()}var o={},n={0:0};function r(t){if(o[t])return o[t].exports;var n=o[t]={i:t,l:!1,exports:{}};return e[t].call(n.exports,n,n.exports,r),n.l=!0,n.exports}r.e=function(e){var t=[],o=n[e];if(0!==o)if(o)t.push(o[2]);else{var i=new Promise((function(t,r){o=n[e]=[t,r]}));t.push(o[2]=i);var a,u=document.createElement("script");u.charset="utf-8",u.timeout=120,r.nc&&u.setAttribute("nonce",r.nc),u.src=function(e){return r.p+""+({1:"mockdate"}[e]||e)+"."+{1:"59f45d37e8dce0f31118"}[e]+".js"}(e);var s=new Error;a=function(t){u.onerror=u.onload=null,clearTimeout(c);var o=n[e];if(0!==o){if(o){var r=t&&("load"===t.type?"missing":t.type),i=t&&t.target&&t.target.src;s.message="Loading chunk "+e+" failed.\n("+r+": "+i+")",s.name="ChunkLoadError",s.type=r,s.request=i,o[1](s)}n[e]=void 0}};var c=setTimeout((function(){a({type:"timeout",target:u})}),12e4);u.onerror=u.onload=a,document.head.appendChild(u)}return Promise.all(t)},r.m=e,r.c=o,r.d=function(e,t,o){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:o})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(r.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)r.d(o,n,function(t){return e[t]}.bind(null,n));return o},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r.oe=function(e){throw console.error(e),e};var i=window.webpackJsonp=window.webpackJsonp||[],a=i.push.bind(i);i.push=t,i=i.slice();for(var u=0;u<i.length;u++)t(i[u]);var s=a;r(r.s="GR0M")}({"1OyB":function(e,t,o){e.exports=o("XuQu")("1OyB")},"3tO9":function(e,t,o){e.exports=o("XuQu")("3tO9")},"9RIe":function(e,t,o){e.exports=o("XuQu")("9RIe")},"9kay":function(e,t,o){e.exports=o("XuQu")("9kay")},GR0M:function(e,t,o){"use strict";o.r(t);var n=o("yXPU"),r=o.n(n),i=o("3tO9"),a=o.n(i),u=o("wd/R"),s=o.n(u),c=(o("XDpg"),o("q1tI")),l=o.n(c),d=o("i8i4"),p=o.n(d),f=o("gdfu"),g=o("tYg3"),h=o("JxWY"),v=o("9RIe"),m=o("vA6H");f.message.config({top:40});var w=o("XzT5"),y=o("9kay"),k=o("1OyB"),b=o("vuIU"),S=[],x=S.forEach,O=S.slice;function E(e){return x.call(O.call(arguments,1),(function(t){if(t)for(var o in t)void 0===e[o]&&(e[o]=t[o])})),e}var I=/^[\u0009\u0020-\u007e\u0080-\u00ff]+$/,R=function(e,t,o){var n=o||{};n.path=n.path||"/";var r=e+"="+encodeURIComponent(t);if(n.maxAge>0){var i=n.maxAge-0;if(isNaN(i))throw new Error("maxAge should be a Number");r+="; Max-Age="+Math.floor(i)}if(n.domain){if(!I.test(n.domain))throw new TypeError("option domain is invalid");r+="; Domain="+n.domain}if(n.path){if(!I.test(n.path))throw new TypeError("option path is invalid");r+="; Path="+n.path}if(n.expires){if("function"!=typeof n.expires.toUTCString)throw new TypeError("option expires is invalid");r+="; Expires="+n.expires.toUTCString()}if(n.httpOnly&&(r+="; HttpOnly"),n.secure&&(r+="; Secure"),n.sameSite)switch("string"==typeof n.sameSite?n.sameSite.toLowerCase():n.sameSite){case!0:r+="; SameSite=Strict";break;case"lax":r+="; SameSite=Lax";break;case"strict":r+="; SameSite=Strict";break;case"none":r+="; SameSite=None";break;default:throw new TypeError("option sameSite is invalid")}return r},T=function(e,t,o,n){var r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{path:"/",sameSite:"strict"};o&&(r.expires=new Date,r.expires.setTime(r.expires.getTime()+60*o*1e3)),n&&(r.domain=n),document.cookie=R(e,encodeURIComponent(t),r)},A=function(e){for(var t=e+"=",o=document.cookie.split(";"),n=0;n<o.length;n++){for(var r=o[n];" "===r.charAt(0);)r=r.substring(1,r.length);if(0===r.indexOf(t))return r.substring(t.length,r.length)}return null},L={name:"cookie",lookup:function(e){var t;if(e.lookupCookie&&"undefined"!=typeof document){var o=A(e.lookupCookie);o&&(t=o)}return t},cacheUserLanguage:function(e,t){t.lookupCookie&&"undefined"!=typeof document&&T(t.lookupCookie,e,t.cookieMinutes,t.cookieDomain,t.cookieOptions)}},P={name:"querystring",lookup:function(e){var t;if("undefined"!=typeof window){var o=window.location.search;!window.location.search&&window.location.hash&&window.location.hash.indexOf("?")>-1&&(o=window.location.hash.substring(window.location.hash.indexOf("?")));for(var n=o.substring(1).split("&"),r=0;r<n.length;r++){var i=n[r].indexOf("=");if(i>0)n[r].substring(0,i)===e.lookupQuerystring&&(t=n[r].substring(i+1))}}return t}},C=null,X=function(){if(null!==C)return C;try{C="undefined"!==window&&null!==window.localStorage;window.localStorage.setItem("i18next.translate.boo","foo"),window.localStorage.removeItem("i18next.translate.boo")}catch(e){C=!1}return C},j={name:"localStorage",lookup:function(e){var t;if(e.lookupLocalStorage&&X()){var o=window.localStorage.getItem(e.lookupLocalStorage);o&&(t=o)}return t},cacheUserLanguage:function(e,t){t.lookupLocalStorage&&X()&&window.localStorage.setItem(t.lookupLocalStorage,e)}},D=null,_=function(){if(null!==D)return D;try{D="undefined"!==window&&null!==window.sessionStorage;window.sessionStorage.setItem("i18next.translate.boo","foo"),window.sessionStorage.removeItem("i18next.translate.boo")}catch(e){D=!1}return D},B={name:"sessionStorage",lookup:function(e){var t;if(e.lookupSessionStorage&&_()){var o=window.sessionStorage.getItem(e.lookupSessionStorage);o&&(t=o)}return t},cacheUserLanguage:function(e,t){t.lookupSessionStorage&&_()&&window.sessionStorage.setItem(t.lookupSessionStorage,e)}},U={name:"navigator",lookup:function(e){var t=[];if("undefined"!=typeof navigator){if(navigator.languages)for(var o=0;o<navigator.languages.length;o++)t.push(navigator.languages[o]);navigator.userLanguage&&t.push(navigator.userLanguage),navigator.language&&t.push(navigator.language)}return t.length>0?t:void 0}},Q={name:"htmlTag",lookup:function(e){var t,o=e.htmlTag||("undefined"!=typeof document?document.documentElement:null);return o&&"function"==typeof o.getAttribute&&(t=o.getAttribute("lang")),t}},q={name:"path",lookup:function(e){var t;if("undefined"!=typeof window){var o=window.location.pathname.match(/\/([a-zA-Z-]*)/g);if(o instanceof Array)if("number"==typeof e.lookupFromPathIndex){if("string"!=typeof o[e.lookupFromPathIndex])return;t=o[e.lookupFromPathIndex].replace("/","")}else t=o[0].replace("/","")}return t}},M={name:"subdomain",lookup:function(e){var t;if("undefined"!=typeof window){var o=window.location.href.match(/(?:http[s]*\:\/\/)*(.*?)\.(?=[^\/]*\..{2,5})/gi);o instanceof Array&&(t="number"==typeof e.lookupFromSubdomainIndex?o[e.lookupFromSubdomainIndex].replace("http://","").replace("https://","").replace(".",""):o[0].replace("http://","").replace("https://","").replace(".",""))}return t}};var F=function(){function e(t){var o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};Object(k.default)(this,e),this.type="languageDetector",this.detectors={},this.init(t,o)}return Object(b.default)(e,[{key:"init",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};this.services=e,this.options=E(t,this.options||{},{order:["querystring","cookie","localStorage","sessionStorage","navigator","htmlTag"],lookupQuerystring:"lng",lookupCookie:"i18next",lookupLocalStorage:"i18nextLng",lookupSessionStorage:"i18nextLng",caches:["localStorage"],excludeCacheFor:["cimode"]}),this.options.lookupFromUrlIndex&&(this.options.lookupFromPathIndex=this.options.lookupFromUrlIndex),this.i18nOptions=o,this.addDetector(L),this.addDetector(P),this.addDetector(j),this.addDetector(B),this.addDetector(U),this.addDetector(Q),this.addDetector(q),this.addDetector(M)}},{key:"addDetector",value:function(e){this.detectors[e.name]=e}},{key:"detect",value:function(e){var t=this;e||(e=this.options.order);var o=[];return e.forEach((function(e){if(t.detectors[e]){var n=t.detectors[e].lookup(t.options);n&&"string"==typeof n&&(n=[n]),n&&(o=o.concat(n))}})),this.services.languageUtils.getBestMatchFromCodes?o:o.length>0?o[0]:null}},{key:"cacheUserLanguage",value:function(e,t){var o=this;t||(t=this.options.caches),t&&(this.options.excludeCacheFor&&this.options.excludeCacheFor.indexOf(e)>-1||t.forEach((function(t){o.detectors[t]&&o.detectors[t].cacheUserLanguage(e,o.options)})))}}]),e}();F.type="languageDetector";var N;!function(e){e.BOOTSTRAP_ERROR="BOOTSTRAP_ERROR"}(N||(N={}));var z={[N.BOOTSTRAP_ERROR]:"Bootstrap Error"},H={[N.BOOTSTRAP_ERROR]:"启动错误"};w.default.on("languageChanged",(function(e){s.a.locale(e)})),w.default.use(F).use(y.initReactI18next).init({fallbackLng:"zh",debug:!1,supportedLngs:["zh","en"],nonExplicitSupportedLngs:!0,interpolation:{escapeValue:!1},react:{useSuspense:!1},compatibilityJSON:"v3",resources:{en:{"brick-container":z},zh:{"brick-container":H}}}),Object(g.initI18n)();var J=w.default;Object(v.initializeLibrary)(),window.DLL_PATH={ace:"dll-of-ace.1d453681.js",d3:"dll-of-d3.1991969b.js",echarts:"dll-of-echarts.d885e687.js","editor-bricks-helper":"dll-of-editor-bricks-helper.afd5e139.js","react-dnd":"dll-of-react-dnd.0ca00465.js"},window.BRICK_NEXT_VERSIONS={"brick-container":"2.69.22","brick-dll":"2.33.3","brick-kit":"2.126.2","brick-utils":"2.38.1"},window.BRICK_NEXT_FEATURES=["edit-evaluations-and-transformations-in-devtools"];var Y,K=document.body,W=Object(g.createRuntime)(),G={menuBar:K.querySelector("#menu-bar-mount-point"),appBar:K.querySelector("#app-bar-mount-point"),loadingBar:K.querySelector("#loading-bar-mount-point"),main:K.querySelector("#main-mount-point"),bg:K.querySelector("#bg-mount-point"),portal:K.querySelector("#portal-mount-point")};if(!window.STANDALONE_MICRO_APPS){var V="".concat(W.getBasePath(),"api/gateway/data_exchange.store.ClickHouseInsertData/api/v1/data_exchange/frontend_stat");Y=m.apiAnalyzer.create({api:V})}h.http.interceptors.request.use((function(e){var t,o=new Headers((null===(t=e.options)||void 0===t?void 0:t.headers)||{});o.set("lang",J.resolvedLanguage);var n=Object(g.getMockInfo)(e.url,e.method);return n&&(e.url=n.url,o.set("easyops-mock-id",n.mockId)),a()(a()({},e),{},{options:a()(a()({},e.options),{},{headers:o})})})),h.http.interceptors.request.use((function(e){var t,o;if(Y){var{userInstanceId:n,username:r}=Object(g.getAuth)(),i=Date.now();e.meta={st:i,time:Math.round(i/1e3),uid:n,username:r}}return null!==(t=e.options)&&void 0!==t&&null!==(o=t.interceptorParams)&&void 0!==o&&o.ignoreLoadingBar||window.dispatchEvent(new CustomEvent("request.start")),e})),h.http.interceptors.response.use((function(e){var t,o;return window.dispatchEvent(new CustomEvent("request.end")),null===(t=Y)||void 0===t||t.analyses(e),"response"===(null===(o=e.config.options)||void 0===o?void 0:o.observe)?e:e.data}),(function(e){var t;return null===(t=Y)||void 0===t||t.analyses(e),window.dispatchEvent(new CustomEvent("request.end")),Promise.reject(e.error)}));var $,Z,ee="loading",te=!1;function oe(){return ne.apply(this,arguments)}function ne(){return(ne=r()((function*(){if(!te&&"ok"===ee&&$){te=!0;var e=$===location.origin||/^https?:\/\/localhost(?:$|:)/.test($);if(!e){var{allowedPreviewFromOrigins:t}=W.getMiscSettings();Array.isArray(t)&&(e=t.some(e=>e===$)),e||console.error("Preview is disallowed, from origin: ".concat($,", while allowing: ").concat(JSON.stringify(t)))}if(e){if(yield g.developHelper.loadDynamicBricksInBrickConf({brick:"next-previewer.preview-helper"}),customElements.get("next-previewer.preview-helper"))document.createElement("next-previewer.preview-helper").start($,Z)}}}))).apply(this,arguments)}if(window.parent){var re=function(){var e=r()((function*(e){var{data:t,origin:o}=e;t&&"preview-container"===t.sender&&"start-preview"===t.type&&(window.removeEventListener("message",re),$=o,Z=t.options,h.http.enableCache(!0),oe())}));return function(t){return e.apply(this,arguments)}}();window.addEventListener("message",re)}function ie(){return(ie=r()((function*(){try{if(window.MOCK_DATE){var{set:e}=yield o.e(1).then(o.t.bind(null,"xKHS",7));e(window.MOCK_DATE)}yield W.bootstrap(G),ee="ok"}catch(e){ee="failed",console.error(e),document.body.classList.add("bootstrap-error","bars-hidden"),p.a.render(l.a.createElement(f.Result,{status:"error",title:J.t("".concat("brick-container",":").concat(N.BOOTSTRAP_ERROR)),subTitle:Object(g.httpErrorToString)(e)}),G.main)}oe()}))).apply(this,arguments)}!function(){ie.apply(this,arguments)}()},JxWY:function(e,t,o){e.exports=o("XuQu")("JxWY")},XDpg:function(e,t,o){e.exports=o("XuQu")("XDpg")},XuQu:function(e,t){e.exports=dll},XzT5:function(e,t,o){e.exports=o("XuQu")("XzT5")},gdfu:function(e,t,o){e.exports=o("XuQu")("gdfu")},i8i4:function(e,t,o){e.exports=o("XuQu")("i8i4")},q1tI:function(e,t,o){e.exports=o("XuQu")("q1tI")},tYg3:function(e,t,o){e.exports=o("XuQu")("tYg3")},vA6H:function(e,t,o){e.exports=o("XuQu")("vA6H")},vuIU:function(e,t,o){e.exports=o("XuQu")("vuIU")},"wd/R":function(e,t,o){e.exports=o("XuQu")("wd/R")},yXPU:function(e,t,o){e.exports=o("XuQu")("yXPU")}});
|
|
2
|
+
//# sourceMappingURL=main.ee34aad7877647414852.js.map
|