@markee/diagrams 0.1.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +19 -0
- package/README.md +39 -0
- package/_assets/_head/assets/{_api-BbxJBqLU.js → _api-m6XYvA-0.js} +1 -1
- package/_assets/_head/assets/_architecture-PBZL5I3N-xnhut1Pa.js +1 -0
- package/_assets/_head/assets/{_architectureDiagram-2XIMDMQ5-B6NKHtRx.js → _architectureDiagram-2XIMDMQ5-CmZPhLbM.js} +1 -1
- package/_assets/_head/assets/{_blockDiagram-WCTKOSBZ-Dqnb6UUE.js → _blockDiagram-WCTKOSBZ-C3Asu6Kw.js} +1 -1
- package/_assets/_head/assets/{_c4Diagram-IC4MRINW-BZcM5On4.js → _c4Diagram-IC4MRINW-BK3_s_bR.js} +1 -1
- package/_assets/_head/assets/_channel-DT33mbtw.js +1 -0
- package/_assets/_head/assets/{_chunk-4BX2VUAB-zqTDmcBB.js → _chunk-4BX2VUAB-u7GuGTlH.js} +1 -1
- package/_assets/_head/assets/_chunk-55IACEB6-BhegayeB.js +1 -0
- package/_assets/_head/assets/{_chunk-7E7YKBS2-BfdwzEwB.js → _chunk-7E7YKBS2-DRw7IFmq.js} +1 -1
- package/_assets/_head/assets/{_chunk-7R4GIKGN-CixjX2hF.js → _chunk-7R4GIKGN-CEEB8leR.js} +1 -1
- package/_assets/_head/assets/{_chunk-C72U2L5F-Ju1rEIdN.js → _chunk-C72U2L5F-q7txozuq.js} +1 -1
- package/_assets/_head/assets/{_chunk-EGIJ26TM-CCUYcH6V.js → _chunk-EGIJ26TM-yYSCEksb.js} +1 -1
- package/_assets/_head/assets/{_chunk-FMBD7UC4-D6coRtDw.js → _chunk-FMBD7UC4-Dm6s76j7.js} +1 -1
- package/_assets/_head/assets/{_chunk-GEFDOKGD-hedaaI_B.js → _chunk-GEFDOKGD-DinyCumL.js} +1 -1
- package/_assets/_head/assets/_chunk-GLR3WWYH-BnCkIl1j.js +2 -0
- package/_assets/_head/assets/_chunk-HHEYEP7N-2k_uWfJ-.js +1 -0
- package/_assets/_head/assets/{_chunk-JSJVCQXG-CJ2rQuP0.js → _chunk-JSJVCQXG-BwRzsZaf.js} +1 -1
- package/_assets/_head/assets/{_chunk-KX2RTZJC-C6_Rew8h.js → _chunk-KX2RTZJC-CU2wfNBA.js} +1 -1
- package/_assets/_head/assets/{_chunk-KYZI473N-HFloJmj0.js → _chunk-KYZI473N-DFGZfQqH.js} +1 -1
- package/_assets/_head/assets/{_chunk-L3YUKLVL-BZnSrFqZ.js → _chunk-L3YUKLVL-8ZFAhWTa.js} +1 -1
- package/_assets/_head/assets/{_chunk-MX3YWQON-DTYOrezi.js → _chunk-MX3YWQON-OBQAAB3N.js} +1 -1
- package/_assets/_head/assets/{_chunk-NQ4KR5QH-BUplpEk2.js → _chunk-NQ4KR5QH-DJwRvUSa.js} +1 -1
- package/_assets/_head/assets/{_chunk-O4XLMI2P-Dmj7UqP5.js → _chunk-O4XLMI2P-C5stF2lf.js} +1 -1
- package/_assets/_head/assets/{_chunk-OZEHJAEY-BSk-0ei6.js → _chunk-OZEHJAEY-C-6Mr0rV.js} +1 -1
- package/_assets/_head/assets/{_chunk-PQ6SQG4A-d07SUR0W.js → _chunk-PQ6SQG4A-Ce4yqK2U.js} +1 -1
- package/_assets/_head/assets/{_chunk-PU5JKC2W-B7Fh0LIt.js → _chunk-PU5JKC2W-DjhZtVq8.js} +1 -1
- package/_assets/_head/assets/_chunk-QZHKN3VN-Bhpn6rDK.js +1 -0
- package/_assets/_head/assets/{_chunk-R5LLSJPH-CoKBj2D6.js → _chunk-R5LLSJPH-DzG3FAck.js} +1 -1
- package/_assets/_head/assets/{_chunk-WL4C6EOR-bOFxg0ID.js → _chunk-WL4C6EOR-DjvVjER2.js} +1 -1
- package/_assets/_head/assets/{_chunk-XIRO2GV7-COC85g2g.js → _chunk-XIRO2GV7-DYEpFn3-.js} +1 -1
- package/_assets/_head/assets/{_chunk-XPW4576I-CW6DI-1k.js → _chunk-XPW4576I-CRDcKYn5.js} +1 -1
- package/_assets/_head/assets/{_chunk-XZSTWKYB-DNV9pfMo.js → _chunk-XZSTWKYB-Dnmcdxn2.js} +1 -1
- package/_assets/_head/assets/{_chunk-YBOYWFTD-nZYHIeRV.js → _chunk-YBOYWFTD-C0sy-tkc.js} +1 -1
- package/_assets/_head/assets/_classDiagram-VBA2DB6C-DDvYM7vU.js +1 -0
- package/_assets/_head/assets/_classDiagram-v2-RAHNMMFH-BPF9HrXj.js +1 -0
- package/_assets/_head/assets/{_cose-bilkent-S5V4N54A-DzNIP-ES.js → _cose-bilkent-S5V4N54A-pwuuIbv2.js} +1 -1
- package/_assets/_head/assets/{_d3-graphviz-D-OeP-Hi.js → _d3-graphviz-DcMtfIhp.js} +1 -1
- package/_assets/_head/assets/{_dagre-D4f1FF8i.js → _dagre-CA4z7MrA.js} +1 -1
- package/_assets/_head/assets/{_dagre-KLK3FWXG-BkNMp9M0.js → _dagre-KLK3FWXG-CoqulaDf.js} +1 -1
- package/_assets/_head/assets/{_diagram-E7M64L7V-D6PZVOLB.js → _diagram-E7M64L7V-B-3RYN0e.js} +1 -1
- package/_assets/_head/assets/{_diagram-IFDJBPK2-QApacJ5c.js → _diagram-IFDJBPK2-BeCxbGXv.js} +1 -1
- package/_assets/_head/assets/{_diagram-P4PSJMXO-CNMUKotv.js → _diagram-P4PSJMXO-CvQRbCi5.js} +1 -1
- package/_assets/_head/assets/{_dist-Dk49gvBM.js → _dist-BO11r0fr.js} +1 -1
- package/_assets/_head/assets/{_erDiagram-INFDFZHY-Bpnx05jC.js → _erDiagram-INFDFZHY-Zh2XbqbT.js} +1 -1
- package/_assets/_head/assets/{_flowDiagram-PKNHOUZH-BdAdScRO.js → _flowDiagram-PKNHOUZH-DrDi74q1.js} +1 -1
- package/_assets/_head/assets/{_ganttDiagram-A5KZAMGK-DzEPJRcF.js → _ganttDiagram-A5KZAMGK-DZA6377B.js} +1 -1
- package/_assets/_head/assets/_gitGraph-HDMCJU4V-Ec_hDt6_.js +1 -0
- package/_assets/_head/assets/{_gitGraphDiagram-K3NZZRJ6-BMvgx1jL.js → _gitGraphDiagram-K3NZZRJ6-Br5Sirqq.js} +1 -1
- package/_assets/_head/assets/_info-3K5VOQVL-CENtZRFH.js +1 -0
- package/_assets/_head/assets/_infoDiagram-LFFYTUFH-C2swHr78.js +2 -0
- package/_assets/_head/assets/{_ishikawaDiagram-PHBUUO56-ye8wu7pU.js → _ishikawaDiagram-PHBUUO56-ETOK-LOw.js} +1 -1
- package/_assets/_head/assets/{_journeyDiagram-4ABVD52K-D5OtlO2S.js → _journeyDiagram-4ABVD52K-3Odci6Ma.js} +1 -1
- package/_assets/_head/assets/{_kanban-definition-K7BYSVSG-DtUEcx7s.js → _kanban-definition-K7BYSVSG-C-x5I47z.js} +1 -1
- package/_assets/_head/assets/{_line-Bn73e1DS.js → _line-BMsgmPE5.js} +1 -1
- package/_assets/_head/assets/{_linear-DLy__jWx.js → _linear-D1vf9RD0.js} +1 -1
- package/_assets/_head/assets/{_mermaid-parser.core-_H6Clr87.js → _mermaid-parser.core-DZbZ9Nt1.js} +2 -2
- package/_assets/_head/assets/{_mermaid.core-CN_dW3wB.js → _mermaid.core-B6JDNx3m.js} +3 -3
- package/_assets/_head/assets/{_mindmap-definition-YRQLILUH-Bj6WNjT2.js → _mindmap-definition-YRQLILUH-CY8Mkbyf.js} +1 -1
- package/_assets/_head/assets/_packet-RMMSAZCW-HsVTCE5M.js +1 -0
- package/_assets/_head/assets/_pie-UPGHQEXC-ClCegNAN.js +1 -0
- package/_assets/_head/assets/{_pieDiagram-SKSYHLDU-B7n7B95W.js → _pieDiagram-SKSYHLDU-CYJI9Scd.js} +1 -1
- package/_assets/_head/assets/{_quadrantDiagram-337W2JSQ-C_OD8wEG.js → _quadrantDiagram-337W2JSQ-BGW8PhOJ.js} +1 -1
- package/_assets/_head/assets/_radar-KQ55EAFF-ugGxOkwG.js +1 -0
- package/_assets/_head/assets/{_requirementDiagram-Z7DCOOCP-C8HzXf-7.js → _requirementDiagram-Z7DCOOCP-BbV78NhX.js} +1 -1
- package/_assets/_head/assets/{_sankeyDiagram-WA2Y5GQK-Ctpgy26F.js → _sankeyDiagram-WA2Y5GQK-ByyrJf1U.js} +1 -1
- package/_assets/_head/assets/{_sequenceDiagram-2WXFIKYE-BrWWYecj.js → _sequenceDiagram-2WXFIKYE-CUwOGuhQ.js} +1 -1
- package/_assets/_head/assets/{_src-COkbRRdF.js → _src-Bi8wryCV.js} +1 -1
- package/_assets/_head/assets/{_src-EY2faTVt.js → _src-D_0f55rL.js} +1 -1
- package/_assets/_head/assets/{_src-DGaYM9rN.js → _src-SNUCTSwP.js} +1 -1
- package/_assets/_head/assets/{_stateDiagram-RAJIS63D-DHDYVq4g.js → _stateDiagram-RAJIS63D-Dxv3HBdz.js} +1 -1
- package/_assets/_head/assets/_stateDiagram-v2-FVOUBMTO-brNar02G.js +1 -0
- package/_assets/_head/assets/{_timeline-definition-YZTLITO2-Baqh8Zr3.js → _timeline-definition-YZTLITO2-COgTpWBR.js} +1 -1
- package/_assets/_head/assets/_treemap-KZPCXAKY-CXR7h5hT.js +1 -0
- package/_assets/_head/assets/{_value-BHMRaafc.js → _value-NcYKFvkN.js} +1 -1
- package/_assets/_head/assets/{_vennDiagram-LZ73GAT5-DT2MLRvW.js → _vennDiagram-LZ73GAT5-CFvtr6ch.js} +1 -1
- package/_assets/_head/assets/{_xychartDiagram-JWTSCODW-B4O2dc9N.js → _xychartDiagram-JWTSCODW-DtHVB6Xo.js} +1 -1
- package/_assets/_head/assets/{main-GvJmWKsI.js → main-Bgz5KRxr.js} +3 -3
- package/_assets/_head/assets/main-DTgc_eyw.css +1 -0
- package/package.json +13 -4
- package/src/element.test.ts +319 -0
- package/src/helpers.test.ts +51 -0
- package/src/index.css +4 -4
- package/src/main.test.ts +29 -0
- package/src/remark.test.ts +196 -0
- package/src/remark.ts +4 -5
- package/src/runtime.test.ts +78 -0
- package/tsconfig.json +3 -10
- package/vitest.config.ts +4 -0
- package/vitest.setup.ts +6 -0
- package/_assets/_head/assets/_architecture-PBZL5I3N-BPxfLoEK.js +0 -1
- package/_assets/_head/assets/_channel-CfD3KTsT.js +0 -1
- package/_assets/_head/assets/_chunk-55IACEB6-x7bSLf7B.js +0 -1
- package/_assets/_head/assets/_chunk-GLR3WWYH-CADHj0Af.js +0 -2
- package/_assets/_head/assets/_chunk-HHEYEP7N-yDnzeL6u.js +0 -1
- package/_assets/_head/assets/_chunk-QZHKN3VN-OrU_cr5J.js +0 -1
- package/_assets/_head/assets/_classDiagram-VBA2DB6C-C9oLPafD.js +0 -1
- package/_assets/_head/assets/_classDiagram-v2-RAHNMMFH-Dgh8T6Nh.js +0 -1
- package/_assets/_head/assets/_gitGraph-HDMCJU4V-bzhcDRU8.js +0 -1
- package/_assets/_head/assets/_info-3K5VOQVL-DO8S_2BK.js +0 -1
- package/_assets/_head/assets/_infoDiagram-LFFYTUFH-V27XJ0e-.js +0 -2
- package/_assets/_head/assets/_packet-RMMSAZCW-BQu67kO8.js +0 -1
- package/_assets/_head/assets/_pie-UPGHQEXC-Bq1eDF5N.js +0 -1
- package/_assets/_head/assets/_radar-KQ55EAFF-BVJblTdI.js +0 -1
- package/_assets/_head/assets/_stateDiagram-v2-FVOUBMTO-C3RKEofw.js +0 -1
- package/_assets/_head/assets/_treemap-KZPCXAKY-DnDBABML.js +0 -1
- package/_assets/_head/assets/main-CSvXzq1b.css +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{r as e}from"./_chunk-GEFDOKGD-
|
|
1
|
+
import{r as e}from"./_chunk-GEFDOKGD-DinyCumL.js";import"./_src-D_0f55rL.js";import{t}from"./_linear-D1vf9RD0.js";import"./_defaultLocale-CTKA0Sod.js";import{n,r}from"./_src-SNUCTSwP.js";import{B as i,C as a,E as o,L as s,V as c,W as l,_ as u,a as d,c as f,d as p,v as m,y as h}from"./_chunk-7R4GIKGN-CEEB8leR.js";import{t as g}from"./_ordinal-CxoIAYU5.js";import{t as _}from"./_init-B0zvuhbV.js";import{t as v}from"./_line-BMsgmPE5.js";import{t as y}from"./_chunk-HHEYEP7N-2k_uWfJ-.js";import"./_dist-BO11r0fr.js";import{t as b}from"./_chunk-PU5JKC2W-DjhZtVq8.js";function x(e,t,n){e=+e,t=+t,n=(i=arguments.length)<2?(t=e,e=0,1):i<3?1:+n;for(var r=-1,i=Math.max(0,Math.ceil((t-e)/n))|0,a=Array(i);++r<i;)a[r]=e+r*n;return a}function S(){var e=g().unknown(void 0),t=e.domain,n=e.range,r=0,i=1,a,o,s=!1,c=0,l=0,u=.5;delete e.unknown;function d(){var e=t().length,d=i<r,f=d?i:r,p=d?r:i;a=(p-f)/Math.max(1,e-c+l*2),s&&(a=Math.floor(a)),f+=(p-f-a*(e-c))*u,o=a*(1-c),s&&(f=Math.round(f),o=Math.round(o));var m=x(e).map(function(e){return f+a*e});return n(d?m.reverse():m)}return e.domain=function(e){return arguments.length?(t(e),d()):t()},e.range=function(e){return arguments.length?([r,i]=e,r=+r,i=+i,d()):[r,i]},e.rangeRound=function(e){return[r,i]=e,r=+r,i=+i,s=!0,d()},e.bandwidth=function(){return o},e.step=function(){return a},e.round=function(e){return arguments.length?(s=!!e,d()):s},e.padding=function(e){return arguments.length?(c=Math.min(1,l=+e),d()):c},e.paddingInner=function(e){return arguments.length?(c=Math.min(1,e),d()):c},e.paddingOuter=function(e){return arguments.length?(l=+e,d()):l},e.align=function(e){return arguments.length?(u=Math.max(0,Math.min(1,e)),d()):u},e.copy=function(){return S(t(),[r,i]).round(s).paddingInner(c).paddingOuter(l).align(u)},_.apply(d(),arguments)}var C=(function(){var e=n(function(e,t,n,r){for(n||={},r=e.length;r--;n[e[r]]=t);return n},`o`),t=[1,10,12,14,16,18,19,21,23],r=[2,6],i=[1,3],a=[1,5],o=[1,6],s=[1,7],c=[1,5,10,12,14,16,18,19,21,23,34,35,36],l=[1,25],u=[1,26],d=[1,28],f=[1,29],p=[1,30],m=[1,31],h=[1,32],g=[1,33],_=[1,34],v=[1,35],y=[1,36],b=[1,37],x=[1,43],S=[1,42],C=[1,47],w=[1,50],T=[1,10,12,14,16,18,19,21,23,34,35,36],E=[1,10,12,14,16,18,19,21,23,24,26,27,28,34,35,36],D=[1,10,12,14,16,18,19,21,23,24,26,27,28,34,35,36,41,42,43,44,45,46,47,48,49,50],O=[1,64],k={trace:n(function(){},`trace`),yy:{},symbols_:{error:2,start:3,eol:4,XYCHART:5,chartConfig:6,document:7,CHART_ORIENTATION:8,statement:9,title:10,text:11,X_AXIS:12,parseXAxis:13,Y_AXIS:14,parseYAxis:15,LINE:16,plotData:17,BAR:18,acc_title:19,acc_title_value:20,acc_descr:21,acc_descr_value:22,acc_descr_multiline_value:23,SQUARE_BRACES_START:24,commaSeparatedNumbers:25,SQUARE_BRACES_END:26,NUMBER_WITH_DECIMAL:27,COMMA:28,xAxisData:29,bandData:30,ARROW_DELIMITER:31,commaSeparatedTexts:32,yAxisData:33,NEWLINE:34,SEMI:35,EOF:36,alphaNum:37,STR:38,MD_STR:39,alphaNumToken:40,AMP:41,NUM:42,ALPHA:43,PLUS:44,EQUALS:45,MULT:46,DOT:47,BRKT:48,MINUS:49,UNDERSCORE:50,$accept:0,$end:1},terminals_:{2:`error`,5:`XYCHART`,8:`CHART_ORIENTATION`,10:`title`,12:`X_AXIS`,14:`Y_AXIS`,16:`LINE`,18:`BAR`,19:`acc_title`,20:`acc_title_value`,21:`acc_descr`,22:`acc_descr_value`,23:`acc_descr_multiline_value`,24:`SQUARE_BRACES_START`,26:`SQUARE_BRACES_END`,27:`NUMBER_WITH_DECIMAL`,28:`COMMA`,31:`ARROW_DELIMITER`,34:`NEWLINE`,35:`SEMI`,36:`EOF`,38:`STR`,39:`MD_STR`,41:`AMP`,42:`NUM`,43:`ALPHA`,44:`PLUS`,45:`EQUALS`,46:`MULT`,47:`DOT`,48:`BRKT`,49:`MINUS`,50:`UNDERSCORE`},productions_:[0,[3,2],[3,3],[3,2],[3,1],[6,1],[7,0],[7,2],[9,2],[9,2],[9,2],[9,2],[9,2],[9,3],[9,2],[9,3],[9,2],[9,2],[9,1],[17,3],[25,3],[25,1],[13,1],[13,2],[13,1],[29,1],[29,3],[30,3],[32,3],[32,1],[15,1],[15,2],[15,1],[33,3],[4,1],[4,1],[4,1],[11,1],[11,1],[11,1],[37,1],[37,2],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1]],performAction:n(function(e,t,n,r,i,a,o){var s=a.length-1;switch(i){case 5:r.setOrientation(a[s]);break;case 9:r.setDiagramTitle(a[s].text.trim());break;case 12:r.setLineData({text:``,type:`text`},a[s]);break;case 13:r.setLineData(a[s-1],a[s]);break;case 14:r.setBarData({text:``,type:`text`},a[s]);break;case 15:r.setBarData(a[s-1],a[s]);break;case 16:this.$=a[s].trim(),r.setAccTitle(this.$);break;case 17:case 18:this.$=a[s].trim(),r.setAccDescription(this.$);break;case 19:this.$=a[s-1];break;case 20:this.$=[Number(a[s-2]),...a[s]];break;case 21:this.$=[Number(a[s])];break;case 22:r.setXAxisTitle(a[s]);break;case 23:r.setXAxisTitle(a[s-1]);break;case 24:r.setXAxisTitle({type:`text`,text:``});break;case 25:r.setXAxisBand(a[s]);break;case 26:r.setXAxisRangeData(Number(a[s-2]),Number(a[s]));break;case 27:this.$=a[s-1];break;case 28:this.$=[a[s-2],...a[s]];break;case 29:this.$=[a[s]];break;case 30:r.setYAxisTitle(a[s]);break;case 31:r.setYAxisTitle(a[s-1]);break;case 32:r.setYAxisTitle({type:`text`,text:``});break;case 33:r.setYAxisRangeData(Number(a[s-2]),Number(a[s]));break;case 37:this.$={text:a[s],type:`text`};break;case 38:this.$={text:a[s],type:`text`};break;case 39:this.$={text:a[s],type:`markdown`};break;case 40:this.$=a[s];break;case 41:this.$=a[s-1]+``+a[s];break}},`anonymous`),table:[e(t,r,{3:1,4:2,7:4,5:i,34:a,35:o,36:s}),{1:[3]},e(t,r,{4:2,7:4,3:8,5:i,34:a,35:o,36:s}),e(t,r,{4:2,7:4,6:9,3:10,5:i,8:[1,11],34:a,35:o,36:s}),{1:[2,4],9:12,10:[1,13],12:[1,14],14:[1,15],16:[1,16],18:[1,17],19:[1,18],21:[1,19],23:[1,20]},e(c,[2,34]),e(c,[2,35]),e(c,[2,36]),{1:[2,1]},e(t,r,{4:2,7:4,3:21,5:i,34:a,35:o,36:s}),{1:[2,3]},e(c,[2,5]),e(t,[2,7],{4:22,34:a,35:o,36:s}),{11:23,37:24,38:l,39:u,40:27,41:d,42:f,43:p,44:m,45:h,46:g,47:_,48:v,49:y,50:b},{11:39,13:38,24:x,27:S,29:40,30:41,37:24,38:l,39:u,40:27,41:d,42:f,43:p,44:m,45:h,46:g,47:_,48:v,49:y,50:b},{11:45,15:44,27:C,33:46,37:24,38:l,39:u,40:27,41:d,42:f,43:p,44:m,45:h,46:g,47:_,48:v,49:y,50:b},{11:49,17:48,24:w,37:24,38:l,39:u,40:27,41:d,42:f,43:p,44:m,45:h,46:g,47:_,48:v,49:y,50:b},{11:52,17:51,24:w,37:24,38:l,39:u,40:27,41:d,42:f,43:p,44:m,45:h,46:g,47:_,48:v,49:y,50:b},{20:[1,53]},{22:[1,54]},e(T,[2,18]),{1:[2,2]},e(T,[2,8]),e(T,[2,9]),e(E,[2,37],{40:55,41:d,42:f,43:p,44:m,45:h,46:g,47:_,48:v,49:y,50:b}),e(E,[2,38]),e(E,[2,39]),e(D,[2,40]),e(D,[2,42]),e(D,[2,43]),e(D,[2,44]),e(D,[2,45]),e(D,[2,46]),e(D,[2,47]),e(D,[2,48]),e(D,[2,49]),e(D,[2,50]),e(D,[2,51]),e(T,[2,10]),e(T,[2,22],{30:41,29:56,24:x,27:S}),e(T,[2,24]),e(T,[2,25]),{31:[1,57]},{11:59,32:58,37:24,38:l,39:u,40:27,41:d,42:f,43:p,44:m,45:h,46:g,47:_,48:v,49:y,50:b},e(T,[2,11]),e(T,[2,30],{33:60,27:C}),e(T,[2,32]),{31:[1,61]},e(T,[2,12]),{17:62,24:w},{25:63,27:O},e(T,[2,14]),{17:65,24:w},e(T,[2,16]),e(T,[2,17]),e(D,[2,41]),e(T,[2,23]),{27:[1,66]},{26:[1,67]},{26:[2,29],28:[1,68]},e(T,[2,31]),{27:[1,69]},e(T,[2,13]),{26:[1,70]},{26:[2,21],28:[1,71]},e(T,[2,15]),e(T,[2,26]),e(T,[2,27]),{11:59,32:72,37:24,38:l,39:u,40:27,41:d,42:f,43:p,44:m,45:h,46:g,47:_,48:v,49:y,50:b},e(T,[2,33]),e(T,[2,19]),{25:73,27:O},{26:[2,28]},{26:[2,20]}],defaultActions:{8:[2,1],10:[2,3],21:[2,2],72:[2,28],73:[2,20]},parseError:n(function(e,t){if(t.recoverable)this.trace(e);else{var n=Error(e);throw n.hash=t,n}},`parseError`),parse:n(function(e){var t=this,r=[0],i=[],a=[null],o=[],s=this.table,c=``,l=0,u=0,d=0,f=2,p=1,m=o.slice.call(arguments,1),h=Object.create(this.lexer),g={yy:{}};for(var _ in this.yy)Object.prototype.hasOwnProperty.call(this.yy,_)&&(g.yy[_]=this.yy[_]);h.setInput(e,g.yy),g.yy.lexer=h,g.yy.parser=this,h.yylloc===void 0&&(h.yylloc={});var v=h.yylloc;o.push(v);var y=h.options&&h.options.ranges;typeof g.yy.parseError==`function`?this.parseError=g.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function b(e){r.length-=2*e,a.length-=e,o.length-=e}n(b,`popStack`);function x(){var e=i.pop()||h.lex()||p;return typeof e!=`number`&&(e instanceof Array&&(i=e,e=i.pop()),e=t.symbols_[e]||e),e}n(x,`lex`);for(var S,C,w,T,E,D={},O,k,A,j;;){if(w=r[r.length-1],this.defaultActions[w]?T=this.defaultActions[w]:(S??=x(),T=s[w]&&s[w][S]),T===void 0||!T.length||!T[0]){var M=``;for(O in j=[],s[w])this.terminals_[O]&&O>f&&j.push(`'`+this.terminals_[O]+`'`);M=h.showPosition?`Parse error on line `+(l+1)+`:
|
|
2
2
|
`+h.showPosition()+`
|
|
3
3
|
Expecting `+j.join(`, `)+`, got '`+(this.terminals_[S]||S)+`'`:`Parse error on line `+(l+1)+`: Unexpected `+(S==p?`end of input`:`'`+(this.terminals_[S]||S)+`'`),this.parseError(M,{text:h.match,token:this.terminals_[S]||S,line:h.yylineno,loc:v,expected:j})}if(T[0]instanceof Array&&T.length>1)throw Error(`Parse Error: multiple actions possible at state: `+w+`, token: `+S);switch(T[0]){case 1:r.push(S),a.push(h.yytext),o.push(h.yylloc),r.push(T[1]),S=null,C?(S=C,C=null):(u=h.yyleng,c=h.yytext,l=h.yylineno,v=h.yylloc,d>0&&d--);break;case 2:if(k=this.productions_[T[1]][1],D.$=a[a.length-k],D._$={first_line:o[o.length-(k||1)].first_line,last_line:o[o.length-1].last_line,first_column:o[o.length-(k||1)].first_column,last_column:o[o.length-1].last_column},y&&(D._$.range=[o[o.length-(k||1)].range[0],o[o.length-1].range[1]]),E=this.performAction.apply(D,[c,u,l,g.yy,T[1],a,o].concat(m)),E!==void 0)return E;k&&(r=r.slice(0,-1*k*2),a=a.slice(0,-1*k),o=o.slice(0,-1*k)),r.push(this.productions_[T[1]][0]),a.push(D.$),o.push(D._$),A=s[r[r.length-2]][r[r.length-1]],r.push(A);break;case 3:return!0}}return!0},`parse`)};k.lexer=(function(){return{EOF:1,parseError:n(function(e,t){if(this.yy.parser)this.yy.parser.parseError(e,t);else throw Error(e)},`parseError`),setInput:n(function(e,t){return this.yy=t||this.yy||{},this._input=e,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match=``,this.conditionStack=[`INITIAL`],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},`setInput`),input:n(function(){var e=this._input[0];return this.yytext+=e,this.yyleng++,this.offset++,this.match+=e,this.matched+=e,e.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),e},`input`),unput:n(function(e){var t=e.length,n=e.split(/(?:\r\n?|\n)/g);this._input=e+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-t),this.offset-=t;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-t},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-t]),this.yyleng=this.yytext.length,this},`unput`),more:n(function(){return this._more=!0,this},`more`),reject:n(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError(`Lexical error on line `+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).
|
|
4
4
|
`+this.showPosition(),{text:``,token:null,line:this.yylineno});return this},`reject`),less:n(function(e){this.unput(this.match.slice(e))},`less`),pastInput:n(function(){var e=this.matched.substr(0,this.matched.length-this.match.length);return(e.length>20?`...`:``)+e.substr(-20).replace(/\n/g,``)},`pastInput`),upcomingInput:n(function(){var e=this.match;return e.length<20&&(e+=this._input.substr(0,20-e.length)),(e.substr(0,20)+(e.length>20?`...`:``)).replace(/\n/g,``)},`upcomingInput`),showPosition:n(function(){var e=this.pastInput(),t=Array(e.length+1).join(`-`);return e+this.upcomingInput()+`
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./_mermaid.core-
|
|
2
|
-
import{extend as e}from"@markee/runtime";var t=Object.create,n=Object.defineProperty,r=Object.getOwnPropertyDescriptor,i=Object.getOwnPropertyNames,a=Object.getPrototypeOf,o=Object.prototype.hasOwnProperty,s=(e,t)=>()=>(e&&(t=e(e=0)),t),c=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),l=(e,t)=>{let r={};for(var i in e)n(r,i,{get:e[i],enumerable:!0});return t||n(r,Symbol.toStringTag,{value:`Module`}),r},u=(e,t,a,s)=>{if(t&&typeof t==`object`||typeof t==`function`)for(var c=i(t),l=0,u=c.length,d;l<u;l++)d=c[l],!o.call(e,d)&&d!==a&&n(e,d,{get:(e=>t[e]).bind(null,d),enumerable:!(s=r(t,d))||s.enumerable});return e},d=(e,t,n)=>(u(e,t,`default`),n&&u(n,t,`default`)),f=(e,r,i)=>(i=e==null?{}:t(a(e)),u(r||!e||!e.__esModule?n(i,`default`,{value:e,enumerable:!0}):i,e)),p=e=>o.call(e,`module.exports`)?e[`module.exports`]:u(n({},`__esModule`,{value:!0}),e);function m(e){let t=new TextEncoder().encode(e),n=``;return t.forEach(e=>{n+=String.fromCharCode(e)}),btoa(n)}function h(e){let t=atob(e),n=Uint8Array.from(t,e=>e.charCodeAt(0));return new TextDecoder().decode(n)}function g(e){return e.replaceAll(`&`,`&`).replaceAll(`<`,`<`).replaceAll(`>`,`>`).replaceAll(`"`,`"`)}function _(e){return e instanceof Error?e.message:typeof e==`string`?e:`Unknown error`}function v(e,t){let n=e[t];return n===void 0?``:typeof n==`string`?n.trim():typeof n==`number`||typeof n==`boolean`?String(n):``}function y(e){let t=v(e,`class`);return t?t.split(/\s+/).filter(Boolean):[]}function b(e,t,n=!1){let r=v(e,t);if(!r)return n;switch(r.toLowerCase()){case t.toLowerCase():case`1`:case`true`:case`yes`:case`on`:return!0;case`0`:case`false`:case`no`:case`off`:return!1;default:return n}}function x(e,t){let n=e.class;return typeof n==`string`?n.split(/\s+/).includes(t):!1}var S=`modulepreload`,C=function(e,t){return new URL(e,t).href},w={},T=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e=document.getElementsByTagName(`link`),i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}r=o(t.map(t=>{if(t=C(t,n),t in w)return;w[t]=!0;let r=t.endsWith(`.css`),i=r?`[rel="stylesheet"]`:``;if(n)for(let n=e.length-1;n>=0;n--){let i=e[n];if(i.href===t&&(!r||i.rel===`stylesheet`))return}else if(document.querySelector(`link[href="${t}"]${i}`))return;let o=document.createElement(`link`);if(o.rel=r?`stylesheet`:S,r||(o.as=`script`),o.crossOrigin=``,o.href=t,a&&o.setAttribute(`nonce`,a),document.head.appendChild(o),r)return new Promise((e,n)=>{o.addEventListener(`load`,e),o.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${t}`)))})}))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})},E=null,D=null;function O(){return E||=T(()=>import(`./_mermaid.core-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./_mermaid.core-B6JDNx3m.js","./_dist-BO11r0fr.js","./_chunk-PU5JKC2W-DjhZtVq8.js","./_src-SNUCTSwP.js","./_src-Bi8wryCV.js","./_chunk-GEFDOKGD-DinyCumL.js","./_math-CyywJguE.js","./_chunk-7R4GIKGN-CEEB8leR.js","./_isArrayLikeObject-B62EgjVm.js","./_src-D_0f55rL.js","./_isEmpty-DwnoWLeP.js","./_chunk-GLR3WWYH-BnCkIl1j.js","./_chunk-KYZI473N-DFGZfQqH.js","./_chunk-PQ6SQG4A-Ce4yqK2U.js","./_chunk-YBOYWFTD-C0sy-tkc.js","./_rough.esm-B-x7cSr_.js","./_chunk-O4XLMI2P-C5stF2lf.js","./_line-BMsgmPE5.js","./_array-1ZLHT4IW.js","./_path-DqxJfpv2.js","./_path-e1ZUMOO_.js","./_chunk-MX3YWQON-OBQAAB3N.js","./_chunk-HHEYEP7N-2k_uWfJ-.js","./_chunk-XPW4576I-CRDcKYn5.js","./_d3-graphviz-DcMtfIhp.js","./_defaultLocale-CTKA0Sod.js","./_value-NcYKFvkN.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{extend as e}from"@markee/runtime";var t=Object.create,n=Object.defineProperty,r=Object.getOwnPropertyDescriptor,i=Object.getOwnPropertyNames,a=Object.getPrototypeOf,o=Object.prototype.hasOwnProperty,s=(e,t)=>()=>(e&&(t=e(e=0)),t),c=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),l=(e,t)=>{let r={};for(var i in e)n(r,i,{get:e[i],enumerable:!0});return t||n(r,Symbol.toStringTag,{value:`Module`}),r},u=(e,t,a,s)=>{if(t&&typeof t==`object`||typeof t==`function`)for(var c=i(t),l=0,u=c.length,d;l<u;l++)d=c[l],!o.call(e,d)&&d!==a&&n(e,d,{get:(e=>t[e]).bind(null,d),enumerable:!(s=r(t,d))||s.enumerable});return e},d=(e,t,n)=>(u(e,t,`default`),n&&u(n,t,`default`)),f=(e,r,i)=>(i=e==null?{}:t(a(e)),u(r||!e||!e.__esModule?n(i,`default`,{value:e,enumerable:!0}):i,e)),p=e=>o.call(e,`module.exports`)?e[`module.exports`]:u(n({},`__esModule`,{value:!0}),e);function m(e){let t=new TextEncoder().encode(e),n=``;return t.forEach(e=>{n+=String.fromCharCode(e)}),btoa(n)}function h(e){let t=atob(e),n=Uint8Array.from(t,e=>e.charCodeAt(0));return new TextDecoder().decode(n)}function g(e){return e.replaceAll(`&`,`&`).replaceAll(`<`,`<`).replaceAll(`>`,`>`).replaceAll(`"`,`"`)}function _(e){return e instanceof Error?e.message:typeof e==`string`?e:`Unknown error`}function v(e,t){let n=e[t];return n===void 0?``:typeof n==`string`?n.trim():typeof n==`number`||typeof n==`boolean`?String(n):``}function y(e){let t=v(e,`class`);return t?t.split(/\s+/).filter(Boolean):[]}function b(e,t,n=!1){let r=v(e,t);if(!r)return n;switch(r.toLowerCase()){case t.toLowerCase():case`1`:case`true`:case`yes`:case`on`:return!0;case`0`:case`false`:case`no`:case`off`:return!1;default:return n}}function x(e,t){let n=e.class;return typeof n==`string`?n.split(/\s+/).includes(t):!1}var S=`modulepreload`,C=function(e,t){return new URL(e,t).href},w={},T=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e=document.getElementsByTagName(`link`),i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}r=o(t.map(t=>{if(t=C(t,n),t in w)return;w[t]=!0;let r=t.endsWith(`.css`),i=r?`[rel="stylesheet"]`:``;if(n)for(let n=e.length-1;n>=0;n--){let i=e[n];if(i.href===t&&(!r||i.rel===`stylesheet`))return}else if(document.querySelector(`link[href="${t}"]${i}`))return;let o=document.createElement(`link`);if(o.rel=r?`stylesheet`:S,r||(o.as=`script`),o.crossOrigin=``,o.href=t,a&&o.setAttribute(`nonce`,a),document.head.appendChild(o),r)return new Promise((e,n)=>{o.addEventListener(`load`,e),o.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${t}`)))})}))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})},E=null,D=null;function O(){return E||=T(()=>import(`./_mermaid.core-B6JDNx3m.js`).then(e=>(e.default.initialize({startOnLoad:!1}),e.default)),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23]),import.meta.url),E}function k(){return D||=Promise.all([T(()=>import(`./_api-m6XYvA-0.js`).then(e=>f(e.default)),[],import.meta.url),T(()=>import(`./_src-Bi8wryCV.js`).then(e=>e.t),[],import.meta.url),T(()=>import(`./_d3-graphviz-DcMtfIhp.js`),__vite__mapDeps([24,9,4,25,26,20]),import.meta.url)]).then(([e,t])=>{let n=t,r=n.select?n:n.default;if(!r||typeof r.select!=`function`)throw Error(`Could not load d3-selection runtime.`);return{dbmlRun:e.run,select:r.select}}),D}var A=0,j=class extends HTMLElement{#e=0;#t=null;connectedCallback(){this.#r(`Loading diagram runtime...`),this.#n()}disconnectedCallback(){this.#e++,this.#t?.(),this.#t=null}async#n(){let e=++this.#e;this.#t?.(),this.#t=null;let t=this.dataset.source,n=this.dataset.kind?.trim()?.toLowerCase();if(!n||n!==`mermaid`&&n!==`dbml`){this.#i(`Unsupported diagram type.`);return}if(!t){this.#i(`Missing diagram source.`);return}let r=``;try{r=h(t)}catch{this.#i(`Could not decode diagram source.`);return}try{if(n===`mermaid`){let t=await O();if(e!==this.#e)return;let n=document.createElement(`div`);n.className=`markee-diagram-mermaid`,this.replaceChildren(n);let i=`markee-diagram-mermaid-${A++}`,a=await t.render(i,r);if(e!==this.#e)return;n.innerHTML=a.svg,a.bindFunctions?.(n);return}let t=await k();if(e!==this.#e)return;let i=t.dbmlRun(r,`dot`);if(!i.trim()){this.#i(`DBML rendering produced an empty graph.`);return}let a=document.createElement(`div`);if(a.className=`markee-diagram-dbml`,this.replaceChildren(a),await new Promise((e,n)=>{try{let r=t.select(a).graphviz({useWorker:!0,fit:!0,zoom:!1});this.#t=()=>{r.destroy?.()},r.onerror(e=>{n(Error(e))}),r.renderDot(i,()=>{e()})}catch(e){n(e)}}),e!==this.#e)return}catch(e){this.#i(`${n.toUpperCase()} rendering failed.\n${_(e)}`)}}#r(e){this.innerHTML=`<div class="markee-diagram-status">${g(e)}</div>`}#i(e){this.#t?.(),this.#t=null,this.innerHTML=[`<div class="markee-diagram-error">`,`<strong>Diagram error</strong>`,`<pre>${g(e)}</pre>`,`</div>`].join(``)}};function M(){window.customElements.define(`markee-diagram`,j)}var N=f(c(((e,t)=>{(function(e,n){typeof define==`function`&&define.amd?define([],n):typeof t==`object`&&t.exports?t.exports=n():e.moo=n()})(e,function(){var e=Object.prototype.hasOwnProperty,t=Object.prototype.toString,n=typeof RegExp().sticky==`boolean`;function r(e){return e&&t.call(e)===`[object RegExp]`}function i(e){return e&&typeof e==`object`&&!r(e)&&!Array.isArray(e)}function a(e){return e.replace(/[-\/\\^$*+?.()|[\]{}]/g,`\\$&`)}function o(e){return RegExp(`|`+e).exec(``).length-1}function s(e){return`(`+e+`)`}function c(e){return e.length?`(?:`+e.map(function(e){return`(?:`+e+`)`}).join(`|`)+`)`:`(?!)`}function l(e){if(typeof e==`string`)return`(?:`+a(e)+`)`;if(r(e)){if(e.ignoreCase)throw Error(`RegExp /i flag not allowed`);if(e.global)throw Error(`RegExp /g flag is implied`);if(e.sticky)throw Error(`RegExp /y flag is implied`);if(e.multiline)throw Error(`RegExp /m flag is implied`);return e.source}else throw Error(`Not a pattern: `+e)}function u(e,t){return e.length>t?e:Array(t-e.length+1).join(` `)+e}function d(e,t){for(var n=e.length,r=0;;){var i=e.lastIndexOf(`
|
|
3
3
|
`,n-1);if(i===-1||(r++,n=i,r===t)||n===0)break}var a=r<t?0:n+1;return e.substring(a).split(`
|
|
4
4
|
`)}function f(e){for(var t=Object.getOwnPropertyNames(e),n=[],r=0;r<t.length;r++){var a=t[r],o=e[a],s=[].concat(o);if(a===`include`){for(var c=0;c<s.length;c++)n.push({include:s[c]});continue}var l=[];s.forEach(function(e){i(e)?(l.length&&n.push(m(a,l)),n.push(m(a,e)),l=[]):l.push(e)}),l.length&&n.push(m(a,l))}return n}function p(e){for(var t=[],n=0;n<e.length;n++){var r=e[n];if(r.include){for(var i=[].concat(r.include),a=0;a<i.length;a++)t.push({include:i[a]});continue}if(!r.type)throw Error(`Rule has no type: `+JSON.stringify(r));t.push(m(r.type,r))}return t}function m(t,n){if(i(n)||(n={match:n}),n.include)throw Error(`Matching rules cannot also include states`);var a={defaultType:t,lineBreaks:!!n.error||!!n.fallback,pop:!1,next:null,push:null,error:!1,fallback:!1,value:null,type:null,shouldThrow:!1};for(var o in n)e.call(n,o)&&(a[o]=n[o]);if(typeof a.type==`string`&&t!==a.type)throw Error(`Type transform cannot be a string (type '`+a.type+`' for token '`+t+`')`);var s=a.match;return a.match=Array.isArray(s)?s:s?[s]:[],a.match.sort(function(e,t){return r(e)&&r(t)?0:r(t)?-1:r(e)?1:t.length-e.length}),a}function h(e){return Array.isArray(e)?p(e):f(e)}var g=m(`error`,{lineBreaks:!0,shouldThrow:!0});function _(e,t){for(var i=null,a=Object.create(null),u=!0,d=null,f=[],p=[],m=0;m<e.length;m++)e[m].fallback&&(u=!1);for(var m=0;m<e.length;m++){var h=e[m];if(h.include)throw Error(`Inheritance is not allowed in stateless lexers`);if(h.error||h.fallback){if(i)throw!h.fallback==!i.fallback?Error(`Multiple `+(h.fallback?`fallback`:`error`)+` rules not allowed (for token '`+h.defaultType+`')`):Error(`fallback and error are mutually exclusive (for token '`+h.defaultType+`')`);i=h}var _=h.match.slice();if(u)for(;_.length&&typeof _[0]==`string`&&_[0].length===1;){var v=_.shift();a[v.charCodeAt(0)]=h}if(h.pop||h.push||h.next){if(!t)throw Error(`State-switching options are not allowed in stateless lexers (for token '`+h.defaultType+`')`);if(h.fallback)throw Error(`State-switching options are not allowed on fallback tokens (for token '`+h.defaultType+`')`)}if(_.length!==0){u=!1,f.push(h);for(var y=0;y<_.length;y++){var b=_[y];if(r(b)){if(d===null)d=b.unicode;else if(d!==b.unicode&&h.fallback===!1)throw Error(`If one rule is /u then all must be`)}}var x=c(_.map(l)),S=new RegExp(x);if(S.test(``))throw Error(`RegExp matches empty string: `+S);if(o(x)>0)throw Error(`RegExp has capture groups: `+S+`
|
|
5
5
|
Use (?: … ) instead`);if(!h.lineBreaks&&S.test(`
|
|
6
6
|
`))throw Error(`Rule should declare lineBreaks: `+S);p.push(s(x))}}var C=i&&i.fallback,w=n&&!C?`ym`:`gm`,T=n||C?``:`|`;return d===!0&&(w+=`u`),{regexp:new RegExp(c(p)+T,w),groups:f,fast:a,error:i||g}}function v(e){return new S({start:_(h(e))},`start`)}function y(e,t,n){var r=e&&(e.push||e.next);if(r&&!n[r])throw Error(`Missing state '`+r+`' (in token '`+e.defaultType+`' of state '`+t+`')`);if(e&&e.pop&&+e.pop!=1)throw Error(`pop must be 1 (in token '`+e.defaultType+`' of state '`+t+`')`)}function b(e,t){var n=e.$all?h(e.$all):[];delete e.$all;var r=Object.getOwnPropertyNames(e);t||=r[0];for(var i=Object.create(null),a=0;a<r.length;a++){var o=r[a];i[o]=h(e[o]).concat(n)}for(var a=0;a<r.length;a++)for(var o=r[a],s=i[o],c=Object.create(null),l=0;l<s.length;l++){var u=s[l];if(u.include){var d=[l,1];if(u.include!==o&&!c[u.include]){c[u.include]=!0;var f=i[u.include];if(!f)throw Error(`Cannot include nonexistent state '`+u.include+`' (in state '`+o+`')`);for(var p=0;p<f.length;p++){var m=f[p];s.indexOf(m)===-1&&d.push(m)}}s.splice.apply(s,d),l--}}for(var g=Object.create(null),a=0;a<r.length;a++){var o=r[a];g[o]=_(i[o],!0)}for(var a=0;a<r.length;a++){for(var v=r[a],b=g[v],x=b.groups,l=0;l<x.length;l++)y(x[l],v,g);for(var C=Object.getOwnPropertyNames(b.fast),l=0;l<C.length;l++)y(b.fast[C[l]],v,g)}return new S(g,t)}function x(e){for(var t=typeof Map<`u`,n=t?new Map:Object.create(null),r=Object.getOwnPropertyNames(e),i=0;i<r.length;i++){var a=r[i],o=e[a];(Array.isArray(o)?o:[o]).forEach(function(e){if(typeof e!=`string`)throw Error(`keyword must be string (in keyword '`+a+`')`);t?n.set(e,a):n[e]=a})}return function(e){return t?n.get(e):n[e]}}var S=function(e,t){this.startState=t,this.states=e,this.buffer=``,this.stack=[],this.reset()};S.prototype.reset=function(e,t){return this.buffer=e||``,this.index=0,this.line=t?t.line:1,this.col=t?t.col:1,this.queuedToken=t?t.queuedToken:null,this.queuedText=t?t.queuedText:``,this.queuedThrow=t?t.queuedThrow:null,this.setState(t?t.state:this.startState),this.stack=t&&t.stack?t.stack.slice():[],this},S.prototype.save=function(){return{line:this.line,col:this.col,state:this.state,stack:this.stack.slice(),queuedToken:this.queuedToken,queuedText:this.queuedText,queuedThrow:this.queuedThrow}},S.prototype.setState=function(e){if(!(!e||this.state===e)){this.state=e;var t=this.states[e];this.groups=t.groups,this.error=t.error,this.re=t.regexp,this.fast=t.fast}},S.prototype.popState=function(){this.setState(this.stack.pop())},S.prototype.pushState=function(e){this.stack.push(this.state),this.setState(e)};var C=n?function(e,t){return e.exec(t)}:function(e,t){var n=e.exec(t);return n[0].length===0?null:n};S.prototype._getGroup=function(e){for(var t=this.groups.length,n=0;n<t;n++)if(e[n+1]!==void 0)return this.groups[n];throw Error(`Cannot find token type for matched text`)};function w(){return this.value}if(S.prototype.next=function(){var e=this.index;if(this.queuedGroup){var t=this._token(this.queuedGroup,this.queuedText,e);return this.queuedGroup=null,this.queuedText=``,t}var n=this.buffer;if(e!==n.length){var r=this.fast[n.charCodeAt(e)];if(r)return this._token(r,n.charAt(e),e);var i=this.re;i.lastIndex=e;var a=C(i,n),o=this.error;if(a==null)return this._token(o,n.slice(e,n.length),e);var r=this._getGroup(a),s=a[0];return o.fallback&&a.index!==e?(this.queuedGroup=r,this.queuedText=s,this._token(o,n.slice(e,a.index),e)):this._token(r,s,e)}},S.prototype._token=function(e,t,n){var r=0;if(e.lineBreaks){var i=/\n/g,a=1;if(t===`
|
|
7
7
|
`)r=1;else for(;i.exec(t);)r++,a=i.lastIndex}var o={type:typeof e.type==`function`&&e.type(t)||e.defaultType,value:typeof e.value==`function`?e.value(t):t,text:t,toString:w,offset:n,lineBreaks:r,line:this.line,col:this.col},s=t.length;if(this.index+=s,this.line+=r,r===0?this.col+=s:this.col=s-a+1,e.shouldThrow)throw Error(this.formatError(o,`invalid syntax`));return e.pop?this.popState():e.push?this.pushState(e.push):e.next&&this.setState(e.next),o},typeof Symbol<`u`&&Symbol.iterator){var T=function(e){this.lexer=e};T.prototype.next=function(){var e=this.lexer.next();return{value:e,done:!e}},T.prototype[Symbol.iterator]=function(){return this},S.prototype[Symbol.iterator]=function(){return new T(this)}}return S.prototype.formatError=function(e,t){if(e==null)var n=this.buffer.slice(this.index),e={text:n,offset:this.index,lineBreaks:n.indexOf(`
|
|
8
8
|
`)===-1?0:1,line:this.line,col:this.col};var r=2,i=Math.max(e.line-r,1),a=e.line+r,o=String(a).length,s=d(this.buffer,this.line-e.line+r+1).slice(0,5),c=[];c.push(t+` at line `+e.line+` col `+e.col+`:`),c.push(``);for(var l=0;l<s.length;l++){var f=s[l],p=i+l;c.push(u(String(p),o)+` `+f),p===e.line&&c.push(u(``,o+e.col+1)+`^`)}return c.join(`
|
|
9
|
-
`)},S.prototype.clone=function(){return new S(this.states,this.state)},S.prototype.has=function(e){return!0},{compile:v,states:b,error:Object.freeze({error:!0}),fallback:Object.freeze({fallback:!0}),keywords:x}})}))(),1),P=N.default.compile({WhiteSpace:{match:/[\t\v\f\ufeff\p{Zs}]+/u,lineBreaks:!0},Lines:{match:/\r?\n|[\r\u2028\u2029]/u,lineBreaks:!0},ObjectKey:/\[?(?:\x23)?(?=[$_\p{ID_Start}\\])(?:[$_\u200C\u200D\p{ID_Continue}]|\\u[\da-fA-F]{4}|\\u\{[\da-fA-F]+\})+\]?(?=:)/u,Punctuator:/--|\+\+|=>|\.{3}|\??\.(?!\d)|(?:&&|\|\||\?\?|[+\-%&|^]|\*{1,2}|<{1,2}|>{1,3}|!=?|={1,2}|\/(?![/*]))=?|[?~,:;[\](){}]/u,BooleanLiteral:/true|false/u,NumericLiteral:/(?:0[xX][\da-fA-F](?:_?[\da-fA-F])*|0[oO][0-7](?:_?[0-7])*|0[bB][01](?:_?[01])*)n?|0n|[1-9](?:_?\d)*n|(?:(?:0(?!\d)|0\d*[89]\d*|[1-9](?:_?\d)*)(?:\.(?:\d(?:_?\d)*)?)?|\.\d(?:_?\d)*)(?:[eE][+-]?\d(?:_?\d)*)?|0[0-7]+/u,StringLiteral:{match:/(?:'(?:(?!')[^\\\n\r]|\\(?:\r\n|[^]))*')|(?:"(?:(?!")[^\\\n\r]|\\(?:\r\n|[^]))*")/u,value:e=>`"${e.slice(1,-1)}"`},Identifier:/(?:\x23)?(?=[$_\p{ID_Start}\\])(?:[$_\u200C\u200D\p{ID_Continue}]|\\u[\da-fA-F]{4}|\\u\{[\da-fA-F]+\})+/u});function F(e,t={}){let n=e.trim().replace(/[,]+$/,``);if(n===``)return`{}`;if(!I(n))throw TypeError(`Unexpected input format`);let r=``;P.reset(n);for(let e of P)if(!(e.type===`WhiteSpace`||e.type===`Lines`)){switch(e.type){case`Identifier`:e.value=`"${t[e.value]||e.value}"`;break;case`ObjectKey`:e.value.slice(0,1)===`[`&&e.value.slice(-1)===`]`?e.value=`"${t[e.value.slice(1,-1)]||e.value.slice(1,-1)}"`:e.value=`"${e.value}"`;break}r+=e.value}return r.replace(/,([}\]])/g,`$1`)}function I(e){return e.startsWith(`{`)&&e.endsWith(`}`)||e.startsWith(`[`)&&e.endsWith(`]`)}var L=/[ \t\v\f\ufeff]+/,R=/(?:(?![\s\x00\x22\x27\x3E\x2F\x3D\x00-\x1F\x7F-\x9F])[^\s\x00-\x1F\x7F-\x9F\x22\x27\x3E\x2F\x3D])+/,z=/[.#](?:(?!-?\d)(?:[a-zA-Z0-9\xA0-\uFFFF_-])+)/,B=RegExp(`(?<==)(?:true|false)`),V=RegExp(`(?<==)-?(?:(?:0[xX][\\da-fA-F](?:_?[\\da-fA-F])*|0[oO][0-7](?:_?[0-7])*|0[bB][01](?:_?[01])*)n?|-?0n|-?[1-9](?:_?\\d)*n|(?:(?:0(?!\\d)|0\\d*[89]\\d*|[1-9](?:_?\\d)*)(?:\\.(?:\\d(?:_?\\d)*)?)?|\\.\\d(?:_?\\d)*)(?:[eE][+-]?\\d(?:_?\\d)*)?|-?0[0-7]+)`),H=RegExp(`(?<==)'(?!.*&[0-9a-zA-Z]+;)[^'\\\\]*(?:\\\\.|\\\\n[^"\\\\]*|&[^0-9a-zA-Z;]*)*'`),U=RegExp(`(?<==)"(?!.*&[0-9a-zA-Z]+;)[^"\\\\]*(?:\\\\.|\\\\n[^"\\\\]*|&[^0-9a-zA-Z;]*)*"`),W=RegExp(`(?<==)[^"\\s'\`=<>\\x00]+`);function G(e){let t=typeof e==`string`&&/^(['"]).*?\1$/.test(e)?e.slice(1,-1):e;return t.startsWith(`[`)&&t.endsWith(`]`)||t.startsWith(`{`)&&t.endsWith(`}`)?JSON.parse(F(t)):t}function K(e){let t=``;for(let n in e){let r=e[n];switch(typeof r){case`object`:t+=` ${n}='${JSON.stringify(r)}'`;break;case`string`:t+=` ${n}="${r}"`;break;case`number`:case`boolean`:t+=` ${n}=${r}`;break}}return t.slice(1)}var q=N.default.states({main:{WhiteSpace:L,AttributeShorthand:z,BooleanLiteral:{match:B,value(e){return e===`true`}},NumericLiteral:{match:V,value(e){let t=Number(e);return Number.isNaN(t)?Number(e.replace(/_|n$/g,``)):Number(e)}},SingleQuotedValue:{match:H,value:G,type:()=>`StringLiteral`},DoubleQuotedLiteral:{match:U,value:G,type:()=>`StringLiteral`},UnquotedLiteral:{match:W,value:G,type:()=>`StringLiteral`},AttributeName:R,Separator:`=`}});function J(e){let t=null,n=q.reset(e),r={};Object.defineProperties(r,{toString:{writable:!1,enumerable:!1,configurable:!1,value:()=>K(r)},getTokens:{writable:!1,enumerable:!1,configurable:!1,value:()=>Array.from(q.reset(e))}});let i=[];for(let{type:e,value:a}of n)switch(e){case`AttributeName`:t=a,r[t]=t;break;case`AttributeShorthand`:a[0]===`.`?i.push(a.slice(1)):a[0]===`#`&&(r.id=a.slice(1));break;case`BooleanLiteral`:case`NumericLiteral`:case`StringLiteral`:t&&=(t===`class`&&i.push(a),r[t]=a,null);break}return i.length&&(r.class=i.join(` `)),r}function Y(){e.markdownPipeline.remark(`markee-diagrams`,function(){return t=>{let
|
|
9
|
+
`)},S.prototype.clone=function(){return new S(this.states,this.state)},S.prototype.has=function(e){return!0},{compile:v,states:b,error:Object.freeze({error:!0}),fallback:Object.freeze({fallback:!0}),keywords:x}})}))(),1),P=N.default.compile({WhiteSpace:{match:/[\t\v\f\ufeff\p{Zs}]+/u,lineBreaks:!0},Lines:{match:/\r?\n|[\r\u2028\u2029]/u,lineBreaks:!0},ObjectKey:/\[?(?:\x23)?(?=[$_\p{ID_Start}\\])(?:[$_\u200C\u200D\p{ID_Continue}]|\\u[\da-fA-F]{4}|\\u\{[\da-fA-F]+\})+\]?(?=:)/u,Punctuator:/--|\+\+|=>|\.{3}|\??\.(?!\d)|(?:&&|\|\||\?\?|[+\-%&|^]|\*{1,2}|<{1,2}|>{1,3}|!=?|={1,2}|\/(?![/*]))=?|[?~,:;[\](){}]/u,BooleanLiteral:/true|false/u,NumericLiteral:/(?:0[xX][\da-fA-F](?:_?[\da-fA-F])*|0[oO][0-7](?:_?[0-7])*|0[bB][01](?:_?[01])*)n?|0n|[1-9](?:_?\d)*n|(?:(?:0(?!\d)|0\d*[89]\d*|[1-9](?:_?\d)*)(?:\.(?:\d(?:_?\d)*)?)?|\.\d(?:_?\d)*)(?:[eE][+-]?\d(?:_?\d)*)?|0[0-7]+/u,StringLiteral:{match:/(?:'(?:(?!')[^\\\n\r]|\\(?:\r\n|[^]))*')|(?:"(?:(?!")[^\\\n\r]|\\(?:\r\n|[^]))*")/u,value:e=>`"${e.slice(1,-1)}"`},Identifier:/(?:\x23)?(?=[$_\p{ID_Start}\\])(?:[$_\u200C\u200D\p{ID_Continue}]|\\u[\da-fA-F]{4}|\\u\{[\da-fA-F]+\})+/u});function F(e,t={}){let n=e.trim().replace(/[,]+$/,``);if(n===``)return`{}`;if(!I(n))throw TypeError(`Unexpected input format`);let r=``;P.reset(n);for(let e of P)if(!(e.type===`WhiteSpace`||e.type===`Lines`)){switch(e.type){case`Identifier`:e.value=`"${t[e.value]||e.value}"`;break;case`ObjectKey`:e.value.slice(0,1)===`[`&&e.value.slice(-1)===`]`?e.value=`"${t[e.value.slice(1,-1)]||e.value.slice(1,-1)}"`:e.value=`"${e.value}"`;break}r+=e.value}return r.replace(/,([}\]])/g,`$1`)}function I(e){return e.startsWith(`{`)&&e.endsWith(`}`)||e.startsWith(`[`)&&e.endsWith(`]`)}var L=/[ \t\v\f\ufeff]+/,R=/(?:(?![\s\x00\x22\x27\x3E\x2F\x3D\x00-\x1F\x7F-\x9F])[^\s\x00-\x1F\x7F-\x9F\x22\x27\x3E\x2F\x3D])+/,z=/[.#](?:(?!-?\d)(?:[a-zA-Z0-9\xA0-\uFFFF_-])+)/,B=RegExp(`(?<==)(?:true|false)`),V=RegExp(`(?<==)-?(?:(?:0[xX][\\da-fA-F](?:_?[\\da-fA-F])*|0[oO][0-7](?:_?[0-7])*|0[bB][01](?:_?[01])*)n?|-?0n|-?[1-9](?:_?\\d)*n|(?:(?:0(?!\\d)|0\\d*[89]\\d*|[1-9](?:_?\\d)*)(?:\\.(?:\\d(?:_?\\d)*)?)?|\\.\\d(?:_?\\d)*)(?:[eE][+-]?\\d(?:_?\\d)*)?|-?0[0-7]+)`),H=RegExp(`(?<==)'(?!.*&[0-9a-zA-Z]+;)[^'\\\\]*(?:\\\\.|\\\\n[^"\\\\]*|&[^0-9a-zA-Z;]*)*'`),U=RegExp(`(?<==)"(?!.*&[0-9a-zA-Z]+;)[^"\\\\]*(?:\\\\.|\\\\n[^"\\\\]*|&[^0-9a-zA-Z;]*)*"`),W=RegExp(`(?<==)[^"\\s'\`=<>\\x00]+`);function G(e){let t=typeof e==`string`&&/^(['"]).*?\1$/.test(e)?e.slice(1,-1):e;return t.startsWith(`[`)&&t.endsWith(`]`)||t.startsWith(`{`)&&t.endsWith(`}`)?JSON.parse(F(t)):t}function K(e){let t=``;for(let n in e){let r=e[n];switch(typeof r){case`object`:t+=` ${n}='${JSON.stringify(r)}'`;break;case`string`:t+=` ${n}="${r}"`;break;case`number`:case`boolean`:t+=` ${n}=${r}`;break}}return t.slice(1)}var q=N.default.states({main:{WhiteSpace:L,AttributeShorthand:z,BooleanLiteral:{match:B,value(e){return e===`true`}},NumericLiteral:{match:V,value(e){let t=Number(e);return Number.isNaN(t)?Number(e.replace(/_|n$/g,``)):Number(e)}},SingleQuotedValue:{match:H,value:G,type:()=>`StringLiteral`},DoubleQuotedLiteral:{match:U,value:G,type:()=>`StringLiteral`},UnquotedLiteral:{match:W,value:G,type:()=>`StringLiteral`},AttributeName:R,Separator:`=`}});function J(e){let t=null,n=q.reset(e),r={};Object.defineProperties(r,{toString:{writable:!1,enumerable:!1,configurable:!1,value:()=>K(r)},getTokens:{writable:!1,enumerable:!1,configurable:!1,value:()=>Array.from(q.reset(e))}});let i=[];for(let{type:e,value:a}of n)switch(e){case`AttributeName`:t=a,r[t]=t;break;case`AttributeShorthand`:a[0]===`.`?i.push(a.slice(1)):a[0]===`#`&&(r.id=a.slice(1));break;case`BooleanLiteral`:case`NumericLiteral`:case`StringLiteral`:t&&=(t===`class`&&i.push(a),r[t]=a,null);break}return i.length&&(r.class=i.join(` `)),r}function Y(){e.markdownPipeline.remark(`markee-diagrams`,function(){return t=>{let{pluginConfig:n}=this.data(),r=n(`lightbox`),i=typeof r==`boolean`?r:r?.enabled??!0,a=0;e.markdownPipeline.visit(t,`code`,(e,t,n)=>{let r=e.lang?.trim()?.toLowerCase();if(!n||t===void 0||r!==`mermaid`&&r!==`dbml`||(e.meta??``).trim().startsWith(`kroki`))return;let o=m(e.value??``),s=J(e.meta??``),c=e.data?.hProperties?.id,l=v(s,`id`),u=x(s,`skip-lightbox`)||x(s,`off-glb`),d=x(s,`force-lightbox`)||x(s,`on-glb`),f=b(s,`lightbox`,i);u?f=!1:d&&(f=!0);let p=(c?String(c):l)||`markee-diagram-${a++}`,h=[r,`diagram`,...y(s).filter(e=>e!==r)].join(` `),_=`<markee-diagram id="${g(p)}" class="${g(h)}" data-kind="${r}" data-source="${o}"></markee-diagram>`,S=`<a class='glightbox' href='#' data-content='${`<markee-diagram class="${g(h)}" data-kind="${r}" data-source="${o}"></markee-diagram>`.replaceAll(`'`,`'`)}' data-width='100vw' data-height='auto' data-draggable='false'>${_}</a>`;n.children.splice(t,1,{type:`html`,value:f?S:_})})}})}M(),Y();export{d as a,l as i,c as n,p as o,s as r,f as s,T as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@layer markee-extension{markee-diagram{margin:1.2rem 0;display:block}a.glightbox>markee-diagram{position:relative}a.glightbox>markee-diagram:after{content:"";z-index:1;cursor:pointer;background:0 0;position:absolute;inset:0}.ginlined-content.diagram{text-align:center;min-width:100vw;padding:1rem 6rem}markee-diagram .markee-diagram-status,markee-diagram .markee-diagram-error{border:1px solid var(--mk-color-border,oklch(88.5% 0 0));background:var(--mk-color-background,oklch(98.5% 0 0));color:var(--mk-color-text,oklch(32% 0 0));border-radius:.5rem;padding:.75rem .9rem}markee-diagram .markee-diagram-status{font-style:italic}markee-diagram .markee-diagram-error{border-inline-start:.25rem solid var(--mk-admonition-color-danger)}markee-diagram .markee-diagram-error pre{white-space:pre-wrap;margin:.6rem 0 0;font-size:.875rem;overflow:auto}markee-diagram .markee-diagram-mermaid,markee-diagram .markee-diagram-dbml{overflow-x:auto}markee-diagram .markee-diagram-mermaid>svg,markee-diagram .markee-diagram-dbml>svg{max-width:100%;height:auto;margin:0 auto;display:block}markee-diagram .markee-diagram-dbml,markee-diagram .markee-diagram-dbml *{pointer-events:none!important}[data-color-scheme=dark] markee-diagram{filter:invert(88%)hue-rotate(180deg)}}
|
package/package.json
CHANGED
|
@@ -1,23 +1,32 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@markee/diagrams",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Markee Mermaid and DBML diagram support",
|
|
5
5
|
"license": "MIT",
|
|
6
|
+
"repository": "https://github.com/markeejs/markee",
|
|
6
7
|
"main": "extension.yaml",
|
|
7
8
|
"publishConfig": {
|
|
8
9
|
"access": "public"
|
|
9
10
|
},
|
|
11
|
+
"dependencies": {
|
|
12
|
+
"@markee/pipeline": "0.3.0"
|
|
13
|
+
},
|
|
10
14
|
"devDependencies": {
|
|
11
|
-
"@markee/
|
|
15
|
+
"@markee/tsconfig": "0.1.0",
|
|
16
|
+
"@markee/vite": "0.3.0",
|
|
17
|
+
"@markee/vitest": "0.1.0",
|
|
12
18
|
"@softwaretechnik/dbml-renderer": "^1.0.31",
|
|
13
19
|
"attributes-parser": "^2.2.3",
|
|
14
20
|
"d3-graphviz": "^5.6.0",
|
|
15
21
|
"d3-selection": "^3.0.0",
|
|
22
|
+
"jsdom": "^29.0.0",
|
|
16
23
|
"mermaid": "^11.13.0",
|
|
17
|
-
"vite": "^8.0.0"
|
|
24
|
+
"vite": "^8.0.0",
|
|
25
|
+
"vitest": "^3.2.4"
|
|
18
26
|
},
|
|
19
27
|
"scripts": {
|
|
20
28
|
"build": "vite build",
|
|
21
|
-
"lint:tsc": "tsc --noEmit"
|
|
29
|
+
"lint:tsc": "tsc --noEmit",
|
|
30
|
+
"test": "vitest run --coverage"
|
|
22
31
|
}
|
|
23
32
|
}
|
|
@@ -0,0 +1,319 @@
|
|
|
1
|
+
import { describe, expect, it, vi } from 'vitest'
|
|
2
|
+
|
|
3
|
+
import { encodeText } from './helpers.js'
|
|
4
|
+
|
|
5
|
+
const runtime = vi.hoisted(() => ({
|
|
6
|
+
loadMermaid: vi.fn(),
|
|
7
|
+
loadDiagramRuntime: vi.fn(),
|
|
8
|
+
}))
|
|
9
|
+
|
|
10
|
+
vi.mock('./runtime.js', () => ({
|
|
11
|
+
loadMermaid: runtime.loadMermaid,
|
|
12
|
+
loadDiagramRuntime: runtime.loadDiagramRuntime,
|
|
13
|
+
}))
|
|
14
|
+
|
|
15
|
+
let elementImport: Promise<void> | null = null
|
|
16
|
+
|
|
17
|
+
async function ensureElementImported() {
|
|
18
|
+
elementImport ??= import('./element.js').then(
|
|
19
|
+
({ registerDiagramElement }) => {
|
|
20
|
+
registerDiagramElement()
|
|
21
|
+
},
|
|
22
|
+
)
|
|
23
|
+
await elementImport
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function createDeferred<T>() {
|
|
27
|
+
let resolve!: (value: T) => void
|
|
28
|
+
let reject!: (reason?: unknown) => void
|
|
29
|
+
const promise = new Promise<T>((res, rej) => {
|
|
30
|
+
resolve = res
|
|
31
|
+
reject = rej
|
|
32
|
+
})
|
|
33
|
+
return { promise, resolve, reject }
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
async function flushAsyncWork(iterations = 6) {
|
|
37
|
+
for (let index = 0; index < iterations; index++) {
|
|
38
|
+
await Promise.resolve()
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function createDiagram(dataset: Record<string, string>) {
|
|
43
|
+
const element = document.createElement('markee-diagram') as HTMLElement & {
|
|
44
|
+
connectedCallback(): void
|
|
45
|
+
disconnectedCallback(): void
|
|
46
|
+
}
|
|
47
|
+
Object.assign(element.dataset, dataset)
|
|
48
|
+
return element
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
describe('@markee/diagrams element', () => {
|
|
52
|
+
it('loads the custom element definition and handles basic input errors', async () => {
|
|
53
|
+
runtime.loadMermaid.mockReset()
|
|
54
|
+
runtime.loadDiagramRuntime.mockReset()
|
|
55
|
+
await ensureElementImported()
|
|
56
|
+
|
|
57
|
+
expect(
|
|
58
|
+
window.customElements.get('markee-diagram') as CustomElementConstructor,
|
|
59
|
+
).toBeDefined()
|
|
60
|
+
|
|
61
|
+
const unsupported = createDiagram({ source: encodeText('graph TD;A-->B') })
|
|
62
|
+
document.body.append(unsupported)
|
|
63
|
+
await flushAsyncWork()
|
|
64
|
+
expect(unsupported.textContent).toContain('Unsupported diagram type.')
|
|
65
|
+
|
|
66
|
+
const missingSource = createDiagram({ kind: 'mermaid' })
|
|
67
|
+
document.body.append(missingSource)
|
|
68
|
+
await flushAsyncWork()
|
|
69
|
+
expect(missingSource.textContent).toContain('Missing diagram source.')
|
|
70
|
+
|
|
71
|
+
const invalidSource = createDiagram({ kind: 'dbml', source: '%' })
|
|
72
|
+
document.body.append(invalidSource)
|
|
73
|
+
await flushAsyncWork()
|
|
74
|
+
expect(invalidSource.textContent).toContain(
|
|
75
|
+
'Could not decode diagram source.',
|
|
76
|
+
)
|
|
77
|
+
})
|
|
78
|
+
|
|
79
|
+
it('renders mermaid diagrams with and without bind hooks', async () => {
|
|
80
|
+
runtime.loadMermaid.mockReset()
|
|
81
|
+
runtime.loadDiagramRuntime.mockReset()
|
|
82
|
+
|
|
83
|
+
const bindFunctions = vi.fn()
|
|
84
|
+
const firstRender = vi.fn().mockResolvedValue({
|
|
85
|
+
svg: '<svg>first</svg>',
|
|
86
|
+
bindFunctions,
|
|
87
|
+
})
|
|
88
|
+
const secondRender = vi.fn().mockResolvedValue({
|
|
89
|
+
svg: '<svg>second</svg>',
|
|
90
|
+
})
|
|
91
|
+
|
|
92
|
+
runtime.loadMermaid
|
|
93
|
+
.mockResolvedValueOnce({ render: firstRender })
|
|
94
|
+
.mockResolvedValueOnce({ render: secondRender })
|
|
95
|
+
|
|
96
|
+
await ensureElementImported()
|
|
97
|
+
|
|
98
|
+
const first = createDiagram({
|
|
99
|
+
kind: 'mermaid',
|
|
100
|
+
source: encodeText('graph TD;A-->B'),
|
|
101
|
+
})
|
|
102
|
+
document.body.append(first)
|
|
103
|
+
await flushAsyncWork()
|
|
104
|
+
|
|
105
|
+
expect(first.innerHTML).toContain('<svg>first</svg>')
|
|
106
|
+
expect(bindFunctions).toHaveBeenCalledWith(
|
|
107
|
+
first.querySelector('.markee-diagram-mermaid'),
|
|
108
|
+
)
|
|
109
|
+
|
|
110
|
+
const second = createDiagram({
|
|
111
|
+
kind: 'mermaid',
|
|
112
|
+
source: encodeText('graph LR;A-->B'),
|
|
113
|
+
})
|
|
114
|
+
document.body.append(second)
|
|
115
|
+
await flushAsyncWork()
|
|
116
|
+
|
|
117
|
+
expect(second.innerHTML).toContain('<svg>second</svg>')
|
|
118
|
+
})
|
|
119
|
+
|
|
120
|
+
it('stops stale mermaid work before and after async rendering and reports failures', async () => {
|
|
121
|
+
runtime.loadMermaid.mockReset()
|
|
122
|
+
runtime.loadDiagramRuntime.mockReset()
|
|
123
|
+
|
|
124
|
+
const beforeLoad = createDeferred<{ render: ReturnType<typeof vi.fn> }>()
|
|
125
|
+
const renderBeforeLoad = vi.fn()
|
|
126
|
+
const afterRender = createDeferred<{
|
|
127
|
+
svg: string
|
|
128
|
+
bindFunctions?: Function
|
|
129
|
+
}>()
|
|
130
|
+
const renderAfterLoad = vi.fn(() => afterRender.promise)
|
|
131
|
+
const renderFailure = vi.fn().mockRejectedValue(new Error('boom'))
|
|
132
|
+
|
|
133
|
+
runtime.loadMermaid
|
|
134
|
+
.mockReturnValueOnce(beforeLoad.promise)
|
|
135
|
+
.mockResolvedValueOnce({ render: renderAfterLoad })
|
|
136
|
+
.mockResolvedValueOnce({ render: renderFailure })
|
|
137
|
+
|
|
138
|
+
await ensureElementImported()
|
|
139
|
+
|
|
140
|
+
const staleBeforeLoad = createDiagram({
|
|
141
|
+
kind: 'mermaid',
|
|
142
|
+
source: encodeText('graph TD;A-->B'),
|
|
143
|
+
})
|
|
144
|
+
document.body.append(staleBeforeLoad)
|
|
145
|
+
staleBeforeLoad.disconnectedCallback()
|
|
146
|
+
beforeLoad.resolve({ render: renderBeforeLoad })
|
|
147
|
+
await flushAsyncWork()
|
|
148
|
+
|
|
149
|
+
expect(renderBeforeLoad).not.toHaveBeenCalled()
|
|
150
|
+
|
|
151
|
+
const staleAfterRender = createDiagram({
|
|
152
|
+
kind: 'mermaid',
|
|
153
|
+
source: encodeText('graph TD;B-->C'),
|
|
154
|
+
})
|
|
155
|
+
document.body.append(staleAfterRender)
|
|
156
|
+
await flushAsyncWork(3)
|
|
157
|
+
staleAfterRender.disconnectedCallback()
|
|
158
|
+
afterRender.resolve({ svg: '<svg>late</svg>' })
|
|
159
|
+
await flushAsyncWork()
|
|
160
|
+
|
|
161
|
+
expect(staleAfterRender.innerHTML).not.toContain('late')
|
|
162
|
+
|
|
163
|
+
const failure = createDiagram({
|
|
164
|
+
kind: 'mermaid',
|
|
165
|
+
source: encodeText('graph TD;C-->D'),
|
|
166
|
+
})
|
|
167
|
+
document.body.append(failure)
|
|
168
|
+
await flushAsyncWork()
|
|
169
|
+
|
|
170
|
+
expect(failure.textContent).toContain('MERMAID rendering failed.')
|
|
171
|
+
expect(failure.textContent).toContain('boom')
|
|
172
|
+
})
|
|
173
|
+
|
|
174
|
+
it('renders dbml diagrams, rerenders with cleanup, and reports empty output', async () => {
|
|
175
|
+
runtime.loadMermaid.mockReset()
|
|
176
|
+
runtime.loadDiagramRuntime.mockReset()
|
|
177
|
+
|
|
178
|
+
const destroy = vi.fn()
|
|
179
|
+
const onerror = vi.fn()
|
|
180
|
+
const renderDot = vi.fn((_dot: string, done: () => void) => done())
|
|
181
|
+
const graphviz = { onerror, renderDot, destroy }
|
|
182
|
+
const graphvizFactory = vi.fn(() => graphviz)
|
|
183
|
+
const select = vi.fn(() => ({ graphviz: graphvizFactory }))
|
|
184
|
+
|
|
185
|
+
runtime.loadDiagramRuntime
|
|
186
|
+
.mockResolvedValueOnce({
|
|
187
|
+
dbmlRun: vi.fn(() => 'digraph { a -> b }'),
|
|
188
|
+
select,
|
|
189
|
+
})
|
|
190
|
+
.mockResolvedValueOnce({
|
|
191
|
+
dbmlRun: vi.fn(() => 'digraph { a -> c }'),
|
|
192
|
+
select,
|
|
193
|
+
})
|
|
194
|
+
.mockResolvedValueOnce({
|
|
195
|
+
dbmlRun: vi.fn(() => ' '),
|
|
196
|
+
select: vi.fn(),
|
|
197
|
+
})
|
|
198
|
+
|
|
199
|
+
await ensureElementImported()
|
|
200
|
+
|
|
201
|
+
const element = createDiagram({
|
|
202
|
+
kind: 'dbml',
|
|
203
|
+
source: encodeText('Table users {}'),
|
|
204
|
+
})
|
|
205
|
+
document.body.append(element)
|
|
206
|
+
await flushAsyncWork()
|
|
207
|
+
|
|
208
|
+
expect(element.querySelector('.markee-diagram-dbml')).not.toBeNull()
|
|
209
|
+
expect(select).toHaveBeenCalled()
|
|
210
|
+
expect(onerror).toHaveBeenCalled()
|
|
211
|
+
|
|
212
|
+
element.connectedCallback()
|
|
213
|
+
await flushAsyncWork()
|
|
214
|
+
expect(destroy).toHaveBeenCalled()
|
|
215
|
+
|
|
216
|
+
const empty = createDiagram({
|
|
217
|
+
kind: 'dbml',
|
|
218
|
+
source: encodeText('Table posts {}'),
|
|
219
|
+
})
|
|
220
|
+
document.body.append(empty)
|
|
221
|
+
await flushAsyncWork()
|
|
222
|
+
|
|
223
|
+
expect(empty.textContent).toContain(
|
|
224
|
+
'DBML rendering produced an empty graph.',
|
|
225
|
+
)
|
|
226
|
+
})
|
|
227
|
+
|
|
228
|
+
it('handles stale dbml work and graphviz failures', async () => {
|
|
229
|
+
runtime.loadMermaid.mockReset()
|
|
230
|
+
runtime.loadDiagramRuntime.mockReset()
|
|
231
|
+
|
|
232
|
+
const beforeRuntime = createDeferred<{
|
|
233
|
+
dbmlRun: ReturnType<typeof vi.fn>
|
|
234
|
+
select: ReturnType<typeof vi.fn>
|
|
235
|
+
}>()
|
|
236
|
+
const dbmlRun = vi.fn(() => 'digraph { a -> b }')
|
|
237
|
+
const afterRenderDone = createDeferred<void>()
|
|
238
|
+
const destroy = vi.fn()
|
|
239
|
+
const lateGraphviz = {
|
|
240
|
+
onerror: vi.fn(),
|
|
241
|
+
renderDot: vi.fn((_dot: string, done: () => void) => {
|
|
242
|
+
afterRenderDone.promise.then(done)
|
|
243
|
+
}),
|
|
244
|
+
destroy,
|
|
245
|
+
}
|
|
246
|
+
const selectLate = vi.fn(() => ({
|
|
247
|
+
graphviz: vi.fn(() => lateGraphviz),
|
|
248
|
+
}))
|
|
249
|
+
const errorGraphviz = {
|
|
250
|
+
onerror(handler: (message: string) => void) {
|
|
251
|
+
handler('bad graph')
|
|
252
|
+
},
|
|
253
|
+
renderDot: vi.fn(),
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
runtime.loadDiagramRuntime
|
|
257
|
+
.mockReturnValueOnce(beforeRuntime.promise)
|
|
258
|
+
.mockResolvedValueOnce({
|
|
259
|
+
dbmlRun: vi.fn(() => 'digraph { b -> c }'),
|
|
260
|
+
select: selectLate,
|
|
261
|
+
})
|
|
262
|
+
.mockResolvedValueOnce({
|
|
263
|
+
dbmlRun: vi.fn(() => 'digraph { c -> d }'),
|
|
264
|
+
select: vi.fn(() => ({
|
|
265
|
+
graphviz: vi.fn(() => errorGraphviz),
|
|
266
|
+
})),
|
|
267
|
+
})
|
|
268
|
+
.mockResolvedValueOnce({
|
|
269
|
+
dbmlRun,
|
|
270
|
+
select: vi.fn(() => {
|
|
271
|
+
throw new Error('select failed')
|
|
272
|
+
}),
|
|
273
|
+
})
|
|
274
|
+
|
|
275
|
+
await ensureElementImported()
|
|
276
|
+
|
|
277
|
+
const staleBeforeRuntime = createDiagram({
|
|
278
|
+
kind: 'dbml',
|
|
279
|
+
source: encodeText('Table stale {}'),
|
|
280
|
+
})
|
|
281
|
+
document.body.append(staleBeforeRuntime)
|
|
282
|
+
staleBeforeRuntime.disconnectedCallback()
|
|
283
|
+
beforeRuntime.resolve({ dbmlRun, select: vi.fn() })
|
|
284
|
+
await flushAsyncWork()
|
|
285
|
+
expect(dbmlRun).not.toHaveBeenCalled()
|
|
286
|
+
|
|
287
|
+
const staleAfterRender = createDiagram({
|
|
288
|
+
kind: 'dbml',
|
|
289
|
+
source: encodeText('Table late {}'),
|
|
290
|
+
})
|
|
291
|
+
document.body.append(staleAfterRender)
|
|
292
|
+
await flushAsyncWork(3)
|
|
293
|
+
staleAfterRender.disconnectedCallback()
|
|
294
|
+
afterRenderDone.resolve()
|
|
295
|
+
await flushAsyncWork()
|
|
296
|
+
|
|
297
|
+
expect(destroy).toHaveBeenCalled()
|
|
298
|
+
expect(staleAfterRender.textContent).not.toContain('Diagram error')
|
|
299
|
+
|
|
300
|
+
const graphvizFailure = createDiagram({
|
|
301
|
+
kind: 'dbml',
|
|
302
|
+
source: encodeText('Table broken {}'),
|
|
303
|
+
})
|
|
304
|
+
document.body.append(graphvizFailure)
|
|
305
|
+
await flushAsyncWork()
|
|
306
|
+
|
|
307
|
+
expect(graphvizFailure.textContent).toContain('DBML rendering failed.')
|
|
308
|
+
expect(graphvizFailure.textContent).toContain('bad graph')
|
|
309
|
+
|
|
310
|
+
const selectFailure = createDiagram({
|
|
311
|
+
kind: 'dbml',
|
|
312
|
+
source: encodeText('Table explode {}'),
|
|
313
|
+
})
|
|
314
|
+
document.body.append(selectFailure)
|
|
315
|
+
await flushAsyncWork()
|
|
316
|
+
|
|
317
|
+
expect(selectFailure.textContent).toContain('select failed')
|
|
318
|
+
})
|
|
319
|
+
})
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest'
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
decodeText,
|
|
5
|
+
encodeText,
|
|
6
|
+
escapeHtml,
|
|
7
|
+
getBooleanFromMeta,
|
|
8
|
+
getClassList,
|
|
9
|
+
getStringFromMeta,
|
|
10
|
+
hasClass,
|
|
11
|
+
toErrorMessage,
|
|
12
|
+
} from './helpers.js'
|
|
13
|
+
|
|
14
|
+
describe('@markee/diagrams helpers', () => {
|
|
15
|
+
it('encodes and decodes text values', () => {
|
|
16
|
+
const encoded = encodeText('héllo <diagram>')
|
|
17
|
+
expect(decodeText(encoded)).toBe('héllo <diagram>')
|
|
18
|
+
})
|
|
19
|
+
|
|
20
|
+
it('formats errors and escapes html', () => {
|
|
21
|
+
expect(escapeHtml('&<>"')).toBe('&<>"')
|
|
22
|
+
expect(toErrorMessage(new Error('boom'))).toBe('boom')
|
|
23
|
+
expect(toErrorMessage('oops')).toBe('oops')
|
|
24
|
+
expect(toErrorMessage({})).toBe('Unknown error')
|
|
25
|
+
})
|
|
26
|
+
|
|
27
|
+
it('reads metadata strings, classes, booleans, and class presence', () => {
|
|
28
|
+
const meta = {
|
|
29
|
+
class: 'one two on-glb',
|
|
30
|
+
truthy: 'yes',
|
|
31
|
+
falsy: 'off',
|
|
32
|
+
num: 3,
|
|
33
|
+
invalid: {},
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
expect(getStringFromMeta(meta, 'class')).toBe('one two on-glb')
|
|
37
|
+
expect(getStringFromMeta(meta, 'num')).toBe('3')
|
|
38
|
+
expect(getStringFromMeta(meta, 'missing')).toBe('')
|
|
39
|
+
expect(getStringFromMeta(meta, 'invalid')).toBe('')
|
|
40
|
+
expect(getClassList(meta)).toEqual(['one', 'two', 'on-glb'])
|
|
41
|
+
expect(getClassList({})).toEqual([])
|
|
42
|
+
expect(getBooleanFromMeta(meta, 'truthy')).toBe(true)
|
|
43
|
+
expect(getBooleanFromMeta({ enabled: 'enabled' }, 'enabled')).toBe(true)
|
|
44
|
+
expect(getBooleanFromMeta({ disabled: '0' }, 'disabled', true)).toBe(false)
|
|
45
|
+
expect(getBooleanFromMeta(meta, 'falsy', true)).toBe(false)
|
|
46
|
+
expect(getBooleanFromMeta({ maybe: 'unknown' }, 'maybe', true)).toBe(true)
|
|
47
|
+
expect(hasClass(meta, 'two')).toBe(true)
|
|
48
|
+
expect(hasClass(meta, 'missing')).toBe(false)
|
|
49
|
+
expect(hasClass({ class: true }, 'two')).toBe(false)
|
|
50
|
+
})
|
|
51
|
+
})
|
package/src/index.css
CHANGED
|
@@ -25,10 +25,10 @@
|
|
|
25
25
|
|
|
26
26
|
markee-diagram .markee-diagram-status,
|
|
27
27
|
markee-diagram .markee-diagram-error {
|
|
28
|
-
border: 1px solid var(--mk-color-border,
|
|
28
|
+
border: 1px solid var(--mk-color-border, oklch(88.5% 0 0));
|
|
29
29
|
border-radius: 0.5rem;
|
|
30
|
-
background: var(--mk-color-background,
|
|
31
|
-
color: var(--mk-color-text,
|
|
30
|
+
background: var(--mk-color-background, oklch(98.5% 0 0));
|
|
31
|
+
color: var(--mk-color-text, oklch(32% 0 0));
|
|
32
32
|
padding: 0.75rem 0.9rem;
|
|
33
33
|
}
|
|
34
34
|
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
}
|
|
38
38
|
|
|
39
39
|
markee-diagram .markee-diagram-error {
|
|
40
|
-
border-
|
|
40
|
+
border-inline-start: 0.25rem solid var(--mk-admonition-color-danger);
|
|
41
41
|
}
|
|
42
42
|
|
|
43
43
|
markee-diagram .markee-diagram-error pre {
|
package/src/main.test.ts
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { describe, expect, it, vi } from 'vitest'
|
|
2
|
+
|
|
3
|
+
async function importMain() {
|
|
4
|
+
vi.resetModules()
|
|
5
|
+
|
|
6
|
+
const registerDiagramElement = vi.fn()
|
|
7
|
+
const registerDiagramsRemark = vi.fn()
|
|
8
|
+
|
|
9
|
+
vi.doMock('./element.js', () => ({
|
|
10
|
+
registerDiagramElement,
|
|
11
|
+
}))
|
|
12
|
+
vi.doMock('./remark.js', () => ({
|
|
13
|
+
registerDiagramsRemark,
|
|
14
|
+
}))
|
|
15
|
+
|
|
16
|
+
await import('./main.js')
|
|
17
|
+
|
|
18
|
+
return { registerDiagramElement, registerDiagramsRemark }
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
describe('@markee/diagrams main', () => {
|
|
22
|
+
it('registers the diagram element and remark plugin on import', async () => {
|
|
23
|
+
const { registerDiagramElement, registerDiagramsRemark } =
|
|
24
|
+
await importMain()
|
|
25
|
+
|
|
26
|
+
expect(registerDiagramElement).toHaveBeenCalledTimes(1)
|
|
27
|
+
expect(registerDiagramsRemark).toHaveBeenCalledTimes(1)
|
|
28
|
+
})
|
|
29
|
+
})
|