solid-panes 4.5.1 → 5.0.0-0
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 -40
- 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/arrow-left.cjs.js +2 -0
- package/dist/_virtual/~icons/lucide/arrow-left.cjs.js.map +1 -0
- package/dist/_virtual/~icons/lucide/arrow-left.esm.js +11 -0
- package/dist/_virtual/~icons/lucide/arrow-left.esm.js.map +1 -0
- package/dist/_virtual/~icons/lucide/ellipsis-vertical.cjs.js +2 -0
- package/dist/_virtual/~icons/lucide/ellipsis-vertical.cjs.js.map +1 -0
- package/dist/_virtual/~icons/lucide/ellipsis-vertical.esm.js +11 -0
- package/dist/_virtual/~icons/lucide/ellipsis-vertical.esm.js.map +1 -0
- package/dist/_virtual/~icons/lucide/folder-open.cjs.js +2 -0
- package/dist/_virtual/~icons/lucide/folder-open.cjs.js.map +1 -0
- package/dist/_virtual/~icons/lucide/folder-open.esm.js +11 -0
- package/dist/_virtual/~icons/lucide/folder-open.esm.js.map +1 -0
- package/dist/_virtual/~icons/lucide/globe.cjs.js +2 -0
- package/dist/_virtual/~icons/lucide/globe.cjs.js.map +1 -0
- package/dist/_virtual/~icons/lucide/globe.esm.js +11 -0
- package/dist/_virtual/~icons/lucide/globe.esm.js.map +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/layout-dashboard.cjs.js +2 -0
- package/dist/_virtual/~icons/lucide/layout-dashboard.cjs.js.map +1 -0
- package/dist/_virtual/~icons/lucide/layout-dashboard.esm.js +11 -0
- package/dist/_virtual/~icons/lucide/layout-dashboard.esm.js.map +1 -0
- package/dist/_virtual/~icons/lucide/lock-keyhole.cjs.js +2 -0
- package/dist/_virtual/~icons/lucide/lock-keyhole.cjs.js.map +1 -0
- package/dist/_virtual/~icons/lucide/lock-keyhole.esm.js +11 -0
- package/dist/_virtual/~icons/lucide/lock-keyhole.esm.js.map +1 -0
- package/dist/_virtual/~icons/lucide/pencil.cjs.js +2 -0
- package/dist/_virtual/~icons/lucide/pencil.cjs.js.map +1 -0
- package/dist/_virtual/~icons/lucide/pencil.esm.js +11 -0
- package/dist/_virtual/~icons/lucide/pencil.esm.js.map +1 -0
- package/dist/_virtual/~icons/lucide/settings-2.cjs.js +2 -0
- package/dist/_virtual/~icons/lucide/settings-2.cjs.js.map +1 -0
- package/dist/_virtual/~icons/lucide/settings-2.esm.js +11 -0
- package/dist/_virtual/~icons/lucide/settings-2.esm.js.map +1 -0
- package/dist/_virtual/~icons/lucide/share-2.cjs.js +2 -0
- package/dist/_virtual/~icons/lucide/share-2.cjs.js.map +1 -0
- package/dist/_virtual/~icons/lucide/share-2.esm.js +11 -0
- package/dist/_virtual/~icons/lucide/share-2.esm.js.map +1 -0
- package/dist/_virtual/~icons/lucide/trash-2.cjs.js +2 -0
- package/dist/_virtual/~icons/lucide/trash-2.cjs.js.map +1 -0
- package/dist/_virtual/~icons/lucide/trash-2.esm.js +11 -0
- package/dist/_virtual/~icons/lucide/trash-2.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/_virtual/~icons/lucide/users.cjs.js +2 -0
- package/dist/_virtual/~icons/lucide/users.cjs.js.map +1 -0
- package/dist/_virtual/~icons/lucide/users.esm.js +11 -0
- package/dist/_virtual/~icons/lucide/users.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 +99 -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/file-explorer-header/FileExplorerHeader.cjs.js +14 -0
- package/dist/components/file-explorer-header/FileExplorerHeader.cjs.js.map +1 -0
- package/dist/components/file-explorer-header/FileExplorerHeader.d.ts +19 -0
- package/dist/components/file-explorer-header/FileExplorerHeader.d.ts.map +1 -0
- package/dist/components/file-explorer-header/FileExplorerHeader.esm.js +292 -0
- package/dist/components/file-explorer-header/FileExplorerHeader.esm.js.map +1 -0
- package/dist/components/file-explorer-header/FileExplorerHeader.styles.cjs.js +2 -0
- package/dist/components/file-explorer-header/FileExplorerHeader.styles.cjs.js.map +1 -0
- package/dist/components/file-explorer-header/FileExplorerHeader.styles.esm.js +7 -0
- package/dist/components/file-explorer-header/FileExplorerHeader.styles.esm.js.map +1 -0
- package/dist/components/file-explorer-header/FileExplorerHeaderControls.cjs.js +22 -0
- package/dist/components/file-explorer-header/FileExplorerHeaderControls.cjs.js.map +1 -0
- package/dist/components/file-explorer-header/FileExplorerHeaderControls.d.ts +15 -0
- package/dist/components/file-explorer-header/FileExplorerHeaderControls.d.ts.map +1 -0
- package/dist/components/file-explorer-header/FileExplorerHeaderControls.esm.js +266 -0
- package/dist/components/file-explorer-header/FileExplorerHeaderControls.esm.js.map +1 -0
- package/dist/components/file-explorer-header/FileExplorerHeaderControls.styles.cjs.js +2 -0
- package/dist/components/file-explorer-header/FileExplorerHeaderControls.styles.cjs.js.map +1 -0
- package/dist/components/file-explorer-header/FileExplorerHeaderControls.styles.esm.js +7 -0
- package/dist/components/file-explorer-header/FileExplorerHeaderControls.styles.esm.js.map +1 -0
- package/dist/components/file-explorer-header/FileExplorerHeaderSummary.cjs.js +19 -0
- package/dist/components/file-explorer-header/FileExplorerHeaderSummary.cjs.js.map +1 -0
- package/dist/components/file-explorer-header/FileExplorerHeaderSummary.d.ts +19 -0
- package/dist/components/file-explorer-header/FileExplorerHeaderSummary.d.ts.map +1 -0
- package/dist/components/file-explorer-header/FileExplorerHeaderSummary.esm.js +321 -0
- package/dist/components/file-explorer-header/FileExplorerHeaderSummary.esm.js.map +1 -0
- package/dist/components/file-explorer-header/FileExplorerHeaderSummary.styles.cjs.js +2 -0
- package/dist/components/file-explorer-header/FileExplorerHeaderSummary.styles.cjs.js.map +1 -0
- package/dist/components/file-explorer-header/FileExplorerHeaderSummary.styles.esm.js +7 -0
- package/dist/components/file-explorer-header/FileExplorerHeaderSummary.styles.esm.js.map +1 -0
- package/dist/components/file-explorer-header/FileExplorerProvider.cjs.js +13 -0
- package/dist/components/file-explorer-header/FileExplorerProvider.cjs.js.map +1 -0
- package/dist/components/file-explorer-header/FileExplorerProvider.d.ts +36 -0
- package/dist/components/file-explorer-header/FileExplorerProvider.d.ts.map +1 -0
- package/dist/components/file-explorer-header/FileExplorerProvider.esm.js +468 -0
- package/dist/components/file-explorer-header/FileExplorerProvider.esm.js.map +1 -0
- package/dist/components/file-explorer-header/FileExplorerProvider.styles.cjs.js +2 -0
- package/dist/components/file-explorer-header/FileExplorerProvider.styles.cjs.js.map +1 -0
- package/dist/components/file-explorer-header/FileExplorerProvider.styles.esm.js +7 -0
- package/dist/components/file-explorer-header/FileExplorerProvider.styles.esm.js.map +1 -0
- package/dist/components/file-explorer-header/helper.cjs.js +2 -0
- package/dist/components/file-explorer-header/helper.cjs.js.map +1 -0
- package/dist/components/file-explorer-header/helper.d.ts +15 -0
- package/dist/components/file-explorer-header/helper.d.ts.map +1 -0
- package/dist/components/file-explorer-header/helper.esm.js +64 -0
- package/dist/components/file-explorer-header/helper.esm.js.map +1 -0
- package/dist/components/file-explorer-header/types.d.ts +2 -0
- package/dist/components/file-explorer-header/types.d.ts.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/components/navbar/Navbar.cjs.js +15 -0
- package/dist/components/navbar/Navbar.cjs.js.map +1 -0
- package/dist/components/navbar/Navbar.d.ts +14 -0
- package/dist/components/navbar/Navbar.d.ts.map +1 -0
- package/dist/components/navbar/Navbar.esm.js +232 -0
- package/dist/components/navbar/Navbar.esm.js.map +1 -0
- package/dist/components/navbar/Navbar.styles.cjs.js +2 -0
- package/dist/components/navbar/Navbar.styles.cjs.js.map +1 -0
- package/dist/components/navbar/Navbar.styles.esm.js +7 -0
- package/dist/components/navbar/Navbar.styles.esm.js.map +1 -0
- package/dist/components/navbar/index.cjs.js +1 -0
- package/dist/components/navbar/index.d.ts +4 -0
- package/dist/components/navbar/index.d.ts.map +1 -0
- package/dist/components/navbar/index.esm.js +1 -0
- package/dist/components/resource-actions-menu/DeleteResourceDialog.cjs.js +16 -0
- package/dist/components/resource-actions-menu/DeleteResourceDialog.cjs.js.map +1 -0
- package/dist/components/resource-actions-menu/DeleteResourceDialog.d.ts +8 -0
- package/dist/components/resource-actions-menu/DeleteResourceDialog.d.ts.map +1 -0
- package/dist/components/resource-actions-menu/DeleteResourceDialog.esm.js +215 -0
- package/dist/components/resource-actions-menu/DeleteResourceDialog.esm.js.map +1 -0
- package/dist/components/resource-actions-menu/ResourceActionsMenu.cjs.js +18 -0
- package/dist/components/resource-actions-menu/ResourceActionsMenu.cjs.js.map +1 -0
- package/dist/components/resource-actions-menu/ResourceActionsMenu.d.ts +16 -0
- package/dist/components/resource-actions-menu/ResourceActionsMenu.d.ts.map +1 -0
- package/dist/components/resource-actions-menu/ResourceActionsMenu.esm.js +260 -0
- package/dist/components/resource-actions-menu/ResourceActionsMenu.esm.js.map +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 +122 -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/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/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 +31 -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/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 +72 -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 -15
- package/dist/mainPage/index.d.ts.map +1 -1
- package/dist/mainPage/index.esm.js +36 -0
- package/dist/mainPage/index.esm.js.map +1 -0
- package/dist/mainPage/navbar.cjs.js +2 -0
- package/dist/mainPage/navbar.cjs.js.map +1 -0
- package/dist/mainPage/navbar.d.ts +3 -0
- package/dist/mainPage/navbar.d.ts.map +1 -0
- package/dist/mainPage/navbar.esm.js +66 -0
- package/dist/mainPage/navbar.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 +2 -0
- package/dist/outline/manager2.cjs.js.map +1 -0
- package/dist/outline/manager2.esm.js +711 -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 +26 -0
- package/dist/outline/queryByExample.esm.js.map +1 -0
- package/dist/outline/sourcePaneIcon.d.ts +2 -0
- package/dist/outline/sourcePaneIcon.d.ts.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 +173 -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/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 +385 -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 +222 -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/utils/paneUtils.cjs.js +2 -0
- package/dist/utils/paneUtils.cjs.js.map +1 -0
- package/dist/utils/paneUtils.d.ts +19 -0
- package/dist/utils/paneUtils.d.ts.map +1 -0
- package/dist/utils/paneUtils.esm.js +52 -0
- package/dist/utils/paneUtils.esm.js.map +1 -0
- package/dist/utils/podUtils.cjs.js +2 -0
- package/dist/utils/podUtils.cjs.js.map +1 -0
- package/dist/utils/podUtils.d.ts +4 -0
- package/dist/utils/podUtils.d.ts.map +1 -0
- package/dist/utils/podUtils.esm.js +46 -0
- package/dist/utils/podUtils.esm.js.map +1 -0
- package/dist/utils/webIdUtils.cjs.js +2 -0
- package/dist/utils/webIdUtils.cjs.js.map +1 -0
- package/dist/utils/webIdUtils.d.ts +6 -0
- package/dist/utils/webIdUtils.d.ts.map +1 -0
- package/dist/utils/webIdUtils.esm.js +48 -0
- package/dist/utils/webIdUtils.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 +51 -66
- 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/menu.svg +0 -8
- 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.d.ts +0 -15
- package/dist/mainPage/footer.d.ts.map +0 -1
- 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.d.ts +0 -7
- package/dist/mainPage/menu.d.ts.map +0 -1
- package/dist/mainPage/menu.js +0 -436
- 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.d.ts +0 -5
- package/dist/profileUtils/ownerProfile.d.ts.map +0 -1
- 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 -85630
- package/dist/solid-panes.js.map +0 -1
- package/dist/solid-panes.min.js +0 -3933
- 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,222 @@
|
|
|
1
|
+
import { locationIcon as e, personInCircleIcon as t } from "./icons.esm.js";
|
|
2
|
+
import "./editProfileDetails.esm.js";
|
|
3
|
+
import { ns as n, utils as r, widgets as i } from "solid-ui";
|
|
4
|
+
import { Statement as a } from "rdflib";
|
|
5
|
+
import { createAddMeToYourFriendsButton as o } from "profile-pane";
|
|
6
|
+
//#region src/social/socialSections.ts
|
|
7
|
+
function s(t, n, i, a, s) {
|
|
8
|
+
let l = t.dom;
|
|
9
|
+
t.session.store;
|
|
10
|
+
let u = l.createElement("header");
|
|
11
|
+
u.className = "social-pane__header";
|
|
12
|
+
let d = i, f = function() {
|
|
13
|
+
u.replaceChildren();
|
|
14
|
+
let i = s(), f = l.createElement("div");
|
|
15
|
+
f.className = "social-pane__header-content";
|
|
16
|
+
let p = l.createElement("div");
|
|
17
|
+
if (p.className = "social-pane__header-actions profile__actions profile__heading-actions", !d.canEdit && d.viewerMode === "authenticated" && d.showAddFriendAction) {
|
|
18
|
+
p.classList.add("social-pane__header-actions--friend");
|
|
19
|
+
let e = o(n, t);
|
|
20
|
+
e.classList.add("flex-center"), p.appendChild(e);
|
|
21
|
+
}
|
|
22
|
+
u.appendChild(f);
|
|
23
|
+
let m = l.createElement("div");
|
|
24
|
+
m.className = "social-pane__header-media", f.appendChild(m), i && m.appendChild(c(l, i.imageUrl, i.name));
|
|
25
|
+
let h = l.createElement("div");
|
|
26
|
+
h.className = "social-pane__header-details", f.appendChild(h), p.childNodes.length > 0 && f.appendChild(p);
|
|
27
|
+
let g = l.createElement("div");
|
|
28
|
+
g.classList.add("social-pane__header-summary", "flex-column"), h.appendChild(g);
|
|
29
|
+
let _ = i?.name || r.label(n), v = l.createElement("h1");
|
|
30
|
+
v.classList.add("social-pane__header-name"), v.appendChild(l.createTextNode(_)), g.appendChild(v);
|
|
31
|
+
let y = [i?.jobTitle, i?.organization].filter(Boolean).join(" | ");
|
|
32
|
+
if (y) {
|
|
33
|
+
let e = l.createElement("div");
|
|
34
|
+
e.className = "social-pane__header-job-org", e.textContent = y, g.appendChild(e);
|
|
35
|
+
}
|
|
36
|
+
if (i?.location) {
|
|
37
|
+
let t = l.createElement("div");
|
|
38
|
+
t.className = "social-pane__header-location";
|
|
39
|
+
let n = l.createElement("span");
|
|
40
|
+
n.classList.add("social-pane__header-location-icon", "inline-flex-row"), n.innerHTML = e, t.appendChild(n), t.appendChild(l.createTextNode(i.location)), g.appendChild(t);
|
|
41
|
+
}
|
|
42
|
+
let b = l.createElement("div");
|
|
43
|
+
b.className = "social-pane__header-stats";
|
|
44
|
+
let x = l.createElement("button");
|
|
45
|
+
x.className = "social-pane__header-stat", x.type = "button";
|
|
46
|
+
let S = l.createElement("span");
|
|
47
|
+
if (S.className = "social-pane__header-stat-label", S.textContent = `${a.friendCount} friend${a.friendCount === 1 ? "" : "s"}`, x.appendChild(S), a.onSelectFriends && x.addEventListener("click", a.onSelectFriends), b.appendChild(x), typeof a.mutualFriendCount == "number") {
|
|
48
|
+
let e = l.createElement("button");
|
|
49
|
+
e.className = "social-pane__header-stat", e.type = "button";
|
|
50
|
+
let t = l.createElement("span");
|
|
51
|
+
t.className = "social-pane__header-stat-label", t.textContent = `${a.mutualFriendCount} mutual friend${a.mutualFriendCount === 1 ? "" : "s"}`, e.appendChild(t), a.onSelectMutual && e.addEventListener("click", a.onSelectMutual), b.appendChild(e);
|
|
52
|
+
}
|
|
53
|
+
g.appendChild(b);
|
|
54
|
+
};
|
|
55
|
+
return u.refreshSocialHeader = function(e) {
|
|
56
|
+
d = e, f();
|
|
57
|
+
}, f(), u;
|
|
58
|
+
}
|
|
59
|
+
function c(e, n, r = "") {
|
|
60
|
+
if (n) {
|
|
61
|
+
let t = e.createElement("img");
|
|
62
|
+
return t.className = "social-pane__header-hero", t.src = n, t.alt = r, t.width = 180, t.height = 180, t.loading = "eager", t;
|
|
63
|
+
}
|
|
64
|
+
let i = e.createElement("div");
|
|
65
|
+
i.className = "social-pane__header-hero-alt flex-center", i.setAttribute("role", "img"), i.setAttribute("aria-label", r), i.tabIndex = 0;
|
|
66
|
+
let a = e.createElement("span");
|
|
67
|
+
return a.classList.add("social-pane__header-hero-icon", "inline-flex-row"), a.innerHTML = t, i.appendChild(a), i;
|
|
68
|
+
}
|
|
69
|
+
function l(e) {
|
|
70
|
+
let { dom: t, subject: o, familiar: s, me: c, meUri: l, incoming: u, outgoing: d, editable: f, profile: p, knows: m, mutualConnections: h, link: g, text: _, buildCheckboxForm: v, renderSupportingInfo: y, renderNameSuffix: b } = e, x = function() {}, S = t.createElement("section");
|
|
71
|
+
S.className = "social-pane__mutual-friends social-primary__panel", S.id = "social-panel-mutual", S.setAttribute("role", "tabpanel"), S.setAttribute("aria-labelledby", "social-tab-mutual");
|
|
72
|
+
let C = S.appendChild(t.createElement("div"));
|
|
73
|
+
C.classList.add("social-main", "social-main--mutual", "flex-column");
|
|
74
|
+
let w = t.createElement("div");
|
|
75
|
+
w.classList.add("social-mutual-summary", "flex-column"), C.appendChild(w);
|
|
76
|
+
let T = function() {
|
|
77
|
+
let e = w.appendChild(t.createElement("div"));
|
|
78
|
+
return e.classList.add("social-mutual-summary-line"), e;
|
|
79
|
+
}, E = function() {
|
|
80
|
+
let e = T();
|
|
81
|
+
return e.appendChild(g(_("You"), l)), e.appendChild(_(" and ")), e.appendChild(g(_(s), o.uri)), e;
|
|
82
|
+
};
|
|
83
|
+
if (!u) {
|
|
84
|
+
if (!d) E().appendChild(_(" have not said you know each other."));
|
|
85
|
+
else {
|
|
86
|
+
let e = T();
|
|
87
|
+
e.appendChild(g(_("You"), l)), e.appendChild(_(" know ")), e.appendChild(g(_(s), o.uri)), e.appendChild(_(" (unconfirmed)."));
|
|
88
|
+
}
|
|
89
|
+
} else if (d) E().appendChild(_(" say you know each other."));
|
|
90
|
+
else {
|
|
91
|
+
w.classList.add("social-mutual-summary--confirm");
|
|
92
|
+
let e = w.appendChild(t.createElement("div"));
|
|
93
|
+
e.classList.add("social-mutual-summary-line"), e.appendChild(g(_(s), o.uri)), e.appendChild(_(" knows ")), e.appendChild(g(_("you"), l)), e.appendChild(_(" (unconfirmed)."));
|
|
94
|
+
}
|
|
95
|
+
if (u && !d) {
|
|
96
|
+
let e = t.createElement("span");
|
|
97
|
+
e.className = "social-mutual-confirm-prompt", e.appendChild(_("Confirm you know ")), e.appendChild(g(_(s), o.uri));
|
|
98
|
+
let n = v(e, new a(c, m, o, p ?? void 0), !!d, {
|
|
99
|
+
disabled: !f,
|
|
100
|
+
disabledTitle: f ? void 0 : "Your profile is not editable"
|
|
101
|
+
});
|
|
102
|
+
n.classList.add("social-mutual-checkbox-form"), C.appendChild(n);
|
|
103
|
+
}
|
|
104
|
+
if (h.length) {
|
|
105
|
+
let e = C.appendChild(t.createElement("table"));
|
|
106
|
+
e.className = "social-main social-friends-list social-friends-grid";
|
|
107
|
+
let a = function(e) {
|
|
108
|
+
return i.personTR(t, n.foaf("knows"), e, {
|
|
109
|
+
renderSupportingInfo: y,
|
|
110
|
+
renderNameSuffix: b
|
|
111
|
+
});
|
|
112
|
+
};
|
|
113
|
+
x = function() {
|
|
114
|
+
let t = [...h].sort((e, t) => {
|
|
115
|
+
let n = r.label(e) || e.value, i = r.label(t) || t.value;
|
|
116
|
+
return n.localeCompare(i);
|
|
117
|
+
});
|
|
118
|
+
r.syncTableToArray(e, t, a, function(e, t) {
|
|
119
|
+
return a(t);
|
|
120
|
+
});
|
|
121
|
+
}, x();
|
|
122
|
+
}
|
|
123
|
+
return {
|
|
124
|
+
section: S,
|
|
125
|
+
content: C,
|
|
126
|
+
refreshMutualFriends: x
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
function u(e) {
|
|
130
|
+
let { dom: t, subject: r, profile: a, editable: o, renderSupportingInfo: s, renderNameSuffix: c } = e, l = t.createElement("section");
|
|
131
|
+
l.className = "social-pane__all-friends social-primary__panel", l.id = "social-panel-all-friends", l.setAttribute("role", "tabpanel"), l.setAttribute("aria-labelledby", "social-tab-all-friends");
|
|
132
|
+
let u = l.appendChild(t.createElement("table"));
|
|
133
|
+
u.className = "social-main";
|
|
134
|
+
let d = i.attachmentList(t, r, u, {
|
|
135
|
+
doc: a,
|
|
136
|
+
modify: !!o,
|
|
137
|
+
predicate: n.foaf("knows"),
|
|
138
|
+
noun: "friend",
|
|
139
|
+
refreshOnDocumentLoad: !1,
|
|
140
|
+
renderSupportingInfo: s,
|
|
141
|
+
renderNameSuffix: c
|
|
142
|
+
});
|
|
143
|
+
d.classList.add("social-friends-list"), d.style.marginTop = "0";
|
|
144
|
+
let f = d.querySelector("tr"), p = f?.children?.[0], m = f?.children?.[1], h = t.createElement("div");
|
|
145
|
+
if (h.classList.add("social-friends-header-actions"), p instanceof HTMLTableCellElement) {
|
|
146
|
+
p.classList.add("social-friends-header-dropzone-cell");
|
|
147
|
+
let e = t.createElement("table");
|
|
148
|
+
e.className = "social-friends-header-dropzone", e.setAttribute("role", "presentation"), e.appendChild(t.createElement("tbody")).appendChild(t.createElement("tr")).appendChild(p), h.appendChild(e);
|
|
149
|
+
} else if (p instanceof HTMLElement) {
|
|
150
|
+
for (; p.firstChild;) h.appendChild(p.firstChild);
|
|
151
|
+
p.remove();
|
|
152
|
+
}
|
|
153
|
+
let g = h.querySelectorAll("button");
|
|
154
|
+
if (o && g.length > 0) {
|
|
155
|
+
g.forEach((e) => {
|
|
156
|
+
e.setAttribute("title", "Drop friend here"), e.setAttribute("aria-label", "Drop friend here"), e.querySelectorAll("img").forEach((e) => {
|
|
157
|
+
e.setAttribute("title", "Drop friend here"), e.setAttribute("alt", "Drop friend here");
|
|
158
|
+
});
|
|
159
|
+
});
|
|
160
|
+
let e = t.createElement("div");
|
|
161
|
+
e.className = "social-friends-header-actions social-friends-header-actions--standalone", e.appendChild(h);
|
|
162
|
+
let n = t.createElement("span");
|
|
163
|
+
n.className = "social-friends-header-hint", n.textContent = "Drag a WebId on the target to add a friend.", e.appendChild(n), l.prepend(e);
|
|
164
|
+
}
|
|
165
|
+
m instanceof HTMLTableCellElement && (m.colSpan = 2);
|
|
166
|
+
let _ = d.querySelector("td table");
|
|
167
|
+
return _ instanceof HTMLTableElement && _.classList.add("social-friends-grid"), {
|
|
168
|
+
section: l,
|
|
169
|
+
mainTable: u,
|
|
170
|
+
friendsList: d
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
function d(e) {
|
|
174
|
+
let { dom: t, triage: a, renderSupportingInfo: o, renderNameSuffix: s } = e, c = t.createElement("section");
|
|
175
|
+
c.className = "social-pane__requests social-primary__panel", c.id = "social-panel-requests", c.setAttribute("role", "tabpanel"), c.setAttribute("aria-labelledby", "social-tab-requests");
|
|
176
|
+
let l = c.appendChild(t.createElement("div"));
|
|
177
|
+
l.classList.add("social-main", "social-main--requests", "flex-column");
|
|
178
|
+
let u = l.appendChild(t.createElement("p"));
|
|
179
|
+
u.className = "social-requests__note", u.textContent = "Best effort preview: this view only reflects profile documents that are currently loaded. A dedicated inbox would still be needed for complete request discovery.";
|
|
180
|
+
let d = function(e, n, r) {
|
|
181
|
+
let i = l.appendChild(t.createElement("section"));
|
|
182
|
+
i.classList.add("social-requests__group", "flex-column");
|
|
183
|
+
let a = i.appendChild(t.createElement("div"));
|
|
184
|
+
a.className = "social-requests__group-header";
|
|
185
|
+
let o = a.appendChild(t.createElement("h2"));
|
|
186
|
+
o.className = "social-requests__group-title", o.textContent = e;
|
|
187
|
+
let s = a.appendChild(t.createElement("p"));
|
|
188
|
+
s.className = "social-requests__group-description", s.textContent = n;
|
|
189
|
+
let c = i.appendChild(t.createElement("p"));
|
|
190
|
+
c.className = "social-requests__empty", c.textContent = r;
|
|
191
|
+
let u = i.appendChild(t.createElement("table"));
|
|
192
|
+
return u.className = "social-main social-friends-list social-friends-grid social-requests__table", {
|
|
193
|
+
empty: c,
|
|
194
|
+
table: u
|
|
195
|
+
};
|
|
196
|
+
}, f = d("Incoming requests", "People who say they know this profile, but have not been confirmed yet.", "No incoming requests are visible from the currently loaded data."), p = d("Awaiting confirmation", "People this profile knows who have not linked back yet.", "Nothing is waiting for confirmation right now."), m = function(e) {
|
|
197
|
+
return i.personTR(t, n.foaf("knows"), e, {
|
|
198
|
+
renderSupportingInfo: o,
|
|
199
|
+
renderNameSuffix: s
|
|
200
|
+
});
|
|
201
|
+
}, h = function(e) {
|
|
202
|
+
return [...e].sort((e, t) => {
|
|
203
|
+
let n = r.label(e) || e.value, i = r.label(t) || t.value;
|
|
204
|
+
return n.localeCompare(i);
|
|
205
|
+
});
|
|
206
|
+
}, g = function(e, t) {
|
|
207
|
+
let n = h(t);
|
|
208
|
+
e.empty.hidden = n.length > 0, e.table.hidden = n.length === 0, r.syncTableToArray(e.table, n, m, function(e, t) {
|
|
209
|
+
return m(t);
|
|
210
|
+
});
|
|
211
|
+
}, _ = function(e) {
|
|
212
|
+
g(f, e.requests), g(p, e.unconfirmed);
|
|
213
|
+
};
|
|
214
|
+
return _(a), {
|
|
215
|
+
section: c,
|
|
216
|
+
refreshRequests: _
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
//#endregion
|
|
220
|
+
export { u as createAllFriendsSection, s as createHeaderSection, l as createMutualSection, d as createRequestsSection };
|
|
221
|
+
|
|
222
|
+
//# sourceMappingURL=socialSections.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"socialSections.esm.js","names":[],"sources":["../../src/social/socialSections.ts"],"sourcesContent":["import { DataBrowserContext } from 'pane-registry'\nimport { createAddMeToYourFriendsButton } from 'profile-pane'\nimport { Statement, NamedNode } from 'rdflib'\nimport { ns, utils, widgets } from 'solid-ui'\nimport { appendProfileLinks } from './editProfileDetails'\nimport { locationIcon, personInCircleIcon as personInCircleIconSvg } from './icons'\nimport { FriendshipTriage } from './triage'\n\nexport type ViewerMode = 'owner' | 'authenticated' | 'anonymous'\n\nexport type HeaderControls = {\n canEdit: boolean,\n viewerMode: ViewerMode,\n showAddFriendAction?: boolean\n}\n\nexport type SocialHeaderElement = HTMLElement & {\n refreshSocialHeader?: (controls: HeaderControls) => void\n}\n\nexport type HeaderStats = {\n friendCount: number,\n mutualFriendCount: number | null,\n onSelectFriends?: () => void,\n onSelectMutual?: () => void\n}\n\nexport type HeaderProfileData = {\n imageUrl?: string,\n name?: string,\n jobTitle?: string,\n organization?: string,\n location?: string | null\n} | null\n\nexport type FriendRowRenderers = {\n renderSupportingInfo: (target: NamedNode, renderDom: HTMLDocument) => HTMLElement | null,\n renderNameSuffix: (target: NamedNode, renderDom: HTMLDocument) => HTMLElement | null\n}\n\nexport function createHeaderSection (\n context: DataBrowserContext,\n subject: NamedNode,\n controls: HeaderControls,\n stats: HeaderStats,\n getProfileData: () => HeaderProfileData\n): SocialHeaderElement {\n const dom = context.dom\n const kb = context.session.store\n const header = dom.createElement('header') as SocialHeaderElement\n header.className = 'social-pane__header'\n let headerControls = controls\n\n const renderHeader = function () {\n header.replaceChildren()\n const profileData = getProfileData()\n\n const headerContent = dom.createElement('div')\n headerContent.className = 'social-pane__header-content'\n\n const headerActions = dom.createElement('div')\n headerActions.className = 'social-pane__header-actions profile__actions profile__heading-actions'\n\n if (headerControls.canEdit) {\n // Hidden for now because the social pane header edit control does not match the new design.\n // Revisit later if we decide to restore profile-link editing here.\n } else if (headerControls.viewerMode === 'authenticated' && headerControls.showAddFriendAction) {\n headerActions.classList.add('social-pane__header-actions--friend')\n const addToFriendsButton = createAddMeToYourFriendsButton(subject, context)\n addToFriendsButton.classList.add('flex-center')\n headerActions.appendChild(addToFriendsButton)\n }\n\n header.appendChild(headerContent)\n\n const headerMedia = dom.createElement('div')\n headerMedia.className = 'social-pane__header-media'\n headerContent.appendChild(headerMedia)\n\n if (profileData) {\n headerMedia.appendChild(createImage(dom, profileData.imageUrl, profileData.name))\n }\n\n const headerDetails = dom.createElement('div')\n headerDetails.className = 'social-pane__header-details'\n headerContent.appendChild(headerDetails)\n\n if (headerActions.childNodes.length > 0) {\n headerContent.appendChild(headerActions)\n }\n\n const headerSummary = dom.createElement('div')\n headerSummary.classList.add('social-pane__header-summary', 'flex-column')\n headerDetails.appendChild(headerSummary)\n\n const name = profileData?.name || utils.label(subject)\n const h1 = dom.createElement('h1')\n h1.classList.add('social-pane__header-name')\n h1.appendChild(dom.createTextNode(name))\n headerSummary.appendChild(h1)\n\n const jobAndOrganization = [profileData?.jobTitle, profileData?.organization].filter(Boolean).join(' | ')\n if (jobAndOrganization) {\n const jobLine = dom.createElement('div')\n jobLine.className = 'social-pane__header-job-org'\n jobLine.textContent = jobAndOrganization\n headerSummary.appendChild(jobLine)\n }\n\n if (profileData?.location) {\n const locationLine = dom.createElement('div')\n locationLine.className = 'social-pane__header-location'\n\n const locationIconSpan = dom.createElement('span')\n locationIconSpan.classList.add('social-pane__header-location-icon', 'inline-flex-row')\n locationIconSpan.innerHTML = locationIcon\n locationLine.appendChild(locationIconSpan)\n locationLine.appendChild(dom.createTextNode(profileData.location))\n\n headerSummary.appendChild(locationLine)\n }\n\n const statsRow = dom.createElement('div')\n statsRow.className = 'social-pane__header-stats'\n\n const friendCount = dom.createElement('button')\n friendCount.className = 'social-pane__header-stat'\n friendCount.type = 'button'\n const friendCountLabel = dom.createElement('span')\n friendCountLabel.className = 'social-pane__header-stat-label'\n friendCountLabel.textContent = `${stats.friendCount} friend${stats.friendCount === 1 ? '' : 's'}`\n friendCount.appendChild(friendCountLabel)\n if (stats.onSelectFriends) {\n friendCount.addEventListener('click', stats.onSelectFriends)\n }\n statsRow.appendChild(friendCount)\n\n if (typeof stats.mutualFriendCount === 'number') {\n const mutualCount = dom.createElement('button')\n mutualCount.className = 'social-pane__header-stat'\n mutualCount.type = 'button'\n const mutualCountLabel = dom.createElement('span')\n mutualCountLabel.className = 'social-pane__header-stat-label'\n mutualCountLabel.textContent = `${stats.mutualFriendCount} mutual friend${stats.mutualFriendCount === 1 ? '' : 's'}`\n mutualCount.appendChild(mutualCountLabel)\n if (stats.onSelectMutual) {\n mutualCount.addEventListener('click', stats.onSelectMutual)\n }\n statsRow.appendChild(mutualCount)\n }\n\n headerSummary.appendChild(statsRow)\n appendProfileLinks(headerMedia, dom, kb, subject)\n }\n\n header.refreshSocialHeader = function (nextControls: HeaderControls) {\n headerControls = nextControls\n renderHeader()\n }\n\n renderHeader()\n\n return header\n}\n\nfunction createImage (dom: HTMLDocument, src: string | null | undefined, alt = ''): HTMLElement {\n if (src) {\n const img = dom.createElement('img')\n img.className = 'social-pane__header-hero'\n img.src = src\n img.alt = alt\n img.width = 180\n img.height = 180\n img.loading = 'eager'\n return img\n }\n\n const fallback = dom.createElement('div')\n fallback.className = 'social-pane__header-hero-alt flex-center'\n fallback.setAttribute('role', 'img')\n fallback.setAttribute('aria-label', alt)\n fallback.tabIndex = 0\n\n const icon = dom.createElement('span')\n icon.classList.add('social-pane__header-hero-icon', 'inline-flex-row')\n icon.innerHTML = personInCircleIconSvg\n fallback.appendChild(icon)\n\n return fallback\n}\n\nexport function createMutualSection (options: {\n dom: HTMLDocument,\n subject: NamedNode,\n familiar: string,\n me: NamedNode,\n meUri: string | null,\n incoming: boolean | NamedNode[] | undefined,\n outgoing: boolean | NamedNode[] | undefined,\n editable: boolean,\n profile: NamedNode | null,\n knows: NamedNode,\n mutualConnections: NamedNode[],\n link: (contents: Node, uri: string | null | undefined) => Node,\n text: (value: string) => Text,\n buildCheckboxForm: (\n label: string | Node,\n statement: Statement,\n state: boolean,\n options?: { disabled?: boolean, disabledTitle?: string }\n ) => HTMLElement,\n renderSupportingInfo: FriendRowRenderers['renderSupportingInfo'],\n renderNameSuffix: FriendRowRenderers['renderNameSuffix']\n}): { section: HTMLElement, content: HTMLElement, refreshMutualFriends: () => void } {\n const {\n dom,\n subject,\n familiar,\n me,\n meUri,\n incoming,\n outgoing,\n editable,\n profile,\n knows,\n mutualConnections,\n link,\n text,\n buildCheckboxForm,\n renderSupportingInfo,\n renderNameSuffix\n } = options\n\n let refreshMutualFriends = function () {}\n\n const mutualSection = dom.createElement('section')\n mutualSection.className = 'social-pane__mutual-friends social-primary__panel'\n mutualSection.id = 'social-panel-mutual'\n mutualSection.setAttribute('role', 'tabpanel')\n mutualSection.setAttribute('aria-labelledby', 'social-tab-mutual')\n\n const mutualContent = mutualSection.appendChild(dom.createElement('div'))\n mutualContent.classList.add('social-main', 'social-main--mutual', 'flex-column')\n\n const relationshipSummary = dom.createElement('div')\n relationshipSummary.classList.add('social-mutual-summary', 'flex-column')\n mutualContent.appendChild(relationshipSummary)\n\n const createRelationshipLine = function () {\n const line = relationshipSummary.appendChild(dom.createElement('div'))\n line.classList.add('social-mutual-summary-line')\n return line\n }\n\n const youAndThem = function () {\n const line = createRelationshipLine()\n line.appendChild(link(text('You'), meUri))\n line.appendChild(text(' and '))\n line.appendChild(link(text(familiar), subject.uri))\n return line\n }\n\n if (!incoming) {\n if (!outgoing) {\n const line = youAndThem()\n line.appendChild(text(' have not said you know each other.'))\n } else {\n const line = createRelationshipLine()\n line.appendChild(link(text('You'), meUri))\n line.appendChild(text(' know '))\n line.appendChild(link(text(familiar), subject.uri))\n line.appendChild(text(' (unconfirmed).'))\n }\n } else if (!outgoing) {\n relationshipSummary.classList.add('social-mutual-summary--confirm')\n\n const incomingLine = relationshipSummary.appendChild(dom.createElement('div'))\n incomingLine.classList.add('social-mutual-summary-line')\n incomingLine.appendChild(link(text(familiar), subject.uri))\n incomingLine.appendChild(text(' knows '))\n incomingLine.appendChild(link(text('you'), meUri))\n incomingLine.appendChild(text(' (unconfirmed).'))\n } else {\n const line = youAndThem()\n line.appendChild(text(' say you know each other.'))\n }\n\n const shouldShowCheckboxPreview = Boolean(incoming) && !outgoing\n if (shouldShowCheckboxPreview) {\n const confirmLabel = dom.createElement('span')\n confirmLabel.className = 'social-mutual-confirm-prompt'\n confirmLabel.appendChild(text('Confirm you know '))\n confirmLabel.appendChild(link(text(familiar), subject.uri))\n\n const relationshipForm = buildCheckboxForm(\n confirmLabel,\n new Statement(me, knows, subject, profile ?? undefined),\n Boolean(outgoing),\n {\n disabled: !editable,\n disabledTitle: !editable ? 'Your profile is not editable' : undefined\n }\n )\n relationshipForm.classList.add('social-mutual-checkbox-form')\n\n mutualContent.appendChild(relationshipForm)\n }\n\n if (mutualConnections.length) {\n const mutualFriendsTable = mutualContent.appendChild(dom.createElement('table'))\n mutualFriendsTable.className = 'social-main social-friends-list social-friends-grid'\n\n const createMutualRow = function (target: NamedNode) {\n return widgets.personTR(dom, ns.foaf('knows'), target, {\n renderSupportingInfo,\n renderNameSuffix\n })\n }\n\n refreshMutualFriends = function () {\n const sortedMutualConnections = [...mutualConnections].sort((left, right) => {\n const leftLabel = utils.label(left) || left.value\n const rightLabel = utils.label(right) || right.value\n return leftLabel.localeCompare(rightLabel)\n })\n\n utils.syncTableToArray(\n mutualFriendsTable,\n sortedMutualConnections,\n createMutualRow,\n function (row, thing) {\n const replacement = createMutualRow(thing)\n return replacement\n }\n )\n }\n\n refreshMutualFriends()\n }\n\n return { section: mutualSection, content: mutualContent, refreshMutualFriends }\n}\n\nexport function createAllFriendsSection (options: {\n dom: HTMLDocument,\n subject: NamedNode,\n profile: NamedNode | null,\n editable: boolean,\n renderSupportingInfo: (target: NamedNode, renderDom: HTMLDocument) => HTMLElement | null,\n renderNameSuffix: (target: NamedNode, renderDom: HTMLDocument) => HTMLElement | null\n}): { section: HTMLElement, mainTable: HTMLTableElement, friendsList: HTMLElement } {\n const { dom, subject, profile, editable, renderSupportingInfo, renderNameSuffix } = options\n\n const allFriends = dom.createElement('section')\n allFriends.className = 'social-pane__all-friends social-primary__panel'\n allFriends.id = 'social-panel-all-friends'\n allFriends.setAttribute('role', 'tabpanel')\n allFriends.setAttribute('aria-labelledby', 'social-tab-all-friends')\n\n const mainTable = allFriends.appendChild(dom.createElement('table'))\n mainTable.className = 'social-main'\n\n const friendsList = widgets.attachmentList(dom, subject, mainTable, {\n doc: profile,\n modify: !!editable,\n predicate: ns.foaf('knows'),\n noun: 'friend',\n // Social pane already owns the async refresh cycle for friend data in\n // socialPane.ts. Leave attachmentList's generic follow-up rerender disabled\n // here or each fetched friend profile will trigger an extra whole-table refresh\n // on top of the pane's own batched updates.\n refreshOnDocumentLoad: false,\n renderSupportingInfo,\n renderNameSuffix\n })\n friendsList.classList.add('social-friends-list')\n friendsList.style.marginTop = '0'\n\n const friendsListRow = friendsList.querySelector('tr')\n const friendsListPromptCell = friendsListRow?.children?.[0]\n const friendsListRightCell = friendsListRow?.children?.[1]\n const friendsHeaderActions = dom.createElement('div')\n friendsHeaderActions.classList.add('social-friends-header-actions')\n\n if (friendsListPromptCell instanceof HTMLTableCellElement) {\n friendsListPromptCell.classList.add('social-friends-header-dropzone-cell')\n const friendsHeaderDropzone = dom.createElement('table')\n friendsHeaderDropzone.className = 'social-friends-header-dropzone'\n friendsHeaderDropzone.setAttribute('role', 'presentation')\n const friendsHeaderDropzoneBody = friendsHeaderDropzone.appendChild(dom.createElement('tbody'))\n const friendsHeaderDropzoneRow = friendsHeaderDropzoneBody.appendChild(dom.createElement('tr'))\n friendsHeaderDropzoneRow.appendChild(friendsListPromptCell)\n friendsHeaderActions.appendChild(friendsHeaderDropzone)\n } else if (friendsListPromptCell instanceof HTMLElement) {\n while (friendsListPromptCell.firstChild) {\n friendsHeaderActions.appendChild(friendsListPromptCell.firstChild)\n }\n friendsListPromptCell.remove()\n }\n\n const friendDropButtons = friendsHeaderActions.querySelectorAll('button')\n if (editable && friendDropButtons.length > 0) {\n friendDropButtons.forEach((button) => {\n button.setAttribute('title', 'Drop friend here')\n button.setAttribute('aria-label', 'Drop friend here')\n const buttonImages = button.querySelectorAll('img')\n buttonImages.forEach((image) => {\n image.setAttribute('title', 'Drop friend here')\n image.setAttribute('alt', 'Drop friend here')\n })\n })\n\n const friendsActionsRow = dom.createElement('div')\n friendsActionsRow.className = 'social-friends-header-actions social-friends-header-actions--standalone'\n friendsActionsRow.appendChild(friendsHeaderActions)\n const dropHint = dom.createElement('span')\n dropHint.className = 'social-friends-header-hint'\n dropHint.textContent = 'Drag a WebId on the target to add a friend.'\n friendsActionsRow.appendChild(dropHint)\n allFriends.prepend(friendsActionsRow)\n }\n\n if (friendsListRightCell instanceof HTMLTableCellElement) {\n friendsListRightCell.colSpan = 2\n }\n\n const friendsItemsTable = friendsList.querySelector('td table')\n if (friendsItemsTable instanceof HTMLTableElement) {\n friendsItemsTable.classList.add('social-friends-grid')\n }\n\n return { section: allFriends, mainTable, friendsList }\n}\n\nexport function createRequestsSection (options: {\n dom: HTMLDocument,\n triage: FriendshipTriage,\n renderSupportingInfo: (target: NamedNode, renderDom: HTMLDocument) => HTMLElement | null,\n renderNameSuffix: (target: NamedNode, renderDom: HTMLDocument) => HTMLElement | null\n}): { section: HTMLElement, refreshRequests: (triage: FriendshipTriage) => void } {\n const { dom, triage, renderSupportingInfo, renderNameSuffix } = options\n\n const requestsSection = dom.createElement('section')\n requestsSection.className = 'social-pane__requests social-primary__panel'\n requestsSection.id = 'social-panel-requests'\n requestsSection.setAttribute('role', 'tabpanel')\n requestsSection.setAttribute('aria-labelledby', 'social-tab-requests')\n\n const requestsContent = requestsSection.appendChild(dom.createElement('div'))\n requestsContent.classList.add('social-main', 'social-main--requests', 'flex-column')\n\n const note = requestsContent.appendChild(dom.createElement('p'))\n note.className = 'social-requests__note'\n note.textContent = 'Best effort preview: this view only reflects profile documents that are currently loaded. A dedicated inbox would still be needed for complete request discovery.'\n\n const createRequestGroup = function (title: string, description: string, emptyText: string) {\n const group = requestsContent.appendChild(dom.createElement('section'))\n group.classList.add('social-requests__group', 'flex-column')\n\n const header = group.appendChild(dom.createElement('div'))\n header.className = 'social-requests__group-header'\n\n const heading = header.appendChild(dom.createElement('h2'))\n heading.className = 'social-requests__group-title'\n heading.textContent = title\n\n const blurb = header.appendChild(dom.createElement('p'))\n blurb.className = 'social-requests__group-description'\n blurb.textContent = description\n\n const empty = group.appendChild(dom.createElement('p'))\n empty.className = 'social-requests__empty'\n empty.textContent = emptyText\n\n const table = group.appendChild(dom.createElement('table'))\n table.className = 'social-main social-friends-list social-friends-grid social-requests__table'\n\n return { empty, table }\n }\n\n const incomingGroup = createRequestGroup(\n 'Incoming requests',\n 'People who say they know this profile, but have not been confirmed yet.',\n 'No incoming requests are visible from the currently loaded data.'\n )\n const pendingGroup = createRequestGroup(\n 'Awaiting confirmation',\n 'People this profile knows who have not linked back yet.',\n 'Nothing is waiting for confirmation right now.'\n )\n\n const createPersonRow = function (target: NamedNode) {\n return widgets.personTR(dom, ns.foaf('knows'), target, {\n renderSupportingInfo,\n renderNameSuffix\n })\n }\n\n const sortNodes = function (nodes: NamedNode[]) {\n return [...nodes].sort((left, right) => {\n const leftLabel = utils.label(left) || left.value\n const rightLabel = utils.label(right) || right.value\n return leftLabel.localeCompare(rightLabel)\n })\n }\n\n const syncRequestGroup = function (\n group: { empty: HTMLElement, table: HTMLTableElement },\n nodes: NamedNode[]\n ) {\n const sortedNodes = sortNodes(nodes)\n group.empty.hidden = sortedNodes.length > 0\n group.table.hidden = sortedNodes.length === 0\n\n utils.syncTableToArray(\n group.table,\n sortedNodes,\n createPersonRow,\n function (_row, thing) {\n return createPersonRow(thing)\n }\n )\n }\n\n const refreshRequests = function (nextTriage: FriendshipTriage) {\n syncRequestGroup(incomingGroup, nextTriage.requests)\n syncRequestGroup(pendingGroup, nextTriage.unconfirmed)\n }\n\n refreshRequests(triage)\n\n return { section: requestsSection, refreshRequests }\n}\n"],"mappings":";;;;;;AAwCA,SAAgB,EACd,GACA,GACA,GACA,GACA,GACqB;CACrB,IAAM,IAAM,EAAQ;CACT,EAAQ,QAAQ;CAD3B,IAEM,IAAS,EAAI,cAAc,QAAQ;CACzC,EAAO,YAAY;CACnB,IAAI,IAAiB,GAEf,IAAe,WAAY;EAC/B,EAAO,gBAAgB;EACvB,IAAM,IAAc,EAAe,GAE7B,IAAgB,EAAI,cAAc,KAAK;EAC7C,EAAc,YAAY;EAE1B,IAAM,IAAgB,EAAI,cAAc,KAAK;EAG7C,IAFA,EAAc,YAAY,yEAEtB,GAAe,WAGR,EAAe,eAAe,mBAAmB,EAAe,qBAAqB;GAC9F,EAAc,UAAU,IAAI,qCAAqC;GACjE,IAAM,IAAqB,EAA+B,GAAS,CAAO;GAE1E,AADA,EAAmB,UAAU,IAAI,aAAa,GAC9C,EAAc,YAAY,CAAkB;EAC9C;EAEA,EAAO,YAAY,CAAa;EAEhC,IAAM,IAAc,EAAI,cAAc,KAAK;EAI3C,AAHA,EAAY,YAAY,6BACxB,EAAc,YAAY,CAAW,GAEjC,KACF,EAAY,YAAY,EAAY,GAAK,EAAY,UAAU,EAAY,IAAI,CAAC;EAGlF,IAAM,IAAgB,EAAI,cAAc,KAAK;EAI7C,AAHA,EAAc,YAAY,+BAC1B,EAAc,YAAY,CAAa,GAEnC,EAAc,WAAW,SAAS,KACpC,EAAc,YAAY,CAAa;EAGzC,IAAM,IAAgB,EAAI,cAAc,KAAK;EAE7C,AADA,EAAc,UAAU,IAAI,+BAA+B,aAAa,GACxE,EAAc,YAAY,CAAa;EAEvC,IAAM,IAAO,GAAa,QAAQ,EAAM,MAAM,CAAO,GAC/C,IAAK,EAAI,cAAc,IAAI;EAGjC,AAFA,EAAG,UAAU,IAAI,0BAA0B,GAC3C,EAAG,YAAY,EAAI,eAAe,CAAI,CAAC,GACvC,EAAc,YAAY,CAAE;EAE5B,IAAM,IAAqB,CAAC,GAAa,UAAU,GAAa,YAAY,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,KAAK;EACxG,IAAI,GAAoB;GACtB,IAAM,IAAU,EAAI,cAAc,KAAK;GAGvC,AAFA,EAAQ,YAAY,+BACpB,EAAQ,cAAc,GACtB,EAAc,YAAY,CAAO;EACnC;EAEA,IAAI,GAAa,UAAU;GACzB,IAAM,IAAe,EAAI,cAAc,KAAK;GAC5C,EAAa,YAAY;GAEzB,IAAM,IAAmB,EAAI,cAAc,MAAM;GAMjD,AALA,EAAiB,UAAU,IAAI,qCAAqC,iBAAiB,GACrF,EAAiB,YAAY,GAC7B,EAAa,YAAY,CAAgB,GACzC,EAAa,YAAY,EAAI,eAAe,EAAY,QAAQ,CAAC,GAEjE,EAAc,YAAY,CAAY;EACxC;EAEA,IAAM,IAAW,EAAI,cAAc,KAAK;EACxC,EAAS,YAAY;EAErB,IAAM,IAAc,EAAI,cAAc,QAAQ;EAE9C,AADA,EAAY,YAAY,4BACxB,EAAY,OAAO;EACnB,IAAM,IAAmB,EAAI,cAAc,MAAM;EASjD,IARA,EAAiB,YAAY,kCAC7B,EAAiB,cAAc,GAAG,EAAM,YAAY,SAAS,EAAM,gBAAgB,IAAI,KAAK,OAC5F,EAAY,YAAY,CAAgB,GACpC,EAAM,mBACR,EAAY,iBAAiB,SAAS,EAAM,eAAe,GAE7D,EAAS,YAAY,CAAW,GAE5B,OAAO,EAAM,qBAAsB,UAAU;GAC/C,IAAM,IAAc,EAAI,cAAc,QAAQ;GAE9C,AADA,EAAY,YAAY,4BACxB,EAAY,OAAO;GACnB,IAAM,IAAmB,EAAI,cAAc,MAAM;GAOjD,AANA,EAAiB,YAAY,kCAC7B,EAAiB,cAAc,GAAG,EAAM,kBAAkB,gBAAgB,EAAM,sBAAsB,IAAI,KAAK,OAC/G,EAAY,YAAY,CAAgB,GACpC,EAAM,kBACR,EAAY,iBAAiB,SAAS,EAAM,cAAc,GAE5D,EAAS,YAAY,CAAW;EAClC;EAEA,EAAc,YAAY,CAAQ;CAEpC;CASA,OAPA,EAAO,sBAAsB,SAAU,GAA8B;EAEnE,AADA,IAAiB,GACjB,EAAa;CACf,GAEA,EAAa,GAEN;AACT;AAEA,SAAS,EAAa,GAAmB,GAAgC,IAAM,IAAiB;CAC9F,IAAI,GAAK;EACP,IAAM,IAAM,EAAI,cAAc,KAAK;EAOnC,OANA,EAAI,YAAY,4BAChB,EAAI,MAAM,GACV,EAAI,MAAM,GACV,EAAI,QAAQ,KACZ,EAAI,SAAS,KACb,EAAI,UAAU,SACP;CACT;CAEA,IAAM,IAAW,EAAI,cAAc,KAAK;CAIxC,AAHA,EAAS,YAAY,4CACrB,EAAS,aAAa,QAAQ,KAAK,GACnC,EAAS,aAAa,cAAc,CAAG,GACvC,EAAS,WAAW;CAEpB,IAAM,IAAO,EAAI,cAAc,MAAM;CAKrC,OAJA,EAAK,UAAU,IAAI,iCAAiC,iBAAiB,GACrE,EAAK,YAAY,GACjB,EAAS,YAAY,CAAI,GAElB;AACT;AAEA,SAAgB,EAAqB,GAsBgD;CACnF,IAAM,EACJ,QACA,YACA,aACA,OACA,UACA,aACA,aACA,aACA,YACA,UACA,sBACA,SACA,SACA,sBACA,yBACA,wBACE,GAEA,IAAuB,WAAY,CAAC,GAElC,IAAgB,EAAI,cAAc,SAAS;CAIjD,AAHA,EAAc,YAAY,qDAC1B,EAAc,KAAK,uBACnB,EAAc,aAAa,QAAQ,UAAU,GAC7C,EAAc,aAAa,mBAAmB,mBAAmB;CAEjE,IAAM,IAAgB,EAAc,YAAY,EAAI,cAAc,KAAK,CAAC;CACxE,EAAc,UAAU,IAAI,eAAe,uBAAuB,aAAa;CAE/E,IAAM,IAAsB,EAAI,cAAc,KAAK;CAEnD,AADA,EAAoB,UAAU,IAAI,yBAAyB,aAAa,GACxE,EAAc,YAAY,CAAmB;CAE7C,IAAM,IAAyB,WAAY;EACzC,IAAM,IAAO,EAAoB,YAAY,EAAI,cAAc,KAAK,CAAC;EAErE,OADA,EAAK,UAAU,IAAI,4BAA4B,GACxC;CACT,GAEM,IAAa,WAAY;EAC7B,IAAM,IAAO,EAAuB;EAIpC,OAHA,EAAK,YAAY,EAAK,EAAK,KAAK,GAAG,CAAK,CAAC,GACzC,EAAK,YAAY,EAAK,OAAO,CAAC,GAC9B,EAAK,YAAY,EAAK,EAAK,CAAQ,GAAG,EAAQ,GAAG,CAAC,GAC3C;CACT;CAEA,IAAI,CAAC,GAAU;EACb,IAAI,CAAC,GAEH,EAAA,CAAA,CAAK,YAAY,EAAK,qCAAqC,CAAC;OACvD;GACL,IAAM,IAAO,EAAuB;GAIpC,AAHA,EAAK,YAAY,EAAK,EAAK,KAAK,GAAG,CAAK,CAAC,GACzC,EAAK,YAAY,EAAK,QAAQ,CAAC,GAC/B,EAAK,YAAY,EAAK,EAAK,CAAQ,GAAG,EAAQ,GAAG,CAAC,GAClD,EAAK,YAAY,EAAK,iBAAiB,CAAC;EAC1C;CACF,OAAO,IAAK,GAWV,EAAA,CAAA,CAAK,YAAY,EAAK,2BAA2B,CAAC;MAX9B;EACpB,EAAoB,UAAU,IAAI,gCAAgC;EAElE,IAAM,IAAe,EAAoB,YAAY,EAAI,cAAc,KAAK,CAAC;EAK7E,AAJA,EAAa,UAAU,IAAI,4BAA4B,GACvD,EAAa,YAAY,EAAK,EAAK,CAAQ,GAAG,EAAQ,GAAG,CAAC,GAC1D,EAAa,YAAY,EAAK,SAAS,CAAC,GACxC,EAAa,YAAY,EAAK,EAAK,KAAK,GAAG,CAAK,CAAC,GACjD,EAAa,YAAY,EAAK,iBAAiB,CAAC;CAClD;CAMA,IAD0C,KAAa,CAAC,GACzB;EAC7B,IAAM,IAAe,EAAI,cAAc,MAAM;EAG7C,AAFA,EAAa,YAAY,gCACzB,EAAa,YAAY,EAAK,mBAAmB,CAAC,GAClD,EAAa,YAAY,EAAK,EAAK,CAAQ,GAAG,EAAQ,GAAG,CAAC;EAE1D,IAAM,IAAmB,EACvB,GACA,IAAI,EAAU,GAAI,GAAO,GAAS,KAAW,KAAA,CAAS,GACtD,EAAQ,GACR;GACE,UAAU,CAAC;GACX,eAAgB,IAA4C,KAAA,IAAjC;EAC7B,CACF;EAGA,AAFA,EAAiB,UAAU,IAAI,6BAA6B,GAE5D,EAAc,YAAY,CAAgB;CAC5C;CAEA,IAAI,EAAkB,QAAQ;EAC5B,IAAM,IAAqB,EAAc,YAAY,EAAI,cAAc,OAAO,CAAC;EAC/E,EAAmB,YAAY;EAE/B,IAAM,IAAkB,SAAU,GAAmB;GACnD,OAAO,EAAQ,SAAS,GAAK,EAAG,KAAK,OAAO,GAAG,GAAQ;IACrD;IACA;GACF,CAAC;EACH;EAoBA,AAlBA,IAAuB,WAAY;GACjC,IAAM,IAA0B,CAAC,GAAG,CAAiB,CAAC,CAAC,MAAM,GAAM,MAAU;IAC3E,IAAM,IAAY,EAAM,MAAM,CAAI,KAAK,EAAK,OACtC,IAAa,EAAM,MAAM,CAAK,KAAK,EAAM;IAC/C,OAAO,EAAU,cAAc,CAAU;GAC3C,CAAC;GAED,EAAM,iBACJ,GACA,GACA,GACA,SAAU,GAAK,GAAO;IAEpB,OADoB,EAAgB,CAC7B;GACT,CACF;EACF,GAEA,EAAqB;CACvB;CAEA,OAAO;EAAE,SAAS;EAAe,SAAS;EAAe;CAAqB;AAChF;AAEA,SAAgB,EAAyB,GAO2C;CAClF,IAAM,EAAE,QAAK,YAAS,YAAS,aAAU,yBAAsB,wBAAqB,GAE9E,IAAa,EAAI,cAAc,SAAS;CAI9C,AAHA,EAAW,YAAY,kDACvB,EAAW,KAAK,4BAChB,EAAW,aAAa,QAAQ,UAAU,GAC1C,EAAW,aAAa,mBAAmB,wBAAwB;CAEnE,IAAM,IAAY,EAAW,YAAY,EAAI,cAAc,OAAO,CAAC;CACnE,EAAU,YAAY;CAEtB,IAAM,IAAc,EAAQ,eAAe,GAAK,GAAS,GAAW;EAClE,KAAK;EACL,QAAQ,CAAC,CAAC;EACV,WAAW,EAAG,KAAK,OAAO;EAC1B,MAAM;EAKN,uBAAuB;EACvB;EACA;CACF,CAAC;CAED,AADA,EAAY,UAAU,IAAI,qBAAqB,GAC/C,EAAY,MAAM,YAAY;CAE9B,IAAM,IAAiB,EAAY,cAAc,IAAI,GAC/C,IAAwB,GAAgB,WAAW,IACnD,IAAuB,GAAgB,WAAW,IAClD,IAAuB,EAAI,cAAc,KAAK;CAGpD,IAFA,EAAqB,UAAU,IAAI,+BAA+B,GAE9D,aAAiC,sBAAsB;EACzD,EAAsB,UAAU,IAAI,qCAAqC;EACzE,IAAM,IAAwB,EAAI,cAAc,OAAO;EAMvD,AALA,EAAsB,YAAY,kCAClC,EAAsB,aAAa,QAAQ,cAAc,GAGzD,EAFwD,YAAY,EAAI,cAAc,OAAO,CAC5D,CAAA,CAA0B,YAAY,EAAI,cAAc,IAAI,CAC7F,CAAA,CAAyB,YAAY,CAAqB,GAC1D,EAAqB,YAAY,CAAqB;CACxD,OAAO,IAAI,aAAiC,aAAa;EACvD,OAAO,EAAsB,aAC3B,EAAqB,YAAY,EAAsB,UAAU;EAEnE,EAAsB,OAAO;CAC/B;CAEA,IAAM,IAAoB,EAAqB,iBAAiB,QAAQ;CACxE,IAAI,KAAY,EAAkB,SAAS,GAAG;EAC5C,EAAkB,SAAS,MAAW;GAIpC,AAHA,EAAO,aAAa,SAAS,kBAAkB,GAC/C,EAAO,aAAa,cAAc,kBAAkB,GAEpD,EAD4B,iBAAiB,KAC7C,CAAA,CAAa,SAAS,MAAU;IAE9B,AADA,EAAM,aAAa,SAAS,kBAAkB,GAC9C,EAAM,aAAa,OAAO,kBAAkB;GAC9C,CAAC;EACH,CAAC;EAED,IAAM,IAAoB,EAAI,cAAc,KAAK;EAEjD,AADA,EAAkB,YAAY,2EAC9B,EAAkB,YAAY,CAAoB;EAClD,IAAM,IAAW,EAAI,cAAc,MAAM;EAIzC,AAHA,EAAS,YAAY,8BACrB,EAAS,cAAc,+CACvB,EAAkB,YAAY,CAAQ,GACtC,EAAW,QAAQ,CAAiB;CACtC;CAEA,AAAI,aAAgC,yBAClC,EAAqB,UAAU;CAGjC,IAAM,IAAoB,EAAY,cAAc,UAAU;CAK9D,OAJI,aAA6B,oBAC/B,EAAkB,UAAU,IAAI,qBAAqB,GAGhD;EAAE,SAAS;EAAY;EAAW;CAAY;AACvD;AAEA,SAAgB,EAAuB,GAK2C;CAChF,IAAM,EAAE,QAAK,WAAQ,yBAAsB,wBAAqB,GAE1D,IAAkB,EAAI,cAAc,SAAS;CAInD,AAHA,EAAgB,YAAY,+CAC5B,EAAgB,KAAK,yBACrB,EAAgB,aAAa,QAAQ,UAAU,GAC/C,EAAgB,aAAa,mBAAmB,qBAAqB;CAErE,IAAM,IAAkB,EAAgB,YAAY,EAAI,cAAc,KAAK,CAAC;CAC5E,EAAgB,UAAU,IAAI,eAAe,yBAAyB,aAAa;CAEnF,IAAM,IAAO,EAAgB,YAAY,EAAI,cAAc,GAAG,CAAC;CAE/D,AADA,EAAK,YAAY,yBACjB,EAAK,cAAc;CAEnB,IAAM,IAAqB,SAAU,GAAe,GAAqB,GAAmB;EAC1F,IAAM,IAAQ,EAAgB,YAAY,EAAI,cAAc,SAAS,CAAC;EACtE,EAAM,UAAU,IAAI,0BAA0B,aAAa;EAE3D,IAAM,IAAS,EAAM,YAAY,EAAI,cAAc,KAAK,CAAC;EACzD,EAAO,YAAY;EAEnB,IAAM,IAAU,EAAO,YAAY,EAAI,cAAc,IAAI,CAAC;EAE1D,AADA,EAAQ,YAAY,gCACpB,EAAQ,cAAc;EAEtB,IAAM,IAAQ,EAAO,YAAY,EAAI,cAAc,GAAG,CAAC;EAEvD,AADA,EAAM,YAAY,sCAClB,EAAM,cAAc;EAEpB,IAAM,IAAQ,EAAM,YAAY,EAAI,cAAc,GAAG,CAAC;EAEtD,AADA,EAAM,YAAY,0BAClB,EAAM,cAAc;EAEpB,IAAM,IAAQ,EAAM,YAAY,EAAI,cAAc,OAAO,CAAC;EAG1D,OAFA,EAAM,YAAY,8EAEX;GAAE;GAAO;EAAM;CACxB,GAEM,IAAgB,EACpB,qBACA,2EACA,kEACF,GACM,IAAe,EACnB,yBACA,2DACA,gDACF,GAEM,IAAkB,SAAU,GAAmB;EACnD,OAAO,EAAQ,SAAS,GAAK,EAAG,KAAK,OAAO,GAAG,GAAQ;GACrD;GACA;EACF,CAAC;CACH,GAEM,IAAY,SAAU,GAAoB;EAC9C,OAAO,CAAC,GAAG,CAAK,CAAC,CAAC,MAAM,GAAM,MAAU;GACtC,IAAM,IAAY,EAAM,MAAM,CAAI,KAAK,EAAK,OACtC,IAAa,EAAM,MAAM,CAAK,KAAK,EAAM;GAC/C,OAAO,EAAU,cAAc,CAAU;EAC3C,CAAC;CACH,GAEM,IAAmB,SACvB,GACA,GACA;EACA,IAAM,IAAc,EAAU,CAAK;EAInC,AAHA,EAAM,MAAM,SAAS,EAAY,SAAS,GAC1C,EAAM,MAAM,SAAS,EAAY,WAAW,GAE5C,EAAM,iBACJ,EAAM,OACN,GACA,GACA,SAAU,GAAM,GAAO;GACrB,OAAO,EAAgB,CAAK;EAC9B,CACF;CACF,GAEM,IAAkB,SAAU,GAA8B;EAE9D,AADA,EAAiB,GAAe,EAAW,QAAQ,GACnD,EAAiB,GAAc,EAAW,WAAW;CACvD;CAIA,OAFA,EAAgB,CAAM,GAEf;EAAE,SAAS;EAAiB;CAAgB;AACrD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
require("lit-html");
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import "lit-html";
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
let e=require("solid-ui");function t(e){let t=new Set,n=[];for(let r of e){let e=r?.value;!e||t.has(e)||(t.add(e),n.push(r))}return n}function n(n,r){let i=t(n.each(r,e.ns.foaf(`knows`))),a=t(n.each(void 0,e.ns.foaf(`knows`),r)),o=[],s=[],c=[];for(let e of i)a.some(t=>t.sameTerm(e))?o.push(e):s.push(e);for(let e of a)i.some(t=>t.sameTerm(e))||c.push(e);return{acquaintances:i,confirmed:o,unconfirmed:s,requests:c}}async function r(t,r){let i=t.session.store,a=i.fetcher;if(!a||typeof a.load!=`function`)return n(i,r);try{await a.load(r.doc())}catch{}let o=n(i,r),s=new Map;s.set(r.doc().value,r.doc());for(let e of[...o.acquaintances,...o.requests])s.set(e.doc().value,e.doc());let c=i.statementsMatching(void 0,e.ns.foaf(`knows`),r);for(let e of c){let t=e.why;t?.value&&s.set(t.value,t)}for(let e of s.values())try{await a.load(e)}catch{}return n(i,r)}exports.loadFriendshipTriage=r,exports.triageFriends=n;
|
|
2
|
+
//# sourceMappingURL=triage.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"triage.cjs.js","names":[],"sources":["../../src/social/triage.ts"],"sourcesContent":["import { DataBrowserContext } from 'pane-registry'\nimport { IndexedFormula, NamedNode } from 'rdflib'\nimport { ns } from 'solid-ui'\n\ntype FriendshipStore = IndexedFormula & {\n fetcher?: {\n load?: (target: NamedNode | string) => Promise<unknown>\n }\n}\n\nexport interface FriendshipTriage {\n acquaintances: NamedNode[]\n confirmed: NamedNode[]\n unconfirmed: NamedNode[]\n requests: NamedNode[]\n}\n\nfunction uniqueNamedNodes (nodes: NamedNode[]): NamedNode[] {\n const seen = new Set<string>()\n const unique: NamedNode[] = []\n\n for (const node of nodes) {\n const key = node?.value\n if (!key || seen.has(key)) continue\n seen.add(key)\n unique.push(node)\n }\n\n return unique\n}\n\nexport function triageFriends (store: FriendshipStore, subject: NamedNode): FriendshipTriage {\n const outgoingFriends = uniqueNamedNodes(store.each(subject, ns.foaf('knows')) as NamedNode[])\n const incomingFriends = uniqueNamedNodes(\n store.each(undefined, ns.foaf('knows'), subject) as NamedNode[]\n )\n const confirmed: NamedNode[] = []\n const unconfirmed: NamedNode[] = []\n const requests: NamedNode[] = []\n\n for (const friend of outgoingFriends) {\n const isConfirmed = incomingFriends.some(incomingFriend => incomingFriend.sameTerm(friend))\n if (isConfirmed) {\n confirmed.push(friend)\n } else {\n unconfirmed.push(friend)\n }\n }\n\n for (const friend of incomingFriends) {\n const isAlreadyOutgoing = outgoingFriends.some(outgoingFriend => outgoingFriend.sameTerm(friend))\n if (!isAlreadyOutgoing) {\n requests.push(friend)\n }\n }\n\n return {\n acquaintances: outgoingFriends,\n confirmed,\n unconfirmed,\n requests\n }\n}\n\nexport async function loadFriendshipTriage (\n context: DataBrowserContext,\n subject: NamedNode\n): Promise<FriendshipTriage> {\n const store = context.session.store as FriendshipStore\n const fetcher = store.fetcher\n\n if (!fetcher || typeof fetcher.load !== 'function') {\n return triageFriends(store, subject)\n }\n\n try {\n await fetcher.load(subject.doc())\n } catch {\n // Continue with the store snapshot we already have.\n }\n\n const initialTriage = triageFriends(store, subject)\n const documentsToLoad = new Map<string, NamedNode | string>()\n\n documentsToLoad.set(subject.doc().value, subject.doc())\n\n for (const friend of [...initialTriage.acquaintances, ...initialTriage.requests]) {\n documentsToLoad.set(friend.doc().value, friend.doc())\n }\n\n const incomingStatements = store.statementsMatching(undefined, ns.foaf('knows'), subject)\n for (const statement of incomingStatements) {\n const why = statement.why as NamedNode | undefined\n if (why?.value) {\n documentsToLoad.set(why.value, why)\n }\n }\n\n for (const target of documentsToLoad.values()) {\n try {\n await fetcher.load(target)\n } catch {\n // Keep partial results when one profile document fails to load.\n }\n }\n\n return triageFriends(store, subject)\n}\n"],"mappings":"0BAiBA,SAAS,EAAkB,EAAiC,CAC1D,IAAM,EAAO,IAAI,IACX,EAAsB,CAAC,EAE7B,IAAK,IAAM,KAAQ,EAAO,CACxB,IAAM,EAAM,GAAM,MACd,CAAC,GAAO,EAAK,IAAI,CAAG,IACxB,EAAK,IAAI,CAAG,EACZ,EAAO,KAAK,CAAI,EAClB,CAEA,OAAO,CACT,CAEA,SAAgB,EAAe,EAAwB,EAAsC,CAC3F,IAAM,EAAkB,EAAiB,EAAM,KAAK,EAAS,EAAA,GAAG,KAAK,OAAO,CAAC,CAAgB,EACvF,EAAkB,EACtB,EAAM,KAAK,IAAA,GAAW,EAAA,GAAG,KAAK,OAAO,EAAG,CAAO,CACjD,EACM,EAAyB,CAAC,EAC1B,EAA2B,CAAC,EAC5B,EAAwB,CAAC,EAE/B,IAAK,IAAM,KAAU,EACC,EAAgB,KAAK,GAAkB,EAAe,SAAS,CAAM,CACrF,EACF,EAAU,KAAK,CAAM,EAErB,EAAY,KAAK,CAAM,EAI3B,IAAK,IAAM,KAAU,EACO,EAAgB,KAAK,GAAkB,EAAe,SAAS,CAAM,CAC1F,GACH,EAAS,KAAK,CAAM,EAIxB,MAAO,CACL,cAAe,EACf,YACA,cACA,UACF,CACF,CAEA,eAAsB,EACpB,EACA,EAC2B,CAC3B,IAAM,EAAQ,EAAQ,QAAQ,MACxB,EAAU,EAAM,QAEtB,GAAI,CAAC,GAAW,OAAO,EAAQ,MAAS,WACtC,OAAO,EAAc,EAAO,CAAO,EAGrC,GAAI,CACF,MAAM,EAAQ,KAAK,EAAQ,IAAI,CAAC,CAClC,MAAQ,CAER,CAEA,IAAM,EAAgB,EAAc,EAAO,CAAO,EAC5C,EAAkB,IAAI,IAE5B,EAAgB,IAAI,EAAQ,IAAI,CAAC,CAAC,MAAO,EAAQ,IAAI,CAAC,EAEtD,IAAK,IAAM,IAAU,CAAC,GAAG,EAAc,cAAe,GAAG,EAAc,QAAQ,EAC7E,EAAgB,IAAI,EAAO,IAAI,CAAC,CAAC,MAAO,EAAO,IAAI,CAAC,EAGtD,IAAM,EAAqB,EAAM,mBAAmB,IAAA,GAAW,EAAA,GAAG,KAAK,OAAO,EAAG,CAAO,EACxF,IAAK,IAAM,KAAa,EAAoB,CAC1C,IAAM,EAAM,EAAU,IAClB,GAAK,OACP,EAAgB,IAAI,EAAI,MAAO,CAAG,CAEtC,CAEA,IAAK,IAAM,KAAU,EAAgB,OAAO,EAC1C,GAAI,CACF,MAAM,EAAQ,KAAK,CAAM,CAC3B,MAAQ,CAER,CAGF,OAAO,EAAc,EAAO,CAAO,CACrC"}
|
package/dist/social/triage.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { DataBrowserContext } from 'pane-registry';
|
|
2
|
-
import { IndexedFormula, NamedNode } from 'rdflib';
|
|
1
|
+
import { DataBrowserContext } from '../../node_modules/pane-registry';
|
|
2
|
+
import { IndexedFormula, NamedNode } from '../../node_modules/rdflib';
|
|
3
3
|
type FriendshipStore = IndexedFormula & {
|
|
4
4
|
fetcher?: {
|
|
5
5
|
load?: (target: NamedNode | string) => Promise<unknown>;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { ns as e } from "solid-ui";
|
|
2
|
+
//#region src/social/triage.ts
|
|
3
|
+
function t(e) {
|
|
4
|
+
let t = /* @__PURE__ */ new Set(), n = [];
|
|
5
|
+
for (let r of e) {
|
|
6
|
+
let e = r?.value;
|
|
7
|
+
!e || t.has(e) || (t.add(e), n.push(r));
|
|
8
|
+
}
|
|
9
|
+
return n;
|
|
10
|
+
}
|
|
11
|
+
function n(n, r) {
|
|
12
|
+
let i = t(n.each(r, e.foaf("knows"))), a = t(n.each(void 0, e.foaf("knows"), r)), o = [], s = [], c = [];
|
|
13
|
+
for (let e of i) a.some((t) => t.sameTerm(e)) ? o.push(e) : s.push(e);
|
|
14
|
+
for (let e of a) i.some((t) => t.sameTerm(e)) || c.push(e);
|
|
15
|
+
return {
|
|
16
|
+
acquaintances: i,
|
|
17
|
+
confirmed: o,
|
|
18
|
+
unconfirmed: s,
|
|
19
|
+
requests: c
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
async function r(t, r) {
|
|
23
|
+
let i = t.session.store, a = i.fetcher;
|
|
24
|
+
if (!a || typeof a.load != "function") return n(i, r);
|
|
25
|
+
try {
|
|
26
|
+
await a.load(r.doc());
|
|
27
|
+
} catch {}
|
|
28
|
+
let o = n(i, r), s = /* @__PURE__ */ new Map();
|
|
29
|
+
s.set(r.doc().value, r.doc());
|
|
30
|
+
for (let e of [...o.acquaintances, ...o.requests]) s.set(e.doc().value, e.doc());
|
|
31
|
+
let c = i.statementsMatching(void 0, e.foaf("knows"), r);
|
|
32
|
+
for (let e of c) {
|
|
33
|
+
let t = e.why;
|
|
34
|
+
t?.value && s.set(t.value, t);
|
|
35
|
+
}
|
|
36
|
+
for (let e of s.values()) try {
|
|
37
|
+
await a.load(e);
|
|
38
|
+
} catch {}
|
|
39
|
+
return n(i, r);
|
|
40
|
+
}
|
|
41
|
+
//#endregion
|
|
42
|
+
export { r as loadFriendshipTriage, n as triageFriends };
|
|
43
|
+
|
|
44
|
+
//# sourceMappingURL=triage.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"triage.esm.js","names":[],"sources":["../../src/social/triage.ts"],"sourcesContent":["import { DataBrowserContext } from 'pane-registry'\nimport { IndexedFormula, NamedNode } from 'rdflib'\nimport { ns } from 'solid-ui'\n\ntype FriendshipStore = IndexedFormula & {\n fetcher?: {\n load?: (target: NamedNode | string) => Promise<unknown>\n }\n}\n\nexport interface FriendshipTriage {\n acquaintances: NamedNode[]\n confirmed: NamedNode[]\n unconfirmed: NamedNode[]\n requests: NamedNode[]\n}\n\nfunction uniqueNamedNodes (nodes: NamedNode[]): NamedNode[] {\n const seen = new Set<string>()\n const unique: NamedNode[] = []\n\n for (const node of nodes) {\n const key = node?.value\n if (!key || seen.has(key)) continue\n seen.add(key)\n unique.push(node)\n }\n\n return unique\n}\n\nexport function triageFriends (store: FriendshipStore, subject: NamedNode): FriendshipTriage {\n const outgoingFriends = uniqueNamedNodes(store.each(subject, ns.foaf('knows')) as NamedNode[])\n const incomingFriends = uniqueNamedNodes(\n store.each(undefined, ns.foaf('knows'), subject) as NamedNode[]\n )\n const confirmed: NamedNode[] = []\n const unconfirmed: NamedNode[] = []\n const requests: NamedNode[] = []\n\n for (const friend of outgoingFriends) {\n const isConfirmed = incomingFriends.some(incomingFriend => incomingFriend.sameTerm(friend))\n if (isConfirmed) {\n confirmed.push(friend)\n } else {\n unconfirmed.push(friend)\n }\n }\n\n for (const friend of incomingFriends) {\n const isAlreadyOutgoing = outgoingFriends.some(outgoingFriend => outgoingFriend.sameTerm(friend))\n if (!isAlreadyOutgoing) {\n requests.push(friend)\n }\n }\n\n return {\n acquaintances: outgoingFriends,\n confirmed,\n unconfirmed,\n requests\n }\n}\n\nexport async function loadFriendshipTriage (\n context: DataBrowserContext,\n subject: NamedNode\n): Promise<FriendshipTriage> {\n const store = context.session.store as FriendshipStore\n const fetcher = store.fetcher\n\n if (!fetcher || typeof fetcher.load !== 'function') {\n return triageFriends(store, subject)\n }\n\n try {\n await fetcher.load(subject.doc())\n } catch {\n // Continue with the store snapshot we already have.\n }\n\n const initialTriage = triageFriends(store, subject)\n const documentsToLoad = new Map<string, NamedNode | string>()\n\n documentsToLoad.set(subject.doc().value, subject.doc())\n\n for (const friend of [...initialTriage.acquaintances, ...initialTriage.requests]) {\n documentsToLoad.set(friend.doc().value, friend.doc())\n }\n\n const incomingStatements = store.statementsMatching(undefined, ns.foaf('knows'), subject)\n for (const statement of incomingStatements) {\n const why = statement.why as NamedNode | undefined\n if (why?.value) {\n documentsToLoad.set(why.value, why)\n }\n }\n\n for (const target of documentsToLoad.values()) {\n try {\n await fetcher.load(target)\n } catch {\n // Keep partial results when one profile document fails to load.\n }\n }\n\n return triageFriends(store, subject)\n}\n"],"mappings":";;AAiBA,SAAS,EAAkB,GAAiC;CAC1D,IAAM,oBAAO,IAAI,IAAY,GACvB,IAAsB,CAAC;CAE7B,KAAK,IAAM,KAAQ,GAAO;EACxB,IAAM,IAAM,GAAM;EACd,CAAC,KAAO,EAAK,IAAI,CAAG,MACxB,EAAK,IAAI,CAAG,GACZ,EAAO,KAAK,CAAI;CAClB;CAEA,OAAO;AACT;AAEA,SAAgB,EAAe,GAAwB,GAAsC;CAC3F,IAAM,IAAkB,EAAiB,EAAM,KAAK,GAAS,EAAG,KAAK,OAAO,CAAC,CAAgB,GACvF,IAAkB,EACtB,EAAM,KAAK,KAAA,GAAW,EAAG,KAAK,OAAO,GAAG,CAAO,CACjD,GACM,IAAyB,CAAC,GAC1B,IAA2B,CAAC,GAC5B,IAAwB,CAAC;CAE/B,KAAK,IAAM,KAAU,GAEnB,AADoB,EAAgB,MAAK,MAAkB,EAAe,SAAS,CAAM,CACrF,IACF,EAAU,KAAK,CAAM,IAErB,EAAY,KAAK,CAAM;CAI3B,KAAK,IAAM,KAAU,GAEnB,AAD0B,EAAgB,MAAK,MAAkB,EAAe,SAAS,CAAM,CAC1F,KACH,EAAS,KAAK,CAAM;CAIxB,OAAO;EACL,eAAe;EACf;EACA;EACA;CACF;AACF;AAEA,eAAsB,EACpB,GACA,GAC2B;CAC3B,IAAM,IAAQ,EAAQ,QAAQ,OACxB,IAAU,EAAM;CAEtB,IAAI,CAAC,KAAW,OAAO,EAAQ,QAAS,YACtC,OAAO,EAAc,GAAO,CAAO;CAGrC,IAAI;EACF,MAAM,EAAQ,KAAK,EAAQ,IAAI,CAAC;CAClC,QAAQ,CAER;CAEA,IAAM,IAAgB,EAAc,GAAO,CAAO,GAC5C,oBAAkB,IAAI,IAAgC;CAE5D,EAAgB,IAAI,EAAQ,IAAI,CAAC,CAAC,OAAO,EAAQ,IAAI,CAAC;CAEtD,KAAK,IAAM,KAAU,CAAC,GAAG,EAAc,eAAe,GAAG,EAAc,QAAQ,GAC7E,EAAgB,IAAI,EAAO,IAAI,CAAC,CAAC,OAAO,EAAO,IAAI,CAAC;CAGtD,IAAM,IAAqB,EAAM,mBAAmB,KAAA,GAAW,EAAG,KAAK,OAAO,GAAG,CAAO;CACxF,KAAK,IAAM,KAAa,GAAoB;EAC1C,IAAM,IAAM,EAAU;EACtB,AAAI,GAAK,SACP,EAAgB,IAAI,EAAI,OAAO,CAAG;CAEtC;CAEA,KAAK,IAAM,KAAU,EAAgB,OAAO,GAC1C,IAAI;EACF,MAAM,EAAQ,KAAK,CAAM;CAC3B,QAAQ,CAER;CAGF,OAAO,EAAc,GAAO,CAAO;AACrC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
let e=require("solid-ui");var t={icon:e.icons.iconBase+`noun_688606.svg`,name:`tabbed`,audience:[e.ns.solid(`PowerUser`)],label:(t,n)=>{let r=n.session.store.findTypeURIs(t);return e.ns.meeting(`Cluster`).uri in r?`Tabbed`:null},render:(t,n)=>{let r=n.dom,i=n.session.store,a=r.createElement(`div`);return(async()=>{if(!i.fetcher)throw Error(`Store has no fetcher`);await i.fetcher.load(t),a.appendChild(e.tabs.tabWidget({dom:r,subject:t,predicate:i.any(t,e.ns.meeting(`predicate`))||e.ns.meeting(`toolList`),ordered:!0,orientation:i.anyValue(t,e.ns.meeting(`orientation`))||`0`,renderMain:(e,t)=>{e.innerHTML=``;let r=e.appendChild(n.dom.createElement(`table`));n.getOutliner(n.dom).GotoSubject(t,!0,null,!1,void 0,r)},renderTab:(r,a)=>{let o=i.the(t,e.ns.meeting(`predicate`));r.appendChild(e.widgets.personTR(n.dom,o,a,{}))},backgroundColor:i.anyValue(t,e.ns.ui(`backgroundColor`))||`#ddddcc`}))})(),a}};exports.default=t;
|
|
2
|
+
//# sourceMappingURL=tabbedPane.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tabbedPane.cjs.js","names":[],"sources":["../../src/tabbed/tabbedPane.ts"],"sourcesContent":["/* Tabbed view of anything\n **\n ** data-driven\n **\n */\nimport { Store } from 'rdflib'\nimport { PaneDefinition } from 'pane-registry'\nimport { icons, ns, tabs, widgets } from 'solid-ui'\n\nconst TabbedPane: PaneDefinition = {\n icon: icons.iconBase + 'noun_688606.svg',\n\n name: 'tabbed',\n\n audience: [ns.solid('PowerUser')],\n\n // Does the subject deserve this pane?\n label: (subject, context) => {\n // @ts-ignore\n const kb = context.session.store as Store\n const typeURIs = kb.findTypeURIs(subject)\n if (ns.meeting('Cluster').uri in typeURIs) {\n return 'Tabbed'\n }\n return null\n },\n\n render: (subject, context) => {\n const dom = context.dom\n // @ts-ignore\n const store = context.session.store as Store\n const div = dom.createElement('div')\n\n ;(async () => {\n if (!store.fetcher) {\n throw new Error('Store has no fetcher')\n }\n await store.fetcher.load(subject)\n\n div.appendChild(tabs.tabWidget({\n dom,\n subject,\n predicate: store.any(subject, ns.meeting('predicate')) || ns.meeting('toolList'),\n ordered: true,\n orientation: ((store as Store).anyValue(subject, ns.meeting('orientation')) || '0') as ('0' | '1' | '2' | '3'),\n renderMain: (containerDiv, item) => {\n containerDiv.innerHTML = ''\n const table = containerDiv.appendChild(context.dom.createElement('table'))\n ;(context.getOutliner(context.dom) as any).GotoSubject(item, true, null, false, undefined, table)\n },\n renderTab: (containerDiv, item) => {\n const predicate = store.the(subject, ns.meeting('predicate'))\n containerDiv.appendChild(widgets.personTR(context.dom, predicate, item, {}))\n },\n backgroundColor: store.anyValue(subject, ns.ui('backgroundColor')) || '#ddddcc'\n }))\n })()\n return div\n }\n}\n\nexport default TabbedPane\n"],"mappings":"0BASA,IAAM,EAA6B,CACjC,KAAM,EAAA,MAAM,SAAW,kBAEvB,KAAM,SAEN,SAAU,CAAC,EAAA,GAAG,MAAM,WAAW,CAAC,EAGhC,OAAQ,EAAS,IAAY,CAG3B,IAAM,EADK,EAAQ,QAAQ,MACP,aAAa,CAAO,EAIxC,OAHI,EAAA,GAAG,QAAQ,SAAS,CAAC,CAAC,OAAO,EACxB,SAEF,IACT,EAEA,QAAS,EAAS,IAAY,CAC5B,IAAM,EAAM,EAAQ,IAEd,EAAQ,EAAQ,QAAQ,MACxB,EAAM,EAAI,cAAc,KAAK,EA0BnC,OAxBE,SAAY,CACZ,GAAI,CAAC,EAAM,QACT,MAAU,MAAM,sBAAsB,EAExC,MAAM,EAAM,QAAQ,KAAK,CAAO,EAEhC,EAAI,YAAY,EAAA,KAAK,UAAU,CAC7B,MACA,UACA,UAAW,EAAM,IAAI,EAAS,EAAA,GAAG,QAAQ,WAAW,CAAC,GAAK,EAAA,GAAG,QAAQ,UAAU,EAC/E,QAAS,GACT,YAAe,EAAgB,SAAS,EAAS,EAAA,GAAG,QAAQ,aAAa,CAAC,GAAK,IAC/E,YAAa,EAAc,IAAS,CAClC,EAAa,UAAY,GACzB,IAAM,EAAQ,EAAa,YAAY,EAAQ,IAAI,cAAc,OAAO,CAAC,EACxE,EAAS,YAAY,EAAQ,GAAG,CAAC,CAAS,YAAY,EAAM,GAAM,KAAM,GAAO,IAAA,GAAW,CAAK,CAClG,EACA,WAAY,EAAc,IAAS,CACjC,IAAM,EAAY,EAAM,IAAI,EAAS,EAAA,GAAG,QAAQ,WAAW,CAAC,EAC5D,EAAa,YAAY,EAAA,QAAQ,SAAS,EAAQ,IAAK,EAAW,EAAM,CAAC,CAAC,CAAC,CAC7E,EACA,gBAAiB,EAAM,SAAS,EAAS,EAAA,GAAG,GAAG,iBAAiB,CAAC,GAAK,SACxE,CAAC,CAAC,CACJ,EAAA,CAAG,EACI,CACT,CACF"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { icons as e, ns as t, tabs as n, widgets as r } from "solid-ui";
|
|
2
|
+
//#region src/tabbed/tabbedPane.ts
|
|
3
|
+
var i = {
|
|
4
|
+
icon: e.iconBase + "noun_688606.svg",
|
|
5
|
+
name: "tabbed",
|
|
6
|
+
audience: [t.solid("PowerUser")],
|
|
7
|
+
label: (e, n) => {
|
|
8
|
+
let r = n.session.store.findTypeURIs(e);
|
|
9
|
+
return t.meeting("Cluster").uri in r ? "Tabbed" : null;
|
|
10
|
+
},
|
|
11
|
+
render: (e, i) => {
|
|
12
|
+
let a = i.dom, o = i.session.store, s = a.createElement("div");
|
|
13
|
+
return (async () => {
|
|
14
|
+
if (!o.fetcher) throw Error("Store has no fetcher");
|
|
15
|
+
await o.fetcher.load(e), s.appendChild(n.tabWidget({
|
|
16
|
+
dom: a,
|
|
17
|
+
subject: e,
|
|
18
|
+
predicate: o.any(e, t.meeting("predicate")) || t.meeting("toolList"),
|
|
19
|
+
ordered: !0,
|
|
20
|
+
orientation: o.anyValue(e, t.meeting("orientation")) || "0",
|
|
21
|
+
renderMain: (e, t) => {
|
|
22
|
+
e.innerHTML = "";
|
|
23
|
+
let n = e.appendChild(i.dom.createElement("table"));
|
|
24
|
+
i.getOutliner(i.dom).GotoSubject(t, !0, null, !1, void 0, n);
|
|
25
|
+
},
|
|
26
|
+
renderTab: (n, a) => {
|
|
27
|
+
let s = o.the(e, t.meeting("predicate"));
|
|
28
|
+
n.appendChild(r.personTR(i.dom, s, a, {}));
|
|
29
|
+
},
|
|
30
|
+
backgroundColor: o.anyValue(e, t.ui("backgroundColor")) || "#ddddcc"
|
|
31
|
+
}));
|
|
32
|
+
})(), s;
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
//#endregion
|
|
36
|
+
export { i as default };
|
|
37
|
+
|
|
38
|
+
//# sourceMappingURL=tabbedPane.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tabbedPane.esm.js","names":[],"sources":["../../src/tabbed/tabbedPane.ts"],"sourcesContent":["/* Tabbed view of anything\n **\n ** data-driven\n **\n */\nimport { Store } from 'rdflib'\nimport { PaneDefinition } from 'pane-registry'\nimport { icons, ns, tabs, widgets } from 'solid-ui'\n\nconst TabbedPane: PaneDefinition = {\n icon: icons.iconBase + 'noun_688606.svg',\n\n name: 'tabbed',\n\n audience: [ns.solid('PowerUser')],\n\n // Does the subject deserve this pane?\n label: (subject, context) => {\n // @ts-ignore\n const kb = context.session.store as Store\n const typeURIs = kb.findTypeURIs(subject)\n if (ns.meeting('Cluster').uri in typeURIs) {\n return 'Tabbed'\n }\n return null\n },\n\n render: (subject, context) => {\n const dom = context.dom\n // @ts-ignore\n const store = context.session.store as Store\n const div = dom.createElement('div')\n\n ;(async () => {\n if (!store.fetcher) {\n throw new Error('Store has no fetcher')\n }\n await store.fetcher.load(subject)\n\n div.appendChild(tabs.tabWidget({\n dom,\n subject,\n predicate: store.any(subject, ns.meeting('predicate')) || ns.meeting('toolList'),\n ordered: true,\n orientation: ((store as Store).anyValue(subject, ns.meeting('orientation')) || '0') as ('0' | '1' | '2' | '3'),\n renderMain: (containerDiv, item) => {\n containerDiv.innerHTML = ''\n const table = containerDiv.appendChild(context.dom.createElement('table'))\n ;(context.getOutliner(context.dom) as any).GotoSubject(item, true, null, false, undefined, table)\n },\n renderTab: (containerDiv, item) => {\n const predicate = store.the(subject, ns.meeting('predicate'))\n containerDiv.appendChild(widgets.personTR(context.dom, predicate, item, {}))\n },\n backgroundColor: store.anyValue(subject, ns.ui('backgroundColor')) || '#ddddcc'\n }))\n })()\n return div\n }\n}\n\nexport default TabbedPane\n"],"mappings":";;AASA,IAAM,IAA6B;CACjC,MAAM,EAAM,WAAW;CAEvB,MAAM;CAEN,UAAU,CAAC,EAAG,MAAM,WAAW,CAAC;CAGhC,QAAQ,GAAS,MAAY;EAG3B,IAAM,IADK,EAAQ,QAAQ,MACP,aAAa,CAAO;EAIxC,OAHI,EAAG,QAAQ,SAAS,CAAC,CAAC,OAAO,IACxB,WAEF;CACT;CAEA,SAAS,GAAS,MAAY;EAC5B,IAAM,IAAM,EAAQ,KAEd,IAAQ,EAAQ,QAAQ,OACxB,IAAM,EAAI,cAAc,KAAK;EA0BnC,QAxBE,YAAY;GACZ,IAAI,CAAC,EAAM,SACT,MAAU,MAAM,sBAAsB;GAIxC,AAFA,MAAM,EAAM,QAAQ,KAAK,CAAO,GAEhC,EAAI,YAAY,EAAK,UAAU;IAC7B;IACA;IACA,WAAW,EAAM,IAAI,GAAS,EAAG,QAAQ,WAAW,CAAC,KAAK,EAAG,QAAQ,UAAU;IAC/E,SAAS;IACT,aAAe,EAAgB,SAAS,GAAS,EAAG,QAAQ,aAAa,CAAC,KAAK;IAC/E,aAAa,GAAc,MAAS;KAClC,EAAa,YAAY;KACzB,IAAM,IAAQ,EAAa,YAAY,EAAQ,IAAI,cAAc,OAAO,CAAC;KACxE,EAAS,YAAY,EAAQ,GAAG,CAAC,CAAS,YAAY,GAAM,IAAM,MAAM,IAAO,KAAA,GAAW,CAAK;IAClG;IACA,YAAY,GAAc,MAAS;KACjC,IAAM,IAAY,EAAM,IAAI,GAAS,EAAG,QAAQ,WAAW,CAAC;KAC5D,EAAa,YAAY,EAAQ,SAAS,EAAQ,KAAK,GAAW,GAAM,CAAC,CAAC,CAAC;IAC7E;IACA,iBAAiB,EAAM,SAAS,GAAS,EAAG,GAAG,iBAAiB,CAAC,KAAK;GACxE,CAAC,CAAC;EACJ,EAAA,CAAG,GACI;CACT;AACF"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require("./_virtual/_rolldown/runtime.cjs.js");let t=require("solid-ui");t=e.__toESM(t);var n={icon:t.icons.originalIconBase+`table.png`,name:`tableOfClass`,label:function(e,n){let r=n.session.store;if(!r.any(void 0,t.ns.rdf(`type`),e))return null;let i=r.statementsMatching(void 0,t.ns.rdf(`type`),e).length;return i===0||i>15?null:t.utils.label(e)+` table`},render:function(e,n){let r=n.dom,i=r.createElement(`div`);return i.setAttribute(`class`,`tablePane`),i.appendChild(t.table(r,{tableClass:e})),i}};exports.tableViewPane=n;
|
|
2
|
+
//# sourceMappingURL=tableViewPane.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tableViewPane.cjs.js","names":["UI"],"sources":["../src/tableViewPane.js"],"sourcesContent":["// Format an array of RDF statements as an HTML table.\n//\n// This can operate in one of three modes: when the class of object is given\n// or when the source document from which data is taken is given,\n// or if a prepared query object is given.\n// (In principle it could operate with neither class nor document\n// given but typically\n// there would be too much data.)\n// When the tableClass is not given, it looks for common classes in the data,\n// and gives the user the option.\n//\n// 2008 Written, Ilaria Liccardi\n// 2014 core functionality now in common/table.js -timbl\n\n// ///////////////////////////////////////////////////////////////////\n\n// Table view pane -- view of a class as a table of properties of class members\nimport * as UI from 'solid-ui'\n\nexport const tableViewPane = {\n icon: UI.icons.originalIconBase + 'table.png',\n\n name: 'tableOfClass',\n\n label: function (subject, context) {\n const store = context.session.store\n // if (!store.holds(subject, UI.ns.rdf('type'),UI.ns.rdfs('Class'))) return null\n if (!store.any(undefined, UI.ns.rdf('type'), subject)) {\n return null\n }\n const n = store.statementsMatching(undefined, UI.ns.rdf('type'), subject)\n .length\n if (n === 0) {\n // None, suppress pane\n return null\n }\n if (n > 15) {\n // @@ At the moment this pane can be slow with too many @@ fixme by using limits\n return null\n }\n return UI.utils.label(subject) + ' table'\n },\n\n render: function (subject, context) {\n const myDocument = context.dom\n const div = myDocument.createElement('div')\n div.setAttribute('class', 'tablePane')\n div.appendChild(UI.table(myDocument, { tableClass: subject }))\n return div\n }\n}\n"],"mappings":"gGAmBA,IAAa,EAAgB,CAC3B,KAAMA,EAAG,MAAM,iBAAmB,YAElC,KAAM,eAEN,MAAO,SAAU,EAAS,EAAS,CACjC,IAAM,EAAQ,EAAQ,QAAQ,MAE9B,GAAI,CAAC,EAAM,IAAI,IAAA,GAAWA,EAAG,GAAG,IAAI,MAAM,EAAG,CAAO,EAClD,OAAO,KAET,IAAM,EAAI,EAAM,mBAAmB,IAAA,GAAWA,EAAG,GAAG,IAAI,MAAM,EAAG,CAAO,CAAC,CACtE,OASH,OARI,IAAM,GAIN,EAAI,GAEC,KAEFA,EAAG,MAAM,MAAM,CAAO,EAAI,QACnC,EAEA,OAAQ,SAAU,EAAS,EAAS,CAClC,IAAM,EAAa,EAAQ,IACrB,EAAM,EAAW,cAAc,KAAK,EAG1C,OAFA,EAAI,aAAa,QAAS,WAAW,EACrC,EAAI,YAAYA,EAAG,MAAM,EAAY,CAAE,WAAY,CAAQ,CAAC,CAAC,EACtD,CACT,CACF"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import * as e from "solid-ui";
|
|
2
|
+
//#region src/tableViewPane.js
|
|
3
|
+
var t = {
|
|
4
|
+
icon: e.icons.originalIconBase + "table.png",
|
|
5
|
+
name: "tableOfClass",
|
|
6
|
+
label: function(t, n) {
|
|
7
|
+
let r = n.session.store;
|
|
8
|
+
if (!r.any(void 0, e.ns.rdf("type"), t)) return null;
|
|
9
|
+
let i = r.statementsMatching(void 0, e.ns.rdf("type"), t).length;
|
|
10
|
+
return i === 0 || i > 15 ? null : e.utils.label(t) + " table";
|
|
11
|
+
},
|
|
12
|
+
render: function(t, n) {
|
|
13
|
+
let r = n.dom, i = r.createElement("div");
|
|
14
|
+
return i.setAttribute("class", "tablePane"), i.appendChild(e.table(r, { tableClass: t })), i;
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
//#endregion
|
|
18
|
+
export { t as tableViewPane };
|
|
19
|
+
|
|
20
|
+
//# sourceMappingURL=tableViewPane.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tableViewPane.esm.js","names":[],"sources":["../src/tableViewPane.js"],"sourcesContent":["// Format an array of RDF statements as an HTML table.\n//\n// This can operate in one of three modes: when the class of object is given\n// or when the source document from which data is taken is given,\n// or if a prepared query object is given.\n// (In principle it could operate with neither class nor document\n// given but typically\n// there would be too much data.)\n// When the tableClass is not given, it looks for common classes in the data,\n// and gives the user the option.\n//\n// 2008 Written, Ilaria Liccardi\n// 2014 core functionality now in common/table.js -timbl\n\n// ///////////////////////////////////////////////////////////////////\n\n// Table view pane -- view of a class as a table of properties of class members\nimport * as UI from 'solid-ui'\n\nexport const tableViewPane = {\n icon: UI.icons.originalIconBase + 'table.png',\n\n name: 'tableOfClass',\n\n label: function (subject, context) {\n const store = context.session.store\n // if (!store.holds(subject, UI.ns.rdf('type'),UI.ns.rdfs('Class'))) return null\n if (!store.any(undefined, UI.ns.rdf('type'), subject)) {\n return null\n }\n const n = store.statementsMatching(undefined, UI.ns.rdf('type'), subject)\n .length\n if (n === 0) {\n // None, suppress pane\n return null\n }\n if (n > 15) {\n // @@ At the moment this pane can be slow with too many @@ fixme by using limits\n return null\n }\n return UI.utils.label(subject) + ' table'\n },\n\n render: function (subject, context) {\n const myDocument = context.dom\n const div = myDocument.createElement('div')\n div.setAttribute('class', 'tablePane')\n div.appendChild(UI.table(myDocument, { tableClass: subject }))\n return div\n }\n}\n"],"mappings":";;AAmBA,IAAa,IAAgB;CAC3B,MAAM,EAAG,MAAM,mBAAmB;CAElC,MAAM;CAEN,OAAO,SAAU,GAAS,GAAS;EACjC,IAAM,IAAQ,EAAQ,QAAQ;EAE9B,IAAI,CAAC,EAAM,IAAI,KAAA,GAAW,EAAG,GAAG,IAAI,MAAM,GAAG,CAAO,GAClD,OAAO;EAET,IAAM,IAAI,EAAM,mBAAmB,KAAA,GAAW,EAAG,GAAG,IAAI,MAAM,GAAG,CAAO,CAAC,CACtE;EASH,OARI,MAAM,KAIN,IAAI,KAEC,OAEF,EAAG,MAAM,MAAM,CAAO,IAAI;CACnC;CAEA,QAAQ,SAAU,GAAS,GAAS;EAClC,IAAM,IAAa,EAAQ,KACrB,IAAM,EAAW,cAAc,KAAK;EAG1C,OAFA,EAAI,aAAa,SAAS,WAAW,GACrC,EAAI,YAAY,EAAG,MAAM,GAAY,EAAE,YAAY,EAAQ,CAAC,CAAC,GACtD;CACT;AACF"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
const e=require("../_virtual/_rolldown/runtime.cjs.js");let t=require("solid-ui");t=e.__toESM(t);let n=require("rdflib");n=e.__toESM(n);var r=t.ns,i={icon:t.icons.iconBase+`noun_106746.svg`,name:`transaction`,audience:[r.solid(`PowerUser`)],label:function(e,n){let r=n.session.store,i=r.findTypeURIs(e);return i[`http://www.w3.org/2000/10/swap/pim/qif#Transaction`]?`$$`:r.any(e,t.ns.qu(`amount`))?`$$$`:i[`http://www.w3.org/ns/pim/trip#Trip`]?`Trip $`:null},render:function(e,i){let a=i.dom,o=i.session.store,s=o.fetcher,c=n.Namespace(`http://www.w3.org/2000/10/swap/pim/qif#`),l=n.Namespace(`http://www.w3.org/ns/pim/trip#`),u=a.createElement(`div`);u.setAttribute(`class`,`transactionPane`);let d=function(e,t){t===void 0&&(t=`color: grey`);let n=a.createElement(`pre`);n.setAttribute(`style`,t),u.appendChild(n),n.appendChild(a.createTextNode(e))},f=function(e){return d(e,`color: #100; background-color: #fee`)},p=o.statementsMatching(e),m=o.statementsMatching(void 0,void 0,e),h=o.findTypeURIs(e),g={},_=function(e){g[e.uri]=!0},v=function(e){let n=`padding: 0.5em 1.5em 1em 1.5em; `;if(e){let r=o.any(e,t.ns.ui(`backgroundColor`));r&&(n+=`background-color: `+r.value+`; `)}u.setAttribute(`style`,n)},y=function(e){if(e===void 0)return``;let t=``+e;return t.indexOf(`.`)>=0?t.split(`.`)[0]+`.`+(t.split(`.`)[1]+`00`).slice(0,2):t+`.00`},b=function(e,t){let n=a.createElement(`td`);return 0+e===0&&t||(n.textContent=y(e)),n.setAttribute(`style`,`width: 6em; text-align: right; `),n},x=function(e){let t=a.createElement(`th`);return t.textContent=e,t.setAttribute(`style`,`text-align: right; `),t},S=function(e,t){let n=o.any(e,r.qu(`date`)),i=o.any(t,r.qu(`date`));if(n!==void 0&&i!==void 0){if(n.value<i.value)return-1;if(n.value>i.value)return 1}return e.uri<t.uri?-1:+(e.uri>t.uri)},C=function(e,t,n){let r=e.session.paneRegistry.byName(n).render(t,e);return r.setAttribute(`style`,`border: 0.1em solid green;`),r},w=function(e,t,n,r,a){let o=t.parentNode.children;if(a)for(let e=o.length-1;e>=0;e--)o[e].expanded&&(o[e].parentNode.removeChild(o[e].expanded),o[e].expanded=!1);let s=e.createElement(`tr`),c=s.appendChild(e.createElement(`td`));c.setAttribute(`style`,`width: 98%; padding: 1em; border: 0.1em solid grey;`);let l=t.children.length;t.nextSibling?t.parentNode.insertBefore(s,t.nextSibling):t.parentNode.appendChild(s),t.expanded=s,c.setAttribute(`colspan`,``+l),c.appendChild(C(i,n,r))},T=function(e,t,n,r,i){t.expanded?(t.parentNode.removeChild(t.expanded),t.expanded=!1):w(e,t,n,r,i)},E=function(e,n,i){let a=e.createElement(`table`);a.setAttribute(`style`,`padding-left: 0.5em; padding-right: 0.5em; font-size: 9pt; width: 85%;`);let s=function(e,n){let i=e.createElement(`tr`);(function(e,n){let r=`'padding-left: 0.5em; padding-right: 0.5em; padding-top: 0.1em;`;if(n){let e=o.any(n,t.ns.ui(`backgroundColor`));e&&(r+=`background-color: `+e.value+`; `)}e.setAttribute(`style`,r)})(i,o.any(n,r.qu(`toAccount`)));let a=i.appendChild(e.createElement(`td`)),s=o.any(n,r.qu(`date`));a.textContent=s?s.value.slice(0,10):`???`,a.setAttribute(`style`,`width: 7em;`);let c=i.appendChild(e.createElement(`td`));c.setAttribute(`style`,`width: 36em;`);let l=o.any(n,r.qu(`payee`));c.textContent=l?l.value:`???`;let u=c.appendChild(e.createElement(`a`));u.textContent=` ➜`,u.setAttribute(`href`,n.uri);let d=i.appendChild(e.createElement(`td`)),f=o.any(n,r.qu(`in_USD`));return d.textContent=f?y(f.value):`???`,d.setAttribute(`style`,`width: 6em; text-align: right; `),i.addEventListener(`click`,function(t){T(e,i,n,`transaction`,!t.shiftKey)},!1),i},c=i?n.filter(i):n.slice();c.sort(S);for(let t=0;t<c.length;t++)a.appendChild(s(e,c[t]));return a};if(h[`http://www.w3.org/2000/10/swap/pim/qif#Transaction`]||o.any(e,r.qu(`toAccount`))){_(r.rdf(`type`));let d=o.any(e,t.ns.qu(`toAccount`));v(d),d||f(`(Error: There is no bank account known for this transaction <`+e.uri+`>,
|
|
2
|
+
-- every transaction needs one.)`);let h=null,y=o.any(e,t.ns.qu(`accordingTo`));y===void 0?f(`(Error: There is no back link to the original data source foir this transaction <`+e.uri+`>,
|
|
3
|
+
so I can't tell how to annotate it.)`):(h=y===void 0?null:o.any(y,t.ns.qu(`annotationStore`)),h===void 0&&f(`(There is no annotation document for this statement
|
|
4
|
+
<`+y.uri+`>,
|
|
5
|
+
so you cannot classify this transaction.)`));let b=a.createElement(`div`);b.setAttribute(`style`,`float:right`),u.appendChild(b);let x=function(n,r){_(n);let i=o.any(e,n);if(!i)return;let s=a.createElement(`a`);s.setAttribute(`href`,i.uri),s.setAttribute(`style`,`float:right`),b.appendChild(s).textContent=r||t.utils.label(i),b.appendChild(a.createElement(`br`))};x(t.ns.qu(`toAccount`)),x(t.ns.qu(`accordingTo`),`Statement`),x(l(`trip`));let S=a.createElement(`table`);u.appendChild(S),S.innerHTML=[`date`,`payee`,`amount`,`in_USD`,`currency`].map(c).map(function(n){_(n);let r=o.any(e,n),i=r?t.utils.labelForXML(r):``;return`<tr><td style="text-align: right; padding-right: 0.6em">`+t.utils.labelForXML(n)+`</td><td style="font-weight: bold;">`+i+`</td></tr>`}).join(`
|
|
6
|
+
`);let C=function(e,t){e||f(`Sorry, failed to save your change:
|
|
7
|
+
`+t)};h&&o.fetcher.nowOrWhenFetched(h.uri,e,function(c,d){c||f(`Cannot load store `+h+` `+d);let v=o.any(h,r.qu(`calendarYear`)),y=function(){u.insertBefore(t.widgets.makeSelectForNestedCategory(a,o,e,t.ns.qu(`Classified`),h,C),S.nextSibling)};o.any(void 0,r.rdfs(`subClassOf`),r.qu.Classified)?y():v?s.load(v).then(function(e){s.load(o.each(v,r.rdfs(`seeAlso`))).then(function(){y()}).catch(function(e){console.log(`Error loading background data: `+e)})}).catch(function(e){console.log(`Error loading calendarYear: `+e)}):console.log(`Can't get categories, because no calendarYear`),u.appendChild(t.widgets.makeDescription(a,o,e,t.ns.rdfs(`comment`),h,C));let b=o.statementsMatching(void 0,l(`trip`),void 0,h).map(function(e){return e.object}),x=o.each(void 0,t.ns.rdf(`type`),l(`Trip`));b=b.concat(x).sort(),b=function(e,t,n,r){let i=t.map(function(t){let r=e.any(t,n);return r=r?r.value:`9999-12-31`,[r,t]});return i.sort(),r&&i.reverse(),i.map(function(e){return e[1]})}(o,b,t.ns.cal(`dtstart`),!0),b.length>1&&u.appendChild(t.widgets.makeSelectForOptions(a,o,e,l(`trip`),b,{multiple:!1,nullLabel:`-- what trip? --`,mint:`New Trip *`,mintClass:l(`Trip`),mintStatementsFun:function(e){let r=[];return r.push(n.st(e,t.ns.rdf(`type`),l(`Trip`),e.doc())),r}},h,C)),u.appendChild(a.createElement(`br`));let w=i.getOutliner(a);_(r.rdfs(`comment`)),t.widgets.attachmentList(a,e,u),_(r.wf(`attachment`)),u.appendChild(a.createElement(`tr`)).setAttribute(`style`,`height: 1em`),w.appendPropertyTRs(u,p,!1,function(e,t){return!(e.uri in g)}),w.appendPropertyTRs(u,m,!0,function(e,t){return!(e.uri in g)})})}else h[`http://www.w3.org/ns/pim/trip#Trip`]&&function(){let n={},i={},s={},c=o.each(void 0,l(`trip`),e),d=c.map(function(e){return e.doc()});o.fetcher.load(d).then(function(){c.forEach(function(e){let a=o.the(e,r.qu(`date`)),c=a?(``+a.value).slice(0,4):`????`,l=o.the(e,r.rdf(`type`));if(l||=t.ns.qu(`ErrorNoType`),l&&l.uri){let r=l.uri;i[c]||(i[c]=0),s[c]||(s[c]={}),n[r]||(n[r]=0),s[c][r]||(s[c][r]=0);let a=o.any(e,t.ns.qu(`in_USD`));if(a||f(`@@ No amount in USD: `+a+` for `+e),a){let e=parseFloat(a.value);n[r]+=e,s[c][r]+=e,i[c]+=e}}});let l=[],d=0,p=[],m;for(let e in s)Object.prototype.hasOwnProperty.call(s,e)&&p.push(e);p.sort();let h=p.length,g,_=u.appendChild(a.createElement(`table`));if(_.setAttribute(`style`,`font-size: 120%; margin-left:auto; margin-right:1em; margin-top: 1em; border: 0.05em solid gray; padding: 1em;`),h>1){let e=_.appendChild(a.createElement(`tr`));for(e.appendChild(x(``)),m=0;m<h;m++)e.appendChild(x(p[m]));e.appendChild(x(`total`))}for(let e in n)Object.prototype.hasOwnProperty.call(n,e)&&(l.push(e),d+=n[e]);l.sort();let v,S,C;for(let e=0;e<l.length;e++){let r=o.sym(l[e]);if(v=_.appendChild(a.createElement(`tr`)),S=v.appendChild(a.createElement(`td`)),S.textContent=t.utils.label(r),h>1)for(m=0;m<h;m++)C=s[p[m]][l[e]],g=v.appendChild(b(C,!0));v.appendChild(b(n[l[e]],!0))}if(l.length>1){if(v=_.appendChild(a.createElement(`tr`)),v.appendChild(x(`total`)),h>1)for(m=0;m<h;m++)C=i[p[m]],g=v.appendChild(b(C?y(C):``));g=v.appendChild(b(d)),g.setAttribute(`style`,`font-weight: bold; text-align: right;`)}let w=E(a,c);w.setAttribute(`style`,`margin-left:auto; margin-right:1em; margin-top: 1em; border: padding: 1em;`),u.appendChild(w),t.widgets.attachmentList(a,e,u)}).catch(function(e){f(`Error loading transactions: `+e)})}();return u}};exports.default=i;
|
|
8
|
+
//# sourceMappingURL=pane.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pane.cjs.js","names":["UI","$rdf"],"sources":["../../src/transaction/pane.js"],"sourcesContent":["/* Financial Transaction Pane\n **\n ** This outline pane allows a user to interact with a transaction\n ** downloaded from a bank statement, annotting it with classes and comments,\n ** trips, etc\n */\n\nimport * as UI from 'solid-ui'\nimport * as $rdf from 'rdflib'\nconst ns = UI.ns\n\nexport default {\n // icon: (module.__dirname || __dirname) + '22-pixel-068010-3d-transparent-glass-icon-alphanumeric-dollar-sign.png',\n icon: UI.icons.iconBase + 'noun_106746.svg',\n\n name: 'transaction',\n\n audience: [ns.solid('PowerUser')],\n\n // Does the subject deserve this pane?\n label: function (subject, context) {\n const kb = context.session.store\n const t = kb.findTypeURIs(subject)\n if (t['http://www.w3.org/2000/10/swap/pim/qif#Transaction']) return '$$'\n if (kb.any(subject, UI.ns.qu('amount'))) return '$$$' // In case schema not picked up\n\n // if (t['http://www.w3.org/2000/10/swap/pim/qif#Period']) return \"period $\"\n\n if (t['http://www.w3.org/ns/pim/trip#Trip']) return 'Trip $'\n\n return null // No under other circumstances (while testing at least!)\n },\n\n render: function (subject, context) {\n const dom = context.dom\n const kb = context.session.store\n const fetcher = kb.fetcher\n const Q = $rdf.Namespace('http://www.w3.org/2000/10/swap/pim/qif#')\n const TRIP = $rdf.Namespace('http://www.w3.org/ns/pim/trip#')\n\n const div = dom.createElement('div')\n div.setAttribute('class', 'transactionPane')\n\n const mention = function mention (message, style) {\n if (style === undefined) style = 'color: grey'\n const pre = dom.createElement('pre')\n pre.setAttribute('style', style)\n div.appendChild(pre)\n pre.appendChild(dom.createTextNode(message))\n }\n const complain = function complain (message) {\n return mention(message, 'color: #100; background-color: #fee')\n }\n\n /*\n var thisPane = this\n var rerender = function (div) {\n var parent = div.parentNode\n var div2 = thisPane.render(subject, dom)\n parent.replaceChild(div2, div)\n }\n */\n // //////////////////////////////////////////////////////////////////////////////\n\n const plist = kb.statementsMatching(subject)\n const qlist = kb.statementsMatching(undefined, undefined, subject)\n\n const t = kb.findTypeURIs(subject)\n\n // var me = authn.currentUser()\n const predicateURIsDone = {}\n const donePredicate = function (pred) {\n predicateURIsDone[pred.uri] = true\n }\n\n const setPaneStyle = function (account) {\n let mystyle = 'padding: 0.5em 1.5em 1em 1.5em; '\n if (account) {\n const backgroundColor = kb.any(account, UI.ns.ui('backgroundColor'))\n if (backgroundColor) {\n mystyle += 'background-color: ' + backgroundColor.value + '; '\n }\n }\n div.setAttribute('style', mystyle)\n }\n // setPaneStyle()\n\n // Functions for displaying lists of transactions\n // Click on the transaction line to expand it into a pane\n // Shift-click to expand without collapsing others\n\n const d2 = function (n) {\n if (n === undefined) return ''\n const s = '' + n\n if (s.indexOf('.') >= 0) {\n return s.split('.')[0] + '.' + (s.split('.')[1] + '00').slice(0, 2)\n }\n return s + '.00'\n }\n\n const numericCell = function numericCell (amount, suppressZero) {\n const td = dom.createElement('td')\n if (!(0.0 + amount === 0.0 && suppressZero)) {\n td.textContent = d2(amount)\n }\n td.setAttribute('style', 'width: 6em; text-align: right; ')\n return td\n }\n\n const headerCell = function headerCell (str) {\n const td = dom.createElement('th')\n td.textContent = str\n td.setAttribute('style', 'text-align: right; ')\n return td\n }\n\n const oderByDate = function (x, y) {\n const dx = kb.any(x, ns.qu('date'))\n const dy = kb.any(y, ns.qu('date'))\n if (dx !== undefined && dy !== undefined) {\n if (dx.value < dy.value) return -1\n if (dx.value > dy.value) return 1\n }\n if (x.uri < y.uri) return -1 // Arbitrary but repeatable\n if (x.uri > y.uri) return 1\n return 0\n }\n\n const insertedPane = function (context, subject, paneName) {\n const p = context.session.paneRegistry.byName(paneName)\n const d = p.render(subject, context)\n d.setAttribute('style', 'border: 0.1em solid green;')\n return d\n }\n\n const expandAfterRow = function (dom, row, subject, paneName, solo) {\n const siblings = row.parentNode.children\n if (solo) {\n for (let j = siblings.length - 1; j >= 0; j--) {\n if (siblings[j].expanded) {\n siblings[j].parentNode.removeChild(siblings[j].expanded)\n siblings[j].expanded = false\n }\n }\n }\n const tr = dom.createElement('tr')\n const td = tr.appendChild(dom.createElement('td'))\n td.setAttribute(\n 'style',\n 'width: 98%; padding: 1em; border: 0.1em solid grey;'\n )\n const cols = row.children.length\n if (row.nextSibling) {\n row.parentNode.insertBefore(tr, row.nextSibling)\n } else {\n row.parentNode.appendChild(tr)\n }\n row.expanded = tr\n td.setAttribute('colspan', '' + cols)\n td.appendChild(insertedPane(context, subject, paneName))\n }\n\n const expandAfterRowOrCollapse = function (\n dom,\n row,\n subject,\n paneName,\n solo\n ) {\n if (row.expanded) {\n row.parentNode.removeChild(row.expanded)\n row.expanded = false\n } else {\n expandAfterRow(dom, row, subject, paneName, solo)\n }\n }\n\n const transactionTable = function (dom, list, filter) {\n const table = dom.createElement('table')\n table.setAttribute(\n 'style',\n 'padding-left: 0.5em; padding-right: 0.5em; font-size: 9pt; width: 85%;'\n )\n const transactionRow = function (dom, x) {\n const tr = dom.createElement('tr')\n\n const setTRStyle = function (tr, account) {\n // var mystyle = \"padding: 0.5em 1.5em 1em 1.5em; \"\n let mystyle =\n '\\'padding-left: 0.5em; padding-right: 0.5em; padding-top: 0.1em;'\n if (account) {\n const backgroundColor = kb.any(account, UI.ns.ui('backgroundColor'))\n if (backgroundColor) {\n mystyle += 'background-color: ' + backgroundColor.value + '; '\n }\n }\n tr.setAttribute('style', mystyle)\n }\n\n const account = kb.any(x, ns.qu('toAccount'))\n setTRStyle(tr, account)\n\n const c0 = tr.appendChild(dom.createElement('td'))\n const date = kb.any(x, ns.qu('date'))\n c0.textContent = date ? date.value.slice(0, 10) : '???'\n c0.setAttribute('style', 'width: 7em;')\n\n const c1 = tr.appendChild(dom.createElement('td'))\n c1.setAttribute('style', 'width: 36em;')\n const payee = kb.any(x, ns.qu('payee'))\n c1.textContent = payee ? payee.value : '???'\n const a1 = c1.appendChild(dom.createElement('a'))\n a1.textContent = ' ➜'\n a1.setAttribute('href', x.uri)\n\n const c3 = tr.appendChild(dom.createElement('td'))\n const amount = kb.any(x, ns.qu('in_USD'))\n c3.textContent = amount ? d2(amount.value) : '???'\n c3.setAttribute('style', 'width: 6em; text-align: right; ') // @@ decimal alignment?\n tr.addEventListener(\n 'click',\n function (e) {\n // solo unless shift key\n expandAfterRowOrCollapse(dom, tr, x, 'transaction', !e.shiftKey)\n },\n false\n )\n\n return tr\n }\n\n const list2 = filter ? list.filter(filter) : list.slice() // don't sort a paramater passed in place\n list2.sort(oderByDate)\n\n for (let i = 0; i < list2.length; i++) {\n table.appendChild(transactionRow(dom, list2[i]))\n }\n return table\n }\n\n // Render a single transaction\n\n // This works only if enough metadata about the properties can drive the RDFS\n // (or actual type statements whichtypically are NOT there on)\n if (\n t['http://www.w3.org/2000/10/swap/pim/qif#Transaction'] ||\n kb.any(subject, ns.qu('toAccount'))\n ) {\n // var trip = kb.any(subject, WF('trip'))\n donePredicate(ns.rdf('type'))\n\n const account = kb.any(subject, UI.ns.qu('toAccount'))\n setPaneStyle(account)\n if (!account) {\n complain(\n '(Error: There is no bank account known for this transaction <' +\n subject.uri +\n '>,\\n -- every transaction needs one.)'\n )\n }\n\n let store = null\n const statement = kb.any(subject, UI.ns.qu('accordingTo'))\n if (statement === undefined) {\n complain(\n '(Error: There is no back link to the original data source foir this transaction <' +\n subject.uri +\n '>,\\nso I can\\'t tell how to annotate it.)'\n )\n } else {\n store =\n statement !== undefined\n ? kb.any(statement, UI.ns.qu('annotationStore'))\n : null\n if (store === undefined) {\n complain(\n '(There is no annotation document for this statement\\n<' +\n statement.uri +\n '>,\\nso you cannot classify this transaction.)'\n )\n }\n }\n\n const nav = dom.createElement('div')\n nav.setAttribute('style', 'float:right')\n div.appendChild(nav)\n\n const navLink = function (pred, label) {\n donePredicate(pred)\n const obj = kb.any(subject, pred)\n if (!obj) return\n const a = dom.createElement('a')\n a.setAttribute('href', obj.uri)\n a.setAttribute('style', 'float:right')\n nav.appendChild(a).textContent = label || UI.utils.label(obj)\n nav.appendChild(dom.createElement('br'))\n }\n\n navLink(UI.ns.qu('toAccount'))\n navLink(UI.ns.qu('accordingTo'), 'Statement')\n navLink(TRIP('trip'))\n\n // Basic data:\n const table = dom.createElement('table')\n div.appendChild(table)\n const preds = ['date', 'payee', 'amount', 'in_USD', 'currency'].map(Q)\n const inner = preds\n .map(function (p) {\n donePredicate(p)\n const value = kb.any(subject, p)\n const s = value ? UI.utils.labelForXML(value) : ''\n return (\n '<tr><td style=\"text-align: right; padding-right: 0.6em\">' +\n UI.utils.labelForXML(p) +\n '</td><td style=\"font-weight: bold;\">' +\n s +\n '</td></tr>'\n )\n })\n .join('\\n')\n table.innerHTML = inner\n\n const complainIfBad = function (ok, body) {\n if (ok) {\n // setModifiedDate(store, kb, store)\n // rerender(div) // deletes the new trip form\n } else complain('Sorry, failed to save your change:\\n' + body)\n }\n\n // What trips do we know about?\n\n // Classify:\n if (store) {\n kb.fetcher.nowOrWhenFetched(store.uri, subject, function (ok, body) {\n if (!ok) complain('Cannot load store ' + store + ' ' + body)\n\n const calendarYear = kb.any(store, ns.qu('calendarYear'))\n\n const renderCatgorySelectors = function () {\n div.insertBefore(\n UI.widgets.makeSelectForNestedCategory(\n dom,\n kb,\n subject,\n UI.ns.qu('Classified'),\n store,\n complainIfBad\n ),\n table.nextSibling\n )\n }\n\n if (kb.any(undefined, ns.rdfs('subClassOf'), ns.qu.Classified)) {\n renderCatgorySelectors()\n } else if (calendarYear) {\n fetcher\n .load(calendarYear)\n .then(function (_xhrs) {\n fetcher\n .load(kb.each(calendarYear, ns.rdfs('seeAlso')))\n .then(function () {\n renderCatgorySelectors()\n })\n .catch(function (e) {\n console.log('Error loading background data: ' + e)\n })\n })\n .catch(function (e) {\n console.log('Error loading calendarYear: ' + e)\n })\n } else {\n console.log('Can\\'t get categories, because no calendarYear')\n }\n div.appendChild(\n UI.widgets.makeDescription(\n dom,\n kb,\n subject,\n UI.ns.rdfs('comment'),\n store,\n complainIfBad\n )\n )\n\n let trips = kb\n .statementsMatching(undefined, TRIP('trip'), undefined, store)\n .map(function (st) {\n return st.object\n }) // @@ Use rdfs\n const trips2 = kb.each(undefined, UI.ns.rdf('type'), TRIP('Trip'))\n trips = trips.concat(trips2).sort() // @@ Unique\n\n const sortedBy = function (kb, list, pred, reverse) {\n const l2 = list.map(function (x) {\n let key = kb.any(x, pred)\n key = key ? key.value : '9999-12-31'\n return [key, x]\n })\n l2.sort()\n if (reverse) l2.reverse()\n return l2.map(function (pair) {\n return pair[1]\n })\n }\n\n trips = sortedBy(kb, trips, UI.ns.cal('dtstart'), true) // Reverse chron\n\n if (trips.length > 1) {\n div.appendChild(\n UI.widgets.makeSelectForOptions(\n dom,\n kb,\n subject,\n TRIP('trip'),\n trips,\n {\n multiple: false,\n nullLabel: '-- what trip? --',\n mint: 'New Trip *',\n mintClass: TRIP('Trip'),\n mintStatementsFun: function (trip) {\n const is = []\n is.push(\n $rdf.st(trip, UI.ns.rdf('type'), TRIP('Trip'), trip.doc())\n )\n return is\n }\n },\n store,\n complainIfBad\n )\n )\n }\n\n div.appendChild(dom.createElement('br'))\n\n // Add in simple comments about the transaction\n\n const outliner = context.getOutliner(dom)\n\n donePredicate(ns.rdfs('comment')) // Done above\n\n UI.widgets.attachmentList(dom, subject, div)\n donePredicate(ns.wf('attachment'))\n\n div\n .appendChild(dom.createElement('tr'))\n .setAttribute('style', 'height: 1em') // spacer\n\n // Remaining properties\n outliner.appendPropertyTRs(div, plist, false, function (\n pred,\n _inverse\n ) {\n return !(pred.uri in predicateURIsDone)\n })\n outliner.appendPropertyTRs(div, qlist, true, function (\n pred,\n _inverse\n ) {\n return !(pred.uri in predicateURIsDone)\n })\n }) // fetch\n }\n // end of render tranasaction instance\n\n // ////////////////////////////////////////////////////////////////////\n //\n // Render the transactions in a Trip\n //\n } else if (t['http://www.w3.org/ns/pim/trip#Trip']) {\n /*\n var query = new $rdf.Query(UI.utils.label(subject))\n var vars = [ 'date', 'transaction', 'comment', 'type', 'in_USD']\n var v = {}\n vars.map(function(x){query.vars.push(v[x]=$rdf.variable(x))}) // Only used by UI\n query.pat.add(v['transaction'], TRIP('trip'), subject)\n\n var opt = kb.formula()\n opt.add(v['transaction'], ns.rdf('type'), v['type']); // Issue: this will get stored supertypes too\n query.pat.optional.push(opt)\n\n query.pat.add(v['transaction'], UI.ns.qu('date'), v['date'])\n\n var opt = kb.formula()\n opt.add(v['transaction'], ns.rdfs('comment'), v['comment'])\n query.pat.optional.push(opt)\n\n //opt = kb.formula()\n query.pat.add(v['transaction'], UI.ns.qu('in_USD'), v['in_USD'])\n\n //query.pat.optional.push(opt)\n\n var tableDiv = UI.widgets.renderTableViewPane(dom, {'query': query, 'onDone': calculations} )\n div.appendChild(tableDiv)\n\n*/\n const calculations = function () {\n const total = {}\n const yearTotal = {}\n const yearCategoryTotal = {}\n const trans = kb.each(undefined, TRIP('trip'), subject)\n const bankStatements = trans.map(function (t) {\n return t.doc()\n })\n kb.fetcher\n .load(bankStatements)\n .then(function () {\n trans.forEach(function (t) {\n const date = kb.the(t, ns.qu('date'))\n const year = date ? ('' + date.value).slice(0, 4) : '????'\n let ty = kb.the(t, ns.rdf('type')) // @@ find most specific type\n // complain(\" -- one trans: \"+t.uri + ' -> '+kb.any(t, UI.ns.qu('in_USD')))\n if (!ty) ty = UI.ns.qu('ErrorNoType')\n if (ty && ty.uri) {\n const tyuri = ty.uri\n if (!yearTotal[year]) yearTotal[year] = 0.0\n if (!yearCategoryTotal[year]) yearCategoryTotal[year] = {}\n if (!total[tyuri]) total[tyuri] = 0.0\n if (!yearCategoryTotal[year][tyuri]) {\n yearCategoryTotal[year][tyuri] = 0.0\n }\n\n const lit = kb.any(t, UI.ns.qu('in_USD'))\n if (!lit) {\n complain('@@ No amount in USD: ' + lit + ' for ' + t)\n }\n if (lit) {\n const amount = parseFloat(lit.value)\n total[tyuri] += amount\n yearCategoryTotal[year][tyuri] += amount\n yearTotal[year] += amount\n }\n }\n })\n\n const types = []\n let grandTotal = 0.0\n const years = []\n let i\n\n for (const y in yearCategoryTotal) {\n // @@ TODO: Write away the need for exception on next line\n\n if (Object.prototype.hasOwnProperty.call(yearCategoryTotal, y)) {\n years.push(y)\n }\n }\n years.sort()\n const ny = years.length\n let cell\n\n const table = div.appendChild(dom.createElement('table'))\n table.setAttribute(\n 'style',\n 'font-size: 120%; margin-left:auto; margin-right:1em; margin-top: 1em; border: 0.05em solid gray; padding: 1em;'\n )\n\n if (ny > 1) {\n const header = table.appendChild(dom.createElement('tr'))\n header.appendChild(headerCell(''))\n for (i = 0; i < ny; i++) {\n header.appendChild(headerCell(years[i]))\n }\n header.appendChild(headerCell('total'))\n }\n\n for (const uri in total) {\n // @@ TODO: Write away the need for exception on next line\n\n if (Object.prototype.hasOwnProperty.call(total, uri)) {\n types.push(uri)\n grandTotal += total[uri]\n }\n }\n types.sort()\n let row, label, z\n for (let j = 0; j < types.length; j++) {\n const cat = kb.sym(types[j])\n row = table.appendChild(dom.createElement('tr'))\n label = row.appendChild(dom.createElement('td'))\n label.textContent = UI.utils.label(cat)\n if (ny > 1) {\n for (i = 0; i < ny; i++) {\n z = yearCategoryTotal[years[i]][types[j]]\n cell = row.appendChild(numericCell(z, true))\n }\n }\n row.appendChild(numericCell(total[types[j]], true))\n }\n\n // Trailing totals\n if (types.length > 1) {\n row = table.appendChild(dom.createElement('tr'))\n row.appendChild(headerCell('total'))\n if (ny > 1) {\n for (i = 0; i < ny; i++) {\n z = yearTotal[years[i]]\n cell = row.appendChild(numericCell(z ? d2(z) : ''))\n }\n }\n cell = row.appendChild(numericCell(grandTotal))\n cell.setAttribute(\n 'style',\n 'font-weight: bold; text-align: right;'\n )\n }\n\n const tab = transactionTable(dom, trans)\n tab.setAttribute(\n 'style',\n 'margin-left:auto; margin-right:1em; margin-top: 1em; border: padding: 1em;'\n )\n div.appendChild(tab)\n\n UI.widgets.attachmentList(dom, subject, div)\n })\n .catch(function (e) {\n complain('Error loading transactions: ' + e)\n })\n }\n calculations()\n } // if\n\n return div\n }\n}\n\n// ends\n"],"mappings":"wIASA,IAAM,EAAKA,EAAG,GAEd,EAAe,CAEb,KAAMA,EAAG,MAAM,SAAW,kBAE1B,KAAM,cAEN,SAAU,CAAC,EAAG,MAAM,WAAW,CAAC,EAGhC,MAAO,SAAU,EAAS,EAAS,CACjC,IAAM,EAAK,EAAQ,QAAQ,MACrB,EAAI,EAAG,aAAa,CAAO,EAQjC,OAPI,EAAE,sDAA8D,KAChE,EAAG,IAAI,EAASA,EAAG,GAAG,GAAG,QAAQ,CAAC,EAAU,MAI5C,EAAE,sCAA8C,SAE7C,IACT,EAEA,OAAQ,SAAU,EAAS,EAAS,CAClC,IAAM,EAAM,EAAQ,IACd,EAAK,EAAQ,QAAQ,MACrB,EAAU,EAAG,QACb,EAAIC,EAAK,UAAU,yCAAyC,EAC5D,EAAOA,EAAK,UAAU,gCAAgC,EAEtD,EAAM,EAAI,cAAc,KAAK,EACnC,EAAI,aAAa,QAAS,iBAAiB,EAE3C,IAAM,EAAU,SAAkB,EAAS,EAAO,CAC5C,IAAU,IAAA,KAAW,EAAQ,eACjC,IAAM,EAAM,EAAI,cAAc,KAAK,EACnC,EAAI,aAAa,QAAS,CAAK,EAC/B,EAAI,YAAY,CAAG,EACnB,EAAI,YAAY,EAAI,eAAe,CAAO,CAAC,CAC7C,EACM,EAAW,SAAmB,EAAS,CAC3C,OAAO,EAAQ,EAAS,qCAAqC,CAC/D,EAYM,EAAQ,EAAG,mBAAmB,CAAO,EACrC,EAAQ,EAAG,mBAAmB,IAAA,GAAW,IAAA,GAAW,CAAO,EAE3D,EAAI,EAAG,aAAa,CAAO,EAG3B,EAAoB,CAAC,EACrB,EAAgB,SAAU,EAAM,CACpC,EAAkB,EAAK,KAAO,EAChC,EAEM,EAAe,SAAU,EAAS,CACtC,IAAI,EAAU,mCACd,GAAI,EAAS,CACX,IAAM,EAAkB,EAAG,IAAI,EAASD,EAAG,GAAG,GAAG,iBAAiB,CAAC,EAC/D,IACF,GAAW,qBAAuB,EAAgB,MAAQ,KAE9D,CACA,EAAI,aAAa,QAAS,CAAO,CACnC,EAOM,EAAK,SAAU,EAAG,CACtB,GAAI,IAAM,IAAA,GAAW,MAAO,GAC5B,IAAM,EAAI,GAAK,EAIf,OAHI,EAAE,QAAQ,GAAG,GAAK,EACb,EAAE,MAAM,GAAG,CAAC,CAAC,GAAK,KAAO,EAAE,MAAM,GAAG,CAAC,CAAC,GAAK,KAAA,CAAM,MAAM,EAAG,CAAC,EAE7D,EAAI,KACb,EAEM,EAAc,SAAsB,EAAQ,EAAc,CAC9D,IAAM,EAAK,EAAI,cAAc,IAAI,EAKjC,MAJM,GAAM,IAAW,GAAO,IAC5B,EAAG,YAAc,EAAG,CAAM,GAE5B,EAAG,aAAa,QAAS,iCAAiC,EACnD,CACT,EAEM,EAAa,SAAqB,EAAK,CAC3C,IAAM,EAAK,EAAI,cAAc,IAAI,EAGjC,MAFA,GAAG,YAAc,EACjB,EAAG,aAAa,QAAS,qBAAqB,EACvC,CACT,EAEM,EAAa,SAAU,EAAG,EAAG,CACjC,IAAM,EAAK,EAAG,IAAI,EAAG,EAAG,GAAG,MAAM,CAAC,EAC5B,EAAK,EAAG,IAAI,EAAG,EAAG,GAAG,MAAM,CAAC,EAClC,GAAI,IAAO,IAAA,IAAa,IAAO,IAAA,GAAW,CACxC,GAAI,EAAG,MAAQ,EAAG,MAAO,MAAO,GAChC,GAAI,EAAG,MAAQ,EAAG,MAAO,MAAO,EAClC,CAGA,OAFI,EAAE,IAAM,EAAE,IAAY,GAC1B,EAAI,EAAE,IAAM,EAAE,IAEhB,EAEM,EAAe,SAAU,EAAS,EAAS,EAAU,CAEzD,IAAM,EADI,EAAQ,QAAQ,aAAa,OAAO,CACpC,CAAC,CAAC,OAAO,EAAS,CAAO,EAEnC,OADA,EAAE,aAAa,QAAS,4BAA4B,EAC7C,CACT,EAEM,EAAiB,SAAU,EAAK,EAAK,EAAS,EAAU,EAAM,CAClE,IAAM,EAAW,EAAI,WAAW,SAChC,GAAI,EACG,IAAA,IAAI,EAAI,EAAS,OAAS,EAAG,GAAK,EAAG,IACpC,EAAS,EAAE,CAAC,WACd,EAAS,EAAE,CAAC,WAAW,YAAY,EAAS,EAAE,CAAC,QAAQ,EACvD,EAAS,EAAE,CAAC,SAAW,IAI7B,IAAM,EAAK,EAAI,cAAc,IAAI,EAC3B,EAAK,EAAG,YAAY,EAAI,cAAc,IAAI,CAAC,EACjD,EAAG,aACD,QACA,qDACF,EACA,IAAM,EAAO,EAAI,SAAS,OACtB,EAAI,YACN,EAAI,WAAW,aAAa,EAAI,EAAI,WAAW,EAE/C,EAAI,WAAW,YAAY,CAAE,EAE/B,EAAI,SAAW,EACf,EAAG,aAAa,UAAW,GAAK,CAAI,EACpC,EAAG,YAAY,EAAa,EAAS,EAAS,CAAQ,CAAC,CACzD,EAEM,EAA2B,SAC/B,EACA,EACA,EACA,EACA,EACA,CACI,EAAI,UACN,EAAI,WAAW,YAAY,EAAI,QAAQ,EACvC,EAAI,SAAW,IAEf,EAAe,EAAK,EAAK,EAAS,EAAU,CAAI,CAEpD,EAEM,EAAmB,SAAU,EAAK,EAAM,EAAQ,CACpD,IAAM,EAAQ,EAAI,cAAc,OAAO,EACvC,EAAM,aACJ,QACA,wEACF,EACA,IAAM,EAAiB,SAAU,EAAK,EAAG,CACvC,IAAM,EAAK,EAAI,cAAc,IAAI,GAgBjC,SAd6B,EAAI,EAAS,CAExC,IAAI,EACF,kEACF,GAAI,EAAS,CACX,IAAM,EAAkB,EAAG,IAAI,EAASA,EAAG,GAAG,GAAG,iBAAiB,CAAC,EAC/D,IACF,GAAW,qBAAuB,EAAgB,MAAQ,KAE9D,CACA,EAAG,aAAa,QAAS,CAAO,CAClC,EAGA,CAAW,EADK,EAAG,IAAI,EAAG,EAAG,GAAG,WAAW,CACtB,CAAC,EAEtB,IAAM,EAAK,EAAG,YAAY,EAAI,cAAc,IAAI,CAAC,EAC3C,EAAO,EAAG,IAAI,EAAG,EAAG,GAAG,MAAM,CAAC,EACpC,EAAG,YAAc,EAAO,EAAK,MAAM,MAAM,EAAG,EAAE,EAAI,MAClD,EAAG,aAAa,QAAS,aAAa,EAEtC,IAAM,EAAK,EAAG,YAAY,EAAI,cAAc,IAAI,CAAC,EACjD,EAAG,aAAa,QAAS,cAAc,EACvC,IAAM,EAAQ,EAAG,IAAI,EAAG,EAAG,GAAG,OAAO,CAAC,EACtC,EAAG,YAAc,EAAQ,EAAM,MAAQ,MACvC,IAAM,EAAK,EAAG,YAAY,EAAI,cAAc,GAAG,CAAC,EAChD,EAAG,YAAc,KACjB,EAAG,aAAa,OAAQ,EAAE,GAAG,EAE7B,IAAM,EAAK,EAAG,YAAY,EAAI,cAAc,IAAI,CAAC,EAC3C,EAAS,EAAG,IAAI,EAAG,EAAG,GAAG,QAAQ,CAAC,EAYxC,MAXA,GAAG,YAAc,EAAS,EAAG,EAAO,KAAK,EAAI,MAC7C,EAAG,aAAa,QAAS,iCAAiC,EAC1D,EAAG,iBACD,QACA,SAAU,EAAG,CAEX,EAAyB,EAAK,EAAI,EAAG,cAAe,CAAC,EAAE,QAAQ,CACjE,EACA,EACF,EAEO,CACT,EAEM,EAAQ,EAAS,EAAK,OAAO,CAAM,EAAI,EAAK,MAAM,EACxD,EAAM,KAAK,CAAU,EAErB,IAAK,IAAI,EAAI,EAAG,EAAI,EAAM,OAAQ,IAChC,EAAM,YAAY,EAAe,EAAK,EAAM,EAAE,CAAC,EAEjD,OAAO,CACT,EAMA,GACE,EAAE,uDACF,EAAG,IAAI,EAAS,EAAG,GAAG,WAAW,CAAC,EAClC,CAEA,EAAc,EAAG,IAAI,MAAM,CAAC,EAE5B,IAAM,EAAU,EAAG,IAAI,EAASA,EAAG,GAAG,GAAG,WAAW,CAAC,EACrD,EAAa,CAAO,EACf,GACH,EACE,gEACE,EAAQ,IACR;kCACJ,EAGF,IAAI,EAAQ,KACN,EAAY,EAAG,IAAI,EAASA,EAAG,GAAG,GAAG,aAAa,CAAC,EACrD,IAAc,IAAA,GAChB,EACE,oFACE,EAAQ,IACR;qCACJ,GAEA,EACE,IAAc,IAAA,GAEV,KADA,EAAG,IAAI,EAAWA,EAAG,GAAG,GAAG,iBAAiB,CAAC,EAE/C,IAAU,IAAA,IACZ,EACE;GACE,EAAU,IACV;0CACJ,GAIJ,IAAM,EAAM,EAAI,cAAc,KAAK,EACnC,EAAI,aAAa,QAAS,aAAa,EACvC,EAAI,YAAY,CAAG,EAEnB,IAAM,EAAU,SAAU,EAAM,EAAO,CACrC,EAAc,CAAI,EAClB,IAAM,EAAM,EAAG,IAAI,EAAS,CAAI,EAChC,GAAI,CAAC,EAAK,OACV,IAAM,EAAI,EAAI,cAAc,GAAG,EAC/B,EAAE,aAAa,OAAQ,EAAI,GAAG,EAC9B,EAAE,aAAa,QAAS,aAAa,EACrC,EAAI,YAAY,CAAC,CAAC,CAAC,YAAc,GAASA,EAAG,MAAM,MAAM,CAAG,EAC5D,EAAI,YAAY,EAAI,cAAc,IAAI,CAAC,CACzC,EAEA,EAAQA,EAAG,GAAG,GAAG,WAAW,CAAC,EAC7B,EAAQA,EAAG,GAAG,GAAG,aAAa,EAAG,WAAW,EAC5C,EAAQ,EAAK,MAAM,CAAC,EAGpB,IAAM,EAAQ,EAAI,cAAc,OAAO,EACvC,EAAI,YAAY,CAAK,EAgBrB,EAAM,UAfQ,CAAC,OAAQ,QAAS,SAAU,SAAU,UAAU,CAAC,CAAC,IAAI,CAClD,CAAC,CAChB,IAAI,SAAU,EAAG,CAChB,EAAc,CAAC,EACf,IAAM,EAAQ,EAAG,IAAI,EAAS,CAAC,EACzB,EAAI,EAAQA,EAAG,MAAM,YAAY,CAAK,EAAI,GAChD,MACE,2DACAA,EAAG,MAAM,YAAY,CAAC,EACtB,uCACA,EACA,YAEJ,CAAC,CAAC,CACD,KAAK;CACc,EAEtB,IAAM,EAAgB,SAAU,EAAI,EAAM,CACpC,GAGG,EAAS;EAAyC,CAAI,CAC/D,EAKI,GACF,EAAG,QAAQ,iBAAiB,EAAM,IAAK,EAAS,SAAU,EAAI,EAAM,CAC7D,GAAI,EAAS,qBAAuB,EAAQ,IAAM,CAAI,EAE3D,IAAM,EAAe,EAAG,IAAI,EAAO,EAAG,GAAG,cAAc,CAAC,EAElD,EAAyB,UAAY,CACzC,EAAI,aACFA,EAAG,QAAQ,4BACT,EACA,EACA,EACAA,EAAG,GAAG,GAAG,YAAY,EACrB,EACA,CACF,EACA,EAAM,WACR,CACF,EAEI,EAAG,IAAI,IAAA,GAAW,EAAG,KAAK,YAAY,EAAG,EAAG,GAAG,UAAU,EAC3D,EAAuB,EACd,EACT,EACG,KAAK,CAAY,CAAC,CAClB,KAAK,SAAU,EAAO,CACrB,EACG,KAAK,EAAG,KAAK,EAAc,EAAG,KAAK,SAAS,CAAC,CAAC,CAAC,CAC/C,KAAK,UAAY,CAChB,EAAuB,CACzB,CAAC,CAAC,CACD,MAAM,SAAU,EAAG,CAClB,QAAQ,IAAI,kCAAoC,CAAC,CACnD,CAAC,CACL,CAAC,CAAC,CACD,MAAM,SAAU,EAAG,CAClB,QAAQ,IAAI,+BAAiC,CAAC,CAChD,CAAC,EAEH,QAAQ,IAAI,+CAAgD,EAE9D,EAAI,YACFA,EAAG,QAAQ,gBACT,EACA,EACA,EACAA,EAAG,GAAG,KAAK,SAAS,EACpB,EACA,CACF,CACF,EAEA,IAAI,EAAQ,EACT,mBAAmB,IAAA,GAAW,EAAK,MAAM,EAAG,IAAA,GAAW,CAAK,CAAC,CAC7D,IAAI,SAAU,EAAI,CACjB,OAAO,EAAG,MACZ,CAAC,EACG,EAAS,EAAG,KAAK,IAAA,GAAWA,EAAG,GAAG,IAAI,MAAM,EAAG,EAAK,MAAM,CAAC,EACjE,EAAQ,EAAM,OAAO,CAAM,CAAC,CAAC,KAAK,EAelC,EAAQ,SAbmB,EAAI,EAAM,EAAM,EAAS,CAClD,IAAM,EAAK,EAAK,IAAI,SAAU,EAAG,CAC/B,IAAI,EAAM,EAAG,IAAI,EAAG,CAAI,EAExB,MADA,GAAM,EAAM,EAAI,MAAQ,aACjB,CAAC,EAAK,CAAC,CAChB,CAAC,EAGD,OAFA,EAAG,KAAK,EACJ,GAAS,EAAG,QAAQ,EACjB,EAAG,IAAI,SAAU,EAAM,CAC5B,OAAO,EAAK,EACd,CAAC,CACH,EAEiB,EAAI,EAAOA,EAAG,GAAG,IAAI,SAAS,EAAG,EAAI,EAElD,EAAM,OAAS,GACjB,EAAI,YACFA,EAAG,QAAQ,qBACT,EACA,EACA,EACA,EAAK,MAAM,EACX,EACA,CACE,SAAU,GACV,UAAW,mBACX,KAAM,aACN,UAAW,EAAK,MAAM,EACtB,kBAAmB,SAAU,EAAM,CACjC,IAAM,EAAK,CAAC,EAIZ,OAHA,EAAG,KACDC,EAAK,GAAG,EAAMD,EAAG,GAAG,IAAI,MAAM,EAAG,EAAK,MAAM,EAAG,EAAK,IAAI,CAAC,CAC3D,EACO,CACT,CACF,EACA,EACA,CACF,CACF,EAGF,EAAI,YAAY,EAAI,cAAc,IAAI,CAAC,EAIvC,IAAM,EAAW,EAAQ,YAAY,CAAG,EAExC,EAAc,EAAG,KAAK,SAAS,CAAC,EAEhC,EAAG,QAAQ,eAAe,EAAK,EAAS,CAAG,EAC3C,EAAc,EAAG,GAAG,YAAY,CAAC,EAEjC,EACG,YAAY,EAAI,cAAc,IAAI,CAAC,CAAC,CACpC,aAAa,QAAS,aAAa,EAGtC,EAAS,kBAAkB,EAAK,EAAO,GAAO,SAC5C,EACA,EACA,CACA,MAAO,EAAE,EAAK,OAAO,EACvB,CAAC,EACD,EAAS,kBAAkB,EAAK,EAAO,GAAM,SAC3C,EACA,EACA,CACA,MAAO,EAAE,EAAK,OAAO,EACvB,CAAC,CACH,CAAC,CAQL,MAAW,EAAE,uCAuJX,UA5HiC,CAC/B,IAAM,EAAQ,CAAC,EACT,EAAY,CAAC,EACb,EAAoB,CAAC,EACrB,EAAQ,EAAG,KAAK,IAAA,GAAW,EAAK,MAAM,EAAG,CAAO,EAChD,EAAiB,EAAM,IAAI,SAAU,EAAG,CAC5C,OAAO,EAAE,IAAI,CACf,CAAC,EACD,EAAG,QACA,KAAK,CAAc,CAAC,CACpB,KAAK,UAAY,CAChB,EAAM,QAAQ,SAAU,EAAG,CACzB,IAAM,EAAO,EAAG,IAAI,EAAG,EAAG,GAAG,MAAM,CAAC,EAC9B,EAAO,GAAQ,GAAK,EAAK,MAAA,CAAO,MAAM,EAAG,CAAC,EAAI,OAChD,EAAK,EAAG,IAAI,EAAG,EAAG,IAAI,MAAM,CAAC,EAGjC,GADA,AAAS,IAAKA,EAAG,GAAG,GAAG,aAAa,EAChC,GAAM,EAAG,IAAK,CAChB,IAAM,EAAQ,EAAG,IACZ,EAAU,KAAO,EAAU,GAAQ,GACnC,EAAkB,KAAO,EAAkB,GAAQ,CAAC,GACpD,EAAM,KAAQ,EAAM,GAAS,GAC7B,EAAkB,EAAK,CAAC,KAC3B,EAAkB,EAAK,CAAC,GAAS,GAGnC,IAAM,EAAM,EAAG,IAAI,EAAGA,EAAG,GAAG,GAAG,QAAQ,CAAC,EAIxC,GAHK,GACH,EAAS,wBAA0B,EAAM,QAAU,CAAC,EAElD,EAAK,CACP,IAAM,EAAS,WAAW,EAAI,KAAK,EACnC,EAAM,IAAU,EAChB,EAAkB,EAAK,CAAC,IAAU,EAClC,EAAU,IAAS,CACrB,CACF,CACF,CAAC,EAED,IAAM,EAAQ,CAAC,EACX,EAAa,EACX,EAAQ,CAAC,EACX,EAEJ,IAAK,IAAM,KAAK,EAGV,OAAO,UAAU,eAAe,KAAK,EAAmB,CAAC,GAC3D,EAAM,KAAK,CAAC,EAGhB,EAAM,KAAK,EACX,IAAM,EAAK,EAAM,OACb,EAEE,EAAQ,EAAI,YAAY,EAAI,cAAc,OAAO,CAAC,EAMxD,GALA,EAAM,aACJ,QACA,gHACF,EAEI,EAAK,EAAG,CACV,IAAM,EAAS,EAAM,YAAY,EAAI,cAAc,IAAI,CAAC,EAExD,IADA,EAAO,YAAY,EAAW,EAAE,CAAC,EAC5B,EAAI,EAAG,EAAI,EAAI,IAClB,EAAO,YAAY,EAAW,EAAM,EAAE,CAAC,EAEzC,EAAO,YAAY,EAAW,OAAO,CAAC,CACxC,CAEA,IAAK,IAAM,KAAO,EAGZ,OAAO,UAAU,eAAe,KAAK,EAAO,CAAG,IACjD,EAAM,KAAK,CAAG,EACd,GAAc,EAAM,IAGxB,EAAM,KAAK,EACX,IAAI,EAAK,EAAO,EAChB,IAAK,IAAI,EAAI,EAAG,EAAI,EAAM,OAAQ,IAAK,CACrC,IAAM,EAAM,EAAG,IAAI,EAAM,EAAE,EAI3B,GAHA,EAAM,EAAM,YAAY,EAAI,cAAc,IAAI,CAAC,EAC/C,EAAQ,EAAI,YAAY,EAAI,cAAc,IAAI,CAAC,EAC/C,EAAM,YAAcA,EAAG,MAAM,MAAM,CAAG,EAClC,EAAK,EACP,IAAK,EAAI,EAAG,EAAI,EAAI,IAClB,EAAI,EAAkB,EAAM,GAAG,CAAC,EAAM,IACtC,EAAO,EAAI,YAAY,EAAY,EAAG,EAAI,CAAC,EAG/C,EAAI,YAAY,EAAY,EAAM,EAAM,IAAK,EAAI,CAAC,CACpD,CAGA,GAAI,EAAM,OAAS,EAAG,CAGpB,GAFA,EAAM,EAAM,YAAY,EAAI,cAAc,IAAI,CAAC,EAC/C,EAAI,YAAY,EAAW,OAAO,CAAC,EAC/B,EAAK,EACP,IAAK,EAAI,EAAG,EAAI,EAAI,IAClB,EAAI,EAAU,EAAM,IACpB,EAAO,EAAI,YAAY,EAAY,EAAI,EAAG,CAAC,EAAI,EAAE,CAAC,EAGtD,EAAO,EAAI,YAAY,EAAY,CAAU,CAAC,EAC9C,EAAK,aACH,QACA,uCACF,CACF,CAEA,IAAM,EAAM,EAAiB,EAAK,CAAK,EACvC,EAAI,aACF,QACA,4EACF,EACA,EAAI,YAAY,CAAG,EAEnB,EAAG,QAAQ,eAAe,EAAK,EAAS,CAAG,CAC7C,CAAC,CAAC,CACD,MAAM,SAAU,EAAG,CAClB,EAAS,+BAAiC,CAAC,CAC7C,CAAC,CACL,EACa,EAGf,OAAO,CACT,CACF"}
|