diff --git a/apps/ios/EdgeEver/Resources/EditorBundle/index.html b/apps/ios/EdgeEver/Resources/EditorBundle/index.html index a8905476..2577e788 100644 --- a/apps/ios/EdgeEver/Resources/EditorBundle/index.html +++ b/apps/ios/EdgeEver/Resources/EditorBundle/index.html @@ -7,14 +7,14 @@ content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" /> EdgeEver Editor - +`},"getStyles"),RT,nu=(RT=class{constructor(){this.d=""}moveTo(e,r){return this.d+=`M ${e} ${r} `,this}lineTo(e,r){return this.d+=`L ${e} ${r} `,this}horizontalTo(e){return this.d+=`H ${e} `,this}verticalTo(e){return this.d+=`V ${e} `,this}arcTo(e,r,n,i,s,a,o){return this.d+=`A ${e} ${r} ${n} ${i?1:0} ${s?1:0} ${a} ${o} `,this}build(){return this.d.trim()}},w(RT,"PathBuilder"),RT),_T,Oxr=(_T=class{constructor(e,r=aie()){this.textCache=new Map,this.svg=e,this.config=r}measureText(e){if(this.textCache.has(e))return this.textCache.get(e);const r=this.svg.append("text").attr("font-family",this.config.fontFamily).attr("font-size",this.config.fontSize).text(e),n=r.node().getBBox(),i={width:n.width,height:n.height};return r.remove(),this.textCache.set(e,i),i}renderTerminal(e,r){const n=this.measureText(r),i=n.width+this.config.padding*2,s=n.height+this.config.padding*2,a=e.append("g").attr("class","railroad-terminal");return a.append("rect").attr("x",0).attr("y",0).attr("width",i).attr("height",s).attr("rx",10).attr("ry",10),a.append("text").attr("x",i/2).attr("y",s/2).text(r),{element:a.node(),dimensions:{width:i,height:s,up:s/2,down:s/2}}}renderNonTerminal(e,r){const n=this.measureText(r),i=n.width+this.config.padding*2,s=n.height+this.config.padding*2,a=e.append("g").attr("class","railroad-nonterminal");return a.append("rect").attr("x",0).attr("y",0).attr("width",i).attr("height",s),a.append("text").attr("x",i/2).attr("y",s/2).text(r),{element:a.node(),dimensions:{width:i,height:s,up:s/2,down:s/2}}}renderSequence(e,r){const n=r.map(u=>this.renderExpression(e,u));let i=0,s=0,a=0;for(const u of n)i+=u.dimensions.width,s=Math.max(s,u.dimensions.up),a=Math.max(a,u.dimensions.down);i+=(n.length-1)*this.config.horizontalSeparation;const o=e.append("g").attr("class","railroad-sequence");let l=0;for(let u=0;uthis.renderExpression(e,f));let i=0,s=0;for(const f of n)i=Math.max(i,f.dimensions.width),s+=f.dimensions.height;s+=(n.length-1)*this.config.verticalSeparation;const a=this.config.arcRadius,o=a*4,l=i+o,u=e.append("g").attr("class","railroad-choice");let h=0;const d=s/2;for(const f of n){const p=h,g=p+f.dimensions.up,m=a*2+(i-f.dimensions.width)/2;u.node().appendChild(f.element).setAttribute("transform",`translate(${m}, ${p})`);const v=new nu,x=g>d;g===d?v.moveTo(0,d).lineTo(m,g):v.moveTo(0,d).arcTo(a,a,0,!1,x,a,d+(x?a:-a)).lineTo(a,g-(x?a:-a)).arcTo(a,a,0,!1,!x,a*2,g).lineTo(m,g),u.append("path").attr("class","railroad-line").attr("d",v.build());const b=new nu,T=m+f.dimensions.width,C=l-a*2;g===d?b.moveTo(T,g).lineTo(l,d):b.moveTo(T,g).lineTo(C,g).arcTo(a,a,0,!1,!x,l-a,g+(x?-a:a)).lineTo(l-a,d+(x?a:-a)).arcTo(a,a,0,!1,x,l,d),u.append("path").attr("class","railroad-line").attr("d",b.build()),h+=f.dimensions.height+this.config.verticalSeparation}return{element:u.node(),dimensions:{width:l,height:s,up:d,down:s-d}}}renderOptional(e,r){const n=this.renderExpression(e,r),i=this.config.arcRadius,s=i*2,a=n.dimensions.width+i*4,o=n.dimensions.height+s,l=e.append("g").attr("class","railroad-optional"),u=i*2,h=s;l.node().appendChild(n.element).setAttribute("transform",`translate(${u}, ${h})`);const f=h+n.dimensions.up,p=new nu().moveTo(0,f).lineTo(i*2,f);l.append("path").attr("class","railroad-line").attr("d",p.build());const g=new nu().moveTo(u+n.dimensions.width,f).lineTo(a,f);l.append("path").attr("class","railroad-line").attr("d",g.build());const m=new nu().moveTo(0,f).arcTo(i,i,0,!1,!1,i,f-i).lineTo(i,i).arcTo(i,i,0,!1,!0,i*2,0).lineTo(a-i*2,0).arcTo(i,i,0,!1,!0,a-i,i).lineTo(a-i,f-i).arcTo(i,i,0,!1,!1,a,f);return l.append("path").attr("class","railroad-line").attr("d",m.build()),{element:l.node(),dimensions:{width:a,height:o,up:f,down:o-f}}}renderRepetition(e,r,n){const i=this.renderExpression(e,r),s=this.config.arcRadius,a=s*2,o=i.dimensions.width+s*4,l=n===0,u=i.dimensions.height+a+(l?a:0),h=e.append("g").attr("class","railroad-repetition"),d=s*2,f=l?a:0;h.node().appendChild(i.element).setAttribute("transform",`translate(${d}, ${f})`);const g=f+i.dimensions.up;h.append("path").attr("class","railroad-line").attr("d",new nu().moveTo(0,g).lineTo(s*2,g).build()),h.append("path").attr("class","railroad-line").attr("d",new nu().moveTo(d+i.dimensions.width,g).lineTo(o,g).build());const m=f+i.dimensions.height+s,y=new nu().moveTo(d+i.dimensions.width,g).arcTo(s,s,0,!1,!0,d+i.dimensions.width+s,g+s).lineTo(d+i.dimensions.width+s,m).arcTo(s,s,0,!1,!0,d+i.dimensions.width,m+s).lineTo(s*2,m+s).arcTo(s,s,0,!1,!0,s,m).lineTo(s,g+s).arcTo(s,s,0,!1,!0,s*2,g);if(h.append("path").attr("class","railroad-line").attr("d",y.build()),l){const v=new nu().moveTo(0,g).arcTo(s,s,0,!1,!1,s,g-s).lineTo(s,s).arcTo(s,s,0,!1,!0,s*2,0).lineTo(o-s*2,0).arcTo(s,s,0,!1,!0,o-s,s).lineTo(o-s,g-s).arcTo(s,s,0,!1,!1,o,g);h.append("path").attr("class","railroad-line").attr("d",v.build())}return{element:h.node(),dimensions:{width:o,height:u,up:g,down:u-g}}}renderSpecial(e,r){const n=this.measureText("? "+r+" ?"),i=n.width+this.config.padding*2,s=n.height+this.config.padding*2,a=e.append("g").attr("class","railroad-special");return a.append("rect").attr("x",0).attr("y",0).attr("width",i).attr("height",s),a.append("text").attr("x",i/2).attr("y",s/2).text("? "+r+" ?"),{element:a.node(),dimensions:{width:i,height:s,up:s/2,down:s/2}}}renderExpression(e,r){switch(r.type){case"terminal":return this.renderTerminal(e,r.value);case"nonterminal":return this.renderNonTerminal(e,r.name);case"sequence":return this.renderSequence(e,r.elements);case"choice":return this.renderChoice(e,r.alternatives);case"optional":return this.renderOptional(e,r.element);case"repetition":return this.renderRepetition(e,r.element,r.min);case"special":return this.renderSpecial(e,r.text);default:throw new Error(`Unknown node type: ${r.type}`)}}renderRule(e,r){const n=this.svg.append("g").attr("class","railroad-rule").attr("transform",`translate(0, ${r})`),i=e.name+" =",s=this.measureText(i).width+20,a=s+20,o=n.append("g"),l=this.renderExpression(o,e.definition),u=Math.max(20,l.dimensions.up),h=u-l.dimensions.up;return o.attr("transform",`translate(${a}, ${h})`),n.append("g").attr("class","railroad-rule-name-group").append("text").attr("class","railroad-rule-name").attr("x",0).attr("y",u).text(i),n.append("g").attr("class","railroad-start").append("circle").attr("cx",s).attr("cy",u).attr("r",this.config.markerRadius),n.append("g").attr("class","railroad-end").append("circle").attr("cx",a+l.dimensions.width+10).attr("cy",u).attr("r",this.config.markerRadius),n.append("path").attr("class","railroad-line").attr("d",new nu().moveTo(s+this.config.markerRadius,u).lineTo(a,u).build()),n.append("path").attr("class","railroad-line").attr("d",new nu().moveTo(a+l.dimensions.width,u).lineTo(a+l.dimensions.width+10-this.config.markerRadius,u).build()),{height:Math.max(40,h+l.dimensions.height+this.config.padding*2),width:a+l.dimensions.width+10+this.config.markerRadius}}renderDiagram(e){let r=this.config.padding,n=0;for(const i of e){const s=this.renderRule(i,r);r+=s.height+this.config.verticalSeparation,n=Math.max(n,s.width)}return{width:n+this.config.padding*2,height:r+this.config.padding}}},w(_T,"RailroadRenderer"),_T),Hye=w((t,e,r)=>{Fs(t,e.height,e.width,r),t.attr("viewBox",`0 0 ${e.width} ${e.height}`)},"configureRailroadSvgSize"),Pxr=w((t,e,r)=>{de.debug(`[Railroad] Rendering diagram +`+t);try{const n=Xo(e);n.attr("class","railroad-diagram");const i=vr().railroad,s=(i==null?void 0:i.useMaxWidth)??!0,a=Qi.getRules();if(de.debug(`[Railroad] Rendering ${a.length} rules`),a.length===0){de.warn("[Railroad] No rules to render"),Hye(n,{height:100,width:200},s);return}const l=new Oxr(n,aie()).renderDiagram(a);Hye(n,l,s),de.debug("[Railroad] Render complete")}catch(n){throw de.error("[Railroad] Render error:",n),n}},"draw"),BP={draw:Pxr},$xr=nne().Railroad.parser.LangiumParser,q2=w(t=>{switch(t.$type){case"RailroadTerminalExpr":return{type:"terminal",value:t.value};case"RailroadNonTerminalExpr":return{type:"nonterminal",name:t.name};case"RailroadSpecialExpr":return{type:"special",text:t.text};case"RailroadSequenceExpr":{const e=t.elements.map(q2);return e.length===1?e[0]:{type:"sequence",elements:e}}case"RailroadChoiceExpr":{const e=t.alternatives.map(q2);return e.length===1?e[0]:{type:"choice",alternatives:e}}case"RailroadOptionalExpr":return{type:"optional",element:q2(t.element)};case"RailroadOneOrMoreExpr":return{type:"repetition",element:q2(t.element),min:1,max:1/0};case"RailroadZeroOrMoreExpr":return{type:"repetition",element:q2(t.element),min:0,max:1/0};default:throw new Error(`Unsupported railroad expression: ${t.$type}`)}},"transformExpression"),Bxr=w(t=>({name:t.name,definition:q2(t.definition)}),"transformRule"),Fxr=w(t=>{Fl(t,Qi),t.title&&Qi.setTitle(t.title),t.rules.map(e=>Qi.addRule(Bxr(e)))},"populateDb"),zxr={parse:w(t=>{Qi.clear(),de.debug("[Railroad Parser] Starting Langium parse");const e=$xr.parse(t);if(e.lexerErrors.length>0||e.parserErrors.length>0)throw new j7(e);const r=e.value;de.debug("[Railroad Parser] Parsed rules:",r.rules.length),Fxr(r),de.debug("[Railroad Parser] Parse complete")},"parse"),parser:{yy:Qi}},Vxr={parser:zxr,db:Qi,renderer:BP,styles:$P};const Hxr=Object.freeze(Object.defineProperty({__proto__:null,diagram:Vxr},Symbol.toStringTag,{value:"Module"}));var Gxr=ine().RailroadEbnf.parser.LangiumParser,XR=w(t=>{const e=t.alternatives.map(Wxr);return e.length===1?e[0]:{type:"choice",alternatives:e}},"transformChoice"),Wxr=w(t=>{const e=t.elements.map(Uxr);return e.length===1?e[0]:{type:"sequence",elements:e}},"transformSequence"),dje=w(t=>{switch(t.$type){case"EbnfTerminal":return{type:"terminal",value:t.value};case"EbnfNonTerminal":return{type:"nonterminal",name:t.name};case"EbnfSpecial":return{type:"special",text:t.text};case"EbnfGroup":return XR(t.element);case"EbnfOptional":return{type:"optional",element:XR(t.element)};case"EbnfRepetition":return{type:"repetition",element:XR(t.element),min:0,max:1/0};default:throw new Error(`Unsupported EBNF primary node: ${t.$type}`)}},"transformPrimary"),qxr=w((t,e)=>{switch(e.$type){case"EbnfOptionalPostfix":return{type:"optional",element:t};case"EbnfZeroOrMorePostfix":return{type:"repetition",element:t,min:0,max:1/0};case"EbnfOneOrMorePostfix":return{type:"repetition",element:t,min:1,max:1/0};case"EbnfExceptionPostfix":return{type:"sequence",elements:[t,{type:"terminal",value:"-"},dje(e.except)]};default:throw new Error(`Unsupported EBNF postfix node: ${e.$type}`)}},"transformPostfix"),Uxr=w(t=>t.postfixes.reduce((e,r)=>qxr(e,r),dje(t.base)),"transformTerm"),Yxr=w(t=>({name:t.name,definition:XR(t.definition)}),"transformRule"),jxr=w(t=>{Fl(t,Qi),t.title&&Qi.setTitle(t.title),t.rules.map(e=>Qi.addRule(Yxr(e)))},"populateDb"),Xxr={parse:w(t=>{Qi.clear(),de.debug("[EBNF Parser] Starting Langium parse");const e=Gxr.parse(t);if(e.lexerErrors.length>0||e.parserErrors.length>0)throw new j7(e);const r=e.value;de.debug("[EBNF Parser] Parsed rules:",r.rules.length),jxr(r),de.debug("[EBNF Parser] Parse complete")},"parse"),parser:{yy:Qi}},Kxr={parser:Xxr,db:Qi,renderer:BP,styles:$P};const Zxr=Object.freeze(Object.defineProperty({__proto__:null,diagram:Kxr},Symbol.toStringTag,{value:"Module"}));var Qxr=sne().RailroadAbnf.parser.LangiumParser,jj=w(t=>{const e=t.alternatives.map(Jxr);return e.length===1?e[0]:{type:"choice",alternatives:e}},"transformAlternation"),Jxr=w(t=>{const e=t.elements.map(t4r);return e.length===1?e[0]:{type:"sequence",elements:e}},"transformConcatenation"),e4r=w(t=>{if(t.includes("*")){const[r,n]=t.split("*"),i=r?parseInt(r,10):0,s=n?parseInt(n,10):1/0;return{min:i,max:s}}const e=parseInt(t,10);return{min:e,max:e}},"parseRepeat"),t4r=w(t=>{const e=r4r(t.primary);if(!t.repeat)return e;const{min:r,max:n}=e4r(t.repeat);return r===0&&n===1?{type:"optional",element:e}:{type:"repetition",element:e,min:r,max:n}},"transformElement"),r4r=w(t=>{switch(t.$type){case"AbnfStringLiteral":return{type:"terminal",value:t.value};case"AbnfNumVal":return{type:"terminal",value:t.value};case"AbnfRuleName":return{type:"nonterminal",name:t.name};case"AbnfGroup":return jj(t.element);case"AbnfOptionalGroup":return{type:"optional",element:jj(t.element)};default:throw new Error(`Unsupported ABNF primary node: ${t.$type}`)}},"transformPrimary"),n4r=w(t=>({name:t.name,definition:jj(t.definition)}),"transformRule"),i4r=w(t=>{Fl(t,Qi),t.title&&Qi.setTitle(t.title),t.rules.map(e=>Qi.addRule(n4r(e)))},"populateDb"),s4r={parse:w(t=>{Qi.clear(),de.debug("[ABNF Parser] Starting Langium parse");const e=Qxr.parse(t);if(e.lexerErrors.length>0||e.parserErrors.length>0)throw new j7(e);const r=e.value;de.debug("[ABNF Parser] Parsed rules:",r.rules.length),i4r(r),de.debug("[ABNF Parser] Parse complete")},"parse"),parser:{yy:Qi}},a4r={parser:s4r,db:Qi,renderer:BP,styles:$P};const o4r=Object.freeze(Object.defineProperty({__proto__:null,diagram:a4r},Symbol.toStringTag,{value:"Module"}));var l4r=ane().RailroadPeg.parser.LangiumParser,fje=w(t=>{const e=t.alternatives.map(c4r);return e.length===1?e[0]:{type:"choice",alternatives:e}},"transformOrderedChoice"),c4r=w(t=>{const e=t.elements.map(u4r);return e.length===1?e[0]:{type:"sequence",elements:e}},"transformSequence"),u4r=w(t=>{const e=h4r(t.suffix);return t.operator?{type:"special",text:t.operator==="&"?`&${Gye(e)}`:`!${Gye(e)}`}:e},"transformPrefix"),Gye=w(t=>{switch(t.type){case"terminal":return`"${t.value}"`;case"nonterminal":return t.name;case"special":return t.text;default:return"(...)"}},"nodeToLabel"),h4r=w(t=>{const e=d4r(t.primary);if(!t.operator)return e;switch(t.operator){case"?":return{type:"optional",element:e};case"*":return{type:"repetition",element:e,min:0,max:1/0};case"+":return{type:"repetition",element:e,min:1,max:1/0};default:throw new Error(`Unsupported PEG suffix operator: ${t.operator}`)}},"transformSuffix"),d4r=w(t=>{switch(t.$type){case"PegLiteral":return{type:"terminal",value:t.value};case"PegIdentifier":return{type:"nonterminal",name:t.name};case"PegGroup":return fje(t.element);case"PegAny":return{type:"special",text:t.dot};default:throw new Error(`Unsupported PEG primary node: ${t.$type}`)}},"transformPrimary"),f4r=w(t=>({name:t.name,definition:fje(t.definition)}),"transformRule"),p4r=w(t=>{Fl(t,Qi),t.title&&Qi.setTitle(t.title),t.rules.map(e=>Qi.addRule(f4r(e)))},"populateDb"),g4r={parse:w(t=>{Qi.clear(),de.debug("[PEG Parser] Starting Langium parse");const e=l4r.parse(t);if(e.lexerErrors.length>0||e.parserErrors.length>0)throw new j7(e);const r=e.value;de.debug("[PEG Parser] Parsed rules:",r.rules.length),p4r(r),de.debug("[PEG Parser] Parse complete")},"parse"),parser:{yy:Qi}},m4r={parser:g4r,db:Qi,renderer:BP,styles:$P};const y4r=Object.freeze(Object.defineProperty({__proto__:null,diagram:m4r},Symbol.toStringTag,{value:"Module"}));var v4r=1;function oie(){if(!(typeof globalThis>"u"))return globalThis}w(oie,"getCaptureGlobal");function pje(){var t;return!!((t=oie())!=null&&t.mermaidCaptureSizes)}w(pje,"shouldCaptureSizes");function gje(){return typeof location>"u"?"browser-dev":`${location.pathname}${location.search}`}w(gje,"capturedFromLocation");function mje(t,e){const r=oie();if(!r)return;const n=e.node(),i=(n&&"ownerSVGElement"in n?n.ownerSVGElement:null)??n,s=(i==null?void 0:i.id)??"(unknown)";r.mermaidCapturedSizes??(r.mermaidCapturedSizes=[]);const a={svgId:s,sizes:t};r.mermaidCapturedSizes.push(a),r.mermaidLastCapturedSizes=a}w(mje,"emitCapturedSizes");function yje(t,e){const r=[];for(const n of e.nodes)n.isGroup||r.push({id:n.id,width:n.width??0,height:n.height??0});r.length!==0&&mje({metadata:{captureVersion:v4r,capturedAt:new Date().toISOString(),capturedFrom:gje()},nodes:r},t)}w(yje,"captureNodeSizes");const b4r=Object.freeze(Object.defineProperty({__proto__:null,captureNodeSizes:yje,shouldCaptureSizes:pje},Symbol.toStringTag,{value:"Module"})),x4r=Object.freeze(Object.defineProperty({__proto__:null,InfoModule:LGe,createInfoServices:IGe},Symbol.toStringTag,{value:"Module"})),w4r=Object.freeze(Object.defineProperty({__proto__:null,PacketModule:NGe,createPacketServices:DGe},Symbol.toStringTag,{value:"Module"})),T4r=Object.freeze(Object.defineProperty({__proto__:null,PieModule:OGe,createPieServices:PGe},Symbol.toStringTag,{value:"Module"})),C4r=Object.freeze(Object.defineProperty({__proto__:null,TreeViewModule:$Ge,createTreeViewServices:BGe},Symbol.toStringTag,{value:"Module"})),k4r=Object.freeze(Object.defineProperty({__proto__:null,ArchitectureModule:FGe,createArchitectureServices:zGe},Symbol.toStringTag,{value:"Module"})),S4r=Object.freeze(Object.defineProperty({__proto__:null,GitGraphModule:RGe,createGitGraphServices:_Ge},Symbol.toStringTag,{value:"Module"})),E4r=Object.freeze(Object.defineProperty({__proto__:null,EventModelingModule:HGe,createEventModelingServices:GGe},Symbol.toStringTag,{value:"Module"})),A4r=Object.freeze(Object.defineProperty({__proto__:null,RadarModule:mGe,createRadarServices:yGe},Symbol.toStringTag,{value:"Module"})),M4r=Object.freeze(Object.defineProperty({__proto__:null,RailroadModule:vGe,createRailroadServices:nne},Symbol.toStringTag,{value:"Module"})),R4r=Object.freeze(Object.defineProperty({__proto__:null,RailroadEbnfModule:bGe,createRailroadEbnfServices:ine},Symbol.toStringTag,{value:"Module"})),_4r=Object.freeze(Object.defineProperty({__proto__:null,RailroadAbnfModule:xGe,createRailroadAbnfServices:sne},Symbol.toStringTag,{value:"Module"})),L4r=Object.freeze(Object.defineProperty({__proto__:null,RailroadPegModule:wGe,createRailroadPegServices:ane},Symbol.toStringTag,{value:"Module"})),I4r=Object.freeze(Object.defineProperty({__proto__:null,TreemapModule:CGe,createTreemapServices:kGe},Symbol.toStringTag,{value:"Module"})),N4r=Object.freeze(Object.defineProperty({__proto__:null,WardleyModule:SGe,createWardleyServices:EGe},Symbol.toStringTag,{value:"Module"})),D4r=Object.freeze(Object.defineProperty({__proto__:null,CynefinModule:AGe,createCynefinServices:MGe},Symbol.toStringTag,{value:"Module"})); diff --git a/apps/ios/EditorBundle/index.html b/apps/ios/EditorBundle/index.html index a8905476..2577e788 100644 --- a/apps/ios/EditorBundle/index.html +++ b/apps/ios/EditorBundle/index.html @@ -7,14 +7,14 @@ content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" /> EdgeEver Editor - +`},"getStyles"),RT,nu=(RT=class{constructor(){this.d=""}moveTo(e,r){return this.d+=`M ${e} ${r} `,this}lineTo(e,r){return this.d+=`L ${e} ${r} `,this}horizontalTo(e){return this.d+=`H ${e} `,this}verticalTo(e){return this.d+=`V ${e} `,this}arcTo(e,r,n,i,s,a,o){return this.d+=`A ${e} ${r} ${n} ${i?1:0} ${s?1:0} ${a} ${o} `,this}build(){return this.d.trim()}},w(RT,"PathBuilder"),RT),_T,Oxr=(_T=class{constructor(e,r=aie()){this.textCache=new Map,this.svg=e,this.config=r}measureText(e){if(this.textCache.has(e))return this.textCache.get(e);const r=this.svg.append("text").attr("font-family",this.config.fontFamily).attr("font-size",this.config.fontSize).text(e),n=r.node().getBBox(),i={width:n.width,height:n.height};return r.remove(),this.textCache.set(e,i),i}renderTerminal(e,r){const n=this.measureText(r),i=n.width+this.config.padding*2,s=n.height+this.config.padding*2,a=e.append("g").attr("class","railroad-terminal");return a.append("rect").attr("x",0).attr("y",0).attr("width",i).attr("height",s).attr("rx",10).attr("ry",10),a.append("text").attr("x",i/2).attr("y",s/2).text(r),{element:a.node(),dimensions:{width:i,height:s,up:s/2,down:s/2}}}renderNonTerminal(e,r){const n=this.measureText(r),i=n.width+this.config.padding*2,s=n.height+this.config.padding*2,a=e.append("g").attr("class","railroad-nonterminal");return a.append("rect").attr("x",0).attr("y",0).attr("width",i).attr("height",s),a.append("text").attr("x",i/2).attr("y",s/2).text(r),{element:a.node(),dimensions:{width:i,height:s,up:s/2,down:s/2}}}renderSequence(e,r){const n=r.map(u=>this.renderExpression(e,u));let i=0,s=0,a=0;for(const u of n)i+=u.dimensions.width,s=Math.max(s,u.dimensions.up),a=Math.max(a,u.dimensions.down);i+=(n.length-1)*this.config.horizontalSeparation;const o=e.append("g").attr("class","railroad-sequence");let l=0;for(let u=0;uthis.renderExpression(e,f));let i=0,s=0;for(const f of n)i=Math.max(i,f.dimensions.width),s+=f.dimensions.height;s+=(n.length-1)*this.config.verticalSeparation;const a=this.config.arcRadius,o=a*4,l=i+o,u=e.append("g").attr("class","railroad-choice");let h=0;const d=s/2;for(const f of n){const p=h,g=p+f.dimensions.up,m=a*2+(i-f.dimensions.width)/2;u.node().appendChild(f.element).setAttribute("transform",`translate(${m}, ${p})`);const v=new nu,x=g>d;g===d?v.moveTo(0,d).lineTo(m,g):v.moveTo(0,d).arcTo(a,a,0,!1,x,a,d+(x?a:-a)).lineTo(a,g-(x?a:-a)).arcTo(a,a,0,!1,!x,a*2,g).lineTo(m,g),u.append("path").attr("class","railroad-line").attr("d",v.build());const b=new nu,T=m+f.dimensions.width,C=l-a*2;g===d?b.moveTo(T,g).lineTo(l,d):b.moveTo(T,g).lineTo(C,g).arcTo(a,a,0,!1,!x,l-a,g+(x?-a:a)).lineTo(l-a,d+(x?a:-a)).arcTo(a,a,0,!1,x,l,d),u.append("path").attr("class","railroad-line").attr("d",b.build()),h+=f.dimensions.height+this.config.verticalSeparation}return{element:u.node(),dimensions:{width:l,height:s,up:d,down:s-d}}}renderOptional(e,r){const n=this.renderExpression(e,r),i=this.config.arcRadius,s=i*2,a=n.dimensions.width+i*4,o=n.dimensions.height+s,l=e.append("g").attr("class","railroad-optional"),u=i*2,h=s;l.node().appendChild(n.element).setAttribute("transform",`translate(${u}, ${h})`);const f=h+n.dimensions.up,p=new nu().moveTo(0,f).lineTo(i*2,f);l.append("path").attr("class","railroad-line").attr("d",p.build());const g=new nu().moveTo(u+n.dimensions.width,f).lineTo(a,f);l.append("path").attr("class","railroad-line").attr("d",g.build());const m=new nu().moveTo(0,f).arcTo(i,i,0,!1,!1,i,f-i).lineTo(i,i).arcTo(i,i,0,!1,!0,i*2,0).lineTo(a-i*2,0).arcTo(i,i,0,!1,!0,a-i,i).lineTo(a-i,f-i).arcTo(i,i,0,!1,!1,a,f);return l.append("path").attr("class","railroad-line").attr("d",m.build()),{element:l.node(),dimensions:{width:a,height:o,up:f,down:o-f}}}renderRepetition(e,r,n){const i=this.renderExpression(e,r),s=this.config.arcRadius,a=s*2,o=i.dimensions.width+s*4,l=n===0,u=i.dimensions.height+a+(l?a:0),h=e.append("g").attr("class","railroad-repetition"),d=s*2,f=l?a:0;h.node().appendChild(i.element).setAttribute("transform",`translate(${d}, ${f})`);const g=f+i.dimensions.up;h.append("path").attr("class","railroad-line").attr("d",new nu().moveTo(0,g).lineTo(s*2,g).build()),h.append("path").attr("class","railroad-line").attr("d",new nu().moveTo(d+i.dimensions.width,g).lineTo(o,g).build());const m=f+i.dimensions.height+s,y=new nu().moveTo(d+i.dimensions.width,g).arcTo(s,s,0,!1,!0,d+i.dimensions.width+s,g+s).lineTo(d+i.dimensions.width+s,m).arcTo(s,s,0,!1,!0,d+i.dimensions.width,m+s).lineTo(s*2,m+s).arcTo(s,s,0,!1,!0,s,m).lineTo(s,g+s).arcTo(s,s,0,!1,!0,s*2,g);if(h.append("path").attr("class","railroad-line").attr("d",y.build()),l){const v=new nu().moveTo(0,g).arcTo(s,s,0,!1,!1,s,g-s).lineTo(s,s).arcTo(s,s,0,!1,!0,s*2,0).lineTo(o-s*2,0).arcTo(s,s,0,!1,!0,o-s,s).lineTo(o-s,g-s).arcTo(s,s,0,!1,!1,o,g);h.append("path").attr("class","railroad-line").attr("d",v.build())}return{element:h.node(),dimensions:{width:o,height:u,up:g,down:u-g}}}renderSpecial(e,r){const n=this.measureText("? "+r+" ?"),i=n.width+this.config.padding*2,s=n.height+this.config.padding*2,a=e.append("g").attr("class","railroad-special");return a.append("rect").attr("x",0).attr("y",0).attr("width",i).attr("height",s),a.append("text").attr("x",i/2).attr("y",s/2).text("? "+r+" ?"),{element:a.node(),dimensions:{width:i,height:s,up:s/2,down:s/2}}}renderExpression(e,r){switch(r.type){case"terminal":return this.renderTerminal(e,r.value);case"nonterminal":return this.renderNonTerminal(e,r.name);case"sequence":return this.renderSequence(e,r.elements);case"choice":return this.renderChoice(e,r.alternatives);case"optional":return this.renderOptional(e,r.element);case"repetition":return this.renderRepetition(e,r.element,r.min);case"special":return this.renderSpecial(e,r.text);default:throw new Error(`Unknown node type: ${r.type}`)}}renderRule(e,r){const n=this.svg.append("g").attr("class","railroad-rule").attr("transform",`translate(0, ${r})`),i=e.name+" =",s=this.measureText(i).width+20,a=s+20,o=n.append("g"),l=this.renderExpression(o,e.definition),u=Math.max(20,l.dimensions.up),h=u-l.dimensions.up;return o.attr("transform",`translate(${a}, ${h})`),n.append("g").attr("class","railroad-rule-name-group").append("text").attr("class","railroad-rule-name").attr("x",0).attr("y",u).text(i),n.append("g").attr("class","railroad-start").append("circle").attr("cx",s).attr("cy",u).attr("r",this.config.markerRadius),n.append("g").attr("class","railroad-end").append("circle").attr("cx",a+l.dimensions.width+10).attr("cy",u).attr("r",this.config.markerRadius),n.append("path").attr("class","railroad-line").attr("d",new nu().moveTo(s+this.config.markerRadius,u).lineTo(a,u).build()),n.append("path").attr("class","railroad-line").attr("d",new nu().moveTo(a+l.dimensions.width,u).lineTo(a+l.dimensions.width+10-this.config.markerRadius,u).build()),{height:Math.max(40,h+l.dimensions.height+this.config.padding*2),width:a+l.dimensions.width+10+this.config.markerRadius}}renderDiagram(e){let r=this.config.padding,n=0;for(const i of e){const s=this.renderRule(i,r);r+=s.height+this.config.verticalSeparation,n=Math.max(n,s.width)}return{width:n+this.config.padding*2,height:r+this.config.padding}}},w(_T,"RailroadRenderer"),_T),Hye=w((t,e,r)=>{Fs(t,e.height,e.width,r),t.attr("viewBox",`0 0 ${e.width} ${e.height}`)},"configureRailroadSvgSize"),Pxr=w((t,e,r)=>{de.debug(`[Railroad] Rendering diagram +`+t);try{const n=Xo(e);n.attr("class","railroad-diagram");const i=vr().railroad,s=(i==null?void 0:i.useMaxWidth)??!0,a=Qi.getRules();if(de.debug(`[Railroad] Rendering ${a.length} rules`),a.length===0){de.warn("[Railroad] No rules to render"),Hye(n,{height:100,width:200},s);return}const l=new Oxr(n,aie()).renderDiagram(a);Hye(n,l,s),de.debug("[Railroad] Render complete")}catch(n){throw de.error("[Railroad] Render error:",n),n}},"draw"),BP={draw:Pxr},$xr=nne().Railroad.parser.LangiumParser,q2=w(t=>{switch(t.$type){case"RailroadTerminalExpr":return{type:"terminal",value:t.value};case"RailroadNonTerminalExpr":return{type:"nonterminal",name:t.name};case"RailroadSpecialExpr":return{type:"special",text:t.text};case"RailroadSequenceExpr":{const e=t.elements.map(q2);return e.length===1?e[0]:{type:"sequence",elements:e}}case"RailroadChoiceExpr":{const e=t.alternatives.map(q2);return e.length===1?e[0]:{type:"choice",alternatives:e}}case"RailroadOptionalExpr":return{type:"optional",element:q2(t.element)};case"RailroadOneOrMoreExpr":return{type:"repetition",element:q2(t.element),min:1,max:1/0};case"RailroadZeroOrMoreExpr":return{type:"repetition",element:q2(t.element),min:0,max:1/0};default:throw new Error(`Unsupported railroad expression: ${t.$type}`)}},"transformExpression"),Bxr=w(t=>({name:t.name,definition:q2(t.definition)}),"transformRule"),Fxr=w(t=>{Fl(t,Qi),t.title&&Qi.setTitle(t.title),t.rules.map(e=>Qi.addRule(Bxr(e)))},"populateDb"),zxr={parse:w(t=>{Qi.clear(),de.debug("[Railroad Parser] Starting Langium parse");const e=$xr.parse(t);if(e.lexerErrors.length>0||e.parserErrors.length>0)throw new j7(e);const r=e.value;de.debug("[Railroad Parser] Parsed rules:",r.rules.length),Fxr(r),de.debug("[Railroad Parser] Parse complete")},"parse"),parser:{yy:Qi}},Vxr={parser:zxr,db:Qi,renderer:BP,styles:$P};const Hxr=Object.freeze(Object.defineProperty({__proto__:null,diagram:Vxr},Symbol.toStringTag,{value:"Module"}));var Gxr=ine().RailroadEbnf.parser.LangiumParser,XR=w(t=>{const e=t.alternatives.map(Wxr);return e.length===1?e[0]:{type:"choice",alternatives:e}},"transformChoice"),Wxr=w(t=>{const e=t.elements.map(Uxr);return e.length===1?e[0]:{type:"sequence",elements:e}},"transformSequence"),dje=w(t=>{switch(t.$type){case"EbnfTerminal":return{type:"terminal",value:t.value};case"EbnfNonTerminal":return{type:"nonterminal",name:t.name};case"EbnfSpecial":return{type:"special",text:t.text};case"EbnfGroup":return XR(t.element);case"EbnfOptional":return{type:"optional",element:XR(t.element)};case"EbnfRepetition":return{type:"repetition",element:XR(t.element),min:0,max:1/0};default:throw new Error(`Unsupported EBNF primary node: ${t.$type}`)}},"transformPrimary"),qxr=w((t,e)=>{switch(e.$type){case"EbnfOptionalPostfix":return{type:"optional",element:t};case"EbnfZeroOrMorePostfix":return{type:"repetition",element:t,min:0,max:1/0};case"EbnfOneOrMorePostfix":return{type:"repetition",element:t,min:1,max:1/0};case"EbnfExceptionPostfix":return{type:"sequence",elements:[t,{type:"terminal",value:"-"},dje(e.except)]};default:throw new Error(`Unsupported EBNF postfix node: ${e.$type}`)}},"transformPostfix"),Uxr=w(t=>t.postfixes.reduce((e,r)=>qxr(e,r),dje(t.base)),"transformTerm"),Yxr=w(t=>({name:t.name,definition:XR(t.definition)}),"transformRule"),jxr=w(t=>{Fl(t,Qi),t.title&&Qi.setTitle(t.title),t.rules.map(e=>Qi.addRule(Yxr(e)))},"populateDb"),Xxr={parse:w(t=>{Qi.clear(),de.debug("[EBNF Parser] Starting Langium parse");const e=Gxr.parse(t);if(e.lexerErrors.length>0||e.parserErrors.length>0)throw new j7(e);const r=e.value;de.debug("[EBNF Parser] Parsed rules:",r.rules.length),jxr(r),de.debug("[EBNF Parser] Parse complete")},"parse"),parser:{yy:Qi}},Kxr={parser:Xxr,db:Qi,renderer:BP,styles:$P};const Zxr=Object.freeze(Object.defineProperty({__proto__:null,diagram:Kxr},Symbol.toStringTag,{value:"Module"}));var Qxr=sne().RailroadAbnf.parser.LangiumParser,jj=w(t=>{const e=t.alternatives.map(Jxr);return e.length===1?e[0]:{type:"choice",alternatives:e}},"transformAlternation"),Jxr=w(t=>{const e=t.elements.map(t4r);return e.length===1?e[0]:{type:"sequence",elements:e}},"transformConcatenation"),e4r=w(t=>{if(t.includes("*")){const[r,n]=t.split("*"),i=r?parseInt(r,10):0,s=n?parseInt(n,10):1/0;return{min:i,max:s}}const e=parseInt(t,10);return{min:e,max:e}},"parseRepeat"),t4r=w(t=>{const e=r4r(t.primary);if(!t.repeat)return e;const{min:r,max:n}=e4r(t.repeat);return r===0&&n===1?{type:"optional",element:e}:{type:"repetition",element:e,min:r,max:n}},"transformElement"),r4r=w(t=>{switch(t.$type){case"AbnfStringLiteral":return{type:"terminal",value:t.value};case"AbnfNumVal":return{type:"terminal",value:t.value};case"AbnfRuleName":return{type:"nonterminal",name:t.name};case"AbnfGroup":return jj(t.element);case"AbnfOptionalGroup":return{type:"optional",element:jj(t.element)};default:throw new Error(`Unsupported ABNF primary node: ${t.$type}`)}},"transformPrimary"),n4r=w(t=>({name:t.name,definition:jj(t.definition)}),"transformRule"),i4r=w(t=>{Fl(t,Qi),t.title&&Qi.setTitle(t.title),t.rules.map(e=>Qi.addRule(n4r(e)))},"populateDb"),s4r={parse:w(t=>{Qi.clear(),de.debug("[ABNF Parser] Starting Langium parse");const e=Qxr.parse(t);if(e.lexerErrors.length>0||e.parserErrors.length>0)throw new j7(e);const r=e.value;de.debug("[ABNF Parser] Parsed rules:",r.rules.length),i4r(r),de.debug("[ABNF Parser] Parse complete")},"parse"),parser:{yy:Qi}},a4r={parser:s4r,db:Qi,renderer:BP,styles:$P};const o4r=Object.freeze(Object.defineProperty({__proto__:null,diagram:a4r},Symbol.toStringTag,{value:"Module"}));var l4r=ane().RailroadPeg.parser.LangiumParser,fje=w(t=>{const e=t.alternatives.map(c4r);return e.length===1?e[0]:{type:"choice",alternatives:e}},"transformOrderedChoice"),c4r=w(t=>{const e=t.elements.map(u4r);return e.length===1?e[0]:{type:"sequence",elements:e}},"transformSequence"),u4r=w(t=>{const e=h4r(t.suffix);return t.operator?{type:"special",text:t.operator==="&"?`&${Gye(e)}`:`!${Gye(e)}`}:e},"transformPrefix"),Gye=w(t=>{switch(t.type){case"terminal":return`"${t.value}"`;case"nonterminal":return t.name;case"special":return t.text;default:return"(...)"}},"nodeToLabel"),h4r=w(t=>{const e=d4r(t.primary);if(!t.operator)return e;switch(t.operator){case"?":return{type:"optional",element:e};case"*":return{type:"repetition",element:e,min:0,max:1/0};case"+":return{type:"repetition",element:e,min:1,max:1/0};default:throw new Error(`Unsupported PEG suffix operator: ${t.operator}`)}},"transformSuffix"),d4r=w(t=>{switch(t.$type){case"PegLiteral":return{type:"terminal",value:t.value};case"PegIdentifier":return{type:"nonterminal",name:t.name};case"PegGroup":return fje(t.element);case"PegAny":return{type:"special",text:t.dot};default:throw new Error(`Unsupported PEG primary node: ${t.$type}`)}},"transformPrimary"),f4r=w(t=>({name:t.name,definition:fje(t.definition)}),"transformRule"),p4r=w(t=>{Fl(t,Qi),t.title&&Qi.setTitle(t.title),t.rules.map(e=>Qi.addRule(f4r(e)))},"populateDb"),g4r={parse:w(t=>{Qi.clear(),de.debug("[PEG Parser] Starting Langium parse");const e=l4r.parse(t);if(e.lexerErrors.length>0||e.parserErrors.length>0)throw new j7(e);const r=e.value;de.debug("[PEG Parser] Parsed rules:",r.rules.length),p4r(r),de.debug("[PEG Parser] Parse complete")},"parse"),parser:{yy:Qi}},m4r={parser:g4r,db:Qi,renderer:BP,styles:$P};const y4r=Object.freeze(Object.defineProperty({__proto__:null,diagram:m4r},Symbol.toStringTag,{value:"Module"}));var v4r=1;function oie(){if(!(typeof globalThis>"u"))return globalThis}w(oie,"getCaptureGlobal");function pje(){var t;return!!((t=oie())!=null&&t.mermaidCaptureSizes)}w(pje,"shouldCaptureSizes");function gje(){return typeof location>"u"?"browser-dev":`${location.pathname}${location.search}`}w(gje,"capturedFromLocation");function mje(t,e){const r=oie();if(!r)return;const n=e.node(),i=(n&&"ownerSVGElement"in n?n.ownerSVGElement:null)??n,s=(i==null?void 0:i.id)??"(unknown)";r.mermaidCapturedSizes??(r.mermaidCapturedSizes=[]);const a={svgId:s,sizes:t};r.mermaidCapturedSizes.push(a),r.mermaidLastCapturedSizes=a}w(mje,"emitCapturedSizes");function yje(t,e){const r=[];for(const n of e.nodes)n.isGroup||r.push({id:n.id,width:n.width??0,height:n.height??0});r.length!==0&&mje({metadata:{captureVersion:v4r,capturedAt:new Date().toISOString(),capturedFrom:gje()},nodes:r},t)}w(yje,"captureNodeSizes");const b4r=Object.freeze(Object.defineProperty({__proto__:null,captureNodeSizes:yje,shouldCaptureSizes:pje},Symbol.toStringTag,{value:"Module"})),x4r=Object.freeze(Object.defineProperty({__proto__:null,InfoModule:LGe,createInfoServices:IGe},Symbol.toStringTag,{value:"Module"})),w4r=Object.freeze(Object.defineProperty({__proto__:null,PacketModule:NGe,createPacketServices:DGe},Symbol.toStringTag,{value:"Module"})),T4r=Object.freeze(Object.defineProperty({__proto__:null,PieModule:OGe,createPieServices:PGe},Symbol.toStringTag,{value:"Module"})),C4r=Object.freeze(Object.defineProperty({__proto__:null,TreeViewModule:$Ge,createTreeViewServices:BGe},Symbol.toStringTag,{value:"Module"})),k4r=Object.freeze(Object.defineProperty({__proto__:null,ArchitectureModule:FGe,createArchitectureServices:zGe},Symbol.toStringTag,{value:"Module"})),S4r=Object.freeze(Object.defineProperty({__proto__:null,GitGraphModule:RGe,createGitGraphServices:_Ge},Symbol.toStringTag,{value:"Module"})),E4r=Object.freeze(Object.defineProperty({__proto__:null,EventModelingModule:HGe,createEventModelingServices:GGe},Symbol.toStringTag,{value:"Module"})),A4r=Object.freeze(Object.defineProperty({__proto__:null,RadarModule:mGe,createRadarServices:yGe},Symbol.toStringTag,{value:"Module"})),M4r=Object.freeze(Object.defineProperty({__proto__:null,RailroadModule:vGe,createRailroadServices:nne},Symbol.toStringTag,{value:"Module"})),R4r=Object.freeze(Object.defineProperty({__proto__:null,RailroadEbnfModule:bGe,createRailroadEbnfServices:ine},Symbol.toStringTag,{value:"Module"})),_4r=Object.freeze(Object.defineProperty({__proto__:null,RailroadAbnfModule:xGe,createRailroadAbnfServices:sne},Symbol.toStringTag,{value:"Module"})),L4r=Object.freeze(Object.defineProperty({__proto__:null,RailroadPegModule:wGe,createRailroadPegServices:ane},Symbol.toStringTag,{value:"Module"})),I4r=Object.freeze(Object.defineProperty({__proto__:null,TreemapModule:CGe,createTreemapServices:kGe},Symbol.toStringTag,{value:"Module"})),N4r=Object.freeze(Object.defineProperty({__proto__:null,WardleyModule:SGe,createWardleyServices:EGe},Symbol.toStringTag,{value:"Module"})),D4r=Object.freeze(Object.defineProperty({__proto__:null,CynefinModule:AGe,createCynefinServices:MGe},Symbol.toStringTag,{value:"Module"})); diff --git a/apps/ios/EditorSource/src/main.ts b/apps/ios/EditorSource/src/main.ts index bc2664af..05b0f054 100644 --- a/apps/ios/EditorSource/src/main.ts +++ b/apps/ios/EditorSource/src/main.ts @@ -45,6 +45,7 @@ import { import { createEdgeEverMathematics } from "@edgeever/shared/mathematics"; import { createIosImageGallery } from "./document-nodes"; import { createImageInsertTransaction, groupUploadedImages, NATIVE_IMAGE_GALLERY_CSS } from "@edgeever/shared/native-image-gallery"; +import { NEW_IMAGE_WIDTH_PERCENT } from "@edgeever/shared/image-display"; const galleryStyle = document.createElement("style"); galleryStyle.textContent = NATIVE_IMAGE_GALLERY_CSS; @@ -1523,7 +1524,7 @@ const api: EdgeEverEditorAPI = { editor .chain() .focus() - .setImage({ src: previewDataUrl, alt: uploadId }) + .setImage({ src: previewDataUrl, alt: uploadId, width: NEW_IMAGE_WIDTH_PERCENT }) .run(); // mark last image const imgs = editorEl.querySelectorAll("img"); @@ -1536,6 +1537,7 @@ const api: EdgeEverEditorAPI = { if (!editor.isEditable) return; editor.view.dispatch(createImageInsertTransaction(editor.state, { src: imageUrl, alt: alt || uploadId || "", + width: NEW_IMAGE_WIDTH_PERCENT, })); emitChange(editor); }, diff --git a/apps/mobile/src/components/LocalTiptapEditor.tsx b/apps/mobile/src/components/LocalTiptapEditor.tsx index a6d9a80b..0133f688 100644 --- a/apps/mobile/src/components/LocalTiptapEditor.tsx +++ b/apps/mobile/src/components/LocalTiptapEditor.tsx @@ -54,6 +54,7 @@ import { import { createEdgeEverMathematics } from "@edgeever/shared/mathematics"; import { DEFAULT_IMAGE_WIDTH_PERCENT, + NEW_IMAGE_WIDTH_PERCENT, IMAGE_WIDTH_PRESETS, clampImageWidth, parseImageWidth, @@ -2922,7 +2923,7 @@ const insertImageUploadPlaceholder = ( alt, src: source, title: previewDataUrl, - width: DEFAULT_IMAGE_WIDTH_PERCENT, + width: NEW_IMAGE_WIDTH_PERCENT, }, selection ?? editor.state.selection); tr.setMeta(TRANSIENT_IMAGE_UPLOAD_META, true); editor.view.dispatch(tr); diff --git a/apps/web/src/components/EditorPane.tsx b/apps/web/src/components/EditorPane.tsx index 2ef65d0a..c03fdd03 100644 --- a/apps/web/src/components/EditorPane.tsx +++ b/apps/web/src/components/EditorPane.tsx @@ -132,7 +132,7 @@ import { createMemoLinkHref, parseMemoLinkHref, } from "@edgeever/shared"; -import { DEFAULT_IMAGE_WIDTH_PERCENT } from "@edgeever/shared/image-display"; +import { NEW_IMAGE_WIDTH_PERCENT } from "@edgeever/shared/image-display"; import { EdgeEverLink } from "@edgeever/shared/editor-link"; import { createEdgeEverMathematics } from "@edgeever/shared/mathematics"; import { codeBlockLowlight, EdgeEverCodeBlock } from "@/lib/code-block"; @@ -1003,7 +1003,7 @@ const RichEditorPane = ({ src: resource.url, alt: file.name, title: file.name, - width: DEFAULT_IMAGE_WIDTH_PERCENT, + width: NEW_IMAGE_WIDTH_PERCENT, }, }; } diff --git a/apps/web/src/components/MobileStandaloneTiptapEditor.tsx b/apps/web/src/components/MobileStandaloneTiptapEditor.tsx index 42dae88c..2a5b5ebd 100644 --- a/apps/web/src/components/MobileStandaloneTiptapEditor.tsx +++ b/apps/web/src/components/MobileStandaloneTiptapEditor.tsx @@ -9,6 +9,7 @@ import { mergeAttributes } from "@tiptap/core"; import Placeholder from "@tiptap/extension-placeholder"; import { createExcerpt, createEdgeEverDocumentExtensions, docToMarkdown, docToText, emptyDoc, getImageReferrerPolicy, isPdfAttachment, wrapDetailsContentHtml, type MemoDetail, type MemoEditSession, type Notebook, type TagSummary, type TiptapDoc } from "@edgeever/shared"; import { createEdgeEverMathematics } from "@edgeever/shared/mathematics"; +import { NEW_IMAGE_WIDTH_PERCENT } from "@edgeever/shared/image-display"; import { getMobileEditorInputAttributes, getMobileEditorPlaceholder } from "@edgeever/shared/mobile-editor"; import { EdgeEverLink } from "@edgeever/shared/editor-link"; import { createInlineFieldExtension } from "@/components/editor/InlineField"; @@ -633,6 +634,7 @@ export const MobileStandaloneTiptapEditor = ({ src: resource.url, alt: file.name, title: file.name, + width: NEW_IMAGE_WIDTH_PERCENT, }) .run(); } else if (isPdfAttachment(file.type, resource.filename || file.name)) { diff --git a/packages/shared/src/image-display.test.mjs b/packages/shared/src/image-display.test.mjs index f3064059..c7ae6c65 100644 --- a/packages/shared/src/image-display.test.mjs +++ b/packages/shared/src/image-display.test.mjs @@ -1,6 +1,7 @@ import { describe, expect, test } from "bun:test"; import { DEFAULT_IMAGE_WIDTH_PERCENT, + NEW_IMAGE_WIDTH_PERCENT, IMAGE_WIDTH_PRESETS, clampImageWidth, parseImageWidth, @@ -9,6 +10,7 @@ import { describe("shared image display widths", () => { test("keeps the four editor presets stable across clients", () => { expect(DEFAULT_IMAGE_WIDTH_PERCENT).toBe(72); + expect(NEW_IMAGE_WIDTH_PERCENT).toBe(IMAGE_WIDTH_PRESETS[0].width); expect(IMAGE_WIDTH_PRESETS.map(({ id, width }) => [id, width])).toEqual([ ["small", 35], ["medium", 50], diff --git a/packages/shared/src/image-display.ts b/packages/shared/src/image-display.ts index f650fb1d..29cad803 100644 --- a/packages/shared/src/image-display.ts +++ b/packages/shared/src/image-display.ts @@ -9,6 +9,8 @@ export const IMAGE_WIDTH_PRESETS = [ { id: "full", width: 100, labelKey: "editor.imageSizeFull" }, ] as const; +export const NEW_IMAGE_WIDTH_PERCENT = IMAGE_WIDTH_PRESETS[0].width; + export type ImageWidthPresetId = (typeof IMAGE_WIDTH_PRESETS)[number]["id"]; export const clampImageWidth = (width: number): number =>