react-native-richify 1.0.3 → 1.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/lib/commonjs/components/RenderedOutput.js +168 -0
  2. package/lib/commonjs/components/RenderedOutput.js.map +1 -0
  3. package/lib/commonjs/components/RichTextInput.js +196 -52
  4. package/lib/commonjs/components/RichTextInput.js.map +1 -1
  5. package/lib/commonjs/components/Toolbar.js +41 -2
  6. package/lib/commonjs/components/Toolbar.js.map +1 -1
  7. package/lib/commonjs/constants/defaultStyles.js +81 -2
  8. package/lib/commonjs/constants/defaultStyles.js.map +1 -1
  9. package/lib/commonjs/hooks/useFormatting.js +46 -2
  10. package/lib/commonjs/hooks/useFormatting.js.map +1 -1
  11. package/lib/commonjs/hooks/useRichText.js +130 -12
  12. package/lib/commonjs/hooks/useRichText.js.map +1 -1
  13. package/lib/commonjs/index.d.js +19 -0
  14. package/lib/commonjs/index.d.js.map +1 -1
  15. package/lib/commonjs/index.js +19 -0
  16. package/lib/commonjs/index.js.map +1 -1
  17. package/lib/commonjs/utils/formatter.js +48 -12
  18. package/lib/commonjs/utils/formatter.js.map +1 -1
  19. package/lib/commonjs/utils/parser.js +1 -1
  20. package/lib/commonjs/utils/parser.js.map +1 -1
  21. package/lib/commonjs/utils/serializer.d.js +6 -0
  22. package/lib/commonjs/utils/serializer.d.js.map +1 -0
  23. package/lib/commonjs/utils/serializer.js +259 -0
  24. package/lib/commonjs/utils/serializer.js.map +1 -0
  25. package/lib/commonjs/utils/styleMapper.js +11 -0
  26. package/lib/commonjs/utils/styleMapper.js.map +1 -1
  27. package/lib/module/components/RenderedOutput.js +163 -0
  28. package/lib/module/components/RenderedOutput.js.map +1 -0
  29. package/lib/module/components/RichTextInput.js +198 -55
  30. package/lib/module/components/RichTextInput.js.map +1 -1
  31. package/lib/module/components/Toolbar.js +41 -2
  32. package/lib/module/components/Toolbar.js.map +1 -1
  33. package/lib/module/constants/defaultStyles.js +81 -2
  34. package/lib/module/constants/defaultStyles.js.map +1 -1
  35. package/lib/module/hooks/useFormatting.js +47 -3
  36. package/lib/module/hooks/useFormatting.js.map +1 -1
  37. package/lib/module/hooks/useRichText.js +130 -12
  38. package/lib/module/hooks/useRichText.js.map +1 -1
  39. package/lib/module/index.d.js +1 -0
  40. package/lib/module/index.d.js.map +1 -1
  41. package/lib/module/index.js +1 -0
  42. package/lib/module/index.js.map +1 -1
  43. package/lib/module/utils/formatter.js +46 -12
  44. package/lib/module/utils/formatter.js.map +1 -1
  45. package/lib/module/utils/parser.js +1 -1
  46. package/lib/module/utils/parser.js.map +1 -1
  47. package/lib/module/utils/serializer.d.js +4 -0
  48. package/lib/module/utils/serializer.d.js.map +1 -0
  49. package/lib/module/utils/serializer.js +253 -0
  50. package/lib/module/utils/serializer.js.map +1 -0
  51. package/lib/module/utils/styleMapper.js +11 -0
  52. package/lib/module/utils/styleMapper.js.map +1 -1
  53. package/lib/typescript/src/components/RenderedOutput.d.ts +9 -0
  54. package/lib/typescript/src/components/RenderedOutput.d.ts.map +1 -0
  55. package/lib/typescript/src/components/RichTextInput.d.ts +2 -13
  56. package/lib/typescript/src/components/RichTextInput.d.ts.map +1 -1
  57. package/lib/typescript/src/components/Toolbar.d.ts.map +1 -1
  58. package/lib/typescript/src/constants/defaultStyles.d.ts +3 -0
  59. package/lib/typescript/src/constants/defaultStyles.d.ts.map +1 -1
  60. package/lib/typescript/src/hooks/useFormatting.d.ts +4 -1
  61. package/lib/typescript/src/hooks/useFormatting.d.ts.map +1 -1
  62. package/lib/typescript/src/hooks/useRichText.d.ts.map +1 -1
  63. package/lib/typescript/src/index.d.ts +2 -1
  64. package/lib/typescript/src/index.d.ts.map +1 -1
  65. package/lib/typescript/src/types/index.d.ts +112 -1
  66. package/lib/typescript/src/types/index.d.ts.map +1 -1
  67. package/lib/typescript/src/utils/formatter.d.ts +9 -1
  68. package/lib/typescript/src/utils/formatter.d.ts.map +1 -1
  69. package/lib/typescript/src/utils/parser.d.ts.map +1 -1
  70. package/lib/typescript/src/utils/serializer.d.ts +14 -0
  71. package/lib/typescript/src/utils/serializer.d.ts.map +1 -0
  72. package/lib/typescript/src/utils/styleMapper.d.ts.map +1 -1
  73. package/package.json +1 -1
  74. package/src/components/RenderedOutput.tsx +231 -0
  75. package/src/components/RichTextInput.d.ts +3 -14
  76. package/src/components/RichTextInput.tsx +291 -56
  77. package/src/components/Toolbar.tsx +54 -2
  78. package/src/constants/defaultStyles.d.ts +3 -0
  79. package/src/constants/defaultStyles.ts +47 -1
  80. package/src/hooks/useFormatting.ts +89 -2
  81. package/src/hooks/useRichText.ts +193 -11
  82. package/src/index.d.ts +2 -1
  83. package/src/index.ts +10 -0
  84. package/src/types/index.d.ts +112 -1
  85. package/src/types/index.ts +123 -1
  86. package/src/utils/formatter.ts +60 -10
  87. package/src/utils/parser.ts +6 -1
  88. package/src/utils/serializer.d.ts +13 -0
  89. package/src/utils/serializer.ts +365 -0
  90. package/src/utils/styleMapper.ts +21 -0
@@ -0,0 +1,168 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.RenderedOutput = void 0;
7
+ var _react = _interopRequireWildcard(require("react"));
8
+ var _reactNative = require("react-native");
9
+ var _defaultStyles = require("../constants/defaultStyles");
10
+ var _styleMapper = require("../utils/styleMapper");
11
+ var _jsxRuntime = require("react/jsx-runtime");
12
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
13
+ const RenderedOutput = exports.RenderedOutput = /*#__PURE__*/_react.default.memo(({
14
+ segments,
15
+ theme
16
+ }) => {
17
+ const resolvedTheme = theme ?? _defaultStyles.DEFAULT_THEME;
18
+ const lines = (0, _react.useMemo)(() => splitSegmentsByLine(segments), [segments]);
19
+ let orderedIndex = 0;
20
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
21
+ style: [styles.container, resolvedTheme.renderedOutputStyle ?? _defaultStyles.DEFAULT_THEME.renderedOutputStyle],
22
+ children: lines.map((line, lineIndex) => {
23
+ const listType = getLineStyle(line, 'listType');
24
+ const textAlign = getLineStyle(line, 'textAlign');
25
+ const marker = listType === 'bullet' ? '\u2022' : listType === 'ordered' ? `${orderedIndex + 1}.` : undefined;
26
+ orderedIndex = listType === 'ordered' ? orderedIndex + 1 : 0;
27
+ const textFragments = line.filter(fragment => !fragment.styles.imageSrc && fragment.text.length > 0);
28
+ const imageFragments = line.filter(fragment => !!fragment.styles.imageSrc);
29
+ const contentAlignStyle = textAlign === 'center' ? styles.alignCenter : textAlign === 'right' ? styles.alignRight : styles.alignLeft;
30
+ if (textFragments.length === 0 && imageFragments.length === 0) {
31
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
32
+ style: [styles.emptyLine, contentAlignStyle]
33
+ }, `line-${lineIndex}`);
34
+ }
35
+ const textNode = textFragments.length > 0 ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
36
+ style: [resolvedTheme.baseTextStyle ?? _defaultStyles.DEFAULT_THEME.baseTextStyle, textAlign ? {
37
+ textAlign
38
+ } : undefined],
39
+ children: textFragments.map((fragment, fragmentIndex) => /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
40
+ style: (0, _styleMapper.segmentToTextStyle)(fragment, resolvedTheme),
41
+ children: fragment.text
42
+ }, `text-${lineIndex}-${fragmentIndex}`))
43
+ }) : null;
44
+ const imageNodes = imageFragments.map((fragment, fragmentIndex) => /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
45
+ style: styles.imageBlock,
46
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Image, {
47
+ source: {
48
+ uri: fragment.styles.imageSrc
49
+ },
50
+ style: styles.image,
51
+ resizeMode: "contain"
52
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
53
+ style: [styles.imageCaption, resolvedTheme.baseTextStyle ?? _defaultStyles.DEFAULT_THEME.baseTextStyle, textAlign ? {
54
+ textAlign
55
+ } : undefined],
56
+ children: fragment.styles.imageAlt ?? extractImageAlt(fragment.text)
57
+ })]
58
+ }, `image-${lineIndex}-${fragmentIndex}`));
59
+ const content = /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
60
+ style: [styles.lineContent, contentAlignStyle],
61
+ children: [textNode, imageNodes]
62
+ });
63
+ if (!marker) {
64
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
65
+ style: styles.line,
66
+ children: content
67
+ }, `line-${lineIndex}`);
68
+ }
69
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
70
+ style: styles.listLine,
71
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
72
+ style: [styles.listMarker, resolvedTheme.baseTextStyle ?? _defaultStyles.DEFAULT_THEME.baseTextStyle],
73
+ children: marker
74
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
75
+ style: styles.listContent,
76
+ children: content
77
+ })]
78
+ }, `line-${lineIndex}`);
79
+ })
80
+ });
81
+ });
82
+ RenderedOutput.displayName = 'RenderedOutput';
83
+ function splitSegmentsByLine(segments) {
84
+ const lines = [[]];
85
+ for (const segment of segments) {
86
+ const parts = segment.text.split('\n');
87
+ parts.forEach((part, index) => {
88
+ if (part.length > 0 || segment.styles.imageSrc) {
89
+ lines[lines.length - 1]?.push({
90
+ text: part,
91
+ styles: {
92
+ ...segment.styles
93
+ }
94
+ });
95
+ }
96
+ if (index < parts.length - 1) {
97
+ lines.push([]);
98
+ }
99
+ });
100
+ }
101
+ return lines;
102
+ }
103
+ function getLineStyle(line, key) {
104
+ for (const fragment of line) {
105
+ const value = fragment.styles[key];
106
+ if (value !== undefined) {
107
+ return value;
108
+ }
109
+ }
110
+ return undefined;
111
+ }
112
+ function extractImageAlt(text) {
113
+ const normalized = text.replace(/^\[Image:\s*/i, '').replace(/^\[Image\]/i, '').replace(/\]$/, '').trim();
114
+ return normalized.length > 0 ? normalized : 'image';
115
+ }
116
+ const styles = _reactNative.StyleSheet.create({
117
+ container: {
118
+ gap: 10
119
+ },
120
+ line: {
121
+ width: '100%'
122
+ },
123
+ lineContent: {
124
+ width: '100%',
125
+ gap: 8
126
+ },
127
+ listLine: {
128
+ width: '100%',
129
+ flexDirection: 'row',
130
+ alignItems: 'flex-start',
131
+ gap: 8
132
+ },
133
+ listMarker: {
134
+ minWidth: 20,
135
+ paddingTop: 1
136
+ },
137
+ listContent: {
138
+ flex: 1
139
+ },
140
+ alignLeft: {
141
+ alignItems: 'flex-start'
142
+ },
143
+ alignCenter: {
144
+ alignItems: 'center'
145
+ },
146
+ alignRight: {
147
+ alignItems: 'flex-end'
148
+ },
149
+ emptyLine: {
150
+ minHeight: 20,
151
+ width: '100%'
152
+ },
153
+ imageBlock: {
154
+ width: '100%',
155
+ gap: 6
156
+ },
157
+ image: {
158
+ width: '100%',
159
+ height: 160,
160
+ borderRadius: 10,
161
+ backgroundColor: '#E5E7EB'
162
+ },
163
+ imageCaption: {
164
+ fontSize: 13,
165
+ opacity: 0.8
166
+ }
167
+ });
168
+ //# sourceMappingURL=RenderedOutput.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_defaultStyles","_styleMapper","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","RenderedOutput","exports","React","memo","segments","theme","resolvedTheme","DEFAULT_THEME","lines","useMemo","splitSegmentsByLine","orderedIndex","jsx","View","style","styles","container","renderedOutputStyle","children","map","line","lineIndex","listType","getLineStyle","textAlign","marker","undefined","textFragments","filter","fragment","imageSrc","text","length","imageFragments","contentAlignStyle","alignCenter","alignRight","alignLeft","emptyLine","textNode","Text","baseTextStyle","fragmentIndex","segmentToTextStyle","imageNodes","jsxs","imageBlock","Image","source","uri","image","resizeMode","imageCaption","imageAlt","extractImageAlt","content","lineContent","listLine","listMarker","listContent","displayName","segment","parts","split","forEach","part","index","push","key","value","normalized","replace","trim","StyleSheet","create","gap","width","flexDirection","alignItems","minWidth","paddingTop","flex","minHeight","height","borderRadius","backgroundColor","fontSize","opacity"],"sourceRoot":"../../../src","sources":["components/RenderedOutput.tsx"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AAEA,IAAAE,cAAA,GAAAF,OAAA;AACA,IAAAG,YAAA,GAAAH,OAAA;AAA0D,IAAAI,WAAA,GAAAJ,OAAA;AAAA,SAAAD,wBAAAM,CAAA,EAAAC,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAR,uBAAA,YAAAA,CAAAM,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAV,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA,GAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,EAAAQ,CAAA,gBAAAP,CAAA,IAAAD,CAAA,gBAAAC,CAAA,OAAAa,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAC,CAAA,OAAAM,CAAA,IAAAD,CAAA,GAAAU,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAC,CAAA,OAAAM,CAAA,CAAAK,GAAA,IAAAL,CAAA,CAAAM,GAAA,IAAAP,CAAA,CAAAE,CAAA,EAAAP,CAAA,EAAAM,CAAA,IAAAC,CAAA,CAAAP,CAAA,IAAAD,CAAA,CAAAC,CAAA,WAAAO,CAAA,KAAAR,CAAA,EAAAC,CAAA;AASnD,MAAMkB,cAA6C,GAAAC,OAAA,CAAAD,cAAA,gBAAGE,cAAK,CAACC,IAAI,CACrE,CAAC;EAAEC,QAAQ;EAAEC;AAAM,CAAC,KAAK;EACvB,MAAMC,aAAa,GAAGD,KAAK,IAAIE,4BAAa;EAC5C,MAAMC,KAAK,GAAG,IAAAC,cAAO,EAAC,MAAMC,mBAAmB,CAACN,QAAQ,CAAC,EAAE,CAACA,QAAQ,CAAC,CAAC;EACtE,IAAIO,YAAY,GAAG,CAAC;EAEpB,oBACE,IAAA/B,WAAA,CAAAgC,GAAA,EAACnC,YAAA,CAAAoC,IAAI;IACHC,KAAK,EAAE,CACLC,MAAM,CAACC,SAAS,EAChBV,aAAa,CAACW,mBAAmB,IAAIV,4BAAa,CAACU,mBAAmB,CACtE;IAAAC,QAAA,EAEDV,KAAK,CAACW,GAAG,CAAC,CAACC,IAAI,EAAEC,SAAS,KAAK;MAC9B,MAAMC,QAAQ,GAAGC,YAAY,CAACH,IAAI,EAAE,UAAU,CAAC;MAC/C,MAAMI,SAAS,GAAGD,YAAY,CAACH,IAAI,EAAE,WAAW,CAAC;MACjD,MAAMK,MAAM,GACVH,QAAQ,KAAK,QAAQ,GACjB,QAAQ,GACRA,QAAQ,KAAK,SAAS,GACpB,GAAGX,YAAY,GAAG,CAAC,GAAG,GACtBe,SAAS;MAEjBf,YAAY,GAAGW,QAAQ,KAAK,SAAS,GAAGX,YAAY,GAAG,CAAC,GAAG,CAAC;MAE5D,MAAMgB,aAAa,GAAGP,IAAI,CAACQ,MAAM,CAC9BC,QAAQ,IAAK,CAACA,QAAQ,CAACd,MAAM,CAACe,QAAQ,IAAID,QAAQ,CAACE,IAAI,CAACC,MAAM,GAAG,CACpE,CAAC;MACD,MAAMC,cAAc,GAAGb,IAAI,CAACQ,MAAM,CAAEC,QAAQ,IAAK,CAAC,CAACA,QAAQ,CAACd,MAAM,CAACe,QAAQ,CAAC;MAC5E,MAAMI,iBAAiB,GACrBV,SAAS,KAAK,QAAQ,GAClBT,MAAM,CAACoB,WAAW,GAClBX,SAAS,KAAK,OAAO,GACnBT,MAAM,CAACqB,UAAU,GACjBrB,MAAM,CAACsB,SAAS;MAExB,IAAIV,aAAa,CAACK,MAAM,KAAK,CAAC,IAAIC,cAAc,CAACD,MAAM,KAAK,CAAC,EAAE;QAC7D,oBACE,IAAApD,WAAA,CAAAgC,GAAA,EAACnC,YAAA,CAAAoC,IAAI;UAEHC,KAAK,EAAE,CAACC,MAAM,CAACuB,SAAS,EAAEJ,iBAAiB;QAAE,GADxC,QAAQb,SAAS,EAEvB,CAAC;MAEN;MAEA,MAAMkB,QAAQ,GACZZ,aAAa,CAACK,MAAM,GAAG,CAAC,gBACtB,IAAApD,WAAA,CAAAgC,GAAA,EAACnC,YAAA,CAAA+D,IAAI;QACH1B,KAAK,EAAE,CACLR,aAAa,CAACmC,aAAa,IAAIlC,4BAAa,CAACkC,aAAa,EAC1DjB,SAAS,GAAG;UAAEA;QAAU,CAAC,GAAGE,SAAS,CACrC;QAAAR,QAAA,EAEDS,aAAa,CAACR,GAAG,CAAC,CAACU,QAAQ,EAAEa,aAAa,kBACzC,IAAA9D,WAAA,CAAAgC,GAAA,EAACnC,YAAA,CAAA+D,IAAI;UAEH1B,KAAK,EAAE,IAAA6B,+BAAkB,EAACd,QAAQ,EAAmBvB,aAAa,CAAE;UAAAY,QAAA,EAEnEW,QAAQ,CAACE;QAAI,GAHT,QAAQV,SAAS,IAAIqB,aAAa,EAInC,CACP;MAAC,CACE,CAAC,GACL,IAAI;MAEV,MAAME,UAAU,GAAGX,cAAc,CAACd,GAAG,CAAC,CAACU,QAAQ,EAAEa,aAAa,kBAC5D,IAAA9D,WAAA,CAAAiE,IAAA,EAACpE,YAAA,CAAAoC,IAAI;QAA6CC,KAAK,EAAEC,MAAM,CAAC+B,UAAW;QAAA5B,QAAA,gBACzE,IAAAtC,WAAA,CAAAgC,GAAA,EAACnC,YAAA,CAAAsE,KAAK;UACJC,MAAM,EAAE;YAAEC,GAAG,EAAEpB,QAAQ,CAACd,MAAM,CAACe;UAAS,CAAE;UAC1ChB,KAAK,EAAEC,MAAM,CAACmC,KAAM;UACpBC,UAAU,EAAC;QAAS,CACrB,CAAC,eACF,IAAAvE,WAAA,CAAAgC,GAAA,EAACnC,YAAA,CAAA+D,IAAI;UACH1B,KAAK,EAAE,CACLC,MAAM,CAACqC,YAAY,EACnB9C,aAAa,CAACmC,aAAa,IAAIlC,4BAAa,CAACkC,aAAa,EAC1DjB,SAAS,GAAG;YAAEA;UAAU,CAAC,GAAGE,SAAS,CACrC;UAAAR,QAAA,EAEDW,QAAQ,CAACd,MAAM,CAACsC,QAAQ,IAAIC,eAAe,CAACzB,QAAQ,CAACE,IAAI;QAAC,CACvD,CAAC;MAAA,GAdE,SAASV,SAAS,IAAIqB,aAAa,EAexC,CACP,CAAC;MAEF,MAAMa,OAAO,gBACX,IAAA3E,WAAA,CAAAiE,IAAA,EAACpE,YAAA,CAAAoC,IAAI;QAACC,KAAK,EAAE,CAACC,MAAM,CAACyC,WAAW,EAAEtB,iBAAiB,CAAE;QAAAhB,QAAA,GAClDqB,QAAQ,EACRK,UAAU;MAAA,CACP,CACP;MAED,IAAI,CAACnB,MAAM,EAAE;QACX,oBACE,IAAA7C,WAAA,CAAAgC,GAAA,EAACnC,YAAA,CAAAoC,IAAI;UAA2BC,KAAK,EAAEC,MAAM,CAACK,IAAK;UAAAF,QAAA,EAChDqC;QAAO,GADC,QAAQlC,SAAS,EAEtB,CAAC;MAEX;MAEA,oBACE,IAAAzC,WAAA,CAAAiE,IAAA,EAACpE,YAAA,CAAAoC,IAAI;QAA2BC,KAAK,EAAEC,MAAM,CAAC0C,QAAS;QAAAvC,QAAA,gBACrD,IAAAtC,WAAA,CAAAgC,GAAA,EAACnC,YAAA,CAAA+D,IAAI;UACH1B,KAAK,EAAE,CACLC,MAAM,CAAC2C,UAAU,EACjBpD,aAAa,CAACmC,aAAa,IAAIlC,4BAAa,CAACkC,aAAa,CAC1D;UAAAvB,QAAA,EAEDO;QAAM,CACH,CAAC,eACP,IAAA7C,WAAA,CAAAgC,GAAA,EAACnC,YAAA,CAAAoC,IAAI;UAACC,KAAK,EAAEC,MAAM,CAAC4C,WAAY;UAAAzC,QAAA,EAAEqC;QAAO,CAAO,CAAC;MAAA,GATxC,QAAQlC,SAAS,EAUtB,CAAC;IAEX,CAAC;EAAC,CACE,CAAC;AAEX,CACF,CAAC;AAEDrB,cAAc,CAAC4D,WAAW,GAAG,gBAAgB;AAE7C,SAASlD,mBAAmBA,CAACN,QAAyB,EAAoB;EACxE,MAAMI,KAAuB,GAAG,CAAC,EAAE,CAAC;EAEpC,KAAK,MAAMqD,OAAO,IAAIzD,QAAQ,EAAE;IAC9B,MAAM0D,KAAK,GAAGD,OAAO,CAAC9B,IAAI,CAACgC,KAAK,CAAC,IAAI,CAAC;IAEtCD,KAAK,CAACE,OAAO,CAAC,CAACC,IAAI,EAAEC,KAAK,KAAK;MAC7B,IAAID,IAAI,CAACjC,MAAM,GAAG,CAAC,IAAI6B,OAAO,CAAC9C,MAAM,CAACe,QAAQ,EAAE;QAC9CtB,KAAK,CAACA,KAAK,CAACwB,MAAM,GAAG,CAAC,CAAC,EAAEmC,IAAI,CAAC;UAC5BpC,IAAI,EAAEkC,IAAI;UACVlD,MAAM,EAAE;YAAE,GAAG8C,OAAO,CAAC9C;UAAO;QAC9B,CAAC,CAAC;MACJ;MAEA,IAAImD,KAAK,GAAGJ,KAAK,CAAC9B,MAAM,GAAG,CAAC,EAAE;QAC5BxB,KAAK,CAAC2D,IAAI,CAAC,EAAE,CAAC;MAChB;IACF,CAAC,CAAC;EACJ;EAEA,OAAO3D,KAAK;AACd;AAEA,SAASe,YAAYA,CACnBH,IAAoB,EACpBgD,GAAM,EACU;EAChB,KAAK,MAAMvC,QAAQ,IAAIT,IAAI,EAAE;IAC3B,MAAMiD,KAAK,GAAGxC,QAAQ,CAACd,MAAM,CAACqD,GAAG,CAAC;IAClC,IAAIC,KAAK,KAAK3C,SAAS,EAAE;MACvB,OAAO2C,KAAK;IACd;EACF;EAEA,OAAO3C,SAAS;AAClB;AAEA,SAAS4B,eAAeA,CAACvB,IAAY,EAAU;EAC7C,MAAMuC,UAAU,GAAGvC,IAAI,CACpBwC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAC5BA,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAC1BA,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAClBC,IAAI,CAAC,CAAC;EAET,OAAOF,UAAU,CAACtC,MAAM,GAAG,CAAC,GAAGsC,UAAU,GAAG,OAAO;AACrD;AAEA,MAAMvD,MAAM,GAAG0D,uBAAU,CAACC,MAAM,CAAC;EAC/B1D,SAAS,EAAE;IACT2D,GAAG,EAAE;EACP,CAAC;EACDvD,IAAI,EAAE;IACJwD,KAAK,EAAE;EACT,CAAC;EACDpB,WAAW,EAAE;IACXoB,KAAK,EAAE,MAAM;IACbD,GAAG,EAAE;EACP,CAAC;EACDlB,QAAQ,EAAE;IACRmB,KAAK,EAAE,MAAM;IACbC,aAAa,EAAE,KAAK;IACpBC,UAAU,EAAE,YAAY;IACxBH,GAAG,EAAE;EACP,CAAC;EACDjB,UAAU,EAAE;IACVqB,QAAQ,EAAE,EAAE;IACZC,UAAU,EAAE;EACd,CAAC;EACDrB,WAAW,EAAE;IACXsB,IAAI,EAAE;EACR,CAAC;EACD5C,SAAS,EAAE;IACTyC,UAAU,EAAE;EACd,CAAC;EACD3C,WAAW,EAAE;IACX2C,UAAU,EAAE;EACd,CAAC;EACD1C,UAAU,EAAE;IACV0C,UAAU,EAAE;EACd,CAAC;EACDxC,SAAS,EAAE;IACT4C,SAAS,EAAE,EAAE;IACbN,KAAK,EAAE;EACT,CAAC;EACD9B,UAAU,EAAE;IACV8B,KAAK,EAAE,MAAM;IACbD,GAAG,EAAE;EACP,CAAC;EACDzB,KAAK,EAAE;IACL0B,KAAK,EAAE,MAAM;IACbO,MAAM,EAAE,GAAG;IACXC,YAAY,EAAE,EAAE;IAChBC,eAAe,EAAE;EACnB,CAAC;EACDjC,YAAY,EAAE;IACZkC,QAAQ,EAAE,EAAE;IACZC,OAAO,EAAE;EACX;AACF,CAAC,CAAC","ignoreList":[]}
@@ -7,28 +7,21 @@ exports.RichTextInput = void 0;
7
7
  var _react = _interopRequireWildcard(require("react"));
8
8
  var _reactNative = require("react-native");
9
9
  var _defaultStyles = require("../constants/defaultStyles");
10
- var _parser = require("../utils/parser");
11
10
  var _useRichText = require("../hooks/useRichText");
12
- var _OverlayText = require("./OverlayText");
11
+ var _parser = require("../utils/parser");
12
+ var _serializer = require("../utils/serializer");
13
+ var _RenderedOutput = require("./RenderedOutput");
13
14
  var _Toolbar = require("./Toolbar");
14
15
  var _jsxRuntime = require("react/jsx-runtime");
15
16
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
17
+ const DEFAULT_OUTPUT_PANEL_MAX_HEIGHT = 180;
18
+ const isJestRuntime = typeof globalThis.process?.env?.JEST_WORKER_ID === 'string';
19
+
16
20
  /**
17
21
  * RichTextInput — The main rich text editor component.
18
22
  *
19
- * Uses the Overlay Technique:
20
- * - A transparent `TextInput` on top captures user input and selection
21
- * - A styled `<Text>` layer behind it renders the formatted content
22
- * - Both share identical font metrics for pixel-perfect alignment
23
- *
24
- * @example
25
- * ```tsx
26
- * <RichTextInput
27
- * placeholder="Start typing..."
28
- * showToolbar
29
- * onChangeSegments={(segments) => console.log(segments)}
30
- * />
31
- * ```
23
+ * Uses a plain `TextInput` for editing and renders the serialized rich output
24
+ * below it as Markdown or HTML.
32
25
  */
33
26
  const RichTextInput = ({
34
27
  initialSegments,
@@ -41,6 +34,17 @@ const RichTextInput = ({
41
34
  toolbarPosition = 'top',
42
35
  toolbarItems,
43
36
  theme,
37
+ showOutputPreview = true,
38
+ outputFormat,
39
+ defaultOutputFormat = 'markdown',
40
+ outputPreviewMode,
41
+ defaultOutputPreviewMode = 'literal',
42
+ maxOutputHeight = DEFAULT_OUTPUT_PANEL_MAX_HEIGHT,
43
+ onChangeOutput,
44
+ onChangeOutputFormat,
45
+ onChangeOutputPreviewMode,
46
+ onRequestLink,
47
+ onRequestImage,
44
48
  multiline = true,
45
49
  minHeight = 120,
46
50
  maxHeight,
@@ -50,6 +54,10 @@ const RichTextInput = ({
50
54
  onReady
51
55
  }) => {
52
56
  const resolvedTheme = theme ?? _defaultStyles.DEFAULT_THEME;
57
+ const previewProgress = (0, _react.useRef)(new _reactNative.Animated.Value(0)).current;
58
+ const [internalOutputFormat, setInternalOutputFormat] = (0, _react.useState)(defaultOutputFormat);
59
+ const [internalOutputPreviewMode, setInternalOutputPreviewMode] = (0, _react.useState)(defaultOutputPreviewMode);
60
+ const [contentHeight, setContentHeight] = (0, _react.useState)(minHeight);
53
61
  const {
54
62
  state,
55
63
  actions
@@ -58,16 +66,37 @@ const RichTextInput = ({
58
66
  onChangeSegments,
59
67
  onChangeText
60
68
  });
61
-
62
- // Expose actions via onReady callback
63
69
  (0, _react.useEffect)(() => {
64
70
  onReady?.(actions);
65
- }, [onReady, actions]);
66
-
67
- // Build plain text for the TextInput value
71
+ }, [actions, onReady]);
68
72
  const plainText = (0, _parser.segmentsToPlainText)(state.segments);
69
-
70
- // Handle selection change from TextInput
73
+ const resolvedOutputFormat = outputFormat ?? internalOutputFormat;
74
+ const resolvedOutputPreviewMode = outputPreviewMode ?? internalOutputPreviewMode;
75
+ const inputHeight = Math.max(minHeight, typeof maxHeight === 'number' ? Math.min(contentHeight, maxHeight) : contentHeight);
76
+ const shouldScrollInput = typeof maxHeight === 'number' && contentHeight > maxHeight;
77
+ const serializedOutput = (0, _react.useMemo)(() => (0, _serializer.serializeSegments)(state.segments, resolvedOutputFormat), [resolvedOutputFormat, state.segments]);
78
+ const shouldShowOutputPreview = showOutputPreview && plainText.length > 0;
79
+ const normalizedSelection = (0, _react.useMemo)(() => ({
80
+ start: Math.min(state.selection.start, state.selection.end),
81
+ end: Math.max(state.selection.start, state.selection.end)
82
+ }), [state.selection.end, state.selection.start]);
83
+ const selectedText = (0, _react.useMemo)(() => plainText.slice(normalizedSelection.start, normalizedSelection.end), [normalizedSelection.end, normalizedSelection.start, plainText]);
84
+ const selectionStyle = (0, _react.useMemo)(() => actions.getSelectionStyle(), [actions, state.activeStyles, state.segments, state.selection]);
85
+ (0, _react.useEffect)(() => {
86
+ onChangeOutput?.(serializedOutput, resolvedOutputFormat);
87
+ }, [onChangeOutput, resolvedOutputFormat, serializedOutput]);
88
+ (0, _react.useEffect)(() => {
89
+ if (isJestRuntime) {
90
+ previewProgress.setValue(shouldShowOutputPreview ? 1 : 0);
91
+ return;
92
+ }
93
+ _reactNative.Animated.timing(previewProgress, {
94
+ toValue: shouldShowOutputPreview ? 1 : 0,
95
+ duration: 180,
96
+ easing: _reactNative.Easing.out(_reactNative.Easing.cubic),
97
+ useNativeDriver: false
98
+ }).start();
99
+ }, [previewProgress, shouldShowOutputPreview]);
71
100
  const onSelectionChange = (0, _react.useCallback)(e => {
72
101
  const {
73
102
  start,
@@ -78,30 +107,103 @@ const RichTextInput = ({
78
107
  end
79
108
  });
80
109
  }, [actions]);
81
-
82
- // Container style
110
+ const onContentSizeChange = (0, _react.useCallback)(e => {
111
+ setContentHeight(Math.ceil(e.nativeEvent.contentSize.height));
112
+ textInputProps?.onContentSizeChange?.(e);
113
+ }, [textInputProps]);
114
+ const handleOutputFormatChange = (0, _react.useCallback)(format => {
115
+ if (outputFormat === undefined) {
116
+ setInternalOutputFormat(format);
117
+ }
118
+ onChangeOutputFormat?.(format);
119
+ }, [onChangeOutputFormat, outputFormat]);
120
+ const handleOutputPreviewModeChange = (0, _react.useCallback)(mode => {
121
+ if (outputPreviewMode === undefined) {
122
+ setInternalOutputPreviewMode(mode);
123
+ }
124
+ onChangeOutputPreviewMode?.(mode);
125
+ }, [onChangeOutputPreviewMode, outputPreviewMode]);
126
+ const handleRequestLink = (0, _react.useCallback)(() => {
127
+ if (onRequestLink) {
128
+ onRequestLink({
129
+ selectedText,
130
+ currentUrl: selectionStyle.link,
131
+ applyLink: actions.setLink
132
+ });
133
+ return;
134
+ }
135
+ if (selectionStyle.link) {
136
+ actions.setLink(undefined);
137
+ return;
138
+ }
139
+ const detectedUrl = detectLinkTarget(selectedText);
140
+ if (detectedUrl) {
141
+ actions.setLink(detectedUrl);
142
+ }
143
+ }, [actions, onRequestLink, selectedText, selectionStyle.link]);
144
+ const handleRequestImage = (0, _react.useCallback)(() => {
145
+ if (onRequestImage) {
146
+ onRequestImage({
147
+ insertImage: actions.insertImage
148
+ });
149
+ return;
150
+ }
151
+ const detectedSource = detectImageSource(selectedText);
152
+ if (detectedSource) {
153
+ actions.insertImage(detectedSource, {
154
+ alt: selectedText.trim() || undefined
155
+ });
156
+ }
157
+ }, [actions, onRequestImage, selectedText]);
158
+ const outputLabel = (0, _react.useMemo)(() => {
159
+ const formatLabel = resolvedOutputFormat === 'html' ? 'HTML' : 'Markdown';
160
+ if (resolvedOutputPreviewMode === 'rendered') {
161
+ return `${formatLabel} preview`;
162
+ }
163
+ return `${formatLabel} output`;
164
+ }, [resolvedOutputFormat, resolvedOutputPreviewMode]);
83
165
  const containerStyle = [resolvedTheme.containerStyle ?? _defaultStyles.DEFAULT_THEME.containerStyle];
84
-
85
- // Input area style
86
- const inputAreaStyle = [styles.inputArea, {
87
- minHeight
88
- }, maxHeight ? {
89
- maxHeight
90
- } : undefined];
91
-
92
- // Input style
93
- const inputStyle = [styles.textInput, resolvedTheme.baseTextStyle ?? _defaultStyles.DEFAULT_THEME.baseTextStyle, resolvedTheme.inputStyle ?? _defaultStyles.DEFAULT_THEME.inputStyle, textInputProps?.style, styles.hiddenInputText];
94
-
95
- // Toolbar component
166
+ const inputAreaStyle = [styles.inputArea];
167
+ const inputStyle = [styles.textInput, resolvedTheme.baseTextStyle ?? _defaultStyles.DEFAULT_THEME.baseTextStyle, resolvedTheme.inputStyle ?? _defaultStyles.DEFAULT_THEME.inputStyle, {
168
+ height: inputHeight
169
+ }, textInputProps?.style];
170
+ const outputAnimatedStyle = {
171
+ maxHeight: previewProgress.interpolate({
172
+ inputRange: [0, 1],
173
+ outputRange: [0, maxOutputHeight + 72]
174
+ }),
175
+ opacity: previewProgress,
176
+ marginTop: previewProgress.interpolate({
177
+ inputRange: [0, 1],
178
+ outputRange: [0, 12]
179
+ }),
180
+ marginBottom: previewProgress.interpolate({
181
+ inputRange: [0, 1],
182
+ outputRange: [0, 16]
183
+ }),
184
+ transform: [{
185
+ translateY: previewProgress.interpolate({
186
+ inputRange: [0, 1],
187
+ outputRange: [-8, 0]
188
+ })
189
+ }]
190
+ };
191
+ const outputContainerStyle = [resolvedTheme.outputContainerStyle ?? _defaultStyles.DEFAULT_THEME.outputContainerStyle];
192
+ const outputLabelStyle = [resolvedTheme.outputLabelStyle ?? _defaultStyles.DEFAULT_THEME.outputLabelStyle];
193
+ const outputTextStyle = [resolvedTheme.outputTextStyle ?? _defaultStyles.DEFAULT_THEME.outputTextStyle];
96
194
  const toolbarComponent = showToolbar ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_Toolbar.Toolbar, {
97
195
  actions: actions,
98
196
  state: state,
99
197
  items: toolbarItems,
100
198
  theme: resolvedTheme,
199
+ outputFormat: resolvedOutputFormat,
200
+ outputPreviewMode: resolvedOutputPreviewMode,
201
+ onOutputFormatChange: handleOutputFormatChange,
202
+ onOutputPreviewModeChange: handleOutputPreviewModeChange,
203
+ onRequestLink: handleRequestLink,
204
+ onRequestImage: handleRequestImage,
101
205
  renderToolbar: renderToolbar
102
206
  }) : null;
103
-
104
- // Toolbar border
105
207
  const toolbarBorderStyle = toolbarPosition === 'top' ? {
106
208
  borderBottomWidth: 1,
107
209
  borderBottomColor: resolvedTheme.colors?.toolbarBorder ?? _defaultStyles.DEFAULT_THEME.colors?.toolbarBorder
@@ -116,26 +218,45 @@ const RichTextInput = ({
116
218
  children: toolbarComponent
117
219
  }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
118
220
  style: inputAreaStyle,
119
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_OverlayText.OverlayText, {
120
- segments: state.segments,
121
- baseTextStyle: resolvedTheme.baseTextStyle,
122
- theme: resolvedTheme
123
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TextInput, {
221
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TextInput, {
124
222
  ...textInputProps,
125
223
  style: inputStyle,
126
224
  value: plainText,
127
225
  onChangeText: actions.handleTextChange,
128
226
  onSelectionChange: onSelectionChange,
227
+ onContentSizeChange: onContentSizeChange,
129
228
  multiline: multiline,
130
229
  placeholder: placeholder,
131
230
  placeholderTextColor: resolvedTheme.colors?.placeholder ?? _defaultStyles.DEFAULT_THEME.colors?.placeholder,
132
231
  editable: editable,
133
232
  maxLength: maxLength,
134
233
  autoFocus: autoFocus,
135
- underlineColorAndroid: "transparent",
136
234
  selectionColor: resolvedTheme.colors?.cursor ?? _defaultStyles.DEFAULT_THEME.colors?.cursor,
137
235
  textAlignVertical: "top",
138
- scrollEnabled: typeof maxHeight === 'number'
236
+ scrollEnabled: shouldScrollInput
237
+ }), showOutputPreview && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Animated.View, {
238
+ pointerEvents: shouldShowOutputPreview ? 'auto' : 'none',
239
+ style: [styles.outputAnimatedWrapper, outputAnimatedStyle],
240
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
241
+ style: outputContainerStyle,
242
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
243
+ style: outputLabelStyle,
244
+ children: outputLabel
245
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.ScrollView, {
246
+ style: {
247
+ maxHeight: maxOutputHeight
248
+ },
249
+ showsVerticalScrollIndicator: false,
250
+ children: resolvedOutputPreviewMode === 'rendered' ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_RenderedOutput.RenderedOutput, {
251
+ segments: state.segments,
252
+ theme: resolvedTheme
253
+ }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
254
+ selectable: true,
255
+ style: outputTextStyle,
256
+ children: serializedOutput
257
+ })
258
+ })]
259
+ })
139
260
  })]
140
261
  }), toolbarPosition === 'bottom' && toolbarComponent && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
141
262
  style: toolbarBorderStyle,
@@ -150,14 +271,37 @@ const styles = _reactNative.StyleSheet.create({
150
271
  position: 'relative'
151
272
  },
152
273
  textInput: {
153
- position: 'relative',
154
- zIndex: 1
274
+ position: 'relative'
155
275
  },
156
- hiddenInputText: {
157
- // Keep the editable layer invisible while preserving the caret.
158
- color: 'transparent',
159
- backgroundColor: 'transparent',
160
- textShadowColor: 'transparent'
276
+ outputAnimatedWrapper: {
277
+ overflow: 'hidden'
161
278
  }
162
279
  });
280
+ function detectLinkTarget(value) {
281
+ const trimmed = value.trim();
282
+ if (trimmed.length === 0) {
283
+ return undefined;
284
+ }
285
+ if (/^https?:\/\//i.test(trimmed) || /^mailto:/i.test(trimmed)) {
286
+ return trimmed;
287
+ }
288
+ if (/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(trimmed)) {
289
+ return `mailto:${trimmed}`;
290
+ }
291
+ if (/^[^\s]+\.[^\s]+$/.test(trimmed)) {
292
+ return `https://${trimmed}`;
293
+ }
294
+ return undefined;
295
+ }
296
+ function detectImageSource(value) {
297
+ const normalized = detectLinkTarget(value);
298
+ if (!normalized) {
299
+ return undefined;
300
+ }
301
+ const candidate = normalized.replace(/^mailto:/i, '');
302
+ if (/\.(png|jpe?g|gif|webp|svg)(\?.*)?$/i.test(candidate)) {
303
+ return normalized;
304
+ }
305
+ return undefined;
306
+ }
163
307
  //# sourceMappingURL=RichTextInput.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_defaultStyles","_parser","_useRichText","_OverlayText","_Toolbar","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","RichTextInput","initialSegments","onChangeSegments","onChangeText","placeholder","editable","maxLength","showToolbar","toolbarPosition","toolbarItems","theme","multiline","minHeight","maxHeight","autoFocus","textInputProps","renderToolbar","onReady","resolvedTheme","DEFAULT_THEME","state","actions","useRichText","useEffect","plainText","segmentsToPlainText","segments","onSelectionChange","useCallback","start","end","nativeEvent","selection","handleSelectionChange","containerStyle","inputAreaStyle","styles","inputArea","undefined","inputStyle","textInput","baseTextStyle","style","hiddenInputText","toolbarComponent","jsx","Toolbar","items","toolbarBorderStyle","borderBottomWidth","borderBottomColor","colors","toolbarBorder","borderTopWidth","borderTopColor","jsxs","View","children","OverlayText","TextInput","value","handleTextChange","placeholderTextColor","underlineColorAndroid","selectionColor","cursor","textAlignVertical","scrollEnabled","exports","displayName","StyleSheet","create","position","zIndex","color","backgroundColor","textShadowColor"],"sourceRoot":"../../../src","sources":["components/RichTextInput.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_defaultStyles","_useRichText","_parser","_serializer","_RenderedOutput","_Toolbar","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","DEFAULT_OUTPUT_PANEL_MAX_HEIGHT","isJestRuntime","globalThis","process","env","JEST_WORKER_ID","RichTextInput","initialSegments","onChangeSegments","onChangeText","placeholder","editable","maxLength","showToolbar","toolbarPosition","toolbarItems","theme","showOutputPreview","outputFormat","defaultOutputFormat","outputPreviewMode","defaultOutputPreviewMode","maxOutputHeight","onChangeOutput","onChangeOutputFormat","onChangeOutputPreviewMode","onRequestLink","onRequestImage","multiline","minHeight","maxHeight","autoFocus","textInputProps","renderToolbar","onReady","resolvedTheme","DEFAULT_THEME","previewProgress","useRef","Animated","Value","current","internalOutputFormat","setInternalOutputFormat","useState","internalOutputPreviewMode","setInternalOutputPreviewMode","contentHeight","setContentHeight","state","actions","useRichText","useEffect","plainText","segmentsToPlainText","segments","resolvedOutputFormat","resolvedOutputPreviewMode","inputHeight","Math","max","min","shouldScrollInput","serializedOutput","useMemo","serializeSegments","shouldShowOutputPreview","length","normalizedSelection","start","selection","end","selectedText","slice","selectionStyle","getSelectionStyle","activeStyles","setValue","timing","toValue","duration","easing","Easing","out","cubic","useNativeDriver","onSelectionChange","useCallback","nativeEvent","handleSelectionChange","onContentSizeChange","ceil","contentSize","height","handleOutputFormatChange","format","undefined","handleOutputPreviewModeChange","mode","handleRequestLink","currentUrl","link","applyLink","setLink","detectedUrl","detectLinkTarget","handleRequestImage","insertImage","detectedSource","detectImageSource","alt","trim","outputLabel","formatLabel","containerStyle","inputAreaStyle","styles","inputArea","inputStyle","textInput","baseTextStyle","style","outputAnimatedStyle","interpolate","inputRange","outputRange","opacity","marginTop","marginBottom","transform","translateY","outputContainerStyle","outputLabelStyle","outputTextStyle","toolbarComponent","jsx","Toolbar","items","onOutputFormatChange","onOutputPreviewModeChange","toolbarBorderStyle","borderBottomWidth","borderBottomColor","colors","toolbarBorder","borderTopWidth","borderTopColor","jsxs","View","children","TextInput","value","handleTextChange","placeholderTextColor","selectionColor","cursor","textAlignVertical","scrollEnabled","pointerEvents","outputAnimatedWrapper","Text","ScrollView","showsVerticalScrollIndicator","RenderedOutput","selectable","exports","displayName","StyleSheet","create","position","overflow","trimmed","test","normalized","candidate","replace"],"sourceRoot":"../../../src","sources":["components/RichTextInput.tsx"],"mappings":"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","ignoreList":[]}
@@ -25,6 +25,12 @@ const Toolbar = exports.Toolbar = /*#__PURE__*/_react.default.memo(({
25
25
  items,
26
26
  theme,
27
27
  visible = true,
28
+ outputFormat = 'markdown',
29
+ outputPreviewMode = 'literal',
30
+ onOutputFormatChange,
31
+ onOutputPreviewModeChange,
32
+ onRequestLink,
33
+ onRequestImage,
28
34
  renderToolbar
29
35
  }) => {
30
36
  const resolvedTheme = theme ?? _defaultStyles.DEFAULT_THEME;
@@ -41,19 +47,40 @@ const Toolbar = exports.Toolbar = /*#__PURE__*/_react.default.memo(({
41
47
  if (item.heading) {
42
48
  isActive = selectionStyle.heading === item.heading;
43
49
  }
50
+ if (item.listType) {
51
+ isActive = selectionStyle.listType === item.listType;
52
+ }
53
+ if (item.textAlign) {
54
+ isActive = selectionStyle.textAlign === item.textAlign;
55
+ }
56
+ if (item.outputFormat) {
57
+ isActive = outputFormat === item.outputFormat;
58
+ }
59
+ if (item.outputPreviewMode) {
60
+ isActive = outputPreviewMode === item.outputPreviewMode;
61
+ }
62
+ if (item.actionType === 'link') {
63
+ isActive = !!selectionStyle.link;
64
+ }
44
65
  return {
45
66
  ...item,
46
67
  active: item.active ?? isActive
47
68
  };
48
69
  });
49
- }, [actions, toolbarItems]);
70
+ }, [actions, outputFormat, outputPreviewMode, toolbarItems]);
50
71
 
51
72
  // Custom render
52
73
  if (renderToolbar) {
53
74
  return renderToolbar({
54
75
  items: enrichedItems,
55
76
  state,
56
- actions
77
+ actions,
78
+ outputFormat,
79
+ outputPreviewMode,
80
+ onOutputFormatChange: onOutputFormatChange ?? (() => undefined),
81
+ onOutputPreviewModeChange: onOutputPreviewModeChange ?? (() => undefined),
82
+ onRequestLink,
83
+ onRequestImage
57
84
  });
58
85
  }
59
86
  if (!visible) {
@@ -79,6 +106,18 @@ const Toolbar = exports.Toolbar = /*#__PURE__*/_react.default.memo(({
79
106
  actions.toggleFormat(item.format);
80
107
  } else if (item.heading) {
81
108
  actions.setHeading(item.heading);
109
+ } else if (item.listType) {
110
+ actions.setListType(item.listType);
111
+ } else if (item.textAlign) {
112
+ actions.setTextAlign(item.textAlign);
113
+ } else if (item.outputFormat) {
114
+ onOutputFormatChange?.(item.outputFormat);
115
+ } else if (item.outputPreviewMode) {
116
+ onOutputPreviewModeChange?.(item.outputPreviewMode);
117
+ } else if (item.actionType === 'link') {
118
+ onRequestLink?.();
119
+ } else if (item.actionType === 'image') {
120
+ onRequestImage?.();
82
121
  }
83
122
  }
84
123
  }, item.id))