@page-speed/venn-diagram 0.0.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 +0 -0
- package/dist/cjs/esm/components/VennDiagram.d.ts +4 -0
- package/dist/cjs/esm/components/VennDiagram.d.ts.map +1 -0
- package/dist/cjs/esm/components/VennDiagramContext.d.ts +3 -0
- package/dist/cjs/esm/components/VennDiagramContext.d.ts.map +1 -0
- package/dist/cjs/esm/components/VennDiagramSVG.d.ts +16 -0
- package/dist/cjs/esm/components/VennDiagramSVG.d.ts.map +1 -0
- package/dist/cjs/esm/components/index.d.ts +3 -0
- package/dist/cjs/esm/components/index.d.ts.map +1 -0
- package/dist/cjs/esm/examples/KeywordGapDashboard.d.ts +3 -0
- package/dist/cjs/esm/examples/KeywordGapDashboard.d.ts.map +1 -0
- package/dist/cjs/esm/hooks/index.d.ts +2 -0
- package/dist/cjs/esm/hooks/index.d.ts.map +1 -0
- package/dist/cjs/esm/hooks/useVennLayout.d.ts +13 -0
- package/dist/cjs/esm/hooks/useVennLayout.d.ts.map +1 -0
- package/dist/cjs/esm/index.d.ts +5 -0
- package/dist/cjs/esm/index.d.ts.map +1 -0
- package/dist/cjs/esm/types/venn.types.d.ts +68 -0
- package/dist/cjs/esm/types/venn.types.d.ts.map +1 -0
- package/dist/cjs/esm/utils/colorScheme.d.ts +3 -0
- package/dist/cjs/esm/utils/colorScheme.d.ts.map +1 -0
- package/dist/cjs/esm/utils/index.d.ts +2 -0
- package/dist/cjs/esm/utils/index.d.ts.map +1 -0
- package/dist/cjs/index.js +1796 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/styles/index.css +162 -0
- package/dist/cjs/styles/index.css.map +1 -0
- package/dist/esm/_virtual/jsx-runtime.js +4 -0
- package/dist/esm/_virtual/jsx-runtime.js.map +1 -0
- package/dist/esm/_virtual/react-jsx-runtime.development.js +4 -0
- package/dist/esm/_virtual/react-jsx-runtime.development.js.map +1 -0
- package/dist/esm/_virtual/react-jsx-runtime.production.min.js +4 -0
- package/dist/esm/_virtual/react-jsx-runtime.production.min.js.map +1 -0
- package/dist/esm/components/VennDiagram.d.ts +4 -0
- package/dist/esm/components/VennDiagram.d.ts.map +1 -0
- package/dist/esm/components/VennDiagram.js +137 -0
- package/dist/esm/components/VennDiagram.js.map +1 -0
- package/dist/esm/components/VennDiagramContext.d.ts +3 -0
- package/dist/esm/components/VennDiagramContext.d.ts.map +1 -0
- package/dist/esm/components/VennDiagramContext.js +7 -0
- package/dist/esm/components/VennDiagramContext.js.map +1 -0
- package/dist/esm/components/VennDiagramSVG.d.ts +16 -0
- package/dist/esm/components/VennDiagramSVG.d.ts.map +1 -0
- package/dist/esm/components/VennDiagramSVG.js +122 -0
- package/dist/esm/components/VennDiagramSVG.js.map +1 -0
- package/dist/esm/components/index.d.ts +3 -0
- package/dist/esm/components/index.d.ts.map +1 -0
- package/dist/esm/examples/KeywordGapDashboard.d.ts +3 -0
- package/dist/esm/examples/KeywordGapDashboard.d.ts.map +1 -0
- package/dist/esm/hooks/index.d.ts +2 -0
- package/dist/esm/hooks/index.d.ts.map +1 -0
- package/dist/esm/hooks/useVennLayout.d.ts +13 -0
- package/dist/esm/hooks/useVennLayout.d.ts.map +1 -0
- package/dist/esm/hooks/useVennLayout.js +110 -0
- package/dist/esm/hooks/useVennLayout.js.map +1 -0
- package/dist/esm/index.d.ts +5 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +5 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/node_modules/.pnpm/react@18.3.1/node_modules/react/cjs/react-jsx-runtime.development.js +1344 -0
- package/dist/esm/node_modules/.pnpm/react@18.3.1/node_modules/react/cjs/react-jsx-runtime.development.js.map +1 -0
- package/dist/esm/node_modules/.pnpm/react@18.3.1/node_modules/react/cjs/react-jsx-runtime.production.min.js +25 -0
- package/dist/esm/node_modules/.pnpm/react@18.3.1/node_modules/react/cjs/react-jsx-runtime.production.min.js.map +1 -0
- package/dist/esm/node_modules/.pnpm/react@18.3.1/node_modules/react/jsx-runtime.js +14 -0
- package/dist/esm/node_modules/.pnpm/react@18.3.1/node_modules/react/jsx-runtime.js.map +1 -0
- package/dist/esm/styles/VennDiagram.module.css.js +4 -0
- package/dist/esm/styles/VennDiagram.module.css.js.map +1 -0
- package/dist/esm/styles/index.css +162 -0
- package/dist/esm/styles/index.css.map +1 -0
- package/dist/esm/types/venn.types.d.ts +68 -0
- package/dist/esm/types/venn.types.d.ts.map +1 -0
- package/dist/esm/utils/colorScheme.d.ts +3 -0
- package/dist/esm/utils/colorScheme.d.ts.map +1 -0
- package/dist/esm/utils/colorScheme.js +42 -0
- package/dist/esm/utils/colorScheme.js.map +1 -0
- package/dist/esm/utils/index.d.ts +2 -0
- package/dist/esm/utils/index.d.ts.map +1 -0
- package/package.json +101 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VennDiagramSVG.d.ts","sourceRoot":"","sources":["../../../src/components/VennDiagramSVG.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkC,MAAM,OAAO,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAInD,UAAU,mBAAmB;IAC3B,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,aAAa,EAAE,KAAK,CAAC;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IACnE,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;CACxC;AAED,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CA0KxD,CAAC"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { j as jsxRuntimeExports } from '../node_modules/.pnpm/react@18.3.1/node_modules/react/jsx-runtime.js';
|
|
2
|
+
import { useContext, useCallback } from 'react';
|
|
3
|
+
import { VennDiagramContext } from './VennDiagramContext.js';
|
|
4
|
+
import styles from '../styles/VennDiagram.module.css.js';
|
|
5
|
+
|
|
6
|
+
const VennDiagramSVG = ({
|
|
7
|
+
layout,
|
|
8
|
+
textPositions,
|
|
9
|
+
width,
|
|
10
|
+
height,
|
|
11
|
+
onClick
|
|
12
|
+
}) => {
|
|
13
|
+
const context = useContext(VennDiagramContext);
|
|
14
|
+
if (!context) {
|
|
15
|
+
throw new Error("VennDiagramSVG must be used within VennDiagram");
|
|
16
|
+
}
|
|
17
|
+
const {
|
|
18
|
+
data,
|
|
19
|
+
config,
|
|
20
|
+
hoveredSets,
|
|
21
|
+
setHoveredSets,
|
|
22
|
+
selectedSets,
|
|
23
|
+
setSelectedSets
|
|
24
|
+
} = context;
|
|
25
|
+
const {
|
|
26
|
+
colorScheme,
|
|
27
|
+
showLabels,
|
|
28
|
+
showValues,
|
|
29
|
+
animated,
|
|
30
|
+
strokeWidth
|
|
31
|
+
} = config;
|
|
32
|
+
const handleCircleHover = useCallback((setName, isEntering) => {
|
|
33
|
+
if (config.interactive) {
|
|
34
|
+
setHoveredSets(isEntering ? [setName] : null);
|
|
35
|
+
}
|
|
36
|
+
}, [setHoveredSets, config.interactive]);
|
|
37
|
+
const handleCircleClick = useCallback(setName => {
|
|
38
|
+
if (config.interactive) {
|
|
39
|
+
const isSelected = selectedSets?.includes(setName);
|
|
40
|
+
setSelectedSets(isSelected ? (selectedSets || []).filter(s => s !== setName) : [setName]);
|
|
41
|
+
onClick?.([setName]);
|
|
42
|
+
}
|
|
43
|
+
}, [selectedSets, setSelectedSets, config.interactive, onClick]);
|
|
44
|
+
return jsxRuntimeExports.jsxs("svg", {
|
|
45
|
+
viewBox: `0 0 ${width} ${height}`,
|
|
46
|
+
width: width,
|
|
47
|
+
height: height,
|
|
48
|
+
className: styles.svg,
|
|
49
|
+
role: "img",
|
|
50
|
+
"aria-label": "Venn diagram",
|
|
51
|
+
children: [layout.map((circle, idx) => {
|
|
52
|
+
const set = data.sets[idx];
|
|
53
|
+
const color = colorScheme ? colorScheme[idx] : "#ccc";
|
|
54
|
+
const isHovered = hoveredSets?.includes(set.name);
|
|
55
|
+
const isSelected = selectedSets?.includes(set.name);
|
|
56
|
+
return jsxRuntimeExports.jsx("g", {
|
|
57
|
+
className: styles.circleGroup,
|
|
58
|
+
children: jsxRuntimeExports.jsx("circle", {
|
|
59
|
+
cx: circle.x,
|
|
60
|
+
cy: circle.y,
|
|
61
|
+
r: circle.radius,
|
|
62
|
+
fill: color,
|
|
63
|
+
fillOpacity: isHovered ? config.hoverOpacity : 0.4,
|
|
64
|
+
stroke: color,
|
|
65
|
+
strokeWidth: strokeWidth,
|
|
66
|
+
className: `${styles.circle} ${isSelected ? styles.selected : ""}`,
|
|
67
|
+
style: {
|
|
68
|
+
transition: animated ? "all 300ms ease-in-out" : "none",
|
|
69
|
+
cursor: config.interactive ? "pointer" : "default"
|
|
70
|
+
},
|
|
71
|
+
onMouseEnter: () => handleCircleHover(set.name, true),
|
|
72
|
+
onMouseLeave: () => handleCircleHover(set.name, false),
|
|
73
|
+
onClick: () => handleCircleClick(set.name),
|
|
74
|
+
role: "button",
|
|
75
|
+
tabIndex: 0,
|
|
76
|
+
"aria-label": `Circle: ${set.label || set.name}`,
|
|
77
|
+
onKeyDown: e => {
|
|
78
|
+
if (e.key === "Enter" || e.key === " ") {
|
|
79
|
+
handleCircleClick(set.name);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
})
|
|
83
|
+
}, set.name);
|
|
84
|
+
}), textPositions.map(pos => {
|
|
85
|
+
const setNames = pos.setNames;
|
|
86
|
+
const value = setNames.length === 1 ? data.sets.find(s => s.name === setNames[0])?.size : data.intersections.find(i => i.sets.length === setNames.length && i.sets.every(s => setNames.includes(s)))?.size;
|
|
87
|
+
if (!value) return null;
|
|
88
|
+
const isHovered = hoveredSets && setNames.some(s => hoveredSets.includes(s));
|
|
89
|
+
const singleSet = setNames.length === 1 ? data.sets.find(s => s.name === setNames[0]) : undefined;
|
|
90
|
+
const rawLabel = singleSet?.label ?? setNames[0];
|
|
91
|
+
const renderedLabel = typeof rawLabel === "string" ? config.formatLabel ? config.formatLabel(rawLabel) : rawLabel : rawLabel;
|
|
92
|
+
return jsxRuntimeExports.jsxs("g", {
|
|
93
|
+
className: styles.labelGroup,
|
|
94
|
+
style: {
|
|
95
|
+
opacity: isHovered ? 1 : 0.7,
|
|
96
|
+
transition: animated ? "opacity 300ms ease-in-out" : "none"
|
|
97
|
+
},
|
|
98
|
+
children: [showValues && jsxRuntimeExports.jsx("text", {
|
|
99
|
+
x: pos.x,
|
|
100
|
+
y: pos.y - 8,
|
|
101
|
+
textAnchor: "middle",
|
|
102
|
+
className: styles.value,
|
|
103
|
+
fill: config.textFill,
|
|
104
|
+
fontSize: "16",
|
|
105
|
+
fontWeight: "600",
|
|
106
|
+
children: config.formatValue ? config.formatValue(value) : value
|
|
107
|
+
}), showLabels && setNames.length === 1 && jsxRuntimeExports.jsx("text", {
|
|
108
|
+
x: pos.x,
|
|
109
|
+
y: pos.y + 20,
|
|
110
|
+
textAnchor: "middle",
|
|
111
|
+
className: styles.label,
|
|
112
|
+
fill: config.textFill,
|
|
113
|
+
fontSize: "14",
|
|
114
|
+
children: renderedLabel
|
|
115
|
+
})]
|
|
116
|
+
}, setNames.join(","));
|
|
117
|
+
})]
|
|
118
|
+
});
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
export { VennDiagramSVG };
|
|
122
|
+
//# sourceMappingURL=VennDiagramSVG.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VennDiagramSVG.js","sources":["../../../../src/components/VennDiagramSVG.tsx"],"sourcesContent":[null],"names":["VennDiagramSVG","layout","textPositions","width","height","onClick","context","useContext","VennDiagramContext","Error","data","config","hoveredSets","setHoveredSets","selectedSets","setSelectedSets","colorScheme","showLabels","showValues","animated","strokeWidth","handleCircleHover","useCallback","setName","isEntering","interactive","handleCircleClick","isSelected","includes","filter","s","_jsxs","viewBox","className","styles","svg","role","children","map","circle","idx","set","sets","color","isHovered","name","_jsx","circleGroup","cx","x","cy","y","r","radius","fill","fillOpacity","hoverOpacity","stroke","selected","style","transition","cursor","onMouseEnter","onMouseLeave","tabIndex","label","onKeyDown","e","key","pos","setNames","value","length","find","size","intersections","i","every","some","singleSet","undefined","rawLabel","renderedLabel","formatLabel","labelGroup","opacity","textAnchor","textFill","fontSize","fontWeight","formatValue","join"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KeywordGapDashboard.d.ts","sourceRoot":"","sources":["../../../src/examples/KeywordGapDashboard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAQxC,eAAO,MAAM,mBAAmB,EAAE,KAAK,CAAC,EAkEvC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { VennData, UseVennLayoutReturn } from "../types/venn.types";
|
|
2
|
+
interface UseVennLayoutOptions {
|
|
3
|
+
width?: number;
|
|
4
|
+
height?: number;
|
|
5
|
+
padding?: number;
|
|
6
|
+
}
|
|
7
|
+
export declare const useVennLayout: (data: VennData, options?: UseVennLayoutOptions) => UseVennLayoutReturn;
|
|
8
|
+
export declare const useResponsiveVennSize: (containerRef: React.RefObject<HTMLDivElement>, defaultWidth?: number, defaultHeight?: number) => {
|
|
9
|
+
width: number;
|
|
10
|
+
height: number;
|
|
11
|
+
};
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=useVennLayout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useVennLayout.d.ts","sourceRoot":"","sources":["../../../src/hooks/useVennLayout.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,QAAQ,EAER,mBAAmB,EACpB,MAAM,qBAAqB,CAAC;AAE7B,UAAU,oBAAoB;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAMD,eAAO,MAAM,aAAa,GACxB,MAAM,QAAQ,EACd,UAAS,oBAAyB,KACjC,mBAwFF,CAAC;AAKF,eAAO,MAAM,qBAAqB,GAChC,cAAc,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,EAC7C,eAAc,MAAY,EAC1B,gBAAe,MAAY;;;CAiC5B,CAAC"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { useState, useMemo, useEffect } from 'react';
|
|
2
|
+
import * as venn from '@upsetjs/venn.js';
|
|
3
|
+
|
|
4
|
+
const useVennLayout = (data, options = {}) => {
|
|
5
|
+
const {
|
|
6
|
+
width = 600,
|
|
7
|
+
height = 400,
|
|
8
|
+
padding = 40
|
|
9
|
+
} = options;
|
|
10
|
+
const [error, setError] = useState(null);
|
|
11
|
+
const [isLoading, setIsLoading] = useState(false);
|
|
12
|
+
const vennData = useMemo(() => {
|
|
13
|
+
const sets = data.sets.map(set => ({
|
|
14
|
+
sets: [set.name],
|
|
15
|
+
size: set.size
|
|
16
|
+
}));
|
|
17
|
+
const intersections = data.intersections.map(intersection => ({
|
|
18
|
+
sets: intersection.sets,
|
|
19
|
+
size: intersection.size
|
|
20
|
+
}));
|
|
21
|
+
return [...sets, ...intersections];
|
|
22
|
+
}, [data]);
|
|
23
|
+
const layout = useMemo(() => {
|
|
24
|
+
try {
|
|
25
|
+
setIsLoading(true);
|
|
26
|
+
setError(null);
|
|
27
|
+
const computed = venn.layout(vennData, {
|
|
28
|
+
width: width - padding * 2,
|
|
29
|
+
height: height - padding * 2
|
|
30
|
+
});
|
|
31
|
+
const circles = computed.filter(d => d.circles && d.circles.length === 1).map(d => ({
|
|
32
|
+
x: padding + (d.x || 0) + (width - padding * 2) / 2,
|
|
33
|
+
y: padding + (d.y || 0) + (height - padding * 2) / 2,
|
|
34
|
+
radius: d.radius || 0,
|
|
35
|
+
set: d.sets[0]
|
|
36
|
+
}));
|
|
37
|
+
return circles;
|
|
38
|
+
} catch (err) {
|
|
39
|
+
const error = err instanceof Error ? err : new Error(String(err));
|
|
40
|
+
setError(error);
|
|
41
|
+
console.error("Venn diagram layout error:", error);
|
|
42
|
+
return [];
|
|
43
|
+
} finally {
|
|
44
|
+
setIsLoading(false);
|
|
45
|
+
}
|
|
46
|
+
}, [vennData, width, height, padding]);
|
|
47
|
+
const paths = useMemo(() => {
|
|
48
|
+
return layout.map(circle => {
|
|
49
|
+
const {
|
|
50
|
+
x,
|
|
51
|
+
y,
|
|
52
|
+
radius
|
|
53
|
+
} = circle;
|
|
54
|
+
return `M ${x - radius} ${y} A ${radius} ${radius} 0 1 0 ${x + radius} ${y} A ${radius} ${radius} 0 1 0 ${x - radius} ${y}`;
|
|
55
|
+
});
|
|
56
|
+
}, [layout]);
|
|
57
|
+
const textPositions = useMemo(() => {
|
|
58
|
+
try {
|
|
59
|
+
const computed = venn.layout(vennData, {
|
|
60
|
+
width: width - padding * 2,
|
|
61
|
+
height: height - padding * 2
|
|
62
|
+
});
|
|
63
|
+
return computed.map(d => ({
|
|
64
|
+
x: padding + (d.x || 0) + (width - padding * 2) / 2,
|
|
65
|
+
y: padding + (d.y || 0) + (height - padding * 2) / 2,
|
|
66
|
+
setNames: d.sets
|
|
67
|
+
}));
|
|
68
|
+
} catch {
|
|
69
|
+
return [];
|
|
70
|
+
}
|
|
71
|
+
}, [vennData, width, height, padding]);
|
|
72
|
+
return {
|
|
73
|
+
layout,
|
|
74
|
+
paths,
|
|
75
|
+
textPositions,
|
|
76
|
+
error,
|
|
77
|
+
isLoading
|
|
78
|
+
};
|
|
79
|
+
};
|
|
80
|
+
const useResponsiveVennSize = (containerRef, defaultWidth = 600, defaultHeight = 400) => {
|
|
81
|
+
const [dimensions, setDimensions] = useState({
|
|
82
|
+
width: defaultWidth,
|
|
83
|
+
height: defaultHeight
|
|
84
|
+
});
|
|
85
|
+
useEffect(() => {
|
|
86
|
+
const handleResize = () => {
|
|
87
|
+
if (!containerRef.current) return;
|
|
88
|
+
const {
|
|
89
|
+
offsetWidth,
|
|
90
|
+
offsetHeight
|
|
91
|
+
} = containerRef.current;
|
|
92
|
+
if (offsetWidth && offsetHeight) {
|
|
93
|
+
setDimensions({
|
|
94
|
+
width: offsetWidth,
|
|
95
|
+
height: offsetHeight
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
handleResize();
|
|
100
|
+
const resizeObserver = new ResizeObserver(handleResize);
|
|
101
|
+
if (containerRef.current) {
|
|
102
|
+
resizeObserver.observe(containerRef.current);
|
|
103
|
+
}
|
|
104
|
+
return () => resizeObserver.disconnect();
|
|
105
|
+
}, [containerRef]);
|
|
106
|
+
return dimensions;
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
export { useResponsiveVennSize, useVennLayout };
|
|
110
|
+
//# sourceMappingURL=useVennLayout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useVennLayout.js","sources":["../../../../src/hooks/useVennLayout.ts"],"sourcesContent":[null],"names":["useVennLayout","data","options","width","height","padding","error","setError","useState","isLoading","setIsLoading","vennData","useMemo","sets","map","set","name","size","intersections","intersection","layout","computed","venn","circles","filter","d","length","x","y","radius","err","Error","String","console","paths","circle","textPositions","setNames","useResponsiveVennSize","containerRef","defaultWidth","defaultHeight","dimensions","setDimensions","useEffect","handleResize","current","offsetWidth","offsetHeight","resizeObserver","ResizeObserver","observe","disconnect"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,oBAAoB,CAAC;AACnC,cAAc,SAAS,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { VennDiagram } from './components/VennDiagram.js';
|
|
2
|
+
export { VennDiagramSVG } from './components/VennDiagramSVG.js';
|
|
3
|
+
export { useResponsiveVennSize, useVennLayout } from './hooks/useVennLayout.js';
|
|
4
|
+
export { getColorScheme, isAccessibleContrast } from './utils/colorScheme.js';
|
|
5
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;"}
|