@semiont/cli 0.5.2 → 0.5.3
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 +44 -10
- package/dist/frontend/dist/assets/{CookiePreferences-5feiOAX4.js → CookiePreferences-BizeRUGG.js} +2 -2
- package/dist/frontend/dist/assets/{CookiePreferences-5feiOAX4.js.map → CookiePreferences-BizeRUGG.js.map} +1 -1
- package/dist/frontend/dist/assets/{PdfAnnotationCanvas.client-5QESNO5H-Cxm4Es_X.js → PdfAnnotationCanvas.client-5QESNO5H-C_S4hy6Q.js} +2 -2
- package/dist/frontend/dist/assets/{PdfAnnotationCanvas.client-5QESNO5H-Cxm4Es_X.js.map → PdfAnnotationCanvas.client-5QESNO5H-C_S4hy6Q.js.map} +1 -1
- package/dist/frontend/dist/assets/{ToolbarPanels-D5L18Wxk.js → ToolbarPanels-Cz2uv68j.js} +2 -2
- package/dist/frontend/dist/assets/{ToolbarPanels-D5L18Wxk.js.map → ToolbarPanels-Cz2uv68j.js.map} +1 -1
- package/dist/frontend/dist/assets/ar-UUMMNQKF-xeh4Cwx2.js +2 -0
- package/dist/frontend/dist/assets/ar-UUMMNQKF-xeh4Cwx2.js.map +1 -0
- package/dist/frontend/dist/assets/bn-AL5BJSR3-Dz19S8vN.js +2 -0
- package/dist/frontend/dist/assets/bn-AL5BJSR3-Dz19S8vN.js.map +1 -0
- package/dist/frontend/dist/assets/{client-CTyYgbIC.js → client-BrB8xl9P.js} +2 -2
- package/dist/frontend/dist/assets/{client-CTyYgbIC.js.map → client-BrB8xl9P.js.map} +1 -1
- package/dist/frontend/dist/assets/{client-BmABw25x.js → client-C5p1ZZtM.js} +2 -2
- package/dist/frontend/dist/assets/{client-BmABw25x.js.map → client-C5p1ZZtM.js.map} +1 -1
- package/dist/frontend/dist/assets/{client-D7w_vlsg.js → client-D6q4B6bq.js} +2 -2
- package/dist/frontend/dist/assets/{client-D7w_vlsg.js.map → client-D6q4B6bq.js.map} +1 -1
- package/dist/frontend/dist/assets/{client-Cjf1Te8y.js → client-SkLMw-j7.js} +2 -2
- package/dist/frontend/dist/assets/{client-Cjf1Te8y.js.map → client-SkLMw-j7.js.map} +1 -1
- package/dist/frontend/dist/assets/cs-UMINALSU-HHT-dcWL.js +2 -0
- package/dist/frontend/dist/assets/cs-UMINALSU-HHT-dcWL.js.map +1 -0
- package/dist/frontend/dist/assets/da-FKUX6CDL-BpdJ67RW.js +2 -0
- package/dist/frontend/dist/assets/da-FKUX6CDL-BpdJ67RW.js.map +1 -0
- package/dist/frontend/dist/assets/de-XSJ3E25S-DJ6EvHYY.js +2 -0
- package/dist/frontend/dist/assets/de-XSJ3E25S-DJ6EvHYY.js.map +1 -0
- package/dist/frontend/dist/assets/el-UJXNRCBP-DhRdKHlx.js +2 -0
- package/dist/frontend/dist/assets/el-UJXNRCBP-DhRdKHlx.js.map +1 -0
- package/dist/frontend/dist/assets/es-VURP62BU-CgnB380t.js +2 -0
- package/dist/frontend/dist/assets/es-VURP62BU-CgnB380t.js.map +1 -0
- package/dist/frontend/dist/assets/{fa-V6JZJDYP-C8CwCeSd.js → fa-TIT5ZPZY-D28qBiUW.js} +2 -2
- package/dist/frontend/dist/assets/fa-TIT5ZPZY-D28qBiUW.js.map +1 -0
- package/dist/frontend/dist/assets/fi-F7VTGT4H-BeG0kw0Q.js +2 -0
- package/dist/frontend/dist/assets/fi-F7VTGT4H-BeG0kw0Q.js.map +1 -0
- package/dist/frontend/dist/assets/fr-2ZR26VF7-BwamaA96.js +2 -0
- package/dist/frontend/dist/assets/fr-2ZR26VF7-BwamaA96.js.map +1 -0
- package/dist/frontend/dist/assets/he-BXP2KYVZ-DuKmwNm_.js +2 -0
- package/dist/frontend/dist/assets/he-BXP2KYVZ-DuKmwNm_.js.map +1 -0
- package/dist/frontend/dist/assets/hi-PSWTP3NC-B7v6ttqy.js +2 -0
- package/dist/frontend/dist/assets/hi-PSWTP3NC-B7v6ttqy.js.map +1 -0
- package/dist/frontend/dist/assets/id-HO6TXGTO-Dj1JW3-q.js +2 -0
- package/dist/frontend/dist/assets/id-HO6TXGTO-Dj1JW3-q.js.map +1 -0
- package/dist/frontend/dist/assets/{index-BVOR3arc.js → index-QjYSiWWG.js} +53 -53
- package/dist/frontend/dist/assets/index-QjYSiWWG.js.map +1 -0
- package/dist/frontend/dist/assets/it-AGTDMBL3-Bq_I1CA1.js +2 -0
- package/dist/frontend/dist/assets/it-AGTDMBL3-Bq_I1CA1.js.map +1 -0
- package/dist/frontend/dist/assets/ja-TTGOVF5K-CkAQueln.js +2 -0
- package/dist/frontend/dist/assets/ja-TTGOVF5K-CkAQueln.js.map +1 -0
- package/dist/frontend/dist/assets/ko-FF77IQ7N-fJgs5Roz.js +2 -0
- package/dist/frontend/dist/assets/ko-FF77IQ7N-fJgs5Roz.js.map +1 -0
- package/dist/frontend/dist/assets/{layout-B1HJjFMW.js → layout-BO_gP65g.js} +2 -2
- package/dist/frontend/dist/assets/{layout-B1HJjFMW.js.map → layout-BO_gP65g.js.map} +1 -1
- package/dist/frontend/dist/assets/{layout-B7mIcfJU.js → layout-C-P8uUyx.js} +2 -2
- package/dist/frontend/dist/assets/{layout-B7mIcfJU.js.map → layout-C-P8uUyx.js.map} +1 -1
- package/dist/frontend/dist/assets/{layout-Cw-T4GPy.js → layout-C7qxASOF.js} +2 -2
- package/dist/frontend/dist/assets/{layout-Cw-T4GPy.js.map → layout-C7qxASOF.js.map} +1 -1
- package/dist/frontend/dist/assets/{layout-BK6OF3Hx.js → layout-DVrTweI_.js} +2 -2
- package/dist/frontend/dist/assets/{layout-BK6OF3Hx.js.map → layout-DVrTweI_.js.map} +1 -1
- package/dist/frontend/dist/assets/ms-UPQWWIL4-DEDFniGv.js +2 -0
- package/dist/frontend/dist/assets/ms-UPQWWIL4-DEDFniGv.js.map +1 -0
- package/dist/frontend/dist/assets/nl-W75HEPFL-D2_VQYac.js +2 -0
- package/dist/frontend/dist/assets/nl-W75HEPFL-D2_VQYac.js.map +1 -0
- package/dist/frontend/dist/assets/no-R4W7W7ZU-Duk86nrT.js +2 -0
- package/dist/frontend/dist/assets/no-R4W7W7ZU-Duk86nrT.js.map +1 -0
- package/dist/frontend/dist/assets/{not-found-uRBdv-bF.js → not-found-CVsHHn2n.js} +2 -2
- package/dist/frontend/dist/assets/{not-found-uRBdv-bF.js.map → not-found-CVsHHn2n.js.map} +1 -1
- package/dist/frontend/dist/assets/{page-CBL0MuAo.js → page-3CgxsYbh.js} +2 -2
- package/dist/frontend/dist/assets/{page-CBL0MuAo.js.map → page-3CgxsYbh.js.map} +1 -1
- package/dist/frontend/dist/assets/{page-BLt9SJto.js → page-8S-MQzsq.js} +2 -2
- package/dist/frontend/dist/assets/{page-BLt9SJto.js.map → page-8S-MQzsq.js.map} +1 -1
- package/dist/frontend/dist/assets/{page-Bnawjb1Y.js → page-B-leMN2k.js} +2 -2
- package/dist/frontend/dist/assets/{page-Bnawjb1Y.js.map → page-B-leMN2k.js.map} +1 -1
- package/dist/frontend/dist/assets/{page-CKCKmPQO.js → page-B5Dz_Nh-.js} +2 -2
- package/dist/frontend/dist/assets/{page-CKCKmPQO.js.map → page-B5Dz_Nh-.js.map} +1 -1
- package/dist/frontend/dist/assets/{page-5wC1as95.js → page-BfKm2iQ2.js} +2 -2
- package/dist/frontend/dist/assets/{page-5wC1as95.js.map → page-BfKm2iQ2.js.map} +1 -1
- package/dist/frontend/dist/assets/{page-wxqWVnqc.js → page-Br5SeiDL.js} +2 -2
- package/dist/frontend/dist/assets/{page-wxqWVnqc.js.map → page-Br5SeiDL.js.map} +1 -1
- package/dist/frontend/dist/assets/page-C6_MlYjr.js +2 -0
- package/dist/frontend/dist/assets/{page-C7vfVcap.js.map → page-C6_MlYjr.js.map} +1 -1
- package/dist/frontend/dist/assets/page-CXE3Zhkq.js +2 -0
- package/dist/frontend/dist/assets/page-CXE3Zhkq.js.map +1 -0
- package/dist/frontend/dist/assets/{page-CdqGKYBH.js → page-Cg1IhnH2.js} +2 -2
- package/dist/frontend/dist/assets/{page-CdqGKYBH.js.map → page-Cg1IhnH2.js.map} +1 -1
- package/dist/frontend/dist/assets/{page-BlU7QK_-.js → page-CqV1yD4w.js} +2 -2
- package/dist/frontend/dist/assets/{page-BlU7QK_-.js.map → page-CqV1yD4w.js.map} +1 -1
- package/dist/frontend/dist/assets/{page-Bcljtfsa.js → page-D6saO7D3.js} +2 -2
- package/dist/frontend/dist/assets/{page-Bcljtfsa.js.map → page-D6saO7D3.js.map} +1 -1
- package/dist/frontend/dist/assets/{page-Dgqi9Orl.js → page-D7ZN9Yo5.js} +2 -2
- package/dist/frontend/dist/assets/{page-Dgqi9Orl.js.map → page-D7ZN9Yo5.js.map} +1 -1
- package/dist/frontend/dist/assets/{page-CfMLSllg.js → page-DaL8x94G.js} +2 -2
- package/dist/frontend/dist/assets/{page-CfMLSllg.js.map → page-DaL8x94G.js.map} +1 -1
- package/dist/frontend/dist/assets/{page-BNaAGnc3.js → page-Dj5UZ_d6.js} +2 -2
- package/dist/frontend/dist/assets/{page-BNaAGnc3.js.map → page-Dj5UZ_d6.js.map} +1 -1
- package/dist/frontend/dist/assets/{page-SrDV7XYv.js → page-DyGU2n2w.js} +2 -2
- package/dist/frontend/dist/assets/{page-SrDV7XYv.js.map → page-DyGU2n2w.js.map} +1 -1
- package/dist/frontend/dist/assets/{page-D7w7NNd7.js → page-E4A7Vkwl.js} +2 -2
- package/dist/frontend/dist/assets/{page-D7w7NNd7.js.map → page-E4A7Vkwl.js.map} +1 -1
- package/dist/frontend/dist/assets/{page-Bf4MMijQ.js → page-OFxNMOoF.js} +2 -2
- package/dist/frontend/dist/assets/{page-Bf4MMijQ.js.map → page-OFxNMOoF.js.map} +1 -1
- package/dist/frontend/dist/assets/{page-DAH06BM4.js → page-RRMlL_4-.js} +2 -2
- package/dist/frontend/dist/assets/{page-DAH06BM4.js.map → page-RRMlL_4-.js.map} +1 -1
- package/dist/frontend/dist/assets/pl-GQC2ELWO-CYs9xZGI.js +2 -0
- package/dist/frontend/dist/assets/pl-GQC2ELWO-CYs9xZGI.js.map +1 -0
- package/dist/frontend/dist/assets/{privacy-Kk_oWnpO.js → privacy-Rbj4Ycw9.js} +2 -2
- package/dist/frontend/dist/assets/{privacy-Kk_oWnpO.js.map → privacy-Rbj4Ycw9.js.map} +1 -1
- package/dist/frontend/dist/assets/pt-YGVT62RU-pnVyr-_6.js +2 -0
- package/dist/frontend/dist/assets/pt-YGVT62RU-pnVyr-_6.js.map +1 -0
- package/dist/frontend/dist/assets/ro-TST6XS6X-CRozzX2s.js +2 -0
- package/dist/frontend/dist/assets/ro-TST6XS6X-CRozzX2s.js.map +1 -0
- package/dist/frontend/dist/assets/{routing-CKNCPdYO.js → routing-CUnWbO2L.js} +2 -2
- package/dist/frontend/dist/assets/{routing-CKNCPdYO.js.map → routing-CUnWbO2L.js.map} +1 -1
- package/dist/frontend/dist/assets/{routing-CGghUc0N.js → routing-CxPkffyg.js} +2 -2
- package/dist/frontend/dist/assets/{routing-CGghUc0N.js.map → routing-CxPkffyg.js.map} +1 -1
- package/dist/frontend/dist/assets/sv-TQLF6HV7-DNDzEE6l.js +2 -0
- package/dist/frontend/dist/assets/sv-TQLF6HV7-DNDzEE6l.js.map +1 -0
- package/dist/frontend/dist/assets/th-HJUIETVR-C8TRIJwR.js +2 -0
- package/dist/frontend/dist/assets/th-HJUIETVR-C8TRIJwR.js.map +1 -0
- package/dist/frontend/dist/assets/tr-CW3C46TW-wpHSGdDw.js +2 -0
- package/dist/frontend/dist/assets/tr-CW3C46TW-wpHSGdDw.js.map +1 -0
- package/dist/frontend/dist/assets/uk-WTHZQB2U-3kAkt5-3.js +2 -0
- package/dist/frontend/dist/assets/uk-WTHZQB2U-3kAkt5-3.js.map +1 -0
- package/dist/frontend/dist/assets/vi-PHWHJLKP-DYHi4xUC.js +2 -0
- package/dist/frontend/dist/assets/vi-PHWHJLKP-DYHi4xUC.js.map +1 -0
- package/dist/frontend/dist/assets/{web-DdXPBk3h.js → web-C8yeWrxL.js} +2 -2
- package/dist/frontend/dist/assets/{web-DdXPBk3h.js.map → web-C8yeWrxL.js.map} +1 -1
- package/dist/frontend/dist/assets/zh-MO3FCUD6-CLkb7wBO.js +2 -0
- package/dist/frontend/dist/assets/zh-MO3FCUD6-CLkb7wBO.js.map +1 -0
- package/dist/frontend/dist/index.html +1 -1
- package/dist/frontend/dist/messages/ar.json +1 -16
- package/dist/frontend/dist/messages/bn.json +1 -16
- package/dist/frontend/dist/messages/cs.json +1 -16
- package/dist/frontend/dist/messages/da.json +1 -16
- package/dist/frontend/dist/messages/de.json +1 -16
- package/dist/frontend/dist/messages/el.json +1 -16
- package/dist/frontend/dist/messages/en.json +1 -16
- package/dist/frontend/dist/messages/es.json +1 -16
- package/dist/frontend/dist/messages/fa.json +1 -16
- package/dist/frontend/dist/messages/fi.json +1 -16
- package/dist/frontend/dist/messages/fr.json +1 -16
- package/dist/frontend/dist/messages/he.json +1 -16
- package/dist/frontend/dist/messages/hi.json +1 -16
- package/dist/frontend/dist/messages/id.json +1 -16
- package/dist/frontend/dist/messages/it.json +1 -16
- package/dist/frontend/dist/messages/ja.json +1 -16
- package/dist/frontend/dist/messages/ko.json +1 -16
- package/dist/frontend/dist/messages/ms.json +1 -16
- package/dist/frontend/dist/messages/nl.json +1 -16
- package/dist/frontend/dist/messages/no.json +1 -16
- package/dist/frontend/dist/messages/pl.json +1 -16
- package/dist/frontend/dist/messages/pt.json +1 -16
- package/dist/frontend/dist/messages/ro.json +1 -16
- package/dist/frontend/dist/messages/sv.json +1 -16
- package/dist/frontend/dist/messages/th.json +1 -16
- package/dist/frontend/dist/messages/tr.json +1 -16
- package/dist/frontend/dist/messages/uk.json +1 -16
- package/dist/frontend/dist/messages/vi.json +1 -16
- package/dist/frontend/dist/messages/zh.json +1 -16
- package/dist/frontend/package.json +1 -1
- package/package.json +8 -8
- package/dist/frontend/dist/assets/ar-3W37O3R3-BJ1fDUvB.js +0 -2
- package/dist/frontend/dist/assets/ar-3W37O3R3-BJ1fDUvB.js.map +0 -1
- package/dist/frontend/dist/assets/bn-JZTJLMVE-k1gI6ffq.js +0 -2
- package/dist/frontend/dist/assets/bn-JZTJLMVE-k1gI6ffq.js.map +0 -1
- package/dist/frontend/dist/assets/cs-XYHH7HNE-BqQWIWM9.js +0 -2
- package/dist/frontend/dist/assets/cs-XYHH7HNE-BqQWIWM9.js.map +0 -1
- package/dist/frontend/dist/assets/da-MZKIECVT-pufSb0d_.js +0 -2
- package/dist/frontend/dist/assets/da-MZKIECVT-pufSb0d_.js.map +0 -1
- package/dist/frontend/dist/assets/de-AYXTMRQW-BRMduIa0.js +0 -2
- package/dist/frontend/dist/assets/de-AYXTMRQW-BRMduIa0.js.map +0 -1
- package/dist/frontend/dist/assets/el-A6CVQWAW-DycBhXUi.js +0 -2
- package/dist/frontend/dist/assets/el-A6CVQWAW-DycBhXUi.js.map +0 -1
- package/dist/frontend/dist/assets/es-M2HXLJGT-BFQ6WIpw.js +0 -2
- package/dist/frontend/dist/assets/es-M2HXLJGT-BFQ6WIpw.js.map +0 -1
- package/dist/frontend/dist/assets/fa-V6JZJDYP-C8CwCeSd.js.map +0 -1
- package/dist/frontend/dist/assets/fi-ONDTZ5H7-aby5--Ip.js +0 -2
- package/dist/frontend/dist/assets/fi-ONDTZ5H7-aby5--Ip.js.map +0 -1
- package/dist/frontend/dist/assets/fr-PAPV4H4G-D9SFT8MA.js +0 -2
- package/dist/frontend/dist/assets/fr-PAPV4H4G-D9SFT8MA.js.map +0 -1
- package/dist/frontend/dist/assets/he-F6VTLJLW-B8Rc1C-m.js +0 -2
- package/dist/frontend/dist/assets/he-F6VTLJLW-B8Rc1C-m.js.map +0 -1
- package/dist/frontend/dist/assets/hi-CFUAV4BF-CuWy2y7I.js +0 -2
- package/dist/frontend/dist/assets/hi-CFUAV4BF-CuWy2y7I.js.map +0 -1
- package/dist/frontend/dist/assets/id-NBKLCCI7-DnMwKKq7.js +0 -2
- package/dist/frontend/dist/assets/id-NBKLCCI7-DnMwKKq7.js.map +0 -1
- package/dist/frontend/dist/assets/index-BVOR3arc.js.map +0 -1
- package/dist/frontend/dist/assets/it-SLSOWVVU-hrlm8f9F.js +0 -2
- package/dist/frontend/dist/assets/it-SLSOWVVU-hrlm8f9F.js.map +0 -1
- package/dist/frontend/dist/assets/ja-L5IG4ECE-BvMVB5sy.js +0 -2
- package/dist/frontend/dist/assets/ja-L5IG4ECE-BvMVB5sy.js.map +0 -1
- package/dist/frontend/dist/assets/ko-QYMTULKK-CNEZe0oy.js +0 -2
- package/dist/frontend/dist/assets/ko-QYMTULKK-CNEZe0oy.js.map +0 -1
- package/dist/frontend/dist/assets/ms-5DGSFKM2-BlyezW6W.js +0 -2
- package/dist/frontend/dist/assets/ms-5DGSFKM2-BlyezW6W.js.map +0 -1
- package/dist/frontend/dist/assets/nl-VZPCGONO-BJ0llUPS.js +0 -2
- package/dist/frontend/dist/assets/nl-VZPCGONO-BJ0llUPS.js.map +0 -1
- package/dist/frontend/dist/assets/no-MF6F352I-Wf2ZNjHx.js +0 -2
- package/dist/frontend/dist/assets/no-MF6F352I-Wf2ZNjHx.js.map +0 -1
- package/dist/frontend/dist/assets/page-B6XEk2Ue.js +0 -2
- package/dist/frontend/dist/assets/page-B6XEk2Ue.js.map +0 -1
- package/dist/frontend/dist/assets/page-C7vfVcap.js +0 -2
- package/dist/frontend/dist/assets/pl-WIK72JUO-wOGg7Me5.js +0 -2
- package/dist/frontend/dist/assets/pl-WIK72JUO-wOGg7Me5.js.map +0 -1
- package/dist/frontend/dist/assets/pt-RRP5ZF6A-C32Vedhv.js +0 -2
- package/dist/frontend/dist/assets/pt-RRP5ZF6A-C32Vedhv.js.map +0 -1
- package/dist/frontend/dist/assets/ro-XHQLC3T7-uGs3uHRp.js +0 -2
- package/dist/frontend/dist/assets/ro-XHQLC3T7-uGs3uHRp.js.map +0 -1
- package/dist/frontend/dist/assets/sv-EWULDN6E-CkRBfwt9.js +0 -2
- package/dist/frontend/dist/assets/sv-EWULDN6E-CkRBfwt9.js.map +0 -1
- package/dist/frontend/dist/assets/th-TGOBHFG4-BGt_aO5K.js +0 -2
- package/dist/frontend/dist/assets/th-TGOBHFG4-BGt_aO5K.js.map +0 -1
- package/dist/frontend/dist/assets/tr-LMMPBMV7-CrGE1PKA.js +0 -2
- package/dist/frontend/dist/assets/tr-LMMPBMV7-CrGE1PKA.js.map +0 -1
- package/dist/frontend/dist/assets/uk-IPGRRJY6-CPaxgpd8.js +0 -2
- package/dist/frontend/dist/assets/uk-IPGRRJY6-CPaxgpd8.js.map +0 -1
- package/dist/frontend/dist/assets/vi-Q676OJQS-DpyIm6R1.js +0 -2
- package/dist/frontend/dist/assets/vi-Q676OJQS-DpyIm6R1.js.map +0 -1
- package/dist/frontend/dist/assets/zh-F3MTWQDX-C09t_PFf.js +0 -2
- package/dist/frontend/dist/assets/zh-F3MTWQDX-C09t_PFf.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout-B7mIcfJU.js","sources":["../../src/components/knowledge/NavigationHandler.tsx","../../src/hooks/useMergedTranslationManager.ts","../../src/app/providers.tsx","../../../../node_modules/@heroicons/react/24/outline/esm/ChevronDownIcon.js","../../../../node_modules/@heroicons/react/24/outline/esm/ChevronUpIcon.js","../../src/components/CookieBanner.tsx","../../src/app/[locale]/layout.tsx"],"sourcesContent":["import { useCallback } from 'react';\nimport { useRouter } from '@/i18n/routing';\nimport { useEventSubscriptions } from '@semiont/react-ui';\n\n/**\n * NavigationHandler - Connects NavigationEventBus to Next.js router\n *\n * This component subscribes to navigation events from @semiont/react-ui\n * components and handles them using Next.js client-side routing.\n *\n * Benefits:\n * - Client-side navigation (no page reload)\n * - Preserves React state\n * - Faster navigation\n * - Better UX\n *\n * Must be mounted in app layout to handle all navigation requests.\n */\nexport function NavigationHandler() {\n const router = useRouter();\n\n // Handle external navigation events\n const handleExternalNavigate = useCallback(({ url, cancelFallback }: { url: string; resourceId?: string; cancelFallback: () => void }) => {\n cancelFallback(); // Prevent window.location fallback since we're handling with client-side routing\n router.push(url);\n }, [router]);\n\n // Handle router push events\n const handleRouterPush = useCallback(({ path }: { path: string; reason?: string }) => {\n router.push(path);\n }, [router]);\n\n useEventSubscriptions({\n 'nav:external': handleExternalNavigate,\n 'nav:push': handleRouterPush,\n });\n\n // This component only manages navigation, doesn't render anything\n return null;\n}\n","import { useMemo } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport type { TranslationManager } from '@semiont/react-ui';\n\ntype Messages = Record<string, Record<string, string>>;\n\n/**\n * Process ICU MessageFormat plural syntax.\n * Supports: `{count, plural, =0 {text} =1 {text} other {text}}` with `#` as\n * the count placeholder inside each branch.\n *\n * Mirrors the reference implementation in\n * `packages/react-ui/src/contexts/TranslationContext.tsx`. Kept in sync\n * deliberately — diverging the two managers is what produced the\n * literal-plural-format render bug in the Tags panel.\n */\nexport function processPluralFormat(text: string, params: Record<string, unknown>): string {\n const pluralMatch = text.match(/\\{(\\w+),\\s*plural,\\s*/);\n if (!pluralMatch) return text;\n\n const paramName = pluralMatch[1]!;\n const count = params[paramName];\n if (count === undefined) return text;\n\n // Find the matching closing brace by counting nested pairs.\n const startPos = pluralMatch[0].length + pluralMatch.index!;\n let braceCount = 1;\n let endPos = startPos;\n for (let i = startPos; i < text.length; i++) {\n if (text[i] === '{') braceCount++;\n else if (text[i] === '}') {\n braceCount--;\n if (braceCount === 0) { endPos = i; break; }\n }\n }\n\n const pluralCases = text.substring(startPos, endPos);\n const cases: Record<string, string> = {};\n const caseRegex = /(?:=(\\d+)|(\\w+))\\s*\\{([^}]+)\\}/g;\n let caseMatch;\n while ((caseMatch = caseRegex.exec(pluralCases)) !== null) {\n const [, exactNumber, keyword, textContent] = caseMatch;\n const key = exactNumber !== undefined ? `=${exactNumber}` : keyword!;\n cases[key] = textContent!;\n }\n\n const exactMatch = cases[`=${count}`];\n if (exactMatch !== undefined) {\n const replaced = exactMatch.replace(/#/g, String(count));\n return text.substring(0, pluralMatch.index!) + replaced + text.substring(endPos + 1);\n }\n const otherCase = cases['other'];\n if (otherCase !== undefined) {\n const replaced = otherCase.replace(/#/g, String(count));\n return text.substring(0, pluralMatch.index!) + replaced + text.substring(endPos + 1);\n }\n return text;\n}\n\n/**\n * Run a translation string through the standard interpolation pipeline:\n * plural format first (since it may consume more of the string), then\n * `{{paramKey}}` parameter substitution. Exported for unit testing.\n */\nexport function interpolateTranslation(\n translation: string,\n params: Record<string, unknown>,\n): string {\n let result = processPluralFormat(translation, params);\n Object.entries(params).forEach(([paramKey, paramValue]) => {\n result = result.replace(new RegExp(`\\\\{\\\\{${paramKey}\\\\}\\\\}`, 'g'), String(paramValue));\n });\n return result;\n}\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 *\n * Interpolation supports two syntaxes, in this precedence order:\n *\n * 1. ICU MessageFormat plural — `{count, plural, =0 {…} =1 {…} other {…}}`\n * — used for count-sensitive strings like \"1 category selected\" /\n * \"3 categories selected\".\n * 2. Double-brace parameter substitution — `{{paramKey}}` — used for\n * everything else (`{{mode}}`, `{{delay}}`, etc.).\n *\n * The two managers (this one and the reference in\n * `@semiont/react-ui/contexts/TranslationContext`) implement the same\n * interpolation contract; keep them aligned when changing either.\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 const 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 return interpolateTranslation(translation, params);\n }\n\n return translation;\n },\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [i18n, i18n.language]);\n}\n","import React from 'react';\nimport {\n ToastProvider,\n LiveRegionProvider,\n TranslationProvider,\n ThemeProvider,\n SemiontProvider,\n} from '@semiont/react-ui';\nimport { KeyboardShortcutsProvider } from '@/contexts/KeyboardShortcutsContext';\nimport { NavigationHandler } from '@/components/knowledge/NavigationHandler';\nimport { useMergedTranslationManager } from '@/hooks/useMergedTranslationManager';\n\n/**\n * Root Provider Composition for Semiont Frontend.\n *\n * Wires up GLOBAL contexts that every page needs.\n *\n * The module-scoped `SemiontBrowser` singleton (KB list, active KB,\n * per-KB SemiontSession) is made available via `<SemiontProvider>` at\n * the app root — mounting it here is cheap because the singleton itself\n * survives every React re-render and route change.\n *\n * Auth-dependent UI (ProtectedErrorBoundary, SessionExpiredModal,\n * PermissionDeniedModal) is bundled in `AuthShell` and mounted only in\n * protected layouts (know/, admin/, moderate/, auth/welcome/). Pre-app\n * routes (landing, OAuth flow) intentionally do NOT mount AuthShell —\n * they have no session UI.\n *\n * The `SemiontClient` is owned by the per-KB `SemiontSession`, which\n * `SemiontBrowser` constructs on demand. Components read\n * `useObservable(useSemiont().activeSession$)?.client`.\n *\n * The event bus lives inside the client (owned by `SemiontSession`).\n * Components emit via `session?.emit(...)` and subscribe via\n * `useEventSubscription[s]`.\n *\n * Provider order — outer to inner:\n * 1. TranslationProvider — i18n\n * 2. SemiontProvider — SemiontBrowser singleton\n * 3. ToastProvider — toast notifications\n * 4. LiveRegionProvider — a11y live region\n * 5. KeyboardShortcutsProvider — keyboard shortcuts\n * 6. ThemeProvider — theme\n * + NavigationHandler\n */\nexport function Providers({ children }: { children: React.ReactNode }) {\n const translationManager = useMergedTranslationManager();\n\n return (\n <TranslationProvider translationManager={translationManager}>\n <SemiontProvider>\n <ToastProvider>\n <LiveRegionProvider>\n <KeyboardShortcutsProvider>\n <ThemeProvider>\n <NavigationHandler />\n {children}\n </ThemeProvider>\n </KeyboardShortcutsProvider>\n </LiveRegionProvider>\n </ToastProvider>\n </SemiontProvider>\n </TranslationProvider>\n );\n}\n","import * as React from \"react\";\nfunction ChevronDownIcon({\n title,\n titleId,\n ...props\n}, svgRef) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n strokeWidth: 1.5,\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"m19.5 8.25-7.5 7.5-7.5-7.5\"\n }));\n}\nconst ForwardRef = /*#__PURE__*/ React.forwardRef(ChevronDownIcon);\nexport default ForwardRef;","import * as React from \"react\";\nfunction ChevronUpIcon({\n title,\n titleId,\n ...props\n}, svgRef) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n strokeWidth: 1.5,\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"m4.5 15.75 7.5-7.5 7.5 7.5\"\n }));\n}\nconst ForwardRef = /*#__PURE__*/ React.forwardRef(ChevronUpIcon);\nexport default ForwardRef;","\"use client\";\n\nimport React, { useState, useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport {\n getCookieConsent,\n setCookieConsent,\n shouldShowBanner,\n COOKIE_CATEGORIES,\n CookieConsent,\n isCCPAApplicable,\n isGDPRApplicable,\n type CookieCategory\n} from '@/lib/cookies';\nimport { ChevronDownIcon, ChevronUpIcon } from '@heroicons/react/24/outline';\n\ninterface CookieBannerProps {\n className?: string;\n}\n\nexport function CookieBanner({ className = '' }: CookieBannerProps) {\n const { t: _t } = useTranslation();\n const t = (k: string, p?: Record<string, unknown>) => _t(`CookieBanner.${k}`, p as any) as string;\n const [isVisible, setIsVisible] = useState(false);\n const [showDetails, setShowDetails] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n const [region, setRegion] = useState<'GDPR' | 'CCPA' | 'GENERAL'>('GENERAL');\n const [consent, setConsent] = useState<Partial<CookieConsent>>({\n necessary: true,\n analytics: false,\n marketing: false,\n preferences: false\n });\n\n useEffect(() => {\n const checkVisibility = async () => {\n if (shouldShowBanner()) {\n setIsVisible(true);\n\n try {\n // Determine applicable regulation\n const [isGDPR, isCCPA] = await Promise.all([\n isGDPRApplicable(),\n isCCPAApplicable()\n ]);\n\n if (isGDPR) {\n setRegion('GDPR');\n } else if (isCCPA) {\n setRegion('CCPA');\n } else {\n setRegion('GENERAL');\n }\n } catch (error) {\n // If region detection fails, default to GENERAL\n console.error('Failed to detect region:', error);\n setRegion('GENERAL');\n }\n }\n };\n\n checkVisibility();\n }, []);\n\n const handleAcceptAll = async () => {\n setIsLoading(true);\n\n try {\n const fullConsent = {\n necessary: true,\n analytics: true,\n marketing: true,\n preferences: true\n };\n\n await Promise.resolve(setCookieConsent(fullConsent));\n setIsVisible(false);\n } catch (error) {\n console.error('Failed to save cookie consent:', error);\n } finally {\n setIsLoading(false);\n }\n };\n\n const handleRejectAll = async () => {\n setIsLoading(true);\n\n try {\n const minimalConsent = {\n necessary: true,\n analytics: false,\n marketing: false,\n preferences: false\n };\n\n await Promise.resolve(setCookieConsent(minimalConsent));\n setIsVisible(false);\n } catch (error) {\n console.error('Failed to save cookie consent:', error);\n } finally {\n setIsLoading(false);\n }\n };\n\n const handleSavePreferences = async () => {\n setIsLoading(true);\n\n try {\n await Promise.resolve(setCookieConsent(consent));\n setIsVisible(false);\n } catch (error) {\n console.error('Failed to save cookie consent:', error);\n } finally {\n setIsLoading(false);\n }\n };\n\n const handleCategoryToggle = (categoryId: keyof Omit<CookieConsent, 'timestamp' | 'version'>) => {\n if (categoryId === 'necessary') return; // Can't toggle necessary cookies\n\n setConsent(prev => ({\n ...prev,\n [categoryId]: !prev[categoryId]\n }));\n };\n\n const getBannerText = () => {\n switch (region) {\n case 'GDPR':\n return {\n title: t('gdprTitle'),\n description: t('gdprDescription'),\n learnMore: t('gdprLearnMore')\n };\n case 'CCPA':\n return {\n title: t('ccpaTitle'),\n description: t('ccpaDescription'),\n learnMore: t('ccpaLearnMore')\n };\n default:\n return {\n title: t('generalTitle'),\n description: t('generalDescription'),\n learnMore: t('generalLearnMore')\n };\n }\n };\n\n if (!isVisible) return null;\n\n const bannerText = getBannerText();\n\n return (\n <div\n className={className}\n style={{\n position: 'fixed',\n bottom: 0,\n left: 0,\n right: 0,\n zIndex: 50,\n backgroundColor: 'var(--semiont-bg-primary)',\n borderTop: '1px solid var(--semiont-border-primary)',\n boxShadow: 'var(--semiont-shadow-lg)',\n }}\n >\n <div style={{ maxWidth: '80rem', margin: '0 auto', padding: '1rem 1.5rem' }}>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '1rem' }}>\n {/* Main banner content */}\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', gap: '1.5rem', flexWrap: 'wrap' }}>\n <div style={{ flex: 1, minWidth: '300px' }}>\n <h3 style={{\n fontSize: '1.125rem',\n fontWeight: 600,\n color: 'var(--semiont-text-primary)',\n marginBottom: '0.5rem',\n }}>\n {bannerText.title}\n </h3>\n <p style={{\n fontSize: 'var(--semiont-text-sm, 0.875rem)',\n color: 'var(--semiont-text-secondary)',\n marginBottom: '0.25rem',\n }}>\n {bannerText.description}\n </p>\n <p style={{\n fontSize: 'var(--semiont-text-xs, 0.75rem)',\n color: 'var(--semiont-text-tertiary)',\n }}>\n {bannerText.learnMore}\n </p>\n </div>\n\n {/* Action buttons */}\n <div style={{ display: 'flex', gap: '0.75rem', alignItems: 'center', flexWrap: 'wrap' }}>\n <button\n type=\"button\"\n onClick={() => setShowDetails(!showDetails)}\n className=\"semiont-button--secondary\"\n style={{ display: 'flex', alignItems: 'center', gap: '0.25rem' }}\n >\n {t('customize')}\n {showDetails ? (\n <ChevronUpIcon style={{ width: '1rem', height: '1rem' }} />\n ) : (\n <ChevronDownIcon style={{ width: '1rem', height: '1rem' }} />\n )}\n </button>\n\n {region !== 'GDPR' && (\n <button\n type=\"button\"\n onClick={handleRejectAll}\n disabled={isLoading}\n className=\"semiont-button--secondary\"\n >\n {isLoading ? t('saving') : t('rejectAll')}\n </button>\n )}\n\n <button\n type=\"button\"\n onClick={handleAcceptAll}\n disabled={isLoading}\n className=\"semiont-button--primary\"\n >\n {isLoading ? t('saving') : t('acceptAll')}\n </button>\n </div>\n </div>\n\n {/* Detailed preferences */}\n {showDetails && (\n <div style={{\n borderTop: '1px solid var(--semiont-border-primary)',\n paddingTop: '1rem',\n }}>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '1rem' }}>\n <h4 style={{\n fontSize: '1rem',\n fontWeight: 500,\n color: 'var(--semiont-text-primary)',\n }}>\n {t('cookiePreferences')}\n </h4>\n\n <div style={{ display: 'flex', flexDirection: 'column', gap: '0.75rem' }}>\n {COOKIE_CATEGORIES.map((category: CookieCategory) => (\n <div key={category.id} style={{ display: 'flex', alignItems: 'flex-start', gap: '0.75rem' }}>\n <div style={{ display: 'flex', alignItems: 'center', height: '1.25rem' }}>\n <input\n id={`cookie-${category.id}`}\n type=\"checkbox\"\n checked={consent[category.id] || false}\n onChange={() => handleCategoryToggle(category.id)}\n disabled={category.required || isLoading}\n style={{ accentColor: 'var(--semiont-color-primary-600, #2563eb)' }}\n />\n </div>\n <div style={{ flex: 1, minWidth: 0 }}>\n <label\n htmlFor={`cookie-${category.id}`}\n style={{\n fontSize: 'var(--semiont-text-sm, 0.875rem)',\n fontWeight: 500,\n color: 'var(--semiont-text-primary)',\n cursor: 'pointer',\n }}\n >\n {category.name}\n {category.required && (\n <span style={{\n fontSize: 'var(--semiont-text-xs, 0.75rem)',\n color: 'var(--semiont-text-tertiary)',\n marginLeft: '0.25rem',\n }}>\n {t('required')}\n </span>\n )}\n </label>\n <p style={{\n fontSize: 'var(--semiont-text-xs, 0.75rem)',\n color: 'var(--semiont-text-secondary)',\n marginTop: '0.25rem',\n }}>\n {category.description}\n </p>\n <details style={{ marginTop: '0.25rem' }}>\n <summary style={{\n fontSize: 'var(--semiont-text-xs, 0.75rem)',\n color: 'var(--semiont-color-primary-600, #2563eb)',\n cursor: 'pointer',\n }}>\n {t('viewCookies')}\n </summary>\n <div style={{\n marginTop: '0.25rem',\n fontSize: 'var(--semiont-text-xs, 0.75rem)',\n color: 'var(--semiont-text-tertiary)',\n }}>\n {category.cookies.join(', ')}\n </div>\n </details>\n </div>\n </div>\n ))}\n </div>\n\n <div style={{\n display: 'flex',\n justifyContent: 'flex-end',\n gap: '0.75rem',\n paddingTop: '1rem',\n }}>\n <button\n type=\"button\"\n onClick={() => setShowDetails(false)}\n className=\"semiont-button--secondary\"\n >\n {t('cancel')}\n </button>\n <button\n type=\"button\"\n onClick={handleSavePreferences}\n disabled={isLoading}\n className=\"semiont-button--primary\"\n >\n {isLoading ? t('saving') : t('savePreferences')}\n </button>\n </div>\n </div>\n </div>\n )}\n </div>\n </div>\n </div>\n );\n}\n\nexport default CookieBanner;\n","import { Outlet } from 'react-router-dom';\nimport { Providers } from '../providers';\nimport { CookieBanner } from '@/components/CookieBanner';\nimport { SkipLinks } from '@semiont/react-ui';\n\n/**\n * Locale Layout — root layout for all /:locale/* routes.\n *\n * Mounts only auth-independent providers. Auth-dependent providers\n * (KnowledgeBaseProvider, AuthProvider, SessionProvider, modals)\n * are mounted via AuthShell in protected layouts (know/, admin/,\n * moderate/, auth/welcome/).\n */\nexport default function LocaleLayout() {\n return (\n <Providers>\n <SkipLinks />\n <Outlet />\n <CookieBanner />\n </Providers>\n );\n}\n"],"names":["NavigationHandler","router","useRouter","handleExternalNavigate","useCallback","url","cancelFallback","handleRouterPush","path","useEventSubscriptions","processPluralFormat","text","params","pluralMatch","paramName","count","startPos","braceCount","endPos","i","pluralCases","cases","caseRegex","caseMatch","exactNumber","keyword","textContent","key","exactMatch","replaced","otherCase","interpolateTranslation","translation","result","paramKey","paramValue","useMergedTranslationManager","i18n","useTranslation","useMemo","namespace","messages","_a","Providers","children","translationManager","jsx","TranslationProvider","SemiontProvider","ToastProvider","LiveRegionProvider","KeyboardShortcutsProvider","jsxs","ThemeProvider","ChevronDownIcon","title","titleId","props","svgRef","React.createElement","ForwardRef","React.forwardRef","ChevronUpIcon","CookieBanner","className","_t","t","k","isVisible","setIsVisible","useState","showDetails","setShowDetails","isLoading","setIsLoading","region","setRegion","consent","setConsent","useEffect","shouldShowBanner","isGDPR","isCCPA","isGDPRApplicable","isCCPAApplicable","error","handleAcceptAll","fullConsent","setCookieConsent","handleRejectAll","minimalConsent","handleSavePreferences","handleCategoryToggle","categoryId","prev","getBannerText","bannerText","COOKIE_CATEGORIES","category","LocaleLayout","SkipLinks","Outlet"],"mappings":"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","x_google_ignoreList":[3,4]}
|
|
1
|
+
{"version":3,"file":"layout-C-P8uUyx.js","sources":["../../src/components/knowledge/NavigationHandler.tsx","../../src/hooks/useMergedTranslationManager.ts","../../src/app/providers.tsx","../../../../node_modules/@heroicons/react/24/outline/esm/ChevronDownIcon.js","../../../../node_modules/@heroicons/react/24/outline/esm/ChevronUpIcon.js","../../src/components/CookieBanner.tsx","../../src/app/[locale]/layout.tsx"],"sourcesContent":["import { useCallback } from 'react';\nimport { useRouter } from '@/i18n/routing';\nimport { useEventSubscriptions } from '@semiont/react-ui';\n\n/**\n * NavigationHandler - Connects NavigationEventBus to Next.js router\n *\n * This component subscribes to navigation events from @semiont/react-ui\n * components and handles them using Next.js client-side routing.\n *\n * Benefits:\n * - Client-side navigation (no page reload)\n * - Preserves React state\n * - Faster navigation\n * - Better UX\n *\n * Must be mounted in app layout to handle all navigation requests.\n */\nexport function NavigationHandler() {\n const router = useRouter();\n\n // Handle external navigation events\n const handleExternalNavigate = useCallback(({ url, cancelFallback }: { url: string; resourceId?: string; cancelFallback: () => void }) => {\n cancelFallback(); // Prevent window.location fallback since we're handling with client-side routing\n router.push(url);\n }, [router]);\n\n // Handle router push events\n const handleRouterPush = useCallback(({ path }: { path: string; reason?: string }) => {\n router.push(path);\n }, [router]);\n\n useEventSubscriptions({\n 'nav:external': handleExternalNavigate,\n 'nav:push': handleRouterPush,\n });\n\n // This component only manages navigation, doesn't render anything\n return null;\n}\n","import { useMemo } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport type { TranslationManager } from '@semiont/react-ui';\n\ntype Messages = Record<string, Record<string, string>>;\n\n/**\n * Process ICU MessageFormat plural syntax.\n * Supports: `{count, plural, =0 {text} =1 {text} other {text}}` with `#` as\n * the count placeholder inside each branch.\n *\n * Mirrors the reference implementation in\n * `packages/react-ui/src/contexts/TranslationContext.tsx`. Kept in sync\n * deliberately — diverging the two managers is what produced the\n * literal-plural-format render bug in the Tags panel.\n */\nexport function processPluralFormat(text: string, params: Record<string, unknown>): string {\n const pluralMatch = text.match(/\\{(\\w+),\\s*plural,\\s*/);\n if (!pluralMatch) return text;\n\n const paramName = pluralMatch[1]!;\n const count = params[paramName];\n if (count === undefined) return text;\n\n // Find the matching closing brace by counting nested pairs.\n const startPos = pluralMatch[0].length + pluralMatch.index!;\n let braceCount = 1;\n let endPos = startPos;\n for (let i = startPos; i < text.length; i++) {\n if (text[i] === '{') braceCount++;\n else if (text[i] === '}') {\n braceCount--;\n if (braceCount === 0) { endPos = i; break; }\n }\n }\n\n const pluralCases = text.substring(startPos, endPos);\n const cases: Record<string, string> = {};\n const caseRegex = /(?:=(\\d+)|(\\w+))\\s*\\{([^}]+)\\}/g;\n let caseMatch;\n while ((caseMatch = caseRegex.exec(pluralCases)) !== null) {\n const [, exactNumber, keyword, textContent] = caseMatch;\n const key = exactNumber !== undefined ? `=${exactNumber}` : keyword!;\n cases[key] = textContent!;\n }\n\n const exactMatch = cases[`=${count}`];\n if (exactMatch !== undefined) {\n const replaced = exactMatch.replace(/#/g, String(count));\n return text.substring(0, pluralMatch.index!) + replaced + text.substring(endPos + 1);\n }\n const otherCase = cases['other'];\n if (otherCase !== undefined) {\n const replaced = otherCase.replace(/#/g, String(count));\n return text.substring(0, pluralMatch.index!) + replaced + text.substring(endPos + 1);\n }\n return text;\n}\n\n/**\n * Run a translation string through the standard interpolation pipeline:\n * plural format first (since it may consume more of the string), then\n * `{{paramKey}}` parameter substitution. Exported for unit testing.\n */\nexport function interpolateTranslation(\n translation: string,\n params: Record<string, unknown>,\n): string {\n let result = processPluralFormat(translation, params);\n Object.entries(params).forEach(([paramKey, paramValue]) => {\n result = result.replace(new RegExp(`\\\\{\\\\{${paramKey}\\\\}\\\\}`, 'g'), String(paramValue));\n });\n return result;\n}\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 *\n * Interpolation supports two syntaxes, in this precedence order:\n *\n * 1. ICU MessageFormat plural — `{count, plural, =0 {…} =1 {…} other {…}}`\n * — used for count-sensitive strings like \"1 category selected\" /\n * \"3 categories selected\".\n * 2. Double-brace parameter substitution — `{{paramKey}}` — used for\n * everything else (`{{mode}}`, `{{delay}}`, etc.).\n *\n * The two managers (this one and the reference in\n * `@semiont/react-ui/contexts/TranslationContext`) implement the same\n * interpolation contract; keep them aligned when changing either.\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 const 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 return interpolateTranslation(translation, params);\n }\n\n return translation;\n },\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [i18n, i18n.language]);\n}\n","import React from 'react';\nimport {\n ToastProvider,\n LiveRegionProvider,\n TranslationProvider,\n ThemeProvider,\n SemiontProvider,\n} from '@semiont/react-ui';\nimport { KeyboardShortcutsProvider } from '@/contexts/KeyboardShortcutsContext';\nimport { NavigationHandler } from '@/components/knowledge/NavigationHandler';\nimport { useMergedTranslationManager } from '@/hooks/useMergedTranslationManager';\n\n/**\n * Root Provider Composition for Semiont Frontend.\n *\n * Wires up GLOBAL contexts that every page needs.\n *\n * The module-scoped `SemiontBrowser` singleton (KB list, active KB,\n * per-KB SemiontSession) is made available via `<SemiontProvider>` at\n * the app root — mounting it here is cheap because the singleton itself\n * survives every React re-render and route change.\n *\n * Auth-dependent UI (ProtectedErrorBoundary, SessionExpiredModal,\n * PermissionDeniedModal) is bundled in `AuthShell` and mounted only in\n * protected layouts (know/, admin/, moderate/, auth/welcome/). Pre-app\n * routes (landing, OAuth flow) intentionally do NOT mount AuthShell —\n * they have no session UI.\n *\n * The `SemiontClient` is owned by the per-KB `SemiontSession`, which\n * `SemiontBrowser` constructs on demand. Components read\n * `useObservable(useSemiont().activeSession$)?.client`.\n *\n * The event bus lives inside the client (owned by `SemiontSession`).\n * Components emit via `session?.emit(...)` and subscribe via\n * `useEventSubscription[s]`.\n *\n * Provider order — outer to inner:\n * 1. TranslationProvider — i18n\n * 2. SemiontProvider — SemiontBrowser singleton\n * 3. ToastProvider — toast notifications\n * 4. LiveRegionProvider — a11y live region\n * 5. KeyboardShortcutsProvider — keyboard shortcuts\n * 6. ThemeProvider — theme\n * + NavigationHandler\n */\nexport function Providers({ children }: { children: React.ReactNode }) {\n const translationManager = useMergedTranslationManager();\n\n return (\n <TranslationProvider translationManager={translationManager}>\n <SemiontProvider>\n <ToastProvider>\n <LiveRegionProvider>\n <KeyboardShortcutsProvider>\n <ThemeProvider>\n <NavigationHandler />\n {children}\n </ThemeProvider>\n </KeyboardShortcutsProvider>\n </LiveRegionProvider>\n </ToastProvider>\n </SemiontProvider>\n </TranslationProvider>\n );\n}\n","import * as React from \"react\";\nfunction ChevronDownIcon({\n title,\n titleId,\n ...props\n}, svgRef) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n strokeWidth: 1.5,\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"m19.5 8.25-7.5 7.5-7.5-7.5\"\n }));\n}\nconst ForwardRef = /*#__PURE__*/ React.forwardRef(ChevronDownIcon);\nexport default ForwardRef;","import * as React from \"react\";\nfunction ChevronUpIcon({\n title,\n titleId,\n ...props\n}, svgRef) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n strokeWidth: 1.5,\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"m4.5 15.75 7.5-7.5 7.5 7.5\"\n }));\n}\nconst ForwardRef = /*#__PURE__*/ React.forwardRef(ChevronUpIcon);\nexport default ForwardRef;","\"use client\";\n\nimport React, { useState, useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport {\n getCookieConsent,\n setCookieConsent,\n shouldShowBanner,\n COOKIE_CATEGORIES,\n CookieConsent,\n isCCPAApplicable,\n isGDPRApplicable,\n type CookieCategory\n} from '@/lib/cookies';\nimport { ChevronDownIcon, ChevronUpIcon } from '@heroicons/react/24/outline';\n\ninterface CookieBannerProps {\n className?: string;\n}\n\nexport function CookieBanner({ className = '' }: CookieBannerProps) {\n const { t: _t } = useTranslation();\n const t = (k: string, p?: Record<string, unknown>) => _t(`CookieBanner.${k}`, p as any) as string;\n const [isVisible, setIsVisible] = useState(false);\n const [showDetails, setShowDetails] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n const [region, setRegion] = useState<'GDPR' | 'CCPA' | 'GENERAL'>('GENERAL');\n const [consent, setConsent] = useState<Partial<CookieConsent>>({\n necessary: true,\n analytics: false,\n marketing: false,\n preferences: false\n });\n\n useEffect(() => {\n const checkVisibility = async () => {\n if (shouldShowBanner()) {\n setIsVisible(true);\n\n try {\n // Determine applicable regulation\n const [isGDPR, isCCPA] = await Promise.all([\n isGDPRApplicable(),\n isCCPAApplicable()\n ]);\n\n if (isGDPR) {\n setRegion('GDPR');\n } else if (isCCPA) {\n setRegion('CCPA');\n } else {\n setRegion('GENERAL');\n }\n } catch (error) {\n // If region detection fails, default to GENERAL\n console.error('Failed to detect region:', error);\n setRegion('GENERAL');\n }\n }\n };\n\n checkVisibility();\n }, []);\n\n const handleAcceptAll = async () => {\n setIsLoading(true);\n\n try {\n const fullConsent = {\n necessary: true,\n analytics: true,\n marketing: true,\n preferences: true\n };\n\n await Promise.resolve(setCookieConsent(fullConsent));\n setIsVisible(false);\n } catch (error) {\n console.error('Failed to save cookie consent:', error);\n } finally {\n setIsLoading(false);\n }\n };\n\n const handleRejectAll = async () => {\n setIsLoading(true);\n\n try {\n const minimalConsent = {\n necessary: true,\n analytics: false,\n marketing: false,\n preferences: false\n };\n\n await Promise.resolve(setCookieConsent(minimalConsent));\n setIsVisible(false);\n } catch (error) {\n console.error('Failed to save cookie consent:', error);\n } finally {\n setIsLoading(false);\n }\n };\n\n const handleSavePreferences = async () => {\n setIsLoading(true);\n\n try {\n await Promise.resolve(setCookieConsent(consent));\n setIsVisible(false);\n } catch (error) {\n console.error('Failed to save cookie consent:', error);\n } finally {\n setIsLoading(false);\n }\n };\n\n const handleCategoryToggle = (categoryId: keyof Omit<CookieConsent, 'timestamp' | 'version'>) => {\n if (categoryId === 'necessary') return; // Can't toggle necessary cookies\n\n setConsent(prev => ({\n ...prev,\n [categoryId]: !prev[categoryId]\n }));\n };\n\n const getBannerText = () => {\n switch (region) {\n case 'GDPR':\n return {\n title: t('gdprTitle'),\n description: t('gdprDescription'),\n learnMore: t('gdprLearnMore')\n };\n case 'CCPA':\n return {\n title: t('ccpaTitle'),\n description: t('ccpaDescription'),\n learnMore: t('ccpaLearnMore')\n };\n default:\n return {\n title: t('generalTitle'),\n description: t('generalDescription'),\n learnMore: t('generalLearnMore')\n };\n }\n };\n\n if (!isVisible) return null;\n\n const bannerText = getBannerText();\n\n return (\n <div\n className={className}\n style={{\n position: 'fixed',\n bottom: 0,\n left: 0,\n right: 0,\n zIndex: 50,\n backgroundColor: 'var(--semiont-bg-primary)',\n borderTop: '1px solid var(--semiont-border-primary)',\n boxShadow: 'var(--semiont-shadow-lg)',\n }}\n >\n <div style={{ maxWidth: '80rem', margin: '0 auto', padding: '1rem 1.5rem' }}>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '1rem' }}>\n {/* Main banner content */}\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', gap: '1.5rem', flexWrap: 'wrap' }}>\n <div style={{ flex: 1, minWidth: '300px' }}>\n <h3 style={{\n fontSize: '1.125rem',\n fontWeight: 600,\n color: 'var(--semiont-text-primary)',\n marginBottom: '0.5rem',\n }}>\n {bannerText.title}\n </h3>\n <p style={{\n fontSize: 'var(--semiont-text-sm, 0.875rem)',\n color: 'var(--semiont-text-secondary)',\n marginBottom: '0.25rem',\n }}>\n {bannerText.description}\n </p>\n <p style={{\n fontSize: 'var(--semiont-text-xs, 0.75rem)',\n color: 'var(--semiont-text-tertiary)',\n }}>\n {bannerText.learnMore}\n </p>\n </div>\n\n {/* Action buttons */}\n <div style={{ display: 'flex', gap: '0.75rem', alignItems: 'center', flexWrap: 'wrap' }}>\n <button\n type=\"button\"\n onClick={() => setShowDetails(!showDetails)}\n className=\"semiont-button--secondary\"\n style={{ display: 'flex', alignItems: 'center', gap: '0.25rem' }}\n >\n {t('customize')}\n {showDetails ? (\n <ChevronUpIcon style={{ width: '1rem', height: '1rem' }} />\n ) : (\n <ChevronDownIcon style={{ width: '1rem', height: '1rem' }} />\n )}\n </button>\n\n {region !== 'GDPR' && (\n <button\n type=\"button\"\n onClick={handleRejectAll}\n disabled={isLoading}\n className=\"semiont-button--secondary\"\n >\n {isLoading ? t('saving') : t('rejectAll')}\n </button>\n )}\n\n <button\n type=\"button\"\n onClick={handleAcceptAll}\n disabled={isLoading}\n className=\"semiont-button--primary\"\n >\n {isLoading ? t('saving') : t('acceptAll')}\n </button>\n </div>\n </div>\n\n {/* Detailed preferences */}\n {showDetails && (\n <div style={{\n borderTop: '1px solid var(--semiont-border-primary)',\n paddingTop: '1rem',\n }}>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '1rem' }}>\n <h4 style={{\n fontSize: '1rem',\n fontWeight: 500,\n color: 'var(--semiont-text-primary)',\n }}>\n {t('cookiePreferences')}\n </h4>\n\n <div style={{ display: 'flex', flexDirection: 'column', gap: '0.75rem' }}>\n {COOKIE_CATEGORIES.map((category: CookieCategory) => (\n <div key={category.id} style={{ display: 'flex', alignItems: 'flex-start', gap: '0.75rem' }}>\n <div style={{ display: 'flex', alignItems: 'center', height: '1.25rem' }}>\n <input\n id={`cookie-${category.id}`}\n type=\"checkbox\"\n checked={consent[category.id] || false}\n onChange={() => handleCategoryToggle(category.id)}\n disabled={category.required || isLoading}\n style={{ accentColor: 'var(--semiont-color-primary-600, #2563eb)' }}\n />\n </div>\n <div style={{ flex: 1, minWidth: 0 }}>\n <label\n htmlFor={`cookie-${category.id}`}\n style={{\n fontSize: 'var(--semiont-text-sm, 0.875rem)',\n fontWeight: 500,\n color: 'var(--semiont-text-primary)',\n cursor: 'pointer',\n }}\n >\n {category.name}\n {category.required && (\n <span style={{\n fontSize: 'var(--semiont-text-xs, 0.75rem)',\n color: 'var(--semiont-text-tertiary)',\n marginLeft: '0.25rem',\n }}>\n {t('required')}\n </span>\n )}\n </label>\n <p style={{\n fontSize: 'var(--semiont-text-xs, 0.75rem)',\n color: 'var(--semiont-text-secondary)',\n marginTop: '0.25rem',\n }}>\n {category.description}\n </p>\n <details style={{ marginTop: '0.25rem' }}>\n <summary style={{\n fontSize: 'var(--semiont-text-xs, 0.75rem)',\n color: 'var(--semiont-color-primary-600, #2563eb)',\n cursor: 'pointer',\n }}>\n {t('viewCookies')}\n </summary>\n <div style={{\n marginTop: '0.25rem',\n fontSize: 'var(--semiont-text-xs, 0.75rem)',\n color: 'var(--semiont-text-tertiary)',\n }}>\n {category.cookies.join(', ')}\n </div>\n </details>\n </div>\n </div>\n ))}\n </div>\n\n <div style={{\n display: 'flex',\n justifyContent: 'flex-end',\n gap: '0.75rem',\n paddingTop: '1rem',\n }}>\n <button\n type=\"button\"\n onClick={() => setShowDetails(false)}\n className=\"semiont-button--secondary\"\n >\n {t('cancel')}\n </button>\n <button\n type=\"button\"\n onClick={handleSavePreferences}\n disabled={isLoading}\n className=\"semiont-button--primary\"\n >\n {isLoading ? t('saving') : t('savePreferences')}\n </button>\n </div>\n </div>\n </div>\n )}\n </div>\n </div>\n </div>\n );\n}\n\nexport default CookieBanner;\n","import { Outlet } from 'react-router-dom';\nimport { Providers } from '../providers';\nimport { CookieBanner } from '@/components/CookieBanner';\nimport { SkipLinks } from '@semiont/react-ui';\n\n/**\n * Locale Layout — root layout for all /:locale/* routes.\n *\n * Mounts only auth-independent providers. Auth-dependent providers\n * (KnowledgeBaseProvider, AuthProvider, SessionProvider, modals)\n * are mounted via AuthShell in protected layouts (know/, admin/,\n * moderate/, auth/welcome/).\n */\nexport default function LocaleLayout() {\n return (\n <Providers>\n <SkipLinks />\n <Outlet />\n <CookieBanner />\n </Providers>\n );\n}\n"],"names":["NavigationHandler","router","useRouter","handleExternalNavigate","useCallback","url","cancelFallback","handleRouterPush","path","useEventSubscriptions","processPluralFormat","text","params","pluralMatch","paramName","count","startPos","braceCount","endPos","i","pluralCases","cases","caseRegex","caseMatch","exactNumber","keyword","textContent","key","exactMatch","replaced","otherCase","interpolateTranslation","translation","result","paramKey","paramValue","useMergedTranslationManager","i18n","useTranslation","useMemo","namespace","messages","_a","Providers","children","translationManager","jsx","TranslationProvider","SemiontProvider","ToastProvider","LiveRegionProvider","KeyboardShortcutsProvider","jsxs","ThemeProvider","ChevronDownIcon","title","titleId","props","svgRef","React.createElement","ForwardRef","React.forwardRef","ChevronUpIcon","CookieBanner","className","_t","t","k","isVisible","setIsVisible","useState","showDetails","setShowDetails","isLoading","setIsLoading","region","setRegion","consent","setConsent","useEffect","shouldShowBanner","isGDPR","isCCPA","isGDPRApplicable","isCCPAApplicable","error","handleAcceptAll","fullConsent","setCookieConsent","handleRejectAll","minimalConsent","handleSavePreferences","handleCategoryToggle","categoryId","prev","getBannerText","bannerText","COOKIE_CATEGORIES","category","LocaleLayout","SkipLinks","Outlet"],"mappings":"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","x_google_ignoreList":[3,4]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{k,j as i,Q as w,u as v,c as h,M as L,O as j}from"./index-
|
|
2
|
-
//# sourceMappingURL=layout-
|
|
1
|
+
import{k,j as i,Q as w,u as v,c as h,M as L,O as j}from"./index-QjYSiWWG.js";import{r,O as S}from"./vendor-DJo4KD8w.js";import{b as y,L as E,u as R}from"./routing-CxPkffyg.js";import{u as p}from"./i18n-BbpF47i1.js";import{F as $}from"./ArrowsRightLeftIcon-BzLgl5o9.js";import{F,a as M}from"./ChevronLeftIcon-BLyRNZuL.js";import{C}from"./CookiePreferences-BizeRUGG.js";import{K as O}from"./privacy-Rbj4Ycw9.js";import{r as x,L as b}from"./routing-CUnWbO2L.js";import"./XMarkIcon-KMKD47CF.js";function A({title:o,titleId:e,...a},n){return r.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:1.5,stroke:"currentColor","aria-hidden":"true","data-slot":"icon",ref:n,"aria-labelledby":e},a),o?r.createElement("title",{id:e},o):null,r.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M12 6.042A8.967 8.967 0 0 0 6 3.75c-1.052 0-2.062.18-3 .512v14.25A8.987 8.987 0 0 1 6 18c2.305 0 4.408.867 6 2.292m0-14.25a8.966 8.966 0 0 1 6-2.292c1.052 0 2.062.18 3 .512v14.25A8.987 8.987 0 0 0 18 18a8.967 8.967 0 0 0-6 2.292m0-14.25v14.25"}))}const H=r.forwardRef(A);function K({title:o,titleId:e,...a},n){return r.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:1.5,stroke:"currentColor","aria-hidden":"true","data-slot":"icon",ref:n,"aria-labelledby":e},a),o?r.createElement("title",{id:e},o):null,r.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M12 6v6h4.5m4.5 0a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z"}))}const N=r.forwardRef(K);function B({title:o,titleId:e,...a},n){return r.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:1.5,stroke:"currentColor","aria-hidden":"true","data-slot":"icon",ref:n,"aria-labelledby":e},a),o?r.createElement("title",{id:e},o):null,r.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9.568 3H5.25A2.25 2.25 0 0 0 3 5.25v4.318c0 .597.237 1.17.659 1.591l9.581 9.581c.699.699 1.78.872 2.607.33a18.095 18.095 0 0 0 5.223-5.223c.542-.827.369-1.908-.33-2.607L11.16 3.66A2.25 2.25 0 0 0 9.568 3Z"}),r.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M6 6h.008v.008H6V6Z"}))}const D=r.forwardRef(B);function T({href:o,to:e,...a}){return i.jsx(E,{to:o??"",...a})}function P({isCollapsed:o,toggleCollapsed:e,navigationMenu:a}){const{t:n}=p(),t=(s,c)=>n(`Moderation.${s}`,c),{t:d}=p(),l=(s,c)=>d(`Sidebar.${s}`,c),m=y(),u=r.useCallback(()=>{e()},[e]);k({"shell:sidebar-toggle":u});const f=[{name:t("recentResources"),href:"/moderate/recent",icon:N,description:t("recentResourcesDescription")},{name:t("entityTags"),href:"/moderate/entity-tags",icon:D,description:t("entityTagsDescription")},{name:t("tagSchemas"),href:"/moderate/tag-schemas",icon:H,description:t("tagSchemasDescription")},{name:t("linkedData"),href:"/moderate/linked-data",icon:$,description:t("linkedDataDescription")}];return i.jsx(w,{title:t("title"),items:f,currentPath:m,LinkComponent:T,...a&&{dropdownContent:a},isCollapsed:o,icons:{chevronLeft:M,bars:F},collapseSidebarLabel:l("collapseSidebar"),expandSidebarLabel:l("expandSidebar")})}function W(){const{t:o}=p(),e=r.useContext(O),a=v(),n=h(a.activeSession$),t=h(n==null?void 0:n.user$),d=(n==null?void 0:n.kb)??null,l=R();if(!d)return l.push("/know"),null;const m=!!t,u=(t==null?void 0:t.isAdmin)??!1,f=(t==null?void 0:t.isModerator)??!1;return i.jsxs("div",{className:"min-h-screen bg-gray-50 dark:bg-gray-900 flex flex-col",children:[i.jsxs("div",{className:"flex flex-1",children:[i.jsx(L,{Link:b,routes:x,t:s=>o(`Navigation.${s}`),tHome:s=>o(`Home.${s}`),brandingLink:"/",collapsible:!0,storageKey:"moderation-sidebar-collapsed",isAuthenticated:m,isAdmin:u,isModerator:f,children:(s,c,g)=>i.jsx(P,{isCollapsed:s,toggleCollapsed:c,navigationMenu:g})}),i.jsx("main",{className:"flex-1 p-6 flex flex-col",children:i.jsx("div",{className:"max-w-7xl mx-auto flex-1 flex flex-col w-full",children:i.jsx(S,{})})})]}),i.jsx(j,{Link:b,routes:x,t:(s,c)=>o(`Footer.${s}`,c),CookiePreferences:C,...(e==null?void 0:e.openKeyboardHelp)&&{onOpenKeyboardHelp:e.openKeyboardHelp}})]})}function X(){return i.jsx(W,{})}export{X as default};
|
|
2
|
+
//# sourceMappingURL=layout-C7qxASOF.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout-Cw-T4GPy.js","sources":["../../../../node_modules/@heroicons/react/24/outline/esm/BookOpenIcon.js","../../../../node_modules/@heroicons/react/24/outline/esm/ClockIcon.js","../../../../node_modules/@heroicons/react/24/outline/esm/TagIcon.js","../../src/components/moderation/ModerationNavigation.tsx","../../src/app/[locale]/moderate/layout.tsx"],"sourcesContent":["import * as React from \"react\";\nfunction BookOpenIcon({\n title,\n titleId,\n ...props\n}, svgRef) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n strokeWidth: 1.5,\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"M12 6.042A8.967 8.967 0 0 0 6 3.75c-1.052 0-2.062.18-3 .512v14.25A8.987 8.987 0 0 1 6 18c2.305 0 4.408.867 6 2.292m0-14.25a8.966 8.966 0 0 1 6-2.292c1.052 0 2.062.18 3 .512v14.25A8.987 8.987 0 0 0 18 18a8.967 8.967 0 0 0-6 2.292m0-14.25v14.25\"\n }));\n}\nconst ForwardRef = /*#__PURE__*/ React.forwardRef(BookOpenIcon);\nexport default ForwardRef;","import * as React from \"react\";\nfunction ClockIcon({\n title,\n titleId,\n ...props\n}, svgRef) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n strokeWidth: 1.5,\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"M12 6v6h4.5m4.5 0a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z\"\n }));\n}\nconst ForwardRef = /*#__PURE__*/ React.forwardRef(ClockIcon);\nexport default ForwardRef;","import * as React from \"react\";\nfunction TagIcon({\n title,\n titleId,\n ...props\n}, svgRef) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n strokeWidth: 1.5,\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"M9.568 3H5.25A2.25 2.25 0 0 0 3 5.25v4.318c0 .597.237 1.17.659 1.591l9.581 9.581c.699.699 1.78.872 2.607.33a18.095 18.095 0 0 0 5.223-5.223c.542-.827.369-1.908-.33-2.607L11.16 3.66A2.25 2.25 0 0 0 9.568 3Z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"M6 6h.008v.008H6V6Z\"\n }));\n}\nconst ForwardRef = /*#__PURE__*/ React.forwardRef(TagIcon);\nexport default ForwardRef;","import React, { useCallback } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Link } from '@/i18n/routing';\nimport { usePathname } from '@/i18n/routing';\nimport { SimpleNavigation, useEventSubscriptions } from '@semiont/react-ui';\nimport type { SimpleNavigationItem } from '@semiont/react-ui';\nimport {\n ClockIcon,\n TagIcon,\n BookOpenIcon,\n ArrowsRightLeftIcon,\n ChevronLeftIcon,\n Bars3Icon\n} from '@heroicons/react/24/outline';\n\ninterface ModerationNavigationProps {\n isCollapsed: boolean;\n toggleCollapsed: () => void;\n navigationMenu?: (onClose: () => void) => React.ReactNode;\n}\n\n// Adapter: SimpleNavigation passes href, but our Link uses `to`\nfunction HrefLink({ href, to: _to, ...props }: React.ComponentProps<typeof Link> & { href?: string }) {\n return <Link to={(href ?? '') as string} {...props} />;\n}\n\nexport function ModerationNavigation({ isCollapsed, toggleCollapsed, navigationMenu }: ModerationNavigationProps) {\n const { t: _t } = useTranslation();\n const t = (k: string, p?: Record<string, unknown>) => _t(`Moderation.${k}`, p as any) as string;\n const { t: _tSidebar } = useTranslation();\n const tSidebar = (k: string, p?: Record<string, unknown>) => _tSidebar(`Sidebar.${k}`, p as any) as string;\n const pathname = usePathname();\n\n // Handle sidebar toggle events\n const handleSidebarToggle = useCallback(() => {\n toggleCollapsed();\n }, [toggleCollapsed]);\n\n // Subscribe to sidebar toggle events\n useEventSubscriptions({\n 'shell:sidebar-toggle': handleSidebarToggle,\n });\n\n const navigation: SimpleNavigationItem[] = [\n {\n name: t('recentResources'),\n href: '/moderate/recent',\n icon: ClockIcon,\n description: t('recentResourcesDescription')\n },\n {\n name: t('entityTags'),\n href: '/moderate/entity-tags',\n icon: TagIcon,\n description: t('entityTagsDescription')\n },\n {\n name: t('tagSchemas'),\n href: '/moderate/tag-schemas',\n icon: BookOpenIcon,\n description: t('tagSchemasDescription')\n },\n {\n name: t('linkedData'),\n href: '/moderate/linked-data',\n icon: ArrowsRightLeftIcon,\n description: t('linkedDataDescription')\n }\n ];\n\n return (\n <SimpleNavigation\n title={t('title')}\n items={navigation}\n currentPath={pathname}\n LinkComponent={HrefLink as any}\n {...(navigationMenu && { dropdownContent: navigationMenu })}\n isCollapsed={isCollapsed}\n icons={{\n chevronLeft: ChevronLeftIcon as React.ComponentType<{ className?: string }>,\n bars: Bars3Icon as React.ComponentType<{ className?: string }>\n }}\n collapseSidebarLabel={tSidebar('collapseSidebar')}\n expandSidebarLabel={tSidebar('expandSidebar')}\n />\n );\n}","import { useContext } from 'react';\nimport { Outlet } from 'react-router-dom';\nimport { useTranslation } from 'react-i18next';\nimport {\n LeftSidebar,\n Footer,\n useSemiont,\n useObservable,\n} from '@semiont/react-ui';\nimport { ModerationNavigation } from '@/components/moderation/ModerationNavigation';\nimport { CookiePreferences } from '@/components/CookiePreferences';\nimport { KeyboardShortcutsContext } from '@/contexts/KeyboardShortcutsContext';\nimport { Link, routes } from '@/lib/routing';\nimport { useRouter } from '@/i18n/routing';\n\nfunction ModerateLayoutBody() {\n const { t } = useTranslation();\n const keyboardContext = useContext(KeyboardShortcutsContext);\n const semiont = useSemiont();\n const session = useObservable(semiont.activeSession$);\n const user = useObservable(session?.user$);\n const activeKnowledgeBase = session?.kb ?? null;\n const router = useRouter();\n\n if (!activeKnowledgeBase) {\n router.push('/know');\n return null;\n }\n\n const isAuthenticated = !!user;\n const isAdmin = user?.isAdmin ?? false;\n const isModerator = user?.isModerator ?? false;\n\n return (\n <div className=\"min-h-screen bg-gray-50 dark:bg-gray-900 flex flex-col\">\n <div className=\"flex flex-1\">\n <LeftSidebar\n Link={Link}\n routes={routes}\n t={(key: string) => t(`Navigation.${key}`)}\n tHome={(key: string) => t(`Home.${key}`)}\n brandingLink=\"/\"\n collapsible={true}\n storageKey=\"moderation-sidebar-collapsed\"\n isAuthenticated={isAuthenticated}\n isAdmin={isAdmin}\n isModerator={isModerator}\n >\n {(isCollapsed, toggleCollapsed, navigationMenu) => (\n <ModerationNavigation\n isCollapsed={isCollapsed}\n toggleCollapsed={toggleCollapsed}\n navigationMenu={navigationMenu}\n />\n )}\n </LeftSidebar>\n <main className=\"flex-1 p-6 flex flex-col\">\n <div className=\"max-w-7xl mx-auto flex-1 flex flex-col w-full\">\n <Outlet />\n </div>\n </main>\n </div>\n <Footer\n Link={Link}\n routes={routes}\n t={(key: string, params?: Record<string, unknown>) => t(`Footer.${key}`, params as any) as string}\n CookiePreferences={CookiePreferences}\n {...(keyboardContext?.openKeyboardHelp && { onOpenKeyboardHelp: keyboardContext.openKeyboardHelp })}\n />\n </div>\n );\n}\n\nexport default function ModerateLayout() {\n // AuthShell is mounted by the parent ProtectedLayout in App.tsx so it\n // survives navigation between know/, admin/, and moderate/ sections.\n return <ModerateLayoutBody />;\n}\n"],"names":["BookOpenIcon","title","titleId","props","svgRef","React.createElement","ForwardRef","React.forwardRef","ClockIcon","TagIcon","HrefLink","href","_to","Link","ModerationNavigation","isCollapsed","toggleCollapsed","navigationMenu","_t","useTranslation","k","p","_tSidebar","tSidebar","pathname","usePathname","handleSidebarToggle","useCallback","useEventSubscriptions","navigation","ArrowsRightLeftIcon","jsx","SimpleNavigation","ChevronLeftIcon","Bars3Icon","ModerateLayoutBody","t","keyboardContext","useContext","KeyboardShortcutsContext","semiont","useSemiont","session","useObservable","user","activeKnowledgeBase","router","useRouter","isAuthenticated","isAdmin","isModerator","jsxs","LeftSidebar","routes","key","Outlet","Footer","params","CookiePreferences","ModerateLayout"],"mappings":"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","x_google_ignoreList":[0,1,2]}
|
|
1
|
+
{"version":3,"file":"layout-C7qxASOF.js","sources":["../../../../node_modules/@heroicons/react/24/outline/esm/BookOpenIcon.js","../../../../node_modules/@heroicons/react/24/outline/esm/ClockIcon.js","../../../../node_modules/@heroicons/react/24/outline/esm/TagIcon.js","../../src/components/moderation/ModerationNavigation.tsx","../../src/app/[locale]/moderate/layout.tsx"],"sourcesContent":["import * as React from \"react\";\nfunction BookOpenIcon({\n title,\n titleId,\n ...props\n}, svgRef) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n strokeWidth: 1.5,\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"M12 6.042A8.967 8.967 0 0 0 6 3.75c-1.052 0-2.062.18-3 .512v14.25A8.987 8.987 0 0 1 6 18c2.305 0 4.408.867 6 2.292m0-14.25a8.966 8.966 0 0 1 6-2.292c1.052 0 2.062.18 3 .512v14.25A8.987 8.987 0 0 0 18 18a8.967 8.967 0 0 0-6 2.292m0-14.25v14.25\"\n }));\n}\nconst ForwardRef = /*#__PURE__*/ React.forwardRef(BookOpenIcon);\nexport default ForwardRef;","import * as React from \"react\";\nfunction ClockIcon({\n title,\n titleId,\n ...props\n}, svgRef) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n strokeWidth: 1.5,\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"M12 6v6h4.5m4.5 0a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z\"\n }));\n}\nconst ForwardRef = /*#__PURE__*/ React.forwardRef(ClockIcon);\nexport default ForwardRef;","import * as React from \"react\";\nfunction TagIcon({\n title,\n titleId,\n ...props\n}, svgRef) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n strokeWidth: 1.5,\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"M9.568 3H5.25A2.25 2.25 0 0 0 3 5.25v4.318c0 .597.237 1.17.659 1.591l9.581 9.581c.699.699 1.78.872 2.607.33a18.095 18.095 0 0 0 5.223-5.223c.542-.827.369-1.908-.33-2.607L11.16 3.66A2.25 2.25 0 0 0 9.568 3Z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"M6 6h.008v.008H6V6Z\"\n }));\n}\nconst ForwardRef = /*#__PURE__*/ React.forwardRef(TagIcon);\nexport default ForwardRef;","import React, { useCallback } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Link } from '@/i18n/routing';\nimport { usePathname } from '@/i18n/routing';\nimport { SimpleNavigation, useEventSubscriptions } from '@semiont/react-ui';\nimport type { SimpleNavigationItem } from '@semiont/react-ui';\nimport {\n ClockIcon,\n TagIcon,\n BookOpenIcon,\n ArrowsRightLeftIcon,\n ChevronLeftIcon,\n Bars3Icon\n} from '@heroicons/react/24/outline';\n\ninterface ModerationNavigationProps {\n isCollapsed: boolean;\n toggleCollapsed: () => void;\n navigationMenu?: (onClose: () => void) => React.ReactNode;\n}\n\n// Adapter: SimpleNavigation passes href, but our Link uses `to`\nfunction HrefLink({ href, to: _to, ...props }: React.ComponentProps<typeof Link> & { href?: string }) {\n return <Link to={(href ?? '') as string} {...props} />;\n}\n\nexport function ModerationNavigation({ isCollapsed, toggleCollapsed, navigationMenu }: ModerationNavigationProps) {\n const { t: _t } = useTranslation();\n const t = (k: string, p?: Record<string, unknown>) => _t(`Moderation.${k}`, p as any) as string;\n const { t: _tSidebar } = useTranslation();\n const tSidebar = (k: string, p?: Record<string, unknown>) => _tSidebar(`Sidebar.${k}`, p as any) as string;\n const pathname = usePathname();\n\n // Handle sidebar toggle events\n const handleSidebarToggle = useCallback(() => {\n toggleCollapsed();\n }, [toggleCollapsed]);\n\n // Subscribe to sidebar toggle events\n useEventSubscriptions({\n 'shell:sidebar-toggle': handleSidebarToggle,\n });\n\n const navigation: SimpleNavigationItem[] = [\n {\n name: t('recentResources'),\n href: '/moderate/recent',\n icon: ClockIcon,\n description: t('recentResourcesDescription')\n },\n {\n name: t('entityTags'),\n href: '/moderate/entity-tags',\n icon: TagIcon,\n description: t('entityTagsDescription')\n },\n {\n name: t('tagSchemas'),\n href: '/moderate/tag-schemas',\n icon: BookOpenIcon,\n description: t('tagSchemasDescription')\n },\n {\n name: t('linkedData'),\n href: '/moderate/linked-data',\n icon: ArrowsRightLeftIcon,\n description: t('linkedDataDescription')\n }\n ];\n\n return (\n <SimpleNavigation\n title={t('title')}\n items={navigation}\n currentPath={pathname}\n LinkComponent={HrefLink as any}\n {...(navigationMenu && { dropdownContent: navigationMenu })}\n isCollapsed={isCollapsed}\n icons={{\n chevronLeft: ChevronLeftIcon as React.ComponentType<{ className?: string }>,\n bars: Bars3Icon as React.ComponentType<{ className?: string }>\n }}\n collapseSidebarLabel={tSidebar('collapseSidebar')}\n expandSidebarLabel={tSidebar('expandSidebar')}\n />\n );\n}","import { useContext } from 'react';\nimport { Outlet } from 'react-router-dom';\nimport { useTranslation } from 'react-i18next';\nimport {\n LeftSidebar,\n Footer,\n useSemiont,\n useObservable,\n} from '@semiont/react-ui';\nimport { ModerationNavigation } from '@/components/moderation/ModerationNavigation';\nimport { CookiePreferences } from '@/components/CookiePreferences';\nimport { KeyboardShortcutsContext } from '@/contexts/KeyboardShortcutsContext';\nimport { Link, routes } from '@/lib/routing';\nimport { useRouter } from '@/i18n/routing';\n\nfunction ModerateLayoutBody() {\n const { t } = useTranslation();\n const keyboardContext = useContext(KeyboardShortcutsContext);\n const semiont = useSemiont();\n const session = useObservable(semiont.activeSession$);\n const user = useObservable(session?.user$);\n const activeKnowledgeBase = session?.kb ?? null;\n const router = useRouter();\n\n if (!activeKnowledgeBase) {\n router.push('/know');\n return null;\n }\n\n const isAuthenticated = !!user;\n const isAdmin = user?.isAdmin ?? false;\n const isModerator = user?.isModerator ?? false;\n\n return (\n <div className=\"min-h-screen bg-gray-50 dark:bg-gray-900 flex flex-col\">\n <div className=\"flex flex-1\">\n <LeftSidebar\n Link={Link}\n routes={routes}\n t={(key: string) => t(`Navigation.${key}`)}\n tHome={(key: string) => t(`Home.${key}`)}\n brandingLink=\"/\"\n collapsible={true}\n storageKey=\"moderation-sidebar-collapsed\"\n isAuthenticated={isAuthenticated}\n isAdmin={isAdmin}\n isModerator={isModerator}\n >\n {(isCollapsed, toggleCollapsed, navigationMenu) => (\n <ModerationNavigation\n isCollapsed={isCollapsed}\n toggleCollapsed={toggleCollapsed}\n navigationMenu={navigationMenu}\n />\n )}\n </LeftSidebar>\n <main className=\"flex-1 p-6 flex flex-col\">\n <div className=\"max-w-7xl mx-auto flex-1 flex flex-col w-full\">\n <Outlet />\n </div>\n </main>\n </div>\n <Footer\n Link={Link}\n routes={routes}\n t={(key: string, params?: Record<string, unknown>) => t(`Footer.${key}`, params as any) as string}\n CookiePreferences={CookiePreferences}\n {...(keyboardContext?.openKeyboardHelp && { onOpenKeyboardHelp: keyboardContext.openKeyboardHelp })}\n />\n </div>\n );\n}\n\nexport default function ModerateLayout() {\n // AuthShell is mounted by the parent ProtectedLayout in App.tsx so it\n // survives navigation between know/, admin/, and moderate/ sections.\n return <ModerateLayoutBody />;\n}\n"],"names":["BookOpenIcon","title","titleId","props","svgRef","React.createElement","ForwardRef","React.forwardRef","ClockIcon","TagIcon","HrefLink","href","_to","Link","ModerationNavigation","isCollapsed","toggleCollapsed","navigationMenu","_t","useTranslation","k","p","_tSidebar","tSidebar","pathname","usePathname","handleSidebarToggle","useCallback","useEventSubscriptions","navigation","ArrowsRightLeftIcon","jsx","SimpleNavigation","ChevronLeftIcon","Bars3Icon","ModerateLayoutBody","t","keyboardContext","useContext","KeyboardShortcutsContext","semiont","useSemiont","session","useObservable","user","activeKnowledgeBase","router","useRouter","isAuthenticated","isAdmin","isModerator","jsxs","LeftSidebar","routes","key","Outlet","Footer","params","CookiePreferences","ModerateLayout"],"mappings":"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","x_google_ignoreList":[0,1,2]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{k as v,j as r,Q as w,u as L,c as x,M as k,O as S}from"./index-
|
|
2
|
-
//# sourceMappingURL=layout-
|
|
1
|
+
import{k as v,j as r,Q as w,u as L,c as x,M as k,O as S}from"./index-QjYSiWWG.js";import{r as c,O as j}from"./vendor-DJo4KD8w.js";import{b as $,L as F,u as y}from"./routing-CxPkffyg.js";import{u as p}from"./i18n-BbpF47i1.js";import{F as R,C as A}from"./CookiePreferences-BizeRUGG.js";import{F as K}from"./ArrowsRightLeftIcon-BzLgl5o9.js";import{F as N}from"./CommandLineIcon-Ba4gpk8e.js";import{F as C,a as E}from"./ChevronLeftIcon-BLyRNZuL.js";import{K as H}from"./privacy-Rbj4Ycw9.js";import{r as b,L as h}from"./routing-CUnWbO2L.js";import"./XMarkIcon-KMKD47CF.js";function M({title:n,titleId:o,...s},a){return c.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:1.5,stroke:"currentColor","aria-hidden":"true","data-slot":"icon",ref:a,"aria-labelledby":o},s),n?c.createElement("title",{id:o},n):null,c.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M15 19.128a9.38 9.38 0 0 0 2.625.372 9.337 9.337 0 0 0 4.121-.952 4.125 4.125 0 0 0-7.533-2.493M15 19.128v-.003c0-1.113-.285-2.16-.786-3.07M15 19.128v.106A12.318 12.318 0 0 1 8.624 21c-2.331 0-4.512-.645-6.374-1.766l-.001-.109a6.375 6.375 0 0 1 11.964-3.07M12 6.375a3.375 3.375 0 1 1-6.75 0 3.375 3.375 0 0 1 6.75 0Zm8.25 2.25a2.625 2.625 0 1 1-5.25 0 2.625 2.625 0 0 1 5.25 0Z"}))}const O=c.forwardRef(M);function D({href:n,to:o,...s}){return r.jsx(F,{to:n??"",...s})}function B({isCollapsed:n,toggleCollapsed:o,navigationMenu:s}){const{t:a}=p(),e=(t,i)=>a(`Administration.${t}`,i),{t:d}=p(),l=(t,i)=>d(`Sidebar.${t}`,i),m=$(),f=c.useCallback(()=>{o()},[o]);v({"shell:sidebar-toggle":f});const u=[{name:e("users"),href:"/admin/users",icon:O,description:e("usersDescription")},{name:e("oauthSettings"),href:"/admin/security",icon:R,description:e("oauthSettingsDescription")},{name:e("exchange"),href:"/admin/exchange",icon:K,description:e("exchangeDescription")},{name:e("devops"),href:"/admin/devops",icon:N,description:e("devopsDescription")}];return r.jsx(w,{title:e("title"),items:u,currentPath:m,LinkComponent:D,...s&&{dropdownContent:s},isCollapsed:n,icons:{chevronLeft:E,bars:C},collapseSidebarLabel:l("collapseSidebar"),expandSidebarLabel:l("expandSidebar")})}function P(){const{t:n}=p(),o=c.useContext(H),s=L(),a=x(s.activeSession$),e=x(a==null?void 0:a.user$),d=(a==null?void 0:a.kb)??null,l=y();if(!d)return l.push("/know"),null;const m=!!e,f=(e==null?void 0:e.isAdmin)??!1,u=(e==null?void 0:e.isModerator)??!1;return r.jsxs("div",{className:"min-h-screen bg-gray-50 dark:bg-gray-900 flex flex-col",children:[r.jsxs("div",{className:"flex flex-1",children:[r.jsx(k,{Link:h,routes:b,t:t=>n(`Navigation.${t}`),tHome:t=>n(`Home.${t}`),brandingLink:"/",collapsible:!0,storageKey:"admin-sidebar-collapsed",isAuthenticated:m,isAdmin:f,isModerator:u,children:(t,i,g)=>r.jsx(B,{isCollapsed:t,toggleCollapsed:i,navigationMenu:g})}),r.jsx("main",{className:"flex-1 p-6 flex flex-col",children:r.jsx("div",{className:"max-w-7xl mx-auto flex-1 flex flex-col w-full",children:r.jsx(j,{})})})]}),r.jsx(S,{Link:h,routes:b,t:(t,i)=>n(`Footer.${t}`,i),CookiePreferences:A,...(o==null?void 0:o.openKeyboardHelp)&&{onOpenKeyboardHelp:o.openKeyboardHelp}})]})}function V(){return r.jsx(P,{})}export{V as default};
|
|
2
|
+
//# sourceMappingURL=layout-DVrTweI_.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout-BK6OF3Hx.js","sources":["../../../../node_modules/@heroicons/react/24/outline/esm/UsersIcon.js","../../src/components/admin/AdminNavigation.tsx","../../src/app/[locale]/admin/layout.tsx"],"sourcesContent":["import * as React from \"react\";\nfunction UsersIcon({\n title,\n titleId,\n ...props\n}, svgRef) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n strokeWidth: 1.5,\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"M15 19.128a9.38 9.38 0 0 0 2.625.372 9.337 9.337 0 0 0 4.121-.952 4.125 4.125 0 0 0-7.533-2.493M15 19.128v-.003c0-1.113-.285-2.16-.786-3.07M15 19.128v.106A12.318 12.318 0 0 1 8.624 21c-2.331 0-4.512-.645-6.374-1.766l-.001-.109a6.375 6.375 0 0 1 11.964-3.07M12 6.375a3.375 3.375 0 1 1-6.75 0 3.375 3.375 0 0 1 6.75 0Zm8.25 2.25a2.625 2.625 0 1 1-5.25 0 2.625 2.625 0 0 1 5.25 0Z\"\n }));\n}\nconst ForwardRef = /*#__PURE__*/ React.forwardRef(UsersIcon);\nexport default ForwardRef;","import React, { useCallback } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Link } from '@/i18n/routing';\nimport { usePathname } from '@/i18n/routing';\nimport { SimpleNavigation, useEventSubscriptions } from '@semiont/react-ui';\nimport type { SimpleNavigationItem } from '@semiont/react-ui';\nimport {\n UsersIcon,\n ShieldCheckIcon,\n CommandLineIcon,\n ArrowsRightLeftIcon,\n ChevronLeftIcon,\n Bars3Icon\n} from '@heroicons/react/24/outline';\n\ninterface AdminNavigationProps {\n isCollapsed: boolean;\n toggleCollapsed: () => void;\n navigationMenu?: (onClose: () => void) => React.ReactNode;\n}\n\n// Adapter: SimpleNavigation passes href, but our Link uses `to`\nfunction HrefLink({ href, to: _to, ...props }: React.ComponentProps<typeof Link> & { href?: string }) {\n return <Link to={(href ?? '') as string} {...props} />;\n}\n\nexport function AdminNavigation({ isCollapsed, toggleCollapsed, navigationMenu }: AdminNavigationProps) {\n const { t: _t } = useTranslation();\n const t = (k: string, p?: Record<string, unknown>) => _t(`Administration.${k}`, p as any) as string;\n const { t: _tSidebar } = useTranslation();\n const tSidebar = (k: string, p?: Record<string, unknown>) => _tSidebar(`Sidebar.${k}`, p as any) as string;\n const pathname = usePathname();\n\n // Handle sidebar toggle events\n const handleSidebarToggle = useCallback(() => {\n toggleCollapsed();\n }, [toggleCollapsed]);\n\n // Subscribe to sidebar toggle events\n useEventSubscriptions({\n 'shell:sidebar-toggle': handleSidebarToggle,\n });\n\n const navigation: SimpleNavigationItem[] = [\n {\n name: t('users'),\n href: '/admin/users',\n icon: UsersIcon,\n description: t('usersDescription')\n },\n {\n name: t('oauthSettings'),\n href: '/admin/security',\n icon: ShieldCheckIcon,\n description: t('oauthSettingsDescription')\n },\n {\n name: t('exchange'),\n href: '/admin/exchange',\n icon: ArrowsRightLeftIcon,\n description: t('exchangeDescription')\n },\n {\n name: t('devops'),\n href: '/admin/devops',\n icon: CommandLineIcon,\n description: t('devopsDescription')\n },\n ];\n\n return (\n <SimpleNavigation\n title={t('title')}\n items={navigation}\n currentPath={pathname}\n LinkComponent={HrefLink as any}\n {...(navigationMenu && { dropdownContent: navigationMenu })}\n isCollapsed={isCollapsed}\n icons={{\n chevronLeft: ChevronLeftIcon as React.ComponentType<{ className?: string }>,\n bars: Bars3Icon as React.ComponentType<{ className?: string }>\n }}\n collapseSidebarLabel={tSidebar('collapseSidebar')}\n expandSidebarLabel={tSidebar('expandSidebar')}\n />\n );\n}","import { useContext } from 'react';\nimport { Outlet } from 'react-router-dom';\nimport { useTranslation } from 'react-i18next';\nimport { AdminNavigation } from '@/components/admin/AdminNavigation';\nimport {\n LeftSidebar,\n Footer,\n useSemiont,\n useObservable,\n} from '@semiont/react-ui';\nimport { CookiePreferences } from '@/components/CookiePreferences';\nimport { KeyboardShortcutsContext } from '@/contexts/KeyboardShortcutsContext';\nimport { Link, routes } from '@/lib/routing';\nimport { useRouter } from '@/i18n/routing';\n\nfunction AdminLayoutBody() {\n const { t } = useTranslation();\n const keyboardContext = useContext(KeyboardShortcutsContext);\n const semiont = useSemiont();\n const session = useObservable(semiont.activeSession$);\n const user = useObservable(session?.user$);\n const activeKnowledgeBase = session?.kb ?? null;\n const router = useRouter();\n\n if (!activeKnowledgeBase) {\n router.push('/know');\n return null;\n }\n\n const isAuthenticated = !!user;\n const isAdmin = user?.isAdmin ?? false;\n const isModerator = user?.isModerator ?? false;\n\n return (\n <div className=\"min-h-screen bg-gray-50 dark:bg-gray-900 flex flex-col\">\n <div className=\"flex flex-1\">\n <LeftSidebar\n Link={Link}\n routes={routes}\n t={(key: string) => t(`Navigation.${key}`)}\n tHome={(key: string) => t(`Home.${key}`)}\n brandingLink=\"/\"\n collapsible={true}\n storageKey=\"admin-sidebar-collapsed\"\n isAuthenticated={isAuthenticated}\n isAdmin={isAdmin}\n isModerator={isModerator}\n >\n {(isCollapsed, toggleCollapsed, navigationMenu) => (\n <AdminNavigation\n isCollapsed={isCollapsed}\n toggleCollapsed={toggleCollapsed}\n navigationMenu={navigationMenu}\n />\n )}\n </LeftSidebar>\n <main className=\"flex-1 p-6 flex flex-col\">\n <div className=\"max-w-7xl mx-auto flex-1 flex flex-col w-full\">\n <Outlet />\n </div>\n </main>\n </div>\n <Footer\n Link={Link}\n routes={routes}\n t={(key: string, params?: Record<string, unknown>) => t(`Footer.${key}`, params as any) as string}\n CookiePreferences={CookiePreferences}\n {...(keyboardContext?.openKeyboardHelp && { onOpenKeyboardHelp: keyboardContext.openKeyboardHelp })}\n />\n </div>\n );\n}\n\nexport default function AdminLayout() {\n // AuthShell is mounted by the parent ProtectedLayout in App.tsx so it\n // survives navigation between know/, admin/, and moderate/ sections.\n return <AdminLayoutBody />;\n}\n"],"names":["UsersIcon","title","titleId","props","svgRef","React.createElement","ForwardRef","React.forwardRef","HrefLink","href","_to","Link","AdminNavigation","isCollapsed","toggleCollapsed","navigationMenu","_t","useTranslation","t","k","p","_tSidebar","tSidebar","pathname","usePathname","handleSidebarToggle","useCallback","useEventSubscriptions","navigation","ShieldCheckIcon","ArrowsRightLeftIcon","CommandLineIcon","jsx","SimpleNavigation","ChevronLeftIcon","Bars3Icon","AdminLayoutBody","keyboardContext","useContext","KeyboardShortcutsContext","semiont","useSemiont","session","useObservable","user","activeKnowledgeBase","router","useRouter","isAuthenticated","isAdmin","isModerator","jsxs","LeftSidebar","routes","key","Outlet","Footer","params","CookiePreferences","AdminLayout"],"mappings":"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","x_google_ignoreList":[0]}
|
|
1
|
+
{"version":3,"file":"layout-DVrTweI_.js","sources":["../../../../node_modules/@heroicons/react/24/outline/esm/UsersIcon.js","../../src/components/admin/AdminNavigation.tsx","../../src/app/[locale]/admin/layout.tsx"],"sourcesContent":["import * as React from \"react\";\nfunction UsersIcon({\n title,\n titleId,\n ...props\n}, svgRef) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n strokeWidth: 1.5,\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"M15 19.128a9.38 9.38 0 0 0 2.625.372 9.337 9.337 0 0 0 4.121-.952 4.125 4.125 0 0 0-7.533-2.493M15 19.128v-.003c0-1.113-.285-2.16-.786-3.07M15 19.128v.106A12.318 12.318 0 0 1 8.624 21c-2.331 0-4.512-.645-6.374-1.766l-.001-.109a6.375 6.375 0 0 1 11.964-3.07M12 6.375a3.375 3.375 0 1 1-6.75 0 3.375 3.375 0 0 1 6.75 0Zm8.25 2.25a2.625 2.625 0 1 1-5.25 0 2.625 2.625 0 0 1 5.25 0Z\"\n }));\n}\nconst ForwardRef = /*#__PURE__*/ React.forwardRef(UsersIcon);\nexport default ForwardRef;","import React, { useCallback } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Link } from '@/i18n/routing';\nimport { usePathname } from '@/i18n/routing';\nimport { SimpleNavigation, useEventSubscriptions } from '@semiont/react-ui';\nimport type { SimpleNavigationItem } from '@semiont/react-ui';\nimport {\n UsersIcon,\n ShieldCheckIcon,\n CommandLineIcon,\n ArrowsRightLeftIcon,\n ChevronLeftIcon,\n Bars3Icon\n} from '@heroicons/react/24/outline';\n\ninterface AdminNavigationProps {\n isCollapsed: boolean;\n toggleCollapsed: () => void;\n navigationMenu?: (onClose: () => void) => React.ReactNode;\n}\n\n// Adapter: SimpleNavigation passes href, but our Link uses `to`\nfunction HrefLink({ href, to: _to, ...props }: React.ComponentProps<typeof Link> & { href?: string }) {\n return <Link to={(href ?? '') as string} {...props} />;\n}\n\nexport function AdminNavigation({ isCollapsed, toggleCollapsed, navigationMenu }: AdminNavigationProps) {\n const { t: _t } = useTranslation();\n const t = (k: string, p?: Record<string, unknown>) => _t(`Administration.${k}`, p as any) as string;\n const { t: _tSidebar } = useTranslation();\n const tSidebar = (k: string, p?: Record<string, unknown>) => _tSidebar(`Sidebar.${k}`, p as any) as string;\n const pathname = usePathname();\n\n // Handle sidebar toggle events\n const handleSidebarToggle = useCallback(() => {\n toggleCollapsed();\n }, [toggleCollapsed]);\n\n // Subscribe to sidebar toggle events\n useEventSubscriptions({\n 'shell:sidebar-toggle': handleSidebarToggle,\n });\n\n const navigation: SimpleNavigationItem[] = [\n {\n name: t('users'),\n href: '/admin/users',\n icon: UsersIcon,\n description: t('usersDescription')\n },\n {\n name: t('oauthSettings'),\n href: '/admin/security',\n icon: ShieldCheckIcon,\n description: t('oauthSettingsDescription')\n },\n {\n name: t('exchange'),\n href: '/admin/exchange',\n icon: ArrowsRightLeftIcon,\n description: t('exchangeDescription')\n },\n {\n name: t('devops'),\n href: '/admin/devops',\n icon: CommandLineIcon,\n description: t('devopsDescription')\n },\n ];\n\n return (\n <SimpleNavigation\n title={t('title')}\n items={navigation}\n currentPath={pathname}\n LinkComponent={HrefLink as any}\n {...(navigationMenu && { dropdownContent: navigationMenu })}\n isCollapsed={isCollapsed}\n icons={{\n chevronLeft: ChevronLeftIcon as React.ComponentType<{ className?: string }>,\n bars: Bars3Icon as React.ComponentType<{ className?: string }>\n }}\n collapseSidebarLabel={tSidebar('collapseSidebar')}\n expandSidebarLabel={tSidebar('expandSidebar')}\n />\n );\n}","import { useContext } from 'react';\nimport { Outlet } from 'react-router-dom';\nimport { useTranslation } from 'react-i18next';\nimport { AdminNavigation } from '@/components/admin/AdminNavigation';\nimport {\n LeftSidebar,\n Footer,\n useSemiont,\n useObservable,\n} from '@semiont/react-ui';\nimport { CookiePreferences } from '@/components/CookiePreferences';\nimport { KeyboardShortcutsContext } from '@/contexts/KeyboardShortcutsContext';\nimport { Link, routes } from '@/lib/routing';\nimport { useRouter } from '@/i18n/routing';\n\nfunction AdminLayoutBody() {\n const { t } = useTranslation();\n const keyboardContext = useContext(KeyboardShortcutsContext);\n const semiont = useSemiont();\n const session = useObservable(semiont.activeSession$);\n const user = useObservable(session?.user$);\n const activeKnowledgeBase = session?.kb ?? null;\n const router = useRouter();\n\n if (!activeKnowledgeBase) {\n router.push('/know');\n return null;\n }\n\n const isAuthenticated = !!user;\n const isAdmin = user?.isAdmin ?? false;\n const isModerator = user?.isModerator ?? false;\n\n return (\n <div className=\"min-h-screen bg-gray-50 dark:bg-gray-900 flex flex-col\">\n <div className=\"flex flex-1\">\n <LeftSidebar\n Link={Link}\n routes={routes}\n t={(key: string) => t(`Navigation.${key}`)}\n tHome={(key: string) => t(`Home.${key}`)}\n brandingLink=\"/\"\n collapsible={true}\n storageKey=\"admin-sidebar-collapsed\"\n isAuthenticated={isAuthenticated}\n isAdmin={isAdmin}\n isModerator={isModerator}\n >\n {(isCollapsed, toggleCollapsed, navigationMenu) => (\n <AdminNavigation\n isCollapsed={isCollapsed}\n toggleCollapsed={toggleCollapsed}\n navigationMenu={navigationMenu}\n />\n )}\n </LeftSidebar>\n <main className=\"flex-1 p-6 flex flex-col\">\n <div className=\"max-w-7xl mx-auto flex-1 flex flex-col w-full\">\n <Outlet />\n </div>\n </main>\n </div>\n <Footer\n Link={Link}\n routes={routes}\n t={(key: string, params?: Record<string, unknown>) => t(`Footer.${key}`, params as any) as string}\n CookiePreferences={CookiePreferences}\n {...(keyboardContext?.openKeyboardHelp && { onOpenKeyboardHelp: keyboardContext.openKeyboardHelp })}\n />\n </div>\n );\n}\n\nexport default function AdminLayout() {\n // AuthShell is mounted by the parent ProtectedLayout in App.tsx so it\n // survives navigation between know/, admin/, and moderate/ sections.\n return <AdminLayoutBody />;\n}\n"],"names":["UsersIcon","title","titleId","props","svgRef","React.createElement","ForwardRef","React.forwardRef","HrefLink","href","_to","Link","AdminNavigation","isCollapsed","toggleCollapsed","navigationMenu","_t","useTranslation","t","k","p","_tSidebar","tSidebar","pathname","usePathname","handleSidebarToggle","useCallback","useEventSubscriptions","navigation","ShieldCheckIcon","ArrowsRightLeftIcon","CommandLineIcon","jsx","SimpleNavigation","ChevronLeftIcon","Bars3Icon","AdminLayoutBody","keyboardContext","useContext","KeyboardShortcutsContext","semiont","useSemiont","session","useObservable","user","activeKnowledgeBase","router","useRouter","isAuthenticated","isAdmin","isModerator","jsxs","LeftSidebar","routes","key","Outlet","Footer","params","CookiePreferences","AdminLayout"],"mappings":"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","x_google_ignoreList":[0]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var a={annotations:"Anotasi",history:"Sejarah",resourceInfo:"Maklumat Sumber",collaboration:"Kolaborasi",userAccount:"Akaun Pengguna",settings:"Tetapan",knowledgeBase:"Pangkalan Pengetahuan"},e={title:"Maklumat Sumber",locale:"Lokasi",notSpecified:"Tidak dinyatakan",entityTypeTags:"Tag Jenis Entiti",representation:"Perwakilan",mediaType:"Jenis Media",byteSize:"Saiz",clone:"Klon",cloneDescription:"Jana pautan klon yang boleh dikongsi untuk sumber ini",archive:"Arkib",archiveDescription:"Alihkan sumber ini ke status diarkibkan",unarchive:"Nyaharkib",unarchiveDescription:"Pulihkan sumber ini ke status aktif",provenance:"Asal-usul",createdAt:"Dicipta",modifiedAt:"Diubah suai",creationMethod:"Cara penciptaan",attributedTo:"Dikaitkan dengan",derivedFrom:"Diperoleh daripada",generatedBy:"Dijana oleh",storageUri:"Storan"},n={title:"Kolaborasi",connectionStatus:"Status Sambungan",live:"Langsung",disconnected:"Terputus",events:"{{count}} peristiwa",lastSync:"Penyegerakan terakhir:",noActivity:"Tiada aktiviti lagi",justNow:"Baru sahaja",secondsAgo:"{{count}} saat yang lalu",minuteAgo:"1 minit yang lalu",minutesAgo:"{{count}} minit yang lalu",hourAgo:"1 jam yang lalu",hoursAgo:"{{count}} jam yang lalu",realtimeActive:"Kemas kini masa nyata sedang aktif",reconnecting:"Menyambung semula ke pelayan...",sharing:"Perkongsian",collaborationComingSoon:"Ciri kolaborasi akan datang tidak lama lagi"},i={history:"Sejarah",loading:"Memuatkan...",user:"Pengguna",method:"Kaedah",viewOriginal:"Lihat asal",viewAnnotation:"Lihat anotasi: {{content}}",resourceCreated:"Sumber Dicipta",resourceCloned:"Diklon",resourceArchived:"Diarkibkan",resourceUnarchived:"Dinyaharkibkan",highlightAdded:"Sorotan Ditambah",highlightRemoved:"Sorotan Dibuang",referenceCreated:"Rujukan Dicipta",referenceResolved:"Rujukan Diselesaikan",referenceDeleted:"Rujukan Dipadam",entitytagAdded:"Tag Ditambah",entitytagRemoved:"Tag Dibuang",assessmentAdded:"Penilaian Ditambah",assessmentRemoved:"Penilaian Dibuang",annotationAdded:"Anotasi Ditambah",annotationRemoved:"Anotasi Dibuang",annotationBodyUpdated:"Anotasi Dikemas Kini",jobEvent:"Peristiwa Tugas",justNow:"baru sahaja",minutesAgo:"{{count}}m lalu",hoursAgo:"{{count}}j lalu",daysAgo:"{{count}}h lalu"},t={title:"Ulasan",noComments:"Tiada ulasan lagi. Pilih teks dan klik Ulasan untuk menambah satu.",commentPlaceholder:"Taip ulasan anda di sini...",save:"Simpan",cancel:"Batal",edit:"Sunting",annotateComments:"Anotasi Ulasan",instructions:"Arahan",optional:"(pilihan)",instructionsPlaceholder:"cth., Fokus pada istilah teknikal...",annotate:"Anotasi",annotating:"Menganotasi...",toneLabel:"Nada",toneOptional:"(pilihan)",toneScholarly:"Ilmiah",toneExplanatory:"Penjelasan",toneConversational:"Perbualan",toneTechnical:"Teknikal",densityLabel:"Ketumpatan",densitySparse:"Jarang",densityDense:"Padat",fragmentSelected:"Fragmen dipilih",imageRegionSelected:"Kawasan imej dipilih",closeProgress:"Tutup"},s={title:"Sorotan",noHighlights:"Tiada sorotan lagi. Gunakan anotasi AI untuk mencari petikan penting.",annotateHighlights:"Anotasi Sorotan",instructions:"Arahan",optional:"(pilihan)",instructionsPlaceholder:"cth., Fokus pada konsep teknikal utama...",annotate:"Anotasi",annotating:"Menganotasi...",cancel:"Batal",densityLabel:"Ketumpatan",densitySparse:"Jarang",densityDense:"Padat",closeProgress:"Tutup"},l={title:"Penilaian",noAssessments:"Tiada penilaian lagi. Gunakan anotasi AI untuk menilai petikan.",assessmentPlaceholder:"Taip penilaian anda di sini...",save:"Simpan",cancel:"Batal",annotateAssessments:"Anotasi Penilaian",instructions:"Arahan",optional:"(pilihan)",instructionsPlaceholder:"cth., Nilai dakwaan untuk ketepatan dan bukti...",annotate:"Anotasi",annotating:"Menganotasi...",toneLabel:"Nada",toneOptional:"(pilihan)",toneAnalytical:"Analitikal",toneCritical:"Kritikal",toneBalanced:"Seimbang",toneConstructive:"Konstruktif",densityLabel:"Ketumpatan",densitySparse:"Jarang",densityDense:"Padat",fragmentSelected:"Fragmen dipilih",imageRegionSelected:"Kawasan imej dipilih",closeProgress:"Tutup"},o={title:"Tag",noTags:"Tiada tag lagi. Gunakan anotasi AI untuk mengenal pasti peranan struktur.",noSchemas:"Tiada skema tag didaftarkan untuk pangkalan pengetahuan ini. Pentadbir KB mesti mendaftarkan sekurang-kurangnya satu skema analisis struktur (cth. melalui kemahiran `register-tag-schemas`) sebelum penandaan boleh digunakan.",annotateTags:"Anotasi Tag",selectSchema:"Pilih Rangka Kerja",selectCategories:"Pilih Kategori",annotate:"Anotasi",annotating:"Menganotasi...",cancel:"Batal",selectAll:"Pilih Semua",deselectAll:"Nyahpilih Semua",categoriesSelected:"{count, plural, =0 {Tiada kategori dipilih} =1 {1 kategori dipilih} other {# kategori dipilih}}",createTagForSelection:"Cipta Tag untuk Pilihan",selectCategory:"Pilih Kategori",chooseCategory:"Pilih kategori...",fragmentSelected:"Fragmen dipilih",imageRegionSelected:"Kawasan imej dipilih"},r={title:"Anotasi",statistics:"Statistik",highlight:"Sorotan",reference:"Rujukan",assessment:"Penilaian",comment:"Ulasan",tag:"Tag"},u={title:"Statistik",highlights:"Sorotan",comments:"Ulasan",assessments:"Penilaian",tags:"Tag",references:"Rujukan",stub:"Stub",resolved:"Diselesaikan",entityTypes:"Jenis Entiti"},k={title:"Rujukan",noReferences:"Tiada rujukan lagi. Pilih teks untuk mencipta rujukan ke sumber lain.",outgoingReferences:"Rujukan Keluar",incomingReferences:"Rujukan Masuk",noIncomingReferences:"Tiada rujukan masuk",stub:"Rujukan stub (tidak dipautkan)",resolved:"Rujukan diselesaikan (dipautkan)",open:"Buka",unlink:"Nyahpaut",resolve:"Selesaikan rujukan",cancel:"Batal",createReference:"Cipta Rujukan",entityTypesOptional:"Jenis Entiti (Pilihan)",fragmentSelected:"Fragmen dipilih",imageRegionSelected:"Kawasan imej dipilih",annotateReferences:"Anotasi Rujukan",selectEntityTypes:"Jenis entiti:",select:"Pilih",deselect:"Nyahpilih",noEntityTypes:"Tiada jenis entiti tersedia",typesSelected:"{count, plural, =1 {1 jenis dipilih} other {# jenis dipilih}}",annotate:"Anotasi",annotating:"Menganotasi...",includeDescriptiveReferences:"Sertakan rujukan deskriptif",descriptiveReferencesTooltip:"Cari juga frasa seperti 'CEO tersebut', 'gergasi teknologi tersebut', 'ahli fizik tersebut' (selain nama)",annotationProgressTitle:"Menganotasi Rujukan Entiti",cancelAnnotation:"Batalkan anotasi",found:"{{count}} ditemui",complete:"Anotasi selesai!",failed:"Anotasi gagal",current:"Semasa: {{entityType}}",closeProgress:"Tutup",loading:"memuatkan...",loadingEllipsis:"Memuatkan...",untitledResource:"Sumber Tanpa Tajuk",noText:"Tiada teks"},g={title:"Pintasan Papan Kekunci",closeDialog:"Tutup dialog",or:"atau",navigationTitle:"Navigasi",navOpenSearch:"Buka carian global",navOpenSearchAlt:"Buka carian global (alternatif)",navCreateResource:"Cipta sumber baharu",navCloseOverlays:"Tutup semua tindanan (tekan dua kali)",navShowHelp:"Tunjukkan bantuan pintasan papan kekunci",sidebarTitle:"Bar Sisi Pengetahuan",sidebarCollapse:"Kecilkan bar sisi",sidebarExpand:"Kembangkan bar sisi",sidebarPickup:"Angkat tab sumber (apabila difokuskan)",sidebarMove:"Alihkan tab sumber (apabila menyeret)",sidebarDrop:"Lepaskan tab sumber (apabila menyeret)",sidebarCancel:"Batalkan operasi seret",annotationsTitle:"Anotasi Sumber",annotHighlight:"Cipta sorotan daripada anotasi (terus)",annotReference:"Buka tetingkap timbul rujukan untuk anotasi",annotDelete:"Padam anotasi yang difokuskan",annotNavigate:"Navigasi melalui anotasi",annotNavigateBack:"Navigasi anotasi ke belakang",listsTitle:"Senarai & Grid",listsFilterNav:"Navigasi penapis jenis entiti",listsGridNav:"Navigasi grid sumber",listsJumpFirst:"Lompat ke item pertama",listsJumpLast:"Lompat ke item terakhir",searchModalTitle:"Dalam Modal Carian",searchNav:"Navigasi hasil carian",searchSelect:"Pilih hasil",searchClose:"Tutup carian",modalTitle:"Kawalan Modal",modalClose:"Tutup modal aktif",modalNavForward:"Navigasi ke hadapan melalui butang",modalNavBackward:"Navigasi ke belakang melalui butang",modalActivate:"Aktifkan butang yang difokuskan",accessibilityTitle:"Kebolehcapaian",a11ySkipLinks:"Navigasi ke pautan langkau (apabila di permulaan halaman)",a11yFollowLink:"Ikuti pautan langkau",macNote:"Menggunakan pintasan papan kekunci Mac. ⌘ ialah kekunci Command.",windowsNote:"Menggunakan pintasan papan kekunci Windows/Linux. Ctrl ialah kekunci Control.",footerHint:"Tekan {{key}} pada bila-bila masa untuk menunjukkan bantuan ini",close:"Tutup"},d={modeGroup:"Mod",browse:"Layari",annotate:"Anotasi",selectionGroup:"Motivasi",clickGroup:"Klik",shapeGroup:"Bentuk",none:"Tiada",linking:"Rujukan",highlighting:"Sorotan",assessing:"Nilai",commenting:"Ulasan",tagging:"Tag",detail:"Perincian",follow:"Ikuti",deleting:"Padam",jsonld:"JSON-LD",rectangle:"Segi Empat Tepat",circle:"Bulatan",polygon:"Poligon"},m={title:"Navigasi",collapseSidebar:"Kecilkan bar sisi",expandSidebar:"Kembangkan bar sisi",dragToReorder:"Seret untuk menyusun semula",dragToReorderDoc:"Seret untuk menyusun semula {{name}}",closeResource:"Tutup sumber",dragInstructions:"Untuk menyusun semula sumber: Gunakan Tab untuk navigasi ke sumber. Tekan Alt+Anak panah atas untuk bergerak ke atas atau Alt+Anak panah bawah untuk bergerak ke bawah. Untuk seret dan lepas: Tekan bar ruang untuk mengangkat item. Gunakan kekunci anak panah untuk mengalihkannya. Tekan bar ruang sekali lagi untuk melepaskan."},c={deleteConfirmationTitle:"Padam Anotasi",deleteConfirmationMessage:"Adakah anda pasti mahu memadam anotasi ini? Tindakan ini tidak boleh dibatalkan.",deleteConfirmationCancel:"Batal",deleteConfirmationDelete:"Padam"},h={title:"Tetapan",lineNumbers:"Nombor Baris",lineNumbersVisible:"Kelihatan",lineNumbersHidden:"Tersembunyi",theme:"Tema",themeLight:"Cerah",themeDark:"Gelap",themeSystem:"Sistem",themeSystemActive:"Sistem ({{mode}})",themeModeActive:"Menggunakan mod {{mode}}",language:"Bahasa",languageHint:"Tukar bahasa dalam navigasi utama",languageChanging:"Menukar bahasa...",hoverDelay:"Kelewatan Terapung",hoverDelayFast:"Pantas",hoverDelaySlow:"Perlahan",hoverDelayDescription:"Kelewatan {{delay}}ms sebelum kesan terapung muncul"},p={},b={gatherTitle:"Konteks Dikumpul",configureGenerationTitle:"Konfigurasi Penjanaan",configureSearchTitle:"Konfigurasi carian",searchResultsTitle:"Hasil carian",sourceContextLabel:"Konteks anotasi dalam sumber",connectionsLabel:"Anotasi rakan sebaya",citedByLabel:"Sumber dipetik oleh",userHintLabel:"Petunjuk",userHintPlaceholder:"Terangkan apa yang dirujuk oleh anotasi ini...",loadingContext:"Mengumpul konteks...",failedContext:"Gagal mengumpul konteks",cancel:"Batal",generate:"Jana",compose:"Karang",resolutionStrategyLabel:"Strategi resolusi",back:"Kembali",link:"Pautan",score:"Skor",noResults:"Tiada hasil ditemui",resourceTitle:"Tajuk Sumber",resourceTitlePlaceholder:"Masukkan tajuk sumber...",additionalInstructions:"Arahan Tambahan",additionalInstructionsPlaceholder:"Masukkan arahan tambahan...",language:"Bahasa",languageHelp:"Bahasa untuk kandungan yang dijana",creativity:"Kreativiti",creativityFocused:"Tertumpu",creativityCreative:"Kreatif",maxLength:"Panjang Maksimum",maxLengthHelp:"Bilangan maksimum token",maxResults:"Hasil Maksimum",semanticScoring:"Pemarkahan Semantik",semanticScoringHelp:"Gunakan AI untuk menilai hasil mengikut kerelevanan semantik",searching:"Mencari...",search:"Cari"},T={embeddingComputed:"Embedding dikira"},v={Toolbar:a,ResourceInfoPanel:e,CollaborationPanel:n,AnnotationHistory:i,CommentsPanel:t,HighlightPanel:s,AssessmentPanel:l,TaggingPanel:o,UnifiedAnnotationsPanel:r,StatisticsPanel:u,ReferencesPanel:k,KeyboardShortcuts:g,AnnotateToolbar:d,CollapsibleResourceNavigation:m,ResourceViewer:c,Settings:h,AnnotateView:p,ReferenceWizard:b,History:T};export{d as AnnotateToolbar,p as AnnotateView,i as AnnotationHistory,l as AssessmentPanel,n as CollaborationPanel,m as CollapsibleResourceNavigation,t as CommentsPanel,s as HighlightPanel,T as History,g as KeyboardShortcuts,b as ReferenceWizard,k as ReferencesPanel,e as ResourceInfoPanel,c as ResourceViewer,h as Settings,u as StatisticsPanel,o as TaggingPanel,a as Toolbar,r as UnifiedAnnotationsPanel,v as default};
|
|
2
|
+
//# sourceMappingURL=ms-UPQWWIL4-DEDFniGv.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ms-UPQWWIL4-DEDFniGv.js","sources":["../../../../packages/react-ui/dist/ms-UPQWWIL4.mjs"],"sourcesContent":["'use client';\nimport \"./chunk-D4GAAQMM.mjs\";\n\n// translations/ms.json\nvar Toolbar = {\n annotations: \"Anotasi\",\n history: \"Sejarah\",\n resourceInfo: \"Maklumat Sumber\",\n collaboration: \"Kolaborasi\",\n userAccount: \"Akaun Pengguna\",\n settings: \"Tetapan\",\n knowledgeBase: \"Pangkalan Pengetahuan\"\n};\nvar ResourceInfoPanel = {\n title: \"Maklumat Sumber\",\n locale: \"Lokasi\",\n notSpecified: \"Tidak dinyatakan\",\n entityTypeTags: \"Tag Jenis Entiti\",\n representation: \"Perwakilan\",\n mediaType: \"Jenis Media\",\n byteSize: \"Saiz\",\n clone: \"Klon\",\n cloneDescription: \"Jana pautan klon yang boleh dikongsi untuk sumber ini\",\n archive: \"Arkib\",\n archiveDescription: \"Alihkan sumber ini ke status diarkibkan\",\n unarchive: \"Nyaharkib\",\n unarchiveDescription: \"Pulihkan sumber ini ke status aktif\",\n provenance: \"Asal-usul\",\n createdAt: \"Dicipta\",\n modifiedAt: \"Diubah suai\",\n creationMethod: \"Cara penciptaan\",\n attributedTo: \"Dikaitkan dengan\",\n derivedFrom: \"Diperoleh daripada\",\n generatedBy: \"Dijana oleh\",\n storageUri: \"Storan\"\n};\nvar CollaborationPanel = {\n title: \"Kolaborasi\",\n connectionStatus: \"Status Sambungan\",\n live: \"Langsung\",\n disconnected: \"Terputus\",\n events: \"{{count}} peristiwa\",\n lastSync: \"Penyegerakan terakhir:\",\n noActivity: \"Tiada aktiviti lagi\",\n justNow: \"Baru sahaja\",\n secondsAgo: \"{{count}} saat yang lalu\",\n minuteAgo: \"1 minit yang lalu\",\n minutesAgo: \"{{count}} minit yang lalu\",\n hourAgo: \"1 jam yang lalu\",\n hoursAgo: \"{{count}} jam yang lalu\",\n realtimeActive: \"Kemas kini masa nyata sedang aktif\",\n reconnecting: \"Menyambung semula ke pelayan...\",\n sharing: \"Perkongsian\",\n collaborationComingSoon: \"Ciri kolaborasi akan datang tidak lama lagi\"\n};\nvar AnnotationHistory = {\n history: \"Sejarah\",\n loading: \"Memuatkan...\",\n user: \"Pengguna\",\n method: \"Kaedah\",\n viewOriginal: \"Lihat asal\",\n viewAnnotation: \"Lihat anotasi: {{content}}\",\n resourceCreated: \"Sumber Dicipta\",\n resourceCloned: \"Diklon\",\n resourceArchived: \"Diarkibkan\",\n resourceUnarchived: \"Dinyaharkibkan\",\n highlightAdded: \"Sorotan Ditambah\",\n highlightRemoved: \"Sorotan Dibuang\",\n referenceCreated: \"Rujukan Dicipta\",\n referenceResolved: \"Rujukan Diselesaikan\",\n referenceDeleted: \"Rujukan Dipadam\",\n entitytagAdded: \"Tag Ditambah\",\n entitytagRemoved: \"Tag Dibuang\",\n assessmentAdded: \"Penilaian Ditambah\",\n assessmentRemoved: \"Penilaian Dibuang\",\n annotationAdded: \"Anotasi Ditambah\",\n annotationRemoved: \"Anotasi Dibuang\",\n annotationBodyUpdated: \"Anotasi Dikemas Kini\",\n jobEvent: \"Peristiwa Tugas\",\n justNow: \"baru sahaja\",\n minutesAgo: \"{{count}}m lalu\",\n hoursAgo: \"{{count}}j lalu\",\n daysAgo: \"{{count}}h lalu\"\n};\nvar CommentsPanel = {\n title: \"Ulasan\",\n noComments: \"Tiada ulasan lagi. Pilih teks dan klik Ulasan untuk menambah satu.\",\n commentPlaceholder: \"Taip ulasan anda di sini...\",\n save: \"Simpan\",\n cancel: \"Batal\",\n edit: \"Sunting\",\n annotateComments: \"Anotasi Ulasan\",\n instructions: \"Arahan\",\n optional: \"(pilihan)\",\n instructionsPlaceholder: \"cth., Fokus pada istilah teknikal...\",\n annotate: \"Anotasi\",\n annotating: \"Menganotasi...\",\n toneLabel: \"Nada\",\n toneOptional: \"(pilihan)\",\n toneScholarly: \"Ilmiah\",\n toneExplanatory: \"Penjelasan\",\n toneConversational: \"Perbualan\",\n toneTechnical: \"Teknikal\",\n densityLabel: \"Ketumpatan\",\n densitySparse: \"Jarang\",\n densityDense: \"Padat\",\n fragmentSelected: \"Fragmen dipilih\",\n imageRegionSelected: \"Kawasan imej dipilih\",\n closeProgress: \"Tutup\"\n};\nvar HighlightPanel = {\n title: \"Sorotan\",\n noHighlights: \"Tiada sorotan lagi. Gunakan anotasi AI untuk mencari petikan penting.\",\n annotateHighlights: \"Anotasi Sorotan\",\n instructions: \"Arahan\",\n optional: \"(pilihan)\",\n instructionsPlaceholder: \"cth., Fokus pada konsep teknikal utama...\",\n annotate: \"Anotasi\",\n annotating: \"Menganotasi...\",\n cancel: \"Batal\",\n densityLabel: \"Ketumpatan\",\n densitySparse: \"Jarang\",\n densityDense: \"Padat\",\n closeProgress: \"Tutup\"\n};\nvar AssessmentPanel = {\n title: \"Penilaian\",\n noAssessments: \"Tiada penilaian lagi. Gunakan anotasi AI untuk menilai petikan.\",\n assessmentPlaceholder: \"Taip penilaian anda di sini...\",\n save: \"Simpan\",\n cancel: \"Batal\",\n annotateAssessments: \"Anotasi Penilaian\",\n instructions: \"Arahan\",\n optional: \"(pilihan)\",\n instructionsPlaceholder: \"cth., Nilai dakwaan untuk ketepatan dan bukti...\",\n annotate: \"Anotasi\",\n annotating: \"Menganotasi...\",\n toneLabel: \"Nada\",\n toneOptional: \"(pilihan)\",\n toneAnalytical: \"Analitikal\",\n toneCritical: \"Kritikal\",\n toneBalanced: \"Seimbang\",\n toneConstructive: \"Konstruktif\",\n densityLabel: \"Ketumpatan\",\n densitySparse: \"Jarang\",\n densityDense: \"Padat\",\n fragmentSelected: \"Fragmen dipilih\",\n imageRegionSelected: \"Kawasan imej dipilih\",\n closeProgress: \"Tutup\"\n};\nvar TaggingPanel = {\n title: \"Tag\",\n noTags: \"Tiada tag lagi. Gunakan anotasi AI untuk mengenal pasti peranan struktur.\",\n noSchemas: \"Tiada skema tag didaftarkan untuk pangkalan pengetahuan ini. Pentadbir KB mesti mendaftarkan sekurang-kurangnya satu skema analisis struktur (cth. melalui kemahiran `register-tag-schemas`) sebelum penandaan boleh digunakan.\",\n annotateTags: \"Anotasi Tag\",\n selectSchema: \"Pilih Rangka Kerja\",\n selectCategories: \"Pilih Kategori\",\n annotate: \"Anotasi\",\n annotating: \"Menganotasi...\",\n cancel: \"Batal\",\n selectAll: \"Pilih Semua\",\n deselectAll: \"Nyahpilih Semua\",\n categoriesSelected: \"{count, plural, =0 {Tiada kategori dipilih} =1 {1 kategori dipilih} other {# kategori dipilih}}\",\n createTagForSelection: \"Cipta Tag untuk Pilihan\",\n selectCategory: \"Pilih Kategori\",\n chooseCategory: \"Pilih kategori...\",\n fragmentSelected: \"Fragmen dipilih\",\n imageRegionSelected: \"Kawasan imej dipilih\"\n};\nvar UnifiedAnnotationsPanel = {\n title: \"Anotasi\",\n statistics: \"Statistik\",\n highlight: \"Sorotan\",\n reference: \"Rujukan\",\n assessment: \"Penilaian\",\n comment: \"Ulasan\",\n tag: \"Tag\"\n};\nvar StatisticsPanel = {\n title: \"Statistik\",\n highlights: \"Sorotan\",\n comments: \"Ulasan\",\n assessments: \"Penilaian\",\n tags: \"Tag\",\n references: \"Rujukan\",\n stub: \"Stub\",\n resolved: \"Diselesaikan\",\n entityTypes: \"Jenis Entiti\"\n};\nvar ReferencesPanel = {\n title: \"Rujukan\",\n noReferences: \"Tiada rujukan lagi. Pilih teks untuk mencipta rujukan ke sumber lain.\",\n outgoingReferences: \"Rujukan Keluar\",\n incomingReferences: \"Rujukan Masuk\",\n noIncomingReferences: \"Tiada rujukan masuk\",\n stub: \"Rujukan stub (tidak dipautkan)\",\n resolved: \"Rujukan diselesaikan (dipautkan)\",\n open: \"Buka\",\n unlink: \"Nyahpaut\",\n resolve: \"Selesaikan rujukan\",\n cancel: \"Batal\",\n createReference: \"Cipta Rujukan\",\n entityTypesOptional: \"Jenis Entiti (Pilihan)\",\n fragmentSelected: \"Fragmen dipilih\",\n imageRegionSelected: \"Kawasan imej dipilih\",\n annotateReferences: \"Anotasi Rujukan\",\n selectEntityTypes: \"Jenis entiti:\",\n select: \"Pilih\",\n deselect: \"Nyahpilih\",\n noEntityTypes: \"Tiada jenis entiti tersedia\",\n typesSelected: \"{count, plural, =1 {1 jenis dipilih} other {# jenis dipilih}}\",\n annotate: \"Anotasi\",\n annotating: \"Menganotasi...\",\n includeDescriptiveReferences: \"Sertakan rujukan deskriptif\",\n descriptiveReferencesTooltip: \"Cari juga frasa seperti 'CEO tersebut', 'gergasi teknologi tersebut', 'ahli fizik tersebut' (selain nama)\",\n annotationProgressTitle: \"Menganotasi Rujukan Entiti\",\n cancelAnnotation: \"Batalkan anotasi\",\n found: \"{{count}} ditemui\",\n complete: \"Anotasi selesai!\",\n failed: \"Anotasi gagal\",\n current: \"Semasa: {{entityType}}\",\n closeProgress: \"Tutup\",\n loading: \"memuatkan...\",\n loadingEllipsis: \"Memuatkan...\",\n untitledResource: \"Sumber Tanpa Tajuk\",\n noText: \"Tiada teks\"\n};\nvar KeyboardShortcuts = {\n title: \"Pintasan Papan Kekunci\",\n closeDialog: \"Tutup dialog\",\n or: \"atau\",\n navigationTitle: \"Navigasi\",\n navOpenSearch: \"Buka carian global\",\n navOpenSearchAlt: \"Buka carian global (alternatif)\",\n navCreateResource: \"Cipta sumber baharu\",\n navCloseOverlays: \"Tutup semua tindanan (tekan dua kali)\",\n navShowHelp: \"Tunjukkan bantuan pintasan papan kekunci\",\n sidebarTitle: \"Bar Sisi Pengetahuan\",\n sidebarCollapse: \"Kecilkan bar sisi\",\n sidebarExpand: \"Kembangkan bar sisi\",\n sidebarPickup: \"Angkat tab sumber (apabila difokuskan)\",\n sidebarMove: \"Alihkan tab sumber (apabila menyeret)\",\n sidebarDrop: \"Lepaskan tab sumber (apabila menyeret)\",\n sidebarCancel: \"Batalkan operasi seret\",\n annotationsTitle: \"Anotasi Sumber\",\n annotHighlight: \"Cipta sorotan daripada anotasi (terus)\",\n annotReference: \"Buka tetingkap timbul rujukan untuk anotasi\",\n annotDelete: \"Padam anotasi yang difokuskan\",\n annotNavigate: \"Navigasi melalui anotasi\",\n annotNavigateBack: \"Navigasi anotasi ke belakang\",\n listsTitle: \"Senarai & Grid\",\n listsFilterNav: \"Navigasi penapis jenis entiti\",\n listsGridNav: \"Navigasi grid sumber\",\n listsJumpFirst: \"Lompat ke item pertama\",\n listsJumpLast: \"Lompat ke item terakhir\",\n searchModalTitle: \"Dalam Modal Carian\",\n searchNav: \"Navigasi hasil carian\",\n searchSelect: \"Pilih hasil\",\n searchClose: \"Tutup carian\",\n modalTitle: \"Kawalan Modal\",\n modalClose: \"Tutup modal aktif\",\n modalNavForward: \"Navigasi ke hadapan melalui butang\",\n modalNavBackward: \"Navigasi ke belakang melalui butang\",\n modalActivate: \"Aktifkan butang yang difokuskan\",\n accessibilityTitle: \"Kebolehcapaian\",\n a11ySkipLinks: \"Navigasi ke pautan langkau (apabila di permulaan halaman)\",\n a11yFollowLink: \"Ikuti pautan langkau\",\n macNote: \"Menggunakan pintasan papan kekunci Mac. \\u2318 ialah kekunci Command.\",\n windowsNote: \"Menggunakan pintasan papan kekunci Windows/Linux. Ctrl ialah kekunci Control.\",\n footerHint: \"Tekan {{key}} pada bila-bila masa untuk menunjukkan bantuan ini\",\n close: \"Tutup\"\n};\nvar AnnotateToolbar = {\n modeGroup: \"Mod\",\n browse: \"Layari\",\n annotate: \"Anotasi\",\n selectionGroup: \"Motivasi\",\n clickGroup: \"Klik\",\n shapeGroup: \"Bentuk\",\n none: \"Tiada\",\n linking: \"Rujukan\",\n highlighting: \"Sorotan\",\n assessing: \"Nilai\",\n commenting: \"Ulasan\",\n tagging: \"Tag\",\n detail: \"Perincian\",\n follow: \"Ikuti\",\n deleting: \"Padam\",\n jsonld: \"JSON-LD\",\n rectangle: \"Segi Empat Tepat\",\n circle: \"Bulatan\",\n polygon: \"Poligon\"\n};\nvar CollapsibleResourceNavigation = {\n title: \"Navigasi\",\n collapseSidebar: \"Kecilkan bar sisi\",\n expandSidebar: \"Kembangkan bar sisi\",\n dragToReorder: \"Seret untuk menyusun semula\",\n dragToReorderDoc: \"Seret untuk menyusun semula {{name}}\",\n closeResource: \"Tutup sumber\",\n dragInstructions: \"Untuk menyusun semula sumber: Gunakan Tab untuk navigasi ke sumber. Tekan Alt+Anak panah atas untuk bergerak ke atas atau Alt+Anak panah bawah untuk bergerak ke bawah. Untuk seret dan lepas: Tekan bar ruang untuk mengangkat item. Gunakan kekunci anak panah untuk mengalihkannya. Tekan bar ruang sekali lagi untuk melepaskan.\"\n};\nvar ResourceViewer = {\n deleteConfirmationTitle: \"Padam Anotasi\",\n deleteConfirmationMessage: \"Adakah anda pasti mahu memadam anotasi ini? Tindakan ini tidak boleh dibatalkan.\",\n deleteConfirmationCancel: \"Batal\",\n deleteConfirmationDelete: \"Padam\"\n};\nvar Settings = {\n title: \"Tetapan\",\n lineNumbers: \"Nombor Baris\",\n lineNumbersVisible: \"Kelihatan\",\n lineNumbersHidden: \"Tersembunyi\",\n theme: \"Tema\",\n themeLight: \"Cerah\",\n themeDark: \"Gelap\",\n themeSystem: \"Sistem\",\n themeSystemActive: \"Sistem ({{mode}})\",\n themeModeActive: \"Menggunakan mod {{mode}}\",\n language: \"Bahasa\",\n languageHint: \"Tukar bahasa dalam navigasi utama\",\n languageChanging: \"Menukar bahasa...\",\n hoverDelay: \"Kelewatan Terapung\",\n hoverDelayFast: \"Pantas\",\n hoverDelaySlow: \"Perlahan\",\n hoverDelayDescription: \"Kelewatan {{delay}}ms sebelum kesan terapung muncul\"\n};\nvar AnnotateView = {};\nvar ReferenceWizard = {\n gatherTitle: \"Konteks Dikumpul\",\n configureGenerationTitle: \"Konfigurasi Penjanaan\",\n configureSearchTitle: \"Konfigurasi carian\",\n searchResultsTitle: \"Hasil carian\",\n sourceContextLabel: \"Konteks anotasi dalam sumber\",\n connectionsLabel: \"Anotasi rakan sebaya\",\n citedByLabel: \"Sumber dipetik oleh\",\n userHintLabel: \"Petunjuk\",\n userHintPlaceholder: \"Terangkan apa yang dirujuk oleh anotasi ini...\",\n loadingContext: \"Mengumpul konteks...\",\n failedContext: \"Gagal mengumpul konteks\",\n cancel: \"Batal\",\n generate: \"Jana\",\n compose: \"Karang\",\n resolutionStrategyLabel: \"Strategi resolusi\",\n back: \"Kembali\",\n link: \"Pautan\",\n score: \"Skor\",\n noResults: \"Tiada hasil ditemui\",\n resourceTitle: \"Tajuk Sumber\",\n resourceTitlePlaceholder: \"Masukkan tajuk sumber...\",\n additionalInstructions: \"Arahan Tambahan\",\n additionalInstructionsPlaceholder: \"Masukkan arahan tambahan...\",\n language: \"Bahasa\",\n languageHelp: \"Bahasa untuk kandungan yang dijana\",\n creativity: \"Kreativiti\",\n creativityFocused: \"Tertumpu\",\n creativityCreative: \"Kreatif\",\n maxLength: \"Panjang Maksimum\",\n maxLengthHelp: \"Bilangan maksimum token\",\n maxResults: \"Hasil Maksimum\",\n semanticScoring: \"Pemarkahan Semantik\",\n semanticScoringHelp: \"Gunakan AI untuk menilai hasil mengikut kerelevanan semantik\",\n searching: \"Mencari...\",\n search: \"Cari\"\n};\nvar History = {\n embeddingComputed: \"Embedding dikira\"\n};\nvar ms_default = {\n Toolbar,\n ResourceInfoPanel,\n CollaborationPanel,\n AnnotationHistory,\n CommentsPanel,\n HighlightPanel,\n AssessmentPanel,\n TaggingPanel,\n UnifiedAnnotationsPanel,\n StatisticsPanel,\n ReferencesPanel,\n KeyboardShortcuts,\n AnnotateToolbar,\n CollapsibleResourceNavigation,\n ResourceViewer,\n Settings,\n AnnotateView,\n ReferenceWizard,\n History\n};\nexport {\n AnnotateToolbar,\n AnnotateView,\n AnnotationHistory,\n AssessmentPanel,\n CollaborationPanel,\n CollapsibleResourceNavigation,\n CommentsPanel,\n HighlightPanel,\n History,\n KeyboardShortcuts,\n ReferenceWizard,\n ReferencesPanel,\n ResourceInfoPanel,\n ResourceViewer,\n Settings,\n StatisticsPanel,\n TaggingPanel,\n Toolbar,\n UnifiedAnnotationsPanel,\n ms_default as default\n};\n//# sourceMappingURL=ms-UPQWWIL4.mjs.map"],"names":["Toolbar","ResourceInfoPanel","CollaborationPanel","AnnotationHistory","CommentsPanel","HighlightPanel","AssessmentPanel","TaggingPanel","UnifiedAnnotationsPanel","StatisticsPanel","ReferencesPanel","KeyboardShortcuts","AnnotateToolbar","CollapsibleResourceNavigation","ResourceViewer","Settings","AnnotateView","ReferenceWizard","History","ms_default"],"mappings":"AAIG,IAACA,EAAU,CACZ,YAAa,UACb,QAAS,UACT,aAAc,kBACd,cAAe,aACf,YAAa,iBACb,SAAU,UACV,cAAe,uBACjB,EACIC,EAAoB,CACtB,MAAO,kBACP,OAAQ,SACR,aAAc,mBACd,eAAgB,mBAChB,eAAgB,aAChB,UAAW,cACX,SAAU,OACV,MAAO,OACP,iBAAkB,wDAClB,QAAS,QACT,mBAAoB,0CACpB,UAAW,YACX,qBAAsB,sCACtB,WAAY,YACZ,UAAW,UACX,WAAY,cACZ,eAAgB,kBAChB,aAAc,mBACd,YAAa,qBACb,YAAa,cACb,WAAY,QACd,EACIC,EAAqB,CACvB,MAAO,aACP,iBAAkB,mBAClB,KAAM,WACN,aAAc,WACd,OAAQ,sBACR,SAAU,yBACV,WAAY,sBACZ,QAAS,cACT,WAAY,2BACZ,UAAW,oBACX,WAAY,4BACZ,QAAS,kBACT,SAAU,0BACV,eAAgB,qCAChB,aAAc,kCACd,QAAS,cACT,wBAAyB,6CAC3B,EACIC,EAAoB,CACtB,QAAS,UACT,QAAS,eACT,KAAM,WACN,OAAQ,SACR,aAAc,aACd,eAAgB,6BAChB,gBAAiB,iBACjB,eAAgB,SAChB,iBAAkB,aAClB,mBAAoB,iBACpB,eAAgB,mBAChB,iBAAkB,kBAClB,iBAAkB,kBAClB,kBAAmB,uBACnB,iBAAkB,kBAClB,eAAgB,eAChB,iBAAkB,cAClB,gBAAiB,qBACjB,kBAAmB,oBACnB,gBAAiB,mBACjB,kBAAmB,kBACnB,sBAAuB,uBACvB,SAAU,kBACV,QAAS,cACT,WAAY,kBACZ,SAAU,kBACV,QAAS,iBACX,EACIC,EAAgB,CAClB,MAAO,SACP,WAAY,qEACZ,mBAAoB,8BACpB,KAAM,SACN,OAAQ,QACR,KAAM,UACN,iBAAkB,iBAClB,aAAc,SACd,SAAU,YACV,wBAAyB,uCACzB,SAAU,UACV,WAAY,iBACZ,UAAW,OACX,aAAc,YACd,cAAe,SACf,gBAAiB,aACjB,mBAAoB,YACpB,cAAe,WACf,aAAc,aACd,cAAe,SACf,aAAc,QACd,iBAAkB,kBAClB,oBAAqB,uBACrB,cAAe,OACjB,EACIC,EAAiB,CACnB,MAAO,UACP,aAAc,wEACd,mBAAoB,kBACpB,aAAc,SACd,SAAU,YACV,wBAAyB,4CACzB,SAAU,UACV,WAAY,iBACZ,OAAQ,QACR,aAAc,aACd,cAAe,SACf,aAAc,QACd,cAAe,OACjB,EACIC,EAAkB,CACpB,MAAO,YACP,cAAe,kEACf,sBAAuB,iCACvB,KAAM,SACN,OAAQ,QACR,oBAAqB,oBACrB,aAAc,SACd,SAAU,YACV,wBAAyB,mDACzB,SAAU,UACV,WAAY,iBACZ,UAAW,OACX,aAAc,YACd,eAAgB,aAChB,aAAc,WACd,aAAc,WACd,iBAAkB,cAClB,aAAc,aACd,cAAe,SACf,aAAc,QACd,iBAAkB,kBAClB,oBAAqB,uBACrB,cAAe,OACjB,EACIC,EAAe,CACjB,MAAO,MACP,OAAQ,4EACR,UAAW,kOACX,aAAc,cACd,aAAc,qBACd,iBAAkB,iBAClB,SAAU,UACV,WAAY,iBACZ,OAAQ,QACR,UAAW,cACX,YAAa,kBACb,mBAAoB,kGACpB,sBAAuB,0BACvB,eAAgB,iBAChB,eAAgB,oBAChB,iBAAkB,kBAClB,oBAAqB,sBACvB,EACIC,EAA0B,CAC5B,MAAO,UACP,WAAY,YACZ,UAAW,UACX,UAAW,UACX,WAAY,YACZ,QAAS,SACT,IAAK,KACP,EACIC,EAAkB,CACpB,MAAO,YACP,WAAY,UACZ,SAAU,SACV,YAAa,YACb,KAAM,MACN,WAAY,UACZ,KAAM,OACN,SAAU,eACV,YAAa,cACf,EACIC,EAAkB,CACpB,MAAO,UACP,aAAc,wEACd,mBAAoB,iBACpB,mBAAoB,gBACpB,qBAAsB,sBACtB,KAAM,iCACN,SAAU,mCACV,KAAM,OACN,OAAQ,WACR,QAAS,qBACT,OAAQ,QACR,gBAAiB,gBACjB,oBAAqB,yBACrB,iBAAkB,kBAClB,oBAAqB,uBACrB,mBAAoB,kBACpB,kBAAmB,gBACnB,OAAQ,QACR,SAAU,YACV,cAAe,8BACf,cAAe,gEACf,SAAU,UACV,WAAY,iBACZ,6BAA8B,8BAC9B,6BAA8B,4GAC9B,wBAAyB,6BACzB,iBAAkB,mBAClB,MAAO,oBACP,SAAU,mBACV,OAAQ,gBACR,QAAS,yBACT,cAAe,QACf,QAAS,eACT,gBAAiB,eACjB,iBAAkB,qBAClB,OAAQ,YACV,EACIC,EAAoB,CACtB,MAAO,yBACP,YAAa,eACb,GAAI,OACJ,gBAAiB,WACjB,cAAe,qBACf,iBAAkB,kCAClB,kBAAmB,sBACnB,iBAAkB,wCAClB,YAAa,2CACb,aAAc,uBACd,gBAAiB,oBACjB,cAAe,sBACf,cAAe,yCACf,YAAa,wCACb,YAAa,yCACb,cAAe,yBACf,iBAAkB,iBAClB,eAAgB,yCAChB,eAAgB,8CAChB,YAAa,gCACb,cAAe,2BACf,kBAAmB,+BACnB,WAAY,iBACZ,eAAgB,gCAChB,aAAc,uBACd,eAAgB,yBAChB,cAAe,0BACf,iBAAkB,qBAClB,UAAW,wBACX,aAAc,cACd,YAAa,eACb,WAAY,gBACZ,WAAY,oBACZ,gBAAiB,qCACjB,iBAAkB,sCAClB,cAAe,kCACf,mBAAoB,iBACpB,cAAe,4DACf,eAAgB,uBAChB,QAAS,mEACT,YAAa,gFACb,WAAY,kEACZ,MAAO,OACT,EACIC,EAAkB,CACpB,UAAW,MACX,OAAQ,SACR,SAAU,UACV,eAAgB,WAChB,WAAY,OACZ,WAAY,SACZ,KAAM,QACN,QAAS,UACT,aAAc,UACd,UAAW,QACX,WAAY,SACZ,QAAS,MACT,OAAQ,YACR,OAAQ,QACR,SAAU,QACV,OAAQ,UACR,UAAW,mBACX,OAAQ,UACR,QAAS,SACX,EACIC,EAAgC,CAClC,MAAO,WACP,gBAAiB,oBACjB,cAAe,sBACf,cAAe,8BACf,iBAAkB,uCAClB,cAAe,eACf,iBAAkB,sUACpB,EACIC,EAAiB,CACnB,wBAAyB,gBACzB,0BAA2B,mFAC3B,yBAA0B,QAC1B,yBAA0B,OAC5B,EACIC,EAAW,CACb,MAAO,UACP,YAAa,eACb,mBAAoB,YACpB,kBAAmB,cACnB,MAAO,OACP,WAAY,QACZ,UAAW,QACX,YAAa,SACb,kBAAmB,oBACnB,gBAAiB,2BACjB,SAAU,SACV,aAAc,oCACd,iBAAkB,oBAClB,WAAY,qBACZ,eAAgB,SAChB,eAAgB,WAChB,sBAAuB,qDACzB,EACIC,EAAe,CAAA,EACfC,EAAkB,CACpB,YAAa,mBACb,yBAA0B,wBAC1B,qBAAsB,qBACtB,mBAAoB,eACpB,mBAAoB,+BACpB,iBAAkB,uBAClB,aAAc,sBACd,cAAe,WACf,oBAAqB,iDACrB,eAAgB,uBAChB,cAAe,0BACf,OAAQ,QACR,SAAU,OACV,QAAS,SACT,wBAAyB,oBACzB,KAAM,UACN,KAAM,SACN,MAAO,OACP,UAAW,sBACX,cAAe,eACf,yBAA0B,2BAC1B,uBAAwB,kBACxB,kCAAmC,8BACnC,SAAU,SACV,aAAc,qCACd,WAAY,aACZ,kBAAmB,WACnB,mBAAoB,UACpB,UAAW,mBACX,cAAe,0BACf,WAAY,iBACZ,gBAAiB,sBACjB,oBAAqB,+DACrB,UAAW,aACX,OAAQ,MACV,EACIC,EAAU,CACZ,kBAAmB,kBACrB,EACIC,EAAa,CACf,QAAAnB,EACA,kBAAAC,EACA,mBAAAC,EACA,kBAAAC,EACA,cAAAC,EACA,eAAAC,EACA,gBAAAC,EACA,aAAAC,EACA,wBAAAC,EACA,gBAAAC,EACA,gBAAAC,EACA,kBAAAC,EACA,gBAAAC,EACA,8BAAAC,EACA,eAAAC,EACA,SAAAC,EACA,aAAAC,EACA,gBAAAC,EACA,QAAAC,CACF"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var e={annotations:"Annotaties",history:"Geschiedenis",resourceInfo:"Broninformatie",collaboration:"Samenwerking",userAccount:"Gebruikersaccount",settings:"Instellingen",knowledgeBase:"Kennisbank"},n={title:"Broninformatie",locale:"Taalregio",notSpecified:"Niet gespecificeerd",entityTypeTags:"Entiteitstypelabels",representation:"Representatie",mediaType:"Mediatype",byteSize:"Grootte",clone:"Klonen",cloneDescription:"Genereer een deelbare kloonlink voor deze bron",archive:"Archiveren",archiveDescription:"Verplaats deze bron naar gearchiveerde status",unarchive:"Dearchiveren",unarchiveDescription:"Herstel deze bron naar actieve status",provenance:"Herkomst",createdAt:"Aangemaakt",modifiedAt:"Gewijzigd",creationMethod:"Aanmaakmethode",attributedTo:"Toegeschreven aan",derivedFrom:"Afgeleid van",generatedBy:"Gegenereerd door",storageUri:"Opslag"},t={title:"Samenwerking",connectionStatus:"Verbindingsstatus",live:"Live",disconnected:"Verbroken",events:"{{count}} gebeurtenissen",lastSync:"Laatste synchronisatie:",noActivity:"Nog geen activiteit",justNow:"Zojuist",secondsAgo:"{{count}} seconden geleden",minuteAgo:"1 minuut geleden",minutesAgo:"{{count}} minuten geleden",hourAgo:"1 uur geleden",hoursAgo:"{{count}} uur geleden",realtimeActive:"Realtime-updates zijn actief",reconnecting:"Opnieuw verbinden met server...",sharing:"Delen",collaborationComingSoon:"Samenwerkingsfuncties komen binnenkort"},i={history:"Geschiedenis",loading:"Laden...",user:"Gebruiker",method:"Methode",viewOriginal:"Origineel bekijken",viewAnnotation:"Annotatie bekijken: {{content}}",resourceCreated:"Bron aangemaakt",resourceCloned:"Gekloond",resourceArchived:"Gearchiveerd",resourceUnarchived:"Gedearchiveerd",highlightAdded:"Markering toegevoegd",highlightRemoved:"Markering verwijderd",referenceCreated:"Referentie aangemaakt",referenceResolved:"Referentie opgelost",referenceDeleted:"Referentie verwijderd",entitytagAdded:"Label toegevoegd",entitytagRemoved:"Label verwijderd",assessmentAdded:"Beoordeling toegevoegd",assessmentRemoved:"Beoordeling verwijderd",annotationAdded:"Annotatie toegevoegd",annotationRemoved:"Annotatie verwijderd",annotationBodyUpdated:"Annotatie bijgewerkt",jobEvent:"Taakgebeurtenis",justNow:"zojuist",minutesAgo:"{{count}}m geleden",hoursAgo:"{{count}}u geleden",daysAgo:"{{count}}d geleden"},a={title:"Opmerkingen",noComments:"Nog geen opmerkingen. Selecteer tekst en klik op Opmerking om er een toe te voegen.",commentPlaceholder:"Typ hier je opmerking...",save:"Opslaan",cancel:"Annuleren",edit:"Bewerken",annotateComments:"Opmerkingen annoteren",instructions:"Instructies",optional:"(optioneel)",instructionsPlaceholder:"bijv. Focus op technische terminologie...",annotate:"Annoteren",annotating:"Annoteren...",toneLabel:"Toon",toneOptional:"(optioneel)",toneScholarly:"Wetenschappelijk",toneExplanatory:"Verklarend",toneConversational:"Conversationeel",toneTechnical:"Technisch",densityLabel:"Dichtheid",densitySparse:"Schaars",densityDense:"Dicht",fragmentSelected:"Fragment geselecteerd",imageRegionSelected:"Afbeeldingsgebied geselecteerd",closeProgress:"Sluiten"},o={title:"Markeringen",noHighlights:"Nog geen markeringen. Gebruik AI-annotatie om belangrijke passages te vinden.",annotateHighlights:"Markeringen annoteren",instructions:"Instructies",optional:"(optioneel)",instructionsPlaceholder:"bijv. Focus op belangrijke technische concepten...",annotate:"Annoteren",annotating:"Annoteren...",cancel:"Annuleren",densityLabel:"Dichtheid",densitySparse:"Schaars",densityDense:"Dicht",closeProgress:"Sluiten"},r={title:"Beoordelingen",noAssessments:"Nog geen beoordelingen. Gebruik AI-annotatie om passages te evalueren.",assessmentPlaceholder:"Typ hier je beoordeling...",save:"Opslaan",cancel:"Annuleren",annotateAssessments:"Beoordelingen annoteren",instructions:"Instructies",optional:"(optioneel)",instructionsPlaceholder:"bijv. Evalueer beweringen op nauwkeurigheid en bewijs...",annotate:"Annoteren",annotating:"Annoteren...",toneLabel:"Toon",toneOptional:"(optioneel)",toneAnalytical:"Analytisch",toneCritical:"Kritisch",toneBalanced:"Evenwichtig",toneConstructive:"Constructief",densityLabel:"Dichtheid",densitySparse:"Schaars",densityDense:"Dicht",fragmentSelected:"Fragment geselecteerd",imageRegionSelected:"Afbeeldingsgebied geselecteerd",closeProgress:"Sluiten"},s={title:"Labels",noTags:"Nog geen labels. Gebruik AI-annotatie om structurele rollen te identificeren.",noSchemas:"Geen tagschema's geregistreerd voor deze kennisbasis. Een KB-beheerder moet ten minste één structureel-analyseschema registreren (bv. via de `register-tag-schemas`-skill) voordat tagging gebruikt kan worden.",annotateTags:"Labels annoteren",selectSchema:"Framework selecteren",selectCategories:"Categorieën selecteren",annotate:"Annoteren",annotating:"Annoteren...",cancel:"Annuleren",selectAll:"Alles selecteren",deselectAll:"Alles deselecteren",categoriesSelected:"{count, plural, =0 {Geen categorieën geselecteerd} =1 {1 categorie geselecteerd} other {# categorieën geselecteerd}}",createTagForSelection:"Label maken voor selectie",selectCategory:"Categorie selecteren",chooseCategory:"Kies een categorie...",fragmentSelected:"Fragment geselecteerd",imageRegionSelected:"Afbeeldingsgebied geselecteerd"},l={title:"Annotaties",statistics:"Statistieken",highlight:"Markeringen",reference:"Referenties",assessment:"Beoordelingen",comment:"Opmerkingen",tag:"Labels"},c={title:"Statistieken",highlights:"Markeringen",comments:"Opmerkingen",assessments:"Beoordelingen",tags:"Labels",references:"Referenties",stub:"Stub",resolved:"Opgelost",entityTypes:"Entiteitstypen"},g={title:"Referenties",noReferences:"Nog geen referenties. Selecteer tekst om referenties naar andere bronnen te maken.",outgoingReferences:"Uitgaande referenties",incomingReferences:"Inkomende referenties",noIncomingReferences:"Geen inkomende referenties",stub:"Stubreferentie (niet gekoppeld)",resolved:"Opgeloste referentie (gekoppeld)",open:"Openen",unlink:"Ontkoppelen",resolve:"Referentie oplossen",cancel:"Annuleren",createReference:"Referentie maken",entityTypesOptional:"Entiteitstypen (optioneel)",fragmentSelected:"Fragment geselecteerd",imageRegionSelected:"Afbeeldingsgebied geselecteerd",annotateReferences:"Referenties annoteren",selectEntityTypes:"Entiteitstypen:",select:"Selecteren",deselect:"Deselecteren",noEntityTypes:"Geen entiteitstypen beschikbaar",typesSelected:"{count, plural, =1 {1 type geselecteerd} other {# typen geselecteerd}}",annotate:"Annoteren",annotating:"Annoteren...",includeDescriptiveReferences:"Beschrijvende referenties opnemen",descriptiveReferencesTooltip:"Zoek ook naar zinnen zoals 'de CEO', 'de techgigant', 'de fysicus' (naast namen)",annotationProgressTitle:"Entiteitsreferenties annoteren",cancelAnnotation:"Annotatie annuleren",found:"{{count}} gevonden",complete:"Annotatie voltooid!",failed:"Annotatie mislukt",current:"Huidig: {{entityType}}",closeProgress:"Sluiten",loading:"laden...",loadingEllipsis:"Laden...",untitledResource:"Naamloze bron",noText:"Geen tekst"},d={title:"Sneltoetsen",closeDialog:"Dialoogvenster sluiten",or:"of",navigationTitle:"Navigatie",navOpenSearch:"Globale zoekopdracht openen",navOpenSearchAlt:"Globale zoekopdracht openen (alternatief)",navCreateResource:"Nieuwe bron aanmaken",navCloseOverlays:"Alle overlays sluiten (dubbel drukken)",navShowHelp:"Sneltoetshulp tonen",sidebarTitle:"Kenniszijbalk",sidebarCollapse:"Zijbalk inklappen",sidebarExpand:"Zijbalk uitklappen",sidebarPickup:"Brontabblad oppakken (bij focus)",sidebarMove:"Brontabblad verplaatsen (bij slepen)",sidebarDrop:"Brontabblad neerzetten (bij slepen)",sidebarCancel:"Sleepbewerking annuleren",annotationsTitle:"Bronannotaties",annotHighlight:"Markering maken van annotatie (direct)",annotReference:"Referentiepopup openen voor annotatie",annotDelete:"Gefocuste annotatie verwijderen",annotNavigate:"Door annotaties navigeren",annotNavigateBack:"Achterwaarts door annotaties navigeren",listsTitle:"Lijsten & rasters",listsFilterNav:"Door entiteitstypefilters navigeren",listsGridNav:"Door bronnenraster navigeren",listsJumpFirst:"Naar eerste item springen",listsJumpLast:"Naar laatste item springen",searchModalTitle:"In zoekvenster",searchNav:"Door zoekresultaten navigeren",searchSelect:"Resultaat selecteren",searchClose:"Zoekvenster sluiten",modalTitle:"Vensterbediening",modalClose:"Actief venster sluiten",modalNavForward:"Voorwaarts door knoppen navigeren",modalNavBackward:"Achterwaarts door knoppen navigeren",modalActivate:"Gefocuste knop activeren",accessibilityTitle:"Toegankelijkheid",a11ySkipLinks:"Naar skiplinks navigeren (bij begin van pagina)",a11yFollowLink:"Skiplink volgen",macNote:"Mac-sneltoetsen worden gebruikt. Command is de Command-toets.",windowsNote:"Windows/Linux-sneltoetsen worden gebruikt. Ctrl is de Control-toets.",footerHint:"Druk op {{key}} om deze hulp op elk moment te tonen",close:"Sluiten"},u={modeGroup:"Modus",browse:"Bladeren",annotate:"Annoteren",selectionGroup:"Motivatie",clickGroup:"Klik",shapeGroup:"Vorm",none:"Geen",linking:"Referentie",highlighting:"Markering",assessing:"Beoordelen",commenting:"Opmerking",tagging:"Labelen",detail:"Detail",follow:"Volgen",deleting:"Verwijderen",jsonld:"JSON-LD",rectangle:"Rechthoek",circle:"Cirkel",polygon:"Polygoon"},m={title:"Navigatie",collapseSidebar:"Zijbalk inklappen",expandSidebar:"Zijbalk uitklappen",dragToReorder:"Slepen om te herordenen",dragToReorderDoc:"Slepen om {{name}} te herordenen",closeResource:"Bron sluiten",dragInstructions:"Om bronnen te herordenen: Gebruik Tab om naar een bron te navigeren. Druk op Alt+pijl omhoog om omhoog te verplaatsen of Alt+pijl omlaag om omlaag te verplaatsen. Voor slepen en neerzetten: Druk op de spatiebalk om het item op te pakken. Gebruik pijltoetsen om het te verplaatsen. Druk nogmaals op de spatiebalk om het neer te zetten."},p={deleteConfirmationTitle:"Annotatie verwijderen",deleteConfirmationMessage:"Weet je zeker dat je deze annotatie wilt verwijderen? Deze actie kan niet ongedaan worden gemaakt.",deleteConfirmationCancel:"Annuleren",deleteConfirmationDelete:"Verwijderen"},v={title:"Instellingen",lineNumbers:"Regelnummers",lineNumbersVisible:"Zichtbaar",lineNumbersHidden:"Verborgen",theme:"Thema",themeLight:"Licht",themeDark:"Donker",themeSystem:"Systeem",themeSystemActive:"Systeem ({{mode}})",themeModeActive:"{{mode}}-modus gebruiken",language:"Taal",languageHint:"Wijzig de taal in de hoofdnavigatie",languageChanging:"Taal wijzigen...",hoverDelay:"Zweefvertraging",hoverDelayFast:"Snel",hoverDelaySlow:"Langzaam",hoverDelayDescription:"{{delay}}ms vertraging voordat zweefeffecten verschijnen"},k={ariaLabel:"Annotatie maken van geselecteerde tekst. Druk op H voor markering of R voor referentie.",tooltip:"Klik om markering te maken • Rechtsklik voor meer opties"},h={gatherTitle:"Verzamelde context",configureGenerationTitle:"Generatie configureren",configureSearchTitle:"Zoeken configureren",searchResultsTitle:"Zoekresultaten",sourceContextLabel:"Annotatiecontext in resource",connectionsLabel:"Peer-annotaties",citedByLabel:"Resource geciteerd door",userHintLabel:"Hint",userHintPlaceholder:"Beschrijf waar deze annotatie naar verwijst...",loadingContext:"Context wordt verzameld...",failedContext:"Context verzamelen mislukt",cancel:"Annuleren",generate:"Genereren",compose:"Opstellen",resolutionStrategyLabel:"Resolutiestrategie",back:"Terug",link:"Link",score:"Score",noResults:"Geen resultaten gevonden",resourceTitle:"Brontitel",resourceTitlePlaceholder:"Voer brontitel in...",additionalInstructions:"Aanvullende instructies",additionalInstructionsPlaceholder:"Voer aanvullende instructies in...",language:"Taal",languageHelp:"Taal voor gegenereerde inhoud",creativity:"Creativiteit",creativityFocused:"Gericht",creativityCreative:"Creatief",maxLength:"Maximale lengte",maxLengthHelp:"Maximaal aantal tokens",maxResults:"Maximale resultaten",semanticScoring:"Semantische beoordeling",semanticScoringHelp:"Gebruik AI om resultaten te beoordelen op semantische relevantie",searching:"Zoeken...",search:"Zoeken"},b={embeddingComputed:"Embedding berekend"},f={Toolbar:e,ResourceInfoPanel:n,CollaborationPanel:t,AnnotationHistory:i,CommentsPanel:a,HighlightPanel:o,AssessmentPanel:r,TaggingPanel:s,UnifiedAnnotationsPanel:l,StatisticsPanel:c,ReferencesPanel:g,KeyboardShortcuts:d,AnnotateToolbar:u,CollapsibleResourceNavigation:m,ResourceViewer:p,Settings:v,AnnotateView:k,ReferenceWizard:h,History:b};export{u as AnnotateToolbar,k as AnnotateView,i as AnnotationHistory,r as AssessmentPanel,t as CollaborationPanel,m as CollapsibleResourceNavigation,a as CommentsPanel,o as HighlightPanel,b as History,d as KeyboardShortcuts,h as ReferenceWizard,g as ReferencesPanel,n as ResourceInfoPanel,p as ResourceViewer,v as Settings,c as StatisticsPanel,s as TaggingPanel,e as Toolbar,l as UnifiedAnnotationsPanel,f as default};
|
|
2
|
+
//# sourceMappingURL=nl-W75HEPFL-D2_VQYac.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nl-W75HEPFL-D2_VQYac.js","sources":["../../../../packages/react-ui/dist/nl-W75HEPFL.mjs"],"sourcesContent":["'use client';\nimport \"./chunk-D4GAAQMM.mjs\";\n\n// translations/nl.json\nvar Toolbar = {\n annotations: \"Annotaties\",\n history: \"Geschiedenis\",\n resourceInfo: \"Broninformatie\",\n collaboration: \"Samenwerking\",\n userAccount: \"Gebruikersaccount\",\n settings: \"Instellingen\",\n knowledgeBase: \"Kennisbank\"\n};\nvar ResourceInfoPanel = {\n title: \"Broninformatie\",\n locale: \"Taalregio\",\n notSpecified: \"Niet gespecificeerd\",\n entityTypeTags: \"Entiteitstypelabels\",\n representation: \"Representatie\",\n mediaType: \"Mediatype\",\n byteSize: \"Grootte\",\n clone: \"Klonen\",\n cloneDescription: \"Genereer een deelbare kloonlink voor deze bron\",\n archive: \"Archiveren\",\n archiveDescription: \"Verplaats deze bron naar gearchiveerde status\",\n unarchive: \"Dearchiveren\",\n unarchiveDescription: \"Herstel deze bron naar actieve status\",\n provenance: \"Herkomst\",\n createdAt: \"Aangemaakt\",\n modifiedAt: \"Gewijzigd\",\n creationMethod: \"Aanmaakmethode\",\n attributedTo: \"Toegeschreven aan\",\n derivedFrom: \"Afgeleid van\",\n generatedBy: \"Gegenereerd door\",\n storageUri: \"Opslag\"\n};\nvar CollaborationPanel = {\n title: \"Samenwerking\",\n connectionStatus: \"Verbindingsstatus\",\n live: \"Live\",\n disconnected: \"Verbroken\",\n events: \"{{count}} gebeurtenissen\",\n lastSync: \"Laatste synchronisatie:\",\n noActivity: \"Nog geen activiteit\",\n justNow: \"Zojuist\",\n secondsAgo: \"{{count}} seconden geleden\",\n minuteAgo: \"1 minuut geleden\",\n minutesAgo: \"{{count}} minuten geleden\",\n hourAgo: \"1 uur geleden\",\n hoursAgo: \"{{count}} uur geleden\",\n realtimeActive: \"Realtime-updates zijn actief\",\n reconnecting: \"Opnieuw verbinden met server...\",\n sharing: \"Delen\",\n collaborationComingSoon: \"Samenwerkingsfuncties komen binnenkort\"\n};\nvar AnnotationHistory = {\n history: \"Geschiedenis\",\n loading: \"Laden...\",\n user: \"Gebruiker\",\n method: \"Methode\",\n viewOriginal: \"Origineel bekijken\",\n viewAnnotation: \"Annotatie bekijken: {{content}}\",\n resourceCreated: \"Bron aangemaakt\",\n resourceCloned: \"Gekloond\",\n resourceArchived: \"Gearchiveerd\",\n resourceUnarchived: \"Gedearchiveerd\",\n highlightAdded: \"Markering toegevoegd\",\n highlightRemoved: \"Markering verwijderd\",\n referenceCreated: \"Referentie aangemaakt\",\n referenceResolved: \"Referentie opgelost\",\n referenceDeleted: \"Referentie verwijderd\",\n entitytagAdded: \"Label toegevoegd\",\n entitytagRemoved: \"Label verwijderd\",\n assessmentAdded: \"Beoordeling toegevoegd\",\n assessmentRemoved: \"Beoordeling verwijderd\",\n annotationAdded: \"Annotatie toegevoegd\",\n annotationRemoved: \"Annotatie verwijderd\",\n annotationBodyUpdated: \"Annotatie bijgewerkt\",\n jobEvent: \"Taakgebeurtenis\",\n justNow: \"zojuist\",\n minutesAgo: \"{{count}}m geleden\",\n hoursAgo: \"{{count}}u geleden\",\n daysAgo: \"{{count}}d geleden\"\n};\nvar CommentsPanel = {\n title: \"Opmerkingen\",\n noComments: \"Nog geen opmerkingen. Selecteer tekst en klik op Opmerking om er een toe te voegen.\",\n commentPlaceholder: \"Typ hier je opmerking...\",\n save: \"Opslaan\",\n cancel: \"Annuleren\",\n edit: \"Bewerken\",\n annotateComments: \"Opmerkingen annoteren\",\n instructions: \"Instructies\",\n optional: \"(optioneel)\",\n instructionsPlaceholder: \"bijv. Focus op technische terminologie...\",\n annotate: \"Annoteren\",\n annotating: \"Annoteren...\",\n toneLabel: \"Toon\",\n toneOptional: \"(optioneel)\",\n toneScholarly: \"Wetenschappelijk\",\n toneExplanatory: \"Verklarend\",\n toneConversational: \"Conversationeel\",\n toneTechnical: \"Technisch\",\n densityLabel: \"Dichtheid\",\n densitySparse: \"Schaars\",\n densityDense: \"Dicht\",\n fragmentSelected: \"Fragment geselecteerd\",\n imageRegionSelected: \"Afbeeldingsgebied geselecteerd\",\n closeProgress: \"Sluiten\"\n};\nvar HighlightPanel = {\n title: \"Markeringen\",\n noHighlights: \"Nog geen markeringen. Gebruik AI-annotatie om belangrijke passages te vinden.\",\n annotateHighlights: \"Markeringen annoteren\",\n instructions: \"Instructies\",\n optional: \"(optioneel)\",\n instructionsPlaceholder: \"bijv. Focus op belangrijke technische concepten...\",\n annotate: \"Annoteren\",\n annotating: \"Annoteren...\",\n cancel: \"Annuleren\",\n densityLabel: \"Dichtheid\",\n densitySparse: \"Schaars\",\n densityDense: \"Dicht\",\n closeProgress: \"Sluiten\"\n};\nvar AssessmentPanel = {\n title: \"Beoordelingen\",\n noAssessments: \"Nog geen beoordelingen. Gebruik AI-annotatie om passages te evalueren.\",\n assessmentPlaceholder: \"Typ hier je beoordeling...\",\n save: \"Opslaan\",\n cancel: \"Annuleren\",\n annotateAssessments: \"Beoordelingen annoteren\",\n instructions: \"Instructies\",\n optional: \"(optioneel)\",\n instructionsPlaceholder: \"bijv. Evalueer beweringen op nauwkeurigheid en bewijs...\",\n annotate: \"Annoteren\",\n annotating: \"Annoteren...\",\n toneLabel: \"Toon\",\n toneOptional: \"(optioneel)\",\n toneAnalytical: \"Analytisch\",\n toneCritical: \"Kritisch\",\n toneBalanced: \"Evenwichtig\",\n toneConstructive: \"Constructief\",\n densityLabel: \"Dichtheid\",\n densitySparse: \"Schaars\",\n densityDense: \"Dicht\",\n fragmentSelected: \"Fragment geselecteerd\",\n imageRegionSelected: \"Afbeeldingsgebied geselecteerd\",\n closeProgress: \"Sluiten\"\n};\nvar TaggingPanel = {\n title: \"Labels\",\n noTags: \"Nog geen labels. Gebruik AI-annotatie om structurele rollen te identificeren.\",\n noSchemas: \"Geen tagschema's geregistreerd voor deze kennisbasis. Een KB-beheerder moet ten minste \\xE9\\xE9n structureel-analyseschema registreren (bv. via de `register-tag-schemas`-skill) voordat tagging gebruikt kan worden.\",\n annotateTags: \"Labels annoteren\",\n selectSchema: \"Framework selecteren\",\n selectCategories: \"Categorie\\xEBn selecteren\",\n annotate: \"Annoteren\",\n annotating: \"Annoteren...\",\n cancel: \"Annuleren\",\n selectAll: \"Alles selecteren\",\n deselectAll: \"Alles deselecteren\",\n categoriesSelected: \"{count, plural, =0 {Geen categorie\\xEBn geselecteerd} =1 {1 categorie geselecteerd} other {# categorie\\xEBn geselecteerd}}\",\n createTagForSelection: \"Label maken voor selectie\",\n selectCategory: \"Categorie selecteren\",\n chooseCategory: \"Kies een categorie...\",\n fragmentSelected: \"Fragment geselecteerd\",\n imageRegionSelected: \"Afbeeldingsgebied geselecteerd\"\n};\nvar UnifiedAnnotationsPanel = {\n title: \"Annotaties\",\n statistics: \"Statistieken\",\n highlight: \"Markeringen\",\n reference: \"Referenties\",\n assessment: \"Beoordelingen\",\n comment: \"Opmerkingen\",\n tag: \"Labels\"\n};\nvar StatisticsPanel = {\n title: \"Statistieken\",\n highlights: \"Markeringen\",\n comments: \"Opmerkingen\",\n assessments: \"Beoordelingen\",\n tags: \"Labels\",\n references: \"Referenties\",\n stub: \"Stub\",\n resolved: \"Opgelost\",\n entityTypes: \"Entiteitstypen\"\n};\nvar ReferencesPanel = {\n title: \"Referenties\",\n noReferences: \"Nog geen referenties. Selecteer tekst om referenties naar andere bronnen te maken.\",\n outgoingReferences: \"Uitgaande referenties\",\n incomingReferences: \"Inkomende referenties\",\n noIncomingReferences: \"Geen inkomende referenties\",\n stub: \"Stubreferentie (niet gekoppeld)\",\n resolved: \"Opgeloste referentie (gekoppeld)\",\n open: \"Openen\",\n unlink: \"Ontkoppelen\",\n resolve: \"Referentie oplossen\",\n cancel: \"Annuleren\",\n createReference: \"Referentie maken\",\n entityTypesOptional: \"Entiteitstypen (optioneel)\",\n fragmentSelected: \"Fragment geselecteerd\",\n imageRegionSelected: \"Afbeeldingsgebied geselecteerd\",\n annotateReferences: \"Referenties annoteren\",\n selectEntityTypes: \"Entiteitstypen:\",\n select: \"Selecteren\",\n deselect: \"Deselecteren\",\n noEntityTypes: \"Geen entiteitstypen beschikbaar\",\n typesSelected: \"{count, plural, =1 {1 type geselecteerd} other {# typen geselecteerd}}\",\n annotate: \"Annoteren\",\n annotating: \"Annoteren...\",\n includeDescriptiveReferences: \"Beschrijvende referenties opnemen\",\n descriptiveReferencesTooltip: \"Zoek ook naar zinnen zoals 'de CEO', 'de techgigant', 'de fysicus' (naast namen)\",\n annotationProgressTitle: \"Entiteitsreferenties annoteren\",\n cancelAnnotation: \"Annotatie annuleren\",\n found: \"{{count}} gevonden\",\n complete: \"Annotatie voltooid!\",\n failed: \"Annotatie mislukt\",\n current: \"Huidig: {{entityType}}\",\n closeProgress: \"Sluiten\",\n loading: \"laden...\",\n loadingEllipsis: \"Laden...\",\n untitledResource: \"Naamloze bron\",\n noText: \"Geen tekst\"\n};\nvar KeyboardShortcuts = {\n title: \"Sneltoetsen\",\n closeDialog: \"Dialoogvenster sluiten\",\n or: \"of\",\n navigationTitle: \"Navigatie\",\n navOpenSearch: \"Globale zoekopdracht openen\",\n navOpenSearchAlt: \"Globale zoekopdracht openen (alternatief)\",\n navCreateResource: \"Nieuwe bron aanmaken\",\n navCloseOverlays: \"Alle overlays sluiten (dubbel drukken)\",\n navShowHelp: \"Sneltoetshulp tonen\",\n sidebarTitle: \"Kenniszijbalk\",\n sidebarCollapse: \"Zijbalk inklappen\",\n sidebarExpand: \"Zijbalk uitklappen\",\n sidebarPickup: \"Brontabblad oppakken (bij focus)\",\n sidebarMove: \"Brontabblad verplaatsen (bij slepen)\",\n sidebarDrop: \"Brontabblad neerzetten (bij slepen)\",\n sidebarCancel: \"Sleepbewerking annuleren\",\n annotationsTitle: \"Bronannotaties\",\n annotHighlight: \"Markering maken van annotatie (direct)\",\n annotReference: \"Referentiepopup openen voor annotatie\",\n annotDelete: \"Gefocuste annotatie verwijderen\",\n annotNavigate: \"Door annotaties navigeren\",\n annotNavigateBack: \"Achterwaarts door annotaties navigeren\",\n listsTitle: \"Lijsten & rasters\",\n listsFilterNav: \"Door entiteitstypefilters navigeren\",\n listsGridNav: \"Door bronnenraster navigeren\",\n listsJumpFirst: \"Naar eerste item springen\",\n listsJumpLast: \"Naar laatste item springen\",\n searchModalTitle: \"In zoekvenster\",\n searchNav: \"Door zoekresultaten navigeren\",\n searchSelect: \"Resultaat selecteren\",\n searchClose: \"Zoekvenster sluiten\",\n modalTitle: \"Vensterbediening\",\n modalClose: \"Actief venster sluiten\",\n modalNavForward: \"Voorwaarts door knoppen navigeren\",\n modalNavBackward: \"Achterwaarts door knoppen navigeren\",\n modalActivate: \"Gefocuste knop activeren\",\n accessibilityTitle: \"Toegankelijkheid\",\n a11ySkipLinks: \"Naar skiplinks navigeren (bij begin van pagina)\",\n a11yFollowLink: \"Skiplink volgen\",\n macNote: \"Mac-sneltoetsen worden gebruikt. Command is de Command-toets.\",\n windowsNote: \"Windows/Linux-sneltoetsen worden gebruikt. Ctrl is de Control-toets.\",\n footerHint: \"Druk op {{key}} om deze hulp op elk moment te tonen\",\n close: \"Sluiten\"\n};\nvar AnnotateToolbar = {\n modeGroup: \"Modus\",\n browse: \"Bladeren\",\n annotate: \"Annoteren\",\n selectionGroup: \"Motivatie\",\n clickGroup: \"Klik\",\n shapeGroup: \"Vorm\",\n none: \"Geen\",\n linking: \"Referentie\",\n highlighting: \"Markering\",\n assessing: \"Beoordelen\",\n commenting: \"Opmerking\",\n tagging: \"Labelen\",\n detail: \"Detail\",\n follow: \"Volgen\",\n deleting: \"Verwijderen\",\n jsonld: \"JSON-LD\",\n rectangle: \"Rechthoek\",\n circle: \"Cirkel\",\n polygon: \"Polygoon\"\n};\nvar CollapsibleResourceNavigation = {\n title: \"Navigatie\",\n collapseSidebar: \"Zijbalk inklappen\",\n expandSidebar: \"Zijbalk uitklappen\",\n dragToReorder: \"Slepen om te herordenen\",\n dragToReorderDoc: \"Slepen om {{name}} te herordenen\",\n closeResource: \"Bron sluiten\",\n dragInstructions: \"Om bronnen te herordenen: Gebruik Tab om naar een bron te navigeren. Druk op Alt+pijl omhoog om omhoog te verplaatsen of Alt+pijl omlaag om omlaag te verplaatsen. Voor slepen en neerzetten: Druk op de spatiebalk om het item op te pakken. Gebruik pijltoetsen om het te verplaatsen. Druk nogmaals op de spatiebalk om het neer te zetten.\"\n};\nvar ResourceViewer = {\n deleteConfirmationTitle: \"Annotatie verwijderen\",\n deleteConfirmationMessage: \"Weet je zeker dat je deze annotatie wilt verwijderen? Deze actie kan niet ongedaan worden gemaakt.\",\n deleteConfirmationCancel: \"Annuleren\",\n deleteConfirmationDelete: \"Verwijderen\"\n};\nvar Settings = {\n title: \"Instellingen\",\n lineNumbers: \"Regelnummers\",\n lineNumbersVisible: \"Zichtbaar\",\n lineNumbersHidden: \"Verborgen\",\n theme: \"Thema\",\n themeLight: \"Licht\",\n themeDark: \"Donker\",\n themeSystem: \"Systeem\",\n themeSystemActive: \"Systeem ({{mode}})\",\n themeModeActive: \"{{mode}}-modus gebruiken\",\n language: \"Taal\",\n languageHint: \"Wijzig de taal in de hoofdnavigatie\",\n languageChanging: \"Taal wijzigen...\",\n hoverDelay: \"Zweefvertraging\",\n hoverDelayFast: \"Snel\",\n hoverDelaySlow: \"Langzaam\",\n hoverDelayDescription: \"{{delay}}ms vertraging voordat zweefeffecten verschijnen\"\n};\nvar AnnotateView = {\n ariaLabel: \"Annotatie maken van geselecteerde tekst. Druk op H voor markering of R voor referentie.\",\n tooltip: \"Klik om markering te maken \\u2022 Rechtsklik voor meer opties\"\n};\nvar ReferenceWizard = {\n gatherTitle: \"Verzamelde context\",\n configureGenerationTitle: \"Generatie configureren\",\n configureSearchTitle: \"Zoeken configureren\",\n searchResultsTitle: \"Zoekresultaten\",\n sourceContextLabel: \"Annotatiecontext in resource\",\n connectionsLabel: \"Peer-annotaties\",\n citedByLabel: \"Resource geciteerd door\",\n userHintLabel: \"Hint\",\n userHintPlaceholder: \"Beschrijf waar deze annotatie naar verwijst...\",\n loadingContext: \"Context wordt verzameld...\",\n failedContext: \"Context verzamelen mislukt\",\n cancel: \"Annuleren\",\n generate: \"Genereren\",\n compose: \"Opstellen\",\n resolutionStrategyLabel: \"Resolutiestrategie\",\n back: \"Terug\",\n link: \"Link\",\n score: \"Score\",\n noResults: \"Geen resultaten gevonden\",\n resourceTitle: \"Brontitel\",\n resourceTitlePlaceholder: \"Voer brontitel in...\",\n additionalInstructions: \"Aanvullende instructies\",\n additionalInstructionsPlaceholder: \"Voer aanvullende instructies in...\",\n language: \"Taal\",\n languageHelp: \"Taal voor gegenereerde inhoud\",\n creativity: \"Creativiteit\",\n creativityFocused: \"Gericht\",\n creativityCreative: \"Creatief\",\n maxLength: \"Maximale lengte\",\n maxLengthHelp: \"Maximaal aantal tokens\",\n maxResults: \"Maximale resultaten\",\n semanticScoring: \"Semantische beoordeling\",\n semanticScoringHelp: \"Gebruik AI om resultaten te beoordelen op semantische relevantie\",\n searching: \"Zoeken...\",\n search: \"Zoeken\"\n};\nvar History = {\n embeddingComputed: \"Embedding berekend\"\n};\nvar nl_default = {\n Toolbar,\n ResourceInfoPanel,\n CollaborationPanel,\n AnnotationHistory,\n CommentsPanel,\n HighlightPanel,\n AssessmentPanel,\n TaggingPanel,\n UnifiedAnnotationsPanel,\n StatisticsPanel,\n ReferencesPanel,\n KeyboardShortcuts,\n AnnotateToolbar,\n CollapsibleResourceNavigation,\n ResourceViewer,\n Settings,\n AnnotateView,\n ReferenceWizard,\n History\n};\nexport {\n AnnotateToolbar,\n AnnotateView,\n AnnotationHistory,\n AssessmentPanel,\n CollaborationPanel,\n CollapsibleResourceNavigation,\n CommentsPanel,\n HighlightPanel,\n History,\n KeyboardShortcuts,\n ReferenceWizard,\n ReferencesPanel,\n ResourceInfoPanel,\n ResourceViewer,\n Settings,\n StatisticsPanel,\n TaggingPanel,\n Toolbar,\n UnifiedAnnotationsPanel,\n nl_default as default\n};\n//# sourceMappingURL=nl-W75HEPFL.mjs.map"],"names":["Toolbar","ResourceInfoPanel","CollaborationPanel","AnnotationHistory","CommentsPanel","HighlightPanel","AssessmentPanel","TaggingPanel","UnifiedAnnotationsPanel","StatisticsPanel","ReferencesPanel","KeyboardShortcuts","AnnotateToolbar","CollapsibleResourceNavigation","ResourceViewer","Settings","AnnotateView","ReferenceWizard","History","nl_default"],"mappings":"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"}
|