ranui
Version:
A framework-agnostic Web Components UI library built on native custom elements, with TypeScript types, light/dark theming, SSR and PWA support.
4 lines (3 loc) • 11.3 kB
JavaScript
const ie=require("./chunk-KEIR6QF5-C4fcHpY0.cjs"),ae=require("./mermaid-parser.core-DYumW1vq.cjs"),o=require("./chunk-Y2CYZVJY-DPaYLFFP.cjs"),f=require("./src-C9EhKhbk.cjs"),c=require("./chunk-WYO6CB5R-u4mJNOcO.cjs"),w=require("./chunk-ICXQ74PX-BbT9JaEW.cjs"),re=require("./chunk-JWPE2WC7-D8EnWK1B.cjs");var E="position frame",A="frame positioned",y="position relation",R="relation positioned",oe=o.__name(function(e){f.log.debug("options str",e)},"setOptions"),se=o.__name(function(){return{}},"getOptions"),le=o.__name(function(){T(),c.clear()},"clear");function T(){M={}}o.__name(T,"reset");var de=c.defaultConfig_default.eventmodeling,ce=o.__name(()=>w.cleanAndMerge({...de,...c.getConfig().eventmodeling}),"getConfig"),M={};function C(){let e=me;const{ast:n}=M,t=F();if(!n)throw new Error("No data for EventModel");return n.frames.forEach((i,a)=>{const r=H(i,n.dataEntities,t);e=v(e,{$kind:E,index:a,frame:i,textProps:r});let d;Y(i)?(f.log.debug("source frame",i.sourceFrames),d=n.frames.filter(l=>i.sourceFrames.some(m=>m.$refText===l.name)),d.forEach(l=>{e=v(e,{$kind:y,index:a,frame:i,sourceFrame:l})})):e=v(e,{$kind:y,index:a,frame:i})}),e={...e,sortedSwimlanesArray:B(e.swimlanes)},e}o.__name(C,"getState");function D(e){M.ast=e}o.__name(D,"setAst");var s={swimlaneMinHeight:70,swimlanePadding:15,swimlaneGap:10,boxPadding:10,boxOverlap:90,boxDefaultY:0,boxMinWidth:80,boxMaxWidth:450,boxMinHeight:80,boxMaxHeight:750,contentStartX:250,textMaxWidth:430,boxTextFontWeight:"bold",boxTextPadding:10,swimlaneTextFontWeight:"bold",labelUiAutomation:"UI/Automation",labelUiAutomationPrefix:"UI/A: ",labelCommandReadModel:"Command/Read Model",labelCommandReadModelPrefix:"C/RM: ",labelEvents:"Events",labelEventsPrefix:"Stream: "};function F(){return s}o.__name(F,"getDiagramProps");var me={boxes:[],swimlanes:{},relations:[],maxR:0,sortedSwimlanesArray:[]};function $(e){const n=e.split(".");if(n.length===2)return n[0]}o.__name($,"extractNamespace");function W(e){const n=e.split(".");return n.length===2?n[1]:e}o.__name(W,"extractName");function O(e,n){if(!(!n||n.length===0))return Object.values(e).find(t=>t.namespace===n)}o.__name(O,"findSwimlaneByNamespace");function _(e,n,t){return Math.max(n,...Object.keys(e).filter(i=>{const a=Number.parseInt(i);return a>n&&a<t}).map(i=>Number.parseInt(i)))+1}o.__name(_,"findNextAvailableIndex");function I(e,n){const t=$(e.entityIdentifier),i=O(n,t);switch(e.modelEntityType){case"ui":case"pcr":case"processor":return i?{index:i.index,label:i.namespace||s.labelUiAutomation}:t?{index:_(n,0,100),label:s.labelUiAutomationPrefix+t}:{index:0,label:s.labelUiAutomation};case"rmo":case"readmodel":case"cmd":case"command":return i?{index:i.index,label:i.namespace||s.labelCommandReadModel}:t?{index:_(n,100,200),label:s.labelCommandReadModelPrefix+t}:{index:100,label:s.labelCommandReadModel};default:return i?{index:i.index,label:i.namespace||s.labelEvents}:t?{index:_(n,200,300),label:s.labelEventsPrefix+t}:{index:200,label:s.labelEvents}}}o.__name(I,"calculateSwimlaneProps");function N(e){const{themeVariables:n}=c.getConfig();switch(e.modelEntityType){case"ui":return{fill:n.emUiFill??"white",stroke:n.emUiStroke??"#dbdada"};case"pcr":case"processor":return{fill:n.emProcessorFill??"#edb3f6",stroke:n.emProcessorStroke??"#b88cbf"};case"rmo":case"readmodel":return{fill:n.emReadModelFill??"#d3f1a2",stroke:n.emReadModelStroke??"#a3b732"};case"cmd":case"command":return{fill:n.emCommandFill??"#bcd6fe",stroke:n.emCommandStroke??"#679ac3"};case"evt":case"event":return{fill:n.emEventFill??"#ffb778",stroke:n.emEventStroke??"#c19a0f"};default:return{fill:"red",stroke:"black"}}}o.__name(N,"calculateEntityVisualProps");function H(e,n,t){const i=c.getConfig(),a=c.sanitizeText(W(e.entityIdentifier)??"",i);let r;const d={fontSize:16,fontWeight:700,fontFamily:'"trebuchet ms", verdana, arial, sans-serif',joinWith:"<br/>"};let l=`<b>${w.wrapLabel(a,t.textMaxWidth,d)}</b>`;if(e.dataInlineValue&&(r=e.dataInlineValue,r=r.substring(r.indexOf("{")+1),r=r.substring(0,r.lastIndexOf("}")-1),r=c.sanitizeText(r,i),r=w.wrapLabel(r,t.textMaxWidth,d),r=r.replaceAll(" "," ")),e.dataReference){const h=n.find(p=>p.name===e.dataReference?.$refText);h&&(r=h.dataBlockValue,r=r.substring(r.indexOf(`{
`)+2),r=r.substring(0,r.lastIndexOf("}")-1),r=c.sanitizeText(r,i),r=w.wrapLabel(r,t.textMaxWidth,d),r=r.replaceAll(" "," "),r+="<br/>")}const m=r!==void 0;m&&(l+=`<br/><br/><code style="text-align: left; display: block;max-width:${t.textMaxWidth}px">${r}</code>`);const x={fontSize:d.fontSize,fontWeight:d.fontWeight,fontFamily:d.fontFamily},u=w.calculateTextDimensions(l,x),g=m?u.width/3:u.width,b={content:l,width:g,height:u.height};return f.log.debug(`[${e.name}] ${e.entityIdentifier} text`,b),b}o.__name(H,"calculateTextProps");function q(e,n){const t=n,i=N(t.frame),a={width:t.textProps.width+2*s.boxTextPadding,height:t.textProps.height+2*s.boxTextPadding};return[{$kind:A,frame:t.frame,index:t.index,visual:i,dimension:a,textProps:t.textProps}]}o.__name(q,"decidePositionFrame");function U(e,n,t){return n===void 0?s.contentStartX:n.index===e.index&&e.r?e.r+s.boxPadding:t===void 0?s.contentStartX:t.r-s.boxOverlap+s.boxPadding}o.__name(U,"calculateX");function L(e,n){const t=[...e.map(i=>i.r),n];return Math.max(...t)}o.__name(L,"calculateMaxRight");function B(e){return Object.values(e).sort((n,t)=>n.index-t.index)}o.__name(B,"sortedSwimlanesArray");function V(e,n){const t=n,i=I(t.frame,e.swimlanes);let a;i.index in e.swimlanes?a=e.swimlanes[i.index]:a={index:i.index,label:i.label,r:0,y:i.index*s.swimlaneMinHeight+s.swimlaneGap,height:s.swimlaneMinHeight,maxHeight:s.swimlaneMinHeight};const r=e.boxes.length>0?e.boxes[e.boxes.length-1]:void 0,d=e.previousSwimlaneNumber!==void 0?e.swimlanes[e.previousSwimlaneNumber]:void 0,l={width:Math.max(s.boxMinWidth,Math.min(s.boxMaxWidth,t.dimension.width))+2*s.boxPadding,height:Math.max(s.boxMinHeight,Math.min(s.boxMaxHeight,t.dimension.height))+2*s.boxPadding},m=U(a,d,r),x=m+l.width+s.boxPadding,u=L(Object.values(e.swimlanes),x);a.r=m+l.width,a.maxHeight=Math.max(a.maxHeight,l.height),a.height=Math.max(s.swimlaneMinHeight,a.maxHeight)+2*s.swimlanePadding;const g={x:m,y:s.swimlanePadding+a.y,r:x,dimension:l,leftSibling:!1,swimlane:a,visual:t.visual,text:t.textProps.content,frame:t.frame,index:t.index},b={...e,boxes:[...e.boxes,g],swimlanes:{...e.swimlanes,[`${a.index}`]:a},previousSwimlaneNumber:i.index,previousFrame:t.frame,maxR:u},h=B(b.swimlanes);h.length>0&&(h[0].y=0);for(let p=1;p<h.length;p++){const ne=h[p],S=h[p-1];ne.y=S.y+S.height+s.swimlaneGap}return b}o.__name(V,"evolveFramePositioned");function X(e,n){return e===0&&n.sourceFrames.length===0}o.__name(X,"isFirstFrame");function Y(e){return e.sourceFrames!==void 0&&e.sourceFrames!==null&&e.sourceFrames.length>0}o.__name(Y,"hasSourceFrame");function P(e,n){if(n!=null)return e.find(t=>t.frame.name===n.name)}o.__name(P,"findBoxByFrame");function G(e,n,t){if(!(t<0))for(let i=t;i>=0;i--){const a=e[i];if(a.swimlane.index!==n)return a}}o.__name(G,"findBoxByLineIndex");function j(e,n){const t=n;if(ie.isEmResetFrame(t.frame)||X(t.index,t.frame))return[];const i=P(e.boxes,t.frame);if(i===void 0)throw new Error(`Target box not found for frame ${t.frame.name}`);let a;return t.sourceFrame?a=P(e.boxes,t.sourceFrame):a=G(e.boxes,i.swimlane.index,t.index-1),a===void 0?[]:[{$kind:R,frame:t.frame,index:t.index,sourceBox:a,targetBox:i}]}o.__name(j,"decidePositionRelation");function z(e,n){const t=n,i={visual:{fill:"none",stroke:"#000"},source:{x:t.sourceBox.x,y:t.sourceBox.y},target:{x:t.targetBox.x,y:t.targetBox.y},sourceBox:t.sourceBox,targetBox:t.targetBox};return{...e,relations:[...e.relations,i]}}o.__name(z,"evolveRelationPositioned");var ue={[E]:q,[y]:j},xe={[A]:V,[R]:z};function K(e,n){const t=ue[n.$kind];if(t==null)return[];const i=t(e,n);return f.log.debug("decided events",i),i}o.__name(K,"decide");function J(e,n){const t=n.reduce((i,a)=>{const r=xe[a.$kind];return r==null?i:r(i,a)},e);return f.log.debug("evolve events",{state:e,newState:t,events:n}),t}o.__name(J,"evolve");function v(e,n){return J(e,K(e,n))}o.__name(v,"dispatch");var k={getConfig:ce,setOptions:oe,getOptions:se,clear:le,setAccTitle:c.setAccTitle,getAccTitle:c.getAccTitle,getAccDescription:c.getAccDescription,setAccDescription:c.setAccDescription,setDiagramTitle:c.setDiagramTitle,getDiagramTitle:c.getDiagramTitle,setAst:D,getDiagramProps:F,getState:C},ge={parse:o.__name(async e=>{const n=await ae.parse("eventmodeling",e);f.log.debug(n),k.setAst(n),re.populateCommonDb(n,k)},"parse")},fe=c.getConfig2()?.eventmodeling;function Q(e,n){return t=>{const i=t.swimlane.y+n.swimlanePadding,a=e.append("g").attr("class","em-box");a.append("rect").attr("x",t.x).attr("y",i).attr("rx","3").attr("width",t.dimension.width).attr("height",t.dimension.height).attr("stroke",t.visual.stroke).attr("fill",t.visual.fill),a.append("foreignObject").attr("x",t.x+n.boxPadding).attr("y",i+10).attr("width",t.dimension.width-2*n.boxPadding).attr("height",t.dimension.height-2*n.boxPadding).append("xhtml:div").style("display","table").style("height","100%").style("width","100%").append("span").style("display","table-cell").style("text-align","center").style("vertical-align","middle").html(t.text)}}o.__name(Q,"renderD3Box");function Z(e,n){return e>n}o.__name(Z,"dirUpwards");function ee(e,n,t,i){return a=>{const r=a.sourceBox.swimlane.y+n.swimlanePadding,d=a.targetBox.swimlane.y+n.swimlanePadding,l=Z(r,d),m=a.sourceBox.x+a.sourceBox.dimension.width*2/3,x=a.targetBox.x+a.targetBox.dimension.width/3;let u,g;f.log.debug(`rendering relation up=${l} for `,{sourceBox:a.sourceBox,targetBox:a.targetBox}),l?(u=r,g=d+a.targetBox.dimension.height):(u=r+a.sourceBox.dimension.height,g=d);const b=i.emRelationStroke??a.visual.stroke;e.append("path").attr("class","em-relation").attr("fill",a.visual.fill).attr("stroke",b).attr("stroke-width","1").attr("marker-end",`url(#${t})`).attr("d",`M${m} ${u} L${x} ${g}`)}}o.__name(ee,"renderD3Relation");function te(e,n,t,i){return a=>{const r=e.append("g").attr("class","em-swimlane"),d=i.emSwimlaneBackgroundOdd??"rgb(250,250,250)",l=i.emSwimlaneBackgroundStroke??"rgb(240,240,240)";r.append("rect").attr("x",0).attr("y",a.y).attr("rx","3").attr("width",n+t.swimlanePadding).attr("height",a.height).attr("fill",d).attr("stroke",l),r.append("text").attr("font-weight",t.swimlaneTextFontWeight).attr("x",30).attr("y",a.y+30).text(a.label)}}o.__name(te,"renderD3Swimlane");var he={parser:ge,db:k,renderer:{draw:o.__name(function(e,n,t,i){if(f.log.debug("in eventmodeling renderer",e+`
`,"id:",n,t),!fe)throw new Error("EventModeling config not found");const a=i.db,{themeVariables:r,eventmodeling:d}=c.getConfig2(),l=f.select_default(`[id="${n}"]`),m=a.getDiagramProps(),x=a.getState(),u=`em-arrowhead-${n}`,g=r.emArrowhead??"#000000";x.sortedSwimlanesArray.forEach(te(l,x.maxR,m,r)),x.boxes.forEach(Q(l,m)),x.relations.forEach(ee(l,m,u,r)),l.append("defs").append("marker").attr("id",u).attr("markerWidth","10").attr("markerHeight","7").attr("refX","10").attr("refY","3.5").attr("orient","auto").append("polygon").attr("points","0 0, 10 3.5, 0 7").attr("fill",g),c.setupGraphViewbox2(void 0,l,d?.padding??30,d?.useMaxWidth)},"draw")},styles:o.__name(e=>"","getStyles")};exports.diagram=he;