Native web components for the Quill Rich Text Editor
If you like my work, feel free to support it. Donations to the project are always welcomed :)
PayPal: PayPal.Me/bengtler
npm install stencil-quill
- load
node_modules/stencil-quill/dist/quill-components.js
in your index.html or add it to your build process or project - do not forget to install
quill
v2! and include it + theme css in your buildprocess, module orindex.html
! (the component is using the global Quill object)
<quill-editor content="" format="html" theme="snow"></quill-editor>
- Check the component readme
- content - the base content of the editor passed as string or JSON string
- readOnly (true | false) if user can edit content
- formats - array of allowed formats/groupings
- format - model format - default:
html
, values:html | text | json
, sets the model value type - html = html string, json = quill operations as json string, text = plain text - modules - configure/disable quill modules, passed as JSON-string!, e.g toolbar or add custom toolbar via html element default is
{
toolbar: [
['bold', 'italic', 'underline', 'strike'], // toggled buttons
['blockquote', 'code-block'],
[{ 'header': 1 }, { 'header': 2 }], // custom button values
[{ 'list': 'ordered'}, { 'list': 'bullet' }],
[{ 'script': 'sub'}, { 'script': 'super' }], // superscript/subscript
[{ 'indent': '-1'}, { 'indent': '+1' }], // outdent/indent
[{ 'direction': 'rtl' }], // text direction
[{ 'size': ['small', false, 'large', 'huge'] }], // custom dropdown
[{ 'header': [1, 2, 3, 4, 5, 6, false] }],
[{ 'color': [] }, { 'background': [] }], // dropdown with defaults from theme
[{ 'font': [] }],
[{ 'align': [] }],
['clean'], // remove formatting button
['link', 'image', 'video'] // link and image, video
]
};
- theme - bubble/snow, default is
snow
- styles - set a styles object, e.g.
styles="{height: '250px'}"
- placeholder - placeholder text, default is
Insert text here ...
- bounds - boundary of the editor, default
document.body
, pass 'self' to attach the editor element - possbility to create a custom toolbar via a custom slot
quill-toolbar
:
<quill-component content="test">
<div slot="quill-toolbar">
<span class="ql-formats">
<select class="ql-font">
<option value="aref">Aref Ruqaa</option>
<option value="mirza">Mirza</option>
<option selected>Roboto</option>
</select>
<select class="ql-align" title="Aligment">
<option selected></option>
<option value="center"></option>
<option value="right"></option>
<option value="justify"></option>
</select>
<select class="ql-align" title="Aligment2">
<option selected></option>
<option value="center"></option>
<option value="right"></option>
<option value="justify"></option>
</select>
</span>
<span class="ql-formats">
<div id="counter"></div>
</span>
</div>
</quill-component>
- customToolbarPosition - if you are working with a custom toolbar you can switch the position :). - default:
top
, possible valuestop
,bottom
- debug - set log level
warn
,error
,log
orfalse
to deactivate logging, default:warn
- defaultEmptValue - set the default empty value, e.g. empty string, default
null
- editorInit - editor instance
editor
- editorContentChange - text is updated by 'user'
{
editor: editorInstance,
html: html,
text: text,
content: content,
delta: delta,
oldDelta: oldDelta,
source: source
}
- editorSelectionChange - selection is updated, also triggered for onBlur and onFocus, because the selection changed
{
editor: editorInstance,
range: range,
oldRange: oldRange,
source: source
}
- editorChange - text or selection is updated - independent of the source
{
editor: editorInstance, // Quill
event: 'text-change' // event type
html: html, // html string
text: text, // plain text string
content: content, // Content - operatins representation
delta: delta, // Delta
oldDelta: oldDelta, // Delta
source: source // ('user', 'api', 'silent' , undefined)
}
or
{
editor: editorInstance, // Quill
event: 'selection-change' // event type
range: range, // Range
oldRange: oldRange, // Range
source: source // ('user', 'api', 'silent' , undefined)
}
- editorFocus - editor is focused
{
editor: editorInstance, // Quill
source: source // ('user', 'api', 'silent' , undefined)
}
- editorBlur - editor is blured
{
editor: editorInstance, // Quill
source: source // ('user', 'api', 'silent' , undefined)
}
It renders a readOnly quilljs editor without a border and toolbar. Does not provide any Events, but has similar properties.
<quill-view content="" format="html" theme="snow"></quill-view>
- Check the component readme
- content - the base content of the editor passed as string or JSON string
- formats - array of allowed formats/groupings
- format - model format - default:
html
, values:html | text | json
, sets the model value type - html = html string, json = quill operations as json string, text = plain text - modules - configure/disable quill modules, passed as JSON-string! - keep in mind toolbar will be set to false anyways
- theme - bubble/snow, default is
snow
- styles - set a styles object, e.g.
styles="{height: '250px'}"
- debug - set log level
warn
,error
,log
orfalse
to deactivate logging, default:warn
- defaultEmptValue - set the default empty value, e.g. empty string, default
null
It renders an quilljs html string as you would expect it without createing a quilljs instance.
<quill-view-html content="" theme="snow"></quill-view-html>
- Check the component readme
- content - the base content of the editor passed as string or JSON string
- theme - bubble/snow, default is
snow
- Publish to NPM
- Put a script tag similar to this
<script src='https://unpkg.com/stencil-quill/dist/quill-components/quill-components.js'></script>
in the head of your index.html - Then you can use the element anywhere in your template, JSX, html etc
- Run
npm install stencil-quill --save
- Put a script tag similar to this
<script src='node_modules/stencil-quill/dist/quill-components/quill-components.js'></script>
in the head of your index.html - Then you can use the element anywhere in your template, JSX, html etc
- Run
npm install stencil-quill --save
- Add an import to the npm packages
import quill-components;
- Then you can use the element anywhere in your template, JSX, html etc