solid-panes 4.4.2-5 → 4.4.2-7

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 (156) hide show
  1. package/dist/RDFXMLPane2.cjs.js +1 -1
  2. package/dist/RDFXMLPane2.esm.js +1 -1
  3. package/dist/_virtual/~icons/lucide/arrow-left.cjs.js +2 -0
  4. package/dist/_virtual/~icons/lucide/arrow-left.cjs.js.map +1 -0
  5. package/dist/_virtual/~icons/lucide/arrow-left.esm.js +11 -0
  6. package/dist/_virtual/~icons/lucide/arrow-left.esm.js.map +1 -0
  7. package/dist/_virtual/~icons/lucide/ellipsis-vertical.cjs.js +2 -0
  8. package/dist/_virtual/~icons/lucide/ellipsis-vertical.cjs.js.map +1 -0
  9. package/dist/_virtual/~icons/lucide/ellipsis-vertical.esm.js +11 -0
  10. package/dist/_virtual/~icons/lucide/ellipsis-vertical.esm.js.map +1 -0
  11. package/dist/_virtual/~icons/lucide/globe.cjs.js +2 -0
  12. package/dist/_virtual/~icons/lucide/globe.cjs.js.map +1 -0
  13. package/dist/_virtual/~icons/lucide/globe.esm.js +11 -0
  14. package/dist/_virtual/~icons/lucide/globe.esm.js.map +1 -0
  15. package/dist/_virtual/~icons/lucide/lock-keyhole.cjs.js +2 -0
  16. package/dist/_virtual/~icons/lucide/lock-keyhole.cjs.js.map +1 -0
  17. package/dist/_virtual/~icons/lucide/lock-keyhole.esm.js +11 -0
  18. package/dist/_virtual/~icons/lucide/lock-keyhole.esm.js.map +1 -0
  19. package/dist/_virtual/~icons/lucide/pencil.cjs.js +2 -0
  20. package/dist/_virtual/~icons/lucide/pencil.cjs.js.map +1 -0
  21. package/dist/_virtual/~icons/lucide/pencil.esm.js +11 -0
  22. package/dist/_virtual/~icons/lucide/pencil.esm.js.map +1 -0
  23. package/dist/_virtual/~icons/lucide/share-2.cjs.js +2 -0
  24. package/dist/_virtual/~icons/lucide/share-2.cjs.js.map +1 -0
  25. package/dist/_virtual/~icons/lucide/share-2.esm.js +11 -0
  26. package/dist/_virtual/~icons/lucide/share-2.esm.js.map +1 -0
  27. package/dist/_virtual/~icons/lucide/trash-2.cjs.js +2 -0
  28. package/dist/_virtual/~icons/lucide/trash-2.cjs.js.map +1 -0
  29. package/dist/_virtual/~icons/lucide/trash-2.esm.js +11 -0
  30. package/dist/_virtual/~icons/lucide/trash-2.esm.js.map +1 -0
  31. package/dist/audio/audioPane.cjs.js +1 -1
  32. package/dist/audio/audioPane.cjs.js.map +1 -1
  33. package/dist/audio/audioPane.esm.js +13 -10
  34. package/dist/audio/audioPane.esm.js.map +1 -1
  35. package/dist/components/file-explorer-header/FileExplorerHeader.cjs.js +14 -0
  36. package/dist/components/file-explorer-header/FileExplorerHeader.cjs.js.map +1 -0
  37. package/dist/components/file-explorer-header/FileExplorerHeader.d.ts +19 -0
  38. package/dist/components/file-explorer-header/FileExplorerHeader.d.ts.map +1 -0
  39. package/dist/components/file-explorer-header/FileExplorerHeader.esm.js +292 -0
  40. package/dist/components/file-explorer-header/FileExplorerHeader.esm.js.map +1 -0
  41. package/dist/components/file-explorer-header/FileExplorerHeader.styles.cjs.js +2 -0
  42. package/dist/components/file-explorer-header/FileExplorerHeader.styles.cjs.js.map +1 -0
  43. package/dist/components/file-explorer-header/FileExplorerHeader.styles.esm.js +7 -0
  44. package/dist/components/file-explorer-header/FileExplorerHeader.styles.esm.js.map +1 -0
  45. package/dist/components/file-explorer-header/FileExplorerHeaderControls.cjs.js +22 -0
  46. package/dist/components/file-explorer-header/FileExplorerHeaderControls.cjs.js.map +1 -0
  47. package/dist/components/file-explorer-header/FileExplorerHeaderControls.d.ts +15 -0
  48. package/dist/components/file-explorer-header/FileExplorerHeaderControls.d.ts.map +1 -0
  49. package/dist/components/file-explorer-header/FileExplorerHeaderControls.esm.js +266 -0
  50. package/dist/components/file-explorer-header/FileExplorerHeaderControls.esm.js.map +1 -0
  51. package/dist/components/file-explorer-header/FileExplorerHeaderControls.styles.cjs.js +2 -0
  52. package/dist/components/file-explorer-header/FileExplorerHeaderControls.styles.cjs.js.map +1 -0
  53. package/dist/components/file-explorer-header/FileExplorerHeaderControls.styles.esm.js +7 -0
  54. package/dist/components/file-explorer-header/FileExplorerHeaderControls.styles.esm.js.map +1 -0
  55. package/dist/components/file-explorer-header/FileExplorerHeaderSummary.cjs.js +19 -0
  56. package/dist/components/file-explorer-header/FileExplorerHeaderSummary.cjs.js.map +1 -0
  57. package/dist/components/file-explorer-header/FileExplorerHeaderSummary.d.ts +19 -0
  58. package/dist/components/file-explorer-header/FileExplorerHeaderSummary.d.ts.map +1 -0
  59. package/dist/components/file-explorer-header/FileExplorerHeaderSummary.esm.js +321 -0
  60. package/dist/components/file-explorer-header/FileExplorerHeaderSummary.esm.js.map +1 -0
  61. package/dist/components/file-explorer-header/FileExplorerHeaderSummary.styles.cjs.js +2 -0
  62. package/dist/components/file-explorer-header/FileExplorerHeaderSummary.styles.cjs.js.map +1 -0
  63. package/dist/components/file-explorer-header/FileExplorerHeaderSummary.styles.esm.js +7 -0
  64. package/dist/components/file-explorer-header/FileExplorerHeaderSummary.styles.esm.js.map +1 -0
  65. package/dist/components/file-explorer-header/FileExplorerProvider.cjs.js +13 -0
  66. package/dist/components/file-explorer-header/FileExplorerProvider.cjs.js.map +1 -0
  67. package/dist/components/file-explorer-header/FileExplorerProvider.d.ts +36 -0
  68. package/dist/components/file-explorer-header/FileExplorerProvider.d.ts.map +1 -0
  69. package/dist/components/file-explorer-header/FileExplorerProvider.esm.js +468 -0
  70. package/dist/components/file-explorer-header/FileExplorerProvider.esm.js.map +1 -0
  71. package/dist/components/file-explorer-header/FileExplorerProvider.styles.cjs.js +2 -0
  72. package/dist/components/file-explorer-header/FileExplorerProvider.styles.cjs.js.map +1 -0
  73. package/dist/components/file-explorer-header/FileExplorerProvider.styles.esm.js +7 -0
  74. package/dist/components/file-explorer-header/FileExplorerProvider.styles.esm.js.map +1 -0
  75. package/dist/components/file-explorer-header/helper.cjs.js +2 -0
  76. package/dist/components/file-explorer-header/helper.cjs.js.map +1 -0
  77. package/dist/components/file-explorer-header/helper.d.ts +15 -0
  78. package/dist/components/file-explorer-header/helper.d.ts.map +1 -0
  79. package/dist/components/file-explorer-header/helper.esm.js +64 -0
  80. package/dist/components/file-explorer-header/helper.esm.js.map +1 -0
  81. package/dist/components/file-explorer-header/types.d.ts +2 -0
  82. package/dist/components/file-explorer-header/types.d.ts.map +1 -0
  83. package/dist/components/header/Header.cjs.js +1 -1
  84. package/dist/components/header/Header.cjs.js.map +1 -1
  85. package/dist/components/header/Header.esm.js +3 -3
  86. package/dist/components/navbar/Navbar.cjs.js +1 -1
  87. package/dist/components/navbar/Navbar.cjs.js.map +1 -1
  88. package/dist/components/navbar/Navbar.esm.js +3 -3
  89. package/dist/components/resource-actions-menu/DeleteResourceDialog.cjs.js +16 -0
  90. package/dist/components/resource-actions-menu/DeleteResourceDialog.cjs.js.map +1 -0
  91. package/dist/components/resource-actions-menu/DeleteResourceDialog.d.ts +8 -0
  92. package/dist/components/resource-actions-menu/DeleteResourceDialog.d.ts.map +1 -0
  93. package/dist/components/resource-actions-menu/DeleteResourceDialog.esm.js +215 -0
  94. package/dist/components/resource-actions-menu/DeleteResourceDialog.esm.js.map +1 -0
  95. package/dist/components/resource-actions-menu/ResourceActionsMenu.cjs.js +18 -0
  96. package/dist/components/resource-actions-menu/ResourceActionsMenu.cjs.js.map +1 -0
  97. package/dist/components/resource-actions-menu/ResourceActionsMenu.d.ts +16 -0
  98. package/dist/components/resource-actions-menu/ResourceActionsMenu.d.ts.map +1 -0
  99. package/dist/components/resource-actions-menu/ResourceActionsMenu.esm.js +260 -0
  100. package/dist/components/resource-actions-menu/ResourceActionsMenu.esm.js.map +1 -0
  101. package/dist/dashboard/basicPreferences.cjs.js +1 -1
  102. package/dist/dashboard/basicPreferences.cjs.js.map +1 -1
  103. package/dist/dashboard/dashboardPane.cjs.js +1 -1
  104. package/dist/dashboard/dashboardPane.cjs.js.map +1 -1
  105. package/dist/home/homePane.cjs.js +1 -1
  106. package/dist/home/homePane.cjs.js.map +1 -1
  107. package/dist/internal/internalPane2.cjs.js +1 -1
  108. package/dist/internal/internalPane2.cjs.js.map +1 -1
  109. package/dist/mainPage/header.cjs.js +1 -1
  110. package/dist/mainPage/header.cjs.js.map +1 -1
  111. package/dist/n3Pane2.cjs.js +1 -1
  112. package/dist/n3Pane2.esm.js +1 -1
  113. package/dist/outline/manager2.cjs.js +1 -2
  114. package/dist/outline/manager2.cjs.js.map +1 -1
  115. package/dist/outline/manager2.esm.js +356 -397
  116. package/dist/outline/manager2.esm.js.map +1 -1
  117. package/dist/outline/propertyViews.cjs.js +1 -1
  118. package/dist/outline/propertyViews.cjs.js.map +1 -1
  119. package/dist/outline/sourcePaneIcon.d.ts +2 -0
  120. package/dist/outline/sourcePaneIcon.d.ts.map +1 -0
  121. package/dist/outline/userInput.cjs.js +1 -1
  122. package/dist/outline/userInput.cjs.js.map +1 -1
  123. package/dist/outline/userInput.esm.js +6 -4
  124. package/dist/outline/userInput.esm.js.map +1 -1
  125. package/dist/pad/padPane2.cjs.js +1 -1
  126. package/dist/pad/padPane2.cjs.js.map +1 -1
  127. package/dist/sharing/sharingPane.cjs.js +1 -1
  128. package/dist/sharing/sharingPane.cjs.js.map +1 -1
  129. package/dist/social/editProfileDetails.cjs.js +1 -1
  130. package/dist/social/editProfileDetails.cjs.js.map +1 -1
  131. package/dist/social/editProfileDetails.esm.js +1 -1
  132. package/dist/social/socialPane2.cjs.js +1 -1
  133. package/dist/social/socialPane2.cjs.js.map +1 -1
  134. package/dist/social/socialSections.cjs.js +1 -1
  135. package/dist/social/socialSections.cjs.js.map +1 -1
  136. package/dist/social/socialSections.esm.js +7 -6
  137. package/dist/social/socialSections.esm.js.map +1 -1
  138. package/dist/social/triage.cjs.js +1 -1
  139. package/dist/social/triage.cjs.js.map +1 -1
  140. package/dist/tabbed/tabbedPane.cjs.js +1 -1
  141. package/dist/tabbed/tabbedPane.cjs.js.map +1 -1
  142. package/dist/trustedApplications/trustedApplications.dom.cjs.js +1 -1
  143. package/dist/trustedApplications/trustedApplications.dom.cjs.js.map +1 -1
  144. package/dist/trustedApplications/trustedApplications.utils.cjs.js +1 -1
  145. package/dist/trustedApplications/trustedApplications.utils.cjs.js.map +1 -1
  146. package/dist/trustedApplications/trustedApplications.view.cjs.js +1 -1
  147. package/dist/trustedApplications/trustedApplications.view.cjs.js.map +1 -1
  148. package/dist/utils/podUtils.cjs.js +1 -1
  149. package/dist/utils/podUtils.cjs.js.map +1 -1
  150. package/dist/utils/webIdUtils.cjs.js +1 -1
  151. package/dist/utils/webIdUtils.cjs.js.map +1 -1
  152. package/dist/versionInfo.cjs.js +1 -1
  153. package/dist/versionInfo.cjs.js.map +1 -1
  154. package/dist/versionInfo.esm.js +3 -3
  155. package/dist/versionInfo.esm.js.map +1 -1
  156. package/package.json +4 -4
@@ -1,2 +1,2 @@
1
- (function(){try{if(typeof document<`u`){var e=document.createElement(`style`);e.appendChild(document.createTextNode(`.pad-layout{box-sizing:border-box;background-color:#fff;flex-direction:column;min-width:94%;min-height:13rem;margin-left:3%;margin-right:3%;display:flex}.pad-row{flex-wrap:wrap;width:100%;display:flex}.pad-main{flex:100%;width:100%}.pad-controls{align-items:center;gap:.5rem}.pad-cell{flex:auto}.pad-new-instance-message{font-size:140%}@media (width<=600px){.pad-controls .pad-cell{flex:100%}}`)),document.head.appendChild(e)}}catch(e){console.error(`vite-plugin-css-injected-by-js`,e)}})();require("../_virtual/_rolldown/runtime.cjs.js");let e=require("solid-ui"),t=require("solid-logic"),n=require("rdflib");var r={icon:e.icons.iconBase+`noun_79217.svg`,name:`pad`,audience:[e.ns.solid(`PowerUser`)],label:function(e,t){return t.session.store.findTypeURIs(e)[`http://www.w3.org/ns/pim/pad#Notepad`]?`pad`:null},mintClass:e.ns.pad(`Notepad`),mintNew:function(t,n){let r=t.session.store,i=r.updater;if(n.me&&!n.me.uri)throw Error(`notepad mintNew: Invalid userid`);let a=n.newInstance=n.newInstance||r.sym(n.newBase+`index.ttl#this`),o=a.doc();r.add(a,e.ns.rdf(`type`),e.ns.pad(`Notepad`),o),r.add(a,e.ns.dc(`title`),`Shared Notes`,o),r.add(a,e.ns.dc(`created`),new Date,o),n.me&&r.add(a,e.ns.dc(`author`),n.me,o);let s=r.sym(a.uri+`_line0`);return r.add(a,e.ns.pad(`next`),s,o),r.add(s,e.ns.pad(`next`),a,o),r.add(s,e.ns.dc(`author`),n.me,o),r.add(s,e.ns.sioc(`content`),``,o),new Promise(function(e,t){if(!i){t(Error(`Have no updater`));return}i.put(o,r.statementsMatching(void 0,void 0,void 0,o),`text/turtle`,function(r,i,a){i?e(n):t(Error(`FAILED to save new tool at: `+r+` : `+a))})})},render:function(r,i,a){let o=i.dom,s=i.session.store,c=function(t,n){t||E.appendChild(e.widgets.errorMessageBlock(o,n,`pink`))},l=function(e){for(;e.firstChild;)e.removeChild(e.firstChild);return e},u=function(t,r,i){let a=(0,n.graph)(),o=(0,n.Namespace)(`http://www.w3.org/ns/auth/acl#`),s=a.sym(r+`#a1`),c=a.sym(r),l=a.sym(t);return a.add(s,e.ns.rdf(`type`),o(`Authorization`),c),a.add(s,o(`accessTo`),l,c),a.add(s,o(`agent`),x,c),a.add(s,o(`mode`),o(`Read`),c),a.add(s,o(`mode`),o(`Write`),c),a.add(s,o(`mode`),o(`Control`),c),s=a.sym(r+`#a2`),a.add(s,e.ns.rdf(`type`),o(`Authorization`),c),a.add(s,o(`accessTo`),l,c),a.add(s,o(`agentClass`),e.ns.foaf(`Agent`),c),a.add(s,o(`mode`),o(`Read`),c),i&&a.add(s,o(`mode`),o(`Write`),c),(0,n.serialize)(c,a,r,`text/turtle`)},d=function(e,t,r){let i=s.any((0,n.sym)(e),(0,n.sym)(`http://www.iana.org/assignments/link-relations/acl`));if(!y)throw Error(`Have no fetcher`);if(i){let n=u(e,i.uri,t);return y.webOperation(`PUT`,i.uri,{data:n,contentType:`text/turtle`}).then(()=>r(!0)).catch(e=>{r(!1,e.message)})}return y.load(e).catch(e=>{r(!1,`Getting headers for ACL: `+e)}).then(()=>{let r=s.any((0,n.sym)(e),(0,n.sym)(`http://www.iana.org/assignments/link-relations/acl`));if(!r)throw Error(`No Link rel=ACL header for `+e);let i=u(e,r.uri,t);return y.webOperation(`PUT`,r.uri,{data:i,contentType:`text/turtle`})}).then(()=>r(!0)).catch(e=>{r(!1,e.message)})},f=function(){let e=E.appendChild(o.createElement(`button`));return e.textContent=`Start another pad`,e.addEventListener(`click`,function(){return p(r,R,`pad`)}),e},p=function(t,r,i){let a=l(r);a.appendChild(e.login.newAppInstance(o,{noun:`notepad`},(e,t)=>m(new n.NamedNode(e||t)))),a.appendChild(o.createElement(`hr`));let s=a.appendChild(o.createElement(`p`));s.textContent=`Where would you like to store the data for the `+i+`? Give the URL of the directory where you would like the data stored.`;let c=a.appendChild(o.createElement(`input`));c.setAttribute(`type`,`text`),c.size=80,c.label=`base URL`,c.autocomplete=`on`,a.appendChild(o.createElement(`br`));let u=a.appendChild(o.createElement(`button`));u.textContent=`Start new `+i+` at this URI`,u.addEventListener(`click`,function(e){let n=c.value;n.slice(-1)!==`/`&&(n+=`/`),h(t,n)})},m=function(t){let r=s.any(t,e.ns.space(`uriPrefix`));r=r?r.value:t.uri.split(`#`)[0],r.slice(-1)!==`/`&&(n.log.error(v+`: No / at end of uriPrefix `+r),r+=`/`);let i=new Date;r+=v+`/id`+i.getTime()+`/`,h(C,r)},h=function(r,i){let a=(0,n.sym)(r.uri.split(`#`)[0]),l=s.sym(i+`pad.ttl`),u=s.sym(i+`index.html`),f=[{local:`index.html`,contentType:`text/html`}],p=s.sym(l.uri+`#thisPad`),m=[],h;for(h=0;h<f.length;h++)(function(e){m.push(function(){let n=i+e.local;console.log(`Copying `+a+e.local+` to `+n);let r=function(){d(n,!1,function(e,t){e?m.shift()():(c(e,`FAILED to set ACL `+n+` : `+t),console.log(`FAILED to set ACL `+n+` : `+t))})};if(!s.fetcher)throw Error(`Store has no fetcher`);s.fetcher.webCopy(a+e.local,i+e.local,e.contentType).then(()=>t.authn.checkUser()).then(e=>{x=e,r()}).catch(t=>{console.log(`FAILED to copy `+a+e.local+` : `+t.message),c(!1,`FAILED to copy `+a+e.local+` : `+t.message)})})})(f[h]);m.push(function(){if(s.add(p,e.ns.rdf(`type`),S(`Notepad`),l),s.add(p,e.ns.dc(`created`),new Date,l),x&&s.add(p,e.ns.dc(`author`),x,l),s.add(p,S(`next`),p,l),s.add(p,e.ns.space(`inspiration`),r,w),s.add(p,e.ns.space(`inspiration`),r,l),!b)throw Error(`Have no updater`);b.put(l,s.statementsMatching(void 0,void 0,void 0,l),`text/turtle`,function(e,t,n){t?m.shift()():(c(t,`FAILED to save new notepad at: `+l.uri+` : `+n),console.log(`FAILED to save new notepad at: `+l.uri+` : `+n))})}),m.push(function(){d(l.uri,!0,function(e,t){c(e,`Failed to set Read-Write ACL on pad data file: `+t),e&&m.shift()()})}),m.push(function(){let e=E.appendChild(o.createElement(`p`));e.classList.add(`pad-new-instance-message`),e.innerHTML=`Your <a href='`+u.uri+`'><b>new notepad</b></a> is ready. <br/><br/><a href='`+u.uri+`'>Go to new pad</a>`}),m.shift()()},g=function(n){console.log(`showResults()`),x=t.authn.currentUser(),t.authn.checkUser().then(e=>{x=e});let i=s.any(r,e.ns.dc(`title`))||s.any(r,e.ns.vcard(`fn`));a.solo&&typeof window<`u`&&i&&(window.document.title=i.value),B.exists=n,T=e.pad.notepad(o,w,r,x,B),A.appendChild(T);let c=s.any(r,e.ns.meeting(`parentMeeting`))||r;if(e.pad.manageParticipation(o,N,w,c,x,B),!s.updater)throw Error(`Store has no updater`);s.updater.setRefreshHandler(w,T.reloadAndSync)},_=function(){if(!y)throw Error(`Have no fetcher`);y.nowOrWhenFetched(w.uri,void 0,function(t,n,i){if(t)l(A),s.holds(r,e.ns.rdf(`type`),e.ns.wf(`TemplateInstance`))&&p(r,A,`pad`),g(!0),P.appendChild(f());else if(i.status===404){if(console.log(`Initializing results file `+w),!b)throw Error(`Have no updater`);b.put(w,[],`text/turtle`,function(e,t,n){t?(l(A),g(!1)):(c(t,`FAILED to create results file at: `+w.uri+` : `+n),console.log(`FAILED to craete results file at: `+w.uri+` : `+n))})}else c(t,`FAILED to read results file: `+n)})},v=`app-pad.timbl.com`,y=s.fetcher,b=s.updater,x,S=(0,n.Namespace)(`http://www.w3.org/ns/pim/pad#`),C=r,w=r.doc(),T,E=o.createElement(`div`),D=E.appendChild(o.createElement(`div`));D.className=`pad-layout`;let O=D.appendChild(o.createElement(`div`));O.className=`pad-row`,O.appendChild(o.createElement(`div`)),O.appendChild(o.createElement(`div`)),O.appendChild(o.createElement(`div`));let k=D.appendChild(o.createElement(`div`));k.className=`pad-row`;let A=k.appendChild(o.createElement(`div`));A.className=`pad-main`;let j=D.appendChild(o.createElement(`div`));j.className=`pad-row pad-controls`;let M=j.appendChild(o.createElement(`div`));M.className=`pad-cell`;let N=j.appendChild(o.createElement(`div`));N.className=`pad-cell`;let P=j.appendChild(o.createElement(`div`));P.className=`pad-cell`;let F=D.appendChild(o.createElement(`div`));F.className=`pad-row`;let I=F.appendChild(o.createElement(`div`)),L=D.appendChild(o.createElement(`div`));L.className=`pad-row`;let R=L.appendChild(o.createElement(`div`)),z=D.appendChild(o.createElement(`div`));z.setAttribute(`class`,`pad-row naviMenu`),z.appendChild(o.createElement(`div`)),z.appendChild(o.createElement(`div`)),z.appendChild(o.createElement(`div`));let B={statusArea:I,timingArea:M};return _(),E}};exports.default=r;
1
+ (function(){try{if(typeof document<`u`){var e=document.createElement(`style`);e.appendChild(document.createTextNode(`.pad-layout{box-sizing:border-box;background-color:#fff;flex-direction:column;min-width:94%;min-height:13rem;margin-left:3%;margin-right:3%;display:flex}.pad-row{flex-wrap:wrap;width:100%;display:flex}.pad-main{flex:100%;width:100%}.pad-controls{align-items:center;gap:.5rem}.pad-cell{flex:auto}.pad-new-instance-message{font-size:140%}@media (width<=600px){.pad-controls .pad-cell{flex:100%}}`)),document.head.appendChild(e)}}catch(e){console.error(`vite-plugin-css-injected-by-js`,e)}})();;let e=require("solid-ui"),t=require("solid-logic"),n=require("rdflib");var r={icon:e.icons.iconBase+`noun_79217.svg`,name:`pad`,audience:[e.ns.solid(`PowerUser`)],label:function(e,t){return t.session.store.findTypeURIs(e)[`http://www.w3.org/ns/pim/pad#Notepad`]?`pad`:null},mintClass:e.ns.pad(`Notepad`),mintNew:function(t,n){let r=t.session.store,i=r.updater;if(n.me&&!n.me.uri)throw Error(`notepad mintNew: Invalid userid`);let a=n.newInstance=n.newInstance||r.sym(n.newBase+`index.ttl#this`),o=a.doc();r.add(a,e.ns.rdf(`type`),e.ns.pad(`Notepad`),o),r.add(a,e.ns.dc(`title`),`Shared Notes`,o),r.add(a,e.ns.dc(`created`),new Date,o),n.me&&r.add(a,e.ns.dc(`author`),n.me,o);let s=r.sym(a.uri+`_line0`);return r.add(a,e.ns.pad(`next`),s,o),r.add(s,e.ns.pad(`next`),a,o),r.add(s,e.ns.dc(`author`),n.me,o),r.add(s,e.ns.sioc(`content`),``,o),new Promise(function(e,t){if(!i){t(Error(`Have no updater`));return}i.put(o,r.statementsMatching(void 0,void 0,void 0,o),`text/turtle`,function(r,i,a){i?e(n):t(Error(`FAILED to save new tool at: `+r+` : `+a))})})},render:function(r,i,a){let o=i.dom,s=i.session.store,c=function(t,n){t||E.appendChild(e.widgets.errorMessageBlock(o,n,`pink`))},l=function(e){for(;e.firstChild;)e.removeChild(e.firstChild);return e},u=function(t,r,i){let a=(0,n.graph)(),o=(0,n.Namespace)(`http://www.w3.org/ns/auth/acl#`),s=a.sym(r+`#a1`),c=a.sym(r),l=a.sym(t);return a.add(s,e.ns.rdf(`type`),o(`Authorization`),c),a.add(s,o(`accessTo`),l,c),a.add(s,o(`agent`),x,c),a.add(s,o(`mode`),o(`Read`),c),a.add(s,o(`mode`),o(`Write`),c),a.add(s,o(`mode`),o(`Control`),c),s=a.sym(r+`#a2`),a.add(s,e.ns.rdf(`type`),o(`Authorization`),c),a.add(s,o(`accessTo`),l,c),a.add(s,o(`agentClass`),e.ns.foaf(`Agent`),c),a.add(s,o(`mode`),o(`Read`),c),i&&a.add(s,o(`mode`),o(`Write`),c),(0,n.serialize)(c,a,r,`text/turtle`)},d=function(e,t,r){let i=s.any((0,n.sym)(e),(0,n.sym)(`http://www.iana.org/assignments/link-relations/acl`));if(!y)throw Error(`Have no fetcher`);if(i){let n=u(e,i.uri,t);return y.webOperation(`PUT`,i.uri,{data:n,contentType:`text/turtle`}).then(()=>r(!0)).catch(e=>{r(!1,e.message)})}return y.load(e).catch(e=>{r(!1,`Getting headers for ACL: `+e)}).then(()=>{let r=s.any((0,n.sym)(e),(0,n.sym)(`http://www.iana.org/assignments/link-relations/acl`));if(!r)throw Error(`No Link rel=ACL header for `+e);let i=u(e,r.uri,t);return y.webOperation(`PUT`,r.uri,{data:i,contentType:`text/turtle`})}).then(()=>r(!0)).catch(e=>{r(!1,e.message)})},f=function(){let e=E.appendChild(o.createElement(`button`));return e.textContent=`Start another pad`,e.addEventListener(`click`,function(){return p(r,R,`pad`)}),e},p=function(t,r,i){let a=l(r);a.appendChild(e.login.newAppInstance(o,{noun:`notepad`},(e,t)=>m(new n.NamedNode(e||t)))),a.appendChild(o.createElement(`hr`));let s=a.appendChild(o.createElement(`p`));s.textContent=`Where would you like to store the data for the `+i+`? Give the URL of the directory where you would like the data stored.`;let c=a.appendChild(o.createElement(`input`));c.setAttribute(`type`,`text`),c.size=80,c.label=`base URL`,c.autocomplete=`on`,a.appendChild(o.createElement(`br`));let u=a.appendChild(o.createElement(`button`));u.textContent=`Start new `+i+` at this URI`,u.addEventListener(`click`,function(e){let n=c.value;n.slice(-1)!==`/`&&(n+=`/`),h(t,n)})},m=function(t){let r=s.any(t,e.ns.space(`uriPrefix`));r=r?r.value:t.uri.split(`#`)[0],r.slice(-1)!==`/`&&(n.log.error(v+`: No / at end of uriPrefix `+r),r+=`/`);let i=new Date;r+=v+`/id`+i.getTime()+`/`,h(C,r)},h=function(r,i){let a=(0,n.sym)(r.uri.split(`#`)[0]),l=s.sym(i+`pad.ttl`),u=s.sym(i+`index.html`),f=[{local:`index.html`,contentType:`text/html`}],p=s.sym(l.uri+`#thisPad`),m=[],h;for(h=0;h<f.length;h++)(function(e){m.push(function(){let n=i+e.local;console.log(`Copying `+a+e.local+` to `+n);let r=function(){d(n,!1,function(e,t){e?m.shift()():(c(e,`FAILED to set ACL `+n+` : `+t),console.log(`FAILED to set ACL `+n+` : `+t))})};if(!s.fetcher)throw Error(`Store has no fetcher`);s.fetcher.webCopy(a+e.local,i+e.local,e.contentType).then(()=>t.authn.checkUser()).then(e=>{x=e,r()}).catch(t=>{console.log(`FAILED to copy `+a+e.local+` : `+t.message),c(!1,`FAILED to copy `+a+e.local+` : `+t.message)})})})(f[h]);m.push(function(){if(s.add(p,e.ns.rdf(`type`),S(`Notepad`),l),s.add(p,e.ns.dc(`created`),new Date,l),x&&s.add(p,e.ns.dc(`author`),x,l),s.add(p,S(`next`),p,l),s.add(p,e.ns.space(`inspiration`),r,w),s.add(p,e.ns.space(`inspiration`),r,l),!b)throw Error(`Have no updater`);b.put(l,s.statementsMatching(void 0,void 0,void 0,l),`text/turtle`,function(e,t,n){t?m.shift()():(c(t,`FAILED to save new notepad at: `+l.uri+` : `+n),console.log(`FAILED to save new notepad at: `+l.uri+` : `+n))})}),m.push(function(){d(l.uri,!0,function(e,t){c(e,`Failed to set Read-Write ACL on pad data file: `+t),e&&m.shift()()})}),m.push(function(){let e=E.appendChild(o.createElement(`p`));e.classList.add(`pad-new-instance-message`),e.innerHTML=`Your <a href='`+u.uri+`'><b>new notepad</b></a> is ready. <br/><br/><a href='`+u.uri+`'>Go to new pad</a>`}),m.shift()()},g=function(n){console.log(`showResults()`),x=t.authn.currentUser(),t.authn.checkUser().then(e=>{x=e});let i=s.any(r,e.ns.dc(`title`))||s.any(r,e.ns.vcard(`fn`));a.solo&&typeof window<`u`&&i&&(window.document.title=i.value),B.exists=n,T=e.pad.notepad(o,w,r,x,B),A.appendChild(T);let c=s.any(r,e.ns.meeting(`parentMeeting`))||r;if(e.pad.manageParticipation(o,N,w,c,x,B),!s.updater)throw Error(`Store has no updater`);s.updater.setRefreshHandler(w,T.reloadAndSync)},_=function(){if(!y)throw Error(`Have no fetcher`);y.nowOrWhenFetched(w.uri,void 0,function(t,n,i){if(t)l(A),s.holds(r,e.ns.rdf(`type`),e.ns.wf(`TemplateInstance`))&&p(r,A,`pad`),g(!0),P.appendChild(f());else if(i.status===404){if(console.log(`Initializing results file `+w),!b)throw Error(`Have no updater`);b.put(w,[],`text/turtle`,function(e,t,n){t?(l(A),g(!1)):(c(t,`FAILED to create results file at: `+w.uri+` : `+n),console.log(`FAILED to craete results file at: `+w.uri+` : `+n))})}else c(t,`FAILED to read results file: `+n)})},v=`app-pad.timbl.com`,y=s.fetcher,b=s.updater,x,S=(0,n.Namespace)(`http://www.w3.org/ns/pim/pad#`),C=r,w=r.doc(),T,E=o.createElement(`div`),D=E.appendChild(o.createElement(`div`));D.className=`pad-layout`;let O=D.appendChild(o.createElement(`div`));O.className=`pad-row`,O.appendChild(o.createElement(`div`)),O.appendChild(o.createElement(`div`)),O.appendChild(o.createElement(`div`));let k=D.appendChild(o.createElement(`div`));k.className=`pad-row`;let A=k.appendChild(o.createElement(`div`));A.className=`pad-main`;let j=D.appendChild(o.createElement(`div`));j.className=`pad-row pad-controls`;let M=j.appendChild(o.createElement(`div`));M.className=`pad-cell`;let N=j.appendChild(o.createElement(`div`));N.className=`pad-cell`;let P=j.appendChild(o.createElement(`div`));P.className=`pad-cell`;let F=D.appendChild(o.createElement(`div`));F.className=`pad-row`;let I=F.appendChild(o.createElement(`div`)),L=D.appendChild(o.createElement(`div`));L.className=`pad-row`;let R=L.appendChild(o.createElement(`div`)),z=D.appendChild(o.createElement(`div`));z.setAttribute(`class`,`pad-row naviMenu`),z.appendChild(o.createElement(`div`)),z.appendChild(o.createElement(`div`)),z.appendChild(o.createElement(`div`));let B={statusArea:I,timingArea:M};return _(),E}};exports.default=r;
2
2
  //# sourceMappingURL=padPane2.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"padPane2.cjs.js","names":[],"sources":["../../src/pad/padPane.ts"],"sourcesContent":["import { icons, ns, pad, widgets, login } from 'solid-ui'\nimport { authn, AppDetails } from 'solid-logic'\nimport { graph, log, NamedNode, Namespace, sym, serialize, Store } from 'rdflib'\nimport { PaneDefinition } from 'pane-registry'\nimport './padPane.css'\n/* pad Pane\n **\n */\n\nconst paneDef: PaneDefinition = {\n // icon: (module.__dirname || __dirname) + 'images/ColourOn.png',\n icon: icons.iconBase + 'noun_79217.svg',\n\n name: 'pad',\n\n audience: [ns.solid('PowerUser')],\n\n // Does the subject deserve an pad pane?\n label: function (subject, context) {\n // @ts-ignore\n const t = (context.session.store as Store).findTypeURIs(subject)\n if (t['http://www.w3.org/ns/pim/pad#Notepad']) {\n return 'pad'\n }\n return null // No under other circumstances\n },\n\n mintClass: ns.pad('Notepad'),\n\n mintNew: function (context, newPaneOptions: any) {\n // @ts-ignore\n const store = context.session.store as Store\n const updater = store.updater\n if (newPaneOptions.me && !newPaneOptions.me.uri) {\n throw new Error('notepad mintNew: Invalid userid')\n }\n\n const newInstance = (newPaneOptions.newInstance =\n newPaneOptions.newInstance ||\n store.sym(newPaneOptions.newBase + 'index.ttl#this'))\n // const newInstance = kb.sym(newBase + 'pad.ttl#thisPad');\n const newPadDoc = newInstance.doc()\n\n store.add(newInstance, ns.rdf('type'), ns.pad('Notepad'), newPadDoc)\n store.add(newInstance, ns.dc('title'), 'Shared Notes', newPadDoc)\n store.add(newInstance, ns.dc('created'), new Date() as any, newPadDoc) // @@ TODO Remove casting\n if (newPaneOptions.me) {\n store.add(newInstance, ns.dc('author'), newPaneOptions.me, newPadDoc)\n }\n // kb.add(newInstance, ns.pad('next'), newInstance, newPadDoc);\n // linked list empty @@\n const chunk = store.sym(newInstance.uri + '_line0')\n store.add(newInstance, ns.pad('next'), chunk, newPadDoc) // Linked list has one entry\n store.add(chunk, ns.pad('next'), newInstance, newPadDoc)\n store.add(chunk, ns.dc('author'), newPaneOptions.me, newPadDoc)\n store.add(chunk, ns.sioc('content'), '', newPadDoc)\n\n return new Promise(function (resolve, reject) {\n if (!updater) {\n reject(new Error('Have no updater'))\n return\n }\n updater.put(\n newPadDoc,\n store.statementsMatching(undefined, undefined, undefined, newPadDoc),\n 'text/turtle',\n function (uri2, ok, message) {\n if (ok) {\n resolve(newPaneOptions)\n } else {\n reject(\n new Error('FAILED to save new tool at: ' + uri2 + ' : ' + message)\n )\n }\n }\n )\n })\n },\n // and follow instructions there\n // @@ TODO Set better type for paneOptions\n render: function (subject, context, paneOptions: any) {\n const dom = context.dom\n // @ts-ignore\n const store = context.session.store as Store\n // Utility functions\n const complainIfBad = function (ok: boolean, message: string) {\n if (!ok) {\n div.appendChild(widgets.errorMessageBlock(dom, message, 'pink'))\n }\n }\n\n const clearElement = function (ele: HTMLElement) {\n while (ele.firstChild) {\n ele.removeChild(ele.firstChild)\n }\n return ele\n }\n\n // Access control\n\n // Two constiations of ACL for this app, public read and public read/write\n // In all cases owner has read write control\n const genACLtext = function (\n docURI: string,\n aclURI: string,\n allWrite: boolean\n ) {\n const g = graph()\n const auth = Namespace('http://www.w3.org/ns/auth/acl#')\n let a = g.sym(aclURI + '#a1')\n const acl = g.sym(aclURI)\n const doc = g.sym(docURI)\n g.add(a, ns.rdf('type'), auth('Authorization'), acl)\n g.add(a, auth('accessTo'), doc, acl)\n g.add(a, auth('agent'), me, acl)\n g.add(a, auth('mode'), auth('Read'), acl)\n g.add(a, auth('mode'), auth('Write'), acl)\n g.add(a, auth('mode'), auth('Control'), acl)\n\n a = g.sym(aclURI + '#a2')\n g.add(a, ns.rdf('type'), auth('Authorization'), acl)\n g.add(a, auth('accessTo'), doc, acl)\n g.add(a, auth('agentClass'), ns.foaf('Agent'), acl)\n g.add(a, auth('mode'), auth('Read'), acl)\n if (allWrite) {\n g.add(a, auth('mode'), auth('Write'), acl)\n }\n // TODO: Figure out why `serialize` isn't on the type definition according to TypeScript:\n return serialize(acl, g, aclURI, 'text/turtle')\n }\n\n /**\n * @param docURI\n * @param allWrite\n * @param callbackFunction\n *\n * @returns {Promise<Response>}\n */\n const setACL = function setACL (\n docURI: string,\n allWrite: boolean,\n callbackFunction: Function\n ) {\n const aclDoc = store.any(\n sym(docURI),\n sym('http://www.iana.org/assignments/link-relations/acl')\n ) as NamedNode // @@ check that this get set by web.js\n if (!fetcher) {\n throw new Error('Have no fetcher')\n }\n if (aclDoc) {\n // Great we already know where it is\n const aclText = genACLtext(docURI, aclDoc.uri, allWrite)\n return fetcher\n .webOperation('PUT', aclDoc.uri, {\n data: aclText,\n contentType: 'text/turtle'\n })\n .then(() => callbackFunction(true))\n .catch(err => {\n callbackFunction(false, err.message)\n })\n } else {\n return fetcher\n .load(docURI)\n .catch((err: Error) => {\n callbackFunction(false, 'Getting headers for ACL: ' + err)\n })\n .then(() => {\n const aclDoc = store.any(\n sym(docURI),\n sym('http://www.iana.org/assignments/link-relations/acl')\n ) as NamedNode\n\n if (!aclDoc) {\n // complainIfBad(false, \"No Link rel=ACL header for \" + docURI);\n throw new Error('No Link rel=ACL header for ' + docURI)\n }\n\n const aclText = genACLtext(docURI, aclDoc.uri, allWrite)\n\n return fetcher.webOperation('PUT', aclDoc.uri, {\n data: aclText,\n contentType: 'text/turtle'\n })\n })\n .then(() => callbackFunction(true))\n .catch(err => {\n callbackFunction(false, err.message)\n })\n }\n }\n\n // Reproduction: spawn a new instance\n //\n // Viral growth path: user of app decides to make another instance\n const newInstanceButton = function () {\n const button = div.appendChild(dom.createElement('button'))\n button.textContent = 'Start another pad'\n button.addEventListener('click', function () {\n return showBootstrap(subject, spawnArea, 'pad')\n })\n return button\n }\n\n // Option of either using the workspace system or just typing in a URI\n const showBootstrap = function showBootstrap (\n thisInstance: any,\n container: HTMLElement,\n noun: string\n ) {\n const div = clearElement(container)\n const appDetails = { noun: 'notepad' } as AppDetails\n div.appendChild(\n login.newAppInstance(dom, appDetails, (workspace: string | null, newBase) => {\n // FIXME: not sure if this will work at all, just\n // trying to get the types to match - Michiel.\n return initializeNewInstanceInWorkspace(new NamedNode(workspace || newBase))\n })\n )\n\n div.appendChild(dom.createElement('hr')) // @@\n\n const p = div.appendChild(dom.createElement('p'))\n p.textContent =\n 'Where would you like to store the data for the ' +\n noun +\n '? ' +\n 'Give the URL of the directory where you would like the data stored.'\n const baseField = div.appendChild(dom.createElement('input'))\n baseField.setAttribute('type', 'text')\n baseField.size = 80 // really a string\n ;(baseField as any).label = 'base URL'\n baseField.autocomplete = 'on'\n\n div.appendChild(dom.createElement('br')) // @@\n\n const button = div.appendChild(dom.createElement('button'))\n button.textContent = 'Start new ' + noun + ' at this URI'\n button.addEventListener('click', function (_e) {\n let newBase = baseField.value\n if (newBase.slice(-1) !== '/') {\n newBase += '/'\n }\n initializeNewInstanceAtBase(thisInstance, newBase)\n })\n }\n\n // Create new document files for new instance of app\n const initializeNewInstanceInWorkspace = function (ws: NamedNode) {\n // @@ TODO Clean up type for newBase\n let newBase: any = store.any(ws, ns.space('uriPrefix'))\n if (!newBase) {\n newBase = ws.uri.split('#')[0]\n } else {\n newBase = newBase.value\n }\n if (newBase.slice(-1) !== '/') {\n log.error(appPathSegment + ': No / at end of uriPrefix ' + newBase) // @@ paramater?\n newBase = newBase + '/'\n }\n const now = new Date()\n newBase += appPathSegment + '/id' + now.getTime() + '/' // unique id\n\n initializeNewInstanceAtBase(thisInstance, newBase)\n }\n\n const initializeNewInstanceAtBase = function (\n thisInstance: any,\n newBase: string\n ) {\n const here = sym(thisInstance.uri.split('#')[0])\n const base = here // @@ ???\n\n const newPadDoc = store.sym(newBase + 'pad.ttl')\n const newIndexDoc = store.sym(newBase + 'index.html')\n\n const toBeCopied = [{ local: 'index.html', contentType: 'text/html' }]\n\n const newInstance = store.sym(newPadDoc.uri + '#thisPad')\n\n // log.debug(\"\\n Ready to put \" + kb.statementsMatching(undefined, undefined, undefined, there)); //@@\n\n const agenda: Function[] = []\n\n let f // @@ This needs some form of visible progress bar\n for (f = 0; f < toBeCopied.length; f++) {\n const item = toBeCopied[f]\n const fun = function copyItem (item: any) {\n agenda.push(function () {\n const newURI = newBase + item.local\n console.log('Copying ' + base + item.local + ' to ' + newURI)\n\n const setThatACL = function () {\n setACL(newURI, false, function (ok: boolean, message: string) {\n if (!ok) {\n complainIfBad(\n ok,\n 'FAILED to set ACL ' + newURI + ' : ' + message\n )\n console.log('FAILED to set ACL ' + newURI + ' : ' + message)\n } else {\n agenda.shift()!() // beware too much nesting\n }\n })\n }\n if (!store.fetcher) {\n throw new Error('Store has no fetcher')\n }\n store.fetcher\n .webCopy(\n base + item.local,\n newBase + item.local,\n item.contentType\n )\n .then(() => authn.checkUser())\n .then(webId => {\n me = webId\n\n setThatACL()\n })\n .catch(err => {\n console.log(\n 'FAILED to copy ' + base + item.local + ' : ' + err.message\n )\n complainIfBad(\n false,\n 'FAILED to copy ' + base + item.local + ' : ' + err.message\n )\n })\n })\n }\n fun(item)\n }\n\n agenda.push(function createNewPadDataFile () {\n store.add(newInstance, ns.rdf('type'), PAD('Notepad'), newPadDoc)\n\n // TODO @@ Remove casting of add\n store.add(\n newInstance,\n ns.dc('created'),\n new Date() as any, // @@ TODO Remove casting\n newPadDoc\n )\n if (me) {\n store.add(newInstance, ns.dc('author'), me, newPadDoc)\n }\n store.add(newInstance, PAD('next'), newInstance, newPadDoc) // linked list empty\n\n // Keep a paper trail @@ Revisit when we have non-public ones @@ Privacy\n store.add(newInstance, ns.space('inspiration'), thisInstance, padDoc)\n store.add(newInstance, ns.space('inspiration'), thisInstance, newPadDoc)\n if (!updater) {\n throw new Error('Have no updater')\n }\n updater.put(\n newPadDoc,\n store.statementsMatching(undefined, undefined, undefined, newPadDoc),\n 'text/turtle',\n function (_uri2, ok, message) {\n if (ok) {\n agenda.shift()!()\n } else {\n complainIfBad(\n ok,\n 'FAILED to save new notepad at: ' +\n newPadDoc.uri +\n ' : ' +\n message\n )\n console.log(\n 'FAILED to save new notepad at: ' +\n newPadDoc.uri +\n ' : ' +\n message\n )\n }\n }\n )\n })\n\n agenda.push(function () {\n setACL(newPadDoc.uri, true, function (ok: boolean, body: string) {\n complainIfBad(\n ok,\n 'Failed to set Read-Write ACL on pad data file: ' + body\n )\n if (ok) agenda.shift()!()\n })\n })\n\n agenda.push(function () {\n // give the user links to the new app\n\n const p = div.appendChild(dom.createElement('p'))\n p.classList.add('pad-new-instance-message')\n p.innerHTML =\n 'Your <a href=\\'' +\n newIndexDoc.uri +\n '\\'><b>new notepad</b></a> is ready. ' +\n '<br/><br/><a href=\\'' +\n newIndexDoc.uri +\n '\\'>Go to new pad</a>'\n })\n\n agenda.shift()!()\n // Created new data files.\n }\n\n // Update on incoming changes\n const showResults = function (exists: boolean) {\n console.log('showResults()')\n\n me = authn.currentUser()\n\n authn.checkUser().then((webId: unknown) => {\n me = webId as string\n })\n\n const title =\n store.any(subject, ns.dc('title')) || store.any(subject, ns.vcard('fn'))\n if (paneOptions.solo && typeof window !== 'undefined' && title) {\n window.document.title = title.value\n }\n options.exists = exists\n padEle = pad.notepad(dom, padDoc, subject, me, options)\n naviMain.appendChild(padEle)\n\n const partipationTarget =\n store.any(subject, ns.meeting('parentMeeting')) || subject\n pad.manageParticipation(\n dom,\n naviMiddle2,\n padDoc,\n partipationTarget as any,\n me,\n options\n )\n if (!store.updater) {\n throw new Error('Store has no updater')\n }\n\n store.updater.setRefreshHandler(padDoc, padEle.reloadAndSync) // initiated =\n }\n\n // Read or create empty data file\n const loadPadData = function () {\n if (!fetcher) {\n throw new Error('Have no fetcher')\n }\n fetcher.nowOrWhenFetched(padDoc.uri, undefined, function (\n ok: boolean,\n body: string,\n response: any\n ) {\n if (!ok) {\n if (response.status === 404) {\n // / Check explicitly for 404 error\n console.log('Initializing results file ' + padDoc)\n if (!updater) {\n throw new Error('Have no updater')\n }\n updater.put(padDoc, [], 'text/turtle', function (\n _uri2,\n ok,\n message\n ) {\n if (ok) {\n clearElement(naviMain)\n showResults(false)\n } else {\n complainIfBad(\n ok,\n 'FAILED to create results file at: ' +\n padDoc.uri +\n ' : ' +\n message\n )\n console.log(\n 'FAILED to craete results file at: ' +\n padDoc.uri +\n ' : ' +\n message\n )\n }\n })\n } else {\n // Other error, not 404 -- do not try to overwite the file\n complainIfBad(ok, 'FAILED to read results file: ' + body)\n }\n } else {\n // Happy read\n clearElement(naviMain)\n if (store.holds(subject, ns.rdf('type'), ns.wf('TemplateInstance'))) {\n showBootstrap(subject, naviMain, 'pad')\n }\n showResults(true)\n naviMiddle3.appendChild(newInstanceButton())\n }\n })\n }\n\n // Body of Pane\n const appPathSegment = 'app-pad.timbl.com' // how to allocate this string and connect to\n\n const fetcher = store.fetcher\n const updater = store.updater\n let me: any\n\n const PAD = Namespace('http://www.w3.org/ns/pim/pad#')\n\n const thisInstance = subject\n const padDoc = subject.doc()\n\n let padEle\n\n const div = dom.createElement('div')\n\n // Build the DOM\n const structure = div.appendChild(dom.createElement('div')) // responsive flex layout\n structure.className = 'pad-layout'\n\n const naviLoginoutTR = structure.appendChild(dom.createElement('div'))\n naviLoginoutTR.className = 'pad-row'\n naviLoginoutTR.appendChild(dom.createElement('div')) // naviLoginout1\n naviLoginoutTR.appendChild(dom.createElement('div'))\n naviLoginoutTR.appendChild(dom.createElement('div'))\n\n const naviTop = structure.appendChild(dom.createElement('div')) // stuff\n naviTop.className = 'pad-row'\n const naviMain = naviTop.appendChild(dom.createElement('div'))\n naviMain.className = 'pad-main'\n\n const naviMiddle = structure.appendChild(dom.createElement('div')) // controls\n naviMiddle.className = 'pad-row pad-controls'\n const naviMiddle1 = naviMiddle.appendChild(dom.createElement('div'))\n naviMiddle1.className = 'pad-cell'\n const naviMiddle2 = naviMiddle.appendChild(dom.createElement('div'))\n naviMiddle2.className = 'pad-cell'\n const naviMiddle3 = naviMiddle.appendChild(dom.createElement('div'))\n naviMiddle3.className = 'pad-cell'\n\n const naviStatus = structure.appendChild(dom.createElement('div')) // status etc\n naviStatus.className = 'pad-row'\n const statusArea = naviStatus.appendChild(dom.createElement('div'))\n\n const naviSpawn = structure.appendChild(dom.createElement('div')) // create new\n naviSpawn.className = 'pad-row'\n const spawnArea = naviSpawn.appendChild(dom.createElement('div'))\n\n const naviMenu = structure.appendChild(dom.createElement('div'))\n naviMenu.setAttribute('class', 'pad-row naviMenu')\n naviMenu.appendChild(dom.createElement('div')) // naviLeft\n naviMenu.appendChild(dom.createElement('div'))\n naviMenu.appendChild(dom.createElement('div'))\n\n const options: any = { statusArea, timingArea: naviMiddle1 }\n\n loadPadData()\n\n return div\n }\n}\n// ends\n\nexport default paneDef\n"],"mappings":"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"}
1
+ {"version":3,"file":"padPane2.cjs.js","names":[],"sources":["../../src/pad/padPane.ts"],"sourcesContent":["import { icons, ns, pad, widgets, login } from 'solid-ui'\nimport { authn, AppDetails } from 'solid-logic'\nimport { graph, log, NamedNode, Namespace, sym, serialize, Store } from 'rdflib'\nimport { PaneDefinition } from 'pane-registry'\nimport './padPane.css'\n/* pad Pane\n **\n */\n\nconst paneDef: PaneDefinition = {\n // icon: (module.__dirname || __dirname) + 'images/ColourOn.png',\n icon: icons.iconBase + 'noun_79217.svg',\n\n name: 'pad',\n\n audience: [ns.solid('PowerUser')],\n\n // Does the subject deserve an pad pane?\n label: function (subject, context) {\n // @ts-ignore\n const t = (context.session.store as Store).findTypeURIs(subject)\n if (t['http://www.w3.org/ns/pim/pad#Notepad']) {\n return 'pad'\n }\n return null // No under other circumstances\n },\n\n mintClass: ns.pad('Notepad'),\n\n mintNew: function (context, newPaneOptions: any) {\n // @ts-ignore\n const store = context.session.store as Store\n const updater = store.updater\n if (newPaneOptions.me && !newPaneOptions.me.uri) {\n throw new Error('notepad mintNew: Invalid userid')\n }\n\n const newInstance = (newPaneOptions.newInstance =\n newPaneOptions.newInstance ||\n store.sym(newPaneOptions.newBase + 'index.ttl#this'))\n // const newInstance = kb.sym(newBase + 'pad.ttl#thisPad');\n const newPadDoc = newInstance.doc()\n\n store.add(newInstance, ns.rdf('type'), ns.pad('Notepad'), newPadDoc)\n store.add(newInstance, ns.dc('title'), 'Shared Notes', newPadDoc)\n store.add(newInstance, ns.dc('created'), new Date() as any, newPadDoc) // @@ TODO Remove casting\n if (newPaneOptions.me) {\n store.add(newInstance, ns.dc('author'), newPaneOptions.me, newPadDoc)\n }\n // kb.add(newInstance, ns.pad('next'), newInstance, newPadDoc);\n // linked list empty @@\n const chunk = store.sym(newInstance.uri + '_line0')\n store.add(newInstance, ns.pad('next'), chunk, newPadDoc) // Linked list has one entry\n store.add(chunk, ns.pad('next'), newInstance, newPadDoc)\n store.add(chunk, ns.dc('author'), newPaneOptions.me, newPadDoc)\n store.add(chunk, ns.sioc('content'), '', newPadDoc)\n\n return new Promise(function (resolve, reject) {\n if (!updater) {\n reject(new Error('Have no updater'))\n return\n }\n updater.put(\n newPadDoc,\n store.statementsMatching(undefined, undefined, undefined, newPadDoc),\n 'text/turtle',\n function (uri2, ok, message) {\n if (ok) {\n resolve(newPaneOptions)\n } else {\n reject(\n new Error('FAILED to save new tool at: ' + uri2 + ' : ' + message)\n )\n }\n }\n )\n })\n },\n // and follow instructions there\n // @@ TODO Set better type for paneOptions\n render: function (subject, context, paneOptions: any) {\n const dom = context.dom\n // @ts-ignore\n const store = context.session.store as Store\n // Utility functions\n const complainIfBad = function (ok: boolean, message: string) {\n if (!ok) {\n div.appendChild(widgets.errorMessageBlock(dom, message, 'pink'))\n }\n }\n\n const clearElement = function (ele: HTMLElement) {\n while (ele.firstChild) {\n ele.removeChild(ele.firstChild)\n }\n return ele\n }\n\n // Access control\n\n // Two constiations of ACL for this app, public read and public read/write\n // In all cases owner has read write control\n const genACLtext = function (\n docURI: string,\n aclURI: string,\n allWrite: boolean\n ) {\n const g = graph()\n const auth = Namespace('http://www.w3.org/ns/auth/acl#')\n let a = g.sym(aclURI + '#a1')\n const acl = g.sym(aclURI)\n const doc = g.sym(docURI)\n g.add(a, ns.rdf('type'), auth('Authorization'), acl)\n g.add(a, auth('accessTo'), doc, acl)\n g.add(a, auth('agent'), me, acl)\n g.add(a, auth('mode'), auth('Read'), acl)\n g.add(a, auth('mode'), auth('Write'), acl)\n g.add(a, auth('mode'), auth('Control'), acl)\n\n a = g.sym(aclURI + '#a2')\n g.add(a, ns.rdf('type'), auth('Authorization'), acl)\n g.add(a, auth('accessTo'), doc, acl)\n g.add(a, auth('agentClass'), ns.foaf('Agent'), acl)\n g.add(a, auth('mode'), auth('Read'), acl)\n if (allWrite) {\n g.add(a, auth('mode'), auth('Write'), acl)\n }\n // TODO: Figure out why `serialize` isn't on the type definition according to TypeScript:\n return serialize(acl, g, aclURI, 'text/turtle')\n }\n\n /**\n * @param docURI\n * @param allWrite\n * @param callbackFunction\n *\n * @returns {Promise<Response>}\n */\n const setACL = function setACL (\n docURI: string,\n allWrite: boolean,\n callbackFunction: Function\n ) {\n const aclDoc = store.any(\n sym(docURI),\n sym('http://www.iana.org/assignments/link-relations/acl')\n ) as NamedNode // @@ check that this get set by web.js\n if (!fetcher) {\n throw new Error('Have no fetcher')\n }\n if (aclDoc) {\n // Great we already know where it is\n const aclText = genACLtext(docURI, aclDoc.uri, allWrite)\n return fetcher\n .webOperation('PUT', aclDoc.uri, {\n data: aclText,\n contentType: 'text/turtle'\n })\n .then(() => callbackFunction(true))\n .catch(err => {\n callbackFunction(false, err.message)\n })\n } else {\n return fetcher\n .load(docURI)\n .catch((err: Error) => {\n callbackFunction(false, 'Getting headers for ACL: ' + err)\n })\n .then(() => {\n const aclDoc = store.any(\n sym(docURI),\n sym('http://www.iana.org/assignments/link-relations/acl')\n ) as NamedNode\n\n if (!aclDoc) {\n // complainIfBad(false, \"No Link rel=ACL header for \" + docURI);\n throw new Error('No Link rel=ACL header for ' + docURI)\n }\n\n const aclText = genACLtext(docURI, aclDoc.uri, allWrite)\n\n return fetcher.webOperation('PUT', aclDoc.uri, {\n data: aclText,\n contentType: 'text/turtle'\n })\n })\n .then(() => callbackFunction(true))\n .catch(err => {\n callbackFunction(false, err.message)\n })\n }\n }\n\n // Reproduction: spawn a new instance\n //\n // Viral growth path: user of app decides to make another instance\n const newInstanceButton = function () {\n const button = div.appendChild(dom.createElement('button'))\n button.textContent = 'Start another pad'\n button.addEventListener('click', function () {\n return showBootstrap(subject, spawnArea, 'pad')\n })\n return button\n }\n\n // Option of either using the workspace system or just typing in a URI\n const showBootstrap = function showBootstrap (\n thisInstance: any,\n container: HTMLElement,\n noun: string\n ) {\n const div = clearElement(container)\n const appDetails = { noun: 'notepad' } as AppDetails\n div.appendChild(\n login.newAppInstance(dom, appDetails, (workspace: string | null, newBase) => {\n // FIXME: not sure if this will work at all, just\n // trying to get the types to match - Michiel.\n return initializeNewInstanceInWorkspace(new NamedNode(workspace || newBase))\n })\n )\n\n div.appendChild(dom.createElement('hr')) // @@\n\n const p = div.appendChild(dom.createElement('p'))\n p.textContent =\n 'Where would you like to store the data for the ' +\n noun +\n '? ' +\n 'Give the URL of the directory where you would like the data stored.'\n const baseField = div.appendChild(dom.createElement('input'))\n baseField.setAttribute('type', 'text')\n baseField.size = 80 // really a string\n ;(baseField as any).label = 'base URL'\n baseField.autocomplete = 'on'\n\n div.appendChild(dom.createElement('br')) // @@\n\n const button = div.appendChild(dom.createElement('button'))\n button.textContent = 'Start new ' + noun + ' at this URI'\n button.addEventListener('click', function (_e) {\n let newBase = baseField.value\n if (newBase.slice(-1) !== '/') {\n newBase += '/'\n }\n initializeNewInstanceAtBase(thisInstance, newBase)\n })\n }\n\n // Create new document files for new instance of app\n const initializeNewInstanceInWorkspace = function (ws: NamedNode) {\n // @@ TODO Clean up type for newBase\n let newBase: any = store.any(ws, ns.space('uriPrefix'))\n if (!newBase) {\n newBase = ws.uri.split('#')[0]\n } else {\n newBase = newBase.value\n }\n if (newBase.slice(-1) !== '/') {\n log.error(appPathSegment + ': No / at end of uriPrefix ' + newBase) // @@ paramater?\n newBase = newBase + '/'\n }\n const now = new Date()\n newBase += appPathSegment + '/id' + now.getTime() + '/' // unique id\n\n initializeNewInstanceAtBase(thisInstance, newBase)\n }\n\n const initializeNewInstanceAtBase = function (\n thisInstance: any,\n newBase: string\n ) {\n const here = sym(thisInstance.uri.split('#')[0])\n const base = here // @@ ???\n\n const newPadDoc = store.sym(newBase + 'pad.ttl')\n const newIndexDoc = store.sym(newBase + 'index.html')\n\n const toBeCopied = [{ local: 'index.html', contentType: 'text/html' }]\n\n const newInstance = store.sym(newPadDoc.uri + '#thisPad')\n\n // log.debug(\"\\n Ready to put \" + kb.statementsMatching(undefined, undefined, undefined, there)); //@@\n\n const agenda: Function[] = []\n\n let f // @@ This needs some form of visible progress bar\n for (f = 0; f < toBeCopied.length; f++) {\n const item = toBeCopied[f]\n const fun = function copyItem (item: any) {\n agenda.push(function () {\n const newURI = newBase + item.local\n console.log('Copying ' + base + item.local + ' to ' + newURI)\n\n const setThatACL = function () {\n setACL(newURI, false, function (ok: boolean, message: string) {\n if (!ok) {\n complainIfBad(\n ok,\n 'FAILED to set ACL ' + newURI + ' : ' + message\n )\n console.log('FAILED to set ACL ' + newURI + ' : ' + message)\n } else {\n agenda.shift()!() // beware too much nesting\n }\n })\n }\n if (!store.fetcher) {\n throw new Error('Store has no fetcher')\n }\n store.fetcher\n .webCopy(\n base + item.local,\n newBase + item.local,\n item.contentType\n )\n .then(() => authn.checkUser())\n .then(webId => {\n me = webId\n\n setThatACL()\n })\n .catch(err => {\n console.log(\n 'FAILED to copy ' + base + item.local + ' : ' + err.message\n )\n complainIfBad(\n false,\n 'FAILED to copy ' + base + item.local + ' : ' + err.message\n )\n })\n })\n }\n fun(item)\n }\n\n agenda.push(function createNewPadDataFile () {\n store.add(newInstance, ns.rdf('type'), PAD('Notepad'), newPadDoc)\n\n // TODO @@ Remove casting of add\n store.add(\n newInstance,\n ns.dc('created'),\n new Date() as any, // @@ TODO Remove casting\n newPadDoc\n )\n if (me) {\n store.add(newInstance, ns.dc('author'), me, newPadDoc)\n }\n store.add(newInstance, PAD('next'), newInstance, newPadDoc) // linked list empty\n\n // Keep a paper trail @@ Revisit when we have non-public ones @@ Privacy\n store.add(newInstance, ns.space('inspiration'), thisInstance, padDoc)\n store.add(newInstance, ns.space('inspiration'), thisInstance, newPadDoc)\n if (!updater) {\n throw new Error('Have no updater')\n }\n updater.put(\n newPadDoc,\n store.statementsMatching(undefined, undefined, undefined, newPadDoc),\n 'text/turtle',\n function (_uri2, ok, message) {\n if (ok) {\n agenda.shift()!()\n } else {\n complainIfBad(\n ok,\n 'FAILED to save new notepad at: ' +\n newPadDoc.uri +\n ' : ' +\n message\n )\n console.log(\n 'FAILED to save new notepad at: ' +\n newPadDoc.uri +\n ' : ' +\n message\n )\n }\n }\n )\n })\n\n agenda.push(function () {\n setACL(newPadDoc.uri, true, function (ok: boolean, body: string) {\n complainIfBad(\n ok,\n 'Failed to set Read-Write ACL on pad data file: ' + body\n )\n if (ok) agenda.shift()!()\n })\n })\n\n agenda.push(function () {\n // give the user links to the new app\n\n const p = div.appendChild(dom.createElement('p'))\n p.classList.add('pad-new-instance-message')\n p.innerHTML =\n 'Your <a href=\\'' +\n newIndexDoc.uri +\n '\\'><b>new notepad</b></a> is ready. ' +\n '<br/><br/><a href=\\'' +\n newIndexDoc.uri +\n '\\'>Go to new pad</a>'\n })\n\n agenda.shift()!()\n // Created new data files.\n }\n\n // Update on incoming changes\n const showResults = function (exists: boolean) {\n console.log('showResults()')\n\n me = authn.currentUser()\n\n authn.checkUser().then((webId: unknown) => {\n me = webId as string\n })\n\n const title =\n store.any(subject, ns.dc('title')) || store.any(subject, ns.vcard('fn'))\n if (paneOptions.solo && typeof window !== 'undefined' && title) {\n window.document.title = title.value\n }\n options.exists = exists\n padEle = pad.notepad(dom, padDoc, subject, me, options)\n naviMain.appendChild(padEle)\n\n const partipationTarget =\n store.any(subject, ns.meeting('parentMeeting')) || subject\n pad.manageParticipation(\n dom,\n naviMiddle2,\n padDoc,\n partipationTarget as any,\n me,\n options\n )\n if (!store.updater) {\n throw new Error('Store has no updater')\n }\n\n store.updater.setRefreshHandler(padDoc, padEle.reloadAndSync) // initiated =\n }\n\n // Read or create empty data file\n const loadPadData = function () {\n if (!fetcher) {\n throw new Error('Have no fetcher')\n }\n fetcher.nowOrWhenFetched(padDoc.uri, undefined, function (\n ok: boolean,\n body: string,\n response: any\n ) {\n if (!ok) {\n if (response.status === 404) {\n // / Check explicitly for 404 error\n console.log('Initializing results file ' + padDoc)\n if (!updater) {\n throw new Error('Have no updater')\n }\n updater.put(padDoc, [], 'text/turtle', function (\n _uri2,\n ok,\n message\n ) {\n if (ok) {\n clearElement(naviMain)\n showResults(false)\n } else {\n complainIfBad(\n ok,\n 'FAILED to create results file at: ' +\n padDoc.uri +\n ' : ' +\n message\n )\n console.log(\n 'FAILED to craete results file at: ' +\n padDoc.uri +\n ' : ' +\n message\n )\n }\n })\n } else {\n // Other error, not 404 -- do not try to overwite the file\n complainIfBad(ok, 'FAILED to read results file: ' + body)\n }\n } else {\n // Happy read\n clearElement(naviMain)\n if (store.holds(subject, ns.rdf('type'), ns.wf('TemplateInstance'))) {\n showBootstrap(subject, naviMain, 'pad')\n }\n showResults(true)\n naviMiddle3.appendChild(newInstanceButton())\n }\n })\n }\n\n // Body of Pane\n const appPathSegment = 'app-pad.timbl.com' // how to allocate this string and connect to\n\n const fetcher = store.fetcher\n const updater = store.updater\n let me: any\n\n const PAD = Namespace('http://www.w3.org/ns/pim/pad#')\n\n const thisInstance = subject\n const padDoc = subject.doc()\n\n let padEle\n\n const div = dom.createElement('div')\n\n // Build the DOM\n const structure = div.appendChild(dom.createElement('div')) // responsive flex layout\n structure.className = 'pad-layout'\n\n const naviLoginoutTR = structure.appendChild(dom.createElement('div'))\n naviLoginoutTR.className = 'pad-row'\n naviLoginoutTR.appendChild(dom.createElement('div')) // naviLoginout1\n naviLoginoutTR.appendChild(dom.createElement('div'))\n naviLoginoutTR.appendChild(dom.createElement('div'))\n\n const naviTop = structure.appendChild(dom.createElement('div')) // stuff\n naviTop.className = 'pad-row'\n const naviMain = naviTop.appendChild(dom.createElement('div'))\n naviMain.className = 'pad-main'\n\n const naviMiddle = structure.appendChild(dom.createElement('div')) // controls\n naviMiddle.className = 'pad-row pad-controls'\n const naviMiddle1 = naviMiddle.appendChild(dom.createElement('div'))\n naviMiddle1.className = 'pad-cell'\n const naviMiddle2 = naviMiddle.appendChild(dom.createElement('div'))\n naviMiddle2.className = 'pad-cell'\n const naviMiddle3 = naviMiddle.appendChild(dom.createElement('div'))\n naviMiddle3.className = 'pad-cell'\n\n const naviStatus = structure.appendChild(dom.createElement('div')) // status etc\n naviStatus.className = 'pad-row'\n const statusArea = naviStatus.appendChild(dom.createElement('div'))\n\n const naviSpawn = structure.appendChild(dom.createElement('div')) // create new\n naviSpawn.className = 'pad-row'\n const spawnArea = naviSpawn.appendChild(dom.createElement('div'))\n\n const naviMenu = structure.appendChild(dom.createElement('div'))\n naviMenu.setAttribute('class', 'pad-row naviMenu')\n naviMenu.appendChild(dom.createElement('div')) // naviLeft\n naviMenu.appendChild(dom.createElement('div'))\n naviMenu.appendChild(dom.createElement('div'))\n\n const options: any = { statusArea, timingArea: naviMiddle1 }\n\n loadPadData()\n\n return div\n }\n}\n// ends\n\nexport default paneDef\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- require("../_virtual/_rolldown/runtime.cjs.js");let e=require("solid-ui");var t={icon:e.icons.iconBase+`padlock-timbl.svg`,name:`sharing`,label:(t,n)=>{let r=n.session.store.findTypeURIs(t);return r[e.ns.ldp(`Resource`).uri]||r[e.ns.ldp(`Container`).uri]||r[e.ns.ldp(`BasicContainer`).uri]?`Sharing`:null},render:(t,n)=>{let r=n.dom,i=n.session.store,a=s(),o=r.createElement(`div`);return o.classList.add(`sharingPane`),e.aclControl.preventBrowserDropEvents(r),o.appendChild(e.aclControl.ACLControlBox5(t,n,a,i)),o;function s(){let n=i.findTypeURIs(t);return n[e.ns.ldp(`BasicContainer`).uri]||n[e.ns.ldp(`Container`).uri]?`folder`:`file`}}};exports.default=t;
1
+ let e=require("solid-ui");var t={icon:e.icons.iconBase+`padlock-timbl.svg`,name:`sharing`,label:(t,n)=>{let r=n.session.store.findTypeURIs(t);return r[e.ns.ldp(`Resource`).uri]||r[e.ns.ldp(`Container`).uri]||r[e.ns.ldp(`BasicContainer`).uri]?`Sharing`:null},render:(t,n)=>{let r=n.dom,i=n.session.store,a=s(),o=r.createElement(`div`);return o.classList.add(`sharingPane`),e.aclControl.preventBrowserDropEvents(r),o.appendChild(e.aclControl.ACLControlBox5(t,n,a,i)),o;function s(){let n=i.findTypeURIs(t);return n[e.ns.ldp(`BasicContainer`).uri]||n[e.ns.ldp(`Container`).uri]?`folder`:`file`}}};exports.default=t;
2
2
  //# sourceMappingURL=sharingPane.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sharingPane.cjs.js","names":[],"sources":["../../src/sharing/sharingPane.ts"],"sourcesContent":["/* Sharing Pane\n **\n ** This outline pane allows a user to view and adjust the sharing -- access control lists\n ** for anything which has that capability.\n **\n ** I am using in places single quotes strings like 'this'\n ** where internationalization (\"i18n\") is not a problem, and double quoted\n ** like \"this\" where the string is seen by the user and so I18n is an issue.\n */\n\nimport { aclControl, icons, ns } from 'solid-ui'\n\nconst sharingPane = {\n icon: icons.iconBase + 'padlock-timbl.svg',\n\n name: 'sharing',\n\n label: (subject, context) => {\n const store = context.session.store\n const t = store.findTypeURIs(subject)\n if (t[ns.ldp('Resource').uri]) return 'Sharing' // @@ be more sophisticated?\n if (t[ns.ldp('Container').uri]) return 'Sharing' // @@ be more sophisticated?\n if (t[ns.ldp('BasicContainer').uri]) return 'Sharing' // @@ be more sophisticated?\n // check being allowed to see/change sharing?\n return null // No under other circumstances\n },\n\n render: (subject, context) => {\n const dom = context.dom\n const store = context.session.store\n const noun = getNoun()\n\n const div = dom.createElement('div')\n div.classList.add('sharingPane')\n aclControl.preventBrowserDropEvents(dom)\n div.appendChild(aclControl.ACLControlBox5(subject, context, noun, store))\n return div\n\n function getNoun () {\n const t = store.findTypeURIs(subject)\n if (t[ns.ldp('BasicContainer').uri] || t[ns.ldp('Container').uri]) {\n return 'folder'\n }\n return 'file'\n }\n }\n}\n\nexport default sharingPane\n"],"mappings":"0EAYA,IAAM,EAAc,CAClB,KAAM,EAAA,MAAM,SAAW,oBAEvB,KAAM,UAEN,OAAQ,EAAS,IAAY,CAE3B,IAAM,EADQ,EAAQ,QAAQ,MACd,aAAa,CAAO,EAKpC,OAJI,EAAE,EAAA,GAAG,IAAI,UAAU,CAAC,CAAC,MACrB,EAAE,EAAA,GAAG,IAAI,WAAW,CAAC,CAAC,MACtB,EAAE,EAAA,GAAG,IAAI,gBAAgB,CAAC,CAAC,KAAa,UAErC,IACT,EAEA,QAAS,EAAS,IAAY,CAC5B,IAAM,EAAM,EAAQ,IACd,EAAQ,EAAQ,QAAQ,MACxB,EAAO,EAAQ,EAEf,EAAM,EAAI,cAAc,KAAK,EAInC,OAHA,EAAI,UAAU,IAAI,aAAa,EAC/B,EAAA,WAAW,yBAAyB,CAAG,EACvC,EAAI,YAAY,EAAA,WAAW,eAAe,EAAS,EAAS,EAAM,CAAK,CAAC,EACjE,EAEP,SAAS,GAAW,CAClB,IAAM,EAAI,EAAM,aAAa,CAAO,EAIpC,OAHI,EAAE,EAAA,GAAG,IAAI,gBAAgB,CAAC,CAAC,MAAQ,EAAE,EAAA,GAAG,IAAI,WAAW,CAAC,CAAC,KACpD,SAEF,MACT,CACF,CACF"}
1
+ {"version":3,"file":"sharingPane.cjs.js","names":[],"sources":["../../src/sharing/sharingPane.ts"],"sourcesContent":["/* Sharing Pane\n **\n ** This outline pane allows a user to view and adjust the sharing -- access control lists\n ** for anything which has that capability.\n **\n ** I am using in places single quotes strings like 'this'\n ** where internationalization (\"i18n\") is not a problem, and double quoted\n ** like \"this\" where the string is seen by the user and so I18n is an issue.\n */\n\nimport { aclControl, icons, ns } from 'solid-ui'\n\nconst sharingPane = {\n icon: icons.iconBase + 'padlock-timbl.svg',\n\n name: 'sharing',\n\n label: (subject, context) => {\n const store = context.session.store\n const t = store.findTypeURIs(subject)\n if (t[ns.ldp('Resource').uri]) return 'Sharing' // @@ be more sophisticated?\n if (t[ns.ldp('Container').uri]) return 'Sharing' // @@ be more sophisticated?\n if (t[ns.ldp('BasicContainer').uri]) return 'Sharing' // @@ be more sophisticated?\n // check being allowed to see/change sharing?\n return null // No under other circumstances\n },\n\n render: (subject, context) => {\n const dom = context.dom\n const store = context.session.store\n const noun = getNoun()\n\n const div = dom.createElement('div')\n div.classList.add('sharingPane')\n aclControl.preventBrowserDropEvents(dom)\n div.appendChild(aclControl.ACLControlBox5(subject, context, noun, store))\n return div\n\n function getNoun () {\n const t = store.findTypeURIs(subject)\n if (t[ns.ldp('BasicContainer').uri] || t[ns.ldp('Container').uri]) {\n return 'folder'\n }\n return 'file'\n }\n }\n}\n\nexport default sharingPane\n"],"mappings":"0BAYA,IAAM,EAAc,CAClB,KAAM,EAAA,MAAM,SAAW,oBAEvB,KAAM,UAEN,OAAQ,EAAS,IAAY,CAE3B,IAAM,EADQ,EAAQ,QAAQ,MACd,aAAa,CAAO,EAKpC,OAJI,EAAE,EAAA,GAAG,IAAI,UAAU,CAAC,CAAC,MACrB,EAAE,EAAA,GAAG,IAAI,WAAW,CAAC,CAAC,MACtB,EAAE,EAAA,GAAG,IAAI,gBAAgB,CAAC,CAAC,KAAa,UAErC,IACT,EAEA,QAAS,EAAS,IAAY,CAC5B,IAAM,EAAM,EAAQ,IACd,EAAQ,EAAQ,QAAQ,MACxB,EAAO,EAAQ,EAEf,EAAM,EAAI,cAAc,KAAK,EAInC,OAHA,EAAI,UAAU,IAAI,aAAa,EAC/B,EAAA,WAAW,yBAAyB,CAAG,EACvC,EAAI,YAAY,EAAA,WAAW,eAAe,EAAS,EAAS,EAAM,CAAK,CAAC,EACjE,EAEP,SAAS,GAAW,CAClB,IAAM,EAAI,EAAM,aAAa,CAAO,EAIpC,OAHI,EAAE,EAAA,GAAG,IAAI,gBAAgB,CAAC,CAAC,MAAQ,EAAE,EAAA,GAAG,IAAI,WAAW,CAAC,CAAC,KACpD,SAEF,MACT,CACF,CACF"}
@@ -1,2 +1,2 @@
1
- require("../_virtual/_rolldown/runtime.cjs.js"),require("./icons.cjs.js"),require("./spinner.cjs.js");let e=require("solid-ui");require("rdflib"),require("lit-html"),require("solid-ui/components/button"),e.ns.foaf(`homepage`),e.ns.foaf(`weblog`),e.ns.foaf(`workplaceHomepage`),e.ns.foaf(`schoolHomepage`);function t(e,t,n,r){}exports.appendProfileLinks=t;
1
+ require("./icons.cjs.js"),require("./spinner.cjs.js");let e=require("solid-ui");require("rdflib"),require("solid-ui/components/button"),require("lit-html"),e.ns.foaf(`homepage`),e.ns.foaf(`weblog`),e.ns.foaf(`workplaceHomepage`),e.ns.foaf(`schoolHomepage`);function t(e,t,n,r){}exports.appendProfileLinks=t;
2
2
  //# sourceMappingURL=editProfileDetails.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"editProfileDetails.cjs.js","names":[],"sources":["../../src/social/editProfileDetails.ts"],"sourcesContent":["import { LiveStore, NamedNode, st, sym } from 'rdflib'\nimport { html, render } from 'lit-html'\nimport { ns } from 'solid-ui'\nimport 'solid-ui/components/button'\nimport { editIcon, plusIcon, trashIcon } from './icons'\nimport { createSpinner } from './spinner'\n/* The following code was generated by AI Model: GPT-5.4\n Prompt: can you create me a form to enter this data [\nns.foaf('homepage'),\nns.foaf('weblog'),\nns.foaf('workplaceHomepage'),\nns.foaf('schoolHomepage')\n] and put an edit button at the top left corner of the header\n that when you click it pops up so you can enter this information\n and save it to the Webid. You can look in\n Dev2025/profile-pane/src/sections/heading/mutations to see how\n to write this data in the profile. */\ntype SolidUIButton = HTMLElement & {\n type: string\n variant: string\n size: string\n label: string\n disabled: boolean\n}\n\ntype ProfileLinkField = {\n key: 'homepage' | 'weblog' | 'workplaceHomepage' | 'schoolHomepage'\n label: string\n placeholder: string\n predicate: NamedNode\n}\n\ntype ProfileLinksValues = Record<ProfileLinkField['key'], string[]>\n\ntype EditProfileDetailsButtonOptions = {\n dom: HTMLDocument\n store: LiveStore\n subject: NamedNode\n onSaved: () => void\n}\n\nexport const profileLinkFields: ProfileLinkField[] = [\n {\n key: 'homepage',\n label: 'Homepage',\n placeholder: 'https://example.com',\n predicate: ns.foaf('homepage')\n },\n {\n key: 'weblog',\n label: 'Weblog',\n placeholder: 'https://blog.example.com',\n predicate: ns.foaf('weblog')\n },\n {\n key: 'workplaceHomepage',\n label: 'Workplace Homepage',\n placeholder: 'https://company.example.com',\n predicate: ns.foaf('workplaceHomepage')\n },\n {\n key: 'schoolHomepage',\n label: 'School Homepage',\n placeholder: 'https://school.example.edu',\n predicate: ns.foaf('schoolHomepage')\n }\n]\n\nfunction createEmptyProfileLinkValues (): ProfileLinksValues {\n return {\n homepage: [''],\n weblog: [''],\n workplaceHomepage: [''],\n schoolHomepage: ['']\n }\n}\n\nfunction readProfileLinkValues (store: LiveStore, subject: NamedNode): ProfileLinksValues {\n const doc = subject.doc()\n return profileLinkFields.reduce((result, field) => {\n const values = store\n .statementsMatching(subject, field.predicate, undefined, doc)\n .map((statement) => statement.object?.value || '')\n .filter(Boolean)\n\n result[field.key] = values.length ? values : ['']\n return result\n }, createEmptyProfileLinkValues())\n}\n\nfunction normalizeUrlList (values: string[], fieldLabel: string): string[] {\n const unique = new Set<string>()\n const lines = values\n .map((entry) => entry.trim())\n .filter(Boolean)\n\n for (const line of lines) {\n let parsed: URL\n try {\n parsed = new URL(line)\n } catch {\n throw new Error(`${fieldLabel} must contain valid absolute URLs.`)\n }\n\n if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') {\n throw new Error(`${fieldLabel} only supports http and https URLs.`)\n }\n\n unique.add(parsed.toString())\n }\n\n return [...unique]\n}\n\nasync function saveProfileLinkValues (\n store: LiveStore,\n subject: NamedNode,\n values: ProfileLinksValues\n): Promise<void> {\n const updater = (store as any).updater\n const fetcher = (store as any).fetcher\n if (!updater || typeof updater.serialize !== 'function' || !fetcher || typeof fetcher.webOperation !== 'function') {\n throw new Error('This profile cannot be edited with the current store.')\n }\n\n const doc = subject.doc()\n const insertions: any[] = []\n const existingStatements: any[] = []\n\n for (const field of profileLinkFields) {\n existingStatements.push(...store.statementsMatching(subject, field.predicate, undefined, doc))\n const nextValues = normalizeUrlList(values[field.key], field.label)\n for (const nextValue of nextValues) {\n insertions.push(st(subject, field.predicate, sym(nextValue), doc))\n }\n }\n\n const retainedStatements = store\n .statementsMatching(undefined, undefined, undefined, doc)\n .filter((statement) => {\n return !profileLinkFields.some((field) => {\n return statement.subject.equals(subject) && statement.predicate.equals(field.predicate)\n })\n })\n\n const nextStatements = retainedStatements.concat(insertions)\n const contentType = 'text/turtle'\n const body = updater.serialize(doc.value, nextStatements, contentType)\n const response = await fetcher.webOperation('PUT', doc.value, {\n noMeta: true,\n contentType,\n body\n })\n\n if (!response || response.ok !== true) {\n const status = response?.status || 'unknown'\n throw new Error(`Unable to save profile links. Web error: ${status}`)\n }\n\n existingStatements.forEach((statement) => {\n store.removeStatement(statement)\n })\n\n for (const statement of insertions) {\n store.add(statement.subject, statement.predicate, statement.object, statement.why)\n }\n}\n\nexport function appendProfileLinks (\n _container: HTMLElement,\n _dom: HTMLDocument,\n _store: LiveStore,\n _subject: NamedNode\n): void {\n // Hidden for now because social-pane website links are not part of the new design.\n // Revisit later if we decide to show profile links in this header again.\n}\n\nexport function createEditProfileDetailsButton (\n options: EditProfileDetailsButtonOptions\n): HTMLElement {\n const { dom, store, subject, onSaved } = options\n const button = dom.createElement('solid-ui-button') as SolidUIButton\n button.type = 'button'\n button.className = 'social-pane__edit-button profile__action-button profile__heading-action-button profile-action-text flex-center profile-section-collapsible__edit-button'\n button.variant = 'secondary'\n button.size = 'sm'\n\n const label = dom.createElement('span')\n label.className = 'profile-section-collapsible__edit-label social-pane__edit-button-label'\n label.innerHTML = `${editIcon} Edit`\n button.appendChild(label)\n\n const icon = dom.createElement('span')\n icon.className = 'profile-section-collapsible__edit-icon social-pane__edit-button-icon'\n icon.setAttribute('aria-hidden', 'true')\n icon.innerHTML = editIcon\n button.appendChild(icon)\n\n button.setAttribute('aria-label', 'Edit profile links')\n\n const openDialog = () => {\n const initialValues = readProfileLinkValues(store, subject)\n const formState = profileLinkFields.reduce((result, field) => {\n result[field.key] = [...initialValues[field.key]]\n return result\n }, createEmptyProfileLinkValues())\n const overlay = dom.createElement('div')\n overlay.classList.add('social-pane__dialog-backdrop', 'flex-center')\n\n const dialog = dom.createElement('div')\n dialog.classList.add('social-pane__dialog')\n dialog.setAttribute('role', 'dialog')\n dialog.setAttribute('aria-modal', 'true')\n dialog.setAttribute('aria-label', 'Edit profile links')\n overlay.appendChild(dialog)\n\n const dialogHeader = dom.createElement('div')\n dialogHeader.classList.add('social-pane__dialog-header')\n dialog.appendChild(dialogHeader)\n\n const title = dom.createElement('h2')\n title.className = 'social-pane__dialog-title'\n title.textContent = 'Edit profile links'\n dialogHeader.appendChild(title)\n\n const form = dom.createElement('form')\n form.classList.add('social-pane__dialog-form', 'flex-column')\n dialog.appendChild(form)\n\n const savingOverlay = dom.createElement('div')\n savingOverlay.className = 'social-pane__dialog-saving-overlay'\n savingOverlay.hidden = true\n dialog.appendChild(savingOverlay)\n\n const fieldsContainer = dom.createElement('div')\n fieldsContainer.className = 'social-pane__dialog-fields'\n form.appendChild(fieldsContainer)\n\n const errorMessage = dom.createElement('p')\n errorMessage.className = 'social-pane__dialog-error'\n\n const focusRow = (fieldKey: ProfileLinkField['key'], rowIndex: number) => {\n const nextField = fieldsContainer.querySelector<HTMLInputElement>(`input[data-profile-link-key=\"${fieldKey}\"][data-profile-link-index=\"${String(rowIndex)}\"]`)\n nextField?.focus()\n }\n\n const renderFields = (focusTarget?: { fieldKey: ProfileLinkField['key'], rowIndex: number }) => {\n fieldsContainer.replaceChildren()\n\n for (const field of profileLinkFields) {\n const fieldWrapper = dom.createElement('section')\n fieldWrapper.classList.add('social-pane__dialog-field', 'flex-column')\n\n const fieldHeader = dom.createElement('div')\n fieldHeader.className = 'social-pane__dialog-field-header'\n fieldWrapper.appendChild(fieldHeader)\n\n const fieldLabel = dom.createElement('h3')\n fieldLabel.className = 'social-pane__dialog-label'\n fieldLabel.textContent = field.label\n fieldHeader.appendChild(fieldLabel)\n\n const addButton = dom.createElement('solid-ui-button') as SolidUIButton\n addButton.type = 'button'\n addButton.className = 'social-pane__dialog-row-button--add'\n addButton.setAttribute('aria-label', `Add another ${field.label.toLowerCase()}`)\n addButton.variant = 'secondary'\n addButton.size = 'sm'\n const addButtonContent = dom.createElement('span')\n addButtonContent.className = 'social-pane__add-more-content'\n const addButtonInline = dom.createElement('span')\n addButtonInline.className = 'social-pane__add-more-inline'\n const addButtonIcon = dom.createElement('span')\n addButtonIcon.className = 'social-pane__add-more-icon'\n addButtonIcon.setAttribute('aria-hidden', 'true')\n addButtonIcon.innerHTML = plusIcon\n const addButtonText = dom.createElement('span')\n addButtonText.textContent = 'Add More'\n addButtonInline.appendChild(addButtonIcon)\n addButtonInline.appendChild(addButtonText)\n addButtonContent.appendChild(addButtonInline)\n addButton.appendChild(addButtonContent)\n addButton.addEventListener('click', () => {\n formState[field.key].push('')\n renderFields({ fieldKey: field.key, rowIndex: formState[field.key].length - 1 })\n })\n fieldHeader.appendChild(addButton)\n\n const rows = dom.createElement('div')\n rows.className = 'social-pane__dialog-row-list'\n fieldWrapper.appendChild(rows)\n\n const values = formState[field.key].length ? formState[field.key] : ['']\n values.forEach((value, index) => {\n const row = dom.createElement('div')\n row.className = 'social-pane__dialog-row'\n\n const input = dom.createElement('input')\n input.classList.add('social-pane__dialog-input', 'input')\n input.type = 'url'\n input.placeholder = field.placeholder\n input.value = value\n input.setAttribute('data-profile-link-key', field.key)\n input.setAttribute('data-profile-link-index', String(index))\n input.addEventListener('input', () => {\n formState[field.key][index] = input.value\n })\n row.appendChild(input)\n\n const removeButton = dom.createElement('solid-ui-button') as SolidUIButton\n removeButton.type = 'button'\n removeButton.className = 'social-pane__dialog-row-button--remove'\n removeButton.setAttribute('aria-label', `Remove ${field.label.toLowerCase()} ${index + 1}`)\n removeButton.setAttribute('title', 'Remove')\n removeButton.variant = 'icon'\n removeButton.size = 'md'\n const removeButtonIcon = dom.createElement('span')\n removeButtonIcon.className = 'social-pane__dialog-row-button-icon social-pane__dialog-row-button-icon--remove'\n removeButtonIcon.setAttribute('slot', 'icon')\n removeButtonIcon.setAttribute('aria-hidden', 'true')\n removeButtonIcon.innerHTML = trashIcon\n removeButton.appendChild(removeButtonIcon)\n removeButton.addEventListener('click', () => {\n if (formState[field.key].length === 1) {\n formState[field.key][0] = ''\n } else {\n formState[field.key].splice(index, 1)\n }\n renderFields()\n })\n row.appendChild(removeButton)\n\n rows.appendChild(row)\n })\n\n fieldsContainer.appendChild(fieldWrapper)\n }\n\n if (focusTarget) {\n focusRow(focusTarget.fieldKey, focusTarget.rowIndex)\n }\n }\n\n renderFields()\n\n form.appendChild(errorMessage)\n\n const actions = dom.createElement('div')\n actions.className = 'social-pane__dialog-actions'\n form.appendChild(actions)\n\n const closeButton = dom.createElement('solid-ui-button') as SolidUIButton\n closeButton.type = 'button'\n closeButton.className = 'social-pane__dialog-button--cancel'\n closeButton.setAttribute('aria-label', 'Close dialog')\n closeButton.label = 'Close'\n closeButton.variant = 'secondary'\n closeButton.size = 'md'\n actions.appendChild(closeButton)\n\n const saveButton = dom.createElement('solid-ui-button') as SolidUIButton\n saveButton.type = 'button'\n saveButton.className = 'social-pane__dialog-button--save'\n saveButton.label = 'Save Changes'\n saveButton.variant = 'primary'\n saveButton.size = 'md'\n actions.appendChild(saveButton)\n\n let isSaving = false\n\n const setSavingState = (nextSaving: boolean) => {\n isSaving = nextSaving\n dialog.classList.toggle('modal--saving', nextSaving)\n dialog.setAttribute('aria-busy', String(nextSaving))\n form.toggleAttribute('inert', nextSaving)\n saveButton.disabled = nextSaving\n saveButton.setAttribute('aria-busy', String(nextSaving))\n closeButton.disabled = nextSaving\n savingOverlay.hidden = !nextSaving\n\n if (nextSaving) {\n const activeElement = dialog.ownerDocument.activeElement as HTMLElement | null\n if (activeElement && dialog.contains(activeElement)) {\n activeElement.blur()\n }\n\n render(html`\n <div class=\"modal__saving-indicator inline-flex-row justify-center\" aria-live=\"polite\" aria-label=\"Saving changes\">\n ${createSpinner()}\n </div>\n `, savingOverlay)\n } else {\n render(html``, savingOverlay)\n }\n }\n\n const closeDialog = (force = false) => {\n if (isSaving && !force) return\n overlay.remove()\n }\n\n const requestCloseDialog = () => {\n closeDialog()\n }\n\n const handleSave = async () => {\n errorMessage.textContent = ''\n setSavingState(true)\n\n const nextValues = profileLinkFields.reduce((result, field) => {\n result[field.key] = [...formState[field.key]]\n return result\n }, createEmptyProfileLinkValues())\n\n try {\n await saveProfileLinkValues(store, subject, nextValues)\n setSavingState(false)\n closeDialog(true)\n onSaved()\n } catch (error) {\n errorMessage.textContent = error instanceof Error ? error.message : 'Unable to save profile links.'\n } finally {\n if (isSaving) {\n setSavingState(false)\n }\n }\n }\n\n overlay.addEventListener('click', (event) => {\n if (event.target === overlay) closeDialog()\n })\n closeButton.addEventListener('click', requestCloseDialog)\n\n saveButton.addEventListener('click', async (event) => {\n event.preventDefault()\n await handleSave()\n })\n\n overlay.addEventListener('keydown', (event) => {\n if (event.key === 'Escape') closeDialog()\n })\n\n form.addEventListener('submit', (event) => {\n event.preventDefault()\n })\n\n dom.body.appendChild(overlay)\n focusRow('homepage', 0)\n }\n\n button.addEventListener('click', openDialog)\n return button\n}\n"],"mappings":"4MA8Ce,EAAA,GAAG,KAAK,UAAU,EAMlB,EAAA,GAAG,KAAK,QAAQ,EAMhB,EAAA,GAAG,KAAK,mBAAmB,EAM3B,EAAA,GAAG,KAAK,gBAAgB,EAwGvC,SAAgB,EACd,EACA,EACA,EACA,EACM,CAGR"}
1
+ {"version":3,"file":"editProfileDetails.cjs.js","names":[],"sources":["../../src/social/editProfileDetails.ts"],"sourcesContent":["import { LiveStore, NamedNode, st, sym } from 'rdflib'\nimport { html, render } from 'lit-html'\nimport { ns } from 'solid-ui'\nimport 'solid-ui/components/button'\nimport { editIcon, plusIcon, trashIcon } from './icons'\nimport { createSpinner } from './spinner'\n/* The following code was generated by AI Model: GPT-5.4\n Prompt: can you create me a form to enter this data [\nns.foaf('homepage'),\nns.foaf('weblog'),\nns.foaf('workplaceHomepage'),\nns.foaf('schoolHomepage')\n] and put an edit button at the top left corner of the header\n that when you click it pops up so you can enter this information\n and save it to the Webid. You can look in\n Dev2025/profile-pane/src/sections/heading/mutations to see how\n to write this data in the profile. */\ntype SolidUIButton = HTMLElement & {\n type: string\n variant: string\n size: string\n label: string\n disabled: boolean\n}\n\ntype ProfileLinkField = {\n key: 'homepage' | 'weblog' | 'workplaceHomepage' | 'schoolHomepage'\n label: string\n placeholder: string\n predicate: NamedNode\n}\n\ntype ProfileLinksValues = Record<ProfileLinkField['key'], string[]>\n\ntype EditProfileDetailsButtonOptions = {\n dom: HTMLDocument\n store: LiveStore\n subject: NamedNode\n onSaved: () => void\n}\n\nexport const profileLinkFields: ProfileLinkField[] = [\n {\n key: 'homepage',\n label: 'Homepage',\n placeholder: 'https://example.com',\n predicate: ns.foaf('homepage')\n },\n {\n key: 'weblog',\n label: 'Weblog',\n placeholder: 'https://blog.example.com',\n predicate: ns.foaf('weblog')\n },\n {\n key: 'workplaceHomepage',\n label: 'Workplace Homepage',\n placeholder: 'https://company.example.com',\n predicate: ns.foaf('workplaceHomepage')\n },\n {\n key: 'schoolHomepage',\n label: 'School Homepage',\n placeholder: 'https://school.example.edu',\n predicate: ns.foaf('schoolHomepage')\n }\n]\n\nfunction createEmptyProfileLinkValues (): ProfileLinksValues {\n return {\n homepage: [''],\n weblog: [''],\n workplaceHomepage: [''],\n schoolHomepage: ['']\n }\n}\n\nfunction readProfileLinkValues (store: LiveStore, subject: NamedNode): ProfileLinksValues {\n const doc = subject.doc()\n return profileLinkFields.reduce((result, field) => {\n const values = store\n .statementsMatching(subject, field.predicate, undefined, doc)\n .map((statement) => statement.object?.value || '')\n .filter(Boolean)\n\n result[field.key] = values.length ? values : ['']\n return result\n }, createEmptyProfileLinkValues())\n}\n\nfunction normalizeUrlList (values: string[], fieldLabel: string): string[] {\n const unique = new Set<string>()\n const lines = values\n .map((entry) => entry.trim())\n .filter(Boolean)\n\n for (const line of lines) {\n let parsed: URL\n try {\n parsed = new URL(line)\n } catch {\n throw new Error(`${fieldLabel} must contain valid absolute URLs.`)\n }\n\n if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') {\n throw new Error(`${fieldLabel} only supports http and https URLs.`)\n }\n\n unique.add(parsed.toString())\n }\n\n return [...unique]\n}\n\nasync function saveProfileLinkValues (\n store: LiveStore,\n subject: NamedNode,\n values: ProfileLinksValues\n): Promise<void> {\n const updater = (store as any).updater\n const fetcher = (store as any).fetcher\n if (!updater || typeof updater.serialize !== 'function' || !fetcher || typeof fetcher.webOperation !== 'function') {\n throw new Error('This profile cannot be edited with the current store.')\n }\n\n const doc = subject.doc()\n const insertions: any[] = []\n const existingStatements: any[] = []\n\n for (const field of profileLinkFields) {\n existingStatements.push(...store.statementsMatching(subject, field.predicate, undefined, doc))\n const nextValues = normalizeUrlList(values[field.key], field.label)\n for (const nextValue of nextValues) {\n insertions.push(st(subject, field.predicate, sym(nextValue), doc))\n }\n }\n\n const retainedStatements = store\n .statementsMatching(undefined, undefined, undefined, doc)\n .filter((statement) => {\n return !profileLinkFields.some((field) => {\n return statement.subject.equals(subject) && statement.predicate.equals(field.predicate)\n })\n })\n\n const nextStatements = retainedStatements.concat(insertions)\n const contentType = 'text/turtle'\n const body = updater.serialize(doc.value, nextStatements, contentType)\n const response = await fetcher.webOperation('PUT', doc.value, {\n noMeta: true,\n contentType,\n body\n })\n\n if (!response || response.ok !== true) {\n const status = response?.status || 'unknown'\n throw new Error(`Unable to save profile links. Web error: ${status}`)\n }\n\n existingStatements.forEach((statement) => {\n store.removeStatement(statement)\n })\n\n for (const statement of insertions) {\n store.add(statement.subject, statement.predicate, statement.object, statement.why)\n }\n}\n\nexport function appendProfileLinks (\n _container: HTMLElement,\n _dom: HTMLDocument,\n _store: LiveStore,\n _subject: NamedNode\n): void {\n // Hidden for now because social-pane website links are not part of the new design.\n // Revisit later if we decide to show profile links in this header again.\n}\n\nexport function createEditProfileDetailsButton (\n options: EditProfileDetailsButtonOptions\n): HTMLElement {\n const { dom, store, subject, onSaved } = options\n const button = dom.createElement('solid-ui-button') as SolidUIButton\n button.type = 'button'\n button.className = 'social-pane__edit-button profile__action-button profile__heading-action-button profile-action-text flex-center profile-section-collapsible__edit-button'\n button.variant = 'secondary'\n button.size = 'sm'\n\n const label = dom.createElement('span')\n label.className = 'profile-section-collapsible__edit-label social-pane__edit-button-label'\n label.innerHTML = `${editIcon} Edit`\n button.appendChild(label)\n\n const icon = dom.createElement('span')\n icon.className = 'profile-section-collapsible__edit-icon social-pane__edit-button-icon'\n icon.setAttribute('aria-hidden', 'true')\n icon.innerHTML = editIcon\n button.appendChild(icon)\n\n button.setAttribute('aria-label', 'Edit profile links')\n\n const openDialog = () => {\n const initialValues = readProfileLinkValues(store, subject)\n const formState = profileLinkFields.reduce((result, field) => {\n result[field.key] = [...initialValues[field.key]]\n return result\n }, createEmptyProfileLinkValues())\n const overlay = dom.createElement('div')\n overlay.classList.add('social-pane__dialog-backdrop', 'flex-center')\n\n const dialog = dom.createElement('div')\n dialog.classList.add('social-pane__dialog')\n dialog.setAttribute('role', 'dialog')\n dialog.setAttribute('aria-modal', 'true')\n dialog.setAttribute('aria-label', 'Edit profile links')\n overlay.appendChild(dialog)\n\n const dialogHeader = dom.createElement('div')\n dialogHeader.classList.add('social-pane__dialog-header')\n dialog.appendChild(dialogHeader)\n\n const title = dom.createElement('h2')\n title.className = 'social-pane__dialog-title'\n title.textContent = 'Edit profile links'\n dialogHeader.appendChild(title)\n\n const form = dom.createElement('form')\n form.classList.add('social-pane__dialog-form', 'flex-column')\n dialog.appendChild(form)\n\n const savingOverlay = dom.createElement('div')\n savingOverlay.className = 'social-pane__dialog-saving-overlay'\n savingOverlay.hidden = true\n dialog.appendChild(savingOverlay)\n\n const fieldsContainer = dom.createElement('div')\n fieldsContainer.className = 'social-pane__dialog-fields'\n form.appendChild(fieldsContainer)\n\n const errorMessage = dom.createElement('p')\n errorMessage.className = 'social-pane__dialog-error'\n\n const focusRow = (fieldKey: ProfileLinkField['key'], rowIndex: number) => {\n const nextField = fieldsContainer.querySelector<HTMLInputElement>(`input[data-profile-link-key=\"${fieldKey}\"][data-profile-link-index=\"${String(rowIndex)}\"]`)\n nextField?.focus()\n }\n\n const renderFields = (focusTarget?: { fieldKey: ProfileLinkField['key'], rowIndex: number }) => {\n fieldsContainer.replaceChildren()\n\n for (const field of profileLinkFields) {\n const fieldWrapper = dom.createElement('section')\n fieldWrapper.classList.add('social-pane__dialog-field', 'flex-column')\n\n const fieldHeader = dom.createElement('div')\n fieldHeader.className = 'social-pane__dialog-field-header'\n fieldWrapper.appendChild(fieldHeader)\n\n const fieldLabel = dom.createElement('h3')\n fieldLabel.className = 'social-pane__dialog-label'\n fieldLabel.textContent = field.label\n fieldHeader.appendChild(fieldLabel)\n\n const addButton = dom.createElement('solid-ui-button') as SolidUIButton\n addButton.type = 'button'\n addButton.className = 'social-pane__dialog-row-button--add'\n addButton.setAttribute('aria-label', `Add another ${field.label.toLowerCase()}`)\n addButton.variant = 'secondary'\n addButton.size = 'sm'\n const addButtonContent = dom.createElement('span')\n addButtonContent.className = 'social-pane__add-more-content'\n const addButtonInline = dom.createElement('span')\n addButtonInline.className = 'social-pane__add-more-inline'\n const addButtonIcon = dom.createElement('span')\n addButtonIcon.className = 'social-pane__add-more-icon'\n addButtonIcon.setAttribute('aria-hidden', 'true')\n addButtonIcon.innerHTML = plusIcon\n const addButtonText = dom.createElement('span')\n addButtonText.textContent = 'Add More'\n addButtonInline.appendChild(addButtonIcon)\n addButtonInline.appendChild(addButtonText)\n addButtonContent.appendChild(addButtonInline)\n addButton.appendChild(addButtonContent)\n addButton.addEventListener('click', () => {\n formState[field.key].push('')\n renderFields({ fieldKey: field.key, rowIndex: formState[field.key].length - 1 })\n })\n fieldHeader.appendChild(addButton)\n\n const rows = dom.createElement('div')\n rows.className = 'social-pane__dialog-row-list'\n fieldWrapper.appendChild(rows)\n\n const values = formState[field.key].length ? formState[field.key] : ['']\n values.forEach((value, index) => {\n const row = dom.createElement('div')\n row.className = 'social-pane__dialog-row'\n\n const input = dom.createElement('input')\n input.classList.add('social-pane__dialog-input', 'input')\n input.type = 'url'\n input.placeholder = field.placeholder\n input.value = value\n input.setAttribute('data-profile-link-key', field.key)\n input.setAttribute('data-profile-link-index', String(index))\n input.addEventListener('input', () => {\n formState[field.key][index] = input.value\n })\n row.appendChild(input)\n\n const removeButton = dom.createElement('solid-ui-button') as SolidUIButton\n removeButton.type = 'button'\n removeButton.className = 'social-pane__dialog-row-button--remove'\n removeButton.setAttribute('aria-label', `Remove ${field.label.toLowerCase()} ${index + 1}`)\n removeButton.setAttribute('title', 'Remove')\n removeButton.variant = 'icon'\n removeButton.size = 'md'\n const removeButtonIcon = dom.createElement('span')\n removeButtonIcon.className = 'social-pane__dialog-row-button-icon social-pane__dialog-row-button-icon--remove'\n removeButtonIcon.setAttribute('slot', 'icon')\n removeButtonIcon.setAttribute('aria-hidden', 'true')\n removeButtonIcon.innerHTML = trashIcon\n removeButton.appendChild(removeButtonIcon)\n removeButton.addEventListener('click', () => {\n if (formState[field.key].length === 1) {\n formState[field.key][0] = ''\n } else {\n formState[field.key].splice(index, 1)\n }\n renderFields()\n })\n row.appendChild(removeButton)\n\n rows.appendChild(row)\n })\n\n fieldsContainer.appendChild(fieldWrapper)\n }\n\n if (focusTarget) {\n focusRow(focusTarget.fieldKey, focusTarget.rowIndex)\n }\n }\n\n renderFields()\n\n form.appendChild(errorMessage)\n\n const actions = dom.createElement('div')\n actions.className = 'social-pane__dialog-actions'\n form.appendChild(actions)\n\n const closeButton = dom.createElement('solid-ui-button') as SolidUIButton\n closeButton.type = 'button'\n closeButton.className = 'social-pane__dialog-button--cancel'\n closeButton.setAttribute('aria-label', 'Close dialog')\n closeButton.label = 'Close'\n closeButton.variant = 'secondary'\n closeButton.size = 'md'\n actions.appendChild(closeButton)\n\n const saveButton = dom.createElement('solid-ui-button') as SolidUIButton\n saveButton.type = 'button'\n saveButton.className = 'social-pane__dialog-button--save'\n saveButton.label = 'Save Changes'\n saveButton.variant = 'primary'\n saveButton.size = 'md'\n actions.appendChild(saveButton)\n\n let isSaving = false\n\n const setSavingState = (nextSaving: boolean) => {\n isSaving = nextSaving\n dialog.classList.toggle('modal--saving', nextSaving)\n dialog.setAttribute('aria-busy', String(nextSaving))\n form.toggleAttribute('inert', nextSaving)\n saveButton.disabled = nextSaving\n saveButton.setAttribute('aria-busy', String(nextSaving))\n closeButton.disabled = nextSaving\n savingOverlay.hidden = !nextSaving\n\n if (nextSaving) {\n const activeElement = dialog.ownerDocument.activeElement as HTMLElement | null\n if (activeElement && dialog.contains(activeElement)) {\n activeElement.blur()\n }\n\n render(html`\n <div class=\"modal__saving-indicator inline-flex-row justify-center\" aria-live=\"polite\" aria-label=\"Saving changes\">\n ${createSpinner()}\n </div>\n `, savingOverlay)\n } else {\n render(html``, savingOverlay)\n }\n }\n\n const closeDialog = (force = false) => {\n if (isSaving && !force) return\n overlay.remove()\n }\n\n const requestCloseDialog = () => {\n closeDialog()\n }\n\n const handleSave = async () => {\n errorMessage.textContent = ''\n setSavingState(true)\n\n const nextValues = profileLinkFields.reduce((result, field) => {\n result[field.key] = [...formState[field.key]]\n return result\n }, createEmptyProfileLinkValues())\n\n try {\n await saveProfileLinkValues(store, subject, nextValues)\n setSavingState(false)\n closeDialog(true)\n onSaved()\n } catch (error) {\n errorMessage.textContent = error instanceof Error ? error.message : 'Unable to save profile links.'\n } finally {\n if (isSaving) {\n setSavingState(false)\n }\n }\n }\n\n overlay.addEventListener('click', (event) => {\n if (event.target === overlay) closeDialog()\n })\n closeButton.addEventListener('click', requestCloseDialog)\n\n saveButton.addEventListener('click', async (event) => {\n event.preventDefault()\n await handleSave()\n })\n\n overlay.addEventListener('keydown', (event) => {\n if (event.key === 'Escape') closeDialog()\n })\n\n form.addEventListener('submit', (event) => {\n event.preventDefault()\n })\n\n dom.body.appendChild(overlay)\n focusRow('homepage', 0)\n }\n\n button.addEventListener('click', openDialog)\n return button\n}\n"],"mappings":"4JA8Ce,EAAA,GAAG,KAAK,UAAU,EAMlB,EAAA,GAAG,KAAK,QAAQ,EAMhB,EAAA,GAAG,KAAK,mBAAmB,EAM3B,EAAA,GAAG,KAAK,gBAAgB,EAwGvC,SAAgB,EACd,EACA,EACA,EACA,EACM,CAGR"}
@@ -2,8 +2,8 @@ import "./icons.esm.js";
2
2
  import "./spinner.esm.js";
3
3
  import { ns as e } from "solid-ui";
4
4
  import "rdflib";
5
- import "lit-html";
6
5
  import "solid-ui/components/button";
6
+ import "lit-html";
7
7
  e.foaf("homepage"), e.foaf("weblog"), e.foaf("workplaceHomepage"), e.foaf("schoolHomepage");
8
8
  function t(e, t, n, r) {}
9
9
  //#endregion
@@ -1,4 +1,4 @@
1
- (function(){try{if(typeof document<`u`){var e=document.createElement(`style`);e.appendChild(document.createTextNode(`.social-pane-host,.social-pane{--profile-interactive-cursor:pointer;background:var(--color-background,#f8f9fb);border-radius:var(--border-radius-base,.3125rem);box-sizing:border-box;width:100%;min-width:100%;max-width:none;margin-top:20px;display:block;overflow:visible}.social-pane__header-content{align-items:flex-start;column-gap:var(--spacing-md,1.25rem);row-gap:var(--spacing-xxs,.3125rem);grid-template-columns:auto minmax(0,1fr) auto;width:100%;min-width:0;display:grid}.social-pane__header-media{grid-area:1/1}.social-pane__header-details{flex-direction:column;grid-area:1/2;align-items:flex-start;min-width:0;display:flex}.social-pane__header-actions{place-self:flex-start end;align-items:flex-start;gap:var(--spacing-xs,.5rem);flex-wrap:wrap;grid-area:1/3;margin-left:auto;display:flex}.social-pane__header-actions--friend{justify-content:center}.social-pane__header-actions--friend>solid-ui-button{--button-border-radius:var(--border-radius-md,.5rem);--button-hover-text:var(--color-primary,#7c4dff);--button-hover-border:var(--color-primary,#7c4dff);margin-inline:auto}.social-pane__header-summary{align-items:flex-start;gap:var(--spacing-xxs,.125rem);flex-direction:column;width:100%;max-width:100%;display:flex}.social-pane__header-stats{gap:var(--spacing-xs,.75rem);margin-top:var(--spacing-xxs,.3125rem);flex-wrap:wrap;justify-content:flex-start;align-self:flex-start;display:flex}.social-pane__header-stat{appearance:none;cursor:var(--profile-interactive-cursor,pointer);color:var(--slate-700,#314158);font-size:var(--font-size-sm,.875rem);font-weight:var(--font-weight-bold,600);line-height:var(--line-height-tight,1.4);background:0 0;border:0;padding:0;text-decoration:none}.social-pane__header-stat+.social-pane__header-stat:before{content:"◆";color:var(--gray-400,#99a1af);margin-right:var(--spacing-xs,.75rem);vertical-align:middle;font-size:.5rem}.social-pane__header-stat:hover .social-pane__header-stat-label{text-decoration:underline}.social-pane__header-stat:focus-visible{outline:var(--border-width-medium,2px) solid #111827;outline-offset:2px}.social-pane__edit-button{--button-height-sm:0;--button-padding-sm:var(--spacing-xxs,.3125rem);--button-background:transparent;--button-border:transparent;--button-border-width:0;--button-hover-background:transparent;--button-hover-border:transparent;--button-text:var(--color-primary,#7c4dff);--button-hover-text:var(--color-primary,#7c4dff);--button-font-size-sm:var(--font-size-sm,.875rem);--button-font-weight:var(--font-weight-regular,400);--button-line-height:var(--line-height-base,1.5);--button-icon-size-sm:.875rem;width:auto;min-width:0;max-width:none;display:inline-block;position:static}.social-pane__edit-button::part(button):hover{text-decoration:underline}.social-pane__edit-button::part(button):focus-visible{outline:var(--border-width-medium,2px) solid var(--color-primary,#7c4dff);outline-offset:2px}.social-pane__edit-button-label{align-items:center;gap:var(--spacing-xxs,.3125rem);display:inline-flex}.social-pane__edit-button .profile-section-collapsible__edit-icon,.social-pane__edit-button-icon{line-height:0;display:none}.social-pane__edit-button-label svg,.social-pane__edit-button-icon svg,.social-pane__edit-button .profile-section-collapsible__edit-icon svg{vertical-align:middle;flex:none;width:.875rem;height:.875rem;display:inline-block}.social-pane__edit-button-label svg path,.social-pane__edit-button-icon svg path,.social-pane__edit-button .profile-section-collapsible__edit-icon svg path{fill:var(--color-primary,#7c4dff);stroke:none}.social-pane__dialog-backdrop{z-index:1000;background:#0f172a73;padding:1rem;position:fixed;inset:0}.social-pane__dialog{background:var(--white,#fff);width:min(32rem,100%);max-height:calc(100vh - 2rem);color:var(--color-text,#111827);padding:var(--spacing-md,1.25rem);border-radius:1rem;position:relative;overflow:auto;box-shadow:0 20px 45px #0f172a40}.social-pane__dialog-header{justify-content:space-between;align-items:flex-start;gap:var(--spacing-md,1rem);padding-bottom:var(--spacing-base,.5rem);margin-bottom:var(--spacing-sm,.938rem);border-bottom:var(--border-width-sm,.1rem) solid var(--slate-200,#e2e8f0);display:flex}.social-pane__dialog-title{margin:0 0 var(--spacing-base,.5rem)}.social-pane__dialog-close{--button-background:transparent;--button-border:transparent;--button-border-width:0;--button-hover-background:transparent;--button-hover-border:transparent;color:var(--color-text-subheading,#6b7280);cursor:pointer;flex:none;padding:0;line-height:0}.social-pane__dialog-close:hover{color:var(--color-text-primary,#364153)}.social-pane__dialog-close:focus-visible{outline:var(--border-width-medium,2px) solid var(--color-text-primary,#364153);outline-offset:2px}.social-pane__dialog-close svg{width:var(--icon-xxxs,.75rem);height:var(--icon-xxxs,.75rem)}.social-pane__dialog-close svg path{fill:currentColor}.social-pane__dialog-form{gap:var(--spacing-sm,.938rem)}.social-pane__dialog-fields{gap:var(--spacing-sm,.938rem);flex-direction:column;display:flex}.social-pane__dialog-field{gap:.2rem}.social-pane__dialog-field-header{justify-content:space-between;align-items:center;gap:var(--spacing-xs,.75rem);display:flex}.social-pane__dialog-row-list{flex-direction:column;gap:.2rem;display:flex}.social-pane__dialog-row{grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:.45rem;display:grid}.social-pane__dialog-label{color:var(--gray-700,#364153);font-size:var(--font-size-md,1rem);font-weight:var(--font-weight-md,500);margin:0;line-height:normal}.social-pane__dialog-input{box-sizing:border-box;resize:none;width:100%;min-height:auto}.social-pane__dialog-error{min-height:1.25rem;color:var(--color-warning,red);margin:0}.social-pane__dialog-saving-overlay{z-index:10;background:#ffffffc7;place-items:center;display:grid;position:absolute;inset:0}.social-pane__dialog-saving-overlay[hidden]{display:none}.social-pane__dialog.modal--saving .social-pane__dialog-form{opacity:.45;pointer-events:none}.social-pane__dialog .modal__saving-indicator{gap:0}.social-pane__dialog-row-button-icon{flex:none;justify-content:center;align-items:center;line-height:0;display:inline-flex}.social-pane__dialog-row-button-icon svg{display:block}.social-pane__dialog-field-header solid-ui-button.social-pane__dialog-row-button--add{box-sizing:border-box;--button-min-height:auto;--button-padding-sm:var(--spacing-xxs,.3125rem);--button-background:transparent;--button-border:transparent;--button-border-width:0;--button-hover-background:transparent;--button-hover-border:transparent;--button-text:var(--color-primary,#7c4dff);--button-hover-text:var(--color-primary,#7c4dff);--button-height-sm:auto;--button-font-weight:var(--font-weight-md,500);--button-font-size-sm:var(--font-size-sm,.875rem);--button-line-height:var(--line-height-base,1.5);flex:none;justify-self:flex-start;width:auto;min-width:0;max-width:none;margin-left:auto}.social-pane__dialog-field-header solid-ui-button.social-pane__dialog-row-button--add::part(button){min-height:auto;padding:var(--spacing-xxs,.3125rem);color:var(--color-primary,#7c4dff);font-weight:var(--font-weight-md,500);background:0 0;border:none}.social-pane__dialog-field-header solid-ui-button.social-pane__dialog-row-button--add:hover::part(button){text-decoration:underline}.social-pane__add-more-content{display:inline}.social-pane__add-more-inline{white-space:normal;display:inline}.social-pane__add-more-icon{width:var(--icon-xxxs,.75rem);height:var(--icon-xxxs,.75rem);margin-right:var(--spacing-xxs,.3125rem);vertical-align:text-top;line-height:0;display:inline-block}.social-pane__add-more-icon svg{width:100%;height:100%;display:block}.social-pane__dialog-row-list solid-ui-button.social-pane__dialog-row-button--remove{min-height:var(--min-touch-target,44px);min-width:var(--min-touch-target,44px);color:var(--gray-300,#d1d5dc);--button-background:transparent;--button-box-shadow:none;--button-active-box-shadow:none;--button-active-transform:none;--button-border:transparent;--button-border-width:0;--button-border-radius:var(--border-radius-base,.3125rem);--button-hover-background:var(--lavender-300,#e6dcff);--button-hover-border:transparent;--button-hover-text:var(--color-primary,#7c4dff);--button-hover-box-shadow:none;--button-text:currentColor;--button-height-md:var(--min-touch-target,44px);--button-padding-md:0;--button-padding-x-sm:0;--button-icon-size-md:var(--icon-xxs,1rem);--button-icon-size-lg:var(--icon-xxs,1rem)}.social-pane__dialog-row-list solid-ui-button.social-pane__dialog-row-button--remove:hover,.social-pane__dialog-row-list solid-ui-button.social-pane__dialog-row-button--remove:focus-within{color:var(--gray-300,#d1d5dc)}.social-pane__dialog-row-button-icon--remove svg{width:1rem;height:1rem}.social-pane__dialog-row-button-icon--remove svg path{stroke:currentColor}.social-pane__dialog-actions{justify-content:flex-end;gap:var(--spacing-xs,.75rem);padding-top:var(--spacing-base,.5rem);border-top:var(--border-width-sm,.1rem) solid var(--slate-200,#e2e8f0);margin-top:0;display:flex}.social-pane__dialog-actions>solid-ui-button{--button-border-width:1px;--button-border-radius:var(--border-radius-base,.3125rem);--button-box-shadow:none;--button-hover-box-shadow:none;--button-active-box-shadow:none;--button-active-transform:none;width:10.8rem}.social-pane__dialog-actions solid-ui-button.social-pane__dialog-button--save{--button-font-size-md:var(--font-size-lg,1.125rem);--button-background:var(--color-primary,#7c4dff);--button-border:var(--color-primary,#7c4dff);--button-text:var(--white,#fff);--button-hover-background:color-mix(in srgb, var(--color-primary,#7c4dff) 90%, black);--button-hover-border:color-mix(in srgb, var(--color-primary,#7c4dff) 90%, black);--button-hover-text:var(--white,#fff)}.social-pane__dialog-actions solid-ui-button.social-pane__dialog-button--cancel{--button-background:var(--white,#fff);--button-border:var(--gray-300,#d1d5dc);--button-font-weight:var(--font-weight-normal,normal);--button-text:var(--gray-800,#1e2939);--button-hover-background:var(--blue-900,#083575);--button-hover-border:var(--blue-900,#083575);--button-hover-text:var(--white,#fff);--button-font-size-md:var(--font-size-sm,.875rem)}.social-pane__header-name{color:var(--color-text-heading,#000);font-size:var(--font-size-xxl,1.75rem);font-weight:var(--font-weight-bold,600);text-indent:0;text-align:left;overflow-wrap:anywhere;margin:0;padding:0;line-height:1.2;transform:translate(-4px)}.social-pane__header-location{align-items:center;gap:var(--spacing-2xs,.625rem);color:var(--color-text-secondary,#4a5565);font-size:var(--font-size-sm,.875rem);font-weight:var(--font-weight-normal,400);line-height:1.2;display:inline-flex}.social-pane__header-job-org{color:var(--color-text-subheading,#101828);white-space:normal;width:100%;font-size:var(--font-size-lg,1.125rem);font-weight:var(--font-weight-md,500);text-align:left;margin:0;line-height:1.25}.social-pane__header-location-icon{line-height:0}.social-pane__header-location-icon svg{width:var(--icon-xxs,1rem);height:var(--icon-xxs,1rem)}.social-profile-links{grid-template-columns:repeat(2,max-content);align-items:start;gap:.15rem 1rem;display:grid}.social-pane__header-hero{border-radius:var(--border-radius-full,.625rem);border:var(--border-width-sm,.1rem) solid var(--color-primary,#7c4dff);background:var(--gray-200,#e5e7eb) 50% / cover no-repeat;object-fit:cover;object-position:center;background-position:50%;width:140px;height:140px}.social-pane__header-hero-icon{border:var(--border-width-sm,.1rem) solid var(--color-primary,#7c4dff);background:var(--color-card-bg);flex-shrink:0;width:140px;height:140px;line-height:0;border-radius:var(--border-radius-full,.625rem)!important}.social-pane__header-hero-icon svg{width:100%;height:100%;display:block}.social-pane .social-layout{align-items:flex-start;gap:1rem;width:100%;display:flex}.social-pane .social-primary{flex:70%;grid-template-rows:auto minmax(0,auto);grid-template-columns:minmax(0,1fr);align-items:start;gap:0;min-width:0;display:grid}.social-pane .social-primary__tabs{align-items:center;gap:var(--spacing-base,.5rem);z-index:1;background:0 0;grid-area:1/1;width:fit-content;max-width:100%;margin-bottom:0;padding:0;display:flex;position:relative}.social-pane .social-primary__tab{appearance:none;border:0;border-bottom:var(--border-width-sm,.1rem) solid transparent;color:#374151;cursor:pointer;font:inherit;font-weight:var(--font-weight-bold,600);padding:var(--spacing-2xs,.625rem) 1rem;background:0 0;border-radius:0;transition:background-color .12s,color .12s,box-shadow .12s;box-shadow:none!important}.social-pane .social-primary__tab:hover{color:var(--grey-purple-900,#332746);background:var(--lavender-300,#e6dcff)!important;box-shadow:none!important}.social-pane .social-primary__tab[aria-selected=true],.social-pane .social-primary__tab--active{color:var(--grey-purple-900,#332746);border-bottom-color:var(--color-primary,#7c4dff);background:0 0;box-shadow:none!important}.social-pane .social-primary__tab:focus-visible{outline-offset:2px;outline:none;box-shadow:none!important}.social-pane .social-primary__panel{opacity:0;visibility:hidden;pointer-events:none;grid-area:2/1;transition:opacity .16s,transform .16s,visibility 0s linear .16s;display:none;transform:translateY(.35rem)}.social-pane .social-primary__panel--active{opacity:1;visibility:visible;pointer-events:auto;border:0;border-bottom:var(--border-width-sm,.1rem) solid transparent;transition:opacity .18s,transform .18s;display:block;transform:translateY(0)}.social-pane .social-pane__mutual-friends,.social-pane .social-pane__all-friends{padding-top:var(--spacing-xxxs,.2rem);margin-top:0}.social-pane .social-main{background-color:var(--color-card-bg,#fff);color:var(--color-text-primary,#364153);box-sizing:border-box;border-collapse:collapse;border:0;width:100%;padding:0;display:table}.social-pane .social-main--mutual{gap:var(--spacing-xs,.75rem);border-radius:var(--border-radius-lg,.75rem);margin-top:1em;margin-bottom:1em;padding:1rem}.social-pane .social-main--requests{gap:var(--spacing-md,1rem);border-radius:var(--border-radius-lg,.75rem);flex-direction:column;margin-top:.75rem;margin-bottom:1rem;padding:1rem;display:flex}.social-requests__note{color:var(--color-text-subheading,#475467);font-size:var(--font-size-sm,.875rem);margin:0;line-height:1.5}.social-requests__group{gap:var(--spacing-sm,.938rem)}.social-requests__group-header{flex-direction:column;gap:.125rem;display:flex}.social-requests__group-title{color:var(--color-text-heading,#101828);font-size:var(--font-size-lg,1.125rem);margin:0;line-height:1.25}.social-requests__group-description,.social-requests__empty{color:var(--color-text-subheading,#667085);font-size:var(--font-size-sm,.875rem);margin:0;line-height:1.5}.social-requests__table{margin-top:0}.social-pane .social-mutual-summary{gap:var(--spacing-base,.5rem)}.social-pane .social-mutual-summary-line{color:var(--slate-700,#314158);font-size:var(--font-size-sm,.95rem);line-height:var(--line-height-base,1.5);justify-content:flex-start;padding:1rem}.social-pane .social-mutual-summary-line--action{gap:var(--spacing-xxs,.75rem);flex-wrap:wrap}.social-pane .social-mutual-confirm-prompt{align-items:center;gap:var(--spacing-xxxs,.2rem);font-weight:var(--font-weight-semibold,600);flex-wrap:wrap;display:inline-flex}.social-pane .social-pane__friend-action--inline{z-index:auto;align-self:flex-start;position:static;top:auto;right:auto}.social-pane .social-mutual-checkbox-form{margin:0;padding:0 1rem 1rem;display:block}.social-pane .social-mutual-checkbox-form label{align-items:center;gap:var(--spacing-2xs,.65rem);color:var(--slate-700,#374151);font-size:var(--font-size-sm,.875rem);flex-wrap:wrap;line-height:1.4;display:inline-flex}.social-pane .social-mutual-checkbox-form input[type=checkbox]{width:1rem;height:1rem;accent-color:var(--color-primary,#7c4dff);margin:0}.social-pane .social-mutual-checkbox-form input[type=checkbox]:disabled{opacity:.65;cursor:not-allowed}.social-pane .social-friends-list{width:100%;margin-top:0}.social-pane .social-friends-grid{table-layout:fixed;border-collapse:separate;border-spacing:0;align-items:stretch;gap:var(--spacing-xs,.75rem);flex-wrap:wrap;width:100%;display:flex}.social-pane .social-friends-grid>tbody{align-items:stretch;gap:var(--spacing-xs,.75rem);flex-wrap:wrap;width:100%;display:flex}.social-pane .social-friends-grid>tr,.social-pane .social-friends-grid>tbody>tr{table-layout:fixed;box-sizing:border-box;width:calc(50% - .375rem);display:inline-table}.social-pane .social-friends-grid>tr,.social-pane .social-friends-grid>tbody>tr,.social-pane .social-friend-card{border:1px solid var(--gray-200,#e5e7eb);background:var(--white,#fff);border-radius:var(--border-radius-lg,.75rem);transition:box-shadow .14s,border-color .14s,transform .14s;overflow:visible;box-shadow:0 1px 3px #00000014}.social-pane .social-friends-grid>tr:hover,.social-pane .social-friends-grid>tbody>tr:hover,.social-pane .social-friend-card:hover{border-color:var(--gray-300,#d1d5dc);transform:translateY(-1px);box-shadow:0 6px 18px #0000001a}.social-pane .social-friends-grid>tr td,.social-pane .social-friends-grid>tbody>tr td,.social-pane .social-friend-card td{background:var(--color-background,#f8f9fb);box-sizing:border-box}.social-pane .social-friends-grid>tr>td:nth-child(2),.social-pane .social-friends-grid>tbody>tr>td:nth-child(2){width:auto;min-width:0;padding-left:1.4rem}.social-pane .social-friends-grid>tr>td:nth-child(3),.social-pane .social-friends-grid>tbody>tr>td:nth-child(3){vertical-align:top;width:2.5rem;min-width:2.5rem;padding-left:.25rem}.social-pane .social-friends-grid>tr>td:first-child,.social-pane .social-friends-grid>tbody>tr>td:first-child{padding-right:1.2rem}.social-pane .social-friends-grid td>div>div{overflow-wrap:anywhere;white-space:normal!important;width:100%!important;min-width:0!important;max-width:100%!important}.social-pane .social-friends-grid td>div>div button{white-space:normal!important}.social-pane .social-friends-grid>tr>td:nth-child(2)>div:first-child,.social-pane .social-friends-grid>tbody>tr>td:nth-child(2)>div:first-child{flex-wrap:wrap;align-items:flex-start;gap:.2rem .4rem;min-width:0;display:flex}.social-pane .social-friends-grid>tr>td:nth-child(2)>div:first-child>span:first-of-type,.social-pane .social-friends-grid>tbody>tr>td:nth-child(2)>div:first-child>span:first-of-type{vertical-align:text-top;max-width:100%;font-size:var(--font-size-lg,1.125rem);font-weight:var(--font-weight-bold,600);line-height:var(--line-height-tight);text-overflow:clip;white-space:normal;overflow-wrap:anywhere;margin-top:0;margin-bottom:0;display:inline-block;overflow:visible}.social-pane .social-friend-pronouns{margin-left:var(--spacing-xs,.25rem);color:var(--color-text-secondary,#4a5565);font-size:var(--font-size-sm,.875rem);font-weight:var(--font-weight-regular,400);text-align:left;line-height:1.2;display:inline}.social-pane .social-friend-job-org{white-space:normal;overflow-wrap:anywhere;width:100%;min-width:0;color:var(--color-text-subheading,#101828);font-size:var(--font-size-sm,.875rem);font-weight:var(--font-weight-medium,500);text-align:left;margin:0;line-height:1.25}.social-pane .social-friend-location{color:var(--color-text-secondary,#6b7280);font-size:var(--font-size-xs,.8125rem);overflow-wrap:anywhere;line-height:1.3}@media (width<=960px){.social-pane .social-friends-grid>tr,.social-pane .social-friends-grid>tbody>tr{width:100%}}.social-pane .social-friends-header{padding:0 var(--spacing-xs,.75rem) var(--spacing-base,.5rem);background-color:var(--gray-100,#f3f4f6);caption-side:top;justify-content:space-between;align-items:center;margin-top:0;display:flex}.social-pane .social-friends-header-title{font-size:var(--font-size-md,1rem);font-weight:var(--font-weight-bold,600);color:var(--color-text-primary,#364153)}.social-pane .social-friends-header-actions{justify-content:flex-end;align-items:center;display:inline-flex}.social-pane .social-friends-header-actions--standalone{align-items:center;gap:var(--spacing-xs,.75rem);justify-content:flex-start;padding:.7rem 1rem 0;display:flex}.social-pane .social-friends-header-dropzone{border-collapse:collapse}.social-pane .social-friends-header-dropzone-cell{padding:0}.social-pane .social-friends-header-hint{color:var(--color-text-secondary,#4a5565);font-size:var(--font-size-sm,.875rem);line-height:1.4}.social-pane .social-friends-header-actions button{justify-content:center;align-items:center;display:inline-flex;overflow:hidden;border-width:0!important;width:2rem!important;min-width:2rem!important;height:2rem!important;margin:0!important;padding:0!important}.social-pane .social-friends-header-actions button img{object-fit:contain;pointer-events:none;display:block;width:100%!important;height:100%!important}.social-pane a{color:var(--color-primary,#7c4dff);font-weight:700;text-decoration:none}.social-pane a:hover{color:var(--color-primary,#7c4dff);font-weight:700;text-decoration:underline}.social-pane a:active{color:var(--color-primary,#7c4dff);text-decoration:none}.social-pane__link-button{white-space:nowrap;width:fit-content;max-width:100%;padding:var(--spacing-xxxs,.2rem) var(--spacing-base,.5rem);text-align:left;background-color:#0000;border:none;margin-top:0;margin-bottom:0;display:inline-flex}.social-pane__link-button>a{white-space:normal;overflow-wrap:anywhere;max-width:100%;color:var(--color-primary,#7c4dff);background-color:#0000;display:inline-flex}.social-pane__link-button>a:link,.social-pane__link-button>a:visited,.social-pane__link-button>a:hover{color:var(--color-primary,#7c4dff)}.social-pane__link-button>a:hover{text-decoration:underline}:is(.social-pane-host,.social-pane)[data-layout=mobile] .social-pane__header-content{align-items:start;column-gap:var(--spacing-md,1rem);grid-template-columns:4.375rem minmax(0,1fr) auto;row-gap:.25rem;padding:1rem 1rem 0;display:grid}:is(.social-pane-host,.social-pane)[data-layout=mobile] .social-pane__header-media{display:contents}:is(.social-pane-host,.social-pane)[data-layout=mobile] .social-pane__header-details{flex-direction:column;grid-area:1/2;align-items:flex-start;gap:.125rem;min-width:0;display:flex}:is(.social-pane-host,.social-pane)[data-layout=mobile] .social-pane__header-actions{justify-content:flex-end;justify-self:end;gap:var(--spacing-2xs,.3125rem);grid-area:1/3;width:auto;margin-left:0}:is(.social-pane-host,.social-pane)[data-layout=mobile] .social-pane__header-actions--friend{grid-area:3/1/auto/-1;justify-content:center;justify-self:stretch;width:100%;margin-top:.125rem;margin-left:0}:is(.social-pane-host,.social-pane)[data-layout=mobile] .social-pane__header-summary{flex-direction:column;gap:0;width:100%;display:flex}:is(.social-pane-host,.social-pane)[data-layout=mobile] :is(.social-pane__header-name,.social-pane__header-job-org,.social-pane__header-location){text-align:left;justify-content:flex-start;width:100%}:is(.social-pane-host,.social-pane)[data-layout=mobile] .social-pane__header-stats{justify-content:flex-start;align-self:flex-start;gap:var(--spacing-xs,.5rem);width:100%;margin-top:-.4375rem}:is(.social-pane-host,.social-pane)[data-layout=mobile] .social-profile-links{row-gap:var(--spacing-xxxs,.2rem);grid-area:2/1/auto/-1;grid-template-columns:1fr;justify-items:start;margin-top:-.375rem;padding-left:0}:is(.social-pane-host,.social-pane)[data-layout=mobile] .social-pane .social-primary__tabs,:is(.social-pane-host,.social-pane)[data-layout=mobile] .social-primary__tabs{margin-top:-.5rem}:is(.social-pane-host,.social-pane)[data-layout=mobile] .social-pane__link-button{justify-self:start;padding-left:0;padding-right:0}:is(.social-pane-host,.social-pane)[data-layout=mobile] .social-pane__link-button>a{font-size:var(--font-size-sm,.875rem);text-align:left}:is(.social-pane-host,.social-pane)[data-layout=mobile] .social-pane__dialog-field-header{grid-template-columns:minmax(0,1fr)}:is(.social-pane-host,.social-pane)[data-layout=mobile] :is(.social-pane__header-hero,.social-pane__header-hero-icon){aspect-ratio:1;grid-area:1/1;width:5rem;height:5rem}:is(.social-pane-host,.social-pane)[data-layout=mobile] .social-pane__header-name{font-size:var(--font-size-xl,1.375rem);line-height:1.15}:is(.social-pane-host,.social-pane)[data-layout=mobile] .social-pane__header-job-org{font-size:var(--font-size-md,1rem);line-height:1.25}:is(.social-pane-host,.social-pane)[data-layout=mobile] .social-pane .social-friend-pronouns{font-size:.6875rem}:is(.social-pane-host,.social-pane)[data-layout=mobile] :is(.social-pane__header-location,.social-pane__header-stat),:is(.social-pane-host,.social-pane)[data-layout=mobile] .social-pane .social-friend-location{font-size:var(--font-size-xxs,.75rem)}:is(.social-pane-host,.social-pane)[data-layout=mobile] :is(.social-pane__edit-button-label,.social-pane__edit-button .profile-section-collapsible__edit-label){display:none!important}:is(.social-pane-host,.social-pane)[data-layout=mobile] .social-pane__edit-button{--button-background:transparent;--button-border-width:0;--button-border:transparent;--button-text:var(--color-text,#1a1a1a);--button-hover-background:var(--lavender-300,#e6dcff);--button-hover-border:transparent;--button-hover-text:var(--color-text,#1a1a1a);--button-font-size-sm:clamp(.9rem, 2.1vw, 1rem);--button-font-weight:var(--font-weight-regular,400);--button-icon-size-sm:.875rem}:is(.social-pane-host,.social-pane)[data-layout=mobile] :is(.social-pane__edit-button-icon,.social-pane__edit-button .profile-section-collapsible__edit-icon){justify-content:center;align-items:center;width:.875rem;height:.875rem;line-height:0;display:inline-flex}:is(.social-pane-host,.social-pane)[data-layout=mobile] :is(.social-pane__edit-button-icon svg,.social-pane__edit-button .profile-section-collapsible__edit-icon svg){width:.875rem;height:.875rem}:is(.social-pane-host,.social-pane)[data-layout=mobile] :is(.social-pane__edit-button-icon svg path,.social-pane__edit-button .profile-section-collapsible__edit-icon svg path){fill:var(--color-text,#1a1a1a);stroke:none}:is(.social-pane-host,.social-pane)[data-layout=mobile] .social-pane__dialog-actions{justify-content:center;align-items:center;gap:var(--spacing-sm,.938rem);padding:var(--spacing-md,1rem) 0 0;margin:var(--spacing-md,1rem) auto 0;box-sizing:border-box;flex-direction:row;width:100%}:is(.social-pane-host,.social-pane)[data-layout=mobile] .social-pane__dialog-actions>solid-ui-button{flex:none;width:10.8rem;min-width:8.5rem}:is(.social-pane-host,.social-pane)[data-layout=mobile] .social-pane__dialog-field-header solid-ui-button.social-pane__dialog-row-button--add::part(button){font-size:var(--font-size-sm,.875rem);line-height:var(--line-height-base,1.5)}:is(.social-pane-host,.social-pane)[data-layout=mobile] .social-pane .social-friends-header-actions--standalone{gap:var(--spacing-2xs,.625rem);flex-wrap:wrap;padding-top:.35rem}:is(.social-pane-host,.social-pane)[data-layout=mobile] :is(.social-pane .social-layout,.social-pane .social-primary,.social-layout,.social-primary),:is(.social-pane-host,.social-pane)[data-layout=mobile] .social-pane .social-friends-grid,:is(.social-pane-host,.social-pane)[data-layout=mobile] .social-friends-grid{display:block}:is(.social-pane-host,.social-pane)[data-input-mode=touch]{--profile-interactive-cursor:auto}:is(.social-pane-host,.social-pane)[data-input-mode=pointer]{--profile-interactive-cursor:pointer}@media (width<=600px){.social-pane__header-content{align-items:start;column-gap:var(--spacing-md,1rem);grid-template-columns:4.375rem minmax(0,1fr) auto;row-gap:.25rem;padding:1rem 1rem 0;display:grid}.social-pane__header-media{display:contents}.social-pane__header-details{flex-direction:column;grid-area:1/2;align-items:flex-start;gap:.125rem;min-width:0;display:flex}.social-pane__header-actions{justify-content:flex-end;justify-self:end;gap:var(--spacing-2xs,.3125rem);grid-area:1/3;width:auto;margin-left:0}.social-pane__header-actions--friend{grid-area:3/1/auto/-1;justify-content:center;justify-self:stretch;width:100%;margin-top:.125rem;margin-left:0}.social-pane__header-summary{flex-direction:column;gap:0;width:100%;display:flex}.social-pane__header-name,.social-pane__header-job-org,.social-pane__header-location{text-align:left;justify-content:flex-start;width:100%}.social-pane__header-stats{justify-content:flex-start;align-self:flex-start;gap:var(--spacing-xs,.5rem);width:100%;margin-top:-.4375rem}.social-profile-links{row-gap:var(--spacing-xxxs,.2rem);grid-area:2/1/auto/-1;grid-template-columns:1fr;justify-items:start;margin-top:-.375rem;padding-left:0}.social-pane .social-primary__tabs{margin-top:-.5rem}.social-pane__link-button{justify-self:start;padding-left:0;padding-right:0}.social-pane__link-button>a{font-size:var(--font-size-sm,.875rem);text-align:left}.social-pane__dialog-field-header{grid-template-columns:minmax(0,1fr)}.social-pane__header-hero,.social-pane__header-hero-icon{aspect-ratio:1;grid-area:1/1;width:5rem;height:5rem}.social-pane__header-name{font-size:var(--font-size-xl,1.375rem);line-height:1.15}.social-pane__header-job-org{font-size:var(--font-size-md,1rem);line-height:1.25}.social-pane .social-friend-pronouns{font-size:.6875rem}.social-pane__header-location,.social-pane__header-stat,.social-pane .social-friend-location{font-size:var(--font-size-xxs,.75rem)}.social-pane__friend-action{--button-padding-sm:var(--spacing-xxxs,.2rem) var(--spacing-xxs-old,.3rem);--button-font-size-sm:var(--font-size-xs,.813rem);--button-border-radius-sm:var(--border-radius-base,.3125rem)}.social-pane__edit-button-label,.social-pane__edit-button .profile-section-collapsible__edit-label{display:none!important}.social-pane__edit-button{--button-background:transparent;--button-border-width:0;--button-border:transparent;--button-text:var(--color-text,#1a1a1a);--button-hover-background:var(--lavender-300,#e6dcff);--button-hover-border:transparent;--button-hover-text:var(--color-text,#1a1a1a);--button-font-size-sm:clamp(.9rem, 2.1vw, 1rem);--button-font-weight:var(--font-weight-regular,400);--button-icon-size-sm:.875rem}.social-pane__edit-button-icon,.social-pane__edit-button .profile-section-collapsible__edit-icon{justify-content:center;align-items:center;width:.875rem;height:.875rem;line-height:0;display:inline-flex}.social-pane__edit-button-icon svg,.social-pane__edit-button .profile-section-collapsible__edit-icon svg{width:.875rem;height:.875rem}.social-pane__edit-button-icon svg path,.social-pane__edit-button .profile-section-collapsible__edit-icon svg path{fill:var(--color-text,#1a1a1a);stroke:none}.social-pane__dialog-actions{justify-content:center;align-items:center;gap:var(--spacing-sm,.938rem);padding:var(--spacing-md,1rem) 0 0;margin:var(--spacing-md,1rem) auto 0;box-sizing:border-box;flex-direction:row;width:100%}.social-pane__dialog-actions>solid-ui-button{flex:none;width:10.8rem;min-width:8.5rem}.social-pane__dialog-field-header solid-ui-button.social-pane__dialog-row-button--add::part(button){font-size:var(--font-size-sm,.875rem);line-height:var(--line-height-base,1.5)}.social-pane .social-friends-header-actions--standalone{gap:var(--spacing-2xs,.625rem);flex-wrap:wrap;padding-top:.35rem}.social-pane .social-layout,.social-pane .social-primary,.social-pane .social-friends-grid{display:block}.social-pane .social-friends-grid>tr,.social-pane .social-friends-grid>tbody>tr{width:100%;margin-bottom:var(--spacing-xs,.75rem);display:table}.social-pane .social-friends-grid>tr:last-child,.social-pane .social-friends-grid>tbody>tr:last-child{margin-bottom:0}.social-pane .social-main{width:100%}}`)),document.head.appendChild(e)}}catch(e){console.error(`vite-plugin-css-injected-by-js`,e)}})();require("../_virtual/_rolldown/runtime.cjs.js");const e=require("./icons.cjs.js"),t=require("./socialSections.cjs.js"),n=require("./triage.cjs.js");let r=require("solid-ui"),i=require("solid-logic");function a(e,t){let n=t.environment?.layout??`desktop`,r=t.environment?.theme??`light`,i=t.environment?.inputMode??`pointer`;e.classList.add(`social-pane-host`),e.dataset.layout=n,e.dataset.theme=r,e.dataset.inputMode=i}var o={icon:r.icons.originalIconBase+`foaf/foafTiny.gif`,name:`social`,label:function(e,t){let n=t.session.store.findTypeURIs(e);return n[r.ns.foaf(`Person`).uri]||n[r.ns.vcard(`Individual`).uri]?`Friends`:null},global:!1,render:function(o,s){let c=s.dom,l=function(e,t){let n=[];for(let r=0;r<e.length;r++)for(let i=0;i<t.length;i++)if(t[i].sameTerm(e[r])){n.push(t[i]);break}return n},m=function(e){let t=new Set,n=[];for(let r of e)!r?.value||t.has(r.value)||(t.add(r.value),n.push(r));return n},h=function(e,t){if(!t)return e;let n=c.createElement(`a`);return n.setAttribute(`href`,t),n.appendChild(e),n},ee=function(e){return c.createTextNode(e)},g=function(){},te=function(e,t,n,i={}){let a=c.createElement(`form`),o=c.createElement(`label`),s=c.createElement(`input`),l=c.createElement(`span`);return l.className=`question`,typeof e==`string`?l.textContent=e:l.appendChild(e),s.setAttribute(`type`,`checkbox`),i.disabled&&(s.disabled=!0,i.disabledTitle&&(s.title=i.disabledTitle,s.setAttribute(`aria-label`,i.disabledTitle))),o.appendChild(l),o.appendChild(s),a.appendChild(o),s.checked=n,s.addEventListener(`click`,function(e){if(this.checked)try{_.UserInput.sparqler.insert_statement(t,function(e,n,i){if(l.className=`question`,!n){r.log.alert(`Error occurs while inserting `+t+`
1
+ (function(){try{if(typeof document<`u`){var e=document.createElement(`style`);e.appendChild(document.createTextNode(`.social-pane-host,.social-pane{--profile-interactive-cursor:pointer;background:var(--color-background,#f8f9fb);border-radius:var(--border-radius-base,.3125rem);box-sizing:border-box;width:100%;min-width:100%;max-width:none;margin-top:20px;display:block;overflow:visible}.social-pane__header-content{align-items:flex-start;column-gap:var(--spacing-md,1.25rem);row-gap:var(--spacing-xxs,.3125rem);grid-template-columns:auto minmax(0,1fr) auto;width:100%;min-width:0;display:grid}.social-pane__header-media{grid-area:1/1}.social-pane__header-details{flex-direction:column;grid-area:1/2;align-items:flex-start;min-width:0;display:flex}.social-pane__header-actions{place-self:flex-start end;align-items:flex-start;gap:var(--spacing-xs,.5rem);flex-wrap:wrap;grid-area:1/3;margin-left:auto;display:flex}.social-pane__header-actions--friend{justify-content:center}.social-pane__header-actions--friend>solid-ui-button{--button-border-radius:var(--border-radius-md,.5rem);--button-hover-text:var(--color-primary,#7c4dff);--button-hover-border:var(--color-primary,#7c4dff);margin-inline:auto}.social-pane__header-summary{align-items:flex-start;gap:var(--spacing-xxs,.125rem);flex-direction:column;width:100%;max-width:100%;display:flex}.social-pane__header-stats{gap:var(--spacing-xs,.75rem);margin-top:var(--spacing-xxs,.3125rem);flex-wrap:wrap;justify-content:flex-start;align-self:flex-start;display:flex}.social-pane__header-stat{appearance:none;cursor:var(--profile-interactive-cursor,pointer);color:var(--slate-700,#314158);font-size:var(--font-size-sm,.875rem);font-weight:var(--font-weight-bold,600);line-height:var(--line-height-tight,1.4);background:0 0;border:0;padding:0;text-decoration:none}.social-pane__header-stat+.social-pane__header-stat:before{content:"◆";color:var(--gray-400,#99a1af);margin-right:var(--spacing-xs,.75rem);vertical-align:middle;font-size:.5rem}.social-pane__header-stat:hover .social-pane__header-stat-label{text-decoration:underline}.social-pane__header-stat:focus-visible{outline:var(--border-width-medium,2px) solid #111827;outline-offset:2px}.social-pane__edit-button{--button-height-sm:0;--button-padding-sm:var(--spacing-xxs,.3125rem);--button-background:transparent;--button-border:transparent;--button-border-width:0;--button-hover-background:transparent;--button-hover-border:transparent;--button-text:var(--color-primary,#7c4dff);--button-hover-text:var(--color-primary,#7c4dff);--button-font-size-sm:var(--font-size-sm,.875rem);--button-font-weight:var(--font-weight-regular,400);--button-line-height:var(--line-height-base,1.5);--button-icon-size-sm:.875rem;width:auto;min-width:0;max-width:none;display:inline-block;position:static}.social-pane__edit-button::part(button):hover{text-decoration:underline}.social-pane__edit-button::part(button):focus-visible{outline:var(--border-width-medium,2px) solid var(--color-primary,#7c4dff);outline-offset:2px}.social-pane__edit-button-label{align-items:center;gap:var(--spacing-xxs,.3125rem);display:inline-flex}.social-pane__edit-button .profile-section-collapsible__edit-icon,.social-pane__edit-button-icon{line-height:0;display:none}.social-pane__edit-button-label svg,.social-pane__edit-button-icon svg,.social-pane__edit-button .profile-section-collapsible__edit-icon svg{vertical-align:middle;flex:none;width:.875rem;height:.875rem;display:inline-block}.social-pane__edit-button-label svg path,.social-pane__edit-button-icon svg path,.social-pane__edit-button .profile-section-collapsible__edit-icon svg path{fill:var(--color-primary,#7c4dff);stroke:none}.social-pane__dialog-backdrop{z-index:1000;background:#0f172a73;padding:1rem;position:fixed;inset:0}.social-pane__dialog{background:var(--white,#fff);width:min(32rem,100%);max-height:calc(100vh - 2rem);color:var(--color-text,#111827);padding:var(--spacing-md,1.25rem);border-radius:1rem;position:relative;overflow:auto;box-shadow:0 20px 45px #0f172a40}.social-pane__dialog-header{justify-content:space-between;align-items:flex-start;gap:var(--spacing-md,1rem);padding-bottom:var(--spacing-base,.5rem);margin-bottom:var(--spacing-sm,.938rem);border-bottom:var(--border-width-sm,.1rem) solid var(--slate-200,#e2e8f0);display:flex}.social-pane__dialog-title{margin:0 0 var(--spacing-base,.5rem)}.social-pane__dialog-close{--button-background:transparent;--button-border:transparent;--button-border-width:0;--button-hover-background:transparent;--button-hover-border:transparent;color:var(--color-text-subheading,#6b7280);cursor:pointer;flex:none;padding:0;line-height:0}.social-pane__dialog-close:hover{color:var(--color-text-primary,#364153)}.social-pane__dialog-close:focus-visible{outline:var(--border-width-medium,2px) solid var(--color-text-primary,#364153);outline-offset:2px}.social-pane__dialog-close svg{width:var(--icon-xxxs,.75rem);height:var(--icon-xxxs,.75rem)}.social-pane__dialog-close svg path{fill:currentColor}.social-pane__dialog-form{gap:var(--spacing-sm,.938rem)}.social-pane__dialog-fields{gap:var(--spacing-sm,.938rem);flex-direction:column;display:flex}.social-pane__dialog-field{gap:.2rem}.social-pane__dialog-field-header{justify-content:space-between;align-items:center;gap:var(--spacing-xs,.75rem);display:flex}.social-pane__dialog-row-list{flex-direction:column;gap:.2rem;display:flex}.social-pane__dialog-row{grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:.45rem;display:grid}.social-pane__dialog-label{color:var(--gray-700,#364153);font-size:var(--font-size-md,1rem);font-weight:var(--font-weight-md,500);margin:0;line-height:normal}.social-pane__dialog-input{box-sizing:border-box;resize:none;width:100%;min-height:auto}.social-pane__dialog-error{min-height:1.25rem;color:var(--color-warning,red);margin:0}.social-pane__dialog-saving-overlay{z-index:10;background:#ffffffc7;place-items:center;display:grid;position:absolute;inset:0}.social-pane__dialog-saving-overlay[hidden]{display:none}.social-pane__dialog.modal--saving .social-pane__dialog-form{opacity:.45;pointer-events:none}.social-pane__dialog .modal__saving-indicator{gap:0}.social-pane__dialog-row-button-icon{flex:none;justify-content:center;align-items:center;line-height:0;display:inline-flex}.social-pane__dialog-row-button-icon svg{display:block}.social-pane__dialog-field-header solid-ui-button.social-pane__dialog-row-button--add{box-sizing:border-box;--button-min-height:auto;--button-padding-sm:var(--spacing-xxs,.3125rem);--button-background:transparent;--button-border:transparent;--button-border-width:0;--button-hover-background:transparent;--button-hover-border:transparent;--button-text:var(--color-primary,#7c4dff);--button-hover-text:var(--color-primary,#7c4dff);--button-height-sm:auto;--button-font-weight:var(--font-weight-md,500);--button-font-size-sm:var(--font-size-sm,.875rem);--button-line-height:var(--line-height-base,1.5);flex:none;justify-self:flex-start;width:auto;min-width:0;max-width:none;margin-left:auto}.social-pane__dialog-field-header solid-ui-button.social-pane__dialog-row-button--add::part(button){min-height:auto;padding:var(--spacing-xxs,.3125rem);color:var(--color-primary,#7c4dff);font-weight:var(--font-weight-md,500);background:0 0;border:none}.social-pane__dialog-field-header solid-ui-button.social-pane__dialog-row-button--add:hover::part(button){text-decoration:underline}.social-pane__add-more-content{display:inline}.social-pane__add-more-inline{white-space:normal;display:inline}.social-pane__add-more-icon{width:var(--icon-xxxs,.75rem);height:var(--icon-xxxs,.75rem);margin-right:var(--spacing-xxs,.3125rem);vertical-align:text-top;line-height:0;display:inline-block}.social-pane__add-more-icon svg{width:100%;height:100%;display:block}.social-pane__dialog-row-list solid-ui-button.social-pane__dialog-row-button--remove{min-height:var(--min-touch-target,44px);min-width:var(--min-touch-target,44px);color:var(--gray-300,#d1d5dc);--button-background:transparent;--button-box-shadow:none;--button-active-box-shadow:none;--button-active-transform:none;--button-border:transparent;--button-border-width:0;--button-border-radius:var(--border-radius-base,.3125rem);--button-hover-background:var(--lavender-300,#e6dcff);--button-hover-border:transparent;--button-hover-text:var(--color-primary,#7c4dff);--button-hover-box-shadow:none;--button-text:currentColor;--button-height-md:var(--min-touch-target,44px);--button-padding-md:0;--button-padding-x-sm:0;--button-icon-size-md:var(--icon-xxs,1rem);--button-icon-size-lg:var(--icon-xxs,1rem)}.social-pane__dialog-row-list solid-ui-button.social-pane__dialog-row-button--remove:hover,.social-pane__dialog-row-list solid-ui-button.social-pane__dialog-row-button--remove:focus-within{color:var(--gray-300,#d1d5dc)}.social-pane__dialog-row-button-icon--remove svg{width:1rem;height:1rem}.social-pane__dialog-row-button-icon--remove svg path{stroke:currentColor}.social-pane__dialog-actions{justify-content:flex-end;gap:var(--spacing-xs,.75rem);padding-top:var(--spacing-base,.5rem);border-top:var(--border-width-sm,.1rem) solid var(--slate-200,#e2e8f0);margin-top:0;display:flex}.social-pane__dialog-actions>solid-ui-button{--button-border-width:1px;--button-border-radius:var(--border-radius-base,.3125rem);--button-box-shadow:none;--button-hover-box-shadow:none;--button-active-box-shadow:none;--button-active-transform:none;width:10.8rem}.social-pane__dialog-actions solid-ui-button.social-pane__dialog-button--save{--button-font-size-md:var(--font-size-lg,1.125rem);--button-background:var(--color-primary,#7c4dff);--button-border:var(--color-primary,#7c4dff);--button-text:var(--white,#fff);--button-hover-background:color-mix(in srgb, var(--color-primary,#7c4dff) 90%, black);--button-hover-border:color-mix(in srgb, var(--color-primary,#7c4dff) 90%, black);--button-hover-text:var(--white,#fff)}.social-pane__dialog-actions solid-ui-button.social-pane__dialog-button--cancel{--button-background:var(--white,#fff);--button-border:var(--gray-300,#d1d5dc);--button-font-weight:var(--font-weight-normal,normal);--button-text:var(--gray-800,#1e2939);--button-hover-background:var(--blue-900,#083575);--button-hover-border:var(--blue-900,#083575);--button-hover-text:var(--white,#fff);--button-font-size-md:var(--font-size-sm,.875rem)}.social-pane__header-name{color:var(--color-text-heading,#000);font-size:var(--font-size-xxl,1.75rem);font-weight:var(--font-weight-bold,600);text-indent:0;text-align:left;overflow-wrap:anywhere;margin:0;padding:0;line-height:1.2;transform:translate(-4px)}.social-pane__header-location{align-items:center;gap:var(--spacing-2xs,.625rem);color:var(--color-text-secondary,#4a5565);font-size:var(--font-size-sm,.875rem);font-weight:var(--font-weight-normal,400);line-height:1.2;display:inline-flex}.social-pane__header-job-org{color:var(--color-text-subheading,#101828);white-space:normal;width:100%;font-size:var(--font-size-lg,1.125rem);font-weight:var(--font-weight-md,500);text-align:left;margin:0;line-height:1.25}.social-pane__header-location-icon{line-height:0}.social-pane__header-location-icon svg{width:var(--icon-xxs,1rem);height:var(--icon-xxs,1rem)}.social-profile-links{grid-template-columns:repeat(2,max-content);align-items:start;gap:.15rem 1rem;display:grid}.social-pane__header-hero{border-radius:var(--border-radius-full,.625rem);border:var(--border-width-sm,.1rem) solid var(--color-primary,#7c4dff);background:var(--gray-200,#e5e7eb) 50% / cover no-repeat;object-fit:cover;object-position:center;background-position:50%;width:140px;height:140px}.social-pane__header-hero-icon{border:var(--border-width-sm,.1rem) solid var(--color-primary,#7c4dff);background:var(--color-card-bg);flex-shrink:0;width:140px;height:140px;line-height:0;border-radius:var(--border-radius-full,.625rem)!important}.social-pane__header-hero-icon svg{width:100%;height:100%;display:block}.social-pane .social-layout{align-items:flex-start;gap:1rem;width:100%;display:flex}.social-pane .social-primary{flex:70%;grid-template-rows:auto minmax(0,auto);grid-template-columns:minmax(0,1fr);align-items:start;gap:0;min-width:0;display:grid}.social-pane .social-primary__tabs{align-items:center;gap:var(--spacing-base,.5rem);z-index:1;background:0 0;grid-area:1/1;width:fit-content;max-width:100%;margin-bottom:0;padding:0;display:flex;position:relative}.social-pane .social-primary__tab{appearance:none;border:0;border-bottom:var(--border-width-sm,.1rem) solid transparent;color:#374151;cursor:pointer;font:inherit;font-weight:var(--font-weight-bold,600);padding:var(--spacing-2xs,.625rem) 1rem;background:0 0;border-radius:0;transition:background-color .12s,color .12s,box-shadow .12s;box-shadow:none!important}.social-pane .social-primary__tab:hover{color:var(--grey-purple-900,#332746);background:var(--lavender-300,#e6dcff)!important;box-shadow:none!important}.social-pane .social-primary__tab[aria-selected=true],.social-pane .social-primary__tab--active{color:var(--grey-purple-900,#332746);border-bottom-color:var(--color-primary,#7c4dff);background:0 0;box-shadow:none!important}.social-pane .social-primary__tab:focus-visible{outline-offset:2px;outline:none;box-shadow:none!important}.social-pane .social-primary__panel{opacity:0;visibility:hidden;pointer-events:none;grid-area:2/1;transition:opacity .16s,transform .16s,visibility 0s linear .16s;display:none;transform:translateY(.35rem)}.social-pane .social-primary__panel--active{opacity:1;visibility:visible;pointer-events:auto;border:0;border-bottom:var(--border-width-sm,.1rem) solid transparent;transition:opacity .18s,transform .18s;display:block;transform:translateY(0)}.social-pane .social-pane__mutual-friends,.social-pane .social-pane__all-friends{padding-top:var(--spacing-xxxs,.2rem);margin-top:0}.social-pane .social-main{background-color:var(--color-card-bg,#fff);color:var(--color-text-primary,#364153);box-sizing:border-box;border-collapse:collapse;border:0;width:100%;padding:0;display:table}.social-pane .social-main--mutual{gap:var(--spacing-xs,.75rem);border-radius:var(--border-radius-lg,.75rem);margin-top:1em;margin-bottom:1em;padding:1rem}.social-pane .social-main--requests{gap:var(--spacing-md,1rem);border-radius:var(--border-radius-lg,.75rem);flex-direction:column;margin-top:.75rem;margin-bottom:1rem;padding:1rem;display:flex}.social-requests__note{color:var(--color-text-subheading,#475467);font-size:var(--font-size-sm,.875rem);margin:0;line-height:1.5}.social-requests__group{gap:var(--spacing-sm,.938rem)}.social-requests__group-header{flex-direction:column;gap:.125rem;display:flex}.social-requests__group-title{color:var(--color-text-heading,#101828);font-size:var(--font-size-lg,1.125rem);margin:0;line-height:1.25}.social-requests__group-description,.social-requests__empty{color:var(--color-text-subheading,#667085);font-size:var(--font-size-sm,.875rem);margin:0;line-height:1.5}.social-requests__table{margin-top:0}.social-pane .social-mutual-summary{gap:var(--spacing-base,.5rem)}.social-pane .social-mutual-summary-line{color:var(--slate-700,#314158);font-size:var(--font-size-sm,.95rem);line-height:var(--line-height-base,1.5);justify-content:flex-start;padding:1rem}.social-pane .social-mutual-summary-line--action{gap:var(--spacing-xxs,.75rem);flex-wrap:wrap}.social-pane .social-mutual-confirm-prompt{align-items:center;gap:var(--spacing-xxxs,.2rem);font-weight:var(--font-weight-semibold,600);flex-wrap:wrap;display:inline-flex}.social-pane .social-pane__friend-action--inline{z-index:auto;align-self:flex-start;position:static;top:auto;right:auto}.social-pane .social-mutual-checkbox-form{margin:0;padding:0 1rem 1rem;display:block}.social-pane .social-mutual-checkbox-form label{align-items:center;gap:var(--spacing-2xs,.65rem);color:var(--slate-700,#374151);font-size:var(--font-size-sm,.875rem);flex-wrap:wrap;line-height:1.4;display:inline-flex}.social-pane .social-mutual-checkbox-form input[type=checkbox]{width:1rem;height:1rem;accent-color:var(--color-primary,#7c4dff);margin:0}.social-pane .social-mutual-checkbox-form input[type=checkbox]:disabled{opacity:.65;cursor:not-allowed}.social-pane .social-friends-list{width:100%;margin-top:0}.social-pane .social-friends-grid{table-layout:fixed;border-collapse:separate;border-spacing:0;align-items:stretch;gap:var(--spacing-xs,.75rem);flex-wrap:wrap;width:100%;display:flex}.social-pane .social-friends-grid>tbody{align-items:stretch;gap:var(--spacing-xs,.75rem);flex-wrap:wrap;width:100%;display:flex}.social-pane .social-friends-grid>tr,.social-pane .social-friends-grid>tbody>tr{table-layout:fixed;box-sizing:border-box;width:calc(50% - .375rem);display:inline-table}.social-pane .social-friends-grid>tr,.social-pane .social-friends-grid>tbody>tr,.social-pane .social-friend-card{border:1px solid var(--gray-200,#e5e7eb);background:var(--white,#fff);border-radius:var(--border-radius-lg,.75rem);transition:box-shadow .14s,border-color .14s,transform .14s;overflow:visible;box-shadow:0 1px 3px #00000014}.social-pane .social-friends-grid>tr:hover,.social-pane .social-friends-grid>tbody>tr:hover,.social-pane .social-friend-card:hover{border-color:var(--gray-300,#d1d5dc);transform:translateY(-1px);box-shadow:0 6px 18px #0000001a}.social-pane .social-friends-grid>tr td,.social-pane .social-friends-grid>tbody>tr td,.social-pane .social-friend-card td{background:var(--color-background,#f8f9fb);box-sizing:border-box}.social-pane .social-friends-grid>tr>td:nth-child(2),.social-pane .social-friends-grid>tbody>tr>td:nth-child(2){width:auto;min-width:0;padding-left:1.4rem}.social-pane .social-friends-grid>tr>td:nth-child(3),.social-pane .social-friends-grid>tbody>tr>td:nth-child(3){vertical-align:top;width:2.5rem;min-width:2.5rem;padding-left:.25rem}.social-pane .social-friends-grid>tr>td:first-child,.social-pane .social-friends-grid>tbody>tr>td:first-child{padding-right:1.2rem}.social-pane .social-friends-grid td>div>div{overflow-wrap:anywhere;white-space:normal!important;width:100%!important;min-width:0!important;max-width:100%!important}.social-pane .social-friends-grid td>div>div button{white-space:normal!important}.social-pane .social-friends-grid>tr>td:nth-child(2)>div:first-child,.social-pane .social-friends-grid>tbody>tr>td:nth-child(2)>div:first-child{flex-wrap:wrap;align-items:flex-start;gap:.2rem .4rem;min-width:0;display:flex}.social-pane .social-friends-grid>tr>td:nth-child(2)>div:first-child>span:first-of-type,.social-pane .social-friends-grid>tbody>tr>td:nth-child(2)>div:first-child>span:first-of-type{vertical-align:text-top;max-width:100%;font-size:var(--font-size-lg,1.125rem);font-weight:var(--font-weight-bold,600);line-height:var(--line-height-tight);text-overflow:clip;white-space:normal;overflow-wrap:anywhere;margin-top:0;margin-bottom:0;display:inline-block;overflow:visible}.social-pane .social-friend-pronouns{margin-left:var(--spacing-xs,.25rem);color:var(--color-text-secondary,#4a5565);font-size:var(--font-size-sm,.875rem);font-weight:var(--font-weight-regular,400);text-align:left;line-height:1.2;display:inline}.social-pane .social-friend-job-org{white-space:normal;overflow-wrap:anywhere;width:100%;min-width:0;color:var(--color-text-subheading,#101828);font-size:var(--font-size-sm,.875rem);font-weight:var(--font-weight-medium,500);text-align:left;margin:0;line-height:1.25}.social-pane .social-friend-location{color:var(--color-text-secondary,#6b7280);font-size:var(--font-size-xs,.8125rem);overflow-wrap:anywhere;line-height:1.3}@media (width<=960px){.social-pane .social-friends-grid>tr,.social-pane .social-friends-grid>tbody>tr{width:100%}}.social-pane .social-friends-header{padding:0 var(--spacing-xs,.75rem) var(--spacing-base,.5rem);background-color:var(--gray-100,#f3f4f6);caption-side:top;justify-content:space-between;align-items:center;margin-top:0;display:flex}.social-pane .social-friends-header-title{font-size:var(--font-size-md,1rem);font-weight:var(--font-weight-bold,600);color:var(--color-text-primary,#364153)}.social-pane .social-friends-header-actions{justify-content:flex-end;align-items:center;display:inline-flex}.social-pane .social-friends-header-actions--standalone{align-items:center;gap:var(--spacing-xs,.75rem);justify-content:flex-start;padding:.7rem 1rem 0;display:flex}.social-pane .social-friends-header-dropzone{border-collapse:collapse}.social-pane .social-friends-header-dropzone-cell{padding:0}.social-pane .social-friends-header-hint{color:var(--color-text-secondary,#4a5565);font-size:var(--font-size-sm,.875rem);line-height:1.4}.social-pane .social-friends-header-actions button{justify-content:center;align-items:center;display:inline-flex;overflow:hidden;border-width:0!important;width:2rem!important;min-width:2rem!important;height:2rem!important;margin:0!important;padding:0!important}.social-pane .social-friends-header-actions button img{object-fit:contain;pointer-events:none;display:block;width:100%!important;height:100%!important}.social-pane a{color:var(--color-primary,#7c4dff);font-weight:700;text-decoration:none}.social-pane a:hover{color:var(--color-primary,#7c4dff);font-weight:700;text-decoration:underline}.social-pane a:active{color:var(--color-primary,#7c4dff);text-decoration:none}.social-pane__link-button{white-space:nowrap;width:fit-content;max-width:100%;padding:var(--spacing-xxxs,.2rem) var(--spacing-base,.5rem);text-align:left;background-color:#0000;border:none;margin-top:0;margin-bottom:0;display:inline-flex}.social-pane__link-button>a{white-space:normal;overflow-wrap:anywhere;max-width:100%;color:var(--color-primary,#7c4dff);background-color:#0000;display:inline-flex}.social-pane__link-button>a:link,.social-pane__link-button>a:visited,.social-pane__link-button>a:hover{color:var(--color-primary,#7c4dff)}.social-pane__link-button>a:hover{text-decoration:underline}:is(.social-pane-host,.social-pane)[data-layout=mobile] .social-pane__header-content{align-items:start;column-gap:var(--spacing-md,1rem);grid-template-columns:4.375rem minmax(0,1fr) auto;row-gap:.25rem;padding:1rem 1rem 0;display:grid}:is(.social-pane-host,.social-pane)[data-layout=mobile] .social-pane__header-media{display:contents}:is(.social-pane-host,.social-pane)[data-layout=mobile] .social-pane__header-details{flex-direction:column;grid-area:1/2;align-items:flex-start;gap:.125rem;min-width:0;display:flex}:is(.social-pane-host,.social-pane)[data-layout=mobile] .social-pane__header-actions{justify-content:flex-end;justify-self:end;gap:var(--spacing-2xs,.3125rem);grid-area:1/3;width:auto;margin-left:0}:is(.social-pane-host,.social-pane)[data-layout=mobile] .social-pane__header-actions--friend{grid-area:3/1/auto/-1;justify-content:center;justify-self:stretch;width:100%;margin-top:.125rem;margin-left:0}:is(.social-pane-host,.social-pane)[data-layout=mobile] .social-pane__header-summary{flex-direction:column;gap:0;width:100%;display:flex}:is(.social-pane-host,.social-pane)[data-layout=mobile] :is(.social-pane__header-name,.social-pane__header-job-org,.social-pane__header-location){text-align:left;justify-content:flex-start;width:100%}:is(.social-pane-host,.social-pane)[data-layout=mobile] .social-pane__header-stats{justify-content:flex-start;align-self:flex-start;gap:var(--spacing-xs,.5rem);width:100%;margin-top:-.4375rem}:is(.social-pane-host,.social-pane)[data-layout=mobile] .social-profile-links{row-gap:var(--spacing-xxxs,.2rem);grid-area:2/1/auto/-1;grid-template-columns:1fr;justify-items:start;margin-top:-.375rem;padding-left:0}:is(.social-pane-host,.social-pane)[data-layout=mobile] .social-pane .social-primary__tabs,:is(.social-pane-host,.social-pane)[data-layout=mobile] .social-primary__tabs{margin-top:-.5rem}:is(.social-pane-host,.social-pane)[data-layout=mobile] .social-pane__link-button{justify-self:start;padding-left:0;padding-right:0}:is(.social-pane-host,.social-pane)[data-layout=mobile] .social-pane__link-button>a{font-size:var(--font-size-sm,.875rem);text-align:left}:is(.social-pane-host,.social-pane)[data-layout=mobile] .social-pane__dialog-field-header{grid-template-columns:minmax(0,1fr)}:is(.social-pane-host,.social-pane)[data-layout=mobile] :is(.social-pane__header-hero,.social-pane__header-hero-icon){aspect-ratio:1;grid-area:1/1;width:5rem;height:5rem}:is(.social-pane-host,.social-pane)[data-layout=mobile] .social-pane__header-name{font-size:var(--font-size-xl,1.375rem);line-height:1.15}:is(.social-pane-host,.social-pane)[data-layout=mobile] .social-pane__header-job-org{font-size:var(--font-size-md,1rem);line-height:1.25}:is(.social-pane-host,.social-pane)[data-layout=mobile] .social-pane .social-friend-pronouns{font-size:.6875rem}:is(.social-pane-host,.social-pane)[data-layout=mobile] :is(.social-pane__header-location,.social-pane__header-stat),:is(.social-pane-host,.social-pane)[data-layout=mobile] .social-pane .social-friend-location{font-size:var(--font-size-xxs,.75rem)}:is(.social-pane-host,.social-pane)[data-layout=mobile] :is(.social-pane__edit-button-label,.social-pane__edit-button .profile-section-collapsible__edit-label){display:none!important}:is(.social-pane-host,.social-pane)[data-layout=mobile] .social-pane__edit-button{--button-background:transparent;--button-border-width:0;--button-border:transparent;--button-text:var(--color-text,#1a1a1a);--button-hover-background:var(--lavender-300,#e6dcff);--button-hover-border:transparent;--button-hover-text:var(--color-text,#1a1a1a);--button-font-size-sm:clamp(.9rem, 2.1vw, 1rem);--button-font-weight:var(--font-weight-regular,400);--button-icon-size-sm:.875rem}:is(.social-pane-host,.social-pane)[data-layout=mobile] :is(.social-pane__edit-button-icon,.social-pane__edit-button .profile-section-collapsible__edit-icon){justify-content:center;align-items:center;width:.875rem;height:.875rem;line-height:0;display:inline-flex}:is(.social-pane-host,.social-pane)[data-layout=mobile] :is(.social-pane__edit-button-icon svg,.social-pane__edit-button .profile-section-collapsible__edit-icon svg){width:.875rem;height:.875rem}:is(.social-pane-host,.social-pane)[data-layout=mobile] :is(.social-pane__edit-button-icon svg path,.social-pane__edit-button .profile-section-collapsible__edit-icon svg path){fill:var(--color-text,#1a1a1a);stroke:none}:is(.social-pane-host,.social-pane)[data-layout=mobile] .social-pane__dialog-actions{justify-content:center;align-items:center;gap:var(--spacing-sm,.938rem);padding:var(--spacing-md,1rem) 0 0;margin:var(--spacing-md,1rem) auto 0;box-sizing:border-box;flex-direction:row;width:100%}:is(.social-pane-host,.social-pane)[data-layout=mobile] .social-pane__dialog-actions>solid-ui-button{flex:none;width:10.8rem;min-width:8.5rem}:is(.social-pane-host,.social-pane)[data-layout=mobile] .social-pane__dialog-field-header solid-ui-button.social-pane__dialog-row-button--add::part(button){font-size:var(--font-size-sm,.875rem);line-height:var(--line-height-base,1.5)}:is(.social-pane-host,.social-pane)[data-layout=mobile] .social-pane .social-friends-header-actions--standalone{gap:var(--spacing-2xs,.625rem);flex-wrap:wrap;padding-top:.35rem}:is(.social-pane-host,.social-pane)[data-layout=mobile] :is(.social-pane .social-layout,.social-pane .social-primary,.social-layout,.social-primary),:is(.social-pane-host,.social-pane)[data-layout=mobile] .social-pane .social-friends-grid,:is(.social-pane-host,.social-pane)[data-layout=mobile] .social-friends-grid{display:block}:is(.social-pane-host,.social-pane)[data-input-mode=touch]{--profile-interactive-cursor:auto}:is(.social-pane-host,.social-pane)[data-input-mode=pointer]{--profile-interactive-cursor:pointer}@media (width<=600px){.social-pane__header-content{align-items:start;column-gap:var(--spacing-md,1rem);grid-template-columns:4.375rem minmax(0,1fr) auto;row-gap:.25rem;padding:1rem 1rem 0;display:grid}.social-pane__header-media{display:contents}.social-pane__header-details{flex-direction:column;grid-area:1/2;align-items:flex-start;gap:.125rem;min-width:0;display:flex}.social-pane__header-actions{justify-content:flex-end;justify-self:end;gap:var(--spacing-2xs,.3125rem);grid-area:1/3;width:auto;margin-left:0}.social-pane__header-actions--friend{grid-area:3/1/auto/-1;justify-content:center;justify-self:stretch;width:100%;margin-top:.125rem;margin-left:0}.social-pane__header-summary{flex-direction:column;gap:0;width:100%;display:flex}.social-pane__header-name,.social-pane__header-job-org,.social-pane__header-location{text-align:left;justify-content:flex-start;width:100%}.social-pane__header-stats{justify-content:flex-start;align-self:flex-start;gap:var(--spacing-xs,.5rem);width:100%;margin-top:-.4375rem}.social-profile-links{row-gap:var(--spacing-xxxs,.2rem);grid-area:2/1/auto/-1;grid-template-columns:1fr;justify-items:start;margin-top:-.375rem;padding-left:0}.social-pane .social-primary__tabs{margin-top:-.5rem}.social-pane__link-button{justify-self:start;padding-left:0;padding-right:0}.social-pane__link-button>a{font-size:var(--font-size-sm,.875rem);text-align:left}.social-pane__dialog-field-header{grid-template-columns:minmax(0,1fr)}.social-pane__header-hero,.social-pane__header-hero-icon{aspect-ratio:1;grid-area:1/1;width:5rem;height:5rem}.social-pane__header-name{font-size:var(--font-size-xl,1.375rem);line-height:1.15}.social-pane__header-job-org{font-size:var(--font-size-md,1rem);line-height:1.25}.social-pane .social-friend-pronouns{font-size:.6875rem}.social-pane__header-location,.social-pane__header-stat,.social-pane .social-friend-location{font-size:var(--font-size-xxs,.75rem)}.social-pane__friend-action{--button-padding-sm:var(--spacing-xxxs,.2rem) var(--spacing-xxs-old,.3rem);--button-font-size-sm:var(--font-size-xs,.813rem);--button-border-radius-sm:var(--border-radius-base,.3125rem)}.social-pane__edit-button-label,.social-pane__edit-button .profile-section-collapsible__edit-label{display:none!important}.social-pane__edit-button{--button-background:transparent;--button-border-width:0;--button-border:transparent;--button-text:var(--color-text,#1a1a1a);--button-hover-background:var(--lavender-300,#e6dcff);--button-hover-border:transparent;--button-hover-text:var(--color-text,#1a1a1a);--button-font-size-sm:clamp(.9rem, 2.1vw, 1rem);--button-font-weight:var(--font-weight-regular,400);--button-icon-size-sm:.875rem}.social-pane__edit-button-icon,.social-pane__edit-button .profile-section-collapsible__edit-icon{justify-content:center;align-items:center;width:.875rem;height:.875rem;line-height:0;display:inline-flex}.social-pane__edit-button-icon svg,.social-pane__edit-button .profile-section-collapsible__edit-icon svg{width:.875rem;height:.875rem}.social-pane__edit-button-icon svg path,.social-pane__edit-button .profile-section-collapsible__edit-icon svg path{fill:var(--color-text,#1a1a1a);stroke:none}.social-pane__dialog-actions{justify-content:center;align-items:center;gap:var(--spacing-sm,.938rem);padding:var(--spacing-md,1rem) 0 0;margin:var(--spacing-md,1rem) auto 0;box-sizing:border-box;flex-direction:row;width:100%}.social-pane__dialog-actions>solid-ui-button{flex:none;width:10.8rem;min-width:8.5rem}.social-pane__dialog-field-header solid-ui-button.social-pane__dialog-row-button--add::part(button){font-size:var(--font-size-sm,.875rem);line-height:var(--line-height-base,1.5)}.social-pane .social-friends-header-actions--standalone{gap:var(--spacing-2xs,.625rem);flex-wrap:wrap;padding-top:.35rem}.social-pane .social-layout,.social-pane .social-primary,.social-pane .social-friends-grid{display:block}.social-pane .social-friends-grid>tr,.social-pane .social-friends-grid>tbody>tr{width:100%;margin-bottom:var(--spacing-xs,.75rem);display:table}.social-pane .social-friends-grid>tr:last-child,.social-pane .social-friends-grid>tbody>tr:last-child{margin-bottom:0}.social-pane .social-main{width:100%}}`)),document.head.appendChild(e)}}catch(e){console.error(`vite-plugin-css-injected-by-js`,e)}})();;const e=require("./icons.cjs.js"),t=require("./socialSections.cjs.js"),n=require("./triage.cjs.js");let r=require("solid-ui"),i=require("solid-logic");function a(e,t){let n=t.environment?.layout??`desktop`,r=t.environment?.theme??`light`,i=t.environment?.inputMode??`pointer`;e.classList.add(`social-pane-host`),e.dataset.layout=n,e.dataset.theme=r,e.dataset.inputMode=i}var o={icon:r.icons.originalIconBase+`foaf/foafTiny.gif`,name:`social`,label:function(e,t){let n=t.session.store.findTypeURIs(e);return n[r.ns.foaf(`Person`).uri]||n[r.ns.vcard(`Individual`).uri]?`Friends`:null},global:!1,render:function(o,s){let c=s.dom,l=function(e,t){let n=[];for(let r=0;r<e.length;r++)for(let i=0;i<t.length;i++)if(t[i].sameTerm(e[r])){n.push(t[i]);break}return n},m=function(e){let t=new Set,n=[];for(let r of e)!r?.value||t.has(r.value)||(t.add(r.value),n.push(r));return n},h=function(e,t){if(!t)return e;let n=c.createElement(`a`);return n.setAttribute(`href`,t),n.appendChild(e),n},ee=function(e){return c.createTextNode(e)},g=function(){},te=function(e,t,n,i={}){let a=c.createElement(`form`),o=c.createElement(`label`),s=c.createElement(`input`),l=c.createElement(`span`);return l.className=`question`,typeof e==`string`?l.textContent=e:l.appendChild(e),s.setAttribute(`type`,`checkbox`),i.disabled&&(s.disabled=!0,i.disabledTitle&&(s.title=i.disabledTitle,s.setAttribute(`aria-label`,i.disabledTitle))),o.appendChild(l),o.appendChild(s),a.appendChild(o),s.checked=n,s.addEventListener(`click`,function(e){if(this.checked)try{_.UserInput.sparqler.insert_statement(t,function(e,n,i){if(l.className=`question`,!n){r.log.alert(`Error occurs while inserting `+t+`
2
2
 
3
3
  `+i),s.checked=!1;return}v.add(t.subject,t.predicate,t.object,t.why),g()})}catch(e){r.log.error(`Data write fails:`+e),r.log.alert(`Data write fails:`+e),s.checked=!1,l.className=`question`}else try{_.UserInput.sparqler.delete_statement(t,function(e,n,i){l.className=`question`,n?(v.removeMany(t.subject,t.predicate,t.object,t.why),g()):(r.log.alert(`Error occurs while deleting `+t+`
4
4