react-native-richify 1.0.5 → 1.0.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/README.md +328 -134
- package/lib/commonjs/components/RichTextInput.js +0 -4
- package/lib/commonjs/components/RichTextInput.js.map +1 -1
- package/lib/commonjs/components/Toolbar.js +1 -0
- package/lib/commonjs/components/Toolbar.js.map +1 -1
- package/lib/commonjs/components/ToolbarButton.js +37 -9
- package/lib/commonjs/components/ToolbarButton.js.map +1 -1
- package/lib/commonjs/constants/defaultStyles.js +59 -34
- package/lib/commonjs/constants/defaultStyles.js.map +1 -1
- package/lib/commonjs/hooks/useFormatting.js +9 -5
- package/lib/commonjs/hooks/useFormatting.js.map +1 -1
- package/lib/commonjs/utils/formatter.js.map +1 -1
- package/lib/module/components/RichTextInput.js +0 -4
- package/lib/module/components/RichTextInput.js.map +1 -1
- package/lib/module/components/Toolbar.js +1 -0
- package/lib/module/components/Toolbar.js.map +1 -1
- package/lib/module/components/ToolbarButton.js +38 -10
- package/lib/module/components/ToolbarButton.js.map +1 -1
- package/lib/module/constants/defaultStyles.js +58 -34
- package/lib/module/constants/defaultStyles.js.map +1 -1
- package/lib/module/hooks/useFormatting.js +9 -5
- package/lib/module/hooks/useFormatting.js.map +1 -1
- package/lib/module/utils/formatter.js.map +1 -1
- package/lib/typescript/src/components/RichTextInput.d.ts.map +1 -1
- package/lib/typescript/src/components/Toolbar.d.ts.map +1 -1
- package/lib/typescript/src/components/ToolbarButton.d.ts.map +1 -1
- package/lib/typescript/src/constants/defaultStyles.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useFormatting.d.ts.map +1 -1
- package/lib/typescript/src/types/index.d.ts +11 -5
- package/lib/typescript/src/types/index.d.ts.map +1 -1
- package/lib/typescript/src/utils/formatter.d.ts +1 -1
- package/lib/typescript/src/utils/formatter.d.ts.map +1 -1
- package/package.json +10 -4
- package/src/components/RichTextInput.tsx +0 -4
- package/src/components/Toolbar.tsx +1 -0
- package/src/components/ToolbarButton.tsx +68 -16
- package/src/constants/defaultStyles.ts +47 -19
- package/src/hooks/useFormatting.ts +30 -5
- package/src/types/index.d.ts +13 -7
- package/src/types/index.ts +11 -5
- package/src/utils/formatter.ts +1 -1
package/README.md
CHANGED
|
@@ -1,32 +1,46 @@
|
|
|
1
1
|
# react-native-richify
|
|
2
2
|
|
|
3
|
-
A
|
|
3
|
+
A React Native rich text input with a normal `TextInput` editing surface, a horizontally scrollable toolbar, and live Markdown or HTML output below the editor.
|
|
4
4
|
|
|
5
5
|
[](https://www.npmjs.com/package/react-native-richify)
|
|
6
6
|
[](https://github.com/soumya-99/react-native-richify/blob/main/LICENSE)
|
|
7
7
|
|
|
8
8
|
## Features
|
|
9
9
|
|
|
10
|
-
-
|
|
11
|
-
-
|
|
12
|
-
-
|
|
13
|
-
-
|
|
14
|
-
-
|
|
15
|
-
-
|
|
16
|
-
-
|
|
17
|
-
-
|
|
18
|
-
-
|
|
19
|
-
-
|
|
10
|
+
- Native editing with no WebView
|
|
11
|
+
- Built-in toolbar uses Lucide React Native icons by default
|
|
12
|
+
- Inline formatting: bold, italic, underline, strikethrough, code
|
|
13
|
+
- Line formatting: H1, H2, H3, bullet list, ordered list, left, center, right
|
|
14
|
+
- Link formatting on selected text
|
|
15
|
+
- Image insertion through the built-in toolbar
|
|
16
|
+
- Output panel can show Markdown or HTML
|
|
17
|
+
- Output panel can show raw serialized text or rendered preview
|
|
18
|
+
- Auto-growing editor with configurable input and preview height limits
|
|
19
|
+
- Custom toolbar items accept text, emoji, or React elements
|
|
20
|
+
- Headless `useRichText` hook for fully custom editors
|
|
21
|
+
- Typed JSON import and export of editor content
|
|
20
22
|
|
|
21
23
|
## Installation
|
|
22
24
|
|
|
25
|
+
Install the package and `react-native-svg`:
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
npm install react-native-richify react-native-svg
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
or:
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
yarn add react-native-richify react-native-svg
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
`react-native-svg` is required because the built-in toolbar uses Lucide icons. If you want to use Lucide icons in your own custom toolbar items, install that in your app too:
|
|
38
|
+
|
|
23
39
|
```bash
|
|
24
|
-
npm install react-native
|
|
25
|
-
# or
|
|
26
|
-
yarn add react-native-richify
|
|
40
|
+
npm install lucide-react-native
|
|
27
41
|
```
|
|
28
42
|
|
|
29
|
-
|
|
43
|
+
The package works in Expo and bare React Native apps. In Expo, `react-native-svg` is usually already available.
|
|
30
44
|
|
|
31
45
|
## Quick Start
|
|
32
46
|
|
|
@@ -39,165 +53,341 @@ export default function App() {
|
|
|
39
53
|
return (
|
|
40
54
|
<View style={{ flex: 1, padding: 16 }}>
|
|
41
55
|
<RichTextInput
|
|
42
|
-
placeholder="
|
|
56
|
+
placeholder="Write something..."
|
|
43
57
|
showToolbar
|
|
58
|
+
showOutputPreview
|
|
59
|
+
defaultOutputFormat="markdown"
|
|
60
|
+
defaultOutputPreviewMode="rendered"
|
|
44
61
|
onChangeText={(text) => console.log('Plain text:', text)}
|
|
45
|
-
|
|
62
|
+
onChangeOutput={(output, format) => {
|
|
63
|
+
console.log(format, output);
|
|
64
|
+
}}
|
|
46
65
|
/>
|
|
47
66
|
</View>
|
|
48
67
|
);
|
|
49
68
|
}
|
|
50
69
|
```
|
|
51
70
|
|
|
52
|
-
|
|
71
|
+
This gives you:
|
|
72
|
+
|
|
73
|
+
- a visible auto-growing `TextInput`
|
|
74
|
+
- the default Lucide-based toolbar
|
|
75
|
+
- live Markdown output by default
|
|
76
|
+
- a preview panel that opens below the input when content exists
|
|
77
|
+
|
|
78
|
+
## How The Editor Works
|
|
79
|
+
|
|
80
|
+
The editing surface is always a normal `TextInput`. The library does not render styled text on top of the input.
|
|
81
|
+
|
|
82
|
+
Internally, content is stored as `StyledSegment[]`. Each segment contains plain text and formatting metadata. That lets the library:
|
|
83
|
+
|
|
84
|
+
- keep typing behavior predictable
|
|
85
|
+
- apply formatting to selected ranges or future input
|
|
86
|
+
- serialize the same content to Markdown or HTML
|
|
87
|
+
- export and re-import structured JSON safely
|
|
88
|
+
|
|
89
|
+
Formatting rules:
|
|
90
|
+
|
|
91
|
+
- If nothing is selected, pressing a format button affects the next characters you type.
|
|
92
|
+
- If text is selected, pressing a format button applies or removes that format immediately.
|
|
93
|
+
- Heading, list, and alignment controls work at line level.
|
|
94
|
+
- Every formatting button is toggleable except `MD`, `HTML`, `Raw`, and `View`.
|
|
53
95
|
|
|
54
|
-
##
|
|
96
|
+
## Built-in Toolbar
|
|
55
97
|
|
|
56
|
-
|
|
98
|
+
The default toolbar is horizontally scrollable and ships with these controls:
|
|
57
99
|
|
|
58
|
-
|
|
100
|
+
| Control | Behavior |
|
|
101
|
+
| --- | --- |
|
|
102
|
+
| Bold, Italic, Underline, Strikethrough, Code | Toggle inline formatting |
|
|
103
|
+
| Heading 1, Heading 2, Heading 3 | Toggle heading level on the current line |
|
|
104
|
+
| Bullet List, Ordered List | Toggle list type on the current line |
|
|
105
|
+
| Link | Apply or clear a hyperlink on the selection |
|
|
106
|
+
| Image | Insert an image through your app's image-picking flow |
|
|
107
|
+
| Align Left, Align Center, Align Right | Toggle paragraph alignment |
|
|
108
|
+
| MD, HTML | Switch serialization format |
|
|
109
|
+
| Raw, View | Switch between literal output and rendered preview |
|
|
59
110
|
|
|
60
|
-
|
|
61
|
-
|------|------|---------|-------------|
|
|
62
|
-
| `initialSegments` | `StyledSegment[]` | `[]` | Initial content |
|
|
63
|
-
| `onChangeSegments` | `(segments: StyledSegment[]) => void` | — | Called when content changes |
|
|
64
|
-
| `onChangeText` | `(text: string) => void` | — | Called with plain text |
|
|
65
|
-
| `placeholder` | `string` | `"Start typing..."` | Placeholder text |
|
|
66
|
-
| `editable` | `boolean` | `true` | Whether input is editable |
|
|
67
|
-
| `maxLength` | `number` | — | Max character length |
|
|
68
|
-
| `showToolbar` | `boolean` | `true` | Show formatting toolbar |
|
|
69
|
-
| `toolbarPosition` | `'top' \| 'bottom'` | `'top'` | Toolbar position |
|
|
70
|
-
| `toolbarItems` | `ToolbarItem[]` | Default items | Custom toolbar items |
|
|
71
|
-
| `theme` | `RichTextTheme` | Default theme | Theme overrides |
|
|
72
|
-
| `multiline` | `boolean` | `true` | Enable multiline |
|
|
73
|
-
| `minHeight` | `number` | `120` | Minimum editor height |
|
|
74
|
-
| `maxHeight` | `number` | — | Maximum editor height |
|
|
75
|
-
| `autoFocus` | `boolean` | `false` | Auto-focus on mount |
|
|
76
|
-
| `renderToolbar` | `(props) => ReactElement` | — | Custom toolbar renderer |
|
|
77
|
-
| `onReady` | `(actions: RichTextActions) => void` | — | Called with action methods |
|
|
111
|
+
Notes:
|
|
78
112
|
|
|
79
|
-
|
|
113
|
+
- Pressing an active heading button again clears that heading.
|
|
114
|
+
- Pressing an active list or alignment button again clears it.
|
|
115
|
+
- Link clears when the current selection already has a link.
|
|
116
|
+
- Image is a callback-driven action. Your app decides how the URI is chosen.
|
|
80
117
|
|
|
81
|
-
|
|
118
|
+
## Output Panel
|
|
119
|
+
|
|
120
|
+
The preview panel below the editor is optional and controlled by `showOutputPreview`.
|
|
121
|
+
|
|
122
|
+
It supports two output formats:
|
|
123
|
+
|
|
124
|
+
- `markdown`
|
|
125
|
+
- `html`
|
|
126
|
+
|
|
127
|
+
It also supports two display modes:
|
|
128
|
+
|
|
129
|
+
- `literal`: show the raw Markdown or HTML text
|
|
130
|
+
- `rendered`: render the rich output visually
|
|
131
|
+
|
|
132
|
+
Useful props:
|
|
133
|
+
|
|
134
|
+
| Prop | Purpose |
|
|
135
|
+
| --- | --- |
|
|
136
|
+
| `outputFormat` | Controlled Markdown or HTML mode |
|
|
137
|
+
| `defaultOutputFormat` | Initial format for uncontrolled usage |
|
|
138
|
+
| `outputPreviewMode` | Controlled raw or rendered mode |
|
|
139
|
+
| `defaultOutputPreviewMode` | Initial preview mode |
|
|
140
|
+
| `maxOutputHeight` | Max preview height before the panel scrolls |
|
|
141
|
+
| `onChangeOutput` | Receives the serialized output on every change |
|
|
142
|
+
| `onChangeOutputFormat` | Called when toolbar format changes |
|
|
143
|
+
| `onChangeOutputPreviewMode` | Called when toolbar preview mode changes |
|
|
144
|
+
|
|
145
|
+
## Links
|
|
146
|
+
|
|
147
|
+
Link formatting is selection-based. Select text, then press the link button.
|
|
148
|
+
|
|
149
|
+
You have two common approaches:
|
|
150
|
+
|
|
151
|
+
1. Provide `onRequestLink` and open your own prompt, modal, or bottom sheet.
|
|
152
|
+
2. Use the built-in fallback, which auto-links only when the selected text already looks like a URL, domain, or email address.
|
|
82
153
|
|
|
83
154
|
```tsx
|
|
84
|
-
|
|
155
|
+
<RichTextInput
|
|
156
|
+
onRequestLink={({ selectedText, currentUrl, applyLink }) => {
|
|
157
|
+
console.log(selectedText, currentUrl);
|
|
158
|
+
applyLink('https://example.com');
|
|
159
|
+
}}
|
|
160
|
+
/>
|
|
161
|
+
```
|
|
85
162
|
|
|
86
|
-
|
|
87
|
-
const { state, actions } = useRichText({
|
|
88
|
-
onChangeText: (text) => console.log(text),
|
|
89
|
-
});
|
|
163
|
+
If the current selection already contains a link, pressing the button clears it.
|
|
90
164
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
165
|
+
## Images
|
|
166
|
+
|
|
167
|
+
The built-in toolbar includes an image button. It does not open the device picker itself. Instead, it calls `onRequestImage`, and your app decides how to produce the final image URI.
|
|
168
|
+
|
|
169
|
+
```tsx
|
|
170
|
+
<RichTextInput
|
|
171
|
+
onRequestImage={async ({ insertImage }) => {
|
|
172
|
+
const result = await pickImageFromYourApp();
|
|
173
|
+
if (!result?.uri) {
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
insertImage(result.uri, {
|
|
178
|
+
alt: result.fileName ?? 'Selected image',
|
|
179
|
+
placeholder: '[image]',
|
|
180
|
+
});
|
|
181
|
+
}}
|
|
182
|
+
/>
|
|
104
183
|
```
|
|
105
184
|
|
|
106
|
-
|
|
185
|
+
Behavior notes:
|
|
107
186
|
|
|
108
|
-
|
|
187
|
+
- The editor inserts a plain text placeholder into the input so typing remains stable.
|
|
188
|
+
- The segment also stores `imageSrc` and optional `imageAlt` metadata.
|
|
189
|
+
- `Raw` mode shows Markdown or HTML image output.
|
|
190
|
+
- `View` mode renders the image in the output panel.
|
|
191
|
+
- If you do not provide `onRequestImage`, the fallback only works when the selected text already looks like an image URL such as `https://site.com/photo.png`.
|
|
192
|
+
|
|
193
|
+
## Sizing And Input Behavior
|
|
194
|
+
|
|
195
|
+
`RichTextInput` grows with the text by default.
|
|
196
|
+
|
|
197
|
+
- `minHeight` sets the minimum input height.
|
|
198
|
+
- `maxHeight` limits the input height before the `TextInput` itself scrolls.
|
|
199
|
+
- `maxOutputHeight` limits the preview panel height before it scrolls.
|
|
200
|
+
- `textInputProps` passes additional native `TextInput` props through to the editor.
|
|
109
201
|
|
|
110
202
|
```tsx
|
|
111
|
-
|
|
203
|
+
<RichTextInput
|
|
204
|
+
minHeight={140}
|
|
205
|
+
maxHeight={280}
|
|
206
|
+
maxOutputHeight={220}
|
|
207
|
+
textInputProps={{
|
|
208
|
+
autoCapitalize: 'sentences',
|
|
209
|
+
keyboardType: 'default',
|
|
210
|
+
}}
|
|
211
|
+
/>
|
|
212
|
+
```
|
|
112
213
|
|
|
113
|
-
|
|
114
|
-
const { state, actions } = useRichTextContext();
|
|
115
|
-
return <Button title="B" onPress={() => actions.toggleFormat('bold')} />;
|
|
116
|
-
}
|
|
214
|
+
## Customizing The Toolbar
|
|
117
215
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
216
|
+
Use `toolbarItems` when you want to keep the built-in toolbar behavior but replace some or all buttons.
|
|
217
|
+
|
|
218
|
+
`ToolbarItem.label` accepts any React node, so you can use:
|
|
219
|
+
|
|
220
|
+
- plain text such as `'B'`
|
|
221
|
+
- emoji content
|
|
222
|
+
- a Lucide icon such as `<Bold />`
|
|
223
|
+
- any custom React element
|
|
224
|
+
|
|
225
|
+
When the label is not plain text, set `accessibilityLabel` so screen readers and tests can identify the button correctly.
|
|
226
|
+
|
|
227
|
+
Example:
|
|
228
|
+
|
|
229
|
+
```tsx
|
|
230
|
+
import React from 'react';
|
|
231
|
+
import { Bold, ImagePlus, List } from 'lucide-react-native';
|
|
232
|
+
import { RichTextInput } from 'react-native-richify';
|
|
233
|
+
|
|
234
|
+
<RichTextInput
|
|
235
|
+
toolbarItems={[
|
|
236
|
+
{
|
|
237
|
+
id: 'bold',
|
|
238
|
+
label: <Bold />,
|
|
239
|
+
accessibilityLabel: 'Bold',
|
|
240
|
+
format: 'bold',
|
|
241
|
+
},
|
|
242
|
+
{
|
|
243
|
+
id: 'note',
|
|
244
|
+
label: 'Note',
|
|
245
|
+
onPress: () => console.log('Custom action'),
|
|
246
|
+
},
|
|
247
|
+
{
|
|
248
|
+
id: 'bullet',
|
|
249
|
+
label: <List />,
|
|
250
|
+
accessibilityLabel: 'Bullet list',
|
|
251
|
+
listType: 'bullet',
|
|
252
|
+
},
|
|
253
|
+
{
|
|
254
|
+
id: 'image',
|
|
255
|
+
label: <ImagePlus />,
|
|
256
|
+
accessibilityLabel: 'Insert image',
|
|
257
|
+
actionType: 'image',
|
|
258
|
+
},
|
|
259
|
+
{ id: 'html', label: 'HTML', outputFormat: 'html' },
|
|
260
|
+
]}
|
|
261
|
+
/>
|
|
126
262
|
```
|
|
127
263
|
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
264
|
+
Supported built-in item fields:
|
|
265
|
+
|
|
266
|
+
- `format`
|
|
267
|
+
- `heading`
|
|
268
|
+
- `listType`
|
|
269
|
+
- `textAlign`
|
|
270
|
+
- `outputFormat`
|
|
271
|
+
- `outputPreviewMode`
|
|
272
|
+
- `actionType: 'link' | 'image'`
|
|
273
|
+
- `onPress`
|
|
274
|
+
- `renderButton`
|
|
275
|
+
|
|
276
|
+
If you need a completely custom layout, use `renderToolbar`:
|
|
277
|
+
|
|
278
|
+
```tsx
|
|
279
|
+
<RichTextInput
|
|
280
|
+
renderToolbar={({
|
|
281
|
+
actions,
|
|
282
|
+
outputFormat,
|
|
283
|
+
outputPreviewMode,
|
|
284
|
+
onOutputFormatChange,
|
|
285
|
+
onOutputPreviewModeChange,
|
|
286
|
+
onRequestImage,
|
|
287
|
+
}) => (
|
|
288
|
+
<>
|
|
289
|
+
<MyButton onPress={() => actions.toggleFormat('bold')} label="Bold" />
|
|
290
|
+
<MyButton onPress={() => actions.setHeading('h2')} label="Heading" />
|
|
291
|
+
<MyButton onPress={onRequestImage} label="Image" />
|
|
292
|
+
<MyButton
|
|
293
|
+
onPress={() => onOutputFormatChange('html')}
|
|
294
|
+
label={outputFormat === 'html' ? 'HTML on' : 'HTML'}
|
|
295
|
+
/>
|
|
296
|
+
<MyButton
|
|
297
|
+
onPress={() => onOutputPreviewModeChange('rendered')}
|
|
298
|
+
label={outputPreviewMode === 'rendered' ? 'Preview on' : 'Preview'}
|
|
299
|
+
/>
|
|
300
|
+
</>
|
|
301
|
+
)}
|
|
302
|
+
/>
|
|
303
|
+
```
|
|
143
304
|
|
|
144
305
|
## Theming
|
|
145
306
|
|
|
146
|
-
|
|
307
|
+
Use the `theme` prop to override container, toolbar, input, and output styles.
|
|
147
308
|
|
|
148
309
|
```tsx
|
|
149
310
|
<RichTextInput
|
|
150
311
|
theme={{
|
|
151
312
|
colors: {
|
|
152
|
-
primary: '#
|
|
153
|
-
background: '#
|
|
154
|
-
text: '#
|
|
155
|
-
placeholder: '#
|
|
156
|
-
toolbarBackground: '#
|
|
157
|
-
toolbarBorder: '#
|
|
158
|
-
|
|
313
|
+
primary: '#0F766E',
|
|
314
|
+
background: '#FFFFFF',
|
|
315
|
+
text: '#0F172A',
|
|
316
|
+
placeholder: '#94A3B8',
|
|
317
|
+
toolbarBackground: '#F8FAFC',
|
|
318
|
+
toolbarBorder: '#CBD5E1',
|
|
319
|
+
link: '#0EA5E9',
|
|
320
|
+
cursor: '#0F766E',
|
|
159
321
|
},
|
|
160
322
|
containerStyle: {
|
|
161
323
|
borderRadius: 16,
|
|
162
|
-
borderWidth:
|
|
163
|
-
borderColor: '#
|
|
324
|
+
borderWidth: 1,
|
|
325
|
+
borderColor: '#CBD5E1',
|
|
164
326
|
},
|
|
165
|
-
|
|
166
|
-
|
|
327
|
+
outputContainerStyle: {
|
|
328
|
+
margin: 12,
|
|
329
|
+
padding: 12,
|
|
330
|
+
borderRadius: 12,
|
|
331
|
+
backgroundColor: '#F8FAFC',
|
|
167
332
|
},
|
|
168
333
|
}}
|
|
169
334
|
/>
|
|
170
335
|
```
|
|
171
336
|
|
|
172
|
-
|
|
337
|
+
Common theme keys:
|
|
338
|
+
|
|
339
|
+
- `containerStyle`
|
|
340
|
+
- `inputStyle`
|
|
341
|
+
- `baseTextStyle`
|
|
342
|
+
- `toolbarStyle`
|
|
343
|
+
- `toolbarButtonStyle`
|
|
344
|
+
- `toolbarButtonActiveStyle`
|
|
345
|
+
- `toolbarButtonTextStyle`
|
|
346
|
+
- `toolbarButtonActiveTextStyle`
|
|
347
|
+
- `outputContainerStyle`
|
|
348
|
+
- `outputLabelStyle`
|
|
349
|
+
- `outputTextStyle`
|
|
350
|
+
- `renderedOutputStyle`
|
|
351
|
+
- `codeStyle`
|
|
352
|
+
|
|
353
|
+
## Headless Usage
|
|
354
|
+
|
|
355
|
+
Use `useRichText` when you want to build your own editor shell instead of using `<RichTextInput />`.
|
|
173
356
|
|
|
174
357
|
```tsx
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
358
|
+
import React from 'react';
|
|
359
|
+
import { Button, TextInput, View } from 'react-native';
|
|
360
|
+
import { useRichText } from 'react-native-richify';
|
|
361
|
+
|
|
362
|
+
export function HeadlessEditor() {
|
|
363
|
+
const { actions } = useRichText({
|
|
364
|
+
onChangeText: (text) => console.log(text),
|
|
365
|
+
});
|
|
366
|
+
|
|
367
|
+
return (
|
|
368
|
+
<View>
|
|
369
|
+
<Button title="Bold" onPress={() => actions.toggleFormat('bold')} />
|
|
370
|
+
<Button title="Bullet" onPress={() => actions.setListType('bullet')} />
|
|
371
|
+
<TextInput
|
|
372
|
+
multiline
|
|
373
|
+
value={actions.getPlainText()}
|
|
374
|
+
onChangeText={actions.handleTextChange}
|
|
375
|
+
onSelectionChange={(event) =>
|
|
376
|
+
actions.handleSelectionChange(event.nativeEvent.selection)
|
|
377
|
+
}
|
|
378
|
+
style={{ minHeight: 120, borderWidth: 1, padding: 12 }}
|
|
379
|
+
/>
|
|
380
|
+
</View>
|
|
381
|
+
);
|
|
382
|
+
}
|
|
193
383
|
```
|
|
194
384
|
|
|
195
|
-
## Data Model
|
|
385
|
+
## Data Model And Serialization
|
|
196
386
|
|
|
197
|
-
|
|
387
|
+
The editor stores content as typed segments:
|
|
198
388
|
|
|
199
|
-
```
|
|
200
|
-
|
|
389
|
+
```ts
|
|
390
|
+
type StyledSegment = {
|
|
201
391
|
text: string;
|
|
202
392
|
styles: {
|
|
203
393
|
bold?: boolean;
|
|
@@ -209,23 +399,27 @@ interface StyledSegment {
|
|
|
209
399
|
backgroundColor?: string;
|
|
210
400
|
fontSize?: number;
|
|
211
401
|
heading?: 'h1' | 'h2' | 'h3' | 'none';
|
|
402
|
+
listType?: 'bullet' | 'ordered' | 'none';
|
|
403
|
+
textAlign?: 'left' | 'center' | 'right';
|
|
404
|
+
link?: string;
|
|
405
|
+
imageSrc?: string;
|
|
406
|
+
imageAlt?: string;
|
|
212
407
|
};
|
|
213
|
-
}
|
|
408
|
+
};
|
|
214
409
|
```
|
|
215
410
|
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
The **Overlay Technique** layers two components:
|
|
219
|
-
|
|
220
|
-
1. **Bottom**: A `<Text>` component renders the styled/formatted text
|
|
221
|
-
2. **Top**: A transparent `<TextInput>` captures user input and selection
|
|
411
|
+
That makes it straightforward to:
|
|
222
412
|
|
|
223
|
-
|
|
413
|
+
- save content with `exportJSON()`
|
|
414
|
+
- restore content with `importJSON()`
|
|
415
|
+
- read plain text with `getPlainText()`
|
|
416
|
+
- generate Markdown with `getOutput('markdown')`
|
|
417
|
+
- generate HTML with `getOutput('html')`
|
|
224
418
|
|
|
225
419
|
## Contributing
|
|
226
420
|
|
|
227
|
-
See [
|
|
421
|
+
See [AGENTS.md](AGENTS.md) for contributor workflow notes.
|
|
228
422
|
|
|
229
423
|
## License
|
|
230
424
|
|
|
231
|
-
MIT
|
|
425
|
+
MIT
|
|
@@ -177,10 +177,6 @@ const RichTextInput = ({
|
|
|
177
177
|
inputRange: [0, 1],
|
|
178
178
|
outputRange: [0, 12]
|
|
179
179
|
}),
|
|
180
|
-
marginBottom: previewProgress.interpolate({
|
|
181
|
-
inputRange: [0, 1],
|
|
182
|
-
outputRange: [0, 16]
|
|
183
|
-
}),
|
|
184
180
|
transform: [{
|
|
185
181
|
translateY: previewProgress.interpolate({
|
|
186
182
|
inputRange: [0, 1],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_defaultStyles","_useRichText","_parser","_serializer","_RenderedOutput","_Toolbar","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","DEFAULT_OUTPUT_PANEL_MAX_HEIGHT","isJestRuntime","globalThis","process","env","JEST_WORKER_ID","RichTextInput","initialSegments","onChangeSegments","onChangeText","placeholder","editable","maxLength","showToolbar","toolbarPosition","toolbarItems","theme","showOutputPreview","outputFormat","defaultOutputFormat","outputPreviewMode","defaultOutputPreviewMode","maxOutputHeight","onChangeOutput","onChangeOutputFormat","onChangeOutputPreviewMode","onRequestLink","onRequestImage","multiline","minHeight","maxHeight","autoFocus","textInputProps","renderToolbar","onReady","resolvedTheme","DEFAULT_THEME","previewProgress","useRef","Animated","Value","current","internalOutputFormat","setInternalOutputFormat","useState","internalOutputPreviewMode","setInternalOutputPreviewMode","contentHeight","setContentHeight","state","actions","useRichText","useEffect","plainText","segmentsToPlainText","segments","resolvedOutputFormat","resolvedOutputPreviewMode","inputHeight","Math","max","min","shouldScrollInput","serializedOutput","useMemo","serializeSegments","shouldShowOutputPreview","length","normalizedSelection","start","selection","end","selectedText","slice","selectionStyle","getSelectionStyle","activeStyles","setValue","timing","toValue","duration","easing","Easing","out","cubic","useNativeDriver","onSelectionChange","useCallback","nativeEvent","handleSelectionChange","onContentSizeChange","ceil","contentSize","height","handleOutputFormatChange","format","undefined","handleOutputPreviewModeChange","mode","handleRequestLink","currentUrl","link","applyLink","setLink","detectedUrl","detectLinkTarget","handleRequestImage","insertImage","detectedSource","detectImageSource","alt","trim","outputLabel","formatLabel","containerStyle","inputAreaStyle","styles","inputArea","inputStyle","textInput","baseTextStyle","style","outputAnimatedStyle","interpolate","inputRange","outputRange","opacity","marginTop","marginBottom","transform","translateY","outputContainerStyle","outputLabelStyle","outputTextStyle","toolbarComponent","jsx","Toolbar","items","onOutputFormatChange","onOutputPreviewModeChange","toolbarBorderStyle","borderBottomWidth","borderBottomColor","colors","toolbarBorder","borderTopWidth","borderTopColor","jsxs","View","children","TextInput","value","handleTextChange","placeholderTextColor","selectionColor","cursor","textAlignVertical","scrollEnabled","pointerEvents","outputAnimatedWrapper","Text","ScrollView","showsVerticalScrollIndicator","RenderedOutput","selectable","exports","displayName","StyleSheet","create","position","overflow","trimmed","test","normalized","candidate","replace"],"sourceRoot":"../../../src","sources":["components/RichTextInput.tsx"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_defaultStyles","_useRichText","_parser","_serializer","_RenderedOutput","_Toolbar","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","DEFAULT_OUTPUT_PANEL_MAX_HEIGHT","isJestRuntime","globalThis","process","env","JEST_WORKER_ID","RichTextInput","initialSegments","onChangeSegments","onChangeText","placeholder","editable","maxLength","showToolbar","toolbarPosition","toolbarItems","theme","showOutputPreview","outputFormat","defaultOutputFormat","outputPreviewMode","defaultOutputPreviewMode","maxOutputHeight","onChangeOutput","onChangeOutputFormat","onChangeOutputPreviewMode","onRequestLink","onRequestImage","multiline","minHeight","maxHeight","autoFocus","textInputProps","renderToolbar","onReady","resolvedTheme","DEFAULT_THEME","previewProgress","useRef","Animated","Value","current","internalOutputFormat","setInternalOutputFormat","useState","internalOutputPreviewMode","setInternalOutputPreviewMode","contentHeight","setContentHeight","state","actions","useRichText","useEffect","plainText","segmentsToPlainText","segments","resolvedOutputFormat","resolvedOutputPreviewMode","inputHeight","Math","max","min","shouldScrollInput","serializedOutput","useMemo","serializeSegments","shouldShowOutputPreview","length","normalizedSelection","start","selection","end","selectedText","slice","selectionStyle","getSelectionStyle","activeStyles","setValue","timing","toValue","duration","easing","Easing","out","cubic","useNativeDriver","onSelectionChange","useCallback","nativeEvent","handleSelectionChange","onContentSizeChange","ceil","contentSize","height","handleOutputFormatChange","format","undefined","handleOutputPreviewModeChange","mode","handleRequestLink","currentUrl","link","applyLink","setLink","detectedUrl","detectLinkTarget","handleRequestImage","insertImage","detectedSource","detectImageSource","alt","trim","outputLabel","formatLabel","containerStyle","inputAreaStyle","styles","inputArea","inputStyle","textInput","baseTextStyle","style","outputAnimatedStyle","interpolate","inputRange","outputRange","opacity","marginTop","transform","translateY","outputContainerStyle","outputLabelStyle","outputTextStyle","toolbarComponent","jsx","Toolbar","items","onOutputFormatChange","onOutputPreviewModeChange","toolbarBorderStyle","borderBottomWidth","borderBottomColor","colors","toolbarBorder","borderTopWidth","borderTopColor","jsxs","View","children","TextInput","value","handleTextChange","placeholderTextColor","selectionColor","cursor","textAlignVertical","scrollEnabled","pointerEvents","outputAnimatedWrapper","Text","ScrollView","showsVerticalScrollIndicator","RenderedOutput","selectable","exports","displayName","StyleSheet","create","position","overflow","trimmed","test","normalized","candidate","replace"],"sourceRoot":"../../../src","sources":["components/RichTextInput.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -96,6 +96,7 @@ const Toolbar = exports.Toolbar = /*#__PURE__*/_react.default.memo(({
|
|
|
96
96
|
contentContainerStyle: styles.scrollContent,
|
|
97
97
|
children: enrichedItems.map(item => /*#__PURE__*/(0, _jsxRuntime.jsx)(_ToolbarButton.ToolbarButton, {
|
|
98
98
|
label: item.label,
|
|
99
|
+
accessibilityLabel: item.accessibilityLabel,
|
|
99
100
|
active: !!item.active,
|
|
100
101
|
theme: resolvedTheme,
|
|
101
102
|
renderButton: item.renderButton,
|