dishui 0.0.47 → 0.0.49

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 (82) hide show
  1. package/dist/components/pro/CodeEditor/editors/MarkdownEditor.js +1 -2
  2. package/dist/components/pro/CodeEditor/editors/MarkdownEditor.js.map +1 -1
  3. package/dist/components/pro/CodeEditor/themes.js +0 -25
  4. package/dist/components/pro/CodeEditor/themes.js.map +1 -1
  5. package/dist/components/pro/CodeEditor/types.d.ts +1 -1
  6. package/dist/components/pro/Flow/Flow.js +500 -483
  7. package/dist/components/pro/Flow/Flow.js.map +1 -1
  8. package/dist/components/pro/Flow/FlowCanvas.js +526 -524
  9. package/dist/components/pro/Flow/FlowCanvas.js.map +1 -1
  10. package/dist/components/pro/Flow/canvas/GridRenderer.d.ts +3 -0
  11. package/dist/components/pro/Flow/canvas/GridRenderer.js +28 -23
  12. package/dist/components/pro/Flow/canvas/GridRenderer.js.map +1 -1
  13. package/dist/components/pro/Flow/canvas/MiniMapRenderer.js +18 -17
  14. package/dist/components/pro/Flow/canvas/MiniMapRenderer.js.map +1 -1
  15. package/dist/components/pro/Flow/canvas/PixiApp.d.ts +2 -0
  16. package/dist/components/pro/Flow/canvas/PixiApp.js +14 -11
  17. package/dist/components/pro/Flow/canvas/PixiApp.js.map +1 -1
  18. package/dist/components/pro/Flow/constants.js +7 -7
  19. package/dist/components/pro/Flow/constants.js.map +1 -1
  20. package/dist/components/pro/Flow/context/FlowAIContext.d.ts +15 -0
  21. package/dist/components/pro/Flow/context/FlowAIContext.js +32 -0
  22. package/dist/components/pro/Flow/context/FlowAIContext.js.map +1 -0
  23. package/dist/components/pro/Flow/context/FlowUIContext.d.ts +4 -1
  24. package/dist/components/pro/Flow/context/FlowUIContext.js +58 -55
  25. package/dist/components/pro/Flow/context/FlowUIContext.js.map +1 -1
  26. package/dist/components/pro/Flow/edges/EdgeRenderer.js +22 -21
  27. package/dist/components/pro/Flow/edges/EdgeRenderer.js.map +1 -1
  28. package/dist/components/pro/Flow/hooks/useFlowImportExport.js +32 -32
  29. package/dist/components/pro/Flow/hooks/useFlowImportExport.js.map +1 -1
  30. package/dist/components/pro/Flow/hooks/usePixiApp.d.ts +6 -1
  31. package/dist/components/pro/Flow/hooks/usePixiApp.js +49 -30
  32. package/dist/components/pro/Flow/hooks/usePixiApp.js.map +1 -1
  33. package/dist/components/pro/Flow/index.d.ts +2 -0
  34. package/dist/components/pro/Flow/lines/FreehandTool.js +21 -20
  35. package/dist/components/pro/Flow/lines/FreehandTool.js.map +1 -1
  36. package/dist/components/pro/Flow/lines/GeometricLineTool.js +22 -18
  37. package/dist/components/pro/Flow/lines/GeometricLineTool.js.map +1 -1
  38. package/dist/components/pro/Flow/lines/LineRenderer.js +19 -18
  39. package/dist/components/pro/Flow/lines/LineRenderer.js.map +1 -1
  40. package/dist/components/pro/Flow/nodes/MediaContent.js +143 -124
  41. package/dist/components/pro/Flow/nodes/MediaContent.js.map +1 -1
  42. package/dist/components/pro/Flow/nodes/MediaOverlay.js +22 -17
  43. package/dist/components/pro/Flow/nodes/MediaOverlay.js.map +1 -1
  44. package/dist/components/pro/Flow/nodes/NodeRenderer.js +77 -76
  45. package/dist/components/pro/Flow/nodes/NodeRenderer.js.map +1 -1
  46. package/dist/components/pro/Flow/nodes/aiClient.d.ts +22 -0
  47. package/dist/components/pro/Flow/nodes/aiClient.js +107 -54
  48. package/dist/components/pro/Flow/nodes/aiClient.js.map +1 -1
  49. package/dist/components/pro/Flow/nodes/svgIcons.js +6 -6
  50. package/dist/components/pro/Flow/nodes/svgIcons.js.map +1 -1
  51. package/dist/components/pro/Flow/panels/AIPanel.d.ts +2 -0
  52. package/dist/components/pro/Flow/panels/AIPanel.js +498 -0
  53. package/dist/components/pro/Flow/panels/AIPanel.js.map +1 -0
  54. package/dist/components/pro/Flow/panels/FlowPanelGroup.js +51 -39
  55. package/dist/components/pro/Flow/panels/FlowPanelGroup.js.map +1 -1
  56. package/dist/components/pro/Flow/panels/FlowToolbar.js +91 -85
  57. package/dist/components/pro/Flow/panels/FlowToolbar.js.map +1 -1
  58. package/dist/components/pro/Flow/panels/InspectorPanel.js +372 -332
  59. package/dist/components/pro/Flow/panels/InspectorPanel.js.map +1 -1
  60. package/dist/components/pro/Flow/panels/OutlinePanel.js +28 -27
  61. package/dist/components/pro/Flow/panels/OutlinePanel.js.map +1 -1
  62. package/dist/components/pro/Flow/panels/ShapePalette.js +107 -104
  63. package/dist/components/pro/Flow/panels/ShapePalette.js.map +1 -1
  64. package/dist/components/pro/Flow/panels/toolbarIcons.d.ts +1 -0
  65. package/dist/components/pro/Flow/panels/toolbarIcons.js +25 -20
  66. package/dist/components/pro/Flow/panels/toolbarIcons.js.map +1 -1
  67. package/dist/components/pro/Flow/types.d.ts +13 -0
  68. package/dist/components/pro/Flow/types.js.map +1 -1
  69. package/dist/components/pro/Flow/utils/themeColor.d.ts +87 -0
  70. package/dist/components/pro/Flow/utils/themeColor.js +212 -0
  71. package/dist/components/pro/Flow/utils/themeColor.js.map +1 -0
  72. package/dist/contexts/AppContext.d.ts +1 -1
  73. package/dist/contexts/AppContext.js +28 -29
  74. package/dist/contexts/AppContext.js.map +1 -1
  75. package/dist/dishui.css +1 -1
  76. package/dist/favicon.svg +10 -0
  77. package/dist/flow.js +56 -51
  78. package/dist/styles/themeStyles.js +6 -11
  79. package/dist/styles/themeStyles.js.map +1 -1
  80. package/dist/utils/themes.js +3 -23
  81. package/dist/utils/themes.js.map +1 -1
  82. package/package.json +17 -18
@@ -1,12 +1,13 @@
1
- import { PALETTE_ITEMS as x } from "../constants.js";
1
+ import { PALETTE_ITEMS as $ } from "../constants.js";
2
2
  import { useFlowUI as y } from "../context/FlowUIContext.js";
3
- import { SVG_ICON_CATEGORIES as $, buildSvgMarkup as b, getSvgIconsByCategory as M } from "../nodes/svgIcons.js";
4
- import { useDraggablePanel as v } from "../hooks/useDraggablePanel.js";
5
- import { useResizablePanel as S } from "../hooks/useResizablePanel.js";
6
- import { makeStarterDataConfig as P } from "../nodes/dataUtils.js";
7
- import { useCallback as u, useState as W } from "react";
8
- import { Fragment as g, jsx as e, jsxs as d } from "react/jsx-runtime";
9
- var C = [
3
+ import { resolveThemeColor as b } from "../utils/themeColor.js";
4
+ import { SVG_ICON_CATEGORIES as v, buildSvgMarkup as M, getSvgIcon as x, getSvgIconsByCategory as S } from "../nodes/svgIcons.js";
5
+ import { useDraggablePanel as C } from "../hooks/useDraggablePanel.js";
6
+ import { useResizablePanel as P } from "../hooks/useResizablePanel.js";
7
+ import { makeStarterDataConfig as W } from "../nodes/dataUtils.js";
8
+ import { useCallback as u, useState as I } from "react";
9
+ import { Fragment as g, jsx as e, jsxs as c } from "react/jsx-runtime";
10
+ var T = [
10
11
  {
11
12
  mode: "freehand",
12
13
  label: "Freehand"
@@ -24,13 +25,13 @@ var C = [
24
25
  label: "Arrow"
25
26
  }
26
27
  ];
27
- function O() {
28
- const { showPalette: l } = y(), { panelStyle: a, handleProps: i } = v(), { panelWidth: t, resizeHandleProps: o } = S("right", 180);
29
- return l ? /* @__PURE__ */ d("div", {
28
+ function V() {
29
+ const { showPalette: l } = y(), { panelStyle: r, handleProps: a } = C(), { panelWidth: t, resizeHandleProps: o } = P("right", 180);
30
+ return l ? /* @__PURE__ */ c("div", {
30
31
  className: "flow-palette",
31
32
  "data-flow-panel": !0,
32
33
  style: {
33
- ...a,
34
+ ...r,
34
35
  width: t
35
36
  },
36
37
  children: [
@@ -40,7 +41,7 @@ function O() {
40
41
  }),
41
42
  /* @__PURE__ */ e("div", {
42
43
  className: "flow-panel-drag-handle",
43
- ...i,
44
+ ...a,
44
45
  style: {
45
46
  fontSize: 11,
46
47
  fontWeight: 600,
@@ -54,45 +55,45 @@ function O() {
54
55
  }),
55
56
  /* @__PURE__ */ e("div", {
56
57
  className: "flow-palette-content",
57
- children: /* @__PURE__ */ e(I, {})
58
+ children: /* @__PURE__ */ e(N, {})
58
59
  })
59
60
  ]
60
61
  }) : null;
61
62
  }
62
- function I() {
63
- const { toolMode: l, setToolMode: a, setPendingPlacement: i, pendingPlacement: t } = y(), o = u((n, h, p, r) => {
64
- t?.type === n ? i(null) : (i({
63
+ function N() {
64
+ const { toolMode: l, setToolMode: r, setPendingPlacement: a, pendingPlacement: t } = y(), o = u((n, s, p, h) => {
65
+ t?.type === n ? a(null) : (a({
65
66
  type: n,
66
- width: h,
67
+ width: s,
67
68
  height: p,
68
- data: { ...r }
69
- }), a("select"));
69
+ data: { ...h }
70
+ }), r("select"));
70
71
  }, [
71
- i,
72
72
  a,
73
+ r,
73
74
  t
74
75
  ]);
75
- return /* @__PURE__ */ d(g, { children: [
76
+ return /* @__PURE__ */ c(g, { children: [
76
77
  /* @__PURE__ */ e("div", {
77
78
  className: "flow-palette-grid",
78
- children: x.map((n) => /* @__PURE__ */ d("div", {
79
+ children: $.map((n) => /* @__PURE__ */ c("div", {
79
80
  className: `flow-palette-item${t?.type === n.type ? " flow-palette-item--active" : ""}`,
80
81
  onClick: () => o(n.type, n.width, n.height, n.data),
81
- children: [/* @__PURE__ */ e(L, { type: n.type }), /* @__PURE__ */ e("span", {
82
+ children: [/* @__PURE__ */ e(D, { type: n.type }), /* @__PURE__ */ e("span", {
82
83
  className: "flow-palette-item-label",
83
84
  children: n.data.label
84
85
  })]
85
86
  }, n.type))
86
87
  }),
87
- /* @__PURE__ */ e(A, { children: "Lines" }),
88
+ /* @__PURE__ */ e(z, { children: "Lines" }),
88
89
  /* @__PURE__ */ e("div", {
89
90
  className: "flow-palette-grid",
90
- children: C.map((n) => /* @__PURE__ */ d("div", {
91
+ children: T.map((n) => /* @__PURE__ */ c("div", {
91
92
  className: `flow-palette-item${l === n.mode ? " flow-palette-item--active" : ""}`,
92
93
  onClick: () => {
93
- i(null), a(l === n.mode ? "select" : n.mode);
94
+ a(null), r(l === n.mode ? "select" : n.mode);
94
95
  },
95
- children: [/* @__PURE__ */ e(z, { mode: n.mode }), /* @__PURE__ */ e("span", {
96
+ children: [/* @__PURE__ */ e(E, { mode: n.mode }), /* @__PURE__ */ e("span", {
96
97
  className: "flow-palette-item-label",
97
98
  children: n.label
98
99
  })]
@@ -100,76 +101,78 @@ function I() {
100
101
  })
101
102
  ] });
102
103
  }
103
- function K() {
104
- const { setPendingPlacement: l, setToolMode: a, pendingPlacement: i } = y(), [t, o] = W({ lang: !0 }), n = u((h, p) => {
105
- const r = i?.data.svgId;
106
- if (i?.type === "shapeSvg" && r === h) {
104
+ function Z() {
105
+ const { setPendingPlacement: l, setToolMode: r, pendingPlacement: a } = y(), [t, o] = I({ lang: !0 }), n = u((s, p) => {
106
+ const h = a?.data.svgId;
107
+ if (a?.type === "shapeSvg" && h === s) {
107
108
  l(null);
108
109
  return;
109
110
  }
111
+ const i = {
112
+ label: p,
113
+ fill: "transparent",
114
+ stroke: "theme:base-content",
115
+ strokeWidth: 1.5,
116
+ color: x(s)?.brandColor ?? "theme:base-content",
117
+ labelColor: "theme:base-content",
118
+ fontSize: 12,
119
+ svgId: s,
120
+ iconBox: !1,
121
+ labelPlacement: "bottom",
122
+ borderStyle: "none"
123
+ };
110
124
  l({
111
125
  type: "shapeSvg",
112
126
  width: 56,
113
127
  height: 56,
114
- data: {
115
- label: p,
116
- fill: "transparent",
117
- stroke: "#64748b",
118
- strokeWidth: 1.5,
119
- color: "#334155",
120
- fontSize: 12,
121
- svgId: h,
122
- iconBox: !1,
123
- labelPlacement: "bottom",
124
- borderStyle: "none"
125
- }
126
- }), a("select");
128
+ data: i
129
+ }), r("select");
127
130
  }, [
128
- i,
131
+ a,
129
132
  l,
130
- a
133
+ r
131
134
  ]);
132
- return /* @__PURE__ */ e(g, { children: $.map((h) => {
133
- const p = M(h.id), r = t[h.id];
134
- return /* @__PURE__ */ d("div", { children: [/* @__PURE__ */ d("button", {
135
+ return /* @__PURE__ */ e(g, { children: v.map((s) => {
136
+ const p = S(s.id), h = t[s.id];
137
+ return /* @__PURE__ */ c("div", { children: [/* @__PURE__ */ c("button", {
135
138
  type: "button",
136
139
  className: "flow-palette-section-toggle",
137
- onClick: () => o((s) => ({
138
- ...s,
139
- [h.id]: !s[h.id]
140
+ onClick: () => o((i) => ({
141
+ ...i,
142
+ [s.id]: !i[s.id]
140
143
  })),
141
144
  children: [/* @__PURE__ */ e("span", {
142
145
  style: {
143
- transform: r ? "rotate(90deg)" : "none",
146
+ transform: h ? "rotate(90deg)" : "none",
144
147
  transition: "transform .15s"
145
148
  },
146
149
  children: "▸"
147
- }), h.label]
148
- }), r && /* @__PURE__ */ e("div", {
150
+ }), s.label]
151
+ }), h && /* @__PURE__ */ e("div", {
149
152
  className: "flow-palette-grid",
150
- children: p.map((s) => /* @__PURE__ */ d("div", {
151
- className: `flow-palette-item${i?.type === "shapeSvg" && i.data.svgId === s.id ? " flow-palette-item--active" : ""}`,
152
- onClick: () => n(s.id, s.label),
153
- title: s.label,
154
- children: [/* @__PURE__ */ e(N, { id: s.id }), /* @__PURE__ */ e("span", {
153
+ children: p.map((i) => /* @__PURE__ */ c("div", {
154
+ className: `flow-palette-item${a?.type === "shapeSvg" && a.data.svgId === i.id ? " flow-palette-item--active" : ""}`,
155
+ onClick: () => n(i.id, i.label),
156
+ title: i.label,
157
+ children: [/* @__PURE__ */ e(A, { id: i.id }), /* @__PURE__ */ e("span", {
155
158
  className: "flow-palette-item-label",
156
- children: s.label
159
+ children: i.label
157
160
  })]
158
- }, s.id))
159
- })] }, h.id);
161
+ }, i.id))
162
+ })] }, s.id);
160
163
  }) });
161
164
  }
162
- function N({ id: l }) {
163
- const a = b(l, "#475569");
164
- return a ? /* @__PURE__ */ e("img", {
165
- src: `data:image/svg+xml;utf8,${encodeURIComponent(a)}`,
165
+ function A({ id: l }) {
166
+ const r = M(l, b(x(l)?.brandColor, "") || "#475569");
167
+ return r ? /* @__PURE__ */ e("img", {
168
+ src: `data:image/svg+xml;utf8,${encodeURIComponent(r)}`,
166
169
  width: 20,
167
170
  height: 16,
168
171
  alt: "",
169
172
  style: { objectFit: "contain" }
170
173
  }) : null;
171
174
  }
172
- var T = [
175
+ var L = [
173
176
  {
174
177
  kind: "markdown",
175
178
  label: "Markdown",
@@ -264,18 +267,18 @@ function m({ text: l }) {
264
267
  children: l
265
268
  });
266
269
  }
267
- function U() {
268
- const { setPendingPlacement: l, setToolMode: a, pendingPlacement: i } = y(), t = u((o) => {
269
- if (i?.type === "mediaNode" && i.data.mediaKind === o.kind) {
270
+ function q() {
271
+ const { setPendingPlacement: l, setToolMode: r, pendingPlacement: a } = y(), t = u((o) => {
272
+ if (a?.type === "mediaNode" && a.data.mediaKind === o.kind) {
270
273
  l(null);
271
274
  return;
272
275
  }
273
276
  const n = {
274
277
  label: o.label,
275
- fill: "#ffffff",
276
- stroke: "#cbd5e1",
278
+ fill: "theme:base-100",
279
+ stroke: "theme:base-content",
277
280
  strokeWidth: 1.5,
278
- color: "#1f2937",
281
+ color: "theme:base-content",
279
282
  fontSize: 13,
280
283
  borderStyle: "solid",
281
284
  mediaKind: o.kind,
@@ -284,23 +287,23 @@ function U() {
284
287
  gateway: "",
285
288
  protocol: "openai",
286
289
  model: ""
287
- } } : o.kind === "model3d" ? { modelFormat: "stl" } : o.kind === "data" ? { dataConfig: P() } : {}
290
+ } } : o.kind === "model3d" ? { modelFormat: "stl" } : o.kind === "data" ? { dataConfig: W() } : {}
288
291
  };
289
292
  l({
290
293
  type: "mediaNode",
291
294
  width: o.width,
292
295
  height: o.height,
293
296
  data: n
294
- }), a("select");
297
+ }), r("select");
295
298
  }, [
296
- i,
299
+ a,
297
300
  l,
298
- a
301
+ r
299
302
  ]);
300
303
  return /* @__PURE__ */ e("div", {
301
304
  className: "flow-palette-grid",
302
- children: T.map((o) => /* @__PURE__ */ d("div", {
303
- className: `flow-palette-item${i?.type === "mediaNode" && i.data.mediaKind === o.kind ? " flow-palette-item--active" : ""}`,
305
+ children: L.map((o) => /* @__PURE__ */ c("div", {
306
+ className: `flow-palette-item${a?.type === "mediaNode" && a.data.mediaKind === o.kind ? " flow-palette-item--active" : ""}`,
304
307
  onClick: () => t(o),
305
308
  title: o.label,
306
309
  children: [o.icon, /* @__PURE__ */ e("span", {
@@ -310,7 +313,7 @@ function U() {
310
313
  }, o.kind))
311
314
  });
312
315
  }
313
- function A({ children: l }) {
316
+ function z({ children: l }) {
314
317
  return /* @__PURE__ */ e("div", {
315
318
  style: {
316
319
  fontSize: 11,
@@ -323,7 +326,7 @@ function A({ children: l }) {
323
326
  children: l
324
327
  });
325
328
  }
326
- function L({ type: l }) {
329
+ function D({ type: l }) {
327
330
  const t = "currentColor", n = {
328
331
  shapeRect: /* @__PURE__ */ e("rect", {
329
332
  x: "3",
@@ -385,11 +388,11 @@ function L({ type: l }) {
385
388
  strokeWidth: 1.5
386
389
  }),
387
390
  shapePentagon: (() => {
388
- const r = Math.min(18, 14) - 4;
391
+ const h = Math.min(18, 14) - 4;
389
392
  return /* @__PURE__ */ e("polygon", {
390
- points: Array.from({ length: 5 }, (s, k) => {
391
- const c = Math.PI * 2 * k / 5 - Math.PI / 2;
392
- return `${18 + r * Math.cos(c)},${14 + r * Math.sin(c)}`;
393
+ points: Array.from({ length: 5 }, (i, k) => {
394
+ const d = Math.PI * 2 * k / 5 - Math.PI / 2;
395
+ return `${18 + h * Math.cos(d)},${14 + h * Math.sin(d)}`;
393
396
  }).join(" "),
394
397
  fill: "none",
395
398
  stroke: t,
@@ -397,8 +400,8 @@ function L({ type: l }) {
397
400
  });
398
401
  })(),
399
402
  shapeHexagon: /* @__PURE__ */ e("polygon", {
400
- points: Array.from({ length: 6 }, (k, c) => {
401
- const w = Math.PI * 2 * c / 6 - Math.PI / 6;
403
+ points: Array.from({ length: 6 }, (k, d) => {
404
+ const w = Math.PI * 2 * d / 6 - Math.PI / 6;
402
405
  return `${18 + 14 * Math.cos(w)},${14 + 10 * Math.sin(w)}`;
403
406
  }).join(" "),
404
407
  fill: "none",
@@ -406,10 +409,10 @@ function L({ type: l }) {
406
409
  strokeWidth: 1.5
407
410
  }),
408
411
  shapeStar: (() => {
409
- const r = Math.min(18, 14) - 3, s = r * 0.4;
412
+ const h = Math.min(18, 14) - 3, i = h * 0.4;
410
413
  return /* @__PURE__ */ e("polygon", {
411
- points: Array.from({ length: 10 }, (k, c) => {
412
- const w = Math.PI * c / 5 - Math.PI / 2, f = c % 2 === 0 ? r : s;
414
+ points: Array.from({ length: 10 }, (k, d) => {
415
+ const w = Math.PI * d / 5 - Math.PI / 2, f = d % 2 === 0 ? h : i;
413
416
  return `${18 + f * Math.cos(w)},${14 + f * Math.sin(w)}`;
414
417
  }).join(" "),
415
418
  fill: "none",
@@ -418,10 +421,10 @@ function L({ type: l }) {
418
421
  });
419
422
  })(),
420
423
  shapeHexagram: (() => {
421
- const r = Math.min(18, 14) - 3, s = r * 0.55;
424
+ const h = Math.min(18, 14) - 3, i = h * 0.55;
422
425
  return /* @__PURE__ */ e("polygon", {
423
- points: Array.from({ length: 12 }, (k, c) => {
424
- const w = Math.PI * c / 6 - Math.PI / 2, f = c % 2 === 0 ? r : s;
426
+ points: Array.from({ length: 12 }, (k, d) => {
427
+ const w = Math.PI * d / 6 - Math.PI / 2, f = d % 2 === 0 ? h : i;
425
428
  return `${18 + f * Math.cos(w)},${14 + f * Math.sin(w)}`;
426
429
  }).join(" "),
427
430
  fill: "none",
@@ -450,7 +453,7 @@ function L({ type: l }) {
450
453
  fill: "currentColor",
451
454
  children: "Aa"
452
455
  }),
453
- animAnchor: /* @__PURE__ */ d(g, { children: [
456
+ animAnchor: /* @__PURE__ */ c(g, { children: [
454
457
  /* @__PURE__ */ e("rect", {
455
458
  x: "3",
456
459
  y: "4",
@@ -500,9 +503,9 @@ function L({ type: l }) {
500
503
  children: n[l] ?? n.shapeRect
501
504
  });
502
505
  }
503
- function z({ mode: l }) {
506
+ function E({ mode: l }) {
504
507
  const t = "currentColor", n = {
505
- connect: /* @__PURE__ */ d(g, { children: [/* @__PURE__ */ e("line", {
508
+ connect: /* @__PURE__ */ c(g, { children: [/* @__PURE__ */ e("line", {
506
509
  x1: "6",
507
510
  y1: 22,
508
511
  x2: 30,
@@ -535,7 +538,7 @@ function z({ mode: l }) {
535
538
  strokeWidth: 1.5,
536
539
  strokeLinejoin: "round"
537
540
  }),
538
- arrow: /* @__PURE__ */ d(g, { children: [/* @__PURE__ */ e("line", {
541
+ arrow: /* @__PURE__ */ c(g, { children: [/* @__PURE__ */ e("line", {
539
542
  x1: "6",
540
543
  y1: 22,
541
544
  x2: 30,
@@ -556,11 +559,11 @@ function z({ mode: l }) {
556
559
  });
557
560
  }
558
561
  export {
559
- U as MediaStampContent,
560
- L as PaletteThumbnail,
561
- I as ShapePaletteContent,
562
- K as SvgStampContent,
563
- O as default
562
+ q as MediaStampContent,
563
+ D as PaletteThumbnail,
564
+ N as ShapePaletteContent,
565
+ Z as SvgStampContent,
566
+ V as default
564
567
  };
565
568
 
566
569
  //# sourceMappingURL=ShapePalette.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ShapePalette.js","names":[],"sources":["../../../../../src/components/pro/Flow/panels/ShapePalette.tsx"],"sourcesContent":["import React, { useCallback, useState } from 'react';\nimport { useFlowUI } from '../context/FlowUIContext';\nimport { useDraggablePanel } from '../hooks/useDraggablePanel';\nimport { useResizablePanel } from '../hooks/useResizablePanel';\nimport { PALETTE_ITEMS } from '../constants';\nimport type { FlowShapeType, FlowNodeData, FlowToolMode } from '../types';\nimport { SVG_ICON_CATEGORIES, getSvgIconsByCategory, buildSvgMarkup, type SvgIconCategory } from '../nodes/svgIcons';\nimport type { FlowMediaKind } from '../types';\nimport { makeStarterDataConfig } from '../nodes/dataUtils';\n\nconst LINE_TOOL_ITEMS: Array<{ mode: FlowToolMode; label: string }> = [\n { mode: 'freehand', label: 'Freehand' },\n { mode: 'line', label: 'Line' },\n { mode: 'polyline', label: 'Polyline' },\n { mode: 'arrow', label: 'Arrow' },\n];\n\n/**\n * Standalone panel (legacy). Prefer using ShapePaletteContent inside a FlowPanelGroup.\n */\nexport default function ShapePalette() {\n const { showPalette } = useFlowUI();\n const { panelStyle, handleProps } = useDraggablePanel();\n const { panelWidth, resizeHandleProps } = useResizablePanel('right', 180);\n\n if (!showPalette) return null;\n\n return (\n <div className=\"flow-palette\" data-flow-panel style={{ ...panelStyle, width: panelWidth }}>\n <div className=\"flow-panel-resize-handle flow-panel-resize-handle--right\" {...resizeHandleProps} />\n <div\n className=\"flow-panel-drag-handle\"\n {...handleProps}\n style={{ fontSize: 11, fontWeight: 600, marginBottom: 6, color: 'color-mix(in oklch, var(--color-base-content) 50%, transparent)', textTransform: 'uppercase', letterSpacing: '0.05em', cursor: 'grab' }}\n >\n Shapes\n </div>\n <div className=\"flow-palette-content\">\n <ShapePaletteContent />\n </div>\n </div>\n );\n}\n\n/** Reusable content for embedding inside FlowPanelGroup tabs. */\nexport function ShapePaletteContent() {\n const { toolMode, setToolMode, setPendingPlacement, pendingPlacement } = useFlowUI();\n\n const handleAddShape = useCallback(\n (type: FlowShapeType, width: number, height: number, data: FlowNodeData) => {\n if (pendingPlacement?.type === type) {\n setPendingPlacement(null);\n } else {\n setPendingPlacement({ type, width, height, data: { ...data } });\n setToolMode('select');\n }\n },\n [setPendingPlacement, setToolMode, pendingPlacement],\n );\n\n return (\n <>\n <div className=\"flow-palette-grid\">\n {PALETTE_ITEMS.map((item) => (\n <div\n key={item.type}\n className={`flow-palette-item${pendingPlacement?.type === item.type ? ' flow-palette-item--active' : ''}`}\n onClick={() => handleAddShape(item.type, item.width, item.height, item.data)}\n >\n <PaletteThumbnail type={item.type} />\n <span className=\"flow-palette-item-label\">{item.data.label}</span>\n </div>\n ))}\n </div>\n\n <SectionHeader>Lines</SectionHeader>\n <div className=\"flow-palette-grid\">\n {LINE_TOOL_ITEMS.map((item) => (\n <div\n key={item.mode}\n className={`flow-palette-item${toolMode === item.mode ? ' flow-palette-item--active' : ''}`}\n onClick={() => { setPendingPlacement(null); setToolMode(toolMode === item.mode ? 'select' : item.mode); }}\n >\n <LineToolThumbnail mode={item.mode} />\n <span className=\"flow-palette-item-label\">{item.label}</span>\n </div>\n ))}\n </div>\n </>\n );\n}\n\n/** SVG icon stamps, grouped by category with a collapsible header per group. */\nexport function SvgStampContent() {\n const { setPendingPlacement, setToolMode, pendingPlacement } = useFlowUI();\n const [open, setOpen] = useState<Record<string, boolean>>({ lang: true });\n\n const stampIcon = useCallback((svgId: string, label: string) => {\n const activeId = pendingPlacement?.data.svgId;\n if (pendingPlacement?.type === 'shapeSvg' && activeId === svgId) {\n setPendingPlacement(null);\n return;\n }\n const data: FlowNodeData = {\n label,\n fill: 'transparent',\n stroke: '#64748b',\n strokeWidth: 1.5,\n color: '#334155',\n fontSize: 12,\n svgId,\n iconBox: false,\n labelPlacement: 'bottom',\n borderStyle: 'none',\n };\n setPendingPlacement({ type: 'shapeSvg', width: 56, height: 56, data });\n setToolMode('select');\n }, [pendingPlacement, setPendingPlacement, setToolMode]);\n\n return (\n <>\n {SVG_ICON_CATEGORIES.map((cat) => {\n const icons = getSvgIconsByCategory(cat.id as SvgIconCategory);\n const isOpen = open[cat.id];\n return (\n <div key={cat.id}>\n <button\n type=\"button\"\n className=\"flow-palette-section-toggle\"\n onClick={() => setOpen((o) => ({ ...o, [cat.id]: !o[cat.id] }))}\n >\n <span style={{ transform: isOpen ? 'rotate(90deg)' : 'none', transition: 'transform .15s' }}>▸</span>\n {cat.label}\n </button>\n {isOpen && (\n <div className=\"flow-palette-grid\">\n {icons.map((ic) => (\n <div\n key={ic.id}\n className={`flow-palette-item${pendingPlacement?.type === 'shapeSvg' && pendingPlacement.data.svgId === ic.id ? ' flow-palette-item--active' : ''}`}\n onClick={() => stampIcon(ic.id, ic.label)}\n title={ic.label}\n >\n <SvgThumbnail id={ic.id} />\n <span className=\"flow-palette-item-label\">{ic.label}</span>\n </div>\n ))}\n </div>\n )}\n </div>\n );\n })}\n </>\n );\n}\n\n/** Renders an SVG icon as an <img> (data URL) so it displays in the correct\n * SVG namespace, unlike dangerouslySetInnerHTML on an <svg> element. */\nfunction SvgThumbnail({ id }: { id: string }) {\n const markup = buildSvgMarkup(id, '#475569');\n if (!markup) return null;\n const url = `data:image/svg+xml;utf8,${encodeURIComponent(markup)}`;\n return <img src={url} width={20} height={16} alt=\"\" style={{ objectFit: 'contain' }} />;\n}\n\n/** Multimedia stamps: rich DOM-rendered nodes (markdown/html/mermaid/math/image/3D/AI). */\nconst MEDIA_ITEMS: Array<{\n kind: FlowMediaKind;\n label: string;\n width: number;\n height: number;\n content: string;\n icon: React.ReactNode;\n}> = [\n {\n kind: 'markdown', label: 'Markdown', width: 260, height: 180,\n content: '# 标题\\n\\n- 支持 **GFM**\\n- 支持 `代码`\\n\\n> 引用文本',\n icon: <MediaGlyph text={'M↓'} />,\n },\n {\n kind: 'html', label: 'HTML', width: 260, height: 180,\n content: '<div style=\"font-family:sans-serif;padding:12px\">\\n <h3>Hello</h3>\\n <p>可编辑的 HTML 片段</p>\\n</div>',\n icon: <MediaGlyph text={'</>'} />,\n },\n {\n kind: 'mermaid', label: 'Mermaid', width: 280, height: 200,\n content: 'graph TD\\n A[开始] --> B{判断}\\n B -->|是| C[处理]\\n B -->|否| D[结束]',\n icon: <MediaGlyph text={'⎇'} />,\n },\n {\n kind: 'math', label: 'Math', width: 240, height: 120,\n content: 'E = mc^2',\n icon: <MediaGlyph text={'√x'} />,\n },\n {\n kind: 'image', label: 'Image', width: 320, height: 220,\n content: '',\n icon: <MediaGlyph text={'IMG'} />,\n },\n {\n kind: 'model3d', label: '3D', width: 360, height: 280,\n content: '',\n icon: <MediaGlyph text={'3D'} />,\n },\n {\n kind: 'ai', label: 'AI', width: 300, height: 340,\n content: '',\n icon: <MediaGlyph text={'AI'} />,\n },\n {\n kind: 'data', label: 'Data', width: 420, height: 300,\n content: '',\n icon: <MediaGlyph text={'⊞'} />,\n },\n];\n\nfunction MediaGlyph({ text }: { text: string }) {\n return (\n <div\n style={{\n width: 20, height: 16, display: 'flex', alignItems: 'center', justifyContent: 'center',\n fontSize: 9, fontWeight: 700, color: 'color-mix(in oklch, var(--color-base-content) 60%, transparent)',\n border: '1px solid color-mix(in oklch, var(--color-base-content) 20%, transparent)', borderRadius: 3, flexShrink: 0,\n }}\n >\n {text}\n </div>\n );\n}\n\nexport function MediaStampContent() {\n const { setPendingPlacement, setToolMode, pendingPlacement } = useFlowUI();\n\n const stampMedia = useCallback((item: (typeof MEDIA_ITEMS)[number]) => {\n if (pendingPlacement?.type === 'mediaNode' && pendingPlacement.data.mediaKind === item.kind) {\n setPendingPlacement(null);\n return;\n }\n const data: FlowNodeData = {\n label: item.label,\n fill: '#ffffff',\n stroke: '#cbd5e1',\n strokeWidth: 1.5,\n color: '#1f2937',\n fontSize: 13,\n borderStyle: 'solid',\n mediaKind: item.kind,\n mediaContent: item.content,\n ...(item.kind === 'ai'\n ? { aiConfig: { gateway: '', protocol: 'openai' as const, model: '' } }\n : item.kind === 'model3d'\n ? { modelFormat: 'stl' as const }\n : item.kind === 'data'\n ? { dataConfig: makeStarterDataConfig() }\n : {}),\n };\n setPendingPlacement({ type: 'mediaNode', width: item.width, height: item.height, data });\n setToolMode('select');\n }, [pendingPlacement, setPendingPlacement, setToolMode]);\n\n return (\n <div className=\"flow-palette-grid\">\n {MEDIA_ITEMS.map((item) => (\n <div\n key={item.kind}\n className={`flow-palette-item${pendingPlacement?.type === 'mediaNode' && pendingPlacement.data.mediaKind === item.kind ? ' flow-palette-item--active' : ''}`}\n onClick={() => stampMedia(item)}\n title={item.label}\n >\n {item.icon}\n <span className=\"flow-palette-item-label\">{item.label}</span>\n </div>\n ))}\n </div>\n );\n}\n\nfunction SectionHeader({ children }: { children: React.ReactNode }) {\n return (\n <div style={{ fontSize: 11, fontWeight: 600, margin: '10px 0 6px', color: 'color-mix(in oklch, var(--color-base-content) 50%, transparent)', textTransform: 'uppercase', letterSpacing: '0.05em' }}>\n {children}\n </div>\n );\n}\n\nexport function PaletteThumbnail({ type }: { type: FlowShapeType }) {\n const w = 36, h = 28;\n const s = 'currentColor';\n const sw = 1.5;\n\n const shapeMap: Record<string, React.ReactNode> = {\n shapeRect: (\n <rect x=\"3\" y=\"4\" width={w - 6} height={h - 8} rx=\"1\" fill=\"none\" stroke={s} strokeWidth={sw} />\n ),\n shapeRoundRect: (\n <rect x=\"3\" y=\"4\" width={w - 6} height={h - 8} rx=\"5\" fill=\"none\" stroke={s} strokeWidth={sw} />\n ),\n shapeEllipse: (\n <ellipse cx={w / 2} cy={h / 2} rx={w / 2 - 4} ry={h / 2 - 4} fill=\"none\" stroke={s} strokeWidth={sw} />\n ),\n shapeDiamond: (\n <polygon points={`${w / 2},3 ${w - 4},${h / 2} ${w / 2},${h - 3} 4,${h / 2}`} fill=\"none\" stroke={s} strokeWidth={sw} />\n ),\n shapeDocument: (\n <path d={`M4,4 L${w - 4},4 L${w - 4},${h - 8} C${w * 0.7},${h - 12} ${w * 0.3},${h - 2} 4,${h - 8} Z`} fill=\"none\" stroke={s} strokeWidth={sw} />\n ),\n shapeParallelogram: (() => {\n const skew = (w - 8) * 0.2;\n return <polygon points={`${4 + skew},4 ${w - 4},4 ${w - 4 - skew},${h - 4} 4,${h - 4}`} fill=\"none\" stroke={s} strokeWidth={sw} />;\n })(),\n shapeTriangle: (\n <polygon points={`${w / 2},4 ${w - 4},${h - 4} 4,${h - 4}`} fill=\"none\" stroke={s} strokeWidth={sw} />\n ),\n shapeTrapezoid: (() => {\n const inset = (w - 8) * 0.15;\n return <polygon points={`${4 + inset},4 ${w - 4 - inset},4 ${w - 4},${h - 4} 4,${h - 4}`} fill=\"none\" stroke={s} strokeWidth={sw} />;\n })(),\n shapePentagon: (() => {\n const cx = w / 2, cy = h / 2, r = Math.min(cx, cy) - 4;\n const pts = Array.from({ length: 5 }, (_, i) => {\n const a = (Math.PI * 2 * i) / 5 - Math.PI / 2;\n return `${cx + r * Math.cos(a)},${cy + r * Math.sin(a)}`;\n }).join(' ');\n return <polygon points={pts} fill=\"none\" stroke={s} strokeWidth={sw} />;\n })(),\n shapeHexagon: (() => {\n const cx = w / 2, cy = h / 2, rx = cx - 4, ry = cy - 4;\n const pts = Array.from({ length: 6 }, (_, i) => {\n const a = (Math.PI * 2 * i) / 6 - Math.PI / 6;\n return `${cx + rx * Math.cos(a)},${cy + ry * Math.sin(a)}`;\n }).join(' ');\n return <polygon points={pts} fill=\"none\" stroke={s} strokeWidth={sw} />;\n })(),\n shapeStar: (() => {\n const cx = w / 2, cy = h / 2, outer = Math.min(cx, cy) - 3, inner = outer * 0.4;\n const pts = Array.from({ length: 10 }, (_, i) => {\n const a = (Math.PI * i) / 5 - Math.PI / 2;\n const r = i % 2 === 0 ? outer : inner;\n return `${cx + r * Math.cos(a)},${cy + r * Math.sin(a)}`;\n }).join(' ');\n return <polygon points={pts} fill=\"none\" stroke={s} strokeWidth={sw} />;\n })(),\n shapeHexagram: (() => {\n const cx = w / 2, cy = h / 2, outer = Math.min(cx, cy) - 3, inner = outer * 0.55;\n const pts = Array.from({ length: 12 }, (_, i) => {\n const a = (Math.PI * i) / 6 - Math.PI / 2;\n const r = i % 2 === 0 ? outer : inner;\n return `${cx + r * Math.cos(a)},${cy + r * Math.sin(a)}`;\n }).join(' ');\n return <polygon points={pts} fill=\"none\" stroke={s} strokeWidth={sw} />;\n })(),\n shapeRightTriangle: (\n <polygon points={`4,4 ${w - 4},${h - 4} 4,${h - 4}`} fill=\"none\" stroke={s} strokeWidth={sw} />\n ),\n shapeCorner: (() => {\n const hf = Math.min(w - 8, h - 8) * 0.4;\n return <polygon points={`4,4 ${w - 4},4 ${w - 4},${4 + hf} ${4 + hf},${4 + hf} ${4 + hf},${h - 4} 4,${h - 4}`} fill=\"none\" stroke={s} strokeWidth={sw} />;\n })(),\n textLabel: (\n <text x={w / 2} y={h / 2 + 1} textAnchor=\"middle\" dominantBaseline=\"middle\" fontSize=\"10\" fill=\"currentColor\">Aa</text>\n ),\n animAnchor: (\n <>\n <rect x=\"3\" y=\"4\" width={w - 6} height={h - 8} rx=\"2\" fill=\"none\" stroke={s} strokeWidth={sw} strokeDasharray=\"4 3\" />\n <circle cx=\"8\" cy=\"9\" r=\"4\" fill=\"none\" stroke={s} strokeWidth={sw} />\n <text x=\"8\" y=\"10.5\" textAnchor=\"middle\" dominantBaseline=\"middle\" fontSize=\"7\" fill=\"currentColor\">1</text>\n </>\n ),\n geometryGroup: (\n <rect x=\"3\" y=\"4\" width={w - 6} height={h - 8} rx=\"3\" fill=\"none\" stroke={s} strokeWidth={sw} strokeDasharray=\"6 3\" />\n ),\n };\n\n return (\n <svg width={w} height={h} viewBox={`0 0 ${w} ${h}`} style={{ color: 'color-mix(in oklch, var(--color-base-content) 55%, transparent)' }}>\n {shapeMap[type] ?? shapeMap.shapeRect}\n </svg>\n );\n}\n\nfunction LineToolThumbnail({ mode }: { mode: FlowToolMode }) {\n const w = 36, h = 28;\n const s = 'currentColor';\n const sw = 1.5;\n\n const thumbMap: Record<string, React.ReactNode> = {\n connect: (\n <>\n <line x1=\"6\" y1={h - 6} x2={w - 6} y2=\"6\" stroke={s} strokeWidth={sw} />\n <polygon points={`${w - 6},6 ${w - 11},4 ${w - 9},9`} fill={s} />\n </>\n ),\n freehand: (\n <path d={`M6,${h - 8} C10,${h - 14} 14,10 ${w / 2},${h / 2} S${w - 10},6 ${w - 6},8`} fill=\"none\" stroke={s} strokeWidth={sw} strokeLinecap=\"round\" />\n ),\n line: (\n <line x1=\"6\" y1={h - 6} x2={w - 6} y2=\"6\" stroke={s} strokeWidth={sw} />\n ),\n polyline: (\n <polyline points={`6,${h - 6} 14,8 ${w / 2 + 2},${h - 10} ${w - 6},6`} fill=\"none\" stroke={s} strokeWidth={sw} strokeLinejoin=\"round\" />\n ),\n arrow: (\n <>\n <line x1=\"6\" y1={h - 6} x2={w - 6} y2=\"6\" stroke={s} strokeWidth={sw} />\n <polygon points={`${w - 6},6 ${w - 12},6 ${w - 8},12`} fill={s} />\n </>\n ),\n };\n\n return (\n <svg width={w} height={h} viewBox={`0 0 ${w} ${h}`} style={{ color: 'color-mix(in oklch, var(--color-base-content) 55%, transparent)' }}>\n {thumbMap[mode] ?? thumbMap.line}\n </svg>\n );\n}\n\n"],"mappings":"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"}
1
+ {"version":3,"file":"ShapePalette.js","names":[],"sources":["../../../../../src/components/pro/Flow/panels/ShapePalette.tsx"],"sourcesContent":["import React, { useCallback, useState } from 'react';\nimport { useFlowUI } from '../context/FlowUIContext';\nimport { useDraggablePanel } from '../hooks/useDraggablePanel';\nimport { useResizablePanel } from '../hooks/useResizablePanel';\nimport { PALETTE_ITEMS } from '../constants';\nimport type { FlowShapeType, FlowNodeData, FlowToolMode } from '../types';\nimport { SVG_ICON_CATEGORIES, getSvgIconsByCategory, getSvgIcon, buildSvgMarkup, type SvgIconCategory } from '../nodes/svgIcons';\nimport type { FlowMediaKind } from '../types';\nimport { makeStarterDataConfig } from '../nodes/dataUtils';\nimport { resolveThemeColor } from '../utils/themeColor';\n\nconst LINE_TOOL_ITEMS: Array<{ mode: FlowToolMode; label: string }> = [\n { mode: 'freehand', label: 'Freehand' },\n { mode: 'line', label: 'Line' },\n { mode: 'polyline', label: 'Polyline' },\n { mode: 'arrow', label: 'Arrow' },\n];\n\n/**\n * Standalone panel (legacy). Prefer using ShapePaletteContent inside a FlowPanelGroup.\n */\nexport default function ShapePalette() {\n const { showPalette } = useFlowUI();\n const { panelStyle, handleProps } = useDraggablePanel();\n const { panelWidth, resizeHandleProps } = useResizablePanel('right', 180);\n\n if (!showPalette) return null;\n\n return (\n <div className=\"flow-palette\" data-flow-panel style={{ ...panelStyle, width: panelWidth }}>\n <div className=\"flow-panel-resize-handle flow-panel-resize-handle--right\" {...resizeHandleProps} />\n <div\n className=\"flow-panel-drag-handle\"\n {...handleProps}\n style={{ fontSize: 11, fontWeight: 600, marginBottom: 6, color: 'color-mix(in oklch, var(--color-base-content) 50%, transparent)', textTransform: 'uppercase', letterSpacing: '0.05em', cursor: 'grab' }}\n >\n Shapes\n </div>\n <div className=\"flow-palette-content\">\n <ShapePaletteContent />\n </div>\n </div>\n );\n}\n\n/** Reusable content for embedding inside FlowPanelGroup tabs. */\nexport function ShapePaletteContent() {\n const { toolMode, setToolMode, setPendingPlacement, pendingPlacement } = useFlowUI();\n\n const handleAddShape = useCallback(\n (type: FlowShapeType, width: number, height: number, data: FlowNodeData) => {\n if (pendingPlacement?.type === type) {\n setPendingPlacement(null);\n } else {\n setPendingPlacement({ type, width, height, data: { ...data } });\n setToolMode('select');\n }\n },\n [setPendingPlacement, setToolMode, pendingPlacement],\n );\n\n return (\n <>\n <div className=\"flow-palette-grid\">\n {PALETTE_ITEMS.map((item) => (\n <div\n key={item.type}\n className={`flow-palette-item${pendingPlacement?.type === item.type ? ' flow-palette-item--active' : ''}`}\n onClick={() => handleAddShape(item.type, item.width, item.height, item.data)}\n >\n <PaletteThumbnail type={item.type} />\n <span className=\"flow-palette-item-label\">{item.data.label}</span>\n </div>\n ))}\n </div>\n\n <SectionHeader>Lines</SectionHeader>\n <div className=\"flow-palette-grid\">\n {LINE_TOOL_ITEMS.map((item) => (\n <div\n key={item.mode}\n className={`flow-palette-item${toolMode === item.mode ? ' flow-palette-item--active' : ''}`}\n onClick={() => { setPendingPlacement(null); setToolMode(toolMode === item.mode ? 'select' : item.mode); }}\n >\n <LineToolThumbnail mode={item.mode} />\n <span className=\"flow-palette-item-label\">{item.label}</span>\n </div>\n ))}\n </div>\n </>\n );\n}\n\n/** SVG icon stamps, grouped by category with a collapsible header per group. */\nexport function SvgStampContent() {\n const { setPendingPlacement, setToolMode, pendingPlacement } = useFlowUI();\n const [open, setOpen] = useState<Record<string, boolean>>({ lang: true });\n\n const stampIcon = useCallback((svgId: string, label: string) => {\n const activeId = pendingPlacement?.data.svgId;\n if (pendingPlacement?.type === 'shapeSvg' && activeId === svgId) {\n setPendingPlacement(null);\n return;\n }\n // Brand icons (e.g. language logos) keep their authentic brand color; generic\n // outline icons follow the theme font color so they stay visible on any theme.\n const iconDef = getSvgIcon(svgId);\n const iconColor = iconDef?.brandColor ?? 'theme:base-content';\n const data: FlowNodeData = {\n label,\n fill: 'transparent',\n stroke: 'theme:base-content',\n strokeWidth: 1.5,\n color: iconColor,\n labelColor: 'theme:base-content',\n fontSize: 12,\n svgId,\n iconBox: false,\n labelPlacement: 'bottom',\n borderStyle: 'none',\n };\n setPendingPlacement({ type: 'shapeSvg', width: 56, height: 56, data });\n setToolMode('select');\n }, [pendingPlacement, setPendingPlacement, setToolMode]);\n\n return (\n <>\n {SVG_ICON_CATEGORIES.map((cat) => {\n const icons = getSvgIconsByCategory(cat.id as SvgIconCategory);\n const isOpen = open[cat.id];\n return (\n <div key={cat.id}>\n <button\n type=\"button\"\n className=\"flow-palette-section-toggle\"\n onClick={() => setOpen((o) => ({ ...o, [cat.id]: !o[cat.id] }))}\n >\n <span style={{ transform: isOpen ? 'rotate(90deg)' : 'none', transition: 'transform .15s' }}>▸</span>\n {cat.label}\n </button>\n {isOpen && (\n <div className=\"flow-palette-grid\">\n {icons.map((ic) => (\n <div\n key={ic.id}\n className={`flow-palette-item${pendingPlacement?.type === 'shapeSvg' && pendingPlacement.data.svgId === ic.id ? ' flow-palette-item--active' : ''}`}\n onClick={() => stampIcon(ic.id, ic.label)}\n title={ic.label}\n >\n <SvgThumbnail id={ic.id} />\n <span className=\"flow-palette-item-label\">{ic.label}</span>\n </div>\n ))}\n </div>\n )}\n </div>\n );\n })}\n </>\n );\n}\n\n/** Renders an SVG icon as an <img> (data URL) so it displays in the correct\n * SVG namespace, unlike dangerouslySetInnerHTML on an <svg> element. Brand icons\n * use their authentic brand color; generic outline icons fall back to a neutral\n * gray so the thumbnail matches how the icon looks once placed. */\nfunction SvgThumbnail({ id }: { id: string }) {\n const def = getSvgIcon(id);\n // brandColor may be a `theme:*` token (icons that follow the theme); resolve\n // it to a concrete color for the rasterized data URL.\n const brand = resolveThemeColor(def?.brandColor, '') || '#475569';\n const markup = buildSvgMarkup(id, brand);\n if (!markup) return null;\n const url = `data:image/svg+xml;utf8,${encodeURIComponent(markup)}`;\n return <img src={url} width={20} height={16} alt=\"\" style={{ objectFit: 'contain' }} />;\n}\n\n/** Multimedia stamps: rich DOM-rendered nodes (markdown/html/mermaid/math/image/3D/AI). */\nconst MEDIA_ITEMS: Array<{\n kind: FlowMediaKind;\n label: string;\n width: number;\n height: number;\n content: string;\n icon: React.ReactNode;\n}> = [\n {\n kind: 'markdown', label: 'Markdown', width: 260, height: 180,\n content: '# 标题\\n\\n- 支持 **GFM**\\n- 支持 `代码`\\n\\n> 引用文本',\n icon: <MediaGlyph text={'M↓'} />,\n },\n {\n kind: 'html', label: 'HTML', width: 260, height: 180,\n content: '<div style=\"font-family:sans-serif;padding:12px\">\\n <h3>Hello</h3>\\n <p>可编辑的 HTML 片段</p>\\n</div>',\n icon: <MediaGlyph text={'</>'} />,\n },\n {\n kind: 'mermaid', label: 'Mermaid', width: 280, height: 200,\n content: 'graph TD\\n A[开始] --> B{判断}\\n B -->|是| C[处理]\\n B -->|否| D[结束]',\n icon: <MediaGlyph text={'⎇'} />,\n },\n {\n kind: 'math', label: 'Math', width: 240, height: 120,\n content: 'E = mc^2',\n icon: <MediaGlyph text={'√x'} />,\n },\n {\n kind: 'image', label: 'Image', width: 320, height: 220,\n content: '',\n icon: <MediaGlyph text={'IMG'} />,\n },\n {\n kind: 'model3d', label: '3D', width: 360, height: 280,\n content: '',\n icon: <MediaGlyph text={'3D'} />,\n },\n {\n kind: 'ai', label: 'AI', width: 300, height: 340,\n content: '',\n icon: <MediaGlyph text={'AI'} />,\n },\n {\n kind: 'data', label: 'Data', width: 420, height: 300,\n content: '',\n icon: <MediaGlyph text={'⊞'} />,\n },\n];\n\nfunction MediaGlyph({ text }: { text: string }) {\n return (\n <div\n style={{\n width: 20, height: 16, display: 'flex', alignItems: 'center', justifyContent: 'center',\n fontSize: 9, fontWeight: 700, color: 'color-mix(in oklch, var(--color-base-content) 60%, transparent)',\n border: '1px solid color-mix(in oklch, var(--color-base-content) 20%, transparent)', borderRadius: 3, flexShrink: 0,\n }}\n >\n {text}\n </div>\n );\n}\n\nexport function MediaStampContent() {\n const { setPendingPlacement, setToolMode, pendingPlacement } = useFlowUI();\n\n const stampMedia = useCallback((item: (typeof MEDIA_ITEMS)[number]) => {\n if (pendingPlacement?.type === 'mediaNode' && pendingPlacement.data.mediaKind === item.kind) {\n setPendingPlacement(null);\n return;\n }\n const data: FlowNodeData = {\n label: item.label,\n fill: 'theme:base-100',\n stroke: 'theme:base-content',\n strokeWidth: 1.5,\n color: 'theme:base-content',\n fontSize: 13,\n borderStyle: 'solid',\n mediaKind: item.kind,\n mediaContent: item.content,\n ...(item.kind === 'ai'\n ? { aiConfig: { gateway: '', protocol: 'openai' as const, model: '' } }\n : item.kind === 'model3d'\n ? { modelFormat: 'stl' as const }\n : item.kind === 'data'\n ? { dataConfig: makeStarterDataConfig() }\n : {}),\n };\n setPendingPlacement({ type: 'mediaNode', width: item.width, height: item.height, data });\n setToolMode('select');\n }, [pendingPlacement, setPendingPlacement, setToolMode]);\n\n return (\n <div className=\"flow-palette-grid\">\n {MEDIA_ITEMS.map((item) => (\n <div\n key={item.kind}\n className={`flow-palette-item${pendingPlacement?.type === 'mediaNode' && pendingPlacement.data.mediaKind === item.kind ? ' flow-palette-item--active' : ''}`}\n onClick={() => stampMedia(item)}\n title={item.label}\n >\n {item.icon}\n <span className=\"flow-palette-item-label\">{item.label}</span>\n </div>\n ))}\n </div>\n );\n}\n\nfunction SectionHeader({ children }: { children: React.ReactNode }) {\n return (\n <div style={{ fontSize: 11, fontWeight: 600, margin: '10px 0 6px', color: 'color-mix(in oklch, var(--color-base-content) 50%, transparent)', textTransform: 'uppercase', letterSpacing: '0.05em' }}>\n {children}\n </div>\n );\n}\n\nexport function PaletteThumbnail({ type }: { type: FlowShapeType }) {\n const w = 36, h = 28;\n const s = 'currentColor';\n const sw = 1.5;\n\n const shapeMap: Record<string, React.ReactNode> = {\n shapeRect: (\n <rect x=\"3\" y=\"4\" width={w - 6} height={h - 8} rx=\"1\" fill=\"none\" stroke={s} strokeWidth={sw} />\n ),\n shapeRoundRect: (\n <rect x=\"3\" y=\"4\" width={w - 6} height={h - 8} rx=\"5\" fill=\"none\" stroke={s} strokeWidth={sw} />\n ),\n shapeEllipse: (\n <ellipse cx={w / 2} cy={h / 2} rx={w / 2 - 4} ry={h / 2 - 4} fill=\"none\" stroke={s} strokeWidth={sw} />\n ),\n shapeDiamond: (\n <polygon points={`${w / 2},3 ${w - 4},${h / 2} ${w / 2},${h - 3} 4,${h / 2}`} fill=\"none\" stroke={s} strokeWidth={sw} />\n ),\n shapeDocument: (\n <path d={`M4,4 L${w - 4},4 L${w - 4},${h - 8} C${w * 0.7},${h - 12} ${w * 0.3},${h - 2} 4,${h - 8} Z`} fill=\"none\" stroke={s} strokeWidth={sw} />\n ),\n shapeParallelogram: (() => {\n const skew = (w - 8) * 0.2;\n return <polygon points={`${4 + skew},4 ${w - 4},4 ${w - 4 - skew},${h - 4} 4,${h - 4}`} fill=\"none\" stroke={s} strokeWidth={sw} />;\n })(),\n shapeTriangle: (\n <polygon points={`${w / 2},4 ${w - 4},${h - 4} 4,${h - 4}`} fill=\"none\" stroke={s} strokeWidth={sw} />\n ),\n shapeTrapezoid: (() => {\n const inset = (w - 8) * 0.15;\n return <polygon points={`${4 + inset},4 ${w - 4 - inset},4 ${w - 4},${h - 4} 4,${h - 4}`} fill=\"none\" stroke={s} strokeWidth={sw} />;\n })(),\n shapePentagon: (() => {\n const cx = w / 2, cy = h / 2, r = Math.min(cx, cy) - 4;\n const pts = Array.from({ length: 5 }, (_, i) => {\n const a = (Math.PI * 2 * i) / 5 - Math.PI / 2;\n return `${cx + r * Math.cos(a)},${cy + r * Math.sin(a)}`;\n }).join(' ');\n return <polygon points={pts} fill=\"none\" stroke={s} strokeWidth={sw} />;\n })(),\n shapeHexagon: (() => {\n const cx = w / 2, cy = h / 2, rx = cx - 4, ry = cy - 4;\n const pts = Array.from({ length: 6 }, (_, i) => {\n const a = (Math.PI * 2 * i) / 6 - Math.PI / 6;\n return `${cx + rx * Math.cos(a)},${cy + ry * Math.sin(a)}`;\n }).join(' ');\n return <polygon points={pts} fill=\"none\" stroke={s} strokeWidth={sw} />;\n })(),\n shapeStar: (() => {\n const cx = w / 2, cy = h / 2, outer = Math.min(cx, cy) - 3, inner = outer * 0.4;\n const pts = Array.from({ length: 10 }, (_, i) => {\n const a = (Math.PI * i) / 5 - Math.PI / 2;\n const r = i % 2 === 0 ? outer : inner;\n return `${cx + r * Math.cos(a)},${cy + r * Math.sin(a)}`;\n }).join(' ');\n return <polygon points={pts} fill=\"none\" stroke={s} strokeWidth={sw} />;\n })(),\n shapeHexagram: (() => {\n const cx = w / 2, cy = h / 2, outer = Math.min(cx, cy) - 3, inner = outer * 0.55;\n const pts = Array.from({ length: 12 }, (_, i) => {\n const a = (Math.PI * i) / 6 - Math.PI / 2;\n const r = i % 2 === 0 ? outer : inner;\n return `${cx + r * Math.cos(a)},${cy + r * Math.sin(a)}`;\n }).join(' ');\n return <polygon points={pts} fill=\"none\" stroke={s} strokeWidth={sw} />;\n })(),\n shapeRightTriangle: (\n <polygon points={`4,4 ${w - 4},${h - 4} 4,${h - 4}`} fill=\"none\" stroke={s} strokeWidth={sw} />\n ),\n shapeCorner: (() => {\n const hf = Math.min(w - 8, h - 8) * 0.4;\n return <polygon points={`4,4 ${w - 4},4 ${w - 4},${4 + hf} ${4 + hf},${4 + hf} ${4 + hf},${h - 4} 4,${h - 4}`} fill=\"none\" stroke={s} strokeWidth={sw} />;\n })(),\n textLabel: (\n <text x={w / 2} y={h / 2 + 1} textAnchor=\"middle\" dominantBaseline=\"middle\" fontSize=\"10\" fill=\"currentColor\">Aa</text>\n ),\n animAnchor: (\n <>\n <rect x=\"3\" y=\"4\" width={w - 6} height={h - 8} rx=\"2\" fill=\"none\" stroke={s} strokeWidth={sw} strokeDasharray=\"4 3\" />\n <circle cx=\"8\" cy=\"9\" r=\"4\" fill=\"none\" stroke={s} strokeWidth={sw} />\n <text x=\"8\" y=\"10.5\" textAnchor=\"middle\" dominantBaseline=\"middle\" fontSize=\"7\" fill=\"currentColor\">1</text>\n </>\n ),\n geometryGroup: (\n <rect x=\"3\" y=\"4\" width={w - 6} height={h - 8} rx=\"3\" fill=\"none\" stroke={s} strokeWidth={sw} strokeDasharray=\"6 3\" />\n ),\n };\n\n return (\n <svg width={w} height={h} viewBox={`0 0 ${w} ${h}`} style={{ color: 'color-mix(in oklch, var(--color-base-content) 55%, transparent)' }}>\n {shapeMap[type] ?? shapeMap.shapeRect}\n </svg>\n );\n}\n\nfunction LineToolThumbnail({ mode }: { mode: FlowToolMode }) {\n const w = 36, h = 28;\n const s = 'currentColor';\n const sw = 1.5;\n\n const thumbMap: Record<string, React.ReactNode> = {\n connect: (\n <>\n <line x1=\"6\" y1={h - 6} x2={w - 6} y2=\"6\" stroke={s} strokeWidth={sw} />\n <polygon points={`${w - 6},6 ${w - 11},4 ${w - 9},9`} fill={s} />\n </>\n ),\n freehand: (\n <path d={`M6,${h - 8} C10,${h - 14} 14,10 ${w / 2},${h / 2} S${w - 10},6 ${w - 6},8`} fill=\"none\" stroke={s} strokeWidth={sw} strokeLinecap=\"round\" />\n ),\n line: (\n <line x1=\"6\" y1={h - 6} x2={w - 6} y2=\"6\" stroke={s} strokeWidth={sw} />\n ),\n polyline: (\n <polyline points={`6,${h - 6} 14,8 ${w / 2 + 2},${h - 10} ${w - 6},6`} fill=\"none\" stroke={s} strokeWidth={sw} strokeLinejoin=\"round\" />\n ),\n arrow: (\n <>\n <line x1=\"6\" y1={h - 6} x2={w - 6} y2=\"6\" stroke={s} strokeWidth={sw} />\n <polygon points={`${w - 6},6 ${w - 12},6 ${w - 8},12`} fill={s} />\n </>\n ),\n };\n\n return (\n <svg width={w} height={h} viewBox={`0 0 ${w} ${h}`} style={{ color: 'color-mix(in oklch, var(--color-base-content) 55%, transparent)' }}>\n {thumbMap[mode] ?? thumbMap.line}\n </svg>\n );\n}\n\n"],"mappings":"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"}
@@ -18,6 +18,7 @@ export declare const IconShapes: React.FC;
18
18
  export declare const IconInspector: React.FC;
19
19
  export declare const IconOutline: React.FC;
20
20
  export declare const IconJson: React.FC;
21
+ export declare const IconAI: React.FC;
21
22
  export declare const IconGrid: React.FC;
22
23
  export declare const IconMiniMap: React.FC;
23
24
  export declare const IconImport: React.FC;