@semiont/cli 0.4.13 → 0.4.14
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/dist/cli.mjs +9 -9
- package/dist/dashboard/dashboard.css +1 -1
- package/dist/dashboard/dashboard.css.map +2 -2
- package/dist/frontend/dist/assets/CookiePreferences-Cbur0STI.js +2 -0
- package/dist/frontend/dist/assets/CookiePreferences-Cbur0STI.js.map +1 -0
- package/dist/frontend/dist/assets/{PdfAnnotationCanvas.client-CW6SKH2U-Ct60nVWs.js → PdfAnnotationCanvas.client-CW6SKH2U-DIkAGn7X.js} +2 -2
- package/dist/frontend/dist/assets/{PdfAnnotationCanvas.client-CW6SKH2U-Ct60nVWs.js.map → PdfAnnotationCanvas.client-CW6SKH2U-DIkAGn7X.js.map} +1 -1
- package/dist/frontend/dist/assets/ToolbarPanels-rN1MIRTV.js +2 -0
- package/dist/frontend/dist/assets/ToolbarPanels-rN1MIRTV.js.map +1 -0
- package/dist/frontend/dist/assets/XMarkIcon-6m9KVFaj.js +2 -0
- package/dist/frontend/dist/assets/XMarkIcon-6m9KVFaj.js.map +1 -0
- package/dist/frontend/dist/assets/client-BPbsU2tc.js +2 -0
- package/dist/frontend/dist/assets/{client-DvSa4CTk.js.map → client-BPbsU2tc.js.map} +1 -1
- package/dist/frontend/dist/assets/client-BiL3eI7d.js +2 -0
- package/dist/frontend/dist/assets/{client-B-4-Nmfd.js.map → client-BiL3eI7d.js.map} +1 -1
- package/dist/frontend/dist/assets/client-BnL1es01.js +2 -0
- package/dist/frontend/dist/assets/{client-CTdkaDl6.js.map → client-BnL1es01.js.map} +1 -1
- package/dist/frontend/dist/assets/client-DrQUcCJy.js +2 -0
- package/dist/frontend/dist/assets/{client-rUyzJlA6.js.map → client-DrQUcCJy.js.map} +1 -1
- package/dist/frontend/dist/assets/en-IUV4ZXKH-BY1RKeLS.js +135 -0
- package/dist/frontend/dist/assets/en-IUV4ZXKH-BY1RKeLS.js.map +1 -0
- package/dist/frontend/dist/assets/{index-CwQxZp6g.css → index-CNb3PHS7.css} +1 -1
- package/dist/frontend/dist/assets/{index-dFCLrpeL.js → index-DA31r_0s.js} +3 -3
- package/dist/frontend/dist/assets/index-DA31r_0s.js.map +1 -0
- package/dist/frontend/dist/assets/layout-B8IinUdt.js +2 -0
- package/dist/frontend/dist/assets/layout-B8IinUdt.js.map +1 -0
- package/dist/frontend/dist/assets/layout-BjpW078f.js +2 -0
- package/dist/frontend/dist/assets/layout-BjpW078f.js.map +1 -0
- package/dist/frontend/dist/assets/{layout-CL9MSbhu.js → layout-CDIjxs5a.js} +4 -4
- package/dist/frontend/dist/assets/layout-CDIjxs5a.js.map +1 -0
- package/dist/frontend/dist/assets/layout-DKm9XdRr.js +2 -0
- package/dist/frontend/dist/assets/{layout-CCNyNXfP.js.map → layout-DKm9XdRr.js.map} +1 -1
- package/dist/frontend/dist/assets/{not-found-DE1pkuFl.js → not-found-CwWw1pZc.js} +2 -2
- package/dist/frontend/dist/assets/{not-found-DE1pkuFl.js.map → not-found-CwWw1pZc.js.map} +1 -1
- package/dist/frontend/dist/assets/{page-D5i-uRGy.js → page-1BwlyTUj.js} +2 -2
- package/dist/frontend/dist/assets/{page-D5i-uRGy.js.map → page-1BwlyTUj.js.map} +1 -1
- package/dist/frontend/dist/assets/page-BQ00VxR5.js +2 -0
- package/dist/frontend/dist/assets/page-BQ00VxR5.js.map +1 -0
- package/dist/frontend/dist/assets/page-BmHLf-7O.js +2 -0
- package/dist/frontend/dist/assets/{page-DiKTriTX.js.map → page-BmHLf-7O.js.map} +1 -1
- package/dist/frontend/dist/assets/page-C5bIvv1V.js +2 -0
- package/dist/frontend/dist/assets/{page-BfUI7FZJ.js.map → page-C5bIvv1V.js.map} +1 -1
- package/dist/frontend/dist/assets/{page-B-TRTXbV.js → page-CelRTchO.js} +3 -3
- package/dist/frontend/dist/assets/{page-B-TRTXbV.js.map → page-CelRTchO.js.map} +1 -1
- package/dist/frontend/dist/assets/page-Cf9cnqhC.js +2 -0
- package/dist/frontend/dist/assets/{page-B3h2_PT5.js.map → page-Cf9cnqhC.js.map} +1 -1
- package/dist/frontend/dist/assets/page-CslYhbgz.js +2 -0
- package/dist/frontend/dist/assets/{page-qhHVLOTR.js.map → page-CslYhbgz.js.map} +1 -1
- package/dist/frontend/dist/assets/page-DEjlNEY0.js +2 -0
- package/dist/frontend/dist/assets/{page-Cu2tT5mi.js.map → page-DEjlNEY0.js.map} +1 -1
- package/dist/frontend/dist/assets/page-DLtwpo78.js +2 -0
- package/dist/frontend/dist/assets/{page-C-os3U8h.js.map → page-DLtwpo78.js.map} +1 -1
- package/dist/frontend/dist/assets/{page-DXACCazr.js → page-D_nHe9FT.js} +2 -2
- package/dist/frontend/dist/assets/{page-DXACCazr.js.map → page-D_nHe9FT.js.map} +1 -1
- package/dist/frontend/dist/assets/page-Deep7E5d.js +2 -0
- package/dist/frontend/dist/assets/{page-C_L33_wR.js.map → page-Deep7E5d.js.map} +1 -1
- package/dist/frontend/dist/assets/{page-CUbbBytS.js → page-Dv386AZD.js} +3 -3
- package/dist/frontend/dist/assets/{page-CUbbBytS.js.map → page-Dv386AZD.js.map} +1 -1
- package/dist/frontend/dist/assets/page-E99MPOn5.js +8 -0
- package/dist/frontend/dist/assets/{page-CaVtCo4z.js.map → page-E99MPOn5.js.map} +1 -1
- package/dist/frontend/dist/assets/page-KtkB4tEv.js +2 -0
- package/dist/frontend/dist/assets/{page-C02dLWb8.js.map → page-KtkB4tEv.js.map} +1 -1
- package/dist/frontend/dist/assets/page-ZBwMTeR-.js +2 -0
- package/dist/frontend/dist/assets/page-ZBwMTeR-.js.map +1 -0
- package/dist/frontend/dist/assets/page-Zq6ARIvg.js +2 -0
- package/dist/frontend/dist/assets/{page-CGDUl5-d.js.map → page-Zq6ARIvg.js.map} +1 -1
- package/dist/frontend/dist/assets/page-iSL5E639.js +2 -0
- package/dist/frontend/dist/assets/page-iSL5E639.js.map +1 -0
- package/dist/frontend/dist/assets/page-xdXYx3nl.js +2 -0
- package/dist/frontend/dist/assets/{page-CHq5JMOn.js.map → page-xdXYx3nl.js.map} +1 -1
- package/dist/frontend/dist/assets/{privacy-BMKdYFGC.js → privacy-DO1oxJpM.js} +2 -2
- package/dist/frontend/dist/assets/{privacy-BMKdYFGC.js.map → privacy-DO1oxJpM.js.map} +1 -1
- package/dist/frontend/dist/assets/routing-DMdXWYXo.js +2 -0
- package/dist/frontend/dist/assets/{routing-BPQO9e8a.js.map → routing-DMdXWYXo.js.map} +1 -1
- package/dist/frontend/dist/assets/{routing-BBQqTcTn.js → routing-tJ_HbFRP.js} +2 -2
- package/dist/frontend/dist/assets/{routing-BBQqTcTn.js.map → routing-tJ_HbFRP.js.map} +1 -1
- package/dist/frontend/dist/assets/useAuth-yUx5lBP5.js +2 -0
- package/dist/frontend/dist/assets/useAuth-yUx5lBP5.js.map +1 -0
- package/dist/frontend/dist/index.html +2 -2
- package/dist/frontend/dist/messages/ar.json +28 -6
- package/dist/frontend/dist/messages/bn.json +28 -6
- package/dist/frontend/dist/messages/cs.json +28 -6
- package/dist/frontend/dist/messages/da.json +28 -6
- package/dist/frontend/dist/messages/de.json +28 -6
- package/dist/frontend/dist/messages/el.json +28 -6
- package/dist/frontend/dist/messages/en.json +28 -6
- package/dist/frontend/dist/messages/es.json +28 -6
- package/dist/frontend/dist/messages/fa.json +28 -6
- package/dist/frontend/dist/messages/fi.json +28 -6
- package/dist/frontend/dist/messages/fr.json +28 -6
- package/dist/frontend/dist/messages/he.json +28 -6
- package/dist/frontend/dist/messages/hi.json +28 -6
- package/dist/frontend/dist/messages/id.json +28 -6
- package/dist/frontend/dist/messages/it.json +28 -6
- package/dist/frontend/dist/messages/ja.json +28 -6
- package/dist/frontend/dist/messages/ko.json +28 -6
- package/dist/frontend/dist/messages/ms.json +28 -6
- package/dist/frontend/dist/messages/nl.json +28 -6
- package/dist/frontend/dist/messages/no.json +28 -6
- package/dist/frontend/dist/messages/pl.json +28 -6
- package/dist/frontend/dist/messages/pt.json +28 -6
- package/dist/frontend/dist/messages/ro.json +28 -6
- package/dist/frontend/dist/messages/sv.json +28 -6
- package/dist/frontend/dist/messages/th.json +28 -6
- package/dist/frontend/dist/messages/tr.json +28 -6
- package/dist/frontend/dist/messages/uk.json +28 -6
- package/dist/frontend/dist/messages/vi.json +28 -6
- package/dist/frontend/dist/messages/zh.json +28 -6
- package/dist/frontend/package.json +1 -1
- package/package.json +7 -7
- package/dist/frontend/dist/assets/AuthContext-CqopYuY9.js +0 -2
- package/dist/frontend/dist/assets/AuthContext-CqopYuY9.js.map +0 -1
- package/dist/frontend/dist/assets/CookiePreferences-DIUP_g1S.js +0 -2
- package/dist/frontend/dist/assets/CookiePreferences-DIUP_g1S.js.map +0 -1
- package/dist/frontend/dist/assets/KnowledgeBaseContext-CgnF8K-_.js +0 -2
- package/dist/frontend/dist/assets/KnowledgeBaseContext-CgnF8K-_.js.map +0 -1
- package/dist/frontend/dist/assets/PlusIcon-qGFPUzg0.js +0 -2
- package/dist/frontend/dist/assets/PlusIcon-qGFPUzg0.js.map +0 -1
- package/dist/frontend/dist/assets/ToolbarPanels-CtBfzYcP.js +0 -2
- package/dist/frontend/dist/assets/ToolbarPanels-CtBfzYcP.js.map +0 -1
- package/dist/frontend/dist/assets/client-B-4-Nmfd.js +0 -2
- package/dist/frontend/dist/assets/client-CTdkaDl6.js +0 -2
- package/dist/frontend/dist/assets/client-DvSa4CTk.js +0 -2
- package/dist/frontend/dist/assets/client-rUyzJlA6.js +0 -2
- package/dist/frontend/dist/assets/en-IUV4ZXKH-b_r0oyRV.js +0 -135
- package/dist/frontend/dist/assets/en-IUV4ZXKH-b_r0oyRV.js.map +0 -1
- package/dist/frontend/dist/assets/index-dFCLrpeL.js.map +0 -1
- package/dist/frontend/dist/assets/layout-BwurEG3I.js +0 -2
- package/dist/frontend/dist/assets/layout-BwurEG3I.js.map +0 -1
- package/dist/frontend/dist/assets/layout-CCNyNXfP.js +0 -2
- package/dist/frontend/dist/assets/layout-CHfFscVU.js +0 -2
- package/dist/frontend/dist/assets/layout-CHfFscVU.js.map +0 -1
- package/dist/frontend/dist/assets/layout-CL9MSbhu.js.map +0 -1
- package/dist/frontend/dist/assets/page-B3h2_PT5.js +0 -2
- package/dist/frontend/dist/assets/page-BfUI7FZJ.js +0 -2
- package/dist/frontend/dist/assets/page-C-os3U8h.js +0 -2
- package/dist/frontend/dist/assets/page-C02dLWb8.js +0 -2
- package/dist/frontend/dist/assets/page-CGDUl5-d.js +0 -2
- package/dist/frontend/dist/assets/page-CHq5JMOn.js +0 -2
- package/dist/frontend/dist/assets/page-C_L33_wR.js +0 -2
- package/dist/frontend/dist/assets/page-CaVtCo4z.js +0 -8
- package/dist/frontend/dist/assets/page-CjTcoHSS.js +0 -2
- package/dist/frontend/dist/assets/page-CjTcoHSS.js.map +0 -1
- package/dist/frontend/dist/assets/page-CtRMzwE_.js +0 -2
- package/dist/frontend/dist/assets/page-CtRMzwE_.js.map +0 -1
- package/dist/frontend/dist/assets/page-Cu2tT5mi.js +0 -2
- package/dist/frontend/dist/assets/page-DiKTriTX.js +0 -2
- package/dist/frontend/dist/assets/page-eJup0RrB.js +0 -2
- package/dist/frontend/dist/assets/page-eJup0RrB.js.map +0 -1
- package/dist/frontend/dist/assets/page-qhHVLOTR.js +0 -2
- package/dist/frontend/dist/assets/routing-BPQO9e8a.js +0 -2
- package/dist/frontend/dist/assets/useAuth-B9hvtwrc.js +0 -2
- package/dist/frontend/dist/assets/useAuth-B9hvtwrc.js.map +0 -1
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{j as s,u as N}from"./query-ATBhtd3K.js";import{r as d,O as L}from"./vendor-EnoIVk-c.js";import{a6 as C,g as A,a7 as E,Y as K,a8 as O,a9 as F,V as M,X as P,aa as _,ab as H,ac as I,F as T,ad as B,ae as U,af as q}from"./en-IUV4ZXKH-b_r0oyRV.js";import{b as G,a as x,L as J}from"./routing-BPQO9e8a.js";import{u as m}from"./i18n-BYxb14hm.js";import{F as Q}from"./PlusIcon-qGFPUzg0.js";import{a as V,C as D}from"./CookiePreferences-DIUP_g1S.js";import{F as Y,a as z}from"./ChevronLeftIcon-CMXd_XZQ.js";import{r as v,L as w}from"./routing-BBQqTcTn.js";import{u as g}from"./useAuth-B9hvtwrc.js";import{K as W}from"./privacy-BMKdYFGC.js";import{u as X}from"./KnowledgeBaseContext-CgnF8K-_.js";import{S as Z}from"./StreamStatusContext-BuPATpTz.js";import"./index-dFCLrpeL.js";import"./AuthContext-CqopYuY9.js";const ee=({className:o})=>s.jsx("span",{className:o,style:{fontSize:"1.25rem",lineHeight:"1"},children:"🔭"});function oe({href:o,to:e,...r}){return s.jsx(J,{to:o??"",...r})}function te({isCollapsed:o,toggleCollapsed:e,navigationMenu:r}){const{t}=m(),n=(u,h)=>t(`Sidebar.${u}`,h),i=G(),l=x(),{openResources:a,removeResource:c,reorderResources:f}=C(),k=[{name:n("discover"),href:"/know/discover",icon:ee,description:n("searchAndBrowse")},{name:n("compose"),href:"/know/compose",icon:Q,description:n("composeNewResource")}],R=d.useCallback(()=>{e()},[e]),j=d.useCallback(({resourceId:u})=>{c(u),i===`/know/resource/${u}`&&l.push("/know/discover")},[c,i,l]),y=d.useCallback(({oldIndex:u,newIndex:h})=>{f(u,h)},[f]);A({"browse:sidebar-toggle":R,"browse:resource-close":j,"browse:resource-reorder":y});const S=u=>{l.push(u)},$=u=>`/know/resource/${u}`;return s.jsx("div",{className:"flex flex-col h-full",children:s.jsx("div",{className:"flex-1 min-h-0 overflow-y-auto",children:s.jsx(E,{fixedItems:k,resources:a,isCollapsed:o,currentPath:i,LinkComponent:oe,onNavigate:S,getResourceHref:$,className:"knowledge-navigation",translations:{title:n("title")},icons:{chevronLeft:z,bars:Y,close:V},navigationMenu:r})})})}function se(){const{t:o}=m(),e=(a,c)=>o(`Navigation.${a}`,c),{t:r}=m(),t=(a,c)=>r(`Home.${a}`,c),{isAuthenticated:n,isAdmin:i,isModerator:l}=g();return s.jsx(K,{Link:w,routes:v,t:e,tHome:t,brandingLink:"/",collapsible:!0,storageKey:"knowledgeNavCollapsed",isAuthenticated:n,isAdmin:i,isModerator:l,children:(a,c,f)=>s.jsx(te,{isCollapsed:a,toggleCollapsed:c,navigationMenu:f})})}const p="openDocuments";function b(o){return[...o].sort((e,r)=>e.order!==void 0&&r.order!==void 0?e.order-r.order:e.openedAt-r.openedAt)}function re(){if(typeof localStorage>"u")return[];try{const o=localStorage.getItem(p);if(o)return b(JSON.parse(o))}catch{}return[]}class ne{constructor(){this.state$=new O(re()),this.resources$=this.state$.asObservable(),this.handleStorageEvent=e=>{if(e.key===p&&e.newValue)try{this.state$.next(b(JSON.parse(e.newValue)))}catch{}},this.state$.subscribe(e=>{typeof localStorage<"u"&&localStorage.setItem(p,JSON.stringify(e))}),typeof window<"u"&&window.addEventListener("storage",this.handleStorageEvent)}get resources(){return this.state$.value}add(e,r,t,n){const i=this.state$.value;if(i.find(a=>a.id===e))this.state$.next(i.map(a=>a.id===e?{...a,name:r,...t&&{mediaType:t},...n&&{storageUri:n}}:a));else{const a=i.length>0?Math.max(...i.map(c=>c.order??c.openedAt)):0;this.state$.next([...i,{id:e,name:r,openedAt:Date.now(),order:a+1,...t&&{mediaType:t},...n&&{storageUri:n}}])}}remove(e){this.state$.next(this.state$.value.filter(r=>r.id!==e))}updateName(e,r){this.state$.next(this.state$.value.map(t=>t.id===e?{...t,name:r}:t))}reorder(e,r){const t=[...this.state$.value],n=t.splice(e,1)[0];t.splice(r,0,n),this.state$.next(t.map((i,l)=>({...i,order:l})))}destroy(){typeof window<"u"&&window.removeEventListener("storage",this.handleStorageEvent)}}function ae(){const o=d.useMemo(()=>new ne,[]);d.useEffect(()=>()=>o.destroy(),[o]);const e=F(o.resources$)??o.resources,r=d.useMemo(()=>({addResource:(t,n,i,l)=>o.add(t,n,i,l),removeResource:t=>o.remove(t),updateResourceName:(t,n)=>o.updateName(t,n),reorderResources:(t,n)=>o.reorder(t,n)}),[o]);return d.useMemo(()=>({openResources:e,...r}),[e,r])}function ie(){const o=N();return d.useMemo(()=>({invalidateAnnotations:e=>{o.invalidateQueries({queryKey:["resources",e,"annotations"]})},invalidateEvents:e=>{o.invalidateQueries({queryKey:["resources",e,"events"]})}}),[o])}function ce(){return B(),U(),null}function le({children:o}){const{status:e}=q();return s.jsx(Z.Provider,{value:e,children:o})}function Se(){const{t:o}=m(),e=d.useContext(W),r=ae(),t=ie(),{token:n,isLoading:i}=g(),l=x(),{activeKnowledgeBase:a}=X();if(!a)return l.push("/auth/connect?callbackUrl=/know"),null;if(i)return s.jsx("div",{className:"h-screen flex items-center justify-center",children:s.jsxs("div",{className:"text-center",children:[s.jsx("div",{className:"animate-spin rounded-full h-12 w-12 border-b-2 border-blue-600 mx-auto mb-4"}),s.jsx("p",{className:"text-gray-600 dark:text-gray-400",children:"Loading..."})]})});if(!n){const c=encodeURIComponent(typeof window<"u"?window.location.pathname:"/know");return l.push(`/auth/connect?workspaceId=${a.id}&callbackUrl=${c}`),null}return s.jsx(M,{token:n,children:s.jsx(P,{baseUrl:a.backendUrl,children:s.jsx(_,{cacheManager:t,children:s.jsx(H,{openResourcesManager:r,children:s.jsxs(I,{children:[s.jsx(ce,{}),s.jsx(le,{children:s.jsxs("div",{className:"h-screen semiont-knowledge-layout semiont-layout-with-footer flex flex-col overflow-hidden",children:[s.jsxs("div",{className:"flex flex-1 overflow-hidden",children:[s.jsx(se,{}),s.jsx("main",{className:"flex-1 w-full px-2 pb-6 flex flex-col overflow-hidden",children:s.jsx("div",{className:"w-full mx-auto flex-1 flex flex-col h-full overflow-hidden",children:s.jsx(L,{})})})]}),s.jsx(T,{Link:w,routes:v,t:(c,f)=>o(`Footer.${c}`,f),CookiePreferences:D,showPolicyLinks:!("__TAURI_INTERNALS__"in window),...(e==null?void 0:e.openKeyboardHelp)&&{onOpenKeyboardHelp:e.openKeyboardHelp}})]})})]})})})})})}export{Se as default};
|
|
2
|
-
//# sourceMappingURL=layout-BwurEG3I.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"layout-BwurEG3I.js","sources":["../../src/components/knowledge/KnowledgeNavigation.tsx","../../src/components/knowledge/KnowledgeSidebarWrapper.tsx","../../src/stores/open-resources-store.ts","../../src/hooks/useOpenResourcesManager.ts","../../src/hooks/useCacheManager.ts","../../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 useOpenResources,\n useEventSubscriptions,\n CollapsibleResourceNavigation,\n type NavigationItem,\n type OpenResource\n} from '@semiont/react-ui';\n\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 { openResources, removeResource, reorderResources } = useOpenResources();\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 'browse:sidebar-toggle': handleSidebarToggle,\n 'browse:resource-close': handleResourceClose,\n 'browse:resource-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 React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { LeftSidebar } from '@semiont/react-ui';\nimport { KnowledgeNavigation } from './KnowledgeNavigation';\nimport { Link, routes } from '@/lib/routing';\nimport { useAuth } from '@/hooks/useAuth';\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 { isAuthenticated, isAdmin, isModerator } = useAuth();\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","/**\n * OpenResourcesStore — per-workspace observable store for open resources\n *\n * BehaviorSubject-backed store for the list of open documents (tabs).\n * Replaces useState in useOpenResourcesManager with a reactive store that:\n * - Persists to localStorage\n * - Syncs across tabs via StorageEvent\n */\n\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport type { OpenResource } from '@semiont/react-ui';\n\nconst STORAGE_KEY = 'openDocuments';\n\nfunction sortResources(resources: OpenResource[]): OpenResource[] {\n return [...resources].sort((a, b) => {\n if (a.order !== undefined && b.order !== undefined) return a.order - b.order;\n return a.openedAt - b.openedAt;\n });\n}\n\nfunction loadFromStorage(): OpenResource[] {\n if (typeof localStorage === 'undefined') return [];\n try {\n const stored = localStorage.getItem(STORAGE_KEY);\n if (stored) return sortResources(JSON.parse(stored) as OpenResource[]);\n } catch {\n // Ignore parse errors\n }\n return [];\n}\n\nexport class OpenResourcesStore {\n private readonly state$ = new BehaviorSubject<OpenResource[]>(loadFromStorage());\n\n /** Observable of the current open resources list */\n readonly resources$: Observable<OpenResource[]> = this.state$.asObservable();\n\n constructor() {\n // Persist to localStorage on every change\n this.state$.subscribe(resources => {\n if (typeof localStorage !== 'undefined') {\n localStorage.setItem(STORAGE_KEY, JSON.stringify(resources));\n }\n });\n\n // Sync from other tabs\n if (typeof window !== 'undefined') {\n window.addEventListener('storage', this.handleStorageEvent);\n }\n }\n\n private readonly handleStorageEvent = (e: StorageEvent): void => {\n if (e.key === STORAGE_KEY && e.newValue) {\n try {\n this.state$.next(sortResources(JSON.parse(e.newValue) as OpenResource[]));\n } catch {\n // Ignore parse errors\n }\n }\n };\n\n get resources(): OpenResource[] {\n return this.state$.value;\n }\n\n add(id: string, name: string, mediaType?: string, storageUri?: string): void {\n const current = this.state$.value;\n const existing = current.find(r => r.id === id);\n if (existing) {\n this.state$.next(current.map(r =>\n r.id === id\n ? { ...r, name, ...(mediaType && { mediaType }), ...(storageUri && { storageUri }) }\n : r\n ));\n } else {\n const maxOrder = current.length > 0\n ? Math.max(...current.map(r => r.order ?? r.openedAt))\n : 0;\n this.state$.next([\n ...current,\n { id, name, openedAt: Date.now(), order: maxOrder + 1, ...(mediaType && { mediaType }), ...(storageUri && { storageUri }) },\n ]);\n }\n }\n\n remove(id: string): void {\n this.state$.next(this.state$.value.filter(r => r.id !== id));\n }\n\n updateName(id: string, name: string): void {\n this.state$.next(this.state$.value.map(r => r.id === id ? { ...r, name } : r));\n }\n\n reorder(oldIndex: number, newIndex: number): void {\n const current = [...this.state$.value];\n const moved = current.splice(oldIndex, 1)[0]!;\n current.splice(newIndex, 0, moved);\n this.state$.next(current.map((r, index) => ({ ...r, order: index })));\n }\n\n /** Release event listener — call when the workspace is torn down */\n destroy(): void {\n if (typeof window !== 'undefined') {\n window.removeEventListener('storage', this.handleStorageEvent);\n }\n }\n}\n","import { useMemo, useEffect } from 'react';\nimport type { OpenResourcesManager } from '@semiont/react-ui';\nimport { useObservable } from '@semiont/react-ui';\nimport { OpenResourcesStore } from '@/stores/open-resources-store';\n\n/**\n * Hook that provides OpenResourcesManager delegating to OpenResourcesStore.\n * State lives in a BehaviorSubject; React re-renders via useObservable subscription.\n */\nexport function useOpenResourcesManager(): OpenResourcesManager {\n const store = useMemo(() => new OpenResourcesStore(), []);\n\n useEffect(() => () => store.destroy(), [store]);\n\n const openResources = useObservable(store.resources$) ?? store.resources;\n\n const callbacks = useMemo(\n () => ({\n addResource: (id: string, name: string, mediaType?: string, storageUri?: string) =>\n store.add(id, name, mediaType, storageUri),\n removeResource: (id: string) => store.remove(id),\n updateResourceName: (id: string, name: string) => store.updateName(id, name),\n reorderResources: (oldIndex: number, newIndex: number) => store.reorder(oldIndex, newIndex),\n }),\n [store],\n );\n\n return useMemo(\n () => ({ openResources, ...callbacks }),\n [openResources, callbacks],\n );\n}\n","import { useMemo } from 'react';\nimport { useQueryClient } from '@tanstack/react-query';\nimport type { CacheManager } from '@semiont/react-ui';\nimport type { ResourceId } from '@semiont/core';\n\n/**\n * Frontend implementation of CacheManager using React Query\n *\n * Usage:\n * ```typescript\n * const cacheManager = useCacheManager();\n * <CacheProvider cacheManager={cacheManager}>\n * <YourComponents />\n * </CacheProvider>\n * ```\n */\nexport function useCacheManager(): CacheManager {\n const queryClient = useQueryClient();\n\n return useMemo(() => ({\n invalidateAnnotations: (rUri: ResourceId) => {\n queryClient.invalidateQueries({ queryKey: ['resources', rUri, 'annotations'] });\n },\n invalidateEvents: (rUri: ResourceId) => {\n queryClient.invalidateQueries({ queryKey: ['resources', rUri, 'events'] });\n }\n }), [queryClient]);\n}\n","import { useContext } from 'react';\nimport { Outlet } from 'react-router-dom';\nimport { useTranslation } from 'react-i18next';\nimport { KnowledgeSidebarWrapper } from '@/components/knowledge/KnowledgeSidebarWrapper';\nimport { Footer, ResourceAnnotationsProvider, OpenResourcesProvider, CacheProvider, ApiClientProvider, AuthTokenProvider, useGlobalEvents, useAttentionStream, useStoreTokenSync } from '@semiont/react-ui';\nimport { CookiePreferences } from '@/components/CookiePreferences';\nimport { KeyboardShortcutsContext } from '@/contexts/KeyboardShortcutsContext';\nimport { Link, routes } from '@/lib/routing';\nimport { useOpenResourcesManager } from '@/hooks/useOpenResourcesManager';\nimport { useCacheManager } from '@/hooks/useCacheManager';\nimport { useAuth } from '@/hooks/useAuth';\nimport { useRouter } from '@/i18n/routing';\nimport { useKnowledgeBaseContext } from '@/contexts/KnowledgeBaseContext';\nimport { StreamStatusContext } from '@/contexts/StreamStatusContext';\n\nfunction GlobalEventsConnector() {\n useStoreTokenSync();\n useGlobalEvents();\n return null;\n}\n\nfunction KnowledgeLayoutInner({ children }: { children: React.ReactNode }) {\n const { status } = useAttentionStream();\n return (\n <StreamStatusContext.Provider value={status}>\n {children}\n </StreamStatusContext.Provider>\n );\n}\n\nexport default function KnowledgeLayout() {\n const { t } = useTranslation();\n const keyboardContext = useContext(KeyboardShortcutsContext);\n const openResourcesManager = useOpenResourcesManager();\n const cacheManager = useCacheManager();\n const { token: authToken, isLoading } = useAuth();\n const router = useRouter();\n const { activeKnowledgeBase } = useKnowledgeBaseContext();\n\n if (!activeKnowledgeBase) {\n router.push('/auth/connect?callbackUrl=/know');\n return null;\n }\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 (!authToken) {\n const callbackUrl = encodeURIComponent(typeof window !== 'undefined' ? window.location.pathname : '/know');\n router.push(`/auth/connect?workspaceId=${activeKnowledgeBase.id}&callbackUrl=${callbackUrl}`);\n return null;\n }\n\n return (\n <AuthTokenProvider token={authToken}>\n <ApiClientProvider baseUrl={activeKnowledgeBase.backendUrl}>\n <CacheProvider cacheManager={cacheManager}>\n <OpenResourcesProvider openResourcesManager={openResourcesManager}>\n <ResourceAnnotationsProvider>\n <GlobalEventsConnector />\n <KnowledgeLayoutInner>\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 </KnowledgeLayoutInner>\n </ResourceAnnotationsProvider>\n </OpenResourcesProvider>\n </CacheProvider>\n </ApiClientProvider>\n </AuthTokenProvider>\n );\n}\n"],"names":["TelescopeIcon","className","jsx","HrefLink","href","_to","props","Link","KnowledgeNavigation","isCollapsed","toggleCollapsed","navigationMenu","_t","useTranslation","t","k","p","pathname","usePathname","router","useRouter","openResources","removeResource","reorderResources","useOpenResources","fixedNavigation","PlusIcon","handleSidebarToggle","useCallback","handleResourceClose","resourceId","handleResourceReorder","oldIndex","newIndex","useEventSubscriptions","handleNavigate","path","getResourceHref","CollapsibleResourceNavigation","ChevronLeftIcon","Bars3Icon","XMarkIcon","KnowledgeSidebarWrapper","_tHome","tHome","isAuthenticated","isAdmin","isModerator","useAuth","LeftSidebar","routes","STORAGE_KEY","sortResources","resources","a","b","loadFromStorage","stored","OpenResourcesStore","BehaviorSubject","id","name","mediaType","storageUri","current","r","maxOrder","moved","index","useOpenResourcesManager","store","useMemo","useEffect","useObservable","callbacks","useCacheManager","queryClient","useQueryClient","rUri","GlobalEventsConnector","useStoreTokenSync","useGlobalEvents","KnowledgeLayoutInner","children","status","useAttentionStream","StreamStatusContext","KnowledgeLayout","keyboardContext","useContext","KeyboardShortcutsContext","openResourcesManager","cacheManager","authToken","isLoading","activeKnowledgeBase","useKnowledgeBaseContext","jsxs","callbackUrl","AuthTokenProvider","ApiClientProvider","CacheProvider","OpenResourcesProvider","ResourceAnnotationsProvider","Outlet","Footer","key","params","CookiePreferences"],"mappings":"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"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{j as n}from"./query-ATBhtd3K.js";import{r as t,O as b}from"./vendor-EnoIVk-c.js";import{g as k,U as g,V as w,X as v,Y as L,F as j}from"./en-IUV4ZXKH-b_r0oyRV.js";import{b as S,L as y,a as E}from"./routing-BPQO9e8a.js";import{u as p}from"./i18n-BYxb14hm.js";import{F as R}from"./ArrowsRightLeftIcon-CMDe963r.js";import{F as C,a as F}from"./ChevronLeftIcon-CMXd_XZQ.js";import{C as $}from"./CookiePreferences-DIUP_g1S.js";import{K as A}from"./privacy-BMKdYFGC.js";import{r as h,L as x}from"./routing-BBQqTcTn.js";import{u as H}from"./useAuth-B9hvtwrc.js";import{u as K}from"./KnowledgeBaseContext-CgnF8K-_.js";import"./index-dFCLrpeL.js";import"./AuthContext-CqopYuY9.js";function M({title:r,titleId:e,...o},s){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:1.5,stroke:"currentColor","aria-hidden":"true","data-slot":"icon",ref:s,"aria-labelledby":e},o),r?t.createElement("title",{id:e},r):null,t.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M12 6.042A8.967 8.967 0 0 0 6 3.75c-1.052 0-2.062.18-3 .512v14.25A8.987 8.987 0 0 1 6 18c2.305 0 4.408.867 6 2.292m0-14.25a8.966 8.966 0 0 1 6-2.292c1.052 0 2.062.18 3 .512v14.25A8.987 8.987 0 0 0 18 18a8.967 8.967 0 0 0-6 2.292m0-14.25v14.25"}))}const N=t.forwardRef(M);function O({title:r,titleId:e,...o},s){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:1.5,stroke:"currentColor","aria-hidden":"true","data-slot":"icon",ref:s,"aria-labelledby":e},o),r?t.createElement("title",{id:e},r):null,t.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M12 6v6h4.5m4.5 0a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z"}))}const T=t.forwardRef(O);function B({title:r,titleId:e,...o},s){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:1.5,stroke:"currentColor","aria-hidden":"true","data-slot":"icon",ref:s,"aria-labelledby":e},o),r?t.createElement("title",{id:e},r):null,t.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9.568 3H5.25A2.25 2.25 0 0 0 3 5.25v4.318c0 .597.237 1.17.659 1.591l9.581 9.581c.699.699 1.78.872 2.607.33a18.095 18.095 0 0 0 5.223-5.223c.542-.827.369-1.908-.33-2.607L11.16 3.66A2.25 2.25 0 0 0 9.568 3Z"}),t.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M6 6h.008v.008H6V6Z"}))}const D=t.forwardRef(B);function P({href:r,to:e,...o}){return n.jsx(y,{to:r??"",...o})}function U({isCollapsed:r,toggleCollapsed:e,navigationMenu:o}){const{t:s}=p(),a=(d,f)=>s(`Moderation.${d}`,f),{t:m}=p(),c=(d,f)=>m(`Sidebar.${d}`,f),u=S(),i=t.useCallback(()=>{e()},[e]);k({"browse:sidebar-toggle":i});const l=[{name:a("recentResources"),href:"/moderate/recent",icon:T,description:a("recentResourcesDescription")},{name:a("entityTags"),href:"/moderate/entity-tags",icon:D,description:a("entityTagsDescription")},{name:a("tagSchemas"),href:"/moderate/tag-schemas",icon:N,description:a("tagSchemasDescription")},{name:a("linkedData"),href:"/moderate/linked-data",icon:R,description:a("linkedDataDescription")}];return n.jsx(g,{title:a("title"),items:l,currentPath:u,LinkComponent:P,...o&&{dropdownContent:o},isCollapsed:r,icons:{chevronLeft:F,bars:C},collapseSidebarLabel:c("collapseSidebar"),expandSidebarLabel:c("expandSidebar")})}function te(){const{t:r}=p(),e=t.useContext(A),{isAuthenticated:o,isAdmin:s,isModerator:a,token:m}=H(),{activeKnowledgeBase:c}=K(),u=E();return c?n.jsx(w,{token:m,children:n.jsx(v,{baseUrl:c.backendUrl,children:n.jsxs("div",{className:"min-h-screen bg-gray-50 dark:bg-gray-900 flex flex-col",children:[n.jsxs("div",{className:"flex flex-1",children:[n.jsx(L,{Link:x,routes:h,t:i=>r(`Navigation.${i}`),tHome:i=>r(`Home.${i}`),brandingLink:"/",collapsible:!0,storageKey:"moderation-sidebar-collapsed",isAuthenticated:o,isAdmin:s,isModerator:a,children:(i,l,d)=>n.jsx(U,{isCollapsed:i,toggleCollapsed:l,navigationMenu:d})}),n.jsx("main",{className:"flex-1 p-6 flex flex-col",children:n.jsx("div",{className:"max-w-7xl mx-auto flex-1 flex flex-col w-full",children:n.jsx(b,{})})})]}),n.jsx(j,{Link:x,routes:h,t:(i,l)=>r(`Footer.${i}`,l),CookiePreferences:$,...(e==null?void 0:e.openKeyboardHelp)&&{onOpenKeyboardHelp:e.openKeyboardHelp}})]})})}):(u.push("/know"),null)}export{te as default};
|
|
2
|
-
//# sourceMappingURL=layout-CCNyNXfP.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{j as e}from"./query-ATBhtd3K.js";import{r as s,O as b}from"./vendor-EnoIVk-c.js";import{b as g,L as k,a as v}from"./routing-BPQO9e8a.js";import{g as w,U as j,V as L,X as S,Y as F,F as $}from"./en-IUV4ZXKH-b_r0oyRV.js";import{u as f}from"./i18n-BYxb14hm.js";import{F as y,C as A}from"./CookiePreferences-DIUP_g1S.js";import{F as R}from"./ArrowsRightLeftIcon-CMDe963r.js";import{F as C}from"./CommandLineIcon-BBerq9Nd.js";import{F as K,a as N}from"./ChevronLeftIcon-CMXd_XZQ.js";import{K as E}from"./privacy-BMKdYFGC.js";import{r as x,L as h}from"./routing-BBQqTcTn.js";import{u as H}from"./useAuth-B9hvtwrc.js";import{u as P}from"./KnowledgeBaseContext-CgnF8K-_.js";import"./index-dFCLrpeL.js";import"./AuthContext-CqopYuY9.js";function D({title:t,titleId:r,...n},i){return s.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:1.5,stroke:"currentColor","aria-hidden":"true","data-slot":"icon",ref:i,"aria-labelledby":r},n),t?s.createElement("title",{id:r},t):null,s.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M15 19.128a9.38 9.38 0 0 0 2.625.372 9.337 9.337 0 0 0 4.121-.952 4.125 4.125 0 0 0-7.533-2.493M15 19.128v-.003c0-1.113-.285-2.16-.786-3.07M15 19.128v.106A12.318 12.318 0 0 1 8.624 21c-2.331 0-4.512-.645-6.374-1.766l-.001-.109a6.375 6.375 0 0 1 11.964-3.07M12 6.375a3.375 3.375 0 1 1-6.75 0 3.375 3.375 0 0 1 6.75 0Zm8.25 2.25a2.625 2.625 0 1 1-5.25 0 2.625 2.625 0 0 1 5.25 0Z"}))}const M=s.forwardRef(D);function O({href:t,to:r,...n}){return e.jsx(k,{to:t??"",...n})}function T({isCollapsed:t,toggleCollapsed:r,navigationMenu:n}){const{t:i}=f(),o=(l,u)=>i(`Administration.${l}`,u),{t:m}=f(),c=(l,u)=>m(`Sidebar.${l}`,u),p=g(),a=s.useCallback(()=>{r()},[r]);w({"browse:sidebar-toggle":a});const d=[{name:o("users"),href:"/admin/users",icon:M,description:o("usersDescription")},{name:o("oauthSettings"),href:"/admin/security",icon:y,description:o("oauthSettingsDescription")},{name:o("exchange"),href:"/admin/exchange",icon:R,description:o("exchangeDescription")},{name:o("devops"),href:"/admin/devops",icon:C,description:o("devopsDescription")}];return e.jsx(j,{title:o("title"),items:d,currentPath:p,LinkComponent:O,...n&&{dropdownContent:n},isCollapsed:t,icons:{chevronLeft:N,bars:K},collapseSidebarLabel:c("collapseSidebar"),expandSidebarLabel:c("expandSidebar")})}function re(){const{t}=f(),r=s.useContext(E),{isAuthenticated:n,isAdmin:i,isModerator:o,token:m}=H(),{activeKnowledgeBase:c}=P(),p=v();return c?e.jsx(L,{token:m,children:e.jsx(S,{baseUrl:c.backendUrl,children:e.jsxs("div",{className:"min-h-screen bg-gray-50 dark:bg-gray-900 flex flex-col",children:[e.jsxs("div",{className:"flex flex-1",children:[e.jsx(F,{Link:h,routes:x,t:a=>t(`Navigation.${a}`),tHome:a=>t(`Home.${a}`),brandingLink:"/",collapsible:!0,storageKey:"admin-sidebar-collapsed",isAuthenticated:n,isAdmin:i,isModerator:o,children:(a,d,l)=>e.jsx(T,{isCollapsed:a,toggleCollapsed:d,navigationMenu:l})}),e.jsx("main",{className:"flex-1 p-6 flex flex-col",children:e.jsx("div",{className:"max-w-7xl mx-auto flex-1 flex flex-col w-full",children:e.jsx(b,{})})})]}),e.jsx($,{Link:h,routes:x,t:(a,d)=>t(`Footer.${a}`,d),CookiePreferences:A,...(r==null?void 0:r.openKeyboardHelp)&&{onOpenKeyboardHelp:r.openKeyboardHelp}})]})})}):(p.push("/know"),null)}export{re as default};
|
|
2
|
-
//# sourceMappingURL=layout-CHfFscVU.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"layout-CHfFscVU.js","sources":["../../../../node_modules/@heroicons/react/24/outline/esm/UsersIcon.js","../../src/components/admin/AdminNavigation.tsx","../../src/app/[locale]/admin/layout.tsx"],"sourcesContent":["import * as React from \"react\";\nfunction UsersIcon({\n title,\n titleId,\n ...props\n}, svgRef) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n strokeWidth: 1.5,\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"M15 19.128a9.38 9.38 0 0 0 2.625.372 9.337 9.337 0 0 0 4.121-.952 4.125 4.125 0 0 0-7.533-2.493M15 19.128v-.003c0-1.113-.285-2.16-.786-3.07M15 19.128v.106A12.318 12.318 0 0 1 8.624 21c-2.331 0-4.512-.645-6.374-1.766l-.001-.109a6.375 6.375 0 0 1 11.964-3.07M12 6.375a3.375 3.375 0 1 1-6.75 0 3.375 3.375 0 0 1 6.75 0Zm8.25 2.25a2.625 2.625 0 1 1-5.25 0 2.625 2.625 0 0 1 5.25 0Z\"\n }));\n}\nconst ForwardRef = /*#__PURE__*/ React.forwardRef(UsersIcon);\nexport default ForwardRef;","import React, { useCallback } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Link } from '@/i18n/routing';\nimport { usePathname } from '@/i18n/routing';\nimport { SimpleNavigation, useEventSubscriptions } from '@semiont/react-ui';\nimport type { SimpleNavigationItem } from '@semiont/react-ui';\nimport {\n UsersIcon,\n ShieldCheckIcon,\n CommandLineIcon,\n ArrowsRightLeftIcon,\n ChevronLeftIcon,\n Bars3Icon\n} from '@heroicons/react/24/outline';\n\ninterface AdminNavigationProps {\n isCollapsed: boolean;\n toggleCollapsed: () => void;\n navigationMenu?: (onClose: () => void) => React.ReactNode;\n}\n\n// Adapter: SimpleNavigation 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 AdminNavigation({ isCollapsed, toggleCollapsed, navigationMenu }: AdminNavigationProps) {\n const { t: _t } = useTranslation();\n const t = (k: string, p?: Record<string, unknown>) => _t(`Administration.${k}`, p as any) as string;\n const { t: _tSidebar } = useTranslation();\n const tSidebar = (k: string, p?: Record<string, unknown>) => _tSidebar(`Sidebar.${k}`, p as any) as string;\n const pathname = usePathname();\n\n // Handle sidebar toggle events\n const handleSidebarToggle = useCallback(() => {\n toggleCollapsed();\n }, [toggleCollapsed]);\n\n // Subscribe to sidebar toggle events\n useEventSubscriptions({\n 'browse:sidebar-toggle': handleSidebarToggle,\n });\n\n const navigation: SimpleNavigationItem[] = [\n {\n name: t('users'),\n href: '/admin/users',\n icon: UsersIcon,\n description: t('usersDescription')\n },\n {\n name: t('oauthSettings'),\n href: '/admin/security',\n icon: ShieldCheckIcon,\n description: t('oauthSettingsDescription')\n },\n {\n name: t('exchange'),\n href: '/admin/exchange',\n icon: ArrowsRightLeftIcon,\n description: t('exchangeDescription')\n },\n {\n name: t('devops'),\n href: '/admin/devops',\n icon: CommandLineIcon,\n description: t('devopsDescription')\n },\n ];\n\n return (\n <SimpleNavigation\n title={t('title')}\n items={navigation}\n currentPath={pathname}\n LinkComponent={HrefLink as any}\n {...(navigationMenu && { dropdownContent: navigationMenu })}\n isCollapsed={isCollapsed}\n icons={{\n chevronLeft: ChevronLeftIcon as React.ComponentType<{ className?: string }>,\n bars: Bars3Icon as React.ComponentType<{ className?: string }>\n }}\n collapseSidebarLabel={tSidebar('collapseSidebar')}\n expandSidebarLabel={tSidebar('expandSidebar')}\n />\n );\n}","import { useContext } from 'react';\nimport { Outlet } from 'react-router-dom';\nimport { useTranslation } from 'react-i18next';\nimport { AdminNavigation } from '@/components/admin/AdminNavigation';\nimport { LeftSidebar, Footer, ApiClientProvider, AuthTokenProvider } from '@semiont/react-ui';\nimport { CookiePreferences } from '@/components/CookiePreferences';\nimport { KeyboardShortcutsContext } from '@/contexts/KeyboardShortcutsContext';\nimport { Link, routes } from '@/lib/routing';\nimport { useAuth } from '@/hooks/useAuth';\nimport { useRouter } from '@/i18n/routing';\nimport { useKnowledgeBaseContext } from '@/contexts/KnowledgeBaseContext';\n\nexport default function AdminLayout() {\n const { t } = useTranslation();\n const keyboardContext = useContext(KeyboardShortcutsContext);\n const { isAuthenticated, isAdmin, isModerator, token: authToken } = useAuth();\n const { activeKnowledgeBase } = useKnowledgeBaseContext();\n const router = useRouter();\n\n if (!activeKnowledgeBase) {\n router.push('/know');\n return null;\n }\n\n return (\n <AuthTokenProvider token={authToken}>\n <ApiClientProvider baseUrl={activeKnowledgeBase.backendUrl}>\n <div className=\"min-h-screen bg-gray-50 dark:bg-gray-900 flex flex-col\">\n <div className=\"flex flex-1\">\n <LeftSidebar\n Link={Link}\n routes={routes}\n t={(key: string) => t(`Navigation.${key}`)}\n tHome={(key: string) => t(`Home.${key}`)}\n brandingLink=\"/\"\n collapsible={true}\n storageKey=\"admin-sidebar-collapsed\"\n isAuthenticated={isAuthenticated}\n isAdmin={isAdmin}\n isModerator={isModerator}\n >\n {(isCollapsed, toggleCollapsed, navigationMenu) => (\n <AdminNavigation\n isCollapsed={isCollapsed}\n toggleCollapsed={toggleCollapsed}\n navigationMenu={navigationMenu}\n />\n )}\n </LeftSidebar>\n <main className=\"flex-1 p-6 flex flex-col\">\n <div className=\"max-w-7xl mx-auto flex-1 flex flex-col w-full\">\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 {...(keyboardContext?.openKeyboardHelp && { onOpenKeyboardHelp: keyboardContext.openKeyboardHelp })}\n />\n </div>\n </ApiClientProvider>\n </AuthTokenProvider>\n );\n}\n"],"names":["UsersIcon","title","titleId","props","svgRef","React.createElement","ForwardRef","React.forwardRef","HrefLink","href","_to","Link","AdminNavigation","isCollapsed","toggleCollapsed","navigationMenu","_t","useTranslation","t","k","p","_tSidebar","tSidebar","pathname","usePathname","handleSidebarToggle","useCallback","useEventSubscriptions","navigation","ShieldCheckIcon","ArrowsRightLeftIcon","CommandLineIcon","jsx","SimpleNavigation","ChevronLeftIcon","Bars3Icon","AdminLayout","keyboardContext","useContext","KeyboardShortcutsContext","isAuthenticated","isAdmin","isModerator","authToken","useAuth","activeKnowledgeBase","useKnowledgeBaseContext","router","useRouter","AuthTokenProvider","ApiClientProvider","jsxs","LeftSidebar","routes","key","Outlet","Footer","params","CookiePreferences"],"mappings":"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","x_google_ignoreList":[0]}
|