slate-editor-icons
Version:
icons for slate editors
163 lines (127 loc) • 4.15 kB
Markdown
# slate-editor-icons [![NPM version][npm-image]][npm-url] [![Build Status][travis-image]][travis-url] [![Dependency Status][daviddm-image]][daviddm-url]
> icons ([quill-icons](https://github.com/Canner/quill-icons)) for slate editors
## Installation
```sh
$ npm install --save slate-editor-icons
```
## Icons support
#### Blocks
- Icons.blocks.Blockquote (blockquote)
- icon: `Blockquote`
- default slate type: `blockquote`
- Icons.blocks.Heading (heading, \<h1/\>, \<h2/\> ..., this is a dropdown menu)
- icon: `Header`
- default slate type: h1 - `heading1`, h2 - `heading2`, h3 - `heading3`, h4 - `heading4`.
- Icons.blocks.OlList (\<ol/\> list)
- icon: `ListOrdered`
- default slate type: `list-ol`
- Icons.blocks.UlList (\<ul/\> list)
- icon: `ListBullet`
- default slate type: `list-ul`
#### Inlines
- Icons.inlines.Link (link \<a/\>)
- icon: `Link`
- default slate type: `link`
#### Marks
- Icons.marks.Bold (\<b/\>)
- icon: `Bold`
- default slate type: `bold`
- Icons.marks.Code (\<code/\>)
- icon: `Code`
- default slate type: `code`
- Icons.marks.Italic (\<i/\>)
- icon: `Italic`
- default slate type: `italic`
- Icons.marks.StrikeThrough (\<s/\>)
- icon: `Strike`
- default slate type: `strikethrough`
- Icons.marks.Underline (\<u/\>)
- icon: `Underline`
- default slate type: `underline`
## Usage
Every icons in [Icons support](#icons-support) are React element, you can use it any where you like in your React component as below.
```js
import React from 'react';
import ReactDOM from 'react-dom';
import {Editor, Raw} from 'slate';
import Icons from 'slate-editor-icons';
const initialState = Raw.deserialize({
nodes: [
{
kind: 'block',
type: 'paragraph',
nodes: [
{
kind: 'text',
text: 'A line of text in a paragraph.'
}
]
}
]
}, {terse: true});
const icons = [
// load marks icons
Icons.marks.Bold,
Icons.marks.Italic,
Icons.marks.Underline,
Icons.marks.Code,
Icons.marks.StrikeThrough,
// load inlines icons
Icons.inlines.Link,
// load blocks icons
Icons.blocks.Heading,
Icons.blocks.Blockquote,
Icons.blocks.OlList,
Icons.blocks.UlList
];
class App extends React.Component {
// Set the initial state when the app is first constructed.
state = {
state: initialState
}
render() {
const {state} = this.state;
const onChange = state => this.setState({state});
return (
<div style={{margin: '50px'}}>
{icons.map((Type, i) => {
return React.createElement(Type, {
key: i,
state: state,
onChange: onChange
});
})}
<Editor
state={state}
onChange={onChange}
/>
</div>
);
}
}
ReactDOM.render(
<App/>
, document.getElementById('root'));
```
example: https://github.com/Canner/slate-editor-icons/blob/master/docs/index.js
## Props
| **props** | **type** | **required** | **default** | **description** |
|-----------|----------|--------------|-------------|------------------|
| state | object | true | null | slate state |
| onChange | func | true | null | onChange function usually `state => this.setState({state})` to update slate state |
| icon | string | false | every items have it's own icon see [icons support](#icons-support) | the icon |
type | string | false | every items have it's own type see [icons support](#icons-support) | slate block, inline, mark type.
## Start example server
```
node devServer.js
```
## Maintainer
[chilijung](https://github.com/chilijung)
## License
MIT © [Canner](https://github.com/Canner)
[npm-image]: https://badge.fury.io/js/slate-editor-icons.svg
[npm-url]: https://npmjs.org/package/slate-editor-icons
[travis-image]: https://travis-ci.org/Canner/slate-editor-icons.svg?branch=master
[travis-url]: https://travis-ci.org/Canner/slate-editor-icons
[daviddm-image]: https://david-dm.org/Canner/slate-editor-icons.svg?theme=shields.io
[daviddm-url]: https://david-dm.org/Canner/slate-editor-icons