@gadmin2n/schematics 0.0.138 → 0.0.140

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 (314) hide show
  1. package/dist/lib/application/files/gadmin2-game-angle-demo/Jenkinsfile +6 -34
  2. package/dist/lib/application/files/gadmin2-game-angle-demo/config/prisma/approval.prisma +199 -0
  3. package/dist/lib/application/files/gadmin2-game-angle-demo/config/prisma/system.prisma +9 -0
  4. package/dist/lib/application/files/gadmin2-game-angle-demo/config/prisma/workflow.prisma +191 -14
  5. package/dist/lib/application/files/gadmin2-game-angle-demo/gitignore +6 -5
  6. package/dist/lib/application/files/gadmin2-game-angle-demo/readme.md +10 -3
  7. package/dist/lib/application/files/gadmin2-game-angle-demo/server/migrate-between-pg-schemas.js +6 -4
  8. package/dist/lib/application/files/gadmin2-game-angle-demo/server/package.json +5 -2
  9. package/dist/lib/application/files/gadmin2-game-angle-demo/server/prisma.config.ts +12 -3
  10. package/dist/lib/application/files/gadmin2-game-angle-demo/server/scripts/migrate-human-approval-configs.ts +86 -0
  11. package/dist/lib/application/files/gadmin2-game-angle-demo/server/seed/workflow-node-types.ts +682 -121
  12. package/dist/lib/application/files/gadmin2-game-angle-demo/server/seed/workflow.seed.ts +110 -1
  13. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/config/index.ts +28 -0
  14. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/lib/json-body-parser.spec.ts +61 -0
  15. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/lib/json-body-parser.ts +7 -0
  16. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/lib/structured-all-exceptions.filter.spec.ts +54 -0
  17. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/lib/structured-all-exceptions.filter.ts +86 -0
  18. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/main.ts +9 -3
  19. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/approvalChannel/approval-channel.controller.ts +89 -0
  20. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/approvalChannel/approval-channel.dto.ts +68 -0
  21. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/approvalChannel/approval-channel.service.spec.ts +177 -0
  22. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/approvalChannel/approval-channel.service.ts +283 -0
  23. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/approvalChannel/approvalChannel.module.ts +10 -0
  24. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/codeRuntime/code-executor.spec.ts +42 -0
  25. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/codeRuntime/code-executor.ts +108 -0
  26. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/codeRuntime/code-runtime.controller.ts +101 -0
  27. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/codeRuntime/code-runtime.dto.ts +29 -0
  28. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/codeRuntime/codeRuntime.module.ts +21 -0
  29. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction-handler.registry.ts +30 -0
  30. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction-handler.ts +15 -0
  31. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction-runtime.controller.spec.ts +105 -0
  32. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction-runtime.controller.ts +96 -0
  33. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction-runtime.dto.ts +78 -0
  34. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction-signal-outbox.service.spec.ts +56 -0
  35. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction-signal-outbox.service.ts +111 -0
  36. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction-token.spec.ts +23 -0
  37. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction-token.ts +18 -0
  38. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction.service.spec.ts +240 -0
  39. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction.service.ts +339 -0
  40. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction.types.ts +74 -0
  41. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-wait.handler.ts +47 -0
  42. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/externalInteraction.module.ts +41 -0
  43. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/human-approval.handler.spec.ts +70 -0
  44. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/human-approval.handler.ts +76 -0
  45. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/workflow-callback-url.controller.ts +12 -0
  46. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/workflow-callback-url.service.spec.ts +227 -0
  47. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/workflow-callback-url.service.ts +121 -0
  48. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/httpRequest/http-request-runtime.controller.ts +160 -0
  49. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/httpRequest/http-request-runtime.dto.ts +41 -0
  50. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/httpRequest/http-request-runtime.util.spec.ts +171 -0
  51. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/httpRequest/http-request-runtime.util.ts +245 -0
  52. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/httpRequest/httpRequest.module.ts +22 -0
  53. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/approval-rule-evaluator.spec.ts +68 -0
  54. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/approval-rule-evaluator.ts +126 -0
  55. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/approval-rule.types.ts +34 -0
  56. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/approval-signal-outbox.service.ts +115 -0
  57. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/approval-subject-source.util.spec.ts +45 -0
  58. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/approval-subject-source.util.ts +59 -0
  59. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/human-approval.controller.ts +72 -0
  60. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/human-approval.dto.ts +144 -0
  61. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/human-approval.errors.ts +19 -0
  62. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/human-approval.external-decision.spec.ts +350 -0
  63. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/human-approval.service.ts +774 -0
  64. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/humanApproval.module.ts +46 -0
  65. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/legacy-approval-config-migration.ts +227 -0
  66. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/outbox-retry.util.ts +14 -0
  67. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/runtime/human-approval-runtime.controller.ts +151 -0
  68. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/runtime/human-approval-runtime.dto.ts +88 -0
  69. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/runtime/runtime-token.guard.ts +43 -0
  70. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/index.ts +21 -1
  71. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/integrationConnection/integration-connection.controller.ts +77 -0
  72. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/integrationConnection/integration-connection.dto.ts +98 -0
  73. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/integrationConnection/integration-connection.service.ts +277 -0
  74. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/integrationConnection/integration-secret-cipher.spec.ts +14 -0
  75. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/integrationConnection/integration-secret-cipher.ts +59 -0
  76. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/integrationConnection/integrationConnection.module.ts +10 -0
  77. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/subjectProvider/actor-context.util.ts +27 -0
  78. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/subjectProvider/providers/user-group.provider.ts +208 -0
  79. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/subjectProvider/providers/user.provider.ts +168 -0
  80. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/subjectProvider/subject-provider.controller.spec.ts +157 -0
  81. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/subjectProvider/subject-provider.controller.ts +176 -0
  82. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/subjectProvider/subject-provider.dto.ts +21 -0
  83. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/subjectProvider/subject-provider.errors.ts +78 -0
  84. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/subjectProvider/subject-provider.registry.spec.ts +100 -0
  85. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/subjectProvider/subject-provider.registry.ts +115 -0
  86. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/subjectProvider/subject-provider.types.ts +97 -0
  87. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/subjectProvider/subjectProvider.module.ts +34 -0
  88. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/temporalTenantConfig/temporalTenantConfig.controller.spec.ts +89 -1
  89. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/temporalTenantConfig/temporalTenantConfig.controller.ts +4 -0
  90. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/userGroup/user-group.controller.ts +119 -0
  91. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/userGroup/user-group.dto.ts +91 -0
  92. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/userGroup/user-group.errors.ts +34 -0
  93. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/userGroup/user-group.service.spec.ts +161 -0
  94. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/userGroup/user-group.service.ts +390 -0
  95. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/userGroup/userGroup.module.ts +10 -0
  96. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/dsl-validate.util.spec.ts +17 -0
  97. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/dsl-validate.util.ts +8 -2
  98. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/parameter-binding.ts +93 -0
  99. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-callable.spec.ts +158 -0
  100. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-callable.ts +155 -0
  101. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-compiler.service.spec.ts +363 -0
  102. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-compiler.service.ts +354 -0
  103. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-compiler.types.ts +43 -0
  104. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-data-edge.util.spec.ts +174 -0
  105. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-data-edge.util.ts +149 -0
  106. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-dsl-comparison.ts +43 -0
  107. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-execution.dto.ts +1 -1
  108. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-export.dto.ts +4 -0
  109. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-export.service.ts +70 -28
  110. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-handle-validator.ts +128 -0
  111. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow.controller.ts +12 -1
  112. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow.module.ts +18 -3
  113. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow.service.spec.ts +369 -22
  114. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow.service.ts +319 -90
  115. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowConfig/node-config-validator.service.spec.ts +79 -0
  116. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowConfig/node-config-validator.service.ts +62 -0
  117. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowConfig/schema.types.ts +10 -0
  118. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowConfig/subject-config-validator.service.spec.ts +124 -0
  119. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowConfig/subject-config-validator.service.ts +236 -0
  120. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowConfig/widget-catalog.service.spec.ts +49 -0
  121. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowConfig/widget-catalog.service.ts +69 -0
  122. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowConfig/workflowConfig.module.ts +20 -0
  123. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowNodeInstance/node-instance-config.util.spec.ts +15 -0
  124. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowNodeInstance/node-instance-config.util.ts +25 -0
  125. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowNodeInstance/workflowNodeInstance.controller.ts +103 -11
  126. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowNodeInstance/workflowNodeInstance.dto.ts +98 -0
  127. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowNodeInstance/workflowNodeInstance.module.ts +3 -0
  128. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowNodeInstance/workflowNodeInstance.service.spec.ts +72 -62
  129. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowNodeInstance/workflowNodeInstance.service.ts +148 -11
  130. package/dist/lib/application/files/gadmin2-game-angle-demo/web/package.json +13 -9
  131. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/App.tsx +5 -2
  132. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/authProvider.ts +2 -2
  133. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/BulkActions.tsx +0 -5
  134. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/SearchBar.tsx +26 -18
  135. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/auditLog/components/eventList/index.tsx +2 -2
  136. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/auditLog/components/logButton/index.tsx +24 -17
  137. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/auditLog/components/logList/index.tsx +7 -18
  138. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/auditLog/components/modalDiffViewer/index.tsx +2 -2
  139. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/contexts/color-mode/index.tsx +288 -33
  140. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/contexts/color-mode/themeStyles.ts +97 -0
  141. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/SettingDrawer.tsx +251 -0
  142. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/header.tsx +47 -19
  143. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/layout.tsx +18 -9
  144. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/menuRenderer.tsx +155 -0
  145. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/sider.tsx +123 -129
  146. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/config/routeRegistry.tsx +16 -0
  147. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/constants/layout.ts +2 -1
  148. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/dev-shell/AddDataModal.tsx +98 -3
  149. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/dev-shell/AddPageModal.tsx +101 -0
  150. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/dev-shell/DevShell.tsx +8 -0
  151. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/dev-shell/style.css +51 -0
  152. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/form.tsx +1 -1
  153. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/list.tsx +1 -1
  154. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/login.ts +40 -1
  155. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/show.tsx +5 -5
  156. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/useDynamicResources.tsx +16 -1
  157. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/useListPageState.ts +10 -7
  158. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/i18n.ts +4 -2
  159. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/locales/en/common.json +26 -2
  160. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/locales/en/workflow.json +556 -0
  161. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/locales/zh_CN/common.json +26 -2
  162. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/locales/zh_CN/workflow.json +556 -0
  163. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/plugins/devShellPlugin.ts +152 -2
  164. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/agenda/index.tsx +6 -1
  165. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/agenda/show.tsx +41 -9
  166. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/agendaJob/edit.tsx +1 -1
  167. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/agendaJob/list.tsx +10 -8
  168. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/agendaJob/show.tsx +3 -3
  169. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/audit/components/action-cell.css +1 -1
  170. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/audit/edit.tsx +1 -1
  171. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/audit/show.tsx +3 -6
  172. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/CanvasCell.css +3 -0
  173. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/CanvasCell.tsx +45 -13
  174. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/CanvasComponentLibrary.tsx +45 -22
  175. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/CanvasListPage.tsx +168 -101
  176. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/CanvasPage.tsx +248 -74
  177. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/CanvasToolbar.tsx +33 -18
  178. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/CodeFloatWindow.tsx +16 -10
  179. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/PublishModal.tsx +1 -1
  180. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/canvasContextMenuRegistry.tsx +31 -0
  181. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/canvasDefaults.ts +15 -0
  182. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/BarChartDataSourceModal.tsx +16 -11
  183. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/CanvasAiModal.tsx +25 -21
  184. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/ExportModal.tsx +6 -1
  185. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/LineChartDataSourceModal.tsx +9 -10
  186. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/MultiChartConfigModal.tsx +4 -7
  187. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/MultiChartDataSourceModal.tsx +23 -9
  188. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/NumCardDataSourceModal.tsx +16 -11
  189. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/PromptModal.tsx +2 -5
  190. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/RadarChartDataSourceModal.tsx +16 -11
  191. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/TableConfigModal.tsx +2 -9
  192. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/TableDataSourceModal.tsx +23 -12
  193. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/canvasModalProps.ts +2 -17
  194. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/sectionCompactor.test.ts +149 -0
  195. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/sectionCompactor.ts +111 -17
  196. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/types.ts +1 -0
  197. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/whiteboardLayout.test.ts +83 -0
  198. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/whiteboardLayout.ts +118 -0
  199. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/whiteboardName.test.ts +26 -0
  200. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas-page/index.tsx +9 -1
  201. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/game/edit.tsx +1 -1
  202. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/game/list.tsx +10 -8
  203. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/game/show.tsx +3 -6
  204. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/human-approval/DecisionModal.tsx +71 -0
  205. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/human-approval/inbox.tsx +216 -0
  206. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/Components/AssignRolesModal.tsx +6 -1
  207. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/permissionReadme/index.tsx +8 -8
  208. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/Components/modal.tsx +1 -1
  209. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/list.tsx +5 -5
  210. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/Components/modal.tsx +1 -1
  211. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/components/show-drawer.tsx +1 -1
  212. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/approval-channels/ApprovalChannelModal.test.tsx +84 -0
  213. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/approval-channels/ApprovalChannelModal.tsx +141 -0
  214. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/approval-channels/approval-channel.types.ts +16 -0
  215. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/approval-channels/index.tsx +208 -0
  216. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/CreateNodeInstanceDrawer.tsx +154 -0
  217. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/CustomNode.tsx +194 -5
  218. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/DeletableEdge.tsx +76 -0
  219. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/DslView.tsx +1 -1
  220. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/EnhancedFlowRenderer.tsx +176 -22
  221. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/ExecutionStatusNode.test.tsx +62 -0
  222. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/ExecutionStatusNode.tsx +94 -5
  223. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/ExportModal.tsx +15 -10
  224. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/FlowRenderer.tsx +251 -70
  225. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/ImportModal.tsx +18 -24
  226. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/InstanceRequiredDialog.tsx +106 -0
  227. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/LookupConnectionDialog.test.tsx +45 -0
  228. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/LookupConnectionDialog.tsx +43 -0
  229. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/NewNodeDefaults.test.tsx +279 -0
  230. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/NodeEditModal.tsx +6 -7
  231. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/NodePropertyPanel.test.tsx +335 -0
  232. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/NodePropertyPanel.tsx +433 -237
  233. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/ParameterBindingEditor.tsx +179 -0
  234. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/RunWorkflowModal.tsx +18 -16
  235. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/StatusCards.tsx +20 -16
  236. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/VersionPanel.tsx +6 -4
  237. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/connections/ConnectionModal.test.tsx +68 -0
  238. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/connections/ConnectionModal.tsx +367 -0
  239. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/connections/connection.types.ts +21 -0
  240. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/connections/index.tsx +171 -0
  241. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/editor.tsx +38 -22
  242. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/hooks/useNodeInstanceLibrary.ts +41 -0
  243. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/hooks/useWorkflowAgent.ts +6 -0
  244. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/index.tsx +27 -20
  245. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/instance-detail.tsx +8 -11
  246. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/instances.tsx +6 -1
  247. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/components/NodeInstanceForm.tsx +56 -23
  248. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/create.tsx +21 -6
  249. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/edit.tsx +17 -20
  250. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/index.tsx +6 -1
  251. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/schema-form/SchemaField.tsx +311 -0
  252. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/schema-form/SchemaForm.test.tsx +218 -0
  253. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/schema-form/SchemaForm.tsx +83 -0
  254. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/schema-form/default-widgets.tsx +135 -0
  255. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/schema-form/schema-defaults.ts +36 -0
  256. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/schema-form/schema.types.ts +32 -0
  257. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/schema-form/widget-registry.test.tsx +23 -0
  258. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/schema-form/widget-registry.tsx +52 -0
  259. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/show.tsx +9 -13
  260. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ApprovalRequestTriggerConfigEditor.tsx +39 -0
  261. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ApprovalRuleEditor.test.tsx +20 -0
  262. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ApprovalRuleEditor.tsx +72 -0
  263. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ApproverSourceEditor.test.tsx +47 -0
  264. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ApproverSourceEditor.tsx +185 -0
  265. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/CallableInputParametersEditor.test.tsx +102 -0
  266. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/CallableInputParametersEditor.tsx +150 -0
  267. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/CodeConfigEditor.tsx +103 -0
  268. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ExternalRequestConfigEditor.test.tsx +93 -0
  269. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ExternalRequestConfigEditor.tsx +196 -0
  270. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ExternalWaitConfigEditor.tsx +303 -0
  271. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/HttpRequestConfigEditor.test.tsx +189 -0
  272. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/HttpRequestConfigEditor.tsx +706 -0
  273. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/HumanApprovalConfigEditor.test.tsx +86 -0
  274. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/HumanApprovalConfigEditor.tsx +458 -0
  275. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ReturnResultConfigEditor.test.tsx +53 -0
  276. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ReturnResultConfigEditor.tsx +91 -0
  277. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/SubjectPicker.test.tsx +61 -0
  278. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/SubjectPicker.tsx +266 -0
  279. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/SubmitApprovalResultConfigEditor.tsx +104 -0
  280. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/SubmitExternalResultConfigEditor.tsx +98 -0
  281. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/UserGroupCreateModal.tsx +70 -0
  282. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/UserGroupEditModal.tsx +138 -0
  283. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/approver-source.test.ts +25 -0
  284. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/approver-source.ts +42 -0
  285. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/subject-provider.api.ts +95 -0
  286. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/show.tsx +15 -11
  287. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/temporal-tenant/index.tsx +49 -8
  288. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/types/parameter-binding.ts +49 -0
  289. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/types.ts +31 -2
  290. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/lookupConnection.test.ts +208 -0
  291. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/lookupConnection.ts +246 -0
  292. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/newNodeConfig.ts +73 -0
  293. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/removeWorkflowEdges.test.ts +34 -0
  294. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/removeWorkflowEdges.ts +18 -0
  295. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/resolveLookupPorts.ts +66 -0
  296. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/resolveOutputs.test.ts +39 -0
  297. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/resolveOutputs.ts +48 -0
  298. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/resolveWorkflowDisplay.test.ts +51 -0
  299. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/resolveWorkflowDisplay.ts +32 -0
  300. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflowEventOutbox/edit.tsx +1 -1
  301. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflowEventOutbox/list.tsx +10 -8
  302. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflowEventOutbox/show.tsx +3 -3
  303. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/styles/antd-theme-vars.css +93 -0
  304. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/styles/antd.css +8 -8
  305. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/styles/fc.css +4 -4
  306. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/styles/index.css +20 -5
  307. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/styles/show-drawer.module.css +3 -3
  308. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/styles/show-page.module.css +3 -3
  309. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/styles/theme-styles.css +81 -0
  310. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/test/setup.ts +5 -0
  311. package/dist/lib/application/files/gadmin2-game-angle-demo/web/vite.config.ts +1 -7
  312. package/dist/lib/application/files/gadmin2-game-angle-demo/web/vitest.config.ts +12 -0
  313. package/package.json +1 -1
  314. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/components/DynamicConfigForm.tsx +0 -154
@@ -6,7 +6,7 @@ import React, {
6
6
  useEffect,
7
7
  } from 'react';
8
8
  import { GridLayout, useContainerWidth } from 'react-grid-layout';
9
- import type { LayoutItem } from 'react-grid-layout';
9
+ import type { EventCallback, LayoutItem } from 'react-grid-layout';
10
10
  import { Dropdown, Modal, Checkbox, Input, Button, Space } from 'antd';
11
11
  import {
12
12
  PlusOutlined,
@@ -36,6 +36,12 @@ import TableConfigModal from './components/TableConfigModal';
36
36
  import PromptModal from './components/PromptModal';
37
37
  import CanvasAiModal from './components/CanvasAiModal';
38
38
  import { createSectionCompactor } from './sectionCompactor';
39
+ import {
40
+ findContainingWhiteboard,
41
+ moveWhiteboardChildren,
42
+ updateWhiteboardParent,
43
+ WHITEBOARD_COMPONENT_TYPE,
44
+ } from './whiteboardLayout';
39
45
  import type { CanvasItem as CanvasItemType } from './types';
40
46
  import { useTranslation } from 'react-i18next';
41
47
  import 'react-grid-layout/css/styles.css';
@@ -107,6 +113,20 @@ function syncCodeHeight(code: string, h: number): string {
107
113
  return code;
108
114
  }
109
115
 
116
+ function preserveLayoutConstraints(
117
+ nextLayout: readonly LayoutItem[],
118
+ previousLayout: readonly LayoutItem[],
119
+ ): LayoutItem[] {
120
+ return nextLayout.map((entry) => {
121
+ const previous = previousLayout.find(
122
+ (candidate) => candidate.i === entry.i,
123
+ );
124
+ return previous?.minW !== undefined || previous?.minH !== undefined
125
+ ? { ...entry, minW: previous.minW, minH: previous.minH }
126
+ : { ...entry };
127
+ });
128
+ }
129
+
110
130
  // ─── Props ───────────────────────────────────────────────────────────────────
111
131
 
112
132
  interface CanvasPageProps {
@@ -161,6 +181,9 @@ const CanvasPage: React.FC<CanvasPageProps> = ({
161
181
  const [isPreview, setIsPreview] = useState(false);
162
182
  const [editingId, setEditingId] = useState<string | null>(null);
163
183
  const [isDragging, setIsDragging] = useState(false);
184
+ const [activeWhiteboardId, setActiveWhiteboardId] = useState<string | null>(
185
+ null,
186
+ );
164
187
  const [libraryCollapsed, setLibraryCollapsed] = useState(false);
165
188
  const isAgentAllowed = useIsAgentAllowed();
166
189
  const [configModal, setConfigModal] = useState<{
@@ -305,10 +328,22 @@ const CanvasPage: React.FC<CanvasPageProps> = ({
305
328
  selectedId,
306
329
  editingId,
307
330
  };
331
+ const dragSnapshotRef = useRef<{
332
+ id: string;
333
+ originLayout: LayoutItem[];
334
+ } | null>(null);
335
+ const draggingItemIdRef = useRef<string | null>(null);
336
+ const activeWhiteboardIdRef = useRef<string | null>(null);
308
337
 
309
338
  // 自定义 compactor:Section 与普通组件之间允许重叠
310
339
  const sectionCompactor = useMemo(
311
- () => createSectionCompactor(() => liveRef.current.items),
340
+ () =>
341
+ createSectionCompactor(
342
+ () => liveRef.current.items,
343
+ () => draggingItemIdRef.current,
344
+ () => activeWhiteboardIdRef.current,
345
+ () => dragSnapshotRef.current,
346
+ ),
312
347
  [],
313
348
  );
314
349
 
@@ -353,7 +388,11 @@ const CanvasPage: React.FC<CanvasPageProps> = ({
353
388
  const removeComponent = useCallback((id: string) => {
354
389
  const { items, layout, onBothChange } = liveRef.current;
355
390
  onBothChange(
356
- items.filter((item) => item.id !== id),
391
+ items
392
+ .filter((item) => item.id !== id)
393
+ .map((item) =>
394
+ item.parentId === id ? { ...item, parentId: undefined } : item,
395
+ ),
357
396
  layout.filter((l) => l.i !== id),
358
397
  );
359
398
  setSelectedId((prev) => (prev === id ? null : prev));
@@ -369,7 +408,7 @@ const CanvasPage: React.FC<CanvasPageProps> = ({
369
408
  const newId = genId();
370
409
  const maxY = layout.reduce((m, l) => Math.max(m, l.y + l.h), 0);
371
410
  onBothChange(
372
- [...items, { ...item, id: newId }],
411
+ [...items, { ...item, id: newId, parentId: undefined }],
373
412
  [...layout, { ...itemLayout, i: newId, y: maxY }],
374
413
  );
375
414
  }, []);
@@ -492,55 +531,137 @@ const CanvasPage: React.FC<CanvasPageProps> = ({
492
531
  document.removeEventListener('multichart-variant-change', handler);
493
532
  }, [updateCode]);
494
533
 
495
- const handleDragStop = useCallback((_layout: readonly LayoutItem[]) => {
496
- setIsDragging(false);
497
- if (_layout.some((l) => l.i === '__dropping-elem__')) return;
498
- const { layout, onLayoutChange } = liveRef.current;
499
- const hasChanged = _layout.some((l) => {
500
- const existing = layout.find((e) => e.i === l.i);
501
- return (
502
- !existing ||
503
- l.x !== existing.x ||
504
- l.y !== existing.y ||
505
- l.w !== existing.w ||
506
- l.h !== existing.h
507
- );
508
- });
509
- if (!hasChanged) return;
510
- const merged = _layout.map((l) => {
511
- const existing = layout.find((e) => e.i === l.i);
512
- return existing?.minW !== undefined || existing?.minH !== undefined
513
- ? { ...l, minW: existing?.minW, minH: existing?.minH }
514
- : l;
515
- });
516
- onLayoutChange(merged);
517
- }, []);
534
+ const handleDragStart: EventCallback = useCallback(
535
+ (_layout, _oldItem, newItem) => {
536
+ setIsDragging(true);
537
+ if (!newItem) return;
538
+ draggingItemIdRef.current = newItem.i;
539
+ const { items, layout } = liveRef.current;
540
+ const draggedItem = items.find((item) => item.id === newItem.i);
541
+ const startingWhiteboardId =
542
+ draggedItem?.componentType === WHITEBOARD_COMPONENT_TYPE
543
+ ? null
544
+ : (draggedItem?.parentId ?? null);
545
+ activeWhiteboardIdRef.current = startingWhiteboardId;
546
+ setActiveWhiteboardId(startingWhiteboardId);
547
+ dragSnapshotRef.current = {
548
+ id: newItem.i,
549
+ originLayout: layout.map((entry) => ({ ...entry })),
550
+ };
551
+ },
552
+ [],
553
+ );
554
+
555
+ const handleDrag: EventCallback = useCallback(
556
+ (_layout, _oldItem, newItem) => {
557
+ if (!newItem) return;
558
+ const { items } = liveRef.current;
559
+ const draggedItem = items.find((item) => item.id === newItem.i);
518
560
 
519
- const handleResizeStop = useCallback(
520
- (_layout: readonly LayoutItem[], _oldItem: any, newItem: any) => {
521
- const { layout, items, onItemsChange, onLayoutChange } = liveRef.current;
561
+ if (draggedItem?.componentType === WHITEBOARD_COMPONENT_TYPE) {
562
+ activeWhiteboardIdRef.current = null;
563
+ setActiveWhiteboardId(null);
564
+ return;
565
+ }
566
+
567
+ const nextWhiteboardId =
568
+ findContainingWhiteboard(newItem.i, items, _layout) ?? null;
569
+ activeWhiteboardIdRef.current = nextWhiteboardId;
570
+ setActiveWhiteboardId(nextWhiteboardId);
571
+ },
572
+ [],
573
+ );
574
+
575
+ const handleDragStop: EventCallback = useCallback(
576
+ (_layout, _oldItem, newItem) => {
577
+ setIsDragging(false);
578
+ activeWhiteboardIdRef.current = null;
579
+ setActiveWhiteboardId(null);
580
+ if (!newItem || _layout.some((l) => l.i === '__dropping-elem__')) {
581
+ dragSnapshotRef.current = null;
582
+ draggingItemIdRef.current = null;
583
+ return;
584
+ }
585
+
586
+ const { items, layout, onBothChange } = liveRef.current;
587
+ let merged = preserveLayoutConstraints(_layout, layout);
588
+ const draggedItem = items.find((item) => item.id === newItem.i);
589
+ const dragSnapshot = dragSnapshotRef.current;
522
590
 
523
591
  if (
524
- _layout.length > 0 &&
525
- !_layout.some((l) => l.i === '__dropping-elem__')
592
+ draggedItem?.componentType === WHITEBOARD_COMPONENT_TYPE &&
593
+ dragSnapshot?.id === newItem.i
526
594
  ) {
527
- const merged = _layout.map((l) => {
528
- const existing = layout.find((e) => e.i === l.i);
529
- return existing?.minW !== undefined || existing?.minH !== undefined
530
- ? { ...l, minW: existing?.minW, minH: existing?.minH }
531
- : l;
595
+ const childIds = new Set(
596
+ items
597
+ .filter((item) => item.parentId === newItem.i)
598
+ .map((item) => item.id),
599
+ );
600
+ const baselineLayout = merged.map((entry) => {
601
+ if (!childIds.has(entry.i)) return entry;
602
+ const origin = dragSnapshot.originLayout.find(
603
+ (candidate) => candidate.i === entry.i,
604
+ );
605
+ return origin ? { ...entry, x: origin.x, y: origin.y } : { ...entry };
532
606
  });
533
- onLayoutChange(merged);
607
+ merged = moveWhiteboardChildren(
608
+ newItem.i,
609
+ dragSnapshot.originLayout,
610
+ baselineLayout,
611
+ items,
612
+ );
534
613
  }
535
614
 
536
- if (!newItem?.i) return;
615
+ const nextItems = updateWhiteboardParent(newItem.i, items, merged);
616
+ dragSnapshotRef.current = null;
617
+ draggingItemIdRef.current = null;
618
+ onBothChange(nextItems, merged, { coalesce: true });
619
+ },
620
+ [],
621
+ );
622
+
623
+ const handleResizeStart: EventCallback = useCallback(
624
+ (_layout, _oldItem, newItem) => {
625
+ if (!newItem) return;
626
+ const resizedItem = liveRef.current.items.find(
627
+ (item) => item.id === newItem.i,
628
+ );
629
+ const whiteboardId =
630
+ resizedItem?.componentType === WHITEBOARD_COMPONENT_TYPE
631
+ ? null
632
+ : (resizedItem?.parentId ?? null);
633
+ activeWhiteboardIdRef.current = whiteboardId;
634
+ setActiveWhiteboardId(whiteboardId);
635
+ },
636
+ [],
637
+ );
638
+
639
+ const handleResizeStop: EventCallback = useCallback(
640
+ (_layout, _oldItem, newItem) => {
641
+ activeWhiteboardIdRef.current = null;
642
+ setActiveWhiteboardId(null);
643
+ if (!newItem?.i || _layout.length === 0) return;
644
+ const { layout, items, onBothChange } = liveRef.current;
645
+ const merged = preserveLayoutConstraints(_layout, layout);
537
646
  const { i: itemId, h } = newItem;
538
- onItemsChange(
539
- items.map((item) => {
540
- if (item.id !== itemId) return item;
541
- return { ...item, code: syncCodeHeight(item.code, h) };
542
- }),
647
+ let nextItems = items.map((item) =>
648
+ item.id === itemId
649
+ ? { ...item, code: syncCodeHeight(item.code, h) }
650
+ : item,
543
651
  );
652
+ const resizedItem = nextItems.find((item) => item.id === itemId);
653
+
654
+ if (resizedItem?.componentType === WHITEBOARD_COMPONENT_TYPE) {
655
+ for (const child of nextItems.filter(
656
+ (item) => item.parentId === itemId,
657
+ )) {
658
+ nextItems = updateWhiteboardParent(child.id, nextItems, merged);
659
+ }
660
+ } else {
661
+ nextItems = updateWhiteboardParent(itemId, nextItems, merged);
662
+ }
663
+
664
+ onBothChange(nextItems, merged);
544
665
  },
545
666
  [],
546
667
  );
@@ -575,24 +696,34 @@ const CanvasPage: React.FC<CanvasPageProps> = ({
575
696
 
576
697
  // 映射实际 componentType(BarChart/LineChart/PieChart → MultiChart)
577
698
  const actualType = COMPONENT_TYPE_MAP[type] ?? type;
578
-
699
+ const nextLayout = [
700
+ ...cleanLayout,
701
+ {
702
+ i: id,
703
+ x: item?.x ?? 0,
704
+ y: item?.y ?? 0,
705
+ w: def.layout.w,
706
+ h,
707
+ minW: def.layout.minW,
708
+ minH: def.layout.minH ?? 2,
709
+ },
710
+ ];
711
+ const nextItems = [
712
+ ...items,
713
+ { id, componentType: actualType, code: syncCodeHeight(baseCode, h) },
714
+ ];
715
+ const parentId = findContainingWhiteboard(id, nextItems, nextLayout);
716
+
717
+ dragSnapshotRef.current = null;
718
+ draggingItemIdRef.current = null;
719
+ activeWhiteboardIdRef.current = null;
720
+ setIsDragging(false);
721
+ setActiveWhiteboardId(null);
579
722
  onBothChange(
580
- [
581
- ...items,
582
- { id, componentType: actualType, code: syncCodeHeight(baseCode, h) },
583
- ],
584
- [
585
- ...cleanLayout,
586
- {
587
- i: id,
588
- x: item?.x ?? 0,
589
- y: item?.y ?? 0,
590
- w: def.layout.w,
591
- h,
592
- minW: def.layout.minW,
593
- minH: def.layout.minH ?? 2,
594
- },
595
- ],
723
+ nextItems.map((candidate) =>
724
+ candidate.id === id ? { ...candidate, parentId } : candidate,
725
+ ),
726
+ nextLayout,
596
727
  );
597
728
  },
598
729
  [],
@@ -675,7 +806,6 @@ const CanvasPage: React.FC<CanvasPageProps> = ({
675
806
  onAiConfig={() => setAiModalOpen(true)}
676
807
  />
677
808
  )}
678
-
679
809
  {/* ── 主体:左侧组件库 + 右侧画布 ── */}
680
810
  <div style={{ flex: 1, display: 'flex', minHeight: 0 }}>
681
811
  {!isPreview && isAgentAllowed && (
@@ -698,9 +828,9 @@ const CanvasPage: React.FC<CanvasPageProps> = ({
698
828
  ? `
699
829
  radial-gradient(circle, #1677ff 1.5px, transparent 1.5px) 0 0 / 90px 90px,
700
830
  radial-gradient(circle, #1677ff 0.8px, transparent 0.8px) 0 0 / 18px 18px,
701
- #f0f2f5
831
+ var(--ant-color-bg-layout)
702
832
  `
703
- : '#f0f2f5',
833
+ : 'var(--ant-color-bg-layout)',
704
834
  transition: 'background 0.15s',
705
835
  }}
706
836
  >
@@ -746,8 +876,8 @@ const CanvasPage: React.FC<CanvasPageProps> = ({
746
876
  alignItems: 'center',
747
877
  gap: 8,
748
878
  padding: '24px 32px',
749
- background: '#fff',
750
- border: '1px dashed #c8d3ff',
879
+ background: 'var(--ant-color-bg-container)',
880
+ border: '1px dashed var(--ant-color-primary-border)',
751
881
  borderRadius: 12,
752
882
  boxShadow: '0 2px 12px rgba(67,97,238,0.06)',
753
883
  }}
@@ -756,11 +886,20 @@ const CanvasPage: React.FC<CanvasPageProps> = ({
756
886
  style={{ fontSize: 36, color: '#4361ee' }}
757
887
  />
758
888
  <span
759
- style={{ fontSize: 15, color: '#333', fontWeight: 500 }}
889
+ style={{
890
+ fontSize: 15,
891
+ color: 'var(--ant-color-text)',
892
+ fontWeight: 500,
893
+ }}
760
894
  >
761
895
  {t('canvas.emptyHint')}
762
896
  </span>
763
- <span style={{ fontSize: 12, color: '#8c8c8c' }}>
897
+ <span
898
+ style={{
899
+ fontSize: 12,
900
+ color: 'var(--ant-color-text-tertiary)',
901
+ }}
902
+ >
764
903
  在左侧组件库 <b style={{ color: '#4361ee' }}>点击</b> 或{' '}
765
904
  <b style={{ color: '#4361ee' }}>拖拽</b> 任一组件
766
905
  </span>
@@ -769,11 +908,36 @@ const CanvasPage: React.FC<CanvasPageProps> = ({
769
908
  </div>
770
909
  )}
771
910
 
911
+ <style>{`
912
+ .canvas-layout--whiteboard-interaction > .react-grid-placeholder {
913
+ background: #13c2c2 !important;
914
+ opacity: 0.32 !important;
915
+ border: 2px solid #08979c;
916
+ border-radius: 8px;
917
+ box-shadow: 0 0 0 6px rgba(19, 194, 194, 0.12);
918
+ }
919
+
920
+ .canvas-layout--whiteboard-interaction > .react-draggable-dragging,
921
+ .canvas-layout--whiteboard-interaction > .react-resizable-resizing {
922
+ box-shadow: 0 12px 28px rgba(8, 151, 156, 0.24) !important;
923
+ }
924
+
925
+ .canvas-layout--whiteboard-interaction
926
+ > .react-resizable-resizing
927
+ > .react-resizable-handle::after {
928
+ border-color: #08979c;
929
+ }
930
+ `}</style>
931
+
772
932
  {/* 网格布局 */}
773
933
  {mounted && (
774
934
  <div style={{ maxWidth: 1600, margin: '0 auto', width: '100%' }}>
775
935
  <GridLayout
776
- className="layout"
936
+ className={`layout${
937
+ activeWhiteboardId
938
+ ? ' canvas-layout--whiteboard-interaction'
939
+ : ''
940
+ }`}
777
941
  layout={layout}
778
942
  width={Math.min(containerWidth, 1600)}
779
943
  style={{
@@ -808,17 +972,27 @@ const CanvasPage: React.FC<CanvasPageProps> = ({
808
972
  }
809
973
  onDrop={isPreview || !isAgentAllowed ? undefined : handleDrop}
810
974
  compactor={sectionCompactor}
975
+ onResizeStart={handleResizeStart}
811
976
  onResizeStop={handleResizeStop}
812
- onDragStart={() => setIsDragging(true)}
977
+ onDragStart={handleDragStart}
978
+ onDrag={handleDrag}
813
979
  onDragStop={handleDragStop}
814
980
  >
815
981
  {items.map((item) => (
816
982
  <CanvasCell
817
983
  key={item.id}
818
984
  className="canvas-item-drag"
819
- style={{ zIndex: item.componentType === 'Section' ? 0 : 1 }}
985
+ style={{
986
+ zIndex:
987
+ item.componentType === 'Section' ||
988
+ item.componentType === WHITEBOARD_COMPONENT_TYPE
989
+ ? 0
990
+ : 1,
991
+ }}
820
992
  componentType={item.componentType}
821
993
  isPreview={isPreview}
994
+ isDropTarget={activeWhiteboardId === item.id}
995
+ isWhiteboardChild={!!item.parentId}
822
996
  data-grid-id={item.id}
823
997
  data-agent-type="canvas-component"
824
998
  data-agent-resource="canvas"
@@ -856,11 +1030,11 @@ const CanvasPage: React.FC<CanvasPageProps> = ({
856
1030
  transform: 'translateX(-50%)',
857
1031
  zIndex: 1000,
858
1032
  borderRadius: 8,
859
- background: '#fff',
860
- border: '1px solid #e0e0e0',
1033
+ background: 'var(--ant-color-bg-elevated)',
1034
+ border: '1px solid var(--ant-color-border)',
861
1035
  boxShadow: '0 2px 8px rgba(0,0,0,0.08)',
862
1036
  fontWeight: 500,
863
- color: '#555',
1037
+ color: 'var(--ant-color-text-secondary)',
864
1038
  }}
865
1039
  >
866
1040
  {t('canvas.exitPreview')}
@@ -49,8 +49,8 @@ const CanvasToolbar: React.FC<CanvasToolbarProps> = ({
49
49
  return (
50
50
  <div
51
51
  style={{
52
- background: '#fff',
53
- borderBottom: '1px solid #eaeaea',
52
+ background: 'var(--ant-color-bg-container)',
53
+ borderBottom: '1px solid var(--ant-color-border-secondary)',
54
54
  flexShrink: 0,
55
55
  boxShadow: '0 1px 8px rgba(0,0,0,0.04)',
56
56
  borderRadius: 8,
@@ -73,7 +73,11 @@ const CanvasToolbar: React.FC<CanvasToolbarProps> = ({
73
73
  <Button
74
74
  size="small"
75
75
  type="text"
76
- icon={<ArrowLeftOutlined style={{ color: '#595959' }} />}
76
+ icon={
77
+ <ArrowLeftOutlined
78
+ style={{ color: 'var(--ant-color-text-secondary)' }}
79
+ />
80
+ }
77
81
  onClick={onBack}
78
82
  style={{
79
83
  borderRadius: '50%',
@@ -89,7 +93,7 @@ const CanvasToolbar: React.FC<CanvasToolbarProps> = ({
89
93
  style={{
90
94
  fontWeight: 600,
91
95
  fontSize: 15,
92
- color: '#1a1a1a',
96
+ color: 'var(--ant-color-text)',
93
97
  letterSpacing: '0.2px',
94
98
  padding: '4px 10px',
95
99
  }}
@@ -114,9 +118,11 @@ const CanvasToolbar: React.FC<CanvasToolbarProps> = ({
114
118
  disabled={!canUndo}
115
119
  style={{
116
120
  borderRadius: 8,
117
- border: '1px solid #e0e0e0',
121
+ border: '1px solid var(--ant-color-border)',
118
122
  background: 'transparent',
119
- color: canUndo ? '#555' : '#ccc',
123
+ color: canUndo
124
+ ? 'var(--ant-color-text-secondary)'
125
+ : 'var(--ant-color-text-quaternary)',
120
126
  fontWeight: 500,
121
127
  transition: 'all 200ms ease',
122
128
  }}
@@ -130,9 +136,11 @@ const CanvasToolbar: React.FC<CanvasToolbarProps> = ({
130
136
  disabled={!canRedo}
131
137
  style={{
132
138
  borderRadius: 8,
133
- border: '1px solid #e0e0e0',
139
+ border: '1px solid var(--ant-color-border)',
134
140
  background: 'transparent',
135
- color: canRedo ? '#555' : '#ccc',
141
+ color: canRedo
142
+ ? 'var(--ant-color-text-secondary)'
143
+ : 'var(--ant-color-text-quaternary)',
136
144
  fontWeight: 500,
137
145
  transition: 'all 200ms ease',
138
146
  }}
@@ -172,8 +180,8 @@ const CanvasToolbar: React.FC<CanvasToolbarProps> = ({
172
180
  boxShadow: '0 2px 8px rgba(67,97,238,0.3)',
173
181
  }
174
182
  : {
175
- background: '#f0f1f5',
176
- color: '#999',
183
+ background: 'var(--ant-color-fill-tertiary)',
184
+ color: 'var(--ant-color-text-quaternary)',
177
185
  }),
178
186
  transition: 'all 200ms ease',
179
187
  }}
@@ -187,19 +195,20 @@ const CanvasToolbar: React.FC<CanvasToolbarProps> = ({
187
195
  onClick={onPreview}
188
196
  style={{
189
197
  borderRadius: 8,
190
- border: '1px solid #e0e0e0',
198
+ border: '1px solid var(--ant-color-border)',
191
199
  background: 'transparent',
192
- color: '#555',
200
+ color: 'var(--ant-color-text-secondary)',
193
201
  fontWeight: 500,
194
202
  transition: 'all 200ms ease',
195
203
  }}
196
204
  onMouseEnter={(e) => {
197
- e.currentTarget.style.background = '#f7f7f8';
198
- e.currentTarget.style.borderColor = '#ccc';
205
+ e.currentTarget.style.background =
206
+ 'var(--ant-color-fill-tertiary)';
207
+ e.currentTarget.style.borderColor = 'var(--ant-color-border)';
199
208
  }}
200
209
  onMouseLeave={(e) => {
201
210
  e.currentTarget.style.background = 'transparent';
202
- e.currentTarget.style.borderColor = '#e0e0e0';
211
+ e.currentTarget.style.borderColor = 'var(--ant-color-border)';
203
212
  }}
204
213
  >
205
214
  {t('canvas.preview')}
@@ -212,9 +221,15 @@ const CanvasToolbar: React.FC<CanvasToolbarProps> = ({
212
221
  danger={isPublished}
213
222
  style={{
214
223
  borderRadius: 8,
215
- border: isPublished ? '1px solid #ff4d4f' : '1px solid #e0e0e0',
216
- background: isPublished ? '#fff2f0' : 'transparent',
217
- color: isPublished ? '#ff4d4f' : '#555',
224
+ border: isPublished
225
+ ? '1px solid #ff4d4f'
226
+ : '1px solid var(--ant-color-border)',
227
+ background: isPublished
228
+ ? 'var(--ant-color-error-bg)'
229
+ : 'transparent',
230
+ color: isPublished
231
+ ? '#ff4d4f'
232
+ : 'var(--ant-color-text-secondary)',
218
233
  fontWeight: 500,
219
234
  transition: 'all 200ms ease',
220
235
  }}
@@ -7,6 +7,7 @@ import {
7
7
  CheckOutlined,
8
8
  CodeOutlined,
9
9
  } from '@ant-design/icons';
10
+ import { useAppearance } from 'components/contexts/color-mode';
10
11
  import type { PropDoc, ComponentVariant } from './types';
11
12
 
12
13
  type IStandaloneCodeEditor = Parameters<OnMount>[0];
@@ -32,7 +33,7 @@ const CopyButton: React.FC<{ text: string }> = ({ text }) => {
32
33
  setCopied(true);
33
34
  setTimeout(() => setCopied(false), 1500);
34
35
  }}
35
- style={{ fontSize: 12, color: 'rgba(0,0,0,0.45)' }}
36
+ style={{ fontSize: 12, color: 'var(--ant-color-text-tertiary)' }}
36
37
  />
37
38
  </Tooltip>
38
39
  );
@@ -73,6 +74,7 @@ const CodeFloatWindow: React.FC<CodeFloatWindowProps> = ({
73
74
  onChange,
74
75
  onClose,
75
76
  }) => {
77
+ const { mode } = useAppearance();
76
78
  const [pos, setPos] = useState({ x: 200, y: 80 });
77
79
  const [size, setSize] = useState({ w: 560, h: 480 });
78
80
  const dragging = useRef(false);
@@ -199,8 +201,8 @@ const CodeFloatWindow: React.FC<CodeFloatWindowProps> = ({
199
201
  top: pos.y,
200
202
  width: size.w,
201
203
  height: size.h,
202
- background: '#fff',
203
- border: '1px solid #d9d9d9',
204
+ background: 'var(--ant-color-bg-elevated)',
205
+ border: '1px solid var(--ant-color-border)',
204
206
  borderRadius: 8,
205
207
  boxShadow:
206
208
  '0 6px 16px 0 rgba(0,0,0,0.08), 0 3px 6px -4px rgba(0,0,0,0.12), 0 9px 28px 8px rgba(0,0,0,0.05)',
@@ -277,8 +279,8 @@ const CodeFloatWindow: React.FC<CodeFloatWindowProps> = ({
277
279
  style={{
278
280
  height: 40,
279
281
  padding: '0 16px',
280
- background: '#fafafa',
281
- borderBottom: '1px solid #f0f0f0',
282
+ background: 'var(--ant-color-fill-quaternary)',
283
+ borderBottom: '1px solid var(--ant-color-border-secondary)',
282
284
  display: 'flex',
283
285
  alignItems: 'center',
284
286
  justifyContent: 'space-between',
@@ -290,7 +292,11 @@ const CodeFloatWindow: React.FC<CodeFloatWindowProps> = ({
290
292
  <div style={{ display: 'flex', alignItems: 'center', gap: 8 }}>
291
293
  <CodeOutlined style={{ fontSize: 14, color: '#1677ff' }} />
292
294
  <span
293
- style={{ fontSize: 13, fontWeight: 600, color: 'rgba(0,0,0,0.88)' }}
295
+ style={{
296
+ fontSize: 13,
297
+ fontWeight: 600,
298
+ color: 'var(--ant-color-text)',
299
+ }}
294
300
  >
295
301
  {componentType}
296
302
  </span>
@@ -302,7 +308,7 @@ const CodeFloatWindow: React.FC<CodeFloatWindowProps> = ({
302
308
  type="text"
303
309
  icon={<CloseOutlined />}
304
310
  onClick={onClose}
305
- style={{ color: 'rgba(0,0,0,0.45)' }}
311
+ style={{ color: 'var(--ant-color-text-tertiary)' }}
306
312
  />
307
313
  </div>
308
314
  </div>
@@ -310,8 +316,8 @@ const CodeFloatWindow: React.FC<CodeFloatWindowProps> = ({
310
316
  {/* Imports(只读提示条) */}
311
317
  <div
312
318
  style={{
313
- background: '#f6f8fa',
314
- borderBottom: '1px solid #f0f0f0',
319
+ background: 'var(--ant-color-fill-quaternary)',
320
+ borderBottom: '1px solid var(--ant-color-border-secondary)',
315
321
  padding: '6px 16px',
316
322
  flexShrink: 0,
317
323
  }}
@@ -341,7 +347,7 @@ const CodeFloatWindow: React.FC<CodeFloatWindowProps> = ({
341
347
  onChange={(val) => onChange(val ?? '')}
342
348
  beforeMount={handleBeforeMount}
343
349
  onMount={handleMount}
344
- theme="vs"
350
+ theme={mode === 'dark' ? 'vs-dark' : 'vs'}
345
351
  options={{
346
352
  minimap: { enabled: false },
347
353
  fontSize: 14,
@@ -145,7 +145,7 @@ const PublishModal: React.FC<PublishModalProps> = ({
145
145
  confirmLoading={submitting}
146
146
  width={480}
147
147
  >
148
- <Form form={form} layout="vertical" style={{ marginTop: 16 }}>
148
+ <Form form={form} layout="vertical">
149
149
  <Form.Item
150
150
  name="pageName"
151
151
  label={t('canvas.publishModal.pageName')}