@keboola/design 6.3.0 → 6.5.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/AGENTS.md +2 -3
- package/COMPONENT-API.md +164 -156
- package/README.md +2 -2
- package/dist/editors.cjs +32 -10
- package/dist/editors.cjs.map +1 -1
- package/dist/editors.js +32 -10
- package/dist/editors.js.map +1 -1
- package/dist/icons.cjs +25 -0
- package/dist/icons.cjs.map +1 -1
- package/dist/icons.d.cts +3 -1
- package/dist/icons.d.ts +3 -1
- package/dist/icons.js +25 -1
- package/dist/icons.js.map +1 -1
- package/dist/index.cjs +6086 -6126
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +511 -1061
- package/dist/index.d.ts +511 -1061
- package/dist/index.js +6101 -6143
- package/dist/index.js.map +1 -1
- package/dist/markdown-editor.cjs +268 -243
- package/dist/markdown-editor.cjs.map +1 -1
- package/dist/markdown-editor.js +268 -243
- package/dist/markdown-editor.js.map +1 -1
- package/dist/mermaid.cjs +89 -34
- package/dist/mermaid.cjs.map +1 -1
- package/dist/mermaid.js +89 -34
- package/dist/mermaid.js.map +1 -1
- package/dist/rjsf.cjs +1478 -1494
- package/dist/rjsf.cjs.map +1 -1
- package/dist/rjsf.js +1479 -1495
- package/dist/rjsf.js.map +1 -1
- package/dist/styles.css +2 -2
- package/dist/testing.cjs.map +1 -1
- package/dist/testing.js.map +1 -1
- package/package.json +10 -9
package/dist/mermaid.cjs
CHANGED
|
@@ -9,6 +9,7 @@ var reactTooltip = require('@radix-ui/react-tooltip');
|
|
|
9
9
|
var classVarianceAuthority = require('class-variance-authority');
|
|
10
10
|
var brandRegistry = require('@keboola/brand-registry');
|
|
11
11
|
var jsxRuntime = require('react/jsx-runtime');
|
|
12
|
+
var reactDom = require('react-dom');
|
|
12
13
|
var DOMPurify = require('dompurify');
|
|
13
14
|
var reactSlot = require('@radix-ui/react-slot');
|
|
14
15
|
var lucide_react_star = require('lucide-react');
|
|
@@ -251,6 +252,7 @@ var Tooltip = ({
|
|
|
251
252
|
placement = "right",
|
|
252
253
|
forceHide = false,
|
|
253
254
|
forceShow = false,
|
|
255
|
+
delayDuration,
|
|
254
256
|
// trigger props
|
|
255
257
|
triggerAsChild = false
|
|
256
258
|
}) => {
|
|
@@ -270,6 +272,7 @@ var Tooltip = ({
|
|
|
270
272
|
{
|
|
271
273
|
open: !!tooltip && (open || forceShow) && !forceHide,
|
|
272
274
|
onOpenChange: setOpen,
|
|
275
|
+
delayDuration,
|
|
273
276
|
disableHoverableContent: isActionVariant,
|
|
274
277
|
children: [
|
|
275
278
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -342,7 +345,8 @@ var Skeleton = ({ height = "md", className, count = 1 }) => {
|
|
|
342
345
|
var icons_exports = {};
|
|
343
346
|
__export(icons_exports, {
|
|
344
347
|
Google: () => Google,
|
|
345
|
-
Keboola: () => Keboola
|
|
348
|
+
Keboola: () => Keboola,
|
|
349
|
+
Microsoft: () => Microsoft
|
|
346
350
|
});
|
|
347
351
|
__reExport(icons_exports, lucide_react_star__namespace);
|
|
348
352
|
var Google = react.forwardRef(
|
|
@@ -401,6 +405,7 @@ var Keboola = react.forwardRef(
|
|
|
401
405
|
width: size,
|
|
402
406
|
height: size,
|
|
403
407
|
viewBox: "0 0 300 512",
|
|
408
|
+
overflow: "visible",
|
|
404
409
|
fill: color,
|
|
405
410
|
className: cn("lucide", className),
|
|
406
411
|
...rest,
|
|
@@ -412,6 +417,29 @@ var Keboola = react.forwardRef(
|
|
|
412
417
|
)
|
|
413
418
|
);
|
|
414
419
|
Keboola.displayName = "Keboola";
|
|
420
|
+
var Microsoft = react.forwardRef(
|
|
421
|
+
({ size = 24, className, children, ...rest }, ref) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
422
|
+
"svg",
|
|
423
|
+
{
|
|
424
|
+
ref,
|
|
425
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
426
|
+
width: size,
|
|
427
|
+
height: size,
|
|
428
|
+
viewBox: "0 0 21 21",
|
|
429
|
+
fill: "none",
|
|
430
|
+
className: cn("lucide", className),
|
|
431
|
+
...rest,
|
|
432
|
+
children: [
|
|
433
|
+
/* @__PURE__ */ jsxRuntime.jsx("rect", { x: "0", y: "0", width: "10", height: "10", fill: "#F25022" }),
|
|
434
|
+
/* @__PURE__ */ jsxRuntime.jsx("rect", { x: "11", y: "0", width: "10", height: "10", fill: "#7FBA00" }),
|
|
435
|
+
/* @__PURE__ */ jsxRuntime.jsx("rect", { x: "0", y: "11", width: "10", height: "10", fill: "#00A4EF" }),
|
|
436
|
+
/* @__PURE__ */ jsxRuntime.jsx("rect", { x: "11", y: "11", width: "10", height: "10", fill: "#FFB900" }),
|
|
437
|
+
children
|
|
438
|
+
]
|
|
439
|
+
}
|
|
440
|
+
)
|
|
441
|
+
);
|
|
442
|
+
Microsoft.displayName = "Microsoft";
|
|
415
443
|
var variants = classVarianceAuthority.cva(
|
|
416
444
|
[
|
|
417
445
|
"tailwindcss-preflight",
|
|
@@ -836,10 +864,13 @@ var ClipboardButton = ({
|
|
|
836
864
|
var MIN_SCALE = 0.5;
|
|
837
865
|
var MAX_SCALE = 3;
|
|
838
866
|
var ZOOM_STEP = 0.1;
|
|
839
|
-
var ZoomableSvg = ({ html, copyText, className }) => {
|
|
867
|
+
var ZoomableSvg = ({ html, copyText, className, allowForeignObject }) => {
|
|
840
868
|
const safeHtml = react.useMemo(
|
|
841
|
-
() => DOMPurify__default.default.sanitize(html, {
|
|
842
|
-
|
|
869
|
+
() => DOMPurify__default.default.sanitize(html, {
|
|
870
|
+
USE_PROFILES: { svg: true, svgFilters: true },
|
|
871
|
+
...allowForeignObject ? { ADD_TAGS: ["foreignObject"] } : {}
|
|
872
|
+
}),
|
|
873
|
+
[html, allowForeignObject]
|
|
843
874
|
);
|
|
844
875
|
const containerRef = react.useRef(null);
|
|
845
876
|
const [scale, setScale] = react.useState(1);
|
|
@@ -868,7 +899,7 @@ var ZoomableSvg = ({ html, copyText, className }) => {
|
|
|
868
899
|
};
|
|
869
900
|
el.addEventListener("wheel", onWheel, { passive: false });
|
|
870
901
|
return () => el.removeEventListener("wheel", onWheel);
|
|
871
|
-
}, []);
|
|
902
|
+
}, [isFullscreen]);
|
|
872
903
|
const didDragRef = react.useRef(false);
|
|
873
904
|
const handleMouseDown = react.useCallback(
|
|
874
905
|
(e) => {
|
|
@@ -975,14 +1006,18 @@ var ZoomableSvg = ({ html, copyText, className }) => {
|
|
|
975
1006
|
}
|
|
976
1007
|
);
|
|
977
1008
|
if (isFullscreen) {
|
|
978
|
-
return
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
1009
|
+
return reactDom.createPortal(
|
|
1010
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1011
|
+
"div",
|
|
1012
|
+
{
|
|
1013
|
+
role: "presentation",
|
|
1014
|
+
"data-testid": "zoomable-svg-fullscreen",
|
|
1015
|
+
className: "tailwindcss-preflight tw-fixed tw-inset-0 tw-z-[1060] tw-bg-muted tw-p-4",
|
|
1016
|
+
onClick: stopPropagation,
|
|
1017
|
+
children: diagramContent
|
|
1018
|
+
}
|
|
1019
|
+
),
|
|
1020
|
+
document.body
|
|
986
1021
|
);
|
|
987
1022
|
}
|
|
988
1023
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -996,15 +1031,47 @@ var ZoomableSvg = ({ html, copyText, className }) => {
|
|
|
996
1031
|
}
|
|
997
1032
|
);
|
|
998
1033
|
};
|
|
1034
|
+
|
|
1035
|
+
// src/blocks/MermaidDiagram/svgTransforms.ts
|
|
1036
|
+
var HTML_TAG = /<[^>]+>/g;
|
|
1037
|
+
var FOREIGN_OBJECT = /(<foreignObject\b[^>]*>)([\s\S]*?)(<\/foreignObject>)/g;
|
|
1038
|
+
var ROOT_SVG_TAG = /^(\s*<svg\b)([^>]*)(>)/i;
|
|
1039
|
+
var flattenForeignObjectLabels = (svg) => svg.replace(FOREIGN_OBJECT, (_match, open, inner, close) => {
|
|
1040
|
+
const text = inner.replace(HTML_TAG, " ").replace(/\s+/g, " ").trim();
|
|
1041
|
+
return `${open}${text}${close}`;
|
|
1042
|
+
});
|
|
1043
|
+
var STYLE_ATTR = /\s+style="([^"]*)"/i;
|
|
1044
|
+
var makeResponsive = (svgString) => {
|
|
1045
|
+
const viewBoxMatch = svgString.match(/viewBox="[^"]*\s([\d.]+)\s[\d.]+"/);
|
|
1046
|
+
const vbWidth = viewBoxMatch ? Math.round(Number(viewBoxMatch[1])) : void 0;
|
|
1047
|
+
return svgString.replace(ROOT_SVG_TAG, (_match, open, attrs, close) => {
|
|
1048
|
+
const existingStyle = attrs.match(STYLE_ATTR)?.[1] ?? "";
|
|
1049
|
+
const styleDecls = existingStyle.replace(/max-width:\s*[^;"]*;?\s*/gi, "").replace(/\s+/g, " ").trim().replace(/;$/, "");
|
|
1050
|
+
let nextAttrs = attrs.replace(/\s+width="[^"]*"/i, "").replace(/\s+height="[^"]*"/i, "").replace(STYLE_ATTR, "");
|
|
1051
|
+
nextAttrs += ' width="100%"';
|
|
1052
|
+
const styleParts = [styleDecls, vbWidth ? `max-width: ${vbWidth}px` : ""].filter(Boolean).join("; ");
|
|
1053
|
+
if (styleParts) nextAttrs += ` style="${styleParts}"`;
|
|
1054
|
+
return `${open}${nextAttrs}${close}`;
|
|
1055
|
+
});
|
|
1056
|
+
};
|
|
999
1057
|
var PRIMARY_FALLBACK_CHANNELS = "31 143 255";
|
|
1000
1058
|
var resolvePrimary = () => {
|
|
1001
1059
|
const channels = typeof document === "undefined" ? PRIMARY_FALLBACK_CHANNELS : getComputedStyle(document.documentElement).getPropertyValue("--color-primary").trim() || PRIMARY_FALLBACK_CHANNELS;
|
|
1002
1060
|
return `rgb(${channels})`;
|
|
1003
1061
|
};
|
|
1004
1062
|
var mermaidPromise = null;
|
|
1063
|
+
var registerLucideIconPack = (m) => {
|
|
1064
|
+
m.registerIconPacks([
|
|
1065
|
+
{
|
|
1066
|
+
name: "lucide",
|
|
1067
|
+
loader: () => import('@iconify-json/lucide/icons.json').then((mod) => mod.default)
|
|
1068
|
+
}
|
|
1069
|
+
]);
|
|
1070
|
+
};
|
|
1005
1071
|
var getMermaid = () => {
|
|
1006
1072
|
if (!mermaidPromise) {
|
|
1007
1073
|
mermaidPromise = import('mermaid').then((m) => {
|
|
1074
|
+
registerLucideIconPack(m.default);
|
|
1008
1075
|
m.default.initialize({
|
|
1009
1076
|
startOnLoad: false,
|
|
1010
1077
|
securityLevel: "strict",
|
|
@@ -1068,7 +1135,9 @@ var getMermaid = () => {
|
|
|
1068
1135
|
return mermaidPromise;
|
|
1069
1136
|
};
|
|
1070
1137
|
var stripFontImports = (svg) => svg.replace(/@import\s+url\([^)]*fonts\.googleapis\.com[^)]*\);?\s*/g, "");
|
|
1138
|
+
var hasIconSyntax = (code) => /@\{[^}]*\bicon\s*:/.test(code) || /\b(?:icon|service|group)\b[^\n(]*\(\s*[\w-]+:/.test(code) || /\bfa[bslr]?:fa-/.test(code);
|
|
1071
1139
|
var tryFastRender = (code) => {
|
|
1140
|
+
if (hasIconSyntax(code)) return null;
|
|
1072
1141
|
try {
|
|
1073
1142
|
return stripFontImports(
|
|
1074
1143
|
beautifulMermaid.renderMermaidSVG(code, {
|
|
@@ -1078,27 +1147,11 @@ var tryFastRender = (code) => {
|
|
|
1078
1147
|
font: "Inter, system-ui, sans-serif"
|
|
1079
1148
|
})
|
|
1080
1149
|
);
|
|
1081
|
-
} catch {
|
|
1150
|
+
} catch (err) {
|
|
1151
|
+
console.debug("[MermaidDiagram] fast render unavailable, using async fallback:", err);
|
|
1082
1152
|
return null;
|
|
1083
1153
|
}
|
|
1084
1154
|
};
|
|
1085
|
-
var makeResponsive = (svgString) => {
|
|
1086
|
-
const viewBoxMatch = svgString.match(/viewBox="[^"]*\s([\d.]+)\s[\d.]+"/);
|
|
1087
|
-
const vbWidth = viewBoxMatch ? Math.round(Number(viewBoxMatch[1])) : void 0;
|
|
1088
|
-
let result = svgString.replace(/(<svg[^>]*?)\s+width="[^"]*"/i, '$1 width="100%"').replace(/(<svg[^>]*?)\s+height="[^"]*"/i, "$1");
|
|
1089
|
-
if (!vbWidth) return result;
|
|
1090
|
-
const hasStyle = /(<svg[^>]*?)\s+style="([^"]*)"/i.test(result);
|
|
1091
|
-
if (hasStyle) {
|
|
1092
|
-
result = result.replace(/(<svg[^>]*?)\s+style="([^"]*)"/i, (_m, pre, styles) => {
|
|
1093
|
-
const cleaned = styles.replace(/max-width:\s*[^;"]*;?\s*/g, "").trim();
|
|
1094
|
-
const combined = [cleaned, `max-width: ${vbWidth}px`].filter(Boolean).join("; ");
|
|
1095
|
-
return `${pre} style="${combined}"`;
|
|
1096
|
-
});
|
|
1097
|
-
} else {
|
|
1098
|
-
result = result.replace(/<svg/, `<svg style="max-width: ${vbWidth}px"`);
|
|
1099
|
-
}
|
|
1100
|
-
return result;
|
|
1101
|
-
};
|
|
1102
1155
|
var RENDER_DEBOUNCE_MS = 300;
|
|
1103
1156
|
var svgCache = /* @__PURE__ */ new Map();
|
|
1104
1157
|
var resolveSyncSvg = (code) => {
|
|
@@ -1139,8 +1192,9 @@ var MermaidDiagram = ({ code }) => {
|
|
|
1139
1192
|
try {
|
|
1140
1193
|
const result = await mermaidModule.default.render(rendererId, code, container);
|
|
1141
1194
|
if (renderIdRef.current === currentRenderId && result) {
|
|
1142
|
-
|
|
1143
|
-
|
|
1195
|
+
const svgOutput = flattenForeignObjectLabels(result.svg);
|
|
1196
|
+
svgCache.set(code, svgOutput);
|
|
1197
|
+
setSvg(svgOutput);
|
|
1144
1198
|
setRenderFailed(false);
|
|
1145
1199
|
}
|
|
1146
1200
|
} finally {
|
|
@@ -1187,7 +1241,8 @@ var MermaidDiagram = ({ code }) => {
|
|
|
1187
1241
|
copyText: `\`\`\`mermaid
|
|
1188
1242
|
${code}
|
|
1189
1243
|
\`\`\``,
|
|
1190
|
-
className: "tw-my-3"
|
|
1244
|
+
className: "tw-my-3",
|
|
1245
|
+
allowForeignObject: true
|
|
1191
1246
|
},
|
|
1192
1247
|
code
|
|
1193
1248
|
);
|