commit dd1a3905bfe61dd0fcbe99856174fe499f9c6431 Author: github-actions[bot] Date: Fri Jul 17 08:43:36 2026 +0000 publish official plugins @ 0e1edd1 diff --git a/html.js b/html.js new file mode 100644 index 0000000..c2a9203 --- /dev/null +++ b/html.js @@ -0,0 +1,3 @@ +function g(){let e=globalThis.InfiniteCanvasRuntime;if(!e)throw new Error("[plugin-sdk] Infinite Canvas \u8FD0\u884C\u65F6\u672A\u5C31\u7EEA:\u8BF7\u5728\u753B\u5E03\u5BBF\u4E3B\u4E2D\u52A0\u8F7D\u672C\u63D2\u4EF6");return e}function r(){return g().React}var c=((...e)=>r().useState(...e));var l=((...e)=>r().useMemo(...e));var p=((...e)=>r().useRef(...e));var R=Symbol.for("infinite-canvas.jsx.fragment");function x(e,t,a){let s=r(),i=e===R?s.Fragment:e,u=a===void 0?t:{...t??{},key:a};return s.createElement(i,u)}function n(e,t,a){return x(e,t,a)}var d=n;var w=12,h=20;function k({ctx:e,value:t}){let a=p(null),s=l(()=>Math.max(1,t.split(` +`).length),[t]),[i,u]=c(0),f={fontFamily:"monospace",fontSize:w,lineHeight:`${h}px`,boxSizing:"border-box"};return d("div",{"data-canvas-no-zoom":!0,style:{height:"100%",width:"100%",display:"flex",overflow:"hidden",borderRadius:16,background:e.theme.node.fill},onMouseDown:o=>o.stopPropagation(),children:[n("div",{ref:a,"aria-hidden":!0,style:{...f,flex:"0 0 auto",padding:"16px 8px 16px 12px",textAlign:"right",color:e.theme.node.placeholder,background:`${e.theme.toolbar.panel}66`,borderRight:`1px solid ${e.theme.node.stroke}`,overflow:"hidden",userSelect:"none",whiteSpace:"pre"},children:n("div",{style:{transform:`translateY(${-i}px)`},children:Array.from({length:s},(o,m)=>n("div",{children:m+1},m))})}),n("textarea",{autoFocus:!0,value:t,placeholder:"
Hello, {{input}}
",spellCheck:!1,wrap:"off",onChange:o=>e.updateMetadata({content:o.target.value}),onScroll:o=>u(o.currentTarget.scrollTop),onMouseDown:o=>o.stopPropagation(),onWheel:o=>o.stopPropagation(),style:{...f,flex:"1 1 auto",minWidth:0,height:"100%",resize:"none",background:"transparent",padding:"16px 16px 16px 12px",outline:"none",border:"none",color:e.theme.node.text,whiteSpace:"pre",overflow:"auto"}})]})}function v({ctx:e}){let t=e.node.metadata?.content||"",a=!!e.node.metadata?.editing,s=l(()=>e.getUpstream().map(u=>u.metadata?.content).filter(Boolean).join(` +`),[e]),i=t.replace(/\{\{\s*input\s*\}\}/g,s);return a?n(k,{ctx:e,value:t}):t?n("div",{"data-canvas-no-zoom":!0,style:{position:"relative",height:"100%",width:"100%"},children:n("iframe",{title:"html-preview",sandbox:"allow-scripts allow-forms",srcDoc:i,style:{height:"100%",width:"100%",border:0,borderRadius:16,background:"#fff",display:"block"}})}):d("div",{style:{height:"100%",width:"100%",display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",gap:8,color:e.theme.node.placeholder},children:[n("span",{style:{fontSize:26},children:""}),n("span",{style:{fontSize:13},children:"\u9009\u4E2D\u8282\u70B9,\u70B9\u4E0A\u65B9\u5DE5\u5177\u6761\u7684 \u270E \u7F16\u8F91 HTML"})]})}var D={id:"html",name:"HTML \u8282\u70B9",version:"1.2.0",description:"\u6C99\u7BB1 iframe \u6E32\u67D3 HTML,\u652F\u6301 {{input}} \u6CE8\u5165\u4E0A\u6E38\u6587\u672C",nodes:[{type:"html:render",title:"HTML",icon:"\u{1F310}",description:"\u6C99\u7BB1\u6E32\u67D3 HTML",defaultSize:{width:420,height:320},defaultMetadata:{content:""},minimapColor:"#ec4899",hidePanel:!0,interactionToggle:!0,forceInteractive:e=>!!e.metadata?.editing,Content:v,toolbar:e=>{let t=!!e.node.metadata?.editing;return[{id:"html-toggle-edit",title:t?"\u9884\u89C8\u6E32\u67D3\u7ED3\u679C":"\u7F16\u8F91 HTML \u6E90\u7801",label:t?"\u9884\u89C8":"\u7F16\u8F91",icon:t?"\u{1F441}":"\u270E",active:t,onClick:()=>e.updateMetadata({editing:!t})}]}}]};export{D as default}; diff --git a/markdown.js b/markdown.js new file mode 100644 index 0000000..9db71f6 --- /dev/null +++ b/markdown.js @@ -0,0 +1,60 @@ +function f(){let e=globalThis.InfiniteCanvasRuntime;if(!e)throw new Error("[plugin-sdk] Infinite Canvas \u8FD0\u884C\u65F6\u672A\u5C31\u7EEA:\u8BF7\u5728\u753B\u5E03\u5BBF\u4E3B\u4E2D\u52A0\u8F7D\u672C\u63D2\u4EF6");return e}function r(){return f().React}var p=((...e)=>r().useState(...e)),c=((...e)=>r().useEffect(...e));var d=((...e)=>r().useRef(...e));var g=`.cnv-md { + height: 100%; + width: 100%; + overflow: auto; + padding: 16px; + font-size: 14px; + line-height: 1.6; +} +.cnv-md h1, +.cnv-md h2, +.cnv-md h3 { + margin: 0.6em 0 0.3em; + font-weight: 600; + line-height: 1.3; +} +.cnv-md h1 { + font-size: 1.5em; +} +.cnv-md h2 { + font-size: 1.3em; +} +.cnv-md p { + margin: 0.5em 0; +} +.cnv-md a { + color: #6366f1; + text-decoration: underline; +} +.cnv-md code { + padding: 0.1em 0.35em; + border-radius: 4px; + background: rgba(120, 120, 120, 0.16); + font-family: monospace; + font-size: 0.9em; +} +.cnv-md pre { + padding: 12px; + border-radius: 8px; + background: rgba(120, 120, 120, 0.14); + overflow: auto; +} +.cnv-md pre code { + padding: 0; + background: transparent; +} +.cnv-md ul, +.cnv-md ol { + padding-left: 1.4em; + margin: 0.5em 0; +} +.cnv-md blockquote { + margin: 0.5em 0; + padding-left: 0.8em; + border-left: 3px solid rgba(120, 120, 120, 0.4); + opacity: 0.85; +} +.cnv-md img { + max-width: 100%; +} +`;var v=Symbol.for("infinite-canvas.jsx.fragment");function x(e,t,n){let s=r(),l=e===v?s.Fragment:e,a=n===void 0?t:{...t??{},key:n};return s.createElement(l,a)}function u(e,t,n){return x(e,t,n)}var i,m;function C(){return i?Promise.resolve(i):(m||(m=import("https://esm.sh/marked@14").then(e=>i=e.marked)),m)}var h="*\u9009\u4E2D\u8282\u70B9,\u70B9\u4E0A\u65B9\u5DE5\u5177\u6761\u7684 \u270E \u7F16\u8F91 Markdown*",k=new Map;function P(e){if(!i)return"";let t=e||h,n=k.get(t);return n===void 0&&(n=i.parse(t),k.set(t,n)),n}function b({ctx:e}){let[,t]=p(0),n=d(null),s=d(null);c(()=>{if(i)return;let o=!0;return C().then(()=>o&&t(R=>R+1)),()=>{o=!1}},[]);let l=e.node.metadata?.content||"",a=P(l);return c(()=>{let o=n.current;!o||s.current===a||(o.innerHTML=a,s.current=a)},[a]),u("div",{ref:n,className:"cnv-md","data-canvas-no-zoom":!0,onWheel:o=>o.stopPropagation(),style:{height:"100%",width:"100%",color:e.theme.node.text}})}function E({ctx:e}){let t=e.node.metadata?.content||"";return u("textarea",{autoFocus:!0,value:t,placeholder:"# \u8F93\u5165 Markdown",onChange:n=>e.updateMetadata({content:n.target.value}),onMouseDown:n=>n.stopPropagation(),onPointerDown:n=>n.stopPropagation(),onWheel:n=>n.stopPropagation(),style:{height:"100%",width:"100%",resize:"none",background:e.theme.node.fill,borderRadius:16,boxSizing:"border-box",padding:16,fontFamily:"monospace",fontSize:14,outline:"none",border:"none",color:e.theme.node.text}})}function M({ctx:e}){return e.node.metadata?.editing?u(E,{ctx:e}):u(b,{ctx:e})}var O={id:"markdown",name:"Markdown \u8282\u70B9",version:"1.1.0",description:"\u5728\u753B\u5E03\u4E2D\u7F16\u8F91\u4E0E\u6E32\u67D3 Markdown",css:g,nodes:[{type:"markdown:doc",title:"Markdown",icon:"\u{1F4DD}",description:"\u7F16\u8F91\u4E0E\u6E32\u67D3 Markdown",defaultSize:{width:360,height:300},defaultMetadata:{content:""},minimapColor:"#6366f1",hidePanel:!0,interactionToggle:!0,forceInteractive:e=>!!e.metadata?.editing,resource:e=>({kind:"text",text:e.metadata?.content}),Content:M,toolbar:e=>{let t=!!e.node.metadata?.editing;return[{id:"md-toggle-edit",title:t?"\u9884\u89C8\u6E32\u67D3\u7ED3\u679C":"\u7F16\u8F91 Markdown \u6E90\u7801",label:t?"\u9884\u89C8":"\u7F16\u8F91",icon:t?"\u{1F441}":"\u270E",active:t,onClick:()=>e.updateMetadata({editing:!t})}]}}]};export{O as default}; diff --git a/official-plugins.json b/official-plugins.json new file mode 100644 index 0000000..5a0ddbf --- /dev/null +++ b/official-plugins.json @@ -0,0 +1,45 @@ +{ + "version": 1, + "plugins": [ + { + "id": "markdown", + "name": "Markdown 节点", + "version": "1.1.0", + "description": "在画布中编辑与渲染 Markdown", + "icon": "📝", + "entry": "markdown.js" + }, + { + "id": "svg", + "name": "SVG 节点", + "version": "1.1.0", + "description": "透明背景渲染 SVG,可接收上游文本节点的 SVG 源码", + "icon": "🔷", + "entry": "svg.js" + }, + { + "id": "html", + "name": "HTML 节点", + "version": "1.2.0", + "description": "沙箱 iframe 渲染 HTML,支持 {{input}} 注入上游文本", + "icon": "🌐", + "entry": "html.js" + }, + { + "id": "panorama", + "name": "3D 全景节点", + "version": "1.1.0", + "description": "查看 360° 等距柱状全景图,可从上游图片节点取图", + "icon": "🧭", + "entry": "panorama.js" + }, + { + "id": "sticky-note", + "name": "便利贴节点", + "version": "1.1.0", + "description": "可自选颜色、双击编辑、拖动即可移动的便利贴", + "icon": "📌", + "entry": "sticky-note.js" + } + ] +} diff --git a/panorama.js b/panorama.js new file mode 100644 index 0000000..26b08fe --- /dev/null +++ b/panorama.js @@ -0,0 +1 @@ +function _(){let e=globalThis.InfiniteCanvasRuntime;if(!e)throw new Error("[plugin-sdk] Infinite Canvas \u8FD0\u884C\u65F6\u672A\u5C31\u7EEA:\u8BF7\u5728\u753B\u5E03\u5BBF\u4E3B\u4E2D\u52A0\u8F7D\u672C\u63D2\u4EF6");return e}function f(){return _().React}var A=((...e)=>f().useState(...e)),z=((...e)=>f().useEffect(...e));var F=((...e)=>f().useCallback(...e)),k=((...e)=>f().useRef(...e));var K=Symbol.for("infinite-canvas.jsx.fragment");function Q(e,o,r){let t=f(),c=e===K?t.Fragment:e,s=r===void 0?o:{...o??{},key:r};return t.createElement(c,s)}function u(e,o,r){return Q(e,o,r)}var P=u;var X;function Z(){return X||(X=import("https://esm.sh/three@0.180.0")),X}var H="A seamless 360-degree equirectangular panorama, 2:1 aspect ratio, full spherical VR photo, horizontally wrapping seamlessly at the left and right edges, no visible seam, no distortion artifacts, even horizon, no text, no watermark. Scene: ";function ee({src:e,ctx:o}){let r=k(null),[t,c]=A("loading");return z(()=>{let s=r.current;if(!s||!e)return;let d=!1,M=0,i=null,w=null,g=null,y=null,S=null,T=()=>{};return c("loading"),Z().then(l=>{if(d||!r.current)return;let J=new l.Scene,h=new l.PerspectiveCamera(70,1,1,1100),D=new l.Vector3;i=new l.WebGLRenderer({antialias:!0,powerPreference:"high-performance"}),i.setPixelRatio(Math.min(window.devicePixelRatio||1,2)),i.setClearColor(0,1);let a=i.domElement;a.style.width="100%",a.style.height="100%",a.style.display="block",a.style.cursor="grab",s.appendChild(a);let B=Math.min(i.capabilities.maxTextureSize||4096,4096);w=new l.SphereGeometry(500,96,64),w.scale(-1,1,1),g=new l.MeshBasicMaterial({color:16777215}),J.add(new l.Mesh(w,g));let R=0,E=0,L=70,x=!1,N=0,G=0,O=0,U=0,W=n=>{x=!0,N=n.clientX,G=n.clientY,O=R,U=E,a.style.cursor="grabbing",a.setPointerCapture?.(n.pointerId)},j=n=>{x&&(R=O-(n.clientX-N)*.12,E=Math.max(-84,Math.min(84,U+(n.clientY-G)*.12)))},C=()=>{x=!1,a.style.cursor="grab"},Y=n=>{n.preventDefault(),L=Math.max(38,Math.min(86,L+n.deltaY*.035))};a.addEventListener("pointerdown",W),a.addEventListener("pointermove",j),a.addEventListener("pointerup",C),a.addEventListener("pointercancel",C),a.addEventListener("wheel",Y,{passive:!1}),T=()=>{a.removeEventListener("pointerdown",W),a.removeEventListener("pointermove",j),a.removeEventListener("pointerup",C),a.removeEventListener("pointercancel",C),a.removeEventListener("wheel",Y)};let V=()=>{if(!i||!r.current)return;let n=Math.max(1,r.current.clientWidth),m=Math.max(1,r.current.clientHeight);i.setSize(n,m,!1),h.aspect=n/m,h.updateProjectionMatrix()};S=new ResizeObserver(V),S.observe(s),V();let q=()=>{if(d||!i)return;x||(R+=.02),h.fov=L,h.updateProjectionMatrix();let n=l.MathUtils.degToRad(90-E),m=l.MathUtils.degToRad(R);D.set(500*Math.sin(n)*Math.cos(m),500*Math.cos(n),500*Math.sin(n)*Math.sin(m)),h.lookAt(D),i.render(J,h),M=requestAnimationFrame(q)};q();let p=new Image;p.crossOrigin="anonymous",p.onload=()=>{if(!(d||!g))try{let n=p.naturalWidth||p.width,m=p.naturalHeight||p.height,I=Math.min(1,B/n,B/m),b=p;if(I<1){let v=document.createElement("canvas");v.width=Math.max(1,Math.round(n*I)),v.height=Math.max(1,Math.round(m*I)),v.getContext("2d")?.drawImage(p,0,0,v.width,v.height),b=v}y=b instanceof HTMLCanvasElement?new l.CanvasTexture(b):new l.Texture(b),y.colorSpace=l.SRGBColorSpace,y.minFilter=l.LinearFilter,y.needsUpdate=!0,g.map=y,g.needsUpdate=!0,c("ready")}catch{c("error")}},p.onerror=()=>!d&&c("error"),p.src=e}).catch(()=>!d&&c("error")),()=>{d=!0,T(),S?.disconnect(),M&&cancelAnimationFrame(M),y?.dispose?.(),g?.dispose?.(),w?.dispose?.(),i&&(i.domElement?.remove?.(),i.dispose?.(),i.forceContextLoss?.())}},[e]),P("div",{style:{position:"relative",height:"100%",width:"100%",overflow:"hidden",borderRadius:16,background:"#000"},children:[u("div",{ref:r,"data-canvas-no-zoom":!0,onMouseDown:s=>s.stopPropagation(),onWheel:s=>s.stopPropagation(),style:{position:"absolute",inset:0}}),t!=="ready"?u("div",{style:{position:"absolute",inset:0,display:"grid",placeItems:"center",pointerEvents:"none",color:o.theme.node.placeholder,fontSize:13,background:t==="error"?"rgba(0,0,0,0.6)":`linear-gradient(135deg, ${o.theme.node.fill}, #000)`},children:t==="error"?"\u5168\u666F\u56FE\u8BFB\u53D6\u5931\u8D25,\u8BF7\u6362 2:1 \u7684 JPG/PNG \u5168\u666F\u56FE":"\u6B63\u5728\u52A0\u8F7D\u5168\u666F\u2026"}):null]})}function te({ctx:e}){let o=k(null),r=F(s=>{if(!s)return;let d=new FileReader;d.onload=()=>e.updateMetadata({content:String(d.result||"")}),d.readAsDataURL(s)},[e]),t=e.theme,c={display:"inline-flex",alignItems:"center",gap:6,cursor:"pointer",borderRadius:999,padding:"9px 18px",fontSize:13,fontWeight:600,border:`1px solid ${t.node.stroke}`,background:t.node.fill,color:t.node.text};return P("div",{style:{height:"100%",width:"100%",display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",gap:14,padding:20,borderRadius:16,boxSizing:"border-box",background:t.node.fill},children:[u("span",{style:{fontSize:34},children:"\u{1F310}"}),P("div",{"data-canvas-no-zoom":!0,onMouseDown:s=>s.stopPropagation(),style:{display:"flex",gap:10},children:[u("input",{ref:o,type:"file",accept:"image/*",style:{display:"none"},onChange:s=>r(s.target.files?.[0])}),u("button",{type:"button",style:c,onClick:()=>o.current?.click(),children:"\u{1F5BC} \u4E0A\u4F20\u5168\u666F\u56FE"}),u("button",{type:"button",style:{...c,border:"none",background:t.toolbar.activeBg,color:t.toolbar.activeText},onClick:()=>e.openPanel(),children:"\u2728 AI \u751F\u6210"})]}),u("span",{style:{fontSize:12,color:t.node.placeholder,textAlign:"center"},children:"\u652F\u6301 2:1 \u7B49\u8DDD\u67F1\u72B6\u5168\u666F\u56FE"})]})}function ne({ctx:e}){let o=e.getUpstream().map(t=>t.metadata?.content).find(t=>typeof t=="string"&&!!t),r=(typeof e.node.metadata?.content=="string"?e.node.metadata.content:"")||o||"";return r?u(ee,{src:r,ctx:e}):u(te,{ctx:e})}var he={id:"panorama",name:"3D \u5168\u666F\u8282\u70B9",version:"1.1.0",description:"\u67E5\u770B 360\xB0 \u7B49\u8DDD\u67F1\u72B6\u5168\u666F\u56FE,\u652F\u6301\u4E0A\u4F20\u4E0E AI \u751F\u6210,\u53EF\u4ECE\u4E0A\u6E38\u56FE\u7247\u8282\u70B9\u53D6\u56FE",nodes:[{type:"panorama:viewer",title:"3D \u5168\u666F",icon:"\u{1F310}",description:"360\xB0 \u5168\u666F\u67E5\u770B\u5668(\u4E0A\u4F20 / AI \u751F\u6210)",defaultSize:{width:480,height:300},defaultMetadata:{},minimapColor:"#0ea5e9",interactionToggle:!0,useBuiltinPanel:{mode:"image",promptPrefix:H,writeBackToSelf:!0},resource:e=>{let o=e.metadata?.content;return typeof o=="string"&&o?{kind:"image",url:o}:null},Content:ne,toolbar:e=>{let o=typeof e.node.metadata?.content=="string"&&!!e.node.metadata?.content;return[{id:"panorama-generate",title:"\u7528 AI \u751F\u6210\u5168\u666F\u56FE(\u6253\u5F00\u4E0B\u65B9\u9762\u677F)",label:"AI \u751F\u6210",icon:"\u2728",onClick:()=>e.openPanel()},...o?[{id:"panorama-reset",title:"\u6E05\u7A7A\u5F53\u524D\u5168\u666F\u56FE,\u91CD\u65B0\u4E0A\u4F20",label:"\u6362\u56FE",icon:"\u{1F504}",onClick:()=>e.updateMetadata({content:""})}]:[]]}}]};export{he as default}; diff --git a/sticky-note.js b/sticky-note.js new file mode 100644 index 0000000..fb30f13 --- /dev/null +++ b/sticky-note.js @@ -0,0 +1 @@ +function C(){let t=globalThis.InfiniteCanvasRuntime;if(!t)throw new Error("[plugin-sdk] Infinite Canvas \u8FD0\u884C\u65F6\u672A\u5C31\u7EEA:\u8BF7\u5728\u753B\u5E03\u5BBF\u4E3B\u4E2D\u52A0\u8F7D\u672C\u63D2\u4EF6");return t}function u(){return C().React}var l=((...t)=>u().useState(...t)),p=((...t)=>u().useEffect(...t));var f=((...t)=>u().useRef(...t));var I=Symbol.for("infinite-canvas.jsx.fragment");function T(t,n,o){let i=u(),s=t===I?i.Fragment:t,m=o===void 0?n:{...n??{},key:o};return i.createElement(s,m)}function r(t,n,o){return T(t,n,o)}var g=r;var v=["#fde68a","#fca5a5","#fdba74","#a7f3d0","#bfdbfe","#ddd6fe","#f9a8d4","#e7e5e4"],h=v[0];function L({ctx:t}){let[n,o]=l(!1),[i,s]=l(!1),[m,y]=l(null),R=f(null),a=f(null),w=t.node.metadata?.pluginColor||h,d=m??w,b=t.node.metadata?.content||"";p(()=>{if(!n&&!i)return;let e=P=>{R.current&&!R.current.contains(P.target)&&(o(!1),s(!1))};return document.addEventListener("pointerdown",e,!0),()=>document.removeEventListener("pointerdown",e,!0)},[n,i]);let x=e=>t.updateMetadata({pluginColor:e}),E=e=>{y(e),a.current&&clearTimeout(a.current),a.current=window.setTimeout(()=>{a.current=null,x(e)},150)},k=e=>{a.current&&(clearTimeout(a.current),a.current=null),y(e),x(e)};p(()=>()=>{a.current&&clearTimeout(a.current)},[]),p(()=>{y(null)},[w]);let c=e=>e.stopPropagation();return g("div",{ref:R,"data-canvas-no-zoom":!0,style:{position:"relative",height:"100%",width:"100%",display:"flex",flexDirection:"column",background:d,borderRadius:16,padding:14,boxSizing:"border-box",cursor:n?"text":"move",boxShadow:"inset 0 1px 0 rgba(255,255,255,.45)"},onDoubleClick:e=>{e.stopPropagation(),o(!0)},children:[g("div",{style:{position:"absolute",top:8,right:8,zIndex:5},onMouseDown:c,onDoubleClick:c,children:[r("button",{type:"button",title:"\u9009\u62E9\u989C\u8272",onClick:()=>s(e=>!e),style:{width:22,height:22,borderRadius:"50%",border:"2px solid rgba(0,0,0,.25)",background:d,cursor:"pointer",padding:0,boxShadow:"0 1px 3px rgba(0,0,0,.2)"}}),i?g("div",{style:{position:"absolute",top:28,right:0,display:"grid",gridTemplateColumns:"repeat(4, 20px)",gap:6,padding:8,borderRadius:12,background:"#fff",boxShadow:"0 8px 24px rgba(0,0,0,.18)"},children:[v.map(e=>r("button",{type:"button",title:e,onClick:()=>{k(e),s(!1)},style:{width:20,height:20,borderRadius:"50%",border:e===d?"2px solid #1c1917":"2px solid rgba(0,0,0,.12)",background:e,cursor:"pointer",padding:0}},e)),r("label",{title:"\u81EA\u5B9A\u4E49\u989C\u8272",style:{position:"relative",width:20,height:20,borderRadius:"50%",cursor:"pointer",background:"conic-gradient(red, yellow, lime, aqua, blue, magenta, red)",border:"2px solid rgba(0,0,0,.12)",boxSizing:"border-box"},children:r("input",{type:"color",value:d,onChange:e=>E(e.target.value),onBlur:e=>k(e.target.value),style:{position:"absolute",inset:0,opacity:0,width:"100%",height:"100%",border:"none",padding:0,cursor:"pointer"}})})]}):null]}),n?r("textarea",{autoFocus:!0,value:b,placeholder:"\u8F93\u5165\u4FBF\u5229\u8D34\u5185\u5BB9\u2026\uFF08\u70B9\u51FB\u522B\u5904\u6216\u6309 Esc \u9000\u51FA\u7F16\u8F91\uFF09",onChange:e=>t.updateMetadata({content:e.target.value}),onBlur:()=>o(!1),onKeyDown:e=>{e.key==="Escape"&&(e.stopPropagation(),o(!1))},onMouseDown:c,onPointerDown:c,onWheel:c,style:{flex:1,width:"100%",resize:"none",border:"none",outline:"none",background:"transparent",color:"#1c1917",fontSize:15,lineHeight:1.5,fontFamily:"inherit"}}):r("div",{style:{flex:1,whiteSpace:"pre-wrap",overflow:"hidden",color:b?"#1c1917":"rgba(28,25,23,.45)",fontSize:15,lineHeight:1.5,userSelect:"none",paddingRight:22},children:b||"\u53CC\u51FB\u7F16\u8F91\u4FBF\u5229\u8D34"})]})}var K={id:"sticky-note",name:"\u4FBF\u5229\u8D34\u8282\u70B9",version:"1.1.0",description:"\u53EF\u81EA\u9009\u989C\u8272\u3001\u53CC\u51FB\u7F16\u8F91\u3001\u62D6\u52A8\u5373\u53EF\u79FB\u52A8\u7684\u4FBF\u5229\u8D34",nodes:[{type:"sticky-note:note",title:"\u4FBF\u5229\u8D34",icon:"\u{1F4CC}",description:"\u5F69\u8272\u4FBF\u5229\u8D34",defaultSize:{width:240,height:200},defaultMetadata:{content:"",pluginColor:h},minimapColor:"#f59e0b",hidePanel:!0,Content:L}]};export{K as default}; diff --git a/svg.js b/svg.js new file mode 100644 index 0000000..86edfa7 --- /dev/null +++ b/svg.js @@ -0,0 +1 @@ +function g(){let e=globalThis.InfiniteCanvasRuntime;if(!e)throw new Error("[plugin-sdk] Infinite Canvas \u8FD0\u884C\u65F6\u672A\u5C31\u7EEA:\u8BF7\u5728\u753B\u5E03\u5BBF\u4E3B\u4E2D\u52A0\u8F7D\u672C\u63D2\u4EF6");return e}function r(){return g().React}var l=((...e)=>r().useState(...e)),p=((...e)=>r().useEffect(...e));var d=((...e)=>r().useRef(...e));var v=Symbol.for("infinite-canvas.jsx.fragment");function x(e,n,o){let a=r(),u=e===v?a.Fragment:e,s=o===void 0?n:{...n??{},key:o};return a.createElement(u,s)}function i(e,n,o){return x(e,n,o)}var y=i;function C({ctx:e}){let[n,o]=l(!1),a=d(null),u=e.node.metadata?.content,s=e.getUpstream().map(t=>t.metadata?.content).find(t=>typeof t=="string"&&t.trim().startsWith("{u===void 0&&s&&e.updateMetadata({content:s})},[e,u,s]),p(()=>{if(!n)return;let t=w=>{a.current&&!a.current.contains(w.target)&&o(!1)};return document.addEventListener("pointerdown",t,!0),()=>document.removeEventListener("pointerdown",t,!0)},[n]);let c=t=>t.stopPropagation(),R={position:"absolute",right:8,top:8,zIndex:20,width:32,height:32,display:"grid",placeItems:"center",borderRadius:8,border:`1px solid ${e.theme.node.stroke}`,background:`${e.theme.toolbar.panel}dd`,color:e.theme.node.text,cursor:"pointer"};return y("div",{ref:a,"data-canvas-no-zoom":!0,style:{position:"relative",height:"100%",width:"100%",display:"flex",flexDirection:"column",cursor:n?"text":"move"},onDoubleClick:t=>{t.stopPropagation(),o(!0)},children:[i("button",{type:"button",style:R,onMouseDown:c,onClick:()=>o(t=>!t),title:n?"\u9884\u89C8":"\u7F16\u8F91\u6E90\u7801",children:n?"\u{1F441}":"\u270E"}),n?i("textarea",{autoFocus:!0,value:f,placeholder:"\u7C98\u8D34 SVG \u6E90\u7801,\u5982 \u2026",onChange:t=>e.updateMetadata({content:t.target.value}),onKeyDown:t=>{t.key==="Escape"&&(t.stopPropagation(),o(!1))},onMouseDown:c,onPointerDown:c,onWheel:c,style:{height:"100%",width:"100%",resize:"none",background:e.theme.node.fill,borderRadius:16,padding:16,boxSizing:"border-box",fontFamily:"monospace",fontSize:12,outline:"none",border:`1px solid ${e.theme.node.stroke}`,color:e.theme.node.text}}):m?i("div",{style:{height:"100%",width:"100%",display:"flex",alignItems:"center",justifyContent:"center",padding:12,boxSizing:"border-box",pointerEvents:"none"},dangerouslySetInnerHTML:{__html:m}}):i("div",{style:{height:"100%",width:"100%",display:"flex",alignItems:"center",justifyContent:"center",padding:16,boxSizing:"border-box",color:e.theme.node.placeholder,fontSize:13,textAlign:"center",pointerEvents:"none"},children:"\u53CC\u51FB\u7F16\u8F91,\u7C98\u8D34 SVG \u6E90\u7801"})]})}var T={id:"svg",name:"SVG \u8282\u70B9",version:"1.1.0",description:"\u900F\u660E\u80CC\u666F\u6E32\u67D3 SVG \u77E2\u91CF\u56FE,\u53EF\u63A5\u6536\u4E0A\u6E38\u6587\u672C\u8282\u70B9\u7684 SVG \u6E90\u7801",nodes:[{type:"svg:vector",title:"SVG",icon:"\u{1F537}",description:"\u6E32\u67D3 SVG \u77E2\u91CF\u56FE",defaultSize:{width:320,height:320},defaultMetadata:{},minimapColor:"#14b8a6",transparentBackground:!0,Content:C}]};export{T as default};