@next-core/brick-container 2.65.22 → 2.65.25
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 +27 -0
- package/dist/dll-of-editor-bricks-helper.3879bdda.js +8 -0
- package/dist/dll-of-editor-bricks-helper.3879bdda.js.map +1 -0
- package/dist/index.html +1 -1
- package/dist/{main.eeec2c5d8a8089cbfb26.css → main.b621dd481144bad161f4.css} +33 -9
- package/dist/main.b621dd481144bad161f4.css.map +1 -0
- package/dist/{main.73d89c3869daee3c973e.js → main.e505fae07d2e316f83c0.js} +2 -2
- package/dist/{main.73d89c3869daee3c973e.js.map → main.e505fae07d2e316f83c0.js.map} +1 -1
- package/package.json +13 -13
- package/dist/dll-of-editor-bricks-helper.43033850.js +0 -8
- package/dist/dll-of-editor-bricks-helper.43033850.js.map +0 -1
- package/dist/main.eeec2c5d8a8089cbfb26.css.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/BuilderDataManager.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/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/DropZone/reverseNormalize.ts","webpack://[name]/./node_modules/@next-core/editor-bricks-helper/src/DropZone/processDrop.ts","webpack://[name]/./node_modules/@next-core/editor-bricks-helper/src/DropZone/getSnippetNodeDetail.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/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/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","targetRefNodeUid","callbackHandlers","values","concat","BuilderInternalEventType","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","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","flatMap","lifeCycleName","lifeCycleConf","messageConf","console","warn","getRelatedNodesBasedOnEvents","DATA_CHANGE","runAddNodeAction","detail","addNodes","addEdges","omit","updateBrick","redirectMountPoint","instanceId","redirectSnippetMountPoint","nodeDetails","nodeAdd","NODE_ADD","nodeAddStored","snippetApply","newNodes","appendingNodes","appendingEdges","SNIPPET_APPLY","snippetApplyStored","flattenNodeDetails","found","nodeMove","NODE_MOVE","moveNode","direction","relatedEdges","mountPoints","getRelatedEdgesAndMountPoint","orderedSiblingEdges","moveItemInList","orderedEdges","reorder","moveMountPoint","orderedMountPoints","childUids","childIds","NODE_REORDER","nodeIds","contextUpdated","context","nodeReorder","nodeDelete","nodeClick","NODE_CLICK","contextMenuChange","CONTEXT_MENU_CHANGE","onDataChange","onNodeAdd","onSnippetApply","onNodeReorder","onNodeMove","onNodeClick","onContextMenuChange","setShowRelatedNodesBasedOnEvents","show","showRelatedNodesBasedOnEvents","SHOW_RELATED_NODES_BASED_ON_EVENTS","getShowRelatedNodesBasedOnEvents","onShowRelatedNodesBasedOnEventsChange","setHoverNodeUid","hoverNodeUid","HOVER_NODE_CHANGE","getHoverNodeUid","onHoverNodeChange","toggleOutline","nodeInstanceId","outlineDisabledNodes","delete","setItem","from","OUTLINE_DISABLED_NODES_CHANGE","isOutlineEnabled","onOutlineEnabledNodesChange","setHighlightNodes","highlightNodes","HIGHLIGHT_NODES_CHANGE","getHighlightNodes","onHighlightNodesChange","updateDroppingStatus","isDraggingOver","nodeStatus","droppingStatus","DROPPING_STATUS_CHANGE","Boolean","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","brickConf","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","Math","min","max","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","jsonFieldsInBrick","yamlFieldsInBrick","ignoredFieldsInBrick","reverseNormalize","ctx","stringify","yaml","safeDump","template","isPortalCanvas","portal","processDrop","droppingParentUid","droppingParentInstanceId","droppingChildNodes","NODE_TO_ADD","brickType","bg","SNIPPET_TO_APPLY","bricks","getSnippetNodeDetail","childBrickConf","draggingNodeInstanceId","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","isDraggingOverCurrent","dropRef","useDrop","accept","isOver","shallow","getClientOffset","drop","didDrop","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","useOutlineEnabled","inapplicable","enabled","setEnabled","dll"],"mappings":"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","file":"dll-of-editor-bricks-helper.3879bdda.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}\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 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 const targetRefNodeUid = targetRefMap.get(handler.targetRef);\n if (targetRefNodeUid) {\n nodesMap.get(node.$$uid).downstreamNodes.add(targetRefNodeUid);\n nodesMap.get(targetRefNodeUid).upstreamNodes.add(node.$$uid);\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 { 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} 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\";\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 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 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}\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\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 );\n }\n\n private runAddNodeAction(detail: EventDetailOfNodeAdd): void {\n const { rootId, nodes, edges, wrapperNode } = this.data;\n const { nodeUid, parentUid, nodeUids, nodeData } = 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: 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 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 /**\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.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 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 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 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 { 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 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 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 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 {\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","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 { 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","/* 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 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><link href="<!--# 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><link href="<!--# echo var='core_root' default='' -->main.b621dd481144bad161f4.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.09fb9521.js"></script><script src="<!--# echo var='core_root' default='' -->polyfill.a498180bbeba549a6945.js"></script><script src="<!--# echo var='core_root' default='' -->main.e505fae07d2e316f83c0.js"></script></body></html>
|
|
@@ -525,7 +525,7 @@ html[data-theme="dark-v2"],
|
|
|
525
525
|
|
|
526
526
|
--mask-bg: rgba(11, 26, 47, 0.45);
|
|
527
527
|
|
|
528
|
-
--base-shadow: 0px 2px 5px 0px rgba(0, 0, 0, 0.
|
|
528
|
+
--base-shadow: 0px 2px 5px 0px rgba(0, 0, 0, 0.04);
|
|
529
529
|
--feedback-container-shadow: 0px 4px 12px 0px rgba(0, 0, 0, 0.15);
|
|
530
530
|
--left-sidebar-shadow: 0px 0px 20px 0px rgba(0, 0, 0, 0.08);
|
|
531
531
|
--right-slide-shadow: -2px 0px 8px 0px rgba(0, 0, 0, 0.14);
|
|
@@ -539,7 +539,7 @@ html[data-theme="dark-v2"],
|
|
|
539
539
|
--input-shadow: 0px 0px 0px 2px rgba(189, 225, 255, 1);
|
|
540
540
|
--input-success-shadow: 0px 0px 0px 2px rgba(229, 255, 199, 1);
|
|
541
541
|
--input-error-shadow: 0px 0px 0px 2px rgba(255, 218, 201, 1);
|
|
542
|
-
--chart-shadow: 0px
|
|
542
|
+
--chart-shadow: 0px 4px 12px 0px rgba(0, 0, 0, 0.15);
|
|
543
543
|
|
|
544
544
|
--border-width-base: 1px;
|
|
545
545
|
--border-width-double-base: 2px;
|
|
@@ -615,6 +615,7 @@ html[data-theme="dark-v2"],
|
|
|
615
615
|
--antd-item-hover-bg: #f5f5f5;
|
|
616
616
|
--antd-icon-color-hover: rgba(0, 0, 0, 0.75);
|
|
617
617
|
--antd-error-color: #ff4d4f;
|
|
618
|
+
--antd-switch-color-fade-20: rgba(189, 225, 255, 1);
|
|
618
619
|
--antd-error-color-fade-20: rgba(242, 76, 37, 0.2);
|
|
619
620
|
--antd-link-color: var(--antd-primary-color);
|
|
620
621
|
--antd-link-hover-color: #2893f7;
|
|
@@ -780,6 +781,9 @@ html[data-theme="dark-v2"],
|
|
|
780
781
|
--antd-btn-text-hover-color: var(--bg-color-button-link-hover);
|
|
781
782
|
--antd-btn-text-active-color: var(--bg-color-button-link-pressed);
|
|
782
783
|
|
|
784
|
+
/*** breadcrumb ***/
|
|
785
|
+
--antd-breadcrumb-link-color-hover: var(--antd-link-hover-color);
|
|
786
|
+
|
|
783
787
|
/*** anchor ***/
|
|
784
788
|
--antd-anchor-radio-type-title-color: #6e6e6e;
|
|
785
789
|
--antd-anchor-radio-type-bg: var(--color-fill-bg-base-1);
|
|
@@ -888,6 +892,10 @@ html[data-theme="dark-v2"],
|
|
|
888
892
|
--antd-input-number-handler-wrap-icon: var(--antd-text-color-secondary);
|
|
889
893
|
--antd-input-number-handler-wrap-hover-bg: #ebf3fd;
|
|
890
894
|
|
|
895
|
+
/*** Switch ***/
|
|
896
|
+
--antd-switch-color: var(--color-brand);
|
|
897
|
+
--antd-switch-bg: var(--antd-component-background);
|
|
898
|
+
|
|
891
899
|
/*** description ***/
|
|
892
900
|
--antd-description-title-color: var(--palette-gray-9);
|
|
893
901
|
--antd-description-item-label-color: var(--palette-gray-8);
|
|
@@ -1394,7 +1402,7 @@ html[data-theme="dark-v2"],
|
|
|
1394
1402
|
/*** card ***/
|
|
1395
1403
|
--antd-card-background: var(--color-fill-bg-container-1);
|
|
1396
1404
|
--antd-card-shadow: var(--base-shadow);
|
|
1397
|
-
--antd-card-footer-bg: var(--
|
|
1405
|
+
--antd-card-footer-bg: var(--color-fill-bg-container-1);
|
|
1398
1406
|
|
|
1399
1407
|
/*** radio dashboard ***/
|
|
1400
1408
|
--antd-dashboard-radio-bg: var(--color-fill-bg-base-5);
|
|
@@ -1598,6 +1606,10 @@ html[data-theme="dark-v2"],
|
|
|
1598
1606
|
--antd-input-number-handler-wrap-icon: var(--color-auxiliary-text);
|
|
1599
1607
|
--antd-input-number-handler-wrap-hover-bg: var(--palette-blue-2);
|
|
1600
1608
|
|
|
1609
|
+
/*** Switch ***/
|
|
1610
|
+
--antd-switch-color: var(--color-brand);
|
|
1611
|
+
--antd-switch-bg: var(--color-white);
|
|
1612
|
+
|
|
1601
1613
|
/*** description ***/
|
|
1602
1614
|
--antd-description-title-color: var(--color-header-text);
|
|
1603
1615
|
--antd-description-item-label-color: var(--color-secondary-text);
|
|
@@ -4371,7 +4383,7 @@ html {
|
|
|
4371
4383
|
transition: color 0.3s;
|
|
4372
4384
|
}
|
|
4373
4385
|
.ant-breadcrumb a:hover {
|
|
4374
|
-
color:
|
|
4386
|
+
color: var(--antd-breadcrumb-link-color-hover);
|
|
4375
4387
|
}
|
|
4376
4388
|
.ant-breadcrumb > span:last-child {
|
|
4377
4389
|
color: var(--antd-text-color);
|
|
@@ -22778,13 +22790,13 @@ span.ant-radio + * {
|
|
|
22778
22790
|
box-shadow: 0 0 0 2px var(--antd-disabled-color-fade-10);
|
|
22779
22791
|
}
|
|
22780
22792
|
.ant-switch-checked:focus {
|
|
22781
|
-
box-shadow: 0 0 0 2px
|
|
22793
|
+
box-shadow: 0 0 0 2px var(--antd-switch-color-fade-20);
|
|
22782
22794
|
}
|
|
22783
22795
|
.ant-switch:focus:hover {
|
|
22784
22796
|
box-shadow: none;
|
|
22785
22797
|
}
|
|
22786
22798
|
.ant-switch-checked {
|
|
22787
|
-
background-color:
|
|
22799
|
+
background-color: var(--antd-switch-color);
|
|
22788
22800
|
}
|
|
22789
22801
|
.ant-switch-loading,
|
|
22790
22802
|
.ant-switch-disabled {
|
|
@@ -22820,7 +22832,7 @@ span.ant-radio + * {
|
|
|
22820
22832
|
right: 0;
|
|
22821
22833
|
bottom: 0;
|
|
22822
22834
|
left: 0;
|
|
22823
|
-
background-color: var(--antd-
|
|
22835
|
+
background-color: var(--antd-switch-bg);
|
|
22824
22836
|
border-radius: 9px;
|
|
22825
22837
|
box-shadow: 0 2px 4px 0 rgba(0, 35, 11, 0.2);
|
|
22826
22838
|
transition: all 0.2s ease-in-out;
|
|
@@ -22844,7 +22856,7 @@ span.ant-radio + * {
|
|
|
22844
22856
|
vertical-align: top;
|
|
22845
22857
|
}
|
|
22846
22858
|
.ant-switch-checked .ant-switch-loading-icon {
|
|
22847
|
-
color:
|
|
22859
|
+
color: var(--antd-switch-color);
|
|
22848
22860
|
}
|
|
22849
22861
|
.ant-switch-small {
|
|
22850
22862
|
min-width: 28px;
|
|
@@ -28072,12 +28084,18 @@ li.ant-picker-time-panel-cell:not(.ant-picker-time-panel-cell-selected) .ant-pic
|
|
|
28072
28084
|
.ant-picker-header-view {
|
|
28073
28085
|
color: var(--antd-picker-panel-header-color);
|
|
28074
28086
|
}
|
|
28087
|
+
.ant-picker-header-view button:hover {
|
|
28088
|
+
color: var(--color-brand);
|
|
28089
|
+
}
|
|
28075
28090
|
.ant-picker-cell-in-view {
|
|
28076
28091
|
color: var(--antd-picker-panel-cell-color);
|
|
28077
28092
|
}
|
|
28078
28093
|
.ant-picker-cell-in-view:hover .ant-picker-cell-inner::before {
|
|
28079
28094
|
border-color: var(--antd-picker-panel-cell-today-hover-border-color);
|
|
28080
28095
|
}
|
|
28096
|
+
.ant-picker-cell-in-view.ant-picker-cell-today .ant-picker-cell-inner::before {
|
|
28097
|
+
border-color: var(--color-brand);
|
|
28098
|
+
}
|
|
28081
28099
|
.ant-picker-cell-in-view.ant-picker-cell-today.ant-picker-cell-selected {
|
|
28082
28100
|
color: var(--antd-picker-panel-cell-today-color);
|
|
28083
28101
|
}
|
|
@@ -28090,6 +28108,12 @@ li.ant-picker-time-panel-cell:not(.ant-picker-time-panel-cell-selected) .ant-pic
|
|
|
28090
28108
|
.ant-picker-cell-in-view.ant-picker-cell-selected .ant-picker-cell-inner {
|
|
28091
28109
|
color: var(--antd-picker-panel-cell-selected-color);
|
|
28092
28110
|
}
|
|
28111
|
+
.ant-picker-year-panel .ant-picker-cell-disabled .ant-picker-cell-inner {
|
|
28112
|
+
background-color: transparent;
|
|
28113
|
+
}
|
|
28114
|
+
.ant-picker-year-panel .ant-picker-cell-disabled.ant-picker-cell-selected .ant-picker-cell-inner {
|
|
28115
|
+
background-color: var(--antd-picker-panel-cell-selected-bg);
|
|
28116
|
+
}
|
|
28093
28117
|
.ant-slider-mark-text {
|
|
28094
28118
|
color: var(--antd-slider-mark-text-color);
|
|
28095
28119
|
}
|
|
@@ -29273,4 +29297,4 @@ html[data-mode="dashboard"] body.has-sub-menu #main-mount-point {
|
|
|
29273
29297
|
}
|
|
29274
29298
|
|
|
29275
29299
|
|
|
29276
|
-
/*# sourceMappingURL=main.
|
|
29300
|
+
/*# sourceMappingURL=main.b621dd481144bad161f4.css.map*/
|