@ai-projector/ide 0.11.0 → 0.11.1
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/bin/install-desktop +0 -0
- package/bin/projector +0 -0
- package/dist/assets/CodeViewer--WUSmn5i.css +1 -0
- package/dist/assets/CodeViewer-C-C3aibO.js +1 -0
- package/dist/assets/DiscussionView-Cd3exhWx.css +1 -0
- package/dist/assets/DiscussionView-K3YyWE-E.js +2 -0
- package/dist/assets/EditorSettings-DlzJc8cp.js +13 -0
- package/dist/assets/EditorSettings-jSngmpPq.css +1 -0
- package/dist/assets/HtmlViewer-DULKK0_6.js +2 -0
- package/dist/assets/HtmlViewer-XHn9rACG.css +1 -0
- package/dist/assets/ImageViewport-BT_ftU4z.js +1 -0
- package/dist/assets/{ImageViewport-BXN_-Ztv.css → ImageViewport-JcG9P4B6.css} +1 -1
- package/dist/assets/IssueView-ChJFmrTW.js +1 -0
- package/dist/assets/MarkdownViewer-C646XbYf.css +1 -0
- package/dist/assets/MarkdownViewer-Dm2MVp3X.js +2 -0
- package/dist/assets/PullRequestView-Cipn5P0H.js +3 -0
- package/dist/assets/PullRequestView-CzZn9mOg.css +1 -0
- package/dist/assets/ReleaseView-Cz6dH4ej.js +2 -0
- package/dist/assets/ReleaseView-VLO9NVfI.css +1 -0
- package/dist/assets/SplitPanes-0-UT7ksm.css +1 -0
- package/dist/assets/SplitPanes-DNDTWIta.js +1 -0
- package/dist/assets/SvgViewer-DP6-1_fw.css +1 -0
- package/dist/assets/SvgViewer-DkoULP8F.js +2 -0
- package/dist/assets/{TerminalView-DnkOpsvR.css → TerminalView-C30_q784.css} +1 -1
- package/dist/assets/TerminalView-fWmIbnZn.js +16 -0
- package/dist/assets/TrackerDetail-CBaLycQg.css +1 -0
- package/dist/assets/TrackerDetail-DuzfEwSZ.js +1 -0
- package/dist/assets/UiButton-AkN01P3P.css +1 -0
- package/dist/assets/UiButton-DvucBdmd.js +2 -0
- package/dist/assets/UiPanel-BUDYIo-h.css +1 -0
- package/dist/assets/UiPanel-DtI4DFYT.js +1 -0
- package/dist/assets/UiViewerPage-CMFEzZ2i.css +1 -0
- package/dist/assets/UiViewerPage-aHNgiSjO.js +2 -0
- package/dist/assets/{VisualMarkdownEditor-CcbKSvtd.css → VisualMarkdownEditor-1DNSAYyq.css} +1 -1
- package/dist/assets/VisualMarkdownEditor-BHx2olWh.js +1070 -0
- package/dist/assets/_plugin-vue_export-helper-D62Ebo7D.js +3 -0
- package/dist/assets/compiler-dom.esm-bundler-C5a_rSi1.js +9 -0
- package/dist/assets/{dist-BnsBZm0f.js → dist-BMX-4S0G.js} +1 -1
- package/dist/assets/{dist-gPzXCSJV.js → dist-BQmIGtmd.js} +1 -1
- package/dist/assets/{dist-tNJpR9Y1.js → dist-Bzl1vuDO.js} +1 -1
- package/dist/assets/{dist-b78ZWHZy.js → dist-CG79NjMk.js} +1 -1
- package/dist/assets/{dist-DrZek4TY.js → dist-Coak6JQD.js} +1 -1
- package/dist/assets/{dist-Br4AY_oy.js → dist-Cu_4z-jQ.js} +1 -1
- package/dist/assets/{dist-CyRvGpIP.js → dist-CzOhSFRQ.js} +1 -1
- package/dist/assets/{dist-B1XyTjRF.js → dist-DN5Y0OA5.js} +1 -1
- package/dist/assets/dist-Dvv0YQ-H.js +23 -0
- package/dist/assets/{dist-dwBOnDaY.js → dist-DzoDV6Eh.js} +2 -2
- package/dist/assets/dist-ZRLBgDFY.js +1 -0
- package/dist/assets/{dist-C-1XYtJO.js → dist-cLGxPfRN.js} +1 -1
- package/dist/assets/{editor-theme-DuQQ8n56.js → editor-theme-ClBxXjSu.js} +1 -1
- package/dist/assets/external-link-lkcxItwM.js +1 -0
- package/dist/assets/{github-emoji-C2UmmDoA.js → github-emoji-CXJ5RSZS.js} +120 -120
- package/dist/assets/{github-emoji-qJihbtN6.css → github-emoji-D8dkjuM_.css} +1 -1
- package/dist/assets/hub-DfPcTPCC.js +1 -0
- package/dist/assets/main-JoBAi6ol.css +1 -0
- package/dist/assets/main-iz4ud0jC.js +178 -0
- package/dist/assets/rolldown-runtime-XKyaHtl9.js +1 -0
- package/dist/assets/shared.esm-bundler-DoSbGLUP.js +2 -0
- package/dist/assets/styles-CCXo2OoQ.css +1 -0
- package/dist/assets/styles-DZDDPlL3.js +1 -0
- package/dist/hub.html +7 -5
- package/dist/index.html +19 -16
- package/package.json +5 -5
- package/dist/assets/CodeViewer-BAgvP3Yx.js +0 -1
- package/dist/assets/CodeViewer-QIU6uQDH.css +0 -1
- package/dist/assets/DiscussionView-83kZBzfq.js +0 -2
- package/dist/assets/DiscussionView-kEJZ0OhC.css +0 -1
- package/dist/assets/EditorSettings-CPklwfT-.js +0 -13
- package/dist/assets/EditorSettings-DVhn0sGg.css +0 -1
- package/dist/assets/HtmlViewer-C3Mf1IEK.css +0 -1
- package/dist/assets/HtmlViewer-CGHhO9bM.js +0 -2
- package/dist/assets/ImageViewport-lPITcKgO.js +0 -1
- package/dist/assets/IssueView-CfdeTTKs.js +0 -1
- package/dist/assets/MarkdownViewer-3VG5ygRT.css +0 -1
- package/dist/assets/MarkdownViewer-DKZvt6XG.js +0 -2
- package/dist/assets/PullRequestView-Bce3nQML.js +0 -3
- package/dist/assets/PullRequestView-F_M37BOq.css +0 -1
- package/dist/assets/ReleaseView-BKH8Kb3T.css +0 -1
- package/dist/assets/ReleaseView-DO-R7ktE.js +0 -2
- package/dist/assets/SplitPanes-BJR26w00.css +0 -1
- package/dist/assets/SplitPanes-DR126xV8.js +0 -1
- package/dist/assets/SvgViewer-CEIl2Ob2.js +0 -2
- package/dist/assets/SvgViewer-DyAp20sd.css +0 -1
- package/dist/assets/TerminalView-CDAJ5gmT.js +0 -16
- package/dist/assets/TrackerDetail-CV0Qqzx3.js +0 -1
- package/dist/assets/TrackerDetail-OFp4ONUm.css +0 -1
- package/dist/assets/UiPanel-CND7Qs_n.js +0 -1
- package/dist/assets/UiPanel-CS77nWcC.css +0 -1
- package/dist/assets/UiViewerPage-BOvnLith.css +0 -1
- package/dist/assets/UiViewerPage-z_s1uFHO.js +0 -2
- package/dist/assets/VisualMarkdownEditor-CwwWF0eb.js +0 -1069
- package/dist/assets/_plugin-vue_export-helper-C4wFX7Eq.js +0 -24
- package/dist/assets/compiler-dom.esm-bundler-B0iuTsih.js +0 -9
- package/dist/assets/dist-B_hKnsNE.js +0 -1
- package/dist/assets/dist-DzAS050M.js +0 -23
- package/dist/assets/external-link-BFTqPI03.js +0 -1
- package/dist/assets/hub-rvbmNftk.js +0 -1
- package/dist/assets/main-CgMl4Qjs.css +0 -1
- package/dist/assets/main-DEEGhxlk.js +0 -186
- package/dist/assets/shared.esm-bundler-EUzHGNqQ.js +0 -2
- package/dist/assets/styles-C07CLvbW.js +0 -2
- package/dist/assets/styles-CX3Ni7dk.css +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t,t.exports),e=null),t.exports),s=(e,n)=>{let r={};for(var i in e)t(r,i,{get:e[i],enumerable:!0});return n||t(r,Symbol.toStringTag,{value:`Module`}),r},c=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},l=(n,r,o)=>(o=n==null?{}:e(i(n)),c(r||!n||!n.__esModule||!a.call(n,`default`)?t(o,`default`,{value:n,enumerable:!0}):o,n));export{s as n,l as r,o as t};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
function e(e){let t=Object.create(null);for(let n of e.split(`,`))t[n]=1;return e=>e in t}var t={},n=[],r=()=>{},i=()=>!1,a=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),o=e=>e.startsWith(`onUpdate:`),s=Object.assign,c=(e,t)=>{let n=e.indexOf(t);n>-1&&e.splice(n,1)},l=Object.prototype.hasOwnProperty,u=(e,t)=>l.call(e,t),d=Array.isArray,f=e=>x(e)===`[object Map]`,p=e=>x(e)===`[object Set]`,m=e=>x(e)===`[object Date]`,h=e=>x(e)===`[object RegExp]`,g=e=>typeof e==`function`,_=e=>typeof e==`string`,v=e=>typeof e==`symbol`,y=e=>typeof e==`object`&&!!e,ee=e=>(y(e)||g(e))&&g(e.then)&&g(e.catch),b=Object.prototype.toString,x=e=>b.call(e),te=e=>x(e).slice(8,-1),S=e=>x(e)===`[object Object]`,C=e=>_(e)&&e!==`NaN`&&e[0]!==`-`&&``+parseInt(e,10)===e,w=e(`,key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted`),T=e(`bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo`),E=e=>{let t=Object.create(null);return(n=>t[n]||(t[n]=e(n)))},ne=/-\w/g,re=E(e=>e.replace(ne,e=>e.slice(1).toUpperCase())),ie=/\B([A-Z])/g,ae=E(e=>e.replace(ie,`-$1`).toLowerCase()),D=E(e=>e.charAt(0).toUpperCase()+e.slice(1)),oe=E(e=>e?`on${D(e)}`:``),O=(e,t)=>!Object.is(e,t),k=(e,...t)=>{for(let n=0;n<e.length;n++)e[n](...t)},A=(e,t,n,r=!1)=>{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:r,value:n})},j=e=>{let t=parseFloat(e);return isNaN(t)?e:t},M=e=>{let t=_(e)?Number(e):NaN;return isNaN(t)?e:t},N,P=()=>N||=typeof globalThis<`u`?globalThis:typeof self<`u`?self:typeof window<`u`?window:typeof global<`u`?global:{},F=e(`Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,console,Error,Symbol`),I=2;function L(e,t=0,n=e.length){if(t=Math.max(0,Math.min(t,e.length)),n=Math.max(0,Math.min(n,e.length)),t>n)return``;let r=e.split(/(\r?\n)/),i=r.filter((e,t)=>t%2==1);r=r.filter((e,t)=>t%2==0);let a=0,o=[];for(let e=0;e<r.length;e++)if(a+=r[e].length+(i[e]&&i[e].length||0),a>=t){for(let s=e-I;s<=e+I||n>a;s++){if(s<0||s>=r.length)continue;let c=s+1;o.push(`${c}${` `.repeat(Math.max(3-String(c).length,0))}| ${r[s]}`);let l=r[s].length,u=i[s]&&i[s].length||0;if(s===e){let e=t-(a-(l+u)),r=Math.max(1,n>a?l-e:n-t);o.push(` | `+` `.repeat(e)+`^`.repeat(r))}else if(s>e){if(n>a){let e=Math.max(Math.min(n-a,l),1);o.push(` | `+`^`.repeat(e))}a+=l+u}}break}return o.join(`
|
|
2
|
+
`)}function R(e){if(d(e)){let t={};for(let n=0;n<e.length;n++){let r=e[n],i=_(r)?H(r):R(r);if(i)for(let e in i)t[e]=i[e]}return t}if(_(e)||y(e))return e}var z=/;(?![^(]*\))/g,B=/:([^]+)/,V=/"(?:[^"\\]|\\[^])*"|'(?:[^'\\]|\\[^])*'|\\[^]|\/\*[^]*?\*\//g;function H(e){let t={};return e.replace(V,e=>e.startsWith(`/*`)?``:e).split(z).forEach(e=>{if(e){let n=e.split(B);n.length>1&&(t[n[0].trim()]=n[1].trim())}}),t}function U(e){let t=``;if(_(e))t=e;else if(d(e))for(let n=0;n<e.length;n++){let r=U(e[n]);r&&(t+=r+` `)}else if(y(e))for(let n in e)e[n]&&(t+=n+` `);return t.trim()}function se(e){if(!e)return null;let{class:t,style:n}=e;return t&&!_(t)&&(e.class=U(t)),n&&(e.style=R(n)),e}var W=`html,body,base,head,link,meta,style,title,address,article,aside,footer,header,hgroup,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,summary,template,blockquote,iframe,tfoot`,G=`svg,animate,animateMotion,animateTransform,circle,clipPath,color-profile,defs,desc,discard,ellipse,feBlend,feColorMatrix,feComponentTransfer,feComposite,feConvolveMatrix,feDiffuseLighting,feDisplacementMap,feDistantLight,feDropShadow,feFlood,feFuncA,feFuncB,feFuncG,feFuncR,feGaussianBlur,feImage,feMerge,feMergeNode,feMorphology,feOffset,fePointLight,feSpecularLighting,feSpotLight,feTile,feTurbulence,filter,foreignObject,g,hatch,hatchpath,image,line,linearGradient,marker,mask,mesh,meshgradient,meshpatch,meshrow,metadata,mpath,path,pattern,polygon,polyline,radialGradient,rect,set,solidcolor,stop,switch,symbol,text,textPath,title,tspan,unknown,use,view`,K=`annotation,annotation-xml,maction,maligngroup,malignmark,math,menclose,merror,mfenced,mfrac,mfraction,mglyph,mi,mlabeledtr,mlongdiv,mmultiscripts,mn,mo,mover,mpadded,mphantom,mprescripts,mroot,mrow,ms,mscarries,mscarry,msgroup,msline,mspace,msqrt,msrow,mstack,mstyle,msub,msubsup,msup,mtable,mtd,mtext,mtr,munder,munderover,none,semantics`,ce=`area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr`,le=e(W),ue=e(G),de=e(K),fe=e(ce),pe=e(`itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly`);function me(e){return!!e||e===``}function he(e,t,n){if(e.length!==t.length)return!1;let r=!0;for(let i=0;r&&i<e.length;i++)r=J(e[i],t[i],n);return r}function ge(e,t,n){if(e.size!==t.size)return!1;let r=Array.from(t),i=new Uint8Array(r.length);for(let t of e){let e=-1;for(let a=0;a<r.length;a++)if(!i[a]&&J(t,r[a],n)){e=a;break}if(e<0)return!1;i[e]=1}return!0}function _e(e,t,n){let r=f(e),i=f(t);if(r||i||(r=p(e),i=p(t),r||i))return r&&i?ge(e,t,n):!1;if(Object.keys(e).length!==Object.keys(t).length)return!1;for(let r in e){let i=e.hasOwnProperty(r),a=t.hasOwnProperty(r);if(i&&!a||!i&&a||!J(e[r],t[r],n))return!1}return String(e)===String(t)}function q(e,t,n,r){n||=[new Map,new Map];let[i,a]=n;if(i.has(e)||a.has(t))return i.get(e)===t&&a.get(t)===e;i.set(e,t),a.set(t,e);let o=r(e,t,n);return i.delete(e),a.delete(t),o}function J(e,t,n){if(e===t)return!0;let r=m(e),i=m(t);return r||i?r&&i?e.getTime()===t.getTime():!1:(r=v(e),i=v(t),r||i?e===t:(r=d(e),i=d(t),r||i?r&&i?q(e,t,n,he):!1:(r=y(e),i=y(t),r||i?!r||!i?!1:q(e,t,n,_e):String(e)===String(t))))}function Y(e,t){return e.findIndex(e=>J(e,t))}var X=e=>!!(e&&e.__v_isRef===!0),Z=e=>_(e)?e:e==null?``:d(e)||y(e)&&(e.toString===b||!g(e.toString))?X(e)?Z(e.value):JSON.stringify(e,Q,2):String(e),Q=(e,t)=>X(t)?Q(e,t.value):f(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((e,[t,n],r)=>(e[$(t,r)+` =>`]=n,e),{})}:p(t)?{[`Set(${t.size})`]:[...t.values()].map(e=>$(e))}:v(t)?$(t):y(t)&&!d(t)&&!S(t)?String(t):t,$=(e,t=``)=>v(e)?`Symbol(${e.description??t})`:e;function ve(e){return e==null?`initial`:typeof e==`string`?e===``?` `:e:String(e)}export{w as A,e as B,de as C,S as D,a as E,v as F,H as G,ve as H,fe as I,oe as J,c as K,J as L,p as M,pe as N,ee as O,_ as P,Y as R,f as S,y as T,se as U,U as V,R as W,te as X,M as Y,T as _,re as a,le as b,s as c,O as d,u as f,d as g,k as h,r as i,ue as j,h as k,L as l,me as m,t as n,D as o,ae as p,Z as q,i as r,A as s,n as t,P as u,g as v,o as w,C as x,F as y,j as z};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.ui-heading[data-v-b744cfa3]{margin:0 0 var(--sp-3);font-size:var(--fs-md);font-weight:500}.small[data-v-b744cfa3]{font-size:var(--fs-sm)}.large[data-v-b744cfa3]{font-size:var(--fs-lg)}.semibold[data-v-b744cfa3]{font-weight:600}.secondary[data-v-b744cfa3]{color:var(--text-2)}.danger[data-v-e3d75622]{color:var(--err)}.muted[data-v-e3d75622]{color:var(--muted)}.note[data-v-e3d75622]{padding:var(--sp-2) var(--sp-3);font-size:var(--fs-xs);margin:0}.padded[data-v-e3d75622]{padding:var(--ui-message-padding,var(--sp-3))}.size-2xs[data-v-e3d75622]{font-size:var(--fs-2xs)}.size-xs[data-v-e3d75622]{font-size:var(--fs-xs)}.size-sm[data-v-e3d75622]{font-size:var(--fs-sm)}.flush[data-v-e3d75622]{margin:0}.wrap[data-v-e3d75622]{white-space:pre-wrap;overflow-wrap:anywhere}.ui-control-mono[data-v-cf3d980a]{font-family:var(--mono)}.ui-control-inset[data-v-cf3d980a]:is(input,select,textarea){font-size:var(--fs-xs);color:var(--text);background:var(--bg-sunken);border:1px solid var(--line);border-radius:var(--r-sm);padding:3px 8px}.ui-control-filled[data-v-cf3d980a]{background:var(--bg-2);border:1px solid var(--line);color:var(--text);border-radius:var(--r-sm);padding:var(--sp-2);padding-right:var(--ui-control-padding-right,var(--sp-2));min-width:0}.ui-control-grow[data-v-cf3d980a]{flex:1;min-width:0}.ui-control-swatch[data-v-cf3d980a]:is(input[type=color]){width:28px;height:var(--ui-control-swatch-height,26px);cursor:pointer;background:0 0;padding:2px}.ui-control-swatch-compact[data-v-cf3d980a]{--ui-control-swatch-height:24px}.ui-control-inline-select[data-v-cf3d980a]{width:auto;padding-block:var(--sp-1)}.ui-inline[data-v-7884340d]{gap:var(--inline-gap);display:flex}.ui-inline.inline[data-v-7884340d]{display:inline-flex}.hint[data-v-960e17d6]{color:var(--muted);font-size:var(--ui-hint-font-size,var(--fs-2xs));line-height:var(--lh);margin:0}.wrap[data-v-960e17d6]{overflow-wrap:anywhere}.ui-status-dot[data-v-69b117d7]{width:var(--ui-status-dot-size);height:var(--ui-status-dot-size);border-radius:var(--r-full)}.fixed[data-v-69b117d7]{flex-shrink:0}.inline[data-v-69b117d7]{display:inline-block}.circle[data-v-69b117d7]{border-radius:50%}.success[data-v-69b117d7]{background:var(--run)}.danger[data-v-69b117d7]{background:var(--err)}.warning[data-v-69b117d7]{background:var(--warn)}.muted[data-v-69b117d7]{background:var(--muted)}.faint[data-v-69b117d7]{background:var(--faint)}.ui-frame[data-v-3bebe9b9]{padding:var(--sp-3);border:1px solid var(--line);border-radius:var(--r-md)}.ui-card[data-v-3bebe9b9]{gap:var(--sp-2);padding:var(--sp-3);border:1px solid var(--line-strong);border-radius:var(--r-lg);background:var(--bg-2);font-size:var(--fs-2xs);display:grid}.neutral[data-v-3bebe9b9]{color:var(--muted)}.compact[data-v-3bebe9b9]{padding:var(--sp-2) var(--sp-3)}.notice[data-v-3bebe9b9]{padding:10px 12px}.warning[data-v-3bebe9b9]{border-color:color-mix(in srgb, var(--warn) 40%, var(--bg-2));background:color-mix(in srgb, var(--warn) 8%, var(--bg-2))}.danger[data-v-3bebe9b9]{border-color:color-mix(in srgb, var(--err) 48%, var(--bg-2));background:color-mix(in srgb, var(--err) 8%, var(--bg-2))}.field[data-v-8be752df]{gap:6px;display:grid}.field-label[data-v-8be752df]{color:var(--muted);font-size:var(--fs-2xs);letter-spacing:var(--track-label);text-transform:uppercase}.plain[data-v-8be752df]{gap:var(--sp-2);min-width:0;color:var(--muted)}.field-hint[data-v-8be752df],.field-error[data-v-8be752df]{font-size:var(--fs-2xs);line-height:var(--lh);overflow-wrap:anywhere}.field-hint[data-v-8be752df]{color:var(--muted)}.field-error[data-v-8be752df]{color:var(--err)}.token[data-v-4571a4a7]{gap:var(--sp-2);display:grid}.hub[data-v-838a0fc6]{min-height:100dvh;padding:var(--sp-5);background:var(--bg);place-items:center;display:grid}.content[data-v-838a0fc6]{gap:var(--sp-5);width:min(100%,440px);display:grid}.brand[data-v-838a0fc6]{align-items:center;gap:var(--sp-3);color:var(--text);font-size:var(--fs-lg);font-weight:600;display:flex}.hub-label[data-v-838a0fc6]{margin-left:var(--sp-2);color:var(--muted);font-weight:400}.panel[data-v-838a0fc6]{gap:var(--sp-4);padding:var(--sp-5);color:var(--text)}.login[data-v-838a0fc6]{gap:var(--sp-4);display:grid}.devices[data-v-838a0fc6]{gap:var(--sp-2);display:grid}.device[data-v-838a0fc6]{justify-content:flex-start;gap:var(--sp-3);min-height:48px}.device-state[data-v-838a0fc6]{font-size:var(--fs-2xs);color:var(--muted);margin-left:auto}.empty[data-v-838a0fc6]{padding:var(--sp-3) 0}.footer[data-v-838a0fc6]{text-align:center}.settings[data-v-7570af78],.form[data-v-7570af78]{gap:var(--sp-4);display:grid}.form[data-v-7570af78]{max-width:480px}.hub-nav[data-v-af20bd01]{flex-shrink:0}:root{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg:#10100f;--bg-2:#171716;--bg-3:#20201c;--bg-4:#2a2a26;--bg-sunken:#0c0c0b;--canvas:#080807;--line:#2c2c28;--line-strong:#46463f;--text:#ecece6;--text-2:#c9c9bf;--muted:#9a9a92;--faint:#80807a;--focus:#d8d2c4;--accent:#b8ab77;--run:#8fbf8a;--err:#d19585;--warn:#c4b386;--info:#7fb0d6;--search:#5c4a1e;--hover:color-mix(in srgb, var(--text) 5%, transparent);--active:color-mix(in srgb, var(--text) 9%, transparent);--selection:#3a3934;--overlay:#0009;--shadow-popover:0 12px 32px #0008;--shadow-modal:0 18px 60px #0009;--sans:"Noto Sans", "DejaVu Sans", "Liberation Sans", system-ui, sans-serif;--mono:"Noto Sans Mono", "DejaVu Sans Mono", ui-monospace, monospace;--fs-2xs:11px;--fs-xs:12px;--fs-sm:13px;--fs-md:15px;--fs-lg:20px;--fs-xl:28px;--lh:1.45;--track-label:.08em;--r-sm:3px;--r-md:6px;--r-lg:10px;--island-gap:var(--sp-2);--r-full:999px;--sp-1:4px;--sp-2:8px;--sp-3:12px;--sp-4:16px;--sp-5:24px;--sp-6:32px;--control-h:32px;--control-h-sm:28px;--t-fast:.12s ease;--t-base:.18s ease;--z-sticky:10;--z-expanded:30;--z-popover:100}[data-theme=light]{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--bg:#f7f6f1;--bg-2:#efeee8;--bg-3:#e5e3db;--bg-4:#d9d6cb;--bg-sunken:#fbfaf7;--canvas:#eceae3;--line:#d9d6cc;--line-strong:#b6b2a6;--text:#1d1d1a;--text-2:#38382f;--muted:#5e5e56;--faint:#64645b;--focus:#6d5f2c;--accent:#6f5d24;--run:#2f6b34;--err:#a33b2c;--warn:#795812;--info:#276b93;--search:#f2dfa0;--selection:#cfcabc;--overlay:#0006;--shadow-popover:0 12px 32px #0000001f;--shadow-modal:0 18px 60px #0000002e}[data-theme=contrast]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg:#000;--bg-2:#080808;--bg-3:#121212;--bg-4:#1e1e1e;--bg-sunken:#000;--canvas:#000;--line:#3d3d3d;--line-strong:#7a7a7a;--text:#fff;--text-2:#ededed;--muted:#c2c2c2;--faint:#a8a8a8;--focus:#ffd45c;--accent:#ffd45c;--run:#7dff9b;--err:#ff9b8a;--warn:#ffd166;--info:#8fd8ff;--search:#4a3a00;--selection:#3d3d3d;--overlay:#000000d9;--shadow-popover:0 12px 32px #000c;--shadow-modal:0 18px 60px #000000e6}*{box-sizing:border-box}html,body,#app{min-height:100%}body{background:var(--bg);color:var(--text);font-family:var(--sans);font-size:var(--fs-md);line-height:var(--lh);margin:0}button,input,textarea,select{font:inherit;color:inherit}a{color:inherit;text-decoration:none}button{cursor:pointer;background:0 0;border:0;padding:0}button:disabled{cursor:default}input,textarea,select{border:1px solid var(--line);border-radius:var(--r-sm);width:100%;padding:var(--sp-2) 10px;transition:border-color var(--t-fast);background:0 0;outline:none}input:hover:not(:disabled,:focus),textarea:hover:not(:disabled,:focus),select:hover:not(:disabled,:focus){border-color:var(--line-strong)}input:focus,textarea:focus,select:focus{border-color:var(--focus)}input::placeholder,textarea::placeholder{color:var(--faint)}input[type=checkbox],input[type=radio],input[type=range],input[type=color]{width:auto;accent-color:var(--focus);padding:0}textarea{resize:vertical;min-height:72px}select{appearance:none;background:linear-gradient(45deg, transparent 50%, var(--muted) 50%) right 14px center / 5px 5px no-repeat, linear-gradient(-45deg, transparent 50%, var(--muted) 50%) right 9px center / 5px 5px no-repeat;padding-right:28px}select option{background:var(--bg-2)}:focus-visible{outline:2px solid var(--focus);outline-offset:1px}input:focus-visible,textarea:focus-visible,select:focus-visible{outline-offset:0}::selection{background:var(--selection)}*{scrollbar-color:var(--bg-4) transparent}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important}}@media (width<=700px),(width<=1050px) and (height<=500px) and (pointer:coarse){:root{--fs-input:16px;--control-h:44px;--control-h-sm:40px}input:not([type=checkbox],[type=radio],[type=range],[type=color]),textarea:not(.xterm-helper-textarea),select{min-height:var(--control-h);font-size:var(--fs-input)}}.u-truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.u-sr-only{clip-path:inset(50%);width:1px;height:1px;position:absolute;overflow:hidden}body .mobile-sheet.mobile-sheet{inset:auto var(--island-gap) max(var(--island-gap), env(safe-area-inset-bottom));overscroll-behavior:contain;border-radius:calc(var(--r-lg) + 4px);width:auto;max-width:none;max-height:min(72dvh,560px);box-shadow:0 0 0 100vmax var(--sheet-scrim,var(--overlay)), var(--shadow-popover);animation:sheet-up var(--t-base);position:fixed;overflow-y:auto}@keyframes sheet-up{0%{opacity:0;transform:translateY(24px)}}.note.error{color:var(--err)}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{V as e,W as t,q as n}from"./shared.esm-bundler-DoSbGLUP.js";import{A as r,D as i,Ft as a,Jt as o,O as s,R as c,Sn as l,St as u,Tt as d,V as f,Xt as p,Y as m,_ as h,at as g,b as _,ht as v,kn as y,lt as ee,nt as b,s as x,t as S,tt as C,v as w,x as T,xt as te,y as E,yn as D}from"./_plugin-vue_export-helper-D62Ebo7D.js";import{E as ne,b as O,n as k,t as A}from"./UiButton-DvucBdmd.js";(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),t.credentials=e.crossOrigin===`use-credentials`?`include`:e.crossOrigin===`anonymous`?`omit`:`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var j=S(r({__name:`UiHeading`,props:{as:{},size:{},spaceAfter:{},spaceBefore:{},weight:{},tone:{}},setup(n){return(r,i)=>(v(),E(d(n.as??`h2`),{class:e([`ui-heading`,{small:n.size===`sm`,large:n.size===`lg`,semibold:n.weight===`semibold`,secondary:n.tone===`secondary`}]),style:t(n.spaceAfter===void 0&&n.spaceBefore===void 0?void 0:{marginBottom:n.spaceAfter===void 0?void 0:n.spaceAfter===0?`0`:`var(--sp-${n.spaceAfter})`,marginTop:n.spaceBefore===void 0?void 0:n.spaceBefore===0?`0`:`var(--sp-${n.spaceBefore})`})},{default:o(()=>[u(r.$slots,`default`,{},void 0,!0)]),_:3},8,[`class`,`style`]))}}),[[`__scopeId`,`data-v-b744cfa3`]]),M=S(r({__name:`UiMessage`,props:{as:{},tone:{},variant:{},size:{},padding:{},flush:{type:Boolean},wrap:{type:Boolean}},setup(n){return(r,i)=>(v(),E(d(n.as??`p`),{class:e([`message`,[n.tone,n.variant,n.size?`size-${n.size}`:void 0,{flush:n.flush,wrap:n.wrap}]]),style:t(n.padding===void 0?void 0:{"--ui-message-padding":`var(--sp-${n.padding})`})},{default:o(()=>[u(r.$slots,`default`,{},void 0,!0)]),_:3},8,[`style`,`class`]))}}),[[`__scopeId`,`data-v-e3d75622`]]),N=Symbol(`ui-control-scope`),P=r({props:{as:{type:String,default:`input`},modelValue:null,value:null,modelModifiers:{type:Object,default:()=>({})},mono:Boolean,grow:Boolean,appearance:String,swatchSize:String},emits:[`update:modelValue`],setup(e,{attrs:t,emit:n,slots:r,expose:i}){let a=m(N,void 0),o=c(),s=l(),u=()=>Object.hasOwn(o.vnode.props??{},`modelValue`)||Object.hasOwn(o.vnode.props??{},`model-value`),d=!1,h={deep:!0,created(...e){d=!1,u()&&(O.created?.(...e),d=!0)},mounted(...e){u()&&O.mounted?.(...e)},beforeUpdate(...e){u()&&(d||=(O.created?.(e[0],e[1],e[2],null),!0),O.beforeUpdate?.(...e))},updated(...e){u()&&O.updated?.(...e)}};return i({get element(){return s.value},focus(e){s.value?.focus(e)},select(){let e=s.value;(e instanceof HTMLInputElement||e instanceof HTMLTextAreaElement)&&e.select()}}),()=>p(f(e.as,{ref:s,...e.value===void 0?{}:{value:e.value},class:{"ui-control-mono":e.mono,"ui-control-grow":e.grow,"ui-control-inset":e.appearance===`inset`,"ui-control-filled":e.appearance===`filled`,"ui-control-swatch":e.appearance===`swatch`&&t.type===`color`,"ui-control-swatch-compact":e.swatchSize===`sm`,"ui-control-inline-select":e.appearance===`inline-select`&&e.as===`select`},style:e.as!==`textarea`&&![`checkbox`,`radio`].includes(String(t.type))?a?.value:void 0,"onUpdate:modelValue":e=>{u()&&n(`update:modelValue`,e)}},r.default?.()),[[h,e.modelValue,void 0,e.modelModifiers]])}}),F=S(P,[[`__scopeId`,`data-v-cf3d980a`]]),I=S(r({__name:`UiInline`,props:{as:{},gap:{},inline:{type:Boolean},align:{},justify:{},wrap:{type:Boolean}},setup(n){return(r,i)=>(v(),E(d(n.as??`div`),{class:e([`ui-inline`,{inline:n.inline}]),style:t({"--inline-gap":n.gap===`none`?`normal`:n.gap&&!Number.isInteger(n.gap)?`${n.gap*4}px`:`var(--sp-${n.gap??2})`,alignItems:n.align??`center`,justifyContent:n.justify===`between`?`space-between`:n.justify??`start`,flexWrap:n.wrap?`wrap`:`nowrap`})},{default:o(()=>[u(r.$slots,`default`,{},void 0,!0)]),_:3},8,[`class`,`style`]))}}),[[`__scopeId`,`data-v-7884340d`]]),L=S(r({__name:`UiHint`,props:{size:{},spaceAfter:{},spaceBefore:{},leading:{},wrap:{type:Boolean}},setup(n){return(r,i)=>(v(),T(`p`,{class:e([`hint`,{wrap:n.wrap}]),style:t({fontSize:n.size?`var(--fs-${n.size})`:void 0,marginTop:n.spaceBefore?`var(--sp-${n.spaceBefore})`:void 0,lineHeight:n.leading===`inherit`?`inherit`:void 0,marginBottom:n.spaceAfter?`var(--sp-${n.spaceAfter})`:void 0})},[u(r.$slots,`default`,{},void 0,!0)],6))}}),[[`__scopeId`,`data-v-960e17d6`]]),R=[{id:`dark`,title:`Тёмная`,description:`Спокойная тёплая тёмная схема Projector.`},{id:`light`,title:`Светлая`,description:`Тёплая светлая схема для яркого окружения.`},{id:`contrast`,title:`Высокий контраст`,description:`Чёрный фон и яркие акценты для максимальной читаемости.`},{id:`auto`,title:`Как в системе`,description:`Следует за светлой или тёмной темой операционной системы.`}],z=`dark`;function B(e){return R.some(t=>t.id===e)}function V(e,t){return e===`auto`?t?`light`:`dark`:e}function re(e){return e===`light`?`light`:`dark`}var ie=l(z),H,U=!1;function ae(){let e=document.documentElement.dataset.appearance;return B(e)?e:z}function oe(e){document.querySelector(`meta[name="color-scheme"]`)?.setAttribute(`content`,re(e));let t=getComputedStyle(document.documentElement).getPropertyValue(`--bg-2`).trim();t&&document.querySelector(`meta[name="theme-color"]`)?.setAttribute(`content`,t)}function W(e){ie.value=e;let t=V(e,H?.matches??!1),n=document.documentElement;return n.dataset.appearance=e,n.dataset.theme=t,oe(t),t}function se(){U||(U=!0,W(ae()),H=window.matchMedia(`(prefers-color-scheme: light)`),H.addEventListener(`change`,()=>{ie.value===`auto`&&W(`auto`)}))}function G(e={}){let t=D(!1),n=e.busy??D(!1),r=e.error??D(``),i=e.status??D(``);async function a(e,i){r.value=``,n.value=!0;try{return await e(),t.value=!0,!0}catch(e){return r.value=e instanceof Error?e.message:i,!1}finally{n.value=!1}}async function o(e,t){n.value=!0,r.value=``,i.value=``;try{let n=await e();return i.value=typeof t.success==`function`?t.success(n):t.success??(typeof n==`string`?n:``),n}catch(e){t.rollback?.(),r.value=e instanceof Error?e.message:t.errorFallback;return}finally{n.value=!1}}function s(e){return o(e,{errorFallback:`Не удалось выполнить`})}return{ready:t,busy:n,error:r,status:i,load:a,perform:o,run:s}}var K=S(r({__name:`UiStatusDot`,props:{as:{},size:{},tone:{},inline:{type:Boolean},shrink:{type:Boolean},radius:{}},setup(n){return(r,i)=>(v(),E(d(n.as??`span`),{class:e([`ui-status-dot`,[n.tone,{inline:n.inline,fixed:!n.shrink,circle:n.radius===`circle`}]]),style:t({"--ui-status-dot-size":`${n.size??7}px`})},null,8,[`class`,`style`]))}}),[[`__scopeId`,`data-v-69b117d7`]]),q=Symbol(`ide-commands`);function J(e,t){let n=m(q);if(!n)throw Error(`IDE command host is not installed`);let r=n.createScope(e,t);g(()=>r.dispose());function i(e,t){r.activate(),r.executeCommand(e,t).catch(n.reportError)}function a(e){if(e.defaultPrevented)return;let t=e.target,n=t instanceof Element&&!!t.closest(`input,textarea,select,[contenteditable="true"]`),a=r.resolveKeybinding(e,n);a&&(e.preventDefault(),e.stopPropagation(),i(a.command,a.args))}function o(e,t,a={}){n.revision.value;let o=r.describe(e,t);if(!o)throw Error(`Unknown menu command: ${e}`);return{id:e,label:a.label??o.title,shortcut:o.shortcut,disabled:!o.enabled,separator:a.separator,danger:a.danger,command:e,args:t,run:()=>i(e,t)}}return{scope:r,run:i,keydown:a,item:o}}function Y(e){if(e===void 0)return{};if(!e||typeof e!=`object`||Array.isArray(e))throw Error(`Аргументы команды должны быть объектом`);return e}function ce(e){let t=[];return g(()=>t.forEach(e=>e())),(n,r,i,a,o,s)=>{t.push(e.registerCommand({id:n,title:r,description:i,arguments:o,run:a,enabled:s}))}}function le(e,t){let n=e[t];if(n!==void 0&&typeof n!=`string`)throw Error(`${t} должен быть строкой`);return n}function X(e=globalThis.location?.pathname??``){return/^\/devices\/[a-z0-9][a-z0-9-]{0,62}(?:\/|$)/.exec(e)?.[0].replace(/\/$/,``)??``}function ue(){let e=X();return e?`/api${e}`:``}function de(e){let t=String(e),n=ue();if(!n)return t;if(t.startsWith(`/api/`)&&!t.startsWith(`/api/devices/`)&&!t.startsWith(`/api/hub/`))return n+t.slice(4);try{let e=new URL(t);if(e.host===location.host&&[`http:`,`https:`,`ws:`,`wss:`].includes(e.protocol))return e.pathname=de(e.pathname),e.href}catch{}return t}function fe(e){if(e.includes(`.tabs.`)){let t=e.split(`.`).at(-1);return{description:`Действие над вкладками области. Без id используется текущая вкладка. Закрытие несохранённого файла может запросить подтверждение.`,arguments:t===`reorder`?{ids:`string[]: все идентификаторы вкладок без повторений в новом порядке`}:t===`rename`?{id:`string (необязательно): идентификатор вкладки`,label:`string (необязательно): новое имя; без label откроется ввод имени`}:{id:`string (необязательно): идентификатор вкладки`}}}if(e.startsWith(`ide.workbench.panel.`))return{description:`Действие над блоком вкладки: разделить вправо или вниз, скрыть блок. Без id используется активная вкладка блока с фокусом. Разделить можно блок минимум с двумя вкладками.`,arguments:{id:`string (необязательно): идентификатор вкладки`}};if(e.startsWith(`ide.fileTree.`)){let t={path:`string (необязательно): путь относительно корня проекта; без него текущая запись дерева`};return t.kind=`string (необязательно): directory для действий над папкой; иначе file`,/\.(create|duplicate|rename|paste)$/.test(e)&&(t.directory=`string (необязательно): каталог назначения относительно корня`),/\.(create|duplicate|rename)$/.test(e)&&(t.name=`string (необязательно): имя записи; без него откроется диалог`),e.endsWith(`.delete`)&&(t.confirm=`boolean: true только при явном запросе пользователя на удаление; иначе диалог подтверждения`),{description:`Действие в дереве файлов текущего проекта. Явный path не зависит от выбранной строки. Файловые операции возвращают source/destination; открытие файла или диалога возвращает после передачи действия UI.`,arguments:/\.(refresh|collapseAll|contextMenu)$/.test(e)?{}:t}}return e.startsWith(`ide.git.`)?{description:`Действие Git в текущем проекте. stage/unstage/discard: path файла, префикс папки или пустая строка для всей группы. discard (в т.ч. для папки) восстанавливает рабочий файл из индекса; untracked переносит в корзину.`,arguments:e.endsWith(`.refresh`)?{}:{path:`string: путь относительно проекта`,staged:`boolean (необязательно): true для индекса, false для рабочей версии`,...e.endsWith(`.discard`)?{confirm:`boolean: true только при явном запросе пользователя на откат; иначе подтверждение`}:{}}}:e.startsWith(`ide.editor.file.`)?{description:`Действие над уже открытым файлом. Без id используется активный файл. file.open открывает рабочую версию активного сравнения.`,arguments:{id:`string (необязательно): идентификатор открытой вкладки`}}:e===`ide.keybindings.save`?{description:`Сохранить сочетание, записанное в открытом диалоге редактора клавиш. Требуется запись с клавиатуры.`,arguments:{}}:e.startsWith(`ide.keybindings.`)?{description:`Действие над видимой строкой редактора клавиш.`,arguments:{command:`string: ID команды строки`,index:`number: индекс её привязки`}}:{description:`Действие в указанной области Projector; использует её текущий UI-контекст.`,arguments:{}}}var pe={Space:` `,Minus:`-`,Equal:`=`,BracketLeft:`[`,BracketRight:`]`,Backslash:`\\`,Semicolon:`;`,Quote:`'`,Backquote:"`",Comma:`,`,Period:`.`,Slash:`/`,IntlBackslash:`\\`};function me(e){let t=e.code??``;return/^Key[A-Z]$/.test(t)?t.slice(3).toLowerCase():/^Digit[0-9]$/.test(t)?t.slice(5):pe[t]??e.key}function he(e,t){return!e||Object.entries(e).every(([e,n])=>t[e]===n)}function ge(e,t){let n=e.toLowerCase().split(`+`),r=n.pop(),i=me(t),a=n.includes(`mod`);return(r===i.toLowerCase()||r===`space`&&i===` `)&&(a?!!(t.ctrlKey||t.metaKey):!!t.ctrlKey===n.includes(`ctrl`))&&(a?!(t.ctrlKey&&t.metaKey):!!t.metaKey===n.includes(`meta`))&&!!t.altKey===n.includes(`alt`)&&!!t.shiftKey===n.includes(`shift`)}function _e(e){if(!Array.isArray(e)||e.length>500)throw Error(`Ожидается список до 500 привязок`);return e.map(e=>{if(!e||typeof e!=`object`||typeof e.command!=`string`||!e.command.trim()||typeof e.key!=`string`||!e.key.trim())throw Error(`Укажите command и key для каждой привязки`);let t=e.key.split(`+`);if(!t.at(-1)||t.slice(0,-1).some(e=>![`mod`,`ctrl`,`meta`,`alt`,`shift`].includes(e.toLowerCase()))||new Set(t.map(e=>e.toLowerCase())).size!==t.length||t.some(e=>e.toLowerCase()===`mod`)&&t.some(e=>[`ctrl`,`meta`].includes(e.toLowerCase())))throw Error(`Некорректная клавиша: ${e.key}`);if(e.when!==void 0&&(!e.when||Array.isArray(e.when)||typeof e.when!=`object`||Object.values(e.when).some(e=>e!==null&&![`string`,`boolean`,`number`].includes(typeof e))))throw Error(`when должен содержать значения ключей контекста`);for(let t of[`disabled`,`allowInput`])if(e[t]!==void 0&&typeof e[t]!=`boolean`)throw Error(`${t} должен быть boolean`);return{key:e.key,command:e.command,...e.when===void 0?{}:{when:{...e.when}},...e.args===void 0?{}:{args:e.args},...e.disabled===void 0?{}:{disabled:e.disabled},...e.allowInput===void 0?{}:{allowInput:e.allowInput}}})}function ve(e=[]){let t=new Map,n=new Set,r=[],i=``,a=()=>{for(let e of n)e()},o=()=>[...e.filter(e=>!r.some(t=>t.command===e.command)),...r].filter(e=>!e.disabled);function s(e,n,r){let i=t.get(e),a=i?.commands.get(n);if(i&&a)return{id:n,title:a.title,description:a.description??fe(n).description,arguments:{...a.arguments??fe(n).arguments},...a.palette===!1?{palette:!1}:{},scope:e,enabled:a.enabled?.(r)??!0,shortcut:o().findLast(e=>e.command===n&&he(e.when,i.context()))?.key.replace(/Mod/g,`Ctrl`)}}async function c(e,n,r={}){let a=r.scope??i,o=t.get(a)?.commands.get(e);if(!o)throw Error(`Команда ${e} не зарегистрирована в области ${a||`(нет активной области)`}`);if(r.signal?.aborted){let e=Error(`Выполнение отменено`);throw e.name=`AbortError`,e}if(!s(a,e,n)?.enabled)throw Error(`Команда ${e} сейчас недоступна`);return await o.run(n,{signal:r.signal})}function l(e,n){if(t.has(e))throw Error(`Область команд ${e} уже зарегистрирована`);let r={context:n,commands:new Map};return t.set(e,r),a(),{id:e,activate(){i=e},registerCommand(e){if(r.commands.has(e.id))throw Error(`Команда ${e.id} уже зарегистрирована`);return r.commands.set(e.id,e),a(),()=>{r.commands.get(e.id)===e&&(r.commands.delete(e.id),a())}},describe:(t,n)=>s(e,t,n),executeCommand:(t,n,r={})=>c(t,n,{...r,scope:e}),resolveKeybinding(t,r=!1){if(t.isComposing||t.repeat)return;let i={...n(),inputFocus:r};return o().findLast(n=>(n.allowInput||!r)&&ge(n.key,t)&&he(n.when,i)&&s(e,n.command,n.args)?.enabled)},dispose(){t.get(e)===r&&(t.delete(e),i===e&&(i=``),a())}}}return{createScope:l,describeCommand:s,executeCommand:c,getCommands:()=>[...t.keys()].flatMap(e=>[...t.get(e).commands.keys()].map(t=>s(e,t))),getActiveScope:()=>i,getScopes:()=>[...t.entries()].map(([e,t])=>({id:e,context:t.context()})),getKeybindings:()=>structuredClone(o()),getDefaultKeybindings:()=>structuredClone(e),getKeybindingOverrides:()=>structuredClone(r),setKeybindings(e){r=_e(e),a()},subscribe(e){return n.add(e),()=>{n.delete(e)}}}}var Z={surface:`fileTree`},ye=[{key:`Mod+Shift+P`,command:`ide.workbench.commandPalette.open`,allowInput:!0},{key:`F1`,command:`ide.workbench.commandPalette.open`,allowInput:!0},{key:`F2`,command:`ide.fileTree.file.rename`,when:{...Z,entryKind:`file`}},{key:`F2`,command:`ide.fileTree.directory.rename`,when:{...Z,entryKind:`directory`}},{key:`Delete`,command:`ide.fileTree.entry.delete`,when:Z},{key:`Mod+C`,command:`ide.fileTree.entry.copy`,when:Z},{key:`Mod+X`,command:`ide.fileTree.entry.cut`,when:Z},{key:`Mod+V`,command:`ide.fileTree.entry.paste`,when:Z},{key:`Enter`,command:`ide.fileTree.file.open`,when:{...Z,entryKind:`file`}},{key:`Enter`,command:`ide.fileTree.directory.toggle`,when:{...Z,entryKind:`directory`}},{key:`Shift+F10`,command:`ide.fileTree.contextMenu`,when:Z},{key:`ContextMenu`,command:`ide.fileTree.contextMenu`,when:Z},{key:`ArrowRight`,command:`ide.workbench.tabs.next`},{key:`ArrowLeft`,command:`ide.workbench.tabs.previous`},{key:`Home`,command:`ide.workbench.tabs.first`},{key:`End`,command:`ide.workbench.tabs.last`},{key:`Shift+F10`,command:`ide.workbench.tabs.contextMenu`},{key:`ContextMenu`,command:`ide.workbench.tabs.contextMenu`},{key:`F2`,command:`ide.workbench.tabs.rename`},{key:`Alt+PageDown`,command:`ide.workbench.tab.next`},{key:`Alt+PageUp`,command:`ide.workbench.tab.previous`},{key:`Mod+S`,command:`ide.editor.file.save`,when:{surface:`editor`},allowInput:!0},{key:`Mod+Shift+L`,command:`ide.editor.selection.toChat`,when:{surface:`editor`},allowInput:!0},{key:`Mod+Shift+M`,command:`ide.editor.markdown.toggleSource`,when:{surface:`editor`},allowInput:!0}],be=new Set(`delete remove rm clear kill stop reset discard revert push pull commit stage unstage merge clone install uninstall password run exec start restart save import write create new rename move add set apply send input login logout shell prune build up down`.split(` `)),xe=new Set(`read result list get info search refresh describe status find more filter open toggle focus show copy recent diff log worktree`.split(` `));function Se(e){let t=e.split(/[.\-_]|(?<=[a-z])(?=[A-Z])/).map(e=>e.toLowerCase());return t.some(e=>xe.has(e))&&!t.some(e=>be.has(e))}var Ce=S(r({__name:`UiCard`,props:{as:{},appearance:{},tone:{},density:{}},setup(t){return(n,r)=>(v(),E(d(t.as??`section`),{class:e(t.appearance===`frame`?`ui-frame`:[`ui-card`,t.tone??`neutral`,t.density??`regular`])},{default:o(()=>[u(n.$slots,`default`,{},void 0,!0)]),_:3},8,[`class`]))}}),[[`__scopeId`,`data-v-3bebe9b9`]]),we=[`id`,`aria-hidden`],Te=[`id`,`aria-hidden`],Q=S(r({__name:`UiField`,props:{label:{},layout:{},as:{},for:{},hint:{},error:{},required:{type:Boolean},gap:{}},setup(r){let s=r,c=a(),l=h(()=>s.for??c),f=h(()=>s.as??(s.layout===`plain`?`label`:`div`)),p=h(()=>({id:l.value,required:s.required||void 0,"aria-invalid":s.error?!0:void 0,"aria-describedby":[s.hint&&`${c}-hint`,s.error&&`${c}-error`].filter(Boolean).join(` `)||void 0}));return(a,s)=>(v(),E(d(f.value),{class:e([`field`,r.layout??`caption`]),for:f.value===`label`?l.value:void 0,style:t(r.gap===void 0?void 0:{gap:`var(--sp-${r.gap})`})},{default:o(()=>[r.layout===`plain`?(v(),T(x,{key:0},[i(n(r.label),1)],64)):(v(),E(d(f.value===`label`?`span`:`label`),{key:1,class:`field-label`,for:f.value===`label`?void 0:l.value},{default:o(()=>[i(n(r.label),1)]),_:1},8,[`for`])),u(a.$slots,`default`,{control:p.value},void 0,!0),r.hint?(v(),T(`span`,{key:2,id:`${y(c)}-hint`,class:`field-hint`,"aria-hidden":f.value===`label`||void 0},n(r.hint),9,we)):_(``,!0),r.error?(v(),T(`span`,{key:3,id:`${y(c)}-error`,class:`field-error`,"aria-hidden":f.value===`label`||void 0},n(r.error),9,Te)):_(``,!0)]),_:3},8,[`class`,`for`,`style`]))}}),[[`__scopeId`,`data-v-8be752df`]]);function Ee(e){return typeof e==`string`&&/^[a-z0-9][a-z0-9-]{0,62}$/.test(e)}function De(e){if(typeof e!=`string`||!e.startsWith(`/devices/`)||e.includes(`\\`))return`/`;try{let t=new URL(e,`https://hub.invalid`);return t.origin!==`https://hub.invalid`||!/^\/devices\/[a-z0-9][a-z0-9-]{0,62}(?:\/|$)/.test(t.pathname)?`/`:t.pathname+t.search+t.hash}catch{return`/`}}async function $(e,t){let n=await fetch(e,{...t,cache:`no-store`}),r=await n.json();if(!n.ok)throw Error(r.error||`Ошибка Hub (${n.status})`);return r}async function Oe(){await $(`/api/hub/session`,{method:`DELETE`}),location.assign(`/login`)}var ke=S(r({__name:`HubToken`,setup(e){let t=D(``),r=D(!1),a=D(``),c=new AbortController,l,u=J(`hub-token`,()=>({surface:`hub`}));function d(){clearTimeout(l),t.value=``}return u.scope.registerCommand({id:`ide.hub.token.show`,title:`Показать токен подключения Hub`,description:`Запрашивает токен для подключения устройств после проверки сессии Hub и показывает его на 30 секунд.`,enabled:()=>!r.value&&!t.value,run:async()=>{r.value=!0,a.value=``;try{let e=await $(`/api/hub/device-token`,{method:`POST`,signal:c.signal});if(c.signal.aborted)return;t.value=e.token,l=setTimeout(d,3e4)}catch{c.signal.aborted||(a.value=`Не удалось показать токен. Проверьте вход в Hub и повторите попытку.`)}finally{r.value=!1}}}),u.scope.registerCommand({id:`ide.hub.token.hide`,title:`Скрыть токен подключения Hub`,description:`Очищает показанный токен подключения устройств.`,enabled:()=>!!t.value,run:d}),g(()=>{c.abort(),d()}),(e,c)=>(v(),T(`section`,{class:`token`,onFocusin:c[2]||=e=>y(u).scope.activate(),onPointerdown:c[3]||=e=>y(u).scope.activate(),onKeydown:c[4]||=(...e)=>y(u).keydown&&y(u).keydown(...e)},[t.value?(v(),E(Q,{key:0,label:`Токен подключения устройств`},{default:o(({control:e})=>[s(F,C(e,{value:t.value,readonly:``,mono:``,autocomplete:`off`,spellcheck:`false`}),null,16,[`value`])]),_:1})):_(``,!0),t.value?(v(),E(A,{key:1,size:`sm`,onClick:c[0]||=e=>y(u).run(`ide.hub.token.hide`)},{default:o(()=>[...c[5]||=[i(`Скрыть токен`,-1)]]),_:1})):(v(),E(A,{key:2,size:`sm`,busy:r.value,onClick:c[1]||=e=>y(u).run(`ide.hub.token.show`)},{default:o(()=>[...c[6]||=[i(`Показать токен подключения`,-1)]]),_:1},8,[`busy`])),s(L,null,{default:o(()=>[...c[7]||=[i(`Для добавления машины в настройках Hub локального Projector. Токен скроется через 30 секунд.`,-1)]]),_:1}),a.value?(v(),E(M,{key:3,tone:`danger`,role:`alert`},{default:o(()=>[i(n(a.value),1)]),_:1})):_(``,!0)],32))}}),[[`__scopeId`,`data-v-4571a4a7`]]),Ae={class:`content`},je={class:`devices`,"aria-label":`Устройства Hub`},Me={class:`device-state`},Ne=S(r({__name:`HubConsole`,setup(e){let t=D(!1),r=D(!0),a=D(!1),c=D(!1),l=D(``),u=D(``),d=D(),f=D([]),p,m=!1,h=De(new URLSearchParams(location.search).get(`next`)),S=J(`hub`,()=>({surface:`hub`,authenticated:t.value}));async function O(){if(!(c.value||m)){c.value=!0;try{let e=await $(`/api/hub/session`);if(m||(t.value=e.authenticated,!e.authenticated))return;let n=await $(`/api/hub/devices`);m||(f.value=n.devices,l.value=``)}catch(e){m||(l.value=e instanceof Error?e.message:`Hub недоступен`)}finally{c.value=!1}}}async function N(){if(!a.value&&u.value){a.value=!0,l.value=``;try{await $(`/api/hub/session`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({password:u.value})}),u.value=``,location.assign(h)}catch(e){l.value=e instanceof Error?e.message:`Не удалось войти`}finally{a.value=!1,l.value&&(await b(),d.value?.focus(),d.value?.select())}}}return S.scope.registerCommand({id:`ide.hub.login`,title:`Войти в Hub`,description:`Проверяет пароль и открывает устройства или страницу, с которой был запрошен вход.`,enabled:()=>!a.value&&!!u.value,run:N}),S.scope.registerCommand({id:`ide.hub.devices.refresh`,title:`Обновить устройства Hub`,description:`Перечитывает список устройств и состояние их подключений.`,enabled:()=>t.value&&!c.value,run:O}),S.scope.registerCommand({id:`ide.hub.device.open`,title:`Открыть устройство`,description:`Открывает Projector на подключённой машине в отдельном контексте страницы.`,arguments:{deviceId:`string: id подключённого устройства`},run:e=>{let{deviceId:t}=Y(e);if(!Ee(t)||!f.value.some(e=>e.id===t&&e.online))throw Error(`Устройство недоступно`);location.assign(`/devices/${t}/`)}}),S.scope.registerCommand({id:`ide.hub.logout`,title:`Выйти из Hub`,description:`Отзывает текущую сессию браузера и закрывает её соединения с устройствами. Задания и терминалы остаются на устройствах.`,run:async()=>{try{await Oe(),t.value=!1}catch{l.value=`Не удалось выйти. Повторите попытку.`}}}),ee(async()=>{await O(),!m&&(r.value=!1,t.value&&location.pathname===`/login`&&h!==`/`?location.replace(h):(await b(),d.value?.focus(),p=setInterval(()=>{t.value&&O()},5e3)))}),g(()=>{m=!0,clearInterval(p)}),(e,p)=>(v(),T(`main`,{class:`hub`,onFocusin:p[4]||=e=>y(S).scope.activate(),onPointerdown:p[5]||=e=>y(S).scope.activate(),onKeydown:p[6]||=(...e)=>y(S).keydown&&y(S).keydown(...e)},[w(`div`,Ae,[p[16]||=w(`header`,{class:`brand`},[w(`img`,{src:`/favicon.svg`,alt:``,width:`28`,height:`28`}),w(`span`,null,[i(`projector`),w(`span`,{class:`hub-label`},`hub`)])],-1),s(Ce,{class:`panel`},{default:o(()=>[r.value?(v(),E(k,{key:0,label:`Подключение к Hub`})):t.value?(v(),T(x,{key:2},[s(I,{justify:`between`},{default:o(()=>[s(j,{as:`h1`},{default:o(()=>[...p[10]||=[i(`Устройства`,-1)]]),_:1}),s(A,{size:`sm`,appearance:`quiet`,onClick:p[2]||=e=>y(S).run(`ide.hub.logout`)},{default:o(()=>[...p[11]||=[i(`Выйти`,-1)]]),_:1})]),_:1}),s(L,null,{default:o(()=>[...p[12]||=[i(`Выберите машину, с которой хотите работать.`,-1)]]),_:1}),l.value?(v(),E(M,{key:0,tone:`danger`,role:`alert`},{default:o(()=>[i(n(l.value),1)]),_:1})):_(``,!0),w(`div`,je,[(v(!0),T(x,null,te(f.value,e=>(v(),E(A,{key:e.id,class:`device`,disabled:!e.online,onClick:t=>y(S).run(`ide.hub.device.open`,{deviceId:e.id})},{default:o(()=>[s(K,{tone:e.online?`success`:`muted`},null,8,[`tone`]),w(`strong`,null,n(e.name),1),w(`span`,Me,n(e.online?`Подключено`:`Не в сети`),1)]),_:2},1032,[`disabled`,`onClick`]))),128)),f.value.length?_(``,!0):(v(),E(L,{key:0,class:`empty`},{default:o(()=>[...p[13]||=[i(`Нет подключённых устройств. Откройте настройки Hub в локальном Projector, чтобы подключить машину.`,-1)]]),_:1}))]),s(A,{size:`sm`,busy:c.value,onClick:p[3]||=e=>y(S).run(`ide.hub.devices.refresh`)},{default:o(()=>[...p[14]||=[i(`Обновить`,-1)]]),_:1},8,[`busy`]),s(ke)],64)):(v(),T(x,{key:1},[s(j,{as:`h1`,size:`lg`},{default:o(()=>[...p[7]||=[i(`Вход в Hub`,-1)]]),_:1}),s(L,null,{default:o(()=>[...p[8]||=[i(`Войдите, чтобы открыть Projector на подключённых устройствах.`,-1)]]),_:1}),w(`form`,{class:`login`,onSubmit:p[1]||=ne(e=>y(S).run(`ide.hub.login`),[`prevent`])},[s(Q,{label:`Пароль`,required:``},{default:o(({control:e})=>[s(F,C(e,{ref_key:`input`,ref:d,modelValue:u.value,"onUpdate:modelValue":p[0]||=e=>u.value=e,type:`password`,autocomplete:`current-password`,disabled:a.value}),null,16,[`modelValue`,`disabled`])]),_:1}),l.value?(v(),E(M,{key:0,tone:`danger`,role:`alert`},{default:o(()=>[i(n(l.value),1)]),_:1})):_(``,!0),s(A,{type:`submit`,appearance:`solid`,busy:a.value,disabled:!u.value},{default:o(()=>[...p[9]||=[i(`Войти`,-1)]]),_:1},8,[`busy`,`disabled`])],32)],64))]),_:1}),s(L,{class:`footer`},{default:o(()=>[...p[15]||=[i(`Ваши проекты и задания остаются на ваших устройствах.`,-1)]]),_:1})])],32))}}),[[`__scopeId`,`data-v-838a0fc6`]]),Pe=[`value`],Fe=S(r({__name:`HubSettings`,setup(e){let t=l(),r=D(``),a=D(``),c=D(``),u=D(``),d=!!X(),{ready:f,busy:p,error:m,status:b,load:S,perform:O}=G(),k=J(`hub-settings`,()=>({surface:`hub-settings`,online:t.value?.online??!1})),N,P=new AbortController,R=h(()=>!!a.value.trim()&&Ee(c.value)&&(!!u.value||t.value?.connections.some(e=>e.url===a.value.replace(/\/$/,``))));async function z(e=!1){let n=await $(`/api/hub`,{signal:P.signal});P.signal.aborted||(t.value=n,e&&B(n.url??n.connections[0]?.url??``))}function B(e){r.value=e;let n=t.value?.connections.find(t=>t.url===e);a.value=n?.url??``,c.value=n?.deviceId??``,u.value=``}async function V(e){await O(async()=>{t.value=await $(`/api/hub`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e),signal:P.signal}),r.value&&!t.value.connections.some(e=>e.url===r.value)&&B(``)},{errorFallback:`Не удалось изменить подключение Hub`})}async function re(){await O(async()=>{let e=await $(`/api/hub`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:`save`,url:a.value.trim(),deviceId:c.value,token:u.value}),signal:P.signal});P.signal.aborted||(t.value=e,B(new URL(a.value.trim()).origin),u.value=``)},{errorFallback:`Не удалось подключиться к Hub`,success:`Подключение сохранено`})}return k.scope.registerCommand({id:`ide.hub.connection.save`,title:`Сохранить Hub`,description:`Сохраняет адрес Hub, id устройства и токен. Для подключения выберите сохранённый Hub.`,enabled:()=>f.value&&!p.value&&!!R.value,run:re}),k.scope.registerCommand({id:`ide.hub.connection.select`,title:`Выбрать сохранённый Hub`,description:`Выбирает Hub для редактирования или очищает форму для нового подключения.`,arguments:{url:`string: адрес сохранённого Hub или пустая строка`},run:e=>{let{url:n}=Y(e);if(typeof n!=`string`||n&&!t.value?.connections.some(e=>e.url===n))throw Error(`Hub не найден`);B(n)}}),k.scope.registerCommand({id:`ide.hub.connection.activate`,title:`Подключить выбранный Hub`,description:`Отключает предыдущий туннель и подключает выбранный Hub, сохраняя терминалы и задания.`,enabled:()=>!p.value&&!!r.value&&t.value?.url!==r.value,run:()=>V({action:`activate`,url:r.value})}),k.scope.registerCommand({id:`ide.hub.connection.delete`,title:`Удалить сохранённый Hub`,description:`Удаляет выбранное подключение и его токен; активный туннель отключается.`,enabled:()=>!p.value&&!!r.value,run:()=>V({action:`delete`,url:r.value})}),k.scope.registerCommand({id:`ide.hub.connection.disconnect`,title:`Отключить Projector от Hub`,description:`Останавливает туннель, сохраняя Hub и токен для следующего подключения.`,enabled:()=>!p.value&&!!t.value?.enabled,run:()=>V({enabled:!1})}),k.scope.registerCommand({id:`ide.hub.open`,title:`Открыть Hub`,description:`Открывает интерфейс настроенного Hub в новой вкладке браузера.`,enabled:()=>!!r.value,run:()=>{r.value&&window.open(r.value,`_blank`,`noopener,noreferrer`)}}),ee(async()=>{d||(await S(()=>z(!0),`Не удалось загрузить подключение Hub`),P.signal.aborted||(N=setInterval(()=>{p.value||z().catch(()=>{})},3e3)))}),g(()=>{P.abort(),clearInterval(N)}),(e,l)=>(v(),T(`section`,{class:`settings`,onFocusin:l[9]||=e=>y(k).scope.activate(),onPointerdown:l[10]||=e=>y(k).scope.activate(),onKeydown:l[11]||=(...e)=>y(k).keydown&&y(k).keydown(...e)},[s(j,{as:`h2`,size:`sm`},{default:o(()=>[...l[12]||=[i(`Подключения к Hub`,-1)]]),_:1}),d?(v(),E(L,{key:0},{default:o(()=>[...l[13]||=[i(`Подключение управляется в локальном Projector на этой машине.`,-1)]]),_:1})):(v(),T(x,{key:1},[s(L,null,{default:o(()=>[...l[14]||=[i(`Hub даёт доступ к этой машине через общий веб-интерфейс. Локальный сервер остаётся доступным по своему адресу.`,-1)]]),_:1}),s(Q,{label:`Сохранённые хабы`,hint:`Одновременно активно только одно подключение.`},{default:o(({control:e})=>[s(F,C(e,{as:`select`,"model-value":r.value,disabled:!y(f)||y(p),"onUpdate:modelValue":l[0]||=e=>y(k).run(`ide.hub.connection.select`,{url:e})}),{default:o(()=>[l[15]||=w(`option`,{value:``},`Новый Hub`,-1),(v(!0),T(x,null,te(t.value?.connections,e=>(v(),T(`option`,{key:e.url,value:e.url},n(e.url)+n(t.value?.url===e.url?` · активен`:``),9,Pe))),128))]),_:1},16,[`model-value`,`disabled`])]),_:1}),r.value?(v(),E(I,{key:0,wrap:``},{default:o(()=>[s(A,{disabled:y(p)||t.value?.url===r.value,onClick:l[1]||=e=>y(k).run(`ide.hub.connection.activate`)},{default:o(()=>[...l[16]||=[i(`Подключить`,-1)]]),_:1},8,[`disabled`]),s(A,{disabled:y(p),onClick:l[2]||=e=>y(k).run(`ide.hub.open`)},{default:o(()=>[...l[17]||=[i(`Открыть Hub`,-1)]]),_:1},8,[`disabled`]),s(A,{disabled:y(p),onClick:l[3]||=e=>y(k).run(`ide.hub.connection.delete`)},{default:o(()=>[...l[18]||=[i(`Удалить`,-1)]]),_:1},8,[`disabled`])]),_:1})):_(``,!0),t.value?.url?(v(),E(L,{key:1},{default:o(()=>[i(`Активный Hub: `+n(t.value.url),1)]),_:1})):_(``,!0),t.value?(v(),E(I,{key:2,role:`status`},{default:o(()=>[s(K,{tone:t.value.online?`success`:t.value.enabled?`warning`:`muted`},null,8,[`tone`]),i(n(t.value.online?`Подключено`:t.value.enabled?`Ожидание подключения`:`Не подключено`),1)]),_:1})):_(``,!0),t.value?.error?(v(),E(M,{key:3,tone:`danger`,role:`status`},{default:o(()=>[i(n(t.value.error),1)]),_:1})):_(``,!0),w(`form`,{class:`form`,onSubmit:l[8]||=ne(e=>y(k).run(`ide.hub.connection.save`),[`prevent`])},[s(Q,{label:`Адрес Hub`,hint:`HTTPS-адрес; для localhost также разрешён HTTP.`,required:``},{default:o(({control:e})=>[s(F,C(e,{modelValue:a.value,"onUpdate:modelValue":l[4]||=e=>a.value=e,type:`url`,placeholder:`https://hub.example.com`,disabled:y(p)}),null,16,[`modelValue`,`disabled`])]),_:1}),s(Q,{label:`ID устройства`,hint:`Латинские строчные буквы, цифры и дефис. Стабильное имя этой машины.`,required:``},{default:o(({control:e})=>[s(F,C(e,{modelValue:c.value,"onUpdate:modelValue":l[5]||=e=>c.value=e,pattern:`[a-z0-9][a-z0-9\\-]{0,62}`,maxlength:`63`,placeholder:`workstation`,disabled:y(p)}),null,16,[`modelValue`,`disabled`])]),_:1}),s(Q,{label:`Токен подключения`,hint:r.value?`Оставьте пустым, чтобы сохранить существующий токен для этого Hub.`:`Токен устройства, настроенный на Hub; отличается от пароля входа.`},{default:o(({control:e})=>[s(F,C(e,{modelValue:u.value,"onUpdate:modelValue":l[6]||=e=>u.value=e,type:`password`,autocomplete:`new-password`,disabled:y(p)}),null,16,[`modelValue`,`disabled`])]),_:1},8,[`hint`]),s(I,{wrap:``},{default:o(()=>[s(A,{type:`submit`,appearance:`solid`,busy:y(p),disabled:!y(f)||!R.value},{default:o(()=>[i(n(r.value?`Сохранить`:`Добавить Hub`),1)]),_:1},8,[`busy`,`disabled`]),t.value?.enabled?(v(),E(A,{key:0,disabled:y(p),onClick:l[7]||=e=>y(k).run(`ide.hub.connection.disconnect`)},{default:o(()=>[...l[19]||=[i(`Отключить`,-1)]]),_:1},8,[`disabled`])):_(``,!0)]),_:1})],32),y(m)||y(b)?(v(),E(M,{key:4,tone:y(m)?`danger`:void 0,role:`status`},{default:o(()=>[i(n(y(m)||y(b)),1)]),_:1},8,[`tone`])):_(``,!0)],64))],32))}}),[[`__scopeId`,`data-v-7570af78`]]),Ie=S(r({__name:`HubNavigation`,setup(e){let t=h(()=>X().split(`/`)[2]),r=J(`hub-navigation`,()=>({surface:`hub-navigation`,device:t.value??``}));return r.scope.registerCommand({id:`ide.hub.devices.open`,title:`Устройства Hub`,description:`Возвращает к списку устройств Hub. Текущие задания и терминалы продолжают работать на машине.`,run:()=>location.assign(`/`)}),r.scope.registerCommand({id:`ide.hub.logout`,title:`Выйти из Hub`,description:`Отзывает текущую сессию Hub и закрывает её удалённые соединения.`,run:Oe}),(e,a)=>t.value?(v(),E(I,{key:0,class:`hub-nav`,onFocusin:a[2]||=e=>y(r).scope.activate(),onPointerdown:a[3]||=e=>y(r).scope.activate(),onKeydown:y(r).keydown},{default:o(()=>[s(A,{size:`sm`,appearance:`quiet`,title:`Устройства Hub · ${t.value}`,onClick:a[0]||=e=>y(r).run(`ide.hub.devices.open`)},{default:o(()=>[i(`Hub · `+n(t.value),1)]),_:1},8,[`title`]),s(A,{size:`sm`,appearance:`quiet`,onClick:a[1]||=e=>y(r).run(`ide.hub.logout`)},{default:o(()=>[...a[4]||=[i(`Выйти`,-1)]]),_:1})]),_:1},8,[`onKeydown`])):_(``,!0)}}),[[`__scopeId`,`data-v-af20bd01`]]);export{M as A,se as C,I as D,L as E,F as O,ae as S,B as T,ce as _,Ce as a,G as b,ve as c,ue as d,X as f,le as g,q as h,Q as i,j,N as k,_e as l,Y as m,Fe as n,Se as o,de as p,Ne as r,ye as s,Ie as t,me as u,J as v,R as w,W as x,K as y};
|
package/dist/hub.html
CHANGED
|
@@ -7,11 +7,13 @@
|
|
|
7
7
|
<meta name="color-scheme" content="dark" />
|
|
8
8
|
<meta name="theme-color" content="#171716" />
|
|
9
9
|
<title>Projector Hub</title>
|
|
10
|
-
<script type="module" crossorigin src="/assets/hub-
|
|
11
|
-
<link rel="modulepreload" crossorigin href="/assets/shared.esm-bundler-
|
|
12
|
-
<link rel="modulepreload" crossorigin href="/assets/_plugin-vue_export-helper-
|
|
13
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
14
|
-
<link rel="
|
|
10
|
+
<script type="module" crossorigin src="/assets/hub-DfPcTPCC.js"></script>
|
|
11
|
+
<link rel="modulepreload" crossorigin href="/assets/shared.esm-bundler-DoSbGLUP.js">
|
|
12
|
+
<link rel="modulepreload" crossorigin href="/assets/_plugin-vue_export-helper-D62Ebo7D.js">
|
|
13
|
+
<link rel="modulepreload" crossorigin href="/assets/UiButton-DvucBdmd.js">
|
|
14
|
+
<link rel="modulepreload" crossorigin href="/assets/styles-DZDDPlL3.js">
|
|
15
|
+
<link rel="stylesheet" crossorigin href="/assets/UiButton-AkN01P3P.css">
|
|
16
|
+
<link rel="stylesheet" crossorigin href="/assets/styles-CCXo2OoQ.css">
|
|
15
17
|
</head>
|
|
16
18
|
<body>
|
|
17
19
|
<div id="app"></div>
|
package/dist/index.html
CHANGED
|
@@ -14,24 +14,27 @@
|
|
|
14
14
|
<meta name="apple-mobile-web-app-title" content="Projector" />
|
|
15
15
|
<meta name="apple-mobile-web-app-status-bar-style" content="black" />
|
|
16
16
|
<title>projector</title>
|
|
17
|
-
<script type="module" crossorigin src="/assets/main-
|
|
18
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
19
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
20
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
17
|
+
<script type="module" crossorigin src="/assets/main-iz4ud0jC.js"></script>
|
|
18
|
+
<link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-XKyaHtl9.js">
|
|
19
|
+
<link rel="modulepreload" crossorigin href="/assets/shared.esm-bundler-DoSbGLUP.js">
|
|
20
|
+
<link rel="modulepreload" crossorigin href="/assets/_plugin-vue_export-helper-D62Ebo7D.js">
|
|
21
|
+
<link rel="modulepreload" crossorigin href="/assets/UiButton-DvucBdmd.js">
|
|
22
|
+
<link rel="modulepreload" crossorigin href="/assets/styles-DZDDPlL3.js">
|
|
21
23
|
<link rel="modulepreload" crossorigin href="/assets/preload-helper-BLdHbfdN.js">
|
|
22
24
|
<link rel="modulepreload" crossorigin href="/assets/dist-23D313r2.js">
|
|
23
|
-
<link rel="modulepreload" crossorigin href="/assets/dist-
|
|
24
|
-
<link rel="modulepreload" crossorigin href="/assets/UiPanel-
|
|
25
|
-
<link rel="modulepreload" crossorigin href="/assets/ImageViewport-
|
|
26
|
-
<link rel="modulepreload" crossorigin href="/assets/github-emoji-
|
|
27
|
-
<link rel="modulepreload" crossorigin href="/assets/external-link-
|
|
28
|
-
<link rel="modulepreload" crossorigin href="/assets/UiViewerPage-
|
|
29
|
-
<link rel="stylesheet" crossorigin href="/assets/
|
|
30
|
-
<link rel="stylesheet" crossorigin href="/assets/
|
|
31
|
-
<link rel="stylesheet" crossorigin href="/assets/
|
|
32
|
-
<link rel="stylesheet" crossorigin href="/assets/
|
|
33
|
-
<link rel="stylesheet" crossorigin href="/assets/
|
|
34
|
-
<link rel="stylesheet" crossorigin href="/assets/
|
|
25
|
+
<link rel="modulepreload" crossorigin href="/assets/dist-DzoDV6Eh.js">
|
|
26
|
+
<link rel="modulepreload" crossorigin href="/assets/UiPanel-DtI4DFYT.js">
|
|
27
|
+
<link rel="modulepreload" crossorigin href="/assets/ImageViewport-BT_ftU4z.js">
|
|
28
|
+
<link rel="modulepreload" crossorigin href="/assets/github-emoji-CXJ5RSZS.js">
|
|
29
|
+
<link rel="modulepreload" crossorigin href="/assets/external-link-lkcxItwM.js">
|
|
30
|
+
<link rel="modulepreload" crossorigin href="/assets/UiViewerPage-aHNgiSjO.js">
|
|
31
|
+
<link rel="stylesheet" crossorigin href="/assets/UiButton-AkN01P3P.css">
|
|
32
|
+
<link rel="stylesheet" crossorigin href="/assets/styles-CCXo2OoQ.css">
|
|
33
|
+
<link rel="stylesheet" crossorigin href="/assets/UiPanel-BUDYIo-h.css">
|
|
34
|
+
<link rel="stylesheet" crossorigin href="/assets/ImageViewport-JcG9P4B6.css">
|
|
35
|
+
<link rel="stylesheet" crossorigin href="/assets/github-emoji-D8dkjuM_.css">
|
|
36
|
+
<link rel="stylesheet" crossorigin href="/assets/UiViewerPage-CMFEzZ2i.css">
|
|
37
|
+
<link rel="stylesheet" crossorigin href="/assets/main-JoBAi6ol.css">
|
|
35
38
|
</head>
|
|
36
39
|
<body>
|
|
37
40
|
<div id="app"></div>
|
package/package.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "0.11.
|
|
2
|
+
"version": "0.11.1",
|
|
3
3
|
"type": "module",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"repository": {
|
|
@@ -30,6 +30,9 @@
|
|
|
30
30
|
"projector": "./packages/cli/app/launch.js",
|
|
31
31
|
"projector-install-desktop": "./packages/cli/app/install-desktop.js"
|
|
32
32
|
},
|
|
33
|
+
"scripts": {
|
|
34
|
+
"postinstall": "node ./packages/cli/app/fix-node-pty.js"
|
|
35
|
+
},
|
|
33
36
|
"exports": {
|
|
34
37
|
"./core/*": "./packages/core/*"
|
|
35
38
|
},
|
|
@@ -57,8 +60,5 @@
|
|
|
57
60
|
"rou3": "1.0.0",
|
|
58
61
|
"tldts": "7.4.18",
|
|
59
62
|
"ws": "8.22.0"
|
|
60
|
-
},
|
|
61
|
-
"scripts": {
|
|
62
|
-
"postinstall": "node ./packages/cli/app/fix-node-pty.js"
|
|
63
63
|
}
|
|
64
|
-
}
|
|
64
|
+
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{$ as e,L as t,P as n,S as r,Z as i,_ as a,ct as o,g as s,h as c,it as l,k as ee,t as u,v as d,w as f,z as p}from"./_plugin-vue_export-helper-C4wFX7Eq.js";import{q as m,tt as h}from"./shared.esm-bundler-EUzHGNqQ.js";import{O as te,a as g,f as _,i as ne,o as re,r as ie}from"./dist-dwBOnDaY.js";import{t as ae}from"./UiPanel-CND7Qs_n.js";import{At as v,Lt as oe,Rt as y,T as se,Y as b,Z as ce,ct as le,dt as x,ft as S,g as ue,l as C,st as w,tt as T,yt as E}from"./dist-23D313r2.js";import{a as D,c as de,i as fe,l as pe,n as O,o as k,r as A,s as j,u as M}from"./main-DEEGhxlk.js";import{n as N,t as P}from"./dist-CRLdLpSX.js";import{n as F,r as I}from"./editor-theme-DuQQ8n56.js";var L={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function R(e,t){return p(),d(`svg`,L,[...t[0]||=[c(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[c(`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`}),c(`path`,{d:`M3 12h18`})],-1)]])}var z=l({name:`lucide-rows-2`,render:R}),B={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function V(e,t){return p(),d(`svg`,B,[...t[0]||=[c(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[c(`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`}),c(`path`,{d:`M12 3v18`})],-1)]])}var me=l({name:`lucide-columns-2`,render:V}),H=f({__name:`CodeViewer`,props:{path:{type:String,required:!0},content:{type:String,required:!0},original:{type:String,required:!1},originalLabel:{type:String,required:!1},modifiedLabel:{type:String,required:!1},line:{type:Number,required:!1},endLine:{type:Number,required:!1},column:{type:Number,required:!1},editable:{type:Boolean,required:!1},projectId:{type:String,required:!1},revision:{type:Number,required:!1}},emits:[`change`,`save`],setup(e,{expose:r,emit:a}){r();let s=e,c=a,l=o(),u,d,f=o(!1),p=0,m=new Map,h=``,L=M(),R=L.acquire(),B=ee(Symbol.for(`projector.editor-selection`),void 0),V=()=>!!B&&!!s.projectId&&s.editable===!0&&s.original===void 0&&!s.path.startsWith(`/`);function H(e){if(!V())return;let{main:t}=e.selection,n=e.doc.lineAt(t.from),r=e.doc.lineAt(t.to);t.to>t.from&&r.from===t.to&&r.number>n.number&&(r=e.doc.line(r.number-1)),B.report({path:s.path,from:n.number,to:r.number})}let U=oe.define(),W=y.define({create:()=>!0,update(e,t){let n=e;t.selection&&(n=t.state.selection.main.empty);for(let e of t.effects)e.is(U)&&(n=e.value);return n}}),G=ce.fromClass(class{timer;pointerDown=!1;view;onMouseDown;onMouseUp;constructor(e){this.view=e;let t=e.dom.ownerDocument;this.onMouseDown=t=>{let n=t.target;n instanceof Node&&e.dom.contains(n)&&(n instanceof Element&&n.closest(`.selection-chat`)||(this.pointerDown=!0,this.clear(),e.dispatch({effects:U.of(!1)})))},this.onMouseUp=()=>{this.pointerDown&&(this.pointerDown=!1,this.schedule(120))},t.addEventListener(`mousedown`,this.onMouseDown,!0),t.addEventListener(`mouseup`,this.onMouseUp,!0)}clear(){clearTimeout(this.timer),this.timer=void 0}schedule(e){this.clear(),this.timer=setTimeout(()=>{this.timer=void 0,this.view.state.selection.main.empty||this.view.dispatch({effects:U.of(!0)})},e)}update(e){e.selectionSet&&(this.clear(),e.state.selection.main.empty||this.pointerDown||this.schedule(180))}destroy(){this.clear();let e=this.view.dom.ownerDocument;e.removeEventListener(`mousedown`,this.onMouseDown,!0),e.removeEventListener(`mouseup`,this.onMouseUp,!0)}});function K(){let e=y.define({create:()=>[],update(e,t){let n=t.state.selection.main;return n.empty||!t.state.field(W)?[]:[{pos:n.head,above:!1,create:()=>{let e=document.createElement(`button`);return e.type=`button`,e.className=`selection-chat`,e.textContent=`В чат`,e.title=`Добавить выделенные строки в чат агента`,e.setAttribute(`aria-label`,`Добавить выделенные строки в чат агента`),e.addEventListener(`mousedown`,e=>e.preventDefault()),e.addEventListener(`click`,()=>B?.add()),{dom:e}}}]}});return[W,G,e,E.computeN([e],t=>t.field(e))]}function q(e){let{main:t}=e.selection,n=e.doc.lineAt(t.head);return{line:n.number,column:t.head-n.from+1,selectedChars:t.empty?0:t.to-t.from,selectedLines:t.empty?0:e.doc.lineAt(t.to).number-n.number+1}}async function J(){let e=++p,t=u;if(!t||s.original!==void 0||!s.projectId||s.path.startsWith(`/`)||!te(s.projectId).git)t?.dispatch({effects:D.of(null)});else try{let n=await _(s.projectId,s.path);if(e!==p||u!==t)return;t.dispatch({effects:D.of(n.available?n.original:null)})}catch{e===p&&t.dispatch({effects:D.of(null)})}}function Y(e,t){let n=document.createElement(e===`reject`?`button`:`span`);return e===`reject`&&(n.className=`diff-revert`,n.textContent=`↶ Откатить`,n.title=`Вернуть версию из индекса`,n.onmousedown=t),n}function X(e=`inline`){return[S(),ue(),T(),se(),C(),w(),le(),P(),ne(),x.of([...ie,...N,...g,re]),v.readOnly.of(!s.editable),b.editable.of(!!s.editable),s.editable?b.lineWrapping:[],...V()?K():[],k.of(j(F.value)),A.of([]),v.phrases.of({"Revert this chunk":`Откатить изменение`,"$ unchanged lines":`$ строк без изменений`}),s.original===void 0?O:e===`inline`?pe({original:s.original,gutter:!0,mergeControls:s.editable?Y:!1}):[],b.updateListener.of(e=>{e.docChanged&&s.editable&&c(`change`,e.state.doc.toString()),e.view===u&&(e.selectionSet?L.activate(R,q(e.state)):e.docChanged&&L.update(R,q(e.state)),(e.selectionSet||e.docChanged)&&e.view.hasFocus&&H(e.state))}),b.domEventHandlers({focus(e,t){return H(t.state),!1}})]}function Z(){if(!l.value)return;u&&m.set(h,u.state),d?.destroy(),d=void 0,u?.destroy(),h=s.path;let e=s.original===void 0?m.get(s.path):void 0;s.original!==void 0&&f.value?(d=new de({parent:l.value,a:{doc:s.original,extensions:[...X(`side`),v.readOnly.of(!0),b.editable.of(!1)]},b:{doc:s.content,extensions:X(`side`)},gutter:!0,revertControls:s.editable?`a-to-b`:void 0,highlightChanges:!0,collapseUnchanged:{margin:3,minSize:6}}),u=d.b):u=new b({parent:l.value,state:e??v.create({doc:s.content,extensions:X()})});let t=u;L.activate(R,q(t.state)),fe(s.path).then(e=>{if(u!==t)return;let n={effects:A.reconfigure(e)};d?.a.dispatch(n),t.dispatch(n)}),J(),Q()}function Q(){if(!u||!s.line)return;let e=u.state.doc.line(Math.min(s.line,u.state.doc.lines));if(s.endLine){let t=u.state.doc.line(Math.max(e.number,Math.min(s.endLine,u.state.doc.lines)));u.dispatch({selection:{anchor:e.from,head:t.to},effects:b.scrollIntoView(e.from,{y:`center`})});return}let t=Math.min(e.from+(s.column??1)-1,e.to);u.dispatch({selection:{anchor:t},effects:b.scrollIntoView(t,{y:`center`})})}function he(e){if(!s.editable)return;let t=e.relatedTarget;t instanceof Node&&l.value?.contains(t)||c(`save`)}t(()=>{Z(),I().catch(()=>void 0)}),i(()=>[s.path,s.original,s.editable,f.value],Z),i(F,e=>{let t={effects:k.reconfigure(j(e))};d?.a.dispatch(t),u?.dispatch(t)}),i(()=>s.content,e=>{u&&u.state.doc.toString()!==e&&u.dispatch({changes:{from:0,to:u.state.doc.length,insert:e}})}),i(()=>[s.projectId,s.revision],()=>void J()),i(()=>[s.line,s.column,s.endLine],Q),n(()=>{++p,d?.destroy(),u?.destroy(),m.clear(),L.release(R),B?.clear(s.path)});let $={props:s,emit:c,container:l,get view(){return u},set view(e){u=e},get merge(){return d},set merge(e){d=e},sideBySide:f,get gutterToken(){return p},set gutterToken(e){p=e},states:m,get activePath(){return h},set activePath(e){h=e},statusStore:L,statusId:R,editorSelection:B,tracksSelection:V,reportSelection:H,selectionSettled:U,selectionSettledField:W,selectionSettlePlugin:G,selectionChatTooltip:K,reportCursor:q,loadGutter:J,revertButton:Y,extensions:X,render:Z,reveal:Q,focusOut:he,UiPanel:ae,get IconRows(){return z},get IconColumns(){return me}};return Object.defineProperty($,"__isScriptSetup",{enumerable:!1,value:!0}),$}}),U={key:0,class:`diff-layout`,role:`group`,"aria-label":`Вид сравнения`},W=[`aria-pressed`],G=[`aria-pressed`],K={key:1,class:`diff-header`},q={class:`diff-side u-truncate`},J={key:0,class:`diff-arrow`},Y={class:`diff-side u-truncate`},X=[`aria-label`];function Z(t,n,i,o,l,ee){return p(),s(o.UiPanel,{as:`div`,class:`code-viewer-root`},{default:e(()=>[i.original===void 0?a(`v-if`,!0):(p(),d(`div`,U,[c(`button`,{type:`button`,title:`В одну колонку`,"aria-pressed":!o.sideBySide,class:m({active:!o.sideBySide}),onClick:n[0]||=e=>o.sideBySide=!1},[r(o.IconRows)],10,W),c(`button`,{type:`button`,title:`Две колонки`,"aria-pressed":o.sideBySide,class:m({active:o.sideBySide}),onClick:n[1]||=e=>o.sideBySide=!0},[r(o.IconColumns)],10,G)])),i.original===void 0?a(`v-if`,!0):(p(),d(`div`,K,[c(`span`,q,h(i.originalLabel??`Было`),1),o.sideBySide?a(`v-if`,!0):(p(),d(`span`,J,`→`)),c(`span`,Y,h(i.modifiedLabel??`Стало`),1)])),c(`div`,{ref:`container`,class:`code-viewer`,onFocusout:o.focusOut,"aria-label":i.editable?`Редактор файла`:`Просмотр кода`},null,40,X)]),_:1})}var Q=u(H,[[`render`,Z],[`__scopeId`,`data-v-e365392f`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/workspace/modules/viewers/ui/CodeViewer.vue`]]);export{Q as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.code-viewer-root[data-v-e365392f]{position:relative}.diff-header[data-v-e365392f]{border-bottom:1px solid var(--line);height:24px;color:var(--muted);font:var(--fs-xs) var(--sans);flex:none;align-items:center;display:flex}.diff-side[data-v-e365392f]{flex:1;min-width:0;padding:0 12px}.diff-side+.diff-side[data-v-e365392f]{border-left:1px solid var(--line)}.diff-arrow[data-v-e365392f]{flex:none}.diff-layout[data-v-e365392f]{z-index:5;gap:2px;display:flex;position:absolute;top:2px;right:18px}.diff-layout button[data-v-e365392f]{border-radius:var(--r-sm);width:20px;height:20px;color:var(--muted);cursor:pointer;background:0 0;border:0;place-items:center;padding:0;display:grid}.diff-layout button[data-v-e365392f]:hover,.diff-layout button.active[data-v-e365392f]{background:var(--active);color:var(--text)}.code-viewer[data-v-e365392f] .cm-mergeView,.code-viewer[data-v-e365392f] .cm-mergeViewEditors{height:100%}.code-viewer[data-v-e365392f] .cm-mergeViewEditor{min-width:0;height:100%;overflow:hidden}.code-viewer[data-v-e365392f] .cm-mergeViewEditor+.cm-mergeViewEditor{border-left:1px solid var(--line)}.code-viewer[data-v-e365392f] .cm-mergeView .cm-editor{height:100%}.code-viewer[data-v-e365392f]{flex:1;height:auto;min-height:0;overflow:hidden}.code-viewer[data-v-e365392f] .selection-chat{border:1px solid var(--line-strong);border-radius:var(--r-full);background:var(--bg-3);min-height:26px;box-shadow:var(--shadow-popover);color:var(--text);font:var(--fs-xs) var(--sans);cursor:pointer;align-items:center;padding:0 10px;display:inline-flex}.code-viewer[data-v-e365392f] .selection-chat:hover{background:var(--bg-4)}.code-viewer[data-v-e365392f] .selection-chat:focus-visible{border-color:var(--focus);background:var(--bg-4)}.code-viewer[data-v-e365392f] .cm-dirty-gutter{width:10px}.code-viewer[data-v-e365392f] .git-gutter-added,.code-viewer[data-v-e365392f] .git-gutter-modified{cursor:pointer;background:var(--run);width:3px;height:100%;margin-left:3px}.code-viewer[data-v-e365392f] .git-gutter-modified{background:var(--info)}.code-viewer[data-v-e365392f] .git-gutter-deleted{border-left:4px solid var(--err);border-top:4px solid #0000;border-bottom:4px solid #0000;width:0;height:0;margin-top:100%;margin-left:3px}.code-viewer[data-v-e365392f] .git-gutter-deleted-top{margin-top:0}.code-viewer[data-v-e365392f] .dirty-diff-peek{box-sizing:border-box;border-top:1px solid var(--line);border-bottom:1px solid var(--line);background:var(--bg-2);overflow:hidden}.code-viewer[data-v-e365392f] .dirty-diff-bar{height:20px;color:var(--muted);font:var(--fs-xs) var(--sans);align-items:center;gap:2px;padding:0 8px;display:flex}.code-viewer[data-v-e365392f] .dirty-diff-title{flex:1}.code-viewer[data-v-e365392f] .dirty-diff-button{border-radius:var(--r-sm);min-width:20px;height:18px;color:inherit;font:inherit;cursor:pointer;background:0 0;border:0;line-height:1}.code-viewer[data-v-e365392f] .dirty-diff-button:hover{background:var(--active);color:var(--text)}.code-viewer[data-v-e365392f] .dirty-diff-body{background:color-mix(in srgb, var(--err) 8%, transparent);font:var(--fs-sm) var(--mono);white-space:pre;padding:0 0 0 64px;line-height:20px}.code-viewer[data-v-e365392f] .cm-changedLine{background:color-mix(in srgb, var(--run) 8%, transparent)}.code-viewer[data-v-e365392f] .cm-changedText{background:color-mix(in srgb, var(--run) 20%, transparent)}.code-viewer[data-v-e365392f] .diff-revert{border:1px solid var(--line);border-radius:var(--r-sm);background:var(--bg-2);color:var(--muted);font:var(--fs-xs) var(--sans);cursor:pointer;margin:0 4px;padding:0 6px}.code-viewer[data-v-e365392f] .diff-revert:hover{background:var(--active);color:var(--text)}.code-viewer[data-v-e365392f] .cm-deletedChunk{background:color-mix(in srgb, var(--err) 8%, transparent)}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{$ as e,S as t,_ as n,g as r,m as i,t as a,v as o,w as s,x as c,z as l}from"./_plugin-vue_export-helper-C4wFX7Eq.js";import{E as u}from"./styles-C07CLvbW.js";import{tt as d}from"./shared.esm-bundler-EUzHGNqQ.js";import{d as f,u as p}from"./UiViewerPage-z_s1uFHO.js";import{h as m}from"./main-DEEGhxlk.js";import{n as h,r as g,t as _}from"./TrackerDetail-CV0Qqzx3.js";var v=s({__name:`DiscussionView`,props:{projectId:{type:String,required:!0},number:{type:Number,required:!0}},emits:[`open`],setup(e,{expose:t,emit:n}){t();let r=e,a=n,{detail:o,loading:s,error:c}=g(()=>r.projectId,()=>r.number,`discussion`,`Не удалось открыть discussion`),l=(e,t)=>({...e,at:e.createdAt,depth:t,badge:e.isAnswer?`ответ`:void 0,badgeClass:e.isAnswer?`answer`:void 0}),d=i(()=>(o.value?.comments??[]).flatMap(e=>[l(e,0),...e.replies.map(e=>l(e,1))])),v=i(()=>(o.value?.comments??[]).some(e=>e.repliesTruncated)),y=i(()=>{let e=o.value?.discussion;return e?.closed?`closed`:e?.answered?`answered`:`open`}),b={open:`открыто`,closed:`закрыто`,answered:`есть ответ`};f(()=>{let e=`Discussion #${o.value?.discussion.number??r.number}`;if(c.value)return{note:e,text:`Ошибка: ${c.value}`};let t=o.value;if(!t)return{note:e,text:`Загрузка…`};let n=t.discussion,i=n.body.length>4e3?`${n.body.slice(0,4e3)}…`:n.body,a=t.comments.flatMap(e=>[`${e.isAnswer?`[ответ] `:``}${e.author.login}`,...e.replies.map(e=>` ↳ ${e.author.login}`)]),s=a.slice(0,200);return{note:e,text:p(`Состояние: ${b[y.value]}`,`${n.title} (#${n.number})`,`Автор: ${n.author.login}, создано ${n.createdAt}`,n.category.name?`Категория: ${n.category.name}`:``,n.labels.length?`Метки: ${n.labels.map(e=>e.name).join(`, `)}`:`Метки: нет`,`Голосов: ${n.upvotes}`,a.length?`Комментарии (${t.comments.length}):\n${s.join(`
|
|
2
|
-
`)}${a.length>s.length?`\n… ещё ${a.length-s.length}`:``}`:`Комментариев: нет`,t.commentsTruncated?`Комментарии показаны не все.`:``,v.value?`Ответы на комментарии показаны не все.`:``,i)}});let x={props:r,emit:a,detail:o,loading:s,error:c,item:l,comments:d,truncatedReplies:v,state:y,STATE_LABEL:b,UiHint:u,EmojiText:m,TrackerComments:h,TrackerDetail:_};return Object.defineProperty(x,"__isScriptSetup",{enumerable:!1,value:!0}),x}}),y={key:0,class:`category`},b={key:1};function x(i,a,s,u,f,p){return l(),r(u.TrackerDetail,{"project-id":s.projectId,loading:u.loading,error:u.error,ready:!!u.detail,noun:`discussion`,state:u.state,"state-label":u.STATE_LABEL[u.state],title:u.detail?.discussion.title??``,number:u.detail?.discussion.number??s.number,author:u.detail?.discussion.author??{login:``,avatarUrl:``},"created-at":u.detail?.discussion.createdAt??``,"html-url":u.detail?.discussion.htmlUrl??``,labels:u.detail?.discussion.labels??[],body:u.detail?.discussion.body??``,reactions:u.detail?.discussion.reactions??[],onOpen:a[1]||=e=>u.emit(`open`,e)},{meta:e(()=>[u.detail?.discussion.category.name?(l(),o(`span`,y,[t(u.EmojiText,{text:u.detail.discussion.category.emoji},null,8,[`text`]),c(` `+d(u.detail.discussion.category.name),1)])):n(`v-if`,!0),u.detail?.discussion.upvotes?(l(),o(`span`,b,`▲ `+d(u.detail.discussion.upvotes),1)):n(`v-if`,!0)]),default:e(()=>[t(u.TrackerComments,{"project-id":s.projectId,title:`Комментарии`,empty:`Комментариев нет`,items:u.comments,onOpen:a[0]||=e=>u.emit(`open`,e)},null,8,[`project-id`,`items`]),u.truncatedReplies?(l(),r(u.UiHint,{key:0,size:`xs`,leading:`inherit`,"space-before":2,class:`note`},{default:e(()=>[...a[2]||=[c(` У некоторых комментариев показаны не все ответы. Откройте discussion на GitHub, чтобы увидеть все. `,-1)]]),_:1})):n(`v-if`,!0),u.detail?.commentsTruncated?(l(),r(u.UiHint,{key:1,size:`xs`,leading:`inherit`,"space-before":2,class:`note`},{default:e(()=>[...a[3]||=[c(` Показаны первые 250 комментариев. Откройте discussion на GitHub, чтобы увидеть все. `,-1)]]),_:1})):n(`v-if`,!0)]),_:1},8,[`project-id`,`loading`,`error`,`ready`,`state`,`state-label`,`title`,`number`,`author`,`created-at`,`html-url`,`labels`,`body`,`reactions`])}var S=a(v,[[`render`,x],[`__scopeId`,`data-v-ef24835c`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/workspace/modules/viewers/ui/DiscussionView.vue`]]);export{S as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.category[data-v-ef24835c]{color:var(--text-2)}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/CodeViewer-BAgvP3Yx.js","assets/_plugin-vue_export-helper-C4wFX7Eq.js","assets/shared.esm-bundler-EUzHGNqQ.js","assets/dist-dwBOnDaY.js","assets/styles-C07CLvbW.js","assets/styles-CX3Ni7dk.css","assets/preload-helper-BLdHbfdN.js","assets/dist-23D313r2.js","assets/UiPanel-CND7Qs_n.js","assets/UiPanel-CS77nWcC.css","assets/main-DEEGhxlk.js","assets/github-emoji-C2UmmDoA.js","assets/ImageViewport-lPITcKgO.js","assets/ImageViewport-BXN_-Ztv.css","assets/github-emoji-qJihbtN6.css","assets/UiViewerPage-z_s1uFHO.js","assets/external-link-BFTqPI03.js","assets/UiViewerPage-BOvnLith.css","assets/main-CgMl4Qjs.css","assets/dist-CRLdLpSX.js","assets/editor-theme-DuQQ8n56.js","assets/CodeViewer-QIU6uQDH.css"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{$ as e,C as t,L as n,S as r,V as i,_ as a,ct as o,f as s,g as c,h as l,m as u,q as d,t as f,v as p,w as m,x as h,z as g}from"./_plugin-vue_export-helper-C4wFX7Eq.js";import{A as _,D as v,M as y,N as b,b as x}from"./styles-C07CLvbW.js";import{q as S,tt as C}from"./shared.esm-bundler-EUzHGNqQ.js";import{t as w}from"./preload-helper-BLdHbfdN.js";import{L as T}from"./main-DEEGhxlk.js";import{i as E,n as D,r as O,t as k}from"./editor-theme-DuQQ8n56.js";var A=`// Спокойная подсветка для повседневной работы
|
|
3
|
-
interface Project {
|
|
4
|
-
name: string;
|
|
5
|
-
active: boolean;
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
export function recentProjects(projects: Project[], limit = 5) {
|
|
9
|
-
return projects
|
|
10
|
-
.filter((project) => project.active)
|
|
11
|
-
.slice(0, limit)
|
|
12
|
-
.map((project) => \`Открыть \${project.name}\`);
|
|
13
|
-
}`,j=m({__name:`EditorSettings`,props:{embedded:{type:Boolean,required:!1}},setup(e,{expose:r}){r();let i=d(),a=d(),s=t(()=>w(()=>import(`./CodeViewer-BAgvP3Yx.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21]))),c=o(D.value),{ready:l,busy:f,error:p,status:m,load:h,perform:g}=x(),S=u(()=>E.find(e=>e.id===c.value)?.description);function C(){return h(async()=>{await O(),c.value=D.value},`Не удалось загрузить настройки`)}n(C);async function j(){await g(async()=>{let e=await fetch(`/api/ide/editor`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({theme:c.value})}),t=await e.json();if(!e.ok)throw Error(t.error||`Не удалось сохранить тему`);k(c.value)},{errorFallback:`Не удалось сохранить тему`,success:`Тема сохранена`,rollback:()=>{c.value=D.value}})}let M={titleId:i,themeId:a,CodeViewer:s,selected:c,ready:l,busy:f,error:p,status:m,loadSection:h,perform:g,description:S,example:A,load:C,save:j,UiLabel:T,UiMessage:y,UiControl:_,UiHeading:b,UiButton:v,get editorThemes(){return E}};return Object.defineProperty(M,"__isScriptSetup",{enumerable:!1,value:!0}),M}}),M=[`aria-labelledby`],N=[`value`],P={class:`hint`},F={class:`preview`};function I(t,n,o,u,d,f){return g(),p(`section`,{class:`editor-settings`,"aria-labelledby":u.titleId},[r(u.UiHeading,{id:u.titleId,size:`sm`,"space-after":4,class:S({"u-sr-only":o.embedded})},{default:e(()=>[...n[1]||=[h(`Редактор кода`,-1)]]),_:1},8,[`id`,`class`]),r(u.UiLabel,{for:u.themeId,"space-after":2},{default:e(()=>[...n[2]||=[h(`Цветовая тема редактора`,-1)]]),_:1},8,[`for`]),r(u.UiControl,{as:`select`,id:u.themeId,modelValue:u.selected,"onUpdate:modelValue":n[0]||=e=>u.selected=e,disabled:!u.ready||u.busy,onChange:u.save},{default:e(()=>[(g(!0),p(s,null,i(u.editorThemes,e=>(g(),p(`option`,{key:e.id,value:e.id},C(e.title),9,N))),128))]),_:1},8,[`id`,`modelValue`,`disabled`]),l(`p`,P,C(u.description),1),l(`div`,F,[r(u.CodeViewer,{path:`theme-preview.ts`,content:u.example})]),n[4]||=l(`p`,{class:`hint`},` Тема применяется к коду и сравнению изменений во всех проектах. Выбор сохраняется автоматически. `,-1),u.error||u.status?(g(),c(u.UiMessage,{key:0,role:`status`,tone:u.error?`danger`:void 0},{default:e(()=>[h(C(u.error||u.status),1)]),_:1},8,[`tone`])):a(`v-if`,!0),!u.ready&&u.error?(g(),c(u.UiButton,{key:1,onClick:u.load},{default:e(()=>[...n[3]||=[h(`Повторить загрузку`,-1)]]),_:1})):a(`v-if`,!0)],8,M)}var L=f(j,[[`render`,I],[`__scopeId`,`data-v-b2c82033`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/workspace/modules/viewers/ui/EditorSettings.vue`]]);export{L as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.editor-settings[data-v-b2c82033]{margin-bottom:var(--ui-section-margin,var(--sp-6))}select[data-v-b2c82033]{max-width:420px}.hint[data-v-b2c82033]{color:var(--muted);font-size:var(--ui-hint-font-size,var(--fs-sm));margin:var(--sp-3) 0}.preview[data-v-b2c82033]{border:1px solid var(--line);border-radius:var(--r-md);height:240px;overflow:hidden}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.url[data-v-710c3d91]{min-width:0;font-family:var(--mono);color:var(--muted);flex:1}.page-pane[data-v-710c3d91]{background:var(--bg-3);flex:1;justify-content:center;min-height:0;display:flex;overflow:auto}.page-frame[data-v-710c3d91]{color-scheme:normal;background:#fff;border:0;width:100%;height:100%}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/CodeViewer-BAgvP3Yx.js","assets/_plugin-vue_export-helper-C4wFX7Eq.js","assets/shared.esm-bundler-EUzHGNqQ.js","assets/dist-dwBOnDaY.js","assets/styles-C07CLvbW.js","assets/styles-CX3Ni7dk.css","assets/preload-helper-BLdHbfdN.js","assets/dist-23D313r2.js","assets/UiPanel-CND7Qs_n.js","assets/UiPanel-CS77nWcC.css","assets/main-DEEGhxlk.js","assets/github-emoji-C2UmmDoA.js","assets/ImageViewport-lPITcKgO.js","assets/ImageViewport-BXN_-Ztv.css","assets/github-emoji-qJihbtN6.css","assets/UiViewerPage-z_s1uFHO.js","assets/external-link-BFTqPI03.js","assets/UiViewerPage-BOvnLith.css","assets/main-CgMl4Qjs.css","assets/dist-CRLdLpSX.js","assets/editor-theme-DuQQ8n56.js","assets/CodeViewer-QIU6uQDH.css"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{$ as e,C as t,S as n,V as r,Z as i,_ as a,ct as o,f as s,g as c,h as l,it as u,m as d,t as f,v as p,w as m,x as h,z as g}from"./_plugin-vue_export-helper-C4wFX7Eq.js";import{A as _,D as v,k as y}from"./styles-C07CLvbW.js";import{X as b,tt as x}from"./shared.esm-bundler-EUzHGNqQ.js";import{t as S}from"./UiPanel-CND7Qs_n.js";import{t as C}from"./preload-helper-BLdHbfdN.js";import{t as w}from"./external-link-BFTqPI03.js";import{A as T,O as E}from"./main-DEEGhxlk.js";import{t as D}from"./SplitPanes-DR126xV8.js";var O={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function k(e,t){return g(),p(`svg`,O,[...t[0]||=[l(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[l(`rect`,{width:`20`,height:`16`,x:`2`,y:`4`,rx:`2`}),l(`path`,{d:`M10 4v4M2 8h20M6 4v4`})],-1)]])}var A=u({name:`lucide-app-window`,render:k}),j=m({__name:`HtmlViewer`,props:{path:{type:String,required:!0},projectId:{type:String,required:!1},content:{type:String,required:!0},saved:{type:String,required:!0},siteUrl:{type:String,required:!0},reload:{type:Number,required:!1},editable:{type:Boolean,required:!1},line:{type:Number,required:!1},endLine:{type:Number,required:!1},column:{type:Number,required:!1}},emits:[`change`,`save`,`command`],setup(e,{expose:n,emit:r}){n();let a=t(()=>C(()=>import(`./CodeViewer-BAgvP3Yx.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21]))),s=e,c=r,l=[{id:`auto`,label:`Авто`,width:``},{id:`mobile`,label:`Телефон · 375`,width:`375px`},{id:`tablet`,label:`Планшет · 768`,width:`768px`},{id:`desktop`,label:`Ноутбук · 1280`,width:`1280px`}],u=o(`auto`),f=o(0);i(()=>[s.saved,s.reload],()=>f.value++);let p={CodeViewer:a,props:s,emit:c,widths:l,width:u,loads:f,frameStyle:d(()=>{let e=l.find(e=>e.id===u.value)?.width;return e?{width:e,maxWidth:`100%`}:void 0}),UiControl:_,UiInline:y,UiPanel:S,UiToolbar:T,SplitPanes:D,UiButton:v,get IconRefresh(){return E},get IconExternal(){return w},get IconPanel(){return A}};return Object.defineProperty(p,"__isScriptSetup",{enumerable:!1,value:!0}),p}}),M=[`value`],N=[`title`],P={class:`page-pane`},F=[`src`,`title`];function I(t,i,o,u,d,f){return g(),c(u.UiPanel,{class:`html-viewer`,"aria-label":`Просмотр HTML`},{default:e(()=>[n(u.UiToolbar,{class:`toolbar`,"column-gap":4,text:`xs`},{default:e(()=>[n(u.UiInline,{as:`label`,gap:1.5,justify:`normal`},{default:e(()=>[i[6]||=h(`Ширина `,-1),n(u.UiControl,{as:`select`,modelValue:u.width,"onUpdate:modelValue":i[0]||=e=>u.width=e,appearance:`inline-select`,"aria-label":`Ширина страницы`},{default:e(()=>[(g(),p(s,null,r(u.widths,e=>l(`option`,{key:e.id,value:e.id},x(e.label),9,M)),64))]),_:1},8,[`modelValue`])]),_:1}),l(`span`,{class:`url u-truncate`,title:o.siteUrl},x(o.siteUrl),9,N),n(u.UiButton,{shape:`icon`,size:`sm`,"aria-label":`Перезагрузить страницу`,title:`Перезагрузить страницу`,onClick:i[1]||=e=>u.emit(`command`,`ide.editor.html.reload`)},{default:e(()=>[n(u.IconRefresh,{"aria-hidden":`true`})]),_:1}),n(u.UiButton,{shape:`icon`,size:`sm`,"aria-label":`Открыть во вкладке браузера`,title:`Открыть страницу во вкладке браузера Projector`,onClick:i[2]||=e=>u.emit(`command`,`ide.editor.html.openInBrowserTab`)},{default:e(()=>[n(u.IconPanel,{"aria-hidden":`true`})]),_:1}),n(u.UiButton,{shape:`icon`,size:`sm`,"aria-label":`Открыть в браузере`,title:`Открыть страницу в новой вкладке браузера`,onClick:i[3]||=e=>u.emit(`command`,`ide.editor.html.openInBrowser`)},{default:e(()=>[n(u.IconExternal,{"aria-hidden":`true`})]),_:1})]),_:1}),n(u.SplitPanes,{"top-label":`Страница`,"bottom-label":`Код`,reveal:o.line},{top:e(()=>[l(`div`,P,[a(` No allow-same-origin: the document gets an opaque origin and cannot reach the Projector API. `),(g(),p(`iframe`,{key:u.loads,class:`page-frame`,style:b(u.frameStyle),src:o.siteUrl,title:`Страница ${o.path}`,sandbox:`allow-scripts allow-forms allow-popups allow-modals`,referrerpolicy:`no-referrer`},null,12,F))])]),bottom:e(()=>[n(u.CodeViewer,{path:o.path,"project-id":o.projectId,content:o.content,editable:o.editable,line:o.line,"end-line":o.endLine,column:o.column,onChange:i[4]||=e=>u.emit(`change`,e),onSave:i[5]||=e=>u.emit(`save`)},null,8,[`path`,`project-id`,`content`,`editable`,`line`,`end-line`,`column`])]),_:1},8,[`reveal`])]),_:1})}var L=f(j,[[`render`,I],[`__scopeId`,`data-v-710c3d91`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/workspace/modules/viewers/ui/HtmlViewer.vue`]]);export{L as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{$ as e,L as t,P as n,S as r,Z as i,_ as a,ct as o,d as s,g as c,h as l,it as u,m as d,t as f,v as p,w as m,x as h,z as g}from"./_plugin-vue_export-helper-C4wFX7Eq.js";import{A as _,D as v,k as y}from"./styles-C07CLvbW.js";import{X as b,q as x,tt as S}from"./shared.esm-bundler-EUzHGNqQ.js";import{t as C}from"./UiPanel-CND7Qs_n.js";function w(e,t,n,r){let i=Math.max(1/64,Math.min(32,t)),a=e.zoom<1&&i>1||e.zoom>1&&i<1?1:i,o=a/e.zoom;return{zoom:a,x:n-(n-e.x)*o,y:r-(r-e.y)*o}}var T=e=>Math.min(48,e*.1);function E(e,t,n,r){return Math.max(1/64,Math.min(32,Math.max(1,n-T(n))/e,Math.max(1,r-T(r))/t))}var D={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function O(e,t){return g(),p(`svg`,D,[...t[0]||=[l(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[l(`rect`,{width:`12`,height:`20`,x:`6`,y:`2`,rx:`2`}),l(`rect`,{width:`20`,height:`12`,x:`2`,y:`6`,rx:`2`})],-1)]])}var k=u({name:`lucide-ratio`,render:O}),A={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function j(e,t){return g(),p(`svg`,A,[...t[0]||=[l(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M8 3H5a2 2 0 0 0-2 2v3m18 0V5a2 2 0 0 0-2-2h-3M3 16v3a2 2 0 0 0 2 2h3m8 0h3a2 2 0 0 0 2-2v-3`},null,-1)]])}var M=u({name:`lucide-maximize`,render:j}),N=m({__name:`ImageViewport`,props:{src:{type:String,required:!1},svg:{type:String,required:!1},alt:{type:String,required:!0},width:{type:Number,required:!1},height:{type:Number,required:!1},identity:{type:String,required:!1},fit:{type:Boolean,required:!1,default:!0},background:{type:String,required:!1,default:`checker`},backgroundColor:{type:String,required:!1,default:`#808080`},backgroundControls:{type:Boolean,required:!1,default:!0},error:{type:String,required:!1},floating:{type:Boolean,required:!1}},setup(e,{expose:r}){let a=e,s=o(a.background),c=o(a.backgroundColor),l=d(()=>a.backgroundControls?s.value:a.background),u=d(()=>a.backgroundControls?c.value:a.backgroundColor),f=o(),p=o({width:0,height:0}),m=o({zoom:1,x:0,y:0}),h=o(!1),g=o(!1),b=d(()=>({width:a.width??p.value.width,height:a.height??p.value.height})),x=d(()=>({width:`${b.value.width}px`,height:`${b.value.height}px`,transform:`translate(-50%, -50%) translate(${m.value.x}px, ${m.value.y}px) scale(${m.value.zoom})`})),S=!1,T,D,O=new Map,A,j={clientX:0,clientY:0,x:0,y:0},N=0;function P(e=a.fit){let t=f.value,{width:n,height:r}=b.value;!t||!n||!r||!t.clientWidth||!t.clientHeight?S=!1:(m.value={zoom:e?E(n,r,t.clientWidth,t.clientHeight):1,x:0,y:0},S=!0,N=0)}function F(e){let t=e.target;p.value={width:t.naturalWidth,height:t.naturalHeight},S||P()}function I(e){let t=f.value;if(!t||a.error||h.value)return;let n=performance.now();if(n<N)return;let r=t.getBoundingClientRect(),i=e.deltaMode===1?16:e.deltaMode===2?r.height:1,o=Math.max(-500,Math.min(500,(e.deltaY||e.deltaX)*i)),s=m.value.zoom;m.value=w(m.value,m.value.zoom*Math.exp(-o*.002),e.clientX-r.left-r.width/2,e.clientY-r.top-r.height/2),s!==1&&m.value.zoom===1&&(N=n+180)}function L(e){j={clientX:e.x,clientY:e.y,x:m.value.x,y:m.value.y},g.value=!0}function R(e){if(e.pointerType===`mouse`&&e.button!==0||a.error||h.value)return;e.preventDefault();let t=e.currentTarget;if(t.focus({preventScroll:!0}),t.setPointerCapture(e.pointerId),O.set(e.pointerId,{x:e.clientX,y:e.clientY}),O.size===1)D=e.pointerId,L({x:e.clientX,y:e.clientY});else if(O.size===2){let[e,n]=[...O.values()],r=t.getBoundingClientRect();A={distance:Math.max(1,Math.hypot(e.x-n.x,e.y-n.y)),mid:{x:(e.x+n.x)/2-r.left-r.width/2,y:(e.y+n.y)/2-r.top-r.height/2},view:m.value},g.value=!1}}function z(e){if(O.has(e.pointerId)){if(O.set(e.pointerId,{x:e.clientX,y:e.clientY}),A&&O.size===2){let t=e.currentTarget.getBoundingClientRect(),[n,r]=[...O.values()],i=Math.max(1/64,Math.min(32,A.view.zoom*Math.hypot(n.x-r.x,n.y-r.y)/A.distance)),a=i/A.view.zoom,o={x:(n.x+r.x)/2-t.left-t.width/2,y:(n.y+r.y)/2-t.top-t.height/2};m.value={zoom:i,x:o.x-(A.mid.x-A.view.x)*a,y:o.y-(A.mid.y-A.view.y)*a}}else g.value&&e.pointerId===D&&(m.value={...m.value,x:j.x+e.clientX-j.clientX,y:j.y+e.clientY-j.clientY})}}function B(e){if(!O.delete(e.pointerId))return;let t=e.currentTarget;t.hasPointerCapture(e.pointerId)&&t.releasePointerCapture(e.pointerId),A=void 0;let[n]=[...O.entries()];n?(D=n[0],L(n[1])):(g.value=!1,D=void 0)}function V(e){if([`+`,`=`,`-`,`0`,`ArrowUp`,`ArrowDown`,`ArrowLeft`,`ArrowRight`].includes(e.key)){if(e.preventDefault(),e.key===`0`)P();else if([`+`,`=`,`-`].includes(e.key))m.value=w(m.value,m.value.zoom*(e.key===`-`?1/1.2:1.2),0,0);else{let t=e.shiftKey?100:30;m.value={...m.value,x:m.value.x+(e.key===`ArrowLeft`?-t:e.key===`ArrowRight`?t:0),y:m.value.y+(e.key===`ArrowUp`?-t:e.key===`ArrowDown`?t:0)}}}}i(()=>a.src,()=>{h.value=!1}),i(()=>a.identity??a.src,()=>{S=!1,p.value={width:0,height:0},m.value={zoom:1,x:0,y:0}}),t(()=>{T=new ResizeObserver(()=>{S||P()}),f.value&&T.observe(f.value)}),n(()=>T?.disconnect()),r({reset:P});let H={props:a,localBackground:s,localBackgroundColor:c,canvasBackground:l,canvasBackgroundColor:u,canvas:f,natural:p,view:m,failed:h,panning:g,dimensions:b,imageStyle:x,get initialized(){return S},set initialized(e){S=e},get observer(){return T},set observer(e){T=e},get pointerId(){return D},set pointerId(e){D=e},pointers:O,get pinch(){return A},set pinch(e){A=e},get drag(){return j},set drag(e){j=e},get zoomStopUntil(){return N},set zoomStopUntil(e){N=e},reset:P,loaded:F,wheel:I,beginPan:L,startPan:R,movePan:z,endPan:B,key:V,UiPanel:C,UiControl:_,UiInline:y,UiButton:v,get IconRatio(){return k},get IconMaximize(){return M}};return Object.defineProperty(H,"__isScriptSetup",{enumerable:!1,value:!0}),H}}),P={key:0,class:`error`,role:`alert`},F=[`aria-label`,`innerHTML`],I=[`src`,`alt`],L={class:`view-controls`},R={class:`zoom`};function z(t,n,i,o,u,d){return g(),c(o.UiPanel,{class:x([`image-viewport`,{floating:i.floating}]),"aria-label":`Просмотр изображения`,"data-swipe-ignore":``},{default:e(()=>[l(`div`,{ref:`canvas`,class:x([`image-canvas`,[o.canvasBackground,{panning:o.panning}]]),style:b(o.canvasBackground===`custom`?{background:o.canvasBackgroundColor}:void 0),role:`region`,"aria-label":`Область изображения`,tabindex:`0`,onWheel:s(o.wheel,[`prevent`]),onPointerdown:o.startPan,onPointermove:o.movePan,onPointerup:o.endPan,onPointercancel:o.endPan,onLostpointercapture:o.endPan,onDblclick:n[1]||=e=>o.reset(),onKeydown:o.key,onDragstart:n[2]||=s(()=>{},[`prevent`])},[i.error||o.failed?(g(),p(`p`,P,S(i.error||`Браузер не смог отобразить это изображение.`),1)):a(`v-if`,!0),i.svg?(g(),p(`div`,{key:1,class:`image-svg`,style:b(o.imageStyle),role:`img`,"aria-label":i.alt,innerHTML:i.svg},null,12,F)):(g(),p(`img`,{key:2,src:i.src,alt:i.alt,style:b(o.imageStyle),draggable:`false`,onLoad:o.loaded,onError:n[0]||=e=>o.failed=!0},null,44,I))],38),l(`div`,L,[l(`span`,R,S(Math.round(o.view.zoom*100))+`%`,1),r(o.UiButton,{shape:`icon`,size:`sm`,"aria-label":`Сбросить масштаб`,title:`Масштаб 100% и центрирование изображения`,onClick:n[3]||=e=>o.reset(!1)},{default:e(()=>[r(o.IconRatio,{"aria-hidden":`true`})]),_:1}),r(o.UiButton,{shape:`icon`,size:`sm`,"aria-label":`Вписать`,title:`Вписать изображение в область просмотра`,onClick:n[4]||=e=>o.reset(!0)},{default:e(()=>[r(o.IconMaximize,{"aria-hidden":`true`})]),_:1}),i.backgroundControls?(g(),c(o.UiInline,{key:0,as:`label`,class:`background-control`,gap:1.5,justify:`normal`},{default:e(()=>[n[8]||=h(`Фон `,-1),r(o.UiControl,{as:`select`,modelValue:o.localBackground,"onUpdate:modelValue":n[5]||=e=>o.localBackground=e,"aria-label":`Фон изображения`},{default:e(()=>[...n[7]||=[l(`option`,{value:`light`},`Светлый`,-1),l(`option`,{value:`dark`},`Тёмный`,-1),l(`option`,{value:`transparent`},`Прозрачный`,-1),l(`option`,{value:`checker`},`Шашечки`,-1),l(`option`,{value:`gradient`},`Градиент`,-1),l(`option`,{value:`color-gradient`},`Цветной градиент`,-1),l(`option`,{value:`custom`},`Свой цвет`,-1)]]),_:1},8,[`modelValue`])]),_:1})):a(`v-if`,!0),i.backgroundControls&&o.localBackground===`custom`?(g(),c(o.UiControl,{key:1,modelValue:o.localBackgroundColor,"onUpdate:modelValue":n[6]||=e=>o.localBackgroundColor=e,type:`color`,appearance:`swatch`,"swatch-size":`sm`,"aria-label":`Свой цвет фона изображения`},null,8,[`modelValue`])):a(`v-if`,!0)])]),_:1},8,[`class`])}var B=f(N,[[`render`,z],[`__scopeId`,`data-v-4b5e1e5e`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/common/ui/ImageViewport.vue`]]);export{M as n,B as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{$ as e,S as t,_ as n,g as r,m as i,t as a,v as o,w as s,x as c,z as l}from"./_plugin-vue_export-helper-C4wFX7Eq.js";import{E as u}from"./styles-C07CLvbW.js";import{tt as d}from"./shared.esm-bundler-EUzHGNqQ.js";import{d as f,u as p}from"./UiViewerPage-z_s1uFHO.js";import{n as m,r as h,t as g}from"./TrackerDetail-CV0Qqzx3.js";var _=s({__name:`IssueView`,props:{projectId:{type:String,required:!0},number:{type:Number,required:!0},host:{type:String,required:!1,default:`GitHub`}},emits:[`open`],setup(e,{expose:t,emit:n}){t();let r=e,a=n,{detail:o,loading:s,error:c}=h(()=>r.projectId,()=>r.number,`issue`,`Не удалось открыть issue`),l=i(()=>(o.value?.comments??[]).map(e=>({...e,at:e.createdAt})));f(()=>{let e=`Issue #${o.value?.issue.number??r.number}`;if(c.value)return{note:e,text:`Ошибка: ${c.value}`};let t=o.value;if(!t)return{note:e,text:`Загрузка…`};let n=t.issue,i=n.body.length>4e3?`${n.body.slice(0,4e3)}…`:n.body;return{note:e,text:p(n.state===`closed`?`Состояние: закрыт`:`Состояние: открыт`,`${n.title} (#${n.number})`,`Автор: ${n.author.login}, создано ${n.createdAt}`,n.labels.length?`Метки: ${n.labels.map(e=>e.name).join(`, `)}`:`Метки: нет`,`Комментариев: ${n.comments}`,i,t.commentsTruncated?`Комментарии показаны не все.`:``)}});let d={props:r,emit:a,detail:o,loading:s,error:c,comments:l,UiHint:u,TrackerComments:m,TrackerDetail:g};return Object.defineProperty(d,"__isScriptSetup",{enumerable:!1,value:!0}),d}}),v={key:0};function y(i,a,s,u,f,p){return l(),r(u.TrackerDetail,{"project-id":s.projectId,loading:u.loading,error:u.error,ready:!!u.detail,noun:`issue`,state:u.detail?.issue.state??``,"state-label":u.detail?.issue.state===`closed`?`закрыт`:`открыт`,title:u.detail?.issue.title??``,number:u.detail?.issue.number??s.number,author:u.detail?.issue.author??{login:``,avatarUrl:``},"created-at":u.detail?.issue.createdAt??``,"html-url":u.detail?.issue.htmlUrl??``,labels:u.detail?.issue.labels??[],body:u.detail?.issue.body??``,reactions:u.detail?.issue.reactions??[],host:s.host,onOpen:a[1]||=e=>u.emit(`open`,e)},{meta:e(()=>[u.detail?.issue.comments?(l(),o(`span`,v,d(u.detail.issue.comments)+` комментариев`,1)):n(`v-if`,!0)]),default:e(()=>[t(u.TrackerComments,{"project-id":s.projectId,title:`Комментарии`,empty:`Комментариев нет`,items:u.comments,onOpen:a[0]||=e=>u.emit(`open`,e)},null,8,[`project-id`,`items`]),u.detail?.commentsTruncated?(l(),r(u.UiHint,{key:0,size:`xs`,leading:`inherit`,"space-before":2,class:`note`},{default:e(()=>[c(` Показаны первые 500 комментариев. Откройте issue на `+d(s.host)+`, чтобы увидеть все. `,1)]),_:1})):n(`v-if`,!0)]),_:1},8,[`project-id`,`loading`,`error`,`ready`,`state`,`state-label`,`title`,`number`,`author`,`created-at`,`html-url`,`labels`,`body`,`reactions`,`host`])}var b=a(_,[[`render`,y],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/workspace/modules/viewers/ui/IssueView.vue`]]);export{b as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.save-error[data-v-c3acaa08]{color:var(--err);font-size:var(--fs-xs);padding:10px var(--sp-4);border-bottom:1px solid var(--line);margin:0}.save-error button[data-v-c3acaa08]{text-decoration:underline}.markdown-body[data-v-c3acaa08]{flex:1;min-height:0;overflow:hidden}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/CodeViewer-BAgvP3Yx.js","assets/_plugin-vue_export-helper-C4wFX7Eq.js","assets/shared.esm-bundler-EUzHGNqQ.js","assets/dist-dwBOnDaY.js","assets/styles-C07CLvbW.js","assets/styles-CX3Ni7dk.css","assets/preload-helper-BLdHbfdN.js","assets/dist-23D313r2.js","assets/UiPanel-CND7Qs_n.js","assets/UiPanel-CS77nWcC.css","assets/main-DEEGhxlk.js","assets/github-emoji-C2UmmDoA.js","assets/ImageViewport-lPITcKgO.js","assets/ImageViewport-BXN_-Ztv.css","assets/github-emoji-qJihbtN6.css","assets/UiViewerPage-z_s1uFHO.js","assets/external-link-BFTqPI03.js","assets/UiViewerPage-BOvnLith.css","assets/main-CgMl4Qjs.css","assets/dist-CRLdLpSX.js","assets/editor-theme-DuQQ8n56.js","assets/CodeViewer-QIU6uQDH.css"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{$ as e,C as t,S as n,_ as r,ct as i,et as a,g as o,h as s,it as c,l,t as u,v as d,w as f,x as p,z as m}from"./_plugin-vue_export-helper-C4wFX7Eq.js";import{D as h}from"./styles-C07CLvbW.js";import{tt as g}from"./shared.esm-bundler-EUzHGNqQ.js";import{t as _}from"./UiPanel-CND7Qs_n.js";import{t as v}from"./preload-helper-BLdHbfdN.js";import{k as y,t as b}from"./main-DEEGhxlk.js";import{t as x}from"./VisualMarkdownEditor-CwwWF0eb.js";var S={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function C(e,t){return m(),d(`svg`,S,[...t[0]||=[s(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`m18 16l4-4l-4-4M6 8l-4 4l4 4m8.5-12l-5 16`},null,-1)]])}var w=c({name:`lucide-code-xml`,render:C}),T=f({__name:`MarkdownViewer`,props:{projectId:{type:String,required:!0},path:{type:String,required:!0},scope:{type:Object,required:!1},content:{type:String,required:!0},mode:{type:String,required:!0},error:{type:String,required:!1},editable:{type:Boolean,required:!1,default:!0},line:{type:Number,required:!1},endLine:{type:Number,required:!1},column:{type:Number,required:!1}},emits:[`change`,`mode`,`save`,`command`,`open`],setup(e,{expose:n,emit:r}){n();let a=t(()=>v(()=>import(`./CodeViewer-BAgvP3Yx.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21]))),o=r,s=i(``);function c(e){let t=e.currentTarget,n=e.relatedTarget;n instanceof Node&&t.contains(n)||o(`save`)}let l={CodeViewer:a,emit:o,editorError:s,focusOut:c,UiPanel:_,UiButton:h,get IconCode(){return w},get IconDocument(){return y},EditorTopbarActions:b,VisualMarkdownEditor:x};return Object.defineProperty(l,"__isScriptSetup",{enumerable:!1,value:!0}),l}}),E={key:0,class:`save-error`,role:`alert`},D={key:1,class:`save-error`,role:`alert`},O={class:`markdown-body`};function k(t,i,c,u,f,h){return m(),o(u.UiPanel,{class:`markdown-viewer`,"aria-label":`Документ Markdown`,onFocusout:u.focusOut},{default:e(()=>[c.error?(m(),d(`p`,E,g(c.error),1)):r(`v-if`,!0),u.editorError&&c.mode===`document`?(m(),d(`p`,D,[p(g(u.editorError)+` `,1),s(`button`,{onClick:i[0]||=e=>u.emit(`mode`,`source`)},`Открыть исходник`)])):r(`v-if`,!0),n(u.EditorTopbarActions,null,{default:e(()=>[n(u.UiButton,{shape:`icon`,size:`sm`,"aria-label":c.mode===`source`?`Показать как документ`:`Показать исходник`,title:c.mode===`source`?`Режим документа (WYSIWYG)`:`Режим исходника (Markdown)`,onClick:i[1]||=e=>u.emit(`command`,`ide.editor.markdown.toggleSource`)},{default:e(()=>[c.mode===`source`?(m(),o(u.IconDocument,{key:0,"aria-hidden":`true`})):(m(),o(u.IconCode,{key:1,"aria-hidden":`true`}))]),_:1},8,[`aria-label`,`title`])]),_:1}),s(`div`,O,[a(n(u.VisualMarkdownEditor,{path:c.path,editable:c.editable!==!1,"project-id":c.projectId,scope:c.scope,content:c.content,onChange:i[2]||=e=>u.emit(`change`,e),onOpen:i[3]||=e=>u.emit(`open`,e),onSource:i[4]||=e=>u.emit(`mode`,`source`),onCommand:i[5]||=(e,t)=>u.emit(`command`,e,t),onError:i[6]||=e=>u.editorError=e},null,8,[`path`,`editable`,`project-id`,`scope`,`content`]),[[l,c.mode===`document`]]),c.mode===`source`?(m(),o(u.CodeViewer,{key:0,path:c.path,"project-id":c.projectId,content:c.content,line:c.line,"end-line":c.endLine,column:c.column,editable:c.editable!==!1,onChange:i[7]||=e=>u.emit(`change`,e),onSave:i[8]||=e=>u.emit(`save`)},null,8,[`path`,`project-id`,`content`,`line`,`end-line`,`column`,`editable`])):r(`v-if`,!0)])]),_:1})}var A=u(T,[[`render`,k],[`__scopeId`,`data-v-c3acaa08`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/workspace/modules/viewers/ui/MarkdownViewer.vue`]]);export{A as default};
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import{$ as e,S as t,V as n,Z as r,_ as i,ct as a,dt as o,f as s,g as c,h as l,it as u,m as d,t as f,v as p,w as m,x as h,z as g}from"./_plugin-vue_export-helper-C4wFX7Eq.js";import{D as _,E as v,N as y,_ as b,m as x,v as S,y as C}from"./styles-C07CLvbW.js";import{q as w,tt as T}from"./shared.esm-bundler-EUzHGNqQ.js";import{A as E,I as D,L as O,Q as k,X as A,Z as j}from"./dist-dwBOnDaY.js";import{a as M,d as ee,u as N}from"./UiViewerPage-z_s1uFHO.js";import{d as P,f as F,g as I,j as L}from"./main-DEEGhxlk.js";import{n as R,r as z,t as te}from"./TrackerDetail-CV0Qqzx3.js";var B={mergeable:`можно вливать`,checking:`проверяется`,preparing:`готовится`,ci_still_running:`pipeline идёт`,ci_must_pass:`нужен успешный pipeline`,status_checks_must_pass:`нужны status checks`,approvals_syncing:`одобрения синхронизируются`,not_approved:`нужно одобрение`,blocked_status:`заблокирован`,merge_request_blocked:`ждёт другой merge request`,conflict:`конфликт`,discussions_not_resolved:`обсуждения не решены`,draft_status:`черновик`,commits_status:`нет коммитов`,merge_time:`время merge не наступило`,requested_changes:`запрошены изменения`,security_policy_violations:`нарушена security policy`,jira_association_missing:`нет связи с Jira`},V=new Set([`conflict`,`discussions_not_resolved`,`draft_status`,`not_approved`,`requested_changes`,`security_policy_violations`]),H=new Set([`checking`,`preparing`,`ci_still_running`,`ci_must_pass`,`status_checks_must_pass`,`approvals_syncing`,`blocked_status`,`merge_request_blocked`,`merge_time`,`jira_association_missing`]);function U(e){return e?B[e]??e:``}function W(e){return e===`mergeable`?`success`:V.has(e)?`danger`:H.has(e)?`warning`:`muted`}function G(e,t,n){return P({projectId:e,action:`pull-diff`,params:()=>({number:String(t())}),errorFallback:`Не удалось прочитать изменения`,resetOn:n})}var K={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function q(e,t){return g(),p(`svg`,K,[...t[0]||=[l(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[l(`path`,{d:`M8 5h13m-8 7h8m-8 7h8M3 10a2 2 0 0 0 2 2h3`}),l(`path`,{d:`M3 5v12a2 2 0 0 0 2 2h3`})],-1)]])}var J=u({name:`lucide-list-tree`,render:q}),Y=m({__name:`PullRequestFiles`,props:{files:{type:Array,required:!0},changedFiles:{type:Number,required:!0},changedFilesCapped:{type:Boolean,required:!1},filesTruncated:{type:Boolean,required:!0},diffRefs:{type:Object,required:!1},expanded:{type:Set,required:!0},heights:{type:Object,required:!0},diffs:{type:Object,required:!0},host:{type:String,required:!1}},emits:[`toggle`,`toggleAll`,`open`,`openTree`,`resize`],setup(e,{expose:t,emit:n}){t();let r=e,i=n,{resolver:a}=I(),o=d(()=>r.host??`GitLab`),s={added:`A`,removed:`D`,modified:`M`,renamed:`R`,copied:`C`,changed:`M`,unchanged:`·`},c=d(()=>r.files.map(e=>{let t=e.path.split(`/`).at(-1);return{path:e.path,name:t,directory:e.path.split(`/`).slice(0,-1).join(`/`),icon:a.value.resolve({name:t,path:e.path,directory:!1},!1),previousPath:e.previousPath,mark:s[e.status],additions:e.additions,deletions:e.deletions,binary:!!e.binary,tooLarge:e.tooLarge,generated:e.generated,expandable:!!r.diffRefs&&!e.binary&&!e.tooLarge,openable:!!r.diffRefs&&!e.binary&&!e.tooLarge,disabledTitle:r.diffRefs?e.binary?`Бинарный файл`:e.tooLarge?`Файл слишком большой для diff`:`Показать изменения`:`Diff недоступен`,share:e.additions+e.deletions?e.additions/(e.additions+e.deletions):0}})),l={props:r,emit:i,resolver:a,host:o,MARK:s,files:c,textFiles:d(()=>c.value.filter(e=>e.expandable)),additions:d(()=>r.files.reduce((e,t)=>e+t.additions,0)),deletions:d(()=>r.files.reduce((e,t)=>e+t.deletions,0)),showTrees:d(()=>!!r.diffRefs),totalFiles:d(()=>r.changedFilesCapped?`${r.changedFiles}+`:String(r.changedFiles)),UiButton:_,UiHeading:y,UiHint:v,ChangedFileRow:F,get IconTree(){return J}};return Object.defineProperty(l,"__isScriptSetup",{enumerable:!1,value:!0}),l}}),X={class:`changes`},Z={class:`head`},Q={class:`count`},ne={class:`totals`},re={class:`add`},ie={class:`del`},ae={key:1,class:`file-list`};function oe(r,a,o,u,d,f){return g(),p(`section`,X,[l(`div`,Z,[t(u.UiHeading,{as:`h3`,size:`sm`,tone:`secondary`,"space-after":0},{default:e(()=>[a[2]||=h(` Изменённые файлы `,-1),l(`span`,Q,T(u.files.length),1)]),_:1}),l(`span`,ne,[l(`b`,re,`+`+T(u.additions),1),l(`b`,ie,`−`+T(u.deletions),1)]),u.showTrees?(g(),p(`button`,{key:0,type:`button`,class:`tree-button`,"data-command":`ide.mergeRequest.files.open`,title:`Открыть дерево изменений в боковой панели`,onClick:a[0]||=e=>u.emit(`openTree`)},[t(u.IconTree,{"aria-hidden":`true`}),a[3]||=h(` Дерево `,-1)])):i(`v-if`,!0),u.textFiles.length&&o.diffRefs?(g(),c(u.UiButton,{key:1,size:`sm`,"data-command":`ide.mergeRequest.files.toggleAll`,onClick:a[1]||=e=>u.emit(`toggleAll`)},{default:e(()=>[h(T(o.expanded.size?`Свернуть всё`:`Развернуть всё`),1)]),_:1})):i(`v-if`,!0)]),u.files.length?(g(),p(`ul`,ae,[(g(!0),p(s,null,n(u.files,e=>(g(),c(u.ChangedFileRow,{key:e.path,file:e,expanded:o.expanded.has(e.path),diff:o.diffs[e.path],height:o.heights[e.path],"open-command":`ide.mergeRequest.file.open`,host:u.host,onToggle:t=>u.emit(`toggle`,e.path,t),onOpen:t=>u.emit(`open`,e.path),onResize:t=>u.emit(`resize`,e.path,t)},null,8,[`file`,`expanded`,`diff`,`height`,`host`,`onToggle`,`onOpen`,`onResize`]))),128))])):(g(),c(u.UiHint,{key:0,size:`xs`,leading:`inherit`,"space-before":2,class:`note`},{default:e(()=>[...a[4]||=[h(`Файлов нет`,-1)]]),_:1})),o.filesTruncated||o.changedFilesCapped?(g(),c(u.UiHint,{key:2,size:`xs`,leading:`inherit`,"space-before":2,class:`note`},{default:e(()=>[h(` Показано `+T(u.files.length)+` из `+T(u.totalFiles)+` файлов. Остальные — на `+T(u.host)+`. `,1)]),_:1})):i(`v-if`,!0),o.filesTruncated&&u.files.length?(g(),c(u.UiHint,{key:3,size:`xs`,leading:`inherit`,"space-before":2,class:`note`},{default:e(()=>[...a[5]||=[h(` Суммы +/− посчитаны по показанным файлам. `,-1)]]),_:1})):i(`v-if`,!0),o.diffRefs?i(`v-if`,!0):(g(),c(u.UiHint,{key:4,size:`xs`,leading:`inherit`,"space-before":2,class:`note`},{default:e(()=>[h(` Diff файлов этого источника пока недоступен. Изменённые файлы можно посмотреть на `+T(u.host)+`. `,1)]),_:1}))])}var se=f(Y,[[`render`,oe],[`__scopeId`,`data-v-7daf4b69`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/workspace/modules/viewers/ui/PullRequestFiles.vue`]]),ce=new Set([`queued`,`running`]);function le(e,t){let n=o(),i=a(!1),s=a(``),c=a(0);return r(()=>[e(),t(),c.value],async([e,t],r,a)=>{let o=new AbortController,l=!0,u;a(()=>{l=!1,clearTimeout(u),o.abort()}),i.value=!n.value,s.value=``;try{let r=await E(e,`pipeline`,{id:String(t)},o.signal);if(!l)return;n.value=r,ce.has(r.pipeline.status)&&(u=setTimeout(()=>c.value++,1e4))}catch(e){l&&(s.value=e instanceof Error?e.message:`Не удалось открыть pipeline`)}finally{l&&(i.value=!1)}},{immediate:!0}),{detail:n,loading:i,error:s,reload:()=>c.value++}}var ue=m({__name:`PullRequestPipelineStages`,props:{projectId:{type:String,required:!0},id:{type:Number,required:!0},host:{type:String,required:!0}},emits:[`openJob`],setup(e,{expose:t,emit:n}){t();let r=e,i=n,{detail:a,error:o}=le(()=>r.projectId,()=>r.id),s={props:r,emit:i,detail:a,error:o,groups:d(()=>D(a.value?.jobs??[])),UiHint:v,UiStatusDot:C,get durationLabel(){return k},get PIPELINE_STATUS_TONE(){return j}};return Object.defineProperty(s,"__isScriptSetup",{enumerable:!1,value:!0}),s}}),de={class:`stages`},fe={class:`stage-head`},pe={class:`stage-name`},me={class:`stage-count`},he={class:`stage-summary`},ge={key:0,class:`jobs`},_e=[`title`,`onClick`],ve={class:`job-name`},ye={key:0,class:`job-time`},be={class:`job-number`},xe={key:0,class:`more`};function Se(r,a,o,u,d,f){return g(),p(`div`,de,[!u.detail&&!u.error?(g(),c(u.UiHint,{key:0,size:`xs`,leading:`inherit`,class:`note`,role:`status`},{default:e(()=>[...a[0]||=[h(`загрузка: стадии…`,-1)]]),_:1})):u.error?(g(),c(u.UiHint,{key:1,size:`xs`,leading:`inherit`,class:`note error`,role:`alert`},{default:e(()=>[h(T(u.error),1)]),_:1})):u.groups.length?i(`v-if`,!0):(g(),c(u.UiHint,{key:2,size:`xs`,leading:`inherit`,class:`note`},{default:e(()=>[...a[1]||=[h(`Джобов нет`,-1)]]),_:1})),(g(!0),p(s,null,n(u.groups,e=>(g(),p(`div`,{key:e.stage,class:`stage`},[l(`div`,fe,[t(u.UiStatusDot,{tone:e.tone,shrink:``},null,8,[`tone`]),l(`span`,pe,T(e.stage),1),l(`span`,me,T(e.done)+`/`+T(e.total),1),l(`span`,he,T(e.summary.join(` · `)),1)]),e.visible.length?(g(),p(`div`,ge,[(g(!0),p(s,null,n(e.visible,e=>(g(),p(`button`,{key:e.id,type:`button`,class:`job`,title:e.failureReason||`Открыть джоб #${e.id}`,onClick:t=>u.emit(`openJob`,{id:e.id,title:e.name})},[t(u.UiStatusDot,{tone:u.PIPELINE_STATUS_TONE[e.status],shrink:``},null,8,[`tone`]),l(`span`,ve,T(e.name||`Job #${e.id}`),1),u.durationLabel(e.duration)?(g(),p(`span`,ye,T(u.durationLabel(e.duration)),1)):i(`v-if`,!0),l(`span`,be,`#`+T(e.id),1)],8,_e))),128)),e.hidden?(g(),p(`span`,xe,`ещё `+T(e.hidden)+` · откройте pipeline`,1)):i(`v-if`,!0)])):i(`v-if`,!0)]))),128)),u.detail?.jobsTruncated?(g(),c(u.UiHint,{key:3,size:`xs`,leading:`inherit`,class:`note`},{default:e(()=>[h(` Показаны не все джобы — остальные на `+T(o.host)+`. `,1)]),_:1})):i(`v-if`,!0)])}var Ce=f(ue,[[`render`,Se],[`__scopeId`,`data-v-7b33ebd1`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/workspace/modules/viewers/ui/PullRequestPipelineStages.vue`]]),we=m({__name:`PullRequestPipeline`,props:{projectId:{type:String,required:!0},pipeline:{type:Object,required:!0},host:{type:String,required:!1,default:`GitLab`}},emits:[`openPipeline`,`openJob`],setup(e,{expose:t,emit:n}){t();let r=e,i=n,o=a(!1),s=S(`merge-request-pipeline:${r.projectId}:${r.pipeline.id}`,()=>({surface:`merge-request-pipeline`,projectId:r.projectId,pipelineId:r.pipeline.id})),c=b(s.scope);c(`ide.mergeRequest.pipeline.toggle`,`Показать или скрыть стадии pipeline merge request`,`Раскрывает ход pipeline по стадиям прямо в карточке merge request.`,()=>{o.value=!o.value});let l={props:r,emit:i,open:o,commands:s,register:c,UiButton:_,UiStatusDot:C,get relativeTime(){return M},get durationLabel(){return k},get PIPELINE_STATUS_LABEL(){return A},get PIPELINE_STATUS_TONE(){return j},PullRequestPipelineStages:Ce,get IconChevronRight(){return L}};return Object.defineProperty(l,"__isScriptSetup",{enumerable:!1,value:!0}),l}}),Te={class:`pipeline-card`},Ee={class:`summary-row`},De=[`aria-expanded`,`title`],Oe={class:`title`},ke={class:`state`},Ae={key:0,class:`meta`},je=[`title`],Me=[`href`];function Ne(n,r,a,o,s,u){return g(),p(`div`,Te,[l(`div`,Ee,[l(`button`,{type:`button`,class:`summary`,"aria-expanded":o.open,"data-command":`ide.mergeRequest.pipeline.toggle`,title:o.open?`Свернуть стадии`:`Показать стадии`,onClick:r[0]||=e=>o.open=!o.open},[t(o.IconChevronRight,{class:w([`chevron`,{open:o.open}]),"aria-hidden":`true`},null,8,[`class`]),t(o.UiStatusDot,{tone:o.PIPELINE_STATUS_TONE[a.pipeline.status],shrink:``},null,8,[`tone`]),l(`span`,Oe,`Pipeline #`+T(a.pipeline.id),1),l(`span`,ke,T(o.PIPELINE_STATUS_LABEL[a.pipeline.status]),1),o.durationLabel(a.pipeline.duration)?(g(),p(`span`,Ae,`за `+T(o.durationLabel(a.pipeline.duration)),1)):i(`v-if`,!0),a.pipeline.createdAt?(g(),p(`span`,{key:1,class:`meta`,title:a.pipeline.createdAt},`создан `+T(o.relativeTime(a.pipeline.createdAt)),9,je)):i(`v-if`,!0)],8,De),t(o.UiButton,{size:`sm`,"data-command":`ide.mergeRequest.pipeline.open`,onClick:r[1]||=e=>o.emit(`openPipeline`,{id:o.props.pipeline.id,title:o.props.pipeline.name})},{default:e(()=>[...r[3]||=[h(` Открыть `,-1)]]),_:1}),a.pipeline.webUrl?(g(),p(`a`,{key:0,class:`external`,href:a.pipeline.webUrl,target:`_blank`,rel:`noopener noreferrer`},`на `+T(a.host),9,Me)):i(`v-if`,!0)]),o.open?(g(),c(o.PullRequestPipelineStages,{key:0,"project-id":a.projectId,id:a.pipeline.id,host:a.host,onOpenJob:r[2]||=e=>o.emit(`openJob`,e)},null,8,[`project-id`,`id`,`host`])):i(`v-if`,!0)])}var Pe=f(we,[[`render`,Ne],[`__scopeId`,`data-v-7894caf3`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/workspace/modules/viewers/ui/PullRequestPipeline.vue`]]),$=m({__name:`PullRequestView`,props:{projectId:{type:String,required:!0},number:{type:Number,required:!0},host:{type:String,required:!1,default:`GitHub`},short:{type:String,required:!1,default:`PR`},noun:{type:String,required:!1,default:`pull request`},onOpenSection:{type:Function,required:!1},onOpenPullFile:{type:Function,required:!1},onOpenJob:{type:Function,required:!1}},emits:[`open`,`openPipeline`],setup(e,{expose:t,emit:n}){t();let r=e,i=n,{detail:a,loading:o,error:s,reload:c}=z(()=>r.projectId,()=>r.number,`pull`,`Не удалось открыть ${r.noun}`),l=d(()=>a.value?.diffRefs?.headSha??``),u=d(()=>a.value?.mergeStatus??``),{expanded:f,heights:p,diffs:m,toggle:h}=G(()=>r.projectId,()=>r.number,()=>l.value),g=d(()=>(a.value?.files??[]).filter(e=>!e.binary&&!e.tooLarge)),_=S(`merge-request:${r.projectId}:${r.number}`,()=>({surface:`merge-request`,projectId:r.projectId,number:r.number})),y=b(_.scope),w={open:`открыт`,closed:`закрыт`,merged:`влит`},T={approved:`одобрил`,changes_requested:`запросил изменения`,commented:`прокомментировал`,dismissed:`ревью отклонено`,pending:`черновик ревью`},E={added:`A`,removed:`D`,modified:`M`,renamed:`R`,copied:`C`,changed:`M`,unchanged:`·`},D=e=>e.previousPath?`${e.previousPath} → ${e.path}`:e.path,k=d(()=>(a.value?.reviews??[]).map(e=>({...e,at:e.submittedAt,badge:T[e.state],badgeClass:e.state}))),j=d(()=>(a.value?.comments??[]).map(e=>({...e,at:e.createdAt}))),M=d(()=>{let e=a.value?.pull;return e?.draft&&e.state===`open`?`черновик`:w[e?.state??`open`]}),P=d(()=>a.value?.pipeline??null),F=d(()=>new Set((a.value?.reviews??[]).map(e=>e.author.login))),I=d(()=>{let e=new Set,t=(a.value?.reviewers??[]).map(t=>(e.add(t.login),{author:t,approved:F.value.has(t.login)}));for(let n of a.value?.approvals?.approvedBy??[])e.has(n.login)||(e.add(n.login),t.push({author:n,approved:!0}));return t.sort((e,t)=>Number(t.approved)-Number(e.approved))}),L=()=>{P.value&&i(`openPipeline`,{id:P.value.id,title:P.value.name})},B=()=>{let e=a.value;r.onOpenSection?.({id:`merge-request-files:${r.number}`,title:`Изменения !${r.number}`,source:`Только чтение · MR`,group:`merge-requests`,kind:`merge-request-files`,params:{number:r.number,head:l.value,...e?{snapshot:{files:e.files,changedFiles:e.changedFiles,changedFilesCapped:e.changedFilesCapped===!0,filesTruncated:e.filesTruncated,...e.diffRefs?{diffRefs:e.diffRefs}:{}}}:{}},closable:!0})},V=(e,t=!1)=>r.onOpenPullFile?.(r.number,e,l.value,t),H=e=>r.onOpenJob?.(e);y(`ide.mergeRequest.refresh`,`Обновить merge request`,`Перечитывает состояние, ревью, обсуждение и изменённые файлы merge request.`,()=>c()),y(`ide.mergeRequest.files.open`,`Дерево изменений merge request`,`Открывает временный раздел боковой панели с деревом изменённых файлов merge request.`,()=>B()),y(`ide.mergeRequest.file.open`,`Открыть изменения файла merge request`,`Открывает файл merge request отдельной вкладкой base → head.`,e=>{let{path:t,pinned:n}=x(e);if(typeof t!=`string`||!t)throw Error(`Укажите path файла`);V(t,n===!0)},{path:`string: путь файла в merge request`,pinned:`boolean (необязательно): true — постоянная вкладка`}),y(`ide.mergeRequest.file.toggle`,`Раскрыть изменения файла merge request`,`Раскрывает diff файла прямо в карточке merge request.`,async e=>{let{path:t,open:n}=x(e);if(typeof t!=`string`||!t)throw Error(`Укажите path файла`);if(n!==void 0&&typeof n!=`boolean`)throw Error(`open должен быть boolean`);await h(t,n)},{path:`string: путь файла`,open:`boolean (необязательно): true/false`}),y(`ide.mergeRequest.files.toggleAll`,`Раскрыть или свернуть все файлы merge request`,`Раскрывает diff всех текстовых файлов merge request или сворачивает их.`,async e=>{let{open:t}=x(e);(typeof t==`boolean`?t:f.value.size===0)?await Promise.all(g.value.map(e=>h(e.path,!0))):f.value.clear()},{open:`boolean (необязательно): true — раскрыть всё, false — свернуть`}),y(`ide.mergeRequest.pipeline.open`,`Открыть pipeline merge request`,`Открывает вкладку последнего pipeline источника merge request.`,()=>L()),y(`ide.mergeRequest.pipeline.job.open`,`Открыть джоб merge request`,`Открывает вкладку джоба pipeline merge request.`,e=>{let{id:t,title:n}=x(e);if(typeof t!=`number`)throw Error(`Укажите номер джоба`);H({id:t,title:typeof n==`string`?n:``})},{id:`number: номер джоба`,title:`string (необязательно): заголовок`}),ee(()=>{let e=`${r.short} #${a.value?.pull.number??r.number}`;if(s.value)return{note:e,text:`Ошибка: ${s.value}`};let t=a.value;if(!t)return{note:e,text:`Загрузка…`};let n=t.pull,i=n.body.length>4e3?`${n.body.slice(0,4e3)}…`:n.body,o=t.reviews.map(e=>`${T[e.state]}: ${e.author.login}`),c=t.files.map(e=>`${E[e.status]} ${D(e)}`),l=c.slice(0,100);return{note:e,text:N(`Состояние: ${M.value}`,`${n.title} (#${n.number})`,`Автор: ${n.author.login}, создано ${n.createdAt}`,`Ветки: ${n.head} → ${n.base}`,u.value?`Готовность: ${U(u.value)}`:``,t.diffRefs?`Diff: ${t.diffRefs.baseSha.slice(0,7)}..${t.diffRefs.headSha.slice(0,7)}`:`Diff ещё не подготовлен`,`Коммитов: ${t.commits}, файлов: ${t.changedFiles}, +${t.additions} −${t.deletions}`,t.pipeline?`Pipeline: #${t.pipeline.id} ${A[t.pipeline.status]}`:``,I.value.length?`Ревьюеры: ${I.value.map(e=>`${e.author.login}${e.approved?` (одобрил)`:``}`).join(`, `)}`:``,n.labels.length?`Метки: ${n.labels.map(e=>e.name).join(`, `)}`:`Метки: нет`,`Комментариев: ${t.comments.length}`,o.length?`Ревью (${o.length}):\n${o.join(`
|
|
2
|
-
`)}`:`Ревью: нет`,c.length?`Файлы (${c.length}):\n${l.join(`
|
|
3
|
-
`)}${c.length>l.length?`\n… ещё ${c.length-l.length}`:``}`:`Файлы: нет`,t.filesTruncated?`Файлы показаны не все (${t.files.length} из ${t.changedFiles}${t.changedFilesCapped?`+`:``}).`:``,t.commentsTruncated?`Комментарии показаны не все.`:``,i)}});let K={props:r,emit:i,detail:a,loading:o,error:s,reload:c,headSha:l,mergeStatus:u,expanded:f,heights:p,diffs:m,toggleFile:h,textFiles:g,commands:_,register:y,STATE_LABEL:w,REVIEW_LABEL:T,FILE_MARK:E,filePath:D,reviews:k,comments:j,stateLabel:M,pipeline:P,approvedLogins:F,reviewers:I,openPipeline:L,openChangesTree:B,openFile:V,openJob:H,UiHint:v,UiStatusDot:C,get countRu(){return O},get mergeStatusLabel(){return U},get mergeStatusTone(){return W},TrackerComments:R,TrackerDetail:te,PullRequestFiles:se,PullRequestPipeline:Pe};return Object.defineProperty(K,"__isScriptSetup",{enumerable:!1,value:!0}),K}}),Fe={class:`branches`},Ie={key:0,class:`conflict`},Le={key:1,class:`conflict`},Re={key:2,class:`review-line`},ze={key:0,class:`stats`},Be={class:`add`},Ve={class:`del`};function He(r,a,o,u,d,f){return g(),c(u.TrackerDetail,{"project-id":o.projectId,loading:u.loading,error:u.error,ready:!!u.detail,noun:o.noun,state:u.detail?.pull.state??``,"state-label":u.stateLabel,title:u.detail?.pull.title??``,number:u.detail?.pull.number??o.number,author:u.detail?.pull.author??{login:``,avatarUrl:``},"created-at":u.detail?.pull.createdAt??``,"html-url":u.detail?.pull.htmlUrl??``,labels:u.detail?.pull.labels??[],body:u.detail?.pull.body??``,reactions:u.detail?.pull.reactions??[],host:o.host,onOpen:a[7]||=e=>u.emit(`open`,e)},{meta:e(()=>[l(`span`,Fe,T(u.detail?.pull.head)+` → `+T(u.detail?.pull.base),1)]),summary:e(()=>[u.mergeStatus&&!(u.detail?.pull.draft&&u.mergeStatus===`draft_status`)?(g(),p(`p`,{key:0,class:w([`merge-status`,u.mergeStatusTone(u.mergeStatus)])},[t(u.UiStatusDot,{tone:u.mergeStatusTone(u.mergeStatus),shrink:``},null,8,[`tone`]),l(`span`,null,T(u.mergeStatusLabel(u.mergeStatus)),1),u.detail?.hasConflicts?(g(),p(`span`,Ie,`конфликты`)):u.detail?.blockingDiscussionsResolved===!1?(g(),p(`span`,Le,`обсуждения не решены`)):i(`v-if`,!0)],2)):i(`v-if`,!0),u.pipeline?(g(),c(u.PullRequestPipeline,{key:1,"project-id":o.projectId,pipeline:u.pipeline,host:o.host,onOpenPipeline:a[0]||=e=>u.emit(`openPipeline`,e),onOpenJob:u.openJob},null,8,[`project-id`,`pipeline`,`host`])):i(`v-if`,!0),u.reviewers.length?(g(),p(`p`,Re,[a[8]||=l(`span`,{class:`approvals`},`Ревьюеры`,-1),(g(!0),p(s,null,n(u.reviewers,e=>(g(),p(`span`,{key:e.author.login,class:`reviewer`},[l(`span`,{class:w({approved:e.approved})},T(e.author.login),3),l(`span`,{class:w([`reviewer-mark`,{approved:e.approved}])},T(e.approved?`✓`:`○`),3)]))),128))])):i(`v-if`,!0)]),stats:e(()=>[u.detail?(g(),p(`p`,ze,[l(`span`,null,T(u.countRu(u.detail.commits,`коммит`,`коммита`,`коммитов`)),1),l(`span`,null,T(u.countRu(u.detail.changedFiles,`файл`,`файла`,`файлов`))+T(u.detail.changedFilesCapped?`+`:``),1),l(`span`,Be,`+`+T(u.detail.additions),1),l(`span`,Ve,`−`+T(u.detail.deletions),1)])):i(`v-if`,!0)]),default:e(()=>[u.reviews.length?(g(),c(u.TrackerComments,{key:0,"project-id":o.projectId,title:`Ревью`,items:u.reviews,onOpen:a[1]||=e=>u.emit(`open`,e)},null,8,[`project-id`,`items`])):i(`v-if`,!0),u.detail?(g(),c(u.PullRequestFiles,{key:1,files:u.detail.files,"changed-files":u.detail.changedFiles,"changed-files-capped":u.detail.changedFilesCapped,"files-truncated":u.detail.filesTruncated,"diff-refs":u.detail.diffRefs,host:o.host,expanded:u.expanded,heights:u.heights,diffs:u.diffs,onToggle:a[2]||=(e,t)=>u.commands.run(`ide.mergeRequest.file.toggle`,{path:e,open:t}),onToggleAll:a[3]||=e=>u.commands.run(`ide.mergeRequest.files.toggleAll`),onOpen:u.openFile,onOpenTree:a[4]||=e=>u.commands.run(`ide.mergeRequest.files.open`),onResize:a[5]||=(e,t)=>u.heights[e]=t},null,8,[`files`,`changed-files`,`changed-files-capped`,`files-truncated`,`diff-refs`,`host`,`expanded`,`heights`,`diffs`])):i(`v-if`,!0),t(u.TrackerComments,{"project-id":o.projectId,title:`Обсуждение`,empty:`Комментариев нет`,items:u.comments,onOpen:a[6]||=e=>u.emit(`open`,e)},null,8,[`project-id`,`items`]),u.detail?.commentsTruncated?(g(),c(u.UiHint,{key:2,size:`xs`,leading:`inherit`,"space-before":2,class:`note`},{default:e(()=>[h(` Показаны первые 500 комментариев. Откройте `+T(o.noun)+` на `+T(o.host)+`, чтобы увидеть все. `,1)]),_:1})):i(`v-if`,!0)]),_:1},8,[`project-id`,`loading`,`error`,`ready`,`noun`,`state`,`state-label`,`title`,`number`,`author`,`created-at`,`html-url`,`labels`,`body`,`reactions`,`host`])}var Ue=f($,[[`render`,He],[`__scopeId`,`data-v-c13d0f73`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/workspace/modules/viewers/ui/PullRequestView.vue`]]);export{Ue as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.changes[data-v-7daf4b69]{margin-top:var(--sp-4)}.head[data-v-7daf4b69]{align-items:baseline;gap:var(--sp-2);margin-bottom:var(--sp-2);flex-wrap:wrap;display:flex}.count[data-v-7daf4b69]{color:var(--faint);font:var(--fs-2xs) var(--mono)}.totals[data-v-7daf4b69]{font:var(--fs-2xs) var(--mono);margin-left:auto}.tree-button[data-v-7daf4b69]{align-items:center;gap:var(--sp-1);padding:2px var(--sp-2);border:1px solid var(--line);border-radius:var(--r-sm);color:var(--muted);font-size:var(--fs-2xs);display:inline-flex}.tree-button[data-v-7daf4b69]:hover{color:var(--text);border-color:var(--line-strong)}.tree-button svg[data-v-7daf4b69]{width:13px;height:13px}.file-list[data-v-7daf4b69]{border:1px solid var(--line);border-radius:var(--r-md);margin:0;padding:0;list-style:none;overflow:hidden}.file-list li+li[data-v-7daf4b69]{border-top:1px solid var(--line)}.add[data-v-7daf4b69],.del[data-v-7daf4b69]{font:var(--fs-2xs) var(--mono);flex-shrink:0}.add[data-v-7daf4b69]{color:var(--run)}.del[data-v-7daf4b69]{color:var(--err)}.stages[data-v-7b33ebd1]{padding:0 var(--sp-3) var(--sp-2)}.stage+.stage[data-v-7b33ebd1]{margin-top:var(--sp-1)}.stage-head[data-v-7b33ebd1]{align-items:center;gap:var(--sp-2);padding:var(--sp-1) 0;color:var(--muted);font-size:var(--fs-2xs);display:flex}.stage-name[data-v-7b33ebd1]{color:var(--text-2);font-weight:500}.stage-count[data-v-7b33ebd1]{font-family:var(--mono)}.stage-summary[data-v-7b33ebd1]{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--faint);overflow:hidden}.jobs[data-v-7b33ebd1]{padding-left:var(--sp-4);flex-direction:column;gap:2px;display:flex}.job[data-v-7b33ebd1]{align-items:center;gap:var(--sp-2);padding:2px var(--sp-2);border-radius:var(--r-sm);text-align:left;color:var(--text-2);font-size:var(--fs-2xs);display:flex}.job[data-v-7b33ebd1]:hover{background:var(--active);color:var(--text)}.job-name[data-v-7b33ebd1]{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.job-time[data-v-7b33ebd1],.job-number[data-v-7b33ebd1]{color:var(--muted);font-family:var(--mono)}.more[data-v-7b33ebd1]{padding:1px var(--sp-2);color:var(--faint);font-size:var(--fs-2xs)}.note[data-v-7b33ebd1]{margin:var(--sp-1) 0 0}.pipeline-card[data-v-7894caf3]{margin-top:var(--sp-3);border:1px solid var(--line);border-radius:var(--r-md);background:var(--bg-2);font-size:var(--fs-xs)}.summary-row[data-v-7894caf3]{align-items:center;gap:var(--sp-2);padding:var(--sp-2) var(--sp-3);min-width:0;display:flex}.summary[data-v-7894caf3]{align-items:center;gap:var(--sp-2);text-align:left;min-width:0;color:var(--text-2);flex:1;display:flex}.summary[data-v-7894caf3]:hover{color:var(--text)}.chevron[data-v-7894caf3]{width:12px;height:12px;color:var(--faint);transition:transform var(--t-fast);flex-shrink:0}.chevron.open[data-v-7894caf3]{transform:rotate(90deg)}.title[data-v-7894caf3]{font-family:var(--mono);white-space:nowrap}.state[data-v-7894caf3]{color:var(--muted);white-space:nowrap}.meta[data-v-7894caf3]{color:var(--faint);font-size:var(--fs-2xs);white-space:nowrap}.external[data-v-7894caf3]{color:var(--muted);font-size:var(--fs-2xs);white-space:nowrap;text-decoration:underline}.branches[data-v-c13d0f73]{font-family:var(--mono);color:var(--text-2)}.stats[data-v-c13d0f73]{gap:var(--sp-2);margin:var(--sp-2) 0 0;color:var(--muted);font-size:var(--fs-xs);display:flex}.merge-status[data-v-c13d0f73]{align-items:center;gap:var(--sp-2);margin:var(--sp-2) 0 0;padding:var(--sp-1) var(--sp-2);border:1px solid var(--line);border-radius:var(--r-md);background:var(--bg-2);color:var(--muted);font-size:var(--fs-2xs);flex-wrap:wrap;display:flex}.merge-status.success[data-v-c13d0f73]{color:var(--run)}.merge-status.warning[data-v-c13d0f73]{color:var(--warn)}.merge-status.danger[data-v-c13d0f73],.conflict[data-v-c13d0f73]{color:var(--err)}.review-line[data-v-c13d0f73]{gap:var(--sp-2);margin:var(--sp-2) 0 0;color:var(--muted);font-size:var(--fs-2xs);flex-wrap:wrap;display:flex}.approvals[data-v-c13d0f73]{color:var(--text-2)}.reviewer[data-v-c13d0f73]{font-family:var(--mono);align-items:center;gap:2px;display:inline-flex}.reviewer .approved[data-v-c13d0f73]{color:var(--run)}.reviewer-mark[data-v-c13d0f73]{color:var(--faint)}.reviewer-mark.approved[data-v-c13d0f73]{color:var(--run)}.add[data-v-c13d0f73]{color:var(--run);font-family:var(--mono)}.del[data-v-c13d0f73]{color:var(--err);font-family:var(--mono)}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.release-assets[data-v-fa14a308]{margin-top:var(--sp-4)}.assets-head[data-v-fa14a308],.group h4[data-v-fa14a308]{align-items:baseline;gap:var(--sp-2);margin:0 0 var(--sp-1);color:var(--text-2);font-size:var(--fs-xs);font-weight:600;display:flex}.assets-head h3[data-v-fa14a308]{font-size:var(--fs-xs);margin:0;font-weight:600}.group+.group[data-v-fa14a308]{margin-top:var(--sp-3)}.count[data-v-fa14a308]{color:var(--faint);font-size:var(--fs-2xs);font-weight:400}.asset-list[data-v-fa14a308]{border-top:1px solid var(--line);margin:0;padding:0;list-style:none}.asset[data-v-fa14a308]{align-items:center;gap:var(--sp-3);padding:var(--sp-2) 0;border-bottom:1px solid var(--line);display:flex}.asset-text[data-v-fa14a308]{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.asset-name[data-v-fa14a308]{text-overflow:ellipsis;white-space:nowrap;color:var(--text-2);font-family:var(--mono);font-size:var(--fs-xs);overflow:hidden}.asset-meta[data-v-fa14a308]{gap:var(--sp-2);color:var(--muted);font-size:var(--fs-2xs);flex-wrap:wrap;display:flex}.mono[data-v-fa14a308]{font-family:var(--mono)}.asset-action[data-v-fa14a308],.pending[data-v-fa14a308]{padding:3px var(--sp-2);border:1px solid var(--line);border-radius:var(--r-sm);color:var(--text-2);font-size:var(--fs-2xs);flex-shrink:0}.asset-action[data-v-fa14a308]:hover{border-color:var(--line-strong);background:var(--hover);color:var(--text)}.pending[data-v-fa14a308]{color:var(--muted);border-color:#0000}.tag[data-v-0646b39f]{color:var(--muted);font-size:var(--fs-xs)}.mono[data-v-0646b39f]{font-family:var(--mono)}.author[data-v-0646b39f]{font-family:var(--mono);color:var(--text-2)}.body[data-v-0646b39f]{margin-top:var(--sp-3)}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{$ as e,S as t,V as n,Z as r,_ as i,ct as a,dt as o,f as s,g as c,h as l,m as u,t as d,v as f,w as p,x as m,z as h}from"./_plugin-vue_export-helper-C4wFX7Eq.js";import{E as g,M as _,_ as v,k as y,m as ee,v as b}from"./styles-C07CLvbW.js";import{tt as x}from"./shared.esm-bundler-EUzHGNqQ.js";import{A as S,L as C}from"./dist-dwBOnDaY.js";import{a as w,d as T,i as E,n as D,r as O,s as k,t as A,u as j}from"./UiViewerPage-z_s1uFHO.js";import{m as M,p as N}from"./main-DEEGhxlk.js";import{t as P}from"./VisualMarkdownEditor-CwwWF0eb.js";function F(e,t){let n=o(),i=a(!1),s=a(``),c=a(0);return r(()=>[e(),t(),c.value],async([e,t],r,a)=>{let o=new AbortController,c=!0;a(()=>{c=!1,o.abort()}),i.value=!n.value,s.value=``;try{let r=await S(e,`release`,{tag:t},o.signal);c&&(n.value=r)}catch(e){c&&(s.value=e instanceof Error?e.message:`Не удалось открыть релиз`)}finally{c&&(i.value=!1)}},{immediate:!0}),{detail:n,loading:i,error:s,reload:()=>c.value++}}var I=p({__name:`ReleaseAssets`,props:{assets:{type:Array,required:!0}},setup(e,{expose:t}){t();let n=e,r={props:n,files:u(()=>n.assets.filter(e=>!e.source)),sources:u(()=>n.assets.filter(e=>e.source)),total:u(()=>n.assets.length),UiHint:g,get countRu(){return C},get downloadsLabel(){return N},get sizeLabel(){return M}};return Object.defineProperty(r,"__isScriptSetup",{enumerable:!1,value:!0}),r}}),L={key:0,class:`release-assets`,"aria-label":`Файлы релиза`},R={class:`assets-head`},z={class:`count`},te={key:0,class:`group`},B={class:`asset-list`},V={class:`asset-text`},H=[`title`],U={class:`asset-meta`},W={key:0},G={key:1},K=[`title`],q={key:0,class:`pending`},J=[`href`],Y=[`href`,`download`],X={key:1,class:`group`},Z={class:`asset-list`},Q={class:`asset-text`},ne={class:`asset-name`},re={class:`asset-meta`},ie=[`href`,`download`];function ae(t,r,a,o,u,d){return o.total?(h(),f(`section`,L,[l(`div`,R,[r[0]||=l(`h3`,null,`Файлы`,-1),l(`span`,z,x(o.countRu(o.total,`файл`,`файла`,`файлов`)),1)]),o.files.length?(h(),f(`div`,te,[l(`ul`,B,[(h(!0),f(s,null,n(o.files,e=>(h(),f(`li`,{key:e.id,class:`asset`},[l(`span`,V,[l(`span`,{class:`asset-name`,title:e.name},x(e.name),9,H),l(`span`,U,[o.sizeLabel(e.size)?(h(),f(`span`,W,x(o.sizeLabel(e.size)),1)):i(`v-if`,!0),o.downloadsLabel(e.downloads)?(h(),f(`span`,G,x(o.downloadsLabel(e.downloads)),1)):i(`v-if`,!0),e.digest?(h(),f(`span`,{key:2,class:`mono digest`,title:e.digest},x(e.digest.length>28?`${e.digest.slice(0,28)}…`:e.digest),9,K)):i(`v-if`,!0)])]),e.uploading?(h(),f(`span`,q,`загружается`)):e.external?(h(),f(`a`,{key:1,class:`asset-action`,href:e.url,target:`_blank`,rel:`noopener noreferrer`},`Открыть`,8,J)):(h(),f(`a`,{key:2,class:`asset-action`,href:e.url,download:e.name},`Скачать`,8,Y))]))),128))])])):i(`v-if`,!0),o.sources.length?(h(),f(`div`,X,[r[1]||=l(`h4`,null,`Исходный код`,-1),l(`ul`,Z,[(h(!0),f(s,null,n(o.sources,e=>(h(),f(`li`,{key:e.id,class:`asset`},[l(`span`,Q,[l(`span`,ne,x(e.name),1),l(`span`,re,x(e.contentType),1)]),l(`a`,{class:`asset-action`,href:e.url,download:e.name},`Скачать`,8,ie)]))),128))])])):i(`v-if`,!0)])):(h(),c(o.UiHint,{key:1,size:`xs`,leading:`inherit`,"space-before":2,class:`note`},{default:e(()=>[...r[2]||=[m(`Файлов и исходников нет`,-1)]]),_:1}))}var oe=d(I,[[`render`,ae],[`__scopeId`,`data-v-fa14a308`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/workspace/modules/viewers/ui/ReleaseAssets.vue`]]),$=p({__name:`ReleaseView`,props:{projectId:{type:String,required:!0},tag:{type:String,required:!0},host:{type:String,required:!1,default:`хостинге`}},setup(e,{expose:t}){t();let n=e,{detail:r,loading:i,error:a,reload:o}=F(()=>n.projectId,()=>n.tag),s=u(()=>{let e=r.value?.release;return e?e.draft?`черновик`:e.prerelease?`пререлиз`:e.upcoming?`скоро`:``:``}),c=b(`release:${n.projectId}:${n.tag}`,()=>({surface:`release`,projectId:n.projectId,tag:n.tag,host:n.host})),l=v(c.scope);l(`ide.release.refresh`,`Обновить релиз`,`Перечитывает описание и файлы релиза.`,()=>o()),l(`ide.release.asset.download`,`Скачать файл релиза`,`Открывает внутреннюю ссылку скачивания или страницу внешнего файла.`,e=>{let{id:t}=ee(e);if(typeof t!=`string`||!t)throw Error(`Укажите id файла релиза`);let n=r.value?.assets.find(e=>e.id===t);if(!n)throw Error(`Файл релиза не найден`);if(n.uploading)throw Error(`Файл ещё загружается`);n.external?window.open(n.url,`_blank`,`noopener,noreferrer`):window.location.assign(n.url)},{id:`string: id файла релиза`}),T(()=>{let e=`Release ${n.tag}`;if(a.value)return{note:e,text:`Ошибка: ${a.value}`};let t=r.value;if(!t)return{note:e,text:`Загрузка…`};let i=t.release,o=i.name&&i.name!==i.tag?i.name:``,s=t.assets.map(e=>{let t=M(e.size),n=N(e.downloads);return`${e.source?`исходники`:e.external?`ссылка`:`файл`}: ${e.name}${t?` (${t})`:``}${n?` · ${n}`:``}`});return{note:e,text:j(`Тег: ${i.tag}`,o?`Название: ${o}`:``,`Автор: ${i.author.login||`нет`}`,`Опубликован: ${i.releasedAt||i.createdAt}`,i.draft?`Черновик`:``,i.prerelease?`Пререлиз`:``,i.upcoming?`Запланирован`:``,`Файлов: ${i.assetCount}`,i.downloads===null?``:`Скачиваний: ${i.downloads}`,t.body.length>4e3?`${t.body.slice(0,4e3)}…`:t.body,s.length?`Файлы:\n${s.slice(0,100).join(`
|
|
2
|
-
`)}`:`Файлов нет`,s.length>100?`Показано 100 файлов, остальные — на ${n.host}.`:``)}});let d={props:n,detail:r,loading:i,error:a,reload:o,releaseState:s,commands:c,register:l,UiArticle:O,UiAvatar:k,UiDetailHeader:D,UiViewerPage:A,UiHint:g,UiInline:y,UiMessage:_,get relativeTime(){return w},get absoluteTime(){return E},get downloadsLabel(){return N},VisualMarkdownEditor:P,ReleaseAssets:oe};return Object.defineProperty(d,"__isScriptSetup",{enumerable:!1,value:!0}),d}}),se={class:`tag mono`},ce=[`title`],le={key:1};function ue(n,r,a,o,s,u){return h(),c(o.UiViewerPage,null,{default:e(()=>[o.loading?(h(),c(o.UiHint,{key:0,size:`xs`,leading:`inherit`,role:`status`},{default:e(()=>[...r[0]||=[m(`загрузка: релиз…`,-1)]]),_:1})):o.error?(h(),c(o.UiMessage,{key:1,variant:`note`,tone:`danger`,size:`xs`,role:`alert`},{default:e(()=>[m(x(o.error),1)]),_:1})):o.detail?(h(),c(o.UiArticle,{key:2},{default:e(()=>[t(o.UiDetailHeader,{state:o.releaseState,tone:o.releaseState?`warning`:`neutral`,"external-href":o.detail.release.htmlUrl,host:a.host},{title:e(()=>[m(x(o.detail.release.name&&o.detail.release.name!==o.detail.release.tag?o.detail.release.name:`Релиз`)+` `,1),l(`span`,se,x(o.detail.release.tag),1)]),meta:e(()=>[t(o.UiInline,{as:`span`,inline:``,gap:1.25,justify:`normal`,class:`author`},{default:e(()=>[t(o.UiAvatar,{src:o.detail.release.author.avatarUrl,alt:o.detail.release.author.login,size:18},null,8,[`src`,`alt`]),m(` `+x(o.detail.release.author.login),1)]),_:1}),o.detail.release.releasedAt||o.detail.release.createdAt?(h(),f(`span`,{key:0,title:o.absoluteTime(o.detail.release.releasedAt||o.detail.release.createdAt)},`опубликован `+x(o.relativeTime(o.detail.release.releasedAt||o.detail.release.createdAt)),9,ce)):i(`v-if`,!0),o.detail.release.downloads?(h(),f(`span`,le,x(o.downloadsLabel(o.detail.release.downloads)),1)):i(`v-if`,!0)]),_:1},8,[`state`,`tone`,`external-href`,`host`]),o.detail.body?(h(),c(o.VisualMarkdownEditor,{key:0,class:`body`,content:o.detail.body,path:``,"project-id":a.projectId,editable:!1,compact:``},null,8,[`content`,`project-id`])):(h(),c(o.UiHint,{key:1,size:`xs`,leading:`inherit`,"space-before":2},{default:e(()=>[...r[1]||=[m(`Без описания`,-1)]]),_:1})),t(o.ReleaseAssets,{assets:o.detail.assets},null,8,[`assets`])]),_:1})):i(`v-if`,!0)]),_:1})}var de=d($,[[`render`,ue],[`__scopeId`,`data-v-0646b39f`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/workspace/modules/viewers/ui/ReleaseView.vue`]]);export{de as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.panes[data-v-29c28f37]{flex:1;min-width:0;min-height:0;display:grid}.pane-resize[data-v-29c28f37]{color:var(--text);font-size:var(--fs-2xs);line-height:var(--fs-2xs);grid-row:2;position:relative}.panes.dragging[data-v-29c28f37],.panes.dragging[data-v-29c28f37] *{-webkit-user-select:none;user-select:none;cursor:row-resize!important}.top-pane[data-v-29c28f37]{flex-direction:column;grid-row:1;min-width:0;min-height:0;display:flex;overflow:hidden}.bottom-pane[data-v-29c28f37]{border-top:1px solid var(--line);grid-row:3;min-width:0;min-height:0;overflow:hidden}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{$ as e,H as t,S as n,Z as r,ct as i,et as a,h as o,l as s,m as c,t as l,v as u,w as d,z as f}from"./_plugin-vue_export-helper-C4wFX7Eq.js";import{X as p,q as m,tt as h}from"./shared.esm-bundler-EUzHGNqQ.js";import{C as g,S as _}from"./main-DEEGhxlk.js";var v=d({__name:`SplitPanes`,props:{topLabel:{type:String,required:!1},bottomLabel:{type:String,required:!1},reveal:{type:null,required:!1},initial:{type:Number,required:!1,default:.45},solo:{type:Boolean,required:!1,default:!1}},setup(e,{expose:t}){t();let n=e,a=i(),o=i(n.initial),s=i(n.initial),l=n.initial,u=c(()=>({gridTemplateRows:n.solo?`minmax(0, 1fr)`:`minmax(0, ${o.value}fr) 12px minmax(0, ${1-o.value}fr)`})),d=c(()=>n.topLabel??`Рендер`),f=c(()=>n.bottomLabel??`Код`),p=e=>e.toLowerCase(),m=c(()=>o.value===0?`${d.value} скрыт · потяните вниз или дважды нажмите для восстановления`:o.value===1?`${f.value} скрыт · потяните вверх или дважды нажмите для восстановления`:`Соотношение высот: ${p(d.value)} / ${p(f.value)} · у краёв панель схлопывается · двойной клик восстанавливает`);function h(e){let t=e<=.1?0:e>=.9?1:e;(t===0||t===1)&&!b.value&&o.value>0&&o.value<1&&(s.value=o.value),o.value=t}function v(){o.value=s.value}let y=_({start:()=>(l=o.value,o.value>0&&o.value<1&&(s.value=o.value),l),move:e=>{if(!a.value)return;let t=a.value.getBoundingClientRect();h((e.clientY-t.top-6)/Math.max(1,t.height-12))},finish:(e,t)=>{e===`cancel`&&(o.value=t)}}),{dragging:b,start:x}=y;function S(e){if([`ArrowUp`,`ArrowDown`,`Home`,`End`,`Enter`,`Escape`].includes(e.key)){if(e.preventDefault(),e.key===`Escape`)b.value&&(o.value=l),y.stop();else if(e.key===`Enter`)v();else if(e.key===`Home`)h(0);else if(e.key===`End`)h(1);else{let t=e.shiftKey?.1:.05,n=o.value+(e.key===`ArrowDown`?t:-t);h(o.value===0&&n>0?.15:o.value===1&&n<1?.85:n)}}}r(()=>n.reveal,e=>{e&&o.value===1&&v()});let C={props:n,panes:a,split:o,lastSplit:s,get dragStart(){return l},set dragStart(e){l=e},rows:u,top:d,bottom:f,lower:p,separatorTitle:m,setSplit:h,restoreSplit:v,drag:y,dragging:b,startResize:x,resizeKey:S,UiResizeHandle:g};return Object.defineProperty(C,"__isScriptSetup",{enumerable:!1,value:!0}),C}}),y={class:`top-pane`},b={class:`bottom-pane`};function x(r,i,c,l,d,g){return f(),u(`div`,{ref:`panes`,class:m([`panes`,{dragging:l.dragging}]),style:p(l.rows)},[a(o(`div`,y,[t(r.$slots,`top`,{},void 0,!0)],512),[[s,c.solo||l.split>0]]),a(n(l.UiResizeHandle,{labelled:l.split===0||l.split===1,class:`pane-resize`,"aria-label":`Соотношение высот: ${l.lower(l.top)} / ${l.lower(l.bottom)}`,"aria-valuenow":Math.round(l.split*100),"aria-valuemin":`0`,"aria-valuemax":`100`,"aria-valuetext":l.split===0?`${l.top} скрыт`:l.split===1?`${l.bottom} скрыт`:`${l.top} ${Math.round(l.split*100)}%, ${l.lower(l.bottom)} ${Math.round((1-l.split)*100)}%`,title:l.separatorTitle,tabindex:`0`,onPointerdown:l.startResize,onDblclick:l.restoreSplit,onKeydown:l.resizeKey},{default:e(()=>[o(`span`,null,h(l.split===0?`${l.top} ▾`:l.split===1?`${l.bottom} ▴`:``),1)]),_:1},8,[`labelled`,`aria-label`,`aria-valuenow`,`aria-valuetext`,`title`,`onPointerdown`]),[[s,!c.solo]]),a(o(`div`,b,[t(r.$slots,`bottom`,{},void 0,!0)],512),[[s,!c.solo&&l.split<1]])],6)}var S=l(v,[[`render`,x],[`__scopeId`,`data-v-29c28f37`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/workspace/modules/viewers/ui/SplitPanes.vue`]]);export{S as t};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/CodeViewer-BAgvP3Yx.js","assets/_plugin-vue_export-helper-C4wFX7Eq.js","assets/shared.esm-bundler-EUzHGNqQ.js","assets/dist-dwBOnDaY.js","assets/styles-C07CLvbW.js","assets/styles-CX3Ni7dk.css","assets/preload-helper-BLdHbfdN.js","assets/dist-23D313r2.js","assets/UiPanel-CND7Qs_n.js","assets/UiPanel-CS77nWcC.css","assets/main-DEEGhxlk.js","assets/github-emoji-C2UmmDoA.js","assets/ImageViewport-lPITcKgO.js","assets/ImageViewport-BXN_-Ztv.css","assets/github-emoji-qJihbtN6.css","assets/UiViewerPage-z_s1uFHO.js","assets/external-link-BFTqPI03.js","assets/UiViewerPage-BOvnLith.css","assets/main-CgMl4Qjs.css","assets/dist-CRLdLpSX.js","assets/editor-theme-DuQQ8n56.js","assets/CodeViewer-QIU6uQDH.css"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{$ as e,A as t,C as n,J as r,P as i,S as a,W as o,_ as s,ct as c,et as l,f as u,g as d,h as f,l as p,m,q as h,t as g,v as _,w as v,x as y,z as b}from"./_plugin-vue_export-helper-C4wFX7Eq.js";import{A as x,D as S,k as C,m as w,v as T}from"./styles-C07CLvbW.js";import{q as E,tt as D}from"./shared.esm-bundler-EUzHGNqQ.js";import{t as O}from"./UiPanel-CND7Qs_n.js";import{t as k}from"./preload-helper-BLdHbfdN.js";import{t as A}from"./ImageViewport-lPITcKgO.js";import{A as j,F as M,I as N,L as P,M as F,N as I,P as L,b as R,w as z,x as B}from"./main-DEEGhxlk.js";import{t as V}from"./SplitPanes-DR126xV8.js";var H=v({__name:`SvgParameters`,props:t({variant:{type:String,required:!0}},{color:{type:String,required:!0},colorModifiers:{},size:{type:Number,required:!0},sizeModifiers:{},background:{type:String,required:!0},backgroundModifiers:{},backgroundColor:{type:String,required:!0},backgroundColorModifiers:{}}),emits:t([`reset`],[`update:color`,`update:size`,`update:background`,`update:backgroundColor`]),setup(e,{expose:t}){t();let n=h(),i=r(e,`color`),a=r(e,`size`),o={sizeId:n,color:i,size:a,background:r(e,`background`),backgroundColor:r(e,`backgroundColor`),clamp:()=>a.value=Math.max(8,Math.min(2048,Math.round(Number(a.value)||256))),UiLabel:P,UiControl:x,UiInline:C,UiButton:S,get IconRotateCcw(){return F}};return Object.defineProperty(o,"__isScriptSetup",{enumerable:!1,value:!0}),o}}),U={class:`hex`};function W(t,n,r,i,o,c){return b(),_(`div`,{class:E([`params`,r.variant])},[a(i.UiInline,{as:`label`,class:`field color-control`,gap:r.variant===`bar`?1.5:1,align:r.variant===`bar`?`center`:`stretch`,justify:`normal`},{default:e(()=>[a(i.UiLabel,{as:`span`,size:r.variant===`sheet`?`2xs`:void 0,tone:r.variant===`sheet`?`muted`:void 0},{default:e(()=>[...n[6]||=[y(`currentColor`,-1)]]),_:1},8,[`size`,`tone`]),a(i.UiInline,{as:`span`,class:`value`,justify:`normal`},{default:e(()=>[a(i.UiControl,{modelValue:i.color,"onUpdate:modelValue":n[0]||=e=>i.color=e,type:`color`,appearance:`swatch`,"aria-label":`Цвет currentColor`},null,8,[`modelValue`]),f(`span`,U,D(i.color),1)]),_:1})]),_:1},8,[`gap`,`align`]),a(i.UiInline,{class:`field size-control`,gap:r.variant===`bar`?1.5:1,align:r.variant===`bar`?`center`:`stretch`,justify:`normal`},{default:e(()=>[a(i.UiLabel,{for:i.sizeId,size:r.variant===`sheet`?`2xs`:void 0,tone:r.variant===`sheet`?`muted`:void 0},{default:e(()=>[...n[7]||=[y(`Размер, px`,-1)]]),_:1},8,[`for`,`size`,`tone`]),a(i.UiInline,{as:`span`,class:`value`,justify:`normal`},{default:e(()=>[a(i.UiControl,{modelValue:i.size,"onUpdate:modelValue":n[1]||=e=>i.size=e,modelModifiers:{number:!0},class:`slider`,type:`range`,min:`8`,max:`2048`,step:`1`,"aria-label":`Размер SVG`},null,8,[`modelValue`]),a(i.UiControl,{id:i.sizeId,modelValue:i.size,"onUpdate:modelValue":n[2]||=e=>i.size=e,modelModifiers:{number:!0},class:`size-input`,type:`number`,min:`8`,max:`2048`,step:`1`,"aria-label":`Произвольный размер SVG в пикселях`,onChange:i.clamp},null,8,[`id`,`modelValue`])]),_:1})]),_:1},8,[`gap`,`align`]),a(i.UiInline,{as:`label`,class:`field background-control`,gap:r.variant===`bar`?1.5:1,align:r.variant===`bar`?`center`:`stretch`,justify:`normal`},{default:e(()=>[a(i.UiLabel,{as:`span`,size:r.variant===`sheet`?`2xs`:void 0,tone:r.variant===`sheet`?`muted`:void 0},{default:e(()=>[...n[8]||=[y(`Фон`,-1)]]),_:1},8,[`size`,`tone`]),a(i.UiInline,{as:`span`,class:`value`,justify:`normal`},{default:e(()=>[a(i.UiControl,{as:`select`,modelValue:i.background,"onUpdate:modelValue":n[3]||=e=>i.background=e,appearance:`inline-select`,"aria-label":`Фон SVG`},{default:e(()=>[...n[9]||=[f(`option`,{value:`light`},`Светлый`,-1),f(`option`,{value:`dark`},`Тёмный`,-1),f(`option`,{value:`checker`},`Шашечки`,-1),f(`option`,{value:`gradient`},`Градиент`,-1),f(`option`,{value:`color-gradient`},`Цветной градиент`,-1),f(`option`,{value:`custom`},`Свой цвет`,-1)]]),_:1},8,[`modelValue`]),i.background===`custom`?(b(),d(i.UiControl,{key:0,modelValue:i.backgroundColor,"onUpdate:modelValue":n[4]||=e=>i.backgroundColor=e,type:`color`,appearance:`swatch`,"aria-label":`Свой цвет фона SVG`},null,8,[`modelValue`])):s(`v-if`,!0)]),_:1})]),_:1},8,[`gap`,`align`]),a(i.UiButton,{class:`reset`,shape:r.variant===`bar`?`icon`:`rect`,size:`sm`,"aria-label":`Сбросить параметры SVG`,title:`Вернуть исходные currentColor, размер и фон SVG`,onClick:n[5]||=e=>t.$emit(`reset`)},{default:e(()=>[a(i.IconRotateCcw,{"aria-hidden":`true`}),r.variant===`sheet`?(b(),_(u,{key:0},[y(`Сбросить`)],64)):s(`v-if`,!0)]),_:1},8,[`shape`])],2)}var G=g(H,[[`render`,W],[`__scopeId`,`data-v-e7889e07`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/workspace/modules/viewers/ui/SvgParameters.vue`]]);function K(e,t){let n=new DOMParser,r=n.parseFromString(e,`image/svg+xml`),i=r.documentElement;if(r.querySelector(`parsererror`)||i.localName!==`svg`||i.namespaceURI&&i.namespaceURI!==`http://www.w3.org/2000/svg`)throw Error(`Не удалось отобразить SVG: проверьте разметку исходника.`);i.namespaceURI||(i.setAttribute(`xmlns`,`http://www.w3.org/2000/svg`),r=n.parseFromString(new XMLSerializer().serializeToString(i),`image/svg+xml`),i=r.documentElement);let a=i.getAttribute(`viewBox`)?.trim().split(/[\s,]+/).map(Number),o=e=>{let t=i.getAttribute(e)?.trim()??``;return/^\d+(?:\.\d+)?(?:px)?$/.test(t)?parseFloat(t):NaN},s=o(`width`),c=o(`height`),l=a?.length===4&&a.every(Number.isFinite)&&a[2]>0&&a[3]>0;if(!(s>0&&c>0)){let e=l?a[2]/a[3]:2;s>0?c=s/e:c>0?s=c*e:(s=l?a[2]:300,c=l?a[3]:150)}let u=i.style;return u.setProperty(`color`,t,`important`),u.setProperty(`width`,`100%`,`important`),u.setProperty(`height`,`100%`,`important`),i.setAttribute(`width`,`100%`),i.setAttribute(`height`,`100%`),!l&&!i.hasAttribute(`viewBox`)&&i.setAttribute(`viewBox`,`0 0 ${s} ${c}`),{url:`data:image/svg+xml;charset=utf-8,${encodeURIComponent(new XMLSerializer().serializeToString(i))}`,width:s,height:c}}var q=v({__name:`SvgViewer`,props:{path:{type:String,required:!0},projectId:{type:String,required:!1},content:{type:String,required:!0},editable:{type:Boolean,required:!1},line:{type:Number,required:!1},endLine:{type:Number,required:!1},column:{type:Number,required:!1}},emits:[`change`,`save`],setup(e,{expose:t,emit:r}){t();let a=n(()=>k(()=>import(`./CodeViewer-BAgvP3Yx.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21]))),o=e,s=r,l=L();function u(){let e=getComputedStyle(document.documentElement).getPropertyValue(`--text-2`).trim();return/^#[0-9a-f]{6}$/i.test(e)?e:`#d8d2c4`}let d=c(u()),f=c(256),p=c(`checker`),h=c(`#808080`),g=c(!1),_=[`light`,`dark`,`checker`,`gradient`,`color-gradient`,`custom`],v=m(()=>{try{return{...K(o.content,d.value),error:``}}catch(e){return{url:``,width:1,height:1,error:String(e.message)}}}),y=m(()=>{let{width:e,height:t}=v.value,n=Math.max(e,t),r=Math.max(8,Math.min(2048,Number(f.value)||256));return{width:Math.max(1,Math.round(r*e/n)),height:Math.max(1,Math.round(r*t/n))}}),b=m(()=>l.value||g.value),x=I({anchor:`right`,initialFocus:[`input`,`select`],items:`input,select,button`});function C(){d.value=u(),f.value=256,p.value=`checker`,h.value=`#808080`}let E=!1;function D(e){e!==g.value&&(g.value=e,x.close(!1),e?(E=!!document.documentElement.requestFullscreen,document.documentElement.requestFullscreen?.().catch(()=>E=!1)):document.fullscreenElement&&(E=!1,document.exitFullscreen().catch(()=>{})))}M(document,`fullscreenchange`,()=>{!document.fullscreenElement&&E&&(E=!1,g.value=!1)}),M(window,`keydown`,e=>{e.key===`Escape`&&g.value&&!x.open.value&&D(!1)}),i(()=>D(!1));let P=T(`svg-viewer:${o.path}`,()=>({surface:`svg-viewer`,path:o.path}));P.scope.registerCommand({id:`ide.svg.fullscreen.toggle`,title:`SVG: полноэкранный просмотр`,description:`Открывает или закрывает просмотр SVG на весь экран без панелей и кода.`,run:()=>D(!g.value)}),P.scope.registerCommand({id:`ide.svg.parameters.toggle`,title:`SVG: показать или скрыть параметры`,description:`Открывает панель параметров просмотра SVG: цвет currentColor, размер и фон.`,run:()=>void x.toggle()}),P.scope.registerCommand({id:`ide.svg.parameters.set`,title:`SVG: изменить параметры просмотра`,description:`Задаёт цвет currentColor, размер рендера в пикселях и фон просмотра SVG; можно указать любые из параметров.`,arguments:{color:`Цвет currentColor, #rrggbb`,size:`Размер длинной стороны, 8–2048 px`,background:`Фон: ${_.join(`, `)}`,backgroundColor:`Цвет фона #rrggbb, используется при background=custom`},run:e=>{let t=w(e),n=/^#[0-9a-f]{6}$/i,r={color:d.value,size:f.value,background:p.value,backgroundColor:h.value};if(t.color!==void 0){if(typeof t.color!=`string`||!n.test(t.color))throw Error(`color: цвет вида #rrggbb`);r.color=t.color}if(t.backgroundColor!==void 0){if(typeof t.backgroundColor!=`string`||!n.test(t.backgroundColor))throw Error(`backgroundColor: цвет вида #rrggbb`);r.backgroundColor=t.backgroundColor}if(t.size!==void 0){if(typeof t.size!=`number`||!Number.isFinite(t.size)||t.size<8||t.size>2048)throw Error(`size: число от 8 до 2048`);r.size=Math.round(t.size)}if(t.background!==void 0){if(typeof t.background!=`string`||!_.includes(t.background))throw Error(`background: ${_.join(`, `)}`);r.background=t.background}d.value=r.color,f.value=r.size,p.value=r.background,h.value=r.backgroundColor}}),P.scope.registerCommand({id:`ide.svg.parameters.reset`,title:`SVG: сбросить параметры просмотра`,description:`Возвращает исходные currentColor, размер и фон просмотра SVG.`,run:C});let F={CodeViewer:a,props:o,emit:s,compact:l,defaultColor:u,color:d,size:f,background:p,backgroundColor:h,fullscreen:g,backgrounds:_,preview:v,dimensions:y,floating:b,settings:x,resetParameters:C,get native(){return E},set native(e){E=e},setFullscreen:D,commands:P,UiPanel:O,UiToolbar:j,UiButton:S,UiIsland:N,ImageViewport:A,SplitPanes:V,SvgParameters:G,get IconSliders(){return z},get IconExpand(){return B},get IconShrink(){return R}};return Object.defineProperty(F,"__isScriptSetup",{enumerable:!1,value:!0}),F}}),J={key:0,class:`render-info`},Y={class:`stage`},X={class:`chip`},Z={class:`actions`};function Q(t,n,r,i,c,m){return b(),d(i.UiPanel,{class:E([`svg-viewer`,{fullscreen:i.fullscreen}]),"aria-label":`Просмотр SVG`,onPointerdown:n[13]||=e=>i.commands.scope.activate()},{default:e(()=>[i.compact?s(`v-if`,!0):l((b(),d(i.UiToolbar,{key:0,class:`toolbar`,gap:3},{default:e(()=>[a(i.SvgParameters,{color:i.color,"onUpdate:color":n[0]||=e=>i.color=e,size:i.size,"onUpdate:size":n[1]||=e=>i.size=e,background:i.background,"onUpdate:background":n[2]||=e=>i.background=e,"background-color":i.backgroundColor,"onUpdate:backgroundColor":n[3]||=e=>i.backgroundColor=e,variant:`bar`,onReset:i.resetParameters},null,8,[`color`,`size`,`background`,`background-color`]),a(i.UiButton,{shape:`icon`,size:`sm`,"aria-label":`Во весь экран`,title:`Просмотр SVG на весь экран`,onClick:n[4]||=e=>i.commands.run(`ide.svg.fullscreen.toggle`)},{default:e(()=>[a(i.IconExpand,{"aria-hidden":`true`})]),_:1})]),_:1},512)),[[p,!i.fullscreen]]),a(i.SplitPanes,{reveal:r.line,initial:i.compact?1:.45,solo:i.fullscreen},{top:e(()=>[a(i.UiPanel,{as:`div`,sizing:`flex`,class:`render-pane`},{default:e(()=>[i.compact?s(`v-if`,!0):l((b(),_(`div`,J,[y(D(i.dimensions.width)+` × `+D(i.dimensions.height)+` px `,1),f(`span`,null,`Исходный: `+D(Math.round(i.preview.width))+` × `+D(Math.round(i.preview.height)),1)],512)),[[p,!i.fullscreen]]),f(`div`,Y,[a(i.ImageViewport,{src:i.preview.url,alt:r.path,identity:r.path,width:i.dimensions.width,height:i.dimensions.height,fit:i.floating,floating:i.floating,background:i.background,"background-controls":!1,"background-color":i.backgroundColor,error:i.preview.error},null,8,[`src`,`alt`,`identity`,`width`,`height`,`fit`,`floating`,`background`,`background-color`,`error`]),i.floating?(b(),_(u,{key:0},[f(`span`,X,D(i.dimensions.width)+` × `+D(i.dimensions.height),1),f(`div`,Z,[f(`span`,{ref:i.settings.trigger},[a(i.UiButton,{shape:`icon`,class:`float`,"aria-label":`Параметры`,title:`Параметры: цвет, размер, фон`,"aria-haspopup":`dialog`,"aria-expanded":i.settings.open.value,"aria-controls":i.settings.open.value?i.settings.id:void 0,onClick:n[5]||=e=>i.commands.run(`ide.svg.parameters.toggle`)},{default:e(()=>[a(i.IconSliders,{"aria-hidden":`true`})]),_:1},8,[`aria-expanded`,`aria-controls`])],512),a(i.UiButton,{shape:`icon`,class:`float`,"aria-label":i.fullscreen?`Выйти из полноэкранного режима`:`Во весь экран`,title:i.fullscreen?`Выйти из полноэкранного режима (Esc)`:`На весь экран`,onClick:n[6]||=e=>i.commands.run(`ide.svg.fullscreen.toggle`)},{default:e(()=>[(b(),d(o(i.fullscreen?i.IconShrink:i.IconExpand),{"aria-hidden":`true`}))]),_:1},8,[`aria-label`,`title`])])],64)):s(`v-if`,!0)])]),_:1})]),bottom:e(()=>[a(i.CodeViewer,{path:r.path,"project-id":r.projectId,content:r.content,editable:r.editable,line:r.line,"end-line":r.endLine,column:r.column,onChange:n[7]||=e=>i.emit(`change`,e),onSave:n[8]||=e=>i.emit(`save`)},null,8,[`path`,`project-id`,`content`,`editable`,`line`,`end-line`,`column`])]),_:1},8,[`reveal`,`initial`,`solo`]),a(i.UiIsland,{menu:i.settings,label:`Параметры SVG`,width:320},{default:e(()=>[a(i.SvgParameters,{color:i.color,"onUpdate:color":n[9]||=e=>i.color=e,size:i.size,"onUpdate:size":n[10]||=e=>i.size=e,background:i.background,"onUpdate:background":n[11]||=e=>i.background=e,"background-color":i.backgroundColor,"onUpdate:backgroundColor":n[12]||=e=>i.backgroundColor=e,variant:`sheet`,onReset:i.resetParameters},null,8,[`color`,`size`,`background`,`background-color`])]),_:1},8,[`menu`])]),_:1},8,[`class`])}var $=g(q,[[`render`,Q],[`__scopeId`,`data-v-ad498f53`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/workspace/modules/viewers/ui/SvgViewer.vue`]]);export{$ as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.params[data-v-e7889e07]{font-size:var(--fs-xs)}.field[data-v-e7889e07],.value[data-v-e7889e07]{min-width:0}.hex[data-v-e7889e07]{font-family:var(--mono)}.size-input[data-v-e7889e07]{width:72px;padding-block:var(--sp-1)}.bar[data-v-e7889e07]{align-items:center;gap:var(--sp-2) var(--sp-4);flex-wrap:wrap;display:flex}.bar .slider[data-v-e7889e07]{width:clamp(100px,15vw,180px)}.bar .reset[data-v-e7889e07]{margin-left:auto}.sheet[data-v-e7889e07]{gap:var(--sp-3);padding:var(--sp-2) var(--sp-3) var(--sp-3);flex-direction:column;display:flex}.sheet .field[data-v-e7889e07]{flex-direction:column}.sheet .value[data-v-e7889e07]>:is(select,.slider){flex:1}.sheet .color-control .value[data-v-e7889e07]{min-height:var(--control-h)}.sheet .reset[data-v-e7889e07]{align-self:flex-start}.svg-viewer.fullscreen[data-v-ad498f53]{z-index:calc(var(--z-popover) - 1);background:var(--bg);position:fixed;inset:0}.toolbar[data-v-ad498f53] .params{flex:1}.render-pane[data-v-ad498f53]{overflow:hidden}.render-info[data-v-ad498f53]{gap:var(--sp-1) var(--sp-3);padding:6px var(--sp-3);font-size:var(--fs-2xs);color:var(--muted);border-bottom:1px solid var(--line);flex-wrap:wrap;display:flex}.render-info span[data-v-ad498f53]{margin-left:auto}.stage[data-v-ad498f53]{flex:1;min-height:0;display:flex;position:relative}.chip[data-v-ad498f53]{top:var(--sp-3);left:var(--sp-3);padding:2px var(--sp-2);border-radius:var(--r-full);background:color-mix(in srgb, var(--bg-2) 90%, transparent);color:var(--text);font:var(--fs-2xs) var(--mono);pointer-events:none;position:absolute}.actions[data-v-ad498f53]{top:var(--sp-2);right:var(--sp-2);gap:var(--sp-1);padding-top:env(safe-area-inset-top);display:flex;position:absolute}.float[data-v-ad498f53]{border-radius:var(--r-full);background:color-mix(in srgb, var(--bg-2) 88%, transparent);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-color:#0000}
|