@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.
Files changed (78) hide show
  1. package/README.md +0 -0
  2. package/dist/cjs/esm/components/VennDiagram.d.ts +4 -0
  3. package/dist/cjs/esm/components/VennDiagram.d.ts.map +1 -0
  4. package/dist/cjs/esm/components/VennDiagramContext.d.ts +3 -0
  5. package/dist/cjs/esm/components/VennDiagramContext.d.ts.map +1 -0
  6. package/dist/cjs/esm/components/VennDiagramSVG.d.ts +16 -0
  7. package/dist/cjs/esm/components/VennDiagramSVG.d.ts.map +1 -0
  8. package/dist/cjs/esm/components/index.d.ts +3 -0
  9. package/dist/cjs/esm/components/index.d.ts.map +1 -0
  10. package/dist/cjs/esm/examples/KeywordGapDashboard.d.ts +3 -0
  11. package/dist/cjs/esm/examples/KeywordGapDashboard.d.ts.map +1 -0
  12. package/dist/cjs/esm/hooks/index.d.ts +2 -0
  13. package/dist/cjs/esm/hooks/index.d.ts.map +1 -0
  14. package/dist/cjs/esm/hooks/useVennLayout.d.ts +13 -0
  15. package/dist/cjs/esm/hooks/useVennLayout.d.ts.map +1 -0
  16. package/dist/cjs/esm/index.d.ts +5 -0
  17. package/dist/cjs/esm/index.d.ts.map +1 -0
  18. package/dist/cjs/esm/types/venn.types.d.ts +68 -0
  19. package/dist/cjs/esm/types/venn.types.d.ts.map +1 -0
  20. package/dist/cjs/esm/utils/colorScheme.d.ts +3 -0
  21. package/dist/cjs/esm/utils/colorScheme.d.ts.map +1 -0
  22. package/dist/cjs/esm/utils/index.d.ts +2 -0
  23. package/dist/cjs/esm/utils/index.d.ts.map +1 -0
  24. package/dist/cjs/index.js +1796 -0
  25. package/dist/cjs/index.js.map +1 -0
  26. package/dist/cjs/styles/index.css +162 -0
  27. package/dist/cjs/styles/index.css.map +1 -0
  28. package/dist/esm/_virtual/jsx-runtime.js +4 -0
  29. package/dist/esm/_virtual/jsx-runtime.js.map +1 -0
  30. package/dist/esm/_virtual/react-jsx-runtime.development.js +4 -0
  31. package/dist/esm/_virtual/react-jsx-runtime.development.js.map +1 -0
  32. package/dist/esm/_virtual/react-jsx-runtime.production.min.js +4 -0
  33. package/dist/esm/_virtual/react-jsx-runtime.production.min.js.map +1 -0
  34. package/dist/esm/components/VennDiagram.d.ts +4 -0
  35. package/dist/esm/components/VennDiagram.d.ts.map +1 -0
  36. package/dist/esm/components/VennDiagram.js +137 -0
  37. package/dist/esm/components/VennDiagram.js.map +1 -0
  38. package/dist/esm/components/VennDiagramContext.d.ts +3 -0
  39. package/dist/esm/components/VennDiagramContext.d.ts.map +1 -0
  40. package/dist/esm/components/VennDiagramContext.js +7 -0
  41. package/dist/esm/components/VennDiagramContext.js.map +1 -0
  42. package/dist/esm/components/VennDiagramSVG.d.ts +16 -0
  43. package/dist/esm/components/VennDiagramSVG.d.ts.map +1 -0
  44. package/dist/esm/components/VennDiagramSVG.js +122 -0
  45. package/dist/esm/components/VennDiagramSVG.js.map +1 -0
  46. package/dist/esm/components/index.d.ts +3 -0
  47. package/dist/esm/components/index.d.ts.map +1 -0
  48. package/dist/esm/examples/KeywordGapDashboard.d.ts +3 -0
  49. package/dist/esm/examples/KeywordGapDashboard.d.ts.map +1 -0
  50. package/dist/esm/hooks/index.d.ts +2 -0
  51. package/dist/esm/hooks/index.d.ts.map +1 -0
  52. package/dist/esm/hooks/useVennLayout.d.ts +13 -0
  53. package/dist/esm/hooks/useVennLayout.d.ts.map +1 -0
  54. package/dist/esm/hooks/useVennLayout.js +110 -0
  55. package/dist/esm/hooks/useVennLayout.js.map +1 -0
  56. package/dist/esm/index.d.ts +5 -0
  57. package/dist/esm/index.d.ts.map +1 -0
  58. package/dist/esm/index.js +5 -0
  59. package/dist/esm/index.js.map +1 -0
  60. package/dist/esm/node_modules/.pnpm/react@18.3.1/node_modules/react/cjs/react-jsx-runtime.development.js +1344 -0
  61. package/dist/esm/node_modules/.pnpm/react@18.3.1/node_modules/react/cjs/react-jsx-runtime.development.js.map +1 -0
  62. package/dist/esm/node_modules/.pnpm/react@18.3.1/node_modules/react/cjs/react-jsx-runtime.production.min.js +25 -0
  63. package/dist/esm/node_modules/.pnpm/react@18.3.1/node_modules/react/cjs/react-jsx-runtime.production.min.js.map +1 -0
  64. package/dist/esm/node_modules/.pnpm/react@18.3.1/node_modules/react/jsx-runtime.js +14 -0
  65. package/dist/esm/node_modules/.pnpm/react@18.3.1/node_modules/react/jsx-runtime.js.map +1 -0
  66. package/dist/esm/styles/VennDiagram.module.css.js +4 -0
  67. package/dist/esm/styles/VennDiagram.module.css.js.map +1 -0
  68. package/dist/esm/styles/index.css +162 -0
  69. package/dist/esm/styles/index.css.map +1 -0
  70. package/dist/esm/types/venn.types.d.ts +68 -0
  71. package/dist/esm/types/venn.types.d.ts.map +1 -0
  72. package/dist/esm/utils/colorScheme.d.ts +3 -0
  73. package/dist/esm/utils/colorScheme.d.ts.map +1 -0
  74. package/dist/esm/utils/colorScheme.js +42 -0
  75. package/dist/esm/utils/colorScheme.js.map +1 -0
  76. package/dist/esm/utils/index.d.ts +2 -0
  77. package/dist/esm/utils/index.d.ts.map +1 -0
  78. 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,3 @@
1
+ export * from "./VennDiagram";
2
+ export * from "./VennDiagramSVG";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -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,3 @@
1
+ import React from "react";
2
+ export declare const KeywordGapDashboard: React.FC;
3
+ //# sourceMappingURL=KeywordGapDashboard.d.ts.map
@@ -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,2 @@
1
+ export * from "./useVennLayout";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -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,5 @@
1
+ export * from "./components";
2
+ export * from "./hooks";
3
+ export * from "./types/venn.types";
4
+ export * from "./utils";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -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":";;;"}