v1.0.0
What's Changed
New Features
- feat(input): block-editing pipeline foundation by @wildseansy in #460
- feat(input): heading blocks (H1-H6) on the block pipeline by @wildseansy in #497
- feat(input): import block ranges on paste by @wildseansy in #498
- feat(input): heading toolbar support — toggleHeading command, active-state, empty-line persistence by @wildseansy in #499
- feat(ios): render in-paragraph display math instead of dropping its delimiters by @EthanCai9568 in #537
- feat(ios): voiceover read contents of input element by @eszlamczyk in #526
- feat: add horizontalOverflow style prop for edge-to-edge scrollable tables by @hryhoriiK97 in #542
- feat: custom image request headers by @eszlamczyk in #544
- feat: add maxHeight, aspectRatio and resizeMode to block image styling by @eszlamczyk in #539
- feat: space between list items by @eszlamczyk in #578
- feat: support saving original image by @eszlamczyk in #548
- feat: centering of entire tables by @eszlamczyk in #554
- feat(input): rebased version of "list state, toolbar, docs, and e2e (lists 5/5)" by @hsource in #545
- feat: support loading local images by @eszlamczyk in #588
- feat: on key press support by @eszlamczyk in #584
- feat: match rn textinput keyboard-dismiss behavior on taps outside the input by @eszlamczyk in #597
- feat(ios): port parser module to ios by @graszka22 in #556
- feat(ios): add markdown theme system by @graszka22 in #557
- feat(ios): add AST-to-attributed-string renderer by @graszka22 in #558
- feat(ios): add EnrichedMarkdownText SwiftUI view by @graszka22 in #559
- feat(ios): add async parse and render for EnrichedMarkdownText by @graszka22 in #560
- feat(ios): add heading rendering and theme by @graszka22 in #562
- feat(ios): add link rendering, theme, and onLinkPress by @graszka22 in #563
- feat(ios): add line break rendering by @graszka22 in #564
- feat(ios): add inline code rendering and theme by @graszka22 in #565
- feat(ios): add image rendering, theme, and attachments by @graszka22 in #566
- feat(ios): add block rendering layout infrastructure by @graszka22 in #567
- feat(ios): add thematic break rendering and theme by @graszka22 in #568
- feat(ios): add code block rendering and theme by @graszka22 in #569
- feat(ios): add blockquote rendering and theme by @graszka22 in #570
- feat(ios): add list rendering and theme by @graszka22 in #571
- feat(ios): add custom font support to markdown theme by @graszka22 in #572
- feat: implement gfm style codeblock by @eszlamczyk in #607
- feat: padding and broderradius for blockquotes by @eszlamczyk in #601
- feat: expose insert text method by @eszlamczyk in #613
- feat(ios): expose md4cFlags and add strikethrough/underline rendering by @maksg in #627
- feat: add
hardSoftBreaksmd4cFlags option by @hryhoriiK97 in #632 - feat(ios): add markdown extractor for selection-to-markdown conversion by @maksg in #638
- feat(ios): add Copy as Markdown and Copy Image URL selection menu items by @maksg in #639
- feat: codeblock highlight colors by @eszlamczyk in #624
- feat: tressiter for colored codeblocks by @eszlamczyk in #625
- feat: cleaner, smaller code block copy button by @eszlamczyk in #633
- feat: add onCopyPress event for code block copy by @eszlamczyk in #634
- feat(ios): show Select All in selection menu when the system omits it by @maksg in #642
- feat: codeblock streaming by @eszlamczyk in #648
- feat: implement jest mock by @eszlamczyk in #614
- feat: add enableTaskListItemToggle prop to EnrichedMarkdownText by @CodingItWrong in #651
Fixes & Improvements
- fix: include README, LICENSE, and docs in npm package by @hryhoriiK97 in #483
- fix(expo): build config plugin separately from main lib by @huextrat in #488
- fix(ios): dedupe RaTeX XCFramework signature for Xcode 26 archive (#491) by @hryhoriiK97 in #492
- fix(android): adjust blockStore on all text mutations for iOS parity by @hryhoriiK97 in #500
- fix(input): handle zero-length heading anchors in formatter and serializer (#505) by @hryhoriiK97 in #505
- fix(ios): sync typing attributes after text edit to fix heading cursor on Enter (#506) by @hryhoriiK97 in #506
- fix(android): sync cursor height with heading block on empty lines by @hryhoriiK97 in #507
- fix(android): exclude block spans from inline formatting pass by @hryhoriiK97 in #508
- fix(input): hide placeholder when heading is toggled on empty text by @hryhoriiK97 in #515
- fix(ios): include all layout-affecting props in measurement cache key by @hryhoriiK97 in #494
- fix: better list children rendering logic by @eszlamczyk in #478
- fix: remove extra markers from text input by @eszlamczyk in #520
- fix: honor ordered list start number by @yyq1025 in #525
- fix(build): fix x86_64 simulator build and spm_dependency guard by @eszlamczyk in #531
- fix(android): strong italic font family by @eszlamczyk in #530
- fix: autolink detection while working with ref by @eszlamczyk in #535
- fix(android): prevent false link hit detection for taps outside text bounds by @hryhoriiK97 in #523
- fix(ios): lists inside blockquotes lose their indent by @eszlamczyk in #534
- fix(ios): inline math height calculations by @eszlamczyk in #522
- fix(iOS): replace racy RaTeXFFI modulemap-strip script with an explicit-modules opt-out by @chrfalch in #546
- fix: reset cached style state in Fabric prepareForRecycle to stop stale-markdown flicker by @mvanhorn in #482
- fix: preserve Select All (and other system items) in the selection edit menu by @slavaluka in #549
- fix(ios): visible source fallback when RaTeX cannot parse a math span by @EthanCai9568 in #536
- fix: block images overflow their line box by @eszlamczyk in #579
- fix(input/ios): show trailing empty-line bullet marker immediately by @hryhoriiK97 in #595
- fix(ios): reset typing attributes when input is cleared to remove stale list indent by @hryhoriiK97 in #596
- fix: soft markdown line breaks by @eszlamczyk in #585
- fix(android): crash indexoutofboundsexecption set span by @eszlamczyk in #583
- fix(web): disable growable ArrayBuffers in WASM build by @hryhoriiK97 in #598
- fix(input): align bullet marker shapes with EnrichedMarkdownText by @hryhoriiK97 in #604
- fix(input): support macOS text input with correct typing attributes and list markers by @hryhoriiK97 in #605
- fix(iOS): main-thread deadlock in markdown measurement under locked ShadowTree commits by @eszlamczyk in #582
- fix(android): codeblock drawing range calculations by @eszlamczyk in #611
- fix(iOS): apply formatting when setting text via ref setValue by @hryhoriiK97 in #617
- fix(ios): codeblock measurement in shadow node by @eszlamczyk in #623
- fix(input): keep styles and list block when typing over a leading selection; stop iOS edit-menu jitter by @wildseansy in #612
- fix(android): commit font scaling settings to measurement store by @hryhoriiK97 in #631
- fix(ios): render soft line breaks as spaces in standalone package by @maksg in #637
- fix: inline inherited grammar highlights when vendoring (TypeScript/TSX) by @eszlamczyk in #640
- fix: list marker dropped when inserting character by @eszlamczyk in #641
- fix(ios): vendor RaTeX as a prebuilt static XCFramework (drop spm_dependency) by @eszlamczyk in #652
- fix(android): font scaling measurement and bullet rendering by @hryhoriiK97 in #644
Refactors
- refactor(input): update sync method for typing attributes to use cursor block by @hryhoriiK97 in #501
- refactor(input): remove unused blockRangeContaining API from both platforms by @hryhoriiK97 in #502
- refactor(input): deduplicate helpers shared between BlockStore and FormattingStore (#503) by @hryhoriiK97 in #503
- refactor(input): narrow heading level to a union type and export HeadingStyle (#504) by @hryhoriiK97 in #504
- refactor: deduplicate post-edit store adjustment pipeline by @hryhoriiK97 in #519
- refactor(input): extract EditPipeline from input views (iOS & Android) by @hryhoriiK97 in #589
- refactor(input): consolidate reentrancy flags into EditSession (iOS & Android) by @hryhoriiK97 in #590
- refactor(input): extract BlockEditCoordinator (iOS & Android) by @hryhoriiK97 in #591
- refactor(input): push inline style toggle logic into FormattingStore (iOS & Android) by @hryhoriiK97 in #592
- refactor(input): extract Link, Mention, and Clipboard coordinators (iOS & Android) by @hryhoriiK97 in #593
- refactor(input): extract list marker drawing into decorator pattern by @hryhoriiK97 in #594
- refactor(input): extract ENRMInputEventEmitter from EnrichedMarkdownTextInput (iOS) by @hryhoriiK97 in #599
- refactor(input): extract ENRMInputStyleStateBuilder from ENRMInputEventEmitter by @hryhoriiK97 in #600
- refactor(input): extract ENRMInputTypingAttributesController from EnrichedMarkdownTextInput by @hryhoriiK97 in #602
- refactor(input): move ENRMInputFormatterStyle to its own file by @hryhoriiK97 in #603
Tests
- test(ios): update maestro screenshots by @eszlamczyk in #587
- test(ios): add renderer unit tests by @graszka22 in #561
- test(ios): add e2e maestro tests by @graszka22 in #574
Docs & Chores
- chore: release 0.7.1 by @hryhoriiK97 in #485
- chore(expo): move config plugin source out of src to avoid double compilation by @hryhoriiK97 in #489
- chore: release 0.7.2 by @hryhoriiK97 in #490
- chore: release 0.7.3 by @hryhoriiK97 in #493
- chore(android): release scripts and docs by @graszka22 in #529
- chore: release 0.7.4 by @eszlamczyk in #533
- chore: use macos-latest-xlarge by @radoslawrolka in #543
- chore: add RNRepo to CI builds by @radoslawrolka in #292
- chore: point homepage to enriched.swmansion.com/markdown by @tomekzaw in #553
- chore(ios): set up ios library and example app by @graszka22 in #555
- chore(ios): add proper example app by @graszka22 in #573
- chore(ios): add README.md for ios by @graszka22 in #575
- chore(ios): restructure and cleanup native code by @maksg in #619
- chore: block logs in maestro tests by @eszlamczyk in #636
- chore: add react native 0.87 to compatibility table by @eszlamczyk in #654
- chore: add script for easier release by @eszlamczyk in #484
Other Changes
- Revert "fix(iOS): replace racy RaTeXFFI modulemap-strip script with an explicit-modules opt-out (#546)" by @chrfalch in #551
New Contributors
- @wildseansy made their first contribution in #460
- @yyq1025 made their first contribution in #525
- @EthanCai9568 made their first contribution in #537
- @chrfalch made their first contribution in #546
- @slavaluka made their first contribution in #549
- @tomekzaw made their first contribution in #553
- @hsource made their first contribution in #545
- @maksg made their first contribution in #619
- @CodingItWrong made their first contribution in #651
Full Changelog: v0.7.0...main