solid-panes 5.0.0-1 → 5.1.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 +67 -2
- package/dist/RDFXMLPane2.cjs.js.map +1 -1
- package/dist/RDFXMLPane2.esm.js.map +1 -1
- package/dist/_virtual/~icons/lucide/arrow-left.cjs.js.map +1 -1
- package/dist/_virtual/~icons/lucide/arrow-left.esm.js.map +1 -1
- package/dist/_virtual/~icons/lucide/cake.cjs.js +2 -0
- package/dist/_virtual/~icons/lucide/cake.cjs.js.map +1 -0
- package/dist/_virtual/~icons/lucide/cake.esm.js +11 -0
- package/dist/_virtual/~icons/lucide/cake.esm.js.map +1 -0
- package/dist/_virtual/~icons/lucide/camera.cjs.js +2 -0
- package/dist/_virtual/~icons/lucide/camera.cjs.js.map +1 -0
- package/dist/_virtual/~icons/lucide/camera.esm.js +11 -0
- package/dist/_virtual/~icons/lucide/camera.esm.js.map +1 -0
- package/dist/_virtual/~icons/lucide/circle-user-round.cjs.js +2 -0
- package/dist/_virtual/~icons/lucide/circle-user-round.cjs.js.map +1 -0
- package/dist/_virtual/~icons/lucide/circle-user-round.esm.js +11 -0
- package/dist/_virtual/~icons/lucide/circle-user-round.esm.js.map +1 -0
- package/dist/_virtual/~icons/lucide/ellipsis-vertical.cjs.js.map +1 -1
- package/dist/_virtual/~icons/lucide/ellipsis-vertical.esm.js.map +1 -1
- package/dist/_virtual/~icons/lucide/folder-open.cjs.js.map +1 -1
- package/dist/_virtual/~icons/lucide/folder-open.esm.js.map +1 -1
- package/dist/_virtual/~icons/lucide/folder.cjs.js.map +1 -1
- package/dist/_virtual/~icons/lucide/folder.esm.js.map +1 -1
- package/dist/_virtual/~icons/lucide/globe.cjs.js.map +1 -1
- package/dist/_virtual/~icons/lucide/globe.esm.js.map +1 -1
- package/dist/_virtual/~icons/lucide/help-circle.cjs.js.map +1 -1
- package/dist/_virtual/~icons/lucide/help-circle.esm.js.map +1 -1
- package/dist/_virtual/~icons/lucide/layout-dashboard.cjs.js.map +1 -1
- package/dist/_virtual/~icons/lucide/layout-dashboard.esm.js.map +1 -1
- package/dist/_virtual/~icons/lucide/lock-keyhole.cjs.js.map +1 -1
- package/dist/_virtual/~icons/lucide/lock-keyhole.esm.js.map +1 -1
- package/dist/_virtual/~icons/lucide/mail.cjs.js +2 -0
- package/dist/_virtual/~icons/lucide/mail.cjs.js.map +1 -0
- package/dist/_virtual/~icons/lucide/mail.esm.js +11 -0
- package/dist/_virtual/~icons/lucide/mail.esm.js.map +1 -0
- package/dist/_virtual/~icons/lucide/map-pin.cjs.js +2 -0
- package/dist/_virtual/~icons/lucide/map-pin.cjs.js.map +1 -0
- package/dist/_virtual/~icons/lucide/map-pin.esm.js +11 -0
- package/dist/_virtual/~icons/lucide/map-pin.esm.js.map +1 -0
- package/dist/_virtual/~icons/lucide/pencil.cjs.js.map +1 -1
- package/dist/_virtual/~icons/lucide/pencil.esm.js.map +1 -1
- package/dist/_virtual/~icons/lucide/phone.cjs.js +2 -0
- package/dist/_virtual/~icons/lucide/phone.cjs.js.map +1 -0
- package/dist/_virtual/~icons/lucide/phone.esm.js +11 -0
- package/dist/_virtual/~icons/lucide/phone.esm.js.map +1 -0
- package/dist/_virtual/~icons/lucide/settings-2.cjs.js.map +1 -1
- package/dist/_virtual/~icons/lucide/settings-2.esm.js.map +1 -1
- package/dist/_virtual/~icons/lucide/share-2.cjs.js.map +1 -1
- package/dist/_virtual/~icons/lucide/share-2.esm.js.map +1 -1
- package/dist/_virtual/~icons/lucide/user-round-cog.cjs.js.map +1 -1
- package/dist/_virtual/~icons/lucide/user-round-cog.esm.js.map +1 -1
- package/dist/_virtual/~icons/lucide/user-round-plus.cjs.js +2 -0
- package/dist/_virtual/~icons/lucide/user-round-plus.cjs.js.map +1 -0
- package/dist/_virtual/~icons/lucide/user-round-plus.esm.js +11 -0
- package/dist/_virtual/~icons/lucide/user-round-plus.esm.js.map +1 -0
- package/dist/_virtual/~icons/lucide/user.cjs.js.map +1 -1
- package/dist/_virtual/~icons/lucide/user.esm.js.map +1 -1
- package/dist/_virtual/~icons/lucide/users.cjs.js.map +1 -1
- package/dist/_virtual/~icons/lucide/users.esm.js.map +1 -1
- package/dist/_virtual/~icons/lucide/x.cjs.js +2 -0
- package/dist/_virtual/~icons/lucide/x.cjs.js.map +1 -0
- package/dist/_virtual/~icons/lucide/x.esm.js +11 -0
- package/dist/_virtual/~icons/lucide/x.esm.js.map +1 -0
- package/dist/audio/audioPane.cjs.js +1 -1
- package/dist/audio/audioPane.cjs.js.map +1 -1
- package/dist/audio/audioPane.esm.js +1 -5
- package/dist/audio/audioPane.esm.js.map +1 -1
- package/dist/classInstancePane.cjs.js.map +1 -1
- package/dist/classInstancePane.esm.js.map +1 -1
- package/dist/components/editor-card/EditorCard.cjs.js +1 -1
- package/dist/components/editor-card/EditorCard.cjs.js.map +1 -1
- package/dist/components/editor-card/EditorCard.esm.js +4 -7
- package/dist/components/editor-card/EditorCard.esm.js.map +1 -1
- package/dist/components/editor-card/EditorCard.styles.cjs.js.map +1 -1
- package/dist/components/editor-card/EditorCard.styles.esm.js.map +1 -1
- package/dist/components/file-explorer-header/FileExplorerHeader.cjs.js +1 -1
- package/dist/components/file-explorer-header/FileExplorerHeader.cjs.js.map +1 -1
- package/dist/components/file-explorer-header/FileExplorerHeader.esm.js +2 -2
- package/dist/components/file-explorer-header/FileExplorerHeader.esm.js.map +1 -1
- package/dist/components/file-explorer-header/FileExplorerHeader.styles.cjs.js.map +1 -1
- package/dist/components/file-explorer-header/FileExplorerHeader.styles.esm.js.map +1 -1
- package/dist/components/file-explorer-header/FileExplorerHeaderControls.cjs.js +1 -1
- package/dist/components/file-explorer-header/FileExplorerHeaderControls.cjs.js.map +1 -1
- package/dist/components/file-explorer-header/FileExplorerHeaderControls.esm.js +3 -3
- package/dist/components/file-explorer-header/FileExplorerHeaderControls.esm.js.map +1 -1
- package/dist/components/file-explorer-header/FileExplorerHeaderControls.styles.cjs.js.map +1 -1
- package/dist/components/file-explorer-header/FileExplorerHeaderControls.styles.esm.js.map +1 -1
- package/dist/components/file-explorer-header/FileExplorerHeaderSummary.cjs.js +1 -1
- package/dist/components/file-explorer-header/FileExplorerHeaderSummary.cjs.js.map +1 -1
- package/dist/components/file-explorer-header/FileExplorerHeaderSummary.esm.js +2 -2
- package/dist/components/file-explorer-header/FileExplorerHeaderSummary.esm.js.map +1 -1
- package/dist/components/file-explorer-header/FileExplorerHeaderSummary.styles.cjs.js.map +1 -1
- package/dist/components/file-explorer-header/FileExplorerHeaderSummary.styles.esm.js.map +1 -1
- package/dist/components/file-explorer-header/FileExplorerProvider.cjs.js +5 -5
- package/dist/components/file-explorer-header/FileExplorerProvider.cjs.js.map +1 -1
- package/dist/components/file-explorer-header/FileExplorerProvider.d.ts.map +1 -1
- package/dist/components/file-explorer-header/FileExplorerProvider.esm.js +97 -96
- package/dist/components/file-explorer-header/FileExplorerProvider.esm.js.map +1 -1
- package/dist/components/file-explorer-header/FileExplorerProvider.styles.cjs.js.map +1 -1
- package/dist/components/file-explorer-header/FileExplorerProvider.styles.esm.js.map +1 -1
- package/dist/components/header/Header.cjs.js +1 -1
- package/dist/components/header/Header.cjs.js.map +1 -1
- package/dist/components/header/Header.esm.js +2 -2
- package/dist/components/header/Header.esm.js.map +1 -1
- package/dist/components/header/Header.styles.cjs.js +1 -1
- package/dist/components/header/Header.styles.cjs.js.map +1 -1
- package/dist/components/header/Header.styles.esm.js +1 -1
- package/dist/components/header/Header.styles.esm.js.map +1 -1
- package/dist/components/navbar/Navbar.cjs.js +1 -1
- package/dist/components/navbar/Navbar.cjs.js.map +1 -1
- package/dist/components/navbar/Navbar.d.ts +2 -0
- package/dist/components/navbar/Navbar.d.ts.map +1 -1
- package/dist/components/navbar/Navbar.esm.js +2 -2
- package/dist/components/navbar/Navbar.esm.js.map +1 -1
- package/dist/components/navbar/Navbar.styles.cjs.js +1 -1
- package/dist/components/navbar/Navbar.styles.cjs.js.map +1 -1
- package/dist/components/navbar/Navbar.styles.esm.js +1 -1
- package/dist/components/navbar/Navbar.styles.esm.js.map +1 -1
- package/dist/components/profile-heading/ProfileHeading.cjs.js +95 -0
- package/dist/components/profile-heading/ProfileHeading.cjs.js.map +1 -0
- package/dist/components/profile-heading/ProfileHeading.d.ts +45 -0
- package/dist/components/profile-heading/ProfileHeading.d.ts.map +1 -0
- package/dist/components/profile-heading/ProfileHeading.esm.js +480 -0
- package/dist/components/profile-heading/ProfileHeading.esm.js.map +1 -0
- package/dist/components/profile-heading/ProfileHeading.styles.cjs.js +2 -0
- package/dist/components/profile-heading/ProfileHeading.styles.cjs.js.map +1 -0
- package/dist/components/profile-heading/ProfileHeading.styles.esm.js +7 -0
- package/dist/components/profile-heading/ProfileHeading.styles.esm.js.map +1 -0
- package/dist/components/profile-heading/editor/index.d.ts +3 -0
- package/dist/components/profile-heading/editor/index.d.ts.map +1 -0
- package/dist/components/profile-heading/editor/sections/contactInfo/types.d.ts +44 -0
- package/dist/components/profile-heading/editor/sections/contactInfo/types.d.ts.map +1 -0
- package/dist/components/profile-heading/editor/sections/heading/HeadingEditDialog.cjs.js +297 -0
- package/dist/components/profile-heading/editor/sections/heading/HeadingEditDialog.cjs.js.map +1 -0
- package/dist/components/profile-heading/editor/sections/heading/HeadingEditDialog.d.ts +5 -0
- package/dist/components/profile-heading/editor/sections/heading/HeadingEditDialog.d.ts.map +1 -0
- package/dist/components/profile-heading/editor/sections/heading/HeadingEditDialog.esm.js +642 -0
- package/dist/components/profile-heading/editor/sections/heading/HeadingEditDialog.esm.js.map +1 -0
- package/dist/components/profile-heading/editor/sections/heading/dateHelpers.cjs.js +2 -0
- package/dist/components/profile-heading/editor/sections/heading/dateHelpers.cjs.js.map +1 -0
- package/dist/components/profile-heading/editor/sections/heading/dateHelpers.d.ts +4 -0
- package/dist/components/profile-heading/editor/sections/heading/dateHelpers.d.ts.map +1 -0
- package/dist/components/profile-heading/editor/sections/heading/dateHelpers.esm.js +16 -0
- package/dist/components/profile-heading/editor/sections/heading/dateHelpers.esm.js.map +1 -0
- package/dist/components/profile-heading/editor/sections/heading/imageHelpers.cjs.js +2 -0
- package/dist/components/profile-heading/editor/sections/heading/imageHelpers.cjs.js.map +1 -0
- package/dist/components/profile-heading/editor/sections/heading/imageHelpers.d.ts +5 -0
- package/dist/components/profile-heading/editor/sections/heading/imageHelpers.d.ts.map +1 -0
- package/dist/components/profile-heading/editor/sections/heading/imageHelpers.esm.js +76 -0
- package/dist/components/profile-heading/editor/sections/heading/imageHelpers.esm.js.map +1 -0
- package/dist/components/profile-heading/editor/sections/heading/imagePreview.cjs.js +19 -0
- package/dist/components/profile-heading/editor/sections/heading/imagePreview.cjs.js.map +1 -0
- package/dist/components/profile-heading/editor/sections/heading/imagePreview.d.ts +2 -0
- package/dist/components/profile-heading/editor/sections/heading/imagePreview.d.ts.map +1 -0
- package/dist/components/profile-heading/editor/sections/heading/imagePreview.esm.js +28 -0
- package/dist/components/profile-heading/editor/sections/heading/imagePreview.esm.js.map +1 -0
- package/dist/components/profile-heading/editor/sections/heading/mutations.cjs.js +2 -0
- package/dist/components/profile-heading/editor/sections/heading/mutations.cjs.js.map +1 -0
- package/dist/components/profile-heading/editor/sections/heading/mutations.d.ts +4 -0
- package/dist/components/profile-heading/editor/sections/heading/mutations.d.ts.map +1 -0
- package/dist/components/profile-heading/editor/sections/heading/mutations.esm.js +151 -0
- package/dist/components/profile-heading/editor/sections/heading/mutations.esm.js.map +1 -0
- package/dist/components/profile-heading/editor/sections/heading/types.d.ts +34 -0
- package/dist/components/profile-heading/editor/sections/heading/types.d.ts.map +1 -0
- package/dist/components/profile-heading/editor/sections/shared/contactTypeUtils.cjs.js +2 -0
- package/dist/components/profile-heading/editor/sections/shared/contactTypeUtils.cjs.js.map +1 -0
- package/dist/components/profile-heading/editor/sections/shared/contactTypeUtils.d.ts +7 -0
- package/dist/components/profile-heading/editor/sections/shared/contactTypeUtils.d.ts.map +1 -0
- package/dist/components/profile-heading/editor/sections/shared/contactTypeUtils.esm.js +20 -0
- package/dist/components/profile-heading/editor/sections/shared/contactTypeUtils.esm.js.map +1 -0
- package/dist/components/profile-heading/editor/sections/shared/idNodeFactory.cjs.js +2 -0
- package/dist/components/profile-heading/editor/sections/shared/idNodeFactory.cjs.js.map +1 -0
- package/dist/components/profile-heading/editor/sections/shared/idNodeFactory.d.ts +3 -0
- package/dist/components/profile-heading/editor/sections/shared/idNodeFactory.d.ts.map +1 -0
- package/dist/components/profile-heading/editor/sections/shared/idNodeFactory.esm.js +11 -0
- package/dist/components/profile-heading/editor/sections/shared/idNodeFactory.esm.js.map +1 -0
- package/dist/components/profile-heading/editor/sections/shared/phoneCountries.cjs.js +2 -0
- package/dist/components/profile-heading/editor/sections/shared/phoneCountries.cjs.js.map +1 -0
- package/dist/components/profile-heading/editor/sections/shared/phoneCountries.d.ts +20 -0
- package/dist/components/profile-heading/editor/sections/shared/phoneCountries.d.ts.map +1 -0
- package/dist/components/profile-heading/editor/sections/shared/phoneCountries.esm.js +1291 -0
- package/dist/components/profile-heading/editor/sections/shared/phoneCountries.esm.js.map +1 -0
- package/dist/components/profile-heading/editor/sections/shared/rdfMutationHelpers.cjs.js +2 -0
- package/dist/components/profile-heading/editor/sections/shared/rdfMutationHelpers.cjs.js.map +1 -0
- package/dist/components/profile-heading/editor/sections/shared/rdfMutationHelpers.d.ts +45 -0
- package/dist/components/profile-heading/editor/sections/shared/rdfMutationHelpers.d.ts.map +1 -0
- package/dist/components/profile-heading/editor/sections/shared/rdfMutationHelpers.esm.js +211 -0
- package/dist/components/profile-heading/editor/sections/shared/rdfMutationHelpers.esm.js.map +1 -0
- package/dist/components/profile-heading/editor/sections/shared/rowState.cjs.js +2 -0
- package/dist/components/profile-heading/editor/sections/shared/rowState.cjs.js.map +1 -0
- package/dist/components/profile-heading/editor/sections/shared/rowState.d.ts +21 -0
- package/dist/components/profile-heading/editor/sections/shared/rowState.d.ts.map +1 -0
- package/dist/components/profile-heading/editor/sections/shared/rowState.esm.js +18 -0
- package/dist/components/profile-heading/editor/sections/shared/rowState.esm.js.map +1 -0
- package/dist/components/profile-heading/editor/sections/shared/sanitizeUtils.cjs.js +2 -0
- package/dist/components/profile-heading/editor/sections/shared/sanitizeUtils.cjs.js.map +1 -0
- package/dist/components/profile-heading/editor/sections/shared/sanitizeUtils.d.ts +5 -0
- package/dist/components/profile-heading/editor/sections/shared/sanitizeUtils.d.ts.map +1 -0
- package/dist/components/profile-heading/editor/sections/shared/sanitizeUtils.esm.js +18 -0
- package/dist/components/profile-heading/editor/sections/shared/sanitizeUtils.esm.js.map +1 -0
- package/dist/components/profile-heading/editor/sections/shared/types.d.ts +31 -0
- package/dist/components/profile-heading/editor/sections/shared/types.d.ts.map +1 -0
- package/dist/components/profile-heading/editor/textUtils.cjs.js +2 -0
- package/dist/components/profile-heading/editor/textUtils.cjs.js.map +1 -0
- package/dist/components/profile-heading/editor/textUtils.d.ts +6 -0
- package/dist/components/profile-heading/editor/textUtils.d.ts.map +1 -0
- package/dist/components/profile-heading/editor/textUtils.esm.js +26 -0
- package/dist/components/profile-heading/editor/textUtils.esm.js.map +1 -0
- package/dist/components/profile-heading/editor/texts/buttonTexts.d.ts +9 -0
- package/dist/components/profile-heading/editor/texts/buttonTexts.d.ts.map +1 -0
- package/dist/components/profile-heading/editor/texts/dialogTexts.cjs.js +2 -0
- package/dist/components/profile-heading/editor/texts/dialogTexts.cjs.js.map +1 -0
- package/dist/components/profile-heading/editor/texts/dialogTexts.d.ts +14 -0
- package/dist/components/profile-heading/editor/texts/dialogTexts.d.ts.map +1 -0
- package/dist/components/profile-heading/editor/texts/dialogTexts.esm.js +6 -0
- package/dist/components/profile-heading/editor/texts/dialogTexts.esm.js.map +1 -0
- package/dist/components/profile-heading/editor/texts/messageTexts.cjs.js +2 -0
- package/dist/components/profile-heading/editor/texts/messageTexts.cjs.js.map +1 -0
- package/dist/components/profile-heading/editor/texts/messageTexts.d.ts +42 -0
- package/dist/components/profile-heading/editor/texts/messageTexts.d.ts.map +1 -0
- package/dist/components/profile-heading/editor/texts/messageTexts.esm.js +6 -0
- package/dist/components/profile-heading/editor/texts/messageTexts.esm.js.map +1 -0
- package/dist/components/profile-heading/editor/texts/profileTexts.d.ts +14 -0
- package/dist/components/profile-heading/editor/texts/profileTexts.d.ts.map +1 -0
- package/dist/components/profile-heading/editor/texts/qrCodeTexts.d.ts +2 -0
- package/dist/components/profile-heading/editor/texts/qrCodeTexts.d.ts.map +1 -0
- package/dist/components/profile-heading/editor/texts.d.ts +6 -0
- package/dist/components/profile-heading/editor/texts.d.ts.map +1 -0
- package/dist/components/profile-heading/editor/ui/dialog.d.ts +41 -0
- package/dist/components/profile-heading/editor/ui/dialog.d.ts.map +1 -0
- package/dist/components/profile-heading/editor/ui/dialog2.cjs.js +17 -0
- package/dist/components/profile-heading/editor/ui/dialog2.cjs.js.map +1 -0
- package/dist/components/profile-heading/editor/ui/dialog2.esm.js +263 -0
- package/dist/components/profile-heading/editor/ui/dialog2.esm.js.map +1 -0
- package/dist/components/profile-heading/editor/ui/spinner.cjs.js +5 -0
- package/dist/components/profile-heading/editor/ui/spinner.cjs.js.map +1 -0
- package/dist/components/profile-heading/editor/ui/spinner.d.ts +3 -0
- package/dist/components/profile-heading/editor/ui/spinner.d.ts.map +1 -0
- package/dist/components/profile-heading/editor/ui/spinner.esm.js +12 -0
- package/dist/components/profile-heading/editor/ui/spinner.esm.js.map +1 -0
- package/dist/components/profile-heading/editor/utils/errorDisplay.cjs.js +2 -0
- package/dist/components/profile-heading/editor/utils/errorDisplay.cjs.js.map +1 -0
- package/dist/components/profile-heading/editor/utils/errorDisplay.d.ts +2 -0
- package/dist/components/profile-heading/editor/utils/errorDisplay.d.ts.map +1 -0
- package/dist/components/profile-heading/editor/utils/errorDisplay.esm.js +18 -0
- package/dist/components/profile-heading/editor/utils/errorDisplay.esm.js.map +1 -0
- package/dist/components/profile-heading/friendActions.cjs.js +2 -0
- package/dist/components/profile-heading/friendActions.cjs.js.map +1 -0
- package/dist/components/profile-heading/friendActions.d.ts +11 -0
- package/dist/components/profile-heading/friendActions.d.ts.map +1 -0
- package/dist/components/profile-heading/friendActions.esm.js +32 -0
- package/dist/components/profile-heading/friendActions.esm.js.map +1 -0
- package/dist/components/profile-heading/index.cjs.js +1 -0
- package/dist/components/profile-heading/index.d.ts +5 -0
- package/dist/components/profile-heading/index.d.ts.map +1 -0
- package/dist/components/profile-heading/index.esm.js +1 -0
- package/dist/components/profile-heading/profileHeadingData.cjs.js +2 -0
- package/dist/components/profile-heading/profileHeadingData.cjs.js.map +1 -0
- package/dist/components/profile-heading/profileHeadingData.d.ts +6 -0
- package/dist/components/profile-heading/profileHeadingData.d.ts.map +1 -0
- package/dist/components/profile-heading/profileHeadingData.esm.js +81 -0
- package/dist/components/profile-heading/profileHeadingData.esm.js.map +1 -0
- package/dist/components/resource-actions-menu/ResourceActionsMenu.cjs.js +1 -1
- package/dist/components/resource-actions-menu/ResourceActionsMenu.cjs.js.map +1 -1
- package/dist/components/resource-actions-menu/ResourceActionsMenu.esm.js +2 -2
- package/dist/components/resource-actions-menu/ResourceActionsMenu.esm.js.map +1 -1
- package/dist/components/resource-actions-menu/ResourceActionsMenu.styles.cjs.js.map +1 -1
- package/dist/components/resource-actions-menu/ResourceActionsMenu.styles.esm.js.map +1 -1
- package/dist/dashboard/basicPreferences.cjs.js.map +1 -1
- package/dist/dashboard/basicPreferences.esm.js.map +1 -1
- package/dist/dashboard/dashboardPane.cjs.js.map +1 -1
- package/dist/dashboard/dashboardPane.esm.js.map +1 -1
- package/dist/dashboard/homepage.cjs.js.map +1 -1
- package/dist/dashboard/homepage.esm.js.map +1 -1
- package/dist/dashboard/ontologyData.cjs.js.map +1 -1
- package/dist/dashboard/ontologyData.esm.js.map +1 -1
- package/dist/dashboard/preferencesFormText.cjs.js.map +1 -1
- package/dist/dashboard/preferencesFormText.esm.js.map +1 -1
- package/dist/dataContentPane2.cjs.js.map +1 -1
- package/dist/dataContentPane2.esm.js.map +1 -1
- package/dist/defaultPane2.cjs.js.map +1 -1
- package/dist/defaultPane2.esm.js.map +1 -1
- package/dist/dokieli/dokieliPane.cjs.js.map +1 -1
- package/dist/dokieli/dokieliPane.esm.js.map +1 -1
- package/dist/dokieli/new.cjs.js.map +1 -1
- package/dist/dokieli/new.esm.js.map +1 -1
- package/dist/form/pane.cjs.js.map +1 -1
- package/dist/form/pane.esm.js.map +1 -1
- package/dist/home/homePane.cjs.js.map +1 -1
- package/dist/home/homePane.esm.js.map +1 -1
- package/dist/humanReadablePane2.cjs.js.map +1 -1
- package/dist/humanReadablePane2.esm.js.map +1 -1
- package/dist/icons/folder.cjs.js.map +1 -1
- package/dist/icons/folder.esm.js.map +1 -1
- package/dist/icons/friends.cjs.js.map +1 -1
- package/dist/icons/friends.esm.js.map +1 -1
- package/dist/icons/person.cjs.js.map +1 -1
- package/dist/icons/person.esm.js.map +1 -1
- package/dist/imagePane2.cjs.js.map +1 -1
- package/dist/imagePane2.esm.js.map +1 -1
- package/dist/index.cjs.js +1 -1
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.esm.js +15 -14
- package/dist/index.esm.js.map +1 -1
- package/dist/internal/internalPane2.cjs.js +1 -1
- package/dist/internal/internalPane2.cjs.js.map +1 -1
- package/dist/internal/internalPane2.esm.js +2 -5
- package/dist/internal/internalPane2.esm.js.map +1 -1
- package/dist/mainPage/header.cjs.js +1 -1
- package/dist/mainPage/header.cjs.js.map +1 -1
- package/dist/mainPage/header.d.ts +2 -2
- package/dist/mainPage/header.d.ts.map +1 -1
- package/dist/mainPage/header.esm.js +48 -44
- package/dist/mainPage/header.esm.js.map +1 -1
- package/dist/mainPage/index.cjs.js +1 -1
- package/dist/mainPage/index.cjs.js.map +1 -1
- package/dist/mainPage/index.d.ts.map +1 -1
- package/dist/mainPage/index.esm.js +27 -21
- package/dist/mainPage/index.esm.js.map +1 -1
- package/dist/mainPage/navbar.cjs.js +1 -1
- package/dist/mainPage/navbar.cjs.js.map +1 -1
- package/dist/mainPage/navbar.d.ts +3 -2
- package/dist/mainPage/navbar.d.ts.map +1 -1
- package/dist/mainPage/navbar.esm.js +77 -42
- package/dist/mainPage/navbar.esm.js.map +1 -1
- package/dist/mainPage/navigation.cjs.js +2 -0
- package/dist/mainPage/navigation.cjs.js.map +1 -0
- package/dist/mainPage/navigation.d.ts +6 -0
- package/dist/mainPage/navigation.d.ts.map +1 -0
- package/dist/mainPage/navigation.esm.js +22 -0
- package/dist/mainPage/navigation.esm.js.map +1 -0
- package/dist/mainPage/profileHeading.d.ts +5 -0
- package/dist/mainPage/profileHeading.d.ts.map +1 -0
- package/dist/mainPage/profileHeading2.cjs.js +2 -0
- package/dist/mainPage/profileHeading2.cjs.js.map +1 -0
- package/dist/mainPage/profileHeading2.esm.js +158 -0
- package/dist/mainPage/profileHeading2.esm.js.map +1 -0
- package/dist/n3Pane2.cjs.js.map +1 -1
- package/dist/n3Pane2.esm.js.map +1 -1
- package/dist/navigation/browserEvents.cjs.js +2 -0
- package/dist/navigation/browserEvents.cjs.js.map +1 -0
- package/dist/navigation/browserEvents.d.ts +15 -0
- package/dist/navigation/browserEvents.d.ts.map +1 -0
- package/dist/navigation/browserEvents.esm.js +32 -0
- package/dist/navigation/browserEvents.esm.js.map +1 -0
- package/dist/navigation/chrome.cjs.js +2 -0
- package/dist/navigation/chrome.cjs.js.map +1 -0
- package/dist/navigation/chrome.d.ts +69 -0
- package/dist/navigation/chrome.d.ts.map +1 -0
- package/dist/navigation/chrome.esm.js +43 -0
- package/dist/navigation/chrome.esm.js.map +1 -0
- package/dist/navigation/controller.cjs.js +2 -0
- package/dist/navigation/controller.cjs.js.map +1 -0
- package/dist/navigation/controller.d.ts +51 -0
- package/dist/navigation/controller.d.ts.map +1 -0
- package/dist/navigation/controller.esm.js +45 -0
- package/dist/navigation/controller.esm.js.map +1 -0
- package/dist/navigation/events.cjs.js +2 -0
- package/dist/navigation/events.cjs.js.map +1 -0
- package/dist/navigation/events.d.ts +17 -0
- package/dist/navigation/events.d.ts.map +1 -0
- package/dist/navigation/events.esm.js +18 -0
- package/dist/navigation/events.esm.js.map +1 -0
- package/dist/navigation/navbarVisibility.cjs.js +2 -0
- package/dist/navigation/navbarVisibility.cjs.js.map +1 -0
- package/dist/navigation/navbarVisibility.d.ts +5 -0
- package/dist/navigation/navbarVisibility.d.ts.map +1 -0
- package/dist/navigation/navbarVisibility.esm.js +26 -0
- package/dist/navigation/navbarVisibility.esm.js.map +1 -0
- package/dist/navigation/options.cjs.js +2 -0
- package/dist/navigation/options.cjs.js.map +1 -0
- package/dist/navigation/options.d.ts +16 -0
- package/dist/navigation/options.d.ts.map +1 -0
- package/dist/navigation/options.esm.js +8 -0
- package/dist/navigation/options.esm.js.map +1 -0
- package/dist/navigation/podContext.cjs.js +2 -0
- package/dist/navigation/podContext.cjs.js.map +1 -0
- package/dist/navigation/podContext.d.ts +21 -0
- package/dist/navigation/podContext.d.ts.map +1 -0
- package/dist/navigation/podContext.esm.js +62 -0
- package/dist/navigation/podContext.esm.js.map +1 -0
- package/dist/navigation/state.cjs.js +2 -0
- package/dist/navigation/state.cjs.js.map +1 -0
- package/dist/navigation/state.d.ts +40 -0
- package/dist/navigation/state.d.ts.map +1 -0
- package/dist/navigation/state.esm.js +41 -0
- package/dist/navigation/state.esm.js.map +1 -0
- package/dist/outline/context.cjs.js.map +1 -1
- package/dist/outline/context.esm.js.map +1 -1
- package/dist/outline/manager2.cjs.js +1 -1
- package/dist/outline/manager2.cjs.js.map +1 -1
- package/dist/outline/manager2.esm.js +388 -354
- package/dist/outline/manager2.esm.js.map +1 -1
- package/dist/outline/outlineIcons.cjs.js.map +1 -1
- package/dist/outline/outlineIcons.esm.js.map +1 -1
- package/dist/outline/propertyViews.cjs.js.map +1 -1
- package/dist/outline/propertyViews.esm.js.map +1 -1
- package/dist/outline/queryByExample.cjs.js.map +1 -1
- package/dist/outline/queryByExample.esm.js.map +1 -1
- package/dist/outline/userInput.cjs.js +1 -1
- package/dist/outline/userInput.cjs.js.map +1 -1
- package/dist/outline/userInput.esm.js +12 -13
- package/dist/outline/userInput.esm.js.map +1 -1
- package/dist/outline/viewAsImage.cjs.js.map +1 -1
- package/dist/outline/viewAsImage.esm.js.map +1 -1
- package/dist/outline/viewAsMbox.cjs.js.map +1 -1
- package/dist/outline/viewAsMbox.esm.js.map +1 -1
- package/dist/pad/padPane2.cjs.js +1 -1
- package/dist/pad/padPane2.cjs.js.map +1 -1
- package/dist/pad/padPane2.esm.js +2 -6
- package/dist/pad/padPane2.esm.js.map +1 -1
- package/dist/playlist/playlistPane.cjs.js.map +1 -1
- package/dist/playlist/playlistPane.esm.js.map +1 -1
- package/dist/registerPanes.cjs.js.map +1 -1
- package/dist/registerPanes.esm.js.map +1 -1
- package/dist/schedule/formsForSchedule.cjs.js.map +1 -1
- package/dist/schedule/formsForSchedule.esm.js.map +1 -1
- package/dist/schedule/schedulePane2.cjs.js +1 -1
- package/dist/schedule/schedulePane2.cjs.js.map +1 -1
- package/dist/schedule/schedulePane2.esm.js +1 -5
- package/dist/schedule/schedulePane2.esm.js.map +1 -1
- package/dist/sharing/sharingPane.cjs.js.map +1 -1
- package/dist/sharing/sharingPane.esm.js.map +1 -1
- package/dist/slideshow/slideshowPane.cjs.js.map +1 -1
- package/dist/slideshow/slideshowPane.esm.js.map +1 -1
- package/dist/social/editProfileDetails.cjs.js +1 -1
- package/dist/social/editProfileDetails.cjs.js.map +1 -1
- package/dist/social/editProfileDetails.esm.js +0 -2
- package/dist/social/editProfileDetails.esm.js.map +1 -1
- package/dist/social/icons.cjs.js +4 -4
- package/dist/social/icons.cjs.js.map +1 -1
- package/dist/social/icons.esm.js +5 -5
- package/dist/social/icons.esm.js.map +1 -1
- package/dist/social/socialPane.d.ts +0 -1
- package/dist/social/socialPane.d.ts.map +1 -1
- package/dist/social/socialPane2.cjs.js +3 -3
- package/dist/social/socialPane2.cjs.js.map +1 -1
- package/dist/social/socialPane2.esm.js +97 -154
- package/dist/social/socialPane2.esm.js.map +1 -1
- package/dist/social/socialSections.cjs.js +1 -1
- package/dist/social/socialSections.cjs.js.map +1 -1
- package/dist/social/socialSections.d.ts +2 -1
- package/dist/social/socialSections.d.ts.map +1 -1
- package/dist/social/socialSections.esm.js +54 -129
- package/dist/social/socialSections.esm.js.map +1 -1
- package/dist/social/triage.cjs.js.map +1 -1
- package/dist/social/triage.esm.js.map +1 -1
- package/dist/tabbed/tabbedPane.cjs.js.map +1 -1
- package/dist/tabbed/tabbedPane.esm.js.map +1 -1
- package/dist/tableViewPane.cjs.js.map +1 -1
- package/dist/tableViewPane.esm.js.map +1 -1
- package/dist/transaction/pane.cjs.js.map +1 -1
- package/dist/transaction/pane.esm.js +1 -1
- package/dist/transaction/pane.esm.js.map +1 -1
- package/dist/transaction/period.cjs.js.map +1 -1
- package/dist/transaction/period.esm.js.map +1 -1
- package/dist/trip/tripPane.cjs.js.map +1 -1
- package/dist/trip/tripPane.esm.js.map +1 -1
- package/dist/trustedApplications/trustedApplications.dom.cjs.js.map +1 -1
- package/dist/trustedApplications/trustedApplications.dom.esm.js.map +1 -1
- package/dist/trustedApplications/trustedApplications.utils.cjs.js.map +1 -1
- package/dist/trustedApplications/trustedApplications.utils.esm.js.map +1 -1
- package/dist/trustedApplications/trustedApplications.view.cjs.js.map +1 -1
- package/dist/trustedApplications/trustedApplications.view.esm.js.map +1 -1
- package/dist/types.d.ts +3 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/ui/pane.cjs.js +1 -1
- package/dist/ui/pane.cjs.js.map +1 -1
- package/dist/ui/pane.esm.js +2 -5
- package/dist/ui/pane.esm.js.map +1 -1
- package/dist/utils/paneUtils.cjs.js +1 -1
- package/dist/utils/paneUtils.cjs.js.map +1 -1
- package/dist/utils/paneUtils.esm.js +4 -4
- package/dist/utils/paneUtils.esm.js.map +1 -1
- package/dist/utils/podUtils.cjs.js.map +1 -1
- package/dist/utils/podUtils.esm.js.map +1 -1
- package/dist/utils/viewerUtils.cjs.js +2 -0
- package/dist/utils/viewerUtils.cjs.js.map +1 -0
- package/dist/utils/viewerUtils.d.ts +5 -0
- package/dist/utils/viewerUtils.d.ts.map +1 -0
- package/dist/utils/viewerUtils.esm.js +13 -0
- package/dist/utils/viewerUtils.esm.js.map +1 -0
- package/dist/utils/webIdUtils.cjs.js +1 -1
- package/dist/utils/webIdUtils.cjs.js.map +1 -1
- package/dist/utils/webIdUtils.d.ts +1 -0
- package/dist/utils/webIdUtils.d.ts.map +1 -1
- package/dist/utils/webIdUtils.esm.js +23 -19
- package/dist/utils/webIdUtils.esm.js.map +1 -1
- package/dist/versionInfo.cjs.js +1 -1
- package/dist/versionInfo.cjs.js.map +1 -1
- package/dist/versionInfo.esm.js +11 -11
- package/dist/versionInfo.esm.js.map +1 -1
- package/dist/video/videoPane.cjs.js.map +1 -1
- package/dist/video/videoPane.esm.js.map +1 -1
- package/package.json +15 -14
|
@@ -1,80 +1,17 @@
|
|
|
1
|
-
import
|
|
1
|
+
import "./icons.esm.js";
|
|
2
2
|
import "./editProfileDetails.esm.js";
|
|
3
|
-
import { ns as
|
|
4
|
-
import { Statement as
|
|
5
|
-
import { createAddMeToYourFriendsButton as o } from "profile-pane";
|
|
3
|
+
import { ns as e, utils as t, widgets as n } from "solid-ui";
|
|
4
|
+
import { Statement as r } from "rdflib";
|
|
6
5
|
//#region src/social/socialSections.ts
|
|
7
|
-
function
|
|
8
|
-
let l =
|
|
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");
|
|
6
|
+
function i(i) {
|
|
7
|
+
let { dom: a, 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 } = i, x = function() {}, S = a.createElement("section");
|
|
71
8
|
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(
|
|
9
|
+
let C = S.appendChild(a.createElement("div"));
|
|
73
10
|
C.classList.add("social-main", "social-main--mutual", "flex-column");
|
|
74
|
-
let w =
|
|
11
|
+
let w = a.createElement("div");
|
|
75
12
|
w.classList.add("social-mutual-summary", "flex-column"), C.appendChild(w);
|
|
76
13
|
let T = function() {
|
|
77
|
-
let e = w.appendChild(
|
|
14
|
+
let e = w.appendChild(a.createElement("div"));
|
|
78
15
|
return e.classList.add("social-mutual-summary-line"), e;
|
|
79
16
|
}, E = function() {
|
|
80
17
|
let e = T();
|
|
@@ -89,34 +26,34 @@ function l(e) {
|
|
|
89
26
|
} else if (d) E().appendChild(_(" say you know each other."));
|
|
90
27
|
else {
|
|
91
28
|
w.classList.add("social-mutual-summary--confirm");
|
|
92
|
-
let e = w.appendChild(
|
|
29
|
+
let e = w.appendChild(a.createElement("div"));
|
|
93
30
|
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
31
|
}
|
|
95
32
|
if (u && !d) {
|
|
96
|
-
let e =
|
|
33
|
+
let e = a.createElement("span");
|
|
97
34
|
e.className = "social-mutual-confirm-prompt", e.appendChild(_("Confirm you know ")), e.appendChild(g(_(s), o.uri));
|
|
98
|
-
let
|
|
35
|
+
let t = v(e, new r(c, m, o, p ?? void 0), !!d, {
|
|
99
36
|
disabled: !f,
|
|
100
37
|
disabledTitle: f ? void 0 : "Your profile is not editable"
|
|
101
38
|
});
|
|
102
|
-
|
|
39
|
+
t.classList.add("social-mutual-checkbox-form"), C.appendChild(t);
|
|
103
40
|
}
|
|
104
41
|
if (h.length) {
|
|
105
|
-
let
|
|
106
|
-
|
|
107
|
-
let
|
|
108
|
-
return
|
|
42
|
+
let r = C.appendChild(a.createElement("table"));
|
|
43
|
+
r.className = "social-main social-friends-list social-friends-grid";
|
|
44
|
+
let i = function(t) {
|
|
45
|
+
return n.personTR(a, e.foaf("knows"), t, {
|
|
109
46
|
renderSupportingInfo: y,
|
|
110
47
|
renderNameSuffix: b
|
|
111
48
|
});
|
|
112
49
|
};
|
|
113
50
|
x = function() {
|
|
114
|
-
let
|
|
115
|
-
let
|
|
116
|
-
return
|
|
51
|
+
let e = [...h].sort((e, n) => {
|
|
52
|
+
let r = t.label(e) || e.value, i = t.label(n) || n.value;
|
|
53
|
+
return r.localeCompare(i);
|
|
117
54
|
});
|
|
118
|
-
|
|
119
|
-
return
|
|
55
|
+
t.syncTableToArray(r, e, i, function(e, t) {
|
|
56
|
+
return i(t);
|
|
120
57
|
});
|
|
121
58
|
}, x();
|
|
122
59
|
}
|
|
@@ -126,86 +63,74 @@ function l(e) {
|
|
|
126
63
|
refreshMutualFriends: x
|
|
127
64
|
};
|
|
128
65
|
}
|
|
129
|
-
function
|
|
130
|
-
let { dom:
|
|
66
|
+
function a(t) {
|
|
67
|
+
let { dom: r, subject: i, profile: a, editable: o, renderSupportingInfo: s, renderNameSuffix: c } = t, l = r.createElement("section");
|
|
131
68
|
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(
|
|
69
|
+
let u = l.appendChild(r.createElement("table"));
|
|
133
70
|
u.className = "social-main";
|
|
134
|
-
let d =
|
|
71
|
+
let d = n.attachmentList(r, i, u, {
|
|
135
72
|
doc: a,
|
|
136
73
|
modify: !!o,
|
|
137
|
-
predicate:
|
|
74
|
+
predicate: e.foaf("knows"),
|
|
138
75
|
noun: "friend",
|
|
139
76
|
refreshOnDocumentLoad: !1,
|
|
140
77
|
renderSupportingInfo: s,
|
|
141
78
|
renderNameSuffix: c
|
|
142
79
|
});
|
|
143
80
|
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 =
|
|
81
|
+
let f = d.querySelector("tr"), p = f?.children?.[0], m = f?.children?.[1], h = r.createElement("div");
|
|
145
82
|
if (h.classList.add("social-friends-header-actions"), p instanceof HTMLTableCellElement) {
|
|
146
83
|
p.classList.add("social-friends-header-dropzone-cell");
|
|
147
|
-
let e =
|
|
148
|
-
e.className = "social-friends-header-dropzone", e.setAttribute("role", "presentation"), e.appendChild(
|
|
84
|
+
let e = r.createElement("table");
|
|
85
|
+
e.className = "social-friends-header-dropzone", e.setAttribute("role", "presentation"), e.appendChild(r.createElement("tbody")).appendChild(r.createElement("tr")).appendChild(p), h.appendChild(e);
|
|
149
86
|
} else if (p instanceof HTMLElement) {
|
|
150
87
|
for (; p.firstChild;) h.appendChild(p.firstChild);
|
|
151
88
|
p.remove();
|
|
152
89
|
}
|
|
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
90
|
m instanceof HTMLTableCellElement && (m.colSpan = 2);
|
|
166
|
-
let
|
|
167
|
-
return
|
|
91
|
+
let g = d.querySelector("td table");
|
|
92
|
+
return g instanceof HTMLTableElement && g.classList.add("social-friends-grid"), {
|
|
168
93
|
section: l,
|
|
169
94
|
mainTable: u,
|
|
170
95
|
friendsList: d
|
|
171
96
|
};
|
|
172
97
|
}
|
|
173
|
-
function
|
|
174
|
-
let { dom:
|
|
98
|
+
function o(r) {
|
|
99
|
+
let { dom: i, triage: a, renderSupportingInfo: o, renderNameSuffix: s } = r, c = i.createElement("section");
|
|
175
100
|
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(
|
|
101
|
+
let l = c.appendChild(i.createElement("div"));
|
|
177
102
|
l.classList.add("social-main", "social-main--requests", "flex-column");
|
|
178
|
-
let u = l.appendChild(
|
|
103
|
+
let u = l.appendChild(i.createElement("p"));
|
|
179
104
|
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,
|
|
181
|
-
let
|
|
182
|
-
|
|
183
|
-
let a =
|
|
105
|
+
let d = function(e, t, n) {
|
|
106
|
+
let r = l.appendChild(i.createElement("section"));
|
|
107
|
+
r.classList.add("social-requests__group", "flex-column");
|
|
108
|
+
let a = r.appendChild(i.createElement("div"));
|
|
184
109
|
a.className = "social-requests__group-header";
|
|
185
|
-
let o = a.appendChild(
|
|
110
|
+
let o = a.appendChild(i.createElement("h2"));
|
|
186
111
|
o.className = "social-requests__group-title", o.textContent = e;
|
|
187
|
-
let s = a.appendChild(
|
|
188
|
-
s.className = "social-requests__group-description", s.textContent =
|
|
189
|
-
let c =
|
|
190
|
-
c.className = "social-requests__empty", c.textContent =
|
|
191
|
-
let u =
|
|
112
|
+
let s = a.appendChild(i.createElement("p"));
|
|
113
|
+
s.className = "social-requests__group-description", s.textContent = t;
|
|
114
|
+
let c = r.appendChild(i.createElement("p"));
|
|
115
|
+
c.className = "social-requests__empty", c.textContent = n;
|
|
116
|
+
let u = r.appendChild(i.createElement("table"));
|
|
192
117
|
return u.className = "social-main social-friends-list social-friends-grid social-requests__table", {
|
|
193
118
|
empty: c,
|
|
194
119
|
table: u
|
|
195
120
|
};
|
|
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(
|
|
197
|
-
return
|
|
121
|
+
}, 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(t) {
|
|
122
|
+
return n.personTR(i, e.foaf("knows"), t, {
|
|
198
123
|
renderSupportingInfo: o,
|
|
199
124
|
renderNameSuffix: s
|
|
200
125
|
});
|
|
201
126
|
}, h = function(e) {
|
|
202
|
-
return [...e].sort((e,
|
|
203
|
-
let
|
|
204
|
-
return
|
|
127
|
+
return [...e].sort((e, n) => {
|
|
128
|
+
let r = t.label(e) || e.value, i = t.label(n) || n.value;
|
|
129
|
+
return r.localeCompare(i);
|
|
205
130
|
});
|
|
206
|
-
}, g = function(e,
|
|
207
|
-
let
|
|
208
|
-
e.empty.hidden =
|
|
131
|
+
}, g = function(e, n) {
|
|
132
|
+
let r = h(n);
|
|
133
|
+
e.empty.hidden = r.length > 0, e.table.hidden = r.length === 0, t.syncTableToArray(e.table, r, m, function(e, t) {
|
|
209
134
|
return m(t);
|
|
210
135
|
});
|
|
211
136
|
}, _ = function(e) {
|
|
@@ -217,6 +142,6 @@ function d(e) {
|
|
|
217
142
|
};
|
|
218
143
|
}
|
|
219
144
|
//#endregion
|
|
220
|
-
export {
|
|
145
|
+
export { a as createAllFriendsSection, i as createMutualSection, o as createRequestsSection };
|
|
221
146
|
|
|
222
147
|
//# sourceMappingURL=socialSections.esm.js.map
|
|
@@ -1 +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":"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"}
|
|
1
|
+
{"version":3,"file":"socialSections.esm.js","names":["createMutualSection","options","refreshMutualFriends","mutualSection","dom","mutualContent","relationshipSummary","createRelationshipLine","line","youAndThem","link","text","meUri","familiar","subject","incoming","outgoing","incomingLine","confirmLabel","relationshipForm","buildCheckboxForm","Statement","me","knows","profile","editable","mutualConnections","mutualFriendsTable","createMutualRow","widgets","ns","target","sortedMutualConnections","leftLabel","utils","left","rightLabel","right","thing","createAllFriendsSection","allFriends","mainTable","friendsList","friendsListRow","friendsListPromptCell","friendsListRightCell","friendsHeaderActions","friendsHeaderDropzone","friendsItemsTable","createRequestsSection","requestsSection","requestsContent","note","createRequestGroup","group","header","heading","title","blurb","description","empty","emptyText","table","incomingGroup","pendingGroup","createPersonRow","sortNodes","nodes","syncRequestGroup","sortedNodes","refreshRequests","nextTriage","triage"],"sources":["../../src/social/socialSections.ts"],"sourcesContent":["import { DataBrowserContext } from 'pane-registry'\n// import { 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'\nimport type { ViewerMode } from '../types'\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 pronouns?: 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\n const friendDropButton = dom.createElement('button')\n friendDropButton.setAttribute('title', 'Drop friend here')\n friendDropButton.setAttribute('aria-label', 'Drop friend here')\n const buttonImage = dom.createElement('img')\n buttonImage.setAttribute('title', 'Drop friend here')\n buttonImage.setAttribute('alt', 'Drop friend here')\n friendDropButton.appendChild(buttonImage)\n\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 friendDropButton.appendChild(dropHint)\n headerActions.appendChild(friendDropButton)\n }\n\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 pronounsSpan = dom.createElement('span')\n pronounsSpan.classList.add('social-pane_header-pronouns')\n headerSummary.appendChild(pronounsSpan)\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 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":"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"}
|
|
@@ -1 +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,
|
|
1
|
+
{"version":3,"file":"triage.cjs.js","names":["ns","solid_ui","uniqueNamedNodes","seen","unique","node","nodes","key","triageFriends","outgoingFriends","store","subject","incomingFriends","confirmed","unconfirmed","requests","friend","incomingFriend","outgoingFriend","loadFriendshipTriage","context","fetcher","initialTriage","documentsToLoad","incomingStatements","statement","why","target"],"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":"A,0BAiBA,SAASE,EAAkB,EAAiC,CAC1D,IAAMC,EAAO,IAAI,IACXC,EAAsB,CAAC,EAE7B,IAAK,IAAMC,KAAQC,EAAO,CACxB,IAAMC,EAAMF,GAAM,MACbE,GAAO,GAAK,IAAIA,CAAG,IACxBJ,EAAK,IAAII,CAAG,EACZH,EAAO,KAAKC,CAAI,EAClB,CAEA,OAAOD,CACT,CAEA,SAAgBI,EAAe,EAAwB,EAAsC,CAC3F,IAAMC,EAAkBP,EAAiBQ,EAAM,KAAKC,EAASX,EAAAA,GAAG,KAAK,OAAO,CAAC,CAAgB,EACvFY,EAAkBV,EACtBQ,EAAM,KAAK,IAAA,GAAWV,EAAAA,GAAG,KAAK,OAAO,EAAGW,CAAO,CACjD,EACME,EAAyB,CAAC,EAC1BC,EAA2B,CAAC,EAC5BC,EAAwB,CAAC,EAE/B,IAAK,IAAMC,KAAUP,EACCG,EAAgB,KAAK,GAAkBK,EAAe,SAASD,CAAM,CACrF,EACFH,EAAU,KAAKG,CAAM,EAErBF,EAAY,KAAKE,CAAM,EAI3B,IAAK,IAAMA,KAAUJ,EACOH,EAAgB,KAAK,GAAkBS,EAAe,SAASF,CAAM,CAC1F,GACHD,EAAS,KAAKC,CAAM,EAIxB,MAAO,CACL,cAAeP,EACf,YACA,cACA,UACF,CACF,CAEA,eAAsBU,EACpB,EACA,EAC2B,CAC3B,IAAMT,EAAQU,EAAQ,QAAQ,MACxBC,EAAUX,EAAM,QAEtB,GAAI,CAACW,GAAW,OAAOA,EAAQ,MAAS,WACtC,OAAOb,EAAcE,EAAOC,CAAO,EAGrC,GAAI,CACF,MAAMU,EAAQ,KAAKV,EAAQ,IAAI,CAAC,CAClC,MAAQ,CAER,CAEA,IAAMW,EAAgBd,EAAcE,EAAOC,CAAO,EAC5CY,EAAkB,IAAI,IAE5BA,EAAgB,IAAIZ,EAAQ,IAAI,CAAC,CAAC,MAAOA,EAAQ,IAAI,CAAC,EAEtD,IAAK,IAAMK,IAAU,CAAC,GAAGM,EAAc,cAAe,GAAGA,EAAc,QAAQ,EAC7EC,EAAgB,IAAIP,EAAO,IAAI,CAAC,CAAC,MAAOA,EAAO,IAAI,CAAC,EAGtD,IAAMQ,EAAqBd,EAAM,mBAAmB,IAAA,GAAWV,EAAAA,GAAG,KAAK,OAAO,EAAGW,CAAO,EACxF,IAAK,IAAMc,KAAaD,EAAoB,CAC1C,IAAME,EAAMD,EAAU,IAClBC,GAAK,OACPH,EAAgB,IAAIG,EAAI,MAAOA,CAAG,CAEtC,CAEA,IAAK,IAAMC,KAAUJ,EAAgB,OAAO,EAC1C,GAAI,CACF,MAAMF,EAAQ,KAAKM,CAAM,CAC3B,MAAQ,CAER,CAGF,OAAOnB,EAAcE,EAAOC,CAAO,CACrC,C"}
|
|
@@ -1 +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,
|
|
1
|
+
{"version":3,"file":"triage.esm.js","names":["uniqueNamedNodes","seen","unique","node","nodes","key","triageFriends","outgoingFriends","store","subject","ns","incomingFriends","confirmed","unconfirmed","requests","friend","incomingFriend","outgoingFriend","loadFriendshipTriage","context","fetcher","initialTriage","documentsToLoad","incomingStatements","statement","why","target"],"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,SAASA,EAAkB,GAAiC;CAC1D,IAAMC,oBAAO,IAAI,IAAY,GACvBC,IAAsB,CAAC;CAE7B,KAAK,IAAMC,KAAQC,GAAO;EACxB,IAAMC,IAAMF,GAAM;EAClB,AAAKE,KAAO,GAAK,IAAIA,CAAG,MACxBJ,EAAK,IAAII,CAAG,GACZH,EAAO,KAAKC,CAAI;CAClB;CAEA,OAAOD;AACT;AAEA,SAAgBI,EAAe,GAAwB,GAAsC;CAC3F,IAAMC,IAAkBP,EAAiBQ,EAAM,KAAKC,GAASC,EAAG,KAAK,OAAO,CAAC,CAAgB,GACvFC,IAAkBX,EACtBQ,EAAM,KAAK,KAAA,GAAWE,EAAG,KAAK,OAAO,GAAGD,CAAO,CACjD,GACMG,IAAyB,CAAC,GAC1BC,IAA2B,CAAC,GAC5BC,IAAwB,CAAC;CAE/B,KAAK,IAAMC,KAAUR,GAEnB,AADoBI,EAAgB,MAAK,MAAkBK,EAAe,SAASD,CAAM,CACrF,IACFH,EAAU,KAAKG,CAAM,IAErBF,EAAY,KAAKE,CAAM;CAI3B,KAAK,IAAMA,KAAUJ,GAEnB,AAD0BJ,EAAgB,MAAK,MAAkBU,EAAe,SAASF,CAAM,CAC1F,KACHD,EAAS,KAAKC,CAAM;CAIxB,OAAO;EACL,eAAeR;EACf;EACA;EACA;CACF;AACF;AAEA,eAAsBW,EACpB,GACA,GAC2B;CAC3B,IAAMV,IAAQW,EAAQ,QAAQ,OACxBC,IAAUZ,EAAM;CAEtB,IAAI,CAACY,KAAW,OAAOA,EAAQ,QAAS,YACtC,OAAOd,EAAcE,GAAOC,CAAO;CAGrC,IAAI;EACF,MAAMW,EAAQ,KAAKX,EAAQ,IAAI,CAAC;CAClC,QAAQ,CAER;CAEA,IAAMY,IAAgBf,EAAcE,GAAOC,CAAO,GAC5Ca,oBAAkB,IAAI,IAAgC;CAE5D,EAAgB,IAAIb,EAAQ,IAAI,CAAC,CAAC,OAAOA,EAAQ,IAAI,CAAC;CAEtD,KAAK,IAAMM,KAAU,CAAC,GAAGM,EAAc,eAAe,GAAGA,EAAc,QAAQ,GAC7E,EAAgB,IAAIN,EAAO,IAAI,CAAC,CAAC,OAAOA,EAAO,IAAI,CAAC;CAGtD,IAAMQ,IAAqBf,EAAM,mBAAmB,KAAA,GAAWE,EAAG,KAAK,OAAO,GAAGD,CAAO;CACxF,KAAK,IAAMe,KAAaD,GAAoB;EAC1C,IAAME,IAAMD,EAAU;EACtB,AAAIC,GAAK,SACPH,EAAgB,IAAIG,EAAI,OAAOA,CAAG;CAEtC;CAEA,KAAK,IAAMC,KAAUJ,EAAgB,OAAO,GAC1C,IAAI;EACF,MAAMF,EAAQ,KAAKM,CAAM;CAC3B,QAAQ,CAER;CAGF,OAAOpB,EAAcE,GAAOC,CAAO;AACrC"}
|
|
@@ -1 +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,
|
|
1
|
+
{"version":3,"file":"tabbedPane.cjs.js","names":["icons","ns","tabs","widgets","solid_ui","TabbedPane","typeURIs","context","subject","dom","store","div","table","containerDiv","item","predicate"],"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":"A,0BASA,IAAMK,EAA6B,CACjC,KAAML,EAAAA,MAAM,SAAW,kBAEvB,KAAM,SAEN,SAAU,CAACC,EAAAA,GAAG,MAAM,WAAW,CAAC,EAGhC,OAAQ,EAAS,IAAY,CAG3B,IAAMK,EADKC,EAAQ,QAAQ,MACP,aAAaC,CAAO,EAIxC,OAHIP,EAAAA,GAAG,QAAQ,SAAS,CAAC,CAAC,OAAOK,EACxB,SAEF,IACT,EAEA,QAAS,EAAS,IAAY,CAC5B,IAAMG,EAAMF,EAAQ,IAEdG,EAAQH,EAAQ,QAAQ,MACxBI,EAAMF,EAAI,cAAc,KAAK,EA0BnC,OAxBE,SAAY,CACZ,GAAI,CAACC,EAAM,QACT,MAAU,MAAM,sBAAsB,EAExC,MAAMA,EAAM,QAAQ,KAAKF,CAAO,EAEhCG,EAAI,YAAYT,EAAAA,KAAK,UAAU,CAC7B,MACA,UACA,UAAWQ,EAAM,IAAIF,EAASP,EAAAA,GAAG,QAAQ,WAAW,CAAC,GAAKA,EAAAA,GAAG,QAAQ,UAAU,EAC/E,QAAS,GACT,YAAeS,EAAgB,SAASF,EAASP,EAAAA,GAAG,QAAQ,aAAa,CAAC,GAAK,IAC/E,YAAa,EAAc,IAAS,CAClC,EAAa,UAAY,GACzB,IAAMW,EAAQC,EAAa,YAAYN,EAAQ,IAAI,cAAc,OAAO,CAAC,EACxEA,EAAS,YAAYA,EAAQ,GAAG,CAAC,CAAS,YAAYO,EAAM,GAAM,KAAM,GAAO,IAAA,GAAWF,CAAK,CAClG,EACA,WAAY,EAAc,IAAS,CACjC,IAAMG,EAAYL,EAAM,IAAIF,EAASP,EAAAA,GAAG,QAAQ,WAAW,CAAC,EAC5DY,EAAa,YAAYV,EAAAA,QAAQ,SAASI,EAAQ,IAAKQ,EAAWD,EAAM,CAAC,CAAC,CAAC,CAC7E,EACA,gBAAiBJ,EAAM,SAASF,EAASP,EAAAA,GAAG,GAAG,iBAAiB,CAAC,GAAK,SACxE,CAAC,CAAC,CACJ,EAAA,CAAG,EACIU,CACT,CACF,E"}
|
|
@@ -1 +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,
|
|
1
|
+
{"version":3,"file":"tabbedPane.esm.js","names":["TabbedPane","icons","ns","typeURIs","context","subject","dom","store","div","tabs","table","containerDiv","item","predicate","widgets"],"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,IAAMA,IAA6B;CACjC,MAAMC,EAAM,WAAW;CAEvB,MAAM;CAEN,UAAU,CAACC,EAAG,MAAM,WAAW,CAAC;CAGhC,QAAQ,GAAS,MAAY;EAG3B,IAAMC,IADKC,EAAQ,QAAQ,MACP,aAAaC,CAAO;EAIxC,OAHIH,EAAG,QAAQ,SAAS,CAAC,CAAC,OAAOC,IACxB,WAEF;CACT;CAEA,SAAS,GAAS,MAAY;EAC5B,IAAMG,IAAMF,EAAQ,KAEdG,IAAQH,EAAQ,QAAQ,OACxBI,IAAMF,EAAI,cAAc,KAAK;EA0BnC,QAxBE,YAAY;GACZ,IAAI,CAACC,EAAM,SACT,MAAU,MAAM,sBAAsB;GAIxC,AAFA,MAAMA,EAAM,QAAQ,KAAKF,CAAO,GAEhCG,EAAI,YAAYC,EAAK,UAAU;IAC7B;IACA;IACA,WAAWF,EAAM,IAAIF,GAASH,EAAG,QAAQ,WAAW,CAAC,KAAKA,EAAG,QAAQ,UAAU;IAC/E,SAAS;IACT,aAAeK,EAAgB,SAASF,GAASH,EAAG,QAAQ,aAAa,CAAC,KAAK;IAC/E,aAAa,GAAc,MAAS;KAClC,EAAa,YAAY;KACzB,IAAMQ,IAAQC,EAAa,YAAYP,EAAQ,IAAI,cAAc,OAAO,CAAC;KACxE,EAAS,YAAYA,EAAQ,GAAG,CAAC,CAAS,YAAYQ,GAAM,IAAM,MAAM,IAAO,KAAA,GAAWF,CAAK;IAClG;IACA,YAAY,GAAc,MAAS;KACjC,IAAMG,IAAYN,EAAM,IAAIF,GAASH,EAAG,QAAQ,WAAW,CAAC;KAC5D,EAAa,YAAYY,EAAQ,SAASV,EAAQ,KAAKS,GAAWD,GAAM,CAAC,CAAC,CAAC;IAC7E;IACA,iBAAiBL,EAAM,SAASF,GAASH,EAAG,GAAG,iBAAiB,CAAC,KAAK;GACxE,CAAC,CAAC;EACJ,EAAA,CAAG,GACIM;CACT;AACF"}
|
|
@@ -1 +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,
|
|
1
|
+
{"version":3,"file":"tableViewPane.cjs.js","names":["UI","require_runtime","solid_ui","tableViewPane","store","context","subject","n","myDocument","div"],"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":"A,gGAmBA,IAAaG,EAAgB,CAC3B,KAAMH,EAAG,MAAM,iBAAmB,YAElC,KAAM,eAEN,MAAO,SAAU,EAAS,EAAS,CACjC,IAAMI,EAAQC,EAAQ,QAAQ,MAE9B,GAAI,CAACD,EAAM,IAAI,IAAA,GAAWJ,EAAG,GAAG,IAAI,MAAM,EAAGM,CAAO,EAClD,OAAO,KAET,IAAMC,EAAIH,EAAM,mBAAmB,IAAA,GAAWJ,EAAG,GAAG,IAAI,MAAM,EAAGM,CAAO,CAAC,CACtE,OASH,OARIC,IAAM,GAINA,EAAI,GAEC,KAEFP,EAAG,MAAM,MAAMM,CAAO,EAAI,QACnC,EAEA,OAAQ,SAAU,EAAS,EAAS,CAClC,IAAME,EAAaH,EAAQ,IACrBI,EAAMD,EAAW,cAAc,KAAK,EAG1C,OAFAC,EAAI,aAAa,QAAS,WAAW,EACrCA,EAAI,YAAYT,EAAG,MAAMQ,EAAY,CAAE,WAAYF,CAAQ,CAAC,CAAC,EACtDG,CACT,CACF,E"}
|
|
@@ -1 +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,
|
|
1
|
+
{"version":3,"file":"tableViewPane.esm.js","names":["UI","tableViewPane","store","context","subject","n","myDocument","div"],"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,IAAaC,IAAgB;CAC3B,MAAMD,EAAG,MAAM,mBAAmB;CAElC,MAAM;CAEN,OAAO,SAAU,GAAS,GAAS;EACjC,IAAME,IAAQC,EAAQ,QAAQ;EAE9B,IAAI,CAACD,EAAM,IAAI,KAAA,GAAWF,EAAG,GAAG,IAAI,MAAM,GAAGI,CAAO,GAClD,OAAO;EAET,IAAMC,IAAIH,EAAM,mBAAmB,KAAA,GAAWF,EAAG,GAAG,IAAI,MAAM,GAAGI,CAAO,CAAC,CACtE;EASH,OARIC,MAAM,KAINA,IAAI,KAEC,OAEFL,EAAG,MAAM,MAAMI,CAAO,IAAI;CACnC;CAEA,QAAQ,SAAU,GAAS,GAAS;EAClC,IAAME,IAAaH,EAAQ,KACrBI,IAAMD,EAAW,cAAc,KAAK;EAG1C,OAFAC,EAAI,aAAa,SAAS,WAAW,GACrCA,EAAI,YAAYP,EAAG,MAAMM,GAAY,EAAE,YAAYF,EAAQ,CAAC,CAAC,GACtDG;CACT;AACF"}
|