From 12accb257584e6499619ab8b371d7c70d24d5759 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=AD=90=E9=BB=98?= <925456043@qq.com> Date: Tue, 24 Feb 2026 11:20:18 +0800 Subject: [PATCH] =?UTF-8?q?workflow=E5=BA=95=E5=B1=82UI=E5=BA=93=E6=95=B4?= =?UTF-8?q?=E5=90=88=E8=87=B3=E9=A1=B9=E7=9B=AE=EF=BC=8C=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E6=9E=84=E5=BB=BA=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- easyflow-ui-admin/app/package.json | 2 +- easyflow-ui-admin/app/vite.config.mts | 9 +- easyflow-ui-admin/eslint.config.mjs | 8 +- .../vite-config/src/config/application.ts | 25 +- easyflow-ui-admin/package.json | 5 +- .../packages/tinyflow-ui/.eslintrc.cjs | 5 + .../packages/tinyflow-ui/package.json | 76 +++ .../packages/tinyflow-ui/src/Tinyflow.ts | 91 ++++ .../src/components/TinyflowComponent.svelte | 38 ++ .../src/components/TinyflowCore.svelte | 441 +++++++++++++++++ .../tinyflow-ui/src/components/Toolbar.svelte | 176 +++++++ .../src/components/base/button.svelte | 13 + .../src/components/base/checkbox.svelte | 6 + .../src/components/base/chosen.svelte | 30 ++ .../src/components/base/collapse.svelte | 78 +++ .../components/base/floating-trigger.svelte | 40 ++ .../src/components/base/heading.svelte | 15 + .../tinyflow-ui/src/components/base/index.ts | 27 + .../src/components/base/input.svelte | 6 + .../src/components/base/menu-button.svelte | 25 + .../src/components/base/render.svelte | 12 + .../src/components/base/select.svelte | 117 +++++ .../src/components/base/tabs.svelte | 40 ++ .../src/components/base/textarea.svelte | 81 +++ .../src/components/base/types.d.ts | 14 + .../core/ConfirmParameterItem.svelte | 178 +++++++ .../core/ConfirmParameterList.svelte | 66 +++ .../core/DefinedParameterItem.svelte | 184 +++++++ .../core/DefinedParameterList.svelte | 56 +++ .../components/core/DraggableButton.svelte | 30 ++ .../src/components/core/NodeWrapper.svelte | 299 +++++++++++ .../src/components/core/OutputDefItem.svelte | 225 +++++++++ .../src/components/core/OutputDefList.svelte | 76 +++ .../components/core/RefParameterItem.svelte | 175 +++++++ .../components/core/RefParameterList.svelte | 68 +++ .../src/components/nodes/CodeNode.svelte | 129 +++++ .../src/components/nodes/ConfirmNode.svelte | 132 +++++ .../src/components/nodes/CustomNode.svelte | 250 ++++++++++ .../src/components/nodes/EndNode.svelte | 50 ++ .../src/components/nodes/HttpNode.svelte | 263 ++++++++++ .../src/components/nodes/KnowledgeNode.svelte | 173 +++++++ .../src/components/nodes/LLMNode.svelte | 292 +++++++++++ .../src/components/nodes/LoopNode.svelte | 95 ++++ .../components/nodes/SearchEngineNode.svelte | 160 ++++++ .../src/components/nodes/StartNode.svelte | 59 +++ .../src/components/nodes/TemplateNode.svelte | 93 ++++ .../tinyflow-ui/src/components/nodes/index.ts | 27 + .../tinyflow-ui/src/components/utils/IdGen.ts | 12 + .../src/components/utils/NodeUtils.ts | 26 + .../src/components/utils/createFloating.ts | 193 ++++++++ .../src/components/utils/deepClone.ts | 3 + .../src/components/utils/deepEqual.ts | 37 ++ .../components/utils/isInEditableElement.ts | 16 + .../utils/useAddParameter.svelte.ts | 63 +++ .../components/utils/useCopyNode.svelte.ts | 27 + .../utils/useCopyPasteHandler.svelte.ts | 282 +++++++++++ .../components/utils/useDeleteEdge.svelte.ts | 10 + .../components/utils/useDeleteNode.svelte.ts | 11 + .../useEnsureParentInNodesBefore.svelte.ts | 43 ++ .../utils/useGetEdgesBySource.svelte.ts | 11 + .../utils/useGetEdgesByTarget.svelte.ts | 11 + .../src/components/utils/useGetNode.svelte.ts | 10 + .../useGetNodeRelativePosition.svelte.ts | 22 + .../utils/useGetNodesFromSource.svelte.ts | 31 ++ .../components/utils/useRefOptions.svelte.ts | 117 +++++ .../utils/useUpdateEdgeData.svelte.ts | 25 + .../packages/tinyflow-ui/src/consts.ts | 65 +++ .../packages/tinyflow-ui/src/index.ts | 3 + .../tinyflow-ui/src/store/stores.svelte.ts | 74 +++ .../packages/tinyflow-ui/src/styles/base.less | 245 +++++++++ .../packages/tinyflow-ui/src/styles/index.ts | 3 + .../tinyflow-ui/src/styles/tinyflow.less | 160 ++++++ .../tinyflow-ui/src/styles/variable.less | 14 + .../packages/tinyflow-ui/src/types.ts | 113 +++++ .../packages/tinyflow-ui/svelte.config.js | 15 + .../packages/tinyflow-ui/tsconfig.app.json | 20 + .../packages/tinyflow-ui/tsconfig.json | 4 + .../packages/tinyflow-ui/tsconfig.node.json | 24 + .../packages/tinyflow-ui/vite.config.ts | 44 ++ .../packages/tinyflow-vue/.eslintrc.cjs | 5 + .../packages/tinyflow-vue/index.html | 12 + .../packages/tinyflow-vue/package.json | 74 +++ .../packages/tinyflow-vue/src/Tinyflow.vue | 78 +++ .../packages/tinyflow-vue/src/index.ts | 3 + .../packages/tinyflow-vue/src/main.ts | 4 + .../packages/tinyflow-vue/tsconfig.app.json | 24 + .../packages/tinyflow-vue/tsconfig.json | 4 + .../packages/tinyflow-vue/tsconfig.node.json | 24 + .../packages/tinyflow-vue/vite.config.ts | 39 ++ easyflow-ui-admin/pnpm-lock.yaml | 465 ++++++++++++++---- easyflow-ui-admin/readme.md | 9 + 91 files changed, 6820 insertions(+), 115 deletions(-) create mode 100644 easyflow-ui-admin/packages/tinyflow-ui/.eslintrc.cjs create mode 100644 easyflow-ui-admin/packages/tinyflow-ui/package.json create mode 100644 easyflow-ui-admin/packages/tinyflow-ui/src/Tinyflow.ts create mode 100644 easyflow-ui-admin/packages/tinyflow-ui/src/components/TinyflowComponent.svelte create mode 100644 easyflow-ui-admin/packages/tinyflow-ui/src/components/TinyflowCore.svelte create mode 100644 easyflow-ui-admin/packages/tinyflow-ui/src/components/Toolbar.svelte create mode 100644 easyflow-ui-admin/packages/tinyflow-ui/src/components/base/button.svelte create mode 100644 easyflow-ui-admin/packages/tinyflow-ui/src/components/base/checkbox.svelte create mode 100644 easyflow-ui-admin/packages/tinyflow-ui/src/components/base/chosen.svelte create mode 100644 easyflow-ui-admin/packages/tinyflow-ui/src/components/base/collapse.svelte create mode 100644 easyflow-ui-admin/packages/tinyflow-ui/src/components/base/floating-trigger.svelte create mode 100644 easyflow-ui-admin/packages/tinyflow-ui/src/components/base/heading.svelte create mode 100644 easyflow-ui-admin/packages/tinyflow-ui/src/components/base/index.ts create mode 100644 easyflow-ui-admin/packages/tinyflow-ui/src/components/base/input.svelte create mode 100644 easyflow-ui-admin/packages/tinyflow-ui/src/components/base/menu-button.svelte create mode 100644 easyflow-ui-admin/packages/tinyflow-ui/src/components/base/render.svelte create mode 100644 easyflow-ui-admin/packages/tinyflow-ui/src/components/base/select.svelte create mode 100644 easyflow-ui-admin/packages/tinyflow-ui/src/components/base/tabs.svelte create mode 100644 easyflow-ui-admin/packages/tinyflow-ui/src/components/base/textarea.svelte create mode 100644 easyflow-ui-admin/packages/tinyflow-ui/src/components/base/types.d.ts create mode 100644 easyflow-ui-admin/packages/tinyflow-ui/src/components/core/ConfirmParameterItem.svelte create mode 100644 easyflow-ui-admin/packages/tinyflow-ui/src/components/core/ConfirmParameterList.svelte create mode 100644 easyflow-ui-admin/packages/tinyflow-ui/src/components/core/DefinedParameterItem.svelte create mode 100644 easyflow-ui-admin/packages/tinyflow-ui/src/components/core/DefinedParameterList.svelte create mode 100644 easyflow-ui-admin/packages/tinyflow-ui/src/components/core/DraggableButton.svelte create mode 100644 easyflow-ui-admin/packages/tinyflow-ui/src/components/core/NodeWrapper.svelte create mode 100644 easyflow-ui-admin/packages/tinyflow-ui/src/components/core/OutputDefItem.svelte create mode 100644 easyflow-ui-admin/packages/tinyflow-ui/src/components/core/OutputDefList.svelte create mode 100644 easyflow-ui-admin/packages/tinyflow-ui/src/components/core/RefParameterItem.svelte create mode 100644 easyflow-ui-admin/packages/tinyflow-ui/src/components/core/RefParameterList.svelte create mode 100644 easyflow-ui-admin/packages/tinyflow-ui/src/components/nodes/CodeNode.svelte create mode 100644 easyflow-ui-admin/packages/tinyflow-ui/src/components/nodes/ConfirmNode.svelte create mode 100644 easyflow-ui-admin/packages/tinyflow-ui/src/components/nodes/CustomNode.svelte create mode 100644 easyflow-ui-admin/packages/tinyflow-ui/src/components/nodes/EndNode.svelte create mode 100644 easyflow-ui-admin/packages/tinyflow-ui/src/components/nodes/HttpNode.svelte create mode 100644 easyflow-ui-admin/packages/tinyflow-ui/src/components/nodes/KnowledgeNode.svelte create mode 100644 easyflow-ui-admin/packages/tinyflow-ui/src/components/nodes/LLMNode.svelte create mode 100644 easyflow-ui-admin/packages/tinyflow-ui/src/components/nodes/LoopNode.svelte create mode 100644 easyflow-ui-admin/packages/tinyflow-ui/src/components/nodes/SearchEngineNode.svelte create mode 100644 easyflow-ui-admin/packages/tinyflow-ui/src/components/nodes/StartNode.svelte create mode 100644 easyflow-ui-admin/packages/tinyflow-ui/src/components/nodes/TemplateNode.svelte create mode 100644 easyflow-ui-admin/packages/tinyflow-ui/src/components/nodes/index.ts create mode 100644 easyflow-ui-admin/packages/tinyflow-ui/src/components/utils/IdGen.ts create mode 100644 easyflow-ui-admin/packages/tinyflow-ui/src/components/utils/NodeUtils.ts create mode 100644 easyflow-ui-admin/packages/tinyflow-ui/src/components/utils/createFloating.ts create mode 100644 easyflow-ui-admin/packages/tinyflow-ui/src/components/utils/deepClone.ts create mode 100644 easyflow-ui-admin/packages/tinyflow-ui/src/components/utils/deepEqual.ts create mode 100644 easyflow-ui-admin/packages/tinyflow-ui/src/components/utils/isInEditableElement.ts create mode 100644 easyflow-ui-admin/packages/tinyflow-ui/src/components/utils/useAddParameter.svelte.ts create mode 100644 easyflow-ui-admin/packages/tinyflow-ui/src/components/utils/useCopyNode.svelte.ts create mode 100644 easyflow-ui-admin/packages/tinyflow-ui/src/components/utils/useCopyPasteHandler.svelte.ts create mode 100644 easyflow-ui-admin/packages/tinyflow-ui/src/components/utils/useDeleteEdge.svelte.ts create mode 100644 easyflow-ui-admin/packages/tinyflow-ui/src/components/utils/useDeleteNode.svelte.ts create mode 100644 easyflow-ui-admin/packages/tinyflow-ui/src/components/utils/useEnsureParentInNodesBefore.svelte.ts create mode 100644 easyflow-ui-admin/packages/tinyflow-ui/src/components/utils/useGetEdgesBySource.svelte.ts create mode 100644 easyflow-ui-admin/packages/tinyflow-ui/src/components/utils/useGetEdgesByTarget.svelte.ts create mode 100644 easyflow-ui-admin/packages/tinyflow-ui/src/components/utils/useGetNode.svelte.ts create mode 100644 easyflow-ui-admin/packages/tinyflow-ui/src/components/utils/useGetNodeRelativePosition.svelte.ts create mode 100644 easyflow-ui-admin/packages/tinyflow-ui/src/components/utils/useGetNodesFromSource.svelte.ts create mode 100644 easyflow-ui-admin/packages/tinyflow-ui/src/components/utils/useRefOptions.svelte.ts create mode 100644 easyflow-ui-admin/packages/tinyflow-ui/src/components/utils/useUpdateEdgeData.svelte.ts create mode 100644 easyflow-ui-admin/packages/tinyflow-ui/src/consts.ts create mode 100644 easyflow-ui-admin/packages/tinyflow-ui/src/index.ts create mode 100644 easyflow-ui-admin/packages/tinyflow-ui/src/store/stores.svelte.ts create mode 100644 easyflow-ui-admin/packages/tinyflow-ui/src/styles/base.less create mode 100644 easyflow-ui-admin/packages/tinyflow-ui/src/styles/index.ts create mode 100644 easyflow-ui-admin/packages/tinyflow-ui/src/styles/tinyflow.less create mode 100644 easyflow-ui-admin/packages/tinyflow-ui/src/styles/variable.less create mode 100644 easyflow-ui-admin/packages/tinyflow-ui/src/types.ts create mode 100644 easyflow-ui-admin/packages/tinyflow-ui/svelte.config.js create mode 100644 easyflow-ui-admin/packages/tinyflow-ui/tsconfig.app.json create mode 100644 easyflow-ui-admin/packages/tinyflow-ui/tsconfig.json create mode 100644 easyflow-ui-admin/packages/tinyflow-ui/tsconfig.node.json create mode 100644 easyflow-ui-admin/packages/tinyflow-ui/vite.config.ts create mode 100644 easyflow-ui-admin/packages/tinyflow-vue/.eslintrc.cjs create mode 100644 easyflow-ui-admin/packages/tinyflow-vue/index.html create mode 100644 easyflow-ui-admin/packages/tinyflow-vue/package.json create mode 100644 easyflow-ui-admin/packages/tinyflow-vue/src/Tinyflow.vue create mode 100644 easyflow-ui-admin/packages/tinyflow-vue/src/index.ts create mode 100644 easyflow-ui-admin/packages/tinyflow-vue/src/main.ts create mode 100644 easyflow-ui-admin/packages/tinyflow-vue/tsconfig.app.json create mode 100644 easyflow-ui-admin/packages/tinyflow-vue/tsconfig.json create mode 100644 easyflow-ui-admin/packages/tinyflow-vue/tsconfig.node.json create mode 100644 easyflow-ui-admin/packages/tinyflow-vue/vite.config.ts diff --git a/easyflow-ui-admin/app/package.json b/easyflow-ui-admin/app/package.json index 007cdce..0644837 100644 --- a/easyflow-ui-admin/app/package.json +++ b/easyflow-ui-admin/app/package.json @@ -29,7 +29,7 @@ "@easyflow/types": "workspace:*", "@easyflow/utils": "workspace:*", "@element-plus/icons-vue": "^2.3.2", - "@tinyflow-ai/vue": "^1.2.2", + "@tinyflow-ai/vue": "workspace:*", "@vueuse/core": "catalog:", "dayjs": "catalog:", "dompurify": "^3.3.1", diff --git a/easyflow-ui-admin/app/vite.config.mts b/easyflow-ui-admin/app/vite.config.mts index ae2ab8d..3510ba8 100644 --- a/easyflow-ui-admin/app/vite.config.mts +++ b/easyflow-ui-admin/app/vite.config.mts @@ -1,4 +1,4 @@ -import { defineConfig } from '@easyflow/vite-config'; +import {defineConfig} from '@easyflow/vite-config'; import ElementPlus from 'unplugin-element-plus/vite'; @@ -6,6 +6,13 @@ export default defineConfig(async () => { return { application: {}, vite: { + resolve: { + alias: { + // @vueuse/motion expects tslib default export during dev pre-bundling + // and breaks when Vite resolves to ESM-only modules/index.js. + tslib: 'tslib/tslib.js', + }, + }, plugins: [ ElementPlus({ format: 'esm', diff --git a/easyflow-ui-admin/eslint.config.mjs b/easyflow-ui-admin/eslint.config.mjs index 0337b46..5f742df 100644 --- a/easyflow-ui-admin/eslint.config.mjs +++ b/easyflow-ui-admin/eslint.config.mjs @@ -1,5 +1,9 @@ // @ts-check -import { defineConfig } from '@easyflow/eslint-config'; +import {defineConfig} from '@easyflow/eslint-config'; -export default defineConfig(); +export default defineConfig([ + { + ignores: ['packages/tinyflow-ui/**', 'packages/tinyflow-vue/**'], + }, +]); diff --git a/easyflow-ui-admin/internal/vite-config/src/config/application.ts b/easyflow-ui-admin/internal/vite-config/src/config/application.ts index 2e0e3fc..d92c0de 100644 --- a/easyflow-ui-admin/internal/vite-config/src/config/application.ts +++ b/easyflow-ui-admin/internal/vite-config/src/config/application.ts @@ -1,18 +1,18 @@ -import type { CSSOptions, UserConfig } from 'vite'; +import type {CSSOptions, UserConfig} from 'vite'; +import {defineConfig, loadEnv, mergeConfig} from 'vite'; -import type { DefineApplicationOptions } from '../typing'; +import type {DefineApplicationOptions} from '../typing'; -import path, { relative } from 'node:path'; +import path, {relative} from 'node:path'; -import { findMonorepoRoot } from '@easyflow/node-utils'; +import {findMonorepoRoot} from '@easyflow/node-utils'; -import { NodePackageImporter } from 'sass'; -import { defineConfig, loadEnv, mergeConfig } from 'vite'; +import {NodePackageImporter} from 'sass'; -import { defaultImportmapOptions, getDefaultPwaOptions } from '../options'; -import { loadApplicationPlugins } from '../plugins'; -import { loadAndConvertEnv } from '../utils/env'; -import { getCommonConfig } from './common'; +import {defaultImportmapOptions, getDefaultPwaOptions} from '../options'; +import {loadApplicationPlugins} from '../plugins'; +import {loadAndConvertEnv} from '../utils/env'; +import {getCommonConfig} from './common'; function defineApplicationConfig(userConfigPromise?: DefineApplicationOptions) { return defineConfig(async (config) => { @@ -78,6 +78,11 @@ function defineApplicationConfig(userConfigPromise?: DefineApplicationOptions) { : [], legalComments: 'none', }, + // Workspace packages expose `development` entry to source files. + // Keep this condition enabled in build mode to avoid resolving to stubbed dist artifacts. + resolve: { + conditions: ['development'], + }, plugins, server: { host: true, diff --git a/easyflow-ui-admin/package.json b/easyflow-ui-admin/package.json index 731959f..7477f85 100644 --- a/easyflow-ui-admin/package.json +++ b/easyflow-ui-admin/package.json @@ -18,8 +18,11 @@ "check:type": "turbo run typecheck", "clean": "node ./scripts/clean.mjs", "commit": "czg", - "dev": "turbo-run dev", + "dev": "pnpm run dev:app", "dev:app": "pnpm -F @easyflow/app run dev", + "dev:all": "turbo-run dev", + "dev:tinyflow": "pnpm --filter @tinyflow-ai/ui run build && pnpm --filter @tinyflow-ai/vue run build && pnpm --parallel --filter @tinyflow-ai/ui --filter @tinyflow-ai/vue run build:watch", + "dev:app:tinyflow": "pnpm run dev:tinyflow & pnpm run dev:app", "format": "vsh lint --format", "lint": "vsh lint", "postinstall": "pnpm -r run stub --if-present", diff --git a/easyflow-ui-admin/packages/tinyflow-ui/.eslintrc.cjs b/easyflow-ui-admin/packages/tinyflow-ui/.eslintrc.cjs new file mode 100644 index 0000000..a6e9733 --- /dev/null +++ b/easyflow-ui-admin/packages/tinyflow-ui/.eslintrc.cjs @@ -0,0 +1,5 @@ +module.exports = { + rules: { + '@typescript-eslint/no-explicit-any': ['off'] + } +}; diff --git a/easyflow-ui-admin/packages/tinyflow-ui/package.json b/easyflow-ui-admin/packages/tinyflow-ui/package.json new file mode 100644 index 0000000..fbe5ca5 --- /dev/null +++ b/easyflow-ui-admin/packages/tinyflow-ui/package.json @@ -0,0 +1,76 @@ +{ + "name": "@tinyflow-ai/ui", + "version": "1.2.2", + "type": "module", + "keywords": [ + "tinyflow", + "ai", + "ai flow", + "agent flow", + "agents flow" + ], + "types": "./dist/index.d.ts", + "main": "./dist/index.js", + "module": "./dist/index.js", + "browser": "./dist/index.umd.js", + "license": "LGPL-3.0-or-later", + "files": [ + "dist", + "LICENSE", + "README.md" + ], + "scripts": { + "dev": "vite", + "build": "vite build", + "build:watch": "vite build --watch --emptyOutDir false", + "preview": "vite preview", + "check": "svelte-check --tsconfig ./tsconfig.app.json && tsc -p tsconfig.node.json" + }, + "devDependencies": { + "@rollup/plugin-replace": "^6.0.2", + "@sveltejs/vite-plugin-svelte": "^6.2.1", + "@tsconfig/svelte": "^5.0.5", + "@types/node": "^22.18.12", + "autoprefixer": "^10.4.21", + "less": "^4.2.2", + "svelte": "^5.45.2", + "svelte-check": "^4.3.4", + "typescript": "^5.6.2", + "vite": "^7.2.4", + "vite-plugin-dts": "^4.5.4" + }, + "dependencies": { + "@floating-ui/dom": "^1.7.4", + "@xyflow/svelte": "^1.4.2" + }, + "imports": { + "#*": [ + "./src/*.ts", + "./src/*.svelte" + ] + }, + "exports": { + ".": { + "svelte": "./src/index.ts", + "types": "./dist/index.d.ts", + "import": "./dist/index.js", + "require": "./dist/index.js" + }, + "./dist/index.css": { + "import": "./dist/index.css", + "require": "./dist/index.css" + } + }, + "publishConfig": { + "access": "public", + "registry": "https://registry.npmjs.org/" + }, + "repository": { + "type": "git", + "url": "https://github.com/tinyflow-ai/tinyflow" + }, + "bugs": { + "url": "https://github.com/tinyflow-ai/tinyflow/issues" + }, + "homepage": "https://github.com/tinyflow-ai/tinyflow#readme" +} diff --git a/easyflow-ui-admin/packages/tinyflow-ui/src/Tinyflow.ts b/easyflow-ui-admin/packages/tinyflow-ui/src/Tinyflow.ts new file mode 100644 index 0000000..0f4d26d --- /dev/null +++ b/easyflow-ui-admin/packages/tinyflow-ui/src/Tinyflow.ts @@ -0,0 +1,91 @@ +import {type useSvelteFlow} from '@xyflow/svelte'; +import {componentName} from './consts'; +import type {TinyflowData, TinyflowOptions} from './types'; + +type FlowInstance = ReturnType; + +export class Tinyflow { + private options!: TinyflowOptions; + private rootEl!: Element; + private svelteFlowInstance!: FlowInstance; + + constructor(options: TinyflowOptions) { + if (typeof options.element !== 'string' && !(options.element instanceof Element)) { + throw new Error('element must be a string or Element'); + } + this._setOptions(options); + this._init(); + } + + private _init() { + if (typeof this.options.element === 'string') { + this.rootEl = document.querySelector(this.options.element)!; + if (!this.rootEl) { + throw new Error( + `element not found by document.querySelector('${this.options.element}')` + ); + } + } else if (this.options.element instanceof Element) { + this.rootEl = this.options.element; + } else { + throw new Error('element must be a string or Element'); + } + + const tinyflowEl = document.createElement(componentName) as HTMLElement & { + options: TinyflowOptions; + onInit: (svelteFlowInstance: FlowInstance) => void; + }; + tinyflowEl.style.display = 'block'; + tinyflowEl.style.width = '100%'; + tinyflowEl.style.height = '100%'; + tinyflowEl.classList.add('tf-theme-light'); + + tinyflowEl.options = this.options; + tinyflowEl.onInit = (svelteFlowInstance: FlowInstance) => { + this.svelteFlowInstance = svelteFlowInstance; + }; + + this.rootEl.appendChild(tinyflowEl); + } + + private _setOptions(options: TinyflowOptions) { + this.options = { + ...options + }; + } + + getOptions() { + return this.options; + } + + getData() { + return this.svelteFlowInstance.toObject(); + } + + setData(data: TinyflowData) { + this.options.data = data; + + const tinyflowEl = document.createElement(componentName) as HTMLElement & { + options: TinyflowOptions; + onInit: (svelteFlowInstance: FlowInstance) => void; + }; + tinyflowEl.style.display = 'block'; + tinyflowEl.style.width = '100%'; + tinyflowEl.style.height = '100%'; + tinyflowEl.classList.add('tf-theme-light'); + + tinyflowEl.options = this.options; + tinyflowEl.onInit = (svelteFlowInstance: FlowInstance) => { + this.svelteFlowInstance = svelteFlowInstance; + }; + + this.destroy(); + this.rootEl.appendChild(tinyflowEl); + } + + destroy() { + while (this.rootEl.firstChild) { + this.rootEl.removeChild(this.rootEl.firstChild); + } + } +} diff --git a/easyflow-ui-admin/packages/tinyflow-ui/src/components/TinyflowComponent.svelte b/easyflow-ui-admin/packages/tinyflow-ui/src/components/TinyflowComponent.svelte new file mode 100644 index 0000000..633baec --- /dev/null +++ b/easyflow-ui-admin/packages/tinyflow-ui/src/components/TinyflowComponent.svelte @@ -0,0 +1,38 @@ + + + + + + + + diff --git a/easyflow-ui-admin/packages/tinyflow-ui/src/components/TinyflowCore.svelte b/easyflow-ui-admin/packages/tinyflow-ui/src/components/TinyflowCore.svelte new file mode 100644 index 0000000..5881b96 --- /dev/null +++ b/easyflow-ui-admin/packages/tinyflow-ui/src/components/TinyflowCore.svelte @@ -0,0 +1,441 @@ + + + +
+ { + showEdgePanel = true; + currentEdge = e.edge; + }} + onbeforeconnect={(edge) => { + return { + ...edge, + id:genShortId(), + } + }} + ondelete={onDelete} + onclick={(e) => { + const el = e.target as HTMLElement; + if (el.classList.contains("svelte-flow__edge-interaction") + || el.classList.contains('panel-content') + || el.closest('.panel-content')){ + return + } + showEdgePanel = false; + currentEdge = null; + }} + defaultEdgeOptions={{ + // animated: true, + // label: 'edge label', + markerEnd: { + type: MarkerType.ArrowClosed, + // color: 'red', + width: 20, + height: 20 + } + }} + > + + + + + {#if showEdgePanel} + +
+
边属性设置
+
边条件设置
+
+ diff --git a/easyflow-ui-admin/packages/tinyflow-ui/src/components/base/types.d.ts b/easyflow-ui-admin/packages/tinyflow-ui/src/components/base/types.d.ts new file mode 100644 index 0000000..da7301c --- /dev/null +++ b/easyflow-ui-admin/packages/tinyflow-ui/src/components/base/types.d.ts @@ -0,0 +1,14 @@ +import type { + HTMLAttributes, + HTMLButtonAttributes, + HTMLInputAttributes, + HTMLTextareaAttributes, +} from 'svelte/elements'; + +export interface MyHTMLButtonAttributes extends HTMLButtonAttributes {} + +export interface MyHTMLInputAttributes extends HTMLInputAttributes {} + +export interface MyHTMLTextareaAttributes extends HTMLTextareaAttributes {} + +export interface MyHTMLAttributes extends HTMLAttributes {} diff --git a/easyflow-ui-admin/packages/tinyflow-ui/src/components/core/ConfirmParameterItem.svelte b/easyflow-ui-admin/packages/tinyflow-ui/src/components/core/ConfirmParameterItem.svelte new file mode 100644 index 0000000..3021833 --- /dev/null +++ b/easyflow-ui-admin/packages/tinyflow-ui/src/components/core/ConfirmParameterItem.svelte @@ -0,0 +1,178 @@ + + + +
+ updateParamByEvent('name', event)} /> +
+
+ {#if param.refType === 'fixed'} + updateParamByEvent('value', event)} /> + {:else if (param.refType !== 'input')} + +
+
+ 确认方式: +