@flowgram.ai/panel-manager-plugin 0.4.19 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.rush/temp/chunked-rush-logs/panel-manager-plugin.build.chunks.jsonl +9 -9
- package/.rush/temp/package-deps_build.json +13 -12
- package/.rush/temp/shrinkwrap-deps.json +4 -1
- package/CHANGELOG.json +3 -3
- package/CHANGELOG.md +3 -3
- package/dist/esm/index.js +163 -51
- package/dist/esm/index.js.map +1 -1
- package/dist/index.d.mts +36 -12
- package/dist/index.d.ts +36 -12
- package/dist/index.js +175 -52
- package/dist/index.js.map +1 -1
- package/package.json +9 -6
- package/rush-logs/panel-manager-plugin.build.log +9 -9
- package/src/components/panel-layer/css.ts +8 -0
- package/src/components/panel-layer/float-panel.tsx +22 -8
- package/src/components/panel-layer/panel-layer.tsx +7 -6
- package/src/components/resize-bar/index.tsx +80 -0
- package/src/create-panel-manager-plugin.ts +2 -4
- package/src/index.ts +2 -0
- package/src/services/float-panel.ts +26 -2
- package/src/services/panel-config.ts +6 -0
- package/src/services/panel-layer.ts +25 -17
- package/src/services/panel-manager.ts +4 -4
- package/src/types.ts +2 -0
|
@@ -9,13 +9,13 @@
|
|
|
9
9
|
{"kind":"O","text":"\u001b[34mCLI\u001b[39m Target: es2020\n"}
|
|
10
10
|
{"kind":"O","text":"\u001b[34mCJS\u001b[39m Build start\n"}
|
|
11
11
|
{"kind":"O","text":"\u001b[34mESM\u001b[39m Build start\n"}
|
|
12
|
-
{"kind":"O","text":"\u001b[32mCJS\u001b[39m \u001b[1mdist/index.js \u001b[22m\u001b[
|
|
13
|
-
{"kind":"O","text":"\u001b[32mCJS\u001b[39m \u001b[1mdist/index.js.map \u001b[22m\u001b[
|
|
14
|
-
{"kind":"O","text":"\u001b[32mCJS\u001b[39m ⚡️ Build success in
|
|
15
|
-
{"kind":"O","text":"\u001b[32mESM\u001b[39m \u001b[1mdist/esm/index.js \u001b[22m\u001b[
|
|
16
|
-
{"kind":"O","text":"\u001b[32mESM\u001b[39m \u001b[1mdist/esm/index.js.map \u001b[22m\u001b[
|
|
17
|
-
{"kind":"O","text":"\u001b[32mESM\u001b[39m ⚡️ Build success in
|
|
12
|
+
{"kind":"O","text":"\u001b[32mCJS\u001b[39m \u001b[1mdist/index.js \u001b[22m\u001b[32m12.98 KB\u001b[39m\n"}
|
|
13
|
+
{"kind":"O","text":"\u001b[32mCJS\u001b[39m \u001b[1mdist/index.js.map \u001b[22m\u001b[32m20.53 KB\u001b[39m\n"}
|
|
14
|
+
{"kind":"O","text":"\u001b[32mCJS\u001b[39m ⚡️ Build success in 119ms\n"}
|
|
15
|
+
{"kind":"O","text":"\u001b[32mESM\u001b[39m \u001b[1mdist/esm/index.js \u001b[22m\u001b[32m10.73 KB\u001b[39m\n"}
|
|
16
|
+
{"kind":"O","text":"\u001b[32mESM\u001b[39m \u001b[1mdist/esm/index.js.map \u001b[22m\u001b[32m20.09 KB\u001b[39m\n"}
|
|
17
|
+
{"kind":"O","text":"\u001b[32mESM\u001b[39m ⚡️ Build success in 120ms\n"}
|
|
18
18
|
{"kind":"O","text":"\u001b[34mDTS\u001b[39m Build start\n"}
|
|
19
|
-
{"kind":"O","text":"\u001b[32mDTS\u001b[39m ⚡️ Build success in
|
|
20
|
-
{"kind":"O","text":"\u001b[32mDTS\u001b[39m \u001b[1mdist/index.d.ts \u001b[22m\u001b[
|
|
21
|
-
{"kind":"O","text":"\u001b[32mDTS\u001b[39m \u001b[1mdist/index.d.mts \u001b[22m\u001b[
|
|
19
|
+
{"kind":"O","text":"\u001b[32mDTS\u001b[39m ⚡️ Build success in 3925ms\n"}
|
|
20
|
+
{"kind":"O","text":"\u001b[32mDTS\u001b[39m \u001b[1mdist/index.d.ts \u001b[22m\u001b[32m2.53 KB\u001b[39m\n"}
|
|
21
|
+
{"kind":"O","text":"\u001b[32mDTS\u001b[39m \u001b[1mdist/index.d.mts \u001b[22m\u001b[32m2.53 KB\u001b[39m\n"}
|
|
@@ -1,21 +1,22 @@
|
|
|
1
1
|
{
|
|
2
2
|
"files": {
|
|
3
3
|
"packages/plugins/panel-manager-plugin/.eslintrc.cjs": "6b30cfc55136d429873e780785bf8d775edaaa74",
|
|
4
|
-
"packages/plugins/panel-manager-plugin/.rush/temp/shrinkwrap-deps.json": "
|
|
5
|
-
"packages/plugins/panel-manager-plugin/package.json": "
|
|
6
|
-
"packages/plugins/panel-manager-plugin/src/components/panel-layer/css.ts": "
|
|
7
|
-
"packages/plugins/panel-manager-plugin/src/components/panel-layer/float-panel.tsx": "
|
|
4
|
+
"packages/plugins/panel-manager-plugin/.rush/temp/shrinkwrap-deps.json": "a16042ac9399463dbd64066a00b775f2936dbacd",
|
|
5
|
+
"packages/plugins/panel-manager-plugin/package.json": "13bc0e7f16e3e44d923f3a0d7c12a397d835097a",
|
|
6
|
+
"packages/plugins/panel-manager-plugin/src/components/panel-layer/css.ts": "ee109c7a7f7dd27f92668a31112698e9baf48f29",
|
|
7
|
+
"packages/plugins/panel-manager-plugin/src/components/panel-layer/float-panel.tsx": "c54709e379ebc58a104f251f7e4fa73e0c13194f",
|
|
8
8
|
"packages/plugins/panel-manager-plugin/src/components/panel-layer/index.ts": "40d07a944137146a8beb8e6842e421617e0b4f3c",
|
|
9
|
-
"packages/plugins/panel-manager-plugin/src/components/panel-layer/panel-layer.tsx": "
|
|
10
|
-
"packages/plugins/panel-manager-plugin/src/
|
|
9
|
+
"packages/plugins/panel-manager-plugin/src/components/panel-layer/panel-layer.tsx": "03a35b0acd6c0fcfb0c85e2cdf02bac1aae4ad93",
|
|
10
|
+
"packages/plugins/panel-manager-plugin/src/components/resize-bar/index.tsx": "a8eacd8ac80b61fa6930dc4ca31afa519caa2fb7",
|
|
11
|
+
"packages/plugins/panel-manager-plugin/src/create-panel-manager-plugin.ts": "047c6156ecdf88f8d6d32d11a730b9441c5cc884",
|
|
11
12
|
"packages/plugins/panel-manager-plugin/src/hooks/use-panel-manager.ts": "0e0073c6ad9a1552a9896085b011b79dbfe6309d",
|
|
12
|
-
"packages/plugins/panel-manager-plugin/src/index.ts": "
|
|
13
|
-
"packages/plugins/panel-manager-plugin/src/services/float-panel.ts": "
|
|
13
|
+
"packages/plugins/panel-manager-plugin/src/index.ts": "3d3389bc2d8088922d1f3f10e01200e3e966d650",
|
|
14
|
+
"packages/plugins/panel-manager-plugin/src/services/float-panel.ts": "579889c8dd30051a92c722856be1229960b57d16",
|
|
14
15
|
"packages/plugins/panel-manager-plugin/src/services/index.ts": "bb44c19958ea0a21d5669480edaac6fd9b493f2b",
|
|
15
|
-
"packages/plugins/panel-manager-plugin/src/services/panel-config.ts": "
|
|
16
|
-
"packages/plugins/panel-manager-plugin/src/services/panel-layer.ts": "
|
|
17
|
-
"packages/plugins/panel-manager-plugin/src/services/panel-manager.ts": "
|
|
18
|
-
"packages/plugins/panel-manager-plugin/src/types.ts": "
|
|
16
|
+
"packages/plugins/panel-manager-plugin/src/services/panel-config.ts": "9f8881d09f73f82eef9668f5f75babc83df0d6ed",
|
|
17
|
+
"packages/plugins/panel-manager-plugin/src/services/panel-layer.ts": "765254666bbc804935180fd3288505a7bb65376e",
|
|
18
|
+
"packages/plugins/panel-manager-plugin/src/services/panel-manager.ts": "74ae11f2e1b7f074ca80129a3239069417f523fa",
|
|
19
|
+
"packages/plugins/panel-manager-plugin/src/types.ts": "eda980407d8eb830108b30f60bae42bfb20e9985",
|
|
19
20
|
"packages/plugins/panel-manager-plugin/tsconfig.json": "4b7a4f197dc4f9c62c2938fb3b77780944ad7675"
|
|
20
21
|
},
|
|
21
22
|
"arguments": "npm run build:fast -- --dts-resolve "
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"../../packages/plugins/panel-manager-plugin": "../../packages/plugins/panel-manager-plugin:
|
|
2
|
+
"../../packages/plugins/panel-manager-plugin": "../../packages/plugins/panel-manager-plugin:bZL5u9JLW1Gmg9821/z+Q9hD4VWUjDiF8lX0hm1at7U=:",
|
|
3
3
|
"@esbuild/aix-ppc64@0.25.9": "sha512-OaGtL73Jck6pBKjNIe24BnFE6agGl+6KxDtTfHhy1HmhthfKouEcOhqpSL64K4/0WCtbKFLOdzD/44cJ4k9opA==",
|
|
4
4
|
"@esbuild/android-arm64@0.25.9": "sha512-IDrddSmpSv51ftWslJMvl3Q2ZT98fUSL2/rlUXuVqRXHCs5EUF1/f+jbjF5+NG9UffUDMCiTyh8iec7u8RlTLg==",
|
|
5
5
|
"@esbuild/android-arm@0.25.9": "sha512-5WNI1DaMtxQ7t7B6xa572XMXpHAaI/9Hnhk8lcxF4zVN4xstUgTlvuGDorBguKEnZO70qwEcLpfifMLoxiPqHQ==",
|
|
@@ -58,6 +58,7 @@
|
|
|
58
58
|
"@rollup/rollup-win32-x64-msvc@4.50.1": "sha512-StxAO/8ts62KZVRAm4JZYq9+NqNsV7RvimNK+YM7ry//zebEH6meuugqW/P5OFUCjyQgui+9fUxT6d5NShvMvA==",
|
|
59
59
|
"@types/estree@1.0.8": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
|
|
60
60
|
"@types/prop-types@15.7.15": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==",
|
|
61
|
+
"@types/react-dom@18.3.7(@types/react@18.3.24)": "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==",
|
|
61
62
|
"@types/react@18.3.24": "sha512-0dLEBsA1kI3OezMBF8nSsb7Nk19ZnsyE1LLhB8r27KbgU5H4pvuqZLdtE+aUkJVoXgTVuA+iLIwmZ0TuK4tx6A==",
|
|
62
63
|
"acorn@8.15.0": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
|
|
63
64
|
"ansi-regex@5.0.1": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
|
|
@@ -121,12 +122,14 @@
|
|
|
121
122
|
"postcss-load-config@6.0.1(jiti@2.5.1)(postcss@8.5.6)(tsx@4.19.4)(yaml@2.8.1)": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==",
|
|
122
123
|
"postcss@8.5.6": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
|
|
123
124
|
"punycode@2.3.1": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
|
|
125
|
+
"react-dom@18.3.1(react@18.3.1)": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==",
|
|
124
126
|
"react@18.3.1": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
|
|
125
127
|
"readdirp@4.1.2": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==",
|
|
126
128
|
"reflect-metadata@0.2.2": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==",
|
|
127
129
|
"resolve-from@5.0.0": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
|
|
128
130
|
"resolve-pkg-maps@1.0.0": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
|
|
129
131
|
"rollup@4.50.1": "sha512-78E9voJHwnXQMiQdiqswVLZwJIzdBKJ1GdI5Zx6XwoFKUIk09/sSrr+05QFzvYb8q6Y9pPV45zzDuYa3907TZA==",
|
|
132
|
+
"scheduler@0.23.2": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==",
|
|
130
133
|
"shebang-command@2.0.0": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
|
|
131
134
|
"shebang-regex@3.0.0": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
|
|
132
135
|
"signal-exit@4.1.0": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
|
package/CHANGELOG.json
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
"name": "@flowgram.ai/panel-manager-plugin",
|
|
3
3
|
"entries": [
|
|
4
4
|
{
|
|
5
|
-
"version": "0.
|
|
6
|
-
"tag": "@flowgram.ai/panel-manager-plugin_v0.
|
|
7
|
-
"date": "
|
|
5
|
+
"version": "0.5.0",
|
|
6
|
+
"tag": "@flowgram.ai/panel-manager-plugin_v0.5.0",
|
|
7
|
+
"date": "Wed, 24 Sep 2025 14:58:33 GMT",
|
|
8
8
|
"comments": {}
|
|
9
9
|
}
|
|
10
10
|
]
|
package/CHANGELOG.md
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# Change Log - @flowgram.ai/panel-manager-plugin
|
|
2
2
|
|
|
3
|
-
This log was last generated on
|
|
3
|
+
This log was last generated on Wed, 24 Sep 2025 14:58:33 GMT and should not be manually modified.
|
|
4
4
|
|
|
5
|
-
## 0.
|
|
6
|
-
|
|
5
|
+
## 0.5.0
|
|
6
|
+
Wed, 24 Sep 2025 14:58:33 GMT
|
|
7
7
|
|
|
8
8
|
_Initial release_
|
|
9
9
|
|
package/dist/esm/index.js
CHANGED
|
@@ -22,7 +22,9 @@ var defineConfig = (config) => {
|
|
|
22
22
|
bottom: {
|
|
23
23
|
max: 1
|
|
24
24
|
},
|
|
25
|
-
factories: []
|
|
25
|
+
factories: [],
|
|
26
|
+
getPopupContainer: (ctx) => ctx.playground.node.parentNode,
|
|
27
|
+
autoResize: true
|
|
26
28
|
};
|
|
27
29
|
return {
|
|
28
30
|
...defaultConfig,
|
|
@@ -35,26 +37,43 @@ import { injectable, inject } from "inversify";
|
|
|
35
37
|
|
|
36
38
|
// src/services/float-panel.ts
|
|
37
39
|
import { Emitter } from "@flowgram.ai/utils";
|
|
40
|
+
var PANEL_SIZE_DEFAULT = 400;
|
|
38
41
|
var FloatPanel = class {
|
|
39
42
|
constructor(config) {
|
|
40
43
|
this.config = config;
|
|
41
44
|
this.elements = [];
|
|
42
45
|
this.onUpdateEmitter = new Emitter();
|
|
46
|
+
this.sizeMap = /* @__PURE__ */ new Map();
|
|
43
47
|
this.onUpdate = this.onUpdateEmitter.event;
|
|
48
|
+
this.currentFactoryKey = "";
|
|
49
|
+
}
|
|
50
|
+
updateSize(newSize) {
|
|
51
|
+
this.sizeMap.set(this.currentFactoryKey, newSize);
|
|
52
|
+
this.onUpdateEmitter.fire();
|
|
53
|
+
}
|
|
54
|
+
get currentSize() {
|
|
55
|
+
return this.sizeMap.get(this.currentFactoryKey) || PANEL_SIZE_DEFAULT;
|
|
44
56
|
}
|
|
45
57
|
open(factory, options) {
|
|
46
58
|
const el = factory.render(options?.props);
|
|
47
59
|
const idx = this.elements.findIndex((e) => e.key === factory.key);
|
|
60
|
+
this.currentFactoryKey = factory.key;
|
|
61
|
+
if (!this.sizeMap.has(factory.key)) {
|
|
62
|
+
this.sizeMap.set(factory.key, factory.defaultSize || PANEL_SIZE_DEFAULT);
|
|
63
|
+
}
|
|
48
64
|
if (idx >= 0) {
|
|
49
|
-
this.elements[idx] = { el, key: factory.key };
|
|
65
|
+
this.elements[idx] = { el, key: factory.key, style: factory.style };
|
|
50
66
|
} else {
|
|
51
|
-
this.elements.push({ el, key: factory.key });
|
|
67
|
+
this.elements.push({ el, key: factory.key, style: factory.style });
|
|
52
68
|
if (this.elements.length > this.config.max) {
|
|
53
69
|
this.elements.shift();
|
|
54
70
|
}
|
|
55
71
|
}
|
|
56
72
|
this.onUpdateEmitter.fire();
|
|
57
73
|
}
|
|
74
|
+
get visible() {
|
|
75
|
+
return this.elements.length > 0;
|
|
76
|
+
}
|
|
58
77
|
close(key) {
|
|
59
78
|
if (!key) {
|
|
60
79
|
this.elements = [];
|
|
@@ -90,9 +109,9 @@ var PanelManager = class {
|
|
|
90
109
|
const panel = this.getPanel(area);
|
|
91
110
|
panel.open(factory, options);
|
|
92
111
|
}
|
|
93
|
-
close(key
|
|
94
|
-
|
|
95
|
-
|
|
112
|
+
close(key) {
|
|
113
|
+
this.right.close(key);
|
|
114
|
+
this.bottom.close(key);
|
|
96
115
|
}
|
|
97
116
|
getPanel(area) {
|
|
98
117
|
return area === "right" ? this.right : this.bottom;
|
|
@@ -110,19 +129,25 @@ PanelManager = __decorateClass([
|
|
|
110
129
|
], PanelManager);
|
|
111
130
|
|
|
112
131
|
// src/services/panel-layer.ts
|
|
132
|
+
import ReactDOM from "react-dom";
|
|
113
133
|
import { createElement } from "react";
|
|
114
|
-
import { injectable as injectable2 } from "inversify";
|
|
115
|
-
import { domUtils } from "@flowgram.ai/utils";
|
|
116
|
-
import { Layer } from "@flowgram.ai/core";
|
|
134
|
+
import { injectable as injectable2, inject as inject2 } from "inversify";
|
|
135
|
+
import { domUtils, Disposable } from "@flowgram.ai/utils";
|
|
136
|
+
import { Layer, PluginContext } from "@flowgram.ai/core";
|
|
117
137
|
|
|
118
138
|
// src/components/panel-layer/float-panel.tsx
|
|
119
|
-
import { useEffect, useRef, startTransition, useState } from "react";
|
|
139
|
+
import { useEffect, useRef as useRef2, startTransition, useState as useState2, useCallback } from "react";
|
|
120
140
|
|
|
121
141
|
// src/hooks/use-panel-manager.ts
|
|
122
142
|
import { useService } from "@flowgram.ai/core";
|
|
123
143
|
var usePanelManager = () => useService(PanelManager);
|
|
124
144
|
|
|
125
145
|
// src/components/panel-layer/css.ts
|
|
146
|
+
var globalCSS = `
|
|
147
|
+
.gedit-flow-panel-layer * {
|
|
148
|
+
box-sizing: border-box;
|
|
149
|
+
}
|
|
150
|
+
`;
|
|
126
151
|
var panelLayer = {
|
|
127
152
|
pointerEvents: "none",
|
|
128
153
|
position: "absolute",
|
|
@@ -133,7 +158,8 @@ var panelLayer = {
|
|
|
133
158
|
width: "100%",
|
|
134
159
|
height: "100%",
|
|
135
160
|
padding: "4px",
|
|
136
|
-
boxSizing: "border-box"
|
|
161
|
+
boxSizing: "border-box",
|
|
162
|
+
overflow: "hidden"
|
|
137
163
|
};
|
|
138
164
|
var leftArea = {
|
|
139
165
|
width: "100%",
|
|
@@ -169,26 +195,88 @@ var bottomArea = {
|
|
|
169
195
|
var floatPanelWrap = {
|
|
170
196
|
pointerEvents: "auto",
|
|
171
197
|
height: "100%",
|
|
172
|
-
width: "100%"
|
|
198
|
+
width: "100%",
|
|
199
|
+
overflow: "auto"
|
|
200
|
+
};
|
|
201
|
+
|
|
202
|
+
// src/components/resize-bar/index.tsx
|
|
203
|
+
import { useRef, useState } from "react";
|
|
204
|
+
import { jsx } from "react/jsx-runtime";
|
|
205
|
+
var ResizeBar = ({ onResize, size, isVertical }) => {
|
|
206
|
+
const currentPoint = useRef(null);
|
|
207
|
+
const [isDragging, setIsDragging] = useState(false);
|
|
208
|
+
const [isHovered, setIsHovered] = useState(false);
|
|
209
|
+
return /* @__PURE__ */ jsx(
|
|
210
|
+
"div",
|
|
211
|
+
{
|
|
212
|
+
onMouseDown: (e) => {
|
|
213
|
+
currentPoint.current = isVertical ? e.clientX : e.clientY;
|
|
214
|
+
e.stopPropagation();
|
|
215
|
+
e.preventDefault();
|
|
216
|
+
setIsDragging(true);
|
|
217
|
+
const mouseUp = () => {
|
|
218
|
+
currentPoint.current = null;
|
|
219
|
+
document.body.removeEventListener("mouseup", mouseUp);
|
|
220
|
+
document.body.removeEventListener("mousemove", mouseMove);
|
|
221
|
+
setIsDragging(false);
|
|
222
|
+
};
|
|
223
|
+
const mouseMove = (e2) => {
|
|
224
|
+
const delta = currentPoint.current - (isVertical ? e2.clientX : e2.clientY);
|
|
225
|
+
onResize(size + delta);
|
|
226
|
+
};
|
|
227
|
+
document.body.addEventListener("mouseup", mouseUp);
|
|
228
|
+
document.body.addEventListener("mousemove", mouseMove);
|
|
229
|
+
},
|
|
230
|
+
onMouseEnter: () => setIsHovered(true),
|
|
231
|
+
onMouseLeave: () => setIsHovered(false),
|
|
232
|
+
style: {
|
|
233
|
+
position: "absolute",
|
|
234
|
+
top: 0,
|
|
235
|
+
left: 0,
|
|
236
|
+
zIndex: 999,
|
|
237
|
+
display: "flex",
|
|
238
|
+
alignItems: "center",
|
|
239
|
+
justifyContent: "center",
|
|
240
|
+
pointerEvents: "auto",
|
|
241
|
+
...isVertical ? {
|
|
242
|
+
cursor: "ew-resize",
|
|
243
|
+
height: "100%",
|
|
244
|
+
marginLeft: -5,
|
|
245
|
+
width: 10
|
|
246
|
+
} : {
|
|
247
|
+
cursor: "ns-resize",
|
|
248
|
+
width: "100%",
|
|
249
|
+
marginTop: -5,
|
|
250
|
+
height: 10
|
|
251
|
+
}
|
|
252
|
+
},
|
|
253
|
+
children: /* @__PURE__ */ jsx(
|
|
254
|
+
"div",
|
|
255
|
+
{
|
|
256
|
+
style: {
|
|
257
|
+
...isVertical ? {
|
|
258
|
+
width: 3,
|
|
259
|
+
height: "100%"
|
|
260
|
+
} : {
|
|
261
|
+
height: 3,
|
|
262
|
+
width: "100%"
|
|
263
|
+
},
|
|
264
|
+
backgroundColor: isDragging || isHovered ? "var(--g-playground-line)" : "transparent"
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
)
|
|
268
|
+
}
|
|
269
|
+
);
|
|
173
270
|
};
|
|
174
271
|
|
|
175
272
|
// src/components/panel-layer/float-panel.tsx
|
|
176
|
-
import {
|
|
273
|
+
import { jsx as jsx2, jsxs } from "react/jsx-runtime";
|
|
177
274
|
var FloatPanel2 = ({ area }) => {
|
|
178
|
-
const [, setVersion] =
|
|
275
|
+
const [, setVersion] = useState2(0);
|
|
179
276
|
const panelManager = usePanelManager();
|
|
180
|
-
const panel =
|
|
181
|
-
const render = () => panel.current.elements.map((i) => /* @__PURE__ */
|
|
182
|
-
|
|
183
|
-
{
|
|
184
|
-
className: "float-panel-wrap",
|
|
185
|
-
style: floatPanelWrap,
|
|
186
|
-
onMouseDown: (e) => e.stopPropagation(),
|
|
187
|
-
children: i.el
|
|
188
|
-
},
|
|
189
|
-
i.key
|
|
190
|
-
));
|
|
191
|
-
const node = useRef(render());
|
|
277
|
+
const panel = useRef2(panelManager.getPanel(area));
|
|
278
|
+
const render = () => panel.current.elements.map((i) => /* @__PURE__ */ jsx2("div", { className: "float-panel-wrap", style: { ...floatPanelWrap, ...i.style }, children: i.el }, i.key));
|
|
279
|
+
const node = useRef2(render());
|
|
192
280
|
useEffect(() => {
|
|
193
281
|
const dispose = panel.current.onUpdate(() => {
|
|
194
282
|
startTransition(() => {
|
|
@@ -198,70 +286,94 @@ var FloatPanel2 = ({ area }) => {
|
|
|
198
286
|
});
|
|
199
287
|
return () => dispose.dispose();
|
|
200
288
|
}, [panel]);
|
|
201
|
-
|
|
289
|
+
const onResize = useCallback((newSize) => panel.current.updateSize(newSize), []);
|
|
290
|
+
const size = panel.current.currentSize;
|
|
291
|
+
const sizeStyle = area === "right" ? { width: size, height: "100%" } : { height: size, width: "100%" };
|
|
292
|
+
return /* @__PURE__ */ jsxs(
|
|
293
|
+
"div",
|
|
294
|
+
{
|
|
295
|
+
className: "gedit-flow-panel",
|
|
296
|
+
style: {
|
|
297
|
+
position: "relative",
|
|
298
|
+
display: panel.current.visible ? "block" : "none",
|
|
299
|
+
...sizeStyle
|
|
300
|
+
},
|
|
301
|
+
children: [
|
|
302
|
+
panelManager.config.autoResize && /* @__PURE__ */ jsx2(ResizeBar, { size, isVertical: area === "right", onResize }),
|
|
303
|
+
node.current
|
|
304
|
+
]
|
|
305
|
+
}
|
|
306
|
+
);
|
|
202
307
|
};
|
|
203
308
|
|
|
204
309
|
// src/components/panel-layer/panel-layer.tsx
|
|
205
|
-
import { jsx as
|
|
206
|
-
var PanelLayer = ({ children }) => /* @__PURE__ */
|
|
207
|
-
/* @__PURE__ */
|
|
208
|
-
|
|
209
|
-
/* @__PURE__ */
|
|
310
|
+
import { jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
311
|
+
var PanelLayer = ({ children }) => /* @__PURE__ */ jsxs2("div", { style: panelLayer, children: [
|
|
312
|
+
/* @__PURE__ */ jsx3("style", { dangerouslySetInnerHTML: { __html: globalCSS } }),
|
|
313
|
+
/* @__PURE__ */ jsxs2("div", { className: "gedit-flow-panel-left-area", style: leftArea, children: [
|
|
314
|
+
/* @__PURE__ */ jsx3("div", { className: "gedit-flow-panel-main-area", style: mainArea, children }),
|
|
315
|
+
/* @__PURE__ */ jsx3("div", { className: "gedit-flow-panel-bottom-area", style: bottomArea, children: /* @__PURE__ */ jsx3(FloatPanel2, { area: "bottom" }) })
|
|
210
316
|
] }),
|
|
211
|
-
/* @__PURE__ */
|
|
317
|
+
/* @__PURE__ */ jsx3("div", { className: "gedit-flow-panel-right-area", style: rightArea, children: /* @__PURE__ */ jsx3(FloatPanel2, { area: "right" }) })
|
|
212
318
|
] });
|
|
213
319
|
|
|
214
320
|
// src/services/panel-layer.ts
|
|
215
321
|
var PanelLayer2 = class extends Layer {
|
|
216
322
|
constructor() {
|
|
217
323
|
super(...arguments);
|
|
218
|
-
this.
|
|
324
|
+
this.panelRoot = domUtils.createDivWithClass("gedit-flow-panel-layer");
|
|
219
325
|
this.layout = null;
|
|
220
326
|
}
|
|
221
327
|
onReady() {
|
|
328
|
+
this.panelConfig.getPopupContainer(this.pluginContext).appendChild(this.panelRoot);
|
|
329
|
+
this.toDispose.push(
|
|
330
|
+
Disposable.create(() => {
|
|
331
|
+
this.panelRoot.remove();
|
|
332
|
+
})
|
|
333
|
+
);
|
|
222
334
|
const commonStyle = {
|
|
223
335
|
pointerEvents: "none",
|
|
224
|
-
|
|
336
|
+
width: "100%",
|
|
337
|
+
height: "100%",
|
|
338
|
+
position: "absolute",
|
|
339
|
+
left: 0,
|
|
340
|
+
top: 0,
|
|
341
|
+
zIndex: 100
|
|
225
342
|
};
|
|
226
|
-
domUtils.setStyle(this.
|
|
227
|
-
this.config.onDataChange(() => {
|
|
228
|
-
const { width, height, scrollX, scrollY } = this.config.config;
|
|
229
|
-
domUtils.setStyle(this.node, {
|
|
230
|
-
...commonStyle,
|
|
231
|
-
width,
|
|
232
|
-
height,
|
|
233
|
-
left: scrollX,
|
|
234
|
-
top: scrollY
|
|
235
|
-
});
|
|
236
|
-
});
|
|
343
|
+
domUtils.setStyle(this.panelRoot, commonStyle);
|
|
237
344
|
}
|
|
238
345
|
render() {
|
|
239
346
|
if (!this.layout) {
|
|
240
347
|
this.layout = createElement(PanelLayer);
|
|
241
348
|
}
|
|
242
|
-
return this.layout;
|
|
349
|
+
return ReactDOM.createPortal(this.layout, this.panelRoot);
|
|
243
350
|
}
|
|
244
351
|
};
|
|
352
|
+
__decorateClass([
|
|
353
|
+
inject2(PanelManagerConfig)
|
|
354
|
+
], PanelLayer2.prototype, "panelConfig", 2);
|
|
355
|
+
__decorateClass([
|
|
356
|
+
inject2(PluginContext)
|
|
357
|
+
], PanelLayer2.prototype, "pluginContext", 2);
|
|
245
358
|
PanelLayer2 = __decorateClass([
|
|
246
359
|
injectable2()
|
|
247
360
|
], PanelLayer2);
|
|
248
361
|
|
|
249
362
|
// src/create-panel-manager-plugin.ts
|
|
250
363
|
var createPanelManagerPlugin = definePluginCreator({
|
|
251
|
-
onBind: ({ bind }) => {
|
|
364
|
+
onBind: ({ bind }, opt) => {
|
|
252
365
|
bind(PanelManager).to(PanelManager).inSingletonScope();
|
|
253
|
-
bind(PanelManagerConfig).toConstantValue(defineConfig(
|
|
366
|
+
bind(PanelManagerConfig).toConstantValue(defineConfig(opt));
|
|
254
367
|
},
|
|
255
368
|
onInit(ctx, opt) {
|
|
256
369
|
ctx.playground.registerLayer(PanelLayer2);
|
|
257
|
-
const config = defineConfig(opt);
|
|
258
|
-
ctx.container.rebind(PanelManagerConfig).toConstantValue(config);
|
|
259
370
|
const panelManager = ctx.container.get(PanelManager);
|
|
260
371
|
panelManager.init();
|
|
261
372
|
}
|
|
262
373
|
});
|
|
263
374
|
export {
|
|
264
375
|
PanelManager,
|
|
376
|
+
ResizeBar,
|
|
265
377
|
createPanelManagerPlugin,
|
|
266
378
|
usePanelManager
|
|
267
379
|
};
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/create-panel-manager-plugin.ts","../../src/services/panel-config.ts","../../src/services/panel-manager.ts","../../src/services/float-panel.ts","../../src/services/panel-layer.ts","../../src/components/panel-layer/float-panel.tsx","../../src/hooks/use-panel-manager.ts","../../src/components/panel-layer/css.ts","../../src/components/panel-layer/panel-layer.tsx"],"sourcesContent":["/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { definePluginCreator } from '@flowgram.ai/core';\n\nimport { defineConfig } from './services/panel-config';\nimport { PanelManager, PanelManagerConfig, PanelLayer } from './services';\n\nexport const createPanelManagerPlugin = definePluginCreator<Partial<PanelManagerConfig>>({\n onBind: ({ bind }) => {\n bind(PanelManager).to(PanelManager).inSingletonScope();\n bind(PanelManagerConfig).toConstantValue(defineConfig({}));\n },\n onInit(ctx, opt) {\n ctx.playground.registerLayer(PanelLayer);\n const config = defineConfig(opt);\n ctx.container.rebind(PanelManagerConfig).toConstantValue(config);\n const panelManager = ctx.container.get<PanelManager>(PanelManager);\n panelManager.init();\n },\n});\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport type { PanelFactory, PanelConfig } from '../types';\n\nexport interface PanelManagerConfig {\n factories: PanelFactory<any>[];\n right: PanelConfig;\n bottom: PanelConfig;\n}\n\nexport const PanelManagerConfig = Symbol('PanelManagerConfig');\n\nexport const defineConfig = (config: Partial<PanelManagerConfig>) => {\n const defaultConfig: PanelManagerConfig = {\n right: {\n max: 1,\n },\n bottom: {\n max: 1,\n },\n factories: [],\n };\n return {\n ...defaultConfig,\n ...config,\n };\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { injectable, inject } from 'inversify';\n\nimport { PanelManagerConfig } from './panel-config';\nimport type { Area, PanelFactory } from '../types';\nimport { FloatPanel } from './float-panel';\n\n@injectable()\nexport class PanelManager {\n @inject(PanelManagerConfig) private readonly config: PanelManagerConfig;\n\n readonly panelRegistry = new Map<string, PanelFactory<any>>();\n\n right: FloatPanel;\n\n bottom: FloatPanel;\n\n init() {\n this.config.factories.forEach((factory) => this.register(factory));\n this.right = new FloatPanel(this.config.right);\n this.bottom = new FloatPanel(this.config.bottom);\n }\n\n register<T extends any>(factory: PanelFactory<T>) {\n this.panelRegistry.set(factory.key, factory);\n }\n\n open(key: string, area: Area = 'right', options?: any) {\n const factory = this.panelRegistry.get(key);\n if (!factory) {\n return;\n }\n const panel = this.getPanel(area);\n panel.open(factory, options);\n }\n\n close(key: string, area: Area = 'right') {\n const panel = this.getPanel(area);\n panel.close(key);\n }\n\n getPanel(area: Area) {\n return area === 'right' ? this.right : this.bottom;\n }\n\n dispose() {\n this.right.dispose();\n this.bottom.dispose();\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { Emitter } from '@flowgram.ai/utils';\n\nimport type { PanelFactory, PanelConfig } from '../types';\n\nexport interface PanelElement {\n key: string;\n el: React.ReactNode;\n}\n\nexport class FloatPanel {\n elements: PanelElement[] = [];\n\n private onUpdateEmitter = new Emitter<void>();\n\n onUpdate = this.onUpdateEmitter.event;\n\n constructor(private config: PanelConfig) {}\n\n open(factory: PanelFactory<any>, options: any) {\n const el = factory.render(options?.props);\n const idx = this.elements.findIndex((e) => e.key === factory.key);\n if (idx >= 0) {\n this.elements[idx] = { el, key: factory.key };\n } else {\n this.elements.push({ el, key: factory.key });\n if (this.elements.length > this.config.max) {\n this.elements.shift();\n }\n }\n this.onUpdateEmitter.fire();\n }\n\n close(key?: string) {\n if (!key) {\n this.elements = [];\n } else {\n this.elements = this.elements.filter((e) => e.key !== key);\n }\n this.onUpdateEmitter.fire();\n }\n\n dispose() {\n this.elements = [];\n this.onUpdateEmitter.dispose();\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { createElement } from 'react';\n\nimport { injectable } from 'inversify';\nimport { domUtils } from '@flowgram.ai/utils';\nimport { Layer } from '@flowgram.ai/core';\n\nimport { PanelLayer as PanelLayerComp } from '../components/panel-layer';\n\n@injectable()\nexport class PanelLayer extends Layer {\n node = domUtils.createDivWithClass('gedit-flow-panel-layer');\n\n layout: JSX.Element | null = null;\n\n onReady(): void {\n const commonStyle = {\n pointerEvents: 'none',\n zIndex: 11,\n };\n domUtils.setStyle(this.node, commonStyle);\n this.config.onDataChange(() => {\n const { width, height, scrollX, scrollY } = this.config.config;\n domUtils.setStyle(this.node, {\n ...commonStyle,\n width,\n height,\n left: scrollX,\n top: scrollY,\n });\n });\n }\n\n render(): JSX.Element {\n if (!this.layout) {\n this.layout = createElement(PanelLayerComp);\n }\n return this.layout;\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { useEffect, useRef, startTransition, useState } from 'react';\n\nimport { Area } from '../../types';\nimport { usePanelManager } from '../../hooks/use-panel-manager';\nimport { floatPanelWrap } from './css';\n\nexport const FloatPanel: React.FC<{ area: Area }> = ({ area }) => {\n const [, setVersion] = useState(0);\n const panelManager = usePanelManager();\n const panel = useRef(panelManager.getPanel(area));\n const render = () =>\n panel.current.elements.map((i) => (\n <div\n className=\"float-panel-wrap\"\n key={i.key}\n style={floatPanelWrap}\n onMouseDown={(e) => e.stopPropagation()}\n >\n {i.el}\n </div>\n ));\n const node = useRef(render());\n\n useEffect(() => {\n const dispose = panel.current.onUpdate(() => {\n startTransition(() => {\n node.current = render();\n setVersion((v) => v + 1);\n });\n });\n return () => dispose.dispose();\n }, [panel]);\n\n return <>{node.current}</>;\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { useService } from '@flowgram.ai/core';\n\nimport { PanelManager } from '../services/panel-manager';\n\nexport const usePanelManager = () => useService<PanelManager>(PanelManager);\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nexport const panelLayer: React.CSSProperties = {\n pointerEvents: 'none',\n position: 'absolute',\n top: 0,\n left: 0,\n\n display: 'flex',\n columnGap: '4px',\n width: '100%',\n height: '100%',\n padding: '4px',\n boxSizing: 'border-box',\n};\n\nexport const leftArea: React.CSSProperties = {\n width: '100%',\n minWidth: 0,\n flexGrow: 0,\n flexShrink: 1,\n\n display: 'flex',\n flexDirection: 'column',\n rowGap: '4px',\n};\n\nexport const rightArea: React.CSSProperties = {\n height: '100%',\n flexGrow: 1,\n flexShrink: 0,\n minWidth: 0,\n\n display: 'flex',\n columnGap: '4px',\n};\n\nexport const mainArea: React.CSSProperties = {\n position: 'relative',\n overflow: 'hidden',\n flexGrow: 0,\n flexShrink: 1,\n width: '100%',\n height: '100%',\n};\n\nexport const bottomArea: React.CSSProperties = {\n flexGrow: 1,\n flexShrink: 0,\n width: '100%',\n minHeight: 0,\n};\n\nexport const floatPanelWrap: React.CSSProperties = {\n pointerEvents: 'auto',\n height: '100%',\n width: '100%',\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { FloatPanel } from './float-panel';\nimport { panelLayer, leftArea, rightArea, mainArea, bottomArea } from './css';\n\nexport const PanelLayer: React.FC<React.PropsWithChildren> = ({ children }) => (\n <div className=\"panel-layer\" style={panelLayer}>\n <div className=\"left-area\" style={leftArea}>\n <div className=\"main-area\" style={mainArea}>\n {children}\n </div>\n <div className=\"bottom-area\" style={bottomArea}>\n <FloatPanel area=\"bottom\" />\n </div>\n </div>\n <div className=\"right-area\" style={rightArea}>\n <FloatPanel area=\"right\" />\n </div>\n </div>\n);\n"],"mappings":";;;;;;;;;;;;AAKA,SAAS,2BAA2B;;;ACQ7B,IAAM,qBAAqB,OAAO,oBAAoB;AAEtD,IAAM,eAAe,CAAC,WAAwC;AACnE,QAAM,gBAAoC;AAAA,IACxC,OAAO;AAAA,MACL,KAAK;AAAA,IACP;AAAA,IACA,QAAQ;AAAA,MACN,KAAK;AAAA,IACP;AAAA,IACA,WAAW,CAAC;AAAA,EACd;AACA,SAAO;AAAA,IACL,GAAG;AAAA,IACH,GAAG;AAAA,EACL;AACF;;;ACxBA,SAAS,YAAY,cAAc;;;ACAnC,SAAS,eAAe;AASjB,IAAM,aAAN,MAAiB;AAAA,EAOtB,YAAoB,QAAqB;AAArB;AANpB,oBAA2B,CAAC;AAE5B,SAAQ,kBAAkB,IAAI,QAAc;AAE5C,oBAAW,KAAK,gBAAgB;AAAA,EAEU;AAAA,EAE1C,KAAK,SAA4B,SAAc;AAC7C,UAAM,KAAK,QAAQ,OAAO,SAAS,KAAK;AACxC,UAAM,MAAM,KAAK,SAAS,UAAU,CAAC,MAAM,EAAE,QAAQ,QAAQ,GAAG;AAChE,QAAI,OAAO,GAAG;AACZ,WAAK,SAAS,GAAG,IAAI,EAAE,IAAI,KAAK,QAAQ,IAAI;AAAA,IAC9C,OAAO;AACL,WAAK,SAAS,KAAK,EAAE,IAAI,KAAK,QAAQ,IAAI,CAAC;AAC3C,UAAI,KAAK,SAAS,SAAS,KAAK,OAAO,KAAK;AAC1C,aAAK,SAAS,MAAM;AAAA,MACtB;AAAA,IACF;AACA,SAAK,gBAAgB,KAAK;AAAA,EAC5B;AAAA,EAEA,MAAM,KAAc;AAClB,QAAI,CAAC,KAAK;AACR,WAAK,WAAW,CAAC;AAAA,IACnB,OAAO;AACL,WAAK,WAAW,KAAK,SAAS,OAAO,CAAC,MAAM,EAAE,QAAQ,GAAG;AAAA,IAC3D;AACA,SAAK,gBAAgB,KAAK;AAAA,EAC5B;AAAA,EAEA,UAAU;AACR,SAAK,WAAW,CAAC;AACjB,SAAK,gBAAgB,QAAQ;AAAA,EAC/B;AACF;;;ADtCO,IAAM,eAAN,MAAmB;AAAA,EAAnB;AAGL,SAAS,gBAAgB,oBAAI,IAA+B;AAAA;AAAA,EAM5D,OAAO;AACL,SAAK,OAAO,UAAU,QAAQ,CAAC,YAAY,KAAK,SAAS,OAAO,CAAC;AACjE,SAAK,QAAQ,IAAI,WAAW,KAAK,OAAO,KAAK;AAC7C,SAAK,SAAS,IAAI,WAAW,KAAK,OAAO,MAAM;AAAA,EACjD;AAAA,EAEA,SAAwB,SAA0B;AAChD,SAAK,cAAc,IAAI,QAAQ,KAAK,OAAO;AAAA,EAC7C;AAAA,EAEA,KAAK,KAAa,OAAa,SAAS,SAAe;AACrD,UAAM,UAAU,KAAK,cAAc,IAAI,GAAG;AAC1C,QAAI,CAAC,SAAS;AACZ;AAAA,IACF;AACA,UAAM,QAAQ,KAAK,SAAS,IAAI;AAChC,UAAM,KAAK,SAAS,OAAO;AAAA,EAC7B;AAAA,EAEA,MAAM,KAAa,OAAa,SAAS;AACvC,UAAM,QAAQ,KAAK,SAAS,IAAI;AAChC,UAAM,MAAM,GAAG;AAAA,EACjB;AAAA,EAEA,SAAS,MAAY;AACnB,WAAO,SAAS,UAAU,KAAK,QAAQ,KAAK;AAAA,EAC9C;AAAA,EAEA,UAAU;AACR,SAAK,MAAM,QAAQ;AACnB,SAAK,OAAO,QAAQ;AAAA,EACtB;AACF;AAxC+C;AAAA,EAA5C,OAAO,kBAAkB;AAAA,GADf,aACkC;AADlC,eAAN;AAAA,EADN,WAAW;AAAA,GACC;;;AEPb,SAAS,qBAAqB;AAE9B,SAAS,cAAAA,mBAAkB;AAC3B,SAAS,gBAAgB;AACzB,SAAS,aAAa;;;ACJtB,SAAS,WAAW,QAAQ,iBAAiB,gBAAgB;;;ACA7D,SAAS,kBAAkB;AAIpB,IAAM,kBAAkB,MAAM,WAAyB,YAAY;;;ACJnE,IAAM,aAAkC;AAAA,EAC7C,eAAe;AAAA,EACf,UAAU;AAAA,EACV,KAAK;AAAA,EACL,MAAM;AAAA,EAEN,SAAS;AAAA,EACT,WAAW;AAAA,EACX,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,WAAW;AACb;AAEO,IAAM,WAAgC;AAAA,EAC3C,OAAO;AAAA,EACP,UAAU;AAAA,EACV,UAAU;AAAA,EACV,YAAY;AAAA,EAEZ,SAAS;AAAA,EACT,eAAe;AAAA,EACf,QAAQ;AACV;AAEO,IAAM,YAAiC;AAAA,EAC5C,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,UAAU;AAAA,EAEV,SAAS;AAAA,EACT,WAAW;AACb;AAEO,IAAM,WAAgC;AAAA,EAC3C,UAAU;AAAA,EACV,UAAU;AAAA,EACV,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,OAAO;AAAA,EACP,QAAQ;AACV;AAEO,IAAM,aAAkC;AAAA,EAC7C,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,OAAO;AAAA,EACP,WAAW;AACb;AAEO,IAAM,iBAAsC;AAAA,EACjD,eAAe;AAAA,EACf,QAAQ;AAAA,EACR,OAAO;AACT;;;AF3CM,SAqBG,UArBH;AANC,IAAMC,cAAuC,CAAC,EAAE,KAAK,MAAM;AAChE,QAAM,CAAC,EAAE,UAAU,IAAI,SAAS,CAAC;AACjC,QAAM,eAAe,gBAAgB;AACrC,QAAM,QAAQ,OAAO,aAAa,SAAS,IAAI,CAAC;AAChD,QAAM,SAAS,MACb,MAAM,QAAQ,SAAS,IAAI,CAAC,MAC1B;AAAA,IAAC;AAAA;AAAA,MACC,WAAU;AAAA,MAEV,OAAO;AAAA,MACP,aAAa,CAAC,MAAM,EAAE,gBAAgB;AAAA,MAErC,YAAE;AAAA;AAAA,IAJE,EAAE;AAAA,EAKT,CACD;AACH,QAAM,OAAO,OAAO,OAAO,CAAC;AAE5B,YAAU,MAAM;AACd,UAAM,UAAU,MAAM,QAAQ,SAAS,MAAM;AAC3C,sBAAgB,MAAM;AACpB,aAAK,UAAU,OAAO;AACtB,mBAAW,CAAC,MAAM,IAAI,CAAC;AAAA,MACzB,CAAC;AAAA,IACH,CAAC;AACD,WAAO,MAAM,QAAQ,QAAQ;AAAA,EAC/B,GAAG,CAAC,KAAK,CAAC;AAEV,SAAO,gCAAG,eAAK,SAAQ;AACzB;;;AG7BI,SACE,OAAAC,MADF;AAFG,IAAM,aAAgD,CAAC,EAAE,SAAS,MACvE,qBAAC,SAAI,WAAU,eAAc,OAAO,YAClC;AAAA,uBAAC,SAAI,WAAU,aAAY,OAAO,UAChC;AAAA,oBAAAA,KAAC,SAAI,WAAU,aAAY,OAAO,UAC/B,UACH;AAAA,IACA,gBAAAA,KAAC,SAAI,WAAU,eAAc,OAAO,YAClC,0BAAAA,KAACC,aAAA,EAAW,MAAK,UAAS,GAC5B;AAAA,KACF;AAAA,EACA,gBAAAD,KAAC,SAAI,WAAU,cAAa,OAAO,WACjC,0BAAAA,KAACC,aAAA,EAAW,MAAK,SAAQ,GAC3B;AAAA,GACF;;;AJPK,IAAMC,cAAN,cAAyB,MAAM;AAAA,EAA/B;AAAA;AACL,gBAAO,SAAS,mBAAmB,wBAAwB;AAE3D,kBAA6B;AAAA;AAAA,EAE7B,UAAgB;AACd,UAAM,cAAc;AAAA,MAClB,eAAe;AAAA,MACf,QAAQ;AAAA,IACV;AACA,aAAS,SAAS,KAAK,MAAM,WAAW;AACxC,SAAK,OAAO,aAAa,MAAM;AAC7B,YAAM,EAAE,OAAO,QAAQ,SAAS,QAAQ,IAAI,KAAK,OAAO;AACxD,eAAS,SAAS,KAAK,MAAM;AAAA,QAC3B,GAAG;AAAA,QACH;AAAA,QACA;AAAA,QACA,MAAM;AAAA,QACN,KAAK;AAAA,MACP,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAAA,EAEA,SAAsB;AACpB,QAAI,CAAC,KAAK,QAAQ;AAChB,WAAK,SAAS,cAAc,UAAc;AAAA,IAC5C;AACA,WAAO,KAAK;AAAA,EACd;AACF;AA7BaA,cAAN;AAAA,EADNC,YAAW;AAAA,GACCD;;;AJJN,IAAM,2BAA2B,oBAAiD;AAAA,EACvF,QAAQ,CAAC,EAAE,KAAK,MAAM;AACpB,SAAK,YAAY,EAAE,GAAG,YAAY,EAAE,iBAAiB;AACrD,SAAK,kBAAkB,EAAE,gBAAgB,aAAa,CAAC,CAAC,CAAC;AAAA,EAC3D;AAAA,EACA,OAAO,KAAK,KAAK;AACf,QAAI,WAAW,cAAcE,WAAU;AACvC,UAAM,SAAS,aAAa,GAAG;AAC/B,QAAI,UAAU,OAAO,kBAAkB,EAAE,gBAAgB,MAAM;AAC/D,UAAM,eAAe,IAAI,UAAU,IAAkB,YAAY;AACjE,iBAAa,KAAK;AAAA,EACpB;AACF,CAAC;","names":["injectable","FloatPanel","jsx","FloatPanel","PanelLayer","injectable","PanelLayer"]}
|
|
1
|
+
{"version":3,"sources":["../../src/create-panel-manager-plugin.ts","../../src/services/panel-config.ts","../../src/services/panel-manager.ts","../../src/services/float-panel.ts","../../src/services/panel-layer.ts","../../src/components/panel-layer/float-panel.tsx","../../src/hooks/use-panel-manager.ts","../../src/components/panel-layer/css.ts","../../src/components/resize-bar/index.tsx","../../src/components/panel-layer/panel-layer.tsx"],"sourcesContent":["/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { definePluginCreator } from '@flowgram.ai/core';\n\nimport { defineConfig } from './services/panel-config';\nimport { PanelManager, PanelManagerConfig, PanelLayer } from './services';\n\nexport const createPanelManagerPlugin = definePluginCreator<Partial<PanelManagerConfig>>({\n onBind: ({ bind }, opt) => {\n bind(PanelManager).to(PanelManager).inSingletonScope();\n bind(PanelManagerConfig).toConstantValue(defineConfig(opt));\n },\n onInit(ctx, opt) {\n ctx.playground.registerLayer(PanelLayer);\n const panelManager = ctx.container.get<PanelManager>(PanelManager);\n panelManager.init();\n },\n});\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { PluginContext } from '@flowgram.ai/core';\n\nimport type { PanelFactory, PanelConfig } from '../types';\n\nexport interface PanelManagerConfig {\n factories: PanelFactory<any>[];\n right: PanelConfig;\n bottom: PanelConfig;\n getPopupContainer: (ctx: PluginContext) => HTMLElement; // default playground.node.parentElement\n autoResize: boolean;\n}\n\nexport const PanelManagerConfig = Symbol('PanelManagerConfig');\n\nexport const defineConfig = (config: Partial<PanelManagerConfig>) => {\n const defaultConfig: PanelManagerConfig = {\n right: {\n max: 1,\n },\n bottom: {\n max: 1,\n },\n factories: [],\n getPopupContainer: (ctx: PluginContext) => ctx.playground.node.parentNode as HTMLElement,\n autoResize: true,\n };\n return {\n ...defaultConfig,\n ...config,\n };\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { injectable, inject } from 'inversify';\n\nimport { PanelManagerConfig } from './panel-config';\nimport type { Area, PanelFactory } from '../types';\nimport { FloatPanel } from './float-panel';\n\n@injectable()\nexport class PanelManager {\n @inject(PanelManagerConfig) readonly config: PanelManagerConfig;\n\n readonly panelRegistry = new Map<string, PanelFactory<any>>();\n\n right: FloatPanel;\n\n bottom: FloatPanel;\n\n init() {\n this.config.factories.forEach((factory) => this.register(factory));\n this.right = new FloatPanel(this.config.right);\n this.bottom = new FloatPanel(this.config.bottom);\n }\n\n register<T extends any>(factory: PanelFactory<T>) {\n this.panelRegistry.set(factory.key, factory);\n }\n\n open(key: string, area: Area = 'right', options?: any) {\n const factory = this.panelRegistry.get(key);\n if (!factory) {\n return;\n }\n const panel = this.getPanel(area);\n panel.open(factory, options);\n }\n\n close(key?: string) {\n this.right.close(key);\n this.bottom.close(key);\n }\n\n getPanel(area: Area) {\n return area === 'right' ? this.right : this.bottom;\n }\n\n dispose() {\n this.right.dispose();\n this.bottom.dispose();\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { Emitter } from '@flowgram.ai/utils';\n\nimport type { PanelFactory, PanelConfig } from '../types';\n\nexport interface PanelElement {\n key: string;\n style?: React.CSSProperties;\n el: React.ReactNode;\n}\n\nconst PANEL_SIZE_DEFAULT = 400;\n\nexport class FloatPanel {\n elements: PanelElement[] = [];\n\n private onUpdateEmitter = new Emitter<void>();\n\n sizeMap = new Map<string, number>();\n\n onUpdate = this.onUpdateEmitter.event;\n\n currentFactoryKey = '';\n\n updateSize(newSize: number) {\n this.sizeMap.set(this.currentFactoryKey, newSize);\n this.onUpdateEmitter.fire();\n }\n\n get currentSize(): number {\n return this.sizeMap.get(this.currentFactoryKey) || PANEL_SIZE_DEFAULT;\n }\n\n constructor(private config: PanelConfig) {}\n\n open(factory: PanelFactory<any>, options: any) {\n const el = factory.render(options?.props);\n const idx = this.elements.findIndex((e) => e.key === factory.key);\n this.currentFactoryKey = factory.key;\n if (!this.sizeMap.has(factory.key)) {\n this.sizeMap.set(factory.key, factory.defaultSize || PANEL_SIZE_DEFAULT);\n }\n if (idx >= 0) {\n this.elements[idx] = { el, key: factory.key, style: factory.style };\n } else {\n this.elements.push({ el, key: factory.key, style: factory.style });\n if (this.elements.length > this.config.max) {\n this.elements.shift();\n }\n }\n this.onUpdateEmitter.fire();\n }\n\n get visible() {\n return this.elements.length > 0;\n }\n\n close(key?: string) {\n if (!key) {\n this.elements = [];\n } else {\n this.elements = this.elements.filter((e) => e.key !== key);\n }\n this.onUpdateEmitter.fire();\n }\n\n dispose() {\n this.elements = [];\n this.onUpdateEmitter.dispose();\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport ReactDOM from 'react-dom';\nimport { createElement } from 'react';\n\nimport { injectable, inject } from 'inversify';\nimport { domUtils, Disposable } from '@flowgram.ai/utils';\nimport { Layer, PluginContext } from '@flowgram.ai/core';\n\nimport { PanelLayer as PanelLayerComp } from '../components/panel-layer';\nimport { PanelManagerConfig } from './panel-config';\n\n@injectable()\nexport class PanelLayer extends Layer {\n @inject(PanelManagerConfig) private readonly panelConfig: PanelManagerConfig;\n\n @inject(PluginContext) private readonly pluginContext: PluginContext;\n\n readonly panelRoot = domUtils.createDivWithClass('gedit-flow-panel-layer');\n\n layout: JSX.Element | null = null;\n\n onReady(): void {\n this.panelConfig.getPopupContainer(this.pluginContext).appendChild(this.panelRoot);\n this.toDispose.push(\n Disposable.create(() => {\n // Remove from PopupContainer\n this.panelRoot.remove();\n })\n );\n const commonStyle = {\n pointerEvents: 'none',\n width: '100%',\n height: '100%',\n position: 'absolute',\n left: 0,\n top: 0,\n zIndex: 100,\n };\n domUtils.setStyle(this.panelRoot, commonStyle);\n }\n\n render(): JSX.Element {\n if (!this.layout) {\n this.layout = createElement(PanelLayerComp);\n }\n return ReactDOM.createPortal(this.layout, this.panelRoot);\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { useEffect, useRef, startTransition, useState, useCallback } from 'react';\n\nimport { Area } from '../../types';\nimport { usePanelManager } from '../../hooks/use-panel-manager';\nimport { floatPanelWrap } from './css';\nimport { ResizeBar } from '../resize-bar';\n\nexport const FloatPanel: React.FC<{ area: Area }> = ({ area }) => {\n const [, setVersion] = useState(0);\n const panelManager = usePanelManager();\n const panel = useRef(panelManager.getPanel(area));\n const render = () =>\n panel.current.elements.map((i) => (\n <div className=\"float-panel-wrap\" key={i.key} style={{ ...floatPanelWrap, ...i.style }}>\n {i.el}\n </div>\n ));\n const node = useRef(render());\n\n useEffect(() => {\n const dispose = panel.current.onUpdate(() => {\n startTransition(() => {\n node.current = render();\n setVersion((v) => v + 1);\n });\n });\n return () => dispose.dispose();\n }, [panel]);\n const onResize = useCallback((newSize: number) => panel.current!.updateSize(newSize), []);\n const size = panel.current!.currentSize;\n const sizeStyle =\n area === 'right' ? { width: size, height: '100%' } : { height: size, width: '100%' };\n\n return (\n <div\n className=\"gedit-flow-panel\"\n style={{\n position: 'relative',\n display: panel.current.visible ? 'block' : 'none',\n ...sizeStyle,\n }}\n >\n {panelManager.config.autoResize && (\n <ResizeBar size={size} isVertical={area === 'right'} onResize={onResize} />\n )}\n {node.current}\n </div>\n );\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { useService } from '@flowgram.ai/core';\n\nimport { PanelManager } from '../services/panel-manager';\n\nexport const usePanelManager = () => useService<PanelManager>(PanelManager);\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nexport const globalCSS = `\n .gedit-flow-panel-layer * {\n box-sizing: border-box;\n }\n`;\n\nexport const panelLayer: React.CSSProperties = {\n pointerEvents: 'none',\n position: 'absolute',\n top: 0,\n left: 0,\n\n display: 'flex',\n columnGap: '4px',\n width: '100%',\n height: '100%',\n padding: '4px',\n boxSizing: 'border-box',\n overflow: 'hidden',\n};\n\nexport const leftArea: React.CSSProperties = {\n width: '100%',\n minWidth: 0,\n flexGrow: 0,\n flexShrink: 1,\n\n display: 'flex',\n flexDirection: 'column',\n rowGap: '4px',\n};\n\nexport const rightArea: React.CSSProperties = {\n height: '100%',\n flexGrow: 1,\n flexShrink: 0,\n minWidth: 0,\n\n display: 'flex',\n columnGap: '4px',\n};\n\nexport const mainArea: React.CSSProperties = {\n position: 'relative',\n overflow: 'hidden',\n flexGrow: 0,\n flexShrink: 1,\n width: '100%',\n height: '100%',\n};\n\nexport const bottomArea: React.CSSProperties = {\n flexGrow: 1,\n flexShrink: 0,\n width: '100%',\n minHeight: 0,\n};\n\nexport const floatPanelWrap: React.CSSProperties = {\n pointerEvents: 'auto',\n height: '100%',\n width: '100%',\n overflow: 'auto',\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport React, { useRef, useState } from 'react';\n\ninterface Props {\n onResize: (w: number) => void;\n size: number;\n isVertical?: boolean;\n}\n\nexport const ResizeBar: React.FC<Props> = ({ onResize, size, isVertical }) => {\n const currentPoint = useRef<null | number>(null);\n const [isDragging, setIsDragging] = useState(false);\n const [isHovered, setIsHovered] = useState(false);\n return (\n <div\n onMouseDown={(e) => {\n currentPoint.current = isVertical ? e.clientX : e.clientY;\n e.stopPropagation();\n e.preventDefault();\n setIsDragging(true);\n const mouseUp = () => {\n currentPoint.current = null;\n document.body.removeEventListener('mouseup', mouseUp);\n document.body.removeEventListener('mousemove', mouseMove);\n setIsDragging(false);\n };\n const mouseMove = (e: MouseEvent) => {\n const delta = currentPoint.current! - (isVertical ? e.clientX : e.clientY);\n onResize(size + delta);\n };\n document.body.addEventListener('mouseup', mouseUp);\n document.body.addEventListener('mousemove', mouseMove);\n }}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n zIndex: 999,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n pointerEvents: 'auto',\n ...(isVertical\n ? {\n cursor: 'ew-resize',\n height: '100%',\n marginLeft: -5,\n width: 10,\n }\n : {\n cursor: 'ns-resize',\n width: '100%',\n marginTop: -5,\n height: 10,\n }),\n }}\n >\n <div\n style={{\n ...(isVertical\n ? {\n width: 3,\n height: '100%',\n }\n : {\n height: 3,\n width: '100%',\n }),\n backgroundColor: isDragging || isHovered ? 'var(--g-playground-line)' : 'transparent',\n }}\n />\n </div>\n );\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { FloatPanel } from './float-panel';\nimport { panelLayer, leftArea, rightArea, mainArea, bottomArea, globalCSS } from './css';\n\nexport const PanelLayer: React.FC<React.PropsWithChildren> = ({ children }) => (\n <div style={panelLayer}>\n <style dangerouslySetInnerHTML={{ __html: globalCSS }} />\n <div className=\"gedit-flow-panel-left-area\" style={leftArea}>\n <div className=\"gedit-flow-panel-main-area\" style={mainArea}>\n {children}\n </div>\n <div className=\"gedit-flow-panel-bottom-area\" style={bottomArea}>\n <FloatPanel area=\"bottom\" />\n </div>\n </div>\n <div className=\"gedit-flow-panel-right-area\" style={rightArea}>\n <FloatPanel area=\"right\" />\n </div>\n </div>\n);\n"],"mappings":"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","names":["injectable","inject","useRef","useState","e","jsx","FloatPanel","useState","useRef","jsx","jsxs","FloatPanel","PanelLayer","inject","injectable","PanelLayer"]}
|
package/dist/index.d.mts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import * as _flowgram_ai_core from '@flowgram.ai/core';
|
|
2
|
+
import { PluginContext } from '@flowgram.ai/core';
|
|
2
3
|
import * as _flowgram_ai_utils from '@flowgram.ai/utils';
|
|
4
|
+
import React$1 from 'react';
|
|
3
5
|
|
|
4
6
|
/**
|
|
5
7
|
* Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
|
|
@@ -12,20 +14,42 @@ interface PanelConfig {
|
|
|
12
14
|
}
|
|
13
15
|
interface PanelFactory<T extends any> {
|
|
14
16
|
key: string;
|
|
17
|
+
defaultSize: number;
|
|
18
|
+
style?: React.CSSProperties;
|
|
15
19
|
render: (props: T) => React.ReactNode;
|
|
16
20
|
}
|
|
17
21
|
|
|
22
|
+
/**
|
|
23
|
+
* Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
|
|
24
|
+
* SPDX-License-Identifier: MIT
|
|
25
|
+
*/
|
|
26
|
+
|
|
27
|
+
interface PanelManagerConfig {
|
|
28
|
+
factories: PanelFactory<any>[];
|
|
29
|
+
right: PanelConfig;
|
|
30
|
+
bottom: PanelConfig;
|
|
31
|
+
getPopupContainer: (ctx: PluginContext) => HTMLElement;
|
|
32
|
+
autoResize: boolean;
|
|
33
|
+
}
|
|
34
|
+
declare const PanelManagerConfig: unique symbol;
|
|
35
|
+
|
|
18
36
|
interface PanelElement {
|
|
19
37
|
key: string;
|
|
38
|
+
style?: React.CSSProperties;
|
|
20
39
|
el: React.ReactNode;
|
|
21
40
|
}
|
|
22
41
|
declare class FloatPanel {
|
|
23
42
|
private config;
|
|
24
43
|
elements: PanelElement[];
|
|
25
44
|
private onUpdateEmitter;
|
|
45
|
+
sizeMap: Map<string, number>;
|
|
26
46
|
onUpdate: _flowgram_ai_utils.Event<void>;
|
|
47
|
+
currentFactoryKey: string;
|
|
48
|
+
updateSize(newSize: number): void;
|
|
49
|
+
get currentSize(): number;
|
|
27
50
|
constructor(config: PanelConfig);
|
|
28
51
|
open(factory: PanelFactory<any>, options: any): void;
|
|
52
|
+
get visible(): boolean;
|
|
29
53
|
close(key?: string): void;
|
|
30
54
|
dispose(): void;
|
|
31
55
|
}
|
|
@@ -36,37 +60,37 @@ declare class FloatPanel {
|
|
|
36
60
|
*/
|
|
37
61
|
|
|
38
62
|
declare class PanelManager {
|
|
39
|
-
|
|
63
|
+
readonly config: PanelManagerConfig;
|
|
40
64
|
readonly panelRegistry: Map<string, PanelFactory<any>>;
|
|
41
65
|
right: FloatPanel;
|
|
42
66
|
bottom: FloatPanel;
|
|
43
67
|
init(): void;
|
|
44
68
|
register<T extends any>(factory: PanelFactory<T>): void;
|
|
45
69
|
open(key: string, area?: Area, options?: any): void;
|
|
46
|
-
close(key
|
|
70
|
+
close(key?: string): void;
|
|
47
71
|
getPanel(area: Area): FloatPanel;
|
|
48
72
|
dispose(): void;
|
|
49
73
|
}
|
|
50
74
|
|
|
75
|
+
declare const createPanelManagerPlugin: _flowgram_ai_core.PluginCreator<Partial<PanelManagerConfig>>;
|
|
76
|
+
|
|
51
77
|
/**
|
|
52
78
|
* Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
|
|
53
79
|
* SPDX-License-Identifier: MIT
|
|
54
80
|
*/
|
|
55
81
|
|
|
56
|
-
|
|
57
|
-
factories: PanelFactory<any>[];
|
|
58
|
-
right: PanelConfig;
|
|
59
|
-
bottom: PanelConfig;
|
|
60
|
-
}
|
|
61
|
-
declare const PanelManagerConfig: unique symbol;
|
|
62
|
-
|
|
63
|
-
declare const createPanelManagerPlugin: _flowgram_ai_core.PluginCreator<Partial<PanelManagerConfig>>;
|
|
82
|
+
declare const usePanelManager: () => PanelManager;
|
|
64
83
|
|
|
65
84
|
/**
|
|
66
85
|
* Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
|
|
67
86
|
* SPDX-License-Identifier: MIT
|
|
68
87
|
*/
|
|
69
88
|
|
|
70
|
-
|
|
89
|
+
interface Props {
|
|
90
|
+
onResize: (w: number) => void;
|
|
91
|
+
size: number;
|
|
92
|
+
isVertical?: boolean;
|
|
93
|
+
}
|
|
94
|
+
declare const ResizeBar: React$1.FC<Props>;
|
|
71
95
|
|
|
72
|
-
export { type Area, type PanelFactory, PanelManager, createPanelManagerPlugin, usePanelManager };
|
|
96
|
+
export { type Area, type PanelFactory, PanelManager, ResizeBar, createPanelManagerPlugin, usePanelManager };
|