@semiont/cli 0.4.21 → 0.4.22
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 +24356 -23305
- package/dist/frontend/dist/assets/{CookiePreferences-CWvTznuy.js → CookiePreferences-CPbRK2Nf.js} +2 -2
- package/dist/frontend/dist/assets/{CookiePreferences-CWvTznuy.js.map → CookiePreferences-CPbRK2Nf.js.map} +1 -1
- package/dist/frontend/dist/assets/{PdfAnnotationCanvas.client-6ZGFEN2N-Dnq2pEeZ.js → PdfAnnotationCanvas.client-5QESNO5H-CprYrfHh.js} +2 -2
- package/dist/frontend/dist/assets/PdfAnnotationCanvas.client-5QESNO5H-CprYrfHh.js.map +1 -0
- package/dist/frontend/dist/assets/ToolbarPanels-CPoZvoTB.js +2 -0
- package/dist/frontend/dist/assets/ToolbarPanels-CPoZvoTB.js.map +1 -0
- package/dist/frontend/dist/assets/client-CCxdaxo8.js +2 -0
- package/dist/frontend/dist/assets/client-CCxdaxo8.js.map +1 -0
- package/dist/frontend/dist/assets/client-CPOjL49o.js +2 -0
- package/dist/frontend/dist/assets/client-CPOjL49o.js.map +1 -0
- package/dist/frontend/dist/assets/{client-9KMfqezG.js → client-D04WIU14.js} +2 -2
- package/dist/frontend/dist/assets/{client-9KMfqezG.js.map → client-D04WIU14.js.map} +1 -1
- package/dist/frontend/dist/assets/{client-Bvrf4lLa.js → client-kS15_T5U.js} +2 -2
- package/dist/frontend/dist/assets/{client-Bvrf4lLa.js.map → client-kS15_T5U.js.map} +1 -1
- package/dist/frontend/dist/assets/index-Bsr9DJ3G.js +169 -0
- package/dist/frontend/dist/assets/index-Bsr9DJ3G.js.map +1 -0
- package/dist/frontend/dist/assets/layout-B-lufx1s.js +2 -0
- package/dist/frontend/dist/assets/layout-B-lufx1s.js.map +1 -0
- package/dist/frontend/dist/assets/layout-BWesrQWr.js +2 -0
- package/dist/frontend/dist/assets/{layout-easR0slx.js.map → layout-BWesrQWr.js.map} +1 -1
- package/dist/frontend/dist/assets/{layout-BgHlzaj1.js → layout-DqFHhLVw.js} +2 -2
- package/dist/frontend/dist/assets/layout-DqFHhLVw.js.map +1 -0
- package/dist/frontend/dist/assets/layout-w9wtEpkI.js +2 -0
- package/dist/frontend/dist/assets/layout-w9wtEpkI.js.map +1 -0
- package/dist/frontend/dist/assets/{not-found-nC4IaXPt.js → not-found-C0HTZoKU.js} +2 -2
- package/dist/frontend/dist/assets/{not-found-nC4IaXPt.js.map → not-found-C0HTZoKU.js.map} +1 -1
- package/dist/frontend/dist/assets/{page-8zC_t3l-.js → page--QmNUvGH.js} +2 -2
- package/dist/frontend/dist/assets/{page-8zC_t3l-.js.map → page--QmNUvGH.js.map} +1 -1
- package/dist/frontend/dist/assets/{page-DB1HZ_Jr.js → page-BIyG0SOs.js} +2 -2
- package/dist/frontend/dist/assets/{page-DB1HZ_Jr.js.map → page-BIyG0SOs.js.map} +1 -1
- package/dist/frontend/dist/assets/{page-DoqFVg4p.js → page-BMeXKClk.js} +2 -2
- package/dist/frontend/dist/assets/{page-DoqFVg4p.js.map → page-BMeXKClk.js.map} +1 -1
- package/dist/frontend/dist/assets/{page-jr_Rqa0A.js → page-BS88Xh4W.js} +2 -2
- package/dist/frontend/dist/assets/page-BS88Xh4W.js.map +1 -0
- package/dist/frontend/dist/assets/{page-By8BIN8Q.js → page-BkEdFy5p.js} +2 -2
- package/dist/frontend/dist/assets/{page-By8BIN8Q.js.map → page-BkEdFy5p.js.map} +1 -1
- package/dist/frontend/dist/assets/{page-BDMxGD5Z.js → page-BoFYscYi.js} +2 -2
- package/dist/frontend/dist/assets/{page-BDMxGD5Z.js.map → page-BoFYscYi.js.map} +1 -1
- package/dist/frontend/dist/assets/{page-btIB2WK4.js → page-BzkBmeDS.js} +2 -2
- package/dist/frontend/dist/assets/page-BzkBmeDS.js.map +1 -0
- package/dist/frontend/dist/assets/{page-BwiRQxa7.js → page-C43cKrO_.js} +2 -2
- package/dist/frontend/dist/assets/{page-BwiRQxa7.js.map → page-C43cKrO_.js.map} +1 -1
- package/dist/frontend/dist/assets/{page-BD9EKRMV.js → page-CHCWv8gH.js} +2 -2
- package/dist/frontend/dist/assets/{page-BD9EKRMV.js.map → page-CHCWv8gH.js.map} +1 -1
- package/dist/frontend/dist/assets/{page-CTvUxWH5.js → page-CN1zC8Ky.js} +2 -2
- package/dist/frontend/dist/assets/{page-CTvUxWH5.js.map → page-CN1zC8Ky.js.map} +1 -1
- package/dist/frontend/dist/assets/{page-DBoIW_-n.js → page-CPL87vBZ.js} +2 -2
- package/dist/frontend/dist/assets/{page-DBoIW_-n.js.map → page-CPL87vBZ.js.map} +1 -1
- package/dist/frontend/dist/assets/{page-CQsfujTh.js → page-CU11Rd_F.js} +2 -2
- package/dist/frontend/dist/assets/{page-CQsfujTh.js.map → page-CU11Rd_F.js.map} +1 -1
- package/dist/frontend/dist/assets/{page-kLVTeA46.js → page-CryPHwXI.js} +2 -2
- package/dist/frontend/dist/assets/{page-kLVTeA46.js.map → page-CryPHwXI.js.map} +1 -1
- package/dist/frontend/dist/assets/{page-DWS9ulKD.js → page-DYOj954J.js} +2 -2
- package/dist/frontend/dist/assets/{page-DWS9ulKD.js.map → page-DYOj954J.js.map} +1 -1
- package/dist/frontend/dist/assets/page-Du1JP0jA.js +2 -0
- package/dist/frontend/dist/assets/{page-D8JSCVFI.js.map → page-Du1JP0jA.js.map} +1 -1
- package/dist/frontend/dist/assets/{page-C8zOqZ8M.js → page-Dvw2I_gp.js} +2 -2
- package/dist/frontend/dist/assets/{page-C8zOqZ8M.js.map → page-Dvw2I_gp.js.map} +1 -1
- package/dist/frontend/dist/assets/{page-ChjwiTJ8.js → page-JI9gNkHU.js} +2 -2
- package/dist/frontend/dist/assets/page-JI9gNkHU.js.map +1 -0
- package/dist/frontend/dist/assets/{page-DEHEdU59.js → page-haUujHsJ.js} +2 -2
- package/dist/frontend/dist/assets/{page-DEHEdU59.js.map → page-haUujHsJ.js.map} +1 -1
- package/dist/frontend/dist/assets/{privacy-mpF0jllH.js → privacy-CZ8NTWnp.js} +2 -2
- package/dist/frontend/dist/assets/{privacy-mpF0jllH.js.map → privacy-CZ8NTWnp.js.map} +1 -1
- package/dist/frontend/dist/assets/{routing-BmJG4tNe.js → routing-D4iNsc7y.js} +2 -2
- package/dist/frontend/dist/assets/{routing-BmJG4tNe.js.map → routing-D4iNsc7y.js.map} +1 -1
- package/dist/frontend/dist/assets/{routing-JYkXODZK.js → routing-DCIgrT7s.js} +2 -2
- package/dist/frontend/dist/assets/{routing-JYkXODZK.js.map → routing-DCIgrT7s.js.map} +1 -1
- package/dist/frontend/dist/assets/web-Ua5dIRkZ.js +2 -0
- package/dist/frontend/dist/assets/web-Ua5dIRkZ.js.map +1 -0
- package/dist/frontend/dist/index.html +1 -1
- package/dist/frontend/package.json +1 -1
- package/package.json +8 -7
- package/dist/frontend/dist/assets/PdfAnnotationCanvas.client-6ZGFEN2N-Dnq2pEeZ.js.map +0 -1
- package/dist/frontend/dist/assets/ToolbarPanels-DQrfch_k.js +0 -2
- package/dist/frontend/dist/assets/ToolbarPanels-DQrfch_k.js.map +0 -1
- package/dist/frontend/dist/assets/client-D9qa8fAn.js +0 -2
- package/dist/frontend/dist/assets/client-D9qa8fAn.js.map +0 -1
- package/dist/frontend/dist/assets/client-kIBNRH2w.js +0 -2
- package/dist/frontend/dist/assets/client-kIBNRH2w.js.map +0 -1
- package/dist/frontend/dist/assets/index-DaA8-3Y1.js +0 -169
- package/dist/frontend/dist/assets/index-DaA8-3Y1.js.map +0 -1
- package/dist/frontend/dist/assets/layout-BLGpzYwk.js +0 -2
- package/dist/frontend/dist/assets/layout-BLGpzYwk.js.map +0 -1
- package/dist/frontend/dist/assets/layout-BgHlzaj1.js.map +0 -1
- package/dist/frontend/dist/assets/layout-Dj1MEjN6.js +0 -2
- package/dist/frontend/dist/assets/layout-Dj1MEjN6.js.map +0 -1
- package/dist/frontend/dist/assets/layout-easR0slx.js +0 -2
- package/dist/frontend/dist/assets/page-ChjwiTJ8.js.map +0 -1
- package/dist/frontend/dist/assets/page-D8JSCVFI.js +0 -2
- package/dist/frontend/dist/assets/page-btIB2WK4.js.map +0 -1
- package/dist/frontend/dist/assets/page-jr_Rqa0A.js.map +0 -1
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{k as v,j as r,Q as w,u as L,c as x,M as k,O as S}from"./index-Bsr9DJ3G.js";import{r as c,O as j}from"./vendor-DJo4KD8w.js";import{b as $,L as F,u as y}from"./routing-DCIgrT7s.js";import{u as p}from"./i18n-BbpF47i1.js";import{F as R,C as A}from"./CookiePreferences-CPbRK2Nf.js";import{F as K}from"./ArrowsRightLeftIcon-BzLgl5o9.js";import{F as N}from"./CommandLineIcon-Ba4gpk8e.js";import{F as C,a as E}from"./ChevronLeftIcon-BLyRNZuL.js";import{K as H}from"./privacy-CZ8NTWnp.js";import{r as b,L as h}from"./routing-D4iNsc7y.js";import"./XMarkIcon-KMKD47CF.js";function M({title:n,titleId:o,...s},a){return c.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:a,"aria-labelledby":o},s),n?c.createElement("title",{id:o},n):null,c.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 O=c.forwardRef(M);function D({href:n,to:o,...s}){return r.jsx(F,{to:n??"",...s})}function B({isCollapsed:n,toggleCollapsed:o,navigationMenu:s}){const{t:a}=p(),e=(t,i)=>a(`Administration.${t}`,i),{t:d}=p(),l=(t,i)=>d(`Sidebar.${t}`,i),m=$(),f=c.useCallback(()=>{o()},[o]);v({"shell:sidebar-toggle":f});const u=[{name:e("users"),href:"/admin/users",icon:O,description:e("usersDescription")},{name:e("oauthSettings"),href:"/admin/security",icon:R,description:e("oauthSettingsDescription")},{name:e("exchange"),href:"/admin/exchange",icon:K,description:e("exchangeDescription")},{name:e("devops"),href:"/admin/devops",icon:N,description:e("devopsDescription")}];return r.jsx(w,{title:e("title"),items:u,currentPath:m,LinkComponent:D,...s&&{dropdownContent:s},isCollapsed:n,icons:{chevronLeft:E,bars:C},collapseSidebarLabel:l("collapseSidebar"),expandSidebarLabel:l("expandSidebar")})}function P(){const{t:n}=p(),o=c.useContext(H),s=L(),a=x(s.activeSession$),e=x(a==null?void 0:a.user$),d=(a==null?void 0:a.kb)??null,l=y();if(!d)return l.push("/know"),null;const m=!!e,f=(e==null?void 0:e.isAdmin)??!1,u=(e==null?void 0:e.isModerator)??!1;return r.jsxs("div",{className:"min-h-screen bg-gray-50 dark:bg-gray-900 flex flex-col",children:[r.jsxs("div",{className:"flex flex-1",children:[r.jsx(k,{Link:h,routes:b,t:t=>n(`Navigation.${t}`),tHome:t=>n(`Home.${t}`),brandingLink:"/",collapsible:!0,storageKey:"admin-sidebar-collapsed",isAuthenticated:m,isAdmin:f,isModerator:u,children:(t,i,g)=>r.jsx(B,{isCollapsed:t,toggleCollapsed:i,navigationMenu:g})}),r.jsx("main",{className:"flex-1 p-6 flex flex-col",children:r.jsx("div",{className:"max-w-7xl mx-auto flex-1 flex flex-col w-full",children:r.jsx(j,{})})})]}),r.jsx(S,{Link:h,routes:b,t:(t,i)=>n(`Footer.${t}`,i),CookiePreferences:A,...(o==null?void 0:o.openKeyboardHelp)&&{onOpenKeyboardHelp:o.openKeyboardHelp}})]})}function V(){return r.jsx(P,{})}export{V as default};
|
|
2
|
+
//# sourceMappingURL=layout-B-lufx1s.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layout-B-lufx1s.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 'shell: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 {\n LeftSidebar,\n Footer,\n useSemiont,\n useObservable,\n} from '@semiont/react-ui';\nimport { CookiePreferences } from '@/components/CookiePreferences';\nimport { KeyboardShortcutsContext } from '@/contexts/KeyboardShortcutsContext';\nimport { Link, routes } from '@/lib/routing';\nimport { useRouter } from '@/i18n/routing';\n\nfunction AdminLayoutBody() {\n const { t } = useTranslation();\n const keyboardContext = useContext(KeyboardShortcutsContext);\n const semiont = useSemiont();\n const session = useObservable(semiont.activeSession$);\n const user = useObservable(session?.user$);\n const activeKnowledgeBase = session?.kb ?? null;\n const router = useRouter();\n\n if (!activeKnowledgeBase) {\n router.push('/know');\n return null;\n }\n\n const isAuthenticated = !!user;\n const isAdmin = user?.isAdmin ?? false;\n const isModerator = user?.isModerator ?? false;\n\n return (\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 );\n}\n\nexport default function AdminLayout() {\n // AuthShell is mounted by the parent ProtectedLayout in App.tsx so it\n // survives navigation between know/, admin/, and moderate/ sections.\n return <AdminLayoutBody />;\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","AdminLayoutBody","keyboardContext","useContext","KeyboardShortcutsContext","semiont","useSemiont","session","useObservable","user","activeKnowledgeBase","router","useRouter","isAuthenticated","isAdmin","isModerator","jsxs","LeftSidebar","routes","key","Outlet","Footer","params","CookiePreferences","AdminLayout"],"mappings":"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","x_google_ignoreList":[0]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{k,j as i,Q as w,u as v,c as h,M as L,O as j}from"./index-Bsr9DJ3G.js";import{r,O as S}from"./vendor-DJo4KD8w.js";import{b as y,L as E,u as R}from"./routing-DCIgrT7s.js";import{u as p}from"./i18n-BbpF47i1.js";import{F as $}from"./ArrowsRightLeftIcon-BzLgl5o9.js";import{F,a as M}from"./ChevronLeftIcon-BLyRNZuL.js";import{C}from"./CookiePreferences-CPbRK2Nf.js";import{K as O}from"./privacy-CZ8NTWnp.js";import{r as x,L as b}from"./routing-D4iNsc7y.js";import"./XMarkIcon-KMKD47CF.js";function A({title:o,titleId:e,...a},n){return r.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:n,"aria-labelledby":e},a),o?r.createElement("title",{id:e},o):null,r.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 H=r.forwardRef(A);function K({title:o,titleId:e,...a},n){return r.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:n,"aria-labelledby":e},a),o?r.createElement("title",{id:e},o):null,r.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 N=r.forwardRef(K);function B({title:o,titleId:e,...a},n){return r.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:n,"aria-labelledby":e},a),o?r.createElement("title",{id:e},o):null,r.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"}),r.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M6 6h.008v.008H6V6Z"}))}const D=r.forwardRef(B);function T({href:o,to:e,...a}){return i.jsx(E,{to:o??"",...a})}function P({isCollapsed:o,toggleCollapsed:e,navigationMenu:a}){const{t:n}=p(),t=(s,c)=>n(`Moderation.${s}`,c),{t:d}=p(),l=(s,c)=>d(`Sidebar.${s}`,c),m=y(),u=r.useCallback(()=>{e()},[e]);k({"shell:sidebar-toggle":u});const f=[{name:t("recentResources"),href:"/moderate/recent",icon:N,description:t("recentResourcesDescription")},{name:t("entityTags"),href:"/moderate/entity-tags",icon:D,description:t("entityTagsDescription")},{name:t("tagSchemas"),href:"/moderate/tag-schemas",icon:H,description:t("tagSchemasDescription")},{name:t("linkedData"),href:"/moderate/linked-data",icon:$,description:t("linkedDataDescription")}];return i.jsx(w,{title:t("title"),items:f,currentPath:m,LinkComponent:T,...a&&{dropdownContent:a},isCollapsed:o,icons:{chevronLeft:M,bars:F},collapseSidebarLabel:l("collapseSidebar"),expandSidebarLabel:l("expandSidebar")})}function W(){const{t:o}=p(),e=r.useContext(O),a=v(),n=h(a.activeSession$),t=h(n==null?void 0:n.user$),d=(n==null?void 0:n.kb)??null,l=R();if(!d)return l.push("/know"),null;const m=!!t,u=(t==null?void 0:t.isAdmin)??!1,f=(t==null?void 0:t.isModerator)??!1;return i.jsxs("div",{className:"min-h-screen bg-gray-50 dark:bg-gray-900 flex flex-col",children:[i.jsxs("div",{className:"flex flex-1",children:[i.jsx(L,{Link:b,routes:x,t:s=>o(`Navigation.${s}`),tHome:s=>o(`Home.${s}`),brandingLink:"/",collapsible:!0,storageKey:"moderation-sidebar-collapsed",isAuthenticated:m,isAdmin:u,isModerator:f,children:(s,c,g)=>i.jsx(P,{isCollapsed:s,toggleCollapsed:c,navigationMenu:g})}),i.jsx("main",{className:"flex-1 p-6 flex flex-col",children:i.jsx("div",{className:"max-w-7xl mx-auto flex-1 flex flex-col w-full",children:i.jsx(S,{})})})]}),i.jsx(j,{Link:b,routes:x,t:(s,c)=>o(`Footer.${s}`,c),CookiePreferences:C,...(e==null?void 0:e.openKeyboardHelp)&&{onOpenKeyboardHelp:e.openKeyboardHelp}})]})}function X(){return i.jsx(W,{})}export{X as default};
|
|
2
|
+
//# sourceMappingURL=layout-BWesrQWr.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout-easR0slx.js","sources":["../../../../node_modules/@heroicons/react/24/outline/esm/BookOpenIcon.js","../../../../node_modules/@heroicons/react/24/outline/esm/ClockIcon.js","../../../../node_modules/@heroicons/react/24/outline/esm/TagIcon.js","../../src/components/moderation/ModerationNavigation.tsx","../../src/app/[locale]/moderate/layout.tsx"],"sourcesContent":["import * as React from \"react\";\nfunction BookOpenIcon({\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: \"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\"\n }));\n}\nconst ForwardRef = /*#__PURE__*/ React.forwardRef(BookOpenIcon);\nexport default ForwardRef;","import * as React from \"react\";\nfunction ClockIcon({\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: \"M12 6v6h4.5m4.5 0a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z\"\n }));\n}\nconst ForwardRef = /*#__PURE__*/ React.forwardRef(ClockIcon);\nexport default ForwardRef;","import * as React from \"react\";\nfunction TagIcon({\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: \"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\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"M6 6h.008v.008H6V6Z\"\n }));\n}\nconst ForwardRef = /*#__PURE__*/ React.forwardRef(TagIcon);\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 ClockIcon,\n TagIcon,\n BookOpenIcon,\n ArrowsRightLeftIcon,\n ChevronLeftIcon,\n Bars3Icon\n} from '@heroicons/react/24/outline';\n\ninterface ModerationNavigationProps {\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 ModerationNavigation({ isCollapsed, toggleCollapsed, navigationMenu }: ModerationNavigationProps) {\n const { t: _t } = useTranslation();\n const t = (k: string, p?: Record<string, unknown>) => _t(`Moderation.${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 'shell:sidebar-toggle': handleSidebarToggle,\n });\n\n const navigation: SimpleNavigationItem[] = [\n {\n name: t('recentResources'),\n href: '/moderate/recent',\n icon: ClockIcon,\n description: t('recentResourcesDescription')\n },\n {\n name: t('entityTags'),\n href: '/moderate/entity-tags',\n icon: TagIcon,\n description: t('entityTagsDescription')\n },\n {\n name: t('tagSchemas'),\n href: '/moderate/tag-schemas',\n icon: BookOpenIcon,\n description: t('tagSchemasDescription')\n },\n {\n name: t('linkedData'),\n href: '/moderate/linked-data',\n icon: ArrowsRightLeftIcon,\n description: t('linkedDataDescription')\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 {\n LeftSidebar,\n Footer,\n useSemiont,\n useObservable,\n} from '@semiont/react-ui';\nimport { ModerationNavigation } from '@/components/moderation/ModerationNavigation';\nimport { CookiePreferences } from '@/components/CookiePreferences';\nimport { KeyboardShortcutsContext } from '@/contexts/KeyboardShortcutsContext';\nimport { Link, routes } from '@/lib/routing';\nimport { useRouter } from '@/i18n/routing';\nimport { AuthShell } from '@/contexts/AuthShell';\n\nfunction ModerateLayoutBody() {\n const { t } = useTranslation();\n const keyboardContext = useContext(KeyboardShortcutsContext);\n const semiont = useSemiont();\n const session = useObservable(semiont.activeSession$);\n const user = useObservable(session?.user$);\n const activeKnowledgeBase = session?.kb ?? null;\n const router = useRouter();\n\n if (!activeKnowledgeBase) {\n router.push('/know');\n return null;\n }\n\n const isAuthenticated = !!user;\n const isAdmin = user?.isAdmin ?? false;\n const isModerator = user?.isModerator ?? false;\n\n return (\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=\"moderation-sidebar-collapsed\"\n isAuthenticated={isAuthenticated}\n isAdmin={isAdmin}\n isModerator={isModerator}\n >\n {(isCollapsed, toggleCollapsed, navigationMenu) => (\n <ModerationNavigation\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 );\n}\n\nexport default function ModerateLayout() {\n return (\n <AuthShell>\n <ModerateLayoutBody />\n </AuthShell>\n );\n}\n"],"names":["BookOpenIcon","title","titleId","props","svgRef","React.createElement","ForwardRef","React.forwardRef","ClockIcon","TagIcon","HrefLink","href","_to","Link","ModerationNavigation","isCollapsed","toggleCollapsed","navigationMenu","_t","useTranslation","k","p","_tSidebar","tSidebar","pathname","usePathname","handleSidebarToggle","useCallback","useEventSubscriptions","navigation","ArrowsRightLeftIcon","jsx","SimpleNavigation","ChevronLeftIcon","Bars3Icon","ModerateLayoutBody","t","keyboardContext","useContext","KeyboardShortcutsContext","semiont","useSemiont","session","useObservable","user","activeKnowledgeBase","router","useRouter","isAuthenticated","isAdmin","isModerator","jsxs","LeftSidebar","routes","key","Outlet","Footer","params","CookiePreferences","ModerateLayout","AuthShell"],"mappings":"kfACA,SAASA,EAAa,CACpB,MAAAC,EACA,QAAAC,EACA,GAAGC,CACL,EAAGC,EAAQ,CACT,OAAoBC,gBAAoB,MAAO,OAAO,OAAO,CAC3D,MAAO,6BACP,KAAM,OACN,QAAS,YACT,YAAa,IACb,OAAQ,eACR,cAAe,OACf,YAAa,OACb,IAAKD,EACL,kBAAmBF,CACvB,EAAKC,CAAK,EAAGF,EAAqBI,EAAAA,cAAoB,QAAS,CAC3D,GAAIH,CACR,EAAKD,CAAK,EAAI,KAAmBI,EAAAA,cAAoB,OAAQ,CACzD,cAAe,QACf,eAAgB,QAChB,EAAG,oPACP,CAAG,CAAC,CACJ,CACA,MAAMC,EAA2BC,EAAAA,WAAiBP,CAAY,ECvB9D,SAASQ,EAAU,CACjB,MAAAP,EACA,QAAAC,EACA,GAAGC,CACL,EAAGC,EAAQ,CACT,OAAoBC,gBAAoB,MAAO,OAAO,OAAO,CAC3D,MAAO,6BACP,KAAM,OACN,QAAS,YACT,YAAa,IACb,OAAQ,eACR,cAAe,OACf,YAAa,OACb,IAAKD,EACL,kBAAmBF,CACvB,EAAKC,CAAK,EAAGF,EAAqBI,EAAAA,cAAoB,QAAS,CAC3D,GAAIH,CACR,EAAKD,CAAK,EAAI,KAAmBI,EAAAA,cAAoB,OAAQ,CACzD,cAAe,QACf,eAAgB,QAChB,EAAG,kDACP,CAAG,CAAC,CACJ,CACA,MAAMC,EAA2BC,EAAAA,WAAiBC,CAAS,ECvB3D,SAASC,EAAQ,CACf,MAAAR,EACA,QAAAC,EACA,GAAGC,CACL,EAAGC,EAAQ,CACT,OAAoBC,gBAAoB,MAAO,OAAO,OAAO,CAC3D,MAAO,6BACP,KAAM,OACN,QAAS,YACT,YAAa,IACb,OAAQ,eACR,cAAe,OACf,YAAa,OACb,IAAKD,EACL,kBAAmBF,CACvB,EAAKC,CAAK,EAAGF,EAAqBI,EAAAA,cAAoB,QAAS,CAC3D,GAAIH,CACR,EAAKD,CAAK,EAAI,KAAmBI,EAAAA,cAAoB,OAAQ,CACzD,cAAe,QACf,eAAgB,QAChB,EAAG,+MACP,CAAG,EAAgBA,EAAAA,cAAoB,OAAQ,CAC3C,cAAe,QACf,eAAgB,QAChB,EAAG,qBACP,CAAG,CAAC,CACJ,CACA,MAAMC,EAA2BC,EAAAA,WAAiBE,CAAO,ECNzD,SAASC,EAAS,CAAE,KAAAC,EAAM,GAAIC,EAAK,GAAGT,GAAgE,CACpG,aAAQU,EAAA,CAAK,GAAKF,GAAQ,GAAgB,GAAGR,EAAO,CACtD,CAEO,SAASW,EAAqB,CAAE,YAAAC,EAAa,gBAAAC,EAAiB,eAAAC,GAA6C,CAChH,KAAM,CAAE,EAAGC,CAAA,EAAOC,EAAA,EACZ,EAAI,CAACC,EAAWC,IAAgCH,EAAG,cAAcE,CAAC,GAAIC,CAAQ,EAC9E,CAAE,EAAGC,CAAA,EAAcH,EAAA,EACnBI,EAAW,CAACH,EAAWC,IAAgCC,EAAU,WAAWF,CAAC,GAAIC,CAAQ,EACzFG,EAAWC,EAAA,EAGXC,EAAsBC,EAAAA,YAAY,IAAM,CAC5CX,EAAA,CACF,EAAG,CAACA,CAAe,CAAC,EAGpBY,EAAsB,CACpB,uBAAwBF,CAAA,CACzB,EAED,MAAMG,EAAqC,CACzC,CACE,KAAM,EAAE,iBAAiB,EACzB,KAAM,mBACN,KAAMrB,EACN,YAAa,EAAE,4BAA4B,CAAA,EAE7C,CACE,KAAM,EAAE,YAAY,EACpB,KAAM,wBACN,KAAMC,EACN,YAAa,EAAE,uBAAuB,CAAA,EAExC,CACE,KAAM,EAAE,YAAY,EACpB,KAAM,wBACN,KAAMT,EACN,YAAa,EAAE,uBAAuB,CAAA,EAExC,CACE,KAAM,EAAE,YAAY,EACpB,KAAM,wBACN,KAAM8B,EACN,YAAa,EAAE,uBAAuB,CAAA,CACxC,EAGF,OACEC,EAAAA,IAACC,EAAA,CACC,MAAO,EAAE,OAAO,EAChB,MAAOH,EACP,YAAaL,EACb,cAAed,EACd,GAAIO,GAAkB,CAAE,gBAAiBA,CAAA,EAC1C,YAAAF,EACA,MAAO,CACL,YAAakB,EACb,KAAMC,CAAA,EAER,qBAAsBX,EAAS,iBAAiB,EAChD,mBAAoBA,EAAS,eAAe,CAAA,CAAA,CAGlD,CCtEA,SAASY,GAAqB,CAC5B,KAAM,CAAE,EAAAC,CAAA,EAAMjB,EAAA,EACRkB,EAAkBC,EAAAA,WAAWC,CAAwB,EACrDC,EAAUC,EAAA,EACVC,EAAUC,EAAcH,EAAQ,cAAc,EAC9CI,EAAOD,EAAcD,GAAA,YAAAA,EAAS,KAAK,EACnCG,GAAsBH,GAAA,YAAAA,EAAS,KAAM,KACrCI,EAASC,EAAA,EAEf,GAAI,CAACF,EACH,OAAAC,EAAO,KAAK,OAAO,EACZ,KAGT,MAAME,EAAkB,CAAC,CAACJ,EACpBK,GAAUL,GAAA,YAAAA,EAAM,UAAW,GAC3BM,GAAcN,GAAA,YAAAA,EAAM,cAAe,GAEzC,OACEO,EAAAA,KAAC,MAAA,CAAI,UAAU,yDACb,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,cACb,SAAA,CAAApB,EAAAA,IAACqB,EAAA,CAAA,KACCvC,EACA,OAAAwC,EACA,EAAIC,GAAgBlB,EAAE,cAAckB,CAAG,EAAE,EACzC,MAAQA,GAAgBlB,EAAE,QAAQkB,CAAG,EAAE,EACvC,aAAa,IACb,YAAa,GACb,WAAW,+BACX,gBAAAN,EACA,QAAAC,EACA,YAAAC,EAEC,SAAA,CAACnC,EAAaC,EAAiBC,IAC9Bc,EAAAA,IAACjB,EAAA,CACC,YAAAC,EACA,gBAAAC,EACA,eAAAC,CAAA,CAAA,CACF,CAAA,EAGJc,EAAAA,IAAC,OAAA,CAAK,UAAU,2BACd,SAAAA,EAAAA,IAAC,MAAA,CAAI,UAAU,gDACb,SAAAA,EAAAA,IAACwB,EAAA,CAAA,CAAO,CAAA,CACV,CAAA,CACF,CAAA,EACF,EACAxB,EAAAA,IAACyB,EAAA,CAAA,KACC3C,EACA,OAAAwC,EACA,EAAG,CAACC,EAAaG,IAAqCrB,EAAE,UAAUkB,CAAG,GAAIG,CAAa,EACtF,kBAAAC,EACC,IAAIrB,GAAA,YAAAA,EAAiB,mBAAoB,CAAE,mBAAoBA,EAAgB,gBAAA,CAAiB,CAAA,CACnG,EACF,CAEJ,CAEA,SAAwBsB,GAAiB,CACvC,OACE5B,EAAAA,IAAC6B,EAAA,CACC,SAAA7B,EAAAA,IAACI,EAAA,CAAA,CAAmB,EACtB,CAEJ","x_google_ignoreList":[0,1,2]}
|
|
1
|
+
{"version":3,"file":"layout-BWesrQWr.js","sources":["../../../../node_modules/@heroicons/react/24/outline/esm/BookOpenIcon.js","../../../../node_modules/@heroicons/react/24/outline/esm/ClockIcon.js","../../../../node_modules/@heroicons/react/24/outline/esm/TagIcon.js","../../src/components/moderation/ModerationNavigation.tsx","../../src/app/[locale]/moderate/layout.tsx"],"sourcesContent":["import * as React from \"react\";\nfunction BookOpenIcon({\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: \"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\"\n }));\n}\nconst ForwardRef = /*#__PURE__*/ React.forwardRef(BookOpenIcon);\nexport default ForwardRef;","import * as React from \"react\";\nfunction ClockIcon({\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: \"M12 6v6h4.5m4.5 0a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z\"\n }));\n}\nconst ForwardRef = /*#__PURE__*/ React.forwardRef(ClockIcon);\nexport default ForwardRef;","import * as React from \"react\";\nfunction TagIcon({\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: \"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\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"M6 6h.008v.008H6V6Z\"\n }));\n}\nconst ForwardRef = /*#__PURE__*/ React.forwardRef(TagIcon);\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 ClockIcon,\n TagIcon,\n BookOpenIcon,\n ArrowsRightLeftIcon,\n ChevronLeftIcon,\n Bars3Icon\n} from '@heroicons/react/24/outline';\n\ninterface ModerationNavigationProps {\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 ModerationNavigation({ isCollapsed, toggleCollapsed, navigationMenu }: ModerationNavigationProps) {\n const { t: _t } = useTranslation();\n const t = (k: string, p?: Record<string, unknown>) => _t(`Moderation.${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 'shell:sidebar-toggle': handleSidebarToggle,\n });\n\n const navigation: SimpleNavigationItem[] = [\n {\n name: t('recentResources'),\n href: '/moderate/recent',\n icon: ClockIcon,\n description: t('recentResourcesDescription')\n },\n {\n name: t('entityTags'),\n href: '/moderate/entity-tags',\n icon: TagIcon,\n description: t('entityTagsDescription')\n },\n {\n name: t('tagSchemas'),\n href: '/moderate/tag-schemas',\n icon: BookOpenIcon,\n description: t('tagSchemasDescription')\n },\n {\n name: t('linkedData'),\n href: '/moderate/linked-data',\n icon: ArrowsRightLeftIcon,\n description: t('linkedDataDescription')\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 {\n LeftSidebar,\n Footer,\n useSemiont,\n useObservable,\n} from '@semiont/react-ui';\nimport { ModerationNavigation } from '@/components/moderation/ModerationNavigation';\nimport { CookiePreferences } from '@/components/CookiePreferences';\nimport { KeyboardShortcutsContext } from '@/contexts/KeyboardShortcutsContext';\nimport { Link, routes } from '@/lib/routing';\nimport { useRouter } from '@/i18n/routing';\n\nfunction ModerateLayoutBody() {\n const { t } = useTranslation();\n const keyboardContext = useContext(KeyboardShortcutsContext);\n const semiont = useSemiont();\n const session = useObservable(semiont.activeSession$);\n const user = useObservable(session?.user$);\n const activeKnowledgeBase = session?.kb ?? null;\n const router = useRouter();\n\n if (!activeKnowledgeBase) {\n router.push('/know');\n return null;\n }\n\n const isAuthenticated = !!user;\n const isAdmin = user?.isAdmin ?? false;\n const isModerator = user?.isModerator ?? false;\n\n return (\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=\"moderation-sidebar-collapsed\"\n isAuthenticated={isAuthenticated}\n isAdmin={isAdmin}\n isModerator={isModerator}\n >\n {(isCollapsed, toggleCollapsed, navigationMenu) => (\n <ModerationNavigation\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 );\n}\n\nexport default function ModerateLayout() {\n // AuthShell is mounted by the parent ProtectedLayout in App.tsx so it\n // survives navigation between know/, admin/, and moderate/ sections.\n return <ModerateLayoutBody />;\n}\n"],"names":["BookOpenIcon","title","titleId","props","svgRef","React.createElement","ForwardRef","React.forwardRef","ClockIcon","TagIcon","HrefLink","href","_to","Link","ModerationNavigation","isCollapsed","toggleCollapsed","navigationMenu","_t","useTranslation","k","p","_tSidebar","tSidebar","pathname","usePathname","handleSidebarToggle","useCallback","useEventSubscriptions","navigation","ArrowsRightLeftIcon","jsx","SimpleNavigation","ChevronLeftIcon","Bars3Icon","ModerateLayoutBody","t","keyboardContext","useContext","KeyboardShortcutsContext","semiont","useSemiont","session","useObservable","user","activeKnowledgeBase","router","useRouter","isAuthenticated","isAdmin","isModerator","jsxs","LeftSidebar","routes","key","Outlet","Footer","params","CookiePreferences","ModerateLayout"],"mappings":"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","x_google_ignoreList":[0,1,2]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{k as S,j as e,
|
|
2
|
-
//# sourceMappingURL=layout-
|
|
1
|
+
import{k as S,j as e,ad as E,ae as R,af as T,ag as L,ah as A,ai as D}from"./index-Bsr9DJ3G.js";import{a as z,C as M,b as N,i as W,c as B,s as h}from"./privacy-CZ8NTWnp.js";import{r as n,O as G}from"./vendor-DJo4KD8w.js";import{u as I}from"./routing-DCIgrT7s.js";import{u as g}from"./i18n-BbpF47i1.js";function O(){const s=I(),i=n.useCallback(({url:o,cancelFallback:l})=>{l(),s.push(o)},[s]),t=n.useCallback(({path:o})=>{s.push(o)},[s]);return S({"nav:external":i,"nav:push":t}),null}function F(){const{i18n:s}=g();return n.useMemo(()=>({t:(i,t,o)=>{var u;const l=s.getResourceBundle(s.language,"translation");let c=(u=l==null?void 0:l[i])==null?void 0:u[t];if(!c)return`${i}.${t}`;if(o&&typeof c=="string"){let a=c;return Object.entries(o).forEach(([d,p])=>{a=a.replace(new RegExp(`\\{${d}\\}`,"g"),String(p))}),a}return c}}),[s,s.language])}function $({children:s}){const i=F();return e.jsx(E,{translationManager:i,children:e.jsx(R,{children:e.jsx(T,{children:e.jsx(L,{children:e.jsx(z,{children:e.jsxs(A,{children:[e.jsx(O,{}),s]})})})})})})}function V({title:s,titleId:i,...t},o){return n.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:o,"aria-labelledby":i},t),s?n.createElement("title",{id:i},s):null,n.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"m19.5 8.25-7.5 7.5-7.5-7.5"}))}const q=n.forwardRef(V);function K({title:s,titleId:i,...t},o){return n.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:o,"aria-labelledby":i},t),s?n.createElement("title",{id:i},s):null,n.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"m4.5 15.75 7.5-7.5 7.5 7.5"}))}const _=n.forwardRef(K);function H({className:s=""}){const{t:i}=g(),t=(r,m)=>i(`CookieBanner.${r}`,m),[o,l]=n.useState(!1),[c,u]=n.useState(!1),[a,d]=n.useState(!1),[p,x]=n.useState("GENERAL"),[y,v]=n.useState({necessary:!0,analytics:!1,marketing:!1,preferences:!1});n.useEffect(()=>{(async()=>{if(N()){l(!0);try{const[m,P]=await Promise.all([W(),B()]);x(m?"GDPR":P?"CCPA":"GENERAL")}catch(m){console.error("Failed to detect region:",m),x("GENERAL")}}})()},[]);const j=async()=>{d(!0);try{const r={necessary:!0,analytics:!0,marketing:!0,preferences:!0};await Promise.resolve(h(r)),l(!1)}catch(r){console.error("Failed to save cookie consent:",r)}finally{d(!1)}},b=async()=>{d(!0);try{const r={necessary:!0,analytics:!1,marketing:!1,preferences:!1};await Promise.resolve(h(r)),l(!1)}catch(r){console.error("Failed to save cookie consent:",r)}finally{d(!1)}},k=async()=>{d(!0);try{await Promise.resolve(h(y)),l(!1)}catch(r){console.error("Failed to save cookie consent:",r)}finally{d(!1)}},C=r=>{r!=="necessary"&&v(m=>({...m,[r]:!m[r]}))},w=()=>{switch(p){case"GDPR":return{title:t("gdprTitle"),description:t("gdprDescription"),learnMore:t("gdprLearnMore")};case"CCPA":return{title:t("ccpaTitle"),description:t("ccpaDescription"),learnMore:t("ccpaLearnMore")};default:return{title:t("generalTitle"),description:t("generalDescription"),learnMore:t("generalLearnMore")}}};if(!o)return null;const f=w();return e.jsx("div",{className:s,style:{position:"fixed",bottom:0,left:0,right:0,zIndex:50,backgroundColor:"var(--semiont-bg-primary)",borderTop:"1px solid var(--semiont-border-primary)",boxShadow:"var(--semiont-shadow-lg)"},children:e.jsx("div",{style:{maxWidth:"80rem",margin:"0 auto",padding:"1rem 1.5rem"},children:e.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"1rem"},children:[e.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:"1.5rem",flexWrap:"wrap"},children:[e.jsxs("div",{style:{flex:1,minWidth:"300px"},children:[e.jsx("h3",{style:{fontSize:"1.125rem",fontWeight:600,color:"var(--semiont-text-primary)",marginBottom:"0.5rem"},children:f.title}),e.jsx("p",{style:{fontSize:"var(--semiont-text-sm, 0.875rem)",color:"var(--semiont-text-secondary)",marginBottom:"0.25rem"},children:f.description}),e.jsx("p",{style:{fontSize:"var(--semiont-text-xs, 0.75rem)",color:"var(--semiont-text-tertiary)"},children:f.learnMore})]}),e.jsxs("div",{style:{display:"flex",gap:"0.75rem",alignItems:"center",flexWrap:"wrap"},children:[e.jsxs("button",{type:"button",onClick:()=>u(!c),className:"semiont-button--secondary",style:{display:"flex",alignItems:"center",gap:"0.25rem"},children:[t("customize"),c?e.jsx(_,{style:{width:"1rem",height:"1rem"}}):e.jsx(q,{style:{width:"1rem",height:"1rem"}})]}),p!=="GDPR"&&e.jsx("button",{type:"button",onClick:b,disabled:a,className:"semiont-button--secondary",children:t(a?"saving":"rejectAll")}),e.jsx("button",{type:"button",onClick:j,disabled:a,className:"semiont-button--primary",children:t(a?"saving":"acceptAll")})]})]}),c&&e.jsx("div",{style:{borderTop:"1px solid var(--semiont-border-primary)",paddingTop:"1rem"},children:e.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"1rem"},children:[e.jsx("h4",{style:{fontSize:"1rem",fontWeight:500,color:"var(--semiont-text-primary)"},children:t("cookiePreferences")}),e.jsx("div",{style:{display:"flex",flexDirection:"column",gap:"0.75rem"},children:M.map(r=>e.jsxs("div",{style:{display:"flex",alignItems:"flex-start",gap:"0.75rem"},children:[e.jsx("div",{style:{display:"flex",alignItems:"center",height:"1.25rem"},children:e.jsx("input",{id:`cookie-${r.id}`,type:"checkbox",checked:y[r.id]||!1,onChange:()=>C(r.id),disabled:r.required||a,style:{accentColor:"var(--semiont-color-primary-600, #2563eb)"}})}),e.jsxs("div",{style:{flex:1,minWidth:0},children:[e.jsxs("label",{htmlFor:`cookie-${r.id}`,style:{fontSize:"var(--semiont-text-sm, 0.875rem)",fontWeight:500,color:"var(--semiont-text-primary)",cursor:"pointer"},children:[r.name,r.required&&e.jsx("span",{style:{fontSize:"var(--semiont-text-xs, 0.75rem)",color:"var(--semiont-text-tertiary)",marginLeft:"0.25rem"},children:t("required")})]}),e.jsx("p",{style:{fontSize:"var(--semiont-text-xs, 0.75rem)",color:"var(--semiont-text-secondary)",marginTop:"0.25rem"},children:r.description}),e.jsxs("details",{style:{marginTop:"0.25rem"},children:[e.jsx("summary",{style:{fontSize:"var(--semiont-text-xs, 0.75rem)",color:"var(--semiont-color-primary-600, #2563eb)",cursor:"pointer"},children:t("viewCookies")}),e.jsx("div",{style:{marginTop:"0.25rem",fontSize:"var(--semiont-text-xs, 0.75rem)",color:"var(--semiont-text-tertiary)"},children:r.cookies.join(", ")})]})]})]},r.id))}),e.jsxs("div",{style:{display:"flex",justifyContent:"flex-end",gap:"0.75rem",paddingTop:"1rem"},children:[e.jsx("button",{type:"button",onClick:()=>u(!1),className:"semiont-button--secondary",children:t("cancel")}),e.jsx("button",{type:"button",onClick:k,disabled:a,className:"semiont-button--primary",children:t(a?"saving":"savePreferences")})]})]})})]})})})}function Z(){return e.jsxs($,{children:[e.jsx(D,{}),e.jsx(G,{}),e.jsx(H,{})]})}export{Z as default};
|
|
2
|
+
//# sourceMappingURL=layout-DqFHhLVw.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layout-DqFHhLVw.js","sources":["../../src/components/knowledge/NavigationHandler.tsx","../../src/hooks/useMergedTranslationManager.ts","../../src/app/providers.tsx","../../../../node_modules/@heroicons/react/24/outline/esm/ChevronDownIcon.js","../../../../node_modules/@heroicons/react/24/outline/esm/ChevronUpIcon.js","../../src/components/CookieBanner.tsx","../../src/app/[locale]/layout.tsx"],"sourcesContent":["import { useCallback } from 'react';\nimport { useRouter } from '@/i18n/routing';\nimport { useEventSubscriptions } from '@semiont/react-ui';\n\n/**\n * NavigationHandler - Connects NavigationEventBus to Next.js router\n *\n * This component subscribes to navigation events from @semiont/react-ui\n * components and handles them using Next.js client-side routing.\n *\n * Benefits:\n * - Client-side navigation (no page reload)\n * - Preserves React state\n * - Faster navigation\n * - Better UX\n *\n * Must be mounted in app layout to handle all navigation requests.\n */\nexport function NavigationHandler() {\n const router = useRouter();\n\n // Handle external navigation events\n const handleExternalNavigate = useCallback(({ url, cancelFallback }: { url: string; resourceId?: string; cancelFallback: () => void }) => {\n cancelFallback(); // Prevent window.location fallback since we're handling with client-side routing\n router.push(url);\n }, [router]);\n\n // Handle router push events\n const handleRouterPush = useCallback(({ path }: { path: string; reason?: string }) => {\n router.push(path);\n }, [router]);\n\n useEventSubscriptions({\n 'nav:external': handleExternalNavigate,\n 'nav:push': handleRouterPush,\n });\n\n // This component only manages navigation, doesn't render anything\n return null;\n}\n","import { useMemo } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport type { TranslationManager } from '@semiont/react-ui';\n\ntype Messages = Record<string, Record<string, string>>;\n\n/**\n * Translation Manager for Frontend\n *\n * Wraps react-i18next. The messages JSON (loaded by i18next-http-backend) has\n * the same flat namespace structure: { \"Namespace\": { \"key\": \"value\" } }.\n * TranslationManager.t(namespace, key) maps directly to this structure.\n */\nexport function useMergedTranslationManager(): TranslationManager {\n const { i18n } = useTranslation();\n\n return useMemo(() => {\n return {\n t: (namespace: string, key: string, params?: Record<string, unknown>): string => {\n const messages = i18n.getResourceBundle(i18n.language, 'translation') as Messages | undefined;\n let translation = messages?.[namespace]?.[key];\n\n if (!translation) {\n if (process.env.NODE_ENV === 'development') {\n console.warn(`Translation not found: ${namespace}.${key} (locale: ${i18n.language})`);\n }\n return `${namespace}.${key}`;\n }\n\n if (params && typeof translation === 'string') {\n let result = translation;\n Object.entries(params).forEach(([paramKey, paramValue]) => {\n result = result.replace(new RegExp(`\\\\{${paramKey}\\\\}`, 'g'), String(paramValue));\n });\n return result;\n }\n\n return translation;\n },\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [i18n, i18n.language]);\n}\n","import React from 'react';\nimport {\n ToastProvider,\n LiveRegionProvider,\n TranslationProvider,\n ThemeProvider,\n SemiontProvider,\n} from '@semiont/react-ui';\nimport { KeyboardShortcutsProvider } from '@/contexts/KeyboardShortcutsContext';\nimport { NavigationHandler } from '@/components/knowledge/NavigationHandler';\nimport { useMergedTranslationManager } from '@/hooks/useMergedTranslationManager';\n\n/**\n * Root Provider Composition for Semiont Frontend.\n *\n * Wires up GLOBAL contexts that every page needs.\n *\n * The module-scoped `SemiontBrowser` singleton (KB list, active KB,\n * per-KB SemiontSession) is made available via `<SemiontProvider>` at\n * the app root — mounting it here is cheap because the singleton itself\n * survives every React re-render and route change.\n *\n * Auth-dependent UI (ProtectedErrorBoundary, SessionExpiredModal,\n * PermissionDeniedModal) is bundled in `AuthShell` and mounted only in\n * protected layouts (know/, admin/, moderate/, auth/welcome/). Pre-app\n * routes (landing, OAuth flow) intentionally do NOT mount AuthShell —\n * they have no session UI.\n *\n * The `SemiontClient` is owned by the per-KB `SemiontSession`, which\n * `SemiontBrowser` constructs on demand. Components read\n * `useObservable(useSemiont().activeSession$)?.client`.\n *\n * The event bus lives inside the client (owned by `SemiontSession`).\n * Components emit via `session?.emit(...)` and subscribe via\n * `useEventSubscription[s]`.\n *\n * Provider order — outer to inner:\n * 1. TranslationProvider — i18n\n * 2. SemiontProvider — SemiontBrowser singleton\n * 3. ToastProvider — toast notifications\n * 4. LiveRegionProvider — a11y live region\n * 5. KeyboardShortcutsProvider — keyboard shortcuts\n * 6. ThemeProvider — theme\n * + NavigationHandler\n */\nexport function Providers({ children }: { children: React.ReactNode }) {\n const translationManager = useMergedTranslationManager();\n\n return (\n <TranslationProvider translationManager={translationManager}>\n <SemiontProvider>\n <ToastProvider>\n <LiveRegionProvider>\n <KeyboardShortcutsProvider>\n <ThemeProvider>\n <NavigationHandler />\n {children}\n </ThemeProvider>\n </KeyboardShortcutsProvider>\n </LiveRegionProvider>\n </ToastProvider>\n </SemiontProvider>\n </TranslationProvider>\n );\n}\n","import * as React from \"react\";\nfunction ChevronDownIcon({\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: \"m19.5 8.25-7.5 7.5-7.5-7.5\"\n }));\n}\nconst ForwardRef = /*#__PURE__*/ React.forwardRef(ChevronDownIcon);\nexport default ForwardRef;","import * as React from \"react\";\nfunction ChevronUpIcon({\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: \"m4.5 15.75 7.5-7.5 7.5 7.5\"\n }));\n}\nconst ForwardRef = /*#__PURE__*/ React.forwardRef(ChevronUpIcon);\nexport default ForwardRef;","\"use client\";\n\nimport React, { useState, useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport {\n getCookieConsent,\n setCookieConsent,\n shouldShowBanner,\n COOKIE_CATEGORIES,\n CookieConsent,\n isCCPAApplicable,\n isGDPRApplicable,\n type CookieCategory\n} from '@/lib/cookies';\nimport { ChevronDownIcon, ChevronUpIcon } from '@heroicons/react/24/outline';\n\ninterface CookieBannerProps {\n className?: string;\n}\n\nexport function CookieBanner({ className = '' }: CookieBannerProps) {\n const { t: _t } = useTranslation();\n const t = (k: string, p?: Record<string, unknown>) => _t(`CookieBanner.${k}`, p as any) as string;\n const [isVisible, setIsVisible] = useState(false);\n const [showDetails, setShowDetails] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n const [region, setRegion] = useState<'GDPR' | 'CCPA' | 'GENERAL'>('GENERAL');\n const [consent, setConsent] = useState<Partial<CookieConsent>>({\n necessary: true,\n analytics: false,\n marketing: false,\n preferences: false\n });\n\n useEffect(() => {\n const checkVisibility = async () => {\n if (shouldShowBanner()) {\n setIsVisible(true);\n\n try {\n // Determine applicable regulation\n const [isGDPR, isCCPA] = await Promise.all([\n isGDPRApplicable(),\n isCCPAApplicable()\n ]);\n\n if (isGDPR) {\n setRegion('GDPR');\n } else if (isCCPA) {\n setRegion('CCPA');\n } else {\n setRegion('GENERAL');\n }\n } catch (error) {\n // If region detection fails, default to GENERAL\n console.error('Failed to detect region:', error);\n setRegion('GENERAL');\n }\n }\n };\n\n checkVisibility();\n }, []);\n\n const handleAcceptAll = async () => {\n setIsLoading(true);\n\n try {\n const fullConsent = {\n necessary: true,\n analytics: true,\n marketing: true,\n preferences: true\n };\n\n await Promise.resolve(setCookieConsent(fullConsent));\n setIsVisible(false);\n } catch (error) {\n console.error('Failed to save cookie consent:', error);\n } finally {\n setIsLoading(false);\n }\n };\n\n const handleRejectAll = async () => {\n setIsLoading(true);\n\n try {\n const minimalConsent = {\n necessary: true,\n analytics: false,\n marketing: false,\n preferences: false\n };\n\n await Promise.resolve(setCookieConsent(minimalConsent));\n setIsVisible(false);\n } catch (error) {\n console.error('Failed to save cookie consent:', error);\n } finally {\n setIsLoading(false);\n }\n };\n\n const handleSavePreferences = async () => {\n setIsLoading(true);\n\n try {\n await Promise.resolve(setCookieConsent(consent));\n setIsVisible(false);\n } catch (error) {\n console.error('Failed to save cookie consent:', error);\n } finally {\n setIsLoading(false);\n }\n };\n\n const handleCategoryToggle = (categoryId: keyof Omit<CookieConsent, 'timestamp' | 'version'>) => {\n if (categoryId === 'necessary') return; // Can't toggle necessary cookies\n\n setConsent(prev => ({\n ...prev,\n [categoryId]: !prev[categoryId]\n }));\n };\n\n const getBannerText = () => {\n switch (region) {\n case 'GDPR':\n return {\n title: t('gdprTitle'),\n description: t('gdprDescription'),\n learnMore: t('gdprLearnMore')\n };\n case 'CCPA':\n return {\n title: t('ccpaTitle'),\n description: t('ccpaDescription'),\n learnMore: t('ccpaLearnMore')\n };\n default:\n return {\n title: t('generalTitle'),\n description: t('generalDescription'),\n learnMore: t('generalLearnMore')\n };\n }\n };\n\n if (!isVisible) return null;\n\n const bannerText = getBannerText();\n\n return (\n <div\n className={className}\n style={{\n position: 'fixed',\n bottom: 0,\n left: 0,\n right: 0,\n zIndex: 50,\n backgroundColor: 'var(--semiont-bg-primary)',\n borderTop: '1px solid var(--semiont-border-primary)',\n boxShadow: 'var(--semiont-shadow-lg)',\n }}\n >\n <div style={{ maxWidth: '80rem', margin: '0 auto', padding: '1rem 1.5rem' }}>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '1rem' }}>\n {/* Main banner content */}\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', gap: '1.5rem', flexWrap: 'wrap' }}>\n <div style={{ flex: 1, minWidth: '300px' }}>\n <h3 style={{\n fontSize: '1.125rem',\n fontWeight: 600,\n color: 'var(--semiont-text-primary)',\n marginBottom: '0.5rem',\n }}>\n {bannerText.title}\n </h3>\n <p style={{\n fontSize: 'var(--semiont-text-sm, 0.875rem)',\n color: 'var(--semiont-text-secondary)',\n marginBottom: '0.25rem',\n }}>\n {bannerText.description}\n </p>\n <p style={{\n fontSize: 'var(--semiont-text-xs, 0.75rem)',\n color: 'var(--semiont-text-tertiary)',\n }}>\n {bannerText.learnMore}\n </p>\n </div>\n\n {/* Action buttons */}\n <div style={{ display: 'flex', gap: '0.75rem', alignItems: 'center', flexWrap: 'wrap' }}>\n <button\n type=\"button\"\n onClick={() => setShowDetails(!showDetails)}\n className=\"semiont-button--secondary\"\n style={{ display: 'flex', alignItems: 'center', gap: '0.25rem' }}\n >\n {t('customize')}\n {showDetails ? (\n <ChevronUpIcon style={{ width: '1rem', height: '1rem' }} />\n ) : (\n <ChevronDownIcon style={{ width: '1rem', height: '1rem' }} />\n )}\n </button>\n\n {region !== 'GDPR' && (\n <button\n type=\"button\"\n onClick={handleRejectAll}\n disabled={isLoading}\n className=\"semiont-button--secondary\"\n >\n {isLoading ? t('saving') : t('rejectAll')}\n </button>\n )}\n\n <button\n type=\"button\"\n onClick={handleAcceptAll}\n disabled={isLoading}\n className=\"semiont-button--primary\"\n >\n {isLoading ? t('saving') : t('acceptAll')}\n </button>\n </div>\n </div>\n\n {/* Detailed preferences */}\n {showDetails && (\n <div style={{\n borderTop: '1px solid var(--semiont-border-primary)',\n paddingTop: '1rem',\n }}>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '1rem' }}>\n <h4 style={{\n fontSize: '1rem',\n fontWeight: 500,\n color: 'var(--semiont-text-primary)',\n }}>\n {t('cookiePreferences')}\n </h4>\n\n <div style={{ display: 'flex', flexDirection: 'column', gap: '0.75rem' }}>\n {COOKIE_CATEGORIES.map((category: CookieCategory) => (\n <div key={category.id} style={{ display: 'flex', alignItems: 'flex-start', gap: '0.75rem' }}>\n <div style={{ display: 'flex', alignItems: 'center', height: '1.25rem' }}>\n <input\n id={`cookie-${category.id}`}\n type=\"checkbox\"\n checked={consent[category.id] || false}\n onChange={() => handleCategoryToggle(category.id)}\n disabled={category.required || isLoading}\n style={{ accentColor: 'var(--semiont-color-primary-600, #2563eb)' }}\n />\n </div>\n <div style={{ flex: 1, minWidth: 0 }}>\n <label\n htmlFor={`cookie-${category.id}`}\n style={{\n fontSize: 'var(--semiont-text-sm, 0.875rem)',\n fontWeight: 500,\n color: 'var(--semiont-text-primary)',\n cursor: 'pointer',\n }}\n >\n {category.name}\n {category.required && (\n <span style={{\n fontSize: 'var(--semiont-text-xs, 0.75rem)',\n color: 'var(--semiont-text-tertiary)',\n marginLeft: '0.25rem',\n }}>\n {t('required')}\n </span>\n )}\n </label>\n <p style={{\n fontSize: 'var(--semiont-text-xs, 0.75rem)',\n color: 'var(--semiont-text-secondary)',\n marginTop: '0.25rem',\n }}>\n {category.description}\n </p>\n <details style={{ marginTop: '0.25rem' }}>\n <summary style={{\n fontSize: 'var(--semiont-text-xs, 0.75rem)',\n color: 'var(--semiont-color-primary-600, #2563eb)',\n cursor: 'pointer',\n }}>\n {t('viewCookies')}\n </summary>\n <div style={{\n marginTop: '0.25rem',\n fontSize: 'var(--semiont-text-xs, 0.75rem)',\n color: 'var(--semiont-text-tertiary)',\n }}>\n {category.cookies.join(', ')}\n </div>\n </details>\n </div>\n </div>\n ))}\n </div>\n\n <div style={{\n display: 'flex',\n justifyContent: 'flex-end',\n gap: '0.75rem',\n paddingTop: '1rem',\n }}>\n <button\n type=\"button\"\n onClick={() => setShowDetails(false)}\n className=\"semiont-button--secondary\"\n >\n {t('cancel')}\n </button>\n <button\n type=\"button\"\n onClick={handleSavePreferences}\n disabled={isLoading}\n className=\"semiont-button--primary\"\n >\n {isLoading ? t('saving') : t('savePreferences')}\n </button>\n </div>\n </div>\n </div>\n )}\n </div>\n </div>\n </div>\n );\n}\n\nexport default CookieBanner;\n","import { Outlet } from 'react-router-dom';\nimport { Providers } from '../providers';\nimport { CookieBanner } from '@/components/CookieBanner';\nimport { SkipLinks } from '@semiont/react-ui';\n\n/**\n * Locale Layout — root layout for all /:locale/* routes.\n *\n * Mounts only auth-independent providers. Auth-dependent providers\n * (KnowledgeBaseProvider, AuthProvider, SessionProvider, modals)\n * are mounted via AuthShell in protected layouts (know/, admin/,\n * moderate/, auth/welcome/).\n */\nexport default function LocaleLayout() {\n return (\n <Providers>\n <SkipLinks />\n <Outlet />\n <CookieBanner />\n </Providers>\n );\n}\n"],"names":["NavigationHandler","router","useRouter","handleExternalNavigate","useCallback","url","cancelFallback","handleRouterPush","path","useEventSubscriptions","useMergedTranslationManager","i18n","useTranslation","useMemo","namespace","key","params","messages","translation","_a","result","paramKey","paramValue","Providers","children","translationManager","jsx","TranslationProvider","SemiontProvider","ToastProvider","LiveRegionProvider","KeyboardShortcutsProvider","jsxs","ThemeProvider","ChevronDownIcon","title","titleId","props","svgRef","React.createElement","ForwardRef","React.forwardRef","ChevronUpIcon","CookieBanner","className","_t","k","p","isVisible","setIsVisible","useState","showDetails","setShowDetails","isLoading","setIsLoading","region","setRegion","consent","setConsent","useEffect","shouldShowBanner","isGDPR","isCCPA","isGDPRApplicable","isCCPAApplicable","error","handleAcceptAll","fullConsent","setCookieConsent","handleRejectAll","minimalConsent","handleSavePreferences","handleCategoryToggle","categoryId","prev","getBannerText","bannerText","COOKIE_CATEGORIES","category","LocaleLayout","SkipLinks","Outlet"],"mappings":"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","x_google_ignoreList":[3,4]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{u as p,c as u,k as $,j as e,K,M as A,N as H,O as j,g as _,h as T,i as F,T as I}from"./index-Bsr9DJ3G.js";import{r as x,O as B}from"./vendor-DJo4KD8w.js";import{b as E,u as O,L as P}from"./routing-DCIgrT7s.js";import{u as f}from"./i18n-BbpF47i1.js";import{F as z,T as M}from"./ToolbarPanels-CPoZvoTB.js";import{F as C}from"./XMarkIcon-KMKD47CF.js";import{F as W,a as D}from"./ChevronLeftIcon-BLyRNZuL.js";import{r as w,L as b}from"./routing-D4iNsc7y.js";import{C as y}from"./CookiePreferences-CPbRK2Nf.js";import{K as U}from"./privacy-CZ8NTWnp.js";const V=({className:r})=>e.jsx("span",{className:r,style:{fontSize:"1.25rem",lineHeight:"1"},children:"🔭"});function G({href:r,to:s,...t}){return e.jsx(P,{to:r??"",...t})}function q({isCollapsed:r,toggleCollapsed:s,navigationMenu:t}){const{t:d}=f(),o=(m,g)=>d(`Sidebar.${m}`,g),n=E(),l=O(),i=p(),h=u(i.openResources$)??[],a=i.removeOpenResource.bind(i),c=i.reorderOpenResources.bind(i),v=[{name:o("discover"),href:"/know/discover",icon:V,description:o("searchAndBrowse")},{name:o("compose"),href:"/know/compose",icon:z,description:o("composeNewResource")}],N=x.useCallback(()=>{s()},[s]),k=x.useCallback(({resourceId:m})=>{a(m),n===`/know/resource/${m}`&&l.push("/know/discover")},[a,n,l]),L=x.useCallback(({oldIndex:m,newIndex:g})=>{c(m,g)},[c]);$({"shell:sidebar-toggle":N,"tabs:close":k,"tabs:reorder":L});const R=m=>{l.push(m)},S=m=>`/know/resource/${m}`;return e.jsx("div",{className:"flex flex-col h-full",children:e.jsx("div",{className:"flex-1 min-h-0 overflow-y-auto",children:e.jsx(K,{fixedItems:v,resources:h,isCollapsed:r,currentPath:n,LinkComponent:G,onNavigate:R,getResourceHref:S,className:"knowledge-navigation",translations:{title:o("title")},icons:{chevronLeft:D,bars:W,close:C},navigationMenu:t})})})}function J(){const{t:r}=f(),s=(a,c)=>r(`Navigation.${a}`,c),{t}=f(),d=(a,c)=>t(`Home.${a}`,c),o=u(p().activeSession$),n=u(o==null?void 0:o.user$),l=!!n,i=(n==null?void 0:n.isAdmin)??!1,h=(n==null?void 0:n.isModerator)??!1;return e.jsx(A,{Link:b,routes:w,t:s,tHome:d,brandingLink:"/",collapsible:!0,storageKey:"knowledgeNavCollapsed",isAuthenticated:l,isAdmin:i,isModerator:h,children:(a,c,v)=>e.jsx(q,{isCollapsed:a,toggleCollapsed:c,navigationMenu:v})})}function Q(){return null}function X(){var l;const{t:r}=f(),s=i=>r(`DiscoverEmptyState.${i}`),t=p(),d=u(t.kbs$)??[],o=((l=u(t.activeSession$))==null?void 0:l.kb)??null,n=o?t.getKbSessionStatus(o.id):null;return d.length===0?e.jsxs("div",{style:{textAlign:"center",maxWidth:"28rem"},children:[e.jsx("h2",{style:{fontSize:"1.1rem",fontWeight:600,marginBottom:"0.5rem"},children:s("noKnowledgeBases")}),e.jsx("p",{style:{color:"var(--semiont-color-neutral-400)",fontSize:"0.85rem",lineHeight:1.5,marginBottom:"0.75rem"},children:s("noKnowledgeBasesHint")}),e.jsxs("p",{style:{color:"var(--semiont-color-neutral-400)",fontSize:"0.85rem",lineHeight:1.5},children:[e.jsx("a",{href:"https://github.com/The-AI-Alliance/semiont",target:"_blank",rel:"noopener noreferrer",style:{color:"var(--semiont-color-primary-500)"},children:s("findKnowledgeBases")})," · ",e.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:s("createNew")})]})]}):n==="authenticated"?null:e.jsxs("div",{style:{textAlign:"center",maxWidth:"24rem"},children:[e.jsx("h2",{style:{fontSize:"1.1rem",fontWeight:600,marginBottom:"0.5rem"},children:(o==null?void 0:o.label)??""}),e.jsxs("p",{style:{color:"var(--semiont-color-neutral-400)",fontSize:"0.85rem",lineHeight:1.5},children:[s(n==="expired"?"sessionExpired":"signedOut")," ",s("signInHint")]})]})}function Y({t:r,keyboardContext:s}){const t=_(),d=u(t.activePanel$)??null,{theme:o}=T(),{showLineNumbers:n}=F();return e.jsxs("div",{className:"h-screen semiont-knowledge-layout semiont-layout-with-footer flex flex-col overflow-hidden",children:[e.jsxs("div",{className:"flex flex-1 overflow-hidden",children:[e.jsx("main",{className:"flex-1 w-full px-2 pb-6 flex flex-col overflow-hidden",children:e.jsx("div",{className:"w-full mx-auto flex-1 flex flex-col h-full overflow-hidden items-center justify-center",children:e.jsx(X,{})})}),e.jsx(M,{activePanel:d,showLineNumbers:n,theme:o,hoverDelayMs:150}),e.jsx(I,{activePanel:d,context:"simple"})]}),e.jsx(j,{Link:b,routes:w,t:(l,i)=>r(`Footer.${l}`,i),CookiePreferences:y,showPolicyLinks:!("__TAURI_INTERNALS__"in window),...(s==null?void 0:s.openKeyboardHelp)&&{onOpenKeyboardHelp:s.openKeyboardHelp}})]})}function Z(){const{t:r}=f(),s=x.useContext(U),t=p(),d=u(t.activeKbId$),o=u(t.activeSession$),n=u(t.sessionActivating$),l=u(o==null?void 0:o.token$),i=(o==null?void 0:o.kb)??null;return d!=null&&o==null&&n?e.jsx("div",{className:"h-screen flex items-center justify-center",children:e.jsxs("div",{className:"text-center",children:[e.jsx("div",{className:"animate-spin rounded-full h-12 w-12 border-b-2 border-blue-600 mx-auto mb-4"}),e.jsx("p",{className:"text-gray-600 dark:text-gray-400",children:"Loading..."})]})}):!i||!l?e.jsx(Y,{t:(a,c)=>r(a,c),keyboardContext:s}):e.jsxs(H,{children:[e.jsx(Q,{}),e.jsxs("div",{className:"h-screen semiont-knowledge-layout semiont-layout-with-footer flex flex-col overflow-hidden",children:[e.jsxs("div",{className:"flex flex-1 overflow-hidden",children:[e.jsx(J,{}),e.jsx("main",{className:"flex-1 w-full px-2 pb-6 flex flex-col overflow-hidden",children:e.jsx("div",{className:"w-full mx-auto flex-1 flex flex-col h-full overflow-hidden",children:e.jsx(B,{})})})]}),e.jsx(j,{Link:b,routes:w,t:(a,c)=>r(`Footer.${a}`,c),CookiePreferences:y,showPolicyLinks:!("__TAURI_INTERNALS__"in window),...(s==null?void 0:s.openKeyboardHelp)&&{onOpenKeyboardHelp:s.openKeyboardHelp}})]})]})}function de(){return e.jsx(Z,{})}export{de as default};
|
|
2
|
+
//# sourceMappingURL=layout-w9wtEpkI.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layout-w9wtEpkI.js","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 React from 'react';\nimport { 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 } from 'react';\nimport { Outlet } from 'react-router-dom';\nimport { useTranslation } from 'react-i18next';\nimport { KnowledgeSidebarWrapper } from '@/components/knowledge/KnowledgeSidebarWrapper';\nimport {\n Footer,\n ResourceAnnotationsProvider,\n Toolbar,\n useSemiont,\n useShellVM,\n useObservable,\n useTheme,\n useLineNumbers,\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 */\nfunction DiscoverEmptyState() {\n const { t: _t } = useTranslation();\n const t = (k: string) => _t(`DiscoverEmptyState.${k}`) as string;\n const semiont = useSemiont();\n const knowledgeBases = useObservable(semiont.kbs$) ?? [];\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 <p style={{ color: 'var(--semiont-color-neutral-400)', fontSize: '0.85rem', lineHeight: 1.5 }}>\n <a href=\"https://github.com/The-AI-Alliance/semiont\" 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 browseVM = useShellVM();\n const activePanel = useObservable(browseVM.activePanel$) ?? null;\n const { theme } = useTheme();\n const { showLineNumbers } = useLineNumbers();\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 showLineNumbers={showLineNumbers}\n theme={theme}\n hoverDelayMs={150}\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"],"names":["TelescopeIcon","className","jsx","HrefLink","href","_to","props","Link","KnowledgeNavigation","isCollapsed","toggleCollapsed","navigationMenu","_t","useTranslation","t","k","p","pathname","usePathname","router","useRouter","semiont","useSemiont","openResources","useObservable","removeResource","reorderResources","fixedNavigation","PlusIcon","handleSidebarToggle","useCallback","handleResourceClose","resourceId","handleResourceReorder","oldIndex","newIndex","useEventSubscriptions","handleNavigate","path","getResourceHref","CollapsibleResourceNavigation","ChevronLeftIcon","Bars3Icon","XMarkIcon","KnowledgeSidebarWrapper","_tHome","tHome","session","user","isAuthenticated","isAdmin","isModerator","LeftSidebar","routes","GlobalEventsConnector","DiscoverEmptyState","knowledgeBases","activeKnowledgeBase","_a","status","jsxs","UnauthenticatedKnowledgeLayout","keyboardContext","browseVM","useShellVM","activePanel","theme","useTheme","showLineNumbers","useLineNumbers","ToolbarPanels","Toolbar","Footer","key","params","CookiePreferences","KnowledgeLayoutBody","useContext","KeyboardShortcutsContext","activeKbId","sessionActivating","token","ResourceAnnotationsProvider","Outlet","KnowledgeLayout"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{j as e}from"./index-
|
|
2
|
-
//# sourceMappingURL=not-found-
|
|
1
|
+
import{j as e}from"./index-Bsr9DJ3G.js";import{a as n,L as l}from"./routing-DCIgrT7s.js";import{u as i}from"./i18n-BbpF47i1.js";import"./vendor-DJo4KD8w.js";function g(){const{t:s}=i(),t=(r,o)=>s(`NotFound.${r}`,o),a=n();return e.jsx("div",{className:"flex min-h-screen items-center justify-center bg-gray-50 dark:bg-gray-900",children:e.jsxs("div",{className:"text-center px-4",children:[e.jsx("h1",{className:"text-6xl font-bold text-gray-900 dark:text-white mb-4",children:t("title")}),e.jsx("h2",{className:"text-2xl font-semibold text-gray-700 dark:text-gray-300 mb-4",children:t("heading")}),e.jsx("p",{className:"text-gray-600 dark:text-gray-400 mb-8",children:t("message")}),e.jsx(l,{to:`/${a}`,className:"inline-block px-6 py-3 bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-colors",children:t("goHome")})]})})}export{g as default};
|
|
2
|
+
//# sourceMappingURL=not-found-C0HTZoKU.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"not-found-
|
|
1
|
+
{"version":3,"file":"not-found-C0HTZoKU.js","sources":["../../src/app/[locale]/not-found.tsx"],"sourcesContent":["import React from 'react';\nimport { Link } from '@/i18n/routing';\nimport { useTranslation } from 'react-i18next';\nimport { useLocale } from '@/i18n/routing';\n\nexport default function NotFound() {\n const { t: _t } = useTranslation();\n const t = (k: string, p?: Record<string, unknown>) => _t(`NotFound.${k}`, p as any) as string;\n const locale = useLocale();\n\n return (\n <div className=\"flex min-h-screen items-center justify-center bg-gray-50 dark:bg-gray-900\">\n <div className=\"text-center px-4\">\n <h1 className=\"text-6xl font-bold text-gray-900 dark:text-white mb-4\">{t('title')}</h1>\n <h2 className=\"text-2xl font-semibold text-gray-700 dark:text-gray-300 mb-4\">\n {t('heading')}\n </h2>\n <p className=\"text-gray-600 dark:text-gray-400 mb-8\">\n {t('message')}\n </p>\n <Link\n to={`/${locale}`}\n className=\"inline-block px-6 py-3 bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-colors\"\n >\n {t('goHome')}\n </Link>\n </div>\n </div>\n );\n}\n"],"names":["NotFound","_t","useTranslation","k","p","locale","useLocale","jsxs","jsx","Link"],"mappings":"6JAKA,SAAwBA,GAAW,CACjC,KAAM,CAAE,EAAGC,CAAA,EAAOC,EAAA,EACZ,EAAI,CAACC,EAAWC,IAAgCH,EAAG,YAAYE,CAAC,GAAIC,CAAQ,EAC5EC,EAASC,EAAA,EAEf,aACG,MAAA,CAAI,UAAU,4EACb,SAAAC,EAAAA,KAAC,MAAA,CAAI,UAAU,mBACb,SAAA,CAAAC,MAAC,KAAA,CAAG,UAAU,wDAAyD,SAAA,EAAE,OAAO,EAAE,QACjF,KAAA,CAAG,UAAU,+DACX,SAAA,EAAE,SAAS,EACd,QACC,IAAA,CAAE,UAAU,wCACV,SAAA,EAAE,SAAS,EACd,EACAA,EAAAA,IAACC,EAAA,CACC,GAAI,IAAIJ,CAAM,GACd,UAAU,+FAET,WAAE,QAAQ,CAAA,CAAA,CACb,CAAA,CACF,CAAA,CACF,CAEJ"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{g,c as o,h as b,i as f,k as w,j as c,
|
|
2
|
-
//# sourceMappingURL=page
|
|
1
|
+
import{g,c as o,h as b,i as f,k as w,j as c,U as C,T as y,u as k,V as D}from"./index-Bsr9DJ3G.js";import{r as s}from"./vendor-DJo4KD8w.js";import{T as M}from"./ToolbarPanels-CPoZvoTB.js";import{u as T}from"./i18n-BbpF47i1.js";import{F as L}from"./CommandLineIcon-Ba4gpk8e.js";import"./routing-DCIgrT7s.js";import"./XMarkIcon-KMKD47CF.js";function x({title:t,titleId:e,...n},a){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:a,"aria-labelledby":e},n),t?s.createElement("title",{id:e},t):null,s.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M3 13.125C3 12.504 3.504 12 4.125 12h2.25c.621 0 1.125.504 1.125 1.125v6.75C7.5 20.496 6.996 21 6.375 21h-2.25A1.125 1.125 0 0 1 3 19.875v-6.75ZM9.75 8.625c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125v11.25c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125V8.625ZM16.5 4.125c0-.621.504-1.125 1.125-1.125h2.25C20.496 3 21 3.504 21 4.125v15.75c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125V4.125Z"}))}const O=s.forwardRef(x);function S({title:t,titleId:e,...n},a){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:a,"aria-labelledby":e},n),t?s.createElement("title",{id:e},t):null,s.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M21.75 17.25v-.228a4.5 4.5 0 0 0-.12-1.03l-2.268-9.64a3.375 3.375 0 0 0-3.285-2.602H7.923a3.375 3.375 0 0 0-3.285 2.602l-2.268 9.64a4.5 4.5 0 0 0-.12 1.03v.228m19.5 0a3 3 0 0 1-3 3H5.25a3 3 0 0 1-3-3m19.5 0a3 3 0 0 0-3-3H5.25a3 3 0 0 0-3 3m16.5 0h.008v.008h-.008v-.008Zm-3 0h.008v.008h-.008v-.008Z"}))}const E=s.forwardRef(S);function j(){const t=o(k().activeSession$),n=!!o(t==null?void 0:t.user$);return c.jsx(D,{isFullyAuthenticated:n,isAuthenticated:n,hasValidBackendToken:n})}function B(){const{t}=T(),e=(i,v)=>t(`AdminDevOps.${i}`,v),n=g(),a=o(n.activePanel$)??null,{theme:u,setTheme:r}=b(),{showLineNumbers:m,toggleLineNumbers:l}=f(),d=s.useCallback(({theme:i})=>{r(i)},[r]),p=s.useCallback(()=>{l()},[l]);w({"settings:theme-changed":d,"settings:line-numbers-toggled":p});const h=[{title:e("systemMonitoring"),description:e("systemMonitoringDescription"),icon:O,available:e("systemMonitoringCLI")},{title:e("serviceManagement"),description:e("serviceManagementDescription"),icon:E,available:e("serviceManagementCLI")},{title:e("deploymentControl"),description:e("deploymentControlDescription"),icon:L,available:e("deploymentControlCLI")}];return c.jsx(C,{suggestedFeatures:h,theme:u,showLineNumbers:m,activePanel:a,translations:{title:e("title"),subtitle:e("subtitle"),systemStatus:e("systemStatus"),cliOperations:e("cliOperations"),cliOperationsDescription:e("cliOperationsDescription"),cliTitle:e("cliTitle"),cliDescription:e("cliDescription")},StatusDisplay:j,ToolbarPanels:M,Toolbar:y})}export{B as default};
|
|
2
|
+
//# sourceMappingURL=page--QmNUvGH.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page
|
|
1
|
+
{"version":3,"file":"page--QmNUvGH.js","sources":["../../../../node_modules/@heroicons/react/24/outline/esm/ChartBarIcon.js","../../../../node_modules/@heroicons/react/24/outline/esm/ServerIcon.js","../../src/app/[locale]/admin/devops/page.tsx"],"sourcesContent":["import * as React from \"react\";\nfunction ChartBarIcon({\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: \"M3 13.125C3 12.504 3.504 12 4.125 12h2.25c.621 0 1.125.504 1.125 1.125v6.75C7.5 20.496 6.996 21 6.375 21h-2.25A1.125 1.125 0 0 1 3 19.875v-6.75ZM9.75 8.625c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125v11.25c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125V8.625ZM16.5 4.125c0-.621.504-1.125 1.125-1.125h2.25C20.496 3 21 3.504 21 4.125v15.75c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125V4.125Z\"\n }));\n}\nconst ForwardRef = /*#__PURE__*/ React.forwardRef(ChartBarIcon);\nexport default ForwardRef;","import * as React from \"react\";\nfunction ServerIcon({\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: \"M21.75 17.25v-.228a4.5 4.5 0 0 0-.12-1.03l-2.268-9.64a3.375 3.375 0 0 0-3.285-2.602H7.923a3.375 3.375 0 0 0-3.285 2.602l-2.268 9.64a4.5 4.5 0 0 0-.12 1.03v.228m19.5 0a3 3 0 0 1-3 3H5.25a3 3 0 0 1-3-3m19.5 0a3 3 0 0 0-3-3H5.25a3 3 0 0 0-3 3m16.5 0h.008v.008h-.008v-.008Zm-3 0h.008v.008h-.008v-.008Z\"\n }));\n}\nconst ForwardRef = /*#__PURE__*/ React.forwardRef(ServerIcon);\nexport default ForwardRef;","/**\n * DevOps Page - Thin Next.js wrapper\n *\n * This page handles Next.js-specific concerns (translations, hooks)\n * and delegates rendering to the pure React AdminDevOpsPage component.\n */\n\nimport { useTranslation } from 'react-i18next';\nimport { useEffect, useCallback } from 'react';\nimport {\n ChartBarIcon,\n ServerIcon,\n CommandLineIcon\n} from '@heroicons/react/24/outline';\nimport { StatusDisplay, Toolbar } from '@semiont/react-ui';\nimport { ToolbarPanels } from '@/components/toolbar/ToolbarPanels';\nimport { useTheme, useShellVM, useObservable, useLineNumbers, useEventSubscriptions, useSemiont } from '@semiont/react-ui';\nimport { AdminDevOpsPage } from '@semiont/react-ui';\n\n// Wrapper component that provides auth props to StatusDisplay.\n// The three booleans collapse to the same value (is the user authenticated?)\n// now that token and user are both session-owned.\nfunction StatusDisplayWithAuth() {\n const session = useObservable(useSemiont().activeSession$);\n const user = useObservable(session?.user$);\n const authed = !!user;\n return (\n <StatusDisplay\n isFullyAuthenticated={authed}\n isAuthenticated={authed}\n hasValidBackendToken={authed}\n />\n );\n}\n\nexport default function DevOpsPage() {\n const { t: _t } = useTranslation();\n const t = (k: string, p?: Record<string, unknown>) => _t(`AdminDevOps.${k}`, p as any) as string;\n\n // Toolbar and settings state\n const browseVM = useShellVM();\n const activePanel = useObservable(browseVM.activePanel$) ?? null;\n const { theme, setTheme } = useTheme();\n const { showLineNumbers, toggleLineNumbers } = useLineNumbers();\n\n // Handle theme change events\n const handleThemeChanged = useCallback(({ theme }: { theme: 'light' | 'dark' | 'system' }) => {\n setTheme(theme);\n }, [setTheme]);\n\n // Handle line numbers toggle events\n const handleLineNumbersToggled = useCallback(() => {\n toggleLineNumbers();\n }, [toggleLineNumbers]);\n\n useEventSubscriptions({\n 'settings:theme-changed': handleThemeChanged,\n 'settings:line-numbers-toggled': handleLineNumbersToggled,\n });\n\n const suggestedFeatures = [\n {\n title: t('systemMonitoring'),\n description: t('systemMonitoringDescription'),\n icon: ChartBarIcon,\n available: t('systemMonitoringCLI')\n },\n {\n title: t('serviceManagement'),\n description: t('serviceManagementDescription'),\n icon: ServerIcon,\n available: t('serviceManagementCLI')\n },\n {\n title: t('deploymentControl'),\n description: t('deploymentControlDescription'),\n icon: CommandLineIcon,\n available: t('deploymentControlCLI')\n },\n ];\n\n return (\n <AdminDevOpsPage\n suggestedFeatures={suggestedFeatures}\n theme={theme}\n showLineNumbers={showLineNumbers}\n activePanel={activePanel}\n translations={{\n title: t('title'),\n subtitle: t('subtitle'),\n systemStatus: t('systemStatus'),\n cliOperations: t('cliOperations'),\n cliOperationsDescription: t('cliOperationsDescription'),\n cliTitle: t('cliTitle'),\n cliDescription: t('cliDescription'),\n }}\n StatusDisplay={StatusDisplayWithAuth}\n ToolbarPanels={ToolbarPanels}\n Toolbar={Toolbar}\n />\n );\n}\n"],"names":["ChartBarIcon","title","titleId","props","svgRef","React.createElement","ForwardRef","React.forwardRef","ServerIcon","StatusDisplayWithAuth","session","useObservable","useSemiont","authed","jsx","StatusDisplay","DevOpsPage","_t","useTranslation","t","k","p","browseVM","useShellVM","activePanel","theme","setTheme","useTheme","showLineNumbers","toggleLineNumbers","useLineNumbers","handleThemeChanged","useCallback","handleLineNumbersToggled","useEventSubscriptions","suggestedFeatures","CommandLineIcon","AdminDevOpsPage","ToolbarPanels","Toolbar"],"mappings":"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","x_google_ignoreList":[0,1]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{j as t}from"./index-
|
|
2
|
-
//# sourceMappingURL=page-
|
|
1
|
+
import{j as t}from"./index-Bsr9DJ3G.js";import{r as a}from"./vendor-DJo4KD8w.js";import{u as l}from"./routing-DCIgrT7s.js";import{u}from"./i18n-BbpF47i1.js";function p(){const{t:c}=u(),s=(e,i)=>c(`Sidebar.${e}`,i),r=l(),[o,n]=a.useState(!0);return a.useEffect(()=>{const e=localStorage.getItem("lastViewedDocumentId");e?r.replace(`/know/resource/${e}`):r.replace("/know/discover"),n(!1)},[r]),o?t.jsx("div",{className:"flex items-center justify-center py-20",children:t.jsx("p",{className:"text-gray-600 dark:text-gray-300",children:s("loading")})}):t.jsx("div",{className:"flex items-center justify-center py-20",children:t.jsx("p",{className:"text-gray-600 dark:text-gray-300",children:s("redirecting")})})}export{p as default};
|
|
2
|
+
//# sourceMappingURL=page-BIyG0SOs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page-
|
|
1
|
+
{"version":3,"file":"page-BIyG0SOs.js","sources":["../../src/app/[locale]/know/page.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\nimport { useRouter } from '@/i18n/routing';\nimport { useTranslation } from 'react-i18next';\n\nexport default function KnowledgePage() {\n const { t: _t } = useTranslation();\n const t = (k: string, p?: Record<string, unknown>) => _t(`Sidebar.${k}`, p as any) as string;\n const router = useRouter();\n const [checking, setChecking] = useState(true);\n\n useEffect(() => {\n // Check if there's a last viewed document\n const lastDocumentId = localStorage.getItem('lastViewedDocumentId');\n \n if (lastDocumentId) {\n // If there's a last viewed document, go to it\n router.replace(`/know/resource/${lastDocumentId}`);\n } else {\n // Otherwise, go to Discover\n router.replace('/know/discover');\n }\n \n setChecking(false);\n }, [router]);\n\n if (checking) {\n return (\n <div className=\"flex items-center justify-center py-20\">\n <p className=\"text-gray-600 dark:text-gray-300\">{t('loading')}</p>\n </div>\n );\n }\n\n return (\n <div className=\"flex items-center justify-center py-20\">\n <p className=\"text-gray-600 dark:text-gray-300\">{t('redirecting')}</p>\n </div>\n );\n}"],"names":["KnowledgePage","_t","useTranslation","t","k","p","router","useRouter","checking","setChecking","useState","useEffect","lastDocumentId","jsx"],"mappings":"6JAIA,SAAwBA,GAAgB,CACtC,KAAM,CAAE,EAAGC,CAAA,EAAOC,EAAA,EACZC,EAAI,CAACC,EAAWC,IAAgCJ,EAAG,WAAWG,CAAC,GAAIC,CAAQ,EAC3EC,EAASC,EAAA,EACT,CAACC,EAAUC,CAAW,EAAIC,EAAAA,SAAS,EAAI,EAiB7C,OAfAC,EAAAA,UAAU,IAAM,CAEd,MAAMC,EAAiB,aAAa,QAAQ,sBAAsB,EAE9DA,EAEFN,EAAO,QAAQ,kBAAkBM,CAAc,EAAE,EAGjDN,EAAO,QAAQ,gBAAgB,EAGjCG,EAAY,EAAK,CACnB,EAAG,CAACH,CAAM,CAAC,EAEPE,EAEAK,EAAAA,IAAC,MAAA,CAAI,UAAU,yCACb,SAAAA,MAAC,IAAA,CAAE,UAAU,mCAAoC,SAAAV,EAAE,SAAS,CAAA,CAAE,EAChE,EAKFU,EAAAA,IAAC,MAAA,CAAI,UAAU,yCACb,SAAAA,MAAC,IAAA,CAAE,UAAU,mCAAoC,SAAAV,EAAE,aAAa,CAAA,CAAE,EACpE,CAEJ"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{u as U,c as s,d as I,e as R,j as O,W,P as k,f as L}from"./index-
|
|
2
|
-
//# sourceMappingURL=page-
|
|
1
|
+
import{u as U,c as s,d as I,e as R,j as O,W,P as k,f as L}from"./index-Bsr9DJ3G.js";import{r as g}from"./vendor-DJo4KD8w.js";import{u as M,L as $}from"./routing-DCIgrT7s.js";import{u as x}from"./i18n-BbpF47i1.js";function B(){var h;const{t:A}=x(),e=(r,p)=>A(`AuthWelcome.${r}`,p),n=U(),T=s(n.activeKbId$),t=s(n.activeSession$),c=s(t==null?void 0:t.user$)??null,d=(t==null?void 0:t.kb)??null,u=!!c,a=T!=null&&t==null,f=r=>{n.signOut(r)},o=M(),[y,v]=g.useState(!1),S=I(),w=t==null?void 0:t.client,l=R(()=>L(w)),i=s(l.userData$),P=s(l.isProcessing$)??!1;g.useEffect(()=>{if(!a){if(!u){o.push("/auth/connect");return}if(i!=null&&i.termsAcceptedAt){o.push("/");return}}},[a,u,o,i]);const m=async r=>{if(!r){d&&f(d.id),o.push("/");return}try{await l.acceptTerms(),v(!0),setTimeout(()=>{o.push("/")},1e3)}catch(p){console.error("Terms acceptance error:",p),S.showError(e("errorAcceptingTerms"))}},C=a?"loading":y?"accepted":"form",b=((h=c==null?void 0:c.name)==null?void 0:h.split(" ")[0])??"";return O.jsx(W,{userName:b,termsAcceptedAt:(i==null?void 0:i.termsAcceptedAt)??null,isNewUser:!(i!=null&&i.termsAcceptedAt),status:C,isProcessing:P,onAccept:()=>m(!0),onDecline:()=>m(!1),translations:{loading:e("loading"),welcomeTitle:e("welcomeTitle"),thanksForAccepting:e("thanksForAccepting"),welcomeUser:e("welcomeUser",{firstName:b}),reviewTermsPrompt:e("reviewTermsPrompt"),termsSummaryTitle:e("termsSummaryTitle"),termsSummaryIntro:e("termsSummaryIntro"),acceptableUseTitle:e("acceptableUseTitle"),acceptableUseResponsible:e("acceptableUseResponsible"),acceptableUseRespect:e("acceptableUseRespect"),acceptableUseConduct:e("acceptableUseConduct"),prohibitedContentTitle:e("prohibitedContentTitle"),prohibitedContentIntro:e("prohibitedContentIntro"),prohibitedIllegal:e("prohibitedIllegal"),prohibitedAdult:e("prohibitedAdult"),prohibitedHate:e("prohibitedHate"),prohibitedViolence:e("prohibitedViolence"),prohibitedMisinformation:e("prohibitedMisinformation"),prohibitedPrivacy:e("prohibitedPrivacy"),prohibitedCopyright:e("prohibitedCopyright"),prohibitedMalware:e("prohibitedMalware"),prohibitedSpam:e("prohibitedSpam"),conductTitle:e("conductTitle"),conductDescription:e("conductDescription"),conductLink:e("conductLink"),conductPromotion:e("conductPromotion"),responsibilitiesTitle:e("responsibilitiesTitle"),responsibilitiesSecure:e("responsibilitiesSecure"),responsibilitiesReport:e("responsibilitiesReport"),responsibilitiesAccurate:e("responsibilitiesAccurate"),responsibilitiesComply:e("responsibilitiesComply"),violationsWarning:e("violationsWarning"),readFullTerms:e("readFullTerms"),termsOfService:e("termsOfService"),and:e("and"),privacyPolicy:e("privacyPolicy"),declineAndSignOut:e("declineAndSignOut"),acceptAndContinue:e("acceptAndContinue"),processing:e("processing"),legallyBound:e("legallyBound")},PageLayout:k,Link:$})}export{B as default};
|
|
2
|
+
//# sourceMappingURL=page-BMeXKClk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page-
|
|
1
|
+
{"version":3,"file":"page-BMeXKClk.js","sources":["../../src/app/[locale]/auth/welcome/page.tsx"],"sourcesContent":["/**\n * Welcome Page - Thin Next.js wrapper\n *\n * This page handles Next.js-specific concerns (routing, auth, API calls)\n * and delegates rendering to the pure React WelcomePage component.\n */\n\nimport React, { useState, useEffect } from 'react';\nimport { useRouter } from '@/i18n/routing';\nimport { useTranslation } from 'react-i18next';\nimport { Link } from '@/i18n/routing';\nimport { PageLayout, useToast, useSemiont, useObservable } from '@semiont/react-ui';\nimport { WelcomePage } from '@semiont/react-ui';\nimport { createWelcomeVM } from '@semiont/react-ui';\nimport { useViewModel } from '@semiont/react-ui';\n\nexport default function Welcome() {\n const { t: _t } = useTranslation();\n const t = (k: string, p?: Record<string, unknown>) => _t(`AuthWelcome.${k}`, p as any) as string;\n const semiont = useSemiont();\n const activeKbId = useObservable(semiont.activeKbId$);\n const session = useObservable(semiont.activeSession$);\n const user = useObservable(session?.user$) ?? null;\n const activeKnowledgeBase = session?.kb ?? null;\n const isAuthenticated = !!user;\n // \"Loading\" = KB is selected but session not yet constructed.\n const isLoading = activeKbId != null && session == null;\n const signOut = (id: string) => { void semiont.signOut(id); };\n const router = useRouter();\n const [termsAccepted, setTermsAccepted] = useState(false);\n const toast = useToast();\n\n const client = session?.client;\n const vm = useViewModel(() => createWelcomeVM(client!));\n\n const userData = useObservable(vm.userData$);\n const isProcessing = useObservable(vm.isProcessing$) ?? false;\n\n // Redirect if not authenticated or if terms already accepted\n useEffect(() => {\n if (isLoading) return;\n if (!isAuthenticated) {\n router.push('/auth/connect');\n return;\n }\n\n if (userData?.termsAcceptedAt) {\n router.push('/');\n return;\n }\n }, [isLoading, isAuthenticated, router, userData]);\n\n const handleTermsAcceptance = async (accepted: boolean) => {\n if (!accepted) {\n if (activeKnowledgeBase) {\n signOut(activeKnowledgeBase.id);\n }\n router.push('/');\n return;\n }\n\n try {\n await vm.acceptTerms();\n setTermsAccepted(true);\n\n setTimeout(() => {\n router.push('/');\n }, 1000);\n } catch (error) {\n console.error('Terms acceptance error:', error);\n toast.showError(t('errorAcceptingTerms'));\n }\n };\n\n const pageStatus = isLoading ? 'loading' : termsAccepted ? 'accepted' : 'form';\n const firstName = user?.name?.split(' ')[0] ?? '';\n\n return (\n <WelcomePage\n userName={firstName}\n termsAcceptedAt={userData?.termsAcceptedAt ?? null}\n isNewUser={!userData?.termsAcceptedAt}\n status={pageStatus}\n isProcessing={isProcessing}\n onAccept={() => handleTermsAcceptance(true)}\n onDecline={() => handleTermsAcceptance(false)}\n translations={{\n loading: t('loading'),\n welcomeTitle: t('welcomeTitle'),\n thanksForAccepting: t('thanksForAccepting'),\n welcomeUser: t('welcomeUser', { firstName }),\n reviewTermsPrompt: t('reviewTermsPrompt'),\n termsSummaryTitle: t('termsSummaryTitle'),\n termsSummaryIntro: t('termsSummaryIntro'),\n acceptableUseTitle: t('acceptableUseTitle'),\n acceptableUseResponsible: t('acceptableUseResponsible'),\n acceptableUseRespect: t('acceptableUseRespect'),\n acceptableUseConduct: t('acceptableUseConduct'),\n prohibitedContentTitle: t('prohibitedContentTitle'),\n prohibitedContentIntro: t('prohibitedContentIntro'),\n prohibitedIllegal: t('prohibitedIllegal'),\n prohibitedAdult: t('prohibitedAdult'),\n prohibitedHate: t('prohibitedHate'),\n prohibitedViolence: t('prohibitedViolence'),\n prohibitedMisinformation: t('prohibitedMisinformation'),\n prohibitedPrivacy: t('prohibitedPrivacy'),\n prohibitedCopyright: t('prohibitedCopyright'),\n prohibitedMalware: t('prohibitedMalware'),\n prohibitedSpam: t('prohibitedSpam'),\n conductTitle: t('conductTitle'),\n conductDescription: t('conductDescription'),\n conductLink: t('conductLink'),\n conductPromotion: t('conductPromotion'),\n responsibilitiesTitle: t('responsibilitiesTitle'),\n responsibilitiesSecure: t('responsibilitiesSecure'),\n responsibilitiesReport: t('responsibilitiesReport'),\n responsibilitiesAccurate: t('responsibilitiesAccurate'),\n responsibilitiesComply: t('responsibilitiesComply'),\n violationsWarning: t('violationsWarning'),\n readFullTerms: t('readFullTerms'),\n termsOfService: t('termsOfService'),\n and: t('and'),\n privacyPolicy: t('privacyPolicy'),\n declineAndSignOut: t('declineAndSignOut'),\n acceptAndContinue: t('acceptAndContinue'),\n processing: t('processing'),\n legallyBound: t('legallyBound'),\n }}\n PageLayout={PageLayout}\n Link={Link}\n />\n );\n}\n"],"names":["Welcome","_t","useTranslation","t","k","semiont","useSemiont","activeKbId","useObservable","session","user","activeKnowledgeBase","isAuthenticated","isLoading","signOut","id","router","useRouter","termsAccepted","setTermsAccepted","useState","toast","useToast","client","vm","useViewModel","createWelcomeVM","userData","isProcessing","useEffect","handleTermsAcceptance","accepted","error","pageStatus","firstName","_a","jsx","WelcomePage","PageLayout","Link"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{j as a,C as v,u as K,c as o,d as _,g as H,e as q,m as z,h as B,i as G,n as J,k as Q,o as W,T as X}from"./index-
|
|
2
|
-
//# sourceMappingURL=page-
|
|
1
|
+
import{j as a,C as v,u as K,c as o,d as _,g as H,e as q,m as z,h as B,i as G,n as J,k as Q,o as W,T as X}from"./index-Bsr9DJ3G.js";import{r as C,u as Y}from"./vendor-DJo4KD8w.js";import{a as Z,u as P}from"./routing-DCIgrT7s.js";import{T as ee}from"./ToolbarPanels-CPoZvoTB.js";import{u as y}from"./i18n-BbpF47i1.js";import"./XMarkIcon-KMKD47CF.js";function te(){const{t:d}=y(),e=(i,r)=>d(`Compose.${i}`,r),g=Z(),c=P(),[t]=Y(),p=K(),h=o(p.activeKbId$),n=o(p.activeSession$),R=o(n==null?void 0:n.user$),b=o(n==null?void 0:n.token$),m=!!R,l=h!=null&&n==null,{showError:k,showSuccess:T}=_(),w=n==null?void 0:n.client;C.useEffect(()=>{l||m||c.push("/")},[l,m,c]);const x=H(),u=t!=null&&t.get("annotationUri")?`gather-context:${t.get("annotationUri")}`:null,f=u&&typeof sessionStorage<"u"?sessionStorage.getItem(u)??void 0:void 0;u&&f&&typeof sessionStorage<"u"&&sessionStorage.removeItem(u);const s=q(()=>z(w,x,{mode:(t==null?void 0:t.get("mode"))??void 0,token:(t==null?void 0:t.get("token"))??void 0,annotationUri:(t==null?void 0:t.get("annotationUri"))??void 0,sourceDocumentId:(t==null?void 0:t.get("sourceDocumentId"))??void 0,name:(t==null?void 0:t.get("name"))??void 0,entityTypes:(t==null?void 0:t.get("entityTypes"))??void 0,storedContext:f},b??void 0)),S=o(s.browse.activePanel$)??null,$=o(s.mode$)??"new",D=o(s.loading$)??!0,L=o(s.cloneData$)??null,E=o(s.referenceData$)??null,F=o(s.gatheredContext$)??null,N=o(s.entityTypes$)??[],{theme:oe,setTheme:I,resolvedTheme:j}=B(),{showLineNumbers:M,toggleLineNumbers:U}=G(),{hoverDelayMs:A}=J();Q({"settings:theme-changed":({theme:i})=>I(i),"settings:line-numbers-toggled":()=>U()});const O=async i=>{try{const r=await s.save(i);i.mode==="reference"&&i.annotationUri&&T("Reference successfully linked to the new resource"),c.push(`/know/resource/${encodeURIComponent(r)}`)}catch(r){const V=r instanceof Error?r.message:"Failed to save resource. Please try again.";throw k(V),r}};return l||D?a.jsx(v,{message:l?"Checking authentication...":"Loading cloned resource..."}):m?a.jsx(W,{mode:$,cloneData:L,referenceData:E,gatheredContext:F,availableEntityTypes:N,initialLocale:g,theme:j,showLineNumbers:M,hoverDelayMs:A,activePanel:S,onSaveResource:O,onCancel:()=>c.push("/know/discover"),translations:{title:e("title"),titleEditClone:e("titleEditClone"),titleCompleteReference:e("titleCompleteReference"),subtitleClone:e("subtitleClone"),subtitleReference:e("subtitleReference"),linkedNoticePrefix:e("linkedNoticePrefix"),resourceName:e("resourceName"),resourceNamePlaceholder:e("resourceNamePlaceholder"),entityTypes:e("entityTypes"),language:e("language"),contentSource:e("contentSource"),uploadFile:e("uploadFile"),uploadFileDescription:e("uploadFileDescription"),writeContent:e("writeContent"),writeContentDescription:e("writeContentDescription"),dropFileOrClick:e("dropFileOrClick"),supportedFormats:e("supportedFormats"),mediaType:e("mediaType"),autoDetected:e("autoDetected"),format:e("format"),content:e("content"),resourceContent:e("resourceContent"),encoding:e("encoding"),archiveOriginal:e("archiveOriginal"),cancel:e("cancel"),saving:e("saving"),creating:e("creating"),creatingAndLinking:e("creatingAndLinking"),saveClonedResource:e("saveClonedResource"),createAndLinkResource:e("createAndLinkResource"),createResource:e("createResource")},ToolbarPanels:ee,Toolbar:X}):null}function le(){const{t:d}=y(),e=(g,c)=>d(`Compose.${g}`,c);return a.jsx(C.Suspense,{fallback:a.jsx(v,{message:e("loading")}),children:a.jsx(te,{})})}export{le as default};
|
|
2
|
+
//# sourceMappingURL=page-BS88Xh4W.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page-BS88Xh4W.js","sources":["../../src/app/[locale]/know/compose/page.tsx"],"sourcesContent":["\"use client\";\n\nimport React, { useEffect, Suspense } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useLocale } from '@/i18n/routing';\nimport { useRouter } from '@/i18n/routing';\nimport { useSearchParams } from 'react-router-dom';\nimport {\n useSemiont,\n useToast,\n useTheme,\n useShellVM,\n useObservable,\n useLineNumbers,\n useHoverDelay,\n useEventSubscriptions,\n useViewModel,\n Toolbar,\n ComposeLoadingState,\n ResourceComposePage,\n} from '@semiont/react-ui';\nimport type { SaveResourceParams as UISaveResourceParams } from '@semiont/react-ui';\nimport { createComposePageVM } from '@semiont/sdk';\nimport { ToolbarPanels } from '@/components/toolbar/ToolbarPanels';\n\nfunction ComposeResourceContent() {\n const { t: _t } = useTranslation();\n const t = (k: string, p?: Record<string, unknown>) => _t(`Compose.${k}`, p as any) as string;\n const locale = useLocale();\n const router = useRouter();\n const [searchParams] = useSearchParams();\n const semiont = useSemiont();\n const activeKbId = useObservable(semiont.activeKbId$);\n const session = useObservable(semiont.activeSession$);\n const user = useObservable(session?.user$);\n const authToken = useObservable(session?.token$);\n const isAuthenticated = !!user;\n // \"Loading\" = a KB is selected but the session hasn't finished constructing\n // yet, so we don't know if auth succeeded.\n const authLoading = activeKbId != null && session == null;\n const { showError, showSuccess } = useToast();\n const client = session?.client;\n\n useEffect(() => {\n if (authLoading) return;\n if (!isAuthenticated) router.push('/');\n }, [authLoading, isAuthenticated, router]);\n\n const browseVM = useShellVM();\n\n const contextKey = searchParams?.get('annotationUri')\n ? `gather-context:${searchParams.get('annotationUri')}`\n : null;\n const storedContext = contextKey && typeof sessionStorage !== 'undefined'\n ? sessionStorage.getItem(contextKey) ?? undefined\n : undefined;\n if (contextKey && storedContext && typeof sessionStorage !== 'undefined') {\n sessionStorage.removeItem(contextKey);\n }\n\n const vm = useViewModel(() => createComposePageVM(client!, browseVM, {\n mode: searchParams?.get('mode') ?? undefined,\n token: searchParams?.get('token') ?? undefined,\n annotationUri: searchParams?.get('annotationUri') ?? undefined,\n sourceDocumentId: searchParams?.get('sourceDocumentId') ?? undefined,\n name: searchParams?.get('name') ?? undefined,\n entityTypes: searchParams?.get('entityTypes') ?? undefined,\n storedContext,\n }, authToken ?? undefined));\n\n const activePanel = useObservable(vm.browse.activePanel$) ?? null;\n const pageMode = useObservable(vm.mode$) ?? 'new';\n const isLoading = useObservable(vm.loading$) ?? true;\n const cloneData = useObservable(vm.cloneData$) ?? null;\n const referenceData = useObservable(vm.referenceData$) ?? null;\n const gatheredContext = useObservable(vm.gatheredContext$) ?? null;\n const availableEntityTypes = useObservable(vm.entityTypes$) ?? [];\n\n const { theme, setTheme, resolvedTheme } = useTheme();\n const { showLineNumbers, toggleLineNumbers } = useLineNumbers();\n const { hoverDelayMs } = useHoverDelay();\n\n useEventSubscriptions({\n 'settings:theme-changed': ({ theme }: { theme: 'light' | 'dark' | 'system' }) => setTheme(theme),\n 'settings:line-numbers-toggled': () => toggleLineNumbers(),\n });\n\n const handleSaveResource = async (params: UISaveResourceParams) => {\n try {\n const newResourceId = await vm.save(params);\n if (params.mode === 'reference' && params.annotationUri) {\n showSuccess('Reference successfully linked to the new resource');\n }\n router.push(`/know/resource/${encodeURIComponent(newResourceId)}`);\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Failed to save resource. Please try again.';\n showError(errorMessage);\n throw error;\n }\n };\n\n if (authLoading || isLoading) {\n return <ComposeLoadingState message={authLoading ? 'Checking authentication...' : 'Loading cloned resource...'} />;\n }\n\n if (!isAuthenticated) return null;\n\n return (\n <ResourceComposePage\n mode={pageMode}\n cloneData={cloneData}\n referenceData={referenceData}\n gatheredContext={gatheredContext}\n availableEntityTypes={availableEntityTypes}\n initialLocale={locale}\n theme={resolvedTheme}\n showLineNumbers={showLineNumbers}\n hoverDelayMs={hoverDelayMs}\n activePanel={activePanel}\n onSaveResource={handleSaveResource}\n onCancel={() => router.push('/know/discover')}\n translations={{\n title: t('title'),\n titleEditClone: t('titleEditClone'),\n titleCompleteReference: t('titleCompleteReference'),\n subtitleClone: t('subtitleClone'),\n subtitleReference: t('subtitleReference'),\n linkedNoticePrefix: t('linkedNoticePrefix'),\n resourceName: t('resourceName'),\n resourceNamePlaceholder: t('resourceNamePlaceholder'),\n entityTypes: t('entityTypes'),\n language: t('language'),\n contentSource: t('contentSource'),\n uploadFile: t('uploadFile'),\n uploadFileDescription: t('uploadFileDescription'),\n writeContent: t('writeContent'),\n writeContentDescription: t('writeContentDescription'),\n dropFileOrClick: t('dropFileOrClick'),\n supportedFormats: t('supportedFormats'),\n mediaType: t('mediaType'),\n autoDetected: t('autoDetected'),\n format: t('format'),\n content: t('content'),\n resourceContent: t('resourceContent'),\n encoding: t('encoding'),\n archiveOriginal: t('archiveOriginal'),\n cancel: t('cancel'),\n saving: t('saving'),\n creating: t('creating'),\n creatingAndLinking: t('creatingAndLinking'),\n saveClonedResource: t('saveClonedResource'),\n createAndLinkResource: t('createAndLinkResource'),\n createResource: t('createResource'),\n }}\n ToolbarPanels={ToolbarPanels}\n Toolbar={Toolbar}\n />\n );\n}\n\nexport default function ComposeResourcePage() {\n const { t: _t } = useTranslation();\n const t = (k: string, p?: Record<string, unknown>) => _t(`Compose.${k}`, p as any) as string;\n\n return (\n <Suspense fallback={<ComposeLoadingState message={t('loading')} />}>\n <ComposeResourceContent />\n </Suspense>\n );\n}\n"],"names":["ComposeResourceContent","_t","useTranslation","t","k","p","locale","useLocale","router","useRouter","searchParams","useSearchParams","semiont","useSemiont","activeKbId","useObservable","session","user","authToken","isAuthenticated","authLoading","showError","showSuccess","useToast","client","useEffect","browseVM","useShellVM","contextKey","storedContext","vm","useViewModel","createComposePageVM","activePanel","pageMode","isLoading","cloneData","referenceData","gatheredContext","availableEntityTypes","theme","setTheme","resolvedTheme","useTheme","showLineNumbers","toggleLineNumbers","useLineNumbers","hoverDelayMs","useHoverDelay","useEventSubscriptions","handleSaveResource","params","newResourceId","error","errorMessage","jsx","ComposeLoadingState","ResourceComposePage","ToolbarPanels","Toolbar","ComposeResourcePage","Suspense"],"mappings":"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"}
|