react-native-enriched-markdown 0.1.0 → 0.1.1
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.
- package/LICENSE +20 -0
- package/README.md +479 -0
- package/ReactNativeEnrichedMarkdown.podspec +27 -0
- package/android/build.gradle +101 -0
- package/android/generated/java/com/facebook/react/viewmanagers/EnrichedMarkdownTextManagerDelegate.java +39 -0
- package/android/generated/java/com/facebook/react/viewmanagers/EnrichedMarkdownTextManagerInterface.java +21 -0
- package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/ComponentDescriptors.cpp +22 -0
- package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/ComponentDescriptors.h +24 -0
- package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/EventEmitters.cpp +24 -0
- package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/EventEmitters.h +25 -0
- package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/Props.cpp +57 -0
- package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/Props.h +1164 -0
- package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/ShadowNodes.cpp +17 -0
- package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/ShadowNodes.h +32 -0
- package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/States.cpp +16 -0
- package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/States.h +20 -0
- package/android/gradle.properties +5 -0
- package/android/src/main/AndroidManifest.xml +2 -0
- package/android/src/main/baseline-prof.txt +65 -0
- package/android/src/main/cpp/jni-adapter.cpp +203 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/EnrichedMarkdownText.kt +153 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/EnrichedMarkdownTextLayoutManager.kt +30 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/EnrichedMarkdownTextManager.kt +119 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/EnrichedMarkdownTextPackage.kt +17 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/MeasurementStore.kt +165 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/events/LinkPressEvent.kt +23 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/parser/MarkdownASTNode.kt +29 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/parser/Parser.kt +48 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/BlockStyleContext.kt +166 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/BlockquoteRenderer.kt +89 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/CodeBlockRenderer.kt +105 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/CodeRenderer.kt +35 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/DocumentRenderer.kt +15 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/EmphasisRenderer.kt +26 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/HeadingRenderer.kt +54 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/ImageRenderer.kt +52 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/LineBreakRenderer.kt +15 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/LinkRenderer.kt +28 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/ListContextManager.kt +105 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/ListItemRenderer.kt +58 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/ListRenderer.kt +69 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/NodeRenderer.kt +99 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/ParagraphRenderer.kt +66 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/Renderer.kt +95 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/SpanStyleCache.kt +85 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/StrongRenderer.kt +26 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/TextRenderer.kt +29 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/ThematicBreakRenderer.kt +44 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/spans/BaseListSpan.kt +136 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/spans/BlockquoteSpan.kt +135 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/spans/CodeBackgroundSpan.kt +180 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/spans/CodeBlockSpan.kt +196 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/spans/CodeSpan.kt +27 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/spans/EmphasisSpan.kt +34 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/spans/HeadingSpan.kt +38 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/spans/ImageSpan.kt +320 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/spans/LineHeightSpan.kt +36 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/spans/LinkSpan.kt +37 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/spans/MarginBottomSpan.kt +76 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/spans/OrderedListSpan.kt +87 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/spans/StrongSpan.kt +37 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/spans/TextSpan.kt +26 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/spans/ThematicBreakSpan.kt +69 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/spans/UnorderedListSpan.kt +69 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/styles/BaseBlockStyle.kt +10 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/styles/BlockquoteStyle.kt +48 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/styles/CodeBlockStyle.kt +51 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/styles/CodeStyle.kt +21 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/styles/EmphasisStyle.kt +17 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/styles/HeadingStyle.kt +29 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/styles/ImageStyle.kt +21 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/styles/InlineImageStyle.kt +17 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/styles/LinkStyle.kt +19 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/styles/ListStyle.kt +54 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/styles/ParagraphStyle.kt +29 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/styles/StrongStyle.kt +17 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/styles/StyleConfig.kt +180 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/styles/StyleParser.kt +75 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/styles/ThematicBreakStyle.kt +23 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/AsyncDrawable.kt +91 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/HTMLGenerator.kt +809 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/MarkdownExtractor.kt +365 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/SelectionActionMode.kt +139 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/Utils.kt +181 -0
- package/android/src/main/jni/CMakeLists.txt +82 -0
- package/android/src/main/jni/EnrichedMarkdownTextSpec.cpp +21 -0
- package/android/src/main/jni/EnrichedMarkdownTextSpec.h +25 -0
- package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownTextComponentDescriptor.h +29 -0
- package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownTextMeasurementManager.cpp +45 -0
- package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownTextMeasurementManager.h +21 -0
- package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownTextShadowNode.cpp +33 -0
- package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownTextShadowNode.h +49 -0
- package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownTextState.cpp +9 -0
- package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownTextState.h +25 -0
- package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/conversions.h +19 -0
- package/cpp/md4c/md4c.c +6492 -0
- package/cpp/md4c/md4c.h +402 -0
- package/cpp/parser/MD4CParser.cpp +314 -0
- package/cpp/parser/MD4CParser.hpp +23 -0
- package/cpp/parser/MarkdownASTNode.hpp +49 -0
- package/ios/EnrichedMarkdownText.h +18 -0
- package/ios/EnrichedMarkdownText.mm +1074 -0
- package/ios/attachments/ImageAttachment.h +23 -0
- package/ios/attachments/ImageAttachment.m +185 -0
- package/ios/attachments/ThematicBreakAttachment.h +15 -0
- package/ios/attachments/ThematicBreakAttachment.m +33 -0
- package/ios/generated/EnrichedMarkdownTextSpec/ComponentDescriptors.cpp +22 -0
- package/ios/generated/EnrichedMarkdownTextSpec/ComponentDescriptors.h +24 -0
- package/ios/generated/EnrichedMarkdownTextSpec/EventEmitters.cpp +24 -0
- package/ios/generated/EnrichedMarkdownTextSpec/EventEmitters.h +25 -0
- package/ios/generated/EnrichedMarkdownTextSpec/Props.cpp +57 -0
- package/ios/generated/EnrichedMarkdownTextSpec/Props.h +1164 -0
- package/ios/generated/EnrichedMarkdownTextSpec/RCTComponentViewHelpers.h +20 -0
- package/ios/generated/EnrichedMarkdownTextSpec/ShadowNodes.cpp +17 -0
- package/ios/generated/EnrichedMarkdownTextSpec/ShadowNodes.h +32 -0
- package/ios/generated/EnrichedMarkdownTextSpec/States.cpp +16 -0
- package/ios/generated/EnrichedMarkdownTextSpec/States.h +20 -0
- package/ios/internals/EnrichedMarkdownTextComponentDescriptor.h +19 -0
- package/ios/internals/EnrichedMarkdownTextShadowNode.h +43 -0
- package/ios/internals/EnrichedMarkdownTextShadowNode.mm +85 -0
- package/ios/internals/EnrichedMarkdownTextState.h +24 -0
- package/ios/parser/MarkdownASTNode.h +33 -0
- package/ios/parser/MarkdownASTNode.m +32 -0
- package/ios/parser/MarkdownParser.h +8 -0
- package/ios/parser/MarkdownParser.mm +13 -0
- package/ios/parser/MarkdownParserBridge.mm +110 -0
- package/ios/renderer/AttributedRenderer.h +9 -0
- package/ios/renderer/AttributedRenderer.m +119 -0
- package/ios/renderer/BlockquoteRenderer.h +7 -0
- package/ios/renderer/BlockquoteRenderer.m +159 -0
- package/ios/renderer/CodeBlockRenderer.h +10 -0
- package/ios/renderer/CodeBlockRenderer.m +89 -0
- package/ios/renderer/CodeRenderer.h +10 -0
- package/ios/renderer/CodeRenderer.m +60 -0
- package/ios/renderer/EmphasisRenderer.h +6 -0
- package/ios/renderer/EmphasisRenderer.m +96 -0
- package/ios/renderer/HeadingRenderer.h +7 -0
- package/ios/renderer/HeadingRenderer.m +98 -0
- package/ios/renderer/ImageRenderer.h +12 -0
- package/ios/renderer/ImageRenderer.m +62 -0
- package/ios/renderer/LinkRenderer.h +7 -0
- package/ios/renderer/LinkRenderer.m +69 -0
- package/ios/renderer/ListItemRenderer.h +16 -0
- package/ios/renderer/ListItemRenderer.m +91 -0
- package/ios/renderer/ListRenderer.h +13 -0
- package/ios/renderer/ListRenderer.m +67 -0
- package/ios/renderer/NodeRenderer.h +8 -0
- package/ios/renderer/ParagraphRenderer.h +7 -0
- package/ios/renderer/ParagraphRenderer.m +69 -0
- package/ios/renderer/RenderContext.h +88 -0
- package/ios/renderer/RenderContext.m +248 -0
- package/ios/renderer/RendererFactory.h +12 -0
- package/ios/renderer/RendererFactory.m +110 -0
- package/ios/renderer/StrongRenderer.h +6 -0
- package/ios/renderer/StrongRenderer.m +83 -0
- package/ios/renderer/TextRenderer.h +6 -0
- package/ios/renderer/TextRenderer.m +16 -0
- package/ios/renderer/ThematicBreakRenderer.h +5 -0
- package/ios/renderer/ThematicBreakRenderer.m +53 -0
- package/ios/styles/StyleConfig.h +228 -0
- package/ios/styles/StyleConfig.mm +1467 -0
- package/ios/utils/BlockquoteBorder.h +20 -0
- package/ios/utils/BlockquoteBorder.m +92 -0
- package/ios/utils/CodeBackground.h +19 -0
- package/ios/utils/CodeBackground.m +191 -0
- package/ios/utils/CodeBlockBackground.h +17 -0
- package/ios/utils/CodeBlockBackground.m +87 -0
- package/ios/utils/EditMenuUtils.h +22 -0
- package/ios/utils/EditMenuUtils.m +118 -0
- package/ios/utils/FontUtils.h +20 -0
- package/ios/utils/FontUtils.m +13 -0
- package/ios/utils/HTMLGenerator.h +20 -0
- package/ios/utils/HTMLGenerator.m +779 -0
- package/ios/utils/LastElementUtils.h +53 -0
- package/ios/utils/ListMarkerDrawer.h +15 -0
- package/ios/utils/ListMarkerDrawer.m +127 -0
- package/ios/utils/MarkdownExtractor.h +17 -0
- package/ios/utils/MarkdownExtractor.m +295 -0
- package/ios/utils/ParagraphStyleUtils.h +13 -0
- package/ios/utils/ParagraphStyleUtils.m +56 -0
- package/ios/utils/PasteboardUtils.h +36 -0
- package/ios/utils/PasteboardUtils.m +134 -0
- package/ios/utils/RTFExportUtils.h +24 -0
- package/ios/utils/RTFExportUtils.m +297 -0
- package/ios/utils/RuntimeKeys.h +38 -0
- package/ios/utils/RuntimeKeys.m +11 -0
- package/ios/utils/TextViewLayoutManager.h +14 -0
- package/ios/utils/TextViewLayoutManager.mm +113 -0
- package/lib/module/EnrichedMarkdownText.js +34 -0
- package/lib/module/EnrichedMarkdownText.js.map +1 -0
- package/lib/module/EnrichedMarkdownTextNativeComponent.ts +130 -0
- package/lib/module/index.js +5 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/normalizeMarkdownStyle.js +340 -0
- package/lib/module/normalizeMarkdownStyle.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/typescript/package.json +1 -0
- package/lib/typescript/src/EnrichedMarkdownText.d.ts +101 -0
- package/lib/typescript/src/EnrichedMarkdownText.d.ts.map +1 -0
- package/lib/typescript/src/EnrichedMarkdownTextNativeComponent.d.ts +111 -0
- package/lib/typescript/src/EnrichedMarkdownTextNativeComponent.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +5 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/lib/typescript/src/normalizeMarkdownStyle.d.ts +6 -0
- package/lib/typescript/src/normalizeMarkdownStyle.d.ts.map +1 -0
- package/package.json +186 -1
- package/react-native.config.js +13 -0
- package/src/EnrichedMarkdownText.tsx +152 -0
- package/src/EnrichedMarkdownTextNativeComponent.ts +130 -0
- package/src/index.tsx +7 -0
- package/src/normalizeMarkdownStyle.ts +377 -0
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { type ViewProps, type CodegenTypes, type ColorValue } from 'react-native';
|
|
2
|
+
interface BaseBlockStyleInternal {
|
|
3
|
+
fontSize: CodegenTypes.Float;
|
|
4
|
+
fontFamily: string;
|
|
5
|
+
fontWeight: string;
|
|
6
|
+
color: ColorValue;
|
|
7
|
+
marginBottom: CodegenTypes.Float;
|
|
8
|
+
lineHeight: CodegenTypes.Float;
|
|
9
|
+
}
|
|
10
|
+
interface ParagraphStyleInternal extends BaseBlockStyleInternal {
|
|
11
|
+
}
|
|
12
|
+
interface HeadingStyleInternal extends BaseBlockStyleInternal {
|
|
13
|
+
}
|
|
14
|
+
interface BlockquoteStyleInternal extends BaseBlockStyleInternal {
|
|
15
|
+
borderColor: ColorValue;
|
|
16
|
+
borderWidth: CodegenTypes.Float;
|
|
17
|
+
gapWidth: CodegenTypes.Float;
|
|
18
|
+
backgroundColor: ColorValue;
|
|
19
|
+
}
|
|
20
|
+
interface ListStyleInternal extends BaseBlockStyleInternal {
|
|
21
|
+
bulletColor: ColorValue;
|
|
22
|
+
bulletSize: CodegenTypes.Float;
|
|
23
|
+
markerColor: ColorValue;
|
|
24
|
+
markerFontWeight: string;
|
|
25
|
+
gapWidth: CodegenTypes.Float;
|
|
26
|
+
marginLeft: CodegenTypes.Float;
|
|
27
|
+
}
|
|
28
|
+
interface CodeBlockStyleInternal extends BaseBlockStyleInternal {
|
|
29
|
+
backgroundColor: ColorValue;
|
|
30
|
+
borderColor: ColorValue;
|
|
31
|
+
borderRadius: CodegenTypes.Float;
|
|
32
|
+
borderWidth: CodegenTypes.Float;
|
|
33
|
+
padding: CodegenTypes.Float;
|
|
34
|
+
}
|
|
35
|
+
interface LinkStyleInternal {
|
|
36
|
+
color: ColorValue;
|
|
37
|
+
underline: boolean;
|
|
38
|
+
}
|
|
39
|
+
interface StrongStyleInternal {
|
|
40
|
+
color?: ColorValue;
|
|
41
|
+
}
|
|
42
|
+
interface EmphasisStyleInternal {
|
|
43
|
+
color?: ColorValue;
|
|
44
|
+
}
|
|
45
|
+
interface CodeStyleInternal {
|
|
46
|
+
color: ColorValue;
|
|
47
|
+
backgroundColor: ColorValue;
|
|
48
|
+
borderColor: ColorValue;
|
|
49
|
+
}
|
|
50
|
+
interface ImageStyleInternal {
|
|
51
|
+
height: CodegenTypes.Float;
|
|
52
|
+
borderRadius: CodegenTypes.Float;
|
|
53
|
+
marginBottom: CodegenTypes.Float;
|
|
54
|
+
}
|
|
55
|
+
interface InlineImageStyleInternal {
|
|
56
|
+
size: CodegenTypes.Float;
|
|
57
|
+
}
|
|
58
|
+
interface ThematicBreakStyleInternal {
|
|
59
|
+
color: ColorValue;
|
|
60
|
+
height: CodegenTypes.Float;
|
|
61
|
+
marginTop: CodegenTypes.Float;
|
|
62
|
+
marginBottom: CodegenTypes.Float;
|
|
63
|
+
}
|
|
64
|
+
export interface MarkdownStyleInternal {
|
|
65
|
+
paragraph: ParagraphStyleInternal;
|
|
66
|
+
h1: HeadingStyleInternal;
|
|
67
|
+
h2: HeadingStyleInternal;
|
|
68
|
+
h3: HeadingStyleInternal;
|
|
69
|
+
h4: HeadingStyleInternal;
|
|
70
|
+
h5: HeadingStyleInternal;
|
|
71
|
+
h6: HeadingStyleInternal;
|
|
72
|
+
blockquote: BlockquoteStyleInternal;
|
|
73
|
+
list: ListStyleInternal;
|
|
74
|
+
codeBlock: CodeBlockStyleInternal;
|
|
75
|
+
link: LinkStyleInternal;
|
|
76
|
+
strong: StrongStyleInternal;
|
|
77
|
+
em: EmphasisStyleInternal;
|
|
78
|
+
code: CodeStyleInternal;
|
|
79
|
+
image: ImageStyleInternal;
|
|
80
|
+
inlineImage: InlineImageStyleInternal;
|
|
81
|
+
thematicBreak: ThematicBreakStyleInternal;
|
|
82
|
+
}
|
|
83
|
+
export interface LinkPressEvent {
|
|
84
|
+
url: string;
|
|
85
|
+
}
|
|
86
|
+
export interface NativeProps extends ViewProps {
|
|
87
|
+
/**
|
|
88
|
+
* Markdown content to render.
|
|
89
|
+
*/
|
|
90
|
+
markdown: string;
|
|
91
|
+
/**
|
|
92
|
+
* Internal style configuration for markdown elements.
|
|
93
|
+
* Always provided with complete defaults via normalizeMarkdownStyle.
|
|
94
|
+
* Block styles (paragraph, headings) contain fontSize, fontFamily, fontWeight, and color.
|
|
95
|
+
*/
|
|
96
|
+
markdownStyle: MarkdownStyleInternal;
|
|
97
|
+
/**
|
|
98
|
+
* Callback fired when a link is pressed.
|
|
99
|
+
* Receives the URL that was tapped.
|
|
100
|
+
*/
|
|
101
|
+
onLinkPress?: CodegenTypes.BubblingEventHandler<LinkPressEvent>;
|
|
102
|
+
/**
|
|
103
|
+
* - iOS: Controls text selection and link previews on long press.
|
|
104
|
+
* - Android: Controls text selection.
|
|
105
|
+
* @default true
|
|
106
|
+
*/
|
|
107
|
+
isSelectable?: boolean;
|
|
108
|
+
}
|
|
109
|
+
declare const _default: import("react-native/types_generated/Libraries/Utilities/codegenNativeComponent").NativeComponentType<NativeProps>;
|
|
110
|
+
export default _default;
|
|
111
|
+
//# sourceMappingURL=EnrichedMarkdownTextNativeComponent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EnrichedMarkdownTextNativeComponent.d.ts","sourceRoot":"","sources":["../../../src/EnrichedMarkdownTextNativeComponent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { default as EnrichedMarkdownText } from './EnrichedMarkdownText';
|
|
2
|
+
export { default as EnrichedMarkdownTextNativeComponent } from './EnrichedMarkdownTextNativeComponent';
|
|
3
|
+
export type { EnrichedMarkdownTextProps, MarkdownStyle, } from './EnrichedMarkdownText';
|
|
4
|
+
export type { LinkPressEvent } from './EnrichedMarkdownTextNativeComponent';
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,OAAO,IAAI,mCAAmC,EAAE,MAAM,uCAAuC,CAAC;AACvG,YAAY,EACV,yBAAyB,EACzB,aAAa,GACd,MAAM,wBAAwB,CAAC;AAChC,YAAY,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { type ColorValue } from 'react-native';
|
|
2
|
+
import type { MarkdownStyle } from './EnrichedMarkdownText';
|
|
3
|
+
import type { MarkdownStyleInternal } from './EnrichedMarkdownTextNativeComponent';
|
|
4
|
+
export declare const normalizeColor: (color: string | undefined) => ColorValue | undefined;
|
|
5
|
+
export declare const normalizeMarkdownStyle: (style: MarkdownStyle) => MarkdownStyleInternal;
|
|
6
|
+
//# sourceMappingURL=normalizeMarkdownStyle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalizeMarkdownStyle.d.ts","sourceRoot":"","sources":["../../../src/normalizeMarkdownStyle.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AACvE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAEnF,eAAO,MAAM,cAAc,GACzB,OAAO,MAAM,GAAG,SAAS,KACxB,UAAU,GAAG,SAMf,CAAC;AAiLF,eAAO,MAAM,sBAAsB,GACjC,OAAO,aAAa,KACnB,qBAyLF,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,4 +1,189 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-enriched-markdown",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
|
+
"description": "Markdown Text component for React Native",
|
|
5
|
+
"main": "./lib/module/index.js",
|
|
6
|
+
"types": "./lib/typescript/src/index.d.ts",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": {
|
|
9
|
+
"source": "./src/index.tsx",
|
|
10
|
+
"types": "./lib/typescript/src/index.d.ts",
|
|
11
|
+
"default": "./lib/module/index.js"
|
|
12
|
+
},
|
|
13
|
+
"./package.json": "./package.json"
|
|
14
|
+
},
|
|
15
|
+
"files": [
|
|
16
|
+
"src",
|
|
17
|
+
"lib",
|
|
18
|
+
"android",
|
|
19
|
+
"ios",
|
|
20
|
+
"cpp",
|
|
21
|
+
"*.podspec",
|
|
22
|
+
"react-native.config.js",
|
|
23
|
+
"!ios/build",
|
|
24
|
+
"!android/build",
|
|
25
|
+
"!android/gradle",
|
|
26
|
+
"!android/gradlew",
|
|
27
|
+
"!android/gradlew.bat",
|
|
28
|
+
"!android/local.properties",
|
|
29
|
+
"!**/__tests__",
|
|
30
|
+
"!**/__fixtures__",
|
|
31
|
+
"!**/__mocks__",
|
|
32
|
+
"!**/.*"
|
|
33
|
+
],
|
|
34
|
+
"scripts": {
|
|
35
|
+
"example": "yarn workspace react-native-enriched-markdown-example",
|
|
36
|
+
"android:build:release": "cd example && npx react-native build-android --mode=release",
|
|
37
|
+
"android:test:release": "cd example && yarn android --mode release",
|
|
38
|
+
"test": "jest",
|
|
39
|
+
"typecheck": "tsc",
|
|
40
|
+
"lint": "eslint \"**/*.{js,ts,tsx}\"",
|
|
41
|
+
"lint-clang:ios": "find ios/ \\( -iname \"*.h\" -o -iname \"*.m\" -o -iname \"*.mm\" \\) | grep -v -e Pods -e build | xargs npx clang-format -i -n --Werror",
|
|
42
|
+
"lint-clang:ios:fix": "find ios/ \\( -iname \"*.h\" -o -iname \"*.m\" -o -iname \"*.mm\" \\) | grep -v -e Pods -e build | xargs npx clang-format -i",
|
|
43
|
+
"lint-clang:android": "find android/ \\( -iname \"*.h\" -o -iname \"*.cpp\" \\) | grep -v -e build | xargs npx clang-format -i -n --Werror",
|
|
44
|
+
"lint-clang:android:fix": "find android/ \\( -iname \"*.h\" -o -iname \"*.cpp\" \\) | grep -v -e build | xargs npx clang-format -i",
|
|
45
|
+
"lint-clang": "yarn lint-clang:ios && yarn lint-clang:android",
|
|
46
|
+
"lint-clang:fix": "yarn lint-clang:ios:fix && yarn lint-clang:android:fix",
|
|
47
|
+
"lint-kotlin": "cd example/android && ./gradlew :react-native-enriched-markdown:ktlintCheck",
|
|
48
|
+
"lint-kotlin:fix": "cd example/android && ./gradlew :react-native-enriched-markdown:ktlintFormat",
|
|
49
|
+
"clean": "del-cli android/build example/android/build example/android/app/build example/ios/build lib",
|
|
50
|
+
"prepare": "bob build",
|
|
51
|
+
"release": "release-it --only-version"
|
|
52
|
+
},
|
|
53
|
+
"keywords": [
|
|
54
|
+
"react-native",
|
|
55
|
+
"ios",
|
|
56
|
+
"android",
|
|
57
|
+
"markdown"
|
|
58
|
+
],
|
|
59
|
+
"repository": {
|
|
60
|
+
"type": "git",
|
|
61
|
+
"url": "git+https://github.com/software-mansion-labs/react-native-enriched-markdown.git"
|
|
62
|
+
},
|
|
63
|
+
"author": "Gregory Moskaliuk <mosckalyuck@gmail.com> (https://github.com/hryhoriiK97)",
|
|
64
|
+
"license": "MIT",
|
|
65
|
+
"bugs": {
|
|
66
|
+
"url": "https://github.com/software-mansion-labs/react-native-enriched-markdown/issues"
|
|
67
|
+
},
|
|
68
|
+
"homepage": "https://github.com/software-mansion-labs/react-native-enriched-markdown#readme",
|
|
69
|
+
"publishConfig": {
|
|
70
|
+
"registry": "https://registry.npmjs.org/"
|
|
71
|
+
},
|
|
72
|
+
"devDependencies": {
|
|
73
|
+
"@commitlint/config-conventional": "^19.8.1",
|
|
74
|
+
"@eslint/compat": "^1.3.2",
|
|
75
|
+
"@eslint/eslintrc": "^3.3.1",
|
|
76
|
+
"@eslint/js": "^9.35.0",
|
|
77
|
+
"@evilmartians/lefthook": "^1.12.3",
|
|
78
|
+
"@react-native-community/cli": "20.0.1",
|
|
79
|
+
"@react-native/babel-preset": "0.81.1",
|
|
80
|
+
"@react-native/eslint-config": "^0.81.1",
|
|
81
|
+
"@release-it/conventional-changelog": "^10.0.1",
|
|
82
|
+
"@types/jest": "^29.5.14",
|
|
83
|
+
"@types/react": "^19.1.0",
|
|
84
|
+
"clang-format": "^1.8.0",
|
|
85
|
+
"commitlint": "^19.8.1",
|
|
86
|
+
"del-cli": "^6.0.0",
|
|
87
|
+
"eslint": "^9.35.0",
|
|
88
|
+
"eslint-config-prettier": "^10.1.8",
|
|
89
|
+
"eslint-plugin-prettier": "^5.5.4",
|
|
90
|
+
"jest": "^29.7.0",
|
|
91
|
+
"prettier": "^3.6.2",
|
|
92
|
+
"react": "19.1.0",
|
|
93
|
+
"react-native": "0.81.1",
|
|
94
|
+
"react-native-builder-bob": "^0.40.13",
|
|
95
|
+
"release-it": "^19.0.4",
|
|
96
|
+
"turbo": "^2.5.6",
|
|
97
|
+
"typescript": "^5.9.2"
|
|
98
|
+
},
|
|
99
|
+
"peerDependencies": {
|
|
100
|
+
"react": "*",
|
|
101
|
+
"react-native": "*"
|
|
102
|
+
},
|
|
103
|
+
"workspaces": [
|
|
104
|
+
"example"
|
|
105
|
+
],
|
|
106
|
+
"packageManager": "yarn@3.6.1",
|
|
107
|
+
"jest": {
|
|
108
|
+
"preset": "react-native",
|
|
109
|
+
"modulePathIgnorePatterns": [
|
|
110
|
+
"<rootDir>/example/node_modules",
|
|
111
|
+
"<rootDir>/lib/"
|
|
112
|
+
]
|
|
113
|
+
},
|
|
114
|
+
"commitlint": {
|
|
115
|
+
"extends": [
|
|
116
|
+
"@commitlint/config-conventional"
|
|
117
|
+
]
|
|
118
|
+
},
|
|
119
|
+
"release-it": {
|
|
120
|
+
"git": {
|
|
121
|
+
"commitMessage": "chore: release ${version}",
|
|
122
|
+
"tagName": "v${version}"
|
|
123
|
+
},
|
|
124
|
+
"npm": {
|
|
125
|
+
"publish": true
|
|
126
|
+
},
|
|
127
|
+
"github": {
|
|
128
|
+
"release": true
|
|
129
|
+
},
|
|
130
|
+
"plugins": {
|
|
131
|
+
"@release-it/conventional-changelog": {
|
|
132
|
+
"preset": {
|
|
133
|
+
"name": "angular"
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
},
|
|
138
|
+
"prettier": {
|
|
139
|
+
"quoteProps": "consistent",
|
|
140
|
+
"singleQuote": true,
|
|
141
|
+
"tabWidth": 2,
|
|
142
|
+
"trailingComma": "es5",
|
|
143
|
+
"useTabs": false
|
|
144
|
+
},
|
|
145
|
+
"react-native-builder-bob": {
|
|
146
|
+
"source": "src",
|
|
147
|
+
"output": "lib",
|
|
148
|
+
"targets": [
|
|
149
|
+
"codegen",
|
|
150
|
+
[
|
|
151
|
+
"module",
|
|
152
|
+
{
|
|
153
|
+
"esm": true
|
|
154
|
+
}
|
|
155
|
+
],
|
|
156
|
+
[
|
|
157
|
+
"typescript",
|
|
158
|
+
{
|
|
159
|
+
"project": "tsconfig.build.json"
|
|
160
|
+
}
|
|
161
|
+
]
|
|
162
|
+
]
|
|
163
|
+
},
|
|
164
|
+
"codegenConfig": {
|
|
165
|
+
"name": "EnrichedMarkdownTextSpec",
|
|
166
|
+
"type": "components",
|
|
167
|
+
"jsSrcsDir": "src",
|
|
168
|
+
"outputDir": {
|
|
169
|
+
"ios": "ios/generated",
|
|
170
|
+
"android": "android/generated"
|
|
171
|
+
},
|
|
172
|
+
"android": {
|
|
173
|
+
"javaPackageName": "com.swmansion.enriched.markdown"
|
|
174
|
+
},
|
|
175
|
+
"ios": {
|
|
176
|
+
"components": {
|
|
177
|
+
"EnrichedMarkdownText": {
|
|
178
|
+
"className": "EnrichedMarkdownText"
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
},
|
|
182
|
+
"includesGeneratedCode": true
|
|
183
|
+
},
|
|
184
|
+
"create-react-native-library": {
|
|
185
|
+
"languages": "kotlin-objc",
|
|
186
|
+
"type": "fabric-view",
|
|
187
|
+
"version": "0.54.6"
|
|
188
|
+
}
|
|
4
189
|
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @type {import('@react-native-community/cli-types').UserDependencyConfig}
|
|
3
|
+
*/
|
|
4
|
+
module.exports = {
|
|
5
|
+
dependency: {
|
|
6
|
+
platforms: {
|
|
7
|
+
android: {
|
|
8
|
+
cmakeListsPath: '../android/src/main/jni/CMakeLists.txt',
|
|
9
|
+
componentDescriptors: ['MarkdownTextComponentDescriptor'],
|
|
10
|
+
},
|
|
11
|
+
},
|
|
12
|
+
},
|
|
13
|
+
};
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import { useMemo, useCallback } from 'react';
|
|
2
|
+
import EnrichedMarkdownTextNativeComponent, {
|
|
3
|
+
type NativeProps,
|
|
4
|
+
type LinkPressEvent,
|
|
5
|
+
} from './EnrichedMarkdownTextNativeComponent';
|
|
6
|
+
import { normalizeMarkdownStyle } from './normalizeMarkdownStyle';
|
|
7
|
+
import type { ViewStyle, TextStyle, NativeSyntheticEvent } from 'react-native';
|
|
8
|
+
|
|
9
|
+
interface BaseBlockStyle {
|
|
10
|
+
fontSize?: number;
|
|
11
|
+
fontFamily?: string;
|
|
12
|
+
fontWeight?: string;
|
|
13
|
+
color?: string;
|
|
14
|
+
marginBottom?: number;
|
|
15
|
+
lineHeight?: number;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
interface ParagraphStyle extends BaseBlockStyle {}
|
|
19
|
+
|
|
20
|
+
interface HeadingStyle extends BaseBlockStyle {}
|
|
21
|
+
|
|
22
|
+
interface BlockquoteStyle extends BaseBlockStyle {
|
|
23
|
+
borderColor?: string;
|
|
24
|
+
borderWidth?: number;
|
|
25
|
+
gapWidth?: number;
|
|
26
|
+
backgroundColor?: string;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
interface ListStyle extends BaseBlockStyle {
|
|
30
|
+
bulletColor?: string;
|
|
31
|
+
bulletSize?: number;
|
|
32
|
+
markerColor?: string;
|
|
33
|
+
markerFontWeight?: string;
|
|
34
|
+
gapWidth?: number;
|
|
35
|
+
marginLeft?: number;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
interface CodeBlockStyle extends BaseBlockStyle {
|
|
39
|
+
backgroundColor?: string;
|
|
40
|
+
borderColor?: string;
|
|
41
|
+
borderRadius?: number;
|
|
42
|
+
borderWidth?: number;
|
|
43
|
+
padding?: number;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
interface LinkStyle {
|
|
47
|
+
color?: string;
|
|
48
|
+
underline?: boolean;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
interface StrongStyle {
|
|
52
|
+
color?: string;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
interface EmphasisStyle {
|
|
56
|
+
color?: string;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
interface CodeStyle {
|
|
60
|
+
color?: string;
|
|
61
|
+
backgroundColor?: string;
|
|
62
|
+
borderColor?: string;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
interface ImageStyle {
|
|
66
|
+
height?: number;
|
|
67
|
+
borderRadius?: number;
|
|
68
|
+
marginBottom?: number;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
interface InlineImageStyle {
|
|
72
|
+
size?: number;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
interface ThematicBreakStyle {
|
|
76
|
+
color?: string;
|
|
77
|
+
height?: number;
|
|
78
|
+
marginTop?: number;
|
|
79
|
+
marginBottom?: number;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
export interface MarkdownStyle {
|
|
83
|
+
paragraph?: ParagraphStyle;
|
|
84
|
+
h1?: HeadingStyle;
|
|
85
|
+
h2?: HeadingStyle;
|
|
86
|
+
h3?: HeadingStyle;
|
|
87
|
+
h4?: HeadingStyle;
|
|
88
|
+
h5?: HeadingStyle;
|
|
89
|
+
h6?: HeadingStyle;
|
|
90
|
+
blockquote?: BlockquoteStyle;
|
|
91
|
+
list?: ListStyle;
|
|
92
|
+
codeBlock?: CodeBlockStyle;
|
|
93
|
+
link?: LinkStyle;
|
|
94
|
+
strong?: StrongStyle;
|
|
95
|
+
em?: EmphasisStyle;
|
|
96
|
+
code?: CodeStyle;
|
|
97
|
+
image?: ImageStyle;
|
|
98
|
+
inlineImage?: InlineImageStyle;
|
|
99
|
+
thematicBreak?: ThematicBreakStyle;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
export interface EnrichedMarkdownTextProps
|
|
103
|
+
extends Omit<NativeProps, 'markdownStyle' | 'style' | 'onLinkPress'> {
|
|
104
|
+
/**
|
|
105
|
+
* Style configuration for markdown elements
|
|
106
|
+
*/
|
|
107
|
+
markdownStyle?: MarkdownStyle;
|
|
108
|
+
/**
|
|
109
|
+
* Style for the container view.
|
|
110
|
+
*/
|
|
111
|
+
containerStyle?: ViewStyle | TextStyle;
|
|
112
|
+
/**
|
|
113
|
+
* Callback fired when a link is pressed.
|
|
114
|
+
* Receives the link URL directly.
|
|
115
|
+
*/
|
|
116
|
+
onLinkPress?: (event: LinkPressEvent) => void;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
export const EnrichedMarkdownText = ({
|
|
120
|
+
markdown,
|
|
121
|
+
markdownStyle = {},
|
|
122
|
+
containerStyle,
|
|
123
|
+
onLinkPress,
|
|
124
|
+
isSelectable = true,
|
|
125
|
+
...rest
|
|
126
|
+
}: EnrichedMarkdownTextProps) => {
|
|
127
|
+
const normalizedStyle = useMemo(
|
|
128
|
+
() => normalizeMarkdownStyle(markdownStyle),
|
|
129
|
+
[markdownStyle]
|
|
130
|
+
);
|
|
131
|
+
|
|
132
|
+
const handleLinkPress = useCallback(
|
|
133
|
+
(e: NativeSyntheticEvent<LinkPressEvent>) => {
|
|
134
|
+
const { url } = e.nativeEvent;
|
|
135
|
+
onLinkPress?.({ url });
|
|
136
|
+
},
|
|
137
|
+
[onLinkPress]
|
|
138
|
+
);
|
|
139
|
+
|
|
140
|
+
return (
|
|
141
|
+
<EnrichedMarkdownTextNativeComponent
|
|
142
|
+
markdown={markdown}
|
|
143
|
+
markdownStyle={normalizedStyle}
|
|
144
|
+
onLinkPress={handleLinkPress}
|
|
145
|
+
isSelectable={isSelectable}
|
|
146
|
+
style={containerStyle}
|
|
147
|
+
{...rest}
|
|
148
|
+
/>
|
|
149
|
+
);
|
|
150
|
+
};
|
|
151
|
+
|
|
152
|
+
export default EnrichedMarkdownText;
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import {
|
|
2
|
+
codegenNativeComponent,
|
|
3
|
+
type ViewProps,
|
|
4
|
+
type CodegenTypes,
|
|
5
|
+
type ColorValue,
|
|
6
|
+
} from 'react-native';
|
|
7
|
+
|
|
8
|
+
// All block styles extend this interface
|
|
9
|
+
interface BaseBlockStyleInternal {
|
|
10
|
+
fontSize: CodegenTypes.Float;
|
|
11
|
+
fontFamily: string;
|
|
12
|
+
fontWeight: string;
|
|
13
|
+
color: ColorValue;
|
|
14
|
+
marginBottom: CodegenTypes.Float;
|
|
15
|
+
lineHeight: CodegenTypes.Float;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
interface ParagraphStyleInternal extends BaseBlockStyleInternal {}
|
|
19
|
+
|
|
20
|
+
interface HeadingStyleInternal extends BaseBlockStyleInternal {}
|
|
21
|
+
|
|
22
|
+
interface BlockquoteStyleInternal extends BaseBlockStyleInternal {
|
|
23
|
+
borderColor: ColorValue;
|
|
24
|
+
borderWidth: CodegenTypes.Float;
|
|
25
|
+
gapWidth: CodegenTypes.Float;
|
|
26
|
+
backgroundColor: ColorValue;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
interface ListStyleInternal extends BaseBlockStyleInternal {
|
|
30
|
+
bulletColor: ColorValue;
|
|
31
|
+
bulletSize: CodegenTypes.Float;
|
|
32
|
+
markerColor: ColorValue;
|
|
33
|
+
markerFontWeight: string;
|
|
34
|
+
gapWidth: CodegenTypes.Float;
|
|
35
|
+
marginLeft: CodegenTypes.Float;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
interface CodeBlockStyleInternal extends BaseBlockStyleInternal {
|
|
39
|
+
backgroundColor: ColorValue;
|
|
40
|
+
borderColor: ColorValue;
|
|
41
|
+
borderRadius: CodegenTypes.Float;
|
|
42
|
+
borderWidth: CodegenTypes.Float;
|
|
43
|
+
padding: CodegenTypes.Float;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
interface LinkStyleInternal {
|
|
47
|
+
color: ColorValue;
|
|
48
|
+
underline: boolean;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
interface StrongStyleInternal {
|
|
52
|
+
color?: ColorValue;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
interface EmphasisStyleInternal {
|
|
56
|
+
color?: ColorValue;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
interface CodeStyleInternal {
|
|
60
|
+
color: ColorValue;
|
|
61
|
+
backgroundColor: ColorValue;
|
|
62
|
+
borderColor: ColorValue;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
interface ImageStyleInternal {
|
|
66
|
+
height: CodegenTypes.Float;
|
|
67
|
+
borderRadius: CodegenTypes.Float;
|
|
68
|
+
marginBottom: CodegenTypes.Float;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
interface InlineImageStyleInternal {
|
|
72
|
+
size: CodegenTypes.Float;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
interface ThematicBreakStyleInternal {
|
|
76
|
+
color: ColorValue;
|
|
77
|
+
height: CodegenTypes.Float;
|
|
78
|
+
marginTop: CodegenTypes.Float;
|
|
79
|
+
marginBottom: CodegenTypes.Float;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
export interface MarkdownStyleInternal {
|
|
83
|
+
paragraph: ParagraphStyleInternal;
|
|
84
|
+
h1: HeadingStyleInternal;
|
|
85
|
+
h2: HeadingStyleInternal;
|
|
86
|
+
h3: HeadingStyleInternal;
|
|
87
|
+
h4: HeadingStyleInternal;
|
|
88
|
+
h5: HeadingStyleInternal;
|
|
89
|
+
h6: HeadingStyleInternal;
|
|
90
|
+
blockquote: BlockquoteStyleInternal;
|
|
91
|
+
list: ListStyleInternal;
|
|
92
|
+
codeBlock: CodeBlockStyleInternal;
|
|
93
|
+
link: LinkStyleInternal;
|
|
94
|
+
strong: StrongStyleInternal;
|
|
95
|
+
em: EmphasisStyleInternal;
|
|
96
|
+
code: CodeStyleInternal;
|
|
97
|
+
image: ImageStyleInternal;
|
|
98
|
+
inlineImage: InlineImageStyleInternal;
|
|
99
|
+
thematicBreak: ThematicBreakStyleInternal;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
export interface LinkPressEvent {
|
|
103
|
+
url: string;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
export interface NativeProps extends ViewProps {
|
|
107
|
+
/**
|
|
108
|
+
* Markdown content to render.
|
|
109
|
+
*/
|
|
110
|
+
markdown: string;
|
|
111
|
+
/**
|
|
112
|
+
* Internal style configuration for markdown elements.
|
|
113
|
+
* Always provided with complete defaults via normalizeMarkdownStyle.
|
|
114
|
+
* Block styles (paragraph, headings) contain fontSize, fontFamily, fontWeight, and color.
|
|
115
|
+
*/
|
|
116
|
+
markdownStyle: MarkdownStyleInternal;
|
|
117
|
+
/**
|
|
118
|
+
* Callback fired when a link is pressed.
|
|
119
|
+
* Receives the URL that was tapped.
|
|
120
|
+
*/
|
|
121
|
+
onLinkPress?: CodegenTypes.BubblingEventHandler<LinkPressEvent>;
|
|
122
|
+
/**
|
|
123
|
+
* - iOS: Controls text selection and link previews on long press.
|
|
124
|
+
* - Android: Controls text selection.
|
|
125
|
+
* @default true
|
|
126
|
+
*/
|
|
127
|
+
isSelectable?: boolean;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
export default codegenNativeComponent<NativeProps>('EnrichedMarkdownText');
|
package/src/index.tsx
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { default as EnrichedMarkdownText } from './EnrichedMarkdownText';
|
|
2
|
+
export { default as EnrichedMarkdownTextNativeComponent } from './EnrichedMarkdownTextNativeComponent';
|
|
3
|
+
export type {
|
|
4
|
+
EnrichedMarkdownTextProps,
|
|
5
|
+
MarkdownStyle,
|
|
6
|
+
} from './EnrichedMarkdownText';
|
|
7
|
+
export type { LinkPressEvent } from './EnrichedMarkdownTextNativeComponent';
|