@semiont/cli 0.4.21 → 0.4.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. package/dist/cli.mjs +24356 -23305
  2. package/dist/frontend/dist/assets/{CookiePreferences-CWvTznuy.js → CookiePreferences-CPbRK2Nf.js} +2 -2
  3. package/dist/frontend/dist/assets/{CookiePreferences-CWvTznuy.js.map → CookiePreferences-CPbRK2Nf.js.map} +1 -1
  4. package/dist/frontend/dist/assets/{PdfAnnotationCanvas.client-6ZGFEN2N-Dnq2pEeZ.js → PdfAnnotationCanvas.client-5QESNO5H-CprYrfHh.js} +2 -2
  5. package/dist/frontend/dist/assets/PdfAnnotationCanvas.client-5QESNO5H-CprYrfHh.js.map +1 -0
  6. package/dist/frontend/dist/assets/ToolbarPanels-CPoZvoTB.js +2 -0
  7. package/dist/frontend/dist/assets/ToolbarPanels-CPoZvoTB.js.map +1 -0
  8. package/dist/frontend/dist/assets/client-CCxdaxo8.js +2 -0
  9. package/dist/frontend/dist/assets/client-CCxdaxo8.js.map +1 -0
  10. package/dist/frontend/dist/assets/client-CPOjL49o.js +2 -0
  11. package/dist/frontend/dist/assets/client-CPOjL49o.js.map +1 -0
  12. package/dist/frontend/dist/assets/{client-9KMfqezG.js → client-D04WIU14.js} +2 -2
  13. package/dist/frontend/dist/assets/{client-9KMfqezG.js.map → client-D04WIU14.js.map} +1 -1
  14. package/dist/frontend/dist/assets/{client-Bvrf4lLa.js → client-kS15_T5U.js} +2 -2
  15. package/dist/frontend/dist/assets/{client-Bvrf4lLa.js.map → client-kS15_T5U.js.map} +1 -1
  16. package/dist/frontend/dist/assets/index-Bsr9DJ3G.js +169 -0
  17. package/dist/frontend/dist/assets/index-Bsr9DJ3G.js.map +1 -0
  18. package/dist/frontend/dist/assets/layout-B-lufx1s.js +2 -0
  19. package/dist/frontend/dist/assets/layout-B-lufx1s.js.map +1 -0
  20. package/dist/frontend/dist/assets/layout-BWesrQWr.js +2 -0
  21. package/dist/frontend/dist/assets/{layout-easR0slx.js.map → layout-BWesrQWr.js.map} +1 -1
  22. package/dist/frontend/dist/assets/{layout-BgHlzaj1.js → layout-DqFHhLVw.js} +2 -2
  23. package/dist/frontend/dist/assets/layout-DqFHhLVw.js.map +1 -0
  24. package/dist/frontend/dist/assets/layout-w9wtEpkI.js +2 -0
  25. package/dist/frontend/dist/assets/layout-w9wtEpkI.js.map +1 -0
  26. package/dist/frontend/dist/assets/{not-found-nC4IaXPt.js → not-found-C0HTZoKU.js} +2 -2
  27. package/dist/frontend/dist/assets/{not-found-nC4IaXPt.js.map → not-found-C0HTZoKU.js.map} +1 -1
  28. package/dist/frontend/dist/assets/{page-8zC_t3l-.js → page--QmNUvGH.js} +2 -2
  29. package/dist/frontend/dist/assets/{page-8zC_t3l-.js.map → page--QmNUvGH.js.map} +1 -1
  30. package/dist/frontend/dist/assets/{page-DB1HZ_Jr.js → page-BIyG0SOs.js} +2 -2
  31. package/dist/frontend/dist/assets/{page-DB1HZ_Jr.js.map → page-BIyG0SOs.js.map} +1 -1
  32. package/dist/frontend/dist/assets/{page-DoqFVg4p.js → page-BMeXKClk.js} +2 -2
  33. package/dist/frontend/dist/assets/{page-DoqFVg4p.js.map → page-BMeXKClk.js.map} +1 -1
  34. package/dist/frontend/dist/assets/{page-jr_Rqa0A.js → page-BS88Xh4W.js} +2 -2
  35. package/dist/frontend/dist/assets/page-BS88Xh4W.js.map +1 -0
  36. package/dist/frontend/dist/assets/{page-By8BIN8Q.js → page-BkEdFy5p.js} +2 -2
  37. package/dist/frontend/dist/assets/{page-By8BIN8Q.js.map → page-BkEdFy5p.js.map} +1 -1
  38. package/dist/frontend/dist/assets/{page-BDMxGD5Z.js → page-BoFYscYi.js} +2 -2
  39. package/dist/frontend/dist/assets/{page-BDMxGD5Z.js.map → page-BoFYscYi.js.map} +1 -1
  40. package/dist/frontend/dist/assets/{page-btIB2WK4.js → page-BzkBmeDS.js} +2 -2
  41. package/dist/frontend/dist/assets/page-BzkBmeDS.js.map +1 -0
  42. package/dist/frontend/dist/assets/{page-BwiRQxa7.js → page-C43cKrO_.js} +2 -2
  43. package/dist/frontend/dist/assets/{page-BwiRQxa7.js.map → page-C43cKrO_.js.map} +1 -1
  44. package/dist/frontend/dist/assets/{page-BD9EKRMV.js → page-CHCWv8gH.js} +2 -2
  45. package/dist/frontend/dist/assets/{page-BD9EKRMV.js.map → page-CHCWv8gH.js.map} +1 -1
  46. package/dist/frontend/dist/assets/{page-CTvUxWH5.js → page-CN1zC8Ky.js} +2 -2
  47. package/dist/frontend/dist/assets/{page-CTvUxWH5.js.map → page-CN1zC8Ky.js.map} +1 -1
  48. package/dist/frontend/dist/assets/{page-DBoIW_-n.js → page-CPL87vBZ.js} +2 -2
  49. package/dist/frontend/dist/assets/{page-DBoIW_-n.js.map → page-CPL87vBZ.js.map} +1 -1
  50. package/dist/frontend/dist/assets/{page-CQsfujTh.js → page-CU11Rd_F.js} +2 -2
  51. package/dist/frontend/dist/assets/{page-CQsfujTh.js.map → page-CU11Rd_F.js.map} +1 -1
  52. package/dist/frontend/dist/assets/{page-kLVTeA46.js → page-CryPHwXI.js} +2 -2
  53. package/dist/frontend/dist/assets/{page-kLVTeA46.js.map → page-CryPHwXI.js.map} +1 -1
  54. package/dist/frontend/dist/assets/{page-DWS9ulKD.js → page-DYOj954J.js} +2 -2
  55. package/dist/frontend/dist/assets/{page-DWS9ulKD.js.map → page-DYOj954J.js.map} +1 -1
  56. package/dist/frontend/dist/assets/page-Du1JP0jA.js +2 -0
  57. package/dist/frontend/dist/assets/{page-D8JSCVFI.js.map → page-Du1JP0jA.js.map} +1 -1
  58. package/dist/frontend/dist/assets/{page-C8zOqZ8M.js → page-Dvw2I_gp.js} +2 -2
  59. package/dist/frontend/dist/assets/{page-C8zOqZ8M.js.map → page-Dvw2I_gp.js.map} +1 -1
  60. package/dist/frontend/dist/assets/{page-ChjwiTJ8.js → page-JI9gNkHU.js} +2 -2
  61. package/dist/frontend/dist/assets/page-JI9gNkHU.js.map +1 -0
  62. package/dist/frontend/dist/assets/{page-DEHEdU59.js → page-haUujHsJ.js} +2 -2
  63. package/dist/frontend/dist/assets/{page-DEHEdU59.js.map → page-haUujHsJ.js.map} +1 -1
  64. package/dist/frontend/dist/assets/{privacy-mpF0jllH.js → privacy-CZ8NTWnp.js} +2 -2
  65. package/dist/frontend/dist/assets/{privacy-mpF0jllH.js.map → privacy-CZ8NTWnp.js.map} +1 -1
  66. package/dist/frontend/dist/assets/{routing-BmJG4tNe.js → routing-D4iNsc7y.js} +2 -2
  67. package/dist/frontend/dist/assets/{routing-BmJG4tNe.js.map → routing-D4iNsc7y.js.map} +1 -1
  68. package/dist/frontend/dist/assets/{routing-JYkXODZK.js → routing-DCIgrT7s.js} +2 -2
  69. package/dist/frontend/dist/assets/{routing-JYkXODZK.js.map → routing-DCIgrT7s.js.map} +1 -1
  70. package/dist/frontend/dist/assets/web-Ua5dIRkZ.js +2 -0
  71. package/dist/frontend/dist/assets/web-Ua5dIRkZ.js.map +1 -0
  72. package/dist/frontend/dist/index.html +1 -1
  73. package/dist/frontend/package.json +1 -1
  74. package/package.json +8 -7
  75. package/dist/frontend/dist/assets/PdfAnnotationCanvas.client-6ZGFEN2N-Dnq2pEeZ.js.map +0 -1
  76. package/dist/frontend/dist/assets/ToolbarPanels-DQrfch_k.js +0 -2
  77. package/dist/frontend/dist/assets/ToolbarPanels-DQrfch_k.js.map +0 -1
  78. package/dist/frontend/dist/assets/client-D9qa8fAn.js +0 -2
  79. package/dist/frontend/dist/assets/client-D9qa8fAn.js.map +0 -1
  80. package/dist/frontend/dist/assets/client-kIBNRH2w.js +0 -2
  81. package/dist/frontend/dist/assets/client-kIBNRH2w.js.map +0 -1
  82. package/dist/frontend/dist/assets/index-DaA8-3Y1.js +0 -169
  83. package/dist/frontend/dist/assets/index-DaA8-3Y1.js.map +0 -1
  84. package/dist/frontend/dist/assets/layout-BLGpzYwk.js +0 -2
  85. package/dist/frontend/dist/assets/layout-BLGpzYwk.js.map +0 -1
  86. package/dist/frontend/dist/assets/layout-BgHlzaj1.js.map +0 -1
  87. package/dist/frontend/dist/assets/layout-Dj1MEjN6.js +0 -2
  88. package/dist/frontend/dist/assets/layout-Dj1MEjN6.js.map +0 -1
  89. package/dist/frontend/dist/assets/layout-easR0slx.js +0 -2
  90. package/dist/frontend/dist/assets/page-ChjwiTJ8.js.map +0 -1
  91. package/dist/frontend/dist/assets/page-D8JSCVFI.js +0 -2
  92. package/dist/frontend/dist/assets/page-btIB2WK4.js.map +0 -1
  93. package/dist/frontend/dist/assets/page-jr_Rqa0A.js.map +0 -1
@@ -1,2 +0,0 @@
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
@@ -1 +0,0 @@
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]}
@@ -1 +0,0 @@
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]}
@@ -1,2 +0,0 @@
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
@@ -1 +0,0 @@
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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"}
@@ -1,2 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"page-ChjwiTJ8.js","sources":["../../src/app/[locale]/know/discover/page.tsx"],"sourcesContent":["\"use client\";\n\nimport { useCallback } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useRouter } from '@/i18n/routing';\nimport {\n useTheme,\n useLineNumbers,\n useEventSubscriptions,\n useObservable,\n useSemiont,\n useViewModel,\n ResourceDiscoveryPage,\n} from '@semiont/react-ui';\nimport { ToolbarPanels } from '@/components/toolbar/ToolbarPanels';\nimport { useShellVM } from '@semiont/react-ui';\nimport { createDiscoverVM } from '@semiont/api-client';\n\nexport default function DiscoverPage() {\n const { t: _t } = useTranslation();\n const t = (k: string, p?: Record<string, unknown>) => _t(`Discover.${k}`, p as any) as string;\n const router = useRouter();\n const semiont = useObservable(useSemiont().activeSession$)?.client;\n\n const browseVM = useShellVM();\n const vm = useViewModel(() => createDiscoverVM(semiont!, browseVM));\n\n const activePanel = useObservable(vm.browse.activePanel$) ?? null;\n const recentDocuments = useObservable(vm.recentResources$) ?? [];\n const entityTypes = useObservable(vm.entityTypes$) ?? [];\n const isLoadingRecent = useObservable(vm.isLoadingRecent$) ?? true;\n const searchQuery = useObservable(vm.search.query$) ?? '';\n const searchState = useObservable(vm.search.state$);\n const searchDocuments = searchState?.results ?? [];\n const isSearching = searchState?.isSearching ?? false;\n\n const { theme, setTheme, resolvedTheme } = useTheme();\n const { showLineNumbers, toggleLineNumbers } = useLineNumbers();\n\n useEventSubscriptions({\n 'settings:theme-changed': useCallback(({ theme }: { theme: 'light' | 'dark' | 'system' }) => setTheme(theme), [setTheme]),\n 'settings:line-numbers-toggled': useCallback(() => toggleLineNumbers(), [toggleLineNumbers]),\n });\n\n return (\n <ResourceDiscoveryPage\n recentDocuments={recentDocuments}\n searchDocuments={searchDocuments}\n entityTypes={entityTypes}\n isLoadingRecent={isLoadingRecent}\n isSearching={isSearching}\n searchQuery={searchQuery}\n onSearchQueryChange={vm.search.setQuery}\n theme={resolvedTheme}\n showLineNumbers={showLineNumbers}\n activePanel={activePanel}\n onNavigateToResource={(resourceId) => router.push(`/know/resource/${encodeURIComponent(resourceId)}`)}\n onNavigateToCompose={() => router.push('/know/compose')}\n translations={{\n title: t('title'),\n subtitle: t('subtitle'),\n searchPlaceholder: t('searchPlaceholder'),\n searchButton: t('searchButton'),\n searching: t('searching'),\n filterByEntityType: t('filterByEntityType'),\n all: t('all'),\n recentResources: t('recentResources'),\n searchResults: (count: number) => t('searchResults', { count }),\n documentsTaggedWith: (entityType: string) => t('documentsTaggedWith', { entityType }),\n noResultsFound: (query: string) => t('noResultsFound', { query }),\n noResourcesAvailable: t('noResourcesAvailable'),\n composeFirstResource: t('composeFirstResource'),\n archived: t('archived'),\n created: t('created'),\n loadingKnowledgeBase: t('loadingKnowledgeBase'),\n }}\n ToolbarPanels={ToolbarPanels}\n />\n );\n}\n"],"names":["DiscoverPage","_t","useTranslation","t","k","p","router","useRouter","semiont","_a","useObservable","useSemiont","browseVM","useShellVM","vm","useViewModel","createDiscoverVM","activePanel","recentDocuments","entityTypes","isLoadingRecent","searchQuery","searchState","searchDocuments","isSearching","theme","setTheme","resolvedTheme","useTheme","showLineNumbers","toggleLineNumbers","useLineNumbers","useEventSubscriptions","useCallback","jsx","ResourceDiscoveryPage","resourceId","count","entityType","query","ToolbarPanels"],"mappings":"iTAkBA,SAAwBA,GAAe,OACrC,KAAM,CAAE,EAAGC,CAAA,EAAOC,EAAA,EACZC,EAAI,CAACC,EAAWC,IAAgCJ,EAAG,YAAYG,CAAC,GAAIC,CAAQ,EAC5EC,EAASC,EAAA,EACTC,GAAUC,EAAAC,EAAcC,EAAA,EAAa,cAAc,IAAzC,YAAAF,EAA4C,OAEtDG,EAAWC,EAAA,EACXC,EAAKC,EAAa,IAAMC,EAAiBR,EAAUI,CAAQ,CAAC,EAE5DK,EAAcP,EAAcI,EAAG,OAAO,YAAY,GAAK,KACvDI,EAAkBR,EAAcI,EAAG,gBAAgB,GAAK,CAAA,EACxDK,EAAcT,EAAcI,EAAG,YAAY,GAAK,CAAA,EAChDM,EAAkBV,EAAcI,EAAG,gBAAgB,GAAK,GACxDO,EAAcX,EAAcI,EAAG,OAAO,MAAM,GAAK,GACjDQ,EAAcZ,EAAcI,EAAG,OAAO,MAAM,EAC5CS,GAAkBD,GAAA,YAAAA,EAAa,UAAW,CAAA,EAC1CE,GAAcF,GAAA,YAAAA,EAAa,cAAe,GAE1C,CAAE,MAAAG,EAAO,SAAAC,EAAU,cAAAC,CAAA,EAAkBC,EAAA,EACrC,CAAE,gBAAAC,EAAiB,kBAAAC,CAAA,EAAsBC,EAAA,EAE/C,OAAAC,EAAsB,CACpB,yBAA0BC,EAAAA,YAAY,CAAC,CAAE,MAAAR,KAAoDC,EAASD,CAAK,EAAG,CAACC,CAAQ,CAAC,EACxH,gCAAiCO,EAAAA,YAAY,IAAMH,IAAqB,CAACA,CAAiB,CAAC,CAAA,CAC5F,EAGCI,EAAAA,IAACC,EAAA,CACC,gBAAAjB,EACA,gBAAAK,EACA,YAAAJ,EACA,gBAAAC,EACA,YAAAI,EACA,YAAAH,EACA,oBAAqBP,EAAG,OAAO,SAC/B,MAAOa,EACP,gBAAAE,EACA,YAAAZ,EACA,qBAAuBmB,GAAe9B,EAAO,KAAK,kBAAkB,mBAAmB8B,CAAU,CAAC,EAAE,EACpG,oBAAqB,IAAM9B,EAAO,KAAK,eAAe,EACtD,aAAc,CACZ,MAAOH,EAAE,OAAO,EAChB,SAAUA,EAAE,UAAU,EACtB,kBAAmBA,EAAE,mBAAmB,EACxC,aAAcA,EAAE,cAAc,EAC9B,UAAWA,EAAE,WAAW,EACxB,mBAAoBA,EAAE,oBAAoB,EAC1C,IAAKA,EAAE,KAAK,EACZ,gBAAiBA,EAAE,iBAAiB,EACpC,cAAgBkC,GAAkBlC,EAAE,gBAAiB,CAAE,MAAAkC,EAAO,EAC9D,oBAAsBC,GAAuBnC,EAAE,sBAAuB,CAAE,WAAAmC,EAAY,EACpF,eAAiBC,GAAkBpC,EAAE,iBAAkB,CAAE,MAAAoC,EAAO,EAChE,qBAAsBpC,EAAE,sBAAsB,EAC9C,qBAAsBA,EAAE,sBAAsB,EAC9C,SAAUA,EAAE,UAAU,EACtB,QAASA,EAAE,SAAS,EACpB,qBAAsBA,EAAE,sBAAsB,CAAA,EAEhD,cAAAqC,CAAA,CAAA,CAGN"}
@@ -1,2 +0,0 @@
1
- import{j as r}from"./index-DaA8-3Y1.js";import{a as t}from"./routing-JYkXODZK.js";import{N as a}from"./vendor-DJo4KD8w.js";import"./i18n-BbpF47i1.js";function n(){const o=t();return r.jsx(a,{to:`/${o}/admin/users`,replace:!0})}export{n as default};
2
- //# sourceMappingURL=page-D8JSCVFI.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"page-btIB2WK4.js","sources":["../../src/app/[locale]/moderate/entity-tags/page.tsx"],"sourcesContent":["import { useCallback } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport {\n Toolbar,\n useTheme,\n useShellVM,\n useObservable,\n useLineNumbers,\n useEventSubscriptions,\n useSemiont,\n useViewModel,\n EntityTagsPage,\n} from '@semiont/react-ui';\nimport { createEntityTagsVM } from '@semiont/api-client';\nimport { ToolbarPanels } from '@/components/toolbar/ToolbarPanels';\n\nexport default function EntityTagsPageWrapper() {\n const { t: _t } = useTranslation();\n const t = (k: string, p?: Record<string, unknown>) => _t(`ModerateEntityTags.${k}`, p as any) as string;\n const client = useObservable(useSemiont().activeSession$)?.client;\n\n const browseVM = useShellVM();\n const vm = useViewModel(() => createEntityTagsVM(client!, browseVM));\n\n const activePanel = useObservable(vm.browse.activePanel$) ?? null;\n const entityTypes = useObservable(vm.entityTypes$) ?? [];\n const isLoading = useObservable(vm.isLoading$) ?? true;\n const newTag = useObservable(vm.newTag$) ?? '';\n const error = useObservable(vm.error$) ?? '';\n const isAddingTag = useObservable(vm.isAdding$) ?? false;\n\n const { theme, setTheme } = useTheme();\n const { showLineNumbers, toggleLineNumbers } = useLineNumbers();\n\n useEventSubscriptions({\n 'settings:theme-changed': useCallback(({ theme }: { theme: 'light' | 'dark' | 'system' }) => setTheme(theme), [setTheme]),\n 'settings:line-numbers-toggled': useCallback(() => toggleLineNumbers(), [toggleLineNumbers]),\n });\n\n if (isLoading) {\n return (\n <div className=\"flex items-center justify-center py-20\">\n <p className=\"text-gray-600 dark:text-gray-300\">{t('loading')}</p>\n </div>\n );\n }\n\n return (\n <EntityTagsPage\n entityTypes={entityTypes}\n isLoading={isLoading}\n error={error}\n newTag={newTag}\n onNewTagChange={vm.setNewTag}\n onAddTag={vm.addTag}\n isAddingTag={isAddingTag}\n theme={theme}\n showLineNumbers={showLineNumbers}\n activePanel={activePanel}\n translations={{\n pageTitle: t('pageTitle'),\n pageDescription: t('pageDescription'),\n sectionTitle: t('sectionTitle'),\n sectionDescription: t('sectionDescription'),\n inputPlaceholder: t('inputPlaceholder'),\n addTag: t('addTag'),\n adding: t('adding'),\n }}\n ToolbarPanels={ToolbarPanels}\n Toolbar={Toolbar}\n />\n );\n}\n"],"names":["EntityTagsPageWrapper","_t","useTranslation","t","k","p","client","_a","useObservable","useSemiont","browseVM","useShellVM","vm","useViewModel","createEntityTagsVM","activePanel","entityTypes","isLoading","newTag","error","isAddingTag","theme","setTheme","useTheme","showLineNumbers","toggleLineNumbers","useLineNumbers","useEventSubscriptions","useCallback","jsx","EntityTagsPage","ToolbarPanels","Toolbar"],"mappings":"4SAgBA,SAAwBA,GAAwB,OAC9C,KAAM,CAAE,EAAGC,CAAA,EAAOC,EAAA,EACZC,EAAI,CAACC,EAAWC,IAAgCJ,EAAG,sBAAsBG,CAAC,GAAIC,CAAQ,EACtFC,GAASC,EAAAC,EAAcC,EAAA,EAAa,cAAc,IAAzC,YAAAF,EAA4C,OAErDG,EAAWC,EAAA,EACXC,EAAKC,EAAa,IAAMC,EAAmBR,EAASI,CAAQ,CAAC,EAE7DK,EAAcP,EAAcI,EAAG,OAAO,YAAY,GAAK,KACvDI,EAAcR,EAAcI,EAAG,YAAY,GAAK,CAAA,EAChDK,EAAYT,EAAcI,EAAG,UAAU,GAAK,GAC5CM,EAASV,EAAcI,EAAG,OAAO,GAAK,GACtCO,EAAQX,EAAcI,EAAG,MAAM,GAAK,GACpCQ,EAAcZ,EAAcI,EAAG,SAAS,GAAK,GAE7C,CAAE,MAAAS,EAAO,SAAAC,CAAA,EAAaC,EAAA,EACtB,CAAE,gBAAAC,EAAiB,kBAAAC,CAAA,EAAsBC,EAAA,EAO/C,OALAC,EAAsB,CACpB,yBAA0BC,EAAAA,YAAY,CAAC,CAAE,MAAAP,KAAoDC,EAASD,CAAK,EAAG,CAACC,CAAQ,CAAC,EACxH,gCAAiCM,EAAAA,YAAY,IAAMH,IAAqB,CAACA,CAAiB,CAAC,CAAA,CAC5F,EAEGR,EAEAY,EAAAA,IAAC,MAAA,CAAI,UAAU,yCACb,SAAAA,MAAC,IAAA,CAAE,UAAU,mCAAoC,SAAA1B,EAAE,SAAS,CAAA,CAAE,EAChE,EAKF0B,EAAAA,IAACC,EAAA,CACC,YAAAd,EACA,UAAAC,EACA,MAAAE,EACA,OAAAD,EACA,eAAgBN,EAAG,UACnB,SAAUA,EAAG,OACb,YAAAQ,EACA,MAAAC,EACA,gBAAAG,EACA,YAAAT,EACA,aAAc,CACZ,UAAWZ,EAAE,WAAW,EACxB,gBAAiBA,EAAE,iBAAiB,EACpC,aAAcA,EAAE,cAAc,EAC9B,mBAAoBA,EAAE,oBAAoB,EAC1C,iBAAkBA,EAAE,kBAAkB,EACtC,OAAQA,EAAE,QAAQ,EAClB,OAAQA,EAAE,QAAQ,CAAA,EAEpB,cAAA4B,EACA,QAAAC,CAAA,CAAA,CAGN"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"page-jr_Rqa0A.js","sources":["../../src/app/[locale]/know/compose/page.tsx"],"sourcesContent":["\"use client\";\n\nimport React, { useEffect, Suspense } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useLocale } from '@/i18n/routing';\nimport { useRouter } from '@/i18n/routing';\nimport { useSearchParams } from 'react-router-dom';\nimport {\n useSemiont,\n useToast,\n useTheme,\n useShellVM,\n useObservable,\n useLineNumbers,\n useHoverDelay,\n useEventSubscriptions,\n useViewModel,\n Toolbar,\n ComposeLoadingState,\n ResourceComposePage,\n} from '@semiont/react-ui';\nimport type { SaveResourceParams as UISaveResourceParams } from '@semiont/react-ui';\nimport { createComposePageVM } from '@semiont/api-client';\nimport { ToolbarPanels } from '@/components/toolbar/ToolbarPanels';\n\nfunction ComposeResourceContent() {\n const { t: _t } = useTranslation();\n const t = (k: string, p?: Record<string, unknown>) => _t(`Compose.${k}`, p as any) as string;\n const locale = useLocale();\n const router = useRouter();\n const [searchParams] = useSearchParams();\n const semiont = useSemiont();\n const activeKbId = useObservable(semiont.activeKbId$);\n const session = useObservable(semiont.activeSession$);\n const user = useObservable(session?.user$);\n const authToken = useObservable(session?.token$);\n const isAuthenticated = !!user;\n // \"Loading\" = a KB is selected but the session hasn't finished constructing\n // yet, so we don't know if auth succeeded.\n const authLoading = activeKbId != null && session == null;\n const { showError, showSuccess } = useToast();\n const client = session?.client;\n\n useEffect(() => {\n if (authLoading) return;\n if (!isAuthenticated) router.push('/');\n }, [authLoading, isAuthenticated, router]);\n\n const browseVM = useShellVM();\n\n const contextKey = searchParams?.get('annotationUri')\n ? `gather-context:${searchParams.get('annotationUri')}`\n : null;\n const storedContext = contextKey && typeof sessionStorage !== 'undefined'\n ? sessionStorage.getItem(contextKey) ?? undefined\n : undefined;\n if (contextKey && storedContext && typeof sessionStorage !== 'undefined') {\n sessionStorage.removeItem(contextKey);\n }\n\n const vm = useViewModel(() => createComposePageVM(client!, browseVM, {\n mode: searchParams?.get('mode') ?? undefined,\n token: searchParams?.get('token') ?? undefined,\n annotationUri: searchParams?.get('annotationUri') ?? undefined,\n sourceDocumentId: searchParams?.get('sourceDocumentId') ?? undefined,\n name: searchParams?.get('name') ?? undefined,\n entityTypes: searchParams?.get('entityTypes') ?? undefined,\n storedContext,\n }, authToken ?? undefined));\n\n const activePanel = useObservable(vm.browse.activePanel$) ?? null;\n const pageMode = useObservable(vm.mode$) ?? 'new';\n const isLoading = useObservable(vm.loading$) ?? true;\n const cloneData = useObservable(vm.cloneData$) ?? null;\n const referenceData = useObservable(vm.referenceData$) ?? null;\n const gatheredContext = useObservable(vm.gatheredContext$) ?? null;\n const availableEntityTypes = useObservable(vm.entityTypes$) ?? [];\n\n const { theme, setTheme, resolvedTheme } = useTheme();\n const { showLineNumbers, toggleLineNumbers } = useLineNumbers();\n const { hoverDelayMs } = useHoverDelay();\n\n useEventSubscriptions({\n 'settings:theme-changed': ({ theme }: { theme: 'light' | 'dark' | 'system' }) => setTheme(theme),\n 'settings:line-numbers-toggled': () => toggleLineNumbers(),\n });\n\n const handleSaveResource = async (params: UISaveResourceParams) => {\n try {\n const newResourceId = await vm.save(params);\n if (params.mode === 'reference' && params.annotationUri) {\n showSuccess('Reference successfully linked to the new resource');\n }\n router.push(`/know/resource/${encodeURIComponent(newResourceId)}`);\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Failed to save resource. Please try again.';\n showError(errorMessage);\n throw error;\n }\n };\n\n if (authLoading || isLoading) {\n return <ComposeLoadingState message={authLoading ? 'Checking authentication...' : 'Loading cloned resource...'} />;\n }\n\n if (!isAuthenticated) return null;\n\n return (\n <ResourceComposePage\n mode={pageMode}\n cloneData={cloneData}\n referenceData={referenceData}\n gatheredContext={gatheredContext}\n availableEntityTypes={availableEntityTypes}\n initialLocale={locale}\n theme={resolvedTheme}\n showLineNumbers={showLineNumbers}\n hoverDelayMs={hoverDelayMs}\n activePanel={activePanel}\n onSaveResource={handleSaveResource}\n onCancel={() => router.push('/know/discover')}\n translations={{\n title: t('title'),\n titleEditClone: t('titleEditClone'),\n titleCompleteReference: t('titleCompleteReference'),\n subtitleClone: t('subtitleClone'),\n subtitleReference: t('subtitleReference'),\n linkedNoticePrefix: t('linkedNoticePrefix'),\n resourceName: t('resourceName'),\n resourceNamePlaceholder: t('resourceNamePlaceholder'),\n entityTypes: t('entityTypes'),\n language: t('language'),\n contentSource: t('contentSource'),\n uploadFile: t('uploadFile'),\n uploadFileDescription: t('uploadFileDescription'),\n writeContent: t('writeContent'),\n writeContentDescription: t('writeContentDescription'),\n dropFileOrClick: t('dropFileOrClick'),\n supportedFormats: t('supportedFormats'),\n mediaType: t('mediaType'),\n autoDetected: t('autoDetected'),\n format: t('format'),\n content: t('content'),\n resourceContent: t('resourceContent'),\n encoding: t('encoding'),\n archiveOriginal: t('archiveOriginal'),\n cancel: t('cancel'),\n saving: t('saving'),\n creating: t('creating'),\n creatingAndLinking: t('creatingAndLinking'),\n saveClonedResource: t('saveClonedResource'),\n createAndLinkResource: t('createAndLinkResource'),\n createResource: t('createResource'),\n }}\n ToolbarPanels={ToolbarPanels}\n Toolbar={Toolbar}\n />\n );\n}\n\nexport default function ComposeResourcePage() {\n const { t: _t } = useTranslation();\n const t = (k: string, p?: Record<string, unknown>) => _t(`Compose.${k}`, p as any) as string;\n\n return (\n <Suspense fallback={<ComposeLoadingState message={t('loading')} />}>\n <ComposeResourceContent />\n </Suspense>\n );\n}\n"],"names":["ComposeResourceContent","_t","useTranslation","t","k","p","locale","useLocale","router","useRouter","searchParams","useSearchParams","semiont","useSemiont","activeKbId","useObservable","session","user","authToken","isAuthenticated","authLoading","showError","showSuccess","useToast","client","useEffect","browseVM","useShellVM","contextKey","storedContext","vm","useViewModel","createComposePageVM","activePanel","pageMode","isLoading","cloneData","referenceData","gatheredContext","availableEntityTypes","theme","setTheme","resolvedTheme","useTheme","showLineNumbers","toggleLineNumbers","useLineNumbers","hoverDelayMs","useHoverDelay","useEventSubscriptions","handleSaveResource","params","newResourceId","error","errorMessage","jsx","ComposeLoadingState","ResourceComposePage","ToolbarPanels","Toolbar","ComposeResourcePage","Suspense"],"mappings":"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"}