dishui 0.0.46 → 0.0.48

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 (115) hide show
  1. package/dist/chart.js +35 -33
  2. package/dist/components/Chart/index.d.ts +1 -1
  3. package/dist/components/pro/CodeEditor/editors/MarkdownEditor.js +1 -2
  4. package/dist/components/pro/CodeEditor/editors/MarkdownEditor.js.map +1 -1
  5. package/dist/components/pro/CodeEditor/themes.js +0 -25
  6. package/dist/components/pro/CodeEditor/themes.js.map +1 -1
  7. package/dist/components/pro/CodeEditor/types.d.ts +1 -1
  8. package/dist/components/pro/DataTable/pivotExtension.d.ts +6 -0
  9. package/dist/components/pro/DataTable/pivotExtension.js +31 -30
  10. package/dist/components/pro/DataTable/pivotExtension.js.map +1 -1
  11. package/dist/components/pro/Flow/Flow.js +500 -459
  12. package/dist/components/pro/Flow/Flow.js.map +1 -1
  13. package/dist/components/pro/Flow/FlowCanvas.js +526 -524
  14. package/dist/components/pro/Flow/FlowCanvas.js.map +1 -1
  15. package/dist/components/pro/Flow/canvas/GridRenderer.d.ts +3 -0
  16. package/dist/components/pro/Flow/canvas/GridRenderer.js +28 -23
  17. package/dist/components/pro/Flow/canvas/GridRenderer.js.map +1 -1
  18. package/dist/components/pro/Flow/canvas/MiniMapRenderer.js +18 -17
  19. package/dist/components/pro/Flow/canvas/MiniMapRenderer.js.map +1 -1
  20. package/dist/components/pro/Flow/canvas/PixiApp.d.ts +24 -0
  21. package/dist/components/pro/Flow/canvas/PixiApp.js +60 -15
  22. package/dist/components/pro/Flow/canvas/PixiApp.js.map +1 -1
  23. package/dist/components/pro/Flow/constants.js +7 -7
  24. package/dist/components/pro/Flow/constants.js.map +1 -1
  25. package/dist/components/pro/Flow/context/FlowAIContext.d.ts +15 -0
  26. package/dist/components/pro/Flow/context/FlowAIContext.js +32 -0
  27. package/dist/components/pro/Flow/context/FlowAIContext.js.map +1 -0
  28. package/dist/components/pro/Flow/context/FlowUIContext.d.ts +4 -1
  29. package/dist/components/pro/Flow/context/FlowUIContext.js +58 -55
  30. package/dist/components/pro/Flow/context/FlowUIContext.js.map +1 -1
  31. package/dist/components/pro/Flow/edges/EdgeRenderer.js +22 -21
  32. package/dist/components/pro/Flow/edges/EdgeRenderer.js.map +1 -1
  33. package/dist/components/pro/Flow/hooks/useFlowImportExport.d.ts +6 -0
  34. package/dist/components/pro/Flow/hooks/useFlowImportExport.js +146 -89
  35. package/dist/components/pro/Flow/hooks/useFlowImportExport.js.map +1 -1
  36. package/dist/components/pro/Flow/hooks/useLayoutActions.d.ts +2 -0
  37. package/dist/components/pro/Flow/hooks/useLayoutActions.js +94 -65
  38. package/dist/components/pro/Flow/hooks/useLayoutActions.js.map +1 -1
  39. package/dist/components/pro/Flow/hooks/usePdfExport.d.ts +10 -0
  40. package/dist/components/pro/Flow/hooks/usePdfExport.js +60 -0
  41. package/dist/components/pro/Flow/hooks/usePdfExport.js.map +1 -0
  42. package/dist/components/pro/Flow/hooks/usePixiApp.d.ts +6 -1
  43. package/dist/components/pro/Flow/hooks/usePixiApp.js +49 -30
  44. package/dist/components/pro/Flow/hooks/usePixiApp.js.map +1 -1
  45. package/dist/components/pro/Flow/index.d.ts +5 -2
  46. package/dist/components/pro/Flow/lines/FreehandTool.js +21 -20
  47. package/dist/components/pro/Flow/lines/FreehandTool.js.map +1 -1
  48. package/dist/components/pro/Flow/lines/GeometricLineTool.js +22 -18
  49. package/dist/components/pro/Flow/lines/GeometricLineTool.js.map +1 -1
  50. package/dist/components/pro/Flow/lines/LineRenderer.js +19 -18
  51. package/dist/components/pro/Flow/lines/LineRenderer.js.map +1 -1
  52. package/dist/components/pro/Flow/nodes/DataNodeView.d.ts +7 -0
  53. package/dist/components/pro/Flow/nodes/DataNodeView.js +217 -0
  54. package/dist/components/pro/Flow/nodes/DataNodeView.js.map +1 -0
  55. package/dist/components/pro/Flow/nodes/MediaContent.js +149 -120
  56. package/dist/components/pro/Flow/nodes/MediaContent.js.map +1 -1
  57. package/dist/components/pro/Flow/nodes/MediaOverlay.js +22 -17
  58. package/dist/components/pro/Flow/nodes/MediaOverlay.js.map +1 -1
  59. package/dist/components/pro/Flow/nodes/NodeRenderer.js +77 -76
  60. package/dist/components/pro/Flow/nodes/NodeRenderer.js.map +1 -1
  61. package/dist/components/pro/Flow/nodes/aiClient.d.ts +22 -0
  62. package/dist/components/pro/Flow/nodes/aiClient.js +107 -54
  63. package/dist/components/pro/Flow/nodes/aiClient.js.map +1 -1
  64. package/dist/components/pro/Flow/nodes/dataUtils.d.ts +52 -0
  65. package/dist/components/pro/Flow/nodes/dataUtils.js +270 -0
  66. package/dist/components/pro/Flow/nodes/dataUtils.js.map +1 -0
  67. package/dist/components/pro/Flow/nodes/svgIcons.js +59 -27
  68. package/dist/components/pro/Flow/nodes/svgIcons.js.map +1 -1
  69. package/dist/components/pro/Flow/panels/AIPanel.d.ts +2 -0
  70. package/dist/components/pro/Flow/panels/AIPanel.js +498 -0
  71. package/dist/components/pro/Flow/panels/AIPanel.js.map +1 -0
  72. package/dist/components/pro/Flow/panels/DataInspectorSection.d.ts +11 -0
  73. package/dist/components/pro/Flow/panels/DataInspectorSection.js +436 -0
  74. package/dist/components/pro/Flow/panels/DataInspectorSection.js.map +1 -0
  75. package/dist/components/pro/Flow/panels/ExpandableTextarea.d.ts +16 -0
  76. package/dist/components/pro/Flow/panels/ExpandableTextarea.js +65 -0
  77. package/dist/components/pro/Flow/panels/ExpandableTextarea.js.map +1 -0
  78. package/dist/components/pro/Flow/panels/FlowPanelGroup.js +51 -39
  79. package/dist/components/pro/Flow/panels/FlowPanelGroup.js.map +1 -1
  80. package/dist/components/pro/Flow/panels/FlowToolbar.d.ts +5 -1
  81. package/dist/components/pro/Flow/panels/FlowToolbar.js +310 -233
  82. package/dist/components/pro/Flow/panels/FlowToolbar.js.map +1 -1
  83. package/dist/components/pro/Flow/panels/InspectorPanel.js +358 -363
  84. package/dist/components/pro/Flow/panels/InspectorPanel.js.map +1 -1
  85. package/dist/components/pro/Flow/panels/OutlinePanel.js +63 -62
  86. package/dist/components/pro/Flow/panels/OutlinePanel.js.map +1 -1
  87. package/dist/components/pro/Flow/panels/ProjectTitle.d.ts +8 -0
  88. package/dist/components/pro/Flow/panels/ProjectTitle.js +49 -0
  89. package/dist/components/pro/Flow/panels/ProjectTitle.js.map +1 -0
  90. package/dist/components/pro/Flow/panels/ShapePalette.js +128 -115
  91. package/dist/components/pro/Flow/panels/ShapePalette.js.map +1 -1
  92. package/dist/components/pro/Flow/panels/toolbarIcons.d.ts +13 -0
  93. package/dist/components/pro/Flow/panels/toolbarIcons.js +241 -87
  94. package/dist/components/pro/Flow/panels/toolbarIcons.js.map +1 -1
  95. package/dist/components/pro/Flow/types.d.ts +77 -1
  96. package/dist/components/pro/Flow/types.js.map +1 -1
  97. package/dist/components/pro/Flow/utils/pdfExport.d.ts +20 -0
  98. package/dist/components/pro/Flow/utils/pdfExport.js +95 -0
  99. package/dist/components/pro/Flow/utils/pdfExport.js.map +1 -0
  100. package/dist/components/pro/Flow/utils/themeColor.d.ts +86 -0
  101. package/dist/components/pro/Flow/utils/themeColor.js +190 -0
  102. package/dist/components/pro/Flow/utils/themeColor.js.map +1 -0
  103. package/dist/contexts/AppContext.d.ts +1 -1
  104. package/dist/contexts/AppContext.js +28 -29
  105. package/dist/contexts/AppContext.js.map +1 -1
  106. package/dist/dishui.css +1 -1
  107. package/dist/favicon.svg +10 -0
  108. package/dist/flow.js +59 -51
  109. package/dist/index-nostyled.d.ts +1 -1
  110. package/dist/index.d.ts +1 -1
  111. package/dist/styles/themeStyles.js +6 -11
  112. package/dist/styles/themeStyles.js.map +1 -1
  113. package/dist/utils/themes.js +3 -23
  114. package/dist/utils/themes.js.map +1 -1
  115. package/package.json +17 -18
@@ -1,38 +1,41 @@
1
- import W from "../../../Button/index.js";
2
- import { useDraggablePanel as C } from "../hooks/useDraggablePanel.js";
3
- import { useResizablePanel as P } from "../hooks/useResizablePanel.js";
4
- import { useCallback as x, useEffect as z, useRef as R, useState as $ } from "react";
5
- import { jsx as a, jsxs as o } from "react/jsx-runtime";
6
- function B({ tabs: l, defaultTab: m, className: u, resizeEdge: r, defaultWidth: w, style: v, onDetach: s, onAttach: d, isDetached: i }) {
7
- const [c, f] = $(m ?? l[0]?.id), { panelStyle: N, handleProps: p } = C(), { panelWidth: b, resizeHandleProps: g } = P(r, w), h = R(null), k = x((e) => {
8
- const t = h.current;
9
- t && (t.scrollWidth <= t.clientWidth || e.deltaY !== 0 && (t.scrollLeft += e.deltaY, e.preventDefault()));
10
- }, []);
11
- if (z(() => {
1
+ import P from "../../../Button/index.js";
2
+ import { useDraggablePanel as W } from "../hooks/useDraggablePanel.js";
3
+ import { useResizablePanel as x } from "../hooks/useResizablePanel.js";
4
+ import { useEffect as u, useRef as z, useState as R } from "react";
5
+ import { jsx as a, jsxs as i } from "react/jsx-runtime";
6
+ function T({ tabs: l, defaultTab: w, className: v, resizeEdge: s, defaultWidth: N, style: b, onDetach: o, onAttach: d, isDetached: t }) {
7
+ const [c, f] = R(w ?? l[0]?.id), { panelStyle: g, handleProps: p } = W(), { panelWidth: k, resizeHandleProps: C } = x(s, N), h = z(null);
8
+ if (u(() => {
9
+ const e = h.current;
10
+ if (!e) return;
11
+ const m = (r) => {
12
+ e.scrollWidth <= e.clientWidth || r.deltaY !== 0 && (e.scrollLeft += r.deltaY, r.preventDefault());
13
+ };
14
+ return e.addEventListener("wheel", m, { passive: !1 }), () => e.removeEventListener("wheel", m);
15
+ }, [l.length > 1]), u(() => {
12
16
  l.length > 0 && !l.find((e) => e.id === c) && f(l[0].id);
13
17
  }, [l, c]), l.length === 0) return null;
14
18
  const n = l.find((e) => e.id === c) ?? l[0];
15
- return /* @__PURE__ */ o("div", {
16
- className: `${u ?? "flow-palette"}${i ? " flow-panel--detached" : " flow-panel--docked"}`,
19
+ return /* @__PURE__ */ i("div", {
20
+ className: `${v ?? "flow-palette"}${t ? " flow-panel--detached" : " flow-panel--docked"}`,
17
21
  "data-flow-panel": !0,
18
22
  style: {
19
- ...v,
20
- ...i ? N : void 0,
21
- width: b
23
+ ...b,
24
+ ...t ? g : void 0,
25
+ width: k
22
26
  },
23
27
  children: [
24
28
  /* @__PURE__ */ a("div", {
25
- className: `flow-panel-resize-handle flow-panel-resize-handle--${r}`,
26
- ...g
29
+ className: `flow-panel-resize-handle flow-panel-resize-handle--${s}`,
30
+ ...C
27
31
  }),
28
- l.length > 1 ? /* @__PURE__ */ o("div", {
32
+ l.length > 1 ? /* @__PURE__ */ i("div", {
29
33
  className: "flow-panel-tabs-row",
30
- ...i ? p : {},
34
+ ...t ? p : {},
31
35
  children: [/* @__PURE__ */ a("div", {
32
36
  className: "flow-panel-tabs",
33
37
  ref: h,
34
- onWheel: k,
35
- children: l.map((e) => /* @__PURE__ */ o(W, {
38
+ children: l.map((e) => /* @__PURE__ */ i(P, {
36
39
  variant: "ghost",
37
40
  size: "xs",
38
41
  className: `flow-panel-tab${e.id === n.id ? " flow-panel-tab--active" : ""}`,
@@ -42,27 +45,36 @@ function B({ tabs: l, defaultTab: m, className: u, resizeEdge: r, defaultWidth:
42
45
  children: e.icon
43
46
  }), e.label]
44
47
  }, e.id))
45
- }), s && /* @__PURE__ */ a("button", {
48
+ }), o && /* @__PURE__ */ a("button", {
46
49
  className: "flow-panel-detach-btn",
47
50
  title: "Detach tab",
48
- onClick: () => s(n.id),
51
+ onClick: () => o(n.id),
49
52
  children: "⬈"
50
53
  })]
51
- }) : /* @__PURE__ */ o("div", {
54
+ }) : /* @__PURE__ */ i("div", {
52
55
  className: "flow-panel-header-single",
53
- ...i ? p : {},
54
- children: [/* @__PURE__ */ o("span", {
55
- className: "flow-panel-header-label",
56
- children: [n.icon && /* @__PURE__ */ a("span", {
57
- className: "flow-panel-tab-icon",
58
- children: n.icon
59
- }), n.label]
60
- }), i && d && /* @__PURE__ */ a("button", {
61
- className: "flow-panel-detach-btn",
62
- title: "Attach back",
63
- onClick: () => d(n.id),
64
- children: ""
65
- })]
56
+ ...t ? p : {},
57
+ children: [
58
+ /* @__PURE__ */ i("span", {
59
+ className: "flow-panel-header-label",
60
+ children: [n.icon && /* @__PURE__ */ a("span", {
61
+ className: "flow-panel-tab-icon",
62
+ children: n.icon
63
+ }), n.label]
64
+ }),
65
+ t && d && /* @__PURE__ */ a("button", {
66
+ className: "flow-panel-detach-btn",
67
+ title: "Attach back",
68
+ onClick: () => d(n.id),
69
+ children: "⮋"
70
+ }),
71
+ !t && o && /* @__PURE__ */ a("button", {
72
+ className: "flow-panel-detach-btn",
73
+ title: "Detach tab",
74
+ onClick: () => o(n.id),
75
+ children: "⮈"
76
+ })
77
+ ]
66
78
  }),
67
79
  /* @__PURE__ */ a("div", {
68
80
  className: "flow-palette-content",
@@ -72,7 +84,7 @@ function B({ tabs: l, defaultTab: m, className: u, resizeEdge: r, defaultWidth:
72
84
  });
73
85
  }
74
86
  export {
75
- B as default
87
+ T as default
76
88
  };
77
89
 
78
90
  //# sourceMappingURL=FlowPanelGroup.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FlowPanelGroup.js","names":[],"sources":["../../../../../src/components/pro/Flow/panels/FlowPanelGroup.tsx"],"sourcesContent":["import React, { useState, useCallback, useEffect, useRef } from 'react';\nimport Button from '../../../Button';\nimport { useDraggablePanel } from '../hooks/useDraggablePanel';\nimport { useResizablePanel, type ResizeEdge } from '../hooks/useResizablePanel';\n\nexport interface PanelTab {\n id: string;\n label: string;\n icon?: React.ReactNode;\n content: React.ReactNode;\n}\n\ninterface FlowPanelGroupProps {\n tabs: PanelTab[];\n defaultTab?: string;\n className?: string;\n resizeEdge: ResizeEdge;\n defaultWidth: number;\n style?: React.CSSProperties;\n onDetach?: (tabId: string) => void;\n onAttach?: (tabId: string) => void;\n /** If true, show attach button instead of detach */\n isDetached?: boolean;\n}\n\nexport default function FlowPanelGroup({\n tabs,\n defaultTab,\n className,\n resizeEdge,\n defaultWidth,\n style,\n onDetach,\n onAttach,\n isDetached,\n}: FlowPanelGroupProps) {\n const [activeTab, setActiveTab] = useState(defaultTab ?? tabs[0]?.id);\n const { panelStyle, handleProps } = useDraggablePanel();\n const { panelWidth, resizeHandleProps } = useResizablePanel(resizeEdge, defaultWidth);\n const tabsScrollRef = useRef<HTMLDivElement>(null);\n\n // Translate vertical wheel scrolling into horizontal tab scrolling, so the\n // overflowing tabs are reachable with a normal mouse wheel / trackpad.\n const onTabsWheel = useCallback((e: React.WheelEvent<HTMLDivElement>) => {\n const el = tabsScrollRef.current;\n if (!el) return;\n if (el.scrollWidth <= el.clientWidth) return;\n if (e.deltaY !== 0) {\n el.scrollLeft += e.deltaY;\n e.preventDefault();\n }\n }, []);\n\n useEffect(() => {\n if (tabs.length > 0 && !tabs.find(t => t.id === activeTab)) {\n setActiveTab(tabs[0].id);\n }\n }, [tabs, activeTab]);\n\n if (tabs.length === 0) return null;\n\n const current = tabs.find(t => t.id === activeTab) ?? tabs[0];\n\n return (\n <div\n className={`${className ?? 'flow-palette'}${isDetached ? ' flow-panel--detached' : ' flow-panel--docked'}`}\n data-flow-panel\n style={{ ...style, ...(isDetached ? panelStyle : undefined), width: panelWidth }}\n >\n <div\n className={`flow-panel-resize-handle flow-panel-resize-handle--${resizeEdge}`}\n {...resizeHandleProps}\n />\n {tabs.length > 1 ? (\n <div className=\"flow-panel-tabs-row\" {...(isDetached ? handleProps : {})}>\n <div className=\"flow-panel-tabs\" ref={tabsScrollRef} onWheel={onTabsWheel}>\n {tabs.map(tab => (\n <Button\n key={tab.id}\n variant=\"ghost\"\n size=\"xs\"\n className={`flow-panel-tab${tab.id === current.id ? ' flow-panel-tab--active' : ''}`}\n onClick={() => setActiveTab(tab.id)}\n >\n {tab.icon && <span className=\"flow-panel-tab-icon\">{tab.icon}</span>}\n {tab.label}\n </Button>\n ))}\n </div>\n {onDetach && (\n <button\n className=\"flow-panel-detach-btn\"\n title=\"Detach tab\"\n onClick={() => onDetach(current.id)}\n >⬈</button>\n )}\n </div>\n ) : (\n <div className=\"flow-panel-header-single\" {...(isDetached ? handleProps : {})}>\n <span className=\"flow-panel-header-label\">\n {current.icon && <span className=\"flow-panel-tab-icon\">{current.icon}</span>}\n {current.label}\n </span>\n {isDetached && onAttach && (\n <button\n className=\"flow-panel-detach-btn\"\n title=\"Attach back\"\n onClick={() => onAttach(current.id)}\n >⬋</button>\n )}\n </div>\n )}\n <div className=\"flow-palette-content\">\n {current.content}\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"FlowPanelGroup.js","names":[],"sources":["../../../../../src/components/pro/Flow/panels/FlowPanelGroup.tsx"],"sourcesContent":["import React, { useState, useEffect, useRef } from 'react';\nimport Button from '../../../Button';\nimport { useDraggablePanel } from '../hooks/useDraggablePanel';\nimport { useResizablePanel, type ResizeEdge } from '../hooks/useResizablePanel';\n\nexport interface PanelTab {\n id: string;\n label: string;\n icon?: React.ReactNode;\n content: React.ReactNode;\n}\n\ninterface FlowPanelGroupProps {\n tabs: PanelTab[];\n defaultTab?: string;\n className?: string;\n resizeEdge: ResizeEdge;\n defaultWidth: number;\n style?: React.CSSProperties;\n onDetach?: (tabId: string) => void;\n onAttach?: (tabId: string) => void;\n /** If true, show attach button instead of detach */\n isDetached?: boolean;\n}\n\nexport default function FlowPanelGroup({\n tabs,\n defaultTab,\n className,\n resizeEdge,\n defaultWidth,\n style,\n onDetach,\n onAttach,\n isDetached,\n}: FlowPanelGroupProps) {\n const [activeTab, setActiveTab] = useState(defaultTab ?? tabs[0]?.id);\n const { panelStyle, handleProps } = useDraggablePanel();\n const { panelWidth, resizeHandleProps } = useResizablePanel(resizeEdge, defaultWidth);\n const tabsScrollRef = useRef<HTMLDivElement>(null);\n\n const showTabs = tabs.length > 1;\n\n // Translate vertical wheel scrolling into horizontal tab scrolling, so the\n // overflowing tabs are reachable with a normal mouse wheel / trackpad.\n // Attached natively with { passive: false }: React's delegated onWheel is\n // passive at the root, so preventDefault() there is ignored and logs\n // \"Unable to preventDefault inside passive event listener invocation\".\n useEffect(() => {\n const el = tabsScrollRef.current;\n if (!el) return;\n const onWheel = (e: WheelEvent) => {\n if (el.scrollWidth <= el.clientWidth) return;\n if (e.deltaY !== 0) {\n el.scrollLeft += e.deltaY;\n e.preventDefault();\n }\n };\n el.addEventListener('wheel', onWheel, { passive: false });\n return () => el.removeEventListener('wheel', onWheel);\n }, [showTabs]);\n\n useEffect(() => {\n if (tabs.length > 0 && !tabs.find(t => t.id === activeTab)) {\n setActiveTab(tabs[0].id);\n }\n }, [tabs, activeTab]);\n\n if (tabs.length === 0) return null;\n\n const current = tabs.find(t => t.id === activeTab) ?? tabs[0];\n\n return (\n <div\n className={`${className ?? 'flow-palette'}${isDetached ? ' flow-panel--detached' : ' flow-panel--docked'}`}\n data-flow-panel\n style={{ ...style, ...(isDetached ? panelStyle : undefined), width: panelWidth }}\n >\n <div\n className={`flow-panel-resize-handle flow-panel-resize-handle--${resizeEdge}`}\n {...resizeHandleProps}\n />\n {tabs.length > 1 ? (\n <div className=\"flow-panel-tabs-row\" {...(isDetached ? handleProps : {})}>\n <div className=\"flow-panel-tabs\" ref={tabsScrollRef}>\n {tabs.map(tab => (\n <Button\n key={tab.id}\n variant=\"ghost\"\n size=\"xs\"\n className={`flow-panel-tab${tab.id === current.id ? ' flow-panel-tab--active' : ''}`}\n onClick={() => setActiveTab(tab.id)}\n >\n {tab.icon && <span className=\"flow-panel-tab-icon\">{tab.icon}</span>}\n {tab.label}\n </Button>\n ))}\n </div>\n {onDetach && (\n <button\n className=\"flow-panel-detach-btn\"\n title=\"Detach tab\"\n onClick={() => onDetach(current.id)}\n >⬈</button>\n )}\n </div>\n ) : (\n <div className=\"flow-panel-header-single\" {...(isDetached ? handleProps : {})}>\n <span className=\"flow-panel-header-label\">\n {current.icon && <span className=\"flow-panel-tab-icon\">{current.icon}</span>}\n {current.label}\n </span>\n {isDetached && onAttach && (\n <button\n className=\"flow-panel-detach-btn\"\n title=\"Attach back\"\n onClick={() => onAttach(current.id)}\n >⮋</button>\n )}\n {!isDetached && onDetach && (\n <button\n className=\"flow-panel-detach-btn\"\n title=\"Detach tab\"\n onClick={() => onDetach(current.id)}\n >⮈</button>\n )}\n </div>\n )}\n <div className=\"flow-palette-content\">\n {current.content}\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1,4 +1,6 @@
1
1
  import React from 'react';
2
+ /** Compact zoom / view controls floated over the bottom-left of the canvas. */
3
+ export declare function FlowZoomControls(): React.JSX.Element;
2
4
  export interface FlowToolbarProps {
3
5
  onBack?: () => void;
4
6
  onUndo?: () => void;
@@ -9,6 +11,8 @@ export interface FlowToolbarProps {
9
11
  onGeoGroup?: () => void;
10
12
  onUngroup?: () => void;
11
13
  onExportPNG?: () => void | Promise<void>;
14
+ /** Export anchors as a PDF slideshow from the built-in toolbar. */
15
+ onExportPDF?: () => void | Promise<void>;
12
16
  onPublish?: () => void;
13
17
  }
14
- export default function FlowToolbar({ onBack, onUndo, onRedo, canUndo, canRedo, onGroup, onGeoGroup, onUngroup, onExportPNG, onPublish }: FlowToolbarProps): React.JSX.Element;
18
+ export default function FlowToolbar({ onBack, onUndo, onRedo, canUndo, canRedo, onGroup, onGeoGroup, onUngroup, onExportPNG, onExportPDF, onPublish }: FlowToolbarProps): React.JSX.Element;