solid-panes 4.4.2-2 → 4.4.2-4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -10
- package/dist/RDFXMLPane.d.ts +2 -3
- package/dist/RDFXMLPane2.cjs.js +3 -0
- package/dist/RDFXMLPane2.cjs.js.map +1 -0
- package/dist/RDFXMLPane2.esm.js +55 -0
- package/dist/RDFXMLPane2.esm.js.map +1 -0
- package/dist/_virtual/_rolldown/runtime.cjs.js +1 -0
- package/dist/_virtual/~icons/lucide/help-circle.cjs.js +2 -0
- package/dist/_virtual/~icons/lucide/help-circle.cjs.js.map +1 -0
- package/dist/_virtual/~icons/lucide/help-circle.esm.js +11 -0
- package/dist/_virtual/~icons/lucide/help-circle.esm.js.map +1 -0
- package/dist/_virtual/~icons/lucide/user.cjs.js +2 -0
- package/dist/_virtual/~icons/lucide/user.cjs.js.map +1 -0
- package/dist/_virtual/~icons/lucide/user.esm.js +11 -0
- package/dist/_virtual/~icons/lucide/user.esm.js.map +1 -0
- package/dist/audio/audioPane.cjs.js +2 -0
- package/dist/audio/audioPane.cjs.js.map +1 -0
- package/dist/audio/audioPane.esm.js +96 -0
- package/dist/audio/audioPane.esm.js.map +1 -0
- package/dist/classInstancePane.cjs.js +2 -0
- package/dist/classInstancePane.cjs.js.map +1 -0
- package/dist/classInstancePane.esm.js +50 -0
- package/dist/classInstancePane.esm.js.map +1 -0
- package/dist/components/header/Header.cjs.js +19 -0
- package/dist/components/header/Header.cjs.js.map +1 -0
- package/dist/components/header/Header.d.ts +8 -0
- package/dist/components/header/Header.d.ts.map +1 -0
- package/dist/components/header/Header.esm.js +228 -0
- package/dist/components/header/Header.esm.js.map +1 -0
- package/dist/components/header/Header.styles.cjs.js +2 -0
- package/dist/components/header/Header.styles.cjs.js.map +1 -0
- package/dist/components/header/Header.styles.esm.js +7 -0
- package/dist/components/header/Header.styles.esm.js.map +1 -0
- package/dist/components/header/index.cjs.js +1 -0
- package/dist/components/header/index.d.ts +4 -0
- package/dist/components/header/index.d.ts.map +1 -0
- package/dist/components/header/index.esm.js +1 -0
- package/dist/dashboard/basicPreferences.cjs.js +2 -0
- package/dist/dashboard/basicPreferences.cjs.js.map +1 -0
- package/dist/dashboard/basicPreferences.d.ts +1 -1
- package/dist/dashboard/basicPreferences.esm.js +70 -0
- package/dist/dashboard/basicPreferences.esm.js.map +1 -0
- package/dist/dashboard/dashboardPane.cjs.js +2 -0
- package/dist/dashboard/dashboardPane.cjs.js.map +1 -0
- package/dist/dashboard/dashboardPane.d.ts +1 -1
- package/dist/dashboard/dashboardPane.esm.js +7 -0
- package/dist/dashboard/dashboardPane.esm.js.map +1 -0
- package/dist/dashboard/homepage.cjs.js +2 -0
- package/dist/dashboard/homepage.cjs.js.map +1 -0
- package/dist/dashboard/homepage.d.ts +1 -1
- package/dist/dashboard/homepage.esm.js +26 -0
- package/dist/dashboard/homepage.esm.js.map +1 -0
- package/dist/dashboard/ontologyData.cjs.js +37 -0
- package/dist/dashboard/ontologyData.cjs.js.map +1 -0
- package/dist/dashboard/ontologyData.esm.js +6 -0
- package/dist/dashboard/ontologyData.esm.js.map +1 -0
- package/dist/dashboard/preferencesFormText.cjs.js +20 -0
- package/dist/dashboard/preferencesFormText.cjs.js.map +1 -0
- package/dist/dashboard/preferencesFormText.esm.js +6 -0
- package/dist/dashboard/preferencesFormText.esm.js.map +1 -0
- package/dist/dataContentPane.d.ts +2 -3
- package/dist/dataContentPane2.cjs.js +2 -0
- package/dist/dataContentPane2.cjs.js.map +1 -0
- package/dist/dataContentPane2.esm.js +109 -0
- package/dist/dataContentPane2.esm.js.map +1 -0
- package/dist/defaultPane.d.ts +2 -3
- package/dist/defaultPane2.cjs.js +2 -0
- package/dist/defaultPane2.cjs.js.map +1 -0
- package/dist/defaultPane2.esm.js +41 -0
- package/dist/defaultPane2.esm.js.map +1 -0
- package/dist/dev.d.ts +10 -0
- package/dist/dev.d.ts.map +1 -0
- package/dist/dokieli/dokieliPane.cjs.js +2 -0
- package/dist/dokieli/dokieliPane.cjs.js.map +1 -0
- package/dist/dokieli/dokieliPane.esm.js +39 -0
- package/dist/dokieli/dokieliPane.esm.js.map +1 -0
- package/dist/dokieli/{new.js → new.cjs.js} +4 -10
- package/dist/dokieli/new.cjs.js.map +1 -0
- package/dist/dokieli/new.esm.js +6 -0
- package/dist/dokieli/new.esm.js.map +1 -0
- package/dist/form/pane.cjs.js +4 -0
- package/dist/form/pane.cjs.js.map +1 -0
- package/dist/form/pane.d.ts +1 -2
- package/dist/form/pane.esm.js +121 -0
- package/dist/form/pane.esm.js.map +1 -0
- package/dist/home/homePane.cjs.js +2 -0
- package/dist/home/homePane.cjs.js.map +1 -0
- package/dist/home/homePane.d.ts +1 -1
- package/dist/home/homePane.esm.js +35 -0
- package/dist/home/homePane.esm.js.map +1 -0
- package/dist/humanReadablePane.d.ts +2 -3
- package/dist/humanReadablePane2.cjs.js +2 -0
- package/dist/humanReadablePane2.cjs.js.map +1 -0
- package/dist/humanReadablePane2.esm.js +123 -0
- package/dist/humanReadablePane2.esm.js.map +1 -0
- package/dist/icons/dashboard.cjs.js +2 -0
- package/dist/icons/dashboard.cjs.js.map +1 -0
- package/dist/icons/dashboard.esm.js +6 -0
- package/dist/icons/dashboard.esm.js.map +1 -0
- package/dist/icons/folder.cjs.js +2 -0
- package/dist/icons/folder.cjs.js.map +1 -0
- package/dist/icons/folder.esm.js +6 -0
- package/dist/icons/folder.esm.js.map +1 -0
- package/dist/icons/friends.cjs.js +2 -0
- package/dist/icons/friends.cjs.js.map +1 -0
- package/dist/icons/friends.esm.js +6 -0
- package/dist/icons/friends.esm.js.map +1 -0
- package/dist/icons/iconHelper.cjs.js +2 -0
- package/dist/icons/iconHelper.cjs.js.map +1 -0
- package/dist/icons/iconHelper.esm.js +17 -0
- package/dist/icons/iconHelper.esm.js.map +1 -0
- package/dist/icons/{menu.svg → menu.cjs.js} +3 -2
- package/dist/icons/menu.cjs.js.map +1 -0
- package/dist/icons/menu.esm.js +6 -0
- package/dist/icons/menu.esm.js.map +1 -0
- package/dist/icons/person.cjs.js +2 -0
- package/dist/icons/person.cjs.js.map +1 -0
- package/dist/icons/person.esm.js +6 -0
- package/dist/icons/person.esm.js.map +1 -0
- package/dist/imagePane.d.ts +2 -3
- package/dist/imagePane2.cjs.js +2 -0
- package/dist/imagePane2.cjs.js.map +1 -0
- package/dist/imagePane2.esm.js +32 -0
- package/dist/imagePane2.esm.js.map +1 -0
- package/dist/index.cjs.js +2 -0
- package/dist/index.cjs.js.map +1 -0
- package/dist/index.d.ts +4 -4
- package/dist/index.esm.js +26 -0
- package/dist/index.esm.js.map +1 -0
- package/dist/internal/internalPane.d.ts +1 -2
- package/dist/internal/internalPane2.cjs.js +2 -0
- package/dist/internal/internalPane2.cjs.js.map +1 -0
- package/dist/internal/internalPane2.esm.js +104 -0
- package/dist/internal/internalPane2.esm.js.map +1 -0
- package/dist/mainPage/footer.cjs.js +2 -0
- package/dist/mainPage/footer.cjs.js.map +1 -0
- package/dist/mainPage/footer.d.ts +1 -3
- package/dist/mainPage/footer.esm.js +18 -0
- package/dist/mainPage/footer.esm.js.map +1 -0
- package/dist/mainPage/header.cjs.js +2 -0
- package/dist/mainPage/header.cjs.js.map +1 -0
- package/dist/mainPage/header.d.ts +1 -15
- package/dist/mainPage/header.d.ts.map +1 -1
- package/dist/mainPage/header.esm.js +25 -0
- package/dist/mainPage/header.esm.js.map +1 -0
- package/dist/mainPage/index.cjs.js +2 -0
- package/dist/mainPage/index.cjs.js.map +1 -0
- package/dist/mainPage/index.d.ts +3 -7
- package/dist/mainPage/index.d.ts.map +1 -1
- package/dist/mainPage/index.esm.js +38 -0
- package/dist/mainPage/index.esm.js.map +1 -0
- package/dist/mainPage/menu.d.ts +1 -2
- package/dist/mainPage/menu2.cjs.js +2 -0
- package/dist/mainPage/menu2.cjs.js.map +1 -0
- package/dist/mainPage/menu2.esm.js +184 -0
- package/dist/mainPage/menu2.esm.js.map +1 -0
- package/dist/n3Pane.d.ts +2 -3
- package/dist/n3Pane2.cjs.js +3 -0
- package/dist/n3Pane2.cjs.js.map +1 -0
- package/dist/n3Pane2.esm.js +52 -0
- package/dist/n3Pane2.esm.js.map +1 -0
- package/dist/outline/context.cjs.js +2 -0
- package/dist/outline/context.cjs.js.map +1 -0
- package/dist/outline/context.d.ts +3 -3
- package/dist/outline/context.esm.js +18 -0
- package/dist/outline/context.esm.js.map +1 -0
- package/dist/outline/manager2.cjs.js +3 -0
- package/dist/outline/manager2.cjs.js.map +1 -0
- package/dist/outline/manager2.esm.js +875 -0
- package/dist/outline/manager2.esm.js.map +1 -0
- package/dist/outline/outlineIcons.cjs.js +2 -0
- package/dist/outline/outlineIcons.cjs.js.map +1 -0
- package/dist/outline/outlineIcons.esm.js +10 -0
- package/dist/outline/outlineIcons.esm.js.map +1 -0
- package/dist/outline/propertyViews.cjs.js +2 -0
- package/dist/outline/propertyViews.cjs.js.map +1 -0
- package/dist/outline/propertyViews.esm.js +19 -0
- package/dist/outline/propertyViews.esm.js.map +1 -0
- package/dist/outline/queryByExample.cjs.js +2 -0
- package/dist/outline/queryByExample.cjs.js.map +1 -0
- package/dist/outline/queryByExample.esm.js +25 -0
- package/dist/outline/queryByExample.esm.js.map +1 -0
- package/dist/outline/userInput.cjs.js +61 -0
- package/dist/outline/userInput.cjs.js.map +1 -0
- package/dist/outline/userInput.esm.js +784 -0
- package/dist/outline/userInput.esm.js.map +1 -0
- package/dist/outline/viewAsImage.cjs.js +2 -0
- package/dist/outline/viewAsImage.cjs.js.map +1 -0
- package/dist/outline/viewAsImage.esm.js +10 -0
- package/dist/outline/viewAsImage.esm.js.map +1 -0
- package/dist/outline/viewAsMbox.cjs.js +2 -0
- package/dist/outline/viewAsMbox.cjs.js.map +1 -0
- package/dist/outline/viewAsMbox.esm.js +9 -0
- package/dist/outline/viewAsMbox.esm.js.map +1 -0
- package/dist/pad/padPane.d.ts +1 -2
- package/dist/pad/padPane2.cjs.js +2 -0
- package/dist/pad/padPane2.cjs.js.map +1 -0
- package/dist/pad/padPane2.esm.js +172 -0
- package/dist/pad/padPane2.esm.js.map +1 -0
- package/dist/playlist/playlistPane.cjs.js +2 -0
- package/dist/playlist/playlistPane.cjs.js.map +1 -0
- package/dist/playlist/playlistPane.esm.js +49 -0
- package/dist/playlist/playlistPane.esm.js.map +1 -0
- package/dist/profileUtils/ownerProfile.cjs.js +2 -0
- package/dist/profileUtils/ownerProfile.cjs.js.map +1 -0
- package/dist/profileUtils/ownerProfile.d.ts +1 -1
- package/dist/profileUtils/ownerProfile.esm.js +50 -0
- package/dist/profileUtils/ownerProfile.esm.js.map +1 -0
- package/dist/registerPanes.cjs.js +2 -0
- package/dist/registerPanes.cjs.js.map +1 -0
- package/dist/registerPanes.esm.js +46 -0
- package/dist/registerPanes.esm.js.map +1 -0
- package/dist/schedule/formsForSchedule.cjs.js +117 -0
- package/dist/schedule/formsForSchedule.cjs.js.map +1 -0
- package/dist/schedule/formsForSchedule.esm.js +6 -0
- package/dist/schedule/formsForSchedule.esm.js.map +1 -0
- package/dist/schedule/schedulePane.d.ts +2 -4
- package/dist/schedule/schedulePane2.cjs.js +8 -0
- package/dist/schedule/schedulePane2.cjs.js.map +1 -0
- package/dist/schedule/schedulePane2.esm.js +384 -0
- package/dist/schedule/schedulePane2.esm.js.map +1 -0
- package/dist/sharing/sharingPane.cjs.js +2 -0
- package/dist/sharing/sharingPane.cjs.js.map +1 -0
- package/dist/sharing/sharingPane.esm.js +22 -0
- package/dist/sharing/sharingPane.esm.js.map +1 -0
- package/dist/slideshow/slideshowPane.cjs.js +2 -0
- package/dist/slideshow/slideshowPane.cjs.js.map +1 -0
- package/dist/slideshow/slideshowPane.esm.js +46 -0
- package/dist/slideshow/slideshowPane.esm.js.map +1 -0
- package/dist/social/editProfileDetails.cjs.js +2 -0
- package/dist/social/editProfileDetails.cjs.js.map +1 -0
- package/dist/social/editProfileDetails.d.ts +1 -2
- package/dist/social/editProfileDetails.esm.js +12 -0
- package/dist/social/editProfileDetails.esm.js.map +1 -0
- package/dist/social/icons.cjs.js +82 -0
- package/dist/social/icons.cjs.js.map +1 -0
- package/dist/social/{icons.js → icons.esm.js} +12 -18
- package/dist/social/icons.esm.js.map +1 -0
- package/dist/social/socialPane.d.ts +2 -3
- package/dist/social/socialPane2.cjs.js +6 -0
- package/dist/social/socialPane2.cjs.js.map +1 -0
- package/dist/social/socialPane2.esm.js +326 -0
- package/dist/social/socialPane2.esm.js.map +1 -0
- package/dist/social/socialSections.cjs.js +2 -0
- package/dist/social/socialSections.cjs.js.map +1 -0
- package/dist/social/socialSections.d.ts +2 -2
- package/dist/social/socialSections.esm.js +221 -0
- package/dist/social/socialSections.esm.js.map +1 -0
- package/dist/social/spinner.cjs.js +1 -0
- package/dist/social/spinner.esm.js +1 -0
- package/dist/social/triage.cjs.js +2 -0
- package/dist/social/triage.cjs.js.map +1 -0
- package/dist/social/triage.d.ts +2 -2
- package/dist/social/triage.esm.js +44 -0
- package/dist/social/triage.esm.js.map +1 -0
- package/dist/tabbed/tabbedPane.cjs.js +2 -0
- package/dist/tabbed/tabbedPane.cjs.js.map +1 -0
- package/dist/tabbed/tabbedPane.d.ts +1 -1
- package/dist/tabbed/tabbedPane.esm.js +38 -0
- package/dist/tabbed/tabbedPane.esm.js.map +1 -0
- package/dist/tableViewPane.cjs.js +2 -0
- package/dist/tableViewPane.cjs.js.map +1 -0
- package/dist/tableViewPane.esm.js +20 -0
- package/dist/tableViewPane.esm.js.map +1 -0
- package/dist/transaction/pane.cjs.js +8 -0
- package/dist/transaction/pane.cjs.js.map +1 -0
- package/dist/transaction/pane.esm.js +212 -0
- package/dist/transaction/pane.esm.js.map +1 -0
- package/dist/transaction/period.cjs.js +4 -0
- package/dist/transaction/period.cjs.js.map +1 -0
- package/dist/transaction/period.esm.js +126 -0
- package/dist/transaction/period.esm.js.map +1 -0
- package/dist/trip/tripPane.cjs.js +2 -0
- package/dist/trip/tripPane.cjs.js.map +1 -0
- package/dist/trip/tripPane.esm.js +85 -0
- package/dist/trip/tripPane.esm.js.map +1 -0
- package/dist/trustedApplications/trustedApplications.dom.cjs.js +2 -0
- package/dist/trustedApplications/trustedApplications.dom.cjs.js.map +1 -0
- package/dist/trustedApplications/trustedApplications.dom.d.ts +1 -1
- package/dist/trustedApplications/trustedApplications.dom.esm.js +108 -0
- package/dist/trustedApplications/trustedApplications.dom.esm.js.map +1 -0
- package/dist/trustedApplications/trustedApplications.utils.cjs.js +2 -0
- package/dist/trustedApplications/trustedApplications.utils.cjs.js.map +1 -0
- package/dist/trustedApplications/trustedApplications.utils.d.ts +1 -1
- package/dist/trustedApplications/trustedApplications.utils.esm.js +20 -0
- package/dist/trustedApplications/trustedApplications.utils.esm.js.map +1 -0
- package/dist/trustedApplications/trustedApplications.view.cjs.js +2 -0
- package/dist/trustedApplications/trustedApplications.view.cjs.js.map +1 -0
- package/dist/trustedApplications/trustedApplications.view.d.ts +1 -1
- package/dist/trustedApplications/trustedApplications.view.esm.js +41 -0
- package/dist/trustedApplications/trustedApplications.view.esm.js.map +1 -0
- package/dist/ui/pane.cjs.js +4 -0
- package/dist/ui/pane.cjs.js.map +1 -0
- package/dist/ui/pane.esm.js +56 -0
- package/dist/ui/pane.esm.js.map +1 -0
- package/dist/versionInfo.cjs.js +2 -0
- package/dist/versionInfo.cjs.js.map +1 -0
- package/dist/versionInfo.esm.js +40 -0
- package/dist/versionInfo.esm.js.map +1 -0
- package/dist/video/videoPane.cjs.js +2 -0
- package/dist/video/videoPane.cjs.js.map +1 -0
- package/dist/video/videoPane.esm.js +25 -0
- package/dist/video/videoPane.esm.js.map +1 -0
- package/package.json +35 -62
- package/dist/0314353e28ce6e5539af.svg +0 -9
- package/dist/04567ff683933c35c465.png +0 -0
- package/dist/10163fd9b5a0e00d63a0.png +0 -0
- package/dist/1234dcb2eec2e45f252b.png +0 -0
- package/dist/20899934157df4db56cb.png +0 -0
- package/dist/33760bf79f097f449da5.png +0 -0
- package/dist/4cceba29ab33b1ddd9bb.svg +0 -6
- package/dist/578d2b6ed32e7624164e.png +0 -0
- package/dist/5f62a5b2b7e99b9640c7.png +0 -0
- package/dist/6525766ecd288ec60129.png +0 -0
- package/dist/7800be6f6c4b5b0f4f20.png +0 -0
- package/dist/7b7538c6f6b317968009.svg +0 -9
- package/dist/92d03142abe6efc0b42d.svg +0 -6
- package/dist/976473cf5fe24d657d4b.png +0 -0
- package/dist/RDFXMLPane.css +0 -70
- package/dist/RDFXMLPane.js +0 -100
- package/dist/argument/argumentPane.js +0 -60
- package/dist/attach/attachPane.js +0 -393
- package/dist/audio/audioPane.js +0 -181
- package/dist/bda84f59e7216675a208.png +0 -0
- package/dist/cd68e8f3990ba8b2139e.png +0 -0
- package/dist/classInstancePane.js +0 -91
- package/dist/dashboard/basicPreferences.js +0 -147
- package/dist/dashboard/dashboardPane.js +0 -73
- package/dist/dashboard/homepage.js +0 -42
- package/dist/dataContentPane.css +0 -271
- package/dist/dataContentPane.js +0 -226
- package/dist/defaultPane.css +0 -97
- package/dist/defaultPane.js +0 -81
- package/dist/dokieli/dokieliPane.js +0 -74
- package/dist/e7074a7e2cb69e51cfd3.png +0 -0
- package/dist/f3772696fb7ee53c23d8.png +0 -0
- package/dist/form/formPane.css +0 -120
- package/dist/form/pane.js +0 -250
- package/dist/home/homePane.js +0 -74
- package/dist/humanReadablePane.css +0 -129
- package/dist/humanReadablePane.js +0 -243
- package/dist/icons/clock.svg +0 -7
- package/dist/icons/comment.svg +0 -6
- package/dist/icons/dashboard.svg +0 -9
- package/dist/icons/downArrow.svg +0 -6
- package/dist/icons/folder.svg +0 -6
- package/dist/icons/friends.svg +0 -9
- package/dist/icons/help.svg +0 -8
- package/dist/icons/iconHelper.js +0 -23
- package/dist/icons/person.svg +0 -6
- package/dist/icons/personInCircle.svg +0 -8
- package/dist/icons/sharing.svg +0 -10
- package/dist/icons/signOut.svg +0 -8
- package/dist/icons/signUp.svg +0 -9
- package/dist/icons/star.svg +0 -3
- package/dist/imagePane.css +0 -4
- package/dist/imagePane.js +0 -67
- package/dist/index.js +0 -123
- package/dist/internal/internalPane.css +0 -14
- package/dist/internal/internalPane.js +0 -183
- package/dist/mainPage/footer.js +0 -29
- package/dist/mainPage/header.js +0 -203
- package/dist/mainPage/index.js +0 -78
- package/dist/mainPage/menu.css +0 -243
- package/dist/mainPage/menu.js +0 -449
- package/dist/microblogPane/mbStyle.css +0 -267
- package/dist/microblogPane/microblogPane.js +0 -1031
- package/dist/n3Pane.css +0 -49
- package/dist/n3Pane.js +0 -88
- package/dist/outline/context.js +0 -21
- package/dist/outline/manager.css +0 -78
- package/dist/outline/manager.js +0 -2115
- package/dist/outline/outlineIcons.js +0 -126
- package/dist/outline/propertyViews.js +0 -43
- package/dist/outline/queryByExample.js +0 -285
- package/dist/outline/userInput.js +0 -1821
- package/dist/outline/viewAsImage.js +0 -14
- package/dist/outline/viewAsMbox.js +0 -21
- package/dist/pad/padPane.css +0 -40
- package/dist/pad/padPane.js +0 -421
- package/dist/playlist/playlistPane.js +0 -119
- package/dist/profileUtils/ownerProfile.js +0 -84
- package/dist/registerPanes.js +0 -145
- package/dist/schedule/schedulePane.css +0 -294
- package/dist/schedule/schedulePane.js +0 -1022
- package/dist/sharing/sharingPane.js +0 -48
- package/dist/slideshow/slideshowPane.js +0 -79
- package/dist/social/editProfileDetails.js +0 -362
- package/dist/social/socialPane.css +0 -1464
- package/dist/social/socialPane.js +0 -651
- package/dist/social/socialSections.js +0 -393
- package/dist/social/spinner.js +0 -13
- package/dist/social/triage.js +0 -79
- package/dist/solid-panes.js +0 -87502
- package/dist/solid-panes.js.map +0 -1
- package/dist/solid-panes.min.js +0 -3811
- package/dist/solid-panes.min.js.map +0 -1
- package/dist/styles/tabbedtab.css +0 -1066
- package/dist/styles/utilities.css +0 -5
- package/dist/tabbed/tabbedPane.js +0 -59
- package/dist/tableViewPane.js +0 -56
- package/dist/transaction/pane.js +0 -477
- package/dist/transaction/period.js +0 -323
- package/dist/trip/tripPane.js +0 -174
- package/dist/trustedApplications/trustedApplications.dom.js +0 -145
- package/dist/trustedApplications/trustedApplications.utils.js +0 -23
- package/dist/trustedApplications/trustedApplications.view.js +0 -55
- package/dist/ui/pane.js +0 -146
- package/dist/versionInfo.js +0 -41
- package/dist/video/videoPane.js +0 -42
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { createLeftSideMenu as e, refreshMenu as t } from "./menu2.esm.js";
|
|
2
|
+
import { createHeader as n } from "./header.esm.js";
|
|
3
|
+
import { createFooter as r } from "./footer.esm.js";
|
|
4
|
+
import { getOutliner as i } from "../index.esm.js";
|
|
5
|
+
//#region src/mainPage/index.ts
|
|
6
|
+
var a = "__lastRenderEnvSignature";
|
|
7
|
+
function o(e) {
|
|
8
|
+
return e ? [
|
|
9
|
+
e.layout,
|
|
10
|
+
e.theme,
|
|
11
|
+
e.inputMode
|
|
12
|
+
].join("|") : "";
|
|
13
|
+
}
|
|
14
|
+
function s() {
|
|
15
|
+
let e = document.getElementById("MainContent");
|
|
16
|
+
return e || (e = document.createElement("main"), e.id = "MainContent", e.setAttribute("role", "main"), e.setAttribute("tabindex", "-1"), e.setAttribute("aria-live", "polite"), document.body.appendChild(e)), e;
|
|
17
|
+
}
|
|
18
|
+
async function c(t, c, l) {
|
|
19
|
+
s();
|
|
20
|
+
let u = i(document, l);
|
|
21
|
+
u[a] = o(l), c ||= window.location.href;
|
|
22
|
+
let d = typeof c == "string" ? t.sym(c) : c;
|
|
23
|
+
u.GotoSubject(d, !0, void 0, !0, void 0);
|
|
24
|
+
let f = await n(u), p = e(d, u), m = p.then(() => r(t));
|
|
25
|
+
return Promise.all([
|
|
26
|
+
f,
|
|
27
|
+
p,
|
|
28
|
+
m
|
|
29
|
+
]);
|
|
30
|
+
}
|
|
31
|
+
async function l(e) {
|
|
32
|
+
let n = e?.context?.session?.store, r = e?.context?.session?.paneRegistry, i = window.document.location.href, s = window.history.state?.paneName, c = s ? r?.byName?.(s) : void 0, l = o(e?.context?.environment);
|
|
33
|
+
l !== (e?.[a] ?? "") && n && typeof e?.GotoSubject == "function" && (e.GotoSubject(n.sym(i), !0, c, !0, void 0), e[a] = l), t(e.context.environment?.layout === "mobile" ? "mobile" : "desktop");
|
|
34
|
+
}
|
|
35
|
+
//#endregion
|
|
36
|
+
export { c as initMainPage, l as refreshUI };
|
|
37
|
+
|
|
38
|
+
//# sourceMappingURL=index.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.esm.js","names":[],"sources":["../../src/mainPage/index.ts"],"sourcesContent":["/* Main Page\n **\n ** This code is called in mashlib and renders the header and footer of the Databrowser.\n */\n\nimport { LiveStore, NamedNode } from 'rdflib'\nimport type { RenderEnvironment } from 'pane-registry'\nimport { getOutliner, OutlineManager } from '../index'\nimport { createHeader } from './header'\nimport { createFooter } from './footer'\nimport { createLeftSideMenu, refreshMenu } from './menu'\n\n// Symbol used to stash the last render-relevant env snapshot on the outliner\n// so refreshUI can skip a full GotoSubject re-render when nothing changed.\nconst LAST_RENDER_ENV_KEY = '__lastRenderEnvSignature'\n\nfunction renderEnvSignature (env?: RenderEnvironment): string {\n if (!env) return ''\n return [env.layout, env.theme, env.inputMode].join('|')\n}\n\nexport { refreshMenu as updateMenuLayout } from './menu'\n\nfunction ensureMainContent () {\n let main = document.getElementById('MainContent') as HTMLElement | null\n if (!main) {\n main = document.createElement('main')\n main.id = 'MainContent'\n main.setAttribute('role', 'main')\n main.setAttribute('tabindex', '-1')\n main.setAttribute('aria-live', 'polite')\n document.body.appendChild(main)\n }\n return main\n}\n\nexport async function initMainPage (\n store: LiveStore,\n uri?: string | NamedNode | null,\n environment?: RenderEnvironment\n) {\n ensureMainContent()\n const outliner = getOutliner(document, environment)\n ;(outliner as any)[LAST_RENDER_ENV_KEY] = renderEnvSignature(environment)\n uri = uri || window.location.href\n const subject: NamedNode = typeof uri === 'string' ? store.sym(uri) : uri\n outliner.GotoSubject(subject, true, undefined, true, undefined)\n\n const header = await createHeader(outliner)\n const menu = createLeftSideMenu(subject, outliner)\n const footer = menu.then(() => createFooter(store))\n return Promise.all([header, menu, footer])\n}\n\nexport async function refreshUI (outliner: OutlineManager) {\n const store = outliner?.context?.session?.store\n const paneRegistry = outliner?.context?.session?.paneRegistry\n const subjectUri = window.document.location.href\n const paneName = window.history.state?.paneName\n const pane = paneName ? paneRegistry?.byName?.(paneName) : undefined\n\n // Only re-run GotoSubject (full pane re-render) when render-relevant\n // environment fields actually changed since the last render.\n const currentSignature = renderEnvSignature(outliner?.context?.environment)\n const previousSignature = (outliner as any)?.[LAST_RENDER_ENV_KEY] ?? ''\n const envChanged = currentSignature !== previousSignature\n\n if (envChanged && store && typeof outliner?.GotoSubject === 'function') {\n outliner.GotoSubject(store.sym(subjectUri), true, pane, true, undefined)\n ;(outliner as any)[LAST_RENDER_ENV_KEY] = currentSignature\n }\n\n refreshMenu(outliner.context.environment?.layout === 'mobile' ? 'mobile' : 'desktop')\n}\n"],"mappings":";;;;;AAcA,IAAM,IAAsB;AAE5B,SAAS,EAAoB,GAAiC;CAE5D,OADK,IACE;EAAC,EAAI;EAAQ,EAAI;EAAO,EAAI;CAAS,CAAC,CAAC,KAAK,GAAG,IADrC;AAEnB;AAIA,SAAS,IAAqB;CAC5B,IAAI,IAAO,SAAS,eAAe,aAAa;CAShD,OARK,MACH,IAAO,SAAS,cAAc,MAAM,GACpC,EAAK,KAAK,eACV,EAAK,aAAa,QAAQ,MAAM,GAChC,EAAK,aAAa,YAAY,IAAI,GAClC,EAAK,aAAa,aAAa,QAAQ,GACvC,SAAS,KAAK,YAAY,CAAI,IAEzB;AACT;AAEA,eAAsB,EACpB,GACA,GACA,GACA;CACA,EAAkB;CAClB,IAAM,IAAW,EAAY,UAAU,CAAW;CAElD,AADC,EAAkB,KAAuB,EAAmB,CAAW,GACxE,MAAa,OAAO,SAAS;CAC7B,IAAM,IAAqB,OAAO,KAAQ,WAAW,EAAM,IAAI,CAAG,IAAI;CACtE,EAAS,YAAY,GAAS,IAAM,KAAA,GAAW,IAAM,KAAA,CAAS;CAE9D,IAAM,IAAS,MAAM,EAAa,CAAQ,GACpC,IAAO,EAAmB,GAAS,CAAQ,GAC3C,IAAS,EAAK,WAAW,EAAa,CAAK,CAAC;CAClD,OAAO,QAAQ,IAAI;EAAC;EAAQ;EAAM;CAAM,CAAC;AAC3C;AAEA,eAAsB,EAAW,GAA0B;CACzD,IAAM,IAAQ,GAAU,SAAS,SAAS,OACpC,IAAe,GAAU,SAAS,SAAS,cAC3C,IAAa,OAAO,SAAS,SAAS,MACtC,IAAW,OAAO,QAAQ,OAAO,UACjC,IAAO,IAAW,GAAc,SAAS,CAAQ,IAAI,KAAA,GAIrD,IAAmB,EAAmB,GAAU,SAAS,WAAW;CAS1E,AAPmB,OADQ,IAAmB,MAAwB,OAGpD,KAAS,OAAO,GAAU,eAAgB,eAC1D,EAAS,YAAY,EAAM,IAAI,CAAU,GAAG,IAAM,GAAM,IAAM,KAAA,CAAS,GACtE,EAAkB,KAAuB,IAG5C,EAAY,EAAS,QAAQ,aAAa,WAAW,WAAW,WAAW,SAAS;AACtF"}
|
package/dist/mainPage/menu.d.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import './menu.css';
|
|
2
1
|
import { OutlineManager } from '../outline/manager';
|
|
3
|
-
import { NamedNode } from 'rdflib';
|
|
2
|
+
import { NamedNode } from '../../node_modules/rdflib';
|
|
4
3
|
export declare const setActiveMenuPane: (paneName?: string) => void;
|
|
5
4
|
export declare const refreshMenu: (layout: "mobile" | "desktop") => void;
|
|
6
5
|
export declare const createLeftSideMenu: (subject: NamedNode, outliner: OutlineManager) => Promise<void>;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
(function(){try{if(typeof document<`u`){var e=document.createElement(`style`);e.appendChild(document.createTextNode(`.menu-content{flex-direction:column;gap:.5rem;min-height:0;display:flex;overflow-y:auto}.app-nav.mobile-hidden .menu-content,.app-nav.mobile-visible .menu-content{padding-top:.75rem}.menu-footer{border-top:1px solid var(--color-border,#d1d1d1);width:100%;color:var(--color-text-muted,#555);background:inherit;padding:1rem;font-size:.875rem;line-height:1.4}.app-nav.collapsed .menu-footer{text-align:center;padding:.75rem 0;display:none}.menu-item{align-items:center;gap:var(--spacing-2xs,.625rem);border-radius:var(--border-radius-sm,.2rem);padding:.5rem var(--spacing-xs,.75rem);color:var(--color-text-heading,#000);text-align:left;cursor:pointer;background:0 0;border:0;width:100%;text-decoration:none;display:flex}.menu-toggle-icon{width:30px;height:30px}.menu-item-icon{width:var(--icon-xxs,1rem);height:var(--icon-xxs,1rem);flex:0 0 var(--icon-xxs,1rem);object-fit:contain}.menu-item-label{min-width:0}.menu-item:hover,.menu-item:focus{background:var(--color-header-menu-item-hover,#e6dcff)}.menu-item-active,.menu-item-active:hover,.menu-item-active:focus{background:var(--color-header-menu-item-selected,#cbb9ff);color:var(--color-header-menu-item-text-selected,#7c4cff)}.menu-toggle{z-index:300;min-width:var(--icon-md,2.5rem);height:var(--icon-md,2.5rem);border:1px solid var(--color-border);background:var(--color-menu-bg,#fff);color:var(--color-text);border-radius:var(--border-radius-sm,.2rem);justify-content:center;align-items:center;gap:.375rem;margin:0;padding:0 .625rem;display:inline-flex;position:fixed;top:.5rem;left:1rem}.menu-toggle-label{white-space:nowrap;text-overflow:ellipsis;max-width:10rem;font-size:1.2rem;font-weight:600;overflow:hidden}.menu-overlay{z-index:100;background:#00000059;position:fixed;inset:0}.app-nav{background:var(--color-menu-bg,#fff);border-right:1px solid var(--color-border);z-index:10;grid-template-rows:1fr auto;width:min(18rem,320px);display:grid;position:fixed;top:0;bottom:0;left:0;overflow:hidden}.app-nav.mobile-hidden,.app-nav.mobile-visible{z-index:999;background:var(--color-menu-bg,#fff);width:min(80vw,320px);height:100vh;min-height:100vh;box-shadow:none;border-right:none;flex-direction:column;padding-top:3.75rem;transition:transform .25s ease-in-out;display:flex;position:fixed;top:0;bottom:0;left:0;overflow:hidden;transform:translate(-100%)}.app-nav.mobile-hidden .menu-content,.app-nav.mobile-visible .menu-content{flex:1;min-height:0}.app-nav.mobile-visible{visibility:visible;background:var(--color-menu-bg,#fff);transform:translate(0)}.menu-header{color:#fff;box-sizing:border-box;z-index:1000;width:100%;height:3.75rem;min-height:3.75rem;box-shadow:none;border-right:none;justify-content:flex-start;align-items:center;font-weight:600;display:none;position:absolute;top:0;left:0;right:0;background-color:#42345a!important}.app-nav.mobile-hidden .menu-header,.app-nav.mobile-visible .menu-header{display:flex}.menu-header-title{color:#fff;font-size:1.25rem}.menu-close{color:#fff;cursor:pointer;background:0 0;border:none;padding-left:1.25rem;font-size:1.25rem;line-height:1}.menu-close:hover,.menu-close:focus{opacity:.85}.app-nav.collapsed{width:4.5rem;min-width:4.5rem}.app-nav.collapsed .menu-content{align-items:center;gap:.25rem}.app-nav.collapsed .menu-item{justify-content:center;padding-left:.5rem;padding-right:.5rem}.app-nav.collapsed .menu-item-label{display:none}.menu-collapse{z-index:320;border:1px solid var(--color-border);width:1.25rem;height:1.25rem;color:var(--color-text);cursor:pointer;border-radius:999px;justify-content:center;align-items:center;font-size:1.3rem;line-height:1;display:inline-flex;position:fixed;bottom:8rem;left:3rem;box-shadow:0 1px 4px #7c4dff1f}@media (width<=768px){.menu-collapse{display:none}}`)),document.head.appendChild(e)}}catch(e){console.error(`vite-plugin-css-injected-by-js`,e)}})();const e=require("../profileUtils/ownerProfile.cjs.js");;const t=n=require("../icons/iconHelper.cjs.js");let r=require("solid-logic"),i=require("rdflib");var a=n.createUiIcon(t.default,`Menu Icon`,`#ffffff`),o=`solid-panes-menu-collapsed`,s=!1,c=()=>{try{return localStorage.getItem(o)===`true`}catch{return!1}},l=e=>{try{localStorage.setItem(o,String(e))}catch{}},u=()=>{let e=document.getElementById(`MenuCollapseBtn`);e&&(e.textContent=s?`›`:`‹`,e.setAttribute(`aria-label`,s?`Expand navigation menu`:`Collapse navigation menu`))},d=(e,t)=>{if(!e||!t)return;let n=e.getBoundingClientRect(),r=parseFloat(getComputedStyle(document.documentElement).fontSize)||16,i=parseFloat(getComputedStyle(t).width)||1.25*r,a=(n.width-i/2)/r;t.style.setProperty(`left`,`${a.toFixed(3)}rem`,`important`)},f=e=>{e&&(e.classList.toggle(`collapsed`,s),u(),d(e,document.getElementById(`MenuCollapseBtn`)))},p=async()=>{try{return!!(await r.authn.checkUser()||r.authn.currentUser())}catch{return!!r.authn.currentUser()}},m=()=>!!r.authn.currentUser(),h=e=>{let t=document.querySelector(`solid-ui-footer`);t&&(t.style.display=e?`none`:``)},g=e=>{let t=r.authn.currentUser();return!!(t&&e&&t.sameTerm(e))},_=()=>{s=c();let e=document.querySelector(`[role="main"]`)||document.body,t=document.getElementById(`NavMenu`);if(!t){t=document.createElement(`nav`),t.id=`NavMenu`,t.className=`app-nav`,t.setAttribute(`aria-label`,`App navigation`),t.hidden=!0;let n=document.createElement(`div`);n.className=`menu-header`;let r=document.createElement(`button`);r.id=`MenuCloseBtn`,r.className=`menu-close`,r.type=`button`,r.setAttribute(`aria-label`,`Close menu`),r.textContent=`✕`,n.appendChild(r);let i=document.createElement(`span`);i.className=`menu-header-title`,i.textContent=`Menu`,n.appendChild(i),t.appendChild(n);let a=document.createElement(`div`);a.id=`AuthState`,a.className=`menu-auth-state`,t.appendChild(a);let o=document.createElement(`div`);o.id=`NavMenuContent`,o.className=`menu-content`,t.appendChild(o),e.insertBefore(t,e.firstChild)}else if(!t.querySelector(`.menu-header`)){let e=document.createElement(`div`);e.className=`menu-header`;let n=document.createElement(`button`);n.id=`MenuCloseBtn`,n.className=`menu-close`,n.type=`button`,n.setAttribute(`aria-label`,`Close menu`),n.textContent=`✕`,e.appendChild(n);let r=document.createElement(`span`);r.className=`menu-header-title`,r.textContent=`Menu`,e.appendChild(r),t.insertBefore(e,t.firstChild)}let n=document.getElementById(`MenuToggleBtn`);if(!n){n=document.createElement(`button`),n.id=`MenuToggleBtn`,n.className=`menu-toggle`,n.type=`button`,n.setAttribute(`aria-label`,`Toggle navigation menu`),n.hidden=!0;let t=document.createElement(`img`);t.src=a,t.alt=``,t.className=`menu-toggle-icon`,t.setAttribute(`aria-hidden`,`true`),n.appendChild(t);let r=document.createElement(`span`);r.id=`MenuToggleLabel`,r.className=`menu-toggle-label`,n.appendChild(r),e.insertBefore(n,e.firstChild)}let r=document.getElementById(`MenuOverlay`);r||(r=document.createElement(`div`),r.id=`MenuOverlay`,r.className=`menu-overlay`,r.hidden=!0,document.body.appendChild(r));let i=document.getElementById(`MenuCollapseBtn`);i||(i=document.createElement(`button`),i.id=`MenuCollapseBtn`,i.className=`menu-collapse`,i.type=`button`,i.setAttribute(`aria-label`,`Collapse navigation menu`),i.textContent=`‹`,i.hidden=!0,document.body.appendChild(i))},v=async(e,t)=>{try{return(await t.getDashboardItems(e)).map(n=>{let i=n.subject||r.authn.currentUser()||e;return{icon:n.icon,subject:i,paneName:n.tabName||n.paneName,label:n.label,onclick:()=>E(i,t,n.tabName||n.paneName)}})}catch(e){return console.error(`Unable to load navigation menu items`,e),[]}},y=e=>{let t=document.createElement(`button`);if(t.className=`menu-item`,t.type=`button`,e.paneName&&(t.dataset.paneName=e.paneName),e.icon){let n=document.createElement(`img`);n.className=`menu-item-icon`,n.src=e.icon,n.alt=``,n.setAttribute(`aria-hidden`,`true`),t.appendChild(n)}let n=document.createElement(`span`);return n.className=`menu-item-label`,n.textContent=e.label,t.appendChild(n),e.id&&(t.id=e.id),t.addEventListener(`click`,async()=>{await e.onclick()}),t},b=(e,t)=>{let n=Array.from(e.querySelectorAll(`.menu-item`)),r;n.forEach(e=>{let n=!!t&&e.dataset.paneName===t;e.classList.toggle(`menu-item-active`,n),n?(e.setAttribute(`aria-current`,`page`),r=e):e.removeAttribute(`aria-current`)}),t?!r&&n[0]?e.dataset.activePaneName=``:e.dataset.activePaneName=t:e.dataset.activePaneName=``,S(r)},x=e=>{let t=document.getElementById(`NavMenuContent`);t&&b(t,e)},S=e=>{let t=document.getElementById(`MenuToggleLabel`);t&&(t.textContent=e?.querySelector(`.menu-item-label`)?.textContent||``)},C=async(e,t,n)=>{let r=await v(e,t);n.replaceChildren(...r.map(y)),b(n,g(e)?`profile`:n.dataset.activePaneName)},w=e=>{let t=document.getElementById(`NavMenu`),n=document.getElementById(`MenuToggleBtn`),r=document.getElementById(`MenuCollapseBtn`),i=document.getElementById(`MenuOverlay`);if(!(!t||!n||!i||!r)){if(!m()){t.hidden=!0,t.style.display=`none`,n.hidden=!0,n.style.display=`none`,r.hidden=!0,r.style.display=`none`,i.hidden=!0,i.style.display=`none`,h(!1);return}h(!0),e===`mobile`?(t.classList.add(`mobile-hidden`),t.classList.remove(`mobile-visible`),n.hidden=!1,n.style.display=``,r.hidden=!0,r.style.display=`none`,i.hidden=!0,i.style.display=`none`,t.hidden=!1,t.style.display=``,t.classList.remove(`collapsed`),n.setAttribute(`aria-expanded`,`false`)):(t.classList.remove(`mobile-hidden`,`mobile-visible`),n.hidden=!0,n.style.display=`none`,r.hidden=!1,r.style.display=``,i.hidden=!0,i.style.display=`none`,t.hidden=!1,t.style.display=``,f(t),d(t,r),n.setAttribute(`aria-expanded`,`false`))}},T=async(e,t)=>{_();let n=document.getElementById(`NavMenu`),i=document.getElementById(`MenuToggleBtn`),a=document.getElementById(`MenuOverlay`),o=document.getElementById(`NavMenuContent`);await p();let c=()=>{!n||!i||!a||(n.classList.remove(`mobile-visible`),n.classList.add(`mobile-hidden`),n.style.display=``,i.setAttribute(`aria-expanded`,`false`),a.hidden=!0,a.style.display=`none`)},u=()=>{!n||!i||!a||(n.classList.remove(`mobile-hidden`),n.classList.add(`mobile-visible`),n.style.display=``,i.setAttribute(`aria-expanded`,`true`),a.hidden=!1,a.style.display=``)},d=document.getElementById(`MenuCollapseBtn`),g=()=>{!n||!d||s&&(s=!1,l(s),f(n))};n&&n.addEventListener(`click`,e=>{let n=t.context?.environment?.layout===`mobile`,r=e.target.closest(`#MenuCollapseBtn`);!n&&s&&!r&&g()}),i&&i.addEventListener(`click`,()=>{n?.classList.contains(`mobile-visible`)?c():u()}),d&&d.addEventListener(`click`,()=>{s=!s,l(s),f(n)});let v=()=>{let e=m();n&&(n.hidden=!e,n.style.display=e?``:`none`),i&&(i.hidden=!e,i.style.display=e?``:`none`),d&&(d.hidden=!e,d.style.display=e?``:`none`),a&&(a.hidden=!e,a.style.display=e?``:`none`),h(e)};v(),a&&a.addEventListener(`click`,c);let y=document.getElementById(`MenuCloseBtn`);if(y&&y.addEventListener(`click`,c),o){if(v(),m()&&await C(e,t,o),!o.dataset.authEventsBound){let n=async()=>{await C(e,t,o)};r.authSession.events.on(`login`,async()=>{await p(),v(),w(t.context?.environment?.layout===`mobile`?`mobile`:`desktop`),await n()}),r.authSession.events.on(`logout`,async()=>{await p(),v(),w(t.context?.environment?.layout===`mobile`?`mobile`:`desktop`),await n()}),r.authSession.events.on(`sessionRestore`,async()=>{await p(),v(),w(t.context?.environment?.layout===`mobile`?`mobile`:`desktop`),await n()}),o.dataset.authEventsBound=`true`}o.addEventListener(`click`,e=>{let n=e.target.closest(`.menu-item`);n instanceof HTMLButtonElement&&b(o,n.dataset.paneName);let r=t.context?.environment?.layout===`mobile`;n&&r&&c()})}w(t.context?.environment?.layout===`mobile`?`mobile`:`desktop`)};async function E(t,n,a){let o=r.authn.currentUser();if(!t)if(o)t=o;else{let r=n?.context?.store||n?.context?.session?.store||n?.kb,a=n?.context?.fetcher||r?.fetcher;if(!r||!a)throw Error(`Unable to load profile: missing RDF store or fetcher`);let o=(0,i.sym)(window.location.href);t=await e.loadProfileFromURI(t||o,r,a)}n.showDashboard(t,{pane:a})}exports.createLeftSideMenu=T,exports.refreshMenu=w,exports.setActiveMenuPane=x;
|
|
2
|
+
//# sourceMappingURL=menu2.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"menu2.cjs.js","names":[],"sources":["../../src/mainPage/menu.ts"],"sourcesContent":["import './menu.css'\nimport { OutlineManager } from '../outline/manager'\nimport { authSession, authn } from 'solid-logic'\nimport { NamedNode, sym } from 'rdflib'\nimport { loadProfileFromURI } from '../profileUtils/ownerProfile'\nimport menuIcon from '../icons/menu.svg?raw'\nimport { createUiIcon } from '../icons/iconHelper'\n\ntype MenuItem = {\n id?: string\n icon?: string\n paneName?: string\n subject?: NamedNode\n label: string\n onclick: () => void | Promise<void>\n}\n\nconst MENU_ICON = createUiIcon(menuIcon, 'Menu Icon', '#ffffff')\nconst MENU_COLLAPSED_KEY = 'solid-panes-menu-collapsed'\nlet menuCollapsed = false\n\nconst loadMenuCollapsedState = (): boolean => {\n try {\n return localStorage.getItem(MENU_COLLAPSED_KEY) === 'true'\n } catch (error) {\n return false\n }\n}\n\nconst saveMenuCollapsedState = (collapsed: boolean): void => {\n try {\n localStorage.setItem(MENU_COLLAPSED_KEY, String(collapsed))\n } catch (error) {\n // ignore storage errors\n }\n}\n\nconst updateMenuCollapseButton = (): void => {\n const collapseBtn = document.getElementById('MenuCollapseBtn') as HTMLButtonElement | null\n if (!collapseBtn) return\n collapseBtn.textContent = menuCollapsed ? '\\u203A' : '\\u2039'\n collapseBtn.setAttribute('aria-label', menuCollapsed ? 'Expand navigation menu' : 'Collapse navigation menu')\n}\n\nconst updateCollapseButtonPosition = (navMenu: HTMLElement | null, collapseBtn: HTMLButtonElement | null): void => {\n if (!navMenu || !collapseBtn) return\n const navRect = navMenu.getBoundingClientRect()\n const rootFontSize = parseFloat(getComputedStyle(document.documentElement).fontSize) || 16\n const buttonWidth = parseFloat(getComputedStyle(collapseBtn).width) || 1.25 * rootFontSize\n const offsetRem = (navRect.width - buttonWidth / 2) / rootFontSize\n collapseBtn.style.setProperty('left', `${offsetRem.toFixed(3)}rem`, 'important')\n}\n\nconst applyMenuCollapsedState = (navMenu: HTMLElement | null): void => {\n if (!navMenu) return\n navMenu.classList.toggle('collapsed', menuCollapsed)\n updateMenuCollapseButton()\n const collapseBtn = document.getElementById('MenuCollapseBtn') as HTMLButtonElement | null\n updateCollapseButtonPosition(navMenu, collapseBtn)\n}\n\nconst refreshAuthStateFromSession = async (): Promise<boolean> => {\n try {\n const webId = await authn.checkUser()\n return Boolean(webId || authn.currentUser())\n } catch {\n // Keep the menu responsive even if auth refresh is transiently unavailable.\n return Boolean(authn.currentUser())\n }\n}\n\nconst isLoggedIn = (): boolean => Boolean(authn.currentUser())\n\nconst setFooterVisibility = (loggedIn: boolean): void => {\n const footer = document.querySelector('solid-ui-footer') as HTMLElement | null\n if (!footer) return\n footer.style.display = loggedIn ? 'none' : ''\n}\n\nconst isViewingOwnProfile = (subject: NamedNode): boolean => {\n const currentUser = authn.currentUser()\n return Boolean(currentUser && subject && currentUser.sameTerm(subject))\n}\n\nconst ensureMenuSkeleton = () => {\n menuCollapsed = loadMenuCollapsedState()\n const root = document.querySelector('[role=\"main\"]') || document.body\n\n let navMenu = document.getElementById('NavMenu') as HTMLElement | null\n if (!navMenu) {\n navMenu = document.createElement('nav')\n navMenu.id = 'NavMenu'\n navMenu.className = 'app-nav'\n navMenu.setAttribute('aria-label', 'App navigation')\n navMenu.hidden = true\n\n const headerEl = document.createElement('div')\n headerEl.className = 'menu-header'\n\n const closeBtn = document.createElement('button')\n closeBtn.id = 'MenuCloseBtn'\n closeBtn.className = 'menu-close'\n closeBtn.type = 'button'\n closeBtn.setAttribute('aria-label', 'Close menu')\n closeBtn.textContent = '✕'\n headerEl.appendChild(closeBtn)\n\n const title = document.createElement('span')\n title.className = 'menu-header-title'\n title.textContent = 'Menu'\n headerEl.appendChild(title)\n\n navMenu.appendChild(headerEl)\n\n const authStateEl = document.createElement('div')\n authStateEl.id = 'AuthState'\n authStateEl.className = 'menu-auth-state'\n navMenu.appendChild(authStateEl)\n\n const contentEl = document.createElement('div')\n contentEl.id = 'NavMenuContent'\n contentEl.className = 'menu-content'\n navMenu.appendChild(contentEl)\n\n root.insertBefore(navMenu, root.firstChild)\n } else if (!navMenu.querySelector('.menu-header')) {\n const headerEl = document.createElement('div')\n headerEl.className = 'menu-header'\n\n const closeBtn = document.createElement('button')\n closeBtn.id = 'MenuCloseBtn'\n closeBtn.className = 'menu-close'\n closeBtn.type = 'button'\n closeBtn.setAttribute('aria-label', 'Close menu')\n closeBtn.textContent = '✕'\n headerEl.appendChild(closeBtn)\n\n const title = document.createElement('span')\n title.className = 'menu-header-title'\n title.textContent = 'Menu'\n headerEl.appendChild(title)\n\n navMenu.insertBefore(headerEl, navMenu.firstChild)\n }\n\n let toggle = document.getElementById('MenuToggleBtn') as HTMLButtonElement | null\n if (!toggle) {\n toggle = document.createElement('button')\n toggle.id = 'MenuToggleBtn'\n toggle.className = 'menu-toggle'\n toggle.type = 'button'\n toggle.setAttribute('aria-label', 'Toggle navigation menu')\n toggle.hidden = true\n const toggleImg = document.createElement('img')\n toggleImg.src = MENU_ICON\n toggleImg.alt = ''\n toggleImg.className = 'menu-toggle-icon'\n toggleImg.setAttribute('aria-hidden', 'true')\n toggle.appendChild(toggleImg)\n const toggleLabel = document.createElement('span')\n toggleLabel.id = 'MenuToggleLabel'\n toggleLabel.className = 'menu-toggle-label'\n toggle.appendChild(toggleLabel)\n root.insertBefore(toggle, root.firstChild)\n }\n\n let overlay = document.getElementById('MenuOverlay') as HTMLElement | null\n if (!overlay) {\n overlay = document.createElement('div')\n overlay.id = 'MenuOverlay'\n overlay.className = 'menu-overlay'\n overlay.hidden = true\n document.body.appendChild(overlay)\n }\n\n let collapseBtn = document.getElementById('MenuCollapseBtn') as HTMLButtonElement | null\n if (!collapseBtn) {\n collapseBtn = document.createElement('button')\n collapseBtn.id = 'MenuCollapseBtn'\n collapseBtn.className = 'menu-collapse'\n collapseBtn.type = 'button'\n collapseBtn.setAttribute('aria-label', 'Collapse navigation menu')\n collapseBtn.textContent = '\\u2039'\n collapseBtn.hidden = true\n document.body.appendChild(collapseBtn)\n }\n}\n\nconst getMenuItems = async (subject: NamedNode, outliner: any): Promise<MenuItem[]> => {\n try {\n const items = await outliner.getDashboardItems(subject)\n return items.map((element) => {\n const targetSubject = element.subject || (authn.currentUser() || subject)\n return {\n icon: element.icon,\n subject: targetSubject,\n paneName: element.tabName || element.paneName,\n label: element.label,\n onclick: () => openDashboardPane(targetSubject, outliner, element.tabName || element.paneName)\n }\n })\n } catch (error) {\n console.error('Unable to load navigation menu items', error)\n return []\n }\n}\n\nconst createMenuButton = (item: MenuItem) => {\n const button = document.createElement('button')\n button.className = 'menu-item'\n button.type = 'button'\n if (item.paneName) {\n button.dataset.paneName = item.paneName\n }\n\n if (item.icon) {\n const icon = document.createElement('img')\n icon.className = 'menu-item-icon'\n icon.src = item.icon\n icon.alt = ''\n icon.setAttribute('aria-hidden', 'true')\n button.appendChild(icon)\n }\n\n const label = document.createElement('span')\n label.className = 'menu-item-label'\n label.textContent = item.label\n button.appendChild(label)\n\n if (item.id) {\n button.id = item.id\n }\n\n button.addEventListener('click', async () => {\n await item.onclick()\n })\n\n return button\n}\n\nconst setActiveMenuItem = (container: HTMLElement, paneName?: string) => {\n const menuItems = Array.from(container.querySelectorAll<HTMLButtonElement>('.menu-item'))\n let activeItem: HTMLButtonElement | undefined\n\n menuItems.forEach((item) => {\n const isActive = Boolean(paneName) && item.dataset.paneName === paneName\n item.classList.toggle('menu-item-active', isActive)\n if (isActive) {\n item.setAttribute('aria-current', 'page')\n activeItem = item\n } else {\n item.removeAttribute('aria-current')\n }\n })\n\n if (paneName) {\n if (!activeItem && menuItems[0]) {\n // If an explicit pane name is provided but does not match any menu\n // item, fall back to clearing selection rather than selecting the first item.\n container.dataset.activePaneName = ''\n } else {\n container.dataset.activePaneName = paneName\n }\n } else {\n // If there is no active pane, do not auto-select the first menu item.\n container.dataset.activePaneName = ''\n }\n\n updateToggleLabel(activeItem)\n}\n\nexport const setActiveMenuPane = (paneName?: string): void => {\n const navMenuContent = document.getElementById('NavMenuContent') as HTMLElement | null\n if (!navMenuContent) return\n setActiveMenuItem(navMenuContent, paneName)\n}\n\nconst updateToggleLabel = (activeItem?: HTMLButtonElement): void => {\n const toggleLabel = document.getElementById('MenuToggleLabel')\n if (!toggleLabel) return\n toggleLabel.textContent = activeItem?.querySelector('.menu-item-label')?.textContent || ''\n}\n\nconst renderMenuItems = async (subject: NamedNode, outliner: OutlineManager, container: HTMLElement) => {\n const menuItems = await getMenuItems(subject, outliner)\n\n container.replaceChildren(...menuItems.map(createMenuButton))\n // If the user is logged in and viewing their own profile, select \"Your profile\"\n // by default. This also surfaces \"Your profile\" at the top of the mobile view\n // via the menu toggle label, which mirrors the active menu item.\n const activePane = isViewingOwnProfile(subject)\n ? 'profile'\n : container.dataset.activePaneName\n setActiveMenuItem(container, activePane)\n}\n\nexport const refreshMenu = (layout: 'mobile' | 'desktop') => {\n const navMenu = document.getElementById('NavMenu') as HTMLElement | null\n const toggle = document.getElementById('MenuToggleBtn') as HTMLButtonElement | null\n const collapseBtn = document.getElementById('MenuCollapseBtn') as HTMLButtonElement | null\n const overlay = document.getElementById('MenuOverlay') as HTMLElement | null\n\n if (!navMenu || !toggle || !overlay || !collapseBtn) return\n\n const loggedIn = isLoggedIn()\n if (!loggedIn) {\n navMenu.hidden = true\n navMenu.style.display = 'none'\n toggle.hidden = true\n toggle.style.display = 'none'\n collapseBtn.hidden = true\n collapseBtn.style.display = 'none'\n overlay.hidden = true\n overlay.style.display = 'none'\n setFooterVisibility(false)\n return\n }\n\n setFooterVisibility(true)\n\n if (layout === 'mobile') {\n navMenu.classList.add('mobile-hidden')\n navMenu.classList.remove('mobile-visible')\n toggle.hidden = false\n toggle.style.display = ''\n collapseBtn.hidden = true\n collapseBtn.style.display = 'none'\n overlay.hidden = true\n overlay.style.display = 'none'\n navMenu.hidden = false\n navMenu.style.display = ''\n navMenu.classList.remove('collapsed')\n toggle.setAttribute('aria-expanded', 'false')\n } else {\n navMenu.classList.remove('mobile-hidden', 'mobile-visible')\n toggle.hidden = true\n toggle.style.display = 'none'\n collapseBtn.hidden = false\n collapseBtn.style.display = ''\n overlay.hidden = true\n overlay.style.display = 'none'\n navMenu.hidden = false\n navMenu.style.display = ''\n applyMenuCollapsedState(navMenu)\n updateCollapseButtonPosition(navMenu, collapseBtn)\n toggle.setAttribute('aria-expanded', 'false')\n }\n}\n\nexport const createLeftSideMenu = async (subject: NamedNode, outliner: OutlineManager) => {\n ensureMenuSkeleton()\n const navMenu = document.getElementById('NavMenu') as HTMLElement | null\n const menuToggle = document.getElementById('MenuToggleBtn') as HTMLElement | null\n const menuOverlay = document.getElementById('MenuOverlay') as HTMLElement | null\n const navMenuContent = document.getElementById('NavMenuContent') as HTMLElement | null\n await refreshAuthStateFromSession()\n\n const closeMobileMenu = () => {\n if (!navMenu || !menuToggle || !menuOverlay) return\n navMenu.classList.remove('mobile-visible')\n navMenu.classList.add('mobile-hidden')\n navMenu.style.display = ''\n menuToggle.setAttribute('aria-expanded', 'false')\n menuOverlay.hidden = true\n menuOverlay.style.display = 'none'\n }\n\n const openMobileMenu = () => {\n if (!navMenu || !menuToggle || !menuOverlay) return\n navMenu.classList.remove('mobile-hidden')\n navMenu.classList.add('mobile-visible')\n navMenu.style.display = ''\n menuToggle.setAttribute('aria-expanded', 'true')\n menuOverlay.hidden = false\n menuOverlay.style.display = ''\n }\n\n const collapseBtn = document.getElementById('MenuCollapseBtn') as HTMLButtonElement | null\n\n const expandDesktopMenu = () => {\n if (!navMenu || !collapseBtn) return\n if (!menuCollapsed) return\n menuCollapsed = false\n saveMenuCollapsedState(menuCollapsed)\n applyMenuCollapsedState(navMenu)\n }\n\n if (navMenu) {\n navMenu.addEventListener('click', (event) => {\n const isMobile = outliner.context?.environment?.layout === 'mobile'\n const clickedCollapseButton = (event.target as HTMLElement).closest('#MenuCollapseBtn')\n if (!isMobile && menuCollapsed && !clickedCollapseButton) {\n expandDesktopMenu()\n }\n })\n }\n\n if (menuToggle) {\n menuToggle.addEventListener('click', () => {\n if (navMenu?.classList.contains('mobile-visible')) {\n closeMobileMenu()\n } else {\n openMobileMenu()\n }\n })\n }\n if (collapseBtn) {\n collapseBtn.addEventListener('click', () => {\n menuCollapsed = !menuCollapsed\n saveMenuCollapsedState(menuCollapsed)\n applyMenuCollapsedState(navMenu)\n })\n }\n\n const updateMenuVisibility = () => {\n const loggedIn = isLoggedIn()\n if (navMenu) {\n navMenu.hidden = !loggedIn\n navMenu.style.display = loggedIn ? '' : 'none'\n }\n if (menuToggle) {\n menuToggle.hidden = !loggedIn\n menuToggle.style.display = loggedIn ? '' : 'none'\n }\n if (collapseBtn) {\n collapseBtn.hidden = !loggedIn\n collapseBtn.style.display = loggedIn ? '' : 'none'\n }\n if (menuOverlay) {\n menuOverlay.hidden = !loggedIn\n menuOverlay.style.display = loggedIn ? '' : 'none'\n }\n setFooterVisibility(loggedIn)\n }\n\n updateMenuVisibility()\n\n if (menuOverlay) {\n menuOverlay.addEventListener('click', closeMobileMenu)\n }\n\n const closeBtn = document.getElementById('MenuCloseBtn') as HTMLButtonElement | null\n if (closeBtn) {\n closeBtn.addEventListener('click', closeMobileMenu)\n }\n\n if (navMenuContent) {\n updateMenuVisibility()\n const loggedIn = isLoggedIn()\n if (loggedIn) {\n await renderMenuItems(subject, outliner, navMenuContent)\n }\n\n if (!navMenuContent.dataset.authEventsBound) {\n const refreshMenuItems = async () => {\n await renderMenuItems(subject, outliner, navMenuContent)\n }\n\n authSession.events.on('login', async () => {\n await refreshAuthStateFromSession()\n updateMenuVisibility()\n refreshMenu(outliner.context?.environment?.layout === 'mobile' ? 'mobile' : 'desktop')\n await refreshMenuItems()\n })\n authSession.events.on('logout', async () => {\n await refreshAuthStateFromSession()\n updateMenuVisibility()\n refreshMenu(outliner.context?.environment?.layout === 'mobile' ? 'mobile' : 'desktop')\n await refreshMenuItems()\n })\n authSession.events.on('sessionRestore', async () => {\n await refreshAuthStateFromSession()\n updateMenuVisibility()\n refreshMenu(outliner.context?.environment?.layout === 'mobile' ? 'mobile' : 'desktop')\n await refreshMenuItems()\n })\n navMenuContent.dataset.authEventsBound = 'true'\n }\n\n navMenuContent.addEventListener('click', (event) => {\n const item = (event.target as HTMLElement).closest('.menu-item')\n if (item instanceof HTMLButtonElement) {\n setActiveMenuItem(navMenuContent, item.dataset.paneName)\n }\n const isMobile = outliner.context?.environment?.layout === 'mobile'\n if (item && isMobile) {\n closeMobileMenu()\n }\n })\n }\n\n refreshMenu(outliner.context?.environment?.layout === 'mobile' ? 'mobile' : 'desktop')\n}\n\nasync function openDashboardPane (subject, outliner: any, pane: string): Promise<void> {\n const me = authn.currentUser()\n if (!subject) {\n if (me) {\n subject = me\n } else {\n const store = outliner?.context?.store || outliner?.context?.session?.store || outliner?.kb\n const fetcher = outliner?.context?.fetcher || store?.fetcher\n if (!store || !fetcher) {\n throw new Error('Unable to load profile: missing RDF store or fetcher')\n }\n const fallbackUri = sym(window.location.href)\n subject = await loadProfileFromURI(subject || fallbackUri, store, fetcher)\n }\n }\n outliner.showDashboard(subject, {\n pane\n })\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
(function(){try{if(typeof document<`u`){var e=document.createElement(`style`);e.appendChild(document.createTextNode(`.menu-content{flex-direction:column;gap:.5rem;min-height:0;display:flex;overflow-y:auto}.app-nav.mobile-hidden .menu-content,.app-nav.mobile-visible .menu-content{padding-top:.75rem}.menu-footer{border-top:1px solid var(--color-border,#d1d1d1);width:100%;color:var(--color-text-muted,#555);background:inherit;padding:1rem;font-size:.875rem;line-height:1.4}.app-nav.collapsed .menu-footer{text-align:center;padding:.75rem 0;display:none}.menu-item{align-items:center;gap:var(--spacing-2xs,.625rem);border-radius:var(--border-radius-sm,.2rem);padding:.5rem var(--spacing-xs,.75rem);color:var(--color-text-heading,#000);text-align:left;cursor:pointer;background:0 0;border:0;width:100%;text-decoration:none;display:flex}.menu-toggle-icon{width:30px;height:30px}.menu-item-icon{width:var(--icon-xxs,1rem);height:var(--icon-xxs,1rem);flex:0 0 var(--icon-xxs,1rem);object-fit:contain}.menu-item-label{min-width:0}.menu-item:hover,.menu-item:focus{background:var(--color-header-menu-item-hover,#e6dcff)}.menu-item-active,.menu-item-active:hover,.menu-item-active:focus{background:var(--color-header-menu-item-selected,#cbb9ff);color:var(--color-header-menu-item-text-selected,#7c4cff)}.menu-toggle{z-index:300;min-width:var(--icon-md,2.5rem);height:var(--icon-md,2.5rem);border:1px solid var(--color-border);background:var(--color-menu-bg,#fff);color:var(--color-text);border-radius:var(--border-radius-sm,.2rem);justify-content:center;align-items:center;gap:.375rem;margin:0;padding:0 .625rem;display:inline-flex;position:fixed;top:.5rem;left:1rem}.menu-toggle-label{white-space:nowrap;text-overflow:ellipsis;max-width:10rem;font-size:1.2rem;font-weight:600;overflow:hidden}.menu-overlay{z-index:100;background:#00000059;position:fixed;inset:0}.app-nav{background:var(--color-menu-bg,#fff);border-right:1px solid var(--color-border);z-index:10;grid-template-rows:1fr auto;width:min(18rem,320px);display:grid;position:fixed;top:0;bottom:0;left:0;overflow:hidden}.app-nav.mobile-hidden,.app-nav.mobile-visible{z-index:999;background:var(--color-menu-bg,#fff);width:min(80vw,320px);height:100vh;min-height:100vh;box-shadow:none;border-right:none;flex-direction:column;padding-top:3.75rem;transition:transform .25s ease-in-out;display:flex;position:fixed;top:0;bottom:0;left:0;overflow:hidden;transform:translate(-100%)}.app-nav.mobile-hidden .menu-content,.app-nav.mobile-visible .menu-content{flex:1;min-height:0}.app-nav.mobile-visible{visibility:visible;background:var(--color-menu-bg,#fff);transform:translate(0)}.menu-header{color:#fff;box-sizing:border-box;z-index:1000;width:100%;height:3.75rem;min-height:3.75rem;box-shadow:none;border-right:none;justify-content:flex-start;align-items:center;font-weight:600;display:none;position:absolute;top:0;left:0;right:0;background-color:#42345a!important}.app-nav.mobile-hidden .menu-header,.app-nav.mobile-visible .menu-header{display:flex}.menu-header-title{color:#fff;font-size:1.25rem}.menu-close{color:#fff;cursor:pointer;background:0 0;border:none;padding-left:1.25rem;font-size:1.25rem;line-height:1}.menu-close:hover,.menu-close:focus{opacity:.85}.app-nav.collapsed{width:4.5rem;min-width:4.5rem}.app-nav.collapsed .menu-content{align-items:center;gap:.25rem}.app-nav.collapsed .menu-item{justify-content:center;padding-left:.5rem;padding-right:.5rem}.app-nav.collapsed .menu-item-label{display:none}.menu-collapse{z-index:320;border:1px solid var(--color-border);width:1.25rem;height:1.25rem;color:var(--color-text);cursor:pointer;border-radius:999px;justify-content:center;align-items:center;font-size:1.3rem;line-height:1;display:inline-flex;position:fixed;bottom:8rem;left:3rem;box-shadow:0 1px 4px #7c4dff1f}@media (width<=768px){.menu-collapse{display:none}}`)),document.head.appendChild(e)}}catch(e){console.error(`vite-plugin-css-injected-by-js`,e)}})();import { loadProfileFromURI as e } from "../profileUtils/ownerProfile.esm.js";
|
|
2
|
+
|
|
3
|
+
import t from "../icons/menu.esm.js";
|
|
4
|
+
import { createUiIcon as n } from "../icons/iconHelper.esm.js";
|
|
5
|
+
import { authSession as r, authn as i } from "solid-logic";
|
|
6
|
+
import { sym as a } from "rdflib";
|
|
7
|
+
//#region src/mainPage/menu.ts
|
|
8
|
+
var o = n(t, "Menu Icon", "#ffffff"), s = "solid-panes-menu-collapsed", c = !1, l = () => {
|
|
9
|
+
try {
|
|
10
|
+
return localStorage.getItem(s) === "true";
|
|
11
|
+
} catch {
|
|
12
|
+
return !1;
|
|
13
|
+
}
|
|
14
|
+
}, u = (e) => {
|
|
15
|
+
try {
|
|
16
|
+
localStorage.setItem(s, String(e));
|
|
17
|
+
} catch {}
|
|
18
|
+
}, d = () => {
|
|
19
|
+
let e = document.getElementById("MenuCollapseBtn");
|
|
20
|
+
e && (e.textContent = c ? "›" : "‹", e.setAttribute("aria-label", c ? "Expand navigation menu" : "Collapse navigation menu"));
|
|
21
|
+
}, f = (e, t) => {
|
|
22
|
+
if (!e || !t) return;
|
|
23
|
+
let n = e.getBoundingClientRect(), r = parseFloat(getComputedStyle(document.documentElement).fontSize) || 16, i = parseFloat(getComputedStyle(t).width) || 1.25 * r, a = (n.width - i / 2) / r;
|
|
24
|
+
t.style.setProperty("left", `${a.toFixed(3)}rem`, "important");
|
|
25
|
+
}, p = (e) => {
|
|
26
|
+
e && (e.classList.toggle("collapsed", c), d(), f(e, document.getElementById("MenuCollapseBtn")));
|
|
27
|
+
}, m = async () => {
|
|
28
|
+
try {
|
|
29
|
+
return !!(await i.checkUser() || i.currentUser());
|
|
30
|
+
} catch {
|
|
31
|
+
return !!i.currentUser();
|
|
32
|
+
}
|
|
33
|
+
}, h = () => !!i.currentUser(), g = (e) => {
|
|
34
|
+
let t = document.querySelector("solid-ui-footer");
|
|
35
|
+
t && (t.style.display = e ? "none" : "");
|
|
36
|
+
}, _ = (e) => {
|
|
37
|
+
let t = i.currentUser();
|
|
38
|
+
return !!(t && e && t.sameTerm(e));
|
|
39
|
+
}, v = () => {
|
|
40
|
+
c = l();
|
|
41
|
+
let e = document.querySelector("[role=\"main\"]") || document.body, t = document.getElementById("NavMenu");
|
|
42
|
+
if (!t) {
|
|
43
|
+
t = document.createElement("nav"), t.id = "NavMenu", t.className = "app-nav", t.setAttribute("aria-label", "App navigation"), t.hidden = !0;
|
|
44
|
+
let n = document.createElement("div");
|
|
45
|
+
n.className = "menu-header";
|
|
46
|
+
let r = document.createElement("button");
|
|
47
|
+
r.id = "MenuCloseBtn", r.className = "menu-close", r.type = "button", r.setAttribute("aria-label", "Close menu"), r.textContent = "✕", n.appendChild(r);
|
|
48
|
+
let i = document.createElement("span");
|
|
49
|
+
i.className = "menu-header-title", i.textContent = "Menu", n.appendChild(i), t.appendChild(n);
|
|
50
|
+
let a = document.createElement("div");
|
|
51
|
+
a.id = "AuthState", a.className = "menu-auth-state", t.appendChild(a);
|
|
52
|
+
let o = document.createElement("div");
|
|
53
|
+
o.id = "NavMenuContent", o.className = "menu-content", t.appendChild(o), e.insertBefore(t, e.firstChild);
|
|
54
|
+
} else if (!t.querySelector(".menu-header")) {
|
|
55
|
+
let e = document.createElement("div");
|
|
56
|
+
e.className = "menu-header";
|
|
57
|
+
let n = document.createElement("button");
|
|
58
|
+
n.id = "MenuCloseBtn", n.className = "menu-close", n.type = "button", n.setAttribute("aria-label", "Close menu"), n.textContent = "✕", e.appendChild(n);
|
|
59
|
+
let r = document.createElement("span");
|
|
60
|
+
r.className = "menu-header-title", r.textContent = "Menu", e.appendChild(r), t.insertBefore(e, t.firstChild);
|
|
61
|
+
}
|
|
62
|
+
let n = document.getElementById("MenuToggleBtn");
|
|
63
|
+
if (!n) {
|
|
64
|
+
n = document.createElement("button"), n.id = "MenuToggleBtn", n.className = "menu-toggle", n.type = "button", n.setAttribute("aria-label", "Toggle navigation menu"), n.hidden = !0;
|
|
65
|
+
let t = document.createElement("img");
|
|
66
|
+
t.src = o, t.alt = "", t.className = "menu-toggle-icon", t.setAttribute("aria-hidden", "true"), n.appendChild(t);
|
|
67
|
+
let r = document.createElement("span");
|
|
68
|
+
r.id = "MenuToggleLabel", r.className = "menu-toggle-label", n.appendChild(r), e.insertBefore(n, e.firstChild);
|
|
69
|
+
}
|
|
70
|
+
let r = document.getElementById("MenuOverlay");
|
|
71
|
+
r || (r = document.createElement("div"), r.id = "MenuOverlay", r.className = "menu-overlay", r.hidden = !0, document.body.appendChild(r));
|
|
72
|
+
let i = document.getElementById("MenuCollapseBtn");
|
|
73
|
+
i || (i = document.createElement("button"), i.id = "MenuCollapseBtn", i.className = "menu-collapse", i.type = "button", i.setAttribute("aria-label", "Collapse navigation menu"), i.textContent = "‹", i.hidden = !0, document.body.appendChild(i));
|
|
74
|
+
}, y = async (e, t) => {
|
|
75
|
+
try {
|
|
76
|
+
return (await t.getDashboardItems(e)).map((n) => {
|
|
77
|
+
let r = n.subject || i.currentUser() || e;
|
|
78
|
+
return {
|
|
79
|
+
icon: n.icon,
|
|
80
|
+
subject: r,
|
|
81
|
+
paneName: n.tabName || n.paneName,
|
|
82
|
+
label: n.label,
|
|
83
|
+
onclick: () => D(r, t, n.tabName || n.paneName)
|
|
84
|
+
};
|
|
85
|
+
});
|
|
86
|
+
} catch (e) {
|
|
87
|
+
return console.error("Unable to load navigation menu items", e), [];
|
|
88
|
+
}
|
|
89
|
+
}, b = (e) => {
|
|
90
|
+
let t = document.createElement("button");
|
|
91
|
+
if (t.className = "menu-item", t.type = "button", e.paneName && (t.dataset.paneName = e.paneName), e.icon) {
|
|
92
|
+
let n = document.createElement("img");
|
|
93
|
+
n.className = "menu-item-icon", n.src = e.icon, n.alt = "", n.setAttribute("aria-hidden", "true"), t.appendChild(n);
|
|
94
|
+
}
|
|
95
|
+
let n = document.createElement("span");
|
|
96
|
+
return n.className = "menu-item-label", n.textContent = e.label, t.appendChild(n), e.id && (t.id = e.id), t.addEventListener("click", async () => {
|
|
97
|
+
await e.onclick();
|
|
98
|
+
}), t;
|
|
99
|
+
}, x = (e, t) => {
|
|
100
|
+
let n = Array.from(e.querySelectorAll(".menu-item")), r;
|
|
101
|
+
n.forEach((e) => {
|
|
102
|
+
let n = !!t && e.dataset.paneName === t;
|
|
103
|
+
e.classList.toggle("menu-item-active", n), n ? (e.setAttribute("aria-current", "page"), r = e) : e.removeAttribute("aria-current");
|
|
104
|
+
}), t ? !r && n[0] ? e.dataset.activePaneName = "" : e.dataset.activePaneName = t : e.dataset.activePaneName = "", C(r);
|
|
105
|
+
}, S = (e) => {
|
|
106
|
+
let t = document.getElementById("NavMenuContent");
|
|
107
|
+
t && x(t, e);
|
|
108
|
+
}, C = (e) => {
|
|
109
|
+
let t = document.getElementById("MenuToggleLabel");
|
|
110
|
+
t && (t.textContent = e?.querySelector(".menu-item-label")?.textContent || "");
|
|
111
|
+
}, w = async (e, t, n) => {
|
|
112
|
+
let r = await y(e, t);
|
|
113
|
+
n.replaceChildren(...r.map(b)), x(n, _(e) ? "profile" : n.dataset.activePaneName);
|
|
114
|
+
}, T = (e) => {
|
|
115
|
+
let t = document.getElementById("NavMenu"), n = document.getElementById("MenuToggleBtn"), r = document.getElementById("MenuCollapseBtn"), i = document.getElementById("MenuOverlay");
|
|
116
|
+
if (!(!t || !n || !i || !r)) {
|
|
117
|
+
if (!h()) {
|
|
118
|
+
t.hidden = !0, t.style.display = "none", n.hidden = !0, n.style.display = "none", r.hidden = !0, r.style.display = "none", i.hidden = !0, i.style.display = "none", g(!1);
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
g(!0), e === "mobile" ? (t.classList.add("mobile-hidden"), t.classList.remove("mobile-visible"), n.hidden = !1, n.style.display = "", r.hidden = !0, r.style.display = "none", i.hidden = !0, i.style.display = "none", t.hidden = !1, t.style.display = "", t.classList.remove("collapsed"), n.setAttribute("aria-expanded", "false")) : (t.classList.remove("mobile-hidden", "mobile-visible"), n.hidden = !0, n.style.display = "none", r.hidden = !1, r.style.display = "", i.hidden = !0, i.style.display = "none", t.hidden = !1, t.style.display = "", p(t), f(t, r), n.setAttribute("aria-expanded", "false"));
|
|
122
|
+
}
|
|
123
|
+
}, E = async (e, t) => {
|
|
124
|
+
v();
|
|
125
|
+
let n = document.getElementById("NavMenu"), i = document.getElementById("MenuToggleBtn"), a = document.getElementById("MenuOverlay"), o = document.getElementById("NavMenuContent");
|
|
126
|
+
await m();
|
|
127
|
+
let s = () => {
|
|
128
|
+
!n || !i || !a || (n.classList.remove("mobile-visible"), n.classList.add("mobile-hidden"), n.style.display = "", i.setAttribute("aria-expanded", "false"), a.hidden = !0, a.style.display = "none");
|
|
129
|
+
}, l = () => {
|
|
130
|
+
!n || !i || !a || (n.classList.remove("mobile-hidden"), n.classList.add("mobile-visible"), n.style.display = "", i.setAttribute("aria-expanded", "true"), a.hidden = !1, a.style.display = "");
|
|
131
|
+
}, d = document.getElementById("MenuCollapseBtn"), f = () => {
|
|
132
|
+
!n || !d || c && (c = !1, u(c), p(n));
|
|
133
|
+
};
|
|
134
|
+
n && n.addEventListener("click", (e) => {
|
|
135
|
+
let n = t.context?.environment?.layout === "mobile", r = e.target.closest("#MenuCollapseBtn");
|
|
136
|
+
!n && c && !r && f();
|
|
137
|
+
}), i && i.addEventListener("click", () => {
|
|
138
|
+
n?.classList.contains("mobile-visible") ? s() : l();
|
|
139
|
+
}), d && d.addEventListener("click", () => {
|
|
140
|
+
c = !c, u(c), p(n);
|
|
141
|
+
});
|
|
142
|
+
let _ = () => {
|
|
143
|
+
let e = h();
|
|
144
|
+
n && (n.hidden = !e, n.style.display = e ? "" : "none"), i && (i.hidden = !e, i.style.display = e ? "" : "none"), d && (d.hidden = !e, d.style.display = e ? "" : "none"), a && (a.hidden = !e, a.style.display = e ? "" : "none"), g(e);
|
|
145
|
+
};
|
|
146
|
+
_(), a && a.addEventListener("click", s);
|
|
147
|
+
let y = document.getElementById("MenuCloseBtn");
|
|
148
|
+
if (y && y.addEventListener("click", s), o) {
|
|
149
|
+
if (_(), h() && await w(e, t, o), !o.dataset.authEventsBound) {
|
|
150
|
+
let n = async () => {
|
|
151
|
+
await w(e, t, o);
|
|
152
|
+
};
|
|
153
|
+
r.events.on("login", async () => {
|
|
154
|
+
await m(), _(), T(t.context?.environment?.layout === "mobile" ? "mobile" : "desktop"), await n();
|
|
155
|
+
}), r.events.on("logout", async () => {
|
|
156
|
+
await m(), _(), T(t.context?.environment?.layout === "mobile" ? "mobile" : "desktop"), await n();
|
|
157
|
+
}), r.events.on("sessionRestore", async () => {
|
|
158
|
+
await m(), _(), T(t.context?.environment?.layout === "mobile" ? "mobile" : "desktop"), await n();
|
|
159
|
+
}), o.dataset.authEventsBound = "true";
|
|
160
|
+
}
|
|
161
|
+
o.addEventListener("click", (e) => {
|
|
162
|
+
let n = e.target.closest(".menu-item");
|
|
163
|
+
n instanceof HTMLButtonElement && x(o, n.dataset.paneName);
|
|
164
|
+
let r = t.context?.environment?.layout === "mobile";
|
|
165
|
+
n && r && s();
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
T(t.context?.environment?.layout === "mobile" ? "mobile" : "desktop");
|
|
169
|
+
};
|
|
170
|
+
async function D(t, n, r) {
|
|
171
|
+
let o = i.currentUser();
|
|
172
|
+
if (!t) if (o) t = o;
|
|
173
|
+
else {
|
|
174
|
+
let r = n?.context?.store || n?.context?.session?.store || n?.kb, i = n?.context?.fetcher || r?.fetcher;
|
|
175
|
+
if (!r || !i) throw Error("Unable to load profile: missing RDF store or fetcher");
|
|
176
|
+
let o = a(window.location.href);
|
|
177
|
+
t = await e(t || o, r, i);
|
|
178
|
+
}
|
|
179
|
+
n.showDashboard(t, { pane: r });
|
|
180
|
+
}
|
|
181
|
+
//#endregion
|
|
182
|
+
export { E as createLeftSideMenu, T as refreshMenu, S as setActiveMenuPane };
|
|
183
|
+
|
|
184
|
+
//# sourceMappingURL=menu2.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"menu2.esm.js","names":[],"sources":["../../src/mainPage/menu.ts"],"sourcesContent":["import './menu.css'\nimport { OutlineManager } from '../outline/manager'\nimport { authSession, authn } from 'solid-logic'\nimport { NamedNode, sym } from 'rdflib'\nimport { loadProfileFromURI } from '../profileUtils/ownerProfile'\nimport menuIcon from '../icons/menu.svg?raw'\nimport { createUiIcon } from '../icons/iconHelper'\n\ntype MenuItem = {\n id?: string\n icon?: string\n paneName?: string\n subject?: NamedNode\n label: string\n onclick: () => void | Promise<void>\n}\n\nconst MENU_ICON = createUiIcon(menuIcon, 'Menu Icon', '#ffffff')\nconst MENU_COLLAPSED_KEY = 'solid-panes-menu-collapsed'\nlet menuCollapsed = false\n\nconst loadMenuCollapsedState = (): boolean => {\n try {\n return localStorage.getItem(MENU_COLLAPSED_KEY) === 'true'\n } catch (error) {\n return false\n }\n}\n\nconst saveMenuCollapsedState = (collapsed: boolean): void => {\n try {\n localStorage.setItem(MENU_COLLAPSED_KEY, String(collapsed))\n } catch (error) {\n // ignore storage errors\n }\n}\n\nconst updateMenuCollapseButton = (): void => {\n const collapseBtn = document.getElementById('MenuCollapseBtn') as HTMLButtonElement | null\n if (!collapseBtn) return\n collapseBtn.textContent = menuCollapsed ? '\\u203A' : '\\u2039'\n collapseBtn.setAttribute('aria-label', menuCollapsed ? 'Expand navigation menu' : 'Collapse navigation menu')\n}\n\nconst updateCollapseButtonPosition = (navMenu: HTMLElement | null, collapseBtn: HTMLButtonElement | null): void => {\n if (!navMenu || !collapseBtn) return\n const navRect = navMenu.getBoundingClientRect()\n const rootFontSize = parseFloat(getComputedStyle(document.documentElement).fontSize) || 16\n const buttonWidth = parseFloat(getComputedStyle(collapseBtn).width) || 1.25 * rootFontSize\n const offsetRem = (navRect.width - buttonWidth / 2) / rootFontSize\n collapseBtn.style.setProperty('left', `${offsetRem.toFixed(3)}rem`, 'important')\n}\n\nconst applyMenuCollapsedState = (navMenu: HTMLElement | null): void => {\n if (!navMenu) return\n navMenu.classList.toggle('collapsed', menuCollapsed)\n updateMenuCollapseButton()\n const collapseBtn = document.getElementById('MenuCollapseBtn') as HTMLButtonElement | null\n updateCollapseButtonPosition(navMenu, collapseBtn)\n}\n\nconst refreshAuthStateFromSession = async (): Promise<boolean> => {\n try {\n const webId = await authn.checkUser()\n return Boolean(webId || authn.currentUser())\n } catch {\n // Keep the menu responsive even if auth refresh is transiently unavailable.\n return Boolean(authn.currentUser())\n }\n}\n\nconst isLoggedIn = (): boolean => Boolean(authn.currentUser())\n\nconst setFooterVisibility = (loggedIn: boolean): void => {\n const footer = document.querySelector('solid-ui-footer') as HTMLElement | null\n if (!footer) return\n footer.style.display = loggedIn ? 'none' : ''\n}\n\nconst isViewingOwnProfile = (subject: NamedNode): boolean => {\n const currentUser = authn.currentUser()\n return Boolean(currentUser && subject && currentUser.sameTerm(subject))\n}\n\nconst ensureMenuSkeleton = () => {\n menuCollapsed = loadMenuCollapsedState()\n const root = document.querySelector('[role=\"main\"]') || document.body\n\n let navMenu = document.getElementById('NavMenu') as HTMLElement | null\n if (!navMenu) {\n navMenu = document.createElement('nav')\n navMenu.id = 'NavMenu'\n navMenu.className = 'app-nav'\n navMenu.setAttribute('aria-label', 'App navigation')\n navMenu.hidden = true\n\n const headerEl = document.createElement('div')\n headerEl.className = 'menu-header'\n\n const closeBtn = document.createElement('button')\n closeBtn.id = 'MenuCloseBtn'\n closeBtn.className = 'menu-close'\n closeBtn.type = 'button'\n closeBtn.setAttribute('aria-label', 'Close menu')\n closeBtn.textContent = '✕'\n headerEl.appendChild(closeBtn)\n\n const title = document.createElement('span')\n title.className = 'menu-header-title'\n title.textContent = 'Menu'\n headerEl.appendChild(title)\n\n navMenu.appendChild(headerEl)\n\n const authStateEl = document.createElement('div')\n authStateEl.id = 'AuthState'\n authStateEl.className = 'menu-auth-state'\n navMenu.appendChild(authStateEl)\n\n const contentEl = document.createElement('div')\n contentEl.id = 'NavMenuContent'\n contentEl.className = 'menu-content'\n navMenu.appendChild(contentEl)\n\n root.insertBefore(navMenu, root.firstChild)\n } else if (!navMenu.querySelector('.menu-header')) {\n const headerEl = document.createElement('div')\n headerEl.className = 'menu-header'\n\n const closeBtn = document.createElement('button')\n closeBtn.id = 'MenuCloseBtn'\n closeBtn.className = 'menu-close'\n closeBtn.type = 'button'\n closeBtn.setAttribute('aria-label', 'Close menu')\n closeBtn.textContent = '✕'\n headerEl.appendChild(closeBtn)\n\n const title = document.createElement('span')\n title.className = 'menu-header-title'\n title.textContent = 'Menu'\n headerEl.appendChild(title)\n\n navMenu.insertBefore(headerEl, navMenu.firstChild)\n }\n\n let toggle = document.getElementById('MenuToggleBtn') as HTMLButtonElement | null\n if (!toggle) {\n toggle = document.createElement('button')\n toggle.id = 'MenuToggleBtn'\n toggle.className = 'menu-toggle'\n toggle.type = 'button'\n toggle.setAttribute('aria-label', 'Toggle navigation menu')\n toggle.hidden = true\n const toggleImg = document.createElement('img')\n toggleImg.src = MENU_ICON\n toggleImg.alt = ''\n toggleImg.className = 'menu-toggle-icon'\n toggleImg.setAttribute('aria-hidden', 'true')\n toggle.appendChild(toggleImg)\n const toggleLabel = document.createElement('span')\n toggleLabel.id = 'MenuToggleLabel'\n toggleLabel.className = 'menu-toggle-label'\n toggle.appendChild(toggleLabel)\n root.insertBefore(toggle, root.firstChild)\n }\n\n let overlay = document.getElementById('MenuOverlay') as HTMLElement | null\n if (!overlay) {\n overlay = document.createElement('div')\n overlay.id = 'MenuOverlay'\n overlay.className = 'menu-overlay'\n overlay.hidden = true\n document.body.appendChild(overlay)\n }\n\n let collapseBtn = document.getElementById('MenuCollapseBtn') as HTMLButtonElement | null\n if (!collapseBtn) {\n collapseBtn = document.createElement('button')\n collapseBtn.id = 'MenuCollapseBtn'\n collapseBtn.className = 'menu-collapse'\n collapseBtn.type = 'button'\n collapseBtn.setAttribute('aria-label', 'Collapse navigation menu')\n collapseBtn.textContent = '\\u2039'\n collapseBtn.hidden = true\n document.body.appendChild(collapseBtn)\n }\n}\n\nconst getMenuItems = async (subject: NamedNode, outliner: any): Promise<MenuItem[]> => {\n try {\n const items = await outliner.getDashboardItems(subject)\n return items.map((element) => {\n const targetSubject = element.subject || (authn.currentUser() || subject)\n return {\n icon: element.icon,\n subject: targetSubject,\n paneName: element.tabName || element.paneName,\n label: element.label,\n onclick: () => openDashboardPane(targetSubject, outliner, element.tabName || element.paneName)\n }\n })\n } catch (error) {\n console.error('Unable to load navigation menu items', error)\n return []\n }\n}\n\nconst createMenuButton = (item: MenuItem) => {\n const button = document.createElement('button')\n button.className = 'menu-item'\n button.type = 'button'\n if (item.paneName) {\n button.dataset.paneName = item.paneName\n }\n\n if (item.icon) {\n const icon = document.createElement('img')\n icon.className = 'menu-item-icon'\n icon.src = item.icon\n icon.alt = ''\n icon.setAttribute('aria-hidden', 'true')\n button.appendChild(icon)\n }\n\n const label = document.createElement('span')\n label.className = 'menu-item-label'\n label.textContent = item.label\n button.appendChild(label)\n\n if (item.id) {\n button.id = item.id\n }\n\n button.addEventListener('click', async () => {\n await item.onclick()\n })\n\n return button\n}\n\nconst setActiveMenuItem = (container: HTMLElement, paneName?: string) => {\n const menuItems = Array.from(container.querySelectorAll<HTMLButtonElement>('.menu-item'))\n let activeItem: HTMLButtonElement | undefined\n\n menuItems.forEach((item) => {\n const isActive = Boolean(paneName) && item.dataset.paneName === paneName\n item.classList.toggle('menu-item-active', isActive)\n if (isActive) {\n item.setAttribute('aria-current', 'page')\n activeItem = item\n } else {\n item.removeAttribute('aria-current')\n }\n })\n\n if (paneName) {\n if (!activeItem && menuItems[0]) {\n // If an explicit pane name is provided but does not match any menu\n // item, fall back to clearing selection rather than selecting the first item.\n container.dataset.activePaneName = ''\n } else {\n container.dataset.activePaneName = paneName\n }\n } else {\n // If there is no active pane, do not auto-select the first menu item.\n container.dataset.activePaneName = ''\n }\n\n updateToggleLabel(activeItem)\n}\n\nexport const setActiveMenuPane = (paneName?: string): void => {\n const navMenuContent = document.getElementById('NavMenuContent') as HTMLElement | null\n if (!navMenuContent) return\n setActiveMenuItem(navMenuContent, paneName)\n}\n\nconst updateToggleLabel = (activeItem?: HTMLButtonElement): void => {\n const toggleLabel = document.getElementById('MenuToggleLabel')\n if (!toggleLabel) return\n toggleLabel.textContent = activeItem?.querySelector('.menu-item-label')?.textContent || ''\n}\n\nconst renderMenuItems = async (subject: NamedNode, outliner: OutlineManager, container: HTMLElement) => {\n const menuItems = await getMenuItems(subject, outliner)\n\n container.replaceChildren(...menuItems.map(createMenuButton))\n // If the user is logged in and viewing their own profile, select \"Your profile\"\n // by default. This also surfaces \"Your profile\" at the top of the mobile view\n // via the menu toggle label, which mirrors the active menu item.\n const activePane = isViewingOwnProfile(subject)\n ? 'profile'\n : container.dataset.activePaneName\n setActiveMenuItem(container, activePane)\n}\n\nexport const refreshMenu = (layout: 'mobile' | 'desktop') => {\n const navMenu = document.getElementById('NavMenu') as HTMLElement | null\n const toggle = document.getElementById('MenuToggleBtn') as HTMLButtonElement | null\n const collapseBtn = document.getElementById('MenuCollapseBtn') as HTMLButtonElement | null\n const overlay = document.getElementById('MenuOverlay') as HTMLElement | null\n\n if (!navMenu || !toggle || !overlay || !collapseBtn) return\n\n const loggedIn = isLoggedIn()\n if (!loggedIn) {\n navMenu.hidden = true\n navMenu.style.display = 'none'\n toggle.hidden = true\n toggle.style.display = 'none'\n collapseBtn.hidden = true\n collapseBtn.style.display = 'none'\n overlay.hidden = true\n overlay.style.display = 'none'\n setFooterVisibility(false)\n return\n }\n\n setFooterVisibility(true)\n\n if (layout === 'mobile') {\n navMenu.classList.add('mobile-hidden')\n navMenu.classList.remove('mobile-visible')\n toggle.hidden = false\n toggle.style.display = ''\n collapseBtn.hidden = true\n collapseBtn.style.display = 'none'\n overlay.hidden = true\n overlay.style.display = 'none'\n navMenu.hidden = false\n navMenu.style.display = ''\n navMenu.classList.remove('collapsed')\n toggle.setAttribute('aria-expanded', 'false')\n } else {\n navMenu.classList.remove('mobile-hidden', 'mobile-visible')\n toggle.hidden = true\n toggle.style.display = 'none'\n collapseBtn.hidden = false\n collapseBtn.style.display = ''\n overlay.hidden = true\n overlay.style.display = 'none'\n navMenu.hidden = false\n navMenu.style.display = ''\n applyMenuCollapsedState(navMenu)\n updateCollapseButtonPosition(navMenu, collapseBtn)\n toggle.setAttribute('aria-expanded', 'false')\n }\n}\n\nexport const createLeftSideMenu = async (subject: NamedNode, outliner: OutlineManager) => {\n ensureMenuSkeleton()\n const navMenu = document.getElementById('NavMenu') as HTMLElement | null\n const menuToggle = document.getElementById('MenuToggleBtn') as HTMLElement | null\n const menuOverlay = document.getElementById('MenuOverlay') as HTMLElement | null\n const navMenuContent = document.getElementById('NavMenuContent') as HTMLElement | null\n await refreshAuthStateFromSession()\n\n const closeMobileMenu = () => {\n if (!navMenu || !menuToggle || !menuOverlay) return\n navMenu.classList.remove('mobile-visible')\n navMenu.classList.add('mobile-hidden')\n navMenu.style.display = ''\n menuToggle.setAttribute('aria-expanded', 'false')\n menuOverlay.hidden = true\n menuOverlay.style.display = 'none'\n }\n\n const openMobileMenu = () => {\n if (!navMenu || !menuToggle || !menuOverlay) return\n navMenu.classList.remove('mobile-hidden')\n navMenu.classList.add('mobile-visible')\n navMenu.style.display = ''\n menuToggle.setAttribute('aria-expanded', 'true')\n menuOverlay.hidden = false\n menuOverlay.style.display = ''\n }\n\n const collapseBtn = document.getElementById('MenuCollapseBtn') as HTMLButtonElement | null\n\n const expandDesktopMenu = () => {\n if (!navMenu || !collapseBtn) return\n if (!menuCollapsed) return\n menuCollapsed = false\n saveMenuCollapsedState(menuCollapsed)\n applyMenuCollapsedState(navMenu)\n }\n\n if (navMenu) {\n navMenu.addEventListener('click', (event) => {\n const isMobile = outliner.context?.environment?.layout === 'mobile'\n const clickedCollapseButton = (event.target as HTMLElement).closest('#MenuCollapseBtn')\n if (!isMobile && menuCollapsed && !clickedCollapseButton) {\n expandDesktopMenu()\n }\n })\n }\n\n if (menuToggle) {\n menuToggle.addEventListener('click', () => {\n if (navMenu?.classList.contains('mobile-visible')) {\n closeMobileMenu()\n } else {\n openMobileMenu()\n }\n })\n }\n if (collapseBtn) {\n collapseBtn.addEventListener('click', () => {\n menuCollapsed = !menuCollapsed\n saveMenuCollapsedState(menuCollapsed)\n applyMenuCollapsedState(navMenu)\n })\n }\n\n const updateMenuVisibility = () => {\n const loggedIn = isLoggedIn()\n if (navMenu) {\n navMenu.hidden = !loggedIn\n navMenu.style.display = loggedIn ? '' : 'none'\n }\n if (menuToggle) {\n menuToggle.hidden = !loggedIn\n menuToggle.style.display = loggedIn ? '' : 'none'\n }\n if (collapseBtn) {\n collapseBtn.hidden = !loggedIn\n collapseBtn.style.display = loggedIn ? '' : 'none'\n }\n if (menuOverlay) {\n menuOverlay.hidden = !loggedIn\n menuOverlay.style.display = loggedIn ? '' : 'none'\n }\n setFooterVisibility(loggedIn)\n }\n\n updateMenuVisibility()\n\n if (menuOverlay) {\n menuOverlay.addEventListener('click', closeMobileMenu)\n }\n\n const closeBtn = document.getElementById('MenuCloseBtn') as HTMLButtonElement | null\n if (closeBtn) {\n closeBtn.addEventListener('click', closeMobileMenu)\n }\n\n if (navMenuContent) {\n updateMenuVisibility()\n const loggedIn = isLoggedIn()\n if (loggedIn) {\n await renderMenuItems(subject, outliner, navMenuContent)\n }\n\n if (!navMenuContent.dataset.authEventsBound) {\n const refreshMenuItems = async () => {\n await renderMenuItems(subject, outliner, navMenuContent)\n }\n\n authSession.events.on('login', async () => {\n await refreshAuthStateFromSession()\n updateMenuVisibility()\n refreshMenu(outliner.context?.environment?.layout === 'mobile' ? 'mobile' : 'desktop')\n await refreshMenuItems()\n })\n authSession.events.on('logout', async () => {\n await refreshAuthStateFromSession()\n updateMenuVisibility()\n refreshMenu(outliner.context?.environment?.layout === 'mobile' ? 'mobile' : 'desktop')\n await refreshMenuItems()\n })\n authSession.events.on('sessionRestore', async () => {\n await refreshAuthStateFromSession()\n updateMenuVisibility()\n refreshMenu(outliner.context?.environment?.layout === 'mobile' ? 'mobile' : 'desktop')\n await refreshMenuItems()\n })\n navMenuContent.dataset.authEventsBound = 'true'\n }\n\n navMenuContent.addEventListener('click', (event) => {\n const item = (event.target as HTMLElement).closest('.menu-item')\n if (item instanceof HTMLButtonElement) {\n setActiveMenuItem(navMenuContent, item.dataset.paneName)\n }\n const isMobile = outliner.context?.environment?.layout === 'mobile'\n if (item && isMobile) {\n closeMobileMenu()\n }\n })\n }\n\n refreshMenu(outliner.context?.environment?.layout === 'mobile' ? 'mobile' : 'desktop')\n}\n\nasync function openDashboardPane (subject, outliner: any, pane: string): Promise<void> {\n const me = authn.currentUser()\n if (!subject) {\n if (me) {\n subject = me\n } else {\n const store = outliner?.context?.store || outliner?.context?.session?.store || outliner?.kb\n const fetcher = outliner?.context?.fetcher || store?.fetcher\n if (!store || !fetcher) {\n throw new Error('Unable to load profile: missing RDF store or fetcher')\n }\n const fallbackUri = sym(window.location.href)\n subject = await loadProfileFromURI(subject || fallbackUri, store, fetcher)\n }\n }\n outliner.showDashboard(subject, {\n pane\n })\n}\n"],"mappings":"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"}
|
package/dist/n3Pane.d.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import './n3Pane.css';
|
|
1
|
+
import { DataBrowserContext } from '../node_modules/pane-registry';
|
|
2
|
+
import { NamedNode } from '../node_modules/rdflib';
|
|
4
3
|
type N3PaneLike = {
|
|
5
4
|
icon: string;
|
|
6
5
|
name: string;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
(function(){try{if(typeof document<`u`){var e=document.createElement(`style`);e.appendChild(document.createTextNode(`.n3-pane{border-top:solid 1px var(--color-data-pane-border-top,black);border-left:solid 1px var(--color-data-pane-border-top,black);border-bottom:solid 1px var(--color-data-pane-border-side,#777);border-right:solid 1px var(--color-data-pane-border-side,#777);color:var(--color-text-blue,#004);box-sizing:border-box;padding:1rem}.n3-pane__source{box-sizing:border-box;white-space:pre;max-width:100%;margin:0;font-family:monospace;font-size:120%;overflow-x:auto}.n3-pane__line{white-space:pre}.n3-pane[data-layout=mobile] .n3-pane__source{overflow-wrap:anywhere;word-break:break-word;white-space:normal}.n3-pane[data-layout=mobile] .n3-pane__line{white-space:pre-wrap;padding-left:var(--n3-indent,0);text-indent:calc(-1 * var(--n3-indent,0))}@media (width<=576px){.n3-pane__source{overflow-wrap:anywhere;word-break:break-word;white-space:normal}.n3-pane__line{white-space:pre-wrap;padding-left:var(--n3-indent,0);text-indent:calc(-1 * var(--n3-indent,0))}}`)),document.head.appendChild(e)}}catch(e){console.error(`vite-plugin-css-injected-by-js`,e)}})();const e=require("./_virtual/_rolldown/runtime.cjs.js");;let t=require("solid-ui");t=e.__toESM(t);let n=require("rdflib");n=e.__toESM(n);var r=t.ns;function i(e){if(e.trim().length===0)return 0;let t=0;for(let n of e){if(n===` `){t+=1;continue}if(n===` `){t+=2;continue}break}return Math.max(t,2)}var a={icon:t.icons.originalIconBase+`w3c/n3_smaller.png`,name:`n3`,audience:[r.solid(`Developer`)],label:function(e,t){let n=t.session.store;if(`http://www.w3.org/2007/ont/link#ProtocolEvent`in n.findTypeURIs(e))return null;let r=n.statementsMatching(void 0,void 0,void 0,e).length;return r===0?null:`Data (`+r+`) as N3`},render:function(e,t){let r=t.dom,a=t.session.store;function o(e){let n=t.environment??{};e.dataset.layout=n.layout??`desktop`}let s=r.createElement(`div`);s.setAttribute(`class`,`n3-pane`),o(s);let c=a.statementsMatching(void 0,void 0,void 0,e),l=n.Serializer(a);l.suggestNamespaces(a.namespaces),l.setBase(e.uri);let u=l.statementsToN3(c),d=r.createElement(`div`);return d.classList.add(`n3-pane__source`),u.split(`
|
|
2
|
+
`).forEach(e=>{let t=r.createElement(`div`),n=i(e);t.classList.add(`n3-pane__line`),t.style.setProperty(`--n3-indent`,`${n}ch`),t.textContent=e.length>0?e:` `,d.appendChild(t)}),s.appendChild(d),s}};exports.n3Pane=a;
|
|
3
|
+
//# sourceMappingURL=n3Pane2.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"n3Pane2.cjs.js","names":[],"sources":["../src/n3Pane.ts"],"sourcesContent":["/* Notation3 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 */\nimport * as UI from 'solid-ui'\nimport * as $rdf from 'rdflib'\nimport type { DataBrowserContext, RenderEnvironment } from 'pane-registry'\nimport type { NamedNode, Statement } from 'rdflib'\nimport './n3Pane.css'\n\nconst ns = UI.ns\n\ntype N3PaneLike = {\n icon: string\n name: string\n audience: NamedNode[]\n label: (subject: NamedNode, context: DataBrowserContext) => string | null\n render: (subject: NamedNode, context: DataBrowserContext) => HTMLDivElement\n}\n\nfunction leadingIndentWidth (line: string): number {\n if (line.trim().length === 0) {\n return 0\n }\n\n let width = 0\n for (const character of line) {\n if (character === ' ') {\n width += 1\n continue\n }\n if (character === '\\t') {\n width += 2\n continue\n }\n break\n }\n return Math.max(width, 2)\n}\n\nexport const n3Pane: N3PaneLike = {\n icon: UI.icons.originalIconBase + 'w3c/n3_smaller.png',\n\n name: 'n3',\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 const n = store.statementsMatching(undefined, undefined, undefined, subject)\n .length\n if (n === 0) return null\n return 'Data (' + n + ') as N3'\n },\n\n render: function (\n subject: NamedNode,\n context: DataBrowserContext\n ): HTMLDivElement {\n const myDocument = context.dom\n const kb = context.session.store\n\n function applyEnvironmentAttributes (element: HTMLDivElement): void {\n const environment = (context.environment ?? {}) as Partial<RenderEnvironment>\n element.dataset.layout = environment.layout ?? 'desktop'\n }\n\n const div = myDocument.createElement('div')\n div.setAttribute('class', 'n3-pane')\n applyEnvironmentAttributes(div)\n // Because of smushing etc, this will not be a copy of the original source\n // We could instead either fetch and re-parse the source,\n // or we could keep all the pre-smushed triples.\n const sts = kb.statementsMatching(\n undefined,\n undefined,\n undefined,\n subject\n ) as Statement[] // @@ slow with current store!\n /*\n var kludge = kb.formula([]) // No features\n for (var i=0; i< sts.length; i++) {\n s = sts[i]\n kludge.add(s.subject, s.predicate, s.object)\n }\n */\n const sz = $rdf.Serializer(kb)\n sz.suggestNamespaces(kb.namespaces)\n sz.setBase(subject.uri)\n const str = sz.statementsToN3(sts)\n const source = myDocument.createElement('div')\n source.classList.add('n3-pane__source')\n\n str.split('\\n').forEach(line => {\n const lineElement = myDocument.createElement('div')\n const indentWidth = leadingIndentWidth(line)\n lineElement.classList.add('n3-pane__line')\n lineElement.style.setProperty('--n3-indent', `${indentWidth}ch`)\n lineElement.textContent = line.length > 0 ? line : ' '\n source.appendChild(lineElement)\n })\n\n div.appendChild(source)\n return div\n }\n}\n"],"mappings":"kKAYA,IAAM,EAAK,EAAG,GAUd,SAAS,EAAoB,EAAsB,CACjD,GAAI,EAAK,KAAK,CAAC,CAAC,SAAW,EACzB,MAAO,GAGT,IAAI,EAAQ,EACZ,IAAK,IAAM,KAAa,EAAM,CAC5B,GAAI,IAAc,IAAK,CACrB,GAAS,EACT,QACF,CACA,GAAI,IAAc,IAAM,CACtB,GAAS,EACT,QACF,CACA,KACF,CACA,OAAO,KAAK,IAAI,EAAO,CAAC,CAC1B,CAEA,IAAa,EAAqB,CAChC,KAAM,EAAG,MAAM,iBAAmB,qBAElC,KAAM,KAEN,SAAU,CAAC,EAAG,MAAM,WAAW,CAAC,EAEhC,MAAO,SAAU,EAAoB,EAA4C,CAC/E,IAAM,EAAQ,EAAQ,QAAQ,MAC9B,GACE,kDACA,EAAM,aAAa,CAAO,EAE1B,OAAO,KAET,IAAM,EAAI,EAAM,mBAAmB,IAAA,GAAW,IAAA,GAAW,IAAA,GAAW,CAAO,CAAC,CACzE,OAEH,OADI,IAAM,EAAU,KACb,SAAW,EAAI,SACxB,EAEA,OAAQ,SACN,EACA,EACgB,CAChB,IAAM,EAAa,EAAQ,IACrB,EAAK,EAAQ,QAAQ,MAE3B,SAAS,EAA4B,EAA+B,CAClE,IAAM,EAAe,EAAQ,aAAe,CAAC,EAC7C,EAAQ,QAAQ,OAAS,EAAY,QAAU,SACjD,CAEA,IAAM,EAAM,EAAW,cAAc,KAAK,EAC1C,EAAI,aAAa,QAAS,SAAS,EACnC,EAA2B,CAAG,EAI9B,IAAM,EAAM,EAAG,mBACb,IAAA,GACA,IAAA,GACA,IAAA,GACA,CACF,EAQM,EAAK,EAAK,WAAW,CAAE,EAC7B,EAAG,kBAAkB,EAAG,UAAU,EAClC,EAAG,QAAQ,EAAQ,GAAG,EACtB,IAAM,EAAM,EAAG,eAAe,CAAG,EAC3B,EAAS,EAAW,cAAc,KAAK,EAa7C,OAZA,EAAO,UAAU,IAAI,iBAAiB,EAEtC,EAAI,MAAM;CAAI,CAAC,CAAC,QAAQ,GAAQ,CAC9B,IAAM,EAAc,EAAW,cAAc,KAAK,EAC5C,EAAc,EAAmB,CAAI,EAC3C,EAAY,UAAU,IAAI,eAAe,EACzC,EAAY,MAAM,YAAY,cAAe,GAAG,EAAY,GAAG,EAC/D,EAAY,YAAc,EAAK,OAAS,EAAI,EAAO,IACnD,EAAO,YAAY,CAAW,CAChC,CAAC,EAED,EAAI,YAAY,CAAM,EACf,CACT,CACF"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
(function(){try{if(typeof document<`u`){var e=document.createElement(`style`);e.appendChild(document.createTextNode(`.n3-pane{border-top:solid 1px var(--color-data-pane-border-top,black);border-left:solid 1px var(--color-data-pane-border-top,black);border-bottom:solid 1px var(--color-data-pane-border-side,#777);border-right:solid 1px var(--color-data-pane-border-side,#777);color:var(--color-text-blue,#004);box-sizing:border-box;padding:1rem}.n3-pane__source{box-sizing:border-box;white-space:pre;max-width:100%;margin:0;font-family:monospace;font-size:120%;overflow-x:auto}.n3-pane__line{white-space:pre}.n3-pane[data-layout=mobile] .n3-pane__source{overflow-wrap:anywhere;word-break:break-word;white-space:normal}.n3-pane[data-layout=mobile] .n3-pane__line{white-space:pre-wrap;padding-left:var(--n3-indent,0);text-indent:calc(-1 * var(--n3-indent,0))}@media (width<=576px){.n3-pane__source{overflow-wrap:anywhere;word-break:break-word;white-space:normal}.n3-pane__line{white-space:pre-wrap;padding-left:var(--n3-indent,0);text-indent:calc(-1 * var(--n3-indent,0))}}`)),document.head.appendChild(e)}}catch(e){console.error(`vite-plugin-css-injected-by-js`,e)}})();
|
|
2
|
+
import * as e from "solid-ui";
|
|
3
|
+
import * as t from "rdflib";
|
|
4
|
+
//#region src/n3Pane.ts
|
|
5
|
+
var n = e.ns;
|
|
6
|
+
function r(e) {
|
|
7
|
+
if (e.trim().length === 0) return 0;
|
|
8
|
+
let t = 0;
|
|
9
|
+
for (let n of e) {
|
|
10
|
+
if (n === " ") {
|
|
11
|
+
t += 1;
|
|
12
|
+
continue;
|
|
13
|
+
}
|
|
14
|
+
if (n === " ") {
|
|
15
|
+
t += 2;
|
|
16
|
+
continue;
|
|
17
|
+
}
|
|
18
|
+
break;
|
|
19
|
+
}
|
|
20
|
+
return Math.max(t, 2);
|
|
21
|
+
}
|
|
22
|
+
var i = {
|
|
23
|
+
icon: e.icons.originalIconBase + "w3c/n3_smaller.png",
|
|
24
|
+
name: "n3",
|
|
25
|
+
audience: [n.solid("Developer")],
|
|
26
|
+
label: function(e, t) {
|
|
27
|
+
let n = t.session.store;
|
|
28
|
+
if ("http://www.w3.org/2007/ont/link#ProtocolEvent" in n.findTypeURIs(e)) return null;
|
|
29
|
+
let r = n.statementsMatching(void 0, void 0, void 0, e).length;
|
|
30
|
+
return r === 0 ? null : "Data (" + r + ") as N3";
|
|
31
|
+
},
|
|
32
|
+
render: function(e, n) {
|
|
33
|
+
let i = n.dom, a = n.session.store;
|
|
34
|
+
function o(e) {
|
|
35
|
+
let t = n.environment ?? {};
|
|
36
|
+
e.dataset.layout = t.layout ?? "desktop";
|
|
37
|
+
}
|
|
38
|
+
let s = i.createElement("div");
|
|
39
|
+
s.setAttribute("class", "n3-pane"), o(s);
|
|
40
|
+
let c = a.statementsMatching(void 0, void 0, void 0, e), l = t.Serializer(a);
|
|
41
|
+
l.suggestNamespaces(a.namespaces), l.setBase(e.uri);
|
|
42
|
+
let u = l.statementsToN3(c), d = i.createElement("div");
|
|
43
|
+
return d.classList.add("n3-pane__source"), u.split("\n").forEach((e) => {
|
|
44
|
+
let t = i.createElement("div"), n = r(e);
|
|
45
|
+
t.classList.add("n3-pane__line"), t.style.setProperty("--n3-indent", `${n}ch`), t.textContent = e.length > 0 ? e : " ", d.appendChild(t);
|
|
46
|
+
}), s.appendChild(d), s;
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
//#endregion
|
|
50
|
+
export { i as n3Pane };
|
|
51
|
+
|
|
52
|
+
//# sourceMappingURL=n3Pane2.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"n3Pane2.esm.js","names":[],"sources":["../src/n3Pane.ts"],"sourcesContent":["/* Notation3 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 */\nimport * as UI from 'solid-ui'\nimport * as $rdf from 'rdflib'\nimport type { DataBrowserContext, RenderEnvironment } from 'pane-registry'\nimport type { NamedNode, Statement } from 'rdflib'\nimport './n3Pane.css'\n\nconst ns = UI.ns\n\ntype N3PaneLike = {\n icon: string\n name: string\n audience: NamedNode[]\n label: (subject: NamedNode, context: DataBrowserContext) => string | null\n render: (subject: NamedNode, context: DataBrowserContext) => HTMLDivElement\n}\n\nfunction leadingIndentWidth (line: string): number {\n if (line.trim().length === 0) {\n return 0\n }\n\n let width = 0\n for (const character of line) {\n if (character === ' ') {\n width += 1\n continue\n }\n if (character === '\\t') {\n width += 2\n continue\n }\n break\n }\n return Math.max(width, 2)\n}\n\nexport const n3Pane: N3PaneLike = {\n icon: UI.icons.originalIconBase + 'w3c/n3_smaller.png',\n\n name: 'n3',\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 const n = store.statementsMatching(undefined, undefined, undefined, subject)\n .length\n if (n === 0) return null\n return 'Data (' + n + ') as N3'\n },\n\n render: function (\n subject: NamedNode,\n context: DataBrowserContext\n ): HTMLDivElement {\n const myDocument = context.dom\n const kb = context.session.store\n\n function applyEnvironmentAttributes (element: HTMLDivElement): void {\n const environment = (context.environment ?? {}) as Partial<RenderEnvironment>\n element.dataset.layout = environment.layout ?? 'desktop'\n }\n\n const div = myDocument.createElement('div')\n div.setAttribute('class', 'n3-pane')\n applyEnvironmentAttributes(div)\n // Because of smushing etc, this will not be a copy of the original source\n // We could instead either fetch and re-parse the source,\n // or we could keep all the pre-smushed triples.\n const sts = kb.statementsMatching(\n undefined,\n undefined,\n undefined,\n subject\n ) as Statement[] // @@ slow with current store!\n /*\n var kludge = kb.formula([]) // No features\n for (var i=0; i< sts.length; i++) {\n s = sts[i]\n kludge.add(s.subject, s.predicate, s.object)\n }\n */\n const sz = $rdf.Serializer(kb)\n sz.suggestNamespaces(kb.namespaces)\n sz.setBase(subject.uri)\n const str = sz.statementsToN3(sts)\n const source = myDocument.createElement('div')\n source.classList.add('n3-pane__source')\n\n str.split('\\n').forEach(line => {\n const lineElement = myDocument.createElement('div')\n const indentWidth = leadingIndentWidth(line)\n lineElement.classList.add('n3-pane__line')\n lineElement.style.setProperty('--n3-indent', `${indentWidth}ch`)\n lineElement.textContent = line.length > 0 ? line : ' '\n source.appendChild(lineElement)\n })\n\n div.appendChild(source)\n return div\n }\n}\n"],"mappings":";;;;AAYA,IAAM,IAAK,EAAG;AAUd,SAAS,EAAoB,GAAsB;CACjD,IAAI,EAAK,KAAK,CAAC,CAAC,WAAW,GACzB,OAAO;CAGT,IAAI,IAAQ;CACZ,KAAK,IAAM,KAAa,GAAM;EAC5B,IAAI,MAAc,KAAK;GACrB,KAAS;GACT;EACF;EACA,IAAI,MAAc,KAAM;GACtB,KAAS;GACT;EACF;EACA;CACF;CACA,OAAO,KAAK,IAAI,GAAO,CAAC;AAC1B;AAEA,IAAa,IAAqB;CAChC,MAAM,EAAG,MAAM,mBAAmB;CAElC,MAAM;CAEN,UAAU,CAAC,EAAG,MAAM,WAAW,CAAC;CAEhC,OAAO,SAAU,GAAoB,GAA4C;EAC/E,IAAM,IAAQ,EAAQ,QAAQ;EAC9B,IACE,mDACA,EAAM,aAAa,CAAO,GAE1B,OAAO;EAET,IAAM,IAAI,EAAM,mBAAmB,KAAA,GAAW,KAAA,GAAW,KAAA,GAAW,CAAO,CAAC,CACzE;EAEH,OADI,MAAM,IAAU,OACb,WAAW,IAAI;CACxB;CAEA,QAAQ,SACN,GACA,GACgB;EAChB,IAAM,IAAa,EAAQ,KACrB,IAAK,EAAQ,QAAQ;EAE3B,SAAS,EAA4B,GAA+B;GAClE,IAAM,IAAe,EAAQ,eAAe,CAAC;GAC7C,EAAQ,QAAQ,SAAS,EAAY,UAAU;EACjD;EAEA,IAAM,IAAM,EAAW,cAAc,KAAK;EAE1C,AADA,EAAI,aAAa,SAAS,SAAS,GACnC,EAA2B,CAAG;EAI9B,IAAM,IAAM,EAAG,mBACb,KAAA,GACA,KAAA,GACA,KAAA,GACA,CACF,GAQM,IAAK,EAAK,WAAW,CAAE;EAE7B,AADA,EAAG,kBAAkB,EAAG,UAAU,GAClC,EAAG,QAAQ,EAAQ,GAAG;EACtB,IAAM,IAAM,EAAG,eAAe,CAAG,GAC3B,IAAS,EAAW,cAAc,KAAK;EAa7C,OAZA,EAAO,UAAU,IAAI,iBAAiB,GAEtC,EAAI,MAAM,IAAI,CAAC,CAAC,SAAQ,MAAQ;GAC9B,IAAM,IAAc,EAAW,cAAc,KAAK,GAC5C,IAAc,EAAmB,CAAI;GAI3C,AAHA,EAAY,UAAU,IAAI,eAAe,GACzC,EAAY,MAAM,YAAY,eAAe,GAAG,EAAY,GAAG,GAC/D,EAAY,cAAc,EAAK,SAAS,IAAI,IAAO,KACnD,EAAO,YAAY,CAAW;EAChC,CAAC,GAED,EAAI,YAAY,CAAM,GACf;CACT;AACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.cjs.js","names":[],"sources":["../../src/outline/context.ts"],"sourcesContent":["import { DataBrowserContext, PaneRegistry, RenderEnvironment } from 'pane-registry'\nimport { getOutliner } from '../index'\nimport { SolidLogic } from 'solid-logic'\nimport { LiveStore } from 'rdflib'\n\nexport function createContext (\n dom: HTMLDocument,\n paneRegistry: PaneRegistry,\n store: LiveStore,\n logic: SolidLogic,\n environment?: RenderEnvironment\n): DataBrowserContext {\n return {\n dom,\n getOutliner,\n session: {\n paneRegistry,\n // @ts-ignore\n store,\n // @ts-ignore\n logic\n },\n environment\n }\n}\n"],"mappings":"mCAKA,SAAgB,EACd,EACA,EACA,EACA,EACA,EACoB,CACpB,MAAO,CACL,MACA,YAAA,EAAA,YACA,QAAS,CACP,eAEA,QAEA,OACF,EACA,aACF,CACF"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { DataBrowserContext, PaneRegistry, RenderEnvironment } from 'pane-registry';
|
|
2
|
-
import { SolidLogic } from 'solid-logic';
|
|
3
|
-
import { LiveStore } from 'rdflib';
|
|
1
|
+
import { DataBrowserContext, PaneRegistry, RenderEnvironment } from '../../node_modules/pane-registry';
|
|
2
|
+
import { SolidLogic } from '../../node_modules/solid-logic/dist/solid-logic.esm.js';
|
|
3
|
+
import { LiveStore } from '../../node_modules/rdflib';
|
|
4
4
|
export declare function createContext(dom: HTMLDocument, paneRegistry: PaneRegistry, store: LiveStore, logic: SolidLogic, environment?: RenderEnvironment): DataBrowserContext;
|
|
5
5
|
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { getOutliner as e } from "../index.esm.js";
|
|
2
|
+
//#region src/outline/context.ts
|
|
3
|
+
function t(t, n, r, i, a) {
|
|
4
|
+
return {
|
|
5
|
+
dom: t,
|
|
6
|
+
getOutliner: e,
|
|
7
|
+
session: {
|
|
8
|
+
paneRegistry: n,
|
|
9
|
+
store: r,
|
|
10
|
+
logic: i
|
|
11
|
+
},
|
|
12
|
+
environment: a
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
//#endregion
|
|
16
|
+
export { t as createContext };
|
|
17
|
+
|
|
18
|
+
//# sourceMappingURL=context.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.esm.js","names":[],"sources":["../../src/outline/context.ts"],"sourcesContent":["import { DataBrowserContext, PaneRegistry, RenderEnvironment } from 'pane-registry'\nimport { getOutliner } from '../index'\nimport { SolidLogic } from 'solid-logic'\nimport { LiveStore } from 'rdflib'\n\nexport function createContext (\n dom: HTMLDocument,\n paneRegistry: PaneRegistry,\n store: LiveStore,\n logic: SolidLogic,\n environment?: RenderEnvironment\n): DataBrowserContext {\n return {\n dom,\n getOutliner,\n session: {\n paneRegistry,\n // @ts-ignore\n store,\n // @ts-ignore\n logic\n },\n environment\n }\n}\n"],"mappings":";;AAKA,SAAgB,EACd,GACA,GACA,GACA,GACA,GACoB;CACpB,OAAO;EACL;EACA;EACA,SAAS;GACP;GAEA;GAEA;EACF;EACA;CACF;AACF"}
|