likec4 0.48.0 → 0.50.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 (51) hide show
  1. package/README.md +12 -6
  2. package/dist/@likec4/diagrams/diagram/Diagram.js +55 -27
  3. package/dist/@likec4/diagrams/diagram/Edges.js +14 -11
  4. package/dist/@likec4/diagrams/diagram/Nodes.js +212 -23
  5. package/dist/@likec4/diagrams/diagram/icons/ZoomIn.js +2 -1
  6. package/dist/@likec4/diagrams/diagram/shapes/Compound.js +2 -1
  7. package/dist/@likec4/diagrams/diagram/shapes/Edge.js +1 -1
  8. package/dist/@likec4/diagrams/diagram/state/atoms.js +35 -60
  9. package/dist/@likec4/diagrams/diagram/utils.js +14 -0
  10. package/dist/@likec4/diagrams/hooks/useDiagramApi.js +4 -5
  11. package/dist/@likec4/diagrams/hooks/useImageLoader.js +1 -1
  12. package/dist/__app__/likec4.css +8 -5
  13. package/dist/__app__/src/App.jsx +9 -11
  14. package/dist/__app__/src/components/CopyToClipboard.jsx +29 -0
  15. package/dist/__app__/src/components/CopyToClipboard.module.css +16 -0
  16. package/dist/__app__/src/components/DiagramNotFound.jsx +2 -2
  17. package/dist/__app__/src/components/index.js +2 -1
  18. package/dist/__app__/src/components/sidebar/Sidebar.jsx +1 -1
  19. package/dist/__app__/src/components/sidebar/styles.module.css +4 -1
  20. package/dist/__app__/src/components/view-page/DisplayModeSelector.jsx +15 -9
  21. package/dist/__app__/src/components/view-page/Header.jsx +97 -0
  22. package/dist/__app__/src/components/view-page/Header.module.css +24 -0
  23. package/dist/__app__/src/components/view-page/ShareDialog.jsx +23 -15
  24. package/dist/__app__/src/components/view-page/ViewActions.jsx +69 -0
  25. package/dist/__app__/src/data/atoms.js +4 -22
  26. package/dist/__app__/src/data/hooks.js +5 -4
  27. package/dist/__app__/src/data/index-page.js +22 -0
  28. package/dist/__app__/src/likec4-views.js +1 -1
  29. package/dist/__app__/src/pages/index-page/index.jsx +99 -0
  30. package/dist/__app__/src/pages/index-page/index.module.css +20 -0
  31. package/dist/__app__/src/pages/index.js +1 -1
  32. package/dist/__app__/src/pages/useTransparentBackground.js +2 -2
  33. package/dist/__app__/src/pages/view-page/ViewAsReact.jsx +60 -0
  34. package/dist/__app__/src/pages/view-page/index.js +11 -0
  35. package/dist/__app__/src/pages/view-page/other-formats/ViewAsD2.jsx +18 -0
  36. package/dist/__app__/src/pages/view-page/other-formats/ViewAsDot.jsx +33 -0
  37. package/dist/__app__/src/pages/view-page/other-formats/ViewAsMmd.jsx +18 -0
  38. package/dist/__app__/src/pages/view-page/other-formats.jsx +43 -0
  39. package/dist/__app__/src/pages/view-page/view-page.module.css +81 -0
  40. package/dist/__app__/src/pages/view.page.jsx +12 -65
  41. package/dist/__app__/src/router.js +90 -20
  42. package/dist/__app__/src/utils/utils.js +1 -2
  43. package/dist/__app__/tsconfig.json +1 -0
  44. package/dist/cli/index.js +288 -207
  45. package/package.json +17 -17
  46. package/dist/__app__/postcss.config.cjs +0 -11
  47. package/dist/__app__/src/components/view-page/ViewActionsToolbar.jsx +0 -66
  48. package/dist/__app__/src/pages/index.module.css +0 -11
  49. package/dist/__app__/src/pages/index.page.jsx +0 -57
  50. package/dist/__app__/src/pages/view-page.module.css +0 -30
  51. 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.48.0",
3
+ "version": "0.50.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",
@@ -42,7 +42,8 @@
42
42
  "cli:serve": "tsx watch src/cli/index.ts serve dev",
43
43
  "cli:build": "tsx src/cli/index.ts build -o dev/dist dev",
44
44
  "cli:preview": "tsx src/cli/index.ts preview -o dev/dist dev",
45
- "cli:export": "tsx src/cli/index.ts export png -o dev/export dev"
45
+ "cli:export": "tsx src/cli/index.ts export png -o dev/export dev",
46
+ "cli:export:json": "tsx src/cli/index.ts export json -o dev/export/likec4.json dev"
46
47
  },
47
48
  "dependencies": {
48
49
  "rambdax": "^9.1.1",
@@ -67,32 +68,30 @@
67
68
  "classnames": "^2.3.2",
68
69
  "clsx": "^1.2.1",
69
70
  "nanostores": "^0.9.5",
70
- "playwright-core": "^1.40.0",
71
+ "playwright-core": "^1.40.1",
71
72
  "postcss": "^8.4.31",
73
+ "postcss-nested": "^6.0.1",
72
74
  "prop-types": "^15.8.1",
73
- "radix-themes-tw": "^0.0.8",
74
75
  "react": "^18.2.0",
75
76
  "react-accessible-treeview": "^2.8.0",
76
77
  "react-dom": "^18.2.0",
77
- "tailwind-merge": "^1.14.0",
78
- "tailwindcss": "^3.3.5",
79
- "vite": "^4.5.0"
78
+ "vite": "^5.0.4"
80
79
  },
81
80
  "devDependencies": {
82
- "@likec4/core": "0.48.0",
83
- "@likec4/diagrams": "0.48.0",
84
- "@likec4/generators": "0.48.0",
85
- "@likec4/language-server": "0.48.0",
86
- "@likec4/layouts": "0.48.0",
87
- "@types/node": "^20.8.7",
81
+ "@likec4/core": "0.50.0",
82
+ "@likec4/diagrams": "0.50.0",
83
+ "@likec4/generators": "0.50.0",
84
+ "@likec4/language-server": "0.50.0",
85
+ "@likec4/layouts": "0.50.0",
86
+ "@types/node": "^20.10.1",
88
87
  "@types/prop-types": "^15.7.10",
89
88
  "@types/react": "^18.2.0",
90
89
  "@types/react-dom": "^18.2.0",
91
90
  "@types/yargs": "^17.0.31",
92
91
  "boxen": "^7.1.1",
93
92
  "ci-info": "^3.9.0",
94
- "esbuild": "^0.19.5",
95
- "esbuild-node-externals": "^1.9.0",
93
+ "esbuild": "^0.19.7",
94
+ "esbuild-node-externals": "^1.11.0",
96
95
  "execa": "^8.0.1",
97
96
  "get-port": "^7.0.0",
98
97
  "json5": "^2.2.3",
@@ -102,7 +101,8 @@
102
101
  "pretty-ms": "^8.0.0",
103
102
  "strip-indent": "^4.0.0",
104
103
  "tsx": "^4.1.3",
105
- "typescript": "^5.2.2",
104
+ "type-fest": "^4.8.2",
105
+ "typescript": "^5.3.2",
106
106
  "typescript-plugin-css-modules": "^5.0.2",
107
107
  "vitest": "^0.34.6",
108
108
  "yargs": "^17.7.2"
@@ -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
- };