diff --git a/packages/comark/SPEC/COMARK/attribute-del.md b/packages/comark/SPEC/COMARK/attribute-del.md
new file mode 100644
index 00000000..56f66433
--- /dev/null
+++ b/packages/comark/SPEC/COMARK/attribute-del.md
@@ -0,0 +1,88 @@
+## Input
+
+```md
+Here ~~del~~{bool} ~~del~~{#id1} ~~del~~{.class1} ~~del~~{attr="value"} ~~`x`~~{.gone} ~~*x*~~{.gone}
+```
+
+## AST
+
+```json
+{
+ "frontmatter": {},
+ "meta": {},
+ "nodes": [
+ [
+ "p",
+ {},
+ "Here ",
+ [
+ "del",
+ {
+ ":bool": "true"
+ },
+ "del"
+ ],
+ " ",
+ [
+ "del",
+ {
+ "id": "id1"
+ },
+ "del"
+ ],
+ " ",
+ [
+ "del",
+ {
+ "class": "class1"
+ },
+ "del"
+ ],
+ " ",
+ [
+ "del",
+ {
+ "attr": "value"
+ },
+ "del"
+ ],
+ " ",
+ [
+ "del",
+ {
+ "class": "gone"
+ },
+ [
+ "code",
+ {},
+ "x"
+ ]
+ ],
+ " ",
+ [
+ "del",
+ {
+ "class": "gone"
+ },
+ [
+ "em",
+ {},
+ "x"
+ ]
+ ]
+ ]
+ ]
+}
+```
+
+## HTML
+
+```html
+
Here del del del del x x
+```
+
+## Markdown
+
+```md
+Here ~~del~~{bool} ~~del~~{#id1} ~~del~~{.class1} ~~del~~{attr="value"} ~~`x`~~{.gone} ~~*x*~~{.gone}
+```
diff --git a/packages/comark/SPEC/common-mark/paragraph-del-code.md b/packages/comark/SPEC/common-mark/paragraph-del-code.md
new file mode 100644
index 00000000..48b77ece
--- /dev/null
+++ b/packages/comark/SPEC/common-mark/paragraph-del-code.md
@@ -0,0 +1,58 @@
+## Input
+
+```md
+~~`x`~~ ~~a **b** `c`~~
+```
+
+## AST
+
+```json
+{
+ "frontmatter": {},
+ "meta": {},
+ "nodes": [
+ [
+ "p",
+ {},
+ [
+ "del",
+ {},
+ [
+ "code",
+ {},
+ "x"
+ ]
+ ],
+ " ",
+ [
+ "del",
+ {},
+ "a ",
+ [
+ "strong",
+ {},
+ "b"
+ ],
+ " ",
+ [
+ "code",
+ {},
+ "c"
+ ]
+ ]
+ ]
+ ]
+}
+```
+
+## HTML
+
+```html
+x a b c
+```
+
+## Markdown
+
+```md
+~~`x`~~ ~~a **b** `c`~~
+```
diff --git a/packages/comark/src/internal/stringify/handlers/del.ts b/packages/comark/src/internal/stringify/handlers/del.ts
index 70cb21c6..1cd218c6 100644
--- a/packages/comark/src/internal/stringify/handlers/del.ts
+++ b/packages/comark/src/internal/stringify/handlers/del.ts
@@ -1,7 +1,17 @@
import type { State } from 'comark/render'
import type { ElementNode } from 'comark'
-import { textContent } from '../../../utils/index.ts'
+import { comarkAttributes } from '../attributes.ts'
-export function del(node: ElementNode, _: State) {
- return `~~${textContent(node)}~~`
+export async function del(node: ElementNode, state: State) {
+ const [_, attrs, ...children] = node
+
+ let content = ''
+ for (const child of children) {
+ content += await state.one(child, state, node)
+ }
+ content = content.trim()
+
+ const attrsString = Object.keys(attrs).length > 0 ? comarkAttributes(attrs) : ''
+
+ return `~~${content}~~${attrsString}`
}
diff --git a/packages/comark/src/internal/stringify/handlers/html.ts b/packages/comark/src/internal/stringify/handlers/html.ts
index 28ee6c56..73be781f 100644
--- a/packages/comark/src/internal/stringify/handlers/html.ts
+++ b/packages/comark/src/internal/stringify/handlers/html.ts
@@ -5,7 +5,7 @@ import { indent } from '../../../utils/index.ts'
const textBlocks = new Set(['p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'li', 'td', 'th'])
const selfCloseTags = new Set(['br', 'hr', 'img', 'input', 'link', 'meta', 'source', 'track', 'wbr'])
-const inlineTags = new Set(['strong', 'em', 'code', 'a', 'br', 'span', 'img'])
+const inlineTags = new Set(['strong', 'em', 'del', 'code', 'a', 'br', 'span', 'img'])
const blockTags = new Set([
'p',
'h1',
diff --git a/test/bundle.test.ts b/test/bundle.test.ts
index 9c52a007..864562d2 100644
--- a/test/bundle.test.ts
+++ b/test/bundle.test.ts
@@ -67,7 +67,7 @@ describe('package bundle size', { timeout: 60_000 }, () => {
"@comark/react": "43.6k (74 files)",
"@comark/svelte": "43.9k (82 files)",
"@comark/vue": "60.5k (78 files)",
- "comark": "422k (156 files)",
+ "comark": "423k (156 files)",
}
`)
})