forked from github/plane
0b1efb173f
* removed relative imports from editor core * Update issue widget file paths and imports to use kebab case instead of camel case, to align with coding conventions and improve consistency. * Update Tiptap core and extensions versions to 2.1.13 and Tiptap React version to 2.1.13. Update Tiptap table imports to use the new location in package @tiptap/pm/tables. Update AlertLabel component to use the new type definition for LucideIcon. * updated lock file * removed default exports from editor/core * fixed injecting css into the core package itself * seperated css code to have single source of origin wrt to the package * removed default imports from document editor * all instances using index as key while mapping fixed * Update Lite Text Editor package.json to remove @plane/editor-types as a dependency. Update Lite Text Editor index.ts to update the import of IMentionSuggestion and IMentionHighlight from @plane/editor-types to @plane/editor-core. Update Lite Text Editor ui/index.tsx to update the import of UploadImage, DeleteImage, IMentionSuggestion, and RestoreImage from @plane/editor-types to @plane/editor-core. Update Lite Text Editor ui/menus/fixed-menu/index.tsx to update the import of UploadImage from @plane/editor-types to @plane/editor-core. Update turbo.json to remove @plane/editor-types#build as a dependency for @plane/lite-text-editor#build, @plane/rich-text-editor#build, and @plane/document-editor#build. * Remove deprecated import and adjust tippy.js usage in the slash-commands.tsx file of the editor extensions package. * Update dependencies in `rich-text-editor/package.json`, remove `@plane/editor-types` and add `@plane/editor-core` in `rich-text-editor/src/index.ts`, and update imports in `rich-text-editor/src/ui/extensions/index.tsx` and `rich-text-editor/src/ui/index.tsx` to use `@plane/editor-core` instead of `@plane/editor-types`. * Update package.json dependencies and add new types for image deletion, upload, restore, mention highlight, mention suggestion, and slash command item. * Update import statements in various files to use the new package "@plane/editor-core" instead of "@plane/editor-types". * fixed document editor to follow conventions * Refactor imports in the Rich Text Editor package to use relative paths instead of absolute paths. - Updated imports in `index.ts`, `ui/index.tsx`, and `ui/menus/bubble-menu/index.tsx` to use relative paths. - Updated `tsconfig.json` to include the `baseUrl` compiler option and adjust the `include` and `exclude` paths. * Refactor Lite Text Editor code to use relative import paths instead of absolute import paths. * Added LucideIconType to the exports in index.ts for use in other files. Created a new file lucide-icon.ts which contains the type LucideIconType. Updated the icon type in HeadingOneItem in menu-items/index.tsx to use LucideIconType. Updated the Icon type in AlertLabel in alert-label.tsx to use LucideIconType. Updated the Icon type in VerticalDropdownItemProps in vertical-dropdown-menu.tsx to use LucideIconType. Updated the Icon type in BubbleMenuItem in fixed-menu/index.tsx to use LucideIconType. Deleted the file tooltip.tsx since it is no longer used. Updated the Icon type in BubbleMenuItem in bubble-menu/index.tsx to use LucideIconType. * ♻️ refactor: simplify rendering logic in slash-commands.tsx The rendering logic in the file "slash-commands.tsx" has been simplified. Previously, the code used inline positioning for the popup, but it has now been removed. Instead of appending the popup to the document body, it is now appended to the element with the ID "tiptap-container". The "flip" option has also been removed. These changes have improved the readability and maintainability of the code. * fixed build errors caused due to core's internal imports * regression: fixed pages not saving issue and not duplicating with proper content issue * build: Update @tiptap dependencies Updated the @tiptap dependencies in the package.json files of `document-editor`, `extensions`, and `rich-text-editor` packages to version 2.1.13. * 🚑 fix: Correct appendTo selector in slash-commands.tsx Update the `appendTo` function call in `slash-commands.tsx` to use the correct selector `#editor-container` instead of `#tiptap-container`. This ensures that the component is appended to the appropriate container in the editor extension. Note: The commit message assumes that the change is a fix for an issue or error. If it's not a fix, please provide more context so that an appropriate commit type can be determined. |
||
---|---|---|
.. | ||
src | ||
.eslintrc.js | ||
.prettierignore | ||
.prettierrc | ||
package.json | ||
postcss.config.js | ||
Readme.md | ||
tailwind.config.js | ||
tsconfig.json | ||
tsup.config.ts |
@plane/lite-text-editor
Description
The @plane/lite-text-editor
package extends from the editor-core
package, inheriting its base functionality while adding its own unique features of Custom control over Enter key, etc.
Key Features
-
Exported Components: There are two components exported from the Lite text editor (with and without Ref), you can choose to use the
withRef
instance whenever you want to control the Editor’s state via a side effect of some external action from within the application code.LiteTextEditor
&LiteTextEditorWithRef
-
Read Only Editor Instances: We have added a really light weight Read Only Editor instance for the Lite editor types (with and without Ref)
LiteReadOnlyEditor
&LiteReadOnlyEditorWithRef
LiteTextEditor
Prop | Type | Description |
---|---|---|
uploadFile |
(file: File) => Promise<string> |
A function that handles file upload. It takes a file as input and handles the process of uploading that file. |
deleteFile |
(assetUrlWithWorkspaceId: string) => Promise<any> |
A function that handles deleting an image. It takes the asset url from your bucket and handles the process of deleting that image. |
value |
html string |
The initial content of the editor. |
onEnterKeyPress |
(e) => void |
The event that happens on Enter key press |
debouncedUpdatesEnabled |
boolean |
If set to true, the onChange event handler is debounced, meaning it will only be invoked after the specified delay (default 1500ms) once the user has stopped typing. |
onChange |
(json: any, html: string) => void |
This function is invoked whenever the content of the editor changes. It is passed the new content in both JSON and HTML formats. |
setIsSubmitting |
(isSubmitting: "submitting" | "submitted" | "saved") => void |
This function is called to update the submission status. |
setShouldShowAlert |
(showAlert: boolean) => void |
This function is used to show or hide an alert incase of content not being "saved". |
noBorder |
boolean |
If set to true, the editor will not have a border. |
borderOnFocus |
boolean |
If set to true, the editor will show a border when it is focused. |
customClassName |
string |
This is a custom CSS class that can be applied to the editor. |
editorContentCustomClassNames |
string |
This is a custom CSS class that can be applied to the editor content. |
Usage
- Here is an example of how to use the
RichTextEditor
component
<LiteTextEditor
onEnterKeyPress={handleSubmit(handleCommentUpdate)}
uploadFile={fileService.getUploadFileFunction(workspaceSlug)}
deleteFile={fileService.deleteImage}
value={value}
debouncedUpdatesEnabled={false}
customClassName="min-h-[50px] p-3 shadow-sm"
onChange={(comment_json: Object, comment_html: string) => {
onChange(comment_html);
}}
/>
- Example of how to use the
LiteTextEditorWithRef
component
const editorRef = useRef<any>(null);
// can use it to set the editor's value
editorRef.current?.setEditorValue(`${watch("description_html")}`);
// can use it to clear the editor
editorRef?.current?.clearEditor();
return (
<LiteTextEditorWithRef
onEnterKeyPress={handleSubmit(handleCommentUpdate)}
uploadFile={fileService.getUploadFileFunction(workspaceSlug)}
deleteFile={fileService.deleteImage}
ref={editorRef}
value={value}
debouncedUpdatesEnabled={false}
customClassName="min-h-[50px] p-3 shadow-sm"
onChange={(comment_json: Object, comment_html: string) => {
onChange(comment_html);
}}
/>
);
LiteReadOnlyEditor
Prop | Type | Description |
---|---|---|
value |
html string |
The initial content of the editor. |
noBorder |
boolean |
If set to true, the editor will not have a border. |
borderOnFocus |
boolean |
If set to true, the editor will show a border when it is focused. |
customClassName |
string |
This is a custom CSS class that can be applied to the editor. |
editorContentCustomClassNames |
string |
This is a custom CSS class that can be applied to the editor content. |
Usage
Here is an example of how to use the RichReadOnlyEditor
component
<LiteReadOnlyEditor
value={comment.comment_html}
customClassName="text-xs border border-custom-border-200 bg-custom-background-100"
/>