@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.cjs
CHANGED
|
@@ -7,7 +7,9 @@ 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
14
|
var lucide_react_star = require('lucide-react');
|
|
13
15
|
|
|
@@ -32,6 +34,7 @@ function _interopNamespace(e) {
|
|
|
32
34
|
}
|
|
33
35
|
|
|
34
36
|
var colors__default = /*#__PURE__*/_interopDefault(colors);
|
|
37
|
+
var DOMPurify__default = /*#__PURE__*/_interopDefault(DOMPurify);
|
|
35
38
|
var lucide_react_star__namespace = /*#__PURE__*/_interopNamespace(lucide_react_star);
|
|
36
39
|
|
|
37
40
|
var __defProp = Object.defineProperty;
|
|
@@ -66,17 +69,49 @@ var keyCodes = {
|
|
|
66
69
|
ENTER: "Enter",
|
|
67
70
|
SPACE: " "
|
|
68
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
|
+
};
|
|
69
79
|
var tooltipVariants = classVarianceAuthority.cva(
|
|
70
80
|
[
|
|
71
81
|
"tailwindcss-preflight",
|
|
72
82
|
"tw-inline-block",
|
|
73
|
-
"tw-rounded",
|
|
74
|
-
"tw-bg-neutral-800",
|
|
75
|
-
"tw-text-white",
|
|
76
83
|
"tw-break-anywhere",
|
|
77
84
|
"tw-max-h-96",
|
|
78
85
|
"tw-overflow-y-auto",
|
|
79
|
-
"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"
|
|
80
115
|
],
|
|
81
116
|
{
|
|
82
117
|
defaultVariants: {
|
|
@@ -109,6 +144,7 @@ var tooltipVariants = classVarianceAuthority.cva(
|
|
|
109
144
|
var TooltipContent = ({
|
|
110
145
|
className,
|
|
111
146
|
variant,
|
|
147
|
+
argo,
|
|
112
148
|
keepOpenOnPointerDownOutside = false,
|
|
113
149
|
children,
|
|
114
150
|
onPointerDownOutside,
|
|
@@ -118,6 +154,8 @@ var TooltipContent = ({
|
|
|
118
154
|
placement = "right",
|
|
119
155
|
...rest
|
|
120
156
|
}) => {
|
|
157
|
+
const isLegacy = useIsLegacyBrand();
|
|
158
|
+
const renderArgo = !isLegacy || argo === true;
|
|
121
159
|
const handlePointerDownOutside = (event) => {
|
|
122
160
|
if (keepOpenOnPointerDownOutside) event.preventDefault();
|
|
123
161
|
onPointerDownOutside?.(event);
|
|
@@ -126,7 +164,8 @@ var TooltipContent = ({
|
|
|
126
164
|
reactTooltip.Content,
|
|
127
165
|
{
|
|
128
166
|
...rest,
|
|
129
|
-
"data-tooltip-content": true,
|
|
167
|
+
"data-tooltip-content": renderArgo ? void 0 : true,
|
|
168
|
+
"data-argo": renderArgo,
|
|
130
169
|
sideOffset,
|
|
131
170
|
collisionPadding,
|
|
132
171
|
onPointerDownOutside: handlePointerDownOutside,
|
|
@@ -185,6 +224,7 @@ var Tooltip = ({
|
|
|
185
224
|
className,
|
|
186
225
|
keepOpenOnTriggerClick = false,
|
|
187
226
|
variant,
|
|
227
|
+
argo,
|
|
188
228
|
placement = "right",
|
|
189
229
|
forceHide = false,
|
|
190
230
|
forceShow = false,
|
|
@@ -223,6 +263,7 @@ var Tooltip = ({
|
|
|
223
263
|
{
|
|
224
264
|
className,
|
|
225
265
|
variant: resolvedVariant,
|
|
266
|
+
argo,
|
|
226
267
|
placement,
|
|
227
268
|
keepOpenOnPointerDownOutside: keepOpenOnTriggerClick,
|
|
228
269
|
children: tooltip
|
|
@@ -249,7 +290,7 @@ var ANIMATION_CLASS_NAME = cn(
|
|
|
249
290
|
"tw-relative",
|
|
250
291
|
"tw-overflow-hidden",
|
|
251
292
|
"tw-pointer-events-none",
|
|
252
|
-
"tw-bg-
|
|
293
|
+
"tw-bg-muted",
|
|
253
294
|
// before
|
|
254
295
|
'before:tw-content-[""]',
|
|
255
296
|
"before:tw-opacity-100",
|
|
@@ -488,6 +529,8 @@ var argoVariants = classVarianceAuthority.cva(
|
|
|
488
529
|
"tw-bg-clip-padding",
|
|
489
530
|
// anchor support
|
|
490
531
|
"!tw-no-underline",
|
|
532
|
+
"aria-disabled:tw-cursor-not-allowed",
|
|
533
|
+
"aria-disabled:tw-opacity-50",
|
|
491
534
|
// icon
|
|
492
535
|
"tw-shrink-0",
|
|
493
536
|
"[&_svg]:tw-pointer-events-none",
|
|
@@ -590,14 +633,11 @@ var Button = ({
|
|
|
590
633
|
block = false,
|
|
591
634
|
...buttonProps
|
|
592
635
|
}) => {
|
|
636
|
+
const isLegacy = useIsLegacyBrand();
|
|
637
|
+
const renderArgo = !isLegacy || argo;
|
|
593
638
|
const Comp = asChild ? reactSlot.Root : "button";
|
|
594
639
|
const isIconOnly = String(size).startsWith("icon");
|
|
595
|
-
const classNames =
|
|
596
|
-
size,
|
|
597
|
-
variant,
|
|
598
|
-
block,
|
|
599
|
-
className
|
|
600
|
-
});
|
|
640
|
+
const classNames = renderArgo ? argoVariants({ variant, size, block, className }) : variants({ size, variant, block, className });
|
|
601
641
|
const handleClick = (event) => {
|
|
602
642
|
const isAnchor = event.currentTarget.tagName === "A";
|
|
603
643
|
if (isAnchor && disabled) {
|
|
@@ -718,6 +758,10 @@ var MIN_SCALE = 0.5;
|
|
|
718
758
|
var MAX_SCALE = 3;
|
|
719
759
|
var ZOOM_STEP = 0.1;
|
|
720
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
|
+
);
|
|
721
765
|
const containerRef = react.useRef(null);
|
|
722
766
|
const [scale, setScale] = react.useState(1);
|
|
723
767
|
const [translate, setTranslate] = react.useState({ x: 0, y: 0 });
|
|
@@ -813,7 +857,7 @@ var ZoomableSvg = ({ html, copyText, className }) => {
|
|
|
813
857
|
isFullscreen && "tw-h-full [&>svg]:tw-h-full"
|
|
814
858
|
),
|
|
815
859
|
style: { transform: `translate(${translate.x}px, ${translate.y}px) scale(${scale})` },
|
|
816
|
-
dangerouslySetInnerHTML: { __html:
|
|
860
|
+
dangerouslySetInnerHTML: { __html: safeHtml }
|
|
817
861
|
}
|
|
818
862
|
)
|
|
819
863
|
}
|
|
@@ -866,7 +910,7 @@ var ZoomableSvg = ({ html, copyText, className }) => {
|
|
|
866
910
|
"div",
|
|
867
911
|
{
|
|
868
912
|
role: "presentation",
|
|
869
|
-
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",
|
|
870
914
|
onClick: stopPropagation,
|
|
871
915
|
children: diagramContent
|
|
872
916
|
}
|
|
@@ -876,13 +920,18 @@ var ZoomableSvg = ({ html, copyText, className }) => {
|
|
|
876
920
|
"div",
|
|
877
921
|
{
|
|
878
922
|
className: cn(
|
|
879
|
-
"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",
|
|
880
924
|
className
|
|
881
925
|
),
|
|
882
926
|
children: diagramContent
|
|
883
927
|
}
|
|
884
928
|
);
|
|
885
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
|
+
};
|
|
886
935
|
var mermaidPromise = null;
|
|
887
936
|
var getMermaid = () => {
|
|
888
937
|
if (!mermaidPromise) {
|
|
@@ -931,7 +980,7 @@ var getMermaid = () => {
|
|
|
931
980
|
taskTextColor: colors__default.default.neutral[800],
|
|
932
981
|
taskTextDarkColor: colors__default.default.neutral[800],
|
|
933
982
|
taskTextLightColor: colors__default.default.neutral[800],
|
|
934
|
-
activeTaskBorderColor:
|
|
983
|
+
activeTaskBorderColor: resolvePrimary(),
|
|
935
984
|
activeTaskBkgColor: colors__default.default.secondary[200],
|
|
936
985
|
doneTaskBorderColor: colors__default.default.primary[600],
|
|
937
986
|
doneTaskBkgColor: colors__default.default.primary[100],
|
|
@@ -983,46 +1032,28 @@ var makeResponsive = (svgString) => {
|
|
|
983
1032
|
};
|
|
984
1033
|
var RENDER_DEBOUNCE_MS = 300;
|
|
985
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
|
+
};
|
|
986
1042
|
var MermaidDiagram = ({ code }) => {
|
|
987
1043
|
const id = react.useId();
|
|
988
|
-
const [svg, setSvg] = react.useState(() =>
|
|
989
|
-
const cached = svgCache.get(code);
|
|
990
|
-
if (cached) return cached;
|
|
991
|
-
const fast = tryFastRender(code);
|
|
992
|
-
if (fast) {
|
|
993
|
-
svgCache.set(code, fast);
|
|
994
|
-
return fast;
|
|
995
|
-
}
|
|
996
|
-
return null;
|
|
997
|
-
});
|
|
1044
|
+
const [svg, setSvg] = react.useState(() => resolveSyncSvg(code));
|
|
998
1045
|
const [renderFailed, setRenderFailed] = react.useState(false);
|
|
999
1046
|
const debounceRef = react.useRef(null);
|
|
1000
1047
|
const renderIdRef = react.useRef(0);
|
|
1001
1048
|
const [prevCode, setPrevCode] = react.useState(code);
|
|
1002
1049
|
if (code !== prevCode) {
|
|
1003
1050
|
setPrevCode(code);
|
|
1004
|
-
|
|
1005
|
-
const fast = cached ?? tryFastRender(code);
|
|
1006
|
-
if (fast && !cached) svgCache.set(code, fast);
|
|
1007
|
-
setSvg(fast);
|
|
1051
|
+
setSvg(resolveSyncSvg(code));
|
|
1008
1052
|
setRenderFailed(false);
|
|
1009
1053
|
}
|
|
1010
1054
|
react.useEffect(() => {
|
|
1011
|
-
if (svgCache.has(code))
|
|
1012
|
-
setSvg(svgCache.get(code));
|
|
1013
|
-
setRenderFailed(false);
|
|
1014
|
-
return;
|
|
1015
|
-
}
|
|
1016
|
-
const fastResult = tryFastRender(code);
|
|
1017
|
-
if (fastResult) {
|
|
1018
|
-
svgCache.set(code, fastResult);
|
|
1019
|
-
setSvg(fastResult);
|
|
1020
|
-
setRenderFailed(false);
|
|
1021
|
-
return;
|
|
1022
|
-
}
|
|
1023
|
-
setSvg(null);
|
|
1055
|
+
if (svgCache.has(code)) return;
|
|
1024
1056
|
const currentRenderId = ++renderIdRef.current;
|
|
1025
|
-
setRenderFailed(false);
|
|
1026
1057
|
if (debounceRef.current) {
|
|
1027
1058
|
clearTimeout(debounceRef.current);
|
|
1028
1059
|
}
|