@graphysdk/theme-botanical 0.1.1-beta.1792575115573 → 0.1.1-beta.1792582784445

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/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});let M=require("react"),o=require("@graphysdk/react"),h=require("react/jsx-runtime");var Me=/[a-df-zA-DF-Z]|[-+]?(?:\d+\.?\d*|\.\d+)(?:[eE][-+]?\d+)?/gu,be=/^[a-zA-Z]$/u,Se=(e,t)=>e==="H"?"x":e==="V"?"y":t%2===0?"x":"y",K=(e,t)=>{let r="",a=0;return(e.match(Me)??[]).map(n=>{if(be.test(n))return r=n.toUpperCase(),a=0,n;const l=Se(r,a);return a+=1,String(Number(n)*(l==="x"?t.width:t.height))}).join(" ")},U=(e,t)=>{const r=(0,o.getX)(e),a=(0,o.getY)(e)??(0,o.getYMax)(e);return r===null||a===null?null:{x:(0,o.toViewBoxX)(r)*t.width,y:(0,o.toViewBoxY)(a)*t.height}},G=(e,t)=>{const r=(0,o.getX)(e),a=(0,o.getY)(e)??(0,o.getRadiusExtent)(e).outerRadius;if(r===null||a===null)return null;const n=(0,o.polarToUnit)(r,a),l=Math.min(t.width,t.height)/2;return{x:t.width/2+n.x*l,y:t.height/2-n.y*l}},Pe=e=>`${e.map((t,r)=>`${r===0?"M":"L"}${t.x},${t.y}`).join(" ")} Z`,b=e=>{let t=2166136261;for(let r=0;r<e.length;r+=1)t^=e.charCodeAt(r),t=Math.imul(t,16777619);return t>>>0},T=e=>{let t=e||1;return()=>{t=t+1831565813|0;let r=Math.imul(t^t>>>15,1|t);return r=r+Math.imul(r^r>>>7,61|r)^r,((r^r>>>14)>>>0)/4294967296}},je=e=>{const t=[.035,.07,.13].map((a,n)=>({frequency:a*(.7+e()*.6),phase:e()*Math.PI*2,weight:1/(n+1)})),r=t.reduce((a,n)=>a+n.weight,0);return a=>t.reduce((n,l)=>n+l.weight*Math.sin(a*l.frequency+l.phase),0)/r},w=(e,{wander:t,seed:r,closed:a=!1,step:n=9,cornered:l=!1})=>{if(e.length<2)return"";const d=je(T(r)),i=a?[...e,e[0]]:[...e],s=[],c=[];let u=0;for(let g=0;g<i.length-1;g+=1){const p=i[g],y=i[g+1],v=Math.hypot(y.x-p.x,y.y-p.y);if(v===0)continue;const E={x:-(y.y-p.y)/v,y:(y.x-p.x)/v},C=Math.max(1,Math.ceil(v/n)),P=[];for(let L=0;L<=C;L+=1){const j=L/C,B=t*Math.sin(Math.PI*j)*d(u+j*v);P.push({x:p.x+(y.x-p.x)*j+E.x*B,y:p.y+(y.y-p.y)*j+E.y*B})}c.push(P),s.push(...P.slice(0,-1)),u+=v}return l?`${c.map(g=>ee(g,!1)).map((g,p)=>p===0?g:g.replace(/^M/u,"L")).join(" ")}${a?" Z":""}`:(a||s.push(i[i.length-1]),ee(s,a))},Re=/M[^M]*/gu,_e=/^[ML\d\s.,eE+-]+$/u,Le=/[-+]?(?:\d+\.?\d*|\.\d+)(?:[eE][-+]?\d+)?/gu,We=e=>{if(!_e.test(e))return null;const t=(e.match(Le)??[]).map(Number),r=[];for(let a=0;a+1<t.length;a+=2)r.push({x:t[a],y:t[a+1]});return r},V=(e,t)=>(e.match(Re)??[]).map(r=>{const a=We(r.replace(/\s*Z\s*$/u,""));return a===null||a.length<2?r:w(a,t)}).join(" "),A=e=>(Math.round(e*100)/100).toString(),ee=(e,t)=>{const r=e.length,a=i=>t?e[(i+r)%r]:e[Math.max(0,Math.min(r-1,i))],n=a(0),l=[`M${A(n.x)},${A(n.y)}`],d=t?r:r-1;for(let i=0;i<d;i+=1){const[s,c,u,g]=[a(i-1),a(i),a(i+1),a(i+2)],p={x:c.x+(u.x-s.x)/6,y:c.y+(u.y-s.y)/6},y={x:u.x-(g.x-c.x)/6,y:u.y-(g.y-c.y)/6};l.push(`C${A(p.x)},${A(p.y)} ${A(y.x)},${A(y.y)} ${A(u.x)},${A(u.y)}`)}return`${l.join(" ")}${t?" Z":""}`},X=(e,t,r,a)=>{const n={x:Math.cos(a),y:Math.sin(a)},l={x:-n.y,y:n.x},d=(i,s)=>`${A(e.x+n.x*i+l.x*s)},${A(e.y+n.y*i+l.y*s)}`;return{blade:`M${d(0,0)} Q${d(t*.45,r)} ${d(t,0)} Q${d(t*.55,-r)} ${d(0,0)} Z`,rib:`M${d(0,0)} L${d(t*.8,0)}`}},ge=e=>`data:image/svg+xml,${encodeURIComponent(e)}`,Te=(e,t)=>ge(`<svg xmlns="http://www.w3.org/2000/svg" width="240" height="240"><filter id="g" x="0" y="0" width="100%" height="100%"><feTurbulence type="fractalNoise" baseFrequency="0.85" numOctaves="2" seed="4" stitchTiles="stitch"/><feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1.6 1.05"/></filter><rect width="240" height="240" fill="${e}"/><rect width="240" height="240" fill="${t}" filter="url(#g)" opacity="0.07"/></svg>`),Ie=74,Ce=22,te=(e,t)=>{const r=T(t),a=Ie/2,n=(l,d)=>Array.from({length:6},(i,s)=>{const c=-11+Ce*s/5;return`${(l+d*r()*3).toFixed(1)},${c.toFixed(1)}`});return`<polygon points="${[...n(-37,-1),...n(a,1).reverse()].join(" ")}" fill="${e}" fill-opacity="0.7" stroke="#B9A776" stroke-opacity="0.35" stroke-width="0.5"/>`},D=(e,t,r,a)=>`<svg x="${e}" y="${t}" width="1" height="1" overflow="visible"><g transform="${a}">${r}</g></svg>`,re=150,He=.95,$e=(e,t,r)=>{const a=T(r),n=Array.from({length:7},(s,c)=>{const u=c/6;return{x:u*re,y:-Math.sin(u*Math.PI*.9)*16-u*6}}),l=w(n,{wander:1.2,seed:r}),d=n.slice(1,-1).flatMap((s,c)=>{const u=c%2===0?-1:1,g=22-c*2.2+a()*4,p=-.35+u*(.95+a()*.25),{blade:y,rib:v}=X(s,g,g*.3,p);return[`<path d="${y}" fill="${t}" fill-opacity="0.55" stroke="${e}" stroke-width="0.85" stroke-linejoin="round"/>`,`<path d="${v}" fill="none" stroke="${e}" stroke-width="0.55" stroke-opacity="0.7"/>`]}),i=X(n[n.length-1]??{x:re,y:0},13,5,-.2);return`<path d="${l}" fill="none" stroke="${e}" stroke-width="1.1" stroke-linecap="round"/>`+d.join("")+`<path d="${i.blade}" fill="#C4607C" fill-opacity="0.45" stroke="${e}" stroke-width="0.85"/>`},Oe=({ink:e,leaf:t,tape:r})=>ge('<svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%">'+D("0","0",te(r,3),"translate(26 20) rotate(-36)")+D("100%","0",te(r,9),"translate(-26 20) rotate(36)")+D("0","100%",$e(e,t,21),`translate(16 -8) scale(${He})`)+"</svg>"),f={paper:"#F4EEDD",raised:"#FBF8EE",text:"#1E2A21",secondary:"#4A5648",rule:"#CFC7B0",edge:"#BFB79E",ink:"#3A2C1E",tape:"#D9C89A"},pe="'Kalam', 'Comic Neue', ui-rounded, sans-serif",Y="'Cormorant Garamond', 'Iowan Old Style', Georgia, serif",Ne=pe,x={forest:"#2E5E3B",petal:"#C4607C",bark:"#5C4033",sage:"#6E8A5A",berry:"#8C2A3C",gold:"#9A7A1E",gentian:"#4A6A8C",leaf:"#4E8A4A"},Ge=[x.forest,x.petal,x.bark,x.sage,x.berry,x.gold,x.gentian,x.leaf],Be=["#DDE6CC","#1C4A2B"],De=[x.gentian,"#A4AFB5","#E6E1D2","#C09493",x.berry],F=1.5,Fe=2,z=.75,S={textColor:f.text},R={textColor:f.secondary},O={fontFamily:pe},ae={fontFamily:Y,fontStyle:"italic"},H={...O,textColor:f.ink,fontWeight:400,fontSize:15,fill:f.paper,stroke:"transparent",strokeWidth:0,cornerRadius:0,paddingInline:2,paddingBlock:0,shadow:"none"},ze={tokens:{graphBackground:f.paper,graphBorder:f.ink,geomBorder:f.secondary,textPrimary:f.text,textSecondary:f.secondary,ruleLine:f.ink,gridLine:f.rule,hoverAffordance:f.text,hoverGuideFill:"rgba(30, 42, 33, 0.06)",hoverGuideLine:f.secondary,tooltipBackground:f.raised,tooltipBorder:f.text,tooltipPrimaryRow:"rgba(46, 94, 59, 0.1)",annotationShape:x.gold,annotationArrow:f.text,differenceLabelBackground:f.paper,trendPositive:x.leaf,trendNegative:x.berry,trendNeutral:f.secondary},defaults:[o.style.graph({fill:{image:Te(f.paper,f.ink),fit:"tile",fallback:f.paper},overpaint:{image:Oe({ink:f.ink,leaf:x.sage,tape:f.tape}),fit:"stretch",fallback:"transparent"},strokeWidth:0,cornerRadius:2,shadow:{offsetX:0,offsetY:2,blur:10,color:"rgba(58, 44, 30, 0.18)"},fontFamily:Ne,padding:{top:26,right:26,bottom:36,left:26}}),o.style.geom({shadow:"none"},{state:"hovered"}),o.style.geom.bar({stroke:f.paper,strokeWidth:1,cornerRadius:"none"}),o.style.geom.bar({stroke:f.text,strokeWidth:F},{state:"hovered"}),o.style.geom.line({strokeWidth:Fe,dashArray:[],lineCap:"round",lineJoin:"round"}),o.style.geom.area({fillAlpha:.55,strokeWidth:F,dashArray:[],lineCap:"round",lineJoin:"round"}),o.style.geom.point({size:8,stroke:f.paper,strokeWidth:1}),o.style.geom.tile({cornerRadius:0,stroke:f.paper,strokeWidth:1}),o.style.geom.tile({stroke:f.text,strokeWidth:F},{state:"hovered"}),o.style.geom.rule({stroke:f.secondary,strokeWidth:1,dashArray:[6,4]}),o.style.geom.rule.label({...S,fontWeight:400,fontSize:12.5}),o.style.gridLine({dashArray:[]}),o.style.gridLine.x({strokeWidth:0}),o.style.gridLine.y({strokeWidth:z}),o.style.panelBorder({strokeWidth:0}),o.style.panelBorder.bottom({stroke:f.ink,strokeWidth:1,dashArray:[]}),o.style.tickLine({strokeWidth:0}),o.style.tickLabel({...R,fontWeight:400,fontSize:14,lineHeight:1}),o.style.tickLabel.y({fontFamily:Y,fontWeight:600,fontSize:13,lineHeight:1}),o.style.axisLabel({...R,...ae,fontWeight:500,fontSize:16,lineHeight:1}),o.style.heading({...S,...O}),o.style.heading.h1({fontWeight:400,fontSize:28,lineHeight:1}),o.style.heading.h2({...R,...ae,fontWeight:500,fontSize:19,lineHeight:1.1}),o.style.header({margin:{bottom:16}}),o.style.caption({...R,fontWeight:400,fontSize:12.5}),o.style.source({...R,fontWeight:400,fontSize:12}),o.style.dataLabel({...S,fontFamily:Y,fontWeight:600,fontSize:13,lineHeight:1,paddingBlock:1,paddingInline:4,fill:"transparent"}),o.style.legendItem({...S,fontWeight:400,fontSize:15,fill:"transparent",stroke:"transparent"}),o.style.directLabel({fontWeight:700,fontSize:12.5}),o.style.headlineItem.number({...O,fontWeight:600,fontSize:32,lineHeight:1.1}),o.style.tooltip({strokeWidth:z,cornerRadius:0,paddingInline:10,paddingBlock:8,shadow:"none"}),o.style.tooltip.heading({...S,...O,fontWeight:700,fontSize:17,lineHeight:1.2}),o.style.tooltip.label({...R,fontWeight:400,fontSize:13,lineHeight:1.35}),o.style.tooltip.value({...S,fontWeight:700,fontSize:13,lineHeight:1.35}),o.style.legend.popover({strokeWidth:z,cornerRadius:0,shadow:"none"}),o.style.annotation.text({...H,fontSize:16,lineHeight:1.2}),o.style.annotation.pinnedNumber({fill:f.ink,stroke:f.paper,shadow:"none"}),o.style.annotation.pinnedNumber.label({...H}),o.style.annotation.comment({fill:f.ink,stroke:f.paper,shadow:"none"}),o.style.annotation.comment.label({...H}),o.style.annotation.differenceArrow({stroke:f.ink,strokeWidth:1.25}),o.style.annotation.differenceArrow.label({...H}),o.style.annotation.arrow({stroke:f.ink,strokeWidth:1.25,dashArray:[]}),o.style.annotation.shape({fill:x.sage,fillAlpha:.14,strokeWidth:0}),o.style.panelBorder.bottom({strokeWidth:0},{coord:"polar"}),o.style.geom.area({fillAlpha:.35},{coord:"polar"}),o.style.tickLabel({...S,fontWeight:700,textOutlineColor:f.paper,textOutlineWidth:3},{coord:"polar"})]},q=f.ink;var fe=.6,ye=.7,Ke=5,Ve=.35,Xe=e=>`${e}-${(0,M.useId)().replace(/[^a-zA-Z0-9]/gu,"")}`,I=({path:e,color:t,opacity:r})=>{const a=Xe("wash");return(0,h.jsxs)("g",{children:[(0,h.jsx)("clipPath",{id:a,children:(0,h.jsx)("path",{d:e})}),(0,h.jsx)("path",{d:e,fill:t,fillOpacity:r}),(0,h.jsx)("path",{d:e,fill:"none",stroke:t,strokeOpacity:Ve,strokeWidth:Ke,clipPath:`url(#${a})`})]})},m=({path:e,width:t=1,opacity:r=1})=>(0,h.jsx)("path",{d:e,fill:"none",stroke:q,strokeWidth:t,strokeOpacity:r,strokeLinecap:"round",strokeLinejoin:"round"}),Z=({base:e,length:t,angle:r,color:a,opacity:n=1,washOpacity:l=.6})=>{const{blade:d,rib:i}=X(e,t,t*.32,r);return(0,h.jsxs)("g",{opacity:n,children:[(0,h.jsx)("path",{d,fill:a,fillOpacity:l,stroke:q,strokeWidth:.8,strokeLinejoin:"round"}),(0,h.jsx)(m,{path:i,width:fe,opacity:ye})]})},_=e=>{const t=(0,o.useGeomStyleReader)(e);return(r,a)=>({color:(0,o.toPaintColor)(t.get("fill",r,a)),opacity:t.get("alpha",r,a),fillOpacity:t.get("fillAlpha",r,a),edge:t.get("stroke",r,a),edgeWidth:t.get("strokeWidth",r,a)})},ve=e=>{const t=(0,o.useGeomStyleReader)(e);return(r,a)=>{const n=t.get("strokeWidth",r,a);return{color:t.get("stroke",r,a),opacity:t.get("alpha",r,a)*t.get("strokeAlpha",r,a),width:n,dashArray:(0,o.toStrokeDasharray)(t.get("dashArray",r,a),n)}}},Ye=16,ne=(e,t)=>{const r=(0,o.createStableKeyGenerator)(e.data,e.mapping,e.id),a=[];return e.data.groupBy(o.GROUP_VARIABLES.group).forEach(n=>{const l=[...n],[d]=l,i=t(l);d===void 0||i===null||a.push({key:r(d),observation:d,path:i})}),a},Ue=(e,t)=>{const r=e.flatMap(a=>{const n=(0,o.getX)(a),l=G(a,t);return n===null||l===null?[]:[{angle:n,point:l}]}).sort((a,n)=>a.angle-n.angle).map(({point:a})=>a);return r.length===0?null:Pe(r)},xe=({geom:e,observation:t,panel:r,project:a,color:n,opacity:l})=>{const d=a(t,r);return d===null?null:(0,h.jsx)("g",{"data-geom":e,children:(0,h.jsx)(Z,{base:d,length:Ye,angle:-Math.PI/4,color:n,opacity:l})})},oe=1.2,me=({layer:e,coordSystem:t,panel:r})=>{const a=_(e),n=(0,M.useMemo)(()=>{if(t===void 0)return ne(e,s=>Ue(s,r)).map(s=>({...s,fill:s.path,edge:V(s.path,{wander:oe,seed:b(s.key),closed:!0})}));const{areaGenerator:l,lineGenerator:d}=(0,o.createAreaPathGenerators)(t,e.params),i=new Map;return ne(e,s=>{const c=(0,o.prepareAreaObservations)(s,e.params.missingValues),u=l(c),g=d(c);if(!u)return null;const p=K(u,r);return g&&i.set(p,K(g,r)),p}).map(s=>({...s,fill:s.path,edge:V(i.get(s.path)??"",{wander:oe,seed:b(s.key)})}))},[e,t,r]);return r.width<=0||r.height<=0?null:(0,h.jsx)("g",{"data-geom":"area",children:n.map(({key:l,observation:d,fill:i,edge:s})=>{const c=a(d);return(0,h.jsxs)("g",{opacity:c.opacity,children:[(0,h.jsx)(I,{path:i,color:c.color,opacity:c.fillOpacity}),(0,h.jsx)(m,{path:s,width:c.edgeWidth})]},l)})})},Ae=({layer:e,observation:t,panel:r,project:a})=>{const n=_(e)(t,"hovered");return(0,h.jsx)(xe,{geom:"area",observation:t,panel:r,project:a,color:n.color,opacity:n.opacity})},qe=(0,o.defineGeomRenderer)("area",{coord:"cartesian",guideMode:"crosshair",swatchShape:"area",render:({layer:e,coordSystem:t,panelRect:r})=>t.type!=="cartesian"?null:(0,h.jsx)(me,{layer:e,coordSystem:t,panel:r}),renderHover:({layer:e,primary:t,panelRect:r})=>(0,h.jsx)(Ae,{layer:e,observation:t.observation,panel:r,project:U}),renderHoverCompanions:()=>null}),Ze=(0,o.defineGeomRenderer)("area",{coord:"polar",guideMode:"crosshair",swatchShape:"area",render:({layer:e,panelRect:t})=>(0,h.jsx)(me,{layer:e,panel:t}),renderHover:({layer:e,primary:t,panelRect:r})=>(0,h.jsx)(Ae,{layer:e,observation:t.observation,panel:r,project:G}),renderHoverCompanions:()=>null}),Qe=1.4,Je=.8,et=.6,W=13,tt=14,rt=6,at=2,nt={solo:{base:!0,value:!0},floor:{base:!0,value:!1},ceiling:{base:!1,value:!0},middle:{base:!1,value:!1}},ot={top:"bottom",bottom:"top",left:"right",right:"left"},it=(e,t)=>t==="x"?((0,o.getYMax)(e)??(0,o.getY)(e)??0)>=((0,o.getYMin)(e)??0)?"top":"bottom":((0,o.getXMax)(e)??0)>=((0,o.getXMin)(e)??0)?"right":"left",st=(e,t,r)=>{const a=Math.max(0,e.width-r),n=Math.max(0,e.height-r);return t==="top"?{...e,y:e.y+e.height-n,height:n}:t==="bottom"?{...e,height:n}:t==="left"?{...e,x:e.x+e.width-a,width:a}:{...e,width:a}},lt=(e,t)=>t==="top"||t==="bottom"?{breadth:e.width,length:e.height}:{breadth:e.height,length:e.width},k=(e,t,r,a)=>{const{x:n,y:l,width:d,height:i}=e;return t==="top"?{x:n+r,y:l+i-a}:t==="bottom"?{x:n+r,y:l+a}:t==="right"?{x:n+a,y:l+r}:{x:n+d-a,y:l+r}},dt=(e,t,r,a)=>{const n=r/2,l=r*.36,d=[];for(let i=W*.8;i<a-W*.6;i+=W)for(const s of[-1,1]){const c=k(e,t,n,i),u=k(e,t,n+s*l*.55,i+W*.25),g=k(e,t,n+s*l,i+W*.6);d.push(`M${c.x},${c.y} Q${u.x},${u.y} ${g.x},${g.y}`)}return d.join(" ")},ht=({layer:e,observation:t,bounds:r,seedKey:a,mainAxis:n,panel:l,state:d})=>{const i=_(e);if(!r||r.width<=0||r.height<=0)return null;const s=i(t,d),c=nt[(0,o.getStackRole)(t)],u=it(t,n),g={x:r.x*l.width,y:r.y*l.height,width:r.width*l.width,height:r.height*l.height},p=[c.value?[]:[u],c.base?[]:[ot[u]]].flat().reduce((y,v)=>st(y,v,at/2),g);return(0,h.jsx)(Ee,{rect:p,edge:u,seed:b(a),color:s.color,opacity:s.opacity,pressure:s.fillOpacity,edgeWidth:s.edgeWidth})},Ee=({rect:e,edge:t,seed:r,color:a,opacity:n,pressure:l,edgeWidth:d})=>{const{breadth:i,length:s}=lt(e,t);if(i<=0||s<=0)return null;const c=w([k(e,t,0,0),k(e,t,0,s),k(e,t,i,s),k(e,t,i,0)],{wander:Math.min(Qe,i/8),seed:r,closed:!0,cornered:!0}),u=i>=rt&&s>8?w([k(e,t,i/2,1),k(e,t,i/2,s-3)],{wander:Je,seed:r+1}):"";return(0,h.jsxs)("g",{opacity:n,children:[(0,h.jsx)(I,{path:c,color:a,opacity:l*et}),u!==""&&(0,h.jsx)(m,{path:u,width:.6*1.4,opacity:.7}),i>=tt&&(0,h.jsx)(m,{path:dt(e,t,i,s),width:.6,opacity:.7*.8}),(0,h.jsx)(m,{path:c,width:d})]})},ie=({layer:e,observations:t,mainAxis:r,panel:a,state:n})=>{const l=(0,M.useMemo)(()=>(0,o.createStableKeyGenerator)(e.data,e.mapping,e.id),[e.data,e.mapping,e.id]),d=(0,o.useGeomStyleReader)(e),i=(0,M.useMemo)(()=>(0,o.createBarBoundsReader)(e,r,d,a),[e,r,d,a]);return a.width<=0||a.height<=0?null:(0,h.jsx)("g",{"data-geom":"bar",children:Array.from(t,s=>{const c=l(s);return(0,h.jsx)(ht,{layer:e,observation:s,bounds:i(s),seedKey:c,mainAxis:r,panel:a,state:n},c)})})},ct=(0,o.defineGeomRenderer)("bar",{coord:"cartesian",guideMode:"band",swatchShape:"square",render:({layer:e,coordSystem:t,panelRect:r})=>(0,h.jsx)(ie,{layer:e,observations:e.data,mainAxis:(0,o.readMainAxis)(t),panel:r}),renderHover:({layer:e,coordSystem:t,primary:r,panelRect:a})=>(0,h.jsx)(ie,{layer:e,observations:[r.observation],mainAxis:(0,o.readMainAxis)(t),panel:a,state:"hovered"}),renderHoverCompanions:()=>null}),se=1.2,ut=15,gt=20,pt=.75,ft=(e,t,r,a)=>{const n=(0,o.createStableKeyGenerator)(e.data,e.mapping,e.id),l=(0,o.createLinePathGenerator)(e.params),d=(s,c,u)=>{if(r==="polar")return w(c,{wander:se,seed:u,closed:!0});const g=l((0,o.prepareLineObservations)(s,e.params.missingValues));return g?V(K(g,t),{wander:se,seed:u}):""},i=[];return e.data.groupBy(o.GROUP_VARIABLES.group).forEach(s=>{const c=[...s],[u]=c;if(u===void 0)return;const g=r==="polar"?c.sort((v,E)=>((0,o.getX)(v)??0)-((0,o.getX)(E)??0)):c,p=g.flatMap(v=>{const E=a(v,t);return E===null?[]:[E]});if(p.length<2)return;const y=n(u);i.push({key:y,observation:u,points:p,stem:d(g,p,b(y))})}),i},yt=e=>{const t=[];let r=null;return e.forEach((a,n)=>{if(r!==null&&Math.hypot(a.x-r.x,a.y-r.y)<gt)return;const l=e[Math.max(0,n-1)],d=e[Math.min(e.length-1,n+1)],i=Math.atan2(d.y-l.y,d.x-l.x),s=t.length%2===0?-1:1;t.push({base:a,angle:i+s*(Math.PI/2-pt)}),r=a}),t},vt=({layer:e,panel:t,coord:r,project:a})=>{const n=ve(e),l=(0,M.useMemo)(()=>ft(e,t,r,a),[e,t,r,a]);return t.width<=0||t.height<=0?null:(0,h.jsx)("g",{"data-geom":"line",children:l.map(({key:d,observation:i,stem:s,points:c})=>{const u=n(i);return(0,h.jsxs)("g",{opacity:u.opacity,children:[(0,h.jsx)("path",{d:s,fill:"none",stroke:u.color,strokeWidth:u.width,strokeDasharray:u.dashArray,strokeLinecap:"round",strokeLinejoin:"round"}),yt(c).map(({base:g,angle:p},y)=>(0,h.jsx)(Z,{base:g,length:ut,angle:p,color:u.color},y))]},d)})})},xt=({layer:e,observation:t,panel:r,project:a})=>{const n=ve(e)(t,"hovered");return(0,h.jsx)(xe,{geom:"line",observation:t,panel:r,project:a,color:n.color,opacity:n.opacity})},ke=(e,t)=>(0,o.defineGeomRenderer)("line",{coord:e,guideMode:"crosshair",swatchShape:"line",render:({layer:r,panelRect:a})=>(0,h.jsx)(vt,{layer:r,panel:a,coord:e,project:t}),renderHover:({layer:r,primary:a,panelRect:n})=>(0,h.jsx)(xt,{layer:r,observation:a.observation,panel:n,project:t}),renderHoverCompanions:()=>null,getOverlayAnchor:({observation:r})=>{const a=(0,o.getX)(r),n=(0,o.getY)(r);return a===null||n===null?null:{x:a,y:n}}}),mt=ke("cartesian",U),At=ke("polar",G),Et=2.6,kt=4,le=({layer:e,observations:t,panel:r,project:a,state:n})=>{const l=(0,o.useGeomStyleReader)(e),d=_(e),i=(0,M.useMemo)(()=>(0,o.createStableKeyGenerator)(e.data,e.mapping,e.id),[e.data,e.mapping,e.id]),s=n==="hovered"?kt:0;return(0,h.jsx)("g",{"data-geom":"point",children:Array.from(t,c=>{const u=a(c,r);if(u===null)return null;const g=i(c),p=d(c,n),y=(l.get("size",c,n)+s)*Et,v=T(b(g))()*Math.PI*2;return(0,h.jsx)(Z,{base:{x:u.x-Math.cos(v)*y/2,y:u.y-Math.sin(v)*y/2},length:y,angle:v,color:p.color,opacity:p.opacity,washOpacity:p.fillOpacity*.7},g)})})},we=(e,t)=>(0,o.defineGeomRenderer)("point",{coord:e,swatchShape:"circle",render:({layer:r,panelRect:a})=>(0,h.jsx)(le,{layer:r,observations:r.data,panel:a,project:t}),renderHover:({layer:r,primary:a,panelRect:n})=>(0,h.jsx)(le,{layer:r,observations:[a.observation],panel:n,project:t,state:"hovered"}),renderHoverCompanions:()=>null}),wt=we("cartesian",U),Mt=we("polar",G),bt=3,St=1.6,Pt=Math.PI/30,jt=.6,Rt=.3,_t=.13,de=34,Lt="#B08A2E",N=(e,t,r)=>{const a=(0,o.polarToUnit)(t,1);return{x:e.width/2+a.x*r,y:e.height/2-a.y*r}},he=(e,t,r,a)=>{const n=Math.max(1,Math.ceil(Math.abs(r-t)/Pt));return Array.from({length:n+1},(l,d)=>N(e,t+(r-t)*d/n,a))},Wt=(e,t,r)=>{const{startAngle:a,endAngle:n}=(0,o.getAngleExtent)(e),{innerRadius:l,outerRadius:d}=(0,o.getRadiusExtent)(e);if(a===null||n===null||l===null||d===null)return null;const i=Math.min(t.width,t.height)/2,s=d*i,c=l*i;if(s<=0)return null;const u=Math.max(0,n-a),g=u>=2*Math.PI-1e-6?0:Math.min(bt/2/s,u/4),p=a+g,y=n-g,v=he(t,p,y,s),E=c>0?he(t,y,p,c):[N(t,0,0)],C=w([...v,...E],{wander:St,seed:r,closed:!0,step:12}),P=Math.max(1,Math.round((y-p)/Rt)),L=c+(s-c)*.12,j=s-(s-c)*.14;return{outline:C,veins:Array.from({length:P},(B,Q)=>{const J=p+(y-p)*(Q+.5)/P;return w([N(t,J,L),N(t,J,j)],{wander:.8,seed:r+Q+1})}).join(" ")}},Tt=(e,t,r)=>{const a=T(r),n=Math.PI*(3-Math.sqrt(5));return Array.from({length:de},(l,d)=>{const i=t*.85*Math.sqrt((d+.5)/de),s=d*n+a()*.2,c=e.x+Math.cos(s)*i,u=e.y+Math.sin(s)*i;return`M${c.toFixed(2)},${u.toFixed(2)} h0.01`}).join(" ")},ce=({layer:e,observations:t,panel:r,state:a})=>{const n=_(e),l=(0,M.useMemo)(()=>(0,o.createStableKeyGenerator)(e.data,e.mapping,e.id),[e.data,e.mapping,e.id]);if(r.width<=0||r.height<=0)return null;const d=Array.from(t,g=>{const p=l(g);return{key:p,observation:g,paint:n(g,a),petal:Wt(g,r,b(p))}}),i=d.map(({observation:g})=>(0,o.getRadiusExtent)(g)),s=a===void 0&&d.length>1&&i.every(({innerRadius:g,outerRadius:p})=>g===0&&p===i[0]?.outerRadius),c={x:r.width/2,y:r.height/2},u=Math.min(r.width,r.height)/2*_t;return(0,h.jsxs)("g",{"data-geom":"bar",children:[d.map(({key:g,paint:p,petal:y})=>y===null?null:(0,h.jsxs)("g",{opacity:p.opacity,children:[(0,h.jsx)(I,{path:y.outline,color:p.color,opacity:p.fillOpacity*jt}),(0,h.jsx)(m,{path:y.veins,width:fe,opacity:ye*.8}),(0,h.jsx)(m,{path:y.outline,width:p.edgeWidth})]},g)),s&&(0,h.jsxs)("g",{children:[(0,h.jsx)("circle",{cx:c.x,cy:c.y,r:u,fill:Lt,fillOpacity:.55}),(0,h.jsx)(m,{path:Tt(c,u,7),width:2.2}),(0,h.jsx)(m,{path:w(Array.from({length:13},(g,p)=>{const y=p/12*Math.PI*2;return{x:c.x+Math.cos(y)*u,y:c.y+Math.sin(y)*u}}),{wander:.8,seed:11})})]})]})},It=(0,o.defineGeomRenderer)("bar",{coord:"polar",guideMode:"band",swatchShape:"slice",render:({layer:e,panelRect:t})=>(0,h.jsx)(ce,{layer:e,observations:e.data,panel:t}),renderHover:({layer:e,primary:t,panelRect:r})=>(0,h.jsx)(ce,{layer:e,observations:[t.observation],panel:r,state:"hovered"}),renderHoverCompanions:()=>null}),$=3,Ct=1,Ht=({layer:e,observation:t,seedKey:r,panel:a,state:n})=>{const l=_(e),d=(0,o.getPaintedTileRect)(t);if(d===null)return null;const i=l(t,n),s=d.x*a.width+$/2,c=d.y*a.height+$/2,u=d.width*a.width-$,g=d.height*a.height-$;if(u<=0||g<=0)return null;const p=w([{x:s,y:c},{x:s+u,y:c},{x:s+u,y:c+g},{x:s,y:c+g}],{wander:Math.min(Ct,u/10,g/10),seed:b(r),closed:!0,cornered:!0});return(0,h.jsxs)("g",{opacity:i.opacity,children:[(0,h.jsx)(I,{path:p,color:i.color,opacity:i.fillOpacity*.85}),(0,h.jsx)(m,{path:p,width:n==="hovered"?i.edgeWidth:.8,opacity:.85})]})},ue=({layer:e,observations:t,panel:r,state:a})=>{const n=(0,M.useMemo)(()=>(0,o.createStableCellKeyGenerator)(e.data,e.mapping,e.id),[e.data,e.mapping,e.id]);return r.width<=0||r.height<=0?null:(0,h.jsx)("g",{"data-geom":"tile",children:Array.from(t,l=>{const d=n(l);return(0,h.jsx)(Ht,{layer:e,observation:l,seedKey:d,panel:r,state:a},d)})})},$t=(0,o.defineGeomRenderer)("tile",{coord:"cartesian",guideMode:null,swatchShape:"square",render:({layer:e,panelRect:t})=>(0,h.jsx)(ue,{layer:e,observations:e.data,panel:t}),renderHover:({layer:e,primary:t,panelRect:r})=>(0,h.jsx)(ue,{layer:e,observations:[t.observation],panel:r,state:"hovered"}),renderHoverCompanions:()=>null}),Ot=[ct,It,$t,mt,At,qe,Ze,wt,Mt],Nt=.6,Gt=({fill:e,fillOpacity:t,...r})=>(0,h.jsx)(o.DefaultGeomCircle,{...r,fill:e,fillOpacity:.6,stroke:q,strokeWidth:.9}),Bt=e=>{const t=(0,o.useGeomPanelSize)(),r=t===null?null:(0,o.readRectPixels)(e,t);return r===null||e.fill===void 0?(0,h.jsx)(o.DefaultGeomRect,{...e}):r.width<=0||r.height<=0?null:(0,h.jsx)("g",{"data-testid":e["data-testid"],children:(0,h.jsx)(Ee,{rect:r,edge:r.width>r.height?"right":"top",seed:b(`${r.x},${r.y}`),color:e.fill,opacity:e.opacity??1,pressure:e.fillOpacity??1,edgeWidth:e.strokeWidth||1})})},Dt=e=>e.fill===void 0||e.fill.startsWith("url(")?(0,h.jsx)(o.DefaultGeomPath,{...e}):(0,h.jsxs)("g",{"data-testid":e["data-testid"],opacity:e.opacity??1,children:[(0,h.jsx)(I,{path:e.d,color:e.fill,opacity:(e.fillOpacity??1)*Nt}),(0,h.jsx)(m,{path:e.d,width:e.strokeWidth||.8})]}),Ft={Circle:Gt,Rect:Bt,Path:Dt},zt={name:"botanical",styles:ze,palettes:{categorical:Ge,sequential:Be,diverging:De},colorScheme:"light",plugins:Ot,shapes:Ft};exports.botanical=zt;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});let M=require("react"),o=require("@graphysdk/react"),h=require("react/jsx-runtime");var Me=/[a-df-zA-DF-Z]|[-+]?(?:\d+\.?\d*|\.\d+)(?:[eE][-+]?\d+)?/gu,be=/^[a-zA-Z]$/u,Se=(e,t)=>e==="H"?"x":e==="V"?"y":t%2===0?"x":"y",K=(e,t)=>{let r="",a=0;return(e.match(Me)??[]).map(n=>{if(be.test(n))return r=n.toUpperCase(),a=0,n;const l=Se(r,a);return a+=1,String(Number(n)*(l==="x"?t.width:t.height))}).join(" ")},U=(e,t)=>{const r=(0,o.getX)(e),a=(0,o.getY)(e)??(0,o.getYMax)(e);return r===null||a===null?null:{x:(0,o.toViewBoxX)(r)*t.width,y:(0,o.toViewBoxY)(a)*t.height}},G=(e,t)=>{const r=(0,o.getX)(e),a=(0,o.getY)(e)??(0,o.getRadiusExtent)(e).outerRadius;if(r===null||a===null)return null;const n=(0,o.polarToUnit)(r,a),l=Math.min(t.width,t.height)/2;return{x:t.width/2+n.x*l,y:t.height/2-n.y*l}},Pe=e=>`${e.map((t,r)=>`${r===0?"M":"L"}${t.x},${t.y}`).join(" ")} Z`,b=e=>{let t=2166136261;for(let r=0;r<e.length;r+=1)t^=e.charCodeAt(r),t=Math.imul(t,16777619);return t>>>0},T=e=>{let t=e||1;return()=>{t=t+1831565813|0;let r=Math.imul(t^t>>>15,1|t);return r=r+Math.imul(r^r>>>7,61|r)^r,((r^r>>>14)>>>0)/4294967296}},je=e=>{const t=[.035,.07,.13].map((a,n)=>({frequency:a*(.7+e()*.6),phase:e()*Math.PI*2,weight:1/(n+1)})),r=t.reduce((a,n)=>a+n.weight,0);return a=>t.reduce((n,l)=>n+l.weight*Math.sin(a*l.frequency+l.phase),0)/r},w=(e,{wander:t,seed:r,closed:a=!1,step:n=9,cornered:l=!1})=>{if(e.length<2)return"";const d=je(T(r)),i=a?[...e,e[0]]:[...e],s=[],c=[];let u=0;for(let g=0;g<i.length-1;g+=1){const p=i[g],y=i[g+1],v=Math.hypot(y.x-p.x,y.y-p.y);if(v===0)continue;const E={x:-(y.y-p.y)/v,y:(y.x-p.x)/v},C=Math.max(1,Math.ceil(v/n)),P=[];for(let L=0;L<=C;L+=1){const j=L/C,B=t*Math.sin(Math.PI*j)*d(u+j*v);P.push({x:p.x+(y.x-p.x)*j+E.x*B,y:p.y+(y.y-p.y)*j+E.y*B})}c.push(P),s.push(...P.slice(0,-1)),u+=v}return l?`${c.map(g=>ee(g,!1)).map((g,p)=>p===0?g:g.replace(/^M/u,"L")).join(" ")}${a?" Z":""}`:(a||s.push(i[i.length-1]),ee(s,a))},Re=/M[^M]*/gu,_e=/^[ML\d\s.,eE+-]+$/u,Le=/[-+]?(?:\d+\.?\d*|\.\d+)(?:[eE][-+]?\d+)?/gu,We=e=>{if(!_e.test(e))return null;const t=(e.match(Le)??[]).map(Number),r=[];for(let a=0;a+1<t.length;a+=2)r.push({x:t[a],y:t[a+1]});return r},V=(e,t)=>(e.match(Re)??[]).map(r=>{const a=We(r.replace(/\s*Z\s*$/u,""));return a===null||a.length<2?r:w(a,t)}).join(" "),A=e=>(Math.round(e*100)/100).toString(),ee=(e,t)=>{const r=e.length,a=i=>t?e[(i+r)%r]:e[Math.max(0,Math.min(r-1,i))],n=a(0),l=[`M${A(n.x)},${A(n.y)}`],d=t?r:r-1;for(let i=0;i<d;i+=1){const[s,c,u,g]=[a(i-1),a(i),a(i+1),a(i+2)],p={x:c.x+(u.x-s.x)/6,y:c.y+(u.y-s.y)/6},y={x:u.x-(g.x-c.x)/6,y:u.y-(g.y-c.y)/6};l.push(`C${A(p.x)},${A(p.y)} ${A(y.x)},${A(y.y)} ${A(u.x)},${A(u.y)}`)}return`${l.join(" ")}${t?" Z":""}`},X=(e,t,r,a)=>{const n={x:Math.cos(a),y:Math.sin(a)},l={x:-n.y,y:n.x},d=(i,s)=>`${A(e.x+n.x*i+l.x*s)},${A(e.y+n.y*i+l.y*s)}`;return{blade:`M${d(0,0)} Q${d(t*.45,r)} ${d(t,0)} Q${d(t*.55,-r)} ${d(0,0)} Z`,rib:`M${d(0,0)} L${d(t*.8,0)}`}},ge=e=>`data:image/svg+xml,${encodeURIComponent(e)}`,Te=(e,t)=>ge(`<svg xmlns="http://www.w3.org/2000/svg" width="240" height="240"><filter id="g" x="0" y="0" width="100%" height="100%"><feTurbulence type="fractalNoise" baseFrequency="0.85" numOctaves="2" seed="4" stitchTiles="stitch"/><feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1.6 1.05"/></filter><rect width="240" height="240" fill="${e}"/><rect width="240" height="240" fill="${t}" filter="url(#g)" opacity="0.07"/></svg>`),Ie=74,Ce=22,te=(e,t)=>{const r=T(t),a=Ie/2,n=(l,d)=>Array.from({length:6},(i,s)=>{const c=-11+Ce*s/5;return`${(l+d*r()*3).toFixed(1)},${c.toFixed(1)}`});return`<polygon points="${[...n(-37,-1),...n(a,1).reverse()].join(" ")}" fill="${e}" fill-opacity="0.7" stroke="#B9A776" stroke-opacity="0.35" stroke-width="0.5"/>`},D=(e,t,r,a)=>`<svg x="${e}" y="${t}" width="1" height="1" overflow="visible"><g transform="${a}">${r}</g></svg>`,re=150,He=.95,$e=(e,t,r)=>{const a=T(r),n=Array.from({length:7},(s,c)=>{const u=c/6;return{x:u*re,y:-Math.sin(u*Math.PI*.9)*16-u*6}}),l=w(n,{wander:1.2,seed:r}),d=n.slice(1,-1).flatMap((s,c)=>{const u=c%2===0?-1:1,g=22-c*2.2+a()*4,p=-.35+u*(.95+a()*.25),{blade:y,rib:v}=X(s,g,g*.3,p);return[`<path d="${y}" fill="${t}" fill-opacity="0.55" stroke="${e}" stroke-width="0.85" stroke-linejoin="round"/>`,`<path d="${v}" fill="none" stroke="${e}" stroke-width="0.55" stroke-opacity="0.7"/>`]}),i=X(n[n.length-1]??{x:re,y:0},13,5,-.2);return`<path d="${l}" fill="none" stroke="${e}" stroke-width="1.1" stroke-linecap="round"/>`+d.join("")+`<path d="${i.blade}" fill="#C4607C" fill-opacity="0.45" stroke="${e}" stroke-width="0.85"/>`},Oe=({ink:e,leaf:t,tape:r})=>ge('<svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%">'+D("0","0",te(r,3),"translate(26 20) rotate(-36)")+D("100%","0",te(r,9),"translate(-26 20) rotate(36)")+D("0","100%",$e(e,t,21),`translate(16 -8) scale(${He})`)+"</svg>"),f={paper:"#F4EEDD",raised:"#FBF8EE",text:"#1E2A21",secondary:"#4A5648",rule:"#CFC7B0",edge:"#BFB79E",ink:"#3A2C1E",tape:"#D9C89A"},pe="'Kalam', 'Comic Neue', ui-rounded, sans-serif",Y="'Cormorant Garamond', 'Iowan Old Style', Georgia, serif",Ne=pe,x={forest:"#2E5E3B",petal:"#C4607C",bark:"#5C4033",sage:"#6E8A5A",berry:"#8C2A3C",gold:"#9A7A1E",gentian:"#4A6A8C",leaf:"#4E8A4A"},Ge=[x.forest,x.petal,x.bark,x.sage,x.berry,x.gold,x.gentian,x.leaf],Be=["#DDE6CC","#1C4A2B"],De=[x.gentian,"#A4AFB5","#E6E1D2","#C09493",x.berry],F=1.5,Fe=2,z=.75,S={textColor:f.text},R={textColor:f.secondary},O={fontFamily:pe},ae={fontFamily:Y,fontStyle:"italic"},H={...O,textColor:f.ink,fontWeight:400,fontSize:15,fill:f.paper,stroke:"transparent",strokeWidth:0,cornerRadius:0,paddingInline:2,paddingBlock:0,shadow:"none"},ze={tokens:{graphBackground:f.paper,graphBorder:f.ink,geomBorder:f.secondary,textPrimary:f.text,textSecondary:f.secondary,ruleLine:f.ink,gridLine:f.rule,hoverAffordance:f.text,hoverGuideFill:"rgba(30, 42, 33, 0.06)",hoverGuideLine:f.secondary,tooltipBackground:f.raised,tooltipBorder:f.text,tooltipPrimaryRow:"rgba(46, 94, 59, 0.1)",annotationShape:x.gold,annotationArrow:f.text,differenceLabelBackground:f.paper,trendPositive:x.leaf,trendNegative:x.berry,trendNeutral:f.secondary},defaults:[o.style.graph({fill:{image:Te(f.paper,f.ink),fit:"tile",aspectRatio:1,fallback:f.paper},overpaint:{image:Oe({ink:f.ink,leaf:x.sage,tape:f.tape}),fit:"stretch",fallback:"transparent"},strokeWidth:0,cornerRadius:2,shadow:{offsetX:0,offsetY:2,blur:10,color:"rgba(58, 44, 30, 0.18)"},fontFamily:Ne,padding:{top:26,right:26,bottom:36,left:26}}),o.style.geom({shadow:"none"},{state:"hovered"}),o.style.geom.bar({stroke:f.paper,strokeWidth:1,cornerRadius:"none"}),o.style.geom.bar({stroke:f.text,strokeWidth:F},{state:"hovered"}),o.style.geom.line({strokeWidth:Fe,dashArray:[],lineCap:"round",lineJoin:"round"}),o.style.geom.area({fillAlpha:.55,strokeWidth:F,dashArray:[],lineCap:"round",lineJoin:"round"}),o.style.geom.point({size:8,stroke:f.paper,strokeWidth:1}),o.style.geom.tile({cornerRadius:0,stroke:f.paper,strokeWidth:1}),o.style.geom.tile({stroke:f.text,strokeWidth:F},{state:"hovered"}),o.style.geom.rule({stroke:f.secondary,strokeWidth:1,dashArray:[6,4]}),o.style.geom.rule.label({...S,fontWeight:400,fontSize:12.5}),o.style.gridLine({dashArray:[]}),o.style.gridLine.x({strokeWidth:0}),o.style.gridLine.y({strokeWidth:z}),o.style.panelBorder({strokeWidth:0}),o.style.panelBorder.bottom({stroke:f.ink,strokeWidth:1,dashArray:[]}),o.style.tickLine({strokeWidth:0}),o.style.tickLabel({...R,fontWeight:400,fontSize:14,lineHeight:1}),o.style.tickLabel.y({fontFamily:Y,fontWeight:600,fontSize:13,lineHeight:1}),o.style.axisLabel({...R,...ae,fontWeight:500,fontSize:16,lineHeight:1}),o.style.heading({...S,...O}),o.style.heading.h1({fontWeight:400,fontSize:28,lineHeight:1}),o.style.heading.h2({...R,...ae,fontWeight:500,fontSize:19,lineHeight:1.1}),o.style.header({margin:{bottom:16}}),o.style.caption({...R,fontWeight:400,fontSize:12.5}),o.style.source({...R,fontWeight:400,fontSize:12}),o.style.dataLabel({...S,fontFamily:Y,fontWeight:600,fontSize:13,lineHeight:1,paddingBlock:1,paddingInline:4,fill:"transparent"}),o.style.legendItem({...S,fontWeight:400,fontSize:15,fill:"transparent",stroke:"transparent"}),o.style.directLabel({fontWeight:700,fontSize:12.5}),o.style.headlineItem.number({...O,fontWeight:600,fontSize:32,lineHeight:1.1}),o.style.tooltip({strokeWidth:z,cornerRadius:0,paddingInline:10,paddingBlock:8,shadow:"none"}),o.style.tooltip.heading({...S,...O,fontWeight:700,fontSize:17,lineHeight:1.2}),o.style.tooltip.label({...R,fontWeight:400,fontSize:13,lineHeight:1.35}),o.style.tooltip.value({...S,fontWeight:700,fontSize:13,lineHeight:1.35}),o.style.legend.popover({strokeWidth:z,cornerRadius:0,shadow:"none"}),o.style.annotation.text({...H,fontSize:16,lineHeight:1.2}),o.style.annotation.pinnedNumber({fill:f.ink,stroke:f.paper,shadow:"none"}),o.style.annotation.pinnedNumber.label({...H}),o.style.annotation.comment({fill:f.ink,stroke:f.paper,shadow:"none"}),o.style.annotation.comment.label({...H}),o.style.annotation.differenceArrow({stroke:f.ink,strokeWidth:1.25}),o.style.annotation.differenceArrow.label({...H}),o.style.annotation.arrow({stroke:f.ink,strokeWidth:1.25,dashArray:[]}),o.style.annotation.shape({fill:x.sage,fillAlpha:.14,strokeWidth:0}),o.style.panelBorder.bottom({strokeWidth:0},{coord:"polar"}),o.style.geom.area({fillAlpha:.35},{coord:"polar"}),o.style.tickLabel({...S,fontWeight:700,textOutlineColor:f.paper,textOutlineWidth:3},{coord:"polar"})]},q=f.ink;var fe=.6,ye=.7,Ke=5,Ve=.35,Xe=e=>`${e}-${(0,M.useId)().replace(/[^a-zA-Z0-9]/gu,"")}`,I=({path:e,color:t,opacity:r})=>{const a=Xe("wash");return(0,h.jsxs)("g",{children:[(0,h.jsx)("clipPath",{id:a,children:(0,h.jsx)("path",{d:e})}),(0,h.jsx)("path",{d:e,fill:t,fillOpacity:r}),(0,h.jsx)("path",{d:e,fill:"none",stroke:t,strokeOpacity:Ve,strokeWidth:Ke,clipPath:`url(#${a})`})]})},m=({path:e,width:t=1,opacity:r=1})=>(0,h.jsx)("path",{d:e,fill:"none",stroke:q,strokeWidth:t,strokeOpacity:r,strokeLinecap:"round",strokeLinejoin:"round"}),Z=({base:e,length:t,angle:r,color:a,opacity:n=1,washOpacity:l=.6})=>{const{blade:d,rib:i}=X(e,t,t*.32,r);return(0,h.jsxs)("g",{opacity:n,children:[(0,h.jsx)("path",{d,fill:a,fillOpacity:l,stroke:q,strokeWidth:.8,strokeLinejoin:"round"}),(0,h.jsx)(m,{path:i,width:fe,opacity:ye})]})},_=e=>{const t=(0,o.useGeomStyleReader)(e);return(r,a)=>({color:(0,o.toPaintColor)(t.get("fill",r,a)),opacity:t.get("alpha",r,a),fillOpacity:t.get("fillAlpha",r,a),edge:t.get("stroke",r,a),edgeWidth:t.get("strokeWidth",r,a)})},ve=e=>{const t=(0,o.useGeomStyleReader)(e);return(r,a)=>{const n=t.get("strokeWidth",r,a);return{color:t.get("stroke",r,a),opacity:t.get("alpha",r,a)*t.get("strokeAlpha",r,a),width:n,dashArray:(0,o.toStrokeDasharray)(t.get("dashArray",r,a),n)}}},Ye=16,ne=(e,t)=>{const r=(0,o.createStableKeyGenerator)(e.data,e.mapping,e.id),a=[];return e.data.groupBy(o.GROUP_VARIABLES.group).forEach(n=>{const l=[...n],[d]=l,i=t(l);d===void 0||i===null||a.push({key:r(d),observation:d,path:i})}),a},Ue=(e,t)=>{const r=e.flatMap(a=>{const n=(0,o.getX)(a),l=G(a,t);return n===null||l===null?[]:[{angle:n,point:l}]}).sort((a,n)=>a.angle-n.angle).map(({point:a})=>a);return r.length===0?null:Pe(r)},xe=({geom:e,observation:t,panel:r,project:a,color:n,opacity:l})=>{const d=a(t,r);return d===null?null:(0,h.jsx)("g",{"data-geom":e,children:(0,h.jsx)(Z,{base:d,length:Ye,angle:-Math.PI/4,color:n,opacity:l})})},oe=1.2,me=({layer:e,coordSystem:t,panel:r})=>{const a=_(e),n=(0,M.useMemo)(()=>{if(t===void 0)return ne(e,s=>Ue(s,r)).map(s=>({...s,fill:s.path,edge:V(s.path,{wander:oe,seed:b(s.key),closed:!0})}));const{areaGenerator:l,lineGenerator:d}=(0,o.createAreaPathGenerators)(t,e.params),i=new Map;return ne(e,s=>{const c=(0,o.prepareAreaObservations)(s,e.params.missingValues),u=l(c),g=d(c);if(!u)return null;const p=K(u,r);return g&&i.set(p,K(g,r)),p}).map(s=>({...s,fill:s.path,edge:V(i.get(s.path)??"",{wander:oe,seed:b(s.key)})}))},[e,t,r]);return r.width<=0||r.height<=0?null:(0,h.jsx)("g",{"data-geom":"area",children:n.map(({key:l,observation:d,fill:i,edge:s})=>{const c=a(d);return(0,h.jsxs)("g",{opacity:c.opacity,children:[(0,h.jsx)(I,{path:i,color:c.color,opacity:c.fillOpacity}),(0,h.jsx)(m,{path:s,width:c.edgeWidth})]},l)})})},Ae=({layer:e,observation:t,panel:r,project:a})=>{const n=_(e)(t,"hovered");return(0,h.jsx)(xe,{geom:"area",observation:t,panel:r,project:a,color:n.color,opacity:n.opacity})},qe=(0,o.defineGeomRenderer)("area",{coord:"cartesian",guideMode:"crosshair",swatchShape:"area",render:({layer:e,coordSystem:t,panelRect:r})=>t.type!=="cartesian"?null:(0,h.jsx)(me,{layer:e,coordSystem:t,panel:r}),renderHover:({layer:e,primary:t,panelRect:r})=>(0,h.jsx)(Ae,{layer:e,observation:t.observation,panel:r,project:U}),renderHoverCompanions:()=>null}),Ze=(0,o.defineGeomRenderer)("area",{coord:"polar",guideMode:"crosshair",swatchShape:"area",render:({layer:e,panelRect:t})=>(0,h.jsx)(me,{layer:e,panel:t}),renderHover:({layer:e,primary:t,panelRect:r})=>(0,h.jsx)(Ae,{layer:e,observation:t.observation,panel:r,project:G}),renderHoverCompanions:()=>null}),Qe=1.4,Je=.8,et=.6,W=13,tt=14,rt=6,at=2,nt={solo:{base:!0,value:!0},floor:{base:!0,value:!1},ceiling:{base:!1,value:!0},middle:{base:!1,value:!1}},ot={top:"bottom",bottom:"top",left:"right",right:"left"},it=(e,t)=>t==="x"?((0,o.getYMax)(e)??(0,o.getY)(e)??0)>=((0,o.getYMin)(e)??0)?"top":"bottom":((0,o.getXMax)(e)??0)>=((0,o.getXMin)(e)??0)?"right":"left",st=(e,t,r)=>{const a=Math.max(0,e.width-r),n=Math.max(0,e.height-r);return t==="top"?{...e,y:e.y+e.height-n,height:n}:t==="bottom"?{...e,height:n}:t==="left"?{...e,x:e.x+e.width-a,width:a}:{...e,width:a}},lt=(e,t)=>t==="top"||t==="bottom"?{breadth:e.width,length:e.height}:{breadth:e.height,length:e.width},k=(e,t,r,a)=>{const{x:n,y:l,width:d,height:i}=e;return t==="top"?{x:n+r,y:l+i-a}:t==="bottom"?{x:n+r,y:l+a}:t==="right"?{x:n+a,y:l+r}:{x:n+d-a,y:l+r}},dt=(e,t,r,a)=>{const n=r/2,l=r*.36,d=[];for(let i=W*.8;i<a-W*.6;i+=W)for(const s of[-1,1]){const c=k(e,t,n,i),u=k(e,t,n+s*l*.55,i+W*.25),g=k(e,t,n+s*l,i+W*.6);d.push(`M${c.x},${c.y} Q${u.x},${u.y} ${g.x},${g.y}`)}return d.join(" ")},ht=({layer:e,observation:t,bounds:r,seedKey:a,mainAxis:n,panel:l,state:d})=>{const i=_(e);if(!r||r.width<=0||r.height<=0)return null;const s=i(t,d),c=nt[(0,o.getStackRole)(t)],u=it(t,n),g={x:r.x*l.width,y:r.y*l.height,width:r.width*l.width,height:r.height*l.height},p=[c.value?[]:[u],c.base?[]:[ot[u]]].flat().reduce((y,v)=>st(y,v,at/2),g);return(0,h.jsx)(Ee,{rect:p,edge:u,seed:b(a),color:s.color,opacity:s.opacity,pressure:s.fillOpacity,edgeWidth:s.edgeWidth})},Ee=({rect:e,edge:t,seed:r,color:a,opacity:n,pressure:l,edgeWidth:d})=>{const{breadth:i,length:s}=lt(e,t);if(i<=0||s<=0)return null;const c=w([k(e,t,0,0),k(e,t,0,s),k(e,t,i,s),k(e,t,i,0)],{wander:Math.min(Qe,i/8),seed:r,closed:!0,cornered:!0}),u=i>=rt&&s>8?w([k(e,t,i/2,1),k(e,t,i/2,s-3)],{wander:Je,seed:r+1}):"";return(0,h.jsxs)("g",{opacity:n,children:[(0,h.jsx)(I,{path:c,color:a,opacity:l*et}),u!==""&&(0,h.jsx)(m,{path:u,width:.6*1.4,opacity:.7}),i>=tt&&(0,h.jsx)(m,{path:dt(e,t,i,s),width:.6,opacity:.7*.8}),(0,h.jsx)(m,{path:c,width:d})]})},ie=({layer:e,observations:t,mainAxis:r,panel:a,state:n})=>{const l=(0,M.useMemo)(()=>(0,o.createStableKeyGenerator)(e.data,e.mapping,e.id),[e.data,e.mapping,e.id]),d=(0,o.useGeomStyleReader)(e),i=(0,M.useMemo)(()=>(0,o.createBarBoundsReader)(e,r,d,a),[e,r,d,a]);return a.width<=0||a.height<=0?null:(0,h.jsx)("g",{"data-geom":"bar",children:Array.from(t,s=>{const c=l(s);return(0,h.jsx)(ht,{layer:e,observation:s,bounds:i(s),seedKey:c,mainAxis:r,panel:a,state:n},c)})})},ct=(0,o.defineGeomRenderer)("bar",{coord:"cartesian",guideMode:"band",swatchShape:"square",render:({layer:e,coordSystem:t,panelRect:r})=>(0,h.jsx)(ie,{layer:e,observations:e.data,mainAxis:(0,o.readMainAxis)(t),panel:r}),renderHover:({layer:e,coordSystem:t,primary:r,panelRect:a})=>(0,h.jsx)(ie,{layer:e,observations:[r.observation],mainAxis:(0,o.readMainAxis)(t),panel:a,state:"hovered"}),renderHoverCompanions:()=>null}),se=1.2,ut=15,gt=20,pt=.75,ft=(e,t,r,a)=>{const n=(0,o.createStableKeyGenerator)(e.data,e.mapping,e.id),l=(0,o.createLinePathGenerator)(e.params),d=(s,c,u)=>{if(r==="polar")return w(c,{wander:se,seed:u,closed:!0});const g=l((0,o.prepareLineObservations)(s,e.params.missingValues));return g?V(K(g,t),{wander:se,seed:u}):""},i=[];return e.data.groupBy(o.GROUP_VARIABLES.group).forEach(s=>{const c=[...s],[u]=c;if(u===void 0)return;const g=r==="polar"?c.sort((v,E)=>((0,o.getX)(v)??0)-((0,o.getX)(E)??0)):c,p=g.flatMap(v=>{const E=a(v,t);return E===null?[]:[E]});if(p.length<2)return;const y=n(u);i.push({key:y,observation:u,points:p,stem:d(g,p,b(y))})}),i},yt=e=>{const t=[];let r=null;return e.forEach((a,n)=>{if(r!==null&&Math.hypot(a.x-r.x,a.y-r.y)<gt)return;const l=e[Math.max(0,n-1)],d=e[Math.min(e.length-1,n+1)],i=Math.atan2(d.y-l.y,d.x-l.x),s=t.length%2===0?-1:1;t.push({base:a,angle:i+s*(Math.PI/2-pt)}),r=a}),t},vt=({layer:e,panel:t,coord:r,project:a})=>{const n=ve(e),l=(0,M.useMemo)(()=>ft(e,t,r,a),[e,t,r,a]);return t.width<=0||t.height<=0?null:(0,h.jsx)("g",{"data-geom":"line",children:l.map(({key:d,observation:i,stem:s,points:c})=>{const u=n(i);return(0,h.jsxs)("g",{opacity:u.opacity,children:[(0,h.jsx)("path",{d:s,fill:"none",stroke:u.color,strokeWidth:u.width,strokeDasharray:u.dashArray,strokeLinecap:"round",strokeLinejoin:"round"}),yt(c).map(({base:g,angle:p},y)=>(0,h.jsx)(Z,{base:g,length:ut,angle:p,color:u.color},y))]},d)})})},xt=({layer:e,observation:t,panel:r,project:a})=>{const n=ve(e)(t,"hovered");return(0,h.jsx)(xe,{geom:"line",observation:t,panel:r,project:a,color:n.color,opacity:n.opacity})},ke=(e,t)=>(0,o.defineGeomRenderer)("line",{coord:e,guideMode:"crosshair",swatchShape:"line",render:({layer:r,panelRect:a})=>(0,h.jsx)(vt,{layer:r,panel:a,coord:e,project:t}),renderHover:({layer:r,primary:a,panelRect:n})=>(0,h.jsx)(xt,{layer:r,observation:a.observation,panel:n,project:t}),renderHoverCompanions:()=>null,getOverlayAnchor:({observation:r})=>{const a=(0,o.getX)(r),n=(0,o.getY)(r);return a===null||n===null?null:{x:a,y:n}}}),mt=ke("cartesian",U),At=ke("polar",G),Et=2.6,kt=4,le=({layer:e,observations:t,panel:r,project:a,state:n})=>{const l=(0,o.useGeomStyleReader)(e),d=_(e),i=(0,M.useMemo)(()=>(0,o.createStableKeyGenerator)(e.data,e.mapping,e.id),[e.data,e.mapping,e.id]),s=n==="hovered"?kt:0;return(0,h.jsx)("g",{"data-geom":"point",children:Array.from(t,c=>{const u=a(c,r);if(u===null)return null;const g=i(c),p=d(c,n),y=(l.get("size",c,n)+s)*Et,v=T(b(g))()*Math.PI*2;return(0,h.jsx)(Z,{base:{x:u.x-Math.cos(v)*y/2,y:u.y-Math.sin(v)*y/2},length:y,angle:v,color:p.color,opacity:p.opacity,washOpacity:p.fillOpacity*.7},g)})})},we=(e,t)=>(0,o.defineGeomRenderer)("point",{coord:e,swatchShape:"circle",render:({layer:r,panelRect:a})=>(0,h.jsx)(le,{layer:r,observations:r.data,panel:a,project:t}),renderHover:({layer:r,primary:a,panelRect:n})=>(0,h.jsx)(le,{layer:r,observations:[a.observation],panel:n,project:t,state:"hovered"}),renderHoverCompanions:()=>null}),wt=we("cartesian",U),Mt=we("polar",G),bt=3,St=1.6,Pt=Math.PI/30,jt=.6,Rt=.3,_t=.13,de=34,Lt="#B08A2E",N=(e,t,r)=>{const a=(0,o.polarToUnit)(t,1);return{x:e.width/2+a.x*r,y:e.height/2-a.y*r}},he=(e,t,r,a)=>{const n=Math.max(1,Math.ceil(Math.abs(r-t)/Pt));return Array.from({length:n+1},(l,d)=>N(e,t+(r-t)*d/n,a))},Wt=(e,t,r)=>{const{startAngle:a,endAngle:n}=(0,o.getAngleExtent)(e),{innerRadius:l,outerRadius:d}=(0,o.getRadiusExtent)(e);if(a===null||n===null||l===null||d===null)return null;const i=Math.min(t.width,t.height)/2,s=d*i,c=l*i;if(s<=0)return null;const u=Math.max(0,n-a),g=u>=2*Math.PI-1e-6?0:Math.min(bt/2/s,u/4),p=a+g,y=n-g,v=he(t,p,y,s),E=c>0?he(t,y,p,c):[N(t,0,0)],C=w([...v,...E],{wander:St,seed:r,closed:!0,step:12}),P=Math.max(1,Math.round((y-p)/Rt)),L=c+(s-c)*.12,j=s-(s-c)*.14;return{outline:C,veins:Array.from({length:P},(B,Q)=>{const J=p+(y-p)*(Q+.5)/P;return w([N(t,J,L),N(t,J,j)],{wander:.8,seed:r+Q+1})}).join(" ")}},Tt=(e,t,r)=>{const a=T(r),n=Math.PI*(3-Math.sqrt(5));return Array.from({length:de},(l,d)=>{const i=t*.85*Math.sqrt((d+.5)/de),s=d*n+a()*.2,c=e.x+Math.cos(s)*i,u=e.y+Math.sin(s)*i;return`M${c.toFixed(2)},${u.toFixed(2)} h0.01`}).join(" ")},ce=({layer:e,observations:t,panel:r,state:a})=>{const n=_(e),l=(0,M.useMemo)(()=>(0,o.createStableKeyGenerator)(e.data,e.mapping,e.id),[e.data,e.mapping,e.id]);if(r.width<=0||r.height<=0)return null;const d=Array.from(t,g=>{const p=l(g);return{key:p,observation:g,paint:n(g,a),petal:Wt(g,r,b(p))}}),i=d.map(({observation:g})=>(0,o.getRadiusExtent)(g)),s=a===void 0&&d.length>1&&i.every(({innerRadius:g,outerRadius:p})=>g===0&&p===i[0]?.outerRadius),c={x:r.width/2,y:r.height/2},u=Math.min(r.width,r.height)/2*_t;return(0,h.jsxs)("g",{"data-geom":"bar",children:[d.map(({key:g,paint:p,petal:y})=>y===null?null:(0,h.jsxs)("g",{opacity:p.opacity,children:[(0,h.jsx)(I,{path:y.outline,color:p.color,opacity:p.fillOpacity*jt}),(0,h.jsx)(m,{path:y.veins,width:fe,opacity:ye*.8}),(0,h.jsx)(m,{path:y.outline,width:p.edgeWidth})]},g)),s&&(0,h.jsxs)("g",{children:[(0,h.jsx)("circle",{cx:c.x,cy:c.y,r:u,fill:Lt,fillOpacity:.55}),(0,h.jsx)(m,{path:Tt(c,u,7),width:2.2}),(0,h.jsx)(m,{path:w(Array.from({length:13},(g,p)=>{const y=p/12*Math.PI*2;return{x:c.x+Math.cos(y)*u,y:c.y+Math.sin(y)*u}}),{wander:.8,seed:11})})]})]})},It=(0,o.defineGeomRenderer)("bar",{coord:"polar",guideMode:"band",swatchShape:"slice",render:({layer:e,panelRect:t})=>(0,h.jsx)(ce,{layer:e,observations:e.data,panel:t}),renderHover:({layer:e,primary:t,panelRect:r})=>(0,h.jsx)(ce,{layer:e,observations:[t.observation],panel:r,state:"hovered"}),renderHoverCompanions:()=>null}),$=3,Ct=1,Ht=({layer:e,observation:t,seedKey:r,panel:a,state:n})=>{const l=_(e),d=(0,o.getPaintedTileRect)(t);if(d===null)return null;const i=l(t,n),s=d.x*a.width+$/2,c=d.y*a.height+$/2,u=d.width*a.width-$,g=d.height*a.height-$;if(u<=0||g<=0)return null;const p=w([{x:s,y:c},{x:s+u,y:c},{x:s+u,y:c+g},{x:s,y:c+g}],{wander:Math.min(Ct,u/10,g/10),seed:b(r),closed:!0,cornered:!0});return(0,h.jsxs)("g",{opacity:i.opacity,children:[(0,h.jsx)(I,{path:p,color:i.color,opacity:i.fillOpacity*.85}),(0,h.jsx)(m,{path:p,width:n==="hovered"?i.edgeWidth:.8,opacity:.85})]})},ue=({layer:e,observations:t,panel:r,state:a})=>{const n=(0,M.useMemo)(()=>(0,o.createStableCellKeyGenerator)(e.data,e.mapping,e.id),[e.data,e.mapping,e.id]);return r.width<=0||r.height<=0?null:(0,h.jsx)("g",{"data-geom":"tile",children:Array.from(t,l=>{const d=n(l);return(0,h.jsx)(Ht,{layer:e,observation:l,seedKey:d,panel:r,state:a},d)})})},$t=(0,o.defineGeomRenderer)("tile",{coord:"cartesian",guideMode:null,swatchShape:"square",render:({layer:e,panelRect:t})=>(0,h.jsx)(ue,{layer:e,observations:e.data,panel:t}),renderHover:({layer:e,primary:t,panelRect:r})=>(0,h.jsx)(ue,{layer:e,observations:[t.observation],panel:r,state:"hovered"}),renderHoverCompanions:()=>null}),Ot=[ct,It,$t,mt,At,qe,Ze,wt,Mt],Nt=.6,Gt=({fill:e,fillOpacity:t,...r})=>(0,h.jsx)(o.DefaultGeomCircle,{...r,fill:e,fillOpacity:.6,stroke:q,strokeWidth:.9}),Bt=e=>{const t=(0,o.useGeomPanelSize)(),r=t===null?null:(0,o.readRectPixels)(e,t);return r===null||e.fill===void 0?(0,h.jsx)(o.DefaultGeomRect,{...e}):r.width<=0||r.height<=0?null:(0,h.jsx)("g",{"data-testid":e["data-testid"],children:(0,h.jsx)(Ee,{rect:r,edge:r.width>r.height?"right":"top",seed:b(`${r.x},${r.y}`),color:e.fill,opacity:e.opacity??1,pressure:e.fillOpacity??1,edgeWidth:e.strokeWidth||1})})},Dt=e=>e.fill===void 0||e.fill.startsWith("url(")?(0,h.jsx)(o.DefaultGeomPath,{...e}):(0,h.jsxs)("g",{"data-testid":e["data-testid"],opacity:e.opacity??1,children:[(0,h.jsx)(I,{path:e.d,color:e.fill,opacity:(e.fillOpacity??1)*Nt}),(0,h.jsx)(m,{path:e.d,width:e.strokeWidth||.8})]}),Ft={Circle:Gt,Rect:Bt,Path:Dt},zt={name:"botanical",styles:ze,palettes:{categorical:Ge,sequential:Be,diverging:De},colorScheme:"light",plugins:Ot,shapes:Ft};exports.botanical=zt;
package/dist/index.mjs CHANGED
@@ -207,6 +207,7 @@ var ae = /[a-df-zA-DF-Z]|[-+]?(?:\d+\.?\d*|\.\d+)(?:[eE][-+]?\d+)?/gu, ne = /^[a
207
207
  fill: {
208
208
  image: ue(f.paper, f.ink),
209
209
  fit: "tile",
210
+ aspectRatio: 1,
210
211
  fallback: f.paper
211
212
  },
212
213
  overpaint: {
package/package.json CHANGED
@@ -13,7 +13,7 @@
13
13
  "theme",
14
14
  "botanical"
15
15
  ],
16
- "version": "0.1.1-beta.1792575115573",
16
+ "version": "0.1.1-beta.1792582784445",
17
17
  "type": "module",
18
18
  "sideEffects": [
19
19
  "*.css"
@@ -40,7 +40,7 @@
40
40
  },
41
41
  "peerDependencies": {
42
42
  "react": "^19.0.0",
43
- "@graphysdk/react": "^1.9.0-beta.1792575115573"
43
+ "@graphysdk/react": "^1.9.0-beta.1792582784445"
44
44
  },
45
45
  "devDependencies": {
46
46
  "@testing-library/react": "^16.3.1",
@@ -52,10 +52,10 @@
52
52
  "vite": "^8.1.5",
53
53
  "vite-plugin-dts": "^4.5.4",
54
54
  "vitest": "^4.1.11",
55
- "@graphysdk/react": "1.9.0-beta.1792575115573",
56
- "@graphysdk/viz-engine": "1.9.0-beta.1792575115573",
57
- "@graphytools/eslint-config": "0.0.1",
55
+ "@graphysdk/react": "1.9.0-beta.1792582784445",
58
56
  "@graphytools/typescript-config": "0.0.1",
57
+ "@graphysdk/viz-engine": "1.9.0-beta.1792582784445",
58
+ "@graphytools/eslint-config": "0.0.1",
59
59
  "@graphytools/vitest-config": "1.0.0"
60
60
  },
61
61
  "publishConfig": {