@keboola/design 2.1.0 → 3.1.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 +10 -9
- package/dist/icons.cjs +13 -737
- package/dist/icons.cjs.map +1 -1
- package/dist/icons.d.cts +2 -1
- package/dist/icons.d.ts +2 -1
- package/dist/icons.js +8 -2
- package/dist/icons.js.map +1 -1
- package/dist/index.cjs +13517 -12393
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +4717 -4449
- package/dist/index.d.ts +4717 -4449
- package/dist/index.js +13252 -12160
- package/dist/index.js.map +1 -1
- package/dist/markdown-editor.cjs +294 -170
- package/dist/markdown-editor.cjs.map +1 -1
- package/dist/markdown-editor.js +292 -170
- package/dist/markdown-editor.js.map +1 -1
- package/dist/mermaid.cjs +142 -49
- package/dist/mermaid.cjs.map +1 -1
- package/dist/mermaid.js +124 -51
- package/dist/mermaid.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/testing.cjs +89 -0
- package/dist/testing.cjs.map +1 -0
- package/dist/testing.d.cts +19 -0
- package/dist/testing.d.ts +19 -0
- package/dist/testing.js +87 -0
- package/dist/testing.js.map +1 -0
- package/package.json +35 -16
- package/src/styles.css +19 -18
- package/dist/icon-names.cjs +0 -18
- package/dist/icon-names.cjs.map +0 -1
- package/dist/icon-names.d.cts +0 -7
- package/dist/icon-names.d.ts +0 -7
- package/dist/icon-names.js +0 -16
- package/dist/icon-names.js.map +0 -1
package/dist/mermaid.cjs
CHANGED
|
@@ -7,15 +7,53 @@ var clsx = require('clsx');
|
|
|
7
7
|
var tailwindMerge = require('tailwind-merge');
|
|
8
8
|
var reactTooltip = require('@radix-ui/react-tooltip');
|
|
9
9
|
var classVarianceAuthority = require('class-variance-authority');
|
|
10
|
+
var brandRegistry = require('@keboola/brand-registry');
|
|
10
11
|
var jsxRuntime = require('react/jsx-runtime');
|
|
12
|
+
var DOMPurify = require('dompurify');
|
|
11
13
|
var reactSlot = require('@radix-ui/react-slot');
|
|
12
|
-
var
|
|
14
|
+
var lucide_react_star = require('lucide-react');
|
|
13
15
|
|
|
14
16
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
15
17
|
|
|
18
|
+
function _interopNamespace(e) {
|
|
19
|
+
if (e && e.__esModule) return e;
|
|
20
|
+
var n = Object.create(null);
|
|
21
|
+
if (e) {
|
|
22
|
+
Object.keys(e).forEach(function (k) {
|
|
23
|
+
if (k !== 'default') {
|
|
24
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
25
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
26
|
+
enumerable: true,
|
|
27
|
+
get: function () { return e[k]; }
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
n.default = e;
|
|
33
|
+
return Object.freeze(n);
|
|
34
|
+
}
|
|
35
|
+
|
|
16
36
|
var colors__default = /*#__PURE__*/_interopDefault(colors);
|
|
37
|
+
var DOMPurify__default = /*#__PURE__*/_interopDefault(DOMPurify);
|
|
38
|
+
var lucide_react_star__namespace = /*#__PURE__*/_interopNamespace(lucide_react_star);
|
|
17
39
|
|
|
18
|
-
|
|
40
|
+
var __defProp = Object.defineProperty;
|
|
41
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
42
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
43
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
44
|
+
var __export = (target, all) => {
|
|
45
|
+
for (var name in all)
|
|
46
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
47
|
+
};
|
|
48
|
+
var __copyProps = (to, from, except, desc) => {
|
|
49
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
50
|
+
for (let key of __getOwnPropNames(from))
|
|
51
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
52
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
53
|
+
}
|
|
54
|
+
return to;
|
|
55
|
+
};
|
|
56
|
+
var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget);
|
|
19
57
|
var twMerge = tailwindMerge.extendTailwindMerge({
|
|
20
58
|
prefix: "tw-"
|
|
21
59
|
});
|
|
@@ -31,17 +69,49 @@ var keyCodes = {
|
|
|
31
69
|
ENTER: "Enter",
|
|
32
70
|
SPACE: " "
|
|
33
71
|
};
|
|
72
|
+
var ThemeContext = react.createContext(null);
|
|
73
|
+
|
|
74
|
+
// src/components/internal/useIsLegacyBrand.ts
|
|
75
|
+
var useIsLegacyBrand = () => {
|
|
76
|
+
const context = react.use(ThemeContext);
|
|
77
|
+
return context === null || context.brand.id === brandRegistry.keboolaLegacy.id;
|
|
78
|
+
};
|
|
34
79
|
var tooltipVariants = classVarianceAuthority.cva(
|
|
35
80
|
[
|
|
36
81
|
"tailwindcss-preflight",
|
|
37
82
|
"tw-inline-block",
|
|
38
|
-
"tw-rounded",
|
|
39
|
-
"tw-bg-neutral-800",
|
|
40
|
-
"tw-text-white",
|
|
41
83
|
"tw-break-anywhere",
|
|
42
84
|
"tw-max-h-96",
|
|
43
85
|
"tw-overflow-y-auto",
|
|
44
|
-
"tw-z-[1060]"
|
|
86
|
+
"tw-z-[1060]",
|
|
87
|
+
// legacy (dark) chrome — default
|
|
88
|
+
"tw-rounded",
|
|
89
|
+
"tw-bg-neutral-800",
|
|
90
|
+
"tw-text-white",
|
|
91
|
+
// argo chrome overrides — semantic floating-panel tokens
|
|
92
|
+
"data-[argo=true]:tw-rounded-2xl",
|
|
93
|
+
"data-[argo=true]:tw-border",
|
|
94
|
+
"data-[argo=true]:tw-border-solid",
|
|
95
|
+
"data-[argo=true]:tw-border-border",
|
|
96
|
+
"data-[argo=true]:tw-bg-popover",
|
|
97
|
+
"data-[argo=true]:tw-text-popover-foreground",
|
|
98
|
+
"data-[argo=true]:tw-shadow-md",
|
|
99
|
+
// argo open animation
|
|
100
|
+
"data-[argo=true]:data-[state=delayed-open]:tw-animate-in",
|
|
101
|
+
"data-[argo=true]:data-[state=instant-open]:tw-animate-in",
|
|
102
|
+
"data-[argo=true]:data-[state=delayed-open]:tw-fade-in-0",
|
|
103
|
+
"data-[argo=true]:data-[state=instant-open]:tw-fade-in-0",
|
|
104
|
+
"data-[argo=true]:data-[state=delayed-open]:tw-zoom-in-95",
|
|
105
|
+
"data-[argo=true]:data-[state=instant-open]:tw-zoom-in-95",
|
|
106
|
+
// argo closed animation
|
|
107
|
+
"data-[argo=true]:data-[state=closed]:tw-animate-out",
|
|
108
|
+
"data-[argo=true]:data-[state=closed]:tw-fade-out-0",
|
|
109
|
+
"data-[argo=true]:data-[state=closed]:tw-zoom-out-95",
|
|
110
|
+
// argo position animation
|
|
111
|
+
"data-[argo=true]:data-[side=bottom]:tw-slide-in-from-top-2",
|
|
112
|
+
"data-[argo=true]:data-[side=left]:tw-slide-in-from-right-2",
|
|
113
|
+
"data-[argo=true]:data-[side=right]:tw-slide-in-from-left-2",
|
|
114
|
+
"data-[argo=true]:data-[side=top]:tw-slide-in-from-bottom-2"
|
|
45
115
|
],
|
|
46
116
|
{
|
|
47
117
|
defaultVariants: {
|
|
@@ -74,6 +144,7 @@ var tooltipVariants = classVarianceAuthority.cva(
|
|
|
74
144
|
var TooltipContent = ({
|
|
75
145
|
className,
|
|
76
146
|
variant,
|
|
147
|
+
argo,
|
|
77
148
|
keepOpenOnPointerDownOutside = false,
|
|
78
149
|
children,
|
|
79
150
|
onPointerDownOutside,
|
|
@@ -83,6 +154,8 @@ var TooltipContent = ({
|
|
|
83
154
|
placement = "right",
|
|
84
155
|
...rest
|
|
85
156
|
}) => {
|
|
157
|
+
const isLegacy = useIsLegacyBrand();
|
|
158
|
+
const renderArgo = !isLegacy || argo === true;
|
|
86
159
|
const handlePointerDownOutside = (event) => {
|
|
87
160
|
if (keepOpenOnPointerDownOutside) event.preventDefault();
|
|
88
161
|
onPointerDownOutside?.(event);
|
|
@@ -91,7 +164,8 @@ var TooltipContent = ({
|
|
|
91
164
|
reactTooltip.Content,
|
|
92
165
|
{
|
|
93
166
|
...rest,
|
|
94
|
-
"data-tooltip-content": true,
|
|
167
|
+
"data-tooltip-content": renderArgo ? void 0 : true,
|
|
168
|
+
"data-argo": renderArgo,
|
|
95
169
|
sideOffset,
|
|
96
170
|
collisionPadding,
|
|
97
171
|
onPointerDownOutside: handlePointerDownOutside,
|
|
@@ -150,6 +224,7 @@ var Tooltip = ({
|
|
|
150
224
|
className,
|
|
151
225
|
keepOpenOnTriggerClick = false,
|
|
152
226
|
variant,
|
|
227
|
+
argo,
|
|
153
228
|
placement = "right",
|
|
154
229
|
forceHide = false,
|
|
155
230
|
forceShow = false,
|
|
@@ -188,6 +263,7 @@ var Tooltip = ({
|
|
|
188
263
|
{
|
|
189
264
|
className,
|
|
190
265
|
variant: resolvedVariant,
|
|
266
|
+
argo,
|
|
191
267
|
placement,
|
|
192
268
|
keepOpenOnPointerDownOutside: keepOpenOnTriggerClick,
|
|
193
269
|
children: tooltip
|
|
@@ -214,7 +290,7 @@ var ANIMATION_CLASS_NAME = cn(
|
|
|
214
290
|
"tw-relative",
|
|
215
291
|
"tw-overflow-hidden",
|
|
216
292
|
"tw-pointer-events-none",
|
|
217
|
-
"tw-bg-
|
|
293
|
+
"tw-bg-muted",
|
|
218
294
|
// before
|
|
219
295
|
'before:tw-content-[""]',
|
|
220
296
|
"before:tw-opacity-100",
|
|
@@ -239,6 +315,33 @@ var Skeleton = ({ height = "md", className, count = 1 }) => {
|
|
|
239
315
|
key
|
|
240
316
|
)) });
|
|
241
317
|
};
|
|
318
|
+
|
|
319
|
+
// src/icons/index.ts
|
|
320
|
+
var icons_exports = {};
|
|
321
|
+
__export(icons_exports, {
|
|
322
|
+
Keboola: () => Keboola
|
|
323
|
+
});
|
|
324
|
+
__reExport(icons_exports, lucide_react_star__namespace);
|
|
325
|
+
var Keboola = react.forwardRef(
|
|
326
|
+
({ size = 24, color = "currentColor", className, children, ...rest }, ref) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
327
|
+
"svg",
|
|
328
|
+
{
|
|
329
|
+
ref,
|
|
330
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
331
|
+
width: size,
|
|
332
|
+
height: size,
|
|
333
|
+
viewBox: "0 0 300 512",
|
|
334
|
+
fill: color,
|
|
335
|
+
className: cn("lucide", className),
|
|
336
|
+
...rest,
|
|
337
|
+
children: [
|
|
338
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "M152 320C79.7 320 24.5 233.9 24.5 124.7C24.5 15.6 70.5 0 152 0s123.6 15.6 123.6 124.7C275.5 233.9 217.7 320 152 320zm-8.7-50.5c0-11.2-9.5-20.3-21.2-20.3s-21.2 9.1-21.2 20.3c0 11.2 9.5 20.3 21.2 20.3s21.2-9.1 21.2-20.3zm55.7 0c0-11.2-9.5-20.3-21.2-20.3s-21.2 9.1-21.2 20.3c0 11.2 9.5 20.3 21.2 20.3s21.2-9.1 21.2-20.3zm68.9 115.1c10.2 9.3 20.2 20.5 29 35c5.9 9.7 2.6 22.1-7.5 27.8c-3.4 1.9-7.1 2.8-10.7 2.8c-7.2 0-14.3-3.6-18.3-10c-6.8-11.1-13.8-18.9-21.7-26.1c-7.3-6.7-15.6-12.7-24.9-19.5c-.7-.5-1.4-1-2.1-1.5c-5-3.6-10-6.8-14.9-9.4c.6 1 1.2 2.1 1.8 3.2c14.4 26.4 29.2 63.1 29.2 104.9c0 11.2-9.5 20.3-21.2 20.3c-11.7 0-21.2-9.1-21.2-20.3c.1-31.8-11.6-62.3-23.8-84.9c-4-7.4-8-13.9-11.6-19.3c-3.4 5.2-7.2 11.3-11 18.3c-12.5 22.7-24.5 53.8-24.4 86c0 11.2-9.5 20.3-21.2 20.3s-21.2-9.1-21.2-20.3c.1-41.8 14.9-78.4 29.2-104.9c.6-1.1 1.2-2.1 1.8-3.2c-5 2.7-9.9 5.8-14.9 9.4c-.6 .5-1.3 .9-1.9 1.4c-9.5 6.9-17.8 12.9-25.1 19.7c-7.9 7.2-14.9 15.1-21.7 26.1c-5.9 9.7-18.9 12.9-29 7.2C.5 441.8-2.9 429.3 3.1 419.7c8.9-14.4 18.8-25.7 29-35c9.2-8.4 18.5-15.1 27.6-21.7c1-.7 2-1.4 3-2.2c4.7-3.5 9.6-6.7 14.6-9.6c-5-2.9-9.8-6.1-14.6-9.6C39.8 325 19.9 302.5 3.1 275.1c-5.9-9.7-2.6-22.1 7.5-27.8c10.1-5.7 23.1-2.5 29 7.2c14.6 23.7 31.1 42 48.7 54.9c18.9 13.7 37.4 20.5 56.5 21.5c1.7-.1 3.5-.1 5.2-.1c1.8 0 3.5 .1 5.2 .1c0 0 0 0 0 0c19.1-1.1 37.6-7.9 56.5-21.5c17.6-12.8 34.2-31.2 48.7-54.9c6-9.7 18.9-12.9 29-7.2c10.1 5.7 13.4 18.1 7.5 27.8c-16.8 27.4-36.7 49.9-59.6 66.6c-4.7 3.5-9.6 6.7-14.5 9.6c4.9 2.9 9.8 6.1 14.5 9.6c.9 .7 1.8 1.3 2.7 2c9.2 6.7 18.5 13.5 27.9 22z" }),
|
|
339
|
+
children
|
|
340
|
+
]
|
|
341
|
+
}
|
|
342
|
+
)
|
|
343
|
+
);
|
|
344
|
+
Keboola.displayName = "Keboola";
|
|
242
345
|
var variants = classVarianceAuthority.cva(
|
|
243
346
|
[
|
|
244
347
|
"tailwindcss-preflight",
|
|
@@ -426,6 +529,8 @@ var argoVariants = classVarianceAuthority.cva(
|
|
|
426
529
|
"tw-bg-clip-padding",
|
|
427
530
|
// anchor support
|
|
428
531
|
"!tw-no-underline",
|
|
532
|
+
"aria-disabled:tw-cursor-not-allowed",
|
|
533
|
+
"aria-disabled:tw-opacity-50",
|
|
429
534
|
// icon
|
|
430
535
|
"tw-shrink-0",
|
|
431
536
|
"[&_svg]:tw-pointer-events-none",
|
|
@@ -528,14 +633,11 @@ var Button = ({
|
|
|
528
633
|
block = false,
|
|
529
634
|
...buttonProps
|
|
530
635
|
}) => {
|
|
636
|
+
const isLegacy = useIsLegacyBrand();
|
|
637
|
+
const renderArgo = !isLegacy || argo;
|
|
531
638
|
const Comp = asChild ? reactSlot.Root : "button";
|
|
532
639
|
const isIconOnly = String(size).startsWith("icon");
|
|
533
|
-
const classNames =
|
|
534
|
-
size,
|
|
535
|
-
variant,
|
|
536
|
-
block,
|
|
537
|
-
className
|
|
538
|
-
});
|
|
640
|
+
const classNames = renderArgo ? argoVariants({ variant, size, block, className }) : variants({ size, variant, block, className });
|
|
539
641
|
const handleClick = (event) => {
|
|
540
642
|
const isAnchor = event.currentTarget.tagName === "A";
|
|
541
643
|
if (isAnchor && disabled) {
|
|
@@ -557,7 +659,7 @@ var Button = ({
|
|
|
557
659
|
onClick: handleClick,
|
|
558
660
|
className: cn(classNames),
|
|
559
661
|
children: [
|
|
560
|
-
isLoading && /* @__PURE__ */ jsxRuntime.jsx(
|
|
662
|
+
isLoading && /* @__PURE__ */ jsxRuntime.jsx(icons_exports.Loader2, { className: "tw-size-4 tw-shrink-0 tw-animate-spin" }),
|
|
561
663
|
/* @__PURE__ */ jsxRuntime.jsx(reactSlot.Slottable, { children: isLoading && isIconOnly ? null : children })
|
|
562
664
|
]
|
|
563
665
|
}
|
|
@@ -626,7 +728,7 @@ var Clipboard = ({
|
|
|
626
728
|
)
|
|
627
729
|
] });
|
|
628
730
|
};
|
|
629
|
-
var DEFAULT_ICON = /* @__PURE__ */ jsxRuntime.jsx(
|
|
731
|
+
var DEFAULT_ICON = /* @__PURE__ */ jsxRuntime.jsx(icons_exports.Copy, {});
|
|
630
732
|
var ClipboardButton = ({
|
|
631
733
|
// clipboard props
|
|
632
734
|
text,
|
|
@@ -656,6 +758,10 @@ var MIN_SCALE = 0.5;
|
|
|
656
758
|
var MAX_SCALE = 3;
|
|
657
759
|
var ZOOM_STEP = 0.1;
|
|
658
760
|
var ZoomableSvg = ({ html, copyText, className }) => {
|
|
761
|
+
const safeHtml = react.useMemo(
|
|
762
|
+
() => DOMPurify__default.default.sanitize(html, { USE_PROFILES: { svg: true, svgFilters: true } }),
|
|
763
|
+
[html]
|
|
764
|
+
);
|
|
659
765
|
const containerRef = react.useRef(null);
|
|
660
766
|
const [scale, setScale] = react.useState(1);
|
|
661
767
|
const [translate, setTranslate] = react.useState({ x: 0, y: 0 });
|
|
@@ -751,7 +857,7 @@ var ZoomableSvg = ({ html, copyText, className }) => {
|
|
|
751
857
|
isFullscreen && "tw-h-full [&>svg]:tw-h-full"
|
|
752
858
|
),
|
|
753
859
|
style: { transform: `translate(${translate.x}px, ${translate.y}px) scale(${scale})` },
|
|
754
|
-
dangerouslySetInnerHTML: { __html:
|
|
860
|
+
dangerouslySetInnerHTML: { __html: safeHtml }
|
|
755
861
|
}
|
|
756
862
|
)
|
|
757
863
|
}
|
|
@@ -788,7 +894,7 @@ var ZoomableSvg = ({ html, copyText, className }) => {
|
|
|
788
894
|
"aria-label": isFullscreen ? "Exit fullscreen" : "Fullscreen",
|
|
789
895
|
onClick: () => setIsFullscreen((f) => !f),
|
|
790
896
|
argo: true,
|
|
791
|
-
children: isFullscreen ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
897
|
+
children: isFullscreen ? /* @__PURE__ */ jsxRuntime.jsx(icons_exports.Minimize2, { className: "tw-size-4" }) : /* @__PURE__ */ jsxRuntime.jsx(icons_exports.Maximize2, { className: "tw-size-4" })
|
|
792
898
|
}
|
|
793
899
|
)
|
|
794
900
|
}
|
|
@@ -804,7 +910,7 @@ var ZoomableSvg = ({ html, copyText, className }) => {
|
|
|
804
910
|
"div",
|
|
805
911
|
{
|
|
806
912
|
role: "presentation",
|
|
807
|
-
className: "tw-fixed tw-inset-0 tw-z-[1060] tw-bg-
|
|
913
|
+
className: "tw-fixed tw-inset-0 tw-z-[1060] tw-bg-muted tw-p-4",
|
|
808
914
|
onClick: stopPropagation,
|
|
809
915
|
children: diagramContent
|
|
810
916
|
}
|
|
@@ -814,13 +920,18 @@ var ZoomableSvg = ({ html, copyText, className }) => {
|
|
|
814
920
|
"div",
|
|
815
921
|
{
|
|
816
922
|
className: cn(
|
|
817
|
-
"tw-overflow-hidden tw-rounded-md tw-border tw-border-
|
|
923
|
+
"tw-overflow-hidden tw-rounded-md tw-border tw-border-border tw-bg-muted",
|
|
818
924
|
className
|
|
819
925
|
),
|
|
820
926
|
children: diagramContent
|
|
821
927
|
}
|
|
822
928
|
);
|
|
823
929
|
};
|
|
930
|
+
var PRIMARY_FALLBACK_CHANNELS = "31 143 255";
|
|
931
|
+
var resolvePrimary = () => {
|
|
932
|
+
const channels = typeof document === "undefined" ? PRIMARY_FALLBACK_CHANNELS : getComputedStyle(document.documentElement).getPropertyValue("--color-primary").trim() || PRIMARY_FALLBACK_CHANNELS;
|
|
933
|
+
return `rgb(${channels})`;
|
|
934
|
+
};
|
|
824
935
|
var mermaidPromise = null;
|
|
825
936
|
var getMermaid = () => {
|
|
826
937
|
if (!mermaidPromise) {
|
|
@@ -869,7 +980,7 @@ var getMermaid = () => {
|
|
|
869
980
|
taskTextColor: colors__default.default.neutral[800],
|
|
870
981
|
taskTextDarkColor: colors__default.default.neutral[800],
|
|
871
982
|
taskTextLightColor: colors__default.default.neutral[800],
|
|
872
|
-
activeTaskBorderColor:
|
|
983
|
+
activeTaskBorderColor: resolvePrimary(),
|
|
873
984
|
activeTaskBkgColor: colors__default.default.secondary[200],
|
|
874
985
|
doneTaskBorderColor: colors__default.default.primary[600],
|
|
875
986
|
doneTaskBkgColor: colors__default.default.primary[100],
|
|
@@ -921,46 +1032,28 @@ var makeResponsive = (svgString) => {
|
|
|
921
1032
|
};
|
|
922
1033
|
var RENDER_DEBOUNCE_MS = 300;
|
|
923
1034
|
var svgCache = /* @__PURE__ */ new Map();
|
|
1035
|
+
var resolveSyncSvg = (code) => {
|
|
1036
|
+
const cached = svgCache.get(code);
|
|
1037
|
+
if (cached) return cached;
|
|
1038
|
+
const fast = tryFastRender(code);
|
|
1039
|
+
if (fast) svgCache.set(code, fast);
|
|
1040
|
+
return fast;
|
|
1041
|
+
};
|
|
924
1042
|
var MermaidDiagram = ({ code }) => {
|
|
925
1043
|
const id = react.useId();
|
|
926
|
-
const [svg, setSvg] = react.useState(() =>
|
|
927
|
-
const cached = svgCache.get(code);
|
|
928
|
-
if (cached) return cached;
|
|
929
|
-
const fast = tryFastRender(code);
|
|
930
|
-
if (fast) {
|
|
931
|
-
svgCache.set(code, fast);
|
|
932
|
-
return fast;
|
|
933
|
-
}
|
|
934
|
-
return null;
|
|
935
|
-
});
|
|
1044
|
+
const [svg, setSvg] = react.useState(() => resolveSyncSvg(code));
|
|
936
1045
|
const [renderFailed, setRenderFailed] = react.useState(false);
|
|
937
1046
|
const debounceRef = react.useRef(null);
|
|
938
1047
|
const renderIdRef = react.useRef(0);
|
|
939
1048
|
const [prevCode, setPrevCode] = react.useState(code);
|
|
940
1049
|
if (code !== prevCode) {
|
|
941
1050
|
setPrevCode(code);
|
|
942
|
-
|
|
943
|
-
const fast = cached ?? tryFastRender(code);
|
|
944
|
-
if (fast && !cached) svgCache.set(code, fast);
|
|
945
|
-
setSvg(fast);
|
|
1051
|
+
setSvg(resolveSyncSvg(code));
|
|
946
1052
|
setRenderFailed(false);
|
|
947
1053
|
}
|
|
948
1054
|
react.useEffect(() => {
|
|
949
|
-
if (svgCache.has(code))
|
|
950
|
-
setSvg(svgCache.get(code));
|
|
951
|
-
setRenderFailed(false);
|
|
952
|
-
return;
|
|
953
|
-
}
|
|
954
|
-
const fastResult = tryFastRender(code);
|
|
955
|
-
if (fastResult) {
|
|
956
|
-
svgCache.set(code, fastResult);
|
|
957
|
-
setSvg(fastResult);
|
|
958
|
-
setRenderFailed(false);
|
|
959
|
-
return;
|
|
960
|
-
}
|
|
961
|
-
setSvg(null);
|
|
1055
|
+
if (svgCache.has(code)) return;
|
|
962
1056
|
const currentRenderId = ++renderIdRef.current;
|
|
963
|
-
setRenderFailed(false);
|
|
964
1057
|
if (debounceRef.current) {
|
|
965
1058
|
clearTimeout(debounceRef.current);
|
|
966
1059
|
}
|