@semiont/cli 0.4.18 → 0.4.19

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 (106) hide show
  1. package/dist/cli.mjs +14 -42
  2. package/dist/frontend/dist/assets/{CookiePreferences-ebe4eB-e.js → CookiePreferences-BBb5XMuG.js} +2 -2
  3. package/dist/frontend/dist/assets/{CookiePreferences-ebe4eB-e.js.map → CookiePreferences-BBb5XMuG.js.map} +1 -1
  4. package/dist/frontend/dist/assets/{PdfAnnotationCanvas.client-CHDCGQBR-BGx2owZ0.js → PdfAnnotationCanvas.client-CHDCGQBR-mCGxablw.js} +2 -2
  5. package/dist/frontend/dist/assets/{PdfAnnotationCanvas.client-CHDCGQBR-BGx2owZ0.js.map → PdfAnnotationCanvas.client-CHDCGQBR-mCGxablw.js.map} +1 -1
  6. package/dist/frontend/dist/assets/ToolbarPanels-CfaOVIc9.js +2 -0
  7. package/dist/frontend/dist/assets/ToolbarPanels-CfaOVIc9.js.map +1 -0
  8. package/dist/frontend/dist/assets/{client-8eRsF4aG.js → client-CWwdB0xQ.js} +2 -2
  9. package/dist/frontend/dist/assets/{client-8eRsF4aG.js.map → client-CWwdB0xQ.js.map} +1 -1
  10. package/dist/frontend/dist/assets/{client-D4vbUf7k.js → client-Cgz-uiSd.js} +2 -2
  11. package/dist/frontend/dist/assets/{client-D4vbUf7k.js.map → client-Cgz-uiSd.js.map} +1 -1
  12. package/dist/frontend/dist/assets/{client-Zl8uXOB2.js → client-D3W9xTBT.js} +2 -2
  13. package/dist/frontend/dist/assets/{client-Zl8uXOB2.js.map → client-D3W9xTBT.js.map} +1 -1
  14. package/dist/frontend/dist/assets/{client-BwxrodJP.js → client-DeL0szs5.js} +2 -2
  15. package/dist/frontend/dist/assets/{client-BwxrodJP.js.map → client-DeL0szs5.js.map} +1 -1
  16. package/dist/frontend/dist/assets/{index-DESF7by4.js → index-C5oI0kaf.js} +49 -49
  17. package/dist/frontend/dist/assets/index-C5oI0kaf.js.map +1 -0
  18. package/dist/frontend/dist/assets/{layout-BInmmVVD.js → layout-B_JLc3yI.js} +2 -2
  19. package/dist/frontend/dist/assets/{layout-BInmmVVD.js.map → layout-B_JLc3yI.js.map} +1 -1
  20. package/dist/frontend/dist/assets/{layout-DvfgC4ds.js → layout-DJI7aibW.js} +2 -2
  21. package/dist/frontend/dist/assets/{layout-DvfgC4ds.js.map → layout-DJI7aibW.js.map} +1 -1
  22. package/dist/frontend/dist/assets/{layout-Bc0HvP9q.js → layout-DXY8hCsB.js} +2 -2
  23. package/dist/frontend/dist/assets/{layout-Bc0HvP9q.js.map → layout-DXY8hCsB.js.map} +1 -1
  24. package/dist/frontend/dist/assets/{layout-CFCI5ndn.js → layout-VBQ97DvJ.js} +2 -2
  25. package/dist/frontend/dist/assets/{layout-CFCI5ndn.js.map → layout-VBQ97DvJ.js.map} +1 -1
  26. package/dist/frontend/dist/assets/{not-found-B-h8U0AW.js → not-found-BKG2_Fv3.js} +2 -2
  27. package/dist/frontend/dist/assets/{not-found-B-h8U0AW.js.map → not-found-BKG2_Fv3.js.map} +1 -1
  28. package/dist/frontend/dist/assets/{page-CwB528Up.js → page-8OrS1-4-.js} +2 -2
  29. package/dist/frontend/dist/assets/{page-CwB528Up.js.map → page-8OrS1-4-.js.map} +1 -1
  30. package/dist/frontend/dist/assets/{page-BRnMt7o2.js → page-B4Qu9WPd.js} +2 -2
  31. package/dist/frontend/dist/assets/{page-BRnMt7o2.js.map → page-B4Qu9WPd.js.map} +1 -1
  32. package/dist/frontend/dist/assets/page-BNJp__R7.js +2 -0
  33. package/dist/frontend/dist/assets/{page-DLQK_cX5.js.map → page-BNJp__R7.js.map} +1 -1
  34. package/dist/frontend/dist/assets/{page-CkjHPT8p.js → page-BRTi-f95.js} +2 -2
  35. package/dist/frontend/dist/assets/{page-CkjHPT8p.js.map → page-BRTi-f95.js.map} +1 -1
  36. package/dist/frontend/dist/assets/{page-B4bD7iN0.js → page-BSB8GP79.js} +2 -2
  37. package/dist/frontend/dist/assets/{page-B4bD7iN0.js.map → page-BSB8GP79.js.map} +1 -1
  38. package/dist/frontend/dist/assets/{page-zo4BeIjA.js → page-Bx8QAzic.js} +2 -2
  39. package/dist/frontend/dist/assets/{page-zo4BeIjA.js.map → page-Bx8QAzic.js.map} +1 -1
  40. package/dist/frontend/dist/assets/page-CDSGl6uY.js +2 -0
  41. package/dist/frontend/dist/assets/{page-EgwcfkeK.js.map → page-CDSGl6uY.js.map} +1 -1
  42. package/dist/frontend/dist/assets/{page-DRQxmzY-.js → page-CJLuuiG8.js} +2 -2
  43. package/dist/frontend/dist/assets/{page-DRQxmzY-.js.map → page-CJLuuiG8.js.map} +1 -1
  44. package/dist/frontend/dist/assets/{page-CNftu-l4.js → page-CyFJt2nP.js} +2 -2
  45. package/dist/frontend/dist/assets/{page-CNftu-l4.js.map → page-CyFJt2nP.js.map} +1 -1
  46. package/dist/frontend/dist/assets/{page-CnYCXW-A.js → page-D1q6VB02.js} +2 -2
  47. package/dist/frontend/dist/assets/{page-CnYCXW-A.js.map → page-D1q6VB02.js.map} +1 -1
  48. package/dist/frontend/dist/assets/{page-DFS-DvYi.js → page-D3THDsqd.js} +2 -2
  49. package/dist/frontend/dist/assets/{page-DFS-DvYi.js.map → page-D3THDsqd.js.map} +1 -1
  50. package/dist/frontend/dist/assets/{page-4JzRN2Q4.js → page-DCxg1lHk.js} +2 -2
  51. package/dist/frontend/dist/assets/{page-4JzRN2Q4.js.map → page-DCxg1lHk.js.map} +1 -1
  52. package/dist/frontend/dist/assets/{page-hTDMMHds.js → page-DbwQv5n_.js} +2 -2
  53. package/dist/frontend/dist/assets/{page-hTDMMHds.js.map → page-DbwQv5n_.js.map} +1 -1
  54. package/dist/frontend/dist/assets/{page-tm2w2bTu.js → page-DddZ9Yxm.js} +2 -2
  55. package/dist/frontend/dist/assets/{page-tm2w2bTu.js.map → page-DddZ9Yxm.js.map} +1 -1
  56. package/dist/frontend/dist/assets/{page-BeWKvJpC.js → page-DzoXV-AN.js} +2 -2
  57. package/dist/frontend/dist/assets/{page-BeWKvJpC.js.map → page-DzoXV-AN.js.map} +1 -1
  58. package/dist/frontend/dist/assets/{page-BD_lMtdf.js → page-IgGNB4a9.js} +2 -2
  59. package/dist/frontend/dist/assets/{page-BD_lMtdf.js.map → page-IgGNB4a9.js.map} +1 -1
  60. package/dist/frontend/dist/assets/{page-BKt53Kee.js → page-aKPxuWo3.js} +2 -2
  61. package/dist/frontend/dist/assets/{page-BKt53Kee.js.map → page-aKPxuWo3.js.map} +1 -1
  62. package/dist/frontend/dist/assets/{page-BRpbSm6U.js → page-jxC42AIR.js} +2 -2
  63. package/dist/frontend/dist/assets/{page-BRpbSm6U.js.map → page-jxC42AIR.js.map} +1 -1
  64. package/dist/frontend/dist/assets/{privacy-DS6wXZXA.js → privacy-BAxopuZI.js} +2 -2
  65. package/dist/frontend/dist/assets/{privacy-DS6wXZXA.js.map → privacy-BAxopuZI.js.map} +1 -1
  66. package/dist/frontend/dist/assets/{routing-DDJ3KSPT.js → routing-Cm_oCwum.js} +2 -2
  67. package/dist/frontend/dist/assets/{routing-DDJ3KSPT.js.map → routing-Cm_oCwum.js.map} +1 -1
  68. package/dist/frontend/dist/assets/{routing-NOxgO9NV.js → routing-rYtBowvy.js} +2 -2
  69. package/dist/frontend/dist/assets/{routing-NOxgO9NV.js.map → routing-rYtBowvy.js.map} +1 -1
  70. package/dist/frontend/dist/index.html +1 -1
  71. package/dist/frontend/dist/messages/ar.json +2 -1
  72. package/dist/frontend/dist/messages/bn.json +2 -1
  73. package/dist/frontend/dist/messages/cs.json +2 -1
  74. package/dist/frontend/dist/messages/da.json +2 -1
  75. package/dist/frontend/dist/messages/de.json +2 -1
  76. package/dist/frontend/dist/messages/el.json +2 -1
  77. package/dist/frontend/dist/messages/en.json +2 -1
  78. package/dist/frontend/dist/messages/es.json +2 -1
  79. package/dist/frontend/dist/messages/fa.json +2 -1
  80. package/dist/frontend/dist/messages/fi.json +2 -1
  81. package/dist/frontend/dist/messages/fr.json +2 -1
  82. package/dist/frontend/dist/messages/he.json +2 -1
  83. package/dist/frontend/dist/messages/hi.json +2 -1
  84. package/dist/frontend/dist/messages/id.json +2 -1
  85. package/dist/frontend/dist/messages/it.json +2 -1
  86. package/dist/frontend/dist/messages/ja.json +2 -1
  87. package/dist/frontend/dist/messages/ko.json +2 -1
  88. package/dist/frontend/dist/messages/ms.json +2 -1
  89. package/dist/frontend/dist/messages/nl.json +2 -1
  90. package/dist/frontend/dist/messages/no.json +2 -1
  91. package/dist/frontend/dist/messages/pl.json +2 -1
  92. package/dist/frontend/dist/messages/pt.json +2 -1
  93. package/dist/frontend/dist/messages/ro.json +2 -1
  94. package/dist/frontend/dist/messages/sv.json +2 -1
  95. package/dist/frontend/dist/messages/th.json +2 -1
  96. package/dist/frontend/dist/messages/tr.json +2 -1
  97. package/dist/frontend/dist/messages/uk.json +2 -1
  98. package/dist/frontend/dist/messages/vi.json +2 -1
  99. package/dist/frontend/dist/messages/zh.json +2 -1
  100. package/dist/frontend/package.json +1 -1
  101. package/package.json +7 -7
  102. package/dist/frontend/dist/assets/ToolbarPanels-C9r6ZyGY.js +0 -2
  103. package/dist/frontend/dist/assets/ToolbarPanels-C9r6ZyGY.js.map +0 -1
  104. package/dist/frontend/dist/assets/index-DESF7by4.js.map +0 -1
  105. package/dist/frontend/dist/assets/page-DLQK_cX5.js +0 -2
  106. package/dist/frontend/dist/assets/page-EgwcfkeK.js +0 -2
@@ -1,2 +1,2 @@
1
- import{j as o}from"./query-B6BuIB0M.js";import{r as t,O as b}from"./vendor-DJo4KD8w.js";import{i as k,O as g,Q as w,u as v,U as L,V as j,X as S,Y as y,Z as R}from"./index-DESF7by4.js";import{b as E,L as A,u as $}from"./routing-DDJ3KSPT.js";import{u as p}from"./i18n-BbpF47i1.js";import{F as C}from"./ArrowsRightLeftIcon-BzLgl5o9.js";import{F,a as B}from"./ChevronLeftIcon-BLyRNZuL.js";import{C as H}from"./CookiePreferences-ebe4eB-e.js";import{K}from"./privacy-DS6wXZXA.js";import{r as h,L as x}from"./routing-NOxgO9NV.js";import"./XMarkIcon-KMKD47CF.js";function M({title:r,titleId:e,...n},s){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:1.5,stroke:"currentColor","aria-hidden":"true","data-slot":"icon",ref:s,"aria-labelledby":e},n),r?t.createElement("title",{id:e},r):null,t.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M12 6.042A8.967 8.967 0 0 0 6 3.75c-1.052 0-2.062.18-3 .512v14.25A8.987 8.987 0 0 1 6 18c2.305 0 4.408.867 6 2.292m0-14.25a8.966 8.966 0 0 1 6-2.292c1.052 0 2.062.18 3 .512v14.25A8.987 8.987 0 0 0 18 18a8.967 8.967 0 0 0-6 2.292m0-14.25v14.25"}))}const O=t.forwardRef(M);function N({title:r,titleId:e,...n},s){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:1.5,stroke:"currentColor","aria-hidden":"true","data-slot":"icon",ref:s,"aria-labelledby":e},n),r?t.createElement("title",{id:e},r):null,t.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M12 6v6h4.5m4.5 0a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z"}))}const T=t.forwardRef(N);function D({title:r,titleId:e,...n},s){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:1.5,stroke:"currentColor","aria-hidden":"true","data-slot":"icon",ref:s,"aria-labelledby":e},n),r?t.createElement("title",{id:e},r):null,t.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9.568 3H5.25A2.25 2.25 0 0 0 3 5.25v4.318c0 .597.237 1.17.659 1.591l9.581 9.581c.699.699 1.78.872 2.607.33a18.095 18.095 0 0 0 5.223-5.223c.542-.827.369-1.908-.33-2.607L11.16 3.66A2.25 2.25 0 0 0 9.568 3Z"}),t.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M6 6h.008v.008H6V6Z"}))}const P=t.forwardRef(D);function Z({href:r,to:e,...n}){return o.jsx(A,{to:r??"",...n})}function U({isCollapsed:r,toggleCollapsed:e,navigationMenu:n}){const{t:s}=p(),a=(c,d)=>s(`Moderation.${c}`,d),{t:m}=p(),l=(c,d)=>m(`Sidebar.${c}`,d),u=E(),f=t.useCallback(()=>{e()},[e]);k({"browse:sidebar-toggle":f});const i=[{name:a("recentResources"),href:"/moderate/recent",icon:T,description:a("recentResourcesDescription")},{name:a("entityTags"),href:"/moderate/entity-tags",icon:P,description:a("entityTagsDescription")},{name:a("tagSchemas"),href:"/moderate/tag-schemas",icon:O,description:a("tagSchemasDescription")},{name:a("linkedData"),href:"/moderate/linked-data",icon:C,description:a("linkedDataDescription")}];return o.jsx(g,{title:a("title"),items:i,currentPath:u,LinkComponent:Z,...n&&{dropdownContent:n},isCollapsed:r,icons:{chevronLeft:B,bars:F},collapseSidebarLabel:l("collapseSidebar"),expandSidebarLabel:l("expandSidebar")})}function W(){const{t:r}=p(),e=t.useContext(K),{isAuthenticated:n,isAdmin:s,isModerator:a,token:m,activeKnowledgeBase:l,refreshActive:u}=v(),f=$();return l?o.jsx(L,{token:m,children:o.jsx(j,{baseUrl:R(l),tokenRefresher:u,children: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(S,{Link:x,routes:h,t:i=>r(`Navigation.${i}`),tHome:i=>r(`Home.${i}`),brandingLink:"/",collapsible:!0,storageKey:"moderation-sidebar-collapsed",isAuthenticated:n,isAdmin:s,isModerator:a,children:(i,c,d)=>o.jsx(U,{isCollapsed:i,toggleCollapsed:c,navigationMenu:d})}),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(b,{})})})]}),o.jsx(y,{Link:x,routes:h,t:(i,c)=>r(`Footer.${i}`,c),CookiePreferences:H,...(e==null?void 0:e.openKeyboardHelp)&&{onOpenKeyboardHelp:e.openKeyboardHelp}})]})})}):(f.push("/know"),null)}function re(){return o.jsx(w,{children:o.jsx(W,{})})}export{re as default};
2
- //# sourceMappingURL=layout-BInmmVVD.js.map
1
+ import{j as o}from"./query-B6BuIB0M.js";import{r as t,O as b}from"./vendor-DJo4KD8w.js";import{i as k,O as g,Q as w,u as v,U as L,V as j,X as S,Y as y,Z as R}from"./index-C5oI0kaf.js";import{b as E,L as A,u as $}from"./routing-Cm_oCwum.js";import{u as p}from"./i18n-BbpF47i1.js";import{F as C}from"./ArrowsRightLeftIcon-BzLgl5o9.js";import{F,a as B}from"./ChevronLeftIcon-BLyRNZuL.js";import{C as H}from"./CookiePreferences-BBb5XMuG.js";import{K}from"./privacy-BAxopuZI.js";import{r as h,L as x}from"./routing-rYtBowvy.js";import"./XMarkIcon-KMKD47CF.js";function M({title:r,titleId:e,...n},s){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:1.5,stroke:"currentColor","aria-hidden":"true","data-slot":"icon",ref:s,"aria-labelledby":e},n),r?t.createElement("title",{id:e},r):null,t.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M12 6.042A8.967 8.967 0 0 0 6 3.75c-1.052 0-2.062.18-3 .512v14.25A8.987 8.987 0 0 1 6 18c2.305 0 4.408.867 6 2.292m0-14.25a8.966 8.966 0 0 1 6-2.292c1.052 0 2.062.18 3 .512v14.25A8.987 8.987 0 0 0 18 18a8.967 8.967 0 0 0-6 2.292m0-14.25v14.25"}))}const O=t.forwardRef(M);function N({title:r,titleId:e,...n},s){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:1.5,stroke:"currentColor","aria-hidden":"true","data-slot":"icon",ref:s,"aria-labelledby":e},n),r?t.createElement("title",{id:e},r):null,t.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M12 6v6h4.5m4.5 0a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z"}))}const T=t.forwardRef(N);function D({title:r,titleId:e,...n},s){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:1.5,stroke:"currentColor","aria-hidden":"true","data-slot":"icon",ref:s,"aria-labelledby":e},n),r?t.createElement("title",{id:e},r):null,t.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9.568 3H5.25A2.25 2.25 0 0 0 3 5.25v4.318c0 .597.237 1.17.659 1.591l9.581 9.581c.699.699 1.78.872 2.607.33a18.095 18.095 0 0 0 5.223-5.223c.542-.827.369-1.908-.33-2.607L11.16 3.66A2.25 2.25 0 0 0 9.568 3Z"}),t.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M6 6h.008v.008H6V6Z"}))}const P=t.forwardRef(D);function Z({href:r,to:e,...n}){return o.jsx(A,{to:r??"",...n})}function U({isCollapsed:r,toggleCollapsed:e,navigationMenu:n}){const{t:s}=p(),a=(c,d)=>s(`Moderation.${c}`,d),{t:m}=p(),l=(c,d)=>m(`Sidebar.${c}`,d),u=E(),f=t.useCallback(()=>{e()},[e]);k({"browse:sidebar-toggle":f});const i=[{name:a("recentResources"),href:"/moderate/recent",icon:T,description:a("recentResourcesDescription")},{name:a("entityTags"),href:"/moderate/entity-tags",icon:P,description:a("entityTagsDescription")},{name:a("tagSchemas"),href:"/moderate/tag-schemas",icon:O,description:a("tagSchemasDescription")},{name:a("linkedData"),href:"/moderate/linked-data",icon:C,description:a("linkedDataDescription")}];return o.jsx(g,{title:a("title"),items:i,currentPath:u,LinkComponent:Z,...n&&{dropdownContent:n},isCollapsed:r,icons:{chevronLeft:B,bars:F},collapseSidebarLabel:l("collapseSidebar"),expandSidebarLabel:l("expandSidebar")})}function W(){const{t:r}=p(),e=t.useContext(K),{isAuthenticated:n,isAdmin:s,isModerator:a,token:m,activeKnowledgeBase:l,refreshActive:u}=v(),f=$();return l?o.jsx(L,{token:m,children:o.jsx(j,{baseUrl:R(l),tokenRefresher:u,children: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(S,{Link:x,routes:h,t:i=>r(`Navigation.${i}`),tHome:i=>r(`Home.${i}`),brandingLink:"/",collapsible:!0,storageKey:"moderation-sidebar-collapsed",isAuthenticated:n,isAdmin:s,isModerator:a,children:(i,c,d)=>o.jsx(U,{isCollapsed:i,toggleCollapsed:c,navigationMenu:d})}),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(b,{})})})]}),o.jsx(y,{Link:x,routes:h,t:(i,c)=>r(`Footer.${i}`,c),CookiePreferences:H,...(e==null?void 0:e.openKeyboardHelp)&&{onOpenKeyboardHelp:e.openKeyboardHelp}})]})})}):(f.push("/know"),null)}function re(){return o.jsx(w,{children:o.jsx(W,{})})}export{re as default};
2
+ //# sourceMappingURL=layout-B_JLc3yI.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"layout-BInmmVVD.js","sources":["../../../../node_modules/@heroicons/react/24/outline/esm/BookOpenIcon.js","../../../../node_modules/@heroicons/react/24/outline/esm/ClockIcon.js","../../../../node_modules/@heroicons/react/24/outline/esm/TagIcon.js","../../src/components/moderation/ModerationNavigation.tsx","../../src/app/[locale]/moderate/layout.tsx"],"sourcesContent":["import * as React from \"react\";\nfunction BookOpenIcon({\n title,\n titleId,\n ...props\n}, svgRef) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n strokeWidth: 1.5,\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"M12 6.042A8.967 8.967 0 0 0 6 3.75c-1.052 0-2.062.18-3 .512v14.25A8.987 8.987 0 0 1 6 18c2.305 0 4.408.867 6 2.292m0-14.25a8.966 8.966 0 0 1 6-2.292c1.052 0 2.062.18 3 .512v14.25A8.987 8.987 0 0 0 18 18a8.967 8.967 0 0 0-6 2.292m0-14.25v14.25\"\n }));\n}\nconst ForwardRef = /*#__PURE__*/ React.forwardRef(BookOpenIcon);\nexport default ForwardRef;","import * as React from \"react\";\nfunction ClockIcon({\n title,\n titleId,\n ...props\n}, svgRef) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n strokeWidth: 1.5,\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"M12 6v6h4.5m4.5 0a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z\"\n }));\n}\nconst ForwardRef = /*#__PURE__*/ React.forwardRef(ClockIcon);\nexport default ForwardRef;","import * as React from \"react\";\nfunction TagIcon({\n title,\n titleId,\n ...props\n}, svgRef) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n strokeWidth: 1.5,\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"M9.568 3H5.25A2.25 2.25 0 0 0 3 5.25v4.318c0 .597.237 1.17.659 1.591l9.581 9.581c.699.699 1.78.872 2.607.33a18.095 18.095 0 0 0 5.223-5.223c.542-.827.369-1.908-.33-2.607L11.16 3.66A2.25 2.25 0 0 0 9.568 3Z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"M6 6h.008v.008H6V6Z\"\n }));\n}\nconst ForwardRef = /*#__PURE__*/ React.forwardRef(TagIcon);\nexport default ForwardRef;","import React, { useCallback } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Link } from '@/i18n/routing';\nimport { usePathname } from '@/i18n/routing';\nimport { SimpleNavigation, useEventSubscriptions } from '@semiont/react-ui';\nimport type { SimpleNavigationItem } from '@semiont/react-ui';\nimport {\n ClockIcon,\n TagIcon,\n BookOpenIcon,\n ArrowsRightLeftIcon,\n ChevronLeftIcon,\n Bars3Icon\n} from '@heroicons/react/24/outline';\n\ninterface ModerationNavigationProps {\n isCollapsed: boolean;\n toggleCollapsed: () => void;\n navigationMenu?: (onClose: () => void) => React.ReactNode;\n}\n\n// Adapter: SimpleNavigation passes href, but our Link uses `to`\nfunction HrefLink({ href, to: _to, ...props }: React.ComponentProps<typeof Link> & { href?: string }) {\n return <Link to={(href ?? '') as string} {...props} />;\n}\n\nexport function ModerationNavigation({ isCollapsed, toggleCollapsed, navigationMenu }: ModerationNavigationProps) {\n const { t: _t } = useTranslation();\n const t = (k: string, p?: Record<string, unknown>) => _t(`Moderation.${k}`, p as any) as string;\n const { t: _tSidebar } = useTranslation();\n const tSidebar = (k: string, p?: Record<string, unknown>) => _tSidebar(`Sidebar.${k}`, p as any) as string;\n const pathname = usePathname();\n\n // Handle sidebar toggle events\n const handleSidebarToggle = useCallback(() => {\n toggleCollapsed();\n }, [toggleCollapsed]);\n\n // Subscribe to sidebar toggle events\n useEventSubscriptions({\n 'browse:sidebar-toggle': handleSidebarToggle,\n });\n\n const navigation: SimpleNavigationItem[] = [\n {\n name: t('recentResources'),\n href: '/moderate/recent',\n icon: ClockIcon,\n description: t('recentResourcesDescription')\n },\n {\n name: t('entityTags'),\n href: '/moderate/entity-tags',\n icon: TagIcon,\n description: t('entityTagsDescription')\n },\n {\n name: t('tagSchemas'),\n href: '/moderate/tag-schemas',\n icon: BookOpenIcon,\n description: t('tagSchemasDescription')\n },\n {\n name: t('linkedData'),\n href: '/moderate/linked-data',\n icon: ArrowsRightLeftIcon,\n description: t('linkedDataDescription')\n }\n ];\n\n return (\n <SimpleNavigation\n title={t('title')}\n items={navigation}\n currentPath={pathname}\n LinkComponent={HrefLink as any}\n {...(navigationMenu && { dropdownContent: navigationMenu })}\n isCollapsed={isCollapsed}\n icons={{\n chevronLeft: ChevronLeftIcon as React.ComponentType<{ className?: string }>,\n bars: Bars3Icon as React.ComponentType<{ className?: string }>\n }}\n collapseSidebarLabel={tSidebar('collapseSidebar')}\n expandSidebarLabel={tSidebar('expandSidebar')}\n />\n );\n}","import { useContext } from 'react';\nimport { Outlet } from 'react-router-dom';\nimport { useTranslation } from 'react-i18next';\nimport {\n LeftSidebar,\n Footer,\n ApiClientProvider,\n AuthTokenProvider,\n useKnowledgeBaseSession,\n kbBackendUrl,\n} from '@semiont/react-ui';\nimport { ModerationNavigation } from '@/components/moderation/ModerationNavigation';\nimport { CookiePreferences } from '@/components/CookiePreferences';\nimport { KeyboardShortcutsContext } from '@/contexts/KeyboardShortcutsContext';\nimport { Link, routes } from '@/lib/routing';\nimport { useRouter } from '@/i18n/routing';\nimport { AuthShell } from '@/contexts/AuthShell';\n\nfunction ModerateLayoutBody() {\n const { t } = useTranslation();\n const keyboardContext = useContext(KeyboardShortcutsContext);\n const { isAuthenticated, isAdmin, isModerator, token: authToken, activeKnowledgeBase, refreshActive } = useKnowledgeBaseSession();\n const router = useRouter();\n\n if (!activeKnowledgeBase) {\n router.push('/know');\n return null;\n }\n\n return (\n <AuthTokenProvider token={authToken}>\n <ApiClientProvider baseUrl={kbBackendUrl(activeKnowledgeBase)} tokenRefresher={refreshActive}>\n <div className=\"min-h-screen bg-gray-50 dark:bg-gray-900 flex flex-col\">\n <div className=\"flex flex-1\">\n <LeftSidebar\n Link={Link}\n routes={routes}\n t={(key: string) => t(`Navigation.${key}`)}\n tHome={(key: string) => t(`Home.${key}`)}\n brandingLink=\"/\"\n collapsible={true}\n storageKey=\"moderation-sidebar-collapsed\"\n isAuthenticated={isAuthenticated}\n isAdmin={isAdmin}\n isModerator={isModerator}\n >\n {(isCollapsed, toggleCollapsed, navigationMenu) => (\n <ModerationNavigation\n isCollapsed={isCollapsed}\n toggleCollapsed={toggleCollapsed}\n navigationMenu={navigationMenu}\n />\n )}\n </LeftSidebar>\n <main className=\"flex-1 p-6 flex flex-col\">\n <div className=\"max-w-7xl mx-auto flex-1 flex flex-col w-full\">\n <Outlet />\n </div>\n </main>\n </div>\n <Footer\n Link={Link}\n routes={routes}\n t={(key: string, params?: Record<string, unknown>) => t(`Footer.${key}`, params as any) as string}\n CookiePreferences={CookiePreferences}\n {...(keyboardContext?.openKeyboardHelp && { onOpenKeyboardHelp: keyboardContext.openKeyboardHelp })}\n />\n </div>\n </ApiClientProvider>\n </AuthTokenProvider>\n );\n}\n\nexport default function ModerateLayout() {\n return (\n <AuthShell>\n <ModerateLayoutBody />\n </AuthShell>\n );\n}\n"],"names":["BookOpenIcon","title","titleId","props","svgRef","React.createElement","ForwardRef","React.forwardRef","ClockIcon","TagIcon","HrefLink","href","_to","Link","ModerationNavigation","isCollapsed","toggleCollapsed","navigationMenu","_t","useTranslation","t","k","p","_tSidebar","tSidebar","pathname","usePathname","handleSidebarToggle","useCallback","useEventSubscriptions","navigation","ArrowsRightLeftIcon","jsx","SimpleNavigation","ChevronLeftIcon","Bars3Icon","ModerateLayoutBody","keyboardContext","useContext","KeyboardShortcutsContext","isAuthenticated","isAdmin","isModerator","authToken","activeKnowledgeBase","refreshActive","useKnowledgeBaseSession","router","useRouter","AuthTokenProvider","ApiClientProvider","kbBackendUrl","jsxs","LeftSidebar","routes","key","Outlet","Footer","params","CookiePreferences","ModerateLayout","AuthShell"],"mappings":"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","x_google_ignoreList":[0,1,2]}
1
+ {"version":3,"file":"layout-B_JLc3yI.js","sources":["../../../../node_modules/@heroicons/react/24/outline/esm/BookOpenIcon.js","../../../../node_modules/@heroicons/react/24/outline/esm/ClockIcon.js","../../../../node_modules/@heroicons/react/24/outline/esm/TagIcon.js","../../src/components/moderation/ModerationNavigation.tsx","../../src/app/[locale]/moderate/layout.tsx"],"sourcesContent":["import * as React from \"react\";\nfunction BookOpenIcon({\n title,\n titleId,\n ...props\n}, svgRef) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n strokeWidth: 1.5,\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"M12 6.042A8.967 8.967 0 0 0 6 3.75c-1.052 0-2.062.18-3 .512v14.25A8.987 8.987 0 0 1 6 18c2.305 0 4.408.867 6 2.292m0-14.25a8.966 8.966 0 0 1 6-2.292c1.052 0 2.062.18 3 .512v14.25A8.987 8.987 0 0 0 18 18a8.967 8.967 0 0 0-6 2.292m0-14.25v14.25\"\n }));\n}\nconst ForwardRef = /*#__PURE__*/ React.forwardRef(BookOpenIcon);\nexport default ForwardRef;","import * as React from \"react\";\nfunction ClockIcon({\n title,\n titleId,\n ...props\n}, svgRef) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n strokeWidth: 1.5,\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"M12 6v6h4.5m4.5 0a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z\"\n }));\n}\nconst ForwardRef = /*#__PURE__*/ React.forwardRef(ClockIcon);\nexport default ForwardRef;","import * as React from \"react\";\nfunction TagIcon({\n title,\n titleId,\n ...props\n}, svgRef) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n strokeWidth: 1.5,\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"M9.568 3H5.25A2.25 2.25 0 0 0 3 5.25v4.318c0 .597.237 1.17.659 1.591l9.581 9.581c.699.699 1.78.872 2.607.33a18.095 18.095 0 0 0 5.223-5.223c.542-.827.369-1.908-.33-2.607L11.16 3.66A2.25 2.25 0 0 0 9.568 3Z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"M6 6h.008v.008H6V6Z\"\n }));\n}\nconst ForwardRef = /*#__PURE__*/ React.forwardRef(TagIcon);\nexport default ForwardRef;","import React, { useCallback } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Link } from '@/i18n/routing';\nimport { usePathname } from '@/i18n/routing';\nimport { SimpleNavigation, useEventSubscriptions } from '@semiont/react-ui';\nimport type { SimpleNavigationItem } from '@semiont/react-ui';\nimport {\n ClockIcon,\n TagIcon,\n BookOpenIcon,\n ArrowsRightLeftIcon,\n ChevronLeftIcon,\n Bars3Icon\n} from '@heroicons/react/24/outline';\n\ninterface ModerationNavigationProps {\n isCollapsed: boolean;\n toggleCollapsed: () => void;\n navigationMenu?: (onClose: () => void) => React.ReactNode;\n}\n\n// Adapter: SimpleNavigation passes href, but our Link uses `to`\nfunction HrefLink({ href, to: _to, ...props }: React.ComponentProps<typeof Link> & { href?: string }) {\n return <Link to={(href ?? '') as string} {...props} />;\n}\n\nexport function ModerationNavigation({ isCollapsed, toggleCollapsed, navigationMenu }: ModerationNavigationProps) {\n const { t: _t } = useTranslation();\n const t = (k: string, p?: Record<string, unknown>) => _t(`Moderation.${k}`, p as any) as string;\n const { t: _tSidebar } = useTranslation();\n const tSidebar = (k: string, p?: Record<string, unknown>) => _tSidebar(`Sidebar.${k}`, p as any) as string;\n const pathname = usePathname();\n\n // Handle sidebar toggle events\n const handleSidebarToggle = useCallback(() => {\n toggleCollapsed();\n }, [toggleCollapsed]);\n\n // Subscribe to sidebar toggle events\n useEventSubscriptions({\n 'browse:sidebar-toggle': handleSidebarToggle,\n });\n\n const navigation: SimpleNavigationItem[] = [\n {\n name: t('recentResources'),\n href: '/moderate/recent',\n icon: ClockIcon,\n description: t('recentResourcesDescription')\n },\n {\n name: t('entityTags'),\n href: '/moderate/entity-tags',\n icon: TagIcon,\n description: t('entityTagsDescription')\n },\n {\n name: t('tagSchemas'),\n href: '/moderate/tag-schemas',\n icon: BookOpenIcon,\n description: t('tagSchemasDescription')\n },\n {\n name: t('linkedData'),\n href: '/moderate/linked-data',\n icon: ArrowsRightLeftIcon,\n description: t('linkedDataDescription')\n }\n ];\n\n return (\n <SimpleNavigation\n title={t('title')}\n items={navigation}\n currentPath={pathname}\n LinkComponent={HrefLink as any}\n {...(navigationMenu && { dropdownContent: navigationMenu })}\n isCollapsed={isCollapsed}\n icons={{\n chevronLeft: ChevronLeftIcon as React.ComponentType<{ className?: string }>,\n bars: Bars3Icon as React.ComponentType<{ className?: string }>\n }}\n collapseSidebarLabel={tSidebar('collapseSidebar')}\n expandSidebarLabel={tSidebar('expandSidebar')}\n />\n );\n}","import { useContext } from 'react';\nimport { Outlet } from 'react-router-dom';\nimport { useTranslation } from 'react-i18next';\nimport {\n LeftSidebar,\n Footer,\n ApiClientProvider,\n AuthTokenProvider,\n useKnowledgeBaseSession,\n kbBackendUrl,\n} from '@semiont/react-ui';\nimport { ModerationNavigation } from '@/components/moderation/ModerationNavigation';\nimport { CookiePreferences } from '@/components/CookiePreferences';\nimport { KeyboardShortcutsContext } from '@/contexts/KeyboardShortcutsContext';\nimport { Link, routes } from '@/lib/routing';\nimport { useRouter } from '@/i18n/routing';\nimport { AuthShell } from '@/contexts/AuthShell';\n\nfunction ModerateLayoutBody() {\n const { t } = useTranslation();\n const keyboardContext = useContext(KeyboardShortcutsContext);\n const { isAuthenticated, isAdmin, isModerator, token: authToken, activeKnowledgeBase, refreshActive } = useKnowledgeBaseSession();\n const router = useRouter();\n\n if (!activeKnowledgeBase) {\n router.push('/know');\n return null;\n }\n\n return (\n <AuthTokenProvider token={authToken}>\n <ApiClientProvider baseUrl={kbBackendUrl(activeKnowledgeBase)} tokenRefresher={refreshActive}>\n <div className=\"min-h-screen bg-gray-50 dark:bg-gray-900 flex flex-col\">\n <div className=\"flex flex-1\">\n <LeftSidebar\n Link={Link}\n routes={routes}\n t={(key: string) => t(`Navigation.${key}`)}\n tHome={(key: string) => t(`Home.${key}`)}\n brandingLink=\"/\"\n collapsible={true}\n storageKey=\"moderation-sidebar-collapsed\"\n isAuthenticated={isAuthenticated}\n isAdmin={isAdmin}\n isModerator={isModerator}\n >\n {(isCollapsed, toggleCollapsed, navigationMenu) => (\n <ModerationNavigation\n isCollapsed={isCollapsed}\n toggleCollapsed={toggleCollapsed}\n navigationMenu={navigationMenu}\n />\n )}\n </LeftSidebar>\n <main className=\"flex-1 p-6 flex flex-col\">\n <div className=\"max-w-7xl mx-auto flex-1 flex flex-col w-full\">\n <Outlet />\n </div>\n </main>\n </div>\n <Footer\n Link={Link}\n routes={routes}\n t={(key: string, params?: Record<string, unknown>) => t(`Footer.${key}`, params as any) as string}\n CookiePreferences={CookiePreferences}\n {...(keyboardContext?.openKeyboardHelp && { onOpenKeyboardHelp: keyboardContext.openKeyboardHelp })}\n />\n </div>\n </ApiClientProvider>\n </AuthTokenProvider>\n );\n}\n\nexport default function ModerateLayout() {\n return (\n <AuthShell>\n <ModerateLayoutBody />\n </AuthShell>\n );\n}\n"],"names":["BookOpenIcon","title","titleId","props","svgRef","React.createElement","ForwardRef","React.forwardRef","ClockIcon","TagIcon","HrefLink","href","_to","Link","ModerationNavigation","isCollapsed","toggleCollapsed","navigationMenu","_t","useTranslation","t","k","p","_tSidebar","tSidebar","pathname","usePathname","handleSidebarToggle","useCallback","useEventSubscriptions","navigation","ArrowsRightLeftIcon","jsx","SimpleNavigation","ChevronLeftIcon","Bars3Icon","ModerateLayoutBody","keyboardContext","useContext","KeyboardShortcutsContext","isAuthenticated","isAdmin","isModerator","authToken","activeKnowledgeBase","refreshActive","useKnowledgeBaseSession","router","useRouter","AuthTokenProvider","ApiClientProvider","kbBackendUrl","jsxs","LeftSidebar","routes","key","Outlet","Footer","params","CookiePreferences","ModerateLayout","AuthShell"],"mappings":"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","x_google_ignoreList":[0,1,2]}
@@ -1,2 +1,2 @@
1
- import{j as e}from"./query-B6BuIB0M.js";import{r as i,O as b}from"./vendor-DJo4KD8w.js";import{b as g,L as k,u as v}from"./routing-DDJ3KSPT.js";import{i as w,O as j,Q as L,u as S,U as F,V as y,X as A,Y as $,Z as R}from"./index-DESF7by4.js";import{u as p}from"./i18n-BbpF47i1.js";import{F as K,C}from"./CookiePreferences-ebe4eB-e.js";import{F as N}from"./ArrowsRightLeftIcon-BzLgl5o9.js";import{F as E}from"./CommandLineIcon-Ba4gpk8e.js";import{F as H,a as B}from"./ChevronLeftIcon-BLyRNZuL.js";import{K as O}from"./privacy-DS6wXZXA.js";import{r as x,L as h}from"./routing-NOxgO9NV.js";import"./XMarkIcon-KMKD47CF.js";function P({title:t,titleId:r,...s},c){return i.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:c,"aria-labelledby":r},s),t?i.createElement("title",{id:r},t):null,i.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=i.forwardRef(P);function M({href:t,to:r,...s}){return e.jsx(k,{to:t??"",...s})}function T({isCollapsed:t,toggleCollapsed:r,navigationMenu:s}){const{t:c}=p(),o=(a,l)=>c(`Administration.${a}`,l),{t:m}=p(),d=(a,l)=>m(`Sidebar.${a}`,l),u=g(),f=i.useCallback(()=>{r()},[r]);w({"browse:sidebar-toggle":f});const n=[{name:o("users"),href:"/admin/users",icon:D,description:o("usersDescription")},{name:o("oauthSettings"),href:"/admin/security",icon:K,description:o("oauthSettingsDescription")},{name:o("exchange"),href:"/admin/exchange",icon:N,description:o("exchangeDescription")},{name:o("devops"),href:"/admin/devops",icon:E,description:o("devopsDescription")}];return e.jsx(j,{title:o("title"),items:n,currentPath:u,LinkComponent:M,...s&&{dropdownContent:s},isCollapsed:t,icons:{chevronLeft:B,bars:H},collapseSidebarLabel:d("collapseSidebar"),expandSidebarLabel:d("expandSidebar")})}function U(){const{t}=p(),r=i.useContext(O),{isAuthenticated:s,isAdmin:c,isModerator:o,token:m,activeKnowledgeBase:d,refreshActive:u}=S(),f=v();return d?e.jsx(F,{token:m,children:e.jsx(y,{baseUrl:R(d),tokenRefresher:u,children:e.jsxs("div",{className:"min-h-screen bg-gray-50 dark:bg-gray-900 flex flex-col",children:[e.jsxs("div",{className:"flex flex-1",children:[e.jsx(A,{Link:h,routes:x,t:n=>t(`Navigation.${n}`),tHome:n=>t(`Home.${n}`),brandingLink:"/",collapsible:!0,storageKey:"admin-sidebar-collapsed",isAuthenticated:s,isAdmin:c,isModerator:o,children:(n,a,l)=>e.jsx(T,{isCollapsed:n,toggleCollapsed:a,navigationMenu:l})}),e.jsx("main",{className:"flex-1 p-6 flex flex-col",children:e.jsx("div",{className:"max-w-7xl mx-auto flex-1 flex flex-col w-full",children:e.jsx(b,{})})})]}),e.jsx($,{Link:h,routes:x,t:(n,a)=>t(`Footer.${n}`,a),CookiePreferences:C,...(r==null?void 0:r.openKeyboardHelp)&&{onOpenKeyboardHelp:r.openKeyboardHelp}})]})})}):(f.push("/know"),null)}function ee(){return e.jsx(L,{children:e.jsx(U,{})})}export{ee as default};
2
- //# sourceMappingURL=layout-DvfgC4ds.js.map
1
+ import{j as e}from"./query-B6BuIB0M.js";import{r as i,O as b}from"./vendor-DJo4KD8w.js";import{b as g,L as k,u as v}from"./routing-Cm_oCwum.js";import{i as w,O as j,Q as L,u as S,U as F,V as y,X as A,Y as $,Z as R}from"./index-C5oI0kaf.js";import{u as p}from"./i18n-BbpF47i1.js";import{F as K,C}from"./CookiePreferences-BBb5XMuG.js";import{F as N}from"./ArrowsRightLeftIcon-BzLgl5o9.js";import{F as E}from"./CommandLineIcon-Ba4gpk8e.js";import{F as H,a as B}from"./ChevronLeftIcon-BLyRNZuL.js";import{K as O}from"./privacy-BAxopuZI.js";import{r as x,L as h}from"./routing-rYtBowvy.js";import"./XMarkIcon-KMKD47CF.js";function P({title:t,titleId:r,...s},c){return i.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:c,"aria-labelledby":r},s),t?i.createElement("title",{id:r},t):null,i.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=i.forwardRef(P);function M({href:t,to:r,...s}){return e.jsx(k,{to:t??"",...s})}function T({isCollapsed:t,toggleCollapsed:r,navigationMenu:s}){const{t:c}=p(),o=(a,l)=>c(`Administration.${a}`,l),{t:m}=p(),d=(a,l)=>m(`Sidebar.${a}`,l),u=g(),f=i.useCallback(()=>{r()},[r]);w({"browse:sidebar-toggle":f});const n=[{name:o("users"),href:"/admin/users",icon:D,description:o("usersDescription")},{name:o("oauthSettings"),href:"/admin/security",icon:K,description:o("oauthSettingsDescription")},{name:o("exchange"),href:"/admin/exchange",icon:N,description:o("exchangeDescription")},{name:o("devops"),href:"/admin/devops",icon:E,description:o("devopsDescription")}];return e.jsx(j,{title:o("title"),items:n,currentPath:u,LinkComponent:M,...s&&{dropdownContent:s},isCollapsed:t,icons:{chevronLeft:B,bars:H},collapseSidebarLabel:d("collapseSidebar"),expandSidebarLabel:d("expandSidebar")})}function U(){const{t}=p(),r=i.useContext(O),{isAuthenticated:s,isAdmin:c,isModerator:o,token:m,activeKnowledgeBase:d,refreshActive:u}=S(),f=v();return d?e.jsx(F,{token:m,children:e.jsx(y,{baseUrl:R(d),tokenRefresher:u,children:e.jsxs("div",{className:"min-h-screen bg-gray-50 dark:bg-gray-900 flex flex-col",children:[e.jsxs("div",{className:"flex flex-1",children:[e.jsx(A,{Link:h,routes:x,t:n=>t(`Navigation.${n}`),tHome:n=>t(`Home.${n}`),brandingLink:"/",collapsible:!0,storageKey:"admin-sidebar-collapsed",isAuthenticated:s,isAdmin:c,isModerator:o,children:(n,a,l)=>e.jsx(T,{isCollapsed:n,toggleCollapsed:a,navigationMenu:l})}),e.jsx("main",{className:"flex-1 p-6 flex flex-col",children:e.jsx("div",{className:"max-w-7xl mx-auto flex-1 flex flex-col w-full",children:e.jsx(b,{})})})]}),e.jsx($,{Link:h,routes:x,t:(n,a)=>t(`Footer.${n}`,a),CookiePreferences:C,...(r==null?void 0:r.openKeyboardHelp)&&{onOpenKeyboardHelp:r.openKeyboardHelp}})]})})}):(f.push("/know"),null)}function ee(){return e.jsx(L,{children:e.jsx(U,{})})}export{ee as default};
2
+ //# sourceMappingURL=layout-DJI7aibW.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"layout-DvfgC4ds.js","sources":["../../../../node_modules/@heroicons/react/24/outline/esm/UsersIcon.js","../../src/components/admin/AdminNavigation.tsx","../../src/app/[locale]/admin/layout.tsx"],"sourcesContent":["import * as React from \"react\";\nfunction UsersIcon({\n title,\n titleId,\n ...props\n}, svgRef) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n strokeWidth: 1.5,\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"M15 19.128a9.38 9.38 0 0 0 2.625.372 9.337 9.337 0 0 0 4.121-.952 4.125 4.125 0 0 0-7.533-2.493M15 19.128v-.003c0-1.113-.285-2.16-.786-3.07M15 19.128v.106A12.318 12.318 0 0 1 8.624 21c-2.331 0-4.512-.645-6.374-1.766l-.001-.109a6.375 6.375 0 0 1 11.964-3.07M12 6.375a3.375 3.375 0 1 1-6.75 0 3.375 3.375 0 0 1 6.75 0Zm8.25 2.25a2.625 2.625 0 1 1-5.25 0 2.625 2.625 0 0 1 5.25 0Z\"\n }));\n}\nconst ForwardRef = /*#__PURE__*/ React.forwardRef(UsersIcon);\nexport default ForwardRef;","import React, { useCallback } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Link } from '@/i18n/routing';\nimport { usePathname } from '@/i18n/routing';\nimport { SimpleNavigation, useEventSubscriptions } from '@semiont/react-ui';\nimport type { SimpleNavigationItem } from '@semiont/react-ui';\nimport {\n UsersIcon,\n ShieldCheckIcon,\n CommandLineIcon,\n ArrowsRightLeftIcon,\n ChevronLeftIcon,\n Bars3Icon\n} from '@heroicons/react/24/outline';\n\ninterface AdminNavigationProps {\n isCollapsed: boolean;\n toggleCollapsed: () => void;\n navigationMenu?: (onClose: () => void) => React.ReactNode;\n}\n\n// Adapter: SimpleNavigation passes href, but our Link uses `to`\nfunction HrefLink({ href, to: _to, ...props }: React.ComponentProps<typeof Link> & { href?: string }) {\n return <Link to={(href ?? '') as string} {...props} />;\n}\n\nexport function AdminNavigation({ isCollapsed, toggleCollapsed, navigationMenu }: AdminNavigationProps) {\n const { t: _t } = useTranslation();\n const t = (k: string, p?: Record<string, unknown>) => _t(`Administration.${k}`, p as any) as string;\n const { t: _tSidebar } = useTranslation();\n const tSidebar = (k: string, p?: Record<string, unknown>) => _tSidebar(`Sidebar.${k}`, p as any) as string;\n const pathname = usePathname();\n\n // Handle sidebar toggle events\n const handleSidebarToggle = useCallback(() => {\n toggleCollapsed();\n }, [toggleCollapsed]);\n\n // Subscribe to sidebar toggle events\n useEventSubscriptions({\n 'browse:sidebar-toggle': handleSidebarToggle,\n });\n\n const navigation: SimpleNavigationItem[] = [\n {\n name: t('users'),\n href: '/admin/users',\n icon: UsersIcon,\n description: t('usersDescription')\n },\n {\n name: t('oauthSettings'),\n href: '/admin/security',\n icon: ShieldCheckIcon,\n description: t('oauthSettingsDescription')\n },\n {\n name: t('exchange'),\n href: '/admin/exchange',\n icon: ArrowsRightLeftIcon,\n description: t('exchangeDescription')\n },\n {\n name: t('devops'),\n href: '/admin/devops',\n icon: CommandLineIcon,\n description: t('devopsDescription')\n },\n ];\n\n return (\n <SimpleNavigation\n title={t('title')}\n items={navigation}\n currentPath={pathname}\n LinkComponent={HrefLink as any}\n {...(navigationMenu && { dropdownContent: navigationMenu })}\n isCollapsed={isCollapsed}\n icons={{\n chevronLeft: ChevronLeftIcon as React.ComponentType<{ className?: string }>,\n bars: Bars3Icon as React.ComponentType<{ className?: string }>\n }}\n collapseSidebarLabel={tSidebar('collapseSidebar')}\n expandSidebarLabel={tSidebar('expandSidebar')}\n />\n );\n}","import { useContext } from 'react';\nimport { Outlet } from 'react-router-dom';\nimport { useTranslation } from 'react-i18next';\nimport { AdminNavigation } from '@/components/admin/AdminNavigation';\nimport {\n LeftSidebar,\n Footer,\n ApiClientProvider,\n AuthTokenProvider,\n useKnowledgeBaseSession,\n kbBackendUrl,\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 { isAuthenticated, isAdmin, isModerator, token: authToken, activeKnowledgeBase, refreshActive } = useKnowledgeBaseSession();\n const router = useRouter();\n\n if (!activeKnowledgeBase) {\n router.push('/know');\n return null;\n }\n\n return (\n <AuthTokenProvider token={authToken}>\n <ApiClientProvider baseUrl={kbBackendUrl(activeKnowledgeBase)} tokenRefresher={refreshActive}>\n <div className=\"min-h-screen bg-gray-50 dark:bg-gray-900 flex flex-col\">\n <div className=\"flex flex-1\">\n <LeftSidebar\n Link={Link}\n routes={routes}\n t={(key: string) => t(`Navigation.${key}`)}\n tHome={(key: string) => t(`Home.${key}`)}\n brandingLink=\"/\"\n collapsible={true}\n storageKey=\"admin-sidebar-collapsed\"\n isAuthenticated={isAuthenticated}\n isAdmin={isAdmin}\n isModerator={isModerator}\n >\n {(isCollapsed, toggleCollapsed, navigationMenu) => (\n <AdminNavigation\n isCollapsed={isCollapsed}\n toggleCollapsed={toggleCollapsed}\n navigationMenu={navigationMenu}\n />\n )}\n </LeftSidebar>\n <main className=\"flex-1 p-6 flex flex-col\">\n <div className=\"max-w-7xl mx-auto flex-1 flex flex-col w-full\">\n <Outlet />\n </div>\n </main>\n </div>\n <Footer\n Link={Link}\n routes={routes}\n t={(key: string, params?: Record<string, unknown>) => t(`Footer.${key}`, params as any) as string}\n CookiePreferences={CookiePreferences}\n {...(keyboardContext?.openKeyboardHelp && { onOpenKeyboardHelp: keyboardContext.openKeyboardHelp })}\n />\n </div>\n </ApiClientProvider>\n </AuthTokenProvider>\n );\n}\n\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","isAuthenticated","isAdmin","isModerator","authToken","activeKnowledgeBase","refreshActive","useKnowledgeBaseSession","router","useRouter","AuthTokenProvider","ApiClientProvider","kbBackendUrl","jsxs","LeftSidebar","routes","key","Outlet","Footer","params","CookiePreferences","AdminLayout","AuthShell"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"layout-DJI7aibW.js","sources":["../../../../node_modules/@heroicons/react/24/outline/esm/UsersIcon.js","../../src/components/admin/AdminNavigation.tsx","../../src/app/[locale]/admin/layout.tsx"],"sourcesContent":["import * as React from \"react\";\nfunction UsersIcon({\n title,\n titleId,\n ...props\n}, svgRef) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n strokeWidth: 1.5,\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"M15 19.128a9.38 9.38 0 0 0 2.625.372 9.337 9.337 0 0 0 4.121-.952 4.125 4.125 0 0 0-7.533-2.493M15 19.128v-.003c0-1.113-.285-2.16-.786-3.07M15 19.128v.106A12.318 12.318 0 0 1 8.624 21c-2.331 0-4.512-.645-6.374-1.766l-.001-.109a6.375 6.375 0 0 1 11.964-3.07M12 6.375a3.375 3.375 0 1 1-6.75 0 3.375 3.375 0 0 1 6.75 0Zm8.25 2.25a2.625 2.625 0 1 1-5.25 0 2.625 2.625 0 0 1 5.25 0Z\"\n }));\n}\nconst ForwardRef = /*#__PURE__*/ React.forwardRef(UsersIcon);\nexport default ForwardRef;","import React, { useCallback } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Link } from '@/i18n/routing';\nimport { usePathname } from '@/i18n/routing';\nimport { SimpleNavigation, useEventSubscriptions } from '@semiont/react-ui';\nimport type { SimpleNavigationItem } from '@semiont/react-ui';\nimport {\n UsersIcon,\n ShieldCheckIcon,\n CommandLineIcon,\n ArrowsRightLeftIcon,\n ChevronLeftIcon,\n Bars3Icon\n} from '@heroicons/react/24/outline';\n\ninterface AdminNavigationProps {\n isCollapsed: boolean;\n toggleCollapsed: () => void;\n navigationMenu?: (onClose: () => void) => React.ReactNode;\n}\n\n// Adapter: SimpleNavigation passes href, but our Link uses `to`\nfunction HrefLink({ href, to: _to, ...props }: React.ComponentProps<typeof Link> & { href?: string }) {\n return <Link to={(href ?? '') as string} {...props} />;\n}\n\nexport function AdminNavigation({ isCollapsed, toggleCollapsed, navigationMenu }: AdminNavigationProps) {\n const { t: _t } = useTranslation();\n const t = (k: string, p?: Record<string, unknown>) => _t(`Administration.${k}`, p as any) as string;\n const { t: _tSidebar } = useTranslation();\n const tSidebar = (k: string, p?: Record<string, unknown>) => _tSidebar(`Sidebar.${k}`, p as any) as string;\n const pathname = usePathname();\n\n // Handle sidebar toggle events\n const handleSidebarToggle = useCallback(() => {\n toggleCollapsed();\n }, [toggleCollapsed]);\n\n // Subscribe to sidebar toggle events\n useEventSubscriptions({\n 'browse:sidebar-toggle': handleSidebarToggle,\n });\n\n const navigation: SimpleNavigationItem[] = [\n {\n name: t('users'),\n href: '/admin/users',\n icon: UsersIcon,\n description: t('usersDescription')\n },\n {\n name: t('oauthSettings'),\n href: '/admin/security',\n icon: ShieldCheckIcon,\n description: t('oauthSettingsDescription')\n },\n {\n name: t('exchange'),\n href: '/admin/exchange',\n icon: ArrowsRightLeftIcon,\n description: t('exchangeDescription')\n },\n {\n name: t('devops'),\n href: '/admin/devops',\n icon: CommandLineIcon,\n description: t('devopsDescription')\n },\n ];\n\n return (\n <SimpleNavigation\n title={t('title')}\n items={navigation}\n currentPath={pathname}\n LinkComponent={HrefLink as any}\n {...(navigationMenu && { dropdownContent: navigationMenu })}\n isCollapsed={isCollapsed}\n icons={{\n chevronLeft: ChevronLeftIcon as React.ComponentType<{ className?: string }>,\n bars: Bars3Icon as React.ComponentType<{ className?: string }>\n }}\n collapseSidebarLabel={tSidebar('collapseSidebar')}\n expandSidebarLabel={tSidebar('expandSidebar')}\n />\n );\n}","import { useContext } from 'react';\nimport { Outlet } from 'react-router-dom';\nimport { useTranslation } from 'react-i18next';\nimport { AdminNavigation } from '@/components/admin/AdminNavigation';\nimport {\n LeftSidebar,\n Footer,\n ApiClientProvider,\n AuthTokenProvider,\n useKnowledgeBaseSession,\n kbBackendUrl,\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 { isAuthenticated, isAdmin, isModerator, token: authToken, activeKnowledgeBase, refreshActive } = useKnowledgeBaseSession();\n const router = useRouter();\n\n if (!activeKnowledgeBase) {\n router.push('/know');\n return null;\n }\n\n return (\n <AuthTokenProvider token={authToken}>\n <ApiClientProvider baseUrl={kbBackendUrl(activeKnowledgeBase)} tokenRefresher={refreshActive}>\n <div className=\"min-h-screen bg-gray-50 dark:bg-gray-900 flex flex-col\">\n <div className=\"flex flex-1\">\n <LeftSidebar\n Link={Link}\n routes={routes}\n t={(key: string) => t(`Navigation.${key}`)}\n tHome={(key: string) => t(`Home.${key}`)}\n brandingLink=\"/\"\n collapsible={true}\n storageKey=\"admin-sidebar-collapsed\"\n isAuthenticated={isAuthenticated}\n isAdmin={isAdmin}\n isModerator={isModerator}\n >\n {(isCollapsed, toggleCollapsed, navigationMenu) => (\n <AdminNavigation\n isCollapsed={isCollapsed}\n toggleCollapsed={toggleCollapsed}\n navigationMenu={navigationMenu}\n />\n )}\n </LeftSidebar>\n <main className=\"flex-1 p-6 flex flex-col\">\n <div className=\"max-w-7xl mx-auto flex-1 flex flex-col w-full\">\n <Outlet />\n </div>\n </main>\n </div>\n <Footer\n Link={Link}\n routes={routes}\n t={(key: string, params?: Record<string, unknown>) => t(`Footer.${key}`, params as any) as string}\n CookiePreferences={CookiePreferences}\n {...(keyboardContext?.openKeyboardHelp && { onOpenKeyboardHelp: keyboardContext.openKeyboardHelp })}\n />\n </div>\n </ApiClientProvider>\n </AuthTokenProvider>\n );\n}\n\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","isAuthenticated","isAdmin","isModerator","authToken","activeKnowledgeBase","refreshActive","useKnowledgeBaseSession","router","useRouter","AuthTokenProvider","ApiClientProvider","kbBackendUrl","jsxs","LeftSidebar","routes","key","Outlet","Footer","params","CookiePreferences","AdminLayout","AuthShell"],"mappings":"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","x_google_ignoreList":[0]}
@@ -1,2 +1,2 @@
1
- import{j as e,Q as T,a as L,M as A,b as D}from"./query-B6BuIB0M.js";import{r as i,O as M}from"./vendor-DJo4KD8w.js";import{i as z,ar as W,as as B,at as N,au as O,av as G,aw as h,ax as v,ay as j,az as I}from"./index-DESF7by4.js";import{a as F,C as $,b as q,i as Q,c as V,s as y}from"./privacy-DS6wXZXA.js";import{u as Y}from"./routing-DDJ3KSPT.js";import{u as b}from"./i18n-BbpF47i1.js";function K(){const t=Y(),n=i.useCallback(({url:o,cancelFallback:l})=>{l(),t.push(o)},[t]),s=i.useCallback(({path:o})=>{t.push(o)},[t]);return z({"browse:external-navigate":n,"browse:router-push":s}),null}function _(){const{i18n:t}=b();return i.useMemo(()=>({t:(n,s,o)=>{var m;const l=t.getResourceBundle(t.language,"translation");let c=(m=l==null?void 0:l[n])==null?void 0:m[s];if(!c)return`${n}.${s}`;if(o&&typeof c=="string"){let a=c;return Object.entries(o).forEach(([d,f])=>{a=a.replace(new RegExp(`\\{${d}\\}`,"g"),String(f))}),a}return c}}),[t,t.language])}function H(){return new L({queryCache:new D({onError:t=>{t instanceof h&&(t.status===401?v("Your session has expired. Please sign in again."):t.status===403&&j("You do not have permission to access this resource."))}}),mutationCache:new A({onError:t=>{t instanceof h&&(t.status===401?v("Your session has expired. Please sign in again."):t.status===403&&j("You do not have permission to perform this action."))}}),defaultOptions:{queries:{retry:(t,n)=>n instanceof h&&(n.status===401||n.status===403||n.status>=400&&n.status<500)?!1:t<3,retryDelay:t=>Math.min(1e3*2**t,3e4),staleTime:300*1e3,refetchOnWindowFocus:!1}}})}function U({children:t}){const[n]=i.useState(()=>H()),s=_();return e.jsx(W,{translationManager:s,children:e.jsx(T,{client:n,children:e.jsx(B,{children:e.jsx(N,{children:e.jsx(F,{children:e.jsx(O,{children:e.jsxs(G,{children:[e.jsx(K,{}),t]})})})})})})})}function J({title:t,titleId:n,...s},o){return i.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:1.5,stroke:"currentColor","aria-hidden":"true","data-slot":"icon",ref:o,"aria-labelledby":n},s),t?i.createElement("title",{id:n},t):null,i.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"m19.5 8.25-7.5 7.5-7.5-7.5"}))}const X=i.forwardRef(J);function Z({title:t,titleId:n,...s},o){return i.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:1.5,stroke:"currentColor","aria-hidden":"true","data-slot":"icon",ref:o,"aria-labelledby":n},s),t?i.createElement("title",{id:n},t):null,i.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"m4.5 15.75 7.5-7.5 7.5 7.5"}))}const ee=i.forwardRef(Z);function te({className:t=""}){const{t:n}=b(),s=(r,u)=>n(`CookieBanner.${r}`,u),[o,l]=i.useState(!1),[c,m]=i.useState(!1),[a,d]=i.useState(!1),[f,p]=i.useState("GENERAL"),[g,C]=i.useState({necessary:!0,analytics:!1,marketing:!1,preferences:!1});i.useEffect(()=>{(async()=>{if(q()){l(!0);try{const[u,R]=await Promise.all([Q(),V()]);p(u?"GDPR":R?"CCPA":"GENERAL")}catch(u){console.error("Failed to detect region:",u),p("GENERAL")}}})()},[]);const w=async()=>{d(!0);try{const r={necessary:!0,analytics:!0,marketing:!0,preferences:!0};await Promise.resolve(y(r)),l(!1)}catch(r){console.error("Failed to save cookie consent:",r)}finally{d(!1)}},k=async()=>{d(!0);try{const r={necessary:!0,analytics:!1,marketing:!1,preferences:!1};await Promise.resolve(y(r)),l(!1)}catch(r){console.error("Failed to save cookie consent:",r)}finally{d(!1)}},P=async()=>{d(!0);try{await Promise.resolve(y(g)),l(!1)}catch(r){console.error("Failed to save cookie consent:",r)}finally{d(!1)}},E=r=>{r!=="necessary"&&C(u=>({...u,[r]:!u[r]}))},S=()=>{switch(f){case"GDPR":return{title:s("gdprTitle"),description:s("gdprDescription"),learnMore:s("gdprLearnMore")};case"CCPA":return{title:s("ccpaTitle"),description:s("ccpaDescription"),learnMore:s("ccpaLearnMore")};default:return{title:s("generalTitle"),description:s("generalDescription"),learnMore:s("generalLearnMore")}}};if(!o)return null;const x=S();return e.jsx("div",{className:t,style:{position:"fixed",bottom:0,left:0,right:0,zIndex:50,backgroundColor:"var(--semiont-bg-primary)",borderTop:"1px solid var(--semiont-border-primary)",boxShadow:"var(--semiont-shadow-lg)"},children:e.jsx("div",{style:{maxWidth:"80rem",margin:"0 auto",padding:"1rem 1.5rem"},children:e.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"1rem"},children:[e.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:"1.5rem",flexWrap:"wrap"},children:[e.jsxs("div",{style:{flex:1,minWidth:"300px"},children:[e.jsx("h3",{style:{fontSize:"1.125rem",fontWeight:600,color:"var(--semiont-text-primary)",marginBottom:"0.5rem"},children:x.title}),e.jsx("p",{style:{fontSize:"var(--semiont-text-sm, 0.875rem)",color:"var(--semiont-text-secondary)",marginBottom:"0.25rem"},children:x.description}),e.jsx("p",{style:{fontSize:"var(--semiont-text-xs, 0.75rem)",color:"var(--semiont-text-tertiary)"},children:x.learnMore})]}),e.jsxs("div",{style:{display:"flex",gap:"0.75rem",alignItems:"center",flexWrap:"wrap"},children:[e.jsxs("button",{type:"button",onClick:()=>m(!c),className:"semiont-button--secondary",style:{display:"flex",alignItems:"center",gap:"0.25rem"},children:[s("customize"),c?e.jsx(ee,{style:{width:"1rem",height:"1rem"}}):e.jsx(X,{style:{width:"1rem",height:"1rem"}})]}),f!=="GDPR"&&e.jsx("button",{type:"button",onClick:k,disabled:a,className:"semiont-button--secondary",children:s(a?"saving":"rejectAll")}),e.jsx("button",{type:"button",onClick:w,disabled:a,className:"semiont-button--primary",children:s(a?"saving":"acceptAll")})]})]}),c&&e.jsx("div",{style:{borderTop:"1px solid var(--semiont-border-primary)",paddingTop:"1rem"},children:e.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"1rem"},children:[e.jsx("h4",{style:{fontSize:"1rem",fontWeight:500,color:"var(--semiont-text-primary)"},children:s("cookiePreferences")}),e.jsx("div",{style:{display:"flex",flexDirection:"column",gap:"0.75rem"},children:$.map(r=>e.jsxs("div",{style:{display:"flex",alignItems:"flex-start",gap:"0.75rem"},children:[e.jsx("div",{style:{display:"flex",alignItems:"center",height:"1.25rem"},children:e.jsx("input",{id:`cookie-${r.id}`,type:"checkbox",checked:g[r.id]||!1,onChange:()=>E(r.id),disabled:r.required||a,style:{accentColor:"var(--semiont-color-primary-600, #2563eb)"}})}),e.jsxs("div",{style:{flex:1,minWidth:0},children:[e.jsxs("label",{htmlFor:`cookie-${r.id}`,style:{fontSize:"var(--semiont-text-sm, 0.875rem)",fontWeight:500,color:"var(--semiont-text-primary)",cursor:"pointer"},children:[r.name,r.required&&e.jsx("span",{style:{fontSize:"var(--semiont-text-xs, 0.75rem)",color:"var(--semiont-text-tertiary)",marginLeft:"0.25rem"},children:s("required")})]}),e.jsx("p",{style:{fontSize:"var(--semiont-text-xs, 0.75rem)",color:"var(--semiont-text-secondary)",marginTop:"0.25rem"},children:r.description}),e.jsxs("details",{style:{marginTop:"0.25rem"},children:[e.jsx("summary",{style:{fontSize:"var(--semiont-text-xs, 0.75rem)",color:"var(--semiont-color-primary-600, #2563eb)",cursor:"pointer"},children:s("viewCookies")}),e.jsx("div",{style:{marginTop:"0.25rem",fontSize:"var(--semiont-text-xs, 0.75rem)",color:"var(--semiont-text-tertiary)"},children:r.cookies.join(", ")})]})]})]},r.id))}),e.jsxs("div",{style:{display:"flex",justifyContent:"flex-end",gap:"0.75rem",paddingTop:"1rem"},children:[e.jsx("button",{type:"button",onClick:()=>m(!1),className:"semiont-button--secondary",children:s("cancel")}),e.jsx("button",{type:"button",onClick:P,disabled:a,className:"semiont-button--primary",children:s(a?"saving":"savePreferences")})]})]})})]})})})}function le(){return e.jsxs(U,{children:[e.jsx(I,{}),e.jsx(M,{}),e.jsx(te,{})]})}export{le as default};
2
- //# sourceMappingURL=layout-Bc0HvP9q.js.map
1
+ import{j as e,Q as T,a as A,M as L,b as D}from"./query-B6BuIB0M.js";import{r as i,O as M}from"./vendor-DJo4KD8w.js";import{i as z,as as W,at as B,au as N,av as O,aw as G,ax as h,ay as v,az as j,aA as I}from"./index-C5oI0kaf.js";import{a as F,C as $,b as q,i as Q,c as V,s as y}from"./privacy-BAxopuZI.js";import{u as Y}from"./routing-Cm_oCwum.js";import{u as b}from"./i18n-BbpF47i1.js";function K(){const t=Y(),n=i.useCallback(({url:o,cancelFallback:l})=>{l(),t.push(o)},[t]),s=i.useCallback(({path:o})=>{t.push(o)},[t]);return z({"browse:external-navigate":n,"browse:router-push":s}),null}function _(){const{i18n:t}=b();return i.useMemo(()=>({t:(n,s,o)=>{var m;const l=t.getResourceBundle(t.language,"translation");let c=(m=l==null?void 0:l[n])==null?void 0:m[s];if(!c)return`${n}.${s}`;if(o&&typeof c=="string"){let a=c;return Object.entries(o).forEach(([d,f])=>{a=a.replace(new RegExp(`\\{${d}\\}`,"g"),String(f))}),a}return c}}),[t,t.language])}function H(){return new A({queryCache:new D({onError:t=>{t instanceof h&&(t.status===401?v("Your session has expired. Please sign in again."):t.status===403&&j("You do not have permission to access this resource."))}}),mutationCache:new L({onError:t=>{t instanceof h&&(t.status===401?v("Your session has expired. Please sign in again."):t.status===403&&j("You do not have permission to perform this action."))}}),defaultOptions:{queries:{retry:(t,n)=>n instanceof h&&(n.status===401||n.status===403||n.status>=400&&n.status<500)?!1:t<3,retryDelay:t=>Math.min(1e3*2**t,3e4),staleTime:300*1e3,refetchOnWindowFocus:!1}}})}function U({children:t}){const[n]=i.useState(()=>H()),s=_();return e.jsx(W,{translationManager:s,children:e.jsx(T,{client:n,children:e.jsx(B,{children:e.jsx(N,{children:e.jsx(F,{children:e.jsx(O,{children:e.jsxs(G,{children:[e.jsx(K,{}),t]})})})})})})})}function J({title:t,titleId:n,...s},o){return i.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:1.5,stroke:"currentColor","aria-hidden":"true","data-slot":"icon",ref:o,"aria-labelledby":n},s),t?i.createElement("title",{id:n},t):null,i.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"m19.5 8.25-7.5 7.5-7.5-7.5"}))}const X=i.forwardRef(J);function Z({title:t,titleId:n,...s},o){return i.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:1.5,stroke:"currentColor","aria-hidden":"true","data-slot":"icon",ref:o,"aria-labelledby":n},s),t?i.createElement("title",{id:n},t):null,i.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"m4.5 15.75 7.5-7.5 7.5 7.5"}))}const ee=i.forwardRef(Z);function te({className:t=""}){const{t:n}=b(),s=(r,u)=>n(`CookieBanner.${r}`,u),[o,l]=i.useState(!1),[c,m]=i.useState(!1),[a,d]=i.useState(!1),[f,p]=i.useState("GENERAL"),[g,C]=i.useState({necessary:!0,analytics:!1,marketing:!1,preferences:!1});i.useEffect(()=>{(async()=>{if(q()){l(!0);try{const[u,R]=await Promise.all([Q(),V()]);p(u?"GDPR":R?"CCPA":"GENERAL")}catch(u){console.error("Failed to detect region:",u),p("GENERAL")}}})()},[]);const w=async()=>{d(!0);try{const r={necessary:!0,analytics:!0,marketing:!0,preferences:!0};await Promise.resolve(y(r)),l(!1)}catch(r){console.error("Failed to save cookie consent:",r)}finally{d(!1)}},k=async()=>{d(!0);try{const r={necessary:!0,analytics:!1,marketing:!1,preferences:!1};await Promise.resolve(y(r)),l(!1)}catch(r){console.error("Failed to save cookie consent:",r)}finally{d(!1)}},P=async()=>{d(!0);try{await Promise.resolve(y(g)),l(!1)}catch(r){console.error("Failed to save cookie consent:",r)}finally{d(!1)}},E=r=>{r!=="necessary"&&C(u=>({...u,[r]:!u[r]}))},S=()=>{switch(f){case"GDPR":return{title:s("gdprTitle"),description:s("gdprDescription"),learnMore:s("gdprLearnMore")};case"CCPA":return{title:s("ccpaTitle"),description:s("ccpaDescription"),learnMore:s("ccpaLearnMore")};default:return{title:s("generalTitle"),description:s("generalDescription"),learnMore:s("generalLearnMore")}}};if(!o)return null;const x=S();return e.jsx("div",{className:t,style:{position:"fixed",bottom:0,left:0,right:0,zIndex:50,backgroundColor:"var(--semiont-bg-primary)",borderTop:"1px solid var(--semiont-border-primary)",boxShadow:"var(--semiont-shadow-lg)"},children:e.jsx("div",{style:{maxWidth:"80rem",margin:"0 auto",padding:"1rem 1.5rem"},children:e.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"1rem"},children:[e.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:"1.5rem",flexWrap:"wrap"},children:[e.jsxs("div",{style:{flex:1,minWidth:"300px"},children:[e.jsx("h3",{style:{fontSize:"1.125rem",fontWeight:600,color:"var(--semiont-text-primary)",marginBottom:"0.5rem"},children:x.title}),e.jsx("p",{style:{fontSize:"var(--semiont-text-sm, 0.875rem)",color:"var(--semiont-text-secondary)",marginBottom:"0.25rem"},children:x.description}),e.jsx("p",{style:{fontSize:"var(--semiont-text-xs, 0.75rem)",color:"var(--semiont-text-tertiary)"},children:x.learnMore})]}),e.jsxs("div",{style:{display:"flex",gap:"0.75rem",alignItems:"center",flexWrap:"wrap"},children:[e.jsxs("button",{type:"button",onClick:()=>m(!c),className:"semiont-button--secondary",style:{display:"flex",alignItems:"center",gap:"0.25rem"},children:[s("customize"),c?e.jsx(ee,{style:{width:"1rem",height:"1rem"}}):e.jsx(X,{style:{width:"1rem",height:"1rem"}})]}),f!=="GDPR"&&e.jsx("button",{type:"button",onClick:k,disabled:a,className:"semiont-button--secondary",children:s(a?"saving":"rejectAll")}),e.jsx("button",{type:"button",onClick:w,disabled:a,className:"semiont-button--primary",children:s(a?"saving":"acceptAll")})]})]}),c&&e.jsx("div",{style:{borderTop:"1px solid var(--semiont-border-primary)",paddingTop:"1rem"},children:e.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"1rem"},children:[e.jsx("h4",{style:{fontSize:"1rem",fontWeight:500,color:"var(--semiont-text-primary)"},children:s("cookiePreferences")}),e.jsx("div",{style:{display:"flex",flexDirection:"column",gap:"0.75rem"},children:$.map(r=>e.jsxs("div",{style:{display:"flex",alignItems:"flex-start",gap:"0.75rem"},children:[e.jsx("div",{style:{display:"flex",alignItems:"center",height:"1.25rem"},children:e.jsx("input",{id:`cookie-${r.id}`,type:"checkbox",checked:g[r.id]||!1,onChange:()=>E(r.id),disabled:r.required||a,style:{accentColor:"var(--semiont-color-primary-600, #2563eb)"}})}),e.jsxs("div",{style:{flex:1,minWidth:0},children:[e.jsxs("label",{htmlFor:`cookie-${r.id}`,style:{fontSize:"var(--semiont-text-sm, 0.875rem)",fontWeight:500,color:"var(--semiont-text-primary)",cursor:"pointer"},children:[r.name,r.required&&e.jsx("span",{style:{fontSize:"var(--semiont-text-xs, 0.75rem)",color:"var(--semiont-text-tertiary)",marginLeft:"0.25rem"},children:s("required")})]}),e.jsx("p",{style:{fontSize:"var(--semiont-text-xs, 0.75rem)",color:"var(--semiont-text-secondary)",marginTop:"0.25rem"},children:r.description}),e.jsxs("details",{style:{marginTop:"0.25rem"},children:[e.jsx("summary",{style:{fontSize:"var(--semiont-text-xs, 0.75rem)",color:"var(--semiont-color-primary-600, #2563eb)",cursor:"pointer"},children:s("viewCookies")}),e.jsx("div",{style:{marginTop:"0.25rem",fontSize:"var(--semiont-text-xs, 0.75rem)",color:"var(--semiont-text-tertiary)"},children:r.cookies.join(", ")})]})]})]},r.id))}),e.jsxs("div",{style:{display:"flex",justifyContent:"flex-end",gap:"0.75rem",paddingTop:"1rem"},children:[e.jsx("button",{type:"button",onClick:()=>m(!1),className:"semiont-button--secondary",children:s("cancel")}),e.jsx("button",{type:"button",onClick:P,disabled:a,className:"semiont-button--primary",children:s(a?"saving":"savePreferences")})]})]})})]})})})}function le(){return e.jsxs(U,{children:[e.jsx(I,{}),e.jsx(M,{}),e.jsx(te,{})]})}export{le as default};
2
+ //# sourceMappingURL=layout-DXY8hCsB.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"layout-Bc0HvP9q.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 'browse:external-navigate': handleExternalNavigate,\n 'browse:router-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, { useState } from 'react';\nimport { QueryClient, QueryClientProvider, QueryCache, MutationCache } from '@tanstack/react-query';\nimport {\n ToastProvider,\n LiveRegionProvider,\n TranslationProvider,\n ThemeProvider,\n EventBusProvider,\n notifySessionExpired,\n notifyPermissionDenied,\n} from '@semiont/react-ui';\nimport { KeyboardShortcutsProvider } from '@/contexts/KeyboardShortcutsContext';\nimport { NavigationHandler } from '@/components/knowledge/NavigationHandler';\nimport { APIError } from '@semiont/api-client';\nimport { useMergedTranslationManager } from '@/hooks/useMergedTranslationManager';\n\n/**\n * Create a minimal QueryClient with error handlers and retry logic.\n * Authentication is handled by @semiont/api-client via lib/api-hooks.\n *\n * SAFETY NET — the handlers below run only when the api-client's\n * `tokenRefresher` did NOT recover a 401. Two cases:\n *\n * 1. The api-client that issued the request has no `tokenRefresher`\n * configured. KnowledgeBasePanel's bootstrap auth calls go through\n * a fresh client without a refresher, so a 401 from those reaches\n * this handler directly. (Bootstrap calls shouldn't 401 in normal\n * operation, but this handler keeps us covered if they do.)\n *\n * 2. The refresh attempt itself failed. In that case `refreshActive`\n * already set `sessionExpiredAt` BEFORE the 401 propagated, so the\n * `notifySessionExpired` call here is idempotent — it just sets the\n * same flag that's already set.\n *\n * Don't delete this handler — case (1) is still real. But understand that\n * for the protected-layout flows (the bulk of the app), it almost never\n * fires because the api-client's beforeRetry hook handles 401s transparently.\n *\n * 401/403 errors route through module-scoped notify functions registered by\n * the active KnowledgeBaseSessionProvider (mounted inside the protected\n * AuthShell). On pre-app routes where no provider is mounted, the calls are\n * no-ops.\n */\nfunction createQueryClient() {\n return new QueryClient({\n queryCache: new QueryCache({\n onError: (error) => {\n if (error instanceof APIError) {\n if (error.status === 401) {\n notifySessionExpired('Your session has expired. Please sign in again.');\n } else if (error.status === 403) {\n notifyPermissionDenied('You do not have permission to access this resource.');\n }\n }\n },\n }),\n mutationCache: new MutationCache({\n onError: (error) => {\n if (error instanceof APIError) {\n if (error.status === 401) {\n notifySessionExpired('Your session has expired. Please sign in again.');\n } else if (error.status === 403) {\n notifyPermissionDenied('You do not have permission to perform this action.');\n }\n }\n },\n }),\n defaultOptions: {\n queries: {\n retry: (failureCount, error) => {\n // Don't retry on client errors (4xx) - these won't fix themselves\n if (error instanceof APIError) {\n // Never retry auth errors\n if (error.status === 401 || error.status === 403) {\n return false;\n }\n // Never retry other client errors (400, 404, 422, etc.)\n if (error.status >= 400 && error.status < 500) {\n return false;\n }\n }\n // Only retry server errors (5xx) or network errors, max 3 times\n return failureCount < 3;\n },\n retryDelay: (attemptIndex) => Math.min(1000 * 2 ** attemptIndex, 30000), // Exponential backoff: 1s, 2s, 4s, max 30s\n staleTime: 5 * 60 * 1000, // 5 minutes\n refetchOnWindowFocus: false, // Prevent unnecessary refetches when window regains focus\n },\n },\n });\n}\n\n/**\n * Root Provider Composition for Semiont Frontend.\n *\n * Wires up GLOBAL contexts that every page needs — auth-independent.\n *\n * Auth-dependent providers (KnowledgeBaseSessionProvider, ProtectedErrorBoundary,\n * SessionExpiredModal, PermissionDeniedModal) are bundled in `AuthShell` and\n * mounted only in protected layouts (know/, admin/, moderate/, auth/welcome/).\n * Pre-app routes (landing, OAuth flow) intentionally do NOT mount AuthShell —\n * they have no need to validate JWTs.\n *\n * ApiClientProvider is added in feature-specific layouts (e.g. /know) that\n * require API access. Public pages don't need it.\n *\n * Provider order — outer to inner:\n * 1. TranslationProvider — i18n\n * 2. QueryClientProvider — React Query\n * 3. ToastProvider — toast notifications\n * 4. LiveRegionProvider — a11y live region\n * 5. KeyboardShortcutsProvider — keyboard shortcuts\n * 6. ThemeProvider — theme\n * 7. EventBusProvider — RxJS event bus\n * + NavigationHandler\n */\nexport function Providers({ children }: { children: React.ReactNode }) {\n const [queryClient] = useState(() => createQueryClient());\n const translationManager = useMergedTranslationManager();\n\n return (\n <TranslationProvider translationManager={translationManager}>\n <QueryClientProvider client={queryClient}>\n <ToastProvider>\n <LiveRegionProvider>\n <KeyboardShortcutsProvider>\n <ThemeProvider>\n <EventBusProvider>\n <NavigationHandler />\n {children}\n </EventBusProvider>\n </ThemeProvider>\n </KeyboardShortcutsProvider>\n </LiveRegionProvider>\n </ToastProvider>\n </QueryClientProvider>\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","createQueryClient","QueryClient","QueryCache","error","APIError","notifySessionExpired","notifyPermissionDenied","MutationCache","failureCount","attemptIndex","Providers","children","queryClient","useState","translationManager","TranslationProvider","jsx","QueryClientProvider","ToastProvider","LiveRegionProvider","KeyboardShortcutsProvider","ThemeProvider","EventBusProvider","ChevronDownIcon","title","titleId","props","svgRef","React.createElement","ForwardRef","React.forwardRef","ChevronUpIcon","CookieBanner","className","_t","t","k","p","isVisible","setIsVisible","showDetails","setShowDetails","isLoading","setIsLoading","region","setRegion","consent","setConsent","useEffect","shouldShowBanner","isGDPR","isCCPA","isGDPRApplicable","isCCPAApplicable","handleAcceptAll","fullConsent","setCookieConsent","handleRejectAll","minimalConsent","handleSavePreferences","handleCategoryToggle","categoryId","prev","getBannerText","bannerText","jsxs","COOKIE_CATEGORIES","category","LocaleLayout","SkipLinks","Outlet"],"mappings":"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","x_google_ignoreList":[3,4]}
1
+ {"version":3,"file":"layout-DXY8hCsB.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 'browse:external-navigate': handleExternalNavigate,\n 'browse:router-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, { useState } from 'react';\nimport { QueryClient, QueryClientProvider, QueryCache, MutationCache } from '@tanstack/react-query';\nimport {\n ToastProvider,\n LiveRegionProvider,\n TranslationProvider,\n ThemeProvider,\n EventBusProvider,\n notifySessionExpired,\n notifyPermissionDenied,\n} from '@semiont/react-ui';\nimport { KeyboardShortcutsProvider } from '@/contexts/KeyboardShortcutsContext';\nimport { NavigationHandler } from '@/components/knowledge/NavigationHandler';\nimport { APIError } from '@semiont/api-client';\nimport { useMergedTranslationManager } from '@/hooks/useMergedTranslationManager';\n\n/**\n * Create a minimal QueryClient with error handlers and retry logic.\n * Authentication is handled by @semiont/api-client via lib/api-hooks.\n *\n * SAFETY NET — the handlers below run only when the api-client's\n * `tokenRefresher` did NOT recover a 401. Two cases:\n *\n * 1. The api-client that issued the request has no `tokenRefresher`\n * configured. KnowledgeBasePanel's bootstrap auth calls go through\n * a fresh client without a refresher, so a 401 from those reaches\n * this handler directly. (Bootstrap calls shouldn't 401 in normal\n * operation, but this handler keeps us covered if they do.)\n *\n * 2. The refresh attempt itself failed. In that case `refreshActive`\n * already set `sessionExpiredAt` BEFORE the 401 propagated, so the\n * `notifySessionExpired` call here is idempotent — it just sets the\n * same flag that's already set.\n *\n * Don't delete this handler — case (1) is still real. But understand that\n * for the protected-layout flows (the bulk of the app), it almost never\n * fires because the api-client's beforeRetry hook handles 401s transparently.\n *\n * 401/403 errors route through module-scoped notify functions registered by\n * the active KnowledgeBaseSessionProvider (mounted inside the protected\n * AuthShell). On pre-app routes where no provider is mounted, the calls are\n * no-ops.\n */\nfunction createQueryClient() {\n return new QueryClient({\n queryCache: new QueryCache({\n onError: (error) => {\n if (error instanceof APIError) {\n if (error.status === 401) {\n notifySessionExpired('Your session has expired. Please sign in again.');\n } else if (error.status === 403) {\n notifyPermissionDenied('You do not have permission to access this resource.');\n }\n }\n },\n }),\n mutationCache: new MutationCache({\n onError: (error) => {\n if (error instanceof APIError) {\n if (error.status === 401) {\n notifySessionExpired('Your session has expired. Please sign in again.');\n } else if (error.status === 403) {\n notifyPermissionDenied('You do not have permission to perform this action.');\n }\n }\n },\n }),\n defaultOptions: {\n queries: {\n retry: (failureCount, error) => {\n // Don't retry on client errors (4xx) - these won't fix themselves\n if (error instanceof APIError) {\n // Never retry auth errors\n if (error.status === 401 || error.status === 403) {\n return false;\n }\n // Never retry other client errors (400, 404, 422, etc.)\n if (error.status >= 400 && error.status < 500) {\n return false;\n }\n }\n // Only retry server errors (5xx) or network errors, max 3 times\n return failureCount < 3;\n },\n retryDelay: (attemptIndex) => Math.min(1000 * 2 ** attemptIndex, 30000), // Exponential backoff: 1s, 2s, 4s, max 30s\n staleTime: 5 * 60 * 1000, // 5 minutes\n refetchOnWindowFocus: false, // Prevent unnecessary refetches when window regains focus\n },\n },\n });\n}\n\n/**\n * Root Provider Composition for Semiont Frontend.\n *\n * Wires up GLOBAL contexts that every page needs — auth-independent.\n *\n * Auth-dependent providers (KnowledgeBaseSessionProvider, ProtectedErrorBoundary,\n * SessionExpiredModal, PermissionDeniedModal) are bundled in `AuthShell` and\n * mounted only in protected layouts (know/, admin/, moderate/, auth/welcome/).\n * Pre-app routes (landing, OAuth flow) intentionally do NOT mount AuthShell —\n * they have no need to validate JWTs.\n *\n * ApiClientProvider is added in feature-specific layouts (e.g. /know) that\n * require API access. Public pages don't need it.\n *\n * Provider order — outer to inner:\n * 1. TranslationProvider — i18n\n * 2. QueryClientProvider — React Query\n * 3. ToastProvider — toast notifications\n * 4. LiveRegionProvider — a11y live region\n * 5. KeyboardShortcutsProvider — keyboard shortcuts\n * 6. ThemeProvider — theme\n * 7. EventBusProvider — RxJS event bus\n * + NavigationHandler\n */\nexport function Providers({ children }: { children: React.ReactNode }) {\n const [queryClient] = useState(() => createQueryClient());\n const translationManager = useMergedTranslationManager();\n\n return (\n <TranslationProvider translationManager={translationManager}>\n <QueryClientProvider client={queryClient}>\n <ToastProvider>\n <LiveRegionProvider>\n <KeyboardShortcutsProvider>\n <ThemeProvider>\n <EventBusProvider>\n <NavigationHandler />\n {children}\n </EventBusProvider>\n </ThemeProvider>\n </KeyboardShortcutsProvider>\n </LiveRegionProvider>\n </ToastProvider>\n </QueryClientProvider>\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","createQueryClient","QueryClient","QueryCache","error","APIError","notifySessionExpired","notifyPermissionDenied","MutationCache","failureCount","attemptIndex","Providers","children","queryClient","useState","translationManager","TranslationProvider","jsx","QueryClientProvider","ToastProvider","LiveRegionProvider","KeyboardShortcutsProvider","ThemeProvider","EventBusProvider","ChevronDownIcon","title","titleId","props","svgRef","React.createElement","ForwardRef","React.forwardRef","ChevronUpIcon","CookieBanner","className","_t","t","k","p","isVisible","setIsVisible","showDetails","setShowDetails","isLoading","setIsLoading","region","setRegion","consent","setConsent","useEffect","shouldShowBanner","isGDPR","isCCPA","isGDPRApplicable","isCCPAApplicable","handleAcceptAll","fullConsent","setCookieConsent","handleRejectAll","minimalConsent","handleSavePreferences","handleCategoryToggle","categoryId","prev","getBannerText","bannerText","jsxs","COOKIE_CATEGORIES","category","LocaleLayout","SkipLinks","Outlet"],"mappings":"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","x_google_ignoreList":[3,4]}
@@ -1,2 +1,2 @@
1
- import{j as s,u as L}from"./query-B6BuIB0M.js";import{r as u,O as A}from"./vendor-DJo4KD8w.js";import{a0 as K,i as E,a1 as _,u as p,X as H,a2 as O,m as T,Q as P,U as B,V as C,a3 as F,a4 as I,a5 as M,Y as w,Z as z,f as D,g as W,h as Q,T as q,a6 as G,a7 as J,a8 as U,a9 as V}from"./index-DESF7by4.js";import{b as Y,u as X,L as Z}from"./routing-DDJ3KSPT.js";import{u as m}from"./i18n-BbpF47i1.js";import{F as ee,T as se}from"./ToolbarPanels-C9r6ZyGY.js";import{F as te}from"./XMarkIcon-KMKD47CF.js";import{F as oe,a as re}from"./ChevronLeftIcon-BLyRNZuL.js";import{r as v,L as g}from"./routing-NOxgO9NV.js";import{C as j}from"./CookiePreferences-ebe4eB-e.js";import{K as ne}from"./privacy-DS6wXZXA.js";import{S as ae}from"./StreamStatusContext-BNiTXRfJ.js";const ie=({className:t})=>s.jsx("span",{className:t,style:{fontSize:"1.25rem",lineHeight:"1"},children:"🔭"});function le({href:t,to:e,...r}){return s.jsx(Z,{to:t??"",...r})}function ce({isCollapsed:t,toggleCollapsed:e,navigationMenu:r}){const{t:o}=m(),n=(d,f)=>o(`Sidebar.${d}`,f),a=Y(),l=X(),{openResources:i,removeResource:c,reorderResources:h}=K(),b=[{name:n("discover"),href:"/know/discover",icon:ie,description:n("searchAndBrowse")},{name:n("compose"),href:"/know/compose",icon:ee,description:n("composeNewResource")}],S=u.useCallback(()=>{e()},[e]),N=u.useCallback(({resourceId:d})=>{c(d),a===`/know/resource/${d}`&&l.push("/know/discover")},[c,a,l]),R=u.useCallback(({oldIndex:d,newIndex:f})=>{h(d,f)},[h]);E({"browse:sidebar-toggle":S,"browse:resource-close":N,"browse:resource-reorder":R});const k=d=>{l.push(d)},$=d=>`/know/resource/${d}`;return s.jsx("div",{className:"flex flex-col h-full",children:s.jsx("div",{className:"flex-1 min-h-0 overflow-y-auto",children:s.jsx(_,{fixedItems:b,resources:i,isCollapsed:t,currentPath:a,LinkComponent:le,onNavigate:k,getResourceHref:$,className:"knowledge-navigation",translations:{title:n("title")},icons:{chevronLeft:re,bars:oe,close:te},navigationMenu:r})})})}function de(){const{t}=m(),e=(i,c)=>t(`Navigation.${i}`,c),{t:r}=m(),o=(i,c)=>r(`Home.${i}`,c),{isAuthenticated:n,isAdmin:a,isModerator:l}=p();return s.jsx(H,{Link:g,routes:v,t:e,tHome:o,brandingLink:"/",collapsible:!0,storageKey:"knowledgeNavCollapsed",isAuthenticated:n,isAdmin:a,isModerator:l,children:(i,c,h)=>s.jsx(ce,{isCollapsed:i,toggleCollapsed:c,navigationMenu:h})})}const x="openDocuments";function y(t){return[...t].sort((e,r)=>e.order!==void 0&&r.order!==void 0?e.order-r.order:e.openedAt-r.openedAt)}function ue(){if(typeof localStorage>"u")return[];try{const t=localStorage.getItem(x);if(t)return y(JSON.parse(t))}catch{}return[]}class he{constructor(){this.state$=new O(ue()),this.resources$=this.state$.asObservable(),this.handleStorageEvent=e=>{if(e.key===x&&e.newValue)try{this.state$.next(y(JSON.parse(e.newValue)))}catch{}},this.state$.subscribe(e=>{typeof localStorage<"u"&&localStorage.setItem(x,JSON.stringify(e))}),typeof window<"u"&&window.addEventListener("storage",this.handleStorageEvent)}get resources(){return this.state$.value}add(e,r,o,n){const a=this.state$.value;if(a.find(i=>i.id===e))this.state$.next(a.map(i=>i.id===e?{...i,name:r,...o&&{mediaType:o},...n&&{storageUri:n}}:i));else{const i=a.length>0?Math.max(...a.map(c=>c.order??c.openedAt)):0;this.state$.next([...a,{id:e,name:r,openedAt:Date.now(),order:i+1,...o&&{mediaType:o},...n&&{storageUri:n}}])}}remove(e){this.state$.next(this.state$.value.filter(r=>r.id!==e))}updateName(e,r){this.state$.next(this.state$.value.map(o=>o.id===e?{...o,name:r}:o))}reorder(e,r){const o=[...this.state$.value],n=o.splice(e,1)[0];o.splice(r,0,n),this.state$.next(o.map((a,l)=>({...a,order:l})))}destroy(){typeof window<"u"&&window.removeEventListener("storage",this.handleStorageEvent)}}function me(){const t=u.useMemo(()=>new he,[]);u.useEffect(()=>()=>t.destroy(),[t]);const e=T(t.resources$)??t.resources,r=u.useMemo(()=>({addResource:(o,n,a,l)=>t.add(o,n,a,l),removeResource:o=>t.remove(o),updateResourceName:(o,n)=>t.updateName(o,n),reorderResources:(o,n)=>t.reorder(o,n)}),[t]);return u.useMemo(()=>({openResources:e,...r}),[e,r])}function fe(){const t=L();return u.useMemo(()=>({invalidateAnnotations:e=>{t.invalidateQueries({queryKey:["resources",e,"annotations"]})},invalidateEvents:e=>{t.invalidateQueries({queryKey:["resources",e,"events"]})}}),[t])}function xe(){return G(),J(),null}function pe(){const{t}=m(),e=a=>t(`DiscoverEmptyState.${a}`),{knowledgeBases:r,activeKnowledgeBase:o}=p(),n=o?V(o.id):null;return r.length===0?s.jsxs("div",{style:{textAlign:"center",maxWidth:"28rem"},children:[s.jsx("h2",{style:{fontSize:"1.1rem",fontWeight:600,marginBottom:"0.5rem"},children:e("noKnowledgeBases")}),s.jsx("p",{style:{color:"var(--semiont-color-neutral-400)",fontSize:"0.85rem",lineHeight:1.5,marginBottom:"0.75rem"},children:e("noKnowledgeBasesHint")}),s.jsxs("p",{style:{color:"var(--semiont-color-neutral-400)",fontSize:"0.85rem",lineHeight:1.5},children:[s.jsx("a",{href:"https://github.com/The-AI-Alliance/semiont",target:"_blank",rel:"noopener noreferrer",style:{color:"var(--semiont-color-primary-500)"},children:e("findKnowledgeBases")})," · ",s.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:e("createNew")})]})]}):n==="authenticated"?null:s.jsxs("div",{style:{textAlign:"center",maxWidth:"24rem"},children:[s.jsx("h2",{style:{fontSize:"1.1rem",fontWeight:600,marginBottom:"0.5rem"},children:(o==null?void 0:o.label)??""}),s.jsxs("p",{style:{color:"var(--semiont-color-neutral-400)",fontSize:"0.85rem",lineHeight:1.5},children:[e(n==="expired"?"sessionExpired":"signedOut")," ",e("signInHint")]})]})}function ve({t,keyboardContext:e}){const{activePanel:r}=D(),{theme:o}=W(),{showLineNumbers:n}=Q();return s.jsxs("div",{className:"h-screen semiont-knowledge-layout semiont-layout-with-footer flex flex-col overflow-hidden",children:[s.jsxs("div",{className:"flex flex-1 overflow-hidden",children:[s.jsx("main",{className:"flex-1 w-full px-2 pb-6 flex flex-col overflow-hidden",children:s.jsx("div",{className:"w-full mx-auto flex-1 flex flex-col h-full overflow-hidden items-center justify-center",children:s.jsx(pe,{})})}),s.jsx(se,{activePanel:r,showLineNumbers:n,theme:o,hoverDelayMs:150}),s.jsx(q,{activePanel:r,context:"simple"})]}),s.jsx(w,{Link:g,routes:v,t:(a,l)=>t(`Footer.${a}`,l),CookiePreferences:j,showPolicyLinks:!("__TAURI_INTERNALS__"in window),...(e==null?void 0:e.openKeyboardHelp)&&{onOpenKeyboardHelp:e.openKeyboardHelp}})]})}function ge({children:t}){const{status:e}=U();return s.jsx(ae.Provider,{value:e,children:t})}function we(){const{t}=m(),e=u.useContext(ne),r=me(),o=fe(),{token:n,isLoading:a,activeKnowledgeBase:l,refreshActive:i}=p();return a?s.jsx("div",{className:"h-screen flex items-center justify-center",children:s.jsxs("div",{className:"text-center",children:[s.jsx("div",{className:"animate-spin rounded-full h-12 w-12 border-b-2 border-blue-600 mx-auto mb-4"}),s.jsx("p",{className:"text-gray-600 dark:text-gray-400",children:"Loading..."})]})}):!l||!n?s.jsx(ve,{t:(c,h)=>t(c,h),keyboardContext:e}):s.jsx(B,{token:n,children:s.jsx(C,{baseUrl:z(l),tokenRefresher:i,children:s.jsx(F,{cacheManager:o,children:s.jsx(I,{openResourcesManager:r,children:s.jsxs(M,{children:[s.jsx(xe,{}),s.jsx(ge,{children:s.jsxs("div",{className:"h-screen semiont-knowledge-layout semiont-layout-with-footer flex flex-col overflow-hidden",children:[s.jsxs("div",{className:"flex flex-1 overflow-hidden",children:[s.jsx(de,{}),s.jsx("main",{className:"flex-1 w-full px-2 pb-6 flex flex-col overflow-hidden",children:s.jsx("div",{className:"w-full mx-auto flex-1 flex flex-col h-full overflow-hidden",children:s.jsx(A,{})})})]}),s.jsx(w,{Link:g,routes:v,t:(c,h)=>t(`Footer.${c}`,h),CookiePreferences:j,showPolicyLinks:!("__TAURI_INTERNALS__"in window),...(e==null?void 0:e.openKeyboardHelp)&&{onOpenKeyboardHelp:e.openKeyboardHelp}})]})})]})})})})})}function _e(){return s.jsx(P,{children:s.jsx(we,{})})}export{_e as default};
2
- //# sourceMappingURL=layout-CFCI5ndn.js.map
1
+ import{j as s,u as L}from"./query-B6BuIB0M.js";import{r as u,O as A}from"./vendor-DJo4KD8w.js";import{a0 as K,i as E,a1 as _,u as p,X as H,a2 as O,m as T,Q as P,U as B,V as C,a3 as F,a4 as I,a5 as M,Y as w,Z as z,f as D,g as W,h as Q,T as q,a6 as G,a7 as J,a8 as U,a9 as V}from"./index-C5oI0kaf.js";import{b as Y,u as X,L as Z}from"./routing-Cm_oCwum.js";import{u as m}from"./i18n-BbpF47i1.js";import{F as ee,T as se}from"./ToolbarPanels-CfaOVIc9.js";import{F as te}from"./XMarkIcon-KMKD47CF.js";import{F as oe,a as re}from"./ChevronLeftIcon-BLyRNZuL.js";import{r as v,L as g}from"./routing-rYtBowvy.js";import{C as j}from"./CookiePreferences-BBb5XMuG.js";import{K as ne}from"./privacy-BAxopuZI.js";import{S as ae}from"./StreamStatusContext-BNiTXRfJ.js";const ie=({className:t})=>s.jsx("span",{className:t,style:{fontSize:"1.25rem",lineHeight:"1"},children:"🔭"});function le({href:t,to:e,...r}){return s.jsx(Z,{to:t??"",...r})}function ce({isCollapsed:t,toggleCollapsed:e,navigationMenu:r}){const{t:o}=m(),n=(d,f)=>o(`Sidebar.${d}`,f),a=Y(),l=X(),{openResources:i,removeResource:c,reorderResources:h}=K(),b=[{name:n("discover"),href:"/know/discover",icon:ie,description:n("searchAndBrowse")},{name:n("compose"),href:"/know/compose",icon:ee,description:n("composeNewResource")}],S=u.useCallback(()=>{e()},[e]),N=u.useCallback(({resourceId:d})=>{c(d),a===`/know/resource/${d}`&&l.push("/know/discover")},[c,a,l]),R=u.useCallback(({oldIndex:d,newIndex:f})=>{h(d,f)},[h]);E({"browse:sidebar-toggle":S,"browse:resource-close":N,"browse:resource-reorder":R});const k=d=>{l.push(d)},$=d=>`/know/resource/${d}`;return s.jsx("div",{className:"flex flex-col h-full",children:s.jsx("div",{className:"flex-1 min-h-0 overflow-y-auto",children:s.jsx(_,{fixedItems:b,resources:i,isCollapsed:t,currentPath:a,LinkComponent:le,onNavigate:k,getResourceHref:$,className:"knowledge-navigation",translations:{title:n("title")},icons:{chevronLeft:re,bars:oe,close:te},navigationMenu:r})})})}function de(){const{t}=m(),e=(i,c)=>t(`Navigation.${i}`,c),{t:r}=m(),o=(i,c)=>r(`Home.${i}`,c),{isAuthenticated:n,isAdmin:a,isModerator:l}=p();return s.jsx(H,{Link:g,routes:v,t:e,tHome:o,brandingLink:"/",collapsible:!0,storageKey:"knowledgeNavCollapsed",isAuthenticated:n,isAdmin:a,isModerator:l,children:(i,c,h)=>s.jsx(ce,{isCollapsed:i,toggleCollapsed:c,navigationMenu:h})})}const x="openDocuments";function y(t){return[...t].sort((e,r)=>e.order!==void 0&&r.order!==void 0?e.order-r.order:e.openedAt-r.openedAt)}function ue(){if(typeof localStorage>"u")return[];try{const t=localStorage.getItem(x);if(t)return y(JSON.parse(t))}catch{}return[]}class he{constructor(){this.state$=new O(ue()),this.resources$=this.state$.asObservable(),this.handleStorageEvent=e=>{if(e.key===x&&e.newValue)try{this.state$.next(y(JSON.parse(e.newValue)))}catch{}},this.state$.subscribe(e=>{typeof localStorage<"u"&&localStorage.setItem(x,JSON.stringify(e))}),typeof window<"u"&&window.addEventListener("storage",this.handleStorageEvent)}get resources(){return this.state$.value}add(e,r,o,n){const a=this.state$.value;if(a.find(i=>i.id===e))this.state$.next(a.map(i=>i.id===e?{...i,name:r,...o&&{mediaType:o},...n&&{storageUri:n}}:i));else{const i=a.length>0?Math.max(...a.map(c=>c.order??c.openedAt)):0;this.state$.next([...a,{id:e,name:r,openedAt:Date.now(),order:i+1,...o&&{mediaType:o},...n&&{storageUri:n}}])}}remove(e){this.state$.next(this.state$.value.filter(r=>r.id!==e))}updateName(e,r){this.state$.next(this.state$.value.map(o=>o.id===e?{...o,name:r}:o))}reorder(e,r){const o=[...this.state$.value],n=o.splice(e,1)[0];o.splice(r,0,n),this.state$.next(o.map((a,l)=>({...a,order:l})))}destroy(){typeof window<"u"&&window.removeEventListener("storage",this.handleStorageEvent)}}function me(){const t=u.useMemo(()=>new he,[]);u.useEffect(()=>()=>t.destroy(),[t]);const e=T(t.resources$)??t.resources,r=u.useMemo(()=>({addResource:(o,n,a,l)=>t.add(o,n,a,l),removeResource:o=>t.remove(o),updateResourceName:(o,n)=>t.updateName(o,n),reorderResources:(o,n)=>t.reorder(o,n)}),[t]);return u.useMemo(()=>({openResources:e,...r}),[e,r])}function fe(){const t=L();return u.useMemo(()=>({invalidateAnnotations:e=>{t.invalidateQueries({queryKey:["resources",e,"annotations"]})},invalidateEvents:e=>{t.invalidateQueries({queryKey:["resources",e,"events"]})}}),[t])}function xe(){return G(),J(),null}function pe(){const{t}=m(),e=a=>t(`DiscoverEmptyState.${a}`),{knowledgeBases:r,activeKnowledgeBase:o}=p(),n=o?V(o.id):null;return r.length===0?s.jsxs("div",{style:{textAlign:"center",maxWidth:"28rem"},children:[s.jsx("h2",{style:{fontSize:"1.1rem",fontWeight:600,marginBottom:"0.5rem"},children:e("noKnowledgeBases")}),s.jsx("p",{style:{color:"var(--semiont-color-neutral-400)",fontSize:"0.85rem",lineHeight:1.5,marginBottom:"0.75rem"},children:e("noKnowledgeBasesHint")}),s.jsxs("p",{style:{color:"var(--semiont-color-neutral-400)",fontSize:"0.85rem",lineHeight:1.5},children:[s.jsx("a",{href:"https://github.com/The-AI-Alliance/semiont",target:"_blank",rel:"noopener noreferrer",style:{color:"var(--semiont-color-primary-500)"},children:e("findKnowledgeBases")})," · ",s.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:e("createNew")})]})]}):n==="authenticated"?null:s.jsxs("div",{style:{textAlign:"center",maxWidth:"24rem"},children:[s.jsx("h2",{style:{fontSize:"1.1rem",fontWeight:600,marginBottom:"0.5rem"},children:(o==null?void 0:o.label)??""}),s.jsxs("p",{style:{color:"var(--semiont-color-neutral-400)",fontSize:"0.85rem",lineHeight:1.5},children:[e(n==="expired"?"sessionExpired":"signedOut")," ",e("signInHint")]})]})}function ve({t,keyboardContext:e}){const{activePanel:r}=D(),{theme:o}=W(),{showLineNumbers:n}=Q();return s.jsxs("div",{className:"h-screen semiont-knowledge-layout semiont-layout-with-footer flex flex-col overflow-hidden",children:[s.jsxs("div",{className:"flex flex-1 overflow-hidden",children:[s.jsx("main",{className:"flex-1 w-full px-2 pb-6 flex flex-col overflow-hidden",children:s.jsx("div",{className:"w-full mx-auto flex-1 flex flex-col h-full overflow-hidden items-center justify-center",children:s.jsx(pe,{})})}),s.jsx(se,{activePanel:r,showLineNumbers:n,theme:o,hoverDelayMs:150}),s.jsx(q,{activePanel:r,context:"simple"})]}),s.jsx(w,{Link:g,routes:v,t:(a,l)=>t(`Footer.${a}`,l),CookiePreferences:j,showPolicyLinks:!("__TAURI_INTERNALS__"in window),...(e==null?void 0:e.openKeyboardHelp)&&{onOpenKeyboardHelp:e.openKeyboardHelp}})]})}function ge({children:t}){const{status:e}=U();return s.jsx(ae.Provider,{value:e,children:t})}function we(){const{t}=m(),e=u.useContext(ne),r=me(),o=fe(),{token:n,isLoading:a,activeKnowledgeBase:l,refreshActive:i}=p();return a?s.jsx("div",{className:"h-screen flex items-center justify-center",children:s.jsxs("div",{className:"text-center",children:[s.jsx("div",{className:"animate-spin rounded-full h-12 w-12 border-b-2 border-blue-600 mx-auto mb-4"}),s.jsx("p",{className:"text-gray-600 dark:text-gray-400",children:"Loading..."})]})}):!l||!n?s.jsx(ve,{t:(c,h)=>t(c,h),keyboardContext:e}):s.jsx(B,{token:n,children:s.jsx(C,{baseUrl:z(l),tokenRefresher:i,children:s.jsx(F,{cacheManager:o,children:s.jsx(I,{openResourcesManager:r,children:s.jsxs(M,{children:[s.jsx(xe,{}),s.jsx(ge,{children:s.jsxs("div",{className:"h-screen semiont-knowledge-layout semiont-layout-with-footer flex flex-col overflow-hidden",children:[s.jsxs("div",{className:"flex flex-1 overflow-hidden",children:[s.jsx(de,{}),s.jsx("main",{className:"flex-1 w-full px-2 pb-6 flex flex-col overflow-hidden",children:s.jsx("div",{className:"w-full mx-auto flex-1 flex flex-col h-full overflow-hidden",children:s.jsx(A,{})})})]}),s.jsx(w,{Link:g,routes:v,t:(c,h)=>t(`Footer.${c}`,h),CookiePreferences:j,showPolicyLinks:!("__TAURI_INTERNALS__"in window),...(e==null?void 0:e.openKeyboardHelp)&&{onOpenKeyboardHelp:e.openKeyboardHelp}})]})})]})})})})})}function _e(){return s.jsx(P,{children:s.jsx(we,{})})}export{_e as default};
2
+ //# sourceMappingURL=layout-VBQ97DvJ.js.map