@semiont/browser 0.5.28 → 0.5.30

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 (80) hide show
  1. package/dist/assets/{CookiePreferences-UVUl27XP.js → CookiePreferences-DHgkny7X.js} +2 -2
  2. package/dist/assets/{CookiePreferences-UVUl27XP.js.map → CookiePreferences-DHgkny7X.js.map} +1 -1
  3. package/dist/assets/{KeyboardShortcutsContext-D8VjaYfK.js → KeyboardShortcutsContext-CBFjGYDr.js} +2 -2
  4. package/dist/assets/{KeyboardShortcutsContext-D8VjaYfK.js.map → KeyboardShortcutsContext-CBFjGYDr.js.map} +1 -1
  5. package/dist/assets/{PdfAnnotationCanvas.client-LSH3PZPY-B8dnEIps.js → PdfAnnotationCanvas.client-LSH3PZPY-DuFgtMhI.js} +2 -2
  6. package/dist/assets/{PdfAnnotationCanvas.client-LSH3PZPY-B8dnEIps.js.map → PdfAnnotationCanvas.client-LSH3PZPY-DuFgtMhI.js.map} +1 -1
  7. package/dist/assets/{ToolbarPanels-Bf3f6THq.js → ToolbarPanels-COwH5BrV.js} +2 -2
  8. package/dist/assets/{ToolbarPanels-Bf3f6THq.js.map → ToolbarPanels-COwH5BrV.js.map} +1 -1
  9. package/dist/assets/{client-kvvQzQsd.js → client-5Fze6y-0.js} +2 -2
  10. package/dist/assets/{client-kvvQzQsd.js.map → client-5Fze6y-0.js.map} +1 -1
  11. package/dist/assets/{client-B2rbsRTh.js → client-Br8hVPSL.js} +2 -2
  12. package/dist/assets/{client-B2rbsRTh.js.map → client-Br8hVPSL.js.map} +1 -1
  13. package/dist/assets/{en-R5XA26NF-Cuox0uQn.js → en-R5XA26NF-B_rafaNP.js} +1 -1
  14. package/dist/assets/index-DikwAWOa.js +142 -0
  15. package/dist/assets/index-DikwAWOa.js.map +1 -0
  16. package/dist/assets/{layout-5m7ZN_sv.js → layout-B4mP42tI.js} +2 -2
  17. package/dist/assets/{layout-5m7ZN_sv.js.map → layout-B4mP42tI.js.map} +1 -1
  18. package/dist/assets/{layout-DmBlX8Wv.js → layout-BYYBhrUM.js} +2 -2
  19. package/dist/assets/{layout-DmBlX8Wv.js.map → layout-BYYBhrUM.js.map} +1 -1
  20. package/dist/assets/layout-CLyZ3jHm.js +2 -0
  21. package/dist/assets/layout-CLyZ3jHm.js.map +1 -0
  22. package/dist/assets/{layout-ChREg3PD.js → layout-DOcJwulX.js} +2 -2
  23. package/dist/assets/{layout-ChREg3PD.js.map → layout-DOcJwulX.js.map} +1 -1
  24. package/dist/assets/{not-found-BOkh1PJR.js → not-found-Ci6X4tm9.js} +2 -2
  25. package/dist/assets/{not-found-BOkh1PJR.js.map → not-found-Ci6X4tm9.js.map} +1 -1
  26. package/dist/assets/{page-Bfk44QuW.js → page--ofr4a58.js} +2 -2
  27. package/dist/assets/{page-Bfk44QuW.js.map → page--ofr4a58.js.map} +1 -1
  28. package/dist/assets/{page-KrH4sIjg.js → page-BYW9mwEo.js} +2 -2
  29. package/dist/assets/{page-KrH4sIjg.js.map → page-BYW9mwEo.js.map} +1 -1
  30. package/dist/assets/page-C5yXoqok.js +2 -0
  31. package/dist/assets/{page-De2leEHb.js.map → page-C5yXoqok.js.map} +1 -1
  32. package/dist/assets/{page-DL5wQ3pG.js → page-C9DNsp3i.js} +2 -2
  33. package/dist/assets/{page-DL5wQ3pG.js.map → page-C9DNsp3i.js.map} +1 -1
  34. package/dist/assets/{page-DGXyF1RD.js → page-C9pkWGVi.js} +2 -2
  35. package/dist/assets/{page-DGXyF1RD.js.map → page-C9pkWGVi.js.map} +1 -1
  36. package/dist/assets/{page-C76A3Tvm.js → page-CCSJqjWt.js} +2 -2
  37. package/dist/assets/{page-C76A3Tvm.js.map → page-CCSJqjWt.js.map} +1 -1
  38. package/dist/assets/{page-BOgSgEl-.js → page-CO9mlfK-.js} +2 -2
  39. package/dist/assets/{page-BOgSgEl-.js.map → page-CO9mlfK-.js.map} +1 -1
  40. package/dist/assets/{page-CgiAumZ6.js → page-CSMUzvRi.js} +2 -2
  41. package/dist/assets/{page-CgiAumZ6.js.map → page-CSMUzvRi.js.map} +1 -1
  42. package/dist/assets/{page-_daGpD2K.js → page-Ce6fw6P9.js} +2 -2
  43. package/dist/assets/{page-_daGpD2K.js.map → page-Ce6fw6P9.js.map} +1 -1
  44. package/dist/assets/{page-C45jnN3u.js → page-DP-LdVo6.js} +2 -2
  45. package/dist/assets/{page-C45jnN3u.js.map → page-DP-LdVo6.js.map} +1 -1
  46. package/dist/assets/{page-C7fj48Yd.js → page-DhCdpcx2.js} +2 -2
  47. package/dist/assets/{page-C7fj48Yd.js.map → page-DhCdpcx2.js.map} +1 -1
  48. package/dist/assets/{page-B2tTEfKp.js → page-DveRPD7J.js} +2 -2
  49. package/dist/assets/{page-B2tTEfKp.js.map → page-DveRPD7J.js.map} +1 -1
  50. package/dist/assets/{page-ZPLCKgGQ.js → page-FoKU0iob.js} +2 -2
  51. package/dist/assets/{page-ZPLCKgGQ.js.map → page-FoKU0iob.js.map} +1 -1
  52. package/dist/assets/{page-CrXiz4-J.js → page-KNTWGNqU.js} +2 -2
  53. package/dist/assets/{page-CrXiz4-J.js.map → page-KNTWGNqU.js.map} +1 -1
  54. package/dist/assets/{page-CQJx-JXR.js → page-P0n7aLDe.js} +2 -2
  55. package/dist/assets/{page-CQJx-JXR.js.map → page-P0n7aLDe.js.map} +1 -1
  56. package/dist/assets/{page-zpMXForS.js → page-QXiNSjcX.js} +2 -2
  57. package/dist/assets/{page-zpMXForS.js.map → page-QXiNSjcX.js.map} +1 -1
  58. package/dist/assets/{page-DXZrFCmr.js → page-S-g5YvWH.js} +2 -2
  59. package/dist/assets/{page-DXZrFCmr.js.map → page-S-g5YvWH.js.map} +1 -1
  60. package/dist/assets/{page-BiEYKai0.js → page-jVd15vic.js} +2 -2
  61. package/dist/assets/{page-BiEYKai0.js.map → page-jVd15vic.js.map} +1 -1
  62. package/dist/assets/{pdf-Dicw8YoH.js → pdf-DLN6u172.js} +2 -2
  63. package/dist/assets/{pdf-Dicw8YoH.js.map → pdf-DLN6u172.js.map} +1 -1
  64. package/dist/assets/{routing-BJiyORAR.js → routing-Cj_EvhT3.js} +2 -2
  65. package/dist/assets/{routing-BJiyORAR.js.map → routing-Cj_EvhT3.js.map} +1 -1
  66. package/dist/assets/{routing-CygMogfF.js → routing-NHl4gs1C.js} +2 -2
  67. package/dist/assets/{routing-CygMogfF.js.map → routing-NHl4gs1C.js.map} +1 -1
  68. package/dist/assets/vendor-GEwJ7U4m.js +10 -0
  69. package/dist/assets/vendor-GEwJ7U4m.js.map +1 -0
  70. package/dist/assets/{web-D6kqUluK.js → web-CyrRuj1m.js} +2 -2
  71. package/dist/assets/{web-D6kqUluK.js.map → web-CyrRuj1m.js.map} +1 -1
  72. package/dist/index.html +2 -2
  73. package/package.json +1 -1
  74. package/dist/assets/index-BkTRe71w.js +0 -142
  75. package/dist/assets/index-BkTRe71w.js.map +0 -1
  76. package/dist/assets/layout-xM3HYPpK.js +0 -2
  77. package/dist/assets/layout-xM3HYPpK.js.map +0 -1
  78. package/dist/assets/page-De2leEHb.js +0 -2
  79. package/dist/assets/vendor-BVP6ONpk.js +0 -10
  80. package/dist/assets/vendor-BVP6ONpk.js.map +0 -1
@@ -1,2 +0,0 @@
1
- import{r as e}from"./rolldown-runtime-hePW80VL.js";import{i as t,t as n}from"./i18n-zIDJOEfo.js";import{s as r,t as i}from"./vendor-BVP6ONpk.js";import{$ as a,At as o,G as s,Y as c,d as l,et as u,g as d,j as f,l as p,o as m,q as h}from"./index-BkTRe71w.js";import{t as g}from"./KeyboardShortcutsContext-D8VjaYfK.js";import{t as _}from"./CookiePreferences-UVUl27XP.js";import{n as v,t as y}from"./ToolbarPanels-Bf3f6THq.js";import{n as b,t as x}from"./ChevronLeftIcon-BcDi-sgg.js";import{t as S}from"./XMarkIcon-CVrfCz2h.js";import{i as C,r as w,t as T}from"./routing-BJiyORAR.js";import{n as E,t as D}from"./routing-CygMogfF.js";var O=e(t()),k=i(),A=({className:e})=>(0,k.jsx)(`span`,{className:e,style:{fontSize:`1.25rem`,lineHeight:`1`},children:`🔭`});function j({href:e,to:t,...n}){return(0,k.jsx)(T,{to:e??``,...n})}function M({isCollapsed:e,toggleCollapsed:t,navigationMenu:r}){let{t:i}=n(),a=(e,t)=>i(`Sidebar.${e}`,t),l=w(),u=C(),d=o(),f=c(d.openResources$)??[],p=d.removeOpenResource.bind(d),h=d.reorderOpenResources.bind(d),g=[{name:a(`discover`),href:`/know/discover`,icon:A,description:a(`searchAndBrowse`)},{name:a(`compose`),href:`/know/compose`,icon:v,description:a(`composeNewResource`)}],_=(0,O.useCallback)(()=>{t()},[t]),y=(0,O.useCallback)(({resourceId:e})=>{p(e),l===`/know/resource/${e}`&&u.push(`/know/discover`)},[p,l,u]),T=(0,O.useCallback)(({oldIndex:e,newIndex:t})=>{h(e,t)},[h]);return s({"shell:sidebar-toggle":_,"tabs:close":y,"tabs:reorder":T}),(0,k.jsx)(`div`,{className:`flex flex-col h-full`,children:(0,k.jsx)(`div`,{className:`flex-1 min-h-0 overflow-y-auto`,children:(0,k.jsx)(m,{fixedItems:g,resources:f,isCollapsed:e,currentPath:l,LinkComponent:j,onNavigate:e=>{u.push(e)},getResourceHref:e=>`/know/resource/${e}`,className:`knowledge-navigation`,translations:{title:a(`title`)},icons:{chevronLeft:x,bars:b,close:S},navigationMenu:r})})})}function N(){let{t:e}=n(),t=(t,n)=>e(`Navigation.${t}`,n),{t:r}=n(),i=(e,t)=>r(`Home.${e}`,t),a=c(o().activeSession$),s=c(a?.user$),u=!!s,d=s?.isAdmin??!1,f=s?.isModerator??!1;return(0,k.jsx)(l,{Link:D,routes:E,t,tHome:i,brandingLink:`/`,collapsible:!0,storageKey:`knowledgeNavCollapsed`,isAuthenticated:u,isAdmin:d,isModerator:f,children:(e,t,n)=>(0,k.jsx)(M,{isCollapsed:e,toggleCollapsed:t,navigationMenu:n})})}function P(){return null}function F(){let{t:e}=n(),t=(t,n)=>n===void 0?e(`DiscoverEmptyState.${t}`):e(`DiscoverEmptyState.${t}`,n),r=o(),i=c(r.kbs$)??[],{kbs:a}=h(),s=c(r.activeSession$)?.kb??null,l=s?r.getKbSessionStatus(s.id):null;return i.length===0?(0,k.jsxs)(`div`,{style:{textAlign:`center`,maxWidth:`28rem`},children:[(0,k.jsx)(`h2`,{style:{fontSize:`1.1rem`,fontWeight:600,marginBottom:`0.5rem`},children:t(`noKnowledgeBases`)}),(0,k.jsx)(`p`,{style:{color:`var(--semiont-color-neutral-400)`,fontSize:`0.85rem`,lineHeight:1.5,marginBottom:`0.75rem`},children:t(`noKnowledgeBasesHint`)}),a.length>0&&(0,k.jsx)(`p`,{style:{color:`var(--semiont-color-primary-500)`,fontSize:`0.85rem`,lineHeight:1.5,marginBottom:`0.75rem`},children:t(`discoveredOnMachine`,{count:a.length})}),(0,k.jsxs)(`p`,{style:{color:`var(--semiont-color-neutral-400)`,fontSize:`0.85rem`,lineHeight:1.5},children:[(0,k.jsx)(`a`,{href:`https://github.com/The-AI-Alliance/semiont/blob/main/docs/KNOWLEDGE-BASES.md`,target:`_blank`,rel:`noopener noreferrer`,style:{color:`var(--semiont-color-primary-500)`},children:t(`findKnowledgeBases`)}),` · `,(0,k.jsx)(`a`,{href:`https://github.com/The-AI-Alliance/semiont-template-kb`,target:`_blank`,rel:`noopener noreferrer`,style:{color:`var(--semiont-color-primary-500)`},children:t(`createNew`)})]})]}):l===`authenticated`?null:(0,k.jsxs)(`div`,{style:{textAlign:`center`,maxWidth:`24rem`},children:[(0,k.jsx)(`h2`,{style:{fontSize:`1.1rem`,fontWeight:600,marginBottom:`0.5rem`},children:s?.label??``}),(0,k.jsxs)(`p`,{style:{color:`var(--semiont-color-neutral-400)`,fontSize:`0.85rem`,lineHeight:1.5},children:[t(l===`expired`?`sessionExpired`:`signedOut`),` `,t(`signInHint`)]})]})}function I({t:e,keyboardContext:t}){let n=a(),r=c(n.activePanel$)??null,{theme:i}=u(),o=(0,O.useRef)(!1);return(0,O.useEffect)(()=>{o.current||r===null||(o.current=!0,r===`user`&&n.openPanel(`knowledge-base`))},[r,n]),(0,k.jsxs)(`div`,{className:`h-screen semiont-knowledge-layout semiont-layout-with-footer flex flex-col overflow-hidden`,children:[(0,k.jsxs)(`div`,{className:`flex flex-1 overflow-hidden`,children:[(0,k.jsx)(`main`,{className:`flex-1 w-full px-2 pb-6 flex flex-col overflow-hidden`,children:(0,k.jsx)(`div`,{className:`w-full mx-auto flex-1 flex flex-col h-full overflow-hidden items-center justify-center`,children:(0,k.jsx)(F,{})})}),(0,k.jsx)(y,{activePanel:r,theme:i}),(0,k.jsx)(f,{activePanel:r,context:`simple`})]}),(0,k.jsx)(p,{Link:D,routes:E,t:(t,n)=>e(`Footer.${t}`,n),CookiePreferences:_,showPolicyLinks:!(`__TAURI_INTERNALS__`in window),...t?.openKeyboardHelp&&{onOpenKeyboardHelp:t.openKeyboardHelp}})]})}function L(){let{t:e}=n(),t=(0,O.useContext)(g),i=o(),a=c(i.activeKbId$),s=c(i.activeSession$),l=c(i.sessionActivating$),u=c(s?.token$),f=s?.kb??null;return a!=null&&s==null&&l?(0,k.jsx)(`div`,{className:`h-screen flex items-center justify-center`,children:(0,k.jsxs)(`div`,{className:`text-center`,children:[(0,k.jsx)(`div`,{className:`animate-spin rounded-full h-12 w-12 border-b-2 border-blue-600 mx-auto mb-4`}),(0,k.jsx)(`p`,{className:`text-gray-600 dark:text-gray-400`,children:`Loading...`})]})}):!f||!u?(0,k.jsx)(I,{t:(t,n)=>e(t,n),keyboardContext:t}):(0,k.jsxs)(d,{children:[(0,k.jsx)(P,{}),(0,k.jsxs)(`div`,{className:`h-screen semiont-knowledge-layout semiont-layout-with-footer flex flex-col overflow-hidden`,children:[(0,k.jsxs)(`div`,{className:`flex flex-1 overflow-hidden`,children:[(0,k.jsx)(N,{}),(0,k.jsx)(`main`,{className:`flex-1 w-full px-2 pb-6 flex flex-col overflow-hidden`,children:(0,k.jsx)(`div`,{className:`w-full mx-auto flex-1 flex flex-col h-full overflow-hidden`,children:(0,k.jsx)(r,{})})})]}),(0,k.jsx)(p,{Link:D,routes:E,t:(t,n)=>e(`Footer.${t}`,n),CookiePreferences:_,showPolicyLinks:!(`__TAURI_INTERNALS__`in window),...t?.openKeyboardHelp&&{onOpenKeyboardHelp:t.openKeyboardHelp}})]})]})}function R(){return(0,k.jsx)(L,{})}export{F as DiscoverEmptyState,R as default};
2
- //# sourceMappingURL=layout-xM3HYPpK.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"layout-xM3HYPpK.js","names":[],"sources":["../../src/components/knowledge/KnowledgeNavigation.tsx","../../src/components/knowledge/KnowledgeSidebarWrapper.tsx","../../src/app/[locale]/know/layout.tsx"],"sourcesContent":["import React, { useCallback } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Link } from '@/i18n/routing';\nimport { usePathname, useRouter } from '@/i18n/routing';\nimport { PlusIcon, ChevronLeftIcon, Bars3Icon, XMarkIcon } from '@heroicons/react/24/outline';\nimport {\n useSemiont,\n useObservable,\n useEventSubscriptions,\n CollapsibleResourceNavigation,\n type NavigationItem,\n} from '@semiont/react-ui';\nimport type { OpenResource } from '@semiont/sdk';\n// Custom telescope icon component\nconst TelescopeIcon = ({ className }: { className?: string }) => (\n <span className={className} style={{ fontSize: '1.25rem', lineHeight: '1' }}>🔭</span>\n);\n\ninterface KnowledgeNavigationProps {\n isCollapsed: boolean;\n toggleCollapsed: () => void;\n navigationMenu?: (onClose: () => void) => React.ReactNode;\n}\n\n// Adapter: CollapsibleResourceNavigation passes href, but our Link uses `to`\nfunction HrefLink({ href, to: _to, ...props }: React.ComponentProps<typeof Link> & { href?: string }) {\n return <Link to={(href ?? '') as string} {...props} />;\n}\n\nexport function KnowledgeNavigation({ isCollapsed, toggleCollapsed, navigationMenu }: KnowledgeNavigationProps) {\n const { t: _t } = useTranslation();\n const t = (k: string, p?: Record<string, unknown>) => _t(`Sidebar.${k}`, p as any) as string;\n const pathname = usePathname();\n const router = useRouter();\n const semiont = useSemiont();\n const openResources = useObservable(semiont.openResources$) ?? [];\n const removeResource = semiont.removeOpenResource.bind(semiont);\n const reorderResources = semiont.reorderOpenResources.bind(semiont);\n\n const fixedNavigation: NavigationItem[] = [\n {\n name: t('discover'),\n href: '/know/discover',\n icon: TelescopeIcon,\n description: t('searchAndBrowse')\n },\n {\n name: t('compose'),\n href: '/know/compose',\n icon: PlusIcon,\n description: t('composeNewResource')\n }\n ];\n\n // Handle sidebar toggle events\n const handleSidebarToggle = useCallback(() => {\n toggleCollapsed();\n }, [toggleCollapsed]);\n\n // Handle resource close events\n const handleResourceClose = useCallback(({ resourceId }: { resourceId: string }) => {\n removeResource(resourceId);\n\n // If we're closing the currently viewed document, navigate to Discover\n if (pathname === `/know/resource/${resourceId}`) {\n router.push('/know/discover');\n }\n }, [removeResource, pathname, router]);\n\n // Handle resource reorder events\n const handleResourceReorder = useCallback(({ oldIndex, newIndex }: { oldIndex: number; newIndex: number }) => {\n reorderResources(oldIndex, newIndex);\n }, [reorderResources]);\n\n // Subscribe to navigation events\n useEventSubscriptions({\n 'shell:sidebar-toggle': handleSidebarToggle,\n 'tabs:close': handleResourceClose,\n 'tabs:reorder': handleResourceReorder,\n });\n\n // Handle navigation\n const handleNavigate = (path: string) => {\n router.push(path);\n };\n\n // Build resource href\n const getResourceHref = (resourceId: string) => {\n return `/know/resource/${resourceId}`;\n };\n\n return (\n <div className=\"flex flex-col h-full\">\n <div className=\"flex-1 min-h-0 overflow-y-auto\">\n <CollapsibleResourceNavigation\n fixedItems={fixedNavigation}\n resources={openResources as OpenResource[]}\n isCollapsed={isCollapsed}\n currentPath={pathname}\n LinkComponent={HrefLink as any}\n onNavigate={handleNavigate}\n getResourceHref={getResourceHref}\n className=\"knowledge-navigation\"\n translations={{\n title: t('title')\n }}\n icons={{\n chevronLeft: ChevronLeftIcon,\n bars: Bars3Icon,\n close: XMarkIcon\n }}\n navigationMenu={navigationMenu}\n />\n </div>\n </div>\n );\n}","import { useTranslation } from 'react-i18next';\nimport { LeftSidebar, useSemiont, useObservable } from '@semiont/react-ui';\nimport { KnowledgeNavigation } from './KnowledgeNavigation';\nimport { Link, routes } from '@/lib/routing';\n\nexport function KnowledgeSidebarWrapper() {\n const { t: _t } = useTranslation();\n const t = (k: string, p?: Record<string, unknown>) => _t(`Navigation.${k}`, p as any) as string;\n const { t: _tHome } = useTranslation();\n const tHome = (k: string, p?: Record<string, unknown>) => _tHome(`Home.${k}`, p as any) as string;\n const session = useObservable(useSemiont().activeSession$);\n const user = useObservable(session?.user$);\n const isAuthenticated = !!user;\n const isAdmin = user?.isAdmin ?? false;\n const isModerator = user?.isModerator ?? false;\n\n return (\n <LeftSidebar\n Link={Link}\n routes={routes}\n t={t}\n tHome={tHome}\n brandingLink=\"/\"\n collapsible={true}\n storageKey=\"knowledgeNavCollapsed\"\n isAuthenticated={isAuthenticated}\n isAdmin={isAdmin}\n isModerator={isModerator}\n >\n {(isCollapsed, toggleCollapsed, navigationMenu) => (\n <KnowledgeNavigation\n isCollapsed={isCollapsed}\n toggleCollapsed={toggleCollapsed}\n navigationMenu={navigationMenu}\n />\n )}\n </LeftSidebar>\n );\n}\n","import { useContext, useEffect, useRef } from 'react';\nimport { Outlet } from 'react-router';\nimport { useTranslation } from 'react-i18next';\nimport { KnowledgeSidebarWrapper } from '@/components/knowledge/KnowledgeSidebarWrapper';\nimport {\n Footer,\n ResourceAnnotationsProvider,\n Toolbar,\n useSemiont,\n useShellStateUnit,\n useObservable,\n useTheme,\n useKBDiscovery,\n} from '@semiont/react-ui';\nimport { ToolbarPanels } from '@/components/toolbar/ToolbarPanels';\nimport { CookiePreferences } from '@/components/CookiePreferences';\nimport { KeyboardShortcutsContext } from '@/contexts/KeyboardShortcutsContext';\nimport { Link, routes } from '@/lib/routing';\n\nfunction GlobalEventsConnector() {\n return null;\n}\n\n/**\n * Empty state for the main content area when no KB is connected or authenticated.\n * Shows contextual guidance based on whether any KBs exist.\n */\nexport function DiscoverEmptyState() {\n const { t: _t } = useTranslation();\n const t = (k: string, p?: Record<string, unknown>) =>\n (p !== undefined ? _t(`DiscoverEmptyState.${k}`, p) : _t(`DiscoverEmptyState.${k}`)) as string;\n const semiont = useSemiont();\n const knowledgeBases = useObservable(semiont.kbs$) ?? [];\n // Launcher discovery: with zero registered KBs, say what's running on this\n // machine instead of only linking docs (BROWSER-KB-DISCOVERY follow-up).\n const { kbs: discoveredKbs } = useKBDiscovery();\n const activeKnowledgeBase = useObservable(semiont.activeSession$)?.kb ?? null;\n const status = activeKnowledgeBase\n ? semiont.getKbSessionStatus(activeKnowledgeBase.id)\n : null;\n\n if (knowledgeBases.length === 0) {\n return (\n <div style={{ textAlign: 'center', maxWidth: '28rem' }}>\n <h2 style={{ fontSize: '1.1rem', fontWeight: 600, marginBottom: '0.5rem' }}>{t('noKnowledgeBases')}</h2>\n <p style={{ color: 'var(--semiont-color-neutral-400)', fontSize: '0.85rem', lineHeight: 1.5, marginBottom: '0.75rem' }}>\n {t('noKnowledgeBasesHint')}\n </p>\n {discoveredKbs.length > 0 && (\n <p style={{ color: 'var(--semiont-color-primary-500)', fontSize: '0.85rem', lineHeight: 1.5, marginBottom: '0.75rem' }}>\n {t('discoveredOnMachine', { count: discoveredKbs.length })}\n </p>\n )}\n <p style={{ color: 'var(--semiont-color-neutral-400)', fontSize: '0.85rem', lineHeight: 1.5 }}>\n <a href=\"https://github.com/The-AI-Alliance/semiont/blob/main/docs/KNOWLEDGE-BASES.md\" target=\"_blank\" rel=\"noopener noreferrer\" style={{ color: 'var(--semiont-color-primary-500)' }}>{t('findKnowledgeBases')}</a>\n {' · '}\n <a href=\"https://github.com/The-AI-Alliance/semiont-template-kb\" target=\"_blank\" rel=\"noopener noreferrer\" style={{ color: 'var(--semiont-color-primary-500)' }}>{t('createNew')}</a>\n </p>\n </div>\n );\n }\n\n if (status === 'authenticated') {\n return null;\n }\n\n return (\n <div style={{ textAlign: 'center', maxWidth: '24rem' }}>\n <h2 style={{ fontSize: '1.1rem', fontWeight: 600, marginBottom: '0.5rem' }}>\n {activeKnowledgeBase?.label ?? ''}\n </h2>\n <p style={{ color: 'var(--semiont-color-neutral-400)', fontSize: '0.85rem', lineHeight: 1.5 }}>\n {status === 'expired' ? t('sessionExpired') : t('signedOut')}\n {' '}{t('signInHint')}\n </p>\n </div>\n );\n}\n\nfunction UnauthenticatedKnowledgeLayout({ t, keyboardContext }: { t: (key: string, params?: Record<string, unknown>) => string; keyboardContext: { openKeyboardHelp?: () => void } | null }) {\n const browseStateUnit = useShellStateUnit();\n const activePanel = useObservable(browseStateUnit.activePanel$) ?? null;\n const { theme } = useTheme();\n\n // The Account panel needs a session. Restored from a previous signed-in visit it\n // is a dead end — \"Sign in to a knowledge base to view your account\" — while the\n // empty state beside it says to sign in using the Knowledge Base panel. Open the\n // panel we are pointing at. Decided once, not reactively: a deliberate click on\n // Account while signed out should still show its message, not snap away.\n const panelCorrected = useRef(false);\n useEffect(() => {\n // useObservable yields null on the first render, before the BehaviorSubject's\n // current value arrives. Spending the one-shot on that null would let the\n // restored panel through on the render that actually carries it.\n if (panelCorrected.current || activePanel === null) return;\n panelCorrected.current = true;\n if (activePanel === 'user') browseStateUnit.openPanel('knowledge-base');\n }, [activePanel, browseStateUnit]);\n\n return (\n <div className=\"h-screen semiont-knowledge-layout semiont-layout-with-footer flex flex-col overflow-hidden\">\n <div className=\"flex flex-1 overflow-hidden\">\n <main className=\"flex-1 w-full px-2 pb-6 flex flex-col overflow-hidden\">\n <div className=\"w-full mx-auto flex-1 flex flex-col h-full overflow-hidden items-center justify-center\">\n <DiscoverEmptyState />\n </div>\n </main>\n <ToolbarPanels\n activePanel={activePanel}\n theme={theme}\n />\n <Toolbar activePanel={activePanel} context=\"simple\" />\n </div>\n <Footer\n Link={Link}\n routes={routes}\n t={(key: string, params?: Record<string, unknown>) => t(`Footer.${key}`, params as any) as string}\n CookiePreferences={CookiePreferences}\n showPolicyLinks={!('__TAURI_INTERNALS__' in window)}\n {...(keyboardContext?.openKeyboardHelp && { onOpenKeyboardHelp: keyboardContext.openKeyboardHelp })}\n />\n </div>\n );\n}\n\nfunction KnowledgeLayoutBody() {\n const { t } = useTranslation();\n const keyboardContext = useContext(KeyboardShortcutsContext);\n const semiont = useSemiont();\n const activeKbId = useObservable(semiont.activeKbId$);\n const session = useObservable(semiont.activeSession$);\n const sessionActivating = useObservable(semiont.sessionActivating$);\n const token = useObservable(session?.token$);\n const activeKnowledgeBase = session?.kb ?? null;\n // \"Loading\" = a session construction is actively in flight. Without\n // the `sessionActivating` guard we'd sit on the spinner forever after\n // any `signOut`, which also leaves `activeKbId` set but `session`\n // null.\n const isLoading = activeKbId != null && session == null && sessionActivating;\n\n if (isLoading) {\n return (\n <div className=\"h-screen flex items-center justify-center\">\n <div className=\"text-center\">\n <div className=\"animate-spin rounded-full h-12 w-12 border-b-2 border-blue-600 mx-auto mb-4\"></div>\n <p className=\"text-gray-600 dark:text-gray-400\">Loading...</p>\n </div>\n </div>\n );\n }\n\n if (!activeKnowledgeBase || !token) {\n return (\n <UnauthenticatedKnowledgeLayout t={(key: string, params?: Record<string, unknown>) => t(key, params as any) as string} keyboardContext={keyboardContext} />\n );\n }\n\n return (\n <ResourceAnnotationsProvider>\n <GlobalEventsConnector />\n <div className=\"h-screen semiont-knowledge-layout semiont-layout-with-footer flex flex-col overflow-hidden\">\n <div className=\"flex flex-1 overflow-hidden\">\n <KnowledgeSidebarWrapper />\n <main className=\"flex-1 w-full px-2 pb-6 flex flex-col overflow-hidden\">\n <div className=\"w-full mx-auto flex-1 flex flex-col h-full overflow-hidden\">\n <Outlet />\n </div>\n </main>\n </div>\n <Footer\n Link={Link}\n routes={routes}\n t={(key: string, params?: Record<string, unknown>) => t(`Footer.${key}`, params as any) as string}\n CookiePreferences={CookiePreferences}\n showPolicyLinks={!('__TAURI_INTERNALS__' in window)}\n {...(keyboardContext?.openKeyboardHelp && { onOpenKeyboardHelp: keyboardContext.openKeyboardHelp })}\n />\n </div>\n </ResourceAnnotationsProvider>\n );\n}\n\nexport default function KnowledgeLayout() {\n // AuthShell is mounted by the parent ProtectedLayout in App.tsx so it\n // survives navigation between know/, admin/, and moderate/ sections.\n return <KnowledgeLayoutBody />;\n}\n"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import{o as e,t}from"./vendor-BVP6ONpk.js";import{n}from"./routing-BJiyORAR.js";var r=t();function i(){let t=n();return(0,r.jsx)(e,{to:`/${t}/admin/users`,replace:!0})}export{i as default};
2
- //# sourceMappingURL=page-De2leEHb.js.map