JSPM

  • Created
  • Published
  • Downloads 110
  • Score
    100M100P100Q105543F
  • License MIT

Text editor component for Flowbite Svelte

Package Exports

  • @flowbite-svelte-plugins/texteditor
  • @flowbite-svelte-plugins/texteditor/AlignmentButton.svelte
  • @flowbite-svelte-plugins/texteditor/AlignmentButtonGroup.svelte
  • @flowbite-svelte-plugins/texteditor/BubbleMenu.svelte
  • @flowbite-svelte-plugins/texteditor/CharacterCount.svelte
  • @flowbite-svelte-plugins/texteditor/ContentWrapper.svelte
  • @flowbite-svelte-plugins/texteditor/DetailsButton.svelte
  • @flowbite-svelte-plugins/texteditor/DetailsButtonGroup.svelte
  • @flowbite-svelte-plugins/texteditor/Divider.svelte
  • @flowbite-svelte-plugins/texteditor/DragHandle.svelte
  • @flowbite-svelte-plugins/texteditor/EditableButton.svelte
  • @flowbite-svelte-plugins/texteditor/EditorConfig.svelte
  • @flowbite-svelte-plugins/texteditor/EditorWrapper.svelte
  • @flowbite-svelte-plugins/texteditor/EmojiList.svelte
  • @flowbite-svelte-plugins/texteditor/ExportButton.svelte
  • @flowbite-svelte-plugins/texteditor/ExportButtonGroup.svelte
  • @flowbite-svelte-plugins/texteditor/FloatingMenu.svelte
  • @flowbite-svelte-plugins/texteditor/FloatingMenuButton.svelte
  • @flowbite-svelte-plugins/texteditor/FontButton.svelte
  • @flowbite-svelte-plugins/texteditor/FontButtonGroup.svelte
  • @flowbite-svelte-plugins/texteditor/FormatButton.svelte
  • @flowbite-svelte-plugins/texteditor/FormatButtonGroup.svelte
  • @flowbite-svelte-plugins/texteditor/GroupCustom.svelte
  • @flowbite-svelte-plugins/texteditor/HeadingButton.svelte
  • @flowbite-svelte-plugins/texteditor/HeadingButtonGroup.svelte
  • @flowbite-svelte-plugins/texteditor/HtmlCodeButton.svelte
  • @flowbite-svelte-plugins/texteditor/ImageButton.svelte
  • @flowbite-svelte-plugins/texteditor/ImageButtonGroup.svelte
  • @flowbite-svelte-plugins/texteditor/InvisibleButton.svelte
  • @flowbite-svelte-plugins/texteditor/InvisibleButtonGroup.svelte
  • @flowbite-svelte-plugins/texteditor/LayoutButton.svelte
  • @flowbite-svelte-plugins/texteditor/LayoutButtonGroup.svelte
  • @flowbite-svelte-plugins/texteditor/ListButton.svelte
  • @flowbite-svelte-plugins/texteditor/ListButtonGroup.svelte
  • @flowbite-svelte-plugins/texteditor/MentionList.svelte
  • @flowbite-svelte-plugins/texteditor/Paragraph.svelte
  • @flowbite-svelte-plugins/texteditor/SourceButton.svelte
  • @flowbite-svelte-plugins/texteditor/SourceButtonGroup.svelte
  • @flowbite-svelte-plugins/texteditor/TableButton.svelte
  • @flowbite-svelte-plugins/texteditor/TableButtonGroup1.svelte
  • @flowbite-svelte-plugins/texteditor/TableButtonGroup2.svelte
  • @flowbite-svelte-plugins/texteditor/TaskListButton.svelte
  • @flowbite-svelte-plugins/texteditor/TaskListButtonGroup.svelte
  • @flowbite-svelte-plugins/texteditor/TextEditor.svelte
  • @flowbite-svelte-plugins/texteditor/Toc.svelte
  • @flowbite-svelte-plugins/texteditor/ToolbarRowWrapper.svelte
  • @flowbite-svelte-plugins/texteditor/ToolbarWrapper.svelte
  • @flowbite-svelte-plugins/texteditor/UndoRedo.svelte
  • @flowbite-svelte-plugins/texteditor/UndoRedoButtonGroup.svelte
  • @flowbite-svelte-plugins/texteditor/YoutubeButton.svelte
  • @flowbite-svelte-plugins/texteditor/YoutubeButtonGroup.svelte
  • @flowbite-svelte-plugins/texteditor/package.json

Readme

@flowbite-svelte-plugins/texteditor

Documentation

Use the wysiwyg text editor component to create and modify content by manipulating paragraphs, headings, images and styling them using all available options.

Installation

pnpm i -D @flowbite-svelte-plugins/texteditor

Text editor example

<script lang="ts">
  import { AlignmentButtonGroup, FontButtonGroup, UndoRedoButtonGroup, FormatButtonGroup, LayoutButtonGroup, ImageButtonGroup, ListButtonGroup, YoutubeButtonGroup, TextEditor, ToolbarRowWrapper, Divider, SourceButton } from '@flowbite-svelte-plugins/texteditor';
  import type { Editor } from '@tiptap/core';
  import { Button } from 'flowbite-svelte';

  let editorInstance = $state<Editor | null>(null);

  function getEditorContent() {
    return editorInstance?.getHTML() ?? '';
  }

  function setEditorContent(content: string) {
    editorInstance?.commands.setContent(content);
  }

  const content = `<p>Flowbite-Svelte is an <strong>open-source library of UI components</strong> based on the utility-first Tailwind CSS framework featuring dark mode support, a Figma design system, and more.</p><p>It includes all of the commonly used components that a website requires, such as buttons, dropdowns, navigation bars, modals, datepickers, advanced charts and the list goes on.</p>
    <p>Here is an example of a js block:</p><pre><code class="language-javascript">for (var i=1; i <= 20; i++)
{
  if (i % 15 == 0)
    console.log("FizzBuzz");
  else if (i % 3 == 0)
    console.log("Fizz");
  else if (i % 5 == 0)
    console.log("Buzz");
  else
    console.log(i);
}</code></pre><p>Learn more about all components from the <a href="https://flowbite-svelte.com/docs/pages/quickstart">Flowbite-Svelte Docs</a>.</p>`;
</script>

<svelte:head>
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/styles/base16/google-dark.min.css" />
</svelte:head>

<TextEditor bind:editor={editorInstance} {content}>
  <ToolbarRowWrapper>
    <FormatButtonGroup editor={editorInstance} />
    <Divider />
    <FontButtonGroup editor={editorInstance} />
    <Divider />
    <AlignmentButtonGroup editor={editorInstance} />
  </ToolbarRowWrapper>
  <ToolbarRowWrapper top={false}>
    <UndoRedoButtonGroup editor={editorInstance} />
    <Divider />
    <LayoutButtonGroup editor={editorInstance} />
    <Divider />
    <ListButtonGroup editor={editorInstance} />
    <Divider />
    <ImageButtonGroup editor={editorInstance} />
    <Divider />
    <YoutubeButtonGroup editor={editorInstance} />
    <SourceButton editor={editorInstance} />
  </ToolbarRowWrapper>
</TextEditor>

<div class="mt-4">
  <Button onclick={() => console.log(getEditorContent())}>Get Content</Button>
  <Button onclick={() => setEditorContent('<p>New content!</p>')}>Set Content</Button>
</div>