npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

Iโ€™ve always been into building performant and accessible sites, but lately Iโ€™ve been taking it extremely seriously. So much so that Iโ€™ve been building a tool to help me optimize and monitor the sites that I build to make sure that Iโ€™m making an attempt to offer the best experience to those who visit them. If youโ€™re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, ๐Ÿ‘‹, Iโ€™m Ryan Hefnerย  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If youโ€™re interested in other things Iโ€™m working on, follow me on Twitter or check out the open source projects Iโ€™ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soonโ€“ish.

Open Software & Tools

This site wouldnโ€™t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you ๐Ÿ™

ยฉ 2026 โ€“ย Pkg Stats / Ryan Hefner

@sparkminds/custom-ckeditor-build-dev

v1.0.5

Published

This is a version customize using from packages CKEditor5. You can download and import packages from homepages of CKEdtor to create collaboration yourself or using tool online CKEitor 5 Online Builder. Or install packages builded ๐Ÿ‘‡

Downloads

128

Readme

CKEditor5-React-SparkMinds v.1.0.4

This is a version customize using from packages CKEditor5. You can download and import packages from homepages of CKEdtor to create collaboration yourself or using tool online CKEitor 5 Online Builder. Or install packages builded ๐Ÿ‘‡

Installation

npm install @ckeditor/ckeditor5-react

npm install @sparkminds/custom-ckeditor-build-dev

Usage

Integrate React

import { CKEditor } from "@ckeditor/ckeditor5-react";
import CustomBuildEditor from "@sparkminds/custom-ckeditor-build-dev/ckeditor.js";

<CKEditor
  required
  editor={CustomBuildEditor}
  onReady={(editor) => {
    // You can store the "editor" and use when it is needed.
    console.log("Editor is ready to use!", editor);
  }}
  onChange={(event, editor) => {
    const data = editor.getData();
    console.log({ event, editor, data });
  }}
  onBlur={(event, editor) => {
    console.log("Blur.", editor);
  }}
  onFocus={(event, editor) => {
    console.log("Focus.", editor);
  }}
  onInit={(event, editor) => {
    // Called here in case using DecoupledEditor not build or from src
    // In here will set CSS for editor
    // Example:
    // editor.ui.getEditableElement().parentElement.insertBefore(
    // editor.ui.view.toolbar.element,
    // editor.ui.getEditableElement()
  }}
/>;

How to show toolbar in CKEditor

<CKEditor
  required
  editor={CustomBuildEditor}
  // do something
  config={
      toolbar: {
          items: [
            'bold',
            'italic',
            'strikethrough',
            'underline', 
            'subscript', 
            'superscript', '|',
             '-',
            'heading', '|',
            'undo',
            'redo', '|',
          ]
      }
  }
/>;
  • Besides button names, you can also use the dedicated separators for toolbar groups ('|') and toolbar lines ('-').

Config plugins:

  • Example:
//...
config={
    toolbar: {
        items: [
            //...
        ]
        image: {
            resizeUnit: 'px',
            toolbar: [
                'imageStyle:inline',
                'imageStyle:block',
                'imageStyle:side',
                '|',
                'toggleImageCaption',
                'imageTextAlternative',
            ],
            styles: ['full', 'alignLeft', 'alignRight'],
            type: ['JPEG', 'JPG', 'GIF', 'PNG'],
        },
    },
}

Custom Upload Adapter

  • Set extraPlugins to config
<CKEditor>
    required
    editor={CustomBuildEditor}
    config={
        extraPlugins: [CustomUploadAdapterPlugin]
        toolbar : {
            items: //...
        }
        image: {
            //... 
        }
        //..
    }
/>

// loader: file upload. Default will Base64 in case not internet or server error(in package imported and config Base64)

function CustomUploadAdapterPlugin(editor) {
  editor.plugins.get('FileRepository').createUploadAdapter = (loader) => {
    return new UploadAdapter(loader); // Here return Promise ๐Ÿ˜‚
  };
}
  • Interface UploadAdapter: method upload() will return a promise:
    • resolved by a successful upload with an object containing information about the uploaded file.
    • rejected because of an error, in which case nothing is inserted into the content.
class UploadAdapter {
  constructor(loader) {
    this.loader = loader;
  }
  upload() {
    return this.loader.file.then(
      uploadedFile => new Promise((res, rej) => {
          // CALL API
          upLoadImageBefore().then((r) => {
            // Data will response in here
            // Handle result response in here and return resolve or rejected
          });
        }),
    );
  }
}
  • Example UploadAdapter
class UploadAdapter {
  constructor(loader) {
    this.loader = loader;
  }
  upload() {
    return this.loader.file.then(
      uploadedFile => new Promise((res, rej) => {
          const data = new FormData();
          data.append('upload', uploadedFile);
          async function upLoadImageBefore() {
            try {
              const res_wait = await apiClient.postMethod(URL_UPLOAD_IMAGE, data, null);
              return res_wait;
            } catch (e) {
              throw e;
            }
          }
          upLoadImageBefore().then((r) => {
            res({
              default: r.data.default,
            });
            rej(r.messageCode);
          });
        }),
    );
  }
}

You should using Class Component in React for CKEditor beacause have issues if using function component

import React, { Component } from 'react';

class EditorComponent extends Component {
  render() {
    const { value, onChange } = this.props; 
    // ...
    return (
      <CKEditor
        //...
      />
    );
  }
}

License