react-native-jet-markdown 0.2.1 → 0.2.3-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/JetMarkdown.podspec +1 -1
  2. package/README.md +31 -82
  3. package/android/src/main/cpp/JniBindings.cpp +0 -106
  4. package/android/src/main/java/com/jetmarkdown/JetMarkdownNative.kt +0 -79
  5. package/android/src/main/java/com/jetmarkdown/JetMarkdownPackage.kt +1 -2
  6. package/android/src/main/java/com/jetmarkdown/JetMarkdownView.kt +11 -11
  7. package/android/src/main/java/com/jetmarkdown/render/spans/MarkdownLineHeightSpan.kt +2 -13
  8. package/android/src/main/java/com/jetmarkdown/views/BlockStackView.kt +49 -22
  9. package/android/src/main/java/com/jetmarkdown/views/BlockTextView.kt +2 -0
  10. package/android/src/main/java/com/jetmarkdown/views/TableBlockView.kt +11 -3
  11. package/cpp/react/override/react/renderer/components/JetMarkdownViewSpec/ComponentDescriptors.h +0 -4
  12. package/ios/JetMarkdownView.mm +9 -16
  13. package/ios/measure/JMDMarkdownMeasurer.mm +1 -1
  14. package/ios/render/JMDBlock.h +7 -0
  15. package/ios/render/JMDBlock.m +2 -0
  16. package/ios/render/JMDBlockRenderer.mm +27 -1
  17. package/ios/render/JMDRenderedContent.mm +36 -11
  18. package/ios/views/JMDBlockStackView.m +36 -14
  19. package/ios/views/JMDBlockTextView.h +6 -1
  20. package/ios/views/JMDBlockTextView.m +90 -127
  21. package/ios/views/JMDBoxViews.m +14 -11
  22. package/ios/views/JMDTableView.m +15 -8
  23. package/lib/module/index.js +0 -2
  24. package/lib/module/index.js.map +1 -1
  25. package/lib/typescript/src/index.d.ts +1 -3
  26. package/lib/typescript/src/index.d.ts.map +1 -1
  27. package/lib/typescript/src/types.d.ts +0 -127
  28. package/lib/typescript/src/types.d.ts.map +1 -1
  29. package/package.json +3 -5
  30. package/src/index.tsx +0 -9
  31. package/src/types.ts +0 -134
  32. package/android/src/main/java/com/jetmarkdown/editor/EditorSpans.kt +0 -217
  33. package/android/src/main/java/com/jetmarkdown/editor/JetMarkdownEditorManager.kt +0 -224
  34. package/android/src/main/java/com/jetmarkdown/editor/JetMarkdownEditorView.kt +0 -1736
  35. package/cpp/core/AstToMarkdown.cpp +0 -549
  36. package/cpp/core/AstToMarkdown.h +0 -16
  37. package/cpp/core/EditorRuns.cpp +0 -640
  38. package/cpp/core/EditorRuns.h +0 -94
  39. package/cpp/core/EditorText.cpp +0 -15
  40. package/cpp/core/EditorText.h +0 -18
  41. package/cpp/react/JetMarkdownEditorShadowNode.cpp +0 -54
  42. package/cpp/react/JetMarkdownEditorShadowNode.h +0 -55
  43. package/cpp/react/JetMarkdownEditorState.h +0 -35
  44. package/cpp/tests/parser_tests.cpp +0 -662
  45. package/cpp/tests/run_tests.sh +0 -25
  46. package/ios/editor/JetMarkdownEditor.h +0 -12
  47. package/ios/editor/JetMarkdownEditor.mm +0 -2002
  48. package/lib/module/JetMarkdownEditor.js +0 -85
  49. package/lib/module/JetMarkdownEditor.js.map +0 -1
  50. package/lib/module/JetMarkdownEditor.native.js +0 -244
  51. package/lib/module/JetMarkdownEditor.native.js.map +0 -1
  52. package/lib/module/JetMarkdownEditorNativeComponent.ts +0 -173
  53. package/lib/module/useJetMarkdownEditor.js +0 -41
  54. package/lib/module/useJetMarkdownEditor.js.map +0 -1
  55. package/lib/typescript/src/JetMarkdownEditor.d.ts +0 -6
  56. package/lib/typescript/src/JetMarkdownEditor.d.ts.map +0 -1
  57. package/lib/typescript/src/JetMarkdownEditor.native.d.ts +0 -6
  58. package/lib/typescript/src/JetMarkdownEditor.native.d.ts.map +0 -1
  59. package/lib/typescript/src/JetMarkdownEditorNativeComponent.d.ts +0 -105
  60. package/lib/typescript/src/JetMarkdownEditorNativeComponent.d.ts.map +0 -1
  61. package/lib/typescript/src/useJetMarkdownEditor.d.ts +0 -36
  62. package/lib/typescript/src/useJetMarkdownEditor.d.ts.map +0 -1
  63. package/src/JetMarkdownEditor.native.tsx +0 -301
  64. package/src/JetMarkdownEditor.tsx +0 -90
  65. package/src/JetMarkdownEditorNativeComponent.ts +0 -173
  66. package/src/useJetMarkdownEditor.ts +0 -50
@@ -3,10 +3,12 @@
3
3
  #import <CoreText/CoreText.h>
4
4
 
5
5
  @implementation JMDBlockTextView {
6
+ // Owned by the measured block and shared with every view bound to the
7
+ // same cached content (and the layout thread that built it), so it is
8
+ // never mutated here: spoiler hiding is a draw-time clip.
9
+ NSTextStorage *_textStorage;
6
10
  NSLayoutManager *_layoutManager;
7
11
  NSTextContainer *_textContainer;
8
- NSTextStorage *_textStorage;
9
- NSMutableSet<NSNumber *> *_hiddenSpoilers;
10
12
  }
11
13
 
12
14
  - (instancetype)initWithFrame:(CGRect)frame {
@@ -23,108 +25,82 @@
23
25
  return nil;
24
26
  }
25
27
 
26
- - (void)setAttributedText:(NSAttributedString *)attributedText {
27
- if (![_attributedText isEqualToAttributedString:attributedText]) {
28
- _attributedText = [attributedText copy];
29
- _layoutManager = nil;
30
- // The hiding state lives in the storage, which is rebuilt (with the
31
- // original colors) alongside the layout manager.
32
- [_hiddenSpoilers removeAllObjects];
28
+ - (void)bindTextStorage:(NSTextStorage *)storage {
29
+ if (_textStorage != storage) {
30
+ _textStorage = storage;
31
+ _layoutManager = storage.layoutManagers.firstObject;
32
+ _textContainer = _layoutManager.textContainers.firstObject;
33
33
  self.isAccessibilityElement = YES;
34
- self.accessibilityLabel = attributedText.string;
34
+ self.accessibilityLabel = storage.string;
35
35
  self.accessibilityTraits = UIAccessibilityTraitStaticText;
36
- [self setNeedsDisplay];
37
36
  }
37
+ // Spoiler styling and host may change without the storage changing.
38
+ [self setNeedsDisplay];
38
39
  }
39
40
 
40
- // Lazy TextKit stack shared by drawing, overlay geometry, and hit-testing
41
- // (and configured identically to the measurer's) — one engine, so they can
42
- // never disagree about line positions.
43
- - (NSLayoutManager *)layoutManagerForBounds {
44
- if (_layoutManager == nil && _attributedText != nil) {
45
- _textStorage = [[NSTextStorage alloc] initWithAttributedString:_attributedText];
46
- _layoutManager = [NSLayoutManager new];
47
- _textContainer =
48
- [[NSTextContainer alloc] initWithSize:CGSizeMake(self.bounds.size.width, CGFLOAT_MAX)];
49
- _textContainer.lineFragmentPadding = 0;
50
- [_layoutManager addTextContainer:_textContainer];
51
- [_textStorage addLayoutManager:_layoutManager];
52
- } else if (_textContainer != nil &&
53
- _textContainer.size.width != self.bounds.size.width) {
54
- _textContainer.size = CGSizeMake(self.bounds.size.width, CGFLOAT_MAX);
55
- }
56
- return _layoutManager;
41
+ - (NSAttributedString *)attributedText {
42
+ return _textStorage;
57
43
  }
58
44
 
59
45
  - (void)drawRect:(CGRect)rect {
60
- NSLayoutManager *layoutManager = [self layoutManagerForBounds];
61
- if (layoutManager == nil) {
46
+ if (_layoutManager == nil || _textStorage.length == 0) {
62
47
  return;
63
48
  }
64
- // One engine for everything: the same layout manager that positions the
65
- // overlays also draws the glyphs. NSStringDrawing typesets separately and
66
- // disagrees with NSLayoutManager about font leading under a lineHeight
67
- // cap (fonts with a nonzero line gap drift ~gap pt per line), which
68
- // misaligned overlays on wrapped lines.
69
- [self syncSpoilerHiding:layoutManager];
70
- [self drawRunBackgrounds:layoutManager];
71
- const NSRange glyphRange =
72
- [layoutManager glyphRangeForTextContainer:self->_textContainer];
73
- [layoutManager drawBackgroundForGlyphRange:glyphRange atPoint:CGPointZero];
74
- [layoutManager drawGlyphsForGlyphRange:glyphRange atPoint:CGPointZero];
75
- [self drawSpoilerCovers:layoutManager];
49
+ // One engine for everything: the layout manager that measured the block
50
+ // also positions the overlays and draws the glyphs. NSStringDrawing
51
+ // typesets separately and disagrees with NSLayoutManager about font
52
+ // leading under a lineHeight cap (fonts with a nonzero line gap drift
53
+ // ~gap pt per line), which misaligned overlays on wrapped lines.
54
+ const NSRange glyphRange = [_layoutManager glyphRangeForTextContainer:_textContainer];
55
+ [self drawRunBackgrounds];
56
+ CGContextRef context = UIGraphicsGetCurrentContext();
57
+ CGContextSaveGState(context);
58
+ [self clipHiddenSpoilers:context];
59
+ [_layoutManager drawBackgroundForGlyphRange:glyphRange atPoint:CGPointZero];
60
+ [_layoutManager drawGlyphsForGlyphRange:glyphRange atPoint:CGPointZero];
61
+ CGContextRestoreGState(context);
62
+ [self drawSpoilerCovers];
76
63
  }
77
64
 
78
- // Unrevealed spoiler text draws fully transparent the cover hugs the
79
- // text, so glyphs would leak around it if drawn. Colors mutate on the
80
- // shared storage (color-only edits don't reflow); originals restore from
81
- // the immutable _attributedText on reveal.
82
- - (void)syncSpoilerHiding:(NSLayoutManager *)layoutManager {
83
- if (self.host == nil || _attributedText.length == 0 || _textStorage == nil) {
65
+ // Unrevealed spoiler text is hidden by clipping its line-box slices out of
66
+ // the glyph draw (the cover hugs the text, so glyphs would leak around it).
67
+ // Purely draw-time, per-view state; the shared storage stays untouched.
68
+ - (void)clipHiddenSpoilers:(CGContextRef)context {
69
+ if (self.host == nil) {
84
70
  return;
85
71
  }
86
- if (_hiddenSpoilers == nil) {
87
- _hiddenSpoilers = [NSMutableSet new];
88
- }
89
- [_textStorage beginEditing];
90
- [_attributedText
72
+ CGMutablePathRef hidden = CGPathCreateMutable();
73
+ __block BOOL any = NO;
74
+ [_textStorage
91
75
  enumerateAttribute:JMDSpoilerIDAttributeName
92
- inRange:NSMakeRange(0, _attributedText.length)
76
+ inRange:NSMakeRange(0, _textStorage.length)
93
77
  options:0
94
78
  usingBlock:^(NSNumber *spoilerId, NSRange range, BOOL *stop) {
95
- if (spoilerId == nil) {
96
- return;
97
- }
98
- const BOOL shouldHide =
99
- ![self.host isSpoilerRevealed:spoilerId.integerValue];
100
- const BOOL isHidden =
101
- [self->_hiddenSpoilers containsObject:spoilerId];
102
- if (shouldHide == isHidden) {
79
+ if (spoilerId == nil ||
80
+ [self.host isSpoilerRevealed:spoilerId.integerValue]) {
103
81
  return;
104
82
  }
105
- if (shouldHide) {
106
- [self->_textStorage addAttributes:@{
107
- NSForegroundColorAttributeName : UIColor.clearColor,
108
- NSUnderlineColorAttributeName : UIColor.clearColor,
109
- NSStrikethroughColorAttributeName : UIColor.clearColor,
110
- }
111
- range:range];
112
- [self->_hiddenSpoilers addObject:spoilerId];
113
- } else {
114
- [self->_attributedText
115
- enumerateAttributesInRange:range
116
- options:0
117
- usingBlock:^(NSDictionary *attrs,
118
- NSRange subRange,
119
- BOOL *stopInner) {
120
- [self->_textStorage
121
- setAttributes:attrs
122
- range:subRange];
123
- }];
124
- [self->_hiddenSpoilers removeObject:spoilerId];
125
- }
83
+ const NSRange glyphs =
84
+ [self->_layoutManager glyphRangeForCharacterRange:range
85
+ actualCharacterRange:nil];
86
+ [self->_layoutManager
87
+ enumerateEnclosingRectsForGlyphRange:glyphs
88
+ withinSelectedGlyphRange:NSMakeRange(NSNotFound, 0)
89
+ inTextContainer:self->_textContainer
90
+ usingBlock:^(CGRect rect, BOOL *stopInner) {
91
+ // Padded past side bearings
92
+ // and italic overhang.
93
+ CGPathAddRect(hidden, NULL,
94
+ CGRectInset(rect, -2, 0));
95
+ any = YES;
96
+ }];
126
97
  }];
127
- [_textStorage endEditing];
98
+ if (any) {
99
+ CGContextAddRect(context, self.bounds);
100
+ CGContextAddPath(context, hidden);
101
+ CGContextEOClip(context);
102
+ }
103
+ CGPathRelease(hidden);
128
104
  }
129
105
 
130
106
  // A chip inside an unrevealed spoiler would peek around the cover.
@@ -133,7 +109,7 @@
133
109
  return NO;
134
110
  }
135
111
  __block BOOL hidden = NO;
136
- [_attributedText
112
+ [_textStorage
137
113
  enumerateAttribute:JMDSpoilerIDAttributeName
138
114
  inRange:range
139
115
  options:0
@@ -200,49 +176,45 @@ static const CGFloat JMDInkPad = 2;
200
176
  // Per-line overlay rects for a character range. Whitespace-only segments
201
177
  // have no ink and produce no rect.
202
178
  - (NSArray<NSValue *> *)inkRectsForRange:(NSRange)range
203
- layoutManager:(NSLayoutManager *)layoutManager
204
179
  padLeft:(CGFloat)padLeft
205
180
  padRight:(CGFloat)padRight {
206
181
  CGContextRef context = UIGraphicsGetCurrentContext();
207
182
  // CTLineGetImageBounds reports bounds relative to the context's current
208
- // text position, and NSStringDrawing leaves it wherever the last drawn
209
- // line ended.
183
+ // text position.
210
184
  CGContextSetTextPosition(context, 0, 0);
211
185
  const CGFloat maxWidth = self.bounds.size.width;
212
186
  const CGFloat maxHeight = self.bounds.size.height;
213
187
  const NSRange glyphRange =
214
- [layoutManager glyphRangeForCharacterRange:range actualCharacterRange:nil];
188
+ [_layoutManager glyphRangeForCharacterRange:range actualCharacterRange:nil];
215
189
  NSMutableArray<NSValue *> *lineRects = [NSMutableArray new];
216
190
  NSUInteger glyphIndex = glyphRange.location;
217
191
  while (glyphIndex < NSMaxRange(glyphRange)) {
218
192
  NSRange lineGlyphRange;
219
193
  const CGRect fragment =
220
- [layoutManager lineFragmentRectForGlyphAtIndex:glyphIndex
221
- effectiveRange:&lineGlyphRange];
194
+ [_layoutManager lineFragmentRectForGlyphAtIndex:glyphIndex
195
+ effectiveRange:&lineGlyphRange];
222
196
  const NSRange lineRange = NSIntersectionRange(lineGlyphRange, glyphRange);
223
197
  if (lineRange.length == 0) {
224
198
  break;
225
199
  }
226
200
  const NSRange charRange =
227
- [layoutManager characterRangeForGlyphRange:lineRange actualGlyphRange:nil];
201
+ [_layoutManager characterRangeForGlyphRange:lineRange actualGlyphRange:nil];
228
202
  const CGPoint startLocation =
229
- [layoutManager locationForGlyphAtIndex:lineRange.location];
203
+ [_layoutManager locationForGlyphAtIndex:lineRange.location];
230
204
  // The typesetter already folds NSBaselineOffset (lineHeight centering,
231
205
  // sup/sub shifts) into the glyph location.
232
206
  const CGFloat baselineY = fragment.origin.y + startLocation.y;
233
207
  const CGFloat penX = fragment.origin.x + startLocation.x;
234
208
 
235
209
  CTLineRef line = CTLineCreateWithAttributedString(
236
- (__bridge CFAttributedStringRef)[self->_attributedText
237
- attributedSubstringFromRange:charRange]);
210
+ (__bridge CFAttributedStringRef)[_textStorage attributedSubstringFromRange:charRange]);
238
211
  const CGRect ink = CTLineGetImageBounds(line, context);
239
212
  CFRelease(line);
240
213
  if (!CGRectIsNull(ink) && ink.size.width > 0) {
241
- UIFont *font =
242
- [self->_attributedText attribute:NSFontAttributeName
243
- atIndex:charRange.location
244
- effectiveRange:nil]
245
- ?: [UIFont systemFontOfSize:UIFont.systemFontSize];
214
+ UIFont *font = [_textStorage attribute:NSFontAttributeName
215
+ atIndex:charRange.location
216
+ effectiveRange:nil]
217
+ ?: [UIFont systemFontOfSize:UIFont.systemFontSize];
246
218
  const CGFloat top = MAX(baselineY - font.capHeight - JMDInkPad, 0);
247
219
  const CGFloat bottom =
248
220
  MIN(baselineY - font.descender + JMDInkPad, maxHeight);
@@ -261,15 +233,11 @@ static const CGFloat JMDInkPad = 2;
261
233
  }
262
234
 
263
235
  // Run background chips (inlineCode/link/mention and plain highlights),
264
- // drawn UNDER the text; enumerates the display copy so chips hidden with
265
- // their spoiler don't draw.
266
- - (void)drawRunBackgrounds:(NSLayoutManager *)layoutManager {
267
- if (_attributedText.length == 0) {
268
- return;
269
- }
270
- [_attributedText
236
+ // drawn UNDER the text; chips hidden with their spoiler don't draw.
237
+ - (void)drawRunBackgrounds {
238
+ [_textStorage
271
239
  enumerateAttribute:JMDRunBackgroundAttributeName
272
- inRange:NSMakeRange(0, _attributedText.length)
240
+ inRange:NSMakeRange(0, _textStorage.length)
273
241
  options:0
274
242
  usingBlock:^(JMDRunBackground *chip, NSRange range, BOOL *stop) {
275
243
  if (chip == nil || [self isRangeInsideHiddenSpoiler:range]) {
@@ -277,7 +245,6 @@ static const CGFloat JMDInkPad = 2;
277
245
  }
278
246
  NSArray<NSValue *> *rects = [self
279
247
  inkRectsForRange:range
280
- layoutManager:layoutManager
281
248
  padLeft:chip.padLeft > 0 ? chip.padLeft : JMDInkPad
282
249
  padRight:chip.padRight > 0 ? chip.padRight
283
250
  : JMDInkPad];
@@ -289,16 +256,16 @@ static const CGFloat JMDInkPad = 2;
289
256
  }];
290
257
  }
291
258
 
292
- // Spoiler cover chips, drawn OVER the (transparent) text until revealed.
259
+ // Spoiler cover chips, drawn OVER the (clipped-out) text until revealed.
293
260
  // Same ink geometry as the run backgrounds so covers and backgrounds look
294
261
  // identical.
295
- - (void)drawSpoilerCovers:(NSLayoutManager *)layoutManager {
296
- if (_attributedText.length == 0 || self.host == nil) {
262
+ - (void)drawSpoilerCovers {
263
+ if (self.host == nil) {
297
264
  return;
298
265
  }
299
- [_attributedText
266
+ [_textStorage
300
267
  enumerateAttribute:JMDSpoilerIDAttributeName
301
- inRange:NSMakeRange(0, _attributedText.length)
268
+ inRange:NSMakeRange(0, _textStorage.length)
302
269
  options:0
303
270
  usingBlock:^(NSNumber *spoilerId, NSRange range, BOOL *stop) {
304
271
  if (spoilerId == nil ||
@@ -306,10 +273,7 @@ static const CGFloat JMDInkPad = 2;
306
273
  return;
307
274
  }
308
275
  NSArray<NSValue *> *rects =
309
- [self inkRectsForRange:range
310
- layoutManager:layoutManager
311
- padLeft:JMDInkPad
312
- padRight:JMDInkPad];
276
+ [self inkRectsForRange:range padLeft:JMDInkPad padRight:JMDInkPad];
313
277
  [self.spoilerColor ?: UIColor.darkGrayColor setFill];
314
278
  for (NSValue *value in rects) {
315
279
  [JMDChipPath(value.CGRectValue, self.spoilerRadius,
@@ -319,22 +283,21 @@ static const CGFloat JMDInkPad = 2;
319
283
  }
320
284
 
321
285
  - (nullable NSDictionary *)attributesAtPoint:(CGPoint)point {
322
- NSLayoutManager *layoutManager = [self layoutManagerForBounds];
323
- if (layoutManager == nil || _attributedText.length == 0) {
286
+ if (_layoutManager == nil || _textStorage.length == 0) {
324
287
  return nil;
325
288
  }
326
- const NSUInteger glyphIndex = [layoutManager glyphIndexForPoint:point
327
- inTextContainer:_textContainer];
328
- const CGRect glyphRect = [layoutManager boundingRectForGlyphRange:NSMakeRange(glyphIndex, 1)
329
- inTextContainer:_textContainer];
289
+ const NSUInteger glyphIndex = [_layoutManager glyphIndexForPoint:point
290
+ inTextContainer:_textContainer];
291
+ const CGRect glyphRect = [_layoutManager boundingRectForGlyphRange:NSMakeRange(glyphIndex, 1)
292
+ inTextContainer:_textContainer];
330
293
  if (!CGRectContainsPoint(CGRectInset(glyphRect, -8, -4), point)) {
331
294
  return nil;
332
295
  }
333
- const NSUInteger charIndex = [layoutManager characterIndexForGlyphAtIndex:glyphIndex];
334
- if (charIndex >= _attributedText.length) {
296
+ const NSUInteger charIndex = [_layoutManager characterIndexForGlyphAtIndex:glyphIndex];
297
+ if (charIndex >= _textStorage.length) {
335
298
  return nil;
336
299
  }
337
- return [_attributedText attributesAtIndex:charIndex effectiveRange:nil];
300
+ return [_textStorage attributesAtIndex:charIndex effectiveRange:nil];
338
301
  }
339
302
 
340
303
  @end
@@ -203,7 +203,7 @@ static void JMDApplyBox(UIView *view, JMDLayoutStyle *style) {
203
203
  [self addSubview:_scroller];
204
204
  }
205
205
  JMDApplyBox(self, measured.block.layoutStyle);
206
- _text.attributedText = measured.block.attributedText;
206
+ [_text bindTextStorage:measured.textStorage];
207
207
  [self setNeedsLayout];
208
208
  }
209
209
 
@@ -238,19 +238,22 @@ static void JMDApplyBox(UIView *view, JMDLayoutStyle *style) {
238
238
  host:(nullable id<JMDMarkdownHost>)host {
239
239
  _measured = measured;
240
240
  _gap = gap;
241
- for (UIView *subview in [self.subviews copy]) {
242
- [subview removeFromSuperview];
241
+ // Subviews are (marker, content) pairs; grow/shrink the pair list, then
242
+ // rebind every pair in place.
243
+ const NSUInteger needed = measured.block.rows.count * 2;
244
+ while (self.subviews.count > needed) {
245
+ [self.subviews.lastObject removeFromSuperview];
243
246
  }
244
- JMDBlock *block = measured.block;
245
- for (NSUInteger i = 0; i < block.rows.count; i++) {
246
- JMDBlockTextView *marker = [[JMDBlockTextView alloc] initWithFrame:CGRectZero];
247
- marker.attributedText = block.rows[i].marker;
248
- [self addSubview:marker];
249
-
250
- JMDBlockStackView *content = [[JMDBlockStackView alloc] initWithFrame:CGRectZero];
247
+ while (self.subviews.count < needed) {
248
+ [self addSubview:[[JMDBlockTextView alloc] initWithFrame:CGRectZero]];
249
+ [self addSubview:[[JMDBlockStackView alloc] initWithFrame:CGRectZero]];
250
+ }
251
+ for (NSUInteger i = 0; i < measured.block.rows.count; i++) {
252
+ JMDBlockTextView *marker = (JMDBlockTextView *)self.subviews[i * 2];
253
+ [marker bindTextStorage:measured.markerStorages[i]];
254
+ JMDBlockStackView *content = (JMDBlockStackView *)self.subviews[i * 2 + 1];
251
255
  content.host = host;
252
256
  [content setBlocks:measured.rowContents[i] gap:gap];
253
- [self addSubview:content];
254
257
  }
255
258
  [self setNeedsLayout];
256
259
  }
@@ -22,16 +22,23 @@
22
22
 
23
23
  - (void)bind:(JMDMeasuredBlock *)measured host:(nullable id<JMDMarkdownHost>)host {
24
24
  _measured = measured;
25
- for (UIView *subview in [self.subviews copy]) {
26
- [subview removeFromSuperview];
25
+ // One text view per cell, row-major; grow/shrink then rebind in place.
26
+ NSUInteger needed = 0;
27
+ for (NSArray<NSTextStorage *> *row in measured.cellStorages) {
28
+ needed += row.count;
27
29
  }
28
- JMDBlock *block = measured.block;
29
- for (JMDTableRow *row in block.tableRows) {
30
- for (NSAttributedString *cell in row.cells) {
31
- JMDBlockTextView *view = [[JMDBlockTextView alloc] initWithFrame:CGRectZero];
30
+ while (self.subviews.count > needed) {
31
+ [self.subviews.lastObject removeFromSuperview];
32
+ }
33
+ while (self.subviews.count < needed) {
34
+ [self addSubview:[[JMDBlockTextView alloc] initWithFrame:CGRectZero]];
35
+ }
36
+ NSUInteger index = 0;
37
+ for (NSArray<NSTextStorage *> *row in measured.cellStorages) {
38
+ for (NSTextStorage *cell in row) {
39
+ JMDBlockTextView *view = (JMDBlockTextView *)self.subviews[index++];
32
40
  view.host = host;
33
- view.attributedText = cell;
34
- [self addSubview:view];
41
+ [view bindTextStorage:cell];
35
42
  }
36
43
  }
37
44
  [self setNeedsDisplay];
@@ -3,7 +3,5 @@
3
3
  /** biome-ignore-all lint/performance/noBarrelFile: go away */
4
4
 
5
5
  export { defaultStyles, mergeStyles } from "./defaultStyles.js";
6
- export { JetMarkdownEditor } from "./JetMarkdownEditor";
7
6
  export { JetMarkdownView } from "./JetMarkdownView";
8
- export { useJetMarkdownEditor } from "./useJetMarkdownEditor.js";
9
7
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["defaultStyles","mergeStyles","JetMarkdownEditor","JetMarkdownView","useJetMarkdownEditor"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA;;AAEA,SAASA,aAAa,EAAEC,WAAW,QAAQ,oBAAiB;AAC5D,SAASC,iBAAiB,QAAQ,qBAAqB;AACvD,SAASC,eAAe,QAAQ,mBAAmB;AA6BnD,SAASC,oBAAoB,QAAQ,2BAAwB","ignoreList":[]}
1
+ {"version":3,"names":["defaultStyles","mergeStyles","JetMarkdownView"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA;;AAEA,SAASA,aAAa,EAAEC,WAAW,QAAQ,oBAAiB;AAC5D,SAASC,eAAe,QAAQ,mBAAmB","ignoreList":[]}
@@ -1,7 +1,5 @@
1
1
  /** biome-ignore-all lint/performance/noBarrelFile: go away */
2
2
  export { defaultStyles, mergeStyles } from "./defaultStyles.js";
3
- export { JetMarkdownEditor } from "./JetMarkdownEditor";
4
3
  export { JetMarkdownView } from "./JetMarkdownView";
5
- export type { FontVariant, FontWeight, JetMarkdownEditorProps, JetMarkdownEditorRef, JetMarkdownViewProps, MarkdownContainerStyle, MarkdownDividerStyle, MarkdownEditorState, MarkdownHeadingLevel, MarkdownImageData, MarkdownImageEvent, MarkdownImageStyle, MarkdownInlineCodeStyle, MarkdownLayoutStyle, MarkdownListMarkerStyle, MarkdownListStyle, MarkdownMentionEvent, MarkdownMentionQueryEvent, MarkdownMentionStyle, MarkdownPasteEvent, MarkdownSelection, MarkdownSpoilerStyle, MarkdownStyles, MarkdownTableStyle, MarkdownTextStyle, MarkdownUrlEvent, } from "./types.js";
6
- export { useJetMarkdownEditor } from "./useJetMarkdownEditor.js";
4
+ export type { FontVariant, FontWeight, JetMarkdownViewProps, MarkdownContainerStyle, MarkdownDividerStyle, MarkdownHeadingLevel, MarkdownImageData, MarkdownImageEvent, MarkdownImageStyle, MarkdownInlineCodeStyle, MarkdownLayoutStyle, MarkdownListMarkerStyle, MarkdownListStyle, MarkdownMentionStyle, MarkdownSpoilerStyle, MarkdownStyles, MarkdownTableStyle, MarkdownTextStyle, MarkdownUrlEvent, } from "./types.js";
7
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AAAA,8DAA8D;AAE9D,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,oBAAiB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,YAAY,EACV,WAAW,EACX,UAAU,EACV,sBAAsB,EACtB,oBAAoB,EACpB,oBAAoB,EACpB,sBAAsB,EACtB,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,uBAAuB,EACvB,mBAAmB,EACnB,uBAAuB,EACvB,iBAAiB,EACjB,oBAAoB,EACpB,yBAAyB,EACzB,oBAAoB,EACpB,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,EACpB,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,YAAS,CAAC;AACjB,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAAwB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AAAA,8DAA8D;AAE9D,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,oBAAiB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,YAAY,EACV,WAAW,EACX,UAAU,EACV,oBAAoB,EACpB,sBAAsB,EACtB,oBAAoB,EACpB,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,uBAAuB,EACvB,mBAAmB,EACnB,uBAAuB,EACvB,iBAAiB,EACjB,oBAAoB,EACpB,oBAAoB,EACpB,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,YAAS,CAAC"}
@@ -195,10 +195,6 @@ export interface MarkdownContainerStyle extends MarkdownTextStyle {
195
195
  backgroundColor?: ColorValue;
196
196
  /** Vertical spacing between blocks; overrides `styles.gap`. */
197
197
  gap?: number;
198
- /**
199
- * Editor: caps autogrow — past this height the editor scrolls
200
- * internally like a textarea. Viewer: plain layout clamp.
201
- */
202
198
  maxHeight?: number;
203
199
  padding?: number;
204
200
  paddingBottom?: number;
@@ -208,129 +204,6 @@ export interface MarkdownContainerStyle extends MarkdownTextStyle {
208
204
  paddingTop?: number;
209
205
  paddingVertical?: number;
210
206
  }
211
- /** Formatting active at the cursor / selection. */
212
- export interface MarkdownEditorState {
213
- /** 0 = no heading. */
214
- headingLevel: number;
215
- isBlockQuote: boolean;
216
- isBold: boolean;
217
- isCodeBlock: boolean;
218
- isInlineCode: boolean;
219
- isItalic: boolean;
220
- isOrderedList: boolean;
221
- isSpoiler: boolean;
222
- isStrikethrough: boolean;
223
- isSubscript: boolean;
224
- isSuperscript: boolean;
225
- isUnorderedList: boolean;
226
- }
227
- export interface MarkdownSelection {
228
- end: number;
229
- start: number;
230
- }
231
- export interface MarkdownMentionEvent {
232
- trigger: string;
233
- }
234
- export interface MarkdownMentionQueryEvent {
235
- query: string;
236
- trigger: string;
237
- }
238
- /**
239
- * Paste payload. `text` is present when the clipboard has text (parsed as
240
- * markdown and inserted by default); `images` when it has images (reported
241
- * only, never auto-inserted). `preventDefault()` suppresses the default
242
- * text insertion.
243
- */
244
- export interface MarkdownPasteEvent {
245
- images?: MarkdownImageData[];
246
- preventDefault(): void;
247
- text?: string;
248
- }
249
- export interface JetMarkdownEditorRef {
250
- blur(): void;
251
- focus(): void;
252
- /** Resolves the markdown as of the latest edit. */
253
- getMarkdown(): Promise<string>;
254
- /**
255
- * Links the selection to `url`; with a collapsed cursor, inserts `label`
256
- * (or the URL itself) as linked text.
257
- */
258
- insertLink(url: string, label?: string): void;
259
- /** Parses `markdown` and inserts it at the cursor (or over the selection). */
260
- insertMarkdown(markdown: string): void;
261
- /**
262
- * Inserts an atomic mention token (`trigger + label`, e.g. `@ali`)
263
- * linked to `url` (an app scheme like `users://ali`), replacing any
264
- * active mention query.
265
- */
266
- insertMention(trigger: string, label: string, url: string): void;
267
- /** Removes the link covering the selection or cursor. */
268
- removeLink(): void;
269
- setSelection(start: number, end: number): void;
270
- /** Replaces the content; the value is parsed as markdown. */
271
- setValue(markdown: string): void;
272
- /** Block toggles apply to every line the selection touches. */
273
- toggleBlockQuote(): void;
274
- /**
275
- * Each inline toggle applies to the selection, or arms/disarms the mark
276
- * for text typed at the collapsed cursor.
277
- */
278
- toggleBold(): void;
279
- toggleCode(): void;
280
- toggleCodeBlock(): void;
281
- /** Toggles the heading level (1-6) on the selected lines. */
282
- toggleHeading(level: number): void;
283
- toggleItalic(): void;
284
- toggleOrderedList(): void;
285
- toggleSpoiler(): void;
286
- toggleStrikethrough(): void;
287
- toggleSubscript(): void;
288
- toggleSuperscript(): void;
289
- toggleUnorderedList(): void;
290
- }
291
- export interface JetMarkdownEditorProps {
292
- /** Scale text with the system font size setting. Defaults to true. */
293
- allowFontScaling?: boolean;
294
- autoCapitalize?: "none" | "sentences" | "words" | "characters";
295
- autoCorrect?: boolean;
296
- autoFocus?: boolean;
297
- /**
298
- * Caret color. On iOS the caret and selection share one tint, so
299
- * `selectionColor` wins when both are set. Android 10+ only. Platform
300
- * colors (`PlatformColor`, `DynamicColorIOS`) are supported.
301
- */
302
- cursorColor?: ColorValue;
303
- /** Initial markdown content, applied once. */
304
- defaultValue?: string;
305
- editable?: boolean;
306
- /** Trigger characters (e.g. '@', '#') that begin a mention. */
307
- mentionTriggers?: string[];
308
- multiline?: boolean;
309
- onBlur?: () => void;
310
- onChangeMarkdown?: (markdown: string) => void;
311
- onChangeSelection?: (selection: MarkdownSelection) => void;
312
- onChangeState?: (state: MarkdownEditorState) => void;
313
- onChangeText?: (text: string) => void;
314
- onFocus?: () => void;
315
- onLinkDetected?: (event: MarkdownUrlEvent) => void;
316
- onMentionChange?: (event: MarkdownMentionQueryEvent) => void;
317
- onMentionEnd?: (event: MarkdownMentionEvent) => void;
318
- onMentionStart?: (event: MarkdownMentionEvent) => void;
319
- onPaste?: (event: MarkdownPasteEvent) => void;
320
- placeholder?: string;
321
- placeholderTextColor?: ColorValue;
322
- scrollEnabled?: boolean;
323
- /**
324
- * Selection highlight color. On iOS this also tints the caret (UIKit
325
- * shares one tint). Platform colors (`PlatformColor`, `DynamicColorIOS`)
326
- * are supported.
327
- */
328
- selectionColor?: ColorValue;
329
- /** Same container style contract as the viewer. */
330
- style?: StyleProp<MarkdownContainerStyle>;
331
- /** Per-element markdown styles; shared shape with the viewer. */
332
- styles?: MarkdownStyles;
333
- }
334
207
  export interface JetMarkdownViewProps {
335
208
  /** Scale text with the system font size setting. Defaults to true. */
336
209
  allowFontScaling?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE1D,MAAM,MAAM,WAAW,GACnB,YAAY,GACZ,eAAe,GACf,aAAa,GACb,cAAc,GACd,mBAAmB,GACnB,eAAe,GACf,eAAe,GACf,iBAAiB,GACjB,gBAAgB,GAChB,gBAAgB,GAChB,eAAe,GACf,iBAAiB,GACjB,iBAAiB,GACjB,gBAAgB,GAChB,eAAe,GACf,kBAAkB,GAClB,kBAAkB,GAClB,oBAAoB,GACpB,oBAAoB,GACpB,mBAAmB,GACnB,mBAAmB,GACnB,qBAAqB,GACrB,oBAAoB,GACpB,oBAAoB,GACpB,kBAAkB,CAAC;AAEvB,MAAM,MAAM,UAAU,GAClB,QAAQ,GACR,MAAM,GACN,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GACL,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,CAAC;AAER;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,qCAAqC;IACrC,eAAe,CAAC,EAAE,UAAU,CAAC;IAC7B,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,WAAW,EAAE,CAAC;IAC5B,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,qEAAqE;IACrE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mBAAmB,CAAC,EAAE,UAAU,CAAC;IACjC;;;;OAIG;IACH,kBAAkB,CAAC,EACf,MAAM,GACN,WAAW,GACX,cAAc,GACd,wBAAwB,CAAC;IAC7B,mBAAmB,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;CAChE;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,eAAe,CAAC,EAAE,UAAU,CAAC;IAC7B,iBAAiB,CAAC,EAAE,UAAU,CAAC;IAC/B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,UAAU,CAAC;IACzB,yDAAyD;IACzD,WAAW,CAAC,EAAE,UAAU,GAAG,YAAY,CAAC;IACxC,eAAe,CAAC,EAAE,UAAU,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,UAAU,CAAC;IAC9B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,UAAU,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,kBAAkB;IACjC,eAAe,CAAC,EAAE,UAAU,CAAC;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qEAAqE;IACrE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,kBAAmB,SAAQ,mBAAmB;IAC7D,qEAAqE;IACrE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,qEAAqE;IACrE,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,oBAAoB;IACnC,eAAe,CAAC,EAAE,UAAU,CAAC;IAC7B,yDAAyD;IACzD,WAAW,CAAC,EAAE,UAAU,GAAG,YAAY,CAAC;IACxC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,uBAAuB;IACtC,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,oBAAqB,SAAQ,iBAAiB;IAC7D,yDAAyD;IACzD,WAAW,CAAC,EAAE,UAAU,GAAG,YAAY,CAAC;IACxC,4DAA4D;IAC5D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;CAC9C;AAED,yEAAyE;AACzE,MAAM,WAAW,iBAAkB,SAAQ,iBAAiB;IAC1D,yDAAyD;IACzD,WAAW,CAAC,EAAE,UAAU,GAAG,YAAY,CAAC;IACxC,yDAAyD;IACzD,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,uBAAwB,SAAQ,iBAAiB;IAChE,eAAe,CAAC,EAAE,UAAU,CAAC;IAC7B,yDAAyD;IACzD,WAAW,CAAC,EAAE,UAAU,GAAG,YAAY,CAAC;IACxC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,MAAM,sBAAsB,GAAG,iBAAiB,GACpD,IAAI,CACF,mBAAmB,EACjB,SAAS,GACT,mBAAmB,GACnB,iBAAiB,GACjB,aAAa,GACb,cAAc,GACd,YAAY,GACZ,eAAe,CAClB,CAAC;AAEJ,MAAM,MAAM,oBAAoB,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE3E;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,UAAU,CAAC,EAAE,iBAAiB,GAAG,mBAAmB,CAAC;IACrD,IAAI,CAAC,EAAE,iBAAiB,CAAC;IACzB,SAAS,CAAC,EAAE,iBAAiB,GAAG,mBAAmB,CAAC;IACpD,OAAO,CAAC,EAAE,oBAAoB,CAAC;IAC/B,sEAAsE;IACtE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,oBAAoB,EAAE,iBAAiB,CAAC,CAAC,CAAC;IACpE,KAAK,CAAC,EAAE,kBAAkB,CAAC;IAC3B,UAAU,CAAC,EAAE,uBAAuB,CAAC;IACrC,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,IAAI,CAAC,EAAE,iBAAiB,CAAC;IACzB,IAAI,CAAC,EAAE,iBAAiB,CAAC;IACzB,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B,UAAU,CAAC,EAAE,uBAAuB,CAAC;IACrC,OAAO,CAAC,EAAE,oBAAoB,CAAC;IAC/B,SAAS,CAAC,EAAE,iBAAiB,CAAC;IAC9B,OAAO,CAAC,EAAE,oBAAoB,CAAC;IAC/B,aAAa,CAAC,EAAE,iBAAiB,CAAC;IAClC,SAAS,CAAC,EAAE,iBAAiB,CAAC;IAC9B,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,KAAK,CAAC,EAAE,kBAAkB,CAAC;IAC3B,uDAAuD;IACvD,YAAY,CAAC,EAAE,mBAAmB,CAAC;IACnC,SAAS,CAAC,EAAE,sBAAsB,CAAC;IACnC,2DAA2D;IAC3D,eAAe,CAAC,EAAE,sBAAsB,CAAC;IACzC,yDAAyD;IACzD,cAAc,CAAC,EAAE,mBAAmB,CAAC;IACrC,mEAAmE;IACnE,QAAQ,CAAC,EAAE,mBAAmB,CAAC;CAChC;AAED;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,kBAAkB;IACjC,2CAA2C;IAC3C,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,0CAA0C;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,+EAA+E;IAC/E,CAAC,EAAE,MAAM,CAAC;IACV,6EAA6E;IAC7E,CAAC,EAAE,MAAM,CAAC;CACX;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,sBAAuB,SAAQ,iBAAiB;IAC/D,eAAe,CAAC,EAAE,UAAU,CAAC;IAC7B,+DAA+D;IAC/D,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,oBAAoB;IACnC,sEAAsE;IACtE,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,MAAM,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAC7B,qCAAqC;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC;IACnD,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACpD,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAChD;;;;OAIG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC,sBAAsB,CAAC,CAAC;IAC1C,qEAAqE;IACrE,MAAM,CAAC,EAAE,cAAc,CAAC;CACzB"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "react-native-jet-markdown",
3
- "version": "0.2.1",
4
- "description": "High-performance native Markdown renderer and editor for React Native",
3
+ "version": "0.2.3-beta.0",
4
+ "description": "High-performance native Markdown renderer for React Native",
5
5
  "keywords": [
6
6
  "react-native",
7
7
  "ios",
@@ -41,6 +41,7 @@
41
41
  "!android/gradlew",
42
42
  "!android/gradlew.bat",
43
43
  "!android/local.properties",
44
+ "!cpp/tests",
44
45
  "!**/__tests__",
45
46
  "!**/__fixtures__",
46
47
  "!**/__mocks__",
@@ -93,9 +94,6 @@
93
94
  },
94
95
  "ios": {
95
96
  "components": {
96
- "JetMarkdownEditor": {
97
- "className": "JetMarkdownEditor"
98
- },
99
97
  "JetMarkdownView": {
100
98
  "className": "JetMarkdownView"
101
99
  }