@graphysdk/react-renderer 1.9.0-beta.1788774426787 → 1.9.0-beta.1788780809119
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/editable.cjs +1 -1
- package/dist/editable.mjs +1 -1
- package/dist/{history-chords-B6FRu2Mi.js → history-chords-DEguzjPn.js} +1 -1
- package/dist/{history-chords-BHNnf0qi.cjs → history-chords-lLtDj1lQ.cjs} +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +18 -0
- package/dist/index.mjs +233 -224
- package/package.json +2 -2
package/dist/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require('./index.css');const l=require("./history-chords-BHNnf0qi.cjs"),z=require("./dev.utils-C5W6wbHd.cjs");let y=require("@graphysdk/viz-engine"),c=require("react"),a=require("react/jsx-runtime"),Y=require("zustand"),O=require("zustand/vanilla"),P=require("clsx");P=l.__toESM(P,1);function L(e){for(const t of e)(t.severity==="error"?console.error:console.warn)(`[graphy] ${t.code}: ${t.message}`,t)}var oe="_1a5iqpb0",ie="_1a5iqpb1";var ae="_1a5iqpb3",le="_1a5iqpb4",ce="_1a5iqpb5";var K=({errors:e})=>{const[t,...r]=e;return(0,a.jsxs)("div",{role:"alert",className:oe,children:[(0,a.jsx)("strong",{className:ie,children:"This chart could not be rendered."}),t&&(0,a.jsx)(U,{diagnostic:t}),r.length>0&&(0,a.jsx)("ul",{className:"_1a5iqpb2",children:r.map((s,o)=>(0,a.jsx)("li",{children:(0,a.jsx)(U,{diagnostic:s})},`${s.code}-${o}`))})]})},U=({diagnostic:e})=>(0,a.jsxs)("div",{className:ae,children:[(0,a.jsx)("span",{className:le,children:e.code}),(0,a.jsx)("p",{className:ce,children:e.message}),e.suggestion&&(0,a.jsx)("p",{className:"_1a5iqpb6",children:e.suggestion})]});function de(e=[],t=[]){return e.length===t.length&&e.every((r,s)=>Object.is(r,t[s]))}var X=class extends c.Component{constructor(...e){super(...e),this.state={caughtDiagnostic:null}}static getDerivedStateFromError(e){return{caughtDiagnostic:(0,y.buildDiagnostic)(e)}}componentDidCatch(e,t){const r=(0,y.buildDiagnostic)(e);L([r]),this.props.onError?.([r]),console.error("Chart render component stack:",t.componentStack)}componentDidUpdate(e){this.state.caughtDiagnostic&&!de(e.resetKeys,this.props.resetKeys)&&this.setState({caughtDiagnostic:null})}render(){const{caughtDiagnostic:e}=this.state;if(e)return(0,a.jsx)(K,{errors:[e]});const{forcedErrors:t,children:r}=this.props;return t&&t.length>0?(0,a.jsx)(K,{errors:t}):r}},Q=e=>typeof e=="object"&&"geom"in e&&"render"in e,ue=e=>{const t=(0,y.resolveDefinition)(e);return t instanceof y.Geom?t:null},J=(e,t)=>{const r=e.filter(s=>me(s,t));return r.length===e.length?e:r},me=(e,t)=>e.kind!=="annotation"?!0:(0,y.findAnnotation)(t.annotations,e.id)!==null,F=[],he=()=>(0,O.createStore)(e=>({selection:F,setSelection:t=>e(r=>ge(r.selection,t)?r:{selection:t}),clearSelection:()=>e(t=>t.selection.length===0?t:{selection:F})})),ge=(e,t)=>e===t?!0:e.length!==t.length?!1:e.every((r,s)=>{const o=t[s];return o!==void 0&&(0,y.areEditTargetsEqual)(r,o)}),pe=5,fe=e=>{if(!z.IS_DEV)return{emit:()=>{},subscribe:()=>ye,getLastTrigger:()=>null,getLastCompile:()=>null,getCacheStats:()=>e.getCacheStats()};const t=new Set;let r=null;return{emit:s=>{const o=e.getLastCompile();if(o){r=s;for(const d of t)d(s,o)}},subscribe:s=>(t.add(s),()=>{t.delete(s)}),getLastTrigger:()=>r,getLastCompile:()=>e.getLastCompile(),getCacheStats:()=>e.getCacheStats()}},ve=()=>(0,O.createStore)(e=>({lastCompile:null,history:[],nextId:1,lastSnapshot:null,recordCompile:(t,r)=>e(s=>{if(s.lastSnapshot===r)return s;const o={id:s.nextId,label:Se(t),stages:r.stages,durationMs:r.durationMs};return{lastCompile:o,history:be(s.history,o,pe),nextId:s.nextId+1,lastSnapshot:r}})})),ye=()=>{},Se=e=>{switch(e.kind){case"init":return"init";case"input":return"input change";case"data":return"data change";case"command":return e.command.metadata.description}},be=(e,t,r)=>{const s=e.length>=r?e.length-(r-1):0;return[...e.slice(s),t]};function Ee(e){const t=e.filter(Q),r=new Set([...Object.keys(l.BUILT_IN_GEOM_RENDERERS),...t.map(u=>u.geom)]),s=[],o=new Set;for(const u of e){const m=ue(u);m===null||r.has(m.type)||o.has(m.type)||(o.add(m.type),s.push({kind:"user-input",severity:"error",code:"MISSING_GEOM_RENDERER",message:`Custom geom '${m.type}' is registered but has no renderer.`,context:{requested:m.type,kind:"geom-renderer"},suggestion:`Add a render half for it: \`defineGeomRenderer(${m.type}Geom, { coord, render })\`, then include it in \`plugins\`.`}))}const d=new Map;for(const u of t){if("definition"in u)continue;const m=`${u.geom}|${u.coord}`,f=d.get(m);f?f.count+=1:d.set(m,{geom:u.geom,coord:u.coord,count:1})}const i=[];for(const{geom:u,coord:m,count:f}of d.values())f<2||i.push({kind:"user-input",severity:"warning",code:"DUPLICATE_REGISTERED_TYPE",message:`Multiple render-only overrides register ('${u}', '${m}') (${f} entries); the last in the array wins.`,context:{requested:`${u}@${m}`,kind:"geom-renderer"},suggestion:`Keep a single render-only override for ('${u}', '${m}').`});return{errors:s,warnings:i}}function Ce(e,t){const{coordSystem:r,layers:s}=e,o=new Set,d=[];for(const i of s)t(i.geom,r.type)!==null||o.has(i.geom)||(o.add(i.geom),d.push({kind:"user-input",severity:"warning",code:"MISSING_GEOM_RENDERER",message:`No renderer for geom '${i.geom}' under ${r.type} coords; the layer is not painted.`,context:{requested:i.geom,kind:"geom-renderer"},suggestion:`Register a renderer for ('${i.geom}', '${r.type}') via \`defineGeomRenderer\`.`}));return d}function xe(e,t){const{coordSystem:r,layers:s}=e,o=new Set,d=[];for(const i of s){if(i.interactive===!1||i.spatialKind!=="render-hit-test"||o.has(i.geom))continue;const u=t(i.geom,r.type);u===null||u.hitTest||l.isOverlayHosted(u)||(o.add(i.geom),d.push({kind:"user-input",severity:"warning",code:"MISSING_RENDER_HIT_TEST",message:`Geom '${i.geom}' declares spatialKind 'render-hit-test' but its renderer provides no hit-test; the layer has no hover.`,context:{requested:i.geom,kind:"geom-renderer"},suggestion:`Add a \`hitTest\` factory (precomputed geometry) or an overlay render (\`{ fn, options: { overlay: true } }\`, live simulation) to the renderer for ('${i.geom}', '${r.type}').`}))}return d}function Te(e){const t=new Set,r=[];for(const s of e.layers){const o=s.identityKey;s.interactive!==!1&&(s.spatialKind!=="render-hit-test"||typeof o!="object"||t.has(s.geom)||s.data.hasVariable(o.variable)||(t.add(s.geom),r.push({kind:"user-input",severity:"warning",code:"RENDER_HIT_TEST_IDENTITY",message:`Geom '${s.geom}' keys its identity on '${o.variable}', a column its compile output does not emit; its hover lookup is empty.`,context:{requested:s.geom,kind:"geom-renderer"},suggestion:`Emit the '${o.variable}' column from the geom's \`compile()\`, or point \`identityKey\` at a column it does emit.`})))}return r}function Re(e,t){const{coordSystem:r,layers:s}=e,o=new Set,d=[];for(const i of s){if(i.interactive===!1||i.spatialKind!=="render-hit-test"||o.has(i.geom))continue;const u=t(i.geom,r.type);u===null||!u.hitTest||!l.isOverlayHosted(u)||(o.add(i.geom),d.push({kind:"user-input",severity:"warning",code:"CONFLICTING_RENDER_HIT_TEST",message:`Geom '${i.geom}' declares both a \`hitTest\` factory and an overlay render; these are alternatives, so only the overlay is used.`,context:{requested:i.geom,kind:"geom-renderer"},suggestion:"Keep one: a `hitTest` factory for precomputed geometry, OR an overlay render (`{ fn, options: { overlay: true } }`) for a live simulation."}))}return d}function qe(e,t){const r=new Set,s=[];for(const o of e.layers)o.interactive!==!1&&(o.spatialKind!=="render-hit-test"||r.has(o.geom)||t.hasCapability(o.geom)||(r.add(o.geom),s.push({kind:"user-input",severity:"warning",code:"MISSING_ANCHOR_CAPABILITY",message:`Geom '${o.geom}' declares no \`resolveAnchorPosition\`; its observations cannot be annotated, so the editor overlay paints no creation trigger on them.`,context:{requested:o.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 s}function Ge(e,t){const{coordSystem:r,layers:s}=e,o=new Set,d=[];for(const i of s){if(i.interactive===!1||i.spatialKind==="render-hit-test"||o.has(i.geom))continue;const u=t(i.geom,r.type);u===null||!l.isOverlayHosted(u)||(o.add(i.geom),d.push({kind:"user-input",severity:"warning",code:"OVERLAY_REQUIRES_RENDER_HIT_TEST",message:`Geom '${i.geom}' declares an overlay render but its layer's spatialKind is '${i.spatialKind}', not 'render-hit-test'; the overlay's push-path hover resolves to nothing.`,context:{requested:i.geom,kind:"geom-renderer"},suggestion:"Have the geom's manifest yield spatialKind 'render-hit-test' so the compiled layer carries the `byKey` index the overlay's `pushHover` resolves against."}))}return d}var ke=e=>(0,O.createStore)(t=>({compiled:e,setCompiled:r=>t(s=>s.compiled===r?s:{compiled:r})})),Ne=({input:e,data:t,customPalettes:r,colorScheme:s,plugins:o,resolveRenderer:d,anchorResolver:i,onChange:u,onError:m,onWarnings:f})=>{const x=l.useLatestRef(u),j=l.useLatestRef(m),q=l.useLatestRef(f),[{session:p,compileBus:h}]=(0,c.useState)(()=>{const n=(0,y.createCompiler)({plugins:o});return{session:new y.GraphCompilationSession(n),compileBus:fe(n)}}),[g]=(0,c.useState)(()=>Ee(o??[])),S=(0,c.useRef)(null),[k]=(0,c.useState)(je),T=(0,c.useRef)(null),b=(0,c.useCallback)(n=>g.errors.length===0?n:[...g.errors,...n??[]],[g]),_=(0,c.useCallback)(n=>{if(!n.ok)return n.errors;if(T.current)T.current.getState().setCompiled(n.compiled);else{const v=ke(n.compiled);v.subscribe(k.notify),T.current=v,k.notify()}return null},[k]),[I,D]=(0,c.useState)(()=>{const n=p.compile({input:e,data:t,customPalettes:r,colorScheme:s});return S.current=n,b(_(n))}),G=(0,c.useCallback)(n=>n.ok?[...n.warnings,...Ce(n.compiled,d),...xe(n.compiled,d),...Te(n.compiled),...Re(n.compiled,d),...Ge(n.compiled,d),...qe(n.compiled,i)]:n.warnings,[d,i]),E=(0,c.useCallback)(n=>{n.length!==0&&(L(n),j.current?.(n))},[j]),R=(0,c.useCallback)(n=>{n.length!==0&&(L(n),q.current?.(n))},[q]);(0,c.useEffect)(()=>{const n=S.current;n&&(E([...g.errors,...n.ok?[]:n.errors]),R([...g.warnings,...G(n)]),n.ok&&h.emit({kind:"init"}))},[h,E,R,g,G]),(0,c.useEffect)(()=>{const n=p.update({input:e,data:t,customPalettes:r,colorScheme:s});if(!n)return;n.sealedInput&&x.current?.(n.sealedInput);const v=_(n.result);D(b(v)),v&&E(v),R(G(n.result)),v||h.emit({kind:n.inputChanged?"input":"data"})},[e,t,r,s,p,h,_,E,R,b,G,x]);const N=(0,c.useCallback)(n=>{D(v=>v===null?v:b(null)),R(G(n))},[b,R,G]),w=(0,c.useCallback)(n=>{n.compiled&&T.current?.getState().setCompiled(n.compiled),n.result&&N(n.result),n.command&&h.emit({kind:"command",command:n.command}),n.input&&x.current?.(n.input),n.errors&&E([...n.errors])},[N,h,x,E]),C=(0,c.useCallback)(n=>{for(const v of n)w(v);return n.some(v=>!!v.compiled)},[w]),M=(0,c.useCallback)((n,v)=>{C(p.applyCommand(n,v))},[p,C]),re=(0,c.useCallback)(()=>{C(p.seal())},[p,C]),B=(0,c.useCallback)(()=>C(p.undo()),[p,C]),A=(0,c.useCallback)(()=>C(p.redo()),[p,C]),se=(0,c.useMemo)(()=>({stack:p.history,undo:B,redo:A}),[p,B,A]),ne=(0,c.useCallback)(()=>T.current?.getState().compiled??null,[]);return{store:T.current,dispatch:M,seal:re,history:se,subscribe:k.subscribe,getCompiled:ne,compileBus:h,compileErrors:I}},je=()=>{const e=new Set;return{subscribe:t=>(e.add(t),()=>{e.delete(t)}),notify:()=>e.forEach(t=>t())}},_e={},Z=({data:e,input:t,plugins:r=[],formattingLocale:s,handleRef:o,onChange:d,onError:i,onWarnings:u,customPalettes:m,colorScheme:f="light",themeOverrides:x=_e,children:j})=>{const[q]=(0,c.useState)(()=>l.createGeomRendererResolver(r.filter(Q))),p=(0,c.useId)(),[h]=(0,c.useState)(()=>(0,y.createAnchorResolver)(r)),[g]=(0,c.useState)(()=>he()),{store:S,dispatch:k,seal:T,history:b,subscribe:_,getCompiled:I,compileBus:D,compileErrors:G}=Ne({input:t,data:e,customPalettes:m,colorScheme:f,plugins:r,resolveRenderer:q,anchorResolver:h,onChange:d,onError:i,onWarnings:u});(0,c.useEffect)(()=>{if(S)return S.subscribe((N,w)=>{if(N.compiled.spec===w.compiled.spec)return;const{selection:C,setSelection:M}=g.getState();C.length!==0&&M(J(C,N.compiled.spec))})},[S,g]);const E=(0,c.useMemo)(()=>({dispatch:k,seal:T}),[k,T]);(0,c.useImperativeHandle)(o,()=>({commands:E,undo:b.undo,redo:b.redo,subscribe:_,getCompiled:I,getSelection:()=>g.getState().selection,setSelection:N=>g.getState().setSelection(N),subscribeSelection:g.subscribe}),[E,b,_,I,g]);const R=(0,c.useMemo)(()=>S?{chartId:p,store:S,selectionStore:g,commands:E,history:b,formattingLocale:s,compileBus:D,colorScheme:f,themeOverrides:x,anchorResolver:h}:null,[p,S,g,E,b,s,D,f,x,h]);return(0,a.jsx)(X,{forcedErrors:G,onError:i,resetKeys:[t,e],children:R?(0,a.jsx)(l.GraphContext.Provider,{value:R,children:(0,a.jsx)(l.GeomRendererResolverProvider,{value:q,children:j})}):null})};function De(e){const t=(0,y.createGraphyBuilder)(e);return{...t,GraphProvider:s=>(0,a.jsx)(Z,{...s,plugins:t.plugins})}}var Ie=({children:e,...t})=>(0,a.jsx)("svg",{viewBox:"0 0 1 1",preserveAspectRatio:"none",width:"100%",height:"100%",pointerEvents:"none",...t,children:e}),we="drqe3u0",He="drqe3u1",Me="drqe3u2",$e="drqe3u3",H="drqe3u4",Pe="drqe3u5",Le="drqe3u6",Ke="drqe3u7",$="drqe3u8",Oe="drqe3u9",Be="drqe3ua";var Ae="drqe3uc",Ye="drqe3ud",Ue="drqe3ue",Fe="drqe3uf";var Ve="drqe3uh",We="drqe3ui",V={enabled:"drqe3uk drqe3uj",disabled:"drqe3ul drqe3uj"},W={ran:"drqe3un drqe3um",dim:"drqe3uo drqe3um"},ee={ran:"drqe3uq drqe3up",cached:"drqe3ur drqe3up",untouched:"drqe3us drqe3up"},ze=({width:e=380,style:t,className:r}={})=>{const{compileBus:s}=l.useGraphContext(),[o]=(0,c.useState)(()=>ve()),[d,i]=(0,c.useState)(!1),[u,m]=(0,c.useState)(y.isCompilerCachingEnabled);(0,c.useEffect)(()=>{const{recordCompile:h}=o.getState(),g=s.getLastTrigger(),S=s.getLastCompile();return g&&S&&h(g,S),s.subscribe(h)},[o,s]);const f=(0,Y.useStore)(o,h=>h.lastCompile),x=(0,Y.useStore)(o,h=>h.history),j=s.getCacheStats(),q=f===null&&x.length===0,p=()=>{m(h=>{const g=!h;return(0,y.setCompilerCachingEnabled)(g),g})};return(0,a.jsxs)("div",{className:(0,P.default)(Be,r),style:{width:e,...t},children:[(0,a.jsxs)("div",{className:we,children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("div",{className:He,children:"compile cache"}),(0,a.jsx)("div",{className:Ue,children:q?"production: stats disabled":f?`last: ${f.label} · ${te(f.durationMs)}`:"awaiting first compile…"})]}),(0,a.jsx)("button",{type:"button",onClick:()=>i(h=>!h),className:Fe,children:d?"▾":"▴"})]}),!d&&(0,a.jsxs)("div",{className:"drqe3ub",children:[(0,a.jsxs)("button",{type:"button",onClick:p,className:u?V.enabled:V.disabled,"aria-pressed":u,children:["cache ",u?"enabled":"disabled"]}),(0,a.jsx)("span",{className:"drqe3ug",children:"next compile reflects this toggle"})]}),!d&&!q&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(Xe,{delta:f?.stages,cumulative:j}),(0,a.jsx)(Qe,{entries:x})]})]})},Xe=({delta:e,cumulative:t})=>(0,a.jsxs)("table",{className:Me,children:[(0,a.jsx)("thead",{children:(0,a.jsxs)("tr",{className:Ve,children:[(0,a.jsx)("th",{className:$e,children:"stage"}),(0,a.jsx)("th",{className:H,children:"Δ miss"}),(0,a.jsx)("th",{className:H,children:"Δ hit"}),(0,a.jsx)("th",{className:H,children:"total miss"}),(0,a.jsx)("th",{className:H,children:"total hit"})]})}),(0,a.jsx)("tbody",{children:y.COMPILER_STAGE_KEYS.map(r=>{const s=e?.[r],o=Je(s);return(0,a.jsxs)("tr",{className:Ae,children:[(0,a.jsxs)("td",{className:Pe,children:[(0,a.jsx)("span",{className:ee[o],"aria-hidden":!0})," ",r]}),(0,a.jsx)("td",{className:o==="ran"?W.ran:W.dim,children:s?.misses??0}),(0,a.jsx)("td",{className:$,children:s?.hits??0}),(0,a.jsx)("td",{className:$,children:t[r].misses}),(0,a.jsx)("td",{className:$,children:t[r].hits})]},r)})})]}),Qe=({entries:e})=>e.length===0?null:(0,a.jsxs)("div",{className:Ye,children:[(0,a.jsx)("div",{className:We,children:"recent compiles"}),e.map(t=>{const r=Ze(t.stages,d=>d.misses>0),s=y.COMPILER_STAGE_KEYS.length,o=r===0?"cached":"ran";return(0,a.jsxs)("div",{className:Le,children:[(0,a.jsx)("span",{className:ee[o],"aria-hidden":!0}),(0,a.jsx)("span",{className:Ke,title:t.label,children:t.label}),(0,a.jsxs)("span",{className:Oe,children:[r,"/",s," ran · ",te(t.durationMs)]})]},t.id)})]}),Je=e=>!e||e.hits===0&&e.misses===0?"untouched":e.misses>0?"ran":"cached",Ze=(e,t)=>{let r=0;for(const s of y.COMPILER_STAGE_KEYS)t(e[s])&&(r+=1);return r},te=e=>e>=10?`${e.toFixed(0)}ms`:`${e.toFixed(2)}ms`,et=()=>{const{history:e}=l.useGraphContext(),{stack:t,undo:r,redo:s}=e,o=(0,c.useCallback)(u=>t.subscribe(u),[t]),d=(0,c.useCallback)(()=>t.getSnapshot(),[t]),i=(0,c.useSyncExternalStore)(o,d,d);return(0,c.useMemo)(()=>({...i,undo:r,redo:s}),[i,r,s])},tt=new Set(["button","checkbox","color","file","hidden","image","radio","range","reset","submit"]),rt=(e,t={})=>{const{target:r,enabled:s=!0}=t;(0,c.useEffect)(()=>{const o=st(r);if(!s||!o)return;const d=i=>{if(!nt(i)||i.defaultPrevented||ot(i.target))return;const u=l.resolveHistoryStep(i);if(!u)return;const m=e.current;m&&(u==="undo"?m.undo():m.redo())&&i.preventDefault()};return o.addEventListener("keydown",d),()=>o.removeEventListener("keydown",d)},[e,r,s])},st=e=>e===void 0?window:e!==null&&"current"in e?e.current:e,nt=e=>"key"in e,ot=e=>e instanceof HTMLInputElement?!tt.has(e.type):e instanceof HTMLElement?e.isContentEditable||e.tagName==="TEXTAREA":!1;exports.BrandMark=l.BrandMark;exports.CanvasTextMeasurer=l.CanvasTextMeasurer;exports.DefaultFooter=l.DefaultFooter;exports.DefaultGrid=l.DefaultGrid;exports.DefaultHeader=l.DefaultHeader;exports.DefaultSwatch=l.DefaultSwatch;exports.DefaultTooltip=l.DefaultTooltip;exports.DevToolsPanel=ze;exports.GraphErrorBoundary=X;exports.GraphErrorPanel=K;exports.GraphProvider=Z;exports.GraphRenderer=l.GraphRenderer;exports.HoverProvider=l.HoverProvider;exports.TextMeasurerProvider=l.TextMeasurerProvider;exports.ThemeProvider=l.ThemeProvider;exports.UnitSpaceSvg=Ie;exports.createGraphyKit=De;exports.darkTheme=l.darkTheme;exports.defineGeomRenderer=l.defineGeomRenderer;exports.lightTheme=l.lightTheme;exports.lightenCss=l.lightenCss;exports.pruneSelection=J;exports.resolveBrandMarkVisual=l.resolveBrandMarkVisual;exports.useCompiledSelector=l.useCompiledSelector;exports.useElementScreenRect=l.useElementScreenRect;exports.useGeomHitTest=l.useGeomHitTest;exports.useGeomHover=l.useGeomHover;exports.useGraphCommands=l.useGraphCommands;exports.useGraphHandle=l.useGraphHandle;exports.useGraphHistory=et;exports.useGraphHistoryShortcuts=rt;exports.useGraphSelection=l.useGraphSelection;exports.useHandleCompiled=l.useHandleCompiled;exports.useHoverState=l.useHoverState;exports.useStyleReaders=l.useStyleReaders;exports.useTextMeasurer=l.useTextMeasurer;exports.vars=z.vars;
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require('./index.css');const c=require("./history-chords-lLtDj1lQ.cjs"),z=require("./dev.utils-C5W6wbHd.cjs");let p=require("@graphysdk/viz-engine"),l=require("react"),i=require("react/jsx-runtime"),U=require("zustand"),K=require("zustand/vanilla"),$=require("clsx");$=c.__toESM($,1);function L(e){for(const t of e)(t.severity==="error"?console.error:console.warn)(`[graphy] ${t.code}: ${t.message}`,t)}var oe="_1a5iqpb0",ie="_1a5iqpb1";var ae="_1a5iqpb3",ce="_1a5iqpb4",le="_1a5iqpb5";var B=({errors:e})=>{const[t,...r]=e;return(0,i.jsxs)("div",{role:"alert",className:oe,children:[(0,i.jsx)("strong",{className:ie,children:"This chart could not be rendered."}),t&&(0,i.jsx)(Y,{diagnostic:t}),r.length>0&&(0,i.jsx)("ul",{className:"_1a5iqpb2",children:r.map((s,o)=>(0,i.jsx)("li",{children:(0,i.jsx)(Y,{diagnostic:s})},`${s.code}-${o}`))})]})},Y=({diagnostic:e})=>(0,i.jsxs)("div",{className:ae,children:[(0,i.jsx)("span",{className:ce,children:e.code}),(0,i.jsx)("p",{className:le,children:e.message}),e.suggestion&&(0,i.jsx)("p",{className:"_1a5iqpb6",children:e.suggestion})]});function de(e=[],t=[]){return e.length===t.length&&e.every((r,s)=>Object.is(r,t[s]))}var X=class extends l.Component{constructor(...e){super(...e),this.state={caughtDiagnostic:null}}static getDerivedStateFromError(e){return{caughtDiagnostic:(0,p.buildDiagnostic)(e)}}componentDidCatch(e,t){const r=(0,p.buildDiagnostic)(e);L([r]),this.props.onError?.([r]),console.error("Chart render component stack:",t.componentStack)}componentDidUpdate(e){this.state.caughtDiagnostic&&!de(e.resetKeys,this.props.resetKeys)&&this.setState({caughtDiagnostic:null})}render(){const{caughtDiagnostic:e}=this.state;if(e)return(0,i.jsx)(B,{errors:[e]});const{forcedErrors:t,children:r}=this.props;return t&&t.length>0?(0,i.jsx)(B,{errors:t}):r}},Q=e=>typeof e=="object"&&"geom"in e&&"render"in e,ue=e=>{const t=(0,p.resolveDefinition)(e);return t instanceof p.Geom?t:null},J=(e,t)=>{const r=e.filter(s=>me(s,t));return r.length===e.length?e:r},me=(e,t)=>e.kind!=="annotation"?!0:(0,p.findAnnotation)(t.annotations,e.id)!==null,F=[],he=()=>(0,K.createStore)(e=>({selection:F,setSelection:t=>e(r=>ge(r.selection,t)?r:{selection:t}),clearSelection:()=>e(t=>t.selection.length===0?t:{selection:F})})),ge=(e,t)=>e===t?!0:e.length!==t.length?!1:e.every((r,s)=>{const o=t[s];return o!==void 0&&(0,p.areEditTargetsEqual)(r,o)}),pe=5,fe=e=>{if(!z.IS_DEV)return{emit:()=>{},subscribe:()=>ye,getLastTrigger:()=>null,getLastCompile:()=>null,getCacheStats:()=>e.getCacheStats()};const t=new Set;let r=null;return{emit:s=>{const o=e.getLastCompile();if(o){r=s;for(const d of t)d(s,o)}},subscribe:s=>(t.add(s),()=>{t.delete(s)}),getLastTrigger:()=>r,getLastCompile:()=>e.getLastCompile(),getCacheStats:()=>e.getCacheStats()}},ve=()=>(0,K.createStore)(e=>({lastCompile:null,history:[],nextId:1,lastSnapshot:null,recordCompile:(t,r)=>e(s=>{if(s.lastSnapshot===r)return s;const o={id:s.nextId,label:Se(t),stages:r.stages,durationMs:r.durationMs};return{lastCompile:o,history:be(s.history,o,pe),nextId:s.nextId+1,lastSnapshot:r}})})),ye=()=>{},Se=e=>{switch(e.kind){case"init":return"init";case"input":return"input change";case"data":return"data change";case"command":return e.command.metadata.description}},be=(e,t,r)=>{const s=e.length>=r?e.length-(r-1):0;return[...e.slice(s),t]};function Ee(e){const t=e.filter(Q),r=new Set([...Object.keys(c.BUILT_IN_GEOM_RENDERERS),...t.map(u=>u.geom)]),s=[],o=new Set;for(const u of e){const m=ue(u);m===null||r.has(m.type)||o.has(m.type)||(o.add(m.type),s.push({kind:"user-input",severity:"error",code:"MISSING_GEOM_RENDERER",message:`Custom geom '${m.type}' is registered but has no renderer.`,context:{requested:m.type,kind:"geom-renderer"},suggestion:`Add a render half for it: \`defineGeomRenderer(${m.type}Geom, { coord, render })\`, then include it in \`plugins\`.`}))}const d=new Map;for(const u of t){if("definition"in u)continue;const m=`${u.geom}|${u.coord}`,v=d.get(m);v?v.count+=1:d.set(m,{geom:u.geom,coord:u.coord,count:1})}const a=[];for(const{geom:u,coord:m,count:v}of d.values())v<2||a.push({kind:"user-input",severity:"warning",code:"DUPLICATE_REGISTERED_TYPE",message:`Multiple render-only overrides register ('${u}', '${m}') (${v} entries); the last in the array wins.`,context:{requested:`${u}@${m}`,kind:"geom-renderer"},suggestion:`Keep a single render-only override for ('${u}', '${m}').`});return{errors:s,warnings:a}}function Ce(e,t){const{coordSystem:r,layers:s}=e,o=new Set,d=[];for(const a of s)t(a.geom,r.type)!==null||o.has(a.geom)||(o.add(a.geom),d.push({kind:"user-input",severity:"warning",code:"MISSING_GEOM_RENDERER",message:`No renderer for geom '${a.geom}' under ${r.type} coords; the layer is not painted.`,context:{requested:a.geom,kind:"geom-renderer"},suggestion:`Register a renderer for ('${a.geom}', '${r.type}') via \`defineGeomRenderer\`.`}));return d}function xe(e,t){const{coordSystem:r,layers:s}=e,o=new Set,d=[];for(const a of s){if(a.interactive===!1||a.spatialKind!=="render-hit-test"||o.has(a.geom))continue;const u=t(a.geom,r.type);u===null||u.hitTest||c.isOverlayHosted(u)||(o.add(a.geom),d.push({kind:"user-input",severity:"warning",code:"MISSING_RENDER_HIT_TEST",message:`Geom '${a.geom}' declares spatialKind 'render-hit-test' but its renderer provides no hit-test; the layer has no hover.`,context:{requested:a.geom,kind:"geom-renderer"},suggestion:`Add a \`hitTest\` factory (precomputed geometry) or an overlay render (\`{ fn, options: { overlay: true } }\`, live simulation) to the renderer for ('${a.geom}', '${r.type}').`}))}return d}function Te(e){const t=new Set,r=[];for(const s of e.layers){const o=s.identityKey;s.interactive!==!1&&(s.spatialKind!=="render-hit-test"||typeof o!="object"||t.has(s.geom)||s.data.hasVariable(o.variable)||(t.add(s.geom),r.push({kind:"user-input",severity:"warning",code:"RENDER_HIT_TEST_IDENTITY",message:`Geom '${s.geom}' keys its identity on '${o.variable}', a column its compile output does not emit; its hover lookup is empty.`,context:{requested:s.geom,kind:"geom-renderer"},suggestion:`Emit the '${o.variable}' column from the geom's \`compile()\`, or point \`identityKey\` at a column it does emit.`})))}return r}function Re(e,t){const{coordSystem:r,layers:s}=e,o=new Set,d=[];for(const a of s){if(a.interactive===!1||a.spatialKind!=="render-hit-test"||o.has(a.geom))continue;const u=t(a.geom,r.type);u===null||!u.hitTest||!c.isOverlayHosted(u)||(o.add(a.geom),d.push({kind:"user-input",severity:"warning",code:"CONFLICTING_RENDER_HIT_TEST",message:`Geom '${a.geom}' declares both a \`hitTest\` factory and an overlay render; these are alternatives, so only the overlay is used.`,context:{requested:a.geom,kind:"geom-renderer"},suggestion:"Keep one: a `hitTest` factory for precomputed geometry, OR an overlay render (`{ fn, options: { overlay: true } }`) for a live simulation."}))}return d}function qe(e,t){const r=new Set,s=[];for(const o of e.layers)o.interactive!==!1&&(o.spatialKind!=="render-hit-test"||r.has(o.geom)||t.hasCapability(o.geom)||(r.add(o.geom),s.push({kind:"user-input",severity:"warning",code:"MISSING_ANCHOR_CAPABILITY",message:`Geom '${o.geom}' declares no \`resolveAnchorPosition\`; its observations cannot be annotated, so the editor overlay paints no creation trigger on them.`,context:{requested:o.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 s}function Ge(e,t){const{coordSystem:r,layers:s}=e,o=new Set,d=[];for(const a of s){if(a.interactive===!1||a.spatialKind==="render-hit-test"||o.has(a.geom))continue;const u=t(a.geom,r.type);u===null||!c.isOverlayHosted(u)||(o.add(a.geom),d.push({kind:"user-input",severity:"warning",code:"OVERLAY_REQUIRES_RENDER_HIT_TEST",message:`Geom '${a.geom}' declares an overlay render but its layer's spatialKind is '${a.spatialKind}', not 'render-hit-test'; the overlay's push-path hover resolves to nothing.`,context:{requested:a.geom,kind:"geom-renderer"},suggestion:"Have the geom's manifest yield spatialKind 'render-hit-test' so the compiled layer carries the `byKey` index the overlay's `pushHover` resolves against."}))}return d}var ke=e=>(0,K.createStore)(t=>({compiled:e,setCompiled:r=>t(s=>s.compiled===r?s:{compiled:r})})),Ne=({input:e,data:t,customPalettes:r,colorScheme:s,plugins:o,resolveRenderer:d,anchorResolver:a,onChange:u,onError:m,onWarnings:v})=>{const x=c.useLatestRef(u),j=c.useLatestRef(m),q=c.useLatestRef(v),[{session:f,compileBus:h}]=(0,l.useState)(()=>{const n=(0,p.createCompiler)({plugins:o});return{session:new p.GraphCompilationSession(n),compileBus:fe(n)}}),[g]=(0,l.useState)(()=>Ee(o??[])),S=(0,l.useRef)(null),[k]=(0,l.useState)(je),T=(0,l.useRef)(null),b=(0,l.useCallback)(n=>g.errors.length===0?n:[...g.errors,...n??[]],[g]),_=(0,l.useCallback)(n=>{if(!n.ok)return n.errors;if(T.current)T.current.getState().setCompiled(n.compiled);else{const y=ke(n.compiled);y.subscribe(k.notify),T.current=y,k.notify()}return null},[k]),[D,w]=(0,l.useState)(()=>{const n=f.compile({input:e,data:t,customPalettes:r,colorScheme:s});return S.current=n,b(_(n))}),G=(0,l.useCallback)(n=>n.ok?[...n.warnings,...Ce(n.compiled,d),...xe(n.compiled,d),...Te(n.compiled),...Re(n.compiled,d),...Ge(n.compiled,d),...qe(n.compiled,a)]:n.warnings,[d,a]),E=(0,l.useCallback)(n=>{n.length!==0&&(L(n),j.current?.(n))},[j]),R=(0,l.useCallback)(n=>{n.length!==0&&(L(n),q.current?.(n))},[q]);(0,l.useEffect)(()=>{const n=S.current;n&&(E([...g.errors,...n.ok?[]:n.errors]),R([...g.warnings,...G(n)]),n.ok&&h.emit({kind:"init"}))},[h,E,R,g,G]),(0,l.useEffect)(()=>{const n=f.update({input:e,data:t,customPalettes:r,colorScheme:s});if(!n)return;n.sealedInput&&x.current?.(n.sealedInput);const y=_(n.result);w(b(y)),y&&E(y),R(G(n.result)),y||h.emit({kind:n.inputChanged?"input":"data"})},[e,t,r,s,f,h,_,E,R,b,G,x]);const N=(0,l.useCallback)(n=>{w(y=>y===null?y:b(null)),R(G(n))},[b,R,G]),I=(0,l.useCallback)(n=>{n.compiled&&T.current?.getState().setCompiled(n.compiled),n.result&&N(n.result),n.command&&h.emit({kind:"command",command:n.command}),n.input&&x.current?.(n.input),n.errors&&E([...n.errors])},[N,h,x,E]),C=(0,l.useCallback)(n=>{for(const y of n)I(y);return n.some(y=>!!y.compiled)},[I]),M=(0,l.useCallback)((n,y)=>{C(f.applyCommand(n,y))},[f,C]),re=(0,l.useCallback)(()=>{C(f.seal())},[f,C]),O=(0,l.useCallback)(()=>C(f.undo()),[f,C]),A=(0,l.useCallback)(()=>C(f.redo()),[f,C]),se=(0,l.useMemo)(()=>({stack:f.history,undo:O,redo:A}),[f,O,A]),ne=(0,l.useCallback)(()=>T.current?.getState().compiled??null,[]);return{store:T.current,dispatch:M,seal:re,history:se,subscribe:k.subscribe,getCompiled:ne,compileBus:h,compileErrors:D}},je=()=>{const e=new Set;return{subscribe:t=>(e.add(t),()=>{e.delete(t)}),notify:()=>e.forEach(t=>t())}},_e={},Z=({data:e,input:t,plugins:r=[],formattingLocale:s,handleRef:o,onChange:d,onError:a,onWarnings:u,customPalettes:m,colorScheme:v="light",themeOverrides:x=_e,children:j})=>{const[q]=(0,l.useState)(()=>c.createGeomRendererResolver(r.filter(Q))),f=(0,l.useId)(),[h]=(0,l.useState)(()=>(0,p.createAnchorResolver)(r)),[g]=(0,l.useState)(()=>he()),{store:S,dispatch:k,seal:T,history:b,subscribe:_,getCompiled:D,compileBus:w,compileErrors:G}=Ne({input:t,data:e,customPalettes:m,colorScheme:v,plugins:r,resolveRenderer:q,anchorResolver:h,onChange:d,onError:a,onWarnings:u});(0,l.useEffect)(()=>{if(S)return S.subscribe((N,I)=>{if(N.compiled.spec===I.compiled.spec)return;const{selection:C,setSelection:M}=g.getState();C.length!==0&&M(J(C,N.compiled.spec))})},[S,g]);const E=(0,l.useMemo)(()=>({dispatch:k,seal:T}),[k,T]);(0,l.useImperativeHandle)(o,()=>({commands:E,undo:b.undo,redo:b.redo,subscribe:_,getCompiled:D,getSelection:()=>g.getState().selection,setSelection:N=>g.getState().setSelection(N),subscribeSelection:g.subscribe}),[E,b,_,D,g]);const R=(0,l.useMemo)(()=>S?{chartId:f,store:S,selectionStore:g,commands:E,history:b,formattingLocale:s,compileBus:w,colorScheme:v,themeOverrides:x,anchorResolver:h}:null,[f,S,g,E,b,s,w,v,x,h]);return(0,i.jsx)(X,{forcedErrors:G,onError:a,resetKeys:[t,e],children:R?(0,i.jsx)(c.GraphContext.Provider,{value:R,children:(0,i.jsx)(c.GeomRendererResolverProvider,{value:q,children:j})}):null})};function we(e){const t=(0,p.createGraphyBuilder)(e);return{...t,GraphProvider:s=>(0,i.jsx)(Z,{...s,plugins:t.plugins})}}var De=({children:e,...t})=>(0,i.jsx)("svg",{viewBox:"0 0 1 1",preserveAspectRatio:"none",width:"100%",height:"100%",pointerEvents:"none",...t,children:e}),Ie=({box:e,children:t})=>(0,i.jsx)("svg",{x:(0,p.toPercent)(e.x0),y:(0,p.toPercent)(e.y0),width:(0,p.toPercent)(e.x1-e.x0),height:(0,p.toPercent)(e.y1-e.y0),overflow:"hidden",pointerEvents:"none",children:t}),He="drqe3u0",Me="drqe3u1",Pe="drqe3u2",$e="drqe3u3",H="drqe3u4",Le="drqe3u5",Be="drqe3u6",Ke="drqe3u7",P="drqe3u8",Oe="drqe3u9",Ae="drqe3ua";var Ue="drqe3uc",Ye="drqe3ud",Fe="drqe3ue",Ve="drqe3uf";var We="drqe3uh",ze="drqe3ui",V={enabled:"drqe3uk drqe3uj",disabled:"drqe3ul drqe3uj"},W={ran:"drqe3un drqe3um",dim:"drqe3uo drqe3um"},ee={ran:"drqe3uq drqe3up",cached:"drqe3ur drqe3up",untouched:"drqe3us drqe3up"},Xe=({width:e=380,style:t,className:r}={})=>{const{compileBus:s}=c.useGraphContext(),[o]=(0,l.useState)(()=>ve()),[d,a]=(0,l.useState)(!1),[u,m]=(0,l.useState)(p.isCompilerCachingEnabled);(0,l.useEffect)(()=>{const{recordCompile:h}=o.getState(),g=s.getLastTrigger(),S=s.getLastCompile();return g&&S&&h(g,S),s.subscribe(h)},[o,s]);const v=(0,U.useStore)(o,h=>h.lastCompile),x=(0,U.useStore)(o,h=>h.history),j=s.getCacheStats(),q=v===null&&x.length===0,f=()=>{m(h=>{const g=!h;return(0,p.setCompilerCachingEnabled)(g),g})};return(0,i.jsxs)("div",{className:(0,$.default)(Ae,r),style:{width:e,...t},children:[(0,i.jsxs)("div",{className:He,children:[(0,i.jsxs)("div",{children:[(0,i.jsx)("div",{className:Me,children:"compile cache"}),(0,i.jsx)("div",{className:Fe,children:q?"production: stats disabled":v?`last: ${v.label} · ${te(v.durationMs)}`:"awaiting first compile…"})]}),(0,i.jsx)("button",{type:"button",onClick:()=>a(h=>!h),className:Ve,children:d?"▾":"▴"})]}),!d&&(0,i.jsxs)("div",{className:"drqe3ub",children:[(0,i.jsxs)("button",{type:"button",onClick:f,className:u?V.enabled:V.disabled,"aria-pressed":u,children:["cache ",u?"enabled":"disabled"]}),(0,i.jsx)("span",{className:"drqe3ug",children:"next compile reflects this toggle"})]}),!d&&!q&&(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(Qe,{delta:v?.stages,cumulative:j}),(0,i.jsx)(Je,{entries:x})]})]})},Qe=({delta:e,cumulative:t})=>(0,i.jsxs)("table",{className:Pe,children:[(0,i.jsx)("thead",{children:(0,i.jsxs)("tr",{className:We,children:[(0,i.jsx)("th",{className:$e,children:"stage"}),(0,i.jsx)("th",{className:H,children:"Δ miss"}),(0,i.jsx)("th",{className:H,children:"Δ hit"}),(0,i.jsx)("th",{className:H,children:"total miss"}),(0,i.jsx)("th",{className:H,children:"total hit"})]})}),(0,i.jsx)("tbody",{children:p.COMPILER_STAGE_KEYS.map(r=>{const s=e?.[r],o=Ze(s);return(0,i.jsxs)("tr",{className:Ue,children:[(0,i.jsxs)("td",{className:Le,children:[(0,i.jsx)("span",{className:ee[o],"aria-hidden":!0})," ",r]}),(0,i.jsx)("td",{className:o==="ran"?W.ran:W.dim,children:s?.misses??0}),(0,i.jsx)("td",{className:P,children:s?.hits??0}),(0,i.jsx)("td",{className:P,children:t[r].misses}),(0,i.jsx)("td",{className:P,children:t[r].hits})]},r)})})]}),Je=({entries:e})=>e.length===0?null:(0,i.jsxs)("div",{className:Ye,children:[(0,i.jsx)("div",{className:ze,children:"recent compiles"}),e.map(t=>{const r=et(t.stages,d=>d.misses>0),s=p.COMPILER_STAGE_KEYS.length,o=r===0?"cached":"ran";return(0,i.jsxs)("div",{className:Be,children:[(0,i.jsx)("span",{className:ee[o],"aria-hidden":!0}),(0,i.jsx)("span",{className:Ke,title:t.label,children:t.label}),(0,i.jsxs)("span",{className:Oe,children:[r,"/",s," ran · ",te(t.durationMs)]})]},t.id)})]}),Ze=e=>!e||e.hits===0&&e.misses===0?"untouched":e.misses>0?"ran":"cached",et=(e,t)=>{let r=0;for(const s of p.COMPILER_STAGE_KEYS)t(e[s])&&(r+=1);return r},te=e=>e>=10?`${e.toFixed(0)}ms`:`${e.toFixed(2)}ms`,tt=()=>{const{history:e}=c.useGraphContext(),{stack:t,undo:r,redo:s}=e,o=(0,l.useCallback)(u=>t.subscribe(u),[t]),d=(0,l.useCallback)(()=>t.getSnapshot(),[t]),a=(0,l.useSyncExternalStore)(o,d,d);return(0,l.useMemo)(()=>({...a,undo:r,redo:s}),[a,r,s])},rt=new Set(["button","checkbox","color","file","hidden","image","radio","range","reset","submit"]),st=(e,t={})=>{const{target:r,enabled:s=!0}=t;(0,l.useEffect)(()=>{const o=nt(r);if(!s||!o)return;const d=a=>{if(!ot(a)||a.defaultPrevented||it(a.target))return;const u=c.resolveHistoryStep(a);if(!u)return;const m=e.current;m&&(u==="undo"?m.undo():m.redo())&&a.preventDefault()};return o.addEventListener("keydown",d),()=>o.removeEventListener("keydown",d)},[e,r,s])},nt=e=>e===void 0?window:e!==null&&"current"in e?e.current:e,ot=e=>"key"in e,it=e=>e instanceof HTMLInputElement?!rt.has(e.type):e instanceof HTMLElement?e.isContentEditable||e.tagName==="TEXTAREA":!1;exports.BrandMark=c.BrandMark;exports.CanvasTextMeasurer=c.CanvasTextMeasurer;exports.DefaultFooter=c.DefaultFooter;exports.DefaultGrid=c.DefaultGrid;exports.DefaultHeader=c.DefaultHeader;exports.DefaultSwatch=c.DefaultSwatch;exports.DefaultTooltip=c.DefaultTooltip;exports.DevToolsPanel=Xe;exports.GraphErrorBoundary=X;exports.GraphErrorPanel=B;exports.GraphProvider=Z;exports.GraphRenderer=c.GraphRenderer;exports.HoverProvider=c.HoverProvider;exports.TextMeasurerProvider=c.TextMeasurerProvider;exports.ThemeProvider=c.ThemeProvider;exports.UnitBoxSvg=Ie;exports.UnitSpaceSvg=De;exports.createGraphyKit=we;exports.darkTheme=c.darkTheme;exports.defineGeomRenderer=c.defineGeomRenderer;exports.lightTheme=c.lightTheme;exports.lightenCss=c.lightenCss;exports.pruneSelection=J;exports.resolveBrandMarkVisual=c.resolveBrandMarkVisual;exports.useCompiledSelector=c.useCompiledSelector;exports.useElementScreenRect=c.useElementScreenRect;exports.useGeomHitTest=c.useGeomHitTest;exports.useGeomHover=c.useGeomHover;exports.useGraphCommands=c.useGraphCommands;exports.useGraphHandle=c.useGraphHandle;exports.useGraphHistory=tt;exports.useGraphHistoryShortcuts=st;exports.useGraphSelection=c.useGraphSelection;exports.useHandleCompiled=c.useHandleCompiled;exports.useHoverState=c.useHoverState;exports.useStyleReaders=c.useStyleReaders;exports.useTextMeasurer=c.useTextMeasurer;exports.vars=z.vars;
|
package/dist/index.d.ts
CHANGED
|
@@ -1102,10 +1102,28 @@ export declare interface TooltipSlotProps {
|
|
|
1102
1102
|
content: TooltipContent;
|
|
1103
1103
|
}
|
|
1104
1104
|
|
|
1105
|
+
/** A unit-space rectangle (`[0, 1]²`, top-left origin) that {@link UnitBoxSvg} occupies. */
|
|
1106
|
+
export declare interface UnitBox {
|
|
1107
|
+
x0: number;
|
|
1108
|
+
y0: number;
|
|
1109
|
+
x1: number;
|
|
1110
|
+
y1: number;
|
|
1111
|
+
}
|
|
1112
|
+
|
|
1113
|
+
/**
|
|
1114
|
+
* A nested SVG over a unit-space box, placed in panel percentages, with no viewBox. Children live in the
|
|
1115
|
+
* box's own unscaled space (`50%` is the centre, a pixel radius is a pixel) and are clipped by the viewport.
|
|
1116
|
+
*/
|
|
1117
|
+
export declare const UnitBoxSvg: ({ box, children }: {
|
|
1118
|
+
box: UnitBox;
|
|
1119
|
+
children: ReactNode;
|
|
1120
|
+
}) => ReactNode;
|
|
1121
|
+
|
|
1105
1122
|
/**
|
|
1106
1123
|
* A nested SVG that establishes a `[0, 1]` unit coordinate space (top-left origin) stretched to fill
|
|
1107
1124
|
* the geom panel. A layout geom paints its geometry in raw unit coords so paint and hit-test never re-project against each
|
|
1108
1125
|
* other. `preserveAspectRatio="none"` maps the unit square onto the (usually non-square) panel exactly.
|
|
1126
|
+
* Circles and glyphs stretch here — put them in {@link UnitBoxSvg}.
|
|
1109
1127
|
*/
|
|
1110
1128
|
export declare const UnitSpaceSvg: ({ children, ...rest }: UnitSpaceSvgProps) => ReactNode;
|
|
1111
1129
|
|