react-native-richify 1.0.4 → 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.
- package/lib/commonjs/components/RenderedOutput.js +168 -0
- package/lib/commonjs/components/RenderedOutput.js.map +1 -0
- package/lib/commonjs/components/RichTextInput.js +134 -15
- package/lib/commonjs/components/RichTextInput.js.map +1 -1
- package/lib/commonjs/components/Toolbar.js +41 -2
- package/lib/commonjs/components/Toolbar.js.map +1 -1
- package/lib/commonjs/constants/defaultStyles.js +55 -1
- package/lib/commonjs/constants/defaultStyles.js.map +1 -1
- package/lib/commonjs/hooks/useFormatting.js +40 -2
- package/lib/commonjs/hooks/useFormatting.js.map +1 -1
- package/lib/commonjs/hooks/useRichText.js +75 -6
- package/lib/commonjs/hooks/useRichText.js.map +1 -1
- package/lib/commonjs/utils/formatter.js +48 -9
- package/lib/commonjs/utils/formatter.js.map +1 -1
- package/lib/commonjs/utils/parser.js +1 -1
- package/lib/commonjs/utils/parser.js.map +1 -1
- package/lib/commonjs/utils/serializer.js +102 -6
- package/lib/commonjs/utils/serializer.js.map +1 -1
- package/lib/commonjs/utils/styleMapper.js +11 -0
- package/lib/commonjs/utils/styleMapper.js.map +1 -1
- package/lib/module/components/RenderedOutput.js +163 -0
- package/lib/module/components/RenderedOutput.js.map +1 -0
- package/lib/module/components/RichTextInput.js +135 -16
- package/lib/module/components/RichTextInput.js.map +1 -1
- package/lib/module/components/Toolbar.js +41 -2
- package/lib/module/components/Toolbar.js.map +1 -1
- package/lib/module/constants/defaultStyles.js +55 -1
- package/lib/module/constants/defaultStyles.js.map +1 -1
- package/lib/module/hooks/useFormatting.js +41 -3
- package/lib/module/hooks/useFormatting.js.map +1 -1
- package/lib/module/hooks/useRichText.js +75 -6
- package/lib/module/hooks/useRichText.js.map +1 -1
- package/lib/module/utils/formatter.js +46 -9
- package/lib/module/utils/formatter.js.map +1 -1
- package/lib/module/utils/parser.js +1 -1
- package/lib/module/utils/parser.js.map +1 -1
- package/lib/module/utils/serializer.js +102 -6
- package/lib/module/utils/serializer.js.map +1 -1
- package/lib/module/utils/styleMapper.js +11 -0
- package/lib/module/utils/styleMapper.js.map +1 -1
- package/lib/typescript/src/components/RenderedOutput.d.ts +9 -0
- package/lib/typescript/src/components/RenderedOutput.d.ts.map +1 -0
- package/lib/typescript/src/components/RichTextInput.d.ts.map +1 -1
- package/lib/typescript/src/components/Toolbar.d.ts.map +1 -1
- package/lib/typescript/src/constants/defaultStyles.d.ts +1 -0
- package/lib/typescript/src/constants/defaultStyles.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useFormatting.d.ts +4 -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 +1 -1
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/types/index.d.ts +94 -1
- package/lib/typescript/src/types/index.d.ts.map +1 -1
- package/lib/typescript/src/utils/formatter.d.ts +9 -1
- package/lib/typescript/src/utils/formatter.d.ts.map +1 -1
- package/lib/typescript/src/utils/parser.d.ts.map +1 -1
- package/lib/typescript/src/utils/serializer.d.ts.map +1 -1
- package/lib/typescript/src/utils/styleMapper.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/components/RenderedOutput.tsx +231 -0
- package/src/components/RichTextInput.tsx +197 -19
- package/src/components/Toolbar.tsx +54 -2
- package/src/constants/defaultStyles.d.ts +2 -1
- package/src/constants/defaultStyles.ts +21 -0
- package/src/hooks/useFormatting.ts +76 -2
- package/src/hooks/useRichText.ts +101 -5
- package/src/index.d.ts +1 -1
- package/src/index.ts +4 -0
- package/src/types/index.d.ts +94 -1
- package/src/types/index.ts +104 -1
- package/src/utils/formatter.ts +60 -6
- package/src/utils/parser.ts +6 -1
- package/src/utils/serializer.ts +150 -8
- package/src/utils/styleMapper.ts +21 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["DEFAULT_THEME","HEADING_FONT_SIZES","formatStyleToTextStyle","formatStyle","theme","resolvedTheme","style","bold","fontWeight","italic","fontStyle","underline","strikethrough","textDecorationLine","code","codeStyle","Object","assign","color","backgroundColor","fontSize","heading","lineHeight","segmentToTextStyle","segment","baseStyle","baseTextStyle","styles","segmentsToTextStyles","segments","map","seg"],"sourceRoot":"../../../src","sources":["utils/styleMapper.ts"],"mappings":";;AAEA,SAASA,aAAa,EAAEC,kBAAkB,QAAQ,4BAA4B;;AAE9E;AACA;AACA;AACA;AACA,OAAO,SAASC,sBAAsBA,CACpCC,WAAwB,EACxBC,KAAqB,EACV;EACX,MAAMC,aAAa,GAAGD,KAAK,IAAIJ,aAAa;EAC5C,MAAMM,KAAgB,GAAG,CAAC,CAAC;;EAE3B;EACA,IAAIH,WAAW,CAACI,IAAI,EAAE;IACpBD,KAAK,CAACE,UAAU,GAAG,MAAM;EAC3B;;EAEA;EACA,IAAIL,WAAW,CAACM,MAAM,EAAE;IACtBH,KAAK,CAACI,SAAS,GAAG,QAAQ;EAC5B;;EAEA;EACA,IAAIP,WAAW,CAACQ,SAAS,IAAIR,WAAW,CAACS,aAAa,EAAE;IACtDN,KAAK,CAACO,kBAAkB,GAAG,wBAAwB;EACrD,CAAC,MAAM,IAAIV,WAAW,CAACQ,SAAS,EAAE;IAChCL,KAAK,CAACO,kBAAkB,GAAG,WAAW;EACxC,CAAC,MAAM,IAAIV,WAAW,CAACS,aAAa,EAAE;IACpCN,KAAK,CAACO,kBAAkB,GAAG,cAAc;EAC3C;;EAEA;EACA,IAAIV,WAAW,CAACW,IAAI,EAAE;IACpB,MAAMC,SAAS,GAAGV,aAAa,CAACU,SAAS,IAAIf,aAAa,CAACe,SAAS;IACpE,IAAIA,SAAS,EAAE;MACbC,MAAM,CAACC,MAAM,CAACX,KAAK,EAAES,SAAS,CAAC;IACjC;EACF;;EAEA;EACA,IAAIZ,WAAW,CAACe,KAAK,EAAE;IACrBZ,KAAK,CAACY,KAAK,GAAGf,WAAW,CAACe,KAAK;EACjC;;EAEA;EACA,IAAIf,WAAW,CAACgB,eAAe,EAAE;IAC/Bb,KAAK,CAACa,eAAe,GAAGhB,WAAW,CAACgB,eAAe;EACrD;;EAEA;EACA,IAAIhB,WAAW,CAACiB,QAAQ,EAAE;IACxBd,KAAK,CAACc,QAAQ,GAAGjB,WAAW,CAACiB,QAAQ;EACvC;;EAEA;EACA,
|
|
1
|
+
{"version":3,"names":["DEFAULT_THEME","HEADING_FONT_SIZES","formatStyleToTextStyle","formatStyle","theme","resolvedTheme","style","bold","fontWeight","italic","fontStyle","underline","strikethrough","textDecorationLine","code","codeStyle","Object","assign","color","backgroundColor","fontSize","textAlign","heading","lineHeight","link","colors","primary","segmentToTextStyle","segment","baseStyle","baseTextStyle","styles","segmentsToTextStyles","segments","map","seg"],"sourceRoot":"../../../src","sources":["utils/styleMapper.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { RichTextTheme, StyledSegment } from '../types';
|
|
3
|
+
interface RenderedOutputProps {
|
|
4
|
+
segments: StyledSegment[];
|
|
5
|
+
theme?: RichTextTheme;
|
|
6
|
+
}
|
|
7
|
+
export declare const RenderedOutput: React.FC<RenderedOutputProps>;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=RenderedOutput.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RenderedOutput.d.ts","sourceRoot":"","sources":["../../../../src/components/RenderedOutput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkB,MAAM,OAAO,CAAC;AAEvC,OAAO,KAAK,EAAe,aAAa,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAI1E,UAAU,mBAAmB;IAC3B,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB;AAID,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAmHxD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RichTextInput.d.ts","sourceRoot":"","sources":["../../../../src/components/RichTextInput.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"RichTextInput.d.ts","sourceRoot":"","sources":["../../../../src/components/RichTextInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAMN,MAAM,OAAO,CAAC;AAaf,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAgBnD;;;;;GAKG;AACH,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAoUtD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Toolbar.d.ts","sourceRoot":"","sources":["../../../../src/components/Toolbar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkB,MAAM,OAAO,CAAC;AAEvC,OAAO,KAAK,EAAE,YAAY,EAAe,MAAM,UAAU,CAAC;AAI1D;;;;;;;;GAQG;AACH,eAAO,MAAM,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,YAAY,
|
|
1
|
+
{"version":3,"file":"Toolbar.d.ts","sourceRoot":"","sources":["../../../../src/components/Toolbar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkB,MAAM,OAAO,CAAC;AAEvC,OAAO,KAAK,EAAE,YAAY,EAAe,MAAM,UAAU,CAAC;AAI1D;;;;;;;;GAQG;AACH,eAAO,MAAM,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,YAAY,CA8H1C,CAAC"}
|
|
@@ -11,6 +11,7 @@ export declare const DEFAULT_COLORS: {
|
|
|
11
11
|
readonly toolbarBorder: "#E5E7EB";
|
|
12
12
|
readonly outputBackground: "#F8FAFC";
|
|
13
13
|
readonly outputLabel: "#475569";
|
|
14
|
+
readonly link: "#2563EB";
|
|
14
15
|
readonly cursor: "#6366F1";
|
|
15
16
|
readonly activeButtonBg: "#EEF2FF";
|
|
16
17
|
readonly codeBackground: "#F3F4F6";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaultStyles.d.ts","sourceRoot":"","sources":["../../../../src/constants/defaultStyles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAExE;;GAEG;AACH,eAAO,MAAM,cAAc
|
|
1
|
+
{"version":3,"file":"defaultStyles.d.ts","sourceRoot":"","sources":["../../../../src/constants/defaultStyles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAExE;;GAEG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;CAajB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;CAKrB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,uBAAuB;;;;;CAK1B,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,WAehC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,aAqG3B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAE,WAAW,EAoB9C,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { StyledSegment, FormatType, FormatStyle, HeadingLevel, SelectionRange } from '../types';
|
|
1
|
+
import type { StyledSegment, FormatType, FormatStyle, HeadingLevel, ListType, SelectionRange, TextAlign } from '../types';
|
|
2
2
|
interface UseFormattingOptions {
|
|
3
3
|
segments: StyledSegment[];
|
|
4
4
|
selection: SelectionRange;
|
|
@@ -16,6 +16,9 @@ export declare function useFormatting({ segments, selection, activeStyles, onSeg
|
|
|
16
16
|
toggleFormat: (format: FormatType) => void;
|
|
17
17
|
setStyleProperty: <K extends keyof FormatStyle>(key: K, value: FormatStyle[K]) => void;
|
|
18
18
|
setHeading: (level: HeadingLevel) => void;
|
|
19
|
+
setListType: (listType: ListType) => void;
|
|
20
|
+
setTextAlign: (textAlign: TextAlign) => void;
|
|
21
|
+
setLink: (url?: string) => void;
|
|
19
22
|
setColor: (color: string) => void;
|
|
20
23
|
setBackgroundColor: (color: string) => void;
|
|
21
24
|
setFontSize: (size: number) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFormatting.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useFormatting.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,aAAa,EACb,UAAU,EACV,WAAW,EACX,YAAY,EACZ,cAAc,
|
|
1
|
+
{"version":3,"file":"useFormatting.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useFormatting.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,aAAa,EACb,UAAU,EACV,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,cAAc,EACd,SAAS,EACV,MAAM,UAAU,CAAC;AAWlB,UAAU,oBAAoB;IAC5B,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,SAAS,EAAE,cAAc,CAAC;IAC1B,YAAY,EAAE,WAAW,CAAC;IAC1B,gBAAgB,EAAE,CAAC,QAAQ,EAAE,aAAa,EAAE,KAAK,IAAI,CAAC;IACtD,oBAAoB,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC;CACrD;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,EAC5B,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,gBAAgB,EAChB,oBAAoB,GACrB,EAAE,oBAAoB;2BAEV,UAAU;uBAqBlB,CAAC,SAAS,MAAM,WAAW,OAAO,CAAC,SAAS,WAAW,CAAC,CAAC,CAAC;wBAoBnD,YAAY;4BA8BT,QAAQ;8BAsBP,SAAS;oBAqBd,MAAM;sBAeL,MAAM;gCAON,MAAM;wBAOP,MAAM;6BAOJ,UAAU,KAAG,OAAO;iCASe,WAAW;EAoB1D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useRichText.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useRichText.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,aAAa,
|
|
1
|
+
{"version":3,"file":"useRichText.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useRichText.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,aAAa,EAQb,iBAAiB,EAClB,MAAM,UAAU,CAAC;AAalB,MAAM,WAAW,kBAAkB;IACjC,oDAAoD;IACpD,eAAe,CAAC,EAAE,aAAa,EAAE,CAAC;IAClC,qCAAqC;IACrC,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,aAAa,EAAE,KAAK,IAAI,CAAC;IACvD,wCAAwC;IACxC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACvC;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CACzB,OAAO,GAAE,kBAAuB,GAC/B,iBAAiB,CAySnB"}
|
|
@@ -13,5 +13,5 @@ export { toggleFormatOnSelection, setStyleOnSelection, setHeadingOnLine, isForma
|
|
|
13
13
|
export { formatStyleToTextStyle, segmentToTextStyle, segmentsToTextStyles, } from './utils/styleMapper';
|
|
14
14
|
export { serializeSegments, segmentsToMarkdown, segmentsToHTML, } from './utils/serializer';
|
|
15
15
|
export { DEFAULT_COLORS, DEFAULT_THEME, DEFAULT_TOOLBAR_ITEMS, DEFAULT_BASE_TEXT_STYLE, HEADING_FONT_SIZES, EMPTY_FORMAT_STYLE, } from './constants/defaultStyles';
|
|
16
|
-
export type { FormatType, HeadingLevel, ListType, OutputFormat, FormatStyle, StyledSegment, SelectionRange, RichTextState, RichTextActions, UseRichTextReturn, RichTextTheme, ToolbarItem, ToolbarButtonRenderProps, ToolbarRenderProps, OverlayTextProps, ToolbarButtonProps, ToolbarProps, RichTextInputProps, } from './types';
|
|
16
|
+
export type { FormatType, HeadingLevel, ListType, TextAlign, OutputFormat, OutputPreviewMode, FormatStyle, StyledSegment, SelectionRange, RichTextState, RichTextActions, UseRichTextReturn, RichTextTheme, ToolbarItem, ToolbarButtonRenderProps, ToolbarRenderProps, LinkRequestPayload, ImageRequestPayload, OverlayTextProps, ToolbarButtonProps, ToolbarProps, RichTextInputProps, } from './types';
|
|
17
17
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAG3D,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,YAAY,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAGtD,OAAO,EACL,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,2BAA2B,CAAC;AACnC,YAAY,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAGvE,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,cAAc,EACd,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,uBAAuB,EACvB,mBAAmB,EACnB,gBAAgB,EAChB,yBAAyB,EACzB,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,GACf,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,cAAc,EACd,aAAa,EACb,qBAAqB,EACrB,uBAAuB,EACvB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,2BAA2B,CAAC;AAGnC,YAAY,EACV,UAAU,EACV,YAAY,EACZ,QAAQ,EACR,YAAY,EACZ,WAAW,EACX,aAAa,EACb,cAAc,EACd,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,WAAW,EACX,wBAAwB,EACxB,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,YAAY,EACZ,kBAAkB,GACnB,MAAM,SAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAG3D,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,YAAY,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAGtD,OAAO,EACL,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,2BAA2B,CAAC;AACnC,YAAY,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAGvE,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,cAAc,EACd,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,uBAAuB,EACvB,mBAAmB,EACnB,gBAAgB,EAChB,yBAAyB,EACzB,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,GACf,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,cAAc,EACd,aAAa,EACb,qBAAqB,EACrB,uBAAuB,EACvB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,2BAA2B,CAAC;AAGnC,YAAY,EACV,UAAU,EACV,YAAY,EACZ,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,iBAAiB,EACjB,WAAW,EACX,aAAa,EACb,cAAc,EACd,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,WAAW,EACX,wBAAwB,EACxB,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,YAAY,EACZ,kBAAkB,GACnB,MAAM,SAAS,CAAC"}
|
|
@@ -11,10 +11,18 @@ export type HeadingLevel = 'h1' | 'h2' | 'h3' | 'none';
|
|
|
11
11
|
* List type for a line/paragraph.
|
|
12
12
|
*/
|
|
13
13
|
export type ListType = 'bullet' | 'ordered' | 'none';
|
|
14
|
+
/**
|
|
15
|
+
* Paragraph alignment presets.
|
|
16
|
+
*/
|
|
17
|
+
export type TextAlign = 'left' | 'center' | 'right';
|
|
14
18
|
/**
|
|
15
19
|
* Serialized output formats supported by the editor.
|
|
16
20
|
*/
|
|
17
21
|
export type OutputFormat = 'markdown' | 'html';
|
|
22
|
+
/**
|
|
23
|
+
* Output preview modes supported by the editor.
|
|
24
|
+
*/
|
|
25
|
+
export type OutputPreviewMode = 'literal' | 'rendered';
|
|
18
26
|
/**
|
|
19
27
|
* Inline formatting styles attached to a text segment.
|
|
20
28
|
*/
|
|
@@ -28,6 +36,11 @@ export interface FormatStyle {
|
|
|
28
36
|
backgroundColor?: string;
|
|
29
37
|
fontSize?: number;
|
|
30
38
|
heading?: HeadingLevel;
|
|
39
|
+
listType?: ListType;
|
|
40
|
+
textAlign?: TextAlign;
|
|
41
|
+
link?: string;
|
|
42
|
+
imageSrc?: string;
|
|
43
|
+
imageAlt?: string;
|
|
31
44
|
}
|
|
32
45
|
/**
|
|
33
46
|
* A segment of text with uniform formatting.
|
|
@@ -69,6 +82,17 @@ export interface RichTextActions {
|
|
|
69
82
|
setStyleProperty: <K extends keyof FormatStyle>(key: K, value: FormatStyle[K]) => void;
|
|
70
83
|
/** Apply a heading level to the current line. */
|
|
71
84
|
setHeading: (level: HeadingLevel) => void;
|
|
85
|
+
/** Apply a list style to the current line. */
|
|
86
|
+
setListType: (type: ListType) => void;
|
|
87
|
+
/** Apply paragraph alignment to the current line. */
|
|
88
|
+
setTextAlign: (align: TextAlign) => void;
|
|
89
|
+
/** Apply or clear a hyperlink on the current selection. */
|
|
90
|
+
setLink: (url?: string) => void;
|
|
91
|
+
/** Insert an image placeholder into the document. */
|
|
92
|
+
insertImage: (source: string, options?: {
|
|
93
|
+
alt?: string;
|
|
94
|
+
placeholder?: string;
|
|
95
|
+
}) => void;
|
|
72
96
|
/** Set the text color for the current selection. */
|
|
73
97
|
setColor: (color: string) => void;
|
|
74
98
|
/** Set the background color for the current selection. */
|
|
@@ -119,6 +143,8 @@ export interface RichTextTheme {
|
|
|
119
143
|
outputLabelStyle?: TextStyle;
|
|
120
144
|
/** Style for the serialized output text. */
|
|
121
145
|
outputTextStyle?: TextStyle;
|
|
146
|
+
/** Style for the rendered output preview content. */
|
|
147
|
+
renderedOutputStyle?: ViewStyle;
|
|
122
148
|
/** Style for the toolbar container. */
|
|
123
149
|
toolbarStyle?: ViewStyle;
|
|
124
150
|
/** Style for toolbar buttons. */
|
|
@@ -145,6 +171,8 @@ export interface RichTextTheme {
|
|
|
145
171
|
toolbarBackground?: string;
|
|
146
172
|
/** Toolbar border color. */
|
|
147
173
|
toolbarBorder?: string;
|
|
174
|
+
/** Default link color. */
|
|
175
|
+
link?: string;
|
|
148
176
|
/** Cursor / caret color. */
|
|
149
177
|
cursor?: ColorValue;
|
|
150
178
|
};
|
|
@@ -161,6 +189,16 @@ export interface ToolbarItem {
|
|
|
161
189
|
format?: FormatType;
|
|
162
190
|
/** The heading level this button sets. */
|
|
163
191
|
heading?: HeadingLevel;
|
|
192
|
+
/** The list type this button sets. */
|
|
193
|
+
listType?: ListType;
|
|
194
|
+
/** The alignment this button sets. */
|
|
195
|
+
textAlign?: TextAlign;
|
|
196
|
+
/** The output format this button toggles to. */
|
|
197
|
+
outputFormat?: OutputFormat;
|
|
198
|
+
/** The output preview mode this button toggles to. */
|
|
199
|
+
outputPreviewMode?: OutputPreviewMode;
|
|
200
|
+
/** Special toolbar action. */
|
|
201
|
+
actionType?: 'link' | 'image';
|
|
164
202
|
/** Custom action handler (overrides default behavior). */
|
|
165
203
|
onPress?: () => void;
|
|
166
204
|
/** Whether this item is currently active. */
|
|
@@ -183,6 +221,33 @@ export interface ToolbarRenderProps {
|
|
|
183
221
|
items: ToolbarItem[];
|
|
184
222
|
state: RichTextState;
|
|
185
223
|
actions: RichTextActions;
|
|
224
|
+
outputFormat: OutputFormat;
|
|
225
|
+
outputPreviewMode: OutputPreviewMode;
|
|
226
|
+
onOutputFormatChange: (format: OutputFormat) => void;
|
|
227
|
+
onOutputPreviewModeChange: (mode: OutputPreviewMode) => void;
|
|
228
|
+
onRequestLink?: () => void;
|
|
229
|
+
onRequestImage?: () => void;
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Payload passed when the built-in link button requests a URL.
|
|
233
|
+
*/
|
|
234
|
+
export interface LinkRequestPayload {
|
|
235
|
+
/** Selected plain text at the time of the request. */
|
|
236
|
+
selectedText: string;
|
|
237
|
+
/** Existing URL on the selection, when present. */
|
|
238
|
+
currentUrl?: string;
|
|
239
|
+
/** Apply or clear the URL on the current selection. */
|
|
240
|
+
applyLink: (url?: string) => void;
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Payload passed when the built-in image button requests an image source.
|
|
244
|
+
*/
|
|
245
|
+
export interface ImageRequestPayload {
|
|
246
|
+
/** Insert an image placeholder into the document. */
|
|
247
|
+
insertImage: (source: string, options?: {
|
|
248
|
+
alt?: string;
|
|
249
|
+
placeholder?: string;
|
|
250
|
+
}) => void;
|
|
186
251
|
}
|
|
187
252
|
/**
|
|
188
253
|
* Props for the OverlayText component.
|
|
@@ -224,6 +289,18 @@ export interface ToolbarProps {
|
|
|
224
289
|
theme?: RichTextTheme;
|
|
225
290
|
/** Whether to show the toolbar. */
|
|
226
291
|
visible?: boolean;
|
|
292
|
+
/** Currently selected serialized output format. */
|
|
293
|
+
outputFormat?: OutputFormat;
|
|
294
|
+
/** Currently selected preview mode. */
|
|
295
|
+
outputPreviewMode?: OutputPreviewMode;
|
|
296
|
+
/** Called when the output format changes from the toolbar. */
|
|
297
|
+
onOutputFormatChange?: (format: OutputFormat) => void;
|
|
298
|
+
/** Called when the preview mode changes from the toolbar. */
|
|
299
|
+
onOutputPreviewModeChange?: (mode: OutputPreviewMode) => void;
|
|
300
|
+
/** Called when the link button is pressed. */
|
|
301
|
+
onRequestLink?: () => void;
|
|
302
|
+
/** Called when the image button is pressed. */
|
|
303
|
+
onRequestImage?: () => void;
|
|
227
304
|
/** Custom render function for the entire toolbar. */
|
|
228
305
|
renderToolbar?: (props: ToolbarRenderProps) => React.ReactElement | null;
|
|
229
306
|
}
|
|
@@ -253,10 +330,26 @@ export interface RichTextInputProps {
|
|
|
253
330
|
theme?: RichTextTheme;
|
|
254
331
|
/** Whether to show the serialized output preview below the input. */
|
|
255
332
|
showOutputPreview?: boolean;
|
|
256
|
-
/**
|
|
333
|
+
/** Controlled format used for the serialized output preview. */
|
|
257
334
|
outputFormat?: OutputFormat;
|
|
335
|
+
/** Initial format used for the serialized output preview. */
|
|
336
|
+
defaultOutputFormat?: OutputFormat;
|
|
337
|
+
/** Controlled preview mode for the output panel. */
|
|
338
|
+
outputPreviewMode?: OutputPreviewMode;
|
|
339
|
+
/** Initial preview mode for the output panel. */
|
|
340
|
+
defaultOutputPreviewMode?: OutputPreviewMode;
|
|
341
|
+
/** Maximum height for the output preview panel. */
|
|
342
|
+
maxOutputHeight?: number;
|
|
258
343
|
/** Callback when the serialized output changes. */
|
|
259
344
|
onChangeOutput?: (output: string, format: OutputFormat) => void;
|
|
345
|
+
/** Callback when the output format changes. */
|
|
346
|
+
onChangeOutputFormat?: (format: OutputFormat) => void;
|
|
347
|
+
/** Callback when the output preview mode changes. */
|
|
348
|
+
onChangeOutputPreviewMode?: (mode: OutputPreviewMode) => void;
|
|
349
|
+
/** Invoked when the built-in link button needs a URL. */
|
|
350
|
+
onRequestLink?: (payload: LinkRequestPayload) => void;
|
|
351
|
+
/** Invoked when the built-in image button needs an image source. */
|
|
352
|
+
onRequestImage?: (payload: ImageRequestPayload) => void;
|
|
260
353
|
/** Whether multiline input is enabled. */
|
|
261
354
|
multiline?: boolean;
|
|
262
355
|
/** Minimum height for the input area. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/types/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAIrF;;GAEG;AACH,MAAM,MAAM,UAAU,GAClB,MAAM,GACN,QAAQ,GACR,WAAW,GACX,eAAe,GACf,MAAM,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC;AAEvD;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;AAErD;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/types/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { StyledSegment, FormatType, FormatStyle, HeadingLevel, SelectionRange } from '../types';
|
|
1
|
+
import type { StyledSegment, FormatType, FormatStyle, HeadingLevel, ListType, SelectionRange, TextAlign } from '../types';
|
|
2
2
|
/**
|
|
3
3
|
* Toggle an inline format (bold, italic, etc.) on the selected range.
|
|
4
4
|
*
|
|
@@ -16,6 +16,14 @@ export declare function setStyleOnSelection<K extends keyof FormatStyle>(segment
|
|
|
16
16
|
* Apply a heading level to the line containing the cursor/selection.
|
|
17
17
|
*/
|
|
18
18
|
export declare function setHeadingOnLine(segments: StyledSegment[], selection: SelectionRange, level: HeadingLevel): StyledSegment[];
|
|
19
|
+
/**
|
|
20
|
+
* Apply a list type to the lines containing the cursor/selection.
|
|
21
|
+
*/
|
|
22
|
+
export declare function setListTypeOnLine(segments: StyledSegment[], selection: SelectionRange, listType: ListType): StyledSegment[];
|
|
23
|
+
/**
|
|
24
|
+
* Apply text alignment to the lines containing the cursor/selection.
|
|
25
|
+
*/
|
|
26
|
+
export declare function setTextAlignOnLine(segments: StyledSegment[], selection: SelectionRange, textAlign: TextAlign): StyledSegment[];
|
|
19
27
|
/**
|
|
20
28
|
* Checks whether the given format is active across the entire selection.
|
|
21
29
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../../../../src/utils/formatter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,UAAU,EACV,WAAW,EACX,YAAY,EACZ,cAAc,
|
|
1
|
+
{"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../../../../src/utils/formatter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,UAAU,EACV,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,cAAc,EACd,SAAS,EACV,MAAM,UAAU,CAAC;AAQlB;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,aAAa,EAAE,EACzB,SAAS,EAAE,cAAc,EACzB,MAAM,EAAE,UAAU,GACjB,aAAa,EAAE,CAgBjB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,MAAM,WAAW,EAC7D,QAAQ,EAAE,aAAa,EAAE,EACzB,SAAS,EAAE,cAAc,EACzB,GAAG,EAAE,CAAC,EACN,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,GACpB,aAAa,EAAE,CAOjB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,aAAa,EAAE,EACzB,SAAS,EAAE,cAAc,EACzB,KAAK,EAAE,YAAY,GAClB,aAAa,EAAE,CAKjB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,aAAa,EAAE,EACzB,SAAS,EAAE,cAAc,EACzB,QAAQ,EAAE,QAAQ,GACjB,aAAa,EAAE,CAKjB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,aAAa,EAAE,EACzB,SAAS,EAAE,cAAc,EACzB,SAAS,EAAE,SAAS,GACnB,aAAa,EAAE,CAIjB;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,aAAa,EAAE,EACzB,SAAS,EAAE,cAAc,EACzB,MAAM,EAAE,UAAU,GACjB,OAAO,CAQT;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,aAAa,EAAE,EACzB,SAAS,EAAE,cAAc,GACxB,WAAW,CA6Cb;AAwJD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../../src/utils/parser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAG3D;;GAEG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,MAAM,GAAE,WAAuC,GAC9C,aAAa,CAEf;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,MAAM,CAEhE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,MAAM,CAErE;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,aAAa,EAAE,EACzB,cAAc,EAAE,MAAM,GACrB;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAA;CAAE,CAiBnD;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,MAAM,GACb,CAAC,aAAa,EAAE,aAAa,CAAC,CAIhC;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,GAAG,OAAO,
|
|
1
|
+
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../../src/utils/parser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAG3D;;GAEG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,MAAM,GAAE,WAAuC,GAC9C,aAAa,CAEf;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,MAAM,CAEhE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,MAAM,CAErE;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,aAAa,EAAE,EACzB,cAAc,EAAE,MAAM,GACrB;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAA;CAAE,CAiBnD;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,MAAM,GACb,CAAC,aAAa,EAAE,aAAa,CAAC,CAIhC;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,GAAG,OAAO,CAiBtE;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,aAAa,EAAE,GACxB,aAAa,EAAE,CA8BjB;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,aAAa,EAAE,EAC5B,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,WAAW,GACxB,aAAa,EAAE,CAqHjB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serializer.d.ts","sourceRoot":"","sources":["../../../../src/utils/serializer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"serializer.d.ts","sourceRoot":"","sources":["../../../../src/utils/serializer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAIV,YAAY,EACZ,aAAa,EAEd,MAAM,UAAU,CAAC;AAIlB;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,aAAa,EAAE,EACzB,MAAM,GAAE,YAAyB,GAChC,MAAM,CAyBR;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,MAAM,CAEpE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,MAAM,CAEhE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"styleMapper.d.ts","sourceRoot":"","sources":["../../../../src/utils/styleMapper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAG1E;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,WAAW,EACxB,KAAK,CAAC,EAAE,aAAa,GACpB,SAAS,
|
|
1
|
+
{"version":3,"file":"styleMapper.d.ts","sourceRoot":"","sources":["../../../../src/utils/styleMapper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAG1E;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,WAAW,EACxB,KAAK,CAAC,EAAE,aAAa,GACpB,SAAS,CA2EX;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,aAAa,EACtB,KAAK,CAAC,EAAE,aAAa,GACpB,SAAS,CAQX;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,aAAa,EAAE,EACzB,KAAK,CAAC,EAAE,aAAa,GACpB,SAAS,EAAE,CAEb"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-richify",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.5",
|
|
4
4
|
"description": "A production-grade, fully customizable React Native Rich Text Input using the Overlay Technique — no WebView required.",
|
|
5
5
|
"main": "lib/commonjs/index.js",
|
|
6
6
|
"module": "lib/module/index.js",
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
import React, { useMemo } from 'react';
|
|
2
|
+
import { Image, StyleSheet, Text, View } from 'react-native';
|
|
3
|
+
import type { FormatStyle, RichTextTheme, StyledSegment } from '../types';
|
|
4
|
+
import { DEFAULT_THEME } from '../constants/defaultStyles';
|
|
5
|
+
import { segmentToTextStyle } from '../utils/styleMapper';
|
|
6
|
+
|
|
7
|
+
interface RenderedOutputProps {
|
|
8
|
+
segments: StyledSegment[];
|
|
9
|
+
theme?: RichTextTheme;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
type LineFragment = Pick<StyledSegment, 'text' | 'styles'>;
|
|
13
|
+
|
|
14
|
+
export const RenderedOutput: React.FC<RenderedOutputProps> = React.memo(
|
|
15
|
+
({ segments, theme }) => {
|
|
16
|
+
const resolvedTheme = theme ?? DEFAULT_THEME;
|
|
17
|
+
const lines = useMemo(() => splitSegmentsByLine(segments), [segments]);
|
|
18
|
+
let orderedIndex = 0;
|
|
19
|
+
|
|
20
|
+
return (
|
|
21
|
+
<View
|
|
22
|
+
style={[
|
|
23
|
+
styles.container,
|
|
24
|
+
resolvedTheme.renderedOutputStyle ?? DEFAULT_THEME.renderedOutputStyle,
|
|
25
|
+
]}
|
|
26
|
+
>
|
|
27
|
+
{lines.map((line, lineIndex) => {
|
|
28
|
+
const listType = getLineStyle(line, 'listType');
|
|
29
|
+
const textAlign = getLineStyle(line, 'textAlign');
|
|
30
|
+
const marker =
|
|
31
|
+
listType === 'bullet'
|
|
32
|
+
? '\u2022'
|
|
33
|
+
: listType === 'ordered'
|
|
34
|
+
? `${orderedIndex + 1}.`
|
|
35
|
+
: undefined;
|
|
36
|
+
|
|
37
|
+
orderedIndex = listType === 'ordered' ? orderedIndex + 1 : 0;
|
|
38
|
+
|
|
39
|
+
const textFragments = line.filter(
|
|
40
|
+
(fragment) => !fragment.styles.imageSrc && fragment.text.length > 0,
|
|
41
|
+
);
|
|
42
|
+
const imageFragments = line.filter((fragment) => !!fragment.styles.imageSrc);
|
|
43
|
+
const contentAlignStyle =
|
|
44
|
+
textAlign === 'center'
|
|
45
|
+
? styles.alignCenter
|
|
46
|
+
: textAlign === 'right'
|
|
47
|
+
? styles.alignRight
|
|
48
|
+
: styles.alignLeft;
|
|
49
|
+
|
|
50
|
+
if (textFragments.length === 0 && imageFragments.length === 0) {
|
|
51
|
+
return (
|
|
52
|
+
<View
|
|
53
|
+
key={`line-${lineIndex}`}
|
|
54
|
+
style={[styles.emptyLine, contentAlignStyle]}
|
|
55
|
+
/>
|
|
56
|
+
);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
const textNode =
|
|
60
|
+
textFragments.length > 0 ? (
|
|
61
|
+
<Text
|
|
62
|
+
style={[
|
|
63
|
+
resolvedTheme.baseTextStyle ?? DEFAULT_THEME.baseTextStyle,
|
|
64
|
+
textAlign ? { textAlign } : undefined,
|
|
65
|
+
]}
|
|
66
|
+
>
|
|
67
|
+
{textFragments.map((fragment, fragmentIndex) => (
|
|
68
|
+
<Text
|
|
69
|
+
key={`text-${lineIndex}-${fragmentIndex}`}
|
|
70
|
+
style={segmentToTextStyle(fragment as StyledSegment, resolvedTheme)}
|
|
71
|
+
>
|
|
72
|
+
{fragment.text}
|
|
73
|
+
</Text>
|
|
74
|
+
))}
|
|
75
|
+
</Text>
|
|
76
|
+
) : null;
|
|
77
|
+
|
|
78
|
+
const imageNodes = imageFragments.map((fragment, fragmentIndex) => (
|
|
79
|
+
<View key={`image-${lineIndex}-${fragmentIndex}`} style={styles.imageBlock}>
|
|
80
|
+
<Image
|
|
81
|
+
source={{ uri: fragment.styles.imageSrc }}
|
|
82
|
+
style={styles.image}
|
|
83
|
+
resizeMode="contain"
|
|
84
|
+
/>
|
|
85
|
+
<Text
|
|
86
|
+
style={[
|
|
87
|
+
styles.imageCaption,
|
|
88
|
+
resolvedTheme.baseTextStyle ?? DEFAULT_THEME.baseTextStyle,
|
|
89
|
+
textAlign ? { textAlign } : undefined,
|
|
90
|
+
]}
|
|
91
|
+
>
|
|
92
|
+
{fragment.styles.imageAlt ?? extractImageAlt(fragment.text)}
|
|
93
|
+
</Text>
|
|
94
|
+
</View>
|
|
95
|
+
));
|
|
96
|
+
|
|
97
|
+
const content = (
|
|
98
|
+
<View style={[styles.lineContent, contentAlignStyle]}>
|
|
99
|
+
{textNode}
|
|
100
|
+
{imageNodes}
|
|
101
|
+
</View>
|
|
102
|
+
);
|
|
103
|
+
|
|
104
|
+
if (!marker) {
|
|
105
|
+
return (
|
|
106
|
+
<View key={`line-${lineIndex}`} style={styles.line}>
|
|
107
|
+
{content}
|
|
108
|
+
</View>
|
|
109
|
+
);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
return (
|
|
113
|
+
<View key={`line-${lineIndex}`} style={styles.listLine}>
|
|
114
|
+
<Text
|
|
115
|
+
style={[
|
|
116
|
+
styles.listMarker,
|
|
117
|
+
resolvedTheme.baseTextStyle ?? DEFAULT_THEME.baseTextStyle,
|
|
118
|
+
]}
|
|
119
|
+
>
|
|
120
|
+
{marker}
|
|
121
|
+
</Text>
|
|
122
|
+
<View style={styles.listContent}>{content}</View>
|
|
123
|
+
</View>
|
|
124
|
+
);
|
|
125
|
+
})}
|
|
126
|
+
</View>
|
|
127
|
+
);
|
|
128
|
+
},
|
|
129
|
+
);
|
|
130
|
+
|
|
131
|
+
RenderedOutput.displayName = 'RenderedOutput';
|
|
132
|
+
|
|
133
|
+
function splitSegmentsByLine(segments: StyledSegment[]): LineFragment[][] {
|
|
134
|
+
const lines: LineFragment[][] = [[]];
|
|
135
|
+
|
|
136
|
+
for (const segment of segments) {
|
|
137
|
+
const parts = segment.text.split('\n');
|
|
138
|
+
|
|
139
|
+
parts.forEach((part, index) => {
|
|
140
|
+
if (part.length > 0 || segment.styles.imageSrc) {
|
|
141
|
+
lines[lines.length - 1]?.push({
|
|
142
|
+
text: part,
|
|
143
|
+
styles: { ...segment.styles },
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
if (index < parts.length - 1) {
|
|
148
|
+
lines.push([]);
|
|
149
|
+
}
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
return lines;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
function getLineStyle<K extends keyof FormatStyle>(
|
|
157
|
+
line: LineFragment[],
|
|
158
|
+
key: K,
|
|
159
|
+
): FormatStyle[K] {
|
|
160
|
+
for (const fragment of line) {
|
|
161
|
+
const value = fragment.styles[key];
|
|
162
|
+
if (value !== undefined) {
|
|
163
|
+
return value;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
return undefined;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
function extractImageAlt(text: string): string {
|
|
171
|
+
const normalized = text
|
|
172
|
+
.replace(/^\[Image:\s*/i, '')
|
|
173
|
+
.replace(/^\[Image\]/i, '')
|
|
174
|
+
.replace(/\]$/, '')
|
|
175
|
+
.trim();
|
|
176
|
+
|
|
177
|
+
return normalized.length > 0 ? normalized : 'image';
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
const styles = StyleSheet.create({
|
|
181
|
+
container: {
|
|
182
|
+
gap: 10,
|
|
183
|
+
},
|
|
184
|
+
line: {
|
|
185
|
+
width: '100%',
|
|
186
|
+
},
|
|
187
|
+
lineContent: {
|
|
188
|
+
width: '100%',
|
|
189
|
+
gap: 8,
|
|
190
|
+
},
|
|
191
|
+
listLine: {
|
|
192
|
+
width: '100%',
|
|
193
|
+
flexDirection: 'row',
|
|
194
|
+
alignItems: 'flex-start',
|
|
195
|
+
gap: 8,
|
|
196
|
+
},
|
|
197
|
+
listMarker: {
|
|
198
|
+
minWidth: 20,
|
|
199
|
+
paddingTop: 1,
|
|
200
|
+
},
|
|
201
|
+
listContent: {
|
|
202
|
+
flex: 1,
|
|
203
|
+
},
|
|
204
|
+
alignLeft: {
|
|
205
|
+
alignItems: 'flex-start',
|
|
206
|
+
},
|
|
207
|
+
alignCenter: {
|
|
208
|
+
alignItems: 'center',
|
|
209
|
+
},
|
|
210
|
+
alignRight: {
|
|
211
|
+
alignItems: 'flex-end',
|
|
212
|
+
},
|
|
213
|
+
emptyLine: {
|
|
214
|
+
minHeight: 20,
|
|
215
|
+
width: '100%',
|
|
216
|
+
},
|
|
217
|
+
imageBlock: {
|
|
218
|
+
width: '100%',
|
|
219
|
+
gap: 6,
|
|
220
|
+
},
|
|
221
|
+
image: {
|
|
222
|
+
width: '100%',
|
|
223
|
+
height: 160,
|
|
224
|
+
borderRadius: 10,
|
|
225
|
+
backgroundColor: '#E5E7EB',
|
|
226
|
+
},
|
|
227
|
+
imageCaption: {
|
|
228
|
+
fontSize: 13,
|
|
229
|
+
opacity: 0.8,
|
|
230
|
+
},
|
|
231
|
+
});
|