@inkandswitch/patchwork-pkg-base 0.0.106 → 0.0.108

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.
Files changed (50) hide show
  1. package/module-settings-url +1 -1
  2. package/package.json +1 -1
  3. package/packages/llm-host/dist/{LlmConfigTray-CjW04jeT.js → LlmConfigTray-CsVpZoou.js} +160 -150
  4. package/packages/llm-host/dist/index.js +1 -1
  5. package/packages/providers/dist/assets/SelectedDocProvider-CpFoW1D5.js +2 -0
  6. package/packages/providers/dist/assets/SelectedDocProvider-CpFoW1D5.js.map +1 -0
  7. package/packages/providers/dist/index.js +1 -1
  8. package/packages/sideboard/dist/{chunk-RZPTJTVZ.js → chunk-3A65VAIS.js} +2 -2
  9. package/packages/sideboard/dist/chunk-B2O2X2JP.js +13 -0
  10. package/packages/sideboard/dist/chunk-B2O2X2JP.js.map +7 -0
  11. package/packages/sideboard/dist/chunk-PVIUDN4Q.js +2 -0
  12. package/packages/sideboard/dist/chunk-PVIUDN4Q.js.map +7 -0
  13. package/packages/sideboard/dist/chunk-WIFOKAHN.js +2 -0
  14. package/packages/sideboard/dist/chunk-WIFOKAHN.js.map +7 -0
  15. package/packages/sideboard/dist/chunk-WPHECYLJ.js +15 -0
  16. package/packages/sideboard/dist/chunk-WPHECYLJ.js.map +7 -0
  17. package/packages/sideboard/dist/{create-new-menu-4VNS2UFI.js → create-new-menu-JPICLPWM.js} +2 -2
  18. package/packages/sideboard/dist/document-list-panel-VFY2RV33.js +2 -0
  19. package/packages/sideboard/dist/index.css +1 -1
  20. package/packages/sideboard/dist/index.css.map +2 -2
  21. package/packages/sideboard/dist/index.js +1 -1
  22. package/packages/sideboard/dist/item-menu-C37UJBFI.js +2 -0
  23. package/packages/sideboard/dist/{item-menu-3JUJN3MS.js.map → item-menu-C37UJBFI.js.map} +1 -1
  24. package/packages/sideboard/dist/sideboard/sideboard.js +1 -1
  25. package/packages/threepane/dist/IsolatedDocumentArea-UTNJADQ7.js +2 -0
  26. package/packages/threepane/dist/{PatchworkFrame-X4GBBC46.js → PatchworkFrame-U2TVLGCZ.js} +2 -2
  27. package/packages/threepane/dist/chunk-XOKWELWP.js +1210 -0
  28. package/packages/threepane/dist/chunk-XOKWELWP.js.map +7 -0
  29. package/packages/threepane/dist/index.js +1 -1
  30. package/plugin-registry-url +1 -1
  31. package/packages/providers/dist/assets/SelectedDocProvider-CLztU54U.js +0 -2
  32. package/packages/providers/dist/assets/SelectedDocProvider-CLztU54U.js.map +0 -1
  33. package/packages/sideboard/dist/chunk-73XN2I2U.js +0 -15
  34. package/packages/sideboard/dist/chunk-73XN2I2U.js.map +0 -7
  35. package/packages/sideboard/dist/chunk-NS3ADG2Z.js +0 -2
  36. package/packages/sideboard/dist/chunk-NS3ADG2Z.js.map +0 -7
  37. package/packages/sideboard/dist/chunk-OFWMAVKQ.js +0 -13
  38. package/packages/sideboard/dist/chunk-OFWMAVKQ.js.map +0 -7
  39. package/packages/sideboard/dist/chunk-YZ573CYO.js +0 -2
  40. package/packages/sideboard/dist/chunk-YZ573CYO.js.map +0 -7
  41. package/packages/sideboard/dist/document-list-panel-SCICIJCF.js +0 -2
  42. package/packages/sideboard/dist/item-menu-3JUJN3MS.js +0 -2
  43. package/packages/threepane/dist/IsolatedDocumentArea-W7IBHNIS.js +0 -2
  44. package/packages/threepane/dist/chunk-MWFQHDD3.js +0 -1210
  45. package/packages/threepane/dist/chunk-MWFQHDD3.js.map +0 -7
  46. /package/packages/sideboard/dist/{chunk-RZPTJTVZ.js.map → chunk-3A65VAIS.js.map} +0 -0
  47. /package/packages/sideboard/dist/{create-new-menu-4VNS2UFI.js.map → create-new-menu-JPICLPWM.js.map} +0 -0
  48. /package/packages/sideboard/dist/{document-list-panel-SCICIJCF.js.map → document-list-panel-VFY2RV33.js.map} +0 -0
  49. /package/packages/threepane/dist/{IsolatedDocumentArea-W7IBHNIS.js.map → IsolatedDocumentArea-UTNJADQ7.js.map} +0 -0
  50. /package/packages/threepane/dist/{PatchworkFrame-X4GBBC46.js.map → PatchworkFrame-U2TVLGCZ.js.map} +0 -0
@@ -1,2 +1,2 @@
1
- const h="modulepreload",f=function(t,e){return new URL(t,e).href},_={},i=function(e,u,m){let p=Promise.resolve();if(u&&u.length>0){let P=function(r){return Promise.all(r.map(a=>Promise.resolve(a).then(s=>({status:"fulfilled",value:s}),s=>({status:"rejected",reason:s}))))};const c=document.getElementsByTagName("link"),o=document.querySelector("meta[property=csp-nonce]"),w=o?.nonce||o?.getAttribute("nonce");p=P(u.map(r=>{if(r=f(r,m),r in _)return;_[r]=!0;const a=r.endsWith(".css"),s=a?'[rel="stylesheet"]':"";if(m)for(let l=c.length-1;l>=0;l--){const d=c[l];if(d.href===r&&(!a||d.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${r}"]${s}`))return;const n=document.createElement("link");if(n.rel=a?"stylesheet":h,a||(n.as="script"),n.crossOrigin="",n.href=r,w&&n.setAttribute("nonce",w),document.head.appendChild(n),a)return new Promise((l,d)=>{n.addEventListener("load",l),n.addEventListener("error",()=>d(new Error(`Unable to preload CSS for ${r}`)))})}))}function v(c){const o=new Event("vite:preloadError",{cancelable:!0});if(o.payload=c,window.dispatchEvent(o),!o.defaultPrevented)throw c}return p.then(c=>{for(const o of c||[])o.status==="rejected"&&v(o.reason);return e().catch(v)})},y=[{type:"patchwork:component",id:"patchwork-comments-provider",name:"Comments Provider",async load(){const{CommentsProvider:t}=await i(async()=>{const{CommentsProvider:e}=await import("./assets/CommentsProvider-BYqGfL6x.js");return{CommentsProvider:e}},[],import.meta.url);return t}},{type:"patchwork:component",id:"patchwork-focus-provider",name:"Focus Provider",async load(){const{FocusProvider:t}=await i(async()=>{const{FocusProvider:e}=await import("./assets/FocusProvider-AfpGH4B_.js");return{FocusProvider:e}},[],import.meta.url);return t}},{type:"patchwork:component",id:"patchwork-account-provider",name:"Account Provider",async load(){const{AccountProvider:t}=await i(async()=>{const{AccountProvider:e}=await import("./assets/AccountProvider-BNtDCQWd.js");return{AccountProvider:e}},[],import.meta.url);return t}},{type:"patchwork:component",id:"patchwork-selected-doc-provider",name:"Selected Doc Provider",async load(){const{SelectedDocProvider:t}=await i(async()=>{const{SelectedDocProvider:e}=await import("./assets/SelectedDocProvider-CLztU54U.js");return{SelectedDocProvider:e}},[],import.meta.url);return t}},{type:"patchwork:component",id:"patchwork-tool-storage-provider",name:"Tool Storage Provider",async load(){const{ToolStorageProvider:t}=await i(async()=>{const{ToolStorageProvider:e}=await import("./assets/ToolStorageProvider-D7F0l8h7.js");return{ToolStorageProvider:e}},[],import.meta.url);return t}},{type:"patchwork:component",id:"patchwork-worker-provider",name:"Worker Provider",async load(){const{WorkerProvider:t}=await i(async()=>{const{WorkerProvider:e}=await import("./assets/WorkerProvider-CG700oWK.js");return{WorkerProvider:e}},[],import.meta.url);return t}}];export{y as plugins};
1
+ const h="modulepreload",f=function(t,e){return new URL(t,e).href},_={},i=function(e,u,m){let p=Promise.resolve();if(u&&u.length>0){let P=function(r){return Promise.all(r.map(a=>Promise.resolve(a).then(s=>({status:"fulfilled",value:s}),s=>({status:"rejected",reason:s}))))};const c=document.getElementsByTagName("link"),o=document.querySelector("meta[property=csp-nonce]"),w=o?.nonce||o?.getAttribute("nonce");p=P(u.map(r=>{if(r=f(r,m),r in _)return;_[r]=!0;const a=r.endsWith(".css"),s=a?'[rel="stylesheet"]':"";if(m)for(let l=c.length-1;l>=0;l--){const d=c[l];if(d.href===r&&(!a||d.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${r}"]${s}`))return;const n=document.createElement("link");if(n.rel=a?"stylesheet":h,a||(n.as="script"),n.crossOrigin="",n.href=r,w&&n.setAttribute("nonce",w),document.head.appendChild(n),a)return new Promise((l,d)=>{n.addEventListener("load",l),n.addEventListener("error",()=>d(new Error(`Unable to preload CSS for ${r}`)))})}))}function v(c){const o=new Event("vite:preloadError",{cancelable:!0});if(o.payload=c,window.dispatchEvent(o),!o.defaultPrevented)throw c}return p.then(c=>{for(const o of c||[])o.status==="rejected"&&v(o.reason);return e().catch(v)})},y=[{type:"patchwork:component",id:"patchwork-comments-provider",name:"Comments Provider",async load(){const{CommentsProvider:t}=await i(async()=>{const{CommentsProvider:e}=await import("./assets/CommentsProvider-BYqGfL6x.js");return{CommentsProvider:e}},[],import.meta.url);return t}},{type:"patchwork:component",id:"patchwork-focus-provider",name:"Focus Provider",async load(){const{FocusProvider:t}=await i(async()=>{const{FocusProvider:e}=await import("./assets/FocusProvider-AfpGH4B_.js");return{FocusProvider:e}},[],import.meta.url);return t}},{type:"patchwork:component",id:"patchwork-account-provider",name:"Account Provider",async load(){const{AccountProvider:t}=await i(async()=>{const{AccountProvider:e}=await import("./assets/AccountProvider-BNtDCQWd.js");return{AccountProvider:e}},[],import.meta.url);return t}},{type:"patchwork:component",id:"patchwork-selected-doc-provider",name:"Selected Doc Provider",async load(){const{SelectedDocProvider:t}=await i(async()=>{const{SelectedDocProvider:e}=await import("./assets/SelectedDocProvider-CpFoW1D5.js");return{SelectedDocProvider:e}},[],import.meta.url);return t}},{type:"patchwork:component",id:"patchwork-tool-storage-provider",name:"Tool Storage Provider",async load(){const{ToolStorageProvider:t}=await i(async()=>{const{ToolStorageProvider:e}=await import("./assets/ToolStorageProvider-D7F0l8h7.js");return{ToolStorageProvider:e}},[],import.meta.url);return t}},{type:"patchwork:component",id:"patchwork-worker-provider",name:"Worker Provider",async load(){const{WorkerProvider:t}=await i(async()=>{const{WorkerProvider:e}=await import("./assets/WorkerProvider-CG700oWK.js");return{WorkerProvider:e}},[],import.meta.url);return t}}];export{y as plugins};
2
2
  //# sourceMappingURL=index.js.map
@@ -1,2 +1,2 @@
1
- import{a as A}from"./chunk-YZ573CYO.js";import{a as M}from"./chunk-TCL6SLDB.js";import{b as k}from"./chunk-FW4363Y4.js";import{createSignal as h}from"solid-js";var[E,$]=h(null);function O(r,e){let n=e?.toLowerCase();return!!n&&r.split(/\s+/).filter(Boolean).every(t=>n.includes(t))}var[B,N]=h(""),[_,j]=h(new Set),[z,V]=h(null),[W,X]=h(null);import{deleteAt as v}from"@automerge/automerge-repo/slim";var L=k(M(),1),m=(0,L.default)("patchwork:sideboard:dnd");var g=new Map,w=20;function F(r){return{url:r.url,name:r.name,type:r.type}}var p=class extends Error{};async function Y(r,e,n,t,i){if(m("executeDrop called with:",{draggedIds:r.draggedIds,spot:e,copyMode:r.copyMode,sourceToolId:r.sourceToolId}),r.draggedUrls.length===0)throw new p("There was nothing in that drag to drop.");let d=await P(t,r.draggedUrls,n),c=await x(n,t,e.folderUrl);if(!i||d.length===0)return m("Cross-view/external drop, adding links. sameOriginView:",i),T(n,c,e,r);if(d.some(o=>b(o,e)))return null;let s=S(d,e,r);if(s)throw new p(s);return r.copyMode?R(c,e,d,n,t):H(c,e,d,n,t)}async function Z(r,e,n){let t=new Set(n);if(t.size===0)return;let i=new Map,d=new Set;async function c(s,o){if(o>=w)return;let a=s.doc();if(a?.docs){d.add(s.url);for(let l=0;l<a.docs.length;l++){let u=a.docs[l];if(t.has(u.url)){let f=i.get(s)??[];f.push(l),i.set(s,f)}if(u.type==="folder"&&u.url&&u.url!==s.url&&!d.has(u.url)){let f=g.get(u.url);if(!f)try{f=await r.find(u.url),g.set(u.url,f)}catch(D){m("Failed to load folder while removing:",u.url,D);continue}await c(f,o+1)}}}}await c(e,0);for(let[s,o]of i){let a=[...o].sort((l,u)=>u-l);s.change(l=>{for(let u of a)v(l.docs,u)})}}async function P(r,e,n){let t=[],i=new Set;async function d(c,s,o){if(s){if(o>=w){m(`Max folder depth (${w}) reached, stopping traversal`);return}i.add(c);for(let a=0;a<s.length;a++){let l=s[a];if(e.includes(l.url)&&t.push({url:l.url,folderUrl:c,index:a,item:l}),l.type!=="folder"||!l.url||l.url===c||i.has(l.url))continue;let u=g.get(l.url);if(!u)try{u=await n.find(l.url),g.set(l.url,u)}catch(f){m("Failed to load folder:",l.url,f);continue}await d(l.url,u.doc()?.docs,o+1)}}}return await d(r.url,r.doc()?.docs,0),t}async function x(r,e,n){if(n===e.url)return e;let t=g.get(n);if(!t){try{t=await r.find(n)}catch{throw new p("Couldn't open the folder to drop into.")}g.set(n,t)}return t}function b(r,e){return r.folderUrl+"/"+r.index===e.id||r.url===e.id&&e.position!=="inside"}function S(r,e,n){for(let t of r){let i=t.item.name||"That";if(t.folderUrl===e.folderUrl&&e.position==="inside"&&!n.copyMode)return`\u201C${i}\u201D is already in this folder.`;if(t.item.type==="folder"&&t.url===e.folderUrl)return`Can't put \u201C${i}\u201D inside itself.`;if(t.item.type==="folder"&&I(t.url,e.folderUrl))return`Can't put \u201C${i}\u201D inside one of its own folders.`}return null}function I(r,e){if(r===e)return!0;let n=g.get(r);if(!n)return!1;let t=n.doc();if(!t?.docs)return!1;for(let i of t.docs)if(i.type==="folder"&&i.url&&(i.url===e||I(i.url,e)))return!0;return!1}function U(r,e,n){return n.map((t,i)=>({folderUrl:r,index:e+i,url:t.url}))}async function H(r,e,n,t,i){m(`Moving ${n.length} item(s) to`,e);let d=new Map;for(let a of n){let l=d.get(a.folderUrl)||[];l.push(a),d.set(a.folderUrl,l)}let c=[];for(let[a,l]of d){let u=await x(t,i,a),f=[...l].sort((D,y)=>y.index-D.index);u.change(D=>{for(let y of f)c.unshift(F(D.docs[y.index])),v(D.docs,y.index)})}let s=(d.get(e.folderUrl)??[]).filter(a=>a.index<e.index).length,o=e.index-s;return r.change(a=>{a.docs.splice(o,0,...c)}),U(e.folderUrl,o,c)}async function T(r,e,n,t){let i=(t.draggedItems??[]).filter(o=>o.url&&o.url!==n.folderUrl),d=new Set(e.doc()?.docs?.map(o=>o.url)??[]),c=i.filter(o=>!d.has(o.url));if(i.length>0&&c.length===0){let o=i[0].name;throw new p(i.length===1&&o?`\u201C${o}\u201D is already in this folder.`:"Those are already in this folder.")}let s=(await Promise.all(c.map(async o=>{if(o.name&&o.type)return{url:o.url,name:o.name,type:o.type};try{return await A(r,o.url)}catch(a){return m("Failed to resolve dropped doc:",o.url,a),null}}))).filter(o=>o!==null);if(s.length===0)throw new p("Couldn't open the dropped document.");return m(`Adding ${s.length} link(s) at index:`,n.index),e.change(o=>{o.docs.splice(n.index,0,...s)}),U(n.folderUrl,n.index,s)}async function R(r,e,n,t,i){m(`Copying ${n.length} item(s) to`,e);let d=[];for(let c of n){let o=(await x(t,i,c.folderUrl)).doc()?.docs?.[c.index];o&&d.push(F(o))}return r.change(c=>{c.docs.splice(e.index,0,...d)}),U(e.folderUrl,e.index,d)}export{E as a,$ as b,O as c,B as d,N as e,_ as f,j as g,z as h,V as i,W as j,X as k,m as l,p as m,Y as n,Z as o};
2
- //# sourceMappingURL=chunk-RZPTJTVZ.js.map
1
+ import{d as A}from"./chunk-PVIUDN4Q.js";import{a as M}from"./chunk-TCL6SLDB.js";import{b as k}from"./chunk-FW4363Y4.js";import{createSignal as h}from"solid-js";var[E,$]=h(null);function O(r,e){let n=e?.toLowerCase();return!!n&&r.split(/\s+/).filter(Boolean).every(t=>n.includes(t))}var[B,N]=h(""),[_,j]=h(new Set),[z,V]=h(null),[W,X]=h(null);import{deleteAt as v}from"@automerge/automerge-repo/slim";var L=k(M(),1),m=(0,L.default)("patchwork:sideboard:dnd");var g=new Map,w=20;function F(r){return{url:r.url,name:r.name,type:r.type}}var p=class extends Error{};async function Y(r,e,n,t,i){if(m("executeDrop called with:",{draggedIds:r.draggedIds,spot:e,copyMode:r.copyMode,sourceToolId:r.sourceToolId}),r.draggedUrls.length===0)throw new p("There was nothing in that drag to drop.");let d=await P(t,r.draggedUrls,n),c=await x(n,t,e.folderUrl);if(!i||d.length===0)return m("Cross-view/external drop, adding links. sameOriginView:",i),T(n,c,e,r);if(d.some(o=>b(o,e)))return null;let s=S(d,e,r);if(s)throw new p(s);return r.copyMode?R(c,e,d,n,t):H(c,e,d,n,t)}async function Z(r,e,n){let t=new Set(n);if(t.size===0)return;let i=new Map,d=new Set;async function c(s,o){if(o>=w)return;let a=s.doc();if(a?.docs){d.add(s.url);for(let l=0;l<a.docs.length;l++){let u=a.docs[l];if(t.has(u.url)){let f=i.get(s)??[];f.push(l),i.set(s,f)}if(u.type==="folder"&&u.url&&u.url!==s.url&&!d.has(u.url)){let f=g.get(u.url);if(!f)try{f=await r.find(u.url),g.set(u.url,f)}catch(D){m("Failed to load folder while removing:",u.url,D);continue}await c(f,o+1)}}}}await c(e,0);for(let[s,o]of i){let a=[...o].sort((l,u)=>u-l);s.change(l=>{for(let u of a)v(l.docs,u)})}}async function P(r,e,n){let t=[],i=new Set;async function d(c,s,o){if(s){if(o>=w){m(`Max folder depth (${w}) reached, stopping traversal`);return}i.add(c);for(let a=0;a<s.length;a++){let l=s[a];if(e.includes(l.url)&&t.push({url:l.url,folderUrl:c,index:a,item:l}),l.type!=="folder"||!l.url||l.url===c||i.has(l.url))continue;let u=g.get(l.url);if(!u)try{u=await n.find(l.url),g.set(l.url,u)}catch(f){m("Failed to load folder:",l.url,f);continue}await d(l.url,u.doc()?.docs,o+1)}}}return await d(r.url,r.doc()?.docs,0),t}async function x(r,e,n){if(n===e.url)return e;let t=g.get(n);if(!t){try{t=await r.find(n)}catch{throw new p("Couldn't open the folder to drop into.")}g.set(n,t)}return t}function b(r,e){return r.folderUrl+"/"+r.index===e.id||r.url===e.id&&e.position!=="inside"}function S(r,e,n){for(let t of r){let i=t.item.name||"That";if(t.folderUrl===e.folderUrl&&e.position==="inside"&&!n.copyMode)return`\u201C${i}\u201D is already in this folder.`;if(t.item.type==="folder"&&t.url===e.folderUrl)return`Can't put \u201C${i}\u201D inside itself.`;if(t.item.type==="folder"&&I(t.url,e.folderUrl))return`Can't put \u201C${i}\u201D inside one of its own folders.`}return null}function I(r,e){if(r===e)return!0;let n=g.get(r);if(!n)return!1;let t=n.doc();if(!t?.docs)return!1;for(let i of t.docs)if(i.type==="folder"&&i.url&&(i.url===e||I(i.url,e)))return!0;return!1}function U(r,e,n){return n.map((t,i)=>({folderUrl:r,index:e+i,url:t.url}))}async function H(r,e,n,t,i){m(`Moving ${n.length} item(s) to`,e);let d=new Map;for(let a of n){let l=d.get(a.folderUrl)||[];l.push(a),d.set(a.folderUrl,l)}let c=[];for(let[a,l]of d){let u=await x(t,i,a),f=[...l].sort((D,y)=>y.index-D.index);u.change(D=>{for(let y of f)c.unshift(F(D.docs[y.index])),v(D.docs,y.index)})}let s=(d.get(e.folderUrl)??[]).filter(a=>a.index<e.index).length,o=e.index-s;return r.change(a=>{a.docs.splice(o,0,...c)}),U(e.folderUrl,o,c)}async function T(r,e,n,t){let i=(t.draggedItems??[]).filter(o=>o.url&&o.url!==n.folderUrl),d=new Set(e.doc()?.docs?.map(o=>o.url)??[]),c=i.filter(o=>!d.has(o.url));if(i.length>0&&c.length===0){let o=i[0].name;throw new p(i.length===1&&o?`\u201C${o}\u201D is already in this folder.`:"Those are already in this folder.")}let s=(await Promise.all(c.map(async o=>{if(o.name&&o.type)return{url:o.url,name:o.name,type:o.type};try{return await A(r,o.url)}catch(a){return m("Failed to resolve dropped doc:",o.url,a),null}}))).filter(o=>o!==null);if(s.length===0)throw new p("Couldn't open the dropped document.");return m(`Adding ${s.length} link(s) at index:`,n.index),e.change(o=>{o.docs.splice(n.index,0,...s)}),U(n.folderUrl,n.index,s)}async function R(r,e,n,t,i){m(`Copying ${n.length} item(s) to`,e);let d=[];for(let c of n){let o=(await x(t,i,c.folderUrl)).doc()?.docs?.[c.index];o&&d.push(F(o))}return r.change(c=>{c.docs.splice(e.index,0,...d)}),U(e.folderUrl,e.index,d)}export{E as a,$ as b,O as c,B as d,N as e,_ as f,j as g,z as h,V as i,W as j,X as k,m as l,p as m,Y as n,Z as o};
2
+ //# sourceMappingURL=chunk-3A65VAIS.js.map
@@ -0,0 +1,13 @@
1
+ import{b,d as h,h as v,i as m,w as _}from"./chunk-PVIUDN4Q.js";import{template as $}from"solid-js/web";import{delegateEvents as E}from"solid-js/web";import{setAttribute as T}from"solid-js/web";import{effect as x}from"solid-js/web";import{insert as f}from"solid-js/web";import{createComponent as l}from"solid-js/web";import{addEventListener as C}from"solid-js/web";import{use as L}from"solid-js/web";import{isValidAutomergeUrl as A}from"@automerge/automerge-repo/slim";import{createDocOfDatatype2 as F,getRegistry as I,isLoadablePlugin as S,isLoadedPlugin as P}from"@inkandswitch/patchwork-plugins";import{createSignal as U,lazy as M,onCleanup as y,onMount as O,Show as D}from"solid-js";var N=$("<span class=create-new-button__text>Create new"),q=$('<div class=create-new-button-anchor><button type=button class=create-new-button aria-label="create new">');async function z(t,n){if(S(n)&&(n=await I("patchwork:datatype").load(n.id)??n),!P(n))throw new Error("plugin not loaded after loading");let a=await F(n,t),s=a.doc();return{name:n.module.getTitle(s),type:n.id,url:a.url}}var c=M(()=>import("./create-new-menu-JPICLPWM.js").then(t=>({default:t.CreateNewMenu})));function R(t){let[n,a]=U(!1);O(()=>{let r=()=>void c.preload();if(typeof requestIdleCallback=="function"){let e=requestIdleCallback(r);y(()=>cancelIdleCallback(e))}else{let e=setTimeout(r,0);y(()=>clearTimeout(e))}});async function s(r){let e=await z(t.repo,r);t.changeFolder(o=>{o.docs.push(e)}),t.clearFilter(),t.open(e),a(!1)}async function g(r){let e=r.trim();if(!A(e))return;let o=await h(t.repo,e);t.changeFolder(i=>{i.docs.push(o)}),t.clearFilter(),t.open(o),a(!1)}let d=0;function k(r){a(!1),m(!0),r.dataTransfer.setData(v,"1"),r.dataTransfer.effectAllowed="all";let e=document.createElement("div");e.style.cssText=`
2
+ position: absolute;
3
+ top: -1000px;
4
+ background: var(--document-list-primary);
5
+ padding: 0.5rem 0.75rem;
6
+ border-radius: var(--document-list-radius);
7
+ font-family: inherit;
8
+ font-size: 0.9rem;
9
+ pointer-events: none;
10
+ color: var(--document-list-primary-line);
11
+ box-shadow: 0 2px 8px rgba(0,0,0,0.1);
12
+ `,e.textContent="new doc",document.body.appendChild(e),r.dataTransfer.setDragImage(e,10,10),setTimeout(()=>e.remove(),0)}let u;return(()=>{var r=q(),e=r.firstChild,o=u;return typeof o=="function"?L(o,r):u=r,C(e,"dragend",()=>{m(!1),_()}),C(e,"dragstart",t.draggable?k:void 0),e.$$click=()=>{performance.now()-d>200&&a(!0)},e.addEventListener("focus",()=>void c.preload()),e.addEventListener("pointerenter",()=>void c.preload()),f(e,l(b,{class:"create-new-button__icon"}),null),f(e,l(D,{get when(){return!t.square},get children(){return[" ",N()]}}),null),f(r,l(D,{get when(){return n()},get children(){return l(c,{get anchor(){return u.getBoundingClientRect()},onClose:()=>{a(!1),d=performance.now()},onPickDatatype:s,onSubmitUrl:g})}}),null),x(i=>{var p=!!t.square,w=t.draggable;return p!==i.e&&e.classList.toggle("create-new-button--square",i.e=p),w!==i.t&&T(e,"draggable",i.t=w),i},{e:void 0,t:void 0}),r})()}E(["click"]);export{z as a,R as b};
13
+ //# sourceMappingURL=chunk-B2O2X2JP.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/sideboard/create-new.tsx"],
4
+ "sourcesContent": ["import { template as _$template } from \"solid-js/web\";\nimport { delegateEvents as _$delegateEvents } from \"solid-js/web\";\nimport { setAttribute as _$setAttribute } from \"solid-js/web\";\nimport { effect as _$effect } from \"solid-js/web\";\nimport { insert as _$insert } from \"solid-js/web\";\nimport { createComponent as _$createComponent } from \"solid-js/web\";\nimport { addEventListener as _$addEventListener } from \"solid-js/web\";\nimport { use as _$use } from \"solid-js/web\";\nvar _tmpl$ = /*#__PURE__*/_$template(`<span class=create-new-button__text>Create new`),\n _tmpl$2 = /*#__PURE__*/_$template(`<div class=create-new-button-anchor><button type=button class=create-new-button aria-label=\"create new\">`);\nimport { isValidAutomergeUrl } from \"@automerge/automerge-repo/slim\";\nimport { createDocOfDatatype2, getRegistry, isLoadablePlugin, isLoadedPlugin } from \"@inkandswitch/patchwork-plugins\";\nimport { createSignal, lazy, onCleanup, onMount, Show } from \"solid-js\";\nimport { NewDocIcon } from \"./icons.tsx\";\nimport { docLinkFromUrl } from \"./lib/doc-link.ts\";\nimport { NEW_DOC_DND_TYPE, setNewDocDragging, clearDropTarget } from \"./dnd/dnd.ts\";\nexport async function createNew(repo, datatype) {\n if (isLoadablePlugin(datatype)) {\n const registry = getRegistry(\"patchwork:datatype\");\n datatype = (await registry.load(datatype.id)) ?? datatype;\n }\n if (!isLoadedPlugin(datatype)) {\n throw new Error(\"plugin not loaded after loading\");\n }\n const docHandle = await createDocOfDatatype2(datatype, repo);\n const doc = docHandle.doc();\n const name = datatype.module.getTitle(doc);\n return {\n name,\n type: datatype.id,\n url: docHandle.url\n };\n}\nconst CreateNewMenu = lazy(() => import(\"./create-new-menu.tsx\").then(m => ({\n default: m.CreateNewMenu\n})));\nexport default function CreateNew(props) {\n const [open, setOpen] = createSignal(false);\n onMount(() => {\n const preload = () => void CreateNewMenu.preload();\n if (typeof requestIdleCallback === \"function\") {\n const id = requestIdleCallback(preload);\n onCleanup(() => cancelIdleCallback(id));\n } else {\n const id = setTimeout(preload, 0);\n onCleanup(() => clearTimeout(id));\n }\n });\n async function selectDatatype(datatype) {\n const freshy = await createNew(props.repo, datatype);\n props.changeFolder(doc => {\n doc.docs.push(freshy);\n });\n props.clearFilter();\n props.open(freshy);\n setOpen(false);\n }\n async function handleUrlSubmit(url) {\n const trimmed = url.trim();\n if (!isValidAutomergeUrl(trimmed)) return;\n const docLink = await docLinkFromUrl(props.repo, trimmed);\n props.changeFolder(doc => {\n doc.docs.push(docLink);\n });\n props.clearFilter();\n props.open(docLink);\n setOpen(false);\n }\n let lastCloseAt = 0;\n function handleDragStart(event) {\n setOpen(false);\n setNewDocDragging(true);\n event.dataTransfer.setData(NEW_DOC_DND_TYPE, \"1\");\n event.dataTransfer.effectAllowed = \"all\";\n const preview = document.createElement(\"div\");\n preview.style.cssText = `\n position: absolute;\n top: -1000px;\n background: var(--document-list-primary);\n padding: 0.5rem 0.75rem;\n border-radius: var(--document-list-radius);\n font-family: inherit;\n font-size: 0.9rem;\n pointer-events: none;\n color: var(--document-list-primary-line);\n box-shadow: 0 2px 8px rgba(0,0,0,0.1);\n `;\n preview.textContent = \"new doc\";\n document.body.appendChild(preview);\n event.dataTransfer.setDragImage(preview, 10, 10);\n setTimeout(() => preview.remove(), 0);\n }\n let anchor;\n return (() => {\n var _el$ = _tmpl$2(),\n _el$2 = _el$.firstChild;\n var _ref$ = anchor;\n typeof _ref$ === \"function\" ? _$use(_ref$, _el$) : anchor = _el$;\n _$addEventListener(_el$2, \"dragend\", () => {\n setNewDocDragging(false);\n clearDropTarget();\n });\n _$addEventListener(_el$2, \"dragstart\", props.draggable ? handleDragStart : void 0);\n _el$2.$$click = () => {\n if (performance.now() - lastCloseAt > 200) setOpen(true);\n };\n _el$2.addEventListener(\"focus\", () => void CreateNewMenu.preload());\n _el$2.addEventListener(\"pointerenter\", () => void CreateNewMenu.preload());\n _$insert(_el$2, _$createComponent(NewDocIcon, {\n \"class\": \"create-new-button__icon\"\n }), null);\n _$insert(_el$2, _$createComponent(Show, {\n get when() {\n return !props.square;\n },\n get children() {\n return [\" \", _tmpl$()];\n }\n }), null);\n _$insert(_el$, _$createComponent(Show, {\n get when() {\n return open();\n },\n get children() {\n return _$createComponent(CreateNewMenu, {\n get anchor() {\n return anchor.getBoundingClientRect();\n },\n onClose: () => {\n setOpen(false);\n lastCloseAt = performance.now();\n },\n onPickDatatype: selectDatatype,\n onSubmitUrl: handleUrlSubmit\n });\n }\n }), null);\n _$effect(_p$ => {\n var _v$ = !!props.square,\n _v$2 = props.draggable;\n _v$ !== _p$.e && _el$2.classList.toggle(\"create-new-button--square\", _p$.e = _v$);\n _v$2 !== _p$.t && _$setAttribute(_el$2, \"draggable\", _p$.t = _v$2);\n return _p$;\n }, {\n e: undefined,\n t: undefined\n });\n return _el$;\n })();\n}\n_$delegateEvents([\"click\"]);"],
5
+ "mappings": "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",
6
+ "names": ["_$template", "_$delegateEvents", "_$setAttribute", "_$effect", "_$insert", "_$createComponent", "_$addEventListener", "_$use", "isValidAutomergeUrl", "createDocOfDatatype2", "getRegistry", "isLoadablePlugin", "isLoadedPlugin", "createSignal", "lazy", "onCleanup", "onMount", "Show", "_tmpl$", "_$template", "_tmpl$2", "createNew", "repo", "datatype", "isLoadablePlugin", "getRegistry", "isLoadedPlugin", "docHandle", "createDocOfDatatype2", "doc", "CreateNewMenu", "lazy", "m", "CreateNew", "props", "open", "setOpen", "createSignal", "onMount", "preload", "id", "onCleanup", "selectDatatype", "freshy", "handleUrlSubmit", "url", "trimmed", "isValidAutomergeUrl", "docLink", "docLinkFromUrl", "lastCloseAt", "handleDragStart", "event", "setNewDocDragging", "NEW_DOC_DND_TYPE", "preview", "anchor", "_el$", "_el$2", "_ref$", "_$use", "_$addEventListener", "clearDropTarget", "_$insert", "_$createComponent", "NewDocIcon", "Show", "_$effect", "_p$", "_v$", "_v$2", "_$setAttribute", "_$delegateEvents"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{template as p}from"solid-js/web";import{spread as m}from"solid-js/web";var x=p('<svg xmlns=http://www.w3.org/2000/svg width=24 height=24 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round class=search-icon><path d="m21 21-4.34-4.34"></path><circle cx=11 cy=11 r=8>');var D=p('<svg xmlns=http://www.w3.org/2000/svg width=16 height=16 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round class="new-doc-icon icon"><path d="M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z"></path><path d="M14 2v4a2 2 0 0 0 2 2h4"></path><path d="M9 15h6"></path><path d="M12 18v-6">'),w=p('<svg xmlns=http://www.w3.org/2000/svg width=16 height=16 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round><path d="m9 18 6-6-6-6">');function S(){return x()}function U(t){return(()=>{var e=D();return m(e,t,!0,!0),e})()}function M(t){return(()=>{var e=w();return m(e,t,!0,!0),e})()}import{getRegistry as k,isLoadedPlugin as v}from"@inkandswitch/patchwork-plugins";async function C(t,e){let d=(await t.find(e)).doc(),s=d?.["@patchwork"]?.type??"",l="Untitled";if(s){let f=k("patchwork:datatype"),i=f.get(s);i&&(await f.load(i.id),v(i)&&(l=i.module.getTitle(d)||l))}return{name:l,type:s,url:e}}import{createSignal as u}from"solid-js";var[P,B]=u(!1),[N,O]=u(!1),b="application/x-patchwork-new-doc",[E,L]=u(!1);function R(t){return t.dataTransfer?.types.includes(b)??!1}function V(t,e){return e==="inside"?{id:t.id,position:e,folderUrl:t.url,index:0}:{id:t.id,position:e,folderUrl:t.parentUrl,index:e==="above"?t.index:t.index+1}}function H(t,e){return{id:t,position:"end",folderUrl:t,index:e}}var n=null;function q(){return n}function o(t,e){return document.querySelectorAll(`[${t}="${CSS.escape(e)}"]`)}function h(t,e){if(t){for(let r of o("data-dnd-item",t.id))r.removeAttribute("data-dnd-droplist-state");for(let r of o("data-dnd-container",t.id))r.removeAttribute("data-drop-state")}if(e){if(e.position==="inside"||e.position==="end")for(let r of o("data-dnd-container",e.id))r.setAttribute("data-drop-state",e.position);if(e.position!=="end")for(let r of o("data-dnd-item",e.id))r.setAttribute("data-dnd-droplist-state",e.position)}}var c=null;function F(t){c=t}function W(t){return c!=null&&c===t}var a=new Map;function g(t,e){for(let r of o("data-dnd-item",t))e?r.setAttribute("aria-checked","true"):r.removeAttribute("aria-checked")}function Y(t,e){a.set(t,e),g(t,!0)}function Z(t){a.delete(t),g(t,!1)}function z(){for(let t of a.keys())g(t,!1);a.clear()}function G(t){for(let e of t)for(let r of o("data-dnd-item",e))r.setAttribute("data-dnd-dragging","")}function J(){for(let t of document.querySelectorAll("[data-dnd-dragging]"))t.removeAttribute("data-dnd-dragging")}function K(t,e){let r=e.getBoundingClientRect();return t-r.top<r.height/2}function Q(){h(n,null),n=null}function T(t){let e=n;!e&&!t||e&&t&&e.id===t.id&&e.position===t.position&&e.folderUrl===t.folderUrl&&e.index===t.index||(h(e,t),n=t)}export{S as a,U as b,M as c,C as d,B as e,N as f,O as g,b as h,L as i,R as j,V as k,H as l,q as m,F as n,W as o,a as p,Y as q,Z as r,z as s,G as t,J as u,K as v,Q as w,T as x};
2
+ //# sourceMappingURL=chunk-PVIUDN4Q.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/sideboard/icons.tsx", "../src/sideboard/lib/doc-link.ts", "../src/sideboard/dnd/dnd.ts"],
4
+ "sourcesContent": ["import { template as _$template } from \"solid-js/web\";\nimport { spread as _$spread } from \"solid-js/web\";\nvar _tmpl$ = /*#__PURE__*/_$template(`<svg xmlns=http://www.w3.org/2000/svg width=24 height=24 viewBox=\"0 0 24 24\"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round class=search-icon><path d=\"m21 21-4.34-4.34\"></path><circle cx=11 cy=11 r=8>`),\n _tmpl$2 = /*#__PURE__*/_$template(`<svg xmlns=http://www.w3.org/2000/svg width=16 height=16 viewBox=\"0 0 24 24\"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round class=\"plus-icon icon\"><path d=\"M5 12h14\"></path><path d=\"M12 5v14\">`),\n _tmpl$3 = /*#__PURE__*/_$template(`<svg xmlns=http://www.w3.org/2000/svg width=16 height=16 viewBox=\"0 0 24 24\"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round class=\"new-doc-icon icon\"><path d=\"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z\"></path><path d=\"M14 2v4a2 2 0 0 0 2 2h4\"></path><path d=\"M9 15h6\"></path><path d=\"M12 18v-6\">`),\n _tmpl$4 = /*#__PURE__*/_$template(`<svg xmlns=http://www.w3.org/2000/svg width=16 height=16 viewBox=\"0 0 24 24\"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round><path d=\"m9 18 6-6-6-6\">`);\nexport function SearchIcon() {\n return _tmpl$();\n}\nexport function PlusIcon(props) {\n return (() => {\n var _el$2 = _tmpl$2();\n _$spread(_el$2, props, true, true);\n return _el$2;\n })();\n}\nexport function NewDocIcon(props) {\n return (() => {\n var _el$3 = _tmpl$3();\n _$spread(_el$3, props, true, true);\n return _el$3;\n })();\n}\nexport function Chevron(props) {\n return (() => {\n var _el$4 = _tmpl$4();\n _$spread(_el$4, props, true, true);\n return _el$4;\n })();\n}", "import type { AutomergeUrl, Repo } from \"@automerge/automerge-repo/slim\";\nimport { getRegistry, isLoadedPlugin } from \"@inkandswitch/patchwork-plugins\";\nimport type {\n DocLink,\n HasPatchworkMetadata,\n} from \"@inkandswitch/patchwork-filesystem\";\n\n// Resolve a bare automerge url into a DocLink by reading the doc's\n// patchwork metadata and asking its datatype for a title\nexport async function docLinkFromUrl(\n repo: Repo,\n url: AutomergeUrl\n): Promise<DocLink> {\n const handle = await repo.find<Partial<HasPatchworkMetadata>>(url);\n const doc = handle.doc();\n const type = doc?.[\"@patchwork\"]?.type ?? \"\";\n let name = \"Untitled\";\n\n if (type) {\n const registry = getRegistry(\"patchwork:datatype\");\n const datatype = registry.get(type);\n if (datatype) {\n await registry.load(datatype.id);\n if (isLoadedPlugin(datatype)) {\n name = datatype.module.getTitle(doc) || name;\n }\n }\n }\n\n return { name, type, url };\n}\n", "import { createSignal } from \"solid-js\";\nimport type { AutomergeUrl } from \"@automerge/automerge-repo/slim\";\n\nexport const [dragging, setDragging] = createSignal(false);\nexport const [copyMode, setCopyMode] = createSignal(false);\n\n// Dragging the \"new document\" button. Carries no document \u2014 on drop it asks the\n// list to open a pending-doc placeholder at the drop location instead of moving\n// anything.\nexport const NEW_DOC_DND_TYPE = \"application/x-patchwork-new-doc\";\nexport const [newDocDragging, setNewDocDragging] = createSignal(false);\n\nexport function isNewDocDrag(event: DragEvent) {\n return event.dataTransfer?.types.includes(NEW_DOC_DND_TYPE) ?? false;\n}\n\n/**\n * Where a drop will land. It's the one answer both the drop line (while\n * dragging) and the drop itself use, so the picture can't disagree with the\n * result: `folderUrl` + `index` is the insertion point, and `id` + `position`\n * say what to draw.\n *\n * - above/below: a line on the row whose `data-dnd-item` is `id`\n * - inside: the folder whose `data-dnd-container` is `id` lights up\n * - end: a line after the last row of the list whose container is `id`\n */\nexport type DropSpot = {\n id: string;\n position: \"above\" | \"below\" | \"inside\" | \"end\";\n folderUrl: AutomergeUrl;\n index: number;\n};\n\n/** The spot for a row: above/below go into its parent, inside into itself. */\nexport function rowSpot(\n row: { id: string; url: AutomergeUrl; parentUrl: AutomergeUrl; index: number },\n position: \"above\" | \"below\" | \"inside\"\n): DropSpot {\n if (position === \"inside\") {\n return { id: row.id, position, folderUrl: row.url, index: 0 };\n }\n return {\n id: row.id,\n position,\n folderUrl: row.parentUrl,\n index: position === \"above\" ? row.index : row.index + 1,\n };\n}\n\n/** The spot after the last row of a folder's list. */\nexport function endSpot(folderUrl: AutomergeUrl, length: number): DropSpot {\n return { id: folderUrl, position: \"end\", folderUrl, index: length };\n}\n\n// Drop target is a plain variable \u2014 not a SolidJS signal.\n// Visual state is updated via direct DOM manipulation to avoid\n// O(n) reactive updates across all items on every dragover.\nlet currentDropTarget: DropSpot | null = null;\n\nexport function getDropTarget() {\n return currentDropTarget;\n}\n\n// Every mounted copy of a row shares its id (the same folder can be open in\n// two places, or in two panels), and they all stand for the same docref, so\n// every copy gets the mark \u2014 not just whichever one comes first in the DOM.\nfunction marked(attribute: string, id: string) {\n return document.querySelectorAll(`[${attribute}=\"${CSS.escape(id)}\"]`);\n}\n\nfunction updateDropTargetDOM(\n oldTarget: DropSpot | null,\n newTarget: DropSpot | null\n) {\n if (oldTarget) {\n for (const item of marked(\"data-dnd-item\", oldTarget.id))\n item.removeAttribute(\"data-dnd-droplist-state\");\n for (const container of marked(\"data-dnd-container\", oldTarget.id))\n container.removeAttribute(\"data-drop-state\");\n }\n if (newTarget) {\n if (newTarget.position === \"inside\" || newTarget.position === \"end\") {\n for (const container of marked(\"data-dnd-container\", newTarget.id))\n container.setAttribute(\"data-drop-state\", newTarget.position);\n }\n if (newTarget.position !== \"end\") {\n for (const item of marked(\"data-dnd-item\", newTarget.id))\n item.setAttribute(\"data-dnd-droplist-state\", newTarget.position);\n }\n }\n}\n\n// Identity for the \"did this drag start and end in the same view?\" question.\n// The answer decides move (\u2192 in-view) vs add-link (\u2192 cross-view or external).\n//\n// The tool id can't answer it: the sideboard is shown through patchwork-view's\n// *fallback* path, which never sets the `tool-id` attribute, so element.toolId\n// is null \u2014 and even when set it names the tool *type*, not the instance, so\n// two side-by-side views would collide. The <patchwork-view> element itself is\n// the instance identity. We're single-context on the web (dragstart and drop\n// run in the same window), so plain reference equality is all we need: remember\n// the origin element on dragstart, compare it on drop, clear it on dragend.\nlet dragOriginView: object | null = null;\nexport function setDragOriginView(element: object | null) {\n dragOriginView = element;\n}\nexport function isSameDragOriginView(element: object): boolean {\n return dragOriginView != null && dragOriginView === element;\n}\n\nexport type SideboardDragAndDropItem = {\n id: string;\n url: AutomergeUrl;\n type: string;\n name: string;\n source: string;\n};\n\n// Plain Map \u2014 not reactive. aria-checked is updated via DOM manipulation\n// to avoid O(n) reactive updates when selection changes.\nexport const dragstack = new Map<string, SideboardDragAndDropItem>();\n\nfunction setDragChecked(id: string, checked: boolean) {\n for (const el of marked(\"data-dnd-item\", id)) {\n if (checked) {\n el.setAttribute(\"aria-checked\", \"true\");\n } else {\n el.removeAttribute(\"aria-checked\");\n }\n }\n}\n\nexport function addToDragstack(id: string, item: SideboardDragAndDropItem) {\n dragstack.set(id, item);\n setDragChecked(id, true);\n}\n\nexport function removeFromDragstack(id: string) {\n dragstack.delete(id);\n setDragChecked(id, false);\n}\n\nexport function clearDragstack() {\n for (const id of dragstack.keys()) {\n setDragChecked(id, false);\n }\n dragstack.clear();\n}\n\nexport function setDragSourceItems(ids: string[]) {\n for (const id of ids) {\n for (const el of marked(\"data-dnd-item\", id))\n el.setAttribute(\"data-dnd-dragging\", \"\");\n }\n}\n\nexport function clearDragSourceItems() {\n for (const el of document.querySelectorAll(\"[data-dnd-dragging]\")) {\n el.removeAttribute(\"data-dnd-dragging\");\n }\n}\n\nexport function isAbove(clientY: number, element: Element) {\n const rect = element.getBoundingClientRect();\n const offset = clientY - rect.top;\n return offset < rect.height / 2;\n}\n\nexport function clearDropTarget() {\n updateDropTargetDOM(currentDropTarget, null);\n currentDropTarget = null;\n}\n\nexport function setDropTarget(target: DropSpot | null) {\n // Only update if actually changed\n const current = currentDropTarget;\n if (!current && !target) return;\n if (\n current &&\n target &&\n current.id === target.id &&\n current.position === target.position &&\n current.folderUrl === target.folderUrl &&\n current.index === target.index\n ) {\n return;\n }\n\n updateDropTargetDOM(current, target);\n currentDropTarget = target;\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["_$template", "_$spread", "_tmpl$", "_tmpl$3", "_$template", "_tmpl$4", "SearchIcon", "_tmpl$", "NewDocIcon", "props", "_el$3", "_tmpl$3", "_$spread", "Chevron", "_el$4", "_tmpl$4", "getRegistry", "isLoadedPlugin", "docLinkFromUrl", "repo", "url", "doc", "type", "name", "registry", "datatype", "createSignal", "dragging", "setDragging", "copyMode", "setCopyMode", "NEW_DOC_DND_TYPE", "newDocDragging", "setNewDocDragging", "isNewDocDrag", "event", "rowSpot", "row", "position", "endSpot", "folderUrl", "length", "currentDropTarget", "getDropTarget", "marked", "attribute", "id", "updateDropTargetDOM", "oldTarget", "newTarget", "item", "container", "dragOriginView", "setDragOriginView", "element", "isSameDragOriginView", "dragstack", "setDragChecked", "checked", "el", "addToDragstack", "removeFromDragstack", "clearDragstack", "setDragSourceItems", "ids", "clearDragSourceItems", "isAbove", "clientY", "rect", "clearDropTarget", "setDropTarget", "target", "current"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{c as _}from"./chunk-PVIUDN4Q.js";import{getRegistry as w,getSupportedToolsForType as T}from"@inkandswitch/patchwork-plugins";import{createEffect as C,createRoot as M,onCleanup as h}from"solid-js";import{createStore as v,reconcile as y}from"solid-js/store";function te(n){let o=w("patchwork:datatype"),[r,t]=v(o.filter(n)),i=o.on("changed",()=>t(y(o.filter(n))));return h(i),r}function R(n){let o=new Map;return r=>{if(!o.has(r)){let i,s=M(c=>(i=c,n(r)));o.set(r,{value:s,refCount:0,dispose:i})}let t=o.get(r);return t.refCount++,h(()=>{t.refCount--,t.refCount===0&&(t.dispose(),o.delete(r))}),t.value}}var E=R(n=>{let o=w("patchwork:tool"),[r,t]=v([]),i=()=>{let c=T(n);t(y(c))};i();let s=o.on("changed",i);return h(s),r});function oe(n,o){let r=typeof n=="function"?n():n,t=E(r);if(o?.includeUnlisted)return t;let[i,s]=v([]);return C(()=>{s(y(t.filter(c=>!c.unlisted)))}),i}import{template as $}from"solid-js/web";import{delegateEvents as A}from"solid-js/web";import{setAttribute as S}from"solid-js/web";import{spread as O}from"solid-js/web";import{mergeProps as F}from"solid-js/web";import{createComponent as d}from"solid-js/web";import{setStyleProperty as I}from"solid-js/web";import{className as U}from"solid-js/web";import{effect as P}from"solid-js/web";import{insert as m}from"solid-js/web";import{use as D}from"solid-js/web";import{createContext as N,createSignal as q,createUniqueId as B,onCleanup as G,onMount as W,Show as z,splitProps as K,useContext as x}from"solid-js";import{Portal as j}from"solid-js/web";var V=$("<div role=menu tabindex=-1 data-expanded style=position:fixed>"),H=$("<div role=menuitem tabindex=-1 class=popmenu__item>"),L=$("<div role=menuitem aria-haspopup=menu tabindex=-1 class=popmenu__sub-trigger>"),b=2,p=4,g=N(),J='[role="menuitem"]:not([aria-disabled="true"])';function k(n){return[...n.querySelectorAll(J)]}function Q(n,o,r){let t="width"in o?o:new DOMRect(o.x,o.y,0,0),{width:i,height:s}=n.getBoundingClientRect(),c=r==="right-start"?t.right+b:t.left,e=r==="right-start"?t.top:t.bottom+b;c+i>innerWidth-p&&(c=r==="right-start"?t.left-i-b:innerWidth-p-i),e+s>innerHeight-p&&(e=innerHeight-p-s),c=Math.max(p,c),e=Math.max(p,e),n.style.left=`${c}px`,n.style.top=`${e}px`;let u=r==="right-start"?c<t.left?t.left:t.right:t.left,a=r==="right-start"?t.top:t.bottom;n.style.transformOrigin=`${u-c}px ${a-e}px`}function X(n){let o=x(g),[r,t]=q(null),i,s={closeRoot:o?.closeRoot??n.onClose,openSub:r,setOpenSub:t,depth:(o?.depth??-1)+1};W(()=>{Q(i,n.anchor,n.placement??"bottom-start"),n.autofocus!==!1&&i.focus({preventScroll:!0});let e=u=>{u.target?.closest?.('[role="menu"]')||s.closeRoot()};document.addEventListener("pointerdown",e,!0),G(()=>document.removeEventListener("pointerdown",e,!0))});function c(e){if(e.target!==i&&!k(i).includes(e.target)){e.key==="Escape"&&s.closeRoot();return}let u=k(i),a=u.indexOf(document.activeElement),l=f=>u.at((f%u.length+u.length)%u.length)?.focus();switch(e.key){case"Escape":s.closeRoot();break;case"ArrowDown":l(a+1);break;case"ArrowUp":l(a<0?-1:a-1);break;case"Home":l(0);break;case"End":l(-1);break;case"ArrowLeft":o&&o.setOpenSub(null);break;case"Enter":case" ":a>=0&&u[a].click();break;default:return}e.preventDefault(),e.stopPropagation()}return d(j,{get children(){return d(g.Provider,{value:s,get children(){var e=V();e.$$focusout=a=>a.target.removeAttribute("data-highlighted"),e.$$focusin=a=>a.target.setAttribute("data-highlighted",""),e.$$keydown=c;var u=i;return typeof u=="function"?D(u,e):i=e,m(e,()=>n.children),P(a=>{var l=n.class??"popmenu__content",f=2+s.depth;return l!==a.e&&U(e,a.e=l),f!==a.t&&I(e,"z-index",a.t=f),a},{e:void 0,t:void 0}),e}})}})}function ye(n){let o=x(g),[r,t]=K(n,["onSelect","children","onPointerMove"]);return(()=>{var i=H();return O(i,F(t,{onPointerMove:s=>{s.currentTarget.focus(),o.setOpenSub(null),typeof r.onPointerMove=="function"&&r.onPointerMove(s)},onClick:()=>{r.onSelect(),o.closeRoot()}}),!1,!0),m(i,()=>r.children),i})()}function be(n){let o=x(g),r=B(),t,i=()=>o.openSub()===r;return[(()=>{var s=L();s.$$keydown=e=>{e.key!=="ArrowRight"&&e.key!=="Enter"&&e.key!==" "||(o.setOpenSub(r),e.preventDefault(),e.stopPropagation())},s.$$click=()=>o.setOpenSub(r),s.$$pointermove=e=>{e.currentTarget.focus(),o.setOpenSub(r)};var c=t;return typeof c=="function"?D(c,s):t=s,m(s,()=>n.label,null),m(s,d(_,{class:"popmenu__sub-chevron","aria-hidden":"true"}),null),P(e=>{var u=i(),a=i()?"":void 0;return u!==e.e&&S(s,"aria-expanded",e.e=u),a!==e.t&&S(s,"data-expanded",e.t=a),e},{e:void 0,t:void 0}),s})(),d(z,{get when(){return i()},get children(){return d(X,{get anchor(){return t.getBoundingClientRect()},placement:"right-start",class:"popmenu__sub-content",onClose:()=>{o.setOpenSub(null),t.focus()},get children(){return n.children}})}})]}A(["keydown","focusin","focusout","pointermove","click"]);export{te as a,oe as b,X as c,ye as d,be as e};
2
+ //# sourceMappingURL=chunk-WIFOKAHN.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/sideboard/lib/solid-plugins.ts", "../src/sideboard/popmenu.tsx"],
4
+ "sourcesContent": ["import type {\n ToolDescription,\n DatatypeDescription,\n Plugin,\n} from \"@inkandswitch/patchwork-plugins\";\nimport {\n getRegistry,\n getSupportedToolsForType,\n} from \"@inkandswitch/patchwork-plugins\";\nimport { createEffect, createRoot, onCleanup } from \"solid-js\";\nimport { createStore, reconcile } from \"solid-js/store\";\n\nexport type MaybeAccessor<T> = T | (() => T);\n\n/**\n * Hook to get filtered datatype plugins\n */\nexport function useFilteredDatatypes(\n filter: (item: DatatypeDescription) => boolean\n): Plugin<DatatypeDescription>[] {\n const datatypeRegistry =\n getRegistry<DatatypeDescription>(\"patchwork:datatype\");\n const [plugins, setPlugins] = createStore(datatypeRegistry.filter(filter));\n const dispose = datatypeRegistry.on(\"changed\", () =>\n setPlugins(reconcile(datatypeRegistry.filter(filter)))\n );\n onCleanup(dispose);\n return plugins;\n}\n\n/**\n * Create a ref-counted shared reactive resource keyed by a string.\n * The factory runs once per unique key (inside its own reactive root).\n * When the last consumer unmounts, the root is disposed and the\n * entry is removed from the cache.\n */\nfunction createShared<V>(factory: (key: string) => V): (key: string) => V {\n const cache = new Map<\n string,\n { value: V; refCount: number; dispose: () => void }\n >();\n\n return (key: string) => {\n if (!cache.has(key)) {\n let dispose!: () => void;\n const value = createRoot((d) => {\n dispose = d;\n return factory(key);\n });\n cache.set(key, { value, refCount: 0, dispose });\n }\n\n const entry = cache.get(key)!;\n entry.refCount++;\n onCleanup(() => {\n entry.refCount--;\n if (entry.refCount === 0) {\n entry.dispose();\n cache.delete(key);\n }\n });\n\n return entry.value;\n };\n}\n\nconst useSharedToolsForType = createShared((type) => {\n const toolRegistry = getRegistry<ToolDescription>(\"patchwork:tool\");\n const [plugins, setPlugins] = createStore<Plugin<ToolDescription>[]>([]);\n\n const update = () => {\n const tools = getSupportedToolsForType(type);\n setPlugins(reconcile(tools));\n };\n update();\n\n const dispose = toolRegistry.on(\"changed\", update);\n onCleanup(dispose);\n\n return plugins;\n});\n\n/**\n * Hook to get tools that support a specific data type.\n * Shared across all callers for the same type \u2014 only one\n * store/listener exists per unique type string.\n */\nexport function useSupportedToolsForType(\n type: MaybeAccessor<string>,\n options?: { includeUnlisted?: boolean }\n): Plugin<ToolDescription>[] {\n const key = typeof type === \"function\" ? type() : type;\n const all = useSharedToolsForType(key);\n if (options?.includeUnlisted) return all;\n const [filtered, setFiltered] = createStore<Plugin<ToolDescription>[]>([]);\n createEffect(() => {\n setFiltered(reconcile(all.filter((t) => !t.unlisted)));\n });\n return filtered;\n}\n", "import { template as _$template } from \"solid-js/web\";\nimport { delegateEvents as _$delegateEvents } from \"solid-js/web\";\nimport { setAttribute as _$setAttribute } from \"solid-js/web\";\nimport { spread as _$spread } from \"solid-js/web\";\nimport { mergeProps as _$mergeProps } from \"solid-js/web\";\nimport { createComponent as _$createComponent } from \"solid-js/web\";\nimport { setStyleProperty as _$setStyleProperty } from \"solid-js/web\";\nimport { className as _$className } from \"solid-js/web\";\nimport { effect as _$effect } from \"solid-js/web\";\nimport { insert as _$insert } from \"solid-js/web\";\nimport { use as _$use } from \"solid-js/web\";\nvar _tmpl$ = /*#__PURE__*/_$template(`<div role=menu tabindex=-1 data-expanded style=position:fixed>`),\n _tmpl$2 = /*#__PURE__*/_$template(`<div role=menuitem tabindex=-1 class=popmenu__item>`),\n _tmpl$3 = /*#__PURE__*/_$template(`<div role=menuitem aria-haspopup=menu tabindex=-1 class=popmenu__sub-trigger>`);\nimport { createContext, createSignal, createUniqueId, onCleanup, onMount, Show, splitProps, useContext } from \"solid-js\";\nimport { Portal } from \"solid-js/web\";\nimport { Chevron } from \"./icons.tsx\";\nconst GUTTER = 2;\nconst MARGIN = 4;\nconst Ctx = createContext();\nconst ITEMS = '[role=\"menuitem\"]:not([aria-disabled=\"true\"])';\nfunction ownItems(menu) {\n return [...menu.querySelectorAll(ITEMS)];\n}\nfunction position(el, anchor, placement) {\n const a = \"width\" in anchor ? anchor : new DOMRect(anchor.x, anchor.y, 0, 0);\n const {\n width,\n height\n } = el.getBoundingClientRect();\n let left = placement === \"right-start\" ? a.right + GUTTER : a.left;\n let top = placement === \"right-start\" ? a.top : a.bottom + GUTTER;\n if (left + width > innerWidth - MARGIN) {\n left = placement === \"right-start\" ? a.left - width - GUTTER : innerWidth - MARGIN - width;\n }\n if (top + height > innerHeight - MARGIN) top = innerHeight - MARGIN - height;\n left = Math.max(MARGIN, left);\n top = Math.max(MARGIN, top);\n el.style.left = `${left}px`;\n el.style.top = `${top}px`;\n const x = placement === \"right-start\" ? left < a.left ? a.left : a.right : a.left;\n const y = placement === \"right-start\" ? a.top : a.bottom;\n el.style.transformOrigin = `${x - left}px ${y - top}px`;\n}\nexport function Menu(props) {\n const parent = useContext(Ctx);\n const [openSub, setOpenSub] = createSignal(null);\n let el;\n const ctx = {\n closeRoot: parent?.closeRoot ?? props.onClose,\n openSub,\n setOpenSub,\n depth: (parent?.depth ?? -1) + 1\n };\n onMount(() => {\n position(el, props.anchor, props.placement ?? \"bottom-start\");\n if (props.autofocus !== false) el.focus({\n preventScroll: true\n });\n const onPointerDown = e => {\n const t = e.target;\n if (t?.closest?.('[role=\"menu\"]')) return;\n ctx.closeRoot();\n };\n document.addEventListener(\"pointerdown\", onPointerDown, true);\n onCleanup(() => document.removeEventListener(\"pointerdown\", onPointerDown, true));\n });\n function onKeyDown(e) {\n if (e.target !== el && !ownItems(el).includes(e.target)) {\n if (e.key === \"Escape\") ctx.closeRoot();\n return;\n }\n const items = ownItems(el);\n const i = items.indexOf(document.activeElement);\n const focus = n => items.at((n % items.length + items.length) % items.length)?.focus();\n switch (e.key) {\n case \"Escape\":\n ctx.closeRoot();\n break;\n case \"ArrowDown\":\n focus(i + 1);\n break;\n case \"ArrowUp\":\n focus(i < 0 ? -1 : i - 1);\n break;\n case \"Home\":\n focus(0);\n break;\n case \"End\":\n focus(-1);\n break;\n case \"ArrowLeft\":\n if (parent) parent.setOpenSub(null);\n break;\n case \"Enter\":\n case \" \":\n if (i >= 0) items[i].click();\n break;\n default:\n return;\n }\n e.preventDefault();\n e.stopPropagation();\n }\n return _$createComponent(Portal, {\n get children() {\n return _$createComponent(Ctx.Provider, {\n value: ctx,\n get children() {\n var _el$ = _tmpl$();\n _el$.$$focusout = e => e.target.removeAttribute(\"data-highlighted\");\n _el$.$$focusin = e => e.target.setAttribute(\"data-highlighted\", \"\");\n _el$.$$keydown = onKeyDown;\n var _ref$ = el;\n typeof _ref$ === \"function\" ? _$use(_ref$, _el$) : el = _el$;\n _$insert(_el$, () => props.children);\n _$effect(_p$ => {\n var _v$ = props.class ?? \"popmenu__content\",\n _v$2 = 2 + ctx.depth;\n _v$ !== _p$.e && _$className(_el$, _p$.e = _v$);\n _v$2 !== _p$.t && _$setStyleProperty(_el$, \"z-index\", _p$.t = _v$2);\n return _p$;\n }, {\n e: undefined,\n t: undefined\n });\n return _el$;\n }\n });\n }\n });\n}\nexport function MenuItem(props) {\n const ctx = useContext(Ctx);\n const [local, rest] = splitProps(props, [\"onSelect\", \"children\", \"onPointerMove\"]);\n return (() => {\n var _el$2 = _tmpl$2();\n _$spread(_el$2, _$mergeProps(rest, {\n \"onPointerMove\": e => {\n e.currentTarget.focus();\n ctx.setOpenSub(null);\n if (typeof local.onPointerMove === \"function\") local.onPointerMove(e);\n },\n \"onClick\": () => {\n local.onSelect();\n ctx.closeRoot();\n }\n }), false, true);\n _$insert(_el$2, () => local.children);\n return _el$2;\n })();\n}\nexport function SubMenu(props) {\n const ctx = useContext(Ctx);\n const id = createUniqueId();\n let trigger;\n const open = () => ctx.openSub() === id;\n return [(() => {\n var _el$3 = _tmpl$3();\n _el$3.$$keydown = e => {\n if (e.key !== \"ArrowRight\" && e.key !== \"Enter\" && e.key !== \" \") return;\n ctx.setOpenSub(id);\n e.preventDefault();\n e.stopPropagation();\n };\n _el$3.$$click = () => ctx.setOpenSub(id);\n _el$3.$$pointermove = e => {\n e.currentTarget.focus();\n ctx.setOpenSub(id);\n };\n var _ref$2 = trigger;\n typeof _ref$2 === \"function\" ? _$use(_ref$2, _el$3) : trigger = _el$3;\n _$insert(_el$3, () => props.label, null);\n _$insert(_el$3, _$createComponent(Chevron, {\n \"class\": \"popmenu__sub-chevron\",\n \"aria-hidden\": \"true\"\n }), null);\n _$effect(_p$ => {\n var _v$3 = open(),\n _v$4 = open() ? \"\" : void 0;\n _v$3 !== _p$.e && _$setAttribute(_el$3, \"aria-expanded\", _p$.e = _v$3);\n _v$4 !== _p$.t && _$setAttribute(_el$3, \"data-expanded\", _p$.t = _v$4);\n return _p$;\n }, {\n e: undefined,\n t: undefined\n });\n return _el$3;\n })(), _$createComponent(Show, {\n get when() {\n return open();\n },\n get children() {\n return _$createComponent(Menu, {\n get anchor() {\n return trigger.getBoundingClientRect();\n },\n placement: \"right-start\",\n \"class\": \"popmenu__sub-content\",\n onClose: () => {\n ctx.setOpenSub(null);\n trigger.focus();\n },\n get children() {\n return props.children;\n }\n });\n }\n })];\n}\n_$delegateEvents([\"keydown\", \"focusin\", \"focusout\", \"pointermove\", \"click\"]);"],
5
+ "mappings": "wCAKA,OACE,eAAAA,EACA,4BAAAC,MACK,kCACP,OAAS,gBAAAC,EAAc,cAAAC,EAAY,aAAAC,MAAiB,WACpD,OAAS,eAAAC,EAAa,aAAAC,MAAiB,iBAOhC,SAASC,GACdC,EAC+B,CAC/B,IAAMC,EACJT,EAAiC,oBAAoB,EACjD,CAACU,EAASC,CAAU,EAAIN,EAAYI,EAAiB,OAAOD,CAAM,CAAC,EACnEI,EAAUH,EAAiB,GAAG,UAAW,IAC7CE,EAAWL,EAAUG,EAAiB,OAAOD,CAAM,CAAC,CAAC,CACvD,EACA,OAAAJ,EAAUQ,CAAO,EACVF,CACT,CAQA,SAASG,EAAgBC,EAAiD,CACxE,IAAMC,EAAQ,IAAI,IAKlB,OAAQC,GAAgB,CACtB,GAAI,CAACD,EAAM,IAAIC,CAAG,EAAG,CACnB,IAAIJ,EACEK,EAAQd,EAAYe,IACxBN,EAAUM,EACHJ,EAAQE,CAAG,EACnB,EACDD,EAAM,IAAIC,EAAK,CAAE,MAAAC,EAAO,SAAU,EAAG,QAAAL,CAAQ,CAAC,CAChD,CAEA,IAAMO,EAAQJ,EAAM,IAAIC,CAAG,EAC3B,OAAAG,EAAM,WACNf,EAAU,IAAM,CACde,EAAM,WACFA,EAAM,WAAa,IACrBA,EAAM,QAAQ,EACdJ,EAAM,OAAOC,CAAG,EAEpB,CAAC,EAEMG,EAAM,KACf,CACF,CAEA,IAAMC,EAAwBP,EAAcQ,GAAS,CACnD,IAAMC,EAAetB,EAA6B,gBAAgB,EAC5D,CAACU,EAASC,CAAU,EAAIN,EAAuC,CAAC,CAAC,EAEjEkB,EAAS,IAAM,CACnB,IAAMC,EAAQvB,EAAyBoB,CAAI,EAC3CV,EAAWL,EAAUkB,CAAK,CAAC,CAC7B,EACAD,EAAO,EAEP,IAAMX,EAAUU,EAAa,GAAG,UAAWC,CAAM,EACjD,OAAAnB,EAAUQ,CAAO,EAEVF,CACT,CAAC,EAOM,SAASe,GACdJ,EACAK,EAC2B,CAC3B,IAAMV,EAAM,OAAOK,GAAS,WAAaA,EAAK,EAAIA,EAC5CM,EAAMP,EAAsBJ,CAAG,EACrC,GAAIU,GAAS,gBAAiB,OAAOC,EACrC,GAAM,CAACC,EAAUC,CAAW,EAAIxB,EAAuC,CAAC,CAAC,EACzE,OAAAH,EAAa,IAAM,CACjB2B,EAAYvB,EAAUqB,EAAI,OAAQG,GAAM,CAACA,EAAE,QAAQ,CAAC,CAAC,CACvD,CAAC,EACMF,CACT,CCnGA,OAAS,YAAYG,MAAkB,eACvC,OAAS,kBAAkBC,MAAwB,eACnD,OAAS,gBAAgBC,MAAsB,eAC/C,OAAS,UAAUC,MAAgB,eACnC,OAAS,cAAcC,MAAoB,eAC3C,OAAS,mBAAmBC,MAAyB,eACrD,OAAS,oBAAoBC,MAA0B,eACvD,OAAS,aAAaC,MAAmB,eACzC,OAAS,UAAUC,MAAgB,eACnC,OAAS,UAAUC,MAAgB,eACnC,OAAS,OAAOC,MAAa,eAI7B,OAAS,iBAAAC,EAAe,gBAAAC,EAAc,kBAAAC,EAAgB,aAAAC,EAAW,WAAAC,EAAS,QAAAC,EAAM,cAAAC,EAAY,cAAAC,MAAkB,WAC9G,OAAS,UAAAC,MAAc,eAJvB,IAAIC,EAAsBC,EAAW,gEAAgE,EACnGC,EAAuBD,EAAW,qDAAqD,EACvFE,EAAuBF,EAAW,+EAA+E,EAI7GG,EAAS,EACTC,EAAS,EACTC,EAAMC,EAAc,EACpBC,EAAQ,gDACd,SAASC,EAASC,EAAM,CACtB,MAAO,CAAC,GAAGA,EAAK,iBAAiBF,CAAK,CAAC,CACzC,CACA,SAASG,EAASC,EAAIC,EAAQC,EAAW,CACvC,IAAMC,EAAI,UAAWF,EAASA,EAAS,IAAI,QAAQA,EAAO,EAAGA,EAAO,EAAG,EAAG,CAAC,EACrE,CACJ,MAAAG,EACA,OAAAC,CACF,EAAIL,EAAG,sBAAsB,EACzBM,EAAOJ,IAAc,cAAgBC,EAAE,MAAQX,EAASW,EAAE,KAC1DI,EAAML,IAAc,cAAgBC,EAAE,IAAMA,EAAE,OAASX,EACvDc,EAAOF,EAAQ,WAAaX,IAC9Ba,EAAOJ,IAAc,cAAgBC,EAAE,KAAOC,EAAQZ,EAAS,WAAaC,EAASW,GAEnFG,EAAMF,EAAS,YAAcZ,IAAQc,EAAM,YAAcd,EAASY,GACtEC,EAAO,KAAK,IAAIb,EAAQa,CAAI,EAC5BC,EAAM,KAAK,IAAId,EAAQc,CAAG,EAC1BP,EAAG,MAAM,KAAO,GAAGM,CAAI,KACvBN,EAAG,MAAM,IAAM,GAAGO,CAAG,KACrB,IAAMC,EAAIN,IAAc,cAAgBI,EAAOH,EAAE,KAAOA,EAAE,KAAOA,EAAE,MAAQA,EAAE,KACvEM,EAAIP,IAAc,cAAgBC,EAAE,IAAMA,EAAE,OAClDH,EAAG,MAAM,gBAAkB,GAAGQ,EAAIF,CAAI,MAAMG,EAAIF,CAAG,IACrD,CACO,SAASG,EAAKC,EAAO,CAC1B,IAAMC,EAASC,EAAWnB,CAAG,EACvB,CAACoB,EAASC,CAAU,EAAIC,EAAa,IAAI,EAC3ChB,EACEiB,EAAM,CACV,UAAWL,GAAQ,WAAaD,EAAM,QACtC,QAAAG,EACA,WAAAC,EACA,OAAQH,GAAQ,OAAS,IAAM,CACjC,EACAM,EAAQ,IAAM,CACZnB,EAASC,EAAIW,EAAM,OAAQA,EAAM,WAAa,cAAc,EACxDA,EAAM,YAAc,IAAOX,EAAG,MAAM,CACtC,cAAe,EACjB,CAAC,EACD,IAAMmB,EAAgBC,GAAK,CACfA,EAAE,QACL,UAAU,eAAe,GAChCH,EAAI,UAAU,CAChB,EACA,SAAS,iBAAiB,cAAeE,EAAe,EAAI,EAC5DE,EAAU,IAAM,SAAS,oBAAoB,cAAeF,EAAe,EAAI,CAAC,CAClF,CAAC,EACD,SAASG,EAAU,EAAG,CACpB,GAAI,EAAE,SAAWtB,GAAM,CAACH,EAASG,CAAE,EAAE,SAAS,EAAE,MAAM,EAAG,CACnD,EAAE,MAAQ,UAAUiB,EAAI,UAAU,EACtC,MACF,CACA,IAAMM,EAAQ1B,EAASG,CAAE,EACnBwB,EAAID,EAAM,QAAQ,SAAS,aAAa,EACxCE,EAAQC,GAAKH,EAAM,IAAIG,EAAIH,EAAM,OAASA,EAAM,QAAUA,EAAM,MAAM,GAAG,MAAM,EACrF,OAAQ,EAAE,IAAK,CACb,IAAK,SACHN,EAAI,UAAU,EACd,MACF,IAAK,YACHQ,EAAMD,EAAI,CAAC,EACX,MACF,IAAK,UACHC,EAAMD,EAAI,EAAI,GAAKA,EAAI,CAAC,EACxB,MACF,IAAK,OACHC,EAAM,CAAC,EACP,MACF,IAAK,MACHA,EAAM,EAAE,EACR,MACF,IAAK,YACCb,GAAQA,EAAO,WAAW,IAAI,EAClC,MACF,IAAK,QACL,IAAK,IACCY,GAAK,GAAGD,EAAMC,CAAC,EAAE,MAAM,EAC3B,MACF,QACE,MACJ,CACA,EAAE,eAAe,EACjB,EAAE,gBAAgB,CACpB,CACA,OAAOG,EAAkBC,EAAQ,CAC/B,IAAI,UAAW,CACb,OAAOD,EAAkBjC,EAAI,SAAU,CACrC,MAAOuB,EACP,IAAI,UAAW,CACb,IAAIY,EAAOzC,EAAO,EAClByC,EAAK,WAAaT,GAAKA,EAAE,OAAO,gBAAgB,kBAAkB,EAClES,EAAK,UAAYT,GAAKA,EAAE,OAAO,aAAa,mBAAoB,EAAE,EAClES,EAAK,UAAYP,EACjB,IAAIQ,EAAQ9B,EACZ,cAAO8B,GAAU,WAAaC,EAAMD,EAAOD,CAAI,EAAI7B,EAAK6B,EACxDG,EAASH,EAAM,IAAMlB,EAAM,QAAQ,EACnCsB,EAASC,GAAO,CACd,IAAIC,EAAMxB,EAAM,OAAS,mBACvByB,EAAO,EAAInB,EAAI,MACjB,OAAAkB,IAAQD,EAAI,GAAKG,EAAYR,EAAMK,EAAI,EAAIC,CAAG,EAC9CC,IAASF,EAAI,GAAKI,EAAmBT,EAAM,UAAWK,EAAI,EAAIE,CAAI,EAC3DF,CACT,EAAG,CACD,EAAG,OACH,EAAG,MACL,CAAC,EACML,CACT,CACF,CAAC,CACH,CACF,CAAC,CACH,CACO,SAASU,GAAS5B,EAAO,CAC9B,IAAMM,EAAMJ,EAAWnB,CAAG,EACpB,CAAC8C,EAAOC,CAAI,EAAIC,EAAW/B,EAAO,CAAC,WAAY,WAAY,eAAe,CAAC,EACjF,OAAQ,IAAM,CACZ,IAAIgC,EAAQrD,EAAQ,EACpB,OAAAsD,EAASD,EAAOE,EAAaJ,EAAM,CACjC,cAAiBrB,GAAK,CACpBA,EAAE,cAAc,MAAM,EACtBH,EAAI,WAAW,IAAI,EACf,OAAOuB,EAAM,eAAkB,YAAYA,EAAM,cAAcpB,CAAC,CACtE,EACA,QAAW,IAAM,CACfoB,EAAM,SAAS,EACfvB,EAAI,UAAU,CAChB,CACF,CAAC,EAAG,GAAO,EAAI,EACfe,EAASW,EAAO,IAAMH,EAAM,QAAQ,EAC7BG,CACT,GAAG,CACL,CACO,SAASG,GAAQnC,EAAO,CAC7B,IAAMM,EAAMJ,EAAWnB,CAAG,EACpBqD,EAAKC,EAAe,EACtBC,EACEC,EAAO,IAAMjC,EAAI,QAAQ,IAAM8B,EACrC,MAAO,EAAE,IAAM,CACb,IAAII,EAAQ5D,EAAQ,EACpB4D,EAAM,UAAY,GAAK,CACjB,EAAE,MAAQ,cAAgB,EAAE,MAAQ,SAAW,EAAE,MAAQ,MAC7DlC,EAAI,WAAW8B,CAAE,EACjB,EAAE,eAAe,EACjB,EAAE,gBAAgB,EACpB,EACAI,EAAM,QAAU,IAAMlC,EAAI,WAAW8B,CAAE,EACvCI,EAAM,cAAgB,GAAK,CACzB,EAAE,cAAc,MAAM,EACtBlC,EAAI,WAAW8B,CAAE,CACnB,EACA,IAAIK,EAASH,EACb,cAAOG,GAAW,WAAarB,EAAMqB,EAAQD,CAAK,EAAIF,EAAUE,EAChEnB,EAASmB,EAAO,IAAMxC,EAAM,MAAO,IAAI,EACvCqB,EAASmB,EAAOxB,EAAkB0B,EAAS,CACzC,MAAS,uBACT,cAAe,MACjB,CAAC,EAAG,IAAI,EACRpB,EAASC,GAAO,CACd,IAAIoB,EAAOJ,EAAK,EACdK,EAAOL,EAAK,EAAI,GAAK,OACvB,OAAAI,IAASpB,EAAI,GAAKsB,EAAeL,EAAO,gBAAiBjB,EAAI,EAAIoB,CAAI,EACrEC,IAASrB,EAAI,GAAKsB,EAAeL,EAAO,gBAAiBjB,EAAI,EAAIqB,CAAI,EAC9DrB,CACT,EAAG,CACD,EAAG,OACH,EAAG,MACL,CAAC,EACMiB,CACT,GAAG,EAAGxB,EAAkB8B,EAAM,CAC5B,IAAI,MAAO,CACT,OAAOP,EAAK,CACd,EACA,IAAI,UAAW,CACb,OAAOvB,EAAkBjB,EAAM,CAC7B,IAAI,QAAS,CACX,OAAOuC,EAAQ,sBAAsB,CACvC,EACA,UAAW,cACX,MAAS,uBACT,QAAS,IAAM,CACbhC,EAAI,WAAW,IAAI,EACnBgC,EAAQ,MAAM,CAChB,EACA,IAAI,UAAW,CACb,OAAOtC,EAAM,QACf,CACF,CAAC,CACH,CACF,CAAC,CAAC,CACJ,CACA+C,EAAiB,CAAC,UAAW,UAAW,WAAY,cAAe,OAAO,CAAC",
6
+ "names": ["getRegistry", "getSupportedToolsForType", "createEffect", "createRoot", "onCleanup", "createStore", "reconcile", "useFilteredDatatypes", "filter", "datatypeRegistry", "plugins", "setPlugins", "dispose", "createShared", "factory", "cache", "key", "value", "d", "entry", "useSharedToolsForType", "type", "toolRegistry", "update", "tools", "useSupportedToolsForType", "options", "all", "filtered", "setFiltered", "t", "_$template", "_$delegateEvents", "_$setAttribute", "_$spread", "_$mergeProps", "_$createComponent", "_$setStyleProperty", "_$className", "_$effect", "_$insert", "_$use", "createContext", "createSignal", "createUniqueId", "onCleanup", "onMount", "Show", "splitProps", "useContext", "Portal", "_tmpl$", "_$template", "_tmpl$2", "_tmpl$3", "GUTTER", "MARGIN", "Ctx", "createContext", "ITEMS", "ownItems", "menu", "position", "el", "anchor", "placement", "a", "width", "height", "left", "top", "x", "y", "Menu", "props", "parent", "useContext", "openSub", "setOpenSub", "createSignal", "ctx", "onMount", "onPointerDown", "e", "onCleanup", "onKeyDown", "items", "i", "focus", "n", "_$createComponent", "Portal", "_el$", "_ref$", "_$use", "_$insert", "_$effect", "_p$", "_v$", "_v$2", "_$className", "_$setStyleProperty", "MenuItem", "local", "rest", "splitProps", "_el$2", "_$spread", "_$mergeProps", "SubMenu", "id", "createUniqueId", "trigger", "open", "_el$3", "_ref$2", "Chevron", "_v$3", "_v$4", "_$setAttribute", "Show", "_$delegateEvents"]
7
+ }
@@ -0,0 +1,15 @@
1
+ import{a as Re,b as Pe}from"./chunk-B2O2X2JP.js";import{a as P,b as N,c as z,d as _e,e as L,f as Fe,g as ie,h as Le,i as Ae,j as le,k as de,l as U,m as j,n as Ke}from"./chunk-3A65VAIS.js";import{a as ke,c as se,e as J,f as S,g as K,j as G,k as Q,l as Me,m as $e,n as Z,o as He,p as T,q as $,r as ee,s as H,t as Ie,u as Ue,v as Ce,w as _,x as I}from"./chunk-PVIUDN4Q.js";import{b as B,c as Ne}from"./chunk-FEMULUBJ.js";import{template as Lt}from"solid-js/web";import{delegateEvents as Pr}from"solid-js/web";import{setAttribute as Nr}from"solid-js/web";import{insert as Y}from"solid-js/web";import{effect as St}from"solid-js/web";import{createComponent as E}from"solid-js/web";import{use as Kr}from"solid-js/web";import{createEffect as _t,createMemo as Or,createSelector as Wr,createSignal as Yr,lazy as Vr,onCleanup as V,onMount as Xr,Show as Se,Suspense as Br}from"solid-js";import{render as zr}from"solid-js/web";var ce=new WeakMap;function Ye(e,t){let n=ce.get(e);return n||ce.set(e,n=new Map),n.set(t,(n.get(t)??0)+1),()=>{let s=n.get(t)-1;s?n.set(t,s):n.delete(t)}}function Ve(e,t){return!!ce.get(e)?.has(t)}var q=new Map,je=new Map,qe=new WeakSet;function Oe(e,t){let n=new Set(t?.map(i=>i.url)),s=je.get(e);if(s)for(let i of s){if(n.has(i))continue;let c=q.get(i);c?.delete(e),c?.size||q.delete(i)}for(let i of n){let c=q.get(i);c||q.set(i,c=new Set),c.add(e)}je.set(e,n)}var te=new Map;function O(e){qe.has(e)||(qe.add(e),Oe(e.url,e.doc()?.docs),e.on("change",()=>{Oe(e.url,e.doc()?.docs),te.clear()}))}function We(e,t){let n=new Set,s=[],i=new Map([[e,!0]]);function c(l){let f=i.get(l);if(f!==void 0)return f;i.set(l,!1);let u=!1;for(let a of q.get(l)??[])c(a)&&(n.add(a),u=!0);return i.set(l,u),u}for(let l of t)l!==e&&!c(l)&&s.push(l);return{folders:n,unreached:s}}async function At(e,t,n){let s=new Set(n),i=new Set,c=!1;async function l(f){if(!s.size||i.has(f))return;i.add(f);let u;try{let a=await e.find(f);O(a),u=a.doc()?.docs??[]}catch{c=!0;return}for(let a of u)s.delete(a.url);await Promise.all(u.filter(a=>a.type==="folder").map(a=>l(a.url)))}return await l(t),!s.size||!c}async function Xe(e,t,n){let s=We(t,n),i=te.get(t),c=s.unreached.filter(a=>!i?.has(a));if(!c.length)return s.folders;let l=await At(e,t,new Set(c)),{folders:f,unreached:u}=We(t,n);if(l&&u.length){let a=te.get(t)??new Set;for(let g of u)a.add(g);te.set(t,a)}return f}import{template as Ee}from"solid-js/web";import{effect as xr}from"solid-js/web";import{memo as pt}from"solid-js/web";import{insert as xe}from"solid-js/web";import{createComponent as b}from"solid-js/web";import{deleteAt as Tr,updateText as ht}from"@automerge/automerge-repo/slim";import{getRegistry as yt,isLoadedPlugin as Sr}from"@inkandswitch/patchwork-plugins";import{createEffect as wt,createMemo as _r,createSignal as Fr,For as Lr,lazy as Ar,Match as vt,onCleanup as be,Show as De,Suspense as kr,Switch as Mr,untrack as xt}from"solid-js";import{template as gt}from"solid-js/web";import{style as ut}from"solid-js/web";import{setAttribute as he}from"solid-js/web";import{effect as fr}from"solid-js/web";import{insert as ye}from"solid-js/web";import{createComponent as F}from"solid-js/web";import{addEventListener as gr}from"solid-js/web";import"solid-js/web";import{updateText as mt}from"@automerge/automerge-repo/slim";import{createEffect as we,createSignal as yr,onCleanup as wr,Show as ft,Suspense as vr}from"solid-js";import{template as Vt}from"solid-js/web";import{delegateEvents as Xt}from"solid-js/web";import{setAttribute as A}from"solid-js/web";import{effect as Bt}from"solid-js/web";import{insert as zt}from"solid-js/web";import{addEventListener as me}from"solid-js/web";import{use as Jt}from"solid-js/web";import{createEffect as Qt,onCleanup as ot}from"solid-js";import{isValidAutomergeUrl as ue}from"@automerge/automerge-repo/slim";var kt=["text/x-patchwork-dnd","text/x-patchwork-urls","text/uri-list","text/plain"];function Be(e){return!!(e&&kt.some(t=>e.types.includes(t)))}function Mt(e){let t=e.trim();if(ue(t))return t;let n=t.match(/#doc=([^&\s]+)/)?.[1];return n&&ue(`automerge:${n}`)?`automerge:${n}`:null}function ze(e){let t=e.dataTransfer;if(!t)return null;let n=t.getData("text/x-patchwork-dnd");if(n)try{let l=JSON.parse(n);if(Array.isArray(l?.items)&&l.items.length>0)return{source:l.source??"",items:l.items}}catch{}let s=t.getData("text/x-patchwork-urls");if(s)try{let l=JSON.parse(s),f=(Array.isArray(l)?l:[]).filter(u=>ue(u)).map(u=>({url:u}));if(f.length>0)return{source:"",items:f}}catch{}let c=(t.getData("text/uri-list")||t.getData("text/plain")).split(/\r?\n/).map(Mt).filter(l=>l!==null).map(l=>({url:l}));return c.length>0?{source:"",items:c}:null}var $t=new Set(["amtext","knitout","k","js","mjs","cjs","jsx","ts","mts","cts","tsx","json","jsonc","md","markdown","txt","csv","tsv","html","htm","css","svg","xml","yaml","yml","toml","ini","sh","py","log"]),Ht=new Set(["application/json","application/javascript","application/ecmascript","application/xml","application/x-sh"]),It=e=>{let t=e.split(";")[0].trim();return t.startsWith("text/")||Ht.has(t)||t.endsWith("+json")||t.endsWith("+xml")};async function Je(e,t,n,s){let i=[],c=[],l=s;for(let f of e)try{let u=f.name.split("."),a=u.length>1?u.pop():"",g=u.join("."),v=It(f.type)||$t.has(a.toLowerCase()),m=v?await f.text():new Uint8Array(await f.arrayBuffer()),o=v?"text/plain":"application/octet-stream",d=f.type!=="application/octet-stream"&&f.type,r=await n.create2({"@patchwork":{type:"file"},content:m,extension:a,mimeType:d||o,name:g}),p=Math.min(l,t.doc()?.docs?.length??0);t.change(h=>{h.docs.splice(p,0,{url:r.url,name:f.name,type:"file"})}),i.push({folderUrl:t.url,index:p,url:r.url}),l=p+1,U("FileDrop: Created file document:",f.name,r.url)}catch(u){U("FileDrop: Failed to create file document:",u),c.push(f.name)}return{landed:i,failed:c}}var Ut=5e3,Ct=700;async function C(e,t){let n=$e();if(_(),!n)return;let s=G(e),i=[...e.dataTransfer?.files??[]],c=i.length?null:ze(e),l=He(t.element),f=S();if(s){n.position==="inside"&&t.expand?.(),N({containerUrl:n.folderUrl,index:n.index});return}try{if(i.length){let a=await Rt(t,n),{landed:g,failed:v}=await Je(i,a,t.repo,n.index);if(Qe(g),v.length)throw new j(`Couldn't add ${v.join(", ")}.`);return}if(!c)throw U("No dnd data in drop event. types:",e.dataTransfer?.types),new j("That isn't something the list can hold.");let u=await Ke({draggedIds:c.items.map(a=>a.id??a.url),draggedUrls:c.items.map(a=>a.url),draggedItems:c.items,sourceToolId:c.source,copyMode:f},n,t.repo,t.rootFolderHandle,l);u&&Qe(u)}catch(u){U("Drop failed:",u),Pt(t.element,u instanceof j?u.message:"That drop didn't work.")}}async function Rt(e,t){if(t.folderUrl===e.rootFolderHandle.url)return e.rootFolderHandle;try{return await e.repo.find(t.folderUrl)}catch{throw new j("Couldn't open the folder to drop into.")}}var Ge;function Pt(e,t){clearTimeout(Ge),de({element:e,message:t}),Ge=setTimeout(()=>de(null),Ut)}function Nt({folderUrl:e,index:t,url:n}){return`[data-dnd-parent="${CSS.escape(e)}"][data-dnd-index="${t}"][data-doc-url="${CSS.escape(n)}"]`}function Qe(e,t=10){if(!e.length)return;let n=e.map(Nt).join(",");requestAnimationFrame(function s(){let i=document.querySelectorAll(n);if(i.length<e.length&&t-- >0){requestAnimationFrame(s);return}if(i.length){i.forEach(Ze);return}let c=[...new Set(e.map(l=>l.folderUrl))];for(let l of c)document.querySelectorAll(`[data-dnd-item="${CSS.escape(l)}"]`).forEach(Ze)})}function Ze(e){e.removeAttribute("data-dnd-landed"),e.offsetWidth,e.setAttribute("data-dnd-landed",""),setTimeout(()=>e.removeAttribute("data-dnd-landed"),Ct)}import{parseAutomergeUrl as Kt}from"@automerge/automerge-repo/slim";function et(e,t,n,s){let i=e.dataTransfer;T.has(t.id)||(H(),$(t.id,t));let c=[...T.values()],l=c.map(a=>a.url),f=c.map(a=>a.id);K(e.altKey),i.effectAllowed="all";let u=l.map(a=>location.protocol+"//"+location.host+`/#doc=${Kt(a).documentId}`).join(`\r
2
+ `)+`\r
3
+ `;i.items.add(u,"text/uri-list"),i.items.add(JSON.stringify(f),"text/x-sideboard-ids"),i.items.add(JSON.stringify(l),"text/x-patchwork-urls"),i.items.add(JSON.stringify({source:n.toolId,items:c}),"text/x-patchwork-dnd"),c.length===1&&s.addTo(i),i.setDragImage(jt(c.length,t.name,e.altKey),10,10),Ie(f),Z(n),J(!0)}function jt(e,t,n){let s=document.createElement("div");s.style.cssText=`
4
+ position: absolute;
5
+ top: -1000px;
6
+ background: var(--document-list-primary);
7
+ padding: 0.5rem 0.75rem;
8
+ border-radius: var(--document-list-radius);
9
+ font-family: inherit;
10
+ font-size: 0.9rem;
11
+ pointer-events: none;
12
+ color: var(--document-list-primary-line);
13
+ box-shadow: 0 2px 8px rgba(0,0,0,0.1);
14
+ `;let i=n?" (copy)":"";return s.textContent=e===1?t+i:`${e} items${i}`,document.body.appendChild(s),setTimeout(()=>s.remove(),0),s}import{getImportableUrlFromAutomergeUrl as qt}from"@inkandswitch/patchwork-filesystem";var Ot={png:"image/png",jpg:"image/jpeg",jpeg:"image/jpeg",gif:"image/gif",webp:"image/webp",avif:"image/avif",bmp:"image/bmp",tiff:"image/tiff",svg:"image/svg+xml",pdf:"application/pdf",mp4:"video/mp4",webm:"video/webm",mov:"video/quicktime",mp3:"audio/mpeg",wav:"audio/wav",ogg:"audio/ogg",txt:"text/plain",md:"text/markdown",csv:"text/csv",json:"application/json",html:"text/html",zip:"application/zip"};function tt(e){let t=e.includes(".")?e.split(".").pop().toLowerCase():"";return t?Ot[t]:void 0}function rt(e){let t=null,n=!1;return{prefetch(){n||e.type!=="file"||(n=!0,e.repo.find(e.url).then(s=>{let i=s?.doc();if(!i)return;let c=String(i.name??e.name??"file"),l=i.extension?`.${String(i.extension).replace(/^\.+/,"")}`:"",f=l&&!c.endsWith(l)?`${c}${l}`:c;t={mime:String(i.mimeType||tt(f)||"application/octet-stream"),filename:f}}).catch(()=>{}))},addTo(s){if(e.type!=="file")return;let i=t?.filename??e.name,c=t?.mime??tt(i)??"application/octet-stream";try{let l=new URL(qt(e.url),location.origin).href;s.setData("DownloadURL",`${c}:${i}:${l}`)}catch{}}}}function re(e,t){let n,s=!1;return{start(){return n||s?!1:(n=setTimeout(()=>{n=void 0,s=!0,t()},e),!0)},stop(){clearTimeout(n),n=void 0,s=!1}}}function Wt(e){for(let t=e.parentElement;t;t=t.parentElement){let n=getComputedStyle(t).overflowY;if((n==="auto"||n==="scroll")&&t.scrollHeight>t.clientHeight)return t}return document.scrollingElement??document.body}function Yt(e){let t=Wt(e),n=t.getBoundingClientRect(),s=t.querySelectorAll('.document-list-item[aria-selected="true"]');for(let i of s){let c=i.getBoundingClientRect();if(c.top>=n.top&&c.bottom<=n.bottom)return!0}return!1}function nt(e){Yt(e)||e.scrollIntoViewIfNeeded?.()}var Gt=Vt('<div role=treeitem tabindex=-1 aria-haspopup=menu class="popmenu__trigger document-list-item"draggable=true>'),Zt=1500;function W(e){let t,n=()=>e.type==="folder",s=()=>(e.parentFolderHandle??e.rootFolderHandle).url,i=rt(e);Qt(o=>(e.pressed&&!o&&t&&nt(t),e.pressed));let c=()=>({id:e.id,type:e.type,url:e.url,name:e.name,source:e.element.toolId}),l=re(Zt,()=>{t?.removeAttribute("data-dnd-springload"),e.openWith()});function f(){n()||T.has(e.id)||l.start()&&t?.setAttribute("data-dnd-springload","")}function u(){l.stop(),t?.removeAttribute("data-dnd-springload")}ot(u);function a(o,d){Ae({x:o,y:d,element:t,id:e.id,url:e.url,name:e.name,type:e.type,openWith:e.openWith,startRenaming:e.startRenaming,remove:e.remove,createInside:e.createInside})}let g,v=()=>clearTimeout(g);ot(v);function m(){H(),e.openWith()}return(()=>{var o=Gt();o.$$keydown=r=>{if(r.target!==t)return;let p=!(r.altKey||r.shiftKey||r.metaKey||r.ctrlKey);if(p&&(r.key==="Enter"||r.key===" ")){r.preventDefault(),m();return}if(p&&n()&&e.onToggleExpand&&(r.key==="ArrowRight"&&!e.isExpanded||r.key==="ArrowLeft"&&e.isExpanded)){r.preventDefault(),e.onToggleExpand();return}if(r.key=="Enter"&&r.ctrlKey&&!(r.altKey||r.shiftKey||r.metaKey)){r.preventDefault(),r.stopPropagation();let h=t.getBoundingClientRect();a(h.x+10,h.y+h.height-10)}},me(o,"dblclick",r=>{r.target.closest("input")||e.startRenaming()}),me(o,"click",r=>{r.ctrlKey||r.metaKey||r.target.closest(".document-list-folder__toggle, .create-new-button, input")||m()}),o.$$mousedown=r=>{i.prefetch(),r.ctrlKey||r.metaKey?(T.has(e.id)?ee(e.id):$(e.id,c()),r.preventDefault(),r.stopPropagation(),r.stopImmediatePropagation()):T.has(e.id)||H()},o.addEventListener("drop",r=>{r.preventDefault(),r.stopPropagation(),u(),C(r,{repo:e.repo,rootFolderHandle:e.rootFolderHandle,element:e.element,expand:e.expand})}),o.addEventListener("dragleave",r=>{let p=r.relatedTarget;(!p||!t.contains(p))&&(u(),_())}),o.addEventListener("dragover",r=>{r.preventDefault(),r.dataTransfer.dropEffect=S()?"copy":"move";let p=t.getBoundingClientRect(),h;if(n()){let y=(r.clientY-p.top)/p.height;h=y<.25?"above":y>.75?"below":"inside"}else h=Ce(r.clientY,t)?"above":"below";h!=="inside"&&r.stopPropagation(),I(Q({id:e.id,url:e.url,parentUrl:s(),index:e.itemIndex??0},h)),f()}),o.addEventListener("dragend",()=>{u(),_(),Ue(),H(),K(!1),Z(null),J(!1)}),o.addEventListener("drag",r=>{r.altKey!==S()&&K(r.altKey)}),o.addEventListener("dragstart",r=>{v(),et(r,c(),e.element,i)}),o.addEventListener("pointercancel",v),o.$$pointerup=v,o.$$pointerdown=r=>{(r.pointerType==="touch"||r.pointerType==="pen")&&(g=setTimeout(()=>a(r.clientX,r.clientY),700))},me(o,"contextmenu",r=>{r.preventDefault(),r.stopPropagation(),a(r.clientX,r.clientY)});var d=t;return typeof d=="function"?Jt(d,o):t=o,zt(o,()=>e.children),Bt(r=>{var p=e["aria-label"],h=e.pressed?"true":void 0,y=n()?!!e.isExpanded:void 0,w=e.id,x=s(),D=e.itemIndex,k=e.url,M=e.type;return p!==r.e&&A(o,"aria-label",r.e=p),h!==r.t&&A(o,"aria-selected",r.t=h),y!==r.a&&A(o,"aria-expanded",r.a=y),w!==r.o&&A(o,"data-dnd-item",r.o=w),x!==r.i&&A(o,"data-dnd-parent",r.i=x),D!==r.n&&A(o,"data-dnd-index",r.n=D),k!==r.s&&A(o,"data-doc-url",r.s=k),M!==r.h&&A(o,"data-doc-type",r.h=M),r},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0}),o})()}Xt(["pointerdown","pointerup","mousedown","keydown"]);import{template as it}from"solid-js/web";import{delegateEvents as er}from"solid-js/web";import{insert as tr}from"solid-js/web";import{createComponent as fe}from"solid-js/web";import{effect as rr}from"solid-js/web";import{use as nr}from"solid-js/web";import{createSelector as ir,createSignal as lr,Match as at,Switch as dr}from"solid-js";var or=it("<form style=display:contents><input autofocus class=document-list-item__name>"),ar=it("<span class=document-list-item__name>");function ne(e){let t=ir(_e),[n,s]=lr(e.name),i=!1;function c(l,f){if(i)return;i=!0,l&&e.rename(n()??"");let u=f?.closest('[role="treeitem"]');t(e.id)&&L(""),u?.focus()}return fe(dr,{get children(){return[fe(at,{get when(){return t(e.id)},get children(){var l=or(),f=l.firstChild;return l.addEventListener("submit",u=>{u.preventDefault(),c(!0,u.currentTarget.querySelector("input"))}),f.$$input=u=>s(u.target.value),f.$$keydown=u=>{(u.key=="Escape"||u.key=="g"&&u.ctrlKey)&&(u.preventDefault(),u.stopPropagation(),c(!1,u.currentTarget))},f.addEventListener("blur",()=>c(!0)),nr(u=>{i=!1,s(e.name),setTimeout(()=>{u.focus(),u.select()},80)},f),rr(()=>f.value=n()),l}}),fe(at,{get when(){return!t(e.id)},get children(){var l=ar();return tr(l,()=>e.name),l}})]}})}er(["keydown","input"]);import{template as dt}from"solid-js/web";import{insert as sr}from"solid-js/web";import{createComponent as cr}from"solid-js/web";import{setStyleProperty as ge}from"solid-js/web";import{effect as st}from"solid-js/web";import{For as mr}from"solid-js";var ct=dt('<div class="document-list-item document-list-item--loading"aria-hidden=true><span class=document-list-item__skeleton>'),ur=dt('<div class=document-list__loading aria-busy=true aria-label="Loading documents">');function oe(e){return(()=>{var t=ct();return st(n=>ge(t,"--depth",e.depth??0)),t})()}var lt=["11rem","7rem","9.5rem","6rem","10rem","8rem"];function pe(e){let t=()=>Array.from({length:e.count??5},(n,s)=>s);return(()=>{var n=ur();return sr(n,cr(mr,{get each(){return t()},children:s=>(()=>{var i=ct(),c=i.firstChild;return st(l=>{var f=e.depth??0,u=lt[s%lt.length];return f!==l.e&&ge(i,"--depth",l.e=f),u!==l.t&&ge(c,"width",l.t=u),l},{e:void 0,t:void 0}),i})()})),n})()}var pr=gt("<span aria-hidden=true class=document-list-folder__toggle>"),hr=gt("<div class=document-list-folder role=none><div role=group class=document-list-folder__contents>");function ve(e){let[t,n]=yr(!1),[s,i]=B(()=>e.url,e);we(()=>{i.latest&&O(i.latest)});let c=new Set(e.visitedFolders??[]);c.add(e.url);let l=()=>e.depth??1,f=()=>({"--depth":l()+1}),u=()=>({"--depth":l()});we(m=>(!m&&e.filter&&z(e.filter,s()?.title??e.name)&&n(!0),e.filter)),we(()=>{Fe().has(e.url)&&n(!0)});let a=re(1e3,()=>n(!0));wr(a.stop);function g(m){i()?.change(d=>mt(d,["title"],m));let o=e.itemIndex;e.parentFolderHandle?.change(d=>{o!=null&&d.docs[o]?.url===e.url&&mt(d,["docs",o,"name"],m)})}async function v(m){let o=i();if(!o)return;let d=await Re(e.repo,m),r=0;o.change(p=>{p.docs.push(d),r=p.docs.length-1}),e.clearFilter(),n(!0),e.open(d),L(o.url+"/"+r)}return(()=>{var m=hr(),o=m.firstChild;return m.addEventListener("drop",d=>{d.preventDefault(),d.stopPropagation(),a.stop(),C(d,{repo:e.repo,rootFolderHandle:e.rootFolderHandle,element:e.element,expand:()=>n(!0)})}),m.addEventListener("dragleave",d=>{let r=d.relatedTarget;(!r||!d.currentTarget.contains(r))&&(a.stop(),_())}),m.addEventListener("dragover",d=>{d.preventDefault(),d.stopPropagation(),d.dataTransfer.dropEffect=S()?"copy":"move";let r=d.target.closest(".document-list-item");r||I(Q({id:e.url,url:e.url,parentUrl:e.parentFolderHandle?.url??e.url,index:e.itemIndex??0},"inside")),r?.getAttribute("data-dnd-item")===e.url&&!t()&&a.start()}),ye(m,F(W,{get"aria-label"(){return s()?.title??e.name??""},startRenaming:()=>{L(e.url)},get remove(){return e.removeFromParent},get id(){return e.url},get url(){return e.url},get name(){return s()?.title??e.name??""},get pressed(){return e.isSelected(e.url)},type:"folder",get element(){return e.element},get repo(){return e.repo},get rootFolderHandle(){return e.rootFolderHandle},get parentFolderHandle(){return e.parentFolderHandle},get itemIndex(){return e.itemIndex},get isExpanded(){return t()},onToggleExpand:()=>n(d=>!d),expand:()=>n(!0),createInside:v,openWith:d=>{e.open({url:e.url,toolId:d,title:s()?.title??e.name,type:"folder"})},get children(){return[(()=>{var d=pr();return gr(d,"click",r=>{r.stopImmediatePropagation(),n(p=>!p)}),ye(d,F(ft,{get when(){return t()},get fallback(){return F(se,{})},get children(){return F(se,{style:{rotate:"90deg"}})}})),d})(),F(ne,{get name(){return s()?.title??e.name},get id(){return e.url},rename:g})]}}),o),ye(o,F(ft,{get when(){return t()||!!e.filter},get children(){return F(vr,{get fallback(){return F(oe,{get depth(){return l()+1}})},get children(){return F(ae,{get docs(){return s()?.docs},get repo(){return e.repo},get depth(){return l()+1},get handle(){return i.latest},get open(){return e.open},get isSelected(){return e.isSelected},visitedFolders:c,get element(){return e.element},get rootFolderHandle(){return e.rootFolderHandle},get filter(){return e.filter},get clearFilter(){return e.clearFilter}})}})}})),fr(d=>{var r=l(),p=u(),h=e.url,y=!t()&&!e.filter,w=l(),x=f();return r!==d.e&&he(m,"data-depth",d.e=r),d.t=ut(m,p,d.t),h!==d.a&&he(m,"data-dnd-container",d.a=h),y!==d.o&&o.classList.toggle("document-list-folder__contents--hidden",d.o=y),w!==d.i&&he(o,"data-depth",d.i=w),d.n=ut(o,x,d.n),d},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0}),m})()}var br=Ee('<div class="document-list__item document-list__item--visible">'),Dr=Ee("<div class=document-list__item>"),Er=Ee('<div class=document-list-folder__circular-ref style="padding-left:calc(var(--depth) * 1rem)"><span> (i contain myself eventually)'),$r=Ar(()=>import("./create-new-menu-JPICLPWM.js").then(e=>({default:e.NewDocPlaceholder}))),bt=40,Hr=8;function ae(e){let t=e.visitedFolders??new Set,[n,s]=Fr(bt);wt(()=>{let a=e.docs?.length??0;if(xt(n)>=a)return;let g=requestAnimationFrame(function v(){let m=performance.now(),o=xt(n);do s(o+=bt);while(o<a&&performance.now()-m<Hr);o<a&&(g=requestAnimationFrame(v))});be(()=>cancelAnimationFrame(g))});let i=_r(()=>{let a=e.docs??[];return a.length>n()?a.slice(0,n()):a});function c(a){e.handle.change(g=>Tr(g.docs,a))}let l=()=>!!e.handle&&P()?.containerUrl===e.handle.url,f=a=>{let g=P();if(!g)return;let v=g.index;N(null),e.handle.change(m=>m.docs.splice(v,0,a)),e.open(a),L(e.handle.url+"/"+v)},u=()=>(()=>{var a=br();return xe(a,b($r,{get repo(){return e.repo},onCreate:f,onDismiss:()=>N(null),get clearFilter(){return e.clearFilter}})),a})();return[b(Lr,{get each(){return i()},children:(a,g)=>{let v=()=>!e.filter.length||z(e.filter,a.name),m=()=>c(g()),o=()=>e.handle.url+"/"+g();be(Ye(e.element,a.url));let d=r=>{e.handle.change(h=>{ht(h,["docs",g(),"name"],r)});let p=yt("patchwork:datatype");e.repo.find(a.url).then(async h=>{let{"@patchwork":y}=h.doc();if(y){let w=p.get(y.type);w&&(await p.load(w.id),h.change(x=>w.module.setTitle?.(x,r)))}})};return wt(()=>{if(!e.isSelected(a.url))return;let r=!1,p;e.repo.find(a.url).then(async h=>{if(r)return;let y=yt("patchwork:datatype");async function w(){let D=h.doc();if(!D)return;let k=D["@patchwork"];if(!k?.type)return;let M=y.get(k.type);if(!M||(await y.load(M.id),r)||!Sr(M))return;let R=M.module.getTitle(D);if(!R)return;e.handle.doc()?.docs?.[g()]?.name!==R&&e.handle.change(X=>{ht(X,["docs",g(),"name"],R)}),k.title!==R&&h.change(X=>{X["@patchwork"]&&(X["@patchwork"].title=R)})}if(await w(),r)return;let x=()=>w();h.on("change",x),p=()=>h.off("change",x)}),be(()=>{r=!0,p?.()})}),[b(De,{get when(){return pt(()=>!!l())()&&P().index===g()},get children(){return u()}}),(()=>{var r=Dr();return xe(r,b(kr,{get fallback(){return b(oe,{get depth(){return e.depth}})},get children(){return b(Mr,{get children(){return[b(vt,{get when(){return a.type=="folder"},get children(){return b(De,{get when(){return!t.has(a.url)},get fallback(){return(()=>{var p=Er(),h=p.firstChild,y=h.firstChild;return xe(h,()=>a.name,y),p})()},get children(){return b(ve,{get url(){return a.url},get depth(){return e.depth},get repo(){return e.repo},removeFromParent:m,get parentFolderHandle(){return e.handle},get itemIndex(){return g()},get open(){return e.open},get name(){return a.name},get isSelected(){return e.isSelected},visitedFolders:t,get element(){return e.element},get rootFolderHandle(){return e.rootFolderHandle},get filter(){return e.filter},get clearFilter(){return e.clearFilter}})}})}}),b(vt,{get when(){return a.type!="folder"},get children(){return b(W,{get"aria-label"(){return a.name},get url(){return a.url},get name(){return a.name},get id(){return o()},startRenaming:()=>L(o()),remove:m,get pressed(){return e.isSelected(a.url)},get type(){return a.type},get element(){return e.element},get repo(){return e.repo},get rootFolderHandle(){return e.rootFolderHandle},get parentFolderHandle(){return e.handle},get itemIndex(){return g()},openWith:p=>e.open({url:a.url,toolId:p,title:a.name,type:a.type}),get children(){return b(ne,{get name(){return a.name},get id(){return o()},rename:d})}})}})]}})}})),xr(p=>{var h=!!v(),y=!v();return h!==p.e&&r.classList.toggle("document-list__item--visible",p.e=h),y!==p.t&&r.classList.toggle("document-list__item--invisible",p.t=y),p},{e:void 0,t:void 0}),r})()]}}),b(De,{get when(){return pt(()=>!!l())()&&P().index>=(e.docs?.length??0)},get children(){return u()}})]}import{createEffect as Po,createSignal as Ir,onCleanup as Ur,onMount as Cr}from"solid-js";import{createStore as Ko,reconcile as jo}from"solid-js/store";import*as Te from"@inkandswitch/patchwork-providers";function Rr(e){return typeof e=="function"?e():e}function Dt(e,t,n){let[s,i]=Ir(n);return Cr(()=>{let c=Rr(e);if(!c)return;let l=Te.subscribe(c,t,i);Ur(l)}),s}function Et(e){let t=0,n=0,s=!1,i=new Set,c=new Set;function l(g){return{id:g.getAttribute("data-dnd-item"),url:g.getAttribute("data-doc-url"),type:g.getAttribute("data-doc-type")??"",name:(g.textContent??"").trim(),source:e.source()}}function f(g){let v=g.clientX-t,m=g.clientY-n;if(!s){if(Math.hypot(v,m)<5)return;s=!0}g.preventDefault();let o=Math.min(t,g.clientX),d=Math.min(n,g.clientY),r=Math.max(t,g.clientX),p=Math.max(n,g.clientY),h=e.container();if(!h)return;let y=new Set;for(let w of h.querySelectorAll("[data-dnd-item]")){if(w.offsetParent===null)continue;let x=w.getAttribute("data-dnd-item");if(!x||i.has(x))continue;let D=w.getBoundingClientRect();D.right<o||D.left>r||D.bottom<d||D.top>p||(y.add(x),T.has(x)||$(x,l(w)))}for(let w of c)y.has(w)||ee(w);c=y}function u(){window.removeEventListener("mousemove",f,!0),window.removeEventListener("mouseup",u,!0),s=!1,c=new Set,i=new Set}function a(g){g.button!==0||!(g.metaKey||g.ctrlKey)||g.target.closest(".document-list__toolbar")||(t=g.clientX,n=g.clientY,s=!1,c=new Set,i=new Set(T.keys()),window.addEventListener("mousemove",f,!0),window.addEventListener("mouseup",u,!0))}return{onMouseDown:a}}function Tt(e){let t='[role="treeitem"]',n=null,s=m=>m.offsetParent!==null,i=()=>[...e.querySelectorAll(t)].filter(s);function c(m){n!==m&&(n&&(n.tabIndex=-1),m.tabIndex=0,n=m)}function l(m){m&&(c(m),m.focus())}function f(){if(n?.isConnected&&s(n)&&n.tabIndex===0)return;n?.isConnected&&(n.tabIndex=-1),n=null;let m=i(),o=m.find(d=>d.getAttribute("aria-selected")==="true")??m[0];o&&c(o)}function u(m){let o=m.parentElement?.closest('[role="group"]');return!o||!e.contains(o)?null:o.parentElement?.querySelector(`:scope > ${t}`)}function a(m){if(m.defaultPrevented||m.altKey||m.ctrlKey||m.metaKey)return;let o=m.target;if(o.closest("input, textarea"))return;let d=o.closest(t);if(!d||!e.contains(d))return;let r=i(),p=r.indexOf(d),h;switch(m.key){case"ArrowDown":h=r[p+1];break;case"ArrowUp":h=r[p-1];break;case"Home":h=r[0];break;case"End":h=r[r.length-1];break;case"ArrowRight":if(d.getAttribute("aria-expanded")!=="true")return;h=r[p+1],h&&u(h)!==d&&(h=null);break;case"ArrowLeft":h=u(d);break;default:return}m.preventDefault(),l(h)}function g(m){let o=m.target.closest(t);o&&e.contains(o)&&o===m.target&&c(o)}let v=new MutationObserver(f);return v.observe(e,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["class","aria-selected"]}),e.addEventListener("keydown",a),e.addEventListener("focusin",g),f(),()=>{v.disconnect(),e.removeEventListener("keydown",a),e.removeEventListener("focusin",g)}}var jr=Lt("<p class=document-list__error role=alert>"),qr=Lt('<aside class=document-list><nav class="document-list__doclist document-list-widget"role=tree aria-multiselectable=true><div class=document-list__toolbar><div class=document-list__filter-container><input name=filter class=document-list__filter placeholder="Filter by title">'),Ft=Vr(()=>import("./item-menu-C37UJBFI.js").then(e=>({default:e.ItemMenu})));function Jr(e){let[t,n]=B(()=>e.folderUrl,{repo:e.repo}),[s,i]=Yr("");Xr(()=>{let o=()=>void Ft.preload();if(typeof requestIdleCallback=="function"){let d=requestIdleCallback(o);V(()=>cancelIdleCallback(d))}else{let d=setTimeout(o,0);V(()=>clearTimeout(d))}});let c=()=>n.state==="ready"||n.state==="refreshing";_t(()=>{n.latest&&O(n.latest)});let l=Dt(e.element,{type:"patchwork:selected-doc"},[]),f=Or(()=>new Set(l())),u=Wr(f,(o,d)=>d.has(o));_t(()=>{if(!c())return;let o=l();if(!o.length){ie(new Set);return}if(o.every(r=>Ve(e.element,r)))return;let d=!1;Xe(e.repo,e.folderUrl,o).then(r=>{d||ie(r)}),V(()=>{d=!0})});function a(o){e.element.dispatchEvent(Ne(o))}let g,v=Et({container:()=>g,source:()=>e.element.toolId??""}),m=o=>{g=o,o.addEventListener("mousedown",v.onMouseDown,!0),V(()=>o.removeEventListener("mousedown",v.onMouseDown,!0)),V(Tt(o))};return(()=>{var o=qr(),d=o.firstChild,r=d.firstChild,p=r.firstChild,h=p.firstChild;return d.addEventListener("drop",y=>{y.preventDefault();let w=n.latest;w&&C(y,{repo:e.repo,rootFolderHandle:w,element:e.element})}),d.addEventListener("dragleave",y=>{let w=y.relatedTarget;(!w||!y.currentTarget.contains(w))&&_()}),d.addEventListener("dragover",y=>{let w=y.dataTransfer?.types.includes("Files");if(!w&&!Be(y.dataTransfer)&&!G(y))return;y.preventDefault(),y.dataTransfer.dropEffect=w||S()?"copy":"move";let x=n.latest;x&&I(Me(x.url,x.doc()?.docs?.length??0))}),Kr(m,d),Y(r,E(Pe,{square:!0,draggable:!0,clearFilter:()=>i(""),changeFolder:y=>n()?.change(y),get repo(){return e.repo},open:a}),p),Y(p,E(ke,{}),h),h.$$input=y=>i(y.target.value.toLowerCase()),Y(d,E(Se,{get when(){return c()},get fallback(){return E(pe,{depth:0})},get children(){return[E(Br,{get fallback(){return E(pe,{depth:0})},get children(){return E(ae,{depth:0,get repo(){return e.repo},get docs(){return t()?.docs},get handle(){return n.latest},open:a,isSelected:u,get element(){return e.element},get rootFolderHandle(){return n.latest},get filter(){return s()},clearFilter:()=>i("")})}}),E(Se,{get when(){return Le()},get children(){return E(Ft,{get repo(){return e.repo},get rootFolderHandle(){return n.latest},get element(){return e.element}})}})]}}),null),Y(d,E(Se,{get when(){return le()?.element===e.element},get children(){var y=jr();return Y(y,()=>le().message),y}}),null),St(()=>Nr(d,"data-dnd-container",e.folderUrl)),St(()=>h.value=s()),o})()}function ha(e,t){return zr(()=>E(Jr,{folderUrl:e,get repo(){return t.repo},element:t}),t)}Pr(["input"]);export{pe as a,Jr as b,ha as c};
15
+ //# sourceMappingURL=chunk-WPHECYLJ.js.map