react-native-richify 1.0.6 → 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.
@@ -1 +1 @@
1
- {"version":3,"file":"defaultStyles.d.ts","sourceRoot":"","sources":["../../../../src/constants/defaultStyles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAExE;;GAEG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;CAajB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;CAKrB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,uBAAuB;;;;;CAK1B,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,WAehC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,aAqG3B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAE,WAAW,EAmB9C,CAAC"}
1
+ {"version":3,"file":"defaultStyles.d.ts","sourceRoot":"","sources":["../../../../src/constants/defaultStyles.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAExE;;GAEG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;CAajB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;CAKrB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,uBAAuB;;;;;CAK1B,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,WAehC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,aAqG3B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAE,WAAW,EAoB9C,CAAC"}
@@ -1,3 +1,4 @@
1
+ import type { ReactNode } from 'react';
1
2
  import type { TextStyle, ViewStyle, TextInputProps, ColorValue } from 'react-native';
2
3
  /**
3
4
  * Supported inline formatting types.
@@ -183,8 +184,10 @@ export interface RichTextTheme {
183
184
  export interface ToolbarItem {
184
185
  /** Unique identifier. */
185
186
  id: string;
186
- /** Display label or icon text. */
187
- label: string;
187
+ /** Display content for the button: text, emoji, or a React element. */
188
+ label: ReactNode;
189
+ /** Accessibility label used when the button content is not plain text. */
190
+ accessibilityLabel?: string;
188
191
  /** The format type this button toggles (for inline formats). */
189
192
  format?: FormatType;
190
193
  /** The heading level this button sets. */
@@ -212,7 +215,8 @@ export interface ToolbarItem {
212
215
  export interface ToolbarButtonRenderProps {
213
216
  active: boolean;
214
217
  onPress: () => void;
215
- label: string;
218
+ label: ReactNode;
219
+ accessibilityLabel?: string;
216
220
  }
217
221
  /**
218
222
  * Props passed to a custom toolbar renderer.
@@ -264,8 +268,10 @@ export interface OverlayTextProps {
264
268
  * Props for the ToolbarButton component.
265
269
  */
266
270
  export interface ToolbarButtonProps {
267
- /** Button label text. */
268
- label: string;
271
+ /** Button label or icon content. */
272
+ label: ReactNode;
273
+ /** Accessibility label used for assistive technologies. */
274
+ accessibilityLabel?: string;
269
275
  /** Whether the button is currently active. */
270
276
  active: boolean;
271
277
  /** Press handler. */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/types/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/types/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "react-native-richify",
3
- "version": "1.0.6",
4
- "description": "A production-grade, fully customizable React Native Rich Text Input using the Overlay Technique no WebView required.",
3
+ "version": "1.0.7",
4
+ "description": "A customizable React Native rich text input with a native toolbar and Markdown or HTML output.",
5
5
  "main": "lib/commonjs/index.js",
6
6
  "module": "lib/module/index.js",
7
7
  "types": "lib/typescript/src/index.d.ts",
@@ -29,7 +29,8 @@
29
29
  "text-input",
30
30
  "rich-text-editor",
31
31
  "formatted-text",
32
- "overlay-technique",
32
+ "markdown",
33
+ "html",
33
34
  "typescript",
34
35
  "customizable",
35
36
  "no-webview"
@@ -60,12 +61,14 @@
60
61
  "react": "^19.2.4",
61
62
  "react-native": "^0.84.1",
62
63
  "react-native-builder-bob": "^0.41.0",
64
+ "react-native-svg": "^15.15.4",
63
65
  "react-test-renderer": "^19.2.4",
64
66
  "typescript": "^6.0.2"
65
67
  },
66
68
  "peerDependencies": {
67
69
  "react": ">=19.0.0",
68
- "react-native": ">=0.84.0"
70
+ "react-native": ">=0.84.0",
71
+ "react-native-svg": "^12.0.0 || ^13.0.0 || ^14.0.0 || ^15.0.0"
69
72
  },
70
73
  "react-native-builder-bob": {
71
74
  "source": "src",
@@ -80,5 +83,8 @@
80
83
  }
81
84
  ]
82
85
  ]
86
+ },
87
+ "dependencies": {
88
+ "lucide-react-native": "^1.7.0"
83
89
  }
84
90
  }
@@ -109,6 +109,7 @@ export const Toolbar: React.FC<ToolbarProps> = React.memo(
109
109
  <ToolbarButton
110
110
  key={item.id}
111
111
  label={item.label}
112
+ accessibilityLabel={item.accessibilityLabel}
112
113
  active={!!item.active}
113
114
  theme={resolvedTheme}
114
115
  renderButton={item.renderButton}
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import { TouchableOpacity, Text, StyleSheet } from 'react-native';
2
+ import { TouchableOpacity, Text, StyleSheet, View } from 'react-native';
3
3
  import type { ToolbarButtonProps } from '../types';
4
4
  import { DEFAULT_THEME } from '../constants/defaultStyles';
5
5
 
@@ -8,13 +8,23 @@ import { DEFAULT_THEME } from '../constants/defaultStyles';
8
8
  * Supports custom rendering via the `renderButton` prop.
9
9
  */
10
10
  export const ToolbarButton: React.FC<ToolbarButtonProps> = React.memo(
11
- ({ label, active, onPress, theme, renderButton }) => {
11
+ ({ label, accessibilityLabel, active, onPress, theme, renderButton }) => {
12
12
  // Custom render
13
13
  if (renderButton) {
14
- return renderButton({ active, onPress, label });
14
+ return renderButton({ active, onPress, label, accessibilityLabel });
15
15
  }
16
16
 
17
17
  const resolvedTheme = theme ?? DEFAULT_THEME;
18
+ const baseTextColor =
19
+ resolvedTheme.toolbarButtonTextStyle?.color ??
20
+ DEFAULT_THEME.toolbarButtonTextStyle?.color;
21
+ const activeTextColor =
22
+ resolvedTheme.toolbarButtonActiveTextStyle?.color ??
23
+ DEFAULT_THEME.toolbarButtonActiveTextStyle?.color ??
24
+ baseTextColor;
25
+ const resolvedIconColor = active ? activeTextColor : baseTextColor;
26
+ const iconColor =
27
+ typeof resolvedIconColor === 'string' ? resolvedIconColor : undefined;
18
28
 
19
29
  const buttonStyle = [
20
30
  resolvedTheme.toolbarButtonStyle ?? DEFAULT_THEME.toolbarButtonStyle,
@@ -23,17 +33,11 @@ export const ToolbarButton: React.FC<ToolbarButtonProps> = React.memo(
23
33
  DEFAULT_THEME.toolbarButtonActiveStyle),
24
34
  ];
25
35
 
26
- const textStyle = [
27
- resolvedTheme.toolbarButtonTextStyle ??
28
- DEFAULT_THEME.toolbarButtonTextStyle,
29
- active &&
30
- (resolvedTheme.toolbarButtonActiveTextStyle ??
31
- DEFAULT_THEME.toolbarButtonActiveTextStyle),
32
- // Make italic button actually italic, bold button actually bold, etc.
33
- label === 'I' && styles.italicLabel,
34
- label === 'U' && styles.underlineLabel,
35
- label === 'S' && styles.strikethroughLabel,
36
- ];
36
+ const derivedAccessibilityLabel =
37
+ accessibilityLabel ??
38
+ (typeof label === 'string' || typeof label === 'number'
39
+ ? `Format ${label}`
40
+ : 'Toolbar action');
37
41
 
38
42
  return (
39
43
  <TouchableOpacity
@@ -41,10 +45,10 @@ export const ToolbarButton: React.FC<ToolbarButtonProps> = React.memo(
41
45
  onPress={onPress}
42
46
  activeOpacity={0.7}
43
47
  accessibilityRole="button"
44
- accessibilityLabel={`Format ${label}`}
48
+ accessibilityLabel={derivedAccessibilityLabel}
45
49
  accessibilityState={{ selected: active }}
46
50
  >
47
- <Text style={textStyle}>{label}</Text>
51
+ {renderToolbarContent(label, iconColor, active, resolvedTheme)}
48
52
  </TouchableOpacity>
49
53
  );
50
54
  },
@@ -53,6 +57,10 @@ export const ToolbarButton: React.FC<ToolbarButtonProps> = React.memo(
53
57
  ToolbarButton.displayName = 'ToolbarButton';
54
58
 
55
59
  const styles = StyleSheet.create({
60
+ contentWrapper: {
61
+ alignItems: 'center',
62
+ justifyContent: 'center',
63
+ },
56
64
  italicLabel: {
57
65
  fontStyle: 'italic',
58
66
  },
@@ -63,3 +71,47 @@ const styles = StyleSheet.create({
63
71
  textDecorationLine: 'line-through',
64
72
  },
65
73
  });
74
+
75
+ function renderToolbarContent(
76
+ label: ToolbarButtonProps['label'],
77
+ iconColor: string | undefined,
78
+ active: boolean,
79
+ theme: NonNullable<ToolbarButtonProps['theme']>,
80
+ ) {
81
+ if (typeof label === 'string' || typeof label === 'number') {
82
+ const textStyle = [
83
+ theme.toolbarButtonTextStyle ?? DEFAULT_THEME.toolbarButtonTextStyle,
84
+ active &&
85
+ (theme.toolbarButtonActiveTextStyle ??
86
+ DEFAULT_THEME.toolbarButtonActiveTextStyle),
87
+ label === 'I' && styles.italicLabel,
88
+ label === 'U' && styles.underlineLabel,
89
+ label === 'S' && styles.strikethroughLabel,
90
+ ];
91
+
92
+ return <Text style={textStyle}>{label}</Text>;
93
+ }
94
+
95
+ if (React.isValidElement(label)) {
96
+ return (
97
+ <View style={styles.contentWrapper}>
98
+ {React.cloneElement(
99
+ label as React.ReactElement<{
100
+ color?: string;
101
+ size?: number;
102
+ strokeWidth?: number;
103
+ }>,
104
+ {
105
+ color:
106
+ (label.props as { color?: string }).color ?? iconColor,
107
+ size: (label.props as { size?: number }).size ?? 18,
108
+ strokeWidth:
109
+ (label.props as { strokeWidth?: number }).strokeWidth ?? 2,
110
+ },
111
+ )}
112
+ </View>
113
+ );
114
+ }
115
+
116
+ return <View style={styles.contentWrapper}>{label}</View>;
117
+ }
@@ -1,3 +1,21 @@
1
+ import React from 'react';
2
+ import {
3
+ Bold,
4
+ Code,
5
+ Heading1,
6
+ Heading2,
7
+ Heading3,
8
+ ImagePlus,
9
+ Italic,
10
+ Link2,
11
+ List,
12
+ ListOrdered,
13
+ Strikethrough,
14
+ TextAlignCenter,
15
+ TextAlignEnd,
16
+ TextAlignStart,
17
+ Underline,
18
+ } from 'lucide-react-native';
1
19
  import type { RichTextTheme, FormatStyle, ToolbarItem } from '../types';
2
20
 
3
21
  /**
@@ -168,22 +186,33 @@ export const DEFAULT_THEME: RichTextTheme = {
168
186
  * Default toolbar items for the built-in toolbar.
169
187
  */
170
188
  export const DEFAULT_TOOLBAR_ITEMS: ToolbarItem[] = [
171
- { id: 'bold', label: 'B', format: 'bold' },
172
- { id: 'italic', label: 'I', format: 'italic' },
173
- { id: 'underline', label: 'U', format: 'underline' },
174
- { id: 'strikethrough', label: 'S', format: 'strikethrough' },
175
- { id: 'code', label: '<>', format: 'code' },
176
- { id: 'h1', label: 'H1', heading: 'h1' },
177
- { id: 'h2', label: 'H2', heading: 'h2' },
178
- { id: 'h3', label: 'H3', heading: 'h3' },
179
- { id: 'bullet', label: '\u2022\u2261', listType: 'bullet' },
180
- { id: 'ordered', label: '1\u2261', listType: 'ordered' },
181
- { id: 'link', label: '\ud83d\udd17', actionType: 'link' },
182
- { id: 'align-left', label: '\u21e4', textAlign: 'left' },
183
- { id: 'align-center', label: '\u2194', textAlign: 'center' },
184
- { id: 'align-right', label: '\u21e5', textAlign: 'right' },
185
- { id: 'format-markdown', label: 'MD', outputFormat: 'markdown' },
186
- { id: 'format-html', label: 'HTML', outputFormat: 'html' },
187
- { id: 'preview-literal', label: 'Raw', outputPreviewMode: 'literal' },
188
- { id: 'preview-rendered', label: 'View', outputPreviewMode: 'rendered' },
189
+ { id: 'bold', label: createToolbarIcon(Bold), format: 'bold', accessibilityLabel: 'Bold' },
190
+ { id: 'italic', label: createToolbarIcon(Italic), format: 'italic', accessibilityLabel: 'Italic' },
191
+ { id: 'underline', label: createToolbarIcon(Underline), format: 'underline', accessibilityLabel: 'Underline' },
192
+ { id: 'strikethrough', label: createToolbarIcon(Strikethrough), format: 'strikethrough', accessibilityLabel: 'Strikethrough' },
193
+ { id: 'code', label: createToolbarIcon(Code), format: 'code', accessibilityLabel: 'Code' },
194
+ { id: 'h1', label: createToolbarIcon(Heading1), heading: 'h1', accessibilityLabel: 'Heading 1' },
195
+ { id: 'h2', label: createToolbarIcon(Heading2), heading: 'h2', accessibilityLabel: 'Heading 2' },
196
+ { id: 'h3', label: createToolbarIcon(Heading3), heading: 'h3', accessibilityLabel: 'Heading 3' },
197
+ { id: 'bullet', label: createToolbarIcon(List), listType: 'bullet', accessibilityLabel: 'Bullet list' },
198
+ { id: 'ordered', label: createToolbarIcon(ListOrdered), listType: 'ordered', accessibilityLabel: 'Ordered list' },
199
+ { id: 'link', label: createToolbarIcon(Link2), actionType: 'link', accessibilityLabel: 'Link' },
200
+ { id: 'image', label: createToolbarIcon(ImagePlus), actionType: 'image', accessibilityLabel: 'Insert image' },
201
+ { id: 'align-left', label: createToolbarIcon(TextAlignStart), textAlign: 'left', accessibilityLabel: 'Align left' },
202
+ { id: 'align-center', label: createToolbarIcon(TextAlignCenter), textAlign: 'center', accessibilityLabel: 'Align center' },
203
+ { id: 'align-right', label: createToolbarIcon(TextAlignEnd), textAlign: 'right', accessibilityLabel: 'Align right' },
204
+ { id: 'format-markdown', label: 'MD', outputFormat: 'markdown', accessibilityLabel: 'Markdown output' },
205
+ { id: 'format-html', label: 'HTML', outputFormat: 'html', accessibilityLabel: 'HTML output' },
206
+ { id: 'preview-literal', label: 'Raw', outputPreviewMode: 'literal', accessibilityLabel: 'Raw output view' },
207
+ { id: 'preview-rendered', label: 'View', outputPreviewMode: 'rendered', accessibilityLabel: 'Rendered preview' },
189
208
  ];
209
+
210
+ function createToolbarIcon(
211
+ Icon: React.ComponentType<{
212
+ color?: string;
213
+ size?: number;
214
+ strokeWidth?: number;
215
+ }>,
216
+ ) {
217
+ return React.createElement(Icon);
218
+ }
@@ -1,3 +1,4 @@
1
+ import type { ReactElement, ReactNode } from 'react';
1
2
  import type { TextStyle, ViewStyle, TextInputProps, ColorValue } from 'react-native';
2
3
  /**
3
4
  * Supported inline formatting types.
@@ -183,8 +184,10 @@ export interface RichTextTheme {
183
184
  export interface ToolbarItem {
184
185
  /** Unique identifier. */
185
186
  id: string;
186
- /** Display label or icon text. */
187
- label: string;
187
+ /** Display content for the button: text, emoji, or a React element. */
188
+ label: ReactNode;
189
+ /** Accessibility label used when the button content is not plain text. */
190
+ accessibilityLabel?: string;
188
191
  /** The format type this button toggles (for inline formats). */
189
192
  format?: FormatType;
190
193
  /** The heading level this button sets. */
@@ -204,7 +207,7 @@ export interface ToolbarItem {
204
207
  /** Whether this item is currently active. */
205
208
  active?: boolean;
206
209
  /** Custom render function for the button. */
207
- renderButton?: (props: ToolbarButtonRenderProps) => React.ReactElement | null;
210
+ renderButton?: (props: ToolbarButtonRenderProps) => ReactElement | null;
208
211
  }
209
212
  /**
210
213
  * Props passed to a custom toolbar button renderer.
@@ -212,7 +215,8 @@ export interface ToolbarItem {
212
215
  export interface ToolbarButtonRenderProps {
213
216
  active: boolean;
214
217
  onPress: () => void;
215
- label: string;
218
+ label: ReactNode;
219
+ accessibilityLabel?: string;
216
220
  }
217
221
  /**
218
222
  * Props passed to a custom toolbar renderer.
@@ -264,8 +268,10 @@ export interface OverlayTextProps {
264
268
  * Props for the ToolbarButton component.
265
269
  */
266
270
  export interface ToolbarButtonProps {
267
- /** Button label text. */
268
- label: string;
271
+ /** Button label or icon content. */
272
+ label: ReactNode;
273
+ /** Accessibility label used for assistive technologies. */
274
+ accessibilityLabel?: string;
269
275
  /** Whether the button is currently active. */
270
276
  active: boolean;
271
277
  /** Press handler. */
@@ -302,7 +308,7 @@ export interface ToolbarProps {
302
308
  /** Called when the image button is pressed. */
303
309
  onRequestImage?: () => void;
304
310
  /** Custom render function for the entire toolbar. */
305
- renderToolbar?: (props: ToolbarRenderProps) => React.ReactElement | null;
311
+ renderToolbar?: (props: ToolbarRenderProps) => ReactElement | null;
306
312
  }
307
313
  /**
308
314
  * Props for the main RichTextInput component.
@@ -1,3 +1,4 @@
1
+ import type { ReactNode } from 'react';
1
2
  import type { TextStyle, ViewStyle, TextInputProps, ColorValue } from 'react-native';
2
3
 
3
4
  // ─── Format Types ────────────────────────────────────────────────────────────
@@ -224,8 +225,10 @@ export interface RichTextTheme {
224
225
  export interface ToolbarItem {
225
226
  /** Unique identifier. */
226
227
  id: string;
227
- /** Display label or icon text. */
228
- label: string;
228
+ /** Display content for the button: text, emoji, or a React element. */
229
+ label: ReactNode;
230
+ /** Accessibility label used when the button content is not plain text. */
231
+ accessibilityLabel?: string;
229
232
  /** The format type this button toggles (for inline formats). */
230
233
  format?: FormatType;
231
234
  /** The heading level this button sets. */
@@ -254,7 +257,8 @@ export interface ToolbarItem {
254
257
  export interface ToolbarButtonRenderProps {
255
258
  active: boolean;
256
259
  onPress: () => void;
257
- label: string;
260
+ label: ReactNode;
261
+ accessibilityLabel?: string;
258
262
  }
259
263
 
260
264
  /**
@@ -316,8 +320,10 @@ export interface OverlayTextProps {
316
320
  * Props for the ToolbarButton component.
317
321
  */
318
322
  export interface ToolbarButtonProps {
319
- /** Button label text. */
320
- label: string;
323
+ /** Button label or icon content. */
324
+ label: ReactNode;
325
+ /** Accessibility label used for assistive technologies. */
326
+ accessibilityLabel?: string;
321
327
  /** Whether the button is currently active. */
322
328
  active: boolean;
323
329
  /** Press handler. */