solid-panes 4.4.2-2 → 4.4.2-3

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 (386) 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/user.cjs.js +2 -0
  9. package/dist/_virtual/~icons/lucide/user.cjs.js.map +1 -0
  10. package/dist/_virtual/~icons/lucide/user.esm.js +11 -0
  11. package/dist/_virtual/~icons/lucide/user.esm.js.map +1 -0
  12. package/dist/audio/audioPane.cjs.js +2 -0
  13. package/dist/audio/audioPane.cjs.js.map +1 -0
  14. package/dist/audio/audioPane.esm.js +96 -0
  15. package/dist/audio/audioPane.esm.js.map +1 -0
  16. package/dist/classInstancePane.cjs.js +2 -0
  17. package/dist/classInstancePane.cjs.js.map +1 -0
  18. package/dist/classInstancePane.esm.js +50 -0
  19. package/dist/classInstancePane.esm.js.map +1 -0
  20. package/dist/components/header/Header.d.ts +8 -0
  21. package/dist/components/header/Header.d.ts.map +1 -0
  22. package/dist/components/header/index.d.ts +4 -0
  23. package/dist/components/header/index.d.ts.map +1 -0
  24. package/dist/dashboard/basicPreferences.cjs.js +2 -0
  25. package/dist/dashboard/basicPreferences.cjs.js.map +1 -0
  26. package/dist/dashboard/basicPreferences.d.ts +1 -1
  27. package/dist/dashboard/basicPreferences.esm.js +70 -0
  28. package/dist/dashboard/basicPreferences.esm.js.map +1 -0
  29. package/dist/dashboard/dashboardPane.d.ts +1 -1
  30. package/dist/dashboard/homepage.d.ts +1 -1
  31. package/dist/dashboard/ontologyData.cjs.js +37 -0
  32. package/dist/dashboard/ontologyData.cjs.js.map +1 -0
  33. package/dist/dashboard/ontologyData.esm.js +6 -0
  34. package/dist/dashboard/ontologyData.esm.js.map +1 -0
  35. package/dist/dashboard/preferencesFormText.cjs.js +20 -0
  36. package/dist/dashboard/preferencesFormText.cjs.js.map +1 -0
  37. package/dist/dashboard/preferencesFormText.esm.js +6 -0
  38. package/dist/dashboard/preferencesFormText.esm.js.map +1 -0
  39. package/dist/dataContentPane.d.ts +2 -3
  40. package/dist/dataContentPane2.cjs.js +2 -0
  41. package/dist/dataContentPane2.cjs.js.map +1 -0
  42. package/dist/dataContentPane2.esm.js +109 -0
  43. package/dist/dataContentPane2.esm.js.map +1 -0
  44. package/dist/defaultPane.d.ts +2 -3
  45. package/dist/defaultPane2.cjs.js +2 -0
  46. package/dist/defaultPane2.cjs.js.map +1 -0
  47. package/dist/defaultPane2.esm.js +41 -0
  48. package/dist/defaultPane2.esm.js.map +1 -0
  49. package/dist/dev.d.ts +10 -0
  50. package/dist/dev.d.ts.map +1 -0
  51. package/dist/dokieli/dokieliPane.cjs.js +2 -0
  52. package/dist/dokieli/dokieliPane.cjs.js.map +1 -0
  53. package/dist/dokieli/dokieliPane.esm.js +39 -0
  54. package/dist/dokieli/dokieliPane.esm.js.map +1 -0
  55. package/dist/dokieli/{new.js → new.cjs.js} +4 -10
  56. package/dist/dokieli/new.cjs.js.map +1 -0
  57. package/dist/dokieli/new.esm.js +6 -0
  58. package/dist/dokieli/new.esm.js.map +1 -0
  59. package/dist/form/pane.cjs.js +4 -0
  60. package/dist/form/pane.cjs.js.map +1 -0
  61. package/dist/form/pane.d.ts +1 -2
  62. package/dist/form/pane.esm.js +121 -0
  63. package/dist/form/pane.esm.js.map +1 -0
  64. package/dist/home/homePane.cjs.js +2 -0
  65. package/dist/home/homePane.cjs.js.map +1 -0
  66. package/dist/home/homePane.d.ts +1 -1
  67. package/dist/home/homePane.esm.js +35 -0
  68. package/dist/home/homePane.esm.js.map +1 -0
  69. package/dist/humanReadablePane.d.ts +2 -3
  70. package/dist/humanReadablePane2.cjs.js +2 -0
  71. package/dist/humanReadablePane2.cjs.js.map +1 -0
  72. package/dist/humanReadablePane2.esm.js +123 -0
  73. package/dist/humanReadablePane2.esm.js.map +1 -0
  74. package/dist/icons/dashboard.cjs.js +2 -0
  75. package/dist/icons/dashboard.cjs.js.map +1 -0
  76. package/dist/icons/dashboard.esm.js +6 -0
  77. package/dist/icons/dashboard.esm.js.map +1 -0
  78. package/dist/icons/folder.cjs.js +2 -0
  79. package/dist/icons/folder.cjs.js.map +1 -0
  80. package/dist/icons/folder.esm.js +6 -0
  81. package/dist/icons/folder.esm.js.map +1 -0
  82. package/dist/icons/friends.cjs.js +2 -0
  83. package/dist/icons/friends.cjs.js.map +1 -0
  84. package/dist/icons/friends.esm.js +6 -0
  85. package/dist/icons/friends.esm.js.map +1 -0
  86. package/dist/icons/iconHelper.cjs.js +2 -0
  87. package/dist/icons/iconHelper.cjs.js.map +1 -0
  88. package/dist/icons/iconHelper.esm.js +17 -0
  89. package/dist/icons/iconHelper.esm.js.map +1 -0
  90. package/dist/icons/{menu.svg → menu.cjs.js} +3 -2
  91. package/dist/icons/menu.cjs.js.map +1 -0
  92. package/dist/icons/menu.esm.js +6 -0
  93. package/dist/icons/menu.esm.js.map +1 -0
  94. package/dist/icons/person.cjs.js +2 -0
  95. package/dist/icons/person.cjs.js.map +1 -0
  96. package/dist/icons/person.esm.js +6 -0
  97. package/dist/icons/person.esm.js.map +1 -0
  98. package/dist/imagePane.d.ts +2 -3
  99. package/dist/imagePane2.cjs.js +2 -0
  100. package/dist/imagePane2.cjs.js.map +1 -0
  101. package/dist/imagePane2.esm.js +32 -0
  102. package/dist/imagePane2.esm.js.map +1 -0
  103. package/dist/index.cjs.js +2 -0
  104. package/dist/index.cjs.js.map +1 -0
  105. package/dist/index.d.ts +4 -4
  106. package/dist/index.esm.js +26 -0
  107. package/dist/index.esm.js.map +1 -0
  108. package/dist/internal/internalPane.d.ts +1 -2
  109. package/dist/internal/internalPane2.cjs.js +2 -0
  110. package/dist/internal/internalPane2.cjs.js.map +1 -0
  111. package/dist/internal/internalPane2.esm.js +104 -0
  112. package/dist/internal/internalPane2.esm.js.map +1 -0
  113. package/dist/mainPage/footer.cjs.js +2 -0
  114. package/dist/mainPage/footer.cjs.js.map +1 -0
  115. package/dist/mainPage/footer.d.ts +1 -3
  116. package/dist/mainPage/footer.esm.js +18 -0
  117. package/dist/mainPage/footer.esm.js.map +1 -0
  118. package/dist/mainPage/header.cjs.js +2 -0
  119. package/dist/mainPage/header.cjs.js.map +1 -0
  120. package/dist/mainPage/header.d.ts +1 -15
  121. package/dist/mainPage/header.d.ts.map +1 -1
  122. package/dist/mainPage/header.esm.js +24 -0
  123. package/dist/mainPage/header.esm.js.map +1 -0
  124. package/dist/mainPage/index.cjs.js +2 -0
  125. package/dist/mainPage/index.cjs.js.map +1 -0
  126. package/dist/mainPage/index.d.ts +3 -7
  127. package/dist/mainPage/index.d.ts.map +1 -1
  128. package/dist/mainPage/index.esm.js +38 -0
  129. package/dist/mainPage/index.esm.js.map +1 -0
  130. package/dist/mainPage/menu.d.ts +1 -2
  131. package/dist/mainPage/menu2.cjs.js +2 -0
  132. package/dist/mainPage/menu2.cjs.js.map +1 -0
  133. package/dist/mainPage/menu2.esm.js +184 -0
  134. package/dist/mainPage/menu2.esm.js.map +1 -0
  135. package/dist/n3Pane.d.ts +2 -3
  136. package/dist/n3Pane2.cjs.js +3 -0
  137. package/dist/n3Pane2.cjs.js.map +1 -0
  138. package/dist/n3Pane2.esm.js +52 -0
  139. package/dist/n3Pane2.esm.js.map +1 -0
  140. package/dist/outline/context.cjs.js +2 -0
  141. package/dist/outline/context.cjs.js.map +1 -0
  142. package/dist/outline/context.d.ts +3 -3
  143. package/dist/outline/context.esm.js +18 -0
  144. package/dist/outline/context.esm.js.map +1 -0
  145. package/dist/outline/manager2.cjs.js +3 -0
  146. package/dist/outline/manager2.cjs.js.map +1 -0
  147. package/dist/outline/manager2.esm.js +875 -0
  148. package/dist/outline/manager2.esm.js.map +1 -0
  149. package/dist/outline/outlineIcons.cjs.js +2 -0
  150. package/dist/outline/outlineIcons.cjs.js.map +1 -0
  151. package/dist/outline/outlineIcons.esm.js +10 -0
  152. package/dist/outline/outlineIcons.esm.js.map +1 -0
  153. package/dist/outline/propertyViews.cjs.js +2 -0
  154. package/dist/outline/propertyViews.cjs.js.map +1 -0
  155. package/dist/outline/propertyViews.esm.js +19 -0
  156. package/dist/outline/propertyViews.esm.js.map +1 -0
  157. package/dist/outline/queryByExample.cjs.js +2 -0
  158. package/dist/outline/queryByExample.cjs.js.map +1 -0
  159. package/dist/outline/queryByExample.esm.js +25 -0
  160. package/dist/outline/queryByExample.esm.js.map +1 -0
  161. package/dist/outline/userInput.cjs.js +61 -0
  162. package/dist/outline/userInput.cjs.js.map +1 -0
  163. package/dist/outline/userInput.esm.js +784 -0
  164. package/dist/outline/userInput.esm.js.map +1 -0
  165. package/dist/outline/viewAsImage.cjs.js +2 -0
  166. package/dist/outline/viewAsImage.cjs.js.map +1 -0
  167. package/dist/outline/viewAsImage.esm.js +10 -0
  168. package/dist/outline/viewAsImage.esm.js.map +1 -0
  169. package/dist/outline/viewAsMbox.cjs.js +2 -0
  170. package/dist/outline/viewAsMbox.cjs.js.map +1 -0
  171. package/dist/outline/viewAsMbox.esm.js +9 -0
  172. package/dist/outline/viewAsMbox.esm.js.map +1 -0
  173. package/dist/pad/padPane.d.ts +1 -2
  174. package/dist/pad/padPane2.cjs.js +2 -0
  175. package/dist/pad/padPane2.cjs.js.map +1 -0
  176. package/dist/pad/padPane2.esm.js +172 -0
  177. package/dist/pad/padPane2.esm.js.map +1 -0
  178. package/dist/playlist/playlistPane.cjs.js +2 -0
  179. package/dist/playlist/playlistPane.cjs.js.map +1 -0
  180. package/dist/playlist/playlistPane.esm.js +49 -0
  181. package/dist/playlist/playlistPane.esm.js.map +1 -0
  182. package/dist/profileUtils/ownerProfile.cjs.js +2 -0
  183. package/dist/profileUtils/ownerProfile.cjs.js.map +1 -0
  184. package/dist/profileUtils/ownerProfile.d.ts +1 -1
  185. package/dist/profileUtils/ownerProfile.esm.js +50 -0
  186. package/dist/profileUtils/ownerProfile.esm.js.map +1 -0
  187. package/dist/registerPanes.cjs.js +2 -0
  188. package/dist/registerPanes.cjs.js.map +1 -0
  189. package/dist/registerPanes.esm.js +45 -0
  190. package/dist/registerPanes.esm.js.map +1 -0
  191. package/dist/schedule/formsForSchedule.cjs.js +117 -0
  192. package/dist/schedule/formsForSchedule.cjs.js.map +1 -0
  193. package/dist/schedule/formsForSchedule.esm.js +6 -0
  194. package/dist/schedule/formsForSchedule.esm.js.map +1 -0
  195. package/dist/schedule/schedulePane.d.ts +2 -4
  196. package/dist/schedule/schedulePane2.cjs.js +8 -0
  197. package/dist/schedule/schedulePane2.cjs.js.map +1 -0
  198. package/dist/schedule/schedulePane2.esm.js +384 -0
  199. package/dist/schedule/schedulePane2.esm.js.map +1 -0
  200. package/dist/sharing/sharingPane.cjs.js +2 -0
  201. package/dist/sharing/sharingPane.cjs.js.map +1 -0
  202. package/dist/sharing/sharingPane.esm.js +22 -0
  203. package/dist/sharing/sharingPane.esm.js.map +1 -0
  204. package/dist/slideshow/slideshowPane.cjs.js +2 -0
  205. package/dist/slideshow/slideshowPane.cjs.js.map +1 -0
  206. package/dist/slideshow/slideshowPane.esm.js +46 -0
  207. package/dist/slideshow/slideshowPane.esm.js.map +1 -0
  208. package/dist/social/editProfileDetails.cjs.js +2 -0
  209. package/dist/social/editProfileDetails.cjs.js.map +1 -0
  210. package/dist/social/editProfileDetails.d.ts +1 -2
  211. package/dist/social/editProfileDetails.esm.js +10 -0
  212. package/dist/social/editProfileDetails.esm.js.map +1 -0
  213. package/dist/social/icons.cjs.js +82 -0
  214. package/dist/social/icons.cjs.js.map +1 -0
  215. package/dist/social/{icons.js → icons.esm.js} +12 -18
  216. package/dist/social/icons.esm.js.map +1 -0
  217. package/dist/social/socialPane.d.ts +2 -3
  218. package/dist/social/socialPane2.cjs.js +6 -0
  219. package/dist/social/socialPane2.cjs.js.map +1 -0
  220. package/dist/social/socialPane2.esm.js +326 -0
  221. package/dist/social/socialPane2.esm.js.map +1 -0
  222. package/dist/social/socialSections.cjs.js +2 -0
  223. package/dist/social/socialSections.cjs.js.map +1 -0
  224. package/dist/social/socialSections.d.ts +2 -2
  225. package/dist/social/socialSections.esm.js +221 -0
  226. package/dist/social/socialSections.esm.js.map +1 -0
  227. package/dist/social/triage.cjs.js +2 -0
  228. package/dist/social/triage.cjs.js.map +1 -0
  229. package/dist/social/triage.d.ts +2 -2
  230. package/dist/social/triage.esm.js +44 -0
  231. package/dist/social/triage.esm.js.map +1 -0
  232. package/dist/tabbed/tabbedPane.cjs.js +2 -0
  233. package/dist/tabbed/tabbedPane.cjs.js.map +1 -0
  234. package/dist/tabbed/tabbedPane.d.ts +1 -1
  235. package/dist/tabbed/tabbedPane.esm.js +38 -0
  236. package/dist/tabbed/tabbedPane.esm.js.map +1 -0
  237. package/dist/tableViewPane.cjs.js +2 -0
  238. package/dist/tableViewPane.cjs.js.map +1 -0
  239. package/dist/tableViewPane.esm.js +20 -0
  240. package/dist/tableViewPane.esm.js.map +1 -0
  241. package/dist/transaction/pane.cjs.js +8 -0
  242. package/dist/transaction/pane.cjs.js.map +1 -0
  243. package/dist/transaction/pane.esm.js +212 -0
  244. package/dist/transaction/pane.esm.js.map +1 -0
  245. package/dist/transaction/period.cjs.js +4 -0
  246. package/dist/transaction/period.cjs.js.map +1 -0
  247. package/dist/transaction/period.esm.js +126 -0
  248. package/dist/transaction/period.esm.js.map +1 -0
  249. package/dist/trip/tripPane.cjs.js +2 -0
  250. package/dist/trip/tripPane.cjs.js.map +1 -0
  251. package/dist/trip/tripPane.esm.js +85 -0
  252. package/dist/trip/tripPane.esm.js.map +1 -0
  253. package/dist/trustedApplications/trustedApplications.dom.cjs.js +2 -0
  254. package/dist/trustedApplications/trustedApplications.dom.cjs.js.map +1 -0
  255. package/dist/trustedApplications/trustedApplications.dom.d.ts +1 -1
  256. package/dist/trustedApplications/trustedApplications.dom.esm.js +108 -0
  257. package/dist/trustedApplications/trustedApplications.dom.esm.js.map +1 -0
  258. package/dist/trustedApplications/trustedApplications.utils.cjs.js +2 -0
  259. package/dist/trustedApplications/trustedApplications.utils.cjs.js.map +1 -0
  260. package/dist/trustedApplications/trustedApplications.utils.d.ts +1 -1
  261. package/dist/trustedApplications/trustedApplications.utils.esm.js +20 -0
  262. package/dist/trustedApplications/trustedApplications.utils.esm.js.map +1 -0
  263. package/dist/trustedApplications/trustedApplications.view.cjs.js +2 -0
  264. package/dist/trustedApplications/trustedApplications.view.cjs.js.map +1 -0
  265. package/dist/trustedApplications/trustedApplications.view.d.ts +1 -1
  266. package/dist/trustedApplications/trustedApplications.view.esm.js +41 -0
  267. package/dist/trustedApplications/trustedApplications.view.esm.js.map +1 -0
  268. package/dist/ui/pane.cjs.js +4 -0
  269. package/dist/ui/pane.cjs.js.map +1 -0
  270. package/dist/ui/pane.esm.js +56 -0
  271. package/dist/ui/pane.esm.js.map +1 -0
  272. package/dist/versionInfo.cjs.js +2 -0
  273. package/dist/versionInfo.cjs.js.map +1 -0
  274. package/dist/versionInfo.esm.js +40 -0
  275. package/dist/versionInfo.esm.js.map +1 -0
  276. package/dist/video/videoPane.cjs.js +2 -0
  277. package/dist/video/videoPane.cjs.js.map +1 -0
  278. package/dist/video/videoPane.esm.js +25 -0
  279. package/dist/video/videoPane.esm.js.map +1 -0
  280. package/package.json +35 -59
  281. package/dist/0314353e28ce6e5539af.svg +0 -9
  282. package/dist/04567ff683933c35c465.png +0 -0
  283. package/dist/10163fd9b5a0e00d63a0.png +0 -0
  284. package/dist/1234dcb2eec2e45f252b.png +0 -0
  285. package/dist/20899934157df4db56cb.png +0 -0
  286. package/dist/33760bf79f097f449da5.png +0 -0
  287. package/dist/4cceba29ab33b1ddd9bb.svg +0 -6
  288. package/dist/578d2b6ed32e7624164e.png +0 -0
  289. package/dist/5f62a5b2b7e99b9640c7.png +0 -0
  290. package/dist/6525766ecd288ec60129.png +0 -0
  291. package/dist/7800be6f6c4b5b0f4f20.png +0 -0
  292. package/dist/7b7538c6f6b317968009.svg +0 -9
  293. package/dist/92d03142abe6efc0b42d.svg +0 -6
  294. package/dist/976473cf5fe24d657d4b.png +0 -0
  295. package/dist/RDFXMLPane.css +0 -70
  296. package/dist/RDFXMLPane.js +0 -100
  297. package/dist/argument/argumentPane.js +0 -60
  298. package/dist/attach/attachPane.js +0 -393
  299. package/dist/audio/audioPane.js +0 -181
  300. package/dist/bda84f59e7216675a208.png +0 -0
  301. package/dist/cd68e8f3990ba8b2139e.png +0 -0
  302. package/dist/classInstancePane.js +0 -91
  303. package/dist/dashboard/basicPreferences.js +0 -147
  304. package/dist/dashboard/dashboardPane.js +0 -73
  305. package/dist/dashboard/homepage.js +0 -42
  306. package/dist/dataContentPane.css +0 -271
  307. package/dist/dataContentPane.js +0 -226
  308. package/dist/defaultPane.css +0 -97
  309. package/dist/defaultPane.js +0 -81
  310. package/dist/dokieli/dokieliPane.js +0 -74
  311. package/dist/e7074a7e2cb69e51cfd3.png +0 -0
  312. package/dist/f3772696fb7ee53c23d8.png +0 -0
  313. package/dist/form/formPane.css +0 -120
  314. package/dist/form/pane.js +0 -250
  315. package/dist/home/homePane.js +0 -74
  316. package/dist/humanReadablePane.css +0 -129
  317. package/dist/humanReadablePane.js +0 -243
  318. package/dist/icons/clock.svg +0 -7
  319. package/dist/icons/comment.svg +0 -6
  320. package/dist/icons/dashboard.svg +0 -9
  321. package/dist/icons/downArrow.svg +0 -6
  322. package/dist/icons/folder.svg +0 -6
  323. package/dist/icons/friends.svg +0 -9
  324. package/dist/icons/help.svg +0 -8
  325. package/dist/icons/iconHelper.js +0 -23
  326. package/dist/icons/person.svg +0 -6
  327. package/dist/icons/personInCircle.svg +0 -8
  328. package/dist/icons/sharing.svg +0 -10
  329. package/dist/icons/signOut.svg +0 -8
  330. package/dist/icons/signUp.svg +0 -9
  331. package/dist/icons/star.svg +0 -3
  332. package/dist/imagePane.css +0 -4
  333. package/dist/imagePane.js +0 -67
  334. package/dist/index.js +0 -123
  335. package/dist/internal/internalPane.css +0 -14
  336. package/dist/internal/internalPane.js +0 -183
  337. package/dist/mainPage/footer.js +0 -29
  338. package/dist/mainPage/header.js +0 -203
  339. package/dist/mainPage/index.js +0 -78
  340. package/dist/mainPage/menu.css +0 -243
  341. package/dist/mainPage/menu.js +0 -449
  342. package/dist/microblogPane/mbStyle.css +0 -267
  343. package/dist/microblogPane/microblogPane.js +0 -1031
  344. package/dist/n3Pane.css +0 -49
  345. package/dist/n3Pane.js +0 -88
  346. package/dist/outline/context.js +0 -21
  347. package/dist/outline/manager.css +0 -78
  348. package/dist/outline/manager.js +0 -2115
  349. package/dist/outline/outlineIcons.js +0 -126
  350. package/dist/outline/propertyViews.js +0 -43
  351. package/dist/outline/queryByExample.js +0 -285
  352. package/dist/outline/userInput.js +0 -1821
  353. package/dist/outline/viewAsImage.js +0 -14
  354. package/dist/outline/viewAsMbox.js +0 -21
  355. package/dist/pad/padPane.css +0 -40
  356. package/dist/pad/padPane.js +0 -421
  357. package/dist/playlist/playlistPane.js +0 -119
  358. package/dist/profileUtils/ownerProfile.js +0 -84
  359. package/dist/registerPanes.js +0 -145
  360. package/dist/schedule/schedulePane.css +0 -294
  361. package/dist/schedule/schedulePane.js +0 -1022
  362. package/dist/sharing/sharingPane.js +0 -48
  363. package/dist/slideshow/slideshowPane.js +0 -79
  364. package/dist/social/editProfileDetails.js +0 -362
  365. package/dist/social/socialPane.css +0 -1464
  366. package/dist/social/socialPane.js +0 -651
  367. package/dist/social/socialSections.js +0 -393
  368. package/dist/social/spinner.js +0 -13
  369. package/dist/social/triage.js +0 -79
  370. package/dist/solid-panes.js +0 -87502
  371. package/dist/solid-panes.js.map +0 -1
  372. package/dist/solid-panes.min.js +0 -3811
  373. package/dist/solid-panes.min.js.map +0 -1
  374. package/dist/styles/tabbedtab.css +0 -1066
  375. package/dist/styles/utilities.css +0 -5
  376. package/dist/tabbed/tabbedPane.js +0 -59
  377. package/dist/tableViewPane.js +0 -56
  378. package/dist/transaction/pane.js +0 -477
  379. package/dist/transaction/period.js +0 -323
  380. package/dist/trip/tripPane.js +0 -174
  381. package/dist/trustedApplications/trustedApplications.dom.js +0 -145
  382. package/dist/trustedApplications/trustedApplications.utils.js +0 -23
  383. package/dist/trustedApplications/trustedApplications.view.js +0 -55
  384. package/dist/ui/pane.js +0 -146
  385. package/dist/versionInfo.js +0 -41
  386. package/dist/video/videoPane.js +0 -42
package/README.md CHANGED
@@ -50,19 +50,20 @@ Volunteers are always welcome!
50
50
  - [Conventions](./Documentation/conventions.md)
51
51
 
52
52
  ## Development
53
- To get started, make sure you have Node.js installed (for instance
54
- through https://github.com/nvm-sh/nvm), and:
55
- 1. run
53
+
54
+ To get started, make sure you have Node.js installed (for instance through [nvm](https://github.com/nvm-sh/nvm)), then:
55
+
56
+ 1. Clone, install, and start the dev server:
57
+
56
58
  ```sh
57
59
  git clone https://github.com/solidos/solid-panes
58
60
  cd solid-panes
59
61
  npm install
60
- npm run start
62
+ npm start
61
63
  ```
62
- 2. a browser window should automatically open at http://localhost:9000, if for some reason it doesn't go ahead and manually navigate there.
63
- 3. Once you arrive at the Solid Pane Tester page, the `profile-pane` will be loaded by default. Proceed to edit `solid-panes/dev/loader.ts` and, at line 5, you should see `import Pane from 'profile-pane'`. Simply change `'profile-pane'` to your preferred pane/directory containing the pane of choice; for example, you could choose `'source-pane'` and bam, it will load that pane. For those who are new, you can go to the `solid-panes/src` directory and manually navigate through each individual folder. In most folders, you simply look for any file that has `pane` in the title. Copy and paste the `pane.js` file of your choice into the `solid-panes/dev/pane` folder, or you can import directly from the `src` directory. For example, importing from `'../src/dokieli/dokieliPane'` will work just fine. Each time you save `solid-panes/dev/loader.ts` while importing a different pane, your browser at `http://localhost:9000/` should automatically refresh. It's a good idea to keep the developer console open in your web browser to ensure panes are loading and rendering properly.
64
+ 2. Open http://localhost:5173 in your browser. You should see the pane development sandbox.
64
65
 
65
- 4. Another tip: to ensure you arrive at the proper destination, look at lines 48–53 in `solid-panes/dev/loader.ts`. You should see an event listener that is ready for a string. `renderPane('https://solidos.solidcommunity.net/Team/SolidOs%20team%20chat/index.ttl#this')` will be the default. Depending on the `pane.js` that you chose in the earlier import statements, the `renderPane` function determines the way you will see DOMContent inside of that particular pane. If you have created an `index.html` in your provider pod storage area, you could use `'https://yoursolidname.solidcommunity.net/profile/index.html'` inside of the `renderPane()` function parameters. You can edit the string manually in `solid-panes/dev/loader.ts`, or you can go to your developer console and type `renderPane('https://yoursolidname.solidcommunity.net/profile/index.html')` — just point to a part of your account that is congruent to the pane that you wish to import! :)
66
+ 3. You can change the `subject` in the sandbox to determine which pane gets rendered. For example, the default subject loads the `profile-pane`.
66
67
 
67
68
  ## Contributing panes
68
69
  When you created a pane, you can either add it as an npm dependency
@@ -80,8 +81,8 @@ pane. Any other pane which wants to deal with contacts can just use the pane wit
80
81
 
81
82
 
82
83
  ## Generative AI usage
83
- The SolidOS team is using GitHub Copilot integrated in Visual Studio Code.
84
- We have added comments in the code to make it explicit which parts are 100% written by AI.
84
+ The SolidOS team is using GitHub Copilot integrated in Visual Studio Code.
85
+ We have added comments in the code to make it explicit which parts are 100% written by AI.
85
86
 
86
87
  ### Prompt usage hitory:
87
88
  * Model Claude Opus 4.6: Initially solid-panes is loaded into an HTML shell form mashlib that looks like ... Also, an iFrame is rendered inside the `<div class="TabulatorOutline" id="DummyUUID">` for “isolated pane rendering”. Analyze the solid-panes code for what it uses from this HTML and suggest a new HTML structure which is mobile and accessibility friendly. Let's go ahead and make changes in this code as suggested to accommodate the new databrowser HTML.
@@ -121,4 +122,3 @@ I want the menu to have a tiny button on the bottom margin left with an arrow to
121
122
  * Raptor mini: Please always keep the footer at the bottom of the menu
122
123
 
123
124
  * GPT-5.4 Model: Add a compatibility shim in the form pane for mixed `ui:Group` plus field typing.
124
-
@@ -1,6 +1,5 @@
1
- import type { DataBrowserContext } from 'pane-registry';
2
- import type { NamedNode } from 'rdflib';
3
- import './RDFXMLPane.css';
1
+ import { DataBrowserContext } from '../node_modules/pane-registry';
2
+ import { NamedNode } from '../node_modules/rdflib';
4
3
  type RDFXMLPaneDefinition = {
5
4
  icon: string;
6
5
  name: string;
@@ -0,0 +1,3 @@
1
+ (function(){try{if(typeof document<`u`){var e=document.createElement(`style`);e.appendChild(document.createTextNode(`.rdfxml-pane{border-top:solid 2px var(--color-data-pane-border-top,black);border-left:solid 2px var(--color-data-pane-border-top,black);border-bottom:solid 2px var(--color-data-pane-border-side,#777);border-right:solid 2px var(--color-data-pane-border-side,#777);color:var(--color-text-brown,#440);box-sizing:border-box;padding:1rem}.rdfxml-pane__source{box-sizing:border-box;white-space:pre;max-width:100%;margin:0;font-family:monospace;font-size:120%;overflow-x:auto}.rdfxml-pane__line{grid-template-columns:var(--rdfxml-indent,0) minmax(max-content, auto);align-items:start;display:grid}.rdfxml-pane__line-indent{width:var(--rdfxml-indent,0);display:block}.rdfxml-pane__line-content{white-space:pre}.rdfxml-pane[data-layout=mobile] .rdfxml-pane__source{overflow-wrap:anywhere;word-break:break-word;white-space:normal}.rdfxml-pane[data-layout=mobile] .rdfxml-pane__line{grid-template-columns:var(--rdfxml-indent,0) minmax(0, 1fr)}.rdfxml-pane[data-layout=mobile] .rdfxml-pane__line-content{white-space:pre-wrap;overflow-wrap:anywhere;word-break:break-word;min-width:0}@media (width<=576px){.rdfxml-pane__source{overflow-wrap:anywhere;word-break:break-word;white-space:normal}.rdfxml-pane__line{grid-template-columns:var(--rdfxml-indent,0) minmax(0, 1fr)}.rdfxml-pane__line-content{white-space:pre-wrap;overflow-wrap:anywhere;word-break:break-word;min-width:0}}`)),document.head.appendChild(e)}}catch(e){console.error(`vite-plugin-css-injected-by-js`,e)}})();const e=require("./_virtual/_rolldown/runtime.cjs.js");;let t=require("solid-ui");t=e.__toESM(t);let n=require("rdflib");n=e.__toESM(n);var r=t.ns;function i(e){if(e.trim().length===0)return 0;let t=0;for(let n of e){if(n===` `){t+=1;continue}if(n===` `){t+=2;continue}break}return Math.max(t,2)}function a(e){return e.replace(/^[ \t]+/,``)}var o={icon:t.icons.originalIconBase+`22-text-xml4.png`,name:`RDFXML`,audience:[r.solid(`Developer`)],label:function(e,t){let n=t.session.store;if(`http://www.w3.org/2007/ont/link#ProtocolEvent`in n.findTypeURIs(e))return null;let r=n.statementsMatching(void 0,void 0,void 0,e).length;return r===0?null:`As RDF/XML (`+r+`)`},render:function(e,t){let r=t.dom,o=t.session.store;function s(e){let n=t.environment??{};e.dataset.layout=n.layout??`desktop`}let c=r.createElement(`div`);c.setAttribute(`class`,`rdfxml-pane`),s(c);let l=o.statementsMatching(void 0,void 0,void 0,e),u=n.Serializer(o);u.suggestNamespaces(o.namespaces),u.setBase(e.uri);let d=u.statementsToXML(l),f=r.createElement(`div`);return f.classList.add(`rdfxml-pane__source`),d.split(`
2
+ `).forEach(e=>{let t=r.createElement(`div`),n=r.createElement(`span`),o=r.createElement(`span`),s=i(e);t.classList.add(`rdfxml-pane__line`),t.style.setProperty(`--rdfxml-indent`,`${s}ch`),n.classList.add(`rdfxml-pane__line-indent`),n.setAttribute(`aria-hidden`,`true`),o.classList.add(`rdfxml-pane__line-content`),o.textContent=e.length>0?a(e):` `,t.appendChild(n),t.appendChild(o),f.appendChild(t)}),c.appendChild(f),c}};exports.RDFXMLPane=o;
3
+ //# sourceMappingURL=RDFXMLPane2.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RDFXMLPane2.cjs.js","names":[],"sources":["../src/RDFXMLPane.ts"],"sourcesContent":["/* RDF/XML content Pane\n **\n ** This pane shows the content of a particular RDF resource\n ** or at least the RDF semantics we attribute to that resource,\n ** in generated N3 syntax.\n */\n\nimport * as UI from 'solid-ui'\nimport * as $rdf from 'rdflib'\nimport type { DataBrowserContext, RenderEnvironment } from 'pane-registry'\nimport type { NamedNode, Statement } from 'rdflib'\nimport './RDFXMLPane.css'\n\nconst ns = UI.ns\n\ntype RDFXMLPaneDefinition = {\n icon: string\n name: string\n audience: NamedNode[]\n label: (subject: NamedNode, context: DataBrowserContext) => string | null\n render: (subject: NamedNode, context: DataBrowserContext) => HTMLDivElement\n}\n\nfunction leadingIndentWidth (line: string): number {\n if (line.trim().length === 0) {\n return 0\n }\n\n let width = 0\n for (const character of line) {\n if (character === ' ') {\n width += 1\n continue\n }\n if (character === '\\t') {\n width += 2\n continue\n }\n break\n }\n return Math.max(width, 2)\n}\n\nfunction trimLeadingIndent (line: string): string {\n return line.replace(/^[ \\t]+/, '')\n}\n\nexport const RDFXMLPane: RDFXMLPaneDefinition = {\n icon: UI.icons.originalIconBase + '22-text-xml4.png',\n\n name: 'RDFXML',\n\n audience: [ns.solid('Developer')],\n\n label: function (subject: NamedNode, context: DataBrowserContext): string | null {\n const store = context.session.store\n if (\n 'http://www.w3.org/2007/ont/link#ProtocolEvent' in\n store.findTypeURIs(subject)\n ) {\n return null\n }\n\n const n = store.statementsMatching(undefined, undefined, undefined, subject)\n .length\n if (n === 0) return null\n return 'As RDF/XML (' + n + ')'\n },\n\n render: function (\n subject: NamedNode,\n context: DataBrowserContext\n ): HTMLDivElement {\n const myDocument = context.dom\n const kb = context.session.store\n\n function applyEnvironmentAttributes (element: HTMLDivElement): void {\n const environment = (context.environment ?? {}) as Partial<RenderEnvironment>\n element.dataset.layout = environment.layout ?? 'desktop'\n }\n\n const div = myDocument.createElement('div')\n div.setAttribute('class', 'rdfxml-pane')\n applyEnvironmentAttributes(div)\n // Because of smushing etc, this will not be a copy of the original source\n // We could instead either fetch and re-parse the source,\n // or we could keep all the pre-smushed triples.\n const sts = kb.statementsMatching(\n undefined,\n undefined,\n undefined,\n subject\n ) as Statement[] // @@ slow with current store!\n /*\n var kludge = kb.formula([]) // No features\n for (var i=0; i< sts.length; i++) {\n s = sts[i]\n kludge.add(s.subject, s.predicate, s.object)\n }\n */\n const sz = $rdf.Serializer(kb)\n sz.suggestNamespaces(kb.namespaces)\n sz.setBase(subject.uri)\n const str = sz.statementsToXML(sts)\n const source = myDocument.createElement('div')\n source.classList.add('rdfxml-pane__source')\n\n str.split('\\n').forEach(line => {\n const lineElement = myDocument.createElement('div')\n const indentElement = myDocument.createElement('span')\n const contentElement = myDocument.createElement('span')\n const indentWidth = leadingIndentWidth(line)\n\n lineElement.classList.add('rdfxml-pane__line')\n lineElement.style.setProperty('--rdfxml-indent', `${indentWidth}ch`)\n\n indentElement.classList.add('rdfxml-pane__line-indent')\n indentElement.setAttribute('aria-hidden', 'true')\n\n contentElement.classList.add('rdfxml-pane__line-content')\n contentElement.textContent = line.length > 0 ? trimLeadingIndent(line) : ' '\n\n lineElement.appendChild(indentElement)\n lineElement.appendChild(contentElement)\n source.appendChild(lineElement)\n })\n\n div.appendChild(source)\n return div\n }\n}\n\n// ends\n"],"mappings":"sKAaA,IAAM,EAAK,EAAG,GAUd,SAAS,EAAoB,EAAsB,CACjD,GAAI,EAAK,KAAK,CAAC,CAAC,SAAW,EACzB,MAAO,GAGT,IAAI,EAAQ,EACZ,IAAK,IAAM,KAAa,EAAM,CAC5B,GAAI,IAAc,IAAK,CACrB,GAAS,EACT,QACF,CACA,GAAI,IAAc,IAAM,CACtB,GAAS,EACT,QACF,CACA,KACF,CACA,OAAO,KAAK,IAAI,EAAO,CAAC,CAC1B,CAEA,SAAS,EAAmB,EAAsB,CAChD,OAAO,EAAK,QAAQ,UAAW,EAAE,CACnC,CAEA,IAAa,EAAmC,CAC9C,KAAM,EAAG,MAAM,iBAAmB,mBAElC,KAAM,SAEN,SAAU,CAAC,EAAG,MAAM,WAAW,CAAC,EAEhC,MAAO,SAAU,EAAoB,EAA4C,CAC/E,IAAM,EAAQ,EAAQ,QAAQ,MAC9B,GACE,kDACA,EAAM,aAAa,CAAO,EAE1B,OAAO,KAGT,IAAM,EAAI,EAAM,mBAAmB,IAAA,GAAW,IAAA,GAAW,IAAA,GAAW,CAAO,CAAC,CACzE,OAEH,OADI,IAAM,EAAU,KACb,eAAiB,EAAI,GAC9B,EAEA,OAAQ,SACN,EACA,EACgB,CAChB,IAAM,EAAa,EAAQ,IACrB,EAAK,EAAQ,QAAQ,MAE3B,SAAS,EAA4B,EAA+B,CAClE,IAAM,EAAe,EAAQ,aAAe,CAAC,EAC7C,EAAQ,QAAQ,OAAS,EAAY,QAAU,SACjD,CAEA,IAAM,EAAM,EAAW,cAAc,KAAK,EAC1C,EAAI,aAAa,QAAS,aAAa,EACvC,EAA2B,CAAG,EAI9B,IAAM,EAAM,EAAG,mBACb,IAAA,GACA,IAAA,GACA,IAAA,GACA,CACF,EAQM,EAAK,EAAK,WAAW,CAAE,EAC7B,EAAG,kBAAkB,EAAG,UAAU,EAClC,EAAG,QAAQ,EAAQ,GAAG,EACtB,IAAM,EAAM,EAAG,gBAAgB,CAAG,EAC5B,EAAS,EAAW,cAAc,KAAK,EAwB7C,OAvBA,EAAO,UAAU,IAAI,qBAAqB,EAE1C,EAAI,MAAM;CAAI,CAAC,CAAC,QAAQ,GAAQ,CAC9B,IAAM,EAAc,EAAW,cAAc,KAAK,EAC5C,EAAgB,EAAW,cAAc,MAAM,EAC/C,EAAiB,EAAW,cAAc,MAAM,EAChD,EAAc,EAAmB,CAAI,EAE3C,EAAY,UAAU,IAAI,mBAAmB,EAC7C,EAAY,MAAM,YAAY,kBAAmB,GAAG,EAAY,GAAG,EAEnE,EAAc,UAAU,IAAI,0BAA0B,EACtD,EAAc,aAAa,cAAe,MAAM,EAEhD,EAAe,UAAU,IAAI,2BAA2B,EACxD,EAAe,YAAc,EAAK,OAAS,EAAI,EAAkB,CAAI,EAAI,IAEzE,EAAY,YAAY,CAAa,EACrC,EAAY,YAAY,CAAc,EACtC,EAAO,YAAY,CAAW,CAChC,CAAC,EAED,EAAI,YAAY,CAAM,EACf,CACT,CACF"}
@@ -0,0 +1,55 @@
1
+ (function(){try{if(typeof document<`u`){var e=document.createElement(`style`);e.appendChild(document.createTextNode(`.rdfxml-pane{border-top:solid 2px var(--color-data-pane-border-top,black);border-left:solid 2px var(--color-data-pane-border-top,black);border-bottom:solid 2px var(--color-data-pane-border-side,#777);border-right:solid 2px var(--color-data-pane-border-side,#777);color:var(--color-text-brown,#440);box-sizing:border-box;padding:1rem}.rdfxml-pane__source{box-sizing:border-box;white-space:pre;max-width:100%;margin:0;font-family:monospace;font-size:120%;overflow-x:auto}.rdfxml-pane__line{grid-template-columns:var(--rdfxml-indent,0) minmax(max-content, auto);align-items:start;display:grid}.rdfxml-pane__line-indent{width:var(--rdfxml-indent,0);display:block}.rdfxml-pane__line-content{white-space:pre}.rdfxml-pane[data-layout=mobile] .rdfxml-pane__source{overflow-wrap:anywhere;word-break:break-word;white-space:normal}.rdfxml-pane[data-layout=mobile] .rdfxml-pane__line{grid-template-columns:var(--rdfxml-indent,0) minmax(0, 1fr)}.rdfxml-pane[data-layout=mobile] .rdfxml-pane__line-content{white-space:pre-wrap;overflow-wrap:anywhere;word-break:break-word;min-width:0}@media (width<=576px){.rdfxml-pane__source{overflow-wrap:anywhere;word-break:break-word;white-space:normal}.rdfxml-pane__line{grid-template-columns:var(--rdfxml-indent,0) minmax(0, 1fr)}.rdfxml-pane__line-content{white-space:pre-wrap;overflow-wrap:anywhere;word-break:break-word;min-width:0}}`)),document.head.appendChild(e)}}catch(e){console.error(`vite-plugin-css-injected-by-js`,e)}})();
2
+ import * as e from "solid-ui";
3
+ import * as t from "rdflib";
4
+ //#region src/RDFXMLPane.ts
5
+ var n = e.ns;
6
+ function r(e) {
7
+ if (e.trim().length === 0) return 0;
8
+ let t = 0;
9
+ for (let n of e) {
10
+ if (n === " ") {
11
+ t += 1;
12
+ continue;
13
+ }
14
+ if (n === " ") {
15
+ t += 2;
16
+ continue;
17
+ }
18
+ break;
19
+ }
20
+ return Math.max(t, 2);
21
+ }
22
+ function i(e) {
23
+ return e.replace(/^[ \t]+/, "");
24
+ }
25
+ var a = {
26
+ icon: e.icons.originalIconBase + "22-text-xml4.png",
27
+ name: "RDFXML",
28
+ audience: [n.solid("Developer")],
29
+ label: function(e, t) {
30
+ let n = t.session.store;
31
+ if ("http://www.w3.org/2007/ont/link#ProtocolEvent" in n.findTypeURIs(e)) return null;
32
+ let r = n.statementsMatching(void 0, void 0, void 0, e).length;
33
+ return r === 0 ? null : "As RDF/XML (" + r + ")";
34
+ },
35
+ render: function(e, n) {
36
+ let a = n.dom, o = n.session.store;
37
+ function s(e) {
38
+ let t = n.environment ?? {};
39
+ e.dataset.layout = t.layout ?? "desktop";
40
+ }
41
+ let c = a.createElement("div");
42
+ c.setAttribute("class", "rdfxml-pane"), s(c);
43
+ let l = o.statementsMatching(void 0, void 0, void 0, e), u = t.Serializer(o);
44
+ u.suggestNamespaces(o.namespaces), u.setBase(e.uri);
45
+ let d = u.statementsToXML(l), f = a.createElement("div");
46
+ return f.classList.add("rdfxml-pane__source"), d.split("\n").forEach((e) => {
47
+ let t = a.createElement("div"), n = a.createElement("span"), o = a.createElement("span"), s = r(e);
48
+ t.classList.add("rdfxml-pane__line"), t.style.setProperty("--rdfxml-indent", `${s}ch`), n.classList.add("rdfxml-pane__line-indent"), n.setAttribute("aria-hidden", "true"), o.classList.add("rdfxml-pane__line-content"), o.textContent = e.length > 0 ? i(e) : " ", t.appendChild(n), t.appendChild(o), f.appendChild(t);
49
+ }), c.appendChild(f), c;
50
+ }
51
+ };
52
+ //#endregion
53
+ export { a as RDFXMLPane };
54
+
55
+ //# sourceMappingURL=RDFXMLPane2.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RDFXMLPane2.esm.js","names":[],"sources":["../src/RDFXMLPane.ts"],"sourcesContent":["/* RDF/XML content Pane\n **\n ** This pane shows the content of a particular RDF resource\n ** or at least the RDF semantics we attribute to that resource,\n ** in generated N3 syntax.\n */\n\nimport * as UI from 'solid-ui'\nimport * as $rdf from 'rdflib'\nimport type { DataBrowserContext, RenderEnvironment } from 'pane-registry'\nimport type { NamedNode, Statement } from 'rdflib'\nimport './RDFXMLPane.css'\n\nconst ns = UI.ns\n\ntype RDFXMLPaneDefinition = {\n icon: string\n name: string\n audience: NamedNode[]\n label: (subject: NamedNode, context: DataBrowserContext) => string | null\n render: (subject: NamedNode, context: DataBrowserContext) => HTMLDivElement\n}\n\nfunction leadingIndentWidth (line: string): number {\n if (line.trim().length === 0) {\n return 0\n }\n\n let width = 0\n for (const character of line) {\n if (character === ' ') {\n width += 1\n continue\n }\n if (character === '\\t') {\n width += 2\n continue\n }\n break\n }\n return Math.max(width, 2)\n}\n\nfunction trimLeadingIndent (line: string): string {\n return line.replace(/^[ \\t]+/, '')\n}\n\nexport const RDFXMLPane: RDFXMLPaneDefinition = {\n icon: UI.icons.originalIconBase + '22-text-xml4.png',\n\n name: 'RDFXML',\n\n audience: [ns.solid('Developer')],\n\n label: function (subject: NamedNode, context: DataBrowserContext): string | null {\n const store = context.session.store\n if (\n 'http://www.w3.org/2007/ont/link#ProtocolEvent' in\n store.findTypeURIs(subject)\n ) {\n return null\n }\n\n const n = store.statementsMatching(undefined, undefined, undefined, subject)\n .length\n if (n === 0) return null\n return 'As RDF/XML (' + n + ')'\n },\n\n render: function (\n subject: NamedNode,\n context: DataBrowserContext\n ): HTMLDivElement {\n const myDocument = context.dom\n const kb = context.session.store\n\n function applyEnvironmentAttributes (element: HTMLDivElement): void {\n const environment = (context.environment ?? {}) as Partial<RenderEnvironment>\n element.dataset.layout = environment.layout ?? 'desktop'\n }\n\n const div = myDocument.createElement('div')\n div.setAttribute('class', 'rdfxml-pane')\n applyEnvironmentAttributes(div)\n // Because of smushing etc, this will not be a copy of the original source\n // We could instead either fetch and re-parse the source,\n // or we could keep all the pre-smushed triples.\n const sts = kb.statementsMatching(\n undefined,\n undefined,\n undefined,\n subject\n ) as Statement[] // @@ slow with current store!\n /*\n var kludge = kb.formula([]) // No features\n for (var i=0; i< sts.length; i++) {\n s = sts[i]\n kludge.add(s.subject, s.predicate, s.object)\n }\n */\n const sz = $rdf.Serializer(kb)\n sz.suggestNamespaces(kb.namespaces)\n sz.setBase(subject.uri)\n const str = sz.statementsToXML(sts)\n const source = myDocument.createElement('div')\n source.classList.add('rdfxml-pane__source')\n\n str.split('\\n').forEach(line => {\n const lineElement = myDocument.createElement('div')\n const indentElement = myDocument.createElement('span')\n const contentElement = myDocument.createElement('span')\n const indentWidth = leadingIndentWidth(line)\n\n lineElement.classList.add('rdfxml-pane__line')\n lineElement.style.setProperty('--rdfxml-indent', `${indentWidth}ch`)\n\n indentElement.classList.add('rdfxml-pane__line-indent')\n indentElement.setAttribute('aria-hidden', 'true')\n\n contentElement.classList.add('rdfxml-pane__line-content')\n contentElement.textContent = line.length > 0 ? trimLeadingIndent(line) : ' '\n\n lineElement.appendChild(indentElement)\n lineElement.appendChild(contentElement)\n source.appendChild(lineElement)\n })\n\n div.appendChild(source)\n return div\n }\n}\n\n// ends\n"],"mappings":";;;;AAaA,IAAM,IAAK,EAAG;AAUd,SAAS,EAAoB,GAAsB;CACjD,IAAI,EAAK,KAAK,CAAC,CAAC,WAAW,GACzB,OAAO;CAGT,IAAI,IAAQ;CACZ,KAAK,IAAM,KAAa,GAAM;EAC5B,IAAI,MAAc,KAAK;GACrB,KAAS;GACT;EACF;EACA,IAAI,MAAc,KAAM;GACtB,KAAS;GACT;EACF;EACA;CACF;CACA,OAAO,KAAK,IAAI,GAAO,CAAC;AAC1B;AAEA,SAAS,EAAmB,GAAsB;CAChD,OAAO,EAAK,QAAQ,WAAW,EAAE;AACnC;AAEA,IAAa,IAAmC;CAC9C,MAAM,EAAG,MAAM,mBAAmB;CAElC,MAAM;CAEN,UAAU,CAAC,EAAG,MAAM,WAAW,CAAC;CAEhC,OAAO,SAAU,GAAoB,GAA4C;EAC/E,IAAM,IAAQ,EAAQ,QAAQ;EAC9B,IACE,mDACA,EAAM,aAAa,CAAO,GAE1B,OAAO;EAGT,IAAM,IAAI,EAAM,mBAAmB,KAAA,GAAW,KAAA,GAAW,KAAA,GAAW,CAAO,CAAC,CACzE;EAEH,OADI,MAAM,IAAU,OACb,iBAAiB,IAAI;CAC9B;CAEA,QAAQ,SACN,GACA,GACgB;EAChB,IAAM,IAAa,EAAQ,KACrB,IAAK,EAAQ,QAAQ;EAE3B,SAAS,EAA4B,GAA+B;GAClE,IAAM,IAAe,EAAQ,eAAe,CAAC;GAC7C,EAAQ,QAAQ,SAAS,EAAY,UAAU;EACjD;EAEA,IAAM,IAAM,EAAW,cAAc,KAAK;EAE1C,AADA,EAAI,aAAa,SAAS,aAAa,GACvC,EAA2B,CAAG;EAI9B,IAAM,IAAM,EAAG,mBACb,KAAA,GACA,KAAA,GACA,KAAA,GACA,CACF,GAQM,IAAK,EAAK,WAAW,CAAE;EAE7B,AADA,EAAG,kBAAkB,EAAG,UAAU,GAClC,EAAG,QAAQ,EAAQ,GAAG;EACtB,IAAM,IAAM,EAAG,gBAAgB,CAAG,GAC5B,IAAS,EAAW,cAAc,KAAK;EAwB7C,OAvBA,EAAO,UAAU,IAAI,qBAAqB,GAE1C,EAAI,MAAM,IAAI,CAAC,CAAC,SAAQ,MAAQ;GAC9B,IAAM,IAAc,EAAW,cAAc,KAAK,GAC5C,IAAgB,EAAW,cAAc,MAAM,GAC/C,IAAiB,EAAW,cAAc,MAAM,GAChD,IAAc,EAAmB,CAAI;GAa3C,AAXA,EAAY,UAAU,IAAI,mBAAmB,GAC7C,EAAY,MAAM,YAAY,mBAAmB,GAAG,EAAY,GAAG,GAEnE,EAAc,UAAU,IAAI,0BAA0B,GACtD,EAAc,aAAa,eAAe,MAAM,GAEhD,EAAe,UAAU,IAAI,2BAA2B,GACxD,EAAe,cAAc,EAAK,SAAS,IAAI,EAAkB,CAAI,IAAI,KAEzE,EAAY,YAAY,CAAa,GACrC,EAAY,YAAY,CAAc,GACtC,EAAO,YAAY,CAAW;EAChC,CAAC,GAED,EAAI,YAAY,CAAM,GACf;CACT;AACF"}
@@ -0,0 +1 @@
1
+ var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,a)=>(a=n==null?{}:e(i(n)),o(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));exports.__toESM=s;
@@ -0,0 +1,2 @@
1
+ var e=class extends HTMLElement{constructor(){super(),this.attachShadow({mode:`open`}).innerHTML=`<style>:host { display: inline-flex; }</style><svg viewBox="0 0 24 24" width="100%" height="100%" ><g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"><path d="M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2"/><circle cx="12" cy="7" r="4"/></g></svg>`}};customElements.get(`icon-lucide-user`)||customElements.define(`icon-lucide-user`,e),exports.default=e;
2
+ //# sourceMappingURL=user.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user.cjs.js","names":[],"sources":[],"mappings":""}
@@ -0,0 +1,11 @@
1
+ //#region ~icons/lucide/user
2
+ var e = class extends HTMLElement {
3
+ constructor() {
4
+ super(), this.attachShadow({ mode: "open" }).innerHTML = "<style>:host { display: inline-flex; }</style><svg viewBox=\"0 0 24 24\" width=\"100%\" height=\"100%\" ><g fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"><path d=\"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2\"/><circle cx=\"12\" cy=\"7\" r=\"4\"/></g></svg>";
5
+ }
6
+ };
7
+ customElements.get("icon-lucide-user") || customElements.define("icon-lucide-user", e);
8
+ //#endregion
9
+ export { e as default };
10
+
11
+ //# sourceMappingURL=user.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user.esm.js","names":[],"sources":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ const e=require("../_virtual/_rolldown/runtime.cjs.js");let t=require("solid-ui");t=e.__toESM(t);let n=require("rdflib");n=e.__toESM(n);var r=t.ns,i={icon:t.icons.iconBase+`noun_534313.svg`,name:`audio`,label:function(e,t){let r=t.session.store.findTypeURIs(e),i=n.Util.mediaTypeClass(`audio/*`).uri.split(`*`)[0];for(let e in r)if(e.startsWith(i))return`Play audio`;return null},render:function(e,t){let n=t.session.store,i=t.dom,a={autoplay:!1,chain:!0,chainAlbums:!0,loop:!1},o=function(e){let t=e.lastIndexOf(`.`);return t<0||t<e.lastIndexOf(`/`)?e:e.slice(0,t)},s=function(e){let t=n.any(void 0,r.ldp(`contains`),e);if(!t)return!1;let i=n.each(t,r.ldp(`contains`));if(i.length<2)return!1;let a=e.uri;for(let e=0;e<i.length;e++){let t=i[e].uri;if(a.length>t.length&&a.startsWith(o(t))||a.endsWith(`.m4a`)&&t.endsWith(`.mp3`)&&o(a)===o(t))return!0}return!1},c=function(e){let t=e.uri.split(`/`).slice(-3),n=function(e){try{return decodeURIComponent(e)}catch{return e}};h.textContent=n(t[0]),g.textContent=n(t[1]),_.textContent=n(o(t[2]))},l=function(e,t){return new Promise(function(i){if(t||=0,!a.chain)return i(null);let o=n.any(void 0,r.ldp(`contains`),e)||e.dir();if(!o)return i(null);n.fetcher.load(o).then(function(s){let c=n.each(o,r.ldp(`contains`)),u;c.sort();for(let s=0;s<c.length;s++)if(e.uri===c[s].uri)if(u=(s+1)%c.length,u===0)if(a.chainAlbums){if(t===1||!a.chainAlbums)return i(null);l(o,t+1).then(function(e){e&&n.fetcher.load(e).then(function(t){let a=n.each(e,r.ldp(`contains`));return a.length===0?i(null):(a.sort(),console.log(`New Album: `+e),i(a[0]))})})}else return a.loop?i(c[u]):i(null);else return i(c[u])})})},u=function(e){let t=n.sym(e.target.getAttribute(`src`));if(!a.chain)return;let r=function(t){let n=t;l(n).then(function(t){if(!t){console.log(`No successor to `+n);return}s(t)?(console.log(`Ignoring redundant `+t),r(t)):(console.log(`Moving on to `+t),c(t),v.appendChild(d(t,!0)),v.removeChild(e.target))})};r(t)},d=function(e,t){let r=i.createElement(`audio`);return r.setAttribute(`controls`,`yes`),n.fetcher._fetch(e.uri).then(function(e){return e.blob()}).then(function(e){let t=URL.createObjectURL(e);r.setAttribute(`src`,t)}),t&&r.setAttribute(`autoplay`,`autoplay`),r.addEventListener(`ended`,u,!1),r},f=i.createElement(`div`),p=f.appendChild(i.createElement(`table`)),m=`padding: 0.3em; color:white; background-color: black;`,h=p.appendChild(i.createElement(`tr`));h.style.cssText=m;let g=p.appendChild(i.createElement(`tr`));g.style.cssText=m;let _=p.appendChild(i.createElement(`tr`));_.style.cssText=m;let v=p.appendChild(i.createElement(`tr`));return c(e),v.appendChild(d(e,a.autoplay)),!n.holds(void 0,r.ldp(`contains`),e)&&e.dir()&&n.fetcher.load(e.dir()),f}};exports.default=i;
2
+ //# sourceMappingURL=audioPane.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audioPane.cjs.js","names":["UI","$rdf"],"sources":["../../src/audio/audioPane.js"],"sourcesContent":["/* Single audio play Pane\n **\n */\nimport * as UI from 'solid-ui'\nimport * as $rdf from 'rdflib'\nconst ns = UI.ns\n\nexport default {\n icon: UI.icons.iconBase + 'noun_534313.svg',\n\n name: 'audio',\n\n // Does the subject deserve an audio play pane?\n label: function (subject, context) {\n const kb = context.session.store\n const typeURIs = kb.findTypeURIs(subject)\n\n const prefix = $rdf.Util.mediaTypeClass('audio/*').uri.split('*')[0]\n for (const t in typeURIs) {\n if (t.startsWith(prefix)) return 'Play audio'\n }\n return null\n },\n\n render: function (subject, context) {\n const kb = context.session.store\n const dom = context.dom\n const options = {\n autoplay: false,\n chain: true,\n chainAlbums: true,\n loop: false\n }\n\n const removeExtension = function (str) {\n const dot = str.lastIndexOf('.')\n if (dot < 0) return str // if any\n const slash = str.lastIndexOf('/')\n if (dot < slash) return str\n return str.slice(0, dot)\n }\n\n // True if there is another file like song.mp3 when this is \"song 1.mp3\"\n // or this is song.m4a\n //\n const looksRedundant = function (x) {\n const folder = kb.any(undefined, ns.ldp('contains'), x)\n if (!folder) return false\n const contents = kb.each(folder, ns.ldp('contains'))\n if (contents.length < 2) return false\n const thisName = x.uri\n for (let k = 0; k < contents.length; k++) {\n const otherName = contents[k].uri\n if (\n thisName.length > otherName.length &&\n thisName.startsWith(removeExtension(otherName))\n ) {\n return true\n }\n if (\n thisName.endsWith('.m4a') &&\n otherName.endsWith('.mp3') &&\n removeExtension(thisName) === removeExtension(otherName)\n ) {\n return true\n }\n }\n return false\n }\n\n // Alternative methods could include:\n // Accesing metadata in the audio contol, or paring the audio file\n const guessNames = function (x) {\n const a = x.uri.split('/').slice(-3) // Hope artist, album, track\n const decode = function (str) {\n try {\n return decodeURIComponent(str)\n } catch (e) {\n return str\n }\n }\n artistRow.textContent = decode(a[0])\n albumRow.textContent = decode(a[1])\n trackRow.textContent = decode(removeExtension(a[2]))\n }\n\n const moveOn = function (current, level) {\n return new Promise(function (resolve) {\n level = level || 0\n if (!options.chain) return resolve(null)\n // Ideally navigate graph else cheat with URI munging:\n const folder =\n kb.any(undefined, ns.ldp('contains'), current) || current.dir()\n if (!folder) return resolve(null)\n kb.fetcher.load(folder).then(function (_xhr) {\n const contents = kb.each(folder, ns.ldp('contains')) // @@ load if not loaded\n // if (contents.length < 2) return resolve(null) NO might move on from 1-track album\n let j\n contents.sort() // sort by URI which hopefully will get tracks in order\n for (let i = 0; i < contents.length; i++) {\n if (current.uri === contents[i].uri) {\n j = (i + 1) % contents.length\n if (j === 0) {\n if (!options.chainAlbums) {\n if (options.loop) {\n return resolve(contents[j])\n }\n return resolve(null) // No more music needed\n } else {\n // chain albums\n if (level === 1 || !options.chainAlbums) return resolve(null) // limit of navigating treee\n moveOn(folder, level + 1).then(function (folder2) {\n if (folder2) {\n kb.fetcher.load(folder2).then(function (_xhr) {\n const contents = kb.each(folder2, ns.ldp('contains'))\n if (contents.length === 0) return resolve(null)\n contents.sort()\n console.log('New Album: ' + folder2)\n return resolve(contents[0]) // Start off new album\n })\n }\n })\n }\n } else {\n return resolve(contents[j])\n }\n }\n } // for\n })\n })\n }\n const endedListener = function (event) {\n const current = kb.sym(event.target.getAttribute('src'))\n if (!options.chain) return\n const tryNext = function (cur) {\n const current = cur\n moveOn(current).then(function (next) {\n if (!next) {\n console.log('No successor to ' + current)\n return\n }\n if (!looksRedundant(next)) {\n console.log('Moving on to ' + next)\n guessNames(next)\n controlRow.appendChild(audioControl(next, true)) // Force autoplay\n controlRow.removeChild(event.target)\n } else {\n console.log('Ignoring redundant ' + next)\n tryNext(next)\n }\n })\n }\n tryNext(current)\n }\n\n const audioControl = function (song, autoplay) {\n const audio = dom.createElement('audio')\n audio.setAttribute('controls', 'yes')\n // get audio with authenticated fetch\n kb.fetcher._fetch(song.uri)\n .then(function (response) {\n return response.blob()\n })\n .then(function (myBlob) {\n const objectURL = URL.createObjectURL(myBlob)\n audio.setAttribute('src', objectURL) // w640 h480 //\n })\n\n if (autoplay) {\n audio.setAttribute('autoplay', 'autoplay') // Make this a personal preference\n }\n audio.addEventListener('ended', endedListener, false)\n return audio\n }\n\n const div = dom.createElement('div')\n const table = div.appendChild(dom.createElement('table'))\n const labelStyle = 'padding: 0.3em; color:white; background-color: black;'\n const artistRow = table.appendChild(dom.createElement('tr'))\n artistRow.style.cssText = labelStyle\n const albumRow = table.appendChild(dom.createElement('tr'))\n albumRow.style.cssText = labelStyle\n const trackRow = table.appendChild(dom.createElement('tr'))\n trackRow.style.cssText = labelStyle\n const controlRow = table.appendChild(dom.createElement('tr'))\n guessNames(subject)\n controlRow.appendChild(audioControl(subject, options.autoplay))\n\n if (!kb.holds(undefined, ns.ldp('contains'), subject) && subject.dir()) {\n kb.fetcher.load(subject.dir()) // Prefetch enclosing @@ or playlist\n }\n\n return div\n }\n}\n\n// ends\n"],"mappings":"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"}
@@ -0,0 +1,96 @@
1
+ import * as e from "solid-ui";
2
+ import * as t from "rdflib";
3
+ //#region src/audio/audioPane.js
4
+ var n = e.ns, r = {
5
+ icon: e.icons.iconBase + "noun_534313.svg",
6
+ name: "audio",
7
+ label: function(e, n) {
8
+ let r = n.session.store.findTypeURIs(e), i = t.Util.mediaTypeClass("audio/*").uri.split("*")[0];
9
+ for (let e in r) if (e.startsWith(i)) return "Play audio";
10
+ return null;
11
+ },
12
+ render: function(e, t) {
13
+ let r = t.session.store, i = t.dom, a = {
14
+ autoplay: !1,
15
+ chain: !0,
16
+ chainAlbums: !0,
17
+ loop: !1
18
+ }, o = function(e) {
19
+ let t = e.lastIndexOf(".");
20
+ return t < 0 || t < e.lastIndexOf("/") ? e : e.slice(0, t);
21
+ }, s = function(e) {
22
+ let t = r.any(void 0, n.ldp("contains"), e);
23
+ if (!t) return !1;
24
+ let i = r.each(t, n.ldp("contains"));
25
+ if (i.length < 2) return !1;
26
+ let a = e.uri;
27
+ for (let e = 0; e < i.length; e++) {
28
+ let t = i[e].uri;
29
+ if (a.length > t.length && a.startsWith(o(t)) || a.endsWith(".m4a") && t.endsWith(".mp3") && o(a) === o(t)) return !0;
30
+ }
31
+ return !1;
32
+ }, c = function(e) {
33
+ let t = e.uri.split("/").slice(-3), n = function(e) {
34
+ try {
35
+ return decodeURIComponent(e);
36
+ } catch {
37
+ return e;
38
+ }
39
+ };
40
+ h.textContent = n(t[0]), g.textContent = n(t[1]), _.textContent = n(o(t[2]));
41
+ }, l = function(e, t) {
42
+ return new Promise(function(i) {
43
+ if (t ||= 0, !a.chain) return i(null);
44
+ let o = r.any(void 0, n.ldp("contains"), e) || e.dir();
45
+ if (!o) return i(null);
46
+ r.fetcher.load(o).then(function(s) {
47
+ let c = r.each(o, n.ldp("contains")), u;
48
+ c.sort();
49
+ for (let s = 0; s < c.length; s++) if (e.uri === c[s].uri) if (u = (s + 1) % c.length, u === 0) if (a.chainAlbums) {
50
+ if (t === 1 || !a.chainAlbums) return i(null);
51
+ l(o, t + 1).then(function(e) {
52
+ e && r.fetcher.load(e).then(function(t) {
53
+ let a = r.each(e, n.ldp("contains"));
54
+ return a.length === 0 ? i(null) : (a.sort(), console.log("New Album: " + e), i(a[0]));
55
+ });
56
+ });
57
+ } else return a.loop ? i(c[u]) : i(null);
58
+ else return i(c[u]);
59
+ });
60
+ });
61
+ }, u = function(e) {
62
+ let t = r.sym(e.target.getAttribute("src"));
63
+ if (!a.chain) return;
64
+ let n = function(t) {
65
+ let r = t;
66
+ l(r).then(function(t) {
67
+ if (!t) {
68
+ console.log("No successor to " + r);
69
+ return;
70
+ }
71
+ s(t) ? (console.log("Ignoring redundant " + t), n(t)) : (console.log("Moving on to " + t), c(t), v.appendChild(d(t, !0)), v.removeChild(e.target));
72
+ });
73
+ };
74
+ n(t);
75
+ }, d = function(e, t) {
76
+ let n = i.createElement("audio");
77
+ return n.setAttribute("controls", "yes"), r.fetcher._fetch(e.uri).then(function(e) {
78
+ return e.blob();
79
+ }).then(function(e) {
80
+ let t = URL.createObjectURL(e);
81
+ n.setAttribute("src", t);
82
+ }), t && n.setAttribute("autoplay", "autoplay"), n.addEventListener("ended", u, !1), n;
83
+ }, f = i.createElement("div"), p = f.appendChild(i.createElement("table")), m = "padding: 0.3em; color:white; background-color: black;", h = p.appendChild(i.createElement("tr"));
84
+ h.style.cssText = m;
85
+ let g = p.appendChild(i.createElement("tr"));
86
+ g.style.cssText = m;
87
+ let _ = p.appendChild(i.createElement("tr"));
88
+ _.style.cssText = m;
89
+ let v = p.appendChild(i.createElement("tr"));
90
+ return c(e), v.appendChild(d(e, a.autoplay)), !r.holds(void 0, n.ldp("contains"), e) && e.dir() && r.fetcher.load(e.dir()), f;
91
+ }
92
+ };
93
+ //#endregion
94
+ export { r as default };
95
+
96
+ //# sourceMappingURL=audioPane.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audioPane.esm.js","names":["ns"],"sources":["../../src/audio/audioPane.js"],"sourcesContent":["/* Single audio play Pane\n **\n */\nimport * as UI from 'solid-ui'\nimport * as $rdf from 'rdflib'\nconst ns = UI.ns\n\nexport default {\n icon: UI.icons.iconBase + 'noun_534313.svg',\n\n name: 'audio',\n\n // Does the subject deserve an audio play pane?\n label: function (subject, context) {\n const kb = context.session.store\n const typeURIs = kb.findTypeURIs(subject)\n\n const prefix = $rdf.Util.mediaTypeClass('audio/*').uri.split('*')[0]\n for (const t in typeURIs) {\n if (t.startsWith(prefix)) return 'Play audio'\n }\n return null\n },\n\n render: function (subject, context) {\n const kb = context.session.store\n const dom = context.dom\n const options = {\n autoplay: false,\n chain: true,\n chainAlbums: true,\n loop: false\n }\n\n const removeExtension = function (str) {\n const dot = str.lastIndexOf('.')\n if (dot < 0) return str // if any\n const slash = str.lastIndexOf('/')\n if (dot < slash) return str\n return str.slice(0, dot)\n }\n\n // True if there is another file like song.mp3 when this is \"song 1.mp3\"\n // or this is song.m4a\n //\n const looksRedundant = function (x) {\n const folder = kb.any(undefined, ns.ldp('contains'), x)\n if (!folder) return false\n const contents = kb.each(folder, ns.ldp('contains'))\n if (contents.length < 2) return false\n const thisName = x.uri\n for (let k = 0; k < contents.length; k++) {\n const otherName = contents[k].uri\n if (\n thisName.length > otherName.length &&\n thisName.startsWith(removeExtension(otherName))\n ) {\n return true\n }\n if (\n thisName.endsWith('.m4a') &&\n otherName.endsWith('.mp3') &&\n removeExtension(thisName) === removeExtension(otherName)\n ) {\n return true\n }\n }\n return false\n }\n\n // Alternative methods could include:\n // Accesing metadata in the audio contol, or paring the audio file\n const guessNames = function (x) {\n const a = x.uri.split('/').slice(-3) // Hope artist, album, track\n const decode = function (str) {\n try {\n return decodeURIComponent(str)\n } catch (e) {\n return str\n }\n }\n artistRow.textContent = decode(a[0])\n albumRow.textContent = decode(a[1])\n trackRow.textContent = decode(removeExtension(a[2]))\n }\n\n const moveOn = function (current, level) {\n return new Promise(function (resolve) {\n level = level || 0\n if (!options.chain) return resolve(null)\n // Ideally navigate graph else cheat with URI munging:\n const folder =\n kb.any(undefined, ns.ldp('contains'), current) || current.dir()\n if (!folder) return resolve(null)\n kb.fetcher.load(folder).then(function (_xhr) {\n const contents = kb.each(folder, ns.ldp('contains')) // @@ load if not loaded\n // if (contents.length < 2) return resolve(null) NO might move on from 1-track album\n let j\n contents.sort() // sort by URI which hopefully will get tracks in order\n for (let i = 0; i < contents.length; i++) {\n if (current.uri === contents[i].uri) {\n j = (i + 1) % contents.length\n if (j === 0) {\n if (!options.chainAlbums) {\n if (options.loop) {\n return resolve(contents[j])\n }\n return resolve(null) // No more music needed\n } else {\n // chain albums\n if (level === 1 || !options.chainAlbums) return resolve(null) // limit of navigating treee\n moveOn(folder, level + 1).then(function (folder2) {\n if (folder2) {\n kb.fetcher.load(folder2).then(function (_xhr) {\n const contents = kb.each(folder2, ns.ldp('contains'))\n if (contents.length === 0) return resolve(null)\n contents.sort()\n console.log('New Album: ' + folder2)\n return resolve(contents[0]) // Start off new album\n })\n }\n })\n }\n } else {\n return resolve(contents[j])\n }\n }\n } // for\n })\n })\n }\n const endedListener = function (event) {\n const current = kb.sym(event.target.getAttribute('src'))\n if (!options.chain) return\n const tryNext = function (cur) {\n const current = cur\n moveOn(current).then(function (next) {\n if (!next) {\n console.log('No successor to ' + current)\n return\n }\n if (!looksRedundant(next)) {\n console.log('Moving on to ' + next)\n guessNames(next)\n controlRow.appendChild(audioControl(next, true)) // Force autoplay\n controlRow.removeChild(event.target)\n } else {\n console.log('Ignoring redundant ' + next)\n tryNext(next)\n }\n })\n }\n tryNext(current)\n }\n\n const audioControl = function (song, autoplay) {\n const audio = dom.createElement('audio')\n audio.setAttribute('controls', 'yes')\n // get audio with authenticated fetch\n kb.fetcher._fetch(song.uri)\n .then(function (response) {\n return response.blob()\n })\n .then(function (myBlob) {\n const objectURL = URL.createObjectURL(myBlob)\n audio.setAttribute('src', objectURL) // w640 h480 //\n })\n\n if (autoplay) {\n audio.setAttribute('autoplay', 'autoplay') // Make this a personal preference\n }\n audio.addEventListener('ended', endedListener, false)\n return audio\n }\n\n const div = dom.createElement('div')\n const table = div.appendChild(dom.createElement('table'))\n const labelStyle = 'padding: 0.3em; color:white; background-color: black;'\n const artistRow = table.appendChild(dom.createElement('tr'))\n artistRow.style.cssText = labelStyle\n const albumRow = table.appendChild(dom.createElement('tr'))\n albumRow.style.cssText = labelStyle\n const trackRow = table.appendChild(dom.createElement('tr'))\n trackRow.style.cssText = labelStyle\n const controlRow = table.appendChild(dom.createElement('tr'))\n guessNames(subject)\n controlRow.appendChild(audioControl(subject, options.autoplay))\n\n if (!kb.holds(undefined, ns.ldp('contains'), subject) && subject.dir()) {\n kb.fetcher.load(subject.dir()) // Prefetch enclosing @@ or playlist\n }\n\n return div\n }\n}\n\n// ends\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ const e=require("./_virtual/_rolldown/runtime.cjs.js");let t=require("solid-ui");t=e.__toESM(t);let n=require("rdflib");n=e.__toESM(n);var r=t.ns,i={icon:t.icons.originalIconBase+`tango/22-folder-open.png`,name:`classInstance`,audience:[r.solid(`PowerUser`)],label:function(e,t){let n=t.session.store.each(void 0,r.rdf(`type`),e).length;return n>0?`List (`+n+`)`:null},render:function(e,i){let a=i.dom,o=i.getOutliner(a),s=i.session.store,c=function(e,t){let n=a.createElement(`pre`);n.setAttribute(`style`,`background-color: `+t||`#eed;`),l.appendChild(n),n.appendChild(a.createTextNode(e))},l=a.createElement(`div`);l.setAttribute(`class`,`instancePane`),l.setAttribute(`style`,` border-top: solid 1px #777; border-bottom: solid 1px #777; margin-top: 0.5em; margin-bottom: 0.5em `);let u=s.statementsMatching(void 0,r.rdf(`type`),e);if(u.length>0){let i={},d=[];u.forEach(e=>{i[e.subject.toNT()]=e});for(let t in s.findMembersNT(e))i[t]||d.push(n.st(s.fromNT(t),r.rdf(`type`),e));if(d.length&&c(`There are `+u.length+` explicit and `+d.length+` implicit members of `+t.utils.label(e)),!e.sameTerm(r.rdf(`Property`))&&e.sameTerm(r.rdfs(`Class`))){let e=s.statementsMatching(void 0,r.rdf(`type`),void 0),t={};e.forEach(function(e){t[e.object]=e});let i=[];for(let e in t)i.push(n.st(n.sym(e),r.rdf(`type`),r.rdfs(`Class`)));c(`Total of `+e.length+` type statements and `+i.length+` unique types.`)}if(u.length>10){let e=a.createElement(`TR`);e.appendChild(a.createTextNode(``+u.length)),l.appendChild(e)}o.appendPropertyTRs(l,u,!0,function(e){return!0}),d.length&&(c(`Implicit:`),o.appendPropertyTRs(l,d,!0,function(e){return!0}))}return l}};exports.classInstancePane=i;
2
+ //# sourceMappingURL=classInstancePane.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"classInstancePane.cjs.js","names":["UI","$rdf"],"sources":["../src/classInstancePane.js"],"sourcesContent":["/* Class member Pane\n **\n ** This outline pane lists the members of a class\n */\n\nimport * as UI from 'solid-ui'\nimport * as $rdf from 'rdflib'\n\nconst ns = UI.ns\n\nexport const classInstancePane = {\n icon: UI.icons.originalIconBase + 'tango/22-folder-open.png',\n\n name: 'classInstance',\n\n // Create a new folder in a Solid system,\n\n audience: [ns.solid('PowerUser')],\n\n label: function (subject, context) {\n const kb = context.session.store\n const n = kb.each(undefined, ns.rdf('type'), subject).length\n if (n > 0) return 'List (' + n + ')' // Show how many in hover text\n return null // Suppress pane otherwise\n },\n\n render: function (subject, context) {\n const dom = context.dom\n const outliner = context.getOutliner(dom)\n const kb = context.session.store\n const complain = function complain (message, color) {\n const pre = dom.createElement('pre')\n pre.setAttribute('style', 'background-color: ' + color || '#eed' + ';')\n div.appendChild(pre)\n pre.appendChild(dom.createTextNode(message))\n }\n const div = dom.createElement('div')\n div.setAttribute('class', 'instancePane')\n div.setAttribute(\n 'style',\n ' border-top: solid 1px #777; border-bottom: solid 1px #777; margin-top: 0.5em; margin-bottom: 0.5em '\n )\n\n // If this is a class, look for all both explicit and implicit\n const sts = kb.statementsMatching(undefined, ns.rdf('type'), subject)\n if (sts.length > 0) {\n const already = {}\n const more = []\n sts.forEach(st => {\n already[st.subject.toNT()] = st\n })\n for (const nt in kb.findMembersNT(subject)) {\n if (!already[nt]) {\n more.push($rdf.st(kb.fromNT(nt), ns.rdf('type'), subject)) // @@ no provenance\n }\n }\n if (more.length) {\n complain(\n 'There are ' +\n sts.length +\n ' explicit and ' +\n more.length +\n ' implicit members of ' +\n UI.utils.label(subject)\n )\n }\n if (subject.sameTerm(ns.rdf('Property'))) {\n // / Do not find all properties used as properties .. unless look at kb index\n } else if (subject.sameTerm(ns.rdfs('Class'))) {\n const uses = kb.statementsMatching(undefined, ns.rdf('type'), undefined)\n const usedTypes = {}\n uses.forEach(function (st) {\n usedTypes[st.object] = st\n }) // Get unique\n const used = []\n for (const i in usedTypes) {\n used.push($rdf.st($rdf.sym(i), ns.rdf('type'), ns.rdfs('Class')))\n }\n complain(\n 'Total of ' +\n uses.length +\n ' type statements and ' +\n used.length +\n ' unique types.'\n )\n }\n\n if (sts.length > 10) {\n const tr = dom.createElement('TR')\n tr.appendChild(dom.createTextNode('' + sts.length))\n // tr.AJAR_statement=sts[i]\n div.appendChild(tr)\n }\n\n outliner.appendPropertyTRs(div, sts, true, function (_pred) {\n return true\n })\n\n if (more.length) {\n complain('Implicit:')\n outliner.appendPropertyTRs(div, more, true, function (_pred) {\n return true\n })\n }\n }\n\n return div\n }\n}\n// ends\n"],"mappings":"uIAQA,IAAM,EAAKA,EAAG,GAED,EAAoB,CAC/B,KAAMA,EAAG,MAAM,iBAAmB,2BAElC,KAAM,gBAIN,SAAU,CAAC,EAAG,MAAM,WAAW,CAAC,EAEhC,MAAO,SAAU,EAAS,EAAS,CAEjC,IAAM,EADK,EAAQ,QAAQ,MACd,KAAK,IAAA,GAAW,EAAG,IAAI,MAAM,EAAG,CAAO,CAAC,CAAC,OAEtD,OADI,EAAI,EAAU,SAAW,EAAI,IAC1B,IACT,EAEA,OAAQ,SAAU,EAAS,EAAS,CAClC,IAAM,EAAM,EAAQ,IACd,EAAW,EAAQ,YAAY,CAAG,EAClC,EAAK,EAAQ,QAAQ,MACrB,EAAW,SAAmB,EAAS,EAAO,CAClD,IAAM,EAAM,EAAI,cAAc,KAAK,EACnC,EAAI,aAAa,QAAS,qBAAuB,GAAS,OAAY,EACtE,EAAI,YAAY,CAAG,EACnB,EAAI,YAAY,EAAI,eAAe,CAAO,CAAC,CAC7C,EACM,EAAM,EAAI,cAAc,KAAK,EACnC,EAAI,aAAa,QAAS,cAAc,EACxC,EAAI,aACF,QACA,uGACF,EAGA,IAAM,EAAM,EAAG,mBAAmB,IAAA,GAAW,EAAG,IAAI,MAAM,EAAG,CAAO,EACpE,GAAI,EAAI,OAAS,EAAG,CAClB,IAAM,EAAU,CAAC,EACX,EAAO,CAAC,EACd,EAAI,QAAQ,GAAM,CAChB,EAAQ,EAAG,QAAQ,KAAK,GAAK,CAC/B,CAAC,EACD,IAAK,IAAM,KAAM,EAAG,cAAc,CAAO,EAClC,EAAQ,IACX,EAAK,KAAKC,EAAK,GAAG,EAAG,OAAO,CAAE,EAAG,EAAG,IAAI,MAAM,EAAG,CAAO,CAAC,EAa7D,GAVI,EAAK,QACP,EACE,aACE,EAAI,OACJ,iBACA,EAAK,OACL,wBACAD,EAAG,MAAM,MAAM,CAAO,CAC1B,EAEE,GAAQ,SAAS,EAAG,IAAI,UAAU,CAAC,GAE5B,EAAQ,SAAS,EAAG,KAAK,OAAO,CAAC,EAAG,CAC7C,IAAM,EAAO,EAAG,mBAAmB,IAAA,GAAW,EAAG,IAAI,MAAM,EAAG,IAAA,EAAS,EACjE,EAAY,CAAC,EACnB,EAAK,QAAQ,SAAU,EAAI,CACzB,EAAU,EAAG,QAAU,CACzB,CAAC,EACD,IAAM,EAAO,CAAC,EACd,IAAK,IAAM,KAAK,EACd,EAAK,KAAKC,EAAK,GAAGA,EAAK,IAAI,CAAC,EAAG,EAAG,IAAI,MAAM,EAAG,EAAG,KAAK,OAAO,CAAC,CAAC,EAElE,EACE,YACE,EAAK,OACL,wBACA,EAAK,OACL,gBACJ,CACF,CAEA,GAAI,EAAI,OAAS,GAAI,CACnB,IAAM,EAAK,EAAI,cAAc,IAAI,EACjC,EAAG,YAAY,EAAI,eAAe,GAAK,EAAI,MAAM,CAAC,EAElD,EAAI,YAAY,CAAE,CACpB,CAEA,EAAS,kBAAkB,EAAK,EAAK,GAAM,SAAU,EAAO,CAC1D,MAAO,EACT,CAAC,EAEG,EAAK,SACP,EAAS,WAAW,EACpB,EAAS,kBAAkB,EAAK,EAAM,GAAM,SAAU,EAAO,CAC3D,MAAO,EACT,CAAC,EAEL,CAEA,OAAO,CACT,CACF"}
@@ -0,0 +1,50 @@
1
+ import * as e from "solid-ui";
2
+ import * as t from "rdflib";
3
+ //#region src/classInstancePane.js
4
+ var n = e.ns, r = {
5
+ icon: e.icons.originalIconBase + "tango/22-folder-open.png",
6
+ name: "classInstance",
7
+ audience: [n.solid("PowerUser")],
8
+ label: function(e, t) {
9
+ let r = t.session.store.each(void 0, n.rdf("type"), e).length;
10
+ return r > 0 ? "List (" + r + ")" : null;
11
+ },
12
+ render: function(r, i) {
13
+ let a = i.dom, o = i.getOutliner(a), s = i.session.store, c = function(e, t) {
14
+ let n = a.createElement("pre");
15
+ n.setAttribute("style", "background-color: " + t || "#eed;"), l.appendChild(n), n.appendChild(a.createTextNode(e));
16
+ }, l = a.createElement("div");
17
+ l.setAttribute("class", "instancePane"), l.setAttribute("style", " border-top: solid 1px #777; border-bottom: solid 1px #777; margin-top: 0.5em; margin-bottom: 0.5em ");
18
+ let u = s.statementsMatching(void 0, n.rdf("type"), r);
19
+ if (u.length > 0) {
20
+ let i = {}, d = [];
21
+ u.forEach((e) => {
22
+ i[e.subject.toNT()] = e;
23
+ });
24
+ for (let e in s.findMembersNT(r)) i[e] || d.push(t.st(s.fromNT(e), n.rdf("type"), r));
25
+ if (d.length && c("There are " + u.length + " explicit and " + d.length + " implicit members of " + e.utils.label(r)), !r.sameTerm(n.rdf("Property")) && r.sameTerm(n.rdfs("Class"))) {
26
+ let e = s.statementsMatching(void 0, n.rdf("type"), void 0), r = {};
27
+ e.forEach(function(e) {
28
+ r[e.object] = e;
29
+ });
30
+ let i = [];
31
+ for (let e in r) i.push(t.st(t.sym(e), n.rdf("type"), n.rdfs("Class")));
32
+ c("Total of " + e.length + " type statements and " + i.length + " unique types.");
33
+ }
34
+ if (u.length > 10) {
35
+ let e = a.createElement("TR");
36
+ e.appendChild(a.createTextNode("" + u.length)), l.appendChild(e);
37
+ }
38
+ o.appendPropertyTRs(l, u, !0, function(e) {
39
+ return !0;
40
+ }), d.length && (c("Implicit:"), o.appendPropertyTRs(l, d, !0, function(e) {
41
+ return !0;
42
+ }));
43
+ }
44
+ return l;
45
+ }
46
+ };
47
+ //#endregion
48
+ export { r as classInstancePane };
49
+
50
+ //# sourceMappingURL=classInstancePane.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"classInstancePane.esm.js","names":["ns"],"sources":["../src/classInstancePane.js"],"sourcesContent":["/* Class member Pane\n **\n ** This outline pane lists the members of a class\n */\n\nimport * as UI from 'solid-ui'\nimport * as $rdf from 'rdflib'\n\nconst ns = UI.ns\n\nexport const classInstancePane = {\n icon: UI.icons.originalIconBase + 'tango/22-folder-open.png',\n\n name: 'classInstance',\n\n // Create a new folder in a Solid system,\n\n audience: [ns.solid('PowerUser')],\n\n label: function (subject, context) {\n const kb = context.session.store\n const n = kb.each(undefined, ns.rdf('type'), subject).length\n if (n > 0) return 'List (' + n + ')' // Show how many in hover text\n return null // Suppress pane otherwise\n },\n\n render: function (subject, context) {\n const dom = context.dom\n const outliner = context.getOutliner(dom)\n const kb = context.session.store\n const complain = function complain (message, color) {\n const pre = dom.createElement('pre')\n pre.setAttribute('style', 'background-color: ' + color || '#eed' + ';')\n div.appendChild(pre)\n pre.appendChild(dom.createTextNode(message))\n }\n const div = dom.createElement('div')\n div.setAttribute('class', 'instancePane')\n div.setAttribute(\n 'style',\n ' border-top: solid 1px #777; border-bottom: solid 1px #777; margin-top: 0.5em; margin-bottom: 0.5em '\n )\n\n // If this is a class, look for all both explicit and implicit\n const sts = kb.statementsMatching(undefined, ns.rdf('type'), subject)\n if (sts.length > 0) {\n const already = {}\n const more = []\n sts.forEach(st => {\n already[st.subject.toNT()] = st\n })\n for (const nt in kb.findMembersNT(subject)) {\n if (!already[nt]) {\n more.push($rdf.st(kb.fromNT(nt), ns.rdf('type'), subject)) // @@ no provenance\n }\n }\n if (more.length) {\n complain(\n 'There are ' +\n sts.length +\n ' explicit and ' +\n more.length +\n ' implicit members of ' +\n UI.utils.label(subject)\n )\n }\n if (subject.sameTerm(ns.rdf('Property'))) {\n // / Do not find all properties used as properties .. unless look at kb index\n } else if (subject.sameTerm(ns.rdfs('Class'))) {\n const uses = kb.statementsMatching(undefined, ns.rdf('type'), undefined)\n const usedTypes = {}\n uses.forEach(function (st) {\n usedTypes[st.object] = st\n }) // Get unique\n const used = []\n for (const i in usedTypes) {\n used.push($rdf.st($rdf.sym(i), ns.rdf('type'), ns.rdfs('Class')))\n }\n complain(\n 'Total of ' +\n uses.length +\n ' type statements and ' +\n used.length +\n ' unique types.'\n )\n }\n\n if (sts.length > 10) {\n const tr = dom.createElement('TR')\n tr.appendChild(dom.createTextNode('' + sts.length))\n // tr.AJAR_statement=sts[i]\n div.appendChild(tr)\n }\n\n outliner.appendPropertyTRs(div, sts, true, function (_pred) {\n return true\n })\n\n if (more.length) {\n complain('Implicit:')\n outliner.appendPropertyTRs(div, more, true, function (_pred) {\n return true\n })\n }\n }\n\n return div\n }\n}\n// ends\n"],"mappings":";;;AAQA,IAAMA,IAAK,EAAG,IAED,IAAoB;CAC/B,MAAM,EAAG,MAAM,mBAAmB;CAElC,MAAM;CAIN,UAAU,CAACA,EAAG,MAAM,WAAW,CAAC;CAEhC,OAAO,SAAU,GAAS,GAAS;EAEjC,IAAM,IADK,EAAQ,QAAQ,MACd,KAAK,KAAA,GAAWA,EAAG,IAAI,MAAM,GAAG,CAAO,CAAC,CAAC;EAEtD,OADI,IAAI,IAAU,WAAW,IAAI,MAC1B;CACT;CAEA,QAAQ,SAAU,GAAS,GAAS;EAClC,IAAM,IAAM,EAAQ,KACd,IAAW,EAAQ,YAAY,CAAG,GAClC,IAAK,EAAQ,QAAQ,OACrB,IAAW,SAAmB,GAAS,GAAO;GAClD,IAAM,IAAM,EAAI,cAAc,KAAK;GAGnC,AAFA,EAAI,aAAa,SAAS,uBAAuB,KAAS,OAAY,GACtE,EAAI,YAAY,CAAG,GACnB,EAAI,YAAY,EAAI,eAAe,CAAO,CAAC;EAC7C,GACM,IAAM,EAAI,cAAc,KAAK;EAEnC,AADA,EAAI,aAAa,SAAS,cAAc,GACxC,EAAI,aACF,SACA,uGACF;EAGA,IAAM,IAAM,EAAG,mBAAmB,KAAA,GAAWA,EAAG,IAAI,MAAM,GAAG,CAAO;EACpE,IAAI,EAAI,SAAS,GAAG;GAClB,IAAM,IAAU,CAAC,GACX,IAAO,CAAC;GACd,EAAI,SAAQ,MAAM;IAChB,EAAQ,EAAG,QAAQ,KAAK,KAAK;GAC/B,CAAC;GACD,KAAK,IAAM,KAAM,EAAG,cAAc,CAAO,GACvC,AAAK,EAAQ,MACX,EAAK,KAAK,EAAK,GAAG,EAAG,OAAO,CAAE,GAAGA,EAAG,IAAI,MAAM,GAAG,CAAO,CAAC;GAa7D,IAVI,EAAK,UACP,EACE,eACE,EAAI,SACJ,mBACA,EAAK,SACL,0BACA,EAAG,MAAM,MAAM,CAAO,CAC1B,GAEE,GAAQ,SAASA,EAAG,IAAI,UAAU,CAAC,KAE5B,EAAQ,SAASA,EAAG,KAAK,OAAO,CAAC,GAAG;IAC7C,IAAM,IAAO,EAAG,mBAAmB,KAAA,GAAWA,EAAG,IAAI,MAAM,GAAG,KAAA,CAAS,GACjE,IAAY,CAAC;IACnB,EAAK,QAAQ,SAAU,GAAI;KACzB,EAAU,EAAG,UAAU;IACzB,CAAC;IACD,IAAM,IAAO,CAAC;IACd,KAAK,IAAM,KAAK,GACd,EAAK,KAAK,EAAK,GAAG,EAAK,IAAI,CAAC,GAAGA,EAAG,IAAI,MAAM,GAAGA,EAAG,KAAK,OAAO,CAAC,CAAC;IAElE,EACE,cACE,EAAK,SACL,0BACA,EAAK,SACL,gBACJ;GACF;GAEA,IAAI,EAAI,SAAS,IAAI;IACnB,IAAM,IAAK,EAAI,cAAc,IAAI;IAGjC,AAFA,EAAG,YAAY,EAAI,eAAe,KAAK,EAAI,MAAM,CAAC,GAElD,EAAI,YAAY,CAAE;GACpB;GAMA,AAJA,EAAS,kBAAkB,GAAK,GAAK,IAAM,SAAU,GAAO;IAC1D,OAAO;GACT,CAAC,GAEG,EAAK,WACP,EAAS,WAAW,GACpB,EAAS,kBAAkB,GAAK,GAAM,IAAM,SAAU,GAAO;IAC3D,OAAO;GACT,CAAC;EAEL;EAEA,OAAO;CACT;AACF"}
@@ -0,0 +1,8 @@
1
+ import { WebComponent } from 'solid-ui';
2
+ import { AccountMenuItem } from 'solid-ui/components/account';
3
+ export default class Header extends WebComponent {
4
+ static styles: any;
5
+ accessor menuItems: AccountMenuItem[];
6
+ render(): import('lit-html').TemplateResult<1>;
7
+ }
8
+ //# sourceMappingURL=Header.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Header.d.ts","sourceRoot":"","sources":["../../../src/components/header/Header.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,YAAY,EAAE,MAAM,UAAU,CAAA;AAGtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAA;AAElE,OAAO,6BAA6B,CAAA;AACpC,OAAO,4BAA4B,CAAA;AACnC,OAAO,+BAA+B,CAAA;AACtC,OAAO,0BAA0B,CAAA;AACjC,OAAO,kCAAkC,CAAA;AACzC,OAAO,2BAA2B,CAAA;AAKlC,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,YAAY;IAC9C,MAAM,CAAC,MAAM,MAAS;IAGtB,QAAQ,CAAC,SAAS,EAAE,eAAe,EAAE,CAAK;IAE1C,MAAM;CAoBP"}
@@ -0,0 +1,4 @@
1
+ import { default as Header } from './Header';
2
+ export { Header };
3
+ export default Header;
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/header/index.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,UAAU,CAAA;AAE7B,OAAO,EAAE,MAAM,EAAE,CAAA;AACjB,eAAe,MAAM,CAAA"}
@@ -0,0 +1,2 @@
1
+ const e=require("./ontologyData.cjs.js"),t=require("./preferencesFormText.cjs.js");let n=require("solid-ui"),r=require("rdflib");var i={icon:n.icons.iconBase+`noun_Sliders_341315_000000.svg`,name:`basicPreferences`,label:e=>null,render:(i,s)=>{let c=s.dom,l=s.session.store;function u(e,t){e||d.appendChild(n.widgets.errorMessageBlock(c,t,`#fee`))}let d=c.createElement(`div`),f=a(d,c);function p(e,t){e=e.doc(),l.holds(void 0,void 0,void 0,e)||(0,r.parse)(t,l,e.uri,`text/turtle`,null)}let m=l.sym(`urn:uuid:93774ba1-d3b6-41f2-85b6-4ae27ffd2597#this`);p(m,t.default),p(l.sym(`urn:uuid:93774ba1-d3b6-41f2-85b6-4ae27ffd2597-ONT`),e.default);async function h(){let e=await n.login.ensureLoadedPreferences({dom:c,div:d});if(!e.preferencesFile){console.log(`Not doing private class preferences as no access to preferences file. `+e.preferencesFileError);return}let t=n.widgets.appendForm(c,f,{},e.me,m,e.preferencesFile,u);t.style.borderStyle=`none`;let r=s.session.paneRegistry.byName(`trustedApplications`);r&&d.appendChild(r.render(null,s)),o(d,l,e.me,c)}return h(),d}};function a(e,t){let n=l(e,t,`User types`),r=n.appendChild(t.createElement(`p`));r.innerText=`Here you can self-assign user types to help the data browser know which views you would like to access.`;let i=n.appendChild(t.createElement(`a`));return i.href=`https://github.com/solidos/userguide/#role`,i.innerText=`Read more`,n.appendChild(t.createElement(`div`))}function o(e,t,r,i){let a=l(e,i,`Delete account`),o=t.each(r,n.ns.space(`storage`),null,r.doc()).map(e=>e.value),c=a.appendChild(i.createElement(`ul`));o.forEach(async e=>{let t=await s(e,i);t&&c.appendChild(i.createElement(`li`)).appendChild(t)})}async function s(e,t){let n=t.createElement(`a`);n.textContent=`Delete your account at ${e}`;let r=await c(e);return typeof r==`string`?(n.href=r,n):null}async function c(e){let t=new URL(e),n=new URL(e);return n.pathname=t.pathname=`/account/delete`,n.hostname=n.hostname.split(`.`).slice(1).join(`.`),(await fetch(n.href,{method:`HEAD`})).ok?n.href:(await fetch(t.href,{method:`HEAD`})).ok?t.href:null}function l(e,t,n){let r=e.appendChild(t.createElement(`div`));r.style.border=`0.3em solid #418d99`,r.style.borderRadius=`0.5em`,r.style.padding=`0.7em`,r.style.marginTop=`0.7em`;let i=r.appendChild(t.createElement(`h3`));return i.innerText=n,r}exports.basicPreferencesPane=i,exports.default=i;
2
+ //# sourceMappingURL=basicPreferences.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"basicPreferences.cjs.js","names":[],"sources":["../../src/dashboard/basicPreferences.ts"],"sourcesContent":["import { PaneDefinition } from 'pane-registry'\nimport { IndexedFormula, NamedNode, parse, Store } from 'rdflib'\nimport { icons, login, ns, widgets } from 'solid-ui'\nimport ontologyData from './ontologyData.ttl'\nimport preferencesFormText from './preferencesFormText.ttl'\n\nexport const basicPreferencesPane: PaneDefinition = {\n icon: icons.iconBase + 'noun_Sliders_341315_000000.svg',\n name: 'basicPreferences',\n label: _subject => {\n return null\n },\n\n // Render the pane\n // The subject should be the logged in user.\n render: (subject, context) => {\n const dom = context.dom\n // @ts-ignore\n const store = context.session.store as Store\n\n function complainIfBad (ok: Boolean, mess: any) {\n if (ok) return\n container.appendChild(widgets.errorMessageBlock(dom, mess, '#fee'))\n }\n\n const container = dom.createElement('div')\n\n const formArea = setupUserTypesSection(container, dom)\n\n function loadData (doc: NamedNode, turtle: String) {\n doc = doc.doc() // remove # from URI if nec\n if (!store.holds(undefined, undefined, undefined, doc)) {\n // If not loaded already\n ;(parse as any)(turtle, store, doc.uri, 'text/turtle', null) // Load form directly\n }\n }\n\n const preferencesForm = store.sym(\n 'urn:uuid:93774ba1-d3b6-41f2-85b6-4ae27ffd2597#this'\n )\n loadData(preferencesForm, preferencesFormText)\n\n const ontologyExtra = store.sym(\n 'urn:uuid:93774ba1-d3b6-41f2-85b6-4ae27ffd2597-ONT'\n )\n loadData(ontologyExtra, ontologyData)\n\n async function doRender () {\n const renderContext = await login.ensureLoadedPreferences({\n dom,\n div: container\n })\n if (!renderContext.preferencesFile) {\n // Could be CORS\n console.log(\n 'Not doing private class preferences as no access to preferences file. ' +\n renderContext.preferencesFileError\n )\n return\n }\n const appendedForm = widgets.appendForm(\n dom,\n formArea,\n {},\n renderContext.me,\n preferencesForm,\n renderContext.preferencesFile,\n complainIfBad\n )\n appendedForm.style.borderStyle = 'none'\n\n const trustedApplicationsView = context.session.paneRegistry.byName('trustedApplications')\n if (trustedApplicationsView) {\n container.appendChild(trustedApplicationsView.render(null, context))\n }\n\n // @@ TODO Remove need for casting as any and bang (!) syntax\n addDeleteSection(container, store, renderContext.me!, dom)\n }\n\n doRender()\n\n return container\n }\n}\n\nfunction setupUserTypesSection (\n container: Element,\n dom: HTMLDocument\n): Element {\n const formContainer = createSection(container, dom, 'User types')\n\n const description = formContainer.appendChild(dom.createElement('p'))\n description.innerText = 'Here you can self-assign user types to help the data browser know which views you would like to access.'\n\n const userTypesLink = formContainer.appendChild(dom.createElement('a'))\n userTypesLink.href = 'https://github.com/solidos/userguide/#role'\n userTypesLink.innerText = 'Read more'\n\n const formArea = formContainer.appendChild(dom.createElement('div'))\n\n return formArea\n}\n\nexport default basicPreferencesPane\n\n// ends\n\nfunction addDeleteSection (\n container: HTMLElement,\n store: IndexedFormula,\n profile: NamedNode,\n dom: HTMLDocument\n): void {\n const section = createSection(container, dom, 'Delete account')\n\n const podServerNodes = store.each(profile, ns.space('storage'), null, profile.doc())\n const podServers = podServerNodes.map(node => node.value)\n\n const list = section.appendChild(dom.createElement('ul'))\n\n podServers.forEach(async server => {\n const deletionLink = await generateDeletionLink(server, dom)\n if (deletionLink) {\n const listItem = list.appendChild(dom.createElement('li'))\n listItem.appendChild(deletionLink)\n }\n })\n}\n\nasync function generateDeletionLink (\n podServer: string,\n dom: HTMLDocument\n): Promise<HTMLElement | null> {\n const link = dom.createElement('a')\n link.textContent = `Delete your account at ${podServer}`\n const deletionUrl = await getDeletionUrlForServer(podServer)\n if (typeof deletionUrl !== 'string') {\n return null\n }\n link.href = deletionUrl\n return link\n}\n\n/**\n * Hacky way to get the deletion link to a Pod\n *\n * This function infers the deletion link by assuming the URL structure of Node Solid server.\n * In the future, Solid will hopefully provide a standardised way of discovering the deletion link:\n * https://github.com/solidos/data-interoperability-panel/issues/18\n *\n * If NSS is in multi-user mode (the case on inrupt.net and solid.community), the deletion URL for\n * vincent.dev.inrupt.net would be at dev.inrupt.net/account/delete. In single-user mode, the\n * deletion URL would be at vincent.dev.inrupt.net/account/delete.\n *\n * @param server Pod server containing the user's account.\n * @returns URL of the page that Node Solid Server would offer to delete the account, or null if\n * the URLs we tried give invalid responses.\n */\nasync function getDeletionUrlForServer (\n server: string\n): Promise<string | null> {\n const singleUserUrl = new URL(server)\n const multiUserUrl = new URL(server)\n multiUserUrl.pathname = singleUserUrl.pathname = '/account/delete'\n\n const hostnameParts = multiUserUrl.hostname.split('.')\n // Remove `vincent.` from `vincent.dev.inrupt.net`, for example:\n multiUserUrl.hostname = hostnameParts.slice(1).join('.')\n\n const multiUserNssResponse = await fetch(multiUserUrl.href, {\n method: 'HEAD'\n })\n if (multiUserNssResponse.ok) {\n return multiUserUrl.href\n }\n\n const singleUserNssResponse = await fetch(singleUserUrl.href, {\n method: 'HEAD'\n })\n if (singleUserNssResponse.ok) {\n return singleUserUrl.href\n }\n return null\n}\n\nfunction createSection (\n container: Element,\n dom: HTMLDocument,\n title: string\n): Element {\n const section = container.appendChild(dom.createElement('div'))\n section.style.border = '0.3em solid #418d99'\n section.style.borderRadius = '0.5em'\n section.style.padding = '0.7em'\n section.style.marginTop = '0.7em'\n\n const titleElement = section.appendChild(dom.createElement('h3'))\n titleElement.innerText = title\n\n return section\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { PaneDefinition } from 'pane-registry';
1
+ import { PaneDefinition } from '../../node_modules/pane-registry';
2
2
  export declare const basicPreferencesPane: PaneDefinition;
3
3
  export default basicPreferencesPane;
4
4
  //# sourceMappingURL=basicPreferences.d.ts.map
@@ -0,0 +1,70 @@
1
+ import e from "./ontologyData.esm.js";
2
+ import t from "./preferencesFormText.esm.js";
3
+ import { icons as n, login as r, ns as i, widgets as a } from "solid-ui";
4
+ import { parse as o } from "rdflib";
5
+ //#region src/dashboard/basicPreferences.ts
6
+ var s = {
7
+ icon: n.iconBase + "noun_Sliders_341315_000000.svg",
8
+ name: "basicPreferences",
9
+ label: (e) => null,
10
+ render: (n, i) => {
11
+ let s = i.dom, u = i.session.store;
12
+ function d(e, t) {
13
+ e || f.appendChild(a.errorMessageBlock(s, t, "#fee"));
14
+ }
15
+ let f = s.createElement("div"), p = c(f, s);
16
+ function m(e, t) {
17
+ e = e.doc(), u.holds(void 0, void 0, void 0, e) || o(t, u, e.uri, "text/turtle", null);
18
+ }
19
+ let h = u.sym("urn:uuid:93774ba1-d3b6-41f2-85b6-4ae27ffd2597#this");
20
+ m(h, t), m(u.sym("urn:uuid:93774ba1-d3b6-41f2-85b6-4ae27ffd2597-ONT"), e);
21
+ async function g() {
22
+ let e = await r.ensureLoadedPreferences({
23
+ dom: s,
24
+ div: f
25
+ });
26
+ if (!e.preferencesFile) {
27
+ console.log("Not doing private class preferences as no access to preferences file. " + e.preferencesFileError);
28
+ return;
29
+ }
30
+ let t = a.appendForm(s, p, {}, e.me, h, e.preferencesFile, d);
31
+ t.style.borderStyle = "none";
32
+ let n = i.session.paneRegistry.byName("trustedApplications");
33
+ n && f.appendChild(n.render(null, i)), l(f, u, e.me, s);
34
+ }
35
+ return g(), f;
36
+ }
37
+ };
38
+ function c(e, t) {
39
+ let n = f(e, t, "User types"), r = n.appendChild(t.createElement("p"));
40
+ r.innerText = "Here you can self-assign user types to help the data browser know which views you would like to access.";
41
+ let i = n.appendChild(t.createElement("a"));
42
+ return i.href = "https://github.com/solidos/userguide/#role", i.innerText = "Read more", n.appendChild(t.createElement("div"));
43
+ }
44
+ function l(e, t, n, r) {
45
+ let a = f(e, r, "Delete account"), o = t.each(n, i.space("storage"), null, n.doc()).map((e) => e.value), s = a.appendChild(r.createElement("ul"));
46
+ o.forEach(async (e) => {
47
+ let t = await u(e, r);
48
+ t && s.appendChild(r.createElement("li")).appendChild(t);
49
+ });
50
+ }
51
+ async function u(e, t) {
52
+ let n = t.createElement("a");
53
+ n.textContent = `Delete your account at ${e}`;
54
+ let r = await d(e);
55
+ return typeof r == "string" ? (n.href = r, n) : null;
56
+ }
57
+ async function d(e) {
58
+ let t = new URL(e), n = new URL(e);
59
+ return n.pathname = t.pathname = "/account/delete", n.hostname = n.hostname.split(".").slice(1).join("."), (await fetch(n.href, { method: "HEAD" })).ok ? n.href : (await fetch(t.href, { method: "HEAD" })).ok ? t.href : null;
60
+ }
61
+ function f(e, t, n) {
62
+ let r = e.appendChild(t.createElement("div"));
63
+ r.style.border = "0.3em solid #418d99", r.style.borderRadius = "0.5em", r.style.padding = "0.7em", r.style.marginTop = "0.7em";
64
+ let i = r.appendChild(t.createElement("h3"));
65
+ return i.innerText = n, r;
66
+ }
67
+ //#endregion
68
+ export { s as basicPreferencesPane, s as default };
69
+
70
+ //# sourceMappingURL=basicPreferences.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"basicPreferences.esm.js","names":[],"sources":["../../src/dashboard/basicPreferences.ts"],"sourcesContent":["import { PaneDefinition } from 'pane-registry'\nimport { IndexedFormula, NamedNode, parse, Store } from 'rdflib'\nimport { icons, login, ns, widgets } from 'solid-ui'\nimport ontologyData from './ontologyData.ttl'\nimport preferencesFormText from './preferencesFormText.ttl'\n\nexport const basicPreferencesPane: PaneDefinition = {\n icon: icons.iconBase + 'noun_Sliders_341315_000000.svg',\n name: 'basicPreferences',\n label: _subject => {\n return null\n },\n\n // Render the pane\n // The subject should be the logged in user.\n render: (subject, context) => {\n const dom = context.dom\n // @ts-ignore\n const store = context.session.store as Store\n\n function complainIfBad (ok: Boolean, mess: any) {\n if (ok) return\n container.appendChild(widgets.errorMessageBlock(dom, mess, '#fee'))\n }\n\n const container = dom.createElement('div')\n\n const formArea = setupUserTypesSection(container, dom)\n\n function loadData (doc: NamedNode, turtle: String) {\n doc = doc.doc() // remove # from URI if nec\n if (!store.holds(undefined, undefined, undefined, doc)) {\n // If not loaded already\n ;(parse as any)(turtle, store, doc.uri, 'text/turtle', null) // Load form directly\n }\n }\n\n const preferencesForm = store.sym(\n 'urn:uuid:93774ba1-d3b6-41f2-85b6-4ae27ffd2597#this'\n )\n loadData(preferencesForm, preferencesFormText)\n\n const ontologyExtra = store.sym(\n 'urn:uuid:93774ba1-d3b6-41f2-85b6-4ae27ffd2597-ONT'\n )\n loadData(ontologyExtra, ontologyData)\n\n async function doRender () {\n const renderContext = await login.ensureLoadedPreferences({\n dom,\n div: container\n })\n if (!renderContext.preferencesFile) {\n // Could be CORS\n console.log(\n 'Not doing private class preferences as no access to preferences file. ' +\n renderContext.preferencesFileError\n )\n return\n }\n const appendedForm = widgets.appendForm(\n dom,\n formArea,\n {},\n renderContext.me,\n preferencesForm,\n renderContext.preferencesFile,\n complainIfBad\n )\n appendedForm.style.borderStyle = 'none'\n\n const trustedApplicationsView = context.session.paneRegistry.byName('trustedApplications')\n if (trustedApplicationsView) {\n container.appendChild(trustedApplicationsView.render(null, context))\n }\n\n // @@ TODO Remove need for casting as any and bang (!) syntax\n addDeleteSection(container, store, renderContext.me!, dom)\n }\n\n doRender()\n\n return container\n }\n}\n\nfunction setupUserTypesSection (\n container: Element,\n dom: HTMLDocument\n): Element {\n const formContainer = createSection(container, dom, 'User types')\n\n const description = formContainer.appendChild(dom.createElement('p'))\n description.innerText = 'Here you can self-assign user types to help the data browser know which views you would like to access.'\n\n const userTypesLink = formContainer.appendChild(dom.createElement('a'))\n userTypesLink.href = 'https://github.com/solidos/userguide/#role'\n userTypesLink.innerText = 'Read more'\n\n const formArea = formContainer.appendChild(dom.createElement('div'))\n\n return formArea\n}\n\nexport default basicPreferencesPane\n\n// ends\n\nfunction addDeleteSection (\n container: HTMLElement,\n store: IndexedFormula,\n profile: NamedNode,\n dom: HTMLDocument\n): void {\n const section = createSection(container, dom, 'Delete account')\n\n const podServerNodes = store.each(profile, ns.space('storage'), null, profile.doc())\n const podServers = podServerNodes.map(node => node.value)\n\n const list = section.appendChild(dom.createElement('ul'))\n\n podServers.forEach(async server => {\n const deletionLink = await generateDeletionLink(server, dom)\n if (deletionLink) {\n const listItem = list.appendChild(dom.createElement('li'))\n listItem.appendChild(deletionLink)\n }\n })\n}\n\nasync function generateDeletionLink (\n podServer: string,\n dom: HTMLDocument\n): Promise<HTMLElement | null> {\n const link = dom.createElement('a')\n link.textContent = `Delete your account at ${podServer}`\n const deletionUrl = await getDeletionUrlForServer(podServer)\n if (typeof deletionUrl !== 'string') {\n return null\n }\n link.href = deletionUrl\n return link\n}\n\n/**\n * Hacky way to get the deletion link to a Pod\n *\n * This function infers the deletion link by assuming the URL structure of Node Solid server.\n * In the future, Solid will hopefully provide a standardised way of discovering the deletion link:\n * https://github.com/solidos/data-interoperability-panel/issues/18\n *\n * If NSS is in multi-user mode (the case on inrupt.net and solid.community), the deletion URL for\n * vincent.dev.inrupt.net would be at dev.inrupt.net/account/delete. In single-user mode, the\n * deletion URL would be at vincent.dev.inrupt.net/account/delete.\n *\n * @param server Pod server containing the user's account.\n * @returns URL of the page that Node Solid Server would offer to delete the account, or null if\n * the URLs we tried give invalid responses.\n */\nasync function getDeletionUrlForServer (\n server: string\n): Promise<string | null> {\n const singleUserUrl = new URL(server)\n const multiUserUrl = new URL(server)\n multiUserUrl.pathname = singleUserUrl.pathname = '/account/delete'\n\n const hostnameParts = multiUserUrl.hostname.split('.')\n // Remove `vincent.` from `vincent.dev.inrupt.net`, for example:\n multiUserUrl.hostname = hostnameParts.slice(1).join('.')\n\n const multiUserNssResponse = await fetch(multiUserUrl.href, {\n method: 'HEAD'\n })\n if (multiUserNssResponse.ok) {\n return multiUserUrl.href\n }\n\n const singleUserNssResponse = await fetch(singleUserUrl.href, {\n method: 'HEAD'\n })\n if (singleUserNssResponse.ok) {\n return singleUserUrl.href\n }\n return null\n}\n\nfunction createSection (\n container: Element,\n dom: HTMLDocument,\n title: string\n): Element {\n const section = container.appendChild(dom.createElement('div'))\n section.style.border = '0.3em solid #418d99'\n section.style.borderRadius = '0.5em'\n section.style.padding = '0.7em'\n section.style.marginTop = '0.7em'\n\n const titleElement = section.appendChild(dom.createElement('h3'))\n titleElement.innerText = title\n\n return section\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { PaneDefinition } from 'pane-registry';
1
+ import { PaneDefinition } from '../../node_modules/pane-registry';
2
2
  export declare const dashboardPane: PaneDefinition;
3
3
  export default dashboardPane;
4
4
  //# sourceMappingURL=dashboardPane.d.ts.map
@@ -1,3 +1,3 @@
1
- import { Fetcher, IndexedFormula, NamedNode } from 'rdflib';
1
+ import { Fetcher, IndexedFormula, NamedNode } from '../../node_modules/rdflib';
2
2
  export declare function generateHomepage(uri: NamedNode, store: IndexedFormula, fetcher: Fetcher): Promise<HTMLElement>;
3
3
  //# sourceMappingURL=homepage.d.ts.map