@chainingintention/pi-web-cn 1.202607.3 → 1.202607.5-dev.0
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/README.md +9 -3
- package/dist/client/assets/{CodeViewer-CGV4uBeZ.js → CodeViewer-_Lzl-tA7.js} +1 -1
- package/dist/client/assets/{TerminalPanel-CeJN9p9P.js → TerminalPanel-BVBJC-6w.js} +1 -1
- package/dist/client/assets/{UnifiedDiffViewer-BSzsWx-m.js → UnifiedDiffViewer-BwONrl2w.js} +1 -1
- package/dist/client/assets/{index-BA1zmHnv.js → index-Ce8_7l5M.js} +768 -487
- package/dist/client/index.html +2 -2
- package/dist/client/manifest.webmanifest +1 -1
- package/dist/docker/piWebDockerCommandPlan.js +211 -0
- package/dist/docker/piWebDockerCommandPlan.js.map +1 -0
- package/dist/pi-web-plugins/updates/pi-web-plugin.js +15 -5
- package/dist/pi-web-plugins/updates/updatesLogic.js +37 -5
- package/dist/pi-web-plugins/workspace-tasks/workspaceTasksClient.js +6 -1
- package/dist/piWebVersionReport.js +4 -0
- package/dist/piWebVersionReport.js.map +1 -1
- package/dist/plugin-api.d.ts +3 -1
- package/dist/server/app.js +24 -16
- package/dist/server/app.js.map +1 -1
- package/dist/server/configRoutes.js +109 -2
- package/dist/server/configRoutes.js.map +1 -1
- package/dist/server/gitRoutes.js +3 -16
- package/dist/server/gitRoutes.js.map +1 -1
- package/dist/server/httpSessions.js +34 -0
- package/dist/server/httpSessions.js.map +1 -0
- package/dist/server/machines/machineProxyRoutes.js +64 -11
- package/dist/server/machines/machineProxyRoutes.js.map +1 -1
- package/dist/server/machines/machineService.js +4 -26
- package/dist/server/machines/machineService.js.map +1 -1
- package/dist/server/managementEmbed.js +8 -40
- package/dist/server/managementEmbed.js.map +1 -1
- package/dist/server/normalAuth.js +90 -30
- package/dist/server/normalAuth.js.map +1 -1
- package/dist/server/piPackageRoutes.js +87 -0
- package/dist/server/piPackageRoutes.js.map +1 -0
- package/dist/server/piPackageService.js +69 -0
- package/dist/server/piPackageService.js.map +1 -0
- package/dist/server/piWebPluginService.js +43 -8
- package/dist/server/piWebPluginService.js.map +1 -1
- package/dist/server/piWebStatus.js +71 -2
- package/dist/server/piWebStatus.js.map +1 -1
- package/dist/server/requestLogging.js +47 -0
- package/dist/server/requestLogging.js.map +1 -0
- package/dist/server/sessiond/sessionProxyRoutes.js +1 -6
- package/dist/server/sessiond/sessionProxyRoutes.js.map +1 -1
- package/dist/server/sessiond.js +2 -1
- package/dist/server/sessiond.js.map +1 -1
- package/dist/server/sessions/builtinCommands.js +1 -1
- package/dist/server/sessions/builtinCommands.js.map +1 -1
- package/dist/server/sessions/piSessionService.js +39 -2
- package/dist/server/sessions/piSessionService.js.map +1 -1
- package/dist/server/sessions/sessionCleanup.js +1 -13
- package/dist/server/sessions/sessionCleanup.js.map +1 -1
- package/dist/server/sessions/sessionCommandService.js +16 -0
- package/dist/server/sessions/sessionCommandService.js.map +1 -1
- package/dist/server/sessions/sessionNameGenerator.js +27 -44
- package/dist/server/sessions/sessionNameGenerator.js.map +1 -1
- package/dist/server/sessions/sessionUiEvents.js +2 -29
- package/dist/server/sessions/sessionUiEvents.js.map +1 -1
- package/dist/server/sessions/subsessionTranscript.js +1 -29
- package/dist/server/sessions/subsessionTranscript.js.map +1 -1
- package/dist/server/sessions/toolSummary.js +37 -0
- package/dist/server/sessions/toolSummary.js.map +1 -0
- package/dist/server/terminalProxyRoutes.js +3 -11
- package/dist/server/terminalProxyRoutes.js.map +1 -1
- package/dist/server/workspaceExplorerRoutes.js +8 -41
- package/dist/server/workspaceExplorerRoutes.js.map +1 -1
- package/dist/server/workspaces/fileSuggestions.js +7 -3
- package/dist/server/workspaces/fileSuggestions.js.map +1 -1
- package/dist/server/workspaces/workspaceContext.js +3 -0
- package/dist/server/workspaces/workspaceContext.js.map +1 -1
- package/dist/server/workspaces/workspaceDeletionRoutes.js +1 -6
- package/dist/server/workspaces/workspaceDeletionRoutes.js.map +1 -1
- package/dist/server/workspaces/workspaceRouteContext.js +13 -0
- package/dist/server/workspaces/workspaceRouteContext.js.map +1 -0
- package/dist/shared/activity.js +0 -15
- package/dist/shared/activity.js.map +1 -1
- package/dist/shared/apiTypes.d.ts +39 -17
- package/dist/shared/apiTypes.js +3 -0
- package/dist/shared/apiTypes.js.map +1 -1
- package/dist/shared/capabilities.js +27 -2
- package/dist/shared/capabilities.js.map +1 -1
- package/dist/shared/federatedRoutes.js +8 -1
- package/dist/shared/federatedRoutes.js.map +1 -1
- package/dist/shared/piWebStatusParsing.js +20 -8
- package/dist/shared/piWebStatusParsing.js.map +1 -1
- package/docs/config.md +21 -12
- package/docs/plugins.md +28 -14
- package/package.json +7 -8
- package/dist/server/workspaces/fileUploadService.js +0 -43
- package/dist/server/workspaces/fileUploadService.js.map +0 -1
package/README.md
CHANGED
|
@@ -99,13 +99,19 @@ Read more: [Remote-first development](https://pi-web.dev/remote-first)
|
|
|
99
99
|
|
|
100
100
|
## Machines and fleets
|
|
101
101
|
|
|
102
|
-
PI WEB can register other PI WEB runtimes as remote machines. One browser-facing PI WEB instance can proxy projects, files, git state, sessions, terminals, and
|
|
102
|
+
PI WEB can register other PI WEB runtimes as remote machines. One browser-facing PI WEB instance can proxy projects, files, git state, sessions, terminals, activity, Pi package management, and selected-machine settings from trusted remote machines.
|
|
103
|
+
|
|
104
|
+
When a remote machine is selected, Settings tabs label their target. Pi packages, PI WEB plugin enablement, session daemon toggles, external file access, and upload defaults target the selected machine. Gateway/server settings such as host, port, allowed hosts, registered machines/tokens, and keyboard shortcuts stay local to the gateway/browser.
|
|
103
105
|
|
|
104
106
|
Read more: [Fleet and machines guide](https://pi-web.dev/machines)
|
|
105
107
|
|
|
106
108
|
## Plugins
|
|
107
109
|
|
|
108
|
-
PI WEB supports trusted
|
|
110
|
+
PI WEB supports trusted browser-side PI WEB plugins that can add actions, workspace panels, and workspace metadata.
|
|
111
|
+
|
|
112
|
+
Pi packages are managed separately through Pi's package manager or **Settings → Pi packages**. In a federated setup, the Pi packages panel targets the selected machine and labels where installs, updates, or removals will run. Use **Settings → PI WEB plugins** to enable or disable discovered browser plugins on the selected machine.
|
|
113
|
+
|
|
114
|
+
After installing, updating, or removing a Pi package, type `/reload` in each idle PI WEB session on that machine to refresh Pi runtime resources such as extensions, skills, prompt templates, themes, and context/system prompt files. Reload the browser page separately for newly discovered or changed PI WEB plugins.
|
|
109
115
|
|
|
110
116
|
Read more: [Plugin API](https://pi-web.dev/plugins)
|
|
111
117
|
|
|
@@ -124,7 +130,7 @@ Project-local PI WEB config lives at:
|
|
|
124
130
|
<project>/.pi-web/config.json
|
|
125
131
|
```
|
|
126
132
|
|
|
127
|
-
Common configuration includes host/port, path access, uploads,
|
|
133
|
+
Common configuration includes host/port, path access, uploads, PI WEB plugin enablement, shortcuts, and session daemon options. In Settings, machine-affecting config targets the selected machine; gateway host/port/allowed-hosts, remote machine registration, tokens, and keyboard shortcuts stay local.
|
|
128
134
|
|
|
129
135
|
Read more: [Configuration reference](https://pi-web.dev/config)
|
|
130
136
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{v as r,J as d,$ as h,A as m,Y as g,U as f,a0 as v,V as b}from"./vendor-editor-core-C7aWiQy0.js";import{g as y,r as w,p as x,h as C,c as j,m as k,j as E,a as l}from"./vendor-editor-languages-EW34FfVy.js";import{d as H}from"./vendor-editor-legacy-B4QLsWF8.js";import{i as _,b as O,a as S,n as p,f as P,t as T}from"./index-
|
|
1
|
+
import{v as r,J as d,$ as h,A as m,Y as g,U as f,a0 as v,V as b}from"./vendor-editor-core-C7aWiQy0.js";import{g as y,r as w,p as x,h as C,c as j,m as k,j as E,a as l}from"./vendor-editor-languages-EW34FfVy.js";import{d as H}from"./vendor-editor-legacy-B4QLsWF8.js";import{i as _,b as O,a as S,n as p,f as P,t as T}from"./index-Ce8_7l5M.js";var A=Object.defineProperty,L=Object.getOwnPropertyDescriptor,i=(e,s,n,a)=>{for(var t=a>1?void 0:a?L(s,n):s,c=e.length-1,u;c>=0;c--)(u=e[c])&&(t=(a?u(s,n,t):u(t))||t);return a&&t&&A(s,n,t),t};let o=class extends _{constructor(){super(...arguments),this.content=""}firstUpdated(){this.recreateEditor()}updated(e){(e.has("content")||e.has("language"))&&this.recreateEditor()}disconnectedCallback(){this.view?.destroy(),this.view=void 0,super.disconnectedCallback()}render(){return O`<div class="host"></div>`}recreateEditor(){this.editorHost&&(this.view?.destroy(),this.view=new r({parent:this.editorHost,state:d.create({doc:this.content,extensions:[h(),m.of(g),f(b,{fallback:!0}),d.readOnly.of(!0),r.editable.of(!1),r.lineWrapping,V,...F(this.language),...M(this.language)]})}))}};o.styles=S`
|
|
2
2
|
:host { display: block; min-height: 0; height: 100%; }
|
|
3
3
|
.host { height: 100%; min-height: 0; overflow: auto; }
|
|
4
4
|
`;i([p()],o.prototype,"content",2);i([p()],o.prototype,"language",2);i([P(".host")],o.prototype,"editorHost",2);o=i([T("code-viewer")],o);const V=r.theme({"&":{height:"100%",color:"var(--pi-text)",backgroundColor:"var(--pi-bg)",fontSize:"12px"},".cm-scroller":{fontFamily:"ui-monospace, SFMono-Regular, Menlo, Consolas, monospace",lineHeight:"1.45"},".cm-gutters":{backgroundColor:"var(--pi-bg)",color:"var(--pi-dim)",borderRight:"1px solid var(--pi-border-muted)"},".cm-activeLineGutter":{backgroundColor:"transparent"},".cm-activeLine":{backgroundColor:"transparent"},".cm-content":{caretColor:"transparent"},"&.cm-focused":{outline:"none"}}),D=r.theme({".cm-content":{textAlign:"start"},".cm-line":{unicodeBidi:"plaintext"}});function F(e){return e==="markdown"?[r.contentAttributes.of({dir:"auto"}),D]:[]}function M(e){if(e===void 0)return[];switch(e){case"typescript":return[l({typescript:!0})];case"javascript":return[l()];case"json":return[E()];case"markdown":return[k()];case"css":return[j()];case"html":return[C()];case"python":return[x()];case"rust":return[w()];case"go":return[y()];case"diff":return[v.define(H)];default:return[]}}export{o as CodeViewer};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{a as E,n as m,i as K,b as l,t as R,c as h,s as D,d as w,e as _,f as F,r as c}from"./index-
|
|
1
|
+
import{a as E,n as m,i as K,b as l,t as R,c as h,s as D,d as w,e as _,f as F,r as c}from"./index-Ce8_7l5M.js";import{D as T,o as S}from"./vendor-terminal-DjQ08hXu.js";import"./vendor-editor-core-C7aWiQy0.js";import"./vendor-editor-languages-EW34FfVy.js";const $="pi-web.terminal.softKeys",N="(pointer: coarse), (max-width: 760px)";function z(e,t){return e??t}function V(e){if(e==="true")return!0;if(e==="false")return!1}function P(){return typeof window<"u"&&"matchMedia"in window?window.matchMedia(N):void 0}function M(e){return e?.matches===!0}function j(e=P()){return z(O(),M(e))}function B(){return O()!==void 0}function O(e=A()){if(e!==void 0)try{return V(e.getItem($))}catch{return}}function H(e,t=A()){if(t!==void 0)try{t.setItem($,String(e))}catch{}}function A(){if(!(typeof window>"u"))try{return window.localStorage}catch{return}}const U=[{id:"escape",label:"Esc",ariaLabel:"Escape",title:"发送 Escape"},{id:"tab",label:"Tab",ariaLabel:"Tab",title:"发送 Tab"},{id:"ctrl-c",label:"Ctrl+C",ariaLabel:"Control C",title:"中断前台进程"},{id:"ctrl-d",label:"Ctrl+D",ariaLabel:"Control D",title:"发送 EOF / 关闭输入"},{id:"ctrl-z",label:"Ctrl+Z",ariaLabel:"Control Z",title:"挂起前台进程"},{id:"ctrl-l",label:"Ctrl+L",ariaLabel:"Control L",title:"清屏 / 重绘终端"},{id:"ctrl-r",label:"Ctrl+R",ariaLabel:"Control R",title:"反向搜索历史"},{id:"ctrl-u",label:"Ctrl+U",ariaLabel:"Control U",title:"删除到行首"},{id:"ctrl-w",label:"Ctrl+W",ariaLabel:"Control W",title:"删除上一个单词"},{id:"arrow-left",label:"←",ariaLabel:"左箭头",title:"向左移动"},{id:"arrow-up",label:"↑",ariaLabel:"上箭头",title:"向上移动 / 上一条命令"},{id:"arrow-down",label:"↓",ariaLabel:"下箭头",title:"向下移动 / 下一条命令"},{id:"arrow-right",label:"→",ariaLabel:"右箭头",title:"向右移动"},{id:"home",label:"Home",ariaLabel:"Home",title:"移动到开头"},{id:"end",label:"End",ariaLabel:"End",title:"移动到末尾"},{id:"page-up",label:"PgUp",ariaLabel:"向上翻页",title:"向上翻页"},{id:"page-down",label:"PgDn",ariaLabel:"向下翻页",title:"向下翻页"},{id:"delete",label:"Del",ariaLabel:"Delete",title:"向前删除"},{id:"backspace",label:"⌫",ariaLabel:"Backspace",title:"退格"},{id:"meta-backward-word",label:"M-B",ariaLabel:"Meta B",title:"向后移动一个单词"},{id:"meta-forward-word",label:"M-F",ariaLabel:"Meta F",title:"向前移动一个单词"}],d="\x1B",q="";function Y(e,t){switch(e){case"escape":return d;case"tab":return" ";case"ctrl-c":return p("c");case"ctrl-d":return p("d");case"ctrl-z":return p("z");case"ctrl-l":return p("l");case"ctrl-r":return p("r");case"ctrl-u":return p("u");case"ctrl-w":return p("w");case"arrow-left":return b("D",t);case"arrow-up":return b("A",t);case"arrow-down":return b("B",t);case"arrow-right":return b("C",t);case"home":return x("H",t);case"end":return x("F",t);case"page-up":return`${d}[5~`;case"page-down":return`${d}[6~`;case"delete":return`${d}[3~`;case"backspace":return q;case"meta-backward-word":return`${d}b`;case"meta-forward-word":return`${d}f`}}function p(e){return String.fromCharCode(e.toUpperCase().charCodeAt(0)-64)}function b(e,t){return t?.applicationCursorKeysMode===!0?`${d}O${e}`:`${d}[${e}`}function x(e,t){return t?.applicationCursorKeysMode===!0?`${d}O${e}`:`${d}[${e}`}var W=Object.defineProperty,X=Object.getOwnPropertyDescriptor,y=(e,t,i,n)=>{for(var r=n>1?void 0:n?X(t,i):t,a=e.length-1,u;a>=0;a--)(u=e[a])&&(r=(n?u(t,i,r):u(r))||r);return n&&r&&W(t,i,r),r};const J=8,Z=500;let f=class extends K{constructor(){super(...arguments),this.refocusOnClick=!0,this.onInput=()=>{},this.lastPointerFinishedAt=0}sendSoftKey(e,t){this.onInput(Y(e.id,this.modes),t)}onSoftKeyPointerDown(e,t){e.pointerType==="mouse"&&e.button!==0||(e.preventDefault(),this.pointerStart={pointerId:e.pointerId,key:t,clientX:e.clientX,clientY:e.clientY})}onSoftKeyPointerMove(e){const t=this.pointerStart;t?.pointerId===e.pointerId&&I(t,e)&&this.finishSoftKeyPointer()}onSoftKeyPointerUp(e,t){const i=this.pointerStart;i?.pointerId===e.pointerId&&(e.preventDefault(),this.finishSoftKeyPointer(),!(i.key.id!==t.id||I(i,e))&&this.sendSoftKey(t,{refocus:e.pointerType==="mouse"}))}onSoftKeyPointerCancel(e){this.pointerStart?.pointerId===e.pointerId&&this.finishSoftKeyPointer()}finishSoftKeyPointer(){this.pointerStart=void 0,this.lastPointerFinishedAt=Date.now()}onSoftKeyClick(e,t){if(Date.now()-this.lastPointerFinishedAt<Z){e.preventDefault();return}this.sendSoftKey(t,{refocus:this.refocusOnClick})}render(){return l`
|
|
2
2
|
<div class="terminal-soft-keys" role="toolbar" aria-label="终端快捷键">
|
|
3
3
|
${U.map(e=>l`
|
|
4
4
|
<button
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{i as A,b as P,a as V,n as z,t as F}from"./index-
|
|
1
|
+
import{i as A,b as P,a as V,n as z,t as F}from"./index-Ce8_7l5M.js";import"./vendor-editor-core-C7aWiQy0.js";import"./vendor-editor-languages-EW34FfVy.js";class U{diff(e,t,i={}){let o;typeof i=="function"?(o=i,i={}):"callback"in i&&(o=i.callback);const r=this.castInput(e,i),s=this.castInput(t,i),u=this.removeEmpty(this.tokenize(r,i)),l=this.removeEmpty(this.tokenize(s,i));return this.diffWithOptionsObj(u,l,i,o)}diffWithOptionsObj(e,t,i,o){var r;const s=c=>{if(c=this.postProcess(c,i),o){setTimeout(function(){o(c)},0);return}else return c},u=t.length,l=e.length;let d=1,a=u+l;i.maxEditLength!=null&&(a=Math.min(a,i.maxEditLength));const g=(r=i.timeout)!==null&&r!==void 0?r:1/0,v=Date.now()+g,f=[{oldPos:-1,lastComponent:void 0}];let h=this.extractCommon(f[0],t,e,0,i);if(f[0].oldPos+1>=l&&h+1>=u)return s(this.buildValues(f[0].lastComponent,t,e));let w=-1/0,y=1/0;const $=()=>{for(let c=Math.max(w,-d);c<=Math.min(y,d);c+=2){let p;const x=f[c-1],b=f[c+1];x&&(f[c-1]=void 0);let D=!1;if(b){const S=b.oldPos-c;D=b&&0<=S&&S<u}const k=x&&x.oldPos+1<l;if(!D&&!k){f[c]=void 0;continue}if(!k||D&&x.oldPos<b.oldPos?p=this.addToPath(b,!0,!1,0,i):p=this.addToPath(x,!1,!0,1,i),h=this.extractCommon(p,t,e,c,i),p.oldPos+1>=l&&h+1>=u)return s(this.buildValues(p.lastComponent,t,e))||!0;f[c]=p,p.oldPos+1>=l&&(y=Math.min(y,c-1)),h+1>=u&&(w=Math.max(w,c+1))}d++};if(o)(function c(){setTimeout(function(){if(d>a||Date.now()>v)return o(void 0);$()||c()},0)})();else for(;d<=a&&Date.now()<=v;){const c=$();if(c)return c}}addToPath(e,t,i,o,r){const s=e.lastComponent;return s&&!r.oneChangePerToken&&s.added===t&&s.removed===i?{oldPos:e.oldPos+o,lastComponent:{count:s.count+1,added:t,removed:i,previousComponent:s.previousComponent}}:{oldPos:e.oldPos+o,lastComponent:{count:1,added:t,removed:i,previousComponent:s}}}extractCommon(e,t,i,o,r){const s=t.length,u=i.length;let l=e.oldPos,d=l-o,a=0;for(;d+1<s&&l+1<u&&this.equals(i[l+1],t[d+1],r);)d++,l++,a++,r.oneChangePerToken&&(e.lastComponent={count:1,previousComponent:e.lastComponent,added:!1,removed:!1});return a&&!r.oneChangePerToken&&(e.lastComponent={count:a,previousComponent:e.lastComponent,added:!1,removed:!1}),e.oldPos=l,d}equals(e,t,i){return i.comparator?i.comparator(e,t):e===t||!!i.ignoreCase&&e.toLowerCase()===t.toLowerCase()}removeEmpty(e){const t=[];for(let i=0;i<e.length;i++)e[i]&&t.push(e[i]);return t}castInput(e,t){return e}tokenize(e,t){return Array.from(e)}join(e){return e.join("")}postProcess(e,t){return e}get useLongestToken(){return!1}buildValues(e,t,i){const o=[];let r;for(;e;)o.push(e),r=e.previousComponent,delete e.previousComponent,e=r;o.reverse();const s=o.length;let u=0,l=0,d=0;for(;u<s;u++){const a=o[u];if(a.removed)a.value=this.join(i.slice(d,d+a.count)),d+=a.count;else{if(!a.added&&this.useLongestToken){let g=t.slice(l,l+a.count);g=g.map(function(v,f){const h=i[d+f];return h.length>v.length?h:v}),a.value=this.join(g)}else a.value=this.join(t.slice(l,l+a.count));l+=a.count,a.added||(d+=a.count)}}return o}}class R extends U{}const q=new R;function j(n,e,t){return q.diff(n,e,t)}const B=/^@@ -(\d+)(?:,\d+)? \+(\d+)(?:,\d+)? @@/,C=5e3,H=20,G=.2,E=.25;function J(n){const e=K(n);return X(e),e}function K(n){const e=Q(n),t=[];let i,o;for(const r of e){const s=B.exec(r);if(s!==null){i=Number(s[1]),o=Number(s[2]),t.push(m("hunk","",r));continue}if(i!==void 0&&o!==void 0){if(r.startsWith("+")){t.push(m("add","+",r.slice(1),{newLineNumber:o})),o++;continue}if(r.startsWith("-")){t.push(m("remove","-",r.slice(1),{oldLineNumber:i})),i++;continue}if(r.startsWith(" ")){t.push(m("context"," ",r.slice(1),{oldLineNumber:i,newLineNumber:o})),i++,o++;continue}if(r.startsWith("\\")){t.push(m("marker","",r));continue}}i=void 0,o=void 0,t.push(m("meta","",r))}return t}function Q(n){if(n==="")return[];const e=n.replace(/\r\n/g,`
|
|
2
2
|
`).replace(/\r/g,`
|
|
3
3
|
`).split(`
|
|
4
4
|
`);return e.at(-1)===""&&e.pop(),e}function m(n,e,t,i={}){return{kind:n,prefix:e,text:t,spans:t===""?[]:[{text:t,changed:!1}],...i}}function X(n){let e=0;for(;e<n.length;){if(n[e]?.kind!=="remove"){e++;continue}const i=e;for(;n[e]?.kind==="remove";)e++;const o=e;for(;n[e]?.kind==="add";)e++;if(o===e)continue;const r=n.slice(i,o),s=n.slice(o,e);Y(r,s)}}function Y(n,e){if(!(n.length+e.length>H))for(const t of Z(n,e)){const i=te(t.removed.text,t.added.text);i!==void 0&&(t.removed.spans=i.removed,t.added.spans=i.added)}}function Z(n,e){if(n.length===e.length)return n.map((o,r)=>({removed:o,added:e[r]})).filter(T);if(n.length===1)return ee(n[0],e);if(e.length===1)return ne(n,e[0]);const t=[],i=Math.min(n.length,e.length);for(let o=0;o<i;o++){const r=n[o],s=e[o];r===void 0||s===void 0||O(r.text,s.text)>=E&&t.push({removed:r,added:s})}return t}function T(n){return n.added!==void 0}function ee(n,e){if(n===void 0)return[];const t=N(n.text,e);return t===void 0?[]:[{removed:n,added:t}]}function ne(n,e){if(e===void 0)return[];const t=N(e.text,n);return t===void 0?[]:[{removed:t,added:e}]}function N(n,e){let t,i=E;for(const o of e){const r=O(n,o.text);r<=i||(t=o,i=r)}return t}function te(n,e){if(n===e||n.length>C||e.length>C)return;const t=j(n,e),i=_(t,n,e);if(Math.max(n.length,e.length)>=20&&i<G)return;const o=[],r=[];for(const s of t)s.value!==""&&(s.added?r.push({text:s.value,changed:!0}):s.removed?o.push({text:s.value,changed:!0}):(o.push({text:s.value,changed:!1}),r.push({text:s.value,changed:!1})));if(!(!o.some(s=>s.changed)&&!r.some(s=>s.changed)))return{removed:M(o),added:M(r)}}function O(n,e){return n===e?1:n.length>C||e.length>C?0:_(j(n,e),n,e)}function _(n,e,t){const i=Math.max(e.length,t.length);return i===0?1:n.reduce((r,s)=>s.added||s.removed?r:r+s.value.length,0)/i}function M(n){const e=[];for(const t of n){const i=e[e.length-1];i?.changed===t.changed?i.text+=t.text:e.push({...t})}return e}var ie=Object.defineProperty,oe=Object.getOwnPropertyDescriptor,W=(n,e,t,i)=>{for(var o=i>1?void 0:i?oe(e,t):e,r=n.length-1,s;r>=0;r--)(s=n[r])&&(o=(i?s(e,t,o):s(o))||o);return i&&o&&ie(e,t,o),o};let L=class extends A{constructor(){super(...arguments),this.diff=""}render(){const n=J(this.diff);return n.length===0?P`<p class="empty">No diff.</p>`:P`
|