@openeditor/react-native-prose-editor 0.0.2

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 (91) hide show
  1. package/LICENSE +160 -0
  2. package/README.md +180 -0
  3. package/android/build.gradle +69 -0
  4. package/android/consumer-rules.pro +18 -0
  5. package/android/src/androidTest/AndroidManifest.xml +8 -0
  6. package/android/src/androidTest/java/com/apollohg/editor/MeasureHeightInstrumentedTest.kt +53 -0
  7. package/android/src/androidTest/java/com/apollohg/editor/NativeDeviceCollaborationInitialSyncTest.kt +241 -0
  8. package/android/src/androidTest/java/com/apollohg/editor/NativeDeviceImeRegressionTest.kt +338 -0
  9. package/android/src/androidTest/java/com/apollohg/editor/NativeDeviceOutsideTapTest.kt +789 -0
  10. package/android/src/androidTest/java/com/apollohg/editor/NativeDevicePerformanceTest.kt +350 -0
  11. package/android/src/androidTest/java/com/apollohg/editor/NativeEditorOutsideTapActivity.kt +5 -0
  12. package/android/src/main/assets/editor-icons/MaterialIcons.json +2236 -0
  13. package/android/src/main/assets/editor-icons/MaterialIcons.ttf +0 -0
  14. package/android/src/main/java/com/apollohg/editor/CaretGeometry.kt +50 -0
  15. package/android/src/main/java/com/apollohg/editor/EditorAddons.kt +135 -0
  16. package/android/src/main/java/com/apollohg/editor/EditorEditText.kt +4527 -0
  17. package/android/src/main/java/com/apollohg/editor/EditorHeightBehavior.kt +14 -0
  18. package/android/src/main/java/com/apollohg/editor/EditorInputConnection.kt +999 -0
  19. package/android/src/main/java/com/apollohg/editor/EditorTheme.kt +474 -0
  20. package/android/src/main/java/com/apollohg/editor/ImageResizeOverlayView.kt +199 -0
  21. package/android/src/main/java/com/apollohg/editor/NativeEditorExpoView.kt +3137 -0
  22. package/android/src/main/java/com/apollohg/editor/NativeEditorModule.kt +561 -0
  23. package/android/src/main/java/com/apollohg/editor/NativeProseViewerExpoView.kt +315 -0
  24. package/android/src/main/java/com/apollohg/editor/NativeToolbar.kt +1413 -0
  25. package/android/src/main/java/com/apollohg/editor/PositionBridge.kt +133 -0
  26. package/android/src/main/java/com/apollohg/editor/RemoteSelectionOverlayView.kt +315 -0
  27. package/android/src/main/java/com/apollohg/editor/RenderBridge.kt +2172 -0
  28. package/android/src/main/java/com/apollohg/editor/RichTextEditorView.kt +399 -0
  29. package/android/src/sharedTest/java/com/apollohg/editor/NativePerformanceSupport.kt +482 -0
  30. package/android/src/test/java/com/apollohg/editor/CaretGeometryTest.kt +137 -0
  31. package/android/src/test/java/com/apollohg/editor/EditorEditTextHardwareKeyTest.kt +321 -0
  32. package/android/src/test/java/com/apollohg/editor/EditorInputConnectionTest.kt +4202 -0
  33. package/android/src/test/java/com/apollohg/editor/NativeEditorExpoViewTest.kt +2581 -0
  34. package/android/src/test/java/com/apollohg/editor/NativeEditorModuleTest.kt +27 -0
  35. package/android/src/test/java/com/apollohg/editor/NativePerformanceTest.kt +197 -0
  36. package/android/src/test/java/com/apollohg/editor/NativeProseViewerExpoViewTest.kt +84 -0
  37. package/android/src/test/java/com/apollohg/editor/NativeToolbarTest.kt +544 -0
  38. package/android/src/test/java/com/apollohg/editor/PositionBridgeTest.kt +461 -0
  39. package/android/src/test/java/com/apollohg/editor/RenderBridgeTest.kt +2054 -0
  40. package/android/src/test/java/com/apollohg/editor/RichTextEditorViewTest.kt +1367 -0
  41. package/app.plugin.js +62 -0
  42. package/dist/EditorTheme.d.ts +113 -0
  43. package/dist/EditorTheme.js +29 -0
  44. package/dist/EditorToolbar.d.ts +191 -0
  45. package/dist/EditorToolbar.js +1095 -0
  46. package/dist/NativeEditorBridge.d.ts +325 -0
  47. package/dist/NativeEditorBridge.js +933 -0
  48. package/dist/NativeProseViewer.d.ts +53 -0
  49. package/dist/NativeProseViewer.js +480 -0
  50. package/dist/NativeRichTextEditor.d.ts +183 -0
  51. package/dist/NativeRichTextEditor.js +2574 -0
  52. package/dist/YjsCollaboration.d.ts +90 -0
  53. package/dist/YjsCollaboration.js +743 -0
  54. package/dist/addons.d.ts +100 -0
  55. package/dist/addons.js +82 -0
  56. package/dist/heightCache.d.ts +6 -0
  57. package/dist/heightCache.js +45 -0
  58. package/dist/index.d.ts +10 -0
  59. package/dist/index.js +30 -0
  60. package/dist/schemas.d.ts +37 -0
  61. package/dist/schemas.js +263 -0
  62. package/dist/useNativeEditor.d.ts +42 -0
  63. package/dist/useNativeEditor.js +124 -0
  64. package/expo-module.config.json +9 -0
  65. package/ios/EditorAddons.swift +327 -0
  66. package/ios/EditorCore.xcframework/Info.plist +44 -0
  67. package/ios/EditorCore.xcframework/ios-arm64/libeditor_core.a +0 -0
  68. package/ios/EditorCore.xcframework/ios-arm64_x86_64-simulator/libeditor_core.a +0 -0
  69. package/ios/EditorLayoutManager.swift +774 -0
  70. package/ios/EditorTheme.swift +515 -0
  71. package/ios/Generated_editor_core.swift +1513 -0
  72. package/ios/NativeEditorExpoView.swift +3593 -0
  73. package/ios/NativeEditorModule.swift +624 -0
  74. package/ios/NativeProseViewerExpoView.swift +276 -0
  75. package/ios/PositionBridge.swift +558 -0
  76. package/ios/ReactNativeProseEditor.podspec +49 -0
  77. package/ios/RenderBridge.swift +1708 -0
  78. package/ios/RichTextEditorView.swift +6150 -0
  79. package/ios/Tests/NativePerformanceTests.swift +687 -0
  80. package/ios/Tests/PositionBridgeTests.swift +706 -0
  81. package/ios/Tests/RenderBridgeTests.swift +2236 -0
  82. package/ios/Tests/RichTextEditorViewTests.swift +6548 -0
  83. package/ios/editor_coreFFI/editor_coreFFI.h +1289 -0
  84. package/ios/editor_coreFFI/module.modulemap +7 -0
  85. package/ios/editor_coreFFI.h +904 -0
  86. package/ios/editor_coreFFI.modulemap +7 -0
  87. package/package.json +74 -0
  88. package/rust/android/arm64-v8a/libeditor_core.so +0 -0
  89. package/rust/android/armeabi-v7a/libeditor_core.so +0 -0
  90. package/rust/android/x86_64/libeditor_core.so +0 -0
  91. package/rust/bindings/kotlin/uniffi/editor_core/editor_core.kt +2563 -0
package/app.plugin.js ADDED
@@ -0,0 +1,62 @@
1
+ const path = require('path');
2
+ const { createRequire } = require('module');
3
+
4
+ const pkg = require('./package.json');
5
+
6
+ const PACKAGING_EXCLUDES_PROPERTY = 'android.packagingOptions.excludes';
7
+ const LEGACY_JNA_ABI_EXCLUDES = [
8
+ '**/armeabi/libjnidispatch.so',
9
+ '**/mips/libjnidispatch.so',
10
+ '**/mips64/libjnidispatch.so',
11
+ ];
12
+
13
+ function requireExpoConfigPlugins() {
14
+ try {
15
+ return require('expo/config-plugins');
16
+ } catch (error) {
17
+ if (error.code !== 'MODULE_NOT_FOUND') {
18
+ throw error;
19
+ }
20
+
21
+ const appRequire = createRequire(path.join(process.cwd(), 'package.json'));
22
+ return appRequire('expo/config-plugins');
23
+ }
24
+ }
25
+
26
+ function mergeCommaList(value, additions) {
27
+ const values = (value || '')
28
+ .split(',')
29
+ .map((item) => item.trim())
30
+ .filter(Boolean);
31
+
32
+ return Array.from(new Set([...values, ...additions])).join(',');
33
+ }
34
+
35
+ function withOpenEditorReactNativeProseEditor(config) {
36
+ const { withGradleProperties } = requireExpoConfigPlugins();
37
+
38
+ return withGradleProperties(config, (config) => {
39
+ const existing = config.modResults.find(
40
+ (property) => property.type === 'property' && property.key === PACKAGING_EXCLUDES_PROPERTY
41
+ );
42
+ const value = mergeCommaList(existing && existing.value, LEGACY_JNA_ABI_EXCLUDES);
43
+
44
+ if (existing) {
45
+ existing.value = value;
46
+ } else {
47
+ config.modResults.push({
48
+ type: 'property',
49
+ key: PACKAGING_EXCLUDES_PROPERTY,
50
+ value,
51
+ });
52
+ }
53
+
54
+ return config;
55
+ });
56
+ }
57
+
58
+ module.exports = requireExpoConfigPlugins().createRunOncePlugin(
59
+ withOpenEditorReactNativeProseEditor,
60
+ pkg.name,
61
+ pkg.version
62
+ );
@@ -0,0 +1,113 @@
1
+ export type EditorFontWeight = 'normal' | 'bold' | '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900';
2
+ export type EditorFontStyle = 'normal' | 'italic';
3
+ export interface EditorMentionTheme {
4
+ textColor?: string;
5
+ backgroundColor?: string;
6
+ borderColor?: string;
7
+ borderWidth?: number;
8
+ borderRadius?: number;
9
+ fontWeight?: EditorFontWeight;
10
+ popoverBackgroundColor?: string;
11
+ popoverBorderColor?: string;
12
+ popoverBorderWidth?: number;
13
+ popoverBorderRadius?: number;
14
+ popoverShadowColor?: string;
15
+ optionTextColor?: string;
16
+ optionSecondaryTextColor?: string;
17
+ optionHighlightedBackgroundColor?: string;
18
+ optionHighlightedTextColor?: string;
19
+ }
20
+ export interface EditorTextStyle {
21
+ fontFamily?: string;
22
+ fontSize?: number;
23
+ fontWeight?: EditorFontWeight;
24
+ fontStyle?: EditorFontStyle;
25
+ color?: string;
26
+ lineHeight?: number;
27
+ spacingAfter?: number;
28
+ }
29
+ export interface EditorLinkTheme {
30
+ fontFamily?: string;
31
+ fontSize?: number;
32
+ fontWeight?: EditorFontWeight;
33
+ fontStyle?: EditorFontStyle;
34
+ color?: string;
35
+ backgroundColor?: string;
36
+ underline?: boolean;
37
+ }
38
+ export interface EditorHeadingTheme {
39
+ h1?: EditorTextStyle;
40
+ h2?: EditorTextStyle;
41
+ h3?: EditorTextStyle;
42
+ h4?: EditorTextStyle;
43
+ h5?: EditorTextStyle;
44
+ h6?: EditorTextStyle;
45
+ }
46
+ export interface EditorListTheme {
47
+ indent?: number;
48
+ baseIndentMultiplier?: number;
49
+ itemSpacing?: number;
50
+ markerColor?: string;
51
+ markerScale?: number;
52
+ }
53
+ export interface EditorHorizontalRuleTheme {
54
+ color?: string;
55
+ thickness?: number;
56
+ verticalMargin?: number;
57
+ }
58
+ export interface EditorBlockquoteTheme {
59
+ text?: EditorTextStyle;
60
+ indent?: number;
61
+ borderColor?: string;
62
+ borderWidth?: number;
63
+ markerGap?: number;
64
+ }
65
+ export interface EditorCodeBlockTheme {
66
+ text?: EditorTextStyle;
67
+ backgroundColor?: string;
68
+ borderRadius?: number;
69
+ paddingHorizontal?: number;
70
+ paddingVertical?: number;
71
+ }
72
+ export type EditorToolbarAppearance = 'custom' | 'native';
73
+ export interface EditorToolbarTheme {
74
+ appearance?: EditorToolbarAppearance;
75
+ height?: number;
76
+ backgroundColor?: string;
77
+ borderColor?: string;
78
+ borderWidth?: number;
79
+ borderRadius?: number;
80
+ marginTop?: number;
81
+ showTopBorder?: boolean;
82
+ keyboardOffset?: number;
83
+ horizontalInset?: number;
84
+ separatorColor?: string;
85
+ buttonColor?: string;
86
+ buttonActiveColor?: string;
87
+ buttonDisabledColor?: string;
88
+ buttonActiveBackgroundColor?: string;
89
+ buttonBorderRadius?: number;
90
+ }
91
+ export interface EditorContentInsets {
92
+ top?: number;
93
+ right?: number;
94
+ bottom?: number;
95
+ left?: number;
96
+ }
97
+ export interface EditorTheme {
98
+ text?: EditorTextStyle;
99
+ paragraph?: EditorTextStyle;
100
+ blockquote?: EditorBlockquoteTheme;
101
+ codeBlock?: EditorCodeBlockTheme;
102
+ headings?: EditorHeadingTheme;
103
+ list?: EditorListTheme;
104
+ horizontalRule?: EditorHorizontalRuleTheme;
105
+ mentions?: EditorMentionTheme;
106
+ links?: EditorLinkTheme;
107
+ toolbar?: EditorToolbarTheme;
108
+ placeholderColor?: string;
109
+ backgroundColor?: string;
110
+ borderRadius?: number;
111
+ contentInsets?: EditorContentInsets;
112
+ }
113
+ export declare function serializeEditorTheme(theme?: EditorTheme): string | undefined;
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.serializeEditorTheme = serializeEditorTheme;
4
+ function stripUndefined(value) {
5
+ if (Array.isArray(value)) {
6
+ return value.map((item) => stripUndefined(item)).filter((item) => item !== undefined);
7
+ }
8
+ if (value != null && typeof value === 'object') {
9
+ const entries = Object.entries(value)
10
+ .map(([key, entryValue]) => [key, stripUndefined(entryValue)])
11
+ .filter(([, entryValue]) => entryValue !== undefined);
12
+ if (entries.length === 0) {
13
+ return undefined;
14
+ }
15
+ return Object.fromEntries(entries);
16
+ }
17
+ if (typeof value === 'number' && !Number.isFinite(value)) {
18
+ return undefined;
19
+ }
20
+ return value;
21
+ }
22
+ function serializeEditorTheme(theme) {
23
+ if (!theme)
24
+ return undefined;
25
+ const cleaned = stripUndefined(theme);
26
+ if (!cleaned || typeof cleaned !== 'object')
27
+ return undefined;
28
+ return JSON.stringify(cleaned);
29
+ }
@@ -0,0 +1,191 @@
1
+ import React from 'react';
2
+ import type { ActiveState, HistoryState } from './NativeEditorBridge';
3
+ import type { EditorMentionTheme, EditorToolbarTheme } from './EditorTheme';
4
+ import type { MentionSuggestion } from './addons';
5
+ export type EditorToolbarListType = 'bulletList' | 'orderedList';
6
+ export type EditorToolbarHeadingLevel = 1 | 2 | 3 | 4 | 5 | 6;
7
+ export type EditorToolbarCommand = 'indentList' | 'outdentList' | 'undo' | 'redo';
8
+ export type EditorToolbarGroupPresentation = 'expand' | 'menu';
9
+ export type EditorToolbarItemPlacement = 'start' | 'scroll' | 'end';
10
+ export type EditorToolbarDefaultIconId = 'bold' | 'italic' | 'underline' | 'strike' | 'link' | 'image' | 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'blockquote' | 'bulletList' | 'orderedList' | 'indentList' | 'outdentList' | 'lineBreak' | 'horizontalRule' | 'undo' | 'redo';
11
+ export interface EditorToolbarSFSymbolIcon {
12
+ type: 'sfSymbol';
13
+ name: string;
14
+ }
15
+ export interface EditorToolbarMaterialIcon {
16
+ type: 'material';
17
+ name: string;
18
+ }
19
+ export type EditorToolbarIcon = {
20
+ type: 'default';
21
+ id: EditorToolbarDefaultIconId;
22
+ } | {
23
+ type: 'glyph';
24
+ text: string;
25
+ } | {
26
+ type: 'platform';
27
+ ios?: EditorToolbarSFSymbolIcon;
28
+ android?: EditorToolbarMaterialIcon;
29
+ fallbackText?: string;
30
+ };
31
+ export type EditorToolbarLeafItem = {
32
+ type: 'mark';
33
+ mark: string;
34
+ label: string;
35
+ icon: EditorToolbarIcon;
36
+ key?: string;
37
+ placement?: EditorToolbarItemPlacement;
38
+ } | {
39
+ type: 'link';
40
+ label: string;
41
+ icon: EditorToolbarIcon;
42
+ key?: string;
43
+ placement?: EditorToolbarItemPlacement;
44
+ } | {
45
+ type: 'image';
46
+ label: string;
47
+ icon: EditorToolbarIcon;
48
+ key?: string;
49
+ placement?: EditorToolbarItemPlacement;
50
+ } | {
51
+ type: 'heading';
52
+ level: EditorToolbarHeadingLevel;
53
+ label: string;
54
+ icon: EditorToolbarIcon;
55
+ key?: string;
56
+ placement?: EditorToolbarItemPlacement;
57
+ } | {
58
+ type: 'blockquote';
59
+ label: string;
60
+ icon: EditorToolbarIcon;
61
+ key?: string;
62
+ placement?: EditorToolbarItemPlacement;
63
+ } | {
64
+ type: 'list';
65
+ listType: EditorToolbarListType;
66
+ label: string;
67
+ icon: EditorToolbarIcon;
68
+ key?: string;
69
+ placement?: EditorToolbarItemPlacement;
70
+ } | {
71
+ type: 'command';
72
+ command: EditorToolbarCommand;
73
+ label: string;
74
+ icon: EditorToolbarIcon;
75
+ key?: string;
76
+ placement?: EditorToolbarItemPlacement;
77
+ } | {
78
+ type: 'node';
79
+ nodeType: string;
80
+ label: string;
81
+ icon: EditorToolbarIcon;
82
+ key?: string;
83
+ placement?: EditorToolbarItemPlacement;
84
+ } | {
85
+ type: 'action';
86
+ key: string;
87
+ label: string;
88
+ icon: EditorToolbarIcon;
89
+ isActive?: boolean;
90
+ isDisabled?: boolean;
91
+ placement?: EditorToolbarItemPlacement;
92
+ };
93
+ export type EditorToolbarGroupChildItem = EditorToolbarLeafItem;
94
+ export interface EditorToolbarGroupItem {
95
+ type: 'group';
96
+ key: string;
97
+ label: string;
98
+ icon: EditorToolbarIcon;
99
+ presentation?: EditorToolbarGroupPresentation;
100
+ placement?: EditorToolbarItemPlacement;
101
+ items: readonly EditorToolbarGroupChildItem[];
102
+ }
103
+ export type EditorToolbarItem = EditorToolbarLeafItem | EditorToolbarGroupItem | {
104
+ type: 'separator';
105
+ key?: string;
106
+ placement?: EditorToolbarItemPlacement;
107
+ };
108
+ export interface EditorToolbarFrame {
109
+ x: number;
110
+ y: number;
111
+ width: number;
112
+ height: number;
113
+ }
114
+ interface EditorToolbarMentionState {
115
+ ownerId: number;
116
+ trigger: string;
117
+ suggestions: readonly MentionSuggestion[];
118
+ theme?: EditorMentionTheme;
119
+ suggestionThemes?: Readonly<Record<string, EditorMentionTheme | undefined>>;
120
+ onSelectSuggestion: (suggestion: MentionSuggestion) => void;
121
+ }
122
+ export declare function isEditorToolbarFocusPreservationActive(): boolean;
123
+ export declare function setActiveEditorToolbarFrameOwnerForEditor(ownerId: number, isActive: boolean): void;
124
+ export declare function useEditorToolbarFrames(ownerId: number): readonly EditorToolbarFrame[];
125
+ export declare function setEditorToolbarMentionState(ownerId: number, state: Omit<EditorToolbarMentionState, 'ownerId'> | null): void;
126
+ export declare function _setEditorToolbarFrameForTests(id: number, frame: EditorToolbarFrame | null, ownerId?: number | null): void;
127
+ export declare function _resetEditorToolbarFrameRegistryForTests(): void;
128
+ export declare function _beginEditorToolbarInteractionForTests(): void;
129
+ export declare function _endEditorToolbarInteractionForTests(): void;
130
+ export declare const DEFAULT_EDITOR_TOOLBAR_ITEMS: readonly EditorToolbarItem[];
131
+ export interface EditorToolbarProps {
132
+ /** Currently active marks and nodes from the Rust engine. */
133
+ activeState: ActiveState;
134
+ /** Current undo/redo availability. */
135
+ historyState: HistoryState;
136
+ /** Toggle bold mark. */
137
+ onToggleBold: () => void;
138
+ /** Toggle italic mark. */
139
+ onToggleItalic: () => void;
140
+ /** Toggle underline mark. */
141
+ onToggleUnderline: () => void;
142
+ /** Toggle strikethrough mark. */
143
+ onToggleStrike: () => void;
144
+ /** Toggle bullet list. */
145
+ onToggleBulletList?: () => void;
146
+ /** Toggle blockquote wrapping. */
147
+ onToggleBlockquote?: () => void;
148
+ /** Toggle ordered list. */
149
+ onToggleOrderedList?: () => void;
150
+ /** Indent the current list item. */
151
+ onIndentList?: () => void;
152
+ /** Outdent the current list item. */
153
+ onOutdentList?: () => void;
154
+ /** Insert horizontal rule. */
155
+ onInsertHorizontalRule?: () => void;
156
+ /** Insert inline hard break. */
157
+ onInsertLineBreak?: () => void;
158
+ /** Undo the last operation. */
159
+ onUndo: () => void;
160
+ /** Redo the last undone operation. */
161
+ onRedo: () => void;
162
+ /** Generic mark toggle handler used by configurable mark buttons. */
163
+ onToggleMark?: (mark: string) => void;
164
+ /** Generic list toggle handler used by configurable list buttons. */
165
+ onToggleListType?: (listType: EditorToolbarListType) => void;
166
+ /** Generic heading toggle handler used by configurable heading buttons. */
167
+ onToggleHeading?: (level: EditorToolbarHeadingLevel) => void;
168
+ /** Generic node insertion handler used by configurable node buttons. */
169
+ onInsertNodeType?: (nodeType: string) => void;
170
+ /** Generic command handler used by configurable command buttons. */
171
+ onRunCommand?: (command: EditorToolbarCommand) => void;
172
+ /** Generic action handler for arbitrary JS-defined toolbar buttons. */
173
+ onToolbarAction?: (key: string) => void;
174
+ /** Link button handler used by first-class link toolbar items. */
175
+ onRequestLink?: () => void;
176
+ /** Image button handler used by first-class image toolbar items. */
177
+ onRequestImage?: () => void;
178
+ /** Displayed toolbar items, in order. Defaults to the built-in toolbar. */
179
+ toolbarItems?: readonly EditorToolbarItem[];
180
+ /** Optional theme overrides for toolbar chrome and button colors. */
181
+ theme?: EditorToolbarTheme;
182
+ /** Whether to render the built-in top separator line. */
183
+ showTopBorder?: boolean;
184
+ /**
185
+ * Keep NativeRichTextEditor focused when this toolbar is rendered outside
186
+ * the editor wrapper. Defaults to true.
187
+ */
188
+ preserveEditorFocus?: boolean;
189
+ }
190
+ export declare function EditorToolbar({ activeState, historyState, onToggleBold, onToggleItalic, onToggleUnderline, onToggleStrike, onToggleBulletList, onToggleHeading, onToggleBlockquote, onToggleOrderedList, onIndentList, onOutdentList, onInsertHorizontalRule, onInsertLineBreak, onUndo, onRedo, onToggleMark, onToggleListType, onInsertNodeType, onRunCommand, onToolbarAction, onRequestLink, onRequestImage, toolbarItems, theme, showTopBorder, preserveEditorFocus, }: EditorToolbarProps): React.JSX.Element;
191
+ export {};