@semiont/cli 0.4.20 → 0.4.21
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 +235 -181
- package/dist/frontend/dist/assets/{CookiePreferences-BBb5XMuG.js → CookiePreferences-CWvTznuy.js} +2 -2
- package/dist/frontend/dist/assets/{CookiePreferences-BBb5XMuG.js.map → CookiePreferences-CWvTznuy.js.map} +1 -1
- package/dist/frontend/dist/assets/PdfAnnotationCanvas.client-6ZGFEN2N-Dnq2pEeZ.js +2 -0
- package/dist/frontend/dist/assets/PdfAnnotationCanvas.client-6ZGFEN2N-Dnq2pEeZ.js.map +1 -0
- package/dist/frontend/dist/assets/ToolbarPanels-DQrfch_k.js +2 -0
- package/dist/frontend/dist/assets/ToolbarPanels-DQrfch_k.js.map +1 -0
- package/dist/frontend/dist/assets/client-9KMfqezG.js +2 -0
- package/dist/frontend/dist/assets/client-9KMfqezG.js.map +1 -0
- package/dist/frontend/dist/assets/client-Bvrf4lLa.js +2 -0
- package/dist/frontend/dist/assets/client-Bvrf4lLa.js.map +1 -0
- package/dist/frontend/dist/assets/client-D9qa8fAn.js +2 -0
- package/dist/frontend/dist/assets/client-D9qa8fAn.js.map +1 -0
- package/dist/frontend/dist/assets/client-kIBNRH2w.js +2 -0
- package/dist/frontend/dist/assets/client-kIBNRH2w.js.map +1 -0
- package/dist/frontend/dist/assets/index-DaA8-3Y1.js +169 -0
- package/dist/frontend/dist/assets/index-DaA8-3Y1.js.map +1 -0
- package/dist/frontend/dist/assets/{index-DNL392dn.css → index-fHqJXd_A.css} +1 -1
- package/dist/frontend/dist/assets/layout-BLGpzYwk.js +2 -0
- package/dist/frontend/dist/assets/layout-BLGpzYwk.js.map +1 -0
- package/dist/frontend/dist/assets/layout-BgHlzaj1.js +2 -0
- package/dist/frontend/dist/assets/layout-BgHlzaj1.js.map +1 -0
- package/dist/frontend/dist/assets/layout-Dj1MEjN6.js +2 -0
- package/dist/frontend/dist/assets/layout-Dj1MEjN6.js.map +1 -0
- package/dist/frontend/dist/assets/layout-easR0slx.js +2 -0
- package/dist/frontend/dist/assets/layout-easR0slx.js.map +1 -0
- package/dist/frontend/dist/assets/not-found-nC4IaXPt.js +2 -0
- package/dist/frontend/dist/assets/{not-found-BKG2_Fv3.js.map → not-found-nC4IaXPt.js.map} +1 -1
- package/dist/frontend/dist/assets/page-8zC_t3l-.js +2 -0
- package/dist/frontend/dist/assets/page-8zC_t3l-.js.map +1 -0
- package/dist/frontend/dist/assets/page-BD9EKRMV.js +2 -0
- package/dist/frontend/dist/assets/{page-DbwQv5n_.js.map → page-BD9EKRMV.js.map} +1 -1
- package/dist/frontend/dist/assets/page-BDMxGD5Z.js +8 -0
- package/dist/frontend/dist/assets/{page-aKPxuWo3.js.map → page-BDMxGD5Z.js.map} +1 -1
- package/dist/frontend/dist/assets/page-BwiRQxa7.js +2 -0
- package/dist/frontend/dist/assets/page-BwiRQxa7.js.map +1 -0
- package/dist/frontend/dist/assets/page-By8BIN8Q.js +2 -0
- package/dist/frontend/dist/assets/{page-IgGNB4a9.js.map → page-By8BIN8Q.js.map} +1 -1
- package/dist/frontend/dist/assets/{page-BRTi-f95.js → page-C8zOqZ8M.js} +3 -3
- package/dist/frontend/dist/assets/{page-BRTi-f95.js.map → page-C8zOqZ8M.js.map} +1 -1
- package/dist/frontend/dist/assets/page-CQsfujTh.js +2 -0
- package/dist/frontend/dist/assets/page-CQsfujTh.js.map +1 -0
- package/dist/frontend/dist/assets/page-CTvUxWH5.js +2 -0
- package/dist/frontend/dist/assets/{page-BSB8GP79.js.map → page-CTvUxWH5.js.map} +1 -1
- package/dist/frontend/dist/assets/page-ChjwiTJ8.js +2 -0
- package/dist/frontend/dist/assets/page-ChjwiTJ8.js.map +1 -0
- package/dist/frontend/dist/assets/page-D8JSCVFI.js +2 -0
- package/dist/frontend/dist/assets/{page-CDSGl6uY.js.map → page-D8JSCVFI.js.map} +1 -1
- package/dist/frontend/dist/assets/page-DB1HZ_Jr.js +2 -0
- package/dist/frontend/dist/assets/{page-D1q6VB02.js.map → page-DB1HZ_Jr.js.map} +1 -1
- package/dist/frontend/dist/assets/page-DBoIW_-n.js +2 -0
- package/dist/frontend/dist/assets/{page-DzoXV-AN.js.map → page-DBoIW_-n.js.map} +1 -1
- package/dist/frontend/dist/assets/page-DEHEdU59.js +2 -0
- package/dist/frontend/dist/assets/{page-BNJp__R7.js.map → page-DEHEdU59.js.map} +1 -1
- package/dist/frontend/dist/assets/page-DWS9ulKD.js +5 -0
- package/dist/frontend/dist/assets/{page-D3THDsqd.js.map → page-DWS9ulKD.js.map} +1 -1
- package/dist/frontend/dist/assets/page-DoqFVg4p.js +2 -0
- package/dist/frontend/dist/assets/page-DoqFVg4p.js.map +1 -0
- package/dist/frontend/dist/assets/page-btIB2WK4.js +2 -0
- package/dist/frontend/dist/assets/page-btIB2WK4.js.map +1 -0
- package/dist/frontend/dist/assets/page-jr_Rqa0A.js +2 -0
- package/dist/frontend/dist/assets/page-jr_Rqa0A.js.map +1 -0
- package/dist/frontend/dist/assets/page-kLVTeA46.js +2 -0
- package/dist/frontend/dist/assets/{page-CJLuuiG8.js.map → page-kLVTeA46.js.map} +1 -1
- package/dist/frontend/dist/assets/privacy-mpF0jllH.js +2 -0
- package/dist/frontend/dist/assets/{privacy-BAxopuZI.js.map → privacy-mpF0jllH.js.map} +1 -1
- package/dist/frontend/dist/assets/{routing-rYtBowvy.js → routing-BmJG4tNe.js} +2 -2
- package/dist/frontend/dist/assets/{routing-rYtBowvy.js.map → routing-BmJG4tNe.js.map} +1 -1
- package/dist/frontend/dist/assets/routing-JYkXODZK.js +2 -0
- package/dist/frontend/dist/assets/{routing-Cm_oCwum.js.map → routing-JYkXODZK.js.map} +1 -1
- package/dist/frontend/dist/index.html +2 -3
- package/dist/frontend/dist/messages/ar.json +0 -1
- package/dist/frontend/dist/messages/bn.json +0 -1
- package/dist/frontend/dist/messages/cs.json +0 -1
- package/dist/frontend/dist/messages/da.json +0 -1
- package/dist/frontend/dist/messages/de.json +0 -1
- package/dist/frontend/dist/messages/el.json +0 -1
- package/dist/frontend/dist/messages/en.json +0 -1
- package/dist/frontend/dist/messages/es.json +0 -1
- package/dist/frontend/dist/messages/fa.json +0 -1
- package/dist/frontend/dist/messages/fi.json +0 -1
- package/dist/frontend/dist/messages/fr.json +0 -1
- package/dist/frontend/dist/messages/he.json +0 -1
- package/dist/frontend/dist/messages/hi.json +0 -1
- package/dist/frontend/dist/messages/id.json +0 -1
- package/dist/frontend/dist/messages/it.json +0 -1
- package/dist/frontend/dist/messages/ja.json +0 -1
- package/dist/frontend/dist/messages/ko.json +0 -1
- package/dist/frontend/dist/messages/ms.json +0 -1
- package/dist/frontend/dist/messages/nl.json +0 -1
- package/dist/frontend/dist/messages/no.json +0 -1
- package/dist/frontend/dist/messages/pl.json +0 -1
- package/dist/frontend/dist/messages/pt.json +0 -1
- package/dist/frontend/dist/messages/ro.json +0 -1
- package/dist/frontend/dist/messages/sv.json +0 -1
- package/dist/frontend/dist/messages/th.json +0 -1
- package/dist/frontend/dist/messages/tr.json +0 -1
- package/dist/frontend/dist/messages/uk.json +0 -1
- package/dist/frontend/dist/messages/vi.json +0 -1
- package/dist/frontend/dist/messages/zh.json +0 -1
- package/dist/frontend/package.json +1 -1
- package/package.json +7 -7
- package/dist/frontend/dist/assets/PdfAnnotationCanvas.client-CHDCGQBR-mCGxablw.js +0 -2
- package/dist/frontend/dist/assets/PdfAnnotationCanvas.client-CHDCGQBR-mCGxablw.js.map +0 -1
- package/dist/frontend/dist/assets/StreamStatusContext-BNiTXRfJ.js +0 -2
- package/dist/frontend/dist/assets/StreamStatusContext-BNiTXRfJ.js.map +0 -1
- package/dist/frontend/dist/assets/ToolbarPanels-CfaOVIc9.js +0 -2
- package/dist/frontend/dist/assets/ToolbarPanels-CfaOVIc9.js.map +0 -1
- package/dist/frontend/dist/assets/client-CWwdB0xQ.js +0 -2
- package/dist/frontend/dist/assets/client-CWwdB0xQ.js.map +0 -1
- package/dist/frontend/dist/assets/client-Cgz-uiSd.js +0 -2
- package/dist/frontend/dist/assets/client-Cgz-uiSd.js.map +0 -1
- package/dist/frontend/dist/assets/client-D3W9xTBT.js +0 -2
- package/dist/frontend/dist/assets/client-D3W9xTBT.js.map +0 -1
- package/dist/frontend/dist/assets/client-DeL0szs5.js +0 -2
- package/dist/frontend/dist/assets/client-DeL0szs5.js.map +0 -1
- package/dist/frontend/dist/assets/index-C5oI0kaf.js +0 -161
- package/dist/frontend/dist/assets/index-C5oI0kaf.js.map +0 -1
- package/dist/frontend/dist/assets/layout-B_JLc3yI.js +0 -2
- package/dist/frontend/dist/assets/layout-B_JLc3yI.js.map +0 -1
- package/dist/frontend/dist/assets/layout-DJI7aibW.js +0 -2
- package/dist/frontend/dist/assets/layout-DJI7aibW.js.map +0 -1
- package/dist/frontend/dist/assets/layout-DXY8hCsB.js +0 -2
- package/dist/frontend/dist/assets/layout-DXY8hCsB.js.map +0 -1
- package/dist/frontend/dist/assets/layout-VBQ97DvJ.js +0 -2
- package/dist/frontend/dist/assets/layout-VBQ97DvJ.js.map +0 -1
- package/dist/frontend/dist/assets/not-found-BKG2_Fv3.js +0 -2
- package/dist/frontend/dist/assets/page-8OrS1-4-.js +0 -2
- package/dist/frontend/dist/assets/page-8OrS1-4-.js.map +0 -1
- package/dist/frontend/dist/assets/page-B4Qu9WPd.js +0 -2
- package/dist/frontend/dist/assets/page-B4Qu9WPd.js.map +0 -1
- package/dist/frontend/dist/assets/page-BNJp__R7.js +0 -2
- package/dist/frontend/dist/assets/page-BSB8GP79.js +0 -2
- package/dist/frontend/dist/assets/page-Bx8QAzic.js +0 -2
- package/dist/frontend/dist/assets/page-Bx8QAzic.js.map +0 -1
- package/dist/frontend/dist/assets/page-CDSGl6uY.js +0 -2
- package/dist/frontend/dist/assets/page-CJLuuiG8.js +0 -2
- package/dist/frontend/dist/assets/page-CyFJt2nP.js +0 -2
- package/dist/frontend/dist/assets/page-CyFJt2nP.js.map +0 -1
- package/dist/frontend/dist/assets/page-D1q6VB02.js +0 -2
- package/dist/frontend/dist/assets/page-D3THDsqd.js +0 -5
- package/dist/frontend/dist/assets/page-DCxg1lHk.js +0 -2
- package/dist/frontend/dist/assets/page-DCxg1lHk.js.map +0 -1
- package/dist/frontend/dist/assets/page-DbwQv5n_.js +0 -2
- package/dist/frontend/dist/assets/page-DddZ9Yxm.js +0 -2
- package/dist/frontend/dist/assets/page-DddZ9Yxm.js.map +0 -1
- package/dist/frontend/dist/assets/page-DzoXV-AN.js +0 -2
- package/dist/frontend/dist/assets/page-IgGNB4a9.js +0 -2
- package/dist/frontend/dist/assets/page-aKPxuWo3.js +0 -8
- package/dist/frontend/dist/assets/page-jxC42AIR.js +0 -2
- package/dist/frontend/dist/assets/page-jxC42AIR.js.map +0 -1
- package/dist/frontend/dist/assets/privacy-BAxopuZI.js +0 -2
- package/dist/frontend/dist/assets/query-B6BuIB0M.js +0 -10
- package/dist/frontend/dist/assets/query-B6BuIB0M.js.map +0 -1
- package/dist/frontend/dist/assets/routing-Cm_oCwum.js +0 -2
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{k as v,j as o,U as w,N as L,u as S,c as x,M as j,Q as k}from"./index-DaA8-3Y1.js";import{r as c,O as $}from"./vendor-DJo4KD8w.js";import{b as F,L as y,u as A}from"./routing-JYkXODZK.js";import{u as p}from"./i18n-BbpF47i1.js";import{F as R,C as N}from"./CookiePreferences-CWvTznuy.js";import{F as K}from"./ArrowsRightLeftIcon-BzLgl5o9.js";import{F as C}from"./CommandLineIcon-Ba4gpk8e.js";import{F as E,a as H}from"./ChevronLeftIcon-BLyRNZuL.js";import{K as M}from"./privacy-mpF0jllH.js";import{r as h,L as b}from"./routing-BmJG4tNe.js";import"./XMarkIcon-KMKD47CF.js";function O({title:n,titleId:t,...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":t},s),n?c.createElement("title",{id:t},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 D=c.forwardRef(O);function B({href:n,to:t,...s}){return o.jsx(y,{to:n??"",...s})}function P({isCollapsed:n,toggleCollapsed:t,navigationMenu:s}){const{t:a}=p(),e=(r,i)=>a(`Administration.${r}`,i),{t:d}=p(),l=(r,i)=>d(`Sidebar.${r}`,i),m=F(),u=c.useCallback(()=>{t()},[t]);v({"shell:sidebar-toggle":u});const f=[{name:e("users"),href:"/admin/users",icon:D,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:C,description:e("devopsDescription")}];return o.jsx(w,{title:e("title"),items:f,currentPath:m,LinkComponent:B,...s&&{dropdownContent:s},isCollapsed:n,icons:{chevronLeft:H,bars:E},collapseSidebarLabel:l("collapseSidebar"),expandSidebarLabel:l("expandSidebar")})}function _(){const{t:n}=p(),t=c.useContext(M),s=S(),a=x(s.activeSession$),e=x(a==null?void 0:a.user$),d=(a==null?void 0:a.kb)??null,l=A();if(!d)return l.push("/know"),null;const m=!!e,u=(e==null?void 0:e.isAdmin)??!1,f=(e==null?void 0:e.isModerator)??!1;return o.jsxs("div",{className:"min-h-screen bg-gray-50 dark:bg-gray-900 flex flex-col",children:[o.jsxs("div",{className:"flex flex-1",children:[o.jsx(j,{Link:b,routes:h,t:r=>n(`Navigation.${r}`),tHome:r=>n(`Home.${r}`),brandingLink:"/",collapsible:!0,storageKey:"admin-sidebar-collapsed",isAuthenticated:m,isAdmin:u,isModerator:f,children:(r,i,g)=>o.jsx(P,{isCollapsed:r,toggleCollapsed:i,navigationMenu:g})}),o.jsx("main",{className:"flex-1 p-6 flex flex-col",children:o.jsx("div",{className:"max-w-7xl mx-auto flex-1 flex flex-col w-full",children:o.jsx($,{})})})]}),o.jsx(k,{Link:b,routes:h,t:(r,i)=>n(`Footer.${r}`,i),CookiePreferences:N,...(t==null?void 0:t.openKeyboardHelp)&&{onOpenKeyboardHelp:t.openKeyboardHelp}})]})}function X(){return o.jsx(L,{children:o.jsx(_,{})})}export{X as default};
|
|
2
|
+
//# sourceMappingURL=layout-BLGpzYwk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layout-BLGpzYwk.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';\nimport { AuthShell } from '@/contexts/AuthShell';\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 return (\n <AuthShell>\n <AdminLayoutBody />\n </AuthShell>\n );\n}\n"],"names":["UsersIcon","title","titleId","props","svgRef","React.createElement","ForwardRef","React.forwardRef","HrefLink","href","_to","Link","AdminNavigation","isCollapsed","toggleCollapsed","navigationMenu","_t","useTranslation","t","k","p","_tSidebar","tSidebar","pathname","usePathname","handleSidebarToggle","useCallback","useEventSubscriptions","navigation","ShieldCheckIcon","ArrowsRightLeftIcon","CommandLineIcon","jsx","SimpleNavigation","ChevronLeftIcon","Bars3Icon","AdminLayoutBody","keyboardContext","useContext","KeyboardShortcutsContext","semiont","useSemiont","session","useObservable","user","activeKnowledgeBase","router","useRouter","isAuthenticated","isAdmin","isModerator","jsxs","LeftSidebar","routes","key","Outlet","Footer","params","CookiePreferences","AdminLayout","AuthShell"],"mappings":"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","x_google_ignoreList":[0]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{k as S,j as e,ae as E,af as R,ag as T,ah as L,ai as A,aj as D}from"./index-DaA8-3Y1.js";import{a as z,C as M,b as N,i as W,c as B,s as h}from"./privacy-mpF0jllH.js";import{r as n,O as G}from"./vendor-DJo4KD8w.js";import{u as I}from"./routing-JYkXODZK.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-BgHlzaj1.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layout-BgHlzaj1.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 `SemiontApiClient` 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 _,Q as j,g as T,h as F,i as I,T as B}from"./index-DaA8-3Y1.js";import{r as x,O as E}from"./vendor-DJo4KD8w.js";import{b as O,u as P,L as z}from"./routing-JYkXODZK.js";import{u as f}from"./i18n-BbpF47i1.js";import{F as M,T as C}from"./ToolbarPanels-DQrfch_k.js";import{F as W}from"./XMarkIcon-KMKD47CF.js";import{F as D,a as U}from"./ChevronLeftIcon-BLyRNZuL.js";import{r as w,L as b}from"./routing-BmJG4tNe.js";import{C as y}from"./CookiePreferences-CWvTznuy.js";import{K as V}from"./privacy-mpF0jllH.js";const G=({className:r})=>e.jsx("span",{className:r,style:{fontSize:"1.25rem",lineHeight:"1"},children:"🔭"});function Q({href:r,to:s,...t}){return e.jsx(z,{to:r??"",...t})}function q({isCollapsed:r,toggleCollapsed:s,navigationMenu:t}){const{t:d}=f(),o=(m,g)=>d(`Sidebar.${m}`,g),n=O(),l=P(),i=p(),h=u(i.openResources$)??[],a=i.removeOpenResource.bind(i),c=i.reorderOpenResources.bind(i),v=[{name:o("discover"),href:"/know/discover",icon:G,description:o("searchAndBrowse")},{name:o("compose"),href:"/know/compose",icon:M,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 S=m=>{l.push(m)},R=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:Q,onNavigate:S,getResourceHref:R,className:"knowledge-navigation",translations:{title:o("title")},icons:{chevronLeft:U,bars:D,close:W},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 X(){return null}function Y(){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 Z({t:r,keyboardContext:s}){const t=T(),d=u(t.activePanel$)??null,{theme:o}=F(),{showLineNumbers:n}=I();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(Y,{})})}),e.jsx(C,{activePanel:d,showLineNumbers:n,theme:o,hoverDelayMs:150}),e.jsx(B,{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 ee(){const{t:r}=f(),s=x.useContext(V),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(Z,{t:(a,c)=>r(a,c),keyboardContext:s}):e.jsxs(_,{children:[e.jsx(X,{}),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(E,{})})})]}),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 me(){return e.jsx(H,{children:e.jsx(ee,{})})}export{me as default};
|
|
2
|
+
//# sourceMappingURL=layout-Dj1MEjN6.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layout-Dj1MEjN6.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/api-client';\n\n// Custom telescope icon component\nconst TelescopeIcon = ({ className }: { className?: string }) => (\n <span className={className} style={{ fontSize: '1.25rem', lineHeight: '1' }}>🔭</span>\n);\n\ninterface KnowledgeNavigationProps {\n isCollapsed: boolean;\n toggleCollapsed: () => void;\n navigationMenu?: (onClose: () => void) => React.ReactNode;\n}\n\n// Adapter: CollapsibleResourceNavigation passes href, but our Link uses `to`\nfunction HrefLink({ href, to: _to, ...props }: React.ComponentProps<typeof Link> & { href?: string }) {\n return <Link to={(href ?? '') as string} {...props} />;\n}\n\nexport function KnowledgeNavigation({ isCollapsed, toggleCollapsed, navigationMenu }: KnowledgeNavigationProps) {\n const { t: _t } = useTranslation();\n const t = (k: string, p?: Record<string, unknown>) => _t(`Sidebar.${k}`, p as any) as string;\n const pathname = usePathname();\n const router = useRouter();\n const 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';\nimport { AuthShell } from '@/contexts/AuthShell';\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 return (\n <AuthShell>\n <KnowledgeLayoutBody />\n </AuthShell>\n );\n}\n"],"names":["TelescopeIcon","className","jsx","HrefLink","href","_to","props","Link","KnowledgeNavigation","isCollapsed","toggleCollapsed","navigationMenu","_t","useTranslation","t","k","p","pathname","usePathname","router","useRouter","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","AuthShell"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{k,j as s,U as w,N as v,u as L,c as h,M as j,Q as S}from"./index-DaA8-3Y1.js";import{r,O as y}from"./vendor-DJo4KD8w.js";import{b as E,L as R,u as $}from"./routing-JYkXODZK.js";import{u as p}from"./i18n-BbpF47i1.js";import{F}from"./ArrowsRightLeftIcon-BzLgl5o9.js";import{F as M,a as A}from"./ChevronLeftIcon-BLyRNZuL.js";import{C}from"./CookiePreferences-CWvTznuy.js";import{K as H}from"./privacy-mpF0jllH.js";import{r as x,L as b}from"./routing-BmJG4tNe.js";import"./XMarkIcon-KMKD47CF.js";function N({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 O=r.forwardRef(N);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 B=r.forwardRef(K);function D({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 T=r.forwardRef(D);function P({href:o,to:e,...a}){return s.jsx(R,{to:o??"",...a})}function W({isCollapsed:o,toggleCollapsed:e,navigationMenu:a}){const{t:n}=p(),t=(i,c)=>n(`Moderation.${i}`,c),{t:d}=p(),l=(i,c)=>d(`Sidebar.${i}`,c),m=E(),u=r.useCallback(()=>{e()},[e]);k({"shell:sidebar-toggle":u});const f=[{name:t("recentResources"),href:"/moderate/recent",icon:B,description:t("recentResourcesDescription")},{name:t("entityTags"),href:"/moderate/entity-tags",icon:T,description:t("entityTagsDescription")},{name:t("tagSchemas"),href:"/moderate/tag-schemas",icon:O,description:t("tagSchemasDescription")},{name:t("linkedData"),href:"/moderate/linked-data",icon:F,description:t("linkedDataDescription")}];return s.jsx(w,{title:t("title"),items:f,currentPath:m,LinkComponent:P,...a&&{dropdownContent:a},isCollapsed:o,icons:{chevronLeft:A,bars:M},collapseSidebarLabel:l("collapseSidebar"),expandSidebarLabel:l("expandSidebar")})}function Z(){const{t:o}=p(),e=r.useContext(H),a=L(),n=h(a.activeSession$),t=h(n==null?void 0:n.user$),d=(n==null?void 0:n.kb)??null,l=$();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 s.jsxs("div",{className:"min-h-screen bg-gray-50 dark:bg-gray-900 flex flex-col",children:[s.jsxs("div",{className:"flex flex-1",children:[s.jsx(j,{Link:b,routes:x,t:i=>o(`Navigation.${i}`),tHome:i=>o(`Home.${i}`),brandingLink:"/",collapsible:!0,storageKey:"moderation-sidebar-collapsed",isAuthenticated:m,isAdmin:u,isModerator:f,children:(i,c,g)=>s.jsx(W,{isCollapsed:i,toggleCollapsed:c,navigationMenu:g})}),s.jsx("main",{className:"flex-1 p-6 flex flex-col",children:s.jsx("div",{className:"max-w-7xl mx-auto flex-1 flex flex-col w-full",children:s.jsx(y,{})})})]}),s.jsx(S,{Link:b,routes:x,t:(i,c)=>o(`Footer.${i}`,c),CookiePreferences:C,...(e==null?void 0:e.openKeyboardHelp)&&{onOpenKeyboardHelp:e.openKeyboardHelp}})]})}function Y(){return s.jsx(v,{children:s.jsx(Z,{})})}export{Y as default};
|
|
2
|
+
//# sourceMappingURL=layout-easR0slx.js.map
|
|
@@ -0,0 +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":"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","x_google_ignoreList":[0,1,2]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{j as e}from"./index-DaA8-3Y1.js";import{a as n,L as l}from"./routing-JYkXODZK.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-nC4IaXPt.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"not-found-
|
|
1
|
+
{"version":3,"file":"not-found-nC4IaXPt.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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{g,c as o,h as b,i as f,k as w,j as c,V as C,T as y,u as k,X as D}from"./index-DaA8-3Y1.js";import{r as s}from"./vendor-DJo4KD8w.js";import{T as M}from"./ToolbarPanels-DQrfch_k.js";import{u as T}from"./i18n-BbpF47i1.js";import{F as L}from"./CommandLineIcon-Ba4gpk8e.js";import"./routing-JYkXODZK.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-8zC_t3l-.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page-8zC_t3l-.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]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{j as s,P as f,A as g}from"./index-DaA8-3Y1.js";import{u as l,r as y}from"./vendor-DJo4KD8w.js";import{C as d}from"./CookiePreferences-CWvTznuy.js";import{K as A}from"./privacy-mpF0jllH.js";import{r as h,L as x}from"./routing-BmJG4tNe.js";import{L}from"./routing-JYkXODZK.js";import{u as b}from"./i18n-BbpF47i1.js";import"./XMarkIcon-KMKD47CF.js";function T(){const{t}=b(),e=(r,o)=>t(`AuthError.${r}`,o),n=(r,o)=>t(`Footer.${r}`,o),i=(r,o)=>t(`Navigation.${r}`,o),c=(r,o)=>t(`Home.${r}`,o),[m]=l(),a=y.useContext(A),p=m.get("error")??null,u={pageTitle:e("pageTitle"),tryAgain:e("tryAgain"),errorConfiguration:e("errorConfiguration"),errorAccessDenied:e("errorAccessDenied"),errorVerification:e("errorVerification"),errorGeneric:e("errorGeneric")};return s.jsx(f,{Link:x,routes:h,t:n,tNav:i,tHome:c,CookiePreferences:d,...(a==null?void 0:a.openKeyboardHelp)&&{onOpenKeyboardHelp:a.openKeyboardHelp},className:"bg-gray-50 dark:bg-gray-900",children:s.jsx(g,{errorType:p,Link:L,translations:u})})}export{T as default};
|
|
2
|
+
//# sourceMappingURL=page-BD9EKRMV.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page-
|
|
1
|
+
{"version":3,"file":"page-BD9EKRMV.js","sources":["../../src/app/[locale]/auth/error/page.tsx"],"sourcesContent":["import { useContext } from 'react';\nimport { useSearchParams } from 'react-router-dom';\nimport { useTranslation } from 'react-i18next';\nimport { PageLayout, AuthErrorDisplay } from '@semiont/react-ui';\nimport { CookiePreferences } from '@/components/CookiePreferences';\nimport { KeyboardShortcutsContext } from '@/contexts/KeyboardShortcutsContext';\nimport { Link as RoutingLink, routes } from '@/lib/routing';\nimport { Link } from '@/i18n/routing';\n\nexport default function AuthError() {\n const { t: _t } = useTranslation();\n const t = (k: string, p?: Record<string, unknown>) => _t(`AuthError.${k}`, p as any) as string;\n const tFooter = (k: string, p?: Record<string, unknown>) => _t(`Footer.${k}`, p as any) as string;\n const tNav = (k: string, p?: Record<string, unknown>) => _t(`Navigation.${k}`, p as any) as string;\n const tHome = (k: string, p?: Record<string, unknown>) => _t(`Home.${k}`, p as any) as string;\n const [searchParams] = useSearchParams();\n const keyboardContext = useContext(KeyboardShortcutsContext);\n\n const errorType = searchParams.get('error') ?? null;\n\n const translations = {\n pageTitle: t('pageTitle'),\n tryAgain: t('tryAgain'),\n errorConfiguration: t('errorConfiguration'),\n errorAccessDenied: t('errorAccessDenied'),\n errorVerification: t('errorVerification'),\n errorGeneric: t('errorGeneric'),\n };\n\n return (\n <PageLayout\n Link={RoutingLink}\n routes={routes}\n t={tFooter}\n tNav={tNav}\n tHome={tHome}\n CookiePreferences={CookiePreferences}\n {...(keyboardContext?.openKeyboardHelp && { onOpenKeyboardHelp: keyboardContext.openKeyboardHelp })}\n className=\"bg-gray-50 dark:bg-gray-900\"\n >\n <AuthErrorDisplay errorType={errorType} Link={Link} translations={translations} />\n </PageLayout>\n );\n}\n"],"names":["AuthError","_t","useTranslation","t","k","p","tFooter","tNav","tHome","searchParams","useSearchParams","keyboardContext","useContext","KeyboardShortcutsContext","errorType","translations","jsx","PageLayout","RoutingLink","routes","CookiePreferences","AuthErrorDisplay","Link"],"mappings":"iWASA,SAAwBA,GAAY,CAClC,KAAM,CAAEC,CAAG,EAAOC,EAAA,EACZC,EAAI,CAACC,EAAWC,IAAgCJ,EAAG,aAAaG,CAAC,GAAIC,CAAQ,EAC7EC,EAAU,CAACF,EAAWC,IAAgCJ,EAAG,UAAUG,CAAC,GAAIC,CAAQ,EAChFE,EAAO,CAACH,EAAWC,IAAgCJ,EAAG,cAAcG,CAAC,GAAIC,CAAQ,EACjFG,EAAQ,CAACJ,EAAWC,IAAgCJ,EAAG,QAAQG,CAAC,GAAIC,CAAQ,EAC5E,CAACI,CAAY,EAAIC,EAAA,EACjBC,EAAkBC,EAAAA,WAAWC,CAAwB,EAErDC,EAAYL,EAAa,IAAI,OAAO,GAAK,KAEzCM,EAAe,CACnB,UAAWZ,EAAE,WAAW,EACxB,SAAUA,EAAE,UAAU,EACtB,mBAAoBA,EAAE,oBAAoB,EAC1C,kBAAmBA,EAAE,mBAAmB,EACxC,kBAAmBA,EAAE,mBAAmB,EACxC,aAAcA,EAAE,cAAc,CAAA,EAGhC,OACEa,EAAAA,IAACC,EAAA,CACC,KAAMC,EACN,OAAAC,EACA,EAAGb,EACH,KAAAC,EACA,MAAAC,EACA,kBAAAY,EACC,IAAIT,GAAA,YAAAA,EAAiB,mBAAoB,CAAE,mBAAoBA,EAAgB,gBAAA,EAChF,UAAU,8BAEV,SAAAK,EAAAA,IAACK,EAAA,CAAiB,UAAAP,EAAA,KAAsBQ,EAAY,aAAAP,CAAA,CAA4B,CAAA,CAAA,CAGtF"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import{j as s,P as u,b as c}from"./index-DaA8-3Y1.js";import{r as j}from"./vendor-DJo4KD8w.js";import{C as b}from"./CookiePreferences-CWvTznuy.js";import{K as N}from"./privacy-mpF0jllH.js";import{r as f,L as g}from"./routing-BmJG4tNe.js";import{L as o}from"./routing-JYkXODZK.js";import{u as n}from"./i18n-BbpF47i1.js";import"./XMarkIcon-KMKD47CF.js";function A(){const{t:r}=n(),e=(t,i)=>r(`About.${t}`,i),{t:l}=n(),m=(t,i)=>l(`Footer.${t}`,i),{t:d}=n(),h=(t,i)=>d(`Navigation.${t}`,i),{t:p}=n(),x=(t,i)=>p(`Home.${t}`,i),a=j.useContext(N);return s.jsx(u,{Link:g,routes:f,t:m,tNav:h,tHome:x,showAuthLinks:!1,CookiePreferences:b,...(a==null?void 0:a.openKeyboardHelp)&&{onOpenKeyboardHelp:a.openKeyboardHelp},className:"semiont-static-page",children:s.jsx("div",{className:"semiont-static-container",children:s.jsxs("div",{className:"semiont-static-content",children:[s.jsxs("header",{className:"semiont-static-header",children:[s.jsx("h1",{className:"semiont-static-title",children:e("pageTitle")}),s.jsx("p",{className:"semiont-static-subtitle",children:e("tagline")})]}),s.jsxs("div",{className:"semiont-static-action-buttons",children:[s.jsx(o,{to:"/auth/signup",className:c.primary.base,children:e("signUp")}),s.jsx(o,{to:"/auth/connect?callbackUrl=/know",className:c.primary.base,children:e("signIn")})]}),s.jsxs("article",{className:"semiont-static-article",children:[s.jsxs("section",{children:[s.jsx("h2",{children:e("missionTitle")}),s.jsx("p",{children:e("mission")})]}),s.jsxs("section",{children:[s.jsx("h2",{children:e("coreFeaturesTitle")}),s.jsxs("div",{className:"semiont-static-feature-grid",children:[s.jsxs("div",{className:"semiont-static-feature-card",children:[s.jsx("span",{className:"semiont-static-feature-icon",children:"📊"}),s.jsx("h3",{children:e("semanticContentTitle")}),s.jsx("p",{className:"semiont-static-feature-subtitle",children:e("semanticContentSubtitle")}),e("semanticContent").split(`
|
|
2
|
+
|
|
3
|
+
`).map((t,i)=>s.jsx("p",{children:t},i)),s.jsx("span",{className:"semiont-static-badge semiont-static-badge-planned",children:e("planned")})]}),s.jsxs("div",{className:"semiont-static-feature-card",children:[s.jsx("span",{className:"semiont-static-feature-icon",children:"🤝"}),s.jsx("h3",{children:e("collaborationTitle")}),s.jsx("p",{className:"semiont-static-feature-subtitle",children:e("collaborationSubtitle")}),e("collaboration").split(`
|
|
4
|
+
|
|
5
|
+
`).map((t,i)=>s.jsx("p",{children:t},i)),s.jsx("span",{className:"semiont-static-badge semiont-static-badge-planned",children:e("planned")})]}),s.jsxs("div",{className:"semiont-static-feature-card",children:[s.jsx("span",{className:"semiont-static-feature-icon",children:"🔐"}),s.jsx("h3",{children:e("rbacTitle")}),s.jsx("p",{className:"semiont-static-feature-subtitle",children:e("rbacSubtitle")}),e("rbac").split(`
|
|
6
|
+
|
|
7
|
+
`).map((t,i)=>s.jsx("p",{children:t},i)),s.jsx("span",{className:"semiont-static-badge semiont-static-badge-planned",children:e("planned")})]})]})]}),s.jsxs("section",{className:"semiont-static-highlight",children:[s.jsx("h2",{children:e("openSourceTitle")}),s.jsx("p",{children:e("openSource")}),s.jsx("div",{className:"semiont-static-action-buttons",children:s.jsx("a",{href:"https://github.com/The-AI-Alliance/semiont",target:"_blank",rel:"noopener noreferrer",className:c.secondary.base,children:e("viewOnGitHub")})})]}),s.jsxs("section",{children:[s.jsx("h2",{children:e("futureVisionTitle")}),s.jsx("p",{children:e("futureVision")})]})]})]})})})}export{A as default};
|
|
8
|
+
//# sourceMappingURL=page-BDMxGD5Z.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page-
|
|
1
|
+
{"version":3,"file":"page-BDMxGD5Z.js","sources":["../../src/app/[locale]/about/page.tsx"],"sourcesContent":["import React, { useContext } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { PageLayout, buttonStyles } from '@semiont/react-ui';\nimport { CookiePreferences } from '@/components/CookiePreferences';\nimport { KeyboardShortcutsContext } from '@/contexts/KeyboardShortcutsContext';\nimport { Link as RoutingLink, routes } from '@/lib/routing';\nimport { Link } from '@/i18n/routing';\n\nexport default function AboutPage() {\n const { t: _t } = useTranslation();\n const t = (k: string, p?: Record<string, unknown>) => _t(`About.${k}`, p as any) as string;\n const { t: _tFooter } = useTranslation();\n const tFooter = (k: string, p?: Record<string, unknown>) => _tFooter(`Footer.${k}`, p as any) as string;\n const { t: _tNav } = useTranslation();\n const tNav = (k: string, p?: Record<string, unknown>) => _tNav(`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 keyboardContext = useContext(KeyboardShortcutsContext);\n\n return (\n <PageLayout\n Link={RoutingLink}\n routes={routes}\n t={tFooter}\n tNav={tNav}\n tHome={tHome}\n showAuthLinks={false}\n CookiePreferences={CookiePreferences}\n {...(keyboardContext?.openKeyboardHelp && { onOpenKeyboardHelp: keyboardContext.openKeyboardHelp })}\n className=\"semiont-static-page\"\n >\n <div className=\"semiont-static-container\">\n <div className=\"semiont-static-content\">\n {/* Header */}\n <header className=\"semiont-static-header\">\n <h1 className=\"semiont-static-title\">\n {t('pageTitle')}\n </h1>\n <p className=\"semiont-static-subtitle\">\n {t('tagline')}\n </p>\n </header>\n\n {/* Action Buttons */}\n <div className=\"semiont-static-action-buttons\">\n <Link\n to=\"/auth/signup\"\n className={buttonStyles.primary.base}\n >\n {t('signUp')}\n </Link>\n <Link\n to=\"/auth/connect?callbackUrl=/know\"\n className={buttonStyles.primary.base}\n >\n {t('signIn')}\n </Link>\n </div>\n\n <article className=\"semiont-static-article\">\n {/* Mission Section */}\n <section>\n <h2>{t('missionTitle')}</h2>\n <p>\n {t('mission')}\n </p>\n </section>\n\n {/* Features Section */}\n <section>\n <h2>{t('coreFeaturesTitle')}</h2>\n\n <div className=\"semiont-static-feature-grid\">\n {/* Semantic Content */}\n <div className=\"semiont-static-feature-card\">\n <span className=\"semiont-static-feature-icon\">📊</span>\n <h3>{t('semanticContentTitle')}</h3>\n <p className=\"semiont-static-feature-subtitle\">\n {t('semanticContentSubtitle')}\n </p>\n {t('semanticContent').split('\\n\\n').map((para, i) => (\n <p key={i}>{para}</p>\n ))}\n <span className=\"semiont-static-badge semiont-static-badge-planned\">\n {t('planned')}\n </span>\n </div>\n\n {/* Real-time Collaboration */}\n <div className=\"semiont-static-feature-card\">\n <span className=\"semiont-static-feature-icon\">🤝</span>\n <h3>{t('collaborationTitle')}</h3>\n <p className=\"semiont-static-feature-subtitle\">\n {t('collaborationSubtitle')}\n </p>\n {t('collaboration').split('\\n\\n').map((para, i) => (\n <p key={i}>{para}</p>\n ))}\n <span className=\"semiont-static-badge semiont-static-badge-planned\">\n {t('planned')}\n </span>\n </div>\n\n {/* Advanced RBAC */}\n <div className=\"semiont-static-feature-card\">\n <span className=\"semiont-static-feature-icon\">🔐</span>\n <h3>{t('rbacTitle')}</h3>\n <p className=\"semiont-static-feature-subtitle\">\n {t('rbacSubtitle')}\n </p>\n {t('rbac').split('\\n\\n').map((para, i) => (\n <p key={i}>{para}</p>\n ))}\n <span className=\"semiont-static-badge semiont-static-badge-planned\">\n {t('planned')}\n </span>\n </div>\n </div>\n </section>\n\n {/* Open Source Section */}\n <section className=\"semiont-static-highlight\">\n <h2>{t('openSourceTitle')}</h2>\n <p>\n {t('openSource')}\n </p>\n <div className=\"semiont-static-action-buttons\">\n <a\n href=\"https://github.com/The-AI-Alliance/semiont\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={buttonStyles.secondary.base}\n >\n {t('viewOnGitHub')}\n </a>\n </div>\n </section>\n\n {/* Future Vision */}\n <section>\n <h2>{t('futureVisionTitle')}</h2>\n <p>\n {t('futureVision')}\n </p>\n </section>\n </article>\n </div>\n </div>\n </PageLayout>\n );\n}"],"names":["AboutPage","_t","useTranslation","t","k","p","_tFooter","tFooter","_tNav","tNav","_tHome","tHome","keyboardContext","useContext","KeyboardShortcutsContext","jsx","PageLayout","RoutingLink","routes","CookiePreferences","jsxs","Link","buttonStyles","para"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{r as m,j as u,c as s,u as x,e as L,p as R,q as b,s as j}from"./index-DaA8-3Y1.js";import{a as P,r as l}from"./vendor-DJo4KD8w.js";import{a as S}from"./routing-JYkXODZK.js";import{r as $,L as k}from"./routing-BmJG4tNe.js";import{T as w}from"./ToolbarPanels-DQrfch_k.js";import"./i18n-BbpF47i1.js";import"./XMarkIcon-KMKD47CF.js";function q(){const o=P(),r=m(o==null?void 0:o.id);return u.jsx(D,{rId:r},r)}function D({rId:o}){const r=S(),e=s(x().activeSession$),d=s(e==null?void 0:e.streamState$)??"initial",c=(e==null?void 0:e.kb)??null,f=e==null?void 0:e.client,t=L(()=>R(f,o)),a=s(t.resource$),n=s(t.isLoading$)??!0;l.useEffect(()=>{!n&&!a&&console.error(`[Document] Resource ${o} not found`)},[n,o,a]);const p=l.useCallback(async()=>{t.invalidate()},[t]);if(n||!a)return u.jsx(b,{});const i=a,g=m(i["@id"]);return u.jsx(j,{resource:i,rUri:g,locale:r,Link:k,routes:$,ToolbarPanels:w,refetchDocument:p,streamStatus:d,knowledgeBaseName:c==null?void 0:c.label})}export{q as default};
|
|
2
|
+
//# sourceMappingURL=page-BwiRQxa7.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page-BwiRQxa7.js","sources":["../../src/app/[locale]/know/resource/[id]/page.tsx"],"sourcesContent":["\"use client\";\n\n/**\n * Resource Viewer Page - Minimal Next.js routing wrapper\n *\n * Handles only Next.js routing and initial resource loading.\n * All other concerns (data loading, events, UI state) are handled by ResourceViewerPage.\n */\n\nimport { useEffect, useCallback } from 'react';\nimport { useParams } from 'react-router-dom';\nimport { useLocale } from '@/i18n/routing';\nimport { useSemiont, useObservable, useViewModel, createResourceLoaderVM } from '@semiont/react-ui';\nimport { resourceId } from '@semiont/core';\nimport { Link, routes } from '@/lib/routing';\n\n// Feature components\nimport { ResourceLoadingState, ResourceErrorState, ResourceViewerPage } from '@semiont/react-ui';\nimport { ToolbarPanels } from '@/components/toolbar/ToolbarPanels';\nimport type { SemiontResource } from '@semiont/react-ui';\n\n/**\n * Main page component - handles only routing and initial resource load.\n *\n * The inner component is keyed on `rId` so that navigation between\n * resources (URL-param change without component unmount) forces a full\n * remount. Without this, `useViewModel`'s factory closes over the\n * initial `rId` and never re-runs, and the URL changes but the content\n * stays on the first-loaded resource.\n */\nexport default function KnowledgeResourcePage() {\n const params = useParams();\n const rId = resourceId(params?.id as string);\n return <KnowledgeResourcePageInner key={rId} rId={rId} />;\n}\n\nfunction KnowledgeResourcePageInner({ rId }: { rId: ReturnType<typeof resourceId> }) {\n const locale = useLocale();\n\n const session = useObservable(useSemiont().activeSession$);\n const streamStatus = useObservable(session?.streamState$) ?? 'initial';\n const activeKnowledgeBase = session?.kb ?? null;\n\n const semiont = session?.client;\n const loader = useViewModel(() => createResourceLoaderVM(semiont!, rId));\n const resourceData = useObservable(loader.resource$);\n const isLoading = useObservable(loader.isLoading$) ?? true;\n\n // Log error for debugging\n useEffect(() => {\n if (!isLoading && !resourceData) {\n console.error(`[Document] Resource ${rId} not found`);\n }\n }, [isLoading, rId, resourceData]);\n\n const refetchDocument = useCallback(async () => {\n loader.invalidate();\n }, [loader]);\n\n // Early return: Loading state\n if (isLoading || !resourceData) {\n return <ResourceLoadingState />;\n }\n\n const resource = resourceData as SemiontResource;\n // resource['@id'] is now a bare ID\n const canonicalId = resourceId(resource['@id']);\n\n // Render with minimal props - all data loading/events handled inside ResourceViewerPage\n return (\n <ResourceViewerPage\n resource={resource}\n rUri={canonicalId}\n locale={locale}\n Link={Link}\n routes={routes}\n ToolbarPanels={ToolbarPanels}\n refetchDocument={refetchDocument}\n streamStatus={streamStatus}\n knowledgeBaseName={activeKnowledgeBase?.label}\n />\n );\n}\n"],"names":["KnowledgeResourcePage","params","useParams","rId","resourceId","jsx","KnowledgeResourcePageInner","locale","useLocale","session","useObservable","useSemiont","streamStatus","activeKnowledgeBase","semiont","loader","useViewModel","createResourceLoaderVM","resourceData","isLoading","useEffect","refetchDocument","useCallback","ResourceLoadingState","resource","canonicalId","ResourceViewerPage","Link","routes","ToolbarPanels"],"mappings":"+UA8BA,SAAwBA,GAAwB,CAC9C,MAAMC,EAASC,EAAA,EACTC,EAAMC,EAAWH,GAAA,YAAAA,EAAQ,EAAY,EAC3C,OAAOI,EAAAA,IAACC,EAAA,CAAqC,IAAAH,CAAA,EAALA,CAAe,CACzD,CAEA,SAASG,EAA2B,CAAE,IAAAH,GAA+C,CACnF,MAAMI,EAASC,EAAA,EAETC,EAAUC,EAAcC,EAAA,EAAa,cAAc,EACnDC,EAAeF,EAAcD,GAAA,YAAAA,EAAS,YAAY,GAAK,UACvDI,GAAsBJ,GAAA,YAAAA,EAAS,KAAM,KAErCK,EAAUL,GAAA,YAAAA,EAAS,OACnBM,EAASC,EAAa,IAAMC,EAAuBH,EAAUX,CAAG,CAAC,EACjEe,EAAeR,EAAcK,EAAO,SAAS,EAC7CI,EAAYT,EAAcK,EAAO,UAAU,GAAK,GAGtDK,EAAAA,UAAU,IAAM,CACV,CAACD,GAAa,CAACD,GACjB,QAAQ,MAAM,uBAAuBf,CAAG,YAAY,CAExD,EAAG,CAACgB,EAAWhB,EAAKe,CAAY,CAAC,EAEjC,MAAMG,EAAkBC,EAAAA,YAAY,SAAY,CAC9CP,EAAO,WAAA,CACT,EAAG,CAACA,CAAM,CAAC,EAGX,GAAII,GAAa,CAACD,EAChB,aAAQK,EAAA,EAAqB,EAG/B,MAAMC,EAAWN,EAEXO,EAAcrB,EAAWoB,EAAS,KAAK,CAAC,EAG9C,OACEnB,EAAAA,IAACqB,EAAA,CACC,SAAAF,EACA,KAAMC,EACN,OAAAlB,EACA,KAAAoB,EACA,OAAAC,EACA,cAAAC,EACA,gBAAAR,EACA,aAAAT,EACA,kBAAmBC,GAAA,YAAAA,EAAqB,KAAA,CAAA,CAG9C"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{j as r,P as f,a as h}from"./index-DaA8-3Y1.js";import{u as U,r as d}from"./vendor-DJo4KD8w.js";import{u as k,L as H}from"./routing-JYkXODZK.js";import{C as b}from"./CookiePreferences-CWvTznuy.js";import{K as x}from"./privacy-mpF0jllH.js";import{r as y,L as A}from"./routing-BmJG4tNe.js";import{u as L}from"./i18n-BbpF47i1.js";import"./XMarkIcon-KMKD47CF.js";function S(){const{t:n}=L(),o=(t,e)=>n(`AuthSignUp.${t}`,e),c=(t,e)=>n(`Footer.${t}`,e),i=(t,e)=>n(`Navigation.${t}`,e),s=(t,e)=>n(`Home.${t}`,e),[p]=U(),m=k(),a=d.useContext(x),l=p.get("callbackUrl")??"/auth/welcome",u=async()=>{m.push(`/auth/connect?callbackUrl=${encodeURIComponent(l)}`)},g={pageTitle:o("pageTitle"),signUpPrompt:o("signUpPrompt"),signUpWithGoogle:o("signUpWithGoogle"),creatingAccount:o("creatingAccount"),approvedDomainsInfo:o("approvedDomainsInfo"),termsAgreement:o("termsAgreement"),alreadyHaveAccount:o("alreadyHaveAccount"),tagline:s("tagline"),backToHome:o("backToHome")};return r.jsx(f,{Link:A,routes:y,t:c,tNav:i,tHome:s,CookiePreferences:b,...(a==null?void 0:a.openKeyboardHelp)&&{onOpenKeyboardHelp:a.openKeyboardHelp},className:"semiont-page-layout--auth",showAuthLinks:!1,children:r.jsx(h,{onSignUp:u,Link:H,translations:g})})}function I(){return r.jsx(S,{})}export{I as default};
|
|
2
|
+
//# sourceMappingURL=page-By8BIN8Q.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page-
|
|
1
|
+
{"version":3,"file":"page-By8BIN8Q.js","sources":["../../src/app/[locale]/auth/signup/page.tsx"],"sourcesContent":["import { useContext } from 'react';\nimport { useSearchParams } from 'react-router-dom';\nimport { useTranslation } from 'react-i18next';\nimport { useRouter } from '@/i18n/routing';\nimport { PageLayout, SignUpForm } from '@semiont/react-ui';\nimport { CookiePreferences } from '@/components/CookiePreferences';\nimport { KeyboardShortcutsContext } from '@/contexts/KeyboardShortcutsContext';\nimport { Link as RoutingLink, routes } from '@/lib/routing';\nimport { Link } from '@/i18n/routing';\n\nfunction SignUpContent() {\n const { t: _t } = useTranslation();\n const t = (k: string, p?: Record<string, unknown>) => _t(`AuthSignUp.${k}`, p as any) as string;\n const tFooter = (k: string, p?: Record<string, unknown>) => _t(`Footer.${k}`, p as any) as string;\n const tNav = (k: string, p?: Record<string, unknown>) => _t(`Navigation.${k}`, p as any) as string;\n const tHome = (k: string, p?: Record<string, unknown>) => _t(`Home.${k}`, p as any) as string;\n const [searchParams] = useSearchParams();\n const router = useRouter();\n const keyboardContext = useContext(KeyboardShortcutsContext);\n\n const callbackUrl = searchParams.get('callbackUrl') ?? '/auth/welcome';\n\n const handleSignUp = async () => {\n router.push(`/auth/connect?callbackUrl=${encodeURIComponent(callbackUrl)}`);\n };\n\n const translations = {\n pageTitle: t('pageTitle'),\n signUpPrompt: t('signUpPrompt'),\n signUpWithGoogle: t('signUpWithGoogle'),\n creatingAccount: t('creatingAccount'),\n approvedDomainsInfo: t('approvedDomainsInfo'),\n termsAgreement: t('termsAgreement'),\n alreadyHaveAccount: t('alreadyHaveAccount'),\n tagline: tHome('tagline'),\n backToHome: t('backToHome'),\n };\n\n return (\n <PageLayout\n Link={RoutingLink}\n routes={routes}\n t={tFooter}\n tNav={tNav}\n tHome={tHome}\n CookiePreferences={CookiePreferences}\n {...(keyboardContext?.openKeyboardHelp && { onOpenKeyboardHelp: keyboardContext.openKeyboardHelp })}\n className=\"semiont-page-layout--auth\"\n showAuthLinks={false}\n >\n <SignUpForm onSignUp={handleSignUp} Link={Link} translations={translations} />\n </PageLayout>\n );\n}\n\nexport default function SignUp() {\n return <SignUpContent />;\n}\n"],"names":["SignUpContent","_t","useTranslation","t","k","p","tFooter","tNav","tHome","searchParams","useSearchParams","router","useRouter","keyboardContext","useContext","KeyboardShortcutsContext","callbackUrl","handleSignUp","translations","jsx","PageLayout","RoutingLink","routes","CookiePreferences","SignUpForm","Link","SignUp"],"mappings":"6WAUA,SAASA,GAAgB,CACvB,KAAM,CAAE,EAAGC,CAAA,EAAOC,EAAA,EACZC,EAAI,CAACC,EAAWC,IAAgCJ,EAAG,cAAcG,CAAC,GAAIC,CAAQ,EAC9EC,EAAU,CAACF,EAAWC,IAAgCJ,EAAG,UAAUG,CAAC,GAAIC,CAAQ,EAChFE,EAAO,CAACH,EAAWC,IAAgCJ,EAAG,cAAcG,CAAC,GAAIC,CAAQ,EACjFG,EAAQ,CAACJ,EAAWC,IAAgCJ,EAAG,QAAQG,CAAC,GAAIC,CAAQ,EAC5E,CAACI,CAAY,EAAIC,EAAA,EACjBC,EAASC,EAAA,EACTC,EAAkBC,EAAAA,WAAWC,CAAwB,EAErDC,EAAcP,EAAa,IAAI,aAAa,GAAK,gBAEjDQ,EAAe,SAAY,CAC/BN,EAAO,KAAK,6BAA6B,mBAAmBK,CAAW,CAAC,EAAE,CAC5E,EAEME,EAAe,CACnB,UAAWf,EAAE,WAAW,EACxB,aAAcA,EAAE,cAAc,EAC9B,iBAAkBA,EAAE,kBAAkB,EACtC,gBAAiBA,EAAE,iBAAiB,EACpC,oBAAqBA,EAAE,qBAAqB,EAC5C,eAAgBA,EAAE,gBAAgB,EAClC,mBAAoBA,EAAE,oBAAoB,EAC1C,QAASK,EAAM,SAAS,EACxB,WAAYL,EAAE,YAAY,CAAA,EAG5B,OACEgB,EAAAA,IAACC,EAAA,CACC,KAAMC,EACN,OAAAC,EACA,EAAGhB,EACH,KAAAC,EACA,MAAAC,EACA,kBAAAe,EACC,IAAIV,GAAA,YAAAA,EAAiB,mBAAoB,CAAE,mBAAoBA,EAAgB,gBAAA,EAChF,UAAU,4BACV,cAAe,GAEf,SAAAM,EAAAA,IAACK,EAAA,CAAW,SAAUP,EAAA,KAAcQ,EAAY,aAAAP,CAAA,CAA4B,CAAA,CAAA,CAGlF,CAEA,SAAwBQ,GAAS,CAC/B,aAAQ1B,EAAA,EAAc,CACxB"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{j as e
|
|
1
|
+
import{j as e,P as m}from"./index-DaA8-3Y1.js";import{r as u}from"./vendor-DJo4KD8w.js";import{C as T}from"./CookiePreferences-CWvTznuy.js";import{K as f}from"./privacy-mpF0jllH.js";import{r as g,L as k}from"./routing-BmJG4tNe.js";import{u as c}from"./i18n-BbpF47i1.js";import"./XMarkIcon-KMKD47CF.js";import"./routing-JYkXODZK.js";function L(){const{t:r}=c(),s=(t,i)=>r(`Privacy.${t}`,i),{t:l}=c(),o=(t,i)=>l(`Footer.${t}`,i),{t:a}=c(),d=(t,i)=>a(`Navigation.${t}`,i),{t:h}=c(),x=(t,i)=>h(`Home.${t}`,i),n=u.useContext(f);return e.jsx(m,{Link:k,routes:g,t:o,tNav:d,tHome:x,CookiePreferences:T,...(n==null?void 0:n.openKeyboardHelp)&&{onOpenKeyboardHelp:n.openKeyboardHelp},className:"semiont-static-page",children:e.jsx("div",{className:"semiont-static-container",children:e.jsxs("div",{className:"semiont-static-content",children:[e.jsx("header",{className:"semiont-static-header",children:e.jsx("h1",{className:"semiont-static-title",children:s("pageTitle")})}),e.jsxs("article",{className:"semiont-static-article",children:[e.jsxs("section",{children:[e.jsx("h2",{children:s("introTitle")}),s("intro").split(`
|
|
2
2
|
|
|
3
3
|
`).map((t,i)=>e.jsx("p",{children:t},i))]}),e.jsxs("section",{children:[e.jsx("h2",{children:s("infoCollectTitle")}),e.jsx("h3",{children:s("personalInfoTitle")}),e.jsx("ul",{children:s("personalInfo").split(`
|
|
4
4
|
`).map((t,i)=>e.jsx("li",{children:t},i))}),e.jsx("h3",{children:s("autoCollectTitle")}),e.jsx("ul",{children:s("autoCollect").split(`
|
|
@@ -16,5 +16,5 @@ import{j as e}from"./query-B6BuIB0M.js";import{r as m}from"./vendor-DJo4KD8w.js"
|
|
|
16
16
|
`).map((t,i)=>e.jsx("li",{children:t},i))})]}),e.jsxs("section",{children:[e.jsx("h2",{children:s("dataSecurityTitle")}),s("dataSecurity").split(`
|
|
17
17
|
|
|
18
18
|
`).map((t,i)=>i===0?e.jsx("p",{children:t},i):e.jsx("ul",{children:t.split(`
|
|
19
|
-
`).map((j,p)=>e.jsx("li",{children:j},p))},i))]}),e.jsxs("section",{children:[e.jsx("h2",{children:s("dataRetentionTitle")}),e.jsx("p",{children:s("dataRetention")})]}),e.jsxs("section",{children:[e.jsx("h2",{children:s("internationalTransfersTitle")}),e.jsx("p",{children:s("internationalTransfers")})]}),e.jsxs("section",{children:[e.jsx("h2",{children:s("contactTitle")}),e.jsx("p",{children:s("contactIntro")}),e.jsx("div",{className:"semiont-static-info-box",children:e.jsxs("p",{children:[e.jsx("strong",{children:s("contactEmail")})," privacy@semiont.com",e.jsx("br",{}),e.jsx("strong",{children:s("contactAddress")})," [Your Company Address]"]})})]}),e.jsxs("section",{children:[e.jsx("h2",{children:s("updatesTitle")}),e.jsx("p",{children:s("updates")}),e.jsx("footer",{className:"semiont-static-footer",children:e.jsx("p",{children:e.jsx("strong",{children:s("lastUpdated",{date:new Date().toLocaleDateString()})})})})]})]})]})})})}export{
|
|
20
|
-
//# sourceMappingURL=page-
|
|
19
|
+
`).map((j,p)=>e.jsx("li",{children:j},p))},i))]}),e.jsxs("section",{children:[e.jsx("h2",{children:s("dataRetentionTitle")}),e.jsx("p",{children:s("dataRetention")})]}),e.jsxs("section",{children:[e.jsx("h2",{children:s("internationalTransfersTitle")}),e.jsx("p",{children:s("internationalTransfers")})]}),e.jsxs("section",{children:[e.jsx("h2",{children:s("contactTitle")}),e.jsx("p",{children:s("contactIntro")}),e.jsx("div",{className:"semiont-static-info-box",children:e.jsxs("p",{children:[e.jsx("strong",{children:s("contactEmail")})," privacy@semiont.com",e.jsx("br",{}),e.jsx("strong",{children:s("contactAddress")})," [Your Company Address]"]})})]}),e.jsxs("section",{children:[e.jsx("h2",{children:s("updatesTitle")}),e.jsx("p",{children:s("updates")}),e.jsx("footer",{className:"semiont-static-footer",children:e.jsx("p",{children:e.jsx("strong",{children:s("lastUpdated",{date:new Date().toLocaleDateString()})})})})]})]})]})})})}export{L as default};
|
|
20
|
+
//# sourceMappingURL=page-C8zOqZ8M.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page-BRTi-f95.js","sources":["../../src/app/[locale]/privacy/page.tsx"],"sourcesContent":["import React, { useContext } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { PageLayout } from '@semiont/react-ui';\nimport { CookiePreferences } from '@/components/CookiePreferences';\nimport { KeyboardShortcutsContext } from '@/contexts/KeyboardShortcutsContext';\nimport { Link as RoutingLink, routes } from '@/lib/routing';\n\nexport default function PrivacyPolicyPage() {\n const { t: _t } = useTranslation();\n const t = (k: string, p?: Record<string, unknown>) => _t(`Privacy.${k}`, p as any) as string;\n const { t: _tFooter } = useTranslation();\n const tFooter = (k: string, p?: Record<string, unknown>) => _tFooter(`Footer.${k}`, p as any) as string;\n const { t: _tNav } = useTranslation();\n const tNav = (k: string, p?: Record<string, unknown>) => _tNav(`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 keyboardContext = useContext(KeyboardShortcutsContext);\n\n return (\n <PageLayout\n Link={RoutingLink}\n routes={routes}\n t={tFooter}\n tNav={tNav}\n tHome={tHome}\n CookiePreferences={CookiePreferences}\n {...(keyboardContext?.openKeyboardHelp && { onOpenKeyboardHelp: keyboardContext.openKeyboardHelp })}\n className=\"semiont-static-page\"\n >\n <div className=\"semiont-static-container\">\n <div className=\"semiont-static-content\">\n <header className=\"semiont-static-header\">\n <h1 className=\"semiont-static-title\">{t('pageTitle')}</h1>\n </header>\n\n <article className=\"semiont-static-article\">\n <section>\n <h2>{t('introTitle')}</h2>\n {t('intro').split('\\n\\n').map((para, i) => (\n <p key={i}>\n {para}\n </p>\n ))}\n </section>\n\n <section>\n <h2>{t('infoCollectTitle')}</h2>\n\n <h3>{t('personalInfoTitle')}</h3>\n <ul>\n {t('personalInfo').split('\\n').map((item, i) => (\n <li key={i}>{item}</li>\n ))}\n </ul>\n\n <h3>{t('autoCollectTitle')}</h3>\n <ul>\n {t('autoCollect').split('\\n').map((item, i) => (\n <li key={i}>{item}</li>\n ))}\n </ul>\n </section>\n\n <section>\n <h2>{t('howWeUseTitle')}</h2>\n <ul>\n {t('howWeUse').split('\\n').map((item, i) => (\n <li key={i}>{item}</li>\n ))}\n </ul>\n </section>\n\n <section>\n <h2>{t('cookiePolicyTitle')}</h2>\n <p>\n {t('cookiePolicyIntro')}\n </p>\n\n <h3>{t('cookieCategoriesTitle')}</h3>\n\n <div className=\"semiont-static-cookie-grid\">\n <div className=\"semiont-static-cookie-card\">\n <h4>{t('necessaryCookiesTitle')}</h4>\n {t('necessaryCookies').split('\\n\\n').map((para, i) => (\n <p key={i}>\n {para}\n </p>\n ))}\n </div>\n\n <div className=\"semiont-static-cookie-card\">\n <h4>{t('analyticsCookiesTitle')}</h4>\n {t('analyticsCookies').split('\\n\\n').map((para, i) => (\n <p key={i}>\n {para}\n </p>\n ))}\n </div>\n\n <div className=\"semiont-static-cookie-card\">\n <h4>{t('marketingCookiesTitle')}</h4>\n {t('marketingCookies').split('\\n\\n').map((para, i) => (\n <p key={i}>\n {para}\n </p>\n ))}\n </div>\n\n <div className=\"semiont-static-cookie-card\">\n <h4>{t('preferenceCookiesTitle')}</h4>\n {t('preferenceCookies').split('\\n\\n').map((para, i) => (\n <p key={i}>\n {para}\n </p>\n ))}\n </div>\n </div>\n </section>\n\n <section>\n <h2>{t('yourRightsTitle')}</h2>\n\n <h3>{t('gdprRightsTitle')}</h3>\n <ul>\n {t('gdprRights').split('\\n').map((item, i) => (\n <li key={i}>{item}</li>\n ))}\n </ul>\n\n <h3>{t('ccpaRightsTitle')}</h3>\n <ul>\n {t('ccpaRights').split('\\n').map((item, i) => (\n <li key={i}>{item}</li>\n ))}\n </ul>\n </section>\n\n <section>\n <h2>{t('dataSecurityTitle')}</h2>\n {t('dataSecurity').split('\\n\\n').map((block, i) => {\n if (i === 0) {\n return (\n <p key={i}>\n {block}\n </p>\n );\n }\n return (\n <ul key={i}>\n {block.split('\\n').map((item, j) => (\n <li key={j}>{item}</li>\n ))}\n </ul>\n );\n })}\n </section>\n\n <section>\n <h2>{t('dataRetentionTitle')}</h2>\n <p>\n {t('dataRetention')}\n </p>\n </section>\n\n <section>\n <h2>{t('internationalTransfersTitle')}</h2>\n <p>\n {t('internationalTransfers')}\n </p>\n </section>\n\n <section>\n <h2>{t('contactTitle')}</h2>\n <p>\n {t('contactIntro')}\n </p>\n <div className=\"semiont-static-info-box\">\n <p>\n <strong>{t('contactEmail')}</strong> privacy@semiont.com<br />\n <strong>{t('contactAddress')}</strong> [Your Company Address]\n </p>\n </div>\n </section>\n\n <section>\n <h2>{t('updatesTitle')}</h2>\n <p>\n {t('updates')}\n </p>\n <footer className=\"semiont-static-footer\">\n <p>\n <strong>{t('lastUpdated', { date: new Date().toLocaleDateString() })}</strong>\n </p>\n </footer>\n </section>\n </article>\n </div>\n </div>\n </PageLayout>\n );\n}"],"names":["PrivacyPolicyPage","_t","useTranslation","t","k","p","_tFooter","tFooter","_tNav","tNav","_tHome","tHome","keyboardContext","useContext","KeyboardShortcutsContext","jsx","PageLayout","RoutingLink","routes","CookiePreferences","jsxs","para","item","block","j"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"page-C8zOqZ8M.js","sources":["../../src/app/[locale]/privacy/page.tsx"],"sourcesContent":["import React, { useContext } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { PageLayout } from '@semiont/react-ui';\nimport { CookiePreferences } from '@/components/CookiePreferences';\nimport { KeyboardShortcutsContext } from '@/contexts/KeyboardShortcutsContext';\nimport { Link as RoutingLink, routes } from '@/lib/routing';\n\nexport default function PrivacyPolicyPage() {\n const { t: _t } = useTranslation();\n const t = (k: string, p?: Record<string, unknown>) => _t(`Privacy.${k}`, p as any) as string;\n const { t: _tFooter } = useTranslation();\n const tFooter = (k: string, p?: Record<string, unknown>) => _tFooter(`Footer.${k}`, p as any) as string;\n const { t: _tNav } = useTranslation();\n const tNav = (k: string, p?: Record<string, unknown>) => _tNav(`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 keyboardContext = useContext(KeyboardShortcutsContext);\n\n return (\n <PageLayout\n Link={RoutingLink}\n routes={routes}\n t={tFooter}\n tNav={tNav}\n tHome={tHome}\n CookiePreferences={CookiePreferences}\n {...(keyboardContext?.openKeyboardHelp && { onOpenKeyboardHelp: keyboardContext.openKeyboardHelp })}\n className=\"semiont-static-page\"\n >\n <div className=\"semiont-static-container\">\n <div className=\"semiont-static-content\">\n <header className=\"semiont-static-header\">\n <h1 className=\"semiont-static-title\">{t('pageTitle')}</h1>\n </header>\n\n <article className=\"semiont-static-article\">\n <section>\n <h2>{t('introTitle')}</h2>\n {t('intro').split('\\n\\n').map((para, i) => (\n <p key={i}>\n {para}\n </p>\n ))}\n </section>\n\n <section>\n <h2>{t('infoCollectTitle')}</h2>\n\n <h3>{t('personalInfoTitle')}</h3>\n <ul>\n {t('personalInfo').split('\\n').map((item, i) => (\n <li key={i}>{item}</li>\n ))}\n </ul>\n\n <h3>{t('autoCollectTitle')}</h3>\n <ul>\n {t('autoCollect').split('\\n').map((item, i) => (\n <li key={i}>{item}</li>\n ))}\n </ul>\n </section>\n\n <section>\n <h2>{t('howWeUseTitle')}</h2>\n <ul>\n {t('howWeUse').split('\\n').map((item, i) => (\n <li key={i}>{item}</li>\n ))}\n </ul>\n </section>\n\n <section>\n <h2>{t('cookiePolicyTitle')}</h2>\n <p>\n {t('cookiePolicyIntro')}\n </p>\n\n <h3>{t('cookieCategoriesTitle')}</h3>\n\n <div className=\"semiont-static-cookie-grid\">\n <div className=\"semiont-static-cookie-card\">\n <h4>{t('necessaryCookiesTitle')}</h4>\n {t('necessaryCookies').split('\\n\\n').map((para, i) => (\n <p key={i}>\n {para}\n </p>\n ))}\n </div>\n\n <div className=\"semiont-static-cookie-card\">\n <h4>{t('analyticsCookiesTitle')}</h4>\n {t('analyticsCookies').split('\\n\\n').map((para, i) => (\n <p key={i}>\n {para}\n </p>\n ))}\n </div>\n\n <div className=\"semiont-static-cookie-card\">\n <h4>{t('marketingCookiesTitle')}</h4>\n {t('marketingCookies').split('\\n\\n').map((para, i) => (\n <p key={i}>\n {para}\n </p>\n ))}\n </div>\n\n <div className=\"semiont-static-cookie-card\">\n <h4>{t('preferenceCookiesTitle')}</h4>\n {t('preferenceCookies').split('\\n\\n').map((para, i) => (\n <p key={i}>\n {para}\n </p>\n ))}\n </div>\n </div>\n </section>\n\n <section>\n <h2>{t('yourRightsTitle')}</h2>\n\n <h3>{t('gdprRightsTitle')}</h3>\n <ul>\n {t('gdprRights').split('\\n').map((item, i) => (\n <li key={i}>{item}</li>\n ))}\n </ul>\n\n <h3>{t('ccpaRightsTitle')}</h3>\n <ul>\n {t('ccpaRights').split('\\n').map((item, i) => (\n <li key={i}>{item}</li>\n ))}\n </ul>\n </section>\n\n <section>\n <h2>{t('dataSecurityTitle')}</h2>\n {t('dataSecurity').split('\\n\\n').map((block, i) => {\n if (i === 0) {\n return (\n <p key={i}>\n {block}\n </p>\n );\n }\n return (\n <ul key={i}>\n {block.split('\\n').map((item, j) => (\n <li key={j}>{item}</li>\n ))}\n </ul>\n );\n })}\n </section>\n\n <section>\n <h2>{t('dataRetentionTitle')}</h2>\n <p>\n {t('dataRetention')}\n </p>\n </section>\n\n <section>\n <h2>{t('internationalTransfersTitle')}</h2>\n <p>\n {t('internationalTransfers')}\n </p>\n </section>\n\n <section>\n <h2>{t('contactTitle')}</h2>\n <p>\n {t('contactIntro')}\n </p>\n <div className=\"semiont-static-info-box\">\n <p>\n <strong>{t('contactEmail')}</strong> privacy@semiont.com<br />\n <strong>{t('contactAddress')}</strong> [Your Company Address]\n </p>\n </div>\n </section>\n\n <section>\n <h2>{t('updatesTitle')}</h2>\n <p>\n {t('updates')}\n </p>\n <footer className=\"semiont-static-footer\">\n <p>\n <strong>{t('lastUpdated', { date: new Date().toLocaleDateString() })}</strong>\n </p>\n </footer>\n </section>\n </article>\n </div>\n </div>\n </PageLayout>\n );\n}"],"names":["PrivacyPolicyPage","_t","useTranslation","t","k","p","_tFooter","tFooter","_tNav","tNav","_tHome","tHome","keyboardContext","useContext","KeyboardShortcutsContext","jsx","PageLayout","RoutingLink","routes","CookiePreferences","jsxs","para","item","block","j"],"mappings":"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"}
|