@robot-admin/naive-ui-components 0.24.1 → 0.24.3

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 (104) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/README.md +6 -2
  3. package/README_EN.md +6 -2
  4. package/SECURITY.md +12 -2
  5. package/dist/C_AntV2.cjs +1 -1
  6. package/dist/C_AntV2.js +3 -3
  7. package/dist/C_Form.base.css +41 -143
  8. package/dist/C_Form.css +41 -143
  9. package/dist/C_FormModal.css +25 -12
  10. package/dist/C_FormModal2.cjs +1 -1
  11. package/dist/C_FormModal2.js +1 -1
  12. package/dist/C_Map2.cjs +1 -1
  13. package/dist/C_Map2.js +1 -1
  14. package/dist/C_Table.base.css +151 -253
  15. package/dist/C_Table.css +110 -110
  16. package/dist/C_Table2.cjs +2 -2
  17. package/dist/C_Table2.js +2 -2
  18. package/dist/C_Upload2.cjs +1 -1
  19. package/dist/C_Upload2.js +1 -1
  20. package/dist/C_VideoPlayer.css +30 -20
  21. package/dist/C_VideoPlayer2.cjs +2 -2
  22. package/dist/C_VideoPlayer2.js +3 -3
  23. package/dist/Steps.cjs +1 -1
  24. package/dist/Steps.js +1 -1
  25. package/dist/Tabs.cjs +1 -1
  26. package/dist/Tabs.js +1 -1
  27. package/dist/constants2.d.cts +4 -4
  28. package/dist/constants2.d.ts +4 -4
  29. package/dist/constants3.d.cts +3 -3
  30. package/dist/constants3.d.ts +3 -3
  31. package/dist/data2.cjs +1 -1
  32. package/dist/data2.d.cts +5 -5
  33. package/dist/data2.d.ts +5 -5
  34. package/dist/data2.js +1 -1
  35. package/dist/density.cjs +1 -1
  36. package/dist/density.js +1 -1
  37. package/dist/index.cjs +1 -1
  38. package/dist/index.js +1 -1
  39. package/dist/index.vue.d.cts +1 -1
  40. package/dist/index.vue.d.ts +1 -1
  41. package/dist/index10.vue.d.cts +2 -2
  42. package/dist/index10.vue.d.ts +5 -5
  43. package/dist/index11.vue.d.cts +5 -5
  44. package/dist/index13.vue.d.ts +2 -2
  45. package/dist/index14.vue.d.cts +2 -2
  46. package/dist/index15.vue.d.ts +8 -8
  47. package/dist/index16.vue.d.cts +8 -8
  48. package/dist/index17.vue.d.ts +2 -2
  49. package/dist/index18.vue.d.cts +2 -2
  50. package/dist/index18.vue.d.ts +2 -2
  51. package/dist/index19.vue.d.cts +2 -2
  52. package/dist/index19.vue.d.ts +3 -3
  53. package/dist/index20.vue.d.cts +3 -3
  54. package/dist/index22.vue.d.ts +1 -1
  55. package/dist/index23.vue.d.cts +1 -1
  56. package/dist/index23.vue.d.ts +2 -2
  57. package/dist/index26.vue.d.cts +4 -4
  58. package/dist/index26.vue.d.ts +4 -4
  59. package/dist/index28.vue.d.cts +3 -3
  60. package/dist/index28.vue.d.ts +3 -3
  61. package/dist/index3.vue.d.cts +4 -4
  62. package/dist/index3.vue.d.ts +4 -4
  63. package/dist/index5.vue.d.cts +2 -2
  64. package/dist/index9.vue.d.ts +2 -2
  65. package/dist/mapUtils.d.cts +2 -2
  66. package/dist/mapUtils.d.ts +2 -2
  67. package/dist/presets.d.cts +1 -1
  68. package/dist/presets.d.ts +1 -1
  69. package/dist/serializeSearch.cjs +1 -1
  70. package/dist/serializeSearch.js +1 -1
  71. package/dist/style.css +206 -285
  72. package/dist/useCalendarEvents.d.cts +1 -1
  73. package/dist/useCalendarEvents.d.ts +1 -1
  74. package/dist/useCollapsePanel.d.cts +3 -3
  75. package/dist/useCollapsePanel.d.ts +3 -3
  76. package/dist/useCropperCore.d.cts +3 -3
  77. package/dist/useCropperCore.d.ts +3 -3
  78. package/dist/useDictionary.cjs +1 -1
  79. package/dist/useDictionary.js +1 -1
  80. package/dist/useDynamicFormState.d.cts +4 -4
  81. package/dist/useDynamicFormState.d.ts +4 -4
  82. package/dist/useEdgeInteraction.d.cts +2 -2
  83. package/dist/useEdgeInteraction.d.ts +2 -2
  84. package/dist/useFullscreen.d.cts +2 -2
  85. package/dist/useFullscreen.d.ts +2 -2
  86. package/dist/useGlobalSearch.d.cts +1 -1
  87. package/dist/useGlobalSearch.d.ts +1 -1
  88. package/dist/useInfiniteScroll.d.cts +2 -2
  89. package/dist/useInfiniteScroll.d.ts +2 -2
  90. package/dist/useQRCode.d.cts +5 -5
  91. package/dist/useQRCode.d.ts +5 -5
  92. package/dist/useSignatureHistory.d.cts +4 -4
  93. package/dist/useSignatureHistory.d.ts +4 -4
  94. package/dist/useSplitResize.d.cts +3 -3
  95. package/dist/useSplitResize.d.ts +3 -3
  96. package/dist/useWorkflowValidation.d.cts +3 -3
  97. package/dist/useWorkflowValidation.d.ts +3 -3
  98. package/dist/verification.d.cts +2 -2
  99. package/dist/verification.d.ts +2 -2
  100. package/docs/engineering.en.md +1 -1
  101. package/docs/engineering.md +1 -1
  102. package/docs/guides/form-density.md +11 -5
  103. package/docs/stability-review-20261031.md +46 -0
  104. package/package.json +4 -2
package/CHANGELOG.md CHANGED
@@ -1,5 +1,26 @@
1
1
  # @robot-admin/naive-ui-components
2
2
 
3
+ ## 0.24.3
4
+
5
+ ### Patch Changes
6
+
7
+ - 隔离 Tabs/Steps 与公开行/单元格编辑 hook 的迟到校验结果,来源切换、草稿更新、取消和销毁后不回写旧状态或继续保存;移除 Tabs 未读取的校验状态 Map。
8
+ - C_Table 编辑与只读展示共用状态色和字典渲染;列拖拽按实际列身份映射、保护辅助列、先还原 DOM 再更新状态,统一初始化路径,内容或测宽变化不重建实例。
9
+ - 字典初始读取、订阅、加载与同步重入均保持请求所有权,销毁后释放订阅并停止后续分发;搜索历史容忍旧记录和非法数量边界。
10
+ - 数据路径不借用原型分支,保留 Vue 缺失键与 literal dotted key 的响应式语义;克隆回退保留稀疏索引与自有原型键,数组比较保持对称。
11
+ - 视频小窗支持动态启停并观察稳定原位锚点,避免 fixed 回跳与迟到通知;非流式视频尊重固定尺寸,小窗容器覆盖 SDK 流式占位。X6 初始化可取消并移除不可达重试,高德加载失败归还仍由加载器持有的宿主配置。
12
+ - 高亮诊断回调与任务结果隔离,上传删除不积累失效 UID;增加对应回归并收紧类型债务预算,不新增运行时依赖。
13
+ - 精准升级现代 glob/minimatch 开发依赖。旧 glob 7 的 minimatch 3.1.5 保留兼容接口,按维护者公告、固定源码指纹与放大模式回归单独核验;原始审计结果保持可见,详见 SECURITY。
14
+ - 维护者 packageManager 与全部 CI 任务固定到 Bun 1.4.2,以支持实际使用的锁格式和条件依赖覆盖;消费者 Bun 最低版本不变,增加锁格式和 CI 版本一致性检查。
15
+
16
+ ## 0.24.2
17
+
18
+ ### Patch Changes
19
+
20
+ - C_FormModal 移除与受控模型重复的 initialValues 订阅,避免单字段输入重建整份配置;400 字段普通表单与弹窗均验证局部控件更新。
21
+
22
+ - 紧凑表单与搜索改为 4px 纵向间距、2px 空反馈预留,错误仍自然撑高。收紧紧凑表单弹窗壳并建立内部滚动高度链;移除 Grid/Dynamic 逐字段入场及 Inline/Card 布局尺寸动画,保留原生控件反馈。增加 400 字段局部更新回归,不引入额外观察器或逐字段动画节点。
23
+
3
24
  ## 0.24.1
4
25
 
5
26
  ### Patch Changes
package/README.md CHANGED
@@ -33,7 +33,9 @@
33
33
  | 按需消费 | 60 个独立组件入口、自动导入 Resolver、组件样式入口,以及表单/表格的基础样式层级 |
34
34
  | 独立接入 | 支持全量注册与局部导入;反馈、文案和全局配置可由宿主提供,表单弹窗可接入结构兼容的 Headless CRUD |
35
35
 
36
- 组件库负责界面与交互;业务接口、身份权限、上传服务和第三方平台配置由应用接入。当前仓库版本 **0.24.1**,版本变化见 [CHANGELOG](./CHANGELOG.md)。
36
+ 组件库负责界面与交互;业务接口、身份权限、上传服务和第三方平台配置由应用接入。当前仓库版本 **0.24.3**,版本变化见 [CHANGELOG](./CHANGELOG.md)。
37
+
38
+ 0.24.3 复核了异步校验与编辑会话、字典订阅、列拖拽、媒体与图实例、数据快照及依赖边界,修复已复现的问题并删除死状态与不可达重试分支。审查范围、性能约束和验证证据见[稳定性复核](./docs/stability-review-20261031.md)。
37
39
 
38
40
  表单与搜索共用 `config.density: 'compact'`:收紧字段、布局和空校验区,实际错误仍自然展开。表单弹窗默认紧凑,页脚按钮 22px;搜索可继承应用密度。紧凑数字输入默认隐藏步进按钮,保留键盘、精度和上下限,也可逐字段开启。按需设置默认值与显式覆盖见[表单密度](./docs/guides/form-density.md)。
39
41
 
@@ -185,7 +187,7 @@ Resolver 默认解析到组件子路径;`importStyle` 默认是 `false`,需
185
187
 
186
188
  ## 本地开发
187
189
 
188
- 维护本仓库需要 **Node.js ≥20.19.0**、**Bun ≥1.3.14**;仓库固定包管理器 `bun@1.3.14`,CI 按 `.node-version` 与冻结锁文件安装。
190
+ 维护本仓库需要 **Node.js ≥20.19.0**、固定的 **Bun 1.4.2**;CI 按 `.node-version` 与冻结锁文件安装,并校验实际依赖覆盖。消费者的 Bun 最低版本仍为 1.3.14。
189
191
 
190
192
  ```bash
191
193
  git clone https://github.com/ChenyCHENYU/naive-ui-components.git
@@ -242,3 +244,5 @@ const columns = [
242
244
  测宽不额外挂载或执行 render;图标、进度条和复杂自定义内容请显式指定 width。数据与字典更新会触发新的有界测量,配置和缓存只属于当前组件实例。此版本将未声明宽度的业务列由自然布局改为有界内容宽度;既有显式布局及原生 table-layout 覆盖仍保留。
243
245
 
244
246
  表头默认完整展示,不随单元格 ellipsis 配置省略。所有业务列的最小宽度计入完整标题及排序/筛选控件;初始布局、显式窄列宽、恢复列设置与拖拽缩列均受此下限保护。360px 仅限制数据内容测宽;标题更长时允许超过该值,并使用表格内部横向滚动。复杂自定义标题请配置 minWidth。
247
+
248
+ 紧凑表单与搜索的纵向间距收紧至 4px,空反馈区 2px,校验按内容自然撑高。表单弹窗同步收紧并支持内部滚动;移除逐字段排队入场和布局尺寸动画。详情的左右同排展示见 Robot_Admin 产销模块。
package/README_EN.md CHANGED
@@ -33,7 +33,9 @@
33
33
  | Selective loading | 60 component entries, an auto-import resolver, component CSS and base styles for forms and tables |
34
34
  | Application integration | Global registration or local imports; injectable feedback, locale and defaults; form dialogs compatible with structurally matching headless CRUD controllers |
35
35
 
36
- The library handles UI and interaction. Applications supply business APIs, authentication, authorization, upload services and platform configuration. The current repository version is **0.24.1**; see the [changelog](./CHANGELOG.md) for release details.
36
+ The library handles UI and interaction. Applications supply business APIs, authentication, authorization, upload services and platform configuration. The current repository version is **0.24.3**; see the [changelog](./CHANGELOG.md) for release details.
37
+
38
+ The 0.24.3 review covers async validation and edit sessions, dictionaries, column dragging, media and graph instances, data snapshots and dependency boundaries. Reproduced issues are fixed; dead state and unreachable retry branches are removed. See the [stability review](./docs/stability-review-20261031.md) for scope, performance constraints and verification evidence.
37
39
 
38
40
  Forms and search share `config.density: 'compact'`, reducing field spacing and empty validation space while allowing errors to expand naturally. Form modals default to compact density with 22px footer buttons, and search can inherit application density. Compact numeric fields hide step buttons by default while retaining keyboard interaction, precision and limits; individual fields can enable buttons. See [form density](./docs/guides/form-density.en.md) for on-demand defaults and explicit overrides.
39
41
 
@@ -185,7 +187,7 @@ The [2026-10-18 scan record](./docs/security-scan-2026-10-18.md) documents two o
185
187
 
186
188
  ## Local development
187
189
 
188
- Maintaining this repository requires **Node.js ≥20.19.0** and **Bun ≥1.3.14**. The package manager is pinned to `bun@1.3.14`; CI uses `.node-version` and the frozen lockfile.
190
+ Maintaining this repository requires **Node.js ≥20.19.0** and the pinned **Bun 1.4.2**. CI uses `.node-version`, the frozen lockfile and checks actual dependency overrides. The minimum Bun version for consumers remains 1.3.14.
189
191
 
190
192
  ```bash
191
193
  git clone https://github.com/ChenyCHENYU/naive-ui-components.git
@@ -223,3 +225,5 @@ Columns without `width` now measure their header and up to 100 evenly sampled lo
223
225
  Use `{ key: 'status', status: true }` for themed status tags, or `status: { S1B: { label: 'Review', color: 'danger' }, S1C: 'success' }`. Semantic colors and CSS colors are supported. Unknown codes stay neutral, zero/false stay valid, and explicit render functions win. Display changes never rewrite data or export policy. Measurement does not invoke render functions; give graphical/custom columns explicit widths. Data and dictionary updates remeasure a bounded sample; all caches remain component-local.
224
226
 
225
227
  Headers display their full text by default, independently of cell ellipsis. Initial layout, explicit or restored narrow widths, and interactive resizing share a minimum that includes the entire title and its sort/filter controls. The 360px measurement cap applies only to cell content; longer headers use internal horizontal scrolling. Custom header content should declare an appropriate minWidth.
228
+
229
+ Compact forms and searches use a 4px row gap and a 2px empty feedback reserve; validation messages grow naturally. Compact form dialogs use tighter padding and internal scrolling. Per-field entrance and layout-size animations have been removed.
package/SECURITY.md CHANGED
@@ -35,14 +35,24 @@ Consumers no longer install a separate SheetJS dependency for this library. Cons
35
35
 
36
36
  The final audit detected newly updated advisories for Happy DOM and fast-uri. The development environment now pins `happy-dom 21.0.4`, the patched version for [GHSA-834v-8h66-3h79](https://github.com/advisories/GHSA-834v-8h66-3h79), and overrides `fast-uri` to the compatible `3.1.9` patch for [scheme decoding](https://github.com/advisories/GHSA-w74x-v6f9-j3xg), [relative paths](https://github.com/advisories/GHSA-xhq7-xmqj-769h), [host canonicalization](https://github.com/advisories/GHSA-wjr9-j795-jxcr), and [suffix references](https://github.com/advisories/GHSA-333x-w4r6-6crp). These updates do not expand the advisory exception below. Audit output is time-sensitive; rerun the gate against the actual lockfile.
37
37
 
38
- ### Development toolchain: one verified local mitigation
38
+ ### 2026-10-31 glob/minimatch review
39
+
40
+ The development graph now uses `glob 14.0.2` for the prior `13.0.6` path and `minimatch 11.0.1` for the prior `10.2.6` path, addressing the published [glob cancellation issue](https://github.com/advisories/GHSA-3g3m-2fjr-6pw4) and [minimatch preprocessing amplification](https://github.com/advisories/GHSA-g3hv-75wg-m249). Overrides are version-specific because replacing the minimatch used by legacy glob 7 with 11 breaks its RegExp metadata contract. The callback and promise glob APIs, matching behavior and the actual formatter consumer are regression-tested.
41
+
42
+ Repository maintenance and all CI jobs are pinned to Bun 1.4.2. Testing the former 1.3.14 baseline showed it rejects the current v3 lockfile; regenerating a v1 lock with that version recorded conditional override declarations without updating the affected resolutions. A successful frozen install alone was therefore insufficient. The current pinned tool passes frozen installation and the gate checks the actual resolved versions. Consumer engine requirements are unchanged.
43
+
44
+ The advisory database currently labels every minimatch version below 11.0.1, but the [maintainer's original advisory](https://github.com/isaacs/minimatch/security/advisories/GHSA-g3hv-75wg-m249) identifies 10.2.6 and its `firstPhasePreProcess`/`optimizationLevel >= 2` path. Installed legacy `glob 7.2.3 → minimatch 3.1.5` does not contain that preprocessing mechanism. `scripts/legacy-minimatch-review.js` pins the exact legacy version and source SHA-256, rejects any unreviewed minimatch resolution, and checks the upstream amplification pattern through 1,024 repetitions: one alternative, linearly increasing path parts. Modern versions are independently checked. This is a conclusion about this specific advisory and path, not a general security guarantee for old versions.
45
+
46
+ `check:audit:raw` remains unchanged and may still report that legacy version. The gate reports it separately as `notAffected` after verifying the evidence, never as zero raw findings or as a local patch. Changed advisory identity, scope, severity, source, resolution or behavior fails the gate. The review does not apply to another advisory or an application's different dependency tree.
47
+
48
+ ### Development toolchain: verified braces mitigation
39
49
 
40
50
  As of 2026-10-23, the upstream [braces depth advisory GHSA-vfj7-8cjw-p6xm](https://github.com/advisories/GHSA-vfj7-8cjw-p6xm) affects `braces <=3.0.3` and has no published fixed version. In this repository it is a development dependency through micromatch and build/release tools. It is absent from the production dependency graph.
41
51
 
42
52
  `patchedDependencies` applies `patches/braces@3.0.3.patch` to version `3.0.3`. The patch bounds nested braces/parentheses and direct AST traversal to depth 100 in parse, compile, expand, and stringify. It does not claim to solve every possible glob or regular-expression complexity issue. Its reviewed SHA-256 is `6c59dad67310b2f93ed0fead159b0207845d70a6d30a5ae49384c2930df48303`.
43
53
 
44
54
  - `bun run check:audit:raw` preserves the original audit JSON and exit status. The 2026-10-23 audit reported this high-severity advisory; later advisory-service results may differ.
45
- - `bun run check:audit` executes the raw audit and accepts only that exact advisory after checking the patch declaration, bytes, installed version, resolution used by micromatch, depth rejection (including independently constructed ASTs), and ordinary glob behavior. Network errors, malformed responses, unknown advisories, missing patches, or failed behavior checks fail the gate.
55
+ - `bun run check:audit` executes the raw audit and classifies this exact advisory as locally mitigated only after checking the patch declaration, bytes, installed version, resolution used by micromatch, depth rejection (including independently constructed ASTs), and ordinary glob behavior. The separate legacy minimatch review above has its own evidence checks and classification. Network errors, malformed responses, unknown advisories, missing patches, or failed behavior checks fail the gate.
46
56
  - When the service reports this exact advisory, a successful gate reports **locally mitigated** and retains the raw finding count. A clean service response reports zero raw findings separately; patch behavior is still verified. Replace the local patch with an upstream fixed release and remove this exception after verifying the replacement; do not broaden the exception to other advisories.
47
57
 
48
58
  The checked repository production lock currently has no audit findings. This result does not carry over automatically to an application's dependency graph.
package/dist/C_AntV2.cjs CHANGED
@@ -1,4 +1,4 @@
1
- const e=require(`./chunk.cjs`),t=require(`./data2.cjs`),n=require(`./feedback.cjs`),r=require(`./C_Icon2.cjs`),i=require(`./export-helper.cjs`);let a=require(`vue`),o=require(`naive-ui`),s=require(`@antv/x6`),c=require(`html2canvas`);c=e.n(c);function l(e){return{background:e?`#18181c`:`#f5f5f5`,gridPrimary:e?`rgba(255, 255, 255, 0.08)`:`#eee`,gridSecondary:e?`rgba(255, 255, 255, 0.04)`:`#ddd`}}function u(e=!1){let t=l(e);return{background:{color:t.background},grid:{visible:!0,type:`doubleMesh`,args:[{color:t.gridPrimary,thickness:1},{color:t.gridSecondary,thickness:1,factor:4}]},mousewheel:{enabled:!0,zoomAtMousePosition:!0,modifiers:`ctrl`,minScale:.5,maxScale:2},selecting:{enabled:!0,rubberband:!0,movable:!0,showNodeSelectionBox:!0},resizing:!0,rotating:!0,snapline:!0,keyboard:!0,clipboard:!0}}function d(e){return e?{width:e.clientWidth||e.offsetWidth||800,height:e.clientHeight||e.offsetHeight||600}:{width:0,height:0}}function f(e,t){let n=0,r,i,o=!1,c=(0,a.shallowRef)(null),f=(0,a.ref)(!1),p=i=>{if(!o){f.value=!0;try{if(!e.value)return;c.value&&=(c.value.dispose(),null);let{width:a,height:l}=d(e.value);if(a===0||l===0){n++,n<10&&(clearTimeout(r),r=setTimeout(()=>{o||m(i)},100));return}n=0;let f=u(t?.value??!1);c.value=new s.Graph({container:e.value,width:a,height:l,...f,...i})}catch{}finally{f.value=!1}}},m=async(e={})=>{clearTimeout(r),r=void 0,await(0,a.nextTick)(),p(e)};function h(e){if(!c.value)return;let t=l(e);c.value.drawBackground({color:t.background}),c.value.drawGrid({type:`doubleMesh`,args:[{color:t.gridPrimary,thickness:1},{color:t.gridSecondary,thickness:1,factor:4}]})}t&&(0,a.watch)(t,e=>{h(e)});function g(){if(clearTimeout(r),clearTimeout(i),r=void 0,i=void 0,c.value){let e=c.value;c.value=null,e.dispose()}}function _(){c.value?.centerContent()}function v(){c.value?.zoomToFit({padding:20,maxScale:1})}function y(e=200,t=20){clearTimeout(i);let n=c.value;n&&(i=setTimeout(()=>{!o&&c.value===n&&n.zoomToFit({padding:t,maxScale:1})},e))}function b(e){c.value?.zoom(e)}function x(){if(c.value&&e.value){let{width:t,height:n}=d(e.value);c.value.resize(t,n)}}return(0,a.onUnmounted)(()=>{o=!0,g()}),{graph:c,loading:f,initGraph:m,destroyGraph:g,centerContent:_,zoomToFit:v,scheduleZoomToFit:y,zoom:b,resizeGraph:x,updateTheme:h}}function p(e,t){let n=URL.createObjectURL(e),r=document.createElement(`a`);r.href=n,r.download=t,r.style.display=`none`,document.body.appendChild(r),r.click(),document.body.removeChild(r),URL.revokeObjectURL(n)}function m(e,t=`diagram.json`){let n=JSON.stringify(e,null,2);p(new Blob([n],{type:`application/json`}),t)}async function h(e,t=`diagram.png`,n={}){let{backgroundColor:r=`#ffffff`,scale:i=2}=n,{container:a}=e;p(await _(await(0,c.default)(a,{backgroundColor:r,scale:i,useCORS:!0,logging:!1}),`image/png`),t)}function g(e,t=`diagram.svg`){let n=e.container.querySelector(`svg`);if(!n)throw Error(`SVG导出失败: 未找到图表 SVG 元素`);let r=n.cloneNode(!0);r.getAttribute(`xmlns`)||r.setAttribute(`xmlns`,`http://www.w3.org/2000/svg`),r.getAttribute(`xmlns:xlink`)||r.setAttribute(`xmlns:xlink`,`http://www.w3.org/1999/xlink`);let i=new XMLSerializer().serializeToString(r);p(new Blob([i],{type:`image/svg+xml;charset=utf-8`}),t)}function _(e,t,n=1){return new Promise((r,i)=>{e.toBlob(e=>{e?r(e):i(Error(`Canvas 转 Blob 失败`))},t,n)})}const v=[{label:`导出PNG`,key:`png`},{label:`导出SVG`,key:`svg`},{label:`导出JSON`,key:`json`}];function y(e,t=`diagram`){let r=n.t();return{exportOptions:v,handleExport:async(n,i)=>{if(e.value)try{switch(n){case`png`:await h(e.value,`${t}.png`);break;case`svg`:g(e.value,`${t}.svg`);break;case`json`:i&&m(i(),`${t}.json`);break}}catch(e){r.error(`导出${n.toUpperCase()}失败,请重试`,e)}}}}function b(e,t){e.on(`cell:change:*`,({cell:e,key:n,previous:r,options:i})=>{t()&&i.ui&&e.prop(n,r,{ui:!1})})}const x=[{label:`BIGINT`,value:`BIGINT`},{label:`INT`,value:`INT`},{label:`SMALLINT`,value:`SMALLINT`},{label:`TINYINT`,value:`TINYINT`},{label:`VARCHAR(50)`,value:`VARCHAR(50)`},{label:`VARCHAR(100)`,value:`VARCHAR(100)`},{label:`VARCHAR(255)`,value:`VARCHAR(255)`},{label:`CHAR(10)`,value:`CHAR(10)`},{label:`TEXT`,value:`TEXT`},{label:`LONGTEXT`,value:`LONGTEXT`},{label:`DATETIME`,value:`DATETIME`},{label:`TIMESTAMP`,value:`TIMESTAMP`},{label:`DATE`,value:`DATE`},{label:`TIME`,value:`TIME`},{label:`DECIMAL(10,2)`,value:`DECIMAL(10,2)`},{label:`FLOAT`,value:`FLOAT`},{label:`DOUBLE`,value:`DOUBLE`},{label:`BOOLEAN`,value:`BOOLEAN`},{label:`JSON`,value:`JSON`}],S={key:0,class:`table-editor`},C={class:`fields-container`},w={class:`field-header`},T=(0,a.defineComponent)({__name:`ERTableEditor`,props:(0,a.mergeModels)({show:{type:Boolean}},{editingTable:{},editingTableModifiers:{}}),emits:(0,a.mergeModels)([`update:show`,`save`,`add-field`,`remove-field`,`handle-primary-key`],[`update:editingTable`]),setup(e,{emit:t}){let n=(0,a.useModel)(e,`editingTable`),i=t,s=(e,t)=>i(`handle-primary-key`,e,t),c=()=>i(`add-field`),l=e=>i(`remove-field`,e);return(t,i)=>((0,a.openBlock)(),(0,a.createBlock)((0,a.unref)(o.NDrawer),{show:e.show,width:`600`,placement:`right`,"onUpdate:show":i[4]||=e=>t.$emit(`update:show`,e)},{default:(0,a.withCtx)(()=>[(0,a.createVNode)((0,a.unref)(o.NDrawerContent),{title:`编辑表: ${n.value?.name||`新表`}`,closable:``},{footer:(0,a.withCtx)(()=>[(0,a.createVNode)((0,a.unref)(o.NSpace),{justify:`end`},{default:(0,a.withCtx)(()=>[(0,a.createVNode)((0,a.unref)(o.NButton),{onClick:i[2]||=e=>t.$emit(`update:show`,!1)},{default:(0,a.withCtx)(()=>[...i[11]||=[(0,a.createTextVNode)(`取消`,-1)]]),_:1}),(0,a.createVNode)((0,a.unref)(o.NButton),{onClick:i[3]||=e=>t.$emit(`save`),type:`primary`},{default:(0,a.withCtx)(()=>[...i[12]||=[(0,a.createTextVNode)(`保存`,-1)]]),_:1})]),_:1})]),default:(0,a.withCtx)(()=>[n.value?((0,a.openBlock)(),(0,a.createElementBlock)(`div`,S,[(0,a.createVNode)((0,a.unref)(o.NForm),{model:n.value,"label-placement":`top`},{default:(0,a.withCtx)(()=>[(0,a.createVNode)((0,a.unref)(o.NFormItem),{label:`表名`},{default:(0,a.withCtx)(()=>[(0,a.createVNode)((0,a.unref)(o.NInput),{value:n.value.name,"onUpdate:value":i[0]||=e=>n.value.name=e,placeholder:`请输入表名`},null,8,[`value`])]),_:1}),(0,a.createVNode)((0,a.unref)(o.NFormItem),{label:`表注释`},{default:(0,a.withCtx)(()=>[(0,a.createVNode)((0,a.unref)(o.NInput),{value:n.value.comment,"onUpdate:value":i[1]||=e=>n.value.comment=e,placeholder:`表注释`},null,8,[`value`])]),_:1}),(0,a.createVNode)((0,a.unref)(o.NDivider),null,{default:(0,a.withCtx)(()=>[...i[5]||=[(0,a.createTextVNode)(`字段列表`,-1)]]),_:1}),(0,a.createElementVNode)(`div`,C,[((0,a.openBlock)(!0),(0,a.createElementBlock)(a.Fragment,null,(0,a.renderList)(n.value.fields,(e,t)=>((0,a.openBlock)(),(0,a.createBlock)((0,a.unref)(o.NCard),{key:t,size:`small`,class:`field-card`},{header:(0,a.withCtx)(()=>[(0,a.createElementVNode)(`div`,w,[(0,a.createElementVNode)(`span`,null,`#`+(0,a.toDisplayString)(t+1)+` `+(0,a.toDisplayString)(e.name||`新字段`),1),(0,a.createVNode)((0,a.unref)(o.NButton),{onClick:e=>l(t),size:`tiny`,type:`error`,quaternary:``,disabled:n.value.fields.length<=1},{default:(0,a.withCtx)(()=>[...i[6]||=[(0,a.createTextVNode)(` 删除 `,-1)]]),_:1},8,[`onClick`,`disabled`])])]),default:(0,a.withCtx)(()=>[(0,a.createVNode)((0,a.unref)(o.NGrid),{cols:2,"x-gap":12},{default:(0,a.withCtx)(()=>[(0,a.createVNode)((0,a.unref)(o.NGi),null,{default:(0,a.withCtx)(()=>[(0,a.createVNode)((0,a.unref)(o.NFormItem),{label:`字段名`,size:`small`},{default:(0,a.withCtx)(()=>[(0,a.createVNode)((0,a.unref)(o.NInput),{value:e.name,"onUpdate:value":t=>e.name=t,placeholder:`字段名`,size:`small`},null,8,[`value`,`onUpdate:value`])]),_:2},1024)]),_:2},1024),(0,a.createVNode)((0,a.unref)(o.NGi),null,{default:(0,a.withCtx)(()=>[(0,a.createVNode)((0,a.unref)(o.NFormItem),{label:`类型`,size:`small`},{default:(0,a.withCtx)(()=>[(0,a.createVNode)((0,a.unref)(o.NSelect),{value:e.type,"onUpdate:value":t=>e.type=t,options:(0,a.unref)(x),size:`small`,filterable:``,placeholder:`选择类型`},null,8,[`value`,`onUpdate:value`,`options`])]),_:2},1024)]),_:2},1024)]),_:2},1024),(0,a.createVNode)((0,a.unref)(o.NSpace),{style:{"margin-top":`12px`}},{default:(0,a.withCtx)(()=>[(0,a.createVNode)((0,a.unref)(o.NCheckbox),{checked:e.isPrimaryKey,"onUpdate:checked":[t=>e.isPrimaryKey=t,t=>s(e,t)]},{default:(0,a.withCtx)(()=>[...i[7]||=[(0,a.createTextVNode)(` 主键 `,-1)]]),_:1},8,[`checked`,`onUpdate:checked`]),(0,a.createVNode)((0,a.unref)(o.NCheckbox),{checked:e.isRequired,"onUpdate:checked":t=>e.isRequired=t},{default:(0,a.withCtx)(()=>[...i[8]||=[(0,a.createTextVNode)(`必填`,-1)]]),_:1},8,[`checked`,`onUpdate:checked`]),(0,a.createVNode)((0,a.unref)(o.NCheckbox),{checked:e.isForeignKey,"onUpdate:checked":t=>e.isForeignKey=t},{default:(0,a.withCtx)(()=>[...i[9]||=[(0,a.createTextVNode)(`外键`,-1)]]),_:1},8,[`checked`,`onUpdate:checked`])]),_:2},1024),(0,a.createVNode)((0,a.unref)(o.NFormItem),{label:`注释`,size:`small`,style:{"margin-top":`12px`}},{default:(0,a.withCtx)(()=>[(0,a.createVNode)((0,a.unref)(o.NInput),{value:e.comment,"onUpdate:value":t=>e.comment=t,placeholder:`字段注释`,size:`small`},null,8,[`value`,`onUpdate:value`])]),_:2},1024)]),_:2},1024))),128)),(0,a.createVNode)((0,a.unref)(o.NButton),{onClick:c,dashed:``,block:``,type:`primary`,ghost:``,style:{"margin-top":`16px`}},{icon:(0,a.withCtx)(()=>[(0,a.createVNode)(r.t,{name:`mdi:plus`,size:16})]),default:(0,a.withCtx)(()=>[i[10]||=(0,a.createTextVNode)(` 添加字段 `,-1)]),_:1})])]),_:1},8,[`model`])])):(0,a.createCommentVNode)(`v-if`,!0)]),_:1},8,[`title`])]),_:1},8,[`show`]))}});var E=i.t(T,[[`__scopeId`,`data-v-4e8f219f`]]);const D={class:`er-layout`},O={key:0,class:`toolbar`},k={key:0,style:{"margin-top":`8px`}},A=(0,a.defineComponent)({__name:`index`,props:{data:{},showToolbar:{type:Boolean,default:!0},readonly:{type:Boolean,default:!1},theme:{}},emits:[`ready`,`data-change`],setup(e,{expose:n,emit:i}){let c=e,l=i,u=(0,a.ref)(),{graph:d,initGraph:p,centerContent:m,zoomToFit:h,scheduleZoomToFit:g}=f(u,(0,a.computed)(()=>c.theme===`dark`)),{exportOptions:_,handleExport:v}=y(d,`er-diagram`),x=(0,a.ref)(!1),S=(0,a.ref)(),C=(0,a.ref)(!1),w=(e,t)=>e.length>t?e.substring(0,t-1)+`..`:e,T=e=>e.fields?.map(t=>{let n=t.isPrimaryKey?`🔑 ${t.name}`:t.isRequired?`* ${t.name}`:t.name;return{id:`${e.id}_${t.name}`,data:{tableId:e.id,fieldName:t.name},group:`list`,attrs:{portNameLabel:{text:w(n,12),title:n},portTypeLabel:{text:w(t.type,10),title:t.type},portBody:{fill:t.isPrimaryKey?`#FFF7E6`:`#EFF4FF`}}}})||[],A=e=>({id:e.id,shape:`er-rect`,x:e.position.x,y:e.position.y,width:200,height:24+(e.fields?.length||0)*24,data:t.t(e),attrs:{label:{text:w(e.name,20),refX:.5,refY:10,textAnchor:`middle`,title:e.name}},ports:T(e)}),j=()=>{d.value&&(s.Graph.registerPortLayout(`erPortPosition`,e=>e.map((e,t)=>({position:{x:0,y:(t+1)*24},angle:0})),!0),s.Graph.registerNode(`er-rect`,{inherit:`rect`,markup:[{tagName:`rect`,selector:`body`},{tagName:`text`,selector:`label`}],attrs:{rect:{strokeWidth:1,stroke:`#5F95FF`,fill:`#5F95FF`},label:{fontWeight:`bold`,fill:`#ffffff`,fontSize:12}},ports:{groups:{list:{markup:[{tagName:`rect`,selector:`portBody`},{tagName:`text`,selector:`portNameLabel`},{tagName:`text`,selector:`portTypeLabel`}],attrs:{portBody:{width:200,height:24,strokeWidth:1,stroke:`#5F95FF`,fill:`#EFF4FF`,magnet:!0},portNameLabel:{ref:`portBody`,refX:6,refY:6,fontSize:9,textAnchor:`start`,textOverflow:`ellipsis`},portTypeLabel:{ref:`portBody`,refX:120,refY:6,fontSize:9,textAnchor:`start`,fill:`#666`}},position:`erPortPosition`}}}},!0))},M=()=>{c.readonly||(C.value=!C.value,C.value||N())},N=()=>{d.value?.getEdges().forEach(e=>{e.attr(`line/stroke`,`#A2B1C3`),e.attr(`line/strokeWidth`,2)})},P=e=>{if(!d.value)return;let t=d.value.createNode(A(e));return d.value.resetCells([t,...d.value.getCells()]),t},F=()=>{let e=d.value?.getNodes()||[];for(let t=0;t<10;t++)for(let n=0;n<3;n++){let r={x:n*250+50,y:t*250+50};if(!e.some(e=>{let t=e.getPosition();return Math.abs(t.x-r.x)<250*.8&&Math.abs(t.y-r.y)<250*.8}))return r}return{x:50,y:50}},I=()=>{if(c.readonly)return;let e={id:`table_${Date.now()}`,name:`新表`,comment:``,fields:[{name:`id`,type:`BIGINT`,isPrimaryKey:!0,isRequired:!0,isForeignKey:!1,comment:`主键`},{name:`name`,type:`VARCHAR(100)`,isPrimaryKey:!1,isRequired:!0,isForeignKey:!1,comment:`名称`}],position:F()};P(e),L(e),K()},L=e=>{c.readonly||(S.value=t.t(e),x.value=!0)},R=()=>{if(c.readonly||!d.value||!S.value)return;let e=d.value.getCellById(S.value.id);e&&(e.setData(t.t(S.value)),e.prop({size:{width:200,height:24+S.value.fields.length*24},attrs:{label:{text:w(S.value.name,20),title:S.value.name}},ports:T(S.value)})),x.value=!1,K()},z=(e,t)=>{c.readonly||!t||(e.isRequired=!0,S.value?.fields.forEach(t=>{t!==e&&(t.isPrimaryKey=!1)}))},B=()=>{c.readonly||S.value?.fields.push({name:`field_${(S.value?.fields.length||0)+1}`,type:`VARCHAR(100)`,isPrimaryKey:!1,isRequired:!1,isForeignKey:!1,comment:``})},V=e=>{c.readonly||S.value&&S.value.fields.length>1&&S.value.fields.splice(e,1)},H=(e,t)=>{let n=e.getPort(t)?.data;if(n?.tableId===e.id)return n.fieldName;let r=`${e.id}_`;return t.startsWith(r)?t.slice(r.length):void 0},U=e=>e.getData()?.name||e.id,W=e=>{let n=e.getSourceNode(),r=e.getTargetNode();if(!n||!r)return;let i=H(n,e.getSourcePortId()??``),a=H(r,e.getTargetPortId()??``);if(i===void 0||a===void 0)return;let o=e.getData();return{...t.t(o),id:e.id,type:o?.type??`foreign-key`,sourceTable:n.id,sourceField:i,targetTable:r.id,targetField:a,...!o&&{name:`${U(n)} -> ${U(r)}`}}},G=()=>{if(!d.value)return{tables:[],relations:[]};let e=d.value.getNodes().map(e=>({...t.t(e.getData()),position:e.getPosition()})),n=[];return d.value.getEdges().forEach(e=>{let t=W(e);t&&n.push(t)}),{tables:e,relations:n}},K=()=>{c.readonly||l(`data-change`,G())},q=e=>{let n=d.value;if(!n)return;J=null;let r=e.tables.map(e=>n.createNode(A(e)));e.relations?.forEach(e=>{r.push(n.createEdge({id:e.id,source:{cell:e.sourceTable,port:`${e.sourceTable}_${e.sourceField}`},target:{cell:e.targetTable,port:`${e.targetTable}_${e.targetField}`},data:t.t(e),attrs:{line:{stroke:`#A2B1C3`,strokeWidth:2}}}))}),n.resetCells(r)},J=null;(0,a.watch)(d,e=>{e instanceof s.Graph&&(j(),b(e,()=>c.readonly),e.on(`node:dblclick`,({node:e})=>{c.readonly||L(e.getData())}),e.on(`node:moved`,K),e.on(`edge:connected`,K),e.on(`edge:removed`,({edge:e})=>{J===e&&(J=null),K()}),e.on(`edge:click`,({edge:e})=>{c.readonly||(C.value?e.remove():(N(),e.attr(`line/stroke`,`#ff4d4f`),e.attr(`line/strokeWidth`,3),J=e))}),e.on(`edge:dblclick`,({edge:e})=>{c.readonly||e.remove()}),e.on(`blank:click`,()=>{J=null,C.value||N()}),l(`ready`,e),(0,a.nextTick)(()=>{d.value===e&&c.data?.tables&&(q(c.data),g(300,20))}))},{immediate:!0}),(0,a.watch)(()=>c.data,e=>{d.value&&e?.tables&&q(e)},{deep:!0}),(0,a.watch)(()=>c.readonly,e=>{e&&(x.value=!1,S.value=void 0,C.value=!1,J=null,N())},{flush:`sync`});let Y=e=>{e.target?.closest(`input, textarea, [contenteditable]:not([contenteditable="false"])`)||u.value?.focus({preventScroll:!0})},X=e=>{c.readonly||document.activeElement!==u.value||e.target?.closest(`input, textarea, [contenteditable]:not([contenteditable="false"])`)||(e.key===`Delete`||e.key===`Backspace`)&&J&&(e.preventDefault(),J.remove(),J=null)};return(0,a.onMounted)(()=>{p({interacting:()=>!c.readonly,connecting:{allowBlank:!1,allowNode:!1,allowEdge:!1,validateMagnet:()=>!c.readonly,validateConnection:()=>!c.readonly,validateEdge:()=>!c.readonly}})}),n({getGraph:()=>d.value??void 0,getData:G}),(t,n)=>((0,a.openBlock)(),(0,a.createElementBlock)(`div`,D,[(0,a.createCommentVNode)(` 工具栏 `),e.showToolbar?((0,a.openBlock)(),(0,a.createElementBlock)(`div`,O,[(0,a.createVNode)((0,a.unref)(o.NSpace),null,{default:(0,a.withCtx)(()=>[(0,a.createVNode)((0,a.unref)(o.NButton),{onClick:I,disabled:e.readonly,type:`primary`,size:`small`},{icon:(0,a.withCtx)(()=>[(0,a.createVNode)(r.t,{name:`mdi:table-plus`,size:16})]),default:(0,a.withCtx)(()=>[n[3]||=(0,a.createTextVNode)(` 添加表 `,-1)]),_:1},8,[`disabled`]),(0,a.createVNode)((0,a.unref)(o.NButton),{onClick:(0,a.unref)(m),size:`small`},{icon:(0,a.withCtx)(()=>[(0,a.createVNode)(r.t,{name:`mdi:image-filter-center-focus`,size:16})]),default:(0,a.withCtx)(()=>[n[4]||=(0,a.createTextVNode)(` 居中 `,-1)]),_:1},8,[`onClick`]),(0,a.createVNode)((0,a.unref)(o.NButton),{onClick:(0,a.unref)(h),size:`small`},{icon:(0,a.withCtx)(()=>[(0,a.createVNode)(r.t,{name:`mdi:fit-to-screen`,size:16})]),default:(0,a.withCtx)(()=>[n[5]||=(0,a.createTextVNode)(` 适应 `,-1)]),_:1},8,[`onClick`]),(0,a.createVNode)((0,a.unref)(o.NButton),{onClick:M,disabled:e.readonly,type:C.value?`error`:`default`,size:`small`},{icon:(0,a.withCtx)(()=>[(0,a.createVNode)(r.t,{name:`mdi:delete`,size:16})]),default:(0,a.withCtx)(()=>[(0,a.createTextVNode)(` `+(0,a.toDisplayString)(C.value?`退出删除`:`删除连线`),1)]),_:1},8,[`disabled`,`type`]),(0,a.createVNode)((0,a.unref)(o.NDropdown),{options:(0,a.unref)(_),onSelect:n[0]||=e=>(0,a.unref)(v)(e,G)},{default:(0,a.withCtx)(()=>[(0,a.createVNode)((0,a.unref)(o.NButton),{size:`small`},{icon:(0,a.withCtx)(()=>[(0,a.createVNode)(r.t,{name:`mdi:export`,size:16})]),default:(0,a.withCtx)(()=>[n[6]||=(0,a.createTextVNode)(` 导出 `,-1)]),_:1})]),_:1},8,[`options`])]),_:1}),C.value?((0,a.openBlock)(),(0,a.createElementBlock)(`div`,k,[(0,a.createVNode)((0,a.unref)(o.NAlert),{type:`info`,size:`small`,"show-icon":!1},{default:(0,a.withCtx)(()=>[...n[7]||=[(0,a.createTextVNode)(` 删除模式:点击连接线即可删除 `,-1)]]),_:1})])):(0,a.createCommentVNode)(`v-if`,!0)])):(0,a.createCommentVNode)(`v-if`,!0),(0,a.createCommentVNode)(` 图表容器 `),(0,a.createElementVNode)(`div`,{ref_key:`containerRef`,ref:u,class:`graph-container`,tabindex:`0`,role:`region`,"aria-label":`ER 图画布`,onPointerdown:Y,onKeydown:X},null,544),(0,a.createCommentVNode)(` 表编辑器 `),(0,a.createVNode)(E,{show:x.value,"editing-table":S.value,"onUpdate:editingTable":n[1]||=e=>S.value=e,"onUpdate:show":n[2]||=e=>x.value=e,onSave:R,onAddField:B,onRemoveField:V,onHandlePrimaryKey:z},null,8,[`show`,`editing-table`])]))}});var j=i.t(A,[[`__scopeId`,`data-v-7676efd4`]]);const M={defaultColor:`#A2B1C3`,highlightColor:`#ff4d4f`,strokeWidth:2,highlightStrokeWidth:3,portPositions:[],onDataChange:()=>{},isReadonly:()=>!1};function N(e,t={}){let n={...M,...t},r=()=>{e.value?.getEdges().forEach(e=>{e.attr(`line/stroke`,n.defaultColor),e.attr(`line/strokeWidth`,n.strokeWidth)})},i=e=>{r(),e.attr(`line/stroke`,n.highlightColor),e.attr(`line/strokeWidth`,n.highlightStrokeWidth)},a=(e,t)=>{n.portPositions.forEach(n=>e.attr(`port-${n}/style/opacity`,t))};return{resetEdgeStyles:r,highlightEdge:i,togglePorts:a,bindInteractions:()=>{let t=e.value;t&&(t.on(`edge:click`,({edge:e})=>i(e)),t.on(`edge:dblclick`,({edge:e})=>{n.isReadonly()||(e.remove(),n.onDataChange())}),t.on(`blank:click`,r),t.on(`node:click`,r),t.on(`edge:connected`,()=>{n.isReadonly()||n.onDataChange()}),n.portPositions.length>0&&(t.on(`node:mouseenter`,({node:e})=>a(e,1)),t.on(`node:mouseleave`,({node:e})=>a(e,0))))}}}const P={"start-event":{name:`开始`,title:`开始事件`,iconClass:`circle start-event`},activity:{name:`任务`,title:`任务活动`,iconClass:`rect activity`},gateway:{name:`网关`,title:`排他网关`,iconClass:`diamond gateway`},"end-event":{name:`结束`,title:`结束事件`,iconClass:`circle end-event`}},F={event:`事件`,activity:`活动`,gateway:`网关`,"bpmn-edge":`连接线`},I=[`top`,`right`,`bottom`,`left`],L=(e,t=`rect`)=>e.reduce((e,n)=>{let r=t===`circle`,i=n===`top`?r?{refCx:.5,refCy:0}:{refX:.5,refY:0}:n===`right`?r?{refCx:1,refCy:.5}:{refX:1,refY:.5}:n===`bottom`?r?{refCx:.5,refCy:1}:{refX:.5,refY:1}:r?{refCx:0,refCy:.5}:{refX:0,refY:.5};return e[`port-${n}`]={ref:`body`,...i,r:4,fill:`#31d0c6`,stroke:`#ffffff`,strokeWidth:2,magnet:!0,style:{cursor:`crosshair`,opacity:0,transition:`opacity 0.2s`}},e},{}),R={event:{inherit:`circle`,attrs:{body:{strokeWidth:2,stroke:`#5F95FF`,fill:`#FFF`,magnet:!1,style:{cursor:`move`}},text:{fontSize:12,fill:`#262626`,textAnchor:`middle`,textVerticalAnchor:`middle`,pointerEvents:`none`}}},activity:{inherit:`rect`,attrs:{body:{rx:6,ry:6,stroke:`#5F95FF`,fill:`#EFF4FF`,strokeWidth:1,magnet:!1,style:{cursor:`move`}},text:{fontSize:12,fill:`#262626`,textAnchor:`middle`,textVerticalAnchor:`middle`,pointerEvents:`none`}}},gateway:{inherit:`polygon`,attrs:{body:{refPoints:`0,10 10,0 20,10 10,20`,strokeWidth:2,stroke:`#5F95FF`,fill:`#EFF4FF`,magnet:!1,style:{cursor:`move`}},text:{fontSize:20,fill:`#5F95FF`,textAnchor:`middle`,textVerticalAnchor:`middle`,pointerEvents:`none`}}}},z={inherit:`edge`,attrs:{line:{stroke:`#A2B1C3`,strokeWidth:2,targetMarker:{name:`block`,width:8,height:6,fill:`#A2B1C3`},cursor:`pointer`}}};function B(e=!1){let t={background:e?`#18181c`:`#ffffff`,gridPrimary:e?`rgba(255, 255, 255, 0.08)`:`#eee`,gridSecondary:e?`rgba(255, 255, 255, 0.04)`:`#ddd`};return{background:{color:t.background},grid:{visible:!0,type:`doubleMesh`,args:[{color:t.gridPrimary,thickness:1},{color:t.gridSecondary,thickness:1,factor:4}]},mousewheel:{enabled:!0,zoomAtMousePosition:!0,modifiers:`ctrl`,minScale:.5,maxScale:3},connecting:{router:`manhattan`,connector:{name:`rounded`,args:{radius:8}},allowBlank:!1,allowLoop:!1,allowNode:!1,snap:!0,allowEdge:!1},highlighting:{magnetAvailable:{name:`stroke`,args:{attrs:{fill:`#31d0c6`,stroke:`#31d0c6`,opacity:1}}},magnetAdsorbed:{name:`stroke`,args:{attrs:{fill:`#5F95FF`,stroke:`#5F95FF`,opacity:1}}}},selecting:{enabled:!0,rubberband:!0,showNodeSelectionBox:!0},resizing:!0,rotating:!1,snapline:!0,keyboard:!0,clipboard:!0}}B();const V={"start-event":{shape:`event`,width:50,height:50,label:`开始事件`,data:{type:`start`}},"end-event":{shape:`event`,width:50,height:50,label:`结束事件`,data:{type:`end`}},activity:{shape:`activity`,width:120,height:60,label:`新活动`,data:{description:``,assignee:``}},gateway:{shape:`gateway`,width:40,height:40,label:`+`,data:{type:`exclusive`}}},H=[{id:`start-1`,shape:`event`,x:100,y:200,width:50,height:50,label:`流程开始`,data:{type:`start`}},{id:`activity-1`,shape:`activity`,x:200,y:180,width:120,height:60,label:`用户申请`,data:{description:`用户提交申请表单`,assignee:`申请人`}},{id:`activity-2`,shape:`activity`,x:380,y:180,width:120,height:60,label:`初审`,data:{description:`部门进行初步审核`,assignee:`部门主管`}},{id:`gateway-1`,shape:`gateway`,x:550,y:200,width:40,height:40,label:`+`,data:{type:`exclusive`}},{id:`activity-3`,shape:`activity`,x:650,y:120,width:120,height:60,label:`终审`,data:{description:`高级主管最终审核`,assignee:`总监`}},{id:`activity-4`,shape:`activity`,x:650,y:260,width:120,height:60,label:`驳回处理`,data:{description:`处理驳回流程`,assignee:`专员`}},{id:`end-1`,shape:`event`,x:820,y:140,width:50,height:50,label:`审批通过`,data:{type:`end`}},{id:`end-2`,shape:`event`,x:820,y:280,width:50,height:50,label:`审批驳回`,data:{type:`end`}},{id:`edge-1`,shape:`bpmn-edge`,source:`start-1`,target:`activity-1`,x:0,y:0},{id:`edge-2`,shape:`bpmn-edge`,source:`activity-1`,target:`activity-2`,x:0,y:0},{id:`edge-3`,shape:`bpmn-edge`,source:`activity-2`,target:`gateway-1`,x:0,y:0},{id:`edge-4`,shape:`bpmn-edge`,source:`gateway-1`,target:`activity-3`,label:`通过`,x:0,y:0},{id:`edge-5`,shape:`bpmn-edge`,source:`gateway-1`,target:`activity-4`,label:`驳回`,x:0,y:0},{id:`edge-6`,shape:`bpmn-edge`,source:`activity-3`,target:`end-1`,x:0,y:0},{id:`edge-7`,shape:`bpmn-edge`,source:`activity-4`,target:`end-2`,x:0,y:0}],U={key:0,class:`property-panel`},W={class:`property-item`},G={class:`property-item`},K={key:0,class:`property-item`},q={key:1,class:`property-item`},J={class:`form-actions`},Y=(0,a.defineComponent)({__name:`BPMNPropertyEditor`,props:(0,a.mergeModels)({show:{type:Boolean}},{editingElement:{},editingElementModifiers:{}}),emits:(0,a.mergeModels)([`update:show`,`save`,`delete`],[`update:editingElement`]),setup(e,{emit:t}){let n=(0,a.useModel)(e,`editingElement`),r=t,i=(0,a.computed)(()=>F[n.value?.shape]||n.value?.shape||``);return(t,s)=>((0,a.openBlock)(),(0,a.createBlock)((0,a.unref)(o.NDrawer),{show:e.show,width:`300`,title:`属性设置`,"onUpdate:show":s[6]||=e=>r(`update:show`,e)},{default:(0,a.withCtx)(()=>[n.value?((0,a.openBlock)(),(0,a.createElementBlock)(`div`,U,[(0,a.createElementVNode)(`div`,W,[s[7]||=(0,a.createElementVNode)(`div`,{class:`property-label`},`名称`,-1),(0,a.createVNode)((0,a.unref)(o.NInput),{value:n.value.label,"onUpdate:value":s[0]||=e=>n.value.label=e,placeholder:`请输入名称`,size:`small`},null,8,[`value`])]),(0,a.createElementVNode)(`div`,G,[s[8]||=(0,a.createElementVNode)(`div`,{class:`property-label`},`类型`,-1),(0,a.createVNode)((0,a.unref)(o.NInput),{value:i.value,readonly:``,size:`small`},null,8,[`value`])]),n.value.shape===`activity`?((0,a.openBlock)(),(0,a.createElementBlock)(`div`,K,[s[9]||=(0,a.createElementVNode)(`div`,{class:`property-label`},`描述`,-1),(0,a.createVNode)((0,a.unref)(o.NInput),{value:n.value.description,"onUpdate:value":s[1]||=e=>n.value.description=e,type:`textarea`,rows:3,placeholder:`请输入活动描述`,size:`small`},null,8,[`value`])])):(0,a.createCommentVNode)(`v-if`,!0),n.value.shape===`activity`?((0,a.openBlock)(),(0,a.createElementBlock)(`div`,q,[s[10]||=(0,a.createElementVNode)(`div`,{class:`property-label`},`执行人`,-1),(0,a.createVNode)((0,a.unref)(o.NInput),{value:n.value.assignee,"onUpdate:value":s[2]||=e=>n.value.assignee=e,placeholder:`请输入执行人`,size:`small`},null,8,[`value`])])):(0,a.createCommentVNode)(`v-if`,!0),(0,a.createElementVNode)(`div`,J,[(0,a.createVNode)((0,a.unref)(o.NSpace),null,{default:(0,a.withCtx)(()=>[(0,a.createVNode)((0,a.unref)(o.NButton),{onClick:s[3]||=e=>r(`save`),type:`primary`,size:`small`},{default:(0,a.withCtx)(()=>[...s[11]||=[(0,a.createTextVNode)(` 保存 `,-1)]]),_:1}),(0,a.createVNode)((0,a.unref)(o.NButton),{onClick:s[4]||=e=>r(`update:show`,!1),size:`small`},{default:(0,a.withCtx)(()=>[...s[12]||=[(0,a.createTextVNode)(` 取消 `,-1)]]),_:1}),(0,a.createVNode)((0,a.unref)(o.NButton),{onClick:s[5]||=e=>r(`delete`),type:`error`,size:`small`},{default:(0,a.withCtx)(()=>[...s[13]||=[(0,a.createTextVNode)(` 删除 `,-1)]]),_:1})]),_:1})])])):(0,a.createCommentVNode)(`v-if`,!0)]),_:1},8,[`show`]))}});var X=i.t(Y,[[`__scopeId`,`data-v-fc8f213e`]]);const ee={class:`bpmn-layout`},te={key:0,class:`top-toolbar`},ne={class:`toolbar-section`},re={class:`toolbar-group`},ie={class:`toolbar-group`},ae={class:`toolbar-group`},oe={class:`main-content`},se={key:0,class:`left-panel`},ce={class:`element-grid`},le=[`onClick`,`title`],ue={class:`graph-wrapper`},de=(0,a.defineComponent)({__name:`index`,props:{data:{},showToolbar:{type:Boolean,default:!0},readonly:{type:Boolean,default:!1},width:{default:`100%`},height:{default:`600px`},theme:{}},emits:[`ready`,`data-change`],setup(e,{expose:n,emit:i}){let c=e,l=i,u=(0,a.ref)(),{graph:d,initGraph:p,centerContent:m,zoomToFit:h,scheduleZoomToFit:g}=f(u,(0,a.computed)(()=>c.theme===`dark`)),{exportOptions:_,handleExport:v}=y(d,`bpmn-diagram`),{bindInteractions:x}=N(d,{portPositions:I,onDataChange:()=>U(),isReadonly:()=>c.readonly}),S=(0,a.ref)(!1),C=(0,a.ref)(),w=e=>String(e.attr(`text/text`)||e.attr(`label/text`)||``),T=e=>{if(!e)return[];if(Array.isArray(e))return e;let t=[];return Object.values(e).forEach(e=>{Array.isArray(e)&&t.push(...e)}),t},E=()=>{let e=I.map(e=>({tagName:`circle`,selector:`port-${e}`})),t=[`event`,`activity`,`gateway`],n={event:`circle`,activity:`rect`,gateway:`polygon`};t.forEach(t=>{s.Graph.registerNode(t,{...R[t],markup:[{tagName:n[t],selector:`body`},{tagName:`text`,selector:`text`},...e],attrs:{...R[t].attrs,...L(I,n[t])}},!0)}),s.Graph.registerEdge(`bpmn-edge`,z,!0)},D=e=>{if(!d.value)return;let n=e.map(e=>{let{data:n,...r}=e,i=e.shape===`bpmn-edge`?d.value.createEdge(r):d.value.createNode(r);return n&&i.setData(t.t(n)),i});d.value.resetCells(n),n.length&&g(200,50)},O=e=>{if(c.readonly||!d.value)return;let n=V[e];if(!n)return;let r=d.value.options.width/2,i=d.value.options.height/2,{data:a,...o}={id:`${e}-${Date.now()}`,x:r+Math.random()*100-50,y:i+Math.random()*100-50,...n},s=d.value.createNode(o);a&&s.setData(t.t(a)),d.value.addCell(s),U()},k=()=>{c.readonly||(d.value?.clearCells(),U())},A=e=>{if(c.readonly)return;let t=e.getData()||{};C.value={id:e.id,shape:e.shape,label:w(e),description:t.description||``,assignee:t.assignee||``,x:0,y:0},S.value=!0},j=()=>{if(c.readonly||!d.value||!C.value)return;let e=d.value.getCellById(C.value.id);e&&(e.setData({description:C.value.description,assignee:C.value.assignee}),e.attr(`text/text`,C.value.label||``),e.attr(`label/text`,C.value.label||``)),S.value=!1,U()},M=()=>{c.readonly||!d.value||!C.value||(d.value.getCellById(C.value.id)?.remove(),S.value=!1,U())},F=()=>d.value?[...d.value.getNodes().map(e=>({id:e.id,shape:e.shape,x:e.getPosition().x,y:e.getPosition().y,width:e.getSize().width,height:e.getSize().height,label:w(e),data:t.t(e.getData()||{})})),...d.value.getEdges().map(e=>({id:e.id,shape:`bpmn-edge`,source:e.getSourceCellId()||``,target:e.getTargetCellId()||``,label:w(e),data:t.t(e.getData()||{}),x:0,y:0}))]:[],U=()=>{c.readonly||l(`data-change`,F())};return(0,a.watch)(d,e=>{e instanceof s.Graph&&(b(e,()=>c.readonly),x(),e.on(`node:dblclick`,({node:e})=>A(e)),e.on(`node:moved`,U),l(`ready`,e),D(c.data===void 0?H:T(c.data)))},{immediate:!0}),(0,a.watch)(()=>c.data,e=>{d.value&&D(e===void 0?H:T(e))},{deep:!0}),(0,a.watch)(()=>c.readonly,e=>{e&&(S.value=!1,C.value=void 0)},{flush:`sync`}),(0,a.onMounted)(async()=>{E();let e=B();await p({...e,interacting:()=>!c.readonly,connecting:{...e.connecting,validateMagnet:()=>!c.readonly,validateEdge:()=>!c.readonly,createEdge:()=>d.value.createEdge({shape:`bpmn-edge`}),validateConnection:({sourceView:e,targetView:t,sourceMagnet:n,targetMagnet:r})=>!c.readonly&&e!==t&&!!n&&!!r&&n.getAttribute(`magnet`)===`true`&&r.getAttribute(`magnet`)===`true`}})}),n({getGraph:()=>d.value,getData:F,loadData:D}),(t,n)=>((0,a.openBlock)(),(0,a.createElementBlock)(`div`,ee,[e.showToolbar?((0,a.openBlock)(),(0,a.createElementBlock)(`div`,te,[(0,a.createElementVNode)(`div`,ne,[(0,a.createElementVNode)(`div`,re,[(0,a.createVNode)((0,a.unref)(o.NButton),{onClick:k,disabled:e.readonly,size:`small`},{icon:(0,a.withCtx)(()=>[(0,a.createVNode)(r.t,{name:`mdi:delete-outline`,size:16})]),default:(0,a.withCtx)(()=>[n[3]||=(0,a.createTextVNode)(` 清空 `,-1)]),_:1},8,[`disabled`])]),(0,a.createElementVNode)(`div`,ie,[(0,a.createVNode)((0,a.unref)(o.NButton),{onClick:(0,a.unref)(m),size:`small`},{icon:(0,a.withCtx)(()=>[(0,a.createVNode)(r.t,{name:`mdi:image-filter-center-focus`,size:16})]),default:(0,a.withCtx)(()=>[n[4]||=(0,a.createTextVNode)(` 居中 `,-1)]),_:1},8,[`onClick`]),(0,a.createVNode)((0,a.unref)(o.NButton),{onClick:(0,a.unref)(h),size:`small`},{icon:(0,a.withCtx)(()=>[(0,a.createVNode)(r.t,{name:`mdi:fit-to-screen`,size:16})]),default:(0,a.withCtx)(()=>[n[5]||=(0,a.createTextVNode)(` 适应 `,-1)]),_:1},8,[`onClick`])]),(0,a.createElementVNode)(`div`,ae,[(0,a.createVNode)((0,a.unref)(o.NDropdown),{options:(0,a.unref)(_),onSelect:n[0]||=e=>(0,a.unref)(v)(e,F)},{default:(0,a.withCtx)(()=>[(0,a.createVNode)((0,a.unref)(o.NButton),{size:`small`},{icon:(0,a.withCtx)(()=>[(0,a.createVNode)(r.t,{name:`mdi:export`,size:16})]),default:(0,a.withCtx)(()=>[n[6]||=(0,a.createTextVNode)(` 导出 `,-1)]),_:1})]),_:1},8,[`options`])])])])):(0,a.createCommentVNode)(`v-if`,!0),(0,a.createElementVNode)(`div`,oe,[e.showToolbar&&!e.readonly?((0,a.openBlock)(),(0,a.createElementBlock)(`div`,se,[n[7]||=(0,a.createElementVNode)(`div`,{class:`panel-title`},`组件`,-1),(0,a.createElementVNode)(`div`,ce,[((0,a.openBlock)(!0),(0,a.createElementBlock)(a.Fragment,null,(0,a.renderList)((0,a.unref)(P),(e,t)=>((0,a.openBlock)(),(0,a.createElementBlock)(`div`,{key:t,class:`element-item`,onClick:e=>O(t),title:e.title},[(0,a.createElementVNode)(`div`,{class:(0,a.normalizeClass)([`element-icon`,e.iconClass])},null,2),(0,a.createElementVNode)(`span`,null,(0,a.toDisplayString)(e.name),1)],8,le))),128))])])):(0,a.createCommentVNode)(`v-if`,!0),(0,a.createElementVNode)(`div`,ue,[(0,a.createElementVNode)(`div`,{ref_key:`containerRef`,ref:u,class:`graph-container`},null,512)])]),(0,a.createVNode)(X,{show:S.value,"editing-element":C.value,"onUpdate:editingElement":n[1]||=e=>C.value=e,"onUpdate:show":n[2]||=e=>S.value=e,onSave:j,onDelete:M},null,8,[`show`,`editing-element`])]))}});var fe=i.t(de,[[`__scopeId`,`data-v-a7aebb58`]]);const pe={key:0,class:`class-editor`},me={class:`section`},he={class:`section-header`},ge={style:{"font-size":`13px`}},_e={class:`section`},ve={class:`section-header`},ye={style:{"font-size":`13px`}},be=(0,a.defineComponent)({__name:`UMLClassEditor`,props:(0,a.mergeModels)({show:{type:Boolean}},{editingClass:{},editingClassModifiers:{}}),emits:(0,a.mergeModels)([`update:show`,`save`,`delete`],[`update:editingClass`]),setup(e,{emit:t}){let n=(0,a.useModel)(e,`editingClass`),i=t;return(t,s)=>((0,a.openBlock)(),(0,a.createBlock)((0,a.unref)(o.NDrawer),{show:e.show,width:`450`,title:`编辑类`,"onUpdate:show":s[6]||=e=>i(`update:show`,e)},{default:(0,a.withCtx)(()=>[n.value?((0,a.openBlock)(),(0,a.createElementBlock)(`div`,pe,[(0,a.createVNode)((0,a.unref)(o.NForm),{"label-placement":`top`},{default:(0,a.withCtx)(()=>[(0,a.createVNode)((0,a.unref)(o.NFormItem),{label:`类名`},{default:(0,a.withCtx)(()=>[(0,a.createVNode)((0,a.unref)(o.NInput),{value:n.value.name,"onUpdate:value":s[0]||=e=>n.value.name=e,placeholder:`请输入类名`},null,8,[`value`])]),_:1}),(0,a.createVNode)((0,a.unref)(o.NDivider),{style:{margin:`20px 0`}},{default:(0,a.withCtx)(()=>[...s[7]||=[(0,a.createTextVNode)(`属性`,-1)]]),_:1}),(0,a.createElementVNode)(`div`,me,[((0,a.openBlock)(!0),(0,a.createElementBlock)(a.Fragment,null,(0,a.renderList)(n.value.attributes,(e,t)=>((0,a.openBlock)(),(0,a.createElementBlock)(`div`,{key:t,class:`item`},[(0,a.createVNode)((0,a.unref)(o.NCard),{size:`small`,style:{"margin-bottom":`12px`}},{header:(0,a.withCtx)(()=>[(0,a.createElementVNode)(`div`,he,[(0,a.createElementVNode)(`span`,ge,`#`+(0,a.toDisplayString)(t+1)+` `+(0,a.toDisplayString)(e.name||`新属性`),1),(0,a.createVNode)((0,a.unref)(o.NButton),{onClick:e=>n.value.attributes.splice(t,1),size:`tiny`,type:`error`,quaternary:``,style:{"margin-left":`auto`}},{default:(0,a.withCtx)(()=>[...s[8]||=[(0,a.createTextVNode)(` 删除 `,-1)]]),_:1},8,[`onClick`])])]),default:(0,a.withCtx)(()=>[(0,a.createVNode)((0,a.unref)(o.NSpace),{vertical:``,size:`small`},{default:(0,a.withCtx)(()=>[(0,a.createVNode)((0,a.unref)(o.NSpace),null,{default:(0,a.withCtx)(()=>[(0,a.createVNode)((0,a.unref)(o.NFormItem),{label:`属性名`,style:{margin:`0`,flex:`1`}},{default:(0,a.withCtx)(()=>[(0,a.createVNode)((0,a.unref)(o.NInput),{value:e.name,"onUpdate:value":t=>e.name=t,placeholder:`属性名`,size:`small`},null,8,[`value`,`onUpdate:value`])]),_:2},1024),(0,a.createVNode)((0,a.unref)(o.NFormItem),{label:`类型`,style:{margin:`0`,flex:`1`}},{default:(0,a.withCtx)(()=>[(0,a.createVNode)((0,a.unref)(o.NInput),{value:e.type,"onUpdate:value":t=>e.type=t,placeholder:`类型`,size:`small`},null,8,[`value`,`onUpdate:value`])]),_:2},1024)]),_:2},1024),(0,a.createVNode)((0,a.unref)(o.NFormItem),{label:`可见性`,style:{margin:`0`}},{default:(0,a.withCtx)(()=>[(0,a.createVNode)((0,a.unref)(o.NRadioGroup),{value:e.visibility,"onUpdate:value":t=>e.visibility=t,size:`small`},{default:(0,a.withCtx)(()=>[(0,a.createVNode)((0,a.unref)(o.NRadio),{value:`public`},{default:(0,a.withCtx)(()=>[...s[9]||=[(0,a.createTextVNode)(`+ public`,-1)]]),_:1}),(0,a.createVNode)((0,a.unref)(o.NRadio),{value:`private`},{default:(0,a.withCtx)(()=>[...s[10]||=[(0,a.createTextVNode)(`- private`,-1)]]),_:1}),(0,a.createVNode)((0,a.unref)(o.NRadio),{value:`protected`},{default:(0,a.withCtx)(()=>[...s[11]||=[(0,a.createTextVNode)(`# protected`,-1)]]),_:1})]),_:1},8,[`value`,`onUpdate:value`])]),_:2},1024)]),_:2},1024)]),_:2},1024)]))),128)),(0,a.createVNode)((0,a.unref)(o.NButton),{onClick:s[1]||=e=>n.value.attributes.push({name:`newAttribute`,type:`string`,visibility:`private`}),dashed:``,block:``,type:`primary`,ghost:``,size:`small`},{icon:(0,a.withCtx)(()=>[(0,a.createVNode)(r.t,{name:`mdi:plus`,size:16})]),default:(0,a.withCtx)(()=>[s[12]||=(0,a.createTextVNode)(` 添加属性 `,-1)]),_:1})]),(0,a.createVNode)((0,a.unref)(o.NDivider),{style:{margin:`20px 0`}},{default:(0,a.withCtx)(()=>[...s[13]||=[(0,a.createTextVNode)(`方法`,-1)]]),_:1}),(0,a.createElementVNode)(`div`,_e,[((0,a.openBlock)(!0),(0,a.createElementBlock)(a.Fragment,null,(0,a.renderList)(n.value.methods,(e,t)=>((0,a.openBlock)(),(0,a.createElementBlock)(`div`,{key:t,class:`item`},[(0,a.createVNode)((0,a.unref)(o.NCard),{size:`small`,style:{"margin-bottom":`12px`}},{header:(0,a.withCtx)(()=>[(0,a.createElementVNode)(`div`,ve,[(0,a.createElementVNode)(`span`,ye,`#`+(0,a.toDisplayString)(t+1)+` `+(0,a.toDisplayString)(e.name||`新方法`),1),(0,a.createVNode)((0,a.unref)(o.NButton),{onClick:e=>n.value.methods.splice(t,1),size:`tiny`,type:`error`,quaternary:``,style:{"margin-left":`auto`}},{default:(0,a.withCtx)(()=>[...s[14]||=[(0,a.createTextVNode)(` 删除 `,-1)]]),_:1},8,[`onClick`])])]),default:(0,a.withCtx)(()=>[(0,a.createVNode)((0,a.unref)(o.NSpace),{vertical:``,size:`small`},{default:(0,a.withCtx)(()=>[(0,a.createVNode)((0,a.unref)(o.NSpace),null,{default:(0,a.withCtx)(()=>[(0,a.createVNode)((0,a.unref)(o.NFormItem),{label:`方法名`,style:{margin:`0`,flex:`1`}},{default:(0,a.withCtx)(()=>[(0,a.createVNode)((0,a.unref)(o.NInput),{value:e.name,"onUpdate:value":t=>e.name=t,placeholder:`方法名`,size:`small`},null,8,[`value`,`onUpdate:value`])]),_:2},1024),(0,a.createVNode)((0,a.unref)(o.NFormItem),{label:`返回类型`,style:{margin:`0`,flex:`1`}},{default:(0,a.withCtx)(()=>[(0,a.createVNode)((0,a.unref)(o.NInput),{value:e.returnType,"onUpdate:value":t=>e.returnType=t,placeholder:`返回类型`,size:`small`},null,8,[`value`,`onUpdate:value`])]),_:2},1024)]),_:2},1024),(0,a.createVNode)((0,a.unref)(o.NFormItem),{label:`可见性`,style:{margin:`0`}},{default:(0,a.withCtx)(()=>[(0,a.createVNode)((0,a.unref)(o.NRadioGroup),{value:e.visibility,"onUpdate:value":t=>e.visibility=t,size:`small`},{default:(0,a.withCtx)(()=>[(0,a.createVNode)((0,a.unref)(o.NRadio),{value:`public`},{default:(0,a.withCtx)(()=>[...s[15]||=[(0,a.createTextVNode)(`+ public`,-1)]]),_:1}),(0,a.createVNode)((0,a.unref)(o.NRadio),{value:`private`},{default:(0,a.withCtx)(()=>[...s[16]||=[(0,a.createTextVNode)(`- private`,-1)]]),_:1}),(0,a.createVNode)((0,a.unref)(o.NRadio),{value:`protected`},{default:(0,a.withCtx)(()=>[...s[17]||=[(0,a.createTextVNode)(`# protected`,-1)]]),_:1})]),_:1},8,[`value`,`onUpdate:value`])]),_:2},1024)]),_:2},1024)]),_:2},1024)]))),128)),(0,a.createVNode)((0,a.unref)(o.NButton),{onClick:s[2]||=e=>n.value.methods.push({name:`newMethod`,returnType:`void`,visibility:`public`}),dashed:``,block:``,type:`primary`,ghost:``,size:`small`},{icon:(0,a.withCtx)(()=>[(0,a.createVNode)(r.t,{name:`mdi:plus`,size:16})]),default:(0,a.withCtx)(()=>[s[18]||=(0,a.createTextVNode)(` 添加方法 `,-1)]),_:1})]),(0,a.createVNode)((0,a.unref)(o.NDivider),{style:{margin:`20px 0`}}),(0,a.createVNode)((0,a.unref)(o.NSpace),{justify:`space-between`},{default:(0,a.withCtx)(()=>[(0,a.createVNode)((0,a.unref)(o.NButton),{onClick:s[3]||=e=>i(`delete`),type:`error`,ghost:``},{icon:(0,a.withCtx)(()=>[(0,a.createVNode)(r.t,{name:`mdi:delete`,size:16})]),default:(0,a.withCtx)(()=>[s[19]||=(0,a.createTextVNode)(` 删除类 `,-1)]),_:1}),(0,a.createVNode)((0,a.unref)(o.NSpace),null,{default:(0,a.withCtx)(()=>[(0,a.createVNode)((0,a.unref)(o.NButton),{onClick:s[4]||=e=>i(`update:show`,!1)},{default:(0,a.withCtx)(()=>[...s[20]||=[(0,a.createTextVNode)(`取消`,-1)]]),_:1}),(0,a.createVNode)((0,a.unref)(o.NButton),{onClick:s[5]||=e=>i(`save`),type:`primary`},{default:(0,a.withCtx)(()=>[...s[21]||=[(0,a.createTextVNode)(` 保存 `,-1)]]),_:1})]),_:1})]),_:1})]),_:1})])):(0,a.createCommentVNode)(`v-if`,!0)]),_:1},8,[`show`]))}});var xe=i.t(be,[[`__scopeId`,`data-v-c37f7424`]]);const Se={public:`+`,private:`-`,protected:`#`},Ce={extends:{strokeDasharray:0,targetMarker:{name:`block`,width:10,height:8,fill:`white`,stroke:`#722ed1`,strokeWidth:2}},implement:{strokeDasharray:`8,4`,targetMarker:{name:`block`,width:10,height:8,fill:`white`,stroke:`#722ed1`,strokeWidth:2}},dependency:{strokeDasharray:`6,4`,targetMarker:{name:`classic`,size:8,fill:`#722ed1`}},composition:{strokeDasharray:0,sourceMarker:{name:`diamond`,width:12,height:8,fill:`#722ed1`,stroke:`#722ed1`}},aggregation:{strokeDasharray:0,sourceMarker:{name:`diamond`,width:12,height:8,fill:`white`,stroke:`#722ed1`,strokeWidth:2}},association:{strokeDasharray:0,targetMarker:{name:`classic`,size:8,fill:`#722ed1`}}},we=[`top`,`right`,`bottom`,`left`].reduce((e,t)=>{let n=t===`top`?{refX:.5,refY:0}:t===`right`?{refX:1,refY:.5}:t===`bottom`?{refX:.5,refY:1}:{refX:0,refY:.5};return e[`port-${t}`]={ref:`body`,...n,r:4,fill:`#31d0c6`,stroke:`#ffffff`,strokeWidth:2,magnet:!0,style:{cursor:`crosshair`,opacity:0,transition:`opacity 0.2s`}},e},{}),Te={inherit:`rect`,markup:[{tagName:`rect`,selector:`body`},{tagName:`rect`,selector:`name-rect`},{tagName:`rect`,selector:`attrs-rect`},{tagName:`rect`,selector:`methods-rect`},{tagName:`text`,selector:`name-text`},{tagName:`text`,selector:`attrs-text`},{tagName:`text`,selector:`methods-text`},{tagName:`circle`,selector:`port-top`},{tagName:`circle`,selector:`port-right`},{tagName:`circle`,selector:`port-bottom`},{tagName:`circle`,selector:`port-left`}],attrs:{rect:{width:160},body:{stroke:`#5f95ff`,strokeWidth:1,fill:`#fff`,magnet:!1,style:{cursor:`move`}},"name-rect":{fill:`#5f95ff`,stroke:`#fff`,strokeWidth:.5,magnet:!1,style:{cursor:`move`}},"attrs-rect":{fill:`#eff4ff`,stroke:`#fff`,strokeWidth:.5,magnet:!1,style:{cursor:`move`}},"methods-rect":{fill:`#eff4ff`,stroke:`#fff`,strokeWidth:.5,magnet:!1,style:{cursor:`move`}},"name-text":{ref:`name-rect`,refY:.5,refX:.5,textAnchor:`middle`,fontWeight:`bold`,fill:`#fff`,fontSize:12,pointerEvents:`none`},"attrs-text":{ref:`attrs-rect`,refY:.5,refX:5,textAnchor:`left`,fill:`black`,fontSize:10,pointerEvents:`none`},"methods-text":{ref:`methods-rect`,refY:.5,refX:5,textAnchor:`left`,fill:`black`,fontSize:10,pointerEvents:`none`},...we}},Ee={router:`manhattan`,connector:{name:`rounded`,args:{radius:8}},allowBlank:!1,allowLoop:!1,allowNode:!1,snap:!0,allowEdge:!1},De={magnetAvailable:{name:`stroke`,args:{attrs:{fill:`#31d0c6`,stroke:`#31d0c6`,opacity:1}}},magnetAdsorbed:{name:`stroke`,args:{attrs:{fill:`#5F95FF`,stroke:`#5F95FF`,opacity:1}}}},Oe={shape:`extends`,attrs:{line:{stroke:`#722ed1`,strokeWidth:2,targetMarker:{name:`block`,width:8,height:6,fill:`#722ed1`}}}},ke=[{id:`animal`,name:`<<Abstract>>
1
+ const e=require(`./chunk.cjs`),t=require(`./data2.cjs`),n=require(`./feedback.cjs`),r=require(`./C_Icon2.cjs`),i=require(`./export-helper.cjs`);let a=require(`vue`),o=require(`naive-ui`),s=require(`@antv/x6`),c=require(`html2canvas`);c=e.n(c);function l(e){return{background:e?`#18181c`:`#f5f5f5`,gridPrimary:e?`rgba(255, 255, 255, 0.08)`:`#eee`,gridSecondary:e?`rgba(255, 255, 255, 0.04)`:`#ddd`}}function u(e=!1){let t=l(e);return{background:{color:t.background},grid:{visible:!0,type:`doubleMesh`,args:[{color:t.gridPrimary,thickness:1},{color:t.gridSecondary,thickness:1,factor:4}]},mousewheel:{enabled:!0,zoomAtMousePosition:!0,modifiers:`ctrl`,minScale:.5,maxScale:2},selecting:{enabled:!0,rubberband:!0,movable:!0,showNodeSelectionBox:!0},resizing:!0,rotating:!0,snapline:!0,keyboard:!0,clipboard:!0}}function d(e){return e?{width:e.clientWidth||e.offsetWidth||800,height:e.clientHeight||e.offsetHeight||600}:{width:0,height:0}}function f(e,t){let n=0,r,i=!1,o=(0,a.shallowRef)(null),c=(0,a.ref)(!1),f=n=>{if(!i){c.value=!0;try{if(!e.value)return;o.value&&=(o.value.dispose(),null);let{width:r,height:i}=d(e.value),a=u(t?.value??!1);o.value=new s.Graph({container:e.value,width:r,height:i,...a,...n})}catch{}finally{c.value=!1}}},p=async(e={})=>{let t=++n;await(0,a.nextTick)(),t===n&&f(e)};function m(e){if(!o.value)return;let t=l(e);o.value.drawBackground({color:t.background}),o.value.drawGrid({type:`doubleMesh`,args:[{color:t.gridPrimary,thickness:1},{color:t.gridSecondary,thickness:1,factor:4}]})}t&&(0,a.watch)(t,e=>{m(e)});function h(){if(n++,clearTimeout(r),r=void 0,o.value){let e=o.value;o.value=null,e.dispose()}}function g(){o.value?.centerContent()}function _(){o.value?.zoomToFit({padding:20,maxScale:1})}function v(e=200,t=20){clearTimeout(r);let n=o.value;n&&(r=setTimeout(()=>{!i&&o.value===n&&n.zoomToFit({padding:t,maxScale:1})},e))}function y(e){o.value?.zoom(e)}function b(){if(o.value&&e.value){let{width:t,height:n}=d(e.value);o.value.resize(t,n)}}return(0,a.onUnmounted)(()=>{i=!0,h()}),{graph:o,loading:c,initGraph:p,destroyGraph:h,centerContent:g,zoomToFit:_,scheduleZoomToFit:v,zoom:y,resizeGraph:b,updateTheme:m}}function p(e,t){let n=URL.createObjectURL(e),r=document.createElement(`a`);r.href=n,r.download=t,r.style.display=`none`,document.body.appendChild(r),r.click(),document.body.removeChild(r),URL.revokeObjectURL(n)}function m(e,t=`diagram.json`){let n=JSON.stringify(e,null,2);p(new Blob([n],{type:`application/json`}),t)}async function h(e,t=`diagram.png`,n={}){let{backgroundColor:r=`#ffffff`,scale:i=2}=n,{container:a}=e;p(await _(await(0,c.default)(a,{backgroundColor:r,scale:i,useCORS:!0,logging:!1}),`image/png`),t)}function g(e,t=`diagram.svg`){let n=e.container.querySelector(`svg`);if(!n)throw Error(`SVG导出失败: 未找到图表 SVG 元素`);let r=n.cloneNode(!0);r.getAttribute(`xmlns`)||r.setAttribute(`xmlns`,`http://www.w3.org/2000/svg`),r.getAttribute(`xmlns:xlink`)||r.setAttribute(`xmlns:xlink`,`http://www.w3.org/1999/xlink`);let i=new XMLSerializer().serializeToString(r);p(new Blob([i],{type:`image/svg+xml;charset=utf-8`}),t)}function _(e,t,n=1){return new Promise((r,i)=>{e.toBlob(e=>{e?r(e):i(Error(`Canvas 转 Blob 失败`))},t,n)})}const v=[{label:`导出PNG`,key:`png`},{label:`导出SVG`,key:`svg`},{label:`导出JSON`,key:`json`}];function y(e,t=`diagram`){let r=n.t();return{exportOptions:v,handleExport:async(n,i)=>{if(e.value)try{switch(n){case`png`:await h(e.value,`${t}.png`);break;case`svg`:g(e.value,`${t}.svg`);break;case`json`:i&&m(i(),`${t}.json`);break}}catch(e){r.error(`导出${n.toUpperCase()}失败,请重试`,e)}}}}function b(e,t){e.on(`cell:change:*`,({cell:e,key:n,previous:r,options:i})=>{t()&&i.ui&&e.prop(n,r,{ui:!1})})}const x=[{label:`BIGINT`,value:`BIGINT`},{label:`INT`,value:`INT`},{label:`SMALLINT`,value:`SMALLINT`},{label:`TINYINT`,value:`TINYINT`},{label:`VARCHAR(50)`,value:`VARCHAR(50)`},{label:`VARCHAR(100)`,value:`VARCHAR(100)`},{label:`VARCHAR(255)`,value:`VARCHAR(255)`},{label:`CHAR(10)`,value:`CHAR(10)`},{label:`TEXT`,value:`TEXT`},{label:`LONGTEXT`,value:`LONGTEXT`},{label:`DATETIME`,value:`DATETIME`},{label:`TIMESTAMP`,value:`TIMESTAMP`},{label:`DATE`,value:`DATE`},{label:`TIME`,value:`TIME`},{label:`DECIMAL(10,2)`,value:`DECIMAL(10,2)`},{label:`FLOAT`,value:`FLOAT`},{label:`DOUBLE`,value:`DOUBLE`},{label:`BOOLEAN`,value:`BOOLEAN`},{label:`JSON`,value:`JSON`}],S={key:0,class:`table-editor`},C={class:`fields-container`},w={class:`field-header`},T=(0,a.defineComponent)({__name:`ERTableEditor`,props:(0,a.mergeModels)({show:{type:Boolean}},{editingTable:{},editingTableModifiers:{}}),emits:(0,a.mergeModels)([`update:show`,`save`,`add-field`,`remove-field`,`handle-primary-key`],[`update:editingTable`]),setup(e,{emit:t}){let n=(0,a.useModel)(e,`editingTable`),i=t,s=(e,t)=>i(`handle-primary-key`,e,t),c=()=>i(`add-field`),l=e=>i(`remove-field`,e);return(t,i)=>((0,a.openBlock)(),(0,a.createBlock)((0,a.unref)(o.NDrawer),{show:e.show,width:`600`,placement:`right`,"onUpdate:show":i[4]||=e=>t.$emit(`update:show`,e)},{default:(0,a.withCtx)(()=>[(0,a.createVNode)((0,a.unref)(o.NDrawerContent),{title:`编辑表: ${n.value?.name||`新表`}`,closable:``},{footer:(0,a.withCtx)(()=>[(0,a.createVNode)((0,a.unref)(o.NSpace),{justify:`end`},{default:(0,a.withCtx)(()=>[(0,a.createVNode)((0,a.unref)(o.NButton),{onClick:i[2]||=e=>t.$emit(`update:show`,!1)},{default:(0,a.withCtx)(()=>[...i[11]||=[(0,a.createTextVNode)(`取消`,-1)]]),_:1}),(0,a.createVNode)((0,a.unref)(o.NButton),{onClick:i[3]||=e=>t.$emit(`save`),type:`primary`},{default:(0,a.withCtx)(()=>[...i[12]||=[(0,a.createTextVNode)(`保存`,-1)]]),_:1})]),_:1})]),default:(0,a.withCtx)(()=>[n.value?((0,a.openBlock)(),(0,a.createElementBlock)(`div`,S,[(0,a.createVNode)((0,a.unref)(o.NForm),{model:n.value,"label-placement":`top`},{default:(0,a.withCtx)(()=>[(0,a.createVNode)((0,a.unref)(o.NFormItem),{label:`表名`},{default:(0,a.withCtx)(()=>[(0,a.createVNode)((0,a.unref)(o.NInput),{value:n.value.name,"onUpdate:value":i[0]||=e=>n.value.name=e,placeholder:`请输入表名`},null,8,[`value`])]),_:1}),(0,a.createVNode)((0,a.unref)(o.NFormItem),{label:`表注释`},{default:(0,a.withCtx)(()=>[(0,a.createVNode)((0,a.unref)(o.NInput),{value:n.value.comment,"onUpdate:value":i[1]||=e=>n.value.comment=e,placeholder:`表注释`},null,8,[`value`])]),_:1}),(0,a.createVNode)((0,a.unref)(o.NDivider),null,{default:(0,a.withCtx)(()=>[...i[5]||=[(0,a.createTextVNode)(`字段列表`,-1)]]),_:1}),(0,a.createElementVNode)(`div`,C,[((0,a.openBlock)(!0),(0,a.createElementBlock)(a.Fragment,null,(0,a.renderList)(n.value.fields,(e,t)=>((0,a.openBlock)(),(0,a.createBlock)((0,a.unref)(o.NCard),{key:t,size:`small`,class:`field-card`},{header:(0,a.withCtx)(()=>[(0,a.createElementVNode)(`div`,w,[(0,a.createElementVNode)(`span`,null,`#`+(0,a.toDisplayString)(t+1)+` `+(0,a.toDisplayString)(e.name||`新字段`),1),(0,a.createVNode)((0,a.unref)(o.NButton),{onClick:e=>l(t),size:`tiny`,type:`error`,quaternary:``,disabled:n.value.fields.length<=1},{default:(0,a.withCtx)(()=>[...i[6]||=[(0,a.createTextVNode)(` 删除 `,-1)]]),_:1},8,[`onClick`,`disabled`])])]),default:(0,a.withCtx)(()=>[(0,a.createVNode)((0,a.unref)(o.NGrid),{cols:2,"x-gap":12},{default:(0,a.withCtx)(()=>[(0,a.createVNode)((0,a.unref)(o.NGi),null,{default:(0,a.withCtx)(()=>[(0,a.createVNode)((0,a.unref)(o.NFormItem),{label:`字段名`,size:`small`},{default:(0,a.withCtx)(()=>[(0,a.createVNode)((0,a.unref)(o.NInput),{value:e.name,"onUpdate:value":t=>e.name=t,placeholder:`字段名`,size:`small`},null,8,[`value`,`onUpdate:value`])]),_:2},1024)]),_:2},1024),(0,a.createVNode)((0,a.unref)(o.NGi),null,{default:(0,a.withCtx)(()=>[(0,a.createVNode)((0,a.unref)(o.NFormItem),{label:`类型`,size:`small`},{default:(0,a.withCtx)(()=>[(0,a.createVNode)((0,a.unref)(o.NSelect),{value:e.type,"onUpdate:value":t=>e.type=t,options:(0,a.unref)(x),size:`small`,filterable:``,placeholder:`选择类型`},null,8,[`value`,`onUpdate:value`,`options`])]),_:2},1024)]),_:2},1024)]),_:2},1024),(0,a.createVNode)((0,a.unref)(o.NSpace),{style:{"margin-top":`12px`}},{default:(0,a.withCtx)(()=>[(0,a.createVNode)((0,a.unref)(o.NCheckbox),{checked:e.isPrimaryKey,"onUpdate:checked":[t=>e.isPrimaryKey=t,t=>s(e,t)]},{default:(0,a.withCtx)(()=>[...i[7]||=[(0,a.createTextVNode)(` 主键 `,-1)]]),_:1},8,[`checked`,`onUpdate:checked`]),(0,a.createVNode)((0,a.unref)(o.NCheckbox),{checked:e.isRequired,"onUpdate:checked":t=>e.isRequired=t},{default:(0,a.withCtx)(()=>[...i[8]||=[(0,a.createTextVNode)(`必填`,-1)]]),_:1},8,[`checked`,`onUpdate:checked`]),(0,a.createVNode)((0,a.unref)(o.NCheckbox),{checked:e.isForeignKey,"onUpdate:checked":t=>e.isForeignKey=t},{default:(0,a.withCtx)(()=>[...i[9]||=[(0,a.createTextVNode)(`外键`,-1)]]),_:1},8,[`checked`,`onUpdate:checked`])]),_:2},1024),(0,a.createVNode)((0,a.unref)(o.NFormItem),{label:`注释`,size:`small`,style:{"margin-top":`12px`}},{default:(0,a.withCtx)(()=>[(0,a.createVNode)((0,a.unref)(o.NInput),{value:e.comment,"onUpdate:value":t=>e.comment=t,placeholder:`字段注释`,size:`small`},null,8,[`value`,`onUpdate:value`])]),_:2},1024)]),_:2},1024))),128)),(0,a.createVNode)((0,a.unref)(o.NButton),{onClick:c,dashed:``,block:``,type:`primary`,ghost:``,style:{"margin-top":`16px`}},{icon:(0,a.withCtx)(()=>[(0,a.createVNode)(r.t,{name:`mdi:plus`,size:16})]),default:(0,a.withCtx)(()=>[i[10]||=(0,a.createTextVNode)(` 添加字段 `,-1)]),_:1})])]),_:1},8,[`model`])])):(0,a.createCommentVNode)(`v-if`,!0)]),_:1},8,[`title`])]),_:1},8,[`show`]))}});var E=i.t(T,[[`__scopeId`,`data-v-4e8f219f`]]);const D={class:`er-layout`},O={key:0,class:`toolbar`},k={key:0,style:{"margin-top":`8px`}},A=(0,a.defineComponent)({__name:`index`,props:{data:{},showToolbar:{type:Boolean,default:!0},readonly:{type:Boolean,default:!1},theme:{}},emits:[`ready`,`data-change`],setup(e,{expose:n,emit:i}){let c=e,l=i,u=(0,a.ref)(),{graph:d,initGraph:p,centerContent:m,zoomToFit:h,scheduleZoomToFit:g}=f(u,(0,a.computed)(()=>c.theme===`dark`)),{exportOptions:_,handleExport:v}=y(d,`er-diagram`),x=(0,a.ref)(!1),S=(0,a.ref)(),C=(0,a.ref)(!1),w=(e,t)=>e.length>t?e.substring(0,t-1)+`..`:e,T=e=>e.fields?.map(t=>{let n=t.isPrimaryKey?`🔑 ${t.name}`:t.isRequired?`* ${t.name}`:t.name;return{id:`${e.id}_${t.name}`,data:{tableId:e.id,fieldName:t.name},group:`list`,attrs:{portNameLabel:{text:w(n,12),title:n},portTypeLabel:{text:w(t.type,10),title:t.type},portBody:{fill:t.isPrimaryKey?`#FFF7E6`:`#EFF4FF`}}}})||[],A=e=>({id:e.id,shape:`er-rect`,x:e.position.x,y:e.position.y,width:200,height:24+(e.fields?.length||0)*24,data:t.t(e),attrs:{label:{text:w(e.name,20),refX:.5,refY:10,textAnchor:`middle`,title:e.name}},ports:T(e)}),j=()=>{d.value&&(s.Graph.registerPortLayout(`erPortPosition`,e=>e.map((e,t)=>({position:{x:0,y:(t+1)*24},angle:0})),!0),s.Graph.registerNode(`er-rect`,{inherit:`rect`,markup:[{tagName:`rect`,selector:`body`},{tagName:`text`,selector:`label`}],attrs:{rect:{strokeWidth:1,stroke:`#5F95FF`,fill:`#5F95FF`},label:{fontWeight:`bold`,fill:`#ffffff`,fontSize:12}},ports:{groups:{list:{markup:[{tagName:`rect`,selector:`portBody`},{tagName:`text`,selector:`portNameLabel`},{tagName:`text`,selector:`portTypeLabel`}],attrs:{portBody:{width:200,height:24,strokeWidth:1,stroke:`#5F95FF`,fill:`#EFF4FF`,magnet:!0},portNameLabel:{ref:`portBody`,refX:6,refY:6,fontSize:9,textAnchor:`start`,textOverflow:`ellipsis`},portTypeLabel:{ref:`portBody`,refX:120,refY:6,fontSize:9,textAnchor:`start`,fill:`#666`}},position:`erPortPosition`}}}},!0))},M=()=>{c.readonly||(C.value=!C.value,C.value||N())},N=()=>{d.value?.getEdges().forEach(e=>{e.attr(`line/stroke`,`#A2B1C3`),e.attr(`line/strokeWidth`,2)})},P=e=>{if(!d.value)return;let t=d.value.createNode(A(e));return d.value.resetCells([t,...d.value.getCells()]),t},F=()=>{let e=d.value?.getNodes()||[];for(let t=0;t<10;t++)for(let n=0;n<3;n++){let r={x:n*250+50,y:t*250+50};if(!e.some(e=>{let t=e.getPosition();return Math.abs(t.x-r.x)<250*.8&&Math.abs(t.y-r.y)<250*.8}))return r}return{x:50,y:50}},I=()=>{if(c.readonly)return;let e={id:`table_${Date.now()}`,name:`新表`,comment:``,fields:[{name:`id`,type:`BIGINT`,isPrimaryKey:!0,isRequired:!0,isForeignKey:!1,comment:`主键`},{name:`name`,type:`VARCHAR(100)`,isPrimaryKey:!1,isRequired:!0,isForeignKey:!1,comment:`名称`}],position:F()};P(e),L(e),K()},L=e=>{c.readonly||(S.value=t.t(e),x.value=!0)},R=()=>{if(c.readonly||!d.value||!S.value)return;let e=d.value.getCellById(S.value.id);e&&(e.setData(t.t(S.value)),e.prop({size:{width:200,height:24+S.value.fields.length*24},attrs:{label:{text:w(S.value.name,20),title:S.value.name}},ports:T(S.value)})),x.value=!1,K()},z=(e,t)=>{c.readonly||!t||(e.isRequired=!0,S.value?.fields.forEach(t=>{t!==e&&(t.isPrimaryKey=!1)}))},B=()=>{c.readonly||S.value?.fields.push({name:`field_${(S.value?.fields.length||0)+1}`,type:`VARCHAR(100)`,isPrimaryKey:!1,isRequired:!1,isForeignKey:!1,comment:``})},V=e=>{c.readonly||S.value&&S.value.fields.length>1&&S.value.fields.splice(e,1)},H=(e,t)=>{let n=e.getPort(t)?.data;if(n?.tableId===e.id)return n.fieldName;let r=`${e.id}_`;return t.startsWith(r)?t.slice(r.length):void 0},U=e=>e.getData()?.name||e.id,W=e=>{let n=e.getSourceNode(),r=e.getTargetNode();if(!n||!r)return;let i=H(n,e.getSourcePortId()??``),a=H(r,e.getTargetPortId()??``);if(i===void 0||a===void 0)return;let o=e.getData();return{...t.t(o),id:e.id,type:o?.type??`foreign-key`,sourceTable:n.id,sourceField:i,targetTable:r.id,targetField:a,...!o&&{name:`${U(n)} -> ${U(r)}`}}},G=()=>{if(!d.value)return{tables:[],relations:[]};let e=d.value.getNodes().map(e=>({...t.t(e.getData()),position:e.getPosition()})),n=[];return d.value.getEdges().forEach(e=>{let t=W(e);t&&n.push(t)}),{tables:e,relations:n}},K=()=>{c.readonly||l(`data-change`,G())},q=e=>{let n=d.value;if(!n)return;J=null;let r=e.tables.map(e=>n.createNode(A(e)));e.relations?.forEach(e=>{r.push(n.createEdge({id:e.id,source:{cell:e.sourceTable,port:`${e.sourceTable}_${e.sourceField}`},target:{cell:e.targetTable,port:`${e.targetTable}_${e.targetField}`},data:t.t(e),attrs:{line:{stroke:`#A2B1C3`,strokeWidth:2}}}))}),n.resetCells(r)},J=null;(0,a.watch)(d,e=>{e instanceof s.Graph&&(j(),b(e,()=>c.readonly),e.on(`node:dblclick`,({node:e})=>{c.readonly||L(e.getData())}),e.on(`node:moved`,K),e.on(`edge:connected`,K),e.on(`edge:removed`,({edge:e})=>{J===e&&(J=null),K()}),e.on(`edge:click`,({edge:e})=>{c.readonly||(C.value?e.remove():(N(),e.attr(`line/stroke`,`#ff4d4f`),e.attr(`line/strokeWidth`,3),J=e))}),e.on(`edge:dblclick`,({edge:e})=>{c.readonly||e.remove()}),e.on(`blank:click`,()=>{J=null,C.value||N()}),l(`ready`,e),(0,a.nextTick)(()=>{d.value===e&&c.data?.tables&&(q(c.data),g(300,20))}))},{immediate:!0}),(0,a.watch)(()=>c.data,e=>{d.value&&e?.tables&&q(e)},{deep:!0}),(0,a.watch)(()=>c.readonly,e=>{e&&(x.value=!1,S.value=void 0,C.value=!1,J=null,N())},{flush:`sync`});let Y=e=>{e.target?.closest(`input, textarea, [contenteditable]:not([contenteditable="false"])`)||u.value?.focus({preventScroll:!0})},X=e=>{c.readonly||document.activeElement!==u.value||e.target?.closest(`input, textarea, [contenteditable]:not([contenteditable="false"])`)||(e.key===`Delete`||e.key===`Backspace`)&&J&&(e.preventDefault(),J.remove(),J=null)};return(0,a.onMounted)(()=>{p({interacting:()=>!c.readonly,connecting:{allowBlank:!1,allowNode:!1,allowEdge:!1,validateMagnet:()=>!c.readonly,validateConnection:()=>!c.readonly,validateEdge:()=>!c.readonly}})}),n({getGraph:()=>d.value??void 0,getData:G}),(t,n)=>((0,a.openBlock)(),(0,a.createElementBlock)(`div`,D,[(0,a.createCommentVNode)(` 工具栏 `),e.showToolbar?((0,a.openBlock)(),(0,a.createElementBlock)(`div`,O,[(0,a.createVNode)((0,a.unref)(o.NSpace),null,{default:(0,a.withCtx)(()=>[(0,a.createVNode)((0,a.unref)(o.NButton),{onClick:I,disabled:e.readonly,type:`primary`,size:`small`},{icon:(0,a.withCtx)(()=>[(0,a.createVNode)(r.t,{name:`mdi:table-plus`,size:16})]),default:(0,a.withCtx)(()=>[n[3]||=(0,a.createTextVNode)(` 添加表 `,-1)]),_:1},8,[`disabled`]),(0,a.createVNode)((0,a.unref)(o.NButton),{onClick:(0,a.unref)(m),size:`small`},{icon:(0,a.withCtx)(()=>[(0,a.createVNode)(r.t,{name:`mdi:image-filter-center-focus`,size:16})]),default:(0,a.withCtx)(()=>[n[4]||=(0,a.createTextVNode)(` 居中 `,-1)]),_:1},8,[`onClick`]),(0,a.createVNode)((0,a.unref)(o.NButton),{onClick:(0,a.unref)(h),size:`small`},{icon:(0,a.withCtx)(()=>[(0,a.createVNode)(r.t,{name:`mdi:fit-to-screen`,size:16})]),default:(0,a.withCtx)(()=>[n[5]||=(0,a.createTextVNode)(` 适应 `,-1)]),_:1},8,[`onClick`]),(0,a.createVNode)((0,a.unref)(o.NButton),{onClick:M,disabled:e.readonly,type:C.value?`error`:`default`,size:`small`},{icon:(0,a.withCtx)(()=>[(0,a.createVNode)(r.t,{name:`mdi:delete`,size:16})]),default:(0,a.withCtx)(()=>[(0,a.createTextVNode)(` `+(0,a.toDisplayString)(C.value?`退出删除`:`删除连线`),1)]),_:1},8,[`disabled`,`type`]),(0,a.createVNode)((0,a.unref)(o.NDropdown),{options:(0,a.unref)(_),onSelect:n[0]||=e=>(0,a.unref)(v)(e,G)},{default:(0,a.withCtx)(()=>[(0,a.createVNode)((0,a.unref)(o.NButton),{size:`small`},{icon:(0,a.withCtx)(()=>[(0,a.createVNode)(r.t,{name:`mdi:export`,size:16})]),default:(0,a.withCtx)(()=>[n[6]||=(0,a.createTextVNode)(` 导出 `,-1)]),_:1})]),_:1},8,[`options`])]),_:1}),C.value?((0,a.openBlock)(),(0,a.createElementBlock)(`div`,k,[(0,a.createVNode)((0,a.unref)(o.NAlert),{type:`info`,size:`small`,"show-icon":!1},{default:(0,a.withCtx)(()=>[...n[7]||=[(0,a.createTextVNode)(` 删除模式:点击连接线即可删除 `,-1)]]),_:1})])):(0,a.createCommentVNode)(`v-if`,!0)])):(0,a.createCommentVNode)(`v-if`,!0),(0,a.createCommentVNode)(` 图表容器 `),(0,a.createElementVNode)(`div`,{ref_key:`containerRef`,ref:u,class:`graph-container`,tabindex:`0`,role:`region`,"aria-label":`ER 图画布`,onPointerdown:Y,onKeydown:X},null,544),(0,a.createCommentVNode)(` 表编辑器 `),(0,a.createVNode)(E,{show:x.value,"editing-table":S.value,"onUpdate:editingTable":n[1]||=e=>S.value=e,"onUpdate:show":n[2]||=e=>x.value=e,onSave:R,onAddField:B,onRemoveField:V,onHandlePrimaryKey:z},null,8,[`show`,`editing-table`])]))}});var j=i.t(A,[[`__scopeId`,`data-v-7676efd4`]]);const M={defaultColor:`#A2B1C3`,highlightColor:`#ff4d4f`,strokeWidth:2,highlightStrokeWidth:3,portPositions:[],onDataChange:()=>{},isReadonly:()=>!1};function N(e,t={}){let n={...M,...t},r=()=>{e.value?.getEdges().forEach(e=>{e.attr(`line/stroke`,n.defaultColor),e.attr(`line/strokeWidth`,n.strokeWidth)})},i=e=>{r(),e.attr(`line/stroke`,n.highlightColor),e.attr(`line/strokeWidth`,n.highlightStrokeWidth)},a=(e,t)=>{n.portPositions.forEach(n=>e.attr(`port-${n}/style/opacity`,t))};return{resetEdgeStyles:r,highlightEdge:i,togglePorts:a,bindInteractions:()=>{let t=e.value;t&&(t.on(`edge:click`,({edge:e})=>i(e)),t.on(`edge:dblclick`,({edge:e})=>{n.isReadonly()||(e.remove(),n.onDataChange())}),t.on(`blank:click`,r),t.on(`node:click`,r),t.on(`edge:connected`,()=>{n.isReadonly()||n.onDataChange()}),n.portPositions.length>0&&(t.on(`node:mouseenter`,({node:e})=>a(e,1)),t.on(`node:mouseleave`,({node:e})=>a(e,0))))}}}const P={"start-event":{name:`开始`,title:`开始事件`,iconClass:`circle start-event`},activity:{name:`任务`,title:`任务活动`,iconClass:`rect activity`},gateway:{name:`网关`,title:`排他网关`,iconClass:`diamond gateway`},"end-event":{name:`结束`,title:`结束事件`,iconClass:`circle end-event`}},F={event:`事件`,activity:`活动`,gateway:`网关`,"bpmn-edge":`连接线`},I=[`top`,`right`,`bottom`,`left`],L=(e,t=`rect`)=>e.reduce((e,n)=>{let r=t===`circle`,i=n===`top`?r?{refCx:.5,refCy:0}:{refX:.5,refY:0}:n===`right`?r?{refCx:1,refCy:.5}:{refX:1,refY:.5}:n===`bottom`?r?{refCx:.5,refCy:1}:{refX:.5,refY:1}:r?{refCx:0,refCy:.5}:{refX:0,refY:.5};return e[`port-${n}`]={ref:`body`,...i,r:4,fill:`#31d0c6`,stroke:`#ffffff`,strokeWidth:2,magnet:!0,style:{cursor:`crosshair`,opacity:0,transition:`opacity 0.2s`}},e},{}),R={event:{inherit:`circle`,attrs:{body:{strokeWidth:2,stroke:`#5F95FF`,fill:`#FFF`,magnet:!1,style:{cursor:`move`}},text:{fontSize:12,fill:`#262626`,textAnchor:`middle`,textVerticalAnchor:`middle`,pointerEvents:`none`}}},activity:{inherit:`rect`,attrs:{body:{rx:6,ry:6,stroke:`#5F95FF`,fill:`#EFF4FF`,strokeWidth:1,magnet:!1,style:{cursor:`move`}},text:{fontSize:12,fill:`#262626`,textAnchor:`middle`,textVerticalAnchor:`middle`,pointerEvents:`none`}}},gateway:{inherit:`polygon`,attrs:{body:{refPoints:`0,10 10,0 20,10 10,20`,strokeWidth:2,stroke:`#5F95FF`,fill:`#EFF4FF`,magnet:!1,style:{cursor:`move`}},text:{fontSize:20,fill:`#5F95FF`,textAnchor:`middle`,textVerticalAnchor:`middle`,pointerEvents:`none`}}}},z={inherit:`edge`,attrs:{line:{stroke:`#A2B1C3`,strokeWidth:2,targetMarker:{name:`block`,width:8,height:6,fill:`#A2B1C3`},cursor:`pointer`}}};function B(e=!1){let t={background:e?`#18181c`:`#ffffff`,gridPrimary:e?`rgba(255, 255, 255, 0.08)`:`#eee`,gridSecondary:e?`rgba(255, 255, 255, 0.04)`:`#ddd`};return{background:{color:t.background},grid:{visible:!0,type:`doubleMesh`,args:[{color:t.gridPrimary,thickness:1},{color:t.gridSecondary,thickness:1,factor:4}]},mousewheel:{enabled:!0,zoomAtMousePosition:!0,modifiers:`ctrl`,minScale:.5,maxScale:3},connecting:{router:`manhattan`,connector:{name:`rounded`,args:{radius:8}},allowBlank:!1,allowLoop:!1,allowNode:!1,snap:!0,allowEdge:!1},highlighting:{magnetAvailable:{name:`stroke`,args:{attrs:{fill:`#31d0c6`,stroke:`#31d0c6`,opacity:1}}},magnetAdsorbed:{name:`stroke`,args:{attrs:{fill:`#5F95FF`,stroke:`#5F95FF`,opacity:1}}}},selecting:{enabled:!0,rubberband:!0,showNodeSelectionBox:!0},resizing:!0,rotating:!1,snapline:!0,keyboard:!0,clipboard:!0}}B();const V={"start-event":{shape:`event`,width:50,height:50,label:`开始事件`,data:{type:`start`}},"end-event":{shape:`event`,width:50,height:50,label:`结束事件`,data:{type:`end`}},activity:{shape:`activity`,width:120,height:60,label:`新活动`,data:{description:``,assignee:``}},gateway:{shape:`gateway`,width:40,height:40,label:`+`,data:{type:`exclusive`}}},H=[{id:`start-1`,shape:`event`,x:100,y:200,width:50,height:50,label:`流程开始`,data:{type:`start`}},{id:`activity-1`,shape:`activity`,x:200,y:180,width:120,height:60,label:`用户申请`,data:{description:`用户提交申请表单`,assignee:`申请人`}},{id:`activity-2`,shape:`activity`,x:380,y:180,width:120,height:60,label:`初审`,data:{description:`部门进行初步审核`,assignee:`部门主管`}},{id:`gateway-1`,shape:`gateway`,x:550,y:200,width:40,height:40,label:`+`,data:{type:`exclusive`}},{id:`activity-3`,shape:`activity`,x:650,y:120,width:120,height:60,label:`终审`,data:{description:`高级主管最终审核`,assignee:`总监`}},{id:`activity-4`,shape:`activity`,x:650,y:260,width:120,height:60,label:`驳回处理`,data:{description:`处理驳回流程`,assignee:`专员`}},{id:`end-1`,shape:`event`,x:820,y:140,width:50,height:50,label:`审批通过`,data:{type:`end`}},{id:`end-2`,shape:`event`,x:820,y:280,width:50,height:50,label:`审批驳回`,data:{type:`end`}},{id:`edge-1`,shape:`bpmn-edge`,source:`start-1`,target:`activity-1`,x:0,y:0},{id:`edge-2`,shape:`bpmn-edge`,source:`activity-1`,target:`activity-2`,x:0,y:0},{id:`edge-3`,shape:`bpmn-edge`,source:`activity-2`,target:`gateway-1`,x:0,y:0},{id:`edge-4`,shape:`bpmn-edge`,source:`gateway-1`,target:`activity-3`,label:`通过`,x:0,y:0},{id:`edge-5`,shape:`bpmn-edge`,source:`gateway-1`,target:`activity-4`,label:`驳回`,x:0,y:0},{id:`edge-6`,shape:`bpmn-edge`,source:`activity-3`,target:`end-1`,x:0,y:0},{id:`edge-7`,shape:`bpmn-edge`,source:`activity-4`,target:`end-2`,x:0,y:0}],U={key:0,class:`property-panel`},W={class:`property-item`},G={class:`property-item`},K={key:0,class:`property-item`},q={key:1,class:`property-item`},J={class:`form-actions`},Y=(0,a.defineComponent)({__name:`BPMNPropertyEditor`,props:(0,a.mergeModels)({show:{type:Boolean}},{editingElement:{},editingElementModifiers:{}}),emits:(0,a.mergeModels)([`update:show`,`save`,`delete`],[`update:editingElement`]),setup(e,{emit:t}){let n=(0,a.useModel)(e,`editingElement`),r=t,i=(0,a.computed)(()=>F[n.value?.shape]||n.value?.shape||``);return(t,s)=>((0,a.openBlock)(),(0,a.createBlock)((0,a.unref)(o.NDrawer),{show:e.show,width:`300`,title:`属性设置`,"onUpdate:show":s[6]||=e=>r(`update:show`,e)},{default:(0,a.withCtx)(()=>[n.value?((0,a.openBlock)(),(0,a.createElementBlock)(`div`,U,[(0,a.createElementVNode)(`div`,W,[s[7]||=(0,a.createElementVNode)(`div`,{class:`property-label`},`名称`,-1),(0,a.createVNode)((0,a.unref)(o.NInput),{value:n.value.label,"onUpdate:value":s[0]||=e=>n.value.label=e,placeholder:`请输入名称`,size:`small`},null,8,[`value`])]),(0,a.createElementVNode)(`div`,G,[s[8]||=(0,a.createElementVNode)(`div`,{class:`property-label`},`类型`,-1),(0,a.createVNode)((0,a.unref)(o.NInput),{value:i.value,readonly:``,size:`small`},null,8,[`value`])]),n.value.shape===`activity`?((0,a.openBlock)(),(0,a.createElementBlock)(`div`,K,[s[9]||=(0,a.createElementVNode)(`div`,{class:`property-label`},`描述`,-1),(0,a.createVNode)((0,a.unref)(o.NInput),{value:n.value.description,"onUpdate:value":s[1]||=e=>n.value.description=e,type:`textarea`,rows:3,placeholder:`请输入活动描述`,size:`small`},null,8,[`value`])])):(0,a.createCommentVNode)(`v-if`,!0),n.value.shape===`activity`?((0,a.openBlock)(),(0,a.createElementBlock)(`div`,q,[s[10]||=(0,a.createElementVNode)(`div`,{class:`property-label`},`执行人`,-1),(0,a.createVNode)((0,a.unref)(o.NInput),{value:n.value.assignee,"onUpdate:value":s[2]||=e=>n.value.assignee=e,placeholder:`请输入执行人`,size:`small`},null,8,[`value`])])):(0,a.createCommentVNode)(`v-if`,!0),(0,a.createElementVNode)(`div`,J,[(0,a.createVNode)((0,a.unref)(o.NSpace),null,{default:(0,a.withCtx)(()=>[(0,a.createVNode)((0,a.unref)(o.NButton),{onClick:s[3]||=e=>r(`save`),type:`primary`,size:`small`},{default:(0,a.withCtx)(()=>[...s[11]||=[(0,a.createTextVNode)(` 保存 `,-1)]]),_:1}),(0,a.createVNode)((0,a.unref)(o.NButton),{onClick:s[4]||=e=>r(`update:show`,!1),size:`small`},{default:(0,a.withCtx)(()=>[...s[12]||=[(0,a.createTextVNode)(` 取消 `,-1)]]),_:1}),(0,a.createVNode)((0,a.unref)(o.NButton),{onClick:s[5]||=e=>r(`delete`),type:`error`,size:`small`},{default:(0,a.withCtx)(()=>[...s[13]||=[(0,a.createTextVNode)(` 删除 `,-1)]]),_:1})]),_:1})])])):(0,a.createCommentVNode)(`v-if`,!0)]),_:1},8,[`show`]))}});var X=i.t(Y,[[`__scopeId`,`data-v-fc8f213e`]]);const ee={class:`bpmn-layout`},te={key:0,class:`top-toolbar`},ne={class:`toolbar-section`},re={class:`toolbar-group`},ie={class:`toolbar-group`},ae={class:`toolbar-group`},oe={class:`main-content`},se={key:0,class:`left-panel`},ce={class:`element-grid`},le=[`onClick`,`title`],ue={class:`graph-wrapper`},de=(0,a.defineComponent)({__name:`index`,props:{data:{},showToolbar:{type:Boolean,default:!0},readonly:{type:Boolean,default:!1},width:{default:`100%`},height:{default:`600px`},theme:{}},emits:[`ready`,`data-change`],setup(e,{expose:n,emit:i}){let c=e,l=i,u=(0,a.ref)(),{graph:d,initGraph:p,centerContent:m,zoomToFit:h,scheduleZoomToFit:g}=f(u,(0,a.computed)(()=>c.theme===`dark`)),{exportOptions:_,handleExport:v}=y(d,`bpmn-diagram`),{bindInteractions:x}=N(d,{portPositions:I,onDataChange:()=>U(),isReadonly:()=>c.readonly}),S=(0,a.ref)(!1),C=(0,a.ref)(),w=e=>String(e.attr(`text/text`)||e.attr(`label/text`)||``),T=e=>{if(!e)return[];if(Array.isArray(e))return e;let t=[];return Object.values(e).forEach(e=>{Array.isArray(e)&&t.push(...e)}),t},E=()=>{let e=I.map(e=>({tagName:`circle`,selector:`port-${e}`})),t=[`event`,`activity`,`gateway`],n={event:`circle`,activity:`rect`,gateway:`polygon`};t.forEach(t=>{s.Graph.registerNode(t,{...R[t],markup:[{tagName:n[t],selector:`body`},{tagName:`text`,selector:`text`},...e],attrs:{...R[t].attrs,...L(I,n[t])}},!0)}),s.Graph.registerEdge(`bpmn-edge`,z,!0)},D=e=>{if(!d.value)return;let n=e.map(e=>{let{data:n,...r}=e,i=e.shape===`bpmn-edge`?d.value.createEdge(r):d.value.createNode(r);return n&&i.setData(t.t(n)),i});d.value.resetCells(n),n.length&&g(200,50)},O=e=>{if(c.readonly||!d.value)return;let n=V[e];if(!n)return;let r=d.value.options.width/2,i=d.value.options.height/2,{data:a,...o}={id:`${e}-${Date.now()}`,x:r+Math.random()*100-50,y:i+Math.random()*100-50,...n},s=d.value.createNode(o);a&&s.setData(t.t(a)),d.value.addCell(s),U()},k=()=>{c.readonly||(d.value?.clearCells(),U())},A=e=>{if(c.readonly)return;let t=e.getData()||{};C.value={id:e.id,shape:e.shape,label:w(e),description:t.description||``,assignee:t.assignee||``,x:0,y:0},S.value=!0},j=()=>{if(c.readonly||!d.value||!C.value)return;let e=d.value.getCellById(C.value.id);e&&(e.setData({description:C.value.description,assignee:C.value.assignee}),e.attr(`text/text`,C.value.label||``),e.attr(`label/text`,C.value.label||``)),S.value=!1,U()},M=()=>{c.readonly||!d.value||!C.value||(d.value.getCellById(C.value.id)?.remove(),S.value=!1,U())},F=()=>d.value?[...d.value.getNodes().map(e=>({id:e.id,shape:e.shape,x:e.getPosition().x,y:e.getPosition().y,width:e.getSize().width,height:e.getSize().height,label:w(e),data:t.t(e.getData()||{})})),...d.value.getEdges().map(e=>({id:e.id,shape:`bpmn-edge`,source:e.getSourceCellId()||``,target:e.getTargetCellId()||``,label:w(e),data:t.t(e.getData()||{}),x:0,y:0}))]:[],U=()=>{c.readonly||l(`data-change`,F())};return(0,a.watch)(d,e=>{e instanceof s.Graph&&(b(e,()=>c.readonly),x(),e.on(`node:dblclick`,({node:e})=>A(e)),e.on(`node:moved`,U),l(`ready`,e),D(c.data===void 0?H:T(c.data)))},{immediate:!0}),(0,a.watch)(()=>c.data,e=>{d.value&&D(e===void 0?H:T(e))},{deep:!0}),(0,a.watch)(()=>c.readonly,e=>{e&&(S.value=!1,C.value=void 0)},{flush:`sync`}),(0,a.onMounted)(async()=>{E();let e=B();await p({...e,interacting:()=>!c.readonly,connecting:{...e.connecting,validateMagnet:()=>!c.readonly,validateEdge:()=>!c.readonly,createEdge:()=>d.value.createEdge({shape:`bpmn-edge`}),validateConnection:({sourceView:e,targetView:t,sourceMagnet:n,targetMagnet:r})=>!c.readonly&&e!==t&&!!n&&!!r&&n.getAttribute(`magnet`)===`true`&&r.getAttribute(`magnet`)===`true`}})}),n({getGraph:()=>d.value,getData:F,loadData:D}),(t,n)=>((0,a.openBlock)(),(0,a.createElementBlock)(`div`,ee,[e.showToolbar?((0,a.openBlock)(),(0,a.createElementBlock)(`div`,te,[(0,a.createElementVNode)(`div`,ne,[(0,a.createElementVNode)(`div`,re,[(0,a.createVNode)((0,a.unref)(o.NButton),{onClick:k,disabled:e.readonly,size:`small`},{icon:(0,a.withCtx)(()=>[(0,a.createVNode)(r.t,{name:`mdi:delete-outline`,size:16})]),default:(0,a.withCtx)(()=>[n[3]||=(0,a.createTextVNode)(` 清空 `,-1)]),_:1},8,[`disabled`])]),(0,a.createElementVNode)(`div`,ie,[(0,a.createVNode)((0,a.unref)(o.NButton),{onClick:(0,a.unref)(m),size:`small`},{icon:(0,a.withCtx)(()=>[(0,a.createVNode)(r.t,{name:`mdi:image-filter-center-focus`,size:16})]),default:(0,a.withCtx)(()=>[n[4]||=(0,a.createTextVNode)(` 居中 `,-1)]),_:1},8,[`onClick`]),(0,a.createVNode)((0,a.unref)(o.NButton),{onClick:(0,a.unref)(h),size:`small`},{icon:(0,a.withCtx)(()=>[(0,a.createVNode)(r.t,{name:`mdi:fit-to-screen`,size:16})]),default:(0,a.withCtx)(()=>[n[5]||=(0,a.createTextVNode)(` 适应 `,-1)]),_:1},8,[`onClick`])]),(0,a.createElementVNode)(`div`,ae,[(0,a.createVNode)((0,a.unref)(o.NDropdown),{options:(0,a.unref)(_),onSelect:n[0]||=e=>(0,a.unref)(v)(e,F)},{default:(0,a.withCtx)(()=>[(0,a.createVNode)((0,a.unref)(o.NButton),{size:`small`},{icon:(0,a.withCtx)(()=>[(0,a.createVNode)(r.t,{name:`mdi:export`,size:16})]),default:(0,a.withCtx)(()=>[n[6]||=(0,a.createTextVNode)(` 导出 `,-1)]),_:1})]),_:1},8,[`options`])])])])):(0,a.createCommentVNode)(`v-if`,!0),(0,a.createElementVNode)(`div`,oe,[e.showToolbar&&!e.readonly?((0,a.openBlock)(),(0,a.createElementBlock)(`div`,se,[n[7]||=(0,a.createElementVNode)(`div`,{class:`panel-title`},`组件`,-1),(0,a.createElementVNode)(`div`,ce,[((0,a.openBlock)(!0),(0,a.createElementBlock)(a.Fragment,null,(0,a.renderList)((0,a.unref)(P),(e,t)=>((0,a.openBlock)(),(0,a.createElementBlock)(`div`,{key:t,class:`element-item`,onClick:e=>O(t),title:e.title},[(0,a.createElementVNode)(`div`,{class:(0,a.normalizeClass)([`element-icon`,e.iconClass])},null,2),(0,a.createElementVNode)(`span`,null,(0,a.toDisplayString)(e.name),1)],8,le))),128))])])):(0,a.createCommentVNode)(`v-if`,!0),(0,a.createElementVNode)(`div`,ue,[(0,a.createElementVNode)(`div`,{ref_key:`containerRef`,ref:u,class:`graph-container`},null,512)])]),(0,a.createVNode)(X,{show:S.value,"editing-element":C.value,"onUpdate:editingElement":n[1]||=e=>C.value=e,"onUpdate:show":n[2]||=e=>S.value=e,onSave:j,onDelete:M},null,8,[`show`,`editing-element`])]))}});var fe=i.t(de,[[`__scopeId`,`data-v-a7aebb58`]]);const pe={key:0,class:`class-editor`},me={class:`section`},he={class:`section-header`},ge={style:{"font-size":`13px`}},_e={class:`section`},ve={class:`section-header`},ye={style:{"font-size":`13px`}},be=(0,a.defineComponent)({__name:`UMLClassEditor`,props:(0,a.mergeModels)({show:{type:Boolean}},{editingClass:{},editingClassModifiers:{}}),emits:(0,a.mergeModels)([`update:show`,`save`,`delete`],[`update:editingClass`]),setup(e,{emit:t}){let n=(0,a.useModel)(e,`editingClass`),i=t;return(t,s)=>((0,a.openBlock)(),(0,a.createBlock)((0,a.unref)(o.NDrawer),{show:e.show,width:`450`,title:`编辑类`,"onUpdate:show":s[6]||=e=>i(`update:show`,e)},{default:(0,a.withCtx)(()=>[n.value?((0,a.openBlock)(),(0,a.createElementBlock)(`div`,pe,[(0,a.createVNode)((0,a.unref)(o.NForm),{"label-placement":`top`},{default:(0,a.withCtx)(()=>[(0,a.createVNode)((0,a.unref)(o.NFormItem),{label:`类名`},{default:(0,a.withCtx)(()=>[(0,a.createVNode)((0,a.unref)(o.NInput),{value:n.value.name,"onUpdate:value":s[0]||=e=>n.value.name=e,placeholder:`请输入类名`},null,8,[`value`])]),_:1}),(0,a.createVNode)((0,a.unref)(o.NDivider),{style:{margin:`20px 0`}},{default:(0,a.withCtx)(()=>[...s[7]||=[(0,a.createTextVNode)(`属性`,-1)]]),_:1}),(0,a.createElementVNode)(`div`,me,[((0,a.openBlock)(!0),(0,a.createElementBlock)(a.Fragment,null,(0,a.renderList)(n.value.attributes,(e,t)=>((0,a.openBlock)(),(0,a.createElementBlock)(`div`,{key:t,class:`item`},[(0,a.createVNode)((0,a.unref)(o.NCard),{size:`small`,style:{"margin-bottom":`12px`}},{header:(0,a.withCtx)(()=>[(0,a.createElementVNode)(`div`,he,[(0,a.createElementVNode)(`span`,ge,`#`+(0,a.toDisplayString)(t+1)+` `+(0,a.toDisplayString)(e.name||`新属性`),1),(0,a.createVNode)((0,a.unref)(o.NButton),{onClick:e=>n.value.attributes.splice(t,1),size:`tiny`,type:`error`,quaternary:``,style:{"margin-left":`auto`}},{default:(0,a.withCtx)(()=>[...s[8]||=[(0,a.createTextVNode)(` 删除 `,-1)]]),_:1},8,[`onClick`])])]),default:(0,a.withCtx)(()=>[(0,a.createVNode)((0,a.unref)(o.NSpace),{vertical:``,size:`small`},{default:(0,a.withCtx)(()=>[(0,a.createVNode)((0,a.unref)(o.NSpace),null,{default:(0,a.withCtx)(()=>[(0,a.createVNode)((0,a.unref)(o.NFormItem),{label:`属性名`,style:{margin:`0`,flex:`1`}},{default:(0,a.withCtx)(()=>[(0,a.createVNode)((0,a.unref)(o.NInput),{value:e.name,"onUpdate:value":t=>e.name=t,placeholder:`属性名`,size:`small`},null,8,[`value`,`onUpdate:value`])]),_:2},1024),(0,a.createVNode)((0,a.unref)(o.NFormItem),{label:`类型`,style:{margin:`0`,flex:`1`}},{default:(0,a.withCtx)(()=>[(0,a.createVNode)((0,a.unref)(o.NInput),{value:e.type,"onUpdate:value":t=>e.type=t,placeholder:`类型`,size:`small`},null,8,[`value`,`onUpdate:value`])]),_:2},1024)]),_:2},1024),(0,a.createVNode)((0,a.unref)(o.NFormItem),{label:`可见性`,style:{margin:`0`}},{default:(0,a.withCtx)(()=>[(0,a.createVNode)((0,a.unref)(o.NRadioGroup),{value:e.visibility,"onUpdate:value":t=>e.visibility=t,size:`small`},{default:(0,a.withCtx)(()=>[(0,a.createVNode)((0,a.unref)(o.NRadio),{value:`public`},{default:(0,a.withCtx)(()=>[...s[9]||=[(0,a.createTextVNode)(`+ public`,-1)]]),_:1}),(0,a.createVNode)((0,a.unref)(o.NRadio),{value:`private`},{default:(0,a.withCtx)(()=>[...s[10]||=[(0,a.createTextVNode)(`- private`,-1)]]),_:1}),(0,a.createVNode)((0,a.unref)(o.NRadio),{value:`protected`},{default:(0,a.withCtx)(()=>[...s[11]||=[(0,a.createTextVNode)(`# protected`,-1)]]),_:1})]),_:1},8,[`value`,`onUpdate:value`])]),_:2},1024)]),_:2},1024)]),_:2},1024)]))),128)),(0,a.createVNode)((0,a.unref)(o.NButton),{onClick:s[1]||=e=>n.value.attributes.push({name:`newAttribute`,type:`string`,visibility:`private`}),dashed:``,block:``,type:`primary`,ghost:``,size:`small`},{icon:(0,a.withCtx)(()=>[(0,a.createVNode)(r.t,{name:`mdi:plus`,size:16})]),default:(0,a.withCtx)(()=>[s[12]||=(0,a.createTextVNode)(` 添加属性 `,-1)]),_:1})]),(0,a.createVNode)((0,a.unref)(o.NDivider),{style:{margin:`20px 0`}},{default:(0,a.withCtx)(()=>[...s[13]||=[(0,a.createTextVNode)(`方法`,-1)]]),_:1}),(0,a.createElementVNode)(`div`,_e,[((0,a.openBlock)(!0),(0,a.createElementBlock)(a.Fragment,null,(0,a.renderList)(n.value.methods,(e,t)=>((0,a.openBlock)(),(0,a.createElementBlock)(`div`,{key:t,class:`item`},[(0,a.createVNode)((0,a.unref)(o.NCard),{size:`small`,style:{"margin-bottom":`12px`}},{header:(0,a.withCtx)(()=>[(0,a.createElementVNode)(`div`,ve,[(0,a.createElementVNode)(`span`,ye,`#`+(0,a.toDisplayString)(t+1)+` `+(0,a.toDisplayString)(e.name||`新方法`),1),(0,a.createVNode)((0,a.unref)(o.NButton),{onClick:e=>n.value.methods.splice(t,1),size:`tiny`,type:`error`,quaternary:``,style:{"margin-left":`auto`}},{default:(0,a.withCtx)(()=>[...s[14]||=[(0,a.createTextVNode)(` 删除 `,-1)]]),_:1},8,[`onClick`])])]),default:(0,a.withCtx)(()=>[(0,a.createVNode)((0,a.unref)(o.NSpace),{vertical:``,size:`small`},{default:(0,a.withCtx)(()=>[(0,a.createVNode)((0,a.unref)(o.NSpace),null,{default:(0,a.withCtx)(()=>[(0,a.createVNode)((0,a.unref)(o.NFormItem),{label:`方法名`,style:{margin:`0`,flex:`1`}},{default:(0,a.withCtx)(()=>[(0,a.createVNode)((0,a.unref)(o.NInput),{value:e.name,"onUpdate:value":t=>e.name=t,placeholder:`方法名`,size:`small`},null,8,[`value`,`onUpdate:value`])]),_:2},1024),(0,a.createVNode)((0,a.unref)(o.NFormItem),{label:`返回类型`,style:{margin:`0`,flex:`1`}},{default:(0,a.withCtx)(()=>[(0,a.createVNode)((0,a.unref)(o.NInput),{value:e.returnType,"onUpdate:value":t=>e.returnType=t,placeholder:`返回类型`,size:`small`},null,8,[`value`,`onUpdate:value`])]),_:2},1024)]),_:2},1024),(0,a.createVNode)((0,a.unref)(o.NFormItem),{label:`可见性`,style:{margin:`0`}},{default:(0,a.withCtx)(()=>[(0,a.createVNode)((0,a.unref)(o.NRadioGroup),{value:e.visibility,"onUpdate:value":t=>e.visibility=t,size:`small`},{default:(0,a.withCtx)(()=>[(0,a.createVNode)((0,a.unref)(o.NRadio),{value:`public`},{default:(0,a.withCtx)(()=>[...s[15]||=[(0,a.createTextVNode)(`+ public`,-1)]]),_:1}),(0,a.createVNode)((0,a.unref)(o.NRadio),{value:`private`},{default:(0,a.withCtx)(()=>[...s[16]||=[(0,a.createTextVNode)(`- private`,-1)]]),_:1}),(0,a.createVNode)((0,a.unref)(o.NRadio),{value:`protected`},{default:(0,a.withCtx)(()=>[...s[17]||=[(0,a.createTextVNode)(`# protected`,-1)]]),_:1})]),_:1},8,[`value`,`onUpdate:value`])]),_:2},1024)]),_:2},1024)]),_:2},1024)]))),128)),(0,a.createVNode)((0,a.unref)(o.NButton),{onClick:s[2]||=e=>n.value.methods.push({name:`newMethod`,returnType:`void`,visibility:`public`}),dashed:``,block:``,type:`primary`,ghost:``,size:`small`},{icon:(0,a.withCtx)(()=>[(0,a.createVNode)(r.t,{name:`mdi:plus`,size:16})]),default:(0,a.withCtx)(()=>[s[18]||=(0,a.createTextVNode)(` 添加方法 `,-1)]),_:1})]),(0,a.createVNode)((0,a.unref)(o.NDivider),{style:{margin:`20px 0`}}),(0,a.createVNode)((0,a.unref)(o.NSpace),{justify:`space-between`},{default:(0,a.withCtx)(()=>[(0,a.createVNode)((0,a.unref)(o.NButton),{onClick:s[3]||=e=>i(`delete`),type:`error`,ghost:``},{icon:(0,a.withCtx)(()=>[(0,a.createVNode)(r.t,{name:`mdi:delete`,size:16})]),default:(0,a.withCtx)(()=>[s[19]||=(0,a.createTextVNode)(` 删除类 `,-1)]),_:1}),(0,a.createVNode)((0,a.unref)(o.NSpace),null,{default:(0,a.withCtx)(()=>[(0,a.createVNode)((0,a.unref)(o.NButton),{onClick:s[4]||=e=>i(`update:show`,!1)},{default:(0,a.withCtx)(()=>[...s[20]||=[(0,a.createTextVNode)(`取消`,-1)]]),_:1}),(0,a.createVNode)((0,a.unref)(o.NButton),{onClick:s[5]||=e=>i(`save`),type:`primary`},{default:(0,a.withCtx)(()=>[...s[21]||=[(0,a.createTextVNode)(` 保存 `,-1)]]),_:1})]),_:1})]),_:1})]),_:1})])):(0,a.createCommentVNode)(`v-if`,!0)]),_:1},8,[`show`]))}});var xe=i.t(be,[[`__scopeId`,`data-v-c37f7424`]]);const Se={public:`+`,private:`-`,protected:`#`},Ce={extends:{strokeDasharray:0,targetMarker:{name:`block`,width:10,height:8,fill:`white`,stroke:`#722ed1`,strokeWidth:2}},implement:{strokeDasharray:`8,4`,targetMarker:{name:`block`,width:10,height:8,fill:`white`,stroke:`#722ed1`,strokeWidth:2}},dependency:{strokeDasharray:`6,4`,targetMarker:{name:`classic`,size:8,fill:`#722ed1`}},composition:{strokeDasharray:0,sourceMarker:{name:`diamond`,width:12,height:8,fill:`#722ed1`,stroke:`#722ed1`}},aggregation:{strokeDasharray:0,sourceMarker:{name:`diamond`,width:12,height:8,fill:`white`,stroke:`#722ed1`,strokeWidth:2}},association:{strokeDasharray:0,targetMarker:{name:`classic`,size:8,fill:`#722ed1`}}},we=[`top`,`right`,`bottom`,`left`].reduce((e,t)=>{let n=t===`top`?{refX:.5,refY:0}:t===`right`?{refX:1,refY:.5}:t===`bottom`?{refX:.5,refY:1}:{refX:0,refY:.5};return e[`port-${t}`]={ref:`body`,...n,r:4,fill:`#31d0c6`,stroke:`#ffffff`,strokeWidth:2,magnet:!0,style:{cursor:`crosshair`,opacity:0,transition:`opacity 0.2s`}},e},{}),Te={inherit:`rect`,markup:[{tagName:`rect`,selector:`body`},{tagName:`rect`,selector:`name-rect`},{tagName:`rect`,selector:`attrs-rect`},{tagName:`rect`,selector:`methods-rect`},{tagName:`text`,selector:`name-text`},{tagName:`text`,selector:`attrs-text`},{tagName:`text`,selector:`methods-text`},{tagName:`circle`,selector:`port-top`},{tagName:`circle`,selector:`port-right`},{tagName:`circle`,selector:`port-bottom`},{tagName:`circle`,selector:`port-left`}],attrs:{rect:{width:160},body:{stroke:`#5f95ff`,strokeWidth:1,fill:`#fff`,magnet:!1,style:{cursor:`move`}},"name-rect":{fill:`#5f95ff`,stroke:`#fff`,strokeWidth:.5,magnet:!1,style:{cursor:`move`}},"attrs-rect":{fill:`#eff4ff`,stroke:`#fff`,strokeWidth:.5,magnet:!1,style:{cursor:`move`}},"methods-rect":{fill:`#eff4ff`,stroke:`#fff`,strokeWidth:.5,magnet:!1,style:{cursor:`move`}},"name-text":{ref:`name-rect`,refY:.5,refX:.5,textAnchor:`middle`,fontWeight:`bold`,fill:`#fff`,fontSize:12,pointerEvents:`none`},"attrs-text":{ref:`attrs-rect`,refY:.5,refX:5,textAnchor:`left`,fill:`black`,fontSize:10,pointerEvents:`none`},"methods-text":{ref:`methods-rect`,refY:.5,refX:5,textAnchor:`left`,fill:`black`,fontSize:10,pointerEvents:`none`},...we}},Ee={router:`manhattan`,connector:{name:`rounded`,args:{radius:8}},allowBlank:!1,allowLoop:!1,allowNode:!1,snap:!0,allowEdge:!1},De={magnetAvailable:{name:`stroke`,args:{attrs:{fill:`#31d0c6`,stroke:`#31d0c6`,opacity:1}}},magnetAdsorbed:{name:`stroke`,args:{attrs:{fill:`#5F95FF`,stroke:`#5F95FF`,opacity:1}}}},Oe={shape:`extends`,attrs:{line:{stroke:`#722ed1`,strokeWidth:2,targetMarker:{name:`block`,width:8,height:6,fill:`#722ed1`}}}},ke=[{id:`animal`,name:`<<Abstract>>
2
2
  动物`,x:342,y:98,attributes:[{name:`名字`,type:`string`,visibility:`public`}],methods:[{name:`新陈代谢`,returnType:`void`,visibility:`public`},{name:`繁殖`,returnType:`void`,visibility:`public`}]},{id:`bird`,name:`鸟`,x:575,y:280,attributes:[{name:`羽毛`,type:`string`,visibility:`public`},{name:`下蛋`,type:`boolean`,visibility:`public`}],methods:[]},{id:`mammal`,name:`哺乳动物`,x:844,y:319,attributes:[{name:`翅膀`,type:`boolean`,visibility:`public`}],methods:[]},{id:`dog`,name:`狗`,x:656,y:456,attributes:[{name:`下蛋`,type:`boolean`,visibility:`public`}],methods:[]},{id:`enterprise`,name:`企鹅`,x:984,y:456,attributes:[{name:`下蛋`,type:`boolean`,visibility:`public`}],methods:[]},{id:`sparrow`,name:`麻雀`,x:531,y:608,attributes:[{name:`学飞`,type:`boolean`,visibility:`public`}],methods:[]},{id:`interface-flying`,name:`<<interface>>
3
3
  飞翔`,x:762,y:608,attributes:[{name:`下蛋`,type:`boolean`,visibility:`public`}],methods:[]},{id:`qemu`,name:`气球`,x:981,y:608,attributes:[],methods:[]}],Ae=[{id:`edge-1`,shape:`extends`,source:`bird`,target:`animal`},{id:`edge-2`,shape:`extends`,source:`mammal`,target:`animal`},{id:`edge-3`,shape:`extends`,source:`dog`,target:`mammal`},{id:`edge-4`,shape:`extends`,source:`enterprise`,target:`mammal`},{id:`edge-5`,shape:`extends`,source:`sparrow`,target:`bird`},{id:`edge-6`,shape:`implement`,source:`sparrow`,target:`interface-flying`},{id:`edge-7`,shape:`implement`,source:`enterprise`,target:`interface-flying`},{id:`edge-8`,shape:`association`,source:`bird`,target:`mammal`,label:`1:2`}],Z=e=>Se[e]||`+`,je={name:`新类`,attributes:[{name:`attribute`,type:`string`,visibility:`private`}],methods:[{name:`method`,returnType:`void`,visibility:`public`}],position:{x:100,y:100}},Me={class:`uml-layout`},Ne={key:0,class:`toolbar`},Pe=(0,a.defineComponent)({__name:`index`,props:{data:{},showToolbar:{type:Boolean,default:!0},readonly:{type:Boolean,default:!1},width:{default:`100%`},height:{default:`600px`},theme:{}},emits:[`ready`,`data-change`],setup(e,{expose:n,emit:i}){let c=e,l=i,u=(0,a.ref)(),{graph:d,initGraph:p,centerContent:m,zoomToFit:h,scheduleZoomToFit:g}=f(u,(0,a.computed)(()=>c.theme===`dark`)),{exportOptions:_,handleExport:v}=y(d,`uml-diagram`),{bindInteractions:x}=N(d,{defaultColor:`#722ed1`,portPositions:[`top`,`right`,`bottom`,`left`],onDataChange:()=>M(),isReadonly:()=>c.readonly}),S=(0,a.ref)(!1),C=(0,a.ref)(),w=()=>{s.Graph.registerNode(`class`,{...Te,propHooks(e){let{name:t,attributes:n,methods:r,...i}=e;if(!(t&&n&&r))return e;let a=0;return[{type:`name`,text:t},{type:`attrs`,text:n},{type:`methods`,text:r}].forEach(e=>{let t=Array.isArray(e.text)?e.text.length*12+16:32;s.ObjectExt.setByPath(i,`attrs/${e.type}-text/text`,Array.isArray(e.text)?e.text.join(`
4
4
  `):e.text),s.ObjectExt.setByPath(i,`attrs/${e.type}-rect/height`,t),s.ObjectExt.setByPath(i,`attrs/${e.type}-rect/transform`,`translate(0,${a})`),a+=t}),i.size={width:160,height:a},i}},!0),Object.entries(Ce).forEach(([e,t])=>{s.Graph.registerEdge(e,{inherit:`edge`,attrs:{line:{strokeWidth:2,stroke:`#722ed1`,...t}}},!0)})},T=e=>{if(!d.value)return;let n=[`extends`,`composition`,`implement`,`dependency`,`aggregation`,`association`],r=[];e.forEach(e=>{if(n.includes(e.shape)){let n=d.value.createEdge(e);e.data&&n.setData(t.t(e.data)),r.push(n)}else{let{data:n,...i}=e,a=d.value.createNode(i);n&&a.setData(t.t(n)),r.push(a)}}),d.value.resetCells(r),r.length&&g(200,10)},E=e=>({name:e.name,attributes:e.attributes.map(e=>`${Z(e.visibility)} ${e.name}: ${e.type}`),methods:e.methods.map(e=>`${Z(e.visibility)} ${e.name}(): ${e.returnType}`)}),D=()=>{if(c.readonly||!d.value)return;let e={id:`class_${Date.now()}`,...t.t(je)},n={id:e.id,shape:`class`,x:e.position.x,y:e.position.y,...E(e),data:e};d.value.addCell(d.value.createNode(n)),M()},O=e=>{c.readonly||(C.value=t.t(e),S.value=!0)},k=()=>{if(c.readonly||!d.value||!C.value)return;let e=d.value.getCellById(C.value.id);e&&(e.setData(t.t(C.value)),e.prop(E(C.value))),S.value=!1,M()},A=()=>{c.readonly||!d.value||!C.value||(d.value.getCellById(C.value.id)?.remove(),S.value=!1,M())},j=()=>({classes:d.value?.getNodes().map(e=>({...t.t(e.getData()),position:e.getPosition()}))||[],relations:d.value?.getEdges().map(e=>{let t=e.getData();return{id:e.id,type:e.shape===`extends`?`inheritance`:e.shape===`implement`?`implementation`:e.shape,source:e.getSourceCellId()||``,target:e.getTargetCellId()||``,name:t?.name,multiplicity:t?.multiplicity}})||[]}),M=()=>{c.readonly||l(`data-change`,j())},P=e=>{T([...e.classes.map(e=>({id:e.id,shape:`class`,x:e.position?.x??50,y:e.position?.y??50,...E(e),data:e})),...e.relations.map(e=>({id:e.id,shape:e.type===`inheritance`?`extends`:e.type===`implementation`?`implement`:e.type,source:e.source,target:e.target,data:{name:e.name,multiplicity:e.multiplicity}}))])};return(0,a.watch)(d,e=>{if(!(e instanceof s.Graph))return;w(),b(e,()=>c.readonly),x(),e.on(`node:dblclick`,({node:e})=>{!c.readonly&&e.getData()&&O(e.getData())}),e.on(`node:moved`,M),l(`ready`,e);let t=[...ke.map(e=>({id:e.id,shape:`class`,x:e.x,y:e.y,...E(e),data:{id:e.id,name:e.name,attributes:e.attributes,methods:e.methods,position:{x:e.x,y:e.y}}})),...Ae];c.data?P(c.data):T(t)},{immediate:!0}),(0,a.watch)(()=>c.data,e=>{d.value&&e&&P(e)},{deep:!0}),(0,a.watch)(()=>c.readonly,e=>{e&&(S.value=!1,C.value=void 0)},{flush:`sync`}),(0,a.onMounted)(()=>{p({interacting:()=>!c.readonly,connecting:{...Ee,validateMagnet:()=>!c.readonly,validateEdge:()=>!c.readonly,createEdge:()=>d.value.createEdge(Oe),validateConnection:({sourceView:e,targetView:t,sourceMagnet:n,targetMagnet:r})=>!c.readonly&&e!==t&&!!n&&!!r&&n.getAttribute(`magnet`)===`true`&&r.getAttribute(`magnet`)===`true`},highlighting:De})}),n({getGraph:()=>d.value,getData:j,addClass:D,centerContent:m,zoomToFit:h}),(t,n)=>((0,a.openBlock)(),(0,a.createElementBlock)(`div`,Me,[e.showToolbar?((0,a.openBlock)(),(0,a.createElementBlock)(`div`,Ne,[(0,a.createVNode)((0,a.unref)(o.NSpace),null,{default:(0,a.withCtx)(()=>[(0,a.createVNode)((0,a.unref)(o.NButton),{onClick:D,disabled:e.readonly,type:`primary`,size:`small`},{icon:(0,a.withCtx)(()=>[(0,a.createVNode)(r.t,{name:`mdi:plus-box`,size:16})]),default:(0,a.withCtx)(()=>[n[3]||=(0,a.createTextVNode)(` 添加类 `,-1)]),_:1},8,[`disabled`]),(0,a.createVNode)((0,a.unref)(o.NButton),{onClick:(0,a.unref)(m),size:`small`},{icon:(0,a.withCtx)(()=>[(0,a.createVNode)(r.t,{name:`mdi:image-filter-center-focus`,size:16})]),default:(0,a.withCtx)(()=>[n[4]||=(0,a.createTextVNode)(` 居中 `,-1)]),_:1},8,[`onClick`]),(0,a.createVNode)((0,a.unref)(o.NButton),{onClick:(0,a.unref)(h),size:`small`},{icon:(0,a.withCtx)(()=>[(0,a.createVNode)(r.t,{name:`mdi:fit-to-screen`,size:16})]),default:(0,a.withCtx)(()=>[n[5]||=(0,a.createTextVNode)(` 适应 `,-1)]),_:1},8,[`onClick`]),(0,a.createVNode)((0,a.unref)(o.NDropdown),{options:(0,a.unref)(_),onSelect:n[0]||=e=>(0,a.unref)(v)(e,j)},{default:(0,a.withCtx)(()=>[(0,a.createVNode)((0,a.unref)(o.NButton),{size:`small`},{icon:(0,a.withCtx)(()=>[(0,a.createVNode)(r.t,{name:`mdi:export`,size:16})]),default:(0,a.withCtx)(()=>[n[6]||=(0,a.createTextVNode)(` 导出 `,-1)]),_:1})]),_:1},8,[`options`])]),_:1})])):(0,a.createCommentVNode)(`v-if`,!0),(0,a.createElementVNode)(`div`,{ref_key:`containerRef`,ref:u,class:`graph-container`,style:(0,a.normalizeStyle)({width:c.width,height:c.height})},null,4),(0,a.createVNode)(xe,{show:S.value,"editing-class":C.value,"onUpdate:editingClass":n[1]||=e=>C.value=e,"onUpdate:show":n[2]||=e=>S.value=e,onSave:k,onDelete:A},null,8,[`show`,`editing-class`])]))}});var Fe=i.t(Pe,[[`__scopeId`,`data-v-90e76429`]]);const Ie=e=>e===`task`?`activity`:e===`gateway`?`gateway`:`event`,Q=e=>{let t=e.data?.type;return t===`start`||t===`end`||t===`task`||t===`gateway`||t===`event`?t:e.shape===`activity`?`task`:e.shape===`gateway`?`gateway`:`event`},Le=e=>[...e.nodes.map(e=>{let t=Ie(e.type);return{id:e.id,shape:t,x:e.position.x,y:e.position.y,width:t===`activity`?120:t===`gateway`?40:50,height:t===`activity`?60:t===`gateway`?40:50,label:e.name,data:{...e.properties,type:e.type}}}),...e.flows.map(e=>({id:e.id,shape:`bpmn-edge`,source:e.source,target:e.target,label:e.name,x:0,y:0,data:e.condition?{condition:e.condition}:void 0}))],$=e=>({nodes:e.filter(e=>e.shape!==`bpmn-edge`).map(e=>{let t={...e.data};return delete t.type,{id:e.id,type:Q(e),name:e.label??``,position:{x:e.x,y:e.y},properties:t}}),flows:e.filter(e=>e.shape===`bpmn-edge`).map(e=>({id:e.id,source:e.source??``,target:e.target??``,name:e.label,condition:typeof e.data?.condition==`string`?e.data.condition:void 0}))}),Re={class:`c-antv-container`},ze=(0,a.defineComponent)({name:`C_AntV`,__name:`index`,props:{type:{},data:{},width:{default:`100%`},height:{default:`600px`},readonly:{type:Boolean,default:!1},showToolbar:{type:Boolean,default:!0},theme:{default:`light`}},emits:[`ready`,`data-change`],setup(e,{expose:t,emit:n}){let r=e,i=n,o=(0,a.ref)(),s={er:j,bpmn:fe,uml:Fe},c=(0,a.computed)(()=>s[r.type]),l=(0,a.computed)(()=>{let e={width:r.width,height:r.height,readonly:r.readonly,showToolbar:r.showToolbar,theme:r.theme},t=r.type===`bpmn`&&r.data&&`nodes`in r.data?Le(r.data):r.data;return{...e,data:t}}),u=e=>{i(`ready`,e)},d=e=>{i(`data-change`,r.type===`bpmn`&&Array.isArray(e)?$(e):e)};return t({getGraph:()=>o.value?.getGraph()??void 0,getData:()=>{let e=o.value?.getData();return r.type===`bpmn`&&Array.isArray(e)?$(e):Array.isArray(e)?void 0:e}}),(e,t)=>((0,a.openBlock)(),(0,a.createElementBlock)(`div`,Re,[((0,a.openBlock)(),(0,a.createBlock)((0,a.resolveDynamicComponent)(c.value),(0,a.mergeProps)(l.value,{onReady:u,onDataChange:d,ref_key:`layoutRef`,ref:o}),null,16))]))}});var Be=i.t(ze,[[`__scopeId`,`data-v-f70bf9bd`]]);Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return f}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return N}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return y}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return Be}});
package/dist/C_AntV2.js CHANGED
@@ -1,4 +1,4 @@
1
- import{t as e}from"./data2.js";import{t}from"./feedback.js";import{t as n}from"./C_Icon2.js";import{t as r}from"./export-helper.js";import{Fragment as i,computed as a,createBlock as o,createCommentVNode as s,createElementBlock as c,createElementVNode as l,createTextVNode as u,createVNode as d,defineComponent as f,mergeModels as p,mergeProps as m,nextTick as h,normalizeClass as g,normalizeStyle as _,onMounted as ee,onUnmounted as v,openBlock as y,ref as b,renderList as x,resolveDynamicComponent as S,shallowRef as C,toDisplayString as w,unref as T,useModel as E,watch as D,withCtx as O}from"vue";import{NAlert as k,NButton as A,NCard as j,NCheckbox as M,NDivider as N,NDrawer as P,NDrawerContent as F,NDropdown as te,NForm as I,NFormItem as L,NGi as R,NGrid as z,NInput as B,NRadio as V,NRadioGroup as H,NSelect as U,NSpace as W}from"naive-ui";import{Graph as G,ObjectExt as K}from"@antv/x6";import ne from"html2canvas";function re(e){return{background:e?`#18181c`:`#f5f5f5`,gridPrimary:e?`rgba(255, 255, 255, 0.08)`:`#eee`,gridSecondary:e?`rgba(255, 255, 255, 0.04)`:`#ddd`}}function ie(e=!1){let t=re(e);return{background:{color:t.background},grid:{visible:!0,type:`doubleMesh`,args:[{color:t.gridPrimary,thickness:1},{color:t.gridSecondary,thickness:1,factor:4}]},mousewheel:{enabled:!0,zoomAtMousePosition:!0,modifiers:`ctrl`,minScale:.5,maxScale:2},selecting:{enabled:!0,rubberband:!0,movable:!0,showNodeSelectionBox:!0},resizing:!0,rotating:!0,snapline:!0,keyboard:!0,clipboard:!0}}function q(e){return e?{width:e.clientWidth||e.offsetWidth||800,height:e.clientHeight||e.offsetHeight||600}:{width:0,height:0}}function J(e,t){let n=0,r,i,a=!1,o=C(null),s=b(!1),c=i=>{if(!a){s.value=!0;try{if(!e.value)return;o.value&&=(o.value.dispose(),null);let{width:s,height:c}=q(e.value);if(s===0||c===0){n++,n<10&&(clearTimeout(r),r=setTimeout(()=>{a||l(i)},100));return}n=0;let u=ie(t?.value??!1);o.value=new G({container:e.value,width:s,height:c,...u,...i})}catch{}finally{s.value=!1}}},l=async(e={})=>{clearTimeout(r),r=void 0,await h(),c(e)};function u(e){if(!o.value)return;let t=re(e);o.value.drawBackground({color:t.background}),o.value.drawGrid({type:`doubleMesh`,args:[{color:t.gridPrimary,thickness:1},{color:t.gridSecondary,thickness:1,factor:4}]})}t&&D(t,e=>{u(e)});function d(){if(clearTimeout(r),clearTimeout(i),r=void 0,i=void 0,o.value){let e=o.value;o.value=null,e.dispose()}}function f(){o.value?.centerContent()}function p(){o.value?.zoomToFit({padding:20,maxScale:1})}function m(e=200,t=20){clearTimeout(i);let n=o.value;n&&(i=setTimeout(()=>{!a&&o.value===n&&n.zoomToFit({padding:t,maxScale:1})},e))}function g(e){o.value?.zoom(e)}function _(){if(o.value&&e.value){let{width:t,height:n}=q(e.value);o.value.resize(t,n)}}return v(()=>{a=!0,d()}),{graph:o,loading:s,initGraph:l,destroyGraph:d,centerContent:f,zoomToFit:p,scheduleZoomToFit:m,zoom:g,resizeGraph:_,updateTheme:u}}function Y(e,t){let n=URL.createObjectURL(e),r=document.createElement(`a`);r.href=n,r.download=t,r.style.display=`none`,document.body.appendChild(r),r.click(),document.body.removeChild(r),URL.revokeObjectURL(n)}function X(e,t=`diagram.json`){let n=JSON.stringify(e,null,2);Y(new Blob([n],{type:`application/json`}),t)}async function Z(e,t=`diagram.png`,n={}){let{backgroundColor:r=`#ffffff`,scale:i=2}=n,{container:a}=e;Y(await Q(await ne(a,{backgroundColor:r,scale:i,useCORS:!0,logging:!1}),`image/png`),t)}function ae(e,t=`diagram.svg`){let n=e.container.querySelector(`svg`);if(!n)throw Error(`SVG导出失败: 未找到图表 SVG 元素`);let r=n.cloneNode(!0);r.getAttribute(`xmlns`)||r.setAttribute(`xmlns`,`http://www.w3.org/2000/svg`),r.getAttribute(`xmlns:xlink`)||r.setAttribute(`xmlns:xlink`,`http://www.w3.org/1999/xlink`);let i=new XMLSerializer().serializeToString(r);Y(new Blob([i],{type:`image/svg+xml;charset=utf-8`}),t)}function Q(e,t,n=1){return new Promise((r,i)=>{e.toBlob(e=>{e?r(e):i(Error(`Canvas 转 Blob 失败`))},t,n)})}const oe=[{label:`导出PNG`,key:`png`},{label:`导出SVG`,key:`svg`},{label:`导出JSON`,key:`json`}];function $(e,n=`diagram`){let r=t();return{exportOptions:oe,handleExport:async(t,i)=>{if(e.value)try{switch(t){case`png`:await Z(e.value,`${n}.png`);break;case`svg`:ae(e.value,`${n}.svg`);break;case`json`:i&&X(i(),`${n}.json`);break}}catch(e){r.error(`导出${t.toUpperCase()}失败,请重试`,e)}}}}function se(e,t){e.on(`cell:change:*`,({cell:e,key:n,previous:r,options:i})=>{t()&&i.ui&&e.prop(n,r,{ui:!1})})}const ce=[{label:`BIGINT`,value:`BIGINT`},{label:`INT`,value:`INT`},{label:`SMALLINT`,value:`SMALLINT`},{label:`TINYINT`,value:`TINYINT`},{label:`VARCHAR(50)`,value:`VARCHAR(50)`},{label:`VARCHAR(100)`,value:`VARCHAR(100)`},{label:`VARCHAR(255)`,value:`VARCHAR(255)`},{label:`CHAR(10)`,value:`CHAR(10)`},{label:`TEXT`,value:`TEXT`},{label:`LONGTEXT`,value:`LONGTEXT`},{label:`DATETIME`,value:`DATETIME`},{label:`TIMESTAMP`,value:`TIMESTAMP`},{label:`DATE`,value:`DATE`},{label:`TIME`,value:`TIME`},{label:`DECIMAL(10,2)`,value:`DECIMAL(10,2)`},{label:`FLOAT`,value:`FLOAT`},{label:`DOUBLE`,value:`DOUBLE`},{label:`BOOLEAN`,value:`BOOLEAN`},{label:`JSON`,value:`JSON`}],le={key:0,class:`table-editor`},ue={class:`fields-container`},de={class:`field-header`};var fe=r(f({__name:`ERTableEditor`,props:p({show:{type:Boolean}},{editingTable:{},editingTableModifiers:{}}),emits:p([`update:show`,`save`,`add-field`,`remove-field`,`handle-primary-key`],[`update:editingTable`]),setup(e,{emit:t}){let r=E(e,`editingTable`),a=t,f=(e,t)=>a(`handle-primary-key`,e,t),p=()=>a(`add-field`),m=e=>a(`remove-field`,e);return(t,a)=>(y(),o(T(P),{show:e.show,width:`600`,placement:`right`,"onUpdate:show":a[4]||=e=>t.$emit(`update:show`,e)},{default:O(()=>[d(T(F),{title:`编辑表: ${r.value?.name||`新表`}`,closable:``},{footer:O(()=>[d(T(W),{justify:`end`},{default:O(()=>[d(T(A),{onClick:a[2]||=e=>t.$emit(`update:show`,!1)},{default:O(()=>[...a[11]||=[u(`取消`,-1)]]),_:1}),d(T(A),{onClick:a[3]||=e=>t.$emit(`save`),type:`primary`},{default:O(()=>[...a[12]||=[u(`保存`,-1)]]),_:1})]),_:1})]),default:O(()=>[r.value?(y(),c(`div`,le,[d(T(I),{model:r.value,"label-placement":`top`},{default:O(()=>[d(T(L),{label:`表名`},{default:O(()=>[d(T(B),{value:r.value.name,"onUpdate:value":a[0]||=e=>r.value.name=e,placeholder:`请输入表名`},null,8,[`value`])]),_:1}),d(T(L),{label:`表注释`},{default:O(()=>[d(T(B),{value:r.value.comment,"onUpdate:value":a[1]||=e=>r.value.comment=e,placeholder:`表注释`},null,8,[`value`])]),_:1}),d(T(N),null,{default:O(()=>[...a[5]||=[u(`字段列表`,-1)]]),_:1}),l(`div`,ue,[(y(!0),c(i,null,x(r.value.fields,(e,t)=>(y(),o(T(j),{key:t,size:`small`,class:`field-card`},{header:O(()=>[l(`div`,de,[l(`span`,null,`#`+w(t+1)+` `+w(e.name||`新字段`),1),d(T(A),{onClick:e=>m(t),size:`tiny`,type:`error`,quaternary:``,disabled:r.value.fields.length<=1},{default:O(()=>[...a[6]||=[u(` 删除 `,-1)]]),_:1},8,[`onClick`,`disabled`])])]),default:O(()=>[d(T(z),{cols:2,"x-gap":12},{default:O(()=>[d(T(R),null,{default:O(()=>[d(T(L),{label:`字段名`,size:`small`},{default:O(()=>[d(T(B),{value:e.name,"onUpdate:value":t=>e.name=t,placeholder:`字段名`,size:`small`},null,8,[`value`,`onUpdate:value`])]),_:2},1024)]),_:2},1024),d(T(R),null,{default:O(()=>[d(T(L),{label:`类型`,size:`small`},{default:O(()=>[d(T(U),{value:e.type,"onUpdate:value":t=>e.type=t,options:T(ce),size:`small`,filterable:``,placeholder:`选择类型`},null,8,[`value`,`onUpdate:value`,`options`])]),_:2},1024)]),_:2},1024)]),_:2},1024),d(T(W),{style:{"margin-top":`12px`}},{default:O(()=>[d(T(M),{checked:e.isPrimaryKey,"onUpdate:checked":[t=>e.isPrimaryKey=t,t=>f(e,t)]},{default:O(()=>[...a[7]||=[u(` 主键 `,-1)]]),_:1},8,[`checked`,`onUpdate:checked`]),d(T(M),{checked:e.isRequired,"onUpdate:checked":t=>e.isRequired=t},{default:O(()=>[...a[8]||=[u(`必填`,-1)]]),_:1},8,[`checked`,`onUpdate:checked`]),d(T(M),{checked:e.isForeignKey,"onUpdate:checked":t=>e.isForeignKey=t},{default:O(()=>[...a[9]||=[u(`外键`,-1)]]),_:1},8,[`checked`,`onUpdate:checked`])]),_:2},1024),d(T(L),{label:`注释`,size:`small`,style:{"margin-top":`12px`}},{default:O(()=>[d(T(B),{value:e.comment,"onUpdate:value":t=>e.comment=t,placeholder:`字段注释`,size:`small`},null,8,[`value`,`onUpdate:value`])]),_:2},1024)]),_:2},1024))),128)),d(T(A),{onClick:p,dashed:``,block:``,type:`primary`,ghost:``,style:{"margin-top":`16px`}},{icon:O(()=>[d(n,{name:`mdi:plus`,size:16})]),default:O(()=>[a[10]||=u(` 添加字段 `,-1)]),_:1})])]),_:1},8,[`model`])])):s(`v-if`,!0)]),_:1},8,[`title`])]),_:1},8,[`show`]))}}),[[`__scopeId`,`data-v-4e8f219f`]]);const pe={class:`er-layout`},me={key:0,class:`toolbar`},he={key:0,style:{"margin-top":`8px`}};var ge=r(f({__name:`index`,props:{data:{},showToolbar:{type:Boolean,default:!0},readonly:{type:Boolean,default:!1},theme:{}},emits:[`ready`,`data-change`],setup(t,{expose:r,emit:i}){let o=t,f=i,p=b(),{graph:m,initGraph:g,centerContent:_,zoomToFit:v,scheduleZoomToFit:x}=J(p,a(()=>o.theme===`dark`)),{exportOptions:S,handleExport:C}=$(m,`er-diagram`),E=b(!1),j=b(),M=b(!1),N=(e,t)=>e.length>t?e.substring(0,t-1)+`..`:e,P=e=>e.fields?.map(t=>{let n=t.isPrimaryKey?`🔑 ${t.name}`:t.isRequired?`* ${t.name}`:t.name;return{id:`${e.id}_${t.name}`,data:{tableId:e.id,fieldName:t.name},group:`list`,attrs:{portNameLabel:{text:N(n,12),title:n},portTypeLabel:{text:N(t.type,10),title:t.type},portBody:{fill:t.isPrimaryKey?`#FFF7E6`:`#EFF4FF`}}}})||[],F=t=>({id:t.id,shape:`er-rect`,x:t.position.x,y:t.position.y,width:200,height:24+(t.fields?.length||0)*24,data:e(t),attrs:{label:{text:N(t.name,20),refX:.5,refY:10,textAnchor:`middle`,title:t.name}},ports:P(t)}),I=()=>{m.value&&(G.registerPortLayout(`erPortPosition`,e=>e.map((e,t)=>({position:{x:0,y:(t+1)*24},angle:0})),!0),G.registerNode(`er-rect`,{inherit:`rect`,markup:[{tagName:`rect`,selector:`body`},{tagName:`text`,selector:`label`}],attrs:{rect:{strokeWidth:1,stroke:`#5F95FF`,fill:`#5F95FF`},label:{fontWeight:`bold`,fill:`#ffffff`,fontSize:12}},ports:{groups:{list:{markup:[{tagName:`rect`,selector:`portBody`},{tagName:`text`,selector:`portNameLabel`},{tagName:`text`,selector:`portTypeLabel`}],attrs:{portBody:{width:200,height:24,strokeWidth:1,stroke:`#5F95FF`,fill:`#EFF4FF`,magnet:!0},portNameLabel:{ref:`portBody`,refX:6,refY:6,fontSize:9,textAnchor:`start`,textOverflow:`ellipsis`},portTypeLabel:{ref:`portBody`,refX:120,refY:6,fontSize:9,textAnchor:`start`,fill:`#666`}},position:`erPortPosition`}}}},!0))},L=()=>{o.readonly||(M.value=!M.value,M.value||R())},R=()=>{m.value?.getEdges().forEach(e=>{e.attr(`line/stroke`,`#A2B1C3`),e.attr(`line/strokeWidth`,2)})},z=e=>{if(!m.value)return;let t=m.value.createNode(F(e));return m.value.resetCells([t,...m.value.getCells()]),t},B=()=>{let e=m.value?.getNodes()||[];for(let t=0;t<10;t++)for(let n=0;n<3;n++){let r={x:n*250+50,y:t*250+50};if(!e.some(e=>{let t=e.getPosition();return Math.abs(t.x-r.x)<250*.8&&Math.abs(t.y-r.y)<250*.8}))return r}return{x:50,y:50}},V=()=>{if(o.readonly)return;let e={id:`table_${Date.now()}`,name:`新表`,comment:``,fields:[{name:`id`,type:`BIGINT`,isPrimaryKey:!0,isRequired:!0,isForeignKey:!1,comment:`主键`},{name:`name`,type:`VARCHAR(100)`,isPrimaryKey:!1,isRequired:!0,isForeignKey:!1,comment:`名称`}],position:B()};z(e),H(e),Z()},H=t=>{o.readonly||(j.value=e(t),E.value=!0)},U=()=>{if(o.readonly||!m.value||!j.value)return;let t=m.value.getCellById(j.value.id);t&&(t.setData(e(j.value)),t.prop({size:{width:200,height:24+j.value.fields.length*24},attrs:{label:{text:N(j.value.name,20),title:j.value.name}},ports:P(j.value)})),E.value=!1,Z()},K=(e,t)=>{o.readonly||!t||(e.isRequired=!0,j.value?.fields.forEach(t=>{t!==e&&(t.isPrimaryKey=!1)}))},ne=()=>{o.readonly||j.value?.fields.push({name:`field_${(j.value?.fields.length||0)+1}`,type:`VARCHAR(100)`,isPrimaryKey:!1,isRequired:!1,isForeignKey:!1,comment:``})},re=e=>{o.readonly||j.value&&j.value.fields.length>1&&j.value.fields.splice(e,1)},ie=(e,t)=>{let n=e.getPort(t)?.data;if(n?.tableId===e.id)return n.fieldName;let r=`${e.id}_`;return t.startsWith(r)?t.slice(r.length):void 0},q=e=>e.getData()?.name||e.id,Y=t=>{let n=t.getSourceNode(),r=t.getTargetNode();if(!n||!r)return;let i=ie(n,t.getSourcePortId()??``),a=ie(r,t.getTargetPortId()??``);if(i===void 0||a===void 0)return;let o=t.getData();return{...e(o),id:t.id,type:o?.type??`foreign-key`,sourceTable:n.id,sourceField:i,targetTable:r.id,targetField:a,...!o&&{name:`${q(n)} -> ${q(r)}`}}},X=()=>{if(!m.value)return{tables:[],relations:[]};let t=m.value.getNodes().map(t=>({...e(t.getData()),position:t.getPosition()})),n=[];return m.value.getEdges().forEach(e=>{let t=Y(e);t&&n.push(t)}),{tables:t,relations:n}},Z=()=>{o.readonly||f(`data-change`,X())},ae=t=>{let n=m.value;if(!n)return;Q=null;let r=t.tables.map(e=>n.createNode(F(e)));t.relations?.forEach(t=>{r.push(n.createEdge({id:t.id,source:{cell:t.sourceTable,port:`${t.sourceTable}_${t.sourceField}`},target:{cell:t.targetTable,port:`${t.targetTable}_${t.targetField}`},data:e(t),attrs:{line:{stroke:`#A2B1C3`,strokeWidth:2}}}))}),n.resetCells(r)},Q=null;D(m,e=>{e instanceof G&&(I(),se(e,()=>o.readonly),e.on(`node:dblclick`,({node:e})=>{o.readonly||H(e.getData())}),e.on(`node:moved`,Z),e.on(`edge:connected`,Z),e.on(`edge:removed`,({edge:e})=>{Q===e&&(Q=null),Z()}),e.on(`edge:click`,({edge:e})=>{o.readonly||(M.value?e.remove():(R(),e.attr(`line/stroke`,`#ff4d4f`),e.attr(`line/strokeWidth`,3),Q=e))}),e.on(`edge:dblclick`,({edge:e})=>{o.readonly||e.remove()}),e.on(`blank:click`,()=>{Q=null,M.value||R()}),f(`ready`,e),h(()=>{m.value===e&&o.data?.tables&&(ae(o.data),x(300,20))}))},{immediate:!0}),D(()=>o.data,e=>{m.value&&e?.tables&&ae(e)},{deep:!0}),D(()=>o.readonly,e=>{e&&(E.value=!1,j.value=void 0,M.value=!1,Q=null,R())},{flush:`sync`});let oe=e=>{e.target?.closest(`input, textarea, [contenteditable]:not([contenteditable="false"])`)||p.value?.focus({preventScroll:!0})},ce=e=>{o.readonly||document.activeElement!==p.value||e.target?.closest(`input, textarea, [contenteditable]:not([contenteditable="false"])`)||(e.key===`Delete`||e.key===`Backspace`)&&Q&&(e.preventDefault(),Q.remove(),Q=null)};return ee(()=>{g({interacting:()=>!o.readonly,connecting:{allowBlank:!1,allowNode:!1,allowEdge:!1,validateMagnet:()=>!o.readonly,validateConnection:()=>!o.readonly,validateEdge:()=>!o.readonly}})}),r({getGraph:()=>m.value??void 0,getData:X}),(e,r)=>(y(),c(`div`,pe,[s(` 工具栏 `),t.showToolbar?(y(),c(`div`,me,[d(T(W),null,{default:O(()=>[d(T(A),{onClick:V,disabled:t.readonly,type:`primary`,size:`small`},{icon:O(()=>[d(n,{name:`mdi:table-plus`,size:16})]),default:O(()=>[r[3]||=u(` 添加表 `,-1)]),_:1},8,[`disabled`]),d(T(A),{onClick:T(_),size:`small`},{icon:O(()=>[d(n,{name:`mdi:image-filter-center-focus`,size:16})]),default:O(()=>[r[4]||=u(` 居中 `,-1)]),_:1},8,[`onClick`]),d(T(A),{onClick:T(v),size:`small`},{icon:O(()=>[d(n,{name:`mdi:fit-to-screen`,size:16})]),default:O(()=>[r[5]||=u(` 适应 `,-1)]),_:1},8,[`onClick`]),d(T(A),{onClick:L,disabled:t.readonly,type:M.value?`error`:`default`,size:`small`},{icon:O(()=>[d(n,{name:`mdi:delete`,size:16})]),default:O(()=>[u(` `+w(M.value?`退出删除`:`删除连线`),1)]),_:1},8,[`disabled`,`type`]),d(T(te),{options:T(S),onSelect:r[0]||=e=>T(C)(e,X)},{default:O(()=>[d(T(A),{size:`small`},{icon:O(()=>[d(n,{name:`mdi:export`,size:16})]),default:O(()=>[r[6]||=u(` 导出 `,-1)]),_:1})]),_:1},8,[`options`])]),_:1}),M.value?(y(),c(`div`,he,[d(T(k),{type:`info`,size:`small`,"show-icon":!1},{default:O(()=>[...r[7]||=[u(` 删除模式:点击连接线即可删除 `,-1)]]),_:1})])):s(`v-if`,!0)])):s(`v-if`,!0),s(` 图表容器 `),l(`div`,{ref_key:`containerRef`,ref:p,class:`graph-container`,tabindex:`0`,role:`region`,"aria-label":`ER 图画布`,onPointerdown:oe,onKeydown:ce},null,544),s(` 表编辑器 `),d(fe,{show:E.value,"editing-table":j.value,"onUpdate:editingTable":r[1]||=e=>j.value=e,"onUpdate:show":r[2]||=e=>E.value=e,onSave:U,onAddField:ne,onRemoveField:re,onHandlePrimaryKey:K},null,8,[`show`,`editing-table`])]))}}),[[`__scopeId`,`data-v-7676efd4`]]);const _e={defaultColor:`#A2B1C3`,highlightColor:`#ff4d4f`,strokeWidth:2,highlightStrokeWidth:3,portPositions:[],onDataChange:()=>{},isReadonly:()=>!1};function ve(e,t={}){let n={..._e,...t},r=()=>{e.value?.getEdges().forEach(e=>{e.attr(`line/stroke`,n.defaultColor),e.attr(`line/strokeWidth`,n.strokeWidth)})},i=e=>{r(),e.attr(`line/stroke`,n.highlightColor),e.attr(`line/strokeWidth`,n.highlightStrokeWidth)},a=(e,t)=>{n.portPositions.forEach(n=>e.attr(`port-${n}/style/opacity`,t))};return{resetEdgeStyles:r,highlightEdge:i,togglePorts:a,bindInteractions:()=>{let t=e.value;t&&(t.on(`edge:click`,({edge:e})=>i(e)),t.on(`edge:dblclick`,({edge:e})=>{n.isReadonly()||(e.remove(),n.onDataChange())}),t.on(`blank:click`,r),t.on(`node:click`,r),t.on(`edge:connected`,()=>{n.isReadonly()||n.onDataChange()}),n.portPositions.length>0&&(t.on(`node:mouseenter`,({node:e})=>a(e,1)),t.on(`node:mouseleave`,({node:e})=>a(e,0))))}}}const ye={"start-event":{name:`开始`,title:`开始事件`,iconClass:`circle start-event`},activity:{name:`任务`,title:`任务活动`,iconClass:`rect activity`},gateway:{name:`网关`,title:`排他网关`,iconClass:`diamond gateway`},"end-event":{name:`结束`,title:`结束事件`,iconClass:`circle end-event`}},be={event:`事件`,activity:`活动`,gateway:`网关`,"bpmn-edge":`连接线`},xe=[`top`,`right`,`bottom`,`left`],Se=(e,t=`rect`)=>e.reduce((e,n)=>{let r=t===`circle`,i=n===`top`?r?{refCx:.5,refCy:0}:{refX:.5,refY:0}:n===`right`?r?{refCx:1,refCy:.5}:{refX:1,refY:.5}:n===`bottom`?r?{refCx:.5,refCy:1}:{refX:.5,refY:1}:r?{refCx:0,refCy:.5}:{refX:0,refY:.5};return e[`port-${n}`]={ref:`body`,...i,r:4,fill:`#31d0c6`,stroke:`#ffffff`,strokeWidth:2,magnet:!0,style:{cursor:`crosshair`,opacity:0,transition:`opacity 0.2s`}},e},{}),Ce={event:{inherit:`circle`,attrs:{body:{strokeWidth:2,stroke:`#5F95FF`,fill:`#FFF`,magnet:!1,style:{cursor:`move`}},text:{fontSize:12,fill:`#262626`,textAnchor:`middle`,textVerticalAnchor:`middle`,pointerEvents:`none`}}},activity:{inherit:`rect`,attrs:{body:{rx:6,ry:6,stroke:`#5F95FF`,fill:`#EFF4FF`,strokeWidth:1,magnet:!1,style:{cursor:`move`}},text:{fontSize:12,fill:`#262626`,textAnchor:`middle`,textVerticalAnchor:`middle`,pointerEvents:`none`}}},gateway:{inherit:`polygon`,attrs:{body:{refPoints:`0,10 10,0 20,10 10,20`,strokeWidth:2,stroke:`#5F95FF`,fill:`#EFF4FF`,magnet:!1,style:{cursor:`move`}},text:{fontSize:20,fill:`#5F95FF`,textAnchor:`middle`,textVerticalAnchor:`middle`,pointerEvents:`none`}}}},we={inherit:`edge`,attrs:{line:{stroke:`#A2B1C3`,strokeWidth:2,targetMarker:{name:`block`,width:8,height:6,fill:`#A2B1C3`},cursor:`pointer`}}};function Te(e=!1){let t={background:e?`#18181c`:`#ffffff`,gridPrimary:e?`rgba(255, 255, 255, 0.08)`:`#eee`,gridSecondary:e?`rgba(255, 255, 255, 0.04)`:`#ddd`};return{background:{color:t.background},grid:{visible:!0,type:`doubleMesh`,args:[{color:t.gridPrimary,thickness:1},{color:t.gridSecondary,thickness:1,factor:4}]},mousewheel:{enabled:!0,zoomAtMousePosition:!0,modifiers:`ctrl`,minScale:.5,maxScale:3},connecting:{router:`manhattan`,connector:{name:`rounded`,args:{radius:8}},allowBlank:!1,allowLoop:!1,allowNode:!1,snap:!0,allowEdge:!1},highlighting:{magnetAvailable:{name:`stroke`,args:{attrs:{fill:`#31d0c6`,stroke:`#31d0c6`,opacity:1}}},magnetAdsorbed:{name:`stroke`,args:{attrs:{fill:`#5F95FF`,stroke:`#5F95FF`,opacity:1}}}},selecting:{enabled:!0,rubberband:!0,showNodeSelectionBox:!0},resizing:!0,rotating:!1,snapline:!0,keyboard:!0,clipboard:!0}}Te();const Ee={"start-event":{shape:`event`,width:50,height:50,label:`开始事件`,data:{type:`start`}},"end-event":{shape:`event`,width:50,height:50,label:`结束事件`,data:{type:`end`}},activity:{shape:`activity`,width:120,height:60,label:`新活动`,data:{description:``,assignee:``}},gateway:{shape:`gateway`,width:40,height:40,label:`+`,data:{type:`exclusive`}}},De=[{id:`start-1`,shape:`event`,x:100,y:200,width:50,height:50,label:`流程开始`,data:{type:`start`}},{id:`activity-1`,shape:`activity`,x:200,y:180,width:120,height:60,label:`用户申请`,data:{description:`用户提交申请表单`,assignee:`申请人`}},{id:`activity-2`,shape:`activity`,x:380,y:180,width:120,height:60,label:`初审`,data:{description:`部门进行初步审核`,assignee:`部门主管`}},{id:`gateway-1`,shape:`gateway`,x:550,y:200,width:40,height:40,label:`+`,data:{type:`exclusive`}},{id:`activity-3`,shape:`activity`,x:650,y:120,width:120,height:60,label:`终审`,data:{description:`高级主管最终审核`,assignee:`总监`}},{id:`activity-4`,shape:`activity`,x:650,y:260,width:120,height:60,label:`驳回处理`,data:{description:`处理驳回流程`,assignee:`专员`}},{id:`end-1`,shape:`event`,x:820,y:140,width:50,height:50,label:`审批通过`,data:{type:`end`}},{id:`end-2`,shape:`event`,x:820,y:280,width:50,height:50,label:`审批驳回`,data:{type:`end`}},{id:`edge-1`,shape:`bpmn-edge`,source:`start-1`,target:`activity-1`,x:0,y:0},{id:`edge-2`,shape:`bpmn-edge`,source:`activity-1`,target:`activity-2`,x:0,y:0},{id:`edge-3`,shape:`bpmn-edge`,source:`activity-2`,target:`gateway-1`,x:0,y:0},{id:`edge-4`,shape:`bpmn-edge`,source:`gateway-1`,target:`activity-3`,label:`通过`,x:0,y:0},{id:`edge-5`,shape:`bpmn-edge`,source:`gateway-1`,target:`activity-4`,label:`驳回`,x:0,y:0},{id:`edge-6`,shape:`bpmn-edge`,source:`activity-3`,target:`end-1`,x:0,y:0},{id:`edge-7`,shape:`bpmn-edge`,source:`activity-4`,target:`end-2`,x:0,y:0}],Oe={key:0,class:`property-panel`},ke={class:`property-item`},Ae={class:`property-item`},je={key:0,class:`property-item`},Me={key:1,class:`property-item`},Ne={class:`form-actions`};var Pe=r(f({__name:`BPMNPropertyEditor`,props:p({show:{type:Boolean}},{editingElement:{},editingElementModifiers:{}}),emits:p([`update:show`,`save`,`delete`],[`update:editingElement`]),setup(e,{emit:t}){let n=E(e,`editingElement`),r=t,i=a(()=>be[n.value?.shape]||n.value?.shape||``);return(t,a)=>(y(),o(T(P),{show:e.show,width:`300`,title:`属性设置`,"onUpdate:show":a[6]||=e=>r(`update:show`,e)},{default:O(()=>[n.value?(y(),c(`div`,Oe,[l(`div`,ke,[a[7]||=l(`div`,{class:`property-label`},`名称`,-1),d(T(B),{value:n.value.label,"onUpdate:value":a[0]||=e=>n.value.label=e,placeholder:`请输入名称`,size:`small`},null,8,[`value`])]),l(`div`,Ae,[a[8]||=l(`div`,{class:`property-label`},`类型`,-1),d(T(B),{value:i.value,readonly:``,size:`small`},null,8,[`value`])]),n.value.shape===`activity`?(y(),c(`div`,je,[a[9]||=l(`div`,{class:`property-label`},`描述`,-1),d(T(B),{value:n.value.description,"onUpdate:value":a[1]||=e=>n.value.description=e,type:`textarea`,rows:3,placeholder:`请输入活动描述`,size:`small`},null,8,[`value`])])):s(`v-if`,!0),n.value.shape===`activity`?(y(),c(`div`,Me,[a[10]||=l(`div`,{class:`property-label`},`执行人`,-1),d(T(B),{value:n.value.assignee,"onUpdate:value":a[2]||=e=>n.value.assignee=e,placeholder:`请输入执行人`,size:`small`},null,8,[`value`])])):s(`v-if`,!0),l(`div`,Ne,[d(T(W),null,{default:O(()=>[d(T(A),{onClick:a[3]||=e=>r(`save`),type:`primary`,size:`small`},{default:O(()=>[...a[11]||=[u(` 保存 `,-1)]]),_:1}),d(T(A),{onClick:a[4]||=e=>r(`update:show`,!1),size:`small`},{default:O(()=>[...a[12]||=[u(` 取消 `,-1)]]),_:1}),d(T(A),{onClick:a[5]||=e=>r(`delete`),type:`error`,size:`small`},{default:O(()=>[...a[13]||=[u(` 删除 `,-1)]]),_:1})]),_:1})])])):s(`v-if`,!0)]),_:1},8,[`show`]))}}),[[`__scopeId`,`data-v-fc8f213e`]]);const Fe={class:`bpmn-layout`},Ie={key:0,class:`top-toolbar`},Le={class:`toolbar-section`},Re={class:`toolbar-group`},ze={class:`toolbar-group`},Be={class:`toolbar-group`},Ve={class:`main-content`},He={key:0,class:`left-panel`},Ue={class:`element-grid`},We=[`onClick`,`title`],Ge={class:`graph-wrapper`};var Ke=r(f({__name:`index`,props:{data:{},showToolbar:{type:Boolean,default:!0},readonly:{type:Boolean,default:!1},width:{default:`100%`},height:{default:`600px`},theme:{}},emits:[`ready`,`data-change`],setup(t,{expose:r,emit:o}){let f=t,p=o,m=b(),{graph:h,initGraph:_,centerContent:v,zoomToFit:S,scheduleZoomToFit:C}=J(m,a(()=>f.theme===`dark`)),{exportOptions:E,handleExport:k}=$(h,`bpmn-diagram`),{bindInteractions:j}=ve(h,{portPositions:xe,onDataChange:()=>W(),isReadonly:()=>f.readonly}),M=b(!1),N=b(),P=e=>String(e.attr(`text/text`)||e.attr(`label/text`)||``),F=e=>{if(!e)return[];if(Array.isArray(e))return e;let t=[];return Object.values(e).forEach(e=>{Array.isArray(e)&&t.push(...e)}),t},I=()=>{let e=xe.map(e=>({tagName:`circle`,selector:`port-${e}`})),t=[`event`,`activity`,`gateway`],n={event:`circle`,activity:`rect`,gateway:`polygon`};t.forEach(t=>{G.registerNode(t,{...Ce[t],markup:[{tagName:n[t],selector:`body`},{tagName:`text`,selector:`text`},...e],attrs:{...Ce[t].attrs,...Se(xe,n[t])}},!0)}),G.registerEdge(`bpmn-edge`,we,!0)},L=t=>{if(!h.value)return;let n=t.map(t=>{let{data:n,...r}=t,i=t.shape===`bpmn-edge`?h.value.createEdge(r):h.value.createNode(r);return n&&i.setData(e(n)),i});h.value.resetCells(n),n.length&&C(200,50)},R=t=>{if(f.readonly||!h.value)return;let n=Ee[t];if(!n)return;let r=h.value.options.width/2,i=h.value.options.height/2,{data:a,...o}={id:`${t}-${Date.now()}`,x:r+Math.random()*100-50,y:i+Math.random()*100-50,...n},s=h.value.createNode(o);a&&s.setData(e(a)),h.value.addCell(s),W()},z=()=>{f.readonly||(h.value?.clearCells(),W())},B=e=>{if(f.readonly)return;let t=e.getData()||{};N.value={id:e.id,shape:e.shape,label:P(e),description:t.description||``,assignee:t.assignee||``,x:0,y:0},M.value=!0},V=()=>{if(f.readonly||!h.value||!N.value)return;let e=h.value.getCellById(N.value.id);e&&(e.setData({description:N.value.description,assignee:N.value.assignee}),e.attr(`text/text`,N.value.label||``),e.attr(`label/text`,N.value.label||``)),M.value=!1,W()},H=()=>{f.readonly||!h.value||!N.value||(h.value.getCellById(N.value.id)?.remove(),M.value=!1,W())},U=()=>h.value?[...h.value.getNodes().map(t=>({id:t.id,shape:t.shape,x:t.getPosition().x,y:t.getPosition().y,width:t.getSize().width,height:t.getSize().height,label:P(t),data:e(t.getData()||{})})),...h.value.getEdges().map(t=>({id:t.id,shape:`bpmn-edge`,source:t.getSourceCellId()||``,target:t.getTargetCellId()||``,label:P(t),data:e(t.getData()||{}),x:0,y:0}))]:[],W=()=>{f.readonly||p(`data-change`,U())};return D(h,e=>{e instanceof G&&(se(e,()=>f.readonly),j(),e.on(`node:dblclick`,({node:e})=>B(e)),e.on(`node:moved`,W),p(`ready`,e),L(f.data===void 0?De:F(f.data)))},{immediate:!0}),D(()=>f.data,e=>{h.value&&L(e===void 0?De:F(e))},{deep:!0}),D(()=>f.readonly,e=>{e&&(M.value=!1,N.value=void 0)},{flush:`sync`}),ee(async()=>{I();let e=Te();await _({...e,interacting:()=>!f.readonly,connecting:{...e.connecting,validateMagnet:()=>!f.readonly,validateEdge:()=>!f.readonly,createEdge:()=>h.value.createEdge({shape:`bpmn-edge`}),validateConnection:({sourceView:e,targetView:t,sourceMagnet:n,targetMagnet:r})=>!f.readonly&&e!==t&&!!n&&!!r&&n.getAttribute(`magnet`)===`true`&&r.getAttribute(`magnet`)===`true`}})}),r({getGraph:()=>h.value,getData:U,loadData:L}),(e,r)=>(y(),c(`div`,Fe,[t.showToolbar?(y(),c(`div`,Ie,[l(`div`,Le,[l(`div`,Re,[d(T(A),{onClick:z,disabled:t.readonly,size:`small`},{icon:O(()=>[d(n,{name:`mdi:delete-outline`,size:16})]),default:O(()=>[r[3]||=u(` 清空 `,-1)]),_:1},8,[`disabled`])]),l(`div`,ze,[d(T(A),{onClick:T(v),size:`small`},{icon:O(()=>[d(n,{name:`mdi:image-filter-center-focus`,size:16})]),default:O(()=>[r[4]||=u(` 居中 `,-1)]),_:1},8,[`onClick`]),d(T(A),{onClick:T(S),size:`small`},{icon:O(()=>[d(n,{name:`mdi:fit-to-screen`,size:16})]),default:O(()=>[r[5]||=u(` 适应 `,-1)]),_:1},8,[`onClick`])]),l(`div`,Be,[d(T(te),{options:T(E),onSelect:r[0]||=e=>T(k)(e,U)},{default:O(()=>[d(T(A),{size:`small`},{icon:O(()=>[d(n,{name:`mdi:export`,size:16})]),default:O(()=>[r[6]||=u(` 导出 `,-1)]),_:1})]),_:1},8,[`options`])])])])):s(`v-if`,!0),l(`div`,Ve,[t.showToolbar&&!t.readonly?(y(),c(`div`,He,[r[7]||=l(`div`,{class:`panel-title`},`组件`,-1),l(`div`,Ue,[(y(!0),c(i,null,x(T(ye),(e,t)=>(y(),c(`div`,{key:t,class:`element-item`,onClick:e=>R(t),title:e.title},[l(`div`,{class:g([`element-icon`,e.iconClass])},null,2),l(`span`,null,w(e.name),1)],8,We))),128))])])):s(`v-if`,!0),l(`div`,Ge,[l(`div`,{ref_key:`containerRef`,ref:m,class:`graph-container`},null,512)])]),d(Pe,{show:M.value,"editing-element":N.value,"onUpdate:editingElement":r[1]||=e=>N.value=e,"onUpdate:show":r[2]||=e=>M.value=e,onSave:V,onDelete:H},null,8,[`show`,`editing-element`])]))}}),[[`__scopeId`,`data-v-a7aebb58`]]);const qe={key:0,class:`class-editor`},Je={class:`section`},Ye={class:`section-header`},Xe={style:{"font-size":`13px`}},Ze={class:`section`},Qe={class:`section-header`},$e={style:{"font-size":`13px`}};var et=r(f({__name:`UMLClassEditor`,props:p({show:{type:Boolean}},{editingClass:{},editingClassModifiers:{}}),emits:p([`update:show`,`save`,`delete`],[`update:editingClass`]),setup(e,{emit:t}){let r=E(e,`editingClass`),a=t;return(t,f)=>(y(),o(T(P),{show:e.show,width:`450`,title:`编辑类`,"onUpdate:show":f[6]||=e=>a(`update:show`,e)},{default:O(()=>[r.value?(y(),c(`div`,qe,[d(T(I),{"label-placement":`top`},{default:O(()=>[d(T(L),{label:`类名`},{default:O(()=>[d(T(B),{value:r.value.name,"onUpdate:value":f[0]||=e=>r.value.name=e,placeholder:`请输入类名`},null,8,[`value`])]),_:1}),d(T(N),{style:{margin:`20px 0`}},{default:O(()=>[...f[7]||=[u(`属性`,-1)]]),_:1}),l(`div`,Je,[(y(!0),c(i,null,x(r.value.attributes,(e,t)=>(y(),c(`div`,{key:t,class:`item`},[d(T(j),{size:`small`,style:{"margin-bottom":`12px`}},{header:O(()=>[l(`div`,Ye,[l(`span`,Xe,`#`+w(t+1)+` `+w(e.name||`新属性`),1),d(T(A),{onClick:e=>r.value.attributes.splice(t,1),size:`tiny`,type:`error`,quaternary:``,style:{"margin-left":`auto`}},{default:O(()=>[...f[8]||=[u(` 删除 `,-1)]]),_:1},8,[`onClick`])])]),default:O(()=>[d(T(W),{vertical:``,size:`small`},{default:O(()=>[d(T(W),null,{default:O(()=>[d(T(L),{label:`属性名`,style:{margin:`0`,flex:`1`}},{default:O(()=>[d(T(B),{value:e.name,"onUpdate:value":t=>e.name=t,placeholder:`属性名`,size:`small`},null,8,[`value`,`onUpdate:value`])]),_:2},1024),d(T(L),{label:`类型`,style:{margin:`0`,flex:`1`}},{default:O(()=>[d(T(B),{value:e.type,"onUpdate:value":t=>e.type=t,placeholder:`类型`,size:`small`},null,8,[`value`,`onUpdate:value`])]),_:2},1024)]),_:2},1024),d(T(L),{label:`可见性`,style:{margin:`0`}},{default:O(()=>[d(T(H),{value:e.visibility,"onUpdate:value":t=>e.visibility=t,size:`small`},{default:O(()=>[d(T(V),{value:`public`},{default:O(()=>[...f[9]||=[u(`+ public`,-1)]]),_:1}),d(T(V),{value:`private`},{default:O(()=>[...f[10]||=[u(`- private`,-1)]]),_:1}),d(T(V),{value:`protected`},{default:O(()=>[...f[11]||=[u(`# protected`,-1)]]),_:1})]),_:1},8,[`value`,`onUpdate:value`])]),_:2},1024)]),_:2},1024)]),_:2},1024)]))),128)),d(T(A),{onClick:f[1]||=e=>r.value.attributes.push({name:`newAttribute`,type:`string`,visibility:`private`}),dashed:``,block:``,type:`primary`,ghost:``,size:`small`},{icon:O(()=>[d(n,{name:`mdi:plus`,size:16})]),default:O(()=>[f[12]||=u(` 添加属性 `,-1)]),_:1})]),d(T(N),{style:{margin:`20px 0`}},{default:O(()=>[...f[13]||=[u(`方法`,-1)]]),_:1}),l(`div`,Ze,[(y(!0),c(i,null,x(r.value.methods,(e,t)=>(y(),c(`div`,{key:t,class:`item`},[d(T(j),{size:`small`,style:{"margin-bottom":`12px`}},{header:O(()=>[l(`div`,Qe,[l(`span`,$e,`#`+w(t+1)+` `+w(e.name||`新方法`),1),d(T(A),{onClick:e=>r.value.methods.splice(t,1),size:`tiny`,type:`error`,quaternary:``,style:{"margin-left":`auto`}},{default:O(()=>[...f[14]||=[u(` 删除 `,-1)]]),_:1},8,[`onClick`])])]),default:O(()=>[d(T(W),{vertical:``,size:`small`},{default:O(()=>[d(T(W),null,{default:O(()=>[d(T(L),{label:`方法名`,style:{margin:`0`,flex:`1`}},{default:O(()=>[d(T(B),{value:e.name,"onUpdate:value":t=>e.name=t,placeholder:`方法名`,size:`small`},null,8,[`value`,`onUpdate:value`])]),_:2},1024),d(T(L),{label:`返回类型`,style:{margin:`0`,flex:`1`}},{default:O(()=>[d(T(B),{value:e.returnType,"onUpdate:value":t=>e.returnType=t,placeholder:`返回类型`,size:`small`},null,8,[`value`,`onUpdate:value`])]),_:2},1024)]),_:2},1024),d(T(L),{label:`可见性`,style:{margin:`0`}},{default:O(()=>[d(T(H),{value:e.visibility,"onUpdate:value":t=>e.visibility=t,size:`small`},{default:O(()=>[d(T(V),{value:`public`},{default:O(()=>[...f[15]||=[u(`+ public`,-1)]]),_:1}),d(T(V),{value:`private`},{default:O(()=>[...f[16]||=[u(`- private`,-1)]]),_:1}),d(T(V),{value:`protected`},{default:O(()=>[...f[17]||=[u(`# protected`,-1)]]),_:1})]),_:1},8,[`value`,`onUpdate:value`])]),_:2},1024)]),_:2},1024)]),_:2},1024)]))),128)),d(T(A),{onClick:f[2]||=e=>r.value.methods.push({name:`newMethod`,returnType:`void`,visibility:`public`}),dashed:``,block:``,type:`primary`,ghost:``,size:`small`},{icon:O(()=>[d(n,{name:`mdi:plus`,size:16})]),default:O(()=>[f[18]||=u(` 添加方法 `,-1)]),_:1})]),d(T(N),{style:{margin:`20px 0`}}),d(T(W),{justify:`space-between`},{default:O(()=>[d(T(A),{onClick:f[3]||=e=>a(`delete`),type:`error`,ghost:``},{icon:O(()=>[d(n,{name:`mdi:delete`,size:16})]),default:O(()=>[f[19]||=u(` 删除类 `,-1)]),_:1}),d(T(W),null,{default:O(()=>[d(T(A),{onClick:f[4]||=e=>a(`update:show`,!1)},{default:O(()=>[...f[20]||=[u(`取消`,-1)]]),_:1}),d(T(A),{onClick:f[5]||=e=>a(`save`),type:`primary`},{default:O(()=>[...f[21]||=[u(` 保存 `,-1)]]),_:1})]),_:1})]),_:1})]),_:1})])):s(`v-if`,!0)]),_:1},8,[`show`]))}}),[[`__scopeId`,`data-v-c37f7424`]]);const tt={public:`+`,private:`-`,protected:`#`},nt={extends:{strokeDasharray:0,targetMarker:{name:`block`,width:10,height:8,fill:`white`,stroke:`#722ed1`,strokeWidth:2}},implement:{strokeDasharray:`8,4`,targetMarker:{name:`block`,width:10,height:8,fill:`white`,stroke:`#722ed1`,strokeWidth:2}},dependency:{strokeDasharray:`6,4`,targetMarker:{name:`classic`,size:8,fill:`#722ed1`}},composition:{strokeDasharray:0,sourceMarker:{name:`diamond`,width:12,height:8,fill:`#722ed1`,stroke:`#722ed1`}},aggregation:{strokeDasharray:0,sourceMarker:{name:`diamond`,width:12,height:8,fill:`white`,stroke:`#722ed1`,strokeWidth:2}},association:{strokeDasharray:0,targetMarker:{name:`classic`,size:8,fill:`#722ed1`}}},rt=[`top`,`right`,`bottom`,`left`].reduce((e,t)=>{let n=t===`top`?{refX:.5,refY:0}:t===`right`?{refX:1,refY:.5}:t===`bottom`?{refX:.5,refY:1}:{refX:0,refY:.5};return e[`port-${t}`]={ref:`body`,...n,r:4,fill:`#31d0c6`,stroke:`#ffffff`,strokeWidth:2,magnet:!0,style:{cursor:`crosshair`,opacity:0,transition:`opacity 0.2s`}},e},{}),it={inherit:`rect`,markup:[{tagName:`rect`,selector:`body`},{tagName:`rect`,selector:`name-rect`},{tagName:`rect`,selector:`attrs-rect`},{tagName:`rect`,selector:`methods-rect`},{tagName:`text`,selector:`name-text`},{tagName:`text`,selector:`attrs-text`},{tagName:`text`,selector:`methods-text`},{tagName:`circle`,selector:`port-top`},{tagName:`circle`,selector:`port-right`},{tagName:`circle`,selector:`port-bottom`},{tagName:`circle`,selector:`port-left`}],attrs:{rect:{width:160},body:{stroke:`#5f95ff`,strokeWidth:1,fill:`#fff`,magnet:!1,style:{cursor:`move`}},"name-rect":{fill:`#5f95ff`,stroke:`#fff`,strokeWidth:.5,magnet:!1,style:{cursor:`move`}},"attrs-rect":{fill:`#eff4ff`,stroke:`#fff`,strokeWidth:.5,magnet:!1,style:{cursor:`move`}},"methods-rect":{fill:`#eff4ff`,stroke:`#fff`,strokeWidth:.5,magnet:!1,style:{cursor:`move`}},"name-text":{ref:`name-rect`,refY:.5,refX:.5,textAnchor:`middle`,fontWeight:`bold`,fill:`#fff`,fontSize:12,pointerEvents:`none`},"attrs-text":{ref:`attrs-rect`,refY:.5,refX:5,textAnchor:`left`,fill:`black`,fontSize:10,pointerEvents:`none`},"methods-text":{ref:`methods-rect`,refY:.5,refX:5,textAnchor:`left`,fill:`black`,fontSize:10,pointerEvents:`none`},...rt}},at={router:`manhattan`,connector:{name:`rounded`,args:{radius:8}},allowBlank:!1,allowLoop:!1,allowNode:!1,snap:!0,allowEdge:!1},ot={magnetAvailable:{name:`stroke`,args:{attrs:{fill:`#31d0c6`,stroke:`#31d0c6`,opacity:1}}},magnetAdsorbed:{name:`stroke`,args:{attrs:{fill:`#5F95FF`,stroke:`#5F95FF`,opacity:1}}}},st={shape:`extends`,attrs:{line:{stroke:`#722ed1`,strokeWidth:2,targetMarker:{name:`block`,width:8,height:6,fill:`#722ed1`}}}},ct=[{id:`animal`,name:`<<Abstract>>
1
+ import{t as e}from"./data2.js";import{t}from"./feedback.js";import{t as n}from"./C_Icon2.js";import{t as r}from"./export-helper.js";import{Fragment as i,computed as a,createBlock as o,createCommentVNode as s,createElementBlock as c,createElementVNode as l,createTextVNode as u,createVNode as d,defineComponent as f,mergeModels as p,mergeProps as m,nextTick as h,normalizeClass as g,normalizeStyle as ee,onMounted as te,onUnmounted as _,openBlock as v,ref as y,renderList as b,resolveDynamicComponent as x,shallowRef as S,toDisplayString as C,unref as w,useModel as T,watch as E,withCtx as D}from"vue";import{NAlert as O,NButton as k,NCard as A,NCheckbox as j,NDivider as M,NDrawer as N,NDrawerContent as P,NDropdown as ne,NForm as F,NFormItem as I,NGi as L,NGrid as R,NInput as z,NRadio as B,NRadioGroup as V,NSelect as H,NSpace as U}from"naive-ui";import{Graph as W,ObjectExt as G}from"@antv/x6";import re from"html2canvas";function ie(e){return{background:e?`#18181c`:`#f5f5f5`,gridPrimary:e?`rgba(255, 255, 255, 0.08)`:`#eee`,gridSecondary:e?`rgba(255, 255, 255, 0.04)`:`#ddd`}}function K(e=!1){let t=ie(e);return{background:{color:t.background},grid:{visible:!0,type:`doubleMesh`,args:[{color:t.gridPrimary,thickness:1},{color:t.gridSecondary,thickness:1,factor:4}]},mousewheel:{enabled:!0,zoomAtMousePosition:!0,modifiers:`ctrl`,minScale:.5,maxScale:2},selecting:{enabled:!0,rubberband:!0,movable:!0,showNodeSelectionBox:!0},resizing:!0,rotating:!0,snapline:!0,keyboard:!0,clipboard:!0}}function q(e){return e?{width:e.clientWidth||e.offsetWidth||800,height:e.clientHeight||e.offsetHeight||600}:{width:0,height:0}}function J(e,t){let n=0,r,i=!1,a=S(null),o=y(!1),s=n=>{if(!i){o.value=!0;try{if(!e.value)return;a.value&&=(a.value.dispose(),null);let{width:r,height:i}=q(e.value),o=K(t?.value??!1);a.value=new W({container:e.value,width:r,height:i,...o,...n})}catch{}finally{o.value=!1}}},c=async(e={})=>{let t=++n;await h(),t===n&&s(e)};function l(e){if(!a.value)return;let t=ie(e);a.value.drawBackground({color:t.background}),a.value.drawGrid({type:`doubleMesh`,args:[{color:t.gridPrimary,thickness:1},{color:t.gridSecondary,thickness:1,factor:4}]})}t&&E(t,e=>{l(e)});function u(){if(n++,clearTimeout(r),r=void 0,a.value){let e=a.value;a.value=null,e.dispose()}}function d(){a.value?.centerContent()}function f(){a.value?.zoomToFit({padding:20,maxScale:1})}function p(e=200,t=20){clearTimeout(r);let n=a.value;n&&(r=setTimeout(()=>{!i&&a.value===n&&n.zoomToFit({padding:t,maxScale:1})},e))}function m(e){a.value?.zoom(e)}function g(){if(a.value&&e.value){let{width:t,height:n}=q(e.value);a.value.resize(t,n)}}return _(()=>{i=!0,u()}),{graph:a,loading:o,initGraph:c,destroyGraph:u,centerContent:d,zoomToFit:f,scheduleZoomToFit:p,zoom:m,resizeGraph:g,updateTheme:l}}function Y(e,t){let n=URL.createObjectURL(e),r=document.createElement(`a`);r.href=n,r.download=t,r.style.display=`none`,document.body.appendChild(r),r.click(),document.body.removeChild(r),URL.revokeObjectURL(n)}function X(e,t=`diagram.json`){let n=JSON.stringify(e,null,2);Y(new Blob([n],{type:`application/json`}),t)}async function Z(e,t=`diagram.png`,n={}){let{backgroundColor:r=`#ffffff`,scale:i=2}=n,{container:a}=e;Y(await Q(await re(a,{backgroundColor:r,scale:i,useCORS:!0,logging:!1}),`image/png`),t)}function ae(e,t=`diagram.svg`){let n=e.container.querySelector(`svg`);if(!n)throw Error(`SVG导出失败: 未找到图表 SVG 元素`);let r=n.cloneNode(!0);r.getAttribute(`xmlns`)||r.setAttribute(`xmlns`,`http://www.w3.org/2000/svg`),r.getAttribute(`xmlns:xlink`)||r.setAttribute(`xmlns:xlink`,`http://www.w3.org/1999/xlink`);let i=new XMLSerializer().serializeToString(r);Y(new Blob([i],{type:`image/svg+xml;charset=utf-8`}),t)}function Q(e,t,n=1){return new Promise((r,i)=>{e.toBlob(e=>{e?r(e):i(Error(`Canvas 转 Blob 失败`))},t,n)})}const oe=[{label:`导出PNG`,key:`png`},{label:`导出SVG`,key:`svg`},{label:`导出JSON`,key:`json`}];function $(e,n=`diagram`){let r=t();return{exportOptions:oe,handleExport:async(t,i)=>{if(e.value)try{switch(t){case`png`:await Z(e.value,`${n}.png`);break;case`svg`:ae(e.value,`${n}.svg`);break;case`json`:i&&X(i(),`${n}.json`);break}}catch(e){r.error(`导出${t.toUpperCase()}失败,请重试`,e)}}}}function se(e,t){e.on(`cell:change:*`,({cell:e,key:n,previous:r,options:i})=>{t()&&i.ui&&e.prop(n,r,{ui:!1})})}const ce=[{label:`BIGINT`,value:`BIGINT`},{label:`INT`,value:`INT`},{label:`SMALLINT`,value:`SMALLINT`},{label:`TINYINT`,value:`TINYINT`},{label:`VARCHAR(50)`,value:`VARCHAR(50)`},{label:`VARCHAR(100)`,value:`VARCHAR(100)`},{label:`VARCHAR(255)`,value:`VARCHAR(255)`},{label:`CHAR(10)`,value:`CHAR(10)`},{label:`TEXT`,value:`TEXT`},{label:`LONGTEXT`,value:`LONGTEXT`},{label:`DATETIME`,value:`DATETIME`},{label:`TIMESTAMP`,value:`TIMESTAMP`},{label:`DATE`,value:`DATE`},{label:`TIME`,value:`TIME`},{label:`DECIMAL(10,2)`,value:`DECIMAL(10,2)`},{label:`FLOAT`,value:`FLOAT`},{label:`DOUBLE`,value:`DOUBLE`},{label:`BOOLEAN`,value:`BOOLEAN`},{label:`JSON`,value:`JSON`}],le={key:0,class:`table-editor`},ue={class:`fields-container`},de={class:`field-header`};var fe=r(f({__name:`ERTableEditor`,props:p({show:{type:Boolean}},{editingTable:{},editingTableModifiers:{}}),emits:p([`update:show`,`save`,`add-field`,`remove-field`,`handle-primary-key`],[`update:editingTable`]),setup(e,{emit:t}){let r=T(e,`editingTable`),a=t,f=(e,t)=>a(`handle-primary-key`,e,t),p=()=>a(`add-field`),m=e=>a(`remove-field`,e);return(t,a)=>(v(),o(w(N),{show:e.show,width:`600`,placement:`right`,"onUpdate:show":a[4]||=e=>t.$emit(`update:show`,e)},{default:D(()=>[d(w(P),{title:`编辑表: ${r.value?.name||`新表`}`,closable:``},{footer:D(()=>[d(w(U),{justify:`end`},{default:D(()=>[d(w(k),{onClick:a[2]||=e=>t.$emit(`update:show`,!1)},{default:D(()=>[...a[11]||=[u(`取消`,-1)]]),_:1}),d(w(k),{onClick:a[3]||=e=>t.$emit(`save`),type:`primary`},{default:D(()=>[...a[12]||=[u(`保存`,-1)]]),_:1})]),_:1})]),default:D(()=>[r.value?(v(),c(`div`,le,[d(w(F),{model:r.value,"label-placement":`top`},{default:D(()=>[d(w(I),{label:`表名`},{default:D(()=>[d(w(z),{value:r.value.name,"onUpdate:value":a[0]||=e=>r.value.name=e,placeholder:`请输入表名`},null,8,[`value`])]),_:1}),d(w(I),{label:`表注释`},{default:D(()=>[d(w(z),{value:r.value.comment,"onUpdate:value":a[1]||=e=>r.value.comment=e,placeholder:`表注释`},null,8,[`value`])]),_:1}),d(w(M),null,{default:D(()=>[...a[5]||=[u(`字段列表`,-1)]]),_:1}),l(`div`,ue,[(v(!0),c(i,null,b(r.value.fields,(e,t)=>(v(),o(w(A),{key:t,size:`small`,class:`field-card`},{header:D(()=>[l(`div`,de,[l(`span`,null,`#`+C(t+1)+` `+C(e.name||`新字段`),1),d(w(k),{onClick:e=>m(t),size:`tiny`,type:`error`,quaternary:``,disabled:r.value.fields.length<=1},{default:D(()=>[...a[6]||=[u(` 删除 `,-1)]]),_:1},8,[`onClick`,`disabled`])])]),default:D(()=>[d(w(R),{cols:2,"x-gap":12},{default:D(()=>[d(w(L),null,{default:D(()=>[d(w(I),{label:`字段名`,size:`small`},{default:D(()=>[d(w(z),{value:e.name,"onUpdate:value":t=>e.name=t,placeholder:`字段名`,size:`small`},null,8,[`value`,`onUpdate:value`])]),_:2},1024)]),_:2},1024),d(w(L),null,{default:D(()=>[d(w(I),{label:`类型`,size:`small`},{default:D(()=>[d(w(H),{value:e.type,"onUpdate:value":t=>e.type=t,options:w(ce),size:`small`,filterable:``,placeholder:`选择类型`},null,8,[`value`,`onUpdate:value`,`options`])]),_:2},1024)]),_:2},1024)]),_:2},1024),d(w(U),{style:{"margin-top":`12px`}},{default:D(()=>[d(w(j),{checked:e.isPrimaryKey,"onUpdate:checked":[t=>e.isPrimaryKey=t,t=>f(e,t)]},{default:D(()=>[...a[7]||=[u(` 主键 `,-1)]]),_:1},8,[`checked`,`onUpdate:checked`]),d(w(j),{checked:e.isRequired,"onUpdate:checked":t=>e.isRequired=t},{default:D(()=>[...a[8]||=[u(`必填`,-1)]]),_:1},8,[`checked`,`onUpdate:checked`]),d(w(j),{checked:e.isForeignKey,"onUpdate:checked":t=>e.isForeignKey=t},{default:D(()=>[...a[9]||=[u(`外键`,-1)]]),_:1},8,[`checked`,`onUpdate:checked`])]),_:2},1024),d(w(I),{label:`注释`,size:`small`,style:{"margin-top":`12px`}},{default:D(()=>[d(w(z),{value:e.comment,"onUpdate:value":t=>e.comment=t,placeholder:`字段注释`,size:`small`},null,8,[`value`,`onUpdate:value`])]),_:2},1024)]),_:2},1024))),128)),d(w(k),{onClick:p,dashed:``,block:``,type:`primary`,ghost:``,style:{"margin-top":`16px`}},{icon:D(()=>[d(n,{name:`mdi:plus`,size:16})]),default:D(()=>[a[10]||=u(` 添加字段 `,-1)]),_:1})])]),_:1},8,[`model`])])):s(`v-if`,!0)]),_:1},8,[`title`])]),_:1},8,[`show`]))}}),[[`__scopeId`,`data-v-4e8f219f`]]);const pe={class:`er-layout`},me={key:0,class:`toolbar`},he={key:0,style:{"margin-top":`8px`}};var ge=r(f({__name:`index`,props:{data:{},showToolbar:{type:Boolean,default:!0},readonly:{type:Boolean,default:!1},theme:{}},emits:[`ready`,`data-change`],setup(t,{expose:r,emit:i}){let o=t,f=i,p=y(),{graph:m,initGraph:g,centerContent:ee,zoomToFit:_,scheduleZoomToFit:b}=J(p,a(()=>o.theme===`dark`)),{exportOptions:x,handleExport:S}=$(m,`er-diagram`),T=y(!1),A=y(),j=y(!1),M=(e,t)=>e.length>t?e.substring(0,t-1)+`..`:e,N=e=>e.fields?.map(t=>{let n=t.isPrimaryKey?`🔑 ${t.name}`:t.isRequired?`* ${t.name}`:t.name;return{id:`${e.id}_${t.name}`,data:{tableId:e.id,fieldName:t.name},group:`list`,attrs:{portNameLabel:{text:M(n,12),title:n},portTypeLabel:{text:M(t.type,10),title:t.type},portBody:{fill:t.isPrimaryKey?`#FFF7E6`:`#EFF4FF`}}}})||[],P=t=>({id:t.id,shape:`er-rect`,x:t.position.x,y:t.position.y,width:200,height:24+(t.fields?.length||0)*24,data:e(t),attrs:{label:{text:M(t.name,20),refX:.5,refY:10,textAnchor:`middle`,title:t.name}},ports:N(t)}),F=()=>{m.value&&(W.registerPortLayout(`erPortPosition`,e=>e.map((e,t)=>({position:{x:0,y:(t+1)*24},angle:0})),!0),W.registerNode(`er-rect`,{inherit:`rect`,markup:[{tagName:`rect`,selector:`body`},{tagName:`text`,selector:`label`}],attrs:{rect:{strokeWidth:1,stroke:`#5F95FF`,fill:`#5F95FF`},label:{fontWeight:`bold`,fill:`#ffffff`,fontSize:12}},ports:{groups:{list:{markup:[{tagName:`rect`,selector:`portBody`},{tagName:`text`,selector:`portNameLabel`},{tagName:`text`,selector:`portTypeLabel`}],attrs:{portBody:{width:200,height:24,strokeWidth:1,stroke:`#5F95FF`,fill:`#EFF4FF`,magnet:!0},portNameLabel:{ref:`portBody`,refX:6,refY:6,fontSize:9,textAnchor:`start`,textOverflow:`ellipsis`},portTypeLabel:{ref:`portBody`,refX:120,refY:6,fontSize:9,textAnchor:`start`,fill:`#666`}},position:`erPortPosition`}}}},!0))},I=()=>{o.readonly||(j.value=!j.value,j.value||L())},L=()=>{m.value?.getEdges().forEach(e=>{e.attr(`line/stroke`,`#A2B1C3`),e.attr(`line/strokeWidth`,2)})},R=e=>{if(!m.value)return;let t=m.value.createNode(P(e));return m.value.resetCells([t,...m.value.getCells()]),t},z=()=>{let e=m.value?.getNodes()||[];for(let t=0;t<10;t++)for(let n=0;n<3;n++){let r={x:n*250+50,y:t*250+50};if(!e.some(e=>{let t=e.getPosition();return Math.abs(t.x-r.x)<250*.8&&Math.abs(t.y-r.y)<250*.8}))return r}return{x:50,y:50}},B=()=>{if(o.readonly)return;let e={id:`table_${Date.now()}`,name:`新表`,comment:``,fields:[{name:`id`,type:`BIGINT`,isPrimaryKey:!0,isRequired:!0,isForeignKey:!1,comment:`主键`},{name:`name`,type:`VARCHAR(100)`,isPrimaryKey:!1,isRequired:!0,isForeignKey:!1,comment:`名称`}],position:z()};R(e),V(e),Z()},V=t=>{o.readonly||(A.value=e(t),T.value=!0)},H=()=>{if(o.readonly||!m.value||!A.value)return;let t=m.value.getCellById(A.value.id);t&&(t.setData(e(A.value)),t.prop({size:{width:200,height:24+A.value.fields.length*24},attrs:{label:{text:M(A.value.name,20),title:A.value.name}},ports:N(A.value)})),T.value=!1,Z()},G=(e,t)=>{o.readonly||!t||(e.isRequired=!0,A.value?.fields.forEach(t=>{t!==e&&(t.isPrimaryKey=!1)}))},re=()=>{o.readonly||A.value?.fields.push({name:`field_${(A.value?.fields.length||0)+1}`,type:`VARCHAR(100)`,isPrimaryKey:!1,isRequired:!1,isForeignKey:!1,comment:``})},ie=e=>{o.readonly||A.value&&A.value.fields.length>1&&A.value.fields.splice(e,1)},K=(e,t)=>{let n=e.getPort(t)?.data;if(n?.tableId===e.id)return n.fieldName;let r=`${e.id}_`;return t.startsWith(r)?t.slice(r.length):void 0},q=e=>e.getData()?.name||e.id,Y=t=>{let n=t.getSourceNode(),r=t.getTargetNode();if(!n||!r)return;let i=K(n,t.getSourcePortId()??``),a=K(r,t.getTargetPortId()??``);if(i===void 0||a===void 0)return;let o=t.getData();return{...e(o),id:t.id,type:o?.type??`foreign-key`,sourceTable:n.id,sourceField:i,targetTable:r.id,targetField:a,...!o&&{name:`${q(n)} -> ${q(r)}`}}},X=()=>{if(!m.value)return{tables:[],relations:[]};let t=m.value.getNodes().map(t=>({...e(t.getData()),position:t.getPosition()})),n=[];return m.value.getEdges().forEach(e=>{let t=Y(e);t&&n.push(t)}),{tables:t,relations:n}},Z=()=>{o.readonly||f(`data-change`,X())},ae=t=>{let n=m.value;if(!n)return;Q=null;let r=t.tables.map(e=>n.createNode(P(e)));t.relations?.forEach(t=>{r.push(n.createEdge({id:t.id,source:{cell:t.sourceTable,port:`${t.sourceTable}_${t.sourceField}`},target:{cell:t.targetTable,port:`${t.targetTable}_${t.targetField}`},data:e(t),attrs:{line:{stroke:`#A2B1C3`,strokeWidth:2}}}))}),n.resetCells(r)},Q=null;E(m,e=>{e instanceof W&&(F(),se(e,()=>o.readonly),e.on(`node:dblclick`,({node:e})=>{o.readonly||V(e.getData())}),e.on(`node:moved`,Z),e.on(`edge:connected`,Z),e.on(`edge:removed`,({edge:e})=>{Q===e&&(Q=null),Z()}),e.on(`edge:click`,({edge:e})=>{o.readonly||(j.value?e.remove():(L(),e.attr(`line/stroke`,`#ff4d4f`),e.attr(`line/strokeWidth`,3),Q=e))}),e.on(`edge:dblclick`,({edge:e})=>{o.readonly||e.remove()}),e.on(`blank:click`,()=>{Q=null,j.value||L()}),f(`ready`,e),h(()=>{m.value===e&&o.data?.tables&&(ae(o.data),b(300,20))}))},{immediate:!0}),E(()=>o.data,e=>{m.value&&e?.tables&&ae(e)},{deep:!0}),E(()=>o.readonly,e=>{e&&(T.value=!1,A.value=void 0,j.value=!1,Q=null,L())},{flush:`sync`});let oe=e=>{e.target?.closest(`input, textarea, [contenteditable]:not([contenteditable="false"])`)||p.value?.focus({preventScroll:!0})},ce=e=>{o.readonly||document.activeElement!==p.value||e.target?.closest(`input, textarea, [contenteditable]:not([contenteditable="false"])`)||(e.key===`Delete`||e.key===`Backspace`)&&Q&&(e.preventDefault(),Q.remove(),Q=null)};return te(()=>{g({interacting:()=>!o.readonly,connecting:{allowBlank:!1,allowNode:!1,allowEdge:!1,validateMagnet:()=>!o.readonly,validateConnection:()=>!o.readonly,validateEdge:()=>!o.readonly}})}),r({getGraph:()=>m.value??void 0,getData:X}),(e,r)=>(v(),c(`div`,pe,[s(` 工具栏 `),t.showToolbar?(v(),c(`div`,me,[d(w(U),null,{default:D(()=>[d(w(k),{onClick:B,disabled:t.readonly,type:`primary`,size:`small`},{icon:D(()=>[d(n,{name:`mdi:table-plus`,size:16})]),default:D(()=>[r[3]||=u(` 添加表 `,-1)]),_:1},8,[`disabled`]),d(w(k),{onClick:w(ee),size:`small`},{icon:D(()=>[d(n,{name:`mdi:image-filter-center-focus`,size:16})]),default:D(()=>[r[4]||=u(` 居中 `,-1)]),_:1},8,[`onClick`]),d(w(k),{onClick:w(_),size:`small`},{icon:D(()=>[d(n,{name:`mdi:fit-to-screen`,size:16})]),default:D(()=>[r[5]||=u(` 适应 `,-1)]),_:1},8,[`onClick`]),d(w(k),{onClick:I,disabled:t.readonly,type:j.value?`error`:`default`,size:`small`},{icon:D(()=>[d(n,{name:`mdi:delete`,size:16})]),default:D(()=>[u(` `+C(j.value?`退出删除`:`删除连线`),1)]),_:1},8,[`disabled`,`type`]),d(w(ne),{options:w(x),onSelect:r[0]||=e=>w(S)(e,X)},{default:D(()=>[d(w(k),{size:`small`},{icon:D(()=>[d(n,{name:`mdi:export`,size:16})]),default:D(()=>[r[6]||=u(` 导出 `,-1)]),_:1})]),_:1},8,[`options`])]),_:1}),j.value?(v(),c(`div`,he,[d(w(O),{type:`info`,size:`small`,"show-icon":!1},{default:D(()=>[...r[7]||=[u(` 删除模式:点击连接线即可删除 `,-1)]]),_:1})])):s(`v-if`,!0)])):s(`v-if`,!0),s(` 图表容器 `),l(`div`,{ref_key:`containerRef`,ref:p,class:`graph-container`,tabindex:`0`,role:`region`,"aria-label":`ER 图画布`,onPointerdown:oe,onKeydown:ce},null,544),s(` 表编辑器 `),d(fe,{show:T.value,"editing-table":A.value,"onUpdate:editingTable":r[1]||=e=>A.value=e,"onUpdate:show":r[2]||=e=>T.value=e,onSave:H,onAddField:re,onRemoveField:ie,onHandlePrimaryKey:G},null,8,[`show`,`editing-table`])]))}}),[[`__scopeId`,`data-v-7676efd4`]]);const _e={defaultColor:`#A2B1C3`,highlightColor:`#ff4d4f`,strokeWidth:2,highlightStrokeWidth:3,portPositions:[],onDataChange:()=>{},isReadonly:()=>!1};function ve(e,t={}){let n={..._e,...t},r=()=>{e.value?.getEdges().forEach(e=>{e.attr(`line/stroke`,n.defaultColor),e.attr(`line/strokeWidth`,n.strokeWidth)})},i=e=>{r(),e.attr(`line/stroke`,n.highlightColor),e.attr(`line/strokeWidth`,n.highlightStrokeWidth)},a=(e,t)=>{n.portPositions.forEach(n=>e.attr(`port-${n}/style/opacity`,t))};return{resetEdgeStyles:r,highlightEdge:i,togglePorts:a,bindInteractions:()=>{let t=e.value;t&&(t.on(`edge:click`,({edge:e})=>i(e)),t.on(`edge:dblclick`,({edge:e})=>{n.isReadonly()||(e.remove(),n.onDataChange())}),t.on(`blank:click`,r),t.on(`node:click`,r),t.on(`edge:connected`,()=>{n.isReadonly()||n.onDataChange()}),n.portPositions.length>0&&(t.on(`node:mouseenter`,({node:e})=>a(e,1)),t.on(`node:mouseleave`,({node:e})=>a(e,0))))}}}const ye={"start-event":{name:`开始`,title:`开始事件`,iconClass:`circle start-event`},activity:{name:`任务`,title:`任务活动`,iconClass:`rect activity`},gateway:{name:`网关`,title:`排他网关`,iconClass:`diamond gateway`},"end-event":{name:`结束`,title:`结束事件`,iconClass:`circle end-event`}},be={event:`事件`,activity:`活动`,gateway:`网关`,"bpmn-edge":`连接线`},xe=[`top`,`right`,`bottom`,`left`],Se=(e,t=`rect`)=>e.reduce((e,n)=>{let r=t===`circle`,i=n===`top`?r?{refCx:.5,refCy:0}:{refX:.5,refY:0}:n===`right`?r?{refCx:1,refCy:.5}:{refX:1,refY:.5}:n===`bottom`?r?{refCx:.5,refCy:1}:{refX:.5,refY:1}:r?{refCx:0,refCy:.5}:{refX:0,refY:.5};return e[`port-${n}`]={ref:`body`,...i,r:4,fill:`#31d0c6`,stroke:`#ffffff`,strokeWidth:2,magnet:!0,style:{cursor:`crosshair`,opacity:0,transition:`opacity 0.2s`}},e},{}),Ce={event:{inherit:`circle`,attrs:{body:{strokeWidth:2,stroke:`#5F95FF`,fill:`#FFF`,magnet:!1,style:{cursor:`move`}},text:{fontSize:12,fill:`#262626`,textAnchor:`middle`,textVerticalAnchor:`middle`,pointerEvents:`none`}}},activity:{inherit:`rect`,attrs:{body:{rx:6,ry:6,stroke:`#5F95FF`,fill:`#EFF4FF`,strokeWidth:1,magnet:!1,style:{cursor:`move`}},text:{fontSize:12,fill:`#262626`,textAnchor:`middle`,textVerticalAnchor:`middle`,pointerEvents:`none`}}},gateway:{inherit:`polygon`,attrs:{body:{refPoints:`0,10 10,0 20,10 10,20`,strokeWidth:2,stroke:`#5F95FF`,fill:`#EFF4FF`,magnet:!1,style:{cursor:`move`}},text:{fontSize:20,fill:`#5F95FF`,textAnchor:`middle`,textVerticalAnchor:`middle`,pointerEvents:`none`}}}},we={inherit:`edge`,attrs:{line:{stroke:`#A2B1C3`,strokeWidth:2,targetMarker:{name:`block`,width:8,height:6,fill:`#A2B1C3`},cursor:`pointer`}}};function Te(e=!1){let t={background:e?`#18181c`:`#ffffff`,gridPrimary:e?`rgba(255, 255, 255, 0.08)`:`#eee`,gridSecondary:e?`rgba(255, 255, 255, 0.04)`:`#ddd`};return{background:{color:t.background},grid:{visible:!0,type:`doubleMesh`,args:[{color:t.gridPrimary,thickness:1},{color:t.gridSecondary,thickness:1,factor:4}]},mousewheel:{enabled:!0,zoomAtMousePosition:!0,modifiers:`ctrl`,minScale:.5,maxScale:3},connecting:{router:`manhattan`,connector:{name:`rounded`,args:{radius:8}},allowBlank:!1,allowLoop:!1,allowNode:!1,snap:!0,allowEdge:!1},highlighting:{magnetAvailable:{name:`stroke`,args:{attrs:{fill:`#31d0c6`,stroke:`#31d0c6`,opacity:1}}},magnetAdsorbed:{name:`stroke`,args:{attrs:{fill:`#5F95FF`,stroke:`#5F95FF`,opacity:1}}}},selecting:{enabled:!0,rubberband:!0,showNodeSelectionBox:!0},resizing:!0,rotating:!1,snapline:!0,keyboard:!0,clipboard:!0}}Te();const Ee={"start-event":{shape:`event`,width:50,height:50,label:`开始事件`,data:{type:`start`}},"end-event":{shape:`event`,width:50,height:50,label:`结束事件`,data:{type:`end`}},activity:{shape:`activity`,width:120,height:60,label:`新活动`,data:{description:``,assignee:``}},gateway:{shape:`gateway`,width:40,height:40,label:`+`,data:{type:`exclusive`}}},De=[{id:`start-1`,shape:`event`,x:100,y:200,width:50,height:50,label:`流程开始`,data:{type:`start`}},{id:`activity-1`,shape:`activity`,x:200,y:180,width:120,height:60,label:`用户申请`,data:{description:`用户提交申请表单`,assignee:`申请人`}},{id:`activity-2`,shape:`activity`,x:380,y:180,width:120,height:60,label:`初审`,data:{description:`部门进行初步审核`,assignee:`部门主管`}},{id:`gateway-1`,shape:`gateway`,x:550,y:200,width:40,height:40,label:`+`,data:{type:`exclusive`}},{id:`activity-3`,shape:`activity`,x:650,y:120,width:120,height:60,label:`终审`,data:{description:`高级主管最终审核`,assignee:`总监`}},{id:`activity-4`,shape:`activity`,x:650,y:260,width:120,height:60,label:`驳回处理`,data:{description:`处理驳回流程`,assignee:`专员`}},{id:`end-1`,shape:`event`,x:820,y:140,width:50,height:50,label:`审批通过`,data:{type:`end`}},{id:`end-2`,shape:`event`,x:820,y:280,width:50,height:50,label:`审批驳回`,data:{type:`end`}},{id:`edge-1`,shape:`bpmn-edge`,source:`start-1`,target:`activity-1`,x:0,y:0},{id:`edge-2`,shape:`bpmn-edge`,source:`activity-1`,target:`activity-2`,x:0,y:0},{id:`edge-3`,shape:`bpmn-edge`,source:`activity-2`,target:`gateway-1`,x:0,y:0},{id:`edge-4`,shape:`bpmn-edge`,source:`gateway-1`,target:`activity-3`,label:`通过`,x:0,y:0},{id:`edge-5`,shape:`bpmn-edge`,source:`gateway-1`,target:`activity-4`,label:`驳回`,x:0,y:0},{id:`edge-6`,shape:`bpmn-edge`,source:`activity-3`,target:`end-1`,x:0,y:0},{id:`edge-7`,shape:`bpmn-edge`,source:`activity-4`,target:`end-2`,x:0,y:0}],Oe={key:0,class:`property-panel`},ke={class:`property-item`},Ae={class:`property-item`},je={key:0,class:`property-item`},Me={key:1,class:`property-item`},Ne={class:`form-actions`};var Pe=r(f({__name:`BPMNPropertyEditor`,props:p({show:{type:Boolean}},{editingElement:{},editingElementModifiers:{}}),emits:p([`update:show`,`save`,`delete`],[`update:editingElement`]),setup(e,{emit:t}){let n=T(e,`editingElement`),r=t,i=a(()=>be[n.value?.shape]||n.value?.shape||``);return(t,a)=>(v(),o(w(N),{show:e.show,width:`300`,title:`属性设置`,"onUpdate:show":a[6]||=e=>r(`update:show`,e)},{default:D(()=>[n.value?(v(),c(`div`,Oe,[l(`div`,ke,[a[7]||=l(`div`,{class:`property-label`},`名称`,-1),d(w(z),{value:n.value.label,"onUpdate:value":a[0]||=e=>n.value.label=e,placeholder:`请输入名称`,size:`small`},null,8,[`value`])]),l(`div`,Ae,[a[8]||=l(`div`,{class:`property-label`},`类型`,-1),d(w(z),{value:i.value,readonly:``,size:`small`},null,8,[`value`])]),n.value.shape===`activity`?(v(),c(`div`,je,[a[9]||=l(`div`,{class:`property-label`},`描述`,-1),d(w(z),{value:n.value.description,"onUpdate:value":a[1]||=e=>n.value.description=e,type:`textarea`,rows:3,placeholder:`请输入活动描述`,size:`small`},null,8,[`value`])])):s(`v-if`,!0),n.value.shape===`activity`?(v(),c(`div`,Me,[a[10]||=l(`div`,{class:`property-label`},`执行人`,-1),d(w(z),{value:n.value.assignee,"onUpdate:value":a[2]||=e=>n.value.assignee=e,placeholder:`请输入执行人`,size:`small`},null,8,[`value`])])):s(`v-if`,!0),l(`div`,Ne,[d(w(U),null,{default:D(()=>[d(w(k),{onClick:a[3]||=e=>r(`save`),type:`primary`,size:`small`},{default:D(()=>[...a[11]||=[u(` 保存 `,-1)]]),_:1}),d(w(k),{onClick:a[4]||=e=>r(`update:show`,!1),size:`small`},{default:D(()=>[...a[12]||=[u(` 取消 `,-1)]]),_:1}),d(w(k),{onClick:a[5]||=e=>r(`delete`),type:`error`,size:`small`},{default:D(()=>[...a[13]||=[u(` 删除 `,-1)]]),_:1})]),_:1})])])):s(`v-if`,!0)]),_:1},8,[`show`]))}}),[[`__scopeId`,`data-v-fc8f213e`]]);const Fe={class:`bpmn-layout`},Ie={key:0,class:`top-toolbar`},Le={class:`toolbar-section`},Re={class:`toolbar-group`},ze={class:`toolbar-group`},Be={class:`toolbar-group`},Ve={class:`main-content`},He={key:0,class:`left-panel`},Ue={class:`element-grid`},We=[`onClick`,`title`],Ge={class:`graph-wrapper`};var Ke=r(f({__name:`index`,props:{data:{},showToolbar:{type:Boolean,default:!0},readonly:{type:Boolean,default:!1},width:{default:`100%`},height:{default:`600px`},theme:{}},emits:[`ready`,`data-change`],setup(t,{expose:r,emit:o}){let f=t,p=o,m=y(),{graph:h,initGraph:ee,centerContent:_,zoomToFit:x,scheduleZoomToFit:S}=J(m,a(()=>f.theme===`dark`)),{exportOptions:T,handleExport:O}=$(h,`bpmn-diagram`),{bindInteractions:A}=ve(h,{portPositions:xe,onDataChange:()=>U(),isReadonly:()=>f.readonly}),j=y(!1),M=y(),N=e=>String(e.attr(`text/text`)||e.attr(`label/text`)||``),P=e=>{if(!e)return[];if(Array.isArray(e))return e;let t=[];return Object.values(e).forEach(e=>{Array.isArray(e)&&t.push(...e)}),t},F=()=>{let e=xe.map(e=>({tagName:`circle`,selector:`port-${e}`})),t=[`event`,`activity`,`gateway`],n={event:`circle`,activity:`rect`,gateway:`polygon`};t.forEach(t=>{W.registerNode(t,{...Ce[t],markup:[{tagName:n[t],selector:`body`},{tagName:`text`,selector:`text`},...e],attrs:{...Ce[t].attrs,...Se(xe,n[t])}},!0)}),W.registerEdge(`bpmn-edge`,we,!0)},I=t=>{if(!h.value)return;let n=t.map(t=>{let{data:n,...r}=t,i=t.shape===`bpmn-edge`?h.value.createEdge(r):h.value.createNode(r);return n&&i.setData(e(n)),i});h.value.resetCells(n),n.length&&S(200,50)},L=t=>{if(f.readonly||!h.value)return;let n=Ee[t];if(!n)return;let r=h.value.options.width/2,i=h.value.options.height/2,{data:a,...o}={id:`${t}-${Date.now()}`,x:r+Math.random()*100-50,y:i+Math.random()*100-50,...n},s=h.value.createNode(o);a&&s.setData(e(a)),h.value.addCell(s),U()},R=()=>{f.readonly||(h.value?.clearCells(),U())},z=e=>{if(f.readonly)return;let t=e.getData()||{};M.value={id:e.id,shape:e.shape,label:N(e),description:t.description||``,assignee:t.assignee||``,x:0,y:0},j.value=!0},B=()=>{if(f.readonly||!h.value||!M.value)return;let e=h.value.getCellById(M.value.id);e&&(e.setData({description:M.value.description,assignee:M.value.assignee}),e.attr(`text/text`,M.value.label||``),e.attr(`label/text`,M.value.label||``)),j.value=!1,U()},V=()=>{f.readonly||!h.value||!M.value||(h.value.getCellById(M.value.id)?.remove(),j.value=!1,U())},H=()=>h.value?[...h.value.getNodes().map(t=>({id:t.id,shape:t.shape,x:t.getPosition().x,y:t.getPosition().y,width:t.getSize().width,height:t.getSize().height,label:N(t),data:e(t.getData()||{})})),...h.value.getEdges().map(t=>({id:t.id,shape:`bpmn-edge`,source:t.getSourceCellId()||``,target:t.getTargetCellId()||``,label:N(t),data:e(t.getData()||{}),x:0,y:0}))]:[],U=()=>{f.readonly||p(`data-change`,H())};return E(h,e=>{e instanceof W&&(se(e,()=>f.readonly),A(),e.on(`node:dblclick`,({node:e})=>z(e)),e.on(`node:moved`,U),p(`ready`,e),I(f.data===void 0?De:P(f.data)))},{immediate:!0}),E(()=>f.data,e=>{h.value&&I(e===void 0?De:P(e))},{deep:!0}),E(()=>f.readonly,e=>{e&&(j.value=!1,M.value=void 0)},{flush:`sync`}),te(async()=>{F();let e=Te();await ee({...e,interacting:()=>!f.readonly,connecting:{...e.connecting,validateMagnet:()=>!f.readonly,validateEdge:()=>!f.readonly,createEdge:()=>h.value.createEdge({shape:`bpmn-edge`}),validateConnection:({sourceView:e,targetView:t,sourceMagnet:n,targetMagnet:r})=>!f.readonly&&e!==t&&!!n&&!!r&&n.getAttribute(`magnet`)===`true`&&r.getAttribute(`magnet`)===`true`}})}),r({getGraph:()=>h.value,getData:H,loadData:I}),(e,r)=>(v(),c(`div`,Fe,[t.showToolbar?(v(),c(`div`,Ie,[l(`div`,Le,[l(`div`,Re,[d(w(k),{onClick:R,disabled:t.readonly,size:`small`},{icon:D(()=>[d(n,{name:`mdi:delete-outline`,size:16})]),default:D(()=>[r[3]||=u(` 清空 `,-1)]),_:1},8,[`disabled`])]),l(`div`,ze,[d(w(k),{onClick:w(_),size:`small`},{icon:D(()=>[d(n,{name:`mdi:image-filter-center-focus`,size:16})]),default:D(()=>[r[4]||=u(` 居中 `,-1)]),_:1},8,[`onClick`]),d(w(k),{onClick:w(x),size:`small`},{icon:D(()=>[d(n,{name:`mdi:fit-to-screen`,size:16})]),default:D(()=>[r[5]||=u(` 适应 `,-1)]),_:1},8,[`onClick`])]),l(`div`,Be,[d(w(ne),{options:w(T),onSelect:r[0]||=e=>w(O)(e,H)},{default:D(()=>[d(w(k),{size:`small`},{icon:D(()=>[d(n,{name:`mdi:export`,size:16})]),default:D(()=>[r[6]||=u(` 导出 `,-1)]),_:1})]),_:1},8,[`options`])])])])):s(`v-if`,!0),l(`div`,Ve,[t.showToolbar&&!t.readonly?(v(),c(`div`,He,[r[7]||=l(`div`,{class:`panel-title`},`组件`,-1),l(`div`,Ue,[(v(!0),c(i,null,b(w(ye),(e,t)=>(v(),c(`div`,{key:t,class:`element-item`,onClick:e=>L(t),title:e.title},[l(`div`,{class:g([`element-icon`,e.iconClass])},null,2),l(`span`,null,C(e.name),1)],8,We))),128))])])):s(`v-if`,!0),l(`div`,Ge,[l(`div`,{ref_key:`containerRef`,ref:m,class:`graph-container`},null,512)])]),d(Pe,{show:j.value,"editing-element":M.value,"onUpdate:editingElement":r[1]||=e=>M.value=e,"onUpdate:show":r[2]||=e=>j.value=e,onSave:B,onDelete:V},null,8,[`show`,`editing-element`])]))}}),[[`__scopeId`,`data-v-a7aebb58`]]);const qe={key:0,class:`class-editor`},Je={class:`section`},Ye={class:`section-header`},Xe={style:{"font-size":`13px`}},Ze={class:`section`},Qe={class:`section-header`},$e={style:{"font-size":`13px`}};var et=r(f({__name:`UMLClassEditor`,props:p({show:{type:Boolean}},{editingClass:{},editingClassModifiers:{}}),emits:p([`update:show`,`save`,`delete`],[`update:editingClass`]),setup(e,{emit:t}){let r=T(e,`editingClass`),a=t;return(t,f)=>(v(),o(w(N),{show:e.show,width:`450`,title:`编辑类`,"onUpdate:show":f[6]||=e=>a(`update:show`,e)},{default:D(()=>[r.value?(v(),c(`div`,qe,[d(w(F),{"label-placement":`top`},{default:D(()=>[d(w(I),{label:`类名`},{default:D(()=>[d(w(z),{value:r.value.name,"onUpdate:value":f[0]||=e=>r.value.name=e,placeholder:`请输入类名`},null,8,[`value`])]),_:1}),d(w(M),{style:{margin:`20px 0`}},{default:D(()=>[...f[7]||=[u(`属性`,-1)]]),_:1}),l(`div`,Je,[(v(!0),c(i,null,b(r.value.attributes,(e,t)=>(v(),c(`div`,{key:t,class:`item`},[d(w(A),{size:`small`,style:{"margin-bottom":`12px`}},{header:D(()=>[l(`div`,Ye,[l(`span`,Xe,`#`+C(t+1)+` `+C(e.name||`新属性`),1),d(w(k),{onClick:e=>r.value.attributes.splice(t,1),size:`tiny`,type:`error`,quaternary:``,style:{"margin-left":`auto`}},{default:D(()=>[...f[8]||=[u(` 删除 `,-1)]]),_:1},8,[`onClick`])])]),default:D(()=>[d(w(U),{vertical:``,size:`small`},{default:D(()=>[d(w(U),null,{default:D(()=>[d(w(I),{label:`属性名`,style:{margin:`0`,flex:`1`}},{default:D(()=>[d(w(z),{value:e.name,"onUpdate:value":t=>e.name=t,placeholder:`属性名`,size:`small`},null,8,[`value`,`onUpdate:value`])]),_:2},1024),d(w(I),{label:`类型`,style:{margin:`0`,flex:`1`}},{default:D(()=>[d(w(z),{value:e.type,"onUpdate:value":t=>e.type=t,placeholder:`类型`,size:`small`},null,8,[`value`,`onUpdate:value`])]),_:2},1024)]),_:2},1024),d(w(I),{label:`可见性`,style:{margin:`0`}},{default:D(()=>[d(w(V),{value:e.visibility,"onUpdate:value":t=>e.visibility=t,size:`small`},{default:D(()=>[d(w(B),{value:`public`},{default:D(()=>[...f[9]||=[u(`+ public`,-1)]]),_:1}),d(w(B),{value:`private`},{default:D(()=>[...f[10]||=[u(`- private`,-1)]]),_:1}),d(w(B),{value:`protected`},{default:D(()=>[...f[11]||=[u(`# protected`,-1)]]),_:1})]),_:1},8,[`value`,`onUpdate:value`])]),_:2},1024)]),_:2},1024)]),_:2},1024)]))),128)),d(w(k),{onClick:f[1]||=e=>r.value.attributes.push({name:`newAttribute`,type:`string`,visibility:`private`}),dashed:``,block:``,type:`primary`,ghost:``,size:`small`},{icon:D(()=>[d(n,{name:`mdi:plus`,size:16})]),default:D(()=>[f[12]||=u(` 添加属性 `,-1)]),_:1})]),d(w(M),{style:{margin:`20px 0`}},{default:D(()=>[...f[13]||=[u(`方法`,-1)]]),_:1}),l(`div`,Ze,[(v(!0),c(i,null,b(r.value.methods,(e,t)=>(v(),c(`div`,{key:t,class:`item`},[d(w(A),{size:`small`,style:{"margin-bottom":`12px`}},{header:D(()=>[l(`div`,Qe,[l(`span`,$e,`#`+C(t+1)+` `+C(e.name||`新方法`),1),d(w(k),{onClick:e=>r.value.methods.splice(t,1),size:`tiny`,type:`error`,quaternary:``,style:{"margin-left":`auto`}},{default:D(()=>[...f[14]||=[u(` 删除 `,-1)]]),_:1},8,[`onClick`])])]),default:D(()=>[d(w(U),{vertical:``,size:`small`},{default:D(()=>[d(w(U),null,{default:D(()=>[d(w(I),{label:`方法名`,style:{margin:`0`,flex:`1`}},{default:D(()=>[d(w(z),{value:e.name,"onUpdate:value":t=>e.name=t,placeholder:`方法名`,size:`small`},null,8,[`value`,`onUpdate:value`])]),_:2},1024),d(w(I),{label:`返回类型`,style:{margin:`0`,flex:`1`}},{default:D(()=>[d(w(z),{value:e.returnType,"onUpdate:value":t=>e.returnType=t,placeholder:`返回类型`,size:`small`},null,8,[`value`,`onUpdate:value`])]),_:2},1024)]),_:2},1024),d(w(I),{label:`可见性`,style:{margin:`0`}},{default:D(()=>[d(w(V),{value:e.visibility,"onUpdate:value":t=>e.visibility=t,size:`small`},{default:D(()=>[d(w(B),{value:`public`},{default:D(()=>[...f[15]||=[u(`+ public`,-1)]]),_:1}),d(w(B),{value:`private`},{default:D(()=>[...f[16]||=[u(`- private`,-1)]]),_:1}),d(w(B),{value:`protected`},{default:D(()=>[...f[17]||=[u(`# protected`,-1)]]),_:1})]),_:1},8,[`value`,`onUpdate:value`])]),_:2},1024)]),_:2},1024)]),_:2},1024)]))),128)),d(w(k),{onClick:f[2]||=e=>r.value.methods.push({name:`newMethod`,returnType:`void`,visibility:`public`}),dashed:``,block:``,type:`primary`,ghost:``,size:`small`},{icon:D(()=>[d(n,{name:`mdi:plus`,size:16})]),default:D(()=>[f[18]||=u(` 添加方法 `,-1)]),_:1})]),d(w(M),{style:{margin:`20px 0`}}),d(w(U),{justify:`space-between`},{default:D(()=>[d(w(k),{onClick:f[3]||=e=>a(`delete`),type:`error`,ghost:``},{icon:D(()=>[d(n,{name:`mdi:delete`,size:16})]),default:D(()=>[f[19]||=u(` 删除类 `,-1)]),_:1}),d(w(U),null,{default:D(()=>[d(w(k),{onClick:f[4]||=e=>a(`update:show`,!1)},{default:D(()=>[...f[20]||=[u(`取消`,-1)]]),_:1}),d(w(k),{onClick:f[5]||=e=>a(`save`),type:`primary`},{default:D(()=>[...f[21]||=[u(` 保存 `,-1)]]),_:1})]),_:1})]),_:1})]),_:1})])):s(`v-if`,!0)]),_:1},8,[`show`]))}}),[[`__scopeId`,`data-v-c37f7424`]]);const tt={public:`+`,private:`-`,protected:`#`},nt={extends:{strokeDasharray:0,targetMarker:{name:`block`,width:10,height:8,fill:`white`,stroke:`#722ed1`,strokeWidth:2}},implement:{strokeDasharray:`8,4`,targetMarker:{name:`block`,width:10,height:8,fill:`white`,stroke:`#722ed1`,strokeWidth:2}},dependency:{strokeDasharray:`6,4`,targetMarker:{name:`classic`,size:8,fill:`#722ed1`}},composition:{strokeDasharray:0,sourceMarker:{name:`diamond`,width:12,height:8,fill:`#722ed1`,stroke:`#722ed1`}},aggregation:{strokeDasharray:0,sourceMarker:{name:`diamond`,width:12,height:8,fill:`white`,stroke:`#722ed1`,strokeWidth:2}},association:{strokeDasharray:0,targetMarker:{name:`classic`,size:8,fill:`#722ed1`}}},rt=[`top`,`right`,`bottom`,`left`].reduce((e,t)=>{let n=t===`top`?{refX:.5,refY:0}:t===`right`?{refX:1,refY:.5}:t===`bottom`?{refX:.5,refY:1}:{refX:0,refY:.5};return e[`port-${t}`]={ref:`body`,...n,r:4,fill:`#31d0c6`,stroke:`#ffffff`,strokeWidth:2,magnet:!0,style:{cursor:`crosshair`,opacity:0,transition:`opacity 0.2s`}},e},{}),it={inherit:`rect`,markup:[{tagName:`rect`,selector:`body`},{tagName:`rect`,selector:`name-rect`},{tagName:`rect`,selector:`attrs-rect`},{tagName:`rect`,selector:`methods-rect`},{tagName:`text`,selector:`name-text`},{tagName:`text`,selector:`attrs-text`},{tagName:`text`,selector:`methods-text`},{tagName:`circle`,selector:`port-top`},{tagName:`circle`,selector:`port-right`},{tagName:`circle`,selector:`port-bottom`},{tagName:`circle`,selector:`port-left`}],attrs:{rect:{width:160},body:{stroke:`#5f95ff`,strokeWidth:1,fill:`#fff`,magnet:!1,style:{cursor:`move`}},"name-rect":{fill:`#5f95ff`,stroke:`#fff`,strokeWidth:.5,magnet:!1,style:{cursor:`move`}},"attrs-rect":{fill:`#eff4ff`,stroke:`#fff`,strokeWidth:.5,magnet:!1,style:{cursor:`move`}},"methods-rect":{fill:`#eff4ff`,stroke:`#fff`,strokeWidth:.5,magnet:!1,style:{cursor:`move`}},"name-text":{ref:`name-rect`,refY:.5,refX:.5,textAnchor:`middle`,fontWeight:`bold`,fill:`#fff`,fontSize:12,pointerEvents:`none`},"attrs-text":{ref:`attrs-rect`,refY:.5,refX:5,textAnchor:`left`,fill:`black`,fontSize:10,pointerEvents:`none`},"methods-text":{ref:`methods-rect`,refY:.5,refX:5,textAnchor:`left`,fill:`black`,fontSize:10,pointerEvents:`none`},...rt}},at={router:`manhattan`,connector:{name:`rounded`,args:{radius:8}},allowBlank:!1,allowLoop:!1,allowNode:!1,snap:!0,allowEdge:!1},ot={magnetAvailable:{name:`stroke`,args:{attrs:{fill:`#31d0c6`,stroke:`#31d0c6`,opacity:1}}},magnetAdsorbed:{name:`stroke`,args:{attrs:{fill:`#5F95FF`,stroke:`#5F95FF`,opacity:1}}}},st={shape:`extends`,attrs:{line:{stroke:`#722ed1`,strokeWidth:2,targetMarker:{name:`block`,width:8,height:6,fill:`#722ed1`}}}},ct=[{id:`animal`,name:`<<Abstract>>
2
2
  动物`,x:342,y:98,attributes:[{name:`名字`,type:`string`,visibility:`public`}],methods:[{name:`新陈代谢`,returnType:`void`,visibility:`public`},{name:`繁殖`,returnType:`void`,visibility:`public`}]},{id:`bird`,name:`鸟`,x:575,y:280,attributes:[{name:`羽毛`,type:`string`,visibility:`public`},{name:`下蛋`,type:`boolean`,visibility:`public`}],methods:[]},{id:`mammal`,name:`哺乳动物`,x:844,y:319,attributes:[{name:`翅膀`,type:`boolean`,visibility:`public`}],methods:[]},{id:`dog`,name:`狗`,x:656,y:456,attributes:[{name:`下蛋`,type:`boolean`,visibility:`public`}],methods:[]},{id:`enterprise`,name:`企鹅`,x:984,y:456,attributes:[{name:`下蛋`,type:`boolean`,visibility:`public`}],methods:[]},{id:`sparrow`,name:`麻雀`,x:531,y:608,attributes:[{name:`学飞`,type:`boolean`,visibility:`public`}],methods:[]},{id:`interface-flying`,name:`<<interface>>
3
- 飞翔`,x:762,y:608,attributes:[{name:`下蛋`,type:`boolean`,visibility:`public`}],methods:[]},{id:`qemu`,name:`气球`,x:981,y:608,attributes:[],methods:[]}],lt=[{id:`edge-1`,shape:`extends`,source:`bird`,target:`animal`},{id:`edge-2`,shape:`extends`,source:`mammal`,target:`animal`},{id:`edge-3`,shape:`extends`,source:`dog`,target:`mammal`},{id:`edge-4`,shape:`extends`,source:`enterprise`,target:`mammal`},{id:`edge-5`,shape:`extends`,source:`sparrow`,target:`bird`},{id:`edge-6`,shape:`implement`,source:`sparrow`,target:`interface-flying`},{id:`edge-7`,shape:`implement`,source:`enterprise`,target:`interface-flying`},{id:`edge-8`,shape:`association`,source:`bird`,target:`mammal`,label:`1:2`}],ut=e=>tt[e]||`+`,dt={name:`新类`,attributes:[{name:`attribute`,type:`string`,visibility:`private`}],methods:[{name:`method`,returnType:`void`,visibility:`public`}],position:{x:100,y:100}},ft={class:`uml-layout`},pt={key:0,class:`toolbar`};var mt=r(f({__name:`index`,props:{data:{},showToolbar:{type:Boolean,default:!0},readonly:{type:Boolean,default:!1},width:{default:`100%`},height:{default:`600px`},theme:{}},emits:[`ready`,`data-change`],setup(t,{expose:r,emit:i}){let o=t,f=i,p=b(),{graph:m,initGraph:h,centerContent:g,zoomToFit:v,scheduleZoomToFit:x}=J(p,a(()=>o.theme===`dark`)),{exportOptions:S,handleExport:C}=$(m,`uml-diagram`),{bindInteractions:w}=ve(m,{defaultColor:`#722ed1`,portPositions:[`top`,`right`,`bottom`,`left`],onDataChange:()=>z(),isReadonly:()=>o.readonly}),E=b(!1),k=b(),j=()=>{G.registerNode(`class`,{...it,propHooks(e){let{name:t,attributes:n,methods:r,...i}=e;if(!(t&&n&&r))return e;let a=0;return[{type:`name`,text:t},{type:`attrs`,text:n},{type:`methods`,text:r}].forEach(e=>{let t=Array.isArray(e.text)?e.text.length*12+16:32;K.setByPath(i,`attrs/${e.type}-text/text`,Array.isArray(e.text)?e.text.join(`
4
- `):e.text),K.setByPath(i,`attrs/${e.type}-rect/height`,t),K.setByPath(i,`attrs/${e.type}-rect/transform`,`translate(0,${a})`),a+=t}),i.size={width:160,height:a},i}},!0),Object.entries(nt).forEach(([e,t])=>{G.registerEdge(e,{inherit:`edge`,attrs:{line:{strokeWidth:2,stroke:`#722ed1`,...t}}},!0)})},M=t=>{if(!m.value)return;let n=[`extends`,`composition`,`implement`,`dependency`,`aggregation`,`association`],r=[];t.forEach(t=>{if(n.includes(t.shape)){let n=m.value.createEdge(t);t.data&&n.setData(e(t.data)),r.push(n)}else{let{data:n,...i}=t,a=m.value.createNode(i);n&&a.setData(e(n)),r.push(a)}}),m.value.resetCells(r),r.length&&x(200,10)},N=e=>({name:e.name,attributes:e.attributes.map(e=>`${ut(e.visibility)} ${e.name}: ${e.type}`),methods:e.methods.map(e=>`${ut(e.visibility)} ${e.name}(): ${e.returnType}`)}),P=()=>{if(o.readonly||!m.value)return;let t={id:`class_${Date.now()}`,...e(dt)},n={id:t.id,shape:`class`,x:t.position.x,y:t.position.y,...N(t),data:t};m.value.addCell(m.value.createNode(n)),z()},F=t=>{o.readonly||(k.value=e(t),E.value=!0)},I=()=>{if(o.readonly||!m.value||!k.value)return;let t=m.value.getCellById(k.value.id);t&&(t.setData(e(k.value)),t.prop(N(k.value))),E.value=!1,z()},L=()=>{o.readonly||!m.value||!k.value||(m.value.getCellById(k.value.id)?.remove(),E.value=!1,z())},R=()=>({classes:m.value?.getNodes().map(t=>({...e(t.getData()),position:t.getPosition()}))||[],relations:m.value?.getEdges().map(e=>{let t=e.getData();return{id:e.id,type:e.shape===`extends`?`inheritance`:e.shape===`implement`?`implementation`:e.shape,source:e.getSourceCellId()||``,target:e.getTargetCellId()||``,name:t?.name,multiplicity:t?.multiplicity}})||[]}),z=()=>{o.readonly||f(`data-change`,R())},B=e=>{M([...e.classes.map(e=>({id:e.id,shape:`class`,x:e.position?.x??50,y:e.position?.y??50,...N(e),data:e})),...e.relations.map(e=>({id:e.id,shape:e.type===`inheritance`?`extends`:e.type===`implementation`?`implement`:e.type,source:e.source,target:e.target,data:{name:e.name,multiplicity:e.multiplicity}}))])};return D(m,e=>{if(!(e instanceof G))return;j(),se(e,()=>o.readonly),w(),e.on(`node:dblclick`,({node:e})=>{!o.readonly&&e.getData()&&F(e.getData())}),e.on(`node:moved`,z),f(`ready`,e);let t=[...ct.map(e=>({id:e.id,shape:`class`,x:e.x,y:e.y,...N(e),data:{id:e.id,name:e.name,attributes:e.attributes,methods:e.methods,position:{x:e.x,y:e.y}}})),...lt];o.data?B(o.data):M(t)},{immediate:!0}),D(()=>o.data,e=>{m.value&&e&&B(e)},{deep:!0}),D(()=>o.readonly,e=>{e&&(E.value=!1,k.value=void 0)},{flush:`sync`}),ee(()=>{h({interacting:()=>!o.readonly,connecting:{...at,validateMagnet:()=>!o.readonly,validateEdge:()=>!o.readonly,createEdge:()=>m.value.createEdge(st),validateConnection:({sourceView:e,targetView:t,sourceMagnet:n,targetMagnet:r})=>!o.readonly&&e!==t&&!!n&&!!r&&n.getAttribute(`magnet`)===`true`&&r.getAttribute(`magnet`)===`true`},highlighting:ot})}),r({getGraph:()=>m.value,getData:R,addClass:P,centerContent:g,zoomToFit:v}),(e,r)=>(y(),c(`div`,ft,[t.showToolbar?(y(),c(`div`,pt,[d(T(W),null,{default:O(()=>[d(T(A),{onClick:P,disabled:t.readonly,type:`primary`,size:`small`},{icon:O(()=>[d(n,{name:`mdi:plus-box`,size:16})]),default:O(()=>[r[3]||=u(` 添加类 `,-1)]),_:1},8,[`disabled`]),d(T(A),{onClick:T(g),size:`small`},{icon:O(()=>[d(n,{name:`mdi:image-filter-center-focus`,size:16})]),default:O(()=>[r[4]||=u(` 居中 `,-1)]),_:1},8,[`onClick`]),d(T(A),{onClick:T(v),size:`small`},{icon:O(()=>[d(n,{name:`mdi:fit-to-screen`,size:16})]),default:O(()=>[r[5]||=u(` 适应 `,-1)]),_:1},8,[`onClick`]),d(T(te),{options:T(S),onSelect:r[0]||=e=>T(C)(e,R)},{default:O(()=>[d(T(A),{size:`small`},{icon:O(()=>[d(n,{name:`mdi:export`,size:16})]),default:O(()=>[r[6]||=u(` 导出 `,-1)]),_:1})]),_:1},8,[`options`])]),_:1})])):s(`v-if`,!0),l(`div`,{ref_key:`containerRef`,ref:p,class:`graph-container`,style:_({width:o.width,height:o.height})},null,4),d(et,{show:E.value,"editing-class":k.value,"onUpdate:editingClass":r[1]||=e=>k.value=e,"onUpdate:show":r[2]||=e=>E.value=e,onSave:I,onDelete:L},null,8,[`show`,`editing-class`])]))}}),[[`__scopeId`,`data-v-90e76429`]]);const ht=e=>e===`task`?`activity`:e===`gateway`?`gateway`:`event`,gt=e=>{let t=e.data?.type;return t===`start`||t===`end`||t===`task`||t===`gateway`||t===`event`?t:e.shape===`activity`?`task`:e.shape===`gateway`?`gateway`:`event`},_t=e=>[...e.nodes.map(e=>{let t=ht(e.type);return{id:e.id,shape:t,x:e.position.x,y:e.position.y,width:t===`activity`?120:t===`gateway`?40:50,height:t===`activity`?60:t===`gateway`?40:50,label:e.name,data:{...e.properties,type:e.type}}}),...e.flows.map(e=>({id:e.id,shape:`bpmn-edge`,source:e.source,target:e.target,label:e.name,x:0,y:0,data:e.condition?{condition:e.condition}:void 0}))],vt=e=>({nodes:e.filter(e=>e.shape!==`bpmn-edge`).map(e=>{let t={...e.data};return delete t.type,{id:e.id,type:gt(e),name:e.label??``,position:{x:e.x,y:e.y},properties:t}}),flows:e.filter(e=>e.shape===`bpmn-edge`).map(e=>({id:e.id,source:e.source??``,target:e.target??``,name:e.label,condition:typeof e.data?.condition==`string`?e.data.condition:void 0}))}),yt={class:`c-antv-container`};var bt=r(f({name:`C_AntV`,__name:`index`,props:{type:{},data:{},width:{default:`100%`},height:{default:`600px`},readonly:{type:Boolean,default:!1},showToolbar:{type:Boolean,default:!0},theme:{default:`light`}},emits:[`ready`,`data-change`],setup(e,{expose:t,emit:n}){let r=e,i=n,s=b(),l={er:ge,bpmn:Ke,uml:mt},u=a(()=>l[r.type]),d=a(()=>{let e={width:r.width,height:r.height,readonly:r.readonly,showToolbar:r.showToolbar,theme:r.theme},t=r.type===`bpmn`&&r.data&&`nodes`in r.data?_t(r.data):r.data;return{...e,data:t}}),f=e=>{i(`ready`,e)},p=e=>{i(`data-change`,r.type===`bpmn`&&Array.isArray(e)?vt(e):e)};return t({getGraph:()=>s.value?.getGraph()??void 0,getData:()=>{let e=s.value?.getData();return r.type===`bpmn`&&Array.isArray(e)?vt(e):Array.isArray(e)?void 0:e}}),(e,t)=>(y(),c(`div`,yt,[(y(),o(S(u.value),m(d.value,{onReady:f,onDataChange:p,ref_key:`layoutRef`,ref:s}),null,16))]))}}),[[`__scopeId`,`data-v-f70bf9bd`]]);export{J as i,ve as n,$ as r,bt as t};
3
+ 飞翔`,x:762,y:608,attributes:[{name:`下蛋`,type:`boolean`,visibility:`public`}],methods:[]},{id:`qemu`,name:`气球`,x:981,y:608,attributes:[],methods:[]}],lt=[{id:`edge-1`,shape:`extends`,source:`bird`,target:`animal`},{id:`edge-2`,shape:`extends`,source:`mammal`,target:`animal`},{id:`edge-3`,shape:`extends`,source:`dog`,target:`mammal`},{id:`edge-4`,shape:`extends`,source:`enterprise`,target:`mammal`},{id:`edge-5`,shape:`extends`,source:`sparrow`,target:`bird`},{id:`edge-6`,shape:`implement`,source:`sparrow`,target:`interface-flying`},{id:`edge-7`,shape:`implement`,source:`enterprise`,target:`interface-flying`},{id:`edge-8`,shape:`association`,source:`bird`,target:`mammal`,label:`1:2`}],ut=e=>tt[e]||`+`,dt={name:`新类`,attributes:[{name:`attribute`,type:`string`,visibility:`private`}],methods:[{name:`method`,returnType:`void`,visibility:`public`}],position:{x:100,y:100}},ft={class:`uml-layout`},pt={key:0,class:`toolbar`};var mt=r(f({__name:`index`,props:{data:{},showToolbar:{type:Boolean,default:!0},readonly:{type:Boolean,default:!1},width:{default:`100%`},height:{default:`600px`},theme:{}},emits:[`ready`,`data-change`],setup(t,{expose:r,emit:i}){let o=t,f=i,p=y(),{graph:m,initGraph:h,centerContent:g,zoomToFit:_,scheduleZoomToFit:b}=J(p,a(()=>o.theme===`dark`)),{exportOptions:x,handleExport:S}=$(m,`uml-diagram`),{bindInteractions:C}=ve(m,{defaultColor:`#722ed1`,portPositions:[`top`,`right`,`bottom`,`left`],onDataChange:()=>R(),isReadonly:()=>o.readonly}),T=y(!1),O=y(),A=()=>{W.registerNode(`class`,{...it,propHooks(e){let{name:t,attributes:n,methods:r,...i}=e;if(!(t&&n&&r))return e;let a=0;return[{type:`name`,text:t},{type:`attrs`,text:n},{type:`methods`,text:r}].forEach(e=>{let t=Array.isArray(e.text)?e.text.length*12+16:32;G.setByPath(i,`attrs/${e.type}-text/text`,Array.isArray(e.text)?e.text.join(`
4
+ `):e.text),G.setByPath(i,`attrs/${e.type}-rect/height`,t),G.setByPath(i,`attrs/${e.type}-rect/transform`,`translate(0,${a})`),a+=t}),i.size={width:160,height:a},i}},!0),Object.entries(nt).forEach(([e,t])=>{W.registerEdge(e,{inherit:`edge`,attrs:{line:{strokeWidth:2,stroke:`#722ed1`,...t}}},!0)})},j=t=>{if(!m.value)return;let n=[`extends`,`composition`,`implement`,`dependency`,`aggregation`,`association`],r=[];t.forEach(t=>{if(n.includes(t.shape)){let n=m.value.createEdge(t);t.data&&n.setData(e(t.data)),r.push(n)}else{let{data:n,...i}=t,a=m.value.createNode(i);n&&a.setData(e(n)),r.push(a)}}),m.value.resetCells(r),r.length&&b(200,10)},M=e=>({name:e.name,attributes:e.attributes.map(e=>`${ut(e.visibility)} ${e.name}: ${e.type}`),methods:e.methods.map(e=>`${ut(e.visibility)} ${e.name}(): ${e.returnType}`)}),N=()=>{if(o.readonly||!m.value)return;let t={id:`class_${Date.now()}`,...e(dt)},n={id:t.id,shape:`class`,x:t.position.x,y:t.position.y,...M(t),data:t};m.value.addCell(m.value.createNode(n)),R()},P=t=>{o.readonly||(O.value=e(t),T.value=!0)},F=()=>{if(o.readonly||!m.value||!O.value)return;let t=m.value.getCellById(O.value.id);t&&(t.setData(e(O.value)),t.prop(M(O.value))),T.value=!1,R()},I=()=>{o.readonly||!m.value||!O.value||(m.value.getCellById(O.value.id)?.remove(),T.value=!1,R())},L=()=>({classes:m.value?.getNodes().map(t=>({...e(t.getData()),position:t.getPosition()}))||[],relations:m.value?.getEdges().map(e=>{let t=e.getData();return{id:e.id,type:e.shape===`extends`?`inheritance`:e.shape===`implement`?`implementation`:e.shape,source:e.getSourceCellId()||``,target:e.getTargetCellId()||``,name:t?.name,multiplicity:t?.multiplicity}})||[]}),R=()=>{o.readonly||f(`data-change`,L())},z=e=>{j([...e.classes.map(e=>({id:e.id,shape:`class`,x:e.position?.x??50,y:e.position?.y??50,...M(e),data:e})),...e.relations.map(e=>({id:e.id,shape:e.type===`inheritance`?`extends`:e.type===`implementation`?`implement`:e.type,source:e.source,target:e.target,data:{name:e.name,multiplicity:e.multiplicity}}))])};return E(m,e=>{if(!(e instanceof W))return;A(),se(e,()=>o.readonly),C(),e.on(`node:dblclick`,({node:e})=>{!o.readonly&&e.getData()&&P(e.getData())}),e.on(`node:moved`,R),f(`ready`,e);let t=[...ct.map(e=>({id:e.id,shape:`class`,x:e.x,y:e.y,...M(e),data:{id:e.id,name:e.name,attributes:e.attributes,methods:e.methods,position:{x:e.x,y:e.y}}})),...lt];o.data?z(o.data):j(t)},{immediate:!0}),E(()=>o.data,e=>{m.value&&e&&z(e)},{deep:!0}),E(()=>o.readonly,e=>{e&&(T.value=!1,O.value=void 0)},{flush:`sync`}),te(()=>{h({interacting:()=>!o.readonly,connecting:{...at,validateMagnet:()=>!o.readonly,validateEdge:()=>!o.readonly,createEdge:()=>m.value.createEdge(st),validateConnection:({sourceView:e,targetView:t,sourceMagnet:n,targetMagnet:r})=>!o.readonly&&e!==t&&!!n&&!!r&&n.getAttribute(`magnet`)===`true`&&r.getAttribute(`magnet`)===`true`},highlighting:ot})}),r({getGraph:()=>m.value,getData:L,addClass:N,centerContent:g,zoomToFit:_}),(e,r)=>(v(),c(`div`,ft,[t.showToolbar?(v(),c(`div`,pt,[d(w(U),null,{default:D(()=>[d(w(k),{onClick:N,disabled:t.readonly,type:`primary`,size:`small`},{icon:D(()=>[d(n,{name:`mdi:plus-box`,size:16})]),default:D(()=>[r[3]||=u(` 添加类 `,-1)]),_:1},8,[`disabled`]),d(w(k),{onClick:w(g),size:`small`},{icon:D(()=>[d(n,{name:`mdi:image-filter-center-focus`,size:16})]),default:D(()=>[r[4]||=u(` 居中 `,-1)]),_:1},8,[`onClick`]),d(w(k),{onClick:w(_),size:`small`},{icon:D(()=>[d(n,{name:`mdi:fit-to-screen`,size:16})]),default:D(()=>[r[5]||=u(` 适应 `,-1)]),_:1},8,[`onClick`]),d(w(ne),{options:w(x),onSelect:r[0]||=e=>w(S)(e,L)},{default:D(()=>[d(w(k),{size:`small`},{icon:D(()=>[d(n,{name:`mdi:export`,size:16})]),default:D(()=>[r[6]||=u(` 导出 `,-1)]),_:1})]),_:1},8,[`options`])]),_:1})])):s(`v-if`,!0),l(`div`,{ref_key:`containerRef`,ref:p,class:`graph-container`,style:ee({width:o.width,height:o.height})},null,4),d(et,{show:T.value,"editing-class":O.value,"onUpdate:editingClass":r[1]||=e=>O.value=e,"onUpdate:show":r[2]||=e=>T.value=e,onSave:F,onDelete:I},null,8,[`show`,`editing-class`])]))}}),[[`__scopeId`,`data-v-90e76429`]]);const ht=e=>e===`task`?`activity`:e===`gateway`?`gateway`:`event`,gt=e=>{let t=e.data?.type;return t===`start`||t===`end`||t===`task`||t===`gateway`||t===`event`?t:e.shape===`activity`?`task`:e.shape===`gateway`?`gateway`:`event`},_t=e=>[...e.nodes.map(e=>{let t=ht(e.type);return{id:e.id,shape:t,x:e.position.x,y:e.position.y,width:t===`activity`?120:t===`gateway`?40:50,height:t===`activity`?60:t===`gateway`?40:50,label:e.name,data:{...e.properties,type:e.type}}}),...e.flows.map(e=>({id:e.id,shape:`bpmn-edge`,source:e.source,target:e.target,label:e.name,x:0,y:0,data:e.condition?{condition:e.condition}:void 0}))],vt=e=>({nodes:e.filter(e=>e.shape!==`bpmn-edge`).map(e=>{let t={...e.data};return delete t.type,{id:e.id,type:gt(e),name:e.label??``,position:{x:e.x,y:e.y},properties:t}}),flows:e.filter(e=>e.shape===`bpmn-edge`).map(e=>({id:e.id,source:e.source??``,target:e.target??``,name:e.label,condition:typeof e.data?.condition==`string`?e.data.condition:void 0}))}),yt={class:`c-antv-container`};var bt=r(f({name:`C_AntV`,__name:`index`,props:{type:{},data:{},width:{default:`100%`},height:{default:`600px`},readonly:{type:Boolean,default:!1},showToolbar:{type:Boolean,default:!0},theme:{default:`light`}},emits:[`ready`,`data-change`],setup(e,{expose:t,emit:n}){let r=e,i=n,s=y(),l={er:ge,bpmn:Ke,uml:mt},u=a(()=>l[r.type]),d=a(()=>{let e={width:r.width,height:r.height,readonly:r.readonly,showToolbar:r.showToolbar,theme:r.theme},t=r.type===`bpmn`&&r.data&&`nodes`in r.data?_t(r.data):r.data;return{...e,data:t}}),f=e=>{i(`ready`,e)},p=e=>{i(`data-change`,r.type===`bpmn`&&Array.isArray(e)?vt(e):e)};return t({getGraph:()=>s.value?.getGraph()??void 0,getData:()=>{let e=s.value?.getData();return r.type===`bpmn`&&Array.isArray(e)?vt(e):Array.isArray(e)?void 0:e}}),(e,t)=>(v(),c(`div`,yt,[(v(),o(x(u.value),m(d.value,{onReady:f,onDataChange:p,ref_key:`layoutRef`,ref:s}),null,16))]))}}),[[`__scopeId`,`data-v-f70bf9bd`]]);export{J as i,ve as n,$ as r,bt as t};