diff --git a/.github/release.yml b/.github/release.yml new file mode 100644 index 0000000000..839f68ee84 --- /dev/null +++ b/.github/release.yml @@ -0,0 +1,17 @@ +changelog: + exclude: + authors: + - quill-bot + categories: + - title: Bug Fixes 🛠 + labels: + - change:bugfix + - title: New Features 🎉 + labels: + - change:feature + - title: Documentation 📚 + labels: + - change:documentation + - title: Other Changes + labels: + - "*" diff --git a/.github/workflows/_test.yml b/.github/workflows/_test.yml index 1d09470f21..3794b276e1 100644 --- a/.github/workflows/_test.yml +++ b/.github/workflows/_test.yml @@ -25,10 +25,10 @@ jobs: steps: - name: Git checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Use Node.js - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: 20 diff --git a/.github/workflows/changelog.yml b/.github/workflows/changelog.yml new file mode 100644 index 0000000000..301da69b2b --- /dev/null +++ b/.github/workflows/changelog.yml @@ -0,0 +1,22 @@ +name: Generate Changelog + +on: + release: + types: [published] + +jobs: + changelog: + runs-on: ubuntu-latest + steps: + - name: Git checkout + uses: actions/checkout@v4 + + - name: Use Node.js + uses: actions/setup-node@v4 + with: + node-version: 20 + + - run: npm ci + - run: node ./scripts/changelog.mjs + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/label.yml b/.github/workflows/label.yml new file mode 100644 index 0000000000..26ee060b16 --- /dev/null +++ b/.github/workflows/label.yml @@ -0,0 +1,23 @@ +name: Pull Requests + +on: + pull_request: + types: [opened, labeled, unlabeled, synchronize] + +jobs: + label: + runs-on: ubuntu-latest + permissions: + issues: write + pull-requests: write + steps: + - uses: mheap/github-action-required-labels@v5 + with: + mode: exactly + count: 1 + labels: | + change:bugfix + change:feature + change:documentation + change:chore + add_comment: false diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index f9c5fae4f9..e3379fc50f 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -23,10 +23,10 @@ jobs: steps: - name: Git checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Use Node.js - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: 20 diff --git a/CHANGELOG.md b/CHANGELOG.md index 05562e9d9e..df9bd5bec5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,16 +1,18 @@ -# [Unreleased] +# v2.0.1 (2024-05-01) -# 2.0.1 +## Bug Fixes - Prevent overriding of theme's default toolbar settings mistakenly [#4120](https://github.com/quilljs/quill/pull/4120) - Improve typings for methods that return a Delta [#4136](https://github.com/quilljs/quill/pull/4136) - Fix toolbar icons for h3-h6 [#4131](https://github.com/quilljs/quill/pull/4131) -# 2.0.0 +[All changes](https://github.com/quilljs/quill/releases/tag/v2.0.1) + +# v2.0.0 (2024-04-17) We are thrilled to announce the release of Quill 2.0! Please check out the [announcement post](https://slab.com/blog/announcing-quill-2-0/). -### Major Improvements +## Major Improvements - Quill is now a valid ESM package for better ecosystem (e.g. bundlers) and tree-shaking support - Nested Quill support [#3590](https://github.com/quilljs/quill/pull/3590) @@ -20,7 +22,7 @@ We are thrilled to announce the release of Quill 2.0! Please check out the [anno - Auto detect scrolling container [#3840](https://github.com/quilljs/quill/pull/3840) - **Clipboard**: Improve support for pasting from Google Docs and Microsoft Word -### Performance Improvements +## Performance Improvements Quill 2.0 includes many performance optimizations, the most important of which is the improved rendering speed for large content. @@ -28,7 +30,7 @@ Quill 2.0 includes many performance optimizations, the most important of which i - Avoid fetching selections when possible [#3538](https://github.com/quilljs/quill/pull/3538) - No need to setContents when container is empty [#3539](https://github.com/quilljs/quill/pull/3539) -### Code Modernization +## Code Modernization - Migrated to TypeScript - Provided official TypeScript declarations @@ -36,9 +38,9 @@ Quill 2.0 includes many performance optimizations, the most important of which i - Migrated to Playwright for E2E testing - Migrated website to Gatsby -For all commits, please see the [2.0.0 release page](https://github.com/quilljs/quill/releases/tag/v2.0.0). +[All changes](https://github.com/quilljs/quill/releases/tag/v2.0.0) -# 2.0.0-rc.5 +# v2.0.0-rc.5 (2024-04-04) - **Clipboard** Add support for Quill v1 list attributes - Fix overload declarations for `quill.formatText()` and other methods @@ -46,7 +48,9 @@ For all commits, please see the [2.0.0 release page](https://github.com/quilljs/ - Expose Range type - Allow ref for insertBefore to be null -# 2.0.0-rc.4 +[All changes](https://github.com/quilljs/quill/releases/tag/v2.0.0-rc.5) + +# v2.0.0-rc.4 (2024-03-24) - Include source maps for Parchment - **Clipboard** Support pasting links copied from iOS share sheets @@ -54,51 +58,65 @@ For all commits, please see the [2.0.0 release page](https://github.com/quilljs/ - Expose types for Quill options - Remove empty .css.js files generated by bundlers -# 2.0.0-rc.3 +[All changes](https://github.com/quilljs/quill/releases/tag/v2.0.0-rc.4) + +# v2.0.0-rc.3 (2024-03-16) - Fix `Quill#getSemanticHTML()` for list items - Remove unnecessary Firefox workaround - **Clipboard** Fix redundant newlines when pasting from external sources - Add `formats` option for specifying allowed formats -# 2.0.0-rc.2 +[All changes](https://github.com/quilljs/quill/releases/tag/v2.0.0-rc.3) + +# v2.0.0-rc.2 (2024-02-15) - Fix toolbar button state not updated in some cases - Narrower `BubbleTheme.tooltip` type - Fix `Selection#getBounds()` when starting range at end of text node - Improve compatibility with esbuild -# 2.0.0-rc.1 +[All changes](https://github.com/quilljs/quill/releases/tag/v2.0.0-rc.2) + +# v2.0.0-rc.1 (2024-02-12) + +- Remove unnecessary lodash usages. -- Remove unnecessary lodash usages +[All changes](https://github.com/quilljs/quill/releases/tag/v2.0.0-rc.1) -# 2.0.0-rc.0 +# v2.0.0-rc.0 (2024-02-03) -- **Clipboard** Convert newlines between inline elements to a space -- **Clipboard** Avoid generating unsupported formats on paste -- **Clipboard** Improve support for pasting from Google Docs and Microsoft Word -- **Clipboard** Ignore whitespace between pasted empty paragraphs -- **Syntax** Support highlight.js v10 and v11 +- **Clipboard** Convert newlines between inline elements to a space. +- **Clipboard** Avoid generating unsupported formats on paste. +- **Clipboard** Improve support for pasting from Google Docs and Microsoft Word. +- **Clipboard** Ignore whitespace between pasted empty paragraphs. +- **Syntax** Support highlight.js v10 and v11. -# 2.0.0-beta.2 +[All changes](https://github.com/quilljs/quill/releases/tag/v2.0.0-rc.0) -- Fix IME not working correctly in Safari -- **Clipboard** Support paste as plain text -- Fix `Quill.getText()` not respecting `length` parameter -- **History** Fix redo shortcut not working on Linux and Windows +# v2.0.0-beta.2 (2024-01-30) -# 2.0.0-beta.1 +- Fix IME not working correctly in Safari. +- **Clipboard** Support paste as plain text. +- Fix `Quill.getText()` not respecting `length` parameter. +- **History** Fix redo shortcut not working on Linux and Windows. -- Fix syntax label from "Javascript" to "JavaScript" -- Fix typing errors for emitter -- Inline SVG images for easier bundler setup -- Improve typing for Registry +[All changes](https://github.com/quilljs/quill/releases/tag/v2.0.0-beta.2) -# 2.0.0-beta.0 +# v2.0.0-beta.1 (2024-01-21) + +- Fix syntax label from "Javascript" to "JavaScript". +- Fix typing errors for emitter. +- Inline SVG images for easier bundler setup. +- Improve typing for Registry. + +[All changes](https://github.com/quilljs/quill/releases/tag/v2.0.0-beta.1) + +# v2.0.0-beta.0 (2023-12-08) In the upcoming 2.0 release, Quill has been significantly modernized. Leveraging the latest browser-supported APIs, Quill now delivers a more efficient and reliable editing experience. -### Major Improvements +## Major Improvements - Nested Quill support [#3590](https://github.com/quilljs/quill/pull/3590) - Improved IME and spell corrector support [#3807](https://github.com/quilljs/quill/pull/3807) @@ -106,16 +124,15 @@ In the upcoming 2.0 release, Quill has been significantly modernized. Leveraging - **History**: Record selection in history module [#3823](https://github.com/quilljs/quill/pull/3823) - Auto detect scrolling container [#3840](https://github.com/quilljs/quill/pull/3840) -### Performance Improvements +## Performance Improvements -Quill 2.0 includes many performance optimizations, -the most important of which is the improved rendering speed for large content. +Quill 2.0 includes many performance optimizations, the most important of which is the improved rendering speed for large content. - Improve inserting performance [#3815](https://github.com/quilljs/quill/pull/3815) - Avoid fetching selections when possible [#3538](https://github.com/quilljs/quill/pull/3538) - No need to setContents when container is empty [#3539](https://github.com/quilljs/quill/pull/3539) -### Code Modernization +## Code Modernization - Migrated to TypeScript - Provided official TypeScript declarations @@ -123,48 +140,32 @@ the most important of which is the improved rendering speed for large content. - Migrated to Playwright for E2E testing - Migrated website to Gatsby -### All Changes - -- Fix UI node interactions with line-level navigation shortcuts [#3898](https://github.com/quilljs/quill/pull/3898) -- Use `` instead of `` for Strike format [Commit](https://github.com/quilljs/quill/commit/16427683890374ed5acba96765757c44f5d5f2f5) -- **Keyboard**: Backspace will keep the format when previous line is empty [#3013](https://github.com/quilljs/quill/pull/3013) -- **Keyboard**: Discontinue inline formats on enter [#3428](https://github.com/quilljs/quill/pull/3428) -- Fix length mismatch when copying code [#3028](https://github.com/quilljs/quill/pull/3028) -- Keep list numbers continuous when separated by certain elements [#3086](https://github.com/quilljs/quill/pull/3086) -- Header/paragraph doesn't reset list numbering in Firefox [#3272](https://github.com/quilljs/quill/pull/3272) -- Fix `Quill#setContents()` on block embed ending [Commit](https://github.com/quilljs/quill/commit/84d22342d5e3eb33453d4601d2c7f55d26b47495) -- Track all implicit newline indexes and shift for delete [Commit](https://github.com/quilljs/quill/commit/cf101f681158a48b1b477c1544680cc9614425ae) -- **Clipboard**: Fix pasting in checklist does not preserve indentation [#3064](https://github.com/quilljs/quill/pull/3064) -- **Clipboard**: Prefer file over html when uploading [Commit](https://github.com/quilljs/quill/commit/e164f12603f646d919c853a7db02137399dbf696) -- **Clipboard**: Keep newlines in pre tag [#3687](https://github.com/quilljs/quill/pull/3687) -- **Clipboard**: Cut across lines shouldn't affect the formatting of the line above [#3286](https://github.com/quilljs/quill/pull/3286) -- getLeaf() should ignore non-leaf blots [#3489](https://github.com/quilljs/quill/pull/3489) -- **Selection**: Fix getBounds of empty text nodes [#3491](https://github.com/quilljs/quill/pull/3491) -- Keep cursor unlinked to avoid elements being pushed down inside [#3534](https://github.com/quilljs/quill/pull/3534) -- Fix combineFormats with multiple values repeated [#3336](https://github.com/quilljs/quill/issues/3336) -- Fix selection-change not firing on DOM mutations [#3591](https://github.com/quilljs/quill/pull/3591) -- Improve Tab handling in code block [#3593](https://github.com/quilljs/quill/pull/3593) -- Add SMS to link protocol whitelist [#2851](https://github.com/quilljs/quill/pull/2851) -- Fix embed inherits formats unexpectedly [#3783](https://github.com/quilljs/quill/pull/3783) -- Fix HTML and Delta not matching [#3784](https://github.com/quilljs/quill/pull/3784) -- Fix inline embed insertions with applyDelta() [#3793](https://github.com/quilljs/quill/pull/3793) -- Fix inserting newlines into formatted text [#3582](https://github.com/quilljs/quill/pull/3582) -- **History**: Pass source for history actions [#3514](https://github.com/quilljs/quill/pull/3514) -- **History**: Handle native undo/redo [#3115](https://github.com/quilljs/quill/pull/3115) -- Fix block embed attributor errors [#3825](https://github.com/quilljs/quill/pull/3825) -- **Clipboard**: getHTML() should include outer tag when range is entire line [#3850](https://github.com/quilljs/quill/pull/3850) - -# 1.3.6 +[All changes](https://github.com/quilljs/quill/releases/tag/v2.0.0-beta.0) + +# v1.3.7 (2019-09-09) + +Security related bug fixes. + +- https://app.snyk.io/vuln/npm:extend:20180424 +- https://www.npmjs.com/advisories/1039 + +Thank you [@danfuzz](https://github.com/danfuzz), [@danielw93](https://github.com/danielw93), [@jonathanlloyd](https://github.com/jonathanlloyd), and [@k-sai-kiranmayee](https://github.com/k-sai-kiranmayee) for your contributions to this release. + +[All changes](https://github.com/quilljs/quill/releases/tag/v1.3.7) + +# v1.3.6 (2018-03-12) - Make picker accessible [#1999](https://github.com/quilljs/quill/pull/1999) - Fix Japanese composition in Chrome 65 [#2009](https://github.com/quilljs/quill/issues/2009) Thanks to [@berylw](https://github.com/berylw) and [@erinsinger93](https://github.com/erinsinger93) for contributions to this release! -# 1.3.5 +[All changes](https://github.com/quilljs/quill/releases/tag/v1.3.6) + +# v1.3.5 (2018-01-22) - Fix indent preservation of a checked checklist item [#1818](https://github.com/quilljs/quill/issues/1818) -- Added the asterisk "\*" character as a shortcut to trigger bullet list formatting [#1819](https://github.com/quilljs/quill/pull/1819) + - added as a shortcut to trigger bullet list formatting [#1819](https://github.com/quilljs/quill/pull/1819) - Fix pasting text-align styles [#1873](https://github.com/quilljs/quill/issues/1873) - Fix cursor position after dangerouslyPasteHTML [#1886](https://github.com/quilljs/quill/issues/1886) - Fix value of history stack in text-change handler [#1906](https://github.com/quilljs/quill/pull/1906) @@ -172,14 +173,18 @@ Thanks to [@berylw](https://github.com/berylw) and [@erinsinger93](https://githu Thank you [@araruna](https://github.com/araruna), [@bryanrsmith](https://github.com/bryanrsmith), [@haugstrup](https://github.com/haugstrup), [@icylace](https://github.com/icylace), [@leimig](https://github.com/leimig), [@LFDM](https://github.com/LFDM), [@nikparo](https://github.com/nikparo), [@rafpaf](https://github.com/rafpaf) and [@vk2sky](https://github.com/vk2sky) for your contributions to this release. -# 1.3.4 +[All changes](https://github.com/quilljs/quill/releases/tag/v1.3.5) + +# v1.3.4 (2017-11-06) - Loosen dependency specification [#1748](https://github.com/quilljs/quill/issues/1748) - Loosen list autofill constraint [#1749](https://github.com/quilljs/quill/issues/1749) Thanks to [@danfuzz](https://github.com/danfuzz) and [@SoftVision-CarmenFat](https://github.com/SoftVision-CarmenFat) for contributions to this release! -# 1.3.3 +[All changes](https://github.com/quilljs/quill/releases/tag/v1.3.4) + +# v1.3.3 (2017-10-09) - Fix `getFormat` with no parameters while editor is not focused [#1548](https://github.com/quilljs/quill/issues/1548) - Remove automatic highlighting across embeds [#1691](https://github.com/quilljs/quill/issues/1691) @@ -189,7 +194,9 @@ Thanks to [@danfuzz](https://github.com/danfuzz) and [@SoftVision-CarmenFat](htt Thank you [@altschuler](https://github.com/altschuler), [@arrocke](https://github.com/arrocke), [@guillaumepotier](https://github.com/guillaumepotier), [@sferoze](https://github.com/sferoze) and [@volser](https://github.com/volser) for your contributions to this release. -# 1.3.2 +[All changes](https://github.com/quilljs/quill/releases/tag/v1.3.3) + +# v1.3.2 (2017-09-04) - Pasting into code block should always paste as code [#1624](https://github.com/quilljs/quill/issues/1624) - Fix removing embed selection when arrow keys change selection [#1633](https://github.com/quilljs/quill/issues/1633) @@ -199,14 +206,18 @@ Thank you [@altschuler](https://github.com/altschuler), [@arrocke](https://githu Thanks to [@abramz](https://github.com/abramz), [@amitm02](https://github.com/amitm02), [@eamodio](https://github.com/eamodio), [@HWliao](https://github.com/HWliao), [@mmitis](https://github.com/mmitis), [@nelsonpecora](https://github.com/nelsonpecora), [@nipunjain87](https://github.com/nipunjain87), and [@ValueBerry](https://github.com/ValueBerry) for contributions to this release! -# 1.3.1 +[All changes](https://github.com/quilljs/quill/releases/tag/v1.3.2) + +# v1.3.1 (2017-08-07) - Fix placeholder when emptying text [#1594](https://github.com/quilljs/quill/issues/1594) - Fix inserting newline after header [#1616](https://github.com/quilljs/quill/issues/1616) Thank you [@Natim](https://github.com/Natim) and [@stephenLYao](https://github.com/stephenLYao) for your contributions to this release. -# 1.3.0 +[All changes](https://github.com/quilljs/quill/releases/tag/v1.3.1) + +# v1.3.0 (2017-07-17) Add `matchVisual` [configuration](https://quilljs.com/docs/modules/clipboard/#configuration) to Clipboard. @@ -224,7 +235,9 @@ Add `matchVisual` [configuration](https://quilljs.com/docs/modules/clipboard/#co Thanks to [@alexkrolick](https://github.com/alexkrolick), [@amitm02](https://github.com/amitm02), [@Christilut](https://github.com/Christilut), [@danielschwartz](https://github.com/danielschwartz), [@emanuelbsilva](https://github.com/emanuelbsilva), [@ersommer](https://github.com/ersommer), [@fiurrr](https://github.com/fiurrr), [@jackmu95](https://github.com/jackmu95), [@jmzhang](https://github.com/jmzhang), [@mdpye](https://github.com/mdpye), [@ralrom](https://github.com/ralrom), [@sferoze](https://github.com/sferoze), [@simon-at-fugu](https://github.com/simon-at-fugu), and [@yogadzx](https://github.com/yogadzx) for contributions to this release! -# 1.2.6 +[All changes](https://github.com/quilljs/quill/releases/tag/v1.3.0) + +# v1.2.6 (2017-06-05) - Disable Grammarly by default [#574](https://github.com/quilljs/quill/issues/574) - Fix RTL list spacing [#1485](https://github.com/quilljs/quill/pull/1485) @@ -233,7 +246,9 @@ Thanks to [@alexkrolick](https://github.com/alexkrolick), [@amitm02](https://git Thank you [@amitm02](https://github.com/amitm02), [@benbro](https://github.com/benbro) [@nickbaum](https://github.com/nickbaum), [@stalniy](https://github.com/stalniy) and [@ygrishajev](https://github.com/ygrishajev) for your contributions to this release. -# 1.2.5 +[All changes](https://github.com/quilljs/quill/releases/tag/v1.2.6) + +# v1.2.5 (2017-05-29) - Fix cursor shifting to be exclusive of user cursor [#1367](https://github.com/quilljs/quill/issues/1367) - Fix iOS hover state on toolbar [#1388](https://github.com/quilljs/quill/issues/1388) @@ -245,7 +260,9 @@ Thank you [@amitm02](https://github.com/amitm02), [@benbro](https://github.com/b Thanks to [@aliciawood](https://github.com/aliciawood), [@benbro](https://github.com/benbro), [@denis-aes](https://github.com/denis-aes), [@despreju](https://github.com/despreju), [@GlenKPeterson](https://github.com/GlenKPeterson), [@haugstrup](https://github.com/haugstrup), [@jziggas](https://github.com/jziggas), [@RobAley](https://github.com/RobAley), [@sheley1998](https://github.com/sheley1998), [@silverprize](https://github.com/silverprize), and [@yairy](https://github.com/yairy) for contributions to this release! -# 1.2.4 +[All changes](https://github.com/quilljs/quill/releases/tag/v1.2.5) + +# v1.2.4 (2017-04-18) - Fix pasting nested list [#906](https://github.com/quilljs/quill/issues/906) - Fix delete key interaction at end of list [#1277](https://github.com/quilljs/quill/issues/1277) @@ -259,7 +276,9 @@ Thanks to [@aliciawood](https://github.com/aliciawood), [@benbro](https://github Thanks to [@bigggge](https://github.com/bigggge), [@CoenWarmer](https://github.com/CoenWarmer), [@cutteroid](https://github.com/cutteroid), [@jay-cox](https://github.com/jay-cox), [@kiewic](https://github.com/kiewic), [@kloots](https://github.com/kloots), [@MichaelTontchev](https://github.com/MichaelTontchev), [@montlebalm](https://github.com/montlebalm), [@RichardNeill](https://github.com/RichardNeill), and [@vasconita](https://github.com/vasconita) for your contributions to this release. -# 1.2.3 +[All changes](https://github.com/quilljs/quill/releases/tag/v1.2.4) + +# v1.2.3 (2017-03-29) - Fix scrolling when appending new lines [#1276](https://github.com/quilljs/quill/issues/1276) [#1361](https://github.com/quilljs/quill/issues/1361) - Fix binding to explicit shortcut key [#1365](https://github.com/quilljs/quill/issues/1365) @@ -267,13 +286,17 @@ Thanks to [@bigggge](https://github.com/bigggge), [@CoenWarmer](https://github.c Thank you [@artaommahe](https://github.com/artaommahe), [@c-w](https://github.com/c-w), [@EladBet](https://github.com/EladBet), [@emenoh](https://github.com/emenoh), and [@montlebalm](https://github.com/montlebalm) for contributions to this release! -# 1.2.2 +[All changes](https://github.com/quilljs/quill/releases/tag/v1.2.3) + +# v1.2.2 (2017-02-27) - Fix backspace/delete on Windows/Ubuntu [#1334](https://github.com/quilljs/quill/issues/1334) Thanks to [@dinusuresh](https://github.com/dinusuresh) for your contributions to this release. -# 1.2.1 +[All changes](https://github.com/quilljs/quill/releases/tag/v1.2.2) + +# v1.2.1 (2017-02-27) - Fix link removal on Snow theme [#1259](https://github.com/quilljs/quill/issues/1259) - Fix CMD+backspace on empty editor [#1319](https://github.com/quilljs/quill/issues/1319) @@ -281,7 +304,9 @@ Thanks to [@dinusuresh](https://github.com/dinusuresh) for your contributions to Thank you [@danielschwartz](https://github.com/@danielschwartz), [@JedWatson](https://github.com/@JedWatson), [@montlebalm](https://github.com/@montlebalm), and [@simi](https://github.com/@simi) for contributions to this release! -# 1.2.0 +[All changes](https://github.com/quilljs/quill/releases/tag/v1.2.1) + +# v1.2.0 (2017-01-21) Add concept of experimental APIs: they are APIs meant to try out support for use cases we would like to address, but gives flexibility to find the right API interface. As such they are not covered by Semantic Versioning. Several are added to start things off: `find`, `getIndex`, `getLeaf`, `getLine`, `getLines`. @@ -289,7 +314,9 @@ Add concept of experimental APIs: they are APIs meant to try out support for use Thanks to [@haugstrup](https://github.com/haugstrup) for your contributions to this release. -# 1.1.10 +[All changes](https://github.com/quilljs/quill/releases/tag/v1.2.0) + +# v1.1.10 (2017-01-16) - Preserve user selection on API changes [#1152](https://github.com/quilljs/quill/issues/1152) - Fix backspacing into emojis [#1230](https://github.com/quilljs/quill/issues/1230) @@ -298,17 +325,21 @@ Thanks to [@haugstrup](https://github.com/haugstrup) for your contributions to t Thank you [@benbro](https://github.com/benbro), [@haugstrup](https://github.com/haugstrup), [@peterweck](https://github.com/peterweck) and [@sbevels](https://github.com/sbevels) for contributions to this release! -# 1.1.9 +[All changes](https://github.com/quilljs/quill/releases/tag/v1.1.10) -- Flip tooltips when vertically out of bounds [#851](https://github.com/quilljs/quill/issues/851) -- Fix IE11 autolinking and control backspace [#1028](https://github.com/quilljs/quill/issues/1028) -- Only show tooltip when user initiates selection change [#1193](https://github.com/quilljs/quill/issues/1193) -- Fix bug needing to click twice on align [#1220](https://github.com/quilljs/quill/issues/1220) -- Fix cut + pasting videos [#1222](https://github.com/quilljs/quill/issues/1222) +# v1.1.9 (2017-01-02) -Thanks to [@amitguptagwl](https://github.com/amitguptagwl), [@antonlabunets](https://github.com/antonlabunets), [@benbro](https://github.com/benbro), [@eamodio](https://github.com/eamodio) and [@ygrishajev](https://github.com/ygrishajev) for your contributions to this release. +- Support pasting italics from Google Docs [#1185](https://github.com/quilljs/quill/issues/1185) +- Fix setting dropdown picker back to default [#1191](https://github.com/quilljs/quill/issues/1191) +- Fix code-block formatting on empty first line in Firefox [#1195](https://github.com/quilljs/quill/issues/1195) +- Prevent formatting via keyboard shortcuts when not whitelisted [#1197](https://github.com/quilljs/quill/issues/1197) +- Fix select-all copy and overwrite paste in Firefox [#1202](https://github.com/quilljs/quill/issues/1202) + +Thank you [@adfaure](https://github.com/adfaure), [@berndschimmer](https://github.com/berndschimmer), [@CoenWarmer](https://github.com/CoenWarmer), [@montlebalm](https://github.com/montlebalm), and [@TraceyYau](https://github.com/TraceyYau) for contributions to this release! + +[All changes](https://github.com/quilljs/quill/releases/tag/v1.1.9) -# 1.1.8 +# v1.1.8 (2016-12-23) - Support pasting italics from Google Docs [#1185](https://github.com/quilljs/quill/issues/1185) - Fix setting dropdown picker back to default [#1191](https://github.com/quilljs/quill/issues/1191) @@ -318,7 +349,9 @@ Thanks to [@amitguptagwl](https://github.com/amitguptagwl), [@antonlabunets](htt Thank you [@adfaure](https://github.com/adfaure), [@berndschimmer](https://github.com/berndschimmer), [@CoenWarmer](https://github.com/CoenWarmer), [@montlebalm](https://github.com/montlebalm), and [@TraceyYau](https://github.com/TraceyYau) for contributions to this release! -# 1.1.7 +[All changes](https://github.com/quilljs/quill/releases/tag/v1.1.8) + +# v1.1.7 (2016-12-13) - Fix dropdown values reverting to default [#901](https://github.com/quilljs/quill/issues/901) - Add config to prevent scroll jumping on paste [#1082](https://github.com/quilljs/quill/issues/1082) @@ -329,7 +362,9 @@ Thank you [@adfaure](https://github.com/adfaure), [@berndschimmer](https://githu Thanks to [@cutteroid](https://github.com/cutteroid), [@houxg](https://github.com/houxg), [@jasongisstl](https://github.com/jasongisstl), [@nikparo](https://github.com/nikparo), [@sbevels](https://github.com/sbevels), and [sferoze](https://github.com/sferoze) for your contributions to this release. -# 1.1.6 +[All changes](https://github.com/quilljs/quill/releases/tag/v1.1.7) + +# v1.1.6 (2016-12-06) ### Features @@ -342,7 +377,9 @@ Checklists [#759](https://github.com/quilljs/quill/issues/759) support has been Thank you [@jgmediadesign](https://github.com/jgmediadesign) and [@julienbmobile](https://github.com/julienbmobile) for contributions to this release! -# 1.1.5 +[All changes](https://github.com/quilljs/quill/releases/tag/v1.1.6) + +# v1.1.5 (2016-11-07) - Remove unnecessary type attribute in documentation [#1087](https://github.com/quilljs/quill/pull/1087) - Fix chrome 52+ input file label open slow [#1090](https://github.com/quilljs/quill/pull/1090) @@ -350,22 +387,28 @@ Thank you [@jgmediadesign](https://github.com/jgmediadesign) and [@julienbmobile Thank you [@jleen](https://github.com/jleen), [@kaelig](https://github.com/kaelig), and [@YouHan26](https://github.com/YouHan26) for your contributions to this release. -# 1.1.3 +[All changes](https://github.com/quilljs/quill/releases/tag/v1.1.5) + +# v1.1.3 (2016-10-24) - Update quill-delta [delta#2](https://github.com/quilljs/delta/issues/2) - Fix link creation [#1073](https://github.com/quilljs/quill/issues/1073) Thanks to [@eamodio](https://github.com/eamodio) and [@metsavir](https://github.com/metsavir) for contributions to this release! -# 1.1.2 +[All changes](https://github.com/quilljs/quill/releases/tag/v1.1.3) + +# v1.1.2 (2016-10-24) - Fix setContents on already formatted text [#1065](https://github.com/quilljs/quill/issues/1065) - Fix regression [#1067](https://github.com/quilljs/quill/issues/1067) - Improve documentation [#1069](https://github.com/quilljs/quill/pull/1069) [#1070](https://github.com/quilljs/quill/pull/1070) -Thank you [@benbro](https://github.com/benbro), [@derickruiz](https://github.com/derickruiz), [@eamodio](https://github.com/eamodio), [@hallaathrad](https://github.com/hallaathrad), and [@philly385](https://github.com/philly385) for your contributions to this release. +Thank you [benbro](https://github.com/benbro), [derickruiz](https://github.com/derickruiz), [eamodio](https://github.com/eamodio), [hallaathrad](https://github.com/hallaathrad), and [philly385](https://github.com/philly385) for your contributions to this release. -# 1.1.1 +[All changes](https://github.com/quilljs/quill/releases/tag/v1.1.2) + +# v1.1.1 (2016-10-21) ### Bug fixes @@ -379,7 +422,9 @@ Thanks to [@artaommahe](https://github.com/artaommahe), [@benbro](https://github Special thanks to [@DadaMonad](https://github.com/DadaMonad) for contributions on [fast-diff](https://github.com/jhchen/fast-diff) that enabled the [#746](https://github.com/quilljs/quill/issues/746) fix. -# 1.1.0 +[All changes](https://github.com/quilljs/quill/releases/tag/v1.1.1) + +# v1.1.0 (2016-10-17) ### Additions @@ -401,7 +446,9 @@ So a `strict` configuration option has been added. It is true by default so the Thank you [@benbro](https://github.com/benbro), [@cutteroid](https://github.com/cutteroid), [@evansolomon](https://github.com/evansolomon), [@felipeochoa](https://github.com/felipeochoa), [jackmu95](https://github.com/jackmu95), [@joedynamite](https://github.com/joedynamite), [@lance13c](https://github.com/lance13c), [@leebenson](https://github.com/leebenson), [@maartenvanvliet](https://github.com/maartenvanvliet), [@sarbbottam](https://github.com/sarbbottam), [@viljark](https://github.com/viljark), [@w00fz](https://github.com/w00fz) for their contributions to this release. -# 1.0.6 +[All changes](https://github.com/quilljs/quill/releases/tag/v1.1.0) + +# v1.0.6 (2016-09-30) Documentation clarifications and bug fixes. @@ -412,11 +459,9 @@ Documentation clarifications and bug fixes. Thanks to [@dropfen](https://github.com/dropfen), [@evansolomon](https://github.com/evansolomon), [@hallaathrad](https://github.com/hallaathrad), [@janyksteenbeek](https://github.com/janyksteenbeek), [@jackmu95](https://github.com/jackmu95), [@marktron](https://github.com/marktron), [@mcat-ee](https://github.com/mcat-ee), [@unhammer](https://github.com/unhammer), and [@zeke](https://github.com/zeke) for contributions to this release! -# 1.0.5 +[All changes](https://github.com/quilljs/quill/releases/tag/v1.0.6) -Became 1.0.6 with a build/deploy fix. - -# 1.0.4 +# v1.0.4 (2016-09-19) - Fix bubble theme defaults [#963](https://github.com/quilljs/quill/issues/963) - Fix browsers modifying inline nesting order [#971](https://github.com/quilljs/quill/issues/971) @@ -426,28 +471,38 @@ Became 1.0.6 with a build/deploy fix. Thank you [jackmu95](https://github.com/jackmu95), [kristeehan](https://github.com/kristeehan), [ruffle1986](https://github.com/ruffle1986), [sergop321](https://github.com/sergop321), [sferoze](https://github.com/sferoze), and [sijad](https://github.com/sijad) for contributions to this release. -# 1.0.3 +[All changes](https://github.com/quilljs/quill/releases/tag/v1.0.4) + +# v1.0.3 (2016-09-07) - Fix [#928](https://github.com/quilljs/quill/issues/928) Thank you [@scottmessinger](https://github.com/scottmessinger) for the bug report. -# 1.0.2 +[All changes](https://github.com/quilljs/quill/releases/tag/v1.0.3) + +# v1.0.2 (2016-09-07) - Fix building quill.core.js [docs #11](https://github.com/quilljs/quilljs.github.io/issues/11) - Fix regression of [#793](https://github.com/quilljs/quill/issues/793) Thanks to [@eamodio](https://github.com/eamodio) and [@neandrake](https://github.com/neandrake) for their contributions to this release. -# 1.0.0 +[All changes](https://github.com/quilljs/quill/releases/tag/v1.0.2) + +# v1.0.0 (2016-09-06) Quill 1.0 is released! Read the [official announcement](https://quilljs.com/blog/announcing-quill-1-0/). -# 1.0.0-rc.4 +[All changes](https://github.com/quilljs/quill/releases/tag/v1.0.0) + +# v1.0.0-rc.4 (2016-08-31) Fix one important bug [fdd920](https://github.com/quilljs/quill/commit/fdd920250c05403ed9e5d6d86826a00167ba0b09) -# 1.0.0-rc.3 +[All changes](https://github.com/quilljs/quill/releases/tag/v1.0.0-rc.4) + +# v1.0.0-rc.3 (2016-08-29) A few bug fixes, one with with possibly significant implications. See the [issue #889](https://github.com/quilljs/quill/issues/889) and [commit fix](https://github.com/quilljs/quill/commit/be24c62a6234818548658fcb5e1935a0c07b4eb7) for more details. @@ -462,7 +517,9 @@ A few bug fixes, one with with possibly significant implications. See the [issue Thank you [@benbro](https://github.com/benbro), [@cgilboy](https://github.com/cgilboy), [@cutteroid](https://github.com/cutteroid), and [@routman](https://github.com/routman) for contributions to this release! -# 1.0.0-rc.2 +[All changes](https://github.com/quilljs/quill/releases/tag/v1.0.0-rc.3) + +# v1.0.0-rc.2 (2016-08-23) A few bug fixes, including one significant [one](https://github.com/quilljs/quill/issues/883) @@ -474,7 +531,9 @@ A few bug fixes, including one significant [one](https://github.com/quilljs/quil Thanks to [benbro](https://github.com/benbro), [cutteroid](https://github.com/cutteroid), and [CapTec](https://github.com/CapTec) for their contributions to this release. -# 1.0.0-rc.1 +[All changes](https://github.com/quilljs/quill/releases/tag/v1.0.0-rc.2) + +# v1.0.0-rc.1 (2016-08-23) A few bug fixes and performance improvements. @@ -493,7 +552,9 @@ A few bug fixes and performance improvements. Thank you [@benbro](https://github.com/benbro), [@fernandogmar](https://github.com/fernandogmar), [@sachinrekhi](https://github.com/sachinrekhi), [@sferoze](https://github.com/sferoze), and [@stalniy](https://github.com/stalniy) for contributions to this release! -# 1.0.0-rc.0 +[All changes](https://github.com/quilljs/quill/releases/tag/v1.0.0-rc.1) + +# v1.0.0-rc.0 (2016-08-18) Take a look at [Quill 1.0 Release Candidate](https://quilljs.com/blog/quill-1-0-release-candidate-released/) for more details. @@ -545,7 +606,9 @@ A huge thank you to all contributors to through the beta! Special thanks goes to - [@u9520107](https://github.com/u9520107) - [@WriterStat](https://github.com/WriterStat) -# 1.0.0-beta.11 +[All changes](https://github.com/quilljs/quill/releases/tag/v1.0.0-rc.0) + +# v1.0.0-beta.11 (2016-08-03) Fixed some regressive bugs from previous release. @@ -553,11 +616,13 @@ Fixed some regressive bugs from previous release. - Fix activating more than one format before typing [#841](https://github.com/quilljs/quill/issues/841) - Run default matchers before before user defined ones [#843](https://github.com/quilljs/quill/issues/843) -- Fix merging theme configurations [#844](https://github.com/quilljs/quill/issues/844), [#845](845) +- Fix merging theme configurations [#844](https://github.com/quilljs/quill/issues/844), [#845](https://github.com/quilljs/quill/issues/845) Thanks [benbro](https://github.com/benbro), [jackmu95](https://github.com/jackmu95), and [george-norris-salesforce](https://github.com/george-norris-salesforce) for the bug reports. -# 1.0.0-beta.10 +[All changes](https://github.com/quilljs/quill/releases/tag/v1.0.0-beta.11) + +# v1.0.0-beta.10 (2016-08-03) Lots of bug fixes and performance improvements. @@ -586,7 +651,9 @@ Lots of bug fixes and performance improvements. Thanks to [benbro](https://github.com/benbro), [clemmy](https://github.com/clemmy), [crisbeto](https://github.com/crisbeto), [cutteroid](https://github.com/cutteroid), [jackmu95](https://github.com/jackmu95), [kylebragger](https://github.com/kylebragger), [sachinrekhi](https://github.com/sachinrekhi), [stalniy](https://github.com/stalniy), and [tOgg1](https://github.com/tOgg1) for their contributions to this release. -# 1.0.0-beta.9 +[All changes](https://github.com/quilljs/quill/releases/tag/v1.0.0-beta.10) + +# v1.0.0-beta.9 (2016-07-19) Potentially the final beta before a release candidate, if no major issues are discovered. @@ -611,7 +678,9 @@ Potentially the final beta before a release candidate, if no major issues are di Thank you [@benbro](https://github.com/benbro), [@KameSama](https://github.com/KameSama), and [@sachinrekhi](https://github.com/sachinrekhi) for contributions to this release! -# 1.0.0-beta.8 +[All changes](https://github.com/quilljs/quill/releases/tag/v1.0.0-beta.9) + +# v1.0.0-beta.8 (2016-07-08) Weekly beta preview release. The editor is almost ready for release candidacy but a couple cycles will be spent on the Snow and Bubble interfaces. @@ -637,15 +706,13 @@ Image insertion is being reworked in the provided Snow and Bubble themes. The ol - Fix align button active state [#780](https://github.com/quilljs/quill/issues/780) - Fix format text on falsy value [#782](https://github.com/quilljs/quill/issues/782) - Use native cut [#785](https://github.com/quilljs/quill/issues/785) -- Fix initializing document where last line is formatted [#786](https://github.com/quilljs/quill/issues/786) +- Fix inializing document where last line is formatted [#786](https://github.com/quilljs/quill/issues/786) Thanks to [benbro](https://github.com/benbro), [bram2w](https://github.com/bram2w), [clemmy](https://github.com/clemmy), [DadaMonad](https://github.com/DadaMonad), [ersommer](https://github.com/ersommer), [michaeljosephrosenthal](https://github.com/michaeljosephrosenthal), [mmorearty](https://github.com/mmorearty), [mshamaiev-intel471](https://github.com/mshamaiev-intel471), and [sachinrekhi](https://github.com/sachinrekhi) for their contributions to this release. -# 1.0.0-beta.7 - -Became 1.0.0-beta.8 with a fix. +[All changes](https://github.com/quilljs/quill/releases/tag/v1.0.0-beta.8) -# 1.0.0-beta.6 +# v1.0.0-beta.6 (2016-06-21) Weekly beta preview release. @@ -668,7 +735,9 @@ Weekly beta preview release. Thank you [abejdaniels](https://github.com/abejdaniels), [benbro](https://github.com/benbro), [davelozier](https://github.com/davelozier), [fernandogmar](https://github.com/fernandogmar), [KameSama](https://github.com/KameSama), and [WriterStat](https://github.com/WriterStat) for contributions to this release. -# 1.0.0-beta.5 +[All changes](https://github.com/quilljs/quill/releases/tag/v1.0.0-beta.6) + +# v1.0.0-beta.5 (2016-06-14) Weekly beta preview release. @@ -686,7 +755,9 @@ Weekly beta preview release. Thanks to [benbro](https://github.com/benbro), [lukechapman](https://github.com/lukechapman), [sachinrekhi](https://github.com/sachinrekhi), and [saw](https://github.com/saw) for their contributions to this release. -# 1.0.0-beta.4 +[All changes](https://github.com/quilljs/quill/releases/tag/v1.0.0-beta.5) + +# v1.0.0-beta.4 (2016-06-03) Weekly beta preview release. @@ -713,6 +784,10 @@ Weekly beta preview release. Thank you [@benbro](https://github.com/benbro), [@brynjagr](https://github.com/brynjagr), and [@sachinrekhi](https://github.com/sachinrekhi) for contributions to this release. +[All changes](https://github.com/quilljs/quill/releases/tag/v1.0.0-beta.4) + +# v1.0.0-beta.3 (2016-05-25) + # 1.0.0-beta.3 Weekly beta preview release. @@ -742,7 +817,9 @@ Weekly beta preview release. Thanks to [@benbro](https://github.com/benbro), [@Cinamonas](https://github.com/Cinamonas), [@emanuelbsilva](https://github.com/emanuelbsilva), [@jasonmng](https://github.com/jasonmng), [@jonnolen](https://github.com/jonnolen), [@LucVanPelt](https://github.com/LucVanPelt), [@sachinrekhi](https://github.com/sachinrekhi), [@sagacitysite](https://github.com/sagacitysite), [@WriterStat](https://github.com/WriterStat) for their contributions to this release. -# 1.0.0-beta.2 +[All changes](https://github.com/quilljs/quill/releases/tag/v1.0.0-beta.3) + +# v1.0.0-beta.2 (2016-05-15) Weekly beta preview release. Major emphasis on keyboard API and customization. @@ -764,7 +841,7 @@ Weekly beta preview release. Major emphasis on keyboard API and customization. - Allow native handling of backspace [#473](https://github.com/quilljs/quill/issues/473) [#548](https://github.com/quilljs/quill/issues/548) [#565](https://github.com/quilljs/quill/issues/565) - removeFormat() removes last line block formats [#649](https://github.com/quilljs/quill/issues/649) -- Fix text direction icon direction [#654](https://github.com/quilljs/quill/issues/654) +- Fix text direction icon directon [#654](https://github.com/quilljs/quill/issues/654) - Fix text insertion into root scroll [#655](https://github.com/quilljs/quill/issues/655) - Fix focusing on placeholder text in FF [#656](https://github.com/quilljs/quill/issues/656) - Hide placeholder on formatted line [#657](https://github.com/quilljs/quill/issues/657) @@ -772,7 +849,9 @@ Weekly beta preview release. Major emphasis on keyboard API and customization. Thanks to [@anovi](https://github.com/anovi), [@benbro](https://github.com/benbro), [@jbrowning](https://github.com/jbrowning), [@kei-ito](https://github.com/kei-ito), [@quentez](https://github.com/quentez), [@u9520107](https://github.com/u9520107) for their contributions to this release! -# 1.0.0-beta.1 +[All changes](https://github.com/quilljs/quill/releases/tag/v1.0.0-beta.2) + +# v1.0.0-beta.1 (2016-05-10) Weekly beta preview release. @@ -799,46 +878,10 @@ Weekly beta preview release. Thanks to [@benbro](https://github.com/benbro) for the bug reports for this release! -# 1.0.0-beta.0 - -Please see the [Upgrading to 1.0](http://beta.quilljs.com/guides/upgrading-to-1-0/) guide. - -# 0.20.1 - -Patch release for everything prior to Parchment's integration into Quill. - -### Features - -- API for hotkey removal [#110](https://github.com/quilljs/quill/issues/110), [#453](https://github.com/quilljs/quill/pull/453) - -### Bug Fixes - -- Editor jumps to top when clicking formatting buttons [#288](https://github.com/quilljs/quill/issues/288) -- Editor does not preserve bold text when pasted from itself [#306](https://github.com/quilljs/quill/issues/306) -- Focus issues when scrolled down in IE10+ [#415](https://github.com/quilljs/quill/issues/415) -- Error if keyboard shortcut used for unavailable format [#432](https://github.com/quilljs/quill/issues/432) -- Scrolls to cursor if not visible after enter/deletion/paste [#433](https://github.com/quilljs/quill/issues/433) +[All changes](https://github.com/quilljs/quill/releases/tag/v1.0.0-beta.1) -Thanks to [@devtimi](https://github.com/devtimi), [@emannes](https://github.com/emannes), [@ivan-i](https://github.com/ivan-i), [@magus](https://github.com/magus), [@Nick-The-Uncharted](https://github.com/Nick-The-Uncharted), [@rlivsey](https://github.com/rlivsey), [@thomsbg](https://github.com/thomsbg), [@wallylawless](https://github.com/wallylawless) for their bug reports and pull requests! +# v1.0.0-beta.0 (2016-05-04) -# 0.20.0 - -### Breaking Changes - -- `getBounds` now returns `null` instead of throwing an error [#412](https://github.com/quilljs/quill/pull/412) - -### Features - -- Allow `Document` module to be `Quill.require`'d [#400](https://github.com/quilljs/quill/pull/400) -- Paste manager can optionally accept a custom conversion function [#401](https://github.com/quilljs/quill/pull/401) -- Undo manager can optionally only affect user initiated changes [#413](https://github.com/quilljs/quill/pull/413) - -### Bug Fixes - -- Retain formats between lines [#403](https://github.com/quilljs/quill/pull/403) -- Fix bug that allows nested format tags [#406](https://github.com/quilljs/quill/pull/406) -- Flatten nested list instead of truncating on paste [#421](https://github.com/quilljs/quill/issues/421) -- Fix handling Chrome's usage of font-weight instead of tags [#423](https://github.com/quilljs/quill/issues/423) -- Fix bug that allows nested parent tags [#426](https://github.com/quilljs/quill/pull/426) +Please see the [Upgrading to 1.0](http://beta.quilljs.com/guides/upgrading-to-1-0/) guide. -Thank you [@thomsbg](https://github.com/thomsbg), [@yyjhao](https://github.com/yyjhao), [@willrowe](https://github.com/willrowe), [@hryanjones](https://github.com/hryanjones), [@nickretallack](https://github.com/nickretallack) for your contributions to this release! +[All changes](https://github.com/quilljs/quill/releases/tag/v1.0.0-beta.0) diff --git a/README.md b/README.md index 10f4a13566..da23577082 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,7 @@ Instantiate a new Quill object with a css selector for the div that should becom ```html @@ -50,7 +50,7 @@ Instantiate a new Quill object with a css selector for the div that should becom - + + - + ``` ## Community diff --git a/package-lock.json b/package-lock.json index 04d72faef2..f5ede60f74 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,17 +1,18 @@ { "name": "quill-monorepo", - "version": "2.0.1", + "version": "2.0.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "quill-monorepo", - "version": "2.0.1", + "version": "2.0.2", "license": "BSD-3-Clause", "workspaces": [ "packages/*" ], "devDependencies": { + "execa": "^9.0.2", "npm-run-all": "^4.1.5" }, "engines": { @@ -5702,12 +5703,30 @@ "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.7.2.tgz", "integrity": "sha512-RbhOOTCNoCrbfkRyoXODZp75MlpiHMgbE5MEBZAnnnLyQNgrigEj4p0lzsMDyc1zVsJDLrivB58tgg3emX0eEA==" }, + "node_modules/@sec-ant/readable-stream": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz", + "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==", + "dev": true + }, "node_modules/@sinclair/typebox": { "version": "0.27.8", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", "dev": true }, + "node_modules/@sindresorhus/merge-streams": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz", + "integrity": "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@stitches/core": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/@stitches/core/-/core-1.2.8.tgz", @@ -10245,23 +10264,26 @@ } }, "node_modules/execa": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", - "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/execa/-/execa-9.0.2.tgz", + "integrity": "sha512-oO281GF7ksH/Ogv1xyDf1prvFta/6/XkGKxRUvA3IB2MU1rCJGlFs86HRZhdooow1ISkR0Np0rOxUCIJVw36Rg==", "dev": true, "dependencies": { + "@sindresorhus/merge-streams": "^4.0.0", "cross-spawn": "^7.0.3", - "get-stream": "^8.0.1", - "human-signals": "^5.0.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", + "figures": "^6.1.0", + "get-stream": "^9.0.0", + "human-signals": "^7.0.0", + "is-plain-obj": "^4.1.0", + "is-stream": "^4.0.1", + "npm-run-path": "^5.2.0", + "pretty-ms": "^9.0.0", "signal-exit": "^4.1.0", - "strip-final-newline": "^3.0.0" + "strip-final-newline": "^4.0.0", + "yoctocolors": "^2.0.0" }, "engines": { - "node": ">=16.17" + "node": ">=18" }, "funding": { "url": "https://github.com/sindresorhus/execa?sponsor=1" @@ -10460,6 +10482,21 @@ "node": ">=0.8.0" } }, + "node_modules/figures": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-6.1.0.tgz", + "integrity": "sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==", + "dev": true, + "dependencies": { + "is-unicode-supported": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -10816,12 +10853,16 @@ } }, "node_modules/get-stream": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", - "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz", + "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==", "dev": true, + "dependencies": { + "@sec-ant/readable-stream": "^0.4.1", + "is-stream": "^4.0.1" + }, "engines": { - "node": ">=16" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -12144,12 +12185,12 @@ } }, "node_modules/human-signals": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", - "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-7.0.0.tgz", + "integrity": "sha512-74kytxOUSvNbjrT9KisAbaTZ/eJwD/LrbM/kh5j0IhPuJzwuA19dWvniFGwBzN9rVjg+O/e+F310PjObDXS+9Q==", "dev": true, "engines": { - "node": ">=16.17.0" + "node": ">=18.18.0" } }, "node_modules/iconv-lite": { @@ -12745,12 +12786,12 @@ } }, "node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz", + "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==", "dev": true, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -12798,6 +12839,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-unicode-supported": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.0.0.tgz", + "integrity": "sha512-FRdAyx5lusK1iHG0TWpVtk9+1i+GjrzRffhDg4ovQ7mcidMQ6mj+MhKPmvh7Xwyv5gIS06ns49CA7Sqg7lC22Q==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-weakmap": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", @@ -14829,6 +14882,18 @@ "node": ">=4" } }, + "node_modules/parse-ms": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-4.0.0.tgz", + "integrity": "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/parse5": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", @@ -15336,6 +15401,21 @@ "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", "dev": true }, + "node_modules/pretty-ms": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-9.0.0.tgz", + "integrity": "sha512-E9e9HJ9R9NasGOgPaPE8VMeiPKAyWR5jcFpNnwIejslIhWqdqOrb2wShBsncMPUb+BcCd2OPYfh7p2W6oemTng==", + "dev": true, + "dependencies": { + "parse-ms": "^4.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/prism-react-renderer": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-2.3.1.tgz", @@ -16910,12 +16990,12 @@ } }, "node_modules/strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-4.0.0.tgz", + "integrity": "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==", "dev": true, "engines": { - "node": ">=12" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -18280,6 +18360,133 @@ } } }, + "node_modules/vitest/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/vitest/node_modules/execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/vitest/node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "dev": true, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/vitest/node_modules/human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", + "dev": true, + "engines": { + "node": ">=16.17.0" + } + }, + "node_modules/vitest/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/vitest/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/vitest/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/vitest/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/vitest/node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/vitest/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/w3c-keyname": { "version": "2.2.8", "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz", @@ -19001,6 +19208,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/yoctocolors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.0.0.tgz", + "integrity": "sha512-esbDnt0Z1zI1KgvOZU90hJbL6BkoUbrP9yy7ArNZ6TmxBxydMJTYMf9FZjmwwcA8ZgEQzriQ3hwZ0NYXhlFo8Q==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/zwitch": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", @@ -19011,7 +19230,7 @@ } }, "packages/quill": { - "version": "2.0.1", + "version": "2.0.2", "license": "BSD-3-Clause", "dependencies": { "eventemitter3": "^5.0.1", @@ -19070,7 +19289,7 @@ } }, "packages/website": { - "version": "2.0.1", + "version": "2.0.2", "license": "BSD-3-Clause", "dependencies": { "@codesandbox/sandpack-react": "^2.11.3", diff --git a/package.json b/package.json index 0f60ef8229..67166ea9e2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "quill-monorepo", - "version": "2.0.1", + "version": "2.0.2", "description": "Quill development environment", "private": true, "author": "Jason Chen ", @@ -45,6 +45,7 @@ }, "engineStrict": true, "devDependencies": { + "execa": "^9.0.2", "npm-run-all": "^4.1.5" } } diff --git a/packages/quill/README.md b/packages/quill/README.md index fe0b340540..10c7fae1c3 100644 --- a/packages/quill/README.md +++ b/packages/quill/README.md @@ -1,41 +1,3 @@ -Note: This branch and README covers the upcoming 2.0 release. View [1.x docs here](https://github.com/quilljs/quill/tree/1.3.6). +# Quill -

- Quill Rich Text Editor -

-

- Quill Logo -

-

- Documentation - • - Development - • - Contributing - • - Interactive Playground -

-

- - Build Status - - - Version - - - Downloads - -

- -[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! - -## Community - -Get help or stay up to date. - -- [Contribute](https://github.com/quilljs/quill/blob/main/.github/CONTRIBUTING.md) on [Issues](https://github.com/quilljs/quill/issues) -- Follow [@jhchen](https://twitter.com/jhchen) and [@quilljs](https://twitter.com/quilljs) on Twitter -- Ask questions on [Stack Overflow](https://stackoverflow.com/questions/tagged/quill) -- If privacy is required, email support@quilljs.com +This is the main package of Quill. diff --git a/packages/quill/package.json b/packages/quill/package.json index 7075a86749..59ca839d31 100644 --- a/packages/quill/package.json +++ b/packages/quill/package.json @@ -1,6 +1,6 @@ { "name": "quill", - "version": "2.0.1", + "version": "2.0.2", "description": "Your powerful, rich text editor", "author": "Jason Chen ", "homepage": "https://quilljs.com", diff --git a/packages/quill/src/core.ts b/packages/quill/src/core.ts index cdf5724768..5b8946ad5f 100644 --- a/packages/quill/src/core.ts +++ b/packages/quill/src/core.ts @@ -24,6 +24,7 @@ import Delta, { Op, OpIterator, AttributeMap } from 'quill-delta'; import Input from './modules/input.js'; import UINode from './modules/uiNode.js'; +export { default as Module } from './core/module.js'; export { Delta, Op, OpIterator, AttributeMap, Parchment, Range }; export type { Bounds, diff --git a/packages/quill/src/core/module.ts b/packages/quill/src/core/module.ts index fca5b385df..feeac58ad7 100644 --- a/packages/quill/src/core/module.ts +++ b/packages/quill/src/core/module.ts @@ -4,7 +4,7 @@ abstract class Module { static DEFAULTS = {}; constructor( - protected quill: Quill, + public quill: Quill, protected options: Partial = {}, ) {} } diff --git a/packages/quill/src/core/quill.ts b/packages/quill/src/core/quill.ts index 94787ecf84..dae5267bcb 100644 --- a/packages/quill/src/core/quill.ts +++ b/packages/quill/src/core/quill.ts @@ -122,27 +122,41 @@ class Quill { } static register( - path: - | string - | Parchment.BlotConstructor - | Parchment.Attributor - | Record, - target?: Parchment.BlotConstructor | Parchment.Attributor | boolean, - overwrite = false, - ) { - if (typeof path !== 'string') { - const name = 'attrName' in path ? path.attrName : path.blotName; + targets: Record< + string, + | Parchment.RegistryDefinition + | Record // any objects + | Theme + | Module + | Function // ES5 constructors + >, + overwrite?: boolean, + ): void; + static register( + target: Parchment.RegistryDefinition, + overwrite?: boolean, + ): void; + static register(path: string, target: any, overwrite?: boolean): void; + static register(...args: any[]): void { + if (typeof args[0] !== 'string') { + const target = args[0]; + const overwrite = !!args[1]; + + const name = 'attrName' in target ? target.attrName : target.blotName; if (typeof name === 'string') { + // Shortcut for formats: // register(Blot | Attributor, overwrite) - // @ts-expect-error - this.register(`formats/${name}`, path, target); + this.register(`formats/${name}`, target, overwrite); } else { - Object.keys(path).forEach((key) => { - // @ts-expect-error - this.register(key, path[key], target); + Object.keys(target).forEach((key) => { + this.register(key, target[key], overwrite); }); } } else { + const path = args[0]; + const target = args[1]; + const overwrite = !!args[2]; + if (this.imports[path] != null && !overwrite) { debug.warn(`Overwriting ${path} with`, target); } @@ -151,14 +165,11 @@ class Quill { (path.startsWith('blots/') || path.startsWith('formats/')) && target && typeof target !== 'boolean' && - // @ts-expect-error target.blotName !== 'abstract' ) { globalRegistry.register(target); } - // @ts-expect-error if (typeof target.register === 'function') { - // @ts-expect-error target.register(globalRegistry); } } diff --git a/packages/quill/src/modules/keyboard.ts b/packages/quill/src/modules/keyboard.ts index 3301046410..7941b370f5 100644 --- a/packages/quill/src/modules/keyboard.ts +++ b/packages/quill/src/modules/keyboard.ts @@ -173,6 +173,13 @@ class Keyboard extends Module { listen() { this.quill.root.addEventListener('keydown', (evt) => { if (evt.defaultPrevented || evt.isComposing) return; + + // evt.isComposing is false when pressing Enter/Backspace when composing in Safari + // https://bugs.webkit.org/show_bug.cgi?id=165004 + const isComposing = + evt.keyCode === 229 && (evt.key === 'Enter' || evt.key === 'Backspace'); + if (isComposing) return; + const bindings = (this.bindings[evt.key] || []).concat( this.bindings[evt.which] || [], ); diff --git a/packages/quill/src/modules/syntax.ts b/packages/quill/src/modules/syntax.ts index ed8214e81f..da99fdc41d 100644 --- a/packages/quill/src/modules/syntax.ts +++ b/packages/quill/src/modules/syntax.ts @@ -80,7 +80,7 @@ class SyntaxCodeBlock extends CodeBlock { } } - replaceWith(name: string, value: unknown) { + replaceWith(name: string | Blot, value?: any) { this.formatAt(0, this.length(), CodeToken.blotName, false); return super.replaceWith(name, value); } @@ -180,7 +180,7 @@ class SyntaxCodeBlockContainer extends CodeBlockContainer { } } } -// @ts-expect-error + SyntaxCodeBlockContainer.allowedChildren = [SyntaxCodeBlock]; SyntaxCodeBlock.requiredContainer = SyntaxCodeBlockContainer; SyntaxCodeBlock.allowedChildren = [CodeToken, CursorBlot, TextBlot, BreakBlot]; @@ -206,7 +206,6 @@ class Syntax extends Module { static register() { Quill.register(CodeToken, true); - // @ts-expect-error Quill.register(SyntaxCodeBlock, true); Quill.register(SyntaxCodeBlockContainer, true); } diff --git a/packages/quill/src/modules/toolbar.ts b/packages/quill/src/modules/toolbar.ts index 411438e7c7..a178d25936 100644 --- a/packages/quill/src/modules/toolbar.ts +++ b/packages/quill/src/modules/toolbar.ts @@ -7,7 +7,7 @@ import type { Range } from '../core/selection.js'; const debug = logger('quill:toolbar'); -type Handler = (value: any) => void; +type Handler = (this: Toolbar, value: any) => void; export type ToolbarConfig = Array< string[] | Array> @@ -262,7 +262,7 @@ Toolbar.DEFAULTS = { } }); } else { - this.quill.removeFormat(range, Quill.sources.USER); + this.quill.removeFormat(range.index, range.length, Quill.sources.USER); } }, direction(value) { @@ -276,7 +276,9 @@ Toolbar.DEFAULTS = { }, indent(value) { const range = this.quill.getSelection(); + // @ts-expect-error const formats = this.quill.getFormat(range); + // @ts-expect-error const indent = parseInt(formats.indent || 0, 10); if (value === '+1' || value === '-1') { let modifier = value === '+1' ? 1 : -1; @@ -292,6 +294,7 @@ Toolbar.DEFAULTS = { }, list(value) { const range = this.quill.getSelection(); + // @ts-expect-error const formats = this.quill.getFormat(range); if (value === 'check') { if (formats.list === 'checked' || formats.list === 'unchecked') { diff --git a/packages/quill/src/modules/uploader.ts b/packages/quill/src/modules/uploader.ts index 940c6ecb40..c53058c51b 100644 --- a/packages/quill/src/modules/uploader.ts +++ b/packages/quill/src/modules/uploader.ts @@ -55,12 +55,14 @@ class Uploader extends Module { Uploader.DEFAULTS = { mimetypes: ['image/png', 'image/jpeg'], handler(range: Range, files: File[]) { - const promises = files.map((file) => { + if (!this.quill.scroll.query('image')) { + return; + } + const promises = files.map>((file) => { return new Promise((resolve) => { const reader = new FileReader(); - reader.onload = (e) => { - // @ts-expect-error Fix me later - resolve(e.target.result); + reader.onload = () => { + resolve(reader.result as string); }; reader.readAsDataURL(file); }); diff --git a/packages/quill/src/quill.ts b/packages/quill/src/quill.ts index 0c3626fd8a..648183434b 100644 --- a/packages/quill/src/quill.ts +++ b/packages/quill/src/quill.ts @@ -115,6 +115,7 @@ Quill.register( true, ); +export { Module } from './core.js'; export type { Bounds, DebugLevel, diff --git a/packages/quill/src/themes/bubble.ts b/packages/quill/src/themes/bubble.ts index 63bf9ff8e3..5bb8519141 100644 --- a/packages/quill/src/themes/bubble.ts +++ b/packages/quill/src/themes/bubble.ts @@ -4,7 +4,7 @@ import BaseTheme, { BaseTooltip } from './base.js'; import { Range } from '../core/selection.js'; import type { Bounds } from '../core/selection.js'; import icons from '../ui/icons.js'; -import type Quill from '../core.js'; +import Quill from '../core/quill.js'; import type { ThemeOptions } from '../core/theme.js'; import type Toolbar from '../modules/toolbar.js'; import type { ToolbarConfig } from '../modules/toolbar.js'; @@ -135,14 +135,15 @@ BubbleTheme.DEFAULTS = merge({}, BaseTheme.DEFAULTS, { handlers: { link(value: string) { if (!value) { - this.quill.format('link', false); + this.quill.format('link', false, Quill.sources.USER); } else { + // @ts-expect-error this.quill.theme.tooltip.edit(); } }, }, }, }, -}); +} satisfies ThemeOptions); export { BubbleTooltip, BubbleTheme as default }; diff --git a/packages/quill/src/themes/snow.ts b/packages/quill/src/themes/snow.ts index e99daebd0a..153a834c26 100644 --- a/packages/quill/src/themes/snow.ts +++ b/packages/quill/src/themes/snow.ts @@ -4,7 +4,7 @@ import BaseTheme, { BaseTooltip } from './base.js'; import LinkBlot from '../formats/link.js'; import { Range } from '../core/selection.js'; import icons from '../ui/icons.js'; -import type Quill from '../core.js'; +import Quill from '../core/quill.js'; import type { Context } from '../modules/keyboard.js'; import type Toolbar from '../modules/toolbar.js'; import type { ToolbarConfig } from '../modules/toolbar.js'; @@ -136,15 +136,16 @@ SnowTheme.DEFAULTS = merge({}, BaseTheme.DEFAULTS, { ) { preview = `mailto:${preview}`; } + // @ts-expect-error const { tooltip } = this.quill.theme; tooltip.edit('link', preview); } else { - this.quill.format('link', false); + this.quill.format('link', false, Quill.sources.USER); } }, }, }, }, -}); +} satisfies ThemeOptions); export default SnowTheme; diff --git a/packages/quill/test/types/quill.test-d.ts b/packages/quill/test/types/quill.test-d.ts index 004180a87d..1a2ca74040 100644 --- a/packages/quill/test/types/quill.test-d.ts +++ b/packages/quill/test/types/quill.test-d.ts @@ -3,6 +3,37 @@ import Quill from '../../src/quill.js'; import type { EmitterSource, Parchment, Range } from '../../src/quill.js'; import Delta from 'quill-delta'; import type { default as Block, BlockEmbed } from '../../src/blots/block.js'; +import SnowTheme from '../../src/themes/snow.js'; +import { LeafBlot } from 'parchment'; + +{ + const Counter = (quill: Quill, options: { unit: string }) => { + console.log(quill, options); + }; + Quill.register('modules/counter', Counter); + Quill.register('themes/snow', SnowTheme); + Quill.register('themes/snow', SnowTheme, true); + + class MyBlot extends LeafBlot {} + + Quill.register(MyBlot); + Quill.register(MyBlot, true); + // @ts-expect-error + Quill.register(SnowTheme); + Quill.register({ + 'modules/counter': Counter, + 'themes/snow': SnowTheme, + 'formats/my-blot': MyBlot, + }); + Quill.register( + { + 'modules/counter': Counter, + 'themes/snow': SnowTheme, + 'formats/my-blot': MyBlot, + }, + true, + ); +} const quill = new Quill('#editor'); diff --git a/packages/quill/test/unit/core/quill.spec.ts b/packages/quill/test/unit/core/quill.spec.ts index 21433856a6..c128c0dc12 100644 --- a/packages/quill/test/unit/core/quill.spec.ts +++ b/packages/quill/test/unit/core/quill.spec.ts @@ -1,7 +1,7 @@ import '../../../src/quill.js'; import Delta from 'quill-delta'; -import { Registry } from 'parchment'; -import { beforeEach, describe, expect, test, vitest } from 'vitest'; +import { LeafBlot, Registry } from 'parchment'; +import { afterEach, beforeEach, describe, expect, test, vitest } from 'vitest'; import type { MockedFunction } from 'vitest'; import Emitter from '../../../src/core/emitter.js'; import Theme from '../../../src/core/theme.js'; @@ -29,6 +29,47 @@ describe('Quill', () => { }); }); + describe('register', () => { + const imports = { ...Quill.imports }; + afterEach(() => { + Quill.imports = imports; + }); + + test('register(path, target)', () => { + class Counter {} + Quill.register('modules/counter', Counter); + + expect(Quill.imports).toHaveProperty('modules/counter', Counter); + expect(Quill.import('modules/counter')).toEqual(Counter); + }); + + test('register(formats)', () => { + class MyCounterBlot extends LeafBlot { + static blotName = 'my-counter'; + static className = 'ql-my-counter'; + } + Quill.register(MyCounterBlot); + + expect(Quill.imports).toHaveProperty('formats/my-counter', MyCounterBlot); + expect(Quill.import('formats/my-counter')).toEqual(MyCounterBlot); + }); + + test('register(targets)', () => { + class ABlot extends LeafBlot { + static blotName = 'a-blot'; + static className = 'ql-a-blot'; + } + class AModule {} + Quill.register({ + 'formats/a-blot': ABlot, + 'modules/a-module': AModule, + }); + + expect(Quill.import('formats/a-blot')).toEqual(ABlot); + expect(Quill.import('modules/a-module')).toEqual(AModule); + }); + }); + describe('construction', () => { test('empty', () => { const quill = new Quill(createContainer()); diff --git a/packages/website/package.json b/packages/website/package.json index d281438f59..c089961461 100644 --- a/packages/website/package.json +++ b/packages/website/package.json @@ -1,6 +1,6 @@ { "name": "website", - "version": "2.0.1", + "version": "2.0.2", "description": "Quill official website", "private": true, "homepage": "https://quilljs.com", diff --git a/packages/website/src/pages/docs.jsx b/packages/website/src/pages/docs.jsx new file mode 100644 index 0000000000..b8a3c18d68 --- /dev/null +++ b/packages/website/src/pages/docs.jsx @@ -0,0 +1,15 @@ +import { useRouter } from 'next/navigation'; +import { useEffect } from 'react'; +import docs from '../data/docs'; + +const Docs = () => { + const router = useRouter(); + + useEffect(() => { + router.replace(docs[0].url); + }, [router]); + + return null; +}; + +export default Docs; diff --git a/scripts/changelog.mjs b/scripts/changelog.mjs new file mode 100644 index 0000000000..d2df907c49 --- /dev/null +++ b/scripts/changelog.mjs @@ -0,0 +1,68 @@ +/** + * Fetch the latest release from GitHub and prepend it to the CHANGELOG.md + * Nothing will happen if the latest release is already in the CHANGELOG.md + */ +import { execa } from "execa"; +import { readFile, writeFile } from "node:fs/promises"; +import { fileURLToPath } from "node:url"; +import { dirname, join } from "node:path"; + +const changelogFilename = "CHANGELOG.md"; + +const changeLogFilePath = join( + dirname(fileURLToPath(import.meta.url)), + "..", + changelogFilename +); + +const currentChangeLog = await readFile(changeLogFilePath, "utf-8"); + +const { stdout } = await execa("gh", [ + "release", + "list", + "--exclude-drafts", + "--json=tagName,publishedAt,name,isLatest", +]); + +const release = JSON.parse(stdout).find((release) => release.isLatest); + +if (currentChangeLog.includes(`# ${release.tagName}`)) { + process.exit(0); +} + +const filteredReleaseNote = (note) => { + const ignoreSections = [ + "## new contributors", + "## all changes", + "## other changes", + ]; + ignoreSections.forEach((section) => { + const index = note.toLowerCase().indexOf(section); + if (index > -1) { + note = note.slice(0, index).replace(/#\s*$/, ""); + } + }); + return note.trim(); +}; + +const formatDate = (date) => { + const str = date.toISOString(); + return str.substring(0, str.indexOf("T")); +}; + +const { body } = JSON.parse( + (await execa("gh", ["release", "view", release.tagName, "--json=body"])) + .stdout +); + +const note = `# ${release.tagName} (${formatDate(new Date(release.publishedAt))})\n\n${filteredReleaseNote(body)}\n\n[All changes](https://github.com/quilljs/quill/releases/tag/${release.tagName})\n`; + +await writeFile(changeLogFilePath, `${note}\n${currentChangeLog}`); + +await execa("git", ["add", changelogFilename]); +await execa("git", [ + "commit", + "-m", + `Update ${changelogFilename}: ${release.tagName}`, +]); +await execa("git", ["push", "origin", "main"]); diff --git a/scripts/release.js b/scripts/release.js index 89c394067e..1f62be9328 100755 --- a/scripts/release.js +++ b/scripts/release.js @@ -86,38 +86,9 @@ console.log( `Releasing with version: ${currentVersion} -> ${version} and dist-tag: ${distTag}` ); -/* - * Update version in CHANGELOG.md - */ -console.log("Updating CHANGELOG.md and bumping versions"); -const changelog = fs.readFileSync("CHANGELOG.md", "utf8"); -const UNRELEASED_PLACEHOLDER = "# [Unreleased]"; - -const index = changelog.indexOf(UNRELEASED_PLACEHOLDER); -if (index === -1) { - exitWithError(`Could not find "${UNRELEASED_PLACEHOLDER}" in CHANGELOG.md`); -} -let nextVersionIndex = changelog.indexOf("\n# ", index); -if (nextVersionIndex === -1) { - nextVersionIndex = changelog.length - 1; -} - -const releaseNots = changelog - .substring(index + UNRELEASED_PLACEHOLDER.length, nextVersionIndex) - .trim(); - -fs.writeFileSync( - "CHANGELOG.md", - changelog.replace( - UNRELEASED_PLACEHOLDER, - `${UNRELEASED_PLACEHOLDER}\n\n# ${version}` - ) -); - /* * Bump npm versions */ -exec("git add CHANGELOG.md"); exec(`npm version ${version} --workspaces --force`); exec("git add **/package.json"); exec(`npm version ${version} --include-workspace-root --force`); @@ -151,6 +122,9 @@ if ( exitWithError("Version mismatch between package.json and dist/package.json"); } +const readme = fs.readFileSync("README.md", "utf-8"); +fs.writeFileSync(path.join(distFolder, "README.md"), readme); + exec(`npm publish --tag ${distTag}${dryRun ? " --dry-run" : ""}`, { cwd: distFolder, }); @@ -161,19 +135,12 @@ exec(`npm publish --tag ${distTag}${dryRun ? " --dry-run" : ""}`, { if (distTag === "experimental") { console.log("Skipping GitHub release for experimental version"); } else { - const filename = `release-note-${version}-${(Math.random() * 1000) | 0}.txt`; - fs.writeFileSync(filename, releaseNots); - try { - const prereleaseFlag = distTag === "latest" ? "--latest" : " --prerelease"; - const releaseCommand = `gh release create v${version} ${prereleaseFlag} -t "Version ${version}" --notes-file "${filename}"`; - if (dryRun) { - console.log(`Skipping: "${releaseCommand}" in dry-run mode`); - console.log(`Release note:\n${releaseNots}`); - } else { - exec(releaseCommand); - } - } finally { - fs.unlinkSync(filename); + const prereleaseFlag = distTag === "latest" ? "--latest" : " --prerelease"; + const releaseCommand = `gh release create v${version} ${prereleaseFlag} -t "Version ${version}" --generate-notes`; + if (dryRun) { + console.log(`Skipping: "${releaseCommand}" in dry-run mode`); + } else { + exec(releaseCommand); } }