solid-panes 4.4.2-2 → 4.4.2-4

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 (410) hide show
  1. package/README.md +10 -10
  2. package/dist/RDFXMLPane.d.ts +2 -3
  3. package/dist/RDFXMLPane2.cjs.js +3 -0
  4. package/dist/RDFXMLPane2.cjs.js.map +1 -0
  5. package/dist/RDFXMLPane2.esm.js +55 -0
  6. package/dist/RDFXMLPane2.esm.js.map +1 -0
  7. package/dist/_virtual/_rolldown/runtime.cjs.js +1 -0
  8. package/dist/_virtual/~icons/lucide/help-circle.cjs.js +2 -0
  9. package/dist/_virtual/~icons/lucide/help-circle.cjs.js.map +1 -0
  10. package/dist/_virtual/~icons/lucide/help-circle.esm.js +11 -0
  11. package/dist/_virtual/~icons/lucide/help-circle.esm.js.map +1 -0
  12. package/dist/_virtual/~icons/lucide/user.cjs.js +2 -0
  13. package/dist/_virtual/~icons/lucide/user.cjs.js.map +1 -0
  14. package/dist/_virtual/~icons/lucide/user.esm.js +11 -0
  15. package/dist/_virtual/~icons/lucide/user.esm.js.map +1 -0
  16. package/dist/audio/audioPane.cjs.js +2 -0
  17. package/dist/audio/audioPane.cjs.js.map +1 -0
  18. package/dist/audio/audioPane.esm.js +96 -0
  19. package/dist/audio/audioPane.esm.js.map +1 -0
  20. package/dist/classInstancePane.cjs.js +2 -0
  21. package/dist/classInstancePane.cjs.js.map +1 -0
  22. package/dist/classInstancePane.esm.js +50 -0
  23. package/dist/classInstancePane.esm.js.map +1 -0
  24. package/dist/components/header/Header.cjs.js +19 -0
  25. package/dist/components/header/Header.cjs.js.map +1 -0
  26. package/dist/components/header/Header.d.ts +8 -0
  27. package/dist/components/header/Header.d.ts.map +1 -0
  28. package/dist/components/header/Header.esm.js +228 -0
  29. package/dist/components/header/Header.esm.js.map +1 -0
  30. package/dist/components/header/Header.styles.cjs.js +2 -0
  31. package/dist/components/header/Header.styles.cjs.js.map +1 -0
  32. package/dist/components/header/Header.styles.esm.js +7 -0
  33. package/dist/components/header/Header.styles.esm.js.map +1 -0
  34. package/dist/components/header/index.cjs.js +1 -0
  35. package/dist/components/header/index.d.ts +4 -0
  36. package/dist/components/header/index.d.ts.map +1 -0
  37. package/dist/components/header/index.esm.js +1 -0
  38. package/dist/dashboard/basicPreferences.cjs.js +2 -0
  39. package/dist/dashboard/basicPreferences.cjs.js.map +1 -0
  40. package/dist/dashboard/basicPreferences.d.ts +1 -1
  41. package/dist/dashboard/basicPreferences.esm.js +70 -0
  42. package/dist/dashboard/basicPreferences.esm.js.map +1 -0
  43. package/dist/dashboard/dashboardPane.cjs.js +2 -0
  44. package/dist/dashboard/dashboardPane.cjs.js.map +1 -0
  45. package/dist/dashboard/dashboardPane.d.ts +1 -1
  46. package/dist/dashboard/dashboardPane.esm.js +7 -0
  47. package/dist/dashboard/dashboardPane.esm.js.map +1 -0
  48. package/dist/dashboard/homepage.cjs.js +2 -0
  49. package/dist/dashboard/homepage.cjs.js.map +1 -0
  50. package/dist/dashboard/homepage.d.ts +1 -1
  51. package/dist/dashboard/homepage.esm.js +26 -0
  52. package/dist/dashboard/homepage.esm.js.map +1 -0
  53. package/dist/dashboard/ontologyData.cjs.js +37 -0
  54. package/dist/dashboard/ontologyData.cjs.js.map +1 -0
  55. package/dist/dashboard/ontologyData.esm.js +6 -0
  56. package/dist/dashboard/ontologyData.esm.js.map +1 -0
  57. package/dist/dashboard/preferencesFormText.cjs.js +20 -0
  58. package/dist/dashboard/preferencesFormText.cjs.js.map +1 -0
  59. package/dist/dashboard/preferencesFormText.esm.js +6 -0
  60. package/dist/dashboard/preferencesFormText.esm.js.map +1 -0
  61. package/dist/dataContentPane.d.ts +2 -3
  62. package/dist/dataContentPane2.cjs.js +2 -0
  63. package/dist/dataContentPane2.cjs.js.map +1 -0
  64. package/dist/dataContentPane2.esm.js +109 -0
  65. package/dist/dataContentPane2.esm.js.map +1 -0
  66. package/dist/defaultPane.d.ts +2 -3
  67. package/dist/defaultPane2.cjs.js +2 -0
  68. package/dist/defaultPane2.cjs.js.map +1 -0
  69. package/dist/defaultPane2.esm.js +41 -0
  70. package/dist/defaultPane2.esm.js.map +1 -0
  71. package/dist/dev.d.ts +10 -0
  72. package/dist/dev.d.ts.map +1 -0
  73. package/dist/dokieli/dokieliPane.cjs.js +2 -0
  74. package/dist/dokieli/dokieliPane.cjs.js.map +1 -0
  75. package/dist/dokieli/dokieliPane.esm.js +39 -0
  76. package/dist/dokieli/dokieliPane.esm.js.map +1 -0
  77. package/dist/dokieli/{new.js → new.cjs.js} +4 -10
  78. package/dist/dokieli/new.cjs.js.map +1 -0
  79. package/dist/dokieli/new.esm.js +6 -0
  80. package/dist/dokieli/new.esm.js.map +1 -0
  81. package/dist/form/pane.cjs.js +4 -0
  82. package/dist/form/pane.cjs.js.map +1 -0
  83. package/dist/form/pane.d.ts +1 -2
  84. package/dist/form/pane.esm.js +121 -0
  85. package/dist/form/pane.esm.js.map +1 -0
  86. package/dist/home/homePane.cjs.js +2 -0
  87. package/dist/home/homePane.cjs.js.map +1 -0
  88. package/dist/home/homePane.d.ts +1 -1
  89. package/dist/home/homePane.esm.js +35 -0
  90. package/dist/home/homePane.esm.js.map +1 -0
  91. package/dist/humanReadablePane.d.ts +2 -3
  92. package/dist/humanReadablePane2.cjs.js +2 -0
  93. package/dist/humanReadablePane2.cjs.js.map +1 -0
  94. package/dist/humanReadablePane2.esm.js +123 -0
  95. package/dist/humanReadablePane2.esm.js.map +1 -0
  96. package/dist/icons/dashboard.cjs.js +2 -0
  97. package/dist/icons/dashboard.cjs.js.map +1 -0
  98. package/dist/icons/dashboard.esm.js +6 -0
  99. package/dist/icons/dashboard.esm.js.map +1 -0
  100. package/dist/icons/folder.cjs.js +2 -0
  101. package/dist/icons/folder.cjs.js.map +1 -0
  102. package/dist/icons/folder.esm.js +6 -0
  103. package/dist/icons/folder.esm.js.map +1 -0
  104. package/dist/icons/friends.cjs.js +2 -0
  105. package/dist/icons/friends.cjs.js.map +1 -0
  106. package/dist/icons/friends.esm.js +6 -0
  107. package/dist/icons/friends.esm.js.map +1 -0
  108. package/dist/icons/iconHelper.cjs.js +2 -0
  109. package/dist/icons/iconHelper.cjs.js.map +1 -0
  110. package/dist/icons/iconHelper.esm.js +17 -0
  111. package/dist/icons/iconHelper.esm.js.map +1 -0
  112. package/dist/icons/{menu.svg → menu.cjs.js} +3 -2
  113. package/dist/icons/menu.cjs.js.map +1 -0
  114. package/dist/icons/menu.esm.js +6 -0
  115. package/dist/icons/menu.esm.js.map +1 -0
  116. package/dist/icons/person.cjs.js +2 -0
  117. package/dist/icons/person.cjs.js.map +1 -0
  118. package/dist/icons/person.esm.js +6 -0
  119. package/dist/icons/person.esm.js.map +1 -0
  120. package/dist/imagePane.d.ts +2 -3
  121. package/dist/imagePane2.cjs.js +2 -0
  122. package/dist/imagePane2.cjs.js.map +1 -0
  123. package/dist/imagePane2.esm.js +32 -0
  124. package/dist/imagePane2.esm.js.map +1 -0
  125. package/dist/index.cjs.js +2 -0
  126. package/dist/index.cjs.js.map +1 -0
  127. package/dist/index.d.ts +4 -4
  128. package/dist/index.esm.js +26 -0
  129. package/dist/index.esm.js.map +1 -0
  130. package/dist/internal/internalPane.d.ts +1 -2
  131. package/dist/internal/internalPane2.cjs.js +2 -0
  132. package/dist/internal/internalPane2.cjs.js.map +1 -0
  133. package/dist/internal/internalPane2.esm.js +104 -0
  134. package/dist/internal/internalPane2.esm.js.map +1 -0
  135. package/dist/mainPage/footer.cjs.js +2 -0
  136. package/dist/mainPage/footer.cjs.js.map +1 -0
  137. package/dist/mainPage/footer.d.ts +1 -3
  138. package/dist/mainPage/footer.esm.js +18 -0
  139. package/dist/mainPage/footer.esm.js.map +1 -0
  140. package/dist/mainPage/header.cjs.js +2 -0
  141. package/dist/mainPage/header.cjs.js.map +1 -0
  142. package/dist/mainPage/header.d.ts +1 -15
  143. package/dist/mainPage/header.d.ts.map +1 -1
  144. package/dist/mainPage/header.esm.js +25 -0
  145. package/dist/mainPage/header.esm.js.map +1 -0
  146. package/dist/mainPage/index.cjs.js +2 -0
  147. package/dist/mainPage/index.cjs.js.map +1 -0
  148. package/dist/mainPage/index.d.ts +3 -7
  149. package/dist/mainPage/index.d.ts.map +1 -1
  150. package/dist/mainPage/index.esm.js +38 -0
  151. package/dist/mainPage/index.esm.js.map +1 -0
  152. package/dist/mainPage/menu.d.ts +1 -2
  153. package/dist/mainPage/menu2.cjs.js +2 -0
  154. package/dist/mainPage/menu2.cjs.js.map +1 -0
  155. package/dist/mainPage/menu2.esm.js +184 -0
  156. package/dist/mainPage/menu2.esm.js.map +1 -0
  157. package/dist/n3Pane.d.ts +2 -3
  158. package/dist/n3Pane2.cjs.js +3 -0
  159. package/dist/n3Pane2.cjs.js.map +1 -0
  160. package/dist/n3Pane2.esm.js +52 -0
  161. package/dist/n3Pane2.esm.js.map +1 -0
  162. package/dist/outline/context.cjs.js +2 -0
  163. package/dist/outline/context.cjs.js.map +1 -0
  164. package/dist/outline/context.d.ts +3 -3
  165. package/dist/outline/context.esm.js +18 -0
  166. package/dist/outline/context.esm.js.map +1 -0
  167. package/dist/outline/manager2.cjs.js +3 -0
  168. package/dist/outline/manager2.cjs.js.map +1 -0
  169. package/dist/outline/manager2.esm.js +875 -0
  170. package/dist/outline/manager2.esm.js.map +1 -0
  171. package/dist/outline/outlineIcons.cjs.js +2 -0
  172. package/dist/outline/outlineIcons.cjs.js.map +1 -0
  173. package/dist/outline/outlineIcons.esm.js +10 -0
  174. package/dist/outline/outlineIcons.esm.js.map +1 -0
  175. package/dist/outline/propertyViews.cjs.js +2 -0
  176. package/dist/outline/propertyViews.cjs.js.map +1 -0
  177. package/dist/outline/propertyViews.esm.js +19 -0
  178. package/dist/outline/propertyViews.esm.js.map +1 -0
  179. package/dist/outline/queryByExample.cjs.js +2 -0
  180. package/dist/outline/queryByExample.cjs.js.map +1 -0
  181. package/dist/outline/queryByExample.esm.js +25 -0
  182. package/dist/outline/queryByExample.esm.js.map +1 -0
  183. package/dist/outline/userInput.cjs.js +61 -0
  184. package/dist/outline/userInput.cjs.js.map +1 -0
  185. package/dist/outline/userInput.esm.js +784 -0
  186. package/dist/outline/userInput.esm.js.map +1 -0
  187. package/dist/outline/viewAsImage.cjs.js +2 -0
  188. package/dist/outline/viewAsImage.cjs.js.map +1 -0
  189. package/dist/outline/viewAsImage.esm.js +10 -0
  190. package/dist/outline/viewAsImage.esm.js.map +1 -0
  191. package/dist/outline/viewAsMbox.cjs.js +2 -0
  192. package/dist/outline/viewAsMbox.cjs.js.map +1 -0
  193. package/dist/outline/viewAsMbox.esm.js +9 -0
  194. package/dist/outline/viewAsMbox.esm.js.map +1 -0
  195. package/dist/pad/padPane.d.ts +1 -2
  196. package/dist/pad/padPane2.cjs.js +2 -0
  197. package/dist/pad/padPane2.cjs.js.map +1 -0
  198. package/dist/pad/padPane2.esm.js +172 -0
  199. package/dist/pad/padPane2.esm.js.map +1 -0
  200. package/dist/playlist/playlistPane.cjs.js +2 -0
  201. package/dist/playlist/playlistPane.cjs.js.map +1 -0
  202. package/dist/playlist/playlistPane.esm.js +49 -0
  203. package/dist/playlist/playlistPane.esm.js.map +1 -0
  204. package/dist/profileUtils/ownerProfile.cjs.js +2 -0
  205. package/dist/profileUtils/ownerProfile.cjs.js.map +1 -0
  206. package/dist/profileUtils/ownerProfile.d.ts +1 -1
  207. package/dist/profileUtils/ownerProfile.esm.js +50 -0
  208. package/dist/profileUtils/ownerProfile.esm.js.map +1 -0
  209. package/dist/registerPanes.cjs.js +2 -0
  210. package/dist/registerPanes.cjs.js.map +1 -0
  211. package/dist/registerPanes.esm.js +46 -0
  212. package/dist/registerPanes.esm.js.map +1 -0
  213. package/dist/schedule/formsForSchedule.cjs.js +117 -0
  214. package/dist/schedule/formsForSchedule.cjs.js.map +1 -0
  215. package/dist/schedule/formsForSchedule.esm.js +6 -0
  216. package/dist/schedule/formsForSchedule.esm.js.map +1 -0
  217. package/dist/schedule/schedulePane.d.ts +2 -4
  218. package/dist/schedule/schedulePane2.cjs.js +8 -0
  219. package/dist/schedule/schedulePane2.cjs.js.map +1 -0
  220. package/dist/schedule/schedulePane2.esm.js +384 -0
  221. package/dist/schedule/schedulePane2.esm.js.map +1 -0
  222. package/dist/sharing/sharingPane.cjs.js +2 -0
  223. package/dist/sharing/sharingPane.cjs.js.map +1 -0
  224. package/dist/sharing/sharingPane.esm.js +22 -0
  225. package/dist/sharing/sharingPane.esm.js.map +1 -0
  226. package/dist/slideshow/slideshowPane.cjs.js +2 -0
  227. package/dist/slideshow/slideshowPane.cjs.js.map +1 -0
  228. package/dist/slideshow/slideshowPane.esm.js +46 -0
  229. package/dist/slideshow/slideshowPane.esm.js.map +1 -0
  230. package/dist/social/editProfileDetails.cjs.js +2 -0
  231. package/dist/social/editProfileDetails.cjs.js.map +1 -0
  232. package/dist/social/editProfileDetails.d.ts +1 -2
  233. package/dist/social/editProfileDetails.esm.js +12 -0
  234. package/dist/social/editProfileDetails.esm.js.map +1 -0
  235. package/dist/social/icons.cjs.js +82 -0
  236. package/dist/social/icons.cjs.js.map +1 -0
  237. package/dist/social/{icons.js → icons.esm.js} +12 -18
  238. package/dist/social/icons.esm.js.map +1 -0
  239. package/dist/social/socialPane.d.ts +2 -3
  240. package/dist/social/socialPane2.cjs.js +6 -0
  241. package/dist/social/socialPane2.cjs.js.map +1 -0
  242. package/dist/social/socialPane2.esm.js +326 -0
  243. package/dist/social/socialPane2.esm.js.map +1 -0
  244. package/dist/social/socialSections.cjs.js +2 -0
  245. package/dist/social/socialSections.cjs.js.map +1 -0
  246. package/dist/social/socialSections.d.ts +2 -2
  247. package/dist/social/socialSections.esm.js +221 -0
  248. package/dist/social/socialSections.esm.js.map +1 -0
  249. package/dist/social/spinner.cjs.js +1 -0
  250. package/dist/social/spinner.esm.js +1 -0
  251. package/dist/social/triage.cjs.js +2 -0
  252. package/dist/social/triage.cjs.js.map +1 -0
  253. package/dist/social/triage.d.ts +2 -2
  254. package/dist/social/triage.esm.js +44 -0
  255. package/dist/social/triage.esm.js.map +1 -0
  256. package/dist/tabbed/tabbedPane.cjs.js +2 -0
  257. package/dist/tabbed/tabbedPane.cjs.js.map +1 -0
  258. package/dist/tabbed/tabbedPane.d.ts +1 -1
  259. package/dist/tabbed/tabbedPane.esm.js +38 -0
  260. package/dist/tabbed/tabbedPane.esm.js.map +1 -0
  261. package/dist/tableViewPane.cjs.js +2 -0
  262. package/dist/tableViewPane.cjs.js.map +1 -0
  263. package/dist/tableViewPane.esm.js +20 -0
  264. package/dist/tableViewPane.esm.js.map +1 -0
  265. package/dist/transaction/pane.cjs.js +8 -0
  266. package/dist/transaction/pane.cjs.js.map +1 -0
  267. package/dist/transaction/pane.esm.js +212 -0
  268. package/dist/transaction/pane.esm.js.map +1 -0
  269. package/dist/transaction/period.cjs.js +4 -0
  270. package/dist/transaction/period.cjs.js.map +1 -0
  271. package/dist/transaction/period.esm.js +126 -0
  272. package/dist/transaction/period.esm.js.map +1 -0
  273. package/dist/trip/tripPane.cjs.js +2 -0
  274. package/dist/trip/tripPane.cjs.js.map +1 -0
  275. package/dist/trip/tripPane.esm.js +85 -0
  276. package/dist/trip/tripPane.esm.js.map +1 -0
  277. package/dist/trustedApplications/trustedApplications.dom.cjs.js +2 -0
  278. package/dist/trustedApplications/trustedApplications.dom.cjs.js.map +1 -0
  279. package/dist/trustedApplications/trustedApplications.dom.d.ts +1 -1
  280. package/dist/trustedApplications/trustedApplications.dom.esm.js +108 -0
  281. package/dist/trustedApplications/trustedApplications.dom.esm.js.map +1 -0
  282. package/dist/trustedApplications/trustedApplications.utils.cjs.js +2 -0
  283. package/dist/trustedApplications/trustedApplications.utils.cjs.js.map +1 -0
  284. package/dist/trustedApplications/trustedApplications.utils.d.ts +1 -1
  285. package/dist/trustedApplications/trustedApplications.utils.esm.js +20 -0
  286. package/dist/trustedApplications/trustedApplications.utils.esm.js.map +1 -0
  287. package/dist/trustedApplications/trustedApplications.view.cjs.js +2 -0
  288. package/dist/trustedApplications/trustedApplications.view.cjs.js.map +1 -0
  289. package/dist/trustedApplications/trustedApplications.view.d.ts +1 -1
  290. package/dist/trustedApplications/trustedApplications.view.esm.js +41 -0
  291. package/dist/trustedApplications/trustedApplications.view.esm.js.map +1 -0
  292. package/dist/ui/pane.cjs.js +4 -0
  293. package/dist/ui/pane.cjs.js.map +1 -0
  294. package/dist/ui/pane.esm.js +56 -0
  295. package/dist/ui/pane.esm.js.map +1 -0
  296. package/dist/versionInfo.cjs.js +2 -0
  297. package/dist/versionInfo.cjs.js.map +1 -0
  298. package/dist/versionInfo.esm.js +40 -0
  299. package/dist/versionInfo.esm.js.map +1 -0
  300. package/dist/video/videoPane.cjs.js +2 -0
  301. package/dist/video/videoPane.cjs.js.map +1 -0
  302. package/dist/video/videoPane.esm.js +25 -0
  303. package/dist/video/videoPane.esm.js.map +1 -0
  304. package/package.json +35 -62
  305. package/dist/0314353e28ce6e5539af.svg +0 -9
  306. package/dist/04567ff683933c35c465.png +0 -0
  307. package/dist/10163fd9b5a0e00d63a0.png +0 -0
  308. package/dist/1234dcb2eec2e45f252b.png +0 -0
  309. package/dist/20899934157df4db56cb.png +0 -0
  310. package/dist/33760bf79f097f449da5.png +0 -0
  311. package/dist/4cceba29ab33b1ddd9bb.svg +0 -6
  312. package/dist/578d2b6ed32e7624164e.png +0 -0
  313. package/dist/5f62a5b2b7e99b9640c7.png +0 -0
  314. package/dist/6525766ecd288ec60129.png +0 -0
  315. package/dist/7800be6f6c4b5b0f4f20.png +0 -0
  316. package/dist/7b7538c6f6b317968009.svg +0 -9
  317. package/dist/92d03142abe6efc0b42d.svg +0 -6
  318. package/dist/976473cf5fe24d657d4b.png +0 -0
  319. package/dist/RDFXMLPane.css +0 -70
  320. package/dist/RDFXMLPane.js +0 -100
  321. package/dist/argument/argumentPane.js +0 -60
  322. package/dist/attach/attachPane.js +0 -393
  323. package/dist/audio/audioPane.js +0 -181
  324. package/dist/bda84f59e7216675a208.png +0 -0
  325. package/dist/cd68e8f3990ba8b2139e.png +0 -0
  326. package/dist/classInstancePane.js +0 -91
  327. package/dist/dashboard/basicPreferences.js +0 -147
  328. package/dist/dashboard/dashboardPane.js +0 -73
  329. package/dist/dashboard/homepage.js +0 -42
  330. package/dist/dataContentPane.css +0 -271
  331. package/dist/dataContentPane.js +0 -226
  332. package/dist/defaultPane.css +0 -97
  333. package/dist/defaultPane.js +0 -81
  334. package/dist/dokieli/dokieliPane.js +0 -74
  335. package/dist/e7074a7e2cb69e51cfd3.png +0 -0
  336. package/dist/f3772696fb7ee53c23d8.png +0 -0
  337. package/dist/form/formPane.css +0 -120
  338. package/dist/form/pane.js +0 -250
  339. package/dist/home/homePane.js +0 -74
  340. package/dist/humanReadablePane.css +0 -129
  341. package/dist/humanReadablePane.js +0 -243
  342. package/dist/icons/clock.svg +0 -7
  343. package/dist/icons/comment.svg +0 -6
  344. package/dist/icons/dashboard.svg +0 -9
  345. package/dist/icons/downArrow.svg +0 -6
  346. package/dist/icons/folder.svg +0 -6
  347. package/dist/icons/friends.svg +0 -9
  348. package/dist/icons/help.svg +0 -8
  349. package/dist/icons/iconHelper.js +0 -23
  350. package/dist/icons/person.svg +0 -6
  351. package/dist/icons/personInCircle.svg +0 -8
  352. package/dist/icons/sharing.svg +0 -10
  353. package/dist/icons/signOut.svg +0 -8
  354. package/dist/icons/signUp.svg +0 -9
  355. package/dist/icons/star.svg +0 -3
  356. package/dist/imagePane.css +0 -4
  357. package/dist/imagePane.js +0 -67
  358. package/dist/index.js +0 -123
  359. package/dist/internal/internalPane.css +0 -14
  360. package/dist/internal/internalPane.js +0 -183
  361. package/dist/mainPage/footer.js +0 -29
  362. package/dist/mainPage/header.js +0 -203
  363. package/dist/mainPage/index.js +0 -78
  364. package/dist/mainPage/menu.css +0 -243
  365. package/dist/mainPage/menu.js +0 -449
  366. package/dist/microblogPane/mbStyle.css +0 -267
  367. package/dist/microblogPane/microblogPane.js +0 -1031
  368. package/dist/n3Pane.css +0 -49
  369. package/dist/n3Pane.js +0 -88
  370. package/dist/outline/context.js +0 -21
  371. package/dist/outline/manager.css +0 -78
  372. package/dist/outline/manager.js +0 -2115
  373. package/dist/outline/outlineIcons.js +0 -126
  374. package/dist/outline/propertyViews.js +0 -43
  375. package/dist/outline/queryByExample.js +0 -285
  376. package/dist/outline/userInput.js +0 -1821
  377. package/dist/outline/viewAsImage.js +0 -14
  378. package/dist/outline/viewAsMbox.js +0 -21
  379. package/dist/pad/padPane.css +0 -40
  380. package/dist/pad/padPane.js +0 -421
  381. package/dist/playlist/playlistPane.js +0 -119
  382. package/dist/profileUtils/ownerProfile.js +0 -84
  383. package/dist/registerPanes.js +0 -145
  384. package/dist/schedule/schedulePane.css +0 -294
  385. package/dist/schedule/schedulePane.js +0 -1022
  386. package/dist/sharing/sharingPane.js +0 -48
  387. package/dist/slideshow/slideshowPane.js +0 -79
  388. package/dist/social/editProfileDetails.js +0 -362
  389. package/dist/social/socialPane.css +0 -1464
  390. package/dist/social/socialPane.js +0 -651
  391. package/dist/social/socialSections.js +0 -393
  392. package/dist/social/spinner.js +0 -13
  393. package/dist/social/triage.js +0 -79
  394. package/dist/solid-panes.js +0 -87502
  395. package/dist/solid-panes.js.map +0 -1
  396. package/dist/solid-panes.min.js +0 -3811
  397. package/dist/solid-panes.min.js.map +0 -1
  398. package/dist/styles/tabbedtab.css +0 -1066
  399. package/dist/styles/utilities.css +0 -5
  400. package/dist/tabbed/tabbedPane.js +0 -59
  401. package/dist/tableViewPane.js +0 -56
  402. package/dist/transaction/pane.js +0 -477
  403. package/dist/transaction/period.js +0 -323
  404. package/dist/trip/tripPane.js +0 -174
  405. package/dist/trustedApplications/trustedApplications.dom.js +0 -145
  406. package/dist/trustedApplications/trustedApplications.utils.js +0 -23
  407. package/dist/trustedApplications/trustedApplications.view.js +0 -55
  408. package/dist/ui/pane.js +0 -146
  409. package/dist/versionInfo.js +0 -41
  410. package/dist/video/videoPane.js +0 -42
@@ -0,0 +1,46 @@
1
+ import * as e from "solid-ui";
2
+ import t from "@solid/better-simple-slideshow";
3
+ //#region src/slideshow/slideshowPane.js
4
+ var n = e.ns, r = {
5
+ icon: e.icons.iconBase + "noun_138712.svg",
6
+ name: "slideshow",
7
+ audience: [n.solid("PowerUser")],
8
+ label: function(t, n) {
9
+ let r = n.session.store, i = e.ns, a = r.findTypeURIs(t);
10
+ if (a[i.ldp("Container").uri] || a[i.ldp("BasicContainer").uri]) {
11
+ let n = r.each(t, i.ldp("contains")), a = 0;
12
+ return n.forEach(function(t) {
13
+ e.widgets.isImage(t) && a++;
14
+ }), a > 0 ? "Slideshow" : null;
15
+ }
16
+ return null;
17
+ },
18
+ render: function(n, r) {
19
+ let i = r.dom;
20
+ e.widgets.addStyleSheet(i, "https://leemark.github.io/better-simple-slideshow/css/simple-slideshow-styles.css");
21
+ let a = r.session.store, o = e.ns, s = i.createElement("div");
22
+ s.setAttribute("class", "bss-slides");
23
+ let c = a.findTypeURIs(n), l;
24
+ (c[o.ldp("BasicContainer").uri] || c[o.ldp("Container").uri]) && (l = o.ldp("contains"));
25
+ let u = a.each(n, l);
26
+ u.sort();
27
+ for (let t = 0; t < u.length; t++) {
28
+ if (!e.widgets.isImage(u[t])) continue;
29
+ let n = s.appendChild(i.createElement("figure")), r = n.appendChild(i.createElement("img"));
30
+ a.fetcher._fetch(u[t].uri).then(function(e) {
31
+ return e.blob();
32
+ }).then(function(e) {
33
+ let t = URL.createObjectURL(e);
34
+ r.setAttribute("src", t);
35
+ }), r.style.width = "100%", n.appendChild(i.createElement("figcaption"));
36
+ }
37
+ let d = { dom: i };
38
+ return setTimeout(function() {
39
+ t(".bss-slides", d);
40
+ }, 1e3), s;
41
+ }
42
+ };
43
+ //#endregion
44
+ export { r as slideshowPane };
45
+
46
+ //# sourceMappingURL=slideshowPane.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slideshowPane.esm.js","names":["ns"],"sources":["../../src/slideshow/slideshowPane.js"],"sourcesContent":["/* slideshow Pane\n **\n */\nimport * as UI from 'solid-ui'\n\nimport makeBSS from '@solid/better-simple-slideshow'\nconst ns = UI.ns\n\nexport const slideshowPane = {\n icon: UI.icons.iconBase + 'noun_138712.svg',\n\n name: 'slideshow',\n\n audience: [ns.solid('PowerUser')],\n\n // Does the subject deserve an slideshow pane?\n label: function (subject, context) {\n const store = context.session.store\n const ns = UI.ns\n const t = store.findTypeURIs(subject)\n if (t[ns.ldp('Container').uri] || t[ns.ldp('BasicContainer').uri]) {\n const contents = store.each(subject, ns.ldp('contains'))\n let count = 0\n contents.forEach(function (file) {\n if (UI.widgets.isImage(file)) count++\n })\n return count > 0 ? 'Slideshow' : null\n }\n return null\n },\n\n // See https://github.com/leemark/better-simple-slideshow\n // and follow instructions there\n render: function (subject, context) {\n const dom = context.dom\n const styleSheet =\n 'https://leemark.github.io/better-simple-slideshow/css/simple-slideshow-styles.css'\n UI.widgets.addStyleSheet(dom, styleSheet)\n\n const store = context.session.store\n const ns = UI.ns\n const div = dom.createElement('div')\n div.setAttribute('class', 'bss-slides')\n\n const t = store.findTypeURIs(subject)\n let predicate\n if (t[ns.ldp('BasicContainer').uri] || t[ns.ldp('Container').uri]) {\n predicate = ns.ldp('contains')\n }\n const images = store.each(subject, predicate) // @@ random order?\n // @@ Ideally: sort by embedded time of image\n images.sort() // Sort for now by URI\n for (let i = 0; i < images.length; i++) {\n if (!UI.widgets.isImage(images[i])) continue\n const figure = div.appendChild(dom.createElement('figure'))\n const img = figure.appendChild(dom.createElement('img'))\n\n // get image with authenticated fetch\n store.fetcher._fetch(images[i].uri)\n .then(function (response) {\n return response.blob()\n })\n .then(function (myBlob) {\n const objectURL = URL.createObjectURL(myBlob)\n img.setAttribute('src', objectURL) // w640 h480 //\n })\n img.style.width = '100%'\n figure.appendChild(dom.createElement('figcaption'))\n }\n const options = { dom }\n\n setTimeout(function () {\n makeBSS('.bss-slides', options)\n }, 1000) // Must run after the code which called this\n\n return div\n }\n}\n\n// ends\n"],"mappings":";;;AAMA,IAAMA,IAAK,EAAG,IAED,IAAgB;CAC3B,MAAM,EAAG,MAAM,WAAW;CAE1B,MAAM;CAEN,UAAU,CAACA,EAAG,MAAM,WAAW,CAAC;CAGhC,OAAO,SAAU,GAAS,GAAS;EACjC,IAAM,IAAQ,EAAQ,QAAQ,OACxB,IAAK,EAAG,IACR,IAAI,EAAM,aAAa,CAAO;EACpC,IAAI,EAAE,EAAG,IAAI,WAAW,CAAC,CAAC,QAAQ,EAAE,EAAG,IAAI,gBAAgB,CAAC,CAAC,MAAM;GACjE,IAAM,IAAW,EAAM,KAAK,GAAS,EAAG,IAAI,UAAU,CAAC,GACnD,IAAQ;GAIZ,OAHA,EAAS,QAAQ,SAAU,GAAM;IAC/B,AAAI,EAAG,QAAQ,QAAQ,CAAI,KAAG;GAChC,CAAC,GACM,IAAQ,IAAI,cAAc;EACnC;EACA,OAAO;CACT;CAIA,QAAQ,SAAU,GAAS,GAAS;EAClC,IAAM,IAAM,EAAQ;EAGpB,EAAG,QAAQ,cAAc,GAAK,mFAAU;EAExC,IAAM,IAAQ,EAAQ,QAAQ,OACxB,IAAK,EAAG,IACR,IAAM,EAAI,cAAc,KAAK;EACnC,EAAI,aAAa,SAAS,YAAY;EAEtC,IAAM,IAAI,EAAM,aAAa,CAAO,GAChC;EACJ,CAAI,EAAE,EAAG,IAAI,gBAAgB,CAAC,CAAC,QAAQ,EAAE,EAAG,IAAI,WAAW,CAAC,CAAC,UAC3D,IAAY,EAAG,IAAI,UAAU;EAE/B,IAAM,IAAS,EAAM,KAAK,GAAS,CAAS;EAE5C,EAAO,KAAK;EACZ,KAAK,IAAI,IAAI,GAAG,IAAI,EAAO,QAAQ,KAAK;GACtC,IAAI,CAAC,EAAG,QAAQ,QAAQ,EAAO,EAAE,GAAG;GACpC,IAAM,IAAS,EAAI,YAAY,EAAI,cAAc,QAAQ,CAAC,GACpD,IAAM,EAAO,YAAY,EAAI,cAAc,KAAK,CAAC;GAYvD,AATA,EAAM,QAAQ,OAAO,EAAO,EAAE,CAAC,GAAG,CAAC,CAChC,KAAK,SAAU,GAAU;IACxB,OAAO,EAAS,KAAK;GACvB,CAAC,CAAC,CACD,KAAK,SAAU,GAAQ;IACtB,IAAM,IAAY,IAAI,gBAAgB,CAAM;IAC5C,EAAI,aAAa,OAAO,CAAS;GACnC,CAAC,GACH,EAAI,MAAM,QAAQ,QAClB,EAAO,YAAY,EAAI,cAAc,YAAY,CAAC;EACpD;EACA,IAAM,IAAU,EAAE,OAAI;EAMtB,OAJA,WAAW,WAAY;GACrB,EAAQ,eAAe,CAAO;EAChC,GAAG,GAAI,GAEA;CACT;AACF"}
@@ -0,0 +1,2 @@
1
+ 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;
2
+ //# sourceMappingURL=editProfileDetails.cjs.js.map
@@ -0,0 +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":"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"}
@@ -1,5 +1,4 @@
1
- import { LiveStore, NamedNode } from 'rdflib';
2
- import 'solid-ui/components/button';
1
+ import { LiveStore, NamedNode } from '../../node_modules/rdflib';
3
2
  type ProfileLinkField = {
4
3
  key: 'homepage' | 'weblog' | 'workplaceHomepage' | 'schoolHomepage';
5
4
  label: string;
@@ -0,0 +1,12 @@
1
+ import "./icons.esm.js";
2
+ import "./spinner.esm.js";
3
+ import { ns as e } from "solid-ui";
4
+ import "rdflib";
5
+ import "lit-html";
6
+ import "solid-ui/components/button";
7
+ e.foaf("homepage"), e.foaf("weblog"), e.foaf("workplaceHomepage"), e.foaf("schoolHomepage");
8
+ function t(e, t, n, r) {}
9
+ //#endregion
10
+ export { t as appendProfileLinks };
11
+
12
+ //# sourceMappingURL=editProfileDetails.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editProfileDetails.esm.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":";;;;;;AA8Ce,EAAG,KAAK,UAAU,GAMlB,EAAG,KAAK,QAAQ,GAMhB,EAAG,KAAK,mBAAmB,GAM3B,EAAG,KAAK,gBAAgB;AAwGvC,SAAgB,EACd,GACA,GACA,GACA,GACM,CAGR"}
@@ -0,0 +1,82 @@
1
+ var e=String.raw,t=e`
2
+ <svg xmlns="http://www.w3.org/2000/svg"
3
+ width="64"
4
+ height="64"
5
+ viewBox="0 0 64 64"
6
+ fill="none"
7
+ aria-hidden="true"
8
+ focusable="false"
9
+ >
10
+ <path d="M32.0007 58.6666C46.7282 58.6666 58.6673 46.7275 58.6673 31.9999C58.6673 17.2723 46.7282 5.33325 32.0007 5.33325C17.2731 5.33325 5.33398 17.2723 5.33398 31.9999C5.33398 46.7275 17.2731 58.6666 32.0007 58.6666Z" stroke="#CBD5E1" stroke-width="5.33333" stroke-linecap="round" stroke-linejoin="round"/>
11
+ <path d="M32 34.6667C36.4183 34.6667 40 31.085 40 26.6667C40 22.2485 36.4183 18.6667 32 18.6667C27.5817 18.6667 24 22.2485 24 26.6667C24 31.085 27.5817 34.6667 32 34.6667Z" stroke="#CBD5E1" stroke-width="5.33333" stroke-linecap="round" stroke-linejoin="round"/>
12
+ <path d="M18.666 55.0986V50.6666C18.666 49.2521 19.2279 47.8955 20.2281 46.8954C21.2283 45.8952 22.5849 45.3333 23.9993 45.3333H39.9993C41.4138 45.3333 42.7704 45.8952 43.7706 46.8954C44.7708 47.8955 45.3327 49.2521 45.3327 50.6666V55.0986" stroke="#CBD5E1" stroke-width="5.33333" stroke-linecap="round" stroke-linejoin="round"/>
13
+ </svg>
14
+ `;e`
15
+ <svg xmlns="http://www.w3.org/2000/svg"
16
+ width="14"
17
+ height="14"
18
+ viewBox="3 3 14 14"
19
+ fill="none"
20
+ aria-hidden="true"
21
+ focusable="false"
22
+ >
23
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M14.3063 3.34814C14.9271 3.34832 15.5236 3.59563 15.9625 4.03467C16.4012 4.47362 16.648 5.06935 16.6481 5.68994C16.648 6.31072 16.4004 6.90719 15.9615 7.34619L15.9606 7.34521L7.95373 15.355L7.95275 15.356C7.73845 15.5696 7.47464 15.7278 7.18517 15.8159H7.1842L4.57287 16.6079H4.57092C4.40678 16.6572 4.23224 16.6614 4.06603 16.6196C3.89974 16.5778 3.74793 16.4918 3.62658 16.3706C3.50526 16.2494 3.41865 16.0974 3.37658 15.9312C3.33472 15.7651 3.3383 15.5903 3.38732 15.4263L3.3883 15.4243L4.18127 12.813V12.811C4.27013 12.5215 4.42882 12.2574 4.64318 12.0435L12.651 4.03467V4.03369C13.09 3.59513 13.6857 3.34816 14.3063 3.34814ZM5.56213 12.9634C5.49841 13.0269 5.4509 13.1059 5.42443 13.1919L5.42345 13.1909L4.82189 15.1733L6.80627 14.5718C6.89221 14.5456 6.97114 14.4985 7.03478 14.4351L13.274 8.19482L11.8014 6.72217L5.56213 12.9634ZM14.3063 4.64893C14.0303 4.64894 13.7652 4.75864 13.5699 4.95361L12.7213 5.80225L14.194 7.2749L15.0426 6.42627L15.1119 6.3501C15.2635 6.16488 15.3473 5.93141 15.3473 5.68994C15.3472 5.41394 15.2377 5.14881 15.0426 4.95361C14.8474 4.75846 14.5823 4.64906 14.3063 4.64893Z" fill="#1E2939"/>
24
+ </svg>
25
+ `;var n=e`
26
+ <svg xmlns="http://www.w3.org/2000/svg"
27
+ width="16"
28
+ height="16"
29
+ viewBox="0 0 16 16"
30
+ fill="none"
31
+ aria-hidden="true"
32
+ focusable="false"
33
+ >
34
+ <path d="M13.3327 6.66659C13.3327 9.99525 9.64002 13.4619 8.40002 14.5326C8.2845 14.6194 8.14388 14.6664 7.99935 14.6664C7.85482 14.6664 7.7142 14.6194 7.59868 14.5326C6.35868 13.4619 2.66602 9.99525 2.66602 6.66659C2.66602 5.2521 3.22792 3.89554 4.22811 2.89535C5.22831 1.89516 6.58486 1.33325 7.99935 1.33325C9.41384 1.33325 10.7704 1.89516 11.7706 2.89535C12.7708 3.89554 13.3327 5.2521 13.3327 6.66659Z" stroke="#4A5565" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/>
35
+ <path d="M8 8.66675C9.10457 8.66675 10 7.77132 10 6.66675C10 5.56218 9.10457 4.66675 8 4.66675C6.89543 4.66675 6 5.56218 6 6.66675C6 7.77132 6.89543 8.66675 8 8.66675Z" stroke="#4A5565" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/>
36
+ </svg>
37
+ `;e`
38
+ <svg xmlns="http://www.w3.org/2000/svg"
39
+ width="12"
40
+ height="12"
41
+ viewBox="0 0 12 12"
42
+ fill="none"
43
+ aria-hidden="true"
44
+ focusable="false"
45
+ >
46
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M10.5301 0.244005C10.8555 -0.0813835 11.3834 -0.0812864 11.7088 0.244005C12.0338 0.569352 12.0338 1.09639 11.7088 1.42174L7.15416 5.97545L11.7088 10.5301C12.0341 10.8556 12.0342 11.3835 11.7088 11.7088C11.3835 12.0342 10.8556 12.0341 10.5301 11.7088L5.97545 7.15416L1.42174 11.7088C1.09639 12.0338 0.569351 12.0338 0.244004 11.7088C-0.0812866 11.3834 -0.0813828 10.8555 0.244004 10.5301L4.79772 5.97545L0.244004 1.42174C-0.0812866 1.09629 -0.0813828 0.569393 0.244004 0.244005C0.569393 -0.0813835 1.09629 -0.0812864 1.42174 0.244005L5.97545 4.79772L10.5301 0.244005Z" fill="#4A5565"/>
47
+ </svg>
48
+ `,e`
49
+ <svg xmlns="http://www.w3.org/2000/svg"
50
+ width="20"
51
+ height="20"
52
+ viewBox="0 0 20 20"
53
+ fill="none"
54
+ aria-hidden="true"
55
+ focusable="false"
56
+ >
57
+ <path d="M8.33301 9.16675V14.1667" stroke="#D1D5DC" stroke-width="1.45833" stroke-linecap="round" stroke-linejoin="round"/>
58
+ <path d="M11.667 9.16675V14.1667" stroke="#D1D5DC" stroke-width="1.45833" stroke-linecap="round" stroke-linejoin="round"/>
59
+ <path d="M15.8337 5V16.6667C15.8337 17.1087 15.6581 17.5326 15.3455 17.8452C15.0329 18.1577 14.609 18.3333 14.167 18.3333H5.83366C5.39163 18.3333 4.96771 18.1577 4.65515 17.8452C4.34259 17.5326 4.16699 17.1087 4.16699 16.6667V5" stroke="#D1D5DC" stroke-width="1.45833" stroke-linecap="round" stroke-linejoin="round"/>
60
+ <path d="M2.5 5H17.5" stroke="#D1D5DC" stroke-width="1.45833" stroke-linecap="round" stroke-linejoin="round"/>
61
+ <path d="M6.66699 5.00008V3.33341C6.66699 2.89139 6.84259 2.46746 7.15515 2.1549C7.46771 1.84234 7.89163 1.66675 8.33366 1.66675H11.667C12.109 1.66675 12.5329 1.84234 12.8455 2.1549C13.1581 2.46746 13.3337 2.89139 13.3337 3.33341V5.00008" stroke="#D1D5DC" stroke-width="1.45833" stroke-linecap="round" stroke-linejoin="round"/>
62
+ </svg>
63
+ `,e`
64
+ <svg xmlns="http://www.w3.org/2000/svg"
65
+ width="12"
66
+ height="12"
67
+ viewBox="0 0 12 12"
68
+ fill="none"
69
+ aria-hidden="true"
70
+ focusable="false"
71
+ >
72
+ <g clip-path="url(#clip0_3001_2564)">
73
+ <path d="M6.06055 0.10083C6.53372 0.101056 6.91793 0.485037 6.91797 0.958252V5.20532H11.165C11.6384 5.20532 12.0225 5.58936 12.0225 6.06274C12.0223 6.536 11.6383 6.92017 11.165 6.92017H6.91797V11.1663C6.91797 11.6395 6.53374 12.0235 6.06055 12.0237C5.58716 12.0237 5.20312 11.6396 5.20312 11.1663V6.92017H0.957031C0.483929 6.91994 0.0997601 6.53586 0.0996094 6.06274C0.0996094 5.5895 0.483837 5.20555 0.957031 5.20532H5.20312V0.958252C5.20316 0.484897 5.58718 0.10083 6.06055 0.10083Z" fill="#7C4DFF"/>
74
+ </g>
75
+ <defs>
76
+ <clipPath id="clip0_3001_2564">
77
+ <rect width="12" height="12" fill="white"/>
78
+ </clipPath>
79
+ </defs>
80
+ </svg>
81
+ `,exports.locationIcon=n,exports.personInCircleIcon=t;
82
+ //# sourceMappingURL=icons.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icons.cjs.js","names":[],"sources":["../../src/social/icons.ts"],"sourcesContent":["/* Simpliest solution for now since we are only using it for the symposium\nand then we will use icons from solid-assets */\nconst html = String.raw\n\nexport const personInCircleIcon = html`\n <svg xmlns=\"http://www.w3.org/2000/svg\" \n width=\"64\" \n height=\"64\" \n viewBox=\"0 0 64 64\" \n fill=\"none\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <path d=\"M32.0007 58.6666C46.7282 58.6666 58.6673 46.7275 58.6673 31.9999C58.6673 17.2723 46.7282 5.33325 32.0007 5.33325C17.2731 5.33325 5.33398 17.2723 5.33398 31.9999C5.33398 46.7275 17.2731 58.6666 32.0007 58.6666Z\" stroke=\"#CBD5E1\" stroke-width=\"5.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M32 34.6667C36.4183 34.6667 40 31.085 40 26.6667C40 22.2485 36.4183 18.6667 32 18.6667C27.5817 18.6667 24 22.2485 24 26.6667C24 31.085 27.5817 34.6667 32 34.6667Z\" stroke=\"#CBD5E1\" stroke-width=\"5.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M18.666 55.0986V50.6666C18.666 49.2521 19.2279 47.8955 20.2281 46.8954C21.2283 45.8952 22.5849 45.3333 23.9993 45.3333H39.9993C41.4138 45.3333 42.7704 45.8952 43.7706 46.8954C44.7708 47.8955 45.3327 49.2521 45.3327 50.6666V55.0986\" stroke=\"#CBD5E1\" stroke-width=\"5.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n`\nexport const editIcon = html`\n <svg xmlns=\"http://www.w3.org/2000/svg\" \n width=\"14\" \n height=\"14\" \n viewBox=\"3 3 14 14\" \n fill=\"none\"\n aria-hidden=\"true\" \n focusable=\"false\"\n >\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M14.3063 3.34814C14.9271 3.34832 15.5236 3.59563 15.9625 4.03467C16.4012 4.47362 16.648 5.06935 16.6481 5.68994C16.648 6.31072 16.4004 6.90719 15.9615 7.34619L15.9606 7.34521L7.95373 15.355L7.95275 15.356C7.73845 15.5696 7.47464 15.7278 7.18517 15.8159H7.1842L4.57287 16.6079H4.57092C4.40678 16.6572 4.23224 16.6614 4.06603 16.6196C3.89974 16.5778 3.74793 16.4918 3.62658 16.3706C3.50526 16.2494 3.41865 16.0974 3.37658 15.9312C3.33472 15.7651 3.3383 15.5903 3.38732 15.4263L3.3883 15.4243L4.18127 12.813V12.811C4.27013 12.5215 4.42882 12.2574 4.64318 12.0435L12.651 4.03467V4.03369C13.09 3.59513 13.6857 3.34816 14.3063 3.34814ZM5.56213 12.9634C5.49841 13.0269 5.4509 13.1059 5.42443 13.1919L5.42345 13.1909L4.82189 15.1733L6.80627 14.5718C6.89221 14.5456 6.97114 14.4985 7.03478 14.4351L13.274 8.19482L11.8014 6.72217L5.56213 12.9634ZM14.3063 4.64893C14.0303 4.64894 13.7652 4.75864 13.5699 4.95361L12.7213 5.80225L14.194 7.2749L15.0426 6.42627L15.1119 6.3501C15.2635 6.16488 15.3473 5.93141 15.3473 5.68994C15.3472 5.41394 15.2377 5.14881 15.0426 4.95361C14.8474 4.75846 14.5823 4.64906 14.3063 4.64893Z\" fill=\"#1E2939\"/>\n </svg>\n`\nexport const locationIcon = html`\n <svg xmlns=\"http://www.w3.org/2000/svg\" \n width=\"16\" \n height=\"16\" \n viewBox=\"0 0 16 16\" \n fill=\"none\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <path d=\"M13.3327 6.66659C13.3327 9.99525 9.64002 13.4619 8.40002 14.5326C8.2845 14.6194 8.14388 14.6664 7.99935 14.6664C7.85482 14.6664 7.7142 14.6194 7.59868 14.5326C6.35868 13.4619 2.66602 9.99525 2.66602 6.66659C2.66602 5.2521 3.22792 3.89554 4.22811 2.89535C5.22831 1.89516 6.58486 1.33325 7.99935 1.33325C9.41384 1.33325 10.7704 1.89516 11.7706 2.89535C12.7708 3.89554 13.3327 5.2521 13.3327 6.66659Z\" stroke=\"#4A5565\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M8 8.66675C9.10457 8.66675 10 7.77132 10 6.66675C10 5.56218 9.10457 4.66675 8 4.66675C6.89543 4.66675 6 5.56218 6 6.66675C6 7.77132 6.89543 8.66675 8 8.66675Z\" stroke=\"#4A5565\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n`\nexport const closeIcon = html`\n <svg xmlns=\"http://www.w3.org/2000/svg\" \n width=\"12\" \n height=\"12\" \n viewBox=\"0 0 12 12\" \n fill=\"none\"\n aria-hidden=\"true\" \n focusable=\"false\"\n >\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M10.5301 0.244005C10.8555 -0.0813835 11.3834 -0.0812864 11.7088 0.244005C12.0338 0.569352 12.0338 1.09639 11.7088 1.42174L7.15416 5.97545L11.7088 10.5301C12.0341 10.8556 12.0342 11.3835 11.7088 11.7088C11.3835 12.0342 10.8556 12.0341 10.5301 11.7088L5.97545 7.15416L1.42174 11.7088C1.09639 12.0338 0.569351 12.0338 0.244004 11.7088C-0.0812866 11.3834 -0.0813828 10.8555 0.244004 10.5301L4.79772 5.97545L0.244004 1.42174C-0.0812866 1.09629 -0.0813828 0.569393 0.244004 0.244005C0.569393 -0.0813835 1.09629 -0.0812864 1.42174 0.244005L5.97545 4.79772L10.5301 0.244005Z\" fill=\"#4A5565\"/>\n </svg>\n`\nexport const trashIcon = html`\n <svg xmlns=\"http://www.w3.org/2000/svg\" \n width=\"20\" \n height=\"20\" \n viewBox=\"0 0 20 20\" \n fill=\"none\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <path d=\"M8.33301 9.16675V14.1667\" stroke=\"#D1D5DC\" stroke-width=\"1.45833\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M11.667 9.16675V14.1667\" stroke=\"#D1D5DC\" stroke-width=\"1.45833\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M15.8337 5V16.6667C15.8337 17.1087 15.6581 17.5326 15.3455 17.8452C15.0329 18.1577 14.609 18.3333 14.167 18.3333H5.83366C5.39163 18.3333 4.96771 18.1577 4.65515 17.8452C4.34259 17.5326 4.16699 17.1087 4.16699 16.6667V5\" stroke=\"#D1D5DC\" stroke-width=\"1.45833\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M2.5 5H17.5\" stroke=\"#D1D5DC\" stroke-width=\"1.45833\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M6.66699 5.00008V3.33341C6.66699 2.89139 6.84259 2.46746 7.15515 2.1549C7.46771 1.84234 7.89163 1.66675 8.33366 1.66675H11.667C12.109 1.66675 12.5329 1.84234 12.8455 2.1549C13.1581 2.46746 13.3337 2.89139 13.3337 3.33341V5.00008\" stroke=\"#D1D5DC\" stroke-width=\"1.45833\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n`\nexport const plusIcon = html`\n <svg xmlns=\"http://www.w3.org/2000/svg\" \n width=\"12\" \n height=\"12\" \n viewBox=\"0 0 12 12\" \n fill=\"none\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <g clip-path=\"url(#clip0_3001_2564)\">\n <path d=\"M6.06055 0.10083C6.53372 0.101056 6.91793 0.485037 6.91797 0.958252V5.20532H11.165C11.6384 5.20532 12.0225 5.58936 12.0225 6.06274C12.0223 6.536 11.6383 6.92017 11.165 6.92017H6.91797V11.1663C6.91797 11.6395 6.53374 12.0235 6.06055 12.0237C5.58716 12.0237 5.20312 11.6396 5.20312 11.1663V6.92017H0.957031C0.483929 6.91994 0.0997601 6.53586 0.0996094 6.06274C0.0996094 5.5895 0.483837 5.20555 0.957031 5.20532H5.20312V0.958252C5.20316 0.484897 5.58718 0.10083 6.06055 0.10083Z\" fill=\"#7C4DFF\"/>\n </g>\n <defs>\n <clipPath id=\"clip0_3001_2564\">\n <rect width=\"12\" height=\"12\" fill=\"white\"/>\n </clipPath>\n </defs>\n </svg>\n`\n"],"mappings":"AAEA,IAAM,EAAO,OAAO,IAEP,EAAqB,CAAI;;;;;;;;;;;;;EAcd,CAAI;;;;;;;;;;;EAY5B,IAAa,EAAe,CAAI;;;;;;;;;;;;EAaP,CAAI;;;;;;;;;;;EAYJ,CAAI;;;;;;;;;;;;;;;EAgBL,CAAI"}
@@ -1,13 +1,5 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.trashIcon = exports.plusIcon = exports.personInCircleIcon = exports.locationIcon = exports.editIcon = exports.closeIcon = void 0;
7
- /* Simpliest solution for now since we are only using it for the symposium
8
- and then we will use icons from solid-assets */
9
- const html = String.raw;
10
- const personInCircleIcon = exports.personInCircleIcon = html`
1
+ //#region src/social/icons.ts
2
+ var e = String.raw, t = e`
11
3
  <svg xmlns="http://www.w3.org/2000/svg"
12
4
  width="64"
13
5
  height="64"
@@ -21,7 +13,7 @@ const personInCircleIcon = exports.personInCircleIcon = html`
21
13
  <path d="M18.666 55.0986V50.6666C18.666 49.2521 19.2279 47.8955 20.2281 46.8954C21.2283 45.8952 22.5849 45.3333 23.9993 45.3333H39.9993C41.4138 45.3333 42.7704 45.8952 43.7706 46.8954C44.7708 47.8955 45.3327 49.2521 45.3327 50.6666V55.0986" stroke="#CBD5E1" stroke-width="5.33333" stroke-linecap="round" stroke-linejoin="round"/>
22
14
  </svg>
23
15
  `;
24
- const editIcon = exports.editIcon = html`
16
+ e`
25
17
  <svg xmlns="http://www.w3.org/2000/svg"
26
18
  width="14"
27
19
  height="14"
@@ -33,7 +25,7 @@ const editIcon = exports.editIcon = html`
33
25
  <path fill-rule="evenodd" clip-rule="evenodd" d="M14.3063 3.34814C14.9271 3.34832 15.5236 3.59563 15.9625 4.03467C16.4012 4.47362 16.648 5.06935 16.6481 5.68994C16.648 6.31072 16.4004 6.90719 15.9615 7.34619L15.9606 7.34521L7.95373 15.355L7.95275 15.356C7.73845 15.5696 7.47464 15.7278 7.18517 15.8159H7.1842L4.57287 16.6079H4.57092C4.40678 16.6572 4.23224 16.6614 4.06603 16.6196C3.89974 16.5778 3.74793 16.4918 3.62658 16.3706C3.50526 16.2494 3.41865 16.0974 3.37658 15.9312C3.33472 15.7651 3.3383 15.5903 3.38732 15.4263L3.3883 15.4243L4.18127 12.813V12.811C4.27013 12.5215 4.42882 12.2574 4.64318 12.0435L12.651 4.03467V4.03369C13.09 3.59513 13.6857 3.34816 14.3063 3.34814ZM5.56213 12.9634C5.49841 13.0269 5.4509 13.1059 5.42443 13.1919L5.42345 13.1909L4.82189 15.1733L6.80627 14.5718C6.89221 14.5456 6.97114 14.4985 7.03478 14.4351L13.274 8.19482L11.8014 6.72217L5.56213 12.9634ZM14.3063 4.64893C14.0303 4.64894 13.7652 4.75864 13.5699 4.95361L12.7213 5.80225L14.194 7.2749L15.0426 6.42627L15.1119 6.3501C15.2635 6.16488 15.3473 5.93141 15.3473 5.68994C15.3472 5.41394 15.2377 5.14881 15.0426 4.95361C14.8474 4.75846 14.5823 4.64906 14.3063 4.64893Z" fill="#1E2939"/>
34
26
  </svg>
35
27
  `;
36
- const locationIcon = exports.locationIcon = html`
28
+ var n = e`
37
29
  <svg xmlns="http://www.w3.org/2000/svg"
38
30
  width="16"
39
31
  height="16"
@@ -46,7 +38,7 @@ const locationIcon = exports.locationIcon = html`
46
38
  <path d="M8 8.66675C9.10457 8.66675 10 7.77132 10 6.66675C10 5.56218 9.10457 4.66675 8 4.66675C6.89543 4.66675 6 5.56218 6 6.66675C6 7.77132 6.89543 8.66675 8 8.66675Z" stroke="#4A5565" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/>
47
39
  </svg>
48
40
  `;
49
- const closeIcon = exports.closeIcon = html`
41
+ e`
50
42
  <svg xmlns="http://www.w3.org/2000/svg"
51
43
  width="12"
52
44
  height="12"
@@ -57,8 +49,7 @@ const closeIcon = exports.closeIcon = html`
57
49
  >
58
50
  <path fill-rule="evenodd" clip-rule="evenodd" d="M10.5301 0.244005C10.8555 -0.0813835 11.3834 -0.0812864 11.7088 0.244005C12.0338 0.569352 12.0338 1.09639 11.7088 1.42174L7.15416 5.97545L11.7088 10.5301C12.0341 10.8556 12.0342 11.3835 11.7088 11.7088C11.3835 12.0342 10.8556 12.0341 10.5301 11.7088L5.97545 7.15416L1.42174 11.7088C1.09639 12.0338 0.569351 12.0338 0.244004 11.7088C-0.0812866 11.3834 -0.0813828 10.8555 0.244004 10.5301L4.79772 5.97545L0.244004 1.42174C-0.0812866 1.09629 -0.0813828 0.569393 0.244004 0.244005C0.569393 -0.0813835 1.09629 -0.0812864 1.42174 0.244005L5.97545 4.79772L10.5301 0.244005Z" fill="#4A5565"/>
59
51
  </svg>
60
- `;
61
- const trashIcon = exports.trashIcon = html`
52
+ `, e`
62
53
  <svg xmlns="http://www.w3.org/2000/svg"
63
54
  width="20"
64
55
  height="20"
@@ -73,8 +64,7 @@ const trashIcon = exports.trashIcon = html`
73
64
  <path d="M2.5 5H17.5" stroke="#D1D5DC" stroke-width="1.45833" stroke-linecap="round" stroke-linejoin="round"/>
74
65
  <path d="M6.66699 5.00008V3.33341C6.66699 2.89139 6.84259 2.46746 7.15515 2.1549C7.46771 1.84234 7.89163 1.66675 8.33366 1.66675H11.667C12.109 1.66675 12.5329 1.84234 12.8455 2.1549C13.1581 2.46746 13.3337 2.89139 13.3337 3.33341V5.00008" stroke="#D1D5DC" stroke-width="1.45833" stroke-linecap="round" stroke-linejoin="round"/>
75
66
  </svg>
76
- `;
77
- const plusIcon = exports.plusIcon = html`
67
+ `, e`
78
68
  <svg xmlns="http://www.w3.org/2000/svg"
79
69
  width="12"
80
70
  height="12"
@@ -92,4 +82,8 @@ const plusIcon = exports.plusIcon = html`
92
82
  </clipPath>
93
83
  </defs>
94
84
  </svg>
95
- `;
85
+ `;
86
+ //#endregion
87
+ export { n as locationIcon, t as personInCircleIcon };
88
+
89
+ //# sourceMappingURL=icons.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icons.esm.js","names":[],"sources":["../../src/social/icons.ts"],"sourcesContent":["/* Simpliest solution for now since we are only using it for the symposium\nand then we will use icons from solid-assets */\nconst html = String.raw\n\nexport const personInCircleIcon = html`\n <svg xmlns=\"http://www.w3.org/2000/svg\" \n width=\"64\" \n height=\"64\" \n viewBox=\"0 0 64 64\" \n fill=\"none\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <path d=\"M32.0007 58.6666C46.7282 58.6666 58.6673 46.7275 58.6673 31.9999C58.6673 17.2723 46.7282 5.33325 32.0007 5.33325C17.2731 5.33325 5.33398 17.2723 5.33398 31.9999C5.33398 46.7275 17.2731 58.6666 32.0007 58.6666Z\" stroke=\"#CBD5E1\" stroke-width=\"5.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M32 34.6667C36.4183 34.6667 40 31.085 40 26.6667C40 22.2485 36.4183 18.6667 32 18.6667C27.5817 18.6667 24 22.2485 24 26.6667C24 31.085 27.5817 34.6667 32 34.6667Z\" stroke=\"#CBD5E1\" stroke-width=\"5.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M18.666 55.0986V50.6666C18.666 49.2521 19.2279 47.8955 20.2281 46.8954C21.2283 45.8952 22.5849 45.3333 23.9993 45.3333H39.9993C41.4138 45.3333 42.7704 45.8952 43.7706 46.8954C44.7708 47.8955 45.3327 49.2521 45.3327 50.6666V55.0986\" stroke=\"#CBD5E1\" stroke-width=\"5.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n`\nexport const editIcon = html`\n <svg xmlns=\"http://www.w3.org/2000/svg\" \n width=\"14\" \n height=\"14\" \n viewBox=\"3 3 14 14\" \n fill=\"none\"\n aria-hidden=\"true\" \n focusable=\"false\"\n >\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M14.3063 3.34814C14.9271 3.34832 15.5236 3.59563 15.9625 4.03467C16.4012 4.47362 16.648 5.06935 16.6481 5.68994C16.648 6.31072 16.4004 6.90719 15.9615 7.34619L15.9606 7.34521L7.95373 15.355L7.95275 15.356C7.73845 15.5696 7.47464 15.7278 7.18517 15.8159H7.1842L4.57287 16.6079H4.57092C4.40678 16.6572 4.23224 16.6614 4.06603 16.6196C3.89974 16.5778 3.74793 16.4918 3.62658 16.3706C3.50526 16.2494 3.41865 16.0974 3.37658 15.9312C3.33472 15.7651 3.3383 15.5903 3.38732 15.4263L3.3883 15.4243L4.18127 12.813V12.811C4.27013 12.5215 4.42882 12.2574 4.64318 12.0435L12.651 4.03467V4.03369C13.09 3.59513 13.6857 3.34816 14.3063 3.34814ZM5.56213 12.9634C5.49841 13.0269 5.4509 13.1059 5.42443 13.1919L5.42345 13.1909L4.82189 15.1733L6.80627 14.5718C6.89221 14.5456 6.97114 14.4985 7.03478 14.4351L13.274 8.19482L11.8014 6.72217L5.56213 12.9634ZM14.3063 4.64893C14.0303 4.64894 13.7652 4.75864 13.5699 4.95361L12.7213 5.80225L14.194 7.2749L15.0426 6.42627L15.1119 6.3501C15.2635 6.16488 15.3473 5.93141 15.3473 5.68994C15.3472 5.41394 15.2377 5.14881 15.0426 4.95361C14.8474 4.75846 14.5823 4.64906 14.3063 4.64893Z\" fill=\"#1E2939\"/>\n </svg>\n`\nexport const locationIcon = html`\n <svg xmlns=\"http://www.w3.org/2000/svg\" \n width=\"16\" \n height=\"16\" \n viewBox=\"0 0 16 16\" \n fill=\"none\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <path d=\"M13.3327 6.66659C13.3327 9.99525 9.64002 13.4619 8.40002 14.5326C8.2845 14.6194 8.14388 14.6664 7.99935 14.6664C7.85482 14.6664 7.7142 14.6194 7.59868 14.5326C6.35868 13.4619 2.66602 9.99525 2.66602 6.66659C2.66602 5.2521 3.22792 3.89554 4.22811 2.89535C5.22831 1.89516 6.58486 1.33325 7.99935 1.33325C9.41384 1.33325 10.7704 1.89516 11.7706 2.89535C12.7708 3.89554 13.3327 5.2521 13.3327 6.66659Z\" stroke=\"#4A5565\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M8 8.66675C9.10457 8.66675 10 7.77132 10 6.66675C10 5.56218 9.10457 4.66675 8 4.66675C6.89543 4.66675 6 5.56218 6 6.66675C6 7.77132 6.89543 8.66675 8 8.66675Z\" stroke=\"#4A5565\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n`\nexport const closeIcon = html`\n <svg xmlns=\"http://www.w3.org/2000/svg\" \n width=\"12\" \n height=\"12\" \n viewBox=\"0 0 12 12\" \n fill=\"none\"\n aria-hidden=\"true\" \n focusable=\"false\"\n >\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M10.5301 0.244005C10.8555 -0.0813835 11.3834 -0.0812864 11.7088 0.244005C12.0338 0.569352 12.0338 1.09639 11.7088 1.42174L7.15416 5.97545L11.7088 10.5301C12.0341 10.8556 12.0342 11.3835 11.7088 11.7088C11.3835 12.0342 10.8556 12.0341 10.5301 11.7088L5.97545 7.15416L1.42174 11.7088C1.09639 12.0338 0.569351 12.0338 0.244004 11.7088C-0.0812866 11.3834 -0.0813828 10.8555 0.244004 10.5301L4.79772 5.97545L0.244004 1.42174C-0.0812866 1.09629 -0.0813828 0.569393 0.244004 0.244005C0.569393 -0.0813835 1.09629 -0.0812864 1.42174 0.244005L5.97545 4.79772L10.5301 0.244005Z\" fill=\"#4A5565\"/>\n </svg>\n`\nexport const trashIcon = html`\n <svg xmlns=\"http://www.w3.org/2000/svg\" \n width=\"20\" \n height=\"20\" \n viewBox=\"0 0 20 20\" \n fill=\"none\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <path d=\"M8.33301 9.16675V14.1667\" stroke=\"#D1D5DC\" stroke-width=\"1.45833\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M11.667 9.16675V14.1667\" stroke=\"#D1D5DC\" stroke-width=\"1.45833\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M15.8337 5V16.6667C15.8337 17.1087 15.6581 17.5326 15.3455 17.8452C15.0329 18.1577 14.609 18.3333 14.167 18.3333H5.83366C5.39163 18.3333 4.96771 18.1577 4.65515 17.8452C4.34259 17.5326 4.16699 17.1087 4.16699 16.6667V5\" stroke=\"#D1D5DC\" stroke-width=\"1.45833\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M2.5 5H17.5\" stroke=\"#D1D5DC\" stroke-width=\"1.45833\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M6.66699 5.00008V3.33341C6.66699 2.89139 6.84259 2.46746 7.15515 2.1549C7.46771 1.84234 7.89163 1.66675 8.33366 1.66675H11.667C12.109 1.66675 12.5329 1.84234 12.8455 2.1549C13.1581 2.46746 13.3337 2.89139 13.3337 3.33341V5.00008\" stroke=\"#D1D5DC\" stroke-width=\"1.45833\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n`\nexport const plusIcon = html`\n <svg xmlns=\"http://www.w3.org/2000/svg\" \n width=\"12\" \n height=\"12\" \n viewBox=\"0 0 12 12\" \n fill=\"none\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <g clip-path=\"url(#clip0_3001_2564)\">\n <path d=\"M6.06055 0.10083C6.53372 0.101056 6.91793 0.485037 6.91797 0.958252V5.20532H11.165C11.6384 5.20532 12.0225 5.58936 12.0225 6.06274C12.0223 6.536 11.6383 6.92017 11.165 6.92017H6.91797V11.1663C6.91797 11.6395 6.53374 12.0235 6.06055 12.0237C5.58716 12.0237 5.20312 11.6396 5.20312 11.1663V6.92017H0.957031C0.483929 6.91994 0.0997601 6.53586 0.0996094 6.06274C0.0996094 5.5895 0.483837 5.20555 0.957031 5.20532H5.20312V0.958252C5.20316 0.484897 5.58718 0.10083 6.06055 0.10083Z\" fill=\"#7C4DFF\"/>\n </g>\n <defs>\n <clipPath id=\"clip0_3001_2564\">\n <rect width=\"12\" height=\"12\" fill=\"white\"/>\n </clipPath>\n </defs>\n </svg>\n`\n"],"mappings":";AAEA,IAAM,IAAO,OAAO,KAEP,IAAqB,CAAI;;;;;;;;;;;;;;AAcd,CAAI;;;;;;;;;;;;AAY5B,IAAa,IAAe,CAAI;;;;;;;;;;;;;AAaP,CAAI;;;;;;;;;;;GAYJ,CAAI;;;;;;;;;;;;;;;GAgBL,CAAI"}
@@ -1,6 +1,5 @@
1
- import './socialPane.css';
2
- import { LiveStore, NamedNode } from 'rdflib';
3
- import { DataBrowserContext } from 'pane-registry';
1
+ import { LiveStore, NamedNode } from '../../node_modules/rdflib';
2
+ import { DataBrowserContext } from '../../node_modules/pane-registry';
4
3
  export declare const socialPane: {
5
4
  icon: string;
6
5
  name: string;
@@ -0,0 +1,6 @@
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:0;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}div.social-pane{margin:0;padding-top:0;padding-bottom:0}.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
+
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
+
5
+ `+i),s.checked=!0)})}catch(e){r.log.alert(`Delete fails:`+e),s.checked=!0}},!1),a},_=s.getOutliner(c),v=s.session.store,y=c.createElement(`div`);y.classList.add(`social-pane`,`flex-column`,`gap-xxs`),a(y,s);let b=r.ns.foaf,ne=r.ns.vcard,x=i.authn.currentUser(),re=x?x.uri:null,S=x&&v.sameThings(x,o),C=b(`knows`),ie=v.anyValue(o,b(`givenname`))||v.anyValue(o,b(`firstName`))||v.anyValue(o,b(`nick`))||v.anyValue(o,b(`name`))||v.anyValue(o,ne(`fn`)),w=m(v.each(o,C)),ae=x?m(v.each(x,b(`knows`))):[],T=x&&!S?m(l(w,ae)).filter(e=>!v.sameThings(e,x)):[],oe=x&&!S?T.length:null,E=p(o,x),D=null,O=!1,k=!1,A=!1,se=y.appendChild(c.createElement(`div`));se.className=`social-layout`;let j=se.appendChild(c.createElement(`div`));j.className=`social-primary`;let M=j.appendChild(c.createElement(`div`));M.classList.add(`social-primary__tabs`,`flex-center`),M.setAttribute(`role`,`tablist`),M.setAttribute(`aria-label`,`Social sections`);let N=M.appendChild(c.createElement(`button`));N.className=`social-primary__tab`,N.type=`button`,N.id=`social-tab-all-friends`,N.textContent=`All Friends`,N.setAttribute(`role`,`tab`),N.setAttribute(`aria-controls`,`social-panel-all-friends`),N.setAttribute(`aria-selected`,`true`),N.tabIndex=0;let P=M.appendChild(c.createElement(`button`));if(P.className=`social-primary__tab`,P.type=`button`,P.id=`social-tab-mutual`,P.textContent=`Mutual`,P.setAttribute(`role`,`tab`),P.setAttribute(`aria-controls`,`social-panel-mutual`),P.setAttribute(`aria-selected`,`false`),P.tabIndex=-1,x){let e=v.each(void 0,b(`primaryTopic`),x),t=``;for(let n=0;n<e.length;n++)if(v.whether(e[n],r.ns.rdf(`type`),b(`PersonalProfileDocument`))){let i=e[n];if(O=_.UserInput.sparqler.editable(i.uri,v),!O)t+=`Your profile <`+r.utils.escapeForXML(i.uri)+`> is not remotely editable.`;else{D=i;break}}if(!S){let e=v.canon(x);k=v.whether(o,C,e),A=!1;let t=v.statementsMatching(e,C,o);t.length&&(A=!0,D||=t[0].why)}}let F=e=>e===`authenticated`&&!S&&!A,I=E===`owner`&&O,ce=E===`authenticated`&&!S&&O&&!!D,le=I,L={canEdit:I,viewerMode:E,showAddFriendAction:F(E)},R=t.createHeaderSection(s,o,L,{friendCount:w.length,mutualFriendCount:oe,onSelectFriends:function(){Q(`all-friends`)},onSelectMutual:typeof oe==`number`?function(){Q(`mutual`)}:void 0},function(){return f(s,o)});R.classList.add(`social-pane__header-section`,`flex-column`),y.prepend(R);let z=new Map;(function(e){let t=new Map;e.forEach(e=>{!e?.value||e.value===o.value||t.set(e.value,u(v,e))}),z.clear(),t.forEach((e,t)=>{z.set(t,e)})})(w);let B=function(t,n){let r=z.get(t.value)||u(v,t);z.set(t.value,r);let i=n.createElement(`div`),a=[r.jobTitle,r.organization].filter(Boolean).join(` | `);if(a){let e=i.appendChild(n.createElement(`div`));e.className=`social-friend-job-org`,e.textContent=a}if(r.location){let t=i.appendChild(n.createElement(`div`));t.className=`social-friend-location`,t.innerHTML=`${e.locationIcon} ${r.location}`}return i.childNodes.length?i:null},V=function(e,t){let n=z.get(e.value)||u(v,e);z.set(e.value,n);let r=n.pronouns;if(!r)return null;let i=t.createElement(`span`);return i.className=`social-friend-pronouns`,i.textContent=`(${r})`,i},H=x&&!S?t.createMutualSection({dom:c,subject:o,familiar:ie,me:x,meUri:re,incoming:k,outgoing:A,editable:ce,profile:D,knows:C,mutualConnections:T,link:h,text:ee,buildCheckboxForm:te,renderSupportingInfo:B,renderNameSuffix:V}):{section:c.createElement(`section`),content:c.createElement(`div`),refreshMutualFriends:function(){}},U=H.section,W=H.content;U.className||(U.className=`social-pane__mutual-friends social-primary__panel`,U.id=`social-panel-mutual`,U.setAttribute(`role`,`tabpanel`),U.setAttribute(`aria-labelledby`,`social-tab-mutual`),W.className=`social-main social-main--mutual`,U.appendChild(W)),j.appendChild(U);let ue=t.createAllFriendsSection({dom:c,subject:o,profile:le?D:null,editable:le,renderSupportingInfo:B,renderNameSuffix:V}),G=ue.section,de=ue.friendsList;j.appendChild(G);let K=n.triageFriends(v,o),q=t.createRequestsSection({dom:c,triage:K,renderSupportingInfo:B,renderNameSuffix:V}),J=q.section;j.appendChild(J);let Y=M.appendChild(c.createElement(`button`));Y.className=`social-primary__tab`,Y.type=`button`,Y.id=`social-tab-requests`,Y.textContent=`Requests`,Y.setAttribute(`role`,`tab`),Y.setAttribute(`aria-controls`,`social-panel-requests`),Y.setAttribute(`aria-selected`,`false`),Y.tabIndex=-1;let X=`all-friends`,Z=E===`owner`,Q=function(e){X=e;let t=e===`mutual`,n=e===`all-friends`,r=Z&&e===`requests`;P.classList.toggle(`social-primary__tab--active`,t),P.setAttribute(`aria-selected`,String(t)),P.tabIndex=t?0:-1,N.classList.toggle(`social-primary__tab--active`,n),N.setAttribute(`aria-selected`,String(n)),N.tabIndex=n?0:-1,Y.classList.toggle(`social-primary__tab--active`,r),Y.setAttribute(`aria-selected`,String(r)),Y.tabIndex=r?0:-1,U.classList.toggle(`social-primary__panel--active`,t),U.setAttribute(`aria-hidden`,String(!t)),G.classList.toggle(`social-primary__panel--active`,n),G.setAttribute(`aria-hidden`,String(!n)),J.classList.toggle(`social-primary__panel--active`,r),J.setAttribute(`aria-hidden`,String(!r)),J.hidden=!Z||!r},fe=function(){if(!x||S)return;let e=v.canon(x);k=v.whether(o,C,e),A=v.statementsMatching(e,C,o).length>0;let n=t.createMutualSection({dom:c,subject:o,familiar:ie,me:x,meUri:re,incoming:k,outgoing:A,editable:ce,profile:D,knows:C,mutualConnections:T,link:h,text:ee,buildCheckboxForm:te,renderSupportingInfo:B,renderNameSuffix:V});U.replaceWith(n.section),H=n,U=n.section,W=n.content};g=function(){fe(),L={...L,showAddFriendAction:F(L.viewerMode)},R.refreshSocialHeader?.(L),K=n.triageFriends(v,o),q.refreshRequests(K),Q(X)},Q(`all-friends`);let $=function(e){let t=e===`authenticated`&&!S;if(Z=e===`owner`,P.hidden=!t,Y.hidden=!Z,!Z&&X===`requests`){Q(`all-friends`);return}Q(`all-friends`)};P.addEventListener(`click`,function(){Q(`mutual`)}),N.addEventListener(`click`,function(){Q(`all-friends`)}),Y.addEventListener(`click`,function(){Q(`requests`)});let pe=function(){let e=de.refresh;typeof e==`function`&&e.call(de)},me=function(){H.refreshMutualFriends()};return(async()=>{try{for await(let e of d(s,o))z.clear(),e.forEach(e=>{z.set(e.url,e)}),pe(),me()}catch{}})(),(async()=>{try{K=await n.loadFriendshipTriage(s,o),q.refreshRequests(K),pe(),me()}catch{}})(),$(`anonymous`),i.authn.checkUser().then(e=>{let t=p(o,e);$(t);let n=t===`owner`&&O;L={...L,canEdit:n,viewerMode:t,showAddFriendAction:F(t)},R.refreshSocialHeader?.(L)}).catch(()=>{$(`anonymous`),L={...L,canEdit:!1,viewerMode:`anonymous`,showAddFriendAction:!1},R.refreshSocialHeader?.(L)}),y}},s=3;function c(e,t){let n=e.anyJS(t,r.ns.solid(`preferredSubjectPronoun`))||``;if(n){let i=e.anyJS(t,r.ns.solid(`preferredObjectPronoun`));i&&(n+=`/`+i)}return n||``}function l(e,t){return e&&t?`${t}, ${e}`:e||t||null}function u(e,t){let n=e.anyValue(t,r.ns.vcard(`fn`))||e.anyValue(t,r.ns.foaf(`name`))||null,i=e.anyValue(t,r.ns.vcard(`nickname`))||e.anyValue(t,r.ns.foaf(`nick`))||null,a=e.anyValue(t,r.ns.vcard(`bday`))||null,o=r.widgets.findImage(t),s=e.anyValue(t,r.ns.vcard(`role`))||null,u=e.anyValue(t,r.ns.vcard(`organization-name`))||null,d=e.any(t,r.ns.vcard(`hasAddress`))||null,f=l(d==null?null:e.anyValue(d,r.ns.vcard(`country-name`)),d==null?null:e.anyValue(d,r.ns.vcard(`locality`))),p=c(e,t);return{url:t.value,imageUrl:o,name:n,nickname:i,jobTitle:s,organization:u,birthdate:a,location:f,pronouns:p,subjectNode:t}}async function*d(e,t,n=s){let i=e.session.store,a=i?.fetcher;if(a&&typeof a.load==`function`)try{await a.load(t.doc())}catch{}let o=new Set,c=i.each(t,r.ns.foaf(`knows`),null,t.doc()),l=[];for(let e of c){let n=e?.value;!n||o.has(n)||t.value===n||(o.add(n),l.push(e))}let d=[];for(let e of l){if(a&&typeof a.load==`function`)try{await a.load(e.doc())}catch{}d.push(u(i,e)),d.length%n===0&&(yield[...d])}d.length>0&&d.length%n!==0&&(yield[...d])}function f(e,t){let n=e.session.store,i=n.anyValue(t,r.ns.vcard(`fn`))||n.anyValue(t,r.ns.foaf(`name`))||void 0,a=n.anyValue(t,r.ns.vcard(`nickname`))||n.anyValue(t,r.ns.foaf(`nick`))||void 0,o=n.anyValue(t,r.ns.vcard(`bday`))||void 0,s=r.widgets.findImage(t),u=n.anyValue(t,r.ns.vcard(`role`))||void 0,d=n.anyValue(t,r.ns.vcard(`organization-name`))||void 0,f=n.any(t,r.ns.vcard(`hasAddress`))||null,p=l(f==null?void 0:n.anyValue(f,r.ns.vcard(`country-name`)),f==null?void 0:n.anyValue(f,r.ns.vcard(`locality`))),m=c(n,t);return{url:t.value,imageUrl:s,name:i,nickname:a,jobTitle:u,organization:d,birthdate:o,location:p,pronouns:m}}function p(e,t=i.authn.currentUser()){let n=typeof t==`string`?t:typeof t==`object`&&t&&(t.value||t.uri)||null,r=`anonymous`;return n===e.value&&(r=`owner`),n&&n!==e.value&&(r=`authenticated`),r}exports.pronounsAsText=c,exports.selectProfileData=f,exports.socialPane=o,exports.streamFriends=d;
6
+ //# sourceMappingURL=socialPane2.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"socialPane2.cjs.js","names":[],"sources":["../../src/social/socialPane.ts"],"sourcesContent":["/* Social Pane\n **\n ** This outline pane provides social network functions\n ** Using for example the FOAF ontology.\n ** Goal: A *distributed* version of facebook, advogato, etc etc\n ** - Similarly easy user interface, but data storage distributed\n ** - Read and write both user-private (address book) and public data clearly\n ** -- todo: use common code to get username and load profile and set 'me'\n */\n\nimport './socialPane.css'\nimport { icons, utils, ns, log, widgets } from 'solid-ui'\nimport { authn } from 'solid-logic'\nimport { LiveStore, NamedNode, Statement } from 'rdflib'\nimport { DataBrowserContext } from 'pane-registry'\nimport { locationIcon } from './icons'\nimport {\n createAllFriendsSection,\n createHeaderSection,\n FriendRowRenderers,\n createMutualSection,\n createRequestsSection,\n HeaderControls,\n SocialHeaderElement\n} from './socialSections'\nimport type { ViewerMode } from './socialSections'\nimport { FriendshipTriage, loadFriendshipTriage, triageFriends } from './triage'\n\nfunction applyEnvironmentAttributes (\n element: HTMLElement,\n context: DataBrowserContext\n): void {\n const layout = context.environment?.layout ?? 'desktop'\n const theme = context.environment?.theme ?? 'light'\n const inputMode = context.environment?.inputMode ?? 'pointer'\n\n element.classList.add('social-pane-host')\n element.dataset.layout = layout\n element.dataset.theme = theme\n element.dataset.inputMode = inputMode\n}\n\nexport const socialPane = {\n icon: icons.originalIconBase + 'foaf/foafTiny.gif',\n\n name: 'social',\n\n label: function (subject, context) {\n const kb = context.session.store\n const types = kb.findTypeURIs(subject)\n if (\n types[ns.foaf('Person').uri] ||\n types[ns.vcard('Individual').uri]\n ) {\n return 'Friends'\n }\n return null\n },\n global: false,\n\n render: function (s, context) {\n const dom = context.dom\n const common = function (x: NamedNode[], y: NamedNode[]) {\n // Find common members of two lists\n const both: NamedNode[] = []\n for (let i = 0; i < x.length; i++) {\n for (let j = 0; j < y.length; j++) {\n if (y[j].sameTerm(x[i])) {\n both.push(y[j])\n break\n }\n }\n }\n return both\n }\n\n const uniqueNodes = function (nodes: NamedNode[]) {\n const seen = new Set<string>()\n const unique: NamedNode[] = []\n for (const node of nodes) {\n if (!node?.value || seen.has(node.value)) continue\n seen.add(node.value)\n unique.push(node)\n }\n return unique\n }\n\n const link = function (contents: Node, uri: string | null | undefined) {\n if (!uri) return contents\n const a = dom.createElement('a')\n a.setAttribute('href', uri)\n a.appendChild(contents)\n return a\n }\n\n const text = function (str: string) {\n return dom.createTextNode(str)\n }\n\n let refreshRelationshipUi = function () {}\n\n const buildCheckboxForm = function (\n lab: string | Node,\n statement: Statement,\n state: boolean,\n options: { disabled?: boolean, disabledTitle?: string } = {}\n ) {\n const f = dom.createElement('form')\n const label = dom.createElement('label')\n const input = dom.createElement('input')\n const tx = dom.createElement('span')\n tx.className = 'question'\n if (typeof lab === 'string') {\n tx.textContent = lab\n } else {\n tx.appendChild(lab)\n }\n input.setAttribute('type', 'checkbox')\n if (options.disabled) {\n input.disabled = true\n if (options.disabledTitle) {\n input.title = options.disabledTitle\n input.setAttribute('aria-label', options.disabledTitle)\n }\n }\n label.appendChild(tx)\n label.appendChild(input)\n f.appendChild(label)\n const boxHandler = function (this: HTMLInputElement, _e: Event) {\n if (this.checked) {\n try {\n outliner.UserInput.sparqler.insert_statement(statement, function (\n uri,\n success,\n errorBody\n ) {\n tx.className = 'question'\n if (!success) {\n log.alert(\n 'Error occurs while inserting ' +\n statement +\n '\\n\\n' +\n errorBody\n )\n input.checked = false // rollback UI\n return\n }\n kb.add(\n statement.subject,\n statement.predicate,\n statement.object,\n statement.why\n )\n refreshRelationshipUi()\n })\n } catch (e) {\n log.error('Data write fails:' + e)\n log.alert('Data write fails:' + e)\n input.checked = false // rollback UI\n tx.className = 'question'\n }\n } else {\n try {\n outliner.UserInput.sparqler.delete_statement(statement, function (\n uri,\n success,\n errorBody\n ) {\n tx.className = 'question'\n if (!success) {\n log.alert(\n 'Error occurs while deleting ' +\n statement +\n '\\n\\n' +\n errorBody\n )\n input.checked = true // Rollback UI\n } else {\n kb.removeMany(\n statement.subject,\n statement.predicate,\n statement.object,\n statement.why\n )\n refreshRelationshipUi()\n }\n })\n } catch (e) {\n log.alert('Delete fails:' + e)\n input.checked = true // Rollback UI\n // return\n }\n }\n }\n input.checked = state\n input.addEventListener('click', boxHandler, false)\n return f\n }\n\n // ////////// Body of render():\n\n const outliner = context.getOutliner(dom)\n const kb = context.session.store\n const socialPane = dom.createElement('div')\n socialPane.classList.add('social-pane', 'flex-column', 'gap-xxs')\n applyEnvironmentAttributes(socialPane, context)\n const foaf = ns.foaf\n const vcard = ns.vcard\n const me = authn.currentUser()\n const meUri = me ? me.uri : null\n\n const thisIsYou = me && kb.sameThings(me, s)\n\n const knows = foaf('knows')\n // var givenName = kb.sym('http://www.w3.org/2000/10/swap/pim/contact#givenName')\n const familiar =\n kb.anyValue(s, foaf('givenname')) ||\n kb.anyValue(s, foaf('firstName')) ||\n kb.anyValue(s, foaf('nick')) ||\n kb.anyValue(s, foaf('name')) ||\n kb.anyValue(s, vcard('fn'))\n const friends = kb.each(s, knows)\n const uniqueFriends = uniqueNodes(friends as NamedNode[])\n const myFriends = me ? uniqueNodes(kb.each(me, foaf('knows')) as NamedNode[]) : []\n const mutualConnections = me && !thisIsYou\n ? uniqueNodes(common(uniqueFriends, myFriends)).filter(friend => !kb.sameThings(friend, me))\n : []\n const mutualFriendCount = me && !thisIsYou ? mutualConnections.length : null\n const viewerMode = getViewerMode(s, me)\n\n // Do I have a public profile document?\n let profile: NamedNode | null = null // This could be SPARQL { ?me foaf:primaryTopic [ a foaf:PersonalProfileDocument ] }\n let editable = false\n let incoming: boolean | NamedNode[] = false\n let outgoing: boolean | NamedNode[] = false\n\n const structure = socialPane.appendChild(dom.createElement('div'))\n structure.className = 'social-layout'\n const primary = structure.appendChild(dom.createElement('div'))\n primary.className = 'social-primary'\n\n const tabs = primary.appendChild(dom.createElement('div'))\n tabs.classList.add('social-primary__tabs', 'flex-center')\n tabs.setAttribute('role', 'tablist')\n tabs.setAttribute('aria-label', 'Social sections')\n\n const allFriendsTab = tabs.appendChild(dom.createElement('button'))\n allFriendsTab.className = 'social-primary__tab'\n allFriendsTab.type = 'button'\n allFriendsTab.id = 'social-tab-all-friends'\n allFriendsTab.textContent = 'All Friends'\n allFriendsTab.setAttribute('role', 'tab')\n allFriendsTab.setAttribute('aria-controls', 'social-panel-all-friends')\n allFriendsTab.setAttribute('aria-selected', 'true')\n allFriendsTab.tabIndex = 0\n\n const mutualTab = tabs.appendChild(dom.createElement('button'))\n mutualTab.className = 'social-primary__tab'\n mutualTab.type = 'button'\n mutualTab.id = 'social-tab-mutual'\n mutualTab.textContent = 'Mutual'\n mutualTab.setAttribute('role', 'tab')\n mutualTab.setAttribute('aria-controls', 'social-panel-mutual')\n mutualTab.setAttribute('aria-selected', 'false')\n mutualTab.tabIndex = -1\n\n if (me) {\n // The definition of FOAF personal profile document is ..\n const works = kb.each(undefined, foaf('primaryTopic'), me) // having me as primary topic\n let message = ''\n for (let i = 0; i < works.length; i++) {\n if (\n kb.whether(\n works[i],\n ns.rdf('type'),\n foaf('PersonalProfileDocument')\n )\n ) {\n const doc = works[i]\n editable = outliner.UserInput.sparqler.editable(doc.uri, kb)\n if (!editable) {\n message +=\n 'Your profile <' +\n utils.escapeForXML(doc.uri) +\n '> is not remotely editable.'\n } else {\n profile = doc\n break\n }\n }\n }\n\n /*\n if (!profile) {\n say(\n message + '\\nI couldn\\'t find your editable personal profile document.'\n )\n } else {\n say('Editing your profile ' + profile + '.')\n editable = outliner.UserInput.sparqler.editable(profile.uri, kb)\n }\n */\n\n if (thisIsYou) {\n // This is about me\n // pass... @@\n } else {\n // This is about someone else\n // My relationship with this person\n\n const cme = kb.canon(me)\n incoming = kb.whether(s, knows, cme)\n outgoing = false\n const outgoingSt = kb.statementsMatching(cme, knows, s)\n if (outgoingSt.length) {\n outgoing = true\n if (!profile) profile = outgoingSt[0].why\n }\n } // About someone else\n } // me is defined\n // End of you and s\n\n const shouldShowHeaderAddFriendAction = (mode: ViewerMode) => {\n return mode === 'authenticated' && !thisIsYou && !outgoing\n }\n\n const canEditOwnedProfile = viewerMode === 'owner' && editable\n const canManageRelationship = viewerMode === 'authenticated' && !thisIsYou && editable && Boolean(profile)\n const canModifyFriendsTab = canEditOwnedProfile\n\n let headerControls: HeaderControls = {\n canEdit: canEditOwnedProfile,\n viewerMode,\n showAddFriendAction: shouldShowHeaderAddFriendAction(viewerMode)\n }\n\n const header = createHeaderSection(context, s, headerControls, {\n friendCount: uniqueFriends.length,\n mutualFriendCount,\n onSelectFriends: function () {\n setActivePanel('all-friends')\n },\n onSelectMutual: typeof mutualFriendCount === 'number'\n ? function () {\n setActivePanel('mutual')\n }\n : undefined\n }, function () {\n return selectProfileData(context, s)\n })\n header.classList.add('social-pane__header-section', 'flex-column')\n socialPane.prepend(header)\n\n // div.appendChild(dom.createTextNode(plural(friends.length, 'acquaintance') +'. '))\n\n // ///////////////////////////////////////////// Main block\n //\n // Should: Find the intersection and difference sets\n\n const friendDetailsByUri = new Map<string, FriendDetails>()\n\n const hydrateFriendDetailsCache = function (friendNodes: NamedNode[]) {\n const nextCache = new Map<string, FriendDetails>()\n\n friendNodes.forEach(friendNode => {\n if (!friendNode?.value || friendNode.value === s.value) return\n nextCache.set(friendNode.value, toFriendDetails(kb, friendNode))\n })\n\n friendDetailsByUri.clear()\n nextCache.forEach((value, key) => {\n friendDetailsByUri.set(key, value)\n })\n }\n\n hydrateFriendDetailsCache(uniqueFriends)\n\n const renderSupportingInfo: FriendRowRenderers['renderSupportingInfo'] = function (target: NamedNode, renderDom: HTMLDocument) {\n const friend = friendDetailsByUri.get(target.value) || toFriendDetails(kb, target)\n friendDetailsByUri.set(target.value, friend)\n\n const container = renderDom.createElement('div')\n const jobAndOrganization = [friend.jobTitle, friend.organization].filter(Boolean).join(' | ')\n if (jobAndOrganization) {\n const jobLine = container.appendChild(renderDom.createElement('div'))\n jobLine.className = 'social-friend-job-org'\n jobLine.textContent = jobAndOrganization\n }\n\n if (friend.location) {\n const locationLine = container.appendChild(renderDom.createElement('div'))\n locationLine.className = 'social-friend-location'\n locationLine.innerHTML = `${locationIcon} ${friend.location}`\n }\n\n if (!container.childNodes.length) return null\n\n return container\n }\n\n const renderNameSuffix: FriendRowRenderers['renderNameSuffix'] = function (target: NamedNode, renderDom: HTMLDocument) {\n const friend = friendDetailsByUri.get(target.value) || toFriendDetails(kb, target)\n friendDetailsByUri.set(target.value, friend)\n const pronouns = friend.pronouns\n if (!pronouns) return null\n\n const suffix = renderDom.createElement('span')\n suffix.className = 'social-friend-pronouns'\n suffix.textContent = `(${pronouns})`\n return suffix\n }\n\n let mutualSection = me && !thisIsYou\n ? createMutualSection({\n dom,\n subject: s,\n familiar,\n me,\n meUri,\n incoming,\n outgoing,\n editable: canManageRelationship,\n profile,\n knows,\n mutualConnections,\n link,\n text,\n buildCheckboxForm,\n renderSupportingInfo,\n renderNameSuffix\n })\n : {\n section: dom.createElement('section'),\n content: dom.createElement('div'),\n refreshMutualFriends: function () {}\n }\n\n let mutualFriends = mutualSection.section\n let mutualContent = mutualSection.content\n if (!mutualFriends.className) {\n mutualFriends.className = 'social-pane__mutual-friends social-primary__panel'\n mutualFriends.id = 'social-panel-mutual'\n mutualFriends.setAttribute('role', 'tabpanel')\n mutualFriends.setAttribute('aria-labelledby', 'social-tab-mutual')\n mutualContent.className = 'social-main social-main--mutual'\n mutualFriends.appendChild(mutualContent)\n }\n primary.appendChild(mutualFriends)\n\n const allFriendsSection = createAllFriendsSection({\n dom,\n subject: s,\n profile: canModifyFriendsTab ? profile : null,\n editable: canModifyFriendsTab,\n renderSupportingInfo,\n renderNameSuffix\n })\n\n const allFriends = allFriendsSection.section\n const friendsList = allFriendsSection.friendsList\n primary.appendChild(allFriends)\n\n let requestsTriage: FriendshipTriage = triageFriends(kb, s)\n const requestsSection = createRequestsSection({\n dom,\n triage: requestsTriage,\n renderSupportingInfo,\n renderNameSuffix\n })\n const requestsPanel = requestsSection.section\n primary.appendChild(requestsPanel)\n\n const requestsTab = tabs.appendChild(dom.createElement('button'))\n requestsTab.className = 'social-primary__tab'\n requestsTab.type = 'button'\n requestsTab.id = 'social-tab-requests'\n requestsTab.textContent = 'Requests'\n requestsTab.setAttribute('role', 'tab')\n requestsTab.setAttribute('aria-controls', 'social-panel-requests')\n requestsTab.setAttribute('aria-selected', 'false')\n requestsTab.tabIndex = -1\n\n type SocialPanel = 'mutual' | 'all-friends' | 'requests'\n let activePanel: SocialPanel = 'all-friends'\n let showRequestsTab = viewerMode === 'owner'\n\n const setActivePanel = function (panel: SocialPanel) {\n activePanel = panel\n const showMutual = panel === 'mutual'\n const showAllFriends = panel === 'all-friends'\n const showRequests = showRequestsTab && panel === 'requests'\n mutualTab.classList.toggle('social-primary__tab--active', showMutual)\n mutualTab.setAttribute('aria-selected', String(showMutual))\n mutualTab.tabIndex = showMutual ? 0 : -1\n\n allFriendsTab.classList.toggle('social-primary__tab--active', showAllFriends)\n allFriendsTab.setAttribute('aria-selected', String(showAllFriends))\n allFriendsTab.tabIndex = showAllFriends ? 0 : -1\n\n requestsTab.classList.toggle('social-primary__tab--active', showRequests)\n requestsTab.setAttribute('aria-selected', String(showRequests))\n requestsTab.tabIndex = showRequests ? 0 : -1\n\n mutualFriends.classList.toggle('social-primary__panel--active', showMutual)\n mutualFriends.setAttribute('aria-hidden', String(!showMutual))\n\n allFriends.classList.toggle('social-primary__panel--active', showAllFriends)\n allFriends.setAttribute('aria-hidden', String(!showAllFriends))\n\n requestsPanel.classList.toggle('social-primary__panel--active', showRequests)\n requestsPanel.setAttribute('aria-hidden', String(!showRequests))\n requestsPanel.hidden = !showRequestsTab || !showRequests\n }\n const rebuildMutualSection = function () {\n if (!me || thisIsYou) return\n\n const cme = kb.canon(me)\n incoming = kb.whether(s, knows, cme)\n\n const outgoingStatements = kb.statementsMatching(cme, knows, s)\n outgoing = outgoingStatements.length > 0\n\n const nextMutualSection = createMutualSection({\n dom,\n subject: s,\n familiar,\n me,\n meUri,\n incoming,\n outgoing,\n editable: canManageRelationship,\n profile,\n knows,\n mutualConnections,\n link,\n text,\n buildCheckboxForm,\n renderSupportingInfo,\n renderNameSuffix\n })\n\n mutualFriends.replaceWith(nextMutualSection.section)\n mutualSection = nextMutualSection\n mutualFriends = nextMutualSection.section\n mutualContent = nextMutualSection.content\n }\n\n refreshRelationshipUi = function () {\n rebuildMutualSection()\n headerControls = {\n ...headerControls,\n showAddFriendAction: shouldShowHeaderAddFriendAction(headerControls.viewerMode)\n }\n ;(header as SocialHeaderElement).refreshSocialHeader?.(headerControls)\n requestsTriage = triageFriends(kb, s)\n requestsSection.refreshRequests(requestsTriage)\n setActivePanel(activePanel)\n }\n\n setActivePanel('all-friends')\n\n const applyViewerMode = function (mode: ViewerMode) {\n const showMutualTab = mode === 'authenticated' && !thisIsYou\n showRequestsTab = mode === 'owner'\n mutualTab.hidden = !showMutualTab\n requestsTab.hidden = !showRequestsTab\n if (!showRequestsTab && activePanel === 'requests') {\n setActivePanel('all-friends')\n return\n }\n setActivePanel('all-friends')\n }\n\n mutualTab.addEventListener('click', function () {\n setActivePanel('mutual')\n })\n\n allFriendsTab.addEventListener('click', function () {\n setActivePanel('all-friends')\n })\n\n requestsTab.addEventListener('click', function () {\n setActivePanel('requests')\n })\n\n const refreshFriendsList = function () {\n const refresh = (friendsList as HTMLTableElement & { refresh?: () => void }).refresh\n if (typeof refresh !== 'function') return\n\n refresh.call(friendsList)\n }\n\n const refreshMutualFriends = function () {\n mutualSection.refreshMutualFriends()\n }\n\n ;(async () => {\n try {\n for await (const streamedFriends of streamFriends(context, s)) {\n friendDetailsByUri.clear()\n streamedFriends.forEach(friend => {\n friendDetailsByUri.set(friend.url, friend)\n })\n refreshFriendsList()\n refreshMutualFriends()\n }\n } catch {\n // Keep the initial snapshot if async friend loading fails.\n }\n })()\n\n ;(async () => {\n try {\n requestsTriage = await loadFriendshipTriage(context, s)\n requestsSection.refreshRequests(requestsTriage)\n refreshFriendsList()\n refreshMutualFriends()\n } catch {\n // Keep the initial requests snapshot if additional loading fails.\n }\n })()\n\n // Older triage logic is preserved below as a reusable data helper.\n\n applyViewerMode('anonymous')\n\n authn.checkUser()\n .then(webId => {\n const confirmedViewerMode = getViewerMode(s, webId)\n applyViewerMode(confirmedViewerMode)\n const confirmedCanEditOwnedProfile = confirmedViewerMode === 'owner' && editable\n headerControls = {\n ...headerControls,\n canEdit: confirmedCanEditOwnedProfile,\n viewerMode: confirmedViewerMode,\n showAddFriendAction: shouldShowHeaderAddFriendAction(confirmedViewerMode)\n }\n ;(header as SocialHeaderElement).refreshSocialHeader?.(headerControls)\n })\n .catch(() => {\n applyViewerMode('anonymous')\n headerControls = {\n ...headerControls,\n canEdit: false,\n viewerMode: 'anonymous',\n showAddFriendAction: false\n }\n ;(header as SocialHeaderElement).refreshSocialHeader?.(headerControls)\n })\n\n return socialPane\n } // render()\n} //\n// ends\n// ***************** Social Pane Selectors **********/\n/* Should move to another file, but will leave for now */\n/* Will create a social pane folder or maybe repo later */\n\nconst FRIEND_BATCH_SIZE = 3\n\nexport interface ProfileDetails {\n url: string\n imageUrl?: string\n name?: string\n nickname?: string\n jobTitle?: string\n organization?: string\n location?: string | null\n pronouns?: string\n birthdate?: string\n}\n\nexport interface FriendDetails extends ProfileDetails {\n subjectNode: NamedNode\n}\n\n/* pronounsAsText and formatLocation were copied from HeadingSection selectors */\nexport function pronounsAsText (store: LiveStore, subject: NamedNode): string {\n let pronouns = store.anyJS(subject, ns.solid('preferredSubjectPronoun')) || ''\n if (pronouns) {\n const them = store.anyJS(subject, ns.solid('preferredObjectPronoun'))\n if (them) {\n pronouns += '/' + them\n }\n }\n return pronouns || ''\n}\n\nfunction formatLocation (countryName: string | void, locality: string | void) {\n return countryName && locality\n ? `${locality}, ${countryName}`\n : countryName || locality || null\n}\n\nfunction toFriendDetails (store: any, friendNode: NamedNode): FriendDetails {\n const name =\n store.anyValue(friendNode, ns.vcard('fn')) ||\n store.anyValue(friendNode, ns.foaf('name')) ||\n null\n const nickname =\n store.anyValue(friendNode, ns.vcard('nickname')) ||\n store.anyValue(friendNode, ns.foaf('nick')) ||\n null\n const dateOfBirth = store.anyValue(friendNode, ns.vcard('bday')) || null\n const imageSrc = widgets.findImage(friendNode)\n const jobTitle = store.anyValue(friendNode, ns.vcard('role')) || null\n const orgName = store.anyValue(friendNode, ns.vcard('organization-name')) || null\n const primaryAddressEntryNode = store.any(friendNode, ns.vcard('hasAddress')) as NamedNode | null\n const address: NamedNode | null = primaryAddressEntryNode || null\n const countryName =\n address != null\n ? store.anyValue(address, ns.vcard('country-name'))\n : null\n const locality =\n address != null\n ? store.anyValue(address, ns.vcard('locality'))\n : null\n\n const location = formatLocation(countryName, locality)\n const pronouns = pronounsAsText(store, friendNode)\n\n return {\n url: friendNode.value,\n imageUrl: imageSrc,\n name,\n nickname,\n jobTitle,\n organization: orgName,\n birthdate: dateOfBirth,\n location,\n pronouns,\n subjectNode: friendNode\n }\n}\n\nexport async function * streamFriends (\n context: DataBrowserContext,\n subject: NamedNode,\n batchSize = FRIEND_BATCH_SIZE\n): AsyncGenerator<FriendDetails[], void, void> {\n const store = context.session.store\n const fetcher = (store as any)?.fetcher\n\n if (fetcher && typeof fetcher.load === 'function') {\n try {\n await fetcher.load(subject.doc())\n } catch {\n // Continue with whatever is already in the store.\n }\n }\n\n const seen = new Set<string>()\n const friendNodes = store.each(subject, ns.foaf('knows'), null, subject.doc())\n const uniqueFriendNodes: NamedNode[] = []\n\n for (const friendNode of friendNodes) {\n const key = friendNode?.value\n if (!key || seen.has(key) || subject.value === key) continue\n seen.add(key)\n uniqueFriendNodes.push(friendNode as NamedNode)\n }\n\n const friends: FriendDetails[] = []\n\n for (const friendNode of uniqueFriendNodes) {\n if (fetcher && typeof fetcher.load === 'function') {\n try {\n await fetcher.load(friendNode.doc())\n } catch {\n // Keep partial friend data when one linked document fails to load.\n }\n }\n\n friends.push(toFriendDetails(store, friendNode))\n\n if (friends.length % batchSize === 0) {\n yield [...friends]\n }\n }\n\n if (friends.length > 0 && friends.length % batchSize !== 0) {\n yield [...friends]\n }\n}\n\nexport async function extractFriends (context: DataBrowserContext, subject: NamedNode): Promise<FriendDetails[] | null> {\n let latestFriends: FriendDetails[] | null = null\n\n for await (const friends of streamFriends(context, subject)) {\n latestFriends = friends\n }\n\n return latestFriends\n}\n\nexport function selectProfileData (context: DataBrowserContext, subject: NamedNode): ProfileDetails | null {\n const store = context.session.store\n\n const name =\n store.anyValue(subject, ns.vcard('fn')) ||\n store.anyValue(subject, ns.foaf('name')) ||\n undefined\n const nickname =\n store.anyValue(subject, ns.vcard('nickname')) ||\n store.anyValue(subject, ns.foaf('nick')) ||\n undefined\n const dateOfBirth = store.anyValue(subject, ns.vcard('bday')) || undefined\n const imageSrc = widgets.findImage(subject)\n const jobTitle = store.anyValue(subject, ns.vcard('role')) || undefined\n const orgName = store.anyValue(subject, ns.vcard('organization-name')) || undefined\n const primaryAddressEntryNode = store.any(subject, ns.vcard('hasAddress')) as NamedNode | null\n const address: NamedNode | null = primaryAddressEntryNode || null\n const countryName =\n address != null\n ? store.anyValue(address, ns.vcard('country-name'))\n : undefined\n const locality =\n address != null\n ? store.anyValue(address, ns.vcard('locality'))\n : undefined\n\n const location = formatLocation(countryName, locality)\n const pronouns = pronounsAsText(store, subject)\n return {\n url: subject.value,\n imageUrl: imageSrc,\n name,\n nickname,\n jobTitle,\n organization: orgName,\n birthdate: dateOfBirth,\n location,\n pronouns\n }\n}\n\nexport type { ViewerMode } from './socialSections'\n\nfunction getViewerMode (subject: NamedNode, currentUser: unknown = authn.currentUser()): ViewerMode {\n const currentUserUri =\n typeof currentUser === 'string'\n ? currentUser\n : typeof currentUser === 'object' && currentUser !== null\n ? ((currentUser as { value?: string, uri?: string }).value ||\n (currentUser as { value?: string, uri?: string }).uri ||\n null)\n : null\n let mode: ViewerMode = 'anonymous'\n if (currentUserUri === subject.value) mode = 'owner'\n if (currentUserUri && currentUserUri !== subject.value) mode = 'authenticated'\n return mode\n}\n"],"mappings":"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"}