@json-to-office/jto 0.16.0 → 0.17.2

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.
Files changed (25) hide show
  1. package/dist/cli.js +1 -1
  2. package/dist/client/assets/{HomePage-Czwc5NK6.js → HomePage-DbjVYI2P.js} +3 -3
  3. package/dist/client/assets/{HomePage-Czwc5NK6.js.map → HomePage-DbjVYI2P.js.map} +1 -1
  4. package/dist/client/assets/{JsonEditorPage-CwOeiOy6.js → JsonEditorPage-lSzUDiJH.js} +3 -3
  5. package/dist/client/assets/{JsonEditorPage-CwOeiOy6.js.map → JsonEditorPage-lSzUDiJH.js.map} +1 -1
  6. package/dist/client/assets/{MonacoPluginProvider-DQcmmuko.js → MonacoPluginProvider-CV1FeIGe.js} +3 -3
  7. package/dist/client/assets/{MonacoPluginProvider-DQcmmuko.js.map → MonacoPluginProvider-CV1FeIGe.js.map} +1 -1
  8. package/dist/client/assets/{button-DfjYrtU-.js → button-Du0uxpUI.js} +2 -2
  9. package/dist/client/assets/{button-DfjYrtU-.js.map → button-Du0uxpUI.js.map} +1 -1
  10. package/dist/client/assets/{editor-BPfMyucg.js → editor-BOmCyXLM.js} +7 -7
  11. package/dist/client/assets/{editor-BPfMyucg.js.map → editor-BOmCyXLM.js.map} +1 -1
  12. package/dist/client/assets/editor-monaco-json-CtvVtgZo.js +24 -0
  13. package/dist/client/assets/editor-monaco-json-CtvVtgZo.js.map +1 -0
  14. package/dist/client/assets/index-Auo5vP51.css +1 -0
  15. package/dist/client/assets/index-B3b75WNn.js +5 -0
  16. package/dist/client/assets/index-B3b75WNn.js.map +1 -0
  17. package/dist/client/assets/{preview-Cdpjm_5u.js → preview-F3b60n9i.js} +2 -2
  18. package/dist/client/assets/{preview-Cdpjm_5u.js.map → preview-F3b60n9i.js.map} +1 -1
  19. package/dist/client/index.html +2 -2
  20. package/package.json +5 -5
  21. package/dist/client/assets/editor-monaco-json-cWylTaeJ.js +0 -6
  22. package/dist/client/assets/editor-monaco-json-cWylTaeJ.js.map +0 -1
  23. package/dist/client/assets/index-Dd4Xxzh5.js +0 -5
  24. package/dist/client/assets/index-Dd4Xxzh5.js.map +0 -1
  25. package/dist/client/assets/index-DiQf3mCW.css +0 -1
@@ -1,9 +1,9 @@
1
- import{c as X,r as p,j as z}from"./react-vendor-CTFDOf2G.js";import{u as re,g as ce,c as le,V as he,a as be,d as pe,E as Ce}from"./editor-monaco-json-cWylTaeJ.js";import{f as Ee,F as we}from"./index-Dd4Xxzh5.js";import ye,{DiffEditor as Re}from"./monaco-editor-BcgxPCqT.js";import{u as Z,a as me,b as ve,f as Te,h as Se,T as Le,d as oe,t as Ne}from"./MonacoPluginProvider-DQcmmuko.js";import{B as ue}from"./button-DfjYrtU-.js";import{T as Me,u as xe,a as De}from"./HomePage-Czwc5NK6.js";import{u as de}from"./state-vendor-ByFYl9bq.js";import"./ui-vendor-HKNXoiLD.js";import"./query-vendor-Df8-oete.js";import"./radix-ui-BQBCrmlJ.js";const _e={initWith:function(e){const y=document.createElement("div"),g=e.editor.create(y),v=g.constructor.name,V=g.getModel().constructor.name;return{isInstanceValid:function(u){return u.constructor.name===v},isModelValid:function(u){return u.constructor.name===V},isRangesValid:function(u){return Array.isArray(u)?u.every(function(T){return typeof T=="object"&&T.constructor.name==="Object"?!(!T.hasOwnProperty("range")||!Array.isArray(T.range)||T.range.length!==4||!T.range.every(C=>C>0&&parseInt(C)===C)||T.hasOwnProperty("allowMultiline")&&typeof T.allowMultiline!="boolean"||T.hasOwnProperty("label")&&typeof T.label!="string"||T.hasOwnProperty("validate")&&typeof T.validate!="function"):!1}):!1}}}},ne=function(e,y,g){return"The value for the "+y+" should be of type "+(Array.isArray(e)?e.join(" | "):e)+". "+(g||"")},se=function(){const e=function(f,x){return typeof f!="object"||f===null?this.freeze?Object.freeze(f):f:f instanceof Date?this.freeze?Object.freeze(new Date(f)):new Date(f):x.call(this,f)},y=function(f,x){const u=Object.keys(f),T=new Array(u.length);for(let C=0;C<u.length;C++)T[u[C]]=e.call(this,f[u[C]],x);return T},g=function(f){return e.call(this,f,function(x){if(Array.isArray(x))return y.call(this,x,g);const u={};for(let T in x)!this.withProto&&Object.hasOwnProperty.call(x,T)===!1||(u[T]=e.call(this,x[T],g));return u})},v=function(){const f=function(u){const T=["withProto","freeze"];this[u]=T.reduce((function(C,w){return(C[w]=u>=this[w])&&(u-=this[w]),C}).bind(this),{})},x=Object.create(Object.defineProperties({},{withProto:{value:1},freeze:{value:2}}));for(let u=0;u<=3;u++)f.call(x,u);return x}(),V={withProto:g.bind(v[1]),andFreeze:g.bind(v[2]),withProtoAndFreeze:g.bind(v[3])},D=g.bind(v[0]);for(let f in V)Object.defineProperty(D,f,{enumerable:!1,writable:!1,configurable:!1,value:V[f]});return D}(),fe={SINGLE_LINE_HIGHLIGHT_CLASS:"editableArea--single-line",MULTI_LINE_HIGHLIGHT_CLASS:"editableArea--multi-line"},Ie=function(e,y,g){const v=g.Range,V=function(t,a){const s=t.range,d=a.range;if(s[0]<d[0]||s[0]===d[0]&&s[3]<d[1])return-1},D=function(t,a){const s=a.split(`
2
- `),d=s.length,c=[];return t.forEach(function(h,L){if(h===0)throw new Error("Range values cannot be zero");switch(L){case 0:{if(h<0)throw new Error("Start Line of Range cannot be negative");if(h>d)throw new Error("Provided Start Line("+h+") is out of bounds. Max Lines in content is "+d);c[L]=h}break;case 1:{let N=h;const _=c[0],I=s[_-1].length;if(N<0){if(N=I-Math.abs(N),N<0)throw new Error("Provided Start Column("+h+") is out of bounds. Max Column in line "+_+" is "+I)}else if(N>I+1)throw new Error("Provided Start Column("+h+") is out of bounds. Max Column in line "+_+" is "+I);c[L]=N}break;case 2:{let N=h;if(N<0){if(N=d-Math.abs(h),N<0)throw new Error("Provided End Line("+h+") is out of bounds. Max Lines in content is "+d);N<c[0]&&console.warn("Provided End Line("+h+") is less than the start Line, the Restriction may not behave as expected")}else if(h>d)throw new Error("Provided End Line("+h+") is out of bounds. Max Lines in content is "+d);c[L]=N}break;case 3:{let N=h;const _=c[2],I=s[_-1].length;if(N<0){if(N=I-Math.abs(N),N<0)throw new Error("Provided End Column("+h+") is out of bounds. Max Column in line "+_+" is "+I)}else if(N>I+1)throw new Error("Provided Start Column("+h+") is out of bounds. Max Column in line "+_+" is "+I);c[L]=N}break}}),c};let f=se(y).sort(V);const x=function(t){const a=e.getValue();t.forEach(function(s,d){const c=D(s.range,a),h=c[0],L=c[1],N=c[2],_=c[3];s._originalRange=c.slice(),s.range=new v(h,L,N,_),s.index=d,s.allowMultiline||(s.allowMultiline=v.spansMultipleLines(s.range)),s.label||(s.label=`[${h},${L} -> ${N}${_}]`)})},u=function(){return f.reduce(function(t,a){return t[a.label]={allowMultiline:a.allowMultiline||!1,index:a.index,range:Object.assign({},a.range),originalRange:a._originalRange.slice()},t},{})},T=function(){return f.reduce(function(t,a){return t[a.label]=e.getValueInRange(a.range),t},{})},C=function(t,a){if(typeof t=="object"&&!Array.isArray(t)){a=typeof a=="boolean"?a:!1;const s=f.reduce(function(d,c){return c.label&&(d[c.label]=c),d},{});for(let d in t){const c=s[d];if(c){const h=t[d];if(J(c,h))throw new Error("Multiline change is not allowed for "+d);const L=se(c.range);if(L.endLine=L.startLine+h.split(`
1
+ import{c as X,r as p,j as z}from"./react-vendor-CTFDOf2G.js";import{u as re,g as ce,c as le,V as he,a as be,d as pe,E as Ce}from"./editor-monaco-json-CtvVtgZo.js";import{f as Ee,F as we}from"./index-B3b75WNn.js";import ye,{DiffEditor as Re}from"./monaco-editor-BcgxPCqT.js";import{u as Z,a as me,b as ve,f as Se,h as Te,T as Le,d as se,t as Ne}from"./MonacoPluginProvider-CV1FeIGe.js";import{B as ue}from"./button-Du0uxpUI.js";import{T as Me,u as xe,a as De}from"./HomePage-DbjVYI2P.js";import{u as de}from"./state-vendor-ByFYl9bq.js";import"./ui-vendor-HKNXoiLD.js";import"./query-vendor-Df8-oete.js";import"./radix-ui-BQBCrmlJ.js";const _e={initWith:function(e){const y=document.createElement("div"),g=e.editor.create(y),v=g.constructor.name,V=g.getModel().constructor.name;return{isInstanceValid:function(u){return u.constructor.name===v},isModelValid:function(u){return u.constructor.name===V},isRangesValid:function(u){return Array.isArray(u)?u.every(function(S){return typeof S=="object"&&S.constructor.name==="Object"?!(!S.hasOwnProperty("range")||!Array.isArray(S.range)||S.range.length!==4||!S.range.every(C=>C>0&&parseInt(C)===C)||S.hasOwnProperty("allowMultiline")&&typeof S.allowMultiline!="boolean"||S.hasOwnProperty("label")&&typeof S.label!="string"||S.hasOwnProperty("validate")&&typeof S.validate!="function"):!1}):!1}}}},ne=function(e,y,g){return"The value for the "+y+" should be of type "+(Array.isArray(e)?e.join(" | "):e)+". "+(g||"")},ie=function(){const e=function(f,x){return typeof f!="object"||f===null?this.freeze?Object.freeze(f):f:f instanceof Date?this.freeze?Object.freeze(new Date(f)):new Date(f):x.call(this,f)},y=function(f,x){const u=Object.keys(f),S=new Array(u.length);for(let C=0;C<u.length;C++)S[u[C]]=e.call(this,f[u[C]],x);return S},g=function(f){return e.call(this,f,function(x){if(Array.isArray(x))return y.call(this,x,g);const u={};for(let S in x)!this.withProto&&Object.hasOwnProperty.call(x,S)===!1||(u[S]=e.call(this,x[S],g));return u})},v=function(){const f=function(u){const S=["withProto","freeze"];this[u]=S.reduce((function(C,w){return(C[w]=u>=this[w])&&(u-=this[w]),C}).bind(this),{})},x=Object.create(Object.defineProperties({},{withProto:{value:1},freeze:{value:2}}));for(let u=0;u<=3;u++)f.call(x,u);return x}(),V={withProto:g.bind(v[1]),andFreeze:g.bind(v[2]),withProtoAndFreeze:g.bind(v[3])},D=g.bind(v[0]);for(let f in V)Object.defineProperty(D,f,{enumerable:!1,writable:!1,configurable:!1,value:V[f]});return D}(),fe={SINGLE_LINE_HIGHLIGHT_CLASS:"editableArea--single-line",MULTI_LINE_HIGHLIGHT_CLASS:"editableArea--multi-line"},Ie=function(e,y,g){const v=g.Range,V=function(t,a){const s=t.range,d=a.range;if(s[0]<d[0]||s[0]===d[0]&&s[3]<d[1])return-1},D=function(t,a){const s=a.split(`
2
+ `),d=s.length,l=[];return t.forEach(function(h,L){if(h===0)throw new Error("Range values cannot be zero");switch(L){case 0:{if(h<0)throw new Error("Start Line of Range cannot be negative");if(h>d)throw new Error("Provided Start Line("+h+") is out of bounds. Max Lines in content is "+d);l[L]=h}break;case 1:{let N=h;const _=l[0],I=s[_-1].length;if(N<0){if(N=I-Math.abs(N),N<0)throw new Error("Provided Start Column("+h+") is out of bounds. Max Column in line "+_+" is "+I)}else if(N>I+1)throw new Error("Provided Start Column("+h+") is out of bounds. Max Column in line "+_+" is "+I);l[L]=N}break;case 2:{let N=h;if(N<0){if(N=d-Math.abs(h),N<0)throw new Error("Provided End Line("+h+") is out of bounds. Max Lines in content is "+d);N<l[0]&&console.warn("Provided End Line("+h+") is less than the start Line, the Restriction may not behave as expected")}else if(h>d)throw new Error("Provided End Line("+h+") is out of bounds. Max Lines in content is "+d);l[L]=N}break;case 3:{let N=h;const _=l[2],I=s[_-1].length;if(N<0){if(N=I-Math.abs(N),N<0)throw new Error("Provided End Column("+h+") is out of bounds. Max Column in line "+_+" is "+I)}else if(N>I+1)throw new Error("Provided Start Column("+h+") is out of bounds. Max Column in line "+_+" is "+I);l[L]=N}break}}),l};let f=ie(y).sort(V);const x=function(t){const a=e.getValue();t.forEach(function(s,d){const l=D(s.range,a),h=l[0],L=l[1],N=l[2],_=l[3];s._originalRange=l.slice(),s.range=new v(h,L,N,_),s.index=d,s.allowMultiline||(s.allowMultiline=v.spansMultipleLines(s.range)),s.label||(s.label=`[${h},${L} -> ${N}${_}]`)})},u=function(){return f.reduce(function(t,a){return t[a.label]={allowMultiline:a.allowMultiline||!1,index:a.index,range:Object.assign({},a.range),originalRange:a._originalRange.slice()},t},{})},S=function(){return f.reduce(function(t,a){return t[a.label]=e.getValueInRange(a.range),t},{})},C=function(t,a){if(typeof t=="object"&&!Array.isArray(t)){a=typeof a=="boolean"?a:!1;const s=f.reduce(function(d,l){return l.label&&(d[l.label]=l),d},{});for(let d in t){const l=s[d];if(l){const h=t[d];if(J(l,h))throw new Error("Multiline change is not allowed for "+d);const L=ie(l.range);if(L.endLine=L.startLine+h.split(`
3
3
  `).length-1,L.endColumn=h.split(`
4
- `).pop().length,K(c,h,L))throw new Error("Change is invalidated by validate function of "+d);e.applyEdits([{forceMoveMarkers:!!a,range:c.range,text:h}])}else console.error("No restriction found for "+d)}}else throw new Error("Value must be an object")},w=function(){return e._restrictionChangeListener.dispose(),window.removeEventListener("error",k),delete e.editInRestrictedArea,delete e.disposeRestrictions,delete e.getValueInEditableRanges,delete e.updateValueInEditableRanges,delete e.updateRestrictions,delete e.getCurrentEditableRanges,delete e.toggleHighlightOfEditableAreas,delete e._hasHighlight,delete e._isRestrictedModel,delete e._isCursorAtCheckPoint,delete e._currentCursorPositions,delete e._editableRangeChangeListener,delete e._restrictionChangeListener,delete e._oldDecorations,delete e._oldDecorationsSource,e},B=function(t){t.some(function(a){const s=a.lineNumber,d=a.column,c=f.length;for(let h=0;h<c;h++){const L=f[h].range;if(L.startLineNumber===s&&L.startColumn===d||L.endLineNumber===s&&L.endColumn===d)return e.pushStackElement(),!0}})},q=function(t){typeof t=="function"&&e._editableRangeChangeListener.push(t)},R=function(t,a){const s=u();e._editableRangeChangeListener.forEach(function(d){d.call(e,t,a,s)})},P=function(){return Promise.resolve().then(function(){e.editInRestrictedArea=!0,e.undo(),e.editInRestrictedArea=!1,e._hasHighlight&&e._oldDecorationsSource&&(e.deltaDecorations(e._oldDecorations,e._oldDecorationsSource),e._oldDecorationsSource.forEach(function(t){t.range=e.getDecorationRange(t.id)}))})},j=function(t,a,s,d,c,h){let L=a.endLineNumber,N=a.endColumn;t.prevRange=a,t.range=a.setEndPosition(s,d);const _=f.length;let I=c.length;const A=d-N,$=s-L,n=e._currentCursorPositions||[],b=n.length;if(I!==b&&(c=c.filter(function(o){const i=o.range;for(let r=0;r<b;r++){const E=n[r];if(i.startLineNumber===E.startLineNumber&&i.endLineNumber===E.endLineNumber&&i.startColumn===E.startColumn&&i.endColumn===E.endColumn)return!0}return!1}),I=c.length),$!==0){for(let o=t.index+1;o<_;o++){const i=f[o],r=i.range;L===r.startLineNumber&&(r.startColumn+=A),L===r.endLineNumber&&(r.endColumn+=A),r.startLineNumber+=$,r.endLineNumber+=$,i.range=r}for(let o=h+1;o<I;o++){const i=c[o],r=i.range,E=r.toString(),S=rangeMap[E];delete rangeMap[E],L===r.startLineNumber&&(r.startColumn+=A),L===r.endLineNumber&&(r.endColumn+=A),r.startLineNumber+=$,r.endLineNumber+=$,i.range=r,rangeMap[r.toString()]=S}}else{for(let o=t.index+1;o<_;o++){const i=f[o],r=i.range;if(r.startLineNumber>L)break;r.startColumn+=A,r.endColumn+=A,i.range=r}for(let o=h+1;o<I;o++){const i=c[o],r=i.range,E=r.toString(),S=rangeMap[E];if(delete rangeMap[E],r.startLineNumber>L){rangeMap[r.toString()]=S;break}else r.startColumn+=A,r.endColumn+=A,i.range=r,rangeMap[r.toString()]=S}}},H=function(t,a){const s={},d=t.range;return t.text===""?s.isDeletion=!0:d.startLineNumber===d.endLineNumber&&d.startColumn===d.endColumn?s.isAddition=!0:s.isReplacement=!0,s.startLineOfRange=d.startLineNumber===a.startLineNumber,s.startColumnOfRange=d.startColumn===a.startColumn,s.endLineOfRange=d.endLineNumber===a.endLineNumber,s.endColumnOfRange=d.endColumn===a.endColumn,s.middleLineOfRange=!s.startLineOfRange&&!s.endLineOfRange,a.startLineNumber===a.endLineNumber?s.rangeIsSingleLine=!0:s.rangeIsMultiLine=!0,s},U=function(t){f=se(t).sort(V),x(f)},G=function(t){if(e._hasHighlight)e.deltaDecorations(e._oldDecorations,[]),delete e._oldDecorations,delete e._oldDecorationsSource,e._hasHighlight=!1;else{const a=t.cssClassForSingleLine||fe.SINGLE_LINE_HIGHLIGHT_CLASS,s=t.cssClassForMultiLine||fe.MULTI_LINE_HIGHLIGHT_CLASS,d=f.map(function(c){const h={range:c.range,options:{className:c.allowMultiline?s:a}};return c.label&&(h.hoverMessage=c.label),h});e._oldDecorations=e.deltaDecorations([],d),e._oldDecorationsSource=d.map(function(c,h){return Object.assign({},c,{id:e._oldDecorations[h]})}),e._hasHighlight=!0}},k=function(){console.debug("handler for unhandled promise rejection")},F=function(t){for(let a in t){const s=t[a];s.range=s.prevRange}},J=function(t,a){return!t.allowMultiline&&a.includes(`
5
- `)},K=function(t,a,s){return t.validate&&!t.validate(a,s,t.lastInfo)},Y={_isRestrictedModel:!0,_isRestrictedValueValid:!0,_editableRangeChangeListener:[],_isCursorAtCheckPoint:B,_currentCursorPositions:[]};x(f),e._hasHighlight=!1,Y._restrictionChangeListener=e.onDidChangeContent(function(t){const a=t.isUndoing;if(e._isRestrictedValueValid=!0,a&&e.editInRestrictedArea)e.editInRestrictedArea&&(e._isRestrictedValueValid=!1);else{const s=t.changes.sort(V),d={},c=f.length;if(s.every(function(L){const N=L.range,_=N.toString();d[_]=null;for(let I=0;I<c;I++){const A=f[I];if(A.range.containsRange(N))return J(A,L.text)?!1:(d[_]=A,!0)}return!1})){s.forEach(function(_,I){const A=_.range,$=d[A.toString()],n=$.range,b=_.text||"",o=(b.match(/\n/g)||[]).length,i=b.split(/\n/g).pop().length,r=A.endLineNumber-A.startLineNumber,E=A.endColumn-A.startColumn;let S=n.endLineNumber,M=n.endColumn,l=0;(n.endLineNumber===A.startLineNumber||n.endLineNumber===A.endLineNumber)&&(l+=n.endColumn-A.startColumn+1);const m=H(_,n);$.lastInfo=m,(m.isAddition||m.isReplacement)&&(m.rangeIsSingleLine&&(o===0?M+=i:(S+=o,m.startColumnOfRange?M+=i:m.endColumnOfRange?M=i+1:M=i+l)),m.rangeIsMultiLine&&(S+=o,m.endLineOfRange&&(o===0?M+=i:M=l+i))),(m.isDeletion||m.isReplacement)&&(m.rangeIsSingleLine&&(M-=E),m.rangeIsMultiLine&&(m.endLineOfRange?(S-=r,M-=E):S-=r)),j($,n,S,M,s,I)});const L=e.getValueInEditableRanges(),N={};for(let _ in d){const I=d[_],A=I.range,$=I.label||A.toString(),n=L[$];if(K(I,n,A)){F(d),P();return}N[$]=n}e._hasHighlight&&e._oldDecorationsSource.forEach(function(_){_.range=e.getDecorationRange(_.id)}),R(N,L)}else P()}}),window.onerror=k;const Q={editInRestrictedArea:!1,getCurrentEditableRanges:u,getValueInEditableRanges:T,disposeRestrictions:w,onDidChangeContentInEditableRange:q,updateRestrictions:U,updateValueInEditableRanges:C,toggleHighlightOfEditableAreas:G};for(let t in Y)Object.defineProperty(e,t,{enumerable:!1,configurable:!0,writable:!0,value:Y[t]});for(let t in Q)Object.defineProperty(e,t,{enumerable:!1,configurable:!0,writable:!0,value:Q[t]});return e};function Pe(e){if(e===void 0)throw new Error(["Please pass the monaco global variable into function as","(eg:)constrainedEditor({ range : monaco.range });"].join(`
6
- `));const y=function(R){const P=R.getModel();if(P._isCursorAtCheckPoint){const j=R.getSelections(),H=j.map(function(U){return{lineNumber:U.positionLineNumber,column:U.positionColumn}});P._isCursorAtCheckPoint(H),P._currentCursorPositions=j}},g={},{isInstanceValid:v,isModelValid:V,isRangesValid:D}=_e.initWith(e),f=function(R){if(v(R)){let P=R.getDomNode();return w._listener=y.bind(B,R),w._editorInstance=R,w._editorInstance._isInDevMode=!1,P.addEventListener("keydown",w._listener,!0),w._onChangeModelDisposable=R.onDidChangeModel(function(){P&&P.removeEventListener("keydown",w._listener,!0);const j=R.getDomNode();j&&j.addEventListener("keydown",w._listener,!0),P=j}),!0}else throw new Error(ne("ICodeEditor","editorInstance","This type interface can be found in monaco editor documentation"))},x=function(R,P){if(V(R))if(D(P)){const j=Ie(R,P,e);return g[j.uri.toString()]=j,j}else throw new Error(ne("Array<RangeRestrictionObject>","ranges","Please refer constrained editor documentation for proper structure"));else throw new Error(ne("ICodeEditor","editorInstance","This type interface can be found in monaco editor documentation"))},u=function(R){if(V(R)){const P=R.uri.toString(),j=g[P];return j?j.disposeRestrictions():(console.warn("Current Model is not a restricted Model"),!1)}else throw new Error(ne("ICodeEditor","editorInstance","This type interface can be found in monaco editor documentation"))},T=function(){if(w._editorInstance){const P=w._editorInstance.getDomNode();P&&P.removeEventListener("keydown",w._listener),w._onChangeModelDisposable&&w._onChangeModelDisposable.dispose(),delete w._listener,delete w._editorInstance._isInDevMode,delete w._editorInstance._devModeAction,delete w._editorInstance,delete w._onChangeModelDisposable;for(let j in g)delete g[j];return!0}return!1},C=function(){w._editorInstance._isInDevMode?(w._editorInstance._isInDevMode=!1,w._editorInstance._devModeAction.dispose(),delete w._editorInstance._devModeAction):(w._editorInstance._isInDevMode=!0,w._editorInstance._devModeAction=w._editorInstance.addAction({id:"showRange",label:"Show Range in console",contextMenuGroupId:"navigation",contextMenuOrder:1.5,run:function(R){const j=R.getSelections().reduce(function(H,{startLineNumber:U,endLineNumber:G,startColumn:k,endColumn:F}){return H.push("range : "+JSON.stringify([U,k,G,F])),H},[]).join(`
4
+ `).pop().length,K(l,h,L))throw new Error("Change is invalidated by validate function of "+d);e.applyEdits([{forceMoveMarkers:!!a,range:l.range,text:h}])}else console.error("No restriction found for "+d)}}else throw new Error("Value must be an object")},w=function(){return e._restrictionChangeListener.dispose(),window.removeEventListener("error",k),delete e.editInRestrictedArea,delete e.disposeRestrictions,delete e.getValueInEditableRanges,delete e.updateValueInEditableRanges,delete e.updateRestrictions,delete e.getCurrentEditableRanges,delete e.toggleHighlightOfEditableAreas,delete e._hasHighlight,delete e._isRestrictedModel,delete e._isCursorAtCheckPoint,delete e._currentCursorPositions,delete e._editableRangeChangeListener,delete e._restrictionChangeListener,delete e._oldDecorations,delete e._oldDecorationsSource,e},B=function(t){t.some(function(a){const s=a.lineNumber,d=a.column,l=f.length;for(let h=0;h<l;h++){const L=f[h].range;if(L.startLineNumber===s&&L.startColumn===d||L.endLineNumber===s&&L.endColumn===d)return e.pushStackElement(),!0}})},q=function(t){typeof t=="function"&&e._editableRangeChangeListener.push(t)},R=function(t,a){const s=u();e._editableRangeChangeListener.forEach(function(d){d.call(e,t,a,s)})},P=function(){return Promise.resolve().then(function(){e.editInRestrictedArea=!0,e.undo(),e.editInRestrictedArea=!1,e._hasHighlight&&e._oldDecorationsSource&&(e.deltaDecorations(e._oldDecorations,e._oldDecorationsSource),e._oldDecorationsSource.forEach(function(t){t.range=e.getDecorationRange(t.id)}))})},j=function(t,a,s,d,l,h){let L=a.endLineNumber,N=a.endColumn;t.prevRange=a,t.range=a.setEndPosition(s,d);const _=f.length;let I=l.length;const A=d-N,$=s-L,n=e._currentCursorPositions||[],b=n.length;if(I!==b&&(l=l.filter(function(o){const i=o.range;for(let r=0;r<b;r++){const E=n[r];if(i.startLineNumber===E.startLineNumber&&i.endLineNumber===E.endLineNumber&&i.startColumn===E.startColumn&&i.endColumn===E.endColumn)return!0}return!1}),I=l.length),$!==0){for(let o=t.index+1;o<_;o++){const i=f[o],r=i.range;L===r.startLineNumber&&(r.startColumn+=A),L===r.endLineNumber&&(r.endColumn+=A),r.startLineNumber+=$,r.endLineNumber+=$,i.range=r}for(let o=h+1;o<I;o++){const i=l[o],r=i.range,E=r.toString(),T=rangeMap[E];delete rangeMap[E],L===r.startLineNumber&&(r.startColumn+=A),L===r.endLineNumber&&(r.endColumn+=A),r.startLineNumber+=$,r.endLineNumber+=$,i.range=r,rangeMap[r.toString()]=T}}else{for(let o=t.index+1;o<_;o++){const i=f[o],r=i.range;if(r.startLineNumber>L)break;r.startColumn+=A,r.endColumn+=A,i.range=r}for(let o=h+1;o<I;o++){const i=l[o],r=i.range,E=r.toString(),T=rangeMap[E];if(delete rangeMap[E],r.startLineNumber>L){rangeMap[r.toString()]=T;break}else r.startColumn+=A,r.endColumn+=A,i.range=r,rangeMap[r.toString()]=T}}},H=function(t,a){const s={},d=t.range;return t.text===""?s.isDeletion=!0:d.startLineNumber===d.endLineNumber&&d.startColumn===d.endColumn?s.isAddition=!0:s.isReplacement=!0,s.startLineOfRange=d.startLineNumber===a.startLineNumber,s.startColumnOfRange=d.startColumn===a.startColumn,s.endLineOfRange=d.endLineNumber===a.endLineNumber,s.endColumnOfRange=d.endColumn===a.endColumn,s.middleLineOfRange=!s.startLineOfRange&&!s.endLineOfRange,a.startLineNumber===a.endLineNumber?s.rangeIsSingleLine=!0:s.rangeIsMultiLine=!0,s},U=function(t){f=ie(t).sort(V),x(f)},G=function(t){if(e._hasHighlight)e.deltaDecorations(e._oldDecorations,[]),delete e._oldDecorations,delete e._oldDecorationsSource,e._hasHighlight=!1;else{const a=t.cssClassForSingleLine||fe.SINGLE_LINE_HIGHLIGHT_CLASS,s=t.cssClassForMultiLine||fe.MULTI_LINE_HIGHLIGHT_CLASS,d=f.map(function(l){const h={range:l.range,options:{className:l.allowMultiline?s:a}};return l.label&&(h.hoverMessage=l.label),h});e._oldDecorations=e.deltaDecorations([],d),e._oldDecorationsSource=d.map(function(l,h){return Object.assign({},l,{id:e._oldDecorations[h]})}),e._hasHighlight=!0}},k=function(){console.debug("handler for unhandled promise rejection")},F=function(t){for(let a in t){const s=t[a];s.range=s.prevRange}},J=function(t,a){return!t.allowMultiline&&a.includes(`
5
+ `)},K=function(t,a,s){return t.validate&&!t.validate(a,s,t.lastInfo)},Y={_isRestrictedModel:!0,_isRestrictedValueValid:!0,_editableRangeChangeListener:[],_isCursorAtCheckPoint:B,_currentCursorPositions:[]};x(f),e._hasHighlight=!1,Y._restrictionChangeListener=e.onDidChangeContent(function(t){const a=t.isUndoing;if(e._isRestrictedValueValid=!0,a&&e.editInRestrictedArea)e.editInRestrictedArea&&(e._isRestrictedValueValid=!1);else{const s=t.changes.sort(V),d={},l=f.length;if(s.every(function(L){const N=L.range,_=N.toString();d[_]=null;for(let I=0;I<l;I++){const A=f[I];if(A.range.containsRange(N))return J(A,L.text)?!1:(d[_]=A,!0)}return!1})){s.forEach(function(_,I){const A=_.range,$=d[A.toString()],n=$.range,b=_.text||"",o=(b.match(/\n/g)||[]).length,i=b.split(/\n/g).pop().length,r=A.endLineNumber-A.startLineNumber,E=A.endColumn-A.startColumn;let T=n.endLineNumber,M=n.endColumn,c=0;(n.endLineNumber===A.startLineNumber||n.endLineNumber===A.endLineNumber)&&(c+=n.endColumn-A.startColumn+1);const m=H(_,n);$.lastInfo=m,(m.isAddition||m.isReplacement)&&(m.rangeIsSingleLine&&(o===0?M+=i:(T+=o,m.startColumnOfRange?M+=i:m.endColumnOfRange?M=i+1:M=i+c)),m.rangeIsMultiLine&&(T+=o,m.endLineOfRange&&(o===0?M+=i:M=c+i))),(m.isDeletion||m.isReplacement)&&(m.rangeIsSingleLine&&(M-=E),m.rangeIsMultiLine&&(m.endLineOfRange?(T-=r,M-=E):T-=r)),j($,n,T,M,s,I)});const L=e.getValueInEditableRanges(),N={};for(let _ in d){const I=d[_],A=I.range,$=I.label||A.toString(),n=L[$];if(K(I,n,A)){F(d),P();return}N[$]=n}e._hasHighlight&&e._oldDecorationsSource.forEach(function(_){_.range=e.getDecorationRange(_.id)}),R(N,L)}else P()}}),window.onerror=k;const Q={editInRestrictedArea:!1,getCurrentEditableRanges:u,getValueInEditableRanges:S,disposeRestrictions:w,onDidChangeContentInEditableRange:q,updateRestrictions:U,updateValueInEditableRanges:C,toggleHighlightOfEditableAreas:G};for(let t in Y)Object.defineProperty(e,t,{enumerable:!1,configurable:!0,writable:!0,value:Y[t]});for(let t in Q)Object.defineProperty(e,t,{enumerable:!1,configurable:!0,writable:!0,value:Q[t]});return e};function Pe(e){if(e===void 0)throw new Error(["Please pass the monaco global variable into function as","(eg:)constrainedEditor({ range : monaco.range });"].join(`
6
+ `));const y=function(R){const P=R.getModel();if(P._isCursorAtCheckPoint){const j=R.getSelections(),H=j.map(function(U){return{lineNumber:U.positionLineNumber,column:U.positionColumn}});P._isCursorAtCheckPoint(H),P._currentCursorPositions=j}},g={},{isInstanceValid:v,isModelValid:V,isRangesValid:D}=_e.initWith(e),f=function(R){if(v(R)){let P=R.getDomNode();return w._listener=y.bind(B,R),w._editorInstance=R,w._editorInstance._isInDevMode=!1,P.addEventListener("keydown",w._listener,!0),w._onChangeModelDisposable=R.onDidChangeModel(function(){P&&P.removeEventListener("keydown",w._listener,!0);const j=R.getDomNode();j&&j.addEventListener("keydown",w._listener,!0),P=j}),!0}else throw new Error(ne("ICodeEditor","editorInstance","This type interface can be found in monaco editor documentation"))},x=function(R,P){if(V(R))if(D(P)){const j=Ie(R,P,e);return g[j.uri.toString()]=j,j}else throw new Error(ne("Array<RangeRestrictionObject>","ranges","Please refer constrained editor documentation for proper structure"));else throw new Error(ne("ICodeEditor","editorInstance","This type interface can be found in monaco editor documentation"))},u=function(R){if(V(R)){const P=R.uri.toString(),j=g[P];return j?j.disposeRestrictions():(console.warn("Current Model is not a restricted Model"),!1)}else throw new Error(ne("ICodeEditor","editorInstance","This type interface can be found in monaco editor documentation"))},S=function(){if(w._editorInstance){const P=w._editorInstance.getDomNode();P&&P.removeEventListener("keydown",w._listener),w._onChangeModelDisposable&&w._onChangeModelDisposable.dispose(),delete w._listener,delete w._editorInstance._isInDevMode,delete w._editorInstance._devModeAction,delete w._editorInstance,delete w._onChangeModelDisposable;for(let j in g)delete g[j];return!0}return!1},C=function(){w._editorInstance._isInDevMode?(w._editorInstance._isInDevMode=!1,w._editorInstance._devModeAction.dispose(),delete w._editorInstance._devModeAction):(w._editorInstance._isInDevMode=!0,w._editorInstance._devModeAction=w._editorInstance.addAction({id:"showRange",label:"Show Range in console",contextMenuGroupId:"navigation",contextMenuOrder:1.5,run:function(R){const j=R.getSelections().reduce(function(H,{startLineNumber:U,endLineNumber:G,startColumn:k,endColumn:F}){return H.push("range : "+JSON.stringify([U,k,G,F])),H},[]).join(`
7
7
  `);console.log(`Selected Ranges :
8
- `+JSON.stringify(j,null,2))}}))},w={_listener:null,_editorInstance:null,_uriRestrictionMap:g,_injectedResources:e},B=Object.create(w),q={initializeIn:f,addRestrictionsTo:x,removeRestrictionsIn:u,disposeConstrainer:T,toggleDevMode:C};for(let R in q)Object.defineProperty(B,R,{enumerable:!1,writable:!1,configurable:!1,value:q[R]});return Object.freeze(B)}function Ae(e){const y=`.${we}.theme.json`;return e.endsWith(y)?e:e.replace(/\.\w+\.theme\.json$/,"").replace(/\.theme\.json$/,"").replace(/\.json$/,"")+y}function Oe({document:e,readOnly:y=!1,onChange:g}){const v=p.useRef(null),V=p.useRef(null),D=p.useRef(null),{theme:f}=Ee(),[x,u]=p.useState([]),[T,C]=p.useState(!0),[w,B]=p.useState(!1),q=p.useRef(!1),R=Z(t=>t.pendingDiffs[e.name]),P=Z(t=>t.clearPendingDiff),j=Z(t=>t.saveDocument),{registerEditor:H,unregisterEditor:U,setActiveEditor:G}=re(),k=f==="system"?window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light":f,F=p.useCallback(t=>{V.current=t},[]),J=p.useCallback((t,a)=>{v.current=t,D.current=t.getModel(),H(e.name,t,a),G(e.name);const s=Pe(a);t.getModel()&&s.initializeIn(t),t.updateOptions({formatOnType:!0,formatOnPaste:!0,automaticLayout:!0,minimap:{enabled:!1},scrollBeyondLastLine:!0,wordWrap:"on",folding:!0,foldingStrategy:"indentation",suggest:{showColors:!0,showConstants:!0,showEnums:!0,showFields:!0,showFunctions:!0,showKeywords:!0,showModules:!0,showProperties:!0,showSnippets:!0,showStructs:!0,showTypeParameters:!0,showUnits:!0,showValues:!0,showVariables:!0}}),t.addCommand(a.KeyMod.CtrlCmd|a.KeyCode.KeyK,()=>{const c=ce(t,a);if(c){const h=le(c);window.dispatchEvent(new CustomEvent("monaco-selection-to-ai",{detail:{documentName:e.name,selection:c,snippet:h,isTheme:!0}}))}}),t.addCommand(a.KeyMod.CtrlCmd|a.KeyCode.KeyS,()=>{console.log("Save command triggered in theme editor")}),t.addAction({id:"send-theme-to-ai-assistant",label:"Send to AI Assistant (⌘K)",contextMenuGroupId:"navigation",contextMenuOrder:1.5,keybindings:[a.KeyMod.CtrlCmd|a.KeyCode.KeyK],run:function(){const c=ce(t,a);if(c){const h=le(c);window.dispatchEvent(new CustomEvent("monaco-selection-to-ai",{detail:{documentName:e.name,selection:c,snippet:h,isTheme:!0}}))}}}),setTimeout(()=>{var c;(c=t.getAction("editor.action.formatDocument"))==null||c.run()},100),console.log("Monaco theme editor mounted")},[e.name,H,G]);p.useEffect(()=>()=>{U(e.name)},[e.name,U]);const K=p.useCallback((t,a)=>{t!==void 0&&g&&g(t)},[g]),Y=p.useCallback(t=>{const a=t.map(s=>{var d;return{path:"",message:s.message,code:typeof s.code=="string"?s.code:((d=s.code)==null?void 0:d.value)||"validation_error",startLineNumber:s.startLineNumber,startColumn:s.startColumn,endLineNumber:s.endLineNumber,endColumn:s.endColumn,severity:s.severity>=8?"error":s.severity>=4?"warning":"info"}});u(a),a.length>0&&!q.current&&(C(!0),B(!1)),a.length===0&&(q.current=!1)},[]),Q=p.useCallback(t=>{v.current&&t.startLineNumber&&t.startColumn&&(v.current.setPosition({lineNumber:t.startLineNumber,column:t.startColumn}),v.current.revealLineInCenter(t.startLineNumber),v.current.focus())},[]);return p.useEffect(()=>{if(v.current){const t=k==="dark"?"vs-dark":"vs";v.current.updateOptions({theme:t})}},[k]),z.jsxs("div",{className:"relative h-full",children:[R?z.jsxs(z.Fragment,{children:[z.jsxs("div",{className:"flex items-center justify-between px-2 py-1 border-b bg-muted/40 text-xs",children:[z.jsxs("div",{children:["Review changes for"," ",z.jsx("span",{className:"font-medium",children:e.name})]}),z.jsxs("div",{className:"flex gap-2",children:[z.jsx(ue,{variant:"secondary",size:"sm",onClick:()=>P(e.name),children:"Discard"}),z.jsx(ue,{size:"sm",onClick:()=>{j(e.name,R.modified),P(e.name,!0)},children:"Apply Changes"})]})]}),z.jsx(Re,{height:"calc(100% - 32px)",original:R.original,modified:R.modified,language:"json",theme:k==="dark"?"vs-dark":"vs",options:{readOnly:!0,renderSideBySide:!0,originalEditable:!1,automaticLayout:!0,minimap:{enabled:!1}},beforeMount:F})]}):z.jsx(ye,{height:"100%",language:"json",defaultPath:Ae(e.name),value:e.text,theme:k==="dark"?"vs-dark":"vs",onChange:K,beforeMount:F,onMount:J,onValidate:Y,options:{readOnly:y,lineNumbers:"on",glyphMargin:!0,folding:!0,lineDecorationsWidth:5,lineNumbersMinChars:3,renderValidationDecorations:"on",quickSuggestions:{other:!0,comments:!1,strings:!0},acceptSuggestionOnCommitCharacter:!0,acceptSuggestionOnEnter:"on",accessibilitySupport:"auto",autoIndent:"advanced",formatOnType:!0,formatOnPaste:!0,automaticLayout:!0,minimap:{enabled:!1},scrollBeyondLastLine:!0,wordWrap:"on"}}),z.jsx("div",{className:"absolute top-0 right-0",children:z.jsx(he,{errors:x,onClick:()=>{C(!0),B(!1)}})}),T&&x.length>0&&z.jsx(be,{errors:x,isMinimized:w,onToggleMinimize:()=>B(!w),onErrorClick:Q,onClose:()=>{C(!1),q.current=!0},className:"z-40"})]})}const je=X.memo(Oe);function ke({name:e,text:y,buildError:g,saveDocumentDebounceWait:v,documentType:V}){const{saveDocument:D}=Z(C=>C),{updateTheme:f}=me(C=>C),x=X.useMemo(()=>pe(f,v),[f,v]);X.useEffect(()=>()=>{x.flush()},[x]);const u=X.useCallback(C=>{D(e,C),V==="application/json+theme"&&(console.log("TabContent: Theme document change detected, debouncing update",{documentName:e,debounceWait:v}),x(e,C))},[e,D,x,V,v]),T=X.useMemo(()=>({name:e,type:"application/json",text:y,mtime:new Date,ctime:new Date,atime:new Date}),[e,y]);return z.jsx(Me,{value:e,className:"mt-0 h-full p-0",tabIndex:-1,children:V==="application/json+theme"?z.jsx(je,{document:T,onChange:u}):z.jsx(Ce,{name:e,value:y,saveDocumentDebounceWait:v})})}const Ve=X.memo(ke);function Ge({openTabs:e,documents:y,buildErrors:g,saveDocumentDebounceWait:v}){const{documentTypes:V}=Z(D=>D);return e.map(D=>y.find(f=>f.name===D)).filter(D=>D!==void 0).map(D=>{const f=V[D.name]||"application/json+report";return z.jsx(Ve,{name:D.name,text:D.text,buildError:g[D.name],saveDocumentDebounceWait:v,documentType:f},D.name)})}const ze=X.memo(Ge);class He extends Error{constructor(y,g,v){super(y),this.lastError=g,this.attempts=v,this.name="RetryError"}}async function Be(e,y={}){const{maxRetries:g=3,initialDelay:v=1e3,maxDelay:V=3e4,backoffFactor:D=2,onRetry:f,shouldRetry:x=()=>!0,signal:u}=y;let T;for(let C=0;C<=g;C++)try{if(u!=null&&u.aborted)throw new Error("Operation cancelled");return await e()}catch(w){if(T=w instanceof Error?w:new Error(String(w)),C===g)break;if(!x(T))throw T;const q=Math.min(v*Math.pow(D,C),V)*(.5+Math.random()*.5);f&&f(T,C+1),await new Promise(R=>{const P=setTimeout(R,q);u&&u.addEventListener("abort",()=>{clearTimeout(P),R(void 0)},{once:!0})})}throw new He(`Failed after ${g+1} attempts`,T,g+1)}const ge={networkErrors:e=>["NetworkError","Failed to fetch","ERR_NETWORK","ECONNREFUSED","ETIMEDOUT","ENOTFOUND","fetch failed"].some(g=>e.message.includes(g)||e.name.includes(g)),httpStatusCodes:e=>y=>{var g;return(g=y.response)!=null&&g.status?e.includes(y.response.status):!1},temporaryErrors:e=>["EBUSY","EAGAIN","temporarily unavailable","too many requests","rate limit"].some(g=>e.message.toLowerCase().includes(g.toLowerCase())),combine:(...e)=>y=>e.some(g=>g(y))};function Fe(){const e=ve(n=>n.setOutput),y=p.useContext(Te),g=p.useContext(Se),v=p.useContext(Le),V=oe(n=>n.saveDocumentDebounceWait),D=oe(n=>n.autoReload),f=oe(n=>n.renderingLibrary),{openTabs:x,activeTab:u,setActiveTab:T,documents:C,buildErrors:w,setBuildError:B,documentTypes:q}=Z(de(n=>({openTabs:n.openTabs,activeTab:n.activeTab,setActiveTab:n.setActiveTab,documents:n.documents,buildErrors:n.buildErrors,setBuildError:n.setBuildError,documentTypes:n.documentTypes}))),{customThemes:R,getAllThemeNames:P,getTheme:j}=me(de(n=>({customThemes:n.customThemes,getAllThemeNames:n.getAllThemeNames,getTheme:n.getTheme}))),{generatePresentation:H,cancelGeneration:U}=xe(),G=p.useRef(new Map),k=p.useRef(new Map),F=p.useRef(""),J=p.useRef(new Map),K=p.useCallback(n=>{const o=(J.current.get(n)||0)+1;return J.current.set(n,o),o},[]),Y=p.useCallback(async(n,b)=>{if(!n||!H)return;const o=G.current.get(n.name);o&&(o.abort(),G.current.delete(n.name));const i=new AbortController,r=i.signal;G.current.set(n.name,i);const E=`${n.name}-theme-${Date.now()}-${Math.random()}`,S=K(n.name);F.current=E,console.log("Editor: Starting theme-triggered build with fresh data",{docName:n.name,requestId:E,freshThemeCount:Object.keys(b).length,version:S});const M={id:E,docName:n.name,doc:n,signal:r,timestamp:Date.now()};await t.current(M,S,b)},[H,e,K]),Q=p.useCallback(async(n,b,o)=>{var M;const{doc:i,signal:r,id:E}=n;e({globalError:void 0,isGenerating:!0,generationProgress:{stage:"parsing",message:"Rebuilding with updated theme..."}});const S=(l,m)=>{r.aborted||F.current!==E||e({isGenerating:!0,generationProgress:{stage:l,message:m}})};try{console.log("Editor: Generating document with fresh themes",{docName:i.name,themeNames:Object.keys(o),requestId:E});const l=await H(i.name,i.text,o,S,{bypassCache:!0});if(r.aborted||F.current!==E){console.log("Theme build cancelled for:",i.name),e({isGenerating:!1,generationProgress:void 0});return}l&&typeof l=="object"&&"name"in l&&"text"in l&&"blob"in l&&(console.log("Editor: Theme-triggered build completed",{docName:l.name,blobSize:(M=l.blob)==null?void 0:M.size,timestamp:Date.now(),requestId:E}),e({name:l.name,text:l.text,blob:l.blob,globalError:void 0,isGenerating:!1,isPreviewStale:!1,generationProgress:void 0,lastBuiltSequence:y.getState().editSequence,cacheStatus:l.cacheStatus,cacheHitRate:l.cacheHitRate,warnings:l.warnings}),B(l.name,void 0))}catch(l){if(r.aborted||F.current!==E){console.log("Theme build cancelled with error for:",i.name),e({isGenerating:!1,generationProgress:void 0});return}const m=l instanceof Error?l.message:String(l);console.error("Theme build error:",m),e({globalError:`Theme rebuild failed: ${m}`,isGenerating:!1,generationProgress:void 0}),B(i.name,m)}finally{G.current.delete(i.name)}},[H,e,B,y]),t=p.useRef(Q);p.useEffect(()=>{t.current=Q});const a=p.useMemo(()=>{const n=Object.entries(R).map(([b,o])=>{let i=0;return o.lastModified&&(o.lastModified instanceof Date?i=o.lastModified.getTime():typeof o.lastModified=="string"&&(i=new Date(o.lastModified).getTime())),{key:b,name:o.name,content:o.content,valid:o.valid,lastModified:i}});return JSON.stringify(n)},[R]),s=p.useMemo(()=>{const n={};return Object.values(R).forEach(b=>{b.valid&&b.parsed&&(n[b.name]=b.parsed)}),n},[a]),d=p.useCallback(()=>{const n={},{customThemes:b}=v.getState();return Object.values(b).forEach(o=>{o.valid&&o.parsed&&(n[o.name]=o.parsed)}),n},[v]),c=p.useCallback(async(n,b,o)=>{if(!n||!H)return;const i=G.current.get(n.name);i&&(i.abort(),G.current.delete(n.name));const r=b?null:new AbortController,E=b||r.signal;r&&G.current.set(n.name,r);const S=`${n.name}-${Date.now()}-${Math.random()}`,M=K(n.name);F.current=S;const l={id:S,docName:n.name,doc:n,signal:E,timestamp:Date.now()};await L.current(l,M,o)},[H,e,K]),h=p.useCallback(async(n,b,o)=>{var M;const{doc:i,signal:r,id:E}=n;if(F.current!==E){console.log("Skipping outdated build request for:",i.name),e({isGenerating:!1,generationProgress:void 0});return}e({globalError:void 0,isGenerating:!0,generationProgress:{stage:"parsing",message:"Validating JSON structure..."}});const S=(l,m)=>{if(r.aborted||F.current!==E)return;if((J.current.get(i.name)||0)!==b){console.log("Document version changed, aborting build"),r.dispatchEvent(new Event("abort"));return}e({isGenerating:!0,generationProgress:{stage:l,message:m}})};try{const l=d();console.log("Editor: Using themes for document build",{docName:i.name,freshThemeCount:Object.keys(l).length,freshThemeNames:Object.keys(l),memoizedCount:Object.keys(s).length,requestId:E});const m=await Be(async()=>{if(r.aborted)throw new Error("Build cancelled");return await H(i.name,i.text,l,S,o)},{maxRetries:2,initialDelay:500,shouldRetry:O=>O.message.includes("cancelled")||O.message.includes("JSON")||O.message.includes("parse")||O.message.includes("syntax")?!1:ge.combine(ge.temporaryErrors,W=>W.message.includes("Worker")||W.message.includes("Proxy"))(O),onRetry:(O,W)=>{console.log(`Retrying presentation generation (attempt ${W}):`,O.message),e({isGenerating:!0,generationProgress:{stage:"parsing",message:`Retrying generation (attempt ${W})...`}})},signal:r});if(r.aborted||F.current!==E){console.log("Build cancelled for:",i.name),e({isGenerating:!1,generationProgress:void 0});return}m&&typeof m=="object"&&"name"in m&&"text"in m&&"blob"in m&&(console.log("Editor: Build completed",{docName:m.name,blobSize:(M=m.blob)==null?void 0:M.size,timestamp:Date.now(),requestId:E,version:b}),e({name:m.name,text:m.text,blob:m.blob,globalError:void 0,isGenerating:!1,isPreviewStale:!1,generationProgress:void 0,lastBuiltSequence:y.getState().editSequence,cacheStatus:m.cacheStatus,cacheHitRate:m.cacheHitRate,warnings:m.warnings}),B(m.name,void 0))}catch(l){if(r.aborted||F.current!==E){console.log("Build cancelled with error for:",i.name),e({isGenerating:!1,generationProgress:void 0});return}const m=l instanceof Error?l.message:String(l);e({globalError:m,isGenerating:!1,generationProgress:void 0}),B(i.name,m)}finally{G.current.delete(i.name)}},[H,d,e,B,y]),L=p.useRef(h);p.useEffect(()=>{L.current=h});const N=p.useRef(null);p.useEffect(()=>{console.log("Editor: Document rebuild effect triggered",{activeTab:u});const n=C.find(i=>i.name===u),b=q[u]||"application/json+report";b==="application/json+report"&&n&&(N.current=u);const o=k.current.get(u);if(o&&(clearTimeout(o),k.current.delete(u)),n&&b==="application/json+report")if(!D||f!=="docxjs")y.getState().isGenerating||e({isPreviewStale:!0});else{const i=n.text.length,r=i>1e4?300:i>5e3?200:100;G.current.forEach((S,M)=>{M!==u&&(S.abort(),G.current.delete(M))});const E=setTimeout(()=>{k.current.delete(u);const S=g.getState().documents.find(M=>M.name===u);if(S){try{JSON.parse(S.text)}catch{e({isPreviewStale:!0});return}if(y.getState().hasValidationErrors){e({isPreviewStale:!0});return}console.log("Editor: Triggering document build after debounce",{docName:S.name,debounceTime:r}),K(S.name),c(S)}},r);k.current.set(u,E)}else n&&b==="application/json+theme"&&U();return()=>{const i=k.current.get(u);i&&(clearTimeout(i),k.current.delete(u))}},[C,u,e,q,c,U,D,f]);const _=p.useMemo(()=>{var o;const n=new Map,b=C.find(i=>i.name===u);if(b&&q[b.name]==="application/json+report")try{const r=(o=JSON.parse(b.text).props)==null?void 0:o.theme;typeof r=="string"&&Object.values(R).some(S=>S.name===r&&S.valid)&&n.set(b.name,r)}catch{}return n},[u,C,q,R]);p.useEffect(()=>(console.log("Editor: Setting up theme change listener",{documentCount:C.length,dependencyCount:_.size,dependencies:Array.from(_.entries()),customThemes:Object.entries(R).map(([b,o])=>({key:b,name:o.name,valid:o.valid}))}),Ne.onThemeChange(b=>{console.log("Editor: Theme change detected",{event:b,dependencies:Array.from(_.entries()),activeTab:u,customThemes:Object.entries(R).map(([l,m])=>({key:l,name:m.name,valid:m.valid}))});const o=[];if(_.forEach((l,m)=>{if(l===b.themeName){const O=C.find(W=>W.name===m);O&&o.push(O)}}),console.log("Editor: Documents using changed theme",{themeName:b.themeName,documentCount:o.length,documentNames:o.map(l=>l.name)}),o.length===0){console.log("Editor: No documents use this theme, skipping rebuild");return}const i=600,r=o.find(l=>l.name===u);if(!r){o.length>0&&e({isPreviewStale:!0});return}if(!D||f!=="docxjs"){y.getState().isGenerating||e({isPreviewStale:!0});return}console.log("Editor: Rebuilding only active document",{activeDocName:r.name,themeName:b.themeName,totalDocumentsUsingTheme:o.length}),["theme-event","backup",r.name].forEach(l=>{const m=`${l}-${r.name}`,O=k.current.get(m);O&&(clearTimeout(O),k.current.delete(m))});const E=G.current.get(r.name);E&&(E.abort(),G.current.delete(r.name));const S=`theme-event-${r.name}`,M=setTimeout(()=>{k.current.delete(S),console.log("Editor: Force rebuilding active document due to theme change",{docName:r.name,themeName:b.themeName,timestamp:Date.now()});const l={};P().forEach(O=>{const W=j(O);W&&(l[O]=W)}),console.log("Editor: Using fresh theme data for rebuild",{freshThemeCount:Object.keys(l).length,freshThemeNames:Object.keys(l),memoizedCount:Object.keys(s).length}),K(r.name),Y(r,l)},i);k.current.set(S,M)})),[_,C,c,K,u,P,j,Y,s,D,f,e]);const I=p.useRef(null),A=p.useRef(c);p.useEffect(()=>{A.current=c});const $=p.useRef(K);return p.useEffect(()=>{$.current=K}),p.useEffect(()=>{const n=()=>{e({isGenerating:!0});let b=!1;const o=re.getState().getActiveEditor();if(o&&!g.getState().pendingDiffs[o.documentName]){const l=o.editor.getValue();g.getState().saveDocument(o.documentName,l)}const{documents:i,documentTypes:r}=g.getState();for(const M of i)if(r[M.name]==="application/json+theme"){const l=re.getState().getEditor(M.name);if(l){const m=l.editor.getValue(),O=v.getState().customThemes[M.name];(!O||O.content!==m)&&(v.getState().updateTheme(M.name,m),b=!0)}}const E=g.getState().activeTab,S=k.current.get(E);S&&(clearTimeout(S),k.current.delete(E)),I.current&&clearTimeout(I.current),I.current=setTimeout(()=>{I.current=null;const{documents:M,activeTab:l,documentTypes:m}=g.getState();let O=l;if((m[l]||"application/json+report")==="application/json+theme")if(N.current)O=N.current;else{e({isGenerating:!1});return}const ee=M.find(te=>te.name===O);if(ee){const te=g.getState().pendingDiffs[O],ie=re.getState().getEditor(O),ae=te?{...ee,text:te.modified}:ie?{...ee,text:ie.editor.getValue()}:ee;$.current(ae.name),A.current(ae,void 0,b?{bypassCache:!0}:void 0)}else e({isGenerating:!1})},150)};return window.addEventListener("preview:flushAndBuild",n),()=>{window.removeEventListener("preview:flushAndBuild",n),I.current&&clearTimeout(I.current)}},[e,g,v]),p.useEffect(()=>()=>{G.current.forEach(n=>n.abort()),G.current.clear(),k.current.forEach(n=>clearTimeout(n)),k.current.clear(),U()},[U]),x.length?z.jsx(De,{value:u,onValueChange:T,className:"h-full",children:z.jsx(ze,{openTabs:x,documents:C,buildErrors:w,saveDocumentDebounceWait:V})}):z.jsx("div",{className:"flex flex-col text-muted-foreground h-full items-center justify-center",children:C!=null&&C.length?"Open a document...":"Create a new document..."})}const tt=p.memo(Fe);export{tt as Editor};
9
- //# sourceMappingURL=editor-BPfMyucg.js.map
8
+ `+JSON.stringify(j,null,2))}}))},w={_listener:null,_editorInstance:null,_uriRestrictionMap:g,_injectedResources:e},B=Object.create(w),q={initializeIn:f,addRestrictionsTo:x,removeRestrictionsIn:u,disposeConstrainer:S,toggleDevMode:C};for(let R in q)Object.defineProperty(B,R,{enumerable:!1,writable:!1,configurable:!1,value:q[R]});return Object.freeze(B)}function Ae(e){const y=`.${we}.theme.json`;return e.endsWith(y)?e:e.replace(/\.\w+\.theme\.json$/,"").replace(/\.theme\.json$/,"").replace(/\.json$/,"")+y}function Oe({document:e,readOnly:y=!1,onChange:g}){const v=p.useRef(null),V=p.useRef(null),D=p.useRef(null),{theme:f}=Ee(),[x,u]=p.useState([]),[S,C]=p.useState(!0),[w,B]=p.useState(!1),q=p.useRef(!1),R=Z(t=>t.pendingDiffs[e.name]),P=Z(t=>t.clearPendingDiff),j=Z(t=>t.saveDocument),{registerEditor:H,unregisterEditor:U,setActiveEditor:G}=re(),k=f==="system"?window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light":f,F=p.useCallback(t=>{V.current=t},[]),J=p.useCallback((t,a)=>{v.current=t,D.current=t.getModel(),H(e.name,t,a),G(e.name);const s=Pe(a);t.getModel()&&s.initializeIn(t),t.updateOptions({formatOnType:!0,formatOnPaste:!0,automaticLayout:!0,minimap:{enabled:!1},scrollBeyondLastLine:!0,wordWrap:"on",folding:!0,foldingStrategy:"indentation",suggest:{showColors:!0,showConstants:!0,showEnums:!0,showFields:!0,showFunctions:!0,showKeywords:!0,showModules:!0,showProperties:!0,showSnippets:!0,showStructs:!0,showTypeParameters:!0,showUnits:!0,showValues:!0,showVariables:!0}}),t.addCommand(a.KeyMod.CtrlCmd|a.KeyCode.KeyK,()=>{const l=ce(t,a);if(l){const h=le(l);window.dispatchEvent(new CustomEvent("monaco-selection-to-ai",{detail:{documentName:e.name,selection:l,snippet:h,isTheme:!0}}))}}),t.addCommand(a.KeyMod.CtrlCmd|a.KeyCode.KeyS,()=>{console.log("Save command triggered in theme editor")}),t.addAction({id:"send-theme-to-ai-assistant",label:"Send to AI Assistant (⌘K)",contextMenuGroupId:"navigation",contextMenuOrder:1.5,keybindings:[a.KeyMod.CtrlCmd|a.KeyCode.KeyK],run:function(){const l=ce(t,a);if(l){const h=le(l);window.dispatchEvent(new CustomEvent("monaco-selection-to-ai",{detail:{documentName:e.name,selection:l,snippet:h,isTheme:!0}}))}}}),setTimeout(()=>{var l;(l=t.getAction("editor.action.formatDocument"))==null||l.run()},100),console.log("Monaco theme editor mounted")},[e.name,H,G]);p.useEffect(()=>()=>{U(e.name)},[e.name,U]);const K=p.useCallback((t,a)=>{t!==void 0&&g&&g(t)},[g]),Y=p.useCallback(t=>{const a=t.map(s=>{var d;return{path:"",message:s.message,code:typeof s.code=="string"?s.code:((d=s.code)==null?void 0:d.value)||"validation_error",startLineNumber:s.startLineNumber,startColumn:s.startColumn,endLineNumber:s.endLineNumber,endColumn:s.endColumn,severity:s.severity>=8?"error":s.severity>=4?"warning":"info"}});u(a),a.length>0&&!q.current&&(C(!0),B(!1)),a.length===0&&(q.current=!1)},[]),Q=p.useCallback(t=>{v.current&&t.startLineNumber&&t.startColumn&&(v.current.setPosition({lineNumber:t.startLineNumber,column:t.startColumn}),v.current.revealLineInCenter(t.startLineNumber),v.current.focus())},[]);return p.useEffect(()=>{if(v.current){const t=k==="dark"?"vs-dark":"vs";v.current.updateOptions({theme:t})}},[k]),z.jsxs("div",{className:"relative h-full",children:[R?z.jsxs(z.Fragment,{children:[z.jsxs("div",{className:"flex items-center justify-between px-2 py-1 border-b bg-muted/40 text-xs",children:[z.jsxs("div",{children:["Review changes for"," ",z.jsx("span",{className:"font-medium",children:e.name})]}),z.jsxs("div",{className:"flex gap-2",children:[z.jsx(ue,{variant:"secondary",size:"sm",onClick:()=>P(e.name),children:"Discard"}),z.jsx(ue,{size:"sm",onClick:()=>{j(e.name,R.modified),P(e.name,!0)},children:"Apply Changes"})]})]}),z.jsx(Re,{height:"calc(100% - 32px)",original:R.original,modified:R.modified,language:"json",theme:k==="dark"?"vs-dark":"vs",options:{readOnly:!0,renderSideBySide:!0,originalEditable:!1,automaticLayout:!0,minimap:{enabled:!1}},beforeMount:F})]}):z.jsx(ye,{height:"100%",language:"json",defaultPath:Ae(e.name),value:e.text,theme:k==="dark"?"vs-dark":"vs",onChange:K,beforeMount:F,onMount:J,onValidate:Y,options:{readOnly:y,lineNumbers:"on",glyphMargin:!0,folding:!0,lineDecorationsWidth:5,lineNumbersMinChars:3,renderValidationDecorations:"on",quickSuggestions:{other:!0,comments:!1,strings:!0},acceptSuggestionOnCommitCharacter:!0,acceptSuggestionOnEnter:"on",accessibilitySupport:"auto",autoIndent:"advanced",formatOnType:!0,formatOnPaste:!0,automaticLayout:!0,minimap:{enabled:!1},scrollBeyondLastLine:!0,wordWrap:"on"}}),z.jsx("div",{className:"absolute top-0 right-0",children:z.jsx(he,{errors:x,onClick:()=>{C(!0),B(!1)}})}),S&&x.length>0&&z.jsx(be,{errors:x,isMinimized:w,onToggleMinimize:()=>B(!w),onErrorClick:Q,onClose:()=>{C(!1),q.current=!0},className:"z-40"})]})}const je=X.memo(Oe);function ke({name:e,text:y,buildError:g,saveDocumentDebounceWait:v,documentType:V}){const{saveDocument:D}=Z(C=>C),{updateTheme:f}=me(C=>C),x=X.useMemo(()=>pe(f,v),[f,v]);X.useEffect(()=>()=>{x.flush()},[x]);const u=X.useCallback(C=>{D(e,C),V==="application/json+theme"&&(console.log("TabContent: Theme document change detected, debouncing update",{documentName:e,debounceWait:v}),x(e,C))},[e,D,x,V,v]),S=X.useMemo(()=>({name:e,type:"application/json",text:y,mtime:new Date,ctime:new Date,atime:new Date}),[e,y]);return z.jsx(Me,{value:e,className:"mt-0 h-full p-0",tabIndex:-1,children:V==="application/json+theme"?z.jsx(je,{document:S,onChange:u}):z.jsx(Ce,{name:e,value:y,saveDocumentDebounceWait:v})})}const Ve=X.memo(ke);function Ge({openTabs:e,documents:y,buildErrors:g,saveDocumentDebounceWait:v}){const{documentTypes:V}=Z(D=>D);return e.map(D=>y.find(f=>f.name===D)).filter(D=>D!==void 0).map(D=>{const f=V[D.name]||"application/json+report";return z.jsx(Ve,{name:D.name,text:D.text,buildError:g[D.name],saveDocumentDebounceWait:v,documentType:f},D.name)})}const ze=X.memo(Ge);class He extends Error{constructor(y,g,v){super(y),this.lastError=g,this.attempts=v,this.name="RetryError"}}async function Be(e,y={}){const{maxRetries:g=3,initialDelay:v=1e3,maxDelay:V=3e4,backoffFactor:D=2,onRetry:f,shouldRetry:x=()=>!0,signal:u}=y;let S;for(let C=0;C<=g;C++)try{if(u!=null&&u.aborted)throw new Error("Operation cancelled");return await e()}catch(w){if(S=w instanceof Error?w:new Error(String(w)),C===g)break;if(!x(S))throw S;const q=Math.min(v*Math.pow(D,C),V)*(.5+Math.random()*.5);f&&f(S,C+1),await new Promise(R=>{const P=setTimeout(R,q);u&&u.addEventListener("abort",()=>{clearTimeout(P),R(void 0)},{once:!0})})}throw new He(`Failed after ${g+1} attempts`,S,g+1)}const ge={networkErrors:e=>["NetworkError","Failed to fetch","ERR_NETWORK","ECONNREFUSED","ETIMEDOUT","ENOTFOUND","fetch failed"].some(g=>e.message.includes(g)||e.name.includes(g)),httpStatusCodes:e=>y=>{var g;return(g=y.response)!=null&&g.status?e.includes(y.response.status):!1},temporaryErrors:e=>["EBUSY","EAGAIN","temporarily unavailable","too many requests","rate limit"].some(g=>e.message.toLowerCase().includes(g.toLowerCase())),combine:(...e)=>y=>e.some(g=>g(y))};function Fe(){const e=ve(n=>n.setOutput),y=p.useContext(Se),g=p.useContext(Te),v=p.useContext(Le),V=se(n=>n.saveDocumentDebounceWait),D=se(n=>n.autoReload),f=se(n=>n.renderingLibrary),{openTabs:x,activeTab:u,setActiveTab:S,documents:C,buildErrors:w,setBuildError:B,documentTypes:q}=Z(de(n=>({openTabs:n.openTabs,activeTab:n.activeTab,setActiveTab:n.setActiveTab,documents:n.documents,buildErrors:n.buildErrors,setBuildError:n.setBuildError,documentTypes:n.documentTypes}))),{customThemes:R,getAllThemeNames:P,getTheme:j}=me(de(n=>({customThemes:n.customThemes,getAllThemeNames:n.getAllThemeNames,getTheme:n.getTheme}))),{generatePresentation:H,cancelGeneration:U}=xe(),G=p.useRef(new Map),k=p.useRef(new Map),F=p.useRef(""),J=p.useRef(new Map),K=p.useCallback(n=>{const o=(J.current.get(n)||0)+1;return J.current.set(n,o),o},[]),Y=p.useCallback(async(n,b)=>{if(!n||!H)return;const o=G.current.get(n.name);o&&(o.abort(),G.current.delete(n.name));const i=new AbortController,r=i.signal;G.current.set(n.name,i);const E=`${n.name}-theme-${Date.now()}-${Math.random()}`,T=K(n.name);F.current=E,console.log("Editor: Starting theme-triggered build with fresh data",{docName:n.name,requestId:E,freshThemeCount:Object.keys(b).length,version:T});const M={id:E,docName:n.name,doc:n,signal:r,timestamp:Date.now()};await t.current(M,T,b)},[H,e,K]),Q=p.useCallback(async(n,b,o)=>{var M;const{doc:i,signal:r,id:E}=n;e({globalError:void 0,isGenerating:!0,generationProgress:{stage:"parsing",message:"Rebuilding with updated theme..."}});const T=(c,m)=>{r.aborted||F.current!==E||e({isGenerating:!0,generationProgress:{stage:c,message:m}})};try{console.log("Editor: Generating document with fresh themes",{docName:i.name,themeNames:Object.keys(o),requestId:E});const c=await H(i.name,i.text,o,T,{bypassCache:!0});if(r.aborted||F.current!==E){console.log("Theme build cancelled for:",i.name),e({isGenerating:!1,generationProgress:void 0});return}c&&typeof c=="object"&&"name"in c&&"text"in c&&"blob"in c&&(console.log("Editor: Theme-triggered build completed",{docName:c.name,blobSize:(M=c.blob)==null?void 0:M.size,timestamp:Date.now(),requestId:E}),e({name:c.name,text:c.text,blob:c.blob,globalError:void 0,isGenerating:!1,isPreviewStale:!1,generationProgress:void 0,lastBuiltSequence:y.getState().editSequence,cacheStatus:c.cacheStatus,cacheHitRate:c.cacheHitRate,warnings:c.warnings}),B(c.name,void 0))}catch(c){if(r.aborted||F.current!==E){console.log("Theme build cancelled with error for:",i.name),e({isGenerating:!1,generationProgress:void 0});return}const m=c instanceof Error?c.message:String(c);console.error("Theme build error:",m),e({globalError:`Theme rebuild failed: ${m}`,isGenerating:!1,generationProgress:void 0}),B(i.name,m)}finally{G.current.delete(i.name)}},[H,e,B,y]),t=p.useRef(Q);p.useEffect(()=>{t.current=Q});const a=p.useMemo(()=>{const n=Object.entries(R).map(([b,o])=>{let i=0;return o.lastModified&&(o.lastModified instanceof Date?i=o.lastModified.getTime():typeof o.lastModified=="string"&&(i=new Date(o.lastModified).getTime())),{key:b,name:o.name,content:o.content,valid:o.valid,lastModified:i}});return JSON.stringify(n)},[R]),s=p.useMemo(()=>{const n={};return Object.values(R).forEach(b=>{b.valid&&b.parsed&&(n[b.name]=b.parsed)}),n},[a]),d=p.useCallback(()=>{const n={},{customThemes:b}=v.getState();return Object.values(b).forEach(o=>{o.valid&&o.parsed&&(n[o.name]=o.parsed)}),n},[v]),l=p.useCallback(async(n,b,o)=>{if(!n||!H)return;const i=G.current.get(n.name);i&&(i.abort(),G.current.delete(n.name));const r=b?null:new AbortController,E=b||r.signal;r&&G.current.set(n.name,r);const T=`${n.name}-${Date.now()}-${Math.random()}`,M=K(n.name);F.current=T;const c={id:T,docName:n.name,doc:n,signal:E,timestamp:Date.now()};await L.current(c,M,o)},[H,e,K]),h=p.useCallback(async(n,b,o)=>{var M;const{doc:i,signal:r,id:E}=n;if(F.current!==E){console.log("Skipping outdated build request for:",i.name),e({isGenerating:!1,generationProgress:void 0});return}e({globalError:void 0,isGenerating:!0,generationProgress:{stage:"parsing",message:"Validating JSON structure..."}});const T=(c,m)=>{if(r.aborted||F.current!==E)return;if((J.current.get(i.name)||0)!==b){console.log("Document version changed, aborting build"),r.dispatchEvent(new Event("abort"));return}e({isGenerating:!0,generationProgress:{stage:c,message:m}})};try{const c=d();console.log("Editor: Using themes for document build",{docName:i.name,freshThemeCount:Object.keys(c).length,freshThemeNames:Object.keys(c),memoizedCount:Object.keys(s).length,requestId:E});const m=await Be(async()=>{if(r.aborted)throw new Error("Build cancelled");return await H(i.name,i.text,c,T,o)},{maxRetries:2,initialDelay:500,shouldRetry:O=>O.message.includes("cancelled")||O.message.includes("JSON")||O.message.includes("parse")||O.message.includes("syntax")?!1:ge.combine(ge.temporaryErrors,W=>W.message.includes("Worker")||W.message.includes("Proxy"))(O),onRetry:(O,W)=>{console.log(`Retrying presentation generation (attempt ${W}):`,O.message),e({isGenerating:!0,generationProgress:{stage:"parsing",message:`Retrying generation (attempt ${W})...`}})},signal:r});if(r.aborted||F.current!==E){console.log("Build cancelled for:",i.name),e({isGenerating:!1,generationProgress:void 0});return}m&&typeof m=="object"&&"name"in m&&"text"in m&&"blob"in m&&(console.log("Editor: Build completed",{docName:m.name,blobSize:(M=m.blob)==null?void 0:M.size,timestamp:Date.now(),requestId:E,version:b}),e({name:m.name,text:m.text,blob:m.blob,globalError:void 0,isGenerating:!1,isPreviewStale:!1,generationProgress:void 0,lastBuiltSequence:y.getState().editSequence,cacheStatus:m.cacheStatus,cacheHitRate:m.cacheHitRate,warnings:m.warnings}),B(m.name,void 0))}catch(c){if(r.aborted||F.current!==E){console.log("Build cancelled with error for:",i.name),e({isGenerating:!1,generationProgress:void 0});return}const m=c instanceof Error?c.message:String(c);e({globalError:m,isGenerating:!1,generationProgress:void 0}),B(i.name,m)}finally{G.current.delete(i.name)}},[H,d,e,B,y]),L=p.useRef(h);p.useEffect(()=>{L.current=h});const N=p.useRef(null);p.useEffect(()=>{console.log("Editor: Document rebuild effect triggered",{activeTab:u});const n=C.find(i=>i.name===u),b=q[u]||"application/json+report";b==="application/json+report"&&n&&(N.current=u);const o=k.current.get(u);if(o&&(clearTimeout(o),k.current.delete(u)),n&&b==="application/json+report")if(!D||f!=="docxjs")y.getState().isGenerating||e({isPreviewStale:!0});else{const i=n.text.length,r=i>1e4?300:i>5e3?200:100;G.current.forEach((T,M)=>{M!==u&&(T.abort(),G.current.delete(M))});const E=setTimeout(()=>{k.current.delete(u);const T=g.getState().documents.find(M=>M.name===u);if(T){try{JSON.parse(T.text)}catch{e({isPreviewStale:!0});return}if(y.getState().hasValidationErrors){e({isPreviewStale:!0});return}console.log("Editor: Triggering document build after debounce",{docName:T.name,debounceTime:r}),K(T.name),l(T)}},r);k.current.set(u,E)}else n&&b==="application/json+theme"&&U();return()=>{const i=k.current.get(u);i&&(clearTimeout(i),k.current.delete(u))}},[C,u,e,q,l,U,D,f]);const _=p.useMemo(()=>{var o;const n=new Map,b=C.find(i=>i.name===u);if(b&&q[b.name]==="application/json+report")try{const r=(o=JSON.parse(b.text).props)==null?void 0:o.theme;typeof r=="string"&&Object.values(R).some(T=>T.name===r&&T.valid)&&n.set(b.name,r)}catch{}return n},[u,C,q,R]);p.useEffect(()=>(console.log("Editor: Setting up theme change listener",{documentCount:C.length,dependencyCount:_.size,dependencies:Array.from(_.entries()),customThemes:Object.entries(R).map(([b,o])=>({key:b,name:o.name,valid:o.valid}))}),Ne.onThemeChange(b=>{console.log("Editor: Theme change detected",{event:b,dependencies:Array.from(_.entries()),activeTab:u,customThemes:Object.entries(R).map(([c,m])=>({key:c,name:m.name,valid:m.valid}))});const o=[];if(_.forEach((c,m)=>{if(c===b.themeName){const O=C.find(W=>W.name===m);O&&o.push(O)}}),console.log("Editor: Documents using changed theme",{themeName:b.themeName,documentCount:o.length,documentNames:o.map(c=>c.name)}),o.length===0){console.log("Editor: No documents use this theme, skipping rebuild");return}const i=600,r=o.find(c=>c.name===u);if(!r){o.length>0&&e({isPreviewStale:!0});return}if(!D||f!=="docxjs"){y.getState().isGenerating||e({isPreviewStale:!0});return}console.log("Editor: Rebuilding only active document",{activeDocName:r.name,themeName:b.themeName,totalDocumentsUsingTheme:o.length}),["theme-event","backup",r.name].forEach(c=>{const m=`${c}-${r.name}`,O=k.current.get(m);O&&(clearTimeout(O),k.current.delete(m))});const E=G.current.get(r.name);E&&(E.abort(),G.current.delete(r.name));const T=`theme-event-${r.name}`,M=setTimeout(()=>{k.current.delete(T),console.log("Editor: Force rebuilding active document due to theme change",{docName:r.name,themeName:b.themeName,timestamp:Date.now()});const c={};P().forEach(O=>{const W=j(O);W&&(c[O]=W)}),console.log("Editor: Using fresh theme data for rebuild",{freshThemeCount:Object.keys(c).length,freshThemeNames:Object.keys(c),memoizedCount:Object.keys(s).length}),K(r.name),Y(r,c)},i);k.current.set(T,M)})),[_,C,l,K,u,P,j,Y,s,D,f,e]);const I=p.useRef(null),A=p.useRef(l);p.useEffect(()=>{A.current=l});const $=p.useRef(K);return p.useEffect(()=>{$.current=K}),p.useEffect(()=>{const n=()=>{e({isGenerating:!0});let b=!1;const o=re.getState().getActiveEditor();if(o&&!g.getState().pendingDiffs[o.documentName]){const c=o.toStorageValue(o.editor.getValue());g.getState().saveDocument(o.documentName,c)}const{documents:i,documentTypes:r}=g.getState();for(const M of i)if(r[M.name]==="application/json+theme"){const c=re.getState().getEditor(M.name);if(c){const m=c.toStorageValue(c.editor.getValue()),O=v.getState().customThemes[M.name];(!O||O.content!==m)&&(v.getState().updateTheme(M.name,m),b=!0)}}const E=g.getState().activeTab,T=k.current.get(E);T&&(clearTimeout(T),k.current.delete(E)),I.current&&clearTimeout(I.current),I.current=setTimeout(()=>{I.current=null;const{documents:M,activeTab:c,documentTypes:m}=g.getState();let O=c;if((m[c]||"application/json+report")==="application/json+theme")if(N.current)O=N.current;else{e({isGenerating:!1});return}const ee=M.find(te=>te.name===O);if(ee){const te=g.getState().pendingDiffs[O],oe=re.getState().getEditor(O),ae=te?{...ee,text:te.modified}:oe?{...ee,text:oe.toStorageValue(oe.editor.getValue())}:ee;$.current(ae.name),A.current(ae,void 0,b?{bypassCache:!0}:void 0)}else e({isGenerating:!1})},150)};return window.addEventListener("preview:flushAndBuild",n),()=>{window.removeEventListener("preview:flushAndBuild",n),I.current&&clearTimeout(I.current)}},[e,g,v]),p.useEffect(()=>()=>{G.current.forEach(n=>n.abort()),G.current.clear(),k.current.forEach(n=>clearTimeout(n)),k.current.clear(),U()},[U]),x.length?z.jsx(De,{value:u,onValueChange:S,className:"h-full",children:z.jsx(ze,{openTabs:x,documents:C,buildErrors:w,saveDocumentDebounceWait:V})}):z.jsx("div",{className:"flex flex-col text-muted-foreground h-full items-center justify-center",children:C!=null&&C.length?"Open a document...":"Create a new document..."})}const tt=p.memo(Fe);export{tt as Editor};
9
+ //# sourceMappingURL=editor-BOmCyXLM.js.map