plane/packages/editor/extensions
Aaryan Khandelwal 3e2355e223
[WEB-460] refactor: editors, chore: pages list improvement (#4090)
* fix: stroing the transactions in page

* fix: page details changes

* chore: page response change

* chore: removed duplicated endpoints

* chore: optimised the urls

* chore: removed archived and favorite pages

* chore: revamping pages store and components

* mentions loading state part done

* fixed mentions not showing in modals

* removed comments and cleaned up types

* removed unused types

* reset: head

* chore: pages store and component updates

* style: pages list item UI

* fix: improved colors and drag handle width

* fix: slash commands are no more shown in the code blocks

* fix: cleanup/hide drag handles post drop

* fix: hide/cleanup drag handles post drag start

* fix: aligning the drag handles better with the node post css changes of the length

* fix: juggling back and forth of drag handles in ordered and unordered lists

* chore: fix imports, ts errors and other things

* fix: clearing nodes to default node i.e paragraph before converting it to other types of nodes

For more reference on what this does, please refer https://tiptap.dev/docs/editor/api/commands/clear-nodes

* chore: clearNodes after delete in case of selections being present

* fix: hiding link selector in the bubble menu if inline code block is selected

* chore: filtering, ordering and searching implemented

* chore: updated pages store and updated UI

* chore: new core editor just for document editor created

* chore: removed setIsSubmitting prop in doc editor

* fix: fixed submitting state for image uploads

* refactor: setShouldShowAlert removed

* refactor: rerenderOnPropsChange prop removed

* chore: type inference magic in ref to expose an api for controlling editor menu items from outside

* fix: naming imports

* chore: change names of the exposed functions and removing old types

* refactor: remove debouncedUpdatesEnabled prop;

* refactor: editor heading markings now parsed using html

* chore: removed unrelated components from the document editor

* refactor: page details granular components

* fix: remove onActionCompleteHandler

* refactor: removed rerenderOnProps change prop

* feat: added getMarkDown function

* chore: update dropdown option actions

* fix: sidebar markings update logic

* chore: add image and to-do list actions to the toolbar

* fix: handling refs and populating them via callbacks

* feat: scroll to node api exposed

* cleaning up editor refs when the editor is destroyed

* feat: scrolling added to read only instance of the editor

* fix: markings logic

* fix: build errors with types

* fix: build erros

* fix: subscribing to transactions of editor via ref

* chore: remove debug statements

* fix: type errors

* fix: temporary different slash commands for document editor

* chore: inline code extension style

* chore: remove border from readOnly editor

* fix: editor bottom padding

* chore: pages improvements

* chore: handle Enter key on the page title

* feat: added loading indicator logic in mentions

* fix: mentions and slash commands now work well with multiple editors in one place

* refactor: page store structure, filtering logic

* feat: added better seperation in inline code blocks

* feat: list autojoining added

* fix: pages folder structure

* fix: image refocus from external parts

* working lists somewhat

* chore: implement page reactions

* fix: build errors

* fix: build errors

* fixed drag handles stuff

* task list item fixed

* working

* fix: working on multiple nested lists

* chore: remove debug statements

* fix: Tab key on first list item handled to not go out of editor focus

* feat: threshold auto scroll support added and multi nested list selection fixed

* fix: caret color bug with improved inline code blocks

* fix: node range error when bulk deleting with list

* fix: removed slash commands from working in code blocks

* chore: update typography margins

* chore: new field added in page model

* fix: better type inference in slash commands

* chore: code block UI

* feat: image insertion at correct position using ref added

* feat: added improved mentions support for space

* fix: type errors in mentions for comments in web app

* sync: core with document-core

* fix: build errors

* fix: fallback for appendTo not being able to find active container instantly

* fix: page store

* fix: page description

* fix: css quality issues

* chore: code cleanup

* chore: removed placeholder text in codeblocks

* chore: archived pages response change

* chore: archived pages response change

* fix: initial pages list fetch

* fix: pages list filters and ordering

* chore: add access change option in the quick actions dropdown

* fix: inline code block caret fixed

* regression: removing extra text

* chore: caret color removed

* feat: copy code button added in code blocks

* fix: initial load of page details

* fix: initial load of page details

* fix: image resizing weird behavior on click/expanding it too much fixed now

* chore: copy page response

* fix: todo list spacing

* chore: description html in the copy page

* chore: handle latest description on refetch

* fix: saner scroll behaviours

* fix: block menu positioning

* fix: updated empty string description

* feat: tab change sync support added

* fix: infinite rerendering with markings

* fix: block menu finally

* fix: intial load on reload bug fixed

* fix: nested lists alignment

* fix: editor padding

* fix: first level list items copyable

* chore: list spacing

* fix: title change

* fix: pages list block items interaction

* fix: saving chip position

* fix: delete action from block menu to focus properly

* fix: margin-bottom as 0 to avoid weird spacing when a paragraph node follows a list node

* style: table, chore: lite text editor toolbar

* fix: page description tab sync

* fix: lists spacing and alignment

* refactor: document editor props

* feat: rich text editor wrapper created and migrated core

* feat: created wrapper around lite text editor and merged core

* chore: add lite text editor toolbar

* fix: build errors

* fix: type errors and addead live updation of toolbar

* chore: pages migration

* fix: inbox issue

* refactor: remove redundant package

* refactor: unused files

* fix: add dompurify to space app

* fix: inline code margin

* fix: editor className props

* fix: build errors

* fix: traversing up the tree before assuming the parent is not a list item

* fix: drag handle positions for list items fixed

* fix: removed focus at end logic after deleting block

* fix: image wrapper overflow scroll fix with block menu's position

* fix: selection and deletion logic for nested lists fixed!!

* fix: hiding the block menu while scrolling in the document/app

* fix: merge conflicts resolved from develop

* fix: inbox issue description

* chore: move page title to the web app

* fix: handling edge cases for table selection

* chore: lint issues

* refactor: list item functions moved to same file

* refactor: use mention hook

* fix: added try catch blocks for mention suggestions

* chore: remove unused code

* fix: remove console logs

* fix: remove console logs

---------

Co-authored-by: NarayanBavisetti <narayan3119@gmail.com>
Co-authored-by: sriram veeraghanta <veeraghanta.sriram@gmail.com>
Co-authored-by: gurusainath <gurusainath007@gmail.com>
Co-authored-by: Palanikannan1437 <73993394+Palanikannan1437@users.noreply.github.com>
2024-04-11 21:28:59 +05:30
..
src [WEB-460] refactor: editors, chore: pages list improvement (#4090) 2024-04-11 21:28:59 +05:30
.eslintrc.js chore: format all files in monorepo (#3054) 2023-12-10 15:48:10 +05:30
.prettierignore chore: format all files in monorepo (#3054) 2023-12-10 15:48:10 +05:30
.prettierrc chore: format all files in monorepo (#3054) 2023-12-10 15:48:10 +05:30
package.json [WEB-460] refactor: editors, chore: pages list improvement (#4090) 2024-04-11 21:28:59 +05:30
postcss.config.js image can't be inserted inside table (#2904) 2023-12-07 19:59:35 +05:30
Readme.md image can't be inserted inside table (#2904) 2023-12-07 19:59:35 +05:30
tailwind.config.js image can't be inserted inside table (#2904) 2023-12-07 19:59:35 +05:30
tsconfig.json [refactor] Editor code refactoring (#3194) 2023-12-22 18:10:18 +05:30
tsup.config.ts image can't be inserted inside table (#2904) 2023-12-07 19:59:35 +05:30

@plane/editor-extensions

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 Editors 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

  1. 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);
  }}
/>
  1. 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"
/>