react-native-jet-markdown 0.2.0-beta.7
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/JetMarkdown.podspec +42 -0
- package/LICENSE +20 -0
- package/README.md +247 -0
- package/android/CMakeLists.txt +52 -0
- package/android/build.gradle +55 -0
- package/android/src/main/AndroidManifest.xml +2 -0
- package/android/src/main/cpp/JniBindings.cpp +243 -0
- package/android/src/main/java/com/jetmarkdown/JetMarkdownNative.kt +114 -0
- package/android/src/main/java/com/jetmarkdown/JetMarkdownPackage.kt +22 -0
- package/android/src/main/java/com/jetmarkdown/JetMarkdownView.kt +235 -0
- package/android/src/main/java/com/jetmarkdown/JetMarkdownViewManager.kt +75 -0
- package/android/src/main/java/com/jetmarkdown/editor/EditorSpans.kt +217 -0
- package/android/src/main/java/com/jetmarkdown/editor/JetMarkdownEditorManager.kt +224 -0
- package/android/src/main/java/com/jetmarkdown/editor/JetMarkdownEditorView.kt +1736 -0
- package/android/src/main/java/com/jetmarkdown/measure/MarkdownMeasurer.kt +54 -0
- package/android/src/main/java/com/jetmarkdown/parser/AstDecoder.kt +59 -0
- package/android/src/main/java/com/jetmarkdown/parser/MdNode.kt +43 -0
- package/android/src/main/java/com/jetmarkdown/render/ContentCache.kt +53 -0
- package/android/src/main/java/com/jetmarkdown/render/RenderedContent.kt +318 -0
- package/android/src/main/java/com/jetmarkdown/render/SpannableRenderer.kt +658 -0
- package/android/src/main/java/com/jetmarkdown/render/spans/ChipSpan.kt +17 -0
- package/android/src/main/java/com/jetmarkdown/render/spans/InteractiveSpans.kt +11 -0
- package/android/src/main/java/com/jetmarkdown/render/spans/MarkdownLineHeightSpan.kt +59 -0
- package/android/src/main/java/com/jetmarkdown/render/spans/RunSpan.kt +40 -0
- package/android/src/main/java/com/jetmarkdown/style/Fonts.kt +34 -0
- package/android/src/main/java/com/jetmarkdown/style/LayoutStyleSpec.kt +71 -0
- package/android/src/main/java/com/jetmarkdown/style/PlatformColorResolver.kt +77 -0
- package/android/src/main/java/com/jetmarkdown/style/StyleConfig.kt +80 -0
- package/android/src/main/java/com/jetmarkdown/style/TextStyleSpec.kt +61 -0
- package/android/src/main/java/com/jetmarkdown/views/BlockStackView.kt +292 -0
- package/android/src/main/java/com/jetmarkdown/views/BlockTextView.kt +378 -0
- package/android/src/main/java/com/jetmarkdown/views/BoxDrawing.kt +50 -0
- package/android/src/main/java/com/jetmarkdown/views/MarkdownHost.kt +12 -0
- package/android/src/main/java/com/jetmarkdown/views/MarkdownImageView.kt +113 -0
- package/android/src/main/java/com/jetmarkdown/views/NestedHorizontalScrollView.kt +87 -0
- package/android/src/main/java/com/jetmarkdown/views/TableBlockView.kt +139 -0
- package/cpp/core/Ast.h +85 -0
- package/cpp/core/AstJson.cpp +129 -0
- package/cpp/core/AstJson.h +12 -0
- package/cpp/core/AstSerializer.cpp +40 -0
- package/cpp/core/AstSerializer.h +21 -0
- package/cpp/core/AstToMarkdown.cpp +549 -0
- package/cpp/core/AstToMarkdown.h +16 -0
- package/cpp/core/EditorRuns.cpp +640 -0
- package/cpp/core/EditorRuns.h +94 -0
- package/cpp/core/EditorText.cpp +15 -0
- package/cpp/core/EditorText.h +18 -0
- package/cpp/core/InlineExtensions.cpp +305 -0
- package/cpp/core/InlineExtensions.h +17 -0
- package/cpp/core/Parser.cpp +470 -0
- package/cpp/core/Parser.h +16 -0
- package/cpp/core/Preprocess.cpp +181 -0
- package/cpp/core/Preprocess.h +14 -0
- package/cpp/md4c/LICENSE +22 -0
- package/cpp/md4c/VERSION +1 -0
- package/cpp/md4c/md4c.c +6462 -0
- package/cpp/md4c/md4c.h +407 -0
- package/cpp/react/JetMarkdownEditorShadowNode.cpp +54 -0
- package/cpp/react/JetMarkdownEditorShadowNode.h +55 -0
- package/cpp/react/JetMarkdownEditorState.h +35 -0
- package/cpp/react/JetMarkdownMeasurer.cpp +32 -0
- package/cpp/react/JetMarkdownMeasurer.h +41 -0
- package/cpp/react/JetMarkdownShadowNode.cpp +100 -0
- package/cpp/react/JetMarkdownShadowNode.h +53 -0
- package/cpp/react/JetMarkdownState.h +52 -0
- package/cpp/react/override/react/renderer/components/JetMarkdownViewSpec/ComponentDescriptors.h +21 -0
- package/cpp/tests/parser_tests.cpp +662 -0
- package/cpp/tests/run_tests.sh +25 -0
- package/ios/JetMarkdownView.h +14 -0
- package/ios/JetMarkdownView.mm +468 -0
- package/ios/editor/JetMarkdownEditor.h +12 -0
- package/ios/editor/JetMarkdownEditor.mm +2002 -0
- package/ios/measure/JMDMarkdownMeasurer.h +22 -0
- package/ios/measure/JMDMarkdownMeasurer.mm +38 -0
- package/ios/render/JMDBlock.h +97 -0
- package/ios/render/JMDBlock.m +28 -0
- package/ios/render/JMDBlockRenderer.h +17 -0
- package/ios/render/JMDBlockRenderer.mm +852 -0
- package/ios/render/JMDContentCache.h +17 -0
- package/ios/render/JMDContentCache.mm +42 -0
- package/ios/render/JMDRenderedContent.h +35 -0
- package/ios/render/JMDRenderedContent.mm +274 -0
- package/ios/style/JMDFontScale.h +33 -0
- package/ios/style/JMDLayoutStyle.h +37 -0
- package/ios/style/JMDLayoutStyle.mm +68 -0
- package/ios/style/JMDStyleConfig.h +39 -0
- package/ios/style/JMDStyleConfig.mm +111 -0
- package/ios/style/JMDTextStyle.h +25 -0
- package/ios/style/JMDTextStyle.mm +68 -0
- package/ios/views/JMDBlockStackView.h +18 -0
- package/ios/views/JMDBlockStackView.m +97 -0
- package/ios/views/JMDBlockTextView.h +24 -0
- package/ios/views/JMDBlockTextView.m +340 -0
- package/ios/views/JMDBoxViews.h +33 -0
- package/ios/views/JMDBoxViews.m +292 -0
- package/ios/views/JMDImageView.h +19 -0
- package/ios/views/JMDImageView.m +68 -0
- package/ios/views/JMDMarkdownHost.h +16 -0
- package/ios/views/JMDTableView.h +16 -0
- package/ios/views/JMDTableView.m +172 -0
- package/lib/module/JetMarkdownEditor.js +85 -0
- package/lib/module/JetMarkdownEditor.js.map +1 -0
- package/lib/module/JetMarkdownEditor.native.js +244 -0
- package/lib/module/JetMarkdownEditor.native.js.map +1 -0
- package/lib/module/JetMarkdownEditorNativeComponent.ts +173 -0
- package/lib/module/JetMarkdownView.js +19 -0
- package/lib/module/JetMarkdownView.js.map +1 -0
- package/lib/module/JetMarkdownView.native.js +44 -0
- package/lib/module/JetMarkdownView.native.js.map +1 -0
- package/lib/module/JetMarkdownViewNativeComponent.ts +35 -0
- package/lib/module/defaultStyles.js +122 -0
- package/lib/module/defaultStyles.js.map +1 -0
- package/lib/module/index.js +9 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/module/serializeStyles.js +259 -0
- package/lib/module/serializeStyles.js.map +1 -0
- package/lib/module/types.js +4 -0
- package/lib/module/types.js.map +1 -0
- package/lib/module/useJetMarkdownEditor.js +41 -0
- package/lib/module/useJetMarkdownEditor.js.map +1 -0
- package/lib/typescript/package.json +1 -0
- package/lib/typescript/src/JetMarkdownEditor.d.ts +6 -0
- package/lib/typescript/src/JetMarkdownEditor.d.ts.map +1 -0
- package/lib/typescript/src/JetMarkdownEditor.native.d.ts +6 -0
- package/lib/typescript/src/JetMarkdownEditor.native.d.ts.map +1 -0
- package/lib/typescript/src/JetMarkdownEditorNativeComponent.d.ts +105 -0
- package/lib/typescript/src/JetMarkdownEditorNativeComponent.d.ts.map +1 -0
- package/lib/typescript/src/JetMarkdownView.d.ts +3 -0
- package/lib/typescript/src/JetMarkdownView.d.ts.map +1 -0
- package/lib/typescript/src/JetMarkdownView.native.d.ts +3 -0
- package/lib/typescript/src/JetMarkdownView.native.d.ts.map +1 -0
- package/lib/typescript/src/JetMarkdownViewNativeComponent.d.ts +28 -0
- package/lib/typescript/src/JetMarkdownViewNativeComponent.d.ts.map +1 -0
- package/lib/typescript/src/defaultStyles.d.ts +20 -0
- package/lib/typescript/src/defaultStyles.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +7 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/lib/typescript/src/serializeStyles.d.ts +34 -0
- package/lib/typescript/src/serializeStyles.d.ts.map +1 -0
- package/lib/typescript/src/types.d.ts +352 -0
- package/lib/typescript/src/types.d.ts.map +1 -0
- package/lib/typescript/src/useJetMarkdownEditor.d.ts +36 -0
- package/lib/typescript/src/useJetMarkdownEditor.d.ts.map +1 -0
- package/package.json +150 -0
- package/react-native.config.js +11 -0
- package/src/JetMarkdownEditor.native.tsx +301 -0
- package/src/JetMarkdownEditor.tsx +90 -0
- package/src/JetMarkdownEditorNativeComponent.ts +173 -0
- package/src/JetMarkdownView.native.tsx +67 -0
- package/src/JetMarkdownView.tsx +16 -0
- package/src/JetMarkdownViewNativeComponent.ts +35 -0
- package/src/defaultStyles.ts +102 -0
- package/src/index.tsx +34 -0
- package/src/serializeStyles.ts +369 -0
- package/src/types.ts +438 -0
- package/src/useJetMarkdownEditor.ts +50 -0
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { useCallback, useImperativeHandle, useMemo, useRef } from "react";
|
|
4
|
+
import NativeJetMarkdownEditor, { Commands } from "./JetMarkdownEditorNativeComponent";
|
|
5
|
+
import { serializeStyles, splitContainerStyle } from "./serializeStyles.js";
|
|
6
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
7
|
+
export function JetMarkdownEditor({
|
|
8
|
+
allowFontScaling,
|
|
9
|
+
autoCapitalize,
|
|
10
|
+
autoCorrect,
|
|
11
|
+
autoFocus,
|
|
12
|
+
cursorColor,
|
|
13
|
+
defaultValue,
|
|
14
|
+
editable,
|
|
15
|
+
mentionTriggers,
|
|
16
|
+
multiline,
|
|
17
|
+
onBlur,
|
|
18
|
+
onChangeMarkdown,
|
|
19
|
+
onChangeSelection,
|
|
20
|
+
onChangeState,
|
|
21
|
+
onChangeText,
|
|
22
|
+
onFocus,
|
|
23
|
+
onLinkDetected,
|
|
24
|
+
onMentionChange,
|
|
25
|
+
onMentionEnd,
|
|
26
|
+
onMentionStart,
|
|
27
|
+
onPaste,
|
|
28
|
+
placeholder,
|
|
29
|
+
placeholderTextColor,
|
|
30
|
+
scrollEnabled,
|
|
31
|
+
selectionColor,
|
|
32
|
+
style,
|
|
33
|
+
styles,
|
|
34
|
+
ref
|
|
35
|
+
}) {
|
|
36
|
+
const nativeRef = useRef(null);
|
|
37
|
+
// getMarkdown resolves from the latest onEditorChangeMarkdown payload;
|
|
38
|
+
// until the serializer emits (E1), plain text doubles as the markdown.
|
|
39
|
+
const markdownRef = useRef(null);
|
|
40
|
+
const textRef = useRef(defaultValue ?? "");
|
|
41
|
+
const {
|
|
42
|
+
hostStyle,
|
|
43
|
+
main
|
|
44
|
+
} = splitContainerStyle(style);
|
|
45
|
+
// maxHeight rides as a native prop (autogrow cap; the editor scrolls
|
|
46
|
+
// internally past it) instead of a host style key. It is omitted when
|
|
47
|
+
// unset: Yoga reads the same raw prop as max-height, and a 0 would clamp
|
|
48
|
+
// flex-sized editors to zero height.
|
|
49
|
+
const {
|
|
50
|
+
maxHeight,
|
|
51
|
+
...editorHostStyle
|
|
52
|
+
} = hostStyle;
|
|
53
|
+
const mainKey = JSON.stringify(main);
|
|
54
|
+
const stylesJson = useMemo(() => serializeStyles(styles, JSON.parse(mainKey)), [styles, mainKey]);
|
|
55
|
+
useImperativeHandle(ref, () => ({
|
|
56
|
+
blur: () => {
|
|
57
|
+
if (nativeRef.current) {
|
|
58
|
+
Commands.blur(nativeRef.current);
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
focus: () => {
|
|
62
|
+
if (nativeRef.current) {
|
|
63
|
+
Commands.focus(nativeRef.current);
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
getMarkdown: () => Promise.resolve(markdownRef.current ?? textRef.current),
|
|
67
|
+
insertLink: (url, label) => {
|
|
68
|
+
if (nativeRef.current) {
|
|
69
|
+
Commands.insertLink(nativeRef.current, url, label ?? "");
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
insertMarkdown: markdown => {
|
|
73
|
+
if (nativeRef.current) {
|
|
74
|
+
Commands.insertMarkdown(nativeRef.current, markdown);
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
insertMention: (trigger, label, url) => {
|
|
78
|
+
if (nativeRef.current) {
|
|
79
|
+
Commands.insertMention(nativeRef.current, trigger, label, url);
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
removeLink: () => {
|
|
83
|
+
if (nativeRef.current) {
|
|
84
|
+
Commands.removeLink(nativeRef.current);
|
|
85
|
+
}
|
|
86
|
+
},
|
|
87
|
+
setSelection: (start, end) => {
|
|
88
|
+
if (nativeRef.current) {
|
|
89
|
+
Commands.setSelection(nativeRef.current, start, end);
|
|
90
|
+
}
|
|
91
|
+
},
|
|
92
|
+
setValue: markdown => {
|
|
93
|
+
// Seed with the value being set so getMarkdown() never reports the
|
|
94
|
+
// pre-setValue document; native re-emits its canonical serialization
|
|
95
|
+
// right after.
|
|
96
|
+
markdownRef.current = markdown;
|
|
97
|
+
textRef.current = markdown;
|
|
98
|
+
if (nativeRef.current) {
|
|
99
|
+
Commands.setValue(nativeRef.current, markdown);
|
|
100
|
+
}
|
|
101
|
+
},
|
|
102
|
+
toggleBlockQuote: () => {
|
|
103
|
+
if (nativeRef.current) {
|
|
104
|
+
Commands.toggleBlockQuote(nativeRef.current);
|
|
105
|
+
}
|
|
106
|
+
},
|
|
107
|
+
toggleBold: () => {
|
|
108
|
+
if (nativeRef.current) {
|
|
109
|
+
Commands.toggleBold(nativeRef.current);
|
|
110
|
+
}
|
|
111
|
+
},
|
|
112
|
+
toggleCode: () => {
|
|
113
|
+
if (nativeRef.current) {
|
|
114
|
+
Commands.toggleCode(nativeRef.current);
|
|
115
|
+
}
|
|
116
|
+
},
|
|
117
|
+
toggleCodeBlock: () => {
|
|
118
|
+
if (nativeRef.current) {
|
|
119
|
+
Commands.toggleCodeBlock(nativeRef.current);
|
|
120
|
+
}
|
|
121
|
+
},
|
|
122
|
+
toggleHeading: level => {
|
|
123
|
+
if (nativeRef.current) {
|
|
124
|
+
Commands.toggleHeading(nativeRef.current, level);
|
|
125
|
+
}
|
|
126
|
+
},
|
|
127
|
+
toggleItalic: () => {
|
|
128
|
+
if (nativeRef.current) {
|
|
129
|
+
Commands.toggleItalic(nativeRef.current);
|
|
130
|
+
}
|
|
131
|
+
},
|
|
132
|
+
toggleOrderedList: () => {
|
|
133
|
+
if (nativeRef.current) {
|
|
134
|
+
Commands.toggleOrderedList(nativeRef.current);
|
|
135
|
+
}
|
|
136
|
+
},
|
|
137
|
+
toggleSpoiler: () => {
|
|
138
|
+
if (nativeRef.current) {
|
|
139
|
+
Commands.toggleSpoiler(nativeRef.current);
|
|
140
|
+
}
|
|
141
|
+
},
|
|
142
|
+
toggleStrikethrough: () => {
|
|
143
|
+
if (nativeRef.current) {
|
|
144
|
+
Commands.toggleStrikethrough(nativeRef.current);
|
|
145
|
+
}
|
|
146
|
+
},
|
|
147
|
+
toggleSubscript: () => {
|
|
148
|
+
if (nativeRef.current) {
|
|
149
|
+
Commands.toggleSubscript(nativeRef.current);
|
|
150
|
+
}
|
|
151
|
+
},
|
|
152
|
+
toggleSuperscript: () => {
|
|
153
|
+
if (nativeRef.current) {
|
|
154
|
+
Commands.toggleSuperscript(nativeRef.current);
|
|
155
|
+
}
|
|
156
|
+
},
|
|
157
|
+
toggleUnorderedList: () => {
|
|
158
|
+
if (nativeRef.current) {
|
|
159
|
+
Commands.toggleUnorderedList(nativeRef.current);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}), []);
|
|
163
|
+
|
|
164
|
+
// The native side never inserts pasted content itself: it reports the
|
|
165
|
+
// clipboard here, and unless the app's onPaste calls preventDefault()
|
|
166
|
+
// synchronously, the default insertion happens via insertMarkdown.
|
|
167
|
+
const handlePaste = useCallback(event => {
|
|
168
|
+
const {
|
|
169
|
+
images,
|
|
170
|
+
text
|
|
171
|
+
} = event.nativeEvent;
|
|
172
|
+
let prevented = false;
|
|
173
|
+
onPaste?.({
|
|
174
|
+
images: images.length > 0 ? [...images] : undefined,
|
|
175
|
+
preventDefault: () => {
|
|
176
|
+
prevented = true;
|
|
177
|
+
},
|
|
178
|
+
text: text.length > 0 ? text : undefined
|
|
179
|
+
});
|
|
180
|
+
if (!prevented && text.length > 0 && nativeRef.current) {
|
|
181
|
+
Commands.insertMarkdown(nativeRef.current, text);
|
|
182
|
+
}
|
|
183
|
+
}, [onPaste]);
|
|
184
|
+
return /*#__PURE__*/_jsx(NativeJetMarkdownEditor, {
|
|
185
|
+
allowFontScaling: allowFontScaling,
|
|
186
|
+
autoCapitalize: autoCapitalize,
|
|
187
|
+
autoCorrect: autoCorrect,
|
|
188
|
+
autoFocus: autoFocus,
|
|
189
|
+
cursorColor: cursorColor,
|
|
190
|
+
defaultValue: defaultValue,
|
|
191
|
+
editable: editable,
|
|
192
|
+
maxHeight: typeof maxHeight === "number" && maxHeight > 0 ? maxHeight : undefined,
|
|
193
|
+
mentionTriggers: mentionTriggers,
|
|
194
|
+
multiline: multiline,
|
|
195
|
+
onEditorBlur: onBlur ? () => onBlur() : undefined,
|
|
196
|
+
onEditorChangeMarkdown: event => {
|
|
197
|
+
markdownRef.current = event.nativeEvent.markdown;
|
|
198
|
+
onChangeMarkdown?.(event.nativeEvent.markdown);
|
|
199
|
+
},
|
|
200
|
+
onEditorChangeSelection: onChangeSelection ? event => onChangeSelection({
|
|
201
|
+
end: event.nativeEvent.end,
|
|
202
|
+
start: event.nativeEvent.start
|
|
203
|
+
}) : undefined,
|
|
204
|
+
onEditorChangeState: onChangeState ? event => {
|
|
205
|
+
// Copy the declared fields so consumers never see the raw
|
|
206
|
+
// nativeEvent extras (target, etc.).
|
|
207
|
+
const state = event.nativeEvent;
|
|
208
|
+
onChangeState({
|
|
209
|
+
headingLevel: state.headingLevel,
|
|
210
|
+
isBlockQuote: state.isBlockQuote,
|
|
211
|
+
isBold: state.isBold,
|
|
212
|
+
isCodeBlock: state.isCodeBlock,
|
|
213
|
+
isInlineCode: state.isInlineCode,
|
|
214
|
+
isItalic: state.isItalic,
|
|
215
|
+
isOrderedList: state.isOrderedList,
|
|
216
|
+
isSpoiler: state.isSpoiler,
|
|
217
|
+
isStrikethrough: state.isStrikethrough,
|
|
218
|
+
isSubscript: state.isSubscript,
|
|
219
|
+
isSuperscript: state.isSuperscript,
|
|
220
|
+
isUnorderedList: state.isUnorderedList
|
|
221
|
+
});
|
|
222
|
+
} : undefined,
|
|
223
|
+
onEditorChangeText: event => {
|
|
224
|
+
textRef.current = event.nativeEvent.text;
|
|
225
|
+
onChangeText?.(event.nativeEvent.text);
|
|
226
|
+
},
|
|
227
|
+
onEditorFocus: onFocus ? () => onFocus() : undefined,
|
|
228
|
+
onEditorLinkDetected: onLinkDetected ? event => onLinkDetected({
|
|
229
|
+
url: event.nativeEvent.url
|
|
230
|
+
}) : undefined,
|
|
231
|
+
onEditorMentionChange: onMentionChange ? event => onMentionChange(event.nativeEvent) : undefined,
|
|
232
|
+
onEditorMentionEnd: onMentionEnd ? event => onMentionEnd(event.nativeEvent) : undefined,
|
|
233
|
+
onEditorMentionStart: onMentionStart ? event => onMentionStart(event.nativeEvent) : undefined,
|
|
234
|
+
onEditorPaste: handlePaste,
|
|
235
|
+
placeholder: placeholder,
|
|
236
|
+
placeholderTextColor: placeholderTextColor,
|
|
237
|
+
ref: nativeRef,
|
|
238
|
+
scrollEnabled: scrollEnabled,
|
|
239
|
+
selectionColor: selectionColor,
|
|
240
|
+
style: editorHostStyle,
|
|
241
|
+
stylesJson: stylesJson
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
//# sourceMappingURL=JetMarkdownEditor.native.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useCallback","useImperativeHandle","useMemo","useRef","NativeJetMarkdownEditor","Commands","serializeStyles","splitContainerStyle","jsx","_jsx","JetMarkdownEditor","allowFontScaling","autoCapitalize","autoCorrect","autoFocus","cursorColor","defaultValue","editable","mentionTriggers","multiline","onBlur","onChangeMarkdown","onChangeSelection","onChangeState","onChangeText","onFocus","onLinkDetected","onMentionChange","onMentionEnd","onMentionStart","onPaste","placeholder","placeholderTextColor","scrollEnabled","selectionColor","style","styles","ref","nativeRef","markdownRef","textRef","hostStyle","main","maxHeight","editorHostStyle","mainKey","JSON","stringify","stylesJson","parse","blur","current","focus","getMarkdown","Promise","resolve","insertLink","url","label","insertMarkdown","markdown","insertMention","trigger","removeLink","setSelection","start","end","setValue","toggleBlockQuote","toggleBold","toggleCode","toggleCodeBlock","toggleHeading","level","toggleItalic","toggleOrderedList","toggleSpoiler","toggleStrikethrough","toggleSubscript","toggleSuperscript","toggleUnorderedList","handlePaste","event","images","text","nativeEvent","prevented","length","undefined","preventDefault","onEditorBlur","onEditorChangeMarkdown","onEditorChangeSelection","onEditorChangeState","state","headingLevel","isBlockQuote","isBold","isCodeBlock","isInlineCode","isItalic","isOrderedList","isSpoiler","isStrikethrough","isSubscript","isSuperscript","isUnorderedList","onEditorChangeText","onEditorFocus","onEditorLinkDetected","onEditorMentionChange","onEditorMentionEnd","onEditorMentionStart","onEditorPaste"],"sourceRoot":"../../src","sources":["JetMarkdownEditor.native.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import {
|
|
2
|
+
type CodegenTypes,
|
|
3
|
+
type ColorValue,
|
|
4
|
+
codegenNativeCommands,
|
|
5
|
+
codegenNativeComponent,
|
|
6
|
+
type HostComponent,
|
|
7
|
+
type ViewProps,
|
|
8
|
+
} from "react-native";
|
|
9
|
+
|
|
10
|
+
interface TextEvent {
|
|
11
|
+
text: string;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
interface MarkdownEvent {
|
|
15
|
+
markdown: string;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
interface SelectionEvent {
|
|
19
|
+
end: CodegenTypes.Int32;
|
|
20
|
+
start: CodegenTypes.Int32;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
interface StateEvent {
|
|
24
|
+
headingLevel: CodegenTypes.Int32;
|
|
25
|
+
isBlockQuote: boolean;
|
|
26
|
+
isBold: boolean;
|
|
27
|
+
isCodeBlock: boolean;
|
|
28
|
+
isInlineCode: boolean;
|
|
29
|
+
isItalic: boolean;
|
|
30
|
+
isOrderedList: boolean;
|
|
31
|
+
isSpoiler: boolean;
|
|
32
|
+
isStrikethrough: boolean;
|
|
33
|
+
isSubscript: boolean;
|
|
34
|
+
isSuperscript: boolean;
|
|
35
|
+
isUnorderedList: boolean;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
interface UrlEvent {
|
|
39
|
+
url: string;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
interface MentionEvent {
|
|
43
|
+
trigger: string;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
interface MentionQueryEvent {
|
|
47
|
+
query: string;
|
|
48
|
+
trigger: string;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
interface PasteEvent {
|
|
52
|
+
// Codegen's event parser needs inline element types and rejects readonly
|
|
53
|
+
// arrays (the props parser accepts both).
|
|
54
|
+
images: {
|
|
55
|
+
height: CodegenTypes.Double;
|
|
56
|
+
url: string;
|
|
57
|
+
width: CodegenTypes.Double;
|
|
58
|
+
}[];
|
|
59
|
+
text: string;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
interface NativeProps extends ViewProps {
|
|
63
|
+
allowFontScaling?: CodegenTypes.WithDefault<boolean, true>;
|
|
64
|
+
autoCapitalize?: CodegenTypes.WithDefault<
|
|
65
|
+
"none" | "sentences" | "words" | "characters",
|
|
66
|
+
"sentences"
|
|
67
|
+
>;
|
|
68
|
+
autoCorrect?: CodegenTypes.WithDefault<boolean, true>;
|
|
69
|
+
autoFocus?: CodegenTypes.WithDefault<boolean, false>;
|
|
70
|
+
cursorColor?: ColorValue;
|
|
71
|
+
defaultValue?: string;
|
|
72
|
+
editable?: CodegenTypes.WithDefault<boolean, true>;
|
|
73
|
+
/**
|
|
74
|
+
* Autogrow cap in points; native default 0 = unbounded. Yoga ALSO parses
|
|
75
|
+
* this key out of the raw-props bag as max-height, so the wrapper MUST
|
|
76
|
+
* omit it entirely when unset — an unconditional 0 clamps the node to
|
|
77
|
+
* zero height (dead flex-sized editors). When set, Yoga's clamp equals
|
|
78
|
+
* the autogrow cap, which is exactly the intended geometry.
|
|
79
|
+
*/
|
|
80
|
+
maxHeight?: CodegenTypes.WithDefault<CodegenTypes.Double, 0>;
|
|
81
|
+
mentionTriggers?: readonly string[];
|
|
82
|
+
multiline?: CodegenTypes.WithDefault<boolean, true>;
|
|
83
|
+
onEditorBlur?: CodegenTypes.DirectEventHandler<null>;
|
|
84
|
+
onEditorChangeMarkdown?: CodegenTypes.DirectEventHandler<MarkdownEvent>;
|
|
85
|
+
onEditorChangeSelection?: CodegenTypes.DirectEventHandler<SelectionEvent>;
|
|
86
|
+
onEditorChangeState?: CodegenTypes.DirectEventHandler<StateEvent>;
|
|
87
|
+
onEditorChangeText?: CodegenTypes.DirectEventHandler<TextEvent>;
|
|
88
|
+
onEditorFocus?: CodegenTypes.DirectEventHandler<null>;
|
|
89
|
+
onEditorLinkDetected?: CodegenTypes.DirectEventHandler<UrlEvent>;
|
|
90
|
+
onEditorMentionChange?: CodegenTypes.DirectEventHandler<MentionQueryEvent>;
|
|
91
|
+
onEditorMentionEnd?: CodegenTypes.DirectEventHandler<MentionEvent>;
|
|
92
|
+
onEditorMentionStart?: CodegenTypes.DirectEventHandler<MentionEvent>;
|
|
93
|
+
onEditorPaste?: CodegenTypes.DirectEventHandler<PasteEvent>;
|
|
94
|
+
placeholder?: string;
|
|
95
|
+
placeholderTextColor?: ColorValue;
|
|
96
|
+
scrollEnabled?: CodegenTypes.WithDefault<boolean, false>;
|
|
97
|
+
selectionColor?: ColorValue;
|
|
98
|
+
stylesJson?: string;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
type EditorComponentType = HostComponent<NativeProps>;
|
|
102
|
+
|
|
103
|
+
interface NativeCommands {
|
|
104
|
+
blur: (viewRef: React.ElementRef<EditorComponentType>) => void;
|
|
105
|
+
focus: (viewRef: React.ElementRef<EditorComponentType>) => void;
|
|
106
|
+
insertLink: (
|
|
107
|
+
viewRef: React.ElementRef<EditorComponentType>,
|
|
108
|
+
url: string,
|
|
109
|
+
label: string
|
|
110
|
+
) => void;
|
|
111
|
+
insertMarkdown: (
|
|
112
|
+
viewRef: React.ElementRef<EditorComponentType>,
|
|
113
|
+
value: string
|
|
114
|
+
) => void;
|
|
115
|
+
insertMention: (
|
|
116
|
+
viewRef: React.ElementRef<EditorComponentType>,
|
|
117
|
+
trigger: string,
|
|
118
|
+
label: string,
|
|
119
|
+
url: string
|
|
120
|
+
) => void;
|
|
121
|
+
removeLink: (viewRef: React.ElementRef<EditorComponentType>) => void;
|
|
122
|
+
setSelection: (
|
|
123
|
+
viewRef: React.ElementRef<EditorComponentType>,
|
|
124
|
+
start: CodegenTypes.Int32,
|
|
125
|
+
end: CodegenTypes.Int32
|
|
126
|
+
) => void;
|
|
127
|
+
setValue: (
|
|
128
|
+
viewRef: React.ElementRef<EditorComponentType>,
|
|
129
|
+
value: string
|
|
130
|
+
) => void;
|
|
131
|
+
toggleBlockQuote: (viewRef: React.ElementRef<EditorComponentType>) => void;
|
|
132
|
+
toggleBold: (viewRef: React.ElementRef<EditorComponentType>) => void;
|
|
133
|
+
toggleCode: (viewRef: React.ElementRef<EditorComponentType>) => void;
|
|
134
|
+
toggleCodeBlock: (viewRef: React.ElementRef<EditorComponentType>) => void;
|
|
135
|
+
toggleHeading: (
|
|
136
|
+
viewRef: React.ElementRef<EditorComponentType>,
|
|
137
|
+
level: CodegenTypes.Int32
|
|
138
|
+
) => void;
|
|
139
|
+
toggleItalic: (viewRef: React.ElementRef<EditorComponentType>) => void;
|
|
140
|
+
toggleOrderedList: (viewRef: React.ElementRef<EditorComponentType>) => void;
|
|
141
|
+
toggleSpoiler: (viewRef: React.ElementRef<EditorComponentType>) => void;
|
|
142
|
+
toggleStrikethrough: (viewRef: React.ElementRef<EditorComponentType>) => void;
|
|
143
|
+
toggleSubscript: (viewRef: React.ElementRef<EditorComponentType>) => void;
|
|
144
|
+
toggleSuperscript: (viewRef: React.ElementRef<EditorComponentType>) => void;
|
|
145
|
+
toggleUnorderedList: (viewRef: React.ElementRef<EditorComponentType>) => void;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
export const Commands = codegenNativeCommands<NativeCommands>({
|
|
149
|
+
supportedCommands: [
|
|
150
|
+
"blur",
|
|
151
|
+
"focus",
|
|
152
|
+
"insertLink",
|
|
153
|
+
"insertMarkdown",
|
|
154
|
+
"insertMention",
|
|
155
|
+
"removeLink",
|
|
156
|
+
"setSelection",
|
|
157
|
+
"setValue",
|
|
158
|
+
"toggleBlockQuote",
|
|
159
|
+
"toggleBold",
|
|
160
|
+
"toggleCode",
|
|
161
|
+
"toggleCodeBlock",
|
|
162
|
+
"toggleHeading",
|
|
163
|
+
"toggleItalic",
|
|
164
|
+
"toggleOrderedList",
|
|
165
|
+
"toggleSpoiler",
|
|
166
|
+
"toggleStrikethrough",
|
|
167
|
+
"toggleSubscript",
|
|
168
|
+
"toggleSuperscript",
|
|
169
|
+
"toggleUnorderedList",
|
|
170
|
+
],
|
|
171
|
+
});
|
|
172
|
+
|
|
173
|
+
export default codegenNativeComponent<NativeProps>("JetMarkdownEditor");
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { Text, View } from "react-native";
|
|
4
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
5
|
+
// Non-native (web) fallback: renders the raw markdown as plain text.
|
|
6
|
+
export function JetMarkdownView({
|
|
7
|
+
allowFontScaling,
|
|
8
|
+
markdown,
|
|
9
|
+
style
|
|
10
|
+
}) {
|
|
11
|
+
return /*#__PURE__*/_jsx(View, {
|
|
12
|
+
style: style,
|
|
13
|
+
children: /*#__PURE__*/_jsx(Text, {
|
|
14
|
+
allowFontScaling: allowFontScaling,
|
|
15
|
+
children: markdown
|
|
16
|
+
})
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=JetMarkdownView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Text","View","jsx","_jsx","JetMarkdownView","allowFontScaling","markdown","style","children"],"sourceRoot":"../../src","sources":["JetMarkdownView.tsx"],"mappings":";;AAAA,SAAyBA,IAAI,EAAEC,IAAI,QAAwB,cAAc;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAI1E;AACA,OAAO,SAASC,eAAeA,CAAC;EAC9BC,gBAAgB;EAChBC,QAAQ;EACRC;AACoB,CAAC,EAAE;EACvB,oBACEJ,IAAA,CAACF,IAAI;IAACM,KAAK,EAAEA,KAA8B;IAAAC,QAAA,eACzCL,IAAA,CAACH,IAAI;MAACK,gBAAgB,EAAEA,gBAAiB;MAAAG,QAAA,EAAEF;IAAQ,CAAO;EAAC,CACvD,CAAC;AAEX","ignoreList":[]}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { useMemo } from "react";
|
|
4
|
+
import NativeJetMarkdownView from "./JetMarkdownViewNativeComponent";
|
|
5
|
+
import { serializeStyles, splitContainerStyle } from "./serializeStyles.js";
|
|
6
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
7
|
+
export function JetMarkdownView({
|
|
8
|
+
allowFontScaling,
|
|
9
|
+
markdown,
|
|
10
|
+
style,
|
|
11
|
+
styles,
|
|
12
|
+
images,
|
|
13
|
+
onLinkPress,
|
|
14
|
+
onLinkLongPress,
|
|
15
|
+
onImagePress
|
|
16
|
+
}) {
|
|
17
|
+
const {
|
|
18
|
+
hostStyle,
|
|
19
|
+
main
|
|
20
|
+
} = splitContainerStyle(style);
|
|
21
|
+
const mainKey = JSON.stringify(main);
|
|
22
|
+
const stylesJson = useMemo(() => serializeStyles(styles, JSON.parse(mainKey)), [styles, mainKey]);
|
|
23
|
+
return /*#__PURE__*/_jsx(NativeJetMarkdownView, {
|
|
24
|
+
allowFontScaling: allowFontScaling,
|
|
25
|
+
images: images,
|
|
26
|
+
markdown: markdown,
|
|
27
|
+
onImagePress: onImagePress ? event => onImagePress({
|
|
28
|
+
height: event.nativeEvent.height,
|
|
29
|
+
url: event.nativeEvent.url,
|
|
30
|
+
width: event.nativeEvent.width,
|
|
31
|
+
x: event.nativeEvent.x,
|
|
32
|
+
y: event.nativeEvent.y
|
|
33
|
+
}) : undefined,
|
|
34
|
+
onLinkLongPress: onLinkLongPress ? event => onLinkLongPress({
|
|
35
|
+
url: event.nativeEvent.url
|
|
36
|
+
}) : undefined,
|
|
37
|
+
onLinkPress: onLinkPress ? event => onLinkPress({
|
|
38
|
+
url: event.nativeEvent.url
|
|
39
|
+
}) : undefined,
|
|
40
|
+
style: hostStyle,
|
|
41
|
+
stylesJson: stylesJson
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=JetMarkdownView.native.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useMemo","NativeJetMarkdownView","serializeStyles","splitContainerStyle","jsx","_jsx","JetMarkdownView","allowFontScaling","markdown","style","styles","images","onLinkPress","onLinkLongPress","onImagePress","hostStyle","main","mainKey","JSON","stringify","stylesJson","parse","event","height","nativeEvent","url","width","x","y","undefined"],"sourceRoot":"../../src","sources":["JetMarkdownView.native.tsx"],"mappings":";;AAAA,SAASA,OAAO,QAAQ,OAAO;AAG/B,OAAOC,qBAAqB,MAAM,kCAAkC;AACpE,SAEEC,eAAe,EACfC,mBAAmB,QACd,sBAAmB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAO3B,OAAO,SAASC,eAAeA,CAAC;EAC9BC,gBAAgB;EAChBC,QAAQ;EACRC,KAAK;EACLC,MAAM;EACNC,MAAM;EACNC,WAAW;EACXC,eAAe;EACfC;AACoB,CAAC,EAAE;EACvB,MAAM;IAAEC,SAAS;IAAEC;EAAK,CAAC,GAAGb,mBAAmB,CAACM,KAAK,CAAC;EAEtD,MAAMQ,OAAO,GAAGC,IAAI,CAACC,SAAS,CAACH,IAAI,CAAC;EACpC,MAAMI,UAAU,GAAGpB,OAAO,CACxB,MAAME,eAAe,CAACQ,MAAM,EAAEQ,IAAI,CAACG,KAAK,CAACJ,OAAO,CAAc,CAAC,EAC/D,CAACP,MAAM,EAAEO,OAAO,CAClB,CAAC;EAED,oBACEZ,IAAA,CAACJ,qBAAqB;IACpBM,gBAAgB,EAAEA,gBAAiB;IACnCI,MAAM,EAAEA,MAAO;IACfH,QAAQ,EAAEA,QAAS;IACnBM,YAAY,EACVA,YAAY,GACPQ,KAA+C,IAC9CR,YAAY,CAAC;MACXS,MAAM,EAAED,KAAK,CAACE,WAAW,CAACD,MAAM;MAChCE,GAAG,EAAEH,KAAK,CAACE,WAAW,CAACC,GAAG;MAC1BC,KAAK,EAAEJ,KAAK,CAACE,WAAW,CAACE,KAAK;MAC9BC,CAAC,EAAEL,KAAK,CAACE,WAAW,CAACG,CAAC;MACtBC,CAAC,EAAEN,KAAK,CAACE,WAAW,CAACI;IACvB,CAAC,CAAC,GACJC,SACL;IACDhB,eAAe,EACbA,eAAe,GACVS,KAA6C,IAC5CT,eAAe,CAAC;MAAEY,GAAG,EAAEH,KAAK,CAACE,WAAW,CAACC;IAAI,CAAC,CAAC,GACjDI,SACL;IACDjB,WAAW,EACTA,WAAW,GACNU,KAA6C,IAC5CV,WAAW,CAAC;MAAEa,GAAG,EAAEH,KAAK,CAACE,WAAW,CAACC;IAAI,CAAC,CAAC,GAC7CI,SACL;IACDpB,KAAK,EAAEM,SAAU;IACjBK,UAAU,EAAEA;EAAW,CACxB,CAAC;AAEN","ignoreList":[]}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import {
|
|
2
|
+
type CodegenTypes,
|
|
3
|
+
codegenNativeComponent,
|
|
4
|
+
type ViewProps,
|
|
5
|
+
} from "react-native";
|
|
6
|
+
|
|
7
|
+
interface UrlEvent {
|
|
8
|
+
url: string;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
interface ImagePressEvent {
|
|
12
|
+
height: CodegenTypes.Double;
|
|
13
|
+
url: string;
|
|
14
|
+
width: CodegenTypes.Double;
|
|
15
|
+
x: CodegenTypes.Double;
|
|
16
|
+
y: CodegenTypes.Double;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
interface ImageData {
|
|
20
|
+
height: CodegenTypes.Double;
|
|
21
|
+
url: string;
|
|
22
|
+
width: CodegenTypes.Double;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
interface NativeProps extends ViewProps {
|
|
26
|
+
allowFontScaling?: CodegenTypes.WithDefault<boolean, true>;
|
|
27
|
+
images?: readonly ImageData[];
|
|
28
|
+
markdown: string;
|
|
29
|
+
onImagePress?: CodegenTypes.DirectEventHandler<ImagePressEvent>;
|
|
30
|
+
onLinkLongPress?: CodegenTypes.DirectEventHandler<UrlEvent>;
|
|
31
|
+
onLinkPress?: CodegenTypes.DirectEventHandler<UrlEvent>;
|
|
32
|
+
stylesJson?: string;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export default codegenNativeComponent<NativeProps>("JetMarkdownView");
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* The classic markdown look. The viewer renders fully plain when `styles`
|
|
5
|
+
* is omitted — pass `defaultStyles` for this look as-is, or
|
|
6
|
+
* `mergeStyles({...})` to override parts of it. Tune freely: this object is
|
|
7
|
+
* the single source of truth for the default appearance.
|
|
8
|
+
*
|
|
9
|
+
* Only semantics stay native and are not represented here: bold/italic/
|
|
10
|
+
* strikethrough runs, the monospace font family for code, list markers,
|
|
11
|
+
* table header-row bold, and the spoiler cover fallback.
|
|
12
|
+
*/
|
|
13
|
+
export const defaultStyles = {
|
|
14
|
+
blockQuote: {
|
|
15
|
+
borderLeftColor: "rgba(0, 0, 0, 0.2)",
|
|
16
|
+
borderLeftWidth: 3,
|
|
17
|
+
paddingLeft: 12
|
|
18
|
+
},
|
|
19
|
+
codeBlock: {
|
|
20
|
+
backgroundColor: "rgba(0, 0, 0, 0.08)",
|
|
21
|
+
borderRadius: 6,
|
|
22
|
+
fontSize: 14,
|
|
23
|
+
padding: 12
|
|
24
|
+
},
|
|
25
|
+
divider: {
|
|
26
|
+
color: "rgba(0, 0, 0, 0.13)",
|
|
27
|
+
height: 1
|
|
28
|
+
},
|
|
29
|
+
gap: 12,
|
|
30
|
+
headings: {
|
|
31
|
+
h1: {
|
|
32
|
+
fontSize: 32,
|
|
33
|
+
fontWeight: "700"
|
|
34
|
+
},
|
|
35
|
+
h2: {
|
|
36
|
+
fontSize: 26,
|
|
37
|
+
fontWeight: "700"
|
|
38
|
+
},
|
|
39
|
+
h3: {
|
|
40
|
+
fontSize: 22,
|
|
41
|
+
fontWeight: "700"
|
|
42
|
+
},
|
|
43
|
+
h4: {
|
|
44
|
+
fontSize: 18,
|
|
45
|
+
fontWeight: "700"
|
|
46
|
+
},
|
|
47
|
+
h5: {
|
|
48
|
+
fontSize: 16,
|
|
49
|
+
fontWeight: "700"
|
|
50
|
+
},
|
|
51
|
+
h6: {
|
|
52
|
+
fontSize: 14,
|
|
53
|
+
fontWeight: "700"
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
image: {
|
|
57
|
+
backgroundColor: "rgba(0, 0, 0, 0.08)"
|
|
58
|
+
},
|
|
59
|
+
inlineCode: {
|
|
60
|
+
backgroundColor: "rgba(0, 0, 0, 0.08)"
|
|
61
|
+
},
|
|
62
|
+
link: {
|
|
63
|
+
color: "#007AFF"
|
|
64
|
+
},
|
|
65
|
+
listMarker: {
|
|
66
|
+
width: 24
|
|
67
|
+
},
|
|
68
|
+
spoiler: {
|
|
69
|
+
backgroundColor: "#3F3F46",
|
|
70
|
+
borderRadius: 4
|
|
71
|
+
},
|
|
72
|
+
table: {
|
|
73
|
+
maxColumnWidth: 320,
|
|
74
|
+
minColumnWidth: 44
|
|
75
|
+
},
|
|
76
|
+
tableCell: {
|
|
77
|
+
padding: 8
|
|
78
|
+
},
|
|
79
|
+
tableRow: {
|
|
80
|
+
borderBottomColor: "rgba(0, 0, 0, 0.12)",
|
|
81
|
+
borderBottomWidth: 1
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Deep-merges the given overrides over {@link defaultStyles}: element
|
|
87
|
+
* sections merge key-by-key, heading levels merge individually, and
|
|
88
|
+
* anything not overridden keeps its default. Hoist the result to module
|
|
89
|
+
* scope (or memoize) like any other `styles` value.
|
|
90
|
+
*/
|
|
91
|
+
export function mergeStyles(overrides = {}) {
|
|
92
|
+
const merged = {
|
|
93
|
+
...defaultStyles
|
|
94
|
+
};
|
|
95
|
+
for (const [key, value] of Object.entries(overrides)) {
|
|
96
|
+
if (value == null) {
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
const base = defaultStyles[key];
|
|
100
|
+
if (key === "headings") {
|
|
101
|
+
const levels = {
|
|
102
|
+
...defaultStyles.headings
|
|
103
|
+
};
|
|
104
|
+
for (const [level, style] of Object.entries(value)) {
|
|
105
|
+
levels[level] = {
|
|
106
|
+
...levels[level],
|
|
107
|
+
...style
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
merged.headings = levels;
|
|
111
|
+
} else if (base != null && typeof base === "object" && typeof value === "object") {
|
|
112
|
+
merged[key] = {
|
|
113
|
+
...base,
|
|
114
|
+
...value
|
|
115
|
+
};
|
|
116
|
+
} else {
|
|
117
|
+
merged[key] = value;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return merged;
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=defaultStyles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["defaultStyles","blockQuote","borderLeftColor","borderLeftWidth","paddingLeft","codeBlock","backgroundColor","borderRadius","fontSize","padding","divider","color","height","gap","headings","h1","fontWeight","h2","h3","h4","h5","h6","image","inlineCode","link","listMarker","width","spoiler","table","maxColumnWidth","minColumnWidth","tableCell","tableRow","borderBottomColor","borderBottomWidth","mergeStyles","overrides","merged","key","value","Object","entries","base","levels","level","style"],"sourceRoot":"../../src","sources":["defaultStyles.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/** biome-ignore-all lint/performance/noBarrelFile: go away */
|
|
4
|
+
|
|
5
|
+
export { defaultStyles, mergeStyles } from "./defaultStyles.js";
|
|
6
|
+
export { JetMarkdownEditor } from "./JetMarkdownEditor";
|
|
7
|
+
export { JetMarkdownView } from "./JetMarkdownView";
|
|
8
|
+
export { useJetMarkdownEditor } from "./useJetMarkdownEditor.js";
|
|
9
|
+
//# sourceMappingURL=index.js.map
|