likec4 1.50.0 → 1.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.
- package/__app__/src/likec4.js +16 -22
- package/__app__/src/main.js +2 -56
- package/__app__/src/routes/index.js +81 -16
- package/__app__/src/routes/single.js +18 -5
- package/__app__/src/style.css +1 -1
- package/__app__/src/vendors.js +16723 -16723
- package/dist/THIRD-PARTY-LICENSES.md +161 -61
- package/dist/_chunks/LikeC4.mjs +1 -1154
- package/dist/_chunks/filesystem.mjs +1230 -0
- package/dist/_chunks/index2.d.mts +13 -14
- package/dist/_chunks/libs/@logtape/logtape.mjs +1 -1
- package/dist/_chunks/libs/ansi-align.mjs +2 -0
- package/dist/_chunks/libs/ansi-regex.mjs +1 -0
- package/dist/_chunks/libs/ansi-styles.mjs +1 -0
- package/dist/_chunks/libs/atomically.mjs +1 -1
- package/dist/_chunks/libs/boxen.d.mts +1 -0
- package/dist/_chunks/libs/boxen.mjs +22 -0
- package/dist/_chunks/libs/conf.mjs +1 -1
- package/dist/_chunks/libs/langium.d.mts +1 -1
- package/dist/_chunks/libs/langium.mjs +17 -17
- package/dist/_chunks/libs/remeda.mjs +2 -2
- package/dist/_chunks/libs/tinyrainbow.mjs +1 -1
- package/dist/_chunks/libs/vscode-languageserver.mjs +1 -0
- package/dist/_chunks/sequence.mjs +1 -1
- package/dist/_chunks/src2.mjs +64 -64
- package/dist/cli/index.mjs +83 -74
- package/dist/index.d.mts +805 -1
- package/dist/index.mjs +1 -1
- package/dist/vite-plugin/index.mjs +1 -1
- package/dist/vite-plugin/internal.mjs +1 -1
- package/package.json +18 -19
- package/react/index.mjs +17 -23
- package/dist/_chunks/binary.mjs +0 -72
- package/dist/_chunks/libs/@logtape/logtape.d.mts +0 -741
package/__app__/src/likec4.js
CHANGED
|
@@ -5034,7 +5034,7 @@ function DriftsSummary() {
|
|
|
5034
5034
|
onMouseLeave: onMouseLeaveDebounced,
|
|
5035
5035
|
onClick
|
|
5036
5036
|
}, { view, nodes, edges } = selected;
|
|
5037
|
-
return view.length === 0 && nodes.length === 0 && edges.length === 0 ? null : /* @__PURE__ */ jsx(AnimatePresence, {
|
|
5037
|
+
return view.length === 0 && nodes.length === 0 && edges.length === 0 ? null : /* @__PURE__ */ jsx(AnimatePresence, { children: /* @__PURE__ */ jsxs(
|
|
5038
5038
|
m$1.div,
|
|
5039
5039
|
{
|
|
5040
5040
|
layout: "size",
|
|
@@ -5053,16 +5053,16 @@ function DriftsSummary() {
|
|
|
5053
5053
|
}),
|
|
5054
5054
|
children: [
|
|
5055
5055
|
t$1(view, 1) && /* @__PURE__ */ jsx(ViewDrifts, { drifts: view }),
|
|
5056
|
-
nodes.length > 0 && /* @__PURE__ */ jsxs(m$1.div, { layout:
|
|
5056
|
+
nodes.length > 0 && /* @__PURE__ */ jsxs(m$1.div, { layout: !0, children: [
|
|
5057
5057
|
/* @__PURE__ */ jsx(SectionHeader$2, { children: "Elements:" }),
|
|
5058
|
-
/* @__PURE__ */ jsx(
|
|
5058
|
+
/* @__PURE__ */ jsx("div", { className: vstack({ mt: "2", gap: "2" }), children: t$a(
|
|
5059
5059
|
nodes,
|
|
5060
5060
|
(node2) => /* @__PURE__ */ jsx(NodeDrifts$1, { ...node2, ...handlers }, node2.id)
|
|
5061
5061
|
) })
|
|
5062
5062
|
] }, "nodes-drifts"),
|
|
5063
|
-
edges.length > 0 && /* @__PURE__ */ jsxs(m$1.div, { layout:
|
|
5063
|
+
edges.length > 0 && /* @__PURE__ */ jsxs(m$1.div, { layout: !0, children: [
|
|
5064
5064
|
/* @__PURE__ */ jsx(SectionHeader$2, { children: "Relationships:" }),
|
|
5065
|
-
/* @__PURE__ */ jsx(
|
|
5065
|
+
/* @__PURE__ */ jsx("div", { className: vstack({ mt: "2", gap: "2" }), children: t$a(edges, (edge) => /* @__PURE__ */ jsx(EdgeDrifts$1, { ...edge, ...handlers }, edge.edgeId)) })
|
|
5066
5066
|
] }, "edges-drifts")
|
|
5067
5067
|
]
|
|
5068
5068
|
},
|
|
@@ -5086,6 +5086,7 @@ function ViewDrifts({ drifts }) {
|
|
|
5086
5086
|
) });
|
|
5087
5087
|
}
|
|
5088
5088
|
function NodeDrifts$1({ id, name, drifts, ...handlers }) {
|
|
5089
|
+
const key2 = `node-drifts-${id}`;
|
|
5089
5090
|
return /* @__PURE__ */ jsxs(
|
|
5090
5091
|
DriftsGroup,
|
|
5091
5092
|
{
|
|
@@ -5111,28 +5112,29 @@ function NodeDrifts$1({ id, name, drifts, ...handlers }) {
|
|
|
5111
5112
|
children: name
|
|
5112
5113
|
}
|
|
5113
5114
|
),
|
|
5114
|
-
t$a(drifts, (drift) => /* @__PURE__ */ jsx(DriftLabel, { children: drift },
|
|
5115
|
+
t$a(drifts, (drift, i) => /* @__PURE__ */ jsx(DriftLabel, { children: drift }, key2 + drift + i))
|
|
5115
5116
|
]
|
|
5116
5117
|
},
|
|
5117
|
-
|
|
5118
|
+
key2
|
|
5118
5119
|
);
|
|
5119
5120
|
}
|
|
5120
5121
|
function EdgeDrifts$1({ edgeId, drifts, ...handlers }) {
|
|
5122
|
+
const key2 = `edge-drifts-${edgeId}`;
|
|
5121
5123
|
return /* @__PURE__ */ jsx(
|
|
5122
5124
|
DriftsGroup,
|
|
5123
5125
|
{
|
|
5124
5126
|
"data-drift-type": "edge",
|
|
5125
5127
|
"data-drift-id": edgeId,
|
|
5126
5128
|
...handlers,
|
|
5127
|
-
children: t$a(drifts, (drift) => /* @__PURE__ */ jsx(
|
|
5129
|
+
children: t$a(drifts, (drift, i) => /* @__PURE__ */ jsx(
|
|
5128
5130
|
DriftLabel,
|
|
5129
5131
|
{
|
|
5130
5132
|
children: drift
|
|
5131
5133
|
},
|
|
5132
|
-
|
|
5134
|
+
key2 + drift + i
|
|
5133
5135
|
))
|
|
5134
5136
|
},
|
|
5135
|
-
|
|
5137
|
+
key2
|
|
5136
5138
|
);
|
|
5137
5139
|
}
|
|
5138
5140
|
const DriftsGroup = styled(m$1.div, {
|
|
@@ -5153,7 +5155,7 @@ const DriftsGroup = styled(m$1.div, {
|
|
|
5153
5155
|
defaultProps: {
|
|
5154
5156
|
className: "group",
|
|
5155
5157
|
variants: variants$7,
|
|
5156
|
-
layout:
|
|
5158
|
+
layout: !0,
|
|
5157
5159
|
initial: "initial",
|
|
5158
5160
|
animate: "animate",
|
|
5159
5161
|
exit: "exit"
|
|
@@ -8014,17 +8016,9 @@ const selector$5 = (ctx) => {
|
|
|
8014
8016
|
}
|
|
8015
8017
|
));
|
|
8016
8018
|
function StartWalkthroughButton() {
|
|
8017
|
-
const {
|
|
8019
|
+
const { enableCompareWithLatest } = useEnabledFeatures(), diagram = useDiagram(), actor = useNavigationActor();
|
|
8018
8020
|
let tooltipLabel = "Start Dynamic View Walkthrough";
|
|
8019
|
-
|
|
8020
|
-
case !enableReadOnly:
|
|
8021
|
-
tooltipLabel = "Walkthrough not available in Edit mode";
|
|
8022
|
-
break;
|
|
8023
|
-
case enableCompareWithLatest:
|
|
8024
|
-
tooltipLabel = "Walkthrough not available when Compare is active";
|
|
8025
|
-
break;
|
|
8026
|
-
}
|
|
8027
|
-
return /* @__PURE__ */ jsx(Tooltip$6, { label: tooltipLabel, children: /* @__PURE__ */ jsx(
|
|
8021
|
+
return !0 === enableCompareWithLatest && (tooltipLabel = "Walkthrough not available when Compare is active"), /* @__PURE__ */ jsx(Tooltip$6, { label: tooltipLabel, children: /* @__PURE__ */ jsx(
|
|
8028
8022
|
TriggerWalkthroughButton,
|
|
8029
8023
|
{
|
|
8030
8024
|
onClick: (e2) => {
|
|
@@ -8035,7 +8029,7 @@ function StartWalkthroughButton() {
|
|
|
8035
8029
|
exit: { opacity: 0, translateX: -20 },
|
|
8036
8030
|
size: "compact-xs",
|
|
8037
8031
|
h: 26,
|
|
8038
|
-
disabled:
|
|
8032
|
+
disabled: enableCompareWithLatest,
|
|
8039
8033
|
classNames: {
|
|
8040
8034
|
label: css({
|
|
8041
8035
|
display: {
|
package/__app__/src/main.js
CHANGED
|
@@ -1,61 +1,7 @@
|
|
|
1
1
|
import { jsx } from "react/jsx-runtime";
|
|
2
2
|
import { StrictMode } from "react";
|
|
3
3
|
import { createRoot } from "react-dom/client";
|
|
4
|
-
import {
|
|
5
|
-
import { A as createTheme, T as Tooltip, P as Portal, S as SegmentedControl, M as MantineProvider } from "./vendors.js";
|
|
6
|
-
const theme = createTheme({
|
|
7
|
-
autoContrast: !0,
|
|
8
|
-
primaryColor: "indigo",
|
|
9
|
-
cursorType: "pointer",
|
|
10
|
-
fontFamily: "var(--likec4-app-font)",
|
|
11
|
-
headings: {
|
|
12
|
-
fontWeight: "500",
|
|
13
|
-
sizes: {
|
|
14
|
-
h1: {
|
|
15
|
-
// fontSize: '2rem',
|
|
16
|
-
fontWeight: "600"
|
|
17
|
-
},
|
|
18
|
-
h2: {
|
|
19
|
-
// fontSize: '1.85rem',
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
},
|
|
23
|
-
fontSizes: {
|
|
24
|
-
xxs: "var(--font-sizes-xxs)",
|
|
25
|
-
xs: "var(--font-sizes-xs)",
|
|
26
|
-
sm: "var(--font-sizes-sm)",
|
|
27
|
-
md: "var(--font-sizes-md)",
|
|
28
|
-
lg: "var(--font-sizes-lg)",
|
|
29
|
-
xl: "var(--font-sizes-xl)"
|
|
30
|
-
},
|
|
31
|
-
spacing: {
|
|
32
|
-
xs: "var(--spacing-xs)",
|
|
33
|
-
sm: "var(--spacing-sm)",
|
|
34
|
-
md: "var(--spacing-md)",
|
|
35
|
-
lg: "var(--spacing-lg)",
|
|
36
|
-
xl: "var(--spacing-xl)"
|
|
37
|
-
},
|
|
38
|
-
components: {
|
|
39
|
-
SegmentedControl: SegmentedControl.extend({
|
|
40
|
-
vars: (theme2, props, ctx) => ({
|
|
41
|
-
root: {
|
|
42
|
-
// @ts-ignore
|
|
43
|
-
"--sc-font-size": theme2.fontSizes[props.fz ?? props.size]
|
|
44
|
-
}
|
|
45
|
-
})
|
|
46
|
-
}),
|
|
47
|
-
Portal: Portal.extend({
|
|
48
|
-
defaultProps: {
|
|
49
|
-
reuseTargetNode: !0
|
|
50
|
-
}
|
|
51
|
-
}),
|
|
52
|
-
Tooltip: Tooltip.extend({
|
|
53
|
-
defaultProps: {
|
|
54
|
-
color: "dark"
|
|
55
|
-
}
|
|
56
|
-
})
|
|
57
|
-
}
|
|
58
|
-
});
|
|
4
|
+
import { a as Routes } from "./routes/index.js";
|
|
59
5
|
createRoot(document.getElementById("likec4-root")).render(
|
|
60
|
-
/* @__PURE__ */ jsx(StrictMode, { children: /* @__PURE__ */ jsx(
|
|
6
|
+
/* @__PURE__ */ jsx(StrictMode, { children: /* @__PURE__ */ jsx(Routes, {}) })
|
|
61
7
|
);
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { jsx
|
|
2
|
-
import { cY as useNavigate, bS as useCallbackRef, cZ as z, c_ as createRootRouteWithContext, a0 as t, c$ as stripSearchParams,
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { cY as useNavigate, bS as useCallbackRef, cZ as z, A as createTheme, T as Tooltip, P as Portal, S as SegmentedControl, c_ as createRootRouteWithContext, a0 as t, c$ as stripSearchParams, M as MantineProvider, d0 as Outlet, d1 as createFileRoute, d2 as redirect, d3 as useDocumentTitle, d4 as createRouter, d5 as createHashHistory, d6 as createBrowserHistory, d7 as RouterProvider } from "../vendors.js";
|
|
3
3
|
import { useLikeC4Projects, projects } from "likec4:projects";
|
|
4
4
|
import { R as Route$3, a as Route$4, b as Route$5, c as Route$9, d as Route$a, e as Route$b, f as Route$c, g as Route$d, h as Route$h, i as Route$i, j as Route$j, k as Route$k, F as Fallback, N as NotFound } from "./single.js";
|
|
5
5
|
import { pageTitle, useHashHistory, basepath } from "../const.js";
|
|
6
6
|
import { L as LikeC4ProjectsProvider, B as Box } from "../likec4.js";
|
|
7
|
-
import {
|
|
7
|
+
import { lazy } from "react";
|
|
8
8
|
import { R as Route$6, a as Route$7, b as Route$8, c as Route$e, d as Route$f, e as Route$g, f as Route$l, g as Route$m, h as Route$n, i as Route$o, j as Route$p } from "./projects.js";
|
|
9
9
|
function LikeC4ProjectsContext({ children }) {
|
|
10
10
|
const projects2 = useLikeC4Projects(), navigate = useNavigate(), onProjectChange = useCallbackRef((projectId) => {
|
|
@@ -20,17 +20,79 @@ function LikeC4ProjectsContext({ children }) {
|
|
|
20
20
|
);
|
|
21
21
|
}
|
|
22
22
|
const searchParamsSchema = z.object({
|
|
23
|
-
theme: z.literal(["light", "dark", "auto"]).
|
|
23
|
+
theme: z.literal(["light", "dark", "auto"]).optional().catch(void 0),
|
|
24
24
|
dynamic: z.enum(["diagram", "sequence"]).default("diagram").catch("diagram"),
|
|
25
25
|
padding: z.number().min(0).default(20).catch(20),
|
|
26
26
|
relationships: z.string().nonempty().optional().catch(void 0).transform((v) => v)
|
|
27
|
+
});
|
|
28
|
+
function resolveForceColorScheme(theme2) {
|
|
29
|
+
switch (theme2) {
|
|
30
|
+
case "light":
|
|
31
|
+
case "dark":
|
|
32
|
+
return theme2;
|
|
33
|
+
default:
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
const theme = createTheme({
|
|
38
|
+
autoContrast: !0,
|
|
39
|
+
primaryColor: "indigo",
|
|
40
|
+
cursorType: "pointer",
|
|
41
|
+
fontFamily: "var(--likec4-app-font)",
|
|
42
|
+
headings: {
|
|
43
|
+
fontWeight: "500",
|
|
44
|
+
sizes: {
|
|
45
|
+
h1: {
|
|
46
|
+
// fontSize: '2rem',
|
|
47
|
+
fontWeight: "600"
|
|
48
|
+
},
|
|
49
|
+
h2: {
|
|
50
|
+
// fontSize: '1.85rem',
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
fontSizes: {
|
|
55
|
+
xxs: "var(--font-sizes-xxs)",
|
|
56
|
+
xs: "var(--font-sizes-xs)",
|
|
57
|
+
sm: "var(--font-sizes-sm)",
|
|
58
|
+
md: "var(--font-sizes-md)",
|
|
59
|
+
lg: "var(--font-sizes-lg)",
|
|
60
|
+
xl: "var(--font-sizes-xl)"
|
|
61
|
+
},
|
|
62
|
+
spacing: {
|
|
63
|
+
xs: "var(--spacing-xs)",
|
|
64
|
+
sm: "var(--spacing-sm)",
|
|
65
|
+
md: "var(--spacing-md)",
|
|
66
|
+
lg: "var(--spacing-lg)",
|
|
67
|
+
xl: "var(--spacing-xl)"
|
|
68
|
+
},
|
|
69
|
+
components: {
|
|
70
|
+
SegmentedControl: SegmentedControl.extend({
|
|
71
|
+
vars: (theme2, props, ctx) => ({
|
|
72
|
+
root: {
|
|
73
|
+
// @ts-ignore
|
|
74
|
+
"--sc-font-size": theme2.fontSizes[props.fz ?? props.size]
|
|
75
|
+
}
|
|
76
|
+
})
|
|
77
|
+
}),
|
|
78
|
+
Portal: Portal.extend({
|
|
79
|
+
defaultProps: {
|
|
80
|
+
reuseTargetNode: !0
|
|
81
|
+
}
|
|
82
|
+
}),
|
|
83
|
+
Tooltip: Tooltip.extend({
|
|
84
|
+
defaultProps: {
|
|
85
|
+
color: "dark"
|
|
86
|
+
}
|
|
87
|
+
})
|
|
88
|
+
}
|
|
27
89
|
}), Route$2 = createRootRouteWithContext()({
|
|
28
90
|
validateSearch: searchParamsSchema,
|
|
29
91
|
search: {
|
|
30
92
|
middlewares: [
|
|
31
93
|
stripSearchParams({
|
|
32
94
|
padding: 20,
|
|
33
|
-
theme:
|
|
95
|
+
theme: void 0,
|
|
34
96
|
dynamic: "diagram",
|
|
35
97
|
relationships: void 0
|
|
36
98
|
})
|
|
@@ -46,17 +108,18 @@ const searchParamsSchema = z.object({
|
|
|
46
108
|
component: RootComponent
|
|
47
109
|
});
|
|
48
110
|
function RootComponent() {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
111
|
+
const { theme: theme$1 } = Route$2.useSearch(), forceColorScheme = resolveForceColorScheme(theme$1);
|
|
112
|
+
return /* @__PURE__ */ jsx(
|
|
113
|
+
MantineProvider,
|
|
114
|
+
{
|
|
115
|
+
theme,
|
|
116
|
+
defaultColorScheme: "auto",
|
|
117
|
+
...forceColorScheme && { forceColorScheme },
|
|
118
|
+
children: /* @__PURE__ */ jsx(Outlet, {})
|
|
119
|
+
}
|
|
120
|
+
);
|
|
53
121
|
}
|
|
54
|
-
const
|
|
55
|
-
const { theme } = Route$2.useSearch(), mantineColorScheme = useMantineColorScheme();
|
|
56
|
-
return useEffect(() => {
|
|
57
|
-
theme && mantineColorScheme.setColorScheme(theme);
|
|
58
|
-
}, [theme]), null;
|
|
59
|
-
}, ProjectsOverviewPage = lazy(async () => {
|
|
122
|
+
const ProjectsOverviewPage = lazy(async () => {
|
|
60
123
|
const { ProjectsOverviewPage: ProjectsOverviewPage2 } = await import("../ProjectsOverview.js");
|
|
61
124
|
return {
|
|
62
125
|
default: ProjectsOverviewPage2
|
|
@@ -246,5 +309,7 @@ function Routes() {
|
|
|
246
309
|
return /* @__PURE__ */ jsx(RouterProvider, { router });
|
|
247
310
|
}
|
|
248
311
|
export {
|
|
249
|
-
|
|
312
|
+
Route$2 as R,
|
|
313
|
+
Routes as a,
|
|
314
|
+
resolveForceColorScheme as r
|
|
250
315
|
};
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import { jsx, jsxs, Fragment } from "react/jsx-runtime";
|
|
2
|
-
import { d8 as useRouter, d9 as useParams, da as isNotFound, db as Container, br as Alert, U as Text, dc as Code, W as Button, dd as e, de as e$1, as as e$2, bt as Group, bh as rem, df as Link, bZ as Title, d1 as createFileRoute, Q as m, d0 as Outlet, d as deepEqual, s as shallowEqual, dg as useMatches, dh as useIsomorphicLayoutEffect, d3 as useDocumentTitle, di as SimpleGrid, dj as useInViewport, dk as e$3, ci as Card, aQ as Box, d2 as redirect, k as useMantineColorScheme, dl as useComputedColorScheme, aA as ActionIcon, aF as MotionDiv, cN as isValidMotionProp, aD as Menu, bc as MenuTarget, bd as MenuDropdown, be as MenuItem, dm as MenuDivider, bp as Stack, b5 as CopyButton$1, dn as Select, dp as ModalRoot, dq as ModalOverlay, dr as ModalContent, ds as ModalBody, bL as Tabs, bM as TabsList, bN as TabsTab, bO as TabsPanel, dt as useMantineTheme, du as useMediaQuery, cq as useDisclosure, aG as Divider, dv as MenuLabel, dw as useSearch, dx as LoadingOverlay, dy as toBlob, c$ as stripSearchParams, cZ as z,
|
|
2
|
+
import { d8 as useRouter, d9 as useParams, da as isNotFound, db as Container, br as Alert, U as Text, dc as Code, W as Button, dd as e, de as e$1, as as e$2, bt as Group, bh as rem, df as Link, bZ as Title, d1 as createFileRoute, Q as m, d0 as Outlet, d as deepEqual, s as shallowEqual, dg as useMatches, dh as useIsomorphicLayoutEffect, d3 as useDocumentTitle, di as SimpleGrid, dj as useInViewport, dk as e$3, ci as Card, aQ as Box, d2 as redirect, k as useMantineColorScheme, dl as useComputedColorScheme, cY as useNavigate, aA as ActionIcon, aF as MotionDiv, cN as isValidMotionProp, aD as Menu, bc as MenuTarget, bd as MenuDropdown, be as MenuItem, dm as MenuDivider, bp as Stack, b5 as CopyButton$1, dn as Select, dp as ModalRoot, dq as ModalOverlay, dr as ModalContent, ds as ModalBody, bL as Tabs, bM as TabsList, bN as TabsTab, bO as TabsPanel, dt as useMantineTheme, du as useMediaQuery, cq as useDisclosure, aG as Divider, dv as MenuLabel, dw as useSearch, dx as LoadingOverlay, dy as toBlob, c$ as stripSearchParams, cZ as z, bS as useCallbackRef, aL as useIsMounted, T as Tooltip, dz as useAsync, dA as Tt, dB as _t, bP as ScrollArea, dC as Ht, dD as notFound } from "../vendors.js";
|
|
3
3
|
import { loadModel } from "likec4:model";
|
|
4
4
|
import { c as css, s as styled, I as IconRendererProvider, a as LikeC4ModelProvider, u as useUpdateEffect, S as StaticLikeC4Diagram, M as Markdown, b as LikeC4AdHocViewEditor, B as Box$1, d as IconMoonStars, e as IconSun, f as createStyleContext, n as navigationPanel, i as isCssProperty, g as useLikeC4Projects$1, h as IconChevronDown, j as IconAlertTriangle, k as IconCheck, l as IconCopy, m as IconExternalLink, o as IconShare, p as pickViewBounds, q as LikeC4Diagram, r as useLikeC4Model, t as useDiagramContext, v as useDiagram, w as useOnDiagramEvent, x as LikeC4EditorProvider } from "../likec4.js";
|
|
5
5
|
import { getProjectIcons } from "likec4:icons";
|
|
6
|
-
import { useMemo, createContext, useContext, useState, useEffect, memo, useCallback
|
|
6
|
+
import { useMemo, createContext, useContext, useState, useEffect, useRef, memo, useCallback } from "react";
|
|
7
7
|
import { useStore } from "likec4/vite-plugin/internal";
|
|
8
8
|
import { RichText } from "@likec4/core/types";
|
|
9
9
|
import { pageTitle, ComponentName, useHashHistory, isDevelopment, krokiPumlSvgUrl, krokiD2SvgUrl } from "../const.js";
|
|
10
10
|
import { likec4rpc, isRpcAvailable } from "likec4:rpc";
|
|
11
|
+
import { R as Route$c, r as resolveForceColorScheme } from "./index.js";
|
|
11
12
|
import { useLikeC4Projects } from "likec4:projects";
|
|
12
13
|
function Fallback({ error: _error, resetErrorBoundary }) {
|
|
13
14
|
const router = useRouter(), params = useParams({
|
|
@@ -438,15 +439,27 @@ function WebcomponentPage() {
|
|
|
438
439
|
function ColorSchemeToggle() {
|
|
439
440
|
const { setColorScheme } = useMantineColorScheme({
|
|
440
441
|
keepTransitions: !0
|
|
441
|
-
}), computedColorScheme = useComputedColorScheme("light");
|
|
442
|
-
return
|
|
442
|
+
}), computedColorScheme = useComputedColorScheme("light"), navigate = useNavigate(), { theme: urlTheme } = Route$c.useSearch(), isForced = resolveForceColorScheme(urlTheme) != null, pendingScheme = useRef(null);
|
|
443
|
+
return useEffect(() => {
|
|
444
|
+
pendingScheme.current != null && !isForced && (setColorScheme(pendingScheme.current), pendingScheme.current = null);
|
|
445
|
+
}, [isForced, setColorScheme]), /* @__PURE__ */ jsxs(
|
|
443
446
|
ActionIcon,
|
|
444
447
|
{
|
|
445
448
|
visibleFrom: "sm",
|
|
446
449
|
size: "md",
|
|
447
450
|
variant: "subtle",
|
|
448
451
|
color: "gray",
|
|
449
|
-
onClick: () =>
|
|
452
|
+
onClick: () => {
|
|
453
|
+
if (pendingScheme.current != null) return;
|
|
454
|
+
const next = computedColorScheme === "light" ? "dark" : "light";
|
|
455
|
+
isForced ? (pendingScheme.current = next, navigate({
|
|
456
|
+
from: Route$c.fullPath,
|
|
457
|
+
search: (prev) => ({ ...prev, theme: void 0 }),
|
|
458
|
+
replace: !0
|
|
459
|
+
}).catch(() => {
|
|
460
|
+
pendingScheme.current = null;
|
|
461
|
+
})) : setColorScheme(next);
|
|
462
|
+
},
|
|
450
463
|
"aria-label": "Toggle color scheme",
|
|
451
464
|
children: [
|
|
452
465
|
/* @__PURE__ */ jsx(IconMoonStars, { stroke: 1.5, display: computedColorScheme === "light" ? "block" : "none" }),
|