@graphysdk/react-renderer 1.9.0-beta.1792518514317 → 1.9.0-beta.1792575115573

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"});require('./index.css');const o=require("./history-chords-w_1drv6K.cjs");let m=require("@graphysdk/viz-engine"),d=require("react"),i=require("react/jsx-runtime"),F=require("zustand"),O=require("motion/react"),Y=require("zustand/vanilla"),U=require("clsx");U=o.__toESM(U,1);var me="_1a5iqpb0",ge="_1a5iqpb1";var pe="_1a5iqpb3",ve="_1a5iqpb4",fe="_1a5iqpb5";var z=({errors:e})=>{const[t,...r]=e;return(0,i.jsxs)("div",{role:"alert",className:me,children:[(0,i.jsx)("strong",{className:ge,children:"This chart could not be rendered."}),t&&(0,i.jsx)(V,{diagnostic:t}),r.length>0&&(0,i.jsx)("ul",{className:"_1a5iqpb2",children:r.map((n,s)=>(0,i.jsx)("li",{children:(0,i.jsx)(V,{diagnostic:n})},`${n.code}-${s}`))})]})},V=({diagnostic:e})=>(0,i.jsxs)("div",{className:pe,children:[(0,i.jsx)("span",{className:ve,children:e.code}),(0,i.jsx)("p",{className:fe,children:e.message}),e.suggestion&&(0,i.jsx)("p",{className:"_1a5iqpb6",children:e.suggestion})]});function Se(e=[],t=[]){return e.length===t.length&&e.every((r,n)=>Object.is(r,t[n]))}var re=class extends d.Component{constructor(...e){super(...e),this.state={caughtDiagnostic:null}}static getDerivedStateFromError(e){return{caughtDiagnostic:(0,m.buildDiagnostic)(e)}}componentDidCatch(e,t){const r=(0,m.buildDiagnostic)(e);o.logDiagnostics([r]),this.props.onError?.([r]),console.error("Chart render component stack:",t.componentStack)}componentDidUpdate(e){this.state.caughtDiagnostic&&!Se(e.resetKeys,this.props.resetKeys)&&this.setState({caughtDiagnostic:null})}render(){const{caughtDiagnostic:e}=this.state;if(e)return(0,i.jsx)(z,{errors:[e]});const{forcedErrors:t,children:r}=this.props;return t&&t.length>0?(0,i.jsx)(z,{errors:t}):r}},ne=e=>typeof e=="object"&&"geom"in e&&"render"in e,se=e=>{const t=(0,m.resolveDefinition)(e);return t instanceof m.Geom?t:null},oe=(e,t)=>{const r=e.filter(n=>ye(n,t));return r.length===e.length?e:r},ye=(e,t)=>e.kind==="annotation"?(0,m.findAnnotation)(t.annotations,e.id)!==null:e.kind==="observations"||e.kind==="layer"&&e.layerId!==void 0?(0,m.findLayerById)(t.layers,e.layerId)!==void 0:!0,X=[],be=()=>(0,Y.createStore)(e=>({selection:X,setSelection:t=>e(r=>Ge(r.selection,t)?r:{selection:t}),clearSelection:()=>e(t=>t.selection.length===0?t:{selection:X})})),Ge=(e,t)=>e===t?!0:e.length!==t.length?!1:e.every((r,n)=>{const s=t[n];return s!==void 0&&(0,m.areEditTargetsEqual)(r,s)}),xe=process.env.NODE_ENV!=="production",Ee=5,Te=e=>{if(!xe)return{emit:()=>{},subscribe:()=>Pe,getLastTrigger:()=>null,getLastCompile:()=>null,getCacheStats:()=>e.getCacheStats()};const t=new Set;let r=null;return{emit:n=>{const s=e.getLastCompile();if(s){r=n;for(const c of t)c(n,s)}},subscribe:n=>(t.add(n),()=>{t.delete(n)}),getLastTrigger:()=>r,getLastCompile:()=>e.getLastCompile(),getCacheStats:()=>e.getCacheStats()}},Re=()=>(0,Y.createStore)(e=>({lastCompile:null,history:[],nextId:1,lastSnapshot:null,recordCompile:(t,r)=>e(n=>{if(n.lastSnapshot===r)return n;const s={id:n.nextId,label:Ce(t),stages:r.stages,stageDurationsMs:r.stageDurationsMs,durationMs:r.durationMs};return{lastCompile:s,history:je(n.history,s,Ee),nextId:n.nextId+1,lastSnapshot:r}})})),Pe=()=>{},Ce=e=>{switch(e.kind){case"init":return"init";case"spec":return"spec change";case"data":return"data change";case"command":return e.command.metadata.description}},je=(e,t,r)=>{const n=e.length>=r?e.length-(r-1):0;return[...e.slice(n),t]};function Q(e){const t=e.filter(ne),r=new Set([...Object.keys(o.BUILT_IN_GEOM_RENDERERS),...t.map(u=>u.geom)]),n=[],s=new Set;for(const u of e){const h=se(u);h===null||r.has(h.type)||s.has(h.type)||(s.add(h.type),n.push({kind:"user-input",severity:"error",code:"MISSING_GEOM_RENDERER",message:`Custom geom '${h.type}' is registered but has no renderer.`,context:{requested:h.type,kind:"geom-renderer"},suggestion:`Add a render half for it: \`defineGeomRenderer(${h.type}Geom, { coord, render })\`, then include it in \`plugins\`.`}))}const c=new Map;for(const u of t){if("definition"in u)continue;const h=`${u.geom}|${u.coord}`,p=c.get(h);p?p.count+=1:c.set(h,{geom:u.geom,coord:u.coord,count:1})}const l=[];for(const{geom:u,coord:h,count:p}of c.values())p<2||l.push({kind:"user-input",severity:"warning",code:"DUPLICATE_REGISTERED_TYPE",message:`Multiple render-only overrides register ('${u}', '${h}') (${p} entries); the last in the array wins.`,context:{requested:`${u}@${h}`,kind:"geom-renderer"},suggestion:`Keep a single render-only override for ('${u}', '${h}').`});return l.push(...Me(e)),{errors:n,warnings:l}}function Ne(e,t){const{coordSystem:r,layers:n}=e,s=new Set,c=[];for(const l of n)t(l.geom,r.type)!==null||s.has(l.geom)||(s.add(l.geom),c.push({kind:"user-input",severity:"warning",code:"MISSING_GEOM_RENDERER",message:`No renderer for geom '${l.geom}' under ${r.type} coords; the layer is not painted.`,context:{requested:l.geom,kind:"geom-renderer"},suggestion:`Register a renderer for ('${l.geom}', '${r.type}') via \`defineGeomRenderer\`.`}));return c}function De(e,t){const{coordSystem:r,layers:n}=e,s=new Set,c=[];for(const l of n){if(l.interactive===!1||l.spatialKind!=="render-hit-test"||s.has(l.geom))continue;const u=t(l.geom,r.type);u===null||u.hitTest||o.isLiveRender(u)||(s.add(l.geom),c.push({kind:"user-input",severity:"warning",code:"MISSING_RENDER_HIT_TEST",message:`Geom '${l.geom}' declares spatialKind 'render-hit-test' but its renderer provides no hit-test; the layer has no hover.`,context:{requested:l.geom,kind:"geom-renderer"},suggestion:`Add a \`hitTest\` factory (precomputed geometry) or a live render (\`{ fn, options: { live: true } }\`, live simulation) to the renderer for ('${l.geom}', '${r.type}').`}))}return c}function _e(e){const t=new Set,r=[];for(const n of e.layers){const s=n.identityKey;n.interactive!==!1&&(n.spatialKind!=="render-hit-test"||typeof s!="object"||t.has(n.geom)||n.data.hasVariable(s.variable)||(t.add(n.geom),r.push({kind:"user-input",severity:"warning",code:"RENDER_HIT_TEST_IDENTITY",message:`Geom '${n.geom}' keys its identity on '${s.variable}', a column its compile output does not emit; its hover lookup is empty.`,context:{requested:n.geom,kind:"geom-renderer"},suggestion:`Emit the '${s.variable}' column from the geom's \`compile()\`, or point \`identityKey\` at a column it does emit.`})))}return r}function ke(e,t){const{coordSystem:r,layers:n}=e,s=new Set,c=[];for(const l of n){if(l.interactive===!1||l.spatialKind!=="render-hit-test"||s.has(l.geom))continue;const u=t(l.geom,r.type);u===null||!u.hitTest||!o.isLiveRender(u)||(s.add(l.geom),c.push({kind:"user-input",severity:"warning",code:"CONFLICTING_RENDER_HIT_TEST",message:`Geom '${l.geom}' declares both a \`hitTest\` factory and a live render; these are alternatives, so only the live render is used.`,context:{requested:l.geom,kind:"geom-renderer"},suggestion:"Keep one: a `hitTest` factory for precomputed geometry, OR a live render (`{ fn, options: { live: true } }`) for a live simulation."}))}return c}function Ie(e,t){const r=new Set,n=[];for(const s of e.layers)s.interactive!==!1&&(s.spatialKind!=="render-hit-test"||r.has(s.geom)||t.hasCapability(s.geom)||(r.add(s.geom),n.push({kind:"user-input",severity:"warning",code:"MISSING_ANCHOR_CAPABILITY",message:`Geom '${s.geom}' declares no \`resolveAnchorPosition\`; its observations cannot be annotated, so the editor overlay paints no creation trigger on them.`,context:{requested:s.geom,kind:"geom-renderer"},suggestion:"Implement `resolveAnchorPosition(observation, context)` on the geom, returning the normalised panel position an annotation on that observation belongs at."})));return n}function qe(e,t){const{coordSystem:r,layers:n}=e,s=new Set,c=[];for(const l of n){if(l.interactive===!1||l.spatialKind==="render-hit-test"||s.has(l.geom))continue;const u=t(l.geom,r.type);u===null||!o.isLiveRender(u)||(s.add(l.geom),c.push({kind:"user-input",severity:"warning",code:"LIVE_RENDER_REQUIRES_RENDER_HIT_TEST",message:`Geom '${l.geom}' declares a live render but its layer's spatialKind is '${l.spatialKind}', not 'render-hit-test'; its push-path hover resolves to nothing.`,context:{requested:l.geom,kind:"geom-renderer"},suggestion:"Have the geom's manifest yield spatialKind 'render-hit-test' so the scene layer carries the `byKey` index the live render's `pushHover` resolves against."}))}return c}function Le(e,t){let r;return e.layers.flatMap((n,s)=>o.isLiveRender(t(n.geom,e.coordSystem.type))?we(n)?(r??=(0,m.createStyleResolver)().readers(e),(r.geom(n).get("overpaint",void 0,"hovered")?.length??0)===0?[]:[{kind:"user-input",severity:"warning",code:"INVALID_STYLE_RULE",message:`Style 'overpaint' in state 'hovered' is not supported on live geom '${n.geom}' (layer '${n.id}'); it is ignored.`,context:{param:"overpaint",layerIndex:s,requested:n.geom},suggestion:"Remove the hovered overpaint, or paint the hover treatment in the geom's live render."}]):[]:[])}var we=e=>[e.styles.defaults,e.styles.overrides].some(t=>t.some(r=>r.state==="hovered"&&(r.declarations.overpaint?.length??0)>0));function Me(e){const t=new Set,r=[];for(const n of e){const s=se(n);s===null||t.has(s.type)||s.dataLabelCoordTypes.length===0||s.getDataLabelPlacements!==void 0||(t.add(s.type),r.push({kind:"user-input",severity:"warning",code:"MISSING_DATA_LABEL_PLACEMENT",message:`Geom '${s.type}' declares \`dataLabelCoordTypes\` but implements no \`getDataLabelPlacements\`; its layers paint no data labels.`,context:{requested:s.type,kind:"geom-renderer"},suggestion:"Implement `getDataLabelPlacements(context)` on the geom, or drop `dataLabelCoordTypes` so the compiler warns the author off the flag."}))}return r}var He=e=>(0,Y.createStore)(t=>({scene:e,setScene:r=>t(n=>n.scene===r?n:{scene:r})})),$e=({spec:e,data:t,colorScheme:r,plugins:n,theme:s,resolveRenderer:c,anchorResolver:l,onSpecChange:u,onError:h,onWarnings:p})=>{const R=o.useLatestRef(u),P=o.useLatestRef(h),x=o.useLatestRef(p),[{session:f,compileBus:g}]=(0,d.useState)(()=>{const a=(0,m.createCompiler)({plugins:n,theme:s});return{session:new m.GraphCompilationSession(a),compileBus:Te(a)}}),[S]=(0,d.useState)(()=>{const a=Q(n??[]),v=Q(s?.plugins??[]);return{errors:[...v.errors,...a.errors],warnings:[...v.warnings,...a.warnings]}}),E=(0,d.useRef)(null),[y]=(0,d.useState)(Ae),C=(0,d.useRef)(null),D=(0,d.useCallback)(a=>S.errors.length===0?a:[...S.errors,...a??[]],[S]),T=(0,d.useCallback)(a=>{if(!a.ok)return a.errors;if(C.current)C.current.getState().setScene(a.scene);else{const v=He(a.scene);v.subscribe(y.notify),C.current=v,y.notify()}return null},[y]),[M,I]=(0,d.useState)(()=>{const a=f.compile({spec:e,data:t,colorScheme:r});return E.current=a,D(T(a))}),G=(0,d.useCallback)(a=>a.ok?[...a.warnings,...Ne(a.scene,c),...De(a.scene,c),..._e(a.scene),...ke(a.scene,c),...qe(a.scene,c),...Le(a.scene,c),...Ie(a.scene,l)]:a.warnings,[c,l]),j=(0,d.useCallback)(a=>{a.length!==0&&(o.logDiagnostics(a),P.current?.(a))},[P]),N=(0,d.useCallback)(a=>{a.length!==0&&(o.logDiagnostics(a),x.current?.(a))},[x]);(0,d.useEffect)(()=>{const a=E.current;a&&(j([...S.errors,...a.ok?[]:a.errors]),N([...S.warnings,...G(a)]),a.ok&&g.emit({kind:"init"}))},[g,j,N,S,G]),(0,d.useEffect)(()=>{const a=f.update({spec:e,data:t,colorScheme:r});if(!a)return;a.committedSpec&&R.current?.(a.committedSpec);const v=T(a.result);I(D(v)),v&&j(v),N(G(a.result)),v||g.emit({kind:a.hasSpecChange?"spec":"data"})},[e,t,r,f,g,T,j,N,D,G,R]);const q=(0,d.useCallback)(a=>{I(v=>v===null?v:D(null)),N(G(a))},[D,N,G]),H=(0,d.useCallback)(a=>{a.scene&&C.current?.getState().setScene(a.scene),a.result&&q(a.result),a.command&&g.emit({kind:"command",command:a.command}),a.spec&&R.current?.(a.spec),a.errors&&j([...a.errors])},[q,g,R,j]),b=(0,d.useCallback)(a=>{for(const v of a)H(v);return a.some(v=>!!v.scene)},[H]),$=(0,d.useCallback)((a,v)=>{b(f.applyCommand(a,v))},[f,b]),_=(0,d.useCallback)(()=>{b(f.commit())},[f,b]),A=(0,d.useCallback)(()=>b(f.undo()),[f,b]),L=(0,d.useCallback)(()=>b(f.redo()),[f,b]),K=(0,d.useMemo)(()=>({stack:f.history,undo:A,redo:L}),[f,A,L]),he=(0,d.useCallback)(()=>C.current?.getState().scene??null,[]);return{store:C.current,dispatch:$,commit:_,history:K,subscribe:y.subscribe,getScene:he,compileBus:g,compileErrors:M}},Ae=()=>{const e=new Set;return{subscribe:t=>(e.add(t),()=>{e.delete(t)}),notify:()=>e.forEach(t=>t())}},ie=({data:e,spec:t,plugins:r=[],theme:n,formattingLocale:s,handleRef:c,onSpecChange:l,onError:u,onWarnings:h,colorScheme:p="light",children:R})=>{const[P]=(0,d.useState)(()=>n),x=P?.colorScheme??p,[f]=(0,d.useState)(()=>o.createGeomRendererResolver([...P?.plugins??[],...r].filter(ne))),g=(0,d.useId)(),[S]=(0,d.useState)(()=>(0,m.createAnchorResolver)(r)),[E]=(0,d.useState)(()=>(0,m.createDataLabelPlacementResolver)(r)),[y]=(0,d.useState)(()=>be()),[C]=(0,d.useState)(()=>o.createTargetBoundaryStore()),D=(0,d.useMemo)(()=>(0,m.createStyleResolver)({colorScheme:x}),[x]),{store:T,dispatch:M,commit:I,history:G,subscribe:j,getScene:N,compileBus:q,compileErrors:H}=$e({spec:t,data:e,colorScheme:x,plugins:r,theme:P,resolveRenderer:f,anchorResolver:S,onSpecChange:l,onError:u,onWarnings:h});(0,d.useEffect)(()=>{if(T)return T.subscribe((_,A)=>{if(_.scene.spec===A.scene.spec)return;const{selection:L,setSelection:K}=y.getState();L.length!==0&&K(oe(L,_.scene.spec))})},[T,y]);const b=(0,d.useMemo)(()=>({dispatch:M,commit:I}),[M,I]);(0,d.useImperativeHandle)(c,()=>({commands:b,undo:G.undo,redo:G.redo,subscribe:j,getScene:N,getSelection:()=>y.getState().selection,setSelection:_=>y.getState().setSelection(_),subscribeSelection:y.subscribe,canPlaceDataLabels:E.hasCapability,canFormatDataLabelsAsPercentages:E.hasPercentageFormat}),[b,G,j,N,y,E]);const $=(0,d.useMemo)(()=>T?{chartId:g,store:T,selectionStore:y,targetBoundaryStore:C,commands:b,history:G,formattingLocale:s,compileBus:q,colorScheme:x,styleResolver:D,anchorResolver:S}:null,[g,T,y,C,b,G,s,q,x,D,S]);return(0,i.jsx)(re,{forcedErrors:H,onError:u,resetKeys:[t,e],children:$?(0,i.jsx)(o.GraphContext.Provider,{value:$,children:(0,i.jsx)(o.GeomRendererResolverProvider,{value:f,children:(0,i.jsx)(o.DataLabelPlacementResolverProvider,{value:E,children:(0,i.jsx)(o.GeomShapesProvider,{shapes:P?.shapes,children:R})})})}):null})};function Be({theme:e,...t}={}){const r=(0,m.createSpecBuilder)(t);return{...r,GraphProvider:s=>(0,i.jsx)(ie,{...s,plugins:r.plugins,theme:e})}}var k=(e,t)=>{if(typeof e=="number")return Number.isFinite(e)?e:null;if(!e.endsWith("%"))return null;const r=Number.parseFloat(e);return Number.isFinite(r)?r/100*t:null},Oe=({x:e,y:t,width:r,height:n},s)=>{const c=k(e,s.width),l=k(t,s.height),u=k(r,s.width),h=k(n,s.height);return c===null||l===null||u===null||h===null?null:{x:c,y:l,width:u,height:h}},ae=({animateTransitions:e,cx:t,cy:r,r:n,effects:s,...c})=>{const l=o.toGeomEffectsStyle(s);return e?(0,i.jsx)(O.motion.circle,{initial:!1,animate:{cx:t,cy:r,r:n},transition:o.DEFAULT_SPRING_TRANSITION,style:l,...c}):(0,i.jsx)("circle",{cx:t,cy:r,r:n,style:l,...c})},le=({animateTransitions:e,x1:t,y1:r,x2:n,y2:s,effects:c,...l})=>{const u=o.toGeomEffectsStyle(c);return e?(0,i.jsx)(O.motion.line,{initial:!1,animate:{x1:t,y1:r,x2:n,y2:s},transition:o.DEFAULT_SPRING_TRANSITION,style:u,...l}):(0,i.jsx)("line",{x1:t,y1:r,x2:n,y2:s,style:u,...l})},ce=({animateTransitions:e,x:t,y:r,width:n,height:s,rx:c,ry:l,effects:u,...h})=>{const p=o.toGeomEffectsStyle(u);return e?(0,i.jsx)(O.motion.rect,{initial:!1,animate:{attrX:t,attrY:r,width:n,height:s,...c!==void 0&&l!==void 0?{rx:c,ry:l}:{}},transition:o.DEFAULT_SPRING_TRANSITION,style:p,...h}):(0,i.jsx)("rect",{x:t,y:r,width:n,height:s,rx:c,ry:l,style:p,...h})},ue=({animateTransitions:e,d:t,source:r,effects:n,...s})=>{const c=o.toGeomEffectsStyle(n);return e?(0,i.jsx)(Ye,{d:t,source:r,style:c,...s}):(0,i.jsx)("path",{d:t,style:c,...s})},Ke=e=>{const{Circle:t}=o.useGeomShapes();return t===void 0?ae(e):(0,i.jsx)(o.GeomShapesProvider,{children:(0,i.jsx)(t,{...e})})},Fe=e=>{const{Line:t}=o.useGeomShapes();return t===void 0?le(e):(0,i.jsx)(o.GeomShapesProvider,{children:(0,i.jsx)(t,{...e})})},Ue=({cornerRadius:e,...t})=>{const{Rect:r}=o.useGeomShapes(),n=o.useGeomPanelPixelSize(),s=o.useGeomPixelsPerUnit(),c={...t,...We(e,t,n,s)};return r===void 0?ce(c):(0,i.jsx)(o.GeomShapesProvider,{children:(0,i.jsx)(r,{...c})})},ze=e=>{const{Path:t}=o.useGeomShapes();return t===void 0?ue(e):(0,i.jsx)(o.GeomShapesProvider,{children:(0,i.jsx)(t,{...e})})},Ye=({d:e,source:t,...r})=>{const n=o.useSvgPathMorph(e,o.DEFAULT_SPRING_TRANSITION,t);return(0,i.jsx)(O.motion.path,{d:n,...r})},We=(e,t,r,n)=>{if(e===void 0)return{};const s=Ve(t,r,n);if(s===null)return e==="full"?{}:Z((0,m.resolveGeomCornerRadiusPx)({cornerRadius:e}),n);const c=Math.min((0,m.resolveGeomCornerRadiusPx)({cornerRadius:e,box:s}),Math.min(s.width,s.height)/2);return Z(c,n)},Ve=(e,t,r)=>{const n=J(e.width,t?.width,r.x),s=J(e.height,t?.height,r.y);return n===null||s===null?null:{width:n,height:s}},J=(e,t,r)=>{if(typeof e=="number")return Number.isFinite(e)?Math.abs(e)*r:null;if(t===void 0)return null;const n=k(e,t);return n===null?null:Math.abs(n)},Z=(e,t)=>t.x<=0||t.y<=0?{rx:0,ry:0}:{rx:e/t.x,ry:e/t.y},Xe=({children:e,...t})=>{const r=o.useGeomPanelPixelSize();return(0,i.jsx)("svg",{viewBox:"0 0 1 1",preserveAspectRatio:"none",width:"100%",height:"100%",pointerEvents:"none",...t,children:(0,i.jsx)(o.GeomPanelSizeProvider,{size:r,space:"unit",children:e})})},Qe=({box:e,children:t})=>{const r=o.useGeomPanelSize(),n=r===null?null:r.width*(e.x1-e.x0),s=r===null?null:r.height*(e.y1-e.y0),c=(0,d.useMemo)(()=>n===null||s===null?null:{width:n,height:s},[n,s]);return(0,i.jsx)("svg",{x:(0,m.toPercent)(e.x0),y:(0,m.toPercent)(e.y0),width:(0,m.toPercent)(e.x1-e.x0),height:(0,m.toPercent)(e.y1-e.y0),overflow:"hidden",pointerEvents:"none",children:(0,i.jsx)(o.GeomPanelSizeProvider,{size:c,children:t})})},Je="drqe3u0",Ze="drqe3u1",et="drqe3u2",tt="drqe3u3",w="drqe3u4",rt="drqe3u5",nt="drqe3u6",st="drqe3u7",B="drqe3u8",ot="drqe3u9",it="drqe3ua";var at="drqe3uc",lt="drqe3ud",ct="drqe3ue",ut="drqe3uf";var dt="drqe3uh",ht="drqe3ui",ee={enabled:"drqe3uk drqe3uj",disabled:"drqe3ul drqe3uj"},te={ran:"drqe3un drqe3um",dim:"drqe3uo drqe3um"},de={ran:"drqe3uq drqe3up",cached:"drqe3ur drqe3up",untouched:"drqe3us drqe3up"},mt=({width:e=440,style:t,className:r}={})=>{const{compileBus:n}=o.useGraphContext(),[s]=(0,d.useState)(()=>Re()),[c,l]=(0,d.useState)(!1),[u,h]=(0,d.useState)(m.isCompilerCachingEnabled);(0,d.useEffect)(()=>{const{recordCompile:g}=s.getState(),S=n.getLastTrigger(),E=n.getLastCompile();return S&&E&&g(S,E),n.subscribe(g)},[s,n]);const p=(0,F.useStore)(s,g=>g.lastCompile),R=(0,F.useStore)(s,g=>g.history),P=n.getCacheStats(),x=p===null&&R.length===0,f=()=>{h(g=>{const S=!g;return(0,m.setCompilerCachingEnabled)(S),S})};return(0,i.jsxs)("div",{className:(0,U.default)(it,r),style:{width:e,...t},children:[(0,i.jsxs)("div",{className:Je,children:[(0,i.jsxs)("div",{children:[(0,i.jsx)("div",{className:Ze,children:"compile cache"}),(0,i.jsx)("div",{className:ct,children:x?"production: stats disabled":p?`last: ${p.label} · ${W(p.durationMs)}`:"awaiting first compile…"})]}),(0,i.jsx)("button",{type:"button",onClick:()=>l(g=>!g),className:ut,children:c?"▾":"▴"})]}),!c&&(0,i.jsxs)("div",{className:"drqe3ub",children:[(0,i.jsxs)("button",{type:"button",onClick:f,className:u?ee.enabled:ee.disabled,"aria-pressed":u,children:["cache ",u?"enabled":"disabled"]}),(0,i.jsx)("span",{className:"drqe3ug",children:"next compile reflects this toggle"})]}),!c&&!x&&(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(gt,{delta:p?.stages,durations:p?.stageDurationsMs,cumulative:P}),(0,i.jsx)(pt,{entries:R})]})]})},gt=({delta:e,durations:t,cumulative:r})=>(0,i.jsxs)("table",{className:et,children:[(0,i.jsx)("thead",{children:(0,i.jsxs)("tr",{className:dt,children:[(0,i.jsx)("th",{className:tt,children:"stage"}),(0,i.jsx)("th",{className:w,children:"time"}),(0,i.jsx)("th",{className:w,children:"Δ miss"}),(0,i.jsx)("th",{className:w,children:"Δ hit"}),(0,i.jsx)("th",{className:w,children:"total miss"}),(0,i.jsx)("th",{className:w,children:"total hit"})]})}),(0,i.jsx)("tbody",{children:m.COMPILER_STAGE_KEYS.map(n=>{const s=e?.[n],c=vt(s);return(0,i.jsxs)("tr",{className:at,children:[(0,i.jsxs)("td",{className:rt,children:[(0,i.jsx)("span",{className:de[c],"aria-hidden":!0})," ",n]}),(0,i.jsx)("td",{className:B,children:t===void 0||c==="untouched"?"—":W(t[n])}),(0,i.jsx)("td",{className:c==="ran"?te.ran:te.dim,children:s?.misses??0}),(0,i.jsx)("td",{className:B,children:s?.hits??0}),(0,i.jsx)("td",{className:B,children:r[n].misses}),(0,i.jsx)("td",{className:B,children:r[n].hits})]},n)})})]}),pt=({entries:e})=>e.length===0?null:(0,i.jsxs)("div",{className:lt,children:[(0,i.jsx)("div",{className:ht,children:"recent compiles"}),e.map(t=>{const r=ft(t.stages,c=>c.misses>0),n=m.COMPILER_STAGE_KEYS.length,s=r===0?"cached":"ran";return(0,i.jsxs)("div",{className:nt,children:[(0,i.jsx)("span",{className:de[s],"aria-hidden":!0}),(0,i.jsx)("span",{className:st,title:t.label,children:t.label}),(0,i.jsxs)("span",{className:ot,children:[r,"/",n," ran · ",W(t.durationMs)]})]},t.id)})]}),vt=e=>!e||e.hits===0&&e.misses===0?"untouched":e.misses>0?"ran":"cached",ft=(e,t)=>{let r=0;for(const n of m.COMPILER_STAGE_KEYS)t(e[n])&&(r+=1);return r},W=e=>e<.1?"<0.1ms":e>=10?`${e.toFixed(0)}ms`:`${e.toFixed(2)}ms`,St=()=>{const{history:e}=o.useGraphContext(),{stack:t,undo:r,redo:n}=e,s=(0,d.useCallback)(u=>t.subscribe(u),[t]),c=(0,d.useCallback)(()=>t.getSnapshot(),[t]),l=(0,d.useSyncExternalStore)(s,c,c);return(0,d.useMemo)(()=>({...l,undo:r,redo:n}),[l,r,n])},yt=new Set(["button","checkbox","color","file","hidden","image","radio","range","reset","submit"]),bt=(e,t={})=>{const{target:r,enabled:n=!0}=t;(0,d.useEffect)(()=>{const s=Gt(r);if(!n||!s)return;const c=l=>{if(!xt(l)||l.defaultPrevented||Et(l.target))return;const u=o.resolveHistoryStep(l);if(!u)return;const h=e.current;h&&(u==="undo"?h.undo():h.redo())&&l.preventDefault()};return s.addEventListener("keydown",c),()=>s.removeEventListener("keydown",c)},[e,r,n])},Gt=e=>e===void 0?window:e!==null&&"current"in e?e.current:e,xt=e=>"key"in e,Et=e=>e instanceof HTMLInputElement?!yt.has(e.type):e instanceof HTMLElement?e.isContentEditable||e.tagName==="TEXTAREA":!1,Tt=()=>{const{targetBoundaryStore:e}=o.useGraphContext();return(0,F.useStore)(e,t=>t.boundary)};exports.BrandMark=o.BrandMark;exports.CanvasTextMeasurer=o.CanvasTextMeasurer;exports.DefaultFooter=o.DefaultFooter;exports.DefaultGeomCircle=ae;exports.DefaultGeomLine=le;exports.DefaultGeomPath=ue;exports.DefaultGeomRect=ce;exports.DefaultGrid=o.DefaultGrid;exports.DefaultHeader=o.DefaultHeader;exports.DefaultSwatch=o.DefaultSwatch;exports.DefaultTooltip=o.DefaultTooltip;exports.DevToolsPanel=mt;exports.GRAPH_MODES=o.GRAPH_MODES;exports.GeomCircle=Ke;exports.GeomLine=Fe;exports.GeomOverpaint=o.GeomOverpaint;exports.GeomPath=ze;exports.GeomRect=Ue;exports.GraphErrorBoundary=re;exports.GraphErrorPanel=z;exports.GraphProvider=ie;exports.GraphRenderer=o.GraphRenderer;exports.HoverProvider=o.HoverProvider;exports.IntroFade=o.IntroFade;exports.IntroWipeClip=o.IntroWipeClip;exports.TextMeasurerProvider=o.TextMeasurerProvider;exports.ThemeProvider=o.ThemeProvider;exports.UnitBoxSvg=Qe;exports.UnitSpaceSvg=Xe;exports.buildDotsEditOutlineShapes=o.buildDotsEditOutlineShapes;exports.createGraphyKit=Be;exports.darkTheme=o.darkTheme;exports.defineGeomRenderer=o.defineGeomRenderer;exports.lightTheme=o.lightTheme;exports.lightenCss=o.lightenCss;exports.projectPointCartesian=o.projectPointCartesian;exports.pruneSelection=oe;exports.readPositionPixels=k;exports.readRectPixels=Oe;exports.resolveBrandMarkVisual=o.resolveBrandMarkVisual;exports.resolvePathStroke=o.resolvePathStroke;exports.scalePointToPanel=o.scalePointToPanel;exports.stampAxisEditTarget=o.stampAxisEditTarget;exports.stampGridEditTarget=o.stampGridEditTarget;exports.stampLegendEditTarget=o.stampLegendEditTarget;exports.useElementScreenRect=o.useElementScreenRect;exports.useGeomHitTest=o.useGeomHitTest;exports.useGeomHover=o.useGeomHover;exports.useGeomPanelSize=o.useGeomPanelSize;exports.useGeomReaderTree=o.useGeomReaderTree;exports.useGeomStyleReader=o.useGeomStyleReader;exports.useGraphCommands=o.useGraphCommands;exports.useGraphHandle=o.useGraphHandle;exports.useGraphHistory=St;exports.useGraphHistoryShortcuts=bt;exports.useGraphLocale=o.useGraphLocale;exports.useGraphSelection=o.useGraphSelection;exports.useGuidesTakePress=o.useGuidesTakePress;exports.useHandleScene=o.useHandleScene;exports.useHoverState=o.useHoverState;exports.usePaintDefs=o.usePaintDefs;exports.useResolvedStyle=o.useResolvedStyle;exports.useSceneSelector=o.useSceneSelector;exports.useStyleReaderTree=o.useStyleReaderTree;exports.useStyleResolver=o.useStyleResolver;exports.useTargetBoundary=Tt;exports.useTextMeasurer=o.useTextMeasurer;exports.vars=o.vars;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require('./index.css');const o=require("./history-chords-XJ9tQsgG.cjs");let m=require("@graphysdk/viz-engine"),d=require("react"),i=require("react/jsx-runtime"),F=require("zustand"),O=require("motion/react"),Y=require("zustand/vanilla"),U=require("clsx");U=o.__toESM(U,1);var me="_1a5iqpb0",ge="_1a5iqpb1";var pe="_1a5iqpb3",ve="_1a5iqpb4",fe="_1a5iqpb5";var z=({errors:e})=>{const[t,...r]=e;return(0,i.jsxs)("div",{role:"alert",className:me,children:[(0,i.jsx)("strong",{className:ge,children:"This chart could not be rendered."}),t&&(0,i.jsx)(V,{diagnostic:t}),r.length>0&&(0,i.jsx)("ul",{className:"_1a5iqpb2",children:r.map((n,s)=>(0,i.jsx)("li",{children:(0,i.jsx)(V,{diagnostic:n})},`${n.code}-${s}`))})]})},V=({diagnostic:e})=>(0,i.jsxs)("div",{className:pe,children:[(0,i.jsx)("span",{className:ve,children:e.code}),(0,i.jsx)("p",{className:fe,children:e.message}),e.suggestion&&(0,i.jsx)("p",{className:"_1a5iqpb6",children:e.suggestion})]});function Se(e=[],t=[]){return e.length===t.length&&e.every((r,n)=>Object.is(r,t[n]))}var re=class extends d.Component{constructor(...e){super(...e),this.state={caughtDiagnostic:null}}static getDerivedStateFromError(e){return{caughtDiagnostic:(0,m.buildDiagnostic)(e)}}componentDidCatch(e,t){const r=(0,m.buildDiagnostic)(e);o.logDiagnostics([r]),this.props.onError?.([r]),console.error("Chart render component stack:",t.componentStack)}componentDidUpdate(e){this.state.caughtDiagnostic&&!Se(e.resetKeys,this.props.resetKeys)&&this.setState({caughtDiagnostic:null})}render(){const{caughtDiagnostic:e}=this.state;if(e)return(0,i.jsx)(z,{errors:[e]});const{forcedErrors:t,children:r}=this.props;return t&&t.length>0?(0,i.jsx)(z,{errors:t}):r}},ne=e=>typeof e=="object"&&"geom"in e&&"render"in e,se=e=>{const t=(0,m.resolveDefinition)(e);return t instanceof m.Geom?t:null},oe=(e,t)=>{const r=e.filter(n=>ye(n,t));return r.length===e.length?e:r},ye=(e,t)=>e.kind==="annotation"?(0,m.findAnnotation)(t.annotations,e.id)!==null:e.kind==="observations"||e.kind==="layer"&&e.layerId!==void 0?(0,m.findLayerById)(t.layers,e.layerId)!==void 0:!0,X=[],be=()=>(0,Y.createStore)(e=>({selection:X,setSelection:t=>e(r=>Ge(r.selection,t)?r:{selection:t}),clearSelection:()=>e(t=>t.selection.length===0?t:{selection:X})})),Ge=(e,t)=>e===t?!0:e.length!==t.length?!1:e.every((r,n)=>{const s=t[n];return s!==void 0&&(0,m.areEditTargetsEqual)(r,s)}),xe=process.env.NODE_ENV!=="production",Ee=5,Te=e=>{if(!xe)return{emit:()=>{},subscribe:()=>Pe,getLastTrigger:()=>null,getLastCompile:()=>null,getCacheStats:()=>e.getCacheStats()};const t=new Set;let r=null;return{emit:n=>{const s=e.getLastCompile();if(s){r=n;for(const c of t)c(n,s)}},subscribe:n=>(t.add(n),()=>{t.delete(n)}),getLastTrigger:()=>r,getLastCompile:()=>e.getLastCompile(),getCacheStats:()=>e.getCacheStats()}},Re=()=>(0,Y.createStore)(e=>({lastCompile:null,history:[],nextId:1,lastSnapshot:null,recordCompile:(t,r)=>e(n=>{if(n.lastSnapshot===r)return n;const s={id:n.nextId,label:Ce(t),stages:r.stages,stageDurationsMs:r.stageDurationsMs,durationMs:r.durationMs};return{lastCompile:s,history:je(n.history,s,Ee),nextId:n.nextId+1,lastSnapshot:r}})})),Pe=()=>{},Ce=e=>{switch(e.kind){case"init":return"init";case"spec":return"spec change";case"data":return"data change";case"command":return e.command.metadata.description}},je=(e,t,r)=>{const n=e.length>=r?e.length-(r-1):0;return[...e.slice(n),t]};function Q(e){const t=e.filter(ne),r=new Set([...Object.keys(o.BUILT_IN_GEOM_RENDERERS),...t.map(u=>u.geom)]),n=[],s=new Set;for(const u of e){const h=se(u);h===null||r.has(h.type)||s.has(h.type)||(s.add(h.type),n.push({kind:"user-input",severity:"error",code:"MISSING_GEOM_RENDERER",message:`Custom geom '${h.type}' is registered but has no renderer.`,context:{requested:h.type,kind:"geom-renderer"},suggestion:`Add a render half for it: \`defineGeomRenderer(${h.type}Geom, { coord, render })\`, then include it in \`plugins\`.`}))}const c=new Map;for(const u of t){if("definition"in u)continue;const h=`${u.geom}|${u.coord}`,p=c.get(h);p?p.count+=1:c.set(h,{geom:u.geom,coord:u.coord,count:1})}const l=[];for(const{geom:u,coord:h,count:p}of c.values())p<2||l.push({kind:"user-input",severity:"warning",code:"DUPLICATE_REGISTERED_TYPE",message:`Multiple render-only overrides register ('${u}', '${h}') (${p} entries); the last in the array wins.`,context:{requested:`${u}@${h}`,kind:"geom-renderer"},suggestion:`Keep a single render-only override for ('${u}', '${h}').`});return l.push(...Me(e)),{errors:n,warnings:l}}function Ne(e,t){const{coordSystem:r,layers:n}=e,s=new Set,c=[];for(const l of n)t(l.geom,r.type)!==null||s.has(l.geom)||(s.add(l.geom),c.push({kind:"user-input",severity:"warning",code:"MISSING_GEOM_RENDERER",message:`No renderer for geom '${l.geom}' under ${r.type} coords; the layer is not painted.`,context:{requested:l.geom,kind:"geom-renderer"},suggestion:`Register a renderer for ('${l.geom}', '${r.type}') via \`defineGeomRenderer\`.`}));return c}function De(e,t){const{coordSystem:r,layers:n}=e,s=new Set,c=[];for(const l of n){if(l.interactive===!1||l.spatialKind!=="render-hit-test"||s.has(l.geom))continue;const u=t(l.geom,r.type);u===null||u.hitTest||o.isLiveRender(u)||(s.add(l.geom),c.push({kind:"user-input",severity:"warning",code:"MISSING_RENDER_HIT_TEST",message:`Geom '${l.geom}' declares spatialKind 'render-hit-test' but its renderer provides no hit-test; the layer has no hover.`,context:{requested:l.geom,kind:"geom-renderer"},suggestion:`Add a \`hitTest\` factory (precomputed geometry) or a live render (\`{ fn, options: { live: true } }\`, live simulation) to the renderer for ('${l.geom}', '${r.type}').`}))}return c}function _e(e){const t=new Set,r=[];for(const n of e.layers){const s=n.identityKey;n.interactive!==!1&&(n.spatialKind!=="render-hit-test"||typeof s!="object"||t.has(n.geom)||n.data.hasVariable(s.variable)||(t.add(n.geom),r.push({kind:"user-input",severity:"warning",code:"RENDER_HIT_TEST_IDENTITY",message:`Geom '${n.geom}' keys its identity on '${s.variable}', a column its compile output does not emit; its hover lookup is empty.`,context:{requested:n.geom,kind:"geom-renderer"},suggestion:`Emit the '${s.variable}' column from the geom's \`compile()\`, or point \`identityKey\` at a column it does emit.`})))}return r}function Ie(e,t){const{coordSystem:r,layers:n}=e,s=new Set,c=[];for(const l of n){if(l.interactive===!1||l.spatialKind!=="render-hit-test"||s.has(l.geom))continue;const u=t(l.geom,r.type);u===null||!u.hitTest||!o.isLiveRender(u)||(s.add(l.geom),c.push({kind:"user-input",severity:"warning",code:"CONFLICTING_RENDER_HIT_TEST",message:`Geom '${l.geom}' declares both a \`hitTest\` factory and a live render; these are alternatives, so only the live render is used.`,context:{requested:l.geom,kind:"geom-renderer"},suggestion:"Keep one: a `hitTest` factory for precomputed geometry, OR a live render (`{ fn, options: { live: true } }`) for a live simulation."}))}return c}function ke(e,t){const r=new Set,n=[];for(const s of e.layers)s.interactive!==!1&&(s.spatialKind!=="render-hit-test"||r.has(s.geom)||t.hasCapability(s.geom)||(r.add(s.geom),n.push({kind:"user-input",severity:"warning",code:"MISSING_ANCHOR_CAPABILITY",message:`Geom '${s.geom}' declares no \`resolveAnchorPosition\`; its observations cannot be annotated, so the editor overlay paints no creation trigger on them.`,context:{requested:s.geom,kind:"geom-renderer"},suggestion:"Implement `resolveAnchorPosition(observation, context)` on the geom, returning the normalised panel position an annotation on that observation belongs at."})));return n}function qe(e,t){const{coordSystem:r,layers:n}=e,s=new Set,c=[];for(const l of n){if(l.interactive===!1||l.spatialKind==="render-hit-test"||s.has(l.geom))continue;const u=t(l.geom,r.type);u===null||!o.isLiveRender(u)||(s.add(l.geom),c.push({kind:"user-input",severity:"warning",code:"LIVE_RENDER_REQUIRES_RENDER_HIT_TEST",message:`Geom '${l.geom}' declares a live render but its layer's spatialKind is '${l.spatialKind}', not 'render-hit-test'; its push-path hover resolves to nothing.`,context:{requested:l.geom,kind:"geom-renderer"},suggestion:"Have the geom's manifest yield spatialKind 'render-hit-test' so the scene layer carries the `byKey` index the live render's `pushHover` resolves against."}))}return c}function Le(e,t){let r;return e.layers.flatMap((n,s)=>o.isLiveRender(t(n.geom,e.coordSystem.type))?we(n)?(r??=(0,m.createStyleResolver)().readers(e),(r.geom(n).get("overpaint",void 0,"hovered")?.length??0)===0?[]:[{kind:"user-input",severity:"warning",code:"INVALID_STYLE_RULE",message:`Style 'overpaint' in state 'hovered' is not supported on live geom '${n.geom}' (layer '${n.id}'); it is ignored.`,context:{param:"overpaint",layerIndex:s,requested:n.geom},suggestion:"Remove the hovered overpaint, or paint the hover treatment in the geom's live render."}]):[]:[])}var we=e=>[e.styles.defaults,e.styles.overrides].some(t=>t.some(r=>r.state==="hovered"&&(r.declarations.overpaint?.length??0)>0));function Me(e){const t=new Set,r=[];for(const n of e){const s=se(n);s===null||t.has(s.type)||s.dataLabelCoordTypes.length===0||s.getDataLabelPlacements!==void 0||(t.add(s.type),r.push({kind:"user-input",severity:"warning",code:"MISSING_DATA_LABEL_PLACEMENT",message:`Geom '${s.type}' declares \`dataLabelCoordTypes\` but implements no \`getDataLabelPlacements\`; its layers paint no data labels.`,context:{requested:s.type,kind:"geom-renderer"},suggestion:"Implement `getDataLabelPlacements(context)` on the geom, or drop `dataLabelCoordTypes` so the compiler warns the author off the flag."}))}return r}var He=e=>(0,Y.createStore)(t=>({scene:e,setScene:r=>t(n=>n.scene===r?n:{scene:r})})),$e=({spec:e,data:t,colorScheme:r,plugins:n,theme:s,resolveRenderer:c,anchorResolver:l,onSpecChange:u,onError:h,onWarnings:p})=>{const R=o.useLatestRef(u),P=o.useLatestRef(h),x=o.useLatestRef(p),[{session:f,compileBus:g}]=(0,d.useState)(()=>{const a=(0,m.createCompiler)({plugins:n,theme:s});return{session:new m.GraphCompilationSession(a),compileBus:Te(a)}}),[S]=(0,d.useState)(()=>{const a=Q(n??[]),v=Q(s?.plugins??[]);return{errors:[...v.errors,...a.errors],warnings:[...v.warnings,...a.warnings]}}),E=(0,d.useRef)(null),[y]=(0,d.useState)(Ae),C=(0,d.useRef)(null),D=(0,d.useCallback)(a=>S.errors.length===0?a:[...S.errors,...a??[]],[S]),T=(0,d.useCallback)(a=>{if(!a.ok)return a.errors;if(C.current)C.current.getState().setScene(a.scene);else{const v=He(a.scene);v.subscribe(y.notify),C.current=v,y.notify()}return null},[y]),[M,k]=(0,d.useState)(()=>{const a=f.compile({spec:e,data:t,colorScheme:r});return E.current=a,D(T(a))}),G=(0,d.useCallback)(a=>a.ok?[...a.warnings,...Ne(a.scene,c),...De(a.scene,c),..._e(a.scene),...Ie(a.scene,c),...qe(a.scene,c),...Le(a.scene,c),...ke(a.scene,l)]:a.warnings,[c,l]),j=(0,d.useCallback)(a=>{a.length!==0&&(o.logDiagnostics(a),P.current?.(a))},[P]),N=(0,d.useCallback)(a=>{a.length!==0&&(o.logDiagnostics(a),x.current?.(a))},[x]);(0,d.useEffect)(()=>{const a=E.current;a&&(j([...S.errors,...a.ok?[]:a.errors]),N([...S.warnings,...G(a)]),a.ok&&g.emit({kind:"init"}))},[g,j,N,S,G]),(0,d.useEffect)(()=>{const a=f.update({spec:e,data:t,colorScheme:r});if(!a)return;a.committedSpec&&R.current?.(a.committedSpec);const v=T(a.result);k(D(v)),v&&j(v),N(G(a.result)),v||g.emit({kind:a.hasSpecChange?"spec":"data"})},[e,t,r,f,g,T,j,N,D,G,R]);const q=(0,d.useCallback)(a=>{k(v=>v===null?v:D(null)),N(G(a))},[D,N,G]),H=(0,d.useCallback)(a=>{a.scene&&C.current?.getState().setScene(a.scene),a.result&&q(a.result),a.command&&g.emit({kind:"command",command:a.command}),a.spec&&R.current?.(a.spec),a.errors&&j([...a.errors])},[q,g,R,j]),b=(0,d.useCallback)(a=>{for(const v of a)H(v);return a.some(v=>!!v.scene)},[H]),$=(0,d.useCallback)((a,v)=>{b(f.applyCommand(a,v))},[f,b]),_=(0,d.useCallback)(()=>{b(f.commit())},[f,b]),A=(0,d.useCallback)(()=>b(f.undo()),[f,b]),L=(0,d.useCallback)(()=>b(f.redo()),[f,b]),K=(0,d.useMemo)(()=>({stack:f.history,undo:A,redo:L}),[f,A,L]),he=(0,d.useCallback)(()=>C.current?.getState().scene??null,[]);return{store:C.current,dispatch:$,commit:_,history:K,subscribe:y.subscribe,getScene:he,compileBus:g,compileErrors:M}},Ae=()=>{const e=new Set;return{subscribe:t=>(e.add(t),()=>{e.delete(t)}),notify:()=>e.forEach(t=>t())}},ie=({data:e,spec:t,plugins:r=[],theme:n,formattingLocale:s,handleRef:c,onSpecChange:l,onError:u,onWarnings:h,colorScheme:p="light",children:R})=>{const[P]=(0,d.useState)(()=>n),x=P?.colorScheme??p,[f]=(0,d.useState)(()=>o.createGeomRendererResolver([...P?.plugins??[],...r].filter(ne))),g=(0,d.useId)(),[S]=(0,d.useState)(()=>(0,m.createAnchorResolver)(r)),[E]=(0,d.useState)(()=>(0,m.createDataLabelPlacementResolver)(r)),[y]=(0,d.useState)(()=>be()),[C]=(0,d.useState)(()=>o.createTargetBoundaryStore()),D=(0,d.useMemo)(()=>(0,m.createStyleResolver)({colorScheme:x}),[x]),{store:T,dispatch:M,commit:k,history:G,subscribe:j,getScene:N,compileBus:q,compileErrors:H}=$e({spec:t,data:e,colorScheme:x,plugins:r,theme:P,resolveRenderer:f,anchorResolver:S,onSpecChange:l,onError:u,onWarnings:h});(0,d.useEffect)(()=>{if(T)return T.subscribe((_,A)=>{if(_.scene.spec===A.scene.spec)return;const{selection:L,setSelection:K}=y.getState();L.length!==0&&K(oe(L,_.scene.spec))})},[T,y]);const b=(0,d.useMemo)(()=>({dispatch:M,commit:k}),[M,k]);(0,d.useImperativeHandle)(c,()=>({commands:b,undo:G.undo,redo:G.redo,subscribe:j,getScene:N,getSelection:()=>y.getState().selection,setSelection:_=>y.getState().setSelection(_),subscribeSelection:y.subscribe,canPlaceDataLabels:E.hasCapability,canFormatDataLabelsAsPercentages:E.hasPercentageFormat}),[b,G,j,N,y,E]);const $=(0,d.useMemo)(()=>T?{chartId:g,store:T,selectionStore:y,targetBoundaryStore:C,commands:b,history:G,formattingLocale:s,compileBus:q,colorScheme:x,styleResolver:D,anchorResolver:S}:null,[g,T,y,C,b,G,s,q,x,D,S]);return(0,i.jsx)(re,{forcedErrors:H,onError:u,resetKeys:[t,e],children:$?(0,i.jsx)(o.GraphContext.Provider,{value:$,children:(0,i.jsx)(o.GeomRendererResolverProvider,{value:f,children:(0,i.jsx)(o.DataLabelPlacementResolverProvider,{value:E,children:(0,i.jsx)(o.GeomShapesProvider,{shapes:P?.shapes,children:R})})})}):null})};function Be({theme:e,...t}={}){const r=(0,m.createSpecBuilder)(t);return{...r,GraphProvider:s=>(0,i.jsx)(ie,{...s,plugins:r.plugins,theme:e})}}var I=(e,t)=>{if(typeof e=="number")return Number.isFinite(e)?e:null;if(!e.endsWith("%"))return null;const r=Number.parseFloat(e);return Number.isFinite(r)?r/100*t:null},Oe=({x:e,y:t,width:r,height:n},s)=>{const c=I(e,s.width),l=I(t,s.height),u=I(r,s.width),h=I(n,s.height);return c===null||l===null||u===null||h===null?null:{x:c,y:l,width:u,height:h}},ae=({animateTransitions:e,cx:t,cy:r,r:n,effects:s,...c})=>{const l=o.toGeomEffectsStyle(s);return e?(0,i.jsx)(O.motion.circle,{initial:!1,animate:{cx:t,cy:r,r:n},transition:o.DEFAULT_SPRING_TRANSITION,style:l,...c}):(0,i.jsx)("circle",{cx:t,cy:r,r:n,style:l,...c})},le=({animateTransitions:e,x1:t,y1:r,x2:n,y2:s,effects:c,...l})=>{const u=o.toGeomEffectsStyle(c);return e?(0,i.jsx)(O.motion.line,{initial:!1,animate:{x1:t,y1:r,x2:n,y2:s},transition:o.DEFAULT_SPRING_TRANSITION,style:u,...l}):(0,i.jsx)("line",{x1:t,y1:r,x2:n,y2:s,style:u,...l})},ce=({animateTransitions:e,x:t,y:r,width:n,height:s,rx:c,ry:l,effects:u,...h})=>{const p=o.toGeomEffectsStyle(u);return e?(0,i.jsx)(O.motion.rect,{initial:!1,animate:{attrX:t,attrY:r,width:n,height:s,...c!==void 0&&l!==void 0?{rx:c,ry:l}:{}},transition:o.DEFAULT_SPRING_TRANSITION,style:p,...h}):(0,i.jsx)("rect",{x:t,y:r,width:n,height:s,rx:c,ry:l,style:p,...h})},ue=({animateTransitions:e,d:t,source:r,effects:n,...s})=>{const c=o.toGeomEffectsStyle(n);return e?(0,i.jsx)(Ye,{d:t,source:r,style:c,...s}):(0,i.jsx)("path",{d:t,style:c,...s})},Ke=e=>{const{Circle:t}=o.useGeomShapes();return t===void 0?ae(e):(0,i.jsx)(o.GeomShapesProvider,{children:(0,i.jsx)(t,{...e})})},Fe=e=>{const{Line:t}=o.useGeomShapes();return t===void 0?le(e):(0,i.jsx)(o.GeomShapesProvider,{children:(0,i.jsx)(t,{...e})})},Ue=({cornerRadius:e,...t})=>{const{Rect:r}=o.useGeomShapes(),n=o.useGeomPanelPixelSize(),s=o.useGeomPixelsPerUnit(),c={...t,...We(e,t,n,s)};return r===void 0?ce(c):(0,i.jsx)(o.GeomShapesProvider,{children:(0,i.jsx)(r,{...c})})},ze=e=>{const{Path:t}=o.useGeomShapes();return t===void 0?ue(e):(0,i.jsx)(o.GeomShapesProvider,{children:(0,i.jsx)(t,{...e})})},Ye=({d:e,source:t,...r})=>{const n=o.useSvgPathMorph(e,o.DEFAULT_SPRING_TRANSITION,t);return(0,i.jsx)(O.motion.path,{d:n,...r})},We=(e,t,r,n)=>{if(e===void 0)return{};const s=Ve(t,r,n);if(s===null)return e==="full"?{}:Z((0,m.resolveGeomCornerRadiusPx)({cornerRadius:e}),n);const c=Math.min((0,m.resolveGeomCornerRadiusPx)({cornerRadius:e,box:s}),Math.min(s.width,s.height)/2);return Z(c,n)},Ve=(e,t,r)=>{const n=J(e.width,t?.width,r.x),s=J(e.height,t?.height,r.y);return n===null||s===null?null:{width:n,height:s}},J=(e,t,r)=>{if(typeof e=="number")return Number.isFinite(e)?Math.abs(e)*r:null;if(t===void 0)return null;const n=I(e,t);return n===null?null:Math.abs(n)},Z=(e,t)=>t.x<=0||t.y<=0?{rx:0,ry:0}:{rx:e/t.x,ry:e/t.y},Xe=({children:e,...t})=>{const r=o.useGeomPanelPixelSize();return(0,i.jsx)("svg",{viewBox:"0 0 1 1",preserveAspectRatio:"none",width:"100%",height:"100%",pointerEvents:"none",...t,children:(0,i.jsx)(o.GeomPanelSizeProvider,{size:r,space:"unit",children:e})})},Qe=({box:e,children:t})=>{const r=o.useGeomPanelSize(),n=r===null?null:r.width*(e.x1-e.x0),s=r===null?null:r.height*(e.y1-e.y0),c=(0,d.useMemo)(()=>n===null||s===null?null:{width:n,height:s},[n,s]);return(0,i.jsx)("svg",{x:(0,m.toPercent)(e.x0),y:(0,m.toPercent)(e.y0),width:(0,m.toPercent)(e.x1-e.x0),height:(0,m.toPercent)(e.y1-e.y0),overflow:"hidden",pointerEvents:"none",children:(0,i.jsx)(o.GeomPanelSizeProvider,{size:c,children:t})})},Je="drqe3u0",Ze="drqe3u1",et="drqe3u2",tt="drqe3u3",w="drqe3u4",rt="drqe3u5",nt="drqe3u6",st="drqe3u7",B="drqe3u8",ot="drqe3u9",it="drqe3ua";var at="drqe3uc",lt="drqe3ud",ct="drqe3ue",ut="drqe3uf";var dt="drqe3uh",ht="drqe3ui",ee={enabled:"drqe3uk drqe3uj",disabled:"drqe3ul drqe3uj"},te={ran:"drqe3un drqe3um",dim:"drqe3uo drqe3um"},de={ran:"drqe3uq drqe3up",cached:"drqe3ur drqe3up",untouched:"drqe3us drqe3up"},mt=({width:e=440,style:t,className:r}={})=>{const{compileBus:n}=o.useGraphContext(),[s]=(0,d.useState)(()=>Re()),[c,l]=(0,d.useState)(!1),[u,h]=(0,d.useState)(m.isCompilerCachingEnabled);(0,d.useEffect)(()=>{const{recordCompile:g}=s.getState(),S=n.getLastTrigger(),E=n.getLastCompile();return S&&E&&g(S,E),n.subscribe(g)},[s,n]);const p=(0,F.useStore)(s,g=>g.lastCompile),R=(0,F.useStore)(s,g=>g.history),P=n.getCacheStats(),x=p===null&&R.length===0,f=()=>{h(g=>{const S=!g;return(0,m.setCompilerCachingEnabled)(S),S})};return(0,i.jsxs)("div",{className:(0,U.default)(it,r),style:{width:e,...t},children:[(0,i.jsxs)("div",{className:Je,children:[(0,i.jsxs)("div",{children:[(0,i.jsx)("div",{className:Ze,children:"compile cache"}),(0,i.jsx)("div",{className:ct,children:x?"production: stats disabled":p?`last: ${p.label} · ${W(p.durationMs)}`:"awaiting first compile…"})]}),(0,i.jsx)("button",{type:"button",onClick:()=>l(g=>!g),className:ut,children:c?"▾":"▴"})]}),!c&&(0,i.jsxs)("div",{className:"drqe3ub",children:[(0,i.jsxs)("button",{type:"button",onClick:f,className:u?ee.enabled:ee.disabled,"aria-pressed":u,children:["cache ",u?"enabled":"disabled"]}),(0,i.jsx)("span",{className:"drqe3ug",children:"next compile reflects this toggle"})]}),!c&&!x&&(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(gt,{delta:p?.stages,durations:p?.stageDurationsMs,cumulative:P}),(0,i.jsx)(pt,{entries:R})]})]})},gt=({delta:e,durations:t,cumulative:r})=>(0,i.jsxs)("table",{className:et,children:[(0,i.jsx)("thead",{children:(0,i.jsxs)("tr",{className:dt,children:[(0,i.jsx)("th",{className:tt,children:"stage"}),(0,i.jsx)("th",{className:w,children:"time"}),(0,i.jsx)("th",{className:w,children:"Δ miss"}),(0,i.jsx)("th",{className:w,children:"Δ hit"}),(0,i.jsx)("th",{className:w,children:"total miss"}),(0,i.jsx)("th",{className:w,children:"total hit"})]})}),(0,i.jsx)("tbody",{children:m.COMPILER_STAGE_KEYS.map(n=>{const s=e?.[n],c=vt(s);return(0,i.jsxs)("tr",{className:at,children:[(0,i.jsxs)("td",{className:rt,children:[(0,i.jsx)("span",{className:de[c],"aria-hidden":!0})," ",n]}),(0,i.jsx)("td",{className:B,children:t===void 0||c==="untouched"?"—":W(t[n])}),(0,i.jsx)("td",{className:c==="ran"?te.ran:te.dim,children:s?.misses??0}),(0,i.jsx)("td",{className:B,children:s?.hits??0}),(0,i.jsx)("td",{className:B,children:r[n].misses}),(0,i.jsx)("td",{className:B,children:r[n].hits})]},n)})})]}),pt=({entries:e})=>e.length===0?null:(0,i.jsxs)("div",{className:lt,children:[(0,i.jsx)("div",{className:ht,children:"recent compiles"}),e.map(t=>{const r=ft(t.stages,c=>c.misses>0),n=m.COMPILER_STAGE_KEYS.length,s=r===0?"cached":"ran";return(0,i.jsxs)("div",{className:nt,children:[(0,i.jsx)("span",{className:de[s],"aria-hidden":!0}),(0,i.jsx)("span",{className:st,title:t.label,children:t.label}),(0,i.jsxs)("span",{className:ot,children:[r,"/",n," ran · ",W(t.durationMs)]})]},t.id)})]}),vt=e=>!e||e.hits===0&&e.misses===0?"untouched":e.misses>0?"ran":"cached",ft=(e,t)=>{let r=0;for(const n of m.COMPILER_STAGE_KEYS)t(e[n])&&(r+=1);return r},W=e=>e<.1?"<0.1ms":e>=10?`${e.toFixed(0)}ms`:`${e.toFixed(2)}ms`,St=()=>{const{history:e}=o.useGraphContext(),{stack:t,undo:r,redo:n}=e,s=(0,d.useCallback)(u=>t.subscribe(u),[t]),c=(0,d.useCallback)(()=>t.getSnapshot(),[t]),l=(0,d.useSyncExternalStore)(s,c,c);return(0,d.useMemo)(()=>({...l,undo:r,redo:n}),[l,r,n])},yt=new Set(["button","checkbox","color","file","hidden","image","radio","range","reset","submit"]),bt=(e,t={})=>{const{target:r,enabled:n=!0}=t;(0,d.useEffect)(()=>{const s=Gt(r);if(!n||!s)return;const c=l=>{if(!xt(l)||l.defaultPrevented||Et(l.target))return;const u=o.resolveHistoryStep(l);if(!u)return;const h=e.current;h&&(u==="undo"?h.undo():h.redo())&&l.preventDefault()};return s.addEventListener("keydown",c),()=>s.removeEventListener("keydown",c)},[e,r,n])},Gt=e=>e===void 0?window:e!==null&&"current"in e?e.current:e,xt=e=>"key"in e,Et=e=>e instanceof HTMLInputElement?!yt.has(e.type):e instanceof HTMLElement?e.isContentEditable||e.tagName==="TEXTAREA":!1,Tt=()=>{const{targetBoundaryStore:e}=o.useGraphContext();return(0,F.useStore)(e,t=>t.boundary)};exports.BrandMark=o.BrandMark;exports.CanvasTextMeasurer=o.CanvasTextMeasurer;exports.DefaultFooter=o.DefaultFooter;exports.DefaultGeomCircle=ae;exports.DefaultGeomLine=le;exports.DefaultGeomPath=ue;exports.DefaultGeomRect=ce;exports.DefaultGrid=o.DefaultGrid;exports.DefaultHeader=o.DefaultHeader;exports.DefaultSwatch=o.DefaultSwatch;exports.DefaultTooltip=o.DefaultTooltip;exports.DevToolsPanel=mt;exports.GRAPH_MODES=o.GRAPH_MODES;exports.GeomCircle=Ke;exports.GeomLine=Fe;exports.GeomOverpaint=o.GeomOverpaint;exports.GeomPath=ze;exports.GeomRect=Ue;exports.GraphErrorBoundary=re;exports.GraphErrorPanel=z;exports.GraphProvider=ie;exports.GraphRenderer=o.GraphRenderer;exports.HoverProvider=o.HoverProvider;exports.IntroFade=o.IntroFade;exports.IntroWipeClip=o.IntroWipeClip;exports.TextMeasurerProvider=o.TextMeasurerProvider;exports.ThemeProvider=o.ThemeProvider;exports.UnitBoxSvg=Qe;exports.UnitSpaceSvg=Xe;exports.buildDotsEditOutlineShapes=o.buildDotsEditOutlineShapes;exports.createGraphyKit=Be;exports.darkTheme=o.darkTheme;exports.defineGeomRenderer=o.defineGeomRenderer;exports.getBuiltInEditOutlineShapes=o.getBuiltInEditOutlineShapes;exports.lightTheme=o.lightTheme;exports.lightenCss=o.lightenCss;exports.projectPointCartesian=o.projectPointCartesian;exports.pruneSelection=oe;exports.readPositionPixels=I;exports.readRectPixels=Oe;exports.resolveBrandMarkVisual=o.resolveBrandMarkVisual;exports.resolvePathStroke=o.resolvePathStroke;exports.scalePointToPanel=o.scalePointToPanel;exports.stampAxisEditTarget=o.stampAxisEditTarget;exports.stampGridEditTarget=o.stampGridEditTarget;exports.stampLegendEditTarget=o.stampLegendEditTarget;exports.useElementScreenRect=o.useElementScreenRect;exports.useGeomHitTest=o.useGeomHitTest;exports.useGeomHover=o.useGeomHover;exports.useGeomPanelSize=o.useGeomPanelSize;exports.useGeomReaderTree=o.useGeomReaderTree;exports.useGeomStyleReader=o.useGeomStyleReader;exports.useGraphCommands=o.useGraphCommands;exports.useGraphHandle=o.useGraphHandle;exports.useGraphHistory=St;exports.useGraphHistoryShortcuts=bt;exports.useGraphLocale=o.useGraphLocale;exports.useGraphSelection=o.useGraphSelection;exports.useGuidesTakePress=o.useGuidesTakePress;exports.useHandleScene=o.useHandleScene;exports.useHoverState=o.useHoverState;exports.usePaintDefs=o.usePaintDefs;exports.useResolvedStyle=o.useResolvedStyle;exports.useSceneSelector=o.useSceneSelector;exports.useStyleReaderTree=o.useStyleReaderTree;exports.useStyleResolver=o.useStyleResolver;exports.useTargetBoundary=Tt;exports.useTextMeasurer=o.useTextMeasurer;exports.vars=o.vars;
package/dist/index.d.ts CHANGED
@@ -734,6 +734,12 @@ export declare interface GeomShapes {
734
734
  Path?: ComponentType<GeomPathProps>;
735
735
  }
736
736
 
737
+ /**
738
+ * The edit outline the built-in renderer draws for a geom, for a render-only override that keeps the built-in's
739
+ * geometry and changes only its look. Empty where no built-in renderer serves the geom in that coord.
740
+ */
741
+ export declare const getBuiltInEditOutlineShapes: (geom: string, coord: CoordKind, input: EditOutlineShapesInput) => readonly EditOutlineShape[];
742
+
737
743
  /**
738
744
  * Chart display and interaction mode.
739
745
  * - 'readonly': Normal chart display with full interactivity but no editing (default)
package/dist/index.mjs CHANGED
@@ -1,13 +1,13 @@
1
- import { An as te, At as or, Bt as ar, Cn as ir, Dn as cr, Dt as lr, En as dr, Ft as Z, H as ur, Ht as Ne, Kt as mr, M as hr, Mt as gr, N as pr, Nn as J, Nt as vr, On as fr, Qt as yr, R as Sr, Rt as Ge, Sn as br, Tn as Er, Tt as Tr, Ut as Rr, V as Nr, Vt as Y, Xt as Gr, Yt as Cr, Zt as Dr, _n as z, _t as wr, a as Pr, an as qr, at as Ir, cn as _r, ct as kr, dn as fe, fn as Ce, gn as De, h as Lr, hn as Mr, i as xr, j as $r, jn as we, jt as Hr, kn as Pe, ln as ye, mn as W, mt as Ar, n as Br, nn as Or, ot as Kr, pn as qe, qt as Ie, r as Fr, s as jr, t as _e, un as A, vn as V, vt as Ur, w as Yr, wn as zr, xn as Wr, yn as Vr, z as Xr, zt as ke } from "./history-chords-Bf7f1kij.js";
2
- import { COMPILER_STAGE_KEYS as re, Geom as Le, GraphCompilationSession as Me, areEditTargetsEqual as xe, buildDiagnostic as oe, createAnchorResolver as $e, createCompiler as He, createDataLabelPlacementResolver as Ae, createSpecBuilder as Be, createStyleResolver as Se, findAnnotation as Oe, findLayerById as ae, isCompilerCachingEnabled as Ke, resolveDefinition as Fe, resolveGeomCornerRadiusPx as ie, setCompilerCachingEnabled as je, toPercent as j } from "@graphysdk/viz-engine";
3
- import { Component as Ue, useCallback as v, useEffect as H, useId as Ye, useImperativeHandle as ze, useMemo as _, useRef as ce, useState as b, useSyncExternalStore as We } from "react";
1
+ import { $t as or, An as Ne, At as ar, Bt as ir, Cn as cr, Dn as lr, Dt as dr, En as ur, Ft as J, H as mr, Ht as W, Jt as Ge, M as hr, Mn as Ce, Mt as gr, N as pr, Nt as vr, On as fr, Pn as Z, Qt as yr, R as Sr, Rt as De, Sn as br, Tn as Er, Tt as Tr, Ut as we, V as Rr, Vt as Nr, Wt as Gr, Xt as Cr, Zt as Dr, _n as Pe, _t as wr, a as Pr, at as qr, bn as Ir, ct as _r, dn as A, fn as fe, gn as kr, h as Lr, hn as z, i as Mr, j as $r, jn as te, jt as xr, kn as Hr, ln as Ar, mn as qe, mt as Br, n as Or, on as Kr, ot as Fr, pn as Ie, qt as jr, r as Ur, rn as Wr, s as zr, t as _e, un as ye, vn as Y, vt as Yr, w as Vr, wn as Xr, yn as V, z as Qr, zt as ke } from "./history-chords-CkXZ_0Gc.js";
2
+ import { COMPILER_STAGE_KEYS as re, Geom as Le, GraphCompilationSession as Me, areEditTargetsEqual as $e, buildDiagnostic as oe, createAnchorResolver as xe, createCompiler as He, createDataLabelPlacementResolver as Ae, createSpecBuilder as Be, createStyleResolver as Se, findAnnotation as Oe, findLayerById as ae, isCompilerCachingEnabled as Ke, resolveDefinition as Fe, resolveGeomCornerRadiusPx as ie, setCompilerCachingEnabled as je, toPercent as j } from "@graphysdk/viz-engine";
3
+ import { Component as Ue, useCallback as v, useEffect as H, useId as We, useImperativeHandle as ze, useMemo as _, useRef as ce, useState as b, useSyncExternalStore as Ye } from "react";
4
4
  import { Fragment as Ve, jsx as c, jsxs as f } from "react/jsx-runtime";
5
5
  import { useStore as ee } from "zustand";
6
6
  import { motion as X } from "motion/react";
7
7
  import { createStore as ne } from "zustand/vanilla";
8
8
  import Xe from "clsx";
9
- import './index.css';var Qe = "_1a5iqpb0", Ze = "_1a5iqpb1";
10
- var Je = "_1a5iqpb3", et = "_1a5iqpb4", tt = "_1a5iqpb5";
9
+ import './index.css';var Qe = "_1a5iqpb0", Je = "_1a5iqpb1";
10
+ var Ze = "_1a5iqpb3", et = "_1a5iqpb4", tt = "_1a5iqpb5";
11
11
  var le = ({ errors: e }) => {
12
12
  const [t, ...r] = e;
13
13
  return /* @__PURE__ */ f("div", {
@@ -15,7 +15,7 @@ var le = ({ errors: e }) => {
15
15
  className: Qe,
16
16
  children: [
17
17
  /* @__PURE__ */ c("strong", {
18
- className: Ze,
18
+ className: Je,
19
19
  children: "This chart could not be rendered."
20
20
  }),
21
21
  t && /* @__PURE__ */ c(de, { diagnostic: t }),
@@ -26,7 +26,7 @@ var le = ({ errors: e }) => {
26
26
  ]
27
27
  });
28
28
  }, de = ({ diagnostic: e }) => /* @__PURE__ */ f("div", {
29
- className: Je,
29
+ className: Ze,
30
30
  children: [
31
31
  /* @__PURE__ */ c("span", {
32
32
  className: et,
@@ -54,7 +54,7 @@ var nt = class extends Ue {
54
54
  }
55
55
  componentDidCatch(e, t) {
56
56
  const r = oe(e);
57
- J([r]), this.props.onError?.([r]), console.error("Chart render component stack:", t.componentStack);
57
+ Z([r]), this.props.onError?.([r]), console.error("Chart render component stack:", t.componentStack);
58
58
  }
59
59
  componentDidUpdate(e) {
60
60
  this.state.caughtDiagnostic && !rt(e.resetKeys, this.props.resetKeys) && this.setState({ caughtDiagnostic: null });
@@ -77,7 +77,7 @@ var nt = class extends Ue {
77
77
  clearSelection: () => e((t) => t.selection.length === 0 ? t : { selection: ue })
78
78
  })), it = (e, t) => e === t ? !0 : e.length !== t.length ? !1 : e.every((r, n) => {
79
79
  const s = t[n];
80
- return s !== void 0 && xe(r, s);
80
+ return s !== void 0 && $e(r, s);
81
81
  }), ct = process.env.NODE_ENV !== "production", lt = 5, dt = (e) => {
82
82
  if (!ct) return {
83
83
  emit: () => {
@@ -142,7 +142,7 @@ var nt = class extends Ue {
142
142
  return [...e.slice(n), t];
143
143
  };
144
144
  function me(e) {
145
- const t = e.filter(be), r = /* @__PURE__ */ new Set([...Object.keys(Ne), ...t.map((l) => l.geom)]), n = [], s = /* @__PURE__ */ new Set();
145
+ const t = e.filter(be), r = /* @__PURE__ */ new Set([...Object.keys(we), ...t.map((l) => l.geom)]), n = [], s = /* @__PURE__ */ new Set();
146
146
  for (const l of e) {
147
147
  const d = Ee(l);
148
148
  d === null || r.has(d.type) || s.has(d.type) || (s.add(d.type), n.push({
@@ -206,7 +206,7 @@ function vt(e, t) {
206
206
  for (const a of n) {
207
207
  if (a.interactive === !1 || a.spatialKind !== "render-hit-test" || s.has(a.geom)) continue;
208
208
  const l = t(a.geom, r.type);
209
- l === null || l.hitTest || Y(l) || (s.add(a.geom), i.push({
209
+ l === null || l.hitTest || W(l) || (s.add(a.geom), i.push({
210
210
  kind: "user-input",
211
211
  severity: "warning",
212
212
  code: "MISSING_RENDER_HIT_TEST",
@@ -243,7 +243,7 @@ function yt(e, t) {
243
243
  for (const a of n) {
244
244
  if (a.interactive === !1 || a.spatialKind !== "render-hit-test" || s.has(a.geom)) continue;
245
245
  const l = t(a.geom, r.type);
246
- l === null || !l.hitTest || !Y(l) || (s.add(a.geom), i.push({
246
+ l === null || !l.hitTest || !W(l) || (s.add(a.geom), i.push({
247
247
  kind: "user-input",
248
248
  severity: "warning",
249
249
  code: "CONFLICTING_RENDER_HIT_TEST",
@@ -278,7 +278,7 @@ function bt(e, t) {
278
278
  for (const a of n) {
279
279
  if (a.interactive === !1 || a.spatialKind === "render-hit-test" || s.has(a.geom)) continue;
280
280
  const l = t(a.geom, r.type);
281
- l === null || !Y(l) || (s.add(a.geom), i.push({
281
+ l === null || !W(l) || (s.add(a.geom), i.push({
282
282
  kind: "user-input",
283
283
  severity: "warning",
284
284
  code: "LIVE_RENDER_REQUIRES_RENDER_HIT_TEST",
@@ -294,7 +294,7 @@ function bt(e, t) {
294
294
  }
295
295
  function Et(e, t) {
296
296
  let r;
297
- return e.layers.flatMap((n, s) => Y(t(n.geom, e.coordSystem.type)) ? Tt(n) ? (r ??= Se().readers(e), (r.geom(n).get("overpaint", void 0, "hovered")?.length ?? 0) === 0 ? [] : [{
297
+ return e.layers.flatMap((n, s) => W(t(n.geom, e.coordSystem.type)) ? Tt(n) ? (r ??= Se().readers(e), (r.geom(n).get("overpaint", void 0, "hovered")?.length ?? 0) === 0 ? [] : [{
298
298
  kind: "user-input",
299
299
  severity: "warning",
300
300
  code: "INVALID_STYLE_RULE",
@@ -330,7 +330,7 @@ var Nt = (e) => ne((t) => ({
330
330
  scene: e,
331
331
  setScene: (r) => t((n) => n.scene === r ? n : { scene: r })
332
332
  })), Gt = ({ spec: e, data: t, colorScheme: r, plugins: n, theme: s, resolveRenderer: i, anchorResolver: a, onSpecChange: l, onError: d, onWarnings: m }) => {
333
- const G = Z(l), C = Z(d), T = Z(m), [{ session: g, compileBus: u }] = b(() => {
333
+ const G = J(l), C = J(d), T = J(m), [{ session: g, compileBus: u }] = b(() => {
334
334
  const o = He({
335
335
  plugins: n,
336
336
  theme: s
@@ -370,9 +370,9 @@ var Nt = (e) => ne((t) => ({
370
370
  ...Et(o.scene, i),
371
371
  ...St(o.scene, a)
372
372
  ] : o.warnings, [i, a]), w = v((o) => {
373
- o.length !== 0 && (J(o), C.current?.(o));
373
+ o.length !== 0 && (Z(o), C.current?.(o));
374
374
  }, [C]), P = v((o) => {
375
- o.length !== 0 && (J(o), T.current?.(o));
375
+ o.length !== 0 && (Z(o), T.current?.(o));
376
376
  }, [T]);
377
377
  H(() => {
378
378
  const o = R.current;
@@ -457,7 +457,7 @@ var Nt = (e) => ne((t) => ({
457
457
  notify: () => e.forEach((t) => t())
458
458
  };
459
459
  }, Dt = ({ data: e, spec: t, plugins: r = [], theme: n, formattingLocale: s, handleRef: i, onSpecChange: a, onError: l, onWarnings: d, colorScheme: m = "light", children: G }) => {
460
- const [C] = b(() => n), T = C?.colorScheme ?? m, [g] = b(() => ke([...C?.plugins ?? [], ...r].filter(be))), u = Ye(), [p] = b(() => $e(r)), [R] = b(() => Ae(r)), [y] = b(() => at()), [D] = b(() => Ge()), q = _(() => Se({ colorScheme: T }), [T]), { store: N, dispatch: B, commit: k, history: E, subscribe: w, getScene: P, compileBus: L, compileErrors: O } = Gt({
460
+ const [C] = b(() => n), T = C?.colorScheme ?? m, [g] = b(() => ke([...C?.plugins ?? [], ...r].filter(be))), u = We(), [p] = b(() => xe(r)), [R] = b(() => Ae(r)), [y] = b(() => at()), [D] = b(() => De()), q = _(() => Se({ colorScheme: T }), [T]), { store: N, dispatch: B, commit: k, history: E, subscribe: w, getScene: P, compileBus: L, compileErrors: O } = Gt({
461
461
  spec: t,
462
462
  data: e,
463
463
  colorScheme: T,
@@ -529,11 +529,11 @@ var Nt = (e) => ne((t) => ({
529
529
  forcedErrors: O,
530
530
  onError: l,
531
531
  resetKeys: [t, e],
532
- children: K ? /* @__PURE__ */ c(Pe.Provider, {
532
+ children: K ? /* @__PURE__ */ c(Ne.Provider, {
533
533
  value: K,
534
- children: /* @__PURE__ */ c(Ie, {
534
+ children: /* @__PURE__ */ c(Ge, {
535
535
  value: g,
536
- children: /* @__PURE__ */ c(we, {
536
+ children: /* @__PURE__ */ c(Ce, {
537
537
  value: R,
538
538
  children: /* @__PURE__ */ c(A, {
539
539
  shapes: C?.shapes,
@@ -544,7 +544,7 @@ var Nt = (e) => ne((t) => ({
544
544
  }) : null
545
545
  });
546
546
  };
547
- function sn({ theme: e, ...t } = {}) {
547
+ function on({ theme: e, ...t } = {}) {
548
548
  const r = Be(t);
549
549
  return {
550
550
  ...r,
@@ -555,13 +555,13 @@ function sn({ theme: e, ...t } = {}) {
555
555
  })
556
556
  };
557
557
  }
558
- var $ = (e, t) => {
558
+ var x = (e, t) => {
559
559
  if (typeof e == "number") return Number.isFinite(e) ? e : null;
560
560
  if (!e.endsWith("%")) return null;
561
561
  const r = Number.parseFloat(e);
562
562
  return Number.isFinite(r) ? r / 100 * t : null;
563
- }, on = ({ x: e, y: t, width: r, height: n }, s) => {
564
- const i = $(e, s.width), a = $(t, s.height), l = $(r, s.width), d = $(n, s.height);
563
+ }, an = ({ x: e, y: t, width: r, height: n }, s) => {
564
+ const i = x(e, s.width), a = x(t, s.height), l = x(r, s.width), d = x(n, s.height);
565
565
  return i === null || a === null || l === null || d === null ? null : {
566
566
  x: i,
567
567
  y: a,
@@ -577,7 +577,7 @@ var $ = (e, t) => {
577
577
  cy: r,
578
578
  r: n
579
579
  },
580
- transition: z,
580
+ transition: Y,
581
581
  style: a,
582
582
  ...i
583
583
  }) : /* @__PURE__ */ c("circle", {
@@ -597,7 +597,7 @@ var $ = (e, t) => {
597
597
  x2: n,
598
598
  y2: s
599
599
  },
600
- transition: z,
600
+ transition: Y,
601
601
  style: l,
602
602
  ...a
603
603
  }) : /* @__PURE__ */ c("line", {
@@ -622,7 +622,7 @@ var $ = (e, t) => {
622
622
  ry: a
623
623
  } : {}
624
624
  },
625
- transition: z,
625
+ transition: Y,
626
626
  style: m,
627
627
  ...d
628
628
  }) : /* @__PURE__ */ c("rect", {
@@ -647,23 +647,23 @@ var $ = (e, t) => {
647
647
  style: i,
648
648
  ...s
649
649
  });
650
- }, an = (e) => {
651
- const { Circle: t } = W();
652
- return t === void 0 ? wt(e) : /* @__PURE__ */ c(A, { children: /* @__PURE__ */ c(t, { ...e }) });
653
650
  }, cn = (e) => {
654
- const { Line: t } = W();
651
+ const { Circle: t } = z();
652
+ return t === void 0 ? wt(e) : /* @__PURE__ */ c(A, { children: /* @__PURE__ */ c(t, { ...e }) });
653
+ }, ln = (e) => {
654
+ const { Line: t } = z();
655
655
  return t === void 0 ? Pt(e) : /* @__PURE__ */ c(A, { children: /* @__PURE__ */ c(t, { ...e }) });
656
- }, ln = ({ cornerRadius: e, ...t }) => {
657
- const { Rect: r } = W(), n = fe(), s = qe(), i = {
656
+ }, dn = ({ cornerRadius: e, ...t }) => {
657
+ const { Rect: r } = z(), n = fe(), s = qe(), i = {
658
658
  ...t,
659
659
  ...kt(e, t, n, s)
660
660
  };
661
661
  return r === void 0 ? qt(i) : /* @__PURE__ */ c(A, { children: /* @__PURE__ */ c(r, { ...i }) });
662
- }, dn = (e) => {
663
- const { Path: t } = W();
662
+ }, un = (e) => {
663
+ const { Path: t } = z();
664
664
  return t === void 0 ? It(e) : /* @__PURE__ */ c(A, { children: /* @__PURE__ */ c(t, { ...e }) });
665
665
  }, _t = ({ d: e, source: t, ...r }) => {
666
- const n = De(e, z, t);
666
+ const n = Pe(e, Y, t);
667
667
  return /* @__PURE__ */ c(X.path, {
668
668
  d: n,
669
669
  ...r
@@ -687,7 +687,7 @@ var $ = (e, t) => {
687
687
  }, he = (e, t, r) => {
688
688
  if (typeof e == "number") return Number.isFinite(e) ? Math.abs(e) * r : null;
689
689
  if (t === void 0) return null;
690
- const n = $(e, t);
690
+ const n = x(e, t);
691
691
  return n === null ? null : Math.abs(n);
692
692
  }, ge = (e, t) => t.x <= 0 || t.y <= 0 ? {
693
693
  rx: 0,
@@ -695,7 +695,7 @@ var $ = (e, t) => {
695
695
  } : {
696
696
  rx: e / t.x,
697
697
  ry: e / t.y
698
- }, un = ({ children: e, ...t }) => {
698
+ }, mn = ({ children: e, ...t }) => {
699
699
  const r = fe();
700
700
  return /* @__PURE__ */ c("svg", {
701
701
  viewBox: "0 0 1 1",
@@ -710,8 +710,8 @@ var $ = (e, t) => {
710
710
  children: e
711
711
  })
712
712
  });
713
- }, mn = ({ box: e, children: t }) => {
714
- const r = Ce(), n = r === null ? null : r.width * (e.x1 - e.x0), s = r === null ? null : r.height * (e.y1 - e.y0), i = _(() => n === null || s === null ? null : {
713
+ }, hn = ({ box: e, children: t }) => {
714
+ const r = Ie(), n = r === null ? null : r.width * (e.x1 - e.x0), s = r === null ? null : r.height * (e.y1 - e.y0), i = _(() => n === null || s === null ? null : {
715
715
  width: n,
716
716
  height: s
717
717
  }, [n, s]);
@@ -727,9 +727,9 @@ var $ = (e, t) => {
727
727
  children: t
728
728
  })
729
729
  });
730
- }, Mt = "drqe3u0", xt = "drqe3u1", $t = "drqe3u2", Ht = "drqe3u3", x = "drqe3u4", At = "drqe3u5", Bt = "drqe3u6", Ot = "drqe3u7", U = "drqe3u8", Kt = "drqe3u9", Ft = "drqe3ua";
731
- var jt = "drqe3uc", Ut = "drqe3ud", Yt = "drqe3ue", zt = "drqe3uf";
732
- var Wt = "drqe3uh", Vt = "drqe3ui", pe = {
730
+ }, Mt = "drqe3u0", $t = "drqe3u1", xt = "drqe3u2", Ht = "drqe3u3", $ = "drqe3u4", At = "drqe3u5", Bt = "drqe3u6", Ot = "drqe3u7", U = "drqe3u8", Kt = "drqe3u9", Ft = "drqe3ua";
731
+ var jt = "drqe3uc", Ut = "drqe3ud", Wt = "drqe3ue", zt = "drqe3uf";
732
+ var Yt = "drqe3uh", Vt = "drqe3ui", pe = {
733
733
  enabled: "drqe3uk drqe3uj",
734
734
  disabled: "drqe3ul drqe3uj"
735
735
  }, ve = {
@@ -739,7 +739,7 @@ var Wt = "drqe3uh", Vt = "drqe3ui", pe = {
739
739
  ran: "drqe3uq drqe3up",
740
740
  cached: "drqe3ur drqe3up",
741
741
  untouched: "drqe3us drqe3up"
742
- }, hn = ({ width: e = 440, style: t, className: r } = {}) => {
742
+ }, gn = ({ width: e = 440, style: t, className: r } = {}) => {
743
743
  const { compileBus: n } = te(), [s] = b(() => ut()), [i, a] = b(!1), [l, d] = b(Ke);
744
744
  H(() => {
745
745
  const { recordCompile: u } = s.getState(), p = n.getLastTrigger(), R = n.getLastCompile();
@@ -761,10 +761,10 @@ var Wt = "drqe3uh", Vt = "drqe3ui", pe = {
761
761
  /* @__PURE__ */ f("div", {
762
762
  className: Mt,
763
763
  children: [/* @__PURE__ */ f("div", { children: [/* @__PURE__ */ c("div", {
764
- className: xt,
764
+ className: $t,
765
765
  children: "compile cache"
766
766
  }), /* @__PURE__ */ c("div", {
767
- className: Yt,
767
+ className: Wt,
768
768
  children: T ? "production: stats disabled" : m ? `last: ${m.label} · ${se(m.durationMs)}` : "awaiting first compile…"
769
769
  })] }), /* @__PURE__ */ c("button", {
770
770
  type: "button",
@@ -794,37 +794,37 @@ var Wt = "drqe3uh", Vt = "drqe3ui", pe = {
794
794
  ]
795
795
  });
796
796
  }, Xt = ({ delta: e, durations: t, cumulative: r }) => /* @__PURE__ */ f("table", {
797
- className: $t,
797
+ className: xt,
798
798
  children: [/* @__PURE__ */ c("thead", { children: /* @__PURE__ */ f("tr", {
799
- className: Wt,
799
+ className: Yt,
800
800
  children: [
801
801
  /* @__PURE__ */ c("th", {
802
802
  className: Ht,
803
803
  children: "stage"
804
804
  }),
805
805
  /* @__PURE__ */ c("th", {
806
- className: x,
806
+ className: $,
807
807
  children: "time"
808
808
  }),
809
809
  /* @__PURE__ */ c("th", {
810
- className: x,
810
+ className: $,
811
811
  children: "Δ miss"
812
812
  }),
813
813
  /* @__PURE__ */ c("th", {
814
- className: x,
814
+ className: $,
815
815
  children: "Δ hit"
816
816
  }),
817
817
  /* @__PURE__ */ c("th", {
818
- className: x,
818
+ className: $,
819
819
  children: "total miss"
820
820
  }),
821
821
  /* @__PURE__ */ c("th", {
822
- className: x,
822
+ className: $,
823
823
  children: "total hit"
824
824
  })
825
825
  ]
826
826
  }) }), /* @__PURE__ */ c("tbody", { children: re.map((n) => {
827
- const s = e?.[n], i = Zt(s);
827
+ const s = e?.[n], i = Jt(s);
828
828
  return /* @__PURE__ */ f("tr", {
829
829
  className: jt,
830
830
  children: [
@@ -868,7 +868,7 @@ var Wt = "drqe3uh", Vt = "drqe3ui", pe = {
868
868
  className: Vt,
869
869
  children: "recent compiles"
870
870
  }), e.map((t) => {
871
- const r = Jt(t.stages, (i) => i.misses > 0), n = re.length;
871
+ const r = Zt(t.stages, (i) => i.misses > 0), n = re.length;
872
872
  return /* @__PURE__ */ f("div", {
873
873
  className: Bt,
874
874
  children: [
@@ -894,12 +894,12 @@ var Wt = "drqe3uh", Vt = "drqe3ui", pe = {
894
894
  ]
895
895
  }, t.id);
896
896
  })]
897
- }), Zt = (e) => !e || e.hits === 0 && e.misses === 0 ? "untouched" : e.misses > 0 ? "ran" : "cached", Jt = (e, t) => {
897
+ }), Jt = (e) => !e || e.hits === 0 && e.misses === 0 ? "untouched" : e.misses > 0 ? "ran" : "cached", Zt = (e, t) => {
898
898
  let r = 0;
899
899
  for (const n of re) t(e[n]) && (r += 1);
900
900
  return r;
901
- }, se = (e) => e < 0.1 ? "<0.1ms" : e >= 10 ? `${e.toFixed(0)}ms` : `${e.toFixed(2)}ms`, gn = () => {
902
- const { history: e } = te(), { stack: t, undo: r, redo: n } = e, s = v((l) => t.subscribe(l), [t]), i = v(() => t.getSnapshot(), [t]), a = We(s, i, i);
901
+ }, se = (e) => e < 0.1 ? "<0.1ms" : e >= 10 ? `${e.toFixed(0)}ms` : `${e.toFixed(2)}ms`, pn = () => {
902
+ const { history: e } = te(), { stack: t, undo: r, redo: n } = e, s = v((l) => t.subscribe(l), [t]), i = v(() => t.getSnapshot(), [t]), a = Ye(s, i, i);
903
903
  return _(() => ({
904
904
  ...a,
905
905
  undo: r,
@@ -920,7 +920,7 @@ var Wt = "drqe3uh", Vt = "drqe3ui", pe = {
920
920
  "range",
921
921
  "reset",
922
922
  "submit"
923
- ]), pn = (e, t = {}) => {
923
+ ]), vn = (e, t = {}) => {
924
924
  const { target: r, enabled: n = !0 } = t;
925
925
  H(() => {
926
926
  const s = tr(r);
@@ -938,77 +938,78 @@ var Wt = "drqe3uh", Vt = "drqe3ui", pe = {
938
938
  r,
939
939
  n
940
940
  ]);
941
- }, tr = (e) => e === void 0 ? window : e !== null && "current" in e ? e.current : e, rr = (e) => "key" in e, nr = (e) => e instanceof HTMLInputElement ? !er.has(e.type) : e instanceof HTMLElement ? e.isContentEditable || e.tagName === "TEXTAREA" : !1, vn = () => {
941
+ }, tr = (e) => e === void 0 ? window : e !== null && "current" in e ? e.current : e, rr = (e) => "key" in e, nr = (e) => e instanceof HTMLInputElement ? !er.has(e.type) : e instanceof HTMLElement ? e.isContentEditable || e.tagName === "TEXTAREA" : !1, fn = () => {
942
942
  const { targetBoundaryStore: e } = te();
943
943
  return ee(e, (t) => t.boundary);
944
944
  };
945
945
  export {
946
- Nr as BrandMark,
947
- Dr as CanvasTextMeasurer,
948
- Xr as DefaultFooter,
946
+ Rr as BrandMark,
947
+ yr as CanvasTextMeasurer,
948
+ Qr as DefaultFooter,
949
949
  wt as DefaultGeomCircle,
950
950
  Pt as DefaultGeomLine,
951
951
  It as DefaultGeomPath,
952
952
  qt as DefaultGeomRect,
953
- jr as DefaultGrid,
953
+ zr as DefaultGrid,
954
954
  Sr as DefaultHeader,
955
- mr as DefaultSwatch,
956
- Kr as DefaultTooltip,
957
- hn as DevToolsPanel,
955
+ jr as DefaultSwatch,
956
+ Fr as DefaultTooltip,
957
+ gn as DevToolsPanel,
958
958
  Tr as GRAPH_MODES,
959
- an as GeomCircle,
960
- cn as GeomLine,
961
- Hr as GeomOverpaint,
962
- dn as GeomPath,
963
- ln as GeomRect,
959
+ cn as GeomCircle,
960
+ ln as GeomLine,
961
+ xr as GeomOverpaint,
962
+ un as GeomPath,
963
+ dn as GeomRect,
964
964
  nt as GraphErrorBoundary,
965
965
  le as GraphErrorPanel,
966
966
  Dt as GraphProvider,
967
967
  Pr as GraphRenderer,
968
968
  vr as HoverProvider,
969
- Rr as IntroFade,
970
- Mr as IntroWipeClip,
969
+ Gr as IntroFade,
970
+ kr as IntroWipeClip,
971
971
  Cr as TextMeasurerProvider,
972
- Ar as ThemeProvider,
973
- mn as UnitBoxSvg,
974
- un as UnitSpaceSvg,
975
- Wr as buildDotsEditOutlineShapes,
976
- sn as createGraphyKit,
972
+ Br as ThemeProvider,
973
+ hn as UnitBoxSvg,
974
+ mn as UnitSpaceSvg,
975
+ br as buildDotsEditOutlineShapes,
976
+ on as createGraphyKit,
977
977
  wr as darkTheme,
978
- ar as defineGeomRenderer,
979
- Ur as lightTheme,
980
- Or as lightenCss,
981
- ir as projectPointCartesian,
978
+ ir as defineGeomRenderer,
979
+ Nr as getBuiltInEditOutlineShapes,
980
+ Yr as lightTheme,
981
+ Wr as lightenCss,
982
+ Xr as projectPointCartesian,
982
983
  st as pruneSelection,
983
- $ as readPositionPixels,
984
- on as readRectPixels,
985
- ur as resolveBrandMarkVisual,
986
- Vr as resolvePathStroke,
987
- br as scalePointToPanel,
984
+ x as readPositionPixels,
985
+ an as readRectPixels,
986
+ mr as resolveBrandMarkVisual,
987
+ Ir as resolvePathStroke,
988
+ cr as scalePointToPanel,
988
989
  $r as stampAxisEditTarget,
989
990
  hr as stampGridEditTarget,
990
991
  pr as stampLegendEditTarget,
991
- lr as useElementScreenRect,
992
+ dr as useElementScreenRect,
992
993
  gr as useGeomHitTest,
993
- or as useGeomHover,
994
- Ce as useGeomPanelSize,
995
- zr as useGeomReaderTree,
996
- Er as useGeomStyleReader,
997
- Br as useGraphCommands,
998
- xr as useGraphHandle,
999
- gn as useGraphHistory,
1000
- pn as useGraphHistoryShortcuts,
1001
- Ir as useGraphLocale,
994
+ ar as useGeomHover,
995
+ Ie as useGeomPanelSize,
996
+ Er as useGeomReaderTree,
997
+ ur as useGeomStyleReader,
998
+ Or as useGraphCommands,
999
+ Mr as useGraphHandle,
1000
+ pn as useGraphHistory,
1001
+ vn as useGraphHistoryShortcuts,
1002
+ qr as useGraphLocale,
1002
1003
  Lr as useGraphSelection,
1003
- Yr as useGuidesTakePress,
1004
- Fr as useHandleScene,
1005
- kr as useHoverState,
1006
- _r as usePaintDefs,
1007
- yr as useResolvedStyle,
1008
- fr as useSceneSelector,
1009
- dr as useStyleReaderTree,
1010
- cr as useStyleResolver,
1011
- vn as useTargetBoundary,
1012
- Gr as useTextMeasurer,
1013
- qr as vars
1004
+ Vr as useGuidesTakePress,
1005
+ Ur as useHandleScene,
1006
+ _r as useHoverState,
1007
+ Ar as usePaintDefs,
1008
+ or as useResolvedStyle,
1009
+ Hr as useSceneSelector,
1010
+ lr as useStyleReaderTree,
1011
+ fr as useStyleResolver,
1012
+ fn as useTargetBoundary,
1013
+ Dr as useTextMeasurer,
1014
+ Kr as vars
1014
1015
  };