0.2.1 • Published 3 months ago

novel-lightweight v0.2.1

Weekly downloads
-
License
Apache-2.0
Repository
github
Last release
3 months ago

Introduction

Novel is a Notion-style WYSIWYG editor with AI-powered autocompletions by Steven-tey. This is a fork with the aim of removing Vercel-blob, analytics so that your WYSIWYG editor remains lightweight and customized out of vercels's services

Installation

To use Novel in a project, you can run the following command to install the novel NPM package:

npm i novel-lightweight

Then, you can use it in your code like this:

import { Editor } from "novel-lightweight";

export default function App() {
  const [data, setData] = useState("");

  return (
    <Editor
      defaultValue={data}
      disableLocalStorage={true}
      onUpdate={(editor) => {
        setData(editor?.storage.markdown.getMarkdown());
      }}
      handleImageUpload={async (file) => {
        const uploads = await startUpload([file]);
        if (uploads && uploads.length > 0) {
          return uploads[0].url;
        }
        return "www.example.com/failed-upload.png";
      }}
    />
  );
}

The Editor is a React component that takes in the following props:

PropTypeDescriptionDefault
completionApistringThe API route to use for the OpenAI completion API./api/generate
classNamestringEditor container classname."relative min-h-[500px] w-full max-w-screen-lg border-stone-200 bg-white sm:mb-[calc(20vh)] sm:rounded-lg sm:border sm:shadow-lg"
defaultValueJSONContent or stringThe default value to use for the editor.defaultEditorContent
extensionsExtension[]A list of extensions to use for the editor, in addition to the default Novel extensions.[]
editorPropsEditorPropsProps to pass to the underlying Tiptap editor, in addition to the default Novel editor props.{}
onUpdate(editor?: Editor) => voidA callback function that is called whenever the editor is updated.() => {}
onDebouncedUpdate(editor?: Editor) => voidA callback function that is called whenever the editor is updated, but only after the defined debounce duration.() => {}
debounceDurationnumberThe duration (in milliseconds) to debounce the onDebouncedUpdate callback.750
storageKeystringThe key to use for storing the editor's value in local storage.novel__content
disableLocalStoragebooleanEnabling this option will prevent read/write content from/to local storage.false
handleImageUpload(file:File)=>Promise<string>Optional You can have your custom upload handler for images added. Takes in File as input and should return a promise which resolves to the url of the imagenull

Note: Make sure to define an API endpoint that matches the completionApi prop (default is /api/generate). This is needed for the AI autocompletions to work. Here's an example: https://github.com/Ankur-Datta-4/novel-lightweight/blob/main/apps/web/app/api/generate/route.ts

Setting Up Locally

To set up Novel locally, you'll need to clone the repository and set up the following environment variables:

To run the app locally, you can run the following commands:

pnpm i
pnpm build
pnpm dev

Tech Stack

Novel is built on the following stack:

Contributing

Here's how you can contribute:

  • Open an issue if you believe you've encountered a bug.
  • Make a pull request to add new features/make quality-of-life improvements/fix bugs.

License

Licensed under the Apache-2.0 license.