Releases: software-mansion/enriched-markdown
Releases · software-mansion/enriched-markdown
Release list
v1.0.1
What's Changed
New Features
- feat: allow opting out of tree-sitter & RaTeX downloads via package.json by @eszlamczyk in #661
Refactors
- refactor: download vendored assets at postinstall to reduce package size by @hryhoriiK97 in #660
Full Changelog: v1.0.0...main
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](https://gith...
v0.7.4
What's Changed
- fix(build): fix x86_64 simulator build and spm_dependency guard #531 @eszlamczyk
Full Changelog: v0.7.3...v0.7.4
v0.7.3
What's Changed
- fix(ios): dedupe RaTeX XCFramework signature for Xcode 26 archive (#491) by @hryhoriiK97 in #492
- chore: release 0.7.3 by @hryhoriiK97 in #493
Full Changelog: v0.7.2...v0.7.3
v0.7.2
What's Changed
- fix(expo): build config plugin separately from main lib by @huextrat in #488
- 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
Full Changelog: v0.7.1...v0.7.2
v0.7.1
What's Changed
- fix: include README, LICENSE, and docs in npm package by @hryhoriiK97 in #483
- chore: release 0.7.1 by @hryhoriiK97 in #485
Full Changelog: v0.7.0...v0.7.1
v0.7.0
What's Changed
New Features
- feat: forward nativeID and testID to the native input by @PierreCapo in #376
- feat: add ==highlight== inline spans with markdownStyle.highlight by @hryhoriiK97 in #389
- feat: add different markers for nested unordered list by @eszlamczyk in #390
- feat(android): replace math engine with RaTeX by @eszlamczyk in #355
- feat(ios): integrate RaTeX for LaTeX math rendering, replacing iosMath by @hryhoriiK97 in #357
- feat: add line break and text break props by @eszlamczyk in #374
- feat(ios): better RTL support for text by @eszlamczyk in #398
- feat(ios): input element detect RTL by @eszlamczyk in #400
- feat: add selectionMenuConfig prop to EnrichedMarkdownTextInput by @hryhoriiK97 in #408
- feat: add formatMenuConfig prop for per-item format submenu control by @hryhoriiK97 in #409
- feat: localize selection menu labels via selectionMenuLabels prop by @marcellov7 in #415
- feat(android): add parser AST JNI bridge by @graszka22 in #427
- feat(android): add UI style config and unit tests by @graszka22 in #428
- feat(android): add UI foundation text utils by @graszka22 in #429
- feat(android): add image cache and downloader utils by @graszka22 in #430
- feat(android): add markdown spans and renderer by @graszka22 in #431
- feat(android): add TextView selection and link helpers by @graszka22 in #432
- feat(android): add EnrichedMarkdownText entry point by @graszka22 in #433
- feat(android): add TalkBack accessibility for markdown TextView by @graszka22 in #434
- feat(input): treat links/mentions as atomic for selection and caret by @andreavrr in #454
- feat(android): add Compose font registry bridge by @graszka22 in #448
- feat(android): add Compose markdown style DSL by @graszka22 in #449
- feat(android): add EnrichedMarkdownText Compose component by @graszka22 in #450
- feat(android): expand native example app with compose demo by @graszka22 in #452
- feat(android): add "Copy as markdown" functionality by @graszka22 in #464
- feat(input): localize format & selection submenu labels by @eszlamczyk in #443
- feat(android): add copy as html feature by @graszka22 in #465
- feat: voiceover & talkback labels by @eszlamczyk in #470
- feat: copyToClipboard ref method for EnrichedMarkdownTextInput by @mvanhorn in #461
Fixes & Improvements
- fix: remove podfile lock removal from ci by @eszlamczyk in #358
- fix(ci): fix iOS build by removing stale codegen reset by @hryhoriiK97 in #363
- fix(plugin): use named imports from @expo/config-plugins so the plugin loads under tsx/cjs by @hknakn in #356
- fix(android): task list press not working by @eszlamczyk in #370
- fix(ios): remove whitespace in code block for padding 0 by @eszlamczyk in #372
- fix(ios): border radius for code block being segmented by @eszlamczyk in #373
- fix: dont emit empty inline marker pair around bare newline by @eszlamczyk in #402
- fix(ios): preserve active formatting during predictive text suggestions by @hryhoriiK97 in #406
- fix(ios): replace per-cell UITextView with single drawRect pass for tables by @hryhoriiK97 in #418
- fix(android): prevent colorsToPreserve from blocking inline style colors by @hryhoriiK97 in #419
- fix(ios): code block background border radius by @eszlamczyk in #411
- fix(android): measure rendered plain text in InputMeasurementStore.initialMeasure, not raw markdown by @andreavrr in #422
- fix(input): autoFocus on Android places caret at end and opens keyboard (parity with iOS) by @andreavrr in #425
- fix(macos): resolve build errors and disable math until use_frameworks is supported by @hryhoriiK97 in #440
- fix(android): preserve blank lines between paragraphs in input parser (parity with iOS) by @andreavrr in #436
- fix(ios): keep link variant color when a font style is toggled on a mention by @andreavrr in #446
- fix(ios): stop bold/italic handlers from overwriting link variant colors by @hryhoriiK97 in #453
- fix(android): InputRemend mishandles combined bold+italic *** delimiter by @multiplechuks in #447
- fix: resolve modal flicker on Android after setting raw markdown by @hryhoriiK97 in #469
- fix(ios): add font attribute to inline math attachments by @eliotgevers in #459
- fix(ios): prevent inline math fractions from being clipped by maximumLineHeight by @hryhoriiK97 in #445
- fix: stricter default guards by [@eszlamczyk](https://github...
v0.6.0
What's Changed
New Features
- feat: custom selection color by @xindixu in #250
- feat(macos): support selectionColor via NSTextView.selectedTextAttributes by @hryhoriiK97 in #265
- feat: add GFM streaming support for tables and block math by @hryhoriiK97 in #270
- feat: add selectionMenuConfig prop to control built-in selection menu items by @hryhoriiK97 in #285
- feat: create test playground + introduce navigation by @eszlamczyk in #275
- feat: add superscript and subscript markdown spans by @hryhoriiK97 in #274
- feat: add mention support for text and input by @hryhoriiK97 in #327
- feat: create storybook by @eszlamczyk in #321
Fixes & Improvements
- fix(android): span with background should show up inside blockquotes by @xindixu in #253
- fix(web): narrow selectionColor type to string by @hryhoriiK97 in #266
- fix(ios): prevent crash when deleting mixed selection or using IME input by @hryhoriiK97 in #277
- fix(ios): use controlled path for Cut to prevent formatting corruption by @hryhoriiK97 in #278
- fix(android): correct insertion boundary in FormattingStore and add serializer bounds check by @hryhoriiK97 in #279
- fix(android): use ceil for split-segment width to match commonmark path and rendered TextView by @istarkov in #282
- fix(ios): break retain cycle between renderers and RendererFactory by @mgmx-io in #284
- fix(ios): pin measured width to maxWidth for multiline content by @hryhoriiK97 in #291
- fix(android): prevent duplicate-URL images from sharing a single ImageSpan by @hryhoriiK97 in #297
- fix(web): use span instead of div for display math to prevent invalid p>div nesting by @hryhoriiK97 in #298
- fix(android): skip LineHeightSpan on block image lines to prevent clipping and overlap by @hryhoriiK97 in #300
- fix(ios): reverse dealloc order in ENRMTailFadeInAnimator to prevent use-after-free by @hryhoriiK97 in #302
- fix(ios): assert on regex compilation failure in ENRMAutoLinkDetector by @hryhoriiK97 in #303
- fix: skip streaming animations when Reduce Motion is enabled by @rhnmht30 in #325
- fix(ios): reset state in prepareForRecycle on both host components by @rhnmht30 in #324
- fix(web): raise WASM stack size + enable memory growth by @bobbyg603 in #329
- fix(android): use value animators are animators enabled for reduced motion by @eszlamczyk in #333
- fix(ios): reset _props in prepareForRecycle to fix streaming animation on remount by @hryhoriiK97 in #334
- fix(android): update tail fade in animation to not reset by @eszlamczyk in #335
- fix(ci): include library native sources in turbo cache inputs by @hryhoriiK97 in #336
- fix(ios): use mock view for measurement when style changes are pending by @hryhoriiK97 in #343
- fix(android): defer setText until view is attached to prevent NPE in checkForResize by @hryhoriiK97 in #344
- fix(android): avoid duplicate libc++ in instrumentation builds by @hryhoriiK97 in #345
- fix(android): prevent duplicate input context menu items by @hryhoriiK97 in #347
Refactors
- refactor(ios): centralize selectionColor application into ENRMApplySelectionColor by @hryhoriiK97 in #264
- refactor(web): centralize <style> injection via injectStyleOnce + global tokens by @hryhoriiK97 in #267
- refactor(android): guard selection color setters against no-op writes by @hryhoriiK97 in #268
- refactor: rename example apps bundle id by @eszlamczyk in #290
- refactor(ios): introduce BaseRenderer base class to eliminate duplicated ivar blocks and init by @hryhoriiK97 in #304
- refactor(ios): extract ENRMFontSlot to unify font cache invalidation in StyleConfig by @hryhoriiK97 in #305
- refactor: extract requestHeightUpdate into a shared C++ template by @hryhoriiK97 in #307
- refactor: extract async render queue and stale-result cancellation into ENRMAsyncRenderCoordinator by @hryhoriiK97 in #308
- refactor: extract emit helpers for link, task list, and context menu events by @hryhoriiK97 in #309
- refactor: change default streamingConfig.tableMode from 'hidden' to 'progressive' by @hryhoriiK97 in #332
Docs & Chores
- chore: bump version to 0.5.0 by @hryhoriiK97 in #262
- docs: add selectionColor + selectionHandleColor to API reference by @hryhoriiK97 in #269
- chore: setup boilerplate for maestro tests by @eszlamczyk in #288
- test: maestro text block elements tests by @eszlamczyk in #299
- docs: add missing yarn prepare by @radoslawrolka in #301
- test: introduce better test structure and create inline elements tests by @eszlamczyk in #306
- chore: add new keywords to package.json by @hryhoriiK97 in #313
- test: introduce block combinations tests by @eszlamczyk in #317
- chore: bump react-native to 0.85.3 in example app by @hryhoriiK97 in #318
- docs: add Compatibility Table to README for supported React Native versions by @hryhoriiK97 in #319
- test: introduce configs to e2e tests by @eszlamczyk in #315
- test: introduce input elements test by @eszlamczyk in #316
- test: tag tests properly by @eszlamczyk in #320
- chore: adapt example app for demo by @eszlamczyk in #340
- chore: add new event classes for mention handling in markdown input by @hryhoriiK97 in #350
- chore: release 0.6.0 by @hryhoriiK97 in #349
New Contributors
v0.5.0
What's Changed
New Features
- feat: add macOS support by @hryhoriiK97 in #163
- feat: implement EnrichedMarkdownInput by @hryhoriiK97 in #173
- feat: add custom context menu items for EnrichedMarkdownText and EnrichedMarkdownInput by @hryhoriiK97 in #190
- feat(ios): add SF Symbol icon support for context menu items by @hryhoriiK97 in #191
- feat: add auto-link detection by @hryhoriiK97 in #206
- feat: replace format bar with native context menu submenu by @hryhoriiK97 in #209
- feat: add web support by @hryhoriiK97 in #199
- feat: add spoiler support by @hryhoriiK97 in #215
- feat: add getCaretRect command and onCaretRectChange event by @hryhoriiK97 in #234
- feat(ios): improve VoiceOver focus precision with per-line accessibility paths by @hryhoriiK97 in #244
- feat(android): improve TalkBack accessibility with virtual view hierarchy and host focus fix by @hryhoriiK97 in #245
- feat: add list.markerMinWidth to align UL/OL/task lists by @mozharovsky in #248
Fixes & Improvements
- fix(ios): dismiss text selection when tapping non-interactive area by @hryhoriiK97 in #162
- fix(ios): don't include kUTIRTFD in the copy (#164) by @zwily in #165
- fix: github flavor always expanding to full width by @hryhoriiK97 in #176
- fix(ios): preserve contentView frame on input window attach by @hryhoriiK97 in #178
- fix: promote display math blocks from mixed paragraphs by @hryhoriiK97 in #179
- fix(ios): prevent VoiceOver crash on stale accessibility ranges by @hryhoriiK97 in #187
- fix(ios): preserve code block styles inside list items by @Mile-Away in #174
- fix: prevent paragraph break loss and formatting range drift (#193) by @hryhoriiK97 in #194
- fix(android): disable smart text selection to prevent ImageSpan crash by @hryhoriiK97 in #197
- fix(ios): update _lastSelectedRange in replaceSelectedTextWith to prevent formatting range shift by @jeongshin in #200
- fix(ios): handle NSData from pasteboard when pasting copied markdown by @hryhoriiK97 in #207
- fix/android-link-url-attribute by @hryhoriiK97 in #216
- fix: disable permissive autolinks in input parser by @hryhoriiK97 in #217
- fix(ios): guard onText against out-of-buffer pointers from md4c by @hryhoriiK97 in #218
- fix(ios): use bufferLength instead of originalLength for contentEnd by @hryhoriiK97 in #219
- fix(ios,android): skip delimiter matching inside link URL parentheses in InputRemend by @hryhoriiK97 in #220
- fix(ios,android): clear stacked delimiters inside link text when encountering ]( by @hryhoriiK97 in #221
- fix(ios): clamp formatting range offsets to text length in ENRMMarkdownSerializer by @hryhoriiK97 in #222
- fix(ios): update _lastSelectedRange in importMarkdown to prevent formatting corruption on first edit by @hryhoriiK97 in #223
- fix(android): move ktlint plugin out of shipped build.gradle by @hryhoriiK97 in #225
- fix(android): prevent scroll flicker in auto-grow mode by blocking scrollTo by @hryhoriiK97 in #235
- fix(macos): use correct textContainerInset properties for caret rect by @hryhoriiK97 in #247
- fix: add missing blank line in README by @hryhoriiK97 in #252
Refactors
- refactor(ios): simplify accessibility text element creation by @hryhoriiK97 in #188
- refactor: move example and macos-example into apps/ directory by @hryhoriiK97 in #189
- refactor(android): unify duplicated AST segment splitting into shared utility by @hryhoriiK97 in #228
- refactor(ios): extract shared text view setup, layout manager, and measurement helpers by @hryhoriiK97 in #229
- refactor(ios): extract shared text renderer by @hryhoriiK97 in #230
- refactor: extract shared view manager helpers into MarkdownViewManagerUtils by @hryhoriiK97 in #231
- refactor: rename spoilerMode to spoilerOverlay and update related implementations by @hryhoriiK97 in #238
- refactor: update spoiler style structure to use nested properties for particles and solid attributes by @hryhoriiK97 in #239
- refactor: streamline markdown rendering by introducing RenderedSegment and MarkdownSegmentRenderer by @hryhoriiK97 in #240
- refactor: rename EnrichedMarkdownInput to EnrichedMarkdownTextInput by @hryhoriiK97 in #256
- refactor: rename internal C++/ObjC symbols from MarkdownInput to MarkdownTextInput by @hryhoriiK97 in #258
Docs & Chores
- chore: update .gitignore and Podfile.lock for macOS support by @hryhoriiK97 in #166
- docs: fix incomplete sentence in MACOS.md by @hryhoriiK97 in #167
- fix(ci): drop --immutable from publish workflow yarn install by @hryhoriiK97 in #168
- fix(ci): disable immutable installs in publish workflow by @hryhoriiK97 in #169
- docs: add Markdown streaming support documentation and update README by @hryhoriiK97 in #170
- docs: update link to react-native-worklets documentation in MARKDOWN_STREAMING.md by @hryhoriiK97 in #171
- docs: add missing spoiler documentation and move spoiler syntax note … by @hryhoriiK97 in #237
- docs: add dark mode theming guide to STYLES.md and TEXT.md by @hryhoriiK97 in #259
- chore: add missing classes to Android baseline profile by @hryhoriiK97 in #261
- chore: update image link in README.md by @hryhoriiK97 in #263
New Contributors
- @zwily made their first contribution in #165
- @Mile-Away made their first contribution in #174
- @jeongshin made their first contribution in #200
- @mozharovsky made their first contribution in #248
Full Changelog: ...
v0.4.1
What's Changed
- feat: add expo config plugin (disable LaTeX Math) by @huextrat in #147
- fix(ios): respect link.underline: false on initial mount by @hryhoriiK97 in #150
- fix: unwrap consecutive latex/math blocks merged into a single paragraph by md4c by @hryhoriiK97 in #151
- chore: migrate to shared npm-package-publish by @hryhoriiK97 in #154
- fix(ios): restore view layout on remount and clamp measurement to layout constraints by @hryhoriiK97 in #155
- fix(ios): guard zero-width measurement and synchronize layout in recycled views by @hryhoriiK97 in #157
- chore: update dependencies and configurations across the project by @hryhoriiK97 in #158
- chore: migrate to yarn 4 and replace lefthook with official package by @hryhoriiK97 in #159
- chore: release 0.4.1 by @hryhoriiK97 in #160
New Contributors
Full Changelog: 0.4.0...0.4.1