@keboola/design 3.0.0 → 3.1.1
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 +2 -4
- package/dist/index.cjs +1088 -816
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +379 -389
- package/dist/index.d.ts +379 -389
- package/dist/index.js +1057 -786
- package/dist/index.js.map +1 -1
- package/dist/markdown-editor.cjs +200 -143
- package/dist/markdown-editor.cjs.map +1 -1
- package/dist/markdown-editor.js +199 -143
- package/dist/markdown-editor.js.map +1 -1
- package/dist/mermaid.cjs +75 -44
- package/dist/mermaid.cjs.map +1 -1
- package/dist/mermaid.js +75 -45
- package/dist/mermaid.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/testing.cjs +11 -28
- package/dist/testing.cjs.map +1 -1
- package/dist/testing.js +11 -28
- package/dist/testing.js.map +1 -1
- package/package.json +13 -3
- package/src/styles.css +19 -18
package/dist/mermaid.js
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
import { forwardRef, useId, useState, useRef, useEffect, useCallback } from 'react';
|
|
1
|
+
import { createContext, forwardRef, useId, useState, useRef, useEffect, useMemo, useCallback, use } from 'react';
|
|
2
2
|
import { renderMermaidSVG } from 'beautiful-mermaid';
|
|
3
3
|
import colors from '@keboola/tailwind-config/colors';
|
|
4
4
|
import { clsx } from 'clsx';
|
|
5
5
|
import { extendTailwindMerge } from 'tailwind-merge';
|
|
6
6
|
import { Root as Root$1, Trigger, Portal, Content } from '@radix-ui/react-tooltip';
|
|
7
7
|
import { cva } from 'class-variance-authority';
|
|
8
|
+
import { keboolaLegacy } from '@keboola/brand-registry';
|
|
8
9
|
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
10
|
+
import DOMPurify from 'dompurify';
|
|
9
11
|
import { Root, Slottable } from '@radix-ui/react-slot';
|
|
10
12
|
import * as lucide_react_star from 'lucide-react';
|
|
11
13
|
|
|
@@ -41,17 +43,49 @@ var keyCodes = {
|
|
|
41
43
|
ENTER: "Enter",
|
|
42
44
|
SPACE: " "
|
|
43
45
|
};
|
|
46
|
+
var ThemeContext = createContext(null);
|
|
47
|
+
|
|
48
|
+
// src/components/internal/useIsLegacyBrand.ts
|
|
49
|
+
var useIsLegacyBrand = () => {
|
|
50
|
+
const context = use(ThemeContext);
|
|
51
|
+
return context === null || context.brand.id === keboolaLegacy.id;
|
|
52
|
+
};
|
|
44
53
|
var tooltipVariants = cva(
|
|
45
54
|
[
|
|
46
55
|
"tailwindcss-preflight",
|
|
47
56
|
"tw-inline-block",
|
|
48
|
-
"tw-rounded",
|
|
49
|
-
"tw-bg-neutral-800",
|
|
50
|
-
"tw-text-white",
|
|
51
57
|
"tw-break-anywhere",
|
|
52
58
|
"tw-max-h-96",
|
|
53
59
|
"tw-overflow-y-auto",
|
|
54
|
-
"tw-z-[1060]"
|
|
60
|
+
"tw-z-[1060]",
|
|
61
|
+
// legacy (dark) chrome — default
|
|
62
|
+
"tw-rounded",
|
|
63
|
+
"tw-bg-neutral-800",
|
|
64
|
+
"tw-text-white",
|
|
65
|
+
// argo chrome overrides — semantic floating-panel tokens
|
|
66
|
+
"data-[argo=true]:tw-rounded-2xl",
|
|
67
|
+
"data-[argo=true]:tw-border",
|
|
68
|
+
"data-[argo=true]:tw-border-solid",
|
|
69
|
+
"data-[argo=true]:tw-border-border",
|
|
70
|
+
"data-[argo=true]:tw-bg-popover",
|
|
71
|
+
"data-[argo=true]:tw-text-popover-foreground",
|
|
72
|
+
"data-[argo=true]:tw-shadow-md",
|
|
73
|
+
// argo open animation
|
|
74
|
+
"data-[argo=true]:data-[state=delayed-open]:tw-animate-in",
|
|
75
|
+
"data-[argo=true]:data-[state=instant-open]:tw-animate-in",
|
|
76
|
+
"data-[argo=true]:data-[state=delayed-open]:tw-fade-in-0",
|
|
77
|
+
"data-[argo=true]:data-[state=instant-open]:tw-fade-in-0",
|
|
78
|
+
"data-[argo=true]:data-[state=delayed-open]:tw-zoom-in-95",
|
|
79
|
+
"data-[argo=true]:data-[state=instant-open]:tw-zoom-in-95",
|
|
80
|
+
// argo closed animation
|
|
81
|
+
"data-[argo=true]:data-[state=closed]:tw-animate-out",
|
|
82
|
+
"data-[argo=true]:data-[state=closed]:tw-fade-out-0",
|
|
83
|
+
"data-[argo=true]:data-[state=closed]:tw-zoom-out-95",
|
|
84
|
+
// argo position animation
|
|
85
|
+
"data-[argo=true]:data-[side=bottom]:tw-slide-in-from-top-2",
|
|
86
|
+
"data-[argo=true]:data-[side=left]:tw-slide-in-from-right-2",
|
|
87
|
+
"data-[argo=true]:data-[side=right]:tw-slide-in-from-left-2",
|
|
88
|
+
"data-[argo=true]:data-[side=top]:tw-slide-in-from-bottom-2"
|
|
55
89
|
],
|
|
56
90
|
{
|
|
57
91
|
defaultVariants: {
|
|
@@ -84,6 +118,7 @@ var tooltipVariants = cva(
|
|
|
84
118
|
var TooltipContent = ({
|
|
85
119
|
className,
|
|
86
120
|
variant,
|
|
121
|
+
argo,
|
|
87
122
|
keepOpenOnPointerDownOutside = false,
|
|
88
123
|
children,
|
|
89
124
|
onPointerDownOutside,
|
|
@@ -93,6 +128,8 @@ var TooltipContent = ({
|
|
|
93
128
|
placement = "right",
|
|
94
129
|
...rest
|
|
95
130
|
}) => {
|
|
131
|
+
const isLegacy = useIsLegacyBrand();
|
|
132
|
+
const renderArgo = !isLegacy || argo === true;
|
|
96
133
|
const handlePointerDownOutside = (event) => {
|
|
97
134
|
if (keepOpenOnPointerDownOutside) event.preventDefault();
|
|
98
135
|
onPointerDownOutside?.(event);
|
|
@@ -101,7 +138,8 @@ var TooltipContent = ({
|
|
|
101
138
|
Content,
|
|
102
139
|
{
|
|
103
140
|
...rest,
|
|
104
|
-
"data-tooltip-content": true,
|
|
141
|
+
"data-tooltip-content": renderArgo ? void 0 : true,
|
|
142
|
+
"data-argo": renderArgo,
|
|
105
143
|
sideOffset,
|
|
106
144
|
collisionPadding,
|
|
107
145
|
onPointerDownOutside: handlePointerDownOutside,
|
|
@@ -160,6 +198,7 @@ var Tooltip = ({
|
|
|
160
198
|
className,
|
|
161
199
|
keepOpenOnTriggerClick = false,
|
|
162
200
|
variant,
|
|
201
|
+
argo,
|
|
163
202
|
placement = "right",
|
|
164
203
|
forceHide = false,
|
|
165
204
|
forceShow = false,
|
|
@@ -198,6 +237,7 @@ var Tooltip = ({
|
|
|
198
237
|
{
|
|
199
238
|
className,
|
|
200
239
|
variant: resolvedVariant,
|
|
240
|
+
argo,
|
|
201
241
|
placement,
|
|
202
242
|
keepOpenOnPointerDownOutside: keepOpenOnTriggerClick,
|
|
203
243
|
children: tooltip
|
|
@@ -224,7 +264,7 @@ var ANIMATION_CLASS_NAME = cn(
|
|
|
224
264
|
"tw-relative",
|
|
225
265
|
"tw-overflow-hidden",
|
|
226
266
|
"tw-pointer-events-none",
|
|
227
|
-
"tw-bg-
|
|
267
|
+
"tw-bg-muted",
|
|
228
268
|
// before
|
|
229
269
|
'before:tw-content-[""]',
|
|
230
270
|
"before:tw-opacity-100",
|
|
@@ -463,6 +503,8 @@ var argoVariants = cva(
|
|
|
463
503
|
"tw-bg-clip-padding",
|
|
464
504
|
// anchor support
|
|
465
505
|
"!tw-no-underline",
|
|
506
|
+
"aria-disabled:tw-cursor-not-allowed",
|
|
507
|
+
"aria-disabled:tw-opacity-50",
|
|
466
508
|
// icon
|
|
467
509
|
"tw-shrink-0",
|
|
468
510
|
"[&_svg]:tw-pointer-events-none",
|
|
@@ -565,14 +607,11 @@ var Button = ({
|
|
|
565
607
|
block = false,
|
|
566
608
|
...buttonProps
|
|
567
609
|
}) => {
|
|
610
|
+
const isLegacy = useIsLegacyBrand();
|
|
611
|
+
const renderArgo = !isLegacy || argo;
|
|
568
612
|
const Comp = asChild ? Root : "button";
|
|
569
613
|
const isIconOnly = String(size).startsWith("icon");
|
|
570
|
-
const classNames =
|
|
571
|
-
size,
|
|
572
|
-
variant,
|
|
573
|
-
block,
|
|
574
|
-
className
|
|
575
|
-
});
|
|
614
|
+
const classNames = renderArgo ? argoVariants({ variant, size, block, className }) : variants({ size, variant, block, className });
|
|
576
615
|
const handleClick = (event) => {
|
|
577
616
|
const isAnchor = event.currentTarget.tagName === "A";
|
|
578
617
|
if (isAnchor && disabled) {
|
|
@@ -693,6 +732,10 @@ var MIN_SCALE = 0.5;
|
|
|
693
732
|
var MAX_SCALE = 3;
|
|
694
733
|
var ZOOM_STEP = 0.1;
|
|
695
734
|
var ZoomableSvg = ({ html, copyText, className }) => {
|
|
735
|
+
const safeHtml = useMemo(
|
|
736
|
+
() => DOMPurify.sanitize(html, { USE_PROFILES: { svg: true, svgFilters: true } }),
|
|
737
|
+
[html]
|
|
738
|
+
);
|
|
696
739
|
const containerRef = useRef(null);
|
|
697
740
|
const [scale, setScale] = useState(1);
|
|
698
741
|
const [translate, setTranslate] = useState({ x: 0, y: 0 });
|
|
@@ -788,7 +831,7 @@ var ZoomableSvg = ({ html, copyText, className }) => {
|
|
|
788
831
|
isFullscreen && "tw-h-full [&>svg]:tw-h-full"
|
|
789
832
|
),
|
|
790
833
|
style: { transform: `translate(${translate.x}px, ${translate.y}px) scale(${scale})` },
|
|
791
|
-
dangerouslySetInnerHTML: { __html:
|
|
834
|
+
dangerouslySetInnerHTML: { __html: safeHtml }
|
|
792
835
|
}
|
|
793
836
|
)
|
|
794
837
|
}
|
|
@@ -841,7 +884,7 @@ var ZoomableSvg = ({ html, copyText, className }) => {
|
|
|
841
884
|
"div",
|
|
842
885
|
{
|
|
843
886
|
role: "presentation",
|
|
844
|
-
className: "tw-fixed tw-inset-0 tw-z-[1060] tw-bg-
|
|
887
|
+
className: "tw-fixed tw-inset-0 tw-z-[1060] tw-bg-muted tw-p-4",
|
|
845
888
|
onClick: stopPropagation,
|
|
846
889
|
children: diagramContent
|
|
847
890
|
}
|
|
@@ -851,13 +894,18 @@ var ZoomableSvg = ({ html, copyText, className }) => {
|
|
|
851
894
|
"div",
|
|
852
895
|
{
|
|
853
896
|
className: cn(
|
|
854
|
-
"tw-overflow-hidden tw-rounded-md tw-border tw-border-
|
|
897
|
+
"tw-overflow-hidden tw-rounded-md tw-border tw-border-border tw-bg-muted",
|
|
855
898
|
className
|
|
856
899
|
),
|
|
857
900
|
children: diagramContent
|
|
858
901
|
}
|
|
859
902
|
);
|
|
860
903
|
};
|
|
904
|
+
var PRIMARY_FALLBACK_CHANNELS = "31 143 255";
|
|
905
|
+
var resolvePrimary = () => {
|
|
906
|
+
const channels = typeof document === "undefined" ? PRIMARY_FALLBACK_CHANNELS : getComputedStyle(document.documentElement).getPropertyValue("--color-primary").trim() || PRIMARY_FALLBACK_CHANNELS;
|
|
907
|
+
return `rgb(${channels})`;
|
|
908
|
+
};
|
|
861
909
|
var mermaidPromise = null;
|
|
862
910
|
var getMermaid = () => {
|
|
863
911
|
if (!mermaidPromise) {
|
|
@@ -906,7 +954,7 @@ var getMermaid = () => {
|
|
|
906
954
|
taskTextColor: colors.neutral[800],
|
|
907
955
|
taskTextDarkColor: colors.neutral[800],
|
|
908
956
|
taskTextLightColor: colors.neutral[800],
|
|
909
|
-
activeTaskBorderColor:
|
|
957
|
+
activeTaskBorderColor: resolvePrimary(),
|
|
910
958
|
activeTaskBkgColor: colors.secondary[200],
|
|
911
959
|
doneTaskBorderColor: colors.primary[600],
|
|
912
960
|
doneTaskBkgColor: colors.primary[100],
|
|
@@ -958,46 +1006,28 @@ var makeResponsive = (svgString) => {
|
|
|
958
1006
|
};
|
|
959
1007
|
var RENDER_DEBOUNCE_MS = 300;
|
|
960
1008
|
var svgCache = /* @__PURE__ */ new Map();
|
|
1009
|
+
var resolveSyncSvg = (code) => {
|
|
1010
|
+
const cached = svgCache.get(code);
|
|
1011
|
+
if (cached) return cached;
|
|
1012
|
+
const fast = tryFastRender(code);
|
|
1013
|
+
if (fast) svgCache.set(code, fast);
|
|
1014
|
+
return fast;
|
|
1015
|
+
};
|
|
961
1016
|
var MermaidDiagram = ({ code }) => {
|
|
962
1017
|
const id = useId();
|
|
963
|
-
const [svg, setSvg] = useState(() =>
|
|
964
|
-
const cached = svgCache.get(code);
|
|
965
|
-
if (cached) return cached;
|
|
966
|
-
const fast = tryFastRender(code);
|
|
967
|
-
if (fast) {
|
|
968
|
-
svgCache.set(code, fast);
|
|
969
|
-
return fast;
|
|
970
|
-
}
|
|
971
|
-
return null;
|
|
972
|
-
});
|
|
1018
|
+
const [svg, setSvg] = useState(() => resolveSyncSvg(code));
|
|
973
1019
|
const [renderFailed, setRenderFailed] = useState(false);
|
|
974
1020
|
const debounceRef = useRef(null);
|
|
975
1021
|
const renderIdRef = useRef(0);
|
|
976
1022
|
const [prevCode, setPrevCode] = useState(code);
|
|
977
1023
|
if (code !== prevCode) {
|
|
978
1024
|
setPrevCode(code);
|
|
979
|
-
|
|
980
|
-
const fast = cached ?? tryFastRender(code);
|
|
981
|
-
if (fast && !cached) svgCache.set(code, fast);
|
|
982
|
-
setSvg(fast);
|
|
1025
|
+
setSvg(resolveSyncSvg(code));
|
|
983
1026
|
setRenderFailed(false);
|
|
984
1027
|
}
|
|
985
1028
|
useEffect(() => {
|
|
986
|
-
if (svgCache.has(code))
|
|
987
|
-
setSvg(svgCache.get(code));
|
|
988
|
-
setRenderFailed(false);
|
|
989
|
-
return;
|
|
990
|
-
}
|
|
991
|
-
const fastResult = tryFastRender(code);
|
|
992
|
-
if (fastResult) {
|
|
993
|
-
svgCache.set(code, fastResult);
|
|
994
|
-
setSvg(fastResult);
|
|
995
|
-
setRenderFailed(false);
|
|
996
|
-
return;
|
|
997
|
-
}
|
|
998
|
-
setSvg(null);
|
|
1029
|
+
if (svgCache.has(code)) return;
|
|
999
1030
|
const currentRenderId = ++renderIdRef.current;
|
|
1000
|
-
setRenderFailed(false);
|
|
1001
1031
|
if (debounceRef.current) {
|
|
1002
1032
|
clearTimeout(debounceRef.current);
|
|
1003
1033
|
}
|