@wonseok-han/confluence-sync 2.0.1 → 2.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/conversion/convert.js +1 -1
- package/dist/documents/anchors.js +1 -1
- package/dist/documents/catalog.js +29 -12
- package/dist/documents/obsidian.js +1 -1
- package/dist/site/assets/app.js +4 -4
- package/dist/site/assets/workspace.worker.js +128 -128
- package/dist/site/index.html +2 -2
- package/dist/sync/diff-links.js +37 -0
- package/dist/sync/diff.js +6 -2
- package/dist/sync/local-state.js +38 -2
- package/dist/sync/prepare.js +23 -27
- package/dist/sync/pull.js +3 -3
- package/dist/sync/push.js +2 -2
- package/dist/sync/reconcile.js +2 -2
- package/dist/sync/render.js +4 -4
- package/dist/sync/staging.js +4 -5
- package/dist/web/assets/app.js +4 -4
- package/dist/web/assets/workspace.worker.js +128 -128
- package/docs/user/CLI.md +2 -0
- package/docs/user/WEB.md +2 -0
- package/package.json +1 -1
package/dist/site/assets/app.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
function et(e,n,i={}){if(i.quiet||e==="/api/sync/job")return null;if(e==="/api/sync/staging")return{label:n?.action==="add"?"\uC5C5\uB85C\uB4DC \uBB38\uC11C\uC5D0 \uD3EC\uD568\uD558\uB294 \uC911":n?.action==="remove"?"\uC5C5\uB85C\uB4DC \uC120\uD0DD\uC744 \uD574\uC81C\uD558\uB294 \uC911":"\uB85C\uCEEC \uBCC0\uACBD\uC744 \uD655\uC778\uD558\uB294 \uC911",background:!!i.background,button:n?.action?n.paths?.length===1?null:n.action==="add"?"sync-stage-add":"sync-stage-remove":"sync-stage-scan",region:"sync-stage-list"};let c={"/api/sync/config":["\uC5F0\uACB0 \uC124\uC815\uC744 \uD655\uC778\uD558\uB294 \uC911","sync-load","sync-env-body"],"/api/sync/connect":["\uC2A4\uD398\uC774\uC2A4\uC5D0 \uC5F0\uACB0\uD558\uB294 \uC911","sync-connect","sync-env-body"],"/api/sync/env/import":[".env\uB97C \uC77D\uB294 \uC911","sync-env-choose","sync-env-body"],"/api/sync/env/save":[".env \uC800\uC7A5\uC744 \uD655\uC778\uD558\uB294 \uC911","sync-env-save","sync-env-body"],"/api/sync/fetch":["\uC6D0\uACA9 \uBCC0\uACBD\uC744 \uD655\uC778\uD558\uB294 \uC911","sync-fetch","sync-view"],"/api/sync/restore":["\uC6D0\uACA9 \uBCF5\uAD6C \uB300\uC0C1\uC744 \uD655\uC778\uD558\uB294 \uC911",void 0,"sync-view"],"/api/sync/pull":["Confluence\uC5D0\uC11C \uAC00\uC838\uC624\uB294 \uC911","sync-pull-remote","sync-view"],"/api/sync/preview":["\uC5C5\uB85C\uB4DC \uBBF8\uB9AC\uBCF4\uAE30\uB97C \uACC4\uC0B0\uD558\uB294 \uC911","sync-preview","sync-view"],"/api/sync/push":["Confluence\uC5D0 \uC5C5\uB85C\uB4DC\uD558\uB294 \uC911","sync-push","sync-view"],"/api/sync/diff":[n?.remote?"\uC6D0\uACA9 \uBCF8\uBB38\uC744 \uBE44\uAD50\uD558\uB294 \uC911":"\uC800\uC7A5\uB41C \uAE30\uC900\uBCF8\uC744 \uBE44\uAD50\uD558\uB294 \uC911","sync-diff-remote","sync-diff-dialog"],"/api/document-preview":["\uBB38\uC11C \uBBF8\uB9AC\uBCF4\uAE30\uB97C \uB9CC\uB4DC\uB294 \uC911","document-preview-refresh","document-preview-panel"],"/api/document-format/preview":["\uBB38\uC11C \uC11C\uC2DD\uC744 \uBE44\uAD50\uD558\uB294 \uC911",n?.basic?"document-format-basic":"document-format-review","document-preview-panel"],"/api/table-format/preview":["\uD45C \uC11C\uC2DD\uC744 \uBE44\uAD50\uD558\uB294 \uC911","document-format-review","document-preview-panel"],"/api/table-format/save":["\uBB38\uC11C \uC11C\uC2DD\uC744 \uC800\uC7A5\uD558\uB294 \uC911","table-save","table-review-dialog"],"/api/convert":[n?.preview?"\uBCC0\uD658 \uBBF8\uB9AC\uBCF4\uAE30\uB97C \uB9CC\uB4DC\uB294 \uC911":"\uBB38\uC11C\uC640 \uCCA8\uBD80\uB97C \uBCC0\uD658\uD558\uB294 \uC911",n?.preview?"preview":"save","convert-view"],"/api/pick-folder":["\uC2DC\uC2A4\uD15C \uCC3D\uC5D0\uC11C \uD3F4\uB354\uB97C \uC120\uD0DD\uD574 \uC8FC\uC138\uC694",n?.kind==="reference"?"sync-add-reference":n?.kind==="out"?"choose-out":"choose-base",null],"/api/open":["\uACB0\uACFC \uD3F4\uB354\uB97C \uC5EC\uB294 \uC911","open",null]};if(e.startsWith("/api/search"))return{label:"\uBB38\uC11C\uB97C \uAC80\uC0C9\uD558\uB294 \uC911",region:"files"};let[f,d,t]=c[e]??["\uBB38\uC11C \uD3F4\uB354\uB97C \uBD88\uB7EC\uC624\uB294 \uC911",null,"files"];return{label:f,button:d,region:t}}function tt({get:e=i=>document.getElementById(i),now:n=()=>Date.now()}={}){let i=new Map,c=new Map,f=0,d,t=e("activity-panel");function o(p,w){let x=p&&e(p);if(!x)return;let v=c.get(x);w>0?(v||(v={count:0,busy:x.getAttribute("aria-busy")},c.set(x,v)),v.count++,x.setAttribute("aria-busy","true"),x.classList.add("is-loading")):v&&--v.count===0&&(v.busy===null?x.removeAttribute("aria-busy"):x.setAttribute("aria-busy",v.busy),x.classList.remove("is-loading"),c.delete(x))}function g(p){let w=Math.max(0,Math.floor((n()-p.startedAt)/1e3));return w<60?`${w}\uCD08 \uACBD\uACFC`:`${Math.floor(w/60)}\uBD84 ${w%60}\uCD08 \uACBD\uACFC`}function s(){let p=[...i.values()].filter(w=>!w.background).at(-1);p&&t&&(e("activity-elapsed").textContent=g(p))}function m(){let p=[...i.values()].filter(x=>!x.background).at(-1);t&&(t.hidden=!p,p&&(e("activity-title").textContent=p.label,e("activity-detail").textContent=p.detail||"\uCC98\uB9AC\uAC00 \uB05D\uB098\uBA74 \uACB0\uACFC\uB97C \uD45C\uC2DC\uD569\uB2C8\uB2E4.",t.classList.toggle("is-uncertain",p.uncertain===!0),e("activity-link").hidden=!p.link,p.link&&e("activity-link").setAttribute("href",p.link)));let w=e("sync-stage-checking");if(w){let x=[...i.values()].some(v=>v.background&&v.visible);w.classList.toggle("is-checking",x),w.setAttribute("aria-hidden",String(!x))}p&&!d&&(d=setInterval(s,1e3)),!p&&d&&(clearInterval(d),d=void 0),s()}function y(p){let w=++f,x=Date.parse(p.startedAt),v={...p,startedAt:Number.isFinite(x)?x:n(),visible:!1};return i.set(w,v),v.background?v.delay=setTimeout(()=>{i.has(w)&&(v.visible=!0,m())},350):(o(v.button,1),o(v.region,1)),m(),{update(b){if(!i.has(w))return;let M=Date.parse(b.startedAt);Object.assign(v,b,{startedAt:Number.isFinite(M)?M:v.startedAt}),m()},end(){i.delete(w)&&(clearTimeout(v.delay),v.background||(o(v.button,-1),o(v.region,-1)),m())}}}return{begin:y}}var ze=async e=>Array.from(new Uint8Array(await crypto.subtle.digest("SHA-256",e))).map(n=>n.toString(16).padStart(2,"0")).join(""),Nt=e=>!e.split("/").some((n,i)=>n==="node_modules"||n===".git"||n.startsWith(".")&&!(i===0&&[".csync",".env",".confluence-sync.json",".confluence-workspace.json",".confluence-syncignore"].includes(n)));function Je(e,n){let i=e.find(f=>n.startsWith(f.virtual+"/"));if(!i)throw Error("\uC120\uD0DD\uD55C \uD3F4\uB354 \uBC16\uC758 \uD30C\uC77C\uC785\uB2C8\uB2E4.");let c=n.slice(i.virtual.length+1).split("/");if(c.some(f=>!f||f==="."||f===".."||f.includes("\\")))throw Error("\uC798\uBABB\uB41C \uD30C\uC77C \uACBD\uB85C\uC785\uB2C8\uB2E4.");return{mount:i,parts:c}}async function He(e,n,i=!1){let{mount:c,parts:f}=Je(e,n),d=c.handle;for(let t of f.slice(0,-1))d=await d.getDirectoryHandle(t,{create:i});return{directory:d,name:f.at(-1),handle:await d.getFileHandle(f.at(-1),{create:i})}}var Rt=e=>e.name==="NotFoundError";async function We(e,n){try{return new Uint8Array(await(await(await He(e,n)).handle.getFile()).arrayBuffer())}catch(i){if(Rt(i))return null;throw i}}async function nt(e,n,i){let{handle:c}=await He(e,n,!0),f=await c.createWritable();try{await f.write(i),await f.close()}catch(d){throw await f.abort().catch(()=>{}),d}}async function ot(e,n){let{directory:i,name:c}=await He(e,n);await i.removeEntry(c)}async function Ft(e,n=new Map,i=!1){let c=[],f=0;async function d(t,o,g=[]){for await(let[s,m]of o.entries()){let y=[...g,s].join("/");if(t.readonly&&y===".env"||!Nt(y))continue;if(m.kind==="directory"){await d(t,m,[...g,s]);continue}let p=await m.getFile();if(f+=p.size,p.size>104857600||f>536870912||c.length>=2e4)throw Error("\uC791\uC5C5\uACF5\uAC04 \uD55C\uB3C4\uB97C \uCD08\uACFC\uD588\uC2B5\uB2C8\uB2E4(\uD30C\uC77C 100MiB, \uC804\uCCB4 512MiB, 20,000\uAC1C).");let w=t.virtual+"/"+y,x=`${p.size}:${p.lastModified}`,v=n.get(w),b=!i&&v?.stamp===x?v.hash:await ze(await p.arrayBuffer());n.set(w,{stamp:x,hash:b}),c.push({path:w,size:p.size,hash:b,file:p})}}for(let t of e)await d(t,t.handle);return c.sort((t,o)=>t.path<o.path?-1:t.path>o.path?1:0)}async function Dt(e,n,i,c){let f=new Map(n.map(o=>[o.path,o.hash])),d=[],t=[...i.files.map(o=>({...o,remove:!1})),...i.removed.map(o=>({path:o,remove:!0}))];t.sort((o,g)=>(o.path.includes("/.csync/")?3:o.path.endsWith(".md")?2:1)-(g.path.includes("/.csync/")?3:g.path.endsWith(".md")?2:1));for(let o of t){let{mount:g}=Je(e,o.path);if(g.readonly)throw Error("\uCC38\uC870 \uD3F4\uB354\uB294 \uC218\uC815\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.");let s=await We(e,o.path),m=s?await ze(s):void 0;if(!o.remove&&m===o.hash||o.remove&&!s){o.skip=!0;continue}if(m!==f.get(o.path))throw Error(`\uC791\uC5C5 \uC911 \uB85C\uCEEC \uD30C\uC77C\uC774 \uBC14\uB00C\uC5C8\uC2B5\uB2C8\uB2E4: ${o.path}`);if(o.before=s,o.beforeHash=m,!o.remove&&(o.bytes=new Uint8Array(await c(o.path)),await ze(o.bytes)!==o.hash))throw Error("\uACB0\uACFC \uD30C\uC77C\uC774 \uBC14\uB00C\uC5C8\uC2B5\uB2C8\uB2E4. \uB2E4\uC2DC \uC2DC\uB3C4\uD558\uC138\uC694.")}try{for(let o of t){if(o.skip)continue;let g=await We(e,o.path);if((g?await ze(g):void 0)!==o.beforeHash)throw Error(`\uC800\uC7A5 \uC9C1\uC804 \uB85C\uCEEC \uD30C\uC77C\uC774 \uBC14\uB00C\uC5C8\uC2B5\uB2C8\uB2E4: ${o.path}`);d.push(o),o.remove?g&&await ot(e,o.path):await nt(e,o.path,o.bytes)}}catch(o){let g=[];for(let s of d.reverse())try{let m=await We(e,s.path),y=m?await ze(m):void 0;if(y===s.beforeHash)continue;if(y!==(s.remove?void 0:s.hash)){g.push(s.path);continue}s.before?await nt(e,s.path,s.before):m&&await ot(e,s.path)}catch{g.push(s.path)}throw g.length?Error(`${o.message} \uCD94\uAC00 \uD3B8\uC9D1 \uB610\uB294 \uBCF5\uC6D0 \uC2E4\uD328\uB85C \uD655\uC778\uC774 \uD544\uC694\uD55C \uD30C\uC77C: ${g.join(", ")}`):o}for(let o of i.removed){let{mount:g,parts:s}=Je(e,o);for(s.pop();s.length;)try{let m=g.handle;for(let w of s.slice(0,-1))m=await m.getDirectoryHandle(w);let y=await m.getDirectoryHandle(s.at(-1)),p=!0;for await(let w of y.entries()){p=!1;break}if(!p)break;await m.removeEntry(s.at(-1)),s.pop()}catch{break}}}function Bt(){return new Promise((e,n)=>{let i=indexedDB.open("csync.browser-folders",1);i.onupgradeneeded=()=>i.result.createObjectStore("workspace"),i.onsuccess=()=>e(i.result),i.onerror=()=>n(i.error)})}async function qt(e,n="active"){let i=await Bt();try{return await new Promise((c,f)=>{let d=i.transaction("workspace",e===void 0?"readonly":"readwrite"),t=d.objectStore("workspace"),o=e===void 0?t.get(n):e===null?t.delete(n):t.put(e,n),g;o.onsuccess=()=>{g=o.result},d.oncomplete=()=>c(g),d.onerror=()=>f(d.error)})}finally{i.close()}}function je({document:e=globalThis.document,window:n=globalThis.window,location:i=globalThis.location,storage:c=globalThis.sessionStorage,fetch:f=globalThis.fetch,remember:d=qt,pickDirectory:t=o=>n.showDirectoryPicker(o)}={}){let o=a=>e.getElementById(a),g=o("browser-folder-dialog"),s=o("browser-folder-status"),m=o("browser-apply-dialog"),y,p=[],w=[],x=!1,v=Promise.resolve(),b=new Map,M,I=!1,A=new Promise(a=>{M=a}),T="csync.browser-session.v1",F=a=>{let h=v.catch(()=>{}).then(a);return v=h,h},L=async()=>{c.setItem(T,JSON.stringify(y)),await d({mounts:p,baseline:w},y.id)},W=async(a,h=!1)=>{let E=h?"read":"readwrite";if(await a.queryPermission({mode:E})!=="granted"&&await a.requestPermission({mode:E})!=="granted")throw Error("\uC120\uD0DD\uD55C \uD3F4\uB354\uC758 \uC77D\uAE30\xB7\uC4F0\uAE30 \uAD8C\uD55C\uC744 \uD5C8\uC6A9\uD558\uC138\uC694.")};async function O(a,h,E=h?"POST":"GET"){let l=await f(a,{method:E,credentials:"omit",headers:{...y?{"X-Csync-Session":y.id,"X-Csync-Token":y.token}:{},...h?{"Content-Type":"application/json"}:{}},...h?{body:JSON.stringify(h)}:{}}),S=await l.json();if(!l.ok)throw Object.assign(Error(S.error||"\uC791\uC5C5 \uC694\uCCAD\uC5D0 \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4."),{code:S.code,status:l.status,conflicts:S.conflicts,inPlace:S.inPlace,output:S.output});return S}let H=()=>({"X-Csync-Session":y.id,"X-Csync-Token":y.token});async function V(){let a=await O("/api/browser/changes");if(!(!a.files.length&&!a.removed.length))try{I=!0,await Dt(p,w,a,async h=>{let E=await f("/api/browser/file?path="+encodeURIComponent(h),{headers:H(),credentials:"omit"});if(!E.ok)throw Error("\uACB0\uACFC \uD30C\uC77C\uC744 \uBC1B\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4.");return E.arrayBuffer()}),await O("/api/browser/ack",{files:a.snapshot}),w=a.snapshot,b.clear(),await L(),I=!1,m.close()}catch(h){throw o("browser-apply-status").textContent=h.message,m.open||m.showModal(),h}}o("browser-apply-retry").onclick=async()=>{if(!x)try{for(let a of p)a.readonly||await W(a.handle);await F(V)}catch(a){o("browser-apply-status").textContent=a.message}},m.addEventListener("cancel",a=>a.preventDefault());async function $(a=!1){if(I)throw Error("\uBCF4\uB958 \uC911\uC778 \uB85C\uCEEC \uD30C\uC77C \uC801\uC6A9\uC744 \uBA3C\uC800 \uC644\uB8CC\uD558\uC138\uC694.");await V();let h=await Ft(p,b,a),E=h.map(({path:S,size:P,hash:r})=>({path:S,size:P,hash:r}));if(JSON.stringify(E)===JSON.stringify(w))return;let l=await O("/api/browser/mirror",{files:E});for(let S of l.uploads){let P=h.find(z=>z.path===S.path),r=await f("/api/browser/file?path="+encodeURIComponent(S.path),{method:"PUT",headers:H(),credentials:"omit",body:P.file});if(!r.ok){let z=await r.json();throw Error(z.error||"\uD30C\uC77C \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4.")}}await O("/api/browser/commit",{}),w=E,await L()}let j=()=>{o("workspace-interface").inert=!1,o("local-connection-status").textContent=p[0].handle.name+" \xB7 \uBE0C\uB77C\uC6B0\uC800 \uD3F4\uB354",g.close(),M()},ae=async()=>{await $(),j()},te=async()=>{x=(await O("/api/sync/job")).job?.state==="running",x?j():await ae()};async function Z(a){if(x||I)throw Error("\uC9C4\uD589 \uC911\uC778 \uC791\uC5C5\uC744 \uBA3C\uC800 \uC644\uB8CC\uD558\uC138\uC694.");o("browser-folder-open").disabled=!0,s.textContent="\uC120\uD0DD\uD55C \uBB38\uC11C\xB7\uCCA8\uBD80\uB97C \uC784\uC2DC \uC791\uC5C5\uACF5\uAC04\uC5D0 \uC900\uBE44\uD558\uB294 \uC911\u2026";try{return y&&(await V(),await O("/api/browser/session",void 0,"DELETE"),await d(null,y.id)),y=await O("/api/browser/session",{name:a.name}),p=[{virtual:y.base,handle:a}],w=[],b.clear(),await L(),await ae(),{path:y.base}}finally{o("browser-folder-open").disabled=!1}}let pe=async(a,h)=>{if(x||I)throw Error("\uC9C4\uD589 \uC911\uC778 \uC791\uC5C5\uC744 \uBA3C\uC800 \uC644\uB8CC\uD558\uC138\uC694.");if(a==="out"&&await p[0].handle.isSameEntry(h))return{path:y.base};for(let l of p)if(!(a==="out"&&l.virtual===y.output)){if(a==="reference"&&l.readonly&&await l.handle.isSameEntry(h))return{path:l.virtual};if(await l.handle.isSameEntry(h)||await l.handle.resolve(h)!==null||await h.resolve(l.handle)!==null)throw Error("\uBB38\uC11C\xB7\uCD9C\uB825\xB7\uCC38\uC870 \uD3F4\uB354\uB294 \uC11C\uB85C \uACB9\uCE58\uC9C0 \uC54A\uB294 \uBCC4\uB3C4 \uD3F4\uB354\uB85C \uC120\uD0DD\uD558\uC138\uC694.")}let E=a==="out"?y.output:(await O("/api/browser/mount",{kind:"reference"})).path;return p=p.filter(l=>l.virtual!==E),p.push({virtual:E,handle:h,readonly:a==="reference"}),await L(),await $(),{path:E}},Q=async a=>{let h=a==="base"?p[0]:a==="out"?p.find(l=>l.virtual===o("out-input").dataset?.path)||p.find(l=>l.virtual===y?.output)||p[0]:p.filter(l=>l.readonly).at(-1)||p[0],E=await t({id:"csync-"+a,mode:a==="reference"?"read":"readwrite",...h?{startIn:h.handle}:{}});return await W(E,a==="reference"),F(()=>a==="base"?Z(E):pe(a,E))};async function C(a,h){if(I)throw Error("\uBCF4\uB958 \uC911\uC778 \uB85C\uCEEC \uD30C\uC77C \uC801\uC6A9\uC744 \uBA3C\uC800 \uC644\uB8CC\uD558\uC138\uC694.");let E=a.split("?")[0],l=h.body?JSON.parse(h.body):void 0;if(E==="/api/open")return{ok:!0,name:(l.path?.startsWith(y.base)?p[0]:p.find(P=>P.virtual===y.output))?.handle.name??"\uCD9C\uB825 \uD3F4\uB354"};if(E==="/api/convert"&&!l.preview&&l.out!==l.base&&!p.some(P=>P.virtual===y.output))throw Error("\uBCC0\uD658 \uACB0\uACFC\uB97C \uC800\uC7A5\uD560 \uCD9C\uB825 \uD3F4\uB354\uB97C \uBA3C\uC800 \uC120\uD0DD\uD558\uC138\uC694.");E!=="/api/sync/job"&&!x&&await $(E!=="/api/sync/staging");let S;try{S=await O(a,l,h.method??(l?"POST":"GET"))}catch(P){throw x||await V(),P}return S.job&&(x=S.job.state==="running"),x||await V(),S}let k=(a,h={})=>{if(a==="/api/pick-folder"){let{kind:l}=JSON.parse(h.body);return(async()=>{if(x||I)throw Error("\uC9C4\uD589 \uC911\uC778 \uC791\uC5C5\uC744 \uBA3C\uC800 \uC644\uB8CC\uD558\uC138\uC694.");return l==="base"?new Response(JSON.stringify(await Q("base"))):new Response(JSON.stringify(await Q(l)))})()}return F(()=>C(a,h)).then(l=>new Response(JSON.stringify(l))).catch(l=>new Response(JSON.stringify({error:l.message,code:l.code,conflicts:l.conflicts,inPlace:l.inPlace,output:l.output}),{status:l.status??400}))};o("local-disconnect").hidden=!1,o("local-disconnect").textContent="\uD3F4\uB354 \uC5F0\uACB0 \uD574\uC81C",o("local-disconnect").onclick=()=>F(async()=>{try{if(x||I)throw Error("\uC791\uC5C5\uACFC \uB85C\uCEEC \uD30C\uC77C \uC801\uC6A9\uC744 \uBA3C\uC800 \uC644\uB8CC\uD558\uC138\uC694.");y&&(await O("/api/browser/session",void 0,"DELETE"),await d(null,y.id)),c.removeItem(T),i.reload()}catch(a){s.textContent=a.message,g.showModal()}});let R=o("out-mode-hint");return R&&(R.textContent="\uBCC4\uB3C4 \uD3F4\uB354 \uB610\uB294 \uC6D0\uBCF8 \uB36E\uC5B4\uC4F0\uAE30"),o("workspace-interface").inert=!0,g.addEventListener("cancel",a=>a.preventDefault()),o("root-path-editor").hidden=!0,o("out-input").readOnly=!0,o("out-input").placeholder="\uBE0C\uB77C\uC6B0\uC800\uC5D0\uC11C \uCD9C\uB825 \uD3F4\uB354\uB97C \uC120\uD0DD\uD558\uC138\uC694",o("open").textContent="\uC800\uC7A5 \uC704\uCE58 \uD655\uC778",o("browser-folder-open").onclick=()=>Q("base").catch(a=>{a.name!=="AbortError"&&(s.textContent=a.message)}),o("browser-folder-resume").onclick=async()=>{try{for(let a of p)await W(a.handle,a.readonly);await F(te)}catch(a){s.textContent=a.message}},n.addEventListener("beforeunload",a=>{(x||I)&&(a.preventDefault(),a.returnValue="")}),!n.isSecureContext||!n.showDirectoryPicker?(s.textContent="\uD3F4\uB354 \uC77D\uAE30\xB7\uC4F0\uAE30\uB97C \uC9C0\uC6D0\uD558\uB294 \uB370\uC2A4\uD06C\uD1B1 Chrome \uB610\uB294 Edge\uC5D0\uC11C HTTPS \uC8FC\uC18C\uB85C \uC811\uC18D\uD558\uC138\uC694.",o("browser-folder-open").disabled=!0,g.showModal()):(o("local-connection-status").textContent="\uC800\uC7A5\uB41C \uD3F4\uB354 \uC5F0\uACB0\uC744 \uD655\uC778\uD558\uB294 \uC911\u2026",F(async()=>{let a;try{y=JSON.parse(c.getItem(T)),a=y?await d(void 0,y.id):void 0}catch{s.textContent="\uC800\uC7A5\uB41C \uD3F4\uB354 \uC5F0\uACB0 \uC815\uBCF4\uB97C \uD655\uC778\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. \uD3F4\uB354\uB97C \uB2E4\uC2DC \uC120\uD0DD\uD558\uC138\uC694."}if(!y||!a?.mounts?.length){o("local-connection-status").textContent="\uBE0C\uB77C\uC6B0\uC800 \uD3F4\uB354 \uC120\uD0DD \uD544\uC694",g.showModal();return}p=a.mounts,w=a.baseline??[];let h=!0;for(let E of p)await E.handle.queryPermission({mode:E.readonly?"read":"readwrite"})!=="granted"&&(h=!1);if(!h){o("local-connection-status").textContent="\uD3F4\uB354 \uC811\uADFC \uAD8C\uD55C \uD655\uC778 \uD544\uC694",o("browser-folder-resume").hidden=!1,s.textContent="\uC774\uC804\uC5D0 \uC120\uD0DD\uD55C \uD3F4\uB354\uAC00 \uC800\uC7A5\uB418\uC5B4 \uC788\uC2B5\uB2C8\uB2E4. \uB2E4\uC2DC \uC120\uD0DD\uD560 \uD544\uC694 \uC5C6\uC774 \uC811\uADFC \uAD8C\uD55C\uC744 \uD5C8\uC6A9\uD558\uC138\uC694.",g.showModal();return}o("local-connection-status").textContent=p[0].handle.name+" \xB7 \uC5F0\uACB0\uC744 \uBCF5\uC6D0\uD558\uB294 \uC911\u2026";try{await te()}catch(E){[401,410].includes(E.status)?(await d(null,y.id),y=void 0,w=[],c.removeItem(T),s.textContent="\uC791\uC5C5\uACF5\uAC04\uC744 \uB2E4\uC2DC \uC5F0\uACB0\uD574\uC57C \uD569\uB2C8\uB2E4. \uD3F4\uB354\uB97C \uB2E4\uC2DC \uC120\uD0DD\uD558\uC138\uC694."):s.textContent="\uC774\uC804 \uD3F4\uB354 \uC5F0\uACB0\uC744 \uBCF5\uC6D0\uD558\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4: "+E.message,o("local-connection-status").textContent="\uD3F4\uB354 \uC5F0\uACB0 \uD655\uC778 \uD544\uC694",g.showModal()}}).catch(a=>{s.textContent=a.message,o("local-connection-status").textContent="\uD3F4\uB354 \uC5F0\uACB0 \uD655\uC778 \uD544\uC694",g.showModal()})),{ready:A,request:k,browser:!0,remote:!1,folderName:a=>p.find(h=>h.virtual===a)?.handle.name??""}}async function at({bytes:e,pages:n,dryRun:i}){let{getDocument:c,GlobalWorkerOptions:f,VerbosityLevel:d}=await import("./chunks/pdf-DDN7TXTP.js");f.workerSrc="/assets/pdf.worker.min.mjs";let t=c({data:e,cMapUrl:"/assets/pdf/cmaps/",cMapPacked:!0,standardFontDataUrl:"/assets/pdf/standard_fonts/",wasmUrl:"/assets/pdf/wasm/",useSystemFonts:!1,verbosity:d.ERRORS});try{let o=await t.promise;for(let s of n)if(!Number.isInteger(s)||s<1||s>o.numPages)throw Error(`PDF \uCABD \uBC94\uC704 \uCD08\uACFC: ${s} (\uCD1D ${o.numPages}\uCABD)`);if(i)return[];let g=[];for(let s of n){let m=await o.getPage(s),y=m.getViewport({scale:160/72}),p=document.createElement("canvas");p.width=Math.ceil(y.width),p.height=Math.ceil(y.height);try{await m.render({canvas:p,canvasContext:p.getContext("2d"),viewport:y}).promise;let w=await new Promise((x,v)=>p.toBlob(b=>b?x(b):v(Error("PDF \uC774\uBBF8\uC9C0\uB97C \uC800\uC7A5\uD558\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4.")),"image/png"));g.push(await w.arrayBuffer())}finally{m.cleanup(),p.width=p.height=1}}return g}finally{await t.destroy()}}function rt({worker:e=new Worker("/assets/workspace.worker.js",{type:"module"}),timeoutMs:n=18e4}={}){let i=0,c=!1,f=new Map,d=t=>{c=!0;for(let o of f.values())clearTimeout(o.timer),o.reject(Error(t));f.clear()};return e.addEventListener("error",()=>d("\uBE0C\uB77C\uC6B0\uC800 \uC2E4\uD589\uAE30\uB97C \uC2DC\uC791\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. \uD398\uC774\uC9C0\uB97C \uC0C8\uB85C\uACE0\uCE68\uD558\uC138\uC694.")),e.addEventListener("message",async({data:t})=>{if(t.kind==="pdf"){try{let g=await at(t.request);e.postMessage({kind:"pdf-result",id:t.id,pages:g},g)}catch(g){e.postMessage({kind:"pdf-result",id:t.id,error:g.message})}return}let o=f.get(t.id);o&&(f.delete(t.id),clearTimeout(o.timer),t.error?o.reject(Error(t.error)):o.resolve(new Response(t.body,{status:t.status,headers:t.headers})))}),async(t,o={})=>{if(c)throw Error("\uBE0C\uB77C\uC6B0\uC800 \uC2E4\uD589\uAE30\uAC00 \uC911\uB2E8\uB418\uC5C8\uC2B5\uB2C8\uB2E4. \uD398\uC774\uC9C0\uB97C \uC0C8\uB85C\uACE0\uCE68\uD558\uC138\uC694.");let g=new URL(t,"https://local.invalid");if(g.origin!=="https://local.invalid"||!g.pathname.startsWith("/api/"))throw Error("\uC798\uBABB\uB41C \uBE0C\uB77C\uC6B0\uC800 \uC694\uCCAD\uC785\uB2C8\uB2E4.");let s=o.body;s instanceof Blob&&(s=await s.arrayBuffer());let m=++i;return new Promise((y,p)=>{let w=setTimeout(()=>{f.delete(m),p(Error("\uBE0C\uB77C\uC6B0\uC800 \uC694\uCCAD\uC774 \uC9C0\uC5F0\uB418\uACE0 \uC788\uC2B5\uB2C8\uB2E4. \uC791\uC5C5 \uB0B4\uC5ED\uC744 \uD655\uC778\uD55C \uD6C4 \uB2E4\uC2DC \uC2DC\uB3C4\uD558\uC138\uC694."))},n);f.set(m,{resolve:y,reject:p,timer:w}),e.postMessage({id:m,path:t,method:o.method??"GET",headers:Object.fromEntries(new Headers(o.headers)),body:s},s instanceof ArrayBuffer?[s]:[])})}}function Ut(e){let n=new URL(e);if(n.protocol!=="http:"||!["127.0.0.1","localhost","[::1]"].includes(n.hostname)||n.username||n.password||n.pathname!=="/"||n.search||n.hash)throw new Error("\uB85C\uCEEC \uC2E4\uD589\uAE30 \uC8FC\uC18C\uB294 http://127.0.0.1:\uD3EC\uD2B8 \uD615\uC2DD\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4.");return n.origin}function it({document:e=globalThis.document,location:n=globalThis.location,history:i=globalThis.history,storage:c=globalThis.sessionStorage,fetch:f=globalThis.fetch}={}){let d=new URLSearchParams(n.hash?.slice(1)).has("csyncEndpoint")||c?.getItem("csync.connector.v1");if(e.querySelector('meta[name="csync-runtime"]')?.content==="standalone"&&!d)return{...je({fetch:rt()}),standalone:!0};if(e.querySelector('meta[name="csync-runtime"]')?.content==="browser")return je();let t=L=>e.getElementById(L),o=e.querySelector('meta[name="csync-token"]').content,g=o?{endpoint:"",token:o}:null,s,m=g?Promise.resolve():new Promise(L=>{s=L}),y="csync.connector.v1",p=(L,W={})=>{if(!g)throw new Error("\uBA3C\uC800 \uB85C\uCEEC \uC2E4\uD589\uAE30\uB97C \uC5F0\uACB0\uD558\uC138\uC694.");if(!L.startsWith("/api/")||L.startsWith("//"))throw new Error("\uB85C\uCEEC API \uACBD\uB85C\uB97C \uD655\uC778\uD558\uC138\uC694.");return f(g.endpoint+L,{...W,headers:{...W.headers,"X-Csync-Token":g.token},credentials:"omit",redirect:"error",...g.endpoint?{targetAddressSpace:"loopback"}:{}})},w=()=>{try{c.removeItem(y)}catch{}g=null,n.reload()};if(t("local-disconnect").onclick=w,g)return{ready:m,request:p,remote:!1};t("local-disconnect").hidden=!1;let x=t("local-connect-dialog"),v=t("local-connect-form"),b=t("local-connect-note");t("local-connect-command").textContent=`csync web --ui ${JSON.stringify(n.origin+n.pathname)} --base "/\uBB38\uC11C\uD3F4\uB354"`;let M=!1;async function I(L,W){if(!M){M=!0,t("local-connect-submit").disabled=!0,b.textContent="\uB85C\uCEEC \uC2E4\uD589\uAE30\uC5D0 \uC5F0\uACB0\uD558\uB294 \uC911\u2026";try{if(L=Ut(L),!/^[a-f0-9]{64}$/.test(W))throw new Error("csync\uAC00 \uCD9C\uB825\uD55C \uC5F0\uACB0 \uB9C1\uD06C\uB97C \uC0AC\uC6A9\uD558\uAC70\uB098 \uC5F0\uACB0 \uD0A4\uB97C \uC785\uB825\uD558\uC138\uC694.");let O=await f(L+"/api/connection",{headers:{"X-Csync-Token":W},credentials:"omit",redirect:"error",targetAddressSpace:"loopback",signal:AbortSignal.timeout(15e3)}),H=await O.json();if(!O.ok)throw new Error(H.error||"\uC5F0\uACB0 \uAD8C\uD55C\uC744 \uD655\uC778\uD558\uC138\uC694.");if(H.mode!=="connector")throw new Error("csync web --ui\uB85C \uC2E4\uD589\uD55C \uB85C\uCEEC \uC2E4\uD589\uAE30\uC5D0 \uC5F0\uACB0\uD558\uC138\uC694.");let V=e.querySelector('meta[name="csync-version"]').content;if(H.version!==V)throw new Error(`\uC6F9(v${V})\uACFC \uB85C\uCEEC \uC2E4\uD589\uAE30(v${H.version}) \uBC84\uC804\uC774 \uB2E4\uB985\uB2C8\uB2E4. \uAC19\uC740 \uBC84\uC804\uC73C\uB85C \uC2E4\uD589\uD558\uC138\uC694.`);g={endpoint:L,token:W};try{c.setItem(y,JSON.stringify(g))}catch{}t("local-connection-status").textContent="\uB0B4 \uCEF4\uD4E8\uD130\uC5D0 \uC5F0\uACB0\uB428",x.close(),t("workspace-interface").inert=!1,s()}catch(O){g=null;try{c.removeItem(y)}catch{}b.textContent=O.name==="TypeError"||O.name==="TimeoutError"?"\uC5F0\uACB0\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. \uB85C\uCEEC csync \uC2E4\uD589 \uC5EC\uBD80\uC640 \uBE0C\uB77C\uC6B0\uC800\uC758 \uB85C\uCEEC \uB124\uD2B8\uC6CC\uD06C \uC811\uADFC \uAD8C\uD55C\uC744 \uD655\uC778\uD558\uC138\uC694.":O.message,x.showModal()}finally{M=!1,t("local-connect-submit").disabled=!1}}}x.addEventListener("cancel",L=>L.preventDefault()),v.onsubmit=L=>(L.preventDefault(),I(t("local-connect-endpoint").value.trim(),t("local-connect-token").value.trim())),t("workspace-interface").inert=!0;let A=new URLSearchParams(n.hash.slice(1)),T=A.get("csyncEndpoint"),F=A.get("csyncToken");if(T!==null||F!==null)i.replaceState(null,"",n.pathname+n.search),t("local-connect-endpoint").value=T??"",t("local-connect-token").value=F??"",x.showModal();else{let L;try{L=JSON.parse(c.getItem(y))}catch{}L?.endpoint&&L?.token?I(L.endpoint,L.token):x.showModal()}return{ready:m,request:p,remote:!0}}function st(e=globalThis.document){let n=d=>e.getElementById(d),i=n("overwrite-dialog"),c,f=d=>{let t=c;c=void 0,i.close(),t?.(d)};return n("overwrite-cancel").onclick=()=>f(!1),n("overwrite-confirm").onclick=()=>f(!0),i.addEventListener("cancel",d=>{d.preventDefault(),f(!1)}),i.addEventListener("close",()=>{let d=c;c=void 0,d?.(!1)}),({conflicts:d,inPlace:t,output:o})=>{if(c)throw Error("\uB36E\uC5B4\uC4F0\uAE30 \uD655\uC778\uC774 \uC774\uBBF8 \uC9C4\uD589 \uC911\uC785\uB2C8\uB2E4.");return n("overwrite-title").textContent=`${t?"\uC6D0\uBCF8":"\uAE30\uC874"} \uD30C\uC77C ${d.length}\uAC1C \uB36E\uC5B4\uC4F0\uAE30`,n("overwrite-path").textContent=o,n("overwrite-warning").textContent=`${t?"\uC120\uD0DD\uD55C \uC6D0\uBCF8":"\uCD9C\uB825 \uD3F4\uB354\uC758 \uAE30\uC874"} \uB0B4\uC6A9\uC774 \uBCC0\uD658 \uACB0\uACFC\uB85C \uAD50\uCCB4\uB429\uB2C8\uB2E4.${t?" \uD655\uC778 \uC774\uD6C4 \uC6D0\uBCF8\uC774 \uBC14\uB00C\uBA74 \uC800\uC7A5\uC744 \uC911\uB2E8\uD569\uB2C8\uB2E4.":""} \uCDE8\uC18C\uD558\uBA74 \uC800\uC7A5\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.`,n("overwrite-files").replaceChildren(...d.map(({path:g})=>{let s=e.createElement("li");return s.textContent=g,s})),new Promise(g=>{c=g,i.showModal(),n("overwrite-cancel").focus()})}}function ct(){let e=document.getElementById("snackbars"),n=new Map;return function(c,f="info"){let d=f+":"+c;if(!c||n.has(d))return;let t={error:["\uC791\uC5C5\uC744 \uC644\uB8CC\uD558\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4","!","\uC624\uB958"],success:["\uC644\uB8CC\uD588\uC2B5\uB2C8\uB2E4","\u2713","\uC131\uACF5"],warning:["\uD655\uC778\uC774 \uD544\uC694\uD569\uB2C8\uB2E4","!","\uC8FC\uC758"],info:["\uC548\uB0B4","i","\uC548\uB0B4"]}[f],o=document.createElement("div");o.className="snackbar snackbar-"+f,o.setAttribute("role",f==="error"||f==="warning"?"alert":"status");let g=document.createElement("span");g.className="snackbar-icon",g.textContent=t[1],g.setAttribute("aria-hidden","true");let s=document.createElement("div");s.className="snackbar-content";let m=document.createElement("strong");m.textContent=t[0];let y=document.createElement("p");y.textContent=c,s.append(m,y);let p=document.createElement("button");p.type="button",p.className="snackbar-close",p.textContent="\xD7",p.setAttribute("aria-label",t[2]+" \uC54C\uB9BC \uB2EB\uAE30"),p.onclick=()=>{o.remove(),n.delete(d)},o.append(g,s,p),n.set(d,o),e.append(o)}}function lt(e){let n=document.getElementById("help-dialog");document.getElementById("open-help").addEventListener("click",()=>{n.showModal(),document.getElementById("help-"+e()).scrollIntoView({block:"start"})}),document.getElementById("open-token-guide").addEventListener("click",()=>{n.showModal(),document.getElementById("help-token").scrollIntoView({block:"start"})}),n.querySelectorAll(".help-nav a").forEach(i=>{i.addEventListener("click",c=>{c.preventDefault(),document.querySelector(i.getAttribute("href")).scrollIntoView({block:"start"})})})}var Ve;function Re(){return Ve??=import("./chunks/monaco-36ZGUH4Y.js").catch(e=>{throw Ve=void 0,Error("\uBCF8\uBB38 \uBE44\uAD50 \uB3C4\uAD6C\uB97C \uBD88\uB7EC\uC624\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4. \uB2E4\uC2DC \uC2DC\uB3C4\uD558\uC138\uC694. "+e.message)}),Ve}function pt(e,n){let i=URL.createObjectURL(new Blob([n],{type:"text/plain;charset=utf-8"})),c=document.createElement("a");try{c.href=i,c.download=e,document.body.append(c),c.click()}finally{c.remove(),setTimeout(()=>URL.revokeObjectURL(i),1e3)}}var ft={preview:"\uC5C5\uB85C\uB4DC \uBBF8\uB9AC\uBCF4\uAE30",fetch:"\uC6D0\uACA9 \uBCC0\uACBD \uD655\uC778",pull:"\uAC00\uC838\uC624\uAE30",push:"\uC5C5\uB85C\uB4DC",restore:"\uBCF5\uAD6C\xB7\uC6D0\uBCF5"},Wt={running:"\uC9C4\uD589 \uC911",succeeded:"\uC644\uB8CC",failed:"\uC2E4\uD328"},dt=e=>e?new Date(e).toLocaleString("ko-KR",{timeZone:"Asia/Seoul"}):"-";function ut(e){return["confluence-sync \uC2E4\uD589 \uB85C\uADF8",`\uC791\uC5C5: ${ft[e.kind]??e.kind}`,`\uC0C1\uD0DC: ${Wt[e.state]??e.state}`,`\uC791\uC5C5 ID: ${e.id}`,`\uC2DC\uC791 (Asia/Seoul): ${dt(e.startedAt)}`,`\uC885\uB8CC (Asia/Seoul): ${dt(e.finishedAt)}`,"",e.log??""].join(`
|
|
1
|
+
function tt(e,t,r={}){if(r.quiet||e==="/api/sync/job")return null;if(e==="/api/sync/staging")return{label:t?.action==="add"?"\uC5C5\uB85C\uB4DC \uBB38\uC11C\uC5D0 \uD3EC\uD568\uD558\uB294 \uC911":t?.action==="remove"?"\uC5C5\uB85C\uB4DC \uC120\uD0DD\uC744 \uD574\uC81C\uD558\uB294 \uC911":"\uB85C\uCEEC \uBCC0\uACBD\uC744 \uD655\uC778\uD558\uB294 \uC911",background:!!r.background,button:t?.action?t.paths?.length===1?null:t.action==="add"?"sync-stage-add":"sync-stage-remove":"sync-stage-scan",region:"sync-stage-list"};let c={"/api/sync/config":["\uC5F0\uACB0 \uC124\uC815\uC744 \uD655\uC778\uD558\uB294 \uC911","sync-load","sync-env-body"],"/api/sync/connect":["\uC2A4\uD398\uC774\uC2A4\uC5D0 \uC5F0\uACB0\uD558\uB294 \uC911","sync-connect","sync-env-body"],"/api/sync/env/import":[".env\uB97C \uC77D\uB294 \uC911","sync-env-choose","sync-env-body"],"/api/sync/env/save":[".env \uC800\uC7A5\uC744 \uD655\uC778\uD558\uB294 \uC911","sync-env-save","sync-env-body"],"/api/sync/fetch":["\uC6D0\uACA9 \uBCC0\uACBD\uC744 \uD655\uC778\uD558\uB294 \uC911","sync-fetch","sync-view"],"/api/sync/restore":["\uC6D0\uACA9 \uBCF5\uAD6C \uB300\uC0C1\uC744 \uD655\uC778\uD558\uB294 \uC911",void 0,"sync-view"],"/api/sync/pull":["Confluence\uC5D0\uC11C \uAC00\uC838\uC624\uB294 \uC911","sync-pull-remote","sync-view"],"/api/sync/preview":["\uC5C5\uB85C\uB4DC \uBBF8\uB9AC\uBCF4\uAE30\uB97C \uACC4\uC0B0\uD558\uB294 \uC911","sync-preview","sync-view"],"/api/sync/push":["Confluence\uC5D0 \uC5C5\uB85C\uB4DC\uD558\uB294 \uC911","sync-push","sync-view"],"/api/sync/diff":[t?.remote?"\uC6D0\uACA9 \uBCF8\uBB38\uC744 \uBE44\uAD50\uD558\uB294 \uC911":"\uC800\uC7A5\uB41C \uAE30\uC900\uBCF8\uC744 \uBE44\uAD50\uD558\uB294 \uC911","sync-diff-remote","sync-diff-dialog"],"/api/document-preview":["\uBB38\uC11C \uBBF8\uB9AC\uBCF4\uAE30\uB97C \uB9CC\uB4DC\uB294 \uC911","document-preview-refresh","document-preview-panel"],"/api/document-format/preview":["\uBB38\uC11C \uC11C\uC2DD\uC744 \uBE44\uAD50\uD558\uB294 \uC911",t?.basic?"document-format-basic":"document-format-review","document-preview-panel"],"/api/table-format/preview":["\uD45C \uC11C\uC2DD\uC744 \uBE44\uAD50\uD558\uB294 \uC911","document-format-review","document-preview-panel"],"/api/table-format/save":["\uBB38\uC11C \uC11C\uC2DD\uC744 \uC800\uC7A5\uD558\uB294 \uC911","table-save","table-review-dialog"],"/api/convert":[t?.preview?"\uBCC0\uD658 \uBBF8\uB9AC\uBCF4\uAE30\uB97C \uB9CC\uB4DC\uB294 \uC911":"\uBB38\uC11C\uC640 \uCCA8\uBD80\uB97C \uBCC0\uD658\uD558\uB294 \uC911",t?.preview?"preview":"save","convert-view"],"/api/pick-folder":["\uC2DC\uC2A4\uD15C \uCC3D\uC5D0\uC11C \uD3F4\uB354\uB97C \uC120\uD0DD\uD574 \uC8FC\uC138\uC694",t?.kind==="reference"?"sync-add-reference":t?.kind==="out"?"choose-out":"choose-base",null],"/api/open":["\uACB0\uACFC \uD3F4\uB354\uB97C \uC5EC\uB294 \uC911","open",null]};if(e.startsWith("/api/search"))return{label:"\uBB38\uC11C\uB97C \uAC80\uC0C9\uD558\uB294 \uC911",region:"files"};let[u,d,n]=c[e]??["\uBB38\uC11C \uD3F4\uB354\uB97C \uBD88\uB7EC\uC624\uB294 \uC911",null,"files"];return{label:u,button:d,region:n}}function nt({get:e=r=>document.getElementById(r),now:t=()=>Date.now()}={}){let r=new Map,c=new Map,u=0,d,n=e("activity-panel");function a(p,h){let w=p&&e(p);if(!w)return;let b=c.get(w);h>0?(b||(b={count:0,busy:w.getAttribute("aria-busy")},c.set(w,b)),b.count++,w.setAttribute("aria-busy","true"),w.classList.add("is-loading")):b&&--b.count===0&&(b.busy===null?w.removeAttribute("aria-busy"):w.setAttribute("aria-busy",b.busy),w.classList.remove("is-loading"),c.delete(w))}function i(p){let h=Math.max(0,Math.floor((t()-p.startedAt)/1e3));return h<60?`${h}\uCD08 \uACBD\uACFC`:`${Math.floor(h/60)}\uBD84 ${h%60}\uCD08 \uACBD\uACFC`}function s(){let p=[...r.values()].filter(h=>!h.background).at(-1);p&&n&&(e("activity-elapsed").textContent=i(p))}function g(){let p=[...r.values()].filter(w=>!w.background).at(-1);n&&(n.hidden=!p,p&&(e("activity-title").textContent=p.label,e("activity-detail").textContent=p.detail||"\uCC98\uB9AC\uAC00 \uB05D\uB098\uBA74 \uACB0\uACFC\uB97C \uD45C\uC2DC\uD569\uB2C8\uB2E4.",n.classList.toggle("is-uncertain",p.uncertain===!0),e("activity-link").hidden=!p.link,p.link&&e("activity-link").setAttribute("href",p.link)));let h=e("sync-stage-checking");if(h){let w=[...r.values()].some(b=>b.background&&b.visible);h.classList.toggle("is-checking",w),h.setAttribute("aria-hidden",String(!w))}p&&!d&&(d=setInterval(s,1e3)),!p&&d&&(clearInterval(d),d=void 0),s()}function E(p){let h=++u,w=Date.parse(p.startedAt),b={...p,startedAt:Number.isFinite(w)?w:t(),visible:!1};return r.set(h,b),b.background?b.delay=setTimeout(()=>{r.has(h)&&(b.visible=!0,g())},350):(a(b.button,1),a(b.region,1)),g(),{update(y){if(!r.has(h))return;let I=Date.parse(y.startedAt);Object.assign(b,y,{startedAt:Number.isFinite(I)?I:b.startedAt}),g()},end(){r.delete(h)&&(clearTimeout(b.delay),b.background||(a(b.button,-1),a(b.region,-1)),g())}}}return{begin:E}}var ze=async e=>Array.from(new Uint8Array(await crypto.subtle.digest("SHA-256",e))).map(t=>t.toString(16).padStart(2,"0")).join(""),Bt=e=>!e.split("/").some((t,r)=>t==="node_modules"||t===".git"||t.startsWith(".")&&!(r===0&&[".csync",".env",".confluence-sync.json",".confluence-workspace.json",".confluence-syncignore"].includes(t)));function He(e,t){let r=e.find(u=>t.startsWith(u.virtual+"/"));if(!r)throw Error("\uC120\uD0DD\uD55C \uD3F4\uB354 \uBC16\uC758 \uD30C\uC77C\uC785\uB2C8\uB2E4.");let c=t.slice(r.virtual.length+1).split("/");if(c.some(u=>!u||u==="."||u===".."||u.includes("\\")))throw Error("\uC798\uBABB\uB41C \uD30C\uC77C \uACBD\uB85C\uC785\uB2C8\uB2E4.");return{mount:r,parts:c}}async function je(e,t,r=!1){let{mount:c,parts:u}=He(e,t),d=c.handle;for(let n of u.slice(0,-1))d=await d.getDirectoryHandle(n,{create:r});return{directory:d,name:u.at(-1),handle:await d.getFileHandle(u.at(-1),{create:r})}}var Ft=e=>e.name==="NotFoundError";async function Je(e,t){try{return new Uint8Array(await(await(await je(e,t)).handle.getFile()).arrayBuffer())}catch(r){if(Ft(r))return null;throw r}}async function ot(e,t,r){let{handle:c}=await je(e,t,!0),u=await c.createWritable();try{await u.write(r),await u.close()}catch(d){throw await u.abort().catch(()=>{}),d}}async function at(e,t){let{directory:r,name:c}=await je(e,t);await r.removeEntry(c)}async function Dt(e,t=new Map,r=!1){let c=[],u=0;async function d(a,i,s=[]){for await(let[g,E]of i.entries()){let p=[...s,g].join("/");if(a.readonly&&p===".env"||!Bt(p))continue;if(E.kind==="directory"){await d(a,E,[...s,g]);continue}let h=await E.getFile();if(u+=h.size,h.size>104857600||u>536870912||c.length>=2e4)throw Error("\uC791\uC5C5\uACF5\uAC04 \uD55C\uB3C4\uB97C \uCD08\uACFC\uD588\uC2B5\uB2C8\uB2E4(\uD30C\uC77C 100MiB, \uC804\uCCB4 512MiB, 20,000\uAC1C).");let w=a.virtual+"/"+p,b=`${h.size}:${h.lastModified}`,y=t.get(w),I=!r&&y?.stamp===b?y.hash:await ze(await h.arrayBuffer());t.set(w,{stamp:b,hash:I}),c.push({path:w,size:h.size,hash:I,file:h})}}for(let a of e)await d(a,a.handle);let n=new Set(c.map(a=>a.path));for(let a of t.keys())n.has(a)||t.delete(a);return c.sort((a,i)=>a.path<i.path?-1:a.path>i.path?1:0)}async function qt(e,t,r,c){let u=new Map(t.map(a=>[a.path,a.hash])),d=[],n=[...r.files.map(a=>({...a,remove:!1})),...r.removed.map(a=>({path:a,remove:!0}))];n.sort((a,i)=>(a.path.includes("/.csync/")?3:a.path.endsWith(".md")?2:1)-(i.path.includes("/.csync/")?3:i.path.endsWith(".md")?2:1));for(let a of n){let{mount:i}=He(e,a.path);if(i.readonly)throw Error("\uCC38\uC870 \uD3F4\uB354\uB294 \uC218\uC815\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.");let s=await Je(e,a.path),g=s?await ze(s):void 0;if(!a.remove&&g===a.hash||a.remove&&!s){a.skip=!0;continue}if(g!==u.get(a.path))throw Error(`\uC791\uC5C5 \uC911 \uB85C\uCEEC \uD30C\uC77C\uC774 \uBC14\uB00C\uC5C8\uC2B5\uB2C8\uB2E4: ${a.path}`);if(a.before=s,a.beforeHash=g,!a.remove&&(a.bytes=new Uint8Array(await c(a.path)),await ze(a.bytes)!==a.hash))throw Error("\uACB0\uACFC \uD30C\uC77C\uC774 \uBC14\uB00C\uC5C8\uC2B5\uB2C8\uB2E4. \uB2E4\uC2DC \uC2DC\uB3C4\uD558\uC138\uC694.")}try{for(let a of n){if(a.skip)continue;let i=await Je(e,a.path);if((i?await ze(i):void 0)!==a.beforeHash)throw Error(`\uC800\uC7A5 \uC9C1\uC804 \uB85C\uCEEC \uD30C\uC77C\uC774 \uBC14\uB00C\uC5C8\uC2B5\uB2C8\uB2E4: ${a.path}`);d.push(a),a.remove?i&&await at(e,a.path):await ot(e,a.path,a.bytes)}}catch(a){let i=[];for(let s of d.reverse())try{let g=await Je(e,s.path),E=g?await ze(g):void 0;if(E===s.beforeHash)continue;if(E!==(s.remove?void 0:s.hash)){i.push(s.path);continue}s.before?await ot(e,s.path,s.before):g&&await at(e,s.path)}catch{i.push(s.path)}throw i.length?Error(`${a.message} \uCD94\uAC00 \uD3B8\uC9D1 \uB610\uB294 \uBCF5\uC6D0 \uC2E4\uD328\uB85C \uD655\uC778\uC774 \uD544\uC694\uD55C \uD30C\uC77C: ${i.join(", ")}`):a}for(let a of r.removed){let{mount:i,parts:s}=He(e,a);for(s.pop();s.length;)try{let g=i.handle;for(let h of s.slice(0,-1))g=await g.getDirectoryHandle(h);let E=await g.getDirectoryHandle(s.at(-1)),p=!0;for await(let h of E.entries()){p=!1;break}if(!p)break;await g.removeEntry(s.at(-1)),s.pop()}catch{break}}}function Ut(){return new Promise((e,t)=>{let r=indexedDB.open("csync.browser-folders",1);r.onupgradeneeded=()=>r.result.createObjectStore("workspace"),r.onsuccess=()=>e(r.result),r.onerror=()=>t(r.error)})}async function Wt(e,t="active"){let r=await Ut();try{return await new Promise((c,u)=>{let d=r.transaction("workspace",e===void 0?"readonly":"readwrite"),n=d.objectStore("workspace"),a=e===void 0?n.get(t):e===null?n.delete(t):n.put(e,t),i;a.onsuccess=()=>{i=a.result},d.oncomplete=()=>c(i),d.onerror=()=>u(d.error)})}finally{r.close()}}function Ve(e=globalThis.localStorage){try{return JSON.parse(e?.getItem("csync.workspace.v1"))?.mode==="sync"?"sync":"convert"}catch{return"convert"}}function Ke({document:e=globalThis.document,window:t=globalThis.window,location:r=globalThis.location,storage:c=globalThis.sessionStorage,fetch:u=globalThis.fetch,remember:d=Wt,pickDirectory:n=i=>t.showDirectoryPicker(i),workspaceMode:a="convert"}={}){let i=m=>e.getElementById(m),s=i("browser-folder-dialog"),g=i("browser-folder-status"),E=i("browser-apply-dialog"),p,h=[],w=[],b=!1,y=Promise.resolve(),I=new Map,L,A=!1,N=new Promise(m=>{L=m}),R="csync.browser-session.v2."+(a==="sync"?"sync":"convert"),O=!1,q=m=>{let l=y.catch(()=>{}).then(m);return y=l,l},B=async()=>{c.setItem(R,JSON.stringify(p)),await d({mounts:h,baseline:w},p.id)},X=async(m,l=!1)=>{let v=l?"read":"readwrite";if(await m.queryPermission({mode:v})!=="granted"&&await m.requestPermission({mode:v})!=="granted")throw Error("\uC120\uD0DD\uD55C \uD3F4\uB354\uC758 \uC77D\uAE30\xB7\uC4F0\uAE30 \uAD8C\uD55C\uC744 \uD5C8\uC6A9\uD558\uC138\uC694.")};async function W(m,l,v=l?"POST":"GET"){let S=await u(m,{method:v,credentials:"omit",headers:{...p?{"X-Csync-Session":p.id,"X-Csync-Token":p.token}:{},...l?{"Content-Type":"application/json"}:{}},...l?{body:JSON.stringify(l)}:{}}),o=await S.json();if(!S.ok)throw Object.assign(Error(o.error||"\uC791\uC5C5 \uC694\uCCAD\uC5D0 \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4."),{code:o.code,status:S.status,conflicts:o.conflicts,inPlace:o.inPlace,output:o.output});return o}let $=()=>({"X-Csync-Session":p.id,"X-Csync-Token":p.token});async function H(){let m=await W("/api/browser/changes");if(!(!m.files.length&&!m.removed.length))try{A=!0,await qt(h,w,m,async l=>{let v=await u("/api/browser/file?path="+encodeURIComponent(l),{headers:$(),credentials:"omit"});if(!v.ok)throw Error("\uACB0\uACFC \uD30C\uC77C\uC744 \uBC1B\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4.");return v.arrayBuffer()}),await W("/api/browser/ack",{files:m.snapshot}),w=m.snapshot;for(let l of m.files)I.delete(l.path);for(let l of m.removed)I.delete(l);await B(),A=!1,E.close()}catch(l){throw i("browser-apply-status").textContent=l.message,E.open||E.showModal(),l}}i("browser-apply-retry").onclick=async()=>{if(!b)try{for(let m of h)m.readonly||await X(m.handle);await q(H)}catch(m){i("browser-apply-status").textContent=m.message}},E.addEventListener("cancel",m=>m.preventDefault());async function ae(m=!1){if(A)throw Error("\uBCF4\uB958 \uC911\uC778 \uB85C\uCEEC \uD30C\uC77C \uC801\uC6A9\uC744 \uBA3C\uC800 \uC644\uB8CC\uD558\uC138\uC694.");await H();let l=await Dt(h,I,m),v=l.map(({path:o,size:M,hash:J})=>({path:o,size:M,hash:J}));if(JSON.stringify(v)===JSON.stringify(w))return;let S=await W("/api/browser/mirror",{files:v});for(let o of S.uploads){let M=l.find(j=>j.path===o.path),J=await u("/api/browser/file?path="+encodeURIComponent(o.path),{method:"PUT",headers:$(),credentials:"omit",body:M.file});if(!J.ok){let j=await J.json();throw Error(j.error||"\uD30C\uC77C \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4.")}}await W("/api/browser/commit",{}),w=v,await B()}let te=()=>{i("workspace-interface").inert=!1,i("local-connection-status").textContent=h[0].handle.name+" \xB7 \uBE0C\uB77C\uC6B0\uC800 \uD3F4\uB354",s.close(),L()},G=async()=>{await ae(),te()},pe=async()=>{b=(await W("/api/sync/job")).job?.state==="running",b?te():await G()};async function oe(m){if(b||A)throw Error("\uC9C4\uD589 \uC911\uC778 \uC791\uC5C5\uC744 \uBA3C\uC800 \uC644\uB8CC\uD558\uC138\uC694.");i("browser-folder-open").disabled=!0,g.textContent="\uC120\uD0DD\uD55C \uBB38\uC11C\xB7\uCCA8\uBD80\uB97C \uC784\uC2DC \uC791\uC5C5\uACF5\uAC04\uC5D0 \uC900\uBE44\uD558\uB294 \uC911\u2026";try{return p&&(await H(),await W("/api/browser/session",void 0,"DELETE"),await d(null,p.id)),p=await W("/api/browser/session",{name:m.name}),O=!0,h=[{virtual:p.base,handle:m}],w=[],I.clear(),await B(),await G(),{path:p.base}}finally{i("browser-folder-open").disabled=!1}}let z=async(m,l)=>{if(b||A)throw Error("\uC9C4\uD589 \uC911\uC778 \uC791\uC5C5\uC744 \uBA3C\uC800 \uC644\uB8CC\uD558\uC138\uC694.");if(m==="out"&&await h[0].handle.isSameEntry(l))return{path:p.base};for(let S of h)if(!(m==="out"&&S.virtual===p.output)){if(m==="reference"&&S.readonly&&await S.handle.isSameEntry(l))return{path:S.virtual};if(await S.handle.isSameEntry(l)||await S.handle.resolve(l)!==null||await l.resolve(S.handle)!==null)throw Error("\uBB38\uC11C\xB7\uCD9C\uB825\xB7\uCC38\uC870 \uD3F4\uB354\uB294 \uC11C\uB85C \uACB9\uCE58\uC9C0 \uC54A\uB294 \uBCC4\uB3C4 \uD3F4\uB354\uB85C \uC120\uD0DD\uD558\uC138\uC694.")}let v=m==="out"?p.output:(await W("/api/browser/mount",{kind:"reference"})).path;return h=h.filter(S=>S.virtual!==v),h.push({virtual:v,handle:l,readonly:m==="reference"}),await B(),await ae(),{path:v}},k=async m=>{let l=m==="base"?h[0]:m==="out"?h.find(S=>S.virtual===i("out-input").dataset?.path)||h.find(S=>S.virtual===p?.output)||h[0]:h.filter(S=>S.readonly).at(-1)||h[0],v=await n({id:"csync-"+(a==="sync"?"sync":"convert")+"-"+m,mode:m==="reference"?"read":"readwrite",...l?{startIn:l.handle}:{}});return await X(v,m==="reference"),q(()=>m==="base"?oe(v):z(m,v))};async function P(m,l){if(A)throw Error("\uBCF4\uB958 \uC911\uC778 \uB85C\uCEEC \uD30C\uC77C \uC801\uC6A9\uC744 \uBA3C\uC800 \uC644\uB8CC\uD558\uC138\uC694.");let v=m.split("?")[0],S=l.body?JSON.parse(l.body):void 0;if(v==="/api/open")return{ok:!0,name:(S.path?.startsWith(p.base)?h[0]:h.find(M=>M.virtual===p.output))?.handle.name??"\uCD9C\uB825 \uD3F4\uB354"};if(v==="/api/convert"&&!S.preview&&S.out!==S.base&&!h.some(M=>M.virtual===p.output))throw Error("\uBCC0\uD658 \uACB0\uACFC\uB97C \uC800\uC7A5\uD560 \uCD9C\uB825 \uD3F4\uB354\uB97C \uBA3C\uC800 \uC120\uD0DD\uD558\uC138\uC694.");v!=="/api/sync/job"&&!b&&await ae(v!=="/api/sync/staging");let o;try{o=await W(m,S,l.method??(S?"POST":"GET"))}catch(M){throw b||await H(),M}return o.job&&(b=o.job.state==="running"),b||await H(),o}let x=(m,l={})=>{if(m==="/api/pick-folder"){let{kind:S}=JSON.parse(l.body);return(async()=>{if(b||A)throw Error("\uC9C4\uD589 \uC911\uC778 \uC791\uC5C5\uC744 \uBA3C\uC800 \uC644\uB8CC\uD558\uC138\uC694.");return S==="base"?new Response(JSON.stringify(await k("base"))):new Response(JSON.stringify(await k(S)))})()}return q(()=>P(m,l)).then(S=>new Response(JSON.stringify(S))).catch(S=>new Response(JSON.stringify({error:S.message,code:S.code,conflicts:S.conflicts,inPlace:S.inPlace,output:S.output}),{status:S.status??400}))};i("local-disconnect").hidden=!1,i("local-disconnect").textContent="\uD3F4\uB354 \uC5F0\uACB0 \uD574\uC81C",i("local-disconnect").onclick=()=>q(async()=>{try{if(b||A)throw Error("\uC791\uC5C5\uACFC \uB85C\uCEEC \uD30C\uC77C \uC801\uC6A9\uC744 \uBA3C\uC800 \uC644\uB8CC\uD558\uC138\uC694.");p&&(await W("/api/browser/session",void 0,"DELETE"),await d(null,p.id)),c.removeItem(R),r.reload()}catch(m){g.textContent=m.message,s.showModal()}});let C=i("out-mode-hint");return C&&(C.textContent="\uBCC4\uB3C4 \uD3F4\uB354 \uB610\uB294 \uC6D0\uBCF8 \uB36E\uC5B4\uC4F0\uAE30"),i("workspace-interface").inert=!0,s.addEventListener("cancel",m=>m.preventDefault()),i("root-path-editor").hidden=!0,i("out-input").readOnly=!0,i("out-input").placeholder="\uBE0C\uB77C\uC6B0\uC800\uC5D0\uC11C \uCD9C\uB825 \uD3F4\uB354\uB97C \uC120\uD0DD\uD558\uC138\uC694",i("open").textContent="\uC800\uC7A5 \uC704\uCE58 \uD655\uC778",i("browser-folder-open").onclick=()=>k("base").catch(m=>{m.name!=="AbortError"&&(g.textContent=m.message)}),i("browser-folder-resume").onclick=async()=>{try{for(let m of h)await X(m.handle,m.readonly);await q(pe)}catch(m){g.textContent=m.message}},t.addEventListener("beforeunload",m=>{(b||A)&&(m.preventDefault(),m.returnValue="")}),!t.isSecureContext||!t.showDirectoryPicker?(g.textContent="\uD3F4\uB354 \uC77D\uAE30\xB7\uC4F0\uAE30\uB97C \uC9C0\uC6D0\uD558\uB294 \uB370\uC2A4\uD06C\uD1B1 Chrome \uB610\uB294 Edge\uC5D0\uC11C HTTPS \uC8FC\uC18C\uB85C \uC811\uC18D\uD558\uC138\uC694.",i("browser-folder-open").disabled=!0,s.showModal()):(i("local-connection-status").textContent="\uC800\uC7A5\uB41C \uD3F4\uB354 \uC5F0\uACB0\uC744 \uD655\uC778\uD558\uB294 \uC911\u2026",q(async()=>{let m;try{let v=c.getItem(R);v||(v=c.getItem("csync.browser-session.v1"),v&&(c.setItem(R,v),c.removeItem("csync.browser-session.v1"))),p=JSON.parse(v??"null"),m=p?await d(void 0,p.id):void 0}catch{g.textContent="\uC800\uC7A5\uB41C \uD3F4\uB354 \uC5F0\uACB0 \uC815\uBCF4\uB97C \uD655\uC778\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. \uD3F4\uB354\uB97C \uB2E4\uC2DC \uC120\uD0DD\uD558\uC138\uC694."}if(!p||!m?.mounts?.length){i("local-connection-status").textContent="\uBE0C\uB77C\uC6B0\uC800 \uD3F4\uB354 \uC120\uD0DD \uD544\uC694",s.showModal();return}h=m.mounts,w=m.baseline??[];let l=!0;for(let v of h)await v.handle.queryPermission({mode:v.readonly?"read":"readwrite"})!=="granted"&&(l=!1);if(!l){i("local-connection-status").textContent="\uD3F4\uB354 \uC811\uADFC \uAD8C\uD55C \uD655\uC778 \uD544\uC694",i("browser-folder-resume").hidden=!1,g.textContent="\uC774\uC804\uC5D0 \uC120\uD0DD\uD55C \uD3F4\uB354\uAC00 \uC800\uC7A5\uB418\uC5B4 \uC788\uC2B5\uB2C8\uB2E4. \uB2E4\uC2DC \uC120\uD0DD\uD560 \uD544\uC694 \uC5C6\uC774 \uC811\uADFC \uAD8C\uD55C\uC744 \uD5C8\uC6A9\uD558\uC138\uC694.",s.showModal();return}i("local-connection-status").textContent=h[0].handle.name+" \xB7 \uC5F0\uACB0\uC744 \uBCF5\uC6D0\uD558\uB294 \uC911\u2026";try{await pe()}catch(v){[401,410].includes(v.status)?(await d(null,p.id),p=void 0,w=[],c.removeItem(R),g.textContent="\uC791\uC5C5\uACF5\uAC04\uC744 \uB2E4\uC2DC \uC5F0\uACB0\uD574\uC57C \uD569\uB2C8\uB2E4. \uD3F4\uB354\uB97C \uB2E4\uC2DC \uC120\uD0DD\uD558\uC138\uC694."):g.textContent="\uC774\uC804 \uD3F4\uB354 \uC5F0\uACB0\uC744 \uBCF5\uC6D0\uD558\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4: "+v.message,i("local-connection-status").textContent="\uD3F4\uB354 \uC5F0\uACB0 \uD655\uC778 \uD544\uC694",s.showModal()}}).catch(m=>{g.textContent=m.message,i("local-connection-status").textContent="\uD3F4\uB354 \uC5F0\uACB0 \uD655\uC778 \uD544\uC694",s.showModal()})),{ready:N,request:x,browser:!0,remote:!1,newBaseSelected:()=>O,folderName:m=>h.find(l=>l.virtual===m)?.handle.name??""}}async function rt({bytes:e,pages:t,dryRun:r}){let{getDocument:c,GlobalWorkerOptions:u,VerbosityLevel:d}=await import("./chunks/pdf-DDN7TXTP.js");u.workerSrc="/assets/pdf.worker.min.mjs";let n=c({data:e,cMapUrl:"/assets/pdf/cmaps/",cMapPacked:!0,standardFontDataUrl:"/assets/pdf/standard_fonts/",wasmUrl:"/assets/pdf/wasm/",useSystemFonts:!1,verbosity:d.ERRORS});try{let a=await n.promise;for(let s of t)if(!Number.isInteger(s)||s<1||s>a.numPages)throw Error(`PDF \uCABD \uBC94\uC704 \uCD08\uACFC: ${s} (\uCD1D ${a.numPages}\uCABD)`);if(r)return[];let i=[];for(let s of t){let g=await a.getPage(s),E=g.getViewport({scale:160/72}),p=document.createElement("canvas");p.width=Math.ceil(E.width),p.height=Math.ceil(E.height);try{await g.render({canvas:p,canvasContext:p.getContext("2d"),viewport:E}).promise;let h=await new Promise((w,b)=>p.toBlob(y=>y?w(y):b(Error("PDF \uC774\uBBF8\uC9C0\uB97C \uC800\uC7A5\uD558\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4.")),"image/png"));i.push(await h.arrayBuffer())}finally{g.cleanup(),p.width=p.height=1}}return i}finally{await n.destroy()}}function it({worker:e=new Worker("/assets/workspace.worker.js",{type:"module"}),timeoutMs:t=18e4}={}){let r=0,c=!1,u=new Map,d=n=>{c=!0;for(let a of u.values())clearTimeout(a.timer),a.reject(Error(n));u.clear()};return e.addEventListener("error",()=>d("\uBE0C\uB77C\uC6B0\uC800 \uC2E4\uD589\uAE30\uB97C \uC2DC\uC791\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. \uD398\uC774\uC9C0\uB97C \uC0C8\uB85C\uACE0\uCE68\uD558\uC138\uC694.")),e.addEventListener("message",async({data:n})=>{if(n.kind==="pdf"){try{let i=await rt(n.request);e.postMessage({kind:"pdf-result",id:n.id,pages:i},i)}catch(i){e.postMessage({kind:"pdf-result",id:n.id,error:i.message})}return}let a=u.get(n.id);a&&(u.delete(n.id),clearTimeout(a.timer),n.error?a.reject(Error(n.error)):a.resolve(new Response(n.body,{status:n.status,headers:n.headers})))}),async(n,a={})=>{if(c)throw Error("\uBE0C\uB77C\uC6B0\uC800 \uC2E4\uD589\uAE30\uAC00 \uC911\uB2E8\uB418\uC5C8\uC2B5\uB2C8\uB2E4. \uD398\uC774\uC9C0\uB97C \uC0C8\uB85C\uACE0\uCE68\uD558\uC138\uC694.");let i=new URL(n,"https://local.invalid");if(i.origin!=="https://local.invalid"||!i.pathname.startsWith("/api/"))throw Error("\uC798\uBABB\uB41C \uBE0C\uB77C\uC6B0\uC800 \uC694\uCCAD\uC785\uB2C8\uB2E4.");let s=a.body;s instanceof Blob&&(s=await s.arrayBuffer());let g=++r;return new Promise((E,p)=>{let h=setTimeout(()=>{u.delete(g),p(Error("\uBE0C\uB77C\uC6B0\uC800 \uC694\uCCAD\uC774 \uC9C0\uC5F0\uB418\uACE0 \uC788\uC2B5\uB2C8\uB2E4. \uC791\uC5C5 \uB0B4\uC5ED\uC744 \uD655\uC778\uD55C \uD6C4 \uB2E4\uC2DC \uC2DC\uB3C4\uD558\uC138\uC694."))},t);u.set(g,{resolve:E,reject:p,timer:h}),e.postMessage({id:g,path:n,method:a.method??"GET",headers:Object.fromEntries(new Headers(a.headers)),body:s},s instanceof ArrayBuffer?[s]:[])})}}function Jt(e){let t=new URL(e);if(t.protocol!=="http:"||!["127.0.0.1","localhost","[::1]"].includes(t.hostname)||t.username||t.password||t.pathname!=="/"||t.search||t.hash)throw new Error("\uB85C\uCEEC \uC2E4\uD589\uAE30 \uC8FC\uC18C\uB294 http://127.0.0.1:\uD3EC\uD2B8 \uD615\uC2DD\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4.");return t.origin}function st({document:e=globalThis.document,location:t=globalThis.location,history:r=globalThis.history,storage:c=globalThis.sessionStorage,fetch:u=globalThis.fetch}={}){let d=new URLSearchParams(t.hash?.slice(1)).has("csyncEndpoint")||c?.getItem("csync.connector.v1");if(e.querySelector('meta[name="csync-runtime"]')?.content==="standalone"&&!d)return{...Ke({fetch:it(),workspaceMode:Ve()}),standalone:!0};if(e.querySelector('meta[name="csync-runtime"]')?.content==="browser")return Ke({workspaceMode:Ve()});let n=O=>e.getElementById(O),a=e.querySelector('meta[name="csync-token"]').content,i=a?{endpoint:"",token:a}:null,s,g=i?Promise.resolve():new Promise(O=>{s=O}),E="csync.connector.v1",p=(O,q={})=>{if(!i)throw new Error("\uBA3C\uC800 \uB85C\uCEEC \uC2E4\uD589\uAE30\uB97C \uC5F0\uACB0\uD558\uC138\uC694.");if(!O.startsWith("/api/")||O.startsWith("//"))throw new Error("\uB85C\uCEEC API \uACBD\uB85C\uB97C \uD655\uC778\uD558\uC138\uC694.");return u(i.endpoint+O,{...q,headers:{...q.headers,"X-Csync-Token":i.token},credentials:"omit",redirect:"error",...i.endpoint?{targetAddressSpace:"loopback"}:{}})},h=()=>{try{c.removeItem(E)}catch{}i=null,t.reload()};if(n("local-disconnect").onclick=h,i)return{ready:g,request:p,remote:!1};n("local-disconnect").hidden=!1;let w=n("local-connect-dialog"),b=n("local-connect-form"),y=n("local-connect-note");n("local-connect-command").textContent=`csync web --ui ${JSON.stringify(t.origin+t.pathname)} --base "/\uBB38\uC11C\uD3F4\uB354"`;let I=!1;async function L(O,q){if(!I){I=!0,n("local-connect-submit").disabled=!0,y.textContent="\uB85C\uCEEC \uC2E4\uD589\uAE30\uC5D0 \uC5F0\uACB0\uD558\uB294 \uC911\u2026";try{if(O=Jt(O),!/^[a-f0-9]{64}$/.test(q))throw new Error("csync\uAC00 \uCD9C\uB825\uD55C \uC5F0\uACB0 \uB9C1\uD06C\uB97C \uC0AC\uC6A9\uD558\uAC70\uB098 \uC5F0\uACB0 \uD0A4\uB97C \uC785\uB825\uD558\uC138\uC694.");let B=await u(O+"/api/connection",{headers:{"X-Csync-Token":q},credentials:"omit",redirect:"error",targetAddressSpace:"loopback",signal:AbortSignal.timeout(15e3)}),X=await B.json();if(!B.ok)throw new Error(X.error||"\uC5F0\uACB0 \uAD8C\uD55C\uC744 \uD655\uC778\uD558\uC138\uC694.");if(X.mode!=="connector")throw new Error("csync web --ui\uB85C \uC2E4\uD589\uD55C \uB85C\uCEEC \uC2E4\uD589\uAE30\uC5D0 \uC5F0\uACB0\uD558\uC138\uC694.");let W=e.querySelector('meta[name="csync-version"]').content;if(X.version!==W)throw new Error(`\uC6F9(v${W})\uACFC \uB85C\uCEEC \uC2E4\uD589\uAE30(v${X.version}) \uBC84\uC804\uC774 \uB2E4\uB985\uB2C8\uB2E4. \uAC19\uC740 \uBC84\uC804\uC73C\uB85C \uC2E4\uD589\uD558\uC138\uC694.`);i={endpoint:O,token:q};try{c.setItem(E,JSON.stringify(i))}catch{}n("local-connection-status").textContent="\uB0B4 \uCEF4\uD4E8\uD130\uC5D0 \uC5F0\uACB0\uB428",w.close(),n("workspace-interface").inert=!1,s()}catch(B){i=null;try{c.removeItem(E)}catch{}y.textContent=B.name==="TypeError"||B.name==="TimeoutError"?"\uC5F0\uACB0\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. \uB85C\uCEEC csync \uC2E4\uD589 \uC5EC\uBD80\uC640 \uBE0C\uB77C\uC6B0\uC800\uC758 \uB85C\uCEEC \uB124\uD2B8\uC6CC\uD06C \uC811\uADFC \uAD8C\uD55C\uC744 \uD655\uC778\uD558\uC138\uC694.":B.message,w.showModal()}finally{I=!1,n("local-connect-submit").disabled=!1}}}w.addEventListener("cancel",O=>O.preventDefault()),b.onsubmit=O=>(O.preventDefault(),L(n("local-connect-endpoint").value.trim(),n("local-connect-token").value.trim())),n("workspace-interface").inert=!0;let A=new URLSearchParams(t.hash.slice(1)),N=A.get("csyncEndpoint"),R=A.get("csyncToken");if(N!==null||R!==null)r.replaceState(null,"",t.pathname+t.search),n("local-connect-endpoint").value=N??"",n("local-connect-token").value=R??"",w.showModal();else{let O;try{O=JSON.parse(c.getItem(E))}catch{}O?.endpoint&&O?.token?L(O.endpoint,O.token):w.showModal()}return{ready:g,request:p,remote:!0}}function ct(e=globalThis.document){let t=d=>e.getElementById(d),r=t("overwrite-dialog"),c,u=d=>{let n=c;c=void 0,r.close(),n?.(d)};return t("overwrite-cancel").onclick=()=>u(!1),t("overwrite-confirm").onclick=()=>u(!0),r.addEventListener("cancel",d=>{d.preventDefault(),u(!1)}),r.addEventListener("close",()=>{let d=c;c=void 0,d?.(!1)}),({conflicts:d,inPlace:n,output:a})=>{if(c)throw Error("\uB36E\uC5B4\uC4F0\uAE30 \uD655\uC778\uC774 \uC774\uBBF8 \uC9C4\uD589 \uC911\uC785\uB2C8\uB2E4.");return t("overwrite-title").textContent=`${n?"\uC6D0\uBCF8":"\uAE30\uC874"} \uD30C\uC77C ${d.length}\uAC1C \uB36E\uC5B4\uC4F0\uAE30`,t("overwrite-path").textContent=a,t("overwrite-warning").textContent=`${n?"\uC120\uD0DD\uD55C \uC6D0\uBCF8":"\uCD9C\uB825 \uD3F4\uB354\uC758 \uAE30\uC874"} \uB0B4\uC6A9\uC774 \uBCC0\uD658 \uACB0\uACFC\uB85C \uAD50\uCCB4\uB429\uB2C8\uB2E4.${n?" \uD655\uC778 \uC774\uD6C4 \uC6D0\uBCF8\uC774 \uBC14\uB00C\uBA74 \uC800\uC7A5\uC744 \uC911\uB2E8\uD569\uB2C8\uB2E4.":""} \uCDE8\uC18C\uD558\uBA74 \uC800\uC7A5\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.`,t("overwrite-files").replaceChildren(...d.map(({path:i})=>{let s=e.createElement("li");return s.textContent=i,s})),new Promise(i=>{c=i,r.showModal(),t("overwrite-cancel").focus()})}}function lt(){let e=document.getElementById("snackbars"),t=new Map;return function(c,u="info"){let d=u+":"+c;if(!c||t.has(d))return;let n={error:["\uC791\uC5C5\uC744 \uC644\uB8CC\uD558\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4","!","\uC624\uB958"],success:["\uC644\uB8CC\uD588\uC2B5\uB2C8\uB2E4","\u2713","\uC131\uACF5"],warning:["\uD655\uC778\uC774 \uD544\uC694\uD569\uB2C8\uB2E4","!","\uC8FC\uC758"],info:["\uC548\uB0B4","i","\uC548\uB0B4"]}[u],a=document.createElement("div");a.className="snackbar snackbar-"+u,a.setAttribute("role",u==="error"||u==="warning"?"alert":"status");let i=document.createElement("span");i.className="snackbar-icon",i.textContent=n[1],i.setAttribute("aria-hidden","true");let s=document.createElement("div");s.className="snackbar-content";let g=document.createElement("strong");g.textContent=n[0];let E=document.createElement("p");E.textContent=c,s.append(g,E);let p=document.createElement("button");p.type="button",p.className="snackbar-close",p.textContent="\xD7",p.setAttribute("aria-label",n[2]+" \uC54C\uB9BC \uB2EB\uAE30"),p.onclick=()=>{a.remove(),t.delete(d)},a.append(i,s,p),t.set(d,a),e.append(a)}}function dt(e){let t=document.getElementById("help-dialog");document.getElementById("open-help").addEventListener("click",()=>{t.showModal(),document.getElementById("help-"+e()).scrollIntoView({block:"start"})}),document.getElementById("open-token-guide").addEventListener("click",()=>{t.showModal(),document.getElementById("help-token").scrollIntoView({block:"start"})}),t.querySelectorAll(".help-nav a").forEach(r=>{r.addEventListener("click",c=>{c.preventDefault(),document.querySelector(r.getAttribute("href")).scrollIntoView({block:"start"})})})}var Xe;function Re(){return Xe??=import("./chunks/monaco-36ZGUH4Y.js").catch(e=>{throw Xe=void 0,Error("\uBCF8\uBB38 \uBE44\uAD50 \uB3C4\uAD6C\uB97C \uBD88\uB7EC\uC624\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4. \uB2E4\uC2DC \uC2DC\uB3C4\uD558\uC138\uC694. "+e.message)}),Xe}function ft(e,t){let r=URL.createObjectURL(new Blob([t],{type:"text/plain;charset=utf-8"})),c=document.createElement("a");try{c.href=r,c.download=e,document.body.append(c),c.click()}finally{c.remove(),setTimeout(()=>URL.revokeObjectURL(r),1e3)}}var ut={preview:"\uC5C5\uB85C\uB4DC \uBBF8\uB9AC\uBCF4\uAE30",fetch:"\uC6D0\uACA9 \uBCC0\uACBD \uD655\uC778",pull:"\uAC00\uC838\uC624\uAE30",push:"\uC5C5\uB85C\uB4DC",restore:"\uBCF5\uAD6C\xB7\uC6D0\uBCF5"},Ht={running:"\uC9C4\uD589 \uC911",succeeded:"\uC644\uB8CC",failed:"\uC2E4\uD328"},pt=e=>e?new Date(e).toLocaleString("ko-KR",{timeZone:"Asia/Seoul"}):"-";function gt(e){return["confluence-sync \uC2E4\uD589 \uB85C\uADF8",`\uC791\uC5C5: ${ut[e.kind]??e.kind}`,`\uC0C1\uD0DC: ${Ht[e.state]??e.state}`,`\uC791\uC5C5 ID: ${e.id}`,`\uC2DC\uC791 (Asia/Seoul): ${pt(e.startedAt)}`,`\uC885\uB8CC (Asia/Seoul): ${pt(e.finishedAt)}`,"",e.log??""].join(`
|
|
2
2
|
`)+`
|
|
3
|
-
`}function gt(e){let n=Object.hasOwn(ft,e.kind)?e.kind:"job",i=String(e.id??"").replace(/[^a-zA-Z0-9-]/g,"").slice(0,36)||"current";return`csync-${n}-${i}.log`}function mt({api:e,selection:n,setBusy:i,isBusy:c,status:f,start:d}){let t=p=>document.getElementById(p),o=t("sync-restore-dialog"),g,s=()=>JSON.stringify(n());function m(){g=void 0,o.close()}async function y(p,w){if(c())return;let x=s(),v=n();i(!0);try{let b=await e("/api/sync/restore",{...v,path:p,overwrite:w});if(x!==s())return;g={request:v,confirmationId:b.confirmationId,identity:x},t("sync-restore-title").textContent=w?"\uB85C\uCEEC \uC218\uC815\uC744 \uBC84\uB9AC\uACE0 \uC6D0\uACA9 \uCD5C\uC2E0\uC73C\uB85C \uB418\uB3CC\uB9B4\uAE4C\uC694?":"\uB204\uB77D\uB41C \uBB38\uC11C\uB97C \uC6D0\uACA9\uC5D0\uC11C \uB2E4\uC2DC \uBC1B\uC744\uAE4C\uC694?",t("sync-restore-path").textContent=b.path,t("sync-restore-warning").textContent=w?"\uC774 \uBB38\uC11C\uC640 \uC6D0\uACA9\uC5D0\uC11C \uCC38\uC870\uD558\uB294 \uCCA8\uBD80\uC758 \uB85C\uCEEC \uC218\uC815\uC774 \uC0AC\uB77C\uC9D1\uB2C8\uB2E4. \uC6D0\uACA9 \uCD5C\uC2E0 \uB0B4\uC6A9\uC73C\uB85C \uAD50\uCCB4\uD558\uBA70 \uB2E4\uB978 \uBB38\uC11C\uB294 \uC720\uC9C0\uD569\uB2C8\uB2E4.":"\uC9C0\uC815\uD55C \uBB38\uC11C\uC640 \uCC38\uC870 \uCCA8\uBD80\uB9CC \uB2E4\uC2DC \uBC1B\uC2B5\uB2C8\uB2E4. \uAE30\uC874 \uD30C\uC77C\uACFC \uB0B4\uC6A9\uC774 \uB2E4\uB978 \uAE30\uC874 \uCCA8\uBD80\uB294 \uB36E\uC5B4\uC4F0\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.",t("sync-restore-warning").textContent+=` \uAC00\uC838\uC624\uAE30 \uD615\uC2DD: ${v.format==="obsidian"?"Obsidian":"Markdown"}.`,t("sync-restore-confirm").textContent=w?"\uB85C\uCEEC \uC218\uC815 \uBC84\uB9AC\uACE0 \uC6D0\uBCF5":"\uC6D0\uACA9\uC5D0\uC11C \uBCF5\uAD6C",o.showModal(),t("sync-restore-cancel").focus()}catch(b){f(b.message,!0)}finally{i(!1)}}return t("sync-restore-cancel").onclick=m,o.addEventListener("cancel",m),t("sync-restore-confirm").onclick=async()=>{if(!g||c())return;if(g.identity!==s()){m(),f("\uB300\uC0C1\uC774\uB098 \uC5F0\uACB0 \uC124\uC815\uC774 \uBC14\uB00C\uC5C8\uC2B5\uB2C8\uB2E4. \uBCF5\uAD6C \uB300\uC0C1\uC744 \uB2E4\uC2DC \uC120\uD0DD\uD558\uC138\uC694.",!0);return}let p=g;m(),await d("restore",{...p.request,confirmationId:p.confirmationId})},{open:y}}function ht({api:e,selection:n,monaco:i,loadMonaco:c=async()=>i,notify:f}){let d=w=>document.getElementById(w),t="",o=0,g,s,m;function y(){o++,d("sync-diff-dialog").close()}d("sync-diff-close").onclick=y,d("sync-diff-dialog").addEventListener("cancel",()=>{o++});async function p(w=!1){let x=++o,v={...n(),path:t,remote:w};d("sync-diff-note").textContent=w?"\uC120\uD0DD\uD55C \uD398\uC774\uC9C0 \uBCF8\uBB38\uB9CC \uC870\uD68C\uD558\uACE0 \uC788\uC2B5\uB2C8\uB2E4\u2026":"\uC800\uC7A5\uB41C \uB85C\uCEEC \uBE44\uAD50 \uAE30\uC900\uC744 \uD655\uC778\uD558\uACE0 \uC788\uC2B5\uB2C8\uB2E4\u2026",w&&(d("sync-diff-remote").textContent="\uC6D0\uACA9 \uBE44\uAD50 \uB2E4\uC2DC \uC2DC\uB3C4"),d("sync-diff-remote").disabled=!0,d("sync-diff-editor").hidden=!0,d("sync-diff-labels").hidden=!0;try{let b=await e("/api/sync/diff",v);if(x!==o||!d("sync-diff-dialog").open||!w&&b.before===null&&b.canRemote&&(d("sync-diff-note").textContent="\uC800\uC7A5\uB41C \uAE30\uC900\uBCF8\uC774 \uC5C6\uC5B4 \uC120\uD0DD\uD55C \uC6D0\uACA9 \uD398\uC774\uC9C0 \uBCF8\uBB38\uC744 \uC870\uD68C\uD558\uACE0 \uC788\uC2B5\uB2C8\uB2E4\u2026",d("sync-diff-remote").hidden=!1,d("sync-diff-remote").textContent="\uC6D0\uACA9 \uBE44\uAD50 \uB2E4\uC2DC \uC2DC\uB3C4",b=await e("/api/sync/diff",{...v,remote:!0}),x!==o||!d("sync-diff-dialog").open)||(d("sync-diff-note").textContent=b.note,d("sync-diff-before-label").textContent=b.source==="remote"?"\uD604\uC7AC \uC6D0\uACA9 \uBCF8\uBB38 (\uADFC\uC0AC \uBCC0\uD658)":b.source==="new"?"\uC0C8 \uBB38\uC11C (\uC6D0\uACA9 \uC5C6\uC74C)":"\uB9C8\uC9C0\uB9C9 \uB3D9\uAE30\uD654 \uAE30\uC900",d("sync-diff-remote").hidden=!b.canRemote,d("sync-diff-remote").textContent=b.source==="remote"?"\uC6D0\uACA9 \uC0C8\uB85C\uACE0\uCE68":"\uC6D0\uACA9\uACFC \uBE44\uAD50 \xB7 \uBCF8\uBB38 1\uD68C \uC870\uD68C",b.before===null))return;if(d("sync-diff-editor").hidden=!1,d("sync-diff-labels").hidden=!1,!g){let M=await c();if(x!==o||!d("sync-diff-dialog").open)return;s=M.editor.createModel("","markdown"),m=M.editor.createModel("","markdown"),g=M.editor.createDiffEditor(d("sync-diff-editor"),{automaticLayout:!0,readOnly:!0,originalEditable:!1,ignoreTrimWhitespace:!1,renderSideBySide:!0,useInlineViewWhenSpaceIsLimited:!0,renderSideBySideInlineBreakpoint:700,minimap:{enabled:!1},wordWrap:"on",scrollBeyondLastLine:!1,fontSize:12}),g.setModel({original:s,modified:m}),g.getOriginalEditor().updateOptions({ariaLabel:"\uAE30\uC900 Markdown"}),g.getModifiedEditor().updateOptions({ariaLabel:"\uD604\uC7AC \uB85C\uCEEC Markdown"})}s.setValue(b.before),m.setValue(b.after),g.layout()}catch(b){x===o&&(d("sync-diff-note").textContent=b.message,f(b.message,"error"))}finally{x===o&&(d("sync-diff-remote").disabled=!1)}}return d("sync-diff-remote").onclick=()=>p(!0),{open:async(w,x=!0)=>{t=w,d("sync-diff-path").textContent=t,d("sync-diff-remote").hidden=!x,d("sync-diff-dialog").showModal(),await p(x)}}}function xt({api:e,selection:n,changed:i,busy:c,status:f,update:d,compare:t,restore:o=()=>{},canRestore:g=()=>!1,scopeKey:s=()=>""}){let m=a=>document.getElementById(a),y="csync.staging.views.v1",p=new Set(["same","new","changed","moved","unavailable"]),w=[],x="",v="",b=null,M=!1,I="",A="",T,F=!0,L=null,W=()=>{let{verify:a,...h}=n();return JSON.stringify([h,s()])},O=()=>JSON.stringify([n().base,n().referenceRoots]),H=()=>w.filter(a=>!a.unmapped&&a.remoteState!=="new"&&a.status!=="unavailable"&&(a.staged?a.stale:a.status!=="same")).map(a=>a.path),V=()=>w.filter(a=>a.staged).map(a=>a.path),$=()=>!!x&&x===W();function j(){try{let a=JSON.parse(localStorage.getItem(y));return Array.isArray(a)?a:[]}catch{return[]}}function ae(){try{let a=j().filter(h=>h?.key!==v);a.push({key:v,scannedAt:b,localCheckFailed:!!A,rows:w.map(({path:h,status:E,staged:l,stale:S,pageId:P,renamed:r,unmapped:z,recoverable:K,localUnverified:X,remoteState:Y,remoteVersion:ne,baselineVersion:ve})=>({path:h,status:E,staged:l,stale:S,pageId:P,renamed:r,unmapped:z,recoverable:K,localUnverified:X,remoteState:Y,remoteVersion:ne,baselineVersion:ve}))}),localStorage.setItem(y,JSON.stringify(a.slice(-5)))}catch{}}function te(){let a=M&&!$();if(m("sync-stage-note").classList.toggle("stale",a||!!A),A){m("sync-stage-note").textContent=(a?"\uC774\uC804 \uC870\uD68C \uACB0\uACFC\uC785\uB2C8\uB2E4. ":"")+"\uB85C\uCEEC \uBCC0\uACBD \uD655\uC778 \uC2E4\uD328: "+A+" \uC6D0\uACA9 \uC870\uD68C \uACB0\uACFC\uB294 \uC544\uB798\uC5D0 \uD45C\uC2DC\uD569\uB2C8\uB2E4. \uC5C5\uB85C\uB4DC\uD558\uB824\uBA74 \uB85C\uCEEC \uC624\uB958\uB97C \uD574\uACB0\uD55C \uB4A4 \uB2E4\uC2DC \uD655\uC778\uD558\uC138\uC694.";return}if(a){let h=new Date(b).toLocaleString("ko-KR",{timeZone:"Asia/Seoul"});m("sync-stage-note").textContent=`\uC774\uC804 \uC870\uD68C \uACB0\uACFC\uC785\uB2C8\uB2E4 (${h}). \uD30C\uC77C\uC774\uB098 \uC5C5\uB85C\uB4DC \uC120\uD0DD\uC774 \uBC14\uB00C\uC5C8\uC744 \uC218 \uC788\uC2B5\uB2C8\uB2E4. \uB85C\uCEEC \uBCC0\uACBD\uC744 \uC790\uB3D9\uC73C\uB85C \uB2E4\uC2DC \uD655\uC778\uD55C \uB4A4 \uC5C5\uB85C\uB4DC\uD560 \uBB38\uC11C\uB97C \uCCB4\uD06C\uD558\uACE0 \uBBF8\uB9AC\uBCF4\uAE30\uB97C \uC9C4\uD589\uD558\uC138\uC694.`}else m("sync-stage-note").textContent=M?w.some(h=>h.status!=="same"||h.staged||h.remoteState&&h.remoteState!=="unchanged")?w.some(h=>["unknown","unavailable"].includes(h.remoteState))?"\uC77C\uBD80 \uBB38\uC11C\uC758 \uC6D0\uACA9 \uC815\uBCF4\uB97C \uD655\uC778\uD558\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4. \uB85C\uCEEC \uC218\uC815\uC744 \uB73B\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. Fetch\uB85C \uB2E4\uC2DC \uC870\uD68C\uD558\uACE0 \uBB38\uC11C\uC758 \uC0C1\uC138 \uC0AC\uC720\uB97C \uD655\uC778\uD558\uC138\uC694.":w.some(h=>h.unmapped)?"\uBC1B\uAE30 \uBBF8\uC644\uB8CC \uBB38\uC11C\uAC00 \uC788\uC2B5\uB2C8\uB2E4. Fetch \uD6C4 \uB2E4\uC2DC \uAC00\uC838\uC624\uBA74 \uC6D0\uACA9\uACFC \uC77C\uCE58\uD558\uB294 \uBB38\uC11C\uB9CC \uC5F0\uACB0\uD558\uBA70 \uB85C\uCEEC \uC218\uC815\uC740 \uBCF4\uC874\uD569\uB2C8\uB2E4.":w.some(h=>h.staged&&h.stale)?"\uC218\uC815\uB418\uAC70\uB098 \uBC94\uC704\uB97C \uBC97\uC5B4\uB09C \uB300\uC0C1\uC774 \uC788\uC2B5\uB2C8\uB2E4. \uCD5C\uC2E0 \uB0B4\uC6A9 \uBC18\uC601\uC744 \uB204\uB974\uAC70\uB098 \uCCB4\uD06C\uB97C \uD574\uC81C\uD574 \uC5C5\uB85C\uB4DC\uC5D0\uC11C \uC81C\uC678\uD558\uC138\uC694.":w.some(h=>h.remoteState==="new"||h.status==="same"&&h.remoteState==="changed")?"\uC6D0\uACA9 \uC2E0\uADDC\xB7\uBCC0\uACBD \uBB38\uC11C\uB294 \uC704\uC758 \uAC00\uC838\uC624\uAE30\uB85C \uBC1B\uC73C\uC138\uC694. \uC5C5\uB85C\uB4DC \uCCB4\uD06C\uB294 \uB85C\uCEEC \uBB38\uC11C\uB97C \uBCF4\uB0BC \uB54C\uB9CC \uC0AC\uC6A9\uD569\uB2C8\uB2E4.":"\uCCB4\uD06C\uD558\uBA74 \uC5C5\uB85C\uB4DC\uC5D0 \uBC14\uB85C \uD3EC\uD568\uB429\uB2C8\uB2E4. \uCCB4\uD06C\uB97C \uD574\uC81C\uD558\uBA74 \uC81C\uC678\uB418\uBA70 \uC6D0\uBCF8 \uD30C\uC77C\uC740 \uC720\uC9C0\uB429\uB2C8\uB2E4. \uC120\uD0DD \uD6C4 \uC5C5\uB85C\uB4DC \uBBF8\uB9AC\uBCF4\uAE30\uB97C \uC9C4\uD589\uD558\uC138\uC694.":"\uB85C\uCEEC\uC5D0 \uBCC0\uACBD\uB41C \uBB38\uC11C\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4. \uC6D0\uACA9 \uC2E0\uADDC\xB7\uBCC0\uACBD\uC740 Fetch\uB85C \uD655\uC778\uD558\uC138\uC694.":"\uB85C\uCEEC \uBCC0\uACBD\uC744 \uC790\uB3D9\uC73C\uB85C \uD655\uC778\uD569\uB2C8\uB2E4. \uC6D0\uACA9 \uC0C1\uD0DC\uB294 Fetch\uB97C \uB20C\uB7EC \uD655\uC778\uD558\uC138\uC694."}function Z(){m("sync-stage-list").replaceChildren();let a=l=>l.localUnverified?"attention":l.remoteState==="new"?l.recoverable||l.status==="unavailable"?"receive":"conflict":l.unmapped?"attention":l.remoteState==="changed"&&["changed","moved","new"].includes(l.status)?"conflict":l.status==="unavailable"||l.stale||["unknown","unavailable"].includes(l.remoteState)?"attention":l.status==="same"&&l.remoteState==="changed"?"receive":"send",h={receive:0,conflict:1,attention:2,send:3},E;for(let l of w.filter(S=>S.status!=="same"||S.staged||S.remoteState&&S.remoteState!=="unchanged").sort((S,P)=>h[a(S)]-h[a(P)])){let S=a(l);if(E!==S){let J=document.createElement("h3");J.className="stage-group-heading",J.textContent={receive:"\u2193 \uBC1B\uC744 \uBB38\uC11C \xB7 \uC6D0\uACA9 \uC2E0\uADDC\xB7\uBCC0\uACBD",conflict:"! \uC591\uCABD \uBCC0\uACBD \xB7 \uBE44\uAD50 \uD544\uC694",attention:"! \uC5F0\uACB0 \uD655\uC778 \uD544\uC694",send:"\u2191 \uBCF4\uB0BC \uBCC0\uACBD \xB7 \uB85C\uCEEC \uC791\uC5C5"}[S],m("sync-stage-list").append(J),E=S}let P=document.createElement("div"),r=document.createElement("label"),z=document.createElement("input"),K=document.createElement("span"),X=document.createElement("small");z.type="checkbox",z.value=l.path,z.checked=l.staged,z.setAttribute("aria-label",l.path+" \uC5C5\uB85C\uB4DC\uC5D0 \uD3EC\uD568"),K.textContent=l.path,K.title=[l.path,...l.remoteReasons||[]].join(`
|
|
4
|
-
`);let Y=l.renamed?"\uB85C\uCEEC \uACBD\uB85C \uBCC0\uACBD":{new:"\uB85C\uCEEC \uC2E0\uADDC",changed:"\uB85C\uCEEC \uC218\uC815",moved:"\uB85C\uCEEC \uC774\uB3D9",same:"\uBCC0\uACBD \uC5C6\uC74C",unavailable:"\uD30C\uC77C \uD655\uC778"}[l.status],ne=document.createElement("span"),ve=document.createElement("span"),Pe=l.remoteState==="new"&&!l.unmapped&&l.status!=="unavailable"||l.remoteState==="changed"&&["changed","moved","new"].includes(l.status),Ge=l.localUnverified||l.unmapped||l.stale||Pe||["unknown","unavailable"].includes(l.remoteState),Ze=l.remoteState==="new"&&!Pe?"incoming":Ge?"attention":l.staged?"included":l.remoteState==="changed"?"moved":l.status,Qe={incoming:'<path d="M12 3v12m-5-5 5 5 5-5M4 17v4h16v-4"/>',included:'<circle cx="12" cy="12" r="9"/><path d="m8 12 3 3 5-6"/>',new:'<path d="M12 5v14M5 12h14"/>',changed:'<circle cx="12" cy="12" r="3" fill="currentColor" stroke="none"/>',moved:'<path d="M4 8h15m-4-4 4 4-4 4M20 16H5m4-4-4 4 4 4"/>',same:'<path d="m5 12 4 4L19 6"/>',attention:'<path d="m12 3 10 18H2L12 3ZM12 9v5m0 3v.1"/>'};if(ne.className="stage-state-icon",ne.setAttribute("aria-hidden","true"),ne.innerHTML='<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round">'+(Qe[Ze]||Qe.attention)+"</svg>",ve.textContent=l.localUnverified?{changed:"\uC6D0\uACA9 \uBCC0\uACBD",new:"\uC6D0\uACA9 \uC2E0\uADDC",unknown:"\uC6D0\uACA9 \uD655\uC778 \uD544\uC694",unavailable:"\uC6D0\uACA9 \uC870\uD68C \uBD88\uAC00"}[l.remoteState]+" \xB7 \uB85C\uCEEC \uBBF8\uD655\uC778":l.unmapped?"\uBC1B\uAE30 \uBBF8\uC644\uB8CC \xB7 \uC6D0\uACA9 \uB300\uC870 \uD544\uC694":l.remoteState==="new"?Pe?"\uC6D0\uACA9 \uC2E0\uADDC \xB7 \uB85C\uCEEC \uACBD\uB85C \uD655\uC778":"\uC6D0\uACA9 \uC2E0\uADDC":Pe?l.stale?"\uC591\uCABD \uC218\uC815 \xB7 \uCD5C\uC2E0 \uB0B4\uC6A9 \uD655\uC778 \uD544\uC694":"\uC591\uCABD \uC218\uC815 \xB7 \uCDA9\uB3CC \uC8FC\uC758":l.stale?"\uCD5C\uC2E0 \uB0B4\uC6A9 \uD655\uC778 \uD544\uC694":l.remoteState==="changed"?l.remoteReasons?.some(J=>J.includes("\uC704\uCE58 \uBCC0\uACBD"))?"\uC6D0\uACA9 \uC704\uCE58 \uBCC0\uACBD":"\uC6D0\uACA9 \uC218\uC815":l.remoteState==="unavailable"?"\uC6D0\uACA9 \uC870\uD68C \uBD88\uAC00":l.remoteState==="unknown"?"\uC6D0\uACA9 \uD655\uC778 \uD544\uC694":Y+(l.staged?" \xB7 \uC5C5\uB85C\uB4DC \uD3EC\uD568":""),z.remoteOnly=l.status==="same"&&["unknown","unavailable"].includes(l.remoteState)||l.unmapped&&!l.staged||l.remoteState==="new"&&!l.staged||l.status==="same"&&l.remoteState==="changed"&&!l.staged,z.localUnverified=!!l.localUnverified,z.remoteOnly&&(z.title=["unknown","unavailable"].includes(l.remoteState)?"\uC6D0\uACA9 \uC815\uBCF4\uB97C \uD655\uC778\uD558\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4. Fetch\uB85C \uB2E4\uC2DC \uC870\uD68C\uD558\uC138\uC694.":l.remoteState==="new"?"\uC544\uC9C1 \uBC1B\uC9C0 \uC54A\uC740 \uC6D0\uACA9 \uBB38\uC11C\uC785\uB2C8\uB2E4. Pull\uB85C \uAC00\uC838\uC624\uC138\uC694.":"\uC6D0\uACA9\uC5D0\uC11C\uB9CC \uBCC0\uACBD\uB418\uC5C8\uC2B5\uB2C8\uB2E4. diff\uB97C \uD655\uC778\uD558\uACE0 Pull\uB85C \uAC00\uC838\uC624\uC138\uC694."),X.append(ne,ve),P.className="sync-stage-row"+(Ge?" needs-attention":l.staged?" is-included":a(l)==="receive"?" is-incoming":""),r.className="sync-stage-choice",X.className="stage-status stage-status-"+Ze,z.onchange=()=>k(z.checked?"add":"remove",[l.path]),r.append(z,K),P.append(r,X),!l.unmapped&&l.staged&&l.stale&&l.status!=="unavailable"){let J=document.createElement("button");J.type="button",J.textContent="\u21BB \uCD5C\uC2E0 \uB0B4\uC6A9 \uBC18\uC601",J.setAttribute("aria-label",l.path+" \uCD5C\uC2E0 \uB0B4\uC6A9 \uBC18\uC601"),J.onclick=()=>k("add",[l.path]),P.append(J)}if(!l.unmapped&&l.status!=="unavailable"&&l.remoteState!=="new"){let J=document.createElement("button");J.type="button",J.textContent="\u2194 diff \uBCF4\uAE30",J.setAttribute("aria-label",l.path+" \uBCC0\uACBD \uBE44\uAD50"),J.onclick=()=>t(l.path),P.append(J)}if(!(l.status==="same"&&["unknown","unavailable"].includes(l.remoteState))&&!l.localUnverified&&l.remoteState!=="new"&&l.pageId&&l.status!=="new"&&l.status!=="moved"){let J=document.createElement("button");J.type="button",J.className="stage-restore",J.isRestore=!0;let Ne=document.createElement("span"),Ye=document.createElement("span");Ne.className="stage-action-icon",Ne.setAttribute("aria-hidden","true"),Ne.innerHTML='<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="'+(l.status==="unavailable"?"M12 3v12m-5-5 5 5 5-5M4 17v4h16v-4":"M3 11a9 9 0 1 1 2.64 6.36M3 3v8h8")+'"/></svg>',Ye.textContent=l.status==="unavailable"?"\uC6D0\uACA9\uC5D0\uC11C \uBCF5\uAD6C":"\uC6D0\uACA9\uC73C\uB85C \uC6D0\uBCF5",J.append(Ne,Ye),J.setAttribute("aria-label",l.path+" \uC6D0\uACA9 \uCD5C\uC2E0\uC73C\uB85C \uBCF5\uAD6C"),J.onclick=()=>{$()&&g()&&o(l.path,l.status!=="unavailable")},P.append(J)}m("sync-stage-list").append(P)}te()}function pe(){let a=O();if(v===a)return;v=a,x="",w=[],b=null,M=!1,I="",A="";let h=j().find(E=>E?.key===a);h&&Number.isFinite(Date.parse(h.scannedAt))&&Array.isArray(h.rows)&&h.rows.every(E=>E&&typeof E.path=="string"&&p.has(E.status)&&typeof E.staged=="boolean"&&typeof E.stale=="boolean")&&(A=h.localCheckFailed?"\uC774\uC804 \uB85C\uCEEC \uBCC0\uACBD \uD655\uC778\uC5D0 \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4. \uB2E4\uC2DC \uD655\uC778\uD558\uC138\uC694.":"",w=h.rows,b=h.scannedAt,M=!0),Z()}function Q(a){pe(),x&&x!==W()&&(x="",te()),m("sync-stage-scan").disabled=a||!n().base,m("sync-stage-add").disabled=a||!$()||!H().length,m("sync-stage-remove").disabled=a||!$()||!V().length,m("sync-stage-count").textContent=`${M&&!$()?"\uC774\uC804 \uC870\uD68C \xB7 ":""}${w.filter(h=>h.staged).length}\uAC1C \uC5C5\uB85C\uB4DC \uC608\uC815`;for(let h of m("sync-stage-list").querySelectorAll("input"))h.disabled=a||!$()||h.remoteOnly||h.localUnverified;for(let h of m("sync-stage-list").querySelectorAll("button"))h.disabled=a||h.isRestore&&(!$()||!g())}async function C(a,h,E=!1){if(a&&(!$()||!h?.length))return;let l=W(),S=n(),P=!1;E||c(!0),E||(m("sync-stage-note").textContent=a==="remove"?"\uC5C5\uB85C\uB4DC \uB300\uC0C1\uC5D0\uC11C \uC81C\uC678\uD558\uACE0 \uC788\uC2B5\uB2C8\uB2E4\u2026":a==="add"?"\uC120\uD0DD\uD55C \uBB38\uC11C\uB97C \uD655\uC778\uD574 \uC5C5\uB85C\uB4DC\uC5D0 \uD3EC\uD568\uD558\uACE0 \uC788\uC2B5\uB2C8\uB2E4\u2026":"\uB85C\uCEEC \uBB38\uC11C\uC758 \uBCC0\uACBD\uC744 \uAC80\uC0AC\uD558\uACE0 \uC788\uC2B5\uB2C8\uB2E4\u2026");try{let r,z="";try{r=await e("/api/sync/staging",{...S,...a?{action:a,paths:h}:{}},void 0,{background:E})}catch(X){if(a||l!==W())throw X;z=X.message,r=await e("/api/sync/staging",{...S,remoteOnly:!0},void 0,{background:E})}if(l!==W())return;if(!Array.isArray(r.rows))throw new Error("\uBCC0\uACBD \uBAA9\uB85D \uC751\uB2F5\uC744 \uD655\uC778\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. \uB2E4\uC2DC \uBD88\uB7EC\uC624\uC138\uC694.");let K=m("sync-stage-remote-note");if(K&&(K.textContent=r.remoteCheckedAt?`\uC6D0\uACA9 \uD655\uC778: ${new Date(r.remoteCheckedAt).toLocaleString("ko-KR",{timeZone:"Asia/Seoul"})}${r.remoteExpired?" \xB7 \uC774\uC804 \uC870\uD68C \uACB0\uACFC\uC785\uB2C8\uB2E4. Fetch\uB85C \uAC31\uC2E0\uD558\uC138\uC694.":""}`:"\uC6D0\uACA9 \uC0C1\uD0DC \uBBF8\uD655\uC778 \xB7 Fetch\uB97C \uB204\uB974\uBA74 \uBC84\uC804\uACFC \uC704\uCE58\uB97C \uBB36\uC5B4\uC11C \uC870\uD68C\uD569\uB2C8\uB2E4."),E&&$()&&r.revision&&r.revision===I&&A===z)return;A=z,I=r.revision||"",P=!0,i(),w=r.rows,x=l,M=!0,(!a||!b)&&(b=new Date().toISOString()),ae(),Z(),m("sync-stage-scan").hidden=!0,a&&f(a==="add"?"\uC5C5\uB85C\uB4DC\uC5D0 \uD3EC\uD568\uD588\uC2B5\uB2C8\uB2E4. \uBBF8\uB9AC\uBCF4\uAE30 \uD6C4 \uC5C5\uB85C\uB4DC\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.":"\uC5C5\uB85C\uB4DC\uC5D0\uC11C \uC81C\uC678\uD588\uC2B5\uB2C8\uB2E4. \uC6D0\uBCF8 \uD30C\uC77C\uC740 \uC720\uC9C0\uB429\uB2C8\uB2E4.",!1,"success")}catch(r){if(l!==W())return;P=!0,i(),x="",Z(),E?(m("sync-stage-note").textContent="\uB85C\uCEEC \uC790\uB3D9 \uD655\uC778 \uC2E4\uD328: "+r.message+" \uC774\uC804 \uBAA9\uB85D\uC740 \uC720\uC9C0\uB429\uB2C8\uB2E4.",m("sync-stage-scan").hidden=!1):f(r.message,!0)}finally{E?P&&d():(c(!1),d())}}async function k(a,h,E=!1){if(E&&L)return;let l=W(),S=(L??Promise.resolve()).catch(()=>{}).then(()=>l===W()?C(a,h,E):void 0);L=S;try{await S}finally{L===S&&(L=null)}}m("sync-stage-scan").onclick=()=>k(),m("sync-stage-add").onclick=()=>k("add",H()),m("sync-stage-remove").onclick=()=>k("remove",V());function R(a){F=!1;let h=async()=>{try{!F&&await a()&&await k(void 0,void 0,!0)}finally{F||(T=setTimeout(h,5e3))}};return clearTimeout(T),T=setTimeout(h,100),()=>{F=!0,clearTimeout(T)}}return{idle:()=>L??Promise.resolve(),remoteOnlyCount:()=>$()?w.filter(a=>a.status==="same"&&a.remoteState==="changed"||(a.recoverable||a.status==="unavailable")&&a.remoteState==="new").length:0,startWatching:R,update:Q,ready:()=>$()&&!A&&w.some(a=>a.staged)&&!w.some(a=>a.staged&&(a.stale||a.unmapped)),reload:(a=!1)=>k(void 0,void 0,a)}}function bt({api:e,context:n,setBusy:i,changed:c,renderConfig:f,status:d}){let t=I=>document.getElementById(I),o=n().base,g="",s="",m=!1,y=null;t("sync-env-toggle").onclick=()=>{let I=t("sync-env-toggle").getAttribute("aria-expanded")!=="true";t("sync-env-toggle").setAttribute("aria-expanded",String(I)),t("sync-env-body").hidden=!I,t("sync-env-chevron").textContent=I?"\u25BE":"\u25B8",t("sync-env-toggle-label").textContent=I?"\uC811\uAE30":"\uD3BC\uCE58\uAE30"};let p=()=>t("sync-env-import-mode").checked,w=()=>`${p()?"import":"base"}:${g}`,x=()=>({base:n().base,envId:p()?g||"not-imported":""});function v(){y=null,t("sync-env-confirm").open&&t("sync-env-confirm").close()}function b(I){m=I,o!==n().base&&(o=n().base,g="",s="",t("sync-env-file").value="",t("sync-env-base-mode").checked=!0,t("sync-env-import-mode").checked=!1,v());for(let A of["sync-env-base-mode","sync-env-import-mode"])t(A).disabled=m;t("sync-env-import-controls").hidden=!p(),t("sync-env-file-name").textContent=s||"\uC120\uD0DD\uD55C \uD30C\uC77C \uC5C6\uC74C",t("sync-env-choose").disabled=m||!o,t("sync-env-save").disabled=m||!g||!p(),t("sync-env-source-note").textContent=p()?"\uAC00\uC838\uC628 \uC124\uC815\uC740 \uD604\uC7AC \uC6F9 \uC791\uC5C5\uC5D0\uB9CC \uC801\uC6A9\uB429\uB2C8\uB2E4. \uC0C8\uB85C\uACE0\uCE68\uD558\uBA74 \uB2E4\uC2DC \uAC00\uC838\uC640\uC57C \uD569\uB2C8\uB2E4.":"\uB85C\uCEEC \uBB38\uC11C\uC5D0\uC11C \uC120\uD0DD\uD55C \uAE30\uC900 \uD3F4\uB354\uC758 .env\uB9CC \uC77D\uC2B5\uB2C8\uB2E4. \uD30C\uC77C\uC774 \uC5C6\uC73C\uBA74 .env\uB97C \uAC00\uC838\uC624\uC138\uC694."}for(let I of["sync-env-base-mode","sync-env-import-mode"])t(I).onchange=()=>{v(),c(),b(m)};t("sync-env-choose").onclick=()=>{m||t("sync-env-file").click()},t("sync-env-file").onchange=async()=>{let I=t("sync-env-file").files?.[0];if(!I||m)return;if(I.size>12e3){d(".env \uD30C\uC77C\uC740 12KB \uC774\uD558 \uD14D\uC2A4\uD2B8\uC5EC\uC57C \uD569\uB2C8\uB2E4.",!0),t("sync-env-file").value="";return}let A=n().base;i(!0),v();try{let T=await I.text(),F=await e("/api/sync/env/import",{base:A,text:T,name:I.name});if(A!==n().base)return;g=F.envId,s=I.name,c(),f(F.config),d(".env\uB97C \uAC00\uC838\uC654\uC2B5\uB2C8\uB2E4. \uAE30\uC900 \uD3F4\uB354\uC758 \uD30C\uC77C\uC740 \uBCC0\uACBD\uD558\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4.",!1,"success")}catch(T){d(T.message,!0)}finally{t("sync-env-file").value="",i(!1)}};async function M(I){i(!0);try{let A=await e("/api/sync/env/save",I);t("sync-env-base-mode").checked=!0,t("sync-env-import-mode").checked=!1,c(),f(A.config),d("\uAE30\uC900 \uD3F4\uB354\uC5D0 .env\uB97C \uC800\uC7A5\uD588\uC2B5\uB2C8\uB2E4. CLI\uC5D0\uC11C\uB3C4 \uAC19\uC740 \uC124\uC815\uC744 \uC0AC\uC6A9\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.",!1,"success")}catch(A){d(A.message,!0)}finally{v(),i(!1)}}return t("sync-env-save").onclick=async()=>{if(m||!g||!p())return;let I=x();i(!0);try{let A=await e("/api/sync/env/save",I),T={...I,expectedHash:A.expectedHash};A.needsConfirmation?(y=T,t("sync-env-confirm-path").textContent=A.path,t("sync-env-confirm").showModal()):await M(T)}catch(A){d(A.message,!0)}finally{i(!1)}},t("sync-env-confirm-save").onclick=()=>{if(y&&!m)return M(y)},t("sync-env-confirm-cancel").onclick=v,t("sync-env-confirm").addEventListener("cancel",v),{update:b,identity:w,request:x}}var Jt=[["error",/^(?:✗|(?:\w*Error|오류|실패)\s*[::]|일부 작업이 실패)/],["warning",/^(?:⚠|\[경고\])/],["success",/^(?:\[(?:신규|폴더\+)\]|+\s*생성|완료(?:\s|$))/],["change",/^(?:\[변경\]|↻\s*갱신)/],["reference",/^(?:참조 링크:|\[연결\]|🔗|♻)/],["muted",/^(?:\[(?:동일|상위|폴더)\]|=\s*변경없음|·\s*상위|--dry-run:)/],["info",/^(?:base:|대상:|📁)/]];function yt(e,n){if(e.textContent===n)return;let i=document.createDocumentFragment();for(let c of n.match(/[^\n]*\n|[^\n]+$/g)??[]){let f=document.createElement("span"),d=Jt.find(([,t])=>t.test(c.trimStart()))?.[0]??"default";f.className="sync-log-line sync-log-"+d,f.textContent=c,i.append(f)}e.replaceChildren(i)}function wt({api:e,monaco:n,loadMonaco:i,context:c,setBusy:f,showSync:d,refresh:t=async()=>{},notify:o=()=>{},activity:g}){let s=r=>document.getElementById(r),m=!1,y=null,p=null,w="",x="",v,b=!1,M=!1,I="",A="\uC2A4\uD398\uC774\uC2A4 \uC804\uCCB4",T,F,L={restore:"\uC120\uD0DD\uD55C \uBB38\uC11C\uB97C \uC6D0\uACA9 \uCD5C\uC2E0\uC73C\uB85C \uBCF5\uAD6C\uD558\uB294 \uC911",preview:"\uC5C5\uB85C\uB4DC \uBBF8\uB9AC\uBCF4\uAE30\uB97C \uACC4\uC0B0\uD558\uB294 \uC911",fetch:"\uC6D0\uACA9 \uBCC0\uACBD\uC744 \uD655\uC778\uD558\uB294 \uC911",pull:"Confluence\uC5D0\uC11C \uAC00\uC838\uC624\uB294 \uC911",push:"Confluence\uC5D0 \uC5C5\uB85C\uB4DC\uD558\uB294 \uC911"},W={restore:"sync-restore-confirm",preview:"sync-preview",fetch:"sync-fetch",pull:"sync-pull-remote",push:"sync-push"};function O(r,z){T?.end(),T=g?.begin({label:L[r],detail:"\uC791\uC5C5\uC744 \uC900\uBE44\uD558\uACE0 \uC788\uC2B5\uB2C8\uB2E4.",button:z||W[r],region:"sync-results",link:"#sync-results"})}function H(){T?.end(),T=void 0}let V=new Set,$=(r,z=!1,K=z?"error":"info")=>{s("sync-status").textContent=r,s("sync-status").classList.toggle("error",z),K&&o(r,K)};function j(){return{base:c().base||"",target:"",envId:P.request().envId,verify:s("sync-verify").checked,referenceRoots:s("sync-references").value.split(/\r?\n/).map(z=>z.trim()).filter(Boolean)}}let ae=()=>s("sync-pull-format").value==="obsidian"?"obsidian":"markdown",te=()=>JSON.stringify(j()),Z=()=>JSON.stringify([c().base,P.identity()]),pe=()=>!!c().base;function Q(){y=null,p=null,w=""}function C(r,z=!1){m=r,!z&&w&&w!==te()&&(Q(),$("\uB300\uC0C1\uC774\uB098 \uC635\uC158\uC774 \uBC14\uB00C\uC5C8\uC2B5\uB2C8\uB2E4. \uB2E4\uC2DC \uBBF8\uB9AC\uBCF4\uAE30\uD574 \uC8FC\uC138\uC694.")),!z&&x&&x!==Z()&&(x="",b=!1,M=!1,I="",s("sync-config").replaceChildren(),s("sync-config-status").textContent="\uC124\uC815 \uD655\uC778 \uB610\uB294 .env \uAC00\uC838\uC624\uAE30\uB85C \uC5F0\uACB0 \uC815\uBCF4\uB97C \uBD88\uB7EC\uC624\uC138\uC694."),s("sync-log-download").disabled=!F?.log?.trim(),s("sync-job-state").hidden=!F,P.update(m),s("sync-connect").disabled=m||!c().base||!M||b,s("sync-connect").textContent=b?"\uC2A4\uD398\uC774\uC2A4 \uC5F0\uACB0\uB428":"\uC2A4\uD398\uC774\uC2A4 \uC5F0\uACB0",S.update(m);for(let Y of["sync-pull-format","sync-load","sync-verify","sync-references","sync-add-reference"])s(Y).disabled=m;s("sync-pull-format-help").textContent=ae()==="obsidian"?"\uC704\uD0A4\uB9C1\uD06C([[\uBB38\uC11C|\uC774\uB984]])\xB7\uCF5C\uC544\uC6C3\xB7\uAC01\uC8FC \uBB38\uBC95\uC73C\uB85C \uBCF5\uC6D0\uD569\uB2C8\uB2E4. \uD30C\uC77C\uBA85\uC774 \uACB9\uCE58\uAC70\uB098 HTML \uD45C \uC548\uC758 \uB9C1\uD06C\uB294 \uD638\uD658\uB418\uB294 \uC0C1\uB300 \uACBD\uB85C \uB9C1\uD06C\uB97C \uC720\uC9C0\uD569\uB2C8\uB2E4. \uC0C8\uB85C \uBC1B\uB294 \uBB38\uC11C\uC640 \uBCF5\uAD6C\xB7\uC6D0\uBCF5\uC5D0 \uC801\uC6A9\uD569\uB2C8\uB2E4.":"Markdown \uB9C1\uD06C([\uC774\uB984](\uBB38\uC11C.md))\xB7\uC81C\uBAA9\uC774 \uC788\uB294 \uC778\uC6A9\uBB38\xB7\uC704\uCCA8\uC790 \uAC01\uC8FC \uBAA9\uB85D\uC73C\uB85C \uBC1B\uC2B5\uB2C8\uB2E4. \uC0C8\uB85C \uBC1B\uB294 \uBB38\uC11C\uC640 \uBCF5\uAD6C\xB7\uC6D0\uBCF5\uC5D0 \uC801\uC6A9\uD558\uBA70 \uAE30\uC874 \uD30C\uC77C\uC744 \uC77C\uAD04 \uBCC0\uD658\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.";let K=s("sync-pull-remote");if(K){let Y=S.remoteOnlyCount();K.disabled=m||!b||!M||!Y,K.textContent=`\u2193 \uC6D0\uACA9 \uBB38\uC11C ${Y}\uAC1C \uAC00\uC838\uC624\uAE30 (Pull)`}s("sync-fetch").disabled=m||!c().base||!b||!M,s("sync-log-empty").textContent="\uBBF8\uB9AC\uBCF4\uAE30 \uB610\uB294 Fetch\xB7Pull\xB7\uBCF5\uAD6C\uB97C \uC2E4\uD589\uD558\uBA74 \uBB38\uC11C\uBCC4 \uCC98\uB9AC \uB0B4\uC5ED\uC744 \uD655\uC778\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.",s("sync-load").disabled=m||!c().base,s("sync-preview").disabled=m||!pe()||!b||!S.ready(),s("sync-push").disabled=m||!b||!M||!y||!p||w!==te(),s("sync-push").title=y?"\uBBF8\uB9AC\uBCF4\uAE30\uD55C \uBC94\uC704\uB97C \uC5C5\uB85C\uB4DC\uD569\uB2C8\uB2E4.":"\uD604\uC7AC \uC120\uD0DD\uACFC \uC124\uC815\uC73C\uB85C \uC5C5\uB85C\uB4DC \uBBF8\uB9AC\uBCF4\uAE30\uB97C \uBA3C\uC800 \uC644\uB8CC\uD558\uC138\uC694.";let X=j();s("sync-target").textContent=pe()?`\uAE30\uC900 \uD3F4\uB354 ${X.base} \u2194 ${A} \xB7 Push\uB294 \uCCB4\uD06C\uD55C \uBB38\uC11C\uB9CC`:"\uB85C\uCEEC \uBB38\uC11C\uC5D0\uC11C \uAE30\uC900 \uD3F4\uB354\uB97C \uC120\uD0DD\uD558\uC138\uC694."}function k(r){x=Z(),b=!!r.connected,M=!r.missing.length,A=r.rootPath&&r.rootPath!=="/"?`\uAE30\uC874 \uC6D0\uACA9 \uB8E8\uD2B8 ${r.rootPath}`:"\uC2A4\uD398\uC774\uC2A4 \uC804\uCCB4",I=b?`${r.baseUrl}/${r.spaceKey}/${r.rootPath||"/"}`:"",s("sync-config").replaceChildren();for(let[z,K]of[["\uC124\uC815 \uCD9C\uCC98",r.source],["\uC11C\uBC84",r.baseUrl||"\uBBF8\uC124\uC815"],["\uACC4\uC815",r.email||"\uBBF8\uC124\uC815"],["\uC2A4\uD398\uC774\uC2A4",r.spaceKey||"\uBBF8\uC124\uC815"],["\uC791\uC5C5\uACF5\uAC04",b?`\uAE30\uC900 \uD3F4\uB354 \u2194 ${A}`:"\uBBF8\uC5F0\uACB0"],["API \uD1A0\uD070",r.hasToken?"\uC124\uC815\uB428":"\uBBF8\uC124\uC815"]]){let X=document.createElement("dt"),Y=document.createElement("dd");X.textContent=z,Y.textContent=K,s("sync-config").append(X,Y)}s("sync-config-status").textContent=r.missing.length?`\uC124\uC815 \uD544\uC694: ${r.missing.join(", ")}. \uBBF8\uB9AC\uBCF4\uAE30\uB294 \uC778\uC99D \uC5C6\uC774 \uC0AC\uC6A9\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.`:b?"\uC811\uC18D \uC124\uC815\uACFC \uC2A4\uD398\uC774\uC2A4 \uC5F0\uACB0\uC744 \uBD88\uB7EC\uC654\uC2B5\uB2C8\uB2E4.":"\uC2A4\uD398\uC774\uC2A4 \uC5F0\uACB0\uC744 \uB20C\uB7EC \uAE30\uC900 \uD3F4\uB354\uC640 \uC5F0\uACB0\uD558\uC138\uC694."}function R(r){if(F=r,s("sync-log-download").disabled=!r.log?.trim(),r.state==="running"&&!T&&O(r.kind),T){let Y=(r.log||"").split(/\r?\n/).filter(ne=>ne.trim()&&!/^\s*(?:✓|완료|진행 ·)/.test(ne)).at(-1);T.update({label:r.state==="running"?r.phase==="fetch"?"\uC644\uB8CC \uD6C4 \uC6D0\uACA9 \uC0C1\uD0DC\uB97C \uB2E4\uC2DC \uD655\uC778\uD558\uB294 \uC911":L[r.kind]:"\uC2E4\uD589 \uACB0\uACFC\uB97C \uBC18\uC601\uD558\uB294 \uC911",detail:r.state==="running"?Y||"\uCC98\uB9AC \uC911\uC785\uB2C8\uB2E4. \uC2E4\uD589 \uB0B4\uC5ED\uC5D0\uC11C \uC138\uBD80 \uB0B4\uC6A9\uC744 \uD655\uC778\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.":"\uBCC0\uACBD \uBAA9\uB85D\uACFC \uB85C\uCEEC \uD3F4\uB354\uB97C \uAC31\uC2E0\uD558\uACE0 \uC788\uC2B5\uB2C8\uB2E4.",startedAt:r.startedAt,uncertain:!1})}s("sync-job-summary").hidden=!1,s("sync-job-summary").textContent=`${r.kind==="restore"?"\uBB38\uC11C \uBCF5\uAD6C":r.kind==="preview"?"\uC5C5\uB85C\uB4DC \uBBF8\uB9AC\uBCF4\uAE30":r.kind==="fetch"?"\uC6D0\uACA9 \uBCC0\uACBD \uD655\uC778":r.kind==="pull"?"\uAC00\uC838\uC624\uAE30":"\uC5C5\uB85C\uB4DC"} \xB7 ${["pull","fetch","restore"].includes(r.kind)?`${r.config.spaceKey||"\uC2A4\uD398\uC774\uC2A4 \uBBF8\uC124\uC815"} \u2192 ${r.selection.base}`:`${r.selection.target||r.selection.base} \u2192 ${r.config.spaceKey||"\uC2A4\uD398\uC774\uC2A4 \uBBF8\uC124\uC815"}`} (${r.config.baseUrl||"\uC11C\uBC84 \uBBF8\uC124\uC815"})`,["pull","restore"].includes(r.kind)&&(s("sync-job-summary").textContent+=` \xB7 \uAC00\uC838\uC624\uAE30 \uD615\uC2DD: ${r.selection.format==="obsidian"?"Obsidian":"Markdown"}`),s("sync-log-empty").hidden=!0,s("sync-log").hidden=!1;let z=s("sync-log"),K=z.scrollHeight-z.scrollTop-z.clientHeight<40;yt(z,r.log||"\uC791\uC5C5\uC744 \uC900\uBE44\uD558\uB294 \uC911\uC785\uB2C8\uB2E4\u2026"),K&&(z.scrollTop=z.scrollHeight),s("sync-job-state").hidden=!1,s("sync-job-state").setAttribute("data-state",r.state==="succeeded"&&(r.warningCount||r.refreshFailed)?"warning":r.state),s("sync-job-state").textContent=r.state==="succeeded"&&(r.warningCount||r.refreshFailed)?"\uC644\uB8CC (\uACBD\uACE0)":{running:"\uC9C4\uD589 \uC911",succeeded:"\uC644\uB8CC",failed:"\uC2E4\uD328"}[r.state];let X=!V.has(r.id);r.state!=="running"&&V.add(r.id),r.state==="running"&&r.phase==="fetch"?$("Push\xB7Pull\uC744 \uC644\uB8CC\uD588\uC2B5\uB2C8\uB2E4. \uCD5C\uC2E0 \uC6D0\uACA9 \uC0C1\uD0DC\uB97C \uB2E4\uC2DC \uD655\uC778\uD558\uACE0 \uC788\uC2B5\uB2C8\uB2E4\u2026",!1,null):r.state==="running"?$(r.kind==="restore"?"\uC120\uD0DD\uD55C \uBB38\uC11C\uB97C \uC6D0\uACA9 \uCD5C\uC2E0\uC73C\uB85C \uBCF5\uAD6C\uD558\uACE0 \uC788\uC2B5\uB2C8\uB2E4\u2026":r.kind==="preview"?"\uB85C\uCEEC \uBB38\uC11C\uC640 \uB9E4\uD551\uC744 \uBE44\uAD50\uD558\uACE0 \uC788\uC2B5\uB2C8\uB2E4\u2026":r.kind==="fetch"?"\uC6D0\uACA9 \uD398\uC774\uC9C0 \uBA54\uD0C0\uB370\uC774\uD130\uB97C \uD655\uC778\uD558\uACE0 \uC788\uC2B5\uB2C8\uB2E4\u2026":r.kind==="pull"?"Confluence\uC5D0\uC11C \uBB38\uC11C\uB97C \uAC00\uC838\uC624\uACE0 \uC788\uC2B5\uB2C8\uB2E4\u2026":"Confluence\uC5D0 \uC5C5\uB85C\uB4DC\uD558\uACE0 \uC788\uC2B5\uB2C8\uB2E4. \uC9C4\uD589 \uB0B4\uC5ED\uC744 \uD655\uC778\uD558\uC138\uC694.",!1,null):r.state==="failed"?$(r.kind==="restore"?"\uBB38\uC11C \uBCF5\uAD6C\uC5D0 \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4. \uC2E4\uD589 \uB0B4\uC5ED\uC744 \uD655\uC778\uD558\uC138\uC694.":r.kind==="fetch"?"\uC6D0\uACA9 \uBCC0\uACBD \uD655\uC778\uC5D0 \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4. \uC2E4\uD589 \uB0B4\uC5ED\uC744 \uD655\uC778\uD558\uC138\uC694. \uC774\uC804 \uCE90\uC2DC\uB294 \uC720\uC9C0\uB429\uB2C8\uB2E4.":r.kind==="pull"?"\uAC00\uC838\uC624\uAE30\uC5D0 \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4. \uB85C\uCEEC \uBCC0\uACBD\uC774\uB098 \uC624\uB958 \uB0B4\uC5ED\uC744 \uD655\uC778\uD55C \uB4A4 \uB2E4\uC2DC \uC2DC\uB3C4\uD558\uC138\uC694.":"\uC5C5\uB85C\uB4DC\uAC00 \uC2E4\uD328\uD588\uAC70\uB098 \uC77C\uBD80 \uBB38\uC11C\uAC00 \uCC98\uB9AC\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4. \uB0B4\uC5ED\uC744 \uD655\uC778\uD55C \uB4A4 \uB2E4\uC2DC \uBBF8\uB9AC\uBCF4\uAE30\uD574 \uC8FC\uC138\uC694.",!0,X?"error":null):r.kind==="preview"?(r.id===p&&w===te()&&!r.config.missing.length&&r.config.connected&&(y=r.planId),$(r.config.missing.length?"\uBBF8\uB9AC\uBCF4\uAE30 \uC644\uB8CC. \uC811\uC18D \uC124\uC815\uC744 \uCC44\uC6B4 \uB4A4 \uB2E4\uC2DC \uBBF8\uB9AC\uBCF4\uAE30\uD574 \uC8FC\uC138\uC694.":y?"\uBBF8\uB9AC\uBCF4\uAE30 \uC644\uB8CC. \uB300\uC0C1\uACFC \uC5C5\uB85C\uB4DC \uC704\uCE58\uB97C \uD655\uC778\uD558\uACE0 Confluence\uC5D0 \uC5C5\uB85C\uB4DC\uB97C \uB204\uB974\uC138\uC694.":"\uBBF8\uB9AC\uBCF4\uAE30 \uB0B4\uC5ED\uC744 \uBD88\uB7EC\uC654\uC2B5\uB2C8\uB2E4. \uD604\uC7AC \uC120\uD0DD\uC73C\uB85C \uB2E4\uC2DC \uBBF8\uB9AC\uBCF4\uAE30\uD574 \uC8FC\uC138\uC694.",!1,X?r.config.missing.length?"warning":"success":null)):r.kind==="fetch"?$("Fetch\uB97C \uC644\uB8CC\uD588\uC2B5\uB2C8\uB2E4. \uBCC0\uACBD \uBB38\uC11C \uBAA9\uB85D\uC5D0 \uC6D0\uACA9 \uC0C1\uD0DC\uB97C \uBC18\uC601\uD569\uB2C8\uB2E4. \uC0C1\uC138 \uC870\uD68C \uB0B4\uC5ED\uC740 \uB300\uC0C1 \uBC0F \uC2E4\uD589 \uB0B4\uC5ED\uC5D0\uC11C \uD655\uC778\uD560 \uC218 \uC788\uC73C\uBA70 \uBB38\uC11C\uC640 \uB3D9\uAE30\uD654 \uAE30\uC900\uC740 \uC720\uC9C0\uB429\uB2C8\uB2E4.",!1,X?"success":null):r.refreshFailed?$(`${r.kind==="push"?"\uC5C5\uB85C\uB4DC":"\uAC00\uC838\uC624\uAE30"}\uB294 \uC644\uB8CC\uD588\uC9C0\uB9CC \uD6C4\uC18D Fetch\uC5D0 \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4. ${r.warningCount?`\uCCA8\uBD80 ${r.warningCount}\uAC1C\uB294 \uC6D0\uACA9 \uCC38\uC870\uB97C \uC720\uC9C0\uD588\uC2B5\uB2C8\uB2E4. `:""}\uBCC0\uACBD \uBAA9\uB85D\uC774 \uCD5C\uC2E0\uC774 \uC544\uB2D0 \uC218 \uC788\uC73C\uB2C8 Fetch\uB97C \uB2E4\uC2DC \uC2E4\uD589\uD558\uC138\uC694.`,!1,X?"warning":null):r.warningCount?$(`\uAC00\uC838\uC624\uAE30\uB97C \uC644\uB8CC\uD588\uC2B5\uB2C8\uB2E4. \uCCA8\uBD80 ${r.warningCount}\uAC1C\uB97C \uC800\uC7A5\uD558\uC9C0 \uBABB\uD574 \uC6D0\uACA9 \uCC38\uC870\uB97C \uC720\uC9C0\uD588\uC2B5\uB2C8\uB2E4. \uC2E4\uD589 \uB0B4\uC5ED\uC744 \uD655\uC778\uD558\uC138\uC694.`,!1,X?"warning":null):$(r.kind==="restore"?"\uC6D0\uACA9 \uCD5C\uC2E0\uC73C\uB85C \uBCF5\uAD6C\uD588\uC2B5\uB2C8\uB2E4. \uBCF5\uAD6C \uBB38\uC11C\uB294 \uC5C5\uB85C\uB4DC \uC120\uD0DD\uC5D0\uC11C \uC81C\uC678\uD588\uC2B5\uB2C8\uB2E4.":r.kind==="pull"?"\uAC00\uC838\uC624\uAE30\uAC00 \uC644\uB8CC\uB418\uC5C8\uC2B5\uB2C8\uB2E4. \uAE30\uC900 \uD3F4\uB354\uC5D0\uC11C \uBB38\uC11C\uB97C \uD655\uC778\uD558\uC138\uC694.":"\uC5C5\uB85C\uB4DC\uAC00 \uC644\uB8CC\uB418\uC5C8\uC2B5\uB2C8\uB2E4. \uB2E4\uB978 \uB300\uC0C1\uC744 \uC120\uD0DD\uD574 \uACC4\uC18D \uC791\uC5C5\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.",!1,X?"success":null)}async function a(){clearTimeout(v);try{let{job:r}=await e("/api/sync/job");if(!r){H(),f(!1);return}R(r),s("sync-reconnect").hidden=!0,r.state==="running"?v=setTimeout(a,800):(["push","pull","fetch","restore"].includes(r.kind)&&r.state==="succeeded"&&await S.reload(!0),["pull","restore"].includes(r.kind)&&r.state==="succeeded"&&await t(),H(),f(!1))}catch(r){$(`\uC9C4\uD589 \uC0C1\uD0DC\uB97C \uD655\uC778\uD558\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4. \uC791\uC5C5\uC740 \uC11C\uBC84\uC5D0\uC11C \uACC4\uC18D\uB420 \uC218 \uC788\uC2B5\uB2C8\uB2E4. ${r.message}`,!0),T?.update({label:"\uC9C4\uD589 \uC0C1\uD0DC \uD655\uC778\uC774 \uD544\uC694\uD569\uB2C8\uB2E4",detail:"\uC11C\uBC84 \uC791\uC5C5\uC774 \uACC4\uC18D\uB420 \uC218 \uC788\uC2B5\uB2C8\uB2E4. \uC9C4\uD589 \uC0C1\uD0DC \uB2E4\uC2DC \uD655\uC778\uC73C\uB85C \uC5F0\uACB0\uD558\uC138\uC694.",uncertain:!0}),s("sync-reconnect").hidden=!1}}async function h(r,z){let K=r==="pull-remote";if(K&&(r="pull"),m||!b)return;let X=j(),Y=y;if(!(r==="push"&&(!Y||!p||w!==te()||!M))){Q(),r==="preview"&&(w=te()),O(r,K?"sync-pull-remote":void 0),f(!0),$(r==="restore"?"\uC120\uD0DD\uD55C \uBB38\uC11C\uB97C \uBCF5\uAD6C\uD569\uB2C8\uB2E4\u2026":r==="preview"?"\uB3D9\uAE30\uD654 \uB300\uC0C1\uC744 \uD655\uC778\uD558\uACE0 \uC788\uC2B5\uB2C8\uB2E4\u2026":r==="fetch"?"\uC6D0\uACA9 \uBCC0\uACBD \uD655\uC778\uC744 \uC2DC\uC791\uD569\uB2C8\uB2E4\u2026":r==="pull"?"Confluence\uC5D0\uC11C \uAC00\uC838\uC624\uAE30\uB97C \uC2DC\uC791\uD569\uB2C8\uB2E4\u2026":"\uC5C5\uB85C\uB4DC\uB97C \uC2DC\uC791\uD569\uB2C8\uB2E4\u2026",!1,null);try{let{job:ne}=await e("/api/sync/"+r,r==="restore"?z:r==="preview"?X:r==="pull"?{...P.request(),remoteOnly:!0,format:ae()}:r==="fetch"?P.request():{planId:Y});r==="preview"&&(p=ne.id),k(ne.config),R(ne),r==="fetch"&&s("sync-stage-heading").scrollIntoView({block:"start"}),await a()}catch(ne){$(ne.message,!0);try{let{job:ve}=await e("/api/sync/job");if(ve?.state==="running"){await a();return}H(),f(!1)}catch{T?.update({label:"\uC9C4\uD589 \uC0C1\uD0DC \uD655\uC778\uC774 \uD544\uC694\uD569\uB2C8\uB2E4",detail:"\uC694\uCCAD \uACB0\uACFC\uB97C \uD655\uC778\uD558\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4. \uC791\uC5C5\uC774 \uACC4\uC18D\uB420 \uC218 \uC788\uC73C\uB2C8 \uC9C4\uD589 \uC0C1\uD0DC\uB97C \uB2E4\uC2DC \uD655\uC778\uD558\uC138\uC694.",uncertain:!0}),s("sync-reconnect").hidden=!1}}}}s("sync-add-reference").onclick=async()=>{if(!m){f(!0);try{let r=await e("/api/pick-folder",{kind:"reference",start:c().base});if(r.path){let z=j().referenceRoots;s("sync-references").value=[...new Set([...z,r.path])].join(`
|
|
5
|
-
`),s("sync-references").dispatchEvent(new Event("input",{bubbles:!0}))}}catch(r){$(r.message,!0)}finally{f(!1)}}};let E=ht({api:e,selection:j,monaco:n,loadMonaco:i,notify:o}),l=mt({api:e,selection:()=>({...j(),format:ae()}),setBusy:f,isBusy:()=>m,status:$,start:h}),S=xt({restore:l.open,canRestore:()=>b&&M,scopeKey:()=>I,compare:E.open,api:e,selection:j,changed:Q,busy:f,status:$,update:()=>C(m)}),P=bt({api:e,context:c,setBusy:f,changed:()=>{Q(),C(m)},renderConfig:r=>{Q(),k(r)},status:$});s("sync-connect").onclick=async()=>{if(m||b||!M)return;let r=Z();Q(),f(!0);try{let z=await e("/api/sync/connect",P.request());if(r!==Z())return;k(z),$("\uAE30\uC900 \uD3F4\uB354\uB97C \uC2A4\uD398\uC774\uC2A4\uC5D0 \uC5F0\uACB0\uD588\uC2B5\uB2C8\uB2E4. Fetch\uB85C \uBC1B\uC744 \uBB38\uC11C\uB97C \uD655\uC778\uD55C \uB4A4 \uAC00\uC838\uC624\uC138\uC694.",!1,"success")}catch(z){$(z.message,!0)}finally{f(!1)}},s("sync-pull-format").onchange=()=>C(m),s("sync-fetch").onclick=()=>h("fetch"),s("sync-pull-remote")&&(s("sync-pull-remote").onclick=()=>h("pull-remote")),s("sync-preview").onclick=()=>h("preview"),s("sync-push").onclick=()=>h("push"),s("sync-reconnect").onclick=a,s("sync-log-download").onclick=()=>{if(F?.log?.trim())try{pt(gt(F),ut(F)),o("\uB85C\uADF8 \uB2E4\uC6B4\uB85C\uB4DC\uB97C \uC2DC\uC791\uD588\uC2B5\uB2C8\uB2E4.","success")}catch(r){$("\uB85C\uADF8 \uB2E4\uC6B4\uB85C\uB4DC\uB97C \uC2DC\uC791\uD558\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4. "+r.message,!0)}},s("sync-load").onclick=async()=>{if(m)return;Q(),f(!0);let r=Z();try{let z=await e("/api/sync/config",P.request());r===Z()&&(k(z),$(s("sync-config-status").textContent,!1,z.missing.length||!z.connected?"warning":"success"))}catch(z){$(z.message,!0)}finally{f(!1)}};for(let r of["sync-verify","sync-references"])s(r).addEventListener("input",()=>C(m));return{waitForLocalCheck:()=>S.idle(),watch:()=>S.startWatching(async()=>{if(m||document.hidden||s("sync-view").hidden||!c().base)return!1;if(!b||x!==Z())try{let r=Z(),z=await e("/api/sync/config",P.request(),void 0,{quiet:!0});if(r!==Z()||m)return!1;k(z),C(m)}catch{return!1}return b}),update:C,resume:async()=>{try{let{job:r}=await e("/api/sync/job");if(!r)return;R(r),r.state==="running"&&(await d(),f(!0),await a())}catch(r){$("\uC791\uC5C5 \uC0C1\uD0DC\uB97C \uBD88\uB7EC\uC624\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4. "+r.message,!0)}}}}function vt({api:e,selection:n,formatting:i,notify:c=()=>{}}){let f=document.getElementById("document-preview-frame"),d=document.getElementById("document-preview-status"),t=document.getElementById("document-preview-refresh"),o=document.getElementById("document-preview-toggle"),g,s,m=0,y=!1,p=!1;function w(){m++,s?.abort(),i?.clear(),f.hidden=!0,f.removeAttribute("srcdoc"),g=void 0,p=!1}async function x(v=!1){let{base:b,file:M,folder:I}=n(),A=b&&M&&!I?JSON.stringify([b,M]):"";if(!y){g!==void 0&&(A!==g||p)&&w(),t.disabled=!0;return}if(t.disabled=!A,!v&&A===g)return;w(),g=A;let T=m;if(t.disabled=!A,d.textContent=A?"\uBB38\uC11C\uB97C \uBD88\uB7EC\uC624\uB294 \uC911\u2026":"Markdown \uD30C\uC77C\uC744 \uC120\uD0DD\uD558\uBA74 \uBCF8\uBB38\uC774 \uD45C\uC2DC\uB429\uB2C8\uB2E4.",!!A){s=new AbortController,p=!0;try{let F=await e("/api/document-preview",{base:b,file:M},s.signal);if(T!==m)return;f.srcdoc=F.html,f.hidden=!1,i?.load(F,{base:b,file:M}),d.textContent=M.split(/[\\/]/).pop()+" \xB7 \uB0B4\uC6A9\uC744 \uC120\uD0DD\uD574 \uBCF5\uC0AC\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4."}catch(F){if(T!==m||F.name==="AbortError")return;d.textContent="\uBB38\uC11C\uB97C \uD45C\uC2DC\uD558\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4: "+F.message,c(d.textContent,"error")}finally{T===m&&(p=!1)}}}return o.onclick=()=>(y=!y,o.setAttribute("aria-expanded",String(y)),document.getElementById("document-preview-body").hidden=!y,document.getElementById("document-preview-actions").hidden=!y,document.getElementById("document-preview-chevron").textContent=y?"\u25BE":"\u25B8",document.getElementById("document-preview-toggle-label").textContent=y?"\uC811\uAE30":"\uD3BC\uCE58\uAE30",x()),t.onclick=()=>x(!0),{update:x}}function kt(e,n){let i=e-n.length*40,c=n.reduce((g,s)=>g+s,0),f=n.map(g=>g/c*i),d=f.map(g=>40+Math.floor(g)),t=f.map((g,s)=>({i:s,remainder:g-Math.floor(g)})).sort((g,s)=>s.remainder-g.remainder),o=e-d.reduce((g,s)=>g+s,0);for(let g=0;g<o;g++)d[t[g].i]++;return d}function Ct({api:e,monaco:n,loadMonaco:i=async()=>n,refresh:c,setBusy:f,notify:d=()=>{}}){let t=C=>document.getElementById(C),o=t("document-preview-frame"),g=t("table-edit-toggle"),s=t("table-format-controls"),m=t("table-review-dialog"),y=t("table-format-status"),p,w,x=!1,v=-1,b=[],M=new Map,I,A,T,F,L=0,W=0,O=C=>o.contentWindow?.postMessage({...C,channel:p?.channel},"*"),H=C=>{y.textContent=C},V=()=>{W++,I=null,t("table-save").disabled=!0};function $(){o.onload=null,L++,p=null,w=null,x=!1,v=-1,b=[],M.clear(),V(),t("document-format-toggle").disabled=!0,t("document-format-controls").hidden=!0,t("document-format-toggle").setAttribute("aria-expanded","false"),t("document-format-tables").value="keep",g.disabled=!0,g.lastChild.textContent="\uD45C \uC9C1\uC811 \uD3B8\uC9D1",g.setAttribute("aria-pressed","false"),s.hidden=!0,m.open&&m.close(),j()}function j(){let C=v>=0;for(let k of["table-total-width","table-equal","table-revert"])t(k).disabled=!C;if(t("document-format-basic").disabled=!p,t("document-format-review").disabled=!p||!M.size,t("format-summary").textContent=M.size?`\uD45C ${M.size}\uAC1C \uC870\uC808\uB428 \xB7 \uBCC0\uACBD \uBE44\uAD50 \uD6C4 \uC800\uC7A5\uD569\uB2C8\uB2E4.`:"\uBCC0\uACBD \uBE44\uAD50 \uD6C4 \uC6D0\uBCF8 \uD30C\uC77C\uC5D0 \uC800\uC7A5\uD569\uB2C8\uB2E4.",t("table-revert-all").disabled=!M.size,t("document-format-tables").disabled=!p?.tables.some(k=>k.editable),t("table-fit").disabled=!C||!p?.tables.find(k=>k.index===v)?.contentWeights,C){let k=b.reduce((R,a)=>R+a,0);t("table-total-width").min=String(Math.max(320,b.length*40)),t("table-total-width").max=String(Math.max(1200,k)),t("table-total-width").value=k,t("table-total-label").textContent=k+"px"}else t("table-total-label").textContent=""}function ae(C){b=C.slice(),M.set(v,b.slice()),V(),O({type:"csync-table-widths",index:v,widths:b}),j(),H("\uD45C "+(v+1)+" \xB7 \uC544\uC9C1 \uD30C\uC77C\uC5D0 \uC800\uC7A5\uD558\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4.")}g.onclick=()=>{if(x=!x,s.hidden=!x,g.lastChild.textContent=x?"\uD45C \uC9C1\uC811 \uD3B8\uC9D1 \uC911":"\uD45C \uC9C1\uC811 \uD3B8\uC9D1",g.setAttribute("aria-pressed",String(x)),O({type:"csync-table-edit",enabled:x}),x){for(let[C,k]of M)O({type:"csync-table-widths",index:C,widths:k});v>=0&&O({type:"csync-table-widths",index:v,widths:b})}x&&v<0&&H("\uBBF8\uB9AC\uBCF4\uAE30\uC5D0\uC11C \uD3B8\uC9D1\uD560 \uD45C\uB97C \uD074\uB9AD\uD558\uC138\uC694.")},window.addEventListener("message",C=>{let k=C.data;if(!p||!x||C.source!==o.contentWindow||k?.channel!==p.channel)return;let R=p.tables.find(a=>a.index===k.index&&a.editable);R&&(k.type==="csync-table-select"&&(v=R.index,b=(M.get(v)??R.widths).slice(),V(),O({type:"csync-table-widths",index:v,widths:b}),j(),H("\uD45C "+(v+1)+" \uC120\uD0DD \xB7 \uB0B4\uC6A9\uC5D0 \uB9DE\uCDA4\uC73C\uB85C \uC790\uB3D9 \uBC30\uBD84\uD558\uAC70\uB098 \uC5F4 \uACBD\uACC4\uB97C \uB4DC\uB798\uADF8\uD558\uC138\uC694.")),k.type==="csync-table-change"&&k.index===v&&Array.isArray(k.widths)&&k.widths.length===R.widths.length&&k.widths.every(a=>Number.isInteger(a)&&a>=40)&&k.widths.reduce((a,h)=>a+h,0)<=3e3&&(b=k.widths.slice(),M.set(v,b.slice()),V(),j(),H("\uD45C "+(v+1)+" \xB7 \uC544\uC9C1 \uD30C\uC77C\uC5D0 \uC800\uC7A5\uD558\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4.")))});let te=(C,k)=>Array.from({length:k},(R,a)=>Math.floor(C/k)+(a<C%k?1:0));t("table-equal").onclick=()=>ae(te(b.reduce((C,k)=>C+k,0),b.length)),t("table-fit").onclick=()=>{let C=p.tables.find(k=>k.index===v);ae(kt(b.reduce((k,R)=>k+R,0),C.contentWeights)),H("\uD45C "+(v+1)+" \xB7 \uAE00\uC790 \uAE38\uC774\uC5D0 \uB9DE\uCDB0 \uBC30\uBD84\uD588\uC2B5\uB2C8\uB2E4. \uC544\uC9C1 \uC800\uC7A5\uD558\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4.")};function Z(C){let k=p.tables.filter(R=>R.editable);if(k.length){O({type:"csync-table-edit",enabled:!0});for(let R of k){let a=M.get(R.index)??R.widths,h=a.reduce((l,S)=>l+S,0),E=C==="fit"?kt(h,R.contentWeights):te(h,a.length);M.set(R.index,E),O({type:"csync-table-widths",index:R.index,widths:E})}v<0&&(v=k[0].index),b=M.get(v).slice(),O({type:"csync-table-widths",index:v,widths:b}),V(),j(),O({type:"csync-table-edit",enabled:x}),H(`\uD45C ${k.length}\uAC1C\uC5D0 ${C==="fit"?"\uB0B4\uC6A9\uC5D0 \uB9DE\uCDA4":"\uADE0\uB4F1 \uBC30\uBD84"}\uC744 \uC801\uC6A9\uD588\uC2B5\uB2C8\uB2E4. \uBCC0\uACBD \uBE44\uAD50 \uD6C4 \uC800\uC7A5\uD558\uC138\uC694.`)}}t("document-format-tables").onchange=()=>{t("document-format-tables").value==="keep"?t("table-revert-all").onclick():Z(t("document-format-tables").value)},t("table-revert-all").onclick=()=>{O({type:"csync-table-edit",enabled:!0});for(let C of p.tables.filter(k=>k.editable))O({type:"csync-table-widths",index:C.index,widths:C.widths});M.clear(),t("document-format-tables").value="keep",v>=0&&(b=p.tables.find(C=>C.index===v).widths.slice(),O({type:"csync-table-widths",index:v,widths:b})),O({type:"csync-table-edit",enabled:x}),V(),j(),H("\uBAA8\uB4E0 \uD45C\uC758 \uB108\uBE44 \uBCC0\uACBD\uC744 \uCDE8\uC18C\uD588\uC2B5\uB2C8\uB2E4.")},t("document-format-toggle").onclick=()=>{let C=!t("document-format-controls").hidden;t("document-format-controls").hidden=C,t("document-format-toggle").setAttribute("aria-expanded",String(!C)),C&&x&&g.onclick()};function pe(C,k,R){I=C.planId,t("table-save-status").textContent="",t("table-review-title").textContent="\uBB38\uC11C \uC11C\uC2DD \uBCC0\uACBD \uD655\uC778",t("format-review-note").textContent=k?"\uAE30\uBCF8 \uC11C\uC2DD \uC815\uB9AC\uC640 \uD45C \uC870\uC808 \uACB0\uACFC\uB97C \uD655\uC778\uD558\uC138\uC694. \uC800\uC7A5\uC744 \uB20C\uB7EC\uC57C \uD30C\uC77C\uC5D0 \uBC18\uC601\uB429\uB2C8\uB2E4.":"\uD45C \uC870\uC808 \uACB0\uACFC\uB97C \uD655\uC778\uD558\uC138\uC694. \uBCF8\uBB38 \uAE30\uBCF8 \uC11C\uC2DD\uC740 \uBCC0\uACBD\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. \uC800\uC7A5\uC744 \uB20C\uB7EC\uC57C \uD30C\uC77C\uC5D0 \uBC18\uC601\uB429\uB2C8\uB2E4.",m.open||m.showModal(),A||(T=R.editor.createModel("","markdown"),F=R.editor.createModel("","markdown"),A=R.editor.createDiffEditor(t("table-review-diff"),{automaticLayout:!0,readOnly:!0,originalEditable:!1,minimap:{enabled:!1},wordWrap:"on",scrollBeyondLastLine:!1}),A.setModel({original:T,modified:F})),T.setValue(C.before),F.setValue(C.after),A.layout(),t("table-save").disabled=C.before===C.after,C.before===C.after&&(t("table-save-status").textContent="\uC815\uB9AC\uD560 \uC11C\uC2DD \uBCC0\uACBD\uC774 \uC5C6\uC2B5\uB2C8\uB2E4.")}async function Q(C){if(!p)return;let k=L,R=W;t("document-format-basic").disabled=t("document-format-review").disabled=!0;try{let a=await e("/api/document-format/preview",{...w,hash:p.hash,basic:C,tables:"keep",changes:Array.from(M,([E,l])=>({index:E,widths:l.slice()}))}),h=await i();if(k!==L||R!==W)return;pe(a,C,h)}catch(a){d(a.message,"error")}finally{j()}}return t("document-format-basic").onclick=()=>Q(!0),t("document-format-review").onclick=()=>Q(!1),t("table-total-width").oninput=C=>{let k=Number(C.target.value),R=k-b.length*40,a=b.map(S=>S-40),h=a.reduce((S,P)=>S+P,0),E=h?a.map(S=>40+Math.floor(S/h*R)):te(k,b.length),l=k-E.reduce((S,P)=>S+P,0);for(let S=0;l>0;S++,l--)E[S%E.length]++;ae(E)},t("table-revert").onclick=()=>{M.delete(v),b=p.tables.find(C=>C.index===v).widths.slice(),O({type:"csync-table-widths",index:v,widths:b}),V(),j(),H("\uC120\uD0DD\uD55C \uD45C\uC758 \uBCC0\uACBD\uC744 \uCDE8\uC18C\uD588\uC2B5\uB2C8\uB2E4.")},t("table-save").onclick=async()=>{if(!I)return;let C=I;t("table-save").disabled=!0,t("table-review-close").disabled=!0,f(!0);try{await e("/api/table-format/save",{planId:C}),m.close(),d("\uBB38\uC11C \uC11C\uC2DD\uC744 \uC6D0\uBCF8 \uD30C\uC77C\uC5D0 \uC800\uC7A5\uD588\uC2B5\uB2C8\uB2E4.","success"),await c()}catch(k){t("table-save-status").textContent=k.message,d(k.message,"error")}finally{t("table-review-close").disabled=!1,f(!1)}},t("table-review-close").onclick=()=>m.close(),{clear:$,load(C,k){$(),p=C,w=k,o.onload=()=>{p===C&&(t("document-format-toggle").disabled=!1,g.disabled=!C.tables?.some(R=>R.editable),j(),O({type:"csync-table-edit",enabled:x}))}}}}var u=e=>document.getElementById(e),$e=ct(),Et=tt(),oe=it(),Ht=st(),N,xe,Le=[],D=null,B=null,he=null,q=!1,le=0,fe=null,Ie=null,Fe=!1,ke="",St,Ke,Me=0,re,Oe,Ae=[],me="file",ge=!1,ie=new Set,be=new Map,Ce=new Set,U="convert",jt=Ct({api:se,loadMonaco:Re,notify:$e,refresh:()=>zt.update(!0),setBusy:e=>{q=e,ee(),G()}}),zt=vt({notify:$e,api:se,formatting:jt,selection:()=>({base:D||N,file:B,folder:U==="convert"?me==="folder":ge})});lt(()=>U);var Ee=!0,ye={convert:{},sync:{}},Mt=()=>({base:D,folder:N,file:B,selectedDirectory:ge,baseInput:u("base-input").value,expanded:[...ie]}),It="csync.workspace.v1";function qe(){let e=u("out-input");return oe.browser?e.dataset.path||"":e.value}function Xe(e){let n=u("out-input");oe.browser&&(n.dataset.path=e),n.value=oe.browser?oe.folderName(e):e}function Se(){if(!Ee){ye[U]=Mt();try{localStorage.setItem(It,JSON.stringify({workspaces:ye,mode:U,referenceRoots:u("sync-references").value,out:qe(),convertScope:me,direction:u("direction").value,fix:u("fix").checked,verify:u("sync-verify").checked,pullFormat:u("sync-pull-format").value,sideBySide:u("side-by-side").checked}))}catch{}}}function Vt(){try{let e=JSON.parse(localStorage.getItem(It));return e&&typeof e=="object"&&!Array.isArray(e)?e:{}}catch{return{}}}function At(e){U=e,u(e+"-view").prepend(u("document-preview-panel"));for(let n of["convert","sync"])u("tab-"+n).setAttribute("aria-selected",String(n===U)),u("tab-"+n).tabIndex=n===U?0:-1,u(n+"-view").hidden=n!==U;u("choose-base").lastChild.textContent="\uAE30\uC900 \uD3F4\uB354 \uBCC0\uACBD\u2026",u("base-input").setAttribute("aria-label",U==="sync"?"Confluence \uC791\uC5C5 \uAE30\uC900 \uD3F4\uB354 \uACBD\uB85C":"\uBCC0\uD658 \uAE30\uC900 \uD3F4\uB354 \uACBD\uB85C"),u("workspace-note").textContent=oe.standalone?"\uD30C\uC77C\uACFC \uBCC0\uD658\uC740 \uBE0C\uB77C\uC6B0\uC800\uC5D0\uC11C \uCC98\uB9AC\uD558\uBA70, Confluence \uC694\uCCAD\uB9CC \uC911\uACC4 API\uB85C \uC804\uB2EC\uD569\uB2C8\uB2E4.":oe.browser?"\uD30C\uC77C\uC740 \uBE0C\uB77C\uC6B0\uC800\uC5D0\uC11C \uC77D\uACE0 \uC800\uC7A5\uD558\uBA70, \uBCC0\uD658\xB7Confluence \uC791\uC5C5\uC740 \uC11C\uBC84\uC758 \uC784\uC2DC \uACF5\uAC04\uC5D0\uC11C \uCC98\uB9AC\uD569\uB2C8\uB2E4.":U==="sync"?"\uC6D0\uACA9 \uBCC0\uACBD\uC740 \uC704\uC5D0\uC11C \uAC00\uC838\uC624\uACE0, \uC5C5\uB85C\uB4DC\uD560 \uBB38\uC11C\uB294 \uCCB4\uD06C \uD6C4 \uBBF8\uB9AC\uBCF4\uAE30\uD558\uC138\uC694.":"\uBCC0\uD658\uC740 \uC774 \uCEF4\uD4E8\uD130\uC5D0\uC11C \uCC98\uB9AC\uB429\uB2C8\uB2E4.",U==="convert"&&re?.layout()}async function _e(e){if(e===U||q)return;Se(),Ee=!0,q=!0,At(e);let n;try{n=await Pt(ye[e])}finally{Ee=!1,q=!1,ee(),G()}n&&_(n,!0)}for(let e of["convert","sync"])u("tab-"+e).onclick=()=>_e(e),u("tab-"+e).onkeydown=n=>{if(["ArrowLeft","ArrowRight","Home","End"].includes(n.key)){n.preventDefault();let i=n.key==="Home"?"convert":n.key==="End"||e==="convert"?"sync":"convert";u("tab-"+i).disabled||(_e(i),u("tab-"+i).focus())}};var De,Be;async function Kt(){if(!re)try{let e=await Re();De=e.editor.createModel("","markdown"),Be=e.editor.createModel("","markdown"),re=e.editor.createDiffEditor(u("diff"),{automaticLayout:!0,readOnly:!0,originalEditable:!1,renderSideBySide:u("side-by-side").checked,useInlineViewWhenSpaceIsLimited:!0,renderSideBySideInlineBreakpoint:700,ignoreTrimWhitespace:!1,minimap:{enabled:!1},scrollBeyondLastLine:!1,wordWrap:"on",renderOverviewRuler:!0,accessibilityVerbose:!0,padding:{top:12,bottom:12},lineHeight:22,fontSize:12}),re.setModel({original:De,modified:Be}),re.getOriginalEditor().updateOptions({ariaLabel:"\uC6D0\uBCF8 Markdown"}),re.getModifiedEditor().updateOptions({ariaLabel:"\uBCC0\uD658 \uACB0\uACFC Markdown"}),re.onDidUpdateDiff(()=>{let i=!!re.getLineChanges()?.length;u("previous-change").disabled=u("next-change").disabled=!i})}catch(e){throw u("editor-error").hidden=!1,u("editor-error").textContent="\uBCF8\uBB38 \uBE44\uAD50 \uD654\uBA74\uC744 \uBD88\uB7EC\uC624\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4. \uC0C8\uB85C\uACE0\uCE68\uD574 \uC8FC\uC138\uC694. "+e.message,e}}u("previous-change").onclick=()=>re?.goToDiff("previous");u("next-change").onclick=()=>re?.goToDiff("next");u("side-by-side").onchange=()=>re?.updateOptions({renderSideBySide:u("side-by-side").checked});async function se(e,n,i,c){let f=et(e,n,c),d=f&&Et.begin(f);try{e!=="/api/sync/staging"&&!(oe.browser&&e==="/api/pick-folder")&&await Oe?.waitForLocalCheck();let t=await oe.request(e,{signal:i,method:n?"POST":"GET",headers:{...n?{"Content-Type":"application/json"}:{}},...n?{body:JSON.stringify(n)}:{}}),o=await t.json();if(!t.ok)throw Object.assign(new Error(o.error||"\uC694\uCCAD\uC744 \uCC98\uB9AC\uD558\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4."),{code:o.code,conflicts:o.conflicts,inPlace:o.inPlace,output:o.output});return o}finally{d?.end()}}function _(e,n=!1,i=n?"error":"info"){let c=u(U==="sync"?"sync-status":"status");c.textContent=e,c.classList.toggle("error",n),i&&$e(e,i)}function de(){if(U==="sync"){_("");return}Ae=[],u("preview-documents").hidden=!0,he=null,u("result").hidden=!0,u("details").hidden=!0,De?.setValue(""),Be?.setValue(""),u("comparison-empty").hidden=!1,u("previous-change").disabled=u("next-change").disabled=!0,u("preview-label").textContent="\uBBF8\uB9AC\uBCF4\uAE30 \uB300\uAE30",_("")}var ue=(e,n)=>n===e||n.startsWith(e.endsWith("/")?e:e+"/")||n.startsWith(e.endsWith("\\")?e:e+"\\");function ee(){u("local-disconnect").disabled=q,zt.update();for(let d of["preview","save","next-document"])u(d).disabled=q||!B;for(let d of["preview-document","tab-convert","tab-sync","choose-base","apply-base","base-input","base-home","up","choose-out","out-input","direction","fix","search"])u(d).disabled=q;q||(u("up").disabled=N===xe||D&&!ue(D,xe));let e=D||N,n=!!e&&qe()===e;u("convert-save-mode").textContent=n?"\uC6D0\uBCF8 \uB36E\uC5B4\uC4F0\uAE30":"\uBCC4\uB3C4 \uD3F4\uB354 \uC800\uC7A5",u("out-mode-hint").textContent=n?"\uC6D0\uBCF8 \uB36E\uC5B4\uC4F0\uAE30 \xB7 \uD655\uC778 \uD6C4 \uC800\uC7A5":oe.browser?"\uBCC4\uB3C4 \uD3F4\uB354 \uB610\uB294 \uC6D0\uBCF8 \uB36E\uC5B4\uC4F0\uAE30":"\uC120\uD0DD \uC0AC\uD56D",u("root-name").textContent=e?e.split(/[\\/]/).filter(Boolean).pop()||e:"\uD3F4\uB354\uB97C \uC120\uD0DD\uD558\uC138\uC694",u("root-path").textContent=e||"\uC544\uC9C1 \uC124\uC815\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4.",u("root-purpose").textContent=U==="sync"?"Push \xB7 Pull \uAE30\uC900":"\uBCC0\uD658 \uAE30\uC900",u("root-hint").textContent=U==="sync"?"\uC2A4\uD398\uC774\uC2A4 \uBB38\uC11C\uB97C \uBCF4\uAD00\uD558\uB294 \uC791\uC5C5\uACF5\uAC04\uC785\uB2C8\uB2E4. \uC5C5\uB85C\uB4DC \uB300\uC0C1\uC740 \uC624\uB978\uCABD \uBCC0\uACBD\uC0AC\uD56D\uC5D0\uC11C \uCCB4\uD06C\uD558\uC138\uC694.":"\uBB38\uC11C\uC640 \uCC38\uC870 \uB9C1\uD06C\uB97C \uCC3E\uB294 \uAE30\uC900\uC785\uB2C8\uB2E4. \uC544\uB798\uC5D0\uC11C \uBCC0\uD658\uD560 \uD30C\uC77C\xB7\uD3F4\uB354\uB97C \uC120\uD0DD\uD558\uC138\uC694.",u("base-home").disabled=q||!e||e===N;let i=e&&N&&ue(e,N)?N.slice(e.length).replace(/\\/g,"/"):N||"";u("path").textContent=N?N===e?"\uAE30\uC900 \uD3F4\uB354 /":`\uAE30\uC900 \uD3F4\uB354 ${i}`:"\uD3F4\uB354\uB97C \uC120\uD0DD\uD558\uC138\uC694",u("path").title=N||"",u("explorer-note").textContent=U==="sync"?"\uD30C\uC77C\uC744 \uC120\uD0DD\uD574 \uB0B4\uC6A9\uC744 \uBBF8\uB9AC\uBCFC \uC218 \uC788\uC2B5\uB2C8\uB2E4":"\uD30C\uC77C\xB7\uD3F4\uB354\uB97C \uC120\uD0DD\uD574 \uBCC0\uD658\uD558\uC138\uC694",u("fix").disabled=q||u("direction").value==="repair",u("selected").textContent=B?B.split(/[\\/]/).pop():"\uBCC0\uD658\uD560 \uBB38\uC11C\uB97C \uC120\uD0DD\uD558\uC138\uC694";let c=me==="folder",f=c&&!!D&&B===D;u("convert-select-all").disabled=q||!D||f,u("convert-select-all").textContent=f?"\uAE30\uC900 \uD3F4\uB354 \uC804\uCCB4 \uC120\uD0DD\uB428":"\uAE30\uC900 \uD3F4\uB354 \uC804\uCCB4 \uC120\uD0DD",u("convert-target-note").textContent=f?"\uAE30\uC900 \uD3F4\uB354\uC640 \uBAA8\uB4E0 \uD558\uC704 \uD3F4\uB354\uC758 Markdown \uBB38\uC11C\uB97C \uBCC0\uD658\uD569\uB2C8\uB2E4.":"\uD30C\uC77C\xB7\uD3F4\uB354\uB97C \uC120\uD0DD\uD558\uAC70\uB098 \uAE30\uC900 \uD3F4\uB354 \uC804\uCCB4\uB97C \uC120\uD0DD\uD558\uC138\uC694.",u("selected").textContent=B?(c&&U==="convert"?f?"\uC804\uCCB4 \xB7 ":"\uD3F4\uB354 \xB7 ":"")+B.split(/[\\/]/).pop():c?"\uBCC0\uD658\uD560 \uD3F4\uB354\uB97C \uC120\uD0DD\uD558\uC138\uC694":"\uBCC0\uD658\uD560 \uBB38\uC11C\uB97C \uC120\uD0DD\uD558\uC138\uC694",u("base").textContent=B||"\uC67C\uCABD\uC5D0\uC11C \uB300\uC0C1\uC744 \uC120\uD0DD\uD558\uC138\uC694.",u("convert-output-hint").textContent=n?"\uC120\uD0DD\uD55C \uBB38\uC11C\xB7\uCCA8\uBD80\uB9CC \uC6D0\uB798 \uC704\uCE58\uC5D0 \uC800\uC7A5\uD569\uB2C8\uB2E4. \uBCC0\uACBD \uD30C\uC77C \uD655\uC778 \uD6C4 \uB36E\uC5B4\uC501\uB2C8\uB2E4.":c?"\uC120\uD0DD \uD3F4\uB354 \uC548\uC758 \uBAA8\uB4E0 Markdown\uC744 \uBCC0\uD658\uD569\uB2C8\uB2E4. \uCD9C\uB825 \uD3F4\uB354 \uC544\uB798\uC5D0 \uC120\uD0DD \uD3F4\uB354 \uB0B4\uBD80 \uAD6C\uC870\uB9CC \uC720\uC9C0\uD569\uB2C8\uB2E4.":"\uC120\uD0DD\uD55C Markdown\uC744 \uCD9C\uB825 \uD3F4\uB354 \uBC14\uB85C \uC544\uB798\uC5D0 \uC800\uC7A5\uD569\uB2C8\uB2E4. \uB9C1\uD06C\uB294 \uD574\uB2F9 \uD30C\uC77C\uC774 \uC788\uB294 \uD3F4\uB354\uB97C \uAE30\uC900\uC73C\uB85C \uD574\uC11D\uD569\uB2C8\uB2E4.",u("base").title=D||"",u("selected").title=B||"",Oe?.update(q,Ee),Se()}function G(){let e=u("files").scrollTop;u("files").replaceChildren();let n=fe??Le;if(u("count").textContent=Fe?"\uAC80\uC0C9 \uC911\u2026":n.length+(fe?"\uAC1C \uACB0\uACFC":"\uAC1C \uD56D\uBAA9"),ke||fe&&!n.length){let c=document.createElement("div");c.className="empty",c.textContent=ke||(fe?"\uC77C\uCE58\uD558\uB294 .md \uBB38\uC11C\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4.":"\uD45C\uC2DC\uD560 \uD3F4\uB354\uB098 .md \uBB38\uC11C\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4."),u("files").append(c)}let i=(c,f=0)=>{let d=document.createElement("div");d.className="tree-row",d.style.paddingLeft=f*16+"px";let t=document.createElement(c.directory?"button":"span");t.className="tree-toggle",c.directory&&(t.textContent=ie.has(c.path)?"\u25BE":"\u25B8",t.disabled=q,t.dataset.path=c.path,t.setAttribute("aria-expanded",String(ie.has(c.path))),t.setAttribute("aria-label",c.name+(ie.has(c.path)?" \uC811\uAE30":" \uD3BC\uCE58\uAE30")),t.onclick=()=>Xt(c.path)),d.append(t);let o=document.createElement("button");o.className="file"+(c.path===B?" selected":""),o.disabled=q;let g=document.createElement("span");g.className=c.directory?"icon folder-icon":"icon",c.directory?g.innerHTML='<svg viewBox="0 0 24 24" fill="none"><path d="M3 6a2 2 0 0 1 2-2h5l2 3h7a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2Z" fill="#f7d783" stroke="#bf9132" stroke-width="1.5"/><path d="M3 9h18" stroke="#bf9132" stroke-width="1.5"/></svg>':g.textContent="MD",g.setAttribute("aria-hidden","true");let s=document.createElement("span");s.textContent=c.name;let m=document.createElement("span");if(m.className="file-label",m.append(s),c.relativePath){let y=document.createElement("small");y.className="file-location",y.textContent=c.relativePath,m.append(y),o.title=c.path}if(o.append(g,m),o.title=c.path,o.setAttribute("aria-pressed",String(c.path===B)),o.onclick=()=>{ge=c.directory,U==="convert"&&(me=c.directory?"folder":"file"),B=c.path,(!D||!ue(D,B))&&(D=Ie||N),de(),ee(),G()},d.append(o),u("files").append(d),c.directory&&ie.has(c.path)){let y=be.get(c.path);if(y?.length)y.forEach(p=>i(p,f+1));else{let p=document.createElement("div");p.className="tree-note",p.style.paddingLeft=(f+1)*16+24+"px",p.textContent=Ce.has(c.path)?"\uBD88\uB7EC\uC624\uB294 \uC911\u2026":y?"\uD45C\uC2DC\uD560 \uBB38\uC11C\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4.":"\uD3BC\uCE58\uAE30\uB97C \uB2E4\uC2DC \uB20C\uB7EC \uC8FC\uC138\uC694.",u("files").append(p)}}};fe?n.forEach(c=>i(c)):N&&i({name:N.split(/[\\/]/).pop()||N,path:N,directory:!0}),u("files").scrollTop=e}async function Xt(e){if(q)return;let n=le;if(ie.has(e))ie.delete(e);else if(ie.add(e),!be.has(e)&&!Ce.has(e)){Ce.add(e),G();try{let i=await se("/api/browse?path="+encodeURIComponent(e));if(n!==le)return;be.set(e,i.entries)}catch(i){n===le&&(ie.delete(e),_("\uD3F4\uB354\uB97C \uD3BC\uCE60 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4: "+i.message,!0))}finally{n===le&&Ce.delete(e)}}n===le&&(G(),Se(),[...u("files").querySelectorAll(".tree-toggle")].find(i=>i.dataset.path===e)?.focus())}async function ce(e,n=!1){Te(),u("search").value="";let i=++le;try{let c=await se("/api/browse"+(e?"?path="+encodeURIComponent(e):""));return i!==le?void 0:(N=c.path,xe=c.parent,Le=c.entries,be=new Map([[N,Le]]),ie=new Set([N]),Ce=new Set,(n||!D)&&(D=N,B=null,ge=!1,Ee||de()),n&&(u("root-path-editor").open=!1),u("base-input").value=D||N,u("path").textContent=N,u("path").title=N,u("base-input").title=D||N,u("search").value="",G(),ee(),!0)}catch(c){i===le&&_("\uD3F4\uB354\uB97C \uC5F4 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4: "+c.message,!0)}}async function Lt(e){q=!0,ee(),G(),_("\uC2DC\uC2A4\uD15C \uD3F4\uB354 \uB2E4\uC774\uC5BC\uB85C\uADF8\uC5D0\uC11C \uD3F4\uB354\uB97C \uC120\uD0DD\uD574 \uC8FC\uC138\uC694.",!1,null);try{let n=await se("/api/pick-folder",{kind:e,start:e==="base"?D||N:qe()||xe});if(n.path){if(e==="base"&&oe.browser){le++,Te(),D=N=n.path,xe=void 0,B=null,ge=!1,Le=[],be=new Map,ie=new Set,Ce=new Set,u("base-input").value=n.path,Xe(""),u("sync-references").value="",ye={convert:{},sync:{}},Se(),location.reload();return}e==="base"?await ce(n.path,!0):(Xe(n.path),de())}else _("\uD3F4\uB354 \uC120\uD0DD\uC744 \uCDE8\uC18C\uD588\uC2B5\uB2C8\uB2E4.")}catch(n){_(n.message,!0)}finally{q=!1,ee(),G()}}u("choose-base").onclick=()=>Lt("base");u("choose-out").onclick=()=>Lt("out");u("apply-base").onclick=()=>ce(u("base-input").value,!0);u("base-input").onkeydown=e=>{e.key==="Enter"&&ce(u("base-input").value,!0)};u("up").onclick=()=>ce(xe);u("base-home").onclick=()=>{!q&&D&&ce(D)};u("convert-select-all").onclick=()=>{q||!D||U!=="convert"||(me="folder",ge=!0,B=D,de(),ee(),G())};function Te(){clearTimeout(St),Ke?.abort(),Me++,fe=null,Ie=null,Fe=!1,ke=""}u("search").oninput=()=>{Te();let e=u("search").value.trim();if(!e||!N){G();return}let n=Me;Ie=D||N,fe=[],Fe=!0,ke="\uAE30\uC900 \uD3F4\uB354\uC758 \uBAA8\uB4E0 \uD558\uC704 \uD3F4\uB354\uB97C \uAC80\uC0C9\uD569\uB2C8\uB2E4\u2026",G(),St=setTimeout(async()=>{Ke=new AbortController;try{let i=await se("/api/search?"+new URLSearchParams({path:Ie,q:e}),void 0,Ke.signal);if(n!==Me)return;Ie=i.root,fe=i.entries,ke=i.skipped?"\uC77D\uC744 \uC218 \uC5C6\uB294 \uD558\uC704 \uD3F4\uB354 "+i.skipped+"\uAC1C\uB97C \uAC74\uB108\uB6F0\uC5C8\uC2B5\uB2C8\uB2E4.":""}catch(i){if(n!==Me)return;ke="\uAC80\uC0C9\uD558\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4: "+i.message}finally{n===Me&&(Fe=!1,G())}},250)};u("direction").onchange=()=>{de(),ee(),u("direction-hint").textContent={markdown:"\uC704\uD0A4\uB9C1\uD06C\uB97C \uC0C1\uB300 \uB9C1\uD06C\uB85C, PDF \uD398\uC774\uC9C0 \uCC38\uC870\uB97C \uC774\uBBF8\uC9C0\uB85C \uBCC0\uD658\uD569\uB2C8\uB2E4.",obsidian:"\uC0C1\uB300 \uBB38\uC11C \uB9C1\uD06C\uB97C \uC704\uD0A4\uB9C1\uD06C\uB85C \uBC14\uAFB8\uACE0 \uAC01\uC8FC\xB7PDF \uCC38\uC870\uB97C \uBCF5\uC6D0\uD569\uB2C8\uB2E4.",repair:"\uB9C1\uD06C \uD615\uC2DD\uC740 \uC720\uC9C0\uD558\uACE0 \uCF54\uB4DC\uBE14\uB85D \uC5B8\uC5B4\xB7CSS \uC794\uD574\xB7\uC774\uC2A4\uCF00\uC774\uD504 \uB4F1\uC744 \uBCF4\uC815\uD569\uB2C8\uB2E4."}[u("direction").value]};var we=u("repair-help-button"),Ue=u("repair-tooltip"),$t=()=>{Ue.hidden=!1};we.onfocus=we.onclick=$t;we.parentElement.onmouseenter=$t;we.parentElement.onmouseleave=()=>{document.activeElement!==we&&(Ue.hidden=!0)};we.onblur=()=>{Ue.hidden=!0};we.onkeydown=e=>{e.key==="Escape"&&(Ue.hidden=!0,e.stopPropagation())};function Ot(e){let n=Ae[e];n&&(De.setValue(n.before),Be.setValue(n.after),u("comparison-empty").hidden=!0,u("preview-label").textContent=n.before===n.after?"\uBCF8\uBB38 \uBCC0\uACBD \uC5C6\uC74C":"\uBCC0\uACBD\uB41C \uBD80\uBD84 \uD45C\uC2DC")}u("preview-document").onchange=()=>Ot(Number(u("preview-document").value));u("fix").onchange=de;u("out-input").oninput=()=>{de(),ee()};async function Tt(e){if(!(q||!B)){q=!0;try{de(),ee(),G(),_(e?"\uBBF8\uB9AC\uBCF4\uAE30\uB97C \uB9CC\uB4DC\uB294 \uC911\uC785\uB2C8\uB2E4\u2026":"\uBB38\uC11C\uC640 \uCCA8\uBD80\uD30C\uC77C\uC744 \uBCC0\uD658\uD558\uB294 \uC911\uC785\uB2C8\uB2E4\u2026",!1,null),await Kt();let n={base:D,file:B,scope:me,out:qe(),to:u("direction").value,fix:u("fix").checked,preview:e},i,c={};for(;!i;)try{i=await se("/api/convert",{...n,approvedOverwrites:c})}catch(f){if(e||f.code!=="OVERWRITE_REQUIRED")throw f;if(!await Ht({conflicts:f.conflicts,inPlace:f.inPlace,output:f.output||n.out})){_("\uB36E\uC5B4\uC4F0\uAE30\uB97C \uCDE8\uC18C\uD588\uC2B5\uB2C8\uB2E4. \uC800\uC7A5\uD558\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4.");return}for(let d of f.conflicts)c[d.path]=d.hash;_("\uAE30\uC874 \uD30C\uC77C\uC744 \uB36E\uC5B4\uC4F0\uB294 \uC911\uC785\uB2C8\uB2E4\u2026",!1,null)}if(Ae=i.previews,u("preview-document").replaceChildren(...Ae.map((f,d)=>{let t=document.createElement("option");return t.value=d,t.textContent=f.path,t})),u("preview-documents").hidden=i.documentCount<=1,u("preview-count").textContent=`\uC804\uCCB4 ${i.documentCount}\uAC1C \uBCC0\uD658 \xB7 ${Ae.length}\uAC1C \uBCF8\uBB38 \uBE44\uAD50`,Ot(0),u("log").textContent=i.log,u("details").hidden=!1,he=i.output,he&&(u("output").textContent=oe.browser&&oe.folderName(he)||he,u("result").hidden=!1),e)_("\uBBF8\uB9AC\uBCF4\uAE30 \uC644\uB8CC. \uCD9C\uB825 \uC704\uCE58\uB97C \uD655\uC778\uD558\uACE0 \uC800\uC7A5\uD558\uC138\uC694.",!1,"success");else if(i.saved&&i.saved.created===0&&i.saved.overwritten===0)_(`\uAE30\uC874 \uCD9C\uB825\uACFC \uB0B4\uC6A9\uC774 \uAC19\uC544 \uC800\uC7A5\uD558\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4. \uD30C\uC77C ${i.saved.reused}\uAC1C\uB97C \uADF8\uB300\uB85C \uC7AC\uC0AC\uC6A9\uD588\uC2B5\uB2C8\uB2E4.`,!1,"success");else{let f=i.saved;_(f?`\uC800\uC7A5 \uC644\uB8CC \xB7 \uC0C8 \uD30C\uC77C ${f.created}\uAC1C \xB7 \uB36E\uC5B4\uC4F4 \uD30C\uC77C ${f.overwritten}\uAC1C \xB7 \uB3D9\uC77C \uB0B4\uC6A9 \uC7AC\uC0AC\uC6A9 ${f.reused}\uAC1C (\uBB38\uC11C\xB7\uCCA8\uBD80 \uD3EC\uD568)`:`\uBB38\uC11C ${i.documentCount}\uAC1C \uC800\uC7A5 \uC644\uB8CC.`,!1,"success")}}catch(n){_(n.message,!0)}finally{q=!1,ee(),G()}}}u("next-document").onclick=()=>{q||(B=null,de(),Te(),u("search").value="",ee(),G(),u("search").focus(),u("search").scrollIntoView({block:"center",behavior:"auto"}),_("\uB2E4\uC74C \uBB38\uC11C\uB97C \uC120\uD0DD\uD558\uC138\uC694. \uAE30\uC900 \uD3F4\uB354\uC640 \uBCC0\uD658 \uC124\uC815\uC740 \uC720\uC9C0\uB429\uB2C8\uB2E4."))};u("preview").onclick=()=>Tt(!0);u("save").onclick=()=>Tt(!1);u("open").onclick=async()=>{try{let e=await se("/api/open",{path:he});oe.browser&&_(`\uC120\uD0DD\uD55C \uCD9C\uB825 \uD3F4\uB354 (${e.name})\uC5D0 \uC800\uC7A5\uD588\uC2B5\uB2C8\uB2E4.`)}catch(e){_("\uD3F4\uB354\uB97C \uC5F4 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. \uC704 \uC800\uC7A5 \uACBD\uB85C\uB97C \uC774\uC6A9\uD574 \uC8FC\uC138\uC694. "+e.message,!0)}};Oe=wt({activity:Et,api:se,loadMonaco:Re,notify:$e,context:()=>{let e=U==="sync"?Mt():ye.sync;return{base:e.base||e.folder,folder:e.folder,file:e.file,directory:e.selectedDirectory}},setBusy:e=>{q=e,ee(),G()},showSync:()=>_e("sync"),refresh:async()=>{U==="sync"&&await ce(D||N)}});document.querySelector(".app-main").addEventListener("input",Se);document.querySelector(".app-main").addEventListener("change",Se);async function Pt(e){let n=o=>typeof e[o]=="string"?e[o]:"";le++,Te(),D=null,B=null,ge=!1,N=void 0,xe=void 0,Le=[],u("base-input").value="",ee(),G();let i="",c=n("base"),f=n("folder");c?await ce(c,!0)?f&&ue(D,f)&&f!==D&&(await ce(f)||(i="\uC774\uC804 \uD0D0\uC0C9 \uD3F4\uB354\uB97C \uC5F4 \uC218 \uC5C6\uC5B4 \uAE30\uC900 \uD3F4\uB354\uB97C \uC5F4\uC5C8\uC2B5\uB2C8\uB2E4.")):(i="\uC800\uC7A5\uB41C \uAE30\uC900 \uD3F4\uB354\uB97C \uC5F4 \uC218 \uC5C6\uC5B4 \uC2DC\uC791 \uD3F4\uB354\uB97C \uC5F4\uC5C8\uC2B5\uB2C8\uB2E4. \uACBD\uB85C\uB97C \uB2E4\uC2DC \uC120\uD0DD\uD574 \uC8FC\uC138\uC694.",await ce()):await ce(f||void 0)||(i="\uC774\uC804 \uD3F4\uB354\uB97C \uC5F4 \uC218 \uC5C6\uC5B4 \uC2DC\uC791 \uD3F4\uB354\uB97C \uC5F4\uC5C8\uC2B5\uB2C8\uB2E4.",await ce());let d=n("file");if(d&&D&&ue(D,d))try{if(U==="convert"&&me==="folder"||U==="sync"&&e.selectedDirectory===!0)B=(await se("/api/browse?path="+encodeURIComponent(d))).path,ge=!0;else{let o=d.slice(0,Math.max(d.lastIndexOf("/"),d.lastIndexOf("\\")));(await se("/api/browse?path="+encodeURIComponent(o))).entries.some(s=>!s.directory&&s.path===d)?B=d:i="\uC774\uC804\uC5D0 \uC120\uD0DD\uD55C \uBB38\uC11C\uAC00 \uC5C6\uC5B4 \uC120\uD0DD\uC744 \uD574\uC81C\uD588\uC2B5\uB2C8\uB2E4."}}catch{i="\uC774\uC804\uC5D0 \uC120\uD0DD\uD55C \uBB38\uC11C\uB97C \uC5F4 \uC218 \uC5C6\uC5B4 \uC120\uD0DD\uC744 \uD574\uC81C\uD588\uC2B5\uB2C8\uB2E4."}let t=new Set(Array.isArray(e.expanded)?e.expanded.filter(o=>typeof o=="string"&&N&&ue(N,o)):[]);if(!Array.isArray(e.expanded)&&B&&N&&ue(N,B)){let o=B.slice(0,Math.max(B.lastIndexOf("/"),B.lastIndexOf("\\")));for(;o&&ue(N,o)&&(t.add(o),o!==N);)o=o.slice(0,Math.max(o.lastIndexOf("/"),o.lastIndexOf("\\")))}for(let o of t)try{be.has(o)||be.set(o,(await se("/api/browse?path="+encodeURIComponent(o))).entries),ie.add(o)}catch{}return!i&&n("baseInput")&&(u("base-input").value=n("baseInput")),i&&U==="convert"&&de(),i}async function _t(){let e=Vt(),n=f=>typeof e[f]=="string"?e[f]:"";q=!0,ee(),u("sync-references").value=n("referenceRoots"),Xe(n("out")),["file","folder"].includes(e.convertScope)&&(me=e.convertScope),["markdown","obsidian","repair"].includes(e.direction)&&(u("direction").value=e.direction),typeof e.fix=="boolean"&&(u("fix").checked=e.fix),["markdown","obsidian"].includes(e.pullFormat)&&(u("sync-pull-format").value=e.pullFormat),typeof e.verify=="boolean"&&(u("sync-verify").checked=e.verify),typeof e.sideBySide=="boolean"&&(u("side-by-side").checked=e.sideBySide,re?.updateOptions({renderSideBySide:e.sideBySide}));let i=f=>f&&typeof f=="object"&&!Array.isArray(f);ye=i(e.workspaces)?{convert:i(e.workspaces.convert)?e.workspaces.convert:{},sync:i(e.workspaces.sync)?e.workspaces.sync:{}}:{convert:{base:e.base,folder:e.folder,file:e.file,baseInput:e.baseInput},sync:{base:e.base,folder:e.folder,file:e.file,baseInput:e.baseInput}},u("direction").onchange(),At(e.mode==="sync"?"sync":"convert");let c;try{c=await Pt(ye[U])}finally{Ee=!1,q=!1,ee(),G()}await Oe.resume(),c&&_(c,!0)}oe.ready.then(_t).then(()=>{let e=Oe.watch();window.addEventListener("pagehide",e,{once:!0})}).catch(e=>$e(e.message,"error"));
|
|
3
|
+
`}function mt(e){let t=Object.hasOwn(ut,e.kind)?e.kind:"job",r=String(e.id??"").replace(/[^a-zA-Z0-9-]/g,"").slice(0,36)||"current";return`csync-${t}-${r}.log`}function ht({api:e,selection:t,setBusy:r,isBusy:c,status:u,start:d}){let n=p=>document.getElementById(p),a=n("sync-restore-dialog"),i,s=()=>JSON.stringify(t());function g(){i=void 0,a.close()}async function E(p,h){if(c())return;let w=s(),b=t();r(!0);try{let y=await e("/api/sync/restore",{...b,path:p,overwrite:h});if(w!==s())return;i={request:b,confirmationId:y.confirmationId,identity:w},n("sync-restore-title").textContent=h?"\uB85C\uCEEC \uC218\uC815\uC744 \uBC84\uB9AC\uACE0 \uC6D0\uACA9 \uCD5C\uC2E0\uC73C\uB85C \uB418\uB3CC\uB9B4\uAE4C\uC694?":"\uB204\uB77D\uB41C \uBB38\uC11C\uB97C \uC6D0\uACA9\uC5D0\uC11C \uB2E4\uC2DC \uBC1B\uC744\uAE4C\uC694?",n("sync-restore-path").textContent=y.path,n("sync-restore-warning").textContent=h?"\uC774 \uBB38\uC11C\uC640 \uC6D0\uACA9\uC5D0\uC11C \uCC38\uC870\uD558\uB294 \uCCA8\uBD80\uC758 \uB85C\uCEEC \uC218\uC815\uC774 \uC0AC\uB77C\uC9D1\uB2C8\uB2E4. \uC6D0\uACA9 \uCD5C\uC2E0 \uB0B4\uC6A9\uC73C\uB85C \uAD50\uCCB4\uD558\uBA70 \uB2E4\uB978 \uBB38\uC11C\uB294 \uC720\uC9C0\uD569\uB2C8\uB2E4.":"\uC9C0\uC815\uD55C \uBB38\uC11C\uC640 \uCC38\uC870 \uCCA8\uBD80\uB9CC \uB2E4\uC2DC \uBC1B\uC2B5\uB2C8\uB2E4. \uAE30\uC874 \uD30C\uC77C\uACFC \uB0B4\uC6A9\uC774 \uB2E4\uB978 \uAE30\uC874 \uCCA8\uBD80\uB294 \uB36E\uC5B4\uC4F0\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.",n("sync-restore-warning").textContent+=` \uAC00\uC838\uC624\uAE30 \uD615\uC2DD: ${b.format==="obsidian"?"Obsidian":"Markdown"}.`,n("sync-restore-confirm").textContent=h?"\uB85C\uCEEC \uC218\uC815 \uBC84\uB9AC\uACE0 \uC6D0\uBCF5":"\uC6D0\uACA9\uC5D0\uC11C \uBCF5\uAD6C",a.showModal(),n("sync-restore-cancel").focus()}catch(y){u(y.message,!0)}finally{r(!1)}}return n("sync-restore-cancel").onclick=g,a.addEventListener("cancel",g),n("sync-restore-confirm").onclick=async()=>{if(!i||c())return;if(i.identity!==s()){g(),u("\uB300\uC0C1\uC774\uB098 \uC5F0\uACB0 \uC124\uC815\uC774 \uBC14\uB00C\uC5C8\uC2B5\uB2C8\uB2E4. \uBCF5\uAD6C \uB300\uC0C1\uC744 \uB2E4\uC2DC \uC120\uD0DD\uD558\uC138\uC694.",!0);return}let p=i;g(),await d("restore",{...p.request,confirmationId:p.confirmationId})},{open:E}}function xt({api:e,selection:t,monaco:r,loadMonaco:c=async()=>r,notify:u}){let d=h=>document.getElementById(h),n="",a=0,i,s,g;function E(){a++,d("sync-diff-dialog").close()}d("sync-diff-close").onclick=E,d("sync-diff-dialog").addEventListener("cancel",()=>{a++});async function p(h=!1){let w=++a,b={...t(),path:n,remote:h};d("sync-diff-note").textContent=h?"\uC120\uD0DD\uD55C \uD398\uC774\uC9C0 \uBCF8\uBB38\uB9CC \uC870\uD68C\uD558\uACE0 \uC788\uC2B5\uB2C8\uB2E4\u2026":"\uC800\uC7A5\uB41C \uB85C\uCEEC \uBE44\uAD50 \uAE30\uC900\uC744 \uD655\uC778\uD558\uACE0 \uC788\uC2B5\uB2C8\uB2E4\u2026",h&&(d("sync-diff-remote").textContent="\uC6D0\uACA9 \uBE44\uAD50 \uB2E4\uC2DC \uC2DC\uB3C4"),d("sync-diff-remote").disabled=!0,d("sync-diff-editor").hidden=!0,d("sync-diff-labels").hidden=!0;try{let y=await e("/api/sync/diff",b);if(w!==a||!d("sync-diff-dialog").open||!h&&y.before===null&&y.canRemote&&(d("sync-diff-note").textContent="\uC800\uC7A5\uB41C \uAE30\uC900\uBCF8\uC774 \uC5C6\uC5B4 \uC120\uD0DD\uD55C \uC6D0\uACA9 \uD398\uC774\uC9C0 \uBCF8\uBB38\uC744 \uC870\uD68C\uD558\uACE0 \uC788\uC2B5\uB2C8\uB2E4\u2026",d("sync-diff-remote").hidden=!1,d("sync-diff-remote").textContent="\uC6D0\uACA9 \uBE44\uAD50 \uB2E4\uC2DC \uC2DC\uB3C4",y=await e("/api/sync/diff",{...b,remote:!0}),w!==a||!d("sync-diff-dialog").open)||(d("sync-diff-note").textContent=y.note,d("sync-diff-before-label").textContent=y.source==="remote"?"\uD604\uC7AC \uC6D0\uACA9 \uBCF8\uBB38 (\uADFC\uC0AC \uBCC0\uD658)":y.source==="new"?"\uC0C8 \uBB38\uC11C (\uC6D0\uACA9 \uC5C6\uC74C)":"\uB9C8\uC9C0\uB9C9 \uB3D9\uAE30\uD654 \uAE30\uC900",d("sync-diff-remote").hidden=!y.canRemote,d("sync-diff-remote").textContent=y.source==="remote"?"\uC6D0\uACA9 \uC0C8\uB85C\uACE0\uCE68":"\uC6D0\uACA9\uACFC \uBE44\uAD50 \xB7 \uBCF8\uBB38 1\uD68C \uC870\uD68C",y.before===null))return;if(d("sync-diff-editor").hidden=!1,d("sync-diff-labels").hidden=!1,!i){let I=await c();if(w!==a||!d("sync-diff-dialog").open)return;s=I.editor.createModel("","markdown"),g=I.editor.createModel("","markdown"),i=I.editor.createDiffEditor(d("sync-diff-editor"),{automaticLayout:!0,readOnly:!0,originalEditable:!1,ignoreTrimWhitespace:!1,renderSideBySide:!0,useInlineViewWhenSpaceIsLimited:!0,renderSideBySideInlineBreakpoint:700,minimap:{enabled:!1},wordWrap:"on",scrollBeyondLastLine:!1,fontSize:12}),i.setModel({original:s,modified:g}),i.getOriginalEditor().updateOptions({ariaLabel:"\uAE30\uC900 Markdown"}),i.getModifiedEditor().updateOptions({ariaLabel:"\uD604\uC7AC \uB85C\uCEEC Markdown"})}s.setValue(y.before),g.setValue(y.after),i.layout()}catch(y){w===a&&(d("sync-diff-note").textContent=y.message,u(y.message,"error"))}finally{w===a&&(d("sync-diff-remote").disabled=!1)}}return d("sync-diff-remote").onclick=()=>p(!0),{open:async(h,w=!0)=>{n=h,d("sync-diff-path").textContent=n,d("sync-diff-remote").hidden=!w,d("sync-diff-dialog").showModal(),await p(w)}}}function bt({api:e,selection:t,changed:r,busy:c,status:u,update:d,compare:n,restore:a=()=>{},canRestore:i=()=>!1,scopeKey:s=()=>""}){let g=x=>document.getElementById(x),E="csync.staging.views.v1",p=new Set(["same","new","changed","moved","unavailable"]),h=[],w="",b="",y=null,I=!1,L="",A="",N,R=!0,O=null,q=()=>{let{verify:x,...C}=t();return JSON.stringify([C,s()])},B=()=>JSON.stringify([t().base,t().referenceRoots]),X=()=>h.filter(x=>!x.unmapped&&x.remoteState!=="new"&&x.status!=="unavailable"&&(x.staged?x.stale:x.status!=="same")).map(x=>x.path),W=()=>h.filter(x=>x.staged).map(x=>x.path),$=()=>!!w&&w===q();function H(){try{let x=JSON.parse(localStorage.getItem(E));return Array.isArray(x)?x:[]}catch{return[]}}function ae(){try{let x=H().filter(C=>C?.key!==b);x.push({key:b,scannedAt:y,localCheckFailed:!!A,rows:h.map(({path:C,status:m,staged:l,stale:v,pageId:S,renamed:o,unmapped:M,recoverable:J,localUnverified:j,remoteState:Y,remoteVersion:ne,baselineVersion:ke})=>({path:C,status:m,staged:l,stale:v,pageId:S,renamed:o,unmapped:M,recoverable:J,localUnverified:j,remoteState:Y,remoteVersion:ne,baselineVersion:ke}))}),localStorage.setItem(E,JSON.stringify(x.slice(-5)))}catch{}}function te(){let x=I&&!$();if(g("sync-stage-note").classList.toggle("stale",x||!!A),A){g("sync-stage-note").textContent=(x?"\uC774\uC804 \uC870\uD68C \uACB0\uACFC\uC785\uB2C8\uB2E4. ":"")+"\uB85C\uCEEC \uBCC0\uACBD \uD655\uC778 \uC2E4\uD328: "+A+" \uC6D0\uACA9 \uC870\uD68C \uACB0\uACFC\uB294 \uC544\uB798\uC5D0 \uD45C\uC2DC\uD569\uB2C8\uB2E4. \uC5C5\uB85C\uB4DC\uD558\uB824\uBA74 \uB85C\uCEEC \uC624\uB958\uB97C \uD574\uACB0\uD55C \uB4A4 \uB2E4\uC2DC \uD655\uC778\uD558\uC138\uC694.";return}if(x){let C=new Date(y).toLocaleString("ko-KR",{timeZone:"Asia/Seoul"});g("sync-stage-note").textContent=`\uC774\uC804 \uC870\uD68C \uACB0\uACFC\uC785\uB2C8\uB2E4 (${C}). \uD30C\uC77C\uC774\uB098 \uC5C5\uB85C\uB4DC \uC120\uD0DD\uC774 \uBC14\uB00C\uC5C8\uC744 \uC218 \uC788\uC2B5\uB2C8\uB2E4. \uB85C\uCEEC \uBCC0\uACBD\uC744 \uC790\uB3D9\uC73C\uB85C \uB2E4\uC2DC \uD655\uC778\uD55C \uB4A4 \uC5C5\uB85C\uB4DC\uD560 \uBB38\uC11C\uB97C \uCCB4\uD06C\uD558\uACE0 \uBBF8\uB9AC\uBCF4\uAE30\uB97C \uC9C4\uD589\uD558\uC138\uC694.`}else g("sync-stage-note").textContent=I?h.some(C=>C.status!=="same"||C.staged||C.remoteState&&C.remoteState!=="unchanged")?h.some(C=>["unknown","unavailable"].includes(C.remoteState))?"\uC77C\uBD80 \uBB38\uC11C\uC758 \uC6D0\uACA9 \uC815\uBCF4\uB97C \uD655\uC778\uD558\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4. \uB85C\uCEEC \uC218\uC815\uC744 \uB73B\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. Fetch\uB85C \uB2E4\uC2DC \uC870\uD68C\uD558\uACE0 \uBB38\uC11C\uC758 \uC0C1\uC138 \uC0AC\uC720\uB97C \uD655\uC778\uD558\uC138\uC694.":h.some(C=>C.unmapped)?"\uBC1B\uAE30 \uBBF8\uC644\uB8CC \uBB38\uC11C\uAC00 \uC788\uC2B5\uB2C8\uB2E4. Fetch \uD6C4 \uB2E4\uC2DC \uAC00\uC838\uC624\uBA74 \uC6D0\uACA9\uACFC \uC77C\uCE58\uD558\uB294 \uBB38\uC11C\uB9CC \uC5F0\uACB0\uD558\uBA70 \uB85C\uCEEC \uC218\uC815\uC740 \uBCF4\uC874\uD569\uB2C8\uB2E4.":h.some(C=>C.staged&&C.stale)?"\uC218\uC815\uB418\uAC70\uB098 \uBC94\uC704\uB97C \uBC97\uC5B4\uB09C \uB300\uC0C1\uC774 \uC788\uC2B5\uB2C8\uB2E4. \uCD5C\uC2E0 \uB0B4\uC6A9 \uBC18\uC601\uC744 \uB204\uB974\uAC70\uB098 \uCCB4\uD06C\uB97C \uD574\uC81C\uD574 \uC5C5\uB85C\uB4DC\uC5D0\uC11C \uC81C\uC678\uD558\uC138\uC694.":h.some(C=>C.remoteState==="new"||C.status==="same"&&C.remoteState==="changed")?"\uC6D0\uACA9 \uC2E0\uADDC\xB7\uBCC0\uACBD \uBB38\uC11C\uB294 \uC704\uC758 \uAC00\uC838\uC624\uAE30\uB85C \uBC1B\uC73C\uC138\uC694. \uC5C5\uB85C\uB4DC \uCCB4\uD06C\uB294 \uB85C\uCEEC \uBB38\uC11C\uB97C \uBCF4\uB0BC \uB54C\uB9CC \uC0AC\uC6A9\uD569\uB2C8\uB2E4.":"\uCCB4\uD06C\uD558\uBA74 \uC5C5\uB85C\uB4DC\uC5D0 \uBC14\uB85C \uD3EC\uD568\uB429\uB2C8\uB2E4. \uCCB4\uD06C\uB97C \uD574\uC81C\uD558\uBA74 \uC81C\uC678\uB418\uBA70 \uC6D0\uBCF8 \uD30C\uC77C\uC740 \uC720\uC9C0\uB429\uB2C8\uB2E4. \uC120\uD0DD \uD6C4 \uC5C5\uB85C\uB4DC \uBBF8\uB9AC\uBCF4\uAE30\uB97C \uC9C4\uD589\uD558\uC138\uC694.":"\uB85C\uCEEC\uC5D0 \uBCC0\uACBD\uB41C \uBB38\uC11C\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4. \uC6D0\uACA9 \uC2E0\uADDC\xB7\uBCC0\uACBD\uC740 Fetch\uB85C \uD655\uC778\uD558\uC138\uC694.":"\uB85C\uCEEC \uBCC0\uACBD\uC744 \uC790\uB3D9\uC73C\uB85C \uD655\uC778\uD569\uB2C8\uB2E4. \uC6D0\uACA9 \uC0C1\uD0DC\uB294 Fetch\uB97C \uB20C\uB7EC \uD655\uC778\uD558\uC138\uC694."}function G(){g("sync-stage-list").replaceChildren();let x=l=>l.localUnverified?"attention":l.remoteState==="new"?l.recoverable||l.status==="unavailable"?"receive":"conflict":l.unmapped?"attention":l.remoteState==="changed"&&["changed","moved","new"].includes(l.status)?"conflict":l.status==="unavailable"||l.stale||["unknown","unavailable"].includes(l.remoteState)?"attention":l.status==="same"&&l.remoteState==="changed"?"receive":"send",C={receive:0,conflict:1,attention:2,send:3},m;for(let l of h.filter(v=>v.status!=="same"||v.staged||v.remoteState&&v.remoteState!=="unchanged").sort((v,S)=>C[x(v)]-C[x(S)])){let v=x(l);if(m!==v){let K=document.createElement("h3");K.className="stage-group-heading",K.textContent={receive:"\u2193 \uBC1B\uC744 \uBB38\uC11C \xB7 \uC6D0\uACA9 \uC2E0\uADDC\xB7\uBCC0\uACBD",conflict:"! \uC591\uCABD \uBCC0\uACBD \xB7 \uBE44\uAD50 \uD544\uC694",attention:"! \uC5F0\uACB0 \uD655\uC778 \uD544\uC694",send:"\u2191 \uBCF4\uB0BC \uBCC0\uACBD \xB7 \uB85C\uCEEC \uC791\uC5C5"}[v],g("sync-stage-list").append(K),m=v}let S=document.createElement("div"),o=document.createElement("label"),M=document.createElement("input"),J=document.createElement("span"),j=document.createElement("small");M.type="checkbox",M.value=l.path,M.checked=l.staged,M.setAttribute("aria-label",l.path+" \uC5C5\uB85C\uB4DC\uC5D0 \uD3EC\uD568"),J.textContent=l.path,J.title=[l.path,...l.remoteReasons||[]].join(`
|
|
4
|
+
`);let Y=l.renamed?"\uB85C\uCEEC \uACBD\uB85C \uBCC0\uACBD":{new:"\uB85C\uCEEC \uC2E0\uADDC",changed:"\uB85C\uCEEC \uC218\uC815",moved:"\uB85C\uCEEC \uC774\uB3D9",same:"\uBCC0\uACBD \uC5C6\uC74C",unavailable:"\uD30C\uC77C \uD655\uC778"}[l.status],ne=document.createElement("span"),ke=document.createElement("span"),Pe=l.remoteState==="new"&&!l.unmapped&&l.status!=="unavailable"||l.remoteState==="changed"&&["changed","moved","new"].includes(l.status),Ze=l.localUnverified||l.unmapped||l.stale||Pe||["unknown","unavailable"].includes(l.remoteState),Qe=l.remoteState==="new"&&!Pe?"incoming":Ze?"attention":l.staged?"included":l.remoteState==="changed"?"moved":l.status,Ye={incoming:'<path d="M12 3v12m-5-5 5 5 5-5M4 17v4h16v-4"/>',included:'<circle cx="12" cy="12" r="9"/><path d="m8 12 3 3 5-6"/>',new:'<path d="M12 5v14M5 12h14"/>',changed:'<circle cx="12" cy="12" r="3" fill="currentColor" stroke="none"/>',moved:'<path d="M4 8h15m-4-4 4 4-4 4M20 16H5m4-4-4 4 4 4"/>',same:'<path d="m5 12 4 4L19 6"/>',attention:'<path d="m12 3 10 18H2L12 3ZM12 9v5m0 3v.1"/>'};if(ne.className="stage-state-icon",ne.setAttribute("aria-hidden","true"),ne.innerHTML='<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round">'+(Ye[Qe]||Ye.attention)+"</svg>",ke.textContent=l.localUnverified?{changed:"\uC6D0\uACA9 \uBCC0\uACBD",new:"\uC6D0\uACA9 \uC2E0\uADDC",unknown:"\uC6D0\uACA9 \uD655\uC778 \uD544\uC694",unavailable:"\uC6D0\uACA9 \uC870\uD68C \uBD88\uAC00"}[l.remoteState]+" \xB7 \uB85C\uCEEC \uBBF8\uD655\uC778":l.unmapped?"\uBC1B\uAE30 \uBBF8\uC644\uB8CC \xB7 \uC6D0\uACA9 \uB300\uC870 \uD544\uC694":l.remoteState==="new"?Pe?"\uC6D0\uACA9 \uC2E0\uADDC \xB7 \uB85C\uCEEC \uACBD\uB85C \uD655\uC778":"\uC6D0\uACA9 \uC2E0\uADDC":Pe?l.stale?"\uC591\uCABD \uC218\uC815 \xB7 \uCD5C\uC2E0 \uB0B4\uC6A9 \uD655\uC778 \uD544\uC694":"\uC591\uCABD \uC218\uC815 \xB7 \uCDA9\uB3CC \uC8FC\uC758":l.stale?"\uCD5C\uC2E0 \uB0B4\uC6A9 \uD655\uC778 \uD544\uC694":l.remoteState==="changed"?l.remoteReasons?.some(K=>K.includes("\uC704\uCE58 \uBCC0\uACBD"))?"\uC6D0\uACA9 \uC704\uCE58 \uBCC0\uACBD":"\uC6D0\uACA9 \uC218\uC815":l.remoteState==="unavailable"?"\uC6D0\uACA9 \uC870\uD68C \uBD88\uAC00":l.remoteState==="unknown"?"\uC6D0\uACA9 \uD655\uC778 \uD544\uC694":Y+(l.staged?" \xB7 \uC5C5\uB85C\uB4DC \uD3EC\uD568":""),M.remoteOnly=l.status==="same"&&["unknown","unavailable"].includes(l.remoteState)||l.unmapped&&!l.staged||l.remoteState==="new"&&!l.staged||l.status==="same"&&l.remoteState==="changed"&&!l.staged,M.localUnverified=!!l.localUnverified,M.remoteOnly&&(M.title=["unknown","unavailable"].includes(l.remoteState)?"\uC6D0\uACA9 \uC815\uBCF4\uB97C \uD655\uC778\uD558\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4. Fetch\uB85C \uB2E4\uC2DC \uC870\uD68C\uD558\uC138\uC694.":l.remoteState==="new"?"\uC544\uC9C1 \uBC1B\uC9C0 \uC54A\uC740 \uC6D0\uACA9 \uBB38\uC11C\uC785\uB2C8\uB2E4. Pull\uB85C \uAC00\uC838\uC624\uC138\uC694.":"\uC6D0\uACA9\uC5D0\uC11C\uB9CC \uBCC0\uACBD\uB418\uC5C8\uC2B5\uB2C8\uB2E4. diff\uB97C \uD655\uC778\uD558\uACE0 Pull\uB85C \uAC00\uC838\uC624\uC138\uC694."),j.append(ne,ke),S.className="sync-stage-row"+(Ze?" needs-attention":l.staged?" is-included":x(l)==="receive"?" is-incoming":""),o.className="sync-stage-choice",j.className="stage-status stage-status-"+Qe,M.onchange=()=>k(M.checked?"add":"remove",[l.path]),o.append(M,J),S.append(o,j),!l.unmapped&&l.staged&&l.stale&&l.status!=="unavailable"){let K=document.createElement("button");K.type="button",K.textContent="\u21BB \uCD5C\uC2E0 \uB0B4\uC6A9 \uBC18\uC601",K.setAttribute("aria-label",l.path+" \uCD5C\uC2E0 \uB0B4\uC6A9 \uBC18\uC601"),K.onclick=()=>k("add",[l.path]),S.append(K)}if(!l.unmapped&&l.status!=="unavailable"&&l.remoteState!=="new"){let K=document.createElement("button");K.type="button",K.textContent="\u2194 diff \uBCF4\uAE30",K.setAttribute("aria-label",l.path+" \uBCC0\uACBD \uBE44\uAD50"),K.onclick=()=>n(l.path),S.append(K)}if(!(l.status==="same"&&["unknown","unavailable"].includes(l.remoteState))&&!l.localUnverified&&l.remoteState!=="new"&&l.pageId&&l.status!=="new"&&l.status!=="moved"){let K=document.createElement("button");K.type="button",K.className="stage-restore",K.isRestore=!0;let Ne=document.createElement("span"),et=document.createElement("span");Ne.className="stage-action-icon",Ne.setAttribute("aria-hidden","true"),Ne.innerHTML='<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="'+(l.status==="unavailable"?"M12 3v12m-5-5 5 5 5-5M4 17v4h16v-4":"M3 11a9 9 0 1 1 2.64 6.36M3 3v8h8")+'"/></svg>',et.textContent=l.status==="unavailable"?"\uC6D0\uACA9\uC5D0\uC11C \uBCF5\uAD6C":"\uC6D0\uACA9\uC73C\uB85C \uC6D0\uBCF5",K.append(Ne,et),K.setAttribute("aria-label",l.path+" \uC6D0\uACA9 \uCD5C\uC2E0\uC73C\uB85C \uBCF5\uAD6C"),K.onclick=()=>{$()&&i()&&a(l.path,l.status!=="unavailable")},S.append(K)}g("sync-stage-list").append(S)}te()}function pe(){let x=B();if(b===x)return;b=x,w="",h=[],y=null,I=!1,L="",A="";let C=H().find(m=>m?.key===x);C&&Number.isFinite(Date.parse(C.scannedAt))&&Array.isArray(C.rows)&&C.rows.every(m=>m&&typeof m.path=="string"&&p.has(m.status)&&typeof m.staged=="boolean"&&typeof m.stale=="boolean")&&(A=C.localCheckFailed?"\uC774\uC804 \uB85C\uCEEC \uBCC0\uACBD \uD655\uC778\uC5D0 \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4. \uB2E4\uC2DC \uD655\uC778\uD558\uC138\uC694.":"",h=C.rows,y=C.scannedAt,I=!0),G()}function oe(x){pe(),w&&w!==q()&&(w="",te()),g("sync-stage-scan").disabled=x||!t().base,g("sync-stage-add").disabled=x||!$()||!X().length,g("sync-stage-remove").disabled=x||!$()||!W().length,g("sync-stage-count").textContent=`${I&&!$()?"\uC774\uC804 \uC870\uD68C \xB7 ":""}${h.filter(C=>C.staged).length}\uAC1C \uC5C5\uB85C\uB4DC \uC608\uC815`;for(let C of g("sync-stage-list").querySelectorAll("input"))C.disabled=x||!$()||C.remoteOnly||C.localUnverified;for(let C of g("sync-stage-list").querySelectorAll("button"))C.disabled=x||C.isRestore&&(!$()||!i())}async function z(x,C,m=!1){if(x&&(!$()||!C?.length))return;let l=q(),v=t(),S=!1;m||c(!0),m||(g("sync-stage-note").textContent=x==="remove"?"\uC5C5\uB85C\uB4DC \uB300\uC0C1\uC5D0\uC11C \uC81C\uC678\uD558\uACE0 \uC788\uC2B5\uB2C8\uB2E4\u2026":x==="add"?"\uC120\uD0DD\uD55C \uBB38\uC11C\uB97C \uD655\uC778\uD574 \uC5C5\uB85C\uB4DC\uC5D0 \uD3EC\uD568\uD558\uACE0 \uC788\uC2B5\uB2C8\uB2E4\u2026":"\uB85C\uCEEC \uBB38\uC11C\uC758 \uBCC0\uACBD\uC744 \uAC80\uC0AC\uD558\uACE0 \uC788\uC2B5\uB2C8\uB2E4\u2026");try{let o,M="";try{o=await e("/api/sync/staging",{...v,...x?{action:x,paths:C}:{}},void 0,{background:m})}catch(j){if(x||l!==q())throw j;M=j.message,o=await e("/api/sync/staging",{...v,remoteOnly:!0},void 0,{background:m})}if(l!==q())return;if(!Array.isArray(o.rows))throw new Error("\uBCC0\uACBD \uBAA9\uB85D \uC751\uB2F5\uC744 \uD655\uC778\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. \uB2E4\uC2DC \uBD88\uB7EC\uC624\uC138\uC694.");let J=g("sync-stage-remote-note");if(J&&(J.textContent=o.remoteCheckedAt?`\uC6D0\uACA9 \uD655\uC778: ${new Date(o.remoteCheckedAt).toLocaleString("ko-KR",{timeZone:"Asia/Seoul"})}${o.remoteExpired?" \xB7 \uC774\uC804 \uC870\uD68C \uACB0\uACFC\uC785\uB2C8\uB2E4. Fetch\uB85C \uAC31\uC2E0\uD558\uC138\uC694.":""}`:"\uC6D0\uACA9 \uC0C1\uD0DC \uBBF8\uD655\uC778 \xB7 Fetch\uB97C \uB204\uB974\uBA74 \uBC84\uC804\uACFC \uC704\uCE58\uB97C \uBB36\uC5B4\uC11C \uC870\uD68C\uD569\uB2C8\uB2E4."),m&&$()&&o.revision&&o.revision===L&&A===M)return;A=M,L=o.revision||"",S=!0,r(),h=o.rows,w=l,I=!0,(!x||!y)&&(y=new Date().toISOString()),ae(),G(),g("sync-stage-scan").hidden=!0,x&&u(x==="add"?"\uC5C5\uB85C\uB4DC\uC5D0 \uD3EC\uD568\uD588\uC2B5\uB2C8\uB2E4. \uBBF8\uB9AC\uBCF4\uAE30 \uD6C4 \uC5C5\uB85C\uB4DC\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.":"\uC5C5\uB85C\uB4DC\uC5D0\uC11C \uC81C\uC678\uD588\uC2B5\uB2C8\uB2E4. \uC6D0\uBCF8 \uD30C\uC77C\uC740 \uC720\uC9C0\uB429\uB2C8\uB2E4.",!1,"success")}catch(o){if(l!==q())return;S=!0,r(),w="",G(),m?(g("sync-stage-note").textContent="\uB85C\uCEEC \uC790\uB3D9 \uD655\uC778 \uC2E4\uD328: "+o.message+" \uC774\uC804 \uBAA9\uB85D\uC740 \uC720\uC9C0\uB429\uB2C8\uB2E4.",g("sync-stage-scan").hidden=!1):u(o.message,!0)}finally{m?S&&d():(c(!1),d())}}async function k(x,C,m=!1){if(m&&O)return;let l=q(),v=(O??Promise.resolve()).catch(()=>{}).then(()=>l===q()?z(x,C,m):void 0);O=v;try{await v}finally{O===v&&(O=null)}}g("sync-stage-scan").onclick=()=>k(),g("sync-stage-add").onclick=()=>k("add",X()),g("sync-stage-remove").onclick=()=>k("remove",W());function P(x){R=!1;let C=async()=>{try{!R&&await x()&&await k(void 0,void 0,!0)}finally{R||(N=setTimeout(C,5e3))}};return clearTimeout(N),N=setTimeout(C,100),()=>{R=!0,clearTimeout(N)}}return{idle:()=>O??Promise.resolve(),remoteOnlyCount:()=>$()?h.filter(x=>x.status==="same"&&x.remoteState==="changed"||(x.recoverable||x.status==="unavailable")&&x.remoteState==="new").length:0,startWatching:P,update:oe,ready:()=>$()&&!A&&h.some(x=>x.staged)&&!h.some(x=>x.staged&&(x.stale||x.unmapped)),reload:(x=!1)=>k(void 0,void 0,x)}}function yt({api:e,context:t,setBusy:r,changed:c,renderConfig:u,status:d}){let n=L=>document.getElementById(L),a=t().base,i="",s="",g=!1,E=null;n("sync-env-toggle").onclick=()=>{let L=n("sync-env-toggle").getAttribute("aria-expanded")!=="true";n("sync-env-toggle").setAttribute("aria-expanded",String(L)),n("sync-env-body").hidden=!L,n("sync-env-chevron").textContent=L?"\u25BE":"\u25B8",n("sync-env-toggle-label").textContent=L?"\uC811\uAE30":"\uD3BC\uCE58\uAE30"};let p=()=>n("sync-env-import-mode").checked,h=()=>`${p()?"import":"base"}:${i}`,w=()=>({base:t().base,envId:p()?i||"not-imported":""});function b(){E=null,n("sync-env-confirm").open&&n("sync-env-confirm").close()}function y(L){g=L,a!==t().base&&(a=t().base,i="",s="",n("sync-env-file").value="",n("sync-env-base-mode").checked=!0,n("sync-env-import-mode").checked=!1,b());for(let A of["sync-env-base-mode","sync-env-import-mode"])n(A).disabled=g;n("sync-env-import-controls").hidden=!p(),n("sync-env-file-name").textContent=s||"\uC120\uD0DD\uD55C \uD30C\uC77C \uC5C6\uC74C",n("sync-env-choose").disabled=g||!a,n("sync-env-save").disabled=g||!i||!p(),n("sync-env-source-note").textContent=p()?"\uAC00\uC838\uC628 \uC124\uC815\uC740 \uD604\uC7AC \uC6F9 \uC791\uC5C5\uC5D0\uB9CC \uC801\uC6A9\uB429\uB2C8\uB2E4. \uC0C8\uB85C\uACE0\uCE68\uD558\uBA74 \uB2E4\uC2DC \uAC00\uC838\uC640\uC57C \uD569\uB2C8\uB2E4.":"\uB85C\uCEEC \uBB38\uC11C\uC5D0\uC11C \uC120\uD0DD\uD55C \uAE30\uC900 \uD3F4\uB354\uC758 .env\uB9CC \uC77D\uC2B5\uB2C8\uB2E4. \uD30C\uC77C\uC774 \uC5C6\uC73C\uBA74 .env\uB97C \uAC00\uC838\uC624\uC138\uC694."}for(let L of["sync-env-base-mode","sync-env-import-mode"])n(L).onchange=()=>{b(),c(),y(g)};n("sync-env-choose").onclick=()=>{g||n("sync-env-file").click()},n("sync-env-file").onchange=async()=>{let L=n("sync-env-file").files?.[0];if(!L||g)return;if(L.size>12e3){d(".env \uD30C\uC77C\uC740 12KB \uC774\uD558 \uD14D\uC2A4\uD2B8\uC5EC\uC57C \uD569\uB2C8\uB2E4.",!0),n("sync-env-file").value="";return}let A=t().base;r(!0),b();try{let N=await L.text(),R=await e("/api/sync/env/import",{base:A,text:N,name:L.name});if(A!==t().base)return;i=R.envId,s=L.name,c(),u(R.config),d(".env\uB97C \uAC00\uC838\uC654\uC2B5\uB2C8\uB2E4. \uAE30\uC900 \uD3F4\uB354\uC758 \uD30C\uC77C\uC740 \uBCC0\uACBD\uD558\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4.",!1,"success")}catch(N){d(N.message,!0)}finally{n("sync-env-file").value="",r(!1)}};async function I(L){r(!0);try{let A=await e("/api/sync/env/save",L);n("sync-env-base-mode").checked=!0,n("sync-env-import-mode").checked=!1,c(),u(A.config),d("\uAE30\uC900 \uD3F4\uB354\uC5D0 .env\uB97C \uC800\uC7A5\uD588\uC2B5\uB2C8\uB2E4. CLI\uC5D0\uC11C\uB3C4 \uAC19\uC740 \uC124\uC815\uC744 \uC0AC\uC6A9\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.",!1,"success")}catch(A){d(A.message,!0)}finally{b(),r(!1)}}return n("sync-env-save").onclick=async()=>{if(g||!i||!p())return;let L=w();r(!0);try{let A=await e("/api/sync/env/save",L),N={...L,expectedHash:A.expectedHash};A.needsConfirmation?(E=N,n("sync-env-confirm-path").textContent=A.path,n("sync-env-confirm").showModal()):await I(N)}catch(A){d(A.message,!0)}finally{r(!1)}},n("sync-env-confirm-save").onclick=()=>{if(E&&!g)return I(E)},n("sync-env-confirm-cancel").onclick=b,n("sync-env-confirm").addEventListener("cancel",b),{update:y,identity:h,request:w}}var jt=[["error",/^(?:✗|(?:\w*Error|오류|실패)\s*[::]|일부 작업이 실패)/],["warning",/^(?:⚠|\[경고\])/],["success",/^(?:\[(?:신규|폴더\+)\]|+\s*생성|완료(?:\s|$))/],["change",/^(?:\[변경\]|↻\s*갱신)/],["reference",/^(?:참조 링크:|\[연결\]|🔗|♻)/],["muted",/^(?:\[(?:동일|상위|폴더)\]|=\s*변경없음|·\s*상위|--dry-run:)/],["info",/^(?:base:|대상:|📁)/]];function wt(e,t){if(e.textContent===t)return;let r=document.createDocumentFragment();for(let c of t.match(/[^\n]*\n|[^\n]+$/g)??[]){let u=document.createElement("span"),d=jt.find(([,n])=>n.test(c.trimStart()))?.[0]??"default";u.className="sync-log-line sync-log-"+d,u.textContent=c,r.append(u)}e.replaceChildren(r)}function vt({api:e,monaco:t,loadMonaco:r,context:c,setBusy:u,showSync:d,refresh:n=async()=>{},notify:a=()=>{},activity:i}){let s=o=>document.getElementById(o),g=!1,E=null,p=null,h="",w="",b,y=!1,I=!1,L="",A="\uC2A4\uD398\uC774\uC2A4 \uC804\uCCB4",N,R,O={restore:"\uC120\uD0DD\uD55C \uBB38\uC11C\uB97C \uC6D0\uACA9 \uCD5C\uC2E0\uC73C\uB85C \uBCF5\uAD6C\uD558\uB294 \uC911",preview:"\uC5C5\uB85C\uB4DC \uBBF8\uB9AC\uBCF4\uAE30\uB97C \uACC4\uC0B0\uD558\uB294 \uC911",fetch:"\uC6D0\uACA9 \uBCC0\uACBD\uC744 \uD655\uC778\uD558\uB294 \uC911",pull:"Confluence\uC5D0\uC11C \uAC00\uC838\uC624\uB294 \uC911",push:"Confluence\uC5D0 \uC5C5\uB85C\uB4DC\uD558\uB294 \uC911"},q={restore:"sync-restore-confirm",preview:"sync-preview",fetch:"sync-fetch",pull:"sync-pull-remote",push:"sync-push"};function B(o,M){N?.end(),N=i?.begin({label:O[o],detail:"\uC791\uC5C5\uC744 \uC900\uBE44\uD558\uACE0 \uC788\uC2B5\uB2C8\uB2E4.",button:M||q[o],region:"sync-results",link:"#sync-results"})}function X(){N?.end(),N=void 0}let W=new Set,$=(o,M=!1,J=M?"error":"info")=>{s("sync-status").textContent=o,s("sync-status").classList.toggle("error",M),J&&a(o,J)};function H(){return{base:c().base||"",target:"",envId:S.request().envId,verify:s("sync-verify").checked,referenceRoots:s("sync-references").value.split(/\r?\n/).map(M=>M.trim()).filter(Boolean)}}let ae=()=>s("sync-pull-format").value==="obsidian"?"obsidian":"markdown",te=()=>JSON.stringify(H()),G=()=>JSON.stringify([c().base,S.identity()]),pe=()=>!!c().base;function oe(){E=null,p=null,h=""}function z(o,M=!1){g=o,!M&&h&&h!==te()&&(oe(),$("\uB300\uC0C1\uC774\uB098 \uC635\uC158\uC774 \uBC14\uB00C\uC5C8\uC2B5\uB2C8\uB2E4. \uB2E4\uC2DC \uBBF8\uB9AC\uBCF4\uAE30\uD574 \uC8FC\uC138\uC694.")),!M&&w&&w!==G()&&(w="",y=!1,I=!1,L="",s("sync-config").replaceChildren(),s("sync-config-status").textContent="\uC124\uC815 \uD655\uC778 \uB610\uB294 .env \uAC00\uC838\uC624\uAE30\uB85C \uC5F0\uACB0 \uC815\uBCF4\uB97C \uBD88\uB7EC\uC624\uC138\uC694."),s("sync-log-download").disabled=!R?.log?.trim(),s("sync-job-state").hidden=!R,S.update(g),s("sync-connect").disabled=g||!c().base||!I||y,s("sync-connect").textContent=y?"\uC2A4\uD398\uC774\uC2A4 \uC5F0\uACB0\uB428":"\uC2A4\uD398\uC774\uC2A4 \uC5F0\uACB0",v.update(g);for(let Y of["sync-pull-format","sync-load","sync-verify","sync-references","sync-add-reference"])s(Y).disabled=g;s("sync-pull-format-help").textContent=ae()==="obsidian"?"\uC704\uD0A4\uB9C1\uD06C([[\uBB38\uC11C|\uC774\uB984]])\xB7\uCF5C\uC544\uC6C3\xB7\uAC01\uC8FC \uBB38\uBC95\uC73C\uB85C \uBCF5\uC6D0\uD569\uB2C8\uB2E4. \uD30C\uC77C\uBA85\uC774 \uACB9\uCE58\uAC70\uB098 HTML \uD45C \uC548\uC758 \uB9C1\uD06C\uB294 \uD638\uD658\uB418\uB294 \uC0C1\uB300 \uACBD\uB85C \uB9C1\uD06C\uB97C \uC720\uC9C0\uD569\uB2C8\uB2E4. \uC0C8\uB85C \uBC1B\uB294 \uBB38\uC11C\uC640 \uBCF5\uAD6C\xB7\uC6D0\uBCF5\uC5D0 \uC801\uC6A9\uD569\uB2C8\uB2E4.":"Markdown \uB9C1\uD06C([\uC774\uB984](\uBB38\uC11C.md))\xB7\uC81C\uBAA9\uC774 \uC788\uB294 \uC778\uC6A9\uBB38\xB7\uC704\uCCA8\uC790 \uAC01\uC8FC \uBAA9\uB85D\uC73C\uB85C \uBC1B\uC2B5\uB2C8\uB2E4. \uC0C8\uB85C \uBC1B\uB294 \uBB38\uC11C\uC640 \uBCF5\uAD6C\xB7\uC6D0\uBCF5\uC5D0 \uC801\uC6A9\uD558\uBA70 \uAE30\uC874 \uD30C\uC77C\uC744 \uC77C\uAD04 \uBCC0\uD658\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.";let J=s("sync-pull-remote");if(J){let Y=v.remoteOnlyCount();J.disabled=g||!y||!I||!Y,J.textContent=`\u2193 \uC6D0\uACA9 \uBB38\uC11C ${Y}\uAC1C \uAC00\uC838\uC624\uAE30 (Pull)`}s("sync-fetch").disabled=g||!c().base||!y||!I,s("sync-log-empty").textContent="\uBBF8\uB9AC\uBCF4\uAE30 \uB610\uB294 Fetch\xB7Pull\xB7\uBCF5\uAD6C\uB97C \uC2E4\uD589\uD558\uBA74 \uBB38\uC11C\uBCC4 \uCC98\uB9AC \uB0B4\uC5ED\uC744 \uD655\uC778\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.",s("sync-load").disabled=g||!c().base,s("sync-preview").disabled=g||!pe()||!y||!v.ready(),s("sync-push").disabled=g||!y||!I||!E||!p||h!==te(),s("sync-push").title=E?"\uBBF8\uB9AC\uBCF4\uAE30\uD55C \uBC94\uC704\uB97C \uC5C5\uB85C\uB4DC\uD569\uB2C8\uB2E4.":"\uD604\uC7AC \uC120\uD0DD\uACFC \uC124\uC815\uC73C\uB85C \uC5C5\uB85C\uB4DC \uBBF8\uB9AC\uBCF4\uAE30\uB97C \uBA3C\uC800 \uC644\uB8CC\uD558\uC138\uC694.";let j=H();s("sync-target").textContent=pe()?`\uAE30\uC900 \uD3F4\uB354 ${j.base} \u2194 ${A} \xB7 Push\uB294 \uCCB4\uD06C\uD55C \uBB38\uC11C\uB9CC`:"\uB85C\uCEEC \uBB38\uC11C\uC5D0\uC11C \uAE30\uC900 \uD3F4\uB354\uB97C \uC120\uD0DD\uD558\uC138\uC694."}function k(o){w=G(),y=!!o.connected,I=!o.missing.length,A=o.rootPath&&o.rootPath!=="/"?`\uAE30\uC874 \uC6D0\uACA9 \uB8E8\uD2B8 ${o.rootPath}`:"\uC2A4\uD398\uC774\uC2A4 \uC804\uCCB4",L=y?`${o.baseUrl}/${o.spaceKey}/${o.rootPath||"/"}`:"",s("sync-config").replaceChildren();for(let[M,J]of[["\uC124\uC815 \uCD9C\uCC98",o.source],["\uC11C\uBC84",o.baseUrl||"\uBBF8\uC124\uC815"],["\uACC4\uC815",o.email||"\uBBF8\uC124\uC815"],["\uC2A4\uD398\uC774\uC2A4",o.spaceKey||"\uBBF8\uC124\uC815"],["\uC791\uC5C5\uACF5\uAC04",y?`\uAE30\uC900 \uD3F4\uB354 \u2194 ${A}`:"\uBBF8\uC5F0\uACB0"],["API \uD1A0\uD070",o.hasToken?"\uC124\uC815\uB428":"\uBBF8\uC124\uC815"]]){let j=document.createElement("dt"),Y=document.createElement("dd");j.textContent=M,Y.textContent=J,s("sync-config").append(j,Y)}s("sync-config-status").textContent=o.missing.length?`\uC124\uC815 \uD544\uC694: ${o.missing.join(", ")}. \uBBF8\uB9AC\uBCF4\uAE30\uB294 \uC778\uC99D \uC5C6\uC774 \uC0AC\uC6A9\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.`:y?"\uC811\uC18D \uC124\uC815\uACFC \uC2A4\uD398\uC774\uC2A4 \uC5F0\uACB0\uC744 \uBD88\uB7EC\uC654\uC2B5\uB2C8\uB2E4.":"\uC2A4\uD398\uC774\uC2A4 \uC5F0\uACB0\uC744 \uB20C\uB7EC \uAE30\uC900 \uD3F4\uB354\uC640 \uC5F0\uACB0\uD558\uC138\uC694."}function P(o){if(R=o,s("sync-log-download").disabled=!o.log?.trim(),o.state==="running"&&!N&&B(o.kind),N){let Y=(o.log||"").split(/\r?\n/).filter(ne=>ne.trim()&&!/^\s*(?:✓|완료|진행 ·)/.test(ne)).at(-1);N.update({label:o.state==="running"?o.phase==="fetch"?"\uC644\uB8CC \uD6C4 \uC6D0\uACA9 \uC0C1\uD0DC\uB97C \uB2E4\uC2DC \uD655\uC778\uD558\uB294 \uC911":O[o.kind]:"\uC2E4\uD589 \uACB0\uACFC\uB97C \uBC18\uC601\uD558\uB294 \uC911",detail:o.state==="running"?Y||"\uCC98\uB9AC \uC911\uC785\uB2C8\uB2E4. \uC2E4\uD589 \uB0B4\uC5ED\uC5D0\uC11C \uC138\uBD80 \uB0B4\uC6A9\uC744 \uD655\uC778\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.":"\uBCC0\uACBD \uBAA9\uB85D\uACFC \uB85C\uCEEC \uD3F4\uB354\uB97C \uAC31\uC2E0\uD558\uACE0 \uC788\uC2B5\uB2C8\uB2E4.",startedAt:o.startedAt,uncertain:!1})}s("sync-job-summary").hidden=!1,s("sync-job-summary").textContent=`${o.kind==="restore"?"\uBB38\uC11C \uBCF5\uAD6C":o.kind==="preview"?"\uC5C5\uB85C\uB4DC \uBBF8\uB9AC\uBCF4\uAE30":o.kind==="fetch"?"\uC6D0\uACA9 \uBCC0\uACBD \uD655\uC778":o.kind==="pull"?"\uAC00\uC838\uC624\uAE30":"\uC5C5\uB85C\uB4DC"} \xB7 ${["pull","fetch","restore"].includes(o.kind)?`${o.config.spaceKey||"\uC2A4\uD398\uC774\uC2A4 \uBBF8\uC124\uC815"} \u2192 ${o.selection.base}`:`${o.selection.target||o.selection.base} \u2192 ${o.config.spaceKey||"\uC2A4\uD398\uC774\uC2A4 \uBBF8\uC124\uC815"}`} (${o.config.baseUrl||"\uC11C\uBC84 \uBBF8\uC124\uC815"})`,["pull","restore"].includes(o.kind)&&(s("sync-job-summary").textContent+=` \xB7 \uAC00\uC838\uC624\uAE30 \uD615\uC2DD: ${o.selection.format==="obsidian"?"Obsidian":"Markdown"}`),s("sync-log-empty").hidden=!0,s("sync-log").hidden=!1;let M=s("sync-log"),J=M.scrollHeight-M.scrollTop-M.clientHeight<40;wt(M,o.log||"\uC791\uC5C5\uC744 \uC900\uBE44\uD558\uB294 \uC911\uC785\uB2C8\uB2E4\u2026"),J&&(M.scrollTop=M.scrollHeight),s("sync-job-state").hidden=!1,s("sync-job-state").setAttribute("data-state",o.state==="succeeded"&&(o.warningCount||o.refreshFailed)?"warning":o.state),s("sync-job-state").textContent=o.state==="succeeded"&&(o.warningCount||o.refreshFailed)?"\uC644\uB8CC (\uACBD\uACE0)":{running:"\uC9C4\uD589 \uC911",succeeded:"\uC644\uB8CC",failed:"\uC2E4\uD328"}[o.state];let j=!W.has(o.id);o.state!=="running"&&W.add(o.id),o.state==="running"&&o.phase==="fetch"?$("Push\xB7Pull\uC744 \uC644\uB8CC\uD588\uC2B5\uB2C8\uB2E4. \uCD5C\uC2E0 \uC6D0\uACA9 \uC0C1\uD0DC\uB97C \uB2E4\uC2DC \uD655\uC778\uD558\uACE0 \uC788\uC2B5\uB2C8\uB2E4\u2026",!1,null):o.state==="running"?$(o.kind==="restore"?"\uC120\uD0DD\uD55C \uBB38\uC11C\uB97C \uC6D0\uACA9 \uCD5C\uC2E0\uC73C\uB85C \uBCF5\uAD6C\uD558\uACE0 \uC788\uC2B5\uB2C8\uB2E4\u2026":o.kind==="preview"?"\uB85C\uCEEC \uBB38\uC11C\uC640 \uB9E4\uD551\uC744 \uBE44\uAD50\uD558\uACE0 \uC788\uC2B5\uB2C8\uB2E4\u2026":o.kind==="fetch"?"\uC6D0\uACA9 \uD398\uC774\uC9C0 \uBA54\uD0C0\uB370\uC774\uD130\uB97C \uD655\uC778\uD558\uACE0 \uC788\uC2B5\uB2C8\uB2E4\u2026":o.kind==="pull"?"Confluence\uC5D0\uC11C \uBB38\uC11C\uB97C \uAC00\uC838\uC624\uACE0 \uC788\uC2B5\uB2C8\uB2E4\u2026":"Confluence\uC5D0 \uC5C5\uB85C\uB4DC\uD558\uACE0 \uC788\uC2B5\uB2C8\uB2E4. \uC9C4\uD589 \uB0B4\uC5ED\uC744 \uD655\uC778\uD558\uC138\uC694.",!1,null):o.state==="failed"?$(o.kind==="restore"?"\uBB38\uC11C \uBCF5\uAD6C\uC5D0 \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4. \uC2E4\uD589 \uB0B4\uC5ED\uC744 \uD655\uC778\uD558\uC138\uC694.":o.kind==="fetch"?"\uC6D0\uACA9 \uBCC0\uACBD \uD655\uC778\uC5D0 \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4. \uC2E4\uD589 \uB0B4\uC5ED\uC744 \uD655\uC778\uD558\uC138\uC694. \uC774\uC804 \uCE90\uC2DC\uB294 \uC720\uC9C0\uB429\uB2C8\uB2E4.":o.kind==="pull"?"\uAC00\uC838\uC624\uAE30\uC5D0 \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4. \uB85C\uCEEC \uBCC0\uACBD\uC774\uB098 \uC624\uB958 \uB0B4\uC5ED\uC744 \uD655\uC778\uD55C \uB4A4 \uB2E4\uC2DC \uC2DC\uB3C4\uD558\uC138\uC694.":"\uC5C5\uB85C\uB4DC\uAC00 \uC2E4\uD328\uD588\uAC70\uB098 \uC77C\uBD80 \uBB38\uC11C\uAC00 \uCC98\uB9AC\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4. \uB0B4\uC5ED\uC744 \uD655\uC778\uD55C \uB4A4 \uB2E4\uC2DC \uBBF8\uB9AC\uBCF4\uAE30\uD574 \uC8FC\uC138\uC694.",!0,j?"error":null):o.kind==="preview"?(o.id===p&&h===te()&&!o.config.missing.length&&o.config.connected&&(E=o.planId),$(o.config.missing.length?"\uBBF8\uB9AC\uBCF4\uAE30 \uC644\uB8CC. \uC811\uC18D \uC124\uC815\uC744 \uCC44\uC6B4 \uB4A4 \uB2E4\uC2DC \uBBF8\uB9AC\uBCF4\uAE30\uD574 \uC8FC\uC138\uC694.":E?"\uBBF8\uB9AC\uBCF4\uAE30 \uC644\uB8CC. \uB300\uC0C1\uACFC \uC5C5\uB85C\uB4DC \uC704\uCE58\uB97C \uD655\uC778\uD558\uACE0 Confluence\uC5D0 \uC5C5\uB85C\uB4DC\uB97C \uB204\uB974\uC138\uC694.":"\uBBF8\uB9AC\uBCF4\uAE30 \uB0B4\uC5ED\uC744 \uBD88\uB7EC\uC654\uC2B5\uB2C8\uB2E4. \uD604\uC7AC \uC120\uD0DD\uC73C\uB85C \uB2E4\uC2DC \uBBF8\uB9AC\uBCF4\uAE30\uD574 \uC8FC\uC138\uC694.",!1,j?o.config.missing.length?"warning":"success":null)):o.kind==="fetch"?$("Fetch\uB97C \uC644\uB8CC\uD588\uC2B5\uB2C8\uB2E4. \uBCC0\uACBD \uBB38\uC11C \uBAA9\uB85D\uC5D0 \uC6D0\uACA9 \uC0C1\uD0DC\uB97C \uBC18\uC601\uD569\uB2C8\uB2E4. \uC0C1\uC138 \uC870\uD68C \uB0B4\uC5ED\uC740 \uB300\uC0C1 \uBC0F \uC2E4\uD589 \uB0B4\uC5ED\uC5D0\uC11C \uD655\uC778\uD560 \uC218 \uC788\uC73C\uBA70 \uBB38\uC11C\uC640 \uB3D9\uAE30\uD654 \uAE30\uC900\uC740 \uC720\uC9C0\uB429\uB2C8\uB2E4.",!1,j?"success":null):o.refreshFailed?$(`${o.kind==="push"?"\uC5C5\uB85C\uB4DC":"\uAC00\uC838\uC624\uAE30"}\uB294 \uC644\uB8CC\uD588\uC9C0\uB9CC \uD6C4\uC18D Fetch\uC5D0 \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4. ${o.warningCount?`\uCCA8\uBD80 ${o.warningCount}\uAC1C\uB294 \uC6D0\uACA9 \uCC38\uC870\uB97C \uC720\uC9C0\uD588\uC2B5\uB2C8\uB2E4. `:""}\uBCC0\uACBD \uBAA9\uB85D\uC774 \uCD5C\uC2E0\uC774 \uC544\uB2D0 \uC218 \uC788\uC73C\uB2C8 Fetch\uB97C \uB2E4\uC2DC \uC2E4\uD589\uD558\uC138\uC694.`,!1,j?"warning":null):o.warningCount?$(`\uAC00\uC838\uC624\uAE30\uB97C \uC644\uB8CC\uD588\uC2B5\uB2C8\uB2E4. \uCCA8\uBD80 ${o.warningCount}\uAC1C\uB97C \uC800\uC7A5\uD558\uC9C0 \uBABB\uD574 \uC6D0\uACA9 \uCC38\uC870\uB97C \uC720\uC9C0\uD588\uC2B5\uB2C8\uB2E4. \uC2E4\uD589 \uB0B4\uC5ED\uC744 \uD655\uC778\uD558\uC138\uC694.`,!1,j?"warning":null):$(o.kind==="restore"?"\uC6D0\uACA9 \uCD5C\uC2E0\uC73C\uB85C \uBCF5\uAD6C\uD588\uC2B5\uB2C8\uB2E4. \uBCF5\uAD6C \uBB38\uC11C\uB294 \uC5C5\uB85C\uB4DC \uC120\uD0DD\uC5D0\uC11C \uC81C\uC678\uD588\uC2B5\uB2C8\uB2E4.":o.kind==="pull"?"\uAC00\uC838\uC624\uAE30\uAC00 \uC644\uB8CC\uB418\uC5C8\uC2B5\uB2C8\uB2E4. \uAE30\uC900 \uD3F4\uB354\uC5D0\uC11C \uBB38\uC11C\uB97C \uD655\uC778\uD558\uC138\uC694.":"\uC5C5\uB85C\uB4DC\uAC00 \uC644\uB8CC\uB418\uC5C8\uC2B5\uB2C8\uB2E4. \uB2E4\uB978 \uB300\uC0C1\uC744 \uC120\uD0DD\uD574 \uACC4\uC18D \uC791\uC5C5\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.",!1,j?"success":null)}async function x(){clearTimeout(b);try{let{job:o}=await e("/api/sync/job");if(!o){X(),u(!1);return}P(o),s("sync-reconnect").hidden=!0,o.state==="running"?b=setTimeout(x,800):(["push","pull","fetch","restore"].includes(o.kind)&&o.state==="succeeded"&&await v.reload(!0),["pull","restore"].includes(o.kind)&&o.state==="succeeded"&&await n(),X(),u(!1))}catch(o){$(`\uC9C4\uD589 \uC0C1\uD0DC\uB97C \uD655\uC778\uD558\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4. \uC791\uC5C5\uC740 \uC11C\uBC84\uC5D0\uC11C \uACC4\uC18D\uB420 \uC218 \uC788\uC2B5\uB2C8\uB2E4. ${o.message}`,!0),N?.update({label:"\uC9C4\uD589 \uC0C1\uD0DC \uD655\uC778\uC774 \uD544\uC694\uD569\uB2C8\uB2E4",detail:"\uC11C\uBC84 \uC791\uC5C5\uC774 \uACC4\uC18D\uB420 \uC218 \uC788\uC2B5\uB2C8\uB2E4. \uC9C4\uD589 \uC0C1\uD0DC \uB2E4\uC2DC \uD655\uC778\uC73C\uB85C \uC5F0\uACB0\uD558\uC138\uC694.",uncertain:!0}),s("sync-reconnect").hidden=!1}}async function C(o,M){let J=o==="pull-remote";if(J&&(o="pull"),g||!y)return;let j=H(),Y=E;if(!(o==="push"&&(!Y||!p||h!==te()||!I))){oe(),o==="preview"&&(h=te()),B(o,J?"sync-pull-remote":void 0),u(!0),$(o==="restore"?"\uC120\uD0DD\uD55C \uBB38\uC11C\uB97C \uBCF5\uAD6C\uD569\uB2C8\uB2E4\u2026":o==="preview"?"\uB3D9\uAE30\uD654 \uB300\uC0C1\uC744 \uD655\uC778\uD558\uACE0 \uC788\uC2B5\uB2C8\uB2E4\u2026":o==="fetch"?"\uC6D0\uACA9 \uBCC0\uACBD \uD655\uC778\uC744 \uC2DC\uC791\uD569\uB2C8\uB2E4\u2026":o==="pull"?"Confluence\uC5D0\uC11C \uAC00\uC838\uC624\uAE30\uB97C \uC2DC\uC791\uD569\uB2C8\uB2E4\u2026":"\uC5C5\uB85C\uB4DC\uB97C \uC2DC\uC791\uD569\uB2C8\uB2E4\u2026",!1,null);try{let{job:ne}=await e("/api/sync/"+o,o==="restore"?M:o==="preview"?j:o==="pull"?{...S.request(),remoteOnly:!0,format:ae()}:o==="fetch"?S.request():{planId:Y});o==="preview"&&(p=ne.id),k(ne.config),P(ne),o==="fetch"&&s("sync-stage-heading").scrollIntoView({block:"start"}),await x()}catch(ne){$(ne.message,!0);try{let{job:ke}=await e("/api/sync/job");if(ke?.state==="running"){await x();return}X(),u(!1)}catch{N?.update({label:"\uC9C4\uD589 \uC0C1\uD0DC \uD655\uC778\uC774 \uD544\uC694\uD569\uB2C8\uB2E4",detail:"\uC694\uCCAD \uACB0\uACFC\uB97C \uD655\uC778\uD558\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4. \uC791\uC5C5\uC774 \uACC4\uC18D\uB420 \uC218 \uC788\uC73C\uB2C8 \uC9C4\uD589 \uC0C1\uD0DC\uB97C \uB2E4\uC2DC \uD655\uC778\uD558\uC138\uC694.",uncertain:!0}),s("sync-reconnect").hidden=!1}}}}s("sync-add-reference").onclick=async()=>{if(!g){u(!0);try{let o=await e("/api/pick-folder",{kind:"reference",start:c().base});if(o.path){let M=H().referenceRoots;s("sync-references").value=[...new Set([...M,o.path])].join(`
|
|
5
|
+
`),s("sync-references").dispatchEvent(new Event("input",{bubbles:!0}))}}catch(o){$(o.message,!0)}finally{u(!1)}}};let m=xt({api:e,selection:H,monaco:t,loadMonaco:r,notify:a}),l=ht({api:e,selection:()=>({...H(),format:ae()}),setBusy:u,isBusy:()=>g,status:$,start:C}),v=bt({restore:l.open,canRestore:()=>y&&I,scopeKey:()=>L,compare:m.open,api:e,selection:H,changed:oe,busy:u,status:$,update:()=>z(g)}),S=yt({api:e,context:c,setBusy:u,changed:()=>{oe(),z(g)},renderConfig:o=>{oe(),k(o)},status:$});s("sync-connect").onclick=async()=>{if(g||y||!I)return;let o=G();oe(),u(!0);try{let M=await e("/api/sync/connect",S.request());if(o!==G())return;k(M),$("\uAE30\uC900 \uD3F4\uB354\uB97C \uC2A4\uD398\uC774\uC2A4\uC5D0 \uC5F0\uACB0\uD588\uC2B5\uB2C8\uB2E4. Fetch\uB85C \uBC1B\uC744 \uBB38\uC11C\uB97C \uD655\uC778\uD55C \uB4A4 \uAC00\uC838\uC624\uC138\uC694.",!1,"success")}catch(M){$(M.message,!0)}finally{u(!1)}},s("sync-pull-format").onchange=()=>z(g),s("sync-fetch").onclick=()=>C("fetch"),s("sync-pull-remote")&&(s("sync-pull-remote").onclick=()=>C("pull-remote")),s("sync-preview").onclick=()=>C("preview"),s("sync-push").onclick=()=>C("push"),s("sync-reconnect").onclick=x,s("sync-log-download").onclick=()=>{if(R?.log?.trim())try{ft(mt(R),gt(R)),a("\uB85C\uADF8 \uB2E4\uC6B4\uB85C\uB4DC\uB97C \uC2DC\uC791\uD588\uC2B5\uB2C8\uB2E4.","success")}catch(o){$("\uB85C\uADF8 \uB2E4\uC6B4\uB85C\uB4DC\uB97C \uC2DC\uC791\uD558\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4. "+o.message,!0)}},s("sync-load").onclick=async()=>{if(g)return;oe(),u(!0);let o=G();try{let M=await e("/api/sync/config",S.request());o===G()&&(k(M),$(s("sync-config-status").textContent,!1,M.missing.length||!M.connected?"warning":"success"))}catch(M){$(M.message,!0)}finally{u(!1)}};for(let o of["sync-verify","sync-references"])s(o).addEventListener("input",()=>z(g));return{waitForLocalCheck:()=>v.idle(),watch:()=>v.startWatching(async()=>{if(g||document.hidden||s("sync-view").hidden||!c().base)return!1;if(!y||w!==G())try{let o=G(),M=await e("/api/sync/config",S.request(),void 0,{quiet:!0});if(o!==G()||g)return!1;k(M),z(g)}catch{return!1}return y}),update:z,resume:async()=>{try{let{job:o}=await e("/api/sync/job");if(!o)return;P(o),o.state==="running"&&(await d(),u(!0),await x())}catch(o){$("\uC791\uC5C5 \uC0C1\uD0DC\uB97C \uBD88\uB7EC\uC624\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4. "+o.message,!0)}}}}function kt({api:e,selection:t,formatting:r,notify:c=()=>{}}){let u=document.getElementById("document-preview-frame"),d=document.getElementById("document-preview-status"),n=document.getElementById("document-preview-refresh"),a=document.getElementById("document-preview-toggle"),i,s,g=0,E=!1,p=!1;function h(){g++,s?.abort(),r?.clear(),u.hidden=!0,u.removeAttribute("srcdoc"),i=void 0,p=!1}async function w(b=!1){let{base:y,file:I,folder:L}=t(),A=y&&I&&!L?JSON.stringify([y,I]):"";if(!E){i!==void 0&&(A!==i||p)&&h(),n.disabled=!0;return}if(n.disabled=!A,!b&&A===i)return;h(),i=A;let N=g;if(n.disabled=!A,d.textContent=A?"\uBB38\uC11C\uB97C \uBD88\uB7EC\uC624\uB294 \uC911\u2026":"Markdown \uD30C\uC77C\uC744 \uC120\uD0DD\uD558\uBA74 \uBCF8\uBB38\uC774 \uD45C\uC2DC\uB429\uB2C8\uB2E4.",!!A){s=new AbortController,p=!0;try{let R=await e("/api/document-preview",{base:y,file:I},s.signal);if(N!==g)return;u.srcdoc=R.html,u.hidden=!1,r?.load(R,{base:y,file:I}),d.textContent=I.split(/[\\/]/).pop()+" \xB7 \uB0B4\uC6A9\uC744 \uC120\uD0DD\uD574 \uBCF5\uC0AC\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4."}catch(R){if(N!==g||R.name==="AbortError")return;d.textContent="\uBB38\uC11C\uB97C \uD45C\uC2DC\uD558\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4: "+R.message,c(d.textContent,"error")}finally{N===g&&(p=!1)}}}return a.onclick=()=>(E=!E,a.setAttribute("aria-expanded",String(E)),document.getElementById("document-preview-body").hidden=!E,document.getElementById("document-preview-actions").hidden=!E,document.getElementById("document-preview-chevron").textContent=E?"\u25BE":"\u25B8",document.getElementById("document-preview-toggle-label").textContent=E?"\uC811\uAE30":"\uD3BC\uCE58\uAE30",w()),n.onclick=()=>w(!0),{update:w}}function Ct(e,t){let r=e-t.length*40,c=t.reduce((i,s)=>i+s,0),u=t.map(i=>i/c*r),d=u.map(i=>40+Math.floor(i)),n=u.map((i,s)=>({i:s,remainder:i-Math.floor(i)})).sort((i,s)=>s.remainder-i.remainder),a=e-d.reduce((i,s)=>i+s,0);for(let i=0;i<a;i++)d[n[i].i]++;return d}function St({api:e,monaco:t,loadMonaco:r=async()=>t,refresh:c,setBusy:u,notify:d=()=>{}}){let n=z=>document.getElementById(z),a=n("document-preview-frame"),i=n("table-edit-toggle"),s=n("table-format-controls"),g=n("table-review-dialog"),E=n("table-format-status"),p,h,w=!1,b=-1,y=[],I=new Map,L,A,N,R,O=0,q=0,B=z=>a.contentWindow?.postMessage({...z,channel:p?.channel},"*"),X=z=>{E.textContent=z},W=()=>{q++,L=null,n("table-save").disabled=!0};function $(){a.onload=null,O++,p=null,h=null,w=!1,b=-1,y=[],I.clear(),W(),n("document-format-toggle").disabled=!0,n("document-format-controls").hidden=!0,n("document-format-toggle").setAttribute("aria-expanded","false"),n("document-format-tables").value="keep",i.disabled=!0,i.lastChild.textContent="\uD45C \uC9C1\uC811 \uD3B8\uC9D1",i.setAttribute("aria-pressed","false"),s.hidden=!0,g.open&&g.close(),H()}function H(){let z=b>=0;for(let k of["table-total-width","table-equal","table-revert"])n(k).disabled=!z;if(n("document-format-basic").disabled=!p,n("document-format-review").disabled=!p||!I.size,n("format-summary").textContent=I.size?`\uD45C ${I.size}\uAC1C \uC870\uC808\uB428 \xB7 \uBCC0\uACBD \uBE44\uAD50 \uD6C4 \uC800\uC7A5\uD569\uB2C8\uB2E4.`:"\uBCC0\uACBD \uBE44\uAD50 \uD6C4 \uC6D0\uBCF8 \uD30C\uC77C\uC5D0 \uC800\uC7A5\uD569\uB2C8\uB2E4.",n("table-revert-all").disabled=!I.size,n("document-format-tables").disabled=!p?.tables.some(k=>k.editable),n("table-fit").disabled=!z||!p?.tables.find(k=>k.index===b)?.contentWeights,z){let k=y.reduce((P,x)=>P+x,0);n("table-total-width").min=String(Math.max(320,y.length*40)),n("table-total-width").max=String(Math.max(1200,k)),n("table-total-width").value=k,n("table-total-label").textContent=k+"px"}else n("table-total-label").textContent=""}function ae(z){y=z.slice(),I.set(b,y.slice()),W(),B({type:"csync-table-widths",index:b,widths:y}),H(),X("\uD45C "+(b+1)+" \xB7 \uC544\uC9C1 \uD30C\uC77C\uC5D0 \uC800\uC7A5\uD558\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4.")}i.onclick=()=>{if(w=!w,s.hidden=!w,i.lastChild.textContent=w?"\uD45C \uC9C1\uC811 \uD3B8\uC9D1 \uC911":"\uD45C \uC9C1\uC811 \uD3B8\uC9D1",i.setAttribute("aria-pressed",String(w)),B({type:"csync-table-edit",enabled:w}),w){for(let[z,k]of I)B({type:"csync-table-widths",index:z,widths:k});b>=0&&B({type:"csync-table-widths",index:b,widths:y})}w&&b<0&&X("\uBBF8\uB9AC\uBCF4\uAE30\uC5D0\uC11C \uD3B8\uC9D1\uD560 \uD45C\uB97C \uD074\uB9AD\uD558\uC138\uC694.")},window.addEventListener("message",z=>{let k=z.data;if(!p||!w||z.source!==a.contentWindow||k?.channel!==p.channel)return;let P=p.tables.find(x=>x.index===k.index&&x.editable);P&&(k.type==="csync-table-select"&&(b=P.index,y=(I.get(b)??P.widths).slice(),W(),B({type:"csync-table-widths",index:b,widths:y}),H(),X("\uD45C "+(b+1)+" \uC120\uD0DD \xB7 \uB0B4\uC6A9\uC5D0 \uB9DE\uCDA4\uC73C\uB85C \uC790\uB3D9 \uBC30\uBD84\uD558\uAC70\uB098 \uC5F4 \uACBD\uACC4\uB97C \uB4DC\uB798\uADF8\uD558\uC138\uC694.")),k.type==="csync-table-change"&&k.index===b&&Array.isArray(k.widths)&&k.widths.length===P.widths.length&&k.widths.every(x=>Number.isInteger(x)&&x>=40)&&k.widths.reduce((x,C)=>x+C,0)<=3e3&&(y=k.widths.slice(),I.set(b,y.slice()),W(),H(),X("\uD45C "+(b+1)+" \xB7 \uC544\uC9C1 \uD30C\uC77C\uC5D0 \uC800\uC7A5\uD558\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4.")))});let te=(z,k)=>Array.from({length:k},(P,x)=>Math.floor(z/k)+(x<z%k?1:0));n("table-equal").onclick=()=>ae(te(y.reduce((z,k)=>z+k,0),y.length)),n("table-fit").onclick=()=>{let z=p.tables.find(k=>k.index===b);ae(Ct(y.reduce((k,P)=>k+P,0),z.contentWeights)),X("\uD45C "+(b+1)+" \xB7 \uAE00\uC790 \uAE38\uC774\uC5D0 \uB9DE\uCDB0 \uBC30\uBD84\uD588\uC2B5\uB2C8\uB2E4. \uC544\uC9C1 \uC800\uC7A5\uD558\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4.")};function G(z){let k=p.tables.filter(P=>P.editable);if(k.length){B({type:"csync-table-edit",enabled:!0});for(let P of k){let x=I.get(P.index)??P.widths,C=x.reduce((l,v)=>l+v,0),m=z==="fit"?Ct(C,P.contentWeights):te(C,x.length);I.set(P.index,m),B({type:"csync-table-widths",index:P.index,widths:m})}b<0&&(b=k[0].index),y=I.get(b).slice(),B({type:"csync-table-widths",index:b,widths:y}),W(),H(),B({type:"csync-table-edit",enabled:w}),X(`\uD45C ${k.length}\uAC1C\uC5D0 ${z==="fit"?"\uB0B4\uC6A9\uC5D0 \uB9DE\uCDA4":"\uADE0\uB4F1 \uBC30\uBD84"}\uC744 \uC801\uC6A9\uD588\uC2B5\uB2C8\uB2E4. \uBCC0\uACBD \uBE44\uAD50 \uD6C4 \uC800\uC7A5\uD558\uC138\uC694.`)}}n("document-format-tables").onchange=()=>{n("document-format-tables").value==="keep"?n("table-revert-all").onclick():G(n("document-format-tables").value)},n("table-revert-all").onclick=()=>{B({type:"csync-table-edit",enabled:!0});for(let z of p.tables.filter(k=>k.editable))B({type:"csync-table-widths",index:z.index,widths:z.widths});I.clear(),n("document-format-tables").value="keep",b>=0&&(y=p.tables.find(z=>z.index===b).widths.slice(),B({type:"csync-table-widths",index:b,widths:y})),B({type:"csync-table-edit",enabled:w}),W(),H(),X("\uBAA8\uB4E0 \uD45C\uC758 \uB108\uBE44 \uBCC0\uACBD\uC744 \uCDE8\uC18C\uD588\uC2B5\uB2C8\uB2E4.")},n("document-format-toggle").onclick=()=>{let z=!n("document-format-controls").hidden;n("document-format-controls").hidden=z,n("document-format-toggle").setAttribute("aria-expanded",String(!z)),z&&w&&i.onclick()};function pe(z,k,P){L=z.planId,n("table-save-status").textContent="",n("table-review-title").textContent="\uBB38\uC11C \uC11C\uC2DD \uBCC0\uACBD \uD655\uC778",n("format-review-note").textContent=k?"\uAE30\uBCF8 \uC11C\uC2DD \uC815\uB9AC\uC640 \uD45C \uC870\uC808 \uACB0\uACFC\uB97C \uD655\uC778\uD558\uC138\uC694. \uC800\uC7A5\uC744 \uB20C\uB7EC\uC57C \uD30C\uC77C\uC5D0 \uBC18\uC601\uB429\uB2C8\uB2E4.":"\uD45C \uC870\uC808 \uACB0\uACFC\uB97C \uD655\uC778\uD558\uC138\uC694. \uBCF8\uBB38 \uAE30\uBCF8 \uC11C\uC2DD\uC740 \uBCC0\uACBD\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. \uC800\uC7A5\uC744 \uB20C\uB7EC\uC57C \uD30C\uC77C\uC5D0 \uBC18\uC601\uB429\uB2C8\uB2E4.",g.open||g.showModal(),A||(N=P.editor.createModel("","markdown"),R=P.editor.createModel("","markdown"),A=P.editor.createDiffEditor(n("table-review-diff"),{automaticLayout:!0,readOnly:!0,originalEditable:!1,minimap:{enabled:!1},wordWrap:"on",scrollBeyondLastLine:!1}),A.setModel({original:N,modified:R})),N.setValue(z.before),R.setValue(z.after),A.layout(),n("table-save").disabled=z.before===z.after,z.before===z.after&&(n("table-save-status").textContent="\uC815\uB9AC\uD560 \uC11C\uC2DD \uBCC0\uACBD\uC774 \uC5C6\uC2B5\uB2C8\uB2E4.")}async function oe(z){if(!p)return;let k=O,P=q;n("document-format-basic").disabled=n("document-format-review").disabled=!0;try{let x=await e("/api/document-format/preview",{...h,hash:p.hash,basic:z,tables:"keep",changes:Array.from(I,([m,l])=>({index:m,widths:l.slice()}))}),C=await r();if(k!==O||P!==q)return;pe(x,z,C)}catch(x){d(x.message,"error")}finally{H()}}return n("document-format-basic").onclick=()=>oe(!0),n("document-format-review").onclick=()=>oe(!1),n("table-total-width").oninput=z=>{let k=Number(z.target.value),P=k-y.length*40,x=y.map(v=>v-40),C=x.reduce((v,S)=>v+S,0),m=C?x.map(v=>40+Math.floor(v/C*P)):te(k,y.length),l=k-m.reduce((v,S)=>v+S,0);for(let v=0;l>0;v++,l--)m[v%m.length]++;ae(m)},n("table-revert").onclick=()=>{I.delete(b),y=p.tables.find(z=>z.index===b).widths.slice(),B({type:"csync-table-widths",index:b,widths:y}),W(),H(),X("\uC120\uD0DD\uD55C \uD45C\uC758 \uBCC0\uACBD\uC744 \uCDE8\uC18C\uD588\uC2B5\uB2C8\uB2E4.")},n("table-save").onclick=async()=>{if(!L)return;let z=L;n("table-save").disabled=!0,n("table-review-close").disabled=!0,u(!0);try{await e("/api/table-format/save",{planId:z}),g.close(),d("\uBB38\uC11C \uC11C\uC2DD\uC744 \uC6D0\uBCF8 \uD30C\uC77C\uC5D0 \uC800\uC7A5\uD588\uC2B5\uB2C8\uB2E4.","success"),await c()}catch(k){n("table-save-status").textContent=k.message,d(k.message,"error")}finally{n("table-review-close").disabled=!1,u(!1)}},n("table-review-close").onclick=()=>g.close(),{clear:$,load(z,k){$(),p=z,h=k,a.onload=()=>{p===z&&(n("document-format-toggle").disabled=!1,i.disabled=!z.tables?.some(P=>P.editable),H(),B({type:"csync-table-edit",enabled:w}))}}}}var f=e=>document.getElementById(e),$e=lt(),Et=nt(),Z=st(),Vt=ct(),T,be,Le=[],F=null,U=null,xe=null,V=!1,le=0,fe=null,Ie=null,Be=!1,Ce="",zt,_e,Me=0,re,Oe,Ae=[],he="file",me=!1,ie=new Set,ye=new Map,Se=new Set,D="convert",Kt=St({api:se,loadMonaco:Re,notify:$e,refresh:()=>Mt.update(!0),setBusy:e=>{V=e,ee(),Q()}}),Mt=kt({notify:$e,api:se,formatting:Kt,selection:()=>({base:F||T,file:U,folder:D==="convert"?he==="folder":me})});dt(()=>D);var Ee=!0,ge={convert:{},sync:{}},It=()=>({base:F,folder:T,file:U,selectedDirectory:me,baseInput:f("base-input").value,expanded:[...ie]}),At="csync.workspace.v1";function Ue(){let e=f("out-input");return Z.browser?e.dataset.path||"":e.value}function Fe(e){let t=f("out-input");Z.browser&&(t.dataset.path=e),t.value=Z.browser?Z.folderName(e):e}function we(e){if(!Ee){ge[D]=It();try{localStorage.setItem(At,JSON.stringify({workspaces:ge,mode:e==="convert"||e==="sync"?e:D,referenceRoots:f("sync-references").value,out:Ue(),convertScope:he,direction:f("direction").value,fix:f("fix").checked,verify:f("sync-verify").checked,pullFormat:f("sync-pull-format").value,sideBySide:f("side-by-side").checked}))}catch{}}}function Lt(){try{let e=JSON.parse(localStorage.getItem(At));return e&&typeof e=="object"&&!Array.isArray(e)?e:{}}catch{return{}}}function $t(e){D=e,f(e+"-view").prepend(f("document-preview-panel"));for(let t of["convert","sync"])f("tab-"+t).setAttribute("aria-selected",String(t===D)),f("tab-"+t).tabIndex=t===D?0:-1,f(t+"-view").hidden=t!==D;f("choose-base").lastChild.textContent="\uAE30\uC900 \uD3F4\uB354 \uBCC0\uACBD\u2026",f("base-input").setAttribute("aria-label",D==="sync"?"Confluence \uC791\uC5C5 \uAE30\uC900 \uD3F4\uB354 \uACBD\uB85C":"\uBCC0\uD658 \uAE30\uC900 \uD3F4\uB354 \uACBD\uB85C"),f("workspace-note").textContent=Z.standalone?"\uD30C\uC77C\uACFC \uBCC0\uD658\uC740 \uBE0C\uB77C\uC6B0\uC800\uC5D0\uC11C \uCC98\uB9AC\uD558\uBA70, Confluence \uC694\uCCAD\uB9CC \uC911\uACC4 API\uB85C \uC804\uB2EC\uD569\uB2C8\uB2E4.":Z.browser?"\uD30C\uC77C\uC740 \uBE0C\uB77C\uC6B0\uC800\uC5D0\uC11C \uC77D\uACE0 \uC800\uC7A5\uD558\uBA70, \uBCC0\uD658\xB7Confluence \uC791\uC5C5\uC740 \uC11C\uBC84\uC758 \uC784\uC2DC \uACF5\uAC04\uC5D0\uC11C \uCC98\uB9AC\uD569\uB2C8\uB2E4.":D==="sync"?"\uC6D0\uACA9 \uBCC0\uACBD\uC740 \uC704\uC5D0\uC11C \uAC00\uC838\uC624\uACE0, \uC5C5\uB85C\uB4DC\uD560 \uBB38\uC11C\uB294 \uCCB4\uD06C \uD6C4 \uBBF8\uB9AC\uBCF4\uAE30\uD558\uC138\uC694.":"\uBCC0\uD658\uC740 \uC774 \uCEF4\uD4E8\uD130\uC5D0\uC11C \uCC98\uB9AC\uB429\uB2C8\uB2E4.",D==="convert"&&re?.layout()}async function Ge(e){if(e===D||V)return;if(we(),Z.browser){if(we(e),Lt().mode!==e){_("\uD0ED \uC804\uD658\uC744 \uC704\uD574 \uBE0C\uB77C\uC6B0\uC800\uC758 \uC0AC\uC774\uD2B8 \uC800\uC7A5\uC18C\uB97C \uD5C8\uC6A9\uD574 \uC8FC\uC138\uC694.",!0);return}location.reload();return}Ee=!0,V=!0,$t(e);let t;try{t=await Rt(ge[e])}finally{Ee=!1,V=!1,ee(),Q()}t&&_(t,!0)}for(let e of["convert","sync"])f("tab-"+e).onclick=()=>Ge(e),f("tab-"+e).onkeydown=t=>{if(["ArrowLeft","ArrowRight","Home","End"].includes(t.key)){t.preventDefault();let r=t.key==="Home"?"convert":t.key==="End"||e==="convert"?"sync":"convert";f("tab-"+r).disabled||(Ge(r),f("tab-"+r).focus())}};var De,qe;async function Xt(){if(!re)try{let e=await Re();De=e.editor.createModel("","markdown"),qe=e.editor.createModel("","markdown"),re=e.editor.createDiffEditor(f("diff"),{automaticLayout:!0,readOnly:!0,originalEditable:!1,renderSideBySide:f("side-by-side").checked,useInlineViewWhenSpaceIsLimited:!0,renderSideBySideInlineBreakpoint:700,ignoreTrimWhitespace:!1,minimap:{enabled:!1},scrollBeyondLastLine:!1,wordWrap:"on",renderOverviewRuler:!0,accessibilityVerbose:!0,padding:{top:12,bottom:12},lineHeight:22,fontSize:12}),re.setModel({original:De,modified:qe}),re.getOriginalEditor().updateOptions({ariaLabel:"\uC6D0\uBCF8 Markdown"}),re.getModifiedEditor().updateOptions({ariaLabel:"\uBCC0\uD658 \uACB0\uACFC Markdown"}),re.onDidUpdateDiff(()=>{let r=!!re.getLineChanges()?.length;f("previous-change").disabled=f("next-change").disabled=!r})}catch(e){throw f("editor-error").hidden=!1,f("editor-error").textContent="\uBCF8\uBB38 \uBE44\uAD50 \uD654\uBA74\uC744 \uBD88\uB7EC\uC624\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4. \uC0C8\uB85C\uACE0\uCE68\uD574 \uC8FC\uC138\uC694. "+e.message,e}}f("previous-change").onclick=()=>re?.goToDiff("previous");f("next-change").onclick=()=>re?.goToDiff("next");f("side-by-side").onchange=()=>re?.updateOptions({renderSideBySide:f("side-by-side").checked});async function se(e,t,r,c){let u=tt(e,t,c),d=u&&Et.begin(u);try{e!=="/api/sync/staging"&&!(Z.browser&&e==="/api/pick-folder")&&await Oe?.waitForLocalCheck();let n=await Z.request(e,{signal:r,method:t?"POST":"GET",headers:{...t?{"Content-Type":"application/json"}:{}},...t?{body:JSON.stringify(t)}:{}}),a=await n.json();if(!n.ok)throw Object.assign(new Error(a.error||"\uC694\uCCAD\uC744 \uCC98\uB9AC\uD558\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4."),{code:a.code,conflicts:a.conflicts,inPlace:a.inPlace,output:a.output});return a}finally{d?.end()}}function _(e,t=!1,r=t?"error":"info"){let c=f(D==="sync"?"sync-status":"status");c.textContent=e,c.classList.toggle("error",t),r&&$e(e,r)}function de(){if(D==="sync"){_("");return}Ae=[],f("preview-documents").hidden=!0,xe=null,f("result").hidden=!0,f("details").hidden=!0,De?.setValue(""),qe?.setValue(""),f("comparison-empty").hidden=!1,f("previous-change").disabled=f("next-change").disabled=!0,f("preview-label").textContent="\uBBF8\uB9AC\uBCF4\uAE30 \uB300\uAE30",_("")}var ue=(e,t)=>t===e||t.startsWith(e.endsWith("/")?e:e+"/")||t.startsWith(e.endsWith("\\")?e:e+"\\");function ee(){f("local-disconnect").disabled=V,Mt.update();for(let d of["preview","save","next-document"])f(d).disabled=V||!U;for(let d of["preview-document","tab-convert","tab-sync","choose-base","apply-base","base-input","base-home","up","choose-out","out-input","direction","fix","search"])f(d).disabled=V;V||(f("up").disabled=T===be||F&&!ue(F,be));let e=F||T,t=!!e&&Ue()===e;f("convert-save-mode").textContent=t?"\uC6D0\uBCF8 \uB36E\uC5B4\uC4F0\uAE30":"\uBCC4\uB3C4 \uD3F4\uB354 \uC800\uC7A5",f("out-mode-hint").textContent=t?"\uC6D0\uBCF8 \uB36E\uC5B4\uC4F0\uAE30 \xB7 \uD655\uC778 \uD6C4 \uC800\uC7A5":Z.browser?"\uBCC4\uB3C4 \uD3F4\uB354 \uB610\uB294 \uC6D0\uBCF8 \uB36E\uC5B4\uC4F0\uAE30":"\uC120\uD0DD \uC0AC\uD56D",f("root-name").textContent=e?e.split(/[\\/]/).filter(Boolean).pop()||e:"\uD3F4\uB354\uB97C \uC120\uD0DD\uD558\uC138\uC694",f("root-path").textContent=e||"\uC544\uC9C1 \uC124\uC815\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4.",f("root-purpose").textContent=D==="sync"?"Push \xB7 Pull \uAE30\uC900":"\uBCC0\uD658 \uAE30\uC900",f("root-hint").textContent=D==="sync"?"\uC2A4\uD398\uC774\uC2A4 \uBB38\uC11C\uB97C \uBCF4\uAD00\uD558\uB294 \uC791\uC5C5\uACF5\uAC04\uC785\uB2C8\uB2E4. \uC5C5\uB85C\uB4DC \uB300\uC0C1\uC740 \uC624\uB978\uCABD \uBCC0\uACBD\uC0AC\uD56D\uC5D0\uC11C \uCCB4\uD06C\uD558\uC138\uC694.":"\uBB38\uC11C\uC640 \uCC38\uC870 \uB9C1\uD06C\uB97C \uCC3E\uB294 \uAE30\uC900\uC785\uB2C8\uB2E4. \uC544\uB798\uC5D0\uC11C \uBCC0\uD658\uD560 \uD30C\uC77C\xB7\uD3F4\uB354\uB97C \uC120\uD0DD\uD558\uC138\uC694.",f("base-home").disabled=V||!e||e===T;let r=e&&T&&ue(e,T)?T.slice(e.length).replace(/\\/g,"/"):T||"";f("path").textContent=T?T===e?"\uAE30\uC900 \uD3F4\uB354 /":`\uAE30\uC900 \uD3F4\uB354 ${r}`:"\uD3F4\uB354\uB97C \uC120\uD0DD\uD558\uC138\uC694",f("path").title=T||"",f("explorer-note").textContent=D==="sync"?"\uD30C\uC77C\uC744 \uC120\uD0DD\uD574 \uB0B4\uC6A9\uC744 \uBBF8\uB9AC\uBCFC \uC218 \uC788\uC2B5\uB2C8\uB2E4":"\uD30C\uC77C\xB7\uD3F4\uB354\uB97C \uC120\uD0DD\uD574 \uBCC0\uD658\uD558\uC138\uC694",f("fix").disabled=V||f("direction").value==="repair",f("selected").textContent=U?U.split(/[\\/]/).pop():"\uBCC0\uD658\uD560 \uBB38\uC11C\uB97C \uC120\uD0DD\uD558\uC138\uC694";let c=he==="folder",u=c&&!!F&&U===F;f("convert-select-all").disabled=V||!F||u,f("convert-select-all").textContent=u?"\uAE30\uC900 \uD3F4\uB354 \uC804\uCCB4 \uC120\uD0DD\uB428":"\uAE30\uC900 \uD3F4\uB354 \uC804\uCCB4 \uC120\uD0DD",f("convert-target-note").textContent=u?"\uAE30\uC900 \uD3F4\uB354\uC640 \uBAA8\uB4E0 \uD558\uC704 \uD3F4\uB354\uC758 Markdown \uBB38\uC11C\uB97C \uBCC0\uD658\uD569\uB2C8\uB2E4.":"\uD30C\uC77C\xB7\uD3F4\uB354\uB97C \uC120\uD0DD\uD558\uAC70\uB098 \uAE30\uC900 \uD3F4\uB354 \uC804\uCCB4\uB97C \uC120\uD0DD\uD558\uC138\uC694.",f("selected").textContent=U?(c&&D==="convert"?u?"\uC804\uCCB4 \xB7 ":"\uD3F4\uB354 \xB7 ":"")+U.split(/[\\/]/).pop():c?"\uBCC0\uD658\uD560 \uD3F4\uB354\uB97C \uC120\uD0DD\uD558\uC138\uC694":"\uBCC0\uD658\uD560 \uBB38\uC11C\uB97C \uC120\uD0DD\uD558\uC138\uC694",f("base").textContent=U||"\uC67C\uCABD\uC5D0\uC11C \uB300\uC0C1\uC744 \uC120\uD0DD\uD558\uC138\uC694.",f("convert-output-hint").textContent=t?"\uC120\uD0DD\uD55C \uBB38\uC11C\xB7\uCCA8\uBD80\uB9CC \uC6D0\uB798 \uC704\uCE58\uC5D0 \uC800\uC7A5\uD569\uB2C8\uB2E4. \uBCC0\uACBD \uD30C\uC77C \uD655\uC778 \uD6C4 \uB36E\uC5B4\uC501\uB2C8\uB2E4.":c?"\uC120\uD0DD \uD3F4\uB354 \uC548\uC758 \uBAA8\uB4E0 Markdown\uC744 \uBCC0\uD658\uD569\uB2C8\uB2E4. \uCD9C\uB825 \uD3F4\uB354 \uC544\uB798\uC5D0 \uC120\uD0DD \uD3F4\uB354 \uB0B4\uBD80 \uAD6C\uC870\uB9CC \uC720\uC9C0\uD569\uB2C8\uB2E4.":"\uC120\uD0DD\uD55C Markdown\uC744 \uCD9C\uB825 \uD3F4\uB354 \uBC14\uB85C \uC544\uB798\uC5D0 \uC800\uC7A5\uD569\uB2C8\uB2E4. \uB9C1\uD06C\uB294 \uD574\uB2F9 \uD30C\uC77C\uC774 \uC788\uB294 \uD3F4\uB354\uB97C \uAE30\uC900\uC73C\uB85C \uD574\uC11D\uD569\uB2C8\uB2E4.",f("base").title=F||"",f("selected").title=U||"",Oe?.update(V,Ee),we()}function Q(){let e=f("files").scrollTop;f("files").replaceChildren();let t=fe??Le;if(f("count").textContent=Be?"\uAC80\uC0C9 \uC911\u2026":t.length+(fe?"\uAC1C \uACB0\uACFC":"\uAC1C \uD56D\uBAA9"),Ce||fe&&!t.length){let c=document.createElement("div");c.className="empty",c.textContent=Ce||(fe?"\uC77C\uCE58\uD558\uB294 .md \uBB38\uC11C\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4.":"\uD45C\uC2DC\uD560 \uD3F4\uB354\uB098 .md \uBB38\uC11C\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4."),f("files").append(c)}let r=(c,u=0)=>{let d=document.createElement("div");d.className="tree-row",d.style.paddingLeft=u*16+"px";let n=document.createElement(c.directory?"button":"span");n.className="tree-toggle",c.directory&&(n.textContent=ie.has(c.path)?"\u25BE":"\u25B8",n.disabled=V,n.dataset.path=c.path,n.setAttribute("aria-expanded",String(ie.has(c.path))),n.setAttribute("aria-label",c.name+(ie.has(c.path)?" \uC811\uAE30":" \uD3BC\uCE58\uAE30")),n.onclick=()=>_t(c.path)),d.append(n);let a=document.createElement("button");a.className="file"+(c.path===U?" selected":""),a.disabled=V;let i=document.createElement("span");i.className=c.directory?"icon folder-icon":"icon",c.directory?i.innerHTML='<svg viewBox="0 0 24 24" fill="none"><path d="M3 6a2 2 0 0 1 2-2h5l2 3h7a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2Z" fill="#f7d783" stroke="#bf9132" stroke-width="1.5"/><path d="M3 9h18" stroke="#bf9132" stroke-width="1.5"/></svg>':i.textContent="MD",i.setAttribute("aria-hidden","true");let s=document.createElement("span");s.textContent=c.name;let g=document.createElement("span");if(g.className="file-label",g.append(s),c.relativePath){let E=document.createElement("small");E.className="file-location",E.textContent=c.relativePath,g.append(E),a.title=c.path}if(a.append(i,g),a.title=c.path,a.setAttribute("aria-pressed",String(c.path===U)),a.onclick=()=>{me=c.directory,D==="convert"&&(he=c.directory?"folder":"file"),U=c.path,(!F||!ue(F,U))&&(F=Ie||T),de(),ee(),Q()},d.append(a),f("files").append(d),c.directory&&ie.has(c.path)){let E=ye.get(c.path);if(E?.length)E.forEach(p=>r(p,u+1));else{let p=document.createElement("div");p.className="tree-note",p.style.paddingLeft=(u+1)*16+24+"px",p.textContent=Se.has(c.path)?"\uBD88\uB7EC\uC624\uB294 \uC911\u2026":E?"\uD45C\uC2DC\uD560 \uBB38\uC11C\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4.":"\uD3BC\uCE58\uAE30\uB97C \uB2E4\uC2DC \uB20C\uB7EC \uC8FC\uC138\uC694.",f("files").append(p)}}};fe?t.forEach(c=>r(c)):T&&r({name:T.split(/[\\/]/).pop()||T,path:T,directory:!0}),f("files").scrollTop=e}async function _t(e){if(V)return;let t=le;if(ie.has(e))ie.delete(e);else if(ie.add(e),!ye.has(e)&&!Se.has(e)){Se.add(e),Q();try{let r=await se("/api/browse?path="+encodeURIComponent(e));if(t!==le)return;ye.set(e,r.entries)}catch(r){t===le&&(ie.delete(e),_("\uD3F4\uB354\uB97C \uD3BC\uCE60 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4: "+r.message,!0))}finally{t===le&&Se.delete(e)}}t===le&&(Q(),we(),[...f("files").querySelectorAll(".tree-toggle")].find(r=>r.dataset.path===e)?.focus())}async function ce(e,t=!1){Te(),f("search").value="";let r=++le;try{let c=await se("/api/browse"+(e?"?path="+encodeURIComponent(e):""));return r!==le?void 0:(T=c.path,be=c.parent,Le=c.entries,ye=new Map([[T,Le]]),ie=new Set([T]),Se=new Set,(t||!F)&&(F=T,U=null,me=!1,Ee||de()),t&&(f("root-path-editor").open=!1),f("base-input").value=F||T,f("path").textContent=T,f("path").title=T,f("base-input").title=F||T,f("search").value="",Q(),ee(),!0)}catch(c){r===le&&_("\uD3F4\uB354\uB97C \uC5F4 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4: "+c.message,!0)}}async function Ot(e){V=!0,ee(),Q(),_("\uC2DC\uC2A4\uD15C \uD3F4\uB354 \uB2E4\uC774\uC5BC\uB85C\uADF8\uC5D0\uC11C \uD3F4\uB354\uB97C \uC120\uD0DD\uD574 \uC8FC\uC138\uC694.",!1,null);try{let t=await se("/api/pick-folder",{kind:e,start:e==="base"?F||T:Ue()||be});if(t.path){if(e==="base"&&Z.browser){le++,Te(),F=T=t.path,be=void 0,U=null,me=!1,Le=[],ye=new Map,ie=new Set,Se=new Set,f("base-input").value=t.path,D==="convert"?Fe(""):f("sync-references").value="",ge[D]={},we(),location.reload();return}e==="base"?await ce(t.path,!0):(Fe(t.path),de())}else _("\uD3F4\uB354 \uC120\uD0DD\uC744 \uCDE8\uC18C\uD588\uC2B5\uB2C8\uB2E4.")}catch(t){_(t.message,!0)}finally{V=!1,ee(),Q()}}f("choose-base").onclick=()=>Ot("base");f("choose-out").onclick=()=>Ot("out");f("apply-base").onclick=()=>ce(f("base-input").value,!0);f("base-input").onkeydown=e=>{e.key==="Enter"&&ce(f("base-input").value,!0)};f("up").onclick=()=>ce(be);f("base-home").onclick=()=>{!V&&F&&ce(F)};f("convert-select-all").onclick=()=>{V||!F||D!=="convert"||(he="folder",me=!0,U=F,de(),ee(),Q())};function Te(){clearTimeout(zt),_e?.abort(),Me++,fe=null,Ie=null,Be=!1,Ce=""}f("search").oninput=()=>{Te();let e=f("search").value.trim();if(!e||!T){Q();return}let t=Me;Ie=F||T,fe=[],Be=!0,Ce="\uAE30\uC900 \uD3F4\uB354\uC758 \uBAA8\uB4E0 \uD558\uC704 \uD3F4\uB354\uB97C \uAC80\uC0C9\uD569\uB2C8\uB2E4\u2026",Q(),zt=setTimeout(async()=>{_e=new AbortController;try{let r=await se("/api/search?"+new URLSearchParams({path:Ie,q:e}),void 0,_e.signal);if(t!==Me)return;Ie=r.root,fe=r.entries,Ce=r.skipped?"\uC77D\uC744 \uC218 \uC5C6\uB294 \uD558\uC704 \uD3F4\uB354 "+r.skipped+"\uAC1C\uB97C \uAC74\uB108\uB6F0\uC5C8\uC2B5\uB2C8\uB2E4.":""}catch(r){if(t!==Me)return;Ce="\uAC80\uC0C9\uD558\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4: "+r.message}finally{t===Me&&(Be=!1,Q())}},250)};f("direction").onchange=()=>{de(),ee(),f("direction-hint").textContent={markdown:"\uC704\uD0A4\uB9C1\uD06C\uB97C \uC0C1\uB300 \uB9C1\uD06C\uB85C, PDF \uD398\uC774\uC9C0 \uCC38\uC870\uB97C \uC774\uBBF8\uC9C0\uB85C \uBCC0\uD658\uD569\uB2C8\uB2E4.",obsidian:"\uC0C1\uB300 \uBB38\uC11C \uB9C1\uD06C\uB97C \uC704\uD0A4\uB9C1\uD06C\uB85C \uBC14\uAFB8\uACE0 \uAC01\uC8FC\xB7PDF \uCC38\uC870\uB97C \uBCF5\uC6D0\uD569\uB2C8\uB2E4.",repair:"\uB9C1\uD06C \uD615\uC2DD\uC740 \uC720\uC9C0\uD558\uACE0 \uCF54\uB4DC\uBE14\uB85D \uC5B8\uC5B4\xB7CSS \uC794\uD574\xB7\uC774\uC2A4\uCF00\uC774\uD504 \uB4F1\uC744 \uBCF4\uC815\uD569\uB2C8\uB2E4."}[f("direction").value]};var ve=f("repair-help-button"),We=f("repair-tooltip"),Tt=()=>{We.hidden=!1};ve.onfocus=ve.onclick=Tt;ve.parentElement.onmouseenter=Tt;ve.parentElement.onmouseleave=()=>{document.activeElement!==ve&&(We.hidden=!0)};ve.onblur=()=>{We.hidden=!0};ve.onkeydown=e=>{e.key==="Escape"&&(We.hidden=!0,e.stopPropagation())};function Pt(e){let t=Ae[e];t&&(De.setValue(t.before),qe.setValue(t.after),f("comparison-empty").hidden=!0,f("preview-label").textContent=t.before===t.after?"\uBCF8\uBB38 \uBCC0\uACBD \uC5C6\uC74C":"\uBCC0\uACBD\uB41C \uBD80\uBD84 \uD45C\uC2DC")}f("preview-document").onchange=()=>Pt(Number(f("preview-document").value));f("fix").onchange=de;f("out-input").oninput=()=>{de(),ee()};async function Nt(e){if(!(V||!U)){V=!0;try{de(),ee(),Q(),_(e?"\uBBF8\uB9AC\uBCF4\uAE30\uB97C \uB9CC\uB4DC\uB294 \uC911\uC785\uB2C8\uB2E4\u2026":"\uBB38\uC11C\uC640 \uCCA8\uBD80\uD30C\uC77C\uC744 \uBCC0\uD658\uD558\uB294 \uC911\uC785\uB2C8\uB2E4\u2026",!1,null),await Xt();let t={base:F,file:U,scope:he,out:Ue(),to:f("direction").value,fix:f("fix").checked,preview:e},r,c={};for(;!r;)try{r=await se("/api/convert",{...t,approvedOverwrites:c})}catch(u){if(e||u.code!=="OVERWRITE_REQUIRED")throw u;if(!await Vt({conflicts:u.conflicts,inPlace:u.inPlace,output:u.output||t.out})){_("\uB36E\uC5B4\uC4F0\uAE30\uB97C \uCDE8\uC18C\uD588\uC2B5\uB2C8\uB2E4. \uC800\uC7A5\uD558\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4.");return}for(let d of u.conflicts)c[d.path]=d.hash;_("\uAE30\uC874 \uD30C\uC77C\uC744 \uB36E\uC5B4\uC4F0\uB294 \uC911\uC785\uB2C8\uB2E4\u2026",!1,null)}if(Ae=r.previews,f("preview-document").replaceChildren(...Ae.map((u,d)=>{let n=document.createElement("option");return n.value=d,n.textContent=u.path,n})),f("preview-documents").hidden=r.documentCount<=1,f("preview-count").textContent=`\uC804\uCCB4 ${r.documentCount}\uAC1C \uBCC0\uD658 \xB7 ${Ae.length}\uAC1C \uBCF8\uBB38 \uBE44\uAD50`,Pt(0),f("log").textContent=r.log,f("details").hidden=!1,xe=r.output,xe&&(f("output").textContent=Z.browser&&Z.folderName(xe)||xe,f("result").hidden=!1),e)_("\uBBF8\uB9AC\uBCF4\uAE30 \uC644\uB8CC. \uCD9C\uB825 \uC704\uCE58\uB97C \uD655\uC778\uD558\uACE0 \uC800\uC7A5\uD558\uC138\uC694.",!1,"success");else if(r.saved&&r.saved.created===0&&r.saved.overwritten===0)_(`\uAE30\uC874 \uCD9C\uB825\uACFC \uB0B4\uC6A9\uC774 \uAC19\uC544 \uC800\uC7A5\uD558\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4. \uD30C\uC77C ${r.saved.reused}\uAC1C\uB97C \uADF8\uB300\uB85C \uC7AC\uC0AC\uC6A9\uD588\uC2B5\uB2C8\uB2E4.`,!1,"success");else{let u=r.saved;_(u?`\uC800\uC7A5 \uC644\uB8CC \xB7 \uC0C8 \uD30C\uC77C ${u.created}\uAC1C \xB7 \uB36E\uC5B4\uC4F4 \uD30C\uC77C ${u.overwritten}\uAC1C \xB7 \uB3D9\uC77C \uB0B4\uC6A9 \uC7AC\uC0AC\uC6A9 ${u.reused}\uAC1C (\uBB38\uC11C\xB7\uCCA8\uBD80 \uD3EC\uD568)`:`\uBB38\uC11C ${r.documentCount}\uAC1C \uC800\uC7A5 \uC644\uB8CC.`,!1,"success")}}catch(t){_(t.message,!0)}finally{V=!1,ee(),Q()}}}f("next-document").onclick=()=>{V||(U=null,de(),Te(),f("search").value="",ee(),Q(),f("search").focus(),f("search").scrollIntoView({block:"center",behavior:"auto"}),_("\uB2E4\uC74C \uBB38\uC11C\uB97C \uC120\uD0DD\uD558\uC138\uC694. \uAE30\uC900 \uD3F4\uB354\uC640 \uBCC0\uD658 \uC124\uC815\uC740 \uC720\uC9C0\uB429\uB2C8\uB2E4."))};f("preview").onclick=()=>Nt(!0);f("save").onclick=()=>Nt(!1);f("open").onclick=async()=>{try{let e=await se("/api/open",{path:xe});Z.browser&&_(`\uC120\uD0DD\uD55C \uCD9C\uB825 \uD3F4\uB354 (${e.name})\uC5D0 \uC800\uC7A5\uD588\uC2B5\uB2C8\uB2E4.`)}catch(e){_("\uD3F4\uB354\uB97C \uC5F4 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. \uC704 \uC800\uC7A5 \uACBD\uB85C\uB97C \uC774\uC6A9\uD574 \uC8FC\uC138\uC694. "+e.message,!0)}};Oe=vt({activity:Et,api:se,loadMonaco:Re,notify:$e,context:()=>{let e=D==="sync"?It():ge.sync;return{base:e.base||e.folder,folder:e.folder,file:e.file,directory:e.selectedDirectory}},setBusy:e=>{V=e,ee(),Q()},showSync:()=>Ge("sync"),refresh:async()=>{D==="sync"&&await ce(F||T)}});document.querySelector(".app-main").addEventListener("input",we);document.querySelector(".app-main").addEventListener("change",we);async function Rt(e){let t=a=>typeof e[a]=="string"?e[a]:"";le++,Te(),F=null,U=null,me=!1,T=void 0,be=void 0,Le=[],f("base-input").value="",ee(),Q();let r="",c=t("base"),u=t("folder");c?await ce(c,!0)?u&&ue(F,u)&&u!==F&&(await ce(u)||(r="\uC774\uC804 \uD0D0\uC0C9 \uD3F4\uB354\uB97C \uC5F4 \uC218 \uC5C6\uC5B4 \uAE30\uC900 \uD3F4\uB354\uB97C \uC5F4\uC5C8\uC2B5\uB2C8\uB2E4.")):(r="\uC800\uC7A5\uB41C \uAE30\uC900 \uD3F4\uB354\uB97C \uC5F4 \uC218 \uC5C6\uC5B4 \uC2DC\uC791 \uD3F4\uB354\uB97C \uC5F4\uC5C8\uC2B5\uB2C8\uB2E4. \uACBD\uB85C\uB97C \uB2E4\uC2DC \uC120\uD0DD\uD574 \uC8FC\uC138\uC694.",await ce()):await ce(u||void 0)||(r="\uC774\uC804 \uD3F4\uB354\uB97C \uC5F4 \uC218 \uC5C6\uC5B4 \uC2DC\uC791 \uD3F4\uB354\uB97C \uC5F4\uC5C8\uC2B5\uB2C8\uB2E4.",await ce());let d=t("file");if(d&&F&&ue(F,d))try{if(D==="convert"&&he==="folder"||D==="sync"&&e.selectedDirectory===!0)U=(await se("/api/browse?path="+encodeURIComponent(d))).path,me=!0;else{let a=d.slice(0,Math.max(d.lastIndexOf("/"),d.lastIndexOf("\\")));(await se("/api/browse?path="+encodeURIComponent(a))).entries.some(s=>!s.directory&&s.path===d)?U=d:r="\uC774\uC804\uC5D0 \uC120\uD0DD\uD55C \uBB38\uC11C\uAC00 \uC5C6\uC5B4 \uC120\uD0DD\uC744 \uD574\uC81C\uD588\uC2B5\uB2C8\uB2E4."}}catch{r="\uC774\uC804\uC5D0 \uC120\uD0DD\uD55C \uBB38\uC11C\uB97C \uC5F4 \uC218 \uC5C6\uC5B4 \uC120\uD0DD\uC744 \uD574\uC81C\uD588\uC2B5\uB2C8\uB2E4."}let n=new Set(Array.isArray(e.expanded)?e.expanded.filter(a=>typeof a=="string"&&T&&ue(T,a)):[]);if(!Array.isArray(e.expanded)&&U&&T&&ue(T,U)){let a=U.slice(0,Math.max(U.lastIndexOf("/"),U.lastIndexOf("\\")));for(;a&&ue(T,a)&&(n.add(a),a!==T);)a=a.slice(0,Math.max(a.lastIndexOf("/"),a.lastIndexOf("\\")))}for(let a of n)try{ye.has(a)||ye.set(a,(await se("/api/browse?path="+encodeURIComponent(a))).entries),ie.add(a)}catch{}return!r&&t("baseInput")&&(f("base-input").value=t("baseInput")),r&&D==="convert"&&de(),r}async function Gt(){let e=Lt(),t=d=>typeof e[d]=="string"?e[d]:"";V=!0,ee(),f("sync-references").value=t("referenceRoots"),Fe(t("out")),["file","folder"].includes(e.convertScope)&&(he=e.convertScope),["markdown","obsidian","repair"].includes(e.direction)&&(f("direction").value=e.direction),typeof e.fix=="boolean"&&(f("fix").checked=e.fix),["markdown","obsidian"].includes(e.pullFormat)&&(f("sync-pull-format").value=e.pullFormat),typeof e.verify=="boolean"&&(f("sync-verify").checked=e.verify),typeof e.sideBySide=="boolean"&&(f("side-by-side").checked=e.sideBySide,re?.updateOptions({renderSideBySide:e.sideBySide}));let r=d=>d&&typeof d=="object"&&!Array.isArray(d);ge=r(e.workspaces)?{convert:r(e.workspaces.convert)?e.workspaces.convert:{},sync:r(e.workspaces.sync)?e.workspaces.sync:{}}:{convert:{base:e.base,folder:e.folder,file:e.file,baseInput:e.baseInput},sync:{base:e.base,folder:e.folder,file:e.file,baseInput:e.baseInput}};let c=e.mode==="sync"?"sync":"convert";Z.browser&&Z.newBaseSelected?.()&&(ge[c]={},c==="convert"?Fe(""):f("sync-references").value=""),f("direction").onchange(),$t(c);let u;try{u=await Rt(ge[D])}finally{Ee=!1,V=!1,ee(),Q()}(!Z.browser||D==="sync")&&await Oe.resume(),u&&_(u,!0)}Z.ready.then(Gt).then(()=>{let e=Oe.watch();window.addEventListener("pagehide",e,{once:!0})}).catch(e=>$e(e.message,"error"));
|