react-native-richify 1.0.2 → 1.0.4
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/lib/commonjs/components/OverlayText.d.js.map +1 -1
- package/lib/commonjs/components/OverlayText.js +8 -2
- package/lib/commonjs/components/OverlayText.js.map +1 -1
- package/lib/commonjs/components/RichTextInput.d.js.map +1 -1
- package/lib/commonjs/components/RichTextInput.js +73 -45
- package/lib/commonjs/components/RichTextInput.js.map +1 -1
- package/lib/commonjs/components/Toolbar.d.js.map +1 -1
- package/lib/commonjs/components/Toolbar.js +4 -7
- package/lib/commonjs/components/Toolbar.js.map +1 -1
- package/lib/commonjs/components/ToolbarButton.d.js.map +1 -1
- package/lib/commonjs/components/ToolbarButton.js.map +1 -1
- package/lib/commonjs/constants/defaultStyles.d.js.map +1 -1
- package/lib/commonjs/constants/defaultStyles.js +26 -1
- package/lib/commonjs/constants/defaultStyles.js.map +1 -1
- package/lib/commonjs/context/RichTextContext.d.js.map +1 -1
- package/lib/commonjs/context/RichTextContext.js.map +1 -1
- package/lib/commonjs/hooks/useFormatting.d.js.map +1 -1
- package/lib/commonjs/hooks/useFormatting.js +7 -1
- package/lib/commonjs/hooks/useFormatting.js.map +1 -1
- package/lib/commonjs/hooks/useRichText.d.js.map +1 -1
- package/lib/commonjs/hooks/useRichText.js +62 -7
- package/lib/commonjs/hooks/useRichText.js.map +1 -1
- package/lib/commonjs/hooks/useSelection.d.js.map +1 -1
- package/lib/commonjs/hooks/useSelection.js.map +1 -1
- package/lib/commonjs/index.d.js +19 -0
- package/lib/commonjs/index.d.js.map +1 -1
- package/lib/commonjs/index.js +19 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/types/index.d.js.map +1 -1
- package/lib/commonjs/types/index.js.map +1 -1
- package/lib/commonjs/utils/formatter.d.js.map +1 -1
- package/lib/commonjs/utils/formatter.js +1 -4
- package/lib/commonjs/utils/formatter.js.map +1 -1
- package/lib/commonjs/utils/parser.d.js.map +1 -1
- package/lib/commonjs/utils/parser.js.map +1 -1
- package/lib/commonjs/utils/serializer.d.js +6 -0
- package/lib/commonjs/utils/serializer.d.js.map +1 -0
- package/lib/commonjs/utils/serializer.js +163 -0
- package/lib/commonjs/utils/serializer.js.map +1 -0
- package/lib/commonjs/utils/styleMapper.d.js.map +1 -1
- package/lib/commonjs/utils/styleMapper.js.map +1 -1
- package/lib/module/components/OverlayText.d.js.map +1 -1
- package/lib/module/components/OverlayText.js +8 -2
- package/lib/module/components/OverlayText.js.map +1 -1
- package/lib/module/components/RichTextInput.d.js.map +1 -1
- package/lib/module/components/RichTextInput.js +75 -48
- package/lib/module/components/RichTextInput.js.map +1 -1
- package/lib/module/components/Toolbar.d.js.map +1 -1
- package/lib/module/components/Toolbar.js +4 -7
- package/lib/module/components/Toolbar.js.map +1 -1
- package/lib/module/components/ToolbarButton.d.js.map +1 -1
- package/lib/module/components/ToolbarButton.js.map +1 -1
- package/lib/module/constants/defaultStyles.d.js.map +1 -1
- package/lib/module/constants/defaultStyles.js +26 -1
- package/lib/module/constants/defaultStyles.js.map +1 -1
- package/lib/module/context/RichTextContext.d.js.map +1 -1
- package/lib/module/context/RichTextContext.js.map +1 -1
- package/lib/module/hooks/useFormatting.d.js.map +1 -1
- package/lib/module/hooks/useFormatting.js +7 -1
- package/lib/module/hooks/useFormatting.js.map +1 -1
- package/lib/module/hooks/useRichText.d.js.map +1 -1
- package/lib/module/hooks/useRichText.js +62 -7
- package/lib/module/hooks/useRichText.js.map +1 -1
- package/lib/module/hooks/useSelection.d.js.map +1 -1
- package/lib/module/hooks/useSelection.js.map +1 -1
- package/lib/module/index.d.js +1 -0
- package/lib/module/index.d.js.map +1 -1
- package/lib/module/index.js +1 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/types/index.d.js.map +1 -1
- package/lib/module/types/index.js.map +1 -1
- package/lib/module/utils/formatter.d.js.map +1 -1
- package/lib/module/utils/formatter.js +1 -4
- package/lib/module/utils/formatter.js.map +1 -1
- package/lib/module/utils/parser.d.js.map +1 -1
- package/lib/module/utils/parser.js.map +1 -1
- package/lib/module/utils/serializer.d.js +4 -0
- package/lib/module/utils/serializer.d.js.map +1 -0
- package/lib/module/utils/serializer.js +157 -0
- package/lib/module/utils/serializer.js.map +1 -0
- package/lib/module/utils/styleMapper.d.js.map +1 -1
- package/lib/module/utils/styleMapper.js.map +1 -1
- package/lib/typescript/src/components/OverlayText.d.ts.map +1 -1
- package/lib/typescript/src/components/RichTextInput.d.ts +2 -13
- package/lib/typescript/src/components/RichTextInput.d.ts.map +1 -1
- package/lib/typescript/src/constants/defaultStyles.d.ts +2 -0
- 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/hooks/useRichText.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +2 -1
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/types/index.d.ts +41 -11
- package/lib/typescript/src/types/index.d.ts.map +1 -1
- package/lib/typescript/src/utils/formatter.d.ts.map +1 -1
- package/lib/typescript/src/utils/serializer.d.ts +14 -0
- package/lib/typescript/src/utils/serializer.d.ts.map +1 -0
- package/package.json +1 -1
- package/src/components/OverlayText.tsx +11 -3
- package/src/components/RichTextInput.d.ts +3 -14
- package/src/components/RichTextInput.tsx +111 -48
- package/src/components/Toolbar.d.ts +1 -1
- package/src/components/Toolbar.tsx +5 -5
- package/src/components/ToolbarButton.d.ts +1 -1
- package/src/constants/defaultStyles.d.ts +4 -2
- package/src/constants/defaultStyles.ts +26 -1
- package/src/hooks/useFormatting.ts +14 -1
- package/src/hooks/useRichText.ts +103 -10
- package/src/index.d.ts +2 -1
- package/src/index.ts +8 -0
- package/src/types/index.d.ts +41 -11
- package/src/types/index.ts +44 -11
- package/src/utils/formatter.ts +1 -5
- package/src/utils/serializer.d.ts +13 -0
- package/src/utils/serializer.ts +223 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","Text","View","segmentToTextStyle","DEFAULT_THEME","jsx","_jsx","OverlayText","memo","segments","baseTextStyle","theme","resolvedTheme","overlayStyle","overlayContainerStyle","style","pointerEvents","children","map","segment","index","text","length","textStyle","slice","displayName"],"sourceRoot":"
|
|
1
|
+
{"version":3,"names":["React","Text","View","segmentToTextStyle","DEFAULT_THEME","jsx","_jsx","OverlayText","memo","segments","baseTextStyle","theme","resolvedTheme","overlayStyle","overlayContainerStyle","resolvedBaseTextStyle","overlayTheme","style","pointerEvents","children","map","segment","index","text","length","textStyle","slice","displayName"],"sourceRoot":"../../../src","sources":["components/OverlayText.tsx"],"mappings":";;AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,IAAI,EAAEC,IAAI,QAAQ,cAAc;AAEzC,SAASC,kBAAkB,QAAQ,sBAAsB;AACzD,SAASC,aAAa,QAAQ,4BAA4B;;AAE1D;AACA;AACA;AACA;AACA;AACA;AACA;AANA,SAAAC,GAAA,IAAAC,IAAA;AAOA,OAAO,MAAMC,WAAuC,gBAAGP,KAAK,CAACQ,IAAI,CAC/D,CAAC;EAAEC,QAAQ;EAAEC,aAAa;EAAEC;AAAM,CAAC,KAAK;EACtC,MAAMC,aAAa,GAAGD,KAAK,IAAIP,aAAa;EAC5C,MAAMS,YAAY,GAChBD,aAAa,CAACE,qBAAqB,IACnCV,aAAa,CAACU,qBAAqB;EACrC,MAAMC,qBAAqB,GACzBL,aAAa,IACbE,aAAa,CAACF,aAAa,IAC3BN,aAAa,CAACM,aAAa;EAC7B,MAAMM,YAAY,GAAG;IACnB,GAAGJ,aAAa;IAChBF,aAAa,EAAEK;EACjB,CAAC;EAED,oBACET,IAAA,CAACJ,IAAI;IAACe,KAAK,EAAEJ,YAAa;IAACK,aAAa,EAAC,MAAM;IAAAC,QAAA,eAC7Cb,IAAA,CAACL,IAAI;MAACgB,KAAK,EAAEF,qBAAsB;MAAAI,QAAA,EAChCV,QAAQ,CAACW,GAAG,CAAC,CAACC,OAAO,EAAEC,KAAK,KAAK;QAChC,IAAID,OAAO,CAACE,IAAI,CAACC,MAAM,KAAK,CAAC,IAAIf,QAAQ,CAACe,MAAM,GAAG,CAAC,EAAE;UACpD,OAAO,IAAI;QACb;QAEA,MAAMC,SAAS,GAAGtB,kBAAkB,CAACkB,OAAO,EAAEL,YAAY,CAAC;QAE3D,oBACEV,IAAA,CAACL,IAAI;UAEHgB,KAAK,EAAEQ,SAAU;UAAAN,QAAA,EAEhBE,OAAO,CAACE;QAAI,GAHR,GAAGD,KAAK,IAAID,OAAO,CAACE,IAAI,CAACG,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAIrC,CAAC;MAEX,CAAC;IAAC,CACE;EAAC,CACH,CAAC;AAEX,CACF,CAAC;AAEDnB,WAAW,CAACoB,WAAW,GAAG,aAAa","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sourceRoot":"
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../../src","sources":["components/RichTextInput.d.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -1,31 +1,22 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import React, { useEffect, useCallback } from 'react';
|
|
4
|
-
import {
|
|
3
|
+
import React, { useEffect, useCallback, useMemo, useRef } from 'react';
|
|
4
|
+
import { Animated, Easing, ScrollView, StyleSheet, Text, TextInput, View } from 'react-native';
|
|
5
5
|
import { DEFAULT_THEME } from '../constants/defaultStyles';
|
|
6
|
-
import { segmentsToPlainText } from '../utils/parser';
|
|
7
6
|
import { useRichText } from '../hooks/useRichText';
|
|
8
|
-
import {
|
|
7
|
+
import { segmentsToPlainText } from '../utils/parser';
|
|
8
|
+
import { serializeSegments } from '../utils/serializer';
|
|
9
9
|
import { Toolbar } from './Toolbar';
|
|
10
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
11
|
+
const OUTPUT_PANEL_HEIGHT = 180;
|
|
12
|
+
const isJestRuntime = typeof globalThis.process?.env?.JEST_WORKER_ID === 'string';
|
|
10
13
|
|
|
11
14
|
/**
|
|
12
15
|
* RichTextInput — The main rich text editor component.
|
|
13
16
|
*
|
|
14
|
-
* Uses the
|
|
15
|
-
*
|
|
16
|
-
* - A styled `<Text>` layer behind it renders the formatted content
|
|
17
|
-
* - Both share identical font metrics for pixel-perfect alignment
|
|
18
|
-
*
|
|
19
|
-
* @example
|
|
20
|
-
* ```tsx
|
|
21
|
-
* <RichTextInput
|
|
22
|
-
* placeholder="Start typing..."
|
|
23
|
-
* showToolbar
|
|
24
|
-
* onChangeSegments={(segments) => console.log(segments)}
|
|
25
|
-
* />
|
|
26
|
-
* ```
|
|
17
|
+
* Uses a plain `TextInput` for editing and renders the serialized rich output
|
|
18
|
+
* below it as Markdown or HTML.
|
|
27
19
|
*/
|
|
28
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
29
20
|
export const RichTextInput = ({
|
|
30
21
|
initialSegments,
|
|
31
22
|
onChangeSegments,
|
|
@@ -37,6 +28,9 @@ export const RichTextInput = ({
|
|
|
37
28
|
toolbarPosition = 'top',
|
|
38
29
|
toolbarItems,
|
|
39
30
|
theme,
|
|
31
|
+
showOutputPreview = true,
|
|
32
|
+
outputFormat = 'markdown',
|
|
33
|
+
onChangeOutput,
|
|
40
34
|
multiline = true,
|
|
41
35
|
minHeight = 120,
|
|
42
36
|
maxHeight,
|
|
@@ -46,6 +40,7 @@ export const RichTextInput = ({
|
|
|
46
40
|
onReady
|
|
47
41
|
}) => {
|
|
48
42
|
const resolvedTheme = theme ?? DEFAULT_THEME;
|
|
43
|
+
const previewProgress = useRef(new Animated.Value(0)).current;
|
|
49
44
|
const {
|
|
50
45
|
state,
|
|
51
46
|
actions
|
|
@@ -54,16 +49,27 @@ export const RichTextInput = ({
|
|
|
54
49
|
onChangeSegments,
|
|
55
50
|
onChangeText
|
|
56
51
|
});
|
|
57
|
-
|
|
58
|
-
// Expose actions via onReady callback
|
|
59
52
|
useEffect(() => {
|
|
60
53
|
onReady?.(actions);
|
|
61
|
-
}, [
|
|
62
|
-
|
|
63
|
-
// Build plain text for the TextInput value
|
|
54
|
+
}, [actions, onReady]);
|
|
64
55
|
const plainText = segmentsToPlainText(state.segments);
|
|
65
|
-
|
|
66
|
-
|
|
56
|
+
const serializedOutput = useMemo(() => serializeSegments(state.segments, outputFormat), [outputFormat, state.segments]);
|
|
57
|
+
const shouldShowOutputPreview = showOutputPreview && plainText.length > 0;
|
|
58
|
+
useEffect(() => {
|
|
59
|
+
onChangeOutput?.(serializedOutput, outputFormat);
|
|
60
|
+
}, [onChangeOutput, outputFormat, serializedOutput]);
|
|
61
|
+
useEffect(() => {
|
|
62
|
+
if (isJestRuntime) {
|
|
63
|
+
previewProgress.setValue(shouldShowOutputPreview ? 1 : 0);
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
Animated.timing(previewProgress, {
|
|
67
|
+
toValue: shouldShowOutputPreview ? 1 : 0,
|
|
68
|
+
duration: 180,
|
|
69
|
+
easing: Easing.out(Easing.cubic),
|
|
70
|
+
useNativeDriver: false
|
|
71
|
+
}).start();
|
|
72
|
+
}, [previewProgress, shouldShowOutputPreview]);
|
|
67
73
|
const onSelectionChange = useCallback(e => {
|
|
68
74
|
const {
|
|
69
75
|
start,
|
|
@@ -74,21 +80,33 @@ export const RichTextInput = ({
|
|
|
74
80
|
end
|
|
75
81
|
});
|
|
76
82
|
}, [actions]);
|
|
77
|
-
|
|
78
|
-
// Container style
|
|
79
83
|
const containerStyle = [resolvedTheme.containerStyle ?? DEFAULT_THEME.containerStyle];
|
|
80
|
-
|
|
81
|
-
// Input area style
|
|
82
84
|
const inputAreaStyle = [styles.inputArea, {
|
|
83
85
|
minHeight
|
|
84
86
|
}, maxHeight ? {
|
|
85
87
|
maxHeight
|
|
86
88
|
} : undefined];
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
89
|
+
const inputStyle = [styles.textInput, resolvedTheme.baseTextStyle ?? DEFAULT_THEME.baseTextStyle, resolvedTheme.inputStyle ?? DEFAULT_THEME.inputStyle, textInputProps?.style];
|
|
90
|
+
const outputAnimatedStyle = {
|
|
91
|
+
maxHeight: previewProgress.interpolate({
|
|
92
|
+
inputRange: [0, 1],
|
|
93
|
+
outputRange: [0, OUTPUT_PANEL_HEIGHT]
|
|
94
|
+
}),
|
|
95
|
+
opacity: previewProgress,
|
|
96
|
+
marginTop: previewProgress.interpolate({
|
|
97
|
+
inputRange: [0, 1],
|
|
98
|
+
outputRange: [0, 12]
|
|
99
|
+
}),
|
|
100
|
+
transform: [{
|
|
101
|
+
translateY: previewProgress.interpolate({
|
|
102
|
+
inputRange: [0, 1],
|
|
103
|
+
outputRange: [-8, 0]
|
|
104
|
+
})
|
|
105
|
+
}]
|
|
106
|
+
};
|
|
107
|
+
const outputContainerStyle = [resolvedTheme.outputContainerStyle ?? DEFAULT_THEME.outputContainerStyle];
|
|
108
|
+
const outputLabelStyle = [resolvedTheme.outputLabelStyle ?? DEFAULT_THEME.outputLabelStyle];
|
|
109
|
+
const outputTextStyle = [resolvedTheme.outputTextStyle ?? DEFAULT_THEME.outputTextStyle];
|
|
92
110
|
const toolbarComponent = showToolbar ? /*#__PURE__*/_jsx(Toolbar, {
|
|
93
111
|
actions: actions,
|
|
94
112
|
state: state,
|
|
@@ -96,8 +114,6 @@ export const RichTextInput = ({
|
|
|
96
114
|
theme: resolvedTheme,
|
|
97
115
|
renderToolbar: renderToolbar
|
|
98
116
|
}) : null;
|
|
99
|
-
|
|
100
|
-
// Toolbar border
|
|
101
117
|
const toolbarBorderStyle = toolbarPosition === 'top' ? {
|
|
102
118
|
borderBottomWidth: 1,
|
|
103
119
|
borderBottomColor: resolvedTheme.colors?.toolbarBorder ?? DEFAULT_THEME.colors?.toolbarBorder
|
|
@@ -112,11 +128,7 @@ export const RichTextInput = ({
|
|
|
112
128
|
children: toolbarComponent
|
|
113
129
|
}), /*#__PURE__*/_jsxs(View, {
|
|
114
130
|
style: inputAreaStyle,
|
|
115
|
-
children: [/*#__PURE__*/_jsx(
|
|
116
|
-
segments: state.segments,
|
|
117
|
-
baseTextStyle: resolvedTheme.baseTextStyle,
|
|
118
|
-
theme: resolvedTheme
|
|
119
|
-
}), /*#__PURE__*/_jsx(TextInput, {
|
|
131
|
+
children: [/*#__PURE__*/_jsx(TextInput, {
|
|
120
132
|
...textInputProps,
|
|
121
133
|
style: inputStyle,
|
|
122
134
|
value: plainText,
|
|
@@ -130,7 +142,24 @@ export const RichTextInput = ({
|
|
|
130
142
|
autoFocus: autoFocus,
|
|
131
143
|
selectionColor: resolvedTheme.colors?.cursor ?? DEFAULT_THEME.colors?.cursor,
|
|
132
144
|
textAlignVertical: "top",
|
|
133
|
-
scrollEnabled:
|
|
145
|
+
scrollEnabled: typeof maxHeight === 'number'
|
|
146
|
+
}), showOutputPreview && /*#__PURE__*/_jsx(Animated.View, {
|
|
147
|
+
pointerEvents: shouldShowOutputPreview ? 'auto' : 'none',
|
|
148
|
+
style: [styles.outputAnimatedWrapper, outputAnimatedStyle],
|
|
149
|
+
children: /*#__PURE__*/_jsxs(View, {
|
|
150
|
+
style: outputContainerStyle,
|
|
151
|
+
children: [/*#__PURE__*/_jsx(Text, {
|
|
152
|
+
style: outputLabelStyle,
|
|
153
|
+
children: outputFormat === 'html' ? 'HTML output' : 'Markdown output'
|
|
154
|
+
}), /*#__PURE__*/_jsx(ScrollView, {
|
|
155
|
+
showsVerticalScrollIndicator: false,
|
|
156
|
+
children: /*#__PURE__*/_jsx(Text, {
|
|
157
|
+
selectable: true,
|
|
158
|
+
style: outputTextStyle,
|
|
159
|
+
children: serializedOutput
|
|
160
|
+
})
|
|
161
|
+
})]
|
|
162
|
+
})
|
|
134
163
|
})]
|
|
135
164
|
}), toolbarPosition === 'bottom' && toolbarComponent && /*#__PURE__*/_jsx(View, {
|
|
136
165
|
style: toolbarBorderStyle,
|
|
@@ -144,12 +173,10 @@ const styles = StyleSheet.create({
|
|
|
144
173
|
position: 'relative'
|
|
145
174
|
},
|
|
146
175
|
textInput: {
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
position: 'relative',
|
|
152
|
-
zIndex: 1
|
|
176
|
+
position: 'relative'
|
|
177
|
+
},
|
|
178
|
+
outputAnimatedWrapper: {
|
|
179
|
+
overflow: 'hidden'
|
|
153
180
|
}
|
|
154
181
|
});
|
|
155
182
|
//# sourceMappingURL=RichTextInput.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useEffect","useCallback","
|
|
1
|
+
{"version":3,"names":["React","useEffect","useCallback","useMemo","useRef","Animated","Easing","ScrollView","StyleSheet","Text","TextInput","View","DEFAULT_THEME","useRichText","segmentsToPlainText","serializeSegments","Toolbar","jsx","_jsx","jsxs","_jsxs","OUTPUT_PANEL_HEIGHT","isJestRuntime","globalThis","process","env","JEST_WORKER_ID","RichTextInput","initialSegments","onChangeSegments","onChangeText","placeholder","editable","maxLength","showToolbar","toolbarPosition","toolbarItems","theme","showOutputPreview","outputFormat","onChangeOutput","multiline","minHeight","maxHeight","autoFocus","textInputProps","renderToolbar","onReady","resolvedTheme","previewProgress","Value","current","state","actions","plainText","segments","serializedOutput","shouldShowOutputPreview","length","setValue","timing","toValue","duration","easing","out","cubic","useNativeDriver","start","onSelectionChange","e","end","nativeEvent","selection","handleSelectionChange","containerStyle","inputAreaStyle","styles","inputArea","undefined","inputStyle","textInput","baseTextStyle","style","outputAnimatedStyle","interpolate","inputRange","outputRange","opacity","marginTop","transform","translateY","outputContainerStyle","outputLabelStyle","outputTextStyle","toolbarComponent","items","toolbarBorderStyle","borderBottomWidth","borderBottomColor","colors","toolbarBorder","borderTopWidth","borderTopColor","children","value","handleTextChange","placeholderTextColor","selectionColor","cursor","textAlignVertical","scrollEnabled","pointerEvents","outputAnimatedWrapper","showsVerticalScrollIndicator","selectable","displayName","create","position","overflow"],"sourceRoot":"../../../src","sources":["components/RichTextInput.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sourceRoot":"
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../../src","sources":["components/Toolbar.d.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -28,24 +28,21 @@ export const Toolbar = /*#__PURE__*/React.memo(({
|
|
|
28
28
|
|
|
29
29
|
// Compute active state for each item
|
|
30
30
|
const enrichedItems = useMemo(() => {
|
|
31
|
+
const selectionStyle = actions.getSelectionStyle();
|
|
31
32
|
return toolbarItems.map(item => {
|
|
32
33
|
let isActive = false;
|
|
33
34
|
if (item.format) {
|
|
34
|
-
|
|
35
|
-
const {
|
|
36
|
-
activeStyles
|
|
37
|
-
} = state;
|
|
38
|
-
isActive = !!activeStyles[item.format];
|
|
35
|
+
isActive = actions.isFormatActive(item.format);
|
|
39
36
|
}
|
|
40
37
|
if (item.heading) {
|
|
41
|
-
isActive =
|
|
38
|
+
isActive = selectionStyle.heading === item.heading;
|
|
42
39
|
}
|
|
43
40
|
return {
|
|
44
41
|
...item,
|
|
45
42
|
active: item.active ?? isActive
|
|
46
43
|
};
|
|
47
44
|
});
|
|
48
|
-
}, [
|
|
45
|
+
}, [actions, toolbarItems]);
|
|
49
46
|
|
|
50
47
|
// Custom render
|
|
51
48
|
if (renderToolbar) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useMemo","View","ScrollView","StyleSheet","DEFAULT_THEME","DEFAULT_TOOLBAR_ITEMS","ToolbarButton","jsx","_jsx","Toolbar","memo","actions","state","items","theme","visible","renderToolbar","resolvedTheme","toolbarItems","enrichedItems","map","item","isActive","format","
|
|
1
|
+
{"version":3,"names":["React","useMemo","View","ScrollView","StyleSheet","DEFAULT_THEME","DEFAULT_TOOLBAR_ITEMS","ToolbarButton","jsx","_jsx","Toolbar","memo","actions","state","items","theme","visible","renderToolbar","resolvedTheme","toolbarItems","enrichedItems","selectionStyle","getSelectionStyle","map","item","isActive","format","isFormatActive","heading","active","toolbarStyle","style","children","horizontal","showsHorizontalScrollIndicator","keyboardShouldPersistTaps","contentContainerStyle","styles","scrollContent","label","renderButton","onPress","toggleFormat","setHeading","id","displayName","create","flexDirection","alignItems","gap"],"sourceRoot":"../../../src","sources":["components/Toolbar.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sourceRoot":"
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../../src","sources":["components/ToolbarButton.d.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","TouchableOpacity","Text","StyleSheet","DEFAULT_THEME","jsx","_jsx","ToolbarButton","memo","label","active","onPress","theme","renderButton","resolvedTheme","buttonStyle","toolbarButtonStyle","toolbarButtonActiveStyle","textStyle","toolbarButtonTextStyle","toolbarButtonActiveTextStyle","styles","italicLabel","underlineLabel","strikethroughLabel","style","activeOpacity","accessibilityRole","accessibilityLabel","accessibilityState","selected","children","displayName","create","fontStyle","textDecorationLine"],"sourceRoot":"
|
|
1
|
+
{"version":3,"names":["React","TouchableOpacity","Text","StyleSheet","DEFAULT_THEME","jsx","_jsx","ToolbarButton","memo","label","active","onPress","theme","renderButton","resolvedTheme","buttonStyle","toolbarButtonStyle","toolbarButtonActiveStyle","textStyle","toolbarButtonTextStyle","toolbarButtonActiveTextStyle","styles","italicLabel","underlineLabel","strikethroughLabel","style","activeOpacity","accessibilityRole","accessibilityLabel","accessibilityState","selected","children","displayName","create","fontStyle","textDecorationLine"],"sourceRoot":"../../../src","sources":["components/ToolbarButton.tsx"],"mappings":";;AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,gBAAgB,EAAEC,IAAI,EAAEC,UAAU,QAAQ,cAAc;AAEjE,SAASC,aAAa,QAAQ,4BAA4B;;AAE1D;AACA;AACA;AACA;AAHA,SAAAC,GAAA,IAAAC,IAAA;AAIA,OAAO,MAAMC,aAA2C,gBAAGP,KAAK,CAACQ,IAAI,CACnE,CAAC;EAAEC,KAAK;EAAEC,MAAM;EAAEC,OAAO;EAAEC,KAAK;EAAEC;AAAa,CAAC,KAAK;EACnD;EACA,IAAIA,YAAY,EAAE;IAChB,OAAOA,YAAY,CAAC;MAAEH,MAAM;MAAEC,OAAO;MAAEF;IAAM,CAAC,CAAC;EACjD;EAEA,MAAMK,aAAa,GAAGF,KAAK,IAAIR,aAAa;EAE5C,MAAMW,WAAW,GAAG,CAClBD,aAAa,CAACE,kBAAkB,IAAIZ,aAAa,CAACY,kBAAkB,EACpEN,MAAM,KACLI,aAAa,CAACG,wBAAwB,IACrCb,aAAa,CAACa,wBAAwB,CAAC,CAC1C;EAED,MAAMC,SAAS,GAAG,CAChBJ,aAAa,CAACK,sBAAsB,IACpCf,aAAa,CAACe,sBAAsB,EACpCT,MAAM,KACLI,aAAa,CAACM,4BAA4B,IACzChB,aAAa,CAACgB,4BAA4B,CAAC;EAC7C;EACAX,KAAK,KAAK,GAAG,IAAIY,MAAM,CAACC,WAAW,EACnCb,KAAK,KAAK,GAAG,IAAIY,MAAM,CAACE,cAAc,EACtCd,KAAK,KAAK,GAAG,IAAIY,MAAM,CAACG,kBAAkB,CAC3C;EAED,oBACElB,IAAA,CAACL,gBAAgB;IACfwB,KAAK,EAAEV,WAAY;IACnBJ,OAAO,EAAEA,OAAQ;IACjBe,aAAa,EAAE,GAAI;IACnBC,iBAAiB,EAAC,QAAQ;IAC1BC,kBAAkB,EAAE,UAAUnB,KAAK,EAAG;IACtCoB,kBAAkB,EAAE;MAAEC,QAAQ,EAAEpB;IAAO,CAAE;IAAAqB,QAAA,eAEzCzB,IAAA,CAACJ,IAAI;MAACuB,KAAK,EAAEP,SAAU;MAAAa,QAAA,EAAEtB;IAAK,CAAO;EAAC,CACtB,CAAC;AAEvB,CACF,CAAC;AAEDF,aAAa,CAACyB,WAAW,GAAG,eAAe;AAE3C,MAAMX,MAAM,GAAGlB,UAAU,CAAC8B,MAAM,CAAC;EAC/BX,WAAW,EAAE;IACXY,SAAS,EAAE;EACb,CAAC;EACDX,cAAc,EAAE;IACdY,kBAAkB,EAAE;EACtB,CAAC;EACDX,kBAAkB,EAAE;IAClBW,kBAAkB,EAAE;EACtB;AACF,CAAC,CAAC","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sourceRoot":"
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../../src","sources":["constants/defaultStyles.d.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -10,6 +10,8 @@ export const DEFAULT_COLORS = {
|
|
|
10
10
|
placeholder: '#9CA3AF',
|
|
11
11
|
toolbarBackground: '#F9FAFB',
|
|
12
12
|
toolbarBorder: '#E5E7EB',
|
|
13
|
+
outputBackground: '#F8FAFC',
|
|
14
|
+
outputLabel: '#475569',
|
|
13
15
|
cursor: '#6366F1',
|
|
14
16
|
activeButtonBg: '#EEF2FF',
|
|
15
17
|
codeBackground: '#F3F4F6'
|
|
@@ -64,7 +66,7 @@ export const DEFAULT_THEME = {
|
|
|
64
66
|
inputStyle: {
|
|
65
67
|
fontSize: DEFAULT_BASE_TEXT_STYLE.fontSize,
|
|
66
68
|
lineHeight: DEFAULT_BASE_TEXT_STYLE.lineHeight,
|
|
67
|
-
color:
|
|
69
|
+
color: DEFAULT_COLORS.text,
|
|
68
70
|
paddingHorizontal: 16,
|
|
69
71
|
paddingVertical: 12,
|
|
70
72
|
textAlignVertical: 'top'
|
|
@@ -83,6 +85,29 @@ export const DEFAULT_THEME = {
|
|
|
83
85
|
lineHeight: DEFAULT_BASE_TEXT_STYLE.lineHeight,
|
|
84
86
|
color: DEFAULT_COLORS.text
|
|
85
87
|
},
|
|
88
|
+
outputContainerStyle: {
|
|
89
|
+
marginHorizontal: 12,
|
|
90
|
+
marginBottom: 12,
|
|
91
|
+
padding: 12,
|
|
92
|
+
borderRadius: 10,
|
|
93
|
+
borderWidth: 1,
|
|
94
|
+
borderColor: DEFAULT_COLORS.toolbarBorder,
|
|
95
|
+
backgroundColor: DEFAULT_COLORS.outputBackground
|
|
96
|
+
},
|
|
97
|
+
outputLabelStyle: {
|
|
98
|
+
marginBottom: 8,
|
|
99
|
+
fontSize: 12,
|
|
100
|
+
fontWeight: '700',
|
|
101
|
+
letterSpacing: 0.4,
|
|
102
|
+
color: DEFAULT_COLORS.outputLabel,
|
|
103
|
+
textTransform: 'uppercase'
|
|
104
|
+
},
|
|
105
|
+
outputTextStyle: {
|
|
106
|
+
fontSize: 14,
|
|
107
|
+
lineHeight: 20,
|
|
108
|
+
color: DEFAULT_COLORS.text,
|
|
109
|
+
fontFamily: 'monospace'
|
|
110
|
+
},
|
|
86
111
|
toolbarStyle: {
|
|
87
112
|
flexDirection: 'row',
|
|
88
113
|
alignItems: 'center',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["DEFAULT_COLORS","primary","background","text","placeholder","toolbarBackground","toolbarBorder","cursor","activeButtonBg","codeBackground","HEADING_FONT_SIZES","h1","h2","h3","none","DEFAULT_BASE_TEXT_STYLE","fontSize","lineHeight","color","fontFamily","undefined","EMPTY_FORMAT_STYLE","bold","italic","underline","strikethrough","code","backgroundColor","heading","DEFAULT_THEME","containerStyle","borderWidth","borderColor","borderRadius","overflow","inputStyle","paddingHorizontal","paddingVertical","textAlignVertical","overlayContainerStyle","position","top","left","right","bottom","baseTextStyle","toolbarStyle","flexDirection","alignItems","gap","toolbarButtonStyle","minWidth","justifyContent","toolbarButtonActiveStyle","toolbarButtonTextStyle","
|
|
1
|
+
{"version":3,"names":["DEFAULT_COLORS","primary","background","text","placeholder","toolbarBackground","toolbarBorder","outputBackground","outputLabel","cursor","activeButtonBg","codeBackground","HEADING_FONT_SIZES","h1","h2","h3","none","DEFAULT_BASE_TEXT_STYLE","fontSize","lineHeight","color","fontFamily","undefined","EMPTY_FORMAT_STYLE","bold","italic","underline","strikethrough","code","backgroundColor","heading","DEFAULT_THEME","containerStyle","borderWidth","borderColor","borderRadius","overflow","inputStyle","paddingHorizontal","paddingVertical","textAlignVertical","overlayContainerStyle","position","top","left","right","bottom","baseTextStyle","outputContainerStyle","marginHorizontal","marginBottom","padding","outputLabelStyle","fontWeight","letterSpacing","textTransform","outputTextStyle","toolbarStyle","flexDirection","alignItems","gap","toolbarButtonStyle","minWidth","justifyContent","toolbarButtonActiveStyle","toolbarButtonTextStyle","toolbarButtonActiveTextStyle","codeStyle","colors","DEFAULT_TOOLBAR_ITEMS","id","label","format"],"sourceRoot":"../../../src","sources":["constants/defaultStyles.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sourceRoot":"
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../../src","sources":["context/RichTextContext.d.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","createContext","useContext","useRichText","jsx","_jsx","RichTextContext","RichTextProvider","children","options","richText","Provider","value","displayName","useRichTextContext","context","Error"],"sourceRoot":"
|
|
1
|
+
{"version":3,"names":["React","createContext","useContext","useRichText","jsx","_jsx","RichTextContext","RichTextProvider","children","options","richText","Provider","value","displayName","useRichTextContext","context","Error"],"sourceRoot":"../../../src","sources":["context/RichTextContext.tsx"],"mappings":";;AAAA,OAAOA,KAAK,IAAIC,aAAa,EAAEC,UAAU,QAAQ,OAAO;AAExD,SAASC,WAAW,QAAiC,sBAAsB;;AAE3E;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAEA,MAAMC,eAAe,gBAAGL,aAAa,CAA2B,IAAI,CAAC;;AAErE;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMM,gBAAiD,GAAGA,CAAC;EAChEC,QAAQ;EACR,GAAGC;AACL,CAAC,KAAK;EACJ,MAAMC,QAAQ,GAAGP,WAAW,CAACM,OAAO,CAAC;EAErC,oBACEJ,IAAA,CAACC,eAAe,CAACK,QAAQ;IAACC,KAAK,EAAEF,QAAS;IAAAF,QAAA,EACvCA;EAAQ,CACe,CAAC;AAE/B,CAAC;AAEDD,gBAAgB,CAACM,WAAW,GAAG,kBAAkB;;AAEjD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,kBAAkBA,CAAA,EAAsB;EACtD,MAAMC,OAAO,GAAGb,UAAU,CAACI,eAAe,CAAC;EAC3C,IAAI,CAACS,OAAO,EAAE;IACZ,MAAM,IAAIC,KAAK,CACb,+DAA+D,GAC/D,oEACF,CAAC;EACH;EACA,OAAOD,OAAO;AAChB","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sourceRoot":"
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../../src","sources":["hooks/useFormatting.d.ts"],"mappings":";;AAQA;AACA;AACA;AACA;AACA;AACA;;AAWA","ignoreList":[]}
|
|
@@ -40,9 +40,15 @@ export function useFormatting({
|
|
|
40
40
|
}
|
|
41
41
|
}, [segments, selection, activeStyles, onSegmentsChange, onActiveStylesChange]);
|
|
42
42
|
const setHeading = useCallback(level => {
|
|
43
|
+
if (selection.start === selection.end) {
|
|
44
|
+
onActiveStylesChange({
|
|
45
|
+
...activeStyles,
|
|
46
|
+
heading: level === 'none' ? undefined : level
|
|
47
|
+
});
|
|
48
|
+
}
|
|
43
49
|
const newSegments = setHeadingOnLine(segments, selection, level);
|
|
44
50
|
onSegmentsChange(newSegments);
|
|
45
|
-
}, [
|
|
51
|
+
}, [activeStyles, onActiveStylesChange, onSegmentsChange, segments, selection]);
|
|
46
52
|
const setColor = useCallback(color => {
|
|
47
53
|
setStyleProperty('color', color);
|
|
48
54
|
}, [setStyleProperty]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useCallback","toggleFormatOnSelection","setStyleOnSelection","setHeadingOnLine","isFormatActiveInSelection","getSelectionStyle","useFormatting","segments","selection","activeStyles","onSegmentsChange","onActiveStylesChange","toggleFormat","format","start","end","newSegments","setStyleProperty","key","value","setHeading","level","setColor","color","setBackgroundColor","setFontSize","size","isFormatActive","currentSelectionStyle"],"sourceRoot":"
|
|
1
|
+
{"version":3,"names":["useCallback","toggleFormatOnSelection","setStyleOnSelection","setHeadingOnLine","isFormatActiveInSelection","getSelectionStyle","useFormatting","segments","selection","activeStyles","onSegmentsChange","onActiveStylesChange","toggleFormat","format","start","end","newSegments","setStyleProperty","key","value","setHeading","level","heading","undefined","setColor","color","setBackgroundColor","setFontSize","size","isFormatActive","currentSelectionStyle"],"sourceRoot":"../../../src","sources":["hooks/useFormatting.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sourceRoot":"
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../../src","sources":["hooks/useRichText.d.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
import { useState, useCallback, useRef } from 'react';
|
|
4
4
|
import { EMPTY_FORMAT_STYLE } from '../constants/defaultStyles';
|
|
5
5
|
import { createSegment, segmentsToPlainText, reconcileTextChange, findPositionInSegments } from '../utils/parser';
|
|
6
|
+
import { getSelectionStyle } from '../utils/formatter';
|
|
7
|
+
import { serializeSegments } from '../utils/serializer';
|
|
6
8
|
import { useSelection } from '../hooks/useSelection';
|
|
7
9
|
import { useFormatting } from '../hooks/useFormatting';
|
|
8
10
|
/**
|
|
@@ -37,8 +39,11 @@ export function useRichText(options = {}) {
|
|
|
37
39
|
// Refs for stable access in callbacks
|
|
38
40
|
const segmentsRef = useRef(segments);
|
|
39
41
|
segmentsRef.current = segments;
|
|
42
|
+
const selectionRef = useRef(selection);
|
|
43
|
+
selectionRef.current = selection;
|
|
40
44
|
const activeStylesRef = useRef(activeStyles);
|
|
41
45
|
activeStylesRef.current = activeStyles;
|
|
46
|
+
const preserveActiveStylesRef = useRef(false);
|
|
42
47
|
|
|
43
48
|
// ─── Segment Change Handler ──────────────────────────────────────────────
|
|
44
49
|
|
|
@@ -62,7 +67,8 @@ export function useRichText(options = {}) {
|
|
|
62
67
|
|
|
63
68
|
const handleTextChange = useCallback(newText => {
|
|
64
69
|
const currentSegments = segmentsRef.current;
|
|
65
|
-
const
|
|
70
|
+
const currentSelection = selectionRef.current;
|
|
71
|
+
const currentActiveStyles = currentSelection.start === currentSelection.end ? activeStylesRef.current : getSelectionStyle(currentSegments, currentSelection);
|
|
66
72
|
const newSegments = reconcileTextChange(currentSegments, newText, currentActiveStyles);
|
|
67
73
|
updateSegments(newSegments);
|
|
68
74
|
}, [updateSegments]);
|
|
@@ -70,7 +76,13 @@ export function useRichText(options = {}) {
|
|
|
70
76
|
// ─── Selection Change Handler ────────────────────────────────────────────
|
|
71
77
|
|
|
72
78
|
const onSelectionChange = useCallback(newSelection => {
|
|
79
|
+
const previousSelection = selectionRef.current;
|
|
73
80
|
handleSelectionChange(newSelection);
|
|
81
|
+
const shouldPreserveActiveStyles = preserveActiveStylesRef.current && previousSelection.start === previousSelection.end && newSelection.start === newSelection.end && newSelection.start >= previousSelection.start && newSelection.start - previousSelection.start <= 1;
|
|
82
|
+
if (shouldPreserveActiveStyles) {
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
preserveActiveStylesRef.current = false;
|
|
74
86
|
|
|
75
87
|
// Update active styles based on cursor position
|
|
76
88
|
if (newSelection.start === newSelection.end) {
|
|
@@ -89,6 +101,9 @@ export function useRichText(options = {}) {
|
|
|
89
101
|
const getPlainText = useCallback(() => {
|
|
90
102
|
return segmentsToPlainText(segmentsRef.current);
|
|
91
103
|
}, []);
|
|
104
|
+
const getOutput = useCallback((format = 'markdown') => {
|
|
105
|
+
return serializeSegments(segmentsRef.current, format);
|
|
106
|
+
}, []);
|
|
92
107
|
const exportJSON = useCallback(() => {
|
|
93
108
|
return JSON.parse(JSON.stringify(segmentsRef.current));
|
|
94
109
|
}, []);
|
|
@@ -101,7 +116,44 @@ export function useRichText(options = {}) {
|
|
|
101
116
|
setActiveStyles({
|
|
102
117
|
...EMPTY_FORMAT_STYLE
|
|
103
118
|
});
|
|
119
|
+
preserveActiveStylesRef.current = false;
|
|
104
120
|
}, [updateSegments]);
|
|
121
|
+
const toggleFormat = useCallback(format => {
|
|
122
|
+
if (selectionRef.current.start === selectionRef.current.end) {
|
|
123
|
+
preserveActiveStylesRef.current = true;
|
|
124
|
+
}
|
|
125
|
+
formatting.toggleFormat(format);
|
|
126
|
+
}, [formatting]);
|
|
127
|
+
const setStyleProperty = useCallback((key, value) => {
|
|
128
|
+
if (selectionRef.current.start === selectionRef.current.end) {
|
|
129
|
+
preserveActiveStylesRef.current = true;
|
|
130
|
+
}
|
|
131
|
+
formatting.setStyleProperty(key, value);
|
|
132
|
+
}, [formatting]);
|
|
133
|
+
const setHeading = useCallback(level => {
|
|
134
|
+
if (selectionRef.current.start === selectionRef.current.end) {
|
|
135
|
+
preserveActiveStylesRef.current = true;
|
|
136
|
+
}
|
|
137
|
+
formatting.setHeading(level);
|
|
138
|
+
}, [formatting]);
|
|
139
|
+
const setColor = useCallback(color => {
|
|
140
|
+
if (selectionRef.current.start === selectionRef.current.end) {
|
|
141
|
+
preserveActiveStylesRef.current = true;
|
|
142
|
+
}
|
|
143
|
+
formatting.setColor(color);
|
|
144
|
+
}, [formatting]);
|
|
145
|
+
const setBackgroundColor = useCallback(color => {
|
|
146
|
+
if (selectionRef.current.start === selectionRef.current.end) {
|
|
147
|
+
preserveActiveStylesRef.current = true;
|
|
148
|
+
}
|
|
149
|
+
formatting.setBackgroundColor(color);
|
|
150
|
+
}, [formatting]);
|
|
151
|
+
const setFontSize = useCallback(size => {
|
|
152
|
+
if (selectionRef.current.start === selectionRef.current.end) {
|
|
153
|
+
preserveActiveStylesRef.current = true;
|
|
154
|
+
}
|
|
155
|
+
formatting.setFontSize(size);
|
|
156
|
+
}, [formatting]);
|
|
105
157
|
|
|
106
158
|
// ─── Build Return Value ──────────────────────────────────────────────────
|
|
107
159
|
|
|
@@ -111,14 +163,17 @@ export function useRichText(options = {}) {
|
|
|
111
163
|
activeStyles
|
|
112
164
|
};
|
|
113
165
|
const actions = {
|
|
114
|
-
toggleFormat
|
|
115
|
-
setStyleProperty
|
|
116
|
-
setHeading
|
|
117
|
-
setColor
|
|
118
|
-
setBackgroundColor
|
|
119
|
-
setFontSize
|
|
166
|
+
toggleFormat,
|
|
167
|
+
setStyleProperty,
|
|
168
|
+
setHeading,
|
|
169
|
+
setColor,
|
|
170
|
+
setBackgroundColor,
|
|
171
|
+
setFontSize,
|
|
120
172
|
handleTextChange,
|
|
121
173
|
handleSelectionChange: onSelectionChange,
|
|
174
|
+
isFormatActive: formatting.isFormatActive,
|
|
175
|
+
getSelectionStyle: formatting.currentSelectionStyle,
|
|
176
|
+
getOutput,
|
|
122
177
|
getPlainText,
|
|
123
178
|
exportJSON,
|
|
124
179
|
importJSON,
|