From 7fdb968fd9777886afdf46439393eddf16ce9660 Mon Sep 17 00:00:00 2001 From: onmax Date: Wed, 21 Oct 2026 16:16:53 +0200 Subject: [PATCH 1/6] feat!: require comark 0.8, whose parser keeps Markdown inside HTML blocks Comark 0.8's token processor (comarkdown/comark#401) keeps Markdown written after a blank line inside
and
instead of after them (comarkdown/comark#235). The peer ranges move from ^0.7.0 to ^0.8.0. --- packages/annotate/package.json | 4 +- packages/carousel/package.json | 4 +- packages/charts/package.json | 4 +- packages/code/package.json | 4 +- packages/embed/package.json | 4 +- packages/github-callouts/package.json | 4 +- packages/icon/package.json | 4 +- packages/include/package.json | 2 +- packages/lint/package.json | 2 +- packages/tabs/package.json | 4 +- packages/zoom/package.json | 4 +- pnpm-lock.yaml | 196 ++++++++++---------------- pnpm-workspace.yaml | 14 +- 13 files changed, 104 insertions(+), 146 deletions(-) diff --git a/packages/annotate/package.json b/packages/annotate/package.json index 637071d1..eb2a90ad 100644 --- a/packages/annotate/package.json +++ b/packages/annotate/package.json @@ -53,8 +53,8 @@ "comark": "catalog:" }, "peerDependencies": { - "@comark/html": "^0.7.0", - "comark": "^0.7.0" + "@comark/html": "^0.8.0", + "comark": "^0.8.0" }, "engines": { "node": ">=22.12.0" diff --git a/packages/carousel/package.json b/packages/carousel/package.json index e97ae929..39123d1e 100644 --- a/packages/carousel/package.json +++ b/packages/carousel/package.json @@ -67,8 +67,8 @@ "vue": "catalog:" }, "peerDependencies": { - "@comark/html": "^0.7.0", - "comark": "^0.7.0", + "@comark/html": "^0.8.0", + "comark": "^0.8.0", "react": ">=18", "svelte": ">=5", "vue": ">=3.5" diff --git a/packages/charts/package.json b/packages/charts/package.json index 38fcdc45..def6c74b 100644 --- a/packages/charts/package.json +++ b/packages/charts/package.json @@ -58,8 +58,8 @@ "comark-zoom": "workspace:*" }, "peerDependencies": { - "@comark/html": "^0.7.0", - "comark": "^0.7.0" + "@comark/html": "^0.8.0", + "comark": "^0.8.0" }, "peerDependenciesMeta": { "@comark/html": { diff --git a/packages/code/package.json b/packages/code/package.json index 6ef8f909..3c216e3e 100644 --- a/packages/code/package.json +++ b/packages/code/package.json @@ -65,8 +65,8 @@ "vue": "catalog:" }, "peerDependencies": { - "@comark/html": "^0.7.0", - "comark": "^0.7.0", + "@comark/html": "^0.8.0", + "comark": "^0.8.0", "react": ">=18", "svelte": ">=5.20", "vue": ">=3.5" diff --git a/packages/embed/package.json b/packages/embed/package.json index 9cb2126a..59a8906f 100644 --- a/packages/embed/package.json +++ b/packages/embed/package.json @@ -66,8 +66,8 @@ "vue": "catalog:" }, "peerDependencies": { - "@comark/html": "^0.7.0", - "comark": "^0.7.0", + "@comark/html": "^0.8.0", + "comark": "^0.8.0", "react": ">=18", "svelte": ">=5", "vue": ">=3.5" diff --git a/packages/github-callouts/package.json b/packages/github-callouts/package.json index b893c699..b3553173 100644 --- a/packages/github-callouts/package.json +++ b/packages/github-callouts/package.json @@ -66,8 +66,8 @@ "vue": "catalog:" }, "peerDependencies": { - "@comark/html": "^0.7.0", - "comark": "^0.7.0", + "@comark/html": "^0.8.0", + "comark": "^0.8.0", "react": ">=18", "svelte": ">=5", "vue": ">=3.5" diff --git a/packages/icon/package.json b/packages/icon/package.json index 89751f76..5920d929 100644 --- a/packages/icon/package.json +++ b/packages/icon/package.json @@ -68,8 +68,8 @@ "vue": "catalog:" }, "peerDependencies": { - "@comark/html": "^0.7.0", - "comark": "^0.7.0", + "@comark/html": "^0.8.0", + "comark": "^0.8.0", "react": ">=18", "svelte": ">=5", "vue": ">=3.5" diff --git a/packages/include/package.json b/packages/include/package.json index a2cb262d..25c43380 100644 --- a/packages/include/package.json +++ b/packages/include/package.json @@ -44,7 +44,7 @@ "comark": "catalog:" }, "peerDependencies": { - "comark": "^0.7.0" + "comark": "^0.8.0" }, "engines": { "node": ">=22.12.0" diff --git a/packages/lint/package.json b/packages/lint/package.json index 5fda0ac7..a9da6032 100644 --- a/packages/lint/package.json +++ b/packages/lint/package.json @@ -54,7 +54,7 @@ "vite-doctor": "catalog:" }, "peerDependencies": { - "comark": "^0.7.0", + "comark": "^0.8.0", "comark-annotate": "workspace:^", "comark-carousel": "workspace:^", "comark-charts": "workspace:^", diff --git a/packages/tabs/package.json b/packages/tabs/package.json index 0cf6dd08..83b32833 100644 --- a/packages/tabs/package.json +++ b/packages/tabs/package.json @@ -67,8 +67,8 @@ "vue": "catalog:" }, "peerDependencies": { - "@comark/html": "^0.7.0", - "comark": "^0.7.0", + "@comark/html": "^0.8.0", + "comark": "^0.8.0", "react": ">=18", "svelte": ">=5.20", "vue": ">=3.5" diff --git a/packages/zoom/package.json b/packages/zoom/package.json index 511b3466..49dead4e 100644 --- a/packages/zoom/package.json +++ b/packages/zoom/package.json @@ -65,8 +65,8 @@ "vue": "catalog:" }, "peerDependencies": { - "@comark/html": "^0.7.0", - "comark": "^0.7.0", + "@comark/html": "^0.8.0", + "comark": "^0.8.0", "react": ">=18", "svelte": ">=5", "vue": ">=3.5" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d718cb0b..7dffe8fa 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,14 +7,14 @@ settings: catalogs: default: '@comark/html': - specifier: ^0.7.0 - version: 0.7.0 + specifier: ^0.8.1 + version: 0.8.1 '@comark/react': - specifier: ^0.7.0 - version: 0.7.0 + specifier: ^0.8.1 + version: 0.8.1 '@comark/vue': - specifier: ^0.7.0 - version: 0.7.0 + specifier: ^0.8.1 + version: 0.8.1 '@fontsource-variable/caveat': specifier: ^5.3.0 version: 5.3.0 @@ -40,8 +40,8 @@ catalogs: specifier: ^19.3.0 version: 19.3.0 comark: - specifier: ^0.7.0 - version: 0.7.0 + specifier: ^0.8.1 + version: 0.8.1 flint-chart: specifier: ^0.5.1 version: 0.5.1 @@ -100,7 +100,7 @@ importers: devDependencies: '@comark/html': specifier: 'catalog:' - version: 0.7.0(shiki@4.5.0) + version: 0.8.1(shiki@4.5.0) '@fontsource-variable/caveat': specifier: 'catalog:' version: 5.3.0 @@ -115,7 +115,7 @@ importers: version: 24.19.2 comark: specifier: 'catalog:' - version: 0.7.0(shiki@4.5.0) + version: 0.8.1(shiki@4.5.0) comark-linter: specifier: workspace:* version: link:packages/lint @@ -158,10 +158,10 @@ importers: devDependencies: '@comark/html': specifier: 'catalog:' - version: 0.7.0(shiki@4.5.0) + version: 0.8.1(shiki@4.5.0) comark: specifier: 'catalog:' - version: 0.7.0(shiki@4.5.0) + version: 0.8.1(shiki@4.5.0) packages/carousel: dependencies: @@ -171,13 +171,13 @@ importers: devDependencies: '@comark/html': specifier: 'catalog:' - version: 0.7.0(shiki@4.5.0) + version: 0.8.1(shiki@4.5.0) '@comark/react': specifier: 'catalog:' - version: 0.7.0(react@19.3.1)(shiki@4.5.0) + version: 0.8.1(react@19.3.1)(shiki@4.5.0) '@comark/vue': specifier: 'catalog:' - version: 0.7.0(shiki@4.5.0)(vue@3.5.44(typescript@6.0.3)) + version: 0.8.1(shiki@4.5.0)(vue@3.5.44(typescript@6.0.3)) '@types/react': specifier: 'catalog:' version: 19.3.0 @@ -186,7 +186,7 @@ importers: version: 19.3.0(@types/react@19.3.0) comark: specifier: 'catalog:' - version: 0.7.0(shiki@4.5.0) + version: 0.8.1(shiki@4.5.0) react: specifier: 'catalog:' version: 19.3.1 @@ -220,10 +220,10 @@ importers: devDependencies: '@comark/html': specifier: 'catalog:' - version: 0.7.0(shiki@4.5.0) + version: 0.8.1(shiki@4.5.0) comark: specifier: 'catalog:' - version: 0.7.0(shiki@4.5.0) + version: 0.8.1(shiki@4.5.0) comark-zoom: specifier: workspace:* version: link:../zoom @@ -232,13 +232,13 @@ importers: devDependencies: '@comark/html': specifier: 'catalog:' - version: 0.7.0(shiki@4.5.0) + version: 0.8.1(shiki@4.5.0) '@comark/react': specifier: 'catalog:' - version: 0.7.0(react@19.3.1)(shiki@4.5.0) + version: 0.8.1(react@19.3.1)(shiki@4.5.0) '@comark/vue': specifier: 'catalog:' - version: 0.7.0(shiki@4.5.0)(vue@3.5.44(typescript@6.0.3)) + version: 0.8.1(shiki@4.5.0)(vue@3.5.44(typescript@6.0.3)) '@types/react': specifier: 'catalog:' version: 19.3.0 @@ -247,7 +247,7 @@ importers: version: 19.3.0(@types/react@19.3.0) comark: specifier: 'catalog:' - version: 0.7.0(shiki@4.5.0) + version: 0.8.1(shiki@4.5.0) comark-tabs: specifier: workspace:* version: link:../tabs @@ -271,13 +271,13 @@ importers: devDependencies: '@comark/html': specifier: 'catalog:' - version: 0.7.0(shiki@4.5.0) + version: 0.8.1(shiki@4.5.0) '@comark/react': specifier: 'catalog:' - version: 0.7.0(react@19.3.1)(shiki@4.5.0) + version: 0.8.1(react@19.3.1)(shiki@4.5.0) '@comark/vue': specifier: 'catalog:' - version: 0.7.0(shiki@4.5.0)(vue@3.5.44(typescript@6.0.3)) + version: 0.8.1(shiki@4.5.0)(vue@3.5.44(typescript@6.0.3)) '@types/react': specifier: 'catalog:' version: 19.3.0 @@ -286,7 +286,7 @@ importers: version: 19.3.0(@types/react@19.3.0) comark: specifier: 'catalog:' - version: 0.7.0(shiki@4.5.0) + version: 0.8.1(shiki@4.5.0) comark-zoom: specifier: workspace:* version: link:../zoom @@ -307,13 +307,13 @@ importers: devDependencies: '@comark/html': specifier: 'catalog:' - version: 0.7.0(shiki@4.5.0) + version: 0.8.1(shiki@4.5.0) '@comark/react': specifier: 'catalog:' - version: 0.7.0(react@19.3.1)(shiki@4.5.0) + version: 0.8.1(react@19.3.1)(shiki@4.5.0) '@comark/vue': specifier: 'catalog:' - version: 0.7.0(shiki@4.5.0)(vue@3.5.44(typescript@6.0.3)) + version: 0.8.1(shiki@4.5.0)(vue@3.5.44(typescript@6.0.3)) '@types/react': specifier: 'catalog:' version: 19.3.0 @@ -322,7 +322,7 @@ importers: version: 19.3.0(@types/react@19.3.0) comark: specifier: 'catalog:' - version: 0.7.0(shiki@4.5.0) + version: 0.8.1(shiki@4.5.0) comark-zoom: specifier: workspace:* version: link:../zoom @@ -350,13 +350,13 @@ importers: devDependencies: '@comark/html': specifier: 'catalog:' - version: 0.7.0(shiki@4.5.0) + version: 0.8.1(shiki@4.5.0) '@comark/react': specifier: 'catalog:' - version: 0.7.0(react@19.3.1)(shiki@4.5.0) + version: 0.8.1(react@19.3.1)(shiki@4.5.0) '@comark/vue': specifier: 'catalog:' - version: 0.7.0(shiki@4.5.0)(vue@3.5.44(typescript@6.0.3)) + version: 0.8.1(shiki@4.5.0)(vue@3.5.44(typescript@6.0.3)) '@types/react': specifier: 'catalog:' version: 19.3.0 @@ -365,7 +365,7 @@ importers: version: 19.3.0(@types/react@19.3.0) comark: specifier: 'catalog:' - version: 0.7.0(shiki@4.5.0) + version: 0.8.1(shiki@4.5.0) react: specifier: 'catalog:' version: 19.3.1 @@ -383,16 +383,16 @@ importers: devDependencies: '@comark/html': specifier: 'catalog:' - version: 0.7.0(shiki@4.5.0) + version: 0.8.1(shiki@4.5.0) comark: specifier: 'catalog:' - version: 0.7.0(shiki@4.5.0) + version: 0.8.1(shiki@4.5.0) packages/lint: devDependencies: comark: specifier: 'catalog:' - version: 0.7.0(shiki@4.5.0) + version: 0.8.1(shiki@4.5.0) comark-annotate: specifier: workspace:* version: link:../annotate @@ -429,13 +429,13 @@ importers: devDependencies: '@comark/html': specifier: 'catalog:' - version: 0.7.0(shiki@4.5.0) + version: 0.8.1(shiki@4.5.0) '@comark/react': specifier: 'catalog:' - version: 0.7.0(react@19.3.1)(shiki@4.5.0) + version: 0.8.1(react@19.3.1)(shiki@4.5.0) '@comark/vue': specifier: 'catalog:' - version: 0.7.0(shiki@4.5.0)(vue@3.5.44(typescript@6.0.3)) + version: 0.8.1(shiki@4.5.0)(vue@3.5.44(typescript@6.0.3)) '@types/react': specifier: 'catalog:' version: 19.3.0 @@ -444,7 +444,7 @@ importers: version: 19.3.0(@types/react@19.3.0) comark: specifier: 'catalog:' - version: 0.7.0(shiki@4.5.0) + version: 0.8.1(shiki@4.5.0) comark-zoom: specifier: workspace:* version: link:../zoom @@ -465,13 +465,13 @@ importers: devDependencies: '@comark/html': specifier: 'catalog:' - version: 0.7.0(shiki@4.5.0) + version: 0.8.1(shiki@4.5.0) '@comark/react': specifier: 'catalog:' - version: 0.7.0(react@19.3.1)(shiki@4.5.0) + version: 0.8.1(react@19.3.1)(shiki@4.5.0) '@comark/vue': specifier: 'catalog:' - version: 0.7.0(shiki@4.5.0)(vue@3.5.44(typescript@6.0.3)) + version: 0.8.1(shiki@4.5.0)(vue@3.5.44(typescript@6.0.3)) '@types/react': specifier: 'catalog:' version: 19.3.0 @@ -480,7 +480,7 @@ importers: version: 19.3.0(@types/react@19.3.0) comark: specifier: 'catalog:' - version: 0.7.0(shiki@4.5.0) + version: 0.8.1(shiki@4.5.0) react: specifier: 'catalog:' version: 19.3.1 @@ -533,12 +533,12 @@ packages: '@cacheable/utils@2.5.0': resolution: {integrity: sha512-buipgOVDkkPXNR5+xBpDw7Zk2n1EvU7qBJCNUcL7rhQ//kfpOXPAvQ511Os0vpLYJ1pZnvudNytkQt2hst3wqA==} - '@comark/html@0.7.0': - resolution: {integrity: sha512-lTt7C2DK5gQt5BFcGD9GAfLhw8MnrZ15CKKJbqMJf2oQGZyjPe56CnL73Nj/cx+B/59t22pLRknpdbJmhNabWA==} + '@comark/html@0.8.1': + resolution: {integrity: sha512-0lgJEnx+lnWmQszLkkGosG/AoJMZmWTRG/kUTwpCBxVxin3yIbjLf+2TA1aR/4XNvnyjMjcaFPR8iKh4OHh4AQ==} peerDependencies: - beautiful-mermaid: '>=1.0' - katex: '>=0.16' - shiki: ^4.3.1 + beautiful-mermaid: '>=1.1.3' + katex: '>=0.18.7' + shiki: ^4.4.3 peerDependenciesMeta: beautiful-mermaid: optional: true @@ -547,13 +547,13 @@ packages: shiki: optional: true - '@comark/react@0.7.0': - resolution: {integrity: sha512-Pn0PtRWGSl7HmJjzsE+1WIna+jgHj1yIf0PvG6vjrfev7cBX+GSbUCWCCWSehPhnETRiYgV+yOYfOOSPGUvfxg==} + '@comark/react@0.8.1': + resolution: {integrity: sha512-mEvUVMjU/9iMln6Q9nCRHeygKN0chqenEkP+ORogUZHN9FcQuHIcScJNOrcDaKyXarVNWNTRVvySwGlL6sGDgA==} peerDependencies: beautiful-mermaid: ^1.1.3 - katex: ^0.17.0 - react: ^19.0.0 - shiki: ^4.3.1 + katex: ^0.18.7 + react: ^19.3.0 + shiki: ^4.4.3 peerDependenciesMeta: beautiful-mermaid: optional: true @@ -562,13 +562,13 @@ packages: shiki: optional: true - '@comark/vue@0.7.0': - resolution: {integrity: sha512-C63ObcCAiM5DKVDhWPz27pCRsvl0IG9XZJDGjFef1h/V4kS6lEjsoyepLdl4pvAPoSn6U0oGiJTgHLj5GCw2rQ==} + '@comark/vue@0.8.1': + resolution: {integrity: sha512-zMxShbPfynnSU5AWH7IeXe2RYm8YIqb5r5XC6eX2Rzv5Ed3/jypbCwp2o1JZAEV0/S3Mczil7Nnb0mzMaOAvHA==} peerDependencies: beautiful-mermaid: ^1.1.3 - katex: ^0.17.0 - shiki: ^4.3.1 - vue: ^3.5.0 + katex: ^0.18.7 + shiki: ^4.4.3 + vue: ^3.5.43 peerDependenciesMeta: beautiful-mermaid: optional: true @@ -2093,13 +2093,13 @@ packages: engines: {node: '>=20'} hasBin: true - comark@0.7.0: - resolution: {integrity: sha512-680hLtUOBcvBEJCD+iCU20jk5TrIJlIcE6X4npdC4x7LBhCvmiYJgByozR2fKav6DYw7AYoXsJVae65kXV6Qhw==} + comark@0.8.1: + resolution: {integrity: sha512-oz2Nrt3o/e5SRYVgd3PlBwDUp5P4PWYZbVggORI02rLF63WEjHYkPJkxZh2Hwfpl0J4jDLspe6aeUraNplAsAw==} peerDependencies: beautiful-mermaid: ^1.1.3 - katex: ^0.17.0 + katex: ^0.18.7 rangi: ^2.2.0 - shiki: ^4.3.1 + shiki: ^4.4.3 peerDependenciesMeta: beautiful-mermaid: optional: true @@ -2269,22 +2269,6 @@ packages: dom-accessibility-api@0.5.16: resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} - dom-serializer@3.1.1: - resolution: {integrity: sha512-4MEa38/QexBob6gFNwu+EGdWvhJ1OKuNwdYY3Y3NyeWDQfnGeDYQUDfIRzWu5B5gsv03so2Uxd28YC6zrsx3Lw==} - engines: {node: '>=20.19.0'} - - domelementtype@3.0.0: - resolution: {integrity: sha512-umCQid3jKbDmVjx8jGaW7uUykm4DEUeyV21hPxNMo2nV955DhUThwqyOIDtreepP31hl84X7G5U9ZfsWvIB3Pg==} - engines: {node: '>=20.19.0'} - - domhandler@6.0.1: - resolution: {integrity: sha512-gYzvtM72ZtxQO0T048kd6HWSbbGCNOUwcnfQ01cqIJ4X2IYKFFHZ5mKvrQETcFXxsRObZulDaKmy//R7TPtsBg==} - engines: {node: '>=20.19.0'} - - domutils@4.0.2: - resolution: {integrity: sha512-qI4JLRKnSzqFqr7hAlS5xQDusBCjKSEG4t4+7aNrIQMHBcsC2TGEhuyABJdYkgSewL57PNLYEiibY2iPKhKpaA==} - engines: {node: '>=20.19.0'} - dts-resolver@3.0.0: resolution: {integrity: sha512-1T1f+z+4tl9XD+m+0HBgWoL/nm0bOIffyWaUuUSBlFg/86IWvfx+wjNaO/ybU0AJzG9/Mi5hBUgGV6zCmWEN7Q==} engines: {node: ^22.18.0 || >=24.0.0} @@ -2503,10 +2487,6 @@ packages: html-void-elements@3.0.0: resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} - htmlparser2@12.0.0: - resolution: {integrity: sha512-Tz7u1i95/g2x2jz81+x0FBVhBhY5aRTvD3tXXdFaljuNdzDLJ8UGNRrTcj2cgQvAg3iW/h77Fz15nLW0L0CrZw==} - engines: {node: '>=20.19.0'} - iconv-lite@0.6.3: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} @@ -2661,8 +2641,8 @@ packages: magic-string@1.4.3: resolution: {integrity: sha512-z12OxmaPGE0F4xlpGdjuAUckipLpQlTAuAmyGhNoD7ODpYUzvDfvtxUbjM/jwznyP178oju/KDdyi220wNJ0RQ==} - markdown-exit@1.1.0-beta.2: - resolution: {integrity: sha512-8CzMGVlFZ4DEfnc8KU+4ycUW2SIOuiXqCHD7z51ecVEi/weyc0f2ylQbCm4KoKuVlTZSuMUMnWT0hTyquZ7anQ==} + markdown-exit@1.3.0: + resolution: {integrity: sha512-bsqlcm3Hk1ukcG1Al83pp3JjVobu4w1mpZz47OzLw8bCY8XchkCX+PXC32l2TH4nZ7p5WFg2NwpnLDXkY1X7Yw==} mdast-util-to-hast@13.2.1: resolution: {integrity: sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==} @@ -3461,26 +3441,26 @@ snapshots: hashery: 1.5.1 keyv: 5.6.0 - '@comark/html@0.7.0(shiki@4.5.0)': + '@comark/html@0.8.1(shiki@4.5.0)': dependencies: - comark: 0.7.0(shiki@4.5.0) + comark: 0.8.1(shiki@4.5.0) optionalDependencies: shiki: 4.5.0 transitivePeerDependencies: - rangi - '@comark/react@0.7.0(react@19.3.1)(shiki@4.5.0)': + '@comark/react@0.8.1(react@19.3.1)(shiki@4.5.0)': dependencies: - comark: 0.7.0(shiki@4.5.0) + comark: 0.8.1(shiki@4.5.0) react: 19.3.1 optionalDependencies: shiki: 4.5.0 transitivePeerDependencies: - rangi - '@comark/vue@0.7.0(shiki@4.5.0)(vue@3.5.44(typescript@6.0.3))': + '@comark/vue@0.8.1(shiki@4.5.0)(vue@3.5.44(typescript@6.0.3))': dependencies: - comark: 0.7.0(shiki@4.5.0) + comark: 0.8.1(shiki@4.5.0) vue: 3.5.44(typescript@6.0.3) optionalDependencies: shiki: 4.5.0 @@ -4511,12 +4491,11 @@ snapshots: cn@0.2.6: {} - comark@0.7.0(shiki@4.5.0): + comark@0.8.1(shiki@4.5.0): dependencies: entities: 8.1.0 - htmlparser2: 12.0.0 js-yaml: 5.4.3 - markdown-exit: 1.1.0-beta.2 + markdown-exit: 1.3.0 optionalDependencies: shiki: 4.5.0 @@ -4647,24 +4626,6 @@ snapshots: dom-accessibility-api@0.5.16: {} - dom-serializer@3.1.1: - dependencies: - domelementtype: 3.0.0 - domhandler: 6.0.1 - entities: 8.1.0 - - domelementtype@3.0.0: {} - - domhandler@6.0.1: - dependencies: - domelementtype: 3.0.0 - - domutils@4.0.2: - dependencies: - dom-serializer: 3.1.1 - domelementtype: 3.0.0 - domhandler: 6.0.1 - dts-resolver@3.0.0: {} emoji-regex@10.6.0: {} @@ -4859,13 +4820,6 @@ snapshots: html-void-elements@3.0.0: {} - htmlparser2@12.0.0: - dependencies: - domelementtype: 3.0.0 - domhandler: 6.0.1 - domutils: 4.0.2 - entities: 8.1.0 - iconv-lite@0.6.3: dependencies: safer-buffer: 2.1.2 @@ -4982,7 +4936,7 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.6.0 - markdown-exit@1.1.0-beta.2: + markdown-exit@1.3.0: dependencies: '@types/linkify-it': 5.0.0 '@types/mdurl': 2.0.0 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 954dadb6..7a90244c 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -11,15 +11,15 @@ catalog: "@playwright/test": ^1.64.1 "@types/react": ^19.3.0 "@types/react-dom": ^19.3.0 - "@comark/react": ^0.7.0 - "@comark/svelte": ^0.7.0 - "@comark/vue": ^0.7.0 + "@comark/react": ^0.8.1 + "@comark/svelte": ^0.8.1 + "@comark/vue": ^0.8.1 react: ^19.3.1 react-dom: ^19.3.1 svelte: ^5.57.2 vue: ^3.5.44 - "@comark/html": ^0.7.0 - comark: ^0.7.0 + "@comark/html": ^0.8.1 + comark: ^0.8.1 flint-chart: ^0.5.1 vega: ^6.4.0 vega-interpreter: ^2.3.2 @@ -40,3 +40,7 @@ overrides: minimumReleaseAgeExclude: - vite-doctor@0.1.0 + - '@comark/html@0.8.1' + - '@comark/react@0.8.1' + - '@comark/vue@0.8.1' + - comark@0.8.1 From e20efb38eca83d830116fec770a4eee46fb41ed4 Mon Sep 17 00:00:00 2001 From: onmax Date: Wed, 21 Oct 2026 16:35:22 +0200 Subject: [PATCH 2/6] fix: adapt code and lint to comark 0.8's token processor Comark 0.8 writes a fence's `language` and `filename` on a native `pre` as `data-language` and `data-filename`. comark-code's action event read `language` and so sent an empty language, and its Vue, React, and Svelte `Pre` components, which get the raw attributes, wrote `language=` while the HTML renderer wrote `data-language=`. The script now reads `data-language`, and the components map attributes with Comark's own `toNativeAttributes`. The code, include, and tabs tests expect the new `data-*` attributes, which are Comark's intended output (valid HTML). lint-comark read token types that 0.8 renamed (`mdc_inline_component_open`, `mdc_block_shorthand_open`), so it missed inline and shorthand components. It also looked for `html_block` tokens, which 0.8 turns into paragraphs, and it searched the source for decoded attribute values: `javascript:` now reaches the tree as `javascript:`. It now treats only comments and `
`, `
 
 
-
{@render children?.()}
+
{@render children?.()}
{@html buttons(actions)}
diff --git a/packages/code/src/vue.ts b/packages/code/src/vue.ts index 3d90964c..9e631e59 100644 --- a/packages/code/src/vue.ts +++ b/packages/code/src/vue.ts @@ -1,5 +1,5 @@ import { defineComponent, h, onBeforeUnmount, onMounted } from "vue"; -import { buttons, css, start } from "./client.ts"; +import { buttons, css, preAttributes, start } from "./client.ts"; export { default } from "./index.ts"; @@ -17,7 +17,7 @@ export const Pre = defineComponent({ onBeforeUnmount(() => stop()); return () => h("div", { class: "ck" }, [ - h("pre", attrs, slots.default?.()), + h("pre", preAttributes(attrs), slots.default?.()), h("div", { class: "ck-bar", innerHTML: buttons(props.actions) }), ]); }, diff --git a/packages/code/test/code.test.ts b/packages/code/test/code.test.ts index a470bb35..6fbaa23e 100644 --- a/packages/code/test/code.test.ts +++ b/packages/code/test/code.test.ts @@ -20,7 +20,7 @@ describe("comark-code", () => { it("wraps a code block with Wrap and Copy buttons, and leaves the block as it was", async () => { const html = await markup(sh); expect(html).toMatch( - /^
pnpm add comark-code<\/code><\/pre>
/, + /^
pnpm add comark-code<\/code><\/pre>
/, ); expect(html).toContain( '', + '
pnpm add comark-code
', ); expect(expected.match(/class="ck-copy"/g)).toHaveLength(2); for (const name of ["vue", "react"] as const) { diff --git a/packages/include/test/include.test.ts b/packages/include/test/include.test.ts index 64c79495..2466c30d 100644 --- a/packages/include/test/include.test.ts +++ b/packages/include/test/include.test.ts @@ -81,10 +81,10 @@ describe("comark-include", () => { ], ]); expect(await render(':include{src="src/index.ts" region="setup"}', { read })).toBe( - '
const a = 1\nconst b = 2
', + '
const a = 1\nconst b = 2
', ); expect(await render(':include{src="src/index.ts" lines="1:1" lang="js"}', { read })).toBe( - `
import { x } from 'x'
`, + `
import { x } from 'x'
`, ); }); @@ -124,7 +124,7 @@ describe("comark-include", () => { it("indents pasted lines like the include, so a partial stays in its list item", async () => { const read = files({ "step.md": "Run it:\n\n```sh\npnpm i\n```" }); expect(await render('- One\n\n :include{src="step.md"}\n- Two', { read })).toBe( - '
    \n
  • \n

    One

    \n

    Run it:

    \n
    pnpm i
    \n
  • \n
  • Two
  • \n
', + '
    \n
  • \n

    One

    \n

    Run it:

    \n
    pnpm i
    \n
  • \n
  • Two
  • \n
', ); }); @@ -166,7 +166,9 @@ describe("comark-include", () => { const source = ["# #region setup", 'end = "#endregion setup"', "# #endregion setup"].join("\n"); expect( await render(':include{src="a.py" region="setup"}', { read: files({ "a.py": source }) }), - ).toBe('
end = "#endregion setup"
'); + ).toBe( + '
end = "#endregion setup"
', + ); }); it("drops a failing include and names it with the fix", async () => { diff --git a/packages/lint/src/index.ts b/packages/lint/src/index.ts index 15a0bfba..db7d7c4c 100644 --- a/packages/lint/src/index.ts +++ b/packages/lint/src/index.ts @@ -51,8 +51,8 @@ export type LintOptions = { type Token = { type: string; tag: string; - nesting: number; map: [number, number] | null; + content: string; children: Token[] | null; }; @@ -154,11 +154,17 @@ const crashed = (rule: Rule, error: unknown): Diagnostic => ({ fix: "The other rules still ran. Report this with the document at https://github.com/onmax/comark-plugins/issues.", }); -// Comark reads HTML blocks and code as text, so a `::` or `{` there opens nothing. +// Comark reads code, comments, and `
`, `\n:::\n::`;
     const document = await parseMarkdown(source, {
       plugins: [annotate(), security({ blockedTags: ["script"] })],
     });
-    const html = await renderHtmlFromDocument(document, { components });
+    return renderHtmlFromDocument(document, { components });
+  };
+
+  it("lets Comark's security plugin clean notes", async () => {
+    const html = await cleaned();
     expect(html).toContain('');
     expect(html).not.toContain("onerror");
-    expect(html).not.toContain("alert(2)");
+  });
+
+  // Comark 0.8 moves inline HTML's text out of the element inside a block, so the blocked script's code is left as
+  // escaped text: https://github.com/comarkdown/comark/issues/505. This starts passing, and so failing, once it's fixed.
+  it.fails("removes a blocked script's code with it", async () => {
+    expect(await cleaned()).not.toContain("alert(2)");
   });
 
   it("moves side notes beside the image with an arrow and keeps the rest in the list", async () => {

From 83d649208f7270c589c39e1644365126e06018c4 Mon Sep 17 00:00:00 2001
From: "vitehub-bot[bot]" <320448255+vitehub-bot[bot]@users.noreply.github.com>
Date: Wed, 21 Oct 2026 20:16:06 +0200
Subject: [PATCH 5/6] fix(annotate): preserve native context menu actions

---
 packages/annotate/src/client.ts | 68 +++++++++++++++------------------
 packages/annotate/src/styles.ts |  2 +-
 2 files changed, 31 insertions(+), 39 deletions(-)

diff --git a/packages/annotate/src/client.ts b/packages/annotate/src/client.ts
index 14206464..907e3397 100644
--- a/packages/annotate/src/client.ts
+++ b/packages/annotate/src/client.ts
@@ -519,12 +519,26 @@ export function start(): () => void {
     return overlay;
   }
   let armed: HTMLImageElement | null = null;
-  let forwarded = false;
+  let armedSource: HTMLImageElement | null = null;
+  let armedSourceSrc: string | null = null;
+  let armedSourceSrcset: string | null = null;
+  let armedSourceSizes: string | null = null;
+  let armedSourceOpacity: string | null = null;
   let disarming = 0;
   const disarm = () => {
     clearTimeout(disarming);
     armed?.removeAttribute("data-menu");
+    if (armedSource) {
+      if (armedSourceSrc === null) armedSource.removeAttribute("src");
+      else armedSource.setAttribute("src", armedSourceSrc);
+      if (armedSourceSrcset === null) armedSource.removeAttribute("srcset");
+      else armedSource.setAttribute("srcset", armedSourceSrcset);
+      if (armedSourceSizes === null) armedSource.removeAttribute("sizes");
+      else armedSource.setAttribute("sizes", armedSourceSizes);
+      armedSource.style.opacity = armedSourceOpacity ?? "";
+    }
     armed = null;
+    armedSource = null;
   };
 
   document.addEventListener(
@@ -541,7 +555,6 @@ export function start(): () => void {
     "pointerdown",
     (event) => {
       disarm();
-      // A right-click, or a Control-click on a Mac.
       if (event.button !== 2 && !(event.button === 0 && event.ctrlKey)) return;
       const target = event.target instanceof Element ? event.target : null;
       const frame = target?.closest(".ca-frame");
@@ -549,48 +562,27 @@ export function start(): () => void {
       const ready = figure && made.get(figure);
       if (!frame || !ready || target?.closest(SKIP) || ready.key !== keyOf(figure)) return;
       armed = overlayOf(frame);
-      forwarded = false;
       if (armed.getAttribute("src") !== ready.url) armed.src = ready.url;
       armed.setAttribute("data-menu", "");
-      // The menu opens on press on some systems and on release on others; either way it has its target by then.
-      disarming = window.setTimeout(disarm, 1500);
-    },
-    { capture: true, signal },
-  );
-  document.addEventListener(
-    "contextmenu",
-    (event) => {
-      // Chromium can resolve the native menu target before the armed overlay starts
-      // receiving pointer events. Hand the event to the prepared copy as well, so
-      // browser image actions and listeners see the marked screenshot consistently.
-      if (armed && event.target !== armed && !forwarded) {
-        forwarded = true;
-        // Keep the browser's native default action (Copy Image, Save Image, etc.)
-        // on the original image while replacing the JavaScript notification.
-        event.stopImmediatePropagation();
-        armed.dispatchEvent(
-          new MouseEvent("contextmenu", {
-            bubbles: true,
-            cancelable: true,
-            view: event.view,
-            detail: event.detail,
-            screenX: event.screenX,
-            screenY: event.screenY,
-            clientX: event.clientX,
-            clientY: event.clientY,
-            ctrlKey: event.ctrlKey,
-            shiftKey: event.shiftKey,
-            altKey: event.altKey,
-            metaKey: event.metaKey,
-            button: event.button,
-            buttons: event.buttons,
-          }),
-        );
+      // Keep the native event and its default actions intact. If the browser resolves
+      // the original image as the hit target, it now points at the composed screenshot.
+      const source = frame.querySelector(":scope>img:not(.ca-overlay)");
+      if (source) {
+        armedSource = source;
+        armedSourceSrc = source.getAttribute("src");
+        armedSourceSrcset = source.getAttribute("srcset");
+        armedSourceSizes = source.getAttribute("sizes");
+        armedSourceOpacity = source.style.opacity;
+        source.setAttribute("src", ready.url);
+        source.removeAttribute("srcset");
+        source.removeAttribute("sizes");
+        source.style.opacity = "0";
       }
-      setTimeout(disarm);
+      disarming = window.setTimeout(disarm, 1500);
     },
     { capture: true, signal },
   );
+  document.addEventListener("contextmenu", () => setTimeout(disarm), { signal });
 
   const say = (frame: Element | null, message: string, state: "done" | "failed") => {
     const button = frame?.querySelector(".ca-copy");
diff --git a/packages/annotate/src/styles.ts b/packages/annotate/src/styles.ts
index 51c727e2..eb228282 100644
--- a/packages/annotate/src/styles.ts
+++ b/packages/annotate/src/styles.ts
@@ -80,7 +80,7 @@ export const css = `@layer comark{${[
   ".ca-copy-status:empty{display:none}",
   // The copy behind the browser's menu: invisible, and in the way only for a right-click.
   ".ca-frame .ca-overlay{position:absolute;inset:0;width:100%;height:100%;opacity:0;outline:none;pointer-events:none}",
-  ".ca-frame .ca-overlay[data-menu]{pointer-events:auto}",
+  ".ca-frame .ca-overlay[data-menu]{pointer-events:auto;opacity:1}",
   // A copy paints the marks at rest, and nothing animates while it reads them.
   "[data-ca-capture] *{transition:none!important}",
   "[data-ca-capture=still] *{--ca-on:0!important}",

From d6f4d6c8895ca496ec7cec3af29c1bbaddd2b9cc Mon Sep 17 00:00:00 2001
From: "vitehub-bot[bot]" <320448255+vitehub-bot[bot]@users.noreply.github.com>
Date: Wed, 21 Oct 2026 20:29:06 +0200
Subject: [PATCH 6/6] fix(lockfile): update chips Comark snapshots

---
 pnpm-lock.yaml | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index e3577295..480850c9 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -232,13 +232,13 @@ importers:
     devDependencies:
       '@comark/html':
         specifier: 'catalog:'
-        version: 0.7.0(shiki@4.5.0)
+        version: 0.8.1(shiki@4.5.0)
       '@comark/react':
         specifier: 'catalog:'
-        version: 0.7.0(react@19.3.1)(shiki@4.5.0)
+        version: 0.8.1(react@19.3.1)(shiki@4.5.0)
       '@comark/vue':
         specifier: 'catalog:'
-        version: 0.7.0(shiki@4.5.0)(vue@3.5.44(typescript@6.0.3))
+        version: 0.8.1(shiki@4.5.0)(vue@3.5.44(typescript@6.0.3))
       '@types/react':
         specifier: 'catalog:'
         version: 19.3.0
@@ -247,7 +247,7 @@ importers:
         version: 19.3.0(@types/react@19.3.0)
       comark:
         specifier: 'catalog:'
-        version: 0.7.0(shiki@4.5.0)
+        version: 0.8.1(shiki@4.5.0)
       comark-zoom:
         specifier: workspace:*
         version: link:../zoom