solid-panes 5.0.0 → 5.1.0-1

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 (408) hide show
  1. package/README.md +84 -2
  2. package/dist/RDFXMLPane2.cjs.js.map +1 -1
  3. package/dist/_virtual/~icons/lucide/cake.cjs.js +2 -0
  4. package/dist/_virtual/~icons/lucide/cake.cjs.js.map +1 -0
  5. package/dist/_virtual/~icons/lucide/cake.esm.js +11 -0
  6. package/dist/_virtual/~icons/lucide/cake.esm.js.map +1 -0
  7. package/dist/_virtual/~icons/lucide/camera.cjs.js +2 -0
  8. package/dist/_virtual/~icons/lucide/camera.cjs.js.map +1 -0
  9. package/dist/_virtual/~icons/lucide/camera.esm.js +11 -0
  10. package/dist/_virtual/~icons/lucide/camera.esm.js.map +1 -0
  11. package/dist/_virtual/~icons/lucide/circle-user-round.cjs.js +2 -0
  12. package/dist/_virtual/~icons/lucide/circle-user-round.cjs.js.map +1 -0
  13. package/dist/_virtual/~icons/lucide/circle-user-round.esm.js +11 -0
  14. package/dist/_virtual/~icons/lucide/circle-user-round.esm.js.map +1 -0
  15. package/dist/_virtual/~icons/lucide/mail.cjs.js +2 -0
  16. package/dist/_virtual/~icons/lucide/mail.cjs.js.map +1 -0
  17. package/dist/_virtual/~icons/lucide/mail.esm.js +11 -0
  18. package/dist/_virtual/~icons/lucide/mail.esm.js.map +1 -0
  19. package/dist/_virtual/~icons/lucide/map-pin.cjs.js +2 -0
  20. package/dist/_virtual/~icons/lucide/map-pin.cjs.js.map +1 -0
  21. package/dist/_virtual/~icons/lucide/map-pin.esm.js +11 -0
  22. package/dist/_virtual/~icons/lucide/map-pin.esm.js.map +1 -0
  23. package/dist/_virtual/~icons/lucide/phone.cjs.js +2 -0
  24. package/dist/_virtual/~icons/lucide/phone.cjs.js.map +1 -0
  25. package/dist/_virtual/~icons/lucide/phone.esm.js +11 -0
  26. package/dist/_virtual/~icons/lucide/phone.esm.js.map +1 -0
  27. package/dist/_virtual/~icons/lucide/user-round-plus.cjs.js +2 -0
  28. package/dist/_virtual/~icons/lucide/user-round-plus.cjs.js.map +1 -0
  29. package/dist/_virtual/~icons/lucide/user-round-plus.esm.js +11 -0
  30. package/dist/_virtual/~icons/lucide/user-round-plus.esm.js.map +1 -0
  31. package/dist/_virtual/~icons/lucide/x.cjs.js +2 -0
  32. package/dist/_virtual/~icons/lucide/x.cjs.js.map +1 -0
  33. package/dist/_virtual/~icons/lucide/x.esm.js +11 -0
  34. package/dist/_virtual/~icons/lucide/x.esm.js.map +1 -0
  35. package/dist/audio/audioPane.cjs.js +1 -1
  36. package/dist/audio/audioPane.cjs.js.map +1 -1
  37. package/dist/audio/audioPane.esm.js +1 -5
  38. package/dist/audio/audioPane.esm.js.map +1 -1
  39. package/dist/classInstancePane.cjs.js.map +1 -1
  40. package/dist/components/editor-card/EditorCard.cjs.js +1 -1
  41. package/dist/components/editor-card/EditorCard.cjs.js.map +1 -1
  42. package/dist/components/editor-card/EditorCard.esm.js +4 -7
  43. package/dist/components/editor-card/EditorCard.esm.js.map +1 -1
  44. package/dist/components/file-explorer-header/FileExplorerHeader.cjs.js +1 -1
  45. package/dist/components/file-explorer-header/FileExplorerHeader.cjs.js.map +1 -1
  46. package/dist/components/file-explorer-header/FileExplorerHeader.esm.js +2 -2
  47. package/dist/components/file-explorer-header/FileExplorerHeaderControls.cjs.js +1 -1
  48. package/dist/components/file-explorer-header/FileExplorerHeaderControls.cjs.js.map +1 -1
  49. package/dist/components/file-explorer-header/FileExplorerHeaderControls.esm.js +2 -2
  50. package/dist/components/file-explorer-header/FileExplorerHeaderSummary.cjs.js +1 -1
  51. package/dist/components/file-explorer-header/FileExplorerHeaderSummary.cjs.js.map +1 -1
  52. package/dist/components/file-explorer-header/FileExplorerHeaderSummary.esm.js +2 -2
  53. package/dist/components/file-explorer-header/FileExplorerProvider.cjs.js +5 -5
  54. package/dist/components/file-explorer-header/FileExplorerProvider.cjs.js.map +1 -1
  55. package/dist/components/file-explorer-header/FileExplorerProvider.d.ts.map +1 -1
  56. package/dist/components/file-explorer-header/FileExplorerProvider.esm.js +97 -96
  57. package/dist/components/file-explorer-header/FileExplorerProvider.esm.js.map +1 -1
  58. package/dist/components/header/Header.cjs.js +1 -1
  59. package/dist/components/header/Header.cjs.js.map +1 -1
  60. package/dist/components/header/Header.esm.js +2 -2
  61. package/dist/components/header/Header.styles.cjs.js +1 -1
  62. package/dist/components/header/Header.styles.cjs.js.map +1 -1
  63. package/dist/components/header/Header.styles.esm.js +1 -1
  64. package/dist/components/header/Header.styles.esm.js.map +1 -1
  65. package/dist/components/navbar/Navbar.cjs.js +1 -1
  66. package/dist/components/navbar/Navbar.cjs.js.map +1 -1
  67. package/dist/components/navbar/Navbar.d.ts +2 -0
  68. package/dist/components/navbar/Navbar.d.ts.map +1 -1
  69. package/dist/components/navbar/Navbar.esm.js +2 -2
  70. package/dist/components/navbar/Navbar.esm.js.map +1 -1
  71. package/dist/components/navbar/Navbar.styles.cjs.js +1 -1
  72. package/dist/components/navbar/Navbar.styles.cjs.js.map +1 -1
  73. package/dist/components/navbar/Navbar.styles.esm.js +1 -1
  74. package/dist/components/navbar/Navbar.styles.esm.js.map +1 -1
  75. package/dist/components/profile-heading/ProfileHeading.cjs.js +95 -0
  76. package/dist/components/profile-heading/ProfileHeading.cjs.js.map +1 -0
  77. package/dist/components/profile-heading/ProfileHeading.d.ts +45 -0
  78. package/dist/components/profile-heading/ProfileHeading.d.ts.map +1 -0
  79. package/dist/components/profile-heading/ProfileHeading.esm.js +480 -0
  80. package/dist/components/profile-heading/ProfileHeading.esm.js.map +1 -0
  81. package/dist/components/profile-heading/ProfileHeading.styles.cjs.js +2 -0
  82. package/dist/components/profile-heading/ProfileHeading.styles.cjs.js.map +1 -0
  83. package/dist/components/profile-heading/ProfileHeading.styles.esm.js +7 -0
  84. package/dist/components/profile-heading/ProfileHeading.styles.esm.js.map +1 -0
  85. package/dist/components/profile-heading/editor/index.d.ts +3 -0
  86. package/dist/components/profile-heading/editor/index.d.ts.map +1 -0
  87. package/dist/components/profile-heading/editor/sections/contactInfo/types.d.ts +44 -0
  88. package/dist/components/profile-heading/editor/sections/contactInfo/types.d.ts.map +1 -0
  89. package/dist/components/profile-heading/editor/sections/heading/HeadingEditDialog.cjs.js +297 -0
  90. package/dist/components/profile-heading/editor/sections/heading/HeadingEditDialog.cjs.js.map +1 -0
  91. package/dist/components/profile-heading/editor/sections/heading/HeadingEditDialog.d.ts +5 -0
  92. package/dist/components/profile-heading/editor/sections/heading/HeadingEditDialog.d.ts.map +1 -0
  93. package/dist/components/profile-heading/editor/sections/heading/HeadingEditDialog.esm.js +642 -0
  94. package/dist/components/profile-heading/editor/sections/heading/HeadingEditDialog.esm.js.map +1 -0
  95. package/dist/components/profile-heading/editor/sections/heading/dateHelpers.cjs.js +2 -0
  96. package/dist/components/profile-heading/editor/sections/heading/dateHelpers.cjs.js.map +1 -0
  97. package/dist/components/profile-heading/editor/sections/heading/dateHelpers.d.ts +4 -0
  98. package/dist/components/profile-heading/editor/sections/heading/dateHelpers.d.ts.map +1 -0
  99. package/dist/components/profile-heading/editor/sections/heading/dateHelpers.esm.js +16 -0
  100. package/dist/components/profile-heading/editor/sections/heading/dateHelpers.esm.js.map +1 -0
  101. package/dist/components/profile-heading/editor/sections/heading/imageHelpers.cjs.js +2 -0
  102. package/dist/components/profile-heading/editor/sections/heading/imageHelpers.cjs.js.map +1 -0
  103. package/dist/components/profile-heading/editor/sections/heading/imageHelpers.d.ts +5 -0
  104. package/dist/components/profile-heading/editor/sections/heading/imageHelpers.d.ts.map +1 -0
  105. package/dist/components/profile-heading/editor/sections/heading/imageHelpers.esm.js +76 -0
  106. package/dist/components/profile-heading/editor/sections/heading/imageHelpers.esm.js.map +1 -0
  107. package/dist/components/profile-heading/editor/sections/heading/imagePreview.cjs.js +19 -0
  108. package/dist/components/profile-heading/editor/sections/heading/imagePreview.cjs.js.map +1 -0
  109. package/dist/components/profile-heading/editor/sections/heading/imagePreview.d.ts +2 -0
  110. package/dist/components/profile-heading/editor/sections/heading/imagePreview.d.ts.map +1 -0
  111. package/dist/components/profile-heading/editor/sections/heading/imagePreview.esm.js +28 -0
  112. package/dist/components/profile-heading/editor/sections/heading/imagePreview.esm.js.map +1 -0
  113. package/dist/components/profile-heading/editor/sections/heading/mutations.cjs.js +2 -0
  114. package/dist/components/profile-heading/editor/sections/heading/mutations.cjs.js.map +1 -0
  115. package/dist/components/profile-heading/editor/sections/heading/mutations.d.ts +4 -0
  116. package/dist/components/profile-heading/editor/sections/heading/mutations.d.ts.map +1 -0
  117. package/dist/components/profile-heading/editor/sections/heading/mutations.esm.js +151 -0
  118. package/dist/components/profile-heading/editor/sections/heading/mutations.esm.js.map +1 -0
  119. package/dist/components/profile-heading/editor/sections/heading/types.d.ts +34 -0
  120. package/dist/components/profile-heading/editor/sections/heading/types.d.ts.map +1 -0
  121. package/dist/components/profile-heading/editor/sections/shared/contactTypeUtils.cjs.js +2 -0
  122. package/dist/components/profile-heading/editor/sections/shared/contactTypeUtils.cjs.js.map +1 -0
  123. package/dist/components/profile-heading/editor/sections/shared/contactTypeUtils.d.ts +7 -0
  124. package/dist/components/profile-heading/editor/sections/shared/contactTypeUtils.d.ts.map +1 -0
  125. package/dist/components/profile-heading/editor/sections/shared/contactTypeUtils.esm.js +20 -0
  126. package/dist/components/profile-heading/editor/sections/shared/contactTypeUtils.esm.js.map +1 -0
  127. package/dist/components/profile-heading/editor/sections/shared/idNodeFactory.cjs.js +2 -0
  128. package/dist/components/profile-heading/editor/sections/shared/idNodeFactory.cjs.js.map +1 -0
  129. package/dist/components/profile-heading/editor/sections/shared/idNodeFactory.d.ts +3 -0
  130. package/dist/components/profile-heading/editor/sections/shared/idNodeFactory.d.ts.map +1 -0
  131. package/dist/components/profile-heading/editor/sections/shared/idNodeFactory.esm.js +11 -0
  132. package/dist/components/profile-heading/editor/sections/shared/idNodeFactory.esm.js.map +1 -0
  133. package/dist/components/profile-heading/editor/sections/shared/phoneCountries.cjs.js +2 -0
  134. package/dist/components/profile-heading/editor/sections/shared/phoneCountries.cjs.js.map +1 -0
  135. package/dist/components/profile-heading/editor/sections/shared/phoneCountries.d.ts +20 -0
  136. package/dist/components/profile-heading/editor/sections/shared/phoneCountries.d.ts.map +1 -0
  137. package/dist/components/profile-heading/editor/sections/shared/phoneCountries.esm.js +1291 -0
  138. package/dist/components/profile-heading/editor/sections/shared/phoneCountries.esm.js.map +1 -0
  139. package/dist/components/profile-heading/editor/sections/shared/rdfMutationHelpers.cjs.js +2 -0
  140. package/dist/components/profile-heading/editor/sections/shared/rdfMutationHelpers.cjs.js.map +1 -0
  141. package/dist/components/profile-heading/editor/sections/shared/rdfMutationHelpers.d.ts +45 -0
  142. package/dist/components/profile-heading/editor/sections/shared/rdfMutationHelpers.d.ts.map +1 -0
  143. package/dist/components/profile-heading/editor/sections/shared/rdfMutationHelpers.esm.js +211 -0
  144. package/dist/components/profile-heading/editor/sections/shared/rdfMutationHelpers.esm.js.map +1 -0
  145. package/dist/components/profile-heading/editor/sections/shared/rowState.cjs.js +2 -0
  146. package/dist/components/profile-heading/editor/sections/shared/rowState.cjs.js.map +1 -0
  147. package/dist/components/profile-heading/editor/sections/shared/rowState.d.ts +21 -0
  148. package/dist/components/profile-heading/editor/sections/shared/rowState.d.ts.map +1 -0
  149. package/dist/components/profile-heading/editor/sections/shared/rowState.esm.js +18 -0
  150. package/dist/components/profile-heading/editor/sections/shared/rowState.esm.js.map +1 -0
  151. package/dist/components/profile-heading/editor/sections/shared/sanitizeUtils.cjs.js +2 -0
  152. package/dist/components/profile-heading/editor/sections/shared/sanitizeUtils.cjs.js.map +1 -0
  153. package/dist/components/profile-heading/editor/sections/shared/sanitizeUtils.d.ts +5 -0
  154. package/dist/components/profile-heading/editor/sections/shared/sanitizeUtils.d.ts.map +1 -0
  155. package/dist/components/profile-heading/editor/sections/shared/sanitizeUtils.esm.js +18 -0
  156. package/dist/components/profile-heading/editor/sections/shared/sanitizeUtils.esm.js.map +1 -0
  157. package/dist/components/profile-heading/editor/sections/shared/types.d.ts +31 -0
  158. package/dist/components/profile-heading/editor/sections/shared/types.d.ts.map +1 -0
  159. package/dist/components/profile-heading/editor/textUtils.cjs.js +2 -0
  160. package/dist/components/profile-heading/editor/textUtils.cjs.js.map +1 -0
  161. package/dist/components/profile-heading/editor/textUtils.d.ts +6 -0
  162. package/dist/components/profile-heading/editor/textUtils.d.ts.map +1 -0
  163. package/dist/components/profile-heading/editor/textUtils.esm.js +26 -0
  164. package/dist/components/profile-heading/editor/textUtils.esm.js.map +1 -0
  165. package/dist/components/profile-heading/editor/texts/buttonTexts.d.ts +9 -0
  166. package/dist/components/profile-heading/editor/texts/buttonTexts.d.ts.map +1 -0
  167. package/dist/components/profile-heading/editor/texts/dialogTexts.cjs.js +2 -0
  168. package/dist/components/profile-heading/editor/texts/dialogTexts.cjs.js.map +1 -0
  169. package/dist/components/profile-heading/editor/texts/dialogTexts.d.ts +14 -0
  170. package/dist/components/profile-heading/editor/texts/dialogTexts.d.ts.map +1 -0
  171. package/dist/components/profile-heading/editor/texts/dialogTexts.esm.js +6 -0
  172. package/dist/components/profile-heading/editor/texts/dialogTexts.esm.js.map +1 -0
  173. package/dist/components/profile-heading/editor/texts/messageTexts.cjs.js +2 -0
  174. package/dist/components/profile-heading/editor/texts/messageTexts.cjs.js.map +1 -0
  175. package/dist/components/profile-heading/editor/texts/messageTexts.d.ts +42 -0
  176. package/dist/components/profile-heading/editor/texts/messageTexts.d.ts.map +1 -0
  177. package/dist/components/profile-heading/editor/texts/messageTexts.esm.js +6 -0
  178. package/dist/components/profile-heading/editor/texts/messageTexts.esm.js.map +1 -0
  179. package/dist/components/profile-heading/editor/texts/profileTexts.d.ts +14 -0
  180. package/dist/components/profile-heading/editor/texts/profileTexts.d.ts.map +1 -0
  181. package/dist/components/profile-heading/editor/texts/qrCodeTexts.d.ts +2 -0
  182. package/dist/components/profile-heading/editor/texts/qrCodeTexts.d.ts.map +1 -0
  183. package/dist/components/profile-heading/editor/texts.d.ts +6 -0
  184. package/dist/components/profile-heading/editor/texts.d.ts.map +1 -0
  185. package/dist/components/profile-heading/editor/ui/dialog.d.ts +41 -0
  186. package/dist/components/profile-heading/editor/ui/dialog.d.ts.map +1 -0
  187. package/dist/components/profile-heading/editor/ui/dialog2.cjs.js +17 -0
  188. package/dist/components/profile-heading/editor/ui/dialog2.cjs.js.map +1 -0
  189. package/dist/components/profile-heading/editor/ui/dialog2.esm.js +263 -0
  190. package/dist/components/profile-heading/editor/ui/dialog2.esm.js.map +1 -0
  191. package/dist/components/profile-heading/editor/ui/spinner.cjs.js +5 -0
  192. package/dist/components/profile-heading/editor/ui/spinner.cjs.js.map +1 -0
  193. package/dist/components/profile-heading/editor/ui/spinner.d.ts +3 -0
  194. package/dist/components/profile-heading/editor/ui/spinner.d.ts.map +1 -0
  195. package/dist/components/profile-heading/editor/ui/spinner.esm.js +12 -0
  196. package/dist/components/profile-heading/editor/ui/spinner.esm.js.map +1 -0
  197. package/dist/components/profile-heading/editor/utils/errorDisplay.cjs.js +2 -0
  198. package/dist/components/profile-heading/editor/utils/errorDisplay.cjs.js.map +1 -0
  199. package/dist/components/profile-heading/editor/utils/errorDisplay.d.ts +2 -0
  200. package/dist/components/profile-heading/editor/utils/errorDisplay.d.ts.map +1 -0
  201. package/dist/components/profile-heading/editor/utils/errorDisplay.esm.js +18 -0
  202. package/dist/components/profile-heading/editor/utils/errorDisplay.esm.js.map +1 -0
  203. package/dist/components/profile-heading/friendActions.cjs.js +2 -0
  204. package/dist/components/profile-heading/friendActions.cjs.js.map +1 -0
  205. package/dist/components/profile-heading/friendActions.d.ts +11 -0
  206. package/dist/components/profile-heading/friendActions.d.ts.map +1 -0
  207. package/dist/components/profile-heading/friendActions.esm.js +32 -0
  208. package/dist/components/profile-heading/friendActions.esm.js.map +1 -0
  209. package/dist/components/profile-heading/index.cjs.js +1 -0
  210. package/dist/components/profile-heading/index.d.ts +5 -0
  211. package/dist/components/profile-heading/index.d.ts.map +1 -0
  212. package/dist/components/profile-heading/index.esm.js +1 -0
  213. package/dist/components/profile-heading/profileHeadingData.cjs.js +2 -0
  214. package/dist/components/profile-heading/profileHeadingData.cjs.js.map +1 -0
  215. package/dist/components/profile-heading/profileHeadingData.d.ts +6 -0
  216. package/dist/components/profile-heading/profileHeadingData.d.ts.map +1 -0
  217. package/dist/components/profile-heading/profileHeadingData.esm.js +81 -0
  218. package/dist/components/profile-heading/profileHeadingData.esm.js.map +1 -0
  219. package/dist/components/resource-actions-menu/ResourceActionsMenu.cjs.js +1 -1
  220. package/dist/components/resource-actions-menu/ResourceActionsMenu.cjs.js.map +1 -1
  221. package/dist/components/resource-actions-menu/ResourceActionsMenu.esm.js +2 -2
  222. package/dist/dashboard/basicPreferences.cjs.js.map +1 -1
  223. package/dist/dashboard/dashboardPane.cjs.js.map +1 -1
  224. package/dist/dashboard/homepage.cjs.js.map +1 -1
  225. package/dist/dataContentPane2.cjs.js.map +1 -1
  226. package/dist/defaultPane2.cjs.js.map +1 -1
  227. package/dist/dokieli/dokieliPane.cjs.js.map +1 -1
  228. package/dist/form/pane.cjs.js.map +1 -1
  229. package/dist/home/homePane.cjs.js.map +1 -1
  230. package/dist/humanReadablePane2.cjs.js.map +1 -1
  231. package/dist/icons/folder.cjs.js.map +1 -1
  232. package/dist/icons/friends.cjs.js.map +1 -1
  233. package/dist/icons/person.cjs.js.map +1 -1
  234. package/dist/imagePane2.cjs.js.map +1 -1
  235. package/dist/index.cjs.js +1 -1
  236. package/dist/index.cjs.js.map +1 -1
  237. package/dist/index.d.ts +2 -1
  238. package/dist/index.d.ts.map +1 -1
  239. package/dist/index.esm.js +15 -14
  240. package/dist/index.esm.js.map +1 -1
  241. package/dist/internal/internalPane2.cjs.js +1 -1
  242. package/dist/internal/internalPane2.cjs.js.map +1 -1
  243. package/dist/internal/internalPane2.esm.js +2 -5
  244. package/dist/internal/internalPane2.esm.js.map +1 -1
  245. package/dist/mainPage/header.cjs.js +1 -1
  246. package/dist/mainPage/header.cjs.js.map +1 -1
  247. package/dist/mainPage/header.d.ts +2 -2
  248. package/dist/mainPage/header.d.ts.map +1 -1
  249. package/dist/mainPage/header.esm.js +48 -44
  250. package/dist/mainPage/header.esm.js.map +1 -1
  251. package/dist/mainPage/index.cjs.js +1 -1
  252. package/dist/mainPage/index.cjs.js.map +1 -1
  253. package/dist/mainPage/index.d.ts.map +1 -1
  254. package/dist/mainPage/index.esm.js +27 -21
  255. package/dist/mainPage/index.esm.js.map +1 -1
  256. package/dist/mainPage/navbar.cjs.js +1 -1
  257. package/dist/mainPage/navbar.cjs.js.map +1 -1
  258. package/dist/mainPage/navbar.d.ts +3 -2
  259. package/dist/mainPage/navbar.d.ts.map +1 -1
  260. package/dist/mainPage/navbar.esm.js +77 -42
  261. package/dist/mainPage/navbar.esm.js.map +1 -1
  262. package/dist/mainPage/navigation.cjs.js +2 -0
  263. package/dist/mainPage/navigation.cjs.js.map +1 -0
  264. package/dist/mainPage/navigation.d.ts +6 -0
  265. package/dist/mainPage/navigation.d.ts.map +1 -0
  266. package/dist/mainPage/navigation.esm.js +22 -0
  267. package/dist/mainPage/navigation.esm.js.map +1 -0
  268. package/dist/mainPage/profileHeading.d.ts +5 -0
  269. package/dist/mainPage/profileHeading.d.ts.map +1 -0
  270. package/dist/mainPage/profileHeading2.cjs.js +2 -0
  271. package/dist/mainPage/profileHeading2.cjs.js.map +1 -0
  272. package/dist/mainPage/profileHeading2.esm.js +158 -0
  273. package/dist/mainPage/profileHeading2.esm.js.map +1 -0
  274. package/dist/n3Pane2.cjs.js.map +1 -1
  275. package/dist/navigation/browserEvents.cjs.js +2 -0
  276. package/dist/navigation/browserEvents.cjs.js.map +1 -0
  277. package/dist/navigation/browserEvents.d.ts +15 -0
  278. package/dist/navigation/browserEvents.d.ts.map +1 -0
  279. package/dist/navigation/browserEvents.esm.js +32 -0
  280. package/dist/navigation/browserEvents.esm.js.map +1 -0
  281. package/dist/navigation/chrome.cjs.js +2 -0
  282. package/dist/navigation/chrome.cjs.js.map +1 -0
  283. package/dist/navigation/chrome.d.ts +69 -0
  284. package/dist/navigation/chrome.d.ts.map +1 -0
  285. package/dist/navigation/chrome.esm.js +43 -0
  286. package/dist/navigation/chrome.esm.js.map +1 -0
  287. package/dist/navigation/controller.cjs.js +2 -0
  288. package/dist/navigation/controller.cjs.js.map +1 -0
  289. package/dist/navigation/controller.d.ts +51 -0
  290. package/dist/navigation/controller.d.ts.map +1 -0
  291. package/dist/navigation/controller.esm.js +45 -0
  292. package/dist/navigation/controller.esm.js.map +1 -0
  293. package/dist/navigation/events.cjs.js +2 -0
  294. package/dist/navigation/events.cjs.js.map +1 -0
  295. package/dist/navigation/events.d.ts +17 -0
  296. package/dist/navigation/events.d.ts.map +1 -0
  297. package/dist/navigation/events.esm.js +18 -0
  298. package/dist/navigation/events.esm.js.map +1 -0
  299. package/dist/navigation/navbarVisibility.cjs.js +2 -0
  300. package/dist/navigation/navbarVisibility.cjs.js.map +1 -0
  301. package/dist/navigation/navbarVisibility.d.ts +5 -0
  302. package/dist/navigation/navbarVisibility.d.ts.map +1 -0
  303. package/dist/navigation/navbarVisibility.esm.js +26 -0
  304. package/dist/navigation/navbarVisibility.esm.js.map +1 -0
  305. package/dist/navigation/options.cjs.js +2 -0
  306. package/dist/navigation/options.cjs.js.map +1 -0
  307. package/dist/navigation/options.d.ts +16 -0
  308. package/dist/navigation/options.d.ts.map +1 -0
  309. package/dist/navigation/options.esm.js +8 -0
  310. package/dist/navigation/options.esm.js.map +1 -0
  311. package/dist/navigation/podContext.cjs.js +2 -0
  312. package/dist/navigation/podContext.cjs.js.map +1 -0
  313. package/dist/navigation/podContext.d.ts +21 -0
  314. package/dist/navigation/podContext.d.ts.map +1 -0
  315. package/dist/navigation/podContext.esm.js +62 -0
  316. package/dist/navigation/podContext.esm.js.map +1 -0
  317. package/dist/navigation/state.cjs.js +2 -0
  318. package/dist/navigation/state.cjs.js.map +1 -0
  319. package/dist/navigation/state.d.ts +40 -0
  320. package/dist/navigation/state.d.ts.map +1 -0
  321. package/dist/navigation/state.esm.js +41 -0
  322. package/dist/navigation/state.esm.js.map +1 -0
  323. package/dist/outline/context.cjs.js.map +1 -1
  324. package/dist/outline/manager2.cjs.js +1 -1
  325. package/dist/outline/manager2.cjs.js.map +1 -1
  326. package/dist/outline/manager2.esm.js +387 -353
  327. package/dist/outline/manager2.esm.js.map +1 -1
  328. package/dist/outline/outlineIcons.cjs.js.map +1 -1
  329. package/dist/outline/propertyViews.cjs.js.map +1 -1
  330. package/dist/outline/queryByExample.cjs.js.map +1 -1
  331. package/dist/outline/userInput.cjs.js +1 -1
  332. package/dist/outline/userInput.cjs.js.map +1 -1
  333. package/dist/outline/userInput.esm.js +12 -13
  334. package/dist/outline/userInput.esm.js.map +1 -1
  335. package/dist/outline/viewAsImage.cjs.js.map +1 -1
  336. package/dist/outline/viewAsMbox.cjs.js.map +1 -1
  337. package/dist/pad/padPane2.cjs.js +1 -1
  338. package/dist/pad/padPane2.cjs.js.map +1 -1
  339. package/dist/pad/padPane2.esm.js +2 -6
  340. package/dist/pad/padPane2.esm.js.map +1 -1
  341. package/dist/playlist/playlistPane.cjs.js.map +1 -1
  342. package/dist/registerPanes.cjs.js.map +1 -1
  343. package/dist/schedule/schedulePane2.cjs.js +1 -1
  344. package/dist/schedule/schedulePane2.cjs.js.map +1 -1
  345. package/dist/schedule/schedulePane2.esm.js +1 -5
  346. package/dist/schedule/schedulePane2.esm.js.map +1 -1
  347. package/dist/sharing/sharingPane.cjs.js.map +1 -1
  348. package/dist/slideshow/slideshowPane.cjs.js.map +1 -1
  349. package/dist/social/editProfileDetails.cjs.js +1 -1
  350. package/dist/social/editProfileDetails.cjs.js.map +1 -1
  351. package/dist/social/editProfileDetails.esm.js +0 -2
  352. package/dist/social/editProfileDetails.esm.js.map +1 -1
  353. package/dist/social/icons.cjs.js +4 -4
  354. package/dist/social/icons.cjs.js.map +1 -1
  355. package/dist/social/icons.esm.js +5 -5
  356. package/dist/social/icons.esm.js.map +1 -1
  357. package/dist/social/socialPane.d.ts +0 -1
  358. package/dist/social/socialPane.d.ts.map +1 -1
  359. package/dist/social/socialPane2.cjs.js +3 -3
  360. package/dist/social/socialPane2.cjs.js.map +1 -1
  361. package/dist/social/socialPane2.esm.js +97 -154
  362. package/dist/social/socialPane2.esm.js.map +1 -1
  363. package/dist/social/socialSections.cjs.js +1 -1
  364. package/dist/social/socialSections.cjs.js.map +1 -1
  365. package/dist/social/socialSections.d.ts +2 -2
  366. package/dist/social/socialSections.d.ts.map +1 -1
  367. package/dist/social/socialSections.esm.js +62 -139
  368. package/dist/social/socialSections.esm.js.map +1 -1
  369. package/dist/social/triage.cjs.js.map +1 -1
  370. package/dist/tabbed/tabbedPane.cjs.js.map +1 -1
  371. package/dist/tableViewPane.cjs.js.map +1 -1
  372. package/dist/transaction/pane.cjs.js.map +1 -1
  373. package/dist/transaction/pane.esm.js +1 -1
  374. package/dist/transaction/pane.esm.js.map +1 -1
  375. package/dist/transaction/period.cjs.js.map +1 -1
  376. package/dist/trip/tripPane.cjs.js.map +1 -1
  377. package/dist/trustedApplications/trustedApplications.dom.cjs.js.map +1 -1
  378. package/dist/trustedApplications/trustedApplications.utils.cjs.js.map +1 -1
  379. package/dist/trustedApplications/trustedApplications.view.cjs.js.map +1 -1
  380. package/dist/types.d.ts +3 -0
  381. package/dist/types.d.ts.map +1 -0
  382. package/dist/ui/pane.cjs.js +1 -1
  383. package/dist/ui/pane.cjs.js.map +1 -1
  384. package/dist/ui/pane.esm.js +2 -5
  385. package/dist/ui/pane.esm.js.map +1 -1
  386. package/dist/utils/paneUtils.cjs.js +1 -1
  387. package/dist/utils/paneUtils.cjs.js.map +1 -1
  388. package/dist/utils/paneUtils.esm.js +4 -4
  389. package/dist/utils/paneUtils.esm.js.map +1 -1
  390. package/dist/utils/podUtils.cjs.js.map +1 -1
  391. package/dist/utils/viewerUtils.cjs.js +2 -0
  392. package/dist/utils/viewerUtils.cjs.js.map +1 -0
  393. package/dist/utils/viewerUtils.d.ts +5 -0
  394. package/dist/utils/viewerUtils.d.ts.map +1 -0
  395. package/dist/utils/viewerUtils.esm.js +13 -0
  396. package/dist/utils/viewerUtils.esm.js.map +1 -0
  397. package/dist/utils/webIdUtils.cjs.js +1 -1
  398. package/dist/utils/webIdUtils.cjs.js.map +1 -1
  399. package/dist/utils/webIdUtils.d.ts +1 -0
  400. package/dist/utils/webIdUtils.d.ts.map +1 -1
  401. package/dist/utils/webIdUtils.esm.js +23 -19
  402. package/dist/utils/webIdUtils.esm.js.map +1 -1
  403. package/dist/versionInfo.cjs.js +1 -1
  404. package/dist/versionInfo.cjs.js.map +1 -1
  405. package/dist/versionInfo.esm.js +11 -11
  406. package/dist/versionInfo.esm.js.map +1 -1
  407. package/dist/video/videoPane.cjs.js.map +1 -1
  408. package/package.json +7 -6
package/README.md CHANGED
@@ -46,8 +46,81 @@ to new users.
46
46
  Volunteers are always welcome!
47
47
 
48
48
  ## Documentation
49
- - [Visual Language](https://solidos.github.io/solid-panes/Documentation/VisualLanguage.html)
50
- - [Conventions](./Documentation/conventions.md)
49
+ - [Visual Language](https://solidos.github.io/solid-panes/docs/VisualLanguage.html)
50
+ - [Conventions](./docs/conventions.md)
51
+ - [Navigation design](./docs/navigation-design.md)
52
+
53
+ ### Profile heading
54
+
55
+ The `solid-panes-profile-heading` component accepts presentation data through
56
+ `profileData`. Its boolean `compact` property (also available as an attribute)
57
+ halves the responsive avatar size and shows only the photo, name, and job title.
58
+ The page controller uses the full heading on the profile pane and compact mode
59
+ on every other pane where the heading is visible. Owner editing remains exclusive
60
+ to the profile pane. On storage panes, the heading is shown only when the active
61
+ storage URI matches the viewed profile's navbar entry. Opening the logged-in
62
+ user's storage from the header menu hides the heading, even when the URL still
63
+ points to someone else's profile. Reloading a WebID URL always shows its profile
64
+ with Profile selected in the navbar. On a container or resource URL (not a WebID) the page
65
+ shows the resource as usual with the navbar visible and nothing selected; choosing Storage
66
+ in the navbar replaces that view with the whole storage, with the container or resource
67
+ from the URL opened inside it. Any other pane on a page inside someone else's pod
68
+ (for example their container) shows the compact heading of that pod's owner; it is
69
+ hidden inside the viewer's own pod and for account-menu views. Pressing Enter on the current URL,
70
+ or using the browser's back and forward buttons, re-renders the page without a reload, and
71
+ like a reload shows what the URL is: the profile on a WebID (selected in the navbar), otherwise
72
+ the container or resource itself, whatever the history entry last displayed through the navbar
73
+ or the account menu. Solid-panes locally presents the heading data and checks
74
+ viewer edit access; the component owns the edit interaction and opens the local
75
+ heading editor. The page controller refreshes the heading after a successful save.
76
+ After a successful save the component also dispatches a bubbling, composed
77
+ `profile-heading-saved` event with `detail.subjectUri`, which profile-pane uses to
78
+ rerender sections such as More contacts.
79
+ The heading editor includes its own dialog and responsive styles.
80
+ On mobile, the edit icon sits closer to the heading's top-right edge while
81
+ preserving its full touch target.
82
+
83
+ On the profile pane, logged-in visitors viewing someone else's profile also see
84
+ an "Add as friend" action to the left of Edit (when available). The page controller
85
+ sets `friendSubject` only in that context. The action loads the viewer's profile,
86
+ checks `foaf:knows`, and saves the new friendship in the viewer's profile document.
87
+ Existing friends have a disabled "Already a friend" button (hidden on mobile).
88
+ Success and error messages are centered below the button, announced and focused,
89
+ and dismissed after 10 seconds; failed operations can be
90
+ retried. Anonymous visitors, owners, and other panes do not show this action.
91
+ On mobile, friend actions sit in the top-right corner beside the name, which
92
+ wraps as needed.
93
+
94
+ Navigation reuses the mounted heading, with a 300ms CSS transition for the avatar,
95
+ padding, and detail rows in both directions. Transitions are disabled when the
96
+ user prefers reduced motion.
97
+ When navigating to a pane without a heading, the entire heading fades and
98
+ collapses (including its outer spacing) over 300ms before removal. Navigating
99
+ back during that animation cancels it and reuses the existing component.
100
+ The reverse navigation fades and expands the full or compact heading and its
101
+ outer spacing over 300ms, after the component has rendered. Reduced-motion users
102
+ get immediate appearance and removal instead.
103
+
104
+ The navbar is hidden when the loaded URL is the logged-in user's WebID or its
105
+ fragment-free profile document URL. Other URLs in the same pod and other users'
106
+ profiles keep the navbar. Account-menu navigation continues to hide it.
107
+
108
+ ### Friends list
109
+
110
+ On your own editable profile, drop a friend's WebID anywhere in the social pane's
111
+ friends list, including its empty space or an existing friend card, to add a
112
+ `foaf:knows` link to your profile. The whole list is the drop target; there is no
113
+ separate target icon. Other people's lists and non-editable profiles remain
114
+ read-only. This uses solid-ui's existing attachment-list save and refresh handlers.
115
+ Navigation icons are rendered directly by solid-ui using the imported Lucide
116
+ `square-arrow-out-up-right` component in neutral gray and match the remove icons'
117
+ size and right alignment.
118
+ Remove-friend confirmations appear as compact popups centered over the list,
119
+ above its contents and outside the clipped cards, including when there is only
120
+ one friend. They do not change the list's layout. Cancel is focused when the
121
+ confirmation opens.
122
+ The pane passes solid-ui's optional `confirmationContainer` rather than relocating
123
+ the widget's popup after it opens.
51
124
 
52
125
  ## Development
53
126
 
@@ -65,6 +138,15 @@ npm start
65
138
 
66
139
  3. You can change the `subject` in the sandbox to determine which pane gets rendered. For example, the default subject loads the `profile-pane`.
67
140
 
141
+ ### Using a local profile-pane
142
+
143
+ When working inside the SolidOS monorepo, `profile-pane` (and the other local
144
+ workspaces) are symlinked by `npx lerna bootstrap --force-local` (run from the
145
+ monorepo root, as `npm run watch-pivot` does), even if the version in
146
+ `package.json` is not published to npm. Use a plain version in `package.json`
147
+ (not a `file:` path, which lerna does not link) and avoid a bare `npm install`
148
+ here, which fails for unpublished versions and removes the links.
149
+
68
150
  ## Contributing panes
69
151
  When you created a pane, you can either add it as an npm dependency
70
152
  of this repo (for instance meeting-pane, issue-pane, chat-pane are all
@@ -1 +1 @@
1
- {"version":3,"file":"RDFXMLPane2.cjs.js","names":["icons","ns","Serializer","solid_ui","rdflib","RDFXMLPane","store","context","subject","n","myDocument","kb","div","statements","sz","serializedContent","source"],"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 { ns, icons } from 'solid-ui'\nimport type { DataBrowserContext } from 'pane-registry'\nimport { Serializer, type NamedNode, type Statement } from 'rdflib'\nimport './RDFXMLPane.css'\nimport './components/editor-card'\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\nexport const RDFXMLPane: RDFXMLPaneDefinition = {\n icon: 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 const div = myDocument.createElement('div')\n div.setAttribute('class', 'rdfxml-pane')\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 statements = kb.statementsMatching(\n undefined,\n undefined,\n undefined,\n subject\n ) as Statement[]\n\n const sz = Serializer(kb)\n sz.suggestNamespaces(kb.namespaces)\n sz.setBase(subject.uri)\n const serializedContent = sz.statementsToXML(statements)\n const source = myDocument.createElement('solid-panes-editor-card') as HTMLElement & {\n contentType?: string\n content?: string\n }\n source.contentType = 'application/rdf+xml'\n source.content = serializedContent\n\n div.appendChild(source)\n return div\n }\n}\n"],"mappings":"8HAqBA,IAAaK,EAAmC,CAC9C,KAAML,EAAAA,MAAM,iBAAmB,mBAE/B,KAAM,SAEN,SAAU,CAACC,EAAAA,GAAG,MAAM,WAAW,CAAC,EAEhC,MAAO,SAAU,EAAoB,EAA4C,CAC/E,IAAMK,EAAQC,EAAQ,QAAQ,MAC9B,GACE,kDACAD,EAAM,aAAaE,CAAO,EAE1B,OAAO,KAGT,IAAMC,EAAIH,EAAM,mBAAmB,IAAA,GAAW,IAAA,GAAW,IAAA,GAAWE,CAAO,CAAC,CACzE,OAEH,OADIC,IAAM,EAAU,KACb,eAAiBA,EAAI,GAC9B,EAEA,OAAQ,SACN,EACA,EACgB,CAChB,IAAMC,EAAaH,EAAQ,IACrBI,EAAKJ,EAAQ,QAAQ,MAErBK,EAAMF,EAAW,cAAc,KAAK,EAC1CE,EAAI,aAAa,QAAS,aAAa,EAIvC,IAAMC,EAAaF,EAAG,mBACpB,IAAA,GACA,IAAA,GACA,IAAA,GACAH,CACF,EAEMM,GAAA,EAAKZ,EAAAA,WAAAA,CAAWS,CAAE,EACxBG,EAAG,kBAAkBH,EAAG,UAAU,EAClCG,EAAG,QAAQN,EAAQ,GAAG,EACtB,IAAMO,EAAoBD,EAAG,gBAAgBD,CAAU,EACjDG,EAASN,EAAW,cAAc,yBAAyB,EAQjE,MAJA,GAAO,YAAc,sBACrB,EAAO,QAAUK,EAEjBH,EAAI,YAAYI,CAAM,EACfJ,CACT,CACF"}
1
+ {"version":3,"file":"RDFXMLPane2.cjs.js","names":["icons","ns","Serializer","solid_ui","rdflib","RDFXMLPane","store","context","subject","n","myDocument","kb","div","statements","sz","serializedContent","source"],"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 { ns, icons } from 'solid-ui'\nimport type { DataBrowserContext } from 'pane-registry'\nimport { Serializer, type NamedNode, type Statement } from 'rdflib'\nimport './RDFXMLPane.css'\nimport './components/editor-card'\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\nexport const RDFXMLPane: RDFXMLPaneDefinition = {\n icon: 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 const div = myDocument.createElement('div')\n div.setAttribute('class', 'rdfxml-pane')\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 statements = kb.statementsMatching(\n undefined,\n undefined,\n undefined,\n subject\n ) as Statement[]\n\n const sz = Serializer(kb)\n sz.suggestNamespaces(kb.namespaces)\n sz.setBase(subject.uri)\n const serializedContent = sz.statementsToXML(statements)\n const source = myDocument.createElement('solid-panes-editor-card') as HTMLElement & {\n contentType?: string\n content?: string\n }\n source.contentType = 'application/rdf+xml'\n source.content = serializedContent\n\n div.appendChild(source)\n return div\n }\n}\n"],"mappings":"A,8HAqBA,IAAaK,EAAmC,CAC9C,KAAML,EAAAA,MAAM,iBAAmB,mBAE/B,KAAM,SAEN,SAAU,CAACC,EAAAA,GAAG,MAAM,WAAW,CAAC,EAEhC,MAAO,SAAU,EAAoB,EAA4C,CAC/E,IAAMK,EAAQC,EAAQ,QAAQ,MAC9B,GACE,kDACAD,EAAM,aAAaE,CAAO,EAE1B,OAAO,KAGT,IAAMC,EAAIH,EAAM,mBAAmB,IAAA,GAAW,IAAA,GAAW,IAAA,GAAWE,CAAO,CAAC,CACzE,OAEH,OADIC,IAAM,EAAU,KACb,eAAiBA,EAAI,GAC9B,EAEA,OAAQ,SACN,EACA,EACgB,CAChB,IAAMC,EAAaH,EAAQ,IACrBI,EAAKJ,EAAQ,QAAQ,MAErBK,EAAMF,EAAW,cAAc,KAAK,EAC1CE,EAAI,aAAa,QAAS,aAAa,EAIvC,IAAMC,EAAaF,EAAG,mBACpB,IAAA,GACA,IAAA,GACA,IAAA,GACAH,CACF,EAEMM,GAAA,EAAKZ,EAAAA,WAAAA,CAAWS,CAAE,EACxBG,EAAG,kBAAkBH,EAAG,UAAU,EAClCG,EAAG,QAAQN,EAAQ,GAAG,EACtB,IAAMO,EAAoBD,EAAG,gBAAgBD,CAAU,EACjDG,EAASN,EAAW,cAAc,yBAAyB,EAQjE,MAJA,GAAO,YAAc,sBACrB,EAAO,QAAUK,EAEjBH,EAAI,YAAYI,CAAM,EACfJ,CACT,CACF,E"}
@@ -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="M20 21v-8a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v8"/><path d="M4 16s.5-1 2-1s2.5 2 4 2s2.5-2 4-2s2.5 2 4 2s2-1 2-1M2 21h20M7 8v3m5-3v3m5-3v3M7 4h.01M12 4h.01M17 4h.01"/></g></svg>`}};customElements.get(`icon-lucide-cake`)||customElements.define(`icon-lucide-cake`,e),exports.default=e;
2
+ //# sourceMappingURL=cake.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cake.cjs.js","names":["iconlucidecake"],"sources":[],"mappings":""}
@@ -0,0 +1,11 @@
1
+ //#region ~icons/lucide/cake
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=\"M20 21v-8a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v8\"/><path d=\"M4 16s.5-1 2-1s2.5 2 4 2s2.5-2 4-2s2.5 2 4 2s2-1 2-1M2 21h20M7 8v3m5-3v3m5-3v3M7 4h.01M12 4h.01M17 4h.01\"/></g></svg>";
5
+ }
6
+ };
7
+ customElements.get("icon-lucide-cake") || customElements.define("icon-lucide-cake", e);
8
+ //#endregion
9
+ export { e as default };
10
+
11
+ //# sourceMappingURL=cake.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cake.esm.js","names":["iconlucidecake"],"sources":[],"mappings":""}
@@ -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="M13.997 4a2 2 0 0 1 1.76 1.05l.486.9A2 2 0 0 0 18.003 7H20a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h1.997a2 2 0 0 0 1.759-1.048l.489-.904A2 2 0 0 1 10.004 4z"/><circle cx="12" cy="13" r="3"/></g></svg>`}};customElements.get(`icon-lucide-camera`)||customElements.define(`icon-lucide-camera`,e),exports.default=e;
2
+ //# sourceMappingURL=camera.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"camera.cjs.js","names":["iconlucidecamera"],"sources":[],"mappings":""}
@@ -0,0 +1,11 @@
1
+ //#region ~icons/lucide/camera
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=\"M13.997 4a2 2 0 0 1 1.76 1.05l.486.9A2 2 0 0 0 18.003 7H20a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h1.997a2 2 0 0 0 1.759-1.048l.489-.904A2 2 0 0 1 10.004 4z\"/><circle cx=\"12\" cy=\"13\" r=\"3\"/></g></svg>";
5
+ }
6
+ };
7
+ customElements.get("icon-lucide-camera") || customElements.define("icon-lucide-camera", e);
8
+ //#endregion
9
+ export { e as default };
10
+
11
+ //# sourceMappingURL=camera.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"camera.esm.js","names":["iconlucidecamera"],"sources":[],"mappings":""}
@@ -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="M17.925 20.056a6 6 0 0 0-11.851.001"/><circle cx="12" cy="11" r="4"/><circle cx="12" cy="12" r="10"/></g></svg>`}};customElements.get(`icon-lucide-circle-user-round`)||customElements.define(`icon-lucide-circle-user-round`,e),exports.default=e;
2
+ //# sourceMappingURL=circle-user-round.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"circle-user-round.cjs.js","names":["iconlucidecircleuserround"],"sources":[],"mappings":""}
@@ -0,0 +1,11 @@
1
+ //#region ~icons/lucide/circle-user-round
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=\"M17.925 20.056a6 6 0 0 0-11.851.001\"/><circle cx=\"12\" cy=\"11\" r=\"4\"/><circle cx=\"12\" cy=\"12\" r=\"10\"/></g></svg>";
5
+ }
6
+ };
7
+ customElements.get("icon-lucide-circle-user-round") || customElements.define("icon-lucide-circle-user-round", e);
8
+ //#endregion
9
+ export { e as default };
10
+
11
+ //# sourceMappingURL=circle-user-round.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"circle-user-round.esm.js","names":["iconlucidecircleuserround"],"sources":[],"mappings":""}
@@ -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="m22 7l-8.991 5.727a2 2 0 0 1-2.009 0L2 7"/><rect width="20" height="16" x="2" y="4" rx="2"/></g></svg>`}};customElements.get(`icon-lucide-mail`)||customElements.define(`icon-lucide-mail`,e),exports.default=e;
2
+ //# sourceMappingURL=mail.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mail.cjs.js","names":["iconlucidemail"],"sources":[],"mappings":""}
@@ -0,0 +1,11 @@
1
+ //#region ~icons/lucide/mail
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=\"m22 7l-8.991 5.727a2 2 0 0 1-2.009 0L2 7\"/><rect width=\"20\" height=\"16\" x=\"2\" y=\"4\" rx=\"2\"/></g></svg>";
5
+ }
6
+ };
7
+ customElements.get("icon-lucide-mail") || customElements.define("icon-lucide-mail", e);
8
+ //#endregion
9
+ export { e as default };
10
+
11
+ //# sourceMappingURL=mail.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mail.esm.js","names":["iconlucidemail"],"sources":[],"mappings":""}
@@ -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="M20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0"/><circle cx="12" cy="10" r="3"/></g></svg>`}};customElements.get(`icon-lucide-map-pin`)||customElements.define(`icon-lucide-map-pin`,e),exports.default=e;
2
+ //# sourceMappingURL=map-pin.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map-pin.cjs.js","names":["iconlucidemappin"],"sources":[],"mappings":""}
@@ -0,0 +1,11 @@
1
+ //#region ~icons/lucide/map-pin
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=\"M20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0\"/><circle cx=\"12\" cy=\"10\" r=\"3\"/></g></svg>";
5
+ }
6
+ };
7
+ customElements.get("icon-lucide-map-pin") || customElements.define("icon-lucide-map-pin", e);
8
+ //#endregion
9
+ export { e as default };
10
+
11
+ //# sourceMappingURL=map-pin.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map-pin.esm.js","names":["iconlucidemappin"],"sources":[],"mappings":""}
@@ -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%" ><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13.832 16.568a1 1 0 0 0 1.213-.303l.355-.465A2 2 0 0 1 17 15h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2A18 18 0 0 1 2 4a2 2 0 0 1 2-2h3a2 2 0 0 1 2 2v3a2 2 0 0 1-.8 1.6l-.468.351a1 1 0 0 0-.292 1.233a14 14 0 0 0 6.392 6.384"/></svg>`}};customElements.get(`icon-lucide-phone`)||customElements.define(`icon-lucide-phone`,e),exports.default=e;
2
+ //# sourceMappingURL=phone.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phone.cjs.js","names":["iconlucidephone"],"sources":[],"mappings":""}
@@ -0,0 +1,11 @@
1
+ //#region ~icons/lucide/phone
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%\" ><path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M13.832 16.568a1 1 0 0 0 1.213-.303l.355-.465A2 2 0 0 1 17 15h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2A18 18 0 0 1 2 4a2 2 0 0 1 2-2h3a2 2 0 0 1 2 2v3a2 2 0 0 1-.8 1.6l-.468.351a1 1 0 0 0-.292 1.233a14 14 0 0 0 6.392 6.384\"/></svg>";
5
+ }
6
+ };
7
+ customElements.get("icon-lucide-phone") || customElements.define("icon-lucide-phone", e);
8
+ //#endregion
9
+ export { e as default };
10
+
11
+ //# sourceMappingURL=phone.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phone.esm.js","names":["iconlucidephone"],"sources":[],"mappings":""}
@@ -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="M2 21a8 8 0 0 1 13.292-6"/><circle cx="10" cy="8" r="5"/><path d="M19 16v6m3-3h-6"/></g></svg>`}};customElements.get(`icon-lucide-user-round-plus`)||customElements.define(`icon-lucide-user-round-plus`,e),exports.default=e;
2
+ //# sourceMappingURL=user-round-plus.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-round-plus.cjs.js","names":["iconlucideuserroundplus"],"sources":[],"mappings":""}
@@ -0,0 +1,11 @@
1
+ //#region ~icons/lucide/user-round-plus
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=\"M2 21a8 8 0 0 1 13.292-6\"/><circle cx=\"10\" cy=\"8\" r=\"5\"/><path d=\"M19 16v6m3-3h-6\"/></g></svg>";
5
+ }
6
+ };
7
+ customElements.get("icon-lucide-user-round-plus") || customElements.define("icon-lucide-user-round-plus", e);
8
+ //#endregion
9
+ export { e as default };
10
+
11
+ //# sourceMappingURL=user-round-plus.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-round-plus.esm.js","names":["iconlucideuserroundplus"],"sources":[],"mappings":""}
@@ -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%" ><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M18 6L6 18M6 6l12 12"/></svg>`}};customElements.get(`icon-lucide-x`)||customElements.define(`icon-lucide-x`,e),exports.default=e;
2
+ //# sourceMappingURL=x.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"x.cjs.js","names":["iconlucidex"],"sources":[],"mappings":""}
@@ -0,0 +1,11 @@
1
+ //#region ~icons/lucide/x
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%\" ><path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M18 6L6 18M6 6l12 12\"/></svg>";
5
+ }
6
+ };
7
+ customElements.get("icon-lucide-x") || customElements.define("icon-lucide-x", e);
8
+ //#endregion
9
+ export { e as default };
10
+
11
+ //# sourceMappingURL=x.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"x.esm.js","names":["iconlucidex"],"sources":[],"mappings":""}
@@ -1,2 +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;
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){t?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)):console.log(`No successor to `+n)})};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
2
  //# sourceMappingURL=audioPane.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"audioPane.cjs.js","names":["UI","$rdf","require_runtime","solid_ui","rdflib","ns","audioPane_default","typeURIs","context","subject","prefix","t","kb","dom","options","removeExtension","dot","str","looksRedundant","folder","x","contents","thisName","k","otherName","guessNames","a","decode","moveOn","resolve","current","j","i","level","folder2","endedListener","event","tryNext","cur","next","controlRow","audioControl","audio","song","response","objectURL","myBlob","autoplay","div","table","labelStyle","artistRow","albumRow","trackRow"],"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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"}
1
+ {"version":3,"file":"audioPane.cjs.js","names":["UI","$rdf","require_runtime","solid_ui","rdflib","ns","audioPane_default","typeURIs","context","subject","prefix","t","kb","dom","options","removeExtension","dot","str","looksRedundant","folder","x","contents","thisName","k","otherName","guessNames","a","decode","moveOn","resolve","current","j","i","level","folder2","endedListener","event","tryNext","cur","next","controlRow","audioControl","audio","song","response","objectURL","myBlob","autoplay","div","table","labelStyle","artistRow","albumRow","trackRow"],"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":"A,wIAKA,IAAMK,EAAKL,EAAG,GAEdM,EAAe,CACb,KAAMN,EAAG,MAAM,SAAW,kBAE1B,KAAM,QAGN,MAAO,SAAU,EAAS,EAAS,CAEjC,IAAMO,EADKC,EAAQ,QAAQ,MACP,aAAaC,CAAO,EAElCC,EAAST,EAAK,KAAK,eAAe,SAAS,CAAC,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC,GAClE,IAAK,IAAMU,KAAKJ,EACd,GAAII,EAAE,WAAWD,CAAM,EAAG,MAAO,aAEnC,OAAO,IACT,EAEA,OAAQ,SAAU,EAAS,EAAS,CAClC,IAAME,EAAKJ,EAAQ,QAAQ,MACrBK,EAAML,EAAQ,IACdM,EAAU,CACd,SAAU,GACV,MAAO,GACP,YAAa,GACb,KAAM,EACR,EAEMC,EAAkB,SAAU,EAAK,CACrC,IAAMC,EAAMC,EAAI,YAAY,GAAG,EAI/B,OAHID,EAAM,GAENA,EADUC,EAAI,YAAY,GAChB,EAAUA,EACjBA,EAAI,MAAM,EAAGD,CAAG,CACzB,EAKME,EAAiB,SAAU,EAAG,CAClC,IAAMC,EAASP,EAAG,IAAI,IAAA,GAAWP,EAAG,IAAI,UAAU,EAAGe,CAAC,EACtD,GAAI,CAACD,EAAQ,MAAO,GACpB,IAAME,EAAWT,EAAG,KAAKO,EAAQd,EAAG,IAAI,UAAU,CAAC,EACnD,GAAIgB,EAAS,OAAS,EAAG,MAAO,GAChC,IAAMC,EAAWF,EAAE,IACnB,IAAK,IAAIG,EAAI,EAAGA,EAAIF,EAAS,OAAQ,IAAK,CACxC,IAAMG,EAAYH,EAASE,EAAE,CAAC,IAO9B,GALED,EAAS,OAASE,EAAU,QAC5BF,EAAS,WAAWP,EAAgBS,CAAS,CAAC,GAK9CF,EAAS,SAAS,MAAM,GACxBE,EAAU,SAAS,MAAM,GACzBT,EAAgBO,CAAQ,IAAMP,EAAgBS,CAAS,EAEvD,MAAO,EAEX,CACA,MAAO,EACT,EAIMC,EAAa,SAAU,EAAG,CAC9B,IAAMC,EAAIN,EAAE,IAAI,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,EAC7BO,EAAS,SAAU,EAAK,CAC5B,GAAI,CACF,OAAO,mBAAmBV,CAAG,CAC/B,MAAY,CACV,OAAOA,CACT,CACF,EACA,EAAU,YAAcU,EAAOD,EAAE,EAAE,EACnC,EAAS,YAAcC,EAAOD,EAAE,EAAE,EAClC,EAAS,YAAcC,EAAOZ,EAAgBW,EAAE,EAAE,CAAC,CACrD,EAEME,EAAS,SAAU,EAAS,EAAO,CACvC,OAAO,IAAI,QAAQ,SAAU,EAAS,CAEpC,GADA,IAAiB,EACb,CAACd,EAAQ,MAAO,OAAOe,EAAQ,IAAI,EAEvC,IAAMV,EACJP,EAAG,IAAI,IAAA,GAAWP,EAAG,IAAI,UAAU,EAAGyB,CAAO,GAAKA,EAAQ,IAAI,EAChE,GAAI,CAACX,EAAQ,OAAOU,EAAQ,IAAI,EAChCjB,EAAG,QAAQ,KAAKO,CAAM,CAAC,CAAC,KAAK,SAAU,EAAM,CAC3C,IAAME,EAAWT,EAAG,KAAKO,EAAQd,EAAG,IAAI,UAAU,CAAC,EAE/C0B,EACJV,EAAS,KAAK,EACd,IAAK,IAAIW,EAAI,EAAGA,EAAIX,EAAS,OAAQ,IACnC,GAAIS,EAAQ,MAAQT,EAASW,EAAE,CAAC,IAAK,CAEnC,GADA,GAAKA,EAAI,GAAKX,EAAS,OACnBU,IAAM,EAAG,CACX,GAAKjB,EAAQ,YAKN,CAEL,GAAImB,IAAU,GAAK,CAACnB,EAAQ,YAAa,OAAOe,EAAQ,IAAI,EAC5DD,EAAOT,EAAQc,EAAQ,CAAC,CAAC,CAAC,KAAK,SAAU,EAAS,CAC5CC,GACFtB,EAAG,QAAQ,KAAKsB,CAAO,CAAC,CAAC,KAAK,SAAU,EAAM,CAC5C,IAAMb,EAAWT,EAAG,KAAKsB,EAAS7B,EAAG,IAAI,UAAU,CAAC,EAIpD,OAHIgB,EAAS,SAAW,EAAUQ,EAAQ,IAAI,GAC9CR,EAAS,KAAK,EACd,QAAQ,IAAI,cAAgBa,CAAO,EAC5BL,EAAQR,EAAS,EAAE,EAC5B,CAAC,CAEL,CAAC,CACH,MAfE,OAHIP,EAAQ,KACHe,EAAQR,EAASU,EAAE,EAErBF,EAAQ,IAAI,CAgBvB,MACE,OAAOA,EAAQR,EAASU,EAAE,CAE9B,CAEJ,CAAC,CACH,CAAC,CACH,EACMI,EAAgB,SAAU,EAAO,CACrC,IAAML,EAAUlB,EAAG,IAAIwB,EAAM,OAAO,aAAa,KAAK,CAAC,EACvD,GAAI,CAACtB,EAAQ,MAAO,OACpB,IAAMuB,EAAU,SAAU,EAAK,CAC7B,IAAMP,EAAUQ,EAChBV,EAAOE,CAAO,CAAC,CAAC,KAAK,SAAU,EAAM,CAC9BS,EAIArB,EAAeqB,CAAI,GAMtB,QAAQ,IAAI,sBAAwBA,CAAI,EACxCF,EAAQE,CAAI,IANZ,QAAQ,IAAI,gBAAkBA,CAAI,EAClCd,EAAWc,CAAI,EACfC,EAAW,YAAYC,EAAaF,EAAM,EAAI,CAAC,EAC/CC,EAAW,YAAYJ,EAAM,MAAM,GAPnC,QAAQ,IAAI,mBAAqBN,CAAO,CAY5C,CAAC,CACH,EACAO,EAAQP,CAAO,CACjB,EAEMW,EAAe,SAAU,EAAM,EAAU,CAC7C,IAAMC,EAAQ7B,EAAI,cAAc,OAAO,EAgBvC,OAfA6B,EAAM,aAAa,WAAY,KAAK,EAEpC9B,EAAG,QAAQ,OAAO+B,EAAK,GAAG,CAAC,CACxB,KAAK,SAAU,EAAU,CACxB,OAAOC,EAAS,KAAK,CACvB,CAAC,CAAC,CACD,KAAK,SAAU,EAAQ,CACtB,IAAMC,EAAY,IAAI,gBAAgBC,CAAM,EAC5CJ,EAAM,aAAa,MAAOG,CAAS,CACrC,CAAC,EAECE,GACFL,EAAM,aAAa,WAAY,UAAU,EAE3CA,EAAM,iBAAiB,QAASP,EAAe,EAAK,EAC7CO,CACT,EAEMM,EAAMnC,EAAI,cAAc,KAAK,EAC7BoC,EAAQD,EAAI,YAAYnC,EAAI,cAAc,OAAO,CAAC,EAClDqC,EAAa,wDACbC,EAAYF,EAAM,YAAYpC,EAAI,cAAc,IAAI,CAAC,EAC3D,EAAU,MAAM,QAAUqC,EAC1B,IAAME,EAAWH,EAAM,YAAYpC,EAAI,cAAc,IAAI,CAAC,EAC1D,EAAS,MAAM,QAAUqC,EACzB,IAAMG,EAAWJ,EAAM,YAAYpC,EAAI,cAAc,IAAI,CAAC,EAC1D,EAAS,MAAM,QAAUqC,EACzB,IAAMV,EAAaS,EAAM,YAAYpC,EAAI,cAAc,IAAI,CAAC,EAQ5D,OAPAY,EAAWhB,CAAO,EAClB+B,EAAW,YAAYC,EAAahC,EAASK,EAAQ,QAAQ,CAAC,EAE1D,CAACF,EAAG,MAAM,IAAA,GAAWP,EAAG,IAAI,UAAU,EAAGI,CAAO,GAAKA,EAAQ,IAAI,GACnEG,EAAG,QAAQ,KAAKH,EAAQ,IAAI,CAAC,EAGxBuC,CACT,CACF,E"}
@@ -67,11 +67,7 @@ var n = e.ns, r = {
67
67
  let n = function(t) {
68
68
  let r = t;
69
69
  l(r).then(function(t) {
70
- if (!t) {
71
- console.log("No successor to " + r);
72
- return;
73
- }
74
- 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));
70
+ t ? 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)) : console.log("No successor to " + r);
75
71
  });
76
72
  };
77
73
  n(t);
@@ -1 +1 @@
1
- {"version":3,"file":"audioPane.esm.js","names":["ns","UI","$rdf","ns$1","audioPane_default","typeURIs","context","subject","prefix","t","kb","dom","options","removeExtension","dot","str","looksRedundant","folder","x","contents","thisName","k","otherName","guessNames","a","decode","moveOn","resolve","current","j","i","level","folder2","endedListener","event","tryNext","cur","next","controlRow","audioControl","audio","song","response","objectURL","myBlob","autoplay","div","table","labelStyle","artistRow","albumRow","trackRow"],"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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"}
1
+ {"version":3,"file":"audioPane.esm.js","names":["ns","UI","$rdf","ns$1","audioPane_default","typeURIs","context","subject","prefix","t","kb","dom","options","removeExtension","dot","str","looksRedundant","folder","x","contents","thisName","k","otherName","guessNames","a","decode","moveOn","resolve","current","j","i","level","folder2","endedListener","event","tryNext","cur","next","controlRow","audioControl","audio","song","response","objectURL","myBlob","autoplay","div","table","labelStyle","artistRow","albumRow","trackRow"],"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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"}
@@ -1 +1 @@
1
- {"version":3,"file":"classInstancePane.cjs.js","names":["UI","$rdf","require_runtime","solid_ui","rdflib","ns","classInstancePane","context","subject","dom","outliner","kb","complain","pre","color","div","message","sts","already","more","st","nt","uses","usedTypes","used","i","tr"],"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,IAAMK,EAAKL,EAAG,GAEDM,EAAoB,CAC/B,KAAMN,EAAG,MAAM,iBAAmB,2BAElC,KAAM,gBAIN,SAAU,CAACK,EAAG,MAAM,WAAW,CAAC,EAEhC,MAAO,SAAU,EAAS,EAAS,CAEjC,IAAM,EADKE,EAAQ,QAAQ,MACd,KAAK,IAAA,GAAWF,EAAG,IAAI,MAAM,EAAGG,CAAO,CAAC,CAAC,OAEtD,OADI,EAAI,EAAU,SAAW,EAAI,IAC1B,IACT,EAEA,OAAQ,SAAU,EAAS,EAAS,CAClC,IAAMC,EAAMF,EAAQ,IACdG,EAAWH,EAAQ,YAAYE,CAAG,EAClCE,EAAKJ,EAAQ,QAAQ,MACrBK,EAAW,SAAmB,EAAS,EAAO,CAClD,IAAMC,EAAMJ,EAAI,cAAc,KAAK,EACnCI,EAAI,aAAa,QAAS,qBAAuBC,GAAS,OAAY,EACtEC,EAAI,YAAYF,CAAG,EACnBA,EAAI,YAAYJ,EAAI,eAAeO,CAAO,CAAC,CAC7C,EACMD,EAAMN,EAAI,cAAc,KAAK,EACnCM,EAAI,aAAa,QAAS,cAAc,EACxCA,EAAI,aACF,QACA,uGACF,EAGA,IAAME,EAAMN,EAAG,mBAAmB,IAAA,GAAWN,EAAG,IAAI,MAAM,EAAGG,CAAO,EACpE,GAAIS,EAAI,OAAS,EAAG,CAClB,IAAMC,EAAU,CAAC,EACXC,EAAO,CAAC,EACdF,EAAI,QAAQ,GAAM,CAChB,EAAQG,EAAG,QAAQ,KAAK,GAAKA,CAC/B,CAAC,EACD,IAAK,IAAMC,KAAMV,EAAG,cAAcH,CAAO,EAClCU,EAAQG,IACXF,EAAK,KAAKlB,EAAK,GAAGU,EAAG,OAAOU,CAAE,EAAGhB,EAAG,IAAI,MAAM,EAAGG,CAAO,CAAC,EAa7D,GAVIW,EAAK,QACPP,EACE,aACEK,EAAI,OACJ,iBACAE,EAAK,OACL,wBACAnB,EAAG,MAAM,MAAMQ,CAAO,CAC1B,EAEE,GAAQ,SAASH,EAAG,IAAI,UAAU,CAAC,GAE5BG,EAAQ,SAASH,EAAG,KAAK,OAAO,CAAC,EAAG,CAC7C,IAAMiB,EAAOX,EAAG,mBAAmB,IAAA,GAAWN,EAAG,IAAI,MAAM,EAAG,IAAA,EAAS,EACjEkB,EAAY,CAAC,EACnBD,EAAK,QAAQ,SAAU,EAAI,CACzB,EAAUF,EAAG,QAAUA,CACzB,CAAC,EACD,IAAMI,EAAO,CAAC,EACd,IAAK,IAAMC,KAAKF,EACdC,EAAK,KAAKvB,EAAK,GAAGA,EAAK,IAAIwB,CAAC,EAAGpB,EAAG,IAAI,MAAM,EAAGA,EAAG,KAAK,OAAO,CAAC,CAAC,EAElEO,EACE,YACEU,EAAK,OACL,wBACAE,EAAK,OACL,gBACJ,CACF,CAEA,GAAIP,EAAI,OAAS,GAAI,CACnB,IAAMS,EAAKjB,EAAI,cAAc,IAAI,EACjCiB,EAAG,YAAYjB,EAAI,eAAe,GAAKQ,EAAI,MAAM,CAAC,EAElDF,EAAI,YAAYW,CAAE,CACpB,CAEAhB,EAAS,kBAAkBK,EAAKE,EAAK,GAAM,SAAU,EAAO,CAC1D,MAAO,EACT,CAAC,EAEGE,EAAK,SACPP,EAAS,WAAW,EACpBF,EAAS,kBAAkBK,EAAKI,EAAM,GAAM,SAAU,EAAO,CAC3D,MAAO,EACT,CAAC,EAEL,CAEA,OAAOJ,CACT,CACF"}
1
+ {"version":3,"file":"classInstancePane.cjs.js","names":["UI","$rdf","require_runtime","solid_ui","rdflib","ns","classInstancePane","context","subject","dom","outliner","kb","complain","pre","color","div","message","sts","already","more","st","nt","uses","usedTypes","used","i","tr"],"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":"A,uIAQA,IAAMK,EAAKL,EAAG,GAEDM,EAAoB,CAC/B,KAAMN,EAAG,MAAM,iBAAmB,2BAElC,KAAM,gBAIN,SAAU,CAACK,EAAG,MAAM,WAAW,CAAC,EAEhC,MAAO,SAAU,EAAS,EAAS,CAEjC,IAAM,EADKE,EAAQ,QAAQ,MACd,KAAK,IAAA,GAAWF,EAAG,IAAI,MAAM,EAAGG,CAAO,CAAC,CAAC,OAEtD,OADI,EAAI,EAAU,SAAW,EAAI,IAC1B,IACT,EAEA,OAAQ,SAAU,EAAS,EAAS,CAClC,IAAMC,EAAMF,EAAQ,IACdG,EAAWH,EAAQ,YAAYE,CAAG,EAClCE,EAAKJ,EAAQ,QAAQ,MACrBK,EAAW,SAAmB,EAAS,EAAO,CAClD,IAAMC,EAAMJ,EAAI,cAAc,KAAK,EACnCI,EAAI,aAAa,QAAS,qBAAuBC,GAAS,OAAY,EACtEC,EAAI,YAAYF,CAAG,EACnBA,EAAI,YAAYJ,EAAI,eAAeO,CAAO,CAAC,CAC7C,EACMD,EAAMN,EAAI,cAAc,KAAK,EACnCM,EAAI,aAAa,QAAS,cAAc,EACxCA,EAAI,aACF,QACA,uGACF,EAGA,IAAME,EAAMN,EAAG,mBAAmB,IAAA,GAAWN,EAAG,IAAI,MAAM,EAAGG,CAAO,EACpE,GAAIS,EAAI,OAAS,EAAG,CAClB,IAAMC,EAAU,CAAC,EACXC,EAAO,CAAC,EACdF,EAAI,QAAQ,GAAM,CAChB,EAAQG,EAAG,QAAQ,KAAK,GAAKA,CAC/B,CAAC,EACD,IAAK,IAAMC,KAAMV,EAAG,cAAcH,CAAO,EAClCU,EAAQG,IACXF,EAAK,KAAKlB,EAAK,GAAGU,EAAG,OAAOU,CAAE,EAAGhB,EAAG,IAAI,MAAM,EAAGG,CAAO,CAAC,EAa7D,GAVIW,EAAK,QACPP,EACE,aACEK,EAAI,OACJ,iBACAE,EAAK,OACL,wBACAnB,EAAG,MAAM,MAAMQ,CAAO,CAC1B,EAEE,GAAQ,SAASH,EAAG,IAAI,UAAU,CAAC,GAE5BG,EAAQ,SAASH,EAAG,KAAK,OAAO,CAAC,EAAG,CAC7C,IAAMiB,EAAOX,EAAG,mBAAmB,IAAA,GAAWN,EAAG,IAAI,MAAM,EAAG,IAAA,EAAS,EACjEkB,EAAY,CAAC,EACnBD,EAAK,QAAQ,SAAU,EAAI,CACzB,EAAUF,EAAG,QAAUA,CACzB,CAAC,EACD,IAAMI,EAAO,CAAC,EACd,IAAK,IAAMC,KAAKF,EACdC,EAAK,KAAKvB,EAAK,GAAGA,EAAK,IAAIwB,CAAC,EAAGpB,EAAG,IAAI,MAAM,EAAGA,EAAG,KAAK,OAAO,CAAC,CAAC,EAElEO,EACE,YACEU,EAAK,OACL,wBACAE,EAAK,OACL,gBACJ,CACF,CAEA,GAAIP,EAAI,OAAS,GAAI,CACnB,IAAMS,EAAKjB,EAAI,cAAc,IAAI,EACjCiB,EAAG,YAAYjB,EAAI,eAAe,GAAKQ,EAAI,MAAM,CAAC,EAElDF,EAAI,YAAYW,CAAE,CACpB,CAEAhB,EAAS,kBAAkBK,EAAKE,EAAK,GAAM,SAAU,EAAO,CAC1D,MAAO,EACT,CAAC,EAEGE,EAAK,SACPP,EAAS,WAAW,EACpBF,EAAS,kBAAkBK,EAAKI,EAAM,GAAM,SAAU,EAAO,CAC3D,MAAO,EACT,CAAC,EAEL,CAEA,OAAOJ,CACT,CACF,E"}
@@ -1,4 +1,4 @@
1
- const e=require("./EditorCard.styles.cjs.js");let t=require("solid-ui"),n=require("lit/decorators.js"),r=require("lit");var i,a,o,s,c,l,u,d,f,p,m,h,g,_,v,y;function b(e,t,n){x(e,t),t.set(e,n)}function x(e,t){if(t.has(e))throw TypeError(`Cannot initialize the same private elements twice on an object`)}function S(e,t,n){return e.set(w(e,t),n),n}function C(e,t){return e.get(w(e,t))}function w(e,t,n){if(typeof e==`function`?e===t:e.has(t))return arguments.length<3?t:n;throw TypeError(`Private element is not present on this object`)}function T(e,t,n){return(t=D(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function E(e,t,n,r,i,a){function o(e,t,n){return function(r,i){return n&&n(r),e[t].call(r,i)}}function s(e,t){for(var n=0;n<e.length;n++)e[n].call(t);return t}function c(e,t,n,r){if(typeof e!=`function`&&(r||e!==void 0))throw TypeError(t+` must `+(n||`be`)+` a function`+(r?``:` or undefined`));return e}function l(e,t,n,r,i,a,s,l,u,d,f,p,m){function h(e){if(!m(e))throw TypeError(`Attempted to access private element on non-instance`)}var g,_=t[0],v=t[3],y=!l;if(!y){n||Array.isArray(_)||(_=[_]);var b={},x=[],S=i===3?`get`:i===4||p?`set`:`value`;d?(f||p?b={get:k(function(){return v(this)},r,`get`),set:function(e){t[4](this,e)}}:b[S]=v,f||k(b[S],r,i===2?``:S)):f||(b=Object.getOwnPropertyDescriptor(e,r))}for(var C=e,w=_.length-1;w>=0;w-=n?2:1){var T=_[w],E=n?_[w-1]:void 0,D={},O={kind:[`field`,`accessor`,`method`,`getter`,`setter`,`class`][i],name:r,metadata:a,addInitializer:function(e,t){if(e.v)throw Error(`attempted to call addInitializer after decoration was finished`);c(t,`An initializer`,`be`,!0),s.push(t)}.bind(null,D)};try{if(y)(g=c(T.call(E,C,O),`class decorators`,`return`))&&(C=g);else{var A,j;O.static=u,O.private=d,d?i===2?A=function(e){return h(e),b.value}:(i<4&&(A=o(b,`get`,h)),i!==3&&(j=o(b,`set`,h))):(A=function(e){return e[r]},(i<2||i===4)&&(j=function(e,t){e[r]=t}));var M=O.access={has:d?m.bind():function(e){return r in e}};if(A&&(M.get=A),j&&(M.set=j),C=T.call(E,p?{get:b.get,set:b.set}:b[S],O),p){if(typeof C==`object`&&C)(g=c(C.get,`accessor.get`))&&(b.get=g),(g=c(C.set,`accessor.set`))&&(b.set=g),(g=c(C.init,`accessor.init`))&&x.push(g);else if(C!==void 0)throw TypeError(`accessor decorators must return an object with get, set, or init properties or void 0`)}else c(C,(f?`field`:`method`)+` decorators`,`return`)&&(f?x.push(C):b[S]=C)}}finally{D.v=!0}}return(f||p)&&l.push(function(e,t){for(var n=x.length-1;n>=0;n--)t=x[n].call(e,t);return t}),f||y||(d?p?l.push(o(b,`get`),o(b,`set`)):l.push(i===2?b[S]:o.call.bind(b[S])):Object.defineProperty(e,r,b)),C}function u(e,t){return Object.defineProperty(e,Symbol.metadata||Symbol.for(`Symbol.metadata`),{configurable:!0,enumerable:!0,value:t})}if(arguments.length>=6)var d=a[Symbol.metadata||Symbol.for(`Symbol.metadata`)];var f=Object.create(d??null),p=function(e,t,n,r){var i,a,o=[],c=function(t){return A(t)===e},u=new Map;function d(e){e&&o.push(s.bind(null,e))}for(var f=0;f<t.length;f++){var p=t[f];if(Array.isArray(p)){var m=p[1],h=p[2],g=p.length>3,_=16&m,v=!!(8&m),y=(m&=7)==0,b=h+`/`+v;if(!y&&!g){var x=u.get(b);if(!0===x||x===3&&m!==4||x===4&&m!==3)throw Error(`Attempted to decorate a public method/accessor that has the same name as a previously decorated public method/accessor. This is not currently supported by the decorators plugin. Property name was: `+h);u.set(b,!(m>2)||m)}l(v?e:e.prototype,p,_,g?`#`+h:D(h),m,r,v?a||=[]:i||=[],o,v,g,y,m===1,v&&g?c:n)}}return d(i),d(a),o}(e,t,i,f);return n.length||u(e,f),{e:p,get c(){var t=[];return n.length&&[u(l(e,[n],r,e.name,5,f,t),f),s.bind(null,t,e)]}}}function D(e){var t=O(e,`string`);return typeof t==`symbol`?t:t+``}function O(e,t){if(typeof e!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(typeof r!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function k(e,t,n){typeof t==`symbol`&&(t=(t=t.description)?`[`+t+`]`:``);try{Object.defineProperty(e,"name",{configurable:!0,value:n?n+` `+t:t})}catch{}return e}function A(e){if(Object(e)!==e)throw TypeError(`right-hand side of 'in' should be an object, got `+(e===null?`null`:typeof e));return e}function j(e){return e}d=[(0,n.customElement)(`solid-panes-editor-card`)];var M;new(v=(o=new WeakMap,s=new WeakMap,c=new WeakMap,y=(f=(0,n.query)(`.editor`),m=(0,n.property)(),g=(0,n.property)(),`_editor`),a=class extends t.WebComponent{constructor(...e){super(...e),T(this,y,void l(this)),T(this,`_initializing`,!1),b(this,o,p(this,null)),b(this,s,h(this)),b(this,c,_(this))}get _editorMount(){return C(o,this)}set _editorMount(e){S(o,this,e)}get contentType(){return C(s,this)}set contentType(e){S(s,this,e)}get content(){return C(c,this)}set content(e){S(c,this,e)}getEditor(){return this._editor}setReadOnly(e){this._editor?.setReadOnly(e)}async _initializeEditor(){if(this._editor||this._initializing)return;this._initializing=!0;let e=this._editorMount;if(!e){this._initializing=!1;return}try{let{CodeEditor:t}=await import(`solid-ui`);this._editor=new t;try{await this._editor.initialize(e,this.content??``,this.contentType??``,`dark`)}catch(e){throw Error(`Error initializing code editor: ${e instanceof Error?e.message:String(e)}`)}this._editor?.setReadOnly(!0)}catch(e){console.log(`Error loading CodeEditor module:`,e)}finally{this._initializing=!1}}async firstUpdated(){await this._initializeEditor()}disconnectedCallback(){super.disconnectedCallback(),this._editor&&=(this._editor.destroy(),void 0),this._initializing=!1}render(){return r.html`
1
+ const e=require("./EditorCard.styles.cjs.js");let t=require("solid-ui"),n=require("lit/decorators.js"),r=require("lit");var i,a,o,s,c,l,u,d,f,p,m,h,g,_,v,y;function b(e,t,n){x(e,t),t.set(e,n)}function x(e,t){if(t.has(e))throw TypeError(`Cannot initialize the same private elements twice on an object`)}function S(e,t,n){return e.set(w(e,t),n),n}function C(e,t){return e.get(w(e,t))}function w(e,t,n){if(typeof e==`function`?e===t:e.has(t))return arguments.length<3?t:n;throw TypeError(`Private element is not present on this object`)}function T(e,t,n){return(t=D(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function E(e,t,n,r,i,a){function o(e,t,n){return function(r,i){return n&&n(r),e[t].call(r,i)}}function s(e,t){for(var n=0;n<e.length;n++)e[n].call(t);return t}function c(e,t,n,r){if(typeof e!=`function`&&(r||e!==void 0))throw TypeError(t+` must `+(n||`be`)+` a function`+(r?``:` or undefined`));return e}function l(e,t,n,r,i,a,s,l,u,d,f,p,m){function h(e){if(!m(e))throw TypeError(`Attempted to access private element on non-instance`)}var g,_=t[0],v=t[3],y=!l;if(!y){n||Array.isArray(_)||(_=[_]);var b={},x=[],S=i===3?`get`:i===4||p?`set`:`value`;d?(f||p?b={get:k(function(){return v(this)},r,`get`),set:function(e){t[4](this,e)}}:b[S]=v,f||k(b[S],r,i===2?``:S)):f||(b=Object.getOwnPropertyDescriptor(e,r))}for(var C=e,w=_.length-1;w>=0;w-=n?2:1){var T=_[w],E=n?_[w-1]:void 0,D={},O={kind:[`field`,`accessor`,`method`,`getter`,`setter`,`class`][i],name:r,metadata:a,addInitializer:function(e,t){if(e.v)throw Error(`attempted to call addInitializer after decoration was finished`);c(t,`An initializer`,`be`,!0),s.push(t)}.bind(null,D)};try{if(y)(g=c(T.call(E,C,O),`class decorators`,`return`))&&(C=g);else{var A,j;O.static=u,O.private=d,d?i===2?A=function(e){return h(e),b.value}:(i<4&&(A=o(b,`get`,h)),i!==3&&(j=o(b,`set`,h))):(A=function(e){return e[r]},(i<2||i===4)&&(j=function(e,t){e[r]=t}));var M=O.access={has:d?m.bind():function(e){return r in e}};if(A&&(M.get=A),j&&(M.set=j),C=T.call(E,p?{get:b.get,set:b.set}:b[S],O),p){if(typeof C==`object`&&C)(g=c(C.get,`accessor.get`))&&(b.get=g),(g=c(C.set,`accessor.set`))&&(b.set=g),(g=c(C.init,`accessor.init`))&&x.push(g);else if(C!==void 0)throw TypeError(`accessor decorators must return an object with get, set, or init properties or void 0`)}else c(C,(f?`field`:`method`)+` decorators`,`return`)&&(f?x.push(C):b[S]=C)}}finally{D.v=!0}}return(f||p)&&l.push(function(e,t){for(var n=x.length-1;n>=0;n--)t=x[n].call(e,t);return t}),f||y||(d?p?l.push(o(b,`get`),o(b,`set`)):l.push(i===2?b[S]:o.call.bind(b[S])):Object.defineProperty(e,r,b)),C}function u(e,t){return Object.defineProperty(e,Symbol.metadata||Symbol.for(`Symbol.metadata`),{configurable:!0,enumerable:!0,value:t})}if(arguments.length>=6)var d=a[Symbol.metadata||Symbol.for(`Symbol.metadata`)];var f=Object.create(d??null),p=function(e,t,n,r){var i,a,o=[],c=function(t){return A(t)===e},u=new Map;function d(e){e&&o.push(s.bind(null,e))}for(var f=0;f<t.length;f++){var p=t[f];if(Array.isArray(p)){var m=p[1],h=p[2],g=p.length>3,_=16&m,v=!!(8&m),y=(m&=7)==0,b=h+`/`+v;if(!y&&!g){var x=u.get(b);if(!0===x||x===3&&m!==4||x===4&&m!==3)throw Error(`Attempted to decorate a public method/accessor that has the same name as a previously decorated public method/accessor. This is not currently supported by the decorators plugin. Property name was: `+h);u.set(b,!(m>2)||m)}l(v?e:e.prototype,p,_,g?`#`+h:D(h),m,r,v?a||=[]:i||=[],o,v,g,y,m===1,v&&g?c:n)}}return d(i),d(a),o}(e,t,i,f);return n.length||u(e,f),{e:p,get c(){var t=[];return n.length&&[u(l(e,[n],r,e.name,5,f,t),f),s.bind(null,t,e)]}}}function D(e){var t=O(e,`string`);return typeof t==`symbol`?t:t+``}function O(e,t){if(typeof e!=`object`||!e)return e;var n;if(typeof Symbol<`u`&&(n=e[Symbol.toPrimitive])!==void 0){var r=n.call(e,t||`default`);if(typeof r!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function k(e,t,n){typeof t==`symbol`&&(t=(t=t.description)?`[`+t+`]`:``);try{Object.defineProperty(e,"name",{configurable:!0,value:n?n+` `+t:t})}catch{}return e}function A(e){if(Object(e)!==e)throw TypeError(`right-hand side of 'in' should be an object, got `+(e===null?`null`:typeof e));return e}function j(e){return e}d=[(0,n.customElement)(`solid-panes-editor-card`)];var M;new(v=(o=new WeakMap,s=new WeakMap,c=new WeakMap,y=(f=(0,n.query)(`.editor`),m=(0,n.property)(),g=(0,n.property)(),`_editor`),a=class extends t.WebComponent{constructor(...e){super(...e),T(this,y,void l(this)),T(this,`_initializing`,!1),b(this,o,p(this,null)),b(this,s,h(this)),b(this,c,_(this))}get _editorMount(){return C(o,this)}set _editorMount(e){S(o,this,e)}get contentType(){return C(s,this)}set contentType(e){S(s,this,e)}get content(){return C(c,this)}set content(e){S(c,this,e)}getEditor(){return this._editor}setReadOnly(e){this._editor?.setReadOnly(e)}async _initializeEditor(){if(this._editor||this._initializing)return;this._initializing=!0;let e=this._editorMount;if(!e)this._initializing=!1;else try{let{CodeEditor:t}=await import(`solid-ui`);this._editor=new t;try{await this._editor.initialize(e,this.content??``,this.contentType??``,`dark`)}catch(e){throw Error(`Error initializing code editor: ${e instanceof Error?e.message:String(e)}`)}this._editor?.setReadOnly(!0)}catch(e){console.log(`Error loading CodeEditor module:`,e)}finally{this._initializing=!1}}async firstUpdated(){await this._initializeEditor()}disconnectedCallback(){super.disconnectedCallback(),this._editor&&=(this._editor.destroy(),void 0),this._initializing=!1}render(){return r.html`
2
2
  <section class="editor-card">
3
3
  <div class="editor"></div>
4
4
  </section>
@@ -1 +1 @@
1
- {"version":3,"file":"EditorCard.cjs.js","names":["html","customElement","property","query","WebComponent","styles","_classDecs","_EditorCard","_EditorCard2","_A","WeakMap","_B","_C","_ref","_editorMountDecs","_contentTypeDecs","_contentDecs","_EditorCard3","EditorCard","constructor","args","_defineProperty","_initProto","_classPrivateFieldInitSpec","_init__editorMount","_init_contentType","_init_content","_editorMount","_classPrivateFieldGet","v","_classPrivateFieldSet","contentType","content","getEditor","_editor","setReadOnly","readOnly","_initializeEditor","_initializing","editorDiv","CodeEditor","initialize","err","Error","message","String","console","log","firstUpdated","disconnectedCallback","destroy","undefined","render","e","c","_initClass","_applyDecs","_Class","_identity","default","customElement","query","property","WebComponent","styles","require_EditorCard_styles","solid_ui","lit_decorators_js","lit","_Class","_EditorCard3","_A","_B","_C","_initProto","_initClass","_classDecs","_editorMountDecs","_init__editorMount","_contentTypeDecs","_init_contentType","_contentDecs","_init_content","_EditorCard2","_ref","_classPrivateFieldInitSpec","_checkPrivateRedeclaration","a","_classPrivateFieldSet","s","_assertClassBrand","r","_classPrivateFieldGet","_defineProperty","_toPropertyKey","t","_applyDecs","i","n","o","c","applyDec","m","h","y","v","g","b","u","w","S","A","d","f","p","_setFunctionName","P","j","D","I","k","F","l","N","_checkInRHS","_toPrimitive","e","_identity","_EditorCard","args","readOnly","editorDiv","CodeEditor","err"],"sources":["../../../src/components/editor-card/EditorCard.ts"],"sourcesContent":["import { html } from 'lit'\nimport { customElement, property, query } from 'lit/decorators.js'\nimport { WebComponent, type CodeEditor } from 'solid-ui'\nimport styles from './EditorCard.styles.css'\n\n@customElement('solid-panes-editor-card')\nexport default class EditorCard extends WebComponent {\n static styles = styles\n\n private _editor?: CodeEditor\n private _initializing = false\n\n @query('.editor')\n accessor _editorMount: HTMLDivElement | null = null\n\n @property()\n accessor contentType: string | undefined\n\n @property()\n accessor content: string | undefined\n\n getEditor () {\n return this._editor\n }\n\n setReadOnly (readOnly: boolean) {\n this._editor?.setReadOnly(readOnly)\n }\n\n private async _initializeEditor () {\n if (this._editor || this._initializing) return\n this._initializing = true\n const editorDiv = this._editorMount\n\n if (!editorDiv) {\n this._initializing = false\n return\n }\n\n try {\n const { CodeEditor } = await import('solid-ui')\n this._editor = new CodeEditor()\n try {\n await this._editor.initialize(editorDiv, this.content ?? '', this.contentType ?? '', 'dark')\n } catch (err) {\n throw new Error(`Error initializing code editor: ${err instanceof Error ? err.message : String(err)}`)\n }\n this._editor?.setReadOnly(true)\n } catch (err) {\n // TODO: Bring in error handling and debug\n console.log('Error loading CodeEditor module:', err)\n } finally {\n this._initializing = false\n }\n }\n\n async firstUpdated () {\n await this._initializeEditor()\n }\n\n disconnectedCallback () {\n super.disconnectedCallback()\n if (this._editor) {\n this._editor.destroy()\n this._editor = undefined\n }\n\n this._initializing = false\n }\n\n render () {\n return html`\n <section class=\"editor-card\">\n <div class=\"editor\"></div>\n </section>\n `\n }\n}\n"],"mappings":"gtIAG4CM,EAAA,EAAA,EAE3CL,EAAAA,cAAAA,CAAc,yBAAyB,CAAC,EAAA,IAAAM,EAAA,IAAAC,GAAAC,EAAA,IAAAC,QAAAC,EAAA,IAAAD,QAAAE,EAAA,IAAAF,QAAAG,GAAAC,GAAAA,EAOtCX,EAAAA,MAAAA,CAAM,SAAS,EAACY,GAAAA,EAGhBb,EAAAA,SAAAA,CAAS,EAACc,GAAAA,EAGVd,EAAAA,SAAAA,CAAS,EAAC,WAAAe,EAbb,cACwCb,EAAAA,YAAa,CAAAe,YAAA,GAAAC,EAAA,CAAA,MAAA,GAAAA,CAAA,EAAAC,EAAA,KAAAR,EAAA,KAAAS,EAAA,IAAA,CAAA,EAAAD,EAAA,KAAA,gBAI3B,EAAK,EAAAE,EAAA,KAAAd,EAAAe,EAAA,KAGkB,IAAI,CAAA,EAAAD,EAAA,KAAAZ,EAAAc,EAAA,IAAA,CAAA,EAAAF,EAAA,KAAAX,EAAAc,EAAA,IAAA,CAAA,CAAA,CAAA,IAA1CC,cAAY,CAAA,OAAAC,EAAAnB,EAAA,IAAA,CAAA,CAAA,IAAZkB,aAAYE,EAAA,CAAAC,EAAArB,EAAA,KAAAoB,CAAA,CAAA,CAAA,IAGZE,aAAW,CAAA,OAAAH,EAAAjB,EAAA,IAAA,CAAA,CAAA,IAAXoB,YAAWF,EAAA,CAAAC,EAAAnB,EAAA,KAAAkB,CAAA,CAAA,CAAA,IAGXG,SAAO,CAAA,OAAAJ,EAAAhB,EAAA,IAAA,CAAA,CAAA,IAAPoB,QAAOH,EAAA,CAAAC,EAAAlB,EAAA,KAAAiB,CAAA,CAAA,CAEhBI,WAAa,CACX,OAAO,KAAKC,OACd,CAEAC,YAAaC,EAAmB,CAC9B,KAAKF,SAASC,YAAYC,CAAQ,CACpC,CAEA,MAAcC,mBAAqB,CACjC,GAAI,KAAKH,SAAW,KAAKI,cAAe,OACxC,KAAKA,cAAgB,GACrB,IAAMC,EAAY,KAAKZ,aAEvB,GAAI,CAACY,EAAW,CACd,KAAKD,cAAgB,GACrB,MACF,CAEA,GAAI,CACF,GAAM,CAAEE,cAAe,MAAM,OAAO,YACpC,KAAKN,QAAU,IAAIM,EACnB,GAAI,CACF,MAAM,KAAKN,QAAQO,WAAWF,EAAW,KAAKP,SAAW,GAAI,KAAKD,aAAe,GAAI,MAAM,CAC7F,OAASW,EAAK,CACZ,MAAUC,MAAM,mCAAmCD,aAAeC,MAAQD,EAAIE,QAAUC,OAAOH,CAAG,GAAG,CACvG,CACA,KAAKR,SAASC,YAAY,EAAI,CAChC,OAASO,EAAK,CAEZI,QAAQC,IAAI,mCAAoCL,CAAG,CACrD,QAAU,CACR,KAAKJ,cAAgB,EACvB,CACF,CAEA,MAAMU,cAAgB,CACpB,MAAM,KAAKX,kBAAkB,CAC/B,CAEAY,sBAAwB,CACtB,MAAMA,qBAAqB,EAC3B,AAEE,KAAKf,WADL,KAAKA,QAAQgB,QAAQ,EACNC,IAAAA,IAGjB,KAAKb,cAAgB,EACvB,CAEAc,QAAU,CACR,MAAOpD,GAAAA,IAAI;;;;KAKb,CACF,EAAC,CAAAqD,EAAA,CAAA7B,EAAAC,EAAAC,EAAAJ,GAAAgC,EAAA,CAAA/C,EAAAgD,IAAAC,EAAAvC,EAAA,CAAA,CAAAH,EAAA,EAAA,cAAA,EAAA,CAAAC,EAAA,EAAA,aAAA,EAAA,CAAAC,EAAA,EAAA,SAAA,CAAA,EAAAV,EAAA,EAAA,IAAA,GAvEuCF,EAAAA,YAAY,EAAAa,GAAAwC,EAAA,cAAAC,CAAA,CAAAvC,aAAA,CAAA,MAAAZ,CAAA,EAAAc,EAAA,KAAA,SAClChB,EAAAA,OAAM,EAAAkD,EAAA,CAAA,CAAA,EAAAlC,EAAAoC,EAAAjD,EAAA,IAAA,EAAA,EAAAiD"}
1
+ {"version":3,"file":"EditorCard.cjs.js","names":["html","customElement","property","query","WebComponent","styles","_classDecs","_EditorCard","_EditorCard2","_A","WeakMap","_B","_C","_ref","_editorMountDecs","_contentTypeDecs","_contentDecs","_EditorCard3","EditorCard","constructor","args","_defineProperty","_initProto","_classPrivateFieldInitSpec","_init__editorMount","_init_contentType","_init_content","_editorMount","_classPrivateFieldGet","v","_classPrivateFieldSet","contentType","content","getEditor","_editor","setReadOnly","readOnly","_initializeEditor","_initializing","editorDiv","CodeEditor","initialize","err","Error","message","String","console","log","firstUpdated","disconnectedCallback","destroy","undefined","render","e","c","_initClass","_applyDecs","_Class","_identity","default","customElement","query","property","WebComponent","styles","require_EditorCard_styles","solid_ui","lit_decorators_js","lit","_Class","_EditorCard3","_A","_B","_C","_initProto","_initClass","_classDecs","_editorMountDecs","_init__editorMount","_contentTypeDecs","_init_contentType","_contentDecs","_init_content","_EditorCard2","_ref","_classPrivateFieldInitSpec","_checkPrivateRedeclaration","a","_classPrivateFieldSet","s","_assertClassBrand","r","_classPrivateFieldGet","_defineProperty","_toPropertyKey","t","_applyDecs","i","n","o","c","applyDec","m","h","y","v","g","b","u","w","S","A","d","f","p","_setFunctionName","P","j","D","I","k","F","l","N","_checkInRHS","_toPrimitive","e","_identity","_EditorCard","args","readOnly","editorDiv","CodeEditor","err"],"sources":["../../../src/components/editor-card/EditorCard.ts"],"sourcesContent":["import { html } from 'lit'\nimport { customElement, property, query } from 'lit/decorators.js'\nimport { WebComponent, type CodeEditor } from 'solid-ui'\nimport styles from './EditorCard.styles.css'\n\n@customElement('solid-panes-editor-card')\nexport default class EditorCard extends WebComponent {\n static styles = styles\n\n private _editor?: CodeEditor\n private _initializing = false\n\n @query('.editor')\n accessor _editorMount: HTMLDivElement | null = null\n\n @property()\n accessor contentType: string | undefined\n\n @property()\n accessor content: string | undefined\n\n getEditor () {\n return this._editor\n }\n\n setReadOnly (readOnly: boolean) {\n this._editor?.setReadOnly(readOnly)\n }\n\n private async _initializeEditor () {\n if (this._editor || this._initializing) return\n this._initializing = true\n const editorDiv = this._editorMount\n\n if (!editorDiv) {\n this._initializing = false\n return\n }\n\n try {\n const { CodeEditor } = await import('solid-ui')\n this._editor = new CodeEditor()\n try {\n await this._editor.initialize(editorDiv, this.content ?? '', this.contentType ?? '', 'dark')\n } catch (err) {\n throw new Error(`Error initializing code editor: ${err instanceof Error ? err.message : String(err)}`)\n }\n this._editor?.setReadOnly(true)\n } catch (err) {\n // TODO: Bring in error handling and debug\n console.log('Error loading CodeEditor module:', err)\n } finally {\n this._initializing = false\n }\n }\n\n async firstUpdated () {\n await this._initializeEditor()\n }\n\n disconnectedCallback () {\n super.disconnectedCallback()\n if (this._editor) {\n this._editor.destroy()\n this._editor = undefined\n }\n\n this._initializing = false\n }\n\n render () {\n return html`\n <section class=\"editor-card\">\n <div class=\"editor\"></div>\n </section>\n `\n }\n}\n"],"mappings":"A,quIAG4CM,EAAA,EAAA,EAE3CL,EAAAA,cAAAA,CAAc,yBAAyB,CAAC,EAAA,IAAAM,EAAA,IAAAC,GAAAC,EAAA,IAAAC,QAAAC,EAAA,IAAAD,QAAAE,EAAA,IAAAF,QAAAG,GAAAC,GAAAA,EAOtCX,EAAAA,MAAAA,CAAM,SAAS,EAACY,GAAAA,EAGhBb,EAAAA,SAAAA,CAAS,EAACc,GAAAA,EAGVd,EAAAA,SAAAA,CAAS,EAAC,WAAAe,EAbb,cACwCb,EAAAA,YAAa,CAAAe,YAAA,GAAAC,EAAA,CAAA,MAAA,GAAAA,CAAA,EAAAC,EAAA,KAAAR,EAAA,KAAAS,EAAA,IAAA,CAAA,EAAAD,EAAA,KAAA,gBAI3B,EAAK,EAAAE,EAAA,KAAAd,EAAAe,EAAA,KAGkB,IAAI,CAAA,EAAAD,EAAA,KAAAZ,EAAAc,EAAA,IAAA,CAAA,EAAAF,EAAA,KAAAX,EAAAc,EAAA,IAAA,CAAA,CAAA,CAAA,IAA1CC,cAAY,CAAA,OAAAC,EAAAnB,EAAA,IAAA,CAAA,CAAA,IAAZkB,aAAYE,EAAA,CAAAC,EAAArB,EAAA,KAAAoB,CAAA,CAAA,CAAA,IAGZE,aAAW,CAAA,OAAAH,EAAAjB,EAAA,IAAA,CAAA,CAAA,IAAXoB,YAAWF,EAAA,CAAAC,EAAAnB,EAAA,KAAAkB,CAAA,CAAA,CAAA,IAGXG,SAAO,CAAA,OAAAJ,EAAAhB,EAAA,IAAA,CAAA,CAAA,IAAPoB,QAAOH,EAAA,CAAAC,EAAAlB,EAAA,KAAAiB,CAAA,CAAA,CAEhBI,WAAa,CACX,OAAO,KAAKC,OACd,CAEAC,YAAaC,EAAmB,CAC9B,KAAKF,SAASC,YAAYC,CAAQ,CACpC,CAEA,MAAcC,mBAAqB,CACjC,GAAI,KAAKH,SAAW,KAAKI,cAAe,OACxC,KAAKA,cAAgB,GACrB,IAAMC,EAAY,KAAKZ,aAEvB,GAAI,CAACY,EACH,KAAKD,cAAgB,QAIvB,GAAI,CACF,GAAM,CAAEE,cAAe,MAAM,OAAO,YACpC,KAAKN,QAAU,IAAIM,EACnB,GAAI,CACF,MAAM,KAAKN,QAAQO,WAAWF,EAAW,KAAKP,SAAW,GAAI,KAAKD,aAAe,GAAI,MAAM,CAC7F,OAASW,EAAK,CACZ,MAAUC,MAAM,mCAAmCD,aAAeC,MAAQD,EAAIE,QAAUC,OAAOH,CAAG,GAAG,CACvG,CACA,KAAKR,SAASC,YAAY,EAAI,CAChC,OAASO,EAAK,CAEZI,QAAQC,IAAI,mCAAoCL,CAAG,CACrD,QAAU,CACR,KAAKJ,cAAgB,EACvB,CACF,CAEA,MAAMU,cAAgB,CACpB,MAAM,KAAKX,kBAAkB,CAC/B,CAEAY,sBAAwB,CACtB,MAAMA,qBAAqB,EAC3B,AAEE,KAAKf,WADL,KAAKA,QAAQgB,QAAQ,EACNC,IAAAA,IAGjB,KAAKb,cAAgB,EACvB,CAEAc,QAAU,CACR,MAAOpD,GAAAA,IAAI;;;;KAKb,CACF,EAAC,CAAAqD,EAAA,CAAA7B,EAAAC,EAAAC,EAAAJ,GAAAgC,EAAA,CAAA/C,EAAAgD,IAAAC,EAAAvC,EAAA,CAAA,CAAAH,EAAA,EAAA,cAAA,EAAA,CAAAC,EAAA,EAAA,aAAA,EAAA,CAAAC,EAAA,EAAA,SAAA,CAAA,EAAAV,EAAA,EAAA,IAAA,GAvEuCF,EAAAA,YAAY,EAAAa,GAAAwC,EAAA,cAAAC,CAAA,CAAAvC,aAAA,CAAA,MAAAZ,CAAA,EAAAc,EAAA,KAAA,SAClChB,EAAAA,OAAM,EAAAkD,EAAA,CAAA,CAAA,EAAAlC,EAAAoC,EAAAjD,EAAA,IAAA,EAAA,EAAAiD,G"}