likec4 0.41.0 → 0.42.1
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/README.md +108 -0
- package/dist/__app__/src/App.jsx +1 -1
- package/dist/__app__/src/components/view-page/ExportDiagram.jsx +72 -0
- package/dist/__app__/src/components/view-page/ViewActionsToolbar.jsx +38 -12
- package/dist/cli/index.js +53 -53
- package/package.json +6 -6
- package/dist/@likec4/diagrams/cjs/components/EmbeddedDiagram.js +0 -83
- package/dist/@likec4/diagrams/cjs/components/FullscreenDiagramBrowser.js +0 -50
- package/dist/@likec4/diagrams/cjs/components/index.js +0 -49
- package/dist/@likec4/diagrams/cjs/components/primitives/fullscreen/CloseButton.js +0 -44
- package/dist/@likec4/diagrams/cjs/components/primitives/fullscreen/FullscreenDiagram.js +0 -110
- package/dist/@likec4/diagrams/cjs/components/primitives/fullscreen/FullscreenDiagramTitle.js +0 -39
- package/dist/@likec4/diagrams/cjs/components/primitives/index.js +0 -38
- package/dist/@likec4/diagrams/cjs/components/primitives/responsive/ResponsiveDiagram.js +0 -56
- package/dist/@likec4/diagrams/cjs/components/types.js +0 -1
- package/dist/@likec4/diagrams/cjs/diagram/Diagram.js +0 -326
- package/dist/@likec4/diagrams/cjs/diagram/Edges.js +0 -121
- package/dist/@likec4/diagrams/cjs/diagram/Nodes.js +0 -204
- package/dist/@likec4/diagrams/cjs/diagram/icons/BrainIcon.js +0 -25
- package/dist/@likec4/diagrams/cjs/diagram/icons/ExternalLink.js +0 -82
- package/dist/@likec4/diagrams/cjs/diagram/icons/index.js +0 -27
- package/dist/@likec4/diagrams/cjs/diagram/index.js +0 -27
- package/dist/@likec4/diagrams/cjs/diagram/shapes/Browser.js +0 -67
- package/dist/@likec4/diagrams/cjs/diagram/shapes/Compound.js +0 -55
- package/dist/@likec4/diagrams/cjs/diagram/shapes/Cylinder.js +0 -71
- package/dist/@likec4/diagrams/cjs/diagram/shapes/Edge.js +0 -62
- package/dist/@likec4/diagrams/cjs/diagram/shapes/Mobile.js +0 -45
- package/dist/@likec4/diagrams/cjs/diagram/shapes/NodeIcon.js +0 -38
- package/dist/@likec4/diagrams/cjs/diagram/shapes/NodeLabel.js +0 -62
- package/dist/@likec4/diagrams/cjs/diagram/shapes/Person.js +0 -48
- package/dist/@likec4/diagrams/cjs/diagram/shapes/Queue.js +0 -72
- package/dist/@likec4/diagrams/cjs/diagram/shapes/Rectangle.js +0 -30
- package/dist/@likec4/diagrams/cjs/diagram/shapes/index.js +0 -54
- package/dist/@likec4/diagrams/cjs/diagram/shapes/types.js +0 -1
- package/dist/@likec4/diagrams/cjs/diagram/shapes/utils.js +0 -19
- package/dist/@likec4/diagrams/cjs/diagram/springs.js +0 -61
- package/dist/@likec4/diagrams/cjs/diagram/state/atoms.js +0 -63
- package/dist/@likec4/diagrams/cjs/diagram/state/gestures.js +0 -26
- package/dist/@likec4/diagrams/cjs/diagram/state/hooks.js +0 -36
- package/dist/@likec4/diagrams/cjs/diagram/state/index.js +0 -38
- package/dist/@likec4/diagrams/cjs/diagram/state/provider.js +0 -18
- package/dist/@likec4/diagrams/cjs/diagram/types.js +0 -1
- package/dist/@likec4/diagrams/cjs/hooks/index.js +0 -49
- package/dist/@likec4/diagrams/cjs/hooks/useDarkMode.js +0 -11
- package/dist/@likec4/diagrams/cjs/hooks/useDiagramApi.js +0 -27
- package/dist/@likec4/diagrams/cjs/hooks/useImageLoader.js +0 -68
- package/dist/@likec4/diagrams/cjs/hooks/useViewIdFromHash.js +0 -93
- package/dist/@likec4/diagrams/cjs/index.js +0 -51
- package/dist/@likec4/diagrams/cjs/konva-html.js +0 -93
- package/dist/@likec4/diagrams/cjs/konva-portal.js +0 -50
- package/dist/@likec4/diagrams/cjs/konva.js +0 -102
- package/dist/@likec4/diagrams/cjs/likec4.js +0 -91
- package/dist/@likec4/diagrams/components/EmbeddedDiagram.mjs +0 -77
- package/dist/@likec4/diagrams/components/FullscreenDiagramBrowser.mjs +0 -52
- package/dist/@likec4/diagrams/components/index.mjs +0 -4
- package/dist/@likec4/diagrams/components/primitives/fullscreen/CloseButton.mjs +0 -43
- package/dist/@likec4/diagrams/components/primitives/fullscreen/FullscreenDiagram.mjs +0 -116
- package/dist/@likec4/diagrams/components/primitives/fullscreen/FullscreenDiagramTitle.mjs +0 -32
- package/dist/@likec4/diagrams/components/primitives/index.mjs +0 -3
- package/dist/@likec4/diagrams/components/primitives/responsive/ResponsiveDiagram.mjs +0 -42
- package/dist/@likec4/diagrams/components/types.mjs +0 -0
- package/dist/@likec4/diagrams/diagram/Diagram.mjs +0 -307
- package/dist/@likec4/diagrams/diagram/Edges.mjs +0 -117
- package/dist/@likec4/diagrams/diagram/Nodes.mjs +0 -178
- package/dist/@likec4/diagrams/diagram/icons/BrainIcon.mjs +0 -20
- package/dist/@likec4/diagrams/diagram/icons/ExternalLink.mjs +0 -90
- package/dist/@likec4/diagrams/diagram/icons/index.mjs +0 -2
- package/dist/@likec4/diagrams/diagram/index.mjs +0 -2
- package/dist/@likec4/diagrams/diagram/shapes/Browser.mjs +0 -49
- package/dist/@likec4/diagrams/diagram/shapes/Compound.mjs +0 -48
- package/dist/@likec4/diagrams/diagram/shapes/Cylinder.mjs +0 -57
- package/dist/@likec4/diagrams/diagram/shapes/Edge.mjs +0 -63
- package/dist/@likec4/diagrams/diagram/shapes/Mobile.mjs +0 -33
- package/dist/@likec4/diagrams/diagram/shapes/NodeIcon.mjs +0 -28
- package/dist/@likec4/diagrams/diagram/shapes/NodeLabel.mjs +0 -59
- package/dist/@likec4/diagrams/diagram/shapes/Person.mjs +0 -42
- package/dist/@likec4/diagrams/diagram/shapes/Queue.mjs +0 -58
- package/dist/@likec4/diagrams/diagram/shapes/Rectangle.mjs +0 -20
- package/dist/@likec4/diagrams/diagram/shapes/index.mjs +0 -7
- package/dist/@likec4/diagrams/diagram/shapes/types.mjs +0 -0
- package/dist/@likec4/diagrams/diagram/shapes/utils.mjs +0 -12
- package/dist/@likec4/diagrams/diagram/springs.mjs +0 -57
- package/dist/@likec4/diagrams/diagram/state/atoms.mjs +0 -71
- package/dist/@likec4/diagrams/diagram/state/gestures.mjs +0 -19
- package/dist/@likec4/diagrams/diagram/state/hooks.mjs +0 -28
- package/dist/@likec4/diagrams/diagram/state/index.mjs +0 -3
- package/dist/@likec4/diagrams/diagram/state/provider.mjs +0 -7
- package/dist/@likec4/diagrams/diagram/types.mjs +0 -0
- package/dist/@likec4/diagrams/esm/components/EmbeddedDiagram.js +0 -77
- package/dist/@likec4/diagrams/esm/components/FullscreenDiagramBrowser.js +0 -52
- package/dist/@likec4/diagrams/esm/components/index.js +0 -4
- package/dist/@likec4/diagrams/esm/components/primitives/fullscreen/CloseButton.js +0 -43
- package/dist/@likec4/diagrams/esm/components/primitives/fullscreen/FullscreenDiagram.js +0 -116
- package/dist/@likec4/diagrams/esm/components/primitives/fullscreen/FullscreenDiagramTitle.js +0 -32
- package/dist/@likec4/diagrams/esm/components/primitives/index.js +0 -3
- package/dist/@likec4/diagrams/esm/components/primitives/responsive/ResponsiveDiagram.js +0 -42
- package/dist/@likec4/diagrams/esm/components/types.js +0 -0
- package/dist/@likec4/diagrams/esm/diagram/Diagram.js +0 -307
- package/dist/@likec4/diagrams/esm/diagram/Edges.js +0 -117
- package/dist/@likec4/diagrams/esm/diagram/Nodes.js +0 -178
- package/dist/@likec4/diagrams/esm/diagram/icons/BrainIcon.js +0 -20
- package/dist/@likec4/diagrams/esm/diagram/icons/ExternalLink.js +0 -90
- package/dist/@likec4/diagrams/esm/diagram/icons/index.js +0 -2
- package/dist/@likec4/diagrams/esm/diagram/index.js +0 -2
- package/dist/@likec4/diagrams/esm/diagram/shapes/Browser.js +0 -49
- package/dist/@likec4/diagrams/esm/diagram/shapes/Compound.js +0 -48
- package/dist/@likec4/diagrams/esm/diagram/shapes/Cylinder.js +0 -57
- package/dist/@likec4/diagrams/esm/diagram/shapes/Edge.js +0 -63
- package/dist/@likec4/diagrams/esm/diagram/shapes/Mobile.js +0 -33
- package/dist/@likec4/diagrams/esm/diagram/shapes/NodeIcon.js +0 -28
- package/dist/@likec4/diagrams/esm/diagram/shapes/NodeLabel.js +0 -59
- package/dist/@likec4/diagrams/esm/diagram/shapes/Person.js +0 -42
- package/dist/@likec4/diagrams/esm/diagram/shapes/Queue.js +0 -58
- package/dist/@likec4/diagrams/esm/diagram/shapes/Rectangle.js +0 -20
- package/dist/@likec4/diagrams/esm/diagram/shapes/index.js +0 -7
- package/dist/@likec4/diagrams/esm/diagram/shapes/types.js +0 -0
- package/dist/@likec4/diagrams/esm/diagram/shapes/utils.js +0 -12
- package/dist/@likec4/diagrams/esm/diagram/springs.js +0 -57
- package/dist/@likec4/diagrams/esm/diagram/state/atoms.js +0 -71
- package/dist/@likec4/diagrams/esm/diagram/state/gestures.js +0 -19
- package/dist/@likec4/diagrams/esm/diagram/state/hooks.js +0 -28
- package/dist/@likec4/diagrams/esm/diagram/state/index.js +0 -3
- package/dist/@likec4/diagrams/esm/diagram/state/provider.js +0 -7
- package/dist/@likec4/diagrams/esm/diagram/types.js +0 -0
- package/dist/@likec4/diagrams/esm/hooks/index.js +0 -4
- package/dist/@likec4/diagrams/esm/hooks/useDarkMode.js +0 -5
- package/dist/@likec4/diagrams/esm/hooks/useDiagramApi.js +0 -27
- package/dist/@likec4/diagrams/esm/hooks/useImageLoader.js +0 -64
- package/dist/@likec4/diagrams/esm/hooks/useViewIdFromHash.js +0 -87
- package/dist/@likec4/diagrams/esm/index.js +0 -4
- package/dist/@likec4/diagrams/esm/konva-html.js +0 -74
- package/dist/@likec4/diagrams/esm/konva-portal.js +0 -34
- package/dist/@likec4/diagrams/esm/konva.js +0 -22
- package/dist/@likec4/diagrams/esm/likec4.js +0 -54
- package/dist/@likec4/diagrams/hooks/index.mjs +0 -4
- package/dist/@likec4/diagrams/hooks/useDarkMode.mjs +0 -5
- package/dist/@likec4/diagrams/hooks/useDiagramApi.mjs +0 -27
- package/dist/@likec4/diagrams/hooks/useImageLoader.mjs +0 -64
- package/dist/@likec4/diagrams/hooks/useViewIdFromHash.mjs +0 -87
- package/dist/@likec4/diagrams/index.mjs +0 -4
- package/dist/@likec4/diagrams/konva-html.mjs +0 -74
- package/dist/@likec4/diagrams/konva-portal.mjs +0 -34
- package/dist/@likec4/diagrams/konva.mjs +0 -33
- package/dist/@likec4/diagrams/likec4.mjs +0 -54
package/README.md
CHANGED
|
@@ -1,3 +1,111 @@
|
|
|
1
1
|
# LikeC4
|
|
2
2
|
|
|
3
|
+
`likec4` is a CLI tool for various operations and automation over LikeC4 projects, such as:
|
|
4
|
+
|
|
5
|
+
1. LikeC4
|
|
6
|
+
1. Install
|
|
7
|
+
1. Local installation
|
|
8
|
+
2. Global installation
|
|
9
|
+
2. Usage
|
|
10
|
+
1. Preview diagrams
|
|
11
|
+
2. Build static website
|
|
12
|
+
3. Export to PNG
|
|
13
|
+
4. Export to Mermaid, Dot, D2
|
|
14
|
+
5. Generate React components
|
|
15
|
+
6. Generate structured data
|
|
16
|
+
3. Support
|
|
17
|
+
|
|
18
|
+
## Install
|
|
19
|
+
|
|
20
|
+
> **Compatibility Note:**
|
|
21
|
+
> LikeC4 requires [Node.js](https://nodejs.org/en/) version 18+, 20+
|
|
22
|
+
|
|
23
|
+
### Local installation
|
|
24
|
+
|
|
25
|
+
If you're using it in an npm project, install it as a development dependency:
|
|
26
|
+
|
|
27
|
+
```sh
|
|
28
|
+
npm install --save-dev likec4
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
You can reference it directly in the `package.json#scripts` object:
|
|
32
|
+
|
|
33
|
+
```json5
|
|
34
|
+
{
|
|
35
|
+
scripts: {
|
|
36
|
+
dev: 'likec4 serve ...',
|
|
37
|
+
build: 'likec4 build ...'
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
> Check out the template repository [likec4/template](https://github.com/likec4/template)
|
|
43
|
+
> with pre-configured CI for building and deploying to github pages.
|
|
44
|
+
|
|
45
|
+
To use the binary, you can call it with [`npx`](https://docs.npmjs.com/cli/v10/commands/npx) while in the project directory:
|
|
46
|
+
|
|
47
|
+
```sh
|
|
48
|
+
npx likec4 ...
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### Global installation
|
|
52
|
+
|
|
53
|
+
If you want to use it in any arbitrary project without [`npx`](https://docs.npmjs.com/cli/v10/commands/npx), install it globally:
|
|
54
|
+
|
|
55
|
+
```sh
|
|
56
|
+
npm install --global likec4
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Then, you can call `likec4` directly:
|
|
60
|
+
|
|
61
|
+
```sh
|
|
62
|
+
likec4 ...
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## Usage
|
|
66
|
+
|
|
67
|
+
### Preview diagrams
|
|
68
|
+
|
|
69
|
+
In a folder with LikeC4 sources:
|
|
70
|
+
|
|
71
|
+
```sh
|
|
72
|
+
likec4 serve
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
This will recursively search for `*.c4`, `*.likec4` files and serve them in a local web server.
|
|
76
|
+
|
|
77
|
+
Any changes to the sources will trigger a live-update of diagrams.
|
|
78
|
+
|
|
79
|
+
Refer to the help for more options:
|
|
80
|
+
|
|
81
|
+
```sh
|
|
82
|
+
likec4 serve --help
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### Build static website
|
|
86
|
+
|
|
87
|
+
```sh
|
|
88
|
+
likec4 build -o ./dist
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
The output folder will contain a static website (single-page application).
|
|
92
|
+
|
|
93
|
+
### Export to PNG
|
|
94
|
+
|
|
95
|
+
...
|
|
96
|
+
|
|
97
|
+
### Export to Mermaid, Dot, D2
|
|
98
|
+
|
|
99
|
+
...
|
|
100
|
+
|
|
101
|
+
### Generate React components
|
|
102
|
+
|
|
3
103
|
...
|
|
104
|
+
|
|
105
|
+
### Generate structured data
|
|
106
|
+
|
|
107
|
+
...
|
|
108
|
+
|
|
109
|
+
## Support
|
|
110
|
+
|
|
111
|
+
If there's a problem you're encountering or something you need help with, don't hesitate to take advantage of my [_Priority Support_ service](https://github.com/sponsors/davydkov) where you can ask me questions in an exclusive forum. I'm well equppied to assist you with this project and would be happy to help you out! 🙂
|
package/dist/__app__/src/App.jsx
CHANGED
|
@@ -6,7 +6,7 @@ import { useRoute } from './router';
|
|
|
6
6
|
import { Theme } from '@radix-ui/themes';
|
|
7
7
|
const Routes = () => {
|
|
8
8
|
const r = useRoute();
|
|
9
|
-
return (<Theme accentColor='
|
|
9
|
+
return (<Theme hasBackground={r.route !== 'export'} accentColor='indigo' radius='small' appearance={r.params?.theme}>
|
|
10
10
|
{r.route === 'index' && <IndexPage key='index'/>}
|
|
11
11
|
{r.route === 'view' && <ViewPage key='view' viewId={r.params.viewId} showUI={r.showUI}/>}
|
|
12
12
|
{r.route === 'export' && (<ExportPage key='export' viewId={r.params.viewId} padding={r.params.padding}/>)}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { Diagram, useDiagramApi } from '@likec4/diagrams';
|
|
2
|
+
import { Box, Portal } from '@radix-ui/themes';
|
|
3
|
+
import { useDebouncedEffect } from '@react-hookz/web/esm';
|
|
4
|
+
import { memo } from 'react';
|
|
5
|
+
function downloadBlob(blob, name) {
|
|
6
|
+
// Convert your blob into a Blob URL (a special url that points to an object in the browser's memory)
|
|
7
|
+
const blobUrl = URL.createObjectURL(blob);
|
|
8
|
+
// Create a link element
|
|
9
|
+
const link = document.createElement('a');
|
|
10
|
+
link.style.display = 'none';
|
|
11
|
+
// Set link's href to point to the Blob URL
|
|
12
|
+
link.href = blobUrl;
|
|
13
|
+
link.download = name;
|
|
14
|
+
// Click handler that releases the object URL after the element has been clicked
|
|
15
|
+
// This is required for one-off downloads of the blob content
|
|
16
|
+
const clickHandler = () => {
|
|
17
|
+
setTimeout(() => {
|
|
18
|
+
URL.revokeObjectURL(blobUrl);
|
|
19
|
+
removeEventListener('click', clickHandler);
|
|
20
|
+
document.body.removeChild(link);
|
|
21
|
+
}, 200);
|
|
22
|
+
};
|
|
23
|
+
link.addEventListener('click', clickHandler, false);
|
|
24
|
+
// Append link to the body
|
|
25
|
+
document.body.appendChild(link);
|
|
26
|
+
// Dispatch click event on the link
|
|
27
|
+
link.dispatchEvent(new MouseEvent('click', {
|
|
28
|
+
bubbles: true,
|
|
29
|
+
cancelable: true,
|
|
30
|
+
view: window
|
|
31
|
+
}));
|
|
32
|
+
}
|
|
33
|
+
const ExportDiagram = memo(({ diagram, onCompleted }) => {
|
|
34
|
+
const id = diagram.id;
|
|
35
|
+
const [ref, diagramApi] = useDiagramApi();
|
|
36
|
+
const padding = 20;
|
|
37
|
+
const width = diagram.width + padding * 2;
|
|
38
|
+
const height = diagram.height + padding * 2;
|
|
39
|
+
// To avoid flickering and double rendering
|
|
40
|
+
useDebouncedEffect(() => {
|
|
41
|
+
void diagramApi.stage
|
|
42
|
+
.toBlob({
|
|
43
|
+
pixelRatio: 2,
|
|
44
|
+
mimeType: 'image/png',
|
|
45
|
+
callback(blob) {
|
|
46
|
+
if (blob) {
|
|
47
|
+
downloadBlob(blob, `${diagram.id}.png`);
|
|
48
|
+
}
|
|
49
|
+
onCompleted();
|
|
50
|
+
}
|
|
51
|
+
})
|
|
52
|
+
.catch(err => {
|
|
53
|
+
onCompleted();
|
|
54
|
+
// Show error after 100ms to avoid blocking the UI
|
|
55
|
+
setTimeout(() => {
|
|
56
|
+
window.alert(err);
|
|
57
|
+
}, 100);
|
|
58
|
+
});
|
|
59
|
+
}, [id], 400);
|
|
60
|
+
return (<Portal>
|
|
61
|
+
<Box position={'fixed'} style={{
|
|
62
|
+
top: 0,
|
|
63
|
+
left: 0,
|
|
64
|
+
width,
|
|
65
|
+
height,
|
|
66
|
+
transform: `translateY(${-height}px)`
|
|
67
|
+
}}>
|
|
68
|
+
<Diagram ref={ref} animate={false} pannable={false} zoomable={false} diagram={diagram} padding={padding} width={width} height={height}/>
|
|
69
|
+
</Box>
|
|
70
|
+
</Portal>);
|
|
71
|
+
});
|
|
72
|
+
export default ExportDiagram;
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { CaretDownIcon, Share1Icon as ShareIcon } from '@radix-ui/react-icons';
|
|
2
|
-
import { Button, Dialog, DropdownMenu, Flex, Text } from '@radix-ui/themes';
|
|
3
|
-
import {
|
|
2
|
+
import { Button, Dialog, DropdownMenu, Flex, IconButton, Separator, Text } from '@radix-ui/themes';
|
|
3
|
+
import { useState } from 'react';
|
|
4
|
+
// import { ThemePanelToggle } from '../ThemePanelToggle'
|
|
5
|
+
import ExportDiagram from './ExportDiagram';
|
|
4
6
|
import { ShareDialog } from './ShareDialog';
|
|
5
|
-
const ExportMenu = ({
|
|
7
|
+
const ExportMenu = ({ onExport, children }) => (<DropdownMenu.Root>
|
|
6
8
|
<DropdownMenu.Trigger>{children}</DropdownMenu.Trigger>
|
|
7
9
|
<DropdownMenu.Content>
|
|
8
10
|
<DropdownMenu.Label>
|
|
@@ -10,8 +12,12 @@ const ExportMenu = ({ diagramApi, children }) => (<DropdownMenu.Root>
|
|
|
10
12
|
</DropdownMenu.Label>
|
|
11
13
|
<DropdownMenu.Group>
|
|
12
14
|
<DropdownMenu.Item onClick={_ => {
|
|
15
|
+
onExport('png');
|
|
13
16
|
// const { boundingBox } = diagramApi.diagramView()
|
|
14
|
-
console.log('Serialized: ', diagramApi.stage.toObject())
|
|
17
|
+
// console.log('Serialized: ', diagramApi.stage.toObject())
|
|
18
|
+
// const k = new KonvaCore.Canvas({
|
|
19
|
+
// height: diagramApi.
|
|
20
|
+
// })
|
|
15
21
|
// diagramApi.stage().toBlob({
|
|
16
22
|
// ...boundingBox,
|
|
17
23
|
// callback(blob) {
|
|
@@ -27,21 +33,40 @@ const ExportMenu = ({ diagramApi, children }) => (<DropdownMenu.Root>
|
|
|
27
33
|
}}>
|
|
28
34
|
Export as .png
|
|
29
35
|
</DropdownMenu.Item>
|
|
30
|
-
<DropdownMenu.Item>Export as .dot</DropdownMenu.Item>
|
|
31
|
-
<DropdownMenu.Item>Export as .
|
|
32
|
-
<DropdownMenu.Item>Export as .
|
|
36
|
+
<DropdownMenu.Item disabled>Export as .dot</DropdownMenu.Item>
|
|
37
|
+
<DropdownMenu.Item disabled>Export as .mmd</DropdownMenu.Item>
|
|
38
|
+
<DropdownMenu.Item disabled>Export as .d2</DropdownMenu.Item>
|
|
33
39
|
</DropdownMenu.Group>
|
|
34
40
|
<DropdownMenu.Separator />
|
|
35
41
|
<DropdownMenu.Label>
|
|
36
42
|
<Text weight='medium'>All views</Text>
|
|
37
43
|
</DropdownMenu.Label>
|
|
38
44
|
<DropdownMenu.Group>
|
|
39
|
-
<DropdownMenu.Item>Download as ZIP</DropdownMenu.Item>
|
|
45
|
+
<DropdownMenu.Item disabled>Download as ZIP</DropdownMenu.Item>
|
|
40
46
|
</DropdownMenu.Group>
|
|
41
47
|
</DropdownMenu.Content>
|
|
42
48
|
</DropdownMenu.Root>);
|
|
43
|
-
export const ViewActionsToolbar = ({
|
|
44
|
-
|
|
49
|
+
export const ViewActionsToolbar = ({ diagram }) => {
|
|
50
|
+
const [exportTo, setExportTo] = useState(null);
|
|
51
|
+
return (<Flex position='fixed' top='0' right='0' p='2' gap={'3'} justify='end' align='center'>
|
|
52
|
+
<Flex display={{
|
|
53
|
+
initial: 'none',
|
|
54
|
+
md: 'flex'
|
|
55
|
+
}} gap='3' align='center'>
|
|
56
|
+
<Button variant='solid' size='1'>
|
|
57
|
+
React
|
|
58
|
+
</Button>
|
|
59
|
+
<Button variant='ghost' size='1'>
|
|
60
|
+
Graphviz
|
|
61
|
+
</Button>
|
|
62
|
+
<Button variant='ghost' size='1'>
|
|
63
|
+
Mermaid
|
|
64
|
+
</Button>
|
|
65
|
+
<IconButton variant='ghost' size='1'>
|
|
66
|
+
<CaretDownIcon />
|
|
67
|
+
</IconButton>
|
|
68
|
+
<Separator orientation='vertical'/>
|
|
69
|
+
</Flex>
|
|
45
70
|
<Dialog.Root>
|
|
46
71
|
<Dialog.Trigger>
|
|
47
72
|
<Button variant='solid'>
|
|
@@ -51,12 +76,13 @@ export const ViewActionsToolbar = ({ diagramApi, diagram }) => {
|
|
|
51
76
|
</Dialog.Trigger>
|
|
52
77
|
<ShareDialog diagram={diagram}/>
|
|
53
78
|
</Dialog.Root>
|
|
54
|
-
<ExportMenu
|
|
79
|
+
<ExportMenu onExport={setExportTo}>
|
|
55
80
|
<Button variant='soft' color='gray'>
|
|
56
81
|
<Text>Export</Text>
|
|
57
82
|
<CaretDownIcon />
|
|
58
83
|
</Button>
|
|
59
84
|
</ExportMenu>
|
|
60
|
-
<
|
|
85
|
+
{exportTo === 'png' && (<ExportDiagram key={'export-diagram-png'} diagram={diagram} onCompleted={() => setExportTo(null)}/>)}
|
|
86
|
+
{/* <ThemePanelToggle /> */}
|
|
61
87
|
</Flex>);
|
|
62
88
|
};
|