@bigbinary/neetoui-rn 3.5.0 → 3.5.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/lib/typescript/src/components/ChatInput/ChatInput.d.ts +0 -9
- package/lib/typescript/src/components/ChatInput/ChatInput.d.ts.map +1 -1
- package/lib/typescript/src/components/RichTextEditor/RichTextEditor.d.ts +0 -6
- package/lib/typescript/src/components/RichTextEditor/RichTextEditor.d.ts.map +1 -1
- package/lib/typescript/src/components/RichTextEditor/RichTextToolbar.d.ts +1 -4
- package/lib/typescript/src/components/RichTextEditor/RichTextToolbar.d.ts.map +1 -1
- package/lib/typescript/src/components/RichTextEditor/bridges/FigureBridge.d.ts +1 -14
- package/lib/typescript/src/components/RichTextEditor/bridges/FigureBridge.d.ts.map +1 -1
- package/lib/typescript/src/components/RichTextEditor/bridges/types.d.ts +1 -2
- package/lib/typescript/src/components/RichTextEditor/bridges/types.d.ts.map +1 -1
- package/lib/typescript/src/components/RichTextEditor/index.d.ts +0 -1
- package/lib/typescript/src/components/RichTextEditor/index.d.ts.map +1 -1
- package/lib/typescript/src/components/RichTextEditor/web/build/editorHtml.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/package.json +1 -1
- package/src/components/ChatInput/ChatInput.tsx +1 -13
- package/src/components/RichTextEditor/RichTextEditor.tsx +1 -15
- package/src/components/RichTextEditor/RichTextToolbar.tsx +9 -33
- package/src/components/RichTextEditor/bridges/FigureBridge.ts +1 -32
- package/src/components/RichTextEditor/bridges/types.ts +0 -2
- package/src/components/RichTextEditor/index.ts +0 -1
- package/src/components/RichTextEditor/web/build/editorHtml.ts +1 -1
- package/src/index.ts +0 -1
- package/lib/typescript/src/components/RichTextEditor/types.d.ts +0 -6
- package/lib/typescript/src/components/RichTextEditor/types.d.ts.map +0 -1
- package/src/components/RichTextEditor/types.ts +0 -1
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { type ReactNode } from "react";
|
|
2
2
|
import { type TextInputProps } from "react-native";
|
|
3
|
-
import { type RichTextEditorProps } from "../RichTextEditor";
|
|
4
3
|
import { type ChatInputOption } from "./constants";
|
|
5
4
|
import { type MentionSuggestion } from "./mentions";
|
|
6
5
|
export type ChatInputPayload = {
|
|
@@ -86,10 +85,6 @@ export type ChatInputProps = Omit<TextInputProps, "value" | "onChange" | "onChan
|
|
|
86
85
|
signatureHTML?: string;
|
|
87
86
|
/** Rich only: the document the reply editor starts with; notes start empty. */
|
|
88
87
|
initialHTML?: string;
|
|
89
|
-
/** Rich only. */
|
|
90
|
-
onPickImage?: RichTextEditorProps["onPickImage"];
|
|
91
|
-
/** Rich only. */
|
|
92
|
-
onPickLink?: RichTextEditorProps["onPickLink"];
|
|
93
88
|
};
|
|
94
89
|
/**
|
|
95
90
|
* Composer used by chat and desk. Ported against the two real call sites
|
|
@@ -155,9 +150,5 @@ export declare const ChatInput: import("react").ForwardRefExoticComponent<Omit<T
|
|
|
155
150
|
signatureHTML?: string;
|
|
156
151
|
/** Rich only: the document the reply editor starts with; notes start empty. */
|
|
157
152
|
initialHTML?: string;
|
|
158
|
-
/** Rich only. */
|
|
159
|
-
onPickImage?: RichTextEditorProps["onPickImage"];
|
|
160
|
-
/** Rich only. */
|
|
161
|
-
onPickLink?: RichTextEditorProps["onPickLink"];
|
|
162
153
|
} & import("react").RefAttributes<ChatInputRef>>;
|
|
163
154
|
//# sourceMappingURL=ChatInput.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatInput.d.ts","sourceRoot":"","sources":["../../../../../src/components/ChatInput/ChatInput.tsx"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AACf,OAAO,EAIL,KAAK,cAAc,EACpB,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"ChatInput.d.ts","sourceRoot":"","sources":["../../../../../src/components/ChatInput/ChatInput.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { type StyleProp, type ViewStyle } from "react-native";
|
|
2
2
|
import type { MentionSuggestion } from "../ChatInput/mentions";
|
|
3
|
-
import type { RichTextImage } from "./types";
|
|
4
3
|
export interface RichTextEditorRef {
|
|
5
4
|
getHTML: () => Promise<string>;
|
|
6
5
|
getText: () => Promise<string>;
|
|
@@ -8,7 +7,6 @@ export interface RichTextEditorRef {
|
|
|
8
7
|
insertHTML: (html: string) => void;
|
|
9
8
|
focus: (where?: "start" | "end" | "emptyParagraph") => void;
|
|
10
9
|
blur: () => void;
|
|
11
|
-
insertImage: (image: RichTextImage) => void;
|
|
12
10
|
}
|
|
13
11
|
export interface RichTextEditorProps {
|
|
14
12
|
initialHTML?: string;
|
|
@@ -21,10 +19,6 @@ export interface RichTextEditorProps {
|
|
|
21
19
|
onBlur?: () => void;
|
|
22
20
|
/** Default "fixed". */
|
|
23
21
|
toolbar?: "fixed" | "none";
|
|
24
|
-
/** Resolves to the uploaded image, or null when cancelled. Absent → no image button. */
|
|
25
|
-
onPickImage?: () => Promise<RichTextImage | null>;
|
|
26
|
-
/** Resolves to a URL, "" to remove the link, or null when cancelled. */
|
|
27
|
-
onPickLink?: (current?: string) => Promise<string | null>;
|
|
28
22
|
/**
|
|
29
23
|
* Trailing part of initialHTML (a signature). The first focus puts the
|
|
30
24
|
* cursor just above it, as desk-web does.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RichTextEditor.d.ts","sourceRoot":"","sources":["../../../../../src/components/RichTextEditor/RichTextEditor.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAkB,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAY9E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"RichTextEditor.d.ts","sourceRoot":"","sources":["../../../../../src/components/RichTextEditor/RichTextEditor.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAkB,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAY9E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAS/D,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/B,OAAO,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/B,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,KAAK,GAAG,gBAAgB,KAAK,IAAI,CAAC;IAC5D,IAAI,EAAE,MAAM,IAAI,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,uEAAuE;IACvE,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,uBAAuB;IACvB,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC3B;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kFAAkF;IAClF,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,wCAAwC;IACxC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAC/B,mEAAmE;IACnE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,cAAc,mHA0H1B,CAAC"}
|
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
import type { NeetoEditorBridge } from "./bridges/types";
|
|
2
|
-
import type { RichTextImage } from "./types";
|
|
3
2
|
type RichTextToolbarProps = {
|
|
4
3
|
editor: NeetoEditorBridge;
|
|
5
4
|
colors: string[];
|
|
6
|
-
onPickImage?: () => Promise<RichTextImage | null>;
|
|
7
|
-
onPickLink?: (current?: string) => Promise<string | null>;
|
|
8
5
|
};
|
|
9
|
-
export declare const RichTextToolbar: ({ editor, colors
|
|
6
|
+
export declare const RichTextToolbar: ({ editor, colors }: RichTextToolbarProps) => import("react").JSX.Element;
|
|
10
7
|
export {};
|
|
11
8
|
//# sourceMappingURL=RichTextToolbar.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RichTextToolbar.d.ts","sourceRoot":"","sources":["../../../../../src/components/RichTextEditor/RichTextToolbar.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"RichTextToolbar.d.ts","sourceRoot":"","sources":["../../../../../src/components/RichTextEditor/RichTextToolbar.tsx"],"names":[],"mappings":"AA+BA,OAAO,KAAK,EAAoB,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAE3E,KAAK,oBAAoB,GAAG;IAC1B,MAAM,EAAE,iBAAiB,CAAC;IAC1B,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC;AA+BF,eAAO,MAAM,eAAe,GAAI,oBAAoB,oBAAoB,gCAsSvE,CAAC"}
|
|
@@ -1,16 +1,3 @@
|
|
|
1
1
|
import { BridgeExtension } from "@10play/tentap-editor";
|
|
2
|
-
export
|
|
3
|
-
src: string;
|
|
4
|
-
width: number;
|
|
5
|
-
height?: number;
|
|
6
|
-
};
|
|
7
|
-
export type FigureEditorInstance = {
|
|
8
|
-
insertFigure: (attributes: FigureAttributes) => void;
|
|
9
|
-
};
|
|
10
|
-
type FigureMessage = {
|
|
11
|
-
type: "insert-figure";
|
|
12
|
-
payload: FigureAttributes;
|
|
13
|
-
};
|
|
14
|
-
export declare const FigureBridge: BridgeExtension<object, FigureEditorInstance, FigureMessage>;
|
|
15
|
-
export {};
|
|
2
|
+
export declare const FigureBridge: BridgeExtension<object, object, unknown>;
|
|
16
3
|
//# sourceMappingURL=FigureBridge.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FigureBridge.d.ts","sourceRoot":"","sources":["../../../../../../src/components/RichTextEditor/bridges/FigureBridge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAIxD,
|
|
1
|
+
{"version":3,"file":"FigureBridge.d.ts","sourceRoot":"","sources":["../../../../../../src/components/RichTextEditor/bridges/FigureBridge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAIxD,eAAO,MAAM,YAAY,0CAEvB,CAAC"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import type { BridgeState, EditorBridge } from "@10play/tentap-editor";
|
|
2
2
|
import type { CodeBlockEditorInstance, CodeBlockEditorState } from "./CodeBlockBridge";
|
|
3
3
|
import type { ComposerEditorInstance, ComposerEditorState } from "./ComposerBridge";
|
|
4
|
-
import type { FigureEditorInstance } from "./FigureBridge";
|
|
5
4
|
import type { MentionEditorInstance, MentionEditorState } from "./MentionBridge";
|
|
6
|
-
export type NeetoEditorBridge = EditorBridge & CodeBlockEditorInstance &
|
|
5
|
+
export type NeetoEditorBridge = EditorBridge & CodeBlockEditorInstance & MentionEditorInstance & ComposerEditorInstance;
|
|
7
6
|
export type NeetoBridgeState = BridgeState & CodeBlockEditorState & MentionEditorState & ComposerEditorState;
|
|
8
7
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../src/components/RichTextEditor/bridges/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAEvE,OAAO,KAAK,EACV,uBAAuB,EACvB,oBAAoB,EACrB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EACV,sBAAsB,EACtB,mBAAmB,EACpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../src/components/RichTextEditor/bridges/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAEvE,OAAO,KAAK,EACV,uBAAuB,EACvB,oBAAoB,EACrB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EACV,sBAAsB,EACtB,mBAAmB,EACpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EACV,qBAAqB,EACrB,kBAAkB,EACnB,MAAM,iBAAiB,CAAC;AAEzB,MAAM,MAAM,iBAAiB,GAAG,YAAY,GAC1C,uBAAuB,GACvB,qBAAqB,GACrB,sBAAsB,CAAC;AAEzB,MAAM,MAAM,gBAAgB,GAAG,WAAW,GACxC,oBAAoB,GACpB,kBAAkB,GAClB,mBAAmB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/RichTextEditor/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,YAAY,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/RichTextEditor/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,YAAY,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"editorHtml.d.ts","sourceRoot":"","sources":["../../../../../../../src/components/RichTextEditor/web/build/editorHtml.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"editorHtml.d.ts","sourceRoot":"","sources":["../../../../../../../src/components/RichTextEditor/web/build/editorHtml.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,UAAU,EAAE,MAA6hnnB,CAAC"}
|
|
@@ -19,7 +19,7 @@ export { NeetoUIProvider, type NeetoUIProviderProps, } from "./components/NeetoU
|
|
|
19
19
|
export { OnBoarding, type OnBoardingProps, type OnBoardingSlide, } from "./components/OnBoarding";
|
|
20
20
|
export { ParentView, type ParentViewProps } from "./components/ParentView";
|
|
21
21
|
export { RadioButton, type RadioButtonProps } from "./components/RadioButton";
|
|
22
|
-
export { RichTextEditor, type RichTextEditorProps, type RichTextEditorRef,
|
|
22
|
+
export { RichTextEditor, type RichTextEditorProps, type RichTextEditorRef, } from "./components/RichTextEditor";
|
|
23
23
|
export { ScrollView, type ScrollViewProps } from "./components/ScrollView";
|
|
24
24
|
export { SearchBar, type SearchBarProps } from "./components/SearchBar";
|
|
25
25
|
export { TextWithUrl, type TextWithUrlProps } from "./components/TextWithUrl";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,kBAAkB,CAAC;AAE1B,OAAO,EAAE,KAAK,EAAE,KAAK,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC/E,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC/E,OAAO,EACL,WAAW,EACX,KAAK,gBAAgB,EACrB,KAAK,0BAA0B,GAChC,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,eAAe,EACf,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,GAC1B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EACL,SAAS,EACT,YAAY,EACZ,iCAAiC,EACjC,KAAK,oBAAoB,EACzB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,GACvB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,EACL,UAAU,EACV,MAAM,EACN,YAAY,EACZ,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,KAAK,iBAAiB,GACvB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,KAAK,EACL,UAAU,EACV,KAAK,UAAU,EACf,KAAK,eAAe,GACrB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EACL,eAAe,EACf,KAAK,oBAAoB,GAC1B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,UAAU,EACV,KAAK,eAAe,EACpB,KAAK,eAAe,GACrB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC9E,OAAO,EACL,cAAc,EACd,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -29,11 +29,7 @@ import { StyleSheet, useUnistyles } from "react-native-unistyles";
|
|
|
29
29
|
|
|
30
30
|
import { moderateScale, scaleFor } from "../../utils/scale";
|
|
31
31
|
import { BottomSheet } from "../BottomSheet";
|
|
32
|
-
import {
|
|
33
|
-
RichTextEditor,
|
|
34
|
-
type RichTextEditorProps,
|
|
35
|
-
type RichTextEditorRef,
|
|
36
|
-
} from "../RichTextEditor";
|
|
32
|
+
import { RichTextEditor, type RichTextEditorRef } from "../RichTextEditor";
|
|
37
33
|
import { TextType } from "../RichTextEditor/icons";
|
|
38
34
|
import { Skeleton } from "../Skeleton";
|
|
39
35
|
import { Toast } from "../Toast";
|
|
@@ -196,10 +192,6 @@ export type ChatInputProps = Omit<
|
|
|
196
192
|
signatureHTML?: string;
|
|
197
193
|
/** Rich only: the document the reply editor starts with; notes start empty. */
|
|
198
194
|
initialHTML?: string;
|
|
199
|
-
/** Rich only. */
|
|
200
|
-
onPickImage?: RichTextEditorProps["onPickImage"];
|
|
201
|
-
/** Rich only. */
|
|
202
|
-
onPickLink?: RichTextEditorProps["onPickLink"];
|
|
203
195
|
};
|
|
204
196
|
|
|
205
197
|
/**
|
|
@@ -246,8 +238,6 @@ export const ChatInput = forwardRef<ChatInputRef, ChatInputProps>(
|
|
|
246
238
|
onRichTextChange,
|
|
247
239
|
initialHTML,
|
|
248
240
|
signatureHTML,
|
|
249
|
-
onPickImage,
|
|
250
|
-
onPickLink,
|
|
251
241
|
...inputProps
|
|
252
242
|
},
|
|
253
243
|
ref
|
|
@@ -611,9 +601,7 @@ export const ChatInput = forwardRef<ChatInputRef, ChatInputProps>(
|
|
|
611
601
|
}
|
|
612
602
|
toolbar={isFormattingVisible ? "fixed" : "none"}
|
|
613
603
|
trailingHTML={isNote ? undefined : signatureHTML}
|
|
614
|
-
onPickImage={onPickImage}
|
|
615
604
|
onChange={() => handleRichChange(key)}
|
|
616
|
-
onPickLink={onPickLink}
|
|
617
605
|
/>
|
|
618
606
|
);
|
|
619
607
|
})}
|
|
@@ -24,7 +24,6 @@ import { editorCss } from "./editorCss";
|
|
|
24
24
|
import { injectableText } from "./injectableText";
|
|
25
25
|
import { MentionSuggestionBar } from "./MentionSuggestionBar";
|
|
26
26
|
import { RichTextToolbar } from "./RichTextToolbar";
|
|
27
|
-
import type { RichTextImage } from "./types";
|
|
28
27
|
import { editorHtml } from "./web/build/editorHtml";
|
|
29
28
|
|
|
30
29
|
export interface RichTextEditorRef {
|
|
@@ -34,7 +33,6 @@ export interface RichTextEditorRef {
|
|
|
34
33
|
insertHTML: (html: string) => void;
|
|
35
34
|
focus: (where?: "start" | "end" | "emptyParagraph") => void;
|
|
36
35
|
blur: () => void;
|
|
37
|
-
insertImage: (image: RichTextImage) => void;
|
|
38
36
|
}
|
|
39
37
|
|
|
40
38
|
export interface RichTextEditorProps {
|
|
@@ -48,10 +46,6 @@ export interface RichTextEditorProps {
|
|
|
48
46
|
onBlur?: () => void;
|
|
49
47
|
/** Default "fixed". */
|
|
50
48
|
toolbar?: "fixed" | "none";
|
|
51
|
-
/** Resolves to the uploaded image, or null when cancelled. Absent → no image button. */
|
|
52
|
-
onPickImage?: () => Promise<RichTextImage | null>;
|
|
53
|
-
/** Resolves to a URL, "" to remove the link, or null when cancelled. */
|
|
54
|
-
onPickLink?: (current?: string) => Promise<string | null>;
|
|
55
49
|
/**
|
|
56
50
|
* Trailing part of initialHTML (a signature). The first focus puts the
|
|
57
51
|
* cursor just above it, as desk-web does.
|
|
@@ -83,8 +77,6 @@ export const RichTextEditor = forwardRef<
|
|
|
83
77
|
onFocus,
|
|
84
78
|
onBlur,
|
|
85
79
|
toolbar = "fixed",
|
|
86
|
-
onPickImage,
|
|
87
|
-
onPickLink,
|
|
88
80
|
colors,
|
|
89
81
|
mentions = [],
|
|
90
82
|
backgroundColor,
|
|
@@ -160,7 +152,6 @@ export const RichTextEditor = forwardRef<
|
|
|
160
152
|
? editor.focusEmptyParagraph()
|
|
161
153
|
: editor.focus(where ?? "end"),
|
|
162
154
|
blur: () => editor.blur(),
|
|
163
|
-
insertImage: image => editor.insertFigure(image),
|
|
164
155
|
}),
|
|
165
156
|
[editor]
|
|
166
157
|
);
|
|
@@ -188,12 +179,7 @@ export const RichTextEditor = forwardRef<
|
|
|
188
179
|
/>
|
|
189
180
|
) : (
|
|
190
181
|
toolbar === "fixed" && (
|
|
191
|
-
<RichTextToolbar
|
|
192
|
-
colors={palette}
|
|
193
|
-
editor={editor}
|
|
194
|
-
onPickImage={onPickImage}
|
|
195
|
-
onPickLink={onPickLink}
|
|
196
|
-
/>
|
|
182
|
+
<RichTextToolbar colors={palette} editor={editor} />
|
|
197
183
|
)
|
|
198
184
|
)}
|
|
199
185
|
</View>
|
|
@@ -11,7 +11,6 @@ import { useBridgeState } from "@10play/tentap-editor";
|
|
|
11
11
|
import Close from "@bigbinary/neeto-icons-rn/icons/Close";
|
|
12
12
|
import Code from "@bigbinary/neeto-icons-rn/icons/Code";
|
|
13
13
|
import CodeBlock from "@bigbinary/neeto-icons-rn/icons/CodeBlock";
|
|
14
|
-
import ImageUpload from "@bigbinary/neeto-icons-rn/icons/ImageUpload";
|
|
15
14
|
import Link from "@bigbinary/neeto-icons-rn/icons/Link";
|
|
16
15
|
import ListDot from "@bigbinary/neeto-icons-rn/icons/ListDot";
|
|
17
16
|
import ListNumber from "@bigbinary/neeto-icons-rn/icons/ListNumber";
|
|
@@ -31,13 +30,10 @@ import { Typography } from "../Typography";
|
|
|
31
30
|
|
|
32
31
|
import { KeyboardDismiss, Pilcrow } from "./icons";
|
|
33
32
|
import type { NeetoBridgeState, NeetoEditorBridge } from "./bridges/types";
|
|
34
|
-
import type { RichTextImage } from "./types";
|
|
35
33
|
|
|
36
34
|
type RichTextToolbarProps = {
|
|
37
35
|
editor: NeetoEditorBridge;
|
|
38
36
|
colors: string[];
|
|
39
|
-
onPickImage?: () => Promise<RichTextImage | null>;
|
|
40
|
-
onPickLink?: (current?: string) => Promise<string | null>;
|
|
41
37
|
};
|
|
42
38
|
|
|
43
39
|
type ToolbarItem = {
|
|
@@ -69,12 +65,7 @@ const escapeHtml = (value: string) =>
|
|
|
69
65
|
const withScheme = (url: string) =>
|
|
70
66
|
/^(https?|mailto|tel):/i.test(url) ? url : `https://${url}`;
|
|
71
67
|
|
|
72
|
-
export const RichTextToolbar = ({
|
|
73
|
-
editor,
|
|
74
|
-
colors,
|
|
75
|
-
onPickImage,
|
|
76
|
-
onPickLink,
|
|
77
|
-
}: RichTextToolbarProps) => {
|
|
68
|
+
export const RichTextToolbar = ({ editor, colors }: RichTextToolbarProps) => {
|
|
78
69
|
const state = useBridgeState(editor) as NeetoBridgeState;
|
|
79
70
|
const { theme } = useUnistyles();
|
|
80
71
|
const { width } = useWindowDimensions();
|
|
@@ -92,25 +83,13 @@ export const RichTextToolbar = ({
|
|
|
92
83
|
setPanel("main");
|
|
93
84
|
};
|
|
94
85
|
|
|
95
|
-
const
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
setPanel("link");
|
|
103
|
-
|
|
104
|
-
return;
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
const url = await onPickLink(state.activeLink);
|
|
108
|
-
if (url !== null) editor.setLink(url || null);
|
|
109
|
-
};
|
|
110
|
-
|
|
111
|
-
const pickImage = async () => {
|
|
112
|
-
const image = await onPickImage?.();
|
|
113
|
-
if (image) editor.insertFigure(image);
|
|
86
|
+
const openLinkForm = () => {
|
|
87
|
+
linkRange.current = state.linkRange ??
|
|
88
|
+
state.selection ?? { from: 0, to: 0 };
|
|
89
|
+
setLinkText(state.linkText ?? "");
|
|
90
|
+
setLinkUrl(state.activeLink ?? "");
|
|
91
|
+
setOpensInNewTab(state.linkOpensInNewTab ?? true);
|
|
92
|
+
setPanel("link");
|
|
114
93
|
};
|
|
115
94
|
|
|
116
95
|
const items: ToolbarItem[] = [
|
|
@@ -136,7 +115,7 @@ export const RichTextToolbar = ({
|
|
|
136
115
|
label: "Link",
|
|
137
116
|
Icon: Link,
|
|
138
117
|
isActive: !!state.activeLink,
|
|
139
|
-
onPress:
|
|
118
|
+
onPress: openLinkForm,
|
|
140
119
|
},
|
|
141
120
|
{
|
|
142
121
|
label: "Strikethrough",
|
|
@@ -162,9 +141,6 @@ export const RichTextToolbar = ({
|
|
|
162
141
|
isActive: state.isBlockquoteActive,
|
|
163
142
|
onPress: editor.toggleBlockquote,
|
|
164
143
|
},
|
|
165
|
-
...(onPickImage
|
|
166
|
-
? [{ label: "Image", Icon: ImageUpload, onPress: pickImage }]
|
|
167
|
-
: []),
|
|
168
144
|
{
|
|
169
145
|
label: "Text colour",
|
|
170
146
|
Icon: TextColor,
|
|
@@ -2,37 +2,6 @@ import { BridgeExtension } from "@10play/tentap-editor";
|
|
|
2
2
|
|
|
3
3
|
import { Figure } from "./nodes/Figure";
|
|
4
4
|
|
|
5
|
-
export
|
|
6
|
-
|
|
7
|
-
export type FigureEditorInstance = {
|
|
8
|
-
insertFigure: (attributes: FigureAttributes) => void;
|
|
9
|
-
};
|
|
10
|
-
|
|
11
|
-
type FigureMessage = { type: "insert-figure"; payload: FigureAttributes };
|
|
12
|
-
|
|
13
|
-
export const FigureBridge = new BridgeExtension<
|
|
14
|
-
object,
|
|
15
|
-
FigureEditorInstance,
|
|
16
|
-
FigureMessage
|
|
17
|
-
>({
|
|
5
|
+
export const FigureBridge = new BridgeExtension<object, object, unknown>({
|
|
18
6
|
tiptapExtension: Figure,
|
|
19
|
-
onBridgeMessage: (editor, message) => {
|
|
20
|
-
if (message.type !== "insert-figure") return false;
|
|
21
|
-
|
|
22
|
-
const { src, width, height } = message.payload;
|
|
23
|
-
editor
|
|
24
|
-
.chain()
|
|
25
|
-
.focus()
|
|
26
|
-
.insertContent({
|
|
27
|
-
type: Figure.name,
|
|
28
|
-
attrs: { src, figwidth: width, figheight: height ?? "auto" },
|
|
29
|
-
})
|
|
30
|
-
.run();
|
|
31
|
-
|
|
32
|
-
return true;
|
|
33
|
-
},
|
|
34
|
-
extendEditorInstance: sendBridgeMessage => ({
|
|
35
|
-
insertFigure: payload =>
|
|
36
|
-
sendBridgeMessage({ type: "insert-figure", payload }),
|
|
37
|
-
}),
|
|
38
7
|
});
|
|
@@ -8,7 +8,6 @@ import type {
|
|
|
8
8
|
ComposerEditorInstance,
|
|
9
9
|
ComposerEditorState,
|
|
10
10
|
} from "./ComposerBridge";
|
|
11
|
-
import type { FigureEditorInstance } from "./FigureBridge";
|
|
12
11
|
import type {
|
|
13
12
|
MentionEditorInstance,
|
|
14
13
|
MentionEditorState,
|
|
@@ -16,7 +15,6 @@ import type {
|
|
|
16
15
|
|
|
17
16
|
export type NeetoEditorBridge = EditorBridge &
|
|
18
17
|
CodeBlockEditorInstance &
|
|
19
|
-
FigureEditorInstance &
|
|
20
18
|
MentionEditorInstance &
|
|
21
19
|
ComposerEditorInstance;
|
|
22
20
|
|