@next-dll/editor-bricks-helper 0.25.12 → 0.26.0
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 +36 -0
- package/dist/{dll-of-editor-bricks-helper.0b326f7e.js → dll-of-editor-bricks-helper.9191a5c1.js} +1 -1
- package/dist/{dll-of-editor-bricks-helper.0b326f7e.js.map → dll-of-editor-bricks-helper.9191a5c1.js.map} +1 -1
- package/dist/manifest.json +1 -1
- package/package.json +5 -5
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,42 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# [0.26.0](https://github.com/easyops-cn/next-core/compare/@next-dll/editor-bricks-helper@0.25.15...@next-dll/editor-bricks-helper@0.26.0) (2022-02-14)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
* support template scoped state ([d736f85](https://github.com/easyops-cn/next-core/commit/d736f8550b4b645851e2b0a99bb2f99eee4378a2))
|
|
12
|
+
* support tpl-scoped context ([783b060](https://github.com/easyops-cn/next-core/commit/783b0605d3c74ac653120689d467384a71aaf79a))
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
## [0.25.15](https://github.com/easyops-cn/next-core/compare/@next-dll/editor-bricks-helper@0.25.14...@next-dll/editor-bricks-helper@0.25.15) (2022-02-10)
|
|
19
|
+
|
|
20
|
+
**Note:** Version bump only for package @next-dll/editor-bricks-helper
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
## [0.25.14](https://github.com/easyops-cn/next-core/compare/@next-dll/editor-bricks-helper@0.25.13...@next-dll/editor-bricks-helper@0.25.14) (2022-02-10)
|
|
27
|
+
|
|
28
|
+
**Note:** Version bump only for package @next-dll/editor-bricks-helper
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
## [0.25.13](https://github.com/easyops-cn/next-core/compare/@next-dll/editor-bricks-helper@0.25.12...@next-dll/editor-bricks-helper@0.25.13) (2022-01-28)
|
|
35
|
+
|
|
36
|
+
**Note:** Version bump only for package @next-dll/editor-bricks-helper
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
|
|
6
42
|
## [0.25.12](https://github.com/easyops-cn/next-core/compare/@next-dll/editor-bricks-helper@0.25.11...@next-dll/editor-bricks-helper@0.25.12) (2022-01-28)
|
|
7
43
|
|
|
8
44
|
**Note:** Version bump only for package @next-dll/editor-bricks-helper
|
package/dist/{dll-of-editor-bricks-helper.0b326f7e.js → dll-of-editor-bricks-helper.9191a5c1.js}
RENAMED
|
@@ -5,4 +5,4 @@ var DllOfEditorBricksHelper=function(e){var t={};function n(o){if(t[o])return t[
|
|
|
5
5
|
http://jedwatson.github.io/classnames
|
|
6
6
|
*/!function(e){!function(){var t={}.hasOwnProperty;function n(){for(var e=[],o=0;o<arguments.length;o++){var r=arguments[o];if(r){var i=typeof r;if("string"===i||"number"===i)e.push(r);else if(Array.isArray(r)){if(r.length){var a=n.apply(null,r);a&&e.push(a)}}else if("object"===i)if(r.toString===Object.prototype.toString)for(var d in r)t.call(r,d)&&r[d]&&e.push(d);else e.push(r.toString())}}return e.join(" ")}e.exports?(n.default=n,e.exports=n):window.classNames=n}()}(S);var I=S.exports,k={};
|
|
7
7
|
/*! (c) Andrea Giammarchi - ISC */try{k.EventTarget=(new EventTarget).constructor}catch(e){!function(e,t){var n=e.create,o=e.defineProperty,r=i.prototype;function i(){t.set(this,n(null))}function a(e,t,n){o(e,t,{configurable:!0,writable:!0,value:n})}function d(e){var t=e.options;return t&&t.once&&e.target.removeEventListener(this.type,e.listener),"function"==typeof e.listener?e.listener.call(e.target,this):e.listener.handleEvent(this),this._stopImmediatePropagationFlag}a(r,"addEventListener",(function(e,n,o){for(var r=t.get(this),i=r[e]||(r[e]=[]),a=0,d=i.length;a<d;a++)if(i[a].listener===n)return;i.push({target:this,listener:n,options:o})})),a(r,"dispatchEvent",(function(e){var n=t.get(this)[e.type];return n&&(a(e,"target",this),a(e,"currentTarget",this),n.slice(0).some(d,e),delete e.currentTarget,delete e.target),!0})),a(r,"removeEventListener",(function(e,n){for(var o=t.get(this),r=o[e]||(o[e]=[]),i=0,a=r.length;i<a;i++)if(r[i].listener===n)return void r.splice(i,1)})),k.EventTarget=i}(Object,new WeakMap)}var L=k.EventTarget,A=0;function j(){return A+=1}function P(e){var{nodes:t,edges:n,rootId:o}=e,r=n.slice(),i=new WeakMap,d=(e,o)=>{var r=t.find(t=>t.$$uid===e),i=Object(l.sortBy)(n.filter(e=>e.parent===r.$$uid),e=>e.sort);for(var a of(o(r,i),i))d(a.child,o)},s=(e,n,o)=>{var a,d,p;if(e.$$isExpandableTemplate&&null!==(a=e.$$templateProxy)&&void 0!==a&&a.slots&&Object(u.hasOwnProperty)(e.$$templateProxy.slots,n)&&(d=e.$$templateProxy.slots[n])&&(p=e.$$templateRefToUid.get(d.ref))){var c=t.find(e=>e.$$uid===p),g=d.refSlot;if(c.$$isExpandableTemplate)s(c,g,o);else{var v,h={child:o,parent:p,mountPoint:g,sort:void 0,$$isTemplateExpanded:!0},m=Object(l.sortBy)(r.filter(e=>e.parent===p),e=>{var t;return null!==(t=i.get(e))&&void 0!==t?t:e.sort}),f=m.filter(e=>e.$$isTemplateInternal),E=null!==(v=d.refPosition)&&void 0!==v?v:-1,C=Object(l.clamp)(E<0?f.length+1+E:E,0,f.length);m.splice(C<f.length?m.findIndex(e=>e===f[C]):m.length,0,h),m.forEach((e,t)=>{i.set(e,t)}),r.push(h)}}};return d(o,(e,t)=>{if(e.$$isExpandableTemplate)for(var n of t)s(e,n.mountPoint,n.child)}),r.length>n.length?r.map(e=>{var t=i.get(e);return void 0===t?e:a()(a()({},e),{},{sort:t})}):n}function _(e,t){var{rootId:n,nodes:o,edges:r}=e,{parentUid:i,nodeUids:d}=t;return P({rootId:n,nodes:o,edges:r.filter(e=>!e.$$isTemplateExpanded).map(e=>{var t=e.parent===i?d.indexOf(e.child):-1;return t>=0?a()(a()({},e),{},{sort:t}):e})})}function w(e,t){var{rootId:n,nodes:o,edges:r}=t,i=new Set;return function e(t,n,o){o.add(t);var r=new Set;for(var i of n)i.parent===t&&r.add(i.child);for(var a of r)e(a,n,o)}(e,r,i),{rootId:n,nodes:o.filter(e=>!i.has(e.$$uid)),edges:r.filter(e=>!i.has(e.parent)&&!i.has(e.child))}}function B(e,t,n,o,r){for(var i of t)if(i){if(i.target){var a=o.get(i.target);a&&(n.get(e.$$uid).downstreamNodes.add(a),n.get(a).upstreamNodes.add(e.$$uid))}else if(i.targetRef){var d=r.get(i.targetRef);d&&(n.get(e.$$uid).downstreamNodes.add(d),n.get(d).upstreamNodes.add(e.$$uid))}if(i.callback)for(var s of Object.values(i.callback))B(e,[].concat(s),n,o,r)}}var U,Z=["parent","children","graphInfo","mountPoint"],R=/[<{]/;function M(e,t,n){var o=[];e.brick&&o.push(e.brick.replace(/\./g,"\\."));var r,i,a=Object(u.normalizeBuilderNode)(e),d=[];for(var s of["properties","events","lifeCycle"]){var p=Object(l.cloneDeep)(null==a?void 0:a[s]);if(d.push(["$$parsed".concat(Object(l.upperFirst)(s)),null!=p?p:{}]),"properties"===s){var c,g,v=void 0;"string"!=typeof(g=null==p?void 0:p.id)||R.test(g)?"string"!=typeof(v=null==p||null===(c=p.dataset)||void 0===c?void 0:c.testid)||R.test(v)||(i=v):(r=g,o.push("#".concat(r)))}}return Object.fromEntries(Object.entries(e).filter(e=>!Z.includes(e[0])).concat([["alias",e.alias||(Object(u.isBrickNode)(e)?r||i||e.brick.split(".").pop():void 0)],["$$uid",t],["$$matchedSelectors",o],["$$isTemplateInternalNode",n],["$$normalized",a]]).concat(d))}function H(e,t,n){var o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],r=[],i=[],a=(e,t,d,s,p)=>{var c,g,v,h,m=M(e,t,s);if(r.push(m),p&&m.ref&&p.set(m.ref,t),Object(u.isBrickNode)(m)&&(!m.brick.includes(".")&&m.brick.startsWith("tpl-")&&!d.has(m.brick)&&(h=null==n?void 0:n.get(m.brick))&&(null===(c=h.children)||void 0===c?void 0:c.length)>0||m.brick.includes(".tpl-")&&(h=null==o||null===(g=o.find(e=>e.storyId===m.brick))||void 0===g?void 0:g.originData)&&(null===(v=h.children)||void 0===v?void 0:v.length)>0)){d.add(m.brick),m.$$isExpandableTemplate=!0,m.$$templateProxy=h.proxy&&JSON.parse(h.proxy);var f=new Map;if(m.$$templateRefToUid=f,Object(l.sortBy)(h.children,[e=>{var t;return null!==(t=e.sort)&&void 0!==t?t:-1/0}]).forEach((e,n)=>{var o=j();a(e,o,new Set(d),!0,f),i.push({child:o,parent:t,mountPoint:"",sort:n,$$isTemplateInternal:!0})}),!m.$$isTemplateInternalNode){var E=(e,t,n)=>{var o;if(null!==(o=e.$$templateProxy)&&void 0!==o&&o.slots){var i,a=Object.entries(null===(i=e.$$templateProxy)||void 0===i?void 0:i.slots).filter(e=>void 0===t||e[0]===t),d=function(t,o){var i=e.$$templateRefToUid.get(o.ref);if(i){var a=r.find(e=>e.$$uid===i);if(a.$$isExpandableTemplate)E(a,o.refSlot,t);else{a.$$delegatedSlots||(a.$$delegatedSlots=new Map);var d=a.$$delegatedSlots.get(o.refSlot);d||(d=[],a.$$delegatedSlots.set(o.refSlot,d)),d.push({templateUid:m.$$uid,templateMountPoint:n||t})}}};for(var[s,l]of a)d(s,l)}};E(m);var C=(e,t)=>{var n;if(null!==(n=e.$$templateProxy)&&void 0!==n&&n.properties){var o,i=Object.entries(null===(o=e.$$templateProxy)||void 0===o?void 0:o.properties).filter(e=>void 0===t||e[0]===t);for(var[a,d]of i)Object(u.hasOwnProperty)(e.$$parsedProperties,a)&&q(d)&&function(){var t=e.$$templateRefToUid.get(d.ref),n=e.$$parsedProperties[a];if(t){var o=r.find(e=>e.$$uid===t);o.$$parsedProperties[d.refProperty]=n,o.$$isExpandableTemplate&&C(o,d.refProperty)}}()}};C(m)}}if(Array.isArray(e.children)){var b;switch(m.type){case"bricks":case"custom-template":b="bricks";break;case"routes":b="routes"}Object(l.sortBy)(e.children,[e=>{var t;return null!==(t=e.sort)&&void 0!==t?t:-1/0}]).forEach((e,n)=>{var o,r=j();a(e,r,new Set(d),s,p),i.push({child:r,parent:t,mountPoint:null!==(o=b)&&void 0!==o?o:e.mountPoint,sort:n,$$isTemplateInternal:s,$$isTemplateDelegated:m.$$isExpandableTemplate})})}};return a(e,t,new Set),{nodes:r,edges:i}}function q(e){return!!e.ref&&!!e.refProperty}function G(e,t){return e.find(e=>e.$$uid===t).$$isExpandableTemplate}!function(e){e.NODE_ADD="builder.node.add",e.NODE_MOVE="builder.node.move",e.NODE_REORDER="builder.node.reorder",e.NODE_CLICK="builder.node.click",e.SNIPPET_APPLY="builder.snippet.apply",e.CONTEXT_MENU_CHANGE="builder.contextMenu.change",e.DATA_CHANGE="builder.data.change",e.SHARED_EDITOR_LIST_CHANGE="builder.sharedEditorList.change",e.ROUTE_LIST_CHANGE="builder.routeList.change",e.HOVER_NODE_CHANGE="builder.hoverNode.change",e.SHOW_RELATED_NODES_BASED_ON_EVENTS="builder.showRelatedNodesBasedOnEvents.change",e.HIGHLIGHT_NODES_CHANGE="builder.highlightNodes.change",e.OUTLINE_DISABLED_NODES_CHANGE="builder.outlineDisabledNodes.change",e.DROPPING_STATUS_CHANGE="builder.droppingStatus.change"}(U||(U={}));class V{constructor(){var e;s()(this,"data",{rootId:null,nodes:[],edges:[]}),s()(this,"hoverNodeUid",void 0),s()(this,"sharedEditorList",void 0),s()(this,"routeList",void 0),s()(this,"storyList",void 0),s()(this,"eventTarget",new L),s()(this,"contextMenuStatus",{active:!1}),s()(this,"showRelatedNodesBasedOnEvents",void 0),s()(this,"relatedNodesBasedOnEventsMap",void 0),s()(this,"highlightNodes",new Set),s()(this,"templateSourceMap",void 0),s()(this,"droppingStatus",new Map),s()(this,"localJsonStorage",new u.JsonStorage(localStorage)),s()(this,"outlineDisabledNodes",new Set(null!==(e=this.localJsonStorage.getItem("builder-outline-disabled-nodes"))&&void 0!==e?e:[])),s()(this,"runAddNodeAction",e=>{var{rootId:t,nodes:n,edges:o}=this.data,{nodeUid:r,parentUid:i,nodeUids:d,nodeData:s}=e,{nodes:u,edges:p}=H(Object(l.omit)(s,["parent"]),r,this.templateSourceMap,this.getStoryList()),c={rootId:t,nodes:n.concat(u),edges:o.concat({parent:i,child:r,mountPoint:s.mountPoint,sort:void 0,$$isTemplateDelegated:G(n,i)}).concat(p)};this.data=a()(a()({},c),{},{edges:_(c,{parentUid:i,nodeUids:d})}),this.triggerDataChange()})}getData(){return this.data}getContextMenuStatus(){return this.contextMenuStatus}getRelatedNodesBasedOnEventsMap(){return this.relatedNodesBasedOnEventsMap}sharedEditorListInit(e){this.sharedEditorList=e,this.eventTarget.dispatchEvent(new CustomEvent(U.SHARED_EDITOR_LIST_CHANGE))}getSharedEditorList(){var e;return null!==(e=this.sharedEditorList)&&void 0!==e?e:[]}onSharedEditorListChange(e){return this.eventTarget.addEventListener(U.SHARED_EDITOR_LIST_CHANGE,e),()=>{this.eventTarget.removeEventListener(U.SHARED_EDITOR_LIST_CHANGE,e)}}routeListInit(e){this.routeList=e,this.eventTarget.dispatchEvent(new CustomEvent(U.ROUTE_LIST_CHANGE))}getRouteList(){var e;return null!==(e=this.routeList)&&void 0!==e?e:[]}storyListInit(e){this.storyList=e}getStoryList(){return this.storyList}onRouteListChange(e){return this.eventTarget.addEventListener(U.ROUTE_LIST_CHANGE,e),()=>{this.eventTarget.removeEventListener(U.ROUTE_LIST_CHANGE,e)}}dataInit(e,t){this.templateSourceMap=t;var n=j(),o=a()({rootId:n},H(e,n,t,this.storyList));this.data=a()(a()({},o),{},{edges:P(o)}),this.triggerDataChange()}triggerDataChange(){var{rootId:e,nodes:t}=this.data,n="custom-template"===t.find(t=>t.$$uid===e).type;this.relatedNodesBasedOnEventsMap=function(e,t){var n=new Map,o=new Map,r=new Map;for(var i of e){for(var a of(n.set(i.$$uid,{upstreamNodes:new Set,downstreamNodes:new Set}),i.$$matchedSelectors))o.get(a)||o.set(a,i.$$uid);t&&i.ref&&r.set(i.ref,i.$$uid)}for(var d of e){var s=[];Object(l.isEmpty)(d.$$parsedEvents)||(s=Object.values(d.$$parsedEvents).flat()),Object(l.isEmpty)(d.$$parsedLifeCycle)||(s=s.concat(Object.entries(d.$$parsedLifeCycle).flatMap(e=>{var[t,n]=e;switch(t){case"onBeforePageLoad":case"onPageLoad":case"onPageLeave":case"onBeforePageLeave":case"onAnchorLoad":case"onAnchorUnload":case"onMessageClose":return n;case"onMessage":return[].concat(n).flatMap(e=>[].concat(e.handlers));default:return console.warn("unknown lifeCycle: ".concat(t)),[]}}))),s.length>0&&B(d,s,n,o,r)}return n}(t,n),this.eventTarget.dispatchEvent(new CustomEvent(U.DATA_CHANGE))}updateBrick(e){this.data=w(e.nodeUid,this.data),this.runAddNodeAction(e)}nodeAdd(e){this.runAddNodeAction(e),this.eventTarget.dispatchEvent(new CustomEvent(U.NODE_ADD,{detail:e}))}nodeAddStored(e){var{rootId:t,nodes:n,edges:o}=this.data,{nodeUid:r,nodeData:i}=e;this.data={rootId:t,nodes:n.map(e=>e.$$uid===r?a()(a()({},e),{},{id:i.id,instanceId:i.instanceId}):e),edges:o},this.triggerDataChange()}snippetApply(e){var{rootId:t,nodes:n,edges:o}=this.data,{nodeDetails:r,parentUid:i,nodeUids:d}=e,s=n.slice(),u=o.slice(),p=e=>{var{parentUid:t,nodeUid:n,nodeData:o,children:r}=e,{nodes:i,edges:a}=H(Object(l.omit)(o,["parent"]),n,this.templateSourceMap,this.storyList);for(var d of(s.push(...i),u.push({parent:t,child:n,mountPoint:o.mountPoint,sort:o.sort,$$isTemplateDelegated:G(s,t)},...a),r))p(d)};for(var c of r)p(c);var g={rootId:t,nodes:s,edges:u};this.data=a()(a()({},g),{},{edges:_(g,{parentUid:i,nodeUids:d})}),this.triggerDataChange(),this.eventTarget.dispatchEvent(new CustomEvent(U.SNIPPET_APPLY,{detail:e}))}snippetApplyStored(e){var{rootId:t,nodes:n,edges:o}=this.data,{flattenNodeDetails:r}=e;this.data={rootId:t,nodes:n.map(e=>{var t=r.find(t=>t.nodeUid===e.$$uid);return t?a()(a()({},e),{},{id:t.nodeData.id,instanceId:t.nodeData.instanceId}):e}),edges:o},this.triggerDataChange()}nodeMove(e){var{rootId:t,nodes:n,edges:o}=this.data,{nodeUid:r,parentUid:i,nodeUids:d,nodeData:s}=e,l={rootId:t,nodes:n,edges:o.filter(e=>e.child!==r).concat({parent:i,child:r,mountPoint:s.mountPoint,sort:void 0,$$isTemplateDelegated:G(n,i)})};this.data=a()(a()({},l),{},{edges:_(l,{parentUid:i,nodeUids:d})}),this.triggerDataChange(),this.eventTarget.dispatchEvent(new CustomEvent(U.NODE_MOVE,{detail:e}))}contextUpdated(e){var{rootId:t,nodes:n,edges:o}=this.data;this.data={rootId:t,edges:o,nodes:n.map(n=>n.$$uid===t?a()(a()({},n),{},{context:e.context}):n)},this.triggerDataChange()}nodeReorder(e){var{nodeUids:t,parentUid:n}=e;this.data=a()(a()({},this.data),{},{edges:_(this.data,{parentUid:n,nodeUids:t})}),this.triggerDataChange(),this.eventTarget.dispatchEvent(new CustomEvent(U.NODE_REORDER,{detail:e}))}nodeDelete(e){this.data=w(e.$$uid,this.data),this.triggerDataChange()}nodeClick(e){this.eventTarget.dispatchEvent(new CustomEvent(U.NODE_CLICK,{detail:e}))}contextMenuChange(e){this.contextMenuStatus=e,this.eventTarget.dispatchEvent(new CustomEvent(U.CONTEXT_MENU_CHANGE))}onDataChange(e){return this.eventTarget.addEventListener(U.DATA_CHANGE,e),()=>{this.eventTarget.removeEventListener(U.DATA_CHANGE,e)}}onNodeAdd(e){return this.eventTarget.addEventListener(U.NODE_ADD,e),()=>{this.eventTarget.removeEventListener(U.NODE_ADD,e)}}onSnippetApply(e){return this.eventTarget.addEventListener(U.SNIPPET_APPLY,e),()=>{this.eventTarget.removeEventListener(U.SNIPPET_APPLY,e)}}onNodeReorder(e){return this.eventTarget.addEventListener(U.NODE_REORDER,e),()=>{this.eventTarget.removeEventListener(U.NODE_REORDER,e)}}onNodeMove(e){return this.eventTarget.addEventListener(U.NODE_MOVE,e),()=>{this.eventTarget.removeEventListener(U.NODE_MOVE,e)}}onNodeClick(e){return this.eventTarget.addEventListener(U.NODE_CLICK,e),()=>{this.eventTarget.removeEventListener(U.NODE_CLICK,e)}}onContextMenuChange(e){return this.eventTarget.addEventListener(U.CONTEXT_MENU_CHANGE,e),()=>{this.eventTarget.removeEventListener(U.CONTEXT_MENU_CHANGE,e)}}setShowRelatedNodesBasedOnEvents(e){this.showRelatedNodesBasedOnEvents=e,this.eventTarget.dispatchEvent(new CustomEvent(U.SHOW_RELATED_NODES_BASED_ON_EVENTS))}getShowRelatedNodesBasedOnEvents(){return this.showRelatedNodesBasedOnEvents}onShowRelatedNodesBasedOnEventsChange(e){return this.eventTarget.addEventListener(U.SHOW_RELATED_NODES_BASED_ON_EVENTS,e),()=>{this.eventTarget.removeEventListener(U.SHOW_RELATED_NODES_BASED_ON_EVENTS,e)}}setHoverNodeUid(e){this.hoverNodeUid!==e&&(this.hoverNodeUid=e,this.eventTarget.dispatchEvent(new CustomEvent(U.HOVER_NODE_CHANGE)))}getHoverNodeUid(){return this.hoverNodeUid}onHoverNodeChange(e){return this.eventTarget.addEventListener(U.HOVER_NODE_CHANGE,e),()=>{this.eventTarget.removeEventListener(U.HOVER_NODE_CHANGE,e)}}toggleOutline(e){this.outlineDisabledNodes.has(e)?this.outlineDisabledNodes.delete(e):this.outlineDisabledNodes.add(e),this.localJsonStorage.setItem("builder-outline-disabled-nodes",Array.from(this.outlineDisabledNodes)),this.eventTarget.dispatchEvent(new CustomEvent(U.OUTLINE_DISABLED_NODES_CHANGE))}isOutlineEnabled(e){return!this.outlineDisabledNodes.has(e)}onOutlineEnabledNodesChange(e){return this.eventTarget.addEventListener(U.OUTLINE_DISABLED_NODES_CHANGE,e),()=>{this.eventTarget.removeEventListener(U.OUTLINE_DISABLED_NODES_CHANGE,e)}}setHighlightNodes(e){this.highlightNodes=e,this.eventTarget.dispatchEvent(new CustomEvent(U.HIGHLIGHT_NODES_CHANGE))}getHighlightNodes(){return this.highlightNodes}onHighlightNodesChange(e){return this.eventTarget.addEventListener(U.HIGHLIGHT_NODES_CHANGE,e),()=>{this.eventTarget.removeEventListener(U.HIGHLIGHT_NODES_CHANGE,e)}}updateDroppingStatus(e,t,n){var o=this.droppingStatus.get(e);this.droppingStatus=new Map(Array.from(this.droppingStatus.entries()).concat([[e,new Map((o?Array.from(o):[]).concat([[t,n]]))]])),this.eventTarget.dispatchEvent(new CustomEvent(U.DROPPING_STATUS_CHANGE)),this.hoverNodeUid&&Array.from(this.droppingStatus.values()).flatMap(e=>Array.from(e.values())).some(Boolean)&&this.setHoverNodeUid(void 0)}getDroppingStatus(){return this.droppingStatus}onDroppingStatusChange(e){return this.eventTarget.addEventListener(U.DROPPING_STATUS_CHANGE,e),()=>{this.eventTarget.removeEventListener(U.DROPPING_STATUS_CHANGE,e)}}}var X=r.a.createContext({});function z(){var{manager:e}=r.a.useContext(X);if(!e)throw new Error("Expected builder data context");return e}function Y(){var e=z(),[t,n]=Object(o.useState)(e.getData());return Object(o.useEffect)(()=>e.onDataChange(()=>{n(e.getData())}),[e]),t}function Q(e){var{nodeUid:t,isRoot:n}=e,{rootId:r,nodes:i}=Y(),a=n?r:t;return Object(o.useMemo)(()=>i.find(e=>e.$$uid===a),[i,a])}function K(){var e=z(),[t,n]=Object(o.useState)(e.getContextMenuStatus());return Object(o.useEffect)(()=>e.onContextMenuChange(()=>{n(e.getContextMenuStatus())}),[e]),t}function F(){var e=z(),[t,n]=Object(o.useState)(e.getShowRelatedNodesBasedOnEvents());return Object(o.useEffect)(()=>e.onShowRelatedNodesBasedOnEventsChange(()=>{n(e.getShowRelatedNodesBasedOnEvents())}),[e]),t}function J(e,t){void 0===t&&(t={});var n=t.insertAt;if(e&&"undefined"!=typeof document){var o=document.head||document.getElementsByTagName("head")[0],r=document.createElement("style");r.type="text/css","top"===n&&o.firstChild?o.insertBefore(r,o.firstChild):o.appendChild(r),r.styleSheet?r.styleSheet.cssText=e:r.appendChild(document.createTextNode(e))}}var W={editorContainer:"EditorContainer--editorContainer--1j8iqnx",nodeAlias:"EditorContainer--nodeAlias--1j8iqnx",highlight:"EditorContainer--highlight--1j8iqnx",hover:"EditorContainer--hover--1j8iqnx",active:"EditorContainer--active--1j8iqnx",dropping:"EditorContainer--dropping--1j8iqnx",editorBody:"EditorContainer--editorBody--1j8iqnx",transparentContainer:"EditorContainer--transparentContainer--1j8iqnx",isUpstreamNode:"EditorContainer--isUpstreamNode--1j8iqnx",isDownstreamNode:"EditorContainer--isDownstreamNode--1j8iqnx",arrow:"EditorContainer--arrow--1j8iqnx"};function ee(e,t){for(var n=e;n;){if(n===t)return!0;if(n.classList.contains(W.editorContainer)&&!n.classList.contains(W.isTemplateInternalNode))return!1;n=n.parentElement}return!1}function te(){var e=z(),[t,n]=Object(o.useState)(e.getHoverNodeUid());return Object(o.useEffect)(()=>e.onHoverNodeChange(()=>{n(e.getHoverNodeUid())}),[e]),t}function ne(){var e=z(),[t,n]=Object(o.useState)(e.getHighlightNodes());return Object(o.useEffect)(()=>e.onHighlightNodesChange(()=>{n(e.getHighlightNodes())}),[e]),t}function oe(){var e=z(),[t,n]=Object(o.useState)(e.getDroppingStatus());return Object(o.useEffect)(()=>e.onDroppingStatusChange(()=>{n(e.getDroppingStatus())}),[e]),t}function re(e){var t,n,{nodeUid:i,type:a,isTransparentContainer:d,editorContainerStyle:s,editorBodyStyle:l,children:u}=e,p=Object(o.useRef)(),g=ne(),v=Q({nodeUid:i}),[h,m]=Object(o.useState)(!1),[f,E]=Object(o.useState)(!1),C=K(),b=te(),N=F(),D=z(),[y,O]=Object(o.useState)(b===i),x=null!=a?a:c.DEFAULT,T=Object(o.useRef)(b),$=oe();Object(o.useEffect)(()=>{T.current=b},[b]);var S=Object(o.useCallback)(e=>{e.stopPropagation(),O(!0),T.current!==i&&D.setHoverNodeUid(i)},[i,D]),k=Object(o.useCallback)(e=>{e.stopPropagation(),O(!1),T.current===i&&D.setHoverNodeUid(void 0)},[i,D]);Object(o.useEffect)(()=>{if(!v.$$isTemplateInternalNode){var e=p.current;return e.addEventListener("mouseover",S),e.addEventListener("mouseout",k),()=>{e.removeEventListener("mouseover",S),e.removeEventListener("mouseout",k)}}},[S,k,v]),Object(o.useEffect)(()=>{if(!v.$$isTemplateInternalNode&&(O(b===i),N)){var e,t,n=D.getRelatedNodesBasedOnEventsMap(),o=null===(e=n.get(b))||void 0===e?void 0:e.upstreamNodes.has(i);m(o);var r=null===(t=n.get(b))||void 0===t?void 0:t.downstreamNodes.has(i);E(r)}},[b,v,i,N,D]);var L=Object(o.useCallback)(e=>!v.$$isTemplateInternalNode&&ee(e.target,p.current),[v]),A=Object(o.useCallback)(e=>{L(e)&&D.nodeClick(v)},[L,D,v]),j=Object(o.useCallback)(e=>{L(e)&&(e.preventDefault(),D.contextMenuChange({active:!0,node:v,x:e.clientX,y:e.clientY}))},[L,D,v]);return r.a.createElement("div",{className:I(W.editorContainer,W[x],{[W.transparentContainer]:d,[W.dropping]:Array.from(null!==(t=null===(n=$.get(i))||void 0===n?void 0:n.values())&&void 0!==t?t:[]).some(Boolean),[W.hover]:y,[W.active]:C.active&&C.node.$$uid===i,[W.isDownstreamNode]:!y&&f,[W.isUpstreamNode]:!y&&h,[W.highlight]:g.has(i),[W.isTemplateInternalNode]:v.$$isTemplateInternalNode}),style:s,ref:p,onClick:A,onContextMenu:j},r.a.createElement("div",{className:W.nodeAlias},!y&&(f?r.a.createElement("span",{className:W.arrow},"↓"):h?r.a.createElement("span",{className:W.arrow},"↑"):null),v.alias||v.brick),r.a.createElement("div",{className:W.editorBody,style:l},u))}J(".EditorContainer--editorContainer--1j8iqnx {\n position: relative;\n}\n\n.EditorContainer--nodeAlias--1j8iqnx {\n position: absolute;\n top: -25px;\n height: calc(25px + var(--editor-brick-border-radius));\n background-color: #d6d6d6;\n border: 1px solid var(--editor-brick-stroke-color);\n padding: 0 5px;\n border-radius: 2px;\n color: #737373;\n white-space: nowrap;\n visibility: hidden;\n pointer-events: none;\n}\n\n.EditorContainer--editorContainer--1j8iqnx.EditorContainer--highlight--1j8iqnx > .EditorContainer--nodeAlias--1j8iqnx,\n.EditorContainer--editorContainer--1j8iqnx.EditorContainer--hover--1j8iqnx > .EditorContainer--nodeAlias--1j8iqnx,\n.EditorContainer--editorContainer--1j8iqnx.EditorContainer--active--1j8iqnx > .EditorContainer--nodeAlias--1j8iqnx,\n.EditorContainer--editorContainer--1j8iqnx.EditorContainer--dropping--1j8iqnx > .EditorContainer--nodeAlias--1j8iqnx {\n visibility: visible;\n}\n\n.EditorContainer--editorBody--1j8iqnx {\n position: relative;\n border-radius: var(--editor-brick-border-radius);\n background: #fff;\n}\n\n.EditorContainer--transparentContainer--1j8iqnx > .EditorContainer--editorBody--1j8iqnx {\n margin: -1px;\n}\n\n.EditorContainer--transparentContainer--1j8iqnx > .EditorContainer--nodeAlias--1j8iqnx {\n left: -1px;\n}\n\n.EditorContainer--nodeAlias--1j8iqnx,\n.EditorContainer--editorContainer--1j8iqnx.EditorContainer--hover--1j8iqnx > .EditorContainer--editorBody--1j8iqnx,\n.EditorContainer--editorContainer--1j8iqnx.EditorContainer--active--1j8iqnx > .EditorContainer--editorBody--1j8iqnx,\n.EditorContainer--editorContainer--1j8iqnx.EditorContainer--dropping--1j8iqnx > .EditorContainer--editorBody--1j8iqnx {\n box-shadow: 0 0 0 1px var(--editor-brick-stroke-color-active);\n}\n\n.EditorContainer--editorContainer--1j8iqnx.EditorContainer--isUpstreamNode--1j8iqnx > .EditorContainer--nodeAlias--1j8iqnx,\n.EditorContainer--editorContainer--1j8iqnx.EditorContainer--isDownstreamNode--1j8iqnx > .EditorContainer--nodeAlias--1j8iqnx {\n visibility: visible;\n background-color: #f7f7f7;\n}\n\n.EditorContainer--editorContainer--1j8iqnx.EditorContainer--isDownstreamNode--1j8iqnx > .EditorContainer--editorBody--1j8iqnx,\n.EditorContainer--editorContainer--1j8iqnx.EditorContainer--isDownstreamNode--1j8iqnx > .EditorContainer--nodeAlias--1j8iqnx {\n box-shadow: 0 0 0 1px rgba(22, 224, 57, 0.3);\n}\n\n.EditorContainer--editorContainer--1j8iqnx.EditorContainer--isUpstreamNode--1j8iqnx > .EditorContainer--editorBody--1j8iqnx,\n.EditorContainer--editorContainer--1j8iqnx.EditorContainer--isUpstreamNode--1j8iqnx > .EditorContainer--nodeAlias--1j8iqnx {\n box-shadow: 0 0 0 1px rgba(224, 88, 22, 0.3);\n}\n\n.EditorContainer--editorContainer--1j8iqnx.EditorContainer--highlight--1j8iqnx > .EditorContainer--editorBody--1j8iqnx,\n.EditorContainer--editorContainer--1j8iqnx.EditorContainer--highlight--1j8iqnx > .EditorContainer--nodeAlias--1j8iqnx {\n box-shadow: 0 0 0 1px var(--theme-orange-color);\n}\n\n.EditorContainer--arrow--1j8iqnx {\n font-size: 10px;\n padding: 0 4px;\n position: relative;\n bottom: 1px;\n}\n");function ie(){return(ie=C()((function*(e,t){var n=[];if(Object(u.isRouteNode)(e))n.push("basic-bricks.any-route--editor");else{if(!Object(u.isBrickNode)(e))throw new Error("Unsupported node type: ".concat(e.type));e.brick.includes("-")&&n.push("".concat(e.brick,"--editor")),t&&n.push(t),n.push("basic-bricks.any-brick--editor")}for(var o of n){try{yield b.developHelper.loadEditorBricks([o])}catch(e){throw new Error('Load editor brick "'.concat(o,'" failed'))}if(customElements.get(o))return o}throw new Error('Editor brick "'.concat(n.join(", "),'" not found'))}))).apply(this,arguments)}var ae="EditorBrickAsComponent--slotContentLayoutBlock--1aed4lu",de="EditorBrickAsComponent--selfLayoutBlock--1aed4lu",se="EditorBrickAsComponent--selfLayoutContainer--1aed4lu",le="EditorBrickAsComponent--slotContentLayoutInline--1aed4lu",ue="EditorBrickAsComponent--selfLayoutInline--1aed4lu",pe="EditorBrickAsComponent--dragging--1aed4lu",ce="EditorBrickAsComponent--baseView--1aed4lu";function ge(e){var t,{node:n,slotContentLayout:i}=e,[a,d]=r.a.useState(!1),[s,l]=r.a.useState(),[c,h]=r.a.useState(),{edges:m}=Y(),E=(t=z(),Object(o.useMemo)(()=>t.getStoryList(),[t])),N=r.a.useMemo(()=>m.some(e=>e.parent===n.$$uid),[n,m]),D=Object(o.useMemo)(()=>Object(b.getRuntime)().getFeatureFlags()["next-builder-installed-bricks"],[]),y=Object(o.useMemo)(()=>D?null:function(e,t){var n=null==t?void 0:t.find(t=>t.storyId===e.brick);return null==n?void 0:n.doc}(n,E),[D,n,E]),O=function(){var e=z(),t=Object(o.useCallback)(()=>new Map(e.getSharedEditorList().map(e=>[e.id,e])),[e]),[n,r]=Object(o.useState)(t());return Object(o.useEffect)(()=>e.onSharedEditorListChange(()=>{r(t())}),[t,e]),n}(),x=Object(o.useMemo)(()=>D&&Object(u.isBrickNode)(n)?O.get(n.brick):null,[O,D,n]);r.a.useEffect(()=>{C()((function*(){var e,t;d(!1);try{e=yield function(e,t){return ie.apply(this,arguments)}(n,D?null==x?void 0:x.editor:null==y?void 0:y.editor)}catch(e){console.error(e),t=e.message}l(e),h(t),d(!0)}))()},[y,x,D,n]);var T=r.a.useMemo(()=>({brick:s,properties:{nodeUid:n.$$uid,editorProps:D?null==x?void 0:x.editorProps:null==y?void 0:y.editorProps}}),[y,s,x,D,n.$$uid]),$=r.a.useMemo(()=>{var e,t;a&&s&&(t=customElements.get(s).selfLayout);return null!==(e=t)&&void 0!==e?e:N?g.CONTAINER:g.INLINE},[a,s,N]),[{isDragging:S},k]=Object(f.useDrag)({item:{type:p.NODE_TO_MOVE,nodeUid:n.$$uid,nodeInstanceId:n.instanceId,nodeId:n.id},options:{dropEffect:"move"},collect:e=>({isDragging:e.isDragging()})});return a?s?r.a.createElement("div",{className:I({[ae]:i===v.BLOCK,[le]:i===v.INLINE,[ue]:$===g.INLINE,[de]:$===g.BLOCK,[se]:$===g.CONTAINER,[pe]:S,__isTemplateInternalNode:n.$$isTemplateInternalNode})},r.a.createElement("div",{ref:n.$$isTemplateInternalNode?void 0:k,draggable:!n.$$isTemplateInternalNode,className:I({[ce]:"basic-bricks.micro-view"===n.brick||"basic-bricks.micro-app"===n.brick||"basic-bricks.easy-view"===n.brick})},r.a.createElement(b.BrickAsComponent,{useBrick:T}))):r.a.createElement("span",null,c):r.a.createElement("span",null,"Loading...")}function ve(e){var{nodeUid:t,isRoot:n,doNotExpandTemplates:r}=e,{rootId:i,nodes:a,edges:d}=Y();return Object(o.useMemo)(()=>he({nodes:a,edges:d,nodeUid:n?i:t,doNotExpandTemplates:r}),[r,d,n,t,a,i])}function he(e){var{nodeUid:t,nodes:n,edges:o,doNotExpandTemplates:r}=e,i=new Map,a=Object(l.sortBy)(o.filter(e=>e.parent===t&&(r?!e.$$isTemplateInternal:!e.$$isTemplateDelegated)),[e=>e.sort]),d=function(e){var t=n.find(t=>t.$$uid===e.child);i.has(e.mountPoint)?i.get(e.mountPoint).push(t):i.set(e.mountPoint,[t])};for(var s of a)d(s);return Array.from(i.entries()).map(e=>{var[t,n]=e;return{mountPoint:t,childNodes:n}})}function me(){var{edges:e}=Y();return Object(o.useCallback)((t,n)=>{var o=t=>t!==n&&!e.some(e=>e.parent===t&&!o(e.child));return o(t)},[e])}J(".EditorBrickAsComponent--slotContentLayoutBlock--1aed4lu.EditorBrickAsComponent--selfLayoutBlock--1aed4lu,\n.EditorBrickAsComponent--slotContentLayoutBlock--1aed4lu.EditorBrickAsComponent--selfLayoutContainer--1aed4lu {\n grid-column: 1 / -1;\n}\n\n.EditorBrickAsComponent--slotContentLayoutInline--1aed4lu {\n margin: 0 var(--editor-brick-gap-half);\n}\n\n.EditorBrickAsComponent--slotContentLayoutInline--1aed4lu.EditorBrickAsComponent--selfLayoutInline--1aed4lu,\n.EditorBrickAsComponent--slotContentLayoutInline--1aed4lu.EditorBrickAsComponent--selfLayoutBlock--1aed4lu {\n width: 150px;\n}\n\n.EditorBrickAsComponent--slotContentLayoutInline--1aed4lu.EditorBrickAsComponent--selfLayoutContainer--1aed4lu {\n width: 100%;\n}\n\n.EditorBrickAsComponent--dragging--1aed4lu {\n opacity: 0.3;\n}\n\n.EditorBrickAsComponent--baseView--1aed4lu {\n height: 100%;\n min-height: 100%;\n}\n");function fe(e,t,n,o){var r=function(e,t){var n=e.getBoundingClientRect(),o=[],r=Array.from(t.children).filter(e=>!e.classList.contains("__isTemplateInternalNode"));if(r.length>0){var i={cells:[]},d=[i];r.forEach((e,t)=>{var n,o,r=e.getBoundingClientRect(),a={index:t,top:r.top,bottom:r.bottom,left:r.left,right:r.right},s=i.cells.length>0&&i.cells[i.cells.length-1];!s||Ee(r.left,s.right)>0&&Ee(r.top,s.bottom)<0?(i.cells.push(a),i.top=Math.min(null!==(n=i.top)&&void 0!==n?n:1/0,r.top),i.bottom=Math.max(null!==(o=i.bottom)&&void 0!==o?o:-1/0,r.bottom)):(i={cells:[a],top:r.top,bottom:r.bottom},d.push(i))});var s=n.top,l=n.top;d.forEach((e,t)=>{if(1===e.cells.length){var r=e.cells[0],i=(r.top+r.bottom)/2;if(o.push({rect:{top:s,bottom:i,left:n.left,right:n.right},cursor:{index:r.index,y:(l+r.top)/2-n.top}}),s=i,l=r.bottom,t===d.length-1)o.push({rect:{top:s,bottom:n.bottom,left:n.left,right:n.right},cursor:{index:r.index+1,y:Math.min(r.bottom+6,(r.bottom+n.bottom)/2)-n.top}});else if(d[t+1].cells.length>1){var u=d[t+1],p=(r.bottom+u.top)/2;o.push({rect:{top:s,bottom:p,left:n.left,right:n.right},cursor:{index:r.index+1,y:p-n.top}}),s=p}}else{var c=n.left,g=n.left,v=t<d.length-1?(d[t+1].top+e.bottom)/2:n.bottom,h={isVertical:!0,y:e.top-n.top,height:e.bottom-e.top};e.cells.forEach((r,i)=>{var l=(r.left+r.right)/2;o.push({rect:{top:s,bottom:v,left:c,right:l},cursor:a()(a()({},h),{},{index:r.index,x:(g+r.left)/2-n.left})}),c=l,g=r.right,i===e.cells.length-1&&(t===d.length-1?o.push({rect:{top:s,bottom:n.bottom,left:c,right:n.right},cursor:a()(a()({},h),{},{index:r.index+1,x:Math.min(g+6,n.right)-n.left})}):o.push({rect:{top:s,bottom:v,left:c,right:n.right},cursor:a()(a()({},h),{},{index:r.index+1,x:Math.min(g+6,n.right)-n.left})}))}),s=v,l=e.bottom}})}return o}(n,o);for(var{rect:i,cursor:d}of r)if(e>=i.left&&e<=i.right&&t>=i.top&&t<=i.bottom)return d;return{index:0,y:5}}function Ee(e,t){var n=e-t;return Math.abs(n)<1?0:n}function Ce(e){var{draggingNodeUid:t,draggingNodeId:n,draggingIndex:o,droppingMountPoint:r,droppingSiblingGroups:i,droppingIndex:a}=e,d=Array.isArray(t)?t:[t],s=i.flatMap(e=>e.childNodes),l=i.flatMap(e=>{var t=e.childNodes.map(e=>e.$$uid).filter(e=>!d.includes(e));return e.mountPoint===r&&t.splice((null!=o?o:-1)>=0&&a>o?a-1:a,0,...d),t}),u=l.map(e=>d.includes(e)?n:s.find(t=>t.$$uid===e).id);return{nodeUids:l,nodeIds:u}}var be=["properties","events","lifeCycle","params","if","transform"],Ne=["permissionsPreCheck","transformFrom"],De=["brick","template","portal","slots","id","children","instanceId"];function ye(e,t){return Object.fromEntries(Object.entries(e).map(e=>{var[t,n]=e;return void 0===n||De.includes(t)?void 0:be.includes(t)?[t,JSON.stringify(n)]:Ne.includes(t)?[t,D.a.safeDump(n)]:[t,n]}).filter(Boolean).concat(Object.entries(t.nodeData),[["brick","template"===t.nodeData.type?e.template:e.brick],["portal",t.isPortalCanvas||e.portal]]))}function Oe(e){var{manager:t,type:n,data:o,droppingIndex:r,droppingParentUid:i,droppingParentInstanceId:d,droppingMountPoint:s,droppingChildNodes:l,droppingSiblingGroups:u,isPortalCanvas:c}=e;if(n===p.NODE_TO_ADD){var{brickType:g="brick",brick:v}=o,h=j();t.nodeAdd(a()(a()({},Ce({draggingNodeUid:h,draggingNodeId:null,droppingIndex:r,droppingMountPoint:s,droppingSiblingGroups:u})),{},{nodeUid:h,parentUid:i,nodeData:{parent:d,type:g,brick:v,mountPoint:s,bg:!c&&"provider"===g||void 0,portal:c}}))}else if(n===p.SNIPPET_TO_APPLY){var{bricks:m}=o,f=[...new Array(m.length)].map(()=>j());t.snippetApply(a()(a()({},Ce({draggingNodeUid:f,draggingNodeId:null,droppingIndex:r,droppingMountPoint:s,droppingSiblingGroups:u})),{},{parentUid:i,nodeDetails:m.map((e,t)=>function e(t){var{parent:n,parentUid:o,mountPoint:r,nodeUid:i,brickConf:a,isPortalCanvas:d,sort:s}=t,l=a.template?"template":a.bg?"provider":"brick";return{nodeUid:i,parentUid:o,nodeData:ye(a,{isPortalCanvas:d,nodeData:{type:l,parent:n,mountPoint:r,sort:s}}),children:a.slots?Object.entries(a.slots).flatMap(e=>{var[t,n]=e;return n.bricks.map(e=>({childBrickConf:e,mountPoint:t}))}).map((t,n)=>{var{childBrickConf:o,mountPoint:r}=t;return e({parentUid:i,mountPoint:r,nodeUid:j(),brickConf:o,sort:n})}):[]}}({parent:d,parentUid:i,mountPoint:s,nodeUid:f[t],brickConf:e,isPortalCanvas:c}))}))}else if(n===p.NODE_TO_MOVE){var{nodeUid:E,nodeId:C,nodeInstanceId:b}=o,N=l.findIndex(e=>e.$$uid===E);N>=0?r!==N&&r!==N+1&&t.nodeReorder(a()(a()({},Ce({draggingNodeUid:E,draggingNodeId:C,draggingIndex:N,droppingIndex:r,droppingMountPoint:s,droppingSiblingGroups:u})),{},{parentUid:i})):t.nodeMove(a()(a()({},Ce({draggingNodeUid:E,draggingNodeId:C,droppingIndex:r,droppingMountPoint:s,droppingSiblingGroups:u})),{},{nodeUid:E,parentUid:i,nodeInstanceId:b,nodeData:{parent:d,mountPoint:s}}))}}function xe(e){return Object(o.useMemo)(()=>{var t=[],n=[];for(var o of e)o.portal?n.push([o]):t.push(o);return[t,...n,[]]},[e])}var Te={dropZone:"DropZone--dropZone--sngiml",isSlot:"DropZone--isSlot--sngiml",dropping:"DropZone--dropping--sngiml",showOutlineIfEmpty:"DropZone--showOutlineIfEmpty--sngiml",isRoot:"DropZone--isRoot--sngiml",dropZoneBody:"DropZone--dropZoneBody--sngiml",active:"DropZone--active--sngiml",isPortalCanvas:"DropZone--isPortalCanvas--sngiml",fullscreen:"DropZone--fullscreen--sngiml",hasTabs:"DropZone--hasTabs--sngiml",slotContentLayoutBlock:"DropZone--slotContentLayoutBlock--sngiml",slotContentLayoutInline:"DropZone--slotContentLayoutInline--sngiml",slotContentLayoutGrid:"DropZone--slotContentLayoutGrid--sngiml","mode-dialog":"DropZone--mode-dialog--sngiml","mode-large":"DropZone--mode-large--sngiml","mode-small":"DropZone--mode-small--sngiml","mode-drawer":"DropZone--mode-drawer--sngiml",dropCursor:"DropZone--dropCursor--sngiml",dropCursorHorizontal:"DropZone--dropCursorHorizontal--sngiml",dropCursorVertical:"DropZone--dropCursorVertical--sngiml"};J('.DropZone--dropZone--sngiml {\n position: relative;\n min-height: calc(var(--editor-brick-base-height) + 2px);\n border-radius: var(--editor-brick-border-radius);\n\n --drop-zone-padding: 20px;\n}\n\n.DropZone--isSlot--sngiml {\n border: 1px dashed transparent;\n}\n\n.DropZone--isSlot--sngiml.DropZone--dropping--sngiml {\n background: var(--editor-brick-slot-bg);\n border-color: var(--editor-brick-slot-stroke-color);\n}\n\n.DropZone--showOutlineIfEmpty--sngiml:not(.DropZone--dropping--sngiml) {\n background: var(--editor-brick-skeleton-bg-light);\n}\n\n.DropZone--isRoot--sngiml > .DropZone--dropZoneBody--sngiml {\n padding: calc(var(--drop-zone-padding) + 7px) var(--drop-zone-padding)\n var(--drop-zone-padding);\n}\n\n.DropZone--isRoot--sngiml.DropZone--active--sngiml,\n.DropZone--isRoot--sngiml.DropZone--dropping--sngiml {\n box-shadow: 0 0 0 1px var(--editor-brick-stroke-color-active);\n}\n\n.DropZone--isPortalCanvas--sngiml,\n.DropZone--isRoot--sngiml:not(.DropZone--isPortalCanvas--sngiml) > .DropZone--dropZoneBody--sngiml {\n height: calc(\n 100vh - 148px - var(--editor-brick-toolbar-height) - var(--page-card-gap)\n );\n overflow-y: auto;\n}\n\n.DropZone--fullscreen--sngiml.DropZone--isPortalCanvas--sngiml,\n.DropZone--fullscreen--sngiml:not(.DropZone--isPortalCanvas--sngiml) > .DropZone--dropZoneBody--sngiml {\n height: calc(\n 100vh - var(--editor-brick-overlay-padding) * 2 - var(--page-card-gap) * 2 -\n var(--editor-brick-toolbar-height)\n );\n}\n\n.DropZone--hasTabs--sngiml.DropZone--isPortalCanvas--sngiml,\n.DropZone--hasTabs--sngiml.DropZone--isRoot--sngiml:not(.DropZone--isPortalCanvas--sngiml) > .DropZone--dropZoneBody--sngiml {\n height: calc(\n 100vh - 158px - var(--editor-brick-toolbar-height) - var(--page-card-gap)\n );\n overflow-y: auto;\n}\n\n.DropZone--hasTabs--sngiml.DropZone--fullscreen--sngiml.DropZone--isPortalCanvas--sngiml,\n.DropZone--hasTabs--sngiml.DropZone--fullscreen--sngiml:not(.DropZone--isPortalCanvas--sngiml) > .DropZone--dropZoneBody--sngiml {\n height: calc(\n 100vh - var(--editor-brick-overlay-padding) * 2 - var(--page-card-gap) * 2 -\n 10px - var(--editor-brick-toolbar-height)\n );\n}\n\n.DropZone--slotContentLayoutBlock--sngiml > .DropZone--dropZoneBody--sngiml {\n display: grid;\n grid-gap: var(--editor-brick-gap);\n grid-template-columns: repeat(\n auto-fill,\n minmax(var(--editor-brick-inline-width), 1fr)\n );\n}\n\n.DropZone--slotContentLayoutInline--sngiml > .DropZone--dropZoneBody--sngiml {\n display: flex;\n flex-wrap: wrap;\n margin: 0 calc(var(--editor-brick-gap-half) * -1);\n}\n\n.DropZone--slotContentLayoutGrid--sngiml > .DropZone--dropZoneBody--sngiml {\n display: grid;\n grid-gap: var(--editor-brick-gap);\n grid-template-columns: repeat(\n auto-fill,\n minmax(var(--editor-brick-grid-width), 1fr)\n );\n}\n\n.DropZone--mode-dialog--sngiml > .DropZone--dropZoneBody--sngiml {\n margin: 0 auto;\n max-width: calc(600px + var(--drop-zone-padding) * 2);\n}\n\n.DropZone--mode-dialog--sngiml.DropZone--mode-large--sngiml > .DropZone--dropZoneBody--sngiml {\n max-width: calc(800px + var(--drop-zone-padding) * 2);\n}\n\n.DropZone--mode-dialog--sngiml.DropZone--mode-small--sngiml > .DropZone--dropZoneBody--sngiml {\n max-width: calc(400px + var(--drop-zone-padding) * 2);\n}\n\n.DropZone--mode-drawer--sngiml > .DropZone--dropZoneBody--sngiml {\n margin: 0 auto;\n max-width: calc(900px + var(--drop-zone-padding) * 2);\n}\n\n.DropZone--mode-drawer--sngiml.DropZone--mode-large--sngiml > .DropZone--dropZoneBody--sngiml {\n max-width: calc(1200px + var(--drop-zone-padding) * 2);\n}\n\n.DropZone--mode-drawer--sngiml.DropZone--mode-small--sngiml > .DropZone--dropZoneBody--sngiml {\n max-width: calc(600px + var(--drop-zone-padding) * 2);\n}\n\n.DropZone--dropCursor--sngiml {\n position: absolute;\n background: #bb79bb;\n display: none;\n pointer-events: none;\n}\n\n.DropZone--dropping--sngiml > .DropZone--dropCursor--sngiml {\n display: block;\n}\n\n.DropZone--dropCursorHorizontal--sngiml {\n height: 2px;\n left: 10px;\n right: 10px;\n margin-top: -1px;\n}\n\n.DropZone--dropCursorVertical--sngiml {\n width: 2px;\n margin-left: -1px;\n}\n\n.DropZone--dropCursor--sngiml::before,\n.DropZone--dropCursor--sngiml::after {\n position: absolute;\n content: "";\n background: #bb79bb;\n}\n\n.DropZone--dropCursorHorizontal--sngiml::before,\n.DropZone--dropCursorHorizontal--sngiml::after {\n top: -4px;\n height: 10px;\n width: 2px;\n}\n\n.DropZone--dropCursorHorizontal--sngiml::before {\n left: 0;\n}\n\n.DropZone--dropCursorHorizontal--sngiml::after {\n right: 0;\n}\n\n.DropZone--dropCursorVertical--sngiml::before,\n.DropZone--dropCursorVertical--sngiml::after {\n left: -4px;\n width: 10px;\n height: 2px;\n}\n\n.DropZone--dropCursorVertical--sngiml::before {\n top: 0;\n}\n\n.DropZone--dropCursorVertical--sngiml::after {\n bottom: 0;\n}\n');var $e=["type"];function Se(e){var{nodeUid:t,isRoot:n,separateCanvas:o,isPortalCanvas:i,independentPortalCanvas:d,canvasIndex:s,mountPoint:u,fullscreen:c,delegatedContext:g,dropZoneStyle:h,dropZoneBodyStyle:E,slotContentLayout:C,showOutlineIfEmpty:b}=e,N=r.a.useRef(),[D,y]=r.a.useState(null),O=r.a.useRef(),x=K(),T=z(),$=Q({nodeUid:t,isRoot:n}),S=ve({nodeUid:t,isRoot:n}),k=d?s>0:i,L=o||d,A=me(),j=null!=C?C:v.BLOCK,P=r.a.useMemo(()=>{var e,t;return null!==(e=null===(t=S.find(e=>e.mountPoint===u))||void 0===t?void 0:t.childNodes)&&void 0!==e?e:[]},[S,u]),_=xe(P),w=r.a.useMemo(()=>o?P.filter(e=>Boolean(Number(Boolean(i))^Number(!e.portal))):d?_[Object(l.clamp)(null!=s?s:0,0,_.length-1)]:P,[s,d,i,P,_,o]),B=r.a.useMemo(()=>{var e;return null===(e=w[0])||void 0===e?void 0:e.$$parsedProperties._canvas_},[w]),U=r.a.useCallback(e=>{if(!L)return e;if(w.length>0){var t=w[0===e?0:e-1];return P.findIndex(e=>e===t)+(0===e?0:1)}return k?P.length:0},[L,w,k,P]),{nodes:Z,edges:R}=Y(),M=r.a.useCallback(()=>{if(g){var e,t,n=he({nodeUid:g.templateUid,nodes:Z,edges:R,doNotExpandTemplates:!0});return{droppingParentUid:g.templateUid,droppingParentInstanceId:Z.find(e=>e.$$uid===g.templateUid).instanceId,droppingMountPoint:g.templateMountPoint,droppingChildNodes:null!==(e=null===(t=n.find(e=>e.mountPoint===g.templateMountPoint))||void 0===t?void 0:t.childNodes)&&void 0!==e?e:[],droppingSiblingGroups:n}}return{droppingParentUid:$.$$uid,droppingParentInstanceId:$.instanceId,droppingMountPoint:u,droppingChildNodes:P,droppingSiblingGroups:S}},[g,R,S,u,$,Z,P]),[{isDraggingOverCurrent:H},q]=Object(f.useDrop)({accept:[p.NODE_TO_ADD,p.NODE_TO_MOVE,p.SNIPPET_TO_APPLY],canDrop:e=>d&&k?0===w.length:e.type===p.NODE_TO_ADD||e.type===p.SNIPPET_TO_APPLY||n||A(e.nodeUid,t),collect:e=>({isDraggingOverCurrent:e.isOver({shallow:!0})&&e.canDrop()}),hover:(e,t)=>{if(t.isOver({shallow:!0})&&t.canDrop()){var{x:n,y:o}=t.getClientOffset();O.current=fe(n,o,N.current.parentElement,N.current),y(O.current)}},drop:(e,t)=>{if(!t.didDrop()){var{type:n}=e,o=m()(e,$e);Oe(a()({type:n,data:o,droppingIndex:U(O.current.index),isPortalCanvas:k,manager:T},M()))}}});r.a.useEffect(()=>{T.updateDroppingStatus(g?g.templateUid:$.$$uid,g?g.templateMountPoint:u,H)},[H,u,T,g,$]);var G=!!g||!($.$$isExpandableTemplate||$.$$isTemplateInternalNode),V=r.a.useRef(),X=r.a.useCallback(e=>{V.current=e,G&&q(e)},[q,G]),F=r.a.useCallback(e=>{!k&&ee(e.target,V.current)&&(e.preventDefault(),T.contextMenuChange({active:!0,node:$,x:e.clientX,y:e.clientY}))},[k,T,$]);return r.a.createElement("div",{ref:X,className:I(Te.dropZone,n?I(Te.isRoot,(null==B?void 0:B.mode)&&String(B.mode).split(/\s+/g).map(e=>Te["mode-".concat(e)]),{[Te.fullscreen]:c,[Te.hasTabs]:L}):Te.isSlot,{[Te.isPortalCanvas]:k,[Te.dropping]:H,[Te.active]:n&&x.active&&x.node.$$uid===$.$$uid,[Te.showOutlineIfEmpty]:!n&&b&&0===P.length,[Te.slotContentLayoutBlock]:j===v.BLOCK,[Te.slotContentLayoutInline]:j===v.INLINE,[Te.slotContentLayoutGrid]:j===v.GRID}),style:h,onContextMenu:n?F:null},r.a.createElement("div",{ref:N,className:Te.dropZoneBody,style:E},w.map(e=>r.a.createElement(ge,{key:e.$$uid,node:e,slotContentLayout:j}))),r.a.createElement("div",{className:I(Te.dropCursor,null!=D&&D.isVertical?Te.dropCursorVertical:Te.dropCursorHorizontal),style:{top:null==D?void 0:D.y,left:null==D?void 0:D.x,height:null==D?void 0:D.height}}))}var Ie="SlotContainer--slotContainer--ya4ml4",ke="SlotContainer--slotName--ya4ml4",Le="SlotContainer--dropping--ya4ml4";function Ae(e){var t,{nodeUid:n,slotName:i,slotContainerStyle:a,dropZoneStyle:d,dropZoneBodyStyle:s,slotContentLayout:l,showOutlineIfEmpty:u}=e,p=Q({nodeUid:n}),c=oe(),g=Object(o.useMemo)(()=>{var e,t=null===(e=p.$$delegatedSlots)||void 0===e?void 0:e.get(i);return 1===(null==t?void 0:t.length)?t[0]:null},[p,i]);return r.a.createElement("div",{className:I(Ie,{[Le]:null===(t=c.get(g?g.templateUid:n))||void 0===t?void 0:t.get(g?g.templateMountPoint:i)}),style:a},r.a.createElement("div",{className:ke},g?g.templateMountPoint:i),r.a.createElement(Se,{nodeUid:n,mountPoint:i,delegatedContext:g,dropZoneStyle:d,dropZoneBodyStyle:s,slotContentLayout:l,showOutlineIfEmpty:u}))}J(".SlotContainer--slotContainer--ya4ml4 {\n position: relative;\n}\n\n.SlotContainer--slotName--ya4ml4 {\n position: absolute;\n top: -23px;\n height: calc(23px + var(--editor-brick-border-radius));\n line-height: 20px;\n color: var(--text-color-secondary);\n padding: 0 5px;\n border-radius: 2px;\n color: #737373;\n white-space: nowrap;\n visibility: hidden;\n pointer-events: none;\n border: 1px dashed var(--editor-brick-slot-stroke-color);\n background: var(--editor-brick-slot-bg);\n}\n\n.SlotContainer--slotContainer--ya4ml4.SlotContainer--dropping--ya4ml4 > .SlotContainer--slotName--ya4ml4 {\n visibility: visible;\n}\n");var je=r.a.memo(Be),Pe=Symbol.for("__BRICK_NEXT_BUILDER_CONTEXT_INSTANCE__");function _e(){var e=window;return e[Pe]||(e[Pe]={manager:new V}),e[Pe]}var we=0;function Be(e){var{children:t}=e,n=_e();return r.a.useEffect(()=>(we++,()=>{0===--we&&(window[Pe]=null)}),[]),r.a.createElement(X.Provider,{value:n},t)}function Ue(e,t){return O()(null,(function(n,o){return{F:class extends o{constructor(){super(...arguments),n(this)}},d:[{kind:"get",static:!0,key:"selfLayout",value:function(){return null==t?void 0:t.selfLayout}},{kind:"field",decorators:[Object(b.property)({type:Number})],key:"nodeUid",value:void 0},{kind:"field",decorators:[Object(b.property)({attribute:!1})],key:"editorProps",value:void 0},{kind:"method",key:"connectedCallback",value:function(){if(this.style.display||(this.style.display="block"),null!=t&&t.brickStyle)for(var[e,n]of Object.entries(t.brickStyle))this.style[e]=n;this._render()}},{kind:"method",key:"disconnectedCallback",value:function(){T.a.unmountComponentAtNode(this)}},{kind:"method",key:"_render",value:function(){this.isConnected&&this.nodeUid&&T.a.render(r.a.createElement(b.BrickWrapper,null,r.a.createElement(je,null,r.a.createElement(f.DndProvider,{backend:$.HTML5Backend},r.a.createElement(e,{nodeUid:this.nodeUid,editorProps:this.editorProps})))),this)}}]}}),b.UpdatingElement)}var Ze=Object(o.createContext)({});function Re(e){var{nodeUid:t,isRoot:n,doNotExpandTemplates:r}=e,{rootId:i,edges:a}=Y(),d=n?i:t;return Object(o.useMemo)(()=>{var e=new Set,t=Object(l.sortBy)(a.filter(e=>e.parent===d&&(r?!e.$$isTemplateInternal:!e.$$isTemplateDelegated)),[e=>e.sort]);for(var n of t)e.add(n.mountPoint);return Array.from(e)},[d,a,r])}function Me(e){var{nodes:t,edges:n}=Y();return Object(o.useMemo)(()=>{var o=n.find(t=>t.child===e&&!t.$$isTemplateExpanded).parent;return t.find(e=>e.$$uid===o)},[n,e,t])}function He(){var e=z(),[t,n]=Object(o.useState)(e.getRouteList());return Object(o.useEffect)(()=>e.onRouteListChange(()=>{n(e.getRouteList())}),[e]),t}function qe(e,t){var n=z(),[r,i]=Object(o.useState)(!t&&n.isOutlineEnabled(e));return Object(o.useEffect)(()=>{if(!t)return n.onOutlineEnabledNodesChange(()=>{i(n.isOutlineEnabled(e))})},[t,n,e]),r}},XuQu:function(e,t){e.exports=dll},ZR4k:function(e,t,n){e.exports=n("XuQu")("ZR4k")},i8i4:function(e,t,n){e.exports=n("XuQu")("i8i4")},lSNA:function(e,t,n){e.exports=n("XuQu")("lSNA")},q1tI:function(e,t,n){e.exports=n("/8r5")("q1tI")},qJlv:function(e,t,n){e.exports=n("/8r5")("qJlv")},tYg3:function(e,t,n){e.exports=n("XuQu")("tYg3")},yXPU:function(e,t,n){e.exports=n("XuQu")("yXPU")}});
|
|
8
|
-
//# sourceMappingURL=dll-of-editor-bricks-helper.
|
|
8
|
+
//# sourceMappingURL=dll-of-editor-bricks-helper.9191a5c1.js.map
|
|
@@ -1 +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","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","tempParsedId","tempParsedTestId","test","dataset","testid","fromEntries","entries","entry","includes","alias","isBrickNode","split","pop","getAppendingNodesAndEdges","templateSourceMap","storyList","currentUid","processedTemplateSet","inheritedTemplateRefToUid","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","detail","data","addNodes","addEdges","omit","getStoryList","newData","triggerDataChange","getData","getContextMenuStatus","contextMenuStatus","getRelatedNodesBasedOnEventsMap","relatedNodesBasedOnEventsMap","sharedEditorListInit","sharedEditorList","eventTarget","dispatchEvent","CustomEvent","SHARED_EDITOR_LIST_CHANGE","getSharedEditorList","onSharedEditorListChange","fn","addEventListener","routeListInit","routeList","ROUTE_LIST_CHANGE","getRouteList","storyListInit","onRouteListChange","dataInit","root","rootNodeIsCustomTemplate","selector","$$matchedSelectors","isEmpty","$$parsedEvents","flat","$$parsedLifeCycle","flatMap","lifeCycleName","lifeCycleConf","messageConf","console","warn","getRelatedNodesBasedOnEvents","DATA_CHANGE","updateBrick","runAddNodeAction","nodeAdd","NODE_ADD","nodeAddStored","instanceId","snippetApply","nodeDetails","newNodes","appendingNodes","appendingEdges","SNIPPET_APPLY","snippetApplyStored","flattenNodeDetails","found","nodeMove","NODE_MOVE","contextUpdated","context","nodeReorder","NODE_REORDER","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","BuilderContext","React","createContext","useBuilderDataManager","manager","useContext","Error","useBuilderData","setData","useState","useEffect","useBuilderNode","isRoot","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","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","relatedEdges","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","nodeIds","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","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","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","mountPoints","useBuilderParentNode","useRouteList","useOutlineEnabled","inapplicable","enabled","setEnabled","dll"],"mappings":"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","file":"dll-of-editor-bricks-helper.0b326f7e.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}\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\nexport interface AbstractBuilderDataManager {\n getData(): BuilderCanvasData;\n getRouteList(): BuilderRouteNode[];\n getContextMenuStatus(): BuilderContextMenuStatus;\n dataInit(root: BuilderRuntimeNode): void;\n sharedEditorListInit(data: SharedEditorConf[]): void;\n routeListInit(data: BuilderRouteNode[]): void;\n nodeAdd(detail: EventDetailOfNodeAdd): void;\n nodeAddStored(detail: EventDetailOfNodeAddStored): void;\n snippetApply(detail: EventDetailOfSnippetApply): void;\n snippetApplyStored(detail: EventDetailOfSnippetApplyStored): void;\n nodeMove(detail: EventDetailOfNodeMove): void;\n nodeReorder(detail: EventDetailOfNodeReorder): void;\n nodeDelete(detail: BuilderRuntimeNode): void;\n nodeClick(detail: BuilderRuntimeNode): void;\n contextUpdated(detail: EventDetailOfContextUpdated): void;\n onDataChange(fn: EventListener): () => void;\n onNodeAdd(fn: (event: CustomEvent<EventDetailOfNodeAdd>) => void): () => void;\n onNodeReorder(\n fn: (event: CustomEvent<EventDetailOfNodeReorder>) => void\n ): () => void;\n onNodeMove(\n fn: (event: CustomEvent<EventDetailOfNodeMove>) => void\n ): () => void;\n onNodeClick(fn: (event: CustomEvent<BuilderRuntimeNode>) => void): () => void;\n onContextMenuChange(\n fn: (event: CustomEvent<BuilderContextMenuStatus>) => void\n ): () => void;\n}\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 }: 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 };\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 ((tempParsedId = parsed?.id as string),\n typeof tempParsedId === \"string\") &&\n !computationRegExp.test(tempParsedId)\n ) {\n parsedId = tempParsedId;\n matchedSelectors.push(`#${parsedId}`);\n } else if (\n ((tempParsedTestId = (parsed?.dataset as Record<string, string>)\n ?.testid),\n typeof tempParsedTestId === \"string\") &&\n !computationRegExp.test(tempParsedTestId)\n ) {\n parsedTestId = tempParsedTestId;\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 ? parsedId || parsedTestId || 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 } 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 AbstractBuilderDataManager,\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 { getBuilderNode } from \"./getBuilderNode\";\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 implements AbstractBuilderDataManager {\n private data: BuilderCanvasData = {\n rootId: null,\n nodes: [],\n edges: [],\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 ),\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 runAddNodeAction = (detail: EventDetailOfNodeAdd) => {\n const { rootId, nodes, edges } = 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\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 };\n this.data = {\n ...newData,\n edges: reorderBuilderEdges(newData, {\n parentUid,\n nodeUids,\n }),\n };\n this.triggerDataChange();\n };\n\n updateBrick(detail: EventDetailOfNodeAdd) {\n this.data = deleteNodeFromTree(detail.nodeUid, this.data);\n\n this.runAddNodeAction(detail);\n }\n\n nodeAdd(detail: EventDetailOfNodeAdd): void {\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 } = 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 };\n this.triggerDataChange();\n }\n\n snippetApply(detail: EventDetailOfSnippetApply): void {\n const { rootId, nodes, edges } = 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 };\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 } = 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 };\n this.triggerDataChange();\n }\n\n nodeMove(detail: EventDetailOfNodeMove): void {\n const { rootId, nodes, edges } = this.data;\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 };\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 contextUpdated(detail: EventDetailOfContextUpdated): void {\n const { rootId, nodes, edges } = 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 };\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","import { sortBy } from \"lodash\";\nimport { hasOwnProperty } from \"@next-core/brick-utils\";\nimport {\n BuilderRouteOrBrickNode,\n BuilderCustomTemplateNode,\n CustomTemplateProxyProperty,\n CustomTemplateProxyBasicProperty,\n Story,\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): {\n nodes: BuilderRuntimeNode[];\n edges: BuilderRuntimeEdge[];\n} {\n const nodes: BuilderRuntimeNode[] = [];\n const edges: BuilderRuntimeEdge[] = [];\n const walk = (\n nodeData: BuilderRouteOrBrickNode,\n currentUid: number,\n processedTemplateSet: Set<string>,\n isTemplateInternalNode?: boolean,\n inheritedTemplateRefToUid?: Map<string, number>\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 // 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 );\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 return {\n nodes,\n edges,\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}: {\n nodeUid?: number;\n isRoot?: boolean;\n}): BuilderRuntimeNode<P> {\n const { rootId, nodes } = useBuilderData();\n const currentUid = isRoot ? rootId : nodeUid;\n return useMemo(\n () =>\n nodes.find((node) => node.$$uid === currentUid) as BuilderRuntimeNode<P>,\n [nodes, currentUid]\n );\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 tryEditorBricks.push(`${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 })}\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}: {\n nodeUid?: number;\n isRoot?: boolean;\n doNotExpandTemplates?: boolean;\n}): BuilderGroupedChildNode[] {\n const { rootId, nodes, edges } = useBuilderData();\n return useMemo(\n () =>\n getBuilderGroupedChildNodes({\n nodes,\n edges,\n nodeUid: isRoot ? rootId : nodeUid,\n doNotExpandTemplates,\n }),\n [doNotExpandTemplates, edges, isRoot, nodeUid, nodes, rootId]\n );\n}\n\nexport function getBuilderGroupedChildNodes({\n nodeUid,\n nodes,\n edges,\n doNotExpandTemplates,\n}: {\n nodeUid: number;\n nodes: BuilderRuntimeNode[];\n edges: BuilderRuntimeEdge[];\n doNotExpandTemplates?: 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,\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 } 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}\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}: 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 node = useBuilderNode({ nodeUid, isRoot });\n const groupedChildNodes = useBuilderGroupedChildNodes({\n nodeUid,\n isRoot,\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 { nodes, edges } = useBuilderData();\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: 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 ]);\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 !(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={styles.dropZoneBody}\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}\n\nexport function SlotContainer({\n nodeUid,\n slotName,\n slotContainerStyle,\n dropZoneStyle,\n dropZoneBodyStyle,\n slotContentLayout,\n showOutlineIfEmpty,\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 />\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":""}
|
|
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","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","tempParsedId","tempParsedTestId","test","dataset","testid","fromEntries","entries","entry","includes","alias","isBrickNode","split","pop","getAppendingNodesAndEdges","templateSourceMap","storyList","currentUid","processedTemplateSet","inheritedTemplateRefToUid","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","detail","data","addNodes","addEdges","omit","getStoryList","newData","triggerDataChange","getData","getContextMenuStatus","contextMenuStatus","getRelatedNodesBasedOnEventsMap","relatedNodesBasedOnEventsMap","sharedEditorListInit","sharedEditorList","eventTarget","dispatchEvent","CustomEvent","SHARED_EDITOR_LIST_CHANGE","getSharedEditorList","onSharedEditorListChange","fn","addEventListener","routeListInit","routeList","ROUTE_LIST_CHANGE","getRouteList","storyListInit","onRouteListChange","dataInit","root","rootNodeIsCustomTemplate","selector","$$matchedSelectors","isEmpty","$$parsedEvents","flat","$$parsedLifeCycle","flatMap","lifeCycleName","lifeCycleConf","messageConf","console","warn","getRelatedNodesBasedOnEvents","DATA_CHANGE","updateBrick","runAddNodeAction","nodeAdd","NODE_ADD","nodeAddStored","instanceId","snippetApply","nodeDetails","newNodes","appendingNodes","appendingEdges","SNIPPET_APPLY","snippetApplyStored","flattenNodeDetails","found","nodeMove","NODE_MOVE","contextUpdated","context","nodeReorder","NODE_REORDER","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","BuilderContext","React","createContext","useBuilderDataManager","manager","useContext","Error","useBuilderData","setData","useState","useEffect","useBuilderNode","isRoot","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","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","relatedEdges","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","nodeIds","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","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","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","mountPoints","useBuilderParentNode","useRouteList","useOutlineEnabled","inapplicable","enabled","setEnabled","dll"],"mappings":"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","file":"dll-of-editor-bricks-helper.9191a5c1.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}\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\nexport interface AbstractBuilderDataManager {\n getData(): BuilderCanvasData;\n getRouteList(): BuilderRouteNode[];\n getContextMenuStatus(): BuilderContextMenuStatus;\n dataInit(root: BuilderRuntimeNode): void;\n sharedEditorListInit(data: SharedEditorConf[]): void;\n routeListInit(data: BuilderRouteNode[]): void;\n nodeAdd(detail: EventDetailOfNodeAdd): void;\n nodeAddStored(detail: EventDetailOfNodeAddStored): void;\n snippetApply(detail: EventDetailOfSnippetApply): void;\n snippetApplyStored(detail: EventDetailOfSnippetApplyStored): void;\n nodeMove(detail: EventDetailOfNodeMove): void;\n nodeReorder(detail: EventDetailOfNodeReorder): void;\n nodeDelete(detail: BuilderRuntimeNode): void;\n nodeClick(detail: BuilderRuntimeNode): void;\n contextUpdated(detail: EventDetailOfContextUpdated): void;\n onDataChange(fn: EventListener): () => void;\n onNodeAdd(fn: (event: CustomEvent<EventDetailOfNodeAdd>) => void): () => void;\n onNodeReorder(\n fn: (event: CustomEvent<EventDetailOfNodeReorder>) => void\n ): () => void;\n onNodeMove(\n fn: (event: CustomEvent<EventDetailOfNodeMove>) => void\n ): () => void;\n onNodeClick(fn: (event: CustomEvent<BuilderRuntimeNode>) => void): () => void;\n onContextMenuChange(\n fn: (event: CustomEvent<BuilderContextMenuStatus>) => void\n ): () => void;\n}\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 }: 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 };\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 ((tempParsedId = parsed?.id as string),\n typeof tempParsedId === \"string\") &&\n !computationRegExp.test(tempParsedId)\n ) {\n parsedId = tempParsedId;\n matchedSelectors.push(`#${parsedId}`);\n } else if (\n ((tempParsedTestId = (parsed?.dataset as Record<string, string>)\n ?.testid),\n typeof tempParsedTestId === \"string\") &&\n !computationRegExp.test(tempParsedTestId)\n ) {\n parsedTestId = tempParsedTestId;\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 ? parsedId || parsedTestId || 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 } 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 AbstractBuilderDataManager,\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 { getBuilderNode } from \"./getBuilderNode\";\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 implements AbstractBuilderDataManager {\n private data: BuilderCanvasData = {\n rootId: null,\n nodes: [],\n edges: [],\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 ),\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 runAddNodeAction = (detail: EventDetailOfNodeAdd) => {\n const { rootId, nodes, edges } = 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\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 };\n this.data = {\n ...newData,\n edges: reorderBuilderEdges(newData, {\n parentUid,\n nodeUids,\n }),\n };\n this.triggerDataChange();\n };\n\n updateBrick(detail: EventDetailOfNodeAdd) {\n this.data = deleteNodeFromTree(detail.nodeUid, this.data);\n\n this.runAddNodeAction(detail);\n }\n\n nodeAdd(detail: EventDetailOfNodeAdd): void {\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 } = 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 };\n this.triggerDataChange();\n }\n\n snippetApply(detail: EventDetailOfSnippetApply): void {\n const { rootId, nodes, edges } = 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 };\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 } = 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 };\n this.triggerDataChange();\n }\n\n nodeMove(detail: EventDetailOfNodeMove): void {\n const { rootId, nodes, edges } = this.data;\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 };\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 contextUpdated(detail: EventDetailOfContextUpdated): void {\n const { rootId, nodes, edges } = 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 };\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","import { sortBy } from \"lodash\";\nimport { hasOwnProperty } from \"@next-core/brick-utils\";\nimport {\n BuilderRouteOrBrickNode,\n BuilderCustomTemplateNode,\n CustomTemplateProxyProperty,\n CustomTemplateProxyBasicProperty,\n Story,\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): {\n nodes: BuilderRuntimeNode[];\n edges: BuilderRuntimeEdge[];\n} {\n const nodes: BuilderRuntimeNode[] = [];\n const edges: BuilderRuntimeEdge[] = [];\n const walk = (\n nodeData: BuilderRouteOrBrickNode,\n currentUid: number,\n processedTemplateSet: Set<string>,\n isTemplateInternalNode?: boolean,\n inheritedTemplateRefToUid?: Map<string, number>\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 // 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 );\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 return {\n nodes,\n edges,\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}: {\n nodeUid?: number;\n isRoot?: boolean;\n}): BuilderRuntimeNode<P> {\n const { rootId, nodes } = useBuilderData();\n const currentUid = isRoot ? rootId : nodeUid;\n return useMemo(\n () =>\n nodes.find((node) => node.$$uid === currentUid) as BuilderRuntimeNode<P>,\n [nodes, currentUid]\n );\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 tryEditorBricks.push(`${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 })}\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}: {\n nodeUid?: number;\n isRoot?: boolean;\n doNotExpandTemplates?: boolean;\n}): BuilderGroupedChildNode[] {\n const { rootId, nodes, edges } = useBuilderData();\n return useMemo(\n () =>\n getBuilderGroupedChildNodes({\n nodes,\n edges,\n nodeUid: isRoot ? rootId : nodeUid,\n doNotExpandTemplates,\n }),\n [doNotExpandTemplates, edges, isRoot, nodeUid, nodes, rootId]\n );\n}\n\nexport function getBuilderGroupedChildNodes({\n nodeUid,\n nodes,\n edges,\n doNotExpandTemplates,\n}: {\n nodeUid: number;\n nodes: BuilderRuntimeNode[];\n edges: BuilderRuntimeEdge[];\n doNotExpandTemplates?: 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,\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 } 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}\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}: 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 node = useBuilderNode({ nodeUid, isRoot });\n const groupedChildNodes = useBuilderGroupedChildNodes({\n nodeUid,\n isRoot,\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 { nodes, edges } = useBuilderData();\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: 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 ]);\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 !(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={styles.dropZoneBody}\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}\n\nexport function SlotContainer({\n nodeUid,\n slotName,\n slotContainerStyle,\n dropZoneStyle,\n dropZoneBodyStyle,\n slotContentLayout,\n showOutlineIfEmpty,\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 />\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/manifest.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"DllOfEditorBricksHelper","content":{"dll-reference DllOfReactDnd":{"id":"/8r5","buildMeta":{"providedExports":true}},"./node_modules/@babel/runtime/helpers/objectSpread2.js":{"id":"3tO9","buildMeta":{"providedExports":true}},"./node_modules/@easyops/brick-utils/dist/index.esm.js":{"id":"A+yw","buildMeta":{"exportsType":"namespace","providedExports":["pipes","JsonStorage","PrecookFunctionVisitor","PrecookVisitor","asyncProcessBrick","asyncProcessStoryboard","computeRealRoutePath","convertValueByPrecision","cook","createProviderClass","deepFreeze","formatValue","getDependencyMapOfContext","getDepsOfTemplates","getDllAndDepsByResource","getDllAndDepsOfBricks","getDllAndDepsOfStoryboard","getTemplateDepsOfStoryboard","hasOwnProperty","inject","isBrickNode","isCustomTemplateNode","isEvaluable","isObject","isRouteNode","isSnippetNode","lint","loadScript","mapCustomApisToNameAndNamespace","matchPath","normalizeBuilderNode","normalizeMenu","parseForAnalysis","precook","precookFunction","preevaluate","prefetchScript","resolveContextConcurrently","restoreDynamicTemplates","scanBricksInBrickConf","scanBricksInStoryboard","scanCustomApisInStoryboard","scanI18NInAny","scanI18NInStoryboard","scanPermissionActionsInAny","scanPermissionActionsInStoryboard","scanProcessorsInAny","scanProcessorsInStoryboard","scanRouteAliasInStoryboard","scanStoryboard","scanTemplatesInBrick","scanTemplatesInStoryboard","shouldAllowRecursiveEvaluations","smartDisplayForEvaluableString","toPath","tokTypes","trackContext","transform","transformAndInject","visitStoryboardExpressions","visitStoryboardFunctions"]}},"./node_modules/@babel/runtime/helpers/decorate.js":{"id":"ACCw","buildMeta":{"providedExports":true}},"./node_modules/react-dnd/dist/esm/index.js":{"id":"IYwU","buildMeta":{"exportsType":"namespace","providedExports":true}},"./node_modules/lodash/lodash.js":{"id":"LvDl","buildMeta":{"providedExports":true}},"./node_modules/@babel/runtime/helpers/objectWithoutProperties.js":{"id":"QILm","buildMeta":{"providedExports":true}},"./node_modules/@easyops/editor-bricks-helper/dist/index.esm.js":{"id":"WnDu","buildMeta":{"exportsType":"namespace","providedExports":["isBrickNode","isCustomTemplateNode","isRouteNode","isSnippetNode","BuilderDataTransferType","BuilderProvider","DropZone","DroppingStatusContext","EditorBrickType","EditorContainer","EditorElementFactory","EditorSelfLayout","EditorSlotContentLayout","SlotContainer","getSortedIdsAfterDropped","useBuilderContextMenuStatus","useBuilderData","useBuilderDataManager","useBuilderGroupedChildNodes","useBuilderNode","useBuilderNodeMountPoints","useBuilderParentNode","useCanDrop","useCanvasList","useHighlightNodes","useHoverNodeUid","useOutlineEnabled","useRouteList","useShowRelatedNodesBasedOnEvents"]}},"dll-reference dll":{"id":"XuQu","buildMeta":{"providedExports":true}},"./node_modules/js-yaml/index.js":{"id":"ZR4k","buildMeta":{"providedExports":true}},"./node_modules/react-dom/index.js":{"id":"i8i4","buildMeta":{"providedExports":true}},"./node_modules/@babel/runtime/helpers/defineProperty.js":{"id":"lSNA","buildMeta":{"providedExports":true}},"./node_modules/react/index.js":{"id":"q1tI","buildMeta":{"providedExports":true}},"./node_modules/react-dnd-html5-backend/dist/esm/index.js":{"id":"qJlv","buildMeta":{"exportsType":"namespace","providedExports":["getEmptyImage","NativeTypes","HTML5Backend"]}},"./node_modules/@easyops/brick-kit/dist/index.esm.js":{"id":"tYg3","buildMeta":{"exportsType":"namespace","providedExports":["BrickAsComponent","BrickWrapper","DisplayByFeatureFlags","EasyopsEmpty","ErrorBoundary","FeatureFlagsProvider","ForwardRefSingleBrickAsComponent","ModalElement","SingleBrickAsComponent","StoryboardFunctionRegistryFactory","UpdatingElement","authenticate","checkIf","checkIfByTransform","createHistory","createRuntime","developHelper","doTransform","event","getAuth","getCssPropertyValue","getHistory","getMockInfo","getRuntime","handleHttpError","httpErrorToString","i18nText","initI18n","isLoggedIn","logout","looseCheckIf","looseCheckIfByTransform","looseCheckIfOfComputed","method","preprocessTransformProperties","property","reTransformForDevtools","renderEasyopsEmpty","transformElementProperties","transformIntermediateData","transformProperties","useApplyPageTitle","useCurrentApp","useCurrentMode","useCurrentTheme","useFeatureFlags","useLocation","useRecentApps"]}},"./node_modules/@babel/runtime/helpers/asyncToGenerator.js":{"id":"yXPU","buildMeta":{"providedExports":true}}}}
|
|
1
|
+
{"name":"DllOfEditorBricksHelper","content":{"dll-reference DllOfReactDnd":{"id":"/8r5","buildMeta":{"providedExports":true}},"./node_modules/@babel/runtime/helpers/objectSpread2.js":{"id":"3tO9","buildMeta":{"providedExports":true}},"./node_modules/@easyops/brick-utils/dist/index.esm.js":{"id":"A+yw","buildMeta":{"exportsType":"namespace","providedExports":["pipes","JsonStorage","PrecookFunctionVisitor","PrecookVisitor","asyncProcessBrick","asyncProcessStoryboard","computeRealRoutePath","convertValueByPrecision","cook","createProviderClass","deepFreeze","formatValue","getDependencyMapOfContext","getDepsOfTemplates","getDllAndDepsByResource","getDllAndDepsOfBricks","getDllAndDepsOfStoryboard","getTemplateDepsOfStoryboard","hasOwnProperty","inject","isBrickNode","isCustomTemplateNode","isEvaluable","isObject","isRouteNode","isSnippetNode","lint","loadScript","mapCustomApisToNameAndNamespace","matchPath","normalizeBuilderNode","normalizeMenu","parseForAnalysis","precook","precookFunction","preevaluate","prefetchScript","resolveContextConcurrently","restoreDynamicTemplates","scanBricksInBrickConf","scanBricksInStoryboard","scanCustomApisInStoryboard","scanI18NInAny","scanI18NInStoryboard","scanPermissionActionsInAny","scanPermissionActionsInStoryboard","scanProcessorsInAny","scanProcessorsInStoryboard","scanRouteAliasInStoryboard","scanStoryboard","scanTemplatesInBrick","scanTemplatesInStoryboard","shouldAllowRecursiveEvaluations","smartDisplayForEvaluableString","syncResolveContextConcurrently","toPath","tokTypes","trackContext","trackState","transform","transformAndInject","visitStoryboardExpressions","visitStoryboardFunctions"]}},"./node_modules/@babel/runtime/helpers/decorate.js":{"id":"ACCw","buildMeta":{"providedExports":true}},"./node_modules/react-dnd/dist/esm/index.js":{"id":"IYwU","buildMeta":{"exportsType":"namespace","providedExports":true}},"./node_modules/lodash/lodash.js":{"id":"LvDl","buildMeta":{"providedExports":true}},"./node_modules/@babel/runtime/helpers/objectWithoutProperties.js":{"id":"QILm","buildMeta":{"providedExports":true}},"./node_modules/@easyops/editor-bricks-helper/dist/index.esm.js":{"id":"WnDu","buildMeta":{"exportsType":"namespace","providedExports":["isBrickNode","isCustomTemplateNode","isRouteNode","isSnippetNode","BuilderDataTransferType","BuilderProvider","DropZone","DroppingStatusContext","EditorBrickType","EditorContainer","EditorElementFactory","EditorSelfLayout","EditorSlotContentLayout","SlotContainer","getSortedIdsAfterDropped","useBuilderContextMenuStatus","useBuilderData","useBuilderDataManager","useBuilderGroupedChildNodes","useBuilderNode","useBuilderNodeMountPoints","useBuilderParentNode","useCanDrop","useCanvasList","useHighlightNodes","useHoverNodeUid","useOutlineEnabled","useRouteList","useShowRelatedNodesBasedOnEvents"]}},"dll-reference dll":{"id":"XuQu","buildMeta":{"providedExports":true}},"./node_modules/js-yaml/index.js":{"id":"ZR4k","buildMeta":{"providedExports":true}},"./node_modules/react-dom/index.js":{"id":"i8i4","buildMeta":{"providedExports":true}},"./node_modules/@babel/runtime/helpers/defineProperty.js":{"id":"lSNA","buildMeta":{"providedExports":true}},"./node_modules/react/index.js":{"id":"q1tI","buildMeta":{"providedExports":true}},"./node_modules/react-dnd-html5-backend/dist/esm/index.js":{"id":"qJlv","buildMeta":{"exportsType":"namespace","providedExports":["getEmptyImage","NativeTypes","HTML5Backend"]}},"./node_modules/@easyops/brick-kit/dist/index.esm.js":{"id":"tYg3","buildMeta":{"exportsType":"namespace","providedExports":["BrickAsComponent","BrickWrapper","DisplayByFeatureFlags","EasyopsEmpty","ErrorBoundary","FeatureFlagsProvider","ForwardRefSingleBrickAsComponent","ModalElement","SingleBrickAsComponent","StoryboardFunctionRegistryFactory","UpdatingElement","authenticate","checkIf","checkIfByTransform","createHistory","createRuntime","developHelper","doTransform","event","getAuth","getCssPropertyValue","getHistory","getMockInfo","getRuntime","handleHttpError","httpErrorToString","i18nText","initI18n","isLoggedIn","logout","looseCheckIf","looseCheckIfByTransform","looseCheckIfOfComputed","method","preprocessTransformProperties","property","reTransformForDevtools","renderEasyopsEmpty","transformElementProperties","transformIntermediateData","transformProperties","useApplyPageTitle","useCurrentApp","useCurrentMode","useCurrentTheme","useFeatureFlags","useLocation","useRecentApps"]}},"./node_modules/@babel/runtime/helpers/asyncToGenerator.js":{"id":"yXPU","buildMeta":{"providedExports":true}}}}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@next-dll/editor-bricks-helper",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.26.0",
|
|
4
4
|
"description": "> TODO: description",
|
|
5
5
|
"homepage": "https://github.com/easyops-cn/next-core/tree/master/dll/editor-bricks-helper",
|
|
6
6
|
"license": "GPL-3.0",
|
|
@@ -15,12 +15,12 @@
|
|
|
15
15
|
"postbuild": "dll-differ"
|
|
16
16
|
},
|
|
17
17
|
"dependencies": {
|
|
18
|
-
"@next-core/editor-bricks-helper": "^0.33.
|
|
18
|
+
"@next-core/editor-bricks-helper": "^0.33.26"
|
|
19
19
|
},
|
|
20
20
|
"devDependencies": {
|
|
21
|
-
"@next-core/brick-dll": "^2.
|
|
21
|
+
"@next-core/brick-dll": "^2.29.0",
|
|
22
22
|
"@next-core/webpack-config-factory": "^2.15.3",
|
|
23
|
-
"@next-dll/react-dnd": "^0.1.
|
|
23
|
+
"@next-dll/react-dnd": "^0.1.264"
|
|
24
24
|
},
|
|
25
|
-
"gitHead": "
|
|
25
|
+
"gitHead": "e6ca577af384cab45e2638d4dda77c7495f111c9"
|
|
26
26
|
}
|