likec4 0.49.0 → 0.51.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/dist/@likec4/diagrams/diagram/Diagram.js +55 -27
  2. package/dist/@likec4/diagrams/diagram/Edges.js +14 -11
  3. package/dist/@likec4/diagrams/diagram/Nodes.js +212 -23
  4. package/dist/@likec4/diagrams/diagram/icons/ZoomIn.js +2 -1
  5. package/dist/@likec4/diagrams/diagram/shapes/Compound.js +2 -1
  6. package/dist/@likec4/diagrams/diagram/shapes/Edge.js +1 -1
  7. package/dist/@likec4/diagrams/diagram/state/atoms.js +35 -60
  8. package/dist/@likec4/diagrams/diagram/utils.js +14 -0
  9. package/dist/@likec4/diagrams/hooks/useDiagramApi.js +4 -5
  10. package/dist/@likec4/diagrams/hooks/useImageLoader.js +1 -1
  11. package/dist/__app__/likec4.css +8 -5
  12. package/dist/__app__/src/App.jsx +9 -11
  13. package/dist/__app__/src/components/CopyToClipboard.jsx +29 -0
  14. package/dist/__app__/src/components/CopyToClipboard.module.css +16 -0
  15. package/dist/__app__/src/components/DiagramNotFound.jsx +2 -2
  16. package/dist/__app__/src/components/index.js +2 -1
  17. package/dist/__app__/src/components/sidebar/Sidebar.jsx +1 -1
  18. package/dist/__app__/src/components/sidebar/styles.module.css +4 -1
  19. package/dist/__app__/src/components/view-page/DisplayModeSelector.jsx +15 -9
  20. package/dist/__app__/src/components/view-page/Header.jsx +97 -0
  21. package/dist/__app__/src/components/view-page/Header.module.css +24 -0
  22. package/dist/__app__/src/components/view-page/ShareDialog.jsx +23 -15
  23. package/dist/__app__/src/components/view-page/ViewActions.jsx +69 -0
  24. package/dist/__app__/src/data/atoms.js +4 -22
  25. package/dist/__app__/src/data/hooks.js +5 -4
  26. package/dist/__app__/src/data/index-page.js +22 -0
  27. package/dist/__app__/src/likec4-views.js +1 -1
  28. package/dist/__app__/src/pages/index-page/index.jsx +99 -0
  29. package/dist/__app__/src/pages/index-page/index.module.css +20 -0
  30. package/dist/__app__/src/pages/index.js +1 -1
  31. package/dist/__app__/src/pages/useTransparentBackground.js +2 -2
  32. package/dist/__app__/src/pages/view-page/ViewAsReact.jsx +60 -0
  33. package/dist/__app__/src/pages/view-page/index.js +11 -0
  34. package/dist/__app__/src/pages/view-page/other-formats/ViewAsD2.jsx +18 -0
  35. package/dist/__app__/src/pages/view-page/other-formats/ViewAsDot.jsx +33 -0
  36. package/dist/__app__/src/pages/view-page/other-formats/ViewAsMmd.jsx +18 -0
  37. package/dist/__app__/src/pages/view-page/other-formats.jsx +43 -0
  38. package/dist/__app__/src/pages/view-page/view-page.module.css +81 -0
  39. package/dist/__app__/src/pages/view.page.jsx +12 -65
  40. package/dist/__app__/src/router.js +90 -20
  41. package/dist/__app__/src/utils/utils.js +1 -2
  42. package/dist/__app__/tsconfig.json +1 -0
  43. package/dist/cli/index.js +286 -212
  44. package/package.json +19 -20
  45. package/dist/__app__/postcss.config.cjs +0 -11
  46. package/dist/__app__/src/components/view-page/ViewActionsToolbar.jsx +0 -66
  47. package/dist/__app__/src/pages/index.module.css +0 -11
  48. package/dist/__app__/src/pages/index.page.jsx +0 -57
  49. package/dist/__app__/src/pages/view-page.module.css +0 -30
  50. package/dist/__app__/tailwind.config.cjs +0 -17
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "likec4",
3
- "version": "0.49.0",
3
+ "version": "0.51.0",
4
4
  "license": "MIT",
5
5
  "homepage": "https://likec4.dev",
6
6
  "author": "Denis Davydkov <denis@davydkov.com>",
@@ -32,7 +32,7 @@
32
32
  "lint": "run -T eslint src/ --fix",
33
33
  "test": "run -T vitest run",
34
34
  "test:watch": "run -T vitest",
35
- "clean": "run -T rimraf dist app/dist dev/.export dev/dist",
35
+ "clean": "run -T rimraf dist app/dist dev/.export dev/dist node_modules/.vite",
36
36
  "dev": "tsx watch src/cli/index.ts serve dev",
37
37
  "dev:bigbank": "tsx watch src/cli/index.ts serve ../../docs/likec4/bigbank",
38
38
  "dev:index-page": "tsx watch src/cli/index.ts serve ../../docs/likec4/index-page",
@@ -55,7 +55,7 @@
55
55
  "@react-spring/konva": "^9.7.3",
56
56
  "@use-gesture/react": "^10.3.0",
57
57
  "body-scroll-lock-upgrade": "^1.0.4",
58
- "jotai": "^2.5.1",
58
+ "jotai": "^2.6.0",
59
59
  "khroma": "^2.1.0",
60
60
  "konva": "^9.2.3",
61
61
  "react-konva": "^18.2.10",
@@ -63,37 +63,35 @@
63
63
  "@nanostores/router": "^0.11.0",
64
64
  "@radix-ui/react-icons": "^1.3.0",
65
65
  "@radix-ui/themes": "^2.0.1",
66
- "@vitejs/plugin-react": "^4.2.0",
66
+ "@vitejs/plugin-react": "^4.2.1",
67
67
  "autoprefixer": "^10.4.16",
68
68
  "classnames": "^2.3.2",
69
69
  "clsx": "^1.2.1",
70
70
  "nanostores": "^0.9.5",
71
- "playwright-core": "^1.40.0",
71
+ "playwright-core": "^1.40.1",
72
72
  "postcss": "^8.4.31",
73
+ "postcss-nested": "^6.0.1",
73
74
  "prop-types": "^15.8.1",
74
- "radix-themes-tw": "^0.0.8",
75
75
  "react": "^18.2.0",
76
76
  "react-accessible-treeview": "^2.8.0",
77
77
  "react-dom": "^18.2.0",
78
- "tailwind-merge": "^1.14.0",
79
- "tailwindcss": "^3.3.5",
80
- "vite": "^4.5.0"
78
+ "vite": "^5.0.5"
81
79
  },
82
80
  "devDependencies": {
83
- "@likec4/core": "0.49.0",
84
- "@likec4/diagrams": "0.49.0",
85
- "@likec4/generators": "0.49.0",
86
- "@likec4/language-server": "0.49.0",
87
- "@likec4/layouts": "0.49.0",
88
- "@types/node": "^20.8.7",
81
+ "@likec4/core": "0.51.0",
82
+ "@likec4/diagrams": "0.51.0",
83
+ "@likec4/generators": "0.51.0",
84
+ "@likec4/language-server": "0.51.0",
85
+ "@likec4/layouts": "0.51.0",
86
+ "@types/node": "^20.10.3",
89
87
  "@types/prop-types": "^15.7.10",
90
88
  "@types/react": "^18.2.0",
91
89
  "@types/react-dom": "^18.2.0",
92
90
  "@types/yargs": "^17.0.31",
93
91
  "boxen": "^7.1.1",
94
92
  "ci-info": "^3.9.0",
95
- "esbuild": "^0.19.5",
96
- "esbuild-node-externals": "^1.9.0",
93
+ "esbuild": "^0.19.8",
94
+ "esbuild-node-externals": "^1.11.0",
97
95
  "execa": "^8.0.1",
98
96
  "get-port": "^7.0.0",
99
97
  "json5": "^2.2.3",
@@ -102,10 +100,11 @@
102
100
  "picocolors": "^1.0.0",
103
101
  "pretty-ms": "^8.0.0",
104
102
  "strip-indent": "^4.0.0",
105
- "tsx": "^4.1.3",
106
- "typescript": "^5.2.2",
103
+ "tsx": "^4.6.2",
104
+ "type-fest": "^4.8.3",
105
+ "typescript": "^5.3.2",
107
106
  "typescript-plugin-css-modules": "^5.0.2",
108
- "vitest": "^0.34.6",
107
+ "vitest": "^1.0.1",
109
108
  "yargs": "^17.7.2"
110
109
  },
111
110
  "publishConfig": {
@@ -1,11 +0,0 @@
1
- const autoprefixer = require('autoprefixer');
2
- const nesting = require('tailwindcss/nesting/index.js');
3
- const tailwindcss = require('tailwindcss');
4
- const { resolve } = require('node:path');
5
-
6
- const tailwindCfg = resolve(__dirname, './tailwind.config.cjs');
7
-
8
- /* @type {import('postcss').Postcss} */
9
- module.exports = {
10
- plugins: [nesting, tailwindcss(tailwindCfg), autoprefixer],
11
- };
@@ -1,66 +0,0 @@
1
- import { CaretDownIcon, Share1Icon as ShareIcon } from '@radix-ui/react-icons';
2
- import { Button, Dialog, DropdownMenu, Flex, Text } from '@radix-ui/themes';
3
- import { useState } from 'react';
4
- // import { ThemePanelToggle } from '../ThemePanelToggle'
5
- import { DisplayModeSelector } from './DisplayModeSelector';
6
- import ExportDiagram from './ExportDiagram';
7
- import { ShareDialog } from './ShareDialog';
8
- const ExportMenu = ({ onExport, children }) => (<DropdownMenu.Root>
9
- <DropdownMenu.Trigger>{children}</DropdownMenu.Trigger>
10
- <DropdownMenu.Content>
11
- <DropdownMenu.Label>
12
- <Text weight='medium'>Current view</Text>
13
- </DropdownMenu.Label>
14
- <DropdownMenu.Group>
15
- <DropdownMenu.Item onClick={_ => {
16
- onExport('png');
17
- }}>
18
- Export as .png
19
- </DropdownMenu.Item>
20
- <DropdownMenu.Item disabled>Export as .dot</DropdownMenu.Item>
21
- <DropdownMenu.Item disabled>Export as .mmd</DropdownMenu.Item>
22
- <DropdownMenu.Item disabled>Export as .d2</DropdownMenu.Item>
23
- <DropdownMenu.Item disabled>Export to Draw.io</DropdownMenu.Item>
24
- <DropdownMenu.Item disabled>Export to Miro</DropdownMenu.Item>
25
- </DropdownMenu.Group>
26
- <DropdownMenu.Separator />
27
- <DropdownMenu.Label>
28
- <Text weight='medium'>All views</Text>
29
- </DropdownMenu.Label>
30
- <DropdownMenu.Group>
31
- <DropdownMenu.Item disabled>Download as ZIP</DropdownMenu.Item>
32
- </DropdownMenu.Group>
33
- </DropdownMenu.Content>
34
- </DropdownMenu.Root>);
35
- export const ViewActionsToolbar = ({ diagram }) => {
36
- const [exportTo, setExportTo] = useState(null);
37
- return (<Flex position='fixed' top='0' right='0' p={{
38
- initial: '3',
39
- md: '2'
40
- }} gap={'3'} justify='end' align='center'>
41
- <DisplayModeSelector />
42
- <Dialog.Root>
43
- <Dialog.Trigger>
44
- <Button variant='solid' size={{
45
- initial: '1',
46
- md: '2'
47
- }}>
48
- <ShareIcon />
49
- <Text>Share</Text>
50
- </Button>
51
- </Dialog.Trigger>
52
- <ShareDialog diagram={diagram}/>
53
- </Dialog.Root>
54
- <ExportMenu onExport={setExportTo}>
55
- <Button variant='soft' color='gray' size={{
56
- initial: '1',
57
- md: '2'
58
- }}>
59
- <Text>Export</Text>
60
- <CaretDownIcon />
61
- </Button>
62
- </ExportMenu>
63
- {exportTo === 'png' && (<ExportDiagram key={'export-diagram-png'} diagram={diagram} onCompleted={() => setExportTo(null)}/>)}
64
- {/* <ThemePanelToggle /> */}
65
- </Flex>);
66
- };
@@ -1,11 +0,0 @@
1
- .dashboardTile {
2
-
3
- @media (min-width: 768px) {
4
- min-width: 300px;
5
- max-width: 500px;
6
- }
7
-
8
- /* &:where(:global(.rt-variant-surface))::after {
9
- box-shadow: none;
10
- } */
11
- }
@@ -1,57 +0,0 @@
1
- import { DashboardIcon } from '@radix-ui/react-icons';
2
- import { Box, Button, Card, Flex, Separator, Text } from '@radix-ui/themes';
3
- import { useAtomValue } from 'jotai';
4
- import { memo } from 'react';
5
- import { useIndexPageTileAtoms } from '../data';
6
- import { $pages } from '../router';
7
- import styles from './index.module.css';
8
- const DashboardTileView = ({ atom }) => {
9
- const { title, id } = useAtomValue(atom);
10
- return (<Flex asChild justify={'start'}>
11
- <Button color='gray' variant='soft' className='cursor-pointer' size='2' onClick={_ => $pages.view.open(id)}>
12
- <DashboardIcon width={14} height={14} style={{
13
- color: 'var(--gray-a10)'
14
- }}/>
15
- <Text>{title}</Text>
16
- </Button>
17
- </Flex>);
18
- };
19
- const DashboardTile = ({ atom }) => {
20
- const { path, views, isRoot } = useAtomValue(atom);
21
- return (<Card asChild className={styles.dashboardTile} variant='classic' size={{
22
- initial: '1',
23
- sm: '2'
24
- }}>
25
- <Box grow={'1'} shrink={'0'}>
26
- <Flex direction='column' gap='3'>
27
- <Text as='div' trim='end' weight={isRoot ? 'medium' : 'bold'} size='2' className='truncate' color={isRoot ? 'gray' : undefined}>
28
- {isRoot ? 'index' : '🗂️ ' + path}
29
- </Text>
30
- <Separator orientation='horizontal' my='1' size={'4'}/>
31
- {views.map(view => (<DashboardTileView key={view.toString()} atom={view}/>))}
32
- </Flex>
33
- </Box>
34
- </Card>);
35
- };
36
- export const IndexPage = memo(() => {
37
- const tiles = useIndexPageTileAtoms();
38
- return (<Box style={{
39
- paddingLeft: 60
40
- }}>
41
- <Flex gap={{
42
- initial: '4',
43
- lg: '6'
44
- }} p={{
45
- initial: '4',
46
- lg: '6'
47
- }} wrap={{
48
- initial: 'nowrap',
49
- sm: 'wrap'
50
- }} direction={{
51
- initial: 'column',
52
- sm: 'row'
53
- }} align='stretch'>
54
- {tiles.map(tile => (<DashboardTile key={tile.toString()} atom={tile}/>))}
55
- </Flex>
56
- </Box>);
57
- });
@@ -1,30 +0,0 @@
1
- .diagramBg {
2
- overscroll-behavior: none;
3
- overflow: hidden;
4
- --diagram-bg-size: 24px;
5
- --diagram-bg-position-x: 0;
6
- --diagram-bg-position-y: 0;
7
-
8
- :global(.konvajs-content) {
9
-
10
- &::before {
11
- content: '';
12
- position: absolute;
13
- padding: 0;
14
- margin: 0;
15
- top: 0;
16
- left: 0;
17
- width: 100%;
18
- height: 100%;
19
- pointer-events: none;
20
- touch-action: none;
21
- user-select: none;
22
- background-origin: border-box;
23
- background-attachment: fixed;
24
- background-image: radial-gradient(var(--gray-a3) 12%, transparent 12%);
25
- background-position: var(--diagram-bg-position-x) var(--diagram-bg-position-y);
26
- background-size: var(--diagram-bg-size) var(--diagram-bg-size);
27
- z-index: -1;
28
- }
29
- }
30
- }
@@ -1,17 +0,0 @@
1
- const { radixThemePreset } = require('radix-themes-tw');
2
- const { resolve } = require('node:path');
3
-
4
- /** @type {import('tailwindcss').Config} */
5
- module.exports = {
6
- presets: [radixThemePreset],
7
- darkMode: ['class', '[data-mode="dark"]'],
8
- content: [
9
- resolve(__dirname, './src') + '/**/*.{js,jsx,ts,tsx,md,mdx}',
10
- resolve(__dirname, './index.html'),
11
- ],
12
- corePlugins: {
13
- // ...
14
- // Preflight is enabled by default, we disable it here
15
- preflight: false
16
- }
17
- };