@flowgram-vue/free-container-plugin 0.2.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.
Files changed (38) hide show
  1. package/LICENSE +22 -0
  2. package/dist/index.cjs +0 -0
  3. package/dist/index.cjs.map +1 -0
  4. package/dist/index.d.ts +1 -0
  5. package/dist/index.js +0 -0
  6. package/dist/index.js.map +1 -0
  7. package/package.json +66 -0
  8. package/src/env.d.ts +10 -0
  9. package/src/index.ts +8 -0
  10. package/src/node-into-container/constant.ts +9 -0
  11. package/src/node-into-container/index.ts +13 -0
  12. package/src/node-into-container/plugin.ts +26 -0
  13. package/src/node-into-container/service.ts +370 -0
  14. package/src/node-into-container/type.ts +29 -0
  15. package/src/sub-canvas/components/background/index.ts +6 -0
  16. package/src/sub-canvas/components/background/sub-canvas-background.vue +64 -0
  17. package/src/sub-canvas/components/border/index.ts +6 -0
  18. package/src/sub-canvas/components/border/sub-canvas-border.vue +47 -0
  19. package/src/sub-canvas/components/index.ts +9 -0
  20. package/src/sub-canvas/components/render/index.ts +6 -0
  21. package/src/sub-canvas/components/render/sub-canvas-render.vue +54 -0
  22. package/src/sub-canvas/components/tips/global-store.ts +38 -0
  23. package/src/sub-canvas/components/tips/index.ts +6 -0
  24. package/src/sub-canvas/components/tips/is-mac-os.ts +6 -0
  25. package/src/sub-canvas/components/tips/sub-canvas-tips.vue +157 -0
  26. package/src/sub-canvas/components/tips/use-control.ts +65 -0
  27. package/src/sub-canvas/hooks/index.ts +8 -0
  28. package/src/sub-canvas/hooks/use-node-size.ts +69 -0
  29. package/src/sub-canvas/hooks/use-sync-node-render-size.ts +26 -0
  30. package/src/sub-canvas/index.ts +7 -0
  31. package/src/utils/adjust-sub-node-position.ts +41 -0
  32. package/src/utils/get-collision-transform.ts +41 -0
  33. package/src/utils/get-container-transforms.ts +27 -0
  34. package/src/utils/index.ts +18 -0
  35. package/src/utils/is-container.ts +9 -0
  36. package/src/utils/is-point-in-rect.ts +9 -0
  37. package/src/utils/is-rect-intersects.ts +15 -0
  38. package/src/utils/next-frame.ts +8 -0
package/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
4
+ Copyright (c) 2026 Crayon
5
+
6
+ Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ of this software and associated documentation files (the "Software"), to deal
8
+ in the Software without restriction, including without limitation the rights
9
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ copies of the Software, and to permit persons to whom the Software is
11
+ furnished to do so, subject to the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be included in all
14
+ copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
+ SOFTWARE.
package/dist/index.cjs ADDED
Binary file
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/node-into-container/constant.ts","../src/utils/next-frame.ts","../src/utils/is-container.ts","../src/utils/get-container-transforms.ts","../src/utils/is-rect-intersects.ts","../src/utils/is-point-in-rect.ts","../src/utils/get-collision-transform.ts","../src/utils/adjust-sub-node-position.ts","../src/utils/index.ts","../src/node-into-container/service.ts","../src/node-into-container/plugin.ts","../src/sub-canvas/hooks/use-node-size.ts","../src/sub-canvas/hooks/use-sync-node-render-size.ts","vue-sfc-style:D:/dev/workspace/flowgram.vue/packages/plugins/free-container-plugin/src/sub-canvas/components/background/sub-canvas-background.vue?vue&type=style&index=0&scoped=df9f01f3","../src/sub-canvas/components/background/sub-canvas-background.vue","vue-sfc-style:D:/dev/workspace/flowgram.vue/packages/plugins/free-container-plugin/src/sub-canvas/components/border/sub-canvas-border.vue?vue&type=style&index=0&scoped=14f2a909","../src/sub-canvas/components/border/sub-canvas-border.vue","../src/sub-canvas/components/tips/global-store.ts","../src/sub-canvas/components/tips/use-control.ts","../src/sub-canvas/components/tips/is-mac-os.ts","vue-sfc-style:D:/dev/workspace/flowgram.vue/packages/plugins/free-container-plugin/src/sub-canvas/components/tips/sub-canvas-tips.vue?vue&type=style&index=0","../src/sub-canvas/components/tips/sub-canvas-tips.vue","vue-sfc-style:D:/dev/workspace/flowgram.vue/packages/plugins/free-container-plugin/src/sub-canvas/components/render/sub-canvas-render.vue?vue&type=style&index=0&scoped=93217521","../src/sub-canvas/components/render/sub-canvas-render.vue"],"names":["NodeIntoContainerType","document","Rectangle","FlowNodeBaseType","NodeIntoContainerService","Emitter","DisposableCollection","TransformData","throttle","renderData","FlowNodeRenderData","renderDom","inject","WorkflowDragService","WorkflowDocument","PlaygroundConfigEntity","WorkflowOperationBaseService","WorkflowLinesManager","HistoryService","WorkflowSelectService","injectable","definePluginCreator","useCurrentEntity","isContainer","FlowNodeTransformData","ref","WorkflowNodePortsData","onBeforeUnmount","watch","useService","BackgroundConfig","_openBlock","_createElementBlock","_normalizeStyle","_createElementVNode","_renderSlot","h","_sfc_main","defineComponent","I18n","computed","_normalizeClass","_createVNode","_withCtx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKO,IAAK,qBAAA,qBAAAA,sBAAAA,KAAL;AACL,EAAAA,uBAAA,IAAA,CAAA,GAAK,IAAA;AACL,EAAAA,uBAAA,KAAA,CAAA,GAAM,KAAA;AAFI,EAAA,OAAAA,sBAAAA;AAAA,CAAA,EAAA,qBAAA,IAAA,EAAA;;;ACAL,IAAM,YAAY,YAA2B;AAClD,EAAA,MAAM,IAAI,OAAA,CAAQ,CAAC,OAAA,KAAY,qBAAA,CAAsB,OAAO,CAAC,CAAA;AAC/D,CAAA;;;ACAO,IAAM,cAAc,CAAC,IAAA,KAC1B,IAAA,EAAM,WAAA,GAAgC,WAAA,IAAe,KAAA;;;ACGhD,IAAM,yBAAyB,CAAC,QAAA,KACrC,QAAA,CACG,MAAA,CAAO,CAAC,IAAA,KAAS;AAChB,EAAA,IAAI,KAAK,YAAA,EAAc;AACrB,IAAA,OAAO,KAAK,WAAA,EAAY,CAAE,cAAc,IAAA,CAAK,YAAA,CAAa,aAAY,CAAE,UAAA;AAAA,EAC1E;AACA,EAAA,OAAO,IAAA,CAAK,aAAY,CAAE,UAAA;AAC5B,CAAC,CAAA,CACA,MAAA,CAAO,CAAC,IAAA,KAAS,WAAA,CAAY,IAAI,CAAC,CAAA,CAClC,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM;AACd,EAAA,MAAM,MAAA,GAAS,EAAE,UAAA,CAAW,UAAA;AAC5B,EAAA,MAAM,MAAA,GAAS,EAAE,UAAA,CAAW,UAAA;AAE5B,EAAA,OAAO,MAAA,GAAS,MAAA;AAClB,CAAC,CAAA,CACA,GAAA,CAAI,CAAC,IAAA,KAAS,KAAK,SAAS,CAAA;;;ACnB1B,IAAM,gBAAA,GAAmB,CAAC,KAAA,EAAkB,KAAA,KAA8B;AAE/E,EAAA,MAAM,uBAAuB,KAAA,CAAM,KAAA,GAAQ,MAAM,IAAA,IAAQ,KAAA,CAAM,OAAO,KAAA,CAAM,KAAA;AAE5E,EAAA,MAAM,qBAAqB,KAAA,CAAM,MAAA,GAAS,MAAM,GAAA,IAAO,KAAA,CAAM,MAAM,KAAA,CAAM,MAAA;AAEzE,EAAA,OAAO,oBAAA,IAAwB,kBAAA;AACjC,CAAA;;;ACPO,IAAM,gBAAgB,CAAC,KAAA,EAAuB,SACnD,KAAA,CAAM,CAAA,IAAK,KAAK,IAAA,IAAQ,KAAA,CAAM,CAAA,IAAK,IAAA,CAAK,SAAS,KAAA,CAAM,CAAA,IAAK,KAAK,GAAA,IAAO,KAAA,CAAM,KAAK,IAAA,CAAK,MAAA;;;ACKnF,IAAM,qBAAA,GAAwB,CAAC,MAAA,KAMG;AACvC,EAAA,MAAM,EAAE,YAAY,WAAA,EAAa,UAAA,EAAY,cAAc,KAAA,EAAO,QAAA,EAAAC,WAAS,GAAI,MAAA;AAC/E,EAAA,MAAM,kBAAA,GAAqB,UAAA,CAAW,IAAA,CAAK,CAAC,SAAA,KAAc;AACxD,IAAA,MAAM,EAAE,MAAA,EAAQ,MAAA,EAAO,GAAI,SAAA;AAC3B,IAAA,MAAM,OAAA,GAAU,WAAA,GAAcA,SAAAA,CAAS,MAAA,CAAO,UAAA,CAAW,MAAM,CAAA,GAAI,EAAE,IAAA,EAAM,CAAA,EAAG,KAAA,EAAO,CAAA,EAAE;AACvF,IAAA,MAAM,gBAAgB,IAAIC,eAAA;AAAA,MACxB,MAAA,CAAO,CAAA,GAAI,OAAA,CAAQ,IAAA,GAAO,OAAA,CAAQ,KAAA;AAAA,MAClC,MAAA,CAAO,CAAA;AAAA,MACP,MAAA,CAAO,KAAA;AAAA,MACP,MAAA,CAAO;AAAA,KACT;AAEA,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,OAAO,gBAAA,CAAiB,YAAY,aAAa,CAAA;AAAA,IACnD;AACA,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,OAAO,aAAA,CAAc,aAAa,aAAa,CAAA;AAAA,IACjD;AACA,IAAA,OAAO,KAAA;AAAA,EACT,CAAC,CAAA;AACD,EAAA,OAAO,kBAAA;AACT,CAAA;AC5BO,IAAM,qBAAA,GAAwB,CAAC,MAAA,KAIxB;AACZ,EAAA,MAAM,EAAE,UAAA,EAAY,aAAA,EAAe,gBAAA,EAAiB,GAAI,MAAA;AACxD,EAAA,IAAI,aAAA,CAAc,YAAA,KAAiBC,2BAAA,CAAiB,IAAA,EAAM;AACxD,IAAA,OAAO,WAAW,SAAA,CAAU,QAAA;AAAA,EAC9B;AACA,EAAA,MAAM,kBAAA,GAAqB,UAAA,CAAW,SAAA,CAAU,SAAA,CAAU,cAAA;AAC1D,EAAA,MAAM,uBAAA,GAA0B,aAAA,CAAc,SAAA,CAAU,SAAA,CAAU,cAAA;AAClE,EAAA,MAAM,YAAA,GAAe;AAAA,IACnB,GAAG,kBAAA,CAAmB,EAAA;AAAA,IACtB,GAAG,kBAAA,CAAmB;AAAA,GACxB;AACA,EAAA,MAAM,gBAAgB,CAAC,aAAA,CAAc,QAAA,IAAY,aAAA,CAAc,SAAS,MAAA,KAAW,CAAA;AACnF,EAAA,IAAI,aAAA,EAAe;AAEjB,IAAA,OAAO;AAAA,MACL,CAAA,EAAG,CAAA;AAAA,MACH,GAAG,gBAAA,CAAiB;AAAA,KACtB;AAAA,EACF,CAAA,MAAO;AACL,IAAA,OAAO;AAAA,MACL,CAAA,EAAG,YAAA,CAAa,CAAA,GAAI,uBAAA,CAAwB,EAAA;AAAA,MAC5C,CAAA,EAAG,YAAA,CAAa,CAAA,GAAI,uBAAA,CAAwB;AAAA,KAC9C;AAAA,EACF;AACF,CAAA;;;AC7BO,IAAM,cAAA,GAAiB;AAAA,EAC5B,SAAA;AAAA,EACA,WAAA;AAAA,EACA,qBAAA;AAAA,EACA,sBAAA;AAAA,EACA;AACF;;;ACWaC,mCAAN,8BAAA,CAA+B;AAAA,EAA/B,WAAA,GAAA;AAsBL,IAAA,IAAA,CAAQ,OAAA,GAAU,IAAIC,aAAA,EAAgC;AAEtD,IAAA,IAAA,CAAQ,SAAA,GAAY,IAAIC,0BAAA,EAAqB;AAE7C,IAAA,IAAA,CAAgB,EAAA,GAAK,KAAK,OAAA,CAAQ,KAAA;AAAA,EAAA;AAAA,EAE3B,IAAA,GAAa;AAClB,IAAA,IAAA,CAAK,SAAA,EAAU;AACf,IAAA,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,IAAA,CAAK,OAAO,CAAA;AAAA,EAClC;AAAA,EAEO,KAAA,GAAc;AACnB,IAAA,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,IAAA,CAAK,qBAAA,EAAuB,CAAA;AAAA,EAClD;AAAA,EAEO,OAAA,GAAgB;AACrB,IAAA,IAAA,CAAK,SAAA,EAAU;AACf,IAAA,IAAA,CAAK,UAAU,OAAA,EAAQ;AAAA,EACzB;AAAA;AAAA,EAGA,MAAa,iBAAiB,MAAA,EAAqD;AACjF,IAAA,MAAM,EAAE,MAAK,GAAI,MAAA;AACjB,IAAA,MAAM,aAAa,IAAA,CAAK,MAAA;AACxB,IAAA,MAAM,gBAAgB,UAAA,EAAY,MAAA;AAClC,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,QAAA,CAAS,UAAA,CAAW,IAAI,CAAA;AAC9C,IAAA,IACE,CAAC,UAAA,IACD,CAAC,aAAA,IACD,CAAC,cAAA,CAAe,WAAA,CAAY,UAAU,CAAA,IACtC,CAAC,QAAA,CAAS,IAAA,EAAM,QAAA,EAChB;AACA,MAAA;AAAA,IACF;AACA,IAAA,MAAM,eAAA,GAAkB,UAAA,CAAW,OAAA,CAAuBC,kBAAa,CAAA;AACvE,IAAA,IAAA,CAAK,gBAAA,CAAiB,SAAS,IAAA,EAAM;AAAA,MACnC,MAAA,EAAQ;AAAA,KACT,CAAA;AACD,IAAA,MAAM,eAAe,SAAA,EAAU;AAC/B,IAAA,eAAA,CAAgB,UAAA,EAAW;AAC3B,IAAA,IAAA,CAAK,gBAAA,CAAiB,mBAAmB,IAAA,EAAM;AAAA,MAC7C,GAAG,eAAA,CAAgB,QAAA,CAAS,CAAA,GAAI,QAAA,CAAS,KAAM,QAAA,CAAU,CAAA;AAAA,MACzD,GAAG,eAAA,CAAgB,QAAA,CAAS,CAAA,GAAI,QAAA,CAAS,KAAM,QAAA,CAAU;AAAA,KAC1D,CAAA;AACD,IAAA,IAAA,CAAK,QAAQ,IAAA,CAAK;AAAA,MAChB,IAAA,EAAA,KAAA;AAAA,MACA,IAAA;AAAA,MACA,eAAA,EAAiB,UAAA;AAAA,MACjB,eAAA,EAAiB;AAAA,KAClB,CAAA;AAAA,EACH;AAAA;AAAA,EAGO,oBAAoB,IAAA,EAAmC;AAC5D,IAAA,MAAM,aAAa,IAAA,CAAK,MAAA;AACxB,IAAA,MAAM,gBAAgB,UAAA,EAAY,MAAA;AAClC,IAAA,IAAI,CAAC,cAAc,CAAC,aAAA,IAAiB,CAAC,cAAA,CAAe,WAAA,CAAY,UAAU,CAAA,EAAG;AAC5E,MAAA,OAAO,KAAA;AAAA,IACT;AACA,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,WAAA,CAAY,aAAA,CAAc;AAAA,MAC7C,cAAc,IAAA,CAAK,YAAA;AAAA,MACnB,QAAA,EAAU,IAAA;AAAA,MACV,cAAc,aAAA,EAAe,YAAA;AAAA,MAC7B,QAAA,EAAU;AAAA,KACX,CAAA;AACD,IAAA,IAAI,CAAC,QAAQ,SAAA,EAAW;AACtB,MAAA,OAAO,KAAA;AAAA,IACT;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA,EAGA,MAAa,kBAAkB,MAAA,EAGb;AAChB,IAAA,MAAM,EAAE,QAAA,EAAU,YAAA,EAAa,GAAI,MAAA;AACnC,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA;AAAA,IACF;AACA,IAAA,IAAI,QAAA,CAAS,WAAW,YAAA,EAAc;AAEpC,MAAA;AAAA,IACF;AACA,IAAA,IACE,QAAA,CAAS,QAAQ,YAAA,KAAiBJ,2BAAAA,CAAiB,SACnD,YAAA,EAAc,YAAA,KAAiBA,4BAAiB,KAAA,EAChD;AAEA,MAAA;AAAA,IACF;AACA,IAAA,MAAM,IAAA,CAAK,gBAAgB,QAAQ,CAAA;AAAA,EACrC;AAAA;AAAA,EAGA,MAAa,gBAAgB,IAAA,EAAyC;AACpE,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,YAAA,CAAa,WAAA,EAAY;AAC5C,IAAA,KAAA,CAAM,OAAA,CAAQ,CAAC,IAAA,KAAS;AACtB,MAAA,IAAI,IAAA,CAAK,MAAM,EAAA,KAAO,IAAA,CAAK,MAAM,IAAA,CAAK,EAAA,EAAI,EAAA,KAAO,IAAA,CAAK,EAAA,EAAI;AACxD,QAAA;AAAA,MACF;AACA,MAAA,IAAA,CAAK,OAAA,EAAQ;AAAA,IACf,CAAC,CAAA;AACD,IAAA,MAAM,eAAe,SAAA,EAAU;AAAA,EACjC;AAAA;AAAA,EAGQ,SAAA,GAAkB;AACxB,IAAA,IAAA,CAAK,KAAA,GAAQ;AAAA,MACX,cAAA,EAAgB,KAAA;AAAA,MAChB,WAAA,EAAa,KAAA;AAAA,MACb,UAAA,EAAY,MAAA;AAAA,MACZ,QAAA,EAAU,MAAA;AAAA,MACV,QAAA,EAAU,MAAA;AAAA,MACV,YAAA,EAAc;AAAA,KAChB;AAAA,EACF;AAAA;AAAA,EAGQ,qBAAA,GAAoC;AAC1C,IAAA,MAAM,YAAA,GAAe,CAAC,CAAA,KAAsB,IAAA,CAAK,aAAa,CAAC,CAAA;AAC/D,IAAA,MAAM,qBAAA,GAAwBK,iBAAA,CAAS,YAAA,EAAc,GAAG,CAAA;AACxD,IAAA,OAAO,IAAA,CAAK,WAAA,CAAY,WAAA,CAAY,OAAO,KAAA,KAAU;AACnD,MAAA,IAAI,IAAA,CAAK,aAAA,CAAc,aAAA,CAAc,MAAA,KAAW,CAAA,EAAG;AACjD,QAAA;AAAA,MACF;AACA,MAAA,IAAI,KAAA,CAAM,SAAS,aAAA,EAAe;AAChC,QAAA,IAAI,IAAA,CAAK,MAAM,WAAA,EAAa;AAE1B,UAAA,IAAA,CAAK,MAAM,WAAA,GAAc,KAAA;AACzB,UAAA;AAAA,QACF;AACA,QAAA,IAAA,CAAK,eAAe,gBAAA,EAAiB;AACrC,QAAA,IAAA,CAAK,MAAM,cAAA,GAAiB,IAAA;AAC5B,QAAA,IAAA,CAAK,MAAM,UAAA,GAAa,cAAA,CAAe,uBAAuB,IAAA,CAAK,QAAA,CAAS,aAAa,CAAA;AACzF,QAAA,IAAA,CAAK,KAAA,CAAM,QAAA,GAAW,IAAA,CAAK,aAAA,CAAc,cAAc,CAAC,CAAA;AACxD,QAAA,IAAA,CAAK,MAAM,QAAA,GAAW,MAAA;AACtB,QAAA,IAAA,CAAK,KAAA,CAAM,YAAA,GAAe,IAAA,CAAK,KAAA,CAAM,QAAA,EAAU,MAAA;AAC/C,QAAA,MAAM,IAAA,CAAK,iBAAiB,KAAK,CAAA;AAAA,MACnC;AACA,MAAA,IAAI,KAAA,CAAM,SAAS,YAAA,EAAc;AAC/B,QAAA,qBAAA,CAAsB,KAAK,CAAA;AAAA,MAC7B;AACA,MAAA,IAAI,KAAA,CAAM,SAAS,WAAA,EAAa;AAC9B,QAAA,IAAI,IAAA,CAAK,MAAM,WAAA,EAAa;AAE1B,UAAA;AAAA,QACF;AACA,QAAA,qBAAA,CAAsB,MAAA,EAAO;AAC7B,QAAA,YAAA,CAAa,KAAK,CAAA;AAClB,QAAA,MAAM,KAAK,mBAAA,EAAoB;AAC/B,QAAA,MAAM,KAAK,iBAAA,CAAkB;AAAA,UAC3B,QAAA,EAAU,KAAK,KAAA,CAAM,QAAA;AAAA,UACrB,YAAA,EAAc,KAAK,KAAA,CAAM;AAAA,SAC1B,CAAA;AACD,QAAA,IAAA,CAAK,YAAY,MAAS,CAAA;AAC1B,QAAA,IAAA,CAAK,SAAA,EAAU;AACf,QAAA,IAAA,CAAK,eAAe,cAAA,EAAe;AAAA,MACrC;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAc,iBAAiB,KAAA,EAAsC;AACnE,IAAA,MAAM,EAAE,QAAA,EAAS,GAAI,IAAA,CAAK,KAAA;AAC1B,IAAA,MAAM,SAAA,GAAY,KAAA,CAAM,YAAA,CAAa,OAAA,IAAW,MAAM,YAAA,CAAa,OAAA;AACnE,IAAA,IACE,CAAC,SAAA;AAAA,IACD,CAAC,QAAA;AAAA,IACD,CAAC,IAAA,CAAK,mBAAA,CAAoB,QAAQ,CAAA,EAClC;AACA,MAAA;AAAA,IACF;AACA,IAAA,IAAA,CAAK,gBAAA,CAAiB,EAAE,IAAA,EAAM,QAAA,EAAU,CAAA;AACxC,IAAA,IAAA,CAAK,MAAM,WAAA,GAAc,IAAA;AACzB,IAAA,KAAA,CAAM,QAAQ,IAAA,CAAK,KAAA,CAAM,UAAU,OAAA,EAAS,KAAA,CAAM,UAAU,OAAO,CAAA;AACnE,IAAA,MAAM,eAAe,SAAA,EAAU;AAC/B,IAAA,IAAA,CAAK,WAAA,CAAY,sBAAA,CAAuB,KAAA,CAAM,YAAY,CAAA;AAAA,EAC5D;AAAA;AAAA,EAGQ,YAAY,QAAA,EAA+B;AACjD,IAAA,IAAI,IAAA,CAAK,KAAA,CAAM,QAAA,KAAa,QAAA,EAAU;AACpC,MAAA;AAAA,IACF;AACA,IAAA,IAAI,IAAA,CAAK,MAAM,QAAA,EAAU;AAEvB,MAAA,MAAMC,WAAAA,GAAa,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,QAAQC,6BAAkB,CAAA;AACjE,MAAA,MAAMC,UAAAA,GAAYF,WAAAA,CAAW,IAAA,EAAM,QAAA,GAAW,CAAC,CAAA;AAC/C,MAAA,IAAIE,UAAAA,EAAW;AACb,QAAAA,UAAAA,CAAU,SAAA,CAAU,MAAA,CAAO,UAAU,CAAA;AAAA,MACvC;AAAA,IACF;AACA,IAAA,IAAA,CAAK,MAAM,QAAA,GAAW,QAAA;AACtB,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,UAAA,GAAa,QAAA,CAAS,OAAA,CAAQD,6BAAkB,CAAA;AACtD,IAAA,MAAM,SAAA,GAAY,UAAA,CAAW,IAAA,EAAM,QAAA,GAAW,CAAC,CAAA;AAC/C,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,SAAA,CAAU,SAAA,CAAU,IAAI,UAAU,CAAA;AAAA,IACpC;AAAA,EACF;AAAA;AAAA,EAGA,MAAc,mBAAA,GAAqC;AACjD,IAAA,MAAM,EAAE,QAAA,EAAU,QAAA,EAAU,cAAA,KAAmB,IAAA,CAAK,KAAA;AACpD,IAAA,IAAI,CAAC,cAAA,IAAkB,CAAC,QAAA,IAAY,CAAC,QAAA,EAAU;AAC7C,MAAA;AAAA,IACF;AACA,IAAA,OAAO,MAAM,KAAK,iBAAA,CAAkB;AAAA,MAClC,IAAA,EAAM,QAAA;AAAA,MACN,aAAA,EAAe;AAAA,KAChB,CAAA;AAAA,EACH;AAAA;AAAA,EAGQ,aAAa,aAAA,EAAqC;AACxD,IAAA,MAAM,EAAE,QAAA,EAAU,cAAA,EAAgB,aAAa,EAAC,KAAM,IAAA,CAAK,KAAA;AAC3D,IAAA,IAAI,CAAC,cAAA,IAAkB,CAAC,QAAA,IAAY,CAAC,YAAY,MAAA,EAAQ;AACvD,MAAA,OAAO,IAAA,CAAK,YAAY,MAAS,CAAA;AAAA,IACnC;AACA,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,gBAAA,CAAiB,oBAAA,CAAqB,cAAc,SAAS,CAAA;AACnF,IAAA,MAAM,sBAAsB,UAAA,CAAW,MAAA;AAAA,MACrC,CAAC,SAAA,KAAc,SAAA,CAAU,MAAA,CAAO,OAAO,QAAA,CAAS;AAAA,KAClD;AACA,IAAA,MAAM,kBAAA,GAAqB,eAAe,qBAAA,CAAsB;AAAA,MAC9D,WAAA,EAAa,QAAA;AAAA,MACb,UAAA,EAAY,mBAAA;AAAA,MACZ,UAAU,IAAA,CAAK;AAAA,KAChB,CAAA;AACD,IAAA,MAAM,WAAW,kBAAA,EAAoB,MAAA;AACrC,IAAA,MAAM,OAAA,GAAU,KAAK,kBAAA,CAAmB;AAAA,MACtC,QAAA;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,OAAO,IAAA,CAAK,YAAY,MAAS,CAAA;AAAA,IACnC;AACA,IAAA,OAAO,IAAA,CAAK,YAAY,QAAQ,CAAA;AAAA,EAClC;AAAA;AAAA,EAGU,mBAAmB,MAAA,EAGjB;AACV,IAAA,MAAM,EAAE,QAAA,EAAU,QAAA,EAAS,GAAI,MAAA;AAC/B,IAAA,MAAM,eAAA,GAAkB,QAAA,EAAU,WAAA,EAA8B,CAAE,WAAA;AAClE,IAAA,IACE,CAAC,QAAA,IACD,CAAC,eAAA,IACD,IAAA,CAAK,QAAA,CAAS,QAAA,EAAU,QAAQ,CAAA,IAChC,IAAA,CAAK,QAAA,CAAS,QAAA,EAAU,QAAQ,CAAA,EAChC;AACA,MAAA,OAAO,KAAA;AAAA,IACT;AACA,IAAA,IACE,SAAS,YAAA,KAAiBP,2BAAAA,CAAiB,SAC3C,QAAA,CAAS,YAAA,KAAiBA,4BAAiB,KAAA,EAC3C;AAEA,MAAA,OAAO,KAAA;AAAA,IACT;AACA,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,WAAA,CAAY,aAAA,CAAc;AAAA,MAC7C,cAAc,QAAA,CAAS,YAAA;AAAA,MACvB,cAAc,QAAA,EAAU,YAAA;AAAA,MACxB,QAAA;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAA,IAAI,CAAC,QAAQ,SAAA,EAAW;AACtB,MAAA,OAAO,KAAA;AAAA,IACT;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA,EAGQ,QAAA,CAAS,MAA0B,MAAA,EAAqC;AAC9E,IAAA,IAAI,UAAU,IAAA,CAAK,MAAA;AACnB,IAAA,OAAO,OAAA,EAAS;AACd,MAAA,IAAI,OAAA,CAAQ,EAAA,KAAO,MAAA,CAAO,EAAA,EAAI;AAC5B,QAAA,OAAO,IAAA;AAAA,MACT;AACA,MAAA,OAAA,GAAU,OAAA,CAAQ,MAAA;AAAA,IACpB;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AAAA;AAAA,EAGA,MAAc,kBAAkB,MAAA,EAGd;AAChB,IAAA,MAAM,EAAE,IAAA,EAAM,aAAA,EAAc,GAAI,MAAA;AAChC,IAAA,MAAM,aAAa,IAAA,CAAK,MAAA;AAExB,IAAA,IAAA,CAAK,gBAAA,CAAiB,SAAS,IAAA,EAAM;AAAA,MACnC,MAAA,EAAQ;AAAA,KACT,CAAA;AAED,IAAA,MAAM,gBAAA,GAAmB,IAAA,CAAK,QAAA,CAAS,MAAA,CAAO,WAAW,aAAa,CAAA;AACtE,IAAA,MAAM,QAAA,GAAW,eAAe,qBAAA,CAAsB;AAAA,MACpD,UAAA,EAAY,IAAA;AAAA,MACZ,aAAA;AAAA,MACA;AAAA,KACD,CAAA;AAED,IAAA,IAAA,CAAK,gBAAA,CAAiB,kBAAA,CAAmB,IAAA,EAAM,QAAQ,CAAA;AAEvD,IAAA,MAAM,eAAe,SAAA,EAAU;AAE/B,IAAA,IAAA,CAAK,QAAQ,IAAA,CAAK;AAAA,MAChB,IAAA,EAAA,IAAA;AAAA,MACA,IAAA;AAAA,MACA,eAAA,EAAiB,UAAA;AAAA,MACjB,eAAA,EAAiB;AAAA,KAClB,CAAA;AAAA,EACH;AACF;AAjVU,eAAA,CAAA;AAAA,EADPS,iBAAOC,kCAAmB;AAAA,CAAA,EAHhBT,gCAAA,CAIH,SAAA,EAAA,aAAA,EAAA,CAAA,CAAA;AAGA,eAAA,CAAA;AAAA,EADPQ,iBAAOE,+BAAgB;AAAA,CAAA,EANbV,gCAAA,CAOH,SAAA,EAAA,UAAA,EAAA,CAAA,CAAA;AAGA,eAAA,CAAA;AAAA,EADPQ,iBAAOG,2BAAsB;AAAA,CAAA,EATnBX,gCAAA,CAUH,SAAA,EAAA,kBAAA,EAAA,CAAA,CAAA;AAGA,eAAA,CAAA;AAAA,EADPQ,iBAAOI,2CAA4B;AAAA,CAAA,EAZzBZ,gCAAA,CAaH,SAAA,EAAA,kBAAA,EAAA,CAAA,CAAA;AAGA,eAAA,CAAA;AAAA,EADPQ,iBAAOK,mCAAoB;AAAA,CAAA,EAfjBb,gCAAA,CAgBH,SAAA,EAAA,cAAA,EAAA,CAAA,CAAA;AAEwB,eAAA,CAAA;AAAA,EAA/BQ,iBAAOM,gCAAc;AAAA,CAAA,EAlBXd,gCAAA,CAkBqB,SAAA,EAAA,gBAAA,EAAA,CAAA,CAAA;AAEO,eAAA,CAAA;AAAA,EAAtCQ,iBAAOO,oCAAqB;AAAA,CAAA,EApBlBf,gCAAA,CAoB4B,SAAA,EAAA,eAAA,EAAA,CAAA,CAAA;AApB5BA,gCAAA,GAAN,eAAA,CAAA;AAAA,EADNgB,oBAAA;AAAW,CAAA,EACChB,gCAAA,CAAA;AClBN,IAAM,4BAA4BiB,wBAAA,CAAoD;AAAA,EAC3F,MAAA,EAAQ,CAAC,EAAE,IAAA,EAAK,KAAM;AACpB,IAAA,IAAA,CAAKjB,gCAAwB,CAAA,CAAE,MAAA,EAAO,CAAE,gBAAA,EAAiB;AAAA,EAC3D,CAAA;AAAA,EACA,OAAO,GAAA,EAAK;AACV,IAAA,GAAA,CAAI,GAAA,CAAIA,gCAAwB,CAAA,CAAE,IAAA,EAAK;AAAA,EACzC,CAAA;AAAA,EACA,OAAA,CAAQ,KAAK,OAAA,EAAS;AACpB,IAAA,IAAI,OAAA,CAAQ,6BAA6B,IAAA,EAAM;AAC7C,MAAA,GAAA,CAAI,GAAA,CAAIA,gCAAwB,CAAA,CAAE,KAAA,EAAM;AAAA,IAC1C;AAAA,EACF,CAAA;AAAA,EACA,UAAU,GAAA,EAAK;AACb,IAAA,GAAA,CAAI,GAAA,CAAIA,gCAAwB,CAAA,CAAE,OAAA,EAAQ;AAAA,EAC5C;AACF,CAAC;ACNM,IAAM,cAAc,MAA4B;AACrD,EAAA,MAAM,OAAOkB,+BAAA,EAAiB;AAC9B,EAAA,MAAM,QAAA,GAAW,KAAK,WAAA,EAA8B;AACpD,EAAA,MAAM,EAAE,IAAA,GAAO,EAAE,KAAA,EAAO,GAAA,EAAK,QAAQ,GAAA,EAAI,EAAG,WAAA,EAAAC,YAAAA,EAAY,GAAI,QAAA;AAE5D,EAAA,MAAM,SAAA,GAAY,IAAA,CAAK,OAAA,CAA+BC,gCAAqB,CAAA;AAC3E,EAAA,MAAM,KAAA,GAAQC,OAAA,CAAI,IAAA,CAAK,KAAK,CAAA;AAC5B,EAAA,MAAM,MAAA,GAASA,OAAA,CAAI,IAAA,CAAK,MAAM,CAAA;AAE9B,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,OAAA,CAA+BC,oCAAqB,CAAA;AAC3E,IAAA,SAAA,CAAU,kBAAA,EAAmB;AAAA,EAC/B,CAAA;AAEA,EAAA,MAAM,aAAa,MAAM;AAEvB,IAAA,IAAI,IAAA,CAAK,MAAA,CAAO,MAAA,KAAW,CAAA,EAAG;AAC5B,MAAA,KAAA,CAAM,QAAQ,IAAA,CAAK,KAAA;AACnB,MAAA,MAAA,CAAO,QAAQ,IAAA,CAAK,MAAA;AACpB,MAAA;AAAA,IACF;AAEA,IAAA,KAAA,CAAM,KAAA,GAAQ,UAAU,MAAA,CAAO,KAAA;AAC/B,IAAA,MAAA,CAAO,KAAA,GAAQ,UAAU,MAAA,CAAO,MAAA;AAAA,EAClC,CAAA;AAEA,EAAA,MAAM,OAAA,GAAU,SAAA,CAAU,YAAA,CAAa,MAAM;AAC3C,IAAA,UAAA,EAAW;AACX,IAAA,WAAA,EAAY;AAAA,EACd,CAAC,CAAA;AAED,EAAA,UAAA,EAAW;AAEX,EAAAC,mBAAA,CAAgB,MAAM;AACpB,IAAA,OAAA,CAAQ,OAAA,EAAQ;AAAA,EAClB,CAAC,CAAA;AAED,EAAA,IAAI,CAACJ,YAAAA,EAAa;AAChB,IAAA;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,IAAI,KAAA,GAAQ;AACV,MAAA,OAAO,KAAA,CAAM,KAAA;AAAA,IACf,CAAA;AAAA,IACA,IAAI,MAAA,GAAS;AACX,MAAA,OAAO,MAAA,CAAO,KAAA;AAAA,IAChB;AAAA,GACF;AACF;ACzDO,IAAM,qBAAA,GAAwB,CAAC,QAAA,KAAwB;AAC5D,EAAA,MAAM,OAAOD,+BAAAA,EAAiB;AAE9B,EAAAM,SAAA;AAAA,IACE,MAAM,CAAC,QAAA,EAAU,KAAA,EAAO,UAAU,MAAM,CAAA;AAAA,IACxC,MAAM;AACJ,MAAA,IAAI,CAAC,QAAA,EAAU;AACb,QAAA;AAAA,MACF;AACA,MAAA,IAAA,CAAK,WAAW,IAAA,CAAK,KAAA,CAAM,KAAA,GAAQ,CAAA,EAAG,SAAS,KAAK,CAAA,EAAA,CAAA;AACpD,MAAA,IAAA,CAAK,WAAW,IAAA,CAAK,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG,SAAS,MAAM,CAAA,EAAA,CAAA;AAAA,IACxD,CAAA;AAAA,IACA,EAAE,SAAA,EAAW,IAAA,EAAM,KAAA,EAAO,MAAA;AAAO,GACnC;AACF;;;ACzBA,CAAA,CAAE,WAAU;AAAC,EAAA,IAAG,OAAO,aAAW,WAAA,EAAY;AAAO,EAAA,IAAI,CAAA,GAAE,6GAAA;AAA2H,EAAA,IAAI,CAAA,GAAE,QAAA,CAAS,aAAA,CAAc,OAAO,CAAA;AAAE,EAAA,CAAA,CAAE,WAAA,GAAY,CAAA;AAAE,EAAA,QAAA,CAAS,IAAA,CAAK,YAAY,CAAC,CAAA;AAAE,CAAA,GAAG;;;;;ACU5Q,IAAA,MAAM,OAAON,+BAAAA,EAAiB;AAE9B,IAAA,IAAI,mBAA2C,EAAC;AAChD,IAAA,IAAI;AACF,MAAA,gBAAA,GAAmBO,gBAAmCC,iCAAgB,CAAA;IACxE,CAAA,CAAA,MAAQ;AAER,IAAA;AAEA,IAAA,MAAM,QAAA,GAAW,iBAAiB,QAAA,IAAY,EAAA;AAC9C,IAAA,MAAM,OAAA,GAAU,iBAAiB,OAAA,IAAW,CAAA;AAC5C,IAAA,MAAM,QAAA,GAAW,iBAAiB,QAAA,IAAY,SAAA;AAC9C,IAAA,MAAM,UAAA,GAAa,iBAAiB,UAAA,IAAc,GAAA;AAClD,IAAA,MAAM,eAAA,GAAkB,iBAAiB,eAAA,IAAmB,SAAA;AAC5D,IAAA,MAAM,YAAA,GACJ,gBAAA,CAAiB,YAAA,KAAiB,QAAA,GAAW,KAAK,gBAAA,CAAiB,YAAA;AAErE,IAAA,MAAM,SAAA,GAAY,CAAA,uBAAA,EAA0B,IAAA,CAAK,EAAE,CAAA,CAAA;;;;;;;;;;;EAS1C,KAAA,EAAM,MAAA;EAAO,MAAA,EAAO;;;;;;AAL3B,EAAA,OAAAC,aAAA,EAAA,EAAAC,sBAAA;AAuBM,IAAA,KAAA;AAAA,IAAA;MAtBJ,KAAA,EAAM,uBAAA;MACN,6BAAA,EAA4B,MAAA;AAC3B,MAAA,KAAA,EAAKC,kBAAA,CAAA,EAAA,eAAA,EAAI,MAAA,CAAA,iBAAe;AAAA,KAAA;;AAEzB,OAAAF,aAAA,EAAA,EAAAC,sBAAA,CAiBM,OAjBN,UAAA,EAiBM;AAhBJ,QAAAE,sBAAA,CASU,SAAA,EAAA;AATA,UAAA,EAAA,EAAI,MAAA,CAAA,SAAA;AAAY,UAAA,KAAA,EAAO,MAAA,CAAA,QAAA;AAAW,UAAA,MAAA,EAAQ,MAAA,CAAA,QAAA;UAAU,YAAA,EAAa;SAAA,EAAA;AACzE,UAAAA,sBAAA,CAOE,QAAA,EAAA;AANC,YAAA,EAAA,EAAI,MAAA,CAAA,OAAA;AACJ,YAAA,EAAA,EAAI,MAAA,CAAA,OAAA;AACJ,YAAA,CAAA,EAAG,MAAA,CAAA,OAAA;AACH,YAAA,MAAA,EAAQ,MAAA,CAAA,QAAA;AACR,YAAA,IAAA,EAAM,MAAA,CAAA,YAAA;AACN,YAAA,cAAA,EAAc,MAAA,CAAA;WAAA,EAAA,IAAA,EAAA,GAAA,UAAA;;AAGnB,QAAAA,sBAAA,CAKE,MAAA,EAAA;UAJA,KAAA,EAAM,MAAA;UACN,MAAA,EAAO,MAAA;UACN,IAAA,EAAI,CAAA,KAAA,EAAU,OAAA,SAAS,CAAA,CAAA,CAAA;AACvB,UAAA,2BAAA,EAA2B,OAAA,IAAA,CAAK;SAAA,EAAA,IAAA,EAAA,GAAA,UAAA;;;;;;;;;;ACnDzC,CAAA,CAAE,WAAU;AAAC,EAAA,IAAG,OAAO,aAAW,WAAA,EAAY;AAAO,EAAA,IAAI,CAAA,GAAE,kqBAAA;AAAgrB,EAAA,IAAI,CAAA,GAAE,QAAA,CAAS,aAAA,CAAc,OAAO,CAAA;AAAE,EAAA,CAAA,CAAE,WAAA,GAAY,CAAA;AAAE,EAAA,QAAA,CAAS,IAAA,CAAK,YAAY,CAAC,CAAA;AAAE,CAAA,GAAG;;;;;;;;;;;;;;ACc/zBF,EAAAA,OAAAA,aAAAA,EAAAA,EAAAA,sBAAAA;AAEM,IAAA,KAAA;AAAA,IAAA;MAFD,KAAA,EAAM,mBAAA;MAAqB,KAAA,EAAKC,kBAAAA,CAAE,OAAA,KAAK;AAAA,KAAA;;AAC1C,MAAAE,cAAA,CAAQ,KAAA,MAAA,EAAA,SAAA,EAAA,EAAA,EAAA,QAAA,IAAA;AAAA,KAAA;;;;;;;;ACRZ,IAAM,WAAA,GAAc,2CAAA;AACpB,IAAM,aAAA,GAAgB,OAAA;AAEf,IAAM,eAAA,GAAN,MAAM,gBAAA,CAAgB;AAAA,EAAtB,WAAA,GAAA;AAUL,IAAA,IAAA,CAAQ,MAAA,GAAS,KAAA;AAAA,EAAA;AAAA,EAPjB,WAAkB,QAAA,GAA4B;AAC5C,IAAA,IAAI,CAAC,KAAK,SAAA,EAAW;AACnB,MAAA,IAAA,CAAK,SAAA,GAAY,IAAI,gBAAA,EAAgB;AAAA,IACvC;AACA,IAAA,OAAO,IAAA,CAAK,SAAA;AAAA,EACd;AAAA,EAIO,QAAA,GAAoB;AACzB,IAAA,OAAO,IAAA,CAAK,cAAA,EAAe,IAAK,IAAA,CAAK,MAAA;AAAA,EACvC;AAAA,EAEO,KAAA,GAAc;AACnB,IAAA,IAAA,CAAK,MAAA,GAAS,IAAA;AAAA,EAChB;AAAA,EAEO,cAAA,GAA0B;AAC/B,IAAA,OAAO,YAAA,CAAa,OAAA,CAAQ,WAAW,CAAA,KAAM,aAAA;AAAA,EAC/C;AAAA,EAEO,YAAA,GAAqB;AAC1B,IAAA,YAAA,CAAa,OAAA,CAAQ,aAAa,aAAa,CAAA;AAAA,EACjD;AACF,CAAA;;;ACxBO,IAAM,iBAAiB,MAAM;AAClC,EAAA,MAAM,OAAOb,+BAAAA,EAAiB;AAC9B,EAAA,MAAM,OAAA,GAAUG,QAAI,KAAK,CAAA;AACzB,EAAA,MAAM,cAAc,eAAA,CAAgB,QAAA;AAEpC,EAAA,MAAM,wBAAA,GAA2BI,gBAAqCzB,gCAAwB,CAAA;AAE9F,EAAA,MAAM,OAAO,MAAM;AACjB,IAAA,IAAI,WAAA,CAAY,UAAS,EAAG;AAC1B,MAAA;AAAA,IACF;AACA,IAAA,OAAA,CAAQ,KAAA,GAAQ,IAAA;AAAA,EAClB,CAAA;AAEA,EAAA,MAAM,QAAQ,MAAM;AAClB,IAAA,WAAA,CAAY,KAAA,EAAM;AAClB,IAAA,OAAA,CAAQ,KAAA,GAAQ,KAAA;AAAA,EAClB,CAAA;AAEA,EAAA,MAAM,eAAe,MAAM;AACzB,IAAA,WAAA,CAAY,YAAA,EAAa;AACzB,IAAA,KAAA,EAAM;AAAA,EACR,CAAA;AAEA,EAAA,MAAM,UAAA,GAAa,wBAAA,CAAyB,EAAA,CAAG,CAAC,CAAA,KAAM;AACpD,IAAA,IAAI,EAAE,IAAA,KAAA,IAAA,WAAmC;AACvC,MAAA;AAAA,IACF;AACA,IAAA,IAAI,CAAA,CAAE,oBAAoB,IAAA,EAAM;AAC9B,MAAA,IAAA,EAAK;AAAA,IACP;AAAA,EACF,CAAC,CAAA;AACD,EAAA,MAAM,WAAA,GAAc,wBAAA,CAAyB,EAAA,CAAG,CAAC,CAAA,KAAM;AACrD,IAAA,IAAI,EAAE,IAAA,KAAA,KAAA,YAAoC;AACxC,MAAA;AAAA,IACF;AACA,IAAA,IAAI,EAAE,eAAA,KAAoB,IAAA,IAAQ,CAAC,IAAA,CAAK,OAAO,MAAA,EAAQ;AACrD,MAAA,OAAA,CAAQ,KAAA,GAAQ,KAAA;AAAA,IAClB;AAAA,EACF,CAAC,CAAA;AAED,EAAAuB,oBAAgB,MAAM;AACpB,IAAA,UAAA,CAAW,OAAA,EAAQ;AACnB,IAAA,WAAA,CAAY,OAAA,EAAQ;AAAA,EACtB,CAAC,CAAA;AAED,EAAA,OAAO;AAAA,IACL,OAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,GACF;AACF,CAAA;;;AC3DO,IAAM,OAAA,GAAU,yCAAA,CAA0C,IAAA,CAAK,SAAA,CAAU,SAAS,CAAA;;;ACLzF,CAAA,CAAE,WAAU;AAAC,EAAA,IAAG,OAAO,aAAW,WAAA,EAAY;AAAO,EAAA,IAAI,CAAA,GAAE,w0CAAA;AAAs1C,EAAA,IAAI,CAAA,GAAE,QAAA,CAAS,aAAA,CAAc,OAAO,CAAA;AAAE,EAAA,CAAA,CAAE,WAAA,GAAY,CAAA;AAAE,EAAA,QAAA,CAAS,IAAA,CAAK,YAAY,CAAC,CAAA;AAAE,CAAA,GAAG;ACav+C,SAAS,SAAA,GAAY;AACnB,EAAA,OAAOS,KAAA;AACL,IAAA,KAAA;AACA,IAAA;MACE,KAAA,EAAO,4BAAA;MACP,KAAA,EAAO,IAAA;MACP,MAAA,EAAQ,IAAA;MACR,IAAA,EAAM,MAAA;MACN,OAAA,EAAS;AACX,KAAA;AACA,IAAA;AACE,MAAAA,KAAA,CAAE,MAAA,EAAQ;QACR,IAAA,EAAM,SAAA;QACN,cAAA,EAAgB,KAAA;QAChB,CAAA,EAAG;OACJ;AACH;AACF,GAAA;AACF;AAEA,IAAKC,aAAaC,mBAAA,CAAa;EAC7B,IAAA,EAAM,eAAA;EACN,KAAA,EAAO;IACL,OAAA,EAAS;MACP,IAAA,EAAM,CAAC,QAAQ,MAAM,CAAA;MACrB,OAAA,EAAS;AACX,KAAA;IACA,eAAA,EAAiB;MACf,IAAA,EAAM,CAAC,QAAQ,MAAM,CAAA;MACrB,OAAA,EAAS;AACX;AACF,GAAA;AACA,EAAA,KAAA,CAAM,KAAA,EAAO;AACX,IAAA,MAAM,EAAE,OAAA,EAAS,KAAA,EAAO,YAAA,KAAiB,cAAA,EAAe;AAExD,IAAA,OAAO,MAAM;AACX,MAAA,MAAM,cAAA,GACJ,KAAA,CAAM,OAAA,IAAWC,SAAA,CAAK,CAAA,CAAE,+BAAA,EAAiC,EAAE,GAAA,EAAK,OAAA,GAAU,YAAA,GAAU,MAAA,EAAQ,CAAA;AAE9F,MAAA,IAAI,CAAC,QAAQ,KAAA,EAAO;AAClB,QAAA,OAAO,IAAA;AACT,MAAA;AAEA,MAAA,OAAOH,KAAA,CAAE,KAAA,EAAO,EAAE,KAAA,EAAO,mBAAkB,EAAG;AAC5C,QAAAA,KAAA,CAAE,KAAA,EAAO,EAAE,KAAA,EAAO,WAAA,EAAY,EAAG;AAC/B,UAAAA,KAAA,CAAE,KAAA,EAAO,EAAE,KAAA,EAAO,SAAA,EAAU,EAAG;AAC7B,YAAA,OAAO,mBAAmB,QAAA,GACtBA,KAAA,CAAE,KAAK,EAAE,KAAA,EAAO,QAAO,EAAG,cAAc,CAAA,GACxCA,KAAA,CAAE,OAAO,EAAE,KAAA,EAAO,kBAAiB,EAAG,CAAC,cAAc,CAAC,CAAA;YAC1DA,KAAA,CAAE,KAAA,EAAO,EAAE,KAAA,EAAO,OAAA,EAAS,OAAO,EAAE,KAAA,EAAO,KAAA,EAAM,EAAG;WACrD,CAAA;AACD,UAAAA,KAAA,CAAE,KAAA,EAAO,EAAE,KAAA,EAAO,SAAA,EAAU,EAAG;AAC7B,YAAAA,KAAA;AACE,cAAA,GAAA;cACA,EAAE,KAAA,EAAO,eAAA,EAAiB,OAAA,EAAS,YAAA,EAAa;cAChD,KAAA,CAAM,eAAA,IAAmBG,SAAA,CAAK,CAAA,CAAE,cAAc;AAChD,aAAA;YACAH,KAAA,CAAE,KAAA,EAAO,EAAE,KAAA,EAAO,OAAA,EAAS,OAAA,EAAS,OAAM,EAAG,CAAC,SAAA,EAAW,CAAC;WAC3D;SACF;OACF,CAAA;AACH,IAAA,CAAA;AACF,EAAA;AACF,CAAC,CAAA;;;;AC5ED,CAAA,CAAE,WAAU;AAAC,EAAA,IAAG,OAAO,aAAW,WAAA,EAAY;AAAO,EAAA,IAAI,CAAA,GAAE,+EAAA;AAA6F,EAAA,IAAI,CAAA,GAAE,QAAA,CAAS,aAAA,CAAc,OAAO,CAAA;AAAE,EAAA,CAAA,CAAE,WAAA,GAAY,CAAA;AAAE,EAAA,QAAA,CAAS,IAAA,CAAK,YAAY,CAAC,CAAA;AAAE,CAAA,GAAG;;;;;;;;;;;ACoB9O,IAAA,MAAM,WAAW,WAAA,EAAY;AAC7B,IAAA,MAAM,UAAA,GAAaI,YAAA,CAAS,MAAM,QAAA,EAAU,UAAU,CAAC,CAAA;AAEvD,IAAA,qBAAA,CAAsB,QAAQ,CAAA;AAE9B,IAAA,MAAM,eAAA,GAAkB,CAAC,CAAA,KAAiB;AACxC,MAAA,CAAA,CAAE,eAAA,EAAgB;AACpB,IAAA,CAAA;;;;;;;;;;;;;AAIER,EAAAA,OAAAA,aAAAA,EAAAA,EAAAA,sBAAAA;AAcM,IAAA,KAAA;AAAA,IAAA;AAbJ,MAAA,KAAA,EAAKS,kBAAA,CAAA,CAAC,mBAAA,EACE,MAAA,CAAA,SAAS,CAAA,CAAA;AAChB,MAAA,KAAA,EAAKR,kBAAAA,CAAA;AAAA,QAAA,MAAA,EAAA,CAAA,EAAqB,MAAA,CAAA,UAAA,IAAc,MAAA,CAAA,WAAO,CAAA,CAAA,CAAA,EAAA,CAAA;AAAA,QAAA,GAAqB,MAAA,CAAA;OAAA,CAAA;MAIrE,6BAAA,EAA4B,MAAA;AAC3B,MAAA,WAAA,EAAW,MAAA,CAAA;AAAA,KAAA;;MAEZS,eAAA,CAGkB,MAAA,CAAA,iBAAA,CAAA,EAAA,IAAA,EAAA;AAAA,QAAA,OAAA,EAAAC,YAFhB,MAAuB;UAAvBD,eAAA,CAAuB,MAAA,CAAA,qBAAA,CAAA,CAAA;AACvB,UAAAA,eAAA,CAAqC,MAAA,CAAA,eAAA,CAAA,EAAA,EAArB,UAAA,EAAU,MAAA,CAAA,OAAA,EAAO,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA;SAAA,CAAA","file":"index.cjs","sourcesContent":["/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nexport enum NodeIntoContainerType {\n In = 'in',\n Out = 'out',\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nexport const nextFrame = async (): Promise<void> => {\n await new Promise((resolve) => requestAnimationFrame(resolve));\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { WorkflowNodeEntity, WorkflowNodeMeta } from '@flowgram-vue/free-layout-core';\n\nexport const isContainer = (node?: WorkflowNodeEntity): boolean =>\n node?.getNodeMeta<WorkflowNodeMeta>().isContainer ?? false;\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { WorkflowNodeEntity } from '@flowgram-vue/free-layout-core';\nimport { FlowNodeTransformData } from '@flowgram-vue/document';\n\nimport { isContainer } from './is-container';\n\n/** 获取容器节点transforms */\nexport const getContainerTransforms = (allNodes: WorkflowNodeEntity[]): FlowNodeTransformData[] =>\n allNodes\n .filter((node) => {\n if (node.originParent) {\n return node.getNodeMeta().selectable && node.originParent.getNodeMeta().selectable;\n }\n return node.getNodeMeta().selectable;\n })\n .filter((node) => isContainer(node))\n .sort((a, b) => {\n const aIndex = a.renderData.stackIndex;\n const bIndex = b.renderData.stackIndex;\n // 确保层级高的节点在前面\n return bIndex - aIndex;\n })\n .map((node) => node.transform);\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { Rectangle } from '@flowgram-vue/utils';\n\nexport const isRectIntersects = (rectA: Rectangle, rectB: Rectangle): boolean => {\n // 检查水平方向是否有重叠\n const hasHorizontalOverlap = rectA.right > rectB.left && rectA.left < rectB.right;\n // 检查垂直方向是否有重叠\n const hasVerticalOverlap = rectA.bottom > rectB.top && rectA.top < rectB.bottom;\n // 只有当水平和垂直方向都有重叠时,两个矩形才相交\n return hasHorizontalOverlap && hasVerticalOverlap;\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { PositionSchema, Rectangle } from '@flowgram-vue/utils';\n\nexport const isPointInRect = (point: PositionSchema, rect: Rectangle): boolean =>\n point.x >= rect.left && point.x <= rect.right && point.y >= rect.top && point.y <= rect.bottom;\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { PositionSchema, Rectangle } from '@flowgram-vue/utils';\nimport { WorkflowDocument } from '@flowgram-vue/free-layout-core';\nimport { FlowNodeTransformData } from '@flowgram-vue/document';\n\nimport { isRectIntersects } from './is-rect-intersects';\nimport { isPointInRect } from './is-point-in-rect';\n\n/** 获取重叠位置 */\nexport const getCollisionTransform = (params: {\n transforms: FlowNodeTransformData[];\n targetRect?: Rectangle;\n targetPoint?: PositionSchema;\n withPadding?: boolean;\n document: WorkflowDocument;\n}): FlowNodeTransformData | undefined => {\n const { targetRect, targetPoint, transforms, withPadding = false, document } = params;\n const collisionTransform = transforms.find((transform) => {\n const { bounds, entity } = transform;\n const padding = withPadding ? document.layout.getPadding(entity) : { left: 0, right: 0 };\n const transformRect = new Rectangle(\n bounds.x + padding.left + padding.right,\n bounds.y,\n bounds.width,\n bounds.height\n );\n // 检测两个正方形是否相互碰撞\n if (targetRect) {\n return isRectIntersects(targetRect, transformRect);\n }\n if (targetPoint) {\n return isPointInRect(targetPoint, transformRect);\n }\n return false;\n });\n return collisionTransform;\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { IPoint, PaddingSchema } from '@flowgram-vue/utils';\nimport { WorkflowNodeEntity } from '@flowgram-vue/free-layout-core';\nimport { FlowNodeBaseType } from '@flowgram-vue/document';\n\n/**\n * 如果存在容器节点,且传入鼠标坐标,需要用容器的坐标减去传入的鼠标坐标\n */\nexport const adjustSubNodePosition = (params: {\n targetNode: WorkflowNodeEntity;\n containerNode: WorkflowNodeEntity;\n containerPadding: PaddingSchema;\n}): IPoint => {\n const { targetNode, containerNode, containerPadding } = params;\n if (containerNode.flowNodeType === FlowNodeBaseType.ROOT) {\n return targetNode.transform.position;\n }\n const nodeWorldTransform = targetNode.transform.transform.worldTransform;\n const containerWorldTransform = containerNode.transform.transform.worldTransform;\n const nodePosition = {\n x: nodeWorldTransform.tx,\n y: nodeWorldTransform.ty,\n };\n const isParentEmpty = !containerNode.children || containerNode.children.length === 0;\n if (isParentEmpty) {\n // 确保空容器节点不偏移\n return {\n x: 0,\n y: containerPadding.top,\n };\n } else {\n return {\n x: nodePosition.x - containerWorldTransform.tx,\n y: nodePosition.y - containerWorldTransform.ty,\n };\n }\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { nextFrame } from './next-frame';\nimport { isContainer } from './is-container';\nimport { getContainerTransforms } from './get-container-transforms';\nimport { getCollisionTransform } from './get-collision-transform';\nimport { adjustSubNodePosition } from './adjust-sub-node-position';\n\nexport const ContainerUtils = {\n nextFrame,\n isContainer,\n adjustSubNodePosition,\n getContainerTransforms,\n getCollisionTransform,\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\n/* eslint-disable @typescript-eslint/no-non-null-assertion -- no need */\nimport { throttle } from 'lodash-es';\nimport { inject, injectable } from 'inversify';\nimport { type Disposable, DisposableCollection, Emitter } from '@flowgram-vue/utils';\nimport {\n type NodesDragEvent,\n WorkflowDocument,\n WorkflowDragService,\n WorkflowLinesManager,\n type WorkflowNodeEntity,\n WorkflowNodeMeta,\n WorkflowOperationBaseService,\n WorkflowSelectService,\n} from '@flowgram-vue/free-layout-core';\nimport { HistoryService } from '@flowgram-vue/free-history-plugin';\nimport { FlowNodeRenderData, FlowNodeBaseType } from '@flowgram-vue/document';\nimport { PlaygroundConfigEntity, TransformData } from '@flowgram-vue/core';\n\nimport type { NodeIntoContainerEvent, NodeIntoContainerState } from './type';\nimport { NodeIntoContainerType } from './constant';\nimport { ContainerUtils } from '../utils';\n\n@injectable()\nexport class NodeIntoContainerService {\n public state: NodeIntoContainerState;\n\n @inject(WorkflowDragService)\n private dragService: WorkflowDragService;\n\n @inject(WorkflowDocument)\n private document: WorkflowDocument;\n\n @inject(PlaygroundConfigEntity)\n private playgroundConfig: PlaygroundConfigEntity;\n\n @inject(WorkflowOperationBaseService)\n private operationService: WorkflowOperationBaseService;\n\n @inject(WorkflowLinesManager)\n private linesManager: WorkflowLinesManager;\n\n @inject(HistoryService) private historyService: HistoryService;\n\n @inject(WorkflowSelectService) private selectService: WorkflowSelectService;\n\n private emitter = new Emitter<NodeIntoContainerEvent>();\n\n private toDispose = new DisposableCollection();\n\n public readonly on = this.emitter.event;\n\n public init(): void {\n this.initState();\n this.toDispose.push(this.emitter);\n }\n\n public ready(): void {\n this.toDispose.push(this.listenDragToContainer());\n }\n\n public dispose(): void {\n this.initState();\n this.toDispose.dispose();\n }\n\n /** 将节点移出容器 */\n public async moveOutContainer(params: { node: WorkflowNodeEntity }): Promise<void> {\n const { node } = params;\n const parentNode = node.parent;\n const containerNode = parentNode?.parent;\n const nodeJSON = this.document.toNodeJSON(node);\n if (\n !parentNode ||\n !containerNode ||\n !ContainerUtils.isContainer(parentNode) ||\n !nodeJSON.meta?.position\n ) {\n return;\n }\n const parentTransform = parentNode.getData<TransformData>(TransformData);\n this.operationService.moveNode(node, {\n parent: containerNode,\n });\n await ContainerUtils.nextFrame();\n parentTransform.fireChange();\n this.operationService.updateNodePosition(node, {\n x: parentTransform.position.x + nodeJSON.meta!.position!.x,\n y: parentTransform.position.y + nodeJSON.meta!.position!.y,\n });\n this.emitter.fire({\n type: NodeIntoContainerType.Out,\n node,\n sourceContainer: parentNode,\n targetContainer: containerNode,\n });\n }\n\n /** 能否将节点移出容器 */\n public canMoveOutContainer(node: WorkflowNodeEntity): boolean {\n const parentNode = node.parent;\n const containerNode = parentNode?.parent;\n if (!parentNode || !containerNode || !ContainerUtils.isContainer(parentNode)) {\n return false;\n }\n const canDrop = this.dragService.canDropToNode({\n dragNodeType: node.flowNodeType,\n dragNode: node,\n dropNodeType: containerNode?.flowNodeType,\n dropNode: containerNode,\n });\n if (!canDrop.allowDrop) {\n return false;\n }\n return true;\n }\n\n /** 移除节点所有非法连线 */\n public async clearInvalidLines(params: {\n dragNode?: WorkflowNodeEntity;\n sourceParent?: WorkflowNodeEntity;\n }): Promise<void> {\n const { dragNode, sourceParent } = params;\n if (!dragNode) {\n return;\n }\n if (dragNode.parent === sourceParent) {\n // 容器节点未改变\n return;\n }\n if (\n dragNode.parent?.flowNodeType === FlowNodeBaseType.GROUP ||\n sourceParent?.flowNodeType === FlowNodeBaseType.GROUP\n ) {\n // 移入移出 group 节点无需删除节点\n return;\n }\n await this.removeNodeLines(dragNode);\n }\n\n /** 移除节点连线 */\n public async removeNodeLines(node: WorkflowNodeEntity): Promise<void> {\n const lines = this.linesManager.getAllLines();\n lines.forEach((line) => {\n if (line.from?.id !== node.id && line.to?.id !== node.id) {\n return;\n }\n line.dispose();\n });\n await ContainerUtils.nextFrame();\n }\n\n /** 初始化状态 */\n private initState(): void {\n this.state = {\n isDraggingNode: false,\n isSkipEvent: false,\n transforms: undefined,\n dragNode: undefined,\n dropNode: undefined,\n sourceParent: undefined,\n };\n }\n\n /** 监听节点拖拽 */\n private listenDragToContainer(): Disposable {\n const draggingNode = (e: NodesDragEvent) => this.draggingNode(e);\n const throttledDraggingNode = throttle(draggingNode, 200); // 200ms触发一次计算\n return this.dragService.onNodesDrag(async (event) => {\n if (this.selectService.selectedNodes.length !== 1) {\n return;\n }\n if (event.type === 'onDragStart') {\n if (this.state.isSkipEvent) {\n // 拖出容器后重新进入\n this.state.isSkipEvent = false;\n return;\n }\n this.historyService.startTransaction(); // 开始合并历史记录\n this.state.isDraggingNode = true;\n this.state.transforms = ContainerUtils.getContainerTransforms(this.document.getAllNodes());\n this.state.dragNode = this.selectService.selectedNodes[0];\n this.state.dropNode = undefined;\n this.state.sourceParent = this.state.dragNode?.parent;\n await this.dragOutContainer(event); // 检查是否需拖出容器\n }\n if (event.type === 'onDragging') {\n throttledDraggingNode(event);\n }\n if (event.type === 'onDragEnd') {\n if (this.state.isSkipEvent) {\n // 拖出容器情况下需跳过本次事件\n return;\n }\n throttledDraggingNode.cancel();\n draggingNode(event); // 直接触发一次计算,防止延迟\n await this.dropNodeToContainer(); // 放置节点\n await this.clearInvalidLines({\n dragNode: this.state.dragNode,\n sourceParent: this.state.sourceParent,\n }); // 清除非法线条\n this.setDropNode(undefined);\n this.initState(); // 重置状态\n this.historyService.endTransaction(); // 结束合并历史记录\n }\n });\n }\n\n /** 监听节点拖拽出容器 */\n private async dragOutContainer(event: NodesDragEvent): Promise<void> {\n const { dragNode } = this.state;\n const activated = event.triggerEvent.metaKey || event.triggerEvent.ctrlKey;\n if (\n !activated || // 必须按住指定按键\n !dragNode || // 必须有一个节点\n !this.canMoveOutContainer(dragNode) // 需要能被移出容器\n ) {\n return;\n }\n this.moveOutContainer({ node: dragNode });\n this.state.isSkipEvent = true;\n event.dragger.stop(event.dragEvent.clientX, event.dragEvent.clientY);\n await ContainerUtils.nextFrame();\n this.dragService.startDragSelectedNodes(event.triggerEvent);\n }\n\n /** 设置放置节点高亮 */\n private setDropNode(dropNode?: WorkflowNodeEntity) {\n if (this.state.dropNode === dropNode) {\n return;\n }\n if (this.state.dropNode) {\n // 清除上一个节点高亮\n const renderData = this.state.dropNode.getData(FlowNodeRenderData);\n const renderDom = renderData.node?.children?.[0] as HTMLElement;\n if (renderDom) {\n renderDom.classList.remove('selected');\n }\n }\n this.state.dropNode = dropNode;\n if (!dropNode) {\n return;\n }\n // 设置当前节点高亮\n const renderData = dropNode.getData(FlowNodeRenderData);\n const renderDom = renderData.node?.children?.[0] as HTMLElement;\n if (renderDom) {\n renderDom.classList.add('selected');\n }\n }\n\n /** 放置节点到容器 */\n private async dropNodeToContainer(): Promise<void> {\n const { dropNode, dragNode, isDraggingNode } = this.state;\n if (!isDraggingNode || !dragNode || !dropNode) {\n return;\n }\n return await this.moveIntoContainer({\n node: dragNode,\n containerNode: dropNode,\n });\n }\n\n /** 拖拽节点 */\n private draggingNode(nodeDragEvent: NodesDragEvent): void {\n const { dragNode, isDraggingNode, transforms = [] } = this.state;\n if (!isDraggingNode || !dragNode || !transforms?.length) {\n return this.setDropNode(undefined);\n }\n const mousePos = this.playgroundConfig.getPosFromMouseEvent(nodeDragEvent.dragEvent);\n const availableTransforms = transforms.filter(\n (transform) => transform.entity.id !== dragNode.id\n );\n const collisionTransform = ContainerUtils.getCollisionTransform({\n targetPoint: mousePos,\n transforms: availableTransforms,\n document: this.document,\n });\n const dropNode = collisionTransform?.entity;\n const canDrop = this.canDropToContainer({\n dragNode,\n dropNode,\n });\n if (!canDrop) {\n return this.setDropNode(undefined);\n }\n return this.setDropNode(dropNode);\n }\n\n /** 判断能否将节点拖入容器 */\n protected canDropToContainer(params: {\n dragNode: WorkflowNodeEntity;\n dropNode?: WorkflowNodeEntity;\n }): boolean {\n const { dragNode, dropNode } = params;\n const isDropContainer = dropNode?.getNodeMeta<WorkflowNodeMeta>().isContainer;\n if (\n !dropNode ||\n !isDropContainer ||\n this.isParent(dragNode, dropNode) ||\n this.isParent(dropNode, dragNode)\n ) {\n return false;\n }\n if (\n dragNode.flowNodeType === FlowNodeBaseType.GROUP &&\n dropNode.flowNodeType !== FlowNodeBaseType.GROUP\n ) {\n // 禁止将 group 节点拖入非 group 节点(由于目前不支持多节点拖入容器,无法计算有效线条,因此进行屏蔽)\n return false;\n }\n const canDrop = this.dragService.canDropToNode({\n dragNodeType: dragNode.flowNodeType,\n dropNodeType: dropNode?.flowNodeType,\n dragNode,\n dropNode,\n });\n if (!canDrop.allowDrop) {\n return false;\n }\n return true;\n }\n\n /** 判断一个节点是否为另一个节点的父节点(向上查找直到根节点) */\n private isParent(node: WorkflowNodeEntity, parent: WorkflowNodeEntity): boolean {\n let current = node.parent;\n while (current) {\n if (current.id === parent.id) {\n return true;\n }\n current = current.parent;\n }\n return false;\n }\n\n /** 将节点移入容器 */\n private async moveIntoContainer(params: {\n node: WorkflowNodeEntity;\n containerNode: WorkflowNodeEntity;\n }): Promise<void> {\n const { node, containerNode } = params;\n const parentNode = node.parent;\n\n this.operationService.moveNode(node, {\n parent: containerNode,\n });\n\n const containerPadding = this.document.layout.getPadding(containerNode);\n const position = ContainerUtils.adjustSubNodePosition({\n targetNode: node,\n containerNode,\n containerPadding,\n });\n\n this.operationService.updateNodePosition(node, position);\n\n await ContainerUtils.nextFrame();\n\n this.emitter.fire({\n type: NodeIntoContainerType.In,\n node,\n sourceContainer: parentNode,\n targetContainer: containerNode,\n });\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { definePluginCreator } from '@flowgram-vue/core';\n\nimport type { WorkflowContainerPluginOptions } from './type';\nimport { NodeIntoContainerService } from '.';\n\nexport const createContainerNodePlugin = definePluginCreator<WorkflowContainerPluginOptions>({\n onBind: ({ bind }) => {\n bind(NodeIntoContainerService).toSelf().inSingletonScope();\n },\n onInit(ctx) {\n ctx.get(NodeIntoContainerService).init();\n },\n onReady(ctx, options) {\n if (options.disableNodeIntoContainer !== true) {\n ctx.get(NodeIntoContainerService).ready();\n }\n },\n onDispose(ctx) {\n ctx.get(NodeIntoContainerService).dispose();\n },\n});\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { onBeforeUnmount, ref } from 'vue';\n\nimport {\n useCurrentEntity,\n WorkflowNodeMeta,\n WorkflowNodePortsData,\n} from '@flowgram-vue/free-layout-core';\nimport { FlowNodeTransformData } from '@flowgram-vue/document';\n\nexport interface NodeSize {\n width: number;\n height: number;\n}\n\nexport const useNodeSize = (): NodeSize | undefined => {\n const node = useCurrentEntity();\n const nodeMeta = node.getNodeMeta<WorkflowNodeMeta>();\n const { size = { width: 300, height: 200 }, isContainer } = nodeMeta;\n\n const transform = node.getData<FlowNodeTransformData>(FlowNodeTransformData);\n const width = ref(size.width);\n const height = ref(size.height);\n\n const updatePorts = () => {\n const portsData = node.getData<WorkflowNodePortsData>(WorkflowNodePortsData);\n portsData.updateDynamicPorts();\n };\n\n const updateSize = () => {\n // 无子节点时\n if (node.blocks.length === 0) {\n width.value = size.width;\n height.value = size.height;\n return;\n }\n // 存在子节点时,只监听宽高变化\n width.value = transform.bounds.width;\n height.value = transform.bounds.height;\n };\n\n const dispose = transform.onDataChange(() => {\n updateSize();\n updatePorts();\n });\n\n updateSize();\n\n onBeforeUnmount(() => {\n dispose.dispose();\n });\n\n if (!isContainer) {\n return;\n }\n\n return {\n get width() {\n return width.value;\n },\n get height() {\n return height.value;\n },\n };\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { watch } from 'vue';\n\nimport { useCurrentEntity } from '@flowgram-vue/free-layout-core';\n\nimport { NodeSize } from './use-node-size';\n\nexport const useSyncNodeRenderSize = (nodeSize?: NodeSize) => {\n const node = useCurrentEntity();\n\n watch(\n () => [nodeSize?.width, nodeSize?.height],\n () => {\n if (!nodeSize) {\n return;\n }\n node.renderData.node.style.width = `${nodeSize.width}px`;\n node.renderData.node.style.height = `${nodeSize.height}px`;\n },\n { immediate: true, flush: 'post' }\n );\n};\n","!(function(){if(typeof document===\"undefined\")return;var c=\"\\n.sub-canvas-background[data-v-df9f01f3] {\\n width: 100%;\\n height: 100%;\\n inset: 56px 18px 18px;\\n}\\n\";if(!c)return;var s=document.createElement(\"style\");s.textContent=c;document.head.appendChild(s);})();","<script setup lang=\"ts\">\n/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { useCurrentEntity } from '@flowgram-vue/free-layout-core';\nimport { useService } from '@flowgram-vue/core';\nimport { BackgroundConfig, type BackgroundLayerOptions } from '@flowgram-vue/background-plugin';\n\nconst node = useCurrentEntity();\n\nlet backgroundConfig: BackgroundLayerOptions = {};\ntry {\n backgroundConfig = useService<BackgroundLayerOptions>(BackgroundConfig);\n} catch {\n // 如果 BackgroundConfig 没有注册,使用默认配置\n}\n\nconst gridSize = backgroundConfig.gridSize ?? 20;\nconst dotSize = backgroundConfig.dotSize ?? 1;\nconst dotColor = backgroundConfig.dotColor ?? '#eceeef';\nconst dotOpacity = backgroundConfig.dotOpacity ?? 0.5;\nconst backgroundColor = backgroundConfig.backgroundColor ?? '#f2f3f5';\nconst dotFillColor =\n backgroundConfig.dotFillColor === dotColor ? '' : backgroundConfig.dotFillColor;\n\nconst patternId = `sub-canvas-dot-pattern-${node.id}`;\n</script>\n\n<template>\n <div\n class=\"sub-canvas-background\"\n data-flow-editor-selectable=\"true\"\n :style=\"{ backgroundColor }\"\n >\n <svg width=\"100%\" height=\"100%\">\n <pattern :id=\"patternId\" :width=\"gridSize\" :height=\"gridSize\" patternUnits=\"userSpaceOnUse\">\n <circle\n :cx=\"dotSize\"\n :cy=\"dotSize\"\n :r=\"dotSize\"\n :stroke=\"dotColor\"\n :fill=\"dotFillColor\"\n :fill-opacity=\"dotOpacity\"\n />\n </pattern>\n <rect\n width=\"100%\"\n height=\"100%\"\n :fill=\"`url(#${patternId})`\"\n :data-node-panel-container=\"node.id\"\n />\n </svg>\n </div>\n</template>\n\n<style scoped>\n.sub-canvas-background {\n width: 100%;\n height: 100%;\n inset: 56px 18px 18px;\n}\n</style>\n","!(function(){if(typeof document===\"undefined\")return;var c=\"\\n.sub-canvas-border[data-v-14f2a909] {\\n pointer-events: none;\\n position: relative;\\n display: flex;\\n align-items: center;\\n width: 100%;\\n height: 100%;\\n background-color: transparent;\\n border: 1px solid var(--coz-stroke-plus, rgba(6, 7, 9, 15%));\\n border-color: var(--coz-bg-plus, rgb(249, 249, 249));\\n border-style: solid;\\n border-width: 8px;\\n border-radius: 8px;\\n}\\n.sub-canvas-border[data-v-14f2a909]::before {\\n content: '';\\n position: absolute;\\n z-index: 0;\\n inset: -4px;\\n background-color: transparent;\\n border-color: var(--coz-bg-plus, rgb(249, 249, 249));\\n border-style: solid;\\n border-width: 4px;\\n border-radius: 8px;\\n}\\n\";if(!c)return;var s=document.createElement(\"style\");s.textContent=c;document.head.appendChild(s);})();","<script setup lang=\"ts\">\n/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport type { CSSProperties } from 'vue';\n\ndefineProps<{\n style?: CSSProperties;\n}>();\n</script>\n\n<template>\n <div class=\"sub-canvas-border\" :style=\"style\">\n <slot />\n </div>\n</template>\n\n<style scoped>\n.sub-canvas-border {\n pointer-events: none;\n position: relative;\n display: flex;\n align-items: center;\n width: 100%;\n height: 100%;\n background-color: transparent;\n border: 1px solid var(--coz-stroke-plus, rgba(6, 7, 9, 15%));\n border-color: var(--coz-bg-plus, rgb(249, 249, 249));\n border-style: solid;\n border-width: 8px;\n border-radius: 8px;\n}\n\n.sub-canvas-border::before {\n content: '';\n position: absolute;\n z-index: 0;\n inset: -4px;\n background-color: transparent;\n border-color: var(--coz-bg-plus, rgb(249, 249, 249));\n border-style: solid;\n border-width: 4px;\n border-radius: 8px;\n}\n</style>\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\n/* eslint-disable @typescript-eslint/naming-convention -- no need */\n\nconst STORAGE_KEY = 'workflow-move-into-sub-canvas-tip-visible';\nconst STORAGE_VALUE = 'false';\n\nexport class TipsGlobalStore {\n private static _instance?: TipsGlobalStore;\n\n public static get instance(): TipsGlobalStore {\n if (!this._instance) {\n this._instance = new TipsGlobalStore();\n }\n return this._instance;\n }\n\n private closed = false;\n\n public isClosed(): boolean {\n return this.isCloseForever() || this.closed;\n }\n\n public close(): void {\n this.closed = true;\n }\n\n public isCloseForever(): boolean {\n return localStorage.getItem(STORAGE_KEY) === STORAGE_VALUE;\n }\n\n public closeForever(): void {\n localStorage.setItem(STORAGE_KEY, STORAGE_VALUE);\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { onBeforeUnmount, ref } from 'vue';\n\nimport { useCurrentEntity } from '@flowgram-vue/free-layout-core';\nimport { useService } from '@flowgram-vue/core';\n\nimport { NodeIntoContainerService, NodeIntoContainerType } from '../../../node-into-container';\nimport { TipsGlobalStore } from './global-store';\n\nexport const useControlTips = () => {\n const node = useCurrentEntity();\n const visible = ref(false);\n const globalStore = TipsGlobalStore.instance;\n\n const nodeIntoContainerService = useService<NodeIntoContainerService>(NodeIntoContainerService);\n\n const show = () => {\n if (globalStore.isClosed()) {\n return;\n }\n visible.value = true;\n };\n\n const close = () => {\n globalStore.close();\n visible.value = false;\n };\n\n const closeForever = () => {\n globalStore.closeForever();\n close();\n };\n\n const inDisposer = nodeIntoContainerService.on((e) => {\n if (e.type !== NodeIntoContainerType.In) {\n return;\n }\n if (e.targetContainer === node) {\n show();\n }\n });\n const outDisposer = nodeIntoContainerService.on((e) => {\n if (e.type !== NodeIntoContainerType.Out) {\n return;\n }\n if (e.sourceContainer === node && !node.blocks.length) {\n visible.value = false;\n }\n });\n\n onBeforeUnmount(() => {\n inDisposer.dispose();\n outDisposer.dispose();\n });\n\n return {\n visible,\n close,\n closeForever,\n };\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nexport const isMacOS = /(Macintosh|MacIntel|MacPPC|Mac68K|iPad)/.test(navigator.userAgent);\n","!(function(){if(typeof document===\"undefined\")return;var c=\"\\n.sub-canvas-tips {\\n pointer-events: auto;\\n position: absolute;\\n top: 0;\\n width: 100%;\\n height: 28px;\\n}\\n.sub-canvas-tips .container {\\n height: 100%;\\n background-color: #e4e6f5;\\n border-radius: 4px 4px 0 0;\\n}\\n.sub-canvas-tips .content {\\n overflow: hidden;\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n width: 100%;\\n height: 100%;\\n}\\n.sub-canvas-tips .text {\\n font-size: 14px;\\n font-weight: 400;\\n font-style: normal;\\n line-height: 20px;\\n color: rgba(15, 21, 40, 82%);\\n text-overflow: ellipsis;\\n}\\n.sub-canvas-tips .custom-content {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n width: 100%;\\n height: 100%;\\n font-size: 14px;\\n font-weight: 400;\\n line-height: 20px;\\n color: rgba(15, 21, 40, 82%);\\n overflow: hidden;\\n}\\n.sub-canvas-tips .space {\\n width: 128px;\\n}\\n.sub-canvas-tips .actions {\\n position: absolute;\\n top: 0;\\n right: 0;\\n display: flex;\\n gap: 8px;\\n align-items: center;\\n height: 28px;\\n padding: 0 16px;\\n}\\n.sub-canvas-tips .close-forever {\\n cursor: pointer;\\n padding: 0 3px;\\n font-size: 12px;\\n font-weight: 400;\\n font-style: normal;\\n line-height: 12px;\\n color: rgba(32, 41, 69, 62%);\\n}\\n.sub-canvas-tips .close {\\n display: flex;\\n cursor: pointer;\\n height: 100%;\\n align-items: center;\\n}\\n\";if(!c)return;var s=document.createElement(\"style\");s.textContent=c;document.head.appendChild(s);})();","<script lang=\"ts\">\n/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { defineComponent, h, type PropType, type VNode } from 'vue';\n\nimport { I18n } from '@flowgram-vue/i18n';\n\nimport { useControlTips } from './use-control';\nimport { isMacOS } from './is-mac-os';\n\nfunction IconClose() {\n return h(\n 'svg',\n {\n xmlns: 'http://www.w3.org/2000/svg',\n width: '16',\n height: '16',\n fill: 'none',\n viewBox: '0 0 16 16',\n },\n [\n h('path', {\n fill: '#060709',\n 'fill-opacity': '0.5',\n d: 'M12.13 12.128a.5.5 0 0 0 .001-.706L8.71 8l3.422-3.423a.5.5 0 0 0-.001-.705.5.5 0 0 0-.706-.002L8.002 7.293 4.579 3.87a.5.5 0 0 0-.705.002.5.5 0 0 0-.002.705L7.295 8l-3.423 3.422a.5.5 0 0 0 .002.706c.195.195.51.197.705.001l3.423-3.422 3.422 3.422c.196.196.51.194.706-.001',\n }),\n ]\n );\n}\n\nexport default defineComponent({\n name: 'SubCanvasTips',\n props: {\n tipText: {\n type: [String, Object] as PropType<string | VNode>,\n default: undefined,\n },\n neverRemindText: {\n type: [String, Object] as PropType<string | VNode>,\n default: undefined,\n },\n },\n setup(props) {\n const { visible, close, closeForever } = useControlTips();\n\n return () => {\n const displayContent =\n props.tipText || I18n.t('Hold {{key}} to drag node out', { key: isMacOS ? 'Cmd ⌘' : 'Ctrl' });\n\n if (!visible.value) {\n return null;\n }\n\n return h('div', { class: 'sub-canvas-tips' }, [\n h('div', { class: 'container' }, [\n h('div', { class: 'content' }, [\n typeof displayContent === 'string'\n ? h('p', { class: 'text' }, displayContent)\n : h('div', { class: 'custom-content' }, [displayContent]),\n h('div', { class: 'space', style: { width: '0px' } }),\n ]),\n h('div', { class: 'actions' }, [\n h(\n 'p',\n { class: 'close-forever', onClick: closeForever },\n props.neverRemindText || I18n.t('Never Remind')\n ),\n h('div', { class: 'close', onClick: close }, [IconClose()]),\n ]),\n ]),\n ]);\n };\n },\n});\n</script>\n\n<style>\n.sub-canvas-tips {\n pointer-events: auto;\n position: absolute;\n top: 0;\n width: 100%;\n height: 28px;\n}\n\n.sub-canvas-tips .container {\n height: 100%;\n background-color: #e4e6f5;\n border-radius: 4px 4px 0 0;\n}\n\n.sub-canvas-tips .content {\n overflow: hidden;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n}\n\n.sub-canvas-tips .text {\n font-size: 14px;\n font-weight: 400;\n font-style: normal;\n line-height: 20px;\n color: rgba(15, 21, 40, 82%);\n text-overflow: ellipsis;\n}\n\n.sub-canvas-tips .custom-content {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n font-size: 14px;\n font-weight: 400;\n line-height: 20px;\n color: rgba(15, 21, 40, 82%);\n overflow: hidden;\n}\n\n.sub-canvas-tips .space {\n width: 128px;\n}\n\n.sub-canvas-tips .actions {\n position: absolute;\n top: 0;\n right: 0;\n display: flex;\n gap: 8px;\n align-items: center;\n height: 28px;\n padding: 0 16px;\n}\n\n.sub-canvas-tips .close-forever {\n cursor: pointer;\n padding: 0 3px;\n font-size: 12px;\n font-weight: 400;\n font-style: normal;\n line-height: 12px;\n color: rgba(32, 41, 69, 62%);\n}\n\n.sub-canvas-tips .close {\n display: flex;\n cursor: pointer;\n height: 100%;\n align-items: center;\n}\n</style>\n","!(function(){if(typeof document===\"undefined\")return;var c=\"\\n.sub-canvas-render[data-v-93217521] {\\n width: 100%;\\n height: 100%;\\n}\\n\";if(!c)return;var s=document.createElement(\"style\");s.textContent=c;document.head.appendChild(s);})();","<script setup lang=\"ts\">\n/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { computed, type CSSProperties, type VNode } from 'vue';\n\nimport { SubCanvasTips } from '../tips';\nimport { SubCanvasBorder } from '../border';\nimport { SubCanvasBackground } from '../background';\nimport { useNodeSize, useSyncNodeRenderSize } from '../../hooks';\n\ndefineProps<{\n offsetY?: number;\n className?: string;\n style?: CSSProperties;\n tipText?: string | VNode;\n}>();\n\nconst nodeSize = useNodeSize();\nconst nodeHeight = computed(() => nodeSize?.height ?? 0);\n\nuseSyncNodeRenderSize(nodeSize);\n\nconst handleDragStart = (e: DragEvent) => {\n e.stopPropagation();\n};\n</script>\n\n<template>\n <div\n class=\"sub-canvas-render\"\n :class=\"className\"\n :style=\"{\n height: `${nodeHeight + (offsetY ?? 0)}px`,\n ...style,\n }\"\n data-flow-editor-selectable=\"true\"\n @dragstart=\"handleDragStart\"\n >\n <SubCanvasBorder>\n <SubCanvasBackground />\n <SubCanvasTips :tip-text=\"tipText\" />\n </SubCanvasBorder>\n </div>\n</template>\n\n<style scoped>\n.sub-canvas-render {\n width: 100%;\n height: 100%;\n}\n</style>\n"]}
@@ -0,0 +1 @@
1
+ export * from '../src/index';
package/dist/index.js ADDED
Binary file
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/node-into-container/constant.ts","../src/utils/next-frame.ts","../src/utils/is-container.ts","../src/utils/get-container-transforms.ts","../src/utils/is-rect-intersects.ts","../src/utils/is-point-in-rect.ts","../src/utils/get-collision-transform.ts","../src/utils/adjust-sub-node-position.ts","../src/utils/index.ts","../src/node-into-container/service.ts","../src/node-into-container/plugin.ts","../src/sub-canvas/hooks/use-node-size.ts","../src/sub-canvas/hooks/use-sync-node-render-size.ts","vue-sfc-style:D:/dev/workspace/flowgram.vue/packages/plugins/free-container-plugin/src/sub-canvas/components/background/sub-canvas-background.vue?vue&type=style&index=0&scoped=df9f01f3","../src/sub-canvas/components/background/sub-canvas-background.vue","vue-sfc-style:D:/dev/workspace/flowgram.vue/packages/plugins/free-container-plugin/src/sub-canvas/components/border/sub-canvas-border.vue?vue&type=style&index=0&scoped=14f2a909","../src/sub-canvas/components/border/sub-canvas-border.vue","../src/sub-canvas/components/tips/global-store.ts","../src/sub-canvas/components/tips/use-control.ts","../src/sub-canvas/components/tips/is-mac-os.ts","vue-sfc-style:D:/dev/workspace/flowgram.vue/packages/plugins/free-container-plugin/src/sub-canvas/components/tips/sub-canvas-tips.vue?vue&type=style&index=0","../src/sub-canvas/components/tips/sub-canvas-tips.vue","vue-sfc-style:D:/dev/workspace/flowgram.vue/packages/plugins/free-container-plugin/src/sub-canvas/components/render/sub-canvas-render.vue?vue&type=style&index=0&scoped=93217521","../src/sub-canvas/components/render/sub-canvas-render.vue"],"names":["NodeIntoContainerType","document","FlowNodeBaseType","renderData","renderDom","isContainer","useCurrentEntity","_openBlock","_createElementBlock","_normalizeStyle","_createElementVNode","_renderSlot","ref","useService","onBeforeUnmount","_sfc_main","_normalizeClass","_createVNode","_withCtx"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nexport enum NodeIntoContainerType {\n In = 'in',\n Out = 'out',\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nexport const nextFrame = async (): Promise<void> => {\n await new Promise((resolve) => requestAnimationFrame(resolve));\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { WorkflowNodeEntity, WorkflowNodeMeta } from '@flowgram-vue/free-layout-core';\n\nexport const isContainer = (node?: WorkflowNodeEntity): boolean =>\n node?.getNodeMeta<WorkflowNodeMeta>().isContainer ?? false;\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { WorkflowNodeEntity } from '@flowgram-vue/free-layout-core';\nimport { FlowNodeTransformData } from '@flowgram-vue/document';\n\nimport { isContainer } from './is-container';\n\n/** 获取容器节点transforms */\nexport const getContainerTransforms = (allNodes: WorkflowNodeEntity[]): FlowNodeTransformData[] =>\n allNodes\n .filter((node) => {\n if (node.originParent) {\n return node.getNodeMeta().selectable && node.originParent.getNodeMeta().selectable;\n }\n return node.getNodeMeta().selectable;\n })\n .filter((node) => isContainer(node))\n .sort((a, b) => {\n const aIndex = a.renderData.stackIndex;\n const bIndex = b.renderData.stackIndex;\n // 确保层级高的节点在前面\n return bIndex - aIndex;\n })\n .map((node) => node.transform);\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { Rectangle } from '@flowgram-vue/utils';\n\nexport const isRectIntersects = (rectA: Rectangle, rectB: Rectangle): boolean => {\n // 检查水平方向是否有重叠\n const hasHorizontalOverlap = rectA.right > rectB.left && rectA.left < rectB.right;\n // 检查垂直方向是否有重叠\n const hasVerticalOverlap = rectA.bottom > rectB.top && rectA.top < rectB.bottom;\n // 只有当水平和垂直方向都有重叠时,两个矩形才相交\n return hasHorizontalOverlap && hasVerticalOverlap;\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { PositionSchema, Rectangle } from '@flowgram-vue/utils';\n\nexport const isPointInRect = (point: PositionSchema, rect: Rectangle): boolean =>\n point.x >= rect.left && point.x <= rect.right && point.y >= rect.top && point.y <= rect.bottom;\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { PositionSchema, Rectangle } from '@flowgram-vue/utils';\nimport { WorkflowDocument } from '@flowgram-vue/free-layout-core';\nimport { FlowNodeTransformData } from '@flowgram-vue/document';\n\nimport { isRectIntersects } from './is-rect-intersects';\nimport { isPointInRect } from './is-point-in-rect';\n\n/** 获取重叠位置 */\nexport const getCollisionTransform = (params: {\n transforms: FlowNodeTransformData[];\n targetRect?: Rectangle;\n targetPoint?: PositionSchema;\n withPadding?: boolean;\n document: WorkflowDocument;\n}): FlowNodeTransformData | undefined => {\n const { targetRect, targetPoint, transforms, withPadding = false, document } = params;\n const collisionTransform = transforms.find((transform) => {\n const { bounds, entity } = transform;\n const padding = withPadding ? document.layout.getPadding(entity) : { left: 0, right: 0 };\n const transformRect = new Rectangle(\n bounds.x + padding.left + padding.right,\n bounds.y,\n bounds.width,\n bounds.height\n );\n // 检测两个正方形是否相互碰撞\n if (targetRect) {\n return isRectIntersects(targetRect, transformRect);\n }\n if (targetPoint) {\n return isPointInRect(targetPoint, transformRect);\n }\n return false;\n });\n return collisionTransform;\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { IPoint, PaddingSchema } from '@flowgram-vue/utils';\nimport { WorkflowNodeEntity } from '@flowgram-vue/free-layout-core';\nimport { FlowNodeBaseType } from '@flowgram-vue/document';\n\n/**\n * 如果存在容器节点,且传入鼠标坐标,需要用容器的坐标减去传入的鼠标坐标\n */\nexport const adjustSubNodePosition = (params: {\n targetNode: WorkflowNodeEntity;\n containerNode: WorkflowNodeEntity;\n containerPadding: PaddingSchema;\n}): IPoint => {\n const { targetNode, containerNode, containerPadding } = params;\n if (containerNode.flowNodeType === FlowNodeBaseType.ROOT) {\n return targetNode.transform.position;\n }\n const nodeWorldTransform = targetNode.transform.transform.worldTransform;\n const containerWorldTransform = containerNode.transform.transform.worldTransform;\n const nodePosition = {\n x: nodeWorldTransform.tx,\n y: nodeWorldTransform.ty,\n };\n const isParentEmpty = !containerNode.children || containerNode.children.length === 0;\n if (isParentEmpty) {\n // 确保空容器节点不偏移\n return {\n x: 0,\n y: containerPadding.top,\n };\n } else {\n return {\n x: nodePosition.x - containerWorldTransform.tx,\n y: nodePosition.y - containerWorldTransform.ty,\n };\n }\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { nextFrame } from './next-frame';\nimport { isContainer } from './is-container';\nimport { getContainerTransforms } from './get-container-transforms';\nimport { getCollisionTransform } from './get-collision-transform';\nimport { adjustSubNodePosition } from './adjust-sub-node-position';\n\nexport const ContainerUtils = {\n nextFrame,\n isContainer,\n adjustSubNodePosition,\n getContainerTransforms,\n getCollisionTransform,\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\n/* eslint-disable @typescript-eslint/no-non-null-assertion -- no need */\nimport { throttle } from 'lodash-es';\nimport { inject, injectable } from 'inversify';\nimport { type Disposable, DisposableCollection, Emitter } from '@flowgram-vue/utils';\nimport {\n type NodesDragEvent,\n WorkflowDocument,\n WorkflowDragService,\n WorkflowLinesManager,\n type WorkflowNodeEntity,\n WorkflowNodeMeta,\n WorkflowOperationBaseService,\n WorkflowSelectService,\n} from '@flowgram-vue/free-layout-core';\nimport { HistoryService } from '@flowgram-vue/free-history-plugin';\nimport { FlowNodeRenderData, FlowNodeBaseType } from '@flowgram-vue/document';\nimport { PlaygroundConfigEntity, TransformData } from '@flowgram-vue/core';\n\nimport type { NodeIntoContainerEvent, NodeIntoContainerState } from './type';\nimport { NodeIntoContainerType } from './constant';\nimport { ContainerUtils } from '../utils';\n\n@injectable()\nexport class NodeIntoContainerService {\n public state: NodeIntoContainerState;\n\n @inject(WorkflowDragService)\n private dragService: WorkflowDragService;\n\n @inject(WorkflowDocument)\n private document: WorkflowDocument;\n\n @inject(PlaygroundConfigEntity)\n private playgroundConfig: PlaygroundConfigEntity;\n\n @inject(WorkflowOperationBaseService)\n private operationService: WorkflowOperationBaseService;\n\n @inject(WorkflowLinesManager)\n private linesManager: WorkflowLinesManager;\n\n @inject(HistoryService) private historyService: HistoryService;\n\n @inject(WorkflowSelectService) private selectService: WorkflowSelectService;\n\n private emitter = new Emitter<NodeIntoContainerEvent>();\n\n private toDispose = new DisposableCollection();\n\n public readonly on = this.emitter.event;\n\n public init(): void {\n this.initState();\n this.toDispose.push(this.emitter);\n }\n\n public ready(): void {\n this.toDispose.push(this.listenDragToContainer());\n }\n\n public dispose(): void {\n this.initState();\n this.toDispose.dispose();\n }\n\n /** 将节点移出容器 */\n public async moveOutContainer(params: { node: WorkflowNodeEntity }): Promise<void> {\n const { node } = params;\n const parentNode = node.parent;\n const containerNode = parentNode?.parent;\n const nodeJSON = this.document.toNodeJSON(node);\n if (\n !parentNode ||\n !containerNode ||\n !ContainerUtils.isContainer(parentNode) ||\n !nodeJSON.meta?.position\n ) {\n return;\n }\n const parentTransform = parentNode.getData<TransformData>(TransformData);\n this.operationService.moveNode(node, {\n parent: containerNode,\n });\n await ContainerUtils.nextFrame();\n parentTransform.fireChange();\n this.operationService.updateNodePosition(node, {\n x: parentTransform.position.x + nodeJSON.meta!.position!.x,\n y: parentTransform.position.y + nodeJSON.meta!.position!.y,\n });\n this.emitter.fire({\n type: NodeIntoContainerType.Out,\n node,\n sourceContainer: parentNode,\n targetContainer: containerNode,\n });\n }\n\n /** 能否将节点移出容器 */\n public canMoveOutContainer(node: WorkflowNodeEntity): boolean {\n const parentNode = node.parent;\n const containerNode = parentNode?.parent;\n if (!parentNode || !containerNode || !ContainerUtils.isContainer(parentNode)) {\n return false;\n }\n const canDrop = this.dragService.canDropToNode({\n dragNodeType: node.flowNodeType,\n dragNode: node,\n dropNodeType: containerNode?.flowNodeType,\n dropNode: containerNode,\n });\n if (!canDrop.allowDrop) {\n return false;\n }\n return true;\n }\n\n /** 移除节点所有非法连线 */\n public async clearInvalidLines(params: {\n dragNode?: WorkflowNodeEntity;\n sourceParent?: WorkflowNodeEntity;\n }): Promise<void> {\n const { dragNode, sourceParent } = params;\n if (!dragNode) {\n return;\n }\n if (dragNode.parent === sourceParent) {\n // 容器节点未改变\n return;\n }\n if (\n dragNode.parent?.flowNodeType === FlowNodeBaseType.GROUP ||\n sourceParent?.flowNodeType === FlowNodeBaseType.GROUP\n ) {\n // 移入移出 group 节点无需删除节点\n return;\n }\n await this.removeNodeLines(dragNode);\n }\n\n /** 移除节点连线 */\n public async removeNodeLines(node: WorkflowNodeEntity): Promise<void> {\n const lines = this.linesManager.getAllLines();\n lines.forEach((line) => {\n if (line.from?.id !== node.id && line.to?.id !== node.id) {\n return;\n }\n line.dispose();\n });\n await ContainerUtils.nextFrame();\n }\n\n /** 初始化状态 */\n private initState(): void {\n this.state = {\n isDraggingNode: false,\n isSkipEvent: false,\n transforms: undefined,\n dragNode: undefined,\n dropNode: undefined,\n sourceParent: undefined,\n };\n }\n\n /** 监听节点拖拽 */\n private listenDragToContainer(): Disposable {\n const draggingNode = (e: NodesDragEvent) => this.draggingNode(e);\n const throttledDraggingNode = throttle(draggingNode, 200); // 200ms触发一次计算\n return this.dragService.onNodesDrag(async (event) => {\n if (this.selectService.selectedNodes.length !== 1) {\n return;\n }\n if (event.type === 'onDragStart') {\n if (this.state.isSkipEvent) {\n // 拖出容器后重新进入\n this.state.isSkipEvent = false;\n return;\n }\n this.historyService.startTransaction(); // 开始合并历史记录\n this.state.isDraggingNode = true;\n this.state.transforms = ContainerUtils.getContainerTransforms(this.document.getAllNodes());\n this.state.dragNode = this.selectService.selectedNodes[0];\n this.state.dropNode = undefined;\n this.state.sourceParent = this.state.dragNode?.parent;\n await this.dragOutContainer(event); // 检查是否需拖出容器\n }\n if (event.type === 'onDragging') {\n throttledDraggingNode(event);\n }\n if (event.type === 'onDragEnd') {\n if (this.state.isSkipEvent) {\n // 拖出容器情况下需跳过本次事件\n return;\n }\n throttledDraggingNode.cancel();\n draggingNode(event); // 直接触发一次计算,防止延迟\n await this.dropNodeToContainer(); // 放置节点\n await this.clearInvalidLines({\n dragNode: this.state.dragNode,\n sourceParent: this.state.sourceParent,\n }); // 清除非法线条\n this.setDropNode(undefined);\n this.initState(); // 重置状态\n this.historyService.endTransaction(); // 结束合并历史记录\n }\n });\n }\n\n /** 监听节点拖拽出容器 */\n private async dragOutContainer(event: NodesDragEvent): Promise<void> {\n const { dragNode } = this.state;\n const activated = event.triggerEvent.metaKey || event.triggerEvent.ctrlKey;\n if (\n !activated || // 必须按住指定按键\n !dragNode || // 必须有一个节点\n !this.canMoveOutContainer(dragNode) // 需要能被移出容器\n ) {\n return;\n }\n this.moveOutContainer({ node: dragNode });\n this.state.isSkipEvent = true;\n event.dragger.stop(event.dragEvent.clientX, event.dragEvent.clientY);\n await ContainerUtils.nextFrame();\n this.dragService.startDragSelectedNodes(event.triggerEvent);\n }\n\n /** 设置放置节点高亮 */\n private setDropNode(dropNode?: WorkflowNodeEntity) {\n if (this.state.dropNode === dropNode) {\n return;\n }\n if (this.state.dropNode) {\n // 清除上一个节点高亮\n const renderData = this.state.dropNode.getData(FlowNodeRenderData);\n const renderDom = renderData.node?.children?.[0] as HTMLElement;\n if (renderDom) {\n renderDom.classList.remove('selected');\n }\n }\n this.state.dropNode = dropNode;\n if (!dropNode) {\n return;\n }\n // 设置当前节点高亮\n const renderData = dropNode.getData(FlowNodeRenderData);\n const renderDom = renderData.node?.children?.[0] as HTMLElement;\n if (renderDom) {\n renderDom.classList.add('selected');\n }\n }\n\n /** 放置节点到容器 */\n private async dropNodeToContainer(): Promise<void> {\n const { dropNode, dragNode, isDraggingNode } = this.state;\n if (!isDraggingNode || !dragNode || !dropNode) {\n return;\n }\n return await this.moveIntoContainer({\n node: dragNode,\n containerNode: dropNode,\n });\n }\n\n /** 拖拽节点 */\n private draggingNode(nodeDragEvent: NodesDragEvent): void {\n const { dragNode, isDraggingNode, transforms = [] } = this.state;\n if (!isDraggingNode || !dragNode || !transforms?.length) {\n return this.setDropNode(undefined);\n }\n const mousePos = this.playgroundConfig.getPosFromMouseEvent(nodeDragEvent.dragEvent);\n const availableTransforms = transforms.filter(\n (transform) => transform.entity.id !== dragNode.id\n );\n const collisionTransform = ContainerUtils.getCollisionTransform({\n targetPoint: mousePos,\n transforms: availableTransforms,\n document: this.document,\n });\n const dropNode = collisionTransform?.entity;\n const canDrop = this.canDropToContainer({\n dragNode,\n dropNode,\n });\n if (!canDrop) {\n return this.setDropNode(undefined);\n }\n return this.setDropNode(dropNode);\n }\n\n /** 判断能否将节点拖入容器 */\n protected canDropToContainer(params: {\n dragNode: WorkflowNodeEntity;\n dropNode?: WorkflowNodeEntity;\n }): boolean {\n const { dragNode, dropNode } = params;\n const isDropContainer = dropNode?.getNodeMeta<WorkflowNodeMeta>().isContainer;\n if (\n !dropNode ||\n !isDropContainer ||\n this.isParent(dragNode, dropNode) ||\n this.isParent(dropNode, dragNode)\n ) {\n return false;\n }\n if (\n dragNode.flowNodeType === FlowNodeBaseType.GROUP &&\n dropNode.flowNodeType !== FlowNodeBaseType.GROUP\n ) {\n // 禁止将 group 节点拖入非 group 节点(由于目前不支持多节点拖入容器,无法计算有效线条,因此进行屏蔽)\n return false;\n }\n const canDrop = this.dragService.canDropToNode({\n dragNodeType: dragNode.flowNodeType,\n dropNodeType: dropNode?.flowNodeType,\n dragNode,\n dropNode,\n });\n if (!canDrop.allowDrop) {\n return false;\n }\n return true;\n }\n\n /** 判断一个节点是否为另一个节点的父节点(向上查找直到根节点) */\n private isParent(node: WorkflowNodeEntity, parent: WorkflowNodeEntity): boolean {\n let current = node.parent;\n while (current) {\n if (current.id === parent.id) {\n return true;\n }\n current = current.parent;\n }\n return false;\n }\n\n /** 将节点移入容器 */\n private async moveIntoContainer(params: {\n node: WorkflowNodeEntity;\n containerNode: WorkflowNodeEntity;\n }): Promise<void> {\n const { node, containerNode } = params;\n const parentNode = node.parent;\n\n this.operationService.moveNode(node, {\n parent: containerNode,\n });\n\n const containerPadding = this.document.layout.getPadding(containerNode);\n const position = ContainerUtils.adjustSubNodePosition({\n targetNode: node,\n containerNode,\n containerPadding,\n });\n\n this.operationService.updateNodePosition(node, position);\n\n await ContainerUtils.nextFrame();\n\n this.emitter.fire({\n type: NodeIntoContainerType.In,\n node,\n sourceContainer: parentNode,\n targetContainer: containerNode,\n });\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { definePluginCreator } from '@flowgram-vue/core';\n\nimport type { WorkflowContainerPluginOptions } from './type';\nimport { NodeIntoContainerService } from '.';\n\nexport const createContainerNodePlugin = definePluginCreator<WorkflowContainerPluginOptions>({\n onBind: ({ bind }) => {\n bind(NodeIntoContainerService).toSelf().inSingletonScope();\n },\n onInit(ctx) {\n ctx.get(NodeIntoContainerService).init();\n },\n onReady(ctx, options) {\n if (options.disableNodeIntoContainer !== true) {\n ctx.get(NodeIntoContainerService).ready();\n }\n },\n onDispose(ctx) {\n ctx.get(NodeIntoContainerService).dispose();\n },\n});\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { onBeforeUnmount, ref } from 'vue';\n\nimport {\n useCurrentEntity,\n WorkflowNodeMeta,\n WorkflowNodePortsData,\n} from '@flowgram-vue/free-layout-core';\nimport { FlowNodeTransformData } from '@flowgram-vue/document';\n\nexport interface NodeSize {\n width: number;\n height: number;\n}\n\nexport const useNodeSize = (): NodeSize | undefined => {\n const node = useCurrentEntity();\n const nodeMeta = node.getNodeMeta<WorkflowNodeMeta>();\n const { size = { width: 300, height: 200 }, isContainer } = nodeMeta;\n\n const transform = node.getData<FlowNodeTransformData>(FlowNodeTransformData);\n const width = ref(size.width);\n const height = ref(size.height);\n\n const updatePorts = () => {\n const portsData = node.getData<WorkflowNodePortsData>(WorkflowNodePortsData);\n portsData.updateDynamicPorts();\n };\n\n const updateSize = () => {\n // 无子节点时\n if (node.blocks.length === 0) {\n width.value = size.width;\n height.value = size.height;\n return;\n }\n // 存在子节点时,只监听宽高变化\n width.value = transform.bounds.width;\n height.value = transform.bounds.height;\n };\n\n const dispose = transform.onDataChange(() => {\n updateSize();\n updatePorts();\n });\n\n updateSize();\n\n onBeforeUnmount(() => {\n dispose.dispose();\n });\n\n if (!isContainer) {\n return;\n }\n\n return {\n get width() {\n return width.value;\n },\n get height() {\n return height.value;\n },\n };\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { watch } from 'vue';\n\nimport { useCurrentEntity } from '@flowgram-vue/free-layout-core';\n\nimport { NodeSize } from './use-node-size';\n\nexport const useSyncNodeRenderSize = (nodeSize?: NodeSize) => {\n const node = useCurrentEntity();\n\n watch(\n () => [nodeSize?.width, nodeSize?.height],\n () => {\n if (!nodeSize) {\n return;\n }\n node.renderData.node.style.width = `${nodeSize.width}px`;\n node.renderData.node.style.height = `${nodeSize.height}px`;\n },\n { immediate: true, flush: 'post' }\n );\n};\n","!(function(){if(typeof document===\"undefined\")return;var c=\"\\n.sub-canvas-background[data-v-df9f01f3] {\\n width: 100%;\\n height: 100%;\\n inset: 56px 18px 18px;\\n}\\n\";if(!c)return;var s=document.createElement(\"style\");s.textContent=c;document.head.appendChild(s);})();","<script setup lang=\"ts\">\n/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { useCurrentEntity } from '@flowgram-vue/free-layout-core';\nimport { useService } from '@flowgram-vue/core';\nimport { BackgroundConfig, type BackgroundLayerOptions } from '@flowgram-vue/background-plugin';\n\nconst node = useCurrentEntity();\n\nlet backgroundConfig: BackgroundLayerOptions = {};\ntry {\n backgroundConfig = useService<BackgroundLayerOptions>(BackgroundConfig);\n} catch {\n // 如果 BackgroundConfig 没有注册,使用默认配置\n}\n\nconst gridSize = backgroundConfig.gridSize ?? 20;\nconst dotSize = backgroundConfig.dotSize ?? 1;\nconst dotColor = backgroundConfig.dotColor ?? '#eceeef';\nconst dotOpacity = backgroundConfig.dotOpacity ?? 0.5;\nconst backgroundColor = backgroundConfig.backgroundColor ?? '#f2f3f5';\nconst dotFillColor =\n backgroundConfig.dotFillColor === dotColor ? '' : backgroundConfig.dotFillColor;\n\nconst patternId = `sub-canvas-dot-pattern-${node.id}`;\n</script>\n\n<template>\n <div\n class=\"sub-canvas-background\"\n data-flow-editor-selectable=\"true\"\n :style=\"{ backgroundColor }\"\n >\n <svg width=\"100%\" height=\"100%\">\n <pattern :id=\"patternId\" :width=\"gridSize\" :height=\"gridSize\" patternUnits=\"userSpaceOnUse\">\n <circle\n :cx=\"dotSize\"\n :cy=\"dotSize\"\n :r=\"dotSize\"\n :stroke=\"dotColor\"\n :fill=\"dotFillColor\"\n :fill-opacity=\"dotOpacity\"\n />\n </pattern>\n <rect\n width=\"100%\"\n height=\"100%\"\n :fill=\"`url(#${patternId})`\"\n :data-node-panel-container=\"node.id\"\n />\n </svg>\n </div>\n</template>\n\n<style scoped>\n.sub-canvas-background {\n width: 100%;\n height: 100%;\n inset: 56px 18px 18px;\n}\n</style>\n","!(function(){if(typeof document===\"undefined\")return;var c=\"\\n.sub-canvas-border[data-v-14f2a909] {\\n pointer-events: none;\\n position: relative;\\n display: flex;\\n align-items: center;\\n width: 100%;\\n height: 100%;\\n background-color: transparent;\\n border: 1px solid var(--coz-stroke-plus, rgba(6, 7, 9, 15%));\\n border-color: var(--coz-bg-plus, rgb(249, 249, 249));\\n border-style: solid;\\n border-width: 8px;\\n border-radius: 8px;\\n}\\n.sub-canvas-border[data-v-14f2a909]::before {\\n content: '';\\n position: absolute;\\n z-index: 0;\\n inset: -4px;\\n background-color: transparent;\\n border-color: var(--coz-bg-plus, rgb(249, 249, 249));\\n border-style: solid;\\n border-width: 4px;\\n border-radius: 8px;\\n}\\n\";if(!c)return;var s=document.createElement(\"style\");s.textContent=c;document.head.appendChild(s);})();","<script setup lang=\"ts\">\n/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport type { CSSProperties } from 'vue';\n\ndefineProps<{\n style?: CSSProperties;\n}>();\n</script>\n\n<template>\n <div class=\"sub-canvas-border\" :style=\"style\">\n <slot />\n </div>\n</template>\n\n<style scoped>\n.sub-canvas-border {\n pointer-events: none;\n position: relative;\n display: flex;\n align-items: center;\n width: 100%;\n height: 100%;\n background-color: transparent;\n border: 1px solid var(--coz-stroke-plus, rgba(6, 7, 9, 15%));\n border-color: var(--coz-bg-plus, rgb(249, 249, 249));\n border-style: solid;\n border-width: 8px;\n border-radius: 8px;\n}\n\n.sub-canvas-border::before {\n content: '';\n position: absolute;\n z-index: 0;\n inset: -4px;\n background-color: transparent;\n border-color: var(--coz-bg-plus, rgb(249, 249, 249));\n border-style: solid;\n border-width: 4px;\n border-radius: 8px;\n}\n</style>\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\n/* eslint-disable @typescript-eslint/naming-convention -- no need */\n\nconst STORAGE_KEY = 'workflow-move-into-sub-canvas-tip-visible';\nconst STORAGE_VALUE = 'false';\n\nexport class TipsGlobalStore {\n private static _instance?: TipsGlobalStore;\n\n public static get instance(): TipsGlobalStore {\n if (!this._instance) {\n this._instance = new TipsGlobalStore();\n }\n return this._instance;\n }\n\n private closed = false;\n\n public isClosed(): boolean {\n return this.isCloseForever() || this.closed;\n }\n\n public close(): void {\n this.closed = true;\n }\n\n public isCloseForever(): boolean {\n return localStorage.getItem(STORAGE_KEY) === STORAGE_VALUE;\n }\n\n public closeForever(): void {\n localStorage.setItem(STORAGE_KEY, STORAGE_VALUE);\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { onBeforeUnmount, ref } from 'vue';\n\nimport { useCurrentEntity } from '@flowgram-vue/free-layout-core';\nimport { useService } from '@flowgram-vue/core';\n\nimport { NodeIntoContainerService, NodeIntoContainerType } from '../../../node-into-container';\nimport { TipsGlobalStore } from './global-store';\n\nexport const useControlTips = () => {\n const node = useCurrentEntity();\n const visible = ref(false);\n const globalStore = TipsGlobalStore.instance;\n\n const nodeIntoContainerService = useService<NodeIntoContainerService>(NodeIntoContainerService);\n\n const show = () => {\n if (globalStore.isClosed()) {\n return;\n }\n visible.value = true;\n };\n\n const close = () => {\n globalStore.close();\n visible.value = false;\n };\n\n const closeForever = () => {\n globalStore.closeForever();\n close();\n };\n\n const inDisposer = nodeIntoContainerService.on((e) => {\n if (e.type !== NodeIntoContainerType.In) {\n return;\n }\n if (e.targetContainer === node) {\n show();\n }\n });\n const outDisposer = nodeIntoContainerService.on((e) => {\n if (e.type !== NodeIntoContainerType.Out) {\n return;\n }\n if (e.sourceContainer === node && !node.blocks.length) {\n visible.value = false;\n }\n });\n\n onBeforeUnmount(() => {\n inDisposer.dispose();\n outDisposer.dispose();\n });\n\n return {\n visible,\n close,\n closeForever,\n };\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nexport const isMacOS = /(Macintosh|MacIntel|MacPPC|Mac68K|iPad)/.test(navigator.userAgent);\n","!(function(){if(typeof document===\"undefined\")return;var c=\"\\n.sub-canvas-tips {\\n pointer-events: auto;\\n position: absolute;\\n top: 0;\\n width: 100%;\\n height: 28px;\\n}\\n.sub-canvas-tips .container {\\n height: 100%;\\n background-color: #e4e6f5;\\n border-radius: 4px 4px 0 0;\\n}\\n.sub-canvas-tips .content {\\n overflow: hidden;\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n width: 100%;\\n height: 100%;\\n}\\n.sub-canvas-tips .text {\\n font-size: 14px;\\n font-weight: 400;\\n font-style: normal;\\n line-height: 20px;\\n color: rgba(15, 21, 40, 82%);\\n text-overflow: ellipsis;\\n}\\n.sub-canvas-tips .custom-content {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n width: 100%;\\n height: 100%;\\n font-size: 14px;\\n font-weight: 400;\\n line-height: 20px;\\n color: rgba(15, 21, 40, 82%);\\n overflow: hidden;\\n}\\n.sub-canvas-tips .space {\\n width: 128px;\\n}\\n.sub-canvas-tips .actions {\\n position: absolute;\\n top: 0;\\n right: 0;\\n display: flex;\\n gap: 8px;\\n align-items: center;\\n height: 28px;\\n padding: 0 16px;\\n}\\n.sub-canvas-tips .close-forever {\\n cursor: pointer;\\n padding: 0 3px;\\n font-size: 12px;\\n font-weight: 400;\\n font-style: normal;\\n line-height: 12px;\\n color: rgba(32, 41, 69, 62%);\\n}\\n.sub-canvas-tips .close {\\n display: flex;\\n cursor: pointer;\\n height: 100%;\\n align-items: center;\\n}\\n\";if(!c)return;var s=document.createElement(\"style\");s.textContent=c;document.head.appendChild(s);})();","<script lang=\"ts\">\n/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { defineComponent, h, type PropType, type VNode } from 'vue';\n\nimport { I18n } from '@flowgram-vue/i18n';\n\nimport { useControlTips } from './use-control';\nimport { isMacOS } from './is-mac-os';\n\nfunction IconClose() {\n return h(\n 'svg',\n {\n xmlns: 'http://www.w3.org/2000/svg',\n width: '16',\n height: '16',\n fill: 'none',\n viewBox: '0 0 16 16',\n },\n [\n h('path', {\n fill: '#060709',\n 'fill-opacity': '0.5',\n d: 'M12.13 12.128a.5.5 0 0 0 .001-.706L8.71 8l3.422-3.423a.5.5 0 0 0-.001-.705.5.5 0 0 0-.706-.002L8.002 7.293 4.579 3.87a.5.5 0 0 0-.705.002.5.5 0 0 0-.002.705L7.295 8l-3.423 3.422a.5.5 0 0 0 .002.706c.195.195.51.197.705.001l3.423-3.422 3.422 3.422c.196.196.51.194.706-.001',\n }),\n ]\n );\n}\n\nexport default defineComponent({\n name: 'SubCanvasTips',\n props: {\n tipText: {\n type: [String, Object] as PropType<string | VNode>,\n default: undefined,\n },\n neverRemindText: {\n type: [String, Object] as PropType<string | VNode>,\n default: undefined,\n },\n },\n setup(props) {\n const { visible, close, closeForever } = useControlTips();\n\n return () => {\n const displayContent =\n props.tipText || I18n.t('Hold {{key}} to drag node out', { key: isMacOS ? 'Cmd ⌘' : 'Ctrl' });\n\n if (!visible.value) {\n return null;\n }\n\n return h('div', { class: 'sub-canvas-tips' }, [\n h('div', { class: 'container' }, [\n h('div', { class: 'content' }, [\n typeof displayContent === 'string'\n ? h('p', { class: 'text' }, displayContent)\n : h('div', { class: 'custom-content' }, [displayContent]),\n h('div', { class: 'space', style: { width: '0px' } }),\n ]),\n h('div', { class: 'actions' }, [\n h(\n 'p',\n { class: 'close-forever', onClick: closeForever },\n props.neverRemindText || I18n.t('Never Remind')\n ),\n h('div', { class: 'close', onClick: close }, [IconClose()]),\n ]),\n ]),\n ]);\n };\n },\n});\n</script>\n\n<style>\n.sub-canvas-tips {\n pointer-events: auto;\n position: absolute;\n top: 0;\n width: 100%;\n height: 28px;\n}\n\n.sub-canvas-tips .container {\n height: 100%;\n background-color: #e4e6f5;\n border-radius: 4px 4px 0 0;\n}\n\n.sub-canvas-tips .content {\n overflow: hidden;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n}\n\n.sub-canvas-tips .text {\n font-size: 14px;\n font-weight: 400;\n font-style: normal;\n line-height: 20px;\n color: rgba(15, 21, 40, 82%);\n text-overflow: ellipsis;\n}\n\n.sub-canvas-tips .custom-content {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n font-size: 14px;\n font-weight: 400;\n line-height: 20px;\n color: rgba(15, 21, 40, 82%);\n overflow: hidden;\n}\n\n.sub-canvas-tips .space {\n width: 128px;\n}\n\n.sub-canvas-tips .actions {\n position: absolute;\n top: 0;\n right: 0;\n display: flex;\n gap: 8px;\n align-items: center;\n height: 28px;\n padding: 0 16px;\n}\n\n.sub-canvas-tips .close-forever {\n cursor: pointer;\n padding: 0 3px;\n font-size: 12px;\n font-weight: 400;\n font-style: normal;\n line-height: 12px;\n color: rgba(32, 41, 69, 62%);\n}\n\n.sub-canvas-tips .close {\n display: flex;\n cursor: pointer;\n height: 100%;\n align-items: center;\n}\n</style>\n","!(function(){if(typeof document===\"undefined\")return;var c=\"\\n.sub-canvas-render[data-v-93217521] {\\n width: 100%;\\n height: 100%;\\n}\\n\";if(!c)return;var s=document.createElement(\"style\");s.textContent=c;document.head.appendChild(s);})();","<script setup lang=\"ts\">\n/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { computed, type CSSProperties, type VNode } from 'vue';\n\nimport { SubCanvasTips } from '../tips';\nimport { SubCanvasBorder } from '../border';\nimport { SubCanvasBackground } from '../background';\nimport { useNodeSize, useSyncNodeRenderSize } from '../../hooks';\n\ndefineProps<{\n offsetY?: number;\n className?: string;\n style?: CSSProperties;\n tipText?: string | VNode;\n}>();\n\nconst nodeSize = useNodeSize();\nconst nodeHeight = computed(() => nodeSize?.height ?? 0);\n\nuseSyncNodeRenderSize(nodeSize);\n\nconst handleDragStart = (e: DragEvent) => {\n e.stopPropagation();\n};\n</script>\n\n<template>\n <div\n class=\"sub-canvas-render\"\n :class=\"className\"\n :style=\"{\n height: `${nodeHeight + (offsetY ?? 0)}px`,\n ...style,\n }\"\n data-flow-editor-selectable=\"true\"\n @dragstart=\"handleDragStart\"\n >\n <SubCanvasBorder>\n <SubCanvasBackground />\n <SubCanvasTips :tip-text=\"tipText\" />\n </SubCanvasBorder>\n </div>\n</template>\n\n<style scoped>\n.sub-canvas-render {\n width: 100%;\n height: 100%;\n}\n</style>\n"]}
package/package.json ADDED
@@ -0,0 +1,66 @@
1
+ {
2
+ "name": "@flowgram-vue/free-container-plugin",
3
+ "version": "0.2.0",
4
+ "homepage": "https://flowgram.ai/",
5
+ "repository": "https://github.com/Crayon-hua/flowgram-vue",
6
+ "license": "MIT",
7
+ "type": "module",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js",
12
+ "require": "./dist/index.cjs"
13
+ }
14
+ },
15
+ "main": "./dist/index.cjs",
16
+ "module": "./dist/index.js",
17
+ "types": "./dist/index.d.ts",
18
+ "files": [
19
+ "src",
20
+ "dist"
21
+ ],
22
+ "dependencies": {
23
+ "inversify": "^6.0.1",
24
+ "lodash-es": "^4.17.21",
25
+ "reflect-metadata": "~0.2.2",
26
+ "@flowgram-vue/background-plugin": "0.2.0",
27
+ "@flowgram-vue/core": "0.2.0",
28
+ "@flowgram-vue/i18n": "0.2.0",
29
+ "@flowgram-vue/free-layout-core": "0.2.0",
30
+ "@flowgram-vue/document": "0.2.0",
31
+ "@flowgram-vue/utils": "0.2.0",
32
+ "@flowgram-vue/free-history-plugin": "0.2.0"
33
+ },
34
+ "peerDependencies": {
35
+ "vue": "^3.3.0"
36
+ },
37
+ "devDependencies": {
38
+ "@types/bezier-js": "4.1.3",
39
+ "@types/lodash-es": "^4.17.12",
40
+ "@types/node": "^20",
41
+ "@vitejs/plugin-vue": "^6.0.1",
42
+ "@vitest/coverage-v8": "^3.2.4",
43
+ "@vue/test-utils": "^2.4.6",
44
+ "eslint": "^9.0.0",
45
+ "jsdom": "^26.1.0",
46
+ "typescript": "^5.8.3",
47
+ "vitest": "^3.2.4",
48
+ "vue": "^3.5.18",
49
+ "@flowgram-vue/ts-config": "0.2.0",
50
+ "@flowgram-vue/build-config": "0.2.0",
51
+ "@flowgram-vue/eslint-config": "0.2.0"
52
+ },
53
+ "publishConfig": {
54
+ "access": "public",
55
+ "registry": "https://registry.npmjs.org/"
56
+ },
57
+ "scripts": {
58
+ "build": "flowgram-build",
59
+ "test": "vitest run --passWithNoTests",
60
+ "lint": "eslint .",
61
+ "ts-check": "tsc --noEmit",
62
+ "type-check": "tsc --noEmit",
63
+ "build:fast": "flowgram-build --fast",
64
+ "build:watch": "flowgram-build --watch"
65
+ }
66
+ }
package/src/env.d.ts ADDED
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
3
+ * SPDX-License-Identifier: MIT
4
+ */
5
+
6
+ declare module '*.vue' {
7
+ import type { DefineComponent } from 'vue';
8
+ const component: DefineComponent<object, object, unknown>;
9
+ export default component;
10
+ }
package/src/index.ts ADDED
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
3
+ * SPDX-License-Identifier: MIT
4
+ */
5
+
6
+ export * from './node-into-container';
7
+ export * from './sub-canvas';
8
+ export { ContainerUtils } from './utils';
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
3
+ * SPDX-License-Identifier: MIT
4
+ */
5
+
6
+ export enum NodeIntoContainerType {
7
+ In = 'in',
8
+ Out = 'out',
9
+ }
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
3
+ * SPDX-License-Identifier: MIT
4
+ */
5
+
6
+ export { NodeIntoContainerType } from './constant';
7
+ export { NodeIntoContainerService } from './service';
8
+ export type {
9
+ NodeIntoContainerState,
10
+ NodeIntoContainerEvent,
11
+ WorkflowContainerPluginOptions,
12
+ } from './type';
13
+ export { createContainerNodePlugin } from './plugin';
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
3
+ * SPDX-License-Identifier: MIT
4
+ */
5
+
6
+ import { definePluginCreator } from '@flowgram-vue/core';
7
+
8
+ import type { WorkflowContainerPluginOptions } from './type';
9
+ import { NodeIntoContainerService } from '.';
10
+
11
+ export const createContainerNodePlugin = definePluginCreator<WorkflowContainerPluginOptions>({
12
+ onBind: ({ bind }) => {
13
+ bind(NodeIntoContainerService).toSelf().inSingletonScope();
14
+ },
15
+ onInit(ctx) {
16
+ ctx.get(NodeIntoContainerService).init();
17
+ },
18
+ onReady(ctx, options) {
19
+ if (options.disableNodeIntoContainer !== true) {
20
+ ctx.get(NodeIntoContainerService).ready();
21
+ }
22
+ },
23
+ onDispose(ctx) {
24
+ ctx.get(NodeIntoContainerService).dispose();
25
+ },
26
+ });