Skip to content

chore(release): 3.4.0 - #648

Merged
kolkov merged 7 commits into
mainfrom
release/3.4.0
Oct 1, 2026
Merged

kolkov merged 7 commits into
mainfrom
release/3.4.0

Conversation

@kolkov

@kolkov kolkov commented Oct 1, 2026

Copy link
Copy Markdown
Owner

Summary

Markdown Support — @kolkov/angular-editor/markdown secondary entry point

  • outputFormat: 'markdown' config switches CVA to emit/accept Markdown
  • @Output() contentChanged emits {html, markdown?, text} (all formats simultaneously)
  • getHtml() / getMarkdown() public methods
  • Markdown paste: text/plain clipboard → auto-convert to rich text
  • Source mode shows Markdown (green bg) when outputFormat is 'markdown'
  • Rich model: preprocessor, postprocessor, turndown/marked adapters
  • Tree-shakeable: zero bundle impact without provideMarkdownConverter()
  • Deferred writeValue pattern (ngx-quill best practice)

Test plan

  • Build: clean (lib + secondary entry point)
  • Tests: 296 pass (242 Angular + 54 Markdown model)
  • Lint: 0 errors
  • Manual: Editor 3 renders initial Markdown as rich text
  • Manual: Source mode shows Markdown, not HTML
  • Manual: ngModel contains Markdown output

…oint

Rich model architecture (DDD-inspired):
- MarkdownConverter interface + HtmlToMarkdownRenderer/MarkdownToHtmlRenderer contracts
- DefaultMarkdownConverter: pipeline orchestrator (preprocess → render → postprocess)
- HtmlPreprocessor: normalize nbsp, strip font tags, remove empty spans, collapse br
- MarkdownPostprocessor: trim whitespace, normalize line endings, collapse blank lines
- MarkdownConversionConfig: GFM, heading style, bullet marker, code block style

Infrastructure adapters:
- TurndownAdapter: HTML→Markdown with GFM rules (strikethrough, task lists)
- MarkedAdapter: Markdown→HTML with GFM + breaks enabled

Angular DI:
- AE_MARKDOWN_CONVERTER InjectionToken
- provideMarkdownConverter() convenience function with optional config

Tests: 42 pure model tests (zero Angular deps, zero library deps)
Build: secondary entry point via ng-packagr
…e for editor integration

- MarkdownConverter interface and AE_MARKDOWN_CONVERTER token in core config.ts
- Secondary entry point re-exports from @kolkov/angular-editor (ng-packagr requirement)
- Add outputFormat and pasteMarkdown to AngularEditorConfig
- outputFormat: 'markdown' config switches CVA to emit/accept Markdown
- writeValue converts Markdown→HTML when outputFormat is 'markdown'
- onContentChange converts HTML→Markdown before emitting to onChange
- @output() contentChanged event emits {html, markdown?, text} (all formats)
- getHtml() / getMarkdown() public methods for explicit access
- Markdown paste: text/plain-only clipboard → treat as Markdown → convert to HTML
- pasteMarkdown config for independent paste control
- ngOnInit validation: throws if outputFormat='markdown' without AE_MARKDOWN_CONVERTER
- 15 new integration tests (278 total: 236 Angular + 42 model)
- Editor 3 with outputFormat: 'markdown' + pasteMarkdown: true
- Editor 2 with contentChanged event showing markdown output
- README: Markdown Support section (outputFormat, contentChanged, methods, paste)
- README: lossy conversion note
… blocks

- Fix race condition: writeValue called before config Input is set
  Config setter re-applies last writeValue when outputFormat changes to 'markdown'
- Add turndown rule for pre-without-code (IDE paste pattern: pre > span instead of pre > code)
- Add TurndownAdapter integration tests (12 tests: conversions, code blocks, GFM, cleanup)
- Add config timing test for writeValue re-render on config change
- 291 total tests (237 Angular + 54 Markdown)
…down'

- toggleEditorMode shows Markdown source (green bg) instead of HTML when outputFormat='markdown'
- Switching back from Markdown source converts MD→HTML for visual mode
- Fix token identity: demo app provides AE_MARKDOWN_CONVERTER from same source as editor
- Fix writeValue timing: deferred value pattern (ngx-quill/Angular CVA best practice)
- Add initial Markdown content in demo Editor 3
- 5 new source mode tests (296 total: 242 Angular + 54 Markdown)
@kolkov
kolkov merged commit fe1ca89 into main Oct 1, 2026
1 check passed
@codecov

codecov Bot commented Oct 1, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 84.74576% with 9 lines in your changes missing coverage. Please review.
✅ Project coverage is 84.01%. Comparing base (718a3c8) to head (d8995ce).
⚠️ Report is 8 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff             @@
##             main     #648      +/-   ##
==========================================
+ Coverage   82.79%   84.01%   +1.21%     
==========================================
  Files          14       14              
  Lines         901      951      +50     
  Branches      213      235      +22     
==========================================
+ Hits          746      799      +53     
+ Misses        134      132       -2     
+ Partials       21       20       -1     
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@kolkov
kolkov deleted the release/3.4.0 branch October 1, 2026 05:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant