@forsion/unit 2.13.2 → 2.13.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/main.mjs +3 -3
- package/package.json +1 -1
- package/release.json +5 -5
- package/web/assets/{ArtificialView-Bs_6B211.js → ArtificialView-DS97zlMg.js} +1 -1
- package/web/assets/{AutomationBuilder-C-IFaaBp.js → AutomationBuilder-BsJc8wuC.js} +1 -1
- package/web/assets/{CalendarConfigView-DEsNvVkD.js → CalendarConfigView-BN8mraSo.js} +1 -1
- package/web/assets/{CalendarView-D7ZUE_dr.js → CalendarView-D55PA1vn.js} +1 -1
- package/web/assets/{CapabilityMenu-CrsaTtDe.js → CapabilityMenu-BVrokPpT.js} +1 -1
- package/web/assets/{CheckboxInput-DVO2-1J7.js → CheckboxInput-BuJ3HPm_.js} +1 -1
- package/web/assets/{Chrome-BvpbCvo1.js → Chrome-amTcZNE4.js} +1 -1
- package/web/assets/{CodeView-CB4kG7Y6.js → CodeView-DRVh13k9.js} +3 -3
- package/web/assets/DashboardGridView-D9s9pez_.css +1 -0
- package/web/assets/{DashboardGridView-tgaj9-SM.js → DashboardGridView-DlFyYfUh.js} +2 -2
- package/web/assets/{EventCard-c6s4uGBu.js → EventCard-DUrn2krw.js} +1 -1
- package/web/assets/{ExcalidrawCanvas-NdV86AR3.js → ExcalidrawCanvas-TpbzBF-J.js} +1 -1
- package/web/assets/{FloatingToc-ldOYWe2C.js → FloatingToc-B1d4-5EL.js} +1 -1
- package/web/assets/HomepageView-DnQ_5Obe.css +1 -0
- package/web/assets/{HomepageView-4joJWYlg.js → HomepageView-nzKfbHM-.js} +1 -1
- package/web/assets/{ImageStudioPanels-DgMYAsHj.js → ImageStudioPanels-B2PTq6Yb.js} +1 -1
- package/web/assets/{ImageStudioView-_CYHoOoG.js → ImageStudioView-Cawr6pGW.js} +1 -1
- package/web/assets/{InlineFiles-BIfsx3R-.js → InlineFiles-DKPH5JHz.js} +1 -1
- package/web/assets/{MarkdownBlock-wYEaBBOr.js → MarkdownBlock-BHpDy2qQ.js} +1 -1
- package/web/assets/{ModelPill-DveHcLqq.js → ModelPill-ChzAM3z1.js} +1 -1
- package/web/assets/{MuseLibraryView-Do9RnKiq.js → MuseLibraryView-DLuQ_jyV.js} +2 -2
- package/web/assets/{MuseView-3GL4Ltoj.js → MuseView-CDDwV6SR.js} +2 -2
- package/web/assets/{PageHistoryPanel-BMQC-V_l.js → PageHistoryPanel-BbdXpjJM.js} +2 -2
- package/web/assets/{PdfAnnotator-CyAw8sgq.js → PdfAnnotator-CW0wPWRB.js} +1 -1
- package/web/assets/{PenRow-BSB-h5Pb.js → PenRow-BY-MZLDQ.js} +1 -1
- package/web/assets/{ProductView-B96OeHOP.js → ProductView-0ieVL3rY.js} +1 -1
- package/web/assets/{RightPanel-BgSeCLnw.js → RightPanel-BRexwQ3W.js} +1 -1
- package/web/assets/RunLocationPicker-BrDfOu8-.css +1 -0
- package/web/assets/RunLocationPicker-CadYiE7C.js +43 -0
- package/web/assets/{SketchCard-DAD0jR0i.js → SketchCard-BcXCdBAs.js} +1 -1
- package/web/assets/{StudioGuestSurface-DlUKXBXv.js → StudioGuestSurface-ZJFKnNYF.js} +1 -1
- package/web/assets/{TodoListView-_yFkPUrw.js → TodoListView-DuRdVFgB.js} +1 -1
- package/web/assets/{Tooltip-DXuy9-1_.js → Tooltip-DtDUL18W.js} +1 -1
- package/web/assets/{UnifiedPage-EJNWKzxN.js → UnifiedPage-D7JTfABH.js} +3 -3
- package/web/assets/{amadeus-manual.en-DzRWr4BL.js → amadeus-manual.en-B8J-svqq.js} +1 -1
- package/web/assets/{amadeus-manual.zh-DW32DkL7.js → amadeus-manual.zh-CkCOFnrg.js} +1 -1
- package/web/assets/appStore-ClD7vq5L.css +1 -0
- package/web/assets/{appStore-CidPWYa0.js → appStore-affnJoin.js} +155 -117
- package/web/assets/{arrow-up-right-KPFbRA41.js → arrow-up-right-R4P9Mmxz.js} +1 -1
- package/web/assets/{astryxBridge-Bupzouso.js → astryxBridge-CT2wZJXs.js} +3 -3
- package/web/assets/{automationListSource-1aOVKBLw.js → automationListSource-JVBMsMbC.js} +1 -1
- package/web/assets/{boardSurface-BHuMoQN-.js → boardSurface-Ce0_vf9f.js} +1 -1
- package/web/assets/{book-open-CBeNsIpo.js → book-open-CcXCToyx.js} +1 -1
- package/web/assets/{calendarNavStore-Duyhbmm_.js → calendarNavStore-tQJRVpum.js} +1 -1
- package/web/assets/{canvasPrefs-CxfyDTMT.js → canvasPrefs-CSuX9aLF.js} +1 -1
- package/web/assets/{chatBoxSurface-OBzO1Z5E.js → chatBoxSurface-IG6Vu4Dz.js} +1 -1
- package/web/assets/{circle-question-mark-M8QUJJYk.js → circle-question-mark-O8AhUz35.js} +1 -1
- package/web/assets/{circle-x-Szwop5L_.js → circle-x-AV2ZWulM.js} +1 -1
- package/web/assets/{client-CPUljePZ.js → client-BqhpYbYL.js} +1 -1
- package/web/assets/{code-xml-n9mgGgkv.js → code-xml-DdR58F83.js} +1 -1
- package/web/assets/{codeStudioStore-DXMQwRzG.js → codeStudioStore-Dq5i8nbE.js} +1 -1
- package/web/assets/codingNavigation-CxdCK78-.js +53 -0
- package/web/assets/codingNavigation-_tOR0ell.css +1 -0
- package/web/assets/{create-C19zqt5N.js → create-BgJN5qsj.js} +2 -2
- package/web/assets/{dashboardSurface-BwcH16Qc.js → dashboardSurface-BY-AFB-r.js} +1 -1
- package/web/assets/{deskCapture-B_LKZSPt.js → deskCapture-BD2qD6NI.js} +1 -1
- package/web/assets/{diff2html-DrCCWvpR.js → diff2html-OoRdHZ_O.js} +1 -1
- package/web/assets/{docx-preview-Bi7wekSM.js → docx-preview-B43XC8Cn.js} +1 -1
- package/web/assets/{emoji-DczIG8SO.js → emoji-BPdA62d7.js} +1 -1
- package/web/assets/{floatingTocSurface-rc1ZC7-I.js → floatingTocSurface-BM2SYE_u.js} +1 -1
- package/web/assets/{foldActions-BGocXE-o.js → foldActions-BcyvNVBs.js} +1 -1
- package/web/assets/{folder-CoOsfQ64.js → folder-CCZqnwRc.js} +1 -1
- package/web/assets/{folder-plus-d5MwIMlf.js → folder-plus-BJKT1Pqg.js} +1 -1
- package/web/assets/{gestures-CXFaEydn.js → gestures-BwPbZDkU.js} +1 -1
- package/web/assets/{hand-fuehbnkI.js → hand-DRu7IJdU.js} +1 -1
- package/web/assets/{hard-drive-Bh1DmZg0.js → hard-drive-CXNJUCXw.js} +1 -1
- package/web/assets/i18n-BMo19xaR.css +1 -0
- package/web/assets/i18n.generated-DvY59Zq3.js +15 -0
- package/web/assets/{imageStudio-Dgl1wZNB.js → imageStudio-Axwmd4GW.js} +2 -2
- package/web/assets/imageStudio-DZ0qGU2s.css +1 -0
- package/web/assets/{index-e-MxdHFO.js → index-B1rE_NwA.js} +1 -1
- package/web/assets/{index-lfow5R3O.js → index-BFTY79aq.js} +1 -1
- package/web/assets/{index-38xsQSS9.js → index-BGEkZBs2.js} +1 -1
- package/web/assets/{index-YRWOePBS.js → index-BO2XJc36.js} +1 -1
- package/web/assets/{index-B5UW6SaE.js → index-BYUntVIZ.js} +2 -2
- package/web/assets/{index-2tD0kijW.js → index-C65u4fXd.js} +1 -1
- package/web/assets/{index-BCG8Wnc4.js → index-C_Ohi-I3.js} +1 -1
- package/web/assets/{index-Dff-DL1v.js → index-CkMhazev.js} +1 -1
- package/web/assets/{index-Dc8iMctf.js → index-CobUnTcv.js} +1 -1
- package/web/assets/{index-Dy07SBfH.js → index-D102FOuM.js} +1 -1
- package/web/assets/{index-B8Co6KG3.js → index-D3CYvMpl.js} +1 -1
- package/web/assets/{index-QjVOA7QM.js → index-D78izbLA.js} +1 -1
- package/web/assets/{index-BPqoEOV_.js → index-DDMXVG0h.js} +1 -1
- package/web/assets/{index-CPLtf9Vc.js → index-DY0M_dpd.js} +1 -1
- package/web/assets/{index-7kdR1oL8.js → index-DcbZwhpE.js} +1 -1
- package/web/assets/{index-D4CSH-v1.js → index-Dlkq7gkE.js} +1 -1
- package/web/assets/{index-Ch0FIsJX.js → index-HqmJW2np.js} +1 -1
- package/web/assets/{index-DcRyQ3eU.js → index-LxlyPm0_.js} +1 -1
- package/web/assets/{index-Ce1sNSS8.js → index-Uq4J2aoW.js} +1 -1
- package/web/assets/{index-DvOrTnw2.js → index-WbVt2P8R.js} +1 -1
- package/web/assets/{index-Df9jregv.js → index-XyjIhkPw.js} +1 -1
- package/web/assets/{index-BqGpbntz.js → index-Y2kzYlZq.js} +1 -1
- package/web/assets/{index-CnDAYLti.js → index-mB0EQkyZ.js} +1 -1
- package/web/assets/{index-fViJsYjM.js → index-pJh7JN7_.js} +1 -1
- package/web/assets/{index-Dx9aIoyo.js → index-taRxNsbp.js} +1 -1
- package/web/assets/{invitePage-Dgl3-c_m.js → invitePage-BW0BH8Ac.js} +1 -1
- package/web/assets/{ipc-CNlIRMtU.js → ipc-D7yENkjV.js} +1 -1
- package/web/assets/{jszip.min-tyV0GaJg.js → jszip.min-UE5d5vPJ.js} +1 -1
- package/web/assets/{layout-grid-DFmwM9NU.js → layout-grid-Hs3eDA07.js} +1 -1
- package/web/assets/{linkFollow-iP2zfbA3.js → linkFollow-Msu1XH9v.js} +4 -4
- package/web/assets/{list-tree-i07HsP3D.js → list-tree-DmuRb-p9.js} +1 -1
- package/web/assets/{listFold-Aea6I0Sa.js → listFold-CKxjyY5_.js} +1 -1
- package/web/assets/{lock-TSDKuCod.js → lock-kffGfeHt.js} +1 -1
- package/web/assets/{log-out-DK84lW5n.js → log-out-B5gEP0tF.js} +1 -1
- package/web/assets/main-DIyFlyfK.js +20 -0
- package/web/assets/markdownEditorSurface-Cx2rqFAY.js +3 -0
- package/web/assets/{message-square-plus-3wFslIMY.js → message-square-plus-DxBPIhPS.js} +1 -1
- package/web/assets/{messages-DEAGRsC3.js → messages-4w1Khzm1.js} +1 -1
- package/web/assets/minus-CfoZ4oxr.js +1 -0
- package/web/assets/{mobileEntry-5UaAITwY.js → mobileEntry-B8JwR53-.js} +1 -1
- package/web/assets/{nativeDownload-B3JGkABw.js → nativeDownload-Udrv_tmU.js} +1 -1
- package/web/assets/{pageChrome-DFi9zs6F.js → pageChrome-D-9npbUE.js} +1 -1
- package/web/assets/{pageChrome-BDHHmRnt.css → pageChrome-eO9pb2fH.css} +1 -1
- package/web/assets/{pageTree-DZ7Eiro-.js → pageTree-CIXFRCLk.js} +2 -2
- package/web/assets/{pen-tool-ChGmX6g_.js → pen-tool-D_Y9We9x.js} +1 -1
- package/web/assets/{pencil-CJsJD7M_.js → pencil-DGiTRzW1.js} +1 -1
- package/web/assets/phoneList-BQfCJwKF.css +1 -0
- package/web/assets/{phoneList-DrxIwJxQ.js → phoneList-DHUia6HT.js} +1 -1
- package/web/assets/{pluginChat-0QI9a8Q1.js → pluginChat-BXuJiMYi.js} +1 -1
- package/web/assets/{redo-2-CI57sDFr.js → redo-2-QgiKEg9T.js} +1 -1
- package/web/assets/{rotate-ccw-xgT_0UN9.js → rotate-ccw-BLoH5er1.js} +1 -1
- package/web/assets/{sharePage-C2Yqx0NQ.js → sharePage-DYYN5usb.js} +2 -2
- package/web/assets/{shareViewer-DKPWhTJv.js → shareViewer-BzuSyJv_.js} +1 -1
- package/web/assets/{star-C9KTji9N.js → star-BmywYD3u.js} +1 -1
- package/web/assets/{tableSurface-cYs6dX6B.js → tableSurface-21LDYY_G.js} +1 -1
- package/web/assets/{terminal-DPZazOQ2.js → terminal-BlmA_Z1C.js} +1 -1
- package/web/assets/{terminalView-CsJmxE_m.js → terminalView-SAxITnRW.js} +1 -1
- package/web/assets/{type-C5J875vb.js → type-DmIL6FB-.js} +1 -1
- package/web/assets/{undo-2-BOUt5qks.js → undo-2-yMeXc8Wi.js} +1 -1
- package/web/assets/{unitAccount-BIAIxKNp.js → unitAccount-BPYRAa3m.js} +1 -1
- package/web/assets/{unitBridge-b2C6zb3a.js → unitBridge-BNVzai6X.js} +1 -1
- package/web/assets/{unitCloudTransport-NGtDDKWo.js → unitCloudTransport-iFweA1xk.js} +1 -1
- package/web/assets/{unitOwnerAccess-CwH9ApZT.js → unitOwnerAccess-Bggl7bDP.js} +1 -1
- package/web/assets/{unitShim-CY8EVkKD.js → unitShim-BP2nBO_k.js} +3 -3
- package/web/assets/{upload-CrbEAW8C.js → upload-D20PZHXc.js} +1 -1
- package/web/assets/userSpaces-CrLrKklx.js +1 -0
- package/web/assets/{viewportLock-Bi3orrUs.css → viewportLock-DO1lzA2N.css} +1 -1
- package/web/assets/viewportLock-tlT6H_Hc.js +629 -0
- package/web/assets/{workflow-DY2Cnaei.js → workflow-Bd6xBHiT.js} +1 -1
- package/web/assets/{zoom-in-BcuPvIYd.js → zoom-in-_TgFOpyv.js} +1 -1
- package/web/index.html +2 -2
- package/web/assets/DashboardGridView-hpRmBr9B.css +0 -1
- package/web/assets/HomepageView-Cxf3AWBu.css +0 -1
- package/web/assets/RunLocationPicker-CEmFio4n.css +0 -1
- package/web/assets/RunLocationPicker-M1UoJyjf.js +0 -38
- package/web/assets/appStore-DeaC1U32.css +0 -1
- package/web/assets/codingNavigation-CCjs1kon.js +0 -53
- package/web/assets/codingNavigation-yp19w6uu.css +0 -1
- package/web/assets/i18n-DjziAw8r.css +0 -1
- package/web/assets/i18n.generated-BiQFRL2U.js +0 -15
- package/web/assets/imageStudio--KF9gwHA.css +0 -1
- package/web/assets/main-D7CEGndC.js +0 -20
- package/web/assets/markdownEditorSurface-DISu_twy.js +0 -3
- package/web/assets/minus-BBdfT_sc.js +0 -1
- package/web/assets/phoneList-DvpzD3zT.css +0 -1
- package/web/assets/userSpaces-B_Njvel_.js +0 -1
- package/web/assets/viewportLock-DZ927PNz.js +0 -629
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./appStore-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./appStore-affnJoin.js","./nativeDownload-Udrv_tmU.js","./ipc-D7yENkjV.js","./client-BqhpYbYL.js","./appStore-ClD7vq5L.css","./invitePage-BW0BH8Ac.js","./mobileEntry-B8JwR53-.js","./viewportLock-tlT6H_Hc.js","./UnifiedPage-D7JTfABH.js","./MarkdownBlock-BHpDy2qQ.js","./index-Y2kzYlZq.js","./linkFollow-Msu1XH9v.js","./emoji-BPdA62d7.js","./listFold-CKxjyY5_.js","./book-open-CcXCToyx.js","./MarkdownBlock--__nPQGh.css","./pageChrome-D-9npbUE.js","./upload-D20PZHXc.js","./pageChrome-eO9pb2fH.css","./SketchCard-BcXCdBAs.js","./arrow-up-right-R4P9Mmxz.js","./Chrome-amTcZNE4.js","./minus-CfoZ4oxr.js","./canvasPrefs-CSuX9aLF.js","./hand-DRu7IJdU.js","./type-DmIL6FB-.js","./foldActions-BcyvNVBs.js","./lock-kffGfeHt.js","./undo-2-yMeXc8Wi.js","./code-xml-DdR58F83.js","./message-square-plus-DxBPIhPS.js","./UnifiedPage-CWXc_mo1.css","./RunLocationPicker-CadYiE7C.js","./codeStudioStore-Dq5i8nbE.js","./RightPanel-BRexwQ3W.js","./folder-plus-BJKT1Pqg.js","./folder-CCZqnwRc.js","./pencil-DGiTRzW1.js","./phoneList-DHUia6HT.js","./phoneList-BQfCJwKF.css","./ModelPill-ChzAM3z1.js","./ModelPill-CzdNh7Mt.css","./create-BgJN5qsj.js","./create-BgE3edmZ.css","./approvalText-Cy2UAUAQ.js","./RunLocationPicker-BrDfOu8-.css","./codingNavigation-CxdCK78-.js","./pdf.worker.min-CGb3BKV9.js","./zoom-in-_TgFOpyv.js","./InlineFiles-DKPH5JHz.js","./layout-grid-Hs3eDA07.js","./rotate-ccw-BLoH5er1.js","./terminal-BlmA_Z1C.js","./circle-x-AV2ZWulM.js","./circle-question-mark-O8AhUz35.js","./FloatingToc-B1d4-5EL.js","./codingNavigation-_tOR0ell.css","./hard-drive-CXNJUCXw.js","./CapabilityMenu-BVrokPpT.js","./CapabilityMenu-CTIzmTJB.css","./userSpaces-CrLrKklx.js","./automationListSource-JVBMsMbC.js","./messages-4w1Khzm1.js","./workflow-Bd6xBHiT.js","./list-tree-DmuRb-p9.js","./star-BmywYD3u.js","./DashboardGridView-DlFyYfUh.js","./pageTree-CIXFRCLk.js","./pluginExt-Byb64tQO.js","./pen-tool-D_Y9We9x.js","./redo-2-QgiKEg9T.js","./DashboardGridView-D9s9pez_.css","./AutomationBuilder-BsJc8wuC.js","./gestures-BwPbZDkU.js","./MuseView-CDDwV6SR.js","./i18n.generated-DvY59Zq3.js","./i18n-BMo19xaR.css","./log-out-B5gEP0tF.js","./index-DY0M_dpd.js","./StudioGuestSurface-ZJFKnNYF.js","./viewportLock-DO1lzA2N.css","./launchpad-C2c1MSVX.css","./mobileEntry-DS1vohuL.css","./main-DIyFlyfK.js","./main-BiS_5wrB.css"])))=>i.map(i=>d[i]);
|
|
2
2
|
function Hd(e,t){for(var n=0;n<t.length;n++){const i=t[n];if(typeof i!="string"&&!Array.isArray(i)){for(const s in i)if(s!=="default"&&!(s in e)){const r=Object.getOwnPropertyDescriptor(i,s);r&&Object.defineProperty(e,s,r.get?r:{enumerable:!0,get:()=>i[s]})}}}return Object.freeze(Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}))}(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))i(s);new MutationObserver(s=>{for(const r of s)if(r.type==="childList")for(const o of r.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&i(o)}).observe(document,{childList:!0,subtree:!0});function n(s){const r={};return s.integrity&&(r.integrity=s.integrity),s.referrerPolicy&&(r.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?r.credentials="include":s.crossOrigin==="anonymous"?r.credentials="omit":r.credentials="same-origin",r}function i(s){if(s.ep)return;s.ep=!0;const r=n(s);fetch(s.href,r)}})();const qd="modulepreload",Wd=function(e,t){return new URL(e,t).href},zo={},dt=function(t,n,i){let s=Promise.resolve();if(n&&n.length>0){let c=function(d){return Promise.all(d.map(u=>Promise.resolve(u).then(h=>({status:"fulfilled",value:h}),h=>({status:"rejected",reason:h}))))};const o=document.getElementsByTagName("link"),a=document.querySelector("meta[property=csp-nonce]"),l=a?.nonce||a?.getAttribute("nonce");s=c(n.map(d=>{if(d=Wd(d,i),d in zo)return;zo[d]=!0;const u=d.endsWith(".css"),h=u?'[rel="stylesheet"]':"";if(i)for(let m=o.length-1;m>=0;m--){const p=o[m];if(p.href===d&&(!u||p.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${d}"]${h}`))return;const f=document.createElement("link");if(f.rel=u?"stylesheet":qd,u||(f.as="script"),f.crossOrigin="",f.href=d,l&&f.setAttribute("nonce",l),document.head.appendChild(f),u)return new Promise((m,p)=>{f.addEventListener("load",m),f.addEventListener("error",()=>p(new Error(`Unable to preload CSS for ${d}`)))})}))}function r(o){const a=new Event("vite:preloadError",{cancelable:!0});if(a.payload=o,window.dispatchEvent(a),!a.defaultPrevented)throw o}return s.then(o=>{for(const a of o||[])a.status==="rejected"&&r(a.reason);return t().catch(r)})};let dr;function Vd(e){dr=e}function zi(e){return dr?`${e}:account:${encodeURIComponent(dr)}`:e}function Zd(e,t){try{const n=new URL(e);if(n.protocol!=="https:"&&n.protocol!=="http:")return null;const i=t.split(".")[1];if(!i)return null;const s=i.replace(/-/g,"+").replace(/_/g,"/"),r=Uint8Array.from(atob(s),l=>l.charCodeAt(0)),o=JSON.parse(new TextDecoder().decode(r)),a=o.userId??o.sub;return typeof a!="string"&&typeof a!="number"||!String(a).trim()?null:`${n.origin}${n.pathname.replace(/\/+$/,"")}::${String(a)}`}catch{return null}}const fr="forsion.cloudCacheAccount",Kd=e=>!e.includes(":account:")&&(e==="tangu2_named_layouts"||/^tangu2_layout_(?:v[34]|detached_.+)$/.test(e)||/^lcl_sc_(?:layout|named_layouts)_v1(?:_.+)?$/.test(e));function Al(){try{for(const e of Object.keys(localStorage))e.includes(":account:")||(e==="amadeus_tree_snap"||e==="amadeus.cloudVaultId"||e.startsWith("amadeus_last_page:")||e==="forsion.deskBySession"||e==="forsion_tangu_unread_sessions"||Kd(e))&&localStorage.removeItem(e);localStorage.removeItem(fr)}catch{}}function ni(e,t){return Zd(e,t)}function Yi(e,t){const n=ni(e,t);Vd(n??`anonymous:${Date.now()}:${Math.random().toString(36).slice(2)}`);try{(!n||localStorage.getItem(fr)!==n)&&Al(),n&&localStorage.setItem(fr,n)}catch{}}class an extends Error{constructor(){super("The account changed while the request was in progress"),this.name="AccountChangedError"}}class wi extends Error{constructor(t,n){super(n),this.status=t,this.name="AccountHttpError"}status}function Gd(e){const t=new URL(e.apiBase,typeof location>"u"?void 0:location.href);if(!/^https?:$/.test(t.protocol)||t.username||t.password||t.search||t.hash)throw new Error("Invalid account API base");t.pathname=t.pathname.replace(/\/+$/,"")+"/";const n=t.href.replace(/\/$/,""),i=e.fetch??globalThis.fetch.bind(globalThis),s=e.tokenKey??"forsion_token",r=e.storage,o=new Set(e.onChange?[e.onChange]:[]),a=new Set(e.beforeChange?[e.beforeChange]:[]),l=new Set;let c=f(),d=null,u=0,h=Promise.resolve();function f(){if(!r)return"";try{return r.getItem(s)||""}catch{return""}}function m(){u++;for(const I of l)I.abort(new an);l.clear()}function p(){if(r){const I=f();I!==c&&(m(),c=I,d=null)}return c}function b(I){const y=p(),z=I===void 0?d?!0:null:I;return{loggedIn:!!y&&z!==!1,tokenValid:y?z:null,cloudUrl:n,tokenSource:y?"tangu-login":null,username:d?.username??null,accountId:d?`${n}::${d.userId}`:null,...d??{}}}function w(){const I=b();for(const y of o)try{y(I)}catch(z){console.error("[account] Change listener failed:",z)}}function T(I,y){if(p()!==y||u!==I)throw new an}function S(I){const y=h.then(I);return h=y.catch(()=>{}),y}const C=(e.allowedPaths??[]).map(I=>{const y=new URL(I,t);if(!I.startsWith("/")||I.startsWith("//")||I.includes("\\")||I.includes("%")||y.origin!==t.origin||y.search||y.hash||y.pathname!==I||I==="/")throw new Error("Invalid account request namespace");return I.replace(/\/+$/,"")}),$=(I,y)=>I===y||I.startsWith(y+"/"),v=I=>$(I,t.pathname.slice(0,-1))||C.some(y=>$(I,y));function A(I){const y=I.split(/[?#]/,1)[0];if(!I||I.startsWith("//")||y.includes("\\"))throw new Error("Request must stay inside the account API base");const z=C.some(X=>$(y,X)),W=/^[a-z][a-z\d+.-]*:/i.test(I)?new URL(I):new URL(z?I:I.replace(/^\//,""),t);let H;try{H=new URL(decodeURIComponent(W.pathname).replace(/\\/g,"/"),t.origin)}catch{throw new Error("Request must stay inside the account API base")}if(W.origin!==t.origin||W.username||W.password||W.hash||!v(W.pathname)||H.origin!==t.origin||!v(H.pathname))throw new Error("Request must stay inside the account API base");return W}const P=e.identityUrl?new URL(e.identityUrl,t):A("/auth/me");if(P.origin!==t.origin||P.username||P.password||P.hash)throw new Error("Identity endpoint must use the account API origin");function q(I,y,z,W){const H=I.body?.getReader();let X;const ne=()=>{X&&W.removeEventListener("abort",X),z()},pe=H?new ReadableStream({start(Ce){X=()=>{const De=W.reason??new an;Ce.error(De),H.cancel(De).catch(()=>{}),ne()},W.addEventListener("abort",X,{once:!0}),W.aborted&&X()},async pull(Ce){try{y();const De=await H.read();y(),De.done?(Ce.close(),ne()):Ce.enqueue(De.value)}catch(De){Ce.error(De),H.cancel(De).catch(()=>{}),ne()}},async cancel(Ce){ne(),await H.cancel(Ce)}},{highWaterMark:0}):null;H||z();const we=new Response(pe,{status:I.status,statusText:I.statusText,headers:I.headers});Object.defineProperties(we,{url:{value:I.url},redirected:{value:I.redirected},type:{value:I.type}});for(const Ce of["json","text","arrayBuffer","blob","formData"]){const De=we[Ce].bind(we);Object.defineProperty(we,Ce,{configurable:!0,value:async()=>{y();const Xt=await De();return y(),Xt}})}const qe=we.clone.bind(we);return Object.defineProperty(we,"clone",{value:()=>(y(),q(qe(),y,()=>{},W))}),we}async function R(I,y={},z=p()){const W=p(),H=u,X=new AbortController,ne=()=>{if(T(H,W),X.signal.aborted)throw X.signal.reason??new DOMException("The request was aborted","AbortError")},pe=()=>X.abort(y.signal?.reason);y.signal?.aborted?pe():y.signal?.addEventListener("abort",pe,{once:!0}),l.add(X);const we=()=>{l.delete(X),y.signal?.removeEventListener("abort",pe)},qe=new Headers(y.headers);qe.delete("Authorization"),z&&qe.set("Authorization",`Bearer ${z}`);try{ne();const Ce=await i(I.href,{...y,headers:qe,signal:X.signal,redirect:"error",credentials:"omit",cache:"no-store"});return ne(),q(Ce,ne,we,X.signal)}catch(Ce){throw we(),ne(),Ce}}function U(I,y){const z=new Headers(y?.headers).get("Authorization");if(z&&z!==`Bearer ${p()}`)throw new an;return R(A(I),y)}function B(I){const y=I,z=y?.userId??y?.id;if(typeof z!="string"&&typeof z!="number"||!String(z).trim()||typeof y.username!="string"||!y.username)throw new Error("The account endpoint returned an invalid identity");return{userId:String(z),username:y.username,role:typeof y.role=="string"?y.role:"user",...typeof y.tenantId=="string"?{tenantId:y.tenantId}:{},...typeof y.workspaceId=="string"?{workspaceId:y.workspaceId}:{},nickname:typeof y.nickname=="string"?y.nickname:null,avatar:typeof y.avatar=="string"?y.avatar:null,membershipTier:typeof y.membershipTier=="string"?y.membershipTier:null}}async function ee(I){const y=await R(P,{},I);if(!y.ok)throw y.body?.cancel(),new wi(y.status,"Could not verify the account session");return B(await y.json())}async function oe(){const I=p(),y=u;if(!I)return b();try{const z=await ee(I);return T(y,I),d=z,b(!0)}catch(z){if(T(y,I),z instanceof wi&&(z.status===401||z.status===403))return d=null,b(!1);if(z instanceof an)throw z;return b(null)}}async function te(){for(const I of a)await I()}function ue(I,y){r&&(I?r.setItem(s,I):r.removeItem(s)),m(),c=I,d=y,w()}async function fe(I){if(!I.trim())throw new Error("An account token is required");const y=p(),z=u,W=await ee(I);if(T(z,y),I===y)return d=W,b(!0);try{return await te(),T(z,y),ue(I,W),b(!0)}catch(H){throw w(),H}}function ye(I){return S(()=>fe(I))}function ce(I){return S(async()=>{const y=await R(A("/auth/login"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(I)},"");if(!y.ok)throw y.body?.cancel(),new wi(y.status,"Account sign-in failed");const z=await y.json();if(typeof z?.token!="string")throw new Error("Sign-in did not return an account token");return fe(z.token)})}function _(){const I=p(),y=u;return S(async()=>{T(y,I);const z=p(),W=u;if(z)try{await te(),T(W,z);const H=await U("/auth/logout",{method:"POST"});if(!H.ok&&H.status!==401)throw H.body?.cancel(),new wi(H.status,"Account sign-out failed; the session was retained");if(H.ok&&H.status!==204){if((await H.json())?.ok!==!0)throw new Error("Account sign-out was not acknowledged; the session was retained")}else H.body?.cancel();T(W,z),ue("",null)}catch(H){throw w(),H}})}function E(I={}){const y=typeof I=="string"?I:I.expectedToken??p(),z=typeof I=="string"||I.prepare!==!1;return S(async()=>{if(p()===y)try{z&&await te(),p()===y&&ue("",null)}catch(W){throw w(),W}})}return{getToken:p,getIdentity:()=>(p(),d?{...d}:null),get generation(){return p(),u},authStatus:oe,adoptToken:ye,signIn:ce,login:(I,y)=>ce({username:I,password:y}),logout:_,clearSession:E,request:U,subscribe(I){return o.add(I),()=>{o.delete(I)}},beforeChange(I){return a.add(I),()=>{a.delete(I)}}}}function Yd(e){const t=new URL(e.apiBase),n=t.pathname.replace(/\/+$/,"");return async(i,s)=>{const r=new URL(typeof i=="string"?i:i instanceof URL?i.href:i.url,location.href);if(!(r.origin===t.origin&&(r.pathname===n||r.pathname.startsWith(n+"/"))))return e.fallback(i,s);const a=e.getToken(),c=new Headers(s?.headers??(i instanceof Request?i.headers:void 0)).get("Authorization");if(c&&c!==`Bearer ${a}`)throw new an;let d=s;if(i instanceof Request){const u=new Request(i,s);d={method:u.method,headers:u.headers,signal:u.signal,body:u.body,...u.body?{duplex:"half"}:{}}}return e.request(r.href,d)}}const Tl="forsion_token";let ki;function xn(){if(!ki){let e;try{e=localStorage}catch{}ki=Gd({apiBase:_n(),storage:e,tokenKey:Tl,onChange:()=>Yi(_n(),ki?.getToken()||"")})}return ki}function un(){return xn().getToken()}function Wt(e,t=!1){const n=e??location.origin+"./";location.replace("/auth?redirect="+encodeURIComponent(n)+"&app=tangu-web"+(t?"&logout=1":""))}async function El(){const e=new URL(location.href),t=e.searchParams.get("token");if(!t)return!0;e.searchParams.delete("token"),history.replaceState(null,"",e.toString());try{return await xn().adoptToken(t),!0}catch{return Wt(void 0,!0),!1}}async function Jd(){if(!await El())return!1;const e=un();if(e){if((await xn().authStatus()).tokenValid!==!1)return Yi(_n(),e),!0;await xn().clearSession(e)}return Wt(location.origin+location.pathname),!1}function Mo(){return un()}function _n(){return(location.origin+"/api").replace(/\/$/,"")}function Il(){const e=xn(),t=e.getToken();e.clearSession({expectedToken:t,prepare:!1}).then(()=>{e.getToken()||(Al(),Wt(void 0,!0))}).catch(n=>console.error("[account] Could not leave the expired session:",n))}async function Qd(){if(!await El())return!1;const e=xn(),t=e.getToken();if(!t)return Wt(),!1;if((await e.authStatus()).tokenValid===!1)return await e.clearSession(t),Wt(void 0,!0),!1;const i=_n(),s=i;Yi(i,t);const r=window.fetch.bind(window),o=e.authStatus,a=(h="?")=>{const f=un();return f?`${h}token=${encodeURIComponent(f)}`:""},l=h=>{let f=!1;try{f=localStorage.getItem("lcl.uiMode")==="mobile"}catch{}f?location.href=h:window.open(h,"_blank","noopener")},c=async(h,f,m)=>{const p=un();if(!p)return{status:401,json:null};try{const b=await e.request(f,{method:h,headers:{Authorization:`Bearer ${p}`,...m!==void 0?{"Content-Type":"application/json"}:{}},body:m!==void 0?JSON.stringify(m):void 0});return{status:b.status,json:await b.json().catch(()=>null)}}catch(b){return{status:0,json:{detail:String(b?.message||b)}}}};window.tangu={cloudWeb:!0,getConfig:async()=>({mode:"external",backendUrl:s,token:un(),modelId:"",cloudUrl:i,cloudApiBase:i,sandbox:"none"}),authStatus:o,forsionLogin:async()=>{e.getToken()&&await e.logout(),Wt(void 0,!0)},forsionLogout:async()=>{await e.logout(),Wt(void 0,!0)},onAuthWillChange:e.beforeChange,onAuthChanged:e.subscribe,openAccountCenter:async h=>{const f=h&&/^[a-z0-9-]+$/i.test(h)?`#${h}`:"";return l(`/account/${a()}${f}`),{ok:!0}},openPayCenter:async()=>{const h=encodeURIComponent(location.origin+"/account/");return l(`/pay/?tab=membership${a("&")}&redirect=${h}`),{ok:!0}},accountQuota:()=>c("GET","/token-quota/my"),accountUseResetCard:h=>h!==void 0&&h!=="both"&&h!=="weekly"?Promise.resolve({status:400,json:{error:"invalid_type",detail:`invalid reset card type: ${h}`}}):c("POST","/token-quota/reset-card/use",{type:h??"both"})};const u=new URL(i).pathname.replace(/\/+$/,"");return window.fetch=Yd({apiBase:i,getToken:e.getToken,fallback:r,request:async(h,f)=>{const m=e.getToken(),p=e.generation,b=await e.request(h,f),w=new URL(h);return m===e.getToken()&&p===e.generation&&b.status===401&&(w.pathname.startsWith(u+"/agent/")||w.pathname.startsWith(u+"/amadeus/"))&&Il(),b}}),window.addEventListener("storage",h=>{h.key!==Tl||h.oldValue===h.newValue||(Yi(i,un()),location.reload())}),!0}const Xd="amadeus.page/3",ef="3.0.0";let tf=e=>crypto.getRandomValues(new Uint8Array(e)),nf=(e,t,n)=>{let i=256-256%e.length;if(i===256){let r=e.length-1;return(o=t)=>{if(!o)return"";let a="";for(;;){let l=n(o),c=o;for(;c--;)if(a+=e[l[c]&r],a.length>=o)return a}}}let s=Math.ceil(1.6*256*t/i);return(r=t)=>{if(!r)return"";let o="";for(;;){let a=n(s),l=s;for(;l--;)if(a[l]<i&&(o+=e[a[l]%e.length],o.length>=r))return o}}},sf=(e,t=21)=>nf(e,t|0,tf);const rf="0123456789abcdefghijklmnopqrstuvwxyz",Hr=sf(rf,8);function Ji(e,t=1){let n=0;for(const i of e){const s=Number.parseInt(String(i),10);Number.isSafeInteger(s)&&String(s)===String(i)&&s>n&&(n=s)}return String(Math.max(n+1,t))}function of(e,t){const n=Number.parseInt(String(t),10);return!Number.isSafeInteger(n)||String(n)!==String(t)?e:Math.max(e??0,n+1)}function Pl(){return`pg_${Hr()}`}function af(){return`row_${Hr()}`}function lf(){return`col_${Hr()}`}function Ol(e){const t=e.split(/[\\/]/).pop()??e,n=t.lastIndexOf(".");return n>0?t.slice(0,n):t}function $l(e){return e.split(/[\\/]/).pop()??e}const cf=/^<!--\s*a\s+([A-Za-z0-9_-]+)\s*-->\s*$/,uf=/^<!--\s*\/a\s+([A-Za-z0-9_-]+)\s*-->\s*$/;function jo(e){return`<!-- a ${e} -->`}function Rl(e){const t=[];let n=null,i=[];const s=()=>{const r=i.join(`
|
|
3
3
|
`).replace(/^(?:[ \t]*\r?\n)+/,"").trimEnd();(n!==null||r)&&t.push({id:n,content:r}),i=[]};for(const r of e.split(`
|
|
4
4
|
`)){const o=cf.exec(r);if(o)s(),n=o[1];else{const a=uf.exec(r);a&&n!==null&&a[1]===n?(s(),n=null):i.push(r)}}return s(),t}var Bo;function D(e,t,n){function i(a,l){if(a._zod||Object.defineProperty(a,"_zod",{value:{def:l,constr:o,traits:new Set},enumerable:!1}),a._zod.traits.has(e))return;a._zod.traits.add(e),t(a,l);const c=o.prototype,d=Object.keys(c);for(let u=0;u<d.length;u++){const h=d[u];h in a||(a[h]=c[h].bind(a))}}const s=n?.Parent??Object;class r extends s{}Object.defineProperty(r,"name",{value:e});function o(a){var l;const c=n?.Parent?new r:this;i(c,a),(l=c._zod).deferred??(l.deferred=[]);for(const d of c._zod.deferred)d();return c}return Object.defineProperty(o,"init",{value:i}),Object.defineProperty(o,Symbol.hasInstance,{value:a=>n?.Parent&&a instanceof n.Parent?!0:a?._zod?.traits?.has(e)}),Object.defineProperty(o,"name",{value:e}),o}class yn extends Error{constructor(){super("Encountered Promise during synchronous parse. Use .parseAsync() instead.")}}class Nl extends Error{constructor(t){super(`Encountered unidirectional transform during encode: ${t}`),this.name="ZodEncodeError"}}(Bo=globalThis).__zod_globalConfig??(Bo.__zod_globalConfig={});const qr=globalThis.__zod_globalConfig;function Et(e){return qr}function Ll(e){const t=Object.values(e).filter(i=>typeof i=="number");return Object.entries(e).filter(([i,s])=>t.indexOf(+i)===-1).map(([i,s])=>s)}function hr(e,t){return typeof t=="bigint"?t.toString():t}function Wr(e){return{get value(){{const t=e();return Object.defineProperty(this,"value",{value:t}),t}}}}function Vr(e){return e==null}function Zr(e){const t=e.startsWith("^")?1:0,n=e.endsWith("$")?e.length-1:e.length;return e.slice(t,n)}function df(e,t){const n=e/t,i=Math.round(n),s=Number.EPSILON*Math.max(Math.abs(n),1);return Math.abs(n-i)<s?0:n-i}const Uo=Symbol("evaluating");function me(e,t,n){let i;Object.defineProperty(e,t,{get(){if(i!==Uo)return i===void 0&&(i=Uo,i=n()),i},set(s){Object.defineProperty(e,t,{value:s})},configurable:!0})}function Qt(e,t,n){Object.defineProperty(e,t,{value:n,writable:!0,enumerable:!0,configurable:!0})}function Dt(...e){const t={};for(const n of e){const i=Object.getOwnPropertyDescriptors(n);Object.assign(t,i)}return Object.defineProperties({},t)}function Ho(e){return JSON.stringify(e)}function ff(e){return e.toLowerCase().trim().replace(/[^\w\s-]/g,"").replace(/[\s_-]+/g,"-").replace(/^-+|-+$/g,"")}const Fl="captureStackTrace"in Error?Error.captureStackTrace:(...e)=>{};function Qi(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}const hf=Wr(()=>{if(qr.jitless||typeof navigator<"u"&&navigator?.userAgent?.includes("Cloudflare"))return!1;try{const e=Function;return new e(""),!0}catch{return!1}});function Cn(e){if(Qi(e)===!1)return!1;const t=e.constructor;if(t===void 0||typeof t!="function")return!0;const n=t.prototype;return!(Qi(n)===!1||Object.prototype.hasOwnProperty.call(n,"isPrototypeOf")===!1)}function Dl(e){return Cn(e)?{...e}:Array.isArray(e)?[...e]:e instanceof Map?new Map(e):e instanceof Set?new Set(e):e}const pf=new Set(["string","number","symbol"]);function An(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function zt(e,t,n){const i=new e._zod.constr(t??e._zod.def);return(!t||n?.parent)&&(i._zod.parent=e),i}function J(e){const t=e;if(!t)return{};if(typeof t=="string")return{error:()=>t};if(t?.message!==void 0){if(t?.error!==void 0)throw new Error("Cannot specify both `message` and `error` params");t.error=t.message}return delete t.message,typeof t.error=="string"?{...t,error:()=>t.error}:t}function mf(e){return Object.keys(e).filter(t=>e[t]._zod.optin==="optional"&&e[t]._zod.optout==="optional")}const gf={safeint:[Number.MIN_SAFE_INTEGER,Number.MAX_SAFE_INTEGER],int32:[-2147483648,2147483647],uint32:[0,4294967295],float32:[-34028234663852886e22,34028234663852886e22],float64:[-Number.MAX_VALUE,Number.MAX_VALUE]};function bf(e,t){const n=e._zod.def,i=n.checks;if(i&&i.length>0)throw new Error(".pick() cannot be used on object schemas containing refinements");const r=Dt(e._zod.def,{get shape(){const o={};for(const a in t){if(!(a in n.shape))throw new Error(`Unrecognized key: "${a}"`);t[a]&&(o[a]=n.shape[a])}return Qt(this,"shape",o),o},checks:[]});return zt(e,r)}function yf(e,t){const n=e._zod.def,i=n.checks;if(i&&i.length>0)throw new Error(".omit() cannot be used on object schemas containing refinements");const r=Dt(e._zod.def,{get shape(){const o={...e._zod.def.shape};for(const a in t){if(!(a in n.shape))throw new Error(`Unrecognized key: "${a}"`);t[a]&&delete o[a]}return Qt(this,"shape",o),o},checks:[]});return zt(e,r)}function wf(e,t){if(!Cn(t))throw new Error("Invalid input to extend: expected a plain object");const n=e._zod.def.checks;if(n&&n.length>0){const r=e._zod.def.shape;for(const o in t)if(Object.getOwnPropertyDescriptor(r,o)!==void 0)throw new Error("Cannot overwrite keys on object schemas containing refinements. Use `.safeExtend()` instead.")}const s=Dt(e._zod.def,{get shape(){const r={...e._zod.def.shape,...t};return Qt(this,"shape",r),r}});return zt(e,s)}function kf(e,t){if(!Cn(t))throw new Error("Invalid input to safeExtend: expected a plain object");const n=Dt(e._zod.def,{get shape(){const i={...e._zod.def.shape,...t};return Qt(this,"shape",i),i}});return zt(e,n)}function vf(e,t){if(e._zod.def.checks?.length)throw new Error(".merge() cannot be used on object schemas containing refinements. Use .safeExtend() instead.");const n=Dt(e._zod.def,{get shape(){const i={...e._zod.def.shape,...t._zod.def.shape};return Qt(this,"shape",i),i},get catchall(){return t._zod.def.catchall},checks:t._zod.def.checks??[]});return zt(e,n)}function Sf(e,t,n){const s=t._zod.def.checks;if(s&&s.length>0)throw new Error(".partial() cannot be used on object schemas containing refinements");const o=Dt(t._zod.def,{get shape(){const a=t._zod.def.shape,l={...a};if(n)for(const c in n){if(!(c in a))throw new Error(`Unrecognized key: "${c}"`);n[c]&&(l[c]=e?new e({type:"optional",innerType:a[c]}):a[c])}else for(const c in a)l[c]=e?new e({type:"optional",innerType:a[c]}):a[c];return Qt(this,"shape",l),l},checks:[]});return zt(t,o)}function xf(e,t,n){const i=Dt(t._zod.def,{get shape(){const s=t._zod.def.shape,r={...s};if(n)for(const o in n){if(!(o in r))throw new Error(`Unrecognized key: "${o}"`);n[o]&&(r[o]=new e({type:"nonoptional",innerType:s[o]}))}else for(const o in s)r[o]=new e({type:"nonoptional",innerType:s[o]});return Qt(this,"shape",r),r}});return zt(t,i)}function dn(e,t=0){if(e.aborted===!0)return!0;for(let n=t;n<e.issues.length;n++)if(e.issues[n]?.continue!==!0)return!0;return!1}function _f(e,t=0){if(e.aborted===!0)return!0;for(let n=t;n<e.issues.length;n++)if(e.issues[n]?.continue===!1)return!0;return!1}function fn(e,t){return t.map(n=>{var i;return(i=n).path??(i.path=[]),n.path.unshift(e),n})}function vi(e){return typeof e=="string"?e:e?.message}function It(e,t,n){const i=e.message?e.message:vi(e.inst?._zod.def?.error?.(e))??vi(t?.error?.(e))??vi(n.customError?.(e))??vi(n.localeError?.(e))??"Invalid input",{inst:s,continue:r,input:o,...a}=e;return a.path??(a.path=[]),a.message=i,t?.reportInput&&(a.input=o),a}function Kr(e){return Array.isArray(e)?"array":typeof e=="string"?"string":"unknown"}function ii(...e){const[t,n,i]=e;return typeof t=="string"?{message:t,code:"custom",input:n,inst:i}:{...t}}const zl=(e,t)=>{e.name="$ZodError",Object.defineProperty(e,"_zod",{value:e._zod,enumerable:!1}),Object.defineProperty(e,"issues",{value:t,enumerable:!1}),e.message=JSON.stringify(t,hr,2),Object.defineProperty(e,"toString",{value:()=>e.message,enumerable:!1})},Ml=D("$ZodError",zl),jl=D("$ZodError",zl,{Parent:Error});function Cf(e,t=n=>n.message){const n={},i=[];for(const s of e.issues)s.path.length>0?(n[s.path[0]]=n[s.path[0]]||[],n[s.path[0]].push(t(s))):i.push(t(s));return{formErrors:i,fieldErrors:n}}function Af(e,t=n=>n.message){const n={_errors:[]},i=(s,r=[])=>{for(const o of s.issues)if(o.code==="invalid_union"&&o.errors.length)o.errors.map(a=>i({issues:a},[...r,...o.path]));else if(o.code==="invalid_key")i({issues:o.issues},[...r,...o.path]);else if(o.code==="invalid_element")i({issues:o.issues},[...r,...o.path]);else{const a=[...r,...o.path];if(a.length===0)n._errors.push(t(o));else{let l=n,c=0;for(;c<a.length;){const d=a[c];c===a.length-1?(l[d]=l[d]||{_errors:[]},l[d]._errors.push(t(o))):l[d]=l[d]||{_errors:[]},l=l[d],c++}}}};return i(e),n}const Gr=e=>(t,n,i,s)=>{const r=i?{...i,async:!1}:{async:!1},o=t._zod.run({value:n,issues:[]},r);if(o instanceof Promise)throw new yn;if(o.issues.length){const a=new(s?.Err??e)(o.issues.map(l=>It(l,r,Et())));throw Fl(a,s?.callee),a}return o.value},Yr=e=>async(t,n,i,s)=>{const r=i?{...i,async:!0}:{async:!0};let o=t._zod.run({value:n,issues:[]},r);if(o instanceof Promise&&(o=await o),o.issues.length){const a=new(s?.Err??e)(o.issues.map(l=>It(l,r,Et())));throw Fl(a,s?.callee),a}return o.value},fs=e=>(t,n,i)=>{const s=i?{...i,async:!1}:{async:!1},r=t._zod.run({value:n,issues:[]},s);if(r instanceof Promise)throw new yn;return r.issues.length?{success:!1,error:new(e??Ml)(r.issues.map(o=>It(o,s,Et())))}:{success:!0,data:r.value}},Tf=fs(jl),hs=e=>async(t,n,i)=>{const s=i?{...i,async:!0}:{async:!0};let r=t._zod.run({value:n,issues:[]},s);return r instanceof Promise&&(r=await r),r.issues.length?{success:!1,error:new e(r.issues.map(o=>It(o,s,Et())))}:{success:!0,data:r.value}},Ef=hs(jl),If=e=>(t,n,i)=>{const s=i?{...i,direction:"backward"}:{direction:"backward"};return Gr(e)(t,n,s)},Pf=e=>(t,n,i)=>Gr(e)(t,n,i),Of=e=>async(t,n,i)=>{const s=i?{...i,direction:"backward"}:{direction:"backward"};return Yr(e)(t,n,s)},$f=e=>async(t,n,i)=>Yr(e)(t,n,i),Rf=e=>(t,n,i)=>{const s=i?{...i,direction:"backward"}:{direction:"backward"};return fs(e)(t,n,s)},Nf=e=>(t,n,i)=>fs(e)(t,n,i),Lf=e=>async(t,n,i)=>{const s=i?{...i,direction:"backward"}:{direction:"backward"};return hs(e)(t,n,s)},Ff=e=>async(t,n,i)=>hs(e)(t,n,i),Df=/^[cC][0-9a-z]{6,}$/,zf=/^[0-9a-z]+$/,Mf=/^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/,jf=/^[0-9a-vA-V]{20}$/,Bf=/^[A-Za-z0-9]{27}$/,Uf=/^[a-zA-Z0-9_-]{21}$/,Hf=/^P(?:(\d+W)|(?!.*W)(?=\d|T\d)(\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+([.,]\d+)?S)?)?)$/,qf=/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/,qo=e=>e?new RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${e}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`):/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/,Wf=/^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$/,Vf="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$";function Zf(){return new RegExp(Vf,"u")}const Kf=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,Gf=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$/,Yf=/^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/([0-9]|[1-2][0-9]|3[0-2])$/,Jf=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,Qf=/^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/,Bl=/^[A-Za-z0-9_-]*$/,Xf=/^https?$/,eh=/^\+[1-9]\d{6,14}$/,Ul="(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))",th=new RegExp(`^${Ul}$`);function Hl(e){const t="(?:[01]\\d|2[0-3]):[0-5]\\d";return typeof e.precision=="number"?e.precision===-1?`${t}`:e.precision===0?`${t}:[0-5]\\d`:`${t}:[0-5]\\d\\.\\d{${e.precision}}`:`${t}(?::[0-5]\\d(?:\\.\\d+)?)?`}function nh(e){return new RegExp(`^${Hl(e)}$`)}function ih(e){const t=Hl({precision:e.precision}),n=["Z"];e.local&&n.push(""),e.offset&&n.push("([+-](?:[01]\\d|2[0-3]):[0-5]\\d)");const i=`${t}(?:${n.join("|")})`;return new RegExp(`^${Ul}T(?:${i})$`)}const sh=e=>{const t=e?`[\\s\\S]{${e?.minimum??0},${e?.maximum??""}}`:"[\\s\\S]*";return new RegExp(`^${t}$`)},rh=/^-?\d+$/,ql=/^-?\d+(?:\.\d+)?$/,oh=/^(?:true|false)$/i,ah=/^null$/i,lh=/^[^A-Z]*$/,ch=/^[^a-z]*$/,Ze=D("$ZodCheck",(e,t)=>{var n;e._zod??(e._zod={}),e._zod.def=t,(n=e._zod).onattach??(n.onattach=[])}),Wl={number:"number",bigint:"bigint",object:"date"},Vl=D("$ZodCheckLessThan",(e,t)=>{Ze.init(e,t);const n=Wl[typeof t.value];e._zod.onattach.push(i=>{const s=i._zod.bag,r=(t.inclusive?s.maximum:s.exclusiveMaximum)??Number.POSITIVE_INFINITY;t.value<r&&(t.inclusive?s.maximum=t.value:s.exclusiveMaximum=t.value)}),e._zod.check=i=>{(t.inclusive?i.value<=t.value:i.value<t.value)||i.issues.push({origin:n,code:"too_big",maximum:typeof t.value=="object"?t.value.getTime():t.value,input:i.value,inclusive:t.inclusive,inst:e,continue:!t.abort})}}),Zl=D("$ZodCheckGreaterThan",(e,t)=>{Ze.init(e,t);const n=Wl[typeof t.value];e._zod.onattach.push(i=>{const s=i._zod.bag,r=(t.inclusive?s.minimum:s.exclusiveMinimum)??Number.NEGATIVE_INFINITY;t.value>r&&(t.inclusive?s.minimum=t.value:s.exclusiveMinimum=t.value)}),e._zod.check=i=>{(t.inclusive?i.value>=t.value:i.value>t.value)||i.issues.push({origin:n,code:"too_small",minimum:typeof t.value=="object"?t.value.getTime():t.value,input:i.value,inclusive:t.inclusive,inst:e,continue:!t.abort})}}),uh=D("$ZodCheckMultipleOf",(e,t)=>{Ze.init(e,t),e._zod.onattach.push(n=>{var i;(i=n._zod.bag).multipleOf??(i.multipleOf=t.value)}),e._zod.check=n=>{if(typeof n.value!=typeof t.value)throw new Error("Cannot mix number and bigint in multiple_of check.");(typeof n.value=="bigint"?n.value%t.value===BigInt(0):df(n.value,t.value)===0)||n.issues.push({origin:typeof n.value,code:"not_multiple_of",divisor:t.value,input:n.value,inst:e,continue:!t.abort})}}),dh=D("$ZodCheckNumberFormat",(e,t)=>{Ze.init(e,t),t.format=t.format||"float64";const n=t.format?.includes("int"),i=n?"int":"number",[s,r]=gf[t.format];e._zod.onattach.push(o=>{const a=o._zod.bag;a.format=t.format,a.minimum=s,a.maximum=r,n&&(a.pattern=rh)}),e._zod.check=o=>{const a=o.value;if(n){if(!Number.isInteger(a)){o.issues.push({expected:i,format:t.format,code:"invalid_type",continue:!1,input:a,inst:e});return}if(!Number.isSafeInteger(a)){a>0?o.issues.push({input:a,code:"too_big",maximum:Number.MAX_SAFE_INTEGER,note:"Integers must be within the safe integer range.",inst:e,origin:i,inclusive:!0,continue:!t.abort}):o.issues.push({input:a,code:"too_small",minimum:Number.MIN_SAFE_INTEGER,note:"Integers must be within the safe integer range.",inst:e,origin:i,inclusive:!0,continue:!t.abort});return}}a<s&&o.issues.push({origin:"number",input:a,code:"too_small",minimum:s,inclusive:!0,inst:e,continue:!t.abort}),a>r&&o.issues.push({origin:"number",input:a,code:"too_big",maximum:r,inclusive:!0,inst:e,continue:!t.abort})}}),fh=D("$ZodCheckMaxLength",(e,t)=>{var n;Ze.init(e,t),(n=e._zod.def).when??(n.when=i=>{const s=i.value;return!Vr(s)&&s.length!==void 0}),e._zod.onattach.push(i=>{const s=i._zod.bag.maximum??Number.POSITIVE_INFINITY;t.maximum<s&&(i._zod.bag.maximum=t.maximum)}),e._zod.check=i=>{const s=i.value;if(s.length<=t.maximum)return;const o=Kr(s);i.issues.push({origin:o,code:"too_big",maximum:t.maximum,inclusive:!0,input:s,inst:e,continue:!t.abort})}}),hh=D("$ZodCheckMinLength",(e,t)=>{var n;Ze.init(e,t),(n=e._zod.def).when??(n.when=i=>{const s=i.value;return!Vr(s)&&s.length!==void 0}),e._zod.onattach.push(i=>{const s=i._zod.bag.minimum??Number.NEGATIVE_INFINITY;t.minimum>s&&(i._zod.bag.minimum=t.minimum)}),e._zod.check=i=>{const s=i.value;if(s.length>=t.minimum)return;const o=Kr(s);i.issues.push({origin:o,code:"too_small",minimum:t.minimum,inclusive:!0,input:s,inst:e,continue:!t.abort})}}),ph=D("$ZodCheckLengthEquals",(e,t)=>{var n;Ze.init(e,t),(n=e._zod.def).when??(n.when=i=>{const s=i.value;return!Vr(s)&&s.length!==void 0}),e._zod.onattach.push(i=>{const s=i._zod.bag;s.minimum=t.length,s.maximum=t.length,s.length=t.length}),e._zod.check=i=>{const s=i.value,r=s.length;if(r===t.length)return;const o=Kr(s),a=r>t.length;i.issues.push({origin:o,...a?{code:"too_big",maximum:t.length}:{code:"too_small",minimum:t.length},inclusive:!0,exact:!0,input:i.value,inst:e,continue:!t.abort})}}),ps=D("$ZodCheckStringFormat",(e,t)=>{var n,i;Ze.init(e,t),e._zod.onattach.push(s=>{const r=s._zod.bag;r.format=t.format,t.pattern&&(r.patterns??(r.patterns=new Set),r.patterns.add(t.pattern))}),t.pattern?(n=e._zod).check??(n.check=s=>{t.pattern.lastIndex=0,!t.pattern.test(s.value)&&s.issues.push({origin:"string",code:"invalid_format",format:t.format,input:s.value,...t.pattern?{pattern:t.pattern.toString()}:{},inst:e,continue:!t.abort})}):(i=e._zod).check??(i.check=()=>{})}),mh=D("$ZodCheckRegex",(e,t)=>{ps.init(e,t),e._zod.check=n=>{t.pattern.lastIndex=0,!t.pattern.test(n.value)&&n.issues.push({origin:"string",code:"invalid_format",format:"regex",input:n.value,pattern:t.pattern.toString(),inst:e,continue:!t.abort})}}),gh=D("$ZodCheckLowerCase",(e,t)=>{t.pattern??(t.pattern=lh),ps.init(e,t)}),bh=D("$ZodCheckUpperCase",(e,t)=>{t.pattern??(t.pattern=ch),ps.init(e,t)}),yh=D("$ZodCheckIncludes",(e,t)=>{Ze.init(e,t);const n=An(t.includes),i=new RegExp(typeof t.position=="number"?`^.{${t.position}}${n}`:n);t.pattern=i,e._zod.onattach.push(s=>{const r=s._zod.bag;r.patterns??(r.patterns=new Set),r.patterns.add(i)}),e._zod.check=s=>{s.value.includes(t.includes,t.position)||s.issues.push({origin:"string",code:"invalid_format",format:"includes",includes:t.includes,input:s.value,inst:e,continue:!t.abort})}}),wh=D("$ZodCheckStartsWith",(e,t)=>{Ze.init(e,t);const n=new RegExp(`^${An(t.prefix)}.*`);t.pattern??(t.pattern=n),e._zod.onattach.push(i=>{const s=i._zod.bag;s.patterns??(s.patterns=new Set),s.patterns.add(n)}),e._zod.check=i=>{i.value.startsWith(t.prefix)||i.issues.push({origin:"string",code:"invalid_format",format:"starts_with",prefix:t.prefix,input:i.value,inst:e,continue:!t.abort})}}),kh=D("$ZodCheckEndsWith",(e,t)=>{Ze.init(e,t);const n=new RegExp(`.*${An(t.suffix)}$`);t.pattern??(t.pattern=n),e._zod.onattach.push(i=>{const s=i._zod.bag;s.patterns??(s.patterns=new Set),s.patterns.add(n)}),e._zod.check=i=>{i.value.endsWith(t.suffix)||i.issues.push({origin:"string",code:"invalid_format",format:"ends_with",suffix:t.suffix,input:i.value,inst:e,continue:!t.abort})}}),vh=D("$ZodCheckOverwrite",(e,t)=>{Ze.init(e,t),e._zod.check=n=>{n.value=t.tx(n.value)}});class Sh{constructor(t=[]){this.content=[],this.indent=0,this&&(this.args=t)}indented(t){this.indent+=1,t(this),this.indent-=1}write(t){if(typeof t=="function"){t(this,{execution:"sync"}),t(this,{execution:"async"});return}const i=t.split(`
|
|
@@ -294,4 +294,4 @@ mcp__*`,"pill.thinkUnsupported":"(本模型不支持,将自动降档)","in
|
|
|
294
294
|
run_bash:rm -rf`,"approvalRules.ask":"Always ask me","approvalRules.askHint":'Always prompts; "always allow" does not apply (you wrote "ask me every time").',"approvalRules.askPh":`run_bash:npm publish
|
|
295
295
|
browser_task`,"approvalRules.allow":"Allow","approvalRules.allowHint":"Runs without asking and overrides the fallback mode. Writes outside the workspace still ask for confirmation (except under Full access); an allow rule skips that only when it has an absolute path prefix covering every write target (e.g. write_file:/Users/you/proj/). ⚠ A broad rule (run_bash, or *) still waves through everything else it matches, in every session on the custom mode.","approvalRules.allowPh":`web_fetch
|
|
296
296
|
mcp__*`,"pill.thinkUnsupported":"(unsupported by this model, auto-downgrades)","input.compact":"Compact context","input.compacting":"Compacting context…","input.compactDone":"Context compacted ({n} messages folded into a summary; continues compactly)","input.compactSkip":"Nothing to compact: {reason}","input.compactFail":"Compaction failed: {e}","input.slash.compact":"Compact context: summarize then continue compactly","input.slash.voiceOn":"Switch to voice messages (this Agent replies as voice)","input.slash.voiceOff":"Switch back to text messages","input.slash.voiceOnHint":"Voice messages on: this Agent’s replies will be voice (desktop voice bar; on WeChat, an audio file alongside the text).","input.slash.voiceOffHint":"Switched back to text messages.","voice.play":"Play","voice.pause":"Pause","voice.label":"Voice","voice.toText":"Show text","voice.toggleFailed":"Failed to toggle voice mode: {e}","input.slash.stop":"Stop the current run","input.slash.skillUse":"Use skill {name} for this message","input.skillChipTitle":"This skill will be used for this message","input.slash.agent":"Use a normal agent (custom persona)","input.agentActive":"Active agent: {name}","input.agentCleared":"Normal agent cleared","input.engineDefault":"Tangu","input.engineChipTitle":"Run engine","input.engineSection":"Run engine","input.engineModelDefault":"Use engine default","engine.pickTitle":"Choose the agent for this chat","engine.warming":"Starting {name}…","pill.more":"More (next page)","header.currentAgent":"Current agent","settings.tab.agentClis":"Local agent CLIs","settings.agentClis.title":"Agent CLIs","settings.agentClis.hint":"Detected third-party agents (Claude Code / Codex …). Set a default model. New chats can pick them.","settings.agentClis.detected":"Detected","settings.agentClis.needsSignin":"Needs sign-in","settings.agentClis.notDetected":"Not detected","settings.agentClis.notDetectedHint":"Install & sign in to this agent to enable it.","settings.agentClis.defaultModel":"Default model","settings.agentClis.modelDefault":"(engine default)","settings.agentClis.loadingModels":"Loading models…","settings.agentClis.empty":"No external agent engines (host-only feature).","settings.agentClis.importHint":"Importing copies it into Tangu as your own skill/MCP (survives uninstalling the CLI). MCP imports start disabled — enable them in MCP settings.","settings.agentClis.skillsLabel":"Installed skills","settings.agentClis.mcpLabel":"Installed MCP","settings.agentClis.importBtn":"Import","settings.agentClis.imported":"Imported","settings.tab.agents":"Agents","settings.agents.title":"Normal agents (custom personas)","settings.agents.hint":"Define reusable conversational personas (system prompt + model + settings) for different tasks. Agents can also self-author via the manage_agent tool.","settings.agents.new":"New agent","settings.agents.brainSection":"Brain (memory / journal / library)","settings.agents.brainSectionHint":"View and edit this agent's long-term memory, daily journal and library files.","settings.agents.openBrain":"Open brain","settings.agents.createViaChat":"Create with AI","settings.agents.createViaChatHint":"Open a new chat and let an agent build the new agent for you","settings.agents.empty":'No agents yet — click "New agent" to create one.',"settings.agents.name":"Name","settings.agents.namePlaceholder":"e.g. Code Reviewer","settings.agents.desc":"Description","settings.agents.model":"Model (empty = use session model)","settings.agents.modelDefault":"(use session model)","settings.agents.systemPrompt":"Developer instructions (what / how / must-read)","settings.agents.systemPromptPlaceholder":"You are a meticulous code reviewer…","settings.agents.thinking":"Thinking effort","settings.agents.maxIter":"Max iterations","settings.agents.approval":"Approval","settings.agents.inherit":"(inherit)","settings.agents.byAgent":"agent-authored","agent.badge.system":"Background","settings.agents.deleteConfirm":'Delete agent "{name}"?',"settings.agents.saveFail":"Save failed: {e}","settings.agents.cloudOnly":"Normal Agents are only available locally (desktop/TUI).","settings.agents.soul":"Persona (SOUL)","settings.agents.soulPlaceholder":'Calm, focused; concise replies… (tone & values, distinct from the "what to do" instructions)',"settings.agents.shareMemory":"Share the default agent's memory & log","settings.agents.shareMemoryHint":"When on, this agent reads/writes the default agent's memory & log; off (default) = its own.","settings.agents.cloudSync":"Cloud sync (mirror across devices)","settings.agents.cloudSyncHint":"When on, all of this agent's files (definition/memory/log/Library) mirror across your devices, newest wins; off (default) = local only.","settings.agents.cloudSyncOn":"Cloud sync: on","settings.agents.cloudSyncOff":"Cloud sync: off","settings.agents.activityAccess":"Allow reading the activity log","settings.agents.activityAccessHint":"Grants this agent read_activity to view your in-app activity; off (default) = Muse only.","settings.agents.toolPolicy":"Tool allow/deny list","settings.agents.toolPolicyNone":"No restriction (all tools)","settings.agents.toolPolicyDeny":"Denylist: unchecked = disabled; new engine tools allowed by default","settings.agents.toolPolicyAllow":"Allowlist: only checked tools usable; new engine tools disabled by default","settings.agents.toolPolicyHint":"Checked = usable. Governs the regular tools below only; permission-gated tools (e.g. read_activity) are unaffected.","settings.agents.toolPolicyEmpty":"Tool catalog unavailable (local engine must be running).","settings.agents.avatar":"Avatar","settings.agents.avatarHint":"Click to upload, ≤1MB (PNG/JPG/GIF/WebP); stored in this agent's Library.","settings.agents.avatarPick":"Upload avatar","settings.agents.avatarRemove":"Remove avatar","settings.agents.avatarTooLarge":"Image exceeds 1MB, please pick a smaller one.","settings.agents.avatarSaveFirst":"Save the agent first, then set an avatar.","settings.tab.shortcuts":"Shortcuts","settings.shortcuts.desc":"Click a shortcut to record, then press the key combo to set it; Esc to cancel. Each combo binds to only one command.","settings.shortcuts.commands":"Commands and shortcuts · {count}","settings.shortcuts.searchPlaceholder":"Search commands or shortcuts","settings.shortcuts.resultCount":"Showing {count}","settings.shortcuts.noResults":"No matching commands.","settings.shortcuts.commandPalette":"Command palette","settings.shortcuts.record":"Click to record shortcut","settings.shortcuts.recording":"Press keys…","settings.shortcuts.reset":"Reset to default","settings.shortcuts.clear":"Unbind","settings.shortcuts.unbound":"Not set","settings.shortcuts.resetAll":"Reset all to default","settings.shortcuts.reassigned":'Unbound this shortcut from "{name}"',"tool.verb.wrote":"Wrote","tool.verb.edited":"Edited","tool.verb.ran":"Ran","tool.verb.read":"Read","tool.verb.listed":"Listed","tool.verb.searched":"Searched","tool.verb.browsed":"Browsed","tool.sum.wrote":"Wrote {n} file(s)","tool.sum.edited":"Edited {n} file(s)","tool.sum.ran":"Ran {n} command(s)","tool.sum.read":"Read {n} item(s)","tool.sum.searched":"Searched {n}×","tool.sum.browsed":"Browsed {n}×","tool.sum.other":"{n} tool(s)","settings.agents.isDefault":"default","settings.agents.setDefault":"Set as default","settings.agents.viewMem":"View brain (memory / log / library)","settings.agents.memTitle":"{name} · Agent brain","settings.agents.memory":"Long-term memory (MEMORY.md, editable)","settings.agents.memSaved":"Saved","settings.agents.log":"Log (LOG, editable)","settings.agents.noLog":"No log yet","settings.agents.tabMemory":"Memory","settings.agents.tabLog":"Logs","settings.agents.tabLibrary":"Library","settings.agents.library":"Library (Library/, reference docs + avatar)","settings.agents.libraryEmpty":"No files yet","settings.agents.libraryUpload":"Upload","settings.agents.librarySelectHint":"Click a file to view / edit","settings.agents.libraryBinaryHint":"Binary file — preview only","settings.agents.libraryDeleteConfirm":'Delete file "{name}"?',"settings.agents.libraryTooLarge":"File exceeds 5MB","settings.agents.userProfile":"User profile (USER.md, visible to all agents)","settings.agents.userProfileHint":"Your name, preferences, level, long-term needs; every agent reads it.","settings.agents.tabHarness":"Evolution","settings.agents.harnessHint":"The evolution record holds how the agent evolves: methods it distilled from its own work and the equipment it shelved. Its own changes apply immediately and show an update card you can undo; background review and Muse's usage review also write here directly, each entry says where it came from, and all of them can be undone on this tab. Every run loads them.","settings.agents.harnessEmpty":"Nothing in the evolution record yet. Durable methods the agent works out for itself land here, written by the agent on the spot or by background review; you can also type /refine in a session with it to reflect on that conversation.","settings.agents.harnessEvidence":"Evidence: {text}","settings.agents.harnessKindNote":"Note","settings.agents.harnessKindRecipe":"Recipe","settings.agents.harnessKindEquip":"Equipment","settings.agents.harnessShelvedTools":"Shelved tools: {names}","settings.agents.harnessShelvedSkills":"Shelved skills: {names}","settings.agents.harnessCount":"Evolution record: {count} of {max} entries","settings.agents.harnessLastChange":"Last evolved {time}","settings.agents.harnessRefine":"Reflect on this conversation","settings.agents.harnessRefineSent":"Reflection started. Follow along in the conversation.","settings.agents.harnessShowAll":"Show all {count}","settings.agents.harnessLoading":"Loading the evolution record…","settings.agents.harnessLocalOnly":"The evolution record is available with the local engine only.","settings.agents.harnessHistory":"Edit history (this device)","settings.agents.harnessRollback":"Undo last change","settings.agents.harnessRestore":"Restore","settings.agents.harnessRollbackConfirm":'Undo the last change to "{title}"? (Undo again to bring it back)',"settings.agents.harnessActCreate":"Created","settings.agents.harnessActUpdate":"Edited","settings.agents.harnessActDelete":"Deleted","settings.agents.harnessActRollback":"Rolled back","settings.agents.harnessByHistorian":"Added by background review","settings.agents.harnessByMuse":"Shelved by Muse","settings.agents.harnessByUser":"Candidate you adopted","settings.agents.harnessCandidates":"Candidates: {count}","settings.agents.harnessCandidateNeedsYou":"Needs your decision","settings.agents.harnessCandidateAdopt":"Adopt","settings.agents.harnessCandidateDismiss":"Dismiss","settings.agents.harnessCandidateAdopted":"Adopted into the evolution record.","settings.agents.harnessCandidateDismissed":"Candidate dismissed.","settings.agents.harnessCandidateGone":"That candidate is no longer waiting. The list was reloaded.","settings.agents.harnessCandidateFull":"The evolution record is full ({max} entries). Remove or merge a few before adopting.","settings.agents.harnessCandidateTooLong":"This candidate is too long for one entry. Dismiss it, or ask the agent to rewrite it.","settings.agents.harnessCandidatesHint":"Methods the Historian nominated but did not write straight into the evolution record. Ones that carry a URL, a command or wording about permissions are yours to decide one by one: Adopt writes the entry, Dismiss removes the candidate. The agent reviews the rest during reflection, and you can adopt or dismiss those too.","settings.agents.selfAuthored":"Self-authored","settings.agents.sharedSkill":"Shared","agent.pickTitle":"Choose agent","settings.tab.special":"Background agents","settings.special.title":"Special Agents (background)","settings.special.hint":"On by default; once you turn one off, it stays off. Leave the model empty to follow the cloud default; records are isolated locally and never appear in the session list.","settings.special.pickModelFirst":"Pick a model before enabling","settings.special.followCloudDefault":"Follow cloud default ({model})","settings.model.imageCloudDefaultTag":"Cloud default","settings.model.imageFollowingDefault":"No manual pick — following the cloud image default: {model}. Click a model to pin your own choice; click again to unpin.","settings.special.model":"Model","settings.special.enable":"Enable","settings.special.historian":"Historian","settings.special.historianDesc":"Summarizes the session title every X rounds; reviews & updates your LOG and memory every Y rounds.","settings.special.muse":"Muse","settings.special.museDesc":"Resident background agent: wakes on heartbeat, schedules and rules and works inside its own Library; out-of-scope actions follow its permission tier, output lands in the inbox and Muse Space.","settings.special.h.rounds":"Maintain every N rounds","settings.special.h.firstRound":"Always trigger on first round","settings.special.h.harnessCandidates":"Self-evolution auto-collect","settings.special.h.harnessCandidatesHint":"The judge nominates methods an agent worked out for itself. One that reads like a working method goes straight into its evolution record; one that carries a URL, a command, or wording about permissions or credentials waits as a candidate until you adopt or dismiss it on the Evolution tab. A notification appears in the conversation you are viewing when an entry is added, and you can view or undo it on the Evolution tab.","settings.special.h.prompt":"Memory-judgment prompt (empty = default)","settings.special.m.maxIter":"Max iterations / cycle","settings.special.m.maxTodos":"Max TODOs / window","settings.special.m.activeHours":"Active hours (device local time)","settings.special.m.activeAllDay":"All day","settings.special.m.persona":'Edit its persona and instructions under "Muse" in the agent roster.',"settings.special.m.folders":"Extra folders (one absolute path per line)","settings.special.m.foldersHintAsk":"Ask / agent tiers: only a hint telling Muse to look there; writes still queue for approval per tier.","settings.special.m.foldersHintAuto":"Full auto: these folders are directly readable and writable.","settings.special.m.secRhythm":"Rhythm","settings.special.m.budget":"Budget","settings.special.m.budgetWindow":"Budget window (hours)","settings.special.m.maxCycles":"Max cycles / window","settings.special.h.mode":"Mode","settings.special.h.modeIndependent":"Independent","settings.special.h.modeAssist":"Assist","settings.special.h.modeFork":"Fork","settings.special.h.modeHintIndependent":"Historian reads the recent transcript with the model above and maintains the title, summary, log and memory on its own.","settings.special.h.modeHintAssist":"When due, branches a short background discussion with the session's agent; the main agent decides and writes itself. Title/summary are still maintained by Historian; the first round is always independent.","settings.special.h.modeHintFork":"Judges via a single tail-fork completion of the full live context using the session model (prompt-cache friendly, sees far more than Independent; falls back to Independent on failure). The model above is only used for fallback judging and memory consolidation.","settings.special.h.fallbackModel":"Fallback / consolidation model","settings.special.saved":"Saved","settings.special.saveFail":"Save failed: {e}","settings.special.on":"On","settings.special.off":"Off","settings.special.custom":"Custom","settings.special.sectionTitle":"Background agents (special)","settings.agents.sectionTitle":"Normal agents (custom personas)","settings.agents.starterTemplate":"You are … (describe this agent's identity, expertise, tone, and how it should approach tasks).","sidebar.special.title":"Background agents","special.action.title_updated":"title updated","special.action.summary_updated":"summary updated","special.action.log_appended":"log appended","special.action.memory_appended":"memory appended","special.action.memory_updated":"memory updated","special.action.assist_discussion":"assist discussion started","special.muse.title":"Muse workspace","special.muse.thinking":"Current thinking","special.muse.idle":"Muse is idle","special.muse.running":"Muse is thinking…","special.muse.disabled":"Muse is off (enable it and pick a model in Settings → Background agents).","special.muse.todos":"Muse TODO list","special.muse.todosEmpty":"No TODOs yet. Muse proposes high-value tasks after thinking in the background.","special.muse.selectAll":"Select all","special.muse.inject":"Inject selected into a session & run","special.muse.pickSession":"Pick target session…","special.muse.injected":"Injected {n} into a session and started running","special.muse.dismiss":"Dismiss","special.muse.markDone":"Mark done","special.muse.injectFail":"Inject failed: {e}","special.muse.watches":"Watch rules","special.muse.watchesAll":"All automations →","special.muse.watchesHint":'Say "keep an eye on xxx.md until it reaches 100 chars" in any chat to set one; when a rule fires, Muse wakes up and proposes a todo.',"special.muse.trigFile":'"{path}" reaches {n} chars',"special.muse.trigEvent":'activity contains "{match}"',"special.muse.trigDaily":"daily at {time}","special.muse.trigFired":"last fired {t}","special.muse.watchDelete":"Delete rule","special.muse.approvals":"Pending approvals","special.muse.approvalsEmpty":"Nothing is waiting for your approval.","special.muse.approve":"Approve & run","special.muse.reject":"Reject","special.muse.approveFail":"Could not approve: {e}","special.muse.approvalNote":"Your agent's verdict: {note}","special.muse.runNew":"Run selected in a new session","special.muse.injectPrefix":"Please handle these todos from Muse:","muse.lib.openEditor":"Open in editor","special.muse.tracks":"Tracking","special.muse.tracksEmpty":'No tracked tasks. Use "Hand to Muse" on a task card in chat to add one.',"special.muse.trackDelete":"Stop tracking","special.muse.modeLabel":"Tier","special.muse.pending":"{n} pending approval","space.muse":"Muse","muse.builtinDesc":"Muse Space: the Space Muse builds itself (a Forsion plugin it writes and improves each cycle); approve its out-of-scope actions in the side panel. Shows its workspace until it has built one.","view.museLibrary":"Muse workspace","view.museHome":"Muse Space","muse.openLibrary":"Open Muse workspace","view.musePanel":"Muse","muse.lib.empty":"Muse has not written anything yet. Once enabled, its notes, drafts and daily journal appear here.","muse.lib.refresh":"Refresh","chat.task.here":"Run here","chat.task.new":"Run in new session","chat.task.muse":"Hand to Muse","chat.task.ignore":"Ignore","chat.task.trackTag":"Track","chat.task.tracked":"Handed to Muse (visible in Calendar)","chat.task.trackFail":"Could not hand to Muse: {e}","chat.task.doneHere":"Sent here","chat.task.doneNew":"Sent to a new session","chat.task.doneMuse":"Handed to Muse","chat.task.doneIgnore":"Ignored","chat.task.showPrompt":"Show task brief","chat.task.hidePrompt":"Hide task brief","chat.task.tooLong":"The task brief is over 4000 characters and cannot be handed to Muse; split it up, or run it here or in a new session.","chat.task.museDo":"Let Muse do it","chat.task.doneMuseDo":"Handed to Muse","chat.task.handedDo":"Handed to Muse: it picks this up on its next run (subject to its active hours and budget); anything beyond its permissions comes back to you for approval","chat.task.museOff":"Muse is turned off: turn it on in Settings, or run this in a new session","chat.task.todoSyncFail":"Could not update the todo status: {e}","chat.task.doneTodo":"This todo has already been handled","chat.task.todoChecking":"Checking this todo’s status…","chat.task.todoCheckFail":"Couldn’t load this todo’s status","chat.task.todoMissing":"This todo no longer exists","special.muse.actionFail":"Action failed: {e}","special.muse.execFailed":"Approved, but the execution failed: {e}","settings.special.m.mode":"Permission tier","settings.special.m.modeAsk":"Ask (out-of-scope actions queue for your approval)","settings.special.m.modeAgent":"Agent approves (your default agent decides once on your behalf)","settings.special.m.modeAuto":"Full auto","settings.special.m.modeDesc":"All tiers work freely inside Muse's own Library; out-of-scope writes and commands follow the tier, and plugin installs always need your confirmation.","settings.special.m.heartbeat":"Heartbeat interval (minutes; 0 = wake only for schedules and rules)","settings.special.m.heartbeatHint":'The supervisor poll shrinks to match a finer heartbeat; the actual cycle count is still capped by "Max cycles / window" under Budget.',"settings.special.m.notify":"Notifications","settings.special.m.notifyMode":"Delivery","settings.special.m.notifyImmediate":"Immediate","settings.special.m.notifyDigest":"Daily digest","settings.special.m.escalateTo":"Hand hard work to","settings.special.m.escalateNone":"None","settings.customProvider.fetchModels":"Fetch models","settings.customProvider.fetchEmpty":"No models found (endpoint returned no list)","sidebar.search.placeholder":"Search chats…","sidebar.search.noResults":"No matching chats","sidebar.deleteConfirm":'Permanently delete chat "{name}"? This cannot be undone.',"chat.action.quote":"Quote","chat.action.askInPanel":"Ask in side panel","chat.selection.actions":"Selected text actions","chat.error":"Run failed","chat.llmRetrying":"Network hiccup — retrying in {s}s (attempt {n}/{max})","chat.err.network":"Cannot reach the model service (network down or server not running)","chat.err.dropped":"Connection dropped mid-response (network hiccup); reply incomplete","chat.err.timeout":"Request timed out — slow network or model","chat.err.auth":"Authentication failed — check API key or login","chat.err.rate":"Rate limited — please retry later","chat.err.server":"Model service error — please retry later","chat.err.quota":"AI quota used up — click your avatar (bottom-left) to check usage, use a reset card to restore it now, or upgrade your plan","chat.err.runCost":"This run hit its cost ceiling and was stopped automatically","chat.err.inputTooLarge":"Input too large for the model — trim it and retry","chat.err.groupAgents":"Team mode needs at least 2 valid agents","chat.err.orphaned":"Run was interrupted unexpectedly (app restart or process exit) — please retry","chat.err.engineRemote":"External engines can't be driven from a remote device — continue this chat on the host computer","chat.edit.saveResend":"Save & resend","group.voting.inProgress":"Voting…","workbench.chat":"Chat","workbench.leftSidebar":"Left sidebar","workbench.rightSidebar":"Right sidebar","theme.changeSkin":"Change accent color","theme.changeMode":"Toggle light/dark mode","theme.changeLanguage":"Switch theme style","command.palette":"Command palette (⌘K)","command.search":"Search","command.toggleSmoothCaret":"Toggle smooth caret","command.toggleLeft":"Toggle left sidebar","command.toggleRight":"Toggle right sidebar","command.toggleBottom":"Toggle bottom panel","panel.emptyTitle":"Empty panel","panel.empty":"This panel is empty, try dragging a tab here.","command.splitRight":"Split right","command.resetLayout":"Reset layout","command.stop":"Stop current run","command.compact":"Compact context","command.branch":"Branch from latest reply","command.saveLayout":"Save named layout","command.applyLayout":"Restore named layout","layout.namePrompt":"Layout name","layout.saved":"Saved layout “{name}”","layout.none":"No named layouts saved yet","layout.applyPrompt":"Enter a layout to restore: {names}","status.context":"Context","header.connecting":"Connecting…","command.placeholder":"Run a command…","command.empty":"No commands","command.select":"Select","command.run":"Run","command.count":"{count} commands","group.host":"Host","special.agents.title":"Background agents","special.memory.title":"Memory","sidebar.special.historianSub":"Summarizes titles · curates memory","sidebar.special.museSub":"Background thinking · TODOs","sidebar.wechat.setConnectedOk":"Now the connected WeChat session.","sidebar.wechat.setConnectedFail":"Failed: {e}","preview.close":"Close","preview.expand":"Expand","preview.collapse":"Collapse","preview.download":"Download","preview.notFound":"File not found","preview.loadFailed":"Failed to load","preview.notAvailable":"No preview for this file type","preview.tooLarge":"File too large ({size}) to preview","preview.htmlPreview":"Preview","view.wsfile":"File preview","preview.openWithDefault":"Open with default app","preview.unsupportedAsk":"Can't preview this file type. Open it with the system default app?","preview.expired":"Preview content expired (this kind of preview does not survive restarts). Reopen it from its source.","preview.mdEdit":"Edit","preview.openInAmadeus":"Open in Amadeus","preview.mdConflict":"File was modified externally","preview.mdReload":"Reload","preview.mdOverwrite":"Overwrite","preview.mdSaveFail":"Save failed: {err}","preview.mdSalvaged":'File was modified externally; your edits were saved as "{file}"',"panel.toast.invalidName":"Invalid name: {name}","panel.action.open":"Open","panel.action.newFile":"New file","panel.action.newFolder":"New folder","panel.action.copyPath":"Copy path","preview.htmlCode":"Source","preview.reload":"Reload","preview.openInBrowser":"Open in browser (same preview server; Forsion AI works with your account)","preview.csvTruncated":"Showing first {shown} of {total} rows","preview.slide":"Slide {n}","preview.wrap":"Wrap","preview.zoomIn":"Zoom in","preview.zoomOut":"Zoom out","preview.fit":"Fit","preview.diffSideBySide":"Side by side","preview.diffLineByLine":"Line by line","preview.pdfPages":"Showing first {n} of {total} pages — download to view all","panel.action.preview":"Preview","panel.action.deleteN":"Delete {n}","panel.confirm.trashN":"Move {n} selected items to trash?","panel.confirm.delete":'Delete "{name}"?',"panel.confirm.deleteN":"Delete {n} selected files?","panel.toast.copied":"Copied {n} item(s) to workspace","panel.toast.copyFail":"Copy failed: {err}","panel.toast.moveFail":"Move failed: {err}","settings.tab.notifications":"Notifications","settings.tab.statusbar":"Status bar","ntf.enable":"Enable notifications","ntf.delivery":"Delivery","ntf.enableHint":"Floating cards popping from the top-right; when off, everything (errors included) is silenced.","ntf.osEnable":"System notifications","ntf.osEnableHint":"Also pop an OS notification when the app is in the background (all types, not just Inbox).","ntf.sendTest":"Send test notification","ntf.testBody":"This is a test notification 👋","ntf.events":"Notification events","ntf.eventsHint":"Keep only the events worth your attention to reduce noise.","ntf.event.system":"System messages","ntf.event.syncError":"Sync failures / conflicts","ntf.event.syncDone":"Remote sync completed","ntf.event.syncDoneOnline":"Online sync completed","ntf.event.agentDone":"Background session finished","ntf.event.inbox":"New Inbox message","ntf.event.noteReminder":"Note reminders (@remind:)","ntf.event.harnessCandidates":"Background evolution-record updates and candidates","ntf.event.projectCandidates":"Project-memory candidates awaiting your decision","ntf.event.projectCompacted":"Project memory compacted when full","ntf.pluginEvents":"Plugin notifications","ntf.pluginEventsHint":"One switch per plugin (the source of ctx.notify; turn off to mute that plugin).","ntf.view":"View","ntf.syncError":"Online sync failed: {e}","ipcerr.notLoggedIn":"Not signed in to Forsion","ipcerr.loginExpired":"Your Forsion sign-in has expired. Sign in again","ipcerr.vaultMissing":"Vault folder not found: {detail}","ipcerr.mirrorMissing":"Mirror folder not found (it has sync history, so an empty one won't be created): {detail}","ipcerr.scanFailed":"Couldn't read the local folder, so this round won't treat missing files as deleted: {detail}","ipcerr.invalidSpaceId":"Invalid Space identifier","ipcerr.invalidPluginId":"Invalid plugin identifier","ipcerr.notUserPlugin":"This plugin isn't in the user plugins folder (built-in plugins can't be uninstalled)","ipcerr.pluginNotFound":"Plugin not found","ipcerr.mcpNameReserved":'The MCP server name "{detail}" is reserved: names that are dev or start with dev_ belong to device tools. Pick another name',"settings.discovery.mcpReserved":"Not imported: {names}. MCP server names that are dev or start with dev_ belong to device tools. Rename them and add them by hand on the MCP page.","ntf.syncDone":"Online sync completed","ntf.noteReminder":"Reminder · {src}","ntf.remoteSyncDone":"Remote sync done: {n} change(s)","ntf.remoteSyncFail":"Remote sync failed: {e}","ntf.remoteSyncConflicts":"Remote sync conflicts: {n} pending","ntf.remoteSyncPendingDel":"Remote sync: {n} deletion(s) awaiting confirmation","ntf.actionReview":"Review","ntf.agentDone":'"{name}" finished',"ntf.agentFail":'"{name}" failed',"ntf.harnessCandidates":'"{name}" has new evolution-record candidates. Reflect now?',"ntf.harnessConfirm":'"{name}" has evolution-record candidates awaiting your decision. They carry a URL, a command or wording about permissions, so nothing was written in the background.',"ntf.projectCandidates":'Project "{name}" has facts noted in the background that await your decision. They carry a URL, a command or wording about permissions, so they were not saved to project memory.',"ntf.projectCompacted":'Project memory for "{name}" was full, so the agent compacted it before saving the new entry. The original sentences that were merged or removed can be restored one by one in project details.',"ntf.actionRefine":"Reflect","ntf.actionView":"View","ntf.harnessAdopted":'Background review added an evolution-record entry for "{name}": {titles}. View or undo it under Evolution.',"sb.enable":"Show status bar","sb.display":"Display","sb.enableHint":"A slim bar at the bottom showing sync / backlinks / word count per current view. Off by default; it appears with just the sync status while sync is failing.","sb.items":"Status bar","sb.itemsHint":"Uncheck to hide; drag to reorder (plugin items appear here once enabled).","sb.side.left":"Front","sb.side.right":"Back","sb.item.space":"Current Space","sb.item.agentRunning":"Running sessions","sb.item.sync":"Sync status","sb.item.backlinks":"Backlinks","sb.item.wordCount":"Word count","sb.item.inbox":"Inbox unread","sb.agentRunning":"{n} running","sb.synced":"Synced","sb.syncing":"Syncing · {n}","sb.syncingPlain":"Syncing…","sb.syncProgress":"Syncing {done}/{total}","sb.syncError":"Sync error","sb.syncOffline":"Offline","sb.chars":"{n} chars","sb.backlinks":"{n} backlinks","amadeus.default.note":"Untitled","amadeus.default.dashboard":"Untitled dashboard","amadeus.default.drawing":"Untitled whiteboard","amadeus.default.database":"Untitled database","amadeus.default.folder":"New folder","amadeus.default.section":"New section","amadeus.default.pdfBookmark":"Page {page}","amadeus.new.note":"New note","amadeus.new.childNote":"New sub-note","amadeus.new.dashboard":"New dashboard","amadeus.new.dashboardIn":"New dashboard in “{folder}”","amadeus.new.drawing":"New whiteboard","amadeus.new.drawingIn":"New whiteboard in “{folder}”","amadeus.new.folder":"New folder","amadeus.new.folderIn":"New folder in “{folder}”","amadeus.new.database":"New base","amadeus.new.databaseIn":"New base in “{folder}”","amadeus.exists":"“{name}” already exists","amadeus.cmd.quickSwitch":"Quick switch note","amadeus.cmd.search":"Search notes (full text)","amadeus.cmd.tutorial":"Open the tutorial","amadeus.cmd.manual":"Open the user manual","amadeus.cmd.dailyNote":"Open today's daily note","amadeus.cmd.toggleStar":"Star / unstar current note","amadeus.cmd.toggleSource":"Toggle source / visual editing","amadeus.cmd.openVault":"Open vault…","amadeus.cmd.reveal":"Reveal current note in file manager","amadeus.cmd.reindex":"Rebuild full-text index","amadeus.cmd.toggleWikiFiles":"Toggle attachments & databases in wikilink autocomplete","amadeus.cmd.wikiFilesOn":"Wikilink autocomplete now includes attachments and databases","amadeus.cmd.wikiFilesOff":"Wikilink autocomplete now covers notes only"},Dr={zh:Eo,en:Td};function Io(e){for(const[t,n]of Object.entries(e))n.zh!=null&&(Eo[t]=n.zh),n.en!=null&&(Td[t]=n.en)}const M1={"app.defaultWorkspace":["Tangu Default Workspace","Tangu 默认工作区","Tangu default workspace"],"app.cloudWorkspace":["Cloud Workspace","Cloud 工作区","Cloud workspace"]};function FC(e){const t=Object.values(Dr).map(n=>n[e]).filter(n=>!!n);return[...new Set([...t,...M1[e]??[]])]}function $s(e,t,n){return Ed(Dr[e][t]??Dr.zh[t]??t,n)}function ie(e,t){return $s(Jt,e,t)}function DC(e,t,n){return $s(e,t,n)}function Ed(e,t){return t?e.replace(/\{(\w+)\}/g,(n,i)=>i in t?String(t[i]):`{${i}}`):e}const Po=it.createContext(null);let Jt=Ad(),vn=null;function zC(){vn?.(Jt==="zh"?"en":"zh")}function zr(){return Jt}const Mr=new Set;function j1(e){return Mr.add(e),()=>{Mr.delete(e)}}function Id(e){if(Jt!==e){Jt=e,F1(),Pd(e);for(const t of Array.from(Mr))try{t(e)}catch(n){typeof globalThis.reportError=="function"?globalThis.reportError(n):console.error("[i18n] locale subscriber failed",n)}}}function Pd(e=Jt){try{window.tangu?.reportUiLocale?.(e)}catch{}}function Od(e){if(vn){vn(e);return}try{localStorage.setItem(hi,e)}catch{}try{document.documentElement.lang=e==="zh"?"zh-CN":"en"}catch{}Id(e)}const MC=({children:e})=>{const[t,n]=it.useState(Ad),i=it.useCallback(r=>{n(r);try{localStorage.setItem(hi,r)}catch{}try{document.documentElement.lang=r==="zh"?"zh-CN":"en"}catch{}Id(r)},[]);it.useEffect(()=>(vn=i,Jt=t,()=>{vn===i&&(vn=null)}),[i,t]),it.useEffect(()=>{Pd(t)},[t]),it.useEffect(()=>{try{document.documentElement.lang=t==="zh"?"zh-CN":"en"}catch{}},[t]),it.useEffect(()=>{z1()},[]);const s=it.useMemo(()=>({locale:t,setLocale:i,t:(r,o)=>$s(t,r,o)}),[t,i]);return Os.jsx(Po.Provider,{value:s,children:e})},jC=({children:e})=>{const t=it.useSyncExternalStore(j1,zr,zr),n=it.useMemo(()=>({locale:t,setLocale:Od,t:(i,s)=>$s(t,i,s)}),[t]);return Os.jsx(Po.Provider,{value:n,children:e})};function BC(){const e=it.useContext(Po);return e||{locale:"zh",setLocale:()=>{},t:(t,n)=>Ed(Eo[t]??t,n)}}Io({"amxlinks.rewriteFailed":{zh:"已改名 / 移动,但有 {n} 篇笔记里指向它的链接没能跟着更新:{names}。请打开这些笔记检查链接。",en:"Renamed or moved, but links to it in {n} notes could not be updated: {names}. Open those notes and check the links."},"amxlinks.nameSep":{zh:"、",en:", "}});const B1=e=>(e.split("/").pop()??e).replace(/\.md$/i,"");function U1(e){if(!e.length||typeof window>"u")return;const t=e.slice(0,5).map(B1).join(ie("amxlinks.nameSep")),n=e.length>5?`${t} …`:t;window.dispatchEvent(new CustomEvent("amadeus:toast",{detail:{text:ie("amxlinks.rewriteFailed",{n:e.length,names:n}),level:"error",dedupeKey:"amxlinks.rewriteFailed"}}))}Io({"amxbridge.pageNameEmpty":{zh:"页面名不能为空",en:"Page name can't be empty"},"amxbridge.pageExists":{zh:"目标页面已存在",en:"A page with that name already exists"},"amxbridge.fileExistsAtTarget":{zh:"目标位置已存在同名文件",en:"A file with the same name already exists there"},"amxbridge.folderNameEmpty":{zh:"文件夹名不能为空",en:"Folder name can't be empty"},"amxbridge.folderExists":{zh:"同名文件夹已存在",en:"A folder with the same name already exists"},"amxbridge.folderPathEmpty":{zh:"文件夹路径不能为空",en:"Folder path can't be empty"},"amxbridge.moveIntoSelf":{zh:"不能移动到自身内部",en:"Can't move a folder into itself"},"amxbridge.folderExistsAtTarget":{zh:"目标位置已存在同名文件夹",en:"A folder with the same name already exists there"},"amxbridge.noteNameEmpty":{zh:"笔记名不能为空",en:"Note name can't be empty"},"amxbridge.noteExists":{zh:"目标笔记已存在",en:"A note with that name already exists"},"amxbridge.nameEmpty":{zh:"名称不能为空",en:"Name can't be empty"},"amxbridge.fileExists":{zh:"目标文件已存在",en:"A file with that name already exists"},"amxbridge.desktopOnly":{zh:"此操作仅桌面端可用",en:"This action is only available in the desktop app"},"amxbridge.conflictReloaded":{zh:"云端已有更新,已加载最新版本(本次未保存的修改被覆盖)",en:"A newer version was in the cloud, so it was loaded (your unsaved edits were overwritten)"},"amxbridge.renamedElsewhere":{zh:"这篇笔记已在别处改名为「{name}」,本次修改已保存到新名字",en:"This note was renamed to “{name}” elsewhere; your edits were saved under the new name"},"amxbridge.deletedElsewhere":{zh:"这篇笔记已在别处被删除或移走,本次修改没有写到云端(请另存为新笔记)",en:"This note was deleted or moved elsewhere, so your edits weren't saved to the cloud (save them as a new note)"},"amxbridge.deletedElsewhereSaved":{zh:"这篇笔记已在别处被删除或移走,本端未保存的修改已另存为「{name}」",en:"This note was deleted or moved elsewhere; your unsaved edits were saved as “{name}”"},"amxbridge.connectFailed":{zh:"云端连接失败,内容可能不是最新 —— 请刷新页面",en:"Lost the connection to the cloud, so content may be out of date — please refresh the page"},"amxbridge.tooLarge":{zh:"笔记过大,云端拒绝保存",en:"The note is too large for the cloud to save"},"amxbridge.imageNameFailed":{zh:"无法为图片分配文件名",en:"Couldn't pick a file name for the image"},"amxbridge.attachmentNameFailed":{zh:"无法为附件分配文件名",en:"Couldn't pick a file name for the attachment"},"amxbridge.invalidPath":{zh:"无效路径",en:"Invalid path"},"amxbridge.trashMissing":{zh:"回收站条目不存在",en:"This item is no longer in the trash"},"amxbridge.pathOutsideVault":{zh:"路径越出智库",en:"The path is outside the vault"},"amxbridge.readFailed":{zh:"读取文件失败(HTTP {status})",en:"Couldn't read the file (HTTP {status})"},"amxbridge.notText":{zh:"不是文本文件",en:"Not a text file"},"amxbridge.timeout":{zh:"请求超时({s}s),请检查网络后重试",en:"The request timed out ({s}s). Check your network and try again"},"amxbridge.network":{zh:"网络错误:{msg}",en:"Network error: {msg}"},"amxbridge.deviceTimeout":{zh:"设备请求超时,请检查与对方设备的连接",en:"The device didn't respond in time. Check the connection to it"},"amxbridge.deviceUnreachable":{zh:"设备不可达:{msg}",en:"Can't reach the device: {msg}"},"amxbridge.deviceRevoked":{zh:"连接权限已被对方移除",en:"The other device removed your access"},"amxbridge.deviceTooLarge":{zh:"内容过大:服务器中转通道上限 10MB,同一局域网内直连不受限",en:"Too large: the server relay is limited to 10 MB (a direct connection on the same local network has no limit)"},"amxbridge.deviceHttpError":{zh:"设备端错误(HTTP {status})",en:"Device error (HTTP {status})"},"amxbridge.deviceCallFailed":{zh:"设备端调用失败",en:"The call on the device failed"},"amxbridge.remoteOnly":{zh:"{what}:请在对方设备上操作",en:"{what}: do this on the other device"},"amxbridge.op.openPluginsFolder":{zh:"打开插件文件夹",en:"Open plugins folder"},"amxbridge.op.scaffoldSamplePlugin":{zh:"创建示例插件",en:"Create sample plugin"},"amxbridge.op.uninstallPlugin":{zh:"卸载插件",en:"Uninstall plugin"},"amxbridge.op.reveal":{zh:"在文件管理器中显示",en:"Show in file manager"}});class Fe extends Error{constructor(t,n,i){super(i??`HTTP ${t}`),this.status=t,this.body=n,this.name="HttpError"}status;body}const Re=e=>e instanceof Fe&&e.status===404,Ae=e=>e instanceof Fe&&e.status===409,xl=e=>{let t=0;return e.forEach(n=>{typeof n!="string"&&(t+=n.size)}),12e4+Math.ceil(t/256)};function H1(e){const t=e.getToken(),n=ni(e.apiBase,t),i=()=>{const o=e.getToken();if(e.signal?.aborted||!o||(n?ni(e.apiBase,o)!==n:o!==t))throw new Fe(409,{code:"ACCOUNT_CHANGED"},"Cloud account changed");return o},s=async(o,a,l)=>{const c=l?.query?`?${new URLSearchParams(l.query).toString()}`:"",d={Authorization:`Bearer ${i()}`};o!=="GET"&&(d["X-Amadeus-Client"]=e.clientId);let u;l?.form?u=l.form:l?.json!==void 0&&(d["Content-Type"]="application/json",u=JSON.stringify(l.json));const h=l?.form?xl(l.form):3e4,f=new AbortController,m=()=>f.abort(e.signal?.reason);e.signal?.addEventListener("abort",m,{once:!0});const p=setTimeout(()=>f.abort(),h);let b;try{b=await(e.request??fetch)(`${e.apiBase}${a}${c}`,{method:o,headers:d,body:u,signal:f.signal})}catch(S){throw new Fe(0,null,f.signal.aborted?ie("amxbridge.timeout",{s:Math.round(h/1e3)}):ie("amxbridge.network",{msg:S instanceof Error?S.message:String(S)}))}finally{clearTimeout(p),e.signal?.removeEventListener("abort",m)}if(i(),b.status===401)throw e.onUnauthorized(),new Fe(401,null);const w=await b.text().catch(()=>"");i();let T;try{T=w?JSON.parse(w):void 0}catch{T=w}if(!b.ok)throw new Fe(b.status,T);return T},r=(o,a,l)=>new Promise((c,d)=>{const u=new XMLHttpRequest,h=i(),f=()=>u.abort(),m=()=>e.signal?.removeEventListener("abort",f);u.open("POST",`${e.apiBase}${o}`),u.setRequestHeader("Authorization",`Bearer ${h}`),u.setRequestHeader("X-Amadeus-Client",e.clientId),u.upload.onprogress=p=>{try{i(),p.lengthComputable&&l(p.loaded,p.total)}catch(b){u.abort(),d(b)}},u.onload=()=>{m();try{i()}catch(b){d(b);return}if(u.status===401){e.onUnauthorized(),d(new Fe(401,null));return}let p;try{p=u.responseText?JSON.parse(u.responseText):void 0}catch{p=u.responseText}if(u.status<200||u.status>=300){d(new Fe(u.status,p));return}c(p)},u.onerror=()=>{m(),d(new Fe(0,null,"network error"))},u.ontimeout=()=>{m(),d(new Fe(0,null,"timeout"))},u.onabort=()=>{m(),d(new Fe(409,{code:"ACCOUNT_CHANGED"},"Cloud request cancelled"))},u.timeout=xl(a),e.signal?.addEventListener("abort",f,{once:!0}),u.send(a)});return{get:(o,a)=>s("GET",o,{query:a}),post:(o,a)=>s("POST",o,{json:a??{}}),postForm:(o,a,l)=>l?r(o,a,l):s("POST",o,{form:a}),put:(o,a)=>s("PUT",o,{json:a}),del:(o,a)=>s("DELETE",o,{query:a})}}const q1=/structure|create|delete|remove|move|rename|mkdir|rmdir|folder|binary|upload/;function W1(e){let t=null,n=e.signal?.aborted??!1,i=1e3,s=null,r=null,o=null;const a=()=>{r||(r=setTimeout(()=>{r=null,!n&&e.onStructureChange()},300))},l=()=>{if(!n){a();for(const f of new Set([e.lastLoadedPage(),...e.openPages?.()??[]]))f&&e.onPageChange(f)}},c=f=>{if(n)return;let m;try{m=JSON.parse(f)}catch{return}const p=typeof m.seq=="number"?m.seq:null;p!==null&&(o=Math.max(o??0,p));const b=typeof m.path=="string"?m.path:"",w=`${typeof m.op=="string"?m.op:""} ${typeof m.kind=="string"?m.kind:""}`.toLowerCase();if((!b||q1.test(w))&&a(),!b)return;const T=typeof m.op=="string"?m.op:"",S=typeof m.newPath=="string"&&m.newPath?m.newPath:null,C=typeof m.origin?.client=="string"&&m.origin.client===e.clientId;if(T==="move"&&S){e.onPageMoved?.(b,S,typeof m.fileSeq=="number"?m.fileSeq:null,C);return}if(T==="delete"){e.onPageDeleted?.(b);return}if((T==="rename-folder"||T==="move-folder")&&S){e.onFolderMoved?.(b,S,C);return}if(T==="delete-folder"){e.onFolderDeleted?.(b);return}const $=typeof m.origin?.client=="string"&&m.origin.client===e.clientId,v=e.knownSeq(b),A=p!==null&&v!==void 0&&p<=v;$||A||(/\.md$/i.test(b)?e.onPageChange(b):/\.db$/i.test(b)&&e.onDbChange(b))},d=()=>{if(n)return;const f=o;let m=null,p;try{const b=e.url();p=new EventSource(f===null?b:`${b}${b.includes("?")?"&":"?"}since=${f}`)}catch{u();return}t=p,p.onopen=()=>{n||(i=1e3)},p.addEventListener("hello",b=>{if(n)return;let w=null;try{const T=JSON.parse(b.data);typeof T.seq=="number"&&(w=T.seq)}catch{}f!==null&&w!==null?w<f?(o=w,l()):w>f&&(m=w):w!==null&&(o=Math.max(o??0,w))}),p.addEventListener("change",b=>c(b.data)),p.addEventListener("reset",()=>{l(),m!==null&&(o=Math.max(o??0,m)),m=null}),p.addEventListener("presence",b=>{if(!n)try{e.onPresence?.(JSON.parse(b.data))}catch{}}),p.addEventListener("presence-roster",b=>{if(!n)try{e.onPresenceRoster?.(JSON.parse(b.data))}catch{}}),p.onerror=()=>{p.close(),t===p&&(t=null),u()}},u=()=>{if(n||s)return;const f=i+Math.random()*i*.3;i=Math.min(i*2,3e4),s=setTimeout(()=>{s=null,d()},f)},h=()=>{n=!0,t?.close(),t=null,s&&clearTimeout(s),r&&clearTimeout(r),e.signal?.removeEventListener("abort",h)};return e.signal?.addEventListener("abort",h,{once:!0}),d(),h}const Xe=new Set;let $d=0;const jr=new Set;function _l(){$d++;for(const e of jr)e()}function V1(){return $d}function Z1(e){return jr.add(e),()=>jr.delete(e)}function K1(e){return Xe.add(e),_l(),()=>{Xe.delete(e),_l()}}function He(e){const t=[];let n=0;for(const i of Xe)(e==null||i.path===e)&&t.push({h:i,at:i.lastActive?.()??0,i:n++});return t.sort((i,s)=>s.at-i.at||i.i-s.i).map(i=>i.h)}function G1(e){return He(e)[0]?.scope??null}function Y1(e,t){for(const n of[...Xe])n.path===e&&n.owner!==t&&n.peerWrote?.()}function J1(e,t){const n=He(e).filter(r=>r.patchFm);n.sort((r,o)=>+!!o.dirty?.()-+!!r.dirty?.());let i=null;const s=[];for(const r of n)i?s.push(r):i=r.patchFm(t);if(i)for(const r of s)r.patchFm(t,!0);return i}async function Q1(e=!1){await Promise.all([...Xe].map(t=>e?t.flush(!0):t.flush().catch(()=>{})))}async function X1(e,t=!1){await Promise.all([...Xe].filter(n=>n.path===e).map(n=>t?n.flush(!0):n.flush().catch(()=>{})))}function e_(){for(const e of Xe)e.retire()}function t_(e,t){for(const n of He(e))if(n.insertFiles&&n.insertFiles(t)!==!1)return!0;return!1}function n_(e,t="file",n){for(const i of Xe)(t==="file"?i.path!==e:i.path!==e&&!i.path.startsWith(`${e}/`))||i.retire(n?t==="file"?n:n+i.path.slice(e.length):void 0)}function Rd(){return[...new Set([...Xe].map(e=>e.path))]}function i_(e,t){for(const n of Xe)if(n.path===e&&(n.scope??null)===t)return!0;return!1}function s_(e){for(const t of Xe)if(t.path===e)return!0;return!1}function r_(e){for(const t of He(e))if(t.bodyNow)return t.bodyNow();return null}function o_(e){for(const t of He(e))if(t.statsNow)return t.statsNow();return null}let Nd=0;const Br=new Set;function a_(){Nd++;for(const e of Br)e()}function l_(){return Nd}function c_(e){return Br.add(e),()=>Br.delete(e)}function u_(e){for(const t of He(e))if(t.headings)return t.headings();return null}function d_(e){for(const t of He(e))if(t.fmNow)return t.fmNow();return null}function f_(e,t,n){for(const i of He(e))if(i.insertMarkdown?.(t,n))return!0;return!1}function h_(){return Xe.size>0}function p_(){for(const e of Xe)if(e.insertReply)return!0;return!1}function m_(e,t){if(t)for(const n of He(t.path)){const i=n.insertReply?.(e,t.anchor??null);if(i)return{path:n.path,undo:i.undo}}for(const n of He()){const i=n.insertReply?.(e,null);if(i)return{path:n.path,undo:i.undo}}return null}function g_(e){for(const t of He(e))if(t.focusBody)return t.focusBody();return!1}function b_(e){for(const t of He(e))if(t.fmNow)return t.fmNow();return null}function y_(e,t,n=!1){for(const i of He(e))if(i.revealBlock)return i.revealBlock(t,n);return!1}function w_(e,t,n){for(const i of He(e))if(i.revealText)return i.revealText(t,n);return!1}function k_(e,t,n,i=!1){for(const s of He(e))if(s.revealHeading)return s.revealHeading(t,n,i),!0;return!1}const UC=Object.freeze(Object.defineProperty({__proto__:null,announceUnifiedWrite:Y1,bumpUnifiedStats:a_,flushUnifiedPath:X1,flushUnifiedScopes:Q1,hasUnifiedInstance:s_,insertFilesForPath:t_,registerUnifiedPipe:K1,retireAllUnifiedScopes:e_,retireUnifiedPath:n_,subscribeUnified:Z1,subscribeUnifiedStats:c_,unifiedBody:r_,unifiedFm:d_,unifiedFmNow:b_,unifiedFocusBody:g_,unifiedGen:V1,unifiedHasAny:h_,unifiedHasReplyTarget:p_,unifiedHeadings:u_,unifiedInsertMarkdown:f_,unifiedInsertReply:m_,unifiedPatchFm:J1,unifiedPaths:Rd,unifiedRevealBlock:y_,unifiedRevealHeading:k_,unifiedRevealText:w_,unifiedScopeFor:G1,unifiedScopeLive:i_,unifiedStats:o_,unifiedStatsVer:l_},Symbol.toStringTag,{value:"Module"})),v_=7e4,Sn=new Map,Ur=new Set;function Ld(){const e=Date.now();for(const[t,n]of Sn)e-n.at>v_&&Sn.delete(t);return[...Sn.values()]}function Fd(){const e=Ld();for(const t of Ur)try{t(e)}catch{}}function S_(e){const t=e;!t||typeof t.userId!="string"||(Sn.set(t.userId,{userId:t.userId,username:String(t.username??"user"),page:typeof t.page=="string"?t.page:null,at:Number(t.at)||Date.now()}),Fd())}function ur(e){if(Sn.clear(),Array.isArray(e))for(const t of e){const n=t;n&&typeof n.userId=="string"&&Sn.set(n.userId,n)}Fd()}function x_(e){return Ur.add(e),e(Ld()),()=>{Ur.delete(e)}}let Nt=null;function ds(e,t,n){if(!Nt)return e;const i=new URLSearchParams;i.set("ref",e);const s=t===void 0?Nt.activePage():t;s&&i.set("page",s),n&&i.set("lit",n);const r=Nt.assetToken();return r&&i.set("at",r),`${Nt.apiBase}/amadeus/vaults/${encodeURIComponent(Nt.vaultId())}/asset?${i.toString()}`}function __(e){if(!Nt||e.includes("#"))return null;const t=e.indexOf("?");if(t<0||!/^(https?:\/\/|\/)/.test(e)||!e.slice(0,t).endsWith(`/amadeus/vaults/${encodeURIComponent(Nt.vaultId())}/asset`))return null;const n=new URLSearchParams(e.slice(t+1)),i=n.get("ref")||null,s=n.get("lit");return i&&s&&ft(s)===ft(i)?s:i}function C_(e,t){const n=ft(e);return!n||n===e?ds(e,t?null:void 0):ds(n.includes("/")?n:`${n}/`,t?null:void 0,e)}function A_(e){Nt=e,mu(C_,__)}let Dd=()=>{};function T_(e){Dd=e}const _t=(e,t=!1)=>{try{Dd(e,t)}catch{}},Fi=()=>new Date().toISOString(),zd="amadeus.cloudVaultId";let ti=null;function E_(){return ti?ti():Promise.resolve("default")}function I_(e){const t=zi(zd),n=zi("amadeus_tree_snap"),i=zi("amadeus_last_page"),s=typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():`web-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,10)}`,r=H1({apiBase:e.apiBase,getToken:e.getToken,clientId:s,onUnauthorized:e.onAuthError,request:e.request,signal:e.signal});let o=null,a=null;const l=()=>o??"default";async function c(){return o||a||(a=(async()=>{const g=await r.get("/amadeus/vaults");let k=null;try{k=localStorage.getItem(t)}catch{}if(k&&!g.vaults.some(O=>O.id===k))try{if((await r.get("/amadeus/shared-with-me")).items.some(L=>L.vaultId===k))return o=k,k}catch{}return o=((k?g.vaults.find(O=>O.id===k):void 0)??g.vaults.find(O=>O.id==="default")??g.vaults[0])?.id??"default",o})(),a.catch(()=>{a=null}),a)}ti=c,e.signal&&ur([]);const d=50,u=new Map,h=(g,k)=>{u.delete(g),u.set(g,k),u.size>d&&u.delete(u.keys().next().value)},f=new Map,m=new Map,p=(g,k)=>{const x=m.get(g);return x&&x.seq===k&&f.get(g)===k?x.fp:void 0},b=new Set,w=new Map,T=new Set;class S extends Error{constructor(k){super(`vanished elsewhere: ${k}`),this.path=k}path}const C=(g,k)=>{f.set(g,k),b.add(g),w.delete(g)},$=g=>{f.delete(g),u.delete(g),b.delete(g)},v=(g,k,x)=>{const O=x??f.get(g);f.delete(g),O!==void 0&&(f.set(k,O),b.add(k)),u.delete(g),u.delete(k)},A=async g=>{const k=q(g);return k!==g&&!T.has(g)&&(T.add(g),_t(ie("amxbridge.renamedElsewhere",{name:k.split("/").pop()}))),{target:k,base:await le(k)}},P=g=>{T.has(g)||(T.add(g),_t(ie("amxbridge.deletedElsewhere"),!0))},q=g=>{let k=g;const x=new Set([g]);for(let O=0;O<16;O++){const L=w.get(k);if(!L||x.has(L))break;x.add(L),k=L}return k},R=g=>{const k=q(g);return k===g?[g]:[g,k]},U=g=>{for(const k of[...w.keys()])q(k)===g&&w.delete(k)},B=(g,k,x)=>g.includes(k)?x():ne([k],x),ee=async(g,k,x)=>{if(!x)return P(g),null;const O=new Date,L=K=>String(K).padStart(2,"0"),N=`${O.getFullYear()}-${L(O.getMonth()+1)}-${L(O.getDate())} ${L(O.getHours())}${L(O.getMinutes())}`,j=g.replace(/\.md$/i,"");for(let K=0;K<5;K++){const V=`${j} (recovered ${N}${K?`-${K+1}`:""}).md`;try{await G(V,k,0)}catch(Z){if(Ae(Z))continue;throw Z}return w.set(g,V),ce(),T.has(g)||(T.add(g),_t(ie("amxbridge.deletedElsewhereSaved",{name:V.split("/").pop()}),!0)),V}throw P(g),new S(g)},oe=(g,k)=>{const x=`${g}/`;for(const[O,L]of[...f])O.startsWith(x)&&(f.delete(O),f.set(`${k}/${O.slice(x.length)}`,L));for(const O of[...u.keys()])O.startsWith(x)&&u.delete(O);for(const O of[...b]){if(!O.startsWith(x)||w.has(O))continue;const L=`${k}/${O.slice(x.length)}`;b.add(L),w.set(O,L)}},te=g=>{const k=`${g}/`;for(const x of[...f.keys()])(x===g||x.startsWith(k))&&f.delete(x);for(const x of[...u.keys()])(x===g||x.startsWith(k))&&u.delete(x);for(const x of[...b])(x===g||x.startsWith(k))&&(b.delete(x),U(x))},ue=g=>{const k=`${g}/`;for(const x of[...f.keys()])(x===g||x.startsWith(k))&&(f.delete(x),u.delete(x),U(x))},fe=6e4;let ye=null;const ce=()=>{ye=null};async function _(g=!1){const k=Date.now();if(!g&&ye&&(!ye.settled||k-ye.at<fe))return ye.promise;const x=await c(),O={at:Date.now(),promise:r.get(`/amadeus/vaults/${encodeURIComponent(x)}/tree`),settled:!1};return ye=O,O.promise.then(L=>{O.settled=!0,E(x,L),window.amadeusCloudMaxFileBytes=L.maxFileBytes},()=>{ye===O&&(ye=null)}),O.promise}const E=(g,k)=>{try{localStorage.setItem(n,JSON.stringify({v:g,tree:k}))}catch{}},I=()=>{try{const g=localStorage.getItem(n);if(!g)return null;const k=JSON.parse(g);if(typeof k.v!="string"||!k.tree||!Array.isArray(k.tree.pages)||!Array.isArray(k.tree.files)||!Array.isArray(k.tree.folders))return null;const x=localStorage.getItem(t);return x&&x!==k.v?null:k}catch{return null}},y=g=>[...g.pages,...g.files.map(k=>k.path)],z=g=>!g.split("/").some(k=>k.startsWith(".")),W=g=>{const k=e.pluginExts?.()??[];if(!k.length)return!1;const x=g.toLowerCase();return k.some(O=>x.endsWith(O))},H=g=>z(g)&&!W(g),X=new Map;function ne(g,k){const O=Promise.allSettled(g.map(N=>X.get(N)??Promise.resolve())).then(()=>k()),L=O.then(()=>{},()=>{});for(const N of g)X.set(N,L);return L.then(()=>{for(const N of g)X.get(N)===L&&X.delete(N)}),O}const pe=new Set,we=new Set,qe=new Set,Ce=g=>{for(const k of[...pe])try{k(g)}catch{}},De=()=>{for(const g of[...we])try{g()}catch{}},Xt=g=>{for(const k of[...qe])try{k(g)}catch{}},en=new Set,jn=g=>{for(const k of[...en])try{k(g)}catch{}};let et=null;const Bn=(g=l())=>`${i}:${g}`,mt=g=>{et=g;try{localStorage.setItem(Bn(),g)}catch{}},pi=()=>{try{return localStorage.getItem(Bn())||void 0}catch{return}};let Un="",gt=null;async function tn(){if(!e.signal?.aborted){gt&&(clearTimeout(gt),gt=null);try{const g=await c(),k=await r.post(`/amadeus/vaults/${encodeURIComponent(g)}/asset-token`);if(e.signal?.aborted)return;Un=k.token;const x=Math.max(60,k.ttlSec||600);gt=setTimeout(()=>{tn()},x/2*1e3)}catch{e.signal?.aborted||(gt=setTimeout(()=>{tn()},3e4))}}}A_({apiBase:e.apiBase,vaultId:l,assetToken:()=>Un,activePage:()=>et}),window.amadeusCloudVaults=async()=>{const g=await _();return ix([...g.pages,...g.files.map(k=>k.path)])};let jt=null;e.signal?.addEventListener("abort",()=>{gt&&clearTimeout(gt),gt=null,Un="",jt?.(),jt=null,ti===c&&(ti=null,ur([]))},{once:!0});function mi(g){jt||e.signal?.aborted||(jt=W1({signal:e.signal,url:()=>`${e.apiBase}/amadeus/vaults/${encodeURIComponent(g)}/events?token=${encodeURIComponent(e.getToken())}`,clientId:s,knownSeq:k=>f.get(k),lastLoadedPage:()=>et,openPages:Rd,onPageChange:k=>{u.delete(k),Ce(k)},onDbChange:k=>Xt(k),onPageMoved:(k,x,O,L)=>{w.set(k,x),v(k,x,O??void 0),L||jn({from:k,kind:"file",to:x,root:`cloud://${g}`})},onPageDeleted:k=>{f.delete(k),u.delete(k),U(k)},onFolderMoved:(k,x,O)=>{oe(k,x),O||jn({from:k,kind:"prefix",to:x,root:`cloud://${g}`})},onFolderDeleted:k=>ue(k),onStructureChange:()=>{ce(),u.clear(),De()},onPresence:S_,onPresenceRoster:ur}),window.addEventListener("beforeunload",()=>{jt?.()}))}const F=()=>`/amadeus/vaults/${encodeURIComponent(l())}/file`,M=async g=>{const k=await r.get(F(),{path:g});return C(g,k.seq),m.set(g,{seq:k.seq,fp:cn(k.content)}),k},G=async(g,k,x,O=!1)=>{const L=await r.put(F(),{path:g,content:k,baseSeq:x,...O?{force:!0}:{}});return C(g,L.seq),m.set(g,{seq:L.seq,fp:cn(k)}),u.delete(g),L},le=async g=>{const k=f.get(g);if(k!==void 0)return k;try{return(await M(g)).seq}catch(x){if(!Re(x))throw x;if(b.has(g))throw new S(g);return 0}},he=async g=>{const k=await M(g),x=ji(g,k.content,Fi());return h(g,x),x},Ge=async g=>{try{const k=f.get(g),x=await M(g);if(x.seq===k)return;h(g,ji(g,x.content,Fi())),Ce(g)}catch{}},bt=async g=>{const k=[],O=await NS({readFile:async()=>{throw new Error("not found")},writeFile:async(L,N)=>{k.push({name:L,data:N})},deleteFile:async()=>{},exists:async()=>!1,listDir:async()=>[]},g,Fi());for(const L of k){const N=Hi(Ct(g),L.name);try{await G(N,L.data,0)}catch(j){if(Ae(j))return he(N);throw j}}return ce(),h(g,O),O},tt=async g=>{try{return await he(g)}catch(k){if(Re(k)){if(b.has(g))throw new S(g);return bt(g)}throw k}};async function xt(g,k){const x=fl(k);if(!x)return null;if(x.includes("/"))return ft(Hi(Ct(g),s1(x)));const O=await _(),L=hl(y(O),x);if(L)return L;const N=await _(!0);return hl(y(N),x)}const Ye=async(g,k,x,O,L,N)=>{const j=new FormData;j.append("file",new Blob([x]),k),j.append("path",g),O&&j.append("ifAbsent","1"),N!==void 0&&j.append("baseSeq",String(N));const K=await r.postForm(`/amadeus/vaults/${encodeURIComponent(l())}/binary`,j,L);return C(K.path??g,K.seq),ce(),K},Le=async g=>{const k=await c();for(let x=0;;x++){const O=new AbortController,L=setTimeout(()=>O.abort(),3e4);let N;try{N=await(e.request??fetch)(`${e.apiBase}/amadeus/vaults/${encodeURIComponent(k)}/asset?ref=${encodeURIComponent(`${g}/`)}`,{headers:{Authorization:`Bearer ${e.getToken()}`},signal:O.signal})}catch(j){throw new Fe(0,null,O.signal.aborted?ie("amxbridge.timeout",{s:30}):ie("amxbridge.network",{msg:j instanceof Error?j.message:String(j)}))}finally{clearTimeout(L)}if(N.ok)return N;if(N.status!==404)throw new Fe(N.status,null,ie("amxbridge.readFailed",{status:N.status}));try{await r.get(F(),{path:g})}catch(j){if(Re(j))return null;if(!(j instanceof Fe&&j.body?.code==="BINARY"))throw j}if(x>=1)throw new Error(ie("amxbridge.readFailed",{status:404}))}},nt=async g=>{const k=await Le(g);return k?new TextDecoder("utf-8",{ignoreBOM:!0}).decode(await k.arrayBuffer()):null},ct=(g,k,x)=>{const O=ft(g.replace(/\\/g,"/"))?.normalize("NFC");return O?ne([O],async()=>{await c();const L=new TextEncoder().encode(k),N=Je(O),j=async Z=>{if(!Ae(Z))throw Z;return{ok:!1,current:await nt(O)}};if(x?.create)return Ye(O,N,L,!0).then(()=>({ok:!0}),j);if(typeof x?.base!="string"){await Ye(O,N,L,!1);return}const K=(await _(!0)).entries?.find(Z=>Z.path===O)?.seq??0,V=await nt(O);return cn(V??"")!==x.base?{ok:!1,current:V}:Ye(O,N,L,!1,void 0,K).then(()=>({ok:!0}),j)}):Promise.reject(new Error(ie("amxbridge.pathOutsideVault")))},$e=".trash",yt=`${$e}/.meta.json`,nn=Je(yt),Oo=g=>{try{const k=JSON.parse(g.replace(/^\uFEFF/,""));return!k||typeof k!="object"||Array.isArray(k)?null:Object.values(k).every(x=>!!x&&typeof x.original=="string")?k:null}catch{return null}},jd=async()=>{const g=await nt(yt);return(g?Oo(g):null)??{}},gi=g=>ne([yt],async()=>{let k=f.get(yt)??(await _()).entries?.find(x=>x.path===yt)?.seq??0;for(let x=0;;x++){const O=await nt(yt);let L=O?Oo(O):{};L||(await r.post(`/amadeus/vaults/${encodeURIComponent(l())}/move`,{from:yt,to:`${$e}/${Date.now().toString(36)}-${nn}`}).catch(j=>{if(!Re(j))throw j}),f.delete(yt),ce(),L={},k=0);const N=JSON.stringify(L);if(g(L),JSON.stringify(L)===N)return;try{await Ye(yt,nn,new TextEncoder().encode(`${JSON.stringify(L,null,2)}
|
|
297
|
-
`),!1,void 0,k);return}catch(j){if(!Ae(j)||x>=3)throw j;k=Number(j.body?.seq)||0}}}),$o=async g=>y(g).includes(yt)?jd():{},bi=g=>{const k=new Set;for(const x of[...y(g),...g.folders])x.startsWith(`${$e}/`)&&k.add(x.slice($e.length+1).split("/")[0]);return k.delete(nn),k},Ro=(g,k,x)=>{if(!bi(g).has(x))return null;const O=g.folders.includes(`${$e}/${x}`);return Object.prototype.hasOwnProperty.call(k,x)?{...k[x],dir:O}:{original:x,deletedAt:0,dir:O}};let Bd=0,yi=null;const No=async()=>{const g=I();if(g){await tn(),(async()=>{for(let K=0;;K++){if(e.signal?.aborted)return;try{const V=await c();await _(!0),mi(V),De();return}catch{if(e.signal?.aborted)return;if(K>=2){_t(ie("amxbridge.connectFailed"),!0);return}await new Promise(V=>{const Z=()=>{clearTimeout(Pe),e.signal?.removeEventListener("abort",Z),V()},Pe=setTimeout(Z,[3e3,1e4][K]);e.signal?.addEventListener("abort",Z,{once:!0}),e.signal?.aborted&&Z()})}}})();let N;try{N=localStorage.getItem(Bn(g.v))||void 0}catch{}const j=g.tree.pages.filter(H);return{root:`cloud://${g.v}`,pages:j,folders:g.tree.folders.filter(z),lastPage:N&&j.includes(N)?N:void 0}}const k=await c(),[x]=await Promise.all([_(!0),tn()]);mi(k);const O=pi(),L=x.pages.filter(H);return{root:`cloud://${k}`,pages:L,folders:x.folders.filter(z),lastPage:O&&L.includes(O)?O:void 0}},Ud=(g,k,x)=>ne([g],async()=>{await c();for(let O=0;O<3;O++){let L;try{L=await M(g)}catch(N){if(Re(N))return"gone";throw N}if(cn(L.content)!==x)return{ok:!1,current:L.content};try{return await G(g,k,L.seq),{ok:!0}}catch(N){if(!Ae(N))throw N}}throw new Error("conflict")}),Hn=async(g,k,x)=>{let O=null;const L=await g1({exists:async N=>(await(O??=_(!0).then(j=>new Set(j.files.map(K=>K.path))))).has(N),read:async N=>{try{return(await M(N)).content}catch(j){if(Re(j))return null;throw j}},write:Ud},g,k,{folder:x});for(const N of L.rewritten)Ce(N);U1(L.failed.map(N=>N.path))},Lo=(g,k)=>g.pages.some(x=>x.startsWith(`${k}/`))||g.files.some(x=>x.path.startsWith(`${k}/`)),Fo=(g,k,x)=>{const O=`${k}/`,L={};for(const N of g)N.startsWith(O)&&(L[N]=`${x}/${N.slice(O.length)}`);return L};return y1({openVault:()=>No(),restoreVault:()=>No(),listPages:async()=>(await _()).pages.filter(H),listFiles:async()=>{const g=await _(),k=g.files.map(O=>O.path).filter(z),x=g.pages.filter(O=>z(O)&&W(O));return x.length?[...k,...x].sort():k},listFolders:async()=>(await _()).folders.filter(z),loadPage:async g=>{await c();const k=u.get(g);if(k)return mt(g),Ge(g),k;const x=await tt(g);return mt(g),x},readPage:async g=>{await c();try{return await he(g)}catch(k){throw Re(k)?new Error(`note not found: ${g}`):k}},newPage:async g=>{await c();const k=await ne([g],()=>bt(g));return mt(g),k},savePage:(g,k,x)=>{const O=R(g);return ne(O,async()=>{await c();const L=Ar(k,x),N=Object.values(x).some(V=>typeof V=="string"&&V.trim().length>0);let j,K;try{({target:j,base:K}=await A(g))}catch(V){if(V instanceof S){await ee(g,L,N);return}throw V}await B(O,j,async()=>{try{await G(j,L,K),h(j,ji(j,L,Fi()))}catch(V){if(Ae(V)){const Z=V.body;if(Z?.code==="CONFLICT"&&Z.seq===0){f.delete(j),await ee(g,L,N);return}Z&&typeof Z.seq=="number"&&C(j,Z.seq),u.delete(g),_t(ie("amxbridge.conflictReloaded"),!0),setTimeout(()=>Ce(g),0);return}throw V instanceof Fe&&V.status===413&&_t(ie("amxbridge.tooLarge"),!0),V}})})},renamePage:(g,k,x,O)=>{let L=null;return ne([g,Di(g,k,ie("amxbridge.pageNameEmpty"))],async()=>{await c();const N=Di(g,k,ie("amxbridge.pageNameEmpty"));if(N===g)return{newPath:g,page:await he(g)};const j=await _(!0);if(L=j.pages.filter(H),y(j).includes(N)||j.folders.includes(N))throw new Error(ie("amxbridge.pageExists"));const K=Ar(x,O);await G(g,K,await le(g),!0);let V;try{V=await r.post(`/amadeus/vaults/${encodeURIComponent(l())}/move`,{from:g,to:N})}catch(Z){throw Ae(Z)?new Error(ie("amxbridge.pageExists")):Z}return v(g,N,V.seq),ce(),mt(N),{newPath:N,page:null}}).then(async N=>N.page?{newPath:N.newPath,page:N.page}:(L&&await Hn({[g]:N.newPath},L),{newPath:N.newPath,page:await he(N.newPath)}))},reconcilePage:async g=>(await c(),tt(g)),saveAsset:async(g,k,x,O)=>{await c();const L=Nr(k),N=(L||".png").toLowerCase().replace(/[^.a-z0-9]/g,""),j=Je(k).slice(0,Je(k).length-L.length).replace(/[^a-zA-Z0-9_-]/g,"").slice(0,24)||"img";for(let K=0;K<5;K++){const V=`${j}-${Date.now().toString(36)}-${(Bd++).toString(36)}${N||".png"}`,Z=ft(Hi(Ct(g),`.amadeus/${V}`));if(Z===null)throw new Error("Asset escapes vault");try{return await Ye(Z,V,x,!0,O),`.amadeus/${V}`}catch(Pe){if(Ae(Pe))continue;throw Pe}}throw new Error(ie("amxbridge.imageNameFailed"))},saveAttachment:async(g,k,x,O,L)=>{await c();const N=(Je(k)||"file").replace(/[\\/]/g,""),{destDirRel:j}=pl(g,N,O),K=await _(!0),V=new Set(y(K).filter(_e=>Ct(_e)===j).map(_e=>Je(_e).toLowerCase()));let Z=ml(V,N);const Pe=ar(N);for(let _e=0;_e<20;_e++){const{fileVaultRel:Ot,pageRel:sn}=pl(g,Z,O),Rs=ft(Ot);if(Rs===null)throw new Error("Asset escapes vault");try{return Pe?await G(Rs,new TextDecoder().decode(x),0):await Ye(Rs,Z,x,!0,L),{pageRel:sn,base:Z}}catch(Do){if(Ae(Do)){V.add(Z.toLowerCase()),Z=ml(V,N);continue}throw Do}}throw new Error(ie("amxbridge.attachmentNameFailed"))},openAttachment:async(g,k)=>{await c(),window.open(ds(fl(k),g),"_blank","noopener")},openVaultFile:async g=>{await c(),window.open(ds(g,null),"_blank","noopener")},exportPdf:async()=>(window.print(),null),onExternalChange:g=>(pe.add(g),()=>{pe.delete(g)}),onStructureChange:g=>(we.add(g),()=>{we.delete(g)}),onDbExternalChange:g=>(qe.add(g),()=>{qe.delete(g)}),onPathGone:g=>(en.add(g),()=>{en.delete(g)}),search:async g=>(await c(),(await r.get(`/amadeus/vaults/${encodeURIComponent(l())}/search`,{q:g})).filter(x=>z(x.path))),backlinks:async g=>(await c(),r.get(`/amadeus/vaults/${encodeURIComponent(l())}/backlinks`,{path:g})),reindex:async()=>{await c(),await r.post(`/amadeus/vaults/${encodeURIComponent(l())}/reindex`)},listTags:async()=>(await c(),r.get(`/amadeus/vaults/${encodeURIComponent(l())}/tags`)),pagesByTag:async g=>(await c(),(await r.get(`/amadeus/vaults/${encodeURIComponent(l())}/tags/pages`,{tag:g})).paths),resolveEmbed:async(g,k)=>{await c();const{note:x,subpath:O}=G0(g),L=(await _()).pages.filter(H).sort(),N=x?Ui(x,L,k):k&&L.includes(k)?k:null;if(N){let V=null;try{V=(await M(N)).content}catch(Z){if(!Re(Z))throw Z}if(V!=null){if(!O)return{owner:N,content:Za(V),type:"markdown"};const Z=_d(V,O.trim().replace(/\.block$/i,"").toLowerCase())??n1(Za(V),O);return Z==null?null:{owner:N,content:Z,type:"markdown"}}}const j=O?`${x}#${O}`:x;return j?await r.get(`/amadeus/vaults/${encodeURIComponent(l())}/embed`,{target:j})??null:null},blockBacklinks:async g=>(await c(),r.get(`/amadeus/vaults/${encodeURIComponent(l())}/block-backlinks`,{target:g})),deletePage:g=>ne([g],async()=>{await c(),await r.del(F(),{path:g}),$(g),ce()}),movePage:(g,k)=>{let x=null;return ne([g],async()=>{await c();const O=$l(g),L=k.replace(/\\/g,"/").replace(/^\/+|\/+$/g,""),N=L?`${L}/${O}`:O;if(N===g)return g;N.endsWith(".md")&&(x=(await _(!0)).pages.filter(H));let j;try{j=await r.post(`/amadeus/vaults/${encodeURIComponent(l())}/move`,{from:g,to:N})}catch(K){throw Ae(K)?new Error(ie("amxbridge.fileExistsAtTarget")):K}return v(g,N,j.seq),ce(),N.endsWith(".md")&&mt(N),N}).then(async O=>(O!==g&&x&&await Hn({[g]:O},x),O))},createFolder:async(g,k)=>{await c();const x=k.trim().replace(/[\\/]/g,"");if(!x)throw new Error(ie("amxbridge.folderNameEmpty"));const O=g.replace(/\\/g,"/").replace(/^\/+|\/+$/g,"");try{const L=await r.post(`/amadeus/vaults/${encodeURIComponent(l())}/folders`,{parent:O,name:x});return ce(),L.path}catch(L){throw Ae(L)?new Error(ie("amxbridge.folderExists")):L}},renameFolder:async(g,k)=>{await c();const x=k.trim().replace(/[\\/]/g,"");if(!x)throw new Error(ie("amxbridge.folderNameEmpty"));const O=Ct(g);if((O?`${O}/${x}`:x)===g)return g;const N=await _(!0),j=N.pages.filter(H),K=Lo(N,g);let V;try{V=await r.post(`/amadeus/vaults/${encodeURIComponent(l())}/folders/rename`,{path:g,newName:x})}catch(Z){throw Ae(Z)?new Error(ie("amxbridge.folderExists")):Z}return oe(g,V.path),et&&et.startsWith(`${g}/`)&&mt(`${V.path}${et.slice(g.length)}`),ce(),await Hn(Fo(j,g,V.path),j,K?[g,V.path]:void 0),V.path},deleteFolder:async g=>{await c(),await r.del(`/amadeus/vaults/${encodeURIComponent(l())}/folders`,{path:g}),te(g),ce()},moveFolder:async(g,k)=>{await c();const x=g.replace(/\\/g,"/").replace(/^\/+|\/+$/g,""),O=Je(x);if(!O)throw new Error(ie("amxbridge.folderPathEmpty"));const L=k.replace(/\\/g,"/").replace(/^\/+|\/+$/g,"");if((L?`${L}/${O}`:O)===x)return x;if(L===x||L.startsWith(`${x}/`))throw new Error(ie("amxbridge.moveIntoSelf"));const j=await _(!0),K=j.pages.filter(H),V=Lo(j,x);let Z;try{Z=await r.post(`/amadeus/vaults/${encodeURIComponent(l())}/folders/move`,{path:x,dest:L})}catch(Pe){throw Ae(Pe)?new Error(ie("amxbridge.folderExistsAtTarget")):Pe}return oe(x,Z.path),et&&et.startsWith(`${x}/`)&&mt(`${Z.path}${et.slice(x.length)}`),ce(),await Hn(Fo(K,x,Z.path),K,V?[x,Z.path]:void 0),Z.path},trashEntry:async g=>{await c();const k=g.replace(/\\/g,"/").replace(/^\/+|\/+$/g,"");if(!k||k===$e||k.startsWith(`${$e}/`))throw new Error(ie("amxbridge.invalidPath"));const x=await _(!0),O=x.folders.includes(k),L=Date.now().toString(36);try{if(O){let N=k,j=Je(k);if(j===nn||x.folders.includes(`${$e}/${j}`)){const K=await r.post(`/amadeus/vaults/${encodeURIComponent(l())}/folders/rename`,{path:k,newName:`${j} (${L})`});N=K.path,j=Je(K.path)}await r.post(`/amadeus/vaults/${encodeURIComponent(l())}/folders/move`,{path:N,dest:$e}),te(k),await gi(K=>{K[j]={original:k,deletedAt:Date.now(),dir:!0}})}else{let N=k.replace(/\//g,"__");(N===nn||y(x).includes(`${$e}/${N}`))&&(N=`${L}-${N}`),await r.post(`/amadeus/vaults/${encodeURIComponent(l())}/move`,{from:k,to:`${$e}/${N}`}),$(k),await gi(j=>{j[N]={original:k,deletedAt:Date.now(),dir:!1}})}}finally{ce()}},listTrash:async()=>{await c();const g=await _(),k=await $o(g);return[...bi(g)].map(x=>({name:x,...Ro(g,k,x)})).sort((x,O)=>O.deletedAt-x.deletedAt)},restoreTrash:async g=>{await c();const k=await _(!0),x=Ro(k,await $o(k),g);if(!x)throw new Error(ie("amxbridge.trashMissing"));const O=N=>y(k).includes(N)||k.folders.includes(N);let L=x.original;for(let N=2;O(L);N++)if(x.dir)L=`${x.original} (${N})`;else{const j=Nr(x.original);L=`${x.original.slice(0,x.original.length-j.length)} (${N})${j}`}if(x.dir){const N=`${$e}/${g}`,j=Je(L),K=Ct(L),V=(Z,Pe)=>r.post(`/amadeus/vaults/${encodeURIComponent(l())}/folders/${Z}`,Pe);g===j?await V("move",{path:N,dest:K}):j!==nn&&!bi(k).has(j)?await V("move",{path:(await V("rename",{path:N,newName:j})).path,dest:K}):(await V("move",{path:N,dest:K}),await V("rename",{path:K?`${K}/${g}`:g,newName:j}))}else await r.post(`/amadeus/vaults/${encodeURIComponent(l())}/move`,{from:`${$e}/${g}`,to:L});return await gi(N=>{delete N[g]}),ce(),L},deleteTrashEntry:async g=>{await c();const k=await _(!0);bi(k).has(g)&&(k.folders.includes(`${$e}/${g}`)?await r.del(`/amadeus/vaults/${encodeURIComponent(l())}/folders`,{path:`${$e}/${g}`}).catch(x=>{if(!Re(x))throw x}):await r.del(F(),{path:`${$e}/${g}`}).catch(x=>{if(!Re(x))throw x})),await gi(x=>{delete x[g]}),ce()},emptyTrash:async()=>{await c(),await r.del(`/amadeus/vaults/${encodeURIComponent(l())}/folders`,{path:$e}).catch(g=>{if(!Re(g))throw g}),te($e),ce()},saveVaultBytes:async(g,k)=>{await c();const x=ft(g.replace(/\\/g,"/"));if(!x)throw new Error(ie("amxbridge.pathOutsideVault"));await Ye(x,Je(x),k,!1)},readVaultBytes:async g=>{const k=ft(g.replace(/\\/g,"/")),x=k?await Le(k):null;if(!x)throw new Error(ie("amxbridge.readFailed",{status:404}));return new Uint8Array(await x.arrayBuffer())},fetchLinkMeta:async g=>{try{return await r.get("/amadeus/link-meta",{url:g})}catch{return null}},searchImages:async g=>{const k=g.trim();if(!k)return[];const x=await fetch(`https://api.openverse.org/v1/images/?q=${encodeURIComponent(k)}&page_size=20`,{headers:{accept:"application/json"}});if(!x.ok)throw new Error(`openverse HTTP ${x.status}`);return((await x.json()).results??[]).map(L=>({thumb:L.thumbnail??"",full:L.url??"",author:L.creator})).filter(L=>L.thumb&&L.full)},listPlugins:async()=>[],openPluginsFolder:async()=>{_t(ie("amxbridge.desktopOnly"))},scaffoldSamplePlugin:async()=>{_t(ie("amxbridge.desktopOnly"))},revealInFileManager:async()=>{_t(ie("amxbridge.desktopOnly"))},hostCaps:{revealInFileManager:!1},readDatabase:async(g,k)=>{await c();const x=await xt(g,k);if(!x)return{status:"missing"};let O;try{O=await M(x)}catch(N){if(Re(N))return{status:"missing"};if(N instanceof Fe&&N.status===400)return{status:"corrupt",path:x,message:ie("amxbridge.notText")};throw N}const L=Su(O.content);return L.ok?{status:"ok",path:x,data:L.data}:{status:"corrupt",path:x,message:L.error}},writeDatabase:(g,k)=>ne([g],async()=>{await c();const x=vu.parse(k),O=cx(x),L=await le(g);try{await G(g,O,L)}catch(N){if(Ae(N)){try{await M(g)}catch{}setTimeout(()=>Xt(g),0);return}throw N}}),readDrawing:async(g,k)=>{await c();const x=await xt(g,k)??await xt(g,`${k}.md`);if(!x)return{status:"missing"};for(const O of x.endsWith(".md")?[x]:[x,`${x}.md`])try{const L=await M(O);return{status:"ok",path:O,source:L.content}}catch(L){if(!Re(L))throw L}return{status:"missing"}},writeDrawing:(g,k)=>ne([g],async()=>{await c();const x=await le(g);try{await G(g,k,x)}catch(O){if(!Ae(O))throw O;try{const N=await M(g),j=Ja(k),K=Ja(N.content),V=j?JSON.parse(j.sceneJson):null,Z=K?JSON.parse(K.sceneJson):null;if(V&&Z){const Pe=dx(N.content,JSON.stringify(bx(V,Z)));if(Pe){await G(g,Pe,N.seq);return}}}catch{}const L=O.body;L&&typeof L.seq=="number"&&C(g,L.seq),await G(g,k,f.get(g)??0,!0)}}),readTextFile:async g=>{if(await c(),!ar(g)){const k=ft(g.replace(/\\/g,"/"));return k?nt(k):null}try{return(await M(g)).content}catch(k){if(Re(k))return null;throw k}},writeTextFile:(g,k,x)=>{if(!ar(g))return ct(g,k,x);const O=R(g),L=typeof x?.base=="string"?x.base:null,N=()=>L!=null?{ok:!0}:void 0;return ne(O,async()=>{if(await c(),x?.create){try{return await G(g,k,0),w.delete(g),ce(),{ok:!0}}catch(Z){if(!Ae(Z))throw Z}try{return{ok:!1,current:(await M(g)).content}}catch(Z){if(Re(Z))return{ok:!1,current:null};throw Z}}const j=k.trim().length>0;let K,V;try{({target:K,base:V}=await A(g))}catch(Z){if(Z instanceof S)return await ee(g,k,j),N();throw Z}if(L!=null){const Z=L;return B(O,K,async()=>{const Pe=async()=>{let _e;try{_e=await M(K)}catch(Ot){if(Re(Ot))return"vanished";throw Ot}return cn(_e.content)===Z?_e.seq:{ok:!1,current:_e.content}};if(V>0&&p(K,V)!==Z){const _e=await Pe();if(_e==="vanished")return await ee(g,k,j),N();if(typeof _e!="number")return _e;V=_e}for(let _e=0;;_e++)try{return await G(K,k,V),{ok:!0}}catch(Ot){if(!Ae(Ot))throw Ot;const sn=await Pe();if(sn==="vanished")return await ee(g,k,j),N();if(typeof sn!="number")return sn;if(_e>=2)throw Ot;V=sn}})}await B(O,K,async()=>{try{await G(K,k,V)}catch(Z){if(!Ae(Z))throw Z;let Pe;try{Pe=await M(K)}catch(_e){if(Re(_e)){await ee(g,k,j);return}throw _e}await G(K,k,Pe.seq,!0)}})})},listPageProps:async g=>(await c(),(await r.get(`/amadeus/vaults/${encodeURIComponent(l())}/page-props`,{folder:g})).map(x=>({path:x.path,title:x.title,fm:cl(x.fmExtra||"")}))),pageIcons:async()=>{await c();const g=await _();if(yi&&yi.seq===g.seq)return yi.icons;const k=await r.get(`/amadeus/vaults/${encodeURIComponent(l())}/page-props`,{folder:"",all:"1"}),x={};for(const O of k){const L=cl(O.fmExtra||"").icon;typeof L=="string"&&L&&(x[O.path]=L)}return yi={seq:g.seq,icons:x},x},setPageFrontmatter:(g,k)=>ne([g],async()=>{await c();const x=async()=>{let O;try{O=await M(g)}catch(N){if(Re(N))return"ok";throw N}const L=I0(O.content,k);if(L===O.content)return"ok";try{return await G(g,L,O.seq),"ok"}catch(N){if(Ae(N))return"conflict";throw N}};if(await x()==="conflict")try{await x()}catch{}}),renamePageFile:(g,k)=>{let x=null;return ne([g,Di(g,k,ie("amxbridge.noteNameEmpty"))],async()=>{await c();const O=Di(g,k,ie("amxbridge.noteNameEmpty"));if(O===g)return g;x=(await _(!0)).pages.filter(H);let L;try{L=await r.post(`/amadeus/vaults/${encodeURIComponent(l())}/move`,{from:g,to:O})}catch(N){throw Ae(N)?new Error(ie("amxbridge.noteExists")):N}return v(g,O,L.seq),ce(),O}).then(async O=>(O!==g&&x&&await Hn({[g]:O},x),O))},renameDbFile:(g,k)=>ne([g],async()=>{await c();const x=g.replace(/\\/g,"/");let O=k.trim().replace(/[\\/]/g,"");if(O.toLowerCase().endsWith(".db")&&(O=O.slice(0,-3)),!O)throw new Error(ie("amxbridge.nameEmpty"));const L=Ct(x),N=L?`${L}/${O}.db`:`${O}.db`;if(N===x)return{newPath:N,rewrittenPages:[]};let j;try{j=await r.post(`/amadeus/vaults/${encodeURIComponent(l())}/move`,{from:x,to:N})}catch(K){throw Ae(K)?new Error(ie("amxbridge.fileExists")):K}return v(x,N,j.seq),ce(),{newPath:N,rewrittenPages:[]}})})}function Di(e,t,n){const i=Ct(e);let s=t.trim().replace(/[\\/]/g,"");if(!s)throw new Error(n);return s.toLowerCase().endsWith(".md")&&(s=s.slice(0,-3)),i?`${i}/${s}.md`:`${s}.md`}const P_=async e=>{if(!e.ok){let t=null;try{t=await e.json()}catch{}const n=new Error(t?.detail||`http ${e.status}`);throw n.status=e.status,n.code=t?.code,n}return e.json()};function O_(e){const t=zi(zd),n=e.getToken(),i=ni(e.apiBase,n),s=()=>{const p=e.getToken();if(e.signal?.aborted||!p||(i?ni(e.apiBase,p)!==i:p!==n))throw new Error("Cloud account changed");return p},r=async(p,b,w)=>{const T=s(),S=new AbortController,C=()=>S.abort(e.signal?.reason);e.signal?.addEventListener("abort",C,{once:!0});const $=setTimeout(()=>S.abort(),2e4);try{const v=await P_(await(e.request??fetch)(`${e.apiBase}/amadeus${b}`,{method:p,headers:{Authorization:`Bearer ${T}`,...w!==void 0?{"Content-Type":"application/json"}:{}},body:w!==void 0?JSON.stringify(w):void 0,signal:S.signal}));return s(),v}finally{clearTimeout($),e.signal?.removeEventListener("abort",C)}},o=()=>E_();let a=e.linkBase?.replace(/\/+$/,"")||null;const l=async()=>{if(a)return a;try{a=((await r("GET","/collab/link-base")).webOrigin??"").trim().replace(/\/+$/,"")||location.origin}catch{a=location.origin}return a},c=()=>a??location.origin;e.signal?.aborted||l();const d=()=>{if(s(),e.getUserId)return e.getUserId();try{const p=e.getToken().split(".")[1],b=JSON.parse(atob(p.replace(/-/g,"+").replace(/_/g,"/")));return typeof b.userId=="string"?b.userId:null}catch{return null}};let u=null,h=null;const f=()=>{u&&(clearInterval(u),u=null)};e.signal?.addEventListener("abort",f,{once:!0});const m=()=>{e.signal?.aborted||o().then(p=>r("POST",`/vaults/${encodeURIComponent(p)}/presence`,{page:h})).catch(()=>{})};window.amadeusCollab={listVaults:()=>r("GET","/vaults").then(p=>p.vaults),activeVaultId:o,switchVault(p){s();try{localStorage.setItem(t,p)}catch{}location.reload()},pageShare:async p=>r("GET",`/vaults/${encodeURIComponent(await o())}/page-shares?path=${encodeURIComponent(p)}`),createPageShare:async(p,b)=>r("POST",`/vaults/${encodeURIComponent(await o())}/page-shares`,{path:p,...b}),updatePageShare:async(p,b)=>r("PATCH",`/vaults/${encodeURIComponent(await o())}/page-shares/${encodeURIComponent(p)}`,b),revokePageShare:async p=>{await r("DELETE",`/vaults/${encodeURIComponent(await o())}/page-shares/${encodeURIComponent(p)}`)},setParticipantRole:async(p,b,w)=>{await r("PATCH",`/vaults/${encodeURIComponent(await o())}/page-shares/${encodeURIComponent(p)}/members/${encodeURIComponent(b)}`,{role:w})},removeParticipant:async(p,b)=>{await r("DELETE",`/vaults/${encodeURIComponent(await o())}/page-shares/${encodeURIComponent(p)}/members/${encodeURIComponent(b)}`)},sharedWithMe:()=>r("GET","/shared-with-me").then(p=>p.items),leaveShare:async p=>{const b=d();b&&await r("DELETE",`/vaults/${encodeURIComponent(await o())}/page-shares/${encodeURIComponent(p)}/members/${encodeURIComponent(b)}`)},inviteUrl:p=>`${c()}/invite/${p}`,publishes:async()=>r("GET",`/vaults/${encodeURIComponent(await o())}/shares`),createPublish:async(p,b)=>{const w=await r("POST",`/vaults/${encodeURIComponent(await o())}/shares`,{mode:p,path:b});return{...w,url:`${c()}/share/${w.token}`}},revokePublish:async p=>{await r("DELETE",`/vaults/${encodeURIComponent(await o())}/shares/${encodeURIComponent(p)}`)},publishUrl:p=>`${c()}/share/${p}`,revokePublishIn:async(p,b)=>{await r("DELETE",`/vaults/${encodeURIComponent(p)}/shares/${encodeURIComponent(b)}`)},revokePageShareIn:async(p,b)=>{await r("DELETE",`/vaults/${encodeURIComponent(p)}/page-shares/${encodeURIComponent(b)}`)},listAllShares:async()=>{const p=(await r("GET","/vaults")).vaults||[],b=d(),w=[],T=[];for(const S of p){try{const C=await r("GET",`/vaults/${encodeURIComponent(S.id)}/shares`);for(const $ of C.shares||[])w.push({...$,vaultId:S.id,vaultName:S.name||""})}catch{}try{const C=await r("GET",`/vaults/${encodeURIComponent(S.id)}/page-shares`),$=C?.shares||C?.pageShares||(Array.isArray(C)?C:[]);for(const v of $){const A=v.created_by??v.createdBy;(!b||!A||A===b)&&T.push({...v,vaultId:S.id,vaultName:S.name||""})}}catch{}}return{publishes:w,pageShares:T,linkBase:await l()}},heartbeat(p){s(),h=p,m(),u||(u=setInterval(m,3e4))},stopHeartbeat:f,onPresence:p=>x_(p),myUserId:d}}Io({"unit.bootError.title":{zh:"暂时无法打开此 Unit",en:"Unable to open this Unit"},"unit.bootError.detail":{zh:"请检查连接后重试。",en:"Check your connection and try again."},"unit.bootError.retry":{zh:"重试",en:"Try again"}});function Md(){const e=document.getElementById("root")??document.body.appendChild(document.createElement("main")),t=document.createElement("section");t.setAttribute("role","alert");const n=document.documentElement.dataset.mode==="dark";t.style.cssText='max-width:440px;margin:15vh auto;padding:24px;font:15px/1.6 -apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif',t.style.color=`var(--text,${n?"#f2efe8":"#1c1c1c"})`,t.style.colorScheme=n?"dark":"light";const i=document.createElement("h1");i.textContent=ie("unit.bootError.title"),i.style.cssText="font-size:20px;font-weight:600;margin:0 0 8px";const s=document.createElement("p");s.textContent=ie("unit.bootError.detail"),s.style.cssText="margin:0 0 20px;color:var(--text-muted,inherit)";const r=document.createElement("button");r.type="button",r.textContent=ie("unit.bootError.retry"),r.style.cssText="font:inherit;padding:7px 16px;cursor:pointer",r.addEventListener("click",()=>location.reload()),t.append(i,s,r),e.replaceChildren(t),r.focus()}function $_(e,t){if(e.origin!==t.origin||!e.pathname.startsWith(t.pathname))return null;const n=/^(share|invite)\/([^/]+)\/?$/.exec(e.pathname.slice(t.pathname.length));return n?{kind:n[1],token:decodeURIComponent(n[2])}:null}const Cl=()=>dt(async()=>{const{useApp:e}=await import("./appStore-CidPWYa0.js").then(t=>t.sr);return{useApp:e}},__vite__mapDeps([0,1,2,3,4]),import.meta.url).then(({useApp:e})=>{T_((t,n)=>e.getState().toast(t,n))});async function R_(){const e=location.pathname;if(window.__FORSION_UNIT_PAGE__){const t=window.__FORSION_UNIT_PAGE__,n=new URL(".",document.baseURI),i=$_(new URL(location.href),n);if(i&&t.capabilities?.amadeus){const s=new URL(t.capabilities.amadeus.apiBase,location.origin).href.replace(/\/+$/,"");if(i.kind==="share"){const{mountSharePage:r}=await dt(async()=>{const{mountSharePage:o}=await import("./sharePage-C2Yqx0NQ.js");return{mountSharePage:o}},[],import.meta.url);r(i.token,{apiBase:s})}else{if(!t.account)throw new Error("Invitations require an account provider");const{installUnitAccount:r}=await dt(async()=>{const{installUnitAccount:l}=await import("./unitAccount-BIAIxKNp.js");return{installUnitAccount:l}},[],import.meta.url),o=await r({instanceId:t.instanceId,account:t.account},n);if(!o.account.getIdentity()){await o.login();return}const{mountInvitePage:a}=await dt(async()=>{const{mountInvitePage:l}=await import("./invitePage-Dgl3-c_m.js");return{mountInvitePage:l}},__vite__mapDeps([5,3]),import.meta.url);a(i.token,{apiBase:s,getToken:o.account.getToken,request:o.capability.request,appBase:n.href})}return}dt(()=>import("./unitShim-CY8EVkKD.js"),[],import.meta.url).then(async s=>{if(!await s.installUnitShim())return;let r=!1;try{r=(new URLSearchParams(location.search).get("ui")||localStorage.getItem("lcl.uiMode"))==="mobile"}catch{}await(r?dt(()=>import("./mobileEntry-5UaAITwY.js"),__vite__mapDeps([6,3,7,0,1,2,4,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82]),import.meta.url):dt(()=>import("./main-D7CEGndC.js"),__vite__mapDeps([83,3,7,0,1,2,4,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,84]),import.meta.url)),t.capabilities?.amadeus&&await Cl()}).catch(s=>{console.error("[unit-page] bootstrap failed:",s),Md()})}else if(e.startsWith("/share/"))dt(()=>import("./sharePage-C2Yqx0NQ.js"),[],import.meta.url).then(t=>t.mountSharePage(decodeURIComponent(e.slice(7)).replace(/\/+$/,""))).catch(t=>console.error("[tangu-web] share page failed:",t));else if(e.startsWith("/invite/"))await Jd()&&dt(()=>import("./invitePage-Dgl3-c_m.js"),__vite__mapDeps([5,3]),import.meta.url).then(t=>t.mountInvitePage(decodeURIComponent(e.slice(8)).replace(/\/+$/,""))).catch(t=>console.error("[tangu-web] invite page failed:",t));else if(await Qd()){window.amadeus=I_({apiBase:_n(),getToken:Mo,onAuthError:Il}),O_({apiBase:_n(),getToken:Mo});let t=!1;try{t=(new URLSearchParams(location.search).get("ui")||localStorage.getItem("lcl.uiMode"))==="mobile"}catch{}(t?dt(()=>import("./mobileEntry-5UaAITwY.js"),__vite__mapDeps([6,3,7,0,1,2,4,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82]),import.meta.url):dt(()=>import("./main-D7CEGndC.js"),__vite__mapDeps([83,3,7,0,1,2,4,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,84]),import.meta.url)).then(Cl).catch(n=>console.error("[tangu-web] bootstrap failed:",n))}}R_().catch(e=>{console.error("[tangu-web] Account bootstrap failed:",e),window.__FORSION_UNIT_PAGE__&&Md()});export{E1 as $,an as A,j1 as B,zC as C,eC as D,p_ as E,m_ as F,Z1 as G,h_ as H,eu as I,tC as J,zr as K,MC as L,jC as M,Zd as N,NC as O,cn as P,EC as Q,CC as R,IC as S,AC as T,dc as U,B0 as V,Aw as W,tu as X,Ve as Y,D1 as Z,dt as _,Mo as a,ef as a$,T1 as a0,A1 as a1,C1 as a2,_1 as a3,LC as a4,hi as a5,Od as a6,lf as a7,af as a8,Ji as a9,M0 as aA,w_ as aB,Pl as aC,Ar as aD,G1 as aE,g_ as aF,s_ as aG,Xd as aH,Y_ as aI,J_ as aJ,aC as aK,Qs as aL,cC as aM,lx as aN,Hi as aO,Ja as aP,bx as aQ,dx as aR,vC as aS,f_ as aT,d_ as aU,Nk as aV,DC as aW,uo as aX,iu as aY,AS as aZ,su as a_,of as aa,Ol as ab,Q1 as ac,n_ as ad,oC as ae,J1 as af,bC as ag,kd as ah,L0 as ai,G_ as aj,lC as ak,V1 as al,u_ as am,k_ as an,c_ as ao,l_ as ap,o_ as aq,r_ as ar,V0 as as,yC as at,A0 as au,Mn as av,nC as aw,iC as ax,H0 as ay,y_ as az,zi as b,q_ as b$,jo as b0,cf as b1,cl as b2,b_ as b3,ji as b4,ks as b5,je as b6,Kt as b7,Ne as b8,Y as b9,x1 as bA,uC as bB,dC as bC,ao as bD,qa as bE,I0 as bF,fd as bG,lo as bH,a_ as bI,rC as bJ,hd as bK,E0 as bL,W_ as bM,p1 as bN,X1 as bO,F0 as bP,On as bQ,hu as bR,rs as bS,K0 as bT,SC as bU,G0 as bV,V_ as bW,Z_ as bX,YS as bY,K1 as bZ,i_ as b_,lc as ba,Su as bb,L_ as bc,Ke as bd,Zw as be,wb as bf,F_ as bg,ge as bh,st as bi,bs as bj,Qe as bk,$w as bl,de as bm,Q as bn,ys as bo,Oc as bp,Ww as bq,Wa as br,gC as bs,wC as bt,kC as bu,Z0 as bv,P1 as bw,$C as bx,O1 as by,$1 as bz,Gd as c,cx as c0,Q_ as c1,Y1 as c2,X_ as c3,D0 as c4,so as c5,Tn as c6,WS as c7,D_ as c8,gu as c9,UC as cA,H_ as ca,Za as cb,z_ as cc,BS as cd,jS as ce,B_ as cf,j_ as cg,K_ as ch,qi as ci,U_ as cj,M_ as ck,t_ as cl,hC as cm,sf as cn,_C as co,Rl as cp,sb as cq,mC as cr,gx as cs,sC as ct,Yd as cu,I_ as cv,O_ as cw,Rd as cx,mu as cy,N_ as cz,it as d,zd as e,Ad as f,_n as g,F1 as h,xC as i,Os as j,ms as k,US as l,Ui as m,pn as n,fC as o,pC as p,Ka as q,Io as r,Vd as s,ie as t,BC as u,RC as v,FC as w,PC as x,TC as y,OC as z};
|
|
297
|
+
`),!1,void 0,k);return}catch(j){if(!Ae(j)||x>=3)throw j;k=Number(j.body?.seq)||0}}}),$o=async g=>y(g).includes(yt)?jd():{},bi=g=>{const k=new Set;for(const x of[...y(g),...g.folders])x.startsWith(`${$e}/`)&&k.add(x.slice($e.length+1).split("/")[0]);return k.delete(nn),k},Ro=(g,k,x)=>{if(!bi(g).has(x))return null;const O=g.folders.includes(`${$e}/${x}`);return Object.prototype.hasOwnProperty.call(k,x)?{...k[x],dir:O}:{original:x,deletedAt:0,dir:O}};let Bd=0,yi=null;const No=async()=>{const g=I();if(g){await tn(),(async()=>{for(let K=0;;K++){if(e.signal?.aborted)return;try{const V=await c();await _(!0),mi(V),De();return}catch{if(e.signal?.aborted)return;if(K>=2){_t(ie("amxbridge.connectFailed"),!0);return}await new Promise(V=>{const Z=()=>{clearTimeout(Pe),e.signal?.removeEventListener("abort",Z),V()},Pe=setTimeout(Z,[3e3,1e4][K]);e.signal?.addEventListener("abort",Z,{once:!0}),e.signal?.aborted&&Z()})}}})();let N;try{N=localStorage.getItem(Bn(g.v))||void 0}catch{}const j=g.tree.pages.filter(H);return{root:`cloud://${g.v}`,pages:j,folders:g.tree.folders.filter(z),lastPage:N&&j.includes(N)?N:void 0}}const k=await c(),[x]=await Promise.all([_(!0),tn()]);mi(k);const O=pi(),L=x.pages.filter(H);return{root:`cloud://${k}`,pages:L,folders:x.folders.filter(z),lastPage:O&&L.includes(O)?O:void 0}},Ud=(g,k,x)=>ne([g],async()=>{await c();for(let O=0;O<3;O++){let L;try{L=await M(g)}catch(N){if(Re(N))return"gone";throw N}if(cn(L.content)!==x)return{ok:!1,current:L.content};try{return await G(g,k,L.seq),{ok:!0}}catch(N){if(!Ae(N))throw N}}throw new Error("conflict")}),Hn=async(g,k,x)=>{let O=null;const L=await g1({exists:async N=>(await(O??=_(!0).then(j=>new Set(j.files.map(K=>K.path))))).has(N),read:async N=>{try{return(await M(N)).content}catch(j){if(Re(j))return null;throw j}},write:Ud},g,k,{folder:x});for(const N of L.rewritten)Ce(N);U1(L.failed.map(N=>N.path))},Lo=(g,k)=>g.pages.some(x=>x.startsWith(`${k}/`))||g.files.some(x=>x.path.startsWith(`${k}/`)),Fo=(g,k,x)=>{const O=`${k}/`,L={};for(const N of g)N.startsWith(O)&&(L[N]=`${x}/${N.slice(O.length)}`);return L};return y1({openVault:()=>No(),restoreVault:()=>No(),listPages:async()=>(await _()).pages.filter(H),listFiles:async()=>{const g=await _(),k=g.files.map(O=>O.path).filter(z),x=g.pages.filter(O=>z(O)&&W(O));return x.length?[...k,...x].sort():k},listFolders:async()=>(await _()).folders.filter(z),loadPage:async g=>{await c();const k=u.get(g);if(k)return mt(g),Ge(g),k;const x=await tt(g);return mt(g),x},readPage:async g=>{await c();try{return await he(g)}catch(k){throw Re(k)?new Error(`note not found: ${g}`):k}},newPage:async g=>{await c();const k=await ne([g],()=>bt(g));return mt(g),k},savePage:(g,k,x)=>{const O=R(g);return ne(O,async()=>{await c();const L=Ar(k,x),N=Object.values(x).some(V=>typeof V=="string"&&V.trim().length>0);let j,K;try{({target:j,base:K}=await A(g))}catch(V){if(V instanceof S){await ee(g,L,N);return}throw V}await B(O,j,async()=>{try{await G(j,L,K),h(j,ji(j,L,Fi()))}catch(V){if(Ae(V)){const Z=V.body;if(Z?.code==="CONFLICT"&&Z.seq===0){f.delete(j),await ee(g,L,N);return}Z&&typeof Z.seq=="number"&&C(j,Z.seq),u.delete(g),_t(ie("amxbridge.conflictReloaded"),!0),setTimeout(()=>Ce(g),0);return}throw V instanceof Fe&&V.status===413&&_t(ie("amxbridge.tooLarge"),!0),V}})})},renamePage:(g,k,x,O)=>{let L=null;return ne([g,Di(g,k,ie("amxbridge.pageNameEmpty"))],async()=>{await c();const N=Di(g,k,ie("amxbridge.pageNameEmpty"));if(N===g)return{newPath:g,page:await he(g)};const j=await _(!0);if(L=j.pages.filter(H),y(j).includes(N)||j.folders.includes(N))throw new Error(ie("amxbridge.pageExists"));const K=Ar(x,O);await G(g,K,await le(g),!0);let V;try{V=await r.post(`/amadeus/vaults/${encodeURIComponent(l())}/move`,{from:g,to:N})}catch(Z){throw Ae(Z)?new Error(ie("amxbridge.pageExists")):Z}return v(g,N,V.seq),ce(),mt(N),{newPath:N,page:null}}).then(async N=>N.page?{newPath:N.newPath,page:N.page}:(L&&await Hn({[g]:N.newPath},L),{newPath:N.newPath,page:await he(N.newPath)}))},reconcilePage:async g=>(await c(),tt(g)),saveAsset:async(g,k,x,O)=>{await c();const L=Nr(k),N=(L||".png").toLowerCase().replace(/[^.a-z0-9]/g,""),j=Je(k).slice(0,Je(k).length-L.length).replace(/[^a-zA-Z0-9_-]/g,"").slice(0,24)||"img";for(let K=0;K<5;K++){const V=`${j}-${Date.now().toString(36)}-${(Bd++).toString(36)}${N||".png"}`,Z=ft(Hi(Ct(g),`.amadeus/${V}`));if(Z===null)throw new Error("Asset escapes vault");try{return await Ye(Z,V,x,!0,O),`.amadeus/${V}`}catch(Pe){if(Ae(Pe))continue;throw Pe}}throw new Error(ie("amxbridge.imageNameFailed"))},saveAttachment:async(g,k,x,O,L)=>{await c();const N=(Je(k)||"file").replace(/[\\/]/g,""),{destDirRel:j}=pl(g,N,O),K=await _(!0),V=new Set(y(K).filter(_e=>Ct(_e)===j).map(_e=>Je(_e).toLowerCase()));let Z=ml(V,N);const Pe=ar(N);for(let _e=0;_e<20;_e++){const{fileVaultRel:Ot,pageRel:sn}=pl(g,Z,O),Rs=ft(Ot);if(Rs===null)throw new Error("Asset escapes vault");try{return Pe?await G(Rs,new TextDecoder().decode(x),0):await Ye(Rs,Z,x,!0,L),{pageRel:sn,base:Z}}catch(Do){if(Ae(Do)){V.add(Z.toLowerCase()),Z=ml(V,N);continue}throw Do}}throw new Error(ie("amxbridge.attachmentNameFailed"))},openAttachment:async(g,k)=>{await c(),window.open(ds(fl(k),g),"_blank","noopener")},openVaultFile:async g=>{await c(),window.open(ds(g,null),"_blank","noopener")},exportPdf:async()=>(window.print(),null),onExternalChange:g=>(pe.add(g),()=>{pe.delete(g)}),onStructureChange:g=>(we.add(g),()=>{we.delete(g)}),onDbExternalChange:g=>(qe.add(g),()=>{qe.delete(g)}),onPathGone:g=>(en.add(g),()=>{en.delete(g)}),search:async g=>(await c(),(await r.get(`/amadeus/vaults/${encodeURIComponent(l())}/search`,{q:g})).filter(x=>z(x.path))),backlinks:async g=>(await c(),r.get(`/amadeus/vaults/${encodeURIComponent(l())}/backlinks`,{path:g})),reindex:async()=>{await c(),await r.post(`/amadeus/vaults/${encodeURIComponent(l())}/reindex`)},listTags:async()=>(await c(),r.get(`/amadeus/vaults/${encodeURIComponent(l())}/tags`)),pagesByTag:async g=>(await c(),(await r.get(`/amadeus/vaults/${encodeURIComponent(l())}/tags/pages`,{tag:g})).paths),resolveEmbed:async(g,k)=>{await c();const{note:x,subpath:O}=G0(g),L=(await _()).pages.filter(H).sort(),N=x?Ui(x,L,k):k&&L.includes(k)?k:null;if(N){let V=null;try{V=(await M(N)).content}catch(Z){if(!Re(Z))throw Z}if(V!=null){if(!O)return{owner:N,content:Za(V),type:"markdown"};const Z=_d(V,O.trim().replace(/\.block$/i,"").toLowerCase())??n1(Za(V),O);return Z==null?null:{owner:N,content:Z,type:"markdown"}}}const j=O?`${x}#${O}`:x;return j?await r.get(`/amadeus/vaults/${encodeURIComponent(l())}/embed`,{target:j})??null:null},blockBacklinks:async g=>(await c(),r.get(`/amadeus/vaults/${encodeURIComponent(l())}/block-backlinks`,{target:g})),deletePage:g=>ne([g],async()=>{await c(),await r.del(F(),{path:g}),$(g),ce()}),movePage:(g,k)=>{let x=null;return ne([g],async()=>{await c();const O=$l(g),L=k.replace(/\\/g,"/").replace(/^\/+|\/+$/g,""),N=L?`${L}/${O}`:O;if(N===g)return g;N.endsWith(".md")&&(x=(await _(!0)).pages.filter(H));let j;try{j=await r.post(`/amadeus/vaults/${encodeURIComponent(l())}/move`,{from:g,to:N})}catch(K){throw Ae(K)?new Error(ie("amxbridge.fileExistsAtTarget")):K}return v(g,N,j.seq),ce(),N.endsWith(".md")&&mt(N),N}).then(async O=>(O!==g&&x&&await Hn({[g]:O},x),O))},createFolder:async(g,k)=>{await c();const x=k.trim().replace(/[\\/]/g,"");if(!x)throw new Error(ie("amxbridge.folderNameEmpty"));const O=g.replace(/\\/g,"/").replace(/^\/+|\/+$/g,"");try{const L=await r.post(`/amadeus/vaults/${encodeURIComponent(l())}/folders`,{parent:O,name:x});return ce(),L.path}catch(L){throw Ae(L)?new Error(ie("amxbridge.folderExists")):L}},renameFolder:async(g,k)=>{await c();const x=k.trim().replace(/[\\/]/g,"");if(!x)throw new Error(ie("amxbridge.folderNameEmpty"));const O=Ct(g);if((O?`${O}/${x}`:x)===g)return g;const N=await _(!0),j=N.pages.filter(H),K=Lo(N,g);let V;try{V=await r.post(`/amadeus/vaults/${encodeURIComponent(l())}/folders/rename`,{path:g,newName:x})}catch(Z){throw Ae(Z)?new Error(ie("amxbridge.folderExists")):Z}return oe(g,V.path),et&&et.startsWith(`${g}/`)&&mt(`${V.path}${et.slice(g.length)}`),ce(),await Hn(Fo(j,g,V.path),j,K?[g,V.path]:void 0),V.path},deleteFolder:async g=>{await c(),await r.del(`/amadeus/vaults/${encodeURIComponent(l())}/folders`,{path:g}),te(g),ce()},moveFolder:async(g,k)=>{await c();const x=g.replace(/\\/g,"/").replace(/^\/+|\/+$/g,""),O=Je(x);if(!O)throw new Error(ie("amxbridge.folderPathEmpty"));const L=k.replace(/\\/g,"/").replace(/^\/+|\/+$/g,"");if((L?`${L}/${O}`:O)===x)return x;if(L===x||L.startsWith(`${x}/`))throw new Error(ie("amxbridge.moveIntoSelf"));const j=await _(!0),K=j.pages.filter(H),V=Lo(j,x);let Z;try{Z=await r.post(`/amadeus/vaults/${encodeURIComponent(l())}/folders/move`,{path:x,dest:L})}catch(Pe){throw Ae(Pe)?new Error(ie("amxbridge.folderExistsAtTarget")):Pe}return oe(x,Z.path),et&&et.startsWith(`${x}/`)&&mt(`${Z.path}${et.slice(x.length)}`),ce(),await Hn(Fo(K,x,Z.path),K,V?[x,Z.path]:void 0),Z.path},trashEntry:async g=>{await c();const k=g.replace(/\\/g,"/").replace(/^\/+|\/+$/g,"");if(!k||k===$e||k.startsWith(`${$e}/`))throw new Error(ie("amxbridge.invalidPath"));const x=await _(!0),O=x.folders.includes(k),L=Date.now().toString(36);try{if(O){let N=k,j=Je(k);if(j===nn||x.folders.includes(`${$e}/${j}`)){const K=await r.post(`/amadeus/vaults/${encodeURIComponent(l())}/folders/rename`,{path:k,newName:`${j} (${L})`});N=K.path,j=Je(K.path)}await r.post(`/amadeus/vaults/${encodeURIComponent(l())}/folders/move`,{path:N,dest:$e}),te(k),await gi(K=>{K[j]={original:k,deletedAt:Date.now(),dir:!0}})}else{let N=k.replace(/\//g,"__");(N===nn||y(x).includes(`${$e}/${N}`))&&(N=`${L}-${N}`),await r.post(`/amadeus/vaults/${encodeURIComponent(l())}/move`,{from:k,to:`${$e}/${N}`}),$(k),await gi(j=>{j[N]={original:k,deletedAt:Date.now(),dir:!1}})}}finally{ce()}},listTrash:async()=>{await c();const g=await _(),k=await $o(g);return[...bi(g)].map(x=>({name:x,...Ro(g,k,x)})).sort((x,O)=>O.deletedAt-x.deletedAt)},restoreTrash:async g=>{await c();const k=await _(!0),x=Ro(k,await $o(k),g);if(!x)throw new Error(ie("amxbridge.trashMissing"));const O=N=>y(k).includes(N)||k.folders.includes(N);let L=x.original;for(let N=2;O(L);N++)if(x.dir)L=`${x.original} (${N})`;else{const j=Nr(x.original);L=`${x.original.slice(0,x.original.length-j.length)} (${N})${j}`}if(x.dir){const N=`${$e}/${g}`,j=Je(L),K=Ct(L),V=(Z,Pe)=>r.post(`/amadeus/vaults/${encodeURIComponent(l())}/folders/${Z}`,Pe);g===j?await V("move",{path:N,dest:K}):j!==nn&&!bi(k).has(j)?await V("move",{path:(await V("rename",{path:N,newName:j})).path,dest:K}):(await V("move",{path:N,dest:K}),await V("rename",{path:K?`${K}/${g}`:g,newName:j}))}else await r.post(`/amadeus/vaults/${encodeURIComponent(l())}/move`,{from:`${$e}/${g}`,to:L});return await gi(N=>{delete N[g]}),ce(),L},deleteTrashEntry:async g=>{await c();const k=await _(!0);bi(k).has(g)&&(k.folders.includes(`${$e}/${g}`)?await r.del(`/amadeus/vaults/${encodeURIComponent(l())}/folders`,{path:`${$e}/${g}`}).catch(x=>{if(!Re(x))throw x}):await r.del(F(),{path:`${$e}/${g}`}).catch(x=>{if(!Re(x))throw x})),await gi(x=>{delete x[g]}),ce()},emptyTrash:async()=>{await c(),await r.del(`/amadeus/vaults/${encodeURIComponent(l())}/folders`,{path:$e}).catch(g=>{if(!Re(g))throw g}),te($e),ce()},saveVaultBytes:async(g,k)=>{await c();const x=ft(g.replace(/\\/g,"/"));if(!x)throw new Error(ie("amxbridge.pathOutsideVault"));await Ye(x,Je(x),k,!1)},readVaultBytes:async g=>{const k=ft(g.replace(/\\/g,"/")),x=k?await Le(k):null;if(!x)throw new Error(ie("amxbridge.readFailed",{status:404}));return new Uint8Array(await x.arrayBuffer())},fetchLinkMeta:async g=>{try{return await r.get("/amadeus/link-meta",{url:g})}catch{return null}},searchImages:async g=>{const k=g.trim();if(!k)return[];const x=await fetch(`https://api.openverse.org/v1/images/?q=${encodeURIComponent(k)}&page_size=20`,{headers:{accept:"application/json"}});if(!x.ok)throw new Error(`openverse HTTP ${x.status}`);return((await x.json()).results??[]).map(L=>({thumb:L.thumbnail??"",full:L.url??"",author:L.creator})).filter(L=>L.thumb&&L.full)},listPlugins:async()=>[],openPluginsFolder:async()=>{_t(ie("amxbridge.desktopOnly"))},scaffoldSamplePlugin:async()=>{_t(ie("amxbridge.desktopOnly"))},revealInFileManager:async()=>{_t(ie("amxbridge.desktopOnly"))},hostCaps:{revealInFileManager:!1},readDatabase:async(g,k)=>{await c();const x=await xt(g,k);if(!x)return{status:"missing"};let O;try{O=await M(x)}catch(N){if(Re(N))return{status:"missing"};if(N instanceof Fe&&N.status===400)return{status:"corrupt",path:x,message:ie("amxbridge.notText")};throw N}const L=Su(O.content);return L.ok?{status:"ok",path:x,data:L.data}:{status:"corrupt",path:x,message:L.error}},writeDatabase:(g,k)=>ne([g],async()=>{await c();const x=vu.parse(k),O=cx(x),L=await le(g);try{await G(g,O,L)}catch(N){if(Ae(N)){try{await M(g)}catch{}setTimeout(()=>Xt(g),0);return}throw N}}),readDrawing:async(g,k)=>{await c();const x=await xt(g,k)??await xt(g,`${k}.md`);if(!x)return{status:"missing"};for(const O of x.endsWith(".md")?[x]:[x,`${x}.md`])try{const L=await M(O);return{status:"ok",path:O,source:L.content}}catch(L){if(!Re(L))throw L}return{status:"missing"}},writeDrawing:(g,k)=>ne([g],async()=>{await c();const x=await le(g);try{await G(g,k,x)}catch(O){if(!Ae(O))throw O;try{const N=await M(g),j=Ja(k),K=Ja(N.content),V=j?JSON.parse(j.sceneJson):null,Z=K?JSON.parse(K.sceneJson):null;if(V&&Z){const Pe=dx(N.content,JSON.stringify(bx(V,Z)));if(Pe){await G(g,Pe,N.seq);return}}}catch{}const L=O.body;L&&typeof L.seq=="number"&&C(g,L.seq),await G(g,k,f.get(g)??0,!0)}}),readTextFile:async g=>{if(await c(),!ar(g)){const k=ft(g.replace(/\\/g,"/"));return k?nt(k):null}try{return(await M(g)).content}catch(k){if(Re(k))return null;throw k}},writeTextFile:(g,k,x)=>{if(!ar(g))return ct(g,k,x);const O=R(g),L=typeof x?.base=="string"?x.base:null,N=()=>L!=null?{ok:!0}:void 0;return ne(O,async()=>{if(await c(),x?.create){try{return await G(g,k,0),w.delete(g),ce(),{ok:!0}}catch(Z){if(!Ae(Z))throw Z}try{return{ok:!1,current:(await M(g)).content}}catch(Z){if(Re(Z))return{ok:!1,current:null};throw Z}}const j=k.trim().length>0;let K,V;try{({target:K,base:V}=await A(g))}catch(Z){if(Z instanceof S)return await ee(g,k,j),N();throw Z}if(L!=null){const Z=L;return B(O,K,async()=>{const Pe=async()=>{let _e;try{_e=await M(K)}catch(Ot){if(Re(Ot))return"vanished";throw Ot}return cn(_e.content)===Z?_e.seq:{ok:!1,current:_e.content}};if(V>0&&p(K,V)!==Z){const _e=await Pe();if(_e==="vanished")return await ee(g,k,j),N();if(typeof _e!="number")return _e;V=_e}for(let _e=0;;_e++)try{return await G(K,k,V),{ok:!0}}catch(Ot){if(!Ae(Ot))throw Ot;const sn=await Pe();if(sn==="vanished")return await ee(g,k,j),N();if(typeof sn!="number")return sn;if(_e>=2)throw Ot;V=sn}})}await B(O,K,async()=>{try{await G(K,k,V)}catch(Z){if(!Ae(Z))throw Z;let Pe;try{Pe=await M(K)}catch(_e){if(Re(_e)){await ee(g,k,j);return}throw _e}await G(K,k,Pe.seq,!0)}})})},listPageProps:async g=>(await c(),(await r.get(`/amadeus/vaults/${encodeURIComponent(l())}/page-props`,{folder:g})).map(x=>({path:x.path,title:x.title,fm:cl(x.fmExtra||"")}))),pageIcons:async()=>{await c();const g=await _();if(yi&&yi.seq===g.seq)return yi.icons;const k=await r.get(`/amadeus/vaults/${encodeURIComponent(l())}/page-props`,{folder:"",all:"1"}),x={};for(const O of k){const L=cl(O.fmExtra||"").icon;typeof L=="string"&&L&&(x[O.path]=L)}return yi={seq:g.seq,icons:x},x},setPageFrontmatter:(g,k)=>ne([g],async()=>{await c();const x=async()=>{let O;try{O=await M(g)}catch(N){if(Re(N))return"ok";throw N}const L=I0(O.content,k);if(L===O.content)return"ok";try{return await G(g,L,O.seq),"ok"}catch(N){if(Ae(N))return"conflict";throw N}};if(await x()==="conflict")try{await x()}catch{}}),renamePageFile:(g,k)=>{let x=null;return ne([g,Di(g,k,ie("amxbridge.noteNameEmpty"))],async()=>{await c();const O=Di(g,k,ie("amxbridge.noteNameEmpty"));if(O===g)return g;x=(await _(!0)).pages.filter(H);let L;try{L=await r.post(`/amadeus/vaults/${encodeURIComponent(l())}/move`,{from:g,to:O})}catch(N){throw Ae(N)?new Error(ie("amxbridge.noteExists")):N}return v(g,O,L.seq),ce(),O}).then(async O=>(O!==g&&x&&await Hn({[g]:O},x),O))},renameDbFile:(g,k)=>ne([g],async()=>{await c();const x=g.replace(/\\/g,"/");let O=k.trim().replace(/[\\/]/g,"");if(O.toLowerCase().endsWith(".db")&&(O=O.slice(0,-3)),!O)throw new Error(ie("amxbridge.nameEmpty"));const L=Ct(x),N=L?`${L}/${O}.db`:`${O}.db`;if(N===x)return{newPath:N,rewrittenPages:[]};let j;try{j=await r.post(`/amadeus/vaults/${encodeURIComponent(l())}/move`,{from:x,to:N})}catch(K){throw Ae(K)?new Error(ie("amxbridge.fileExists")):K}return v(x,N,j.seq),ce(),{newPath:N,rewrittenPages:[]}})})}function Di(e,t,n){const i=Ct(e);let s=t.trim().replace(/[\\/]/g,"");if(!s)throw new Error(n);return s.toLowerCase().endsWith(".md")&&(s=s.slice(0,-3)),i?`${i}/${s}.md`:`${s}.md`}const P_=async e=>{if(!e.ok){let t=null;try{t=await e.json()}catch{}const n=new Error(t?.detail||`http ${e.status}`);throw n.status=e.status,n.code=t?.code,n}return e.json()};function O_(e){const t=zi(zd),n=e.getToken(),i=ni(e.apiBase,n),s=()=>{const p=e.getToken();if(e.signal?.aborted||!p||(i?ni(e.apiBase,p)!==i:p!==n))throw new Error("Cloud account changed");return p},r=async(p,b,w)=>{const T=s(),S=new AbortController,C=()=>S.abort(e.signal?.reason);e.signal?.addEventListener("abort",C,{once:!0});const $=setTimeout(()=>S.abort(),2e4);try{const v=await P_(await(e.request??fetch)(`${e.apiBase}/amadeus${b}`,{method:p,headers:{Authorization:`Bearer ${T}`,...w!==void 0?{"Content-Type":"application/json"}:{}},body:w!==void 0?JSON.stringify(w):void 0,signal:S.signal}));return s(),v}finally{clearTimeout($),e.signal?.removeEventListener("abort",C)}},o=()=>E_();let a=e.linkBase?.replace(/\/+$/,"")||null;const l=async()=>{if(a)return a;try{a=((await r("GET","/collab/link-base")).webOrigin??"").trim().replace(/\/+$/,"")||location.origin}catch{a=location.origin}return a},c=()=>a??location.origin;e.signal?.aborted||l();const d=()=>{if(s(),e.getUserId)return e.getUserId();try{const p=e.getToken().split(".")[1],b=JSON.parse(atob(p.replace(/-/g,"+").replace(/_/g,"/")));return typeof b.userId=="string"?b.userId:null}catch{return null}};let u=null,h=null;const f=()=>{u&&(clearInterval(u),u=null)};e.signal?.addEventListener("abort",f,{once:!0});const m=()=>{e.signal?.aborted||o().then(p=>r("POST",`/vaults/${encodeURIComponent(p)}/presence`,{page:h})).catch(()=>{})};window.amadeusCollab={listVaults:()=>r("GET","/vaults").then(p=>p.vaults),activeVaultId:o,switchVault(p){s();try{localStorage.setItem(t,p)}catch{}location.reload()},pageShare:async p=>r("GET",`/vaults/${encodeURIComponent(await o())}/page-shares?path=${encodeURIComponent(p)}`),createPageShare:async(p,b)=>r("POST",`/vaults/${encodeURIComponent(await o())}/page-shares`,{path:p,...b}),updatePageShare:async(p,b)=>r("PATCH",`/vaults/${encodeURIComponent(await o())}/page-shares/${encodeURIComponent(p)}`,b),revokePageShare:async p=>{await r("DELETE",`/vaults/${encodeURIComponent(await o())}/page-shares/${encodeURIComponent(p)}`)},setParticipantRole:async(p,b,w)=>{await r("PATCH",`/vaults/${encodeURIComponent(await o())}/page-shares/${encodeURIComponent(p)}/members/${encodeURIComponent(b)}`,{role:w})},removeParticipant:async(p,b)=>{await r("DELETE",`/vaults/${encodeURIComponent(await o())}/page-shares/${encodeURIComponent(p)}/members/${encodeURIComponent(b)}`)},sharedWithMe:()=>r("GET","/shared-with-me").then(p=>p.items),leaveShare:async p=>{const b=d();b&&await r("DELETE",`/vaults/${encodeURIComponent(await o())}/page-shares/${encodeURIComponent(p)}/members/${encodeURIComponent(b)}`)},inviteUrl:p=>`${c()}/invite/${p}`,publishes:async()=>r("GET",`/vaults/${encodeURIComponent(await o())}/shares`),createPublish:async(p,b)=>{const w=await r("POST",`/vaults/${encodeURIComponent(await o())}/shares`,{mode:p,path:b});return{...w,url:`${c()}/share/${w.token}`}},revokePublish:async p=>{await r("DELETE",`/vaults/${encodeURIComponent(await o())}/shares/${encodeURIComponent(p)}`)},publishUrl:p=>`${c()}/share/${p}`,revokePublishIn:async(p,b)=>{await r("DELETE",`/vaults/${encodeURIComponent(p)}/shares/${encodeURIComponent(b)}`)},revokePageShareIn:async(p,b)=>{await r("DELETE",`/vaults/${encodeURIComponent(p)}/page-shares/${encodeURIComponent(b)}`)},listAllShares:async()=>{const p=(await r("GET","/vaults")).vaults||[],b=d(),w=[],T=[];for(const S of p){try{const C=await r("GET",`/vaults/${encodeURIComponent(S.id)}/shares`);for(const $ of C.shares||[])w.push({...$,vaultId:S.id,vaultName:S.name||""})}catch{}try{const C=await r("GET",`/vaults/${encodeURIComponent(S.id)}/page-shares`),$=C?.shares||C?.pageShares||(Array.isArray(C)?C:[]);for(const v of $){const A=v.created_by??v.createdBy;(!b||!A||A===b)&&T.push({...v,vaultId:S.id,vaultName:S.name||""})}}catch{}}return{publishes:w,pageShares:T,linkBase:await l()}},heartbeat(p){s(),h=p,m(),u||(u=setInterval(m,3e4))},stopHeartbeat:f,onPresence:p=>x_(p),myUserId:d}}Io({"unit.bootError.title":{zh:"暂时无法打开此 Unit",en:"Unable to open this Unit"},"unit.bootError.detail":{zh:"请检查连接后重试。",en:"Check your connection and try again."},"unit.bootError.retry":{zh:"重试",en:"Try again"}});function Md(){const e=document.getElementById("root")??document.body.appendChild(document.createElement("main")),t=document.createElement("section");t.setAttribute("role","alert");const n=document.documentElement.dataset.mode==="dark";t.style.cssText='max-width:440px;margin:15vh auto;padding:24px;font:15px/1.6 -apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif',t.style.color=`var(--text,${n?"#f2efe8":"#1c1c1c"})`,t.style.colorScheme=n?"dark":"light";const i=document.createElement("h1");i.textContent=ie("unit.bootError.title"),i.style.cssText="font-size:20px;font-weight:600;margin:0 0 8px";const s=document.createElement("p");s.textContent=ie("unit.bootError.detail"),s.style.cssText="margin:0 0 20px;color:var(--text-muted,inherit)";const r=document.createElement("button");r.type="button",r.textContent=ie("unit.bootError.retry"),r.style.cssText="font:inherit;padding:7px 16px;cursor:pointer",r.addEventListener("click",()=>location.reload()),t.append(i,s,r),e.replaceChildren(t),r.focus()}function $_(e,t){if(e.origin!==t.origin||!e.pathname.startsWith(t.pathname))return null;const n=/^(share|invite)\/([^/]+)\/?$/.exec(e.pathname.slice(t.pathname.length));return n?{kind:n[1],token:decodeURIComponent(n[2])}:null}const Cl=()=>dt(async()=>{const{useApp:e}=await import("./appStore-affnJoin.js").then(t=>t.ss);return{useApp:e}},__vite__mapDeps([0,1,2,3,4]),import.meta.url).then(({useApp:e})=>{T_((t,n)=>e.getState().toast(t,n))});async function R_(){const e=location.pathname;if(window.__FORSION_UNIT_PAGE__){const t=window.__FORSION_UNIT_PAGE__,n=new URL(".",document.baseURI),i=$_(new URL(location.href),n);if(i&&t.capabilities?.amadeus){const s=new URL(t.capabilities.amadeus.apiBase,location.origin).href.replace(/\/+$/,"");if(i.kind==="share"){const{mountSharePage:r}=await dt(async()=>{const{mountSharePage:o}=await import("./sharePage-DYYN5usb.js");return{mountSharePage:o}},[],import.meta.url);r(i.token,{apiBase:s})}else{if(!t.account)throw new Error("Invitations require an account provider");const{installUnitAccount:r}=await dt(async()=>{const{installUnitAccount:l}=await import("./unitAccount-BPYRAa3m.js");return{installUnitAccount:l}},[],import.meta.url),o=await r({instanceId:t.instanceId,account:t.account},n);if(!o.account.getIdentity()){await o.login();return}const{mountInvitePage:a}=await dt(async()=>{const{mountInvitePage:l}=await import("./invitePage-BW0BH8Ac.js");return{mountInvitePage:l}},__vite__mapDeps([5,3]),import.meta.url);a(i.token,{apiBase:s,getToken:o.account.getToken,request:o.capability.request,appBase:n.href})}return}dt(()=>import("./unitShim-BP2nBO_k.js"),[],import.meta.url).then(async s=>{if(!await s.installUnitShim())return;let r=!1;try{r=(new URLSearchParams(location.search).get("ui")||localStorage.getItem("lcl.uiMode"))==="mobile"}catch{}await(r?dt(()=>import("./mobileEntry-B8JwR53-.js"),__vite__mapDeps([6,3,7,0,1,2,4,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82]),import.meta.url):dt(()=>import("./main-DIyFlyfK.js"),__vite__mapDeps([83,3,7,0,1,2,4,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,84]),import.meta.url)),t.capabilities?.amadeus&&await Cl()}).catch(s=>{console.error("[unit-page] bootstrap failed:",s),Md()})}else if(e.startsWith("/share/"))dt(()=>import("./sharePage-DYYN5usb.js"),[],import.meta.url).then(t=>t.mountSharePage(decodeURIComponent(e.slice(7)).replace(/\/+$/,""))).catch(t=>console.error("[tangu-web] share page failed:",t));else if(e.startsWith("/invite/"))await Jd()&&dt(()=>import("./invitePage-BW0BH8Ac.js"),__vite__mapDeps([5,3]),import.meta.url).then(t=>t.mountInvitePage(decodeURIComponent(e.slice(8)).replace(/\/+$/,""))).catch(t=>console.error("[tangu-web] invite page failed:",t));else if(await Qd()){window.amadeus=I_({apiBase:_n(),getToken:Mo,onAuthError:Il}),O_({apiBase:_n(),getToken:Mo});let t=!1;try{t=(new URLSearchParams(location.search).get("ui")||localStorage.getItem("lcl.uiMode"))==="mobile"}catch{}(t?dt(()=>import("./mobileEntry-B8JwR53-.js"),__vite__mapDeps([6,3,7,0,1,2,4,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82]),import.meta.url):dt(()=>import("./main-DIyFlyfK.js"),__vite__mapDeps([83,3,7,0,1,2,4,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,84]),import.meta.url)).then(Cl).catch(n=>console.error("[tangu-web] bootstrap failed:",n))}}R_().catch(e=>{console.error("[tangu-web] Account bootstrap failed:",e),window.__FORSION_UNIT_PAGE__&&Md()});export{E1 as $,an as A,j1 as B,zC as C,eC as D,p_ as E,m_ as F,Z1 as G,h_ as H,eu as I,tC as J,zr as K,MC as L,jC as M,Zd as N,NC as O,cn as P,EC as Q,CC as R,IC as S,AC as T,dc as U,B0 as V,Aw as W,tu as X,Ve as Y,D1 as Z,dt as _,Mo as a,ef as a$,T1 as a0,A1 as a1,C1 as a2,_1 as a3,LC as a4,hi as a5,Od as a6,lf as a7,af as a8,Ji as a9,M0 as aA,w_ as aB,Pl as aC,Ar as aD,G1 as aE,g_ as aF,s_ as aG,Xd as aH,Y_ as aI,J_ as aJ,aC as aK,Qs as aL,cC as aM,lx as aN,Hi as aO,Ja as aP,bx as aQ,dx as aR,vC as aS,f_ as aT,d_ as aU,Nk as aV,DC as aW,uo as aX,iu as aY,AS as aZ,su as a_,of as aa,Ol as ab,Q1 as ac,n_ as ad,oC as ae,J1 as af,bC as ag,kd as ah,L0 as ai,G_ as aj,lC as ak,V1 as al,u_ as am,k_ as an,c_ as ao,l_ as ap,o_ as aq,r_ as ar,V0 as as,yC as at,A0 as au,Mn as av,nC as aw,iC as ax,H0 as ay,y_ as az,zi as b,q_ as b$,jo as b0,cf as b1,cl as b2,b_ as b3,ji as b4,ks as b5,je as b6,Kt as b7,Ne as b8,Y as b9,x1 as bA,uC as bB,dC as bC,ao as bD,qa as bE,I0 as bF,fd as bG,lo as bH,a_ as bI,rC as bJ,hd as bK,E0 as bL,W_ as bM,p1 as bN,X1 as bO,F0 as bP,On as bQ,hu as bR,rs as bS,K0 as bT,SC as bU,G0 as bV,V_ as bW,Z_ as bX,YS as bY,K1 as bZ,i_ as b_,lc as ba,Su as bb,L_ as bc,Ke as bd,Zw as be,wb as bf,F_ as bg,ge as bh,st as bi,bs as bj,Qe as bk,$w as bl,de as bm,Q as bn,ys as bo,Oc as bp,Ww as bq,Wa as br,gC as bs,wC as bt,kC as bu,Z0 as bv,P1 as bw,$C as bx,O1 as by,$1 as bz,Gd as c,cx as c0,Q_ as c1,Y1 as c2,X_ as c3,D0 as c4,so as c5,Tn as c6,WS as c7,D_ as c8,gu as c9,UC as cA,H_ as ca,Za as cb,z_ as cc,BS as cd,jS as ce,B_ as cf,j_ as cg,K_ as ch,qi as ci,U_ as cj,M_ as ck,t_ as cl,hC as cm,sf as cn,_C as co,Rl as cp,sb as cq,mC as cr,gx as cs,sC as ct,Yd as cu,I_ as cv,O_ as cw,Rd as cx,mu as cy,N_ as cz,it as d,zd as e,Ad as f,_n as g,F1 as h,xC as i,Os as j,ms as k,US as l,Ui as m,pn as n,fC as o,pC as p,Ka as q,Io as r,Vd as s,ie as t,BC as u,RC as v,FC as w,PC as x,TC as y,OC as z};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{E as f,o as p,a as x,p as X,e as y,L as h,s as G,t as Q,i as Z,k as S,f as b}from"./CodeView-CB4kG7Y6.js";import{html as j}from"./index-38xsQSS9.js";import{L as V,E as c}from"./index-Dy07SBfH.js";import"./index-B5UW6SaE.js";import"./appStore-CidPWYa0.js";import"./nativeDownload-B3JGkABw.js";import"./ipc-CNlIRMtU.js";import"./client-CPUljePZ.js";import"./create-C19zqt5N.js";import"./index-Df9jregv.js";import"./index-YRWOePBS.js";const W=1,k=2,w=3,v=180,R=4,_=181,E=5,z=182,U=6;function D(O){return O>=65&&O<=90||O>=97&&O<=122}const F=new c(O=>{let a=O.pos;for(;;){let{next:r}=O;if(r<0)break;if(r==123){let n=O.peek(1);if(n==123){if(O.pos>a)break;O.acceptToken(W,2);return}else if(n==37){if(O.pos>a)break;let $=2,i=2;for(;;){let e=O.peek($);if(e==32||e==10)++$;else if(e==35)for(++$;;){let t=O.peek($);if(t<0||t==10)break;$++}else if(e==45&&i==2)i=++$;else{let t=e==101&&O.peek($+1)==110&&O.peek($+2)==100;O.acceptToken(t?w:k,i);return}}}}if(O.advance(),r==10)break}O.pos>a&&O.acceptToken(v)});function u(O,a,r){return new c(n=>{let $=n.pos;for(;;){let{next:i}=n;if(i==123&&n.peek(1)==37){let e=2;for(;;e++){let o=n.peek(e);if(o!=32&&o!=10)break}let t="";for(;;e++){let o=n.peek(e);if(!D(o))break;t+=String.fromCharCode(o)}if(t==O){if(n.pos>$)break;n.acceptToken(r,2);break}}else if(i<0)break;if(n.advance(),i==10)break}n.pos>$&&n.acceptToken(a)})}const C=u("endcomment",z,E),Y=u("endraw",_,R),N=new c(O=>{if(O.next==35){for(O.advance();!(O.next==10||O.next<0||(O.next==37||O.next==125)&&O.peek(1)==125);)O.advance();O.acceptToken(U)}}),I={__proto__:null,contains:34,or:38,and:38,true:52,false:52,empty:54,forloop:57,tablerowloop:59,continue:61,in:131,with:197,for:199,as:201,if:237,endif:241,unless:247,endunless:251,elsif:255,else:259,case:265,endcase:269,when:273,endfor:281,tablerow:287,endtablerow:291,break:295,cycle:301,echo:305,render:309,include:313,assign:317,capture:323,endcapture:327,increment:331,decrement:335},L={__proto__:null,if:86,endif:90,elsif:94,else:98,unless:104,endunless:108,case:114,endcase:118,when:122,for:128,endfor:138,tablerow:144,endtablerow:148,break:152,continue:156,cycle:160,comment:166,endcomment:172,raw:178,endraw:184,echo:188,render:192,include:204,assign:208,capture:214,endcapture:218,increment:222,decrement:226,liquid:230},H=V.deserialize({version:14,states:"KtQYOPOOOOOP'#F{'#F{OeOaO'#CdOsQhO'#CfO!bQxO'#DSO#{OPO'#DVO$ZOPO'#D`O$iOPO'#DeO$wOPO'#DlO%VOPO'#DtO%eOSO'#EPO%jOQO'#EVO%oOPO'#EiOOOP'#Ge'#GeOOOP'#G]'#G]OOOP'#Fz'#FzQYOPOOOOOP-E9y-E9yOOQW'#Cg'#CgO&cQ!jO,59QO&jQ!jO'#G^OsQhO'#CtOOQW'#Gb'#GbOOQW'#Gc'#GcOOQW'#Gd'#GdOOQW'#G^'#G^OOOP,59n,59nO)YQhO,59nOsQhO,59rOsQhO,59vO)dQhO,59xOsQhO,59{OsQhO,5:QOsQhO,5:UO!]QhO,5:XO!]QhO,5:aO)iQhO,5:eO)nQhO,5:gO)sQhO,5:iO)xQhO,5:lO)}QhO,5:rOsQhO,5:wOsQhO,5:yOsQhO,5;POsQhO,5;ROsQhO,5;UOsQhO,5;YOsQhO,5;[O+^QhO,5;^O+eOPO'#CdOOOP,59q,59qO#{OPO,59qO+sQxO'#DYOOOP,59z,59zO$ZOPO,59zO+xQxO'#DcOOOP,5:P,5:PO$iOPO,5:PO+}QxO'#DhOOOP,5:W,5:WO$wOPO,5:WO,SQxO'#DrOOOP,5:`,5:`O%VOPO,5:`O,XQxO'#DwOOOS'#GQ'#GQO,^OSO'#ESO,fOSO,5:kOOOQ'#GR'#GRO,kOQO'#EYO,sOQO,5:qOOOP,5;T,5;TO%oOPO,5;TO,xQxO'#ElOOOP-E9x-E9xO,}Q#|O,59SOsQhO,59VOsQhO,59WOsQhO,59WO-SQhO'#C}OOQW'#F|'#F|O-XQhO1G.lOOOP1G.l1G.lOsQhO,59WOsQhO,59[O-rQ!jO,59`O-yQ!jO1G/YO.QQhO1G/YOOOP1G/Y1G/YO.YQ!jO1G/^O.aQ!jO1G/bOOOP1G/d1G/dO.hQ!jO1G/gO.oQ!jO1G/lO.vQ!jO1G/pO/QQhO1G/sO/QQhO1G/{OOOP1G0P1G0POOOP1G0R1G0RO/VQhO1G0TOOOS1G0W1G0WOOOQ1G0^1G0^O/bQ!jO1G0cO/iQ!jO1G0eO/yQ!jO1G0kO0QQ!jO1G0mO0XQ!jO1G0pO0`Q!jO1G0tO0gQ!jO1G0vOOQW'#Gh'#GhOOQW'#Gk'#GkOsQhO'#EuO0nQhO'#EtOOQW'#Gm'#GmOsQhO'#EzO0uQhO'#EyOOQW'#Go'#GoOsQhO'#FOOOQW'#Gp'#GpOOQW'#FQ'#FQOOQW'#Gq'#GqOsQhO'#FTO0|QhO'#FSOOQW'#Gs'#GsOsQhO'#FXO!]QhO'#F[O1TQhO'#FZOOQW'#Gu'#GuO!]QhO'#F`O1[QhO'#F_OOQW'#Gw'#GwOOQW'#Fd'#FdOOQW'#Ff'#FfOOQW'#Gx'#GxO1cQhO'#FgOOQW'#Gy'#GyOsQhO'#FiOOQW'#Gz'#GzOsQhO'#FkOOQW'#G{'#G{OsQhO'#FmOOQW'#G|'#G|OsQhO'#FoOOQW'#G}'#G}OsQhO'#FrO1hQhO'#FqOOQW'#HP'#HPOsQhO'#FvOOQW'#HQ'#HQOsQhO'#FxOOQW'#Gj'#GjOOQW'#GT'#GTO1oQhO1G0xOOOP1G0x1G0xOOOP1G/]1G/]O1vQhO,59tOOOP1G/f1G/fO1{QhO,59}OOOP1G/k1G/kO2QQhO,5:SOOOP1G/r1G/rO2VQhO,5:^OOOP1G/z1G/zO2[QhO,5:cOOOS-E:O-E:OOOOP1G0V1G0VO2aQxO'#ETOOOQ-E:P-E:POOOP1G0]1G0]O2fQxO'#EZOOOP1G0o1G0oO2kQhO,5;WOOQW1G.n1G.nO2pQ!jO1G.qO5aQ!jO1G.rO5hQ!jO1G.rOOQW'#DP'#DPO7vQhO,59iOOQW-E9z-E9zOOOP7+$W7+$WO9pQ!jO1G.rO9wQ!jO1G.vOsQhO1G.zO<VQhO7+$tOOOP7+$t7+$tOOOP7+$x7+$xOOOP7+$|7+$|OOOP7+%R7+%ROOOP7+%W7+%WOsQhO'#F}O<_QhO7+%[OOOP7+%[7+%[OOQW'#Gf'#GfOsQhO7+%_OsQhO7+%gO<gQhO'#GPO<lQhO7+%oOOOP7+%o7+%oO<tQhO7+%oO<yQhO7+%}OOOP7+%}7+%}OOQW'#Gg'#GgO!]QhO'#EaOsQhO'#EaOOQW'#GS'#GSO=RQhO7+&POOOP7+&P7+&POOOP7+&V7+&VO=aQhO7+&XOOOP7+&X7+&XOOOP7+&[7+&[OOOP7+&`7+&`OOOP7+&b7+&bO=iQ!jO,5;aOOQW'#Gl'#GlOOQW'#Ew'#EwOOQW,5;`,5;`O0nQhO,5;`O>xQ!jO,5;fOOQW'#Gn'#GnOOQW'#E|'#E|OOQW,5;e,5;eO0uQhO,5;eO@XQ!jO,5;jOAzQ!jO,5;oOOQW'#Gr'#GrOOQW'#FV'#FVOOQW,5;n,5;nO0|QhO,5;nOCZQ!jO,5;sO/QQhO,5;vOOQW'#Gt'#GtOOQW'#F]'#F]OOQW,5;u,5;uO1TQhO,5;uO/QQhO,5;zOOQW'#Gv'#GvOOQW'#Fb'#FbOOQW,5;y,5;yO1[QhO,5;yOEPQhO,5<ROFvQ!jO,5<TOHiQ!jO,5<VOJbQ!jO,5<XOLTQ!jO,5<ZOMvQ!jO,5<^OOQW'#HO'#HOOOQW'#Ft'#FtOOQW,5<],5<]O1hQhO,5<]O! VQ!jO,5<bO!!xQ!jO,5<dOOQW-E:R-E:ROOOP7+&d7+&dOOOP1G/`1G/`OOOP1G/i1G/iOOOP1G/n1G/nOOOP1G/x1G/xOOOP1G/}1G/}O!$kQhO,5:oO!$pQhO,5:uOOOP1G0r1G0rOOQW7+$]7+$]OsQhO1G/TO!$uQ!jO7+$fOOOP<<H`<<H`O!$|Q!jO,5<iOOQW-E9{-E9{OOOP<<Hv<<HvO!&xQ!jO<<HyO!'SQ!jO<<IROOQW,5<k,5<kOOQW-E9}-E9}OOOP<<IZ<<IZO!'^QhO<<IZOOOP<<Ii<<IiO!'fQhO,5:{O!'kQ!jO,5:{OOQW-E:Q-E:QOOOP<<Ik<<IkOOOP<<Is<<IsOOQW1G0z1G0zOOQW1G1P1G1POOQW1G1Y1G1YO!)gQhO1G1_OsQhO1G1bOOQW1G1a1G1aOsQhO1G1fOOQW1G1e1G1eO!+ZQhO1G1mO!,}QhO1G1mO!-SQhO1G1oOOQW'#GU'#GUO!.vQhO1G1qO!0mQhO1G1uOOQW1G1w1G1wOOOP1G0Z1G0ZOOOP1G0a1G0aO!2aQ!jO7+$oOOQW<<HQ<<HQOOQW'#Dq'#DqO!4]QhO'#DpOOQW'#GO'#GOO!5vQhOAN>eOOOPAN>eAN>eO!6OQhOAN>mOOOPAN>mAN>mO!6WQhOAN>uOOOPAN>uAN>uOsQhO1G0gOOQW'#Gi'#GiO!]QhO1G0gO!6`Q!jO7+&|O!7rQ!jO7+'QO!9UQhO7+'XOOQW-E:S-E:SO!:xQhO<<HZOsQhO,5:[OOQW-E9|-E9|OOOPG24PG24POOOPG24XG24XOOOPG24aG24aO!<rQ!jO7+&ROOQW7+&R7+&RO!>kQhO<<JhO!?{QhO<<JlO!A]QhO<<JsO!CPQ!jO1G/v",stateData:"!Di~O%OOSUOS~OPROQSO$zPO~O$zPOPWXQWX$yWX~OgeOjiOkiOlfOmgOnhOoiOpiO%RbO~OwkOxjO{lO!PmO!RnO!UoO!ZpO!_qO!brO!jsO!ntO!puO!rvO!uwO!{xO#QyO#SzO#Y{O#[|O#_}O#c!OO#e!PO#g!QO~OPROQSOR!UO$zPO~OPROQSOR!XO$zPO~OPROQSOR![O$zPO~OPROQSOR!_O$zPO~OPROQSOR!bO$zPO~O$|!cO~O${!fO~OPROQSOR!kO$zPO~O]!mOa!uOb!oOc!pOr!qO%T!nO~OX!tO~P%}Oe!vOX%QX]%QXa%QXb%QXc%QXr%QX%T%QXi%QXx%QXu%QX#U%QX#V%QX%S%QXn%QX#j%QX#l%QX#o%QX#s%QX#u%QX#x%QX#|%QX$T%QX$X%QX$[%QX$^%QX$`%QX$b%QX$d%QX$g%QX$k%QX$m%QX#q%QX#z%QX$i%QXf%QX%R%QX#W%QX$Q%QX$V%QX~Or!qOx!zO~PsOx!}O~Ox#TO~Ox#UO~Oo#VO~Ox#WO~Ox#XO~OnhO#V#aO#j#bO#o#eO#s#hO#u#jO#x#lO#|#oO$T#sO$X#vO$[#yO$^#{O$`#}O$b$PO$d$RO$g$TO$k$WO$m$YO~Ox$_O~P*SO$zPOPWXQWXRWX~O}$aO~O!W$cO~O!]$eO~O!g$gO~O!l$iO~O$|!cOT!vX~OT$lO~O${!fOS!|X~OS$oO~O#a$qO~O^$rO~O%R$vO~OX$yOr!qO~O]!mOa!uOb!oOc!pO%T!nO~Oi$|O~P-aOx%OO~P%}Or!qOx%OO~Ox%PO~P-aOx%QO~P-aOx%RO~P-aOx%SO~P-aOu%TOx%VO~P-aO!c%WO~Ot%^Ou%ZOx%]O~Ox%`O~P%}Ou%bOx%fO#U%aO#V#aO~P-aOx%gO~P-aOx%iO~P%}Ox%jO~P-aOx%kO~P-aOx%lO~P-aO#l%nO~P*SO#q%sO~P*SO#z%yO~P*SO$Q&PO~P*SO$V&UO~P*SOo&YO~O$i&`O~P*SOx&gO~P*SOx&hO~Ox&iO~Ox&jO~Ox&kO~Ox&lO~O!x&mO~O#O&nO~Ox&oO~O%S&pO~P-aO]!mO%T!nOX`ia`ic`ir`ii`ix`iu`i#U`i#V`i%S`in`i#j`i#l`i#o`i#s`i#u`i#x`i#|`i$T`i$X`i$[`i$^`i$``i$b`i$d`i$g`i$k`i$m`i#q`i#z`i$i`if`i%R`i#W`i$Q`i$V`i~Ob`i~P2wOX`ir`ii`ix`iu`i#U`i#V`i%S`in`i#j`i#l`i#o`i#s`i#u`i#x`i#|`i$T`i$X`i$[`i$^`i$``i$b`i$d`i$g`i$k`i$m`i#q`i#z`i$i`if`i%R`i#W`i$Q`i$V`i~P-aOt&qOXqarqaxqanqa#Vqa#jqa#oqa#sqa#uqa#xqa#|qa$Tqa$Xqa$[qa$^qa$`qa$bqa$dqa$gqa$kqa$mqa#lqa#qqa#zqa$Qqa$Vqa$iqa~Ob!oO~P2wOXdirdiidixdiudi#Udi#Vdi%Sdindi#jdi#ldi#odi#sdi#udi#xdi#|di$Tdi$Xdi$[di$^di$`di$bdi$ddi$gdi$kdi$mdi#qdi#zdi$idifdi%Rdi#Wdi$Qdi$Vdi~P-aOr!qOx&sO~Ou%TOx&vO~Oo&yO~Ou%ZOx&{O~Oo&|O~Or!qOx&}O~Ou%bOx'RO#U%aO#V#aO~Or!qOx'SO~On#ia#V#ia#j#ia#l#ia#o#ia#s#ia#u#ia#x#ia#|#ia$T#ia$X#ia$[#ia$^#ia$`#ia$b#ia$d#ia$g#ia$k#ia$m#ia~P-aOn#na#V#na#j#na#o#na#q#na#s#na#u#na#x#na#|#na$T#na$X#na$[#na$^#na$`#na$b#na$d#na$g#na$k#na$m#na~P-aOn#rax#ra#V#ra#j#ra#o#ra#s#ra#u#ra#x#ra#|#ra$T#ra$X#ra$[#ra$^#ra$`#ra$b#ra$d#ra$g#ra$k#ra$m#ra#l#ra#q#ra#z#ra$Q#ra$V#ra$i#ra~P-aOn#wa#V#wa#j#wa#o#wa#s#wa#u#wa#x#wa#z#wa#|#wa$T#wa$X#wa$[#wa$^#wa$`#wa$b#wa$d#wa$g#wa$k#wa$m#wa~P-aOu%TOn#{ax#{a#V#{a#j#{a#o#{a#s#{a#u#{a#x#{a#|#{a$T#{a$X#{a$[#{a$^#{a$`#{a$b#{a$d#{a$g#{a$k#{a$m#{a#l#{a#q#{a#z#{a$Q#{a$V#{a$i#{a~P-aOt'^Ou%ZOn$Zax$Za#V$Za#j$Za#o$Za#s$Za#u$Za#x$Za#|$Za$T$Za$X$Za$[$Za$^$Za$`$Za$b$Za$d$Za$g$Za$k$Za$m$Za#l$Za#q$Za#z$Za$Q$Za$V$Za$i$Za~On$]ax$]a#V$]a#j$]a#o$]a#s$]a#u$]a#x$]a#|$]a$T$]a$X$]a$[$]a$^$]a$`$]a$b$]a$d$]a$g$]a$k$]a$m$]a#l$]a#q$]a#z$]a$Q$]a$V$]a$i$]a~P%}Ou%bO#U%aO#V#aOn$_ax$_a#j$_a#o$_a#s$_a#u$_a#x$_a#|$_a$T$_a$X$_a$[$_a$^$_a$`$_a$b$_a$d$_a$g$_a$k$_a$m$_a#l$_a#q$_a#z$_a$Q$_a$V$_a$i$_a~P-aOn$aax$aa#V$aa#j$aa#o$aa#s$aa#u$aa#x$aa#|$aa$T$aa$X$aa$[$aa$^$aa$`$aa$b$aa$d$aa$g$aa$k$aa$m$aa#l$aa#q$aa#z$aa$Q$aa$V$aa$i$aa~P-aOn$cax$ca#V$ca#j$ca#o$ca#s$ca#u$ca#x$ca#|$ca$T$ca$X$ca$[$ca$^$ca$`$ca$b$ca$d$ca$g$ca$k$ca$m$ca#l$ca#q$ca#z$ca$Q$ca$V$ca$i$ca~P%}On$fa#V$fa#j$fa#o$fa#s$fa#u$fa#x$fa#|$fa$T$fa$X$fa$[$fa$^$fa$`$fa$b$fa$d$fa$g$fa$i$fa$k$fa$m$fa~P-aOn$jax$ja#V$ja#j$ja#o$ja#s$ja#u$ja#x$ja#|$ja$T$ja$X$ja$[$ja$^$ja$`$ja$b$ja$d$ja$g$ja$k$ja$m$ja#l$ja#q$ja#z$ja$Q$ja$V$ja$i$ja~P-aOn$lax$la#V$la#j$la#o$la#s$la#u$la#x$la#|$la$T$la$X$la$[$la$^$la$`$la$b$la$d$la$g$la$k$la$m$la#l$la#q$la#z$la$Q$la$V$la$i$la~P-aOx'dO~Ox'eO~Of'gO~P-aOu$qax$qan$qa#V$qa#j$qa#o$qa#s$qa#u$qa#x$qa#|$qa$T$qa$X$qa$[$qa$^$qa$`$qa$b$qa$d$qa$g$qa$k$qa$m$qa#l$qa#q$qa#z$qa$Q$qa$V$qa$i$qaX$qar$qa~P-aOx'lO%R'hO~P-aOx'nO%R'hO~P-aOu%ZOx'pO~Ot'qO~O#W'rOu#Tax#Ta#U#Ta#V#Tan#Ta#j#Ta#o#Ta#s#Ta#u#Ta#x#Ta#|#Ta$T#Ta$X#Ta$[#Ta$^#Ta$`#Ta$b#Ta$d#Ta$g#Ta$k#Ta$m#Ta#l#Ta#q#Ta#z#Ta$Q#Ta$V#Ta$i#Ta~P-aOu%TOn#{ix#{i#V#{i#j#{i#o#{i#s#{i#u#{i#x#{i#|#{i$T#{i$X#{i$[#{i$^#{i$`#{i$b#{i$d#{i$g#{i$k#{i$m#{i#l#{i#q#{i#z#{i$Q#{i$V#{i$i#{i~Ou%ZOn$Zix$Zi#V$Zi#j$Zi#o$Zi#s$Zi#u$Zi#x$Zi#|$Zi$T$Zi$X$Zi$[$Zi$^$Zi$`$Zi$b$Zi$d$Zi$g$Zi$k$Zi$m$Zi#l$Zi#q$Zi#z$Zi$Q$Zi$V$Zi$i$Zi~Oo'vO~Or!qOn$]ix$]i#V$]i#j$]i#o$]i#s$]i#u$]i#x$]i#|$]i$T$]i$X$]i$[$]i$^$]i$`$]i$b$]i$d$]i$g$]i$k$]i$m$]i#l$]i#q$]i#z$]i$Q$]i$V$]i$i$]i~Ou%bO#U%aO#V#aOn$_ix$_i#j$_i#o$_i#s$_i#u$_i#x$_i#|$_i$T$_i$X$_i$[$_i$^$_i$`$_i$b$_i$d$_i$g$_i$k$_i$m$_i#l$_i#q$_i#z$_i$Q$_i$V$_i$i$_i~Or!qOn$cix$ci#V$ci#j$ci#o$ci#s$ci#u$ci#x$ci#|$ci$T$ci$X$ci$[$ci$^$ci$`$ci$b$ci$d$ci$g$ci$k$ci$m$ci#l$ci#q$ci#z$ci$Q$ci$V$ci$i$ci~Ou%TOXqqrqqxqqnqq#Vqq#jqq#oqq#sqq#uqq#xqq#|qq$Tqq$Xqq$[qq$^qq$`qq$bqq$dqq$gqq$kqq$mqq#lqq#qqq#zqq$Qqq$Vqq$iqq~P-aOt'yOx!dX%R!dXn!dX#V!dX#j!dX#o!dX#s!dX#u!dX#x!dX#|!dX$Q!dX$T!dX$X!dX$[!dX$^!dX$`!dX$b!dX$d!dX$g!dX$k!dX$m!dX$V!dX~Ox'{O%R'hO~Ox'|O%R'hO~Ou%ZOx'}O~O%R'hOn$Oq#V$Oq#j$Oq#o$Oq#s$Oq#u$Oq#x$Oq#|$Oq$Q$Oq$T$Oq$X$Oq$[$Oq$^$Oq$`$Oq$b$Oq$d$Oq$g$Oq$k$Oq$m$Oq~P-aO%R'hOn$Sq#V$Sq#j$Sq#o$Sq#s$Sq#u$Sq#x$Sq#|$Sq$T$Sq$V$Sq$X$Sq$[$Sq$^$Sq$`$Sq$b$Sq$d$Sq$g$Sq$k$Sq$m$Sq~P-aOu%ZOn$Zqx$Zq#V$Zq#j$Zq#o$Zq#s$Zq#u$Zq#x$Zq#|$Zq$T$Zq$X$Zq$[$Zq$^$Zq$`$Zq$b$Zq$d$Zq$g$Zq$k$Zq$m$Zq#l$Zq#q$Zq#z$Zq$Q$Zq$V$Zq$i$Zq~Ou%TOXqyrqyxqynqy#Vqy#jqy#oqy#sqy#uqy#xqy#|qy$Tqy$Xqy$[qy$^qy$`qy$bqy$dqy$gqy$kqy$mqy#lqy#qqy#zqy$Qqy$Vqy$iqy~Ou#Tqx#Tq#U#Tq#V#Tqn#Tq#j#Tq#o#Tq#s#Tq#u#Tq#x#Tq#|#Tq$T#Tq$X#Tq$[#Tq$^#Tq$`#Tq$b#Tq$d#Tq$g#Tq$k#Tq$m#Tq#l#Tq#q#Tq#z#Tq$Q#Tq$V#Tq$i#Tq~P-aO%R'hOn$Oy#V$Oy#j$Oy#o$Oy#s$Oy#u$Oy#x$Oy#|$Oy$Q$Oy$T$Oy$X$Oy$[$Oy$^$Oy$`$Oy$b$Oy$d$Oy$g$Oy$k$Oy$m$Oy~O%R'hOn$Sy#V$Sy#j$Sy#o$Sy#s$Sy#u$Sy#x$Sy#|$Sy$T$Sy$V$Sy$X$Sy$[$Sy$^$Sy$`$Sy$b$Sy$d$Sy$g$Sy$k$Sy$m$Sy~Ou%ZOn$Zyx$Zy#V$Zy#j$Zy#o$Zy#s$Zy#u$Zy#x$Zy#|$Zy$T$Zy$X$Zy$[$Zy$^$Zy$`$Zy$b$Zy$d$Zy$g$Zy$k$Zy$m$Zy#l$Zy#q$Zy#z$Zy$Q$Zy$V$Zy$i$Zy~Ox!di%R!din!di#V!di#j!di#o!di#s!di#u!di#x!di#|!di$Q!di$T!di$X!di$[!di$^!di$`!di$b!di$d!di$g!di$k!di$m!di$V!di~P-aO",goto:"@p%uPPPPPPPP%vP%v&W'hPP'h'hPPP'hPPP'hPPPPPPPP(fP(vPP(yPP(y)ZP)kP(yP(yP(y)qP*RP(y*XP*iP(yP(y*oPP+P+Z+eP(y+kP+{P(yP(yP(yP(y,RP,c,fP(y,iP,y,|P(yP(yP-PPPP(yP(yP(y-XP-iP(yP(yP(yP-o.PP.aP-o.gP.wP-oP-oP-o.}P/_P-oP-o/e/uP-o/{P0]P-oP-o-oP-oP-oP-oP-oP-o0cP0sP-oP-oP0y1i2P2o2}3a3s3y4P4V4uPPPPPP4{5]PPP'h'h8P%v9_9k9q:X:[:l:|;Q;b;f;v<W<h<l<|=Q=b=f=v>W>h>x?Y?j?z@O@`m^OTUVWX[`!T!W!Z!^!a!j!vdReklmopqyz{|}!O!P!n!o!p!u!v#c#f#i#m#p#|$O$Q$S$U$X$Z$|%T%X%Y%c&q'X'Z'q'yQ#RrQ#SsQ&O#qQ&T#tQ'O%bR(P's!wiReklmopqyz{|}!O!P!n!o!p!u!v#c#f#i#m#p#|$O$Q$S$U$X$Z$|%T%X%Y%c&q'X'Z'q'ym!rck!s!x!y#Y#]$}%_%h&Z&^'_'bR$w!qm]OTUVWX[`!T!W!Z!^!a!jmTOTUVWX[`!T!W!Z!^!a!jQ!STR$`!TmUOTUVWX[`!T!W!Z!^!a!jQ!VUR$b!WmVOTUVWX[`!T!W!Z!^!a!jQ!YVR$d!ZmWOTUVWX[`!T!W!Z!^!a!ja'j&w&x'k'm't'u(Q(Ra'i&w&x'k'm't'u(Q(RQ!]WR$f!^mXOTUVWX[`!T!W!Z!^!a!jQ!`XR$h!amYOTUVWX[`!T!W!Z!^!a!jR!eYR$k!emZOTUVWX[`!T!W!Z!^!a!jR!hZR$n!hS%d#Z%eT'`&['am[OTUVWX[`!T!W!Z!^!a!jQ!i[R$p!jm$[!Q#d#g#n#r#u$V$^%q%v%|&S&X&cm#d!Q#d#g#n#r#u$V$^%q%v%|&S&X&cQ%p#dR'T%qm#g!Q#d#g#n#r#u$V$^%q%v%|&S&X&cQ%u#gR'U%vm#n!Q#d#g#n#r#u$V$^%q%v%|&S&X&cQ%{#nR'V%|m#r!Q#d#g#n#r#u$V$^%q%v%|&S&X&cQ&R#rR'Y&Sm#u!Q#d#g#n#r#u$V$^%q%v%|&S&X&cQ&W#uR'[&Xm$V!Q#d#g#n#r#u$V$^%q%v%|&S&X&cQ&b$VR'c&cQ`OQ!TTQ!WUQ!ZVQ!^WQ!aXQ!j[_!l`!T!W!Z!^!a!jSQO`SaQ!Ri!RTUVWX[!T!W!Z!^!a!jQ!scQ!yk^$x!s!y$}%_%h'_'bQ$}!xQ%_#YQ%h#]Q'_&ZR'b&^Q%U#QU&u%U'W'xQ'W%}R'x'fQ'k&wQ'm&xW'z'k'm(Q(RQ(Q'tR(R'uQ%[#VW&z%[']'o(SQ']&YQ'o&|R(S'vQ!dYR$j!dQ!gZR$m!gQ%e#ZR'Q%eQ$^!QQ%q#dQ%v#gQ%|#nQ&S#rQ&X#uQ&c$V_&f$^%q%v%|&S&X&cQ'a&[R'w'am_OTUVWX[`!T!W!Z!^!a!jQcRQ!weQ!xkQ!{lQ!|mQ#OoQ#PpQ#QqQ#YyQ#ZzQ#[{Q#]|Q#^}Q#_!OQ#`!PQ$s!nQ$t!oQ$u!pQ$z!uQ${!vQ%m#cQ%r#fQ%w#iQ%x#mQ%}#pQ&Z#|Q&[$OQ&]$QQ&^$SQ&_$UQ&d$XQ&e$ZQ&r$|Q&t%TQ&w%XQ&x%YQ'P%cQ'f&qQ't'XQ'u'ZQ(O'qR(T'y!viReklmopqyz{|}!O!P!n!o!p!u!v#c#f#i#m#p#|$O$Q$S$U$X$Z$|%T%X%Y%c&q'X'Z'q'ym#x!Q#d#g#n#r#u$V$^%q%v%|&S&X&cQ%X#RQ%Y#SQ'X&OR'Z&TX%c#Z%e&['al#q!Q#d#g#n#r#u$V$^%q%v%|&S&X&cX%c#Z%e&['aR's'Pm$]!Q#d#g#n#r#u$V$^%q%v%|&S&X&cm#c!Q#d#g#n#r#u$V$^%q%v%|&S&X&cT%o#d%qm#f!Q#d#g#n#r#u$V$^%q%v%|&S&X&cT%t#g%vm#i!Q#d#g#n#r#u$V$^%q%v%|&S&X&cm#k!Q#d#g#n#r#u$V$^%q%v%|&S&X&cm#m!Q#d#g#n#r#u$V$^%q%v%|&S&X&cT%z#n%|m#p!Q#d#g#n#r#u$V$^%q%v%|&S&X&cT&Q#r&Sm#t!Q#d#g#n#r#u$V$^%q%v%|&S&X&cT&V#u&Xm#w!Q#d#g#n#r#u$V$^%q%v%|&S&X&cm#z!Q#d#g#n#r#u$V$^%q%v%|&S&X&cm#|!Q#d#g#n#r#u$V$^%q%v%|&S&X&cm$O!Q#d#g#n#r#u$V$^%q%v%|&S&X&cm$Q!Q#d#g#n#r#u$V$^%q%v%|&S&X&cm$S!Q#d#g#n#r#u$V$^%q%v%|&S&X&cm$U!Q#d#g#n#r#u$V$^%q%v%|&S&X&cT&a$V&cm$X!Q#d#g#n#r#u$V$^%q%v%|&S&X&cm$Z!Q#d#g#n#r#u$V$^%q%v%|&S&X&c",nodeNames:"⚠ {{ {% {% {% {% InlineComment Template Text }} Interpolation VariableName MemberExpression . PropertyName SubscriptExpression BinaryExpression contains CompareOp LogicOp AssignmentExpression AssignOp ) ( RangeExpression .. BooleanLiteral empty forloop tablerowloop continue StringLiteral NumberLiteral Filter | FilterName : , Tag TagName %} IfDirective Tag if EndTag endif Tag elsif Tag else UnlessDirective Tag unless EndTag endunless CaseDirective Tag case EndTag endcase Tag when ForDirective Tag for in Parameter ParameterName EndTag endfor TableDirective Tag tablerow EndTag endtablerow Tag break Tag continue Tag cycle Comment Tag comment CommentText EndTag endcomment RawDirective Tag raw RawText EndTag endraw Tag echo Tag render RenderParameter with for as Tag include Tag assign CaptureDirective Tag capture EndTag endcapture Tag increment Tag decrement Tag liquid IfDirective Tag if EndTag endif UnlessDirective Tag unless EndTag endunless Tag elsif Tag else CaseDirective Tag case EndTag endcase Tag when ForDirective Tag EndTag endfor TableDirective Tag tablerow EndTag endtablerow Tag break Tag Tag cycle Tag echo Tag render Tag include Tag assign CaptureDirective Tag capture EndTag endcapture Tag increment Tag decrement",maxTerm:220,nodeProps:[["closedBy",1,"}}",-4,2,3,4,5,"%}",23,")"],["openedBy",9,"{{",22,"(",40,"{%"],["group",-13,11,12,15,16,20,24,26,27,28,29,30,31,32,"Expression"]],skippedNodes:[0,6],repeatNodeCount:11,tokenData:")e~RmXY!|YZ!|]^!|pq!|qr#_rs#juv$[wx$gxy%Syz%X{|%^|}&x}!O&}!O!P'Z!Q![&g![!]'k!^!_'p!_!`'x!`!a'p!c!}(Q!}#O(y#P#Q)O#R#S(Q#T#o(Q#p#q)T#q#r)Y%W;'S(Q;'S;:j(s<%lO(Q~#RS%O~XY!|YZ!|]^!|pq!|~#bP!_!`#e~#jOb~~#mUOY#jZr#jrs$Ps;'S#j;'S;=`$U<%lO#j~$UOo~~$XP;=`<%l#j~$_P#q#r$b~$gOx~~$jUOY$gZw$gwx$Px;'S$g;'S;=`$|<%lO$g~%PP;=`<%l$g~%XOg~~%^Of~P%aQ!O!P%g!Q![&gP%jP!Q![%mP%rRpP!Q![%m!g!h%{#X#Y%{P&OR{|&X}!O&X!Q![&_P&[P!Q![&_P&dPpP!Q![&_P&lSpP!O!P%g!Q![&g!g!h%{#X#Y%{~&}Ou~~'QRuv$[!O!P%g!Q![&g~'`Q]S!O!P'f!Q![%m~'kOi~~'pOt~~'uPb~!_!`#e~'}Pe~!_!`#e_(ZW^WwQ%RT}!O(Q!Q![(Q!c!}(Q#R#S(Q#T#o(Q%W;'S(Q;'S;:j(s<%lO(Q_(vP;=`<%l(Q~)OO%T~~)TO%S~~)YOr~~)]P#q#r)`~)eOX~",tokenizers:[F,Y,C,N,0,1,2,3],topRules:{Template:[0,7]},dynamicPrecedences:{190:1,191:1,192:1,194:1,195:1,196:1,197:1,199:1,200:1,201:1,202:1,203:1,204:1,205:1,206:1,207:1,208:1,209:1,210:1,211:1,212:1,213:1,214:1,215:1,216:1,217:1,218:1,219:1,220:1},specialized:[{term:187,get:O=>I[O]||-1},{term:39,get:O=>L[O]||-1}],tokenPrec:0});function l(O,a){return O.split(" ").map(r=>({label:r,type:a}))}const P=l("abs append at_least at_most capitalize ceil compact concat date default divided_by downcase escape escape_once first floor join last lstrip map minus modulo newline_to_br plus prepend remove remove_first replace replace_first reverse round rstrip size slice sort sort_natural split strip strip_html strip_newlines sum times truncate truncatewords uniq upcase url_decode url_encode where","function"),m=l("cycle comment endcomment raw endraw echo increment decrement liquid if elsif else endif unless endunless case endcase for endfor tablerow endtablerow break continue assign capture endcapture render include","keyword"),T=l("empty forloop tablerowloop in with as","keyword"),A=l("first index index0 last length rindex","property"),B=l("col col0 col_first col_last first index index0 last length rindex rindex0 row","property");function M(O){var a;let{state:r,pos:n}=O,$=y(r).resolveInner(n,-1).enterUnfinishedNodesBefore(n),i=((a=$.childBefore(n))===null||a===void 0?void 0:a.name)||$.name;if($.name=="FilterName")return{type:"filter",node:$};if(O.explicit&&i=="|")return{type:"filter"};if($.name=="TagName")return{type:"tag",node:$};if(O.explicit&&i=="{%")return{type:"tag"};if($.name=="PropertyName"&&$.parent.name=="MemberExpression")return{type:"property",node:$,target:$.parent};if($.name=="."&&$.parent.name=="MemberExpression")return{type:"property",target:$.parent};if($.name=="MemberExpression"&&i==".")return{type:"property",target:$};if($.name=="VariableName")return{type:"expression",from:$.from};let e=O.matchBefore(/[\w\u00c0-\uffff]+$/);return e?{type:"expression",from:e.from}:O.explicit&&$.name!="CommentText"&&$.name!="StringLiteral"&&$.name!="NumberLiteral"&&$.name!="InlineComment"?{type:"expression"}:null}function K(O,a,r,n){let $=[];for(;;){let i=a.getChild("Expression");if(!i)return[];if(i.name=="VariableName"||i.name=="forloop"||i.name=="tablerowloop"){let e=O.sliceDoc(i.from,i.to);if(e=="forloop")return $.length?[]:A;if(e=="tablerowloop")return $.length?[]:B;$.unshift(e);break}else if(i.name=="MemberExpression"){let e=i.getChild("PropertyName");e&&$.unshift(O.sliceDoc(e.from,e.to)),a=i}else if(i.name=="SubscriptExpression"){let e=i.getChildren("Expression")[1];$.unshift(e?.name=="StringLiteral"?O.sliceDoc(e.from+1,e.to-1):"[]"),a=i}else return[]}return n?n($,O,r):[]}function J(O={}){let a=O.filters?O.filters.concat(P):P,r=O.tags?O.tags.concat(m):m,n=O.variables?O.variables.concat(T):T,{properties:$}=O;return i=>{var e;let t=M(i);if(!t)return null;let o=(e=t.from)!==null&&e!==void 0?e:t.node?t.node.from:i.pos,s;return t.type=="filter"?s=a:t.type=="tag"?s=r:t.type=="expression"?s=n:s=K(i.state,t.target,i,$),s.length?{options:s,from:o,validFor:/^[\w\u00c0-\uffff]*$/}:null}}const OO=f.inputHandler.of((O,a,r,n)=>n!="%"||a!=r||O.state.doc.sliceString(a-1,r+1)!="{}"?!1:(O.dispatch(O.state.changeByRange($=>({changes:{from:$.from,to:$.to,insert:"%%"},range:p.cursor($.from+1)})),{scrollIntoView:!0,userEvent:"input.type"}),!0));function d(O){return a=>{let r=O.test(a.textAfter);return a.lineIndent(a.node.from)+(r?0:a.unit)}}const $O=h.define({name:"liquid",parser:H.configure({props:[G({"cycle comment endcomment raw endraw echo increment decrement liquid in with as":Q.keyword,"empty forloop tablerowloop":Q.atom,"if elsif else endif unless endunless case endcase for endfor tablerow endtablerow break continue":Q.controlKeyword,"assign capture endcapture":Q.definitionKeyword,contains:Q.operatorKeyword,"render include":Q.moduleKeyword,VariableName:Q.variableName,TagName:Q.tagName,FilterName:Q.function(Q.variableName),PropertyName:Q.propertyName,CompareOp:Q.compareOperator,AssignOp:Q.definitionOperator,LogicOp:Q.logicOperator,NumberLiteral:Q.number,StringLiteral:Q.string,BooleanLiteral:Q.bool,InlineComment:Q.lineComment,CommentText:Q.blockComment,"{% %} {{ }}":Q.brace,"[ ]":Q.bracket,"( )":Q.paren,".":Q.derefOperator,", .. : |":Q.punctuation}),Z.add({Tag:S({closing:"%}"}),"UnlessDirective ForDirective TablerowDirective CaptureDirective":d(/^\s*(\{%-?\s*)?end\w/),IfDirective:d(/^\s*(\{%-?\s*)?(endif|else|elsif)\b/),CaseDirective:d(/^\s*(\{%-?\s*)?(endcase|when)\b/)}),b.add({"UnlessDirective ForDirective TablerowDirective CaptureDirective IfDirective CaseDirective RawDirective Comment"(O){let a=O.firstChild,r=O.lastChild;return!a||a.name!="Tag"?null:{from:a.to,to:r.name=="EndTag"?r.from:O.to}}})]}),languageData:{commentTokens:{line:"#"},indentOnInput:/^\s*{%-?\s*(?:end|elsif|else|when|)$/}}),q=j();function g(O){return $O.configure({wrap:X(a=>a.type.isTop?{parser:O.parser,overlay:r=>r.name=="Text"||r.name=="RawText"}:null)},"liquid")}const aO=g(q.language);function cO(O={}){let a=O.base||q,r=a.language==q.language?aO:g(a.language);return new x(r,[a.support,r.data.of({autocomplete:J(O)}),a.language.data.of({closeBrackets:{brackets:["{"]}}),OO])}export{OO as closePercentBrace,cO as liquid,J as liquidCompletionSource,aO as liquidLanguage};
|
|
1
|
+
import{E as f,o as p,a as x,p as X,e as y,L as h,s as G,t as Q,i as Z,k as S,f as b}from"./CodeView-DRVh13k9.js";import{html as j}from"./index-BGEkZBs2.js";import{L as V,E as c}from"./index-D102FOuM.js";import"./index-BYUntVIZ.js";import"./appStore-affnJoin.js";import"./nativeDownload-Udrv_tmU.js";import"./ipc-D7yENkjV.js";import"./client-BqhpYbYL.js";import"./create-BgJN5qsj.js";import"./index-XyjIhkPw.js";import"./index-BO2XJc36.js";const W=1,k=2,w=3,v=180,R=4,_=181,E=5,z=182,U=6;function D(O){return O>=65&&O<=90||O>=97&&O<=122}const F=new c(O=>{let a=O.pos;for(;;){let{next:r}=O;if(r<0)break;if(r==123){let n=O.peek(1);if(n==123){if(O.pos>a)break;O.acceptToken(W,2);return}else if(n==37){if(O.pos>a)break;let $=2,i=2;for(;;){let e=O.peek($);if(e==32||e==10)++$;else if(e==35)for(++$;;){let t=O.peek($);if(t<0||t==10)break;$++}else if(e==45&&i==2)i=++$;else{let t=e==101&&O.peek($+1)==110&&O.peek($+2)==100;O.acceptToken(t?w:k,i);return}}}}if(O.advance(),r==10)break}O.pos>a&&O.acceptToken(v)});function u(O,a,r){return new c(n=>{let $=n.pos;for(;;){let{next:i}=n;if(i==123&&n.peek(1)==37){let e=2;for(;;e++){let o=n.peek(e);if(o!=32&&o!=10)break}let t="";for(;;e++){let o=n.peek(e);if(!D(o))break;t+=String.fromCharCode(o)}if(t==O){if(n.pos>$)break;n.acceptToken(r,2);break}}else if(i<0)break;if(n.advance(),i==10)break}n.pos>$&&n.acceptToken(a)})}const C=u("endcomment",z,E),Y=u("endraw",_,R),N=new c(O=>{if(O.next==35){for(O.advance();!(O.next==10||O.next<0||(O.next==37||O.next==125)&&O.peek(1)==125);)O.advance();O.acceptToken(U)}}),I={__proto__:null,contains:34,or:38,and:38,true:52,false:52,empty:54,forloop:57,tablerowloop:59,continue:61,in:131,with:197,for:199,as:201,if:237,endif:241,unless:247,endunless:251,elsif:255,else:259,case:265,endcase:269,when:273,endfor:281,tablerow:287,endtablerow:291,break:295,cycle:301,echo:305,render:309,include:313,assign:317,capture:323,endcapture:327,increment:331,decrement:335},L={__proto__:null,if:86,endif:90,elsif:94,else:98,unless:104,endunless:108,case:114,endcase:118,when:122,for:128,endfor:138,tablerow:144,endtablerow:148,break:152,continue:156,cycle:160,comment:166,endcomment:172,raw:178,endraw:184,echo:188,render:192,include:204,assign:208,capture:214,endcapture:218,increment:222,decrement:226,liquid:230},H=V.deserialize({version:14,states:"KtQYOPOOOOOP'#F{'#F{OeOaO'#CdOsQhO'#CfO!bQxO'#DSO#{OPO'#DVO$ZOPO'#D`O$iOPO'#DeO$wOPO'#DlO%VOPO'#DtO%eOSO'#EPO%jOQO'#EVO%oOPO'#EiOOOP'#Ge'#GeOOOP'#G]'#G]OOOP'#Fz'#FzQYOPOOOOOP-E9y-E9yOOQW'#Cg'#CgO&cQ!jO,59QO&jQ!jO'#G^OsQhO'#CtOOQW'#Gb'#GbOOQW'#Gc'#GcOOQW'#Gd'#GdOOQW'#G^'#G^OOOP,59n,59nO)YQhO,59nOsQhO,59rOsQhO,59vO)dQhO,59xOsQhO,59{OsQhO,5:QOsQhO,5:UO!]QhO,5:XO!]QhO,5:aO)iQhO,5:eO)nQhO,5:gO)sQhO,5:iO)xQhO,5:lO)}QhO,5:rOsQhO,5:wOsQhO,5:yOsQhO,5;POsQhO,5;ROsQhO,5;UOsQhO,5;YOsQhO,5;[O+^QhO,5;^O+eOPO'#CdOOOP,59q,59qO#{OPO,59qO+sQxO'#DYOOOP,59z,59zO$ZOPO,59zO+xQxO'#DcOOOP,5:P,5:PO$iOPO,5:PO+}QxO'#DhOOOP,5:W,5:WO$wOPO,5:WO,SQxO'#DrOOOP,5:`,5:`O%VOPO,5:`O,XQxO'#DwOOOS'#GQ'#GQO,^OSO'#ESO,fOSO,5:kOOOQ'#GR'#GRO,kOQO'#EYO,sOQO,5:qOOOP,5;T,5;TO%oOPO,5;TO,xQxO'#ElOOOP-E9x-E9xO,}Q#|O,59SOsQhO,59VOsQhO,59WOsQhO,59WO-SQhO'#C}OOQW'#F|'#F|O-XQhO1G.lOOOP1G.l1G.lOsQhO,59WOsQhO,59[O-rQ!jO,59`O-yQ!jO1G/YO.QQhO1G/YOOOP1G/Y1G/YO.YQ!jO1G/^O.aQ!jO1G/bOOOP1G/d1G/dO.hQ!jO1G/gO.oQ!jO1G/lO.vQ!jO1G/pO/QQhO1G/sO/QQhO1G/{OOOP1G0P1G0POOOP1G0R1G0RO/VQhO1G0TOOOS1G0W1G0WOOOQ1G0^1G0^O/bQ!jO1G0cO/iQ!jO1G0eO/yQ!jO1G0kO0QQ!jO1G0mO0XQ!jO1G0pO0`Q!jO1G0tO0gQ!jO1G0vOOQW'#Gh'#GhOOQW'#Gk'#GkOsQhO'#EuO0nQhO'#EtOOQW'#Gm'#GmOsQhO'#EzO0uQhO'#EyOOQW'#Go'#GoOsQhO'#FOOOQW'#Gp'#GpOOQW'#FQ'#FQOOQW'#Gq'#GqOsQhO'#FTO0|QhO'#FSOOQW'#Gs'#GsOsQhO'#FXO!]QhO'#F[O1TQhO'#FZOOQW'#Gu'#GuO!]QhO'#F`O1[QhO'#F_OOQW'#Gw'#GwOOQW'#Fd'#FdOOQW'#Ff'#FfOOQW'#Gx'#GxO1cQhO'#FgOOQW'#Gy'#GyOsQhO'#FiOOQW'#Gz'#GzOsQhO'#FkOOQW'#G{'#G{OsQhO'#FmOOQW'#G|'#G|OsQhO'#FoOOQW'#G}'#G}OsQhO'#FrO1hQhO'#FqOOQW'#HP'#HPOsQhO'#FvOOQW'#HQ'#HQOsQhO'#FxOOQW'#Gj'#GjOOQW'#GT'#GTO1oQhO1G0xOOOP1G0x1G0xOOOP1G/]1G/]O1vQhO,59tOOOP1G/f1G/fO1{QhO,59}OOOP1G/k1G/kO2QQhO,5:SOOOP1G/r1G/rO2VQhO,5:^OOOP1G/z1G/zO2[QhO,5:cOOOS-E:O-E:OOOOP1G0V1G0VO2aQxO'#ETOOOQ-E:P-E:POOOP1G0]1G0]O2fQxO'#EZOOOP1G0o1G0oO2kQhO,5;WOOQW1G.n1G.nO2pQ!jO1G.qO5aQ!jO1G.rO5hQ!jO1G.rOOQW'#DP'#DPO7vQhO,59iOOQW-E9z-E9zOOOP7+$W7+$WO9pQ!jO1G.rO9wQ!jO1G.vOsQhO1G.zO<VQhO7+$tOOOP7+$t7+$tOOOP7+$x7+$xOOOP7+$|7+$|OOOP7+%R7+%ROOOP7+%W7+%WOsQhO'#F}O<_QhO7+%[OOOP7+%[7+%[OOQW'#Gf'#GfOsQhO7+%_OsQhO7+%gO<gQhO'#GPO<lQhO7+%oOOOP7+%o7+%oO<tQhO7+%oO<yQhO7+%}OOOP7+%}7+%}OOQW'#Gg'#GgO!]QhO'#EaOsQhO'#EaOOQW'#GS'#GSO=RQhO7+&POOOP7+&P7+&POOOP7+&V7+&VO=aQhO7+&XOOOP7+&X7+&XOOOP7+&[7+&[OOOP7+&`7+&`OOOP7+&b7+&bO=iQ!jO,5;aOOQW'#Gl'#GlOOQW'#Ew'#EwOOQW,5;`,5;`O0nQhO,5;`O>xQ!jO,5;fOOQW'#Gn'#GnOOQW'#E|'#E|OOQW,5;e,5;eO0uQhO,5;eO@XQ!jO,5;jOAzQ!jO,5;oOOQW'#Gr'#GrOOQW'#FV'#FVOOQW,5;n,5;nO0|QhO,5;nOCZQ!jO,5;sO/QQhO,5;vOOQW'#Gt'#GtOOQW'#F]'#F]OOQW,5;u,5;uO1TQhO,5;uO/QQhO,5;zOOQW'#Gv'#GvOOQW'#Fb'#FbOOQW,5;y,5;yO1[QhO,5;yOEPQhO,5<ROFvQ!jO,5<TOHiQ!jO,5<VOJbQ!jO,5<XOLTQ!jO,5<ZOMvQ!jO,5<^OOQW'#HO'#HOOOQW'#Ft'#FtOOQW,5<],5<]O1hQhO,5<]O! VQ!jO,5<bO!!xQ!jO,5<dOOQW-E:R-E:ROOOP7+&d7+&dOOOP1G/`1G/`OOOP1G/i1G/iOOOP1G/n1G/nOOOP1G/x1G/xOOOP1G/}1G/}O!$kQhO,5:oO!$pQhO,5:uOOOP1G0r1G0rOOQW7+$]7+$]OsQhO1G/TO!$uQ!jO7+$fOOOP<<H`<<H`O!$|Q!jO,5<iOOQW-E9{-E9{OOOP<<Hv<<HvO!&xQ!jO<<HyO!'SQ!jO<<IROOQW,5<k,5<kOOQW-E9}-E9}OOOP<<IZ<<IZO!'^QhO<<IZOOOP<<Ii<<IiO!'fQhO,5:{O!'kQ!jO,5:{OOQW-E:Q-E:QOOOP<<Ik<<IkOOOP<<Is<<IsOOQW1G0z1G0zOOQW1G1P1G1POOQW1G1Y1G1YO!)gQhO1G1_OsQhO1G1bOOQW1G1a1G1aOsQhO1G1fOOQW1G1e1G1eO!+ZQhO1G1mO!,}QhO1G1mO!-SQhO1G1oOOQW'#GU'#GUO!.vQhO1G1qO!0mQhO1G1uOOQW1G1w1G1wOOOP1G0Z1G0ZOOOP1G0a1G0aO!2aQ!jO7+$oOOQW<<HQ<<HQOOQW'#Dq'#DqO!4]QhO'#DpOOQW'#GO'#GOO!5vQhOAN>eOOOPAN>eAN>eO!6OQhOAN>mOOOPAN>mAN>mO!6WQhOAN>uOOOPAN>uAN>uOsQhO1G0gOOQW'#Gi'#GiO!]QhO1G0gO!6`Q!jO7+&|O!7rQ!jO7+'QO!9UQhO7+'XOOQW-E:S-E:SO!:xQhO<<HZOsQhO,5:[OOQW-E9|-E9|OOOPG24PG24POOOPG24XG24XOOOPG24aG24aO!<rQ!jO7+&ROOQW7+&R7+&RO!>kQhO<<JhO!?{QhO<<JlO!A]QhO<<JsO!CPQ!jO1G/v",stateData:"!Di~O%OOSUOS~OPROQSO$zPO~O$zPOPWXQWX$yWX~OgeOjiOkiOlfOmgOnhOoiOpiO%RbO~OwkOxjO{lO!PmO!RnO!UoO!ZpO!_qO!brO!jsO!ntO!puO!rvO!uwO!{xO#QyO#SzO#Y{O#[|O#_}O#c!OO#e!PO#g!QO~OPROQSOR!UO$zPO~OPROQSOR!XO$zPO~OPROQSOR![O$zPO~OPROQSOR!_O$zPO~OPROQSOR!bO$zPO~O$|!cO~O${!fO~OPROQSOR!kO$zPO~O]!mOa!uOb!oOc!pOr!qO%T!nO~OX!tO~P%}Oe!vOX%QX]%QXa%QXb%QXc%QXr%QX%T%QXi%QXx%QXu%QX#U%QX#V%QX%S%QXn%QX#j%QX#l%QX#o%QX#s%QX#u%QX#x%QX#|%QX$T%QX$X%QX$[%QX$^%QX$`%QX$b%QX$d%QX$g%QX$k%QX$m%QX#q%QX#z%QX$i%QXf%QX%R%QX#W%QX$Q%QX$V%QX~Or!qOx!zO~PsOx!}O~Ox#TO~Ox#UO~Oo#VO~Ox#WO~Ox#XO~OnhO#V#aO#j#bO#o#eO#s#hO#u#jO#x#lO#|#oO$T#sO$X#vO$[#yO$^#{O$`#}O$b$PO$d$RO$g$TO$k$WO$m$YO~Ox$_O~P*SO$zPOPWXQWXRWX~O}$aO~O!W$cO~O!]$eO~O!g$gO~O!l$iO~O$|!cOT!vX~OT$lO~O${!fOS!|X~OS$oO~O#a$qO~O^$rO~O%R$vO~OX$yOr!qO~O]!mOa!uOb!oOc!pO%T!nO~Oi$|O~P-aOx%OO~P%}Or!qOx%OO~Ox%PO~P-aOx%QO~P-aOx%RO~P-aOx%SO~P-aOu%TOx%VO~P-aO!c%WO~Ot%^Ou%ZOx%]O~Ox%`O~P%}Ou%bOx%fO#U%aO#V#aO~P-aOx%gO~P-aOx%iO~P%}Ox%jO~P-aOx%kO~P-aOx%lO~P-aO#l%nO~P*SO#q%sO~P*SO#z%yO~P*SO$Q&PO~P*SO$V&UO~P*SOo&YO~O$i&`O~P*SOx&gO~P*SOx&hO~Ox&iO~Ox&jO~Ox&kO~Ox&lO~O!x&mO~O#O&nO~Ox&oO~O%S&pO~P-aO]!mO%T!nOX`ia`ic`ir`ii`ix`iu`i#U`i#V`i%S`in`i#j`i#l`i#o`i#s`i#u`i#x`i#|`i$T`i$X`i$[`i$^`i$``i$b`i$d`i$g`i$k`i$m`i#q`i#z`i$i`if`i%R`i#W`i$Q`i$V`i~Ob`i~P2wOX`ir`ii`ix`iu`i#U`i#V`i%S`in`i#j`i#l`i#o`i#s`i#u`i#x`i#|`i$T`i$X`i$[`i$^`i$``i$b`i$d`i$g`i$k`i$m`i#q`i#z`i$i`if`i%R`i#W`i$Q`i$V`i~P-aOt&qOXqarqaxqanqa#Vqa#jqa#oqa#sqa#uqa#xqa#|qa$Tqa$Xqa$[qa$^qa$`qa$bqa$dqa$gqa$kqa$mqa#lqa#qqa#zqa$Qqa$Vqa$iqa~Ob!oO~P2wOXdirdiidixdiudi#Udi#Vdi%Sdindi#jdi#ldi#odi#sdi#udi#xdi#|di$Tdi$Xdi$[di$^di$`di$bdi$ddi$gdi$kdi$mdi#qdi#zdi$idifdi%Rdi#Wdi$Qdi$Vdi~P-aOr!qOx&sO~Ou%TOx&vO~Oo&yO~Ou%ZOx&{O~Oo&|O~Or!qOx&}O~Ou%bOx'RO#U%aO#V#aO~Or!qOx'SO~On#ia#V#ia#j#ia#l#ia#o#ia#s#ia#u#ia#x#ia#|#ia$T#ia$X#ia$[#ia$^#ia$`#ia$b#ia$d#ia$g#ia$k#ia$m#ia~P-aOn#na#V#na#j#na#o#na#q#na#s#na#u#na#x#na#|#na$T#na$X#na$[#na$^#na$`#na$b#na$d#na$g#na$k#na$m#na~P-aOn#rax#ra#V#ra#j#ra#o#ra#s#ra#u#ra#x#ra#|#ra$T#ra$X#ra$[#ra$^#ra$`#ra$b#ra$d#ra$g#ra$k#ra$m#ra#l#ra#q#ra#z#ra$Q#ra$V#ra$i#ra~P-aOn#wa#V#wa#j#wa#o#wa#s#wa#u#wa#x#wa#z#wa#|#wa$T#wa$X#wa$[#wa$^#wa$`#wa$b#wa$d#wa$g#wa$k#wa$m#wa~P-aOu%TOn#{ax#{a#V#{a#j#{a#o#{a#s#{a#u#{a#x#{a#|#{a$T#{a$X#{a$[#{a$^#{a$`#{a$b#{a$d#{a$g#{a$k#{a$m#{a#l#{a#q#{a#z#{a$Q#{a$V#{a$i#{a~P-aOt'^Ou%ZOn$Zax$Za#V$Za#j$Za#o$Za#s$Za#u$Za#x$Za#|$Za$T$Za$X$Za$[$Za$^$Za$`$Za$b$Za$d$Za$g$Za$k$Za$m$Za#l$Za#q$Za#z$Za$Q$Za$V$Za$i$Za~On$]ax$]a#V$]a#j$]a#o$]a#s$]a#u$]a#x$]a#|$]a$T$]a$X$]a$[$]a$^$]a$`$]a$b$]a$d$]a$g$]a$k$]a$m$]a#l$]a#q$]a#z$]a$Q$]a$V$]a$i$]a~P%}Ou%bO#U%aO#V#aOn$_ax$_a#j$_a#o$_a#s$_a#u$_a#x$_a#|$_a$T$_a$X$_a$[$_a$^$_a$`$_a$b$_a$d$_a$g$_a$k$_a$m$_a#l$_a#q$_a#z$_a$Q$_a$V$_a$i$_a~P-aOn$aax$aa#V$aa#j$aa#o$aa#s$aa#u$aa#x$aa#|$aa$T$aa$X$aa$[$aa$^$aa$`$aa$b$aa$d$aa$g$aa$k$aa$m$aa#l$aa#q$aa#z$aa$Q$aa$V$aa$i$aa~P-aOn$cax$ca#V$ca#j$ca#o$ca#s$ca#u$ca#x$ca#|$ca$T$ca$X$ca$[$ca$^$ca$`$ca$b$ca$d$ca$g$ca$k$ca$m$ca#l$ca#q$ca#z$ca$Q$ca$V$ca$i$ca~P%}On$fa#V$fa#j$fa#o$fa#s$fa#u$fa#x$fa#|$fa$T$fa$X$fa$[$fa$^$fa$`$fa$b$fa$d$fa$g$fa$i$fa$k$fa$m$fa~P-aOn$jax$ja#V$ja#j$ja#o$ja#s$ja#u$ja#x$ja#|$ja$T$ja$X$ja$[$ja$^$ja$`$ja$b$ja$d$ja$g$ja$k$ja$m$ja#l$ja#q$ja#z$ja$Q$ja$V$ja$i$ja~P-aOn$lax$la#V$la#j$la#o$la#s$la#u$la#x$la#|$la$T$la$X$la$[$la$^$la$`$la$b$la$d$la$g$la$k$la$m$la#l$la#q$la#z$la$Q$la$V$la$i$la~P-aOx'dO~Ox'eO~Of'gO~P-aOu$qax$qan$qa#V$qa#j$qa#o$qa#s$qa#u$qa#x$qa#|$qa$T$qa$X$qa$[$qa$^$qa$`$qa$b$qa$d$qa$g$qa$k$qa$m$qa#l$qa#q$qa#z$qa$Q$qa$V$qa$i$qaX$qar$qa~P-aOx'lO%R'hO~P-aOx'nO%R'hO~P-aOu%ZOx'pO~Ot'qO~O#W'rOu#Tax#Ta#U#Ta#V#Tan#Ta#j#Ta#o#Ta#s#Ta#u#Ta#x#Ta#|#Ta$T#Ta$X#Ta$[#Ta$^#Ta$`#Ta$b#Ta$d#Ta$g#Ta$k#Ta$m#Ta#l#Ta#q#Ta#z#Ta$Q#Ta$V#Ta$i#Ta~P-aOu%TOn#{ix#{i#V#{i#j#{i#o#{i#s#{i#u#{i#x#{i#|#{i$T#{i$X#{i$[#{i$^#{i$`#{i$b#{i$d#{i$g#{i$k#{i$m#{i#l#{i#q#{i#z#{i$Q#{i$V#{i$i#{i~Ou%ZOn$Zix$Zi#V$Zi#j$Zi#o$Zi#s$Zi#u$Zi#x$Zi#|$Zi$T$Zi$X$Zi$[$Zi$^$Zi$`$Zi$b$Zi$d$Zi$g$Zi$k$Zi$m$Zi#l$Zi#q$Zi#z$Zi$Q$Zi$V$Zi$i$Zi~Oo'vO~Or!qOn$]ix$]i#V$]i#j$]i#o$]i#s$]i#u$]i#x$]i#|$]i$T$]i$X$]i$[$]i$^$]i$`$]i$b$]i$d$]i$g$]i$k$]i$m$]i#l$]i#q$]i#z$]i$Q$]i$V$]i$i$]i~Ou%bO#U%aO#V#aOn$_ix$_i#j$_i#o$_i#s$_i#u$_i#x$_i#|$_i$T$_i$X$_i$[$_i$^$_i$`$_i$b$_i$d$_i$g$_i$k$_i$m$_i#l$_i#q$_i#z$_i$Q$_i$V$_i$i$_i~Or!qOn$cix$ci#V$ci#j$ci#o$ci#s$ci#u$ci#x$ci#|$ci$T$ci$X$ci$[$ci$^$ci$`$ci$b$ci$d$ci$g$ci$k$ci$m$ci#l$ci#q$ci#z$ci$Q$ci$V$ci$i$ci~Ou%TOXqqrqqxqqnqq#Vqq#jqq#oqq#sqq#uqq#xqq#|qq$Tqq$Xqq$[qq$^qq$`qq$bqq$dqq$gqq$kqq$mqq#lqq#qqq#zqq$Qqq$Vqq$iqq~P-aOt'yOx!dX%R!dXn!dX#V!dX#j!dX#o!dX#s!dX#u!dX#x!dX#|!dX$Q!dX$T!dX$X!dX$[!dX$^!dX$`!dX$b!dX$d!dX$g!dX$k!dX$m!dX$V!dX~Ox'{O%R'hO~Ox'|O%R'hO~Ou%ZOx'}O~O%R'hOn$Oq#V$Oq#j$Oq#o$Oq#s$Oq#u$Oq#x$Oq#|$Oq$Q$Oq$T$Oq$X$Oq$[$Oq$^$Oq$`$Oq$b$Oq$d$Oq$g$Oq$k$Oq$m$Oq~P-aO%R'hOn$Sq#V$Sq#j$Sq#o$Sq#s$Sq#u$Sq#x$Sq#|$Sq$T$Sq$V$Sq$X$Sq$[$Sq$^$Sq$`$Sq$b$Sq$d$Sq$g$Sq$k$Sq$m$Sq~P-aOu%ZOn$Zqx$Zq#V$Zq#j$Zq#o$Zq#s$Zq#u$Zq#x$Zq#|$Zq$T$Zq$X$Zq$[$Zq$^$Zq$`$Zq$b$Zq$d$Zq$g$Zq$k$Zq$m$Zq#l$Zq#q$Zq#z$Zq$Q$Zq$V$Zq$i$Zq~Ou%TOXqyrqyxqynqy#Vqy#jqy#oqy#sqy#uqy#xqy#|qy$Tqy$Xqy$[qy$^qy$`qy$bqy$dqy$gqy$kqy$mqy#lqy#qqy#zqy$Qqy$Vqy$iqy~Ou#Tqx#Tq#U#Tq#V#Tqn#Tq#j#Tq#o#Tq#s#Tq#u#Tq#x#Tq#|#Tq$T#Tq$X#Tq$[#Tq$^#Tq$`#Tq$b#Tq$d#Tq$g#Tq$k#Tq$m#Tq#l#Tq#q#Tq#z#Tq$Q#Tq$V#Tq$i#Tq~P-aO%R'hOn$Oy#V$Oy#j$Oy#o$Oy#s$Oy#u$Oy#x$Oy#|$Oy$Q$Oy$T$Oy$X$Oy$[$Oy$^$Oy$`$Oy$b$Oy$d$Oy$g$Oy$k$Oy$m$Oy~O%R'hOn$Sy#V$Sy#j$Sy#o$Sy#s$Sy#u$Sy#x$Sy#|$Sy$T$Sy$V$Sy$X$Sy$[$Sy$^$Sy$`$Sy$b$Sy$d$Sy$g$Sy$k$Sy$m$Sy~Ou%ZOn$Zyx$Zy#V$Zy#j$Zy#o$Zy#s$Zy#u$Zy#x$Zy#|$Zy$T$Zy$X$Zy$[$Zy$^$Zy$`$Zy$b$Zy$d$Zy$g$Zy$k$Zy$m$Zy#l$Zy#q$Zy#z$Zy$Q$Zy$V$Zy$i$Zy~Ox!di%R!din!di#V!di#j!di#o!di#s!di#u!di#x!di#|!di$Q!di$T!di$X!di$[!di$^!di$`!di$b!di$d!di$g!di$k!di$m!di$V!di~P-aO",goto:"@p%uPPPPPPPP%vP%v&W'hPP'h'hPPP'hPPP'hPPPPPPPP(fP(vPP(yPP(y)ZP)kP(yP(yP(y)qP*RP(y*XP*iP(yP(y*oPP+P+Z+eP(y+kP+{P(yP(yP(yP(y,RP,c,fP(y,iP,y,|P(yP(yP-PPPP(yP(yP(y-XP-iP(yP(yP(yP-o.PP.aP-o.gP.wP-oP-oP-o.}P/_P-oP-o/e/uP-o/{P0]P-oP-o-oP-oP-oP-oP-oP-o0cP0sP-oP-oP0y1i2P2o2}3a3s3y4P4V4uPPPPPP4{5]PPP'h'h8P%v9_9k9q:X:[:l:|;Q;b;f;v<W<h<l<|=Q=b=f=v>W>h>x?Y?j?z@O@`m^OTUVWX[`!T!W!Z!^!a!j!vdReklmopqyz{|}!O!P!n!o!p!u!v#c#f#i#m#p#|$O$Q$S$U$X$Z$|%T%X%Y%c&q'X'Z'q'yQ#RrQ#SsQ&O#qQ&T#tQ'O%bR(P's!wiReklmopqyz{|}!O!P!n!o!p!u!v#c#f#i#m#p#|$O$Q$S$U$X$Z$|%T%X%Y%c&q'X'Z'q'ym!rck!s!x!y#Y#]$}%_%h&Z&^'_'bR$w!qm]OTUVWX[`!T!W!Z!^!a!jmTOTUVWX[`!T!W!Z!^!a!jQ!STR$`!TmUOTUVWX[`!T!W!Z!^!a!jQ!VUR$b!WmVOTUVWX[`!T!W!Z!^!a!jQ!YVR$d!ZmWOTUVWX[`!T!W!Z!^!a!ja'j&w&x'k'm't'u(Q(Ra'i&w&x'k'm't'u(Q(RQ!]WR$f!^mXOTUVWX[`!T!W!Z!^!a!jQ!`XR$h!amYOTUVWX[`!T!W!Z!^!a!jR!eYR$k!emZOTUVWX[`!T!W!Z!^!a!jR!hZR$n!hS%d#Z%eT'`&['am[OTUVWX[`!T!W!Z!^!a!jQ!i[R$p!jm$[!Q#d#g#n#r#u$V$^%q%v%|&S&X&cm#d!Q#d#g#n#r#u$V$^%q%v%|&S&X&cQ%p#dR'T%qm#g!Q#d#g#n#r#u$V$^%q%v%|&S&X&cQ%u#gR'U%vm#n!Q#d#g#n#r#u$V$^%q%v%|&S&X&cQ%{#nR'V%|m#r!Q#d#g#n#r#u$V$^%q%v%|&S&X&cQ&R#rR'Y&Sm#u!Q#d#g#n#r#u$V$^%q%v%|&S&X&cQ&W#uR'[&Xm$V!Q#d#g#n#r#u$V$^%q%v%|&S&X&cQ&b$VR'c&cQ`OQ!TTQ!WUQ!ZVQ!^WQ!aXQ!j[_!l`!T!W!Z!^!a!jSQO`SaQ!Ri!RTUVWX[!T!W!Z!^!a!jQ!scQ!yk^$x!s!y$}%_%h'_'bQ$}!xQ%_#YQ%h#]Q'_&ZR'b&^Q%U#QU&u%U'W'xQ'W%}R'x'fQ'k&wQ'm&xW'z'k'm(Q(RQ(Q'tR(R'uQ%[#VW&z%[']'o(SQ']&YQ'o&|R(S'vQ!dYR$j!dQ!gZR$m!gQ%e#ZR'Q%eQ$^!QQ%q#dQ%v#gQ%|#nQ&S#rQ&X#uQ&c$V_&f$^%q%v%|&S&X&cQ'a&[R'w'am_OTUVWX[`!T!W!Z!^!a!jQcRQ!weQ!xkQ!{lQ!|mQ#OoQ#PpQ#QqQ#YyQ#ZzQ#[{Q#]|Q#^}Q#_!OQ#`!PQ$s!nQ$t!oQ$u!pQ$z!uQ${!vQ%m#cQ%r#fQ%w#iQ%x#mQ%}#pQ&Z#|Q&[$OQ&]$QQ&^$SQ&_$UQ&d$XQ&e$ZQ&r$|Q&t%TQ&w%XQ&x%YQ'P%cQ'f&qQ't'XQ'u'ZQ(O'qR(T'y!viReklmopqyz{|}!O!P!n!o!p!u!v#c#f#i#m#p#|$O$Q$S$U$X$Z$|%T%X%Y%c&q'X'Z'q'ym#x!Q#d#g#n#r#u$V$^%q%v%|&S&X&cQ%X#RQ%Y#SQ'X&OR'Z&TX%c#Z%e&['al#q!Q#d#g#n#r#u$V$^%q%v%|&S&X&cX%c#Z%e&['aR's'Pm$]!Q#d#g#n#r#u$V$^%q%v%|&S&X&cm#c!Q#d#g#n#r#u$V$^%q%v%|&S&X&cT%o#d%qm#f!Q#d#g#n#r#u$V$^%q%v%|&S&X&cT%t#g%vm#i!Q#d#g#n#r#u$V$^%q%v%|&S&X&cm#k!Q#d#g#n#r#u$V$^%q%v%|&S&X&cm#m!Q#d#g#n#r#u$V$^%q%v%|&S&X&cT%z#n%|m#p!Q#d#g#n#r#u$V$^%q%v%|&S&X&cT&Q#r&Sm#t!Q#d#g#n#r#u$V$^%q%v%|&S&X&cT&V#u&Xm#w!Q#d#g#n#r#u$V$^%q%v%|&S&X&cm#z!Q#d#g#n#r#u$V$^%q%v%|&S&X&cm#|!Q#d#g#n#r#u$V$^%q%v%|&S&X&cm$O!Q#d#g#n#r#u$V$^%q%v%|&S&X&cm$Q!Q#d#g#n#r#u$V$^%q%v%|&S&X&cm$S!Q#d#g#n#r#u$V$^%q%v%|&S&X&cm$U!Q#d#g#n#r#u$V$^%q%v%|&S&X&cT&a$V&cm$X!Q#d#g#n#r#u$V$^%q%v%|&S&X&cm$Z!Q#d#g#n#r#u$V$^%q%v%|&S&X&c",nodeNames:"⚠ {{ {% {% {% {% InlineComment Template Text }} Interpolation VariableName MemberExpression . PropertyName SubscriptExpression BinaryExpression contains CompareOp LogicOp AssignmentExpression AssignOp ) ( RangeExpression .. BooleanLiteral empty forloop tablerowloop continue StringLiteral NumberLiteral Filter | FilterName : , Tag TagName %} IfDirective Tag if EndTag endif Tag elsif Tag else UnlessDirective Tag unless EndTag endunless CaseDirective Tag case EndTag endcase Tag when ForDirective Tag for in Parameter ParameterName EndTag endfor TableDirective Tag tablerow EndTag endtablerow Tag break Tag continue Tag cycle Comment Tag comment CommentText EndTag endcomment RawDirective Tag raw RawText EndTag endraw Tag echo Tag render RenderParameter with for as Tag include Tag assign CaptureDirective Tag capture EndTag endcapture Tag increment Tag decrement Tag liquid IfDirective Tag if EndTag endif UnlessDirective Tag unless EndTag endunless Tag elsif Tag else CaseDirective Tag case EndTag endcase Tag when ForDirective Tag EndTag endfor TableDirective Tag tablerow EndTag endtablerow Tag break Tag Tag cycle Tag echo Tag render Tag include Tag assign CaptureDirective Tag capture EndTag endcapture Tag increment Tag decrement",maxTerm:220,nodeProps:[["closedBy",1,"}}",-4,2,3,4,5,"%}",23,")"],["openedBy",9,"{{",22,"(",40,"{%"],["group",-13,11,12,15,16,20,24,26,27,28,29,30,31,32,"Expression"]],skippedNodes:[0,6],repeatNodeCount:11,tokenData:")e~RmXY!|YZ!|]^!|pq!|qr#_rs#juv$[wx$gxy%Syz%X{|%^|}&x}!O&}!O!P'Z!Q![&g![!]'k!^!_'p!_!`'x!`!a'p!c!}(Q!}#O(y#P#Q)O#R#S(Q#T#o(Q#p#q)T#q#r)Y%W;'S(Q;'S;:j(s<%lO(Q~#RS%O~XY!|YZ!|]^!|pq!|~#bP!_!`#e~#jOb~~#mUOY#jZr#jrs$Ps;'S#j;'S;=`$U<%lO#j~$UOo~~$XP;=`<%l#j~$_P#q#r$b~$gOx~~$jUOY$gZw$gwx$Px;'S$g;'S;=`$|<%lO$g~%PP;=`<%l$g~%XOg~~%^Of~P%aQ!O!P%g!Q![&gP%jP!Q![%mP%rRpP!Q![%m!g!h%{#X#Y%{P&OR{|&X}!O&X!Q![&_P&[P!Q![&_P&dPpP!Q![&_P&lSpP!O!P%g!Q![&g!g!h%{#X#Y%{~&}Ou~~'QRuv$[!O!P%g!Q![&g~'`Q]S!O!P'f!Q![%m~'kOi~~'pOt~~'uPb~!_!`#e~'}Pe~!_!`#e_(ZW^WwQ%RT}!O(Q!Q![(Q!c!}(Q#R#S(Q#T#o(Q%W;'S(Q;'S;:j(s<%lO(Q_(vP;=`<%l(Q~)OO%T~~)TO%S~~)YOr~~)]P#q#r)`~)eOX~",tokenizers:[F,Y,C,N,0,1,2,3],topRules:{Template:[0,7]},dynamicPrecedences:{190:1,191:1,192:1,194:1,195:1,196:1,197:1,199:1,200:1,201:1,202:1,203:1,204:1,205:1,206:1,207:1,208:1,209:1,210:1,211:1,212:1,213:1,214:1,215:1,216:1,217:1,218:1,219:1,220:1},specialized:[{term:187,get:O=>I[O]||-1},{term:39,get:O=>L[O]||-1}],tokenPrec:0});function l(O,a){return O.split(" ").map(r=>({label:r,type:a}))}const P=l("abs append at_least at_most capitalize ceil compact concat date default divided_by downcase escape escape_once first floor join last lstrip map minus modulo newline_to_br plus prepend remove remove_first replace replace_first reverse round rstrip size slice sort sort_natural split strip strip_html strip_newlines sum times truncate truncatewords uniq upcase url_decode url_encode where","function"),m=l("cycle comment endcomment raw endraw echo increment decrement liquid if elsif else endif unless endunless case endcase for endfor tablerow endtablerow break continue assign capture endcapture render include","keyword"),T=l("empty forloop tablerowloop in with as","keyword"),A=l("first index index0 last length rindex","property"),B=l("col col0 col_first col_last first index index0 last length rindex rindex0 row","property");function M(O){var a;let{state:r,pos:n}=O,$=y(r).resolveInner(n,-1).enterUnfinishedNodesBefore(n),i=((a=$.childBefore(n))===null||a===void 0?void 0:a.name)||$.name;if($.name=="FilterName")return{type:"filter",node:$};if(O.explicit&&i=="|")return{type:"filter"};if($.name=="TagName")return{type:"tag",node:$};if(O.explicit&&i=="{%")return{type:"tag"};if($.name=="PropertyName"&&$.parent.name=="MemberExpression")return{type:"property",node:$,target:$.parent};if($.name=="."&&$.parent.name=="MemberExpression")return{type:"property",target:$.parent};if($.name=="MemberExpression"&&i==".")return{type:"property",target:$};if($.name=="VariableName")return{type:"expression",from:$.from};let e=O.matchBefore(/[\w\u00c0-\uffff]+$/);return e?{type:"expression",from:e.from}:O.explicit&&$.name!="CommentText"&&$.name!="StringLiteral"&&$.name!="NumberLiteral"&&$.name!="InlineComment"?{type:"expression"}:null}function K(O,a,r,n){let $=[];for(;;){let i=a.getChild("Expression");if(!i)return[];if(i.name=="VariableName"||i.name=="forloop"||i.name=="tablerowloop"){let e=O.sliceDoc(i.from,i.to);if(e=="forloop")return $.length?[]:A;if(e=="tablerowloop")return $.length?[]:B;$.unshift(e);break}else if(i.name=="MemberExpression"){let e=i.getChild("PropertyName");e&&$.unshift(O.sliceDoc(e.from,e.to)),a=i}else if(i.name=="SubscriptExpression"){let e=i.getChildren("Expression")[1];$.unshift(e?.name=="StringLiteral"?O.sliceDoc(e.from+1,e.to-1):"[]"),a=i}else return[]}return n?n($,O,r):[]}function J(O={}){let a=O.filters?O.filters.concat(P):P,r=O.tags?O.tags.concat(m):m,n=O.variables?O.variables.concat(T):T,{properties:$}=O;return i=>{var e;let t=M(i);if(!t)return null;let o=(e=t.from)!==null&&e!==void 0?e:t.node?t.node.from:i.pos,s;return t.type=="filter"?s=a:t.type=="tag"?s=r:t.type=="expression"?s=n:s=K(i.state,t.target,i,$),s.length?{options:s,from:o,validFor:/^[\w\u00c0-\uffff]*$/}:null}}const OO=f.inputHandler.of((O,a,r,n)=>n!="%"||a!=r||O.state.doc.sliceString(a-1,r+1)!="{}"?!1:(O.dispatch(O.state.changeByRange($=>({changes:{from:$.from,to:$.to,insert:"%%"},range:p.cursor($.from+1)})),{scrollIntoView:!0,userEvent:"input.type"}),!0));function d(O){return a=>{let r=O.test(a.textAfter);return a.lineIndent(a.node.from)+(r?0:a.unit)}}const $O=h.define({name:"liquid",parser:H.configure({props:[G({"cycle comment endcomment raw endraw echo increment decrement liquid in with as":Q.keyword,"empty forloop tablerowloop":Q.atom,"if elsif else endif unless endunless case endcase for endfor tablerow endtablerow break continue":Q.controlKeyword,"assign capture endcapture":Q.definitionKeyword,contains:Q.operatorKeyword,"render include":Q.moduleKeyword,VariableName:Q.variableName,TagName:Q.tagName,FilterName:Q.function(Q.variableName),PropertyName:Q.propertyName,CompareOp:Q.compareOperator,AssignOp:Q.definitionOperator,LogicOp:Q.logicOperator,NumberLiteral:Q.number,StringLiteral:Q.string,BooleanLiteral:Q.bool,InlineComment:Q.lineComment,CommentText:Q.blockComment,"{% %} {{ }}":Q.brace,"[ ]":Q.bracket,"( )":Q.paren,".":Q.derefOperator,", .. : |":Q.punctuation}),Z.add({Tag:S({closing:"%}"}),"UnlessDirective ForDirective TablerowDirective CaptureDirective":d(/^\s*(\{%-?\s*)?end\w/),IfDirective:d(/^\s*(\{%-?\s*)?(endif|else|elsif)\b/),CaseDirective:d(/^\s*(\{%-?\s*)?(endcase|when)\b/)}),b.add({"UnlessDirective ForDirective TablerowDirective CaptureDirective IfDirective CaseDirective RawDirective Comment"(O){let a=O.firstChild,r=O.lastChild;return!a||a.name!="Tag"?null:{from:a.to,to:r.name=="EndTag"?r.from:O.to}}})]}),languageData:{commentTokens:{line:"#"},indentOnInput:/^\s*{%-?\s*(?:end|elsif|else|when|)$/}}),q=j();function g(O){return $O.configure({wrap:X(a=>a.type.isTop?{parser:O.parser,overlay:r=>r.name=="Text"||r.name=="RawText"}:null)},"liquid")}const aO=g(q.language);function cO(O={}){let a=O.base||q,r=a.language==q.language?aO:g(a.language);return new x(r,[a.support,r.data.of({autocomplete:J(O)}),a.language.data.of({closeBrackets:{brackets:["{"]}}),OO])}export{OO as closePercentBrace,cO as liquid,J as liquidCompletionSource,aO as liquidLanguage};
|