chore: update Angular and TypeScript type definitions in cache

This commit is contained in:
Bruno Charest 2025-09-28 13:29:41 -04:00
parent 7f913ab33c
commit 963d0cc323
81 changed files with 7444 additions and 663 deletions

File diff suppressed because one or more lines are too long

View File

@ -1,178 +1,250 @@
{
"hash": "eb50cfd2",
"configHash": "bcc72fc6",
"lockfileHash": "88ca7dd7",
"browserHash": "b0cc96c8",
"hash": "c37c60be",
"configHash": "1caf38cd",
"lockfileHash": "0f64d2e1",
"browserHash": "67c2b9a3",
"optimized": {
"@angular/common": {
"src": "../../../../../../node_modules/@angular/common/fesm2022/common.mjs",
"file": "@angular_common.js",
"fileHash": "7f81e9b4",
"fileHash": "6264f857",
"needsInterop": false
},
"@angular/common/http": {
"src": "../../../../../../node_modules/@angular/common/fesm2022/http.mjs",
"file": "@angular_common_http.js",
"fileHash": "1240889a",
"fileHash": "d4f0095b",
"needsInterop": false
},
"@angular/common/locales/fr": {
"src": "../../../../../../node_modules/@angular/common/locales/fr.js",
"file": "@angular_common_locales_fr.js",
"fileHash": "e3440699",
"fileHash": "cf09064a",
"needsInterop": false
},
"@angular/core": {
"src": "../../../../../../node_modules/@angular/core/fesm2022/core.mjs",
"file": "@angular_core.js",
"fileHash": "b2cabf77",
"fileHash": "9394e2f4",
"needsInterop": false
},
"@angular/core/rxjs-interop": {
"src": "../../../../../../node_modules/@angular/core/fesm2022/rxjs-interop.mjs",
"file": "@angular_core_rxjs-interop.js",
"fileHash": "aebfcee4",
"fileHash": "078ce53d",
"needsInterop": false
},
"@angular/forms": {
"src": "../../../../../../node_modules/@angular/forms/fesm2022/forms.mjs",
"file": "@angular_forms.js",
"fileHash": "a28c5b20",
"fileHash": "56b31ede",
"needsInterop": false
},
"@angular/platform-browser": {
"src": "../../../../../../node_modules/@angular/platform-browser/fesm2022/platform-browser.mjs",
"file": "@angular_platform-browser.js",
"fileHash": "4677d9a7",
"fileHash": "de25a4b4",
"needsInterop": false
},
"angular-calendar": {
"src": "../../../../../../node_modules/angular-calendar/fesm2022/angular-calendar.mjs",
"file": "angular-calendar.js",
"fileHash": "fa181aaa",
"fileHash": "22aed57a",
"needsInterop": false
},
"angular-calendar/date-adapters/date-fns": {
"src": "../../../../../../node_modules/angular-calendar/date-adapters/esm/date-fns/index.js",
"file": "angular-calendar_date-adapters_date-fns.js",
"fileHash": "e65f4b69",
"fileHash": "2087b111",
"needsInterop": false
},
"highlight.js": {
"src": "../../../../../../node_modules/highlight.js/es/index.js",
"file": "highlight__js.js",
"fileHash": "d5d445af",
"fileHash": "7fb09d07",
"needsInterop": false
},
"markdown-it": {
"src": "../../../../../../node_modules/markdown-it/index.mjs",
"file": "markdown-it.js",
"fileHash": "ccedf405",
"needsInterop": false
},
"markdown-it-anchor": {
"src": "../../../../../../node_modules/markdown-it-anchor/dist/markdownItAnchor.mjs",
"file": "markdown-it-anchor.js",
"fileHash": "c0a580a1",
"needsInterop": false
},
"markdown-it-attrs": {
"src": "../../../../../../node_modules/markdown-it-attrs/index.js",
"file": "markdown-it-attrs.js",
"fileHash": "a28c15a6",
"needsInterop": true
},
"markdown-it-task-lists": {
"src": "../../../../../../node_modules/markdown-it-task-lists/index.js",
"file": "markdown-it-task-lists.js",
"fileHash": "9ac986bf",
"needsInterop": true
},
"mermaid": {
"src": "../../../../../../node_modules/mermaid/dist/mermaid.core.mjs",
"file": "mermaid.js",
"fileHash": "90c591b1",
"fileHash": "fee969bf",
"needsInterop": false
},
"rxjs": {
"src": "../../../../../../node_modules/rxjs/dist/esm5/index.js",
"file": "rxjs.js",
"fileHash": "8c38d9b7",
"fileHash": "3f127c6d",
"needsInterop": false
}
},
"chunks": {
"kanban-definition-3W4ZIXB7-GUMHX2OD": {
"file": "kanban-definition-3W4ZIXB7-GUMHX2OD.js"
"blockDiagram-VD42YOAC-QLCETXLX": {
"file": "blockDiagram-VD42YOAC-QLCETXLX.js"
},
"sankeyDiagram-TZEHDZUN-GH26R5YW": {
"file": "sankeyDiagram-TZEHDZUN-GH26R5YW.js"
"architectureDiagram-VXUJARFQ-K5UZADJM": {
"file": "architectureDiagram-VXUJARFQ-K5UZADJM.js"
},
"diagram-S2PKOQOG-CRJZWG5Y": {
"file": "diagram-S2PKOQOG-CRJZWG5Y.js"
"diagram-PSM6KHXK-XVWEIUTT": {
"file": "diagram-PSM6KHXK-XVWEIUTT.js"
},
"diagram-QEK2KX5R-5GIFGTRQ": {
"file": "diagram-QEK2KX5R-5GIFGTRQ.js"
"stateDiagram-v2-4FDKWEC3-YF6BIDZS": {
"file": "stateDiagram-v2-4FDKWEC3-YF6BIDZS.js"
},
"blockDiagram-VD42YOAC-IMP7RBMX": {
"file": "blockDiagram-VD42YOAC-IMP7RBMX.js"
},
"architectureDiagram-VXUJARFQ-3B5SPFPL": {
"file": "architectureDiagram-VXUJARFQ-3B5SPFPL.js"
},
"diagram-PSM6KHXK-7CHUIA47": {
"file": "diagram-PSM6KHXK-7CHUIA47.js"
},
"sequenceDiagram-WL72ISMW-ZGS5TERI": {
"file": "sequenceDiagram-WL72ISMW-ZGS5TERI.js"
},
"classDiagram-2ON5EDUG-33U76KPG": {
"file": "classDiagram-2ON5EDUG-33U76KPG.js"
},
"classDiagram-v2-WZHVMYZB-Z27PMM23": {
"file": "classDiagram-v2-WZHVMYZB-Z27PMM23.js"
},
"chunk-X65BYZXM": {
"file": "chunk-X65BYZXM.js"
},
"stateDiagram-FKZM4ZOC-KXMQ5JNR": {
"file": "stateDiagram-FKZM4ZOC-KXMQ5JNR.js"
},
"stateDiagram-v2-4FDKWEC3-JB4TSVIW": {
"file": "stateDiagram-v2-4FDKWEC3-JB4TSVIW.js"
},
"chunk-UHQERBHF": {
"file": "chunk-UHQERBHF.js"
},
"journeyDiagram-XKPGCS4Q-TGUXGKSG": {
"file": "journeyDiagram-XKPGCS4Q-TGUXGKSG.js"
"journeyDiagram-XKPGCS4Q-DRJVBRZY": {
"file": "journeyDiagram-XKPGCS4Q-DRJVBRZY.js"
},
"timeline-definition-IT6M3QCI-WHNO6URF": {
"file": "timeline-definition-IT6M3QCI-WHNO6URF.js"
},
"mindmap-definition-VGOIOE7T-YDOCEY2Q": {
"file": "mindmap-definition-VGOIOE7T-YDOCEY2Q.js"
"mindmap-definition-VGOIOE7T-YG6E4RHT": {
"file": "mindmap-definition-VGOIOE7T-YG6E4RHT.js"
},
"treemap-75Q7IDZK-IP775KCD": {
"file": "treemap-75Q7IDZK-IP775KCD.js"
"kanban-definition-3W4ZIXB7-IDLHJXSC": {
"file": "kanban-definition-3W4ZIXB7-IDLHJXSC.js"
},
"gitGraphDiagram-NY62KEGX-67QA5ASO": {
"file": "gitGraphDiagram-NY62KEGX-67QA5ASO.js"
"sankeyDiagram-TZEHDZUN-GH26R5YW": {
"file": "sankeyDiagram-TZEHDZUN-GH26R5YW.js"
},
"chunk-3WIYXQMB": {
"file": "chunk-3WIYXQMB.js"
"diagram-S2PKOQOG-SBOOCUMA": {
"file": "diagram-S2PKOQOG-SBOOCUMA.js"
},
"ganttDiagram-LVOFAZNH-HYMY4RKD": {
"file": "ganttDiagram-LVOFAZNH-HYMY4RKD.js"
"diagram-QEK2KX5R-QIAHEC3Z": {
"file": "diagram-QEK2KX5R-QIAHEC3Z.js"
},
"infoDiagram-F6ZHWCRC-WO5AQYKA": {
"file": "infoDiagram-F6ZHWCRC-WO5AQYKA.js"
},
"pieDiagram-ADFJNKIX-GZV4UXNK": {
"file": "pieDiagram-ADFJNKIX-GZV4UXNK.js"
},
"chunk-PNW5KFH4": {
"file": "chunk-PNW5KFH4.js"
},
"chunk-VGVCR5QM": {
"file": "chunk-VGVCR5QM.js"
},
"chunk-5SXTVVUG": {
"file": "chunk-5SXTVVUG.js"
"pieDiagram-ADFJNKIX-B5ITLD23": {
"file": "pieDiagram-ADFJNKIX-B5ITLD23.js"
},
"quadrantDiagram-AYHSOK5B-G2SG5IZD": {
"file": "quadrantDiagram-AYHSOK5B-G2SG5IZD.js"
},
"xychartDiagram-PRI3JC2R-3HCTMHS4": {
"file": "xychartDiagram-PRI3JC2R-3HCTMHS4.js"
"xychartDiagram-PRI3JC2R-POXCDNLO": {
"file": "xychartDiagram-PRI3JC2R-POXCDNLO.js"
},
"requirementDiagram-UZGBJVZJ-75TZV2RQ": {
"file": "requirementDiagram-UZGBJVZJ-75TZV2RQ.js"
"requirementDiagram-UZGBJVZJ-OT76XWNT": {
"file": "requirementDiagram-UZGBJVZJ-OT76XWNT.js"
},
"flowDiagram-NV44I4VS-WHL2L3RD": {
"file": "flowDiagram-NV44I4VS-WHL2L3RD.js"
"sequenceDiagram-WL72ISMW-HRTSSJHP": {
"file": "sequenceDiagram-WL72ISMW-HRTSSJHP.js"
},
"classDiagram-2ON5EDUG-AQUOHNLB": {
"file": "classDiagram-2ON5EDUG-AQUOHNLB.js"
},
"classDiagram-v2-WZHVMYZB-AIBAXKPE": {
"file": "classDiagram-v2-WZHVMYZB-AIBAXKPE.js"
},
"chunk-5MNSTNGC": {
"file": "chunk-5MNSTNGC.js"
},
"stateDiagram-FKZM4ZOC-FVHIKWH4": {
"file": "stateDiagram-FKZM4ZOC-FVHIKWH4.js"
},
"chunk-WBFNWS3A": {
"file": "chunk-WBFNWS3A.js"
},
"pie-WTHONI2E-7JKUTNCJ": {
"file": "pie-WTHONI2E-7JKUTNCJ.js"
},
"architecture-O4VJ6CD3-IBEWAQYB": {
"file": "architecture-O4VJ6CD3-IBEWAQYB.js"
},
"gitGraph-ZV4HHKMB-6SC2CHQE": {
"file": "gitGraph-ZV4HHKMB-6SC2CHQE.js"
},
"radar-NJJJXTRR-IXC2PP4O": {
"file": "radar-NJJJXTRR-IXC2PP4O.js"
},
"treemap-75Q7IDZK-IP775KCD": {
"file": "treemap-75Q7IDZK-IP775KCD.js"
},
"gitGraphDiagram-NY62KEGX-OS3GW3H5": {
"file": "gitGraphDiagram-NY62KEGX-OS3GW3H5.js"
},
"chunk-PNW5KFH4": {
"file": "chunk-PNW5KFH4.js"
},
"chunk-3WIYXQMB": {
"file": "chunk-3WIYXQMB.js"
},
"ganttDiagram-LVOFAZNH-FIW763NA": {
"file": "ganttDiagram-LVOFAZNH-FIW763NA.js"
},
"infoDiagram-F6ZHWCRC-URQIBBZD": {
"file": "infoDiagram-F6ZHWCRC-URQIBBZD.js"
},
"chunk-AWNKEY2Y": {
"file": "chunk-AWNKEY2Y.js"
},
"chunk-XP22GJHQ": {
"file": "chunk-XP22GJHQ.js"
},
"chunk-NYZY7JGI": {
"file": "chunk-NYZY7JGI.js"
},
"chunk-FNEVJCCX": {
"file": "chunk-FNEVJCCX.js"
},
"chunk-R33GOAXK": {
"file": "chunk-R33GOAXK.js"
},
"chunk-5SXTVVUG": {
"file": "chunk-5SXTVVUG.js"
},
"katex-JJTYNRHT": {
"file": "katex-JJTYNRHT.js"
},
"dagre-6UL2VRFP-RAS76HL3": {
"file": "dagre-6UL2VRFP-RAS76HL3.js"
},
"chunk-YUMEK5VY": {
"file": "chunk-YUMEK5VY.js"
},
"chunk-MEGNL3BT": {
"file": "chunk-MEGNL3BT.js"
},
"cose-bilkent-S5V4N54A-5WYXQMNH": {
"file": "cose-bilkent-S5V4N54A-5WYXQMNH.js"
},
"chunk-4434HPF7": {
"file": "chunk-4434HPF7.js"
},
"c4Diagram-YG6GDRKO-G4QDPDWO": {
"file": "c4Diagram-YG6GDRKO-G4QDPDWO.js"
},
"chunk-BETRN5NS": {
"file": "chunk-BETRN5NS.js"
},
"flowDiagram-NV44I4VS-G6X7VBZN": {
"file": "flowDiagram-NV44I4VS-G6X7VBZN.js"
},
"chunk-I4QIIVJ7": {
"file": "chunk-I4QIIVJ7.js"
},
"erDiagram-Q2GNP2WA-WNA6LIBQ": {
"file": "erDiagram-Q2GNP2WA-WNA6LIBQ.js"
"erDiagram-Q2GNP2WA-SDEYIDBH": {
"file": "erDiagram-Q2GNP2WA-SDEYIDBH.js"
},
"chunk-PLWNSIKB": {
"file": "chunk-PLWNSIKB.js"
@ -192,33 +264,12 @@
"chunk-CHJ5BV6S": {
"file": "chunk-CHJ5BV6S.js"
},
"pie-WTHONI2E-7JKUTNCJ": {
"file": "pie-WTHONI2E-7JKUTNCJ.js"
},
"chunk-XP22GJHQ": {
"file": "chunk-XP22GJHQ.js"
},
"architecture-O4VJ6CD3-IBEWAQYB": {
"file": "architecture-O4VJ6CD3-IBEWAQYB.js"
},
"chunk-NYZY7JGI": {
"file": "chunk-NYZY7JGI.js"
},
"gitGraph-ZV4HHKMB-6SC2CHQE": {
"file": "gitGraph-ZV4HHKMB-6SC2CHQE.js"
},
"chunk-FNEVJCCX": {
"file": "chunk-FNEVJCCX.js"
},
"radar-NJJJXTRR-IXC2PP4O": {
"file": "radar-NJJJXTRR-IXC2PP4O.js"
},
"chunk-R33GOAXK": {
"file": "chunk-R33GOAXK.js"
},
"chunk-WHHJWK6B": {
"file": "chunk-WHHJWK6B.js"
},
"chunk-6SIVX7OU": {
"file": "chunk-6SIVX7OU.js"
},
"chunk-BSULYXPT": {
"file": "chunk-BSULYXPT.js"
},
@ -228,59 +279,29 @@
"chunk-JSZQKJT3": {
"file": "chunk-JSZQKJT3.js"
},
"chunk-WC2C7HAT": {
"file": "chunk-WC2C7HAT.js"
"chunk-EAO6AZLE": {
"file": "chunk-EAO6AZLE.js"
},
"katex-JJTYNRHT": {
"file": "katex-JJTYNRHT.js"
},
"dagre-6UL2VRFP-RIOSZDA4": {
"file": "dagre-6UL2VRFP-RIOSZDA4.js"
},
"chunk-YUMEK5VY": {
"file": "chunk-YUMEK5VY.js"
},
"chunk-MEGNL3BT": {
"file": "chunk-MEGNL3BT.js"
},
"chunk-6SIVX7OU": {
"file": "chunk-6SIVX7OU.js"
},
"chunk-HICR2YSH": {
"file": "chunk-HICR2YSH.js"
},
"chunk-JJ4TL56I": {
"file": "chunk-JJ4TL56I.js"
"chunk-ZZNURHEZ": {
"file": "chunk-ZZNURHEZ.js"
},
"chunk-2HSIUWWJ": {
"file": "chunk-2HSIUWWJ.js"
},
"chunk-2WFBHHKP": {
"file": "chunk-2WFBHHKP.js"
},
"chunk-EUUYHBKV": {
"file": "chunk-EUUYHBKV.js"
},
"chunk-FTTOYZOY": {
"file": "chunk-FTTOYZOY.js"
},
"chunk-NMWDZEZO": {
"file": "chunk-NMWDZEZO.js"
"chunk-XIFRTXJX": {
"file": "chunk-XIFRTXJX.js"
},
"chunk-NGEE2U2J": {
"file": "chunk-NGEE2U2J.js"
},
"cose-bilkent-S5V4N54A-5WYXQMNH": {
"file": "cose-bilkent-S5V4N54A-5WYXQMNH.js"
},
"chunk-4434HPF7": {
"file": "chunk-4434HPF7.js"
},
"c4Diagram-YG6GDRKO-DTLV3BK5": {
"file": "c4Diagram-YG6GDRKO-DTLV3BK5.js"
},
"chunk-BETRN5NS": {
"file": "chunk-BETRN5NS.js"
},
"chunk-QVVRGVV3": {
"file": "chunk-QVVRGVV3.js"
"chunk-SHNTMSU6": {
"file": "chunk-SHNTMSU6.js"
},
"chunk-CMK64ICG": {
"file": "chunk-CMK64ICG.js"
@ -288,12 +309,15 @@
"chunk-BFCVI5XI": {
"file": "chunk-BFCVI5XI.js"
},
"chunk-M5X7JH4I": {
"file": "chunk-M5X7JH4I.js"
},
"chunk-I65GBZ6F": {
"file": "chunk-I65GBZ6F.js"
},
"chunk-NGEE2U2J": {
"file": "chunk-NGEE2U2J.js"
},
"chunk-M5X7JH4I": {
"file": "chunk-M5X7JH4I.js"
},
"chunk-QEGKXTBA": {
"file": "chunk-QEGKXTBA.js"
},

View File

@ -3,33 +3,32 @@ import {
} from "./chunk-PNW5KFH4.js";
import {
parse
} from "./chunk-VGVCR5QM.js";
import "./chunk-5SXTVVUG.js";
import "./chunk-BUI4I457.js";
import "./chunk-CHJ5BV6S.js";
} from "./chunk-AWNKEY2Y.js";
import "./chunk-XP22GJHQ.js";
import "./chunk-NYZY7JGI.js";
import "./chunk-FNEVJCCX.js";
import "./chunk-R33GOAXK.js";
import "./chunk-5SXTVVUG.js";
import {
cytoscape as cytoscape2
} from "./chunk-4434HPF7.js";
import "./chunk-BUI4I457.js";
import "./chunk-CHJ5BV6S.js";
import "./chunk-WHHJWK6B.js";
import "./chunk-6SIVX7OU.js";
import {
selectSvgElement
} from "./chunk-B5NQPFQG.js";
import "./chunk-6SIVX7OU.js";
import {
createText,
getIconSVG,
registerIconPacks,
unknownIcon
} from "./chunk-NMWDZEZO.js";
import "./chunk-NGEE2U2J.js";
import {
cytoscape as cytoscape2
} from "./chunk-4434HPF7.js";
} from "./chunk-XIFRTXJX.js";
import {
cleanAndMerge,
getEdgeId
} from "./chunk-QVVRGVV3.js";
} from "./chunk-SHNTMSU6.js";
import "./chunk-CMK64ICG.js";
import {
clear,
@ -45,12 +44,13 @@ import {
setDiagramTitle,
setupGraphViewbox
} from "./chunk-BFCVI5XI.js";
import "./chunk-M5X7JH4I.js";
import {
__name,
log,
select_default
} from "./chunk-I65GBZ6F.js";
import "./chunk-NGEE2U2J.js";
import "./chunk-M5X7JH4I.js";
import {
__commonJS,
__spreadProps,
@ -8843,4 +8843,4 @@ var diagram = {
export {
diagram
};
//# sourceMappingURL=architectureDiagram-VXUJARFQ-3B5SPFPL.js.map
//# sourceMappingURL=architectureDiagram-VXUJARFQ-K5UZADJM.js.map

View File

@ -1,9 +1,9 @@
import {
getIconStyles
} from "./chunk-I4QIIVJ7.js";
import {
Graph
} from "./chunk-MEGNL3BT.js";
import {
getIconStyles
} from "./chunk-I4QIIVJ7.js";
import {
clone_default
} from "./chunk-6SIVX7OU.js";
@ -16,13 +16,12 @@ import {
import {
createText,
replaceIconSubstring
} from "./chunk-NMWDZEZO.js";
import "./chunk-NGEE2U2J.js";
} from "./chunk-XIFRTXJX.js";
import {
decodeEntities,
getStylesFromArray,
utils_default
} from "./chunk-QVVRGVV3.js";
} from "./chunk-SHNTMSU6.js";
import "./chunk-CMK64ICG.js";
import {
channel_default,
@ -36,7 +35,6 @@ import {
rgba_default,
sanitizeText
} from "./chunk-BFCVI5XI.js";
import "./chunk-M5X7JH4I.js";
import {
__name,
basis_default,
@ -44,6 +42,8 @@ import {
log,
select_default
} from "./chunk-I65GBZ6F.js";
import "./chunk-NGEE2U2J.js";
import "./chunk-M5X7JH4I.js";
import {
__spreadProps,
__spreadValues
@ -3745,4 +3745,4 @@ var diagram = {
export {
diagram
};
//# sourceMappingURL=blockDiagram-VD42YOAC-IMP7RBMX.js.map
//# sourceMappingURL=blockDiagram-VD42YOAC-QLCETXLX.js.map

View File

@ -6,7 +6,7 @@ import {
calculateTextHeight,
calculateTextWidth,
wrapLabel
} from "./chunk-QVVRGVV3.js";
} from "./chunk-SHNTMSU6.js";
import {
require_dist
} from "./chunk-CMK64ICG.js";
@ -21,12 +21,12 @@ import {
setAccDescription,
setAccTitle
} from "./chunk-BFCVI5XI.js";
import "./chunk-M5X7JH4I.js";
import {
__name,
log,
select_default
} from "./chunk-I65GBZ6F.js";
import "./chunk-M5X7JH4I.js";
import {
__toESM
} from "./chunk-TKSB4YUA.js";
@ -2593,4 +2593,4 @@ var diagram = {
export {
diagram
};
//# sourceMappingURL=c4Diagram-YG6GDRKO-DTLV3BK5.js.map
//# sourceMappingURL=c4Diagram-YG6GDRKO-G4QDPDWO.js.map

View File

@ -10,13 +10,13 @@ import {
import {
createText,
getIconSVG
} from "./chunk-NMWDZEZO.js";
} from "./chunk-XIFRTXJX.js";
import {
calculateTextWidth,
decodeEntities,
handleUndefinedAttr,
parseFontSize
} from "./chunk-QVVRGVV3.js";
} from "./chunk-SHNTMSU6.js";
import {
common_default,
defaultConfig_default,
@ -6263,4 +6263,4 @@ export {
clear2,
positionNode
};
//# sourceMappingURL=chunk-JJ4TL56I.js.map
//# sourceMappingURL=chunk-2WFBHHKP.js.map

View File

@ -10,11 +10,11 @@ import {
import {
getRegisteredLayoutAlgorithm,
render
} from "./chunk-WC2C7HAT.js";
} from "./chunk-EAO6AZLE.js";
import {
getEdgeId,
utils_default
} from "./chunk-QVVRGVV3.js";
} from "./chunk-SHNTMSU6.js";
import {
clear,
common_default,
@ -1945,4 +1945,4 @@ export {
styles_default,
classRenderer_v3_unified_default
};
//# sourceMappingURL=chunk-X65BYZXM.js.map
//# sourceMappingURL=chunk-5MNSTNGC.js.map

View File

@ -70,4 +70,4 @@ var MermaidParseError = (_a = class extends Error {
export {
parse
};
//# sourceMappingURL=chunk-VGVCR5QM.js.map
//# sourceMappingURL=chunk-AWNKEY2Y.js.map

View File

@ -3,15 +3,15 @@ import {
insertEdgeLabel,
markers_default,
positionEdgeLabel
} from "./chunk-HICR2YSH.js";
} from "./chunk-ZZNURHEZ.js";
import {
insertCluster,
insertNode,
labelHelper
} from "./chunk-JJ4TL56I.js";
} from "./chunk-2WFBHHKP.js";
import {
interpolateToCurve
} from "./chunk-QVVRGVV3.js";
} from "./chunk-SHNTMSU6.js";
import {
common_default,
getConfig
@ -45,7 +45,7 @@ var registerDefaultLayoutLoaders = __name(() => {
registerLayoutLoaders([
{
name: "dagre",
loader: __name(async () => await import("./dagre-6UL2VRFP-RIOSZDA4.js"), "loader")
loader: __name(async () => await import("./dagre-6UL2VRFP-RAS76HL3.js"), "loader")
},
...true ? [
{
@ -82,4 +82,4 @@ export {
render,
getRegisteredLayoutAlgorithm
};
//# sourceMappingURL=chunk-WC2C7HAT.js.map
//# sourceMappingURL=chunk-EAO6AZLE.js.map

View File

@ -8,10 +8,6 @@ import {
directiveRegex,
sanitizeDirective
} from "./chunk-BFCVI5XI.js";
import {
memoize_default,
merge_default
} from "./chunk-M5X7JH4I.js";
import {
__name,
basisClosed_default,
@ -37,6 +33,10 @@ import {
stepBefore,
step_default
} from "./chunk-I65GBZ6F.js";
import {
memoize_default,
merge_default
} from "./chunk-M5X7JH4I.js";
import {
__toESM
} from "./chunk-TKSB4YUA.js";
@ -587,4 +587,4 @@ export {
getEdgeId,
handleUndefinedAttr
};
//# sourceMappingURL=chunk-QVVRGVV3.js.map
//# sourceMappingURL=chunk-SHNTMSU6.js.map

View File

@ -6,11 +6,11 @@ import {
} from "./chunk-LHH5RO5K.js";
import {
render
} from "./chunk-WC2C7HAT.js";
} from "./chunk-EAO6AZLE.js";
import {
generateId,
utils_default
} from "./chunk-QVVRGVV3.js";
} from "./chunk-SHNTMSU6.js";
import {
clear,
common_default,
@ -2015,4 +2015,4 @@ export {
StateDB,
styles_default
};
//# sourceMappingURL=chunk-UHQERBHF.js.map
//# sourceMappingURL=chunk-WBFNWS3A.js.map

View File

@ -1,6 +1,6 @@
import {
decodeEntities
} from "./chunk-QVVRGVV3.js";
} from "./chunk-SHNTMSU6.js";
import {
common_default,
getConfig,
@ -3098,4 +3098,4 @@ export {
replaceIconSubstring,
createText
};
//# sourceMappingURL=chunk-NMWDZEZO.js.map
//# sourceMappingURL=chunk-XIFRTXJX.js.map

View File

@ -1,12 +1,12 @@
import {
at,
createLabel_default
} from "./chunk-JJ4TL56I.js";
import {
getLineFunctionsWithOffset,
markerOffsets,
markerOffsets2
} from "./chunk-2HSIUWWJ.js";
import {
at,
createLabel_default
} from "./chunk-2WFBHHKP.js";
import {
getSubGraphTitleMargins
} from "./chunk-EUUYHBKV.js";
@ -16,10 +16,10 @@ import {
} from "./chunk-FTTOYZOY.js";
import {
createText
} from "./chunk-NMWDZEZO.js";
} from "./chunk-XIFRTXJX.js";
import {
utils_default
} from "./chunk-QVVRGVV3.js";
} from "./chunk-SHNTMSU6.js";
import {
evaluate,
getConfig2
@ -847,4 +847,4 @@ export {
insertEdge,
markers_default
};
//# sourceMappingURL=chunk-HICR2YSH.js.map
//# sourceMappingURL=chunk-ZZNURHEZ.js.map

View File

@ -3,24 +3,24 @@ import {
classDiagram_default,
classRenderer_v3_unified_default,
styles_default
} from "./chunk-X65BYZXM.js";
} from "./chunk-5MNSTNGC.js";
import "./chunk-I4QIIVJ7.js";
import "./chunk-PLWNSIKB.js";
import "./chunk-LHH5RO5K.js";
import "./chunk-WC2C7HAT.js";
import "./chunk-HICR2YSH.js";
import "./chunk-JJ4TL56I.js";
import "./chunk-EAO6AZLE.js";
import "./chunk-ZZNURHEZ.js";
import "./chunk-2HSIUWWJ.js";
import "./chunk-2WFBHHKP.js";
import "./chunk-EUUYHBKV.js";
import "./chunk-FTTOYZOY.js";
import "./chunk-NMWDZEZO.js";
import "./chunk-QVVRGVV3.js";
import "./chunk-XIFRTXJX.js";
import "./chunk-SHNTMSU6.js";
import "./chunk-CMK64ICG.js";
import "./chunk-BFCVI5XI.js";
import "./chunk-M5X7JH4I.js";
import {
__name
} from "./chunk-I65GBZ6F.js";
import "./chunk-M5X7JH4I.js";
import "./chunk-TKSB4YUA.js";
// node_modules/mermaid/dist/chunks/mermaid.core/classDiagram-2ON5EDUG.mjs
@ -41,4 +41,4 @@ var diagram = {
export {
diagram
};
//# sourceMappingURL=classDiagram-2ON5EDUG-33U76KPG.js.map
//# sourceMappingURL=classDiagram-2ON5EDUG-AQUOHNLB.js.map

View File

@ -3,24 +3,24 @@ import {
classDiagram_default,
classRenderer_v3_unified_default,
styles_default
} from "./chunk-X65BYZXM.js";
} from "./chunk-5MNSTNGC.js";
import "./chunk-I4QIIVJ7.js";
import "./chunk-PLWNSIKB.js";
import "./chunk-LHH5RO5K.js";
import "./chunk-WC2C7HAT.js";
import "./chunk-HICR2YSH.js";
import "./chunk-JJ4TL56I.js";
import "./chunk-EAO6AZLE.js";
import "./chunk-ZZNURHEZ.js";
import "./chunk-2HSIUWWJ.js";
import "./chunk-2WFBHHKP.js";
import "./chunk-EUUYHBKV.js";
import "./chunk-FTTOYZOY.js";
import "./chunk-NMWDZEZO.js";
import "./chunk-QVVRGVV3.js";
import "./chunk-XIFRTXJX.js";
import "./chunk-SHNTMSU6.js";
import "./chunk-CMK64ICG.js";
import "./chunk-BFCVI5XI.js";
import "./chunk-M5X7JH4I.js";
import {
__name
} from "./chunk-I65GBZ6F.js";
import "./chunk-M5X7JH4I.js";
import "./chunk-TKSB4YUA.js";
// node_modules/mermaid/dist/chunks/mermaid.core/classDiagram-v2-WZHVMYZB.mjs
@ -41,4 +41,4 @@ var diagram = {
export {
diagram
};
//# sourceMappingURL=classDiagram-v2-WZHVMYZB-Z27PMM23.js.map
//# sourceMappingURL=classDiagram-v2-WZHVMYZB-AIBAXKPE.js.map

View File

@ -15,7 +15,8 @@ import {
insertEdgeLabel,
markers_default,
positionEdgeLabel
} from "./chunk-HICR2YSH.js";
} from "./chunk-ZZNURHEZ.js";
import "./chunk-2HSIUWWJ.js";
import {
clear,
clear2,
@ -24,24 +25,23 @@ import {
positionNode,
setNodeElem,
updateNodeBounds
} from "./chunk-JJ4TL56I.js";
import "./chunk-2HSIUWWJ.js";
} from "./chunk-2WFBHHKP.js";
import {
getSubGraphTitleMargins
} from "./chunk-EUUYHBKV.js";
import "./chunk-FTTOYZOY.js";
import "./chunk-NMWDZEZO.js";
import "./chunk-NGEE2U2J.js";
import "./chunk-QVVRGVV3.js";
import "./chunk-XIFRTXJX.js";
import "./chunk-SHNTMSU6.js";
import "./chunk-CMK64ICG.js";
import {
getConfig2
} from "./chunk-BFCVI5XI.js";
import "./chunk-M5X7JH4I.js";
import {
__name,
log
} from "./chunk-I65GBZ6F.js";
import "./chunk-NGEE2U2J.js";
import "./chunk-M5X7JH4I.js";
import {
__spreadProps,
__spreadValues
@ -737,4 +737,4 @@ var render = __name(async (data4Layout, svg) => {
export {
render
};
//# sourceMappingURL=dagre-6UL2VRFP-RIOSZDA4.js.map
//# sourceMappingURL=dagre-6UL2VRFP-RAS76HL3.js.map

View File

@ -3,30 +3,29 @@ import {
} from "./chunk-PNW5KFH4.js";
import {
parse
} from "./chunk-VGVCR5QM.js";
} from "./chunk-AWNKEY2Y.js";
import "./chunk-XP22GJHQ.js";
import "./chunk-NYZY7JGI.js";
import "./chunk-FNEVJCCX.js";
import "./chunk-R33GOAXK.js";
import "./chunk-5SXTVVUG.js";
import {
setupViewPortForSVG
} from "./chunk-LHH5RO5K.js";
import "./chunk-BUI4I457.js";
import "./chunk-CHJ5BV6S.js";
import "./chunk-XP22GJHQ.js";
import "./chunk-NYZY7JGI.js";
import "./chunk-FNEVJCCX.js";
import "./chunk-R33GOAXK.js";
import "./chunk-WHHJWK6B.js";
import "./chunk-6SIVX7OU.js";
import {
selectSvgElement
} from "./chunk-B5NQPFQG.js";
import "./chunk-6SIVX7OU.js";
import {
isLabelStyle,
styles2String
} from "./chunk-FTTOYZOY.js";
import "./chunk-NGEE2U2J.js";
import {
cleanAndMerge
} from "./chunk-QVVRGVV3.js";
} from "./chunk-SHNTMSU6.js";
import "./chunk-CMK64ICG.js";
import {
clear,
@ -40,7 +39,6 @@ import {
setAccTitle,
setDiagramTitle
} from "./chunk-BFCVI5XI.js";
import "./chunk-M5X7JH4I.js";
import {
__name,
format,
@ -50,6 +48,8 @@ import {
select_default,
treemap_default
} from "./chunk-I65GBZ6F.js";
import "./chunk-NGEE2U2J.js";
import "./chunk-M5X7JH4I.js";
import {
__spreadValues
} from "./chunk-TKSB4YUA.js";
@ -566,4 +566,4 @@ var diagram = {
export {
diagram
};
//# sourceMappingURL=diagram-PSM6KHXK-7CHUIA47.js.map
//# sourceMappingURL=diagram-PSM6KHXK-XVWEIUTT.js.map

View File

@ -3,23 +3,22 @@ import {
} from "./chunk-PNW5KFH4.js";
import {
parse
} from "./chunk-VGVCR5QM.js";
import "./chunk-5SXTVVUG.js";
import "./chunk-BUI4I457.js";
import "./chunk-CHJ5BV6S.js";
} from "./chunk-AWNKEY2Y.js";
import "./chunk-XP22GJHQ.js";
import "./chunk-NYZY7JGI.js";
import "./chunk-FNEVJCCX.js";
import "./chunk-R33GOAXK.js";
import "./chunk-5SXTVVUG.js";
import "./chunk-BUI4I457.js";
import "./chunk-CHJ5BV6S.js";
import "./chunk-WHHJWK6B.js";
import "./chunk-6SIVX7OU.js";
import {
selectSvgElement
} from "./chunk-B5NQPFQG.js";
import "./chunk-6SIVX7OU.js";
import "./chunk-NGEE2U2J.js";
import {
cleanAndMerge
} from "./chunk-QVVRGVV3.js";
} from "./chunk-SHNTMSU6.js";
import "./chunk-CMK64ICG.js";
import {
clear,
@ -33,11 +32,12 @@ import {
setAccTitle,
setDiagramTitle
} from "./chunk-BFCVI5XI.js";
import "./chunk-M5X7JH4I.js";
import {
__name,
log
} from "./chunk-I65GBZ6F.js";
import "./chunk-NGEE2U2J.js";
import "./chunk-M5X7JH4I.js";
import {
__spreadValues
} from "./chunk-TKSB4YUA.js";
@ -337,4 +337,4 @@ var diagram = {
export {
diagram
};
//# sourceMappingURL=diagram-QEK2KX5R-5GIFGTRQ.js.map
//# sourceMappingURL=diagram-QEK2KX5R-QIAHEC3Z.js.map

View File

@ -3,23 +3,22 @@ import {
} from "./chunk-PNW5KFH4.js";
import {
parse
} from "./chunk-VGVCR5QM.js";
import "./chunk-5SXTVVUG.js";
import "./chunk-BUI4I457.js";
import "./chunk-CHJ5BV6S.js";
} from "./chunk-AWNKEY2Y.js";
import "./chunk-XP22GJHQ.js";
import "./chunk-NYZY7JGI.js";
import "./chunk-FNEVJCCX.js";
import "./chunk-R33GOAXK.js";
import "./chunk-5SXTVVUG.js";
import "./chunk-BUI4I457.js";
import "./chunk-CHJ5BV6S.js";
import "./chunk-WHHJWK6B.js";
import "./chunk-6SIVX7OU.js";
import {
selectSvgElement
} from "./chunk-B5NQPFQG.js";
import "./chunk-6SIVX7OU.js";
import "./chunk-NGEE2U2J.js";
import {
cleanAndMerge
} from "./chunk-QVVRGVV3.js";
} from "./chunk-SHNTMSU6.js";
import "./chunk-CMK64ICG.js";
import {
clear,
@ -33,11 +32,12 @@ import {
setAccTitle,
setDiagramTitle
} from "./chunk-BFCVI5XI.js";
import "./chunk-M5X7JH4I.js";
import {
__name,
log
} from "./chunk-I65GBZ6F.js";
import "./chunk-NGEE2U2J.js";
import "./chunk-M5X7JH4I.js";
import {
__spreadValues
} from "./chunk-TKSB4YUA.js";
@ -247,4 +247,4 @@ var diagram = {
export {
diagram
};
//# sourceMappingURL=diagram-S2PKOQOG-CRJZWG5Y.js.map
//# sourceMappingURL=diagram-S2PKOQOG-SBOOCUMA.js.map

View File

@ -7,17 +7,17 @@ import {
import {
getRegisteredLayoutAlgorithm,
render
} from "./chunk-WC2C7HAT.js";
import "./chunk-HICR2YSH.js";
import "./chunk-JJ4TL56I.js";
} from "./chunk-EAO6AZLE.js";
import "./chunk-ZZNURHEZ.js";
import "./chunk-2HSIUWWJ.js";
import "./chunk-2WFBHHKP.js";
import "./chunk-EUUYHBKV.js";
import "./chunk-FTTOYZOY.js";
import "./chunk-NMWDZEZO.js";
import "./chunk-XIFRTXJX.js";
import {
getEdgeId,
utils_default
} from "./chunk-QVVRGVV3.js";
} from "./chunk-SHNTMSU6.js";
import "./chunk-CMK64ICG.js";
import {
channel_default,
@ -31,13 +31,13 @@ import {
setAccTitle,
setDiagramTitle
} from "./chunk-BFCVI5XI.js";
import "./chunk-M5X7JH4I.js";
import {
__export,
__name,
log,
select_default
} from "./chunk-I65GBZ6F.js";
import "./chunk-M5X7JH4I.js";
import "./chunk-TKSB4YUA.js";
// node_modules/mermaid/dist/chunks/mermaid.core/erDiagram-Q2GNP2WA.mjs
@ -1272,4 +1272,4 @@ var diagram = {
export {
diagram
};
//# sourceMappingURL=erDiagram-Q2GNP2WA-WNA6LIBQ.js.map
//# sourceMappingURL=erDiagram-Q2GNP2WA-SDEYIDBH.js.map

View File

@ -14,19 +14,19 @@ import {
import {
getRegisteredLayoutAlgorithm,
render
} from "./chunk-WC2C7HAT.js";
import "./chunk-HICR2YSH.js";
} from "./chunk-EAO6AZLE.js";
import "./chunk-ZZNURHEZ.js";
import "./chunk-2HSIUWWJ.js";
import {
isValidShape
} from "./chunk-JJ4TL56I.js";
import "./chunk-2HSIUWWJ.js";
} from "./chunk-2WFBHHKP.js";
import "./chunk-EUUYHBKV.js";
import "./chunk-FTTOYZOY.js";
import "./chunk-NMWDZEZO.js";
import "./chunk-XIFRTXJX.js";
import {
getEdgeId,
utils_default
} from "./chunk-QVVRGVV3.js";
} from "./chunk-SHNTMSU6.js";
import "./chunk-CMK64ICG.js";
import {
channel_default,
@ -43,12 +43,12 @@ import {
setConfig2,
setDiagramTitle
} from "./chunk-BFCVI5XI.js";
import "./chunk-M5X7JH4I.js";
import {
__name,
log,
select_default
} from "./chunk-I65GBZ6F.js";
import "./chunk-M5X7JH4I.js";
import {
__spreadProps,
__spreadValues
@ -2493,4 +2493,4 @@ var diagram = {
export {
diagram
};
//# sourceMappingURL=flowDiagram-NV44I4VS-WHL2L3RD.js.map
//# sourceMappingURL=flowDiagram-NV44I4VS-G6X7VBZN.js.map

View File

@ -1,6 +1,6 @@
import {
utils_default
} from "./chunk-QVVRGVV3.js";
} from "./chunk-SHNTMSU6.js";
import {
require_dist
} from "./chunk-CMK64ICG.js";
@ -16,7 +16,6 @@ import {
setAccTitle,
setDiagramTitle
} from "./chunk-BFCVI5XI.js";
import "./chunk-M5X7JH4I.js";
import {
__name,
axisBottom,
@ -44,6 +43,7 @@ import {
timeTuesday,
timeWednesday
} from "./chunk-I65GBZ6F.js";
import "./chunk-M5X7JH4I.js";
import {
__commonJS,
__toESM
@ -2436,4 +2436,4 @@ var diagram = {
export {
diagram
};
//# sourceMappingURL=ganttDiagram-LVOFAZNH-HYMY4RKD.js.map
//# sourceMappingURL=ganttDiagram-LVOFAZNH-FIW763NA.js.map

View File

@ -1,27 +1,26 @@
import {
ImperativeState
} from "./chunk-3WIYXQMB.js";
import {
populateCommonDb
} from "./chunk-PNW5KFH4.js";
import {
ImperativeState
} from "./chunk-3WIYXQMB.js";
import {
parse
} from "./chunk-VGVCR5QM.js";
import "./chunk-5SXTVVUG.js";
import "./chunk-BUI4I457.js";
import "./chunk-CHJ5BV6S.js";
} from "./chunk-AWNKEY2Y.js";
import "./chunk-XP22GJHQ.js";
import "./chunk-NYZY7JGI.js";
import "./chunk-FNEVJCCX.js";
import "./chunk-R33GOAXK.js";
import "./chunk-5SXTVVUG.js";
import "./chunk-BUI4I457.js";
import "./chunk-CHJ5BV6S.js";
import "./chunk-WHHJWK6B.js";
import "./chunk-6SIVX7OU.js";
import "./chunk-NGEE2U2J.js";
import {
cleanAndMerge,
random,
utils_default
} from "./chunk-QVVRGVV3.js";
} from "./chunk-SHNTMSU6.js";
import "./chunk-CMK64ICG.js";
import {
clear,
@ -37,12 +36,13 @@ import {
setDiagramTitle,
setupGraphViewbox2
} from "./chunk-BFCVI5XI.js";
import "./chunk-M5X7JH4I.js";
import {
__name,
log,
select_default
} from "./chunk-I65GBZ6F.js";
import "./chunk-NGEE2U2J.js";
import "./chunk-M5X7JH4I.js";
import {
__spreadProps,
__spreadValues
@ -1766,4 +1766,4 @@ var diagram = {
export {
diagram
};
//# sourceMappingURL=gitGraphDiagram-NY62KEGX-67QA5ASO.js.map
//# sourceMappingURL=gitGraphDiagram-NY62KEGX-OS3GW3H5.js.map

View File

@ -1,30 +1,30 @@
import {
parse
} from "./chunk-VGVCR5QM.js";
import "./chunk-5SXTVVUG.js";
import "./chunk-BUI4I457.js";
import "./chunk-CHJ5BV6S.js";
} from "./chunk-AWNKEY2Y.js";
import "./chunk-XP22GJHQ.js";
import "./chunk-NYZY7JGI.js";
import "./chunk-FNEVJCCX.js";
import "./chunk-R33GOAXK.js";
import "./chunk-5SXTVVUG.js";
import "./chunk-BUI4I457.js";
import "./chunk-CHJ5BV6S.js";
import "./chunk-WHHJWK6B.js";
import "./chunk-6SIVX7OU.js";
import {
package_default
} from "./chunk-BSULYXPT.js";
import {
selectSvgElement
} from "./chunk-B5NQPFQG.js";
import "./chunk-6SIVX7OU.js";
import "./chunk-NGEE2U2J.js";
import {
configureSvgSize
} from "./chunk-BFCVI5XI.js";
import "./chunk-M5X7JH4I.js";
import {
__name,
log
} from "./chunk-I65GBZ6F.js";
import "./chunk-NGEE2U2J.js";
import "./chunk-M5X7JH4I.js";
import "./chunk-TKSB4YUA.js";
// node_modules/mermaid/dist/chunks/mermaid.core/infoDiagram-F6ZHWCRC.mjs
@ -57,4 +57,4 @@ var diagram = {
export {
diagram
};
//# sourceMappingURL=infoDiagram-F6ZHWCRC-WO5AQYKA.js.map
//# sourceMappingURL=infoDiagram-F6ZHWCRC-URQIBBZD.js.map

View File

@ -1,12 +1,12 @@
import {
getIconStyles
} from "./chunk-I4QIIVJ7.js";
import {
drawBackgroundRect,
drawRect,
drawText,
getNoteRect
} from "./chunk-BETRN5NS.js";
import {
getIconStyles
} from "./chunk-I4QIIVJ7.js";
import "./chunk-CMK64ICG.js";
import {
clear,
@ -1299,4 +1299,4 @@ var diagram = {
export {
diagram
};
//# sourceMappingURL=journeyDiagram-XKPGCS4Q-TGUXGKSG.js.map
//# sourceMappingURL=journeyDiagram-XKPGCS4Q-DRJVBRZY.js.map

View File

@ -12,11 +12,11 @@ import {
insertCluster,
insertNode,
positionNode
} from "./chunk-JJ4TL56I.js";
} from "./chunk-2WFBHHKP.js";
import "./chunk-EUUYHBKV.js";
import "./chunk-FTTOYZOY.js";
import "./chunk-NMWDZEZO.js";
import "./chunk-QVVRGVV3.js";
import "./chunk-XIFRTXJX.js";
import "./chunk-SHNTMSU6.js";
import "./chunk-CMK64ICG.js";
import {
darken_default,
@ -27,11 +27,11 @@ import {
sanitizeText,
setupGraphViewbox
} from "./chunk-BFCVI5XI.js";
import "./chunk-M5X7JH4I.js";
import {
__name,
log
} from "./chunk-I65GBZ6F.js";
import "./chunk-M5X7JH4I.js";
import "./chunk-TKSB4YUA.js";
// node_modules/mermaid/dist/chunks/mermaid.core/kanban-definition-3W4ZIXB7.mjs
@ -1122,4 +1122,4 @@ var diagram = {
export {
diagram
};
//# sourceMappingURL=kanban-definition-3W4ZIXB7-GUMHX2OD.js.map
//# sourceMappingURL=kanban-definition-3W4ZIXB7-IDLHJXSC.js.map

View File

@ -0,0 +1,103 @@
import "./chunk-TKSB4YUA.js";
// node_modules/markdown-it-anchor/dist/markdownItAnchor.mjs
var e = false;
var n = { false: "push", true: "unshift", after: "push", before: "unshift" };
var t = { isPermalinkSymbol: true };
function r(r2, a2, i2, l2) {
var o2;
if (!e) {
var c2 = "Using deprecated markdown-it-anchor permalink option, see https://github.com/valeriangalliat/markdown-it-anchor#permalinks";
"object" == typeof process && process && process.emitWarning ? process.emitWarning(c2) : console.warn(c2), e = true;
}
var s2 = [Object.assign(new i2.Token("link_open", "a", 1), { attrs: [].concat(a2.permalinkClass ? [["class", a2.permalinkClass]] : [], [["href", a2.permalinkHref(r2, i2)]], Object.entries(a2.permalinkAttrs(r2, i2))) }), Object.assign(new i2.Token("html_block", "", 0), { content: a2.permalinkSymbol, meta: t }), new i2.Token("link_close", "a", -1)];
a2.permalinkSpace && i2.tokens[l2 + 1].children[n[a2.permalinkBefore]](Object.assign(new i2.Token("text", "", 0), { content: " " })), (o2 = i2.tokens[l2 + 1].children)[n[a2.permalinkBefore]].apply(o2, s2);
}
function a(e2) {
return "#" + e2;
}
function i(e2) {
return {};
}
var l = { class: "header-anchor", symbol: "#", renderHref: a, renderAttrs: i };
function o(e2) {
function n2(t2) {
return t2 = Object.assign({}, n2.defaults, t2), function(n3, r2, a2, i2) {
return e2(n3, t2, r2, a2, i2);
};
}
return n2.defaults = Object.assign({}, l), n2.renderPermalinkImpl = e2, n2;
}
var c = o(function(e2, r2, a2, i2, l2) {
var o2, c2 = [Object.assign(new i2.Token("link_open", "a", 1), { attrs: [].concat(r2.class ? [["class", r2.class]] : [], [["href", r2.renderHref(e2, i2)]], r2.ariaHidden ? [["aria-hidden", "true"]] : [], Object.entries(r2.renderAttrs(e2, i2))) }), Object.assign(new i2.Token("html_inline", "", 0), { content: r2.symbol, meta: t }), new i2.Token("link_close", "a", -1)];
if (r2.space) {
var s2 = "string" == typeof r2.space ? r2.space : " ";
i2.tokens[l2 + 1].children[n[r2.placement]](Object.assign(new i2.Token("string" == typeof r2.space ? "html_inline" : "text", "", 0), { content: s2 }));
}
(o2 = i2.tokens[l2 + 1].children)[n[r2.placement]].apply(o2, c2);
});
Object.assign(c.defaults, { space: true, placement: "after", ariaHidden: false });
var s = o(c.renderPermalinkImpl);
s.defaults = Object.assign({}, c.defaults, { ariaHidden: true });
var u = o(function(e2, n2, t2, r2, a2) {
var i2 = [Object.assign(new r2.Token("link_open", "a", 1), { attrs: [].concat(n2.class ? [["class", n2.class]] : [], [["href", n2.renderHref(e2, r2)]], Object.entries(n2.renderAttrs(e2, r2))) })].concat(n2.safariReaderFix ? [new r2.Token("span_open", "span", 1)] : [], r2.tokens[a2 + 1].children, n2.safariReaderFix ? [new r2.Token("span_close", "span", -1)] : [], [new r2.Token("link_close", "a", -1)]);
r2.tokens[a2 + 1] = Object.assign(new r2.Token("inline", "", 0), { children: i2 });
});
Object.assign(u.defaults, { safariReaderFix: false });
var d = o(function(e2, r2, a2, i2, l2) {
var o2;
if (!["visually-hidden", "aria-label", "aria-describedby", "aria-labelledby"].includes(r2.style)) throw new Error("`permalink.linkAfterHeader` called with unknown style option `" + r2.style + "`");
if (!["aria-describedby", "aria-labelledby"].includes(r2.style) && !r2.assistiveText) throw new Error("`permalink.linkAfterHeader` called without the `assistiveText` option in `" + r2.style + "` style");
if ("visually-hidden" === r2.style && !r2.visuallyHiddenClass) throw new Error("`permalink.linkAfterHeader` called without the `visuallyHiddenClass` option in `visually-hidden` style");
var c2 = i2.tokens[l2 + 1].children.filter(function(e3) {
return "text" === e3.type || "code_inline" === e3.type;
}).reduce(function(e3, n2) {
return e3 + n2.content;
}, ""), s2 = [], u2 = [];
if (r2.class && u2.push(["class", r2.class]), u2.push(["href", r2.renderHref(e2, i2)]), u2.push.apply(u2, Object.entries(r2.renderAttrs(e2, i2))), "visually-hidden" === r2.style) {
if (s2.push(Object.assign(new i2.Token("span_open", "span", 1), { attrs: [["class", r2.visuallyHiddenClass]] }), Object.assign(new i2.Token("text", "", 0), { content: r2.assistiveText(c2) }), new i2.Token("span_close", "span", -1)), r2.space) {
var d2 = "string" == typeof r2.space ? r2.space : " ";
s2[n[r2.placement]](Object.assign(new i2.Token("string" == typeof r2.space ? "html_inline" : "text", "", 0), { content: d2 }));
}
s2[n[r2.placement]](Object.assign(new i2.Token("span_open", "span", 1), { attrs: [["aria-hidden", "true"]] }), Object.assign(new i2.Token("html_inline", "", 0), { content: r2.symbol, meta: t }), new i2.Token("span_close", "span", -1));
} else s2.push(Object.assign(new i2.Token("html_inline", "", 0), { content: r2.symbol, meta: t }));
"aria-label" === r2.style ? u2.push(["aria-label", r2.assistiveText(c2)]) : ["aria-describedby", "aria-labelledby"].includes(r2.style) && u2.push([r2.style, e2]);
var f2 = [Object.assign(new i2.Token("link_open", "a", 1), { attrs: u2 })].concat(s2, [new i2.Token("link_close", "a", -1)]);
(o2 = i2.tokens).splice.apply(o2, [l2 + 3, 0].concat(f2)), r2.wrapper && (i2.tokens.splice(l2, 0, Object.assign(new i2.Token("html_block", "", 0), { content: r2.wrapper[0] + "\n" })), i2.tokens.splice(l2 + 3 + f2.length + 1, 0, Object.assign(new i2.Token("html_block", "", 0), { content: r2.wrapper[1] + "\n" })));
});
function f(e2, n2, t2, r2) {
var a2 = e2, i2 = r2;
if (t2 && Object.prototype.hasOwnProperty.call(n2, a2)) throw new Error("User defined `id` attribute `" + e2 + "` is not unique. Please fix it in your Markdown to continue.");
for (; Object.prototype.hasOwnProperty.call(n2, a2); ) a2 = e2 + "-" + i2, i2 += 1;
return n2[a2] = true, a2;
}
function p(e2, n2) {
n2 = Object.assign({}, p.defaults, n2), e2.core.ruler.push("anchor", function(e3) {
for (var t2, a2 = {}, i2 = e3.tokens, l2 = Array.isArray(n2.level) ? (t2 = n2.level, function(e4) {
return t2.includes(e4);
}) : /* @__PURE__ */ (function(e4) {
return function(n3) {
return n3 >= e4;
};
})(n2.level), o2 = 0; o2 < i2.length; o2++) {
var c2 = i2[o2];
if ("heading_open" === c2.type && l2(Number(c2.tag.substr(1)))) {
var s2 = n2.getTokensText(i2[o2 + 1].children), u2 = c2.attrGet("id");
u2 = null == u2 ? f(n2.slugify(s2), a2, false, n2.uniqueSlugStartIndex) : f(u2, a2, true, n2.uniqueSlugStartIndex), c2.attrSet("id", u2), false !== n2.tabIndex && c2.attrSet("tabindex", "" + n2.tabIndex), "function" == typeof n2.permalink ? n2.permalink(u2, n2, e3, o2) : (n2.permalink || n2.renderPermalink && n2.renderPermalink !== r) && n2.renderPermalink(u2, n2, e3, o2), o2 = i2.indexOf(c2), n2.callback && n2.callback(c2, { slug: u2, title: s2 });
}
}
});
}
Object.assign(d.defaults, { style: "visually-hidden", space: true, placement: "after", wrapper: null }), p.permalink = { __proto__: null, legacy: r, renderHref: a, renderAttrs: i, makePermalink: o, linkInsideHeader: c, ariaHidden: s, headerLink: u, linkAfterHeader: d }, p.defaults = { level: 1, slugify: function(e2) {
return encodeURIComponent(String(e2).trim().toLowerCase().replace(/\s+/g, "-"));
}, uniqueSlugStartIndex: 1, tabIndex: "-1", getTokensText: function(e2) {
return e2.filter(function(e3) {
return ["text", "code_inline"].includes(e3.type);
}).map(function(e3) {
return e3.content;
}).join("");
}, permalink: false, renderPermalink: r, permalinkClass: s.defaults.class, permalinkSpace: s.defaults.space, permalinkSymbol: "¶", permalinkBefore: "before" === s.defaults.placement, permalinkHref: s.defaults.renderHref, permalinkAttrs: s.defaults.renderAttrs }, p.default = p;
export {
p as default
};
//# sourceMappingURL=markdown-it-anchor.js.map

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,832 @@
import {
__commonJS
} from "./chunk-TKSB4YUA.js";
// node_modules/markdown-it-attrs/utils.js
var require_utils = __commonJS({
"node_modules/markdown-it-attrs/utils.js"(exports) {
exports.getAttrs = function(str, start, options) {
const allowedKeyChars = /[^\t\n\f />"'=]/;
const pairSeparator = " ";
const keySeparator = "=";
const classChar = ".";
const idChar = "#";
const attrs = [];
let key = "";
let value = "";
let parsingKey = true;
let valueInsideQuotes = false;
for (let i = start + options.leftDelimiter.length; i < str.length; i++) {
if (str.slice(i, i + options.rightDelimiter.length) === options.rightDelimiter) {
if (key !== "") {
attrs.push([key, value]);
}
break;
}
const char_ = str.charAt(i);
if (char_ === keySeparator && parsingKey) {
parsingKey = false;
continue;
}
if (char_ === classChar && key === "") {
if (str.charAt(i + 1) === classChar) {
key = "css-module";
i += 1;
} else {
key = "class";
}
parsingKey = false;
continue;
}
if (char_ === idChar && key === "") {
key = "id";
parsingKey = false;
continue;
}
if (char_ === '"' && value === "" && !valueInsideQuotes) {
valueInsideQuotes = true;
continue;
}
if (char_ === '"' && valueInsideQuotes) {
valueInsideQuotes = false;
continue;
}
if (char_ === pairSeparator && !valueInsideQuotes) {
if (key === "") {
continue;
}
attrs.push([key, value]);
key = "";
value = "";
parsingKey = true;
continue;
}
if (parsingKey && char_.search(allowedKeyChars) === -1) {
continue;
}
if (parsingKey) {
key += char_;
continue;
}
value += char_;
}
if (options.allowedAttributes && options.allowedAttributes.length) {
const allowedAttributes = options.allowedAttributes;
return attrs.filter(function(attrPair) {
const attr = attrPair[0];
function isAllowedAttribute(allowedAttribute) {
return attr === allowedAttribute || allowedAttribute instanceof RegExp && allowedAttribute.test(attr);
}
return allowedAttributes.some(isAllowedAttribute);
});
}
return attrs;
};
exports.addAttrs = function(attrs, token) {
for (let j = 0, l = attrs.length; j < l; ++j) {
const key = attrs[j][0];
if (key === "class") {
token.attrJoin("class", attrs[j][1]);
} else if (key === "css-module") {
token.attrJoin("css-module", attrs[j][1]);
} else {
token.attrPush(attrs[j]);
}
}
return token;
};
exports.hasDelimiters = function(where, options) {
if (!where) {
throw new Error('Parameter `where` not passed. Should be "start", "end" or "only".');
}
return function(str) {
const minCurlyLength = options.leftDelimiter.length + 1 + options.rightDelimiter.length;
if (!str || typeof str !== "string" || str.length < minCurlyLength) {
return false;
}
function validCurlyLength(curly) {
const isClass = curly.charAt(options.leftDelimiter.length) === ".";
const isId = curly.charAt(options.leftDelimiter.length) === "#";
return isClass || isId ? curly.length >= minCurlyLength + 1 : curly.length >= minCurlyLength;
}
let start, end, slice, nextChar;
const rightDelimiterMinimumShift = minCurlyLength - options.rightDelimiter.length;
switch (where) {
case "start":
slice = str.slice(0, options.leftDelimiter.length);
start = slice === options.leftDelimiter ? 0 : -1;
end = start === -1 ? -1 : str.indexOf(options.rightDelimiter, rightDelimiterMinimumShift);
nextChar = str.charAt(end + options.rightDelimiter.length);
if (nextChar && options.rightDelimiter.indexOf(nextChar) !== -1) {
end = -1;
}
break;
case "end":
start = str.lastIndexOf(options.leftDelimiter);
end = start === -1 ? -1 : str.indexOf(options.rightDelimiter, start + rightDelimiterMinimumShift);
end = end === str.length - options.rightDelimiter.length ? end : -1;
break;
case "only":
slice = str.slice(0, options.leftDelimiter.length);
start = slice === options.leftDelimiter ? 0 : -1;
slice = str.slice(str.length - options.rightDelimiter.length);
end = slice === options.rightDelimiter ? str.length - options.rightDelimiter.length : -1;
break;
default:
throw new Error(`Unexpected case ${where}, expected 'start', 'end' or 'only'`);
}
return start !== -1 && end !== -1 && validCurlyLength(str.substring(start, end + options.rightDelimiter.length));
};
};
exports.removeDelimiter = function(str, options) {
const start = escapeRegExp(options.leftDelimiter);
const end = escapeRegExp(options.rightDelimiter);
const curly = new RegExp(
"[ \\n]?" + start + "[^" + start + end + "]+" + end + "$"
);
const pos = str.search(curly);
return pos !== -1 ? str.slice(0, pos) : str;
};
function escapeRegExp(s) {
return s.replace(/[-/\\^$*+?.()|[\]{}]/g, "\\$&");
}
exports.escapeRegExp = escapeRegExp;
exports.getMatchingOpeningToken = function(tokens, i) {
if (tokens[i].type === "softbreak") {
return false;
}
if (tokens[i].nesting === 0) {
return tokens[i];
}
const level = tokens[i].level;
const type = tokens[i].type.replace("_close", "_open");
for (; i >= 0; --i) {
if (tokens[i].type === type && tokens[i].level === level) {
return tokens[i];
}
}
return false;
};
var HTML_ESCAPE_TEST_RE = /[&<>"]/;
var HTML_ESCAPE_REPLACE_RE = /[&<>"]/g;
var HTML_REPLACEMENTS = {
"&": "&amp;",
"<": "&lt;",
">": "&gt;",
'"': "&quot;"
};
function replaceUnsafeChar(ch) {
return HTML_REPLACEMENTS[ch];
}
exports.escapeHtml = function(str) {
if (HTML_ESCAPE_TEST_RE.test(str)) {
return str.replace(HTML_ESCAPE_REPLACE_RE, replaceUnsafeChar);
}
return str;
};
}
});
// node_modules/markdown-it-attrs/patterns.js
var require_patterns = __commonJS({
"node_modules/markdown-it-attrs/patterns.js"(exports, module) {
"use strict";
var utils = require_utils();
module.exports = (options) => {
const __hr = new RegExp("^ {0,3}[-*_]{3,} ?" + utils.escapeRegExp(options.leftDelimiter) + "[^" + utils.escapeRegExp(options.rightDelimiter) + "]");
return [
{
/**
* ```python {.cls}
* for i in range(10):
* print(i)
* ```
*/
name: "fenced code blocks",
tests: [
{
shift: 0,
block: true,
info: utils.hasDelimiters("end", options)
}
],
transform: (tokens, i) => {
const token = tokens[i];
const start = token.info.lastIndexOf(options.leftDelimiter);
const attrs = utils.getAttrs(token.info, start, options);
utils.addAttrs(attrs, token);
token.info = utils.removeDelimiter(token.info, options);
}
},
{
/**
* bla `click()`{.c} ![](img.png){.d}
*
* differs from 'inline attributes' as it does
* not have a closing tag (nesting: -1)
*/
name: "inline nesting 0",
tests: [
{
shift: 0,
type: "inline",
children: [
{
shift: -1,
type: (str) => str === "image" || str === "code_inline"
},
{
shift: 0,
type: "text",
content: utils.hasDelimiters("start", options)
}
]
}
],
/**
* @param {!number} j
*/
transform: (tokens, i, j) => {
const token = tokens[i].children[j];
const endChar = token.content.indexOf(options.rightDelimiter);
const attrToken = tokens[i].children[j - 1];
const attrs = utils.getAttrs(token.content, 0, options);
utils.addAttrs(attrs, attrToken);
if (token.content.length === endChar + options.rightDelimiter.length) {
tokens[i].children.splice(j, 1);
} else {
token.content = token.content.slice(endChar + options.rightDelimiter.length);
}
}
},
{
/**
* | h1 |
* | -- |
* | c1 |
*
* {.c}
*/
name: "tables",
tests: [
{
// let this token be i, such that for-loop continues at
// next token after tokens.splice
shift: 0,
type: "table_close"
},
{
shift: 1,
type: "paragraph_open"
},
{
shift: 2,
type: "inline",
content: utils.hasDelimiters("only", options)
}
],
transform: (tokens, i) => {
const token = tokens[i + 2];
const tableOpen = utils.getMatchingOpeningToken(tokens, i);
const attrs = utils.getAttrs(token.content, 0, options);
utils.addAttrs(attrs, tableOpen);
tokens.splice(i + 1, 3);
}
},
{
/**
* | A | B |
* | -- | -- |
* | 1 | 2 |
*
* | C | D |
* | -- | -- |
*
* only `| A | B |` sets the colsnum metadata
*/
name: "tables thead metadata",
tests: [
{
shift: 0,
type: "tr_close"
},
{
shift: 1,
type: "thead_close"
},
{
shift: 2,
type: "tbody_open"
}
],
transform: (tokens, i) => {
const tr = utils.getMatchingOpeningToken(tokens, i);
const th = tokens[i - 1];
let colsnum = 0;
let n = i;
while (--n) {
if (tokens[n] === tr) {
tokens[n - 1].meta = Object.assign({}, tokens[n + 2].meta, { colsnum });
break;
}
colsnum += (tokens[n].level === th.level && tokens[n].type === th.type) >> 0;
}
tokens[i + 2].meta = Object.assign({}, tokens[i + 2].meta, { colsnum });
}
},
{
/**
* | A | B | C | D |
* | -- | -- | -- | -- |
* | 1 | 11 | 111 | 1111 {rowspan=3} |
* | 2 {colspan=2 rowspan=2} | 22 | 222 | 2222 |
* | 3 | 33 | 333 | 3333 |
*/
name: "tables tbody calculate",
tests: [
{
shift: 0,
type: "tbody_close",
hidden: false
}
],
/**
* @param {number} i index of the tbody ending
*/
transform: (tokens, i) => {
let idx = i - 2;
while (idx > 0 && "tbody_open" !== tokens[--idx].type) ;
const calc = tokens[idx].meta.colsnum >> 0;
if (calc < 2) {
return;
}
const level = tokens[i].level + 2;
for (let n = idx; n < i; n++) {
if (tokens[n].level > level) {
continue;
}
const token = tokens[n];
const rows = token.hidden ? 0 : token.attrGet("rowspan") >> 0;
const cols = token.hidden ? 0 : token.attrGet("colspan") >> 0;
if (rows > 1) {
let colsnum = calc - (cols > 0 ? cols : 1);
for (let k = n, num = rows; k < i, num > 1; k++) {
if ("tr_open" == tokens[k].type) {
tokens[k].meta = Object.assign({}, tokens[k].meta);
if (tokens[k].meta && tokens[k].meta.colsnum) {
colsnum -= 1;
}
tokens[k].meta.colsnum = colsnum;
num--;
}
}
}
if ("tr_open" == token.type && token.meta && token.meta.colsnum) {
const max = token.meta.colsnum;
for (let k = n, num = 0; k < i; k++) {
if ("td_open" == tokens[k].type) {
num += 1;
} else if ("tr_close" == tokens[k].type) {
break;
}
num > max && (tokens[k].hidden || hidden(tokens[k]));
}
}
if (cols > 1) {
const one = [];
let end = n + 3;
let num = calc;
for (let k = n; k > idx; k--) {
if ("tr_open" == tokens[k].type) {
num = tokens[k].meta && tokens[k].meta.colsnum || num;
break;
} else if ("td_open" === tokens[k].type) {
one.unshift(k);
}
}
for (let k = n + 2; k < i; k++) {
if ("tr_close" == tokens[k].type) {
end = k;
break;
} else if ("td_open" == tokens[k].type) {
one.push(k);
}
}
const off = one.indexOf(n);
let real = num - off;
real = real > cols ? cols : real;
cols > real && token.attrSet("colspan", real + "");
for (let k = one.slice(num + 1 - calc - real)[0]; k < end; k++) {
tokens[k].hidden || hidden(tokens[k]);
}
}
}
}
},
{
/**
* *emphasis*{.with attrs=1}
*/
name: "inline attributes",
tests: [
{
shift: 0,
type: "inline",
children: [
{
shift: -1,
nesting: -1
// closing inline tag, </em>{.a}
},
{
shift: 0,
type: "text",
content: utils.hasDelimiters("start", options)
}
]
}
],
/**
* @param {!number} j
*/
transform: (tokens, i, j) => {
const token = tokens[i].children[j];
const content = token.content;
const attrs = utils.getAttrs(content, 0, options);
const openingToken = utils.getMatchingOpeningToken(tokens[i].children, j - 1);
utils.addAttrs(attrs, openingToken);
token.content = content.slice(content.indexOf(options.rightDelimiter) + options.rightDelimiter.length);
}
},
{
/**
* - item
* {.a}
*/
name: "list softbreak",
tests: [
{
shift: -2,
type: "list_item_open"
},
{
shift: 0,
type: "inline",
children: [
{
position: -2,
type: "softbreak"
},
{
position: -1,
type: "text",
content: utils.hasDelimiters("only", options)
}
]
}
],
/**
* @param {!number} j
*/
transform: (tokens, i, j) => {
const token = tokens[i].children[j];
const content = token.content;
const attrs = utils.getAttrs(content, 0, options);
let ii = i - 2;
while (tokens[ii - 1] && tokens[ii - 1].type !== "ordered_list_open" && tokens[ii - 1].type !== "bullet_list_open") {
ii--;
}
utils.addAttrs(attrs, tokens[ii - 1]);
tokens[i].children = tokens[i].children.slice(0, -2);
}
},
{
/**
* - nested list
* - with double \n
* {.a} <-- apply to nested ul
*
* {.b} <-- apply to root <ul>
*/
name: "list double softbreak",
tests: [
{
// let this token be i = 0 so that we can erase
// the <p>{.a}</p> tokens below
shift: 0,
type: (str) => str === "bullet_list_close" || str === "ordered_list_close"
},
{
shift: 1,
type: "paragraph_open"
},
{
shift: 2,
type: "inline",
content: utils.hasDelimiters("only", options),
children: (arr) => arr.length === 1
},
{
shift: 3,
type: "paragraph_close"
}
],
transform: (tokens, i) => {
const token = tokens[i + 2];
const content = token.content;
const attrs = utils.getAttrs(content, 0, options);
const openingToken = utils.getMatchingOpeningToken(tokens, i);
utils.addAttrs(attrs, openingToken);
tokens.splice(i + 1, 3);
}
},
{
/**
* - end of {.list-item}
*/
name: "list item end",
tests: [
{
shift: -2,
type: "list_item_open"
},
{
shift: 0,
type: "inline",
children: [
{
position: -1,
type: "text",
content: utils.hasDelimiters("end", options)
}
]
}
],
/**
* @param {!number} j
*/
transform: (tokens, i, j) => {
const token = tokens[i].children[j];
const content = token.content;
const attrs = utils.getAttrs(content, content.lastIndexOf(options.leftDelimiter), options);
utils.addAttrs(attrs, tokens[i - 2]);
const trimmed = content.slice(0, content.lastIndexOf(options.leftDelimiter));
token.content = last(trimmed) !== " " ? trimmed : trimmed.slice(0, -1);
}
},
{
/**
* something with softbreak
* {.cls}
*/
name: "\n{.a} softbreak then curly in start",
tests: [
{
shift: 0,
type: "inline",
children: [
{
position: -2,
type: "softbreak"
},
{
position: -1,
type: "text",
content: utils.hasDelimiters("only", options)
}
]
}
],
/**
* @param {!number} j
*/
transform: (tokens, i, j) => {
const token = tokens[i].children[j];
const attrs = utils.getAttrs(token.content, 0, options);
let ii = i + 1;
while (tokens[ii + 1] && tokens[ii + 1].nesting === -1) {
ii++;
}
const openingToken = utils.getMatchingOpeningToken(tokens, ii);
utils.addAttrs(attrs, openingToken);
tokens[i].children = tokens[i].children.slice(0, -2);
}
},
{
/**
* horizontal rule --- {#id}
*/
name: "horizontal rule",
tests: [
{
shift: 0,
type: "paragraph_open"
},
{
shift: 1,
type: "inline",
children: (arr) => arr.length === 1,
content: (str) => str.match(__hr) !== null
},
{
shift: 2,
type: "paragraph_close"
}
],
transform: (tokens, i) => {
const token = tokens[i];
token.type = "hr";
token.tag = "hr";
token.nesting = 0;
const content = tokens[i + 1].content;
const start = content.lastIndexOf(options.leftDelimiter);
const attrs = utils.getAttrs(content, start, options);
utils.addAttrs(attrs, token);
token.markup = content;
tokens.splice(i + 1, 2);
}
},
{
/**
* end of {.block}
*/
name: "end of block",
tests: [
{
shift: 0,
type: "inline",
children: [
{
position: -1,
content: utils.hasDelimiters("end", options),
type: (t) => t !== "code_inline" && t !== "math_inline"
}
]
}
],
/**
* @param {!number} j
*/
transform: (tokens, i, j) => {
const token = tokens[i].children[j];
const content = token.content;
const attrs = utils.getAttrs(content, content.lastIndexOf(options.leftDelimiter), options);
let ii = i + 1;
do
if (tokens[ii] && tokens[ii].nesting === -1) {
break;
}
while (ii++ < tokens.length);
const openingToken = utils.getMatchingOpeningToken(tokens, ii);
utils.addAttrs(attrs, openingToken);
const trimmed = content.slice(0, content.lastIndexOf(options.leftDelimiter));
token.content = last(trimmed) !== " " ? trimmed : trimmed.slice(0, -1);
}
}
];
};
function last(arr) {
return arr.slice(-1)[0];
}
function hidden(token) {
token.hidden = true;
token.children && token.children.forEach((t) => (t.content = "", hidden(t), void 0));
}
}
});
// node_modules/markdown-it-attrs/index.js
var require_markdown_it_attrs = __commonJS({
"node_modules/markdown-it-attrs/index.js"(exports, module) {
var patternsConfig = require_patterns();
var defaultOptions = {
leftDelimiter: "{",
rightDelimiter: "}",
allowedAttributes: []
};
module.exports = function attributes(md, options_) {
let options = Object.assign({}, defaultOptions);
options = Object.assign(options, options_);
const patterns = patternsConfig(options);
function curlyAttrs(state) {
const tokens = state.tokens;
for (let i = 0; i < tokens.length; i++) {
for (let p = 0; p < patterns.length; p++) {
const pattern = patterns[p];
let j = null;
const match = pattern.tests.every((t) => {
const res = test(tokens, i, t);
if (res.j !== null) {
j = res.j;
}
return res.match;
});
if (match) {
try {
pattern.transform(tokens, i, j);
if (pattern.name === "inline attributes" || pattern.name === "inline nesting 0") {
p--;
}
} catch (error) {
console.error(`markdown-it-attrs: Error in pattern '${pattern.name}': ${error.message}`);
console.error(error.stack);
}
}
}
}
}
md.core.ruler.before("linkify", "curly_attributes", curlyAttrs);
};
function test(tokens, i, t) {
const res = {
match: false,
j: null
// position of child
};
const ii = t.shift !== void 0 ? i + t.shift : t.position;
if (t.shift !== void 0 && ii < 0) {
return res;
}
const token = get(tokens, ii);
if (token === void 0) {
return res;
}
for (const key of Object.keys(t)) {
if (key === "shift" || key === "position") {
continue;
}
if (token[key] === void 0) {
return res;
}
if (key === "children" && isArrayOfObjects(t.children)) {
if (token.children.length === 0) {
return res;
}
let match;
const childTests = t.children;
const children = token.children;
if (childTests.every((tt) => tt.position !== void 0)) {
match = childTests.every((tt) => test(children, tt.position, tt).match);
if (match) {
const j = last(childTests).position;
res.j = j >= 0 ? j : children.length + j;
}
} else {
for (let j = 0; j < children.length; j++) {
match = childTests.every((tt) => test(children, j, tt).match);
if (match) {
res.j = j;
break;
}
}
}
if (match === false) {
return res;
}
continue;
}
switch (typeof t[key]) {
case "boolean":
case "number":
case "string":
if (token[key] !== t[key]) {
return res;
}
break;
case "function":
if (!t[key](token[key])) {
return res;
}
break;
case "object":
if (isArrayOfFunctions(t[key])) {
const r = t[key].every((tt) => tt(token[key]));
if (r === false) {
return res;
}
break;
}
// fall through for objects !== arrays of functions
default:
throw new Error(`Unknown type of pattern test (key: ${key}). Test should be of type boolean, number, string, function or array of functions.`);
}
}
res.match = true;
return res;
}
function isArrayOfObjects(arr) {
return Array.isArray(arr) && arr.length && arr.every((i) => typeof i === "object");
}
function isArrayOfFunctions(arr) {
return Array.isArray(arr) && arr.length && arr.every((i) => typeof i === "function");
}
function get(arr, n) {
return n >= 0 ? arr[n] : arr[arr.length + n];
}
function last(arr) {
return arr.slice(-1)[0] || {};
}
}
});
export default require_markdown_it_attrs();
//# sourceMappingURL=markdown-it-attrs.js.map

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,106 @@
import {
__commonJS
} from "./chunk-TKSB4YUA.js";
// node_modules/markdown-it-task-lists/index.js
var require_markdown_it_task_lists = __commonJS({
"node_modules/markdown-it-task-lists/index.js"(exports, module) {
var disableCheckboxes = true;
var useLabelWrapper = false;
var useLabelAfter = false;
module.exports = function(md, options) {
if (options) {
disableCheckboxes = !options.enabled;
useLabelWrapper = !!options.label;
useLabelAfter = !!options.labelAfter;
}
md.core.ruler.after("inline", "github-task-lists", function(state) {
var tokens = state.tokens;
for (var i = 2; i < tokens.length; i++) {
if (isTodoItem(tokens, i)) {
todoify(tokens[i], state.Token);
attrSet(tokens[i - 2], "class", "task-list-item" + (!disableCheckboxes ? " enabled" : ""));
attrSet(tokens[parentToken(tokens, i - 2)], "class", "contains-task-list");
}
}
});
};
function attrSet(token, name, value) {
var index = token.attrIndex(name);
var attr = [name, value];
if (index < 0) {
token.attrPush(attr);
} else {
token.attrs[index] = attr;
}
}
function parentToken(tokens, index) {
var targetLevel = tokens[index].level - 1;
for (var i = index - 1; i >= 0; i--) {
if (tokens[i].level === targetLevel) {
return i;
}
}
return -1;
}
function isTodoItem(tokens, index) {
return isInline(tokens[index]) && isParagraph(tokens[index - 1]) && isListItem(tokens[index - 2]) && startsWithTodoMarkdown(tokens[index]);
}
function todoify(token, TokenConstructor) {
token.children.unshift(makeCheckbox(token, TokenConstructor));
token.children[1].content = token.children[1].content.slice(3);
token.content = token.content.slice(3);
if (useLabelWrapper) {
if (useLabelAfter) {
token.children.pop();
var id = "task-item-" + Math.ceil(Math.random() * (1e4 * 1e3) - 1e3);
token.children[0].content = token.children[0].content.slice(0, -1) + ' id="' + id + '">';
token.children.push(afterLabel(token.content, id, TokenConstructor));
} else {
token.children.unshift(beginLabel(TokenConstructor));
token.children.push(endLabel(TokenConstructor));
}
}
}
function makeCheckbox(token, TokenConstructor) {
var checkbox = new TokenConstructor("html_inline", "", 0);
var disabledAttr = disableCheckboxes ? ' disabled="" ' : "";
if (token.content.indexOf("[ ] ") === 0) {
checkbox.content = '<input class="task-list-item-checkbox"' + disabledAttr + 'type="checkbox">';
} else if (token.content.indexOf("[x] ") === 0 || token.content.indexOf("[X] ") === 0) {
checkbox.content = '<input class="task-list-item-checkbox" checked=""' + disabledAttr + 'type="checkbox">';
}
return checkbox;
}
function beginLabel(TokenConstructor) {
var token = new TokenConstructor("html_inline", "", 0);
token.content = "<label>";
return token;
}
function endLabel(TokenConstructor) {
var token = new TokenConstructor("html_inline", "", 0);
token.content = "</label>";
return token;
}
function afterLabel(content, id, TokenConstructor) {
var token = new TokenConstructor("html_inline", "", 0);
token.content = '<label class="task-list-item-label" for="' + id + '">' + content + "</label>";
token.attrs = [{ for: id }];
return token;
}
function isInline(token) {
return token.type === "inline";
}
function isParagraph(token) {
return token.type === "paragraph_open";
}
function isListItem(token) {
return token.type === "list_item_open";
}
function startsWithTodoMarkdown(token) {
return token.content.indexOf("[ ] ") === 0 || token.content.indexOf("[x] ") === 0 || token.content.indexOf("[X] ") === 0;
}
}
});
export default require_markdown_it_task_lists();
//# sourceMappingURL=markdown-it-task-lists.js.map

View File

@ -0,0 +1,7 @@
{
"version": 3,
"sources": ["../../../../../../node_modules/markdown-it-task-lists/index.js"],
"sourcesContent": ["// Markdown-it plugin to render GitHub-style task lists; see\n//\n// https://github.com/blog/1375-task-lists-in-gfm-issues-pulls-comments\n// https://github.com/blog/1825-task-lists-in-all-markdown-documents\n\nvar disableCheckboxes = true;\nvar useLabelWrapper = false;\nvar useLabelAfter = false;\n\nmodule.exports = function(md, options) {\n\tif (options) {\n\t\tdisableCheckboxes = !options.enabled;\n\t\tuseLabelWrapper = !!options.label;\n\t\tuseLabelAfter = !!options.labelAfter;\n\t}\n\n\tmd.core.ruler.after('inline', 'github-task-lists', function(state) {\n\t\tvar tokens = state.tokens;\n\t\tfor (var i = 2; i < tokens.length; i++) {\n\t\t\tif (isTodoItem(tokens, i)) {\n\t\t\t\ttodoify(tokens[i], state.Token);\n\t\t\t\tattrSet(tokens[i-2], 'class', 'task-list-item' + (!disableCheckboxes ? ' enabled' : ''));\n\t\t\t\tattrSet(tokens[parentToken(tokens, i-2)], 'class', 'contains-task-list');\n\t\t\t}\n\t\t}\n\t});\n};\n\nfunction attrSet(token, name, value) {\n\tvar index = token.attrIndex(name);\n\tvar attr = [name, value];\n\n\tif (index < 0) {\n\t\ttoken.attrPush(attr);\n\t} else {\n\t\ttoken.attrs[index] = attr;\n\t}\n}\n\nfunction parentToken(tokens, index) {\n\tvar targetLevel = tokens[index].level - 1;\n\tfor (var i = index - 1; i >= 0; i--) {\n\t\tif (tokens[i].level === targetLevel) {\n\t\t\treturn i;\n\t\t}\n\t}\n\treturn -1;\n}\n\nfunction isTodoItem(tokens, index) {\n\treturn isInline(tokens[index]) &&\n\t isParagraph(tokens[index - 1]) &&\n\t isListItem(tokens[index - 2]) &&\n\t startsWithTodoMarkdown(tokens[index]);\n}\n\nfunction todoify(token, TokenConstructor) {\n\ttoken.children.unshift(makeCheckbox(token, TokenConstructor));\n\ttoken.children[1].content = token.children[1].content.slice(3);\n\ttoken.content = token.content.slice(3);\n\n\tif (useLabelWrapper) {\n\t\tif (useLabelAfter) {\n\t\t\ttoken.children.pop();\n\n\t\t\t// Use large random number as id property of the checkbox.\n\t\t\tvar id = 'task-item-' + Math.ceil(Math.random() * (10000 * 1000) - 1000);\n\t\t\ttoken.children[0].content = token.children[0].content.slice(0, -1) + ' id=\"' + id + '\">';\n\t\t\ttoken.children.push(afterLabel(token.content, id, TokenConstructor));\n\t\t} else {\n\t\t\ttoken.children.unshift(beginLabel(TokenConstructor));\n\t\t\ttoken.children.push(endLabel(TokenConstructor));\n\t\t}\n\t}\n}\n\nfunction makeCheckbox(token, TokenConstructor) {\n\tvar checkbox = new TokenConstructor('html_inline', '', 0);\n\tvar disabledAttr = disableCheckboxes ? ' disabled=\"\" ' : '';\n\tif (token.content.indexOf('[ ] ') === 0) {\n\t\tcheckbox.content = '<input class=\"task-list-item-checkbox\"' + disabledAttr + 'type=\"checkbox\">';\n\t} else if (token.content.indexOf('[x] ') === 0 || token.content.indexOf('[X] ') === 0) {\n\t\tcheckbox.content = '<input class=\"task-list-item-checkbox\" checked=\"\"' + disabledAttr + 'type=\"checkbox\">';\n\t}\n\treturn checkbox;\n}\n\n// these next two functions are kind of hacky; probably should really be a\n// true block-level token with .tag=='label'\nfunction beginLabel(TokenConstructor) {\n\tvar token = new TokenConstructor('html_inline', '', 0);\n\ttoken.content = '<label>';\n\treturn token;\n}\n\nfunction endLabel(TokenConstructor) {\n\tvar token = new TokenConstructor('html_inline', '', 0);\n\ttoken.content = '</label>';\n\treturn token;\n}\n\nfunction afterLabel(content, id, TokenConstructor) {\n\tvar token = new TokenConstructor('html_inline', '', 0);\n\ttoken.content = '<label class=\"task-list-item-label\" for=\"' + id + '\">' + content + '</label>';\n\ttoken.attrs = [{for: id}];\n\treturn token;\n}\n\nfunction isInline(token) { return token.type === 'inline'; }\nfunction isParagraph(token) { return token.type === 'paragraph_open'; }\nfunction isListItem(token) { return token.type === 'list_item_open'; }\n\nfunction startsWithTodoMarkdown(token) {\n\t// leading whitespace in a list item is already trimmed off by markdown-it\n\treturn token.content.indexOf('[ ] ') === 0 || token.content.indexOf('[x] ') === 0 || token.content.indexOf('[X] ') === 0;\n}\n"],
"mappings": ";;;;;AAAA;AAAA;AAKA,QAAI,oBAAoB;AACxB,QAAI,kBAAkB;AACtB,QAAI,gBAAgB;AAEpB,WAAO,UAAU,SAAS,IAAI,SAAS;AACtC,UAAI,SAAS;AACZ,4BAAoB,CAAC,QAAQ;AAC7B,0BAAkB,CAAC,CAAC,QAAQ;AAC5B,wBAAgB,CAAC,CAAC,QAAQ;AAAA,MAC3B;AAEA,SAAG,KAAK,MAAM,MAAM,UAAU,qBAAqB,SAAS,OAAO;AAClE,YAAI,SAAS,MAAM;AACnB,iBAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACvC,cAAI,WAAW,QAAQ,CAAC,GAAG;AAC1B,oBAAQ,OAAO,CAAC,GAAG,MAAM,KAAK;AAC9B,oBAAQ,OAAO,IAAE,CAAC,GAAG,SAAS,oBAAoB,CAAC,oBAAoB,aAAa,GAAG;AACvF,oBAAQ,OAAO,YAAY,QAAQ,IAAE,CAAC,CAAC,GAAG,SAAS,oBAAoB;AAAA,UACxE;AAAA,QACD;AAAA,MACD,CAAC;AAAA,IACF;AAEA,aAAS,QAAQ,OAAO,MAAM,OAAO;AACpC,UAAI,QAAQ,MAAM,UAAU,IAAI;AAChC,UAAI,OAAO,CAAC,MAAM,KAAK;AAEvB,UAAI,QAAQ,GAAG;AACd,cAAM,SAAS,IAAI;AAAA,MACpB,OAAO;AACN,cAAM,MAAM,KAAK,IAAI;AAAA,MACtB;AAAA,IACD;AAEA,aAAS,YAAY,QAAQ,OAAO;AACnC,UAAI,cAAc,OAAO,KAAK,EAAE,QAAQ;AACxC,eAAS,IAAI,QAAQ,GAAG,KAAK,GAAG,KAAK;AACpC,YAAI,OAAO,CAAC,EAAE,UAAU,aAAa;AACpC,iBAAO;AAAA,QACR;AAAA,MACD;AACA,aAAO;AAAA,IACR;AAEA,aAAS,WAAW,QAAQ,OAAO;AAClC,aAAO,SAAS,OAAO,KAAK,CAAC,KACtB,YAAY,OAAO,QAAQ,CAAC,CAAC,KAC7B,WAAW,OAAO,QAAQ,CAAC,CAAC,KAC5B,uBAAuB,OAAO,KAAK,CAAC;AAAA,IAC5C;AAEA,aAAS,QAAQ,OAAO,kBAAkB;AACzC,YAAM,SAAS,QAAQ,aAAa,OAAO,gBAAgB,CAAC;AAC5D,YAAM,SAAS,CAAC,EAAE,UAAU,MAAM,SAAS,CAAC,EAAE,QAAQ,MAAM,CAAC;AAC7D,YAAM,UAAU,MAAM,QAAQ,MAAM,CAAC;AAErC,UAAI,iBAAiB;AACpB,YAAI,eAAe;AAClB,gBAAM,SAAS,IAAI;AAGnB,cAAI,KAAK,eAAe,KAAK,KAAK,KAAK,OAAO,KAAK,MAAQ,OAAQ,GAAI;AACvE,gBAAM,SAAS,CAAC,EAAE,UAAU,MAAM,SAAS,CAAC,EAAE,QAAQ,MAAM,GAAG,EAAE,IAAI,UAAU,KAAK;AACpF,gBAAM,SAAS,KAAK,WAAW,MAAM,SAAS,IAAI,gBAAgB,CAAC;AAAA,QACpE,OAAO;AACN,gBAAM,SAAS,QAAQ,WAAW,gBAAgB,CAAC;AACnD,gBAAM,SAAS,KAAK,SAAS,gBAAgB,CAAC;AAAA,QAC/C;AAAA,MACD;AAAA,IACD;AAEA,aAAS,aAAa,OAAO,kBAAkB;AAC9C,UAAI,WAAW,IAAI,iBAAiB,eAAe,IAAI,CAAC;AACxD,UAAI,eAAe,oBAAoB,kBAAkB;AACzD,UAAI,MAAM,QAAQ,QAAQ,MAAM,MAAM,GAAG;AACxC,iBAAS,UAAU,2CAA2C,eAAe;AAAA,MAC9E,WAAW,MAAM,QAAQ,QAAQ,MAAM,MAAM,KAAK,MAAM,QAAQ,QAAQ,MAAM,MAAM,GAAG;AACtF,iBAAS,UAAU,sDAAsD,eAAe;AAAA,MACzF;AACA,aAAO;AAAA,IACR;AAIA,aAAS,WAAW,kBAAkB;AACrC,UAAI,QAAQ,IAAI,iBAAiB,eAAe,IAAI,CAAC;AACrD,YAAM,UAAU;AAChB,aAAO;AAAA,IACR;AAEA,aAAS,SAAS,kBAAkB;AACnC,UAAI,QAAQ,IAAI,iBAAiB,eAAe,IAAI,CAAC;AACrD,YAAM,UAAU;AAChB,aAAO;AAAA,IACR;AAEA,aAAS,WAAW,SAAS,IAAI,kBAAkB;AAClD,UAAI,QAAQ,IAAI,iBAAiB,eAAe,IAAI,CAAC;AACrD,YAAM,UAAU,8CAA8C,KAAK,OAAO,UAAU;AACpF,YAAM,QAAQ,CAAC,EAAC,KAAK,GAAE,CAAC;AACxB,aAAO;AAAA,IACR;AAEA,aAAS,SAAS,OAAO;AAAE,aAAO,MAAM,SAAS;AAAA,IAAU;AAC3D,aAAS,YAAY,OAAO;AAAE,aAAO,MAAM,SAAS;AAAA,IAAkB;AACtE,aAAS,WAAW,OAAO;AAAE,aAAO,MAAM,SAAS;AAAA,IAAkB;AAErE,aAAS,uBAAuB,OAAO;AAEtC,aAAO,MAAM,QAAQ,QAAQ,MAAM,MAAM,KAAK,MAAM,QAAQ,QAAQ,MAAM,MAAM,KAAK,MAAM,QAAQ,QAAQ,MAAM,MAAM;AAAA,IACxH;AAAA;AAAA;",
"names": []
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -10,19 +10,16 @@ import {
} from "./chunk-JSZQKJT3.js";
import {
registerLayoutLoaders
} from "./chunk-WC2C7HAT.js";
import "./chunk-HICR2YSH.js";
import "./chunk-JJ4TL56I.js";
} from "./chunk-EAO6AZLE.js";
import "./chunk-ZZNURHEZ.js";
import "./chunk-2HSIUWWJ.js";
import "./chunk-2WFBHHKP.js";
import "./chunk-EUUYHBKV.js";
import "./chunk-FTTOYZOY.js";
import {
dedent,
registerIconPacks
} from "./chunk-NMWDZEZO.js";
import {
isEmpty_default
} from "./chunk-NGEE2U2J.js";
} from "./chunk-XIFRTXJX.js";
import {
cleanAndMerge,
decodeEntities,
@ -30,7 +27,7 @@ import {
isDetailedError,
removeDirectives,
utils_default
} from "./chunk-QVVRGVV3.js";
} from "./chunk-SHNTMSU6.js";
import "./chunk-CMK64ICG.js";
import {
UnknownDiagramError,
@ -57,13 +54,16 @@ import {
themes_default,
updateSiteConfig
} from "./chunk-BFCVI5XI.js";
import "./chunk-M5X7JH4I.js";
import {
__name,
log,
select_default,
setLogLevel
} from "./chunk-I65GBZ6F.js";
import {
isEmpty_default
} from "./chunk-NGEE2U2J.js";
import "./chunk-M5X7JH4I.js";
import {
__spreadProps,
__spreadValues
@ -426,7 +426,7 @@ var detector = __name((txt) => {
return /^\s*C4Context|C4Container|C4Component|C4Dynamic|C4Deployment/.test(txt);
}, "detector");
var loader = __name(async () => {
const { diagram: diagram2 } = await import("./c4Diagram-YG6GDRKO-DTLV3BK5.js");
const { diagram: diagram2 } = await import("./c4Diagram-YG6GDRKO-G4QDPDWO.js");
return { id, diagram: diagram2 };
}, "loader");
var plugin = {
@ -443,7 +443,7 @@ var detector2 = __name((txt, config) => {
return /^\s*graph/.test(txt);
}, "detector");
var loader2 = __name(async () => {
const { diagram: diagram2 } = await import("./flowDiagram-NV44I4VS-WHL2L3RD.js");
const { diagram: diagram2 } = await import("./flowDiagram-NV44I4VS-G6X7VBZN.js");
return { id: id2, diagram: diagram2 };
}, "loader");
var plugin2 = {
@ -466,7 +466,7 @@ var detector3 = __name((txt, config) => {
return /^\s*flowchart/.test(txt);
}, "detector");
var loader3 = __name(async () => {
const { diagram: diagram2 } = await import("./flowDiagram-NV44I4VS-WHL2L3RD.js");
const { diagram: diagram2 } = await import("./flowDiagram-NV44I4VS-G6X7VBZN.js");
return { id: id3, diagram: diagram2 };
}, "loader");
var plugin3 = {
@ -480,7 +480,7 @@ var detector4 = __name((txt) => {
return /^\s*erDiagram/.test(txt);
}, "detector");
var loader4 = __name(async () => {
const { diagram: diagram2 } = await import("./erDiagram-Q2GNP2WA-WNA6LIBQ.js");
const { diagram: diagram2 } = await import("./erDiagram-Q2GNP2WA-SDEYIDBH.js");
return { id: id4, diagram: diagram2 };
}, "loader");
var plugin4 = {
@ -494,7 +494,7 @@ var detector5 = __name((txt) => {
return /^\s*gitGraph/.test(txt);
}, "detector");
var loader5 = __name(async () => {
const { diagram: diagram2 } = await import("./gitGraphDiagram-NY62KEGX-67QA5ASO.js");
const { diagram: diagram2 } = await import("./gitGraphDiagram-NY62KEGX-OS3GW3H5.js");
return { id: id5, diagram: diagram2 };
}, "loader");
var plugin5 = {
@ -508,7 +508,7 @@ var detector6 = __name((txt) => {
return /^\s*gantt/.test(txt);
}, "detector");
var loader6 = __name(async () => {
const { diagram: diagram2 } = await import("./ganttDiagram-LVOFAZNH-HYMY4RKD.js");
const { diagram: diagram2 } = await import("./ganttDiagram-LVOFAZNH-FIW763NA.js");
return { id: id6, diagram: diagram2 };
}, "loader");
var plugin6 = {
@ -522,7 +522,7 @@ var detector7 = __name((txt) => {
return /^\s*info/.test(txt);
}, "detector");
var loader7 = __name(async () => {
const { diagram: diagram2 } = await import("./infoDiagram-F6ZHWCRC-WO5AQYKA.js");
const { diagram: diagram2 } = await import("./infoDiagram-F6ZHWCRC-URQIBBZD.js");
return { id: id7, diagram: diagram2 };
}, "loader");
var info = {
@ -535,7 +535,7 @@ var detector8 = __name((txt) => {
return /^\s*pie/.test(txt);
}, "detector");
var loader8 = __name(async () => {
const { diagram: diagram2 } = await import("./pieDiagram-ADFJNKIX-GZV4UXNK.js");
const { diagram: diagram2 } = await import("./pieDiagram-ADFJNKIX-B5ITLD23.js");
return { id: id8, diagram: diagram2 };
}, "loader");
var pie = {
@ -562,7 +562,7 @@ var detector10 = __name((txt) => {
return /^\s*xychart(-beta)?/.test(txt);
}, "detector");
var loader10 = __name(async () => {
const { diagram: diagram2 } = await import("./xychartDiagram-PRI3JC2R-3HCTMHS4.js");
const { diagram: diagram2 } = await import("./xychartDiagram-PRI3JC2R-POXCDNLO.js");
return { id: id10, diagram: diagram2 };
}, "loader");
var plugin8 = {
@ -576,7 +576,7 @@ var detector11 = __name((txt) => {
return /^\s*requirement(Diagram)?/.test(txt);
}, "detector");
var loader11 = __name(async () => {
const { diagram: diagram2 } = await import("./requirementDiagram-UZGBJVZJ-75TZV2RQ.js");
const { diagram: diagram2 } = await import("./requirementDiagram-UZGBJVZJ-OT76XWNT.js");
return { id: id11, diagram: diagram2 };
}, "loader");
var plugin9 = {
@ -590,7 +590,7 @@ var detector12 = __name((txt) => {
return /^\s*sequenceDiagram/.test(txt);
}, "detector");
var loader12 = __name(async () => {
const { diagram: diagram2 } = await import("./sequenceDiagram-WL72ISMW-ZGS5TERI.js");
const { diagram: diagram2 } = await import("./sequenceDiagram-WL72ISMW-HRTSSJHP.js");
return { id: id12, diagram: diagram2 };
}, "loader");
var plugin10 = {
@ -607,7 +607,7 @@ var detector13 = __name((txt, config) => {
return /^\s*classDiagram/.test(txt);
}, "detector");
var loader13 = __name(async () => {
const { diagram: diagram2 } = await import("./classDiagram-2ON5EDUG-33U76KPG.js");
const { diagram: diagram2 } = await import("./classDiagram-2ON5EDUG-AQUOHNLB.js");
return { id: id13, diagram: diagram2 };
}, "loader");
var plugin11 = {
@ -624,7 +624,7 @@ var detector14 = __name((txt, config) => {
return /^\s*classDiagram-v2/.test(txt);
}, "detector");
var loader14 = __name(async () => {
const { diagram: diagram2 } = await import("./classDiagram-v2-WZHVMYZB-Z27PMM23.js");
const { diagram: diagram2 } = await import("./classDiagram-v2-WZHVMYZB-AIBAXKPE.js");
return { id: id14, diagram: diagram2 };
}, "loader");
var plugin12 = {
@ -641,7 +641,7 @@ var detector15 = __name((txt, config) => {
return /^\s*stateDiagram/.test(txt);
}, "detector");
var loader15 = __name(async () => {
const { diagram: diagram2 } = await import("./stateDiagram-FKZM4ZOC-KXMQ5JNR.js");
const { diagram: diagram2 } = await import("./stateDiagram-FKZM4ZOC-FVHIKWH4.js");
return { id: id15, diagram: diagram2 };
}, "loader");
var plugin13 = {
@ -661,7 +661,7 @@ var detector16 = __name((txt, config) => {
return false;
}, "detector");
var loader16 = __name(async () => {
const { diagram: diagram2 } = await import("./stateDiagram-v2-4FDKWEC3-JB4TSVIW.js");
const { diagram: diagram2 } = await import("./stateDiagram-v2-4FDKWEC3-YF6BIDZS.js");
return { id: id16, diagram: diagram2 };
}, "loader");
var plugin14 = {
@ -675,7 +675,7 @@ var detector17 = __name((txt) => {
return /^\s*journey/.test(txt);
}, "detector");
var loader17 = __name(async () => {
const { diagram: diagram2 } = await import("./journeyDiagram-XKPGCS4Q-TGUXGKSG.js");
const { diagram: diagram2 } = await import("./journeyDiagram-XKPGCS4Q-DRJVBRZY.js");
return { id: id17, diagram: diagram2 };
}, "loader");
var plugin15 = {
@ -742,7 +742,7 @@ var detector18 = __name((txt, config = {}) => {
return false;
}, "detector");
var loader18 = __name(async () => {
const { diagram: diagram2 } = await import("./flowDiagram-NV44I4VS-WHL2L3RD.js");
const { diagram: diagram2 } = await import("./flowDiagram-NV44I4VS-G6X7VBZN.js");
return { id: id18, diagram: diagram2 };
}, "loader");
var plugin16 = {
@ -770,7 +770,7 @@ var detector20 = __name((txt) => {
return /^\s*mindmap/.test(txt);
}, "detector");
var loader20 = __name(async () => {
const { diagram: diagram2 } = await import("./mindmap-definition-VGOIOE7T-YDOCEY2Q.js");
const { diagram: diagram2 } = await import("./mindmap-definition-VGOIOE7T-YG6E4RHT.js");
return { id: id20, diagram: diagram2 };
}, "loader");
var plugin18 = {
@ -784,7 +784,7 @@ var detector21 = __name((txt) => {
return /^\s*kanban/.test(txt);
}, "detector");
var loader21 = __name(async () => {
const { diagram: diagram2 } = await import("./kanban-definition-3W4ZIXB7-GUMHX2OD.js");
const { diagram: diagram2 } = await import("./kanban-definition-3W4ZIXB7-IDLHJXSC.js");
return { id: id21, diagram: diagram2 };
}, "loader");
var plugin19 = {
@ -812,7 +812,7 @@ var detector23 = __name((txt) => {
return /^\s*packet(-beta)?/.test(txt);
}, "detector");
var loader23 = __name(async () => {
const { diagram: diagram2 } = await import("./diagram-S2PKOQOG-CRJZWG5Y.js");
const { diagram: diagram2 } = await import("./diagram-S2PKOQOG-SBOOCUMA.js");
return { id: id23, diagram: diagram2 };
}, "loader");
var packet = {
@ -825,7 +825,7 @@ var detector24 = __name((txt) => {
return /^\s*radar-beta/.test(txt);
}, "detector");
var loader24 = __name(async () => {
const { diagram: diagram2 } = await import("./diagram-QEK2KX5R-5GIFGTRQ.js");
const { diagram: diagram2 } = await import("./diagram-QEK2KX5R-QIAHEC3Z.js");
return { id: id24, diagram: diagram2 };
}, "loader");
var radar = {
@ -838,7 +838,7 @@ var detector25 = __name((txt) => {
return /^\s*block(-beta)?/.test(txt);
}, "detector");
var loader25 = __name(async () => {
const { diagram: diagram2 } = await import("./blockDiagram-VD42YOAC-IMP7RBMX.js");
const { diagram: diagram2 } = await import("./blockDiagram-VD42YOAC-QLCETXLX.js");
return { id: id25, diagram: diagram2 };
}, "loader");
var plugin21 = {
@ -852,7 +852,7 @@ var detector26 = __name((txt) => {
return /^\s*architecture/.test(txt);
}, "detector");
var loader26 = __name(async () => {
const { diagram: diagram2 } = await import("./architectureDiagram-VXUJARFQ-3B5SPFPL.js");
const { diagram: diagram2 } = await import("./architectureDiagram-VXUJARFQ-K5UZADJM.js");
return { id: id26, diagram: diagram2 };
}, "loader");
var architecture = {
@ -866,7 +866,7 @@ var detector27 = __name((txt) => {
return /^\s*treemap/.test(txt);
}, "detector");
var loader27 = __name(async () => {
const { diagram: diagram2 } = await import("./diagram-PSM6KHXK-7CHUIA47.js");
const { diagram: diagram2 } = await import("./diagram-PSM6KHXK-XVWEIUTT.js");
return { id: id27, diagram: diagram2 };
}, "loader");
var treemap = {

View File

@ -7,14 +7,14 @@ import {
import {
getRegisteredLayoutAlgorithm,
render
} from "./chunk-WC2C7HAT.js";
import "./chunk-HICR2YSH.js";
import "./chunk-JJ4TL56I.js";
} from "./chunk-EAO6AZLE.js";
import "./chunk-ZZNURHEZ.js";
import "./chunk-2HSIUWWJ.js";
import "./chunk-2WFBHHKP.js";
import "./chunk-EUUYHBKV.js";
import "./chunk-FTTOYZOY.js";
import "./chunk-NMWDZEZO.js";
import "./chunk-QVVRGVV3.js";
import "./chunk-XIFRTXJX.js";
import "./chunk-SHNTMSU6.js";
import "./chunk-CMK64ICG.js";
import {
darken_default,
@ -25,11 +25,11 @@ import {
lighten_default,
sanitizeText
} from "./chunk-BFCVI5XI.js";
import "./chunk-M5X7JH4I.js";
import {
__name,
log
} from "./chunk-I65GBZ6F.js";
import "./chunk-M5X7JH4I.js";
import "./chunk-TKSB4YUA.js";
// node_modules/uuid/dist/esm-browser/regex.js
@ -1486,4 +1486,4 @@ var diagram = {
export {
diagram
};
//# sourceMappingURL=mindmap-definition-VGOIOE7T-YDOCEY2Q.js.map
//# sourceMappingURL=mindmap-definition-VGOIOE7T-YG6E4RHT.js.map

View File

@ -3,24 +3,23 @@ import {
} from "./chunk-PNW5KFH4.js";
import {
parse
} from "./chunk-VGVCR5QM.js";
import "./chunk-5SXTVVUG.js";
import "./chunk-BUI4I457.js";
import "./chunk-CHJ5BV6S.js";
} from "./chunk-AWNKEY2Y.js";
import "./chunk-XP22GJHQ.js";
import "./chunk-NYZY7JGI.js";
import "./chunk-FNEVJCCX.js";
import "./chunk-R33GOAXK.js";
import "./chunk-5SXTVVUG.js";
import "./chunk-BUI4I457.js";
import "./chunk-CHJ5BV6S.js";
import "./chunk-WHHJWK6B.js";
import "./chunk-6SIVX7OU.js";
import {
selectSvgElement
} from "./chunk-B5NQPFQG.js";
import "./chunk-6SIVX7OU.js";
import "./chunk-NGEE2U2J.js";
import {
cleanAndMerge,
parseFontSize
} from "./chunk-QVVRGVV3.js";
} from "./chunk-SHNTMSU6.js";
import "./chunk-CMK64ICG.js";
import {
clear,
@ -34,7 +33,6 @@ import {
setAccTitle,
setDiagramTitle
} from "./chunk-BFCVI5XI.js";
import "./chunk-M5X7JH4I.js";
import {
__name,
arc_default,
@ -42,6 +40,8 @@ import {
ordinal,
pie_default
} from "./chunk-I65GBZ6F.js";
import "./chunk-NGEE2U2J.js";
import "./chunk-M5X7JH4I.js";
import "./chunk-TKSB4YUA.js";
// node_modules/mermaid/dist/chunks/mermaid.core/pieDiagram-ADFJNKIX.mjs
@ -225,4 +225,4 @@ var diagram = {
export {
diagram
};
//# sourceMappingURL=pieDiagram-ADFJNKIX-GZV4UXNK.js.map
//# sourceMappingURL=pieDiagram-ADFJNKIX-B5ITLD23.js.map

View File

@ -7,16 +7,16 @@ import {
import {
getRegisteredLayoutAlgorithm,
render
} from "./chunk-WC2C7HAT.js";
import "./chunk-HICR2YSH.js";
import "./chunk-JJ4TL56I.js";
} from "./chunk-EAO6AZLE.js";
import "./chunk-ZZNURHEZ.js";
import "./chunk-2HSIUWWJ.js";
import "./chunk-2WFBHHKP.js";
import "./chunk-EUUYHBKV.js";
import "./chunk-FTTOYZOY.js";
import "./chunk-NMWDZEZO.js";
import "./chunk-XIFRTXJX.js";
import {
utils_default
} from "./chunk-QVVRGVV3.js";
} from "./chunk-SHNTMSU6.js";
import "./chunk-CMK64ICG.js";
import {
clear,
@ -28,12 +28,12 @@ import {
setAccTitle,
setDiagramTitle
} from "./chunk-BFCVI5XI.js";
import "./chunk-M5X7JH4I.js";
import {
__export,
__name,
log
} from "./chunk-I65GBZ6F.js";
import "./chunk-M5X7JH4I.js";
import "./chunk-TKSB4YUA.js";
// node_modules/mermaid/dist/chunks/mermaid.core/requirementDiagram-UZGBJVZJ.mjs
@ -1263,4 +1263,4 @@ var diagram = {
export {
diagram
};
//# sourceMappingURL=requirementDiagram-UZGBJVZJ-75TZV2RQ.js.map
//# sourceMappingURL=requirementDiagram-UZGBJVZJ-OT76XWNT.js.map

View File

@ -1,10 +1,6 @@
import {
ImperativeState
} from "./chunk-3WIYXQMB.js";
import {
JSON_SCHEMA,
load
} from "./chunk-JSZQKJT3.js";
import {
drawBackgroundRect,
drawEmbeddedImage,
@ -13,11 +9,15 @@ import {
getNoteRect,
getTextObj
} from "./chunk-BETRN5NS.js";
import {
JSON_SCHEMA,
load
} from "./chunk-JSZQKJT3.js";
import {
ZERO_WIDTH_SPACE,
parseFontSize,
utils_default
} from "./chunk-QVVRGVV3.js";
} from "./chunk-SHNTMSU6.js";
import {
require_dist
} from "./chunk-CMK64ICG.js";
@ -41,12 +41,12 @@ import {
setConfig2,
setDiagramTitle
} from "./chunk-BFCVI5XI.js";
import "./chunk-M5X7JH4I.js";
import {
__name,
log,
select_default
} from "./chunk-I65GBZ6F.js";
import "./chunk-M5X7JH4I.js";
import {
__spreadProps,
__spreadValues,
@ -4004,4 +4004,4 @@ var diagram = {
export {
diagram
};
//# sourceMappingURL=sequenceDiagram-WL72ISMW-ZGS5TERI.js.map
//# sourceMappingURL=sequenceDiagram-WL72ISMW-HRTSSJHP.js.map

View File

@ -2,27 +2,26 @@ import {
StateDB,
stateDiagram_default,
styles_default
} from "./chunk-UHQERBHF.js";
import "./chunk-PLWNSIKB.js";
import "./chunk-LHH5RO5K.js";
import "./chunk-WC2C7HAT.js";
} from "./chunk-WBFNWS3A.js";
import {
layout
} from "./chunk-YUMEK5VY.js";
import {
Graph
} from "./chunk-MEGNL3BT.js";
import "./chunk-PLWNSIKB.js";
import "./chunk-LHH5RO5K.js";
import "./chunk-6SIVX7OU.js";
import "./chunk-HICR2YSH.js";
import "./chunk-JJ4TL56I.js";
import "./chunk-EAO6AZLE.js";
import "./chunk-ZZNURHEZ.js";
import "./chunk-2HSIUWWJ.js";
import "./chunk-2WFBHHKP.js";
import "./chunk-EUUYHBKV.js";
import "./chunk-FTTOYZOY.js";
import "./chunk-NMWDZEZO.js";
import "./chunk-NGEE2U2J.js";
import "./chunk-XIFRTXJX.js";
import {
utils_default
} from "./chunk-QVVRGVV3.js";
} from "./chunk-SHNTMSU6.js";
import "./chunk-CMK64ICG.js";
import {
common_default,
@ -30,7 +29,6 @@ import {
getConfig2,
getUrl
} from "./chunk-BFCVI5XI.js";
import "./chunk-M5X7JH4I.js";
import {
__name,
basis_default,
@ -38,6 +36,8 @@ import {
log,
select_default
} from "./chunk-I65GBZ6F.js";
import "./chunk-NGEE2U2J.js";
import "./chunk-M5X7JH4I.js";
import "./chunk-TKSB4YUA.js";
// node_modules/mermaid/dist/chunks/mermaid.core/stateDiagram-FKZM4ZOC.mjs
@ -490,4 +490,4 @@ var diagram = {
export {
diagram
};
//# sourceMappingURL=stateDiagram-FKZM4ZOC-KXMQ5JNR.js.map
//# sourceMappingURL=stateDiagram-FKZM4ZOC-FVHIKWH4.js.map

View File

@ -3,23 +3,23 @@ import {
stateDiagram_default,
stateRenderer_v3_unified_default,
styles_default
} from "./chunk-UHQERBHF.js";
} from "./chunk-WBFNWS3A.js";
import "./chunk-PLWNSIKB.js";
import "./chunk-LHH5RO5K.js";
import "./chunk-WC2C7HAT.js";
import "./chunk-HICR2YSH.js";
import "./chunk-JJ4TL56I.js";
import "./chunk-EAO6AZLE.js";
import "./chunk-ZZNURHEZ.js";
import "./chunk-2HSIUWWJ.js";
import "./chunk-2WFBHHKP.js";
import "./chunk-EUUYHBKV.js";
import "./chunk-FTTOYZOY.js";
import "./chunk-NMWDZEZO.js";
import "./chunk-QVVRGVV3.js";
import "./chunk-XIFRTXJX.js";
import "./chunk-SHNTMSU6.js";
import "./chunk-CMK64ICG.js";
import "./chunk-BFCVI5XI.js";
import "./chunk-M5X7JH4I.js";
import {
__name
} from "./chunk-I65GBZ6F.js";
import "./chunk-M5X7JH4I.js";
import "./chunk-TKSB4YUA.js";
// node_modules/mermaid/dist/chunks/mermaid.core/stateDiagram-v2-4FDKWEC3.mjs
@ -40,4 +40,4 @@ var diagram = {
export {
diagram
};
//# sourceMappingURL=stateDiagram-v2-4FDKWEC3-JB4TSVIW.js.map
//# sourceMappingURL=stateDiagram-v2-4FDKWEC3-YF6BIDZS.js.map

View File

@ -3,10 +3,10 @@ import {
} from "./chunk-B5NQPFQG.js";
import {
computeDimensionOfText
} from "./chunk-NMWDZEZO.js";
} from "./chunk-XIFRTXJX.js";
import {
cleanAndMerge
} from "./chunk-QVVRGVV3.js";
} from "./chunk-SHNTMSU6.js";
import "./chunk-CMK64ICG.js";
import {
clear,
@ -22,7 +22,6 @@ import {
setAccTitle,
setDiagramTitle
} from "./chunk-BFCVI5XI.js";
import "./chunk-M5X7JH4I.js";
import {
__name,
band,
@ -30,6 +29,7 @@ import {
linear,
log
} from "./chunk-I65GBZ6F.js";
import "./chunk-M5X7JH4I.js";
import "./chunk-TKSB4YUA.js";
// node_modules/mermaid/dist/chunks/mermaid.core/xychartDiagram-PRI3JC2R.mjs
@ -1913,4 +1913,4 @@ var diagram = {
export {
diagram
};
//# sourceMappingURL=xychartDiagram-PRI3JC2R-3HCTMHS4.js.map
//# sourceMappingURL=xychartDiagram-PRI3JC2R-POXCDNLO.js.map

View File

@ -1,8 +1,8 @@
{
"hash": "62551747",
"hash": "8eb8ef6f",
"configHash": "9e47cd39",
"lockfileHash": "88ca7dd7",
"browserHash": "6eef6746",
"lockfileHash": "0f64d2e1",
"browserHash": "c75f806d",
"optimized": {},
"chunks": {}
}

View File

@ -1,3 +0,0 @@
{
"type": "module"
}

View File

@ -1,3 +0,0 @@
{
"type": "module"
}

View File

@ -1,3 +0,0 @@
{
"type": "module"
}

23
Todo.md Normal file
View File

@ -0,0 +1,23 @@
# Missing Features / Limitations
* [X] **Heading varieties** : No support for Setext headings (`===`/`---` underlines), optional closing `#`, heading IDs with duplicate handling, nor preservation of a top-level `h1` (current logic drops the first `#` heading unconditionally).
* [X] **Paragraph semantics** : Paragraph building treats every non-empty line as a `<p>` and inserts `<br>` between, breaking standard markdown rules about blank lines, lazy continuation lines, and container blocks (lists, blockquotes).
* [X] **List handling** : Regex conversion expects isolated list lines and wraps each `<li>` in its own `<ul>`/`<ol>`, so multi-line items, nested lists, tight/loose spacing, ordered list numbering, and bullet-marker variations (`+`, `-`, `*`) are all mis-rendered. Task list logic converts any single line but cannot coexist with proper list structure.
* [ ] **Blockquotes** : Generic blockquote replacement only grabs one line after `>`, losing nested content, lazy continuations, and mixed blocks (e.g., lists inside blockquotes).
* [ ] **Emphasis rules** : Simple replacements for `*`/`**`/`~~` ignore underscores, intraword emphasis rules, nesting, escaping, or edge cases like `***bold and italic***`.
* [ ] **Inline code spans** : Handles only single-line ``code`` sequences and does not honor backtick escapes, trim rules, or multiple backtick fences.
* [ ] **Links & images** : Only processes inline destination syntax with absolute URLs. Missing relative path support, reference-style links (`[ref][]`), angle-bracket autolinks `<https://>`, image titles without URL, and no differentiation between external and internal links beyond scheme check.
* [ ] **Reference definitions** : No parsing for link/image reference definitions at block level (`[id]: URL "title"`), so references cannot resolve.
* [ ] **Footnotes & definitions** : Lacks footnote syntax (`[^1]`) and corresponding rendering.
* [ ] **Tables (GFM extensions)** : Only pipe tables supported. Missing support for inline markdown within cells, row spans, or text alignment fallback when separators are malformed.
* [ ] **Code blocks** : Indented code blocks (4 spaces) not detected; fenced blocks limited to triple backticks, no tilde fences (`~~~`), info string handling is case-sensitive, and language fallback doesnt respect GFM spec (e.g., unrecognized language should leave raw text).
* [ ] **HTML blocks/inlines** : Raw HTML either stripped or double-escaped; theres no logic to allow HTML blocks or disallowed raw HTML rules from GFM.
* [ ] **Escaping** : Backslash escapes for punctuation, entity references, and escaping special characters are unsupported;
escapeHtml() only runs on select segments.
* [ ] **Hard/soft line breaks** : Treats every newline as `<br>`, ignoring two-space hard break convention and soft break behavior.
* [ ] **Math/LaTeX** : `$$…$$` replaced with a static placeholder; inline math `$…$`, `\(` `\)` not handled.
* [ ] **Frontmatter** : YAML frontmatter stripping not present; if notes contain `---` blocks at top they flow into paragraph logic.
* [ ] **Metadata parsing** : No support for Obsidian wiki-links `[[Note]]` (only attachments) or block references (`^block-id`), tags inside frontmatter, or embedded queries.
* [ ] **Performance/robustness** : Repeated global regex replacements can introduce double-wrapping, miss overlapping patterns, and make escaping fragile. Lacking overall markdown parsing state leads to conflicts (e.g., `#hashtag` inside code blocks already removed via placeholder but inline code restoration may still break hashtags).
* [ ] **Internationalization** : slugify() strips non-word characters, removing accents rather than transliterating; may produce empty IDs for non-Latin headings.

266
package-lock.json generated
View File

@ -16,11 +16,16 @@
"@angular/core": "^20.3.0",
"@angular/forms": "^20.3.1",
"@angular/platform-browser": "^20.3.0",
"@types/markdown-it": "^14.0.1",
"angular-calendar": "^0.32.0",
"chokidar": "^4.0.3",
"date-fns": "^4.1.0",
"express": "^5.1.0",
"highlight.js": "^11.10.0",
"markdown-it": "^14.1.0",
"markdown-it-anchor": "^8.6.7",
"markdown-it-attrs": "^4.3.1",
"markdown-it-task-lists": "^2.1.1",
"mermaid": "^11.12.0",
"rxjs": "^7.8.2",
"tailwindcss": "^3.4.14",
@ -32,6 +37,7 @@
"@types/node": "^22.14.0",
"autoprefixer": "^10.4.20",
"postcss": "^8.4.49",
"ts-node": "^10.9.2",
"typescript": "~5.8.2",
"vite": "^6.2.0"
}
@ -1002,6 +1008,30 @@
"integrity": "sha512-YslZMgtJUyuMbZ+aKvfF3x1f5liK4mWNxghFRv7jqRR9C3R3fAOGTTKvxXDa2Y1s9zSbcpuO0cAxDYsc9SrXoQ==",
"license": "Apache-2.0"
},
"node_modules/@cspotcode/source-map-support": {
"version": "0.8.1",
"resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
"integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==",
"devOptional": true,
"license": "MIT",
"dependencies": {
"@jridgewell/trace-mapping": "0.3.9"
},
"engines": {
"node": ">=12"
}
},
"node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": {
"version": "0.3.9",
"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
"integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
"devOptional": true,
"license": "MIT",
"dependencies": {
"@jridgewell/resolve-uri": "^3.0.3",
"@jridgewell/sourcemap-codec": "^1.4.10"
}
},
"node_modules/@emnapi/core": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.5.0.tgz",
@ -3711,6 +3741,34 @@
"tailwindcss": ">=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1"
}
},
"node_modules/@tsconfig/node10": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz",
"integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==",
"devOptional": true,
"license": "MIT"
},
"node_modules/@tsconfig/node12": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz",
"integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==",
"devOptional": true,
"license": "MIT"
},
"node_modules/@tsconfig/node14": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz",
"integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==",
"devOptional": true,
"license": "MIT"
},
"node_modules/@tsconfig/node16": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz",
"integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==",
"devOptional": true,
"license": "MIT"
},
"node_modules/@tufjs/canonical-json": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz",
@ -4008,6 +4066,28 @@
"integrity": "sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==",
"license": "MIT"
},
"node_modules/@types/linkify-it": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz",
"integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==",
"license": "MIT"
},
"node_modules/@types/markdown-it": {
"version": "14.0.1",
"resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.0.1.tgz",
"integrity": "sha512-6WfOG3jXR78DW8L5cTYCVVGAsIFZskRHCDo5tbqa+qtKVt4oDRVH7hyIWu1SpDQJlmIoEivNQZ5h+AGAOrgOtQ==",
"license": "MIT",
"dependencies": {
"@types/linkify-it": "*",
"@types/mdurl": "*"
}
},
"node_modules/@types/mdurl": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz",
"integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==",
"license": "MIT"
},
"node_modules/@types/node": {
"version": "22.18.6",
"resolved": "https://registry.npmjs.org/@types/node/-/node-22.18.6.tgz",
@ -4077,6 +4157,19 @@
"node": ">=0.4.0"
}
},
"node_modules/acorn-walk": {
"version": "8.3.4",
"resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz",
"integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==",
"devOptional": true,
"license": "MIT",
"dependencies": {
"acorn": "^8.11.0"
},
"engines": {
"node": ">=0.4.0"
}
},
"node_modules/agent-base": {
"version": "7.1.4",
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz",
@ -4286,6 +4379,12 @@
"integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==",
"license": "MIT"
},
"node_modules/argparse": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
"license": "Python-2.0"
},
"node_modules/autoprefixer": {
"version": "10.4.21",
"resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz",
@ -4877,6 +4976,13 @@
"layout-base": "^1.0.0"
}
},
"node_modules/create-require": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
"integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
"devOptional": true,
"license": "MIT"
},
"node_modules/cross-spawn": {
"version": "7.0.6",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
@ -5509,6 +5615,16 @@
"integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==",
"license": "Apache-2.0"
},
"node_modules/diff": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
"integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
"devOptional": true,
"license": "BSD-3-Clause",
"engines": {
"node": ">=0.3.1"
}
},
"node_modules/dlv": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
@ -6746,6 +6862,15 @@
"integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
"license": "MIT"
},
"node_modules/linkify-it": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz",
"integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==",
"license": "MIT",
"dependencies": {
"uc.micro": "^2.0.0"
}
},
"node_modules/listr2": {
"version": "9.0.1",
"resolved": "https://registry.npmjs.org/listr2/-/listr2-9.0.1.tgz",
@ -6943,6 +7068,13 @@
"@jridgewell/sourcemap-codec": "^1.5.0"
}
},
"node_modules/make-error": {
"version": "1.3.6",
"resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
"integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
"devOptional": true,
"license": "ISC"
},
"node_modules/make-fetch-happen": {
"version": "14.0.3",
"resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-14.0.3.tgz",
@ -6965,6 +7097,51 @@
"node": "^18.17.0 || >=20.5.0"
}
},
"node_modules/markdown-it": {
"version": "14.1.0",
"resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz",
"integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==",
"license": "MIT",
"dependencies": {
"argparse": "^2.0.1",
"entities": "^4.4.0",
"linkify-it": "^5.0.0",
"mdurl": "^2.0.0",
"punycode.js": "^2.3.1",
"uc.micro": "^2.1.0"
},
"bin": {
"markdown-it": "bin/markdown-it.mjs"
}
},
"node_modules/markdown-it-anchor": {
"version": "8.6.7",
"resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.7.tgz",
"integrity": "sha512-FlCHFwNnutLgVTflOYHPW2pPcl2AACqVzExlkGQNsi4CJgqOHN7YTgDd4LuhgN1BFO3TS0vLAruV1Td6dwWPJA==",
"license": "Unlicense",
"peerDependencies": {
"@types/markdown-it": "*",
"markdown-it": "*"
}
},
"node_modules/markdown-it-attrs": {
"version": "4.3.1",
"resolved": "https://registry.npmjs.org/markdown-it-attrs/-/markdown-it-attrs-4.3.1.tgz",
"integrity": "sha512-/ko6cba+H6gdZ0DOw7BbNMZtfuJTRp9g/IrGIuz8lYc/EfnmWRpaR3CFPnNbVz0LDvF8Gf1hFGPqrQqq7De0rg==",
"license": "MIT",
"engines": {
"node": ">=6"
},
"peerDependencies": {
"markdown-it": ">= 9.0.0"
}
},
"node_modules/markdown-it-task-lists": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/markdown-it-task-lists/-/markdown-it-task-lists-2.1.1.tgz",
"integrity": "sha512-TxFAc76Jnhb2OUu+n3yz9RMu4CwGfaT788br6HhEDlvWfdeJcLUsxk1Hgw2yJio0OXsxv7pyIPmvECY7bMbluA==",
"license": "ISC"
},
"node_modules/marked": {
"version": "16.3.0",
"resolved": "https://registry.npmjs.org/marked/-/marked-16.3.0.tgz",
@ -6986,6 +7163,12 @@
"node": ">= 0.4"
}
},
"node_modules/mdurl": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz",
"integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==",
"license": "MIT"
},
"node_modules/media-typer": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz",
@ -8336,6 +8519,15 @@
"node": ">=6"
}
},
"node_modules/punycode.js": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz",
"integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==",
"license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/qs": {
"version": "6.14.0",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz",
@ -9468,6 +9660,57 @@
"integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==",
"license": "Apache-2.0"
},
"node_modules/ts-node": {
"version": "10.9.2",
"resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz",
"integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==",
"devOptional": true,
"license": "MIT",
"dependencies": {
"@cspotcode/source-map-support": "^0.8.0",
"@tsconfig/node10": "^1.0.7",
"@tsconfig/node12": "^1.0.7",
"@tsconfig/node14": "^1.0.0",
"@tsconfig/node16": "^1.0.2",
"acorn": "^8.4.1",
"acorn-walk": "^8.1.1",
"arg": "^4.1.0",
"create-require": "^1.1.0",
"diff": "^4.0.1",
"make-error": "^1.1.1",
"v8-compile-cache-lib": "^3.0.1",
"yn": "3.1.1"
},
"bin": {
"ts-node": "dist/bin.js",
"ts-node-cwd": "dist/bin-cwd.js",
"ts-node-esm": "dist/bin-esm.js",
"ts-node-script": "dist/bin-script.js",
"ts-node-transpile-only": "dist/bin-transpile.js",
"ts-script": "dist/bin-script-deprecated.js"
},
"peerDependencies": {
"@swc/core": ">=1.2.50",
"@swc/wasm": ">=1.2.50",
"@types/node": "*",
"typescript": ">=2.7"
},
"peerDependenciesMeta": {
"@swc/core": {
"optional": true
},
"@swc/wasm": {
"optional": true
}
}
},
"node_modules/ts-node/node_modules/arg": {
"version": "4.1.3",
"resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
"integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==",
"devOptional": true,
"license": "MIT"
},
"node_modules/tslib": {
"version": "2.8.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
@ -9530,6 +9773,12 @@
"node": ">=14.17"
}
},
"node_modules/uc.micro": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz",
"integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==",
"license": "MIT"
},
"node_modules/ufo": {
"version": "1.6.1",
"resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.1.tgz",
@ -9634,6 +9883,13 @@
"uuid": "dist/esm/bin/uuid"
}
},
"node_modules/v8-compile-cache-lib": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
"integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==",
"devOptional": true,
"license": "MIT"
},
"node_modules/validate-npm-package-license": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
@ -10041,6 +10297,16 @@
"node": "^20.19.0 || ^22.12.0 || >=23"
}
},
"node_modules/yn": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
"integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
"devOptional": true,
"license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/yoctocolors-cjs": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.3.tgz",

View File

@ -17,11 +17,16 @@
"@angular/core": "^20.3.0",
"@angular/forms": "^20.3.1",
"@angular/platform-browser": "^20.3.0",
"@types/markdown-it": "^14.0.1",
"angular-calendar": "^0.32.0",
"chokidar": "^4.0.3",
"date-fns": "^4.1.0",
"express": "^5.1.0",
"chokidar": "^4.0.3",
"highlight.js": "^11.10.0",
"markdown-it": "^14.1.0",
"markdown-it-anchor": "^8.6.7",
"markdown-it-attrs": "^4.3.1",
"markdown-it-task-lists": "^2.1.1",
"mermaid": "^11.12.0",
"rxjs": "^7.8.2",
"tailwindcss": "^3.4.14",
@ -33,6 +38,7 @@
"@types/node": "^22.14.0",
"autoprefixer": "^10.4.20",
"postcss": "^8.4.49",
"ts-node": "^10.9.2",
"typescript": "~5.8.2",
"vite": "^6.2.0"
}

View File

@ -1,8 +1,23 @@
import { Injectable } from '@angular/core';
import hljs from 'highlight.js';
import MarkdownIt from 'markdown-it';
import markdownItAnchor from 'markdown-it-anchor';
import markdownItTaskLists from 'markdown-it-task-lists';
import markdownItAttrs from 'markdown-it-attrs';
import { Note } from '../types';
type TableAlignment = 'left' | 'center' | 'right' | null;
interface MarkdownRenderEnv {
codeBlockIndex: number;
}
interface MarkdownItToken {
info?: string;
content: string;
tag: string;
attrGet(name: string): string | null;
attrSet(name: string, value: string): void;
attrJoin(name: string, value: string): void;
}
@Injectable({
providedIn: 'root'
@ -13,158 +28,15 @@ export class MarkdownService {
private tagColorCache = new Map<string, number>();
render(markdown: string, allNotes: Note[], currentNote?: Note): string {
let html = markdown;
const env: MarkdownRenderEnv = { codeBlockIndex: 0 };
const markdownIt = this.createMarkdownIt(env);
// Process code blocks first to prevent inner content from being parsed
const codeBlocks = new Map<string, { html: string; language: string }>();
html = html.replace(/```([^\n]*)\n([\s\S]*?)```/g, (match, lang, code) => {
const id = `___CODEBLOCK_${codeBlocks.size}___`;
const rawLanguage = (lang ?? '').trim();
const normalizedLanguage = rawLanguage.toLowerCase();
const isMermaid = normalizedLanguage === 'mermaid';
let highlightedCode = '';
const preprocessed = this.decorateInlineTags(markdown);
let html = markdownIt.render(preprocessed, env);
if (!isMermaid) {
if (normalizedLanguage && hljs.getLanguage(normalizedLanguage)) {
highlightedCode = hljs.highlight(code, { language: normalizedLanguage }).value;
} else if (normalizedLanguage) {
highlightedCode = hljs.highlightAuto(code).value;
} else {
highlightedCode = hljs.highlightAuto(code).value;
}
}
const languageLabel = rawLanguage || 'plaintext';
const languageDisplay = rawLanguage ? rawLanguage : 'Plain text';
const encodedRawCode = encodeURIComponent(code);
const safeLanguageDisplay = this.escapeHtml(languageDisplay);
const headerHtml = `
<div class="code-block__header">
<div class="code-block__controls" aria-hidden="true">
<span></span><span></span><span></span>
</div>
<div class="code-block__actions">
<button type="button" class="code-block__language-badge" data-language="${languageLabel.toLowerCase()}" data-code-id="${id}">${safeLanguageDisplay}</button>
<span class="code-block__copy-feedback" hidden></span>
</div>
</div>
`;
const codeHtml = isMermaid
? `
<div class="code-block__body mermaid-block__body">
<div class="mermaid-diagram" data-mermaid-code="${encodedRawCode}"></div>
<pre class="mermaid-source" hidden><code class="hljs" data-raw-code="${encodedRawCode}">${this.escapeHtml(code)}</code></pre>
</div>
`
: `<pre class="code-block__body"><code class="hljs" data-raw-code="${encodedRawCode}">${highlightedCode}</code></pre>`;
const wrapperClass = isMermaid ? 'code-block code-block--mermaid text-left' : 'code-block text-left';
const wrapper = `<div class="${wrapperClass}" style="max-width: 800px; width: 100%; margin: 0;" data-language="${languageLabel.toLowerCase()}" data-code-id="${id}">${headerHtml}${codeHtml}</div>`;
codeBlocks.set(id, { html: wrapper, language: normalizedLanguage });
return id;
});
html = this.convertTables(html);
html = this.decorateInlineTags(html);
// Headings (H1-H6)
let firstLevelOneHeadingSkipped = false;
html = html.replace(/^(\#{1,6})\s+(.*)/gm, (match, hashes, content) => {
const level = hashes.length;
if (level === 1 && !firstLevelOneHeadingSkipped) {
firstLevelOneHeadingSkipped = true;
return '';
}
const id = this.slugify(content);
const headingClass = `md-heading md-heading-${level}`;
return `<h${level} id="${id}" class="${headingClass} text-obs-l-text-main dark:text-white font-bold mt-6 mb-3 pb-1 border-b border-obs-l-border dark:border-obs-d-border">${content}</h${level}>`;
});
// Bold, Italic, Strikethrough
html = html.replace(/\*\*(.*?)\*\*/g, '<strong>$1</strong>');
html = html.replace(/\*(.*?)\*/g, '<em>$1</em>');
html = html.replace(/~~(.*?)~~/g, '<del>$1</del>');
// Blockquotes & Callouts
html = html.replace(/^>\s?\[!(\w+)\]\n(>.*)/gm, (match, type, content) => {
const calloutType = type.toUpperCase();
const calloutClass = this.getCalloutClass(calloutType);
const cleanedContent = content.replace(/^>\s?/gm, '');
const title = this.formatCalloutTitle(calloutType);
const bodyHtml = cleanedContent
.split('\n')
.map(line => line.trim())
.filter(line => line.length > 0)
.map(line => `<p>${line}</p>`)
.join('');
return `<div class="${calloutClass} text-left" style="max-width: 800px; width: 100%; margin: 0;" data-callout-type="${calloutType.toLowerCase()}"><div class="callout__title">${title}</div><div class="callout__body">${bodyHtml}</div></div>`;
});
html = html.replace(/^>\s(.*)/gm, '<blockquote class="border-l-4 border-gray-300 dark:border-gray-500 pl-4 py-2 my-4 italic text-gray-700 dark:text-gray-300">$1</blockquote>');
// Task lists
const transformTaskItem = (_match: string, marker: string, rawContent: string) => {
const isChecked = marker.toLowerCase() === 'x';
const classes = [
'md-task-item',
'text-obs-l-text-main',
'dark:text-obs-d-text-main'
];
if (isChecked) {
classes.push('md-task-item--done');
}
const content = rawContent.trim();
const checkboxState = isChecked ? 'checked' : '';
const ariaChecked = isChecked ? 'true' : 'false';
return `<li class="${classes.join(' ')}"><label class="md-task"><input type="checkbox" class="md-task-checkbox" ${checkboxState} disabled aria-checked="${ariaChecked}" tabindex="-1"><span class="md-task-label-text">${content}</span></label></li>`;
};
html = html.replace(/^\s*(?:[\-\*]|\d+\.)\s+\[( |x|X)\]\s+(.*)$/gm, transformTaskItem);
// Lists (simple implementation)
html = html.replace(/^\s*[\-\*]\s(.*)/gm, '<li class="ml-6 list-disc">$1</li>');
html = html.replace(/^\s*\d+\.\s(.*)/gm, '<li class="ml-6 list-decimal">$1</li>');
html = html.replace(/<\/li>\n<li/g, '</li><li'); // Fix spacing
html = html.replace(/(<li.*<\/li>)/gs, (match) => {
if (match.includes('md-task-item')) return `<ul class="mb-4 md-task-list">${match}</ul>`;
if (match.includes('list-disc')) return `<ul class="mb-4">${match}</ul>`;
if (match.includes('list-decimal')) return `<ol class="mb-4">${match}</ol>`;
return match;
});
// Inline Code
html = html.replace(/(`+)([\s\S]*?)\1/g, (match, fence, inlineCode) => {
if (inlineCode.includes('\n')) {
return match;
}
const safeContent = this.escapeHtml(inlineCode.trim());
return `<code class="inline-code">${safeContent}</code>`;
});
// External images ![alt](url "title")
html = html.replace(/!\[(.*?)\]\(((?:https?|ftp|file):\/\/[^\s\)]*)(?:\s+"(.*?)")?\)/g, (match, alt, url, title) => {
const safeAlt = this.escapeHtml(alt ?? '');
const safeUrl = this.escapeHtml(url ?? '');
const safeTitle = title ? this.escapeHtml(title) : '';
const titleAttr = title ? ` title="${safeTitle}"` : '';
const captionSource = title && title.trim() ? title : alt;
const safeCaption = captionSource ? this.escapeHtml(captionSource) : '';
const figcaption = safeCaption
? `<figcaption class="text-center text-sm text-obs-l-text-muted dark:text-obs-d-text-muted">${safeCaption}</figcaption>`
: '';
return `<figure class="my-4 md-attachment-figure">
<img src="${safeUrl}" alt="${safeAlt}"${titleAttr} loading="lazy" class="rounded-lg max-w-full h-auto mx-auto">
${figcaption}
</figure>`;
});
// External links [text](url "title")
html = html.replace(/\[(.*?)\]\(((?:https?|ftp|file|mailto):\/\/[^\s\)]*)(?:\s+"(.*?)")?\)/g, (match, label, url, title) => {
const safeLabel = this.escapeHtml(label ?? '');
const safeUrl = this.escapeHtml(url ?? '');
const safeTitle = title ? this.escapeHtml(title) : '';
const titleAttr = title ? ` title="${safeTitle}"` : '';
return `<a href="${safeUrl}"${titleAttr} target="_blank" rel="noopener noreferrer" class="md-external-link">${safeLabel}</a>`;
});
html = this.transformCallouts(html);
html = this.transformTaskLists(html);
html = this.wrapTables(html);
// Embedded Files ![[file.png]] using Attachements-Path from HOME.md (traité avant les liens internes)
const homeNote = allNotes.find(n =>
@ -190,16 +62,6 @@ export class MarkdownService {
</figure>`;
});
// Horizontal Rule
html = html.replace(/^-{3,}/gm, '<hr class="my-6 border-obs-l-border dark:border-obs-d-border">');
// Paragraphs and line breaks
html = html.split('\n').map(p => p.trim() === '' ? '' : `<p>${p}</p>`).join('').replace(/<\/p><p>/g, '</p><br><p>');
// Restore code blocks
for (const [id, block] of codeBlocks.entries()) {
html = html.replace(id, block.html);
}
// Placeholder for unsupported elements
html = html.replace(/\$\$(.*?)\$\$/g, '<div class="my-4 p-4 bg-obs-l-bg-secondary text-obs-l-text-muted dark:bg-obs-d-bg-secondary dark:text-obs-d-text-muted rounded text-center">[LaTeX Equation: $1]</div>');
@ -261,115 +123,251 @@ export class MarkdownService {
this.tagColorCache.set(normalized, index);
return `md-tag-color-${index}`;
}
private createMarkdownIt(env: MarkdownRenderEnv): MarkdownIt {
const md = new MarkdownIt('commonmark', {
html: true,
linkify: false,
typographer: false,
breaks: false
});
private convertTables(markdown: string): string {
const lines = markdown.split('\n');
const result: string[] = [];
let index = 0;
md.use(markdownItAttrs, {
leftDelimiter: '{',
rightDelimiter: '}',
allowedAttributes: ['id', 'class']
});
while (index < lines.length) {
const currentLine = lines[index];
if (this.isTableRow(currentLine) && this.isSeparatorRow(lines[index + 1] ?? '')) {
const headerCells = this.splitTableRow(currentLine);
const separatorLine = lines[index + 1];
const rows: string[][] = [];
index += 2;
md.use(markdownItAnchor, {
slugify: (str) => this.slugify(str),
tabIndex: false
});
while (index < lines.length && this.isTableRow(lines[index])) {
rows.push(this.splitTableRow(lines[index]));
index += 1;
md.use(markdownItTaskLists, {
enabled: false
});
md.renderer.rules.fence = (tokens, idx, _options, renderEnv) => {
const list = tokens as unknown as MarkdownItToken[];
return this.renderFence(list[idx], renderEnv as MarkdownRenderEnv);
};
md.renderer.rules.code_inline = (tokens, idx) => {
const content = tokens[idx].content;
return `<code class="inline-code">${this.escapeHtml(content)}</code>`;
};
md.renderer.rules.heading_open = (tokens, idx, options, renderEnv, self) => {
const list = tokens as unknown as MarkdownItToken[];
const token = list[idx];
const level = Number.parseInt(token.tag.replace('h', ''), 10);
const headingClass = `md-heading md-heading-${level} text-obs-l-text-main dark:text-white font-bold mt-6 mb-3 pb-1 border-b border-obs-l-border dark:border-obs-d-border`;
token.attrJoin('class', headingClass);
return self.renderToken(tokens, idx, options);
};
md.renderer.rules.blockquote_open = (tokens, idx, options, renderEnv, self) => {
const list = tokens as unknown as MarkdownItToken[];
const token = list[idx];
token.attrJoin('class', 'border-l-4 border-gray-300 dark:border-gray-500 pl-4 py-2 my-4 italic text-gray-700 dark:text-gray-300');
return self.renderToken(tokens, idx, options);
};
md.renderer.rules.bullet_list_open = (tokens, idx, options, renderEnv, self) => {
const list = tokens as unknown as MarkdownItToken[];
const token = list[idx];
token.attrJoin('class', 'mb-4 list-disc ml-6');
return self.renderToken(tokens, idx, options);
};
md.renderer.rules.ordered_list_open = (tokens, idx, options, renderEnv, self) => {
const list = tokens as unknown as MarkdownItToken[];
const token = list[idx];
token.attrJoin('class', 'mb-4 list-decimal ml-6');
return self.renderToken(tokens, idx, options);
};
const defaultLinkOpen = md.renderer.rules.link_open ?? ((tokens, idx, options, renderEnv, self) => self.renderToken(tokens, idx, options));
md.renderer.rules.link_open = (tokens, idx, options, renderEnv, self) => {
const list = tokens as unknown as MarkdownItToken[];
const token = list[idx];
const href = token.attrGet('href') ?? '';
if (/^(https?|ftp|file|mailto):\/\//i.test(href)) {
token.attrSet('target', '_blank');
token.attrSet('rel', 'noopener noreferrer');
token.attrJoin('class', 'md-external-link');
}
return defaultLinkOpen(tokens, idx, options, renderEnv, self);
};
md.renderer.rules.image = (tokens, idx) => {
const list = tokens as unknown as MarkdownItToken[];
const token = list[idx];
const src = token.attrGet('src') ?? '';
const title = token.attrGet('title');
const alt = token.content ?? '';
if (!/^(https?|ftp|file):\/\//i.test(src)) {
return `<img src="${this.escapeHtml(src)}" alt="${this.escapeHtml(alt)}"${title ? ` title="${this.escapeHtml(title)}"` : ''}>`;
}
const safeUrl = this.escapeHtml(src);
const safeAlt = this.escapeHtml(alt);
const safeTitle = title ? this.escapeHtml(title) : '';
const titleAttr = title ? ` title="${safeTitle}"` : '';
const captionSource = title && title.trim() ? title : alt;
const safeCaption = captionSource ? this.escapeHtml(captionSource) : '';
const figcaption = safeCaption ? `<figcaption class="text-center text-sm text-obs-l-text-muted dark:text-obs-d-text-muted">${safeCaption}</figcaption>` : '';
return `<figure class="my-4 md-attachment-figure">
<img src="${safeUrl}" alt="${safeAlt}"${titleAttr} loading="lazy" class="rounded-lg max-w-full h-auto mx-auto">
${figcaption}
</figure>`;
};
md.renderer.rules.hr = () => '<hr class="my-6 border-obs-l-border dark:border-obs-d-border">';
return md;
}
private renderFence(token: MarkdownItToken, env: MarkdownRenderEnv): string {
const rawLanguage = (token.info ?? '').trim();
const normalizedLanguage = rawLanguage.toLowerCase();
const isMermaid = normalizedLanguage === 'mermaid';
const languageLabel = rawLanguage || 'plaintext';
const languageDisplay = rawLanguage ? rawLanguage : 'Plain text';
const encodedRawCode = encodeURIComponent(token.content);
const safeLanguageDisplay = this.escapeHtml(languageDisplay);
const codeId = `code-block-${env.codeBlockIndex++}`;
let bodyHtml: string;
if (isMermaid) {
bodyHtml = `
<div class="code-block__body mermaid-block__body">
<div class="mermaid-diagram" data-mermaid-code="${encodedRawCode}"></div>
<pre class="mermaid-source" hidden><code class="hljs" data-raw-code="${encodedRawCode}">${this.escapeHtml(token.content)}</code></pre>
</div>
`;
} else {
const highlightedCode = this.highlightCode(token.content, normalizedLanguage);
bodyHtml = `<pre class="code-block__body"><code class="hljs" data-raw-code="${encodedRawCode}">${highlightedCode}</code></pre>`;
}
const headerHtml = `
<div class="code-block__header">
<div class="code-block__controls" aria-hidden="true">
<span></span><span></span><span></span>
</div>
<div class="code-block__actions">
<button type="button" class="code-block__language-badge" data-language="${languageLabel.toLowerCase()}" data-code-id="${codeId}">${safeLanguageDisplay}</button>
<span class="code-block__copy-feedback" hidden></span>
</div>
</div>
`;
const wrapperClass = isMermaid ? 'code-block code-block--mermaid text-left' : 'code-block text-left';
return `<div class="${wrapperClass}" style="max-width: 800px; width: 100%; margin: 0;" data-language="${languageLabel.toLowerCase()}" data-code-id="${codeId}">${headerHtml}${bodyHtml}</div>`;
}
private highlightCode(code: string, language: string): string {
if (language && hljs.getLanguage(language)) {
return hljs.highlight(code, { language }).value;
}
return hljs.highlightAuto(code).value;
}
private transformCallouts(html: string): string {
return html.replace(/<blockquote([\s\S]*?)>([\s\S]*?)<\/blockquote>/g, (match, _attrs, inner) => {
const firstParagraphMatch = inner.match(/^\s*<p>([\s\S]*?)<\/p>([\s\S]*)$/);
if (!firstParagraphMatch) {
return match;
}
const markerMatch = firstParagraphMatch[1].match(/^\s*\[!(\w+)\]\s*([\s\S]*)$/);
if (!markerMatch) {
return match;
}
const type = markerMatch[1].toUpperCase();
const calloutClass = this.getCalloutClass(type);
const title = this.formatCalloutTitle(type);
const remainingFirstParagraph = markerMatch[2].trim();
const restContent = firstParagraphMatch[2].trim();
const bodySegments: string[] = [];
if (remainingFirstParagraph) {
bodySegments.push(`<p>${remainingFirstParagraph}</p>`);
}
if (restContent) {
bodySegments.push(restContent);
}
const bodyHtml = bodySegments.join('');
return `<div class="${calloutClass} text-left" style="max-width: 800px; width: 100%; margin: 0;" data-callout-type="${type.toLowerCase()}"><div class="callout__title">${title}</div><div class="callout__body">${bodyHtml}</div></div>`;
});
}
private transformTaskLists(html: string): string {
const listRegex = /<ul class="([^"]*?task-list[^"]*?)">/g;
html = html.replace(listRegex, (_match, classAttr) => {
const classes = classAttr.split(/\s+/).filter(Boolean).filter(cls => !['task-list', 'list-disc', 'list-decimal', 'ml-6'].includes(cls));
const classList = Array.from(new Set([...classes, 'md-task-list', 'mb-4']));
return `<ul class="${classList.join(' ')}">`;
});
const itemRegex = /<li class="task-list-item([^"]*)">([\s\S]*?)<\/li>/g;
return html.replace(itemRegex, (_match, extraClasses, inner) => {
const isChecked = /<input[^>]*\schecked[^>]*>/i.test(inner);
const classes = ['md-task-item', 'text-obs-l-text-main', 'dark:text-obs-d-text-main'];
if (isChecked) {
classes.push('md-task-item--done');
}
const trimmedInner = inner.trim();
const inputMatch = trimmedInner.match(/^<input[^>]*>/i);
if (!inputMatch) {
return _match;
}
const remaining = trimmedInner.slice(inputMatch[0].length).trim();
let primaryContent = remaining;
let trailingContent = '';
const paragraphMatch = remaining.match(/^<p>([\s\S]*?)<\/p>([\s\S]*)$/);
if (paragraphMatch) {
primaryContent = paragraphMatch[1].trim();
trailingContent = paragraphMatch[2].trim();
}
if (!paragraphMatch && remaining.includes('<')) {
const firstTagIndex = remaining.indexOf('<');
if (firstTagIndex > 0) {
primaryContent = remaining.slice(0, firstTagIndex).trim();
trailingContent = remaining.slice(firstTagIndex).trim();
}
const columnCount = Math.max(
headerCells.length,
...rows.map(row => row.length)
);
const alignments = this.parseAlignments(separatorLine, columnCount);
const headerHtml = Array.from({ length: columnCount }, (_, colIndex) => {
const content = headerCells[colIndex] ?? '';
return this.buildTableCell('th', content, alignments[colIndex]);
}).join('');
const bodyHtml = rows.map(row => {
const cells = Array.from({ length: columnCount }, (_, colIndex) => {
const content = row[colIndex] ?? '';
return this.buildTableCell('td', content, alignments[colIndex]);
}).join('');
return `<tr>${cells}</tr>`;
}).join('');
const tableHtml = `<div class="markdown-table"><table><thead><tr>${headerHtml}</tr></thead>${rows.length ? `<tbody>${bodyHtml}</tbody>` : '<tbody></tbody>'}</table></div>`;
result.push(tableHtml);
continue;
}
result.push(currentLine);
index += 1;
}
const checkboxState = isChecked ? 'checked' : '';
const ariaChecked = isChecked ? 'true' : 'false';
const checkbox = `<input type="checkbox" class="md-task-checkbox" ${checkboxState} disabled aria-checked="${ariaChecked}" tabindex="-1">`;
const labelText = primaryContent || '';
const label = `<label class="md-task">${checkbox}<span class="md-task-label-text">${labelText}</span></label>`;
return result.join('\n');
}
const extra = extraClasses.split(/\s+/).filter(Boolean).filter(cls => cls !== 'task-list-item');
const classList = Array.from(new Set([...classes, ...extra]));
private isTableRow(line: string): boolean {
if (!line) {
return false;
}
const trimmed = line.trim();
if (!trimmed.startsWith('|') || !trimmed.endsWith('|')) {
return false;
}
const segments = this.splitTableRow(trimmed);
return segments.length > 0;
}
private isSeparatorRow(line: string): boolean {
if (!line) {
return false;
}
const segments = this.splitTableRow(line);
if (!segments.length) {
return false;
}
return segments.every(segment => {
const normalized = segment.replace(/\s+/g, '');
return /^:?-{3,}:?$/.test(normalized);
const trailing = trailingContent ? trailingContent : '';
return `<li class="${classList.join(' ')}">${label}${trailing}</li>`;
});
}
private splitTableRow(line: string): string[] {
let trimmed = line.trim();
if (trimmed.startsWith('|')) {
trimmed = trimmed.slice(1);
}
if (trimmed.endsWith('|')) {
trimmed = trimmed.slice(0, -1);
}
return trimmed.split('|').map(cell => cell.trim());
}
private parseAlignments(separatorLine: string, columnCount: number): TableAlignment[] {
const segments = this.splitTableRow(separatorLine);
return Array.from({ length: columnCount }, (_, index) => {
const segment = (segments[index] ?? '').trim();
const normalized = segment.replace(/\s+/g, '');
if (normalized.startsWith(':') && normalized.endsWith(':')) {
return 'center';
}
if (normalized.startsWith(':')) {
return 'left';
}
if (normalized.endsWith(':')) {
return 'right';
}
return null;
private wrapTables(html: string): string {
return html.replace(/<table([\s\S]*?)>([\s\S]*?)<\/table>/g, (_match, attrs, inner) => {
return `<div class="markdown-table"><table${attrs}>${inner}</table></div>`;
});
}
private buildTableCell(tag: 'th' | 'td', content: string, alignment: TableAlignment): string {
const alignStyle = alignment ? ` style="text-align:${alignment};"` : '';
return `<${tag}${alignStyle}>${content}</${tag}>`;
}
private escapeHtml(unsafe: string): string {
return unsafe
.replace(/&/g, "&amp;")