react-native-richify 1.0.0 → 1.0.1
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/package.json +11 -10
- package/src/components/OverlayText.d.ts +1 -1
- package/src/components/OverlayText.tsx +3 -3
- package/src/components/RichTextInput.d.ts +1 -1
- package/src/components/RichTextInput.tsx +6 -6
- package/src/components/Toolbar.tsx +3 -3
- package/src/components/ToolbarButton.tsx +7 -7
- package/src/constants/defaultStyles.ts +1 -1
- package/src/context/RichTextContext.d.ts +2 -2
- package/src/context/RichTextContext.tsx +3 -3
- package/src/hooks/useFormatting.d.ts +2 -2
- package/src/hooks/useFormatting.ts +2 -2
- package/src/hooks/useRichText.d.ts +1 -1
- package/src/hooks/useRichText.ts +5 -5
- package/src/hooks/useSelection.d.ts +1 -1
- package/src/hooks/useSelection.ts +1 -1
- package/src/index.d.ts +15 -15
- package/src/index.ts +15 -15
- package/lib/commonjs/components/OverlayText.d.js +0 -6
- package/lib/commonjs/components/OverlayText.d.js.map +0 -1
- package/lib/commonjs/components/OverlayText.js +0 -45
- package/lib/commonjs/components/OverlayText.js.map +0 -1
- package/lib/commonjs/components/RichTextInput.d.js +0 -6
- package/lib/commonjs/components/RichTextInput.d.js.map +0 -1
- package/lib/commonjs/components/RichTextInput.js +0 -160
- package/lib/commonjs/components/RichTextInput.js.map +0 -1
- package/lib/commonjs/components/Toolbar.d.js +0 -6
- package/lib/commonjs/components/Toolbar.d.js.map +0 -1
- package/lib/commonjs/components/Toolbar.js +0 -99
- package/lib/commonjs/components/Toolbar.js.map +0 -1
- package/lib/commonjs/components/ToolbarButton.d.js +0 -6
- package/lib/commonjs/components/ToolbarButton.d.js.map +0 -1
- package/lib/commonjs/components/ToolbarButton.js +0 -63
- package/lib/commonjs/components/ToolbarButton.js.map +0 -1
- package/lib/commonjs/constants/defaultStyles.d.js +0 -6
- package/lib/commonjs/constants/defaultStyles.d.js.map +0 -1
- package/lib/commonjs/constants/defaultStyles.js +0 -172
- package/lib/commonjs/constants/defaultStyles.js.map +0 -1
- package/lib/commonjs/context/RichTextContext.d.js +0 -6
- package/lib/commonjs/context/RichTextContext.d.js.map +0 -1
- package/lib/commonjs/context/RichTextContext.js +0 -61
- package/lib/commonjs/context/RichTextContext.js.map +0 -1
- package/lib/commonjs/hooks/useFormatting.d.js +0 -6
- package/lib/commonjs/hooks/useFormatting.d.js.map +0 -1
- package/lib/commonjs/hooks/useFormatting.js +0 -82
- package/lib/commonjs/hooks/useFormatting.js.map +0 -1
- package/lib/commonjs/hooks/useRichText.d.js +0 -6
- package/lib/commonjs/hooks/useRichText.d.js.map +0 -1
- package/lib/commonjs/hooks/useRichText.js +0 -136
- package/lib/commonjs/hooks/useRichText.js.map +0 -1
- package/lib/commonjs/hooks/useSelection.d.js +0 -6
- package/lib/commonjs/hooks/useSelection.d.js.map +0 -1
- package/lib/commonjs/hooks/useSelection.js +0 -39
- package/lib/commonjs/hooks/useSelection.js.map +0 -1
- package/lib/commonjs/index.d.js +0 -186
- package/lib/commonjs/index.d.js.map +0 -1
- package/lib/commonjs/index.js +0 -186
- package/lib/commonjs/index.js.map +0 -1
- package/lib/commonjs/package.json +0 -1
- package/lib/commonjs/types/index.d.js +0 -6
- package/lib/commonjs/types/index.d.js.map +0 -1
- package/lib/commonjs/types/index.js +0 -6
- package/lib/commonjs/types/index.js.map +0 -1
- package/lib/commonjs/utils/formatter.d.js +0 -13
- package/lib/commonjs/utils/formatter.d.js.map +0 -1
- package/lib/commonjs/utils/formatter.js +0 -229
- package/lib/commonjs/utils/formatter.js.map +0 -1
- package/lib/commonjs/utils/parser.d.js +0 -6
- package/lib/commonjs/utils/parser.d.js.map +0 -1
- package/lib/commonjs/utils/parser.js +0 -221
- package/lib/commonjs/utils/parser.js.map +0 -1
- package/lib/commonjs/utils/styleMapper.d.js +0 -6
- package/lib/commonjs/utils/styleMapper.d.js.map +0 -1
- package/lib/commonjs/utils/styleMapper.js +0 -87
- package/lib/commonjs/utils/styleMapper.js.map +0 -1
- package/lib/module/components/OverlayText.d.js +0 -4
- package/lib/module/components/OverlayText.d.js.map +0 -1
- package/lib/module/components/OverlayText.js +0 -41
- package/lib/module/components/OverlayText.js.map +0 -1
- package/lib/module/components/RichTextInput.d.js +0 -4
- package/lib/module/components/RichTextInput.d.js.map +0 -1
- package/lib/module/components/RichTextInput.js +0 -155
- package/lib/module/components/RichTextInput.js.map +0 -1
- package/lib/module/components/Toolbar.d.js +0 -4
- package/lib/module/components/Toolbar.d.js.map +0 -1
- package/lib/module/components/Toolbar.js +0 -95
- package/lib/module/components/Toolbar.js.map +0 -1
- package/lib/module/components/ToolbarButton.d.js +0 -4
- package/lib/module/components/ToolbarButton.d.js.map +0 -1
- package/lib/module/components/ToolbarButton.js +0 -59
- package/lib/module/components/ToolbarButton.js.map +0 -1
- package/lib/module/constants/defaultStyles.d.js +0 -4
- package/lib/module/constants/defaultStyles.d.js.map +0 -1
- package/lib/module/constants/defaultStyles.js +0 -168
- package/lib/module/constants/defaultStyles.js.map +0 -1
- package/lib/module/context/RichTextContext.d.js +0 -4
- package/lib/module/context/RichTextContext.d.js.map +0 -1
- package/lib/module/context/RichTextContext.js +0 -55
- package/lib/module/context/RichTextContext.js.map +0 -1
- package/lib/module/hooks/useFormatting.d.js +0 -11
- package/lib/module/hooks/useFormatting.d.js.map +0 -1
- package/lib/module/hooks/useFormatting.js +0 -78
- package/lib/module/hooks/useFormatting.js.map +0 -1
- package/lib/module/hooks/useRichText.d.js +0 -4
- package/lib/module/hooks/useRichText.d.js.map +0 -1
- package/lib/module/hooks/useRichText.js +0 -132
- package/lib/module/hooks/useRichText.js.map +0 -1
- package/lib/module/hooks/useSelection.d.js +0 -4
- package/lib/module/hooks/useSelection.d.js.map +0 -1
- package/lib/module/hooks/useSelection.js +0 -35
- package/lib/module/hooks/useSelection.js.map +0 -1
- package/lib/module/index.d.js +0 -15
- package/lib/module/index.d.js.map +0 -1
- package/lib/module/index.js +0 -25
- package/lib/module/index.js.map +0 -1
- package/lib/module/types/index.d.js +0 -4
- package/lib/module/types/index.d.js.map +0 -1
- package/lib/module/types/index.js +0 -4
- package/lib/module/types/index.js.map +0 -1
- package/lib/module/utils/formatter.d.js +0 -30
- package/lib/module/utils/formatter.d.js.map +0 -1
- package/lib/module/utils/formatter.js +0 -217
- package/lib/module/utils/formatter.js.map +0 -1
- package/lib/module/utils/parser.d.js +0 -4
- package/lib/module/utils/parser.d.js.map +0 -1
- package/lib/module/utils/parser.js +0 -211
- package/lib/module/utils/parser.js.map +0 -1
- package/lib/module/utils/styleMapper.d.js +0 -4
- package/lib/module/utils/styleMapper.d.js.map +0 -1
- package/lib/module/utils/styleMapper.js +0 -82
- package/lib/module/utils/styleMapper.js.map +0 -1
- package/lib/typescript/src/components/OverlayText.d.ts +0 -11
- package/lib/typescript/src/components/OverlayText.d.ts.map +0 -1
- package/lib/typescript/src/components/RichTextInput.d.ts +0 -21
- package/lib/typescript/src/components/RichTextInput.d.ts.map +0 -1
- package/lib/typescript/src/components/Toolbar.d.ts +0 -13
- package/lib/typescript/src/components/Toolbar.d.ts.map +0 -1
- package/lib/typescript/src/components/ToolbarButton.d.ts +0 -8
- package/lib/typescript/src/components/ToolbarButton.d.ts.map +0 -1
- package/lib/typescript/src/constants/defaultStyles.d.ts +0 -46
- package/lib/typescript/src/constants/defaultStyles.d.ts.map +0 -1
- package/lib/typescript/src/context/RichTextContext.d.ts +0 -31
- package/lib/typescript/src/context/RichTextContext.d.ts.map +0 -1
- package/lib/typescript/src/hooks/useFormatting.d.ts +0 -26
- package/lib/typescript/src/hooks/useFormatting.d.ts.map +0 -1
- package/lib/typescript/src/hooks/useRichText.d.ts +0 -17
- package/lib/typescript/src/hooks/useRichText.d.ts.map +0 -1
- package/lib/typescript/src/hooks/useSelection.d.ts +0 -14
- package/lib/typescript/src/hooks/useSelection.d.ts.map +0 -1
- package/lib/typescript/src/index.d.ts +0 -16
- package/lib/typescript/src/index.d.ts.map +0 -1
- package/lib/typescript/src/types/index.d.ts +0 -245
- package/lib/typescript/src/types/index.d.ts.map +0 -1
- package/lib/typescript/src/utils/formatter.d.ts +0 -29
- package/lib/typescript/src/utils/formatter.d.ts.map +0 -1
- package/lib/typescript/src/utils/parser.d.ts +0 -46
- package/lib/typescript/src/utils/parser.d.ts.map +0 -1
- package/lib/typescript/src/utils/styleMapper.d.ts +0 -16
- package/lib/typescript/src/utils/styleMapper.d.ts.map +0 -1
|
@@ -1,229 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
Object.defineProperty(exports, "createSegment", {
|
|
7
|
-
enumerable: true,
|
|
8
|
-
get: function () {
|
|
9
|
-
return _parser.createSegment;
|
|
10
|
-
}
|
|
11
|
-
});
|
|
12
|
-
exports.getSelectionStyle = getSelectionStyle;
|
|
13
|
-
exports.isFormatActiveInSelection = isFormatActiveInSelection;
|
|
14
|
-
exports.setHeadingOnLine = setHeadingOnLine;
|
|
15
|
-
exports.setStyleOnSelection = setStyleOnSelection;
|
|
16
|
-
exports.toggleFormatOnSelection = toggleFormatOnSelection;
|
|
17
|
-
var _parser = require("@/utils/parser");
|
|
18
|
-
var _defaultStyles = require("@/constants/defaultStyles");
|
|
19
|
-
/**
|
|
20
|
-
* Toggle an inline format (bold, italic, etc.) on the selected range.
|
|
21
|
-
*
|
|
22
|
-
* If the entire selection already has the format, it is removed.
|
|
23
|
-
* Otherwise, it is applied to the entire selection.
|
|
24
|
-
*
|
|
25
|
-
* Returns the new segments array.
|
|
26
|
-
*/
|
|
27
|
-
function toggleFormatOnSelection(segments, selection, format) {
|
|
28
|
-
if (selection.start === selection.end) {
|
|
29
|
-
// No selection — return unchanged (active styles handle this case)
|
|
30
|
-
return segments;
|
|
31
|
-
}
|
|
32
|
-
const {
|
|
33
|
-
start,
|
|
34
|
-
end
|
|
35
|
-
} = normalizeSelection(selection);
|
|
36
|
-
|
|
37
|
-
// Extract the selected segments to check current state
|
|
38
|
-
const selectedSegments = extractSegmentsInRange(segments, start, end);
|
|
39
|
-
const allHaveFormat = selectedSegments.every(s => !!s.styles[format]);
|
|
40
|
-
|
|
41
|
-
// Apply or remove the format
|
|
42
|
-
return applyStyleToRange(segments, start, end, {
|
|
43
|
-
[format]: !allHaveFormat
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
/**
|
|
48
|
-
* Set a specific style property on the selected range.
|
|
49
|
-
*/
|
|
50
|
-
function setStyleOnSelection(segments, selection, key, value) {
|
|
51
|
-
if (selection.start === selection.end) {
|
|
52
|
-
return segments;
|
|
53
|
-
}
|
|
54
|
-
const {
|
|
55
|
-
start,
|
|
56
|
-
end
|
|
57
|
-
} = normalizeSelection(selection);
|
|
58
|
-
return applyStyleToRange(segments, start, end, {
|
|
59
|
-
[key]: value
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
/**
|
|
64
|
-
* Apply a heading level to the line containing the cursor/selection.
|
|
65
|
-
*/
|
|
66
|
-
function setHeadingOnLine(segments, selection, level) {
|
|
67
|
-
const plainText = (0, _parser.segmentsToPlainText)(segments);
|
|
68
|
-
const {
|
|
69
|
-
lineStart,
|
|
70
|
-
lineEnd
|
|
71
|
-
} = getLineRange(plainText, selection.start);
|
|
72
|
-
const headingStyle = {
|
|
73
|
-
heading: level,
|
|
74
|
-
fontSize: _defaultStyles.HEADING_FONT_SIZES[level],
|
|
75
|
-
bold: level !== 'none' ? true : undefined
|
|
76
|
-
};
|
|
77
|
-
return applyStyleToRange(segments, lineStart, lineEnd, headingStyle);
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
/**
|
|
81
|
-
* Checks whether the given format is active across the entire selection.
|
|
82
|
-
*/
|
|
83
|
-
function isFormatActiveInSelection(segments, selection, format) {
|
|
84
|
-
if (selection.start === selection.end) {
|
|
85
|
-
return false;
|
|
86
|
-
}
|
|
87
|
-
const {
|
|
88
|
-
start,
|
|
89
|
-
end
|
|
90
|
-
} = normalizeSelection(selection);
|
|
91
|
-
const selected = extractSegmentsInRange(segments, start, end);
|
|
92
|
-
return selected.length > 0 && selected.every(s => !!s.styles[format]);
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
/**
|
|
96
|
-
* Gets the format style that is common across the entire selection.
|
|
97
|
-
* For properties where segments disagree, the value is undefined.
|
|
98
|
-
*/
|
|
99
|
-
function getSelectionStyle(segments, selection) {
|
|
100
|
-
if (selection.start === selection.end) {
|
|
101
|
-
// Return style at cursor position
|
|
102
|
-
const pos = (0, _parser.findPositionInSegments)(segments, selection.start);
|
|
103
|
-
if (segments.length > 0) {
|
|
104
|
-
return {
|
|
105
|
-
...segments[pos.segmentIndex].styles
|
|
106
|
-
};
|
|
107
|
-
}
|
|
108
|
-
return {};
|
|
109
|
-
}
|
|
110
|
-
const {
|
|
111
|
-
start,
|
|
112
|
-
end
|
|
113
|
-
} = normalizeSelection(selection);
|
|
114
|
-
const selected = extractSegmentsInRange(segments, start, end);
|
|
115
|
-
if (selected.length === 0) return {};
|
|
116
|
-
const result = {
|
|
117
|
-
...selected[0].styles
|
|
118
|
-
};
|
|
119
|
-
for (let i = 1; i < selected.length; i++) {
|
|
120
|
-
const s = selected[i].styles;
|
|
121
|
-
if (result.bold !== undefined && result.bold !== !!s.bold) result.bold = undefined;
|
|
122
|
-
if (result.italic !== undefined && result.italic !== !!s.italic) result.italic = undefined;
|
|
123
|
-
if (result.underline !== undefined && result.underline !== !!s.underline) result.underline = undefined;
|
|
124
|
-
if (result.strikethrough !== undefined && result.strikethrough !== !!s.strikethrough) result.strikethrough = undefined;
|
|
125
|
-
if (result.code !== undefined && result.code !== !!s.code) result.code = undefined;
|
|
126
|
-
if (result.color !== s.color) result.color = undefined;
|
|
127
|
-
if (result.backgroundColor !== s.backgroundColor) result.backgroundColor = undefined;
|
|
128
|
-
if (result.fontSize !== s.fontSize) result.fontSize = undefined;
|
|
129
|
-
if (result.heading !== s.heading) result.heading = undefined;
|
|
130
|
-
}
|
|
131
|
-
return result;
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
// ─── Internal Helpers ────────────────────────────────────────────────────────
|
|
135
|
-
|
|
136
|
-
/**
|
|
137
|
-
* Normalize selection so start <= end.
|
|
138
|
-
*/
|
|
139
|
-
function normalizeSelection(selection) {
|
|
140
|
-
return {
|
|
141
|
-
start: Math.min(selection.start, selection.end),
|
|
142
|
-
end: Math.max(selection.start, selection.end)
|
|
143
|
-
};
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
/**
|
|
147
|
-
* Extract the text segments that fall within [start, end) of the global text.
|
|
148
|
-
*/
|
|
149
|
-
function extractSegmentsInRange(segments, start, end) {
|
|
150
|
-
const result = [];
|
|
151
|
-
let pos = 0;
|
|
152
|
-
for (const seg of segments) {
|
|
153
|
-
const segStart = pos;
|
|
154
|
-
const segEnd = pos + seg.text.length;
|
|
155
|
-
if (segEnd <= start) {
|
|
156
|
-
pos = segEnd;
|
|
157
|
-
continue;
|
|
158
|
-
}
|
|
159
|
-
if (segStart >= end) {
|
|
160
|
-
break;
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
// This segment overlaps with [start, end)
|
|
164
|
-
const overlapStart = Math.max(segStart, start);
|
|
165
|
-
const overlapEnd = Math.min(segEnd, end);
|
|
166
|
-
result.push((0, _parser.createSegment)(seg.text.slice(overlapStart - segStart, overlapEnd - segStart), seg.styles));
|
|
167
|
-
pos = segEnd;
|
|
168
|
-
}
|
|
169
|
-
return result;
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
/**
|
|
173
|
-
* Apply a partial style to a character range within the segments array.
|
|
174
|
-
* Splits segments at boundaries and applies the style delta to all segments in range.
|
|
175
|
-
*/
|
|
176
|
-
function applyStyleToRange(segments, start, end, styleDelta) {
|
|
177
|
-
const result = [];
|
|
178
|
-
let pos = 0;
|
|
179
|
-
for (const seg of segments) {
|
|
180
|
-
const segStart = pos;
|
|
181
|
-
const segEnd = pos + seg.text.length;
|
|
182
|
-
if (segEnd <= start || segStart >= end) {
|
|
183
|
-
// Outside the range — keep as-is
|
|
184
|
-
result.push((0, _parser.createSegment)(seg.text, seg.styles));
|
|
185
|
-
} else {
|
|
186
|
-
// Overlaps with range — may need to split
|
|
187
|
-
if (segStart < start) {
|
|
188
|
-
// Portion before the range
|
|
189
|
-
result.push((0, _parser.createSegment)(seg.text.slice(0, start - segStart), seg.styles));
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
// The overlapping portion — apply style delta
|
|
193
|
-
const overlapStart = Math.max(segStart, start);
|
|
194
|
-
const overlapEnd = Math.min(segEnd, end);
|
|
195
|
-
const newStyles = {
|
|
196
|
-
...seg.styles,
|
|
197
|
-
...styleDelta
|
|
198
|
-
};
|
|
199
|
-
result.push((0, _parser.createSegment)(seg.text.slice(overlapStart - segStart, overlapEnd - segStart), newStyles));
|
|
200
|
-
if (segEnd > end) {
|
|
201
|
-
// Portion after the range
|
|
202
|
-
result.push((0, _parser.createSegment)(seg.text.slice(end - segStart), seg.styles));
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
pos = segEnd;
|
|
206
|
-
}
|
|
207
|
-
return (0, _parser.mergeAdjacentSegments)(result);
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
/**
|
|
211
|
-
* Get the line start and end positions for the line containing the given position.
|
|
212
|
-
*/
|
|
213
|
-
function getLineRange(text, position) {
|
|
214
|
-
let lineStart = position;
|
|
215
|
-
while (lineStart > 0 && text[lineStart - 1] !== '\n') {
|
|
216
|
-
lineStart--;
|
|
217
|
-
}
|
|
218
|
-
let lineEnd = position;
|
|
219
|
-
while (lineEnd < text.length && text[lineEnd] !== '\n') {
|
|
220
|
-
lineEnd++;
|
|
221
|
-
}
|
|
222
|
-
return {
|
|
223
|
-
lineStart,
|
|
224
|
-
lineEnd
|
|
225
|
-
};
|
|
226
|
-
}
|
|
227
|
-
|
|
228
|
-
// Re-export for convenience
|
|
229
|
-
//# sourceMappingURL=formatter.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["_parser","require","_defaultStyles","toggleFormatOnSelection","segments","selection","format","start","end","normalizeSelection","selectedSegments","extractSegmentsInRange","allHaveFormat","every","s","styles","applyStyleToRange","setStyleOnSelection","key","value","setHeadingOnLine","level","plainText","segmentsToPlainText","lineStart","lineEnd","getLineRange","headingStyle","heading","fontSize","HEADING_FONT_SIZES","bold","undefined","isFormatActiveInSelection","selected","length","getSelectionStyle","pos","findPositionInSegments","segmentIndex","result","i","italic","underline","strikethrough","code","color","backgroundColor","Math","min","max","seg","segStart","segEnd","text","overlapStart","overlapEnd","push","createSegment","slice","styleDelta","newStyles","mergeAdjacentSegments","position"],"sourceRoot":"..\\..\\..\\src","sources":["utils/formatter.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":[],"sourceRoot":"..\\..\\..\\src","sources":["utils/parser.d.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -1,221 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.areStylesEqual = areStylesEqual;
|
|
7
|
-
exports.createSegment = createSegment;
|
|
8
|
-
exports.findPositionInSegments = findPositionInSegments;
|
|
9
|
-
exports.getTotalLength = getTotalLength;
|
|
10
|
-
exports.mergeAdjacentSegments = mergeAdjacentSegments;
|
|
11
|
-
exports.reconcileTextChange = reconcileTextChange;
|
|
12
|
-
exports.segmentsToPlainText = segmentsToPlainText;
|
|
13
|
-
exports.splitSegment = splitSegment;
|
|
14
|
-
var _defaultStyles = require("@/constants/defaultStyles");
|
|
15
|
-
/**
|
|
16
|
-
* Creates a new segment with the given text and optional styles.
|
|
17
|
-
*/
|
|
18
|
-
function createSegment(text, styles = {
|
|
19
|
-
..._defaultStyles.EMPTY_FORMAT_STYLE
|
|
20
|
-
}) {
|
|
21
|
-
return {
|
|
22
|
-
text,
|
|
23
|
-
styles: {
|
|
24
|
-
...styles
|
|
25
|
-
}
|
|
26
|
-
};
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* Computes the total character length across all segments.
|
|
31
|
-
*/
|
|
32
|
-
function getTotalLength(segments) {
|
|
33
|
-
return segments.reduce((sum, seg) => sum + seg.text.length, 0);
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* Converts an array of segments to plain text.
|
|
38
|
-
*/
|
|
39
|
-
function segmentsToPlainText(segments) {
|
|
40
|
-
return segments.map(s => s.text).join('');
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* Finds which segment and character offset a global position corresponds to.
|
|
45
|
-
* Returns { segmentIndex, offsetInSegment }.
|
|
46
|
-
*/
|
|
47
|
-
function findPositionInSegments(segments, globalPosition) {
|
|
48
|
-
let remaining = globalPosition;
|
|
49
|
-
for (let i = 0; i < segments.length; i++) {
|
|
50
|
-
const segLen = segments[i].text.length;
|
|
51
|
-
if (remaining <= segLen) {
|
|
52
|
-
return {
|
|
53
|
-
segmentIndex: i,
|
|
54
|
-
offsetInSegment: remaining
|
|
55
|
-
};
|
|
56
|
-
}
|
|
57
|
-
remaining -= segLen;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
// Position is past the end — return end of last segment
|
|
61
|
-
const lastIndex = Math.max(0, segments.length - 1);
|
|
62
|
-
return {
|
|
63
|
-
segmentIndex: lastIndex,
|
|
64
|
-
offsetInSegment: segments.length > 0 ? segments[lastIndex].text.length : 0
|
|
65
|
-
};
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
/**
|
|
69
|
-
* Splits a segment at the given offset, returning [before, after].
|
|
70
|
-
* If offset is 0 or at end, one side will have empty text.
|
|
71
|
-
*/
|
|
72
|
-
function splitSegment(segment, offset) {
|
|
73
|
-
const before = createSegment(segment.text.slice(0, offset), segment.styles);
|
|
74
|
-
const after = createSegment(segment.text.slice(offset), segment.styles);
|
|
75
|
-
return [before, after];
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
/**
|
|
79
|
-
* Checks if two FormatStyle objects are deeply equal.
|
|
80
|
-
*/
|
|
81
|
-
function areStylesEqual(a, b) {
|
|
82
|
-
return !!a.bold === !!b.bold && !!a.italic === !!b.italic && !!a.underline === !!b.underline && !!a.strikethrough === !!b.strikethrough && !!a.code === !!b.code && (a.color ?? undefined) === (b.color ?? undefined) && (a.backgroundColor ?? undefined) === (b.backgroundColor ?? undefined) && (a.fontSize ?? undefined) === (b.fontSize ?? undefined) && (a.heading ?? undefined) === (b.heading ?? undefined);
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
/**
|
|
86
|
-
* Merges adjacent segments that have identical styles.
|
|
87
|
-
* Returns a new array (does not mutate input).
|
|
88
|
-
*/
|
|
89
|
-
function mergeAdjacentSegments(segments) {
|
|
90
|
-
if (segments.length === 0) {
|
|
91
|
-
return [createSegment('')];
|
|
92
|
-
}
|
|
93
|
-
const result = [];
|
|
94
|
-
let last = null;
|
|
95
|
-
for (const seg of segments) {
|
|
96
|
-
// Empty segment → acts as boundary
|
|
97
|
-
if (seg.text.length === 0) {
|
|
98
|
-
last = null; // break merge chain
|
|
99
|
-
continue;
|
|
100
|
-
}
|
|
101
|
-
if (last && areStylesEqual(last.styles, seg.styles)) {
|
|
102
|
-
last.text += seg.text;
|
|
103
|
-
} else {
|
|
104
|
-
const newSeg = createSegment(seg.text, seg.styles);
|
|
105
|
-
result.push(newSeg);
|
|
106
|
-
last = newSeg;
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
// If everything was empty
|
|
111
|
-
if (result.length === 0) {
|
|
112
|
-
return [createSegment('')];
|
|
113
|
-
}
|
|
114
|
-
return result;
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
/**
|
|
118
|
-
* Given the old segments and new plain text (from TextInput onChange),
|
|
119
|
-
* reconcile the segments to preserve formatting while reflecting the text change.
|
|
120
|
-
*
|
|
121
|
-
* Strategy:
|
|
122
|
-
* 1. Find the diff region between old plain text and new plain text
|
|
123
|
-
* 2. Replace that region in the segment array
|
|
124
|
-
* 3. New text inserted at the diff point inherits the `activeStyles`
|
|
125
|
-
*/
|
|
126
|
-
function reconcileTextChange(oldSegments, newText, activeStyles) {
|
|
127
|
-
const oldText = segmentsToPlainText(oldSegments);
|
|
128
|
-
if (newText === oldText) {
|
|
129
|
-
return oldSegments;
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
// Find common prefix length
|
|
133
|
-
let prefixLen = 0;
|
|
134
|
-
const minLen = Math.min(oldText.length, newText.length);
|
|
135
|
-
while (prefixLen < minLen && oldText[prefixLen] === newText[prefixLen]) {
|
|
136
|
-
prefixLen++;
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
// Find common suffix length (from end, but not overlapping with prefix)
|
|
140
|
-
let suffixLen = 0;
|
|
141
|
-
while (suffixLen < minLen - prefixLen && oldText[oldText.length - 1 - suffixLen] === newText[newText.length - 1 - suffixLen]) {
|
|
142
|
-
suffixLen++;
|
|
143
|
-
}
|
|
144
|
-
const deleteStart = prefixLen;
|
|
145
|
-
const deleteEnd = oldText.length - suffixLen;
|
|
146
|
-
const insertedText = newText.slice(prefixLen, newText.length - suffixLen);
|
|
147
|
-
|
|
148
|
-
// Build new segments
|
|
149
|
-
// 1. Keep segments before deleteStart
|
|
150
|
-
// 2. Insert new text segment with activeStyles
|
|
151
|
-
// 3. Keep segments after deleteEnd
|
|
152
|
-
|
|
153
|
-
const result = [];
|
|
154
|
-
let pos = 0;
|
|
155
|
-
let phase = 'before';
|
|
156
|
-
let insertedNewSegment = false;
|
|
157
|
-
for (const seg of oldSegments) {
|
|
158
|
-
const segStart = pos;
|
|
159
|
-
const segEnd = pos + seg.text.length;
|
|
160
|
-
if (phase === 'before') {
|
|
161
|
-
if (segEnd <= deleteStart) {
|
|
162
|
-
// Entire segment is before delete region
|
|
163
|
-
result.push(createSegment(seg.text, seg.styles));
|
|
164
|
-
} else if (segStart < deleteStart) {
|
|
165
|
-
// Segment partially before delete region
|
|
166
|
-
result.push(createSegment(seg.text.slice(0, deleteStart - segStart), seg.styles));
|
|
167
|
-
if (!insertedNewSegment && insertedText.length > 0) {
|
|
168
|
-
result.push(createSegment(insertedText, activeStyles));
|
|
169
|
-
insertedNewSegment = true;
|
|
170
|
-
}
|
|
171
|
-
if (segEnd > deleteEnd) {
|
|
172
|
-
// Segment also extends past delete region
|
|
173
|
-
result.push(createSegment(seg.text.slice(deleteEnd - segStart), seg.styles));
|
|
174
|
-
phase = 'after';
|
|
175
|
-
} else {
|
|
176
|
-
phase = 'during';
|
|
177
|
-
}
|
|
178
|
-
} else {
|
|
179
|
-
// segStart >= deleteStart → we've reached the delete region
|
|
180
|
-
if (!insertedNewSegment && insertedText.length > 0) {
|
|
181
|
-
result.push(createSegment(insertedText, activeStyles));
|
|
182
|
-
insertedNewSegment = true;
|
|
183
|
-
}
|
|
184
|
-
if (segEnd <= deleteEnd) {
|
|
185
|
-
// Entire segment is within delete region — skip it
|
|
186
|
-
phase = segEnd === deleteEnd ? 'after' : 'during';
|
|
187
|
-
} else {
|
|
188
|
-
// Segment extends past delete region
|
|
189
|
-
result.push(createSegment(seg.text.slice(deleteEnd - segStart), seg.styles));
|
|
190
|
-
phase = 'after';
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
} else if (phase === 'during') {
|
|
194
|
-
if (!insertedNewSegment && insertedText.length > 0) {
|
|
195
|
-
result.push(createSegment(insertedText, activeStyles));
|
|
196
|
-
insertedNewSegment = true;
|
|
197
|
-
}
|
|
198
|
-
if (segEnd <= deleteEnd) {
|
|
199
|
-
// Still in delete region — skip
|
|
200
|
-
if (segEnd === deleteEnd) {
|
|
201
|
-
phase = 'after';
|
|
202
|
-
}
|
|
203
|
-
} else {
|
|
204
|
-
// Segment extends past delete region
|
|
205
|
-
result.push(createSegment(seg.text.slice(deleteEnd - segStart), seg.styles));
|
|
206
|
-
phase = 'after';
|
|
207
|
-
}
|
|
208
|
-
} else {
|
|
209
|
-
// phase === 'after'
|
|
210
|
-
result.push(createSegment(seg.text, seg.styles));
|
|
211
|
-
}
|
|
212
|
-
pos = segEnd;
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
// If we never inserted the new text (e.g., appending at end)
|
|
216
|
-
if (!insertedNewSegment && insertedText.length > 0) {
|
|
217
|
-
result.push(createSegment(insertedText, activeStyles));
|
|
218
|
-
}
|
|
219
|
-
return mergeAdjacentSegments(result);
|
|
220
|
-
}
|
|
221
|
-
//# sourceMappingURL=parser.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["_defaultStyles","require","createSegment","text","styles","EMPTY_FORMAT_STYLE","getTotalLength","segments","reduce","sum","seg","length","segmentsToPlainText","map","s","join","findPositionInSegments","globalPosition","remaining","i","segLen","segmentIndex","offsetInSegment","lastIndex","Math","max","splitSegment","segment","offset","before","slice","after","areStylesEqual","a","b","bold","italic","underline","strikethrough","code","color","undefined","backgroundColor","fontSize","heading","mergeAdjacentSegments","result","last","newSeg","push","reconcileTextChange","oldSegments","newText","activeStyles","oldText","prefixLen","minLen","min","suffixLen","deleteStart","deleteEnd","insertedText","pos","phase","insertedNewSegment","segStart","segEnd"],"sourceRoot":"..\\..\\..\\src","sources":["utils/parser.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":[],"sourceRoot":"..\\..\\..\\src","sources":["utils/styleMapper.d.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.formatStyleToTextStyle = formatStyleToTextStyle;
|
|
7
|
-
exports.segmentToTextStyle = segmentToTextStyle;
|
|
8
|
-
exports.segmentsToTextStyles = segmentsToTextStyles;
|
|
9
|
-
var _defaultStyles = require("@/constants/defaultStyles");
|
|
10
|
-
/**
|
|
11
|
-
* Maps a FormatStyle to a React Native TextStyle.
|
|
12
|
-
* Applies formatting properties based on the segment's style.
|
|
13
|
-
*/
|
|
14
|
-
function formatStyleToTextStyle(formatStyle, theme) {
|
|
15
|
-
const resolvedTheme = theme ?? _defaultStyles.DEFAULT_THEME;
|
|
16
|
-
const style = {};
|
|
17
|
-
|
|
18
|
-
// Bold
|
|
19
|
-
if (formatStyle.bold) {
|
|
20
|
-
style.fontWeight = 'bold';
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
// Italic
|
|
24
|
-
if (formatStyle.italic) {
|
|
25
|
-
style.fontStyle = 'italic';
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
// Underline and strikethrough
|
|
29
|
-
if (formatStyle.underline && formatStyle.strikethrough) {
|
|
30
|
-
style.textDecorationLine = 'underline line-through';
|
|
31
|
-
} else if (formatStyle.underline) {
|
|
32
|
-
style.textDecorationLine = 'underline';
|
|
33
|
-
} else if (formatStyle.strikethrough) {
|
|
34
|
-
style.textDecorationLine = 'line-through';
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
// Code — apply monospace font and background
|
|
38
|
-
if (formatStyle.code) {
|
|
39
|
-
const codeStyle = resolvedTheme.codeStyle ?? _defaultStyles.DEFAULT_THEME.codeStyle;
|
|
40
|
-
if (codeStyle) {
|
|
41
|
-
Object.assign(style, codeStyle);
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
// Text color
|
|
46
|
-
if (formatStyle.color) {
|
|
47
|
-
style.color = formatStyle.color;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
// Background color
|
|
51
|
-
if (formatStyle.backgroundColor) {
|
|
52
|
-
style.backgroundColor = formatStyle.backgroundColor;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
// Font size
|
|
56
|
-
if (formatStyle.fontSize) {
|
|
57
|
-
style.fontSize = formatStyle.fontSize;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
// Heading — overrides font size and weight
|
|
61
|
-
if (formatStyle.heading && formatStyle.heading !== 'none') {
|
|
62
|
-
style.fontSize = _defaultStyles.HEADING_FONT_SIZES[formatStyle.heading];
|
|
63
|
-
style.fontWeight = 'bold';
|
|
64
|
-
style.lineHeight = _defaultStyles.HEADING_FONT_SIZES[formatStyle.heading] * 1.3;
|
|
65
|
-
}
|
|
66
|
-
return style;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
/**
|
|
70
|
-
* Maps an entire segment to its computed TextStyle (base + format).
|
|
71
|
-
*/
|
|
72
|
-
function segmentToTextStyle(segment, theme) {
|
|
73
|
-
const baseStyle = theme?.baseTextStyle ?? _defaultStyles.DEFAULT_THEME.baseTextStyle ?? {};
|
|
74
|
-
const formatStyle = formatStyleToTextStyle(segment.styles, theme);
|
|
75
|
-
return {
|
|
76
|
-
...baseStyle,
|
|
77
|
-
...formatStyle
|
|
78
|
-
};
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
/**
|
|
82
|
-
* Batch-maps an array of segments to an array of TextStyles.
|
|
83
|
-
*/
|
|
84
|
-
function segmentsToTextStyles(segments, theme) {
|
|
85
|
-
return segments.map(seg => segmentToTextStyle(seg, theme));
|
|
86
|
-
}
|
|
87
|
-
//# sourceMappingURL=styleMapper.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["_defaultStyles","require","formatStyleToTextStyle","formatStyle","theme","resolvedTheme","DEFAULT_THEME","style","bold","fontWeight","italic","fontStyle","underline","strikethrough","textDecorationLine","code","codeStyle","Object","assign","color","backgroundColor","fontSize","heading","HEADING_FONT_SIZES","lineHeight","segmentToTextStyle","segment","baseStyle","baseTextStyle","styles","segmentsToTextStyles","segments","map","seg"],"sourceRoot":"..\\..\\..\\src","sources":["utils/styleMapper.ts"],"mappings":";;;;;;;;AAEA,IAAAA,cAAA,GAAAC,OAAA;AAEA;AACA;AACA;AACA;AACO,SAASC,sBAAsBA,CACpCC,WAAwB,EACxBC,KAAqB,EACV;EACX,MAAMC,aAAa,GAAGD,KAAK,IAAIE,4BAAa;EAC5C,MAAMC,KAAgB,GAAG,CAAC,CAAC;;EAE3B;EACA,IAAIJ,WAAW,CAACK,IAAI,EAAE;IACpBD,KAAK,CAACE,UAAU,GAAG,MAAM;EAC3B;;EAEA;EACA,IAAIN,WAAW,CAACO,MAAM,EAAE;IACtBH,KAAK,CAACI,SAAS,GAAG,QAAQ;EAC5B;;EAEA;EACA,IAAIR,WAAW,CAACS,SAAS,IAAIT,WAAW,CAACU,aAAa,EAAE;IACtDN,KAAK,CAACO,kBAAkB,GAAG,wBAAwB;EACrD,CAAC,MAAM,IAAIX,WAAW,CAACS,SAAS,EAAE;IAChCL,KAAK,CAACO,kBAAkB,GAAG,WAAW;EACxC,CAAC,MAAM,IAAIX,WAAW,CAACU,aAAa,EAAE;IACpCN,KAAK,CAACO,kBAAkB,GAAG,cAAc;EAC3C;;EAEA;EACA,IAAIX,WAAW,CAACY,IAAI,EAAE;IACpB,MAAMC,SAAS,GAAGX,aAAa,CAACW,SAAS,IAAIV,4BAAa,CAACU,SAAS;IACpE,IAAIA,SAAS,EAAE;MACbC,MAAM,CAACC,MAAM,CAACX,KAAK,EAAES,SAAS,CAAC;IACjC;EACF;;EAEA;EACA,IAAIb,WAAW,CAACgB,KAAK,EAAE;IACrBZ,KAAK,CAACY,KAAK,GAAGhB,WAAW,CAACgB,KAAK;EACjC;;EAEA;EACA,IAAIhB,WAAW,CAACiB,eAAe,EAAE;IAC/Bb,KAAK,CAACa,eAAe,GAAGjB,WAAW,CAACiB,eAAe;EACrD;;EAEA;EACA,IAAIjB,WAAW,CAACkB,QAAQ,EAAE;IACxBd,KAAK,CAACc,QAAQ,GAAGlB,WAAW,CAACkB,QAAQ;EACvC;;EAEA;EACA,IAAIlB,WAAW,CAACmB,OAAO,IAAInB,WAAW,CAACmB,OAAO,KAAK,MAAM,EAAE;IACzDf,KAAK,CAACc,QAAQ,GAAGE,iCAAkB,CAACpB,WAAW,CAACmB,OAAO,CAAC;IACxDf,KAAK,CAACE,UAAU,GAAG,MAAM;IACzBF,KAAK,CAACiB,UAAU,GAAGD,iCAAkB,CAACpB,WAAW,CAACmB,OAAO,CAAC,GAAG,GAAG;EAClE;EAEA,OAAOf,KAAK;AACd;;AAEA;AACA;AACA;AACO,SAASkB,kBAAkBA,CAChCC,OAAsB,EACtBtB,KAAqB,EACV;EACX,MAAMuB,SAAS,GAAGvB,KAAK,EAAEwB,aAAa,IAAItB,4BAAa,CAACsB,aAAa,IAAI,CAAC,CAAC;EAC3E,MAAMzB,WAAW,GAAGD,sBAAsB,CAACwB,OAAO,CAACG,MAAM,EAAEzB,KAAK,CAAC;EAEjE,OAAO;IACL,GAAGuB,SAAS;IACZ,GAAGxB;EACL,CAAC;AACH;;AAEA;AACA;AACA;AACO,SAAS2B,oBAAoBA,CAClCC,QAAyB,EACzB3B,KAAqB,EACR;EACb,OAAO2B,QAAQ,CAACC,GAAG,CAAEC,GAAG,IAAKR,kBAAkB,CAACQ,GAAG,EAAE7B,KAAK,CAAC,CAAC;AAC9D","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":[],"sourceRoot":"..\\..\\..\\src","sources":["components/OverlayText.d.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
import React from 'react';
|
|
4
|
-
import { Text, View } from 'react-native';
|
|
5
|
-
import { segmentToTextStyle } from '@/utils/styleMapper';
|
|
6
|
-
import { DEFAULT_THEME } from '@/constants/defaultStyles';
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* OverlayText renders the styled text segments as a `<Text>` component tree.
|
|
10
|
-
*
|
|
11
|
-
* This component is positioned behind the transparent TextInput to create
|
|
12
|
-
* the overlay effect — the user types into the TextInput while seeing
|
|
13
|
-
* the formatted rendering from this component.
|
|
14
|
-
*/
|
|
15
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
16
|
-
export const OverlayText = /*#__PURE__*/React.memo(({
|
|
17
|
-
segments,
|
|
18
|
-
baseTextStyle,
|
|
19
|
-
theme
|
|
20
|
-
}) => {
|
|
21
|
-
const resolvedTheme = theme ?? DEFAULT_THEME;
|
|
22
|
-
const overlayStyle = resolvedTheme.overlayContainerStyle ?? DEFAULT_THEME.overlayContainerStyle;
|
|
23
|
-
return /*#__PURE__*/_jsx(View, {
|
|
24
|
-
style: overlayStyle,
|
|
25
|
-
pointerEvents: "none",
|
|
26
|
-
children: /*#__PURE__*/_jsx(Text, {
|
|
27
|
-
children: segments.map((segment, index) => {
|
|
28
|
-
if (segment.text.length === 0 && segments.length > 1) {
|
|
29
|
-
return null;
|
|
30
|
-
}
|
|
31
|
-
const textStyle = segmentToTextStyle(segment, resolvedTheme);
|
|
32
|
-
return /*#__PURE__*/_jsx(Text, {
|
|
33
|
-
style: [baseTextStyle, textStyle],
|
|
34
|
-
children: segment.text
|
|
35
|
-
}, `${index}-${segment.text.slice(0, 8)}`);
|
|
36
|
-
})
|
|
37
|
-
})
|
|
38
|
-
});
|
|
39
|
-
});
|
|
40
|
-
OverlayText.displayName = 'OverlayText';
|
|
41
|
-
//# sourceMappingURL=OverlayText.js.map
|
|
@@ -1 +0,0 @@
|
|
|
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":"..\\..\\..\\src","sources":["components/OverlayText.tsx"],"mappings":";;AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,IAAI,EAAEC,IAAI,QAAQ,cAAc;AAEzC,SAASC,kBAAkB,QAAQ,qBAAqB;AACxD,SAASC,aAAa,QAAQ,2BAA2B;;AAEzD;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;EAErC,oBACER,IAAA,CAACJ,IAAI;IAACa,KAAK,EAAEF,YAAa;IAACG,aAAa,EAAC,MAAM;IAAAC,QAAA,eAC7CX,IAAA,CAACL,IAAI;MAAAgB,QAAA,EACFR,QAAQ,CAACS,GAAG,CAAC,CAACC,OAAO,EAAEC,KAAK,KAAK;QAChC,IAAID,OAAO,CAACE,IAAI,CAACC,MAAM,KAAK,CAAC,IAAIb,QAAQ,CAACa,MAAM,GAAG,CAAC,EAAE;UACpD,OAAO,IAAI;QACb;QAEA,MAAMC,SAAS,GAAGpB,kBAAkB,CAACgB,OAAO,EAAEP,aAAa,CAAC;QAE5D,oBACEN,IAAA,CAACL,IAAI;UAEHc,KAAK,EAAE,CAACL,aAAa,EAAEa,SAAS,CAAE;UAAAN,QAAA,EAEjCE,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;AAEDjB,WAAW,CAACkB,WAAW,GAAG,aAAa","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":[],"sourceRoot":"..\\..\\..\\src","sources":["components/RichTextInput.d.ts"],"mappings":"","ignoreList":[]}
|