@semiont/cli 0.4.17 → 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.
- package/dist/cli.mjs +14 -42
- package/dist/frontend/dist/assets/{CookiePreferences-BDtMuCT2.js → CookiePreferences-BBb5XMuG.js} +2 -2
- package/dist/frontend/dist/assets/{CookiePreferences-BDtMuCT2.js.map → CookiePreferences-BBb5XMuG.js.map} +1 -1
- package/dist/frontend/dist/assets/{PdfAnnotationCanvas.client-CHDCGQBR-CuWwI0uw.js → PdfAnnotationCanvas.client-CHDCGQBR-mCGxablw.js} +2 -2
- package/dist/frontend/dist/assets/{PdfAnnotationCanvas.client-CHDCGQBR-CuWwI0uw.js.map → PdfAnnotationCanvas.client-CHDCGQBR-mCGxablw.js.map} +1 -1
- package/dist/frontend/dist/assets/ToolbarPanels-CfaOVIc9.js +2 -0
- package/dist/frontend/dist/assets/ToolbarPanels-CfaOVIc9.js.map +1 -0
- package/dist/frontend/dist/assets/{client-w-_FzMWW.js → client-CWwdB0xQ.js} +2 -2
- package/dist/frontend/dist/assets/{client-w-_FzMWW.js.map → client-CWwdB0xQ.js.map} +1 -1
- package/dist/frontend/dist/assets/{client-so55bcfy.js → client-Cgz-uiSd.js} +2 -2
- package/dist/frontend/dist/assets/{client-so55bcfy.js.map → client-Cgz-uiSd.js.map} +1 -1
- package/dist/frontend/dist/assets/{client-mCvsMrtH.js → client-D3W9xTBT.js} +2 -2
- package/dist/frontend/dist/assets/{client-mCvsMrtH.js.map → client-D3W9xTBT.js.map} +1 -1
- package/dist/frontend/dist/assets/{client-Dwyu_mF1.js → client-DeL0szs5.js} +2 -2
- package/dist/frontend/dist/assets/{client-Dwyu_mF1.js.map → client-DeL0szs5.js.map} +1 -1
- package/dist/frontend/dist/assets/index-C5oI0kaf.js +161 -0
- package/dist/frontend/dist/assets/index-C5oI0kaf.js.map +1 -0
- package/dist/frontend/dist/assets/layout-B_JLc3yI.js +2 -0
- package/dist/frontend/dist/assets/{layout-Cmn1yGWi.js.map → layout-B_JLc3yI.js.map} +1 -1
- package/dist/frontend/dist/assets/layout-DJI7aibW.js +2 -0
- package/dist/frontend/dist/assets/{layout-B3hxaRnF.js.map → layout-DJI7aibW.js.map} +1 -1
- package/dist/frontend/dist/assets/{layout-CsUwTEip.js → layout-DXY8hCsB.js} +2 -2
- package/dist/frontend/dist/assets/{layout-CsUwTEip.js.map → layout-DXY8hCsB.js.map} +1 -1
- package/dist/frontend/dist/assets/layout-VBQ97DvJ.js +2 -0
- package/dist/frontend/dist/assets/{layout-DXjUb5pL.js.map → layout-VBQ97DvJ.js.map} +1 -1
- package/dist/frontend/dist/assets/{not-found-C46rJTS0.js → not-found-BKG2_Fv3.js} +2 -2
- package/dist/frontend/dist/assets/{not-found-C46rJTS0.js.map → not-found-BKG2_Fv3.js.map} +1 -1
- package/dist/frontend/dist/assets/page-8OrS1-4-.js +2 -0
- package/dist/frontend/dist/assets/page-8OrS1-4-.js.map +1 -0
- package/dist/frontend/dist/assets/{page-BCTRI-5h.js → page-B4Qu9WPd.js} +2 -2
- package/dist/frontend/dist/assets/{page-BCTRI-5h.js.map → page-B4Qu9WPd.js.map} +1 -1
- package/dist/frontend/dist/assets/page-BNJp__R7.js +2 -0
- package/dist/frontend/dist/assets/{page-cHW-gnyq.js.map → page-BNJp__R7.js.map} +1 -1
- package/dist/frontend/dist/assets/{page-DhkdSv3o.js → page-BRTi-f95.js} +2 -2
- package/dist/frontend/dist/assets/{page-DhkdSv3o.js.map → page-BRTi-f95.js.map} +1 -1
- package/dist/frontend/dist/assets/page-BSB8GP79.js +2 -0
- package/dist/frontend/dist/assets/{page-BSaAdGF1.js.map → page-BSB8GP79.js.map} +1 -1
- package/dist/frontend/dist/assets/page-Bx8QAzic.js +2 -0
- package/dist/frontend/dist/assets/{page-jAWX9Yq4.js.map → page-Bx8QAzic.js.map} +1 -1
- package/dist/frontend/dist/assets/page-CDSGl6uY.js +2 -0
- package/dist/frontend/dist/assets/{page-Bs0NV-OR.js.map → page-CDSGl6uY.js.map} +1 -1
- package/dist/frontend/dist/assets/{page-C9LRjfKm.js → page-CJLuuiG8.js} +2 -2
- package/dist/frontend/dist/assets/{page-C9LRjfKm.js.map → page-CJLuuiG8.js.map} +1 -1
- package/dist/frontend/dist/assets/{page-DKA-wyMy.js → page-CyFJt2nP.js} +2 -2
- package/dist/frontend/dist/assets/{page-DKA-wyMy.js.map → page-CyFJt2nP.js.map} +1 -1
- package/dist/frontend/dist/assets/{page-sOV813bU.js → page-D1q6VB02.js} +2 -2
- package/dist/frontend/dist/assets/{page-sOV813bU.js.map → page-D1q6VB02.js.map} +1 -1
- package/dist/frontend/dist/assets/{page-B3Uq31BP.js → page-D3THDsqd.js} +2 -2
- package/dist/frontend/dist/assets/{page-B3Uq31BP.js.map → page-D3THDsqd.js.map} +1 -1
- package/dist/frontend/dist/assets/page-DCxg1lHk.js +2 -0
- package/dist/frontend/dist/assets/{page-DWvAfkY1.js.map → page-DCxg1lHk.js.map} +1 -1
- package/dist/frontend/dist/assets/{page-DCPEscX2.js → page-DbwQv5n_.js} +2 -2
- package/dist/frontend/dist/assets/{page-DCPEscX2.js.map → page-DbwQv5n_.js.map} +1 -1
- package/dist/frontend/dist/assets/page-DddZ9Yxm.js +2 -0
- package/dist/frontend/dist/assets/{page-Cz0qvcvG.js.map → page-DddZ9Yxm.js.map} +1 -1
- package/dist/frontend/dist/assets/{page-Df3S4CSz.js → page-DzoXV-AN.js} +2 -2
- package/dist/frontend/dist/assets/{page-Df3S4CSz.js.map → page-DzoXV-AN.js.map} +1 -1
- package/dist/frontend/dist/assets/{page-DlBB3Xru.js → page-IgGNB4a9.js} +2 -2
- package/dist/frontend/dist/assets/{page-DlBB3Xru.js.map → page-IgGNB4a9.js.map} +1 -1
- package/dist/frontend/dist/assets/{page-DqbPyuN1.js → page-aKPxuWo3.js} +2 -2
- package/dist/frontend/dist/assets/{page-DqbPyuN1.js.map → page-aKPxuWo3.js.map} +1 -1
- package/dist/frontend/dist/assets/{page-DjY64aaC.js → page-jxC42AIR.js} +2 -2
- package/dist/frontend/dist/assets/{page-DjY64aaC.js.map → page-jxC42AIR.js.map} +1 -1
- package/dist/frontend/dist/assets/{privacy-BCxizJzS.js → privacy-BAxopuZI.js} +2 -2
- package/dist/frontend/dist/assets/{privacy-BCxizJzS.js.map → privacy-BAxopuZI.js.map} +1 -1
- package/dist/frontend/dist/assets/{routing-C43HVxNw.js → routing-Cm_oCwum.js} +2 -2
- package/dist/frontend/dist/assets/{routing-C43HVxNw.js.map → routing-Cm_oCwum.js.map} +1 -1
- package/dist/frontend/dist/assets/{routing-swMLj8Z8.js → routing-rYtBowvy.js} +2 -2
- package/dist/frontend/dist/assets/{routing-swMLj8Z8.js.map → routing-rYtBowvy.js.map} +1 -1
- package/dist/frontend/dist/index.html +1 -1
- package/dist/frontend/dist/messages/ar.json +2 -1
- package/dist/frontend/dist/messages/bn.json +2 -1
- package/dist/frontend/dist/messages/cs.json +2 -1
- package/dist/frontend/dist/messages/da.json +2 -1
- package/dist/frontend/dist/messages/de.json +2 -1
- package/dist/frontend/dist/messages/el.json +2 -1
- package/dist/frontend/dist/messages/en.json +2 -1
- package/dist/frontend/dist/messages/es.json +2 -1
- package/dist/frontend/dist/messages/fa.json +2 -1
- package/dist/frontend/dist/messages/fi.json +2 -1
- package/dist/frontend/dist/messages/fr.json +2 -1
- package/dist/frontend/dist/messages/he.json +2 -1
- package/dist/frontend/dist/messages/hi.json +2 -1
- package/dist/frontend/dist/messages/id.json +2 -1
- package/dist/frontend/dist/messages/it.json +2 -1
- package/dist/frontend/dist/messages/ja.json +2 -1
- package/dist/frontend/dist/messages/ko.json +2 -1
- package/dist/frontend/dist/messages/ms.json +2 -1
- package/dist/frontend/dist/messages/nl.json +2 -1
- package/dist/frontend/dist/messages/no.json +2 -1
- package/dist/frontend/dist/messages/pl.json +2 -1
- package/dist/frontend/dist/messages/pt.json +2 -1
- package/dist/frontend/dist/messages/ro.json +2 -1
- package/dist/frontend/dist/messages/sv.json +2 -1
- package/dist/frontend/dist/messages/th.json +2 -1
- package/dist/frontend/dist/messages/tr.json +2 -1
- package/dist/frontend/dist/messages/uk.json +2 -1
- package/dist/frontend/dist/messages/vi.json +2 -1
- package/dist/frontend/dist/messages/zh.json +2 -1
- package/dist/frontend/package.json +1 -1
- package/package.json +7 -7
- package/dist/frontend/dist/assets/ToolbarPanels-mrjx6GSA.js +0 -2
- package/dist/frontend/dist/assets/ToolbarPanels-mrjx6GSA.js.map +0 -1
- package/dist/frontend/dist/assets/index-CqzrFNnV.js +0 -159
- package/dist/frontend/dist/assets/index-CqzrFNnV.js.map +0 -1
- package/dist/frontend/dist/assets/layout-B3hxaRnF.js +0 -2
- package/dist/frontend/dist/assets/layout-Cmn1yGWi.js +0 -2
- package/dist/frontend/dist/assets/layout-DXjUb5pL.js +0 -2
- package/dist/frontend/dist/assets/page-BSaAdGF1.js +0 -2
- package/dist/frontend/dist/assets/page-BjvkLuU3.js +0 -2
- package/dist/frontend/dist/assets/page-BjvkLuU3.js.map +0 -1
- package/dist/frontend/dist/assets/page-Bs0NV-OR.js +0 -2
- package/dist/frontend/dist/assets/page-Cz0qvcvG.js +0 -2
- package/dist/frontend/dist/assets/page-DWvAfkY1.js +0 -2
- package/dist/frontend/dist/assets/page-cHW-gnyq.js +0 -2
- package/dist/frontend/dist/assets/page-jAWX9Yq4.js +0 -2
|
@@ -969,7 +969,8 @@
|
|
|
969
969
|
"statusConnected": "Forbundet",
|
|
970
970
|
"statusExpired": "Session udløbet",
|
|
971
971
|
"statusSignedOut": "Logget ud",
|
|
972
|
-
"statusUnreachable": "Utilgængelig"
|
|
972
|
+
"statusUnreachable": "Utilgængelig",
|
|
973
|
+
"invalidHost": "Ugyldigt værtsnavn"
|
|
973
974
|
},
|
|
974
975
|
"DiscoverEmptyState": {
|
|
975
976
|
"noKnowledgeBases": "Ingen videnbaser",
|
|
@@ -969,7 +969,8 @@
|
|
|
969
969
|
"statusConnected": "Verbunden",
|
|
970
970
|
"statusExpired": "Sitzung abgelaufen",
|
|
971
971
|
"statusSignedOut": "Abgemeldet",
|
|
972
|
-
"statusUnreachable": "Nicht erreichbar"
|
|
972
|
+
"statusUnreachable": "Nicht erreichbar",
|
|
973
|
+
"invalidHost": "Ungültiger Hostname"
|
|
973
974
|
},
|
|
974
975
|
"DiscoverEmptyState": {
|
|
975
976
|
"noKnowledgeBases": "Keine Wissensbasen",
|
|
@@ -969,7 +969,8 @@
|
|
|
969
969
|
"statusConnected": "Συνδεδεμένο",
|
|
970
970
|
"statusExpired": "Η συνεδρία έληξε",
|
|
971
971
|
"statusSignedOut": "Αποσυνδεδεμένο",
|
|
972
|
-
"statusUnreachable": "Μη προσβάσιμο"
|
|
972
|
+
"statusUnreachable": "Μη προσβάσιμο",
|
|
973
|
+
"invalidHost": "Μη έγκυρο όνομα κεντρικού υπολογιστή"
|
|
973
974
|
},
|
|
974
975
|
"DiscoverEmptyState": {
|
|
975
976
|
"noKnowledgeBases": "Δεν υπάρχουν βάσεις γνώσης",
|
|
@@ -648,7 +648,8 @@
|
|
|
648
648
|
"statusConnected": "Connected",
|
|
649
649
|
"statusExpired": "Session expired",
|
|
650
650
|
"statusSignedOut": "Signed out",
|
|
651
|
-
"statusUnreachable": "Unreachable"
|
|
651
|
+
"statusUnreachable": "Unreachable",
|
|
652
|
+
"invalidHost": "Invalid hostname"
|
|
652
653
|
},
|
|
653
654
|
"DiscoverEmptyState": {
|
|
654
655
|
"noKnowledgeBases": "No knowledge bases",
|
|
@@ -969,7 +969,8 @@
|
|
|
969
969
|
"statusConnected": "Conectado",
|
|
970
970
|
"statusExpired": "Sesión expirada",
|
|
971
971
|
"statusSignedOut": "Sesión cerrada",
|
|
972
|
-
"statusUnreachable": "Inaccesible"
|
|
972
|
+
"statusUnreachable": "Inaccesible",
|
|
973
|
+
"invalidHost": "Nombre de host no válido"
|
|
973
974
|
},
|
|
974
975
|
"DiscoverEmptyState": {
|
|
975
976
|
"noKnowledgeBases": "Sin bases de conocimiento",
|
|
@@ -969,7 +969,8 @@
|
|
|
969
969
|
"statusConnected": "متصل",
|
|
970
970
|
"statusExpired": "نشست منقضی شده",
|
|
971
971
|
"statusSignedOut": "خارج شده",
|
|
972
|
-
"statusUnreachable": "غیرقابل دسترس"
|
|
972
|
+
"statusUnreachable": "غیرقابل دسترس",
|
|
973
|
+
"invalidHost": "نام هاست نامعتبر"
|
|
973
974
|
},
|
|
974
975
|
"DiscoverEmptyState": {
|
|
975
976
|
"noKnowledgeBases": "هیچ پایگاه دانشی وجود ندارد",
|
|
@@ -969,7 +969,8 @@
|
|
|
969
969
|
"statusConnected": "Yhdistetty",
|
|
970
970
|
"statusExpired": "Istunto vanhentunut",
|
|
971
971
|
"statusSignedOut": "Kirjautunut ulos",
|
|
972
|
-
"statusUnreachable": "Ei tavoitettavissa"
|
|
972
|
+
"statusUnreachable": "Ei tavoitettavissa",
|
|
973
|
+
"invalidHost": "Virheellinen isäntänimi"
|
|
973
974
|
},
|
|
974
975
|
"DiscoverEmptyState": {
|
|
975
976
|
"noKnowledgeBases": "Ei tietopankkeja",
|
|
@@ -969,7 +969,8 @@
|
|
|
969
969
|
"statusConnected": "Connecté",
|
|
970
970
|
"statusExpired": "Session expirée",
|
|
971
971
|
"statusSignedOut": "Déconnecté",
|
|
972
|
-
"statusUnreachable": "Inaccessible"
|
|
972
|
+
"statusUnreachable": "Inaccessible",
|
|
973
|
+
"invalidHost": "Nom d'hôte invalide"
|
|
973
974
|
},
|
|
974
975
|
"DiscoverEmptyState": {
|
|
975
976
|
"noKnowledgeBases": "Aucune base de connaissances",
|
|
@@ -969,7 +969,8 @@
|
|
|
969
969
|
"statusConnected": "מחובר",
|
|
970
970
|
"statusExpired": "הפגישה פגה",
|
|
971
971
|
"statusSignedOut": "מנותק",
|
|
972
|
-
"statusUnreachable": "לא ניתן להגיע"
|
|
972
|
+
"statusUnreachable": "לא ניתן להגיע",
|
|
973
|
+
"invalidHost": "שם מארח לא חוקי"
|
|
973
974
|
},
|
|
974
975
|
"DiscoverEmptyState": {
|
|
975
976
|
"noKnowledgeBases": "אין בסיסי ידע",
|
|
@@ -969,7 +969,8 @@
|
|
|
969
969
|
"statusConnected": "जुड़ा हुआ",
|
|
970
970
|
"statusExpired": "सत्र समाप्त",
|
|
971
971
|
"statusSignedOut": "साइन आउट",
|
|
972
|
-
"statusUnreachable": "अनुपलब्ध"
|
|
972
|
+
"statusUnreachable": "अनुपलब्ध",
|
|
973
|
+
"invalidHost": "अमान्य होस्टनाम"
|
|
973
974
|
},
|
|
974
975
|
"DiscoverEmptyState": {
|
|
975
976
|
"noKnowledgeBases": "कोई ज्ञान आधार नहीं",
|
|
@@ -969,7 +969,8 @@
|
|
|
969
969
|
"statusConnected": "Terhubung",
|
|
970
970
|
"statusExpired": "Sesi berakhir",
|
|
971
971
|
"statusSignedOut": "Keluar",
|
|
972
|
-
"statusUnreachable": "Tidak dapat dijangkau"
|
|
972
|
+
"statusUnreachable": "Tidak dapat dijangkau",
|
|
973
|
+
"invalidHost": "Nama host tidak valid"
|
|
973
974
|
},
|
|
974
975
|
"DiscoverEmptyState": {
|
|
975
976
|
"noKnowledgeBases": "Tidak ada basis pengetahuan",
|
|
@@ -969,7 +969,8 @@
|
|
|
969
969
|
"statusConnected": "Connesso",
|
|
970
970
|
"statusExpired": "Sessione scaduta",
|
|
971
971
|
"statusSignedOut": "Disconnesso",
|
|
972
|
-
"statusUnreachable": "Non raggiungibile"
|
|
972
|
+
"statusUnreachable": "Non raggiungibile",
|
|
973
|
+
"invalidHost": "Nome host non valido"
|
|
973
974
|
},
|
|
974
975
|
"DiscoverEmptyState": {
|
|
975
976
|
"noKnowledgeBases": "Nessuna base di conoscenza",
|
|
@@ -969,7 +969,8 @@
|
|
|
969
969
|
"statusConnected": "接続済み",
|
|
970
970
|
"statusExpired": "セッション期限切れ",
|
|
971
971
|
"statusSignedOut": "サインアウト済み",
|
|
972
|
-
"statusUnreachable": "到達不能"
|
|
972
|
+
"statusUnreachable": "到達不能",
|
|
973
|
+
"invalidHost": "無効なホスト名"
|
|
973
974
|
},
|
|
974
975
|
"DiscoverEmptyState": {
|
|
975
976
|
"noKnowledgeBases": "ナレッジベースがありません",
|
|
@@ -969,7 +969,8 @@
|
|
|
969
969
|
"statusConnected": "연결됨",
|
|
970
970
|
"statusExpired": "세션 만료",
|
|
971
971
|
"statusSignedOut": "로그아웃됨",
|
|
972
|
-
"statusUnreachable": "연결 불가"
|
|
972
|
+
"statusUnreachable": "연결 불가",
|
|
973
|
+
"invalidHost": "잘못된 호스트 이름"
|
|
973
974
|
},
|
|
974
975
|
"DiscoverEmptyState": {
|
|
975
976
|
"noKnowledgeBases": "지식 베이스 없음",
|
|
@@ -969,7 +969,8 @@
|
|
|
969
969
|
"statusConnected": "Disambungkan",
|
|
970
970
|
"statusExpired": "Sesi tamat",
|
|
971
971
|
"statusSignedOut": "Log keluar",
|
|
972
|
-
"statusUnreachable": "Tidak dapat dicapai"
|
|
972
|
+
"statusUnreachable": "Tidak dapat dicapai",
|
|
973
|
+
"invalidHost": "Nama hos tidak sah"
|
|
973
974
|
},
|
|
974
975
|
"DiscoverEmptyState": {
|
|
975
976
|
"noKnowledgeBases": "Tiada pangkalan pengetahuan",
|
|
@@ -969,7 +969,8 @@
|
|
|
969
969
|
"statusConnected": "Verbonden",
|
|
970
970
|
"statusExpired": "Sessie verlopen",
|
|
971
971
|
"statusSignedOut": "Uitgelogd",
|
|
972
|
-
"statusUnreachable": "Onbereikbaar"
|
|
972
|
+
"statusUnreachable": "Onbereikbaar",
|
|
973
|
+
"invalidHost": "Ongeldige hostnaam"
|
|
973
974
|
},
|
|
974
975
|
"DiscoverEmptyState": {
|
|
975
976
|
"noKnowledgeBases": "Geen kennisbases",
|
|
@@ -969,7 +969,8 @@
|
|
|
969
969
|
"statusConnected": "Tilkoblet",
|
|
970
970
|
"statusExpired": "Økt utløpt",
|
|
971
971
|
"statusSignedOut": "Logget ut",
|
|
972
|
-
"statusUnreachable": "Ikke tilgjengelig"
|
|
972
|
+
"statusUnreachable": "Ikke tilgjengelig",
|
|
973
|
+
"invalidHost": "Ugyldig vertsnavn"
|
|
973
974
|
},
|
|
974
975
|
"DiscoverEmptyState": {
|
|
975
976
|
"noKnowledgeBases": "Ingen kunnskapsbaser",
|
|
@@ -969,7 +969,8 @@
|
|
|
969
969
|
"statusConnected": "Połączono",
|
|
970
970
|
"statusExpired": "Sesja wygasła",
|
|
971
971
|
"statusSignedOut": "Wylogowano",
|
|
972
|
-
"statusUnreachable": "Niedostępny"
|
|
972
|
+
"statusUnreachable": "Niedostępny",
|
|
973
|
+
"invalidHost": "Nieprawidłowa nazwa hosta"
|
|
973
974
|
},
|
|
974
975
|
"DiscoverEmptyState": {
|
|
975
976
|
"noKnowledgeBases": "Brak baz wiedzy",
|
|
@@ -969,7 +969,8 @@
|
|
|
969
969
|
"statusConnected": "Conectado",
|
|
970
970
|
"statusExpired": "Sessão expirada",
|
|
971
971
|
"statusSignedOut": "Desconectado",
|
|
972
|
-
"statusUnreachable": "Inacessível"
|
|
972
|
+
"statusUnreachable": "Inacessível",
|
|
973
|
+
"invalidHost": "Nome de host inválido"
|
|
973
974
|
},
|
|
974
975
|
"DiscoverEmptyState": {
|
|
975
976
|
"noKnowledgeBases": "Nenhuma base de conhecimento",
|
|
@@ -969,7 +969,8 @@
|
|
|
969
969
|
"statusConnected": "Conectat",
|
|
970
970
|
"statusExpired": "Sesiune expirată",
|
|
971
971
|
"statusSignedOut": "Deconectat",
|
|
972
|
-
"statusUnreachable": "Inaccesibil"
|
|
972
|
+
"statusUnreachable": "Inaccesibil",
|
|
973
|
+
"invalidHost": "Nume de gazdă invalid"
|
|
973
974
|
},
|
|
974
975
|
"DiscoverEmptyState": {
|
|
975
976
|
"noKnowledgeBases": "Nicio bază de cunoștințe",
|
|
@@ -969,7 +969,8 @@
|
|
|
969
969
|
"statusConnected": "Ansluten",
|
|
970
970
|
"statusExpired": "Session utgången",
|
|
971
971
|
"statusSignedOut": "Utloggad",
|
|
972
|
-
"statusUnreachable": "Onåbar"
|
|
972
|
+
"statusUnreachable": "Onåbar",
|
|
973
|
+
"invalidHost": "Ogiltigt värdnamn"
|
|
973
974
|
},
|
|
974
975
|
"DiscoverEmptyState": {
|
|
975
976
|
"noKnowledgeBases": "Inga kunskapsbaser",
|
|
@@ -969,7 +969,8 @@
|
|
|
969
969
|
"statusConnected": "เชื่อมต่อแล้ว",
|
|
970
970
|
"statusExpired": "เซสชันหมดอายุ",
|
|
971
971
|
"statusSignedOut": "ออกจากระบบแล้ว",
|
|
972
|
-
"statusUnreachable": "เข้าถึงไม่ได้"
|
|
972
|
+
"statusUnreachable": "เข้าถึงไม่ได้",
|
|
973
|
+
"invalidHost": "ชื่อโฮสต์ไม่ถูกต้อง"
|
|
973
974
|
},
|
|
974
975
|
"DiscoverEmptyState": {
|
|
975
976
|
"noKnowledgeBases": "ไม่มีฐานความรู้",
|
|
@@ -969,7 +969,8 @@
|
|
|
969
969
|
"statusConnected": "Bağlı",
|
|
970
970
|
"statusExpired": "Oturum süresi doldu",
|
|
971
971
|
"statusSignedOut": "Çıkış yapıldı",
|
|
972
|
-
"statusUnreachable": "Erişilemiyor"
|
|
972
|
+
"statusUnreachable": "Erişilemiyor",
|
|
973
|
+
"invalidHost": "Geçersiz ana bilgisayar adı"
|
|
973
974
|
},
|
|
974
975
|
"DiscoverEmptyState": {
|
|
975
976
|
"noKnowledgeBases": "Bilgi tabanı yok",
|
|
@@ -969,7 +969,8 @@
|
|
|
969
969
|
"statusConnected": "Підключено",
|
|
970
970
|
"statusExpired": "Сеанс завершено",
|
|
971
971
|
"statusSignedOut": "Вийшли",
|
|
972
|
-
"statusUnreachable": "Недоступно"
|
|
972
|
+
"statusUnreachable": "Недоступно",
|
|
973
|
+
"invalidHost": "Недійсне ім'я хоста"
|
|
973
974
|
},
|
|
974
975
|
"DiscoverEmptyState": {
|
|
975
976
|
"noKnowledgeBases": "Немає баз знань",
|
|
@@ -969,7 +969,8 @@
|
|
|
969
969
|
"statusConnected": "Đã kết nối",
|
|
970
970
|
"statusExpired": "Phiên đã hết hạn",
|
|
971
971
|
"statusSignedOut": "Đã đăng xuất",
|
|
972
|
-
"statusUnreachable": "Không thể truy cập"
|
|
972
|
+
"statusUnreachable": "Không thể truy cập",
|
|
973
|
+
"invalidHost": "Tên máy chủ không hợp lệ"
|
|
973
974
|
},
|
|
974
975
|
"DiscoverEmptyState": {
|
|
975
976
|
"noKnowledgeBases": "Không có cơ sở kiến thức",
|
|
@@ -969,7 +969,8 @@
|
|
|
969
969
|
"statusConnected": "已连接",
|
|
970
970
|
"statusExpired": "会话已过期",
|
|
971
971
|
"statusSignedOut": "已退出",
|
|
972
|
-
"statusUnreachable": "无法访问"
|
|
972
|
+
"statusUnreachable": "无法访问",
|
|
973
|
+
"invalidHost": "无效的主机名"
|
|
973
974
|
},
|
|
974
975
|
"DiscoverEmptyState": {
|
|
975
976
|
"noKnowledgeBases": "没有知识库",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@semiont/cli",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.19",
|
|
4
4
|
"description": "Semiont CLI - Unified environment management tool",
|
|
5
5
|
"_comment": "AWS SDK dependencies (@aws-sdk/*) are only used by platforms/aws",
|
|
6
6
|
"type": "module",
|
|
@@ -47,12 +47,12 @@
|
|
|
47
47
|
"test:watch:unit": "vitest --watch --config vitest.config.unit.ts"
|
|
48
48
|
},
|
|
49
49
|
"dependencies": {
|
|
50
|
-
"@semiont/api-client": "0.4.
|
|
51
|
-
"@semiont/content": "0.4.
|
|
52
|
-
"@semiont/core": "0.4.
|
|
53
|
-
"@semiont/event-sourcing": "0.4.
|
|
54
|
-
"@semiont/graph": "0.4.
|
|
55
|
-
"@semiont/make-meaning": "0.4.
|
|
50
|
+
"@semiont/api-client": "0.4.19",
|
|
51
|
+
"@semiont/content": "0.4.19",
|
|
52
|
+
"@semiont/core": "0.4.19",
|
|
53
|
+
"@semiont/event-sourcing": "0.4.19",
|
|
54
|
+
"@semiont/graph": "0.4.19",
|
|
55
|
+
"@semiont/make-meaning": "0.4.19",
|
|
56
56
|
"arg": "^5.0.2",
|
|
57
57
|
"argon2": "^0.44.0",
|
|
58
58
|
"express": "^5.2.1",
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{j as e}from"./query-B6BuIB0M.js";import{r as a}from"./vendor-DJo4KD8w.js";import{u as T,m as G,ad as Q,ae as Y,af as V,a8 as _,ag as J,ah as X,ai as q,aj as ee,ak as te,al as se,am as ne,h as ae,an as ie,ao as re,ap as oe}from"./index-CqzrFNnV.js";import{u as O,a as le,b as ce}from"./routing-C43HVxNw.js";import{u as B}from"./i18n-BbpF47i1.js";import{a as de,F as me}from"./XMarkIcon-KMKD47CF.js";function ue({title:n,titleId:t,...i},r){return a.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:1.5,stroke:"currentColor","aria-hidden":"true","data-slot":"icon",ref:r,"aria-labelledby":t},i),n?a.createElement("title",{id:t},n):null,a.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M15.75 9V5.25A2.25 2.25 0 0 0 13.5 3h-6a2.25 2.25 0 0 0-2.25 2.25v13.5A2.25 2.25 0 0 0 7.5 21h6a2.25 2.25 0 0 0 2.25-2.25V15m3 0 3-3m0 0-3-3m3 3H9"}))}const he=a.forwardRef(ue);function ge({title:n,titleId:t,...i},r){return a.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:1.5,stroke:"currentColor","aria-hidden":"true","data-slot":"icon",ref:r,"aria-labelledby":t},i),n?a.createElement("title",{id:t},n):null,a.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"m4.5 12.75 6 6 9-13.5"}))}const pe=a.forwardRef(ge);function xe({title:n,titleId:t,...i},r){return a.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:1.5,stroke:"currentColor","aria-hidden":"true","data-slot":"icon",ref:r,"aria-labelledby":t},i),n?a.createElement("title",{id:t},n):null,a.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M12 4.5v15m7.5-7.5h-15"}))}const fe=a.forwardRef(xe),P="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHZpZXdCb3g9IjAgMCAzMiAzMiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGNpcmNsZSBjeD0iMTYiIGN5PSIxNiIgcj0iMTYiIGZpbGw9IiM2QjcyODAiLz4KPHBhdGggZD0iTTE2IDE2QzE4LjIwOTEgMTYgMjAgMTQuMjA5MSAyMCAxMkMyMCA5Ljc5MDg2IDE4LjIwOTEgOCAxNiA4QzEzLjc5MDkgOCAxMiA5Ljc5MDg2IDEyIDEyQzEyIDE0LjIwOTEgMTMuNzkwOSAxNiAxNiAxNloiIGZpbGw9IiNFNUU3RUIiLz4KPHBhdGggZD0iTTI0IDI1QzI0IDIxLjY4NjMgMjAuNDE4MyAxOSAxNiAxOUMxMS41ODE3IDE5IDggMjEuNjg2MyA4IDI1IiBzdHJva2U9IiNFNUU3RUIiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+Cjwvc3ZnPg==";function je(){const{t:n}=B(),t=(x,f)=>n(`UserPanel.${x}`,f),{displayName:i,avatarUrl:r,userDomain:m,isAdmin:u,isModerator:h,activeKnowledgeBase:o,signOut:l}=T(),j=G(),v=O(),[c,p]=a.useState(!1),{timeRemaining:N}=Q(),I=V(N)??"Unknown",S=(()=>{if(!r||c)return P;const x=Y(r);return x||(console.warn("Invalid profile image URL detected, using fallback"),P)})(),A=async()=>{try{await j.logout()}catch{}o&&l(o.id),v.push("/")};return e.jsxs("div",{className:"semiont-user-panel",children:[e.jsx("h3",{className:"semiont-user-panel__title",children:t("account")}),o&&e.jsx("div",{style:{padding:"0 0.75rem 0.5rem",fontSize:"0.8rem",color:"var(--semiont-color-neutral-400)"},children:o.label}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("img",{src:S,alt:t("profileAlt",{name:i||t("user")}),width:48,height:48,className:"w-12 h-12 rounded-full object-cover",onError:()=>p(!0)}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx("div",{className:"semiont-panel-text",children:i||t("user")}),m&&e.jsxs("div",{className:"semiont-panel-text-secondary",children:["@",m]})]})]}),e.jsxs("div",{children:[e.jsx("label",{className:"semiont-panel-label",children:t("session")}),e.jsx("div",{className:"semiont-session-box",children:e.jsx("div",{className:"semiont-panel-hint",children:t("expiresIn",{time:I})})})]}),(u||h)&&e.jsxs("div",{children:[e.jsx("label",{className:"semiont-panel-label",children:t("privileges")}),e.jsxs("div",{className:"space-y-1",children:[u&&e.jsx("div",{className:"semiont-privilege-badge semiont-privilege-badge--admin",children:e.jsx("span",{className:"semiont-privilege-text",children:t("administrator")})}),h&&e.jsx("div",{className:"semiont-privilege-badge semiont-privilege-badge--moderator",children:e.jsx("span",{className:"semiont-privilege-text",children:t("moderator")})})]})]}),e.jsx("div",{className:"semiont-panel-divider",children:e.jsx("button",{onClick:A,className:"semiont-signout-button",children:t("signOut")})})]})]})}const ve={authenticated:"var(--semiont-color-success-500, #22c55e)",expired:"var(--semiont-color-warning-500, #eab308)","signed-out":"var(--semiont-color-neutral-400, #9ca3af)",unreachable:"var(--semiont-color-error-500, #ef4444)"},ye={authenticated:"statusConnected",expired:"statusExpired","signed-out":"statusSignedOut",unreachable:"statusUnreachable"};function be({status:n,t}){return e.jsx("span",{title:t(ye[n]),style:{width:"0.5rem",height:"0.5rem",borderRadius:"50%",backgroundColor:ve[n],flexShrink:0}})}function we({t:n,onSubmit:t,onCancel:i,error:r,isSubmitting:m,autoFocus:u,pulsing:h,initialHost:o="localhost",initialPort:l=4e3,initialEmail:j="admin@example.com"}){const[v,c]=a.useState(o),[p,N]=a.useState(String(l)),[I,S]=a.useState(j),[A,x]=a.useState("");return e.jsxs("div",{className:h?"semiont-panel__login-form--pulsing":"",style:{margin:"0.5rem",padding:"0.75rem",border:"1px solid var(--semiont-color-neutral-200, #e5e7eb)",borderRadius:"var(--semiont-panel-border-radius, 0.5rem)",background:"var(--semiont-bg-secondary, transparent)"},children:[e.jsx("h3",{style:{fontSize:"0.8rem",fontWeight:600,marginBottom:"0.5rem"},children:n("connectTitle")}),e.jsxs("form",{onSubmit:f=>{f.preventDefault(),t(v,parseInt(p,10)||4e3,I,A)},style:{display:"flex",flexDirection:"column",gap:"0.5rem"},children:[e.jsxs("div",{style:{display:"flex",gap:"0.5rem"},children:[e.jsx("input",{type:"text",value:v,onChange:f=>c(f.target.value),placeholder:"Host",className:"semiont-input",style:{flex:1},autoFocus:u}),e.jsx("input",{type:"number",value:p,onChange:f=>N(f.target.value),placeholder:"Port",className:"semiont-input",style:{width:"5rem"}})]}),e.jsx("input",{type:"email",value:I,onChange:f=>S(f.target.value),placeholder:"Email",className:"semiont-input"}),e.jsx("input",{type:"password",value:A,onChange:f=>x(f.target.value),placeholder:"Password",className:"semiont-input"}),r&&e.jsx("div",{style:{color:"var(--semiont-color-error-500, #ef4444)",fontSize:"0.75rem"},children:r}),e.jsxs("div",{style:{display:"flex",gap:"0.5rem"},children:[e.jsx("button",{type:"submit",className:"semiont-button semiont-button--primary",style:{flex:1},disabled:m,children:n(m?"connecting":"connect")}),e.jsx("button",{type:"button",className:"semiont-button",onClick:i,children:e.jsx(me,{style:{width:"1rem",height:"1rem"}})})]})]})]})}function Ne({t:n,kb:t,onSubmit:i,onCancel:r,error:m,isSubmitting:u}){const[h,o]=a.useState("");return e.jsxs("form",{onSubmit:l=>{l.preventDefault(),i(h)},style:{padding:"0.5rem 0.75rem",display:"flex",flexDirection:"column",gap:"0.375rem"},children:[e.jsx("div",{style:{fontSize:"0.75rem",color:"var(--semiont-color-neutral-400)"},children:t.email}),e.jsx("input",{type:"password",value:h,onChange:l=>o(l.target.value),placeholder:"Password",className:"semiont-input",style:{fontSize:"0.8rem"},autoFocus:!0}),m&&e.jsx("div",{style:{color:"var(--semiont-color-error-500, #ef4444)",fontSize:"0.75rem"},children:m}),e.jsxs("div",{style:{display:"flex",gap:"0.375rem"},children:[e.jsx("button",{type:"submit",className:"semiont-button semiont-button--primary",style:{flex:1,fontSize:"0.8rem"},disabled:u,children:n(u?"signingIn":"signIn")}),e.jsx("button",{type:"button",className:"semiont-button",onClick:r,style:{fontSize:"0.8rem"},children:n("cancel")})]})]})}async function z(n,t,i,r,m){const u=`${i}://${n}:${t}`,h=new J({baseUrl:q(u),eventBus:new X}),o=await h.authenticatePassword(ee(r),m),l=o.token??o.accessToken,j=o.refreshToken;if(!l)throw new Error("No access token received");if(!j)throw new Error("No refresh token received");let v=`${n}:${t}`,c;try{const p=await h.getStatus({auth:te(l)});p.projectName&&(v=p.projectName),p.gitBranch&&(c=p.gitBranch)}catch{}return{token:l,refreshToken:j,label:v,...c?{gitBranch:c}:{}}}function Se(){const{t:n}=B(),t=(s,g)=>n(`KnowledgeBasePanel.${s}`,g),{knowledgeBases:i,activeKnowledgeBase:r,setActiveKnowledgeBase:m,addKnowledgeBase:u,removeKnowledgeBase:h,updateKnowledgeBase:o,signIn:l,signOut:j}=T(),[v,c]=a.useState(!1),[p,N]=a.useState(null),[I,S]=a.useState(!1),[A,x]=a.useState(null),[f,k]=a.useState(null),[U,D]=a.useState(!1),[K,M]=a.useState(null),[,F]=a.useState(0);a.useEffect(()=>{i.length===0&&c(!0)},[i.length]),a.useEffect(()=>{const s=setInterval(()=>F(g=>g+1),3e4);return()=>clearInterval(s)},[]);const W=()=>{c(!0),x(null),N(null)},$=async(s,g,y,b)=>{N(null),S(!0);const w=se(s),E=i.find(d=>d.host===s&&d.port===g);if(E){try{const{token:d,refreshToken:R,gitBranch:C}=await z(s,g,w,y,b);o(E.id,{...C?{gitBranch:C}:{}}),l(E.id,d,R),c(!1)}catch(d){N(d instanceof Error?d.message:String(d))}finally{S(!1)}return}try{const{token:d,refreshToken:R,label:C,gitBranch:L}=await z(s,g,w,y,b);u({label:C,host:s,port:g,protocol:w,email:y,...L?{gitBranch:L}:{}},d,R),c(!1)}catch(d){N(d instanceof Error?d.message:String(d))}finally{S(!1)}},Z=async(s,g)=>{const y=i.find(b=>b.id===s);if(y){k(null),D(!0);try{const{token:b,refreshToken:w,label:E,gitBranch:d}=await z(y.host,y.port,y.protocol,y.email,g);o(s,{label:E,...d?{gitBranch:d}:{}}),l(s,b,w),x(null)}catch(b){k(b instanceof Error?b.message:String(b))}finally{D(!1)}}},H=s=>{_(s.id)==="authenticated"?m(s.id):(x(s.id),c(!1),k(null))};return e.jsxs("div",{className:"semiont-panel",children:[e.jsx("div",{className:"semiont-panel-header",children:e.jsxs("h2",{className:"semiont-panel-header__title",children:[e.jsx("span",{className:"semiont-panel-header__text",children:t("title")}),e.jsxs("span",{className:"semiont-panel-header__count",children:["(",i.length,")"]})]})}),e.jsxs("div",{className:"semiont-panel__content",children:[e.jsx("div",{className:"semiont-panel__list",children:i.map(s=>{const g=_(s.id),y=s.id===(r==null?void 0:r.id),b=A===s.id;return e.jsxs("div",{children:[e.jsxs("div",{className:`semiont-panel-item semiont-panel-item--clickable${y?" semiont-panel-item--selected":""}`,style:{display:"flex",flexDirection:"column",gap:"0.25rem",cursor:"pointer",padding:"0.5rem 0.75rem"},onClick:()=>H(s),children:[e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.5rem"},children:[e.jsx(be,{status:g,t}),e.jsx("span",{className:"semiont-panel-text",style:{flex:1,fontWeight:500},children:s.label}),y&&e.jsx(pe,{style:{width:"1rem",height:"1rem",color:"var(--semiont-color-primary-500)",flexShrink:0}}),g==="authenticated"&&e.jsx("button",{onClick:w=>{w.stopPropagation(),j(s.id)},title:t("signOut"),style:{background:"none",border:"none",cursor:"pointer",padding:"0.125rem",color:"var(--semiont-color-neutral-400)"},children:e.jsx(he,{style:{width:"0.875rem",height:"0.875rem"}})}),e.jsx("button",{onClick:w=>{w.stopPropagation(),M(s.id)},title:t("remove"),style:{background:"none",border:"none",cursor:"pointer",padding:"0.125rem",color:"var(--semiont-color-neutral-400)"},children:e.jsx(de,{style:{width:"0.875rem",height:"0.875rem"}})})]}),e.jsxs("span",{className:"semiont-panel-text-secondary",style:{fontSize:"0.7rem",paddingLeft:"1rem"},children:[s.host,":",s.port,s.gitBranch?` · ${s.gitBranch}`:""]})]}),K===s.id&&e.jsxs("div",{style:{padding:"0.5rem 0.75rem",fontSize:"0.8rem",display:"flex",alignItems:"center",gap:"0.5rem",background:"var(--semiont-bg-secondary, #f9fafb)",borderBottom:"1px solid var(--semiont-color-neutral-200, #e5e7eb)"},children:[e.jsx("span",{style:{flex:1,color:"var(--semiont-color-neutral-500)"},children:t("removeConfirm",{label:s.label})}),e.jsx("button",{onClick:()=>{h(s.id),M(null)},className:"semiont-button",style:{fontSize:"0.75rem",padding:"0.2rem 0.5rem",color:"var(--semiont-color-error-500, #ef4444)"},children:t("remove")}),e.jsx("button",{onClick:()=>M(null),className:"semiont-button",style:{fontSize:"0.75rem",padding:"0.2rem 0.5rem"},children:t("cancel")})]}),b&&e.jsx(Ne,{t,kb:s,onSubmit:w=>Z(s.id,w),onCancel:()=>x(null),error:f,isSubmitting:U})]},s.id)})}),v&&e.jsx(we,{t,onSubmit:$,onCancel:()=>c(!1),error:p,isSubmitting:I,autoFocus:i.length===0,pulsing:i.length===0})]}),!v&&e.jsx("div",{className:"semiont-panel-footer",children:e.jsxs("button",{onClick:W,className:"semiont-panel-item semiont-panel-item--clickable",style:{width:"100%",display:"flex",alignItems:"center",gap:"0.5rem",color:"var(--semiont-color-primary-600)"},children:[e.jsx(fe,{style:{width:"1rem",height:"1rem",flexShrink:0}}),e.jsx("span",{className:"semiont-panel-text",style:{color:"inherit"},children:t("addKnowledgeBase")})]})})]})}function Re({activePanel:n,theme:t,showLineNumbers:i,hoverDelayMs:r,children:m}){const{t:u}=B(),{isAuthenticated:h}=T(),o=le(),l=O(),j=ce(),[v,c]=a.useTransition(),{width:p,setWidth:N,minWidth:I,maxWidth:S}=ne(),A=a.useCallback(({locale:x})=>{j&&c(()=>{l.replace(j,{locale:x})})},[j,l,c]);return ae({"settings:locale-changed":A}),!n||!m&&!ie.includes(n)?null:e.jsxs("div",{className:"semiont-toolbar-panels",style:{width:`${p}px`,position:"relative"},children:[e.jsx(re,{onResize:N,minWidth:I,maxWidth:S,position:"left",ariaLabel:"Resize right panel"}),e.jsxs("div",{className:"semiont-toolbar-panels__content",children:[m,n==="knowledge-base"&&e.jsx(Se,{}),n==="user"&&(h?e.jsx(je,{}):e.jsxs("div",{className:"semiont-panel",children:[e.jsx("div",{className:"semiont-panel-header",children:e.jsx("h2",{className:"semiont-panel-header__title",children:e.jsx("span",{className:"semiont-panel-header__text",children:u("UserPanel.account")})})}),e.jsx("div",{className:"semiont-panel__content",style:{padding:"1rem",textAlign:"center"},children:e.jsx("p",{style:{color:"var(--semiont-color-neutral-400)",fontSize:"0.85rem",lineHeight:1.5},children:u("AccountPanel.notAuthenticated")})})]})),n==="settings"&&e.jsx(oe,{showLineNumbers:i,theme:t,hoverDelayMs:r,locale:o,isPendingLocaleChange:v})]})]})}export{fe as F,Re as T};
|
|
2
|
-
//# sourceMappingURL=ToolbarPanels-mrjx6GSA.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ToolbarPanels-mrjx6GSA.js","sources":["../../../../node_modules/@heroicons/react/24/outline/esm/ArrowRightStartOnRectangleIcon.js","../../../../node_modules/@heroicons/react/24/outline/esm/CheckIcon.js","../../../../node_modules/@heroicons/react/24/outline/esm/PlusIcon.js","../../src/components/UserPanel.tsx","../../src/components/KnowledgeBasePanel.tsx","../../src/components/toolbar/ToolbarPanels.tsx"],"sourcesContent":["import * as React from \"react\";\nfunction ArrowRightStartOnRectangleIcon({\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.75 9V5.25A2.25 2.25 0 0 0 13.5 3h-6a2.25 2.25 0 0 0-2.25 2.25v13.5A2.25 2.25 0 0 0 7.5 21h6a2.25 2.25 0 0 0 2.25-2.25V15m3 0 3-3m0 0-3-3m3 3H9\"\n }));\n}\nconst ForwardRef = /*#__PURE__*/ React.forwardRef(ArrowRightStartOnRectangleIcon);\nexport default ForwardRef;","import * as React from \"react\";\nfunction CheckIcon({\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 12.75 6 6 9-13.5\"\n }));\n}\nconst ForwardRef = /*#__PURE__*/ React.forwardRef(CheckIcon);\nexport default ForwardRef;","import * as React from \"react\";\nfunction PlusIcon({\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 4.5v15m7.5-7.5h-15\"\n }));\n}\nconst ForwardRef = /*#__PURE__*/ React.forwardRef(PlusIcon);\nexport default ForwardRef;","import React, { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport {\n sanitizeImageURL,\n useSessionExpiry,\n formatTime,\n useApiClient,\n useKnowledgeBaseSession,\n} from '@semiont/react-ui';\nimport { useRouter } from '@/i18n/routing';\n\n// Fallback avatar when image fails to load or is invalid\nconst FALLBACK_AVATAR = 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHZpZXdCb3g9IjAgMCAzMiAzMiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGNpcmNsZSBjeD0iMTYiIGN5PSIxNiIgcj0iMTYiIGZpbGw9IiM2QjcyODAiLz4KPHBhdGggZD0iTTE2IDE2QzE4LjIwOTEgMTYgMjAgMTQuMjA5MSAyMCAxMkMyMCA5Ljc5MDg2IDE4LjIwOTEgOCAxNiA4QzEzLjc5MDkgOCAxMiA5Ljc5MDg2IDEyIDEyQzEyIDE0LjIwOTEgMTMuNzkwOSAxNiAxNiAxNloiIGZpbGw9IiNFNUU3RUIiLz4KPHBhdGggZD0iTTI0IDI1QzI0IDIxLjY4NjMgMjAuNDE4MyAxOSAxNiAxOUMxMS41ODE3IDE5IDggMjEuNjg2MyA4IDI1IiBzdHJva2U9IiNFNUU3RUIiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+Cjwvc3ZnPg==';\n\nexport function UserPanel() {\n const { t: _t } = useTranslation();\n const t = (k: string, p?: Record<string, unknown>) => _t(`UserPanel.${k}`, p as any) as string;\n const {\n displayName,\n avatarUrl,\n userDomain,\n isAdmin,\n isModerator,\n activeKnowledgeBase,\n signOut,\n } = useKnowledgeBaseSession();\n const apiClient = useApiClient();\n const router = useRouter();\n const [imageError, setImageError] = useState(false);\n const { timeRemaining } = useSessionExpiry();\n const sessionTimeFormatted = formatTime(timeRemaining) ?? 'Unknown';\n\n // Sanitize and validate the profile image URL\n const profileImageUrl = (() => {\n if (!avatarUrl || imageError) {\n return FALLBACK_AVATAR;\n }\n\n const sanitized = sanitizeImageURL(avatarUrl);\n if (!sanitized) {\n console.warn('Invalid profile image URL detected, using fallback');\n return FALLBACK_AVATAR;\n }\n\n return sanitized;\n })();\n\n const handleSignOut = async () => {\n try {\n await apiClient.logout();\n } catch {\n // best-effort — cookie already cleared server-side\n }\n if (activeKnowledgeBase) {\n signOut(activeKnowledgeBase.id);\n }\n router.push('/');\n };\n\n return (\n <div className=\"semiont-user-panel\">\n <h3 className=\"semiont-user-panel__title\">\n {t('account')}\n </h3>\n\n {activeKnowledgeBase && (\n <div style={{ padding: '0 0.75rem 0.5rem', fontSize: '0.8rem', color: 'var(--semiont-color-neutral-400)' }}>\n {activeKnowledgeBase.label}\n </div>\n )}\n\n <div className=\"space-y-4\">\n {/* User Profile */}\n <div className=\"flex items-center gap-3\">\n <img\n src={profileImageUrl}\n alt={t('profileAlt', { name: displayName || t('user') })}\n width={48}\n height={48}\n className=\"w-12 h-12 rounded-full object-cover\"\n onError={() => setImageError(true)}\n />\n <div className=\"flex-1 min-w-0\">\n <div className=\"semiont-panel-text\">\n {displayName || t('user')}\n </div>\n {userDomain && (\n <div className=\"semiont-panel-text-secondary\">\n @{userDomain}\n </div>\n )}\n </div>\n </div>\n\n {/* Session Info */}\n <div>\n <label className=\"semiont-panel-label\">\n {t('session')}\n </label>\n <div className=\"semiont-session-box\">\n <div className=\"semiont-panel-hint\">\n {t('expiresIn', { time: sessionTimeFormatted })}\n </div>\n </div>\n </div>\n\n {/* Privileges */}\n {(isAdmin || isModerator) && (\n <div>\n <label className=\"semiont-panel-label\">\n {t('privileges')}\n </label>\n <div className=\"space-y-1\">\n {isAdmin && (\n <div className=\"semiont-privilege-badge semiont-privilege-badge--admin\">\n <span className=\"semiont-privilege-text\">\n {t('administrator')}\n </span>\n </div>\n )}\n {isModerator && (\n <div className=\"semiont-privilege-badge semiont-privilege-badge--moderator\">\n <span className=\"semiont-privilege-text\">\n {t('moderator')}\n </span>\n </div>\n )}\n </div>\n </div>\n )}\n\n {/* Sign Out Button */}\n <div className=\"semiont-panel-divider\">\n <button\n onClick={handleSignOut}\n className=\"semiont-signout-button\"\n >\n {t('signOut')}\n </button>\n </div>\n </div>\n </div>\n );\n}\n","import React, { useState, useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { CheckIcon, PlusIcon, ArrowRightStartOnRectangleIcon, XMarkIcon, TrashIcon } from '@heroicons/react/24/outline';\nimport { SemiontApiClient } from '@semiont/api-client';\nimport { baseUrl, email as makeEmail, accessToken, EventBus } from '@semiont/core';\nimport {\n useKnowledgeBaseSession,\n defaultProtocol,\n getKbSessionStatus,\n type KnowledgeBase,\n type KbSessionStatus,\n} from '@semiont/react-ui';\n\ntype T = (key: string, params?: Record<string, unknown>) => string;\n\nconst STATUS_COLORS: Record<KbSessionStatus, string> = {\n authenticated: 'var(--semiont-color-success-500, #22c55e)',\n expired: 'var(--semiont-color-warning-500, #eab308)',\n 'signed-out': 'var(--semiont-color-neutral-400, #9ca3af)',\n unreachable: 'var(--semiont-color-error-500, #ef4444)',\n};\n\nconst STATUS_KEYS: Record<KbSessionStatus, string> = {\n authenticated: 'statusConnected',\n expired: 'statusExpired',\n 'signed-out': 'statusSignedOut',\n unreachable: 'statusUnreachable',\n};\n\nfunction StatusDot({ status, t }: { status: KbSessionStatus; t: T }) {\n return (\n <span\n title={t(STATUS_KEYS[status])}\n style={{\n width: '0.5rem',\n height: '0.5rem',\n borderRadius: '50%',\n backgroundColor: STATUS_COLORS[status],\n flexShrink: 0,\n }}\n />\n );\n}\n\nfunction LoginForm({ t, onSubmit, onCancel, error, isSubmitting, autoFocus, pulsing, initialHost = 'localhost', initialPort = 4000, initialEmail = 'admin@example.com' }: {\n t: T;\n onSubmit: (host: string, port: number, email: string, password: string) => Promise<void>;\n onCancel: () => void;\n error: string | null;\n isSubmitting: boolean;\n autoFocus?: boolean;\n pulsing?: boolean;\n initialHost?: string;\n initialPort?: number;\n initialEmail?: string;\n}) {\n const [host, setHost] = useState(initialHost);\n const [port, setPort] = useState(String(initialPort));\n const [email, setEmail] = useState(initialEmail);\n const [password, setPassword] = useState('');\n\n return (\n <div\n className={pulsing ? 'semiont-panel__login-form--pulsing' : ''}\n style={{\n margin: '0.5rem',\n padding: '0.75rem',\n border: '1px solid var(--semiont-color-neutral-200, #e5e7eb)',\n borderRadius: 'var(--semiont-panel-border-radius, 0.5rem)',\n background: 'var(--semiont-bg-secondary, transparent)',\n }}\n >\n <h3 style={{ fontSize: '0.8rem', fontWeight: 600, marginBottom: '0.5rem' }}>{t('connectTitle')}</h3>\n <form onSubmit={(e) => { e.preventDefault(); onSubmit(host, parseInt(port, 10) || 4000, email, password); }} style={{ display: 'flex', flexDirection: 'column', gap: '0.5rem' }}>\n <div style={{ display: 'flex', gap: '0.5rem' }}>\n <input type=\"text\" value={host} onChange={e => setHost(e.target.value)} placeholder=\"Host\" className=\"semiont-input\" style={{ flex: 1 }} autoFocus={autoFocus} />\n <input type=\"number\" value={port} onChange={e => setPort(e.target.value)} placeholder=\"Port\" className=\"semiont-input\" style={{ width: '5rem' }} />\n </div>\n <input type=\"email\" value={email} onChange={e => setEmail(e.target.value)} placeholder=\"Email\" className=\"semiont-input\" />\n <input type=\"password\" value={password} onChange={e => setPassword(e.target.value)} placeholder=\"Password\" className=\"semiont-input\" />\n {error && <div style={{ color: 'var(--semiont-color-error-500, #ef4444)', fontSize: '0.75rem' }}>{error}</div>}\n <div style={{ display: 'flex', gap: '0.5rem' }}>\n <button type=\"submit\" className=\"semiont-button semiont-button--primary\" style={{ flex: 1 }} disabled={isSubmitting}>\n {isSubmitting ? t('connecting') : t('connect')}\n </button>\n <button type=\"button\" className=\"semiont-button\" onClick={onCancel}>\n <XMarkIcon style={{ width: '1rem', height: '1rem' }} />\n </button>\n </div>\n </form>\n </div>\n );\n}\n\nfunction ReauthForm({ t, kb, onSubmit, onCancel, error, isSubmitting }: {\n t: T;\n kb: KnowledgeBase;\n onSubmit: (password: string) => Promise<void>;\n onCancel: () => void;\n error: string | null;\n isSubmitting: boolean;\n}) {\n const [password, setPassword] = useState('');\n\n return (\n <form onSubmit={(e) => { e.preventDefault(); onSubmit(password); }} style={{ padding: '0.5rem 0.75rem', display: 'flex', flexDirection: 'column', gap: '0.375rem' }}>\n <div style={{ fontSize: '0.75rem', color: 'var(--semiont-color-neutral-400)' }}>{kb.email}</div>\n <input type=\"password\" value={password} onChange={e => setPassword(e.target.value)} placeholder=\"Password\" className=\"semiont-input\" style={{ fontSize: '0.8rem' }} autoFocus />\n {error && <div style={{ color: 'var(--semiont-color-error-500, #ef4444)', fontSize: '0.75rem' }}>{error}</div>}\n <div style={{ display: 'flex', gap: '0.375rem' }}>\n <button type=\"submit\" className=\"semiont-button semiont-button--primary\" style={{ flex: 1, fontSize: '0.8rem' }} disabled={isSubmitting}>\n {isSubmitting ? t('signingIn') : t('signIn')}\n </button>\n <button type=\"button\" className=\"semiont-button\" onClick={onCancel} style={{ fontSize: '0.8rem' }}>\n {t('cancel')}\n </button>\n </div>\n </form>\n );\n}\n\nasync function authenticateWithBackend(host: string, port: number, protocol: 'http' | 'https', emailStr: string, password: string): Promise<{ token: string; refreshToken: string; label: string; gitBranch?: string }> {\n const origin = `${protocol}://${host}:${port}`;\n const client = new SemiontApiClient({ baseUrl: baseUrl(origin), eventBus: new EventBus() });\n\n const authResult = await client.authenticatePassword(makeEmail(emailStr), password);\n const token = (authResult as any).token ?? (authResult as any).accessToken;\n const refreshToken = (authResult as any).refreshToken;\n if (!token) throw new Error('No access token received');\n if (!refreshToken) throw new Error('No refresh token received');\n\n let label = `${host}:${port}`;\n let gitBranch: string | undefined;\n try {\n const status = await client.getStatus({ auth: accessToken(token) });\n if ((status as any).projectName) label = (status as any).projectName;\n if ((status as any).gitBranch) gitBranch = (status as any).gitBranch;\n } catch { /* use default label */ }\n\n return { token, refreshToken, label, ...(gitBranch ? { gitBranch } : {}) };\n}\n\nexport function KnowledgeBasePanel() {\n const { t: _t } = useTranslation();\n const t = (k: string, p?: Record<string, unknown>) => _t(`KnowledgeBasePanel.${k}`, p as any) as string;\n const {\n knowledgeBases,\n activeKnowledgeBase,\n setActiveKnowledgeBase,\n addKnowledgeBase,\n removeKnowledgeBase,\n updateKnowledgeBase,\n signIn,\n signOut,\n } = useKnowledgeBaseSession();\n const [showAddForm, setShowAddForm] = useState(false);\n const [addError, setAddError] = useState<string | null>(null);\n const [addSubmitting, setAddSubmitting] = useState(false);\n const [reauthKbId, setReauthKbId] = useState<string | null>(null);\n const [reauthError, setReauthError] = useState<string | null>(null);\n const [reauthSubmitting, setReauthSubmitting] = useState(false);\n const [confirmRemoveKbId, setConfirmRemoveKbId] = useState<string | null>(null);\n const [, setTick] = useState(0);\n\n useEffect(() => {\n if (knowledgeBases.length === 0) setShowAddForm(true);\n }, [knowledgeBases.length]);\n\n useEffect(() => {\n const interval = setInterval(() => setTick(t => t + 1), 30_000);\n return () => clearInterval(interval);\n }, []);\n\n const openAddForm = () => {\n setShowAddForm(true);\n setReauthKbId(null);\n setAddError(null);\n };\n\n const handleAdd = async (host: string, port: number, email: string, password: string) => {\n setAddError(null);\n setAddSubmitting(true);\n const protocol = defaultProtocol(host);\n const existing = knowledgeBases.find(kb => kb.host === host && kb.port === port);\n if (existing) {\n try {\n const { token, refreshToken, gitBranch } = await authenticateWithBackend(host, port, protocol, email, password);\n updateKnowledgeBase(existing.id, { ...(gitBranch ? { gitBranch } : {}) });\n signIn(existing.id, token, refreshToken);\n setShowAddForm(false);\n } catch (err) {\n setAddError(err instanceof Error ? err.message : String(err));\n } finally {\n setAddSubmitting(false);\n }\n return;\n }\n try {\n const { token, refreshToken, label, gitBranch } = await authenticateWithBackend(host, port, protocol, email, password);\n addKnowledgeBase({ label, host, port, protocol, email, ...(gitBranch ? { gitBranch } : {}) }, token, refreshToken);\n setShowAddForm(false);\n } catch (err) {\n setAddError(err instanceof Error ? err.message : String(err));\n } finally {\n setAddSubmitting(false);\n }\n };\n\n const handleReauth = async (kbId: string, password: string) => {\n const kb = knowledgeBases.find(k => k.id === kbId);\n if (!kb) return;\n setReauthError(null);\n setReauthSubmitting(true);\n try {\n const { token, refreshToken, label, gitBranch } = await authenticateWithBackend(kb.host, kb.port, kb.protocol, kb.email, password);\n updateKnowledgeBase(kbId, { label, ...(gitBranch ? { gitBranch } : {}) });\n signIn(kbId, token, refreshToken);\n setReauthKbId(null);\n } catch (err) {\n setReauthError(err instanceof Error ? err.message : String(err));\n } finally {\n setReauthSubmitting(false);\n }\n };\n\n const handleKbClick = (kb: KnowledgeBase) => {\n const status = getKbSessionStatus(kb.id);\n if (status === 'authenticated') {\n setActiveKnowledgeBase(kb.id);\n } else {\n setReauthKbId(kb.id);\n setShowAddForm(false);\n setReauthError(null);\n }\n };\n\n return (\n <div className=\"semiont-panel\">\n <div className=\"semiont-panel-header\">\n <h2 className=\"semiont-panel-header__title\">\n <span className=\"semiont-panel-header__text\">{t('title')}</span>\n <span className=\"semiont-panel-header__count\">({knowledgeBases.length})</span>\n </h2>\n </div>\n <div className=\"semiont-panel__content\">\n <div className=\"semiont-panel__list\">\n {knowledgeBases.map((kb: KnowledgeBase) => {\n const status = getKbSessionStatus(kb.id);\n const isActive = kb.id === activeKnowledgeBase?.id;\n const isReauthing = reauthKbId === kb.id;\n\n return (\n <div key={kb.id}>\n <div\n className={`semiont-panel-item semiont-panel-item--clickable${isActive ? ' semiont-panel-item--selected' : ''}`}\n style={{ display: 'flex', flexDirection: 'column', gap: '0.25rem', cursor: 'pointer', padding: '0.5rem 0.75rem' }}\n onClick={() => handleKbClick(kb)}\n >\n <div style={{ display: 'flex', alignItems: 'center', gap: '0.5rem' }}>\n <StatusDot status={status} t={t} />\n <span className=\"semiont-panel-text\" style={{ flex: 1, fontWeight: 500 }}>{kb.label}</span>\n {isActive && (\n <CheckIcon style={{ width: '1rem', height: '1rem', color: 'var(--semiont-color-primary-500)', flexShrink: 0 }} />\n )}\n {status === 'authenticated' && (\n <button\n onClick={(e) => { e.stopPropagation(); signOut(kb.id); }}\n title={t('signOut')}\n style={{ background: 'none', border: 'none', cursor: 'pointer', padding: '0.125rem', color: 'var(--semiont-color-neutral-400)' }}\n >\n <ArrowRightStartOnRectangleIcon style={{ width: '0.875rem', height: '0.875rem' }} />\n </button>\n )}\n <button\n onClick={(e) => { e.stopPropagation(); setConfirmRemoveKbId(kb.id); }}\n title={t('remove')}\n style={{ background: 'none', border: 'none', cursor: 'pointer', padding: '0.125rem', color: 'var(--semiont-color-neutral-400)' }}\n >\n <TrashIcon style={{ width: '0.875rem', height: '0.875rem' }} />\n </button>\n </div>\n <span className=\"semiont-panel-text-secondary\" style={{ fontSize: '0.7rem', paddingLeft: '1rem' }}>\n {kb.host}:{kb.port}{kb.gitBranch ? ` · ${kb.gitBranch}` : ''}\n </span>\n </div>\n {confirmRemoveKbId === kb.id && (\n <div style={{\n padding: '0.5rem 0.75rem',\n fontSize: '0.8rem',\n display: 'flex',\n alignItems: 'center',\n gap: '0.5rem',\n background: 'var(--semiont-bg-secondary, #f9fafb)',\n borderBottom: '1px solid var(--semiont-color-neutral-200, #e5e7eb)',\n }}>\n <span style={{ flex: 1, color: 'var(--semiont-color-neutral-500)' }}>{t('removeConfirm', { label: kb.label })}</span>\n <button\n onClick={() => { removeKnowledgeBase(kb.id); setConfirmRemoveKbId(null); }}\n className=\"semiont-button\"\n style={{ fontSize: '0.75rem', padding: '0.2rem 0.5rem', color: 'var(--semiont-color-error-500, #ef4444)' }}\n >\n {t('remove')}\n </button>\n <button\n onClick={() => setConfirmRemoveKbId(null)}\n className=\"semiont-button\"\n style={{ fontSize: '0.75rem', padding: '0.2rem 0.5rem' }}\n >\n {t('cancel')}\n </button>\n </div>\n )}\n {isReauthing && (\n <ReauthForm\n t={t}\n kb={kb}\n onSubmit={(password) => handleReauth(kb.id, password)}\n onCancel={() => setReauthKbId(null)}\n error={reauthError}\n isSubmitting={reauthSubmitting}\n />\n )}\n </div>\n );\n })}\n </div>\n\n {showAddForm && (\n <LoginForm\n t={t}\n onSubmit={handleAdd}\n onCancel={() => setShowAddForm(false)}\n error={addError}\n isSubmitting={addSubmitting}\n autoFocus={knowledgeBases.length === 0}\n pulsing={knowledgeBases.length === 0}\n />\n )}\n </div>\n\n {!showAddForm && (\n <div className=\"semiont-panel-footer\">\n <button\n onClick={openAddForm}\n className=\"semiont-panel-item semiont-panel-item--clickable\"\n style={{ width: '100%', display: 'flex', alignItems: 'center', gap: '0.5rem', color: 'var(--semiont-color-primary-600)' }}\n >\n <PlusIcon style={{ width: '1rem', height: '1rem', flexShrink: 0 }} />\n <span className=\"semiont-panel-text\" style={{ color: 'inherit' }}>{t('addKnowledgeBase')}</span>\n </button>\n </div>\n )}\n </div>\n );\n}\n","import React, { useTransition, useCallback } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport {\n SettingsPanel,\n ResizeHandle,\n usePanelWidth,\n useEventSubscriptions,\n useKnowledgeBaseSession,\n} from '@semiont/react-ui';\nimport { UserPanel } from '../UserPanel';\nimport { KnowledgeBasePanel } from '../KnowledgeBasePanel';\nimport { useLocale } from '@/i18n/routing';\nimport { usePathname, useRouter } from '@/i18n/routing';\nimport { COMMON_PANELS } from '@semiont/react-ui';\nimport type { ToolbarPanelType } from '@semiont/react-ui';\n\ninterface ToolbarPanelsProps {\n activePanel: ToolbarPanelType | null;\n /** Theme setting */\n theme: 'light' | 'dark' | 'system';\n /** Line numbers setting */\n showLineNumbers: boolean;\n /** Hover delay setting */\n hoverDelayMs: number;\n /** Custom panel content for context-specific panels */\n children?: React.ReactNode;\n}\n\n/**\n * Renders the toolbar panel container with common panels (user, settings)\n * and any context-specific panels passed as children.\n *\n * Settings changes are handled via GlobalSettingsEventBus - no callbacks needed.\n *\n * @example\n * // Simple context (compose, discover, moderate, admin pages)\n * <ToolbarPanels\n * activePanel={activePanel}\n * theme={theme}\n * showLineNumbers={showLineNumbers}\n * />\n *\n * @example\n * // Document context with custom panels\n * <ToolbarPanels\n * activePanel={activePanel}\n * theme={theme}\n * showLineNumbers={showLineNumbers}\n * >\n * {activePanel === 'annotations' && <UnifiedAnnotationsPanel ... />}\n * {activePanel === 'history' && <AnnotationHistory ... />}\n * {activePanel === 'info' && <ResourceInfoPanel ... />}\n * {activePanel === 'collaboration' && <CollaborationPanel ... />}\n * {activePanel === 'jsonld' && <JsonLdPanel ... />}\n * </ToolbarPanels>\n */\nexport function ToolbarPanels({\n activePanel,\n theme,\n showLineNumbers,\n hoverDelayMs,\n children\n}: ToolbarPanelsProps) {\n const { t: _t } = useTranslation();\n const { isAuthenticated } = useKnowledgeBaseSession();\n const locale = useLocale();\n const router = useRouter();\n const pathname = usePathname();\n const [isPending, startTransition] = useTransition();\n\n // Panel width management with localStorage persistence\n const { width, setWidth, minWidth, maxWidth } = usePanelWidth();\n\n // Handle locale change events\n const handleLocaleChanged = useCallback(({ locale: newLocale }: { locale: string }) => {\n if (!pathname) return;\n\n startTransition(() => {\n // The router from @/i18n/routing is locale-aware and will handle the locale prefix\n router.replace(pathname, { locale: newLocale });\n });\n }, [pathname, router, startTransition]);\n\n // Subscribe to locale change events\n useEventSubscriptions({\n 'settings:locale-changed': handleLocaleChanged,\n });\n\n // Don't render container if no panel is active\n if (!activePanel) {\n return null;\n }\n\n // In simple context (no children), only user and settings panels are valid.\n // If a resource-specific panel is still active from a previous route, hide the container.\n if (!children && !COMMON_PANELS.includes(activePanel)) {\n return null;\n }\n\n return (\n <div className=\"semiont-toolbar-panels\" style={{ width: `${width}px`, position: 'relative' }}>\n {/* Resize handle on left edge */}\n <ResizeHandle\n onResize={setWidth}\n minWidth={minWidth}\n maxWidth={maxWidth}\n position=\"left\"\n ariaLabel=\"Resize right panel\"\n />\n\n {/* Custom context-specific panels */}\n <div className=\"semiont-toolbar-panels__content\">\n {children}\n\n {/* Knowledge Base Panel - common to all contexts */}\n {activePanel === 'knowledge-base' && (\n <KnowledgeBasePanel />\n )}\n\n {/* User Panel - requires authentication */}\n {activePanel === 'user' && (\n isAuthenticated ? (\n <UserPanel />\n ) : (\n <div className=\"semiont-panel\">\n <div className=\"semiont-panel-header\">\n <h2 className=\"semiont-panel-header__title\">\n <span className=\"semiont-panel-header__text\">{_t('UserPanel.account')}</span>\n </h2>\n </div>\n <div className=\"semiont-panel__content\" style={{ padding: '1rem', textAlign: 'center' }}>\n <p style={{ color: 'var(--semiont-color-neutral-400)', fontSize: '0.85rem', lineHeight: 1.5 }}>\n {_t('AccountPanel.notAuthenticated')}\n </p>\n </div>\n </div>\n )\n )}\n\n {/* Settings Panel - common to all contexts */}\n {activePanel === 'settings' && (\n <SettingsPanel\n showLineNumbers={showLineNumbers}\n theme={theme}\n hoverDelayMs={hoverDelayMs}\n locale={locale}\n isPendingLocaleChange={isPending}\n />\n )}\n </div>\n </div>\n );\n}\n"],"names":["ArrowRightStartOnRectangleIcon","title","titleId","props","svgRef","React.createElement","ForwardRef","React.forwardRef","CheckIcon","PlusIcon","FALLBACK_AVATAR","UserPanel","_t","useTranslation","k","p","displayName","avatarUrl","userDomain","isAdmin","isModerator","activeKnowledgeBase","signOut","useKnowledgeBaseSession","apiClient","useApiClient","router","useRouter","imageError","setImageError","useState","timeRemaining","useSessionExpiry","sessionTimeFormatted","formatTime","profileImageUrl","sanitized","sanitizeImageURL","handleSignOut","jsxs","jsx","STATUS_COLORS","STATUS_KEYS","StatusDot","status","LoginForm","t","onSubmit","onCancel","error","isSubmitting","autoFocus","pulsing","initialHost","initialPort","initialEmail","host","setHost","port","setPort","email","setEmail","password","setPassword","e","XMarkIcon","ReauthForm","kb","authenticateWithBackend","protocol","emailStr","origin","client","SemiontApiClient","baseUrl","EventBus","authResult","makeEmail","token","refreshToken","label","gitBranch","accessToken","KnowledgeBasePanel","knowledgeBases","setActiveKnowledgeBase","addKnowledgeBase","removeKnowledgeBase","updateKnowledgeBase","signIn","showAddForm","setShowAddForm","addError","setAddError","addSubmitting","setAddSubmitting","reauthKbId","setReauthKbId","reauthError","setReauthError","reauthSubmitting","setReauthSubmitting","confirmRemoveKbId","setConfirmRemoveKbId","setTick","useEffect","interval","openAddForm","handleAdd","defaultProtocol","existing","err","handleReauth","kbId","handleKbClick","getKbSessionStatus","isActive","isReauthing","TrashIcon","ToolbarPanels","activePanel","theme","showLineNumbers","hoverDelayMs","children","isAuthenticated","locale","useLocale","pathname","usePathname","isPending","startTransition","useTransition","width","setWidth","minWidth","maxWidth","usePanelWidth","handleLocaleChanged","useCallback","newLocale","useEventSubscriptions","COMMON_PANELS","ResizeHandle","SettingsPanel"],"mappings":"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","x_google_ignoreList":[0,1,2]}
|