@semiont/browser 0.5.30 → 0.5.32
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/assets/{ChevronLeftIcon-BcDi-sgg.js → ChevronLeftIcon-ikKcEfM5.js} +2 -2
- package/dist/assets/{ChevronLeftIcon-BcDi-sgg.js.map → ChevronLeftIcon-ikKcEfM5.js.map} +1 -1
- package/dist/assets/{CommandLineIcon-O8NfVSEq.js → CommandLineIcon-B3W-9AYr.js} +2 -2
- package/dist/assets/{CommandLineIcon-O8NfVSEq.js.map → CommandLineIcon-B3W-9AYr.js.map} +1 -1
- package/dist/assets/{CookiePreferences-DHgkny7X.js → CookiePreferences-CWZIFYNC.js} +2 -2
- package/dist/assets/{CookiePreferences-DHgkny7X.js.map → CookiePreferences-CWZIFYNC.js.map} +1 -1
- package/dist/assets/{KeyboardShortcutsContext-CBFjGYDr.js → KeyboardShortcutsContext-CSFk3vP6.js} +2 -2
- package/dist/assets/{KeyboardShortcutsContext-CBFjGYDr.js.map → KeyboardShortcutsContext-CSFk3vP6.js.map} +1 -1
- package/dist/assets/{PdfAnnotationCanvas.client-LSH3PZPY-DuFgtMhI.js → PdfAnnotationCanvas.client-LSH3PZPY-D-7UQNP4.js} +2 -2
- package/dist/assets/{PdfAnnotationCanvas.client-LSH3PZPY-DuFgtMhI.js.map → PdfAnnotationCanvas.client-LSH3PZPY-D-7UQNP4.js.map} +1 -1
- package/dist/assets/{ToolbarPanels-COwH5BrV.js → ToolbarPanels-CbF3qEos.js} +2 -2
- package/dist/assets/{ToolbarPanels-COwH5BrV.js.map → ToolbarPanels-CbF3qEos.js.map} +1 -1
- package/dist/assets/{XMarkIcon-CVrfCz2h.js → XMarkIcon-Dt8lUQLh.js} +2 -2
- package/dist/assets/{XMarkIcon-CVrfCz2h.js.map → XMarkIcon-Dt8lUQLh.js.map} +1 -1
- package/dist/assets/{client-5Fze6y-0.js → client-CXKycZZZ.js} +2 -2
- package/dist/assets/{client-5Fze6y-0.js.map → client-CXKycZZZ.js.map} +1 -1
- package/dist/assets/{client-Br8hVPSL.js → client-CiXdSyqF.js} +2 -2
- package/dist/assets/{client-Br8hVPSL.js.map → client-CiXdSyqF.js.map} +1 -1
- package/dist/assets/{en-R5XA26NF-B_rafaNP.js → en-R5XA26NF-BxJGw0oZ.js} +1 -1
- package/dist/assets/{i18n-zIDJOEfo.js → i18n-CywLsdxn.js} +2 -2
- package/dist/assets/i18n-CywLsdxn.js.map +1 -0
- package/dist/assets/{index-DikwAWOa.js → index-cHWd4mGO.js} +52 -52
- package/dist/assets/index-cHWd4mGO.js.map +1 -0
- package/dist/assets/{layout-DOcJwulX.js → layout-3T2CwuLU.js} +2 -2
- package/dist/assets/{layout-DOcJwulX.js.map → layout-3T2CwuLU.js.map} +1 -1
- package/dist/assets/{layout-BYYBhrUM.js → layout-B4A7CIsE.js} +2 -2
- package/dist/assets/{layout-BYYBhrUM.js.map → layout-B4A7CIsE.js.map} +1 -1
- package/dist/assets/{layout-B4mP42tI.js → layout-CGq5doN0.js} +2 -2
- package/dist/assets/{layout-B4mP42tI.js.map → layout-CGq5doN0.js.map} +1 -1
- package/dist/assets/{layout-CLyZ3jHm.js → layout-DSvS5iO0.js} +2 -2
- package/dist/assets/{layout-CLyZ3jHm.js.map → layout-DSvS5iO0.js.map} +1 -1
- package/dist/assets/{not-found-Ci6X4tm9.js → not-found-k9OeYO0z.js} +2 -2
- package/dist/assets/{not-found-Ci6X4tm9.js.map → not-found-k9OeYO0z.js.map} +1 -1
- package/dist/assets/{page-CSMUzvRi.js → page-BNXN9uWs.js} +2 -2
- package/dist/assets/{page-CSMUzvRi.js.map → page-BNXN9uWs.js.map} +1 -1
- package/dist/assets/{page--ofr4a58.js → page-BWTL-Lea.js} +2 -2
- package/dist/assets/{page--ofr4a58.js.map → page-BWTL-Lea.js.map} +1 -1
- package/dist/assets/{page-DhCdpcx2.js → page-BfbTxteF.js} +2 -2
- package/dist/assets/{page-DhCdpcx2.js.map → page-BfbTxteF.js.map} +1 -1
- package/dist/assets/{page-C9pkWGVi.js → page-BhPjX09z.js} +2 -2
- package/dist/assets/{page-C9pkWGVi.js.map → page-BhPjX09z.js.map} +1 -1
- package/dist/assets/{page-CO9mlfK-.js → page-Bk2UhTqA.js} +2 -2
- package/dist/assets/{page-CO9mlfK-.js.map → page-Bk2UhTqA.js.map} +1 -1
- package/dist/assets/{page-BYW9mwEo.js → page-CJnENX8F.js} +2 -2
- package/dist/assets/{page-BYW9mwEo.js.map → page-CJnENX8F.js.map} +1 -1
- package/dist/assets/{page-Ce6fw6P9.js → page-Ct7GNMjQ.js} +2 -2
- package/dist/assets/{page-Ce6fw6P9.js.map → page-Ct7GNMjQ.js.map} +1 -1
- package/dist/assets/{page-FoKU0iob.js → page-CywSuXyN.js} +2 -2
- package/dist/assets/{page-FoKU0iob.js.map → page-CywSuXyN.js.map} +1 -1
- package/dist/assets/{page-QXiNSjcX.js → page-D-_kPKxI.js} +2 -2
- package/dist/assets/{page-QXiNSjcX.js.map → page-D-_kPKxI.js.map} +1 -1
- package/dist/assets/{page-CCSJqjWt.js → page-DLiS_avb.js} +2 -2
- package/dist/assets/{page-CCSJqjWt.js.map → page-DLiS_avb.js.map} +1 -1
- package/dist/assets/{page-DveRPD7J.js → page-DS47DLy5.js} +2 -2
- package/dist/assets/{page-DveRPD7J.js.map → page-DS47DLy5.js.map} +1 -1
- package/dist/assets/{page-KNTWGNqU.js → page-DYcAqNIR.js} +2 -2
- package/dist/assets/{page-KNTWGNqU.js.map → page-DYcAqNIR.js.map} +1 -1
- package/dist/assets/{page-P0n7aLDe.js → page-DYqW4iWr.js} +2 -2
- package/dist/assets/{page-P0n7aLDe.js.map → page-DYqW4iWr.js.map} +1 -1
- package/dist/assets/page-De7BG-0h.js +2 -0
- package/dist/assets/{page-C5yXoqok.js.map → page-De7BG-0h.js.map} +1 -1
- package/dist/assets/{page-DP-LdVo6.js → page-DwyBQfbg.js} +2 -2
- package/dist/assets/{page-DP-LdVo6.js.map → page-DwyBQfbg.js.map} +1 -1
- package/dist/assets/{page-C9DNsp3i.js → page-OhVx5cMH.js} +2 -2
- package/dist/assets/{page-C9DNsp3i.js.map → page-OhVx5cMH.js.map} +1 -1
- package/dist/assets/{page-S-g5YvWH.js → page-XISoI7Ji.js} +2 -2
- package/dist/assets/{page-S-g5YvWH.js.map → page-XISoI7Ji.js.map} +1 -1
- package/dist/assets/{page-jVd15vic.js → page-bR7KMw9p.js} +2 -2
- package/dist/assets/{page-jVd15vic.js.map → page-bR7KMw9p.js.map} +1 -1
- package/dist/assets/{pdf-DLN6u172.js → pdf-BFxsW_Qg.js} +2 -2
- package/dist/assets/{pdf-DLN6u172.js.map → pdf-BFxsW_Qg.js.map} +1 -1
- package/dist/assets/{routing-Cj_EvhT3.js → routing-D-GkAfgE.js} +2 -2
- package/dist/assets/{routing-Cj_EvhT3.js.map → routing-D-GkAfgE.js.map} +1 -1
- package/dist/assets/{routing-NHl4gs1C.js → routing-D5d0e59H.js} +2 -2
- package/dist/assets/{routing-NHl4gs1C.js.map → routing-D5d0e59H.js.map} +1 -1
- package/dist/assets/{vendor-GEwJ7U4m.js → vendor-vK2W55bZ.js} +2 -2
- package/dist/assets/{vendor-GEwJ7U4m.js.map → vendor-vK2W55bZ.js.map} +1 -1
- package/dist/assets/{web-CyrRuj1m.js → web-DWjmWGs5.js} +2 -2
- package/dist/assets/{web-CyrRuj1m.js.map → web-DWjmWGs5.js.map} +1 -1
- package/dist/index.html +3 -3
- package/package.json +1 -1
- package/dist/assets/i18n-zIDJOEfo.js.map +0 -1
- package/dist/assets/index-DikwAWOa.js.map +0 -1
- package/dist/assets/page-C5yXoqok.js +0 -2
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{t as e}from"./i18n-
|
|
2
|
-
//# sourceMappingURL=page
|
|
1
|
+
import{t as e}from"./i18n-CywLsdxn.js";import{t}from"./vendor-vK2W55bZ.js";import{$ as n,At as r,Q as i,R as a,Y as o,c as s,et as c,j as l}from"./index-cHWd4mGO.js";import{t as u}from"./ToolbarPanels-CbF3qEos.js";var d=t();function f(){let{t}=e(),f=(e,n)=>t(`ModerateEntityTags.${e}`,n),p=o(r().activeSession$)??void 0,m=n(),h=i(p,e=>a(e,m)),g=o(h?.browse.activePanel$)??null,_=o(h?.entityTypes.value$)??[],v=o(h?.entityTypes.loading$)??!0,y=o(h?.entityTypes.error$)??null,b=o(h?.newTag$)??``,x=o(h?.error$)??``,S=o(h?.isAdding$)??!1,{theme:C}=c();return y?(0,d.jsxs)(`div`,{className:`flex flex-col items-center justify-center gap-3 py-20`,children:[(0,d.jsx)(`p`,{className:`text-gray-600 dark:text-gray-300`,children:f(`loadFailed`)}),(0,d.jsx)(`button`,{type:`button`,onClick:h?.entityTypes.retry,className:`semiont-button`,"data-variant":`secondary`,children:f(`retry`)})]}):v?(0,d.jsx)(`div`,{className:`flex items-center justify-center py-20`,children:(0,d.jsx)(`p`,{className:`text-gray-600 dark:text-gray-300`,children:f(`loading`)})}):h?(0,d.jsx)(s,{entityTypes:_,isLoading:v,error:x,newTag:b,onNewTagChange:h?.setNewTag,onAddTag:h?.addTag,isAddingTag:S,theme:C,activePanel:g,translations:{pageTitle:f(`pageTitle`),pageDescription:f(`pageDescription`),sectionTitle:f(`sectionTitle`),sectionDescription:f(`sectionDescription`),inputPlaceholder:f(`inputPlaceholder`),addTag:f(`addTag`),adding:f(`adding`)},ToolbarPanels:u,Toolbar:l}):null}export{f as default};
|
|
2
|
+
//# sourceMappingURL=page-BWTL-Lea.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page
|
|
1
|
+
{"version":3,"file":"page-BWTL-Lea.js","names":[],"sources":["../../src/app/[locale]/moderate/entity-tags/page.tsx"],"sourcesContent":["import { useTranslation } from 'react-i18next';\nimport {\n Toolbar,\n useTheme,\n useShellStateUnit,\n useObservable,\n useSemiont,\n useSessionStateUnit,\n EntityTagsPage,\n} from '@semiont/react-ui';\nimport { createEntityTagsStateUnit } from '@semiont/react-ui';\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 session = useObservable(useSemiont().activeSession$) ?? undefined;\n\n const browseStateUnit = useShellStateUnit();\n const stateUnit = useSessionStateUnit(session, (s) => createEntityTagsStateUnit(s, browseStateUnit));\n\n const activePanel = useObservable(stateUnit?.browse.activePanel$) ?? null;\n const entityTypes = useObservable(stateUnit?.entityTypes.value$) ?? [];\n const isLoading = useObservable(stateUnit?.entityTypes.loading$) ?? true;\n // A terminally failed load is not still loading. Distinct from `error`\n // below, which is the ADD-tag error. See .plans/PANEL-FAILURE-STATES.md\n const loadError = useObservable(stateUnit?.entityTypes.error$) ?? null;\n const newTag = useObservable(stateUnit?.newTag$) ?? '';\n const error = useObservable(stateUnit?.error$) ?? '';\n const isAddingTag = useObservable(stateUnit?.isAdding$) ?? false;\n\n const { theme } = useTheme();\n\n if (loadError) {\n return (\n <div className=\"flex flex-col items-center justify-center gap-3 py-20\">\n <p className=\"text-gray-600 dark:text-gray-300\">{t('loadFailed')}</p>\n <button type=\"button\" onClick={stateUnit?.entityTypes.retry} className=\"semiont-button\" data-variant=\"secondary\">\n {t('retry')}\n </button>\n </div>\n );\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 if (!stateUnit) return null;\n\n return (\n <EntityTagsPage\n entityTypes={entityTypes}\n isLoading={isLoading}\n error={error}\n newTag={newTag}\n onNewTagChange={stateUnit?.setNewTag}\n onAddTag={stateUnit?.addTag}\n isAddingTag={isAddingTag}\n theme={theme}\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"],"mappings":"gOAaA,SAAwB,GAAwB,CAC9C,GAAM,CAAK,GAAO,EAAe,EAC3B,GAAK,EAAW,IAAgC,EAAG,sBAAsB,IAAK,CAAQ,EACtF,EAAU,EAAc,EAAW,CAAC,CAAC,cAAc,GAAK,IAAA,GAExD,EAAkB,EAAkB,EACpC,EAAY,EAAoB,EAAU,GAAM,EAA0B,EAAG,CAAe,CAAC,EAE7F,EAAc,EAAc,GAAW,OAAO,YAAY,GAAK,KAC/D,EAAc,EAAc,GAAW,YAAY,MAAM,GAAK,CAAC,EAC/D,EAAY,EAAc,GAAW,YAAY,QAAQ,GAAK,GAG9D,EAAY,EAAc,GAAW,YAAY,MAAM,GAAK,KAC5D,EAAS,EAAc,GAAW,OAAO,GAAK,GAC9C,EAAQ,EAAc,GAAW,MAAM,GAAK,GAC5C,EAAc,EAAc,GAAW,SAAS,GAAK,GAErD,CAAE,SAAU,EAAS,EAuB3B,OArBI,GAEA,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,wDAAf,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,IAAD,CAAG,UAAU,mCAAoC,SAAA,EAAE,YAAY,CAAK,CAAA,GACpE,EAAA,EAAA,IAAA,CAAC,SAAD,CAAQ,KAAK,SAAS,QAAS,GAAW,YAAY,MAAO,UAAU,iBAAiB,eAAa,YAClG,SAAA,EAAE,OAAO,CACJ,CAAA,CACL,IAIL,GAEA,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,yCACb,UAAA,EAAA,EAAA,IAAA,CAAC,IAAD,CAAG,UAAU,mCAAoC,SAAA,EAAE,SAAS,CAAK,CAAA,CAC9D,CAAA,EAIJ,GAGH,EAAA,EAAA,IAAA,CAAC,EAAD,CACe,cACF,YACJ,QACC,SACR,eAAgB,GAAW,UAC3B,SAAU,GAAW,OACR,cACN,QACM,cACb,aAAc,CACZ,UAAW,EAAE,WAAW,EACxB,gBAAiB,EAAE,iBAAiB,EACpC,aAAc,EAAE,cAAc,EAC9B,mBAAoB,EAAE,oBAAoB,EAC1C,iBAAkB,EAAE,kBAAkB,EACtC,OAAQ,EAAE,QAAQ,EAClB,OAAQ,EAAE,QAAQ,CACpB,EACe,gBACN,SACV,CAAA,EAxBoB,IA0BzB"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{t as e}from"./i18n-
|
|
2
|
-
//# sourceMappingURL=page-
|
|
1
|
+
import{t as e}from"./i18n-CywLsdxn.js";import{t}from"./vendor-vK2W55bZ.js";import{$ as n,Y as r,et as i,j as a,m as o}from"./index-cHWd4mGO.js";import{t as s}from"./ToolbarPanels-CbF3qEos.js";var c=t();function l(){let{t}=e(),l=(e,n)=>t(`ModerateRecent.${e}`,n),u=n(),d=r(u.activePanel$)??null,{theme:f}=i();return(0,c.jsx)(o,{hasDocuments:!1,isLoading:!1,theme:f,activePanel:d,translations:{pageTitle:l(`pageTitle`),pageDescription:l(`pageDescription`),sectionTitle:l(`sectionTitle`),sectionDescription:l(`sectionDescription`),noDocuments:l(`noDocuments`),activityWillAppear:l(`activityWillAppear`),loading:l(`loading`)},ToolbarPanels:s,Toolbar:a})}export{l as default};
|
|
2
|
+
//# sourceMappingURL=page-BfbTxteF.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page-
|
|
1
|
+
{"version":3,"file":"page-BfbTxteF.js","names":[],"sources":["../../src/app/[locale]/moderate/recent/page.tsx"],"sourcesContent":["import { useTranslation } from 'react-i18next';\nimport { Toolbar } from '@semiont/react-ui';\nimport { ToolbarPanels } from '@/components/toolbar/ToolbarPanels';\nimport { useTheme, useShellStateUnit, useObservable } from '@semiont/react-ui';\nimport { RecentDocumentsPage } from '@semiont/react-ui';\n\n// Authentication is handled by middleware (proxy.ts)\n// Only authenticated moderators/admins can reach this page\n\nexport default function RecentDocumentsPageWrapper() {\n const { t: _t } = useTranslation();\n const t = (k: string, p?: Record<string, unknown>) => _t(`ModerateRecent.${k}`, p as any) as string;\n\n // Toolbar and settings state\n const browseStateUnit = useShellStateUnit();\n const activePanel = useObservable(browseStateUnit.activePanel$) ?? null;\n const { theme } = useTheme();\n\n\n\n return (\n <RecentDocumentsPage\n hasDocuments={false}\n isLoading={false}\n theme={theme}\n activePanel={activePanel}\n translations={{\n pageTitle: t('pageTitle'),\n pageDescription: t('pageDescription'),\n sectionTitle: t('sectionTitle'),\n sectionDescription: t('sectionDescription'),\n noDocuments: t('noDocuments'),\n activityWillAppear: t('activityWillAppear'),\n loading: t('loading'),\n }}\n ToolbarPanels={ToolbarPanels}\n Toolbar={Toolbar}\n />\n );\n}\n"],"mappings":"0MASA,SAAwB,GAA6B,CACnD,GAAM,CAAK,GAAO,EAAe,EAC3B,GAAK,EAAW,IAAgC,EAAG,kBAAkB,IAAK,CAAQ,EAGlF,EAAkB,EAAkB,EACpC,EAAc,EAAc,EAAgB,YAAY,GAAK,KAC7D,CAAE,SAAU,EAAS,EAI3B,OACE,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,aAAc,GACd,UAAW,GACJ,QACM,cACb,aAAc,CACZ,UAAW,EAAE,WAAW,EACxB,gBAAiB,EAAE,iBAAiB,EACpC,aAAc,EAAE,cAAc,EAC9B,mBAAoB,EAAE,oBAAoB,EAC1C,YAAa,EAAE,aAAa,EAC5B,mBAAoB,EAAE,oBAAoB,EAC1C,QAAS,EAAE,SAAS,CACtB,EACe,gBACN,SACV,CAAA,CAEL"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{t as e}from"./i18n-
|
|
2
|
-
//# sourceMappingURL=page-
|
|
1
|
+
import{t as e}from"./i18n-CywLsdxn.js";import{t}from"./vendor-vK2W55bZ.js";import{$ as n,At as r,L as i,Q as a,Y as o,et as s,v as c}from"./index-cHWd4mGO.js";import{t as l}from"./ToolbarPanels-CbF3qEos.js";import{i as u}from"./routing-D-GkAfgE.js";var d=t();function f(){let{t}=e(),f=(e,n)=>t(`Discover.${e}`,n),p=u(),m=o(r().activeSession$)??void 0,h=n(),g=a(m,e=>i(e,h)),_=o(g?.browse.activePanel$)??null,v=o(g?.recent.value$)??[],y=o(g?.entityTypes.value$)??[],b=o(g?.recent.error$)??null,x=o(g?.recent.loading$)??!0,S=o(g?.search.query$)??``,C=o(g?.search.state$),w=C?.results??[],T=C?.isSearching??!1,E=C?.matchKind,D=o(g?.selectedEntityType$)??``,{resolvedTheme:O}=s();return g?(0,d.jsx)(c,{recentDocuments:v,searchDocuments:w,entityTypes:y,isLoadingRecent:x,recentError:b,onRetryRecent:g?.recent.retry,isSearching:T,...E?{searchMatchKind:E}:{},searchQuery:S,onSearchQueryChange:g?.search.setQuery,selectedEntityType:D,onSelectedEntityTypeChange:g?.setSelectedEntityType,theme:O,activePanel:_,onNavigateToResource:e=>p.push(`/know/resource/${encodeURIComponent(e)}`),onNavigateToCompose:()=>p.push(`/know/compose`),translations:{title:f(`title`),subtitle:f(`subtitle`),searchPlaceholder:f(`searchPlaceholder`),searchButton:f(`searchButton`),searching:f(`searching`),semanticFallbackNotice:f(`semanticFallbackNotice`),filterByEntityType:f(`filterByEntityType`),all:f(`all`),recentResources:f(`recentResources`),searchResults:e=>f(`searchResults`,{count:e}),documentsTaggedWith:e=>f(`documentsTaggedWith`,{entityType:e}),noResultsFound:e=>f(`noResultsFound`,{query:e}),noResourcesAvailable:f(`noResourcesAvailable`),composeFirstResource:f(`composeFirstResource`),archived:f(`archived`),created:f(`created`),loadingKnowledgeBase:f(`loadingKnowledgeBase`),recentFailed:f(`recentFailed`),retry:f(`retry`)},ToolbarPanels:l}):null}export{f as default};
|
|
2
|
+
//# sourceMappingURL=page-BhPjX09z.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page-
|
|
1
|
+
{"version":3,"file":"page-BhPjX09z.js","names":[],"sources":["../../src/app/[locale]/know/discover/page.tsx"],"sourcesContent":["\"use client\";\n\nimport { useTranslation } from 'react-i18next';\nimport { useRouter } from '@/i18n/routing';\nimport {\n useTheme,\n useObservable,\n useSemiont,\n useSessionStateUnit,\n ResourceDiscoveryPage,\n} from '@semiont/react-ui';\nimport { ToolbarPanels } from '@/components/toolbar/ToolbarPanels';\nimport { useShellStateUnit } from '@semiont/react-ui';\nimport { createDiscoverStateUnit } from '@semiont/react-ui';\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 session = useObservable(useSemiont().activeSession$) ?? undefined;\n\n const browseStateUnit = useShellStateUnit();\n const stateUnit = useSessionStateUnit(session, (s) => createDiscoverStateUnit(s, browseStateUnit));\n\n const activePanel = useObservable(stateUnit?.browse.activePanel$) ?? null;\n const recentDocuments = useObservable(stateUnit?.recent.value$) ?? [];\n const entityTypes = useObservable(stateUnit?.entityTypes.value$) ?? [];\n // Three states: a terminally failed list has no value either, so deriving\n // \"loading\" from `undefined` left this route spinning for ever.\n // See .plans/PANEL-FAILURE-STATES.md\n const recentError = useObservable(stateUnit?.recent.error$) ?? null;\n const isLoadingRecent = useObservable(stateUnit?.recent.loading$) ?? true;\n const searchQuery = useObservable(stateUnit?.search.query$) ?? '';\n const searchState = useObservable(stateUnit?.search.state$);\n const searchDocuments = searchState?.results ?? [];\n const isSearching = searchState?.isSearching ?? false;\n // Read off the SAME value as the results, never a sibling observable (S10).\n const searchMatchKind = searchState?.matchKind;\n const selectedEntityType = useObservable(stateUnit?.selectedEntityType$) ?? '';\n\n const { resolvedTheme } = useTheme();\n\n if (!stateUnit) return null;\n\n return (\n <ResourceDiscoveryPage\n recentDocuments={recentDocuments}\n searchDocuments={searchDocuments}\n entityTypes={entityTypes}\n isLoadingRecent={isLoadingRecent}\n recentError={recentError}\n onRetryRecent={stateUnit?.recent.retry}\n isSearching={isSearching}\n {...(searchMatchKind ? { searchMatchKind } : {})}\n searchQuery={searchQuery}\n onSearchQueryChange={stateUnit?.search.setQuery}\n selectedEntityType={selectedEntityType}\n onSelectedEntityTypeChange={stateUnit?.setSelectedEntityType}\n theme={resolvedTheme}\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 semanticFallbackNotice: t('semanticFallbackNotice'),\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 recentFailed: t('recentFailed'),\n retry: t('retry'),\n }}\n ToolbarPanels={ToolbarPanels}\n />\n );\n}\n"],"mappings":"mQAcA,SAAwB,GAAe,CACrC,GAAM,CAAK,GAAO,EAAe,EAC3B,GAAK,EAAW,IAAgC,EAAG,YAAY,IAAK,CAAQ,EAC5E,EAAS,EAAU,EACnB,EAAU,EAAc,EAAW,CAAC,CAAC,cAAc,GAAK,IAAA,GAExD,EAAkB,EAAkB,EACpC,EAAY,EAAoB,EAAU,GAAM,EAAwB,EAAG,CAAe,CAAC,EAE3F,EAAc,EAAc,GAAW,OAAO,YAAY,GAAK,KAC/D,EAAkB,EAAc,GAAW,OAAO,MAAM,GAAK,CAAC,EAC9D,EAAc,EAAc,GAAW,YAAY,MAAM,GAAK,CAAC,EAI/D,EAAc,EAAc,GAAW,OAAO,MAAM,GAAK,KACzD,EAAkB,EAAc,GAAW,OAAO,QAAQ,GAAK,GAC/D,EAAc,EAAc,GAAW,OAAO,MAAM,GAAK,GACzD,EAAc,EAAc,GAAW,OAAO,MAAM,EACpD,EAAkB,GAAa,SAAW,CAAC,EAC3C,EAAc,GAAa,aAAe,GAE1C,EAAkB,GAAa,UAC/B,EAAqB,EAAc,GAAW,mBAAmB,GAAK,GAEtE,CAAE,iBAAkB,EAAS,EAInC,OAFK,GAGH,EAAA,EAAA,IAAA,CAAC,EAAD,CACmB,kBACA,kBACJ,cACI,kBACJ,cACb,cAAe,GAAW,OAAO,MACpB,cACb,GAAK,EAAkB,CAAE,iBAAgB,EAAI,CAAC,EACjC,cACb,oBAAqB,GAAW,OAAO,SACnB,qBACpB,2BAA4B,GAAW,sBACvC,MAAO,EACM,cACb,qBAAuB,GAAe,EAAO,KAAK,kBAAkB,mBAAmB,CAAU,GAAG,EACpG,wBAA2B,EAAO,KAAK,eAAe,EACtD,aAAc,CACZ,MAAO,EAAE,OAAO,EAChB,SAAU,EAAE,UAAU,EACtB,kBAAmB,EAAE,mBAAmB,EACxC,aAAc,EAAE,cAAc,EAC9B,UAAW,EAAE,WAAW,EACxB,uBAAwB,EAAE,wBAAwB,EAClD,mBAAoB,EAAE,oBAAoB,EAC1C,IAAK,EAAE,KAAK,EACZ,gBAAiB,EAAE,iBAAiB,EACpC,cAAgB,GAAkB,EAAE,gBAAiB,CAAE,OAAM,CAAC,EAC9D,oBAAsB,GAAuB,EAAE,sBAAuB,CAAE,YAAW,CAAC,EACpF,eAAiB,GAAkB,EAAE,iBAAkB,CAAE,OAAM,CAAC,EAChE,qBAAsB,EAAE,sBAAsB,EAC9C,qBAAsB,EAAE,sBAAsB,EAC9C,SAAU,EAAE,UAAU,EACtB,QAAS,EAAE,SAAS,EACpB,qBAAsB,EAAE,sBAAsB,EAC9C,aAAc,EAAE,cAAc,EAC9B,MAAO,EAAE,OAAO,CAClB,EACe,eAChB,CAAA,EA1CoB,IA4CzB"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{i as t}from"./i18n-
|
|
2
|
-
//# sourceMappingURL=page-
|
|
1
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{i as t}from"./i18n-CywLsdxn.js";import{i as n}from"./routing-D-GkAfgE.js";var r=e(t());function i(){let e=n();return(0,r.useEffect)(()=>{e.replace(`/know/discover`)},[e]),null}export{i as default};
|
|
2
|
+
//# sourceMappingURL=page-Bk2UhTqA.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page-
|
|
1
|
+
{"version":3,"file":"page-Bk2UhTqA.js","names":[],"sources":["../../src/app/[locale]/auth/connect/page.tsx"],"sourcesContent":["import { useEffect } from 'react';\nimport { useRouter } from '@/i18n/routing';\n\n/**\n * Legacy connect page — redirects to /know/discover.\n * Authentication is now handled inline in the Knowledge Base Panel.\n */\nexport default function ConnectPage() {\n const router = useRouter();\n\n useEffect(() => {\n router.replace('/know/discover');\n }, [router]);\n\n return null;\n}\n"],"mappings":"iJAOA,SAAwB,GAAc,CACpC,IAAM,EAAS,EAAU,EAMzB,OAJA,EAAA,EAAA,UAAA,KAAgB,CACd,EAAO,QAAQ,gBAAgB,CACjC,EAAG,CAAC,CAAM,CAAC,EAEJ,IACT"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{i as t,t as n}from"./i18n-
|
|
2
|
-
//# sourceMappingURL=page-
|
|
1
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{i as t,t as n}from"./i18n-CywLsdxn.js";import{t as r}from"./vendor-vK2W55bZ.js";import{$ as i,At as a,Ft as o,Y as s,et as c,j as l,k as u}from"./index-cHWd4mGO.js";import{t as d}from"./ToolbarPanels-CbF3qEos.js";var f=e(t()),p=r();function m(){let{t:e}=n(),t=(t,n)=>e(`ModerateTagSchemas.${t}`,n),r=i(),m=s(r.activePanel$)??null,{theme:h}=c(),g=s(a().activeSession$),_=(0,f.useMemo)(()=>g?.client.browse.tagSchemas()??null,[g]),v=s(_),y=v&&o(v)?v.value:[],b=v===void 0||v.status===`pending`;return(0,p.jsx)(u,{schemas:y,isLoading:b,theme:h,activePanel:m,translations:{pageTitle:t(`pageTitle`),pageDescription:t(`pageDescription`),categories:t(`categories`),loading:t(`loading`)},ToolbarPanels:d,Toolbar:l})}export{m as default};
|
|
2
|
+
//# sourceMappingURL=page-CJnENX8F.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page-
|
|
1
|
+
{"version":3,"file":"page-CJnENX8F.js","names":[],"sources":["../../src/app/[locale]/moderate/tag-schemas/page.tsx"],"sourcesContent":["import { useMemo } from 'react';\nimport { isReady } from '@semiont/sdk';\nimport { useTranslation } from 'react-i18next';\nimport { Toolbar } from '@semiont/react-ui';\nimport { ToolbarPanels } from '@/components/toolbar/ToolbarPanels';\nimport { useTheme, useShellStateUnit, useObservable, useSemiont } from '@semiont/react-ui';\nimport { TagSchemasPage } from '@semiont/react-ui';\n\n// Authentication is handled by middleware (proxy.ts)\n// Only authenticated moderators/admins can reach this page\n\nexport default function TagSchemasPageWrapper() {\n const { t: _t } = useTranslation();\n const t = (k: string, p?: Record<string, unknown>) => _t(`ModerateTagSchemas.${k}`, p as any) as string;\n\n // Toolbar and settings state\n const browseStateUnit = useShellStateUnit();\n const activePanel = useObservable(browseStateUnit.activePanel$) ?? null;\n const { theme } = useTheme();\n\n\n\n // Subscribe to the per-KB tag-schema registry. Schemas are runtime-\n // registered by the KB at session start (frame.addTagSchema). The\n // observable yields `undefined` during the initial fetch — surfaced as\n // `isLoading` to the page component.\n const session = useObservable(useSemiont().activeSession$);\n const tagSchemas$ = useMemo(\n () => session?.client.browse.tagSchemas() ?? null,\n [session],\n );\n const schemasObserved = useObservable(tagSchemas$);\n // D1 unwrap: the third outcome is explicit — a failed registry read shows\n // as not-loading with an empty list here (failure UI is follow-up work).\n const schemas = schemasObserved && isReady(schemasObserved) ? schemasObserved.value : [];\n const isLoading = schemasObserved === undefined || schemasObserved.status === 'pending';\n\n return (\n <TagSchemasPage\n schemas={schemas}\n isLoading={isLoading}\n theme={theme}\n activePanel={activePanel}\n translations={{\n pageTitle: t('pageTitle'),\n pageDescription: t('pageDescription'),\n categories: t('categories'),\n loading: t('loading'),\n }}\n ToolbarPanels={ToolbarPanels}\n Toolbar={Toolbar}\n />\n );\n}\n"],"mappings":"kSAWA,SAAwB,GAAwB,CAC9C,GAAM,CAAE,EAAG,GAAO,EAAe,EAC3B,GAAK,EAAW,IAAgC,EAAG,sBAAsB,IAAK,CAAQ,EAGtF,EAAkB,EAAkB,EACpC,EAAc,EAAc,EAAgB,YAAY,GAAK,KAC7D,CAAE,SAAU,EAAS,EAQrB,EAAU,EAAc,EAAW,CAAC,CAAC,cAAc,EACnD,GAAA,EAAc,EAAA,QAAA,KACZ,GAAS,OAAO,OAAO,WAAW,GAAK,KAC7C,CAAC,CAAO,CACV,EACM,EAAkB,EAAc,CAAW,EAG3C,EAAU,GAAmB,EAAQ,CAAe,EAAI,EAAgB,MAAQ,CAAC,EACjF,EAAY,IAAoB,IAAA,IAAa,EAAgB,SAAW,UAE9E,OACE,EAAA,EAAA,IAAA,CAAC,EAAD,CACW,UACE,YACJ,QACM,cACb,aAAc,CACZ,UAAW,EAAE,WAAW,EACxB,gBAAiB,EAAE,iBAAiB,EACpC,WAAY,EAAE,YAAY,EAC1B,QAAS,EAAE,SAAS,CACtB,EACe,gBACN,SACV,CAAA,CAEL"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{i as t,t as n}from"./i18n-
|
|
2
|
-
//# sourceMappingURL=page-
|
|
1
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{i as t,t as n}from"./i18n-CywLsdxn.js";import{t as r}from"./vendor-vK2W55bZ.js";import{At as i,Y as a}from"./index-cHWd4mGO.js";import{i as o}from"./routing-D-GkAfgE.js";var s=e(t()),c=r();function l(){let{t:e}=n(),t=(t,n)=>e(`Sidebar.${t}`,n),r=o(),l=i(),u=a(l.activeSession$)??null,d=a(l.sessionActivating$)??!1,f=a(l.lastViewedResource$)??null,p=u!==null||!d,m=(0,s.useRef)(!1);return(0,s.useEffect)(()=>{!p||m.current||(m.current=!0,r.replace(f?`/know/resource/${encodeURIComponent(f)}`:`/know/discover`))},[p,f,r]),(0,c.jsx)(`div`,{className:`flex items-center justify-center py-20`,children:(0,c.jsx)(`p`,{className:`text-gray-600 dark:text-gray-300`,children:t(p?`redirecting`:`loading`)})})}export{l as default};
|
|
2
|
+
//# sourceMappingURL=page-Ct7GNMjQ.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page-
|
|
1
|
+
{"version":3,"file":"page-Ct7GNMjQ.js","names":[],"sources":["../../src/app/[locale]/know/page.tsx"],"sourcesContent":["import { useEffect, useRef } from 'react';\nimport { useRouter } from '@/i18n/routing';\nimport { useTranslation } from 'react-i18next';\nimport { useSemiont, useObservable } from '@semiont/react-ui';\n\n/**\n * The /know landing route: resume where the user left off in the ACTIVE\n * knowledge base, or send them to discover.\n *\n * \"Where was I\" is per-KB state, read from `lastViewedResource$` — a\n * projection of the active, connected KB. A global record would redirect\n * into the PREVIOUSLY active KB's resource after a switch: an id the new\n * gateway has never heard of, so a guaranteed 404.\n * See .plans/bugs/resource-page-frozen-on-disposed-client-after-kb-switch.md\n */\nexport default function KnowledgePage() {\n const { t: _t } = useTranslation();\n const t = (k: string, p?: Record<string, unknown>) => _t(`Sidebar.${k}`, p as any) as string;\n const router = useRouter();\n const semiont = useSemiont();\n\n const session = useObservable(semiont.activeSession$) ?? null;\n const activating = useObservable(semiont.sessionActivating$) ?? false;\n const lastViewed = useObservable(semiont.lastViewedResource$) ?? null;\n\n // The projection only carries an answer once a session exists, so a\n // redirect decided during activation would send every cold load to\n // discover no matter where the user actually was. Wait for a session, or\n // for activation to conclude without one (nothing connected → discover).\n const resolved = session !== null || !activating;\n\n const redirected = useRef(false);\n useEffect(() => {\n if (!resolved || redirected.current) return;\n redirected.current = true;\n router.replace(\n lastViewed ? `/know/resource/${encodeURIComponent(lastViewed)}` : '/know/discover',\n );\n }, [resolved, lastViewed, router]);\n\n return (\n <div className=\"flex items-center justify-center py-20\">\n <p className=\"text-gray-600 dark:text-gray-300\">{t(resolved ? 'redirecting' : 'loading')}</p>\n </div>\n );\n}\n"],"mappings":"uPAeA,SAAwB,GAAgB,CACtC,GAAM,CAAE,EAAG,GAAO,EAAe,EAC3B,GAAK,EAAW,IAAgC,EAAG,WAAW,IAAK,CAAQ,EAC3E,EAAS,EAAU,EACnB,EAAU,EAAW,EAErB,EAAU,EAAc,EAAQ,cAAc,GAAK,KACnD,EAAa,EAAc,EAAQ,kBAAkB,GAAK,GAC1D,EAAa,EAAc,EAAQ,mBAAmB,GAAK,KAM3D,EAAW,IAAY,MAAQ,CAAC,EAEhC,GAAA,EAAa,EAAA,OAAA,CAAO,EAAK,EAS/B,OARA,EAAA,EAAA,UAAA,KAAgB,CACV,CAAC,GAAY,EAAW,UAC5B,EAAW,QAAU,GACrB,EAAO,QACL,EAAa,kBAAkB,mBAAmB,CAAU,IAAM,gBACpE,EACF,EAAG,CAAC,EAAU,EAAY,CAAM,CAAC,GAG/B,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,yCACb,UAAA,EAAA,EAAA,IAAA,CAAC,IAAD,CAAG,UAAU,mCAAoC,SAAA,EAAE,EAAW,cAAgB,SAAS,CAAK,CAAA,CACzF,CAAA,CAET"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{i as t,t as n}from"./i18n-
|
|
1
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{i as t,t as n}from"./i18n-CywLsdxn.js";import{t as r}from"./vendor-vK2W55bZ.js";import{p as i}from"./index-cHWd4mGO.js";import{t as a}from"./KeyboardShortcutsContext-CSFk3vP6.js";import{t as o}from"./CookiePreferences-CWZIFYNC.js";import{n as s,t as c}from"./routing-D-GkAfgE.js";import{n as l,t as u}from"./routing-D5d0e59H.js";var d=e(t()),f=r();function p(){let{t:e}=n(),t=(t,n)=>e(`Terms.${t}`,n),{t:r}=n(),p=(e,t)=>r(`Footer.${e}`,t),{t:m}=n(),h=(e,t)=>m(`Navigation.${e}`,t),{t:g}=n(),_=(e,t)=>g(`Home.${e}`,t),v=s(),y=(0,d.useContext)(a);return(0,f.jsx)(i,{Link:u,routes:l,t:p,tNav:h,tHome:_,CookiePreferences:o,...y?.openKeyboardHelp&&{onOpenKeyboardHelp:y.openKeyboardHelp},className:`semiont-static-page`,children:(0,f.jsx)(`div`,{className:`semiont-static-container`,children:(0,f.jsxs)(`div`,{className:`semiont-static-content`,children:[(0,f.jsxs)(`header`,{className:`semiont-static-header`,children:[(0,f.jsx)(`h1`,{className:`semiont-static-title`,children:t(`pageTitle`)}),(0,f.jsx)(`p`,{className:`semiont-static-subtitle`,children:t(`pageSubtitle`)})]}),(0,f.jsxs)(`article`,{className:`semiont-static-article`,children:[(0,f.jsx)(`h2`,{children:t(`aupTitle`)}),(0,f.jsx)(`p`,{children:t(`aup`)}),(0,f.jsx)(`h3`,{children:t(`prohibitedTitle`)}),(0,f.jsx)(`p`,{children:t(`prohibitedIntro`)}),(0,f.jsx)(`ul`,{children:t(`prohibited`).split(`
|
|
2
2
|
`).map((e,t)=>(0,f.jsx)(`li`,{children:e},t))}),(0,f.jsx)(`h3`,{children:t(`aiAllianceTitle`)}),(0,f.jsxs)(`p`,{children:[t(`aiAllianceIntro`),` `,(0,f.jsx)(`a`,{href:`https://ai-alliance.cdn.prismic.io/ai-alliance/Zl-MG5m069VX1dgH_AIAllianceCodeofConduct.pdf`,target:`_blank`,rel:`noopener noreferrer`,className:`semiont-static-link`,children:t(`aiAllianceLink`)}),t(`aiAllianceIncludes`)]}),(0,f.jsx)(`ul`,{children:t(`aiAlliance`).split(`
|
|
3
3
|
`).map((e,t)=>(0,f.jsx)(`li`,{children:e},t))}),(0,f.jsx)(`h3`,{children:t(`responsibilitiesTitle`)}),(0,f.jsx)(`p`,{children:t(`responsibilitiesIntro`)}),(0,f.jsx)(`ul`,{children:t(`responsibilities`).split(`
|
|
4
4
|
`).map((e,t)=>(0,f.jsx)(`li`,{children:e},t))}),(0,f.jsx)(`h3`,{children:t(`moderationTitle`)}),(0,f.jsx)(`p`,{children:t(`moderation`)}),(0,f.jsx)(`h3`,{children:t(`privacyTitle`)}),(0,f.jsxs)(`p`,{children:[t(`privacy`).split(t(`privacyLink`))[0],(0,f.jsx)(c,{to:`/${v}/privacy`,className:`semiont-static-link`,children:t(`privacyLink`)}),t(`privacy`).split(t(`privacyLink`))[1]]}),(0,f.jsx)(`h3`,{children:t(`ipTitle`)}),(0,f.jsx)(`p`,{children:t(`ip`)}),(0,f.jsx)(`h3`,{children:t(`liabilityTitle`)}),(0,f.jsx)(`p`,{children:t(`liability`)}),(0,f.jsx)(`h3`,{children:t(`changesTitle`)}),(0,f.jsx)(`p`,{children:t(`changes`)}),(0,f.jsx)(`h3`,{children:t(`contactTitle`)}),(0,f.jsx)(`p`,{children:t(`contact`)}),(0,f.jsx)(`footer`,{className:`semiont-static-footer`,children:(0,f.jsx)(`p`,{children:t(`lastUpdated`,{date:new Date().toLocaleDateString()})})})]})]})})})}export{p as default};
|
|
5
|
-
//# sourceMappingURL=page-
|
|
5
|
+
//# sourceMappingURL=page-CywSuXyN.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page-
|
|
1
|
+
{"version":3,"file":"page-CywSuXyN.js","names":[],"sources":["../../src/app/[locale]/terms/page.tsx"],"sourcesContent":["import { useContext } from 'react';\nimport { Link } from '@/i18n/routing';\nimport { useTranslation } from 'react-i18next';\nimport { useLocale } from '@/i18n/routing';\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 TermsOfService() {\n const { t: _t } = useTranslation();\n const t = (k: string, p?: Record<string, unknown>) => _t(`Terms.${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 locale = useLocale();\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\">\n {t('pageTitle')}\n </h1>\n <p className=\"semiont-static-subtitle\">\n {t('pageSubtitle')}\n </p>\n </header>\n\n <article className=\"semiont-static-article\">\n <h2>{t('aupTitle')}</h2>\n\n <p>\n {t('aup')}\n </p>\n\n <h3>{t('prohibitedTitle')}</h3>\n <p>{t('prohibitedIntro')}</p>\n <ul>\n {t('prohibited').split('\\n').map((item, i) => (\n <li key={i}>{item}</li>\n ))}\n </ul>\n\n <h3>{t('aiAllianceTitle')}</h3>\n <p>\n {t('aiAllianceIntro')}{' '}\n <a\n href=\"https://ai-alliance.cdn.prismic.io/ai-alliance/Zl-MG5m069VX1dgH_AIAllianceCodeofConduct.pdf\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"semiont-static-link\"\n >\n {t('aiAllianceLink')}\n </a>\n {t('aiAllianceIncludes')}\n </p>\n <ul>\n {t('aiAlliance').split('\\n').map((item, i) => (\n <li key={i}>{item}</li>\n ))}\n </ul>\n\n <h3>{t('responsibilitiesTitle')}</h3>\n <p>{t('responsibilitiesIntro')}</p>\n <ul>\n {t('responsibilities').split('\\n').map((item, i) => (\n <li key={i}>{item}</li>\n ))}\n </ul>\n\n <h3>{t('moderationTitle')}</h3>\n <p>\n {t('moderation')}\n </p>\n\n <h3>{t('privacyTitle')}</h3>\n <p>\n {t('privacy').split(t('privacyLink'))[0]}\n <Link to={`/${locale}/privacy`} className=\"semiont-static-link\">\n {t('privacyLink')}\n </Link>\n {t('privacy').split(t('privacyLink'))[1]}\n </p>\n\n <h3>{t('ipTitle')}</h3>\n <p>\n {t('ip')}\n </p>\n\n <h3>{t('liabilityTitle')}</h3>\n <p>\n {t('liability')}\n </p>\n\n <h3>{t('changesTitle')}</h3>\n <p>\n {t('changes')}\n </p>\n\n <h3>{t('contactTitle')}</h3>\n <p>\n {t('contact')}\n </p>\n\n <footer className=\"semiont-static-footer\">\n <p>\n {t('lastUpdated', { date: new Date().toLocaleDateString() })}\n </p>\n </footer>\n </article>\n\n </div>\n </div>\n </PageLayout>\n );\n}"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{i as t,t as n}from"./i18n-
|
|
2
|
-
//# sourceMappingURL=page-
|
|
1
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{i as t,t as n}from"./i18n-CywLsdxn.js";import{t as r}from"./vendor-vK2W55bZ.js";import{$ as i,At as a,O as o,Y as s,et as c,j as l,t as u}from"./index-cHWd4mGO.js";import{t as d}from"./ToolbarPanels-CbF3qEos.js";import{t as f}from"./CommandLineIcon-B3W-9AYr.js";var p=e(t());function m({title:e,titleId:t,...n},r){return p.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:r,"aria-labelledby":t},n),e?p.createElement(`title`,{id:t},e):null,p.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`}))}var h=p.forwardRef(m);function g({title:e,titleId:t,...n},r){return p.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:r,"aria-labelledby":t},n),e?p.createElement(`title`,{id:t},e):null,p.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`}))}var _=p.forwardRef(g),v=r();function y(){let e=s(a().activeSession$),t=!!s(e?.user$);return(0,v.jsx)(o,{isFullyAuthenticated:t,isAuthenticated:t,hasValidGatewayToken:t})}function b(){let{t:e}=n(),t=(t,n)=>e(`AdminDevOps.${t}`,n),r=i(),a=s(r.activePanel$)??null,{theme:o}=c(),p=[{title:t(`systemMonitoring`),description:t(`systemMonitoringDescription`),icon:h,available:t(`systemMonitoringCLI`)},{title:t(`serviceManagement`),description:t(`serviceManagementDescription`),icon:_,available:t(`serviceManagementCLI`)},{title:t(`deploymentControl`),description:t(`deploymentControlDescription`),icon:f,available:t(`deploymentControlCLI`)}];return(0,v.jsx)(u,{suggestedFeatures:p,theme:o,activePanel:a,translations:{title:t(`title`),subtitle:t(`subtitle`),systemStatus:t(`systemStatus`),cliOperations:t(`cliOperations`),cliOperationsDescription:t(`cliOperationsDescription`),cliTitle:t(`cliTitle`),cliDescription:t(`cliDescription`)},StatusDisplay:y,ToolbarPanels:d,Toolbar:l})}export{b as default};
|
|
2
|
+
//# sourceMappingURL=page-D-_kPKxI.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page-
|
|
1
|
+
{"version":3,"file":"page-D-_kPKxI.js","names":["ForwardRef"],"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 {\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, useShellStateUnit, useObservable, 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 hasValidGatewayToken={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 browseStateUnit = useShellStateUnit();\n const activePanel = useObservable(browseStateUnit.activePanel$) ?? null;\n const { theme } = useTheme();\n\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 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"],"x_google_ignoreList":[0,1],"mappings":"6UACA,SAAS,EAAa,CACpB,QACA,UACA,GAAG,GACF,EAAQ,CACT,OAAoB,EAAM,cAAc,MAAO,OAAO,OAAO,CAC3D,MAAO,6BACP,KAAM,OACN,QAAS,YACT,YAAa,IACb,OAAQ,eACR,cAAe,OACf,YAAa,OACb,IAAK,EACL,kBAAmB,CACrB,EAAG,CAAK,EAAG,EAAqB,EAAM,cAAc,QAAS,CAC3D,GAAI,CACN,EAAG,CAAK,EAAI,KAAmB,EAAM,cAAc,OAAQ,CACzD,cAAe,QACf,eAAgB,QAChB,EAAG,kcACL,CAAC,CAAC,CACJ,CACA,IAAMA,EAA2B,EAAM,WAAW,CAAY,ECvB9D,SAAS,EAAW,CAClB,QACA,UACA,GAAG,GACF,EAAQ,CACT,OAAoB,EAAM,cAAc,MAAO,OAAO,OAAO,CAC3D,MAAO,6BACP,KAAM,OACN,QAAS,YACT,YAAa,IACb,OAAQ,eACR,cAAe,OACf,YAAa,OACb,IAAK,EACL,kBAAmB,CACrB,EAAG,CAAK,EAAG,EAAqB,EAAM,cAAc,QAAS,CAC3D,GAAI,CACN,EAAG,CAAK,EAAI,KAAmB,EAAM,cAAc,OAAQ,CACzD,cAAe,QACf,eAAgB,QAChB,EAAG,2SACL,CAAC,CAAC,CACJ,CACA,IAAM,EAA2B,EAAM,WAAW,CAAU,QCH5D,SAAS,GAAwB,CAC/B,IAAM,EAAU,EAAc,EAAW,CAAC,CAAC,cAAc,EAEnD,EAAS,CAAC,CADH,EAAc,GAAS,KACnB,EACjB,OACE,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,qBAAsB,EACtB,gBAAiB,EACjB,qBAAsB,CACvB,CAAA,CAEL,CAEA,SAAwB,GAAa,CACnC,GAAM,CAAE,EAAG,GAAO,EAAe,EAC3B,GAAK,EAAW,IAAgC,EAAG,eAAe,IAAK,CAAQ,EAG/E,EAAkB,EAAkB,EACpC,EAAc,EAAc,EAAgB,YAAY,GAAK,KAC7D,CAAE,SAAU,EAAS,EAIrB,EAAoB,CACxB,CACE,MAAO,EAAE,kBAAkB,EAC3B,YAAa,EAAE,6BAA6B,EAC5C,KAAM,EACN,UAAW,EAAE,qBAAqB,CACpC,EACA,CACE,MAAO,EAAE,mBAAmB,EAC5B,YAAa,EAAE,8BAA8B,EAC7C,KAAM,EACN,UAAW,EAAE,sBAAsB,CACrC,EACA,CACE,MAAO,EAAE,mBAAmB,EAC5B,YAAa,EAAE,8BAA8B,EAC7C,KAAM,EACN,UAAW,EAAE,sBAAsB,CACrC,CACF,EAEA,OACE,EAAA,EAAA,IAAA,CAAC,EAAD,CACqB,oBACZ,QACM,cACb,aAAc,CACZ,MAAO,EAAE,OAAO,EAChB,SAAU,EAAE,UAAU,EACtB,aAAc,EAAE,cAAc,EAC9B,cAAe,EAAE,eAAe,EAChC,yBAA0B,EAAE,0BAA0B,EACtD,SAAU,EAAE,UAAU,EACtB,eAAgB,EAAE,gBAAgB,CACpC,EACA,cAAe,EACA,gBACN,SACV,CAAA,CAEL"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{i as t,t as n}from"./i18n-
|
|
2
|
-
//# sourceMappingURL=page-
|
|
1
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{i as t,t as n}from"./i18n-CywLsdxn.js";import{t as r}from"./vendor-vK2W55bZ.js";import{C as i,N as a}from"./index-cHWd4mGO.js";import{i as o}from"./routing-D-GkAfgE.js";var s=e(t()),c=r(),l=5e3;function u(){let{t:e}=n(),t=t=>e(`Home.${t}`),r=o(),u=(0,s.useRef)(null),d=()=>{u.current&&clearTimeout(u.current),r.push(`/know/discover`)};return(0,s.useEffect)(()=>(u.current=setTimeout(d,l),()=>{u.current&&clearTimeout(u.current)}),[]),(0,c.jsxs)(`main`,{role:`main`,style:{display:`flex`,flexDirection:`column`,alignItems:`center`,justifyContent:`center`,minHeight:`100vh`,gap:`2rem`},children:[(0,c.jsx)(i,{t,size:`xl`,animated:!0}),(0,c.jsx)(`button`,{onClick:d,className:a.primary.base,children:t(`begin`)})]})}export{u as default};
|
|
2
|
+
//# sourceMappingURL=page-DLiS_avb.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page-
|
|
1
|
+
{"version":3,"file":"page-DLiS_avb.js","names":[],"sources":["../../src/app/[locale]/page.tsx"],"sourcesContent":["import { useEffect, useRef } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { SemiontBranding, buttonStyles } from '@semiont/react-ui';\nimport { useRouter } from '@/i18n/routing';\n\nconst AUTO_TRANSITION_MS = 5000;\n\nexport default function Home() {\n const { t: _t } = useTranslation();\n const t = (k: string) => _t(`Home.${k}`) as string;\n const router = useRouter();\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const goToWorkspace = () => {\n if (timerRef.current) clearTimeout(timerRef.current);\n router.push('/know/discover');\n };\n\n useEffect(() => {\n timerRef.current = setTimeout(goToWorkspace, AUTO_TRANSITION_MS);\n return () => { if (timerRef.current) clearTimeout(timerRef.current); };\n }, []);\n\n return (\n <main\n role=\"main\"\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n minHeight: '100vh',\n gap: '2rem',\n }}\n >\n <SemiontBranding t={t} size=\"xl\" animated={true} />\n <button onClick={goToWorkspace} className={buttonStyles.primary.base}>\n {t('begin')}\n </button>\n </main>\n );\n}\n"],"mappings":"sPAKM,EAAqB,IAE3B,SAAwB,GAAO,CAC7B,GAAM,CAAE,EAAG,GAAO,EAAe,EAC3B,EAAK,GAAc,EAAG,QAAQ,GAAG,EACjC,EAAS,EAAU,EACnB,GAAA,EAAW,EAAA,OAAA,CAA6C,IAAI,EAE5D,MAAsB,CACtB,EAAS,SAAS,aAAa,EAAS,OAAO,EACnD,EAAO,KAAK,gBAAgB,CAC9B,EAOA,OALA,EAAA,EAAA,UAAA,MACE,EAAS,QAAU,WAAW,EAAe,CAAkB,MAClD,CAAM,EAAS,SAAS,aAAa,EAAS,OAAO,CAAG,GACpE,CAAC,CAAC,GAGH,EAAA,EAAA,KAAA,CAAC,OAAD,CACE,KAAK,OACL,MAAO,CACL,QAAS,OACT,cAAe,SACf,WAAY,SACZ,eAAgB,SAChB,UAAW,QACX,IAAK,MACP,EATF,SAAA,EAWE,EAAA,EAAA,IAAA,CAAC,EAAD,CAAoB,EAAG,KAAK,KAAK,SAAU,EAAO,CAAA,GAClD,EAAA,EAAA,IAAA,CAAC,SAAD,CAAQ,QAAS,EAAe,UAAW,EAAa,QAAQ,KAC7D,SAAA,EAAE,OAAO,CACJ,CAAA,CACJ,GAEV"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{i as t,t as n}from"./i18n-
|
|
2
|
-
//# sourceMappingURL=page-
|
|
1
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{i as t,t as n}from"./i18n-CywLsdxn.js";import{i as r,t as i}from"./vendor-vK2W55bZ.js";import{$ as a,At as o,I as s,K as c,Q as l,Y as u,_ as d,et as f,j as p,jt as m,s as h}from"./index-cHWd4mGO.js";import{t as g}from"./ToolbarPanels-CbF3qEos.js";import{i as _,n as v}from"./routing-D-GkAfgE.js";var y=e(t()),b=i();function x(){let{t:e}=n(),t=(t,n)=>e(`Compose.${t}`,n),i=v(),x=_(),[S]=r(),C=o(),w=u(C.activeKbId$),T=u(C.activeSession$),E=u(T?.user$),D=u(T?.token$),O=!!E,k=w!=null&&T==null,{showError:A}=m();(0,y.useEffect)(()=>{k||O||x.push(`/`)},[k,O,x]);let j=a(),M=l(T??void 0,e=>s(e,j,{mode:S?.get(`mode`)??void 0,token:S?.get(`token`)??void 0},D??void 0)),N=u(M?.browse.activePanel$)??null,P=u(M?.mode$)??`new`,F=u(M?.loading$)??!0,I=u(M?.cloneData$)??null,L=u(M?.entityTypes.value$)??[],R=u(M?.uploadProgress$)??null,{resolvedTheme:z}=f(),{hoverDelayMs:B}=c();return k||F?(0,b.jsx)(h,{message:k?`Checking authentication...`:`Loading cloned resource...`}):O?(0,b.jsx)(d,{mode:P,cloneData:I,availableEntityTypes:L,initialLocale:i,theme:z,hoverDelayMs:B,activePanel:N,onSaveResource:async e=>{if(M)try{let t=await M.save(e);x.push(`/know/resource/${encodeURIComponent(t)}`)}catch(e){let t=e instanceof Error?e.message:`Failed to save resource. Please try again.`;throw A(t),e}},onCancel:()=>x.push(`/know/discover`),uploadProgress:R,translations:{title:t(`title`),titleEditClone:t(`titleEditClone`),subtitleClone:t(`subtitleClone`),resourceName:t(`resourceName`),resourceNamePlaceholder:t(`resourceNamePlaceholder`),entityTypes:t(`entityTypes`),language:t(`language`),contentSource:t(`contentSource`),uploadFile:t(`uploadFile`),uploadFileDescription:t(`uploadFileDescription`),writeContent:t(`writeContent`),writeContentDescription:t(`writeContentDescription`),dropFileOrClick:t(`dropFileOrClick`),supportedFormats:t(`supportedFormats`),mediaType:t(`mediaType`),autoDetected:t(`autoDetected`),format:t(`format`),content:t(`content`),resourceContent:t(`resourceContent`),encoding:t(`encoding`),archiveOriginal:t(`archiveOriginal`),cancel:t(`cancel`),saving:t(`saving`),creating:t(`creating`),saveClonedResource:t(`saveClonedResource`),createResource:t(`createResource`)},ToolbarPanels:g,Toolbar:p}):null}function S(){let{t:e}=n();return(0,b.jsx)(y.Suspense,{fallback:(0,b.jsx)(h,{message:((t,n)=>e(`Compose.${t}`,n))(`loading`)}),children:(0,b.jsx)(x,{})})}export{S as default};
|
|
2
|
+
//# sourceMappingURL=page-DS47DLy5.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page-
|
|
1
|
+
{"version":3,"file":"page-DS47DLy5.js","names":[],"sources":["../../src/app/[locale]/know/compose/page.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect, Suspense } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useLocale } from '@/i18n/routing';\nimport { useRouter } from '@/i18n/routing';\nimport { useSearchParams } from 'react-router';\nimport {\n useSemiont,\n useToast,\n useTheme,\n useShellStateUnit,\n useObservable,\n useHoverDelay,\n useSessionStateUnit,\n Toolbar,\n ComposeLoadingState,\n ResourceComposePage,\n} from '@semiont/react-ui';\nimport type { SaveResourceParams as UISaveResourceParams } from '@semiont/react-ui';\nimport { createComposePageStateUnit } from '@semiont/react-ui';\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 } = useToast();\n\n useEffect(() => {\n if (authLoading) return;\n if (!isAuthenticated) router.push('/');\n }, [authLoading, isAuthenticated, router]);\n\n const browseStateUnit = useShellStateUnit();\n\n const stateUnit = useSessionStateUnit(session ?? undefined, (s) => createComposePageStateUnit(s, browseStateUnit, {\n mode: searchParams?.get('mode') ?? undefined,\n token: searchParams?.get('token') ?? undefined,\n }, authToken ?? undefined));\n\n const activePanel = useObservable(stateUnit?.browse.activePanel$) ?? null;\n const pageMode = useObservable(stateUnit?.mode$) ?? 'new';\n const isLoading = useObservable(stateUnit?.loading$) ?? true;\n const cloneData = useObservable(stateUnit?.cloneData$) ?? null;\n const availableEntityTypes = useObservable(stateUnit?.entityTypes.value$) ?? [];\n const uploadProgress = useObservable(stateUnit?.uploadProgress$) ?? null;\n\n const { resolvedTheme } = useTheme();\n const { hoverDelayMs } = useHoverDelay();\n\n const handleSaveResource = async (params: UISaveResourceParams) => {\n if (!stateUnit) return;\n try {\n const newResourceId = await stateUnit.save(params);\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 availableEntityTypes={availableEntityTypes}\n initialLocale={locale}\n theme={resolvedTheme}\n hoverDelayMs={hoverDelayMs}\n activePanel={activePanel}\n onSaveResource={handleSaveResource}\n onCancel={() => router.push('/know/discover')}\n uploadProgress={uploadProgress}\n translations={{\n title: t('title'),\n titleEditClone: t('titleEditClone'),\n subtitleClone: t('subtitleClone'),\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 saveClonedResource: t('saveClonedResource'),\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"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{i as t,t as n}from"./i18n-
|
|
2
|
-
//# sourceMappingURL=page-
|
|
1
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{i as t,t as n}from"./i18n-CywLsdxn.js";import{t as r}from"./vendor-vK2W55bZ.js";import{At as i,M as a,Q as o,V as s,Y as c,jt as l,p as u}from"./index-cHWd4mGO.js";import{i as d,t as f}from"./routing-D-GkAfgE.js";var p=e(t()),m=r();function h(){let{t:e}=n(),t=(t,n)=>e(`AuthWelcome.${t}`,n),r=i(),a=c(r.activeSession$)??null;return a?(0,m.jsx)(g,{session:a,t},a.id):(0,m.jsx)(_,{status:`loading`,t})}function g({session:e,t}){let n=i(),r=c(e.user$)??null,a=e.kb,u=!!r,f=e=>{n.signOut(e)},h=d(),[g,v]=(0,p.useState)(!1),y=l(),b=o(e,s),x=c(b?.userData$),S=c(b?.isProcessing$)??!1;(0,p.useEffect)(()=>{if(!u){h.push(`/auth/connect`);return}if(x?.termsAcceptedAt){h.push(`/`);return}},[u,h,x]);let C=async e=>{if(!e){a&&f(a.id),h.push(`/`);return}if(b)try{await b.acceptTerms(),v(!0),setTimeout(()=>{h.push(`/`)},1e3)}catch(e){console.error(`Terms acceptance error:`,e),y.showError(t(`errorAcceptingTerms`))}},w=g?`accepted`:`form`,T=r?.name?.split(` `)[0]??``;return(0,m.jsx)(_,{t,userName:T,termsAcceptedAt:x?.termsAcceptedAt??null,status:w,isProcessing:S,onAccept:()=>C(!0),onDecline:()=>C(!1)})}function _({t:e,status:t,userName:n=``,termsAcceptedAt:r=null,isProcessing:i=!1,onAccept:o=()=>{},onDecline:s=()=>{}}){return(0,m.jsx)(a,{userName:n,termsAcceptedAt:r,isNewUser:!r,status:t,isProcessing:i,onAccept:o,onDecline:s,translations:{loading:e(`loading`),welcomeTitle:e(`welcomeTitle`),thanksForAccepting:e(`thanksForAccepting`),welcomeUser:e(`welcomeUser`,{firstName:n}),reviewTermsPrompt:e(`reviewTermsPrompt`),termsSummaryTitle:e(`termsSummaryTitle`),termsSummaryIntro:e(`termsSummaryIntro`),acceptableUseTitle:e(`acceptableUseTitle`),acceptableUseResponsible:e(`acceptableUseResponsible`),acceptableUseRespect:e(`acceptableUseRespect`),acceptableUseConduct:e(`acceptableUseConduct`),prohibitedContentTitle:e(`prohibitedContentTitle`),prohibitedContentIntro:e(`prohibitedContentIntro`),prohibitedIllegal:e(`prohibitedIllegal`),prohibitedAdult:e(`prohibitedAdult`),prohibitedHate:e(`prohibitedHate`),prohibitedViolence:e(`prohibitedViolence`),prohibitedMisinformation:e(`prohibitedMisinformation`),prohibitedPrivacy:e(`prohibitedPrivacy`),prohibitedCopyright:e(`prohibitedCopyright`),prohibitedMalware:e(`prohibitedMalware`),prohibitedSpam:e(`prohibitedSpam`),conductTitle:e(`conductTitle`),conductDescription:e(`conductDescription`),conductLink:e(`conductLink`),conductPromotion:e(`conductPromotion`),responsibilitiesTitle:e(`responsibilitiesTitle`),responsibilitiesSecure:e(`responsibilitiesSecure`),responsibilitiesReport:e(`responsibilitiesReport`),responsibilitiesAccurate:e(`responsibilitiesAccurate`),responsibilitiesComply:e(`responsibilitiesComply`),violationsWarning:e(`violationsWarning`),readFullTerms:e(`readFullTerms`),termsOfService:e(`termsOfService`),and:e(`and`),privacyPolicy:e(`privacyPolicy`),declineAndSignOut:e(`declineAndSignOut`),acceptAndContinue:e(`acceptAndContinue`),processing:e(`processing`),legallyBound:e(`legallyBound`)},PageLayout:u,Link:f})}export{h as default};
|
|
2
|
+
//# sourceMappingURL=page-DYcAqNIR.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page-
|
|
1
|
+
{"version":3,"file":"page-DYcAqNIR.js","names":[],"sources":["../../src/app/[locale]/auth/welcome/page.tsx"],"sourcesContent":["/**\n * Welcome Page - Thin Next.js wrapper\n *\n * This page handles Next.js-specific concerns (routing, auth, API calls)\n * and delegates rendering to the pure React WelcomePage component.\n */\n\nimport { useState, useEffect } from 'react';\nimport { useRouter } from '@/i18n/routing';\nimport { useTranslation } from 'react-i18next';\nimport { Link } from '@/i18n/routing';\nimport { PageLayout, useToast, useSemiont, useObservable } from '@semiont/react-ui';\nimport { WelcomePage } from '@semiont/react-ui';\nimport { createWelcomeStateUnit } from '@semiont/react-ui';\nimport { useSessionStateUnit } from '@semiont/react-ui';\nimport type { SemiontSession } from '@semiont/sdk';\n\n/**\n * The session gate is API shape now (SESSION-TYPED-FACTORIES.md):\n * `createWelcomeStateUnit` takes the SESSION, and `useSessionStateUnit`\n * constructs only when one exists and rebuilds (dispose-first) when it is\n * replaced — a KB switch or re-auth can no longer leave this page holding a\n * disposed client. This route is where that crashed in production: the user\n * lands here immediately after connecting, mid-activation.\n * See .plans/bugs/resource-page-frozen-on-disposed-client-after-kb-switch.md\n */\nexport default function Welcome() {\n const { t: _t } = useTranslation();\n const t = (k: string, p?: Record<string, unknown>) => _t(`AuthWelcome.${k}`, p as any) as string;\n const semiont = useSemiont();\n const session = useObservable(semiont.activeSession$) ?? null;\n\n if (!session) {\n return <WelcomeShell status=\"loading\" t={t} />;\n }\n return <WelcomeInner key={session.id} session={session} t={t} />;\n}\n\nfunction WelcomeInner({\n session,\n t,\n}: {\n session: SemiontSession;\n t: (k: string, p?: Record<string, unknown>) => string;\n}) {\n const semiont = useSemiont();\n const user = useObservable(session.user$) ?? null;\n const activeKnowledgeBase = session.kb;\n const isAuthenticated = !!user;\n const signOut = (id: string) => { void semiont.signOut(id); };\n const router = useRouter();\n const [termsAccepted, setTermsAccepted] = useState(false);\n const toast = useToast();\n\n const stateUnit = useSessionStateUnit(session, createWelcomeStateUnit);\n\n const userData = useObservable(stateUnit?.userData$);\n const isProcessing = useObservable(stateUnit?.isProcessing$) ?? false;\n\n // Redirect if not authenticated or if terms already accepted\n useEffect(() => {\n if (!isAuthenticated) {\n router.push('/auth/connect');\n return;\n }\n\n if (userData?.termsAcceptedAt) {\n router.push('/');\n return;\n }\n }, [isAuthenticated, router, userData]);\n\n const handleTermsAcceptance = async (accepted: boolean) => {\n if (!accepted) {\n if (activeKnowledgeBase) {\n signOut(activeKnowledgeBase.id);\n }\n router.push('/');\n return;\n }\n\n if (!stateUnit) return;\n try {\n await stateUnit.acceptTerms();\n setTermsAccepted(true);\n\n setTimeout(() => {\n router.push('/');\n }, 1000);\n } catch (error) {\n console.error('Terms acceptance error:', error);\n toast.showError(t('errorAcceptingTerms'));\n }\n };\n\n const pageStatus = termsAccepted ? 'accepted' : 'form';\n const firstName = user?.name?.split(' ')[0] ?? '';\n\n return (\n <WelcomeShell\n t={t}\n userName={firstName}\n termsAcceptedAt={userData?.termsAcceptedAt ?? null}\n status={pageStatus}\n isProcessing={isProcessing}\n onAccept={() => handleTermsAcceptance(true)}\n onDecline={() => handleTermsAcceptance(false)}\n />\n );\n}\n\n/**\n * The presentational half: every translation the WelcomePage needs, in one\n * place, so the pre-session loading render and the real one cannot drift.\n */\nfunction WelcomeShell({\n t,\n status,\n userName = '',\n termsAcceptedAt = null,\n isProcessing = false,\n onAccept = () => {},\n onDecline = () => {},\n}: {\n t: (k: string, p?: Record<string, unknown>) => string;\n status: 'loading' | 'accepted' | 'form';\n userName?: string;\n termsAcceptedAt?: string | null;\n isProcessing?: boolean;\n onAccept?: () => void;\n onDecline?: () => void;\n}) {\n return (\n <WelcomePage\n userName={userName}\n termsAcceptedAt={termsAcceptedAt}\n isNewUser={!termsAcceptedAt}\n status={status}\n isProcessing={isProcessing}\n onAccept={onAccept}\n onDecline={onDecline}\n translations={{\n loading: t('loading'),\n welcomeTitle: t('welcomeTitle'),\n thanksForAccepting: t('thanksForAccepting'),\n welcomeUser: t('welcomeUser', { firstName: userName }),\n reviewTermsPrompt: t('reviewTermsPrompt'),\n termsSummaryTitle: t('termsSummaryTitle'),\n termsSummaryIntro: t('termsSummaryIntro'),\n acceptableUseTitle: t('acceptableUseTitle'),\n acceptableUseResponsible: t('acceptableUseResponsible'),\n acceptableUseRespect: t('acceptableUseRespect'),\n acceptableUseConduct: t('acceptableUseConduct'),\n prohibitedContentTitle: t('prohibitedContentTitle'),\n prohibitedContentIntro: t('prohibitedContentIntro'),\n prohibitedIllegal: t('prohibitedIllegal'),\n prohibitedAdult: t('prohibitedAdult'),\n prohibitedHate: t('prohibitedHate'),\n prohibitedViolence: t('prohibitedViolence'),\n prohibitedMisinformation: t('prohibitedMisinformation'),\n prohibitedPrivacy: t('prohibitedPrivacy'),\n prohibitedCopyright: t('prohibitedCopyright'),\n prohibitedMalware: t('prohibitedMalware'),\n prohibitedSpam: t('prohibitedSpam'),\n conductTitle: t('conductTitle'),\n conductDescription: t('conductDescription'),\n conductLink: t('conductLink'),\n conductPromotion: t('conductPromotion'),\n responsibilitiesTitle: t('responsibilitiesTitle'),\n responsibilitiesSecure: t('responsibilitiesSecure'),\n responsibilitiesReport: t('responsibilitiesReport'),\n responsibilitiesAccurate: t('responsibilitiesAccurate'),\n responsibilitiesComply: t('responsibilitiesComply'),\n violationsWarning: t('violationsWarning'),\n readFullTerms: t('readFullTerms'),\n termsOfService: t('termsOfService'),\n and: t('and'),\n privacyPolicy: t('privacyPolicy'),\n declineAndSignOut: t('declineAndSignOut'),\n acceptAndContinue: t('acceptAndContinue'),\n processing: t('processing'),\n legallyBound: t('legallyBound'),\n }}\n PageLayout={PageLayout}\n Link={Link}\n />\n );\n}\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{i as t,t as n}from"./i18n-
|
|
2
|
-
//# sourceMappingURL=page-
|
|
1
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{i as t,t as n}from"./i18n-CywLsdxn.js";import{i as r,t as i}from"./vendor-vK2W55bZ.js";import{T as a,p as o}from"./index-cHWd4mGO.js";import{t as s}from"./KeyboardShortcutsContext-CSFk3vP6.js";import{t as c}from"./CookiePreferences-CWZIFYNC.js";import{i as l,t as u}from"./routing-D-GkAfgE.js";import{n as d,t as f}from"./routing-D5d0e59H.js";var p=e(t()),m=i();function h(){let{t:e}=n(),t=(t,n)=>e(`AuthSignUp.${t}`,n),i=(t,n)=>e(`Footer.${t}`,n),h=(t,n)=>e(`Navigation.${t}`,n),g=(t,n)=>e(`Home.${t}`,n),[_]=r(),v=l(),y=(0,p.useContext)(s),b=_.get(`callbackUrl`)??`/auth/welcome`,x=async()=>{v.push(`/auth/connect?callbackUrl=${encodeURIComponent(b)}`)},S={pageTitle:t(`pageTitle`),signUpPrompt:t(`signUpPrompt`),signUpWithGoogle:t(`signUpWithGoogle`),creatingAccount:t(`creatingAccount`),approvedDomainsInfo:t(`approvedDomainsInfo`),termsAgreement:t(`termsAgreement`),alreadyHaveAccount:t(`alreadyHaveAccount`),tagline:g(`tagline`),backToHome:t(`backToHome`)};return(0,m.jsx)(o,{Link:f,routes:d,t:i,tNav:h,tHome:g,CookiePreferences:c,...y?.openKeyboardHelp&&{onOpenKeyboardHelp:y.openKeyboardHelp},className:`semiont-page-layout--auth`,showAuthLinks:!1,children:(0,m.jsx)(a,{onSignUp:x,Link:u,translations:S})})}function g(){return(0,m.jsx)(h,{})}export{g as default};
|
|
2
|
+
//# sourceMappingURL=page-DYqW4iWr.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page-
|
|
1
|
+
{"version":3,"file":"page-DYqW4iWr.js","names":[],"sources":["../../src/app/[locale]/auth/signup/page.tsx"],"sourcesContent":["import { useContext } from 'react';\nimport { useSearchParams } from 'react-router';\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"],"mappings":"oaAUA,SAAS,GAAgB,CACvB,GAAM,CAAE,EAAG,GAAO,EAAe,EAC3B,GAAK,EAAW,IAAgC,EAAG,cAAc,IAAK,CAAQ,EAC9E,GAAW,EAAW,IAAgC,EAAG,UAAU,IAAK,CAAQ,EAChF,GAAQ,EAAW,IAAgC,EAAG,cAAc,IAAK,CAAQ,EACjF,GAAS,EAAW,IAAgC,EAAG,QAAQ,IAAK,CAAQ,EAC5E,CAAC,GAAgB,EAAgB,EACjC,EAAS,EAAU,EACnB,GAAA,EAAkB,EAAA,WAAA,CAAW,CAAwB,EAErD,EAAc,EAAa,IAAI,aAAa,GAAK,gBAEjD,EAAe,SAAY,CAC/B,EAAO,KAAK,6BAA6B,mBAAmB,CAAW,GAAG,CAC5E,EAEM,EAAe,CACnB,UAAW,EAAE,WAAW,EACxB,aAAc,EAAE,cAAc,EAC9B,iBAAkB,EAAE,kBAAkB,EACtC,gBAAiB,EAAE,iBAAiB,EACpC,oBAAqB,EAAE,qBAAqB,EAC5C,eAAgB,EAAE,gBAAgB,EAClC,mBAAoB,EAAE,oBAAoB,EAC1C,QAAS,EAAM,SAAS,EACxB,WAAY,EAAE,YAAY,CAC5B,EAEA,OACE,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,KAAM,EACE,SACR,EAAG,EACG,OACC,QACY,oBACnB,GAAK,GAAiB,kBAAoB,CAAE,mBAAoB,EAAgB,gBAAiB,EACjG,UAAU,4BACV,cAAe,GAEf,UAAA,EAAA,EAAA,IAAA,CAAC,EAAD,CAAY,SAAU,EAAoB,OAAoB,cAAe,CAAA,CACnE,CAAA,CAEhB,CAEA,SAAwB,GAAS,CAC/B,OAAO,EAAA,EAAA,IAAA,CAAC,EAAD,CAAgB,CAAA,CACzB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page-
|
|
1
|
+
{"version":3,"file":"page-De7BG-0h.js","names":[],"sources":["../../src/app/[locale]/admin/page.tsx"],"sourcesContent":["import { Navigate } from 'react-router';\nimport { useLocale } from '@/i18n/routing';\n\nexport default function AdminPage() {\n const locale = useLocale();\n return <Navigate to={`/${locale}/admin/users`} replace />;\n}\n"],"mappings":"0FAGA,SAAwB,GAAY,CAClC,IAAM,EAAS,EAAU,EACzB,OAAO,EAAA,EAAA,IAAA,CAAC,EAAD,CAAU,GAAI,IAAI,EAAO,cAAe,QAAA,EAAS,CAAA,CAC1D"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{i as t}from"./i18n-
|
|
2
|
-
//# sourceMappingURL=page-
|
|
1
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{i as t}from"./i18n-CywLsdxn.js";import{f as n,t as r}from"./vendor-vK2W55bZ.js";import{At as i,Q as a,Y as o,b as s,in as c,x as l,y as u,z as d}from"./index-cHWd4mGO.js";import{t as f}from"./ToolbarPanels-CbF3qEos.js";import{n as p}from"./routing-D-GkAfgE.js";import{n as m,t as h}from"./routing-D5d0e59H.js";import g from"./not-found-k9OeYO0z.js";var _=e(t()),v=r();function y(){let e=n(),t=o(i().activeSession$)??null,r=e.id;if(!r)return(0,v.jsx)(g,{});if(!t)return(0,v.jsx)(s,{});let a=c(r);return(0,v.jsx)(b,{session:t,rId:a},`${t.id}:${a}`)}function b({session:e,rId:t}){let n=p(),r=o(e.streamState$)??`initial`,i=e.kb,g=a(e,e=>d(e,t)),y=o(g?.resource$),b=o(g?.isLoading$)??!0,x=o(g?.error$)??null;(0,_.useEffect)(()=>{x?console.error(`[Document] Resource ${t} failed to load:`,x.message):!b&&!y&&console.error(`[Document] Resource ${t} not found`)},[b,x,t,y]);let S=(0,_.useCallback)(async()=>{g?.invalidate()},[g]);if(x)return(0,v.jsx)(u,{error:x,onRetry:S});if(b)return(0,v.jsx)(s,{});if(!y)return(0,v.jsx)(u,{error:Error(`Resource ${t} not found`),onRetry:S});let C=y,w=c(C[`@id`]);return(0,v.jsx)(l,{resource:C,rUri:w,locale:n,Link:h,routes:m,ToolbarPanels:f,refetchDocument:S,streamStatus:r,knowledgeBaseName:i.label})}export{y as default};
|
|
2
|
+
//# sourceMappingURL=page-DwyBQfbg.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page-
|
|
1
|
+
{"version":3,"file":"page-DwyBQfbg.js","names":[],"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';\nimport { useLocale } from '@/i18n/routing';\nimport { useSemiont, useObservable, useSessionStateUnit, createResourceLoaderStateUnit } from '@semiont/react-ui';\nimport { resourceId } from '@semiont/core';\nimport type { SemiontSession } from '@semiont/sdk';\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 NotFound from '../../../not-found';\nimport type { SemiontResource } from '@semiont/react-ui';\n\n/**\n * Main page component — routing, session gating, and initial resource load.\n *\n * `useSessionStateUnit` runs its factory exactly once per mount, and React Router\n * keeps this component mounted across BOTH a `:id` param change and an\n * `activeSession$` swap. So the inner component is keyed on the pair\n * `${session.id}:${rId}` — either changing forces a full remount:\n *\n * - `rId` — otherwise the URL changes and the content stays on the\n * first-loaded resource (tab-to-tab navigation in the left nav).\n * - `session.id` — otherwise the loader keeps a DISPOSED client after a KB\n * switch or a re-authentication, and a disposed cache is inert by B16:\n * no fetch, no emission, \"Loading resource...\" forever. `kb.id` is not\n * enough here; `signIn` rebuilds the session under an unchanged `kb.id`.\n * See .plans/bugs/resource-page-frozen-on-disposed-client-after-kb-switch.md\n *\n * Rendering is gated on a live session, so the inner component receives a\n * real one as a prop and can never read a session other than the one it is\n * keyed on.\n */\nexport default function KnowledgeResourcePage() {\n const params = useParams<{ id: string }>();\n const session = useObservable(useSemiont().activeSession$) ?? null;\n\n // `App.tsx` declares this route as `resource/:id`, so React Router cannot\n // match it without the param. That used to be written `params?.id as string`\n // — an assertion, which reads as harmless precisely because it is usually\n // true. It is not harmless: `resourceId()` takes a `string` and calls\n // `.includes('/')` on it immediately, so the one time the assumption broke\n // (a route-pattern rename) the page would throw a TypeError and white-screen\n // rather than degrade. Branching lets the compiler prove `id` is a string,\n // and turns that rename into a visible not-found.\n const id = params.id;\n if (!id) return <NotFound />;\n\n // Leaving a resource route on a KB switch is the SWITCH INITIATOR's job\n // (`KnowledgeBasePanel`), not this page's. A latch here cannot work:\n // `KnowledgeLayout` gates `<Outlet />` on a live session, so this component\n // is unmounted the instant `activeSession$` goes null and remounts fresh\n // against the new KB — it never observes the transition it would need to\n // detect. A previous attempt did exactly that and was dead in production\n // while its unit test (which renders this page WITHOUT the layout) passed.\n // See .plans/bugs/resource-page-frozen-on-disposed-client-after-kb-switch.md\n if (!session) return <ResourceLoadingState />;\n\n const rId = resourceId(id);\n return <KnowledgeResourcePageInner key={`${session.id}:${rId}`} session={session} rId={rId} />;\n}\n\nfunction KnowledgeResourcePageInner({\n session,\n rId,\n}: {\n session: SemiontSession;\n rId: ReturnType<typeof resourceId>;\n}) {\n const locale = useLocale();\n\n const streamStatus = useObservable(session.streamState$) ?? 'initial';\n const activeKnowledgeBase = session.kb;\n\n const loader = useSessionStateUnit(session, (s) => createResourceLoaderStateUnit(s, rId));\n const resourceData = useObservable(loader?.resource$);\n const isLoading = useObservable(loader?.isLoading$) ?? true;\n const loadError = useObservable(loader?.error$) ?? null;\n\n // Log error for debugging\n useEffect(() => {\n if (loadError) {\n console.error(`[Document] Resource ${rId} failed to load:`, loadError.message);\n } else if (!isLoading && !resourceData) {\n console.error(`[Document] Resource ${rId} not found`);\n }\n }, [isLoading, loadError, rId, resourceData]);\n\n const refetchDocument = useCallback(async () => {\n loader?.invalidate();\n }, [loader]);\n\n // Early return: a terminal failure carries the reason, so it beats both the\n // spinner and the generic not-found. Without this branch the load is stuck\n // in \"loading\" forever — a failed key has no value either.\n if (loadError) {\n return <ResourceErrorState error={loadError} onRetry={refetchDocument} />;\n }\n if (isLoading) {\n return <ResourceLoadingState />;\n }\n if (!resourceData) {\n return <ResourceErrorState error={new Error(`Resource ${rId} not found`)} onRetry={refetchDocument} />;\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"],"mappings":"0aA2CA,SAAwB,GAAwB,CAC9C,IAAM,EAAS,EAA0B,EACnC,EAAU,EAAc,EAAW,CAAC,CAAC,cAAc,GAAK,KAUxD,EAAK,EAAO,GAClB,GAAI,CAAC,EAAI,OAAO,EAAA,EAAA,IAAA,CAAC,EAAD,CAAW,CAAA,EAU3B,GAAI,CAAC,EAAS,OAAO,EAAA,EAAA,IAAA,CAAC,EAAD,CAAuB,CAAA,EAE5C,IAAM,EAAM,EAAW,CAAE,EACzB,OAAO,EAAA,EAAA,IAAA,CAAC,EAAD,CAAkE,UAAc,KAAM,EAArD,GAAG,EAAQ,GAAG,GAAG,GAAoC,CAC/F,CAEA,SAAS,EAA2B,CAClC,UACA,OAIC,CACD,IAAM,EAAS,EAAU,EAEnB,EAAe,EAAc,EAAQ,YAAY,GAAK,UACtD,EAAsB,EAAQ,GAE9B,EAAS,EAAoB,EAAU,GAAM,EAA8B,EAAG,CAAG,CAAC,EAClF,EAAe,EAAc,GAAQ,SAAS,EAC9C,EAAY,EAAc,GAAQ,UAAU,GAAK,GACjD,EAAY,EAAc,GAAQ,MAAM,GAAK,MAGnD,EAAA,EAAA,UAAA,KAAgB,CACV,EACF,QAAQ,MAAM,uBAAuB,EAAI,kBAAmB,EAAU,OAAO,EACpE,CAAC,GAAa,CAAC,GACxB,QAAQ,MAAM,uBAAuB,EAAI,WAAW,CAExD,EAAG,CAAC,EAAW,EAAW,EAAK,CAAY,CAAC,EAE5C,IAAM,GAAA,EAAkB,EAAA,YAAA,CAAY,SAAY,CAC9C,GAAQ,WAAW,CACrB,EAAG,CAAC,CAAM,CAAC,EAKX,GAAI,EACF,OAAO,EAAA,EAAA,IAAA,CAAC,EAAD,CAAoB,MAAO,EAAW,QAAS,CAAkB,CAAA,EAE1E,GAAI,EACF,OAAO,EAAA,EAAA,IAAA,CAAC,EAAD,CAAuB,CAAA,EAEhC,GAAI,CAAC,EACH,OAAO,EAAA,EAAA,IAAA,CAAC,EAAD,CAAoB,MAAW,MAAM,YAAY,EAAI,WAAW,EAAG,QAAS,CAAkB,CAAA,EAGvG,IAAM,EAAW,EAEX,EAAc,EAAW,EAAS,MAAM,EAG9C,OACE,EAAA,EAAA,IAAA,CAAC,EAAD,CACY,WACV,KAAM,EACE,SACF,OACE,SACO,gBACE,kBACH,eACd,kBAAmB,EAAoB,KACxC,CAAA,CAEL"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{i as t,t as n}from"./i18n-
|
|
1
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{i as t,t as n}from"./i18n-CywLsdxn.js";import{t as r}from"./vendor-vK2W55bZ.js";import{p as i}from"./index-cHWd4mGO.js";import{t as a}from"./KeyboardShortcutsContext-CSFk3vP6.js";import{t as o}from"./CookiePreferences-CWZIFYNC.js";import{n as s,t as c}from"./routing-D5d0e59H.js";var l=e(t()),u=r();function d(){let{t:e}=n(),t=(t,n)=>e(`Privacy.${t}`,n),{t:r}=n(),d=(e,t)=>r(`Footer.${e}`,t),{t:f}=n(),p=(e,t)=>f(`Navigation.${e}`,t),{t:m}=n(),h=(e,t)=>m(`Home.${e}`,t),g=(0,l.useContext)(a);return(0,u.jsx)(i,{Link:c,routes:s,t:d,tNav:p,tHome:h,CookiePreferences:o,...g?.openKeyboardHelp&&{onOpenKeyboardHelp:g.openKeyboardHelp},className:`semiont-static-page`,children:(0,u.jsx)(`div`,{className:`semiont-static-container`,children:(0,u.jsxs)(`div`,{className:`semiont-static-content`,children:[(0,u.jsx)(`header`,{className:`semiont-static-header`,children:(0,u.jsx)(`h1`,{className:`semiont-static-title`,children:t(`pageTitle`)})}),(0,u.jsxs)(`article`,{className:`semiont-static-article`,children:[(0,u.jsxs)(`section`,{children:[(0,u.jsx)(`h2`,{children:t(`introTitle`)}),t(`intro`).split(`
|
|
2
2
|
|
|
3
3
|
`).map((e,t)=>(0,u.jsx)(`p`,{children:e},t))]}),(0,u.jsxs)(`section`,{children:[(0,u.jsx)(`h2`,{children:t(`infoCollectTitle`)}),(0,u.jsx)(`h3`,{children:t(`personalInfoTitle`)}),(0,u.jsx)(`ul`,{children:t(`personalInfo`).split(`
|
|
4
4
|
`).map((e,t)=>(0,u.jsx)(`li`,{children:e},t))}),(0,u.jsx)(`h3`,{children:t(`autoCollectTitle`)}),(0,u.jsx)(`ul`,{children:t(`autoCollect`).split(`
|
|
@@ -17,4 +17,4 @@ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{i as t,t as n}from"./i
|
|
|
17
17
|
|
|
18
18
|
`).map((e,t)=>t===0?(0,u.jsx)(`p`,{children:e},t):(0,u.jsx)(`ul`,{children:e.split(`
|
|
19
19
|
`).map((e,t)=>(0,u.jsx)(`li`,{children:e},t))},t))]}),(0,u.jsxs)(`section`,{children:[(0,u.jsx)(`h2`,{children:t(`dataRetentionTitle`)}),(0,u.jsx)(`p`,{children:t(`dataRetention`)})]}),(0,u.jsxs)(`section`,{children:[(0,u.jsx)(`h2`,{children:t(`internationalTransfersTitle`)}),(0,u.jsx)(`p`,{children:t(`internationalTransfers`)})]}),(0,u.jsxs)(`section`,{children:[(0,u.jsx)(`h2`,{children:t(`contactTitle`)}),(0,u.jsx)(`p`,{children:t(`contactIntro`)}),(0,u.jsx)(`div`,{className:`semiont-static-info-box`,children:(0,u.jsxs)(`p`,{children:[(0,u.jsx)(`strong`,{children:t(`contactEmail`)}),` privacy@semiont.com`,(0,u.jsx)(`br`,{}),(0,u.jsx)(`strong`,{children:t(`contactAddress`)}),` [Your Company Address]`]})})]}),(0,u.jsxs)(`section`,{children:[(0,u.jsx)(`h2`,{children:t(`updatesTitle`)}),(0,u.jsx)(`p`,{children:t(`updates`)}),(0,u.jsx)(`footer`,{className:`semiont-static-footer`,children:(0,u.jsx)(`p`,{children:(0,u.jsx)(`strong`,{children:t(`lastUpdated`,{date:new Date().toLocaleDateString()})})})})]})]})]})})})}export{d as default};
|
|
20
|
-
//# sourceMappingURL=page-
|
|
20
|
+
//# sourceMappingURL=page-OhVx5cMH.js.map
|