solid-panes 4.4.2-4 → 4.4.2-5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (170) hide show
  1. package/README.md +0 -30
  2. package/dist/_virtual/_rolldown/runtime.cjs.js +1 -1
  3. package/dist/_virtual/~icons/lucide/folder-open.cjs.js +2 -0
  4. package/dist/_virtual/~icons/lucide/folder-open.cjs.js.map +1 -0
  5. package/dist/_virtual/~icons/lucide/folder-open.esm.js +11 -0
  6. package/dist/_virtual/~icons/lucide/folder-open.esm.js.map +1 -0
  7. package/dist/_virtual/~icons/lucide/layout-dashboard.cjs.js +2 -0
  8. package/dist/_virtual/~icons/lucide/layout-dashboard.cjs.js.map +1 -0
  9. package/dist/_virtual/~icons/lucide/layout-dashboard.esm.js +11 -0
  10. package/dist/_virtual/~icons/lucide/layout-dashboard.esm.js.map +1 -0
  11. package/dist/_virtual/~icons/lucide/settings-2.cjs.js +2 -0
  12. package/dist/_virtual/~icons/lucide/settings-2.cjs.js.map +1 -0
  13. package/dist/_virtual/~icons/lucide/settings-2.esm.js +11 -0
  14. package/dist/_virtual/~icons/lucide/settings-2.esm.js.map +1 -0
  15. package/dist/_virtual/~icons/lucide/users.cjs.js +2 -0
  16. package/dist/_virtual/~icons/lucide/users.cjs.js.map +1 -0
  17. package/dist/_virtual/~icons/lucide/users.esm.js +11 -0
  18. package/dist/_virtual/~icons/lucide/users.esm.js.map +1 -0
  19. package/dist/components/header/Header.cjs.js +1 -1
  20. package/dist/components/header/Header.cjs.js.map +1 -1
  21. package/dist/components/navbar/Navbar.cjs.js +15 -0
  22. package/dist/components/navbar/Navbar.cjs.js.map +1 -0
  23. package/dist/components/navbar/Navbar.d.ts +14 -0
  24. package/dist/components/navbar/Navbar.d.ts.map +1 -0
  25. package/dist/components/navbar/Navbar.esm.js +232 -0
  26. package/dist/components/navbar/Navbar.esm.js.map +1 -0
  27. package/dist/components/navbar/Navbar.styles.cjs.js +2 -0
  28. package/dist/components/navbar/Navbar.styles.cjs.js.map +1 -0
  29. package/dist/components/navbar/Navbar.styles.esm.js +7 -0
  30. package/dist/components/navbar/Navbar.styles.esm.js.map +1 -0
  31. package/dist/components/navbar/index.cjs.js +1 -0
  32. package/dist/components/navbar/index.d.ts +4 -0
  33. package/dist/components/navbar/index.d.ts.map +1 -0
  34. package/dist/components/navbar/index.esm.js +1 -0
  35. package/dist/dashboard/basicPreferences.cjs.js +1 -1
  36. package/dist/dashboard/basicPreferences.cjs.js.map +1 -1
  37. package/dist/dashboard/dashboardPane.cjs.js +1 -1
  38. package/dist/dashboard/dashboardPane.cjs.js.map +1 -1
  39. package/dist/dashboard/homepage.cjs.js +1 -1
  40. package/dist/dashboard/homepage.cjs.js.map +1 -1
  41. package/dist/dashboard/homepage.esm.js +2 -2
  42. package/dist/dashboard/homepage.esm.js.map +1 -1
  43. package/dist/form/pane.cjs.js +1 -1
  44. package/dist/form/pane.cjs.js.map +1 -1
  45. package/dist/form/pane.esm.js +2 -1
  46. package/dist/form/pane.esm.js.map +1 -1
  47. package/dist/home/homePane.cjs.js +1 -1
  48. package/dist/home/homePane.cjs.js.map +1 -1
  49. package/dist/humanReadablePane2.cjs.js.map +1 -1
  50. package/dist/humanReadablePane2.esm.js.map +1 -1
  51. package/dist/index.cjs.js +1 -1
  52. package/dist/index.cjs.js.map +1 -1
  53. package/dist/index.esm.js +12 -7
  54. package/dist/index.esm.js.map +1 -1
  55. package/dist/internal/internalPane2.cjs.js +1 -1
  56. package/dist/internal/internalPane2.cjs.js.map +1 -1
  57. package/dist/mainPage/header.cjs.js +1 -1
  58. package/dist/mainPage/header.cjs.js.map +1 -1
  59. package/dist/mainPage/header.d.ts.map +1 -1
  60. package/dist/mainPage/header.esm.js +64 -17
  61. package/dist/mainPage/header.esm.js.map +1 -1
  62. package/dist/mainPage/index.cjs.js +1 -1
  63. package/dist/mainPage/index.cjs.js.map +1 -1
  64. package/dist/mainPage/index.d.ts +1 -9
  65. package/dist/mainPage/index.d.ts.map +1 -1
  66. package/dist/mainPage/index.esm.js +19 -21
  67. package/dist/mainPage/index.esm.js.map +1 -1
  68. package/dist/mainPage/navbar.cjs.js +2 -0
  69. package/dist/mainPage/navbar.cjs.js.map +1 -0
  70. package/dist/mainPage/navbar.d.ts +3 -0
  71. package/dist/mainPage/navbar.d.ts.map +1 -0
  72. package/dist/mainPage/navbar.esm.js +66 -0
  73. package/dist/mainPage/navbar.esm.js.map +1 -0
  74. package/dist/outline/context.d.ts +1 -1
  75. package/dist/outline/manager2.cjs.js +2 -2
  76. package/dist/outline/manager2.cjs.js.map +1 -1
  77. package/dist/outline/manager2.esm.js +330 -453
  78. package/dist/outline/manager2.esm.js.map +1 -1
  79. package/dist/outline/propertyViews.cjs.js +1 -1
  80. package/dist/outline/propertyViews.cjs.js.map +1 -1
  81. package/dist/outline/queryByExample.esm.js +1 -0
  82. package/dist/outline/queryByExample.esm.js.map +1 -1
  83. package/dist/outline/userInput.cjs.js +3 -3
  84. package/dist/outline/userInput.cjs.js.map +1 -1
  85. package/dist/outline/userInput.esm.js +4 -6
  86. package/dist/outline/userInput.esm.js.map +1 -1
  87. package/dist/pad/padPane2.cjs.js +1 -1
  88. package/dist/pad/padPane2.cjs.js.map +1 -1
  89. package/dist/pad/padPane2.esm.js +2 -1
  90. package/dist/pad/padPane2.esm.js.map +1 -1
  91. package/dist/schedule/schedulePane2.cjs.js +1 -1
  92. package/dist/schedule/schedulePane2.cjs.js.map +1 -1
  93. package/dist/schedule/schedulePane2.esm.js +2 -1
  94. package/dist/schedule/schedulePane2.esm.js.map +1 -1
  95. package/dist/sharing/sharingPane.cjs.js +1 -1
  96. package/dist/sharing/sharingPane.cjs.js.map +1 -1
  97. package/dist/social/editProfileDetails.cjs.js +1 -1
  98. package/dist/social/editProfileDetails.cjs.js.map +1 -1
  99. package/dist/social/socialPane2.cjs.js +1 -1
  100. package/dist/social/socialPane2.cjs.js.map +1 -1
  101. package/dist/social/socialPane2.esm.js +1 -1
  102. package/dist/social/socialSections.cjs.js +1 -1
  103. package/dist/social/socialSections.cjs.js.map +1 -1
  104. package/dist/social/triage.cjs.js +1 -1
  105. package/dist/social/triage.cjs.js.map +1 -1
  106. package/dist/tabbed/tabbedPane.cjs.js +1 -1
  107. package/dist/tabbed/tabbedPane.cjs.js.map +1 -1
  108. package/dist/transaction/pane.cjs.js.map +1 -1
  109. package/dist/transaction/pane.esm.js.map +1 -1
  110. package/dist/transaction/period.cjs.js.map +1 -1
  111. package/dist/transaction/period.esm.js.map +1 -1
  112. package/dist/trustedApplications/trustedApplications.dom.cjs.js +1 -1
  113. package/dist/trustedApplications/trustedApplications.dom.cjs.js.map +1 -1
  114. package/dist/trustedApplications/trustedApplications.utils.cjs.js +1 -1
  115. package/dist/trustedApplications/trustedApplications.utils.cjs.js.map +1 -1
  116. package/dist/trustedApplications/trustedApplications.view.cjs.js +1 -1
  117. package/dist/trustedApplications/trustedApplications.view.cjs.js.map +1 -1
  118. package/dist/utils/paneUtils.cjs.js +2 -0
  119. package/dist/utils/paneUtils.cjs.js.map +1 -0
  120. package/dist/utils/paneUtils.d.ts +19 -0
  121. package/dist/utils/paneUtils.d.ts.map +1 -0
  122. package/dist/utils/paneUtils.esm.js +52 -0
  123. package/dist/utils/paneUtils.esm.js.map +1 -0
  124. package/dist/utils/podUtils.cjs.js +2 -0
  125. package/dist/utils/podUtils.cjs.js.map +1 -0
  126. package/dist/utils/podUtils.d.ts +4 -0
  127. package/dist/utils/podUtils.d.ts.map +1 -0
  128. package/dist/utils/podUtils.esm.js +46 -0
  129. package/dist/utils/podUtils.esm.js.map +1 -0
  130. package/dist/utils/webIdUtils.cjs.js +2 -0
  131. package/dist/utils/webIdUtils.cjs.js.map +1 -0
  132. package/dist/utils/webIdUtils.d.ts +6 -0
  133. package/dist/utils/webIdUtils.d.ts.map +1 -0
  134. package/dist/utils/webIdUtils.esm.js +48 -0
  135. package/dist/utils/webIdUtils.esm.js.map +1 -0
  136. package/dist/versionInfo.cjs.js +1 -1
  137. package/dist/versionInfo.cjs.js.map +1 -1
  138. package/dist/versionInfo.esm.js +3 -3
  139. package/dist/versionInfo.esm.js.map +1 -1
  140. package/package.json +10 -13
  141. package/dist/icons/dashboard.cjs.js +0 -2
  142. package/dist/icons/dashboard.cjs.js.map +0 -1
  143. package/dist/icons/dashboard.esm.js +0 -6
  144. package/dist/icons/dashboard.esm.js.map +0 -1
  145. package/dist/icons/iconHelper.cjs.js +0 -2
  146. package/dist/icons/iconHelper.cjs.js.map +0 -1
  147. package/dist/icons/iconHelper.esm.js +0 -17
  148. package/dist/icons/iconHelper.esm.js.map +0 -1
  149. package/dist/icons/menu.cjs.js +0 -9
  150. package/dist/icons/menu.cjs.js.map +0 -1
  151. package/dist/icons/menu.esm.js +0 -6
  152. package/dist/icons/menu.esm.js.map +0 -1
  153. package/dist/mainPage/footer.cjs.js +0 -2
  154. package/dist/mainPage/footer.cjs.js.map +0 -1
  155. package/dist/mainPage/footer.d.ts +0 -13
  156. package/dist/mainPage/footer.d.ts.map +0 -1
  157. package/dist/mainPage/footer.esm.js +0 -18
  158. package/dist/mainPage/footer.esm.js.map +0 -1
  159. package/dist/mainPage/menu.d.ts +0 -6
  160. package/dist/mainPage/menu.d.ts.map +0 -1
  161. package/dist/mainPage/menu2.cjs.js +0 -2
  162. package/dist/mainPage/menu2.cjs.js.map +0 -1
  163. package/dist/mainPage/menu2.esm.js +0 -184
  164. package/dist/mainPage/menu2.esm.js.map +0 -1
  165. package/dist/profileUtils/ownerProfile.cjs.js +0 -2
  166. package/dist/profileUtils/ownerProfile.cjs.js.map +0 -1
  167. package/dist/profileUtils/ownerProfile.d.ts +0 -5
  168. package/dist/profileUtils/ownerProfile.d.ts.map +0 -1
  169. package/dist/profileUtils/ownerProfile.esm.js +0 -50
  170. package/dist/profileUtils/ownerProfile.esm.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"menu2.esm.js","names":[],"sources":["../../src/mainPage/menu.ts"],"sourcesContent":["import './menu.css'\nimport { OutlineManager } from '../outline/manager'\nimport { authSession, authn } from 'solid-logic'\nimport { NamedNode, sym } from 'rdflib'\nimport { loadProfileFromURI } from '../profileUtils/ownerProfile'\nimport menuIcon from '../icons/menu.svg?raw'\nimport { createUiIcon } from '../icons/iconHelper'\n\ntype MenuItem = {\n id?: string\n icon?: string\n paneName?: string\n subject?: NamedNode\n label: string\n onclick: () => void | Promise<void>\n}\n\nconst MENU_ICON = createUiIcon(menuIcon, 'Menu Icon', '#ffffff')\nconst MENU_COLLAPSED_KEY = 'solid-panes-menu-collapsed'\nlet menuCollapsed = false\n\nconst loadMenuCollapsedState = (): boolean => {\n try {\n return localStorage.getItem(MENU_COLLAPSED_KEY) === 'true'\n } catch (error) {\n return false\n }\n}\n\nconst saveMenuCollapsedState = (collapsed: boolean): void => {\n try {\n localStorage.setItem(MENU_COLLAPSED_KEY, String(collapsed))\n } catch (error) {\n // ignore storage errors\n }\n}\n\nconst updateMenuCollapseButton = (): void => {\n const collapseBtn = document.getElementById('MenuCollapseBtn') as HTMLButtonElement | null\n if (!collapseBtn) return\n collapseBtn.textContent = menuCollapsed ? '\\u203A' : '\\u2039'\n collapseBtn.setAttribute('aria-label', menuCollapsed ? 'Expand navigation menu' : 'Collapse navigation menu')\n}\n\nconst updateCollapseButtonPosition = (navMenu: HTMLElement | null, collapseBtn: HTMLButtonElement | null): void => {\n if (!navMenu || !collapseBtn) return\n const navRect = navMenu.getBoundingClientRect()\n const rootFontSize = parseFloat(getComputedStyle(document.documentElement).fontSize) || 16\n const buttonWidth = parseFloat(getComputedStyle(collapseBtn).width) || 1.25 * rootFontSize\n const offsetRem = (navRect.width - buttonWidth / 2) / rootFontSize\n collapseBtn.style.setProperty('left', `${offsetRem.toFixed(3)}rem`, 'important')\n}\n\nconst applyMenuCollapsedState = (navMenu: HTMLElement | null): void => {\n if (!navMenu) return\n navMenu.classList.toggle('collapsed', menuCollapsed)\n updateMenuCollapseButton()\n const collapseBtn = document.getElementById('MenuCollapseBtn') as HTMLButtonElement | null\n updateCollapseButtonPosition(navMenu, collapseBtn)\n}\n\nconst refreshAuthStateFromSession = async (): Promise<boolean> => {\n try {\n const webId = await authn.checkUser()\n return Boolean(webId || authn.currentUser())\n } catch {\n // Keep the menu responsive even if auth refresh is transiently unavailable.\n return Boolean(authn.currentUser())\n }\n}\n\nconst isLoggedIn = (): boolean => Boolean(authn.currentUser())\n\nconst setFooterVisibility = (loggedIn: boolean): void => {\n const footer = document.querySelector('solid-ui-footer') as HTMLElement | null\n if (!footer) return\n footer.style.display = loggedIn ? 'none' : ''\n}\n\nconst isViewingOwnProfile = (subject: NamedNode): boolean => {\n const currentUser = authn.currentUser()\n return Boolean(currentUser && subject && currentUser.sameTerm(subject))\n}\n\nconst ensureMenuSkeleton = () => {\n menuCollapsed = loadMenuCollapsedState()\n const root = document.querySelector('[role=\"main\"]') || document.body\n\n let navMenu = document.getElementById('NavMenu') as HTMLElement | null\n if (!navMenu) {\n navMenu = document.createElement('nav')\n navMenu.id = 'NavMenu'\n navMenu.className = 'app-nav'\n navMenu.setAttribute('aria-label', 'App navigation')\n navMenu.hidden = true\n\n const headerEl = document.createElement('div')\n headerEl.className = 'menu-header'\n\n const closeBtn = document.createElement('button')\n closeBtn.id = 'MenuCloseBtn'\n closeBtn.className = 'menu-close'\n closeBtn.type = 'button'\n closeBtn.setAttribute('aria-label', 'Close menu')\n closeBtn.textContent = '✕'\n headerEl.appendChild(closeBtn)\n\n const title = document.createElement('span')\n title.className = 'menu-header-title'\n title.textContent = 'Menu'\n headerEl.appendChild(title)\n\n navMenu.appendChild(headerEl)\n\n const authStateEl = document.createElement('div')\n authStateEl.id = 'AuthState'\n authStateEl.className = 'menu-auth-state'\n navMenu.appendChild(authStateEl)\n\n const contentEl = document.createElement('div')\n contentEl.id = 'NavMenuContent'\n contentEl.className = 'menu-content'\n navMenu.appendChild(contentEl)\n\n root.insertBefore(navMenu, root.firstChild)\n } else if (!navMenu.querySelector('.menu-header')) {\n const headerEl = document.createElement('div')\n headerEl.className = 'menu-header'\n\n const closeBtn = document.createElement('button')\n closeBtn.id = 'MenuCloseBtn'\n closeBtn.className = 'menu-close'\n closeBtn.type = 'button'\n closeBtn.setAttribute('aria-label', 'Close menu')\n closeBtn.textContent = '✕'\n headerEl.appendChild(closeBtn)\n\n const title = document.createElement('span')\n title.className = 'menu-header-title'\n title.textContent = 'Menu'\n headerEl.appendChild(title)\n\n navMenu.insertBefore(headerEl, navMenu.firstChild)\n }\n\n let toggle = document.getElementById('MenuToggleBtn') as HTMLButtonElement | null\n if (!toggle) {\n toggle = document.createElement('button')\n toggle.id = 'MenuToggleBtn'\n toggle.className = 'menu-toggle'\n toggle.type = 'button'\n toggle.setAttribute('aria-label', 'Toggle navigation menu')\n toggle.hidden = true\n const toggleImg = document.createElement('img')\n toggleImg.src = MENU_ICON\n toggleImg.alt = ''\n toggleImg.className = 'menu-toggle-icon'\n toggleImg.setAttribute('aria-hidden', 'true')\n toggle.appendChild(toggleImg)\n const toggleLabel = document.createElement('span')\n toggleLabel.id = 'MenuToggleLabel'\n toggleLabel.className = 'menu-toggle-label'\n toggle.appendChild(toggleLabel)\n root.insertBefore(toggle, root.firstChild)\n }\n\n let overlay = document.getElementById('MenuOverlay') as HTMLElement | null\n if (!overlay) {\n overlay = document.createElement('div')\n overlay.id = 'MenuOverlay'\n overlay.className = 'menu-overlay'\n overlay.hidden = true\n document.body.appendChild(overlay)\n }\n\n let collapseBtn = document.getElementById('MenuCollapseBtn') as HTMLButtonElement | null\n if (!collapseBtn) {\n collapseBtn = document.createElement('button')\n collapseBtn.id = 'MenuCollapseBtn'\n collapseBtn.className = 'menu-collapse'\n collapseBtn.type = 'button'\n collapseBtn.setAttribute('aria-label', 'Collapse navigation menu')\n collapseBtn.textContent = '\\u2039'\n collapseBtn.hidden = true\n document.body.appendChild(collapseBtn)\n }\n}\n\nconst getMenuItems = async (subject: NamedNode, outliner: any): Promise<MenuItem[]> => {\n try {\n const items = await outliner.getDashboardItems(subject)\n return items.map((element) => {\n const targetSubject = element.subject || (authn.currentUser() || subject)\n return {\n icon: element.icon,\n subject: targetSubject,\n paneName: element.tabName || element.paneName,\n label: element.label,\n onclick: () => openDashboardPane(targetSubject, outliner, element.tabName || element.paneName)\n }\n })\n } catch (error) {\n console.error('Unable to load navigation menu items', error)\n return []\n }\n}\n\nconst createMenuButton = (item: MenuItem) => {\n const button = document.createElement('button')\n button.className = 'menu-item'\n button.type = 'button'\n if (item.paneName) {\n button.dataset.paneName = item.paneName\n }\n\n if (item.icon) {\n const icon = document.createElement('img')\n icon.className = 'menu-item-icon'\n icon.src = item.icon\n icon.alt = ''\n icon.setAttribute('aria-hidden', 'true')\n button.appendChild(icon)\n }\n\n const label = document.createElement('span')\n label.className = 'menu-item-label'\n label.textContent = item.label\n button.appendChild(label)\n\n if (item.id) {\n button.id = item.id\n }\n\n button.addEventListener('click', async () => {\n await item.onclick()\n })\n\n return button\n}\n\nconst setActiveMenuItem = (container: HTMLElement, paneName?: string) => {\n const menuItems = Array.from(container.querySelectorAll<HTMLButtonElement>('.menu-item'))\n let activeItem: HTMLButtonElement | undefined\n\n menuItems.forEach((item) => {\n const isActive = Boolean(paneName) && item.dataset.paneName === paneName\n item.classList.toggle('menu-item-active', isActive)\n if (isActive) {\n item.setAttribute('aria-current', 'page')\n activeItem = item\n } else {\n item.removeAttribute('aria-current')\n }\n })\n\n if (paneName) {\n if (!activeItem && menuItems[0]) {\n // If an explicit pane name is provided but does not match any menu\n // item, fall back to clearing selection rather than selecting the first item.\n container.dataset.activePaneName = ''\n } else {\n container.dataset.activePaneName = paneName\n }\n } else {\n // If there is no active pane, do not auto-select the first menu item.\n container.dataset.activePaneName = ''\n }\n\n updateToggleLabel(activeItem)\n}\n\nexport const setActiveMenuPane = (paneName?: string): void => {\n const navMenuContent = document.getElementById('NavMenuContent') as HTMLElement | null\n if (!navMenuContent) return\n setActiveMenuItem(navMenuContent, paneName)\n}\n\nconst updateToggleLabel = (activeItem?: HTMLButtonElement): void => {\n const toggleLabel = document.getElementById('MenuToggleLabel')\n if (!toggleLabel) return\n toggleLabel.textContent = activeItem?.querySelector('.menu-item-label')?.textContent || ''\n}\n\nconst renderMenuItems = async (subject: NamedNode, outliner: OutlineManager, container: HTMLElement) => {\n const menuItems = await getMenuItems(subject, outliner)\n\n container.replaceChildren(...menuItems.map(createMenuButton))\n // If the user is logged in and viewing their own profile, select \"Your profile\"\n // by default. This also surfaces \"Your profile\" at the top of the mobile view\n // via the menu toggle label, which mirrors the active menu item.\n const activePane = isViewingOwnProfile(subject)\n ? 'profile'\n : container.dataset.activePaneName\n setActiveMenuItem(container, activePane)\n}\n\nexport const refreshMenu = (layout: 'mobile' | 'desktop') => {\n const navMenu = document.getElementById('NavMenu') as HTMLElement | null\n const toggle = document.getElementById('MenuToggleBtn') as HTMLButtonElement | null\n const collapseBtn = document.getElementById('MenuCollapseBtn') as HTMLButtonElement | null\n const overlay = document.getElementById('MenuOverlay') as HTMLElement | null\n\n if (!navMenu || !toggle || !overlay || !collapseBtn) return\n\n const loggedIn = isLoggedIn()\n if (!loggedIn) {\n navMenu.hidden = true\n navMenu.style.display = 'none'\n toggle.hidden = true\n toggle.style.display = 'none'\n collapseBtn.hidden = true\n collapseBtn.style.display = 'none'\n overlay.hidden = true\n overlay.style.display = 'none'\n setFooterVisibility(false)\n return\n }\n\n setFooterVisibility(true)\n\n if (layout === 'mobile') {\n navMenu.classList.add('mobile-hidden')\n navMenu.classList.remove('mobile-visible')\n toggle.hidden = false\n toggle.style.display = ''\n collapseBtn.hidden = true\n collapseBtn.style.display = 'none'\n overlay.hidden = true\n overlay.style.display = 'none'\n navMenu.hidden = false\n navMenu.style.display = ''\n navMenu.classList.remove('collapsed')\n toggle.setAttribute('aria-expanded', 'false')\n } else {\n navMenu.classList.remove('mobile-hidden', 'mobile-visible')\n toggle.hidden = true\n toggle.style.display = 'none'\n collapseBtn.hidden = false\n collapseBtn.style.display = ''\n overlay.hidden = true\n overlay.style.display = 'none'\n navMenu.hidden = false\n navMenu.style.display = ''\n applyMenuCollapsedState(navMenu)\n updateCollapseButtonPosition(navMenu, collapseBtn)\n toggle.setAttribute('aria-expanded', 'false')\n }\n}\n\nexport const createLeftSideMenu = async (subject: NamedNode, outliner: OutlineManager) => {\n ensureMenuSkeleton()\n const navMenu = document.getElementById('NavMenu') as HTMLElement | null\n const menuToggle = document.getElementById('MenuToggleBtn') as HTMLElement | null\n const menuOverlay = document.getElementById('MenuOverlay') as HTMLElement | null\n const navMenuContent = document.getElementById('NavMenuContent') as HTMLElement | null\n await refreshAuthStateFromSession()\n\n const closeMobileMenu = () => {\n if (!navMenu || !menuToggle || !menuOverlay) return\n navMenu.classList.remove('mobile-visible')\n navMenu.classList.add('mobile-hidden')\n navMenu.style.display = ''\n menuToggle.setAttribute('aria-expanded', 'false')\n menuOverlay.hidden = true\n menuOverlay.style.display = 'none'\n }\n\n const openMobileMenu = () => {\n if (!navMenu || !menuToggle || !menuOverlay) return\n navMenu.classList.remove('mobile-hidden')\n navMenu.classList.add('mobile-visible')\n navMenu.style.display = ''\n menuToggle.setAttribute('aria-expanded', 'true')\n menuOverlay.hidden = false\n menuOverlay.style.display = ''\n }\n\n const collapseBtn = document.getElementById('MenuCollapseBtn') as HTMLButtonElement | null\n\n const expandDesktopMenu = () => {\n if (!navMenu || !collapseBtn) return\n if (!menuCollapsed) return\n menuCollapsed = false\n saveMenuCollapsedState(menuCollapsed)\n applyMenuCollapsedState(navMenu)\n }\n\n if (navMenu) {\n navMenu.addEventListener('click', (event) => {\n const isMobile = outliner.context?.environment?.layout === 'mobile'\n const clickedCollapseButton = (event.target as HTMLElement).closest('#MenuCollapseBtn')\n if (!isMobile && menuCollapsed && !clickedCollapseButton) {\n expandDesktopMenu()\n }\n })\n }\n\n if (menuToggle) {\n menuToggle.addEventListener('click', () => {\n if (navMenu?.classList.contains('mobile-visible')) {\n closeMobileMenu()\n } else {\n openMobileMenu()\n }\n })\n }\n if (collapseBtn) {\n collapseBtn.addEventListener('click', () => {\n menuCollapsed = !menuCollapsed\n saveMenuCollapsedState(menuCollapsed)\n applyMenuCollapsedState(navMenu)\n })\n }\n\n const updateMenuVisibility = () => {\n const loggedIn = isLoggedIn()\n if (navMenu) {\n navMenu.hidden = !loggedIn\n navMenu.style.display = loggedIn ? '' : 'none'\n }\n if (menuToggle) {\n menuToggle.hidden = !loggedIn\n menuToggle.style.display = loggedIn ? '' : 'none'\n }\n if (collapseBtn) {\n collapseBtn.hidden = !loggedIn\n collapseBtn.style.display = loggedIn ? '' : 'none'\n }\n if (menuOverlay) {\n menuOverlay.hidden = !loggedIn\n menuOverlay.style.display = loggedIn ? '' : 'none'\n }\n setFooterVisibility(loggedIn)\n }\n\n updateMenuVisibility()\n\n if (menuOverlay) {\n menuOverlay.addEventListener('click', closeMobileMenu)\n }\n\n const closeBtn = document.getElementById('MenuCloseBtn') as HTMLButtonElement | null\n if (closeBtn) {\n closeBtn.addEventListener('click', closeMobileMenu)\n }\n\n if (navMenuContent) {\n updateMenuVisibility()\n const loggedIn = isLoggedIn()\n if (loggedIn) {\n await renderMenuItems(subject, outliner, navMenuContent)\n }\n\n if (!navMenuContent.dataset.authEventsBound) {\n const refreshMenuItems = async () => {\n await renderMenuItems(subject, outliner, navMenuContent)\n }\n\n authSession.events.on('login', async () => {\n await refreshAuthStateFromSession()\n updateMenuVisibility()\n refreshMenu(outliner.context?.environment?.layout === 'mobile' ? 'mobile' : 'desktop')\n await refreshMenuItems()\n })\n authSession.events.on('logout', async () => {\n await refreshAuthStateFromSession()\n updateMenuVisibility()\n refreshMenu(outliner.context?.environment?.layout === 'mobile' ? 'mobile' : 'desktop')\n await refreshMenuItems()\n })\n authSession.events.on('sessionRestore', async () => {\n await refreshAuthStateFromSession()\n updateMenuVisibility()\n refreshMenu(outliner.context?.environment?.layout === 'mobile' ? 'mobile' : 'desktop')\n await refreshMenuItems()\n })\n navMenuContent.dataset.authEventsBound = 'true'\n }\n\n navMenuContent.addEventListener('click', (event) => {\n const item = (event.target as HTMLElement).closest('.menu-item')\n if (item instanceof HTMLButtonElement) {\n setActiveMenuItem(navMenuContent, item.dataset.paneName)\n }\n const isMobile = outliner.context?.environment?.layout === 'mobile'\n if (item && isMobile) {\n closeMobileMenu()\n }\n })\n }\n\n refreshMenu(outliner.context?.environment?.layout === 'mobile' ? 'mobile' : 'desktop')\n}\n\nasync function openDashboardPane (subject, outliner: any, pane: string): Promise<void> {\n const me = authn.currentUser()\n if (!subject) {\n if (me) {\n subject = me\n } else {\n const store = outliner?.context?.store || outliner?.context?.session?.store || outliner?.kb\n const fetcher = outliner?.context?.fetcher || store?.fetcher\n if (!store || !fetcher) {\n throw new Error('Unable to load profile: missing RDF store or fetcher')\n }\n const fallbackUri = sym(window.location.href)\n subject = await loadProfileFromURI(subject || fallbackUri, store, fetcher)\n }\n }\n outliner.showDashboard(subject, {\n pane\n })\n}\n"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- let e=require("solid-ui"),t=require("rdflib");var n=`profile/card#me`;async function r(r,i,a){let o=r.site().uri,s=(0,t.sym)(`${o}${n}`);try{return await a.load(s),s}catch{}try{let e=new URL(r.uri),i=e.pathname.split(`/`).filter(Boolean);if(i.length>0){let r=(0,t.sym)(`${`${e.origin}/${i[0]}/`}${n}`);return await a.load(r),r}}catch{}try{await a.load(r)}catch{return r}let c=i.any(r,e.ns.foaf(`primaryTopic`),null,r.doc());if(c&&c.termType===`NamedNode`)try{return await a.load(c),c}catch{return r}return r}async function i(e,r,i){let o=(0,t.sym)(`${e.uri}${n}`);try{return await i.load(o),a(r,o)}catch{}try{let o=new URL(e.uri),s=o.pathname.split(`/`).filter(Boolean);if(s.length>0){let e=(0,t.sym)(`${`${o.origin}/${s[0]}/`}${n}`);return await i.load(e),a(r,e)}}catch{}return``}function a(t,n){return t.anyValue(n,e.ns.vcard(`fn`),null,n.doc())||t.anyValue(n,e.ns.foaf(`name`),null,n.doc())||new URL(n.uri).host.split(`.`)[0]}exports.getName=a,exports.getNameOfPodOwner=i,exports.loadProfileFromURI=r;
2
- //# sourceMappingURL=ownerProfile.cjs.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ownerProfile.cjs.js","names":[],"sources":["../../src/profileUtils/ownerProfile.ts"],"sourcesContent":["/*\n* Utility functions to help load the profile\n* especially when I am not logged in\n*/\n\nimport { Fetcher, IndexedFormula, NamedNode, sym } from 'rdflib'\nimport { ns } from 'solid-ui'\n\nconst DEFAULT_PROFILE_PATH = 'profile/card#me'\n\nexport async function loadProfileFromURI (\n uri: NamedNode,\n store: IndexedFormula,\n fetcher: Fetcher\n): Promise<NamedNode> {\n const pod = uri.site().uri\n // TODO: This is a hack - we cannot assume that the profile is at this document, but we will live with it for now\n const webId = sym(`${pod}${DEFAULT_PROFILE_PATH}`)\n try {\n await fetcher.load(webId)\n return webId\n } catch (err) {\n // continue\n }\n\n // we try a prefixed pod structure\n try {\n const uriUrl = new URL(uri.uri)\n const pathSegments = uriUrl.pathname.split('/').filter(Boolean)\n if (pathSegments.length > 0) {\n const derivedPod = `${uriUrl.origin}/${pathSegments[0]}/`\n const derivedWebId = sym(`${derivedPod}${DEFAULT_PROFILE_PATH}`)\n await fetcher.load(derivedWebId)\n return derivedWebId\n }\n } catch (err) {\n // continue\n }\n\n try {\n await fetcher.load(uri)\n } catch (err) {\n return uri\n }\n\n const primaryTopic = store.any(uri, ns.foaf('primaryTopic'), null, uri.doc())\n if (primaryTopic && primaryTopic.termType === 'NamedNode') {\n try {\n await fetcher.load(primaryTopic as NamedNode)\n return primaryTopic as NamedNode\n } catch (err) {\n return uri\n }\n }\n\n return uri\n}\n\nexport async function getNameOfPodOwner (\n pod: NamedNode,\n store: IndexedFormula,\n fetcher: Fetcher\n): Promise<string> {\n // TODO: This is a hack - we cannot assume that the profile is at this document, but we will live with it for now\n const webId = sym(`${pod.uri}${DEFAULT_PROFILE_PATH}`)\n try {\n await fetcher.load(webId)\n return getName(store, webId)\n } catch (err) {\n // continue\n }\n\n // we try a prefixed pod structure\n try {\n const uriUrl = new URL(pod.uri)\n const pathSegments = uriUrl.pathname.split('/').filter(Boolean)\n if (pathSegments.length > 0) {\n const derivedPod = `${uriUrl.origin}/${pathSegments[0]}/`\n const derivedWebId = sym(`${derivedPod}${DEFAULT_PROFILE_PATH}`)\n await fetcher.load(derivedWebId)\n return getName(store, derivedWebId)\n }\n } catch (err) {\n // continue\n }\n\n return ''\n}\n\nexport function getName (store: IndexedFormula, ownersProfile: NamedNode): string {\n return (\n store.anyValue(ownersProfile, ns.vcard('fn'), null, ownersProfile.doc()) ||\n store.anyValue(ownersProfile, ns.foaf('name'), null, ownersProfile.doc()) ||\n new URL(ownersProfile.uri).host.split('.')[0]\n )\n}\n"],"mappings":"8CAQA,IAAM,EAAuB,kBAE7B,eAAsB,EACpB,EACA,EACA,EACoB,CACpB,IAAM,EAAM,EAAI,KAAK,CAAC,CAAC,IAEjB,GAAA,EAAA,EAAA,IAAA,CAAY,GAAG,IAAM,GAAsB,EACjD,GAAI,CAEF,OADA,MAAM,EAAQ,KAAK,CAAK,EACjB,CACT,MAAc,CAEd,CAGA,GAAI,CACF,IAAM,EAAS,IAAI,IAAI,EAAI,GAAG,EACxB,EAAe,EAAO,SAAS,MAAM,GAAG,CAAC,CAAC,OAAO,OAAO,EAC9D,GAAI,EAAa,OAAS,EAAG,CAE3B,IAAM,GAAA,EAAA,EAAA,IAAA,CAAmB,GAAG,GADN,EAAO,OAAO,GAAG,EAAa,GAAG,KACd,GAAsB,EAE/D,OADA,MAAM,EAAQ,KAAK,CAAY,EACxB,CACT,CACF,MAAc,CAEd,CAEA,GAAI,CACF,MAAM,EAAQ,KAAK,CAAG,CACxB,MAAc,CACZ,OAAO,CACT,CAEA,IAAM,EAAe,EAAM,IAAI,EAAK,EAAA,GAAG,KAAK,cAAc,EAAG,KAAM,EAAI,IAAI,CAAC,EAC5E,GAAI,GAAgB,EAAa,WAAa,YAC5C,GAAI,CAEF,OADA,MAAM,EAAQ,KAAK,CAAyB,EACrC,CACT,MAAc,CACZ,OAAO,CACT,CAGF,OAAO,CACT,CAEA,eAAsB,EACpB,EACA,EACA,EACiB,CAEjB,IAAM,GAAA,EAAA,EAAA,IAAA,CAAY,GAAG,EAAI,MAAM,GAAsB,EACrD,GAAI,CAEF,OADA,MAAM,EAAQ,KAAK,CAAK,EACjB,EAAQ,EAAO,CAAK,CAC7B,MAAc,CAEd,CAGA,GAAI,CACF,IAAM,EAAS,IAAI,IAAI,EAAI,GAAG,EACxB,EAAe,EAAO,SAAS,MAAM,GAAG,CAAC,CAAC,OAAO,OAAO,EAC9D,GAAI,EAAa,OAAS,EAAG,CAE3B,IAAM,GAAA,EAAA,EAAA,IAAA,CAAmB,GAAG,GADN,EAAO,OAAO,GAAG,EAAa,GAAG,KACd,GAAsB,EAE/D,OADA,MAAM,EAAQ,KAAK,CAAY,EACxB,EAAQ,EAAO,CAAY,CACpC,CACF,MAAc,CAEd,CAEA,MAAO,EACT,CAEA,SAAgB,EAAS,EAAuB,EAAkC,CAChF,OACE,EAAM,SAAS,EAAe,EAAA,GAAG,MAAM,IAAI,EAAG,KAAM,EAAc,IAAI,CAAC,GACvE,EAAM,SAAS,EAAe,EAAA,GAAG,KAAK,MAAM,EAAG,KAAM,EAAc,IAAI,CAAC,GACxE,IAAI,IAAI,EAAc,GAAG,CAAC,CAAC,KAAK,MAAM,GAAG,CAAC,CAAC,EAE/C"}
@@ -1,5 +0,0 @@
1
- import { Fetcher, IndexedFormula, NamedNode } from '../../node_modules/rdflib';
2
- export declare function loadProfileFromURI(uri: NamedNode, store: IndexedFormula, fetcher: Fetcher): Promise<NamedNode>;
3
- export declare function getNameOfPodOwner(pod: NamedNode, store: IndexedFormula, fetcher: Fetcher): Promise<string>;
4
- export declare function getName(store: IndexedFormula, ownersProfile: NamedNode): string;
5
- //# sourceMappingURL=ownerProfile.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ownerProfile.d.ts","sourceRoot":"","sources":["../../src/profileUtils/ownerProfile.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,SAAS,EAAO,MAAM,QAAQ,CAAA;AAKhE,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,SAAS,EACd,KAAK,EAAE,cAAc,EACrB,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,SAAS,CAAC,CA0CpB;AAED,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,SAAS,EACd,KAAK,EAAE,cAAc,EACrB,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,MAAM,CAAC,CAyBjB;AAED,wBAAgB,OAAO,CAAE,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,SAAS,GAAG,MAAM,CAMhF"}
@@ -1,50 +0,0 @@
1
- import { ns as e } from "solid-ui";
2
- import { sym as t } from "rdflib";
3
- //#region src/profileUtils/ownerProfile.ts
4
- var n = "profile/card#me";
5
- async function r(r, i, a) {
6
- let o = r.site().uri, s = t(`${o}${n}`);
7
- try {
8
- return await a.load(s), s;
9
- } catch {}
10
- try {
11
- let e = new URL(r.uri), i = e.pathname.split("/").filter(Boolean);
12
- if (i.length > 0) {
13
- let r = t(`${`${e.origin}/${i[0]}/`}${n}`);
14
- return await a.load(r), r;
15
- }
16
- } catch {}
17
- try {
18
- await a.load(r);
19
- } catch {
20
- return r;
21
- }
22
- let c = i.any(r, e.foaf("primaryTopic"), null, r.doc());
23
- if (c && c.termType === "NamedNode") try {
24
- return await a.load(c), c;
25
- } catch {
26
- return r;
27
- }
28
- return r;
29
- }
30
- async function i(e, r, i) {
31
- let o = t(`${e.uri}${n}`);
32
- try {
33
- return await i.load(o), a(r, o);
34
- } catch {}
35
- try {
36
- let o = new URL(e.uri), s = o.pathname.split("/").filter(Boolean);
37
- if (s.length > 0) {
38
- let e = t(`${`${o.origin}/${s[0]}/`}${n}`);
39
- return await i.load(e), a(r, e);
40
- }
41
- } catch {}
42
- return "";
43
- }
44
- function a(t, n) {
45
- return t.anyValue(n, e.vcard("fn"), null, n.doc()) || t.anyValue(n, e.foaf("name"), null, n.doc()) || new URL(n.uri).host.split(".")[0];
46
- }
47
- //#endregion
48
- export { a as getName, i as getNameOfPodOwner, r as loadProfileFromURI };
49
-
50
- //# sourceMappingURL=ownerProfile.esm.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ownerProfile.esm.js","names":[],"sources":["../../src/profileUtils/ownerProfile.ts"],"sourcesContent":["/*\n* Utility functions to help load the profile\n* especially when I am not logged in\n*/\n\nimport { Fetcher, IndexedFormula, NamedNode, sym } from 'rdflib'\nimport { ns } from 'solid-ui'\n\nconst DEFAULT_PROFILE_PATH = 'profile/card#me'\n\nexport async function loadProfileFromURI (\n uri: NamedNode,\n store: IndexedFormula,\n fetcher: Fetcher\n): Promise<NamedNode> {\n const pod = uri.site().uri\n // TODO: This is a hack - we cannot assume that the profile is at this document, but we will live with it for now\n const webId = sym(`${pod}${DEFAULT_PROFILE_PATH}`)\n try {\n await fetcher.load(webId)\n return webId\n } catch (err) {\n // continue\n }\n\n // we try a prefixed pod structure\n try {\n const uriUrl = new URL(uri.uri)\n const pathSegments = uriUrl.pathname.split('/').filter(Boolean)\n if (pathSegments.length > 0) {\n const derivedPod = `${uriUrl.origin}/${pathSegments[0]}/`\n const derivedWebId = sym(`${derivedPod}${DEFAULT_PROFILE_PATH}`)\n await fetcher.load(derivedWebId)\n return derivedWebId\n }\n } catch (err) {\n // continue\n }\n\n try {\n await fetcher.load(uri)\n } catch (err) {\n return uri\n }\n\n const primaryTopic = store.any(uri, ns.foaf('primaryTopic'), null, uri.doc())\n if (primaryTopic && primaryTopic.termType === 'NamedNode') {\n try {\n await fetcher.load(primaryTopic as NamedNode)\n return primaryTopic as NamedNode\n } catch (err) {\n return uri\n }\n }\n\n return uri\n}\n\nexport async function getNameOfPodOwner (\n pod: NamedNode,\n store: IndexedFormula,\n fetcher: Fetcher\n): Promise<string> {\n // TODO: This is a hack - we cannot assume that the profile is at this document, but we will live with it for now\n const webId = sym(`${pod.uri}${DEFAULT_PROFILE_PATH}`)\n try {\n await fetcher.load(webId)\n return getName(store, webId)\n } catch (err) {\n // continue\n }\n\n // we try a prefixed pod structure\n try {\n const uriUrl = new URL(pod.uri)\n const pathSegments = uriUrl.pathname.split('/').filter(Boolean)\n if (pathSegments.length > 0) {\n const derivedPod = `${uriUrl.origin}/${pathSegments[0]}/`\n const derivedWebId = sym(`${derivedPod}${DEFAULT_PROFILE_PATH}`)\n await fetcher.load(derivedWebId)\n return getName(store, derivedWebId)\n }\n } catch (err) {\n // continue\n }\n\n return ''\n}\n\nexport function getName (store: IndexedFormula, ownersProfile: NamedNode): string {\n return (\n store.anyValue(ownersProfile, ns.vcard('fn'), null, ownersProfile.doc()) ||\n store.anyValue(ownersProfile, ns.foaf('name'), null, ownersProfile.doc()) ||\n new URL(ownersProfile.uri).host.split('.')[0]\n )\n}\n"],"mappings":";;;AAQA,IAAM,IAAuB;AAE7B,eAAsB,EACpB,GACA,GACA,GACoB;CACpB,IAAM,IAAM,EAAI,KAAK,CAAC,CAAC,KAEjB,IAAQ,EAAI,GAAG,IAAM,GAAsB;CACjD,IAAI;EAEF,OADA,MAAM,EAAQ,KAAK,CAAK,GACjB;CACT,QAAc,CAEd;CAGA,IAAI;EACF,IAAM,IAAS,IAAI,IAAI,EAAI,GAAG,GACxB,IAAe,EAAO,SAAS,MAAM,GAAG,CAAC,CAAC,OAAO,OAAO;EAC9D,IAAI,EAAa,SAAS,GAAG;GAE3B,IAAM,IAAe,EAAI,GAAG,GADN,EAAO,OAAO,GAAG,EAAa,GAAG,KACd,GAAsB;GAE/D,OADA,MAAM,EAAQ,KAAK,CAAY,GACxB;EACT;CACF,QAAc,CAEd;CAEA,IAAI;EACF,MAAM,EAAQ,KAAK,CAAG;CACxB,QAAc;EACZ,OAAO;CACT;CAEA,IAAM,IAAe,EAAM,IAAI,GAAK,EAAG,KAAK,cAAc,GAAG,MAAM,EAAI,IAAI,CAAC;CAC5E,IAAI,KAAgB,EAAa,aAAa,aAC5C,IAAI;EAEF,OADA,MAAM,EAAQ,KAAK,CAAyB,GACrC;CACT,QAAc;EACZ,OAAO;CACT;CAGF,OAAO;AACT;AAEA,eAAsB,EACpB,GACA,GACA,GACiB;CAEjB,IAAM,IAAQ,EAAI,GAAG,EAAI,MAAM,GAAsB;CACrD,IAAI;EAEF,OADA,MAAM,EAAQ,KAAK,CAAK,GACjB,EAAQ,GAAO,CAAK;CAC7B,QAAc,CAEd;CAGA,IAAI;EACF,IAAM,IAAS,IAAI,IAAI,EAAI,GAAG,GACxB,IAAe,EAAO,SAAS,MAAM,GAAG,CAAC,CAAC,OAAO,OAAO;EAC9D,IAAI,EAAa,SAAS,GAAG;GAE3B,IAAM,IAAe,EAAI,GAAG,GADN,EAAO,OAAO,GAAG,EAAa,GAAG,KACd,GAAsB;GAE/D,OADA,MAAM,EAAQ,KAAK,CAAY,GACxB,EAAQ,GAAO,CAAY;EACpC;CACF,QAAc,CAEd;CAEA,OAAO;AACT;AAEA,SAAgB,EAAS,GAAuB,GAAkC;CAChF,OACE,EAAM,SAAS,GAAe,EAAG,MAAM,IAAI,GAAG,MAAM,EAAc,IAAI,CAAC,KACvE,EAAM,SAAS,GAAe,EAAG,KAAK,MAAM,GAAG,MAAM,EAAc,IAAI,CAAC,KACxE,IAAI,IAAI,EAAc,GAAG,CAAC,CAAC,KAAK,MAAM,GAAG,CAAC,CAAC;AAE/C"}