Files
infinite-canvas/sticky-note.js
T
2026-07-17 08:43:36 +00:00

2 lines
4.0 KiB
JavaScript

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};