@likec4/diagram 1.29.1 → 1.31.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.
- package/README.md +324 -5
- package/bundle/chunk-BBzMXzCg.js +21383 -0
- package/bundle/custom.js +62 -0
- package/bundle/index.js +17459 -38163
- package/dist/LikeC4CustomColors.js +2 -2
- package/dist/LikeC4Diagram.d.ts +1 -1
- package/dist/LikeC4Diagram.js +4 -2
- package/dist/LikeC4Diagram.props.d.ts +6 -1
- package/dist/LikeC4ModelProvider.d.ts +3 -3
- package/dist/LikeC4ModelProvider.js +0 -1
- package/dist/StaticLikeC4Diagram.d.ts +1 -1
- package/dist/base/BaseXYFlow.js +3 -3
- package/dist/base/primitives/compound/CompoundActionButton.d.ts +3 -2
- package/dist/base/primitives/compound/CompoundDetailsButton.d.ts +3 -2
- package/dist/base/primitives/compound/CompoundNodeContainer.d.ts +7 -3
- package/dist/base/primitives/compound/CompoundNodeContainer.js +3 -2
- package/dist/base/primitives/customEdge.d.ts +2 -35
- package/dist/base/primitives/customEdge.js +2 -2
- package/dist/base/primitives/customNode.d.ts +2 -2
- package/dist/base/primitives/customNode.js +9 -2
- package/dist/base/primitives/edge/EdgeContainer.js +0 -1
- package/dist/base/primitives/edge/EdgeLabel.js +0 -1
- package/dist/base/primitives/edge/EdgeLabelContainer.js +0 -2
- package/dist/base/primitives/edge/EdgePath.js +2 -2
- package/dist/base/primitives/element/ElementNodeContainer.d.ts +24 -22
- package/dist/base/primitives/element/ElementNodeContainer.js +66 -68
- package/dist/base/primitives/element/ElementShape.d.ts +8 -4
- package/dist/base/primitives/element/ElementShape.js +4 -3
- package/dist/base/primitives/element/ElementTitle.css.d.ts +1 -1
- package/dist/base/primitives/element/ElementTitle.js +0 -1
- package/dist/base/types.d.ts +5 -5
- package/dist/bundle/LikeC4View.js +6 -3
- package/dist/bundle/LikeC4View.props.d.ts +5 -1
- package/dist/bundle/ReactLikeC4.js +1 -2
- package/dist/bundle/ShadowRoot.js +3 -3
- package/dist/bundle/custom.d.ts +1 -0
- package/dist/bundle/index.d.ts +3 -1
- package/dist/bundle/index.js +9 -0
- package/dist/bundle/styles.css.js +5 -5
- package/dist/components/SearchControl.js +2 -2
- package/dist/context/ControlsCustomLayout.js +0 -1
- package/dist/context/DiagramEventHandlers.js +5 -5
- package/dist/context/DiagramFeatures.d.ts +2 -4
- package/dist/context/DiagramFeatures.js +15 -16
- package/dist/context/EnsureMantine.js +9 -4
- package/dist/context/FramerMotionConfig.js +0 -1
- package/dist/context/IconRenderer.js +7 -7
- package/dist/context/ReduceGraphics.js +6 -6
- package/dist/context/RootContainer.js +5 -5
- package/dist/context/index.d.ts +1 -1
- package/dist/custom/components.d.ts +5 -0
- package/dist/custom/customNodes.d.ts +218 -0
- package/dist/custom/hooks.d.ts +10 -0
- package/dist/custom/index.d.ts +4 -0
- package/dist/hooks/safeContext.js +3 -3
- package/dist/hooks/useCurrentViewId.d.ts +5 -1
- package/dist/hooks/useCurrentViewId.js +1 -2
- package/dist/hooks/useDiagram.d.ts +14 -12544
- package/dist/hooks/useDiagram.js +3 -5
- package/dist/hooks/useMantinePortalProps.js +2 -2
- package/dist/hooks/useSetState.js +3 -3
- package/dist/hooks/useUpdateEffect.js +0 -1
- package/dist/hooks/useXYFlow.d.ts +64 -64
- package/dist/hooks/useXYFlow.js +2 -2
- package/dist/index.d.ts +2 -4
- package/dist/index.js +8 -3
- package/dist/likec4diagram/DiagramUI.js +2 -2
- package/dist/likec4diagram/DiagramXYFlow.d.ts +1 -1
- package/dist/likec4diagram/DiagramXYFlow.js +25 -7
- package/dist/likec4diagram/custom/edges/NotePopover.js +2 -2
- package/dist/likec4diagram/custom/edges/RelationshipEdge.d.ts +9 -13
- package/dist/likec4diagram/custom/edges/RelationshipEdge.js +8 -8
- package/dist/likec4diagram/custom/edges/RelationshipsDropdownMenu.js +14 -12
- package/dist/likec4diagram/custom/index.d.ts +15 -19
- package/dist/likec4diagram/custom/index.js +3 -3
- package/dist/likec4diagram/custom/nodes/CompoundActions.js +2 -2
- package/dist/likec4diagram/custom/nodes/ElementActions.d.ts +27 -4
- package/dist/likec4diagram/custom/nodes/ElementActions.js +67 -53
- package/dist/likec4diagram/custom/nodes/index.d.ts +8 -0
- package/dist/likec4diagram/custom/nodes/nodes.d.ts +10 -0
- package/dist/likec4diagram/custom/nodes/{nodeTypes.js → nodes.js} +39 -39
- package/dist/likec4diagram/custom/nodes/toolbar/ColorButton.js +2 -2
- package/dist/likec4diagram/custom/nodes/toolbar/CompoundToolbar.js +6 -7
- package/dist/likec4diagram/custom/nodes/toolbar/ElementToolbar.js +3 -3
- package/dist/likec4diagram/custom/nodes/toolbar/Toolbar.d.ts +3 -2
- package/dist/likec4diagram/custom/nodes/toolbar/Toolbar.js +2 -2
- package/dist/likec4diagram/custom/nodes/toolbar/_shared.d.ts +2 -2
- package/dist/likec4diagram/custom/nodes/toolbar/_shared.js +2 -2
- package/dist/likec4diagram/types.d.ts +15 -7
- package/dist/likec4diagram/ui/controls/ChangeAutoLayoutButton.js +4 -4
- package/dist/likec4diagram/ui/controls/Controls.js +2 -2
- package/dist/likec4diagram/ui/diagram-title/DiagramTitlePanel.js +2 -2
- package/dist/likec4diagram/ui/notation/NotationPanel.js +6 -8
- package/dist/likec4diagram/ui/search/ElementsColumn.js +6 -7
- package/dist/likec4diagram/ui/search/LikeC4Search.js +3 -3
- package/dist/likec4diagram/ui/search/SearchInput.js +0 -1
- package/dist/likec4diagram/ui/search/_shared.css.d.ts +1 -1
- package/dist/likec4diagram/ui/search/state.js +3 -4
- package/dist/likec4diagram/ui/walkthrough/DynamicViewWalkthrough.js +4 -4
- package/dist/likec4diagram/useLayoutConstraints.js +3 -4
- package/dist/likec4diagram/useViewToNodesEdges.js +2 -0
- package/dist/likec4model/LikeC4ModelContext.d.ts +2 -2
- package/dist/likec4model/LikeC4ModelContext.js +2 -2
- package/dist/likec4model/useLikeC4ElementsTree.d.ts +1 -1
- package/dist/likec4model/useLikeC4ElementsTree.js +3 -3
- package/dist/likec4model/useLikeC4Model.d.ts +1 -1
- package/dist/likec4model/useLikeC4Model.js +2 -2
- package/dist/overlays/Overlays.d.ts +2 -3
- package/dist/overlays/Overlays.js +5 -6
- package/dist/overlays/element-details/ElementDetailsCard.css.js +13 -9
- package/dist/overlays/element-details/ElementDetailsCard.js +98 -105
- package/dist/overlays/element-details/TabPanelDeployments.js +4 -4
- package/dist/overlays/element-details/TabPanelRelationships.js +2 -2
- package/dist/overlays/element-details/TabPanelStructure.js +3 -3
- package/dist/overlays/element-details/actor.d.ts +6905 -19690
- package/dist/overlays/element-details/actor.js +0 -2
- package/dist/overlays/element-details/actorContext.js +3 -3
- package/dist/overlays/overlay/Overlay.d.ts +11 -1
- package/dist/overlays/overlay/Overlay.js +8 -8
- package/dist/overlays/overlaysActor.d.ts +4 -2
- package/dist/overlays/overlaysActor.js +2 -1
- package/dist/overlays/relationship-details/RelationshipDetails.d.ts +4 -8
- package/dist/overlays/relationship-details/RelationshipDetails.js +12 -12
- package/dist/overlays/relationship-details/SelectEdge.js +2 -3
- package/dist/overlays/relationship-details/_types.d.ts +6 -5
- package/dist/overlays/relationship-details/actor.d.ts +3 -3
- package/dist/overlays/relationship-details/compute.js +3 -3
- package/dist/overlays/relationship-details/custom/edgeTypes.d.ts +4 -8
- package/dist/overlays/relationship-details/custom/edgeTypes.js +2 -2
- package/dist/overlays/relationship-details/custom/nodeTypes.d.ts +3 -31
- package/dist/overlays/relationship-details/hooks.d.ts +27 -27
- package/dist/overlays/relationship-details/hooks.js +4 -4
- package/dist/overlays/relationship-details/layout.js +2 -3
- package/dist/overlays/relationships-browser/RelationshipsBrowser.d.ts +4 -8
- package/dist/overlays/relationships-browser/RelationshipsBrowser.js +8 -8
- package/dist/overlays/relationships-browser/SelectElement.js +5 -5
- package/dist/overlays/relationships-browser/_types.d.ts +6 -5
- package/dist/overlays/relationships-browser/actor.d.ts +63 -428
- package/dist/overlays/relationships-browser/custom/edgeTypes.d.ts +4 -8
- package/dist/overlays/relationships-browser/custom/edgeTypes.js +2 -2
- package/dist/overlays/relationships-browser/custom/nodeTypes.d.ts +10 -14
- package/dist/overlays/relationships-browser/custom/nodeTypes.js +1 -2
- package/dist/overlays/relationships-browser/hooks.d.ts +4 -61
- package/dist/overlays/relationships-browser/hooks.js +4 -4
- package/dist/overlays/relationships-browser/layout.js +3 -4
- package/dist/state/DiagramActorProvider.js +3 -3
- package/dist/state/diagram-machine.d.ts +186 -10369
- package/dist/state/diagram-machine.js +2 -1
- package/dist/state/hotkeyActor.d.ts +4 -2
- package/dist/state/syncManualLayoutActor.d.ts +14 -3
- package/dist/state/syncManualLayoutActor.js +2 -1
- package/dist/state/types.d.ts +5 -4
- package/dist/state/utils.d.ts +1 -1
- package/dist/styles-font.css +1 -0
- package/dist/styles-min.css +1 -0
- package/dist/styles-xyflow.css +1 -0
- package/dist/styles.css +1 -0
- package/dist/styles.css2.js +3 -0
- package/package.json +46 -21
- package/panda.buildinfo.json +979 -0
- package/src/LikeC4Diagram.props.ts +7 -1
- package/src/LikeC4Diagram.tsx +2 -0
- package/src/LikeC4ModelProvider.tsx +3 -3
- package/src/StaticLikeC4Diagram.tsx +1 -0
- package/src/base/Background.tsx +0 -4
- package/src/base/primitives/compound/CompoundActionButton.tsx +7 -4
- package/src/base/primitives/compound/CompoundDetailsButton.tsx +7 -4
- package/src/base/primitives/compound/CompoundNodeContainer.tsx +8 -7
- package/src/base/primitives/customEdge.ts +1 -1
- package/src/base/primitives/{customNode.ts → customNode.tsx} +11 -3
- package/src/base/primitives/element/ElementNodeContainer.tsx +87 -80
- package/src/base/primitives/element/ElementShape.tsx +11 -10
- package/src/base/types.ts +28 -33
- package/src/bundle/LikeC4View.props.ts +6 -1
- package/src/bundle/LikeC4View.tsx +3 -0
- package/src/bundle/ReactLikeC4.tsx +1 -1
- package/src/bundle/custom.ts +1 -0
- package/src/bundle/index.ts +20 -1
- package/src/bundle/styles.css.ts +1 -1
- package/src/components/SearchControl.tsx +1 -1
- package/src/context/DiagramFeatures.tsx +12 -8
- package/src/context/EnsureMantine.tsx +13 -3
- package/src/context/IconRenderer.tsx +4 -2
- package/src/context/ReduceGraphics.tsx +6 -6
- package/src/context/index.ts +0 -1
- package/src/custom/components.ts +47 -0
- package/src/custom/customNodes.tsx +244 -0
- package/src/custom/hooks.ts +35 -0
- package/src/custom/index.ts +5 -0
- package/src/hooks/useCurrentViewId.ts +9 -1
- package/src/hooks/useDiagram.ts +30 -9
- package/src/index.ts +4 -8
- package/src/likec4diagram/DiagramXYFlow.tsx +28 -5
- package/src/likec4diagram/custom/edges/RelationshipEdge.tsx +1 -1
- package/src/likec4diagram/custom/edges/RelationshipsDropdownMenu.tsx +9 -7
- package/src/likec4diagram/custom/{index.tsx → index.ts} +2 -2
- package/src/likec4diagram/custom/nodes/CompoundActions.tsx +2 -2
- package/src/likec4diagram/custom/nodes/ElementActions.tsx +100 -57
- package/src/likec4diagram/custom/nodes/index.ts +17 -0
- package/src/likec4diagram/custom/nodes/{nodeTypes.tsx → nodes.tsx} +52 -36
- package/src/likec4diagram/custom/nodes/toolbar/CompoundToolbar.tsx +3 -4
- package/src/likec4diagram/custom/nodes/toolbar/ElementToolbar.tsx +3 -3
- package/src/likec4diagram/custom/nodes/toolbar/Toolbar.tsx +5 -4
- package/src/likec4diagram/types.ts +19 -9
- package/src/likec4diagram/ui/diagram-title/DiagramTitlePanel.tsx +1 -1
- package/src/likec4diagram/ui/notation/NotationPanel.tsx +1 -2
- package/src/likec4diagram/ui/search/ElementsColumn.tsx +2 -4
- package/src/likec4diagram/ui/walkthrough/DynamicViewWalkthrough.tsx +1 -1
- package/src/likec4diagram/useViewToNodesEdges.ts +2 -0
- package/src/likec4model/LikeC4ModelContext.ts +2 -2
- package/src/likec4model/useLikeC4ElementsTree.ts +3 -1
- package/src/likec4model/useLikeC4Model.ts +1 -1
- package/src/overlays/Overlays.tsx +2 -3
- package/src/overlays/element-details/ElementDetailsCard.css.ts +14 -22
- package/src/overlays/element-details/ElementDetailsCard.tsx +18 -16
- package/src/overlays/overlay/Overlay.tsx +3 -4
- package/src/overlays/overlaysActor.ts +4 -3
- package/src/overlays/relationship-details/RelationshipDetails.tsx +1 -1
- package/src/overlays/relationship-details/SelectEdge.tsx +0 -2
- package/src/overlays/relationship-details/_types.ts +16 -13
- package/src/overlays/relationship-details/custom/edgeTypes.tsx +2 -2
- package/src/overlays/relationships-browser/_types.ts +18 -15
- package/src/overlays/relationships-browser/actor.ts +2 -2
- package/src/overlays/relationships-browser/custom/edgeTypes.tsx +2 -2
- package/src/overlays/relationships-browser/custom/nodeTypes.tsx +1 -2
- package/src/state/DiagramActorProvider.tsx +2 -2
- package/src/state/diagram-machine.ts +13 -8
- package/src/state/hotkeyActor.ts +4 -2
- package/src/state/syncManualLayoutActor.ts +9 -3
- package/src/state/types.ts +9 -3
- package/src/state/utils.ts +3 -3
- package/src/styles-min.css +2 -0
- package/src/styles-xyflow.css +1 -0
- package/dist/_virtual/_commonjsHelpers.js +0 -5
- package/dist/_virtual/default-map.js +0 -7
- package/dist/_virtual/index.js +0 -5
- package/dist/_virtual/index2.js +0 -3
- package/dist/_virtual/react.production.js +0 -3
- package/dist/_virtual/set.js +0 -5
- package/dist/_virtual/set2.js +0 -3
- package/dist/base/xyflowMachine.d.ts +0 -212
- package/dist/likec4diagram/custom/nodes/nodeTypes.d.ts +0 -8
- package/dist/node_modules/.pnpm/mnemonist@0.40.3_patch_hash_5c12abb43fcff6fd81e53021b89075d53249640d165a2556cc1e58d71201a13a/node_modules/mnemonist/default-map.js +0 -172
- package/dist/node_modules/.pnpm/mnemonist@0.40.3_patch_hash_5c12abb43fcff6fd81e53021b89075d53249640d165a2556cc1e58d71201a13a/node_modules/mnemonist/set.js +0 -369
- package/dist/node_modules/.pnpm/react@19.1.0/node_modules/react/cjs/react.production.js +0 -556
- package/dist/node_modules/.pnpm/react@19.1.0/node_modules/react/index.js +0 -15
- package/dist/packages/core/src/compute-view/relationships-view/compute.js +0 -123
- package/dist/packages/core/src/compute-view/relationships-view/utils.js +0 -68
- package/dist/packages/core/src/errors/index.js +0 -15
- package/dist/packages/core/src/model/connection/model/ConnectionModel.js +0 -121
- package/dist/packages/core/src/model/connection/model/find.js +0 -39
- package/dist/packages/core/src/model/connection/ops.js +0 -7
- package/dist/packages/core/src/utils/const.js +0 -3
- package/dist/packages/core/src/utils/fqn.js +0 -51
- package/dist/packages/core/src/utils/guards.js +0 -7
- package/dist/packages/core/src/utils/iterable/filter.js +0 -21
- package/dist/packages/core/src/utils/iterable/find.js +0 -21
- package/dist/packages/core/src/utils/iterable/map.js +0 -18
- package/dist/packages/core/src/utils/iterable/some.js +0 -21
- package/dist/packages/core/src/utils/iterable/to.js +0 -14
- package/dist/packages/core/src/utils/set.js +0 -48
- package/dist/packages/core/src/utils/string-hash.js +0 -13
- package/dist/styles.css.js +0 -3
- package/src/base/xyflowMachine.ts +0 -75
- /package/dist/{bundle/font.css.js → styles-font.css2.js} +0 -0
- /package/src/{bundle/font.css → styles-font.css} +0 -0
|
@@ -11,8 +11,9 @@ import type {
|
|
|
11
11
|
import type { ReactFlowProps as XYFlowProps } from '@xyflow/react'
|
|
12
12
|
import type { MouseEvent as ReactMouseEvent, ReactNode } from 'react'
|
|
13
13
|
import type { ControlsCustomLayout } from './context/ControlsCustomLayout'
|
|
14
|
+
import type { CustomNodes } from './custom/customNodes'
|
|
14
15
|
|
|
15
|
-
export type { WhereOperator }
|
|
16
|
+
export type { CustomNodes, WhereOperator }
|
|
16
17
|
|
|
17
18
|
export type DiagramNodeWithNavigate<ID = ViewId> = Omit<DiagramNode, 'navigateTo'> & {
|
|
18
19
|
navigateTo: ID
|
|
@@ -222,6 +223,11 @@ export interface LikeC4DiagramProperties {
|
|
|
222
223
|
*/
|
|
223
224
|
renderControls?: ControlsCustomLayout | undefined
|
|
224
225
|
|
|
226
|
+
/**
|
|
227
|
+
* Override node renderers
|
|
228
|
+
*/
|
|
229
|
+
renderNodes?: CustomNodes | undefined
|
|
230
|
+
|
|
225
231
|
/**
|
|
226
232
|
* Dynamic filter, applies both to nodes and edges
|
|
227
233
|
*/
|
package/src/LikeC4Diagram.tsx
CHANGED
|
@@ -59,6 +59,7 @@ export function LikeC4Diagram({
|
|
|
59
59
|
renderControls,
|
|
60
60
|
where,
|
|
61
61
|
reactFlowProps = {},
|
|
62
|
+
renderNodes,
|
|
62
63
|
children,
|
|
63
64
|
}: LikeC4DiagramProps) {
|
|
64
65
|
const hasLikec4model = !!useLikeC4Model()
|
|
@@ -149,6 +150,7 @@ export function LikeC4Diagram({
|
|
|
149
150
|
nodesSelectable={nodesSelectable}
|
|
150
151
|
background={background}
|
|
151
152
|
reactFlowProps={reactFlowProps}
|
|
153
|
+
renderNodes={renderNodes}
|
|
152
154
|
>
|
|
153
155
|
{children}
|
|
154
156
|
</LikeC4DiagramXYFlow>
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import type { LikeC4Model } from '@likec4/core'
|
|
1
|
+
import type { AnyAux, LikeC4Model } from '@likec4/core/model'
|
|
2
2
|
import { type PropsWithChildren } from 'react'
|
|
3
3
|
import { LikeC4ModelContext } from './likec4model/LikeC4ModelContext'
|
|
4
4
|
|
|
5
5
|
export type LikeC4ModelProviderProps = PropsWithChildren<{
|
|
6
|
-
likec4model: LikeC4Model
|
|
6
|
+
likec4model: LikeC4Model<AnyAux>
|
|
7
7
|
}>
|
|
8
8
|
|
|
9
9
|
/**
|
|
@@ -11,7 +11,7 @@ export type LikeC4ModelProviderProps = PropsWithChildren<{
|
|
|
11
11
|
*/
|
|
12
12
|
export function LikeC4ModelProvider({
|
|
13
13
|
children,
|
|
14
|
-
likec4model
|
|
14
|
+
likec4model,
|
|
15
15
|
}: LikeC4ModelProviderProps) {
|
|
16
16
|
return (
|
|
17
17
|
<LikeC4ModelContext.Provider value={likec4model}>
|
package/src/base/Background.tsx
CHANGED
|
@@ -1,14 +1,10 @@
|
|
|
1
1
|
import { nonexhaustive } from '@likec4/core'
|
|
2
2
|
import { type BackgroundProps, Background as XYFlowBackground, BackgroundVariant } from '@xyflow/react'
|
|
3
|
-
import type { OverrideProperties } from 'type-fest'
|
|
4
3
|
|
|
5
4
|
export type XYBackgroundVariant = 'dots' | 'lines' | 'cross'
|
|
6
5
|
export type XYBackground =
|
|
7
6
|
| XYBackgroundVariant
|
|
8
7
|
| BackgroundProps
|
|
9
|
-
// | OverrideProperties<BackgroundProps, {
|
|
10
|
-
// variant: XYBackgroundVariant
|
|
11
|
-
// }>
|
|
12
8
|
|
|
13
9
|
export type XYBackgroundProps = {
|
|
14
10
|
background: XYBackground
|
|
@@ -4,14 +4,17 @@ import { ActionIcon, Box } from '@mantine/core'
|
|
|
4
4
|
import { useDebouncedValue } from '@mantine/hooks'
|
|
5
5
|
import { IconZoomScan } from '@tabler/icons-react'
|
|
6
6
|
import * as m from 'motion/react-m'
|
|
7
|
+
import type { Simplify } from 'type-fest'
|
|
7
8
|
import { stopPropagation } from '../../../utils/xyflow'
|
|
8
9
|
import type { NodeProps } from '../../types'
|
|
9
10
|
import { compoundActionBtn } from './actionbtns.css'
|
|
10
11
|
|
|
11
|
-
type CompoundActionButtonProps =
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
type CompoundActionButtonProps = Simplify<
|
|
13
|
+
NodeProps<{}> & {
|
|
14
|
+
icon?: React.ReactNode
|
|
15
|
+
onClick: (e: React.MouseEvent) => void
|
|
16
|
+
}
|
|
17
|
+
>
|
|
15
18
|
|
|
16
19
|
export function CompoundActionButton({
|
|
17
20
|
data: {
|
|
@@ -4,14 +4,17 @@ import { ActionIcon, Box } from '@mantine/core'
|
|
|
4
4
|
import { useDebouncedValue } from '@mantine/hooks'
|
|
5
5
|
import { IconId } from '@tabler/icons-react'
|
|
6
6
|
import * as m from 'motion/react-m'
|
|
7
|
+
import type { Simplify } from 'type-fest'
|
|
7
8
|
import { stopPropagation } from '../../../utils/xyflow'
|
|
8
9
|
import type { NodeProps } from '../../types'
|
|
9
10
|
import { compoundActionBtn } from './actionbtns.css'
|
|
10
11
|
|
|
11
|
-
type CompoundDetailsButtonProps =
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
type CompoundDetailsButtonProps = Simplify<
|
|
13
|
+
NodeProps<{}> & {
|
|
14
|
+
icon?: React.ReactNode
|
|
15
|
+
onClick: (e: React.MouseEvent) => void
|
|
16
|
+
}
|
|
17
|
+
>
|
|
15
18
|
|
|
16
19
|
export function CompoundDetailsButton({
|
|
17
20
|
data: {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { Color, ElementStyle } from '@likec4/core/types'
|
|
2
2
|
import { css, cx } from '@likec4/styles/css'
|
|
3
3
|
import { type HTMLMotionProps, m } from 'motion/react'
|
|
4
4
|
import { type PropsWithChildren } from 'react'
|
|
@@ -7,12 +7,11 @@ import { useIsReducedGraphics } from '../../../hooks/useReducedGraphics'
|
|
|
7
7
|
import type { NodeProps } from '../../types'
|
|
8
8
|
import * as styles from './CompoundNodeContainer.css'
|
|
9
9
|
|
|
10
|
-
type RequiredData =
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
>
|
|
10
|
+
export type RequiredData = {
|
|
11
|
+
color: Color
|
|
12
|
+
depth: number
|
|
13
|
+
style: ElementStyle
|
|
14
|
+
}
|
|
16
15
|
|
|
17
16
|
type CompoundNodeContainerProps =
|
|
18
17
|
& Omit<HTMLMotionProps<'div'>, 'children'>
|
|
@@ -29,6 +28,7 @@ export function CompoundNodeContainer({
|
|
|
29
28
|
...data
|
|
30
29
|
},
|
|
31
30
|
},
|
|
31
|
+
className,
|
|
32
32
|
children,
|
|
33
33
|
style,
|
|
34
34
|
...rest
|
|
@@ -67,6 +67,7 @@ export function CompoundNodeContainer({
|
|
|
67
67
|
}),
|
|
68
68
|
classes.root,
|
|
69
69
|
'likec4-compound-node',
|
|
70
|
+
className,
|
|
70
71
|
)}
|
|
71
72
|
initial={false}
|
|
72
73
|
data-likec4-hovered={isHovered}
|
|
@@ -29,6 +29,6 @@ export const edgePropsEqual = <P extends Record<string, unknown> = Base.EdgeData
|
|
|
29
29
|
|
|
30
30
|
export function customEdge<P extends Record<string, unknown> = Base.NodeData>(
|
|
31
31
|
Edge: FunctionComponent<EdgeProps<P>>,
|
|
32
|
-
) {
|
|
32
|
+
): FunctionComponent<EdgeProps<P>> {
|
|
33
33
|
return memo(Edge, edgePropsEqual)
|
|
34
34
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { deepEqual as eq } from 'fast-equals'
|
|
2
2
|
import { type FunctionComponent, memo } from 'react'
|
|
3
3
|
import type { Base, NodeProps } from '../types'
|
|
4
|
+
import { DefaultHandles } from './NodeHandles'
|
|
4
5
|
|
|
5
6
|
export const nodePropsEqual = <P extends Record<string, unknown> = Base.NodeData>(
|
|
6
7
|
prev: NodeProps<P>,
|
|
@@ -18,8 +19,15 @@ export const nodePropsEqual = <P extends Record<string, unknown> = Base.NodeData
|
|
|
18
19
|
&& eq(prev.data, next.data)
|
|
19
20
|
)
|
|
20
21
|
|
|
21
|
-
export function customNode<P extends Record<string, unknown> =
|
|
22
|
-
Node: FunctionComponent<NodeProps<P>>,
|
|
22
|
+
export function customNode<P extends Record<string, unknown> = {}, NodeType extends string = string>(
|
|
23
|
+
Node: FunctionComponent<NodeProps<P, NodeType>>,
|
|
23
24
|
) {
|
|
24
|
-
|
|
25
|
+
const NodeComponent = memo((props: NodeProps<P, NodeType>) => (
|
|
26
|
+
<>
|
|
27
|
+
<Node {...props} />
|
|
28
|
+
<DefaultHandles />
|
|
29
|
+
</>
|
|
30
|
+
), nodePropsEqual)
|
|
31
|
+
NodeComponent.displayName = 'Node'
|
|
32
|
+
return NodeComponent
|
|
25
33
|
}
|
|
@@ -1,29 +1,33 @@
|
|
|
1
1
|
import {
|
|
2
|
-
type
|
|
2
|
+
type Color,
|
|
3
|
+
type ElementShape,
|
|
3
4
|
type ElementStyle,
|
|
4
5
|
DefaultPaddingSize,
|
|
5
6
|
DefaultShapeSize,
|
|
6
7
|
DefaultTextSize,
|
|
7
|
-
} from '@likec4/core'
|
|
8
|
+
} from '@likec4/core/types'
|
|
8
9
|
import { css, cx } from '@likec4/styles/css'
|
|
9
|
-
import
|
|
10
|
+
import type { LayoutProps } from 'motion/react'
|
|
10
11
|
import * as m from 'motion/react-m'
|
|
11
|
-
import { type
|
|
12
|
+
import { type CSSProperties, type ReactNode, forwardRef } from 'react'
|
|
12
13
|
import type { NodeProps } from '../../types'
|
|
13
14
|
import * as styles from './ElementNodeContainer.css'
|
|
14
15
|
|
|
15
|
-
type RequiredData =
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
>
|
|
16
|
+
export type RequiredData = {
|
|
17
|
+
color: Color
|
|
18
|
+
shape: ElementShape
|
|
19
|
+
style?: ElementStyle
|
|
20
|
+
}
|
|
21
21
|
|
|
22
|
-
type ElementNodeContainerProps =
|
|
23
|
-
&
|
|
24
|
-
& PropsWithChildren<{
|
|
22
|
+
export type ElementNodeContainerProps =
|
|
23
|
+
& {
|
|
25
24
|
nodeProps: NodeProps<RequiredData>
|
|
26
|
-
|
|
25
|
+
children?: ReactNode | undefined
|
|
26
|
+
className?: string | undefined
|
|
27
|
+
style?: CSSProperties | undefined
|
|
28
|
+
[key: `data-${string}`]: string | undefined
|
|
29
|
+
}
|
|
30
|
+
& LayoutProps
|
|
27
31
|
|
|
28
32
|
export function nodeSizes({
|
|
29
33
|
size,
|
|
@@ -49,73 +53,76 @@ export function nodeSizes({
|
|
|
49
53
|
}
|
|
50
54
|
}
|
|
51
55
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
56
|
+
/**
|
|
57
|
+
* Top-level primitive to compose leaf nodes renderers.
|
|
58
|
+
* This container provides the state via data-* attributes
|
|
59
|
+
*/
|
|
60
|
+
export const ElementNodeContainer = forwardRef<HTMLDivElement, ElementNodeContainerProps>(({
|
|
61
|
+
nodeProps: {
|
|
62
|
+
selected = false,
|
|
63
|
+
selectable = false,
|
|
64
|
+
data: {
|
|
65
|
+
hovered: isHovered = false,
|
|
66
|
+
dimmed: isDimmed = false,
|
|
67
|
+
...data
|
|
62
68
|
},
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
69
|
+
},
|
|
70
|
+
className,
|
|
71
|
+
style,
|
|
72
|
+
children,
|
|
73
|
+
...rest
|
|
74
|
+
}, ref) => {
|
|
75
|
+
let scale = 1
|
|
76
|
+
switch (true) {
|
|
77
|
+
case isHovered:
|
|
78
|
+
scale = 1.05
|
|
79
|
+
break
|
|
80
|
+
case selected:
|
|
81
|
+
scale = 1.02
|
|
82
|
+
break
|
|
83
|
+
}
|
|
76
84
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
85
|
+
const {
|
|
86
|
+
size,
|
|
87
|
+
padding,
|
|
88
|
+
textSize,
|
|
89
|
+
} = nodeSizes(data.style ?? {})
|
|
82
90
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
)
|
|
91
|
+
return (
|
|
92
|
+
<m.div
|
|
93
|
+
ref={ref}
|
|
94
|
+
className={cx(
|
|
95
|
+
css({
|
|
96
|
+
likec4Palette: data.color,
|
|
97
|
+
}),
|
|
98
|
+
styles.container,
|
|
99
|
+
'group',
|
|
100
|
+
'likec4-element-node',
|
|
101
|
+
className,
|
|
102
|
+
)}
|
|
103
|
+
initial={false}
|
|
104
|
+
{...selectable && {
|
|
105
|
+
animate: {
|
|
106
|
+
scale,
|
|
107
|
+
},
|
|
108
|
+
whileTap: { scale: 0.98 },
|
|
109
|
+
}}
|
|
110
|
+
data-likec4-hovered={isHovered}
|
|
111
|
+
data-likec4-color={data.color}
|
|
112
|
+
data-likec4-shape={data.shape}
|
|
113
|
+
data-likec4-shape-size={size}
|
|
114
|
+
data-likec4-spacing={padding}
|
|
115
|
+
data-likec4-text-size={textSize}
|
|
116
|
+
{...(isDimmed !== false && {
|
|
117
|
+
'data-likec4-dimmed': isDimmed,
|
|
118
|
+
})}
|
|
119
|
+
style={{
|
|
120
|
+
...style as any,
|
|
121
|
+
}}
|
|
122
|
+
{...rest}
|
|
123
|
+
>
|
|
124
|
+
{children}
|
|
125
|
+
</m.div>
|
|
126
|
+
)
|
|
127
|
+
})
|
|
121
128
|
ElementNodeContainer.displayName = 'ElementNodeContainer'
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { type
|
|
2
|
-
import clsx from '
|
|
1
|
+
import { type ElementShape, type ElementStyle, nonexhaustive } from '@likec4/core'
|
|
2
|
+
import { cx as clsx } from '@likec4/styles/css'
|
|
3
3
|
import { toDomPrecision } from '../../../utils/xyflow'
|
|
4
4
|
import * as css from './ElementShape.css'
|
|
5
5
|
|
|
@@ -157,19 +157,19 @@ function ElementShapeSvg({ shape, w, h }: ElementShapeProps) {
|
|
|
157
157
|
}
|
|
158
158
|
}
|
|
159
159
|
|
|
160
|
-
type Data =
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
160
|
+
type Data = {
|
|
161
|
+
shape: ElementShape
|
|
162
|
+
width: number
|
|
163
|
+
height: number
|
|
164
|
+
style?: ElementStyle
|
|
165
|
+
}
|
|
166
166
|
|
|
167
167
|
// type ElementShapePrimitiveProps = NodeProps<Data> & {
|
|
168
168
|
type ElementShapePrimitiveProps = {
|
|
169
169
|
data: Data
|
|
170
170
|
width?: number
|
|
171
171
|
height?: number
|
|
172
|
-
isMultiple?: boolean | undefined
|
|
172
|
+
// isMultiple?: boolean | undefined
|
|
173
173
|
/**
|
|
174
174
|
* @default true
|
|
175
175
|
*/
|
|
@@ -177,10 +177,11 @@ type ElementShapePrimitiveProps = {
|
|
|
177
177
|
}
|
|
178
178
|
|
|
179
179
|
export function ElementShape(
|
|
180
|
-
{ data, width, height,
|
|
180
|
+
{ data, width, height, withSelectedIndicator = true }: ElementShapePrimitiveProps,
|
|
181
181
|
) {
|
|
182
182
|
let w = !!width && width > 10 ? width : data.width
|
|
183
183
|
let h = !!height && height > 10 ? height : data.height
|
|
184
|
+
const isMultiple = data.style?.multiple ?? false
|
|
184
185
|
return (
|
|
185
186
|
<>
|
|
186
187
|
{isMultiple && (
|
package/src/base/types.ts
CHANGED
|
@@ -40,8 +40,8 @@ export type NonOptional<T extends object, Keys extends OptionalKeysOf<T> = Optio
|
|
|
40
40
|
/**
|
|
41
41
|
* ReactFlow Custom Node properties with BaseNodeData at least
|
|
42
42
|
*/
|
|
43
|
-
export type NodeProps<T extends Record<string, unknown> = {}> = ReactFlowNodeProps<
|
|
44
|
-
RFNode<Base.NodeData & T,
|
|
43
|
+
export type NodeProps<T extends Record<string, unknown> = {}, NodeType extends string = string> = ReactFlowNodeProps<
|
|
44
|
+
RFNode<Base.NodeData & T, NodeType>
|
|
45
45
|
>
|
|
46
46
|
|
|
47
47
|
/**
|
|
@@ -68,41 +68,36 @@ export namespace Base {
|
|
|
68
68
|
// 'immediate' means that the node is dimmed without delay
|
|
69
69
|
export type Dimmed = 'immediate' | boolean
|
|
70
70
|
|
|
71
|
-
export type NodeData
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
}
|
|
83
|
-
>
|
|
84
|
-
|
|
71
|
+
export type NodeData = {
|
|
72
|
+
/**
|
|
73
|
+
* Whether the cursor is hovering over the node
|
|
74
|
+
*/
|
|
75
|
+
hovered?: boolean
|
|
76
|
+
/**
|
|
77
|
+
* Whether the node is dimmed
|
|
78
|
+
* 'immediate' means that the node is dimmed without delay
|
|
79
|
+
*/
|
|
80
|
+
dimmed?: Dimmed
|
|
81
|
+
}
|
|
85
82
|
export type Node = RFNode<NodeData>
|
|
86
83
|
|
|
87
84
|
export type NodeProps = ReactFlowNodeProps<RFNode<Base.NodeData, any>>
|
|
88
85
|
|
|
89
|
-
export type EdgeData
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
}
|
|
105
|
-
>
|
|
86
|
+
export type EdgeData = {
|
|
87
|
+
/**
|
|
88
|
+
* Whether the cursor is hovering over the edge
|
|
89
|
+
*/
|
|
90
|
+
hovered?: boolean
|
|
91
|
+
/**
|
|
92
|
+
* Whether the edge is active (animated and highlighted)
|
|
93
|
+
*/
|
|
94
|
+
active?: boolean
|
|
95
|
+
/**
|
|
96
|
+
* Whether the edge is dimmed
|
|
97
|
+
* 'immediate' means that the edge is dimmed without delay
|
|
98
|
+
*/
|
|
99
|
+
dimmed?: Dimmed
|
|
100
|
+
}
|
|
106
101
|
|
|
107
102
|
// export type Edge = SetRequired<ReactFlowEdge<EdgeData, 'relation'>, 'data' | 'type'>
|
|
108
103
|
export type Edge = SetRequired<RFEdge<EdgeData>, 'data'>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { WhereOperator } from '@likec4/core'
|
|
2
2
|
import type { CSSProperties } from 'react'
|
|
3
|
-
import type { ElementIconRenderer, OverrideReactFlowProps, PaddingWithUnit } from '../LikeC4Diagram.props'
|
|
3
|
+
import type { CustomNodes, ElementIconRenderer, OverrideReactFlowProps, PaddingWithUnit } from '../LikeC4Diagram.props'
|
|
4
4
|
|
|
5
5
|
export interface LikeC4ViewProps<ViewId = string, Tag = string, Kind = string> {
|
|
6
6
|
/**
|
|
@@ -148,6 +148,11 @@ export interface LikeC4ViewProps<ViewId = string, Tag = string, Kind = string> {
|
|
|
148
148
|
/** Function to generate nonce attribute added to all generated `<style />` tags */
|
|
149
149
|
styleNonce?: string | (() => string) | undefined
|
|
150
150
|
|
|
151
|
+
/**
|
|
152
|
+
* Override node renderers
|
|
153
|
+
*/
|
|
154
|
+
renderNodes?: CustomNodes | undefined
|
|
155
|
+
|
|
151
156
|
/**
|
|
152
157
|
* Render custom icon for a node
|
|
153
158
|
* By default, if icon is http:// or https://, it will be rendered as an image
|
|
@@ -77,6 +77,7 @@ const LikeC4ViewInner = memo<LikeC4ViewInnerProps>(({
|
|
|
77
77
|
styleNonce,
|
|
78
78
|
style,
|
|
79
79
|
reactFlowProps = {},
|
|
80
|
+
renderNodes,
|
|
80
81
|
...props
|
|
81
82
|
}) => {
|
|
82
83
|
const likec4model = useLikeC4Model(true, 'layouted')
|
|
@@ -152,6 +153,7 @@ const LikeC4ViewInner = memo<LikeC4ViewInnerProps>(({
|
|
|
152
153
|
onNodeClick: () => onNavigateTo(view.id),
|
|
153
154
|
}}
|
|
154
155
|
reactFlowProps={reactFlowProps}
|
|
156
|
+
renderNodes={renderNodes}
|
|
155
157
|
{...props}
|
|
156
158
|
/>
|
|
157
159
|
{browserView && (
|
|
@@ -170,6 +172,7 @@ const LikeC4ViewInner = memo<LikeC4ViewInnerProps>(({
|
|
|
170
172
|
readonly
|
|
171
173
|
fitView
|
|
172
174
|
fitViewPadding={'16px'}
|
|
175
|
+
renderNodes={renderNodes}
|
|
173
176
|
{...props}
|
|
174
177
|
{...browserProps}
|
|
175
178
|
showNotations={(browserProps.showNotations ?? true) &&
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from '../custom'
|
package/src/bundle/index.ts
CHANGED
|
@@ -1,7 +1,26 @@
|
|
|
1
|
+
export type {
|
|
2
|
+
ChangeEvent,
|
|
3
|
+
CustomNodes,
|
|
4
|
+
DiagramNodeWithNavigate,
|
|
5
|
+
ElementIconRenderer,
|
|
6
|
+
LikeC4ColorScheme,
|
|
7
|
+
LikeC4DiagramEventHandlers,
|
|
8
|
+
OnCanvasClick,
|
|
9
|
+
OnChange,
|
|
10
|
+
OnEdgeClick,
|
|
11
|
+
OnNavigateTo,
|
|
12
|
+
OnNodeClick,
|
|
13
|
+
OpenSourceParams,
|
|
14
|
+
PaddingUnit,
|
|
15
|
+
PaddingWithUnit,
|
|
16
|
+
WhereOperator,
|
|
17
|
+
} from '../LikeC4Diagram.props'
|
|
1
18
|
export { LikeC4View } from './LikeC4View'
|
|
2
|
-
export type { LikeC4ViewProps } from './LikeC4View.props'
|
|
19
|
+
export type { LikeC4BrowserProps, LikeC4ViewProps } from './LikeC4View.props'
|
|
3
20
|
export { ReactLikeC4, type ReactLikeC4Props } from './ReactLikeC4'
|
|
4
21
|
|
|
5
22
|
export { LikeC4ModelProvider } from './LikeC4ModelProvider'
|
|
6
23
|
|
|
7
24
|
export { ViewNotFound } from './ViewNotFound'
|
|
25
|
+
|
|
26
|
+
export * from '../custom/hooks'
|
package/src/bundle/styles.css.ts
CHANGED
|
@@ -10,8 +10,8 @@ import {
|
|
|
10
10
|
import { useIsomorphicLayoutEffect } from '@react-hookz/web'
|
|
11
11
|
import { useState } from 'react'
|
|
12
12
|
import { first, isFunction, isString } from 'remeda'
|
|
13
|
+
import fontsCss from '../styles-font.css?inline'
|
|
13
14
|
import inlinedStyles from '../styles.css?inline'
|
|
14
|
-
import fontsCss from './font.css?inline'
|
|
15
15
|
|
|
16
16
|
export const DefaultTheme = createTheme({
|
|
17
17
|
autoContrast: true,
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { cx } from '@likec4/styles/css'
|
|
1
2
|
import {
|
|
2
3
|
type ElementProps,
|
|
3
4
|
type UnstyledButtonProps,
|
|
@@ -7,7 +8,6 @@ import {
|
|
|
7
8
|
} from '@mantine/core'
|
|
8
9
|
import { IconSearch } from '@tabler/icons-react'
|
|
9
10
|
import { isMacOs } from '@xyflow/system'
|
|
10
|
-
import cx from 'clsx'
|
|
11
11
|
import * as classes from './SearchControl.css'
|
|
12
12
|
|
|
13
13
|
interface SearchControlProps extends UnstyledButtonProps, ElementProps<'button'> {}
|