first commit
31
public/assets/quill/LICENSE
Normal file
@@ -0,0 +1,31 @@
|
||||
Copyright (c) 2017-2024, Slab
|
||||
Copyright (c) 2014, Jason Chen
|
||||
Copyright (c) 2013, salesforce.com
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
3. Neither the name of the copyright holder nor the names of its
|
||||
contributors may be used to endorse or promote products derived from
|
||||
this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||
IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||
TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
||||
PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
104
public/assets/quill/README.md
Normal file
@@ -0,0 +1,104 @@
|
||||
<h1 align="center">
|
||||
<a href="https://quilljs.com/" title="Quill">Quill Rich Text Editor</a>
|
||||
</h1>
|
||||
<p align="center">
|
||||
<a href="https://quilljs.com/" title="Quill"><img alt="Quill Logo" src="https://quilljs.com/assets/images/logo.svg" width="180"></a>
|
||||
</p>
|
||||
<p align="center">
|
||||
<a title="Documentation" href="https://quilljs.com/docs/quickstart"><strong>Documentation</strong></a>
|
||||
•
|
||||
<a title="Development" href="https://github.com/slab/quill/blob/main/.github/DEVELOPMENT.md"><strong>Development</strong></a>
|
||||
•
|
||||
<a title="Contributing" href="https://github.com/slab/quill/blob/main/.github/CONTRIBUTING.md"><strong>Contributing</strong></a>
|
||||
•
|
||||
<a title="Interactive Playground" href="https://quilljs.com/playground/"><strong>Interactive Playground</strong></a>
|
||||
</p>
|
||||
<p align="center">
|
||||
<a href="https://github.com/slab/quill/actions" title="Build Status"><img src="https://github.com/slab/quill/actions/workflows/main.yml/badge.svg" alt="Build Status"></a>
|
||||
<a href="https://npmjs.com/package/quill" title="Version"><img src="https://img.shields.io/npm/v/quill.svg" alt="Version"></a>
|
||||
<a href="https://npmjs.com/package/quill" title="Downloads"><img src="https://img.shields.io/npm/dm/quill.svg" alt="Downloads"></a>
|
||||
</p>
|
||||
|
||||
<hr/>
|
||||
|
||||
[Quill](https://quilljs.com/) is a modern rich text editor built for compatibility and extensibility. It was created by [Jason Chen](https://twitter.com/jhchen) and [Byron Milligan](https://twitter.com/byronmilligan) and actively maintained by [Slab](https://slab.com).
|
||||
|
||||
To get started, check out [https://quilljs.com/](https://quilljs.com/) for documentation, guides, and live demos!
|
||||
|
||||
## Quickstart
|
||||
|
||||
Instantiate a new Quill object with a css selector for the div that should become the editor.
|
||||
|
||||
```html
|
||||
<!-- Include Quill stylesheet -->
|
||||
<link
|
||||
href="https://cdn.jsdelivr.net/npm/quill@2/dist/quill.snow.css"
|
||||
rel="stylesheet"
|
||||
/>
|
||||
|
||||
<!-- Create the toolbar container -->
|
||||
<div id="toolbar">
|
||||
<button class="ql-bold">Bold</button>
|
||||
<button class="ql-italic">Italic</button>
|
||||
</div>
|
||||
|
||||
<!-- Create the editor container -->
|
||||
<div id="editor">
|
||||
<p>Hello World!</p>
|
||||
<p>Some initial <strong>bold</strong> text</p>
|
||||
<p><br /></p>
|
||||
</div>
|
||||
|
||||
<!-- Include the Quill library -->
|
||||
<script src="https://cdn.jsdelivr.net/npm/quill@2/dist/quill.js"></script>
|
||||
|
||||
<!-- Initialize Quill editor -->
|
||||
<script>
|
||||
const quill = new Quill("#editor", {
|
||||
theme: "snow",
|
||||
});
|
||||
</script>
|
||||
```
|
||||
|
||||
Take a look at the [Quill](https://quilljs.com/) website for more documentation, guides and [live playground](https://quilljs.com/playground/)!
|
||||
|
||||
## Download
|
||||
|
||||
```shell
|
||||
npm install quill
|
||||
```
|
||||
|
||||
### CDN
|
||||
|
||||
```html
|
||||
<!-- Main Quill library -->
|
||||
<script src="https://cdn.jsdelivr.net/npm/quill@2/dist/quill.js"></script>
|
||||
|
||||
<!-- Theme included stylesheets -->
|
||||
<link
|
||||
href="https://cdn.jsdelivr.net/npm/quill@2/dist/quill.snow.css"
|
||||
rel="stylesheet"
|
||||
/>
|
||||
<link
|
||||
href="https://cdn.jsdelivr.net/npm/quill@2/dist/quill.bubble.css"
|
||||
rel="stylesheet"
|
||||
/>
|
||||
|
||||
<!-- Core build with no theme, formatting, non-essential modules -->
|
||||
<link
|
||||
href="https://cdn.jsdelivr.net/npm/quill@2/dist/quill.core.css"
|
||||
rel="stylesheet"
|
||||
/>
|
||||
<script src="https://cdn.jsdelivr.net/npm/quill@2/dist/quill.core.js"></script>
|
||||
```
|
||||
|
||||
## Community
|
||||
|
||||
Get help or stay up to date.
|
||||
|
||||
- [Contribute](https://github.com/slab/quill/blob/main/.github/CONTRIBUTING.md) on [Issues](https://github.com/slab/quill/issues)
|
||||
- Ask questions on [Discussions](https://github.com/slab/quill/discussions)
|
||||
|
||||
## License
|
||||
|
||||
BSD 3-clause
|
||||
309
public/assets/quill/assets/base.styl
Normal file
@@ -0,0 +1,309 @@
|
||||
// Styles shared between snow and bubble
|
||||
|
||||
controlHeight = 24px
|
||||
inputPaddingWidth = 5px
|
||||
inputPaddingHeight = 3px
|
||||
|
||||
colorItemMargin = 2px
|
||||
colorItemSize = 16px
|
||||
colorItemsPerRow = 7
|
||||
|
||||
|
||||
.ql-{themeName}.ql-toolbar, .ql-{themeName} .ql-toolbar
|
||||
&:after
|
||||
clear: both
|
||||
content: ''
|
||||
display: table
|
||||
|
||||
button
|
||||
background: none
|
||||
border: none
|
||||
cursor: pointer
|
||||
display: inline-block
|
||||
float: left
|
||||
height: controlHeight
|
||||
padding: inputPaddingHeight inputPaddingWidth
|
||||
width: controlHeight + (inputPaddingWidth - inputPaddingHeight)*2
|
||||
|
||||
svg
|
||||
float: left
|
||||
height: 100%
|
||||
|
||||
&:active:hover
|
||||
outline: none
|
||||
|
||||
input.ql-image[type=file]
|
||||
display: none
|
||||
|
||||
button:hover, button:focus, button.ql-active,
|
||||
.ql-picker-label:hover, .ql-picker-label.ql-active,
|
||||
.ql-picker-item:hover, .ql-picker-item.ql-selected
|
||||
color: activeColor
|
||||
.ql-fill, .ql-stroke.ql-fill
|
||||
fill: activeColor
|
||||
.ql-stroke, .ql-stroke-miter
|
||||
stroke: activeColor
|
||||
|
||||
// Fix for iOS not losing hover on touch
|
||||
@media (pointer: coarse)
|
||||
.ql-{themeName}.ql-toolbar, .ql-{themeName} .ql-toolbar
|
||||
button:hover:not(.ql-active)
|
||||
color: inactiveColor
|
||||
.ql-fill, .ql-stroke.ql-fill
|
||||
fill: inactiveColor
|
||||
.ql-stroke, .ql-stroke-miter
|
||||
stroke: inactiveColor
|
||||
|
||||
.ql-{themeName}
|
||||
box-sizing: border-box
|
||||
*
|
||||
box-sizing: border-box
|
||||
|
||||
.ql-hidden
|
||||
display: none
|
||||
.ql-out-bottom, .ql-out-top
|
||||
visibility: hidden
|
||||
|
||||
.ql-tooltip
|
||||
position: absolute
|
||||
transform: translateY(10px)
|
||||
a
|
||||
cursor: pointer
|
||||
text-decoration: none
|
||||
.ql-tooltip.ql-flip
|
||||
transform: translateY(-10px)
|
||||
|
||||
.ql-formats
|
||||
&:after
|
||||
clear: both
|
||||
content: ''
|
||||
display: table
|
||||
display: inline-block
|
||||
vertical-align: middle
|
||||
|
||||
.ql-stroke
|
||||
fill: none
|
||||
stroke: inactiveColor
|
||||
stroke-linecap: round
|
||||
stroke-linejoin: round
|
||||
stroke-width: 2
|
||||
.ql-stroke-miter
|
||||
fill: none
|
||||
stroke: inactiveColor
|
||||
stroke-miterlimit: 10
|
||||
stroke-width: 2
|
||||
|
||||
.ql-fill, .ql-stroke.ql-fill
|
||||
fill: inactiveColor
|
||||
|
||||
.ql-empty
|
||||
fill: none
|
||||
.ql-even
|
||||
fill-rule: evenodd
|
||||
.ql-thin, .ql-stroke.ql-thin
|
||||
stroke-width: 1
|
||||
.ql-transparent
|
||||
opacity: 0.4
|
||||
|
||||
.ql-direction
|
||||
svg:last-child
|
||||
display: none
|
||||
.ql-direction.ql-active
|
||||
svg:last-child
|
||||
display: inline
|
||||
svg:first-child
|
||||
display: none
|
||||
|
||||
.ql-editor
|
||||
h1
|
||||
font-size: 2em
|
||||
h2
|
||||
font-size: 1.5em
|
||||
h3
|
||||
font-size: 1.17em
|
||||
h4
|
||||
font-size: 1em
|
||||
h5
|
||||
font-size: 0.83em
|
||||
h6
|
||||
font-size: 0.67em
|
||||
a
|
||||
text-decoration: underline
|
||||
blockquote
|
||||
border-left: 4px solid #ccc
|
||||
margin-bottom: 5px
|
||||
margin-top: 5px
|
||||
padding-left: 16px
|
||||
code, .ql-code-block-container
|
||||
background-color: #f0f0f0
|
||||
border-radius: 3px
|
||||
.ql-code-block-container
|
||||
margin-bottom: 5px
|
||||
margin-top: 5px
|
||||
padding: 5px 10px
|
||||
code
|
||||
font-size: 85%
|
||||
padding: 2px 4px
|
||||
.ql-code-block-container
|
||||
background-color: #23241f
|
||||
color: #f8f8f2
|
||||
overflow: visible
|
||||
img
|
||||
max-width: 100%
|
||||
|
||||
.ql-picker
|
||||
color: inactiveColor
|
||||
display: inline-block
|
||||
float: left
|
||||
font-size: 14px
|
||||
font-weight: 500
|
||||
height: controlHeight
|
||||
position: relative
|
||||
vertical-align: middle
|
||||
.ql-picker-label
|
||||
cursor: pointer
|
||||
display: inline-block
|
||||
height: 100%
|
||||
padding-left: 8px
|
||||
padding-right: 2px
|
||||
position: relative
|
||||
width: 100%
|
||||
&::before
|
||||
display: inline-block
|
||||
line-height: 22px
|
||||
.ql-picker-options
|
||||
background-color: backgroundColor
|
||||
display: none
|
||||
min-width: 100%
|
||||
padding: 4px 8px
|
||||
position: absolute
|
||||
white-space: nowrap
|
||||
.ql-picker-item
|
||||
cursor: pointer
|
||||
display: block
|
||||
padding-bottom: 5px
|
||||
padding-top: 5px
|
||||
.ql-picker.ql-expanded
|
||||
.ql-picker-label
|
||||
color: borderColor
|
||||
z-index: 2
|
||||
.ql-fill
|
||||
fill: borderColor
|
||||
.ql-stroke
|
||||
stroke: borderColor
|
||||
.ql-picker-options
|
||||
display: block
|
||||
margin-top: -1px
|
||||
top: 100%
|
||||
z-index: 1
|
||||
|
||||
.ql-color-picker, .ql-icon-picker
|
||||
width: controlHeight + 4
|
||||
.ql-picker-label
|
||||
padding: 2px 4px
|
||||
svg
|
||||
right: 4px
|
||||
.ql-icon-picker
|
||||
.ql-picker-options
|
||||
padding: 4px 0px
|
||||
.ql-picker-item
|
||||
height: controlHeight
|
||||
width: controlHeight
|
||||
padding: 2px 4px
|
||||
.ql-color-picker
|
||||
.ql-picker-options
|
||||
padding: inputPaddingHeight inputPaddingWidth
|
||||
width: (colorItemSize + 2*colorItemMargin) * colorItemsPerRow + 2*inputPaddingWidth + 2 // +2 for the border
|
||||
.ql-picker-item
|
||||
border: 1px solid transparent
|
||||
float: left
|
||||
height: colorItemSize
|
||||
margin: colorItemMargin
|
||||
padding: 0px
|
||||
width: colorItemSize
|
||||
|
||||
.ql-picker:not(.ql-color-picker):not(.ql-icon-picker)
|
||||
svg
|
||||
position: absolute
|
||||
margin-top: -9px
|
||||
right: 0
|
||||
top: 50%
|
||||
width: 18px
|
||||
|
||||
.ql-picker.ql-header, .ql-picker.ql-font, .ql-picker.ql-size
|
||||
.ql-picker-label[data-label]:not([data-label='']),
|
||||
.ql-picker-item[data-label]:not([data-label=''])
|
||||
&::before
|
||||
content: attr(data-label)
|
||||
|
||||
.ql-picker.ql-header
|
||||
width: 98px
|
||||
.ql-picker-label::before,
|
||||
.ql-picker-item::before
|
||||
content: 'Normal'
|
||||
for num in (1..6)
|
||||
.ql-picker-label[data-value=\"{num}\"]::before,
|
||||
.ql-picker-item[data-value=\"{num}\"]::before
|
||||
content: 'Heading ' + num
|
||||
.ql-picker-item[data-value="1"]::before
|
||||
font-size: 2em
|
||||
.ql-picker-item[data-value="2"]::before
|
||||
font-size: 1.5em
|
||||
.ql-picker-item[data-value="3"]::before
|
||||
font-size: 1.17em
|
||||
.ql-picker-item[data-value="4"]::before
|
||||
font-size: 1em
|
||||
.ql-picker-item[data-value="5"]::before
|
||||
font-size: 0.83em
|
||||
.ql-picker-item[data-value="6"]::before
|
||||
font-size: 0.67em
|
||||
|
||||
.ql-picker.ql-font
|
||||
width: 108px
|
||||
.ql-picker-label::before,
|
||||
.ql-picker-item::before
|
||||
content: 'Sans Serif'
|
||||
.ql-picker-label[data-value=serif]::before,
|
||||
.ql-picker-item[data-value=serif]::before
|
||||
content: 'Serif'
|
||||
.ql-picker-label[data-value=monospace]::before,
|
||||
.ql-picker-item[data-value=monospace]::before
|
||||
content: 'Monospace'
|
||||
.ql-picker-item[data-value=serif]::before
|
||||
font-family: Georgia, Times New Roman, serif
|
||||
.ql-picker-item[data-value=monospace]::before
|
||||
font-family: Monaco, Courier New, monospace
|
||||
|
||||
.ql-picker.ql-size
|
||||
width: 98px
|
||||
.ql-picker-label::before,
|
||||
.ql-picker-item::before
|
||||
content: 'Normal'
|
||||
.ql-picker-label[data-value=small]::before,
|
||||
.ql-picker-item[data-value=small]::before
|
||||
content: 'Small'
|
||||
.ql-picker-label[data-value=large]::before,
|
||||
.ql-picker-item[data-value=large]::before
|
||||
content: 'Large'
|
||||
.ql-picker-label[data-value=huge]::before,
|
||||
.ql-picker-item[data-value=huge]::before
|
||||
content: 'Huge'
|
||||
.ql-picker-item[data-value=small]::before
|
||||
font-size: 10px
|
||||
.ql-picker-item[data-value=large]::before
|
||||
font-size: 18px
|
||||
.ql-picker-item[data-value=huge]::before
|
||||
font-size: 32px
|
||||
|
||||
.ql-color-picker.ql-background
|
||||
.ql-picker-item
|
||||
background-color: #fff
|
||||
.ql-color-picker.ql-color
|
||||
.ql-picker-item
|
||||
background-color: #000
|
||||
|
||||
.ql-code-block-container
|
||||
position: relative
|
||||
.ql-ui
|
||||
right: 5px
|
||||
top: 5px
|
||||
45
public/assets/quill/assets/bubble.styl
Normal file
@@ -0,0 +1,45 @@
|
||||
themeName = 'bubble'
|
||||
activeColor = #fff
|
||||
borderColor = #777
|
||||
backgroundColor = #444
|
||||
inactiveColor = #ccc
|
||||
shadowColor = #ddd
|
||||
textColor = #fff
|
||||
|
||||
@import './core'
|
||||
@import './base'
|
||||
@import './bubble/*'
|
||||
|
||||
.ql-container.ql-bubble:not(.ql-disabled)
|
||||
a:not(.ql-close)
|
||||
position: relative
|
||||
white-space: nowrap
|
||||
a:not(.ql-close)::before
|
||||
background-color: #444
|
||||
border-radius: 15px
|
||||
top: -5px
|
||||
font-size: 12px
|
||||
color: #fff
|
||||
content: attr(href)
|
||||
font-weight: normal
|
||||
overflow: hidden
|
||||
padding: 5px 15px
|
||||
text-decoration: none
|
||||
z-index: 1
|
||||
a:not(.ql-close)::after
|
||||
border-top: 6px solid #444
|
||||
border-left: 6px solid transparent
|
||||
border-right: 6px solid transparent
|
||||
top: 0
|
||||
content: " "
|
||||
height: 0
|
||||
width: 0
|
||||
a:not(.ql-close)::before, a:not(.ql-close)::after
|
||||
left: 0
|
||||
margin-left: 50%
|
||||
position: absolute
|
||||
transform: translate(-50%, -100%)
|
||||
transition: visibility 0s ease 200ms
|
||||
visibility: hidden
|
||||
a:not(.ql-close):hover::before, a:not(.ql-close):hover::after
|
||||
visibility: visible
|
||||
14
public/assets/quill/assets/bubble/toolbar.styl
Normal file
@@ -0,0 +1,14 @@
|
||||
arrowWidth = 6px
|
||||
|
||||
.ql-bubble
|
||||
.ql-toolbar
|
||||
.ql-formats
|
||||
margin: 8px 12px 8px 0px
|
||||
.ql-formats:first-child
|
||||
margin-left: 12px
|
||||
|
||||
.ql-color-picker
|
||||
svg
|
||||
margin: 1px
|
||||
.ql-picker-item.ql-selected, .ql-picker-item:hover
|
||||
border-color: activeColor
|
||||
49
public/assets/quill/assets/bubble/tooltip.styl
Normal file
@@ -0,0 +1,49 @@
|
||||
arrowWidth = 6px
|
||||
|
||||
.ql-bubble
|
||||
.ql-tooltip
|
||||
background-color: backgroundColor
|
||||
border-radius: 25px
|
||||
color: textColor
|
||||
.ql-tooltip-arrow
|
||||
border-left: arrowWidth solid transparent
|
||||
border-right: arrowWidth solid transparent
|
||||
content: " "
|
||||
display: block
|
||||
left: 50%
|
||||
margin-left: -1 * arrowWidth
|
||||
position: absolute
|
||||
.ql-tooltip:not(.ql-flip) .ql-tooltip-arrow
|
||||
border-bottom: arrowWidth solid backgroundColor
|
||||
top: -1 * arrowWidth
|
||||
.ql-tooltip.ql-flip .ql-tooltip-arrow
|
||||
border-top: arrowWidth solid backgroundColor
|
||||
bottom: -1 * arrowWidth
|
||||
|
||||
.ql-tooltip.ql-editing
|
||||
.ql-tooltip-editor
|
||||
display: block
|
||||
.ql-formats
|
||||
visibility: hidden
|
||||
|
||||
.ql-tooltip-editor
|
||||
display: none
|
||||
input[type=text]
|
||||
background: transparent
|
||||
border: none
|
||||
color: textColor
|
||||
font-size: 13px
|
||||
height: 100%
|
||||
outline: none
|
||||
padding: 10px 20px
|
||||
position: absolute
|
||||
width: 100%
|
||||
a
|
||||
&:before
|
||||
color: inactiveColor
|
||||
content: "\00D7"
|
||||
font-size: 16px
|
||||
font-weight: bold
|
||||
top: 10px
|
||||
position: absolute
|
||||
right: 20px
|
||||
215
public/assets/quill/assets/core.styl
Normal file
@@ -0,0 +1,215 @@
|
||||
// Styles necessary for Quill
|
||||
|
||||
LIST_STYLE = decimal lower-alpha lower-roman
|
||||
LIST_STYLE_WIDTH = 1.2em
|
||||
LIST_STYLE_MARGIN = 0.3em
|
||||
LIST_STYLE_OUTER_WIDTH = LIST_STYLE_MARGIN + LIST_STYLE_WIDTH
|
||||
MAX_INDENT = 9
|
||||
|
||||
resets(arr)
|
||||
unquote('list-' + join(' list-', arr))
|
||||
|
||||
.ql-container
|
||||
box-sizing: border-box
|
||||
font-family: Helvetica, Arial, sans-serif
|
||||
font-size: 13px
|
||||
height: 100%
|
||||
margin: 0px
|
||||
position: relative
|
||||
|
||||
.ql-container.ql-disabled
|
||||
.ql-tooltip
|
||||
visibility: hidden
|
||||
|
||||
.ql-container:not(.ql-disabled)
|
||||
li[data-list=checked],
|
||||
li[data-list=unchecked]
|
||||
> .ql-ui
|
||||
cursor: pointer
|
||||
|
||||
.ql-clipboard
|
||||
left: -100000px
|
||||
height: 1px
|
||||
overflow-y: hidden
|
||||
position: absolute
|
||||
top: 50%
|
||||
p
|
||||
margin: 0
|
||||
padding: 0
|
||||
|
||||
.ql-editor
|
||||
box-sizing: border-box
|
||||
counter-reset: resets(0..MAX_INDENT)
|
||||
line-height: 1.42
|
||||
height: 100%
|
||||
outline: none
|
||||
overflow-y: auto
|
||||
padding: 12px 15px
|
||||
tab-size: 4
|
||||
-moz-tab-size: 4
|
||||
text-align: left
|
||||
white-space: pre-wrap
|
||||
word-wrap: break-word
|
||||
> *
|
||||
cursor: text
|
||||
|
||||
p, ol, pre, blockquote, h1, h2, h3, h4, h5, h6
|
||||
margin: 0
|
||||
padding: 0
|
||||
p, h1, h2, h3, h4, h5, h6
|
||||
@supports (counter-set: none)
|
||||
counter-set: resets(0..MAX_INDENT)
|
||||
@supports not (counter-set: none)
|
||||
counter-reset: resets(0..MAX_INDENT)
|
||||
table
|
||||
border-collapse: collapse
|
||||
td
|
||||
border: 1px solid #000
|
||||
padding: 2px 5px
|
||||
ol
|
||||
padding-left: 1.5em
|
||||
li
|
||||
list-style-type: none
|
||||
padding-left: LIST_STYLE_OUTER_WIDTH
|
||||
position: relative
|
||||
|
||||
> .ql-ui:before
|
||||
display: inline-block
|
||||
margin-left: -1*LIST_STYLE_OUTER_WIDTH
|
||||
margin-right: LIST_STYLE_MARGIN
|
||||
text-align: right
|
||||
white-space: nowrap
|
||||
width: LIST_STYLE_WIDTH
|
||||
|
||||
li[data-list=checked],
|
||||
li[data-list=unchecked]
|
||||
> .ql-ui
|
||||
color: #777
|
||||
|
||||
li[data-list=bullet] > .ql-ui:before
|
||||
content: '\2022'
|
||||
li[data-list=checked] > .ql-ui:before
|
||||
content: '\2611'
|
||||
li[data-list=unchecked] > .ql-ui:before
|
||||
content: '\2610'
|
||||
|
||||
li[data-list]
|
||||
@supports (counter-set: none)
|
||||
counter-set: resets(1..MAX_INDENT)
|
||||
@supports not (counter-set: none)
|
||||
counter-reset: resets(1..MAX_INDENT)
|
||||
|
||||
li[data-list=ordered]
|
||||
counter-increment: list-0
|
||||
> .ql-ui:before
|
||||
content: unquote('counter(list-0, ' + LIST_STYLE[0] + ')') '. '
|
||||
for num in (1..MAX_INDENT)
|
||||
li[data-list=ordered].ql-indent-{num}
|
||||
counter-increment: unquote('list-' + num)
|
||||
> .ql-ui:before
|
||||
content: unquote('counter(list-' + num + ', ' + LIST_STYLE[num%3] + ')') '. '
|
||||
if (num < MAX_INDENT)
|
||||
li[data-list].ql-indent-{num}
|
||||
@supports (counter-set: none)
|
||||
counter-set: resets((num+1)..MAX_INDENT)
|
||||
@supports not (counter-set: none)
|
||||
counter-reset: resets((num+1)..MAX_INDENT)
|
||||
|
||||
for num in (1..MAX_INDENT)
|
||||
.ql-indent-{num}:not(.ql-direction-rtl)
|
||||
padding-left: (3*num)em
|
||||
li.ql-indent-{num}:not(.ql-direction-rtl)
|
||||
padding-left: (3*num + LIST_STYLE_OUTER_WIDTH)em
|
||||
.ql-indent-{num}.ql-direction-rtl.ql-align-right
|
||||
padding-right: (3*num)em
|
||||
li.ql-indent-{num}.ql-direction-rtl.ql-align-right
|
||||
padding-right: (3*num + LIST_STYLE_OUTER_WIDTH)em
|
||||
|
||||
li.ql-direction-rtl
|
||||
padding-right: LIST_STYLE_OUTER_WIDTH
|
||||
> .ql-ui:before
|
||||
margin-left: LIST_STYLE_MARGIN
|
||||
margin-right: -1*LIST_STYLE_OUTER_WIDTH
|
||||
text-align: left
|
||||
|
||||
table
|
||||
table-layout: fixed
|
||||
width: 100%
|
||||
td
|
||||
outline: none
|
||||
|
||||
.ql-code-block-container
|
||||
font-family: monospace
|
||||
|
||||
.ql-video
|
||||
display: block
|
||||
max-width: 100%
|
||||
.ql-video.ql-align-center
|
||||
margin: 0 auto
|
||||
.ql-video.ql-align-right
|
||||
margin: 0 0 0 auto
|
||||
|
||||
.ql-bg-black
|
||||
background-color: rgb(0,0,0)
|
||||
.ql-bg-red
|
||||
background-color: rgb(230,0,0)
|
||||
.ql-bg-orange
|
||||
background-color: rgb(255,153,0)
|
||||
.ql-bg-yellow
|
||||
background-color: rgb(255,255,0)
|
||||
.ql-bg-green
|
||||
background-color: rgb(0,138,0)
|
||||
.ql-bg-blue
|
||||
background-color: rgb(0,102,204)
|
||||
.ql-bg-purple
|
||||
background-color: rgb(153,51,255)
|
||||
|
||||
.ql-color-white
|
||||
color: rgb(255,255,255)
|
||||
.ql-color-red
|
||||
color: rgb(230,0,0)
|
||||
.ql-color-orange
|
||||
color: rgb(255,153,0)
|
||||
.ql-color-yellow
|
||||
color: rgb(255,255,0)
|
||||
.ql-color-green
|
||||
color: rgb(0,138,0)
|
||||
.ql-color-blue
|
||||
color: rgb(0,102,204)
|
||||
.ql-color-purple
|
||||
color: rgb(153,51,255)
|
||||
|
||||
.ql-font-serif
|
||||
font-family: Georgia, Times New Roman, serif
|
||||
.ql-font-monospace
|
||||
font-family: Monaco, Courier New, monospace
|
||||
|
||||
.ql-size-small
|
||||
font-size: 0.75em
|
||||
.ql-size-large
|
||||
font-size: 1.5em
|
||||
.ql-size-huge
|
||||
font-size: 2.5em
|
||||
|
||||
.ql-direction-rtl
|
||||
direction: rtl
|
||||
text-align: inherit
|
||||
|
||||
.ql-align-center
|
||||
text-align: center
|
||||
.ql-align-justify
|
||||
text-align: justify
|
||||
.ql-align-right
|
||||
text-align: right
|
||||
|
||||
.ql-ui
|
||||
position: absolute
|
||||
|
||||
.ql-editor.ql-blank::before
|
||||
color: rgba(0,0,0,0.6)
|
||||
content: attr(data-placeholder)
|
||||
font-style: italic
|
||||
left: 15px
|
||||
pointer-events: none
|
||||
position: absolute
|
||||
right: 15px
|
||||
BIN
public/assets/quill/assets/favicon.png
Normal file
|
After Width: | Height: | Size: 696 B |
5
public/assets/quill/assets/icons/align-center.svg
Normal file
@@ -0,0 +1,5 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<line class="ql-stroke" x1="15" x2="3" y1="9" y2="9"></line>
|
||||
<line class="ql-stroke" x1="14" x2="4" y1="14" y2="14"></line>
|
||||
<line class="ql-stroke" x1="12" x2="6" y1="4" y2="4"></line>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 223 B |
5
public/assets/quill/assets/icons/align-justify.svg
Normal file
@@ -0,0 +1,5 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<line class="ql-stroke" x1="15" x2="3" y1="9" y2="9"></line>
|
||||
<line class="ql-stroke" x1="15" x2="3" y1="14" y2="14"></line>
|
||||
<line class="ql-stroke" x1="15" x2="3" y1="4" y2="4"></line>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 223 B |
5
public/assets/quill/assets/icons/align-left.svg
Normal file
@@ -0,0 +1,5 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<line class="ql-stroke" x1="3" x2="15" y1="9" y2="9"></line>
|
||||
<line class="ql-stroke" x1="3" x2="13" y1="14" y2="14"></line>
|
||||
<line class="ql-stroke" x1="3" x2="9" y1="4" y2="4"></line>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 222 B |
5
public/assets/quill/assets/icons/align-right.svg
Normal file
@@ -0,0 +1,5 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<line class="ql-stroke" x1="15" x2="3" y1="9" y2="9"></line>
|
||||
<line class="ql-stroke" x1="15" x2="5" y1="14" y2="14"></line>
|
||||
<line class="ql-stroke" x1="15" x2="9" y1="4" y2="4"></line>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 223 B |
3
public/assets/quill/assets/icons/attachment.svg
Normal file
@@ -0,0 +1,3 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<path class="ql-stroke" d="M6.6,11.4L9,9a1.456,1.456,0,0,1,2.059,2.059L7.971,14.147a2.912,2.912,0,0,1-4.118-4.118l6.177-6.177a2.912,2.912,0,0,1,4.118,4.118"></path>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 199 B |
5
public/assets/quill/assets/icons/audio.svg
Normal file
@@ -0,0 +1,5 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<ellipse class="ql-fill" cx="10.5" cy="14" rx="2.5" ry="2"></ellipse>
|
||||
<path class="ql-stroke" d="M12,14V3c0,1.5,3,2.021,3,5"></path>
|
||||
<path class="ql-fill" d="M7,4A5,5,0,0,0,7,14a3.191,3.191,0,0,1,3-2.957V5.023A4.955,4.955,0,0,0,7,4ZM4.06,8.412a0.5,0.5,0,0,1-.49.4,0.485,0.485,0,0,1-.1-0.01,0.5,0.5,0,0,1-.393-0.588A3.98,3.98,0,0,1,6.216,5.079a0.5,0.5,0,0,1,.2.98A2.985,2.985,0,0,0,4.06,8.412ZM7,10A1,1,0,1,1,8,9,1,1,0,0,1,7,10Z"></path>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 475 B |
5
public/assets/quill/assets/icons/authorship.svg
Normal file
@@ -0,0 +1,5 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<line class="ql-stroke" x1="3" x2="15" y1="15" y2="15"></line>
|
||||
<path class="ql-fill ql-stroke" d="M9,8H9a3,3,0,0,1,3,3v0a0,0,0,0,1,0,0H6a0,0,0,0,1,0,0v0A3,3,0,0,1,9,8Z"></path>
|
||||
<path class="ql-even ql-fill" d="M11,5.01C11,6.021,10,9,9,9S7,6.021,7,5.01c0-1.651.292-2.99,2-2.99S11,3.359,11,5.01Z"></path>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 341 B |
52
public/assets/quill/assets/icons/background.svg
Normal file
@@ -0,0 +1,52 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<g class="ql-fill ql-color-label">
|
||||
<polygon points="6 6.868 6 6 5 6 5 7 5.942 7 6 6.868"></polygon>
|
||||
<rect height="1" width="1" x="4" y="4"></rect>
|
||||
<polygon points="6.817 5 6 5 6 6 6.38 6 6.817 5"></polygon>
|
||||
<rect height="1" width="1" x="2" y="6"></rect>
|
||||
<rect height="1" width="1" x="3" y="5"></rect>
|
||||
<rect height="1" width="1" x="4" y="7"></rect>
|
||||
<polygon points="4 11.439 4 11 3 11 3 12 3.755 12 4 11.439"></polygon>
|
||||
<rect height="1" width="1" x="2" y="12"></rect>
|
||||
<rect height="1" width="1" x="2" y="9"></rect>
|
||||
<rect height="1" width="1" x="2" y="15"></rect>
|
||||
<polygon points="4.63 10 4 10 4 11 4.192 11 4.63 10"></polygon>
|
||||
<rect height="1" width="1" x="3" y="8"></rect>
|
||||
<path d="M10.832,4.2L11,4.582V4H10.708A1.948,1.948,0,0,1,10.832,4.2Z"></path>
|
||||
<path d="M7,4.582L7.168,4.2A1.929,1.929,0,0,1,7.292,4H7V4.582Z"></path>
|
||||
<path d="M8,13H7.683l-0.351.8a1.933,1.933,0,0,1-.124.2H8V13Z"></path>
|
||||
<rect height="1" width="1" x="12" y="2"></rect>
|
||||
<rect height="1" width="1" x="11" y="3"></rect>
|
||||
<path d="M9,3H8V3.282A1.985,1.985,0,0,1,9,3Z"></path>
|
||||
<rect height="1" width="1" x="2" y="3"></rect>
|
||||
<rect height="1" width="1" x="6" y="2"></rect>
|
||||
<rect height="1" width="1" x="3" y="2"></rect>
|
||||
<rect height="1" width="1" x="5" y="3"></rect>
|
||||
<rect height="1" width="1" x="9" y="2"></rect>
|
||||
<rect height="1" width="1" x="15" y="14"></rect>
|
||||
<polygon points="13.447 10.174 13.469 10.225 13.472 10.232 13.808 11 14 11 14 10 13.37 10 13.447 10.174"></polygon>
|
||||
<rect height="1" width="1" x="13" y="7"></rect>
|
||||
<rect height="1" width="1" x="15" y="5"></rect>
|
||||
<rect height="1" width="1" x="14" y="6"></rect>
|
||||
<rect height="1" width="1" x="15" y="8"></rect>
|
||||
<rect height="1" width="1" x="14" y="9"></rect>
|
||||
<path d="M3.775,14H3v1H4V14.314A1.97,1.97,0,0,1,3.775,14Z"></path>
|
||||
<rect height="1" width="1" x="14" y="3"></rect>
|
||||
<polygon points="12 6.868 12 6 11.62 6 12 6.868"></polygon>
|
||||
<rect height="1" width="1" x="15" y="2"></rect>
|
||||
<rect height="1" width="1" x="12" y="5"></rect>
|
||||
<rect height="1" width="1" x="13" y="4"></rect>
|
||||
<polygon points="12.933 9 13 9 13 8 12.495 8 12.933 9"></polygon>
|
||||
<rect height="1" width="1" x="9" y="14"></rect>
|
||||
<rect height="1" width="1" x="8" y="15"></rect>
|
||||
<path d="M6,14.926V15H7V14.316A1.993,1.993,0,0,1,6,14.926Z"></path>
|
||||
<rect height="1" width="1" x="5" y="15"></rect>
|
||||
<path d="M10.668,13.8L10.317,13H10v1h0.792A1.947,1.947,0,0,1,10.668,13.8Z"></path>
|
||||
<rect height="1" width="1" x="11" y="15"></rect>
|
||||
<path d="M14.332,12.2a1.99,1.99,0,0,1,.166.8H15V12H14.245Z"></path>
|
||||
<rect height="1" width="1" x="14" y="15"></rect>
|
||||
<rect height="1" width="1" x="15" y="11"></rect>
|
||||
</g>
|
||||
<polyline class="ql-stroke" points="5.5 13 9 5 12.5 13"></polyline>
|
||||
<line class="ql-stroke" x1="11.63" x2="6.38" y1="11" y2="11"></line>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.9 KiB |
6
public/assets/quill/assets/icons/blockquote.svg
Normal file
@@ -0,0 +1,6 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<rect class="ql-fill ql-stroke" height="3" width="3" x="4" y="5"></rect>
|
||||
<rect class="ql-fill ql-stroke" height="3" width="3" x="11" y="5"></rect>
|
||||
<path class="ql-even ql-fill ql-stroke" d="M7,8c0,4.031-3,5-3,5"></path>
|
||||
<path class="ql-even ql-fill ql-stroke" d="M14,8c0,4.031-3,5-3,5"></path>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 334 B |
4
public/assets/quill/assets/icons/bold.svg
Normal file
@@ -0,0 +1,4 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<path class="ql-stroke" d="M5,4H9.5A2.5,2.5,0,0,1,12,6.5v0A2.5,2.5,0,0,1,9.5,9H5A0,0,0,0,1,5,9V4A0,0,0,0,1,5,4Z"></path>
|
||||
<path class="ql-stroke" d="M5,9h5.5A2.5,2.5,0,0,1,13,11.5v0A2.5,2.5,0,0,1,10.5,14H5a0,0,0,0,1,0,0V9A0,0,0,0,1,5,9Z"></path>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 281 B |
7
public/assets/quill/assets/icons/clean.svg
Normal file
@@ -0,0 +1,7 @@
|
||||
<svg class="" viewbox="0 0 18 18">
|
||||
<line class="ql-stroke" x1="5" x2="13" y1="3" y2="3"></line>
|
||||
<line class="ql-stroke" x1="6" x2="9.35" y1="12" y2="3"></line>
|
||||
<line class="ql-stroke" x1="11" x2="15" y1="11" y2="15"></line>
|
||||
<line class="ql-stroke" x1="15" x2="11" y1="11" y2="15"></line>
|
||||
<rect class="ql-fill" height="1" rx="0.5" ry="0.5" width="7" x="2" y="14"></rect>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 386 B |
5
public/assets/quill/assets/icons/code.svg
Normal file
@@ -0,0 +1,5 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<polyline class="ql-even ql-stroke" points="5 7 3 9 5 11"></polyline>
|
||||
<polyline class="ql-even ql-stroke" points="13 7 15 9 13 11"></polyline>
|
||||
<line class="ql-stroke" x1="10" x2="8" y1="5" y2="13"></line>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 243 B |
5
public/assets/quill/assets/icons/color.svg
Normal file
@@ -0,0 +1,5 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<line class="ql-color-label ql-stroke ql-transparent" x1="3" x2="15" y1="15" y2="15"></line>
|
||||
<polyline class="ql-stroke" points="5.5 11 9 3 12.5 11"></polyline>
|
||||
<line class="ql-stroke" x1="11.63" x2="6.38" y1="9" y2="9"></line>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 266 B |
3
public/assets/quill/assets/icons/comment.svg
Normal file
@@ -0,0 +1,3 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<path class="ql-stroke" d="M9,3C5.686,3,3,5.239,3,8a4.669,4.669,0,0,0,2,3.719V15l3.094-2.063A7.186,7.186,0,0,0,9,13c3.314,0,6-2.239,6-5S12.314,3,9,3Z"></path>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 193 B |
7
public/assets/quill/assets/icons/direction-ltr.svg
Normal file
@@ -0,0 +1,7 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<polygon class="ql-stroke ql-fill" points="3 11 5 9 3 7 3 11"></polygon>
|
||||
<line class="ql-stroke ql-fill" x1="15" x2="11" y1="4" y2="4"></line>
|
||||
<path class="ql-fill" d="M11,3a3,3,0,0,0,0,6h1V3H11Z"></path>
|
||||
<rect class="ql-fill" height="11" width="1" x="11" y="4"></rect>
|
||||
<rect class="ql-fill" height="11" width="1" x="13" y="4"></rect>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 377 B |
7
public/assets/quill/assets/icons/direction-rtl.svg
Normal file
@@ -0,0 +1,7 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<polygon class="ql-stroke ql-fill" points="15 12 13 10 15 8 15 12"></polygon>
|
||||
<line class="ql-stroke ql-fill" x1="9" x2="5" y1="4" y2="4"></line>
|
||||
<path class="ql-fill" d="M5,3A3,3,0,0,0,5,9H6V3H5Z"></path>
|
||||
<rect class="ql-fill" height="11" width="1" x="5" y="4"></rect>
|
||||
<rect class="ql-fill" height="11" width="1" x="7" y="4"></rect>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 376 B |
4
public/assets/quill/assets/icons/dropdown.svg
Normal file
@@ -0,0 +1,4 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<polygon class="ql-stroke" points="7 11 9 13 11 11 7 11"></polygon>
|
||||
<polygon class="ql-stroke" points="7 7 9 5 11 7 7 7"></polygon>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 168 B |
3
public/assets/quill/assets/icons/embed.svg
Normal file
@@ -0,0 +1,3 @@
|
||||
<svg viewBox="0 0 18 18">
|
||||
<path class="ql-fill" d="M14.60284,8.5036A2.48315,2.48315,0,0,0,14.71429,7.8a2.34494,2.34494,0,0,0-2.28571-2.4,2.19651,2.19651,0,0,0-1.3631.48358A4.01147,4.01147,0,0,0,7.28571,3a4.1037,4.1037,0,0,0-4,4.2,4.40682,4.40682,0,0,0,.07642.79553A3.57444,3.57444,0,0,0,1,11.4,3.51743,3.51743,0,0,0,4.42859,15h9.42853A3.22436,3.22436,0,0,0,17,11.7,3.26609,3.26609,0,0,0,14.60284,8.5036ZM6.85352,10.64648a.49995.49995,0,1,1-.707.707l-1-1a.49982.49982,0,0,1,0-.707l1-1a.49995.49995,0,0,1,.707.707L6.207,10ZM9.48535,8.12109l-1,4A.5.5,0,0,1,8,12.5a.51952.51952,0,0,1-.12109-.01465.50066.50066,0,0,1-.36426-.60645l1-4a.50023.50023,0,0,1,.9707.24219Zm2.36816,2.23242-1,1a.49995.49995,0,0,1-.707-.707L10.793,10l-.64648-.64648a.49995.49995,0,0,1,.707-.707l1,1A.49982.49982,0,0,1,11.85352,10.35352Z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 818 B |
6
public/assets/quill/assets/icons/emoji.svg
Normal file
@@ -0,0 +1,6 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<circle class="ql-fill" cx="7" cy="7" r="1"></circle>
|
||||
<circle class="ql-fill" cx="11" cy="7" r="1"></circle>
|
||||
<path class="ql-stroke" d="M7,10a2,2,0,0,0,4,0H7Z"></path>
|
||||
<circle class="ql-stroke" cx="9" cy="9" r="6"></circle>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 264 B |
5
public/assets/quill/assets/icons/float-center.svg
Normal file
@@ -0,0 +1,5 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<path class="ql-fill" d="M14,16H4a1,1,0,0,1,0-2H14A1,1,0,0,1,14,16Z"/>
|
||||
<path class="ql-fill" d="M14,4H4A1,1,0,0,1,4,2H14A1,1,0,0,1,14,4Z"/>
|
||||
<rect class="ql-fill" x="3" y="6" width="12" height="6" rx="1" ry="1"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 250 B |
5
public/assets/quill/assets/icons/float-full.svg
Normal file
@@ -0,0 +1,5 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<path class="ql-fill" d="M13,16H5a1,1,0,0,1,0-2h8A1,1,0,0,1,13,16Z"/>
|
||||
<path class="ql-fill" d="M13,4H5A1,1,0,0,1,5,2h8A1,1,0,0,1,13,4Z"/>
|
||||
<rect class="ql-fill" x="2" y="6" width="14" height="6" rx="1" ry="1"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 248 B |
7
public/assets/quill/assets/icons/float-left.svg
Normal file
@@ -0,0 +1,7 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<path class="ql-fill" d="M15,8H13a1,1,0,0,1,0-2h2A1,1,0,0,1,15,8Z"/>
|
||||
<path class="ql-fill" d="M15,12H13a1,1,0,0,1,0-2h2A1,1,0,0,1,15,12Z"/>
|
||||
<path class="ql-fill" d="M15,16H5a1,1,0,0,1,0-2H15A1,1,0,0,1,15,16Z"/>
|
||||
<path class="ql-fill" d="M15,4H5A1,1,0,0,1,5,2H15A1,1,0,0,1,15,4Z"/>
|
||||
<rect class="ql-fill" x="2" y="6" width="8" height="6" rx="1" ry="1"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 393 B |
7
public/assets/quill/assets/icons/float-right.svg
Normal file
@@ -0,0 +1,7 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<path class="ql-fill" d="M5,8H3A1,1,0,0,1,3,6H5A1,1,0,0,1,5,8Z"/>
|
||||
<path class="ql-fill" d="M5,12H3a1,1,0,0,1,0-2H5A1,1,0,0,1,5,12Z"/>
|
||||
<path class="ql-fill" d="M13,16H3a1,1,0,0,1,0-2H13A1,1,0,0,1,13,16Z"/>
|
||||
<path class="ql-fill" d="M13,4H3A1,1,0,0,1,3,2H13A1,1,0,0,1,13,4Z"/>
|
||||
<rect class="ql-fill" x="8" y="6" width="8" height="6" rx="1" ry="1" transform="translate(24 18) rotate(-180)"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 429 B |
5
public/assets/quill/assets/icons/font.svg
Normal file
@@ -0,0 +1,5 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<polyline class="ql-stroke" points="3.5 14 7 4 10.5 14"></polyline>
|
||||
<line class="ql-stroke" x1="9.45" x2="4.55" y1="11" y2="11"></line>
|
||||
<path class="ql-fill" d="M13.636,5.013a4.016,4.016,0,0,0-1.863.472,0.42,0.42,0,0,0-.179.629l0.112,0.214a0.418,0.418,0,0,0,.625.191,2.557,2.557,0,0,1,1.183-.326A0.933,0.933,0,0,1,14.573,7.2V7.338H14.339c-1.272,0-3.325.281-3.325,1.954A1.75,1.75,0,0,0,12.9,11.011a2.072,2.072,0,0,0,1.785-1.078h0.022a1.132,1.132,0,0,0-.022.247V10.4a0.412,0.412,0,0,0,.457.472h0.379A0.416,0.416,0,0,0,15.99,10.4V7.293A2.121,2.121,0,0,0,13.636,5.013Zm0.948,3.4a1.452,1.452,0,0,1-1.305,1.505,0.775,0.775,0,0,1-.859-0.753c0-.854,1.216-0.966,1.93-0.966h0.234V8.416Z"></path>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 724 B |
5
public/assets/quill/assets/icons/formula.svg
Normal file
@@ -0,0 +1,5 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<path class="ql-fill" d="M11.759,2.482a2.561,2.561,0,0,0-3.53.607A7.656,7.656,0,0,0,6.8,6.2C6.109,9.188,5.275,14.677,4.15,14.927a1.545,1.545,0,0,0-1.3-.933A0.922,0.922,0,0,0,2,15.036S1.954,16,4.119,16s3.091-2.691,3.7-5.553c0.177-.826.36-1.726,0.554-2.6L8.775,6.2c0.381-1.421.807-2.521,1.306-2.676a1.014,1.014,0,0,0,1.02.56A0.966,0.966,0,0,0,11.759,2.482Z"></path>
|
||||
<rect class="ql-fill" height="1.6" rx="0.8" ry="0.8" width="5" x="5.15" y="6.2"></rect>
|
||||
<path class="ql-fill" d="M13.663,12.027a1.662,1.662,0,0,1,.266-0.276q0.193,0.069.456,0.138a2.1,2.1,0,0,0,.535.069,1.075,1.075,0,0,0,.767-0.3,1.044,1.044,0,0,0,.314-0.8,0.84,0.84,0,0,0-.238-0.619,0.8,0.8,0,0,0-.594-0.239,1.154,1.154,0,0,0-.781.3,4.607,4.607,0,0,0-.781,1q-0.091.15-.218,0.346l-0.246.38c-0.068-.288-0.137-0.582-0.212-0.885-0.459-1.847-2.494-.984-2.941-0.8-0.482.2-.353,0.647-0.094,0.529a0.869,0.869,0,0,1,1.281.585c0.217,0.751.377,1.436,0.527,2.038a5.688,5.688,0,0,1-.362.467,2.69,2.69,0,0,1-.264.271q-0.221-.08-0.471-0.147a2.029,2.029,0,0,0-.522-0.066,1.079,1.079,0,0,0-.768.3A1.058,1.058,0,0,0,9,15.131a0.82,0.82,0,0,0,.832.852,1.134,1.134,0,0,0,.787-0.3,5.11,5.11,0,0,0,.776-0.993q0.141-.219.215-0.34c0.046-.076.122-0.194,0.223-0.346a2.786,2.786,0,0,0,.918,1.726,2.582,2.582,0,0,0,2.376-.185c0.317-.181.212-0.565,0-0.494A0.807,0.807,0,0,1,14.176,15a5.159,5.159,0,0,1-.913-2.446l0,0Q13.487,12.24,13.663,12.027Z"></path>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.4 KiB |
6
public/assets/quill/assets/icons/hashtag.svg
Normal file
@@ -0,0 +1,6 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<line class="ql-stroke" x1="7" x2="6" y1="3" y2="15"></line>
|
||||
<line class="ql-stroke" x1="12" x2="11" y1="3" y2="15"></line>
|
||||
<line class="ql-stroke" x1="3.75" x2="14.75" y1="7" y2="7"></line>
|
||||
<line class="ql-stroke" x1="3.25" x2="14.25" y1="11" y2="11"></line>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 300 B |
3
public/assets/quill/assets/icons/header-2.svg
Normal file
@@ -0,0 +1,3 @@
|
||||
<svg viewBox="0 0 18 18">
|
||||
<path class="ql-fill" d="M16.73975,13.81445v.43945a.54085.54085,0,0,1-.605.60547H11.855a.58392.58392,0,0,1-.64893-.60547V14.0127c0-2.90527,3.39941-3.42187,3.39941-4.55469a.77675.77675,0,0,0-.84717-.78125,1.17684,1.17684,0,0,0-.83594.38477c-.2749.26367-.561.374-.85791.13184l-.4292-.34082c-.30811-.24219-.38525-.51758-.1543-.81445a2.97155,2.97155,0,0,1,2.45361-1.17676,2.45393,2.45393,0,0,1,2.68408,2.40918c0,2.45312-3.1792,2.92676-3.27832,3.93848h2.79443A.54085.54085,0,0,1,16.73975,13.81445ZM9,3A.99974.99974,0,0,0,8,4V8H3V4A1,1,0,0,0,1,4V14a1,1,0,0,0,2,0V10H8v4a1,1,0,0,0,2,0V4A.99974.99974,0,0,0,9,3Z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 641 B |
3
public/assets/quill/assets/icons/header-3.svg
Normal file
@@ -0,0 +1,3 @@
|
||||
<svg viewBox="0 0 18 18">
|
||||
<path class="ql-fill" d="M16.65186,12.30664a2.6742,2.6742,0,0,1-2.915,2.68457,3.96592,3.96592,0,0,1-2.25537-.6709.56007.56007,0,0,1-.13232-.83594L11.64648,13c.209-.34082.48389-.36328.82471-.1543a2.32654,2.32654,0,0,0,1.12256.33008c.71484,0,1.12207-.35156,1.12207-.78125,0-.61523-.61621-.86816-1.46338-.86816H13.2085a.65159.65159,0,0,1-.68213-.41895l-.05518-.10937a.67114.67114,0,0,1,.14307-.78125l.71533-.86914a8.55289,8.55289,0,0,1,.68213-.7373V8.58887a3.93913,3.93913,0,0,1-.748.05469H11.9873a.54085.54085,0,0,1-.605-.60547V7.59863a.54085.54085,0,0,1,.605-.60547h3.75146a.53773.53773,0,0,1,.60547.59375v.17676a1.03723,1.03723,0,0,1-.27539.748L14.74854,10.0293A2.31132,2.31132,0,0,1,16.65186,12.30664ZM9,3A.99974.99974,0,0,0,8,4V8H3V4A1,1,0,0,0,1,4V14a1,1,0,0,0,2,0V10H8v4a1,1,0,0,0,2,0V4A.99974.99974,0,0,0,9,3Z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 851 B |
3
public/assets/quill/assets/icons/header-4.svg
Normal file
@@ -0,0 +1,3 @@
|
||||
<svg viewBox="0 0 18 18">
|
||||
<path class="ql-fill" d="M10,4V14a1,1,0,0,1-2,0V10H3v4a1,1,0,0,1-2,0V4A1,1,0,0,1,3,4V8H8V4a1,1,0,0,1,2,0Zm7.05371,7.96582v.38477c0,.39648-.165.60547-.46191.60547h-.47314v1.29785a.54085.54085,0,0,1-.605.60547h-.69336a.54085.54085,0,0,1-.605-.60547V12.95605H11.333a.5412.5412,0,0,1-.60547-.60547v-.15332a1.199,1.199,0,0,1,.22021-.748l2.56348-4.05957a.7819.7819,0,0,1,.72607-.39648h1.27637a.54085.54085,0,0,1,.605.60547v3.7627h.33008A.54055.54055,0,0,1,17.05371,11.96582ZM14.28125,8.7207h-.022a4.18969,4.18969,0,0,1-.38525.81348l-1.188,1.80469v.02246h1.5293V9.60059A7.04058,7.04058,0,0,1,14.28125,8.7207Z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 639 B |
3
public/assets/quill/assets/icons/header-5.svg
Normal file
@@ -0,0 +1,3 @@
|
||||
<svg viewBox="0 0 18 18">
|
||||
<path class="ql-fill" d="M16.74023,12.18555a2.75131,2.75131,0,0,1-2.91553,2.80566,3.908,3.908,0,0,1-2.25537-.68164.54809.54809,0,0,1-.13184-.8252L11.73438,13c.209-.34082.48389-.36328.8252-.1543a2.23757,2.23757,0,0,0,1.1001.33008,1.01827,1.01827,0,0,0,1.1001-.96777c0-.61621-.53906-.97949-1.25439-.97949a2.15554,2.15554,0,0,0-.64893.09961,1.15209,1.15209,0,0,1-.814.01074l-.12109-.04395a.64116.64116,0,0,1-.45117-.71484l.231-3.00391a.56666.56666,0,0,1,.62744-.583H15.541a.54085.54085,0,0,1,.605.60547v.43945a.54085.54085,0,0,1-.605.60547H13.41748l-.04395.72559a1.29306,1.29306,0,0,1-.04395.30859h.022a2.39776,2.39776,0,0,1,.57227-.07715A2.53266,2.53266,0,0,1,16.74023,12.18555ZM9,3A.99974.99974,0,0,0,8,4V8H3V4A1,1,0,0,0,1,4V14a1,1,0,0,0,2,0V10H8v4a1,1,0,0,0,2,0V4A.99974.99974,0,0,0,9,3Z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 825 B |
3
public/assets/quill/assets/icons/header-6.svg
Normal file
@@ -0,0 +1,3 @@
|
||||
<svg viewBox="0 0 18 18">
|
||||
<path class="ql-fill" d="M14.51758,9.64453a1.85627,1.85627,0,0,0-1.24316.38477H13.252a1.73532,1.73532,0,0,1,1.72754-1.4082,2.66491,2.66491,0,0,1,.5498.06641c.35254.05469.57227.01074.70508-.40723l.16406-.5166a.53393.53393,0,0,0-.373-.75977,4.83723,4.83723,0,0,0-1.17773-.14258c-2.43164,0-3.7627,2.17773-3.7627,4.43359,0,2.47559,1.60645,3.69629,3.19043,3.69629A2.70585,2.70585,0,0,0,16.96,12.19727,2.43861,2.43861,0,0,0,14.51758,9.64453Zm-.23047,3.58691c-.67187,0-1.22168-.81445-1.22168-1.45215,0-.47363.30762-.583.72559-.583.96875,0,1.27734.59375,1.27734,1.12207A.82182.82182,0,0,1,14.28711,13.23145ZM10,4V14a1,1,0,0,1-2,0V10H3v4a1,1,0,0,1-2,0V4A1,1,0,0,1,3,4V8H8V4a1,1,0,0,1,2,0Z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 717 B |
3
public/assets/quill/assets/icons/header.svg
Normal file
@@ -0,0 +1,3 @@
|
||||
<svg viewBox="0 0 18 18">
|
||||
<path class="ql-fill" d="M10,4V14a1,1,0,0,1-2,0V10H3v4a1,1,0,0,1-2,0V4A1,1,0,0,1,3,4V8H8V4a1,1,0,0,1,2,0Zm6.06787,9.209H14.98975V7.59863a.54085.54085,0,0,0-.605-.60547h-.62744a1.01119,1.01119,0,0,0-.748.29688L11.645,8.56641a.5435.5435,0,0,0-.022.8584l.28613.30762a.53861.53861,0,0,0,.84717.0332l.09912-.08789a1.2137,1.2137,0,0,0,.2417-.35254h.02246s-.01123.30859-.01123.60547V13.209H12.041a.54085.54085,0,0,0-.605.60547v.43945a.54085.54085,0,0,0,.605.60547h4.02686a.54085.54085,0,0,0,.605-.60547v-.43945A.54085.54085,0,0,0,16.06787,13.209Z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 577 B |
4
public/assets/quill/assets/icons/horizontal-rule.svg
Normal file
@@ -0,0 +1,4 @@
|
||||
<svg viewBox="0 0 18 18">
|
||||
<path class="ql-fill" d="M15,12v2a.99942.99942,0,0,1-1,1H4a.99942.99942,0,0,1-1-1V12a1,1,0,0,1,2,0v1h8V12a1,1,0,0,1,2,0ZM14,3H4A.99942.99942,0,0,0,3,4V6A1,1,0,0,0,5,6V5h8V6a1,1,0,0,0,2,0V4A.99942.99942,0,0,0,14,3Z"/>
|
||||
<path class="ql-fill" d="M15,10H3A1,1,0,0,1,3,8H15a1,1,0,0,1,0,2Z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 322 B |
5
public/assets/quill/assets/icons/image.svg
Normal file
@@ -0,0 +1,5 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<rect class="ql-stroke" height="10" width="12" x="3" y="4"></rect>
|
||||
<circle class="ql-fill" cx="6" cy="7" r="1"></circle>
|
||||
<polyline class="ql-even ql-fill" points="5 12 5 11 7 9 8 10 11 7 13 9 13 12 5 12"></polyline>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 254 B |
6
public/assets/quill/assets/icons/indent.svg
Normal file
@@ -0,0 +1,6 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<line class="ql-stroke" x1="3" x2="15" y1="14" y2="14"></line>
|
||||
<line class="ql-stroke" x1="3" x2="15" y1="4" y2="4"></line>
|
||||
<line class="ql-stroke" x1="9" x2="15" y1="9" y2="9"></line>
|
||||
<polyline class="ql-fill ql-stroke" points="3 7 3 11 5 9 3 7"></polyline>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 299 B |
5
public/assets/quill/assets/icons/italic.svg
Normal file
@@ -0,0 +1,5 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<line class="ql-stroke" x1="7" x2="13" y1="4" y2="4"></line>
|
||||
<line class="ql-stroke" x1="5" x2="11" y1="14" y2="14"></line>
|
||||
<line class="ql-stroke" x1="8" x2="10" y1="14" y2="4"></line>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 224 B |
5
public/assets/quill/assets/icons/link.svg
Normal file
@@ -0,0 +1,5 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<line class="ql-stroke" x1="7" x2="11" y1="7" y2="11"></line>
|
||||
<path class="ql-even ql-stroke" d="M8.9,4.577a3.476,3.476,0,0,1,.36,4.679A3.476,3.476,0,0,1,4.577,8.9C3.185,7.5,2.035,6.4,4.217,4.217S7.5,3.185,8.9,4.577Z"></path>
|
||||
<path class="ql-even ql-stroke" d="M13.423,9.1a3.476,3.476,0,0,0-4.679-.36,3.476,3.476,0,0,0,.36,4.679c1.392,1.392,2.5,2.542,4.679.36S14.815,10.5,13.423,9.1Z"></path>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 431 B |
8
public/assets/quill/assets/icons/list-bullet.svg
Normal file
@@ -0,0 +1,8 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<line class="ql-stroke" x1="6" x2="15" y1="4" y2="4"></line>
|
||||
<line class="ql-stroke" x1="6" x2="15" y1="9" y2="9"></line>
|
||||
<line class="ql-stroke" x1="6" x2="15" y1="14" y2="14"></line>
|
||||
<line class="ql-stroke" x1="3" x2="3" y1="4" y2="4"></line>
|
||||
<line class="ql-stroke" x1="3" x2="3" y1="9" y2="9"></line>
|
||||
<line class="ql-stroke" x1="3" x2="3" y1="14" y2="14"></line>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 411 B |
8
public/assets/quill/assets/icons/list-check.svg
Normal file
@@ -0,0 +1,8 @@
|
||||
<svg class="" viewbox="0 0 18 18">
|
||||
<line class="ql-stroke" x1="9" x2="15" y1="4" y2="4"></line>
|
||||
<polyline class="ql-stroke" points="3 4 4 5 6 3"></polyline>
|
||||
<line class="ql-stroke" x1="9" x2="15" y1="14" y2="14"></line>
|
||||
<polyline class="ql-stroke" points="3 14 4 15 6 13"></polyline>
|
||||
<line class="ql-stroke" x1="9" x2="15" y1="9" y2="9"></line>
|
||||
<polyline class="ql-stroke" points="3 9 4 10 6 8"></polyline>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 425 B |
9
public/assets/quill/assets/icons/list-ordered.svg
Normal file
@@ -0,0 +1,9 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<line class="ql-stroke" x1="7" x2="15" y1="4" y2="4"></line>
|
||||
<line class="ql-stroke" x1="7" x2="15" y1="9" y2="9"></line>
|
||||
<line class="ql-stroke" x1="7" x2="15" y1="14" y2="14"></line>
|
||||
<line class="ql-stroke ql-thin" x1="2.5" x2="4.5" y1="5.5" y2="5.5"></line>
|
||||
<path class="ql-fill" d="M3.5,6A0.5,0.5,0,0,1,3,5.5V3.085l-0.276.138A0.5,0.5,0,0,1,2.053,3c-0.124-.247-0.023-0.324.224-0.447l1-.5A0.5,0.5,0,0,1,4,2.5v3A0.5,0.5,0,0,1,3.5,6Z"></path>
|
||||
<path class="ql-stroke ql-thin" d="M4.5,10.5h-2c0-.234,1.85-1.076,1.85-2.234A0.959,0.959,0,0,0,2.5,8.156"></path>
|
||||
<path class="ql-stroke ql-thin" d="M2.5,14.846a0.959,0.959,0,0,0,1.85-.109A0.7,0.7,0,0,0,3.75,14a0.688,0.688,0,0,0,.6-0.736,0.959,0.959,0,0,0-1.85-.109"></path>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 764 B |
5
public/assets/quill/assets/icons/map.svg
Normal file
@@ -0,0 +1,5 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<path class="ql-stroke" d="M12,5c0,1.1-2,4-2,4S8,6.1,8,5A2,2,0,0,1,12,5Z"></path>
|
||||
<path class="ql-fill" d="M15.472,2.118a1,1,0,0,0-1.026.05l-1.067.712A3.944,3.944,0,0,1,14,4.869h0v7.6L12,13.8l-2.445-1.63a1,1,0,0,0-1.109,0L6,13.8,4,12.465v-7.6L5.445,5.832a0.992,0.992,0,0,0,.717.144A3.742,3.742,0,0,1,6,5a3.956,3.956,0,0,1,.258-1.374L6,3.8,3.555,2.168A1,1,0,0,0,2,3V13a1,1,0,0,0,.445.832l3,2a1,1,0,0,0,1.109,0L9,14.2l2.445,1.63a1,1,0,0,0,1.109,0l3-2A1,1,0,0,0,16,13V3A1,1,0,0,0,15.472,2.118Z"></path>
|
||||
<path class="ql-fill" d="M12.092,14.938a4.2,4.2,0,0,0-1.936-3.032c-1.125-.656-2.425.738-2.75-0.687A2.036,2.036,0,0,0,5.688,9.656,2.878,2.878,0,0,0,3,8.653V13l3,2,3-2,3,2Z"></path>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 718 B |
4
public/assets/quill/assets/icons/mention.svg
Normal file
@@ -0,0 +1,4 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<circle class="ql-stroke" cx="9" cy="9" r="2"></circle>
|
||||
<path class="ql-stroke" d="M11,14.651A6,6,0,1,1,15,9a2,2,0,0,1-4,0V7"></path>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 170 B |
3
public/assets/quill/assets/icons/more.svg
Normal file
@@ -0,0 +1,3 @@
|
||||
<svg viewBox="0 0 18 18">
|
||||
<path class="ql-fill" d="M6,9.5A1.5,1.5,0,1,1,4.5,8,1.5,1.5,0,0,1,6,9.5ZM9.5,8A1.5,1.5,0,1,0,11,9.5,1.5,1.5,0,0,0,9.5,8Zm5,0A1.5,1.5,0,1,0,16,9.5,1.5,1.5,0,0,0,14.5,8Z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 205 B |
6
public/assets/quill/assets/icons/outdent.svg
Normal file
@@ -0,0 +1,6 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<line class="ql-stroke" x1="3" x2="15" y1="14" y2="14"></line>
|
||||
<line class="ql-stroke" x1="3" x2="15" y1="4" y2="4"></line>
|
||||
<line class="ql-stroke" x1="9" x2="15" y1="9" y2="9"></line>
|
||||
<polyline class="ql-stroke" points="5 7 5 11 3 9 5 7"></polyline>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 291 B |
4
public/assets/quill/assets/icons/redo.svg
Normal file
@@ -0,0 +1,4 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<polygon class="ql-fill ql-stroke" points="12 10 14 12 16 10 12 10"></polygon>
|
||||
<path class="ql-stroke" d="M9.91,13.91A4.6,4.6,0,0,1,9,14a5,5,0,1,1,5-5"></path>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 196 B |
5
public/assets/quill/assets/icons/size-decrease.svg
Normal file
@@ -0,0 +1,5 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<polyline class="ql-stroke" points="3.5 14 7 4 10.5 14"></polyline>
|
||||
<line class="ql-stroke" x1="9.45" x2="4.55" y1="11" y2="11"></line>
|
||||
<rect class="ql-fill" height="5" rx="0.5" ry="0.5" transform="translate(20 -7) rotate(90)" width="1" x="13" y="4"></rect>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 296 B |
6
public/assets/quill/assets/icons/size-increase.svg
Normal file
@@ -0,0 +1,6 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<polyline class="ql-stroke" points="3.5 14 7 4 10.5 14"></polyline>
|
||||
<line class="ql-stroke" x1="9.45" x2="4.55" y1="11" y2="11"></line>
|
||||
<rect class="ql-fill" height="5" rx="0.5" ry="0.5" width="1" x="13" y="4"></rect>
|
||||
<rect class="ql-fill" height="5" rx="0.5" ry="0.5" transform="translate(20 -7) rotate(90)" width="1" x="13" y="4"></rect>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 380 B |
6
public/assets/quill/assets/icons/size.svg
Normal file
@@ -0,0 +1,6 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<polyline class="ql-stroke" points="3.5 14 7 4 10.5 14"></polyline>
|
||||
<line class="ql-stroke" x1="9.45" x2="4.55" y1="11" y2="11"></line>
|
||||
<path class="ql-fill" d="M12.09,7.55l1.7-1.473a0.337,0.337,0,0,1,.429,0l1.7,1.473A0.261,0.261,0,0,1,15.7,8H12.3A0.261,0.261,0,0,1,12.09,7.55Z"></path>
|
||||
<path class="ql-fill" d="M12.09,10.45l1.7,1.473a0.337,0.337,0,0,0,.429,0l1.7-1.473A0.261,0.261,0,0,0,15.7,10H12.3A0.261,0.261,0,0,0,12.09,10.45Z"></path>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 481 B |
9
public/assets/quill/assets/icons/spacing.svg
Normal file
@@ -0,0 +1,9 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<line class="ql-stroke" x1="10" x2="15" y1="4" y2="4"></line>
|
||||
<line class="ql-stroke" x1="10" x2="15" y1="9" y2="9"></line>
|
||||
<line class="ql-stroke" x1="10" x2="15" y1="14" y2="14"></line>
|
||||
<polygon class="ql-fill ql-stroke" points="3 5 5 3 7 5 3 5"></polygon>
|
||||
<line class="ql-stroke" x1="5" x2="5" y1="7" y2="5"></line>
|
||||
<polygon class="ql-fill ql-stroke" points="3 13 5 15 7 13 3 13"></polygon>
|
||||
<line class="ql-stroke" x1="5" x2="5" y1="11" y2="13"></line>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 502 B |
6
public/assets/quill/assets/icons/speech.svg
Normal file
@@ -0,0 +1,6 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<path class="ql-stroke" d="M5,8a4,4,0,0,0,8,0"></path>
|
||||
<line class="ql-stroke" x1="6" x2="12" y1="15" y2="15"></line>
|
||||
<line class="ql-stroke" x1="9" x2="9" y1="12" y2="15"></line>
|
||||
<rect class="ql-fill" height="8" rx="2" ry="2" width="4" x="7" y="2"></rect>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 297 B |
5
public/assets/quill/assets/icons/strike.svg
Normal file
@@ -0,0 +1,5 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<line class="ql-stroke ql-thin" x1="15.5" x2="2.5" y1="8.5" y2="9.5"></line>
|
||||
<path class="ql-fill" d="M9.007,8C6.542,7.791,6,7.519,6,6.5,6,5.792,7.283,5,9,5c1.571,0,2.765.679,2.969,1.309a1,1,0,0,0,1.9-.617C13.356,4.106,11.354,3,9,3,6.2,3,4,4.538,4,6.5a3.2,3.2,0,0,0,.5,1.843Z"></path>
|
||||
<path class="ql-fill" d="M8.984,10C11.457,10.208,12,10.479,12,11.5c0,0.708-1.283,1.5-3,1.5-1.571,0-2.765-.679-2.969-1.309a1,1,0,1,0-1.9.617C4.644,13.894,6.646,15,9,15c2.8,0,5-1.538,5-3.5a3.2,3.2,0,0,0-.5-1.843Z"></path>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 543 B |
4
public/assets/quill/assets/icons/subscript.svg
Normal file
@@ -0,0 +1,4 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<path class="ql-fill" d="M15.5,15H13.861a3.858,3.858,0,0,0,1.914-2.975,1.8,1.8,0,0,0-1.6-1.751A1.921,1.921,0,0,0,12.021,11.7a0.50013,0.50013,0,1,0,.957.291h0a0.914,0.914,0,0,1,1.053-.725,0.81,0.81,0,0,1,.744.762c0,1.076-1.16971,1.86982-1.93971,2.43082A1.45639,1.45639,0,0,0,12,15.5a0.5,0.5,0,0,0,.5.5h3A0.5,0.5,0,0,0,15.5,15Z"/>
|
||||
<path class="ql-fill" d="M9.65,5.241a1,1,0,0,0-1.409.108L6,7.964,3.759,5.349A1,1,0,0,0,2.192,6.59178Q2.21541,6.6213,2.241,6.649L4.684,9.5,2.241,12.35A1,1,0,0,0,3.71,13.70722q0.02557-.02768.049-0.05722L6,11.036,8.241,13.65a1,1,0,1,0,1.567-1.24277Q9.78459,12.3777,9.759,12.35L7.316,9.5,9.759,6.651A1,1,0,0,0,9.65,5.241Z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 686 B |
4
public/assets/quill/assets/icons/superscript.svg
Normal file
@@ -0,0 +1,4 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<path class="ql-fill" d="M15.5,7H13.861a4.015,4.015,0,0,0,1.914-2.975,1.8,1.8,0,0,0-1.6-1.751A1.922,1.922,0,0,0,12.021,3.7a0.5,0.5,0,1,0,.957.291,0.917,0.917,0,0,1,1.053-.725,0.81,0.81,0,0,1,.744.762c0,1.077-1.164,1.925-1.934,2.486A1.423,1.423,0,0,0,12,7.5a0.5,0.5,0,0,0,.5.5h3A0.5,0.5,0,0,0,15.5,7Z"/>
|
||||
<path class="ql-fill" d="M9.651,5.241a1,1,0,0,0-1.41.108L6,7.964,3.759,5.349a1,1,0,1,0-1.519,1.3L4.683,9.5,2.241,12.35a1,1,0,1,0,1.519,1.3L6,11.036,8.241,13.65a1,1,0,0,0,1.519-1.3L7.317,9.5,9.759,6.651A1,1,0,0,0,9.651,5.241Z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 567 B |
5
public/assets/quill/assets/icons/table-border-all.svg
Normal file
@@ -0,0 +1,5 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<rect class="ql-stroke-miter" height="12" width="12" x="3" y="3"></rect>
|
||||
<line class="ql-stroke-miter" x1="9" x2="9" y1="3" y2="15"></line>
|
||||
<line class="ql-stroke-miter" x1="15" x2="3" y1="9" y2="9"></line>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 246 B |
28
public/assets/quill/assets/icons/table-border-bottom.svg
Normal file
@@ -0,0 +1,28 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<g class="ql-fill ql-transparent">
|
||||
<rect height="2" transform="translate(18 -12) rotate(90)" width="2" x="14" y="2"></rect>
|
||||
<rect height="2" transform="translate(21 -9) rotate(90)" width="2" x="14" y="5"></rect>
|
||||
<rect height="2" transform="translate(24 -6) rotate(90)" width="2" x="14" y="8"></rect>
|
||||
<rect height="2" transform="translate(30 0) rotate(90)" width="2" x="14" y="14"></rect>
|
||||
<rect height="2" transform="translate(27 -3) rotate(90)" width="2" x="14" y="11"></rect>
|
||||
<rect height="2" transform="translate(6 0) rotate(90)" width="2" x="2" y="2"></rect>
|
||||
<rect height="2" transform="translate(9 3) rotate(90)" width="2" x="2" y="5"></rect>
|
||||
<rect height="2" transform="translate(12 6) rotate(90)" width="2" x="2" y="8"></rect>
|
||||
<rect height="2" transform="translate(18 12) rotate(90)" width="2" x="2" y="14"></rect>
|
||||
<rect height="2" transform="translate(15 9) rotate(90)" width="2" x="2" y="11"></rect>
|
||||
</g>
|
||||
<line class="ql-stroke-miter" x1="2" x2="16" y1="15" y2="15"></line>
|
||||
<g class="ql-fill ql-transparent">
|
||||
<rect height="2" width="2" x="5" y="2"></rect>
|
||||
<rect height="2" width="2" x="8" y="2"></rect>
|
||||
<rect height="2" width="2" x="11" y="2"></rect>
|
||||
<rect height="2" width="2" x="5" y="14"></rect>
|
||||
<rect height="2" width="2" x="8" y="14"></rect>
|
||||
<rect height="2" width="2" x="8" y="11"></rect>
|
||||
<rect height="2" width="2" x="8" y="8"></rect>
|
||||
<rect height="2" width="2" x="8" y="5"></rect>
|
||||
<rect height="2" transform="translate(15 3) rotate(90)" width="2" x="5" y="8"></rect>
|
||||
<rect height="2" transform="translate(21 -3) rotate(90)" width="2" x="11" y="8"></rect>
|
||||
<rect height="2" width="2" x="11" y="14"></rect>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.7 KiB |
28
public/assets/quill/assets/icons/table-border-left.svg
Normal file
@@ -0,0 +1,28 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<g class="ql-fill ql-transparent">
|
||||
<rect height="2" transform="translate(30 6) rotate(180)" width="2" x="14" y="2"></rect>
|
||||
<rect height="2" transform="translate(24 6) rotate(180)" width="2" x="11" y="2"></rect>
|
||||
<rect height="2" transform="translate(18 6) rotate(180)" width="2" x="8" y="2"></rect>
|
||||
<rect height="2" transform="translate(6 6) rotate(180)" width="2" x="2" y="2"></rect>
|
||||
<rect height="2" transform="translate(12 6) rotate(180)" width="2" x="5" y="2"></rect>
|
||||
<rect height="2" transform="translate(30 30) rotate(180)" width="2" x="14" y="14"></rect>
|
||||
<rect height="2" transform="translate(24 30) rotate(180)" width="2" x="11" y="14"></rect>
|
||||
<rect height="2" transform="translate(18 30) rotate(180)" width="2" x="8" y="14"></rect>
|
||||
<rect height="2" transform="translate(6 30) rotate(180)" width="2" x="2" y="14"></rect>
|
||||
<rect height="2" transform="translate(12 30) rotate(180)" width="2" x="5" y="14"></rect>
|
||||
</g>
|
||||
<line class="ql-stroke-miter" x1="3" x2="3" y1="16" y2="2"></line>
|
||||
<g class="ql-fill ql-transparent">
|
||||
<rect height="2" transform="translate(3 27) rotate(-90)" width="2" x="14" y="11"></rect>
|
||||
<rect height="2" transform="translate(6 24) rotate(-90)" width="2" x="14" y="8"></rect>
|
||||
<rect height="2" transform="translate(9 21) rotate(-90)" width="2" x="14" y="5"></rect>
|
||||
<rect height="2" transform="translate(-9 15) rotate(-90)" width="2" x="2" y="11"></rect>
|
||||
<rect height="2" transform="translate(-6 12) rotate(-90)" width="2" x="2" y="8"></rect>
|
||||
<rect height="2" transform="translate(-3 15) rotate(-90)" width="2" x="5" y="8"></rect>
|
||||
<rect height="2" transform="translate(0 18) rotate(-90)" width="2" x="8" y="8"></rect>
|
||||
<rect height="2" transform="translate(3 21) rotate(-90)" width="2" x="11" y="8"></rect>
|
||||
<rect height="2" transform="translate(18 24) rotate(180)" width="2" x="8" y="11"></rect>
|
||||
<rect height="2" transform="translate(18 12) rotate(180)" width="2" x="8" y="5"></rect>
|
||||
<rect height="2" transform="translate(-3 9) rotate(-90)" width="2" x="2" y="5"></rect>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.1 KiB |
25
public/assets/quill/assets/icons/table-border-none.svg
Normal file
@@ -0,0 +1,25 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<g class="ql-fill ql-transparent">
|
||||
<rect height="2" width="2" x="2" y="2"></rect>
|
||||
<rect height="2" width="2" x="5" y="2"></rect>
|
||||
<rect height="2" width="2" x="8" y="2"></rect>
|
||||
<rect height="2" width="2" x="14" y="2"></rect>
|
||||
<rect height="2" width="2" x="11" y="2"></rect>
|
||||
<rect height="2" width="2" x="2" y="14"></rect>
|
||||
<rect height="2" width="2" x="5" y="14"></rect>
|
||||
<rect height="2" width="2" x="8" y="14"></rect>
|
||||
<rect height="2" width="2" x="14" y="14"></rect>
|
||||
<rect height="2" width="2" x="11" y="14"></rect>
|
||||
<rect height="2" transform="translate(-9 15) rotate(-90)" width="2" x="2" y="11"></rect>
|
||||
<rect height="2" transform="translate(-6 12) rotate(-90)" width="2" x="2" y="8"></rect>
|
||||
<rect height="2" transform="translate(-3 9) rotate(-90)" width="2" x="2" y="5"></rect>
|
||||
<rect height="2" transform="translate(3 27) rotate(-90)" width="2" x="14" y="11"></rect>
|
||||
<rect height="2" transform="translate(6 24) rotate(-90)" width="2" x="14" y="8"></rect>
|
||||
<rect height="2" transform="translate(3 21) rotate(-90)" width="2" x="11" y="8"></rect>
|
||||
<rect height="2" transform="translate(0 18) rotate(-90)" width="2" x="8" y="8"></rect>
|
||||
<rect height="2" transform="translate(-3 15) rotate(-90)" width="2" x="5" y="8"></rect>
|
||||
<rect height="2" width="2" x="8" y="11"></rect>
|
||||
<rect height="2" width="2" x="8" y="5"></rect>
|
||||
<rect height="2" transform="translate(9 21) rotate(-90)" width="2" x="14" y="5"></rect>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.5 KiB |
35
public/assets/quill/assets/icons/table-border-outside.svg
Normal file
@@ -0,0 +1,35 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<defs>
|
||||
<style>
|
||||
.cls-1{opacity:0.4;}
|
||||
.cls-2{fill:#444;}
|
||||
.cls-3{fill:none;stroke:#444;stroke-miterlimit:10;stroke-width:2px;}
|
||||
</style>
|
||||
</defs>
|
||||
<g class="ql-fill ql-transparent">
|
||||
<rect height="2" width="2" x="2" y="2"></rect>
|
||||
<rect height="2" width="2" x="5" y="2"></rect>
|
||||
<rect height="2" width="2" x="8" y="2"></rect>
|
||||
<rect height="2" width="2" x="14" y="2"></rect>
|
||||
<rect height="2" width="2" x="11" y="2"></rect>
|
||||
<rect height="2" width="2" x="2" y="14"></rect>
|
||||
<rect height="2" width="2" x="5" y="14"></rect>
|
||||
<rect height="2" width="2" x="8" y="14"></rect>
|
||||
</g>
|
||||
<rect class="ql-stroke-miter" height="12" width="12" x="3" y="3"></rect>
|
||||
<g class="ql-fill ql-transparent">
|
||||
<rect height="2" width="2" x="14" y="14"></rect>
|
||||
<rect height="2" width="2" x="11" y="14"></rect>
|
||||
<rect height="2" transform="translate(-9 15) rotate(-90)" width="2" x="2" y="11"></rect>
|
||||
<rect height="2" transform="translate(-6 12) rotate(-90)" width="2" x="2" y="8"></rect>
|
||||
<rect height="2" transform="translate(-3 9) rotate(-90)" width="2" x="2" y="5"></rect>
|
||||
<rect height="2" transform="translate(3 27) rotate(-90)" width="2" x="14" y="11"></rect>
|
||||
<rect height="2" transform="translate(6 24) rotate(-90)" width="2" x="14" y="8"></rect>
|
||||
<rect height="2" transform="translate(3 21) rotate(-90)" width="2" x="11" y="8"></rect>
|
||||
<rect height="2" transform="translate(0 18) rotate(-90)" width="2" x="8" y="8"></rect>
|
||||
<rect height="2" transform="translate(-3 15) rotate(-90)" width="2" x="5" y="8"></rect>
|
||||
<rect height="2" width="2" x="8" y="11"></rect>
|
||||
<rect height="2" width="2" x="8" y="5"></rect>
|
||||
<rect height="2" transform="translate(9 21) rotate(-90)" width="2" x="14" y="5"></rect>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.8 KiB |
28
public/assets/quill/assets/icons/table-border-right.svg
Normal file
@@ -0,0 +1,28 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<g class="ql-fill ql-transparent">
|
||||
<rect height="2" width="2" x="2" y="2"></rect>
|
||||
<rect height="2" width="2" x="5" y="2"></rect>
|
||||
<rect height="2" width="2" x="8" y="2"></rect>
|
||||
<rect height="2" width="2" x="14" y="2"></rect>
|
||||
<rect height="2" width="2" x="11" y="2"></rect>
|
||||
<rect height="2" width="2" x="2" y="14"></rect>
|
||||
<rect height="2" width="2" x="5" y="14"></rect>
|
||||
<rect height="2" width="2" x="8" y="14"></rect>
|
||||
<rect height="2" width="2" x="14" y="14"></rect>
|
||||
<rect height="2" width="2" x="11" y="14"></rect>
|
||||
</g>
|
||||
<line class="ql-stroke-miter" x1="15" x2="15" y1="16" y2="2"></line>
|
||||
<g class="ql-fill ql-transparent">
|
||||
<rect height="2" transform="translate(-9 15) rotate(-90)" width="2" x="2" y="11"></rect>
|
||||
<rect height="2" transform="translate(-6 12) rotate(-90)" width="2" x="2" y="8"></rect>
|
||||
<rect height="2" transform="translate(-3 9) rotate(-90)" width="2" x="2" y="5"></rect>
|
||||
<rect height="2" transform="translate(3 27) rotate(-90)" width="2" x="14" y="11"></rect>
|
||||
<rect height="2" transform="translate(6 24) rotate(-90)" width="2" x="14" y="8"></rect>
|
||||
<rect height="2" transform="translate(3 21) rotate(-90)" width="2" x="11" y="8"></rect>
|
||||
<rect height="2" transform="translate(0 18) rotate(-90)" width="2" x="8" y="8"></rect>
|
||||
<rect height="2" transform="translate(-3 15) rotate(-90)" width="2" x="5" y="8"></rect>
|
||||
<rect height="2" width="2" x="8" y="11"></rect>
|
||||
<rect height="2" width="2" x="8" y="5"></rect>
|
||||
<rect height="2" transform="translate(9 21) rotate(-90)" width="2" x="14" y="5"></rect>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.6 KiB |
28
public/assets/quill/assets/icons/table-border-top.svg
Normal file
@@ -0,0 +1,28 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<g class="ql-fill ql-transparent">
|
||||
<rect height="2" transform="translate(-12 18) rotate(-90)" width="2" x="2" y="14"></rect>
|
||||
<rect height="2" transform="translate(-9 15) rotate(-90)" width="2" x="2" y="11"></rect>
|
||||
<rect height="2" transform="translate(-6 12) rotate(-90)" width="2" x="2" y="8"></rect>
|
||||
<rect height="2" transform="translate(0 6) rotate(-90)" width="2" x="2" y="2"></rect>
|
||||
<rect height="2" transform="translate(-3 9) rotate(-90)" width="2" x="2" y="5"></rect>
|
||||
<rect height="2" transform="translate(0 30) rotate(-90)" width="2" x="14" y="14"></rect>
|
||||
<rect height="2" transform="translate(3 27) rotate(-90)" width="2" x="14" y="11"></rect>
|
||||
<rect height="2" transform="translate(6 24) rotate(-90)" width="2" x="14" y="8"></rect>
|
||||
<rect height="2" transform="translate(12 18) rotate(-90)" width="2" x="14" y="2"></rect>
|
||||
<rect height="2" transform="translate(9 21) rotate(-90)" width="2" x="14" y="5"></rect>
|
||||
</g>
|
||||
<line class="ql-stroke-miter" x1="16" x2="2" y1="3" y2="3"></line>
|
||||
<g class="ql-fill ql-transparent">
|
||||
<rect height="2" transform="translate(24 30) rotate(-180)" width="2" x="11" y="14"></rect>
|
||||
<rect height="2" transform="translate(18 30) rotate(-180)" width="2" x="8" y="14"></rect>
|
||||
<rect height="2" transform="translate(12 30) rotate(-180)" width="2" x="5" y="14"></rect>
|
||||
<rect height="2" transform="translate(24 6) rotate(-180)" width="2" x="11" y="2"></rect>
|
||||
<rect height="2" transform="translate(18 6) rotate(-180)" width="2" x="8" y="2"></rect>
|
||||
<rect height="2" transform="translate(18 12) rotate(-180)" width="2" x="8" y="5"></rect>
|
||||
<rect height="2" transform="translate(18 18) rotate(-180)" width="2" x="8" y="8"></rect>
|
||||
<rect height="2" transform="translate(18 24) rotate(-180)" width="2" x="8" y="11"></rect>
|
||||
<rect height="2" transform="translate(3 21) rotate(-90)" width="2" x="11" y="8"></rect>
|
||||
<rect height="2" transform="translate(-3 15) rotate(-90)" width="2" x="5" y="8"></rect>
|
||||
<rect height="2" transform="translate(12 6) rotate(-180)" width="2" x="5" y="2"></rect>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.1 KiB |
13
public/assets/quill/assets/icons/table-delete-cells.svg
Normal file
@@ -0,0 +1,13 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<path class="ql-fill" d="M15.707,7l1.146-1.146a0.5,0.5,0,1,0-.707-0.707L15,6.293,13.854,5.146a0.5,0.5,0,0,0-.707.707L14.293,7,13.146,8.146a0.5,0.5,0,1,0,.707.707L15,7.707l1.146,1.146a0.5,0.5,0,1,0,.707-0.707Z"></path>
|
||||
<path class="ql-fill" d="M6,5H3A1,1,0,0,0,2,6V8A1,1,0,0,0,3,9H6V5Z"></path>
|
||||
<path class="ql-fill" d="M10,5H7V9h3a1,1,0,0,0,1-1V6A1,1,0,0,0,10,5Z"></path>
|
||||
<g class="ql-fill ql-transparent">
|
||||
<path d="M8,11h4V9a1,1,0,0,0-1-1H8v3Z"></path>
|
||||
<path d="M7,11V8H4A1,1,0,0,0,3,9v2H7Z"></path>
|
||||
<path d="M7,12H3v2a1,1,0,0,0,1,1H7V12Z"></path>
|
||||
<path d="M8,12v3h3a1,1,0,0,0,1-1V12H8Z"></path>
|
||||
<path d="M8,6h3a1,1,0,0,0,1-1V3a1,1,0,0,0-1-1H8V6Z"></path>
|
||||
<path d="M4,6H7V2H4A1,1,0,0,0,3,3V5A1,1,0,0,0,4,6Z"></path>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 788 B |
@@ -0,0 +1,8 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<g class="ql-fill ql-transparent">
|
||||
<rect height="10" rx="1" ry="1" width="4" x="2" y="6"></rect>
|
||||
<rect height="10" rx="1" ry="1" width="4" x="12" y="6"></rect>
|
||||
</g>
|
||||
<rect class="ql-fill" height="8" rx="1" ry="1" width="4" x="7" y="2"></rect>
|
||||
<path class="ql-fill" d="M9.707,13l1.146-1.146a0.5,0.5,0,0,0-.707-0.707L9,12.293,7.854,11.146a0.5,0.5,0,0,0-.707.707L8.293,13,7.146,14.146a0.5,0.5,0,1,0,.707.707L9,13.707l1.146,1.146a0.5,0.5,0,0,0,.707-0.707Z"></path>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 508 B |
9
public/assets/quill/assets/icons/table-delete-rows.svg
Normal file
@@ -0,0 +1,9 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<g class="ql-fill ql-stroke ql-thin ql-transparent">
|
||||
<rect height="3" rx="0.5" ry="0.5" width="7" x="4.5" y="2.5"></rect>
|
||||
<rect height="3" rx="0.5" ry="0.5" width="7" x="4.5" y="12.5"></rect>
|
||||
</g>
|
||||
<rect class="ql-fill ql-stroke ql-thin" height="3" rx="0.5" ry="0.5" width="7" x="8.5" y="7.5"></rect>
|
||||
<line class="ql-stroke ql-thin" x1="6.5" x2="3.5" y1="7.5" y2="10.5"></line>
|
||||
<line class="ql-stroke ql-thin" x1="3.5" x2="6.5" y1="7.5" y2="10.5"></line>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 504 B |
13
public/assets/quill/assets/icons/table-insert-cells.svg
Normal file
@@ -0,0 +1,13 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<g class="ql-fill ql-transparent">
|
||||
<path d="M11,11h4V9a1,1,0,0,0-1-1H11v3Z"></path>
|
||||
<path d="M10,11V8H7A1,1,0,0,0,6,9v2h4Z"></path>
|
||||
<path d="M10,12H6v2a1,1,0,0,0,1,1h3V12Z"></path>
|
||||
<path d="M11,12v3h3a1,1,0,0,0,1-1V12H11Z"></path>
|
||||
<path d="M11,6h3a1,1,0,0,0,1-1V3a1,1,0,0,0-1-1H11V6Z"></path>
|
||||
<path d="M7,6h3V2H7A1,1,0,0,0,6,3V5A1,1,0,0,0,7,6Z"></path>
|
||||
</g>
|
||||
<path class="ql-fill" d="M5,6H4V5a0.5,0.5,0,0,0-.854-0.354l-2,2a0.5,0.5,0,0,0,0,.707l2,2A0.5,0.5,0,0,0,3.5,9.5a0.494,0.494,0,0,0,.191-0.038A0.5,0.5,0,0,0,4,9V8H5A1,1,0,0,0,5,6Z"></path>
|
||||
<path class="ql-fill" d="M15,5H12V9h3a1,1,0,0,0,1-1V6A1,1,0,0,0,15,5Z"></path>
|
||||
<path class="ql-fill" d="M11,5H8A1,1,0,0,0,7,6V8A1,1,0,0,0,8,9h3V5Z"></path>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 766 B |
@@ -0,0 +1,8 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<g class="ql-fill ql-transparent">
|
||||
<rect height="10" rx="1" ry="1" width="4" x="12" y="2"></rect>
|
||||
<rect height="10" rx="1" ry="1" width="4" x="2" y="2"></rect>
|
||||
</g>
|
||||
<path class="ql-fill" d="M11.354,4.146l-2-2a0.5,0.5,0,0,0-.707,0l-2,2A0.5,0.5,0,0,0,7,5H8V6a1,1,0,0,0,2,0V5h1A0.5,0.5,0,0,0,11.354,4.146Z"></path>
|
||||
<rect class="ql-fill" height="8" rx="1" ry="1" width="4" x="7" y="8"></rect>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 437 B |
9
public/assets/quill/assets/icons/table-insert-rows.svg
Normal file
@@ -0,0 +1,9 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<g class="ql-fill ql-stroke ql-thin ql-transparent">
|
||||
<rect height="3" rx="0.5" ry="0.5" width="7" x="4.5" y="2.5"></rect>
|
||||
<rect height="3" rx="0.5" ry="0.5" width="7" x="4.5" y="12.5"></rect>
|
||||
</g>
|
||||
<rect class="ql-fill ql-stroke ql-thin" height="3" rx="0.5" ry="0.5" width="7" x="8.5" y="7.5"></rect>
|
||||
<polygon class="ql-fill ql-stroke ql-thin" points="4.5 11 2.5 9 4.5 7 4.5 11"></polygon>
|
||||
<line class="ql-stroke" x1="6" x2="4" y1="9" y2="9"></line>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 499 B |
4
public/assets/quill/assets/icons/table-merge-cells.svg
Normal file
@@ -0,0 +1,4 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<rect class="ql-stroke" height="4" width="12" x="3" y="7"></rect>
|
||||
<path class="ql-fill ql-transparent" d="M2,2V16H16V2H2ZM14,14H10V11H8v3H4V4H8V7h2V4h4V14Z"></path>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 201 B |
7
public/assets/quill/assets/icons/table-unmerge-cells.svg
Normal file
@@ -0,0 +1,7 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<rect class="ql-stroke" height="4" width="12" x="3" y="7"></rect>
|
||||
<path class="ql-fill ql-transparent" d="M2,2V16H16V2H2ZM14,14H10V11H8v3H4V4H8V7h2V4h4V14Z"></path>
|
||||
<line class="ql-stroke" x1="12" x2="12" y1="11" y2="7"></line>
|
||||
<line class="ql-stroke" x1="9" x2="9" y1="11" y2="7"></line>
|
||||
<line class="ql-stroke" x1="6" x2="6" y1="11" y2="7"></line>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 392 B |
11
public/assets/quill/assets/icons/table.svg
Normal file
@@ -0,0 +1,11 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<rect class="ql-stroke" height="12" width="12" x="3" y="3"></rect>
|
||||
<rect class="ql-fill" height="2" width="3" x="5" y="5"></rect>
|
||||
<rect class="ql-fill" height="2" width="4" x="9" y="5"></rect>
|
||||
<g class="ql-fill ql-transparent">
|
||||
<rect height="2" width="3" x="5" y="8"></rect>
|
||||
<rect height="2" width="4" x="9" y="8"></rect>
|
||||
<rect height="2" width="3" x="5" y="11"></rect>
|
||||
<rect height="2" width="4" x="9" y="11"></rect>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 481 B |
4
public/assets/quill/assets/icons/underline.svg
Normal file
@@ -0,0 +1,4 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<path class="ql-stroke" d="M5,3V9a4.012,4.012,0,0,0,4,4H9a4.012,4.012,0,0,0,4-4V3"></path>
|
||||
<rect class="ql-fill" height="1" rx="0.5" ry="0.5" width="12" x="3" y="15"></rect>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 210 B |
4
public/assets/quill/assets/icons/undo.svg
Normal file
@@ -0,0 +1,4 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<polygon class="ql-fill ql-stroke" points="6 10 4 12 2 10 6 10"></polygon>
|
||||
<path class="ql-stroke" d="M8.09,13.91A4.6,4.6,0,0,0,9,14,5,5,0,1,0,4,9"></path>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 192 B |
14
public/assets/quill/assets/icons/video.svg
Normal file
@@ -0,0 +1,14 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<rect class="ql-stroke" height="12" width="12" x="3" y="3"></rect>
|
||||
<rect class="ql-fill" height="12" width="1" x="5" y="3"></rect>
|
||||
<rect class="ql-fill" height="12" width="1" x="12" y="3"></rect>
|
||||
<rect class="ql-fill" height="2" width="8" x="5" y="8"></rect>
|
||||
<rect class="ql-fill" height="1" width="3" x="3" y="5"></rect>
|
||||
<rect class="ql-fill" height="1" width="3" x="3" y="7"></rect>
|
||||
<rect class="ql-fill" height="1" width="3" x="3" y="10"></rect>
|
||||
<rect class="ql-fill" height="1" width="3" x="3" y="12"></rect>
|
||||
<rect class="ql-fill" height="1" width="3" x="12" y="5"></rect>
|
||||
<rect class="ql-fill" height="1" width="3" x="12" y="7"></rect>
|
||||
<rect class="ql-fill" height="1" width="3" x="12" y="10"></rect>
|
||||
<rect class="ql-fill" height="1" width="3" x="12" y="12"></rect>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 827 B |
18
public/assets/quill/assets/snow.styl
Normal file
@@ -0,0 +1,18 @@
|
||||
themeName = 'snow'
|
||||
activeColor = #06c
|
||||
borderColor = #ccc
|
||||
backgroundColor = #fff
|
||||
inactiveColor = #444
|
||||
shadowColor = #ddd
|
||||
textColor = #444
|
||||
|
||||
@import './core'
|
||||
@import './base'
|
||||
@import './snow/*'
|
||||
|
||||
.ql-snow
|
||||
a
|
||||
color: activeColor
|
||||
|
||||
.ql-container.ql-snow
|
||||
border: 1px solid borderColor
|
||||
26
public/assets/quill/assets/snow/toolbar.styl
Normal file
@@ -0,0 +1,26 @@
|
||||
.ql-toolbar.ql-snow
|
||||
border: 1px solid borderColor
|
||||
box-sizing: border-box
|
||||
font-family: 'Helvetica Neue', 'Helvetica', 'Arial', sans-serif
|
||||
padding: 8px
|
||||
|
||||
.ql-formats
|
||||
margin-right: 15px
|
||||
|
||||
.ql-picker-label
|
||||
border: 1px solid transparent
|
||||
.ql-picker-options
|
||||
border: 1px solid transparent
|
||||
box-shadow: rgba(0,0,0,0.2) 0 2px 8px
|
||||
.ql-picker.ql-expanded
|
||||
.ql-picker-label
|
||||
border-color: borderColor
|
||||
.ql-picker-options
|
||||
border-color: borderColor
|
||||
|
||||
.ql-color-picker
|
||||
.ql-picker-item.ql-selected, .ql-picker-item:hover
|
||||
border-color: #000
|
||||
|
||||
.ql-toolbar.ql-snow + .ql-container.ql-snow
|
||||
border-top: 0px;
|
||||
53
public/assets/quill/assets/snow/tooltip.styl
Normal file
@@ -0,0 +1,53 @@
|
||||
tooltipMargin = 8px
|
||||
|
||||
.ql-snow
|
||||
.ql-tooltip
|
||||
background-color: #fff
|
||||
border: 1px solid borderColor
|
||||
box-shadow: 0px 0px 5px shadowColor
|
||||
color: textColor
|
||||
padding: 5px 12px
|
||||
white-space: nowrap
|
||||
&::before
|
||||
content: "Visit URL:"
|
||||
line-height: 26px
|
||||
margin-right: tooltipMargin
|
||||
input[type=text]
|
||||
display: none
|
||||
border: 1px solid borderColor
|
||||
font-size: 13px
|
||||
height: 26px
|
||||
margin: 0px
|
||||
padding: 3px 5px
|
||||
width: 170px
|
||||
a.ql-preview
|
||||
display: inline-block
|
||||
max-width: 200px
|
||||
overflow-x: hidden
|
||||
text-overflow: ellipsis
|
||||
vertical-align: top
|
||||
a.ql-action::after
|
||||
border-right: 1px solid borderColor
|
||||
content: 'Edit'
|
||||
margin-left: tooltipMargin*2
|
||||
padding-right: tooltipMargin
|
||||
a.ql-remove::before
|
||||
content: 'Remove'
|
||||
margin-left: tooltipMargin
|
||||
a
|
||||
line-height: 26px
|
||||
.ql-tooltip.ql-editing
|
||||
a.ql-preview, a.ql-remove
|
||||
display: none
|
||||
input[type=text]
|
||||
display: inline-block
|
||||
a.ql-action::after
|
||||
border-right: 0px
|
||||
content: 'Save'
|
||||
padding-right: 0px
|
||||
.ql-tooltip[data-mode=link]::before
|
||||
content: "Enter link:"
|
||||
.ql-tooltip[data-mode=formula]::before
|
||||
content: "Enter formula:"
|
||||
.ql-tooltip[data-mode=video]::before
|
||||
content: "Enter video:"
|
||||
34
public/assets/quill/blots/block.d.ts
vendored
Normal file
@@ -0,0 +1,34 @@
|
||||
import { AttributorStore, BlockBlot, EmbedBlot } from 'parchment';
|
||||
import type { Blot, Parent } from 'parchment';
|
||||
import Delta from 'quill-delta';
|
||||
declare class Block extends BlockBlot {
|
||||
cache: {
|
||||
delta?: Delta | null;
|
||||
length?: number;
|
||||
};
|
||||
delta(): Delta;
|
||||
deleteAt(index: number, length: number): void;
|
||||
formatAt(index: number, length: number, name: string, value: unknown): void;
|
||||
insertAt(index: number, value: string, def?: unknown): void;
|
||||
insertBefore(blot: Blot, ref?: Blot | null): void;
|
||||
length(): number;
|
||||
moveChildren(target: Parent, ref?: Blot | null): void;
|
||||
optimize(context: {
|
||||
[key: string]: any;
|
||||
}): void;
|
||||
path(index: number): [Blot, number][];
|
||||
removeChild(child: Blot): void;
|
||||
split(index: number, force?: boolean | undefined): Blot | null;
|
||||
}
|
||||
declare class BlockEmbed extends EmbedBlot {
|
||||
attributes: AttributorStore;
|
||||
domNode: HTMLElement;
|
||||
attach(): void;
|
||||
delta(): Delta;
|
||||
format(name: string, value: unknown): void;
|
||||
formatAt(index: number, length: number, name: string, value: unknown): void;
|
||||
insertAt(index: number, value: string, def?: unknown): void;
|
||||
}
|
||||
declare function blockDelta(blot: BlockBlot, filter?: boolean): Delta;
|
||||
declare function bubbleFormats(blot: Blot | null, formats?: Record<string, unknown>, filter?: boolean): Record<string, unknown>;
|
||||
export { blockDelta, bubbleFormats, BlockEmbed, Block as default };
|
||||
182
public/assets/quill/blots/block.js
Normal file
@@ -0,0 +1,182 @@
|
||||
import { AttributorStore, BlockBlot, EmbedBlot, LeafBlot, Scope } from 'parchment';
|
||||
import Delta from 'quill-delta';
|
||||
import Break from './break.js';
|
||||
import Inline from './inline.js';
|
||||
import TextBlot from './text.js';
|
||||
const NEWLINE_LENGTH = 1;
|
||||
class Block extends BlockBlot {
|
||||
cache = {};
|
||||
delta() {
|
||||
if (this.cache.delta == null) {
|
||||
this.cache.delta = blockDelta(this);
|
||||
}
|
||||
return this.cache.delta;
|
||||
}
|
||||
deleteAt(index, length) {
|
||||
super.deleteAt(index, length);
|
||||
this.cache = {};
|
||||
}
|
||||
formatAt(index, length, name, value) {
|
||||
if (length <= 0) return;
|
||||
if (this.scroll.query(name, Scope.BLOCK)) {
|
||||
if (index + length === this.length()) {
|
||||
this.format(name, value);
|
||||
}
|
||||
} else {
|
||||
super.formatAt(index, Math.min(length, this.length() - index - 1), name, value);
|
||||
}
|
||||
this.cache = {};
|
||||
}
|
||||
insertAt(index, value, def) {
|
||||
if (def != null) {
|
||||
super.insertAt(index, value, def);
|
||||
this.cache = {};
|
||||
return;
|
||||
}
|
||||
if (value.length === 0) return;
|
||||
const lines = value.split('\n');
|
||||
const text = lines.shift();
|
||||
if (text.length > 0) {
|
||||
if (index < this.length() - 1 || this.children.tail == null) {
|
||||
super.insertAt(Math.min(index, this.length() - 1), text);
|
||||
} else {
|
||||
this.children.tail.insertAt(this.children.tail.length(), text);
|
||||
}
|
||||
this.cache = {};
|
||||
}
|
||||
// TODO: Fix this next time the file is edited.
|
||||
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
||||
let block = this;
|
||||
lines.reduce((lineIndex, line) => {
|
||||
// @ts-expect-error Fix me later
|
||||
block = block.split(lineIndex, true);
|
||||
block.insertAt(0, line);
|
||||
return line.length;
|
||||
}, index + text.length);
|
||||
}
|
||||
insertBefore(blot, ref) {
|
||||
const {
|
||||
head
|
||||
} = this.children;
|
||||
super.insertBefore(blot, ref);
|
||||
if (head instanceof Break) {
|
||||
head.remove();
|
||||
}
|
||||
this.cache = {};
|
||||
}
|
||||
length() {
|
||||
if (this.cache.length == null) {
|
||||
this.cache.length = super.length() + NEWLINE_LENGTH;
|
||||
}
|
||||
return this.cache.length;
|
||||
}
|
||||
moveChildren(target, ref) {
|
||||
super.moveChildren(target, ref);
|
||||
this.cache = {};
|
||||
}
|
||||
optimize(context) {
|
||||
super.optimize(context);
|
||||
this.cache = {};
|
||||
}
|
||||
path(index) {
|
||||
return super.path(index, true);
|
||||
}
|
||||
removeChild(child) {
|
||||
super.removeChild(child);
|
||||
this.cache = {};
|
||||
}
|
||||
split(index) {
|
||||
let force = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
||||
if (force && (index === 0 || index >= this.length() - NEWLINE_LENGTH)) {
|
||||
const clone = this.clone();
|
||||
if (index === 0) {
|
||||
this.parent.insertBefore(clone, this);
|
||||
return this;
|
||||
}
|
||||
this.parent.insertBefore(clone, this.next);
|
||||
return clone;
|
||||
}
|
||||
const next = super.split(index, force);
|
||||
this.cache = {};
|
||||
return next;
|
||||
}
|
||||
}
|
||||
Block.blotName = 'block';
|
||||
Block.tagName = 'P';
|
||||
Block.defaultChild = Break;
|
||||
Block.allowedChildren = [Break, Inline, EmbedBlot, TextBlot];
|
||||
class BlockEmbed extends EmbedBlot {
|
||||
attach() {
|
||||
super.attach();
|
||||
this.attributes = new AttributorStore(this.domNode);
|
||||
}
|
||||
delta() {
|
||||
return new Delta().insert(this.value(), {
|
||||
...this.formats(),
|
||||
...this.attributes.values()
|
||||
});
|
||||
}
|
||||
format(name, value) {
|
||||
const attribute = this.scroll.query(name, Scope.BLOCK_ATTRIBUTE);
|
||||
if (attribute != null) {
|
||||
// @ts-expect-error TODO: Scroll#query() should return Attributor when scope is attribute
|
||||
this.attributes.attribute(attribute, value);
|
||||
}
|
||||
}
|
||||
formatAt(index, length, name, value) {
|
||||
this.format(name, value);
|
||||
}
|
||||
insertAt(index, value, def) {
|
||||
if (def != null) {
|
||||
super.insertAt(index, value, def);
|
||||
return;
|
||||
}
|
||||
const lines = value.split('\n');
|
||||
const text = lines.pop();
|
||||
const blocks = lines.map(line => {
|
||||
const block = this.scroll.create(Block.blotName);
|
||||
block.insertAt(0, line);
|
||||
return block;
|
||||
});
|
||||
const ref = this.split(index);
|
||||
blocks.forEach(block => {
|
||||
this.parent.insertBefore(block, ref);
|
||||
});
|
||||
if (text) {
|
||||
this.parent.insertBefore(this.scroll.create('text', text), ref);
|
||||
}
|
||||
}
|
||||
}
|
||||
BlockEmbed.scope = Scope.BLOCK_BLOT;
|
||||
// It is important for cursor behavior BlockEmbeds use tags that are block level elements
|
||||
|
||||
function blockDelta(blot) {
|
||||
let filter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
||||
return blot.descendants(LeafBlot).reduce((delta, leaf) => {
|
||||
if (leaf.length() === 0) {
|
||||
return delta;
|
||||
}
|
||||
return delta.insert(leaf.value(), bubbleFormats(leaf, {}, filter));
|
||||
}, new Delta()).insert('\n', bubbleFormats(blot));
|
||||
}
|
||||
function bubbleFormats(blot) {
|
||||
let formats = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
||||
let filter = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
|
||||
if (blot == null) return formats;
|
||||
if ('formats' in blot && typeof blot.formats === 'function') {
|
||||
formats = {
|
||||
...formats,
|
||||
...blot.formats()
|
||||
};
|
||||
if (filter) {
|
||||
// exclude syntax highlighting from deltas and getFormat()
|
||||
delete formats['code-token'];
|
||||
}
|
||||
}
|
||||
if (blot.parent == null || blot.parent.statics.blotName === 'scroll' || blot.parent.statics.scope !== blot.statics.scope) {
|
||||
return formats;
|
||||
}
|
||||
return bubbleFormats(blot.parent, formats, filter);
|
||||
}
|
||||
export { blockDelta, bubbleFormats, BlockEmbed, Block as default };
|
||||
//# sourceMappingURL=block.js.map
|
||||
1
public/assets/quill/blots/block.js.map
Normal file
8
public/assets/quill/blots/break.d.ts
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
import { EmbedBlot } from 'parchment';
|
||||
declare class Break extends EmbedBlot {
|
||||
static value(): undefined;
|
||||
optimize(): void;
|
||||
length(): number;
|
||||
value(): string;
|
||||
}
|
||||
export default Break;
|
||||
21
public/assets/quill/blots/break.js
Normal file
@@ -0,0 +1,21 @@
|
||||
import { EmbedBlot } from 'parchment';
|
||||
class Break extends EmbedBlot {
|
||||
static value() {
|
||||
return undefined;
|
||||
}
|
||||
optimize() {
|
||||
if (this.prev || this.next) {
|
||||
this.remove();
|
||||
}
|
||||
}
|
||||
length() {
|
||||
return 0;
|
||||
}
|
||||
value() {
|
||||
return '';
|
||||
}
|
||||
}
|
||||
Break.blotName = 'break';
|
||||
Break.tagName = 'BR';
|
||||
export default Break;
|
||||
//# sourceMappingURL=break.js.map
|
||||
1
public/assets/quill/blots/break.js.map
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"break.js","names":["EmbedBlot","Break","value","undefined","optimize","prev","next","remove","length","blotName","tagName"],"sources":["../../src/blots/break.ts"],"sourcesContent":["import { EmbedBlot } from 'parchment';\n\nclass Break extends EmbedBlot {\n static value() {\n return undefined;\n }\n\n optimize() {\n if (this.prev || this.next) {\n this.remove();\n }\n }\n\n length() {\n return 0;\n }\n\n value() {\n return '';\n }\n}\nBreak.blotName = 'break';\nBreak.tagName = 'BR';\n\nexport default Break;\n"],"mappings":"AAAA,SAASA,SAAS,QAAQ,WAAW;AAErC,MAAMC,KAAK,SAASD,SAAS,CAAC;EAC5B,OAAOE,KAAKA,CAAA,EAAG;IACb,OAAOC,SAAS;EAClB;EAEAC,QAAQA,CAAA,EAAG;IACT,IAAI,IAAI,CAACC,IAAI,IAAI,IAAI,CAACC,IAAI,EAAE;MAC1B,IAAI,CAACC,MAAM,CAAC,CAAC;IACf;EACF;EAEAC,MAAMA,CAAA,EAAG;IACP,OAAO,CAAC;EACV;EAEAN,KAAKA,CAAA,EAAG;IACN,OAAO,EAAE;EACX;AACF;AACAD,KAAK,CAACQ,QAAQ,GAAG,OAAO;AACxBR,KAAK,CAACS,OAAO,GAAG,IAAI;AAEpB,eAAeT,KAAK","ignoreList":[]}
|
||||
4
public/assets/quill/blots/container.d.ts
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
import { ContainerBlot } from 'parchment';
|
||||
declare class Container extends ContainerBlot {
|
||||
}
|
||||
export default Container;
|
||||
4
public/assets/quill/blots/container.js
Normal file
@@ -0,0 +1,4 @@
|
||||
import { ContainerBlot } from 'parchment';
|
||||
class Container extends ContainerBlot {}
|
||||
export default Container;
|
||||
//# sourceMappingURL=container.js.map
|
||||
1
public/assets/quill/blots/container.js.map
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"container.js","names":["ContainerBlot","Container"],"sources":["../../src/blots/container.ts"],"sourcesContent":["import { ContainerBlot } from 'parchment';\n\nclass Container extends ContainerBlot {}\n\nexport default Container;\n"],"mappings":"AAAA,SAASA,aAAa,QAAQ,WAAW;AAEzC,MAAMC,SAAS,SAASD,aAAa,CAAC;AAEtC,eAAeC,SAAS","ignoreList":[]}
|
||||
26
public/assets/quill/blots/cursor.d.ts
vendored
Normal file
@@ -0,0 +1,26 @@
|
||||
import { EmbedBlot } from 'parchment';
|
||||
import type { ScrollBlot } from 'parchment';
|
||||
import type Selection from '../core/selection.js';
|
||||
import type { EmbedContextRange } from './embed.js';
|
||||
declare class Cursor extends EmbedBlot {
|
||||
static blotName: string;
|
||||
static className: string;
|
||||
static tagName: string;
|
||||
static CONTENTS: string;
|
||||
static value(): undefined;
|
||||
selection: Selection;
|
||||
textNode: Text;
|
||||
savedLength: number;
|
||||
constructor(scroll: ScrollBlot, domNode: HTMLElement, selection: Selection);
|
||||
detach(): void;
|
||||
format(name: string, value: unknown): void;
|
||||
index(node: Node, offset: number): number;
|
||||
length(): number;
|
||||
position(): [Text, number];
|
||||
remove(): void;
|
||||
restore(): EmbedContextRange | null;
|
||||
update(mutations: MutationRecord[], context: Record<string, unknown>): void;
|
||||
optimize(context?: unknown): void;
|
||||
value(): string;
|
||||
}
|
||||
export default Cursor;
|
||||
170
public/assets/quill/blots/cursor.js
Normal file
@@ -0,0 +1,170 @@
|
||||
import { EmbedBlot, Scope } from 'parchment';
|
||||
import TextBlot from './text.js';
|
||||
class Cursor extends EmbedBlot {
|
||||
static blotName = 'cursor';
|
||||
static className = 'ql-cursor';
|
||||
static tagName = 'span';
|
||||
static CONTENTS = '\uFEFF'; // Zero width no break space
|
||||
|
||||
static value() {
|
||||
return undefined;
|
||||
}
|
||||
constructor(scroll, domNode, selection) {
|
||||
super(scroll, domNode);
|
||||
this.selection = selection;
|
||||
this.textNode = document.createTextNode(Cursor.CONTENTS);
|
||||
this.domNode.appendChild(this.textNode);
|
||||
this.savedLength = 0;
|
||||
}
|
||||
detach() {
|
||||
// super.detach() will also clear domNode.__blot
|
||||
if (this.parent != null) this.parent.removeChild(this);
|
||||
}
|
||||
format(name, value) {
|
||||
if (this.savedLength !== 0) {
|
||||
super.format(name, value);
|
||||
return;
|
||||
}
|
||||
// TODO: Fix this next time the file is edited.
|
||||
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
||||
let target = this;
|
||||
let index = 0;
|
||||
while (target != null && target.statics.scope !== Scope.BLOCK_BLOT) {
|
||||
index += target.offset(target.parent);
|
||||
target = target.parent;
|
||||
}
|
||||
if (target != null) {
|
||||
this.savedLength = Cursor.CONTENTS.length;
|
||||
// @ts-expect-error TODO: allow empty context in Parchment
|
||||
target.optimize();
|
||||
target.formatAt(index, Cursor.CONTENTS.length, name, value);
|
||||
this.savedLength = 0;
|
||||
}
|
||||
}
|
||||
index(node, offset) {
|
||||
if (node === this.textNode) return 0;
|
||||
return super.index(node, offset);
|
||||
}
|
||||
length() {
|
||||
return this.savedLength;
|
||||
}
|
||||
position() {
|
||||
return [this.textNode, this.textNode.data.length];
|
||||
}
|
||||
remove() {
|
||||
super.remove();
|
||||
// @ts-expect-error Fix me later
|
||||
this.parent = null;
|
||||
}
|
||||
restore() {
|
||||
if (this.selection.composing || this.parent == null) return null;
|
||||
const range = this.selection.getNativeRange();
|
||||
// Browser may push down styles/nodes inside the cursor blot.
|
||||
// https://dvcs.w3.org/hg/editing/raw-file/tip/editing.html#push-down-values
|
||||
while (this.domNode.lastChild != null && this.domNode.lastChild !== this.textNode) {
|
||||
// @ts-expect-error Fix me later
|
||||
this.domNode.parentNode.insertBefore(this.domNode.lastChild, this.domNode);
|
||||
}
|
||||
const prevTextBlot = this.prev instanceof TextBlot ? this.prev : null;
|
||||
const prevTextLength = prevTextBlot ? prevTextBlot.length() : 0;
|
||||
const nextTextBlot = this.next instanceof TextBlot ? this.next : null;
|
||||
// @ts-expect-error TODO: make TextBlot.text public
|
||||
const nextText = nextTextBlot ? nextTextBlot.text : '';
|
||||
const {
|
||||
textNode
|
||||
} = this;
|
||||
// take text from inside this blot and reset it
|
||||
const newText = textNode.data.split(Cursor.CONTENTS).join('');
|
||||
textNode.data = Cursor.CONTENTS;
|
||||
|
||||
// proactively merge TextBlots around cursor so that optimization
|
||||
// doesn't lose the cursor. the reason we are here in cursor.restore
|
||||
// could be that the user clicked in prevTextBlot or nextTextBlot, or
|
||||
// the user typed something.
|
||||
let mergedTextBlot;
|
||||
if (prevTextBlot) {
|
||||
mergedTextBlot = prevTextBlot;
|
||||
if (newText || nextTextBlot) {
|
||||
prevTextBlot.insertAt(prevTextBlot.length(), newText + nextText);
|
||||
if (nextTextBlot) {
|
||||
nextTextBlot.remove();
|
||||
}
|
||||
}
|
||||
} else if (nextTextBlot) {
|
||||
mergedTextBlot = nextTextBlot;
|
||||
nextTextBlot.insertAt(0, newText);
|
||||
} else {
|
||||
const newTextNode = document.createTextNode(newText);
|
||||
mergedTextBlot = this.scroll.create(newTextNode);
|
||||
this.parent.insertBefore(mergedTextBlot, this);
|
||||
}
|
||||
this.remove();
|
||||
if (range) {
|
||||
// calculate selection to restore
|
||||
const remapOffset = (node, offset) => {
|
||||
if (prevTextBlot && node === prevTextBlot.domNode) {
|
||||
return offset;
|
||||
}
|
||||
if (node === textNode) {
|
||||
return prevTextLength + offset - 1;
|
||||
}
|
||||
if (nextTextBlot && node === nextTextBlot.domNode) {
|
||||
return prevTextLength + newText.length + offset;
|
||||
}
|
||||
return null;
|
||||
};
|
||||
const start = remapOffset(range.start.node, range.start.offset);
|
||||
const end = remapOffset(range.end.node, range.end.offset);
|
||||
if (start !== null && end !== null) {
|
||||
return {
|
||||
startNode: mergedTextBlot.domNode,
|
||||
startOffset: start,
|
||||
endNode: mergedTextBlot.domNode,
|
||||
endOffset: end
|
||||
};
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
update(mutations, context) {
|
||||
if (mutations.some(mutation => {
|
||||
return mutation.type === 'characterData' && mutation.target === this.textNode;
|
||||
})) {
|
||||
const range = this.restore();
|
||||
if (range) context.range = range;
|
||||
}
|
||||
}
|
||||
|
||||
// Avoid .ql-cursor being a descendant of `<a/>`.
|
||||
// The reason is Safari pushes down `<a/>` on text insertion.
|
||||
// That will cause DOM nodes not sync with the model.
|
||||
//
|
||||
// For example ({I} is the caret), given the markup:
|
||||
// <a><span class="ql-cursor">\uFEFF{I}</span></a>
|
||||
// When typing a char "x", `<a/>` will be pushed down inside the `<span>` first:
|
||||
// <span class="ql-cursor"><a>\uFEFF{I}</a></span>
|
||||
// And then "x" will be inserted after `<a/>`:
|
||||
// <span class="ql-cursor"><a>\uFEFF</a>d{I}</span>
|
||||
optimize(context) {
|
||||
// @ts-expect-error Fix me later
|
||||
super.optimize(context);
|
||||
let {
|
||||
parent
|
||||
} = this;
|
||||
while (parent) {
|
||||
if (parent.domNode.tagName === 'A') {
|
||||
this.savedLength = Cursor.CONTENTS.length;
|
||||
// @ts-expect-error TODO: make isolate generic
|
||||
parent.isolate(this.offset(parent), this.length()).unwrap();
|
||||
this.savedLength = 0;
|
||||
break;
|
||||
}
|
||||
parent = parent.parent;
|
||||
}
|
||||
}
|
||||
value() {
|
||||
return '';
|
||||
}
|
||||
}
|
||||
export default Cursor;
|
||||
//# sourceMappingURL=cursor.js.map
|
||||
1
public/assets/quill/blots/cursor.js.map
Normal file
18
public/assets/quill/blots/embed.d.ts
vendored
Normal file
@@ -0,0 +1,18 @@
|
||||
import type { ScrollBlot } from 'parchment';
|
||||
import { EmbedBlot } from 'parchment';
|
||||
export interface EmbedContextRange {
|
||||
startNode: Node | Text;
|
||||
startOffset: number;
|
||||
endNode?: Node | Text;
|
||||
endOffset?: number;
|
||||
}
|
||||
declare class Embed extends EmbedBlot {
|
||||
contentNode: HTMLSpanElement;
|
||||
leftGuard: Text;
|
||||
rightGuard: Text;
|
||||
constructor(scroll: ScrollBlot, node: Node);
|
||||
index(node: Node, offset: number): number;
|
||||
restore(node: Text): EmbedContextRange | null;
|
||||
update(mutations: MutationRecord[], context: Record<string, unknown>): void;
|
||||
}
|
||||
export default Embed;
|
||||
72
public/assets/quill/blots/embed.js
Normal file
@@ -0,0 +1,72 @@
|
||||
import { EmbedBlot } from 'parchment';
|
||||
import TextBlot from './text.js';
|
||||
const GUARD_TEXT = '\uFEFF';
|
||||
class Embed extends EmbedBlot {
|
||||
constructor(scroll, node) {
|
||||
super(scroll, node);
|
||||
this.contentNode = document.createElement('span');
|
||||
this.contentNode.setAttribute('contenteditable', 'false');
|
||||
Array.from(this.domNode.childNodes).forEach(childNode => {
|
||||
this.contentNode.appendChild(childNode);
|
||||
});
|
||||
this.leftGuard = document.createTextNode(GUARD_TEXT);
|
||||
this.rightGuard = document.createTextNode(GUARD_TEXT);
|
||||
this.domNode.appendChild(this.leftGuard);
|
||||
this.domNode.appendChild(this.contentNode);
|
||||
this.domNode.appendChild(this.rightGuard);
|
||||
}
|
||||
index(node, offset) {
|
||||
if (node === this.leftGuard) return 0;
|
||||
if (node === this.rightGuard) return 1;
|
||||
return super.index(node, offset);
|
||||
}
|
||||
restore(node) {
|
||||
let range = null;
|
||||
let textNode;
|
||||
const text = node.data.split(GUARD_TEXT).join('');
|
||||
if (node === this.leftGuard) {
|
||||
if (this.prev instanceof TextBlot) {
|
||||
const prevLength = this.prev.length();
|
||||
this.prev.insertAt(prevLength, text);
|
||||
range = {
|
||||
startNode: this.prev.domNode,
|
||||
startOffset: prevLength + text.length
|
||||
};
|
||||
} else {
|
||||
textNode = document.createTextNode(text);
|
||||
this.parent.insertBefore(this.scroll.create(textNode), this);
|
||||
range = {
|
||||
startNode: textNode,
|
||||
startOffset: text.length
|
||||
};
|
||||
}
|
||||
} else if (node === this.rightGuard) {
|
||||
if (this.next instanceof TextBlot) {
|
||||
this.next.insertAt(0, text);
|
||||
range = {
|
||||
startNode: this.next.domNode,
|
||||
startOffset: text.length
|
||||
};
|
||||
} else {
|
||||
textNode = document.createTextNode(text);
|
||||
this.parent.insertBefore(this.scroll.create(textNode), this.next);
|
||||
range = {
|
||||
startNode: textNode,
|
||||
startOffset: text.length
|
||||
};
|
||||
}
|
||||
}
|
||||
node.data = GUARD_TEXT;
|
||||
return range;
|
||||
}
|
||||
update(mutations, context) {
|
||||
mutations.forEach(mutation => {
|
||||
if (mutation.type === 'characterData' && (mutation.target === this.leftGuard || mutation.target === this.rightGuard)) {
|
||||
const range = this.restore(mutation.target);
|
||||
if (range) context.range = range;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
export default Embed;
|
||||
//# sourceMappingURL=embed.js.map
|
||||
1
public/assets/quill/blots/embed.js.map
Normal file
12
public/assets/quill/blots/inline.d.ts
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
import { InlineBlot } from 'parchment';
|
||||
import type { BlotConstructor } from 'parchment';
|
||||
declare class Inline extends InlineBlot {
|
||||
static allowedChildren: BlotConstructor[];
|
||||
static order: string[];
|
||||
static compare(self: string, other: string): number;
|
||||
formatAt(index: number, length: number, name: string, value: unknown): void;
|
||||
optimize(context: {
|
||||
[key: string]: any;
|
||||
}): void;
|
||||
}
|
||||
export default Inline;
|
||||
48
public/assets/quill/blots/inline.js
Normal file
@@ -0,0 +1,48 @@
|
||||
import { EmbedBlot, InlineBlot, Scope } from 'parchment';
|
||||
import Break from './break.js';
|
||||
import Text from './text.js';
|
||||
class Inline extends InlineBlot {
|
||||
static allowedChildren = [Inline, Break, EmbedBlot, Text];
|
||||
// Lower index means deeper in the DOM tree, since not found (-1) is for embeds
|
||||
static order = ['cursor', 'inline',
|
||||
// Must be lower
|
||||
'link',
|
||||
// Chrome wants <a> to be lower
|
||||
'underline', 'strike', 'italic', 'bold', 'script', 'code' // Must be higher
|
||||
];
|
||||
static compare(self, other) {
|
||||
const selfIndex = Inline.order.indexOf(self);
|
||||
const otherIndex = Inline.order.indexOf(other);
|
||||
if (selfIndex >= 0 || otherIndex >= 0) {
|
||||
return selfIndex - otherIndex;
|
||||
}
|
||||
if (self === other) {
|
||||
return 0;
|
||||
}
|
||||
if (self < other) {
|
||||
return -1;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
formatAt(index, length, name, value) {
|
||||
if (Inline.compare(this.statics.blotName, name) < 0 && this.scroll.query(name, Scope.BLOT)) {
|
||||
const blot = this.isolate(index, length);
|
||||
if (value) {
|
||||
blot.wrap(name, value);
|
||||
}
|
||||
} else {
|
||||
super.formatAt(index, length, name, value);
|
||||
}
|
||||
}
|
||||
optimize(context) {
|
||||
super.optimize(context);
|
||||
if (this.parent instanceof Inline && Inline.compare(this.statics.blotName, this.parent.statics.blotName) > 0) {
|
||||
const parent = this.parent.isolate(this.offset(), this.length());
|
||||
// @ts-expect-error TODO: make isolate generic
|
||||
this.moveChildren(parent);
|
||||
parent.wrap(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
export default Inline;
|
||||
//# sourceMappingURL=inline.js.map
|
||||