diff --git a/composer.json b/composer.json
index e19e418..4a6c365 100644
--- a/composer.json
+++ b/composer.json
@@ -1,6 +1,6 @@
{
"name": "uwil/gen-game-web",
- "version": "4.0.9",
+ "version": "4.1.0",
"type": "project",
"description": "Game generator",
"support": {
diff --git a/config/purifier.php b/config/purifier.php
index 59cb78b..19c7094 100644
--- a/config/purifier.php
+++ b/config/purifier.php
@@ -17,6 +17,8 @@
* @link http://htmlpurifier.org/live/configdoc/plain.html
*/
+declare(strict_types=1);
+
// phpcs:disable Generic.Files.LineLength.TooLong
return [
'encoding' => 'UTF-8',
@@ -25,38 +27,36 @@ return [
'cacheFileMode' => 0755,
'settings' => [
'default' => [
- 'HTML.SafeIframe' => true,
+ 'HTML.SafeIframe' => true,
// * For iframes
- 'URI.SafeIframeRegexp' => "%^(http://|https://|//)(www.youtube.com/embed/|player.vimeo.com/video/|vimeo.com/|www.dailymotion.com/video/)%",
- 'HTML.Doctype' => 'HTML 4.01 Transitional',
+ 'URI.SafeIframeRegexp' => '%^(http://|https://|//)(www.youtube.com/embed/|player.vimeo.com/video/|vimeo.com/)%',
+ 'HTML.Doctype' => 'HTML 4.01 Transitional',
// * Legacy filter en full avec safe legacy.
- // 'HTML.Allowed' => 'h1[style|id],h2[style|id],h3[style|id],h4[style|id],h5[style|id],h6[style|id],figure[class|style],oembed[url],div[style],b,strong,i,em,u,s,pre,code[class],a[href|title|target|rel|id],ul[style],ol[style],dl[style],li,p[style],br,span[style|class],img[width|height|alt|src|style|class|title],iframe[src|width|height|class|frameborder|style],table[style|align|border|cellspacing|cellpadding|width],thead,tbody,th[colspan|align|valign|style],tr[align|valign|style],td[style|colspan|rowspan|scope|align|valign],hr,dl,dt,mark[class]',
+ // phpcs:ignore Generic.Files.LineLength.MaxExceeded
+ 'HTML.Allowed' => 'h1[style],h2[style],h3[style],h4[style],h5[style],h6[style],figure[class|style],oembed[url],div[style],b,strong,i,em,u,a[href|title|target|rel],ul[style],ol[style],dl[style],li,p[style],br,span[style|class],img[width|height|alt|src|style|class|title],iframe[src|width|height|class|frameborder|style],table[style|align|border|cellspacing|cellpadding|width],thead,tbody,th[colspan|align|valign|style],tr[align|valign|style],td[style|colspan|rowspan|scope|align|valign],hr,dl,dt',
// * Restricted basics.
- 'HTML.Allowed' => 'br,p[style],b[style],u[style],i[style],a[href|title|target|rel],strong[style],span[class],ul[style],ol[style],li[style],h2[style],h3[style],h4[style],hr,blockquote[style]',
+ // 'HTML.Allowed' => 'br,p[style],b[style],u[style],i[style],a[href|title|target|rel],strong[style],span[class],ul[style],ol[style],li[style],h2[style],h3[style],h4[style],hr,blockquote[style]',
// * Legacy filter en full avec safe legacy.
- // 'CSS.AllowedProperties' => 'font,font-size,font-weight,font-style,font-family,text-decoration,padding-left,color,background-color,text-align,list-style-type,float,width,height,vertical-align,border,border-color,margin-left',
+ // phpcs:ignore Generic.Files.LineLength.MaxExceeded
+ 'CSS.AllowedProperties' => 'font,font-size,font-weight,font-style,font-family,text-decoration,padding-left,color,background-color,text-align,list-style-type,float,width,height,vertical-align,border-color',
// * Restricted basics.
- 'CSS.AllowedProperties' => 'text-align,margin-left',
- 'AutoFormat.AutoParagraph' => false,
- 'AutoFormat.RemoveEmpty' => false,
+ // 'CSS.AllowedProperties' => 'text-align,margin-left',
+ 'AutoFormat.AutoParagraph' => false,
+ 'AutoFormat.RemoveEmpty' => false,
'AutoFormat.RemoveEmpty.RemoveNbsp' => false,
],
- "youtube" => [
- "HTML.SafeIframe" => 'true',
- "URI.SafeIframeRegexp" => "%^(http://|https://|//)(www.youtube.com/embed/|player.vimeo.com/video/|vimeo.com/|www.dailymotion.com/video/)%",
- ],
'custom_definition' => [
- 'id' => 'html5-definitions',
- 'rev' => 1,
- 'debug' => true,
+ 'id' => 'html5-definitions',
+ 'rev' => 1,
+ 'debug' => true,
'elements' => [
// * http://developers.whatwg.org/sections.html
['section', 'Block', 'Flow', 'Common'],
- ['nav', 'Block', 'Flow', 'Common'],
+ ['nav', 'Block', 'Flow', 'Common'],
['article', 'Block', 'Flow', 'Common'],
- ['aside', 'Block', 'Flow', 'Common'],
- ['header', 'Block', 'Flow', 'Common'],
- ['footer', 'Block', 'Flow', 'Common'],
+ ['aside', 'Block', 'Flow', 'Common'],
+ ['header', 'Block', 'Flow', 'Common'],
+ ['footer', 'Block', 'Flow', 'Common'],
// * Content model actually excludes several tags, not modelled here
['address', 'Block', 'Flow', 'Common'],
@@ -69,26 +69,26 @@ return [
// * http://developers.whatwg.org/the-video-element.html#the-video-element
['video', 'Block', 'Optional: (source, Flow) | (Flow, source) | Flow', 'Common', [
- 'src' => 'URI',
- 'type' => 'Text',
- 'width' => 'Length',
- 'height' => 'Length',
- 'poster' => 'URI',
- 'preload' => 'Enum#auto,metadata,none',
+ 'src' => 'URI',
+ 'type' => 'Text',
+ 'width' => 'Length',
+ 'height' => 'Length',
+ 'poster' => 'URI',
+ 'preload' => 'Enum#auto,metadata,none',
'controls' => 'Bool',
]],
['source', 'Block', 'Flow', 'Common', [
- 'src' => 'URI',
+ 'src' => 'URI',
'type' => 'Text',
]],
// * http://developers.whatwg.org/text-level-semantics.html
- ['s', 'Inline', 'Inline', 'Common'],
- ['var', 'Inline', 'Inline', 'Common'],
- ['sub', 'Inline', 'Inline', 'Common'],
- ['sup', 'Inline', 'Inline', 'Common'],
+ ['s', 'Inline', 'Inline', 'Common'],
+ ['var', 'Inline', 'Inline', 'Common'],
+ ['sub', 'Inline', 'Inline', 'Common'],
+ ['sup', 'Inline', 'Inline', 'Common'],
['mark', 'Inline', 'Inline', 'Common'],
- ['wbr', 'Inline', 'Empty', 'Core'],
+ ['wbr', 'Inline', 'Empty', 'Core'],
// * http://developers.whatwg.org/edits.html
['ins', 'Block', 'Flow', 'Common', ['cite' => 'URI', 'datetime' => 'CDATA']],
@@ -111,18 +111,11 @@ return [
],
'custom_attributes' => [
['a', 'target', 'Enum#_blank,_self,_target,_top'],
- ['a', 'id', 'Text'],
['ol', 'style', 'Text'],
['figure', 'style', 'Text'],
['img', 'style', 'Text'],
['span', 'style', 'Text'],
['oembed', 'url', 'Text'],
- ['h1', 'id', 'Text'],
- ['h2', 'id', 'Text'],
- ['h3', 'id', 'Text'],
- ['h4', 'id', 'Text'],
- ['h5', 'id', 'Text'],
- ['h6', 'id', 'Text'],
],
'custom_elements' => [
['u', 'Inline', 'Inline', 'Common'],
diff --git a/package-lock.json b/package-lock.json
index 42a5f03..ee933f3 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -11,6 +11,7 @@
"axios": "^1.17.0",
"bootstrap": "^5.3.8",
"chart.js": "^4.4.0",
+ "ckeditor5": "^48.3.1",
"cropperjs": "^1.6.1",
"glightbox": "^3.2.0",
"meow": "^9.0.0",
@@ -190,6 +191,869 @@
"@keyv/serialize": "^1.1.1"
}
},
+ "node_modules/@ckeditor/ckeditor5-adapter-ckfinder": {
+ "version": "48.3.1",
+ "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-adapter-ckfinder/-/ckeditor5-adapter-ckfinder-48.3.1.tgz",
+ "integrity": "sha512-xv072kFznzCLzG6Kiro9Pwb6v3FNXMu6/NWQX+NCl0wlqit85hRbIMJW0WyWxuYY4XgcDn4cgB89vRJ5p0zKsQ==",
+ "license": "SEE LICENSE IN LICENSE.md",
+ "dependencies": {
+ "@ckeditor/ckeditor5-core": "48.3.1",
+ "@ckeditor/ckeditor5-upload": "48.3.1",
+ "@ckeditor/ckeditor5-utils": "48.3.1"
+ }
+ },
+ "node_modules/@ckeditor/ckeditor5-alignment": {
+ "version": "48.3.1",
+ "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-alignment/-/ckeditor5-alignment-48.3.1.tgz",
+ "integrity": "sha512-ayiSLBtw4xvtMEPl6AhMX66Io6ajmq+2y2+FePfwu+9B8f8JblEApcWFLlj0HXxfWfJ470sEVMvwUJAwPLH9Jg==",
+ "license": "SEE LICENSE IN LICENSE.md",
+ "dependencies": {
+ "@ckeditor/ckeditor5-core": "48.3.1",
+ "@ckeditor/ckeditor5-engine": "48.3.1",
+ "@ckeditor/ckeditor5-icons": "48.3.1",
+ "@ckeditor/ckeditor5-ui": "48.3.1",
+ "@ckeditor/ckeditor5-utils": "48.3.1"
+ }
+ },
+ "node_modules/@ckeditor/ckeditor5-autoformat": {
+ "version": "48.3.1",
+ "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-autoformat/-/ckeditor5-autoformat-48.3.1.tgz",
+ "integrity": "sha512-65TMkSDpfE63WquypME53ESV209U1iXuhX32x95nc45hSi4CMn25oxqansrCpxIlHWww3d7z3tUgSRFGXpFSag==",
+ "license": "SEE LICENSE IN LICENSE.md",
+ "dependencies": {
+ "@ckeditor/ckeditor5-core": "48.3.1",
+ "@ckeditor/ckeditor5-engine": "48.3.1",
+ "@ckeditor/ckeditor5-heading": "48.3.1",
+ "@ckeditor/ckeditor5-typing": "48.3.1",
+ "@ckeditor/ckeditor5-utils": "48.3.1"
+ }
+ },
+ "node_modules/@ckeditor/ckeditor5-autosave": {
+ "version": "48.3.1",
+ "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-autosave/-/ckeditor5-autosave-48.3.1.tgz",
+ "integrity": "sha512-mc9UmTpyVBUn+V/pmzkP8PKJNuijytY8RuV7bckeq9OmxXOz2AD0lqlp+X48OcrgcefCA6e01D1hgElMhHQ/Hw==",
+ "license": "SEE LICENSE IN LICENSE.md",
+ "dependencies": {
+ "@ckeditor/ckeditor5-core": "48.3.1",
+ "@ckeditor/ckeditor5-engine": "48.3.1",
+ "@ckeditor/ckeditor5-utils": "48.3.1",
+ "es-toolkit": "1.45.1"
+ }
+ },
+ "node_modules/@ckeditor/ckeditor5-basic-styles": {
+ "version": "48.3.1",
+ "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-basic-styles/-/ckeditor5-basic-styles-48.3.1.tgz",
+ "integrity": "sha512-uVbKZLNScqYyvj/Wg3uP2sWCHVuvYyFCGSNA1osnmI4DwKi3BS4TW/rm3IYUPrD6q2y/GGJK05OyHr3hyw4oig==",
+ "license": "SEE LICENSE IN LICENSE.md",
+ "dependencies": {
+ "@ckeditor/ckeditor5-core": "48.3.1",
+ "@ckeditor/ckeditor5-engine": "48.3.1",
+ "@ckeditor/ckeditor5-icons": "48.3.1",
+ "@ckeditor/ckeditor5-typing": "48.3.1",
+ "@ckeditor/ckeditor5-ui": "48.3.1",
+ "@ckeditor/ckeditor5-utils": "48.3.1"
+ }
+ },
+ "node_modules/@ckeditor/ckeditor5-block-quote": {
+ "version": "48.3.1",
+ "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-block-quote/-/ckeditor5-block-quote-48.3.1.tgz",
+ "integrity": "sha512-9T03V/VjWYu6dhyKWZVrlggeOumQXpUt4lygK6NQuSQ9lIMEnhFgzjqtZsGe9l90zvnPaUvV9IC3u1xUFZvzhg==",
+ "license": "SEE LICENSE IN LICENSE.md",
+ "dependencies": {
+ "@ckeditor/ckeditor5-core": "48.3.1",
+ "@ckeditor/ckeditor5-engine": "48.3.1",
+ "@ckeditor/ckeditor5-enter": "48.3.1",
+ "@ckeditor/ckeditor5-icons": "48.3.1",
+ "@ckeditor/ckeditor5-typing": "48.3.1",
+ "@ckeditor/ckeditor5-ui": "48.3.1",
+ "@ckeditor/ckeditor5-utils": "48.3.1"
+ }
+ },
+ "node_modules/@ckeditor/ckeditor5-bookmark": {
+ "version": "48.3.1",
+ "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-bookmark/-/ckeditor5-bookmark-48.3.1.tgz",
+ "integrity": "sha512-EC5fmzUT5GKyIwQw+4tnHHJD4kUIBbiwP/+0gjHVZnHisRLfBOC3GAIczzq/AXDBIuaHqC9DZOAQQp+ltItHfQ==",
+ "license": "SEE LICENSE IN LICENSE.md",
+ "dependencies": {
+ "@ckeditor/ckeditor5-core": "48.3.1",
+ "@ckeditor/ckeditor5-engine": "48.3.1",
+ "@ckeditor/ckeditor5-icons": "48.3.1",
+ "@ckeditor/ckeditor5-link": "48.3.1",
+ "@ckeditor/ckeditor5-typing": "48.3.1",
+ "@ckeditor/ckeditor5-ui": "48.3.1",
+ "@ckeditor/ckeditor5-utils": "48.3.1",
+ "@ckeditor/ckeditor5-widget": "48.3.1"
+ }
+ },
+ "node_modules/@ckeditor/ckeditor5-ckbox": {
+ "version": "48.3.1",
+ "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ckbox/-/ckeditor5-ckbox-48.3.1.tgz",
+ "integrity": "sha512-ZaonwyuQjqjsho4iKDGSTn/M+SFs/OTl0WMkFU3tOhWpUikWKejNM94z+T6OR9oELWJVb58Jg6ubV6+ZYaLL7A==",
+ "license": "SEE LICENSE IN LICENSE.md",
+ "dependencies": {
+ "@ckeditor/ckeditor5-cloud-services": "48.3.1",
+ "@ckeditor/ckeditor5-core": "48.3.1",
+ "@ckeditor/ckeditor5-engine": "48.3.1",
+ "@ckeditor/ckeditor5-icons": "48.3.1",
+ "@ckeditor/ckeditor5-image": "48.3.1",
+ "@ckeditor/ckeditor5-link": "48.3.1",
+ "@ckeditor/ckeditor5-ui": "48.3.1",
+ "@ckeditor/ckeditor5-upload": "48.3.1",
+ "@ckeditor/ckeditor5-utils": "48.3.1",
+ "blurhash": "2.0.5",
+ "es-toolkit": "1.45.1"
+ }
+ },
+ "node_modules/@ckeditor/ckeditor5-ckfinder": {
+ "version": "48.3.1",
+ "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ckfinder/-/ckeditor5-ckfinder-48.3.1.tgz",
+ "integrity": "sha512-kZBp/eDhr8Y/CcE2UQZxFp3fZ+w4WYdYxmyuQ70mg4cOS1TMV9eh26Zz5khWAt+oAJsxVIDL5KNodak/hFpJ2w==",
+ "license": "SEE LICENSE IN LICENSE.md",
+ "dependencies": {
+ "@ckeditor/ckeditor5-adapter-ckfinder": "48.3.1",
+ "@ckeditor/ckeditor5-core": "48.3.1",
+ "@ckeditor/ckeditor5-icons": "48.3.1",
+ "@ckeditor/ckeditor5-image": "48.3.1",
+ "@ckeditor/ckeditor5-link": "48.3.1",
+ "@ckeditor/ckeditor5-ui": "48.3.1",
+ "@ckeditor/ckeditor5-utils": "48.3.1"
+ }
+ },
+ "node_modules/@ckeditor/ckeditor5-clipboard": {
+ "version": "48.3.1",
+ "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-clipboard/-/ckeditor5-clipboard-48.3.1.tgz",
+ "integrity": "sha512-PNI7yw9ese+fyQz0LzExRPY1CkjA6q9XqLDeMuLgp92Mkd7Vp1wftbB0ZLVyrzTIw8DEUudKziVsY3A4mT5aWA==",
+ "license": "SEE LICENSE IN LICENSE.md",
+ "dependencies": {
+ "@ckeditor/ckeditor5-core": "48.3.1",
+ "@ckeditor/ckeditor5-engine": "48.3.1",
+ "@ckeditor/ckeditor5-ui": "48.3.1",
+ "@ckeditor/ckeditor5-utils": "48.3.1",
+ "@ckeditor/ckeditor5-widget": "48.3.1",
+ "es-toolkit": "1.45.1"
+ }
+ },
+ "node_modules/@ckeditor/ckeditor5-cloud-services": {
+ "version": "48.3.1",
+ "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-cloud-services/-/ckeditor5-cloud-services-48.3.1.tgz",
+ "integrity": "sha512-pHJAj5RRhTV7uyexs0ryFj82zZNex91VtmwTOB/z+VPXSHq4jzpxFE1fVuoHgkydUF5S5Dl6TiFru48yYlK4YA==",
+ "license": "SEE LICENSE IN LICENSE.md",
+ "dependencies": {
+ "@ckeditor/ckeditor5-core": "48.3.1",
+ "@ckeditor/ckeditor5-upload": "48.3.1",
+ "@ckeditor/ckeditor5-utils": "48.3.1"
+ }
+ },
+ "node_modules/@ckeditor/ckeditor5-code-block": {
+ "version": "48.3.1",
+ "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-code-block/-/ckeditor5-code-block-48.3.1.tgz",
+ "integrity": "sha512-9mwgtcrNCTK/06HXH+o8yNbrN/nCAflQtJ6LmAf1Gw/6Fed9gQslMcs5+ADO98Jer5OetpuKeqgmBACAuQUTmg==",
+ "license": "SEE LICENSE IN LICENSE.md",
+ "dependencies": {
+ "@ckeditor/ckeditor5-clipboard": "48.3.1",
+ "@ckeditor/ckeditor5-core": "48.3.1",
+ "@ckeditor/ckeditor5-engine": "48.3.1",
+ "@ckeditor/ckeditor5-enter": "48.3.1",
+ "@ckeditor/ckeditor5-icons": "48.3.1",
+ "@ckeditor/ckeditor5-ui": "48.3.1",
+ "@ckeditor/ckeditor5-utils": "48.3.1"
+ }
+ },
+ "node_modules/@ckeditor/ckeditor5-core": {
+ "version": "48.3.1",
+ "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-48.3.1.tgz",
+ "integrity": "sha512-wrAhYK5R8MkGAE0VrOMFQN9LSRpSATS7DFKr4CCJod9EgBT873SCu34Ey0fzSqGxeOqamlcXQJVh/77+3JP4SQ==",
+ "license": "SEE LICENSE IN LICENSE.md",
+ "dependencies": {
+ "@ckeditor/ckeditor5-engine": "48.3.1",
+ "@ckeditor/ckeditor5-ui": "48.3.1",
+ "@ckeditor/ckeditor5-utils": "48.3.1",
+ "@ckeditor/ckeditor5-watchdog": "48.3.1",
+ "es-toolkit": "1.45.1"
+ }
+ },
+ "node_modules/@ckeditor/ckeditor5-easy-image": {
+ "version": "48.3.1",
+ "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-easy-image/-/ckeditor5-easy-image-48.3.1.tgz",
+ "integrity": "sha512-A63AcmaAAGVUhALHVtwHrlBaWEaRjBhxWTwkQoy3RFPpSAXi1k0Cy55HhkVrnqVZSuKmljcX3FttpjOb6MQq8g==",
+ "license": "SEE LICENSE IN LICENSE.md",
+ "dependencies": {
+ "@ckeditor/ckeditor5-cloud-services": "48.3.1",
+ "@ckeditor/ckeditor5-core": "48.3.1",
+ "@ckeditor/ckeditor5-image": "48.3.1",
+ "@ckeditor/ckeditor5-upload": "48.3.1",
+ "@ckeditor/ckeditor5-utils": "48.3.1"
+ }
+ },
+ "node_modules/@ckeditor/ckeditor5-editor-balloon": {
+ "version": "48.3.1",
+ "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-editor-balloon/-/ckeditor5-editor-balloon-48.3.1.tgz",
+ "integrity": "sha512-Unmzb3E+O83gIAvIT/RHyV1EzaxQGOzBiXGJhQahhQg++EvHUt4tmAJ6VzSLgJbtr8z3rMkA+lYpD5+OzpGT4w==",
+ "license": "SEE LICENSE IN LICENSE.md",
+ "dependencies": {
+ "@ckeditor/ckeditor5-core": "48.3.1",
+ "@ckeditor/ckeditor5-engine": "48.3.1",
+ "@ckeditor/ckeditor5-ui": "48.3.1",
+ "@ckeditor/ckeditor5-utils": "48.3.1",
+ "es-toolkit": "1.45.1"
+ }
+ },
+ "node_modules/@ckeditor/ckeditor5-editor-classic": {
+ "version": "48.3.1",
+ "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-editor-classic/-/ckeditor5-editor-classic-48.3.1.tgz",
+ "integrity": "sha512-7azS8ry8+c3H8S1RM1Aphq8wCig4mmLpK/kTmdF2/+JkPUszRoVK1HThSmBkstKCHDv4UuSVR+FcJ6Co6Tavog==",
+ "license": "SEE LICENSE IN LICENSE.md",
+ "dependencies": {
+ "@ckeditor/ckeditor5-core": "48.3.1",
+ "@ckeditor/ckeditor5-engine": "48.3.1",
+ "@ckeditor/ckeditor5-ui": "48.3.1",
+ "@ckeditor/ckeditor5-utils": "48.3.1",
+ "es-toolkit": "1.45.1"
+ }
+ },
+ "node_modules/@ckeditor/ckeditor5-editor-decoupled": {
+ "version": "48.3.1",
+ "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-editor-decoupled/-/ckeditor5-editor-decoupled-48.3.1.tgz",
+ "integrity": "sha512-S9xGZS7Hl2jWQrZFVwk3o7x9Wwl7tgbQl8TCujr0Bi0zxoM286WkHbBUej9oLVVtDHvq7xDSafmUURbL/K5ZXw==",
+ "license": "SEE LICENSE IN LICENSE.md",
+ "dependencies": {
+ "@ckeditor/ckeditor5-core": "48.3.1",
+ "@ckeditor/ckeditor5-engine": "48.3.1",
+ "@ckeditor/ckeditor5-ui": "48.3.1",
+ "@ckeditor/ckeditor5-utils": "48.3.1",
+ "es-toolkit": "1.45.1"
+ }
+ },
+ "node_modules/@ckeditor/ckeditor5-editor-inline": {
+ "version": "48.3.1",
+ "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-editor-inline/-/ckeditor5-editor-inline-48.3.1.tgz",
+ "integrity": "sha512-uoXl+lfvGzH6HPHyjgcQcwK/WSDxchmkQvPrMHxTCyeimn4ffzFKzIH4WiOz39t1lXpMjI0hTy66eTB8F/+qvg==",
+ "license": "SEE LICENSE IN LICENSE.md",
+ "dependencies": {
+ "@ckeditor/ckeditor5-core": "48.3.1",
+ "@ckeditor/ckeditor5-engine": "48.3.1",
+ "@ckeditor/ckeditor5-ui": "48.3.1",
+ "@ckeditor/ckeditor5-utils": "48.3.1",
+ "es-toolkit": "1.45.1"
+ }
+ },
+ "node_modules/@ckeditor/ckeditor5-editor-multi-root": {
+ "version": "48.3.1",
+ "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-editor-multi-root/-/ckeditor5-editor-multi-root-48.3.1.tgz",
+ "integrity": "sha512-5BUDEfVCsj4Al6lHWPDxUCRUymoWwmwwg9hZqd6iSkBtDOuZfiGC9IitMb6qYvrD2Q0MLRoiW0z9n6My4ZMHfQ==",
+ "license": "SEE LICENSE IN LICENSE.md",
+ "dependencies": {
+ "@ckeditor/ckeditor5-core": "48.3.1",
+ "@ckeditor/ckeditor5-engine": "48.3.1",
+ "@ckeditor/ckeditor5-ui": "48.3.1",
+ "@ckeditor/ckeditor5-utils": "48.3.1",
+ "es-toolkit": "1.45.1"
+ }
+ },
+ "node_modules/@ckeditor/ckeditor5-emoji": {
+ "version": "48.3.1",
+ "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-emoji/-/ckeditor5-emoji-48.3.1.tgz",
+ "integrity": "sha512-JQGLX9rMMnMY5/d8bJrF2htxKGxFfrW+E+rAy+Uc5FZ+cOCQCUfI0+kYpZYj/oyt5BH6VXn099e1Uu4xjicgAA==",
+ "license": "SEE LICENSE IN LICENSE.md",
+ "dependencies": {
+ "@ckeditor/ckeditor5-core": "48.3.1",
+ "@ckeditor/ckeditor5-icons": "48.3.1",
+ "@ckeditor/ckeditor5-mention": "48.3.1",
+ "@ckeditor/ckeditor5-typing": "48.3.1",
+ "@ckeditor/ckeditor5-ui": "48.3.1",
+ "@ckeditor/ckeditor5-utils": "48.3.1",
+ "es-toolkit": "1.45.1",
+ "fuzzysort": "3.1.0"
+ }
+ },
+ "node_modules/@ckeditor/ckeditor5-engine": {
+ "version": "48.3.1",
+ "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-48.3.1.tgz",
+ "integrity": "sha512-CbOuKrm3g8T2Df6WMEYtQMm4DJTAlmRutQQFj94zaXqDPyb8dSLpdPZ0Z89Qg2tagh9IEw0maG40ei2H4FETiQ==",
+ "license": "SEE LICENSE IN LICENSE.md",
+ "dependencies": {
+ "@ckeditor/ckeditor5-utils": "48.3.1",
+ "es-toolkit": "1.45.1"
+ }
+ },
+ "node_modules/@ckeditor/ckeditor5-enter": {
+ "version": "48.3.1",
+ "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-enter/-/ckeditor5-enter-48.3.1.tgz",
+ "integrity": "sha512-+gs7yLyWSfYlBofKA1ce4O4fPBoMw4mSXNun9CZP2FgByvsnS/5sOE3c3UTJS2bSLYabNkZRH3SG4XWKKhunGg==",
+ "license": "SEE LICENSE IN LICENSE.md",
+ "dependencies": {
+ "@ckeditor/ckeditor5-core": "48.3.1",
+ "@ckeditor/ckeditor5-engine": "48.3.1",
+ "@ckeditor/ckeditor5-utils": "48.3.1"
+ }
+ },
+ "node_modules/@ckeditor/ckeditor5-essentials": {
+ "version": "48.3.1",
+ "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-essentials/-/ckeditor5-essentials-48.3.1.tgz",
+ "integrity": "sha512-/yYMvcdYpwfQOumLNFccOnQvWfJoXN4Ny5a8m9OO/syGqeMtgpLy+Pn8be3nq4/pxdU6Qz0VnGVzU9OaHXxw4A==",
+ "license": "SEE LICENSE IN LICENSE.md",
+ "dependencies": {
+ "@ckeditor/ckeditor5-clipboard": "48.3.1",
+ "@ckeditor/ckeditor5-core": "48.3.1",
+ "@ckeditor/ckeditor5-enter": "48.3.1",
+ "@ckeditor/ckeditor5-select-all": "48.3.1",
+ "@ckeditor/ckeditor5-typing": "48.3.1",
+ "@ckeditor/ckeditor5-ui": "48.3.1",
+ "@ckeditor/ckeditor5-undo": "48.3.1"
+ }
+ },
+ "node_modules/@ckeditor/ckeditor5-find-and-replace": {
+ "version": "48.3.1",
+ "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-find-and-replace/-/ckeditor5-find-and-replace-48.3.1.tgz",
+ "integrity": "sha512-R4DPKGC5XmN68W2HuUBRo8VJJ1KCB5Y8gr6JbNDNGQ7aJWrgAjQU7H7d9EEwxU6wjxzNAT7MJqPOEX/WixUBhA==",
+ "license": "SEE LICENSE IN LICENSE.md",
+ "dependencies": {
+ "@ckeditor/ckeditor5-core": "48.3.1",
+ "@ckeditor/ckeditor5-engine": "48.3.1",
+ "@ckeditor/ckeditor5-icons": "48.3.1",
+ "@ckeditor/ckeditor5-ui": "48.3.1",
+ "@ckeditor/ckeditor5-utils": "48.3.1",
+ "es-toolkit": "1.45.1"
+ }
+ },
+ "node_modules/@ckeditor/ckeditor5-font": {
+ "version": "48.3.1",
+ "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-font/-/ckeditor5-font-48.3.1.tgz",
+ "integrity": "sha512-Q8EVEjVix3HOleJ6XtJpXDqD7WGMU3WZR/9eK1hMvOHnvRWkHwXJve5IoaBseJXSSQopG98D1rvWuNvE+qsZNg==",
+ "license": "SEE LICENSE IN LICENSE.md",
+ "dependencies": {
+ "@ckeditor/ckeditor5-core": "48.3.1",
+ "@ckeditor/ckeditor5-engine": "48.3.1",
+ "@ckeditor/ckeditor5-icons": "48.3.1",
+ "@ckeditor/ckeditor5-ui": "48.3.1",
+ "@ckeditor/ckeditor5-utils": "48.3.1"
+ }
+ },
+ "node_modules/@ckeditor/ckeditor5-fullscreen": {
+ "version": "48.3.1",
+ "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-fullscreen/-/ckeditor5-fullscreen-48.3.1.tgz",
+ "integrity": "sha512-/UQzJFhOMJrDBB+02jSNJVD6E0cjNZ43KgsR8croTDEPLQ2pRH50aUkBZTZn7TfSYx7X2aeaYbyegvSB+pfw6g==",
+ "license": "SEE LICENSE IN LICENSE.md",
+ "dependencies": {
+ "@ckeditor/ckeditor5-core": "48.3.1",
+ "@ckeditor/ckeditor5-editor-classic": "48.3.1",
+ "@ckeditor/ckeditor5-editor-decoupled": "48.3.1",
+ "@ckeditor/ckeditor5-icons": "48.3.1",
+ "@ckeditor/ckeditor5-ui": "48.3.1",
+ "@ckeditor/ckeditor5-utils": "48.3.1"
+ }
+ },
+ "node_modules/@ckeditor/ckeditor5-heading": {
+ "version": "48.3.1",
+ "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-heading/-/ckeditor5-heading-48.3.1.tgz",
+ "integrity": "sha512-CPlf4wSatQLqbgsj7DWPaOtjTgqchQX4Mv57NbV/2ZvDnqDOpjMi06d49yQngiPFv/6zqszr8U1raUX1OUhfYA==",
+ "license": "SEE LICENSE IN LICENSE.md",
+ "dependencies": {
+ "@ckeditor/ckeditor5-core": "48.3.1",
+ "@ckeditor/ckeditor5-engine": "48.3.1",
+ "@ckeditor/ckeditor5-enter": "48.3.1",
+ "@ckeditor/ckeditor5-icons": "48.3.1",
+ "@ckeditor/ckeditor5-paragraph": "48.3.1",
+ "@ckeditor/ckeditor5-ui": "48.3.1",
+ "@ckeditor/ckeditor5-utils": "48.3.1"
+ }
+ },
+ "node_modules/@ckeditor/ckeditor5-highlight": {
+ "version": "48.3.1",
+ "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-highlight/-/ckeditor5-highlight-48.3.1.tgz",
+ "integrity": "sha512-wlqHoOuHeA2qrE9rBeVHgVK75puzTFWn/V8IhAcVBCPB2AApLYNTO7fkfhOEpxqodE2It1lPpN4JfVRWUkoCIw==",
+ "license": "SEE LICENSE IN LICENSE.md",
+ "dependencies": {
+ "@ckeditor/ckeditor5-core": "48.3.1",
+ "@ckeditor/ckeditor5-engine": "48.3.1",
+ "@ckeditor/ckeditor5-icons": "48.3.1",
+ "@ckeditor/ckeditor5-ui": "48.3.1",
+ "@ckeditor/ckeditor5-utils": "48.3.1"
+ }
+ },
+ "node_modules/@ckeditor/ckeditor5-horizontal-line": {
+ "version": "48.3.1",
+ "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-horizontal-line/-/ckeditor5-horizontal-line-48.3.1.tgz",
+ "integrity": "sha512-yl25cVmB5T+fsC2VqJvDLnmS9ymn+4LLaGSnue2D8Tg1WK/YTyWxKg3n0anPzMWBBLr1XcKAyVmnGFI66AKwvA==",
+ "license": "SEE LICENSE IN LICENSE.md",
+ "dependencies": {
+ "@ckeditor/ckeditor5-core": "48.3.1",
+ "@ckeditor/ckeditor5-engine": "48.3.1",
+ "@ckeditor/ckeditor5-icons": "48.3.1",
+ "@ckeditor/ckeditor5-ui": "48.3.1",
+ "@ckeditor/ckeditor5-utils": "48.3.1",
+ "@ckeditor/ckeditor5-widget": "48.3.1"
+ }
+ },
+ "node_modules/@ckeditor/ckeditor5-html-embed": {
+ "version": "48.3.1",
+ "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-html-embed/-/ckeditor5-html-embed-48.3.1.tgz",
+ "integrity": "sha512-AuXaTHSnxR6chWIz9Z9UY2x4ANHN6Uf0jkfiAFcP6POWaD7YLsviTEYk+YGYw/kcXExMw3CQriDK5KdsjZtnkA==",
+ "license": "SEE LICENSE IN LICENSE.md",
+ "dependencies": {
+ "@ckeditor/ckeditor5-core": "48.3.1",
+ "@ckeditor/ckeditor5-engine": "48.3.1",
+ "@ckeditor/ckeditor5-icons": "48.3.1",
+ "@ckeditor/ckeditor5-ui": "48.3.1",
+ "@ckeditor/ckeditor5-utils": "48.3.1",
+ "@ckeditor/ckeditor5-widget": "48.3.1"
+ }
+ },
+ "node_modules/@ckeditor/ckeditor5-html-support": {
+ "version": "48.3.1",
+ "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-html-support/-/ckeditor5-html-support-48.3.1.tgz",
+ "integrity": "sha512-aQ0ZHvvOATsUBykQJcGCFOTJjBDX3OULfeJWV1bqdVWAQt0BHC5xkq6d1IpbyKDaW9IkcB19GOS9nQgs1FasNg==",
+ "license": "SEE LICENSE IN LICENSE.md",
+ "dependencies": {
+ "@ckeditor/ckeditor5-clipboard": "48.3.1",
+ "@ckeditor/ckeditor5-core": "48.3.1",
+ "@ckeditor/ckeditor5-engine": "48.3.1",
+ "@ckeditor/ckeditor5-enter": "48.3.1",
+ "@ckeditor/ckeditor5-heading": "48.3.1",
+ "@ckeditor/ckeditor5-image": "48.3.1",
+ "@ckeditor/ckeditor5-list": "48.3.1",
+ "@ckeditor/ckeditor5-remove-format": "48.3.1",
+ "@ckeditor/ckeditor5-table": "48.3.1",
+ "@ckeditor/ckeditor5-utils": "48.3.1",
+ "@ckeditor/ckeditor5-widget": "48.3.1",
+ "es-toolkit": "1.45.1"
+ }
+ },
+ "node_modules/@ckeditor/ckeditor5-icons": {
+ "version": "48.3.1",
+ "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-icons/-/ckeditor5-icons-48.3.1.tgz",
+ "integrity": "sha512-a8mE5oTQ8TKf/325UmDixhhqGbDyzd749kcrANyzxwc89PtTMdUayl+D0Sj92Xp5fqMHgDEqipUcoohH9OSFBg==",
+ "license": "SEE LICENSE IN LICENSE.md"
+ },
+ "node_modules/@ckeditor/ckeditor5-image": {
+ "version": "48.3.1",
+ "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-image/-/ckeditor5-image-48.3.1.tgz",
+ "integrity": "sha512-3lQY0LEpUNle2nUrONOtOXax62JQE9ZYltMDkOhMy9hcto0BoIngBebBsBBKZmpPugvMTf4qPYh1VkorOAdH0g==",
+ "license": "SEE LICENSE IN LICENSE.md",
+ "dependencies": {
+ "@ckeditor/ckeditor5-clipboard": "48.3.1",
+ "@ckeditor/ckeditor5-core": "48.3.1",
+ "@ckeditor/ckeditor5-engine": "48.3.1",
+ "@ckeditor/ckeditor5-icons": "48.3.1",
+ "@ckeditor/ckeditor5-typing": "48.3.1",
+ "@ckeditor/ckeditor5-ui": "48.3.1",
+ "@ckeditor/ckeditor5-undo": "48.3.1",
+ "@ckeditor/ckeditor5-upload": "48.3.1",
+ "@ckeditor/ckeditor5-utils": "48.3.1",
+ "@ckeditor/ckeditor5-widget": "48.3.1",
+ "es-toolkit": "1.45.1"
+ }
+ },
+ "node_modules/@ckeditor/ckeditor5-indent": {
+ "version": "48.3.1",
+ "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-indent/-/ckeditor5-indent-48.3.1.tgz",
+ "integrity": "sha512-hRuAPVDex46Ky86wuWNoPLpkPYQt0jGECKPnSYsjavm/il6rm57J/Y/jk7CKGJJVIovVLFftvWsI0yHLcsAP1w==",
+ "license": "SEE LICENSE IN LICENSE.md",
+ "dependencies": {
+ "@ckeditor/ckeditor5-core": "48.3.1",
+ "@ckeditor/ckeditor5-engine": "48.3.1",
+ "@ckeditor/ckeditor5-heading": "48.3.1",
+ "@ckeditor/ckeditor5-icons": "48.3.1",
+ "@ckeditor/ckeditor5-list": "48.3.1",
+ "@ckeditor/ckeditor5-ui": "48.3.1",
+ "@ckeditor/ckeditor5-utils": "48.3.1"
+ }
+ },
+ "node_modules/@ckeditor/ckeditor5-language": {
+ "version": "48.3.1",
+ "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-language/-/ckeditor5-language-48.3.1.tgz",
+ "integrity": "sha512-DGOxZyTvrXisV+3FhFEcagfSlTC7m2tdhD2CJJmBRkKX+2ZOdeP1D0QCD6ybFlO3D/wT57Po2QX2nCVI6U79dQ==",
+ "license": "SEE LICENSE IN LICENSE.md",
+ "dependencies": {
+ "@ckeditor/ckeditor5-core": "48.3.1",
+ "@ckeditor/ckeditor5-engine": "48.3.1",
+ "@ckeditor/ckeditor5-ui": "48.3.1",
+ "@ckeditor/ckeditor5-utils": "48.3.1"
+ }
+ },
+ "node_modules/@ckeditor/ckeditor5-link": {
+ "version": "48.3.1",
+ "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-link/-/ckeditor5-link-48.3.1.tgz",
+ "integrity": "sha512-E3pAhuNy77F55JUnX40apemSbsOC3RbUPIgPclNlh/1PXs1uN/bjkkyDVYQ/rT5MrophY3tw/bLZ/cRrbEuKBg==",
+ "license": "SEE LICENSE IN LICENSE.md",
+ "dependencies": {
+ "@ckeditor/ckeditor5-clipboard": "48.3.1",
+ "@ckeditor/ckeditor5-core": "48.3.1",
+ "@ckeditor/ckeditor5-engine": "48.3.1",
+ "@ckeditor/ckeditor5-enter": "48.3.1",
+ "@ckeditor/ckeditor5-icons": "48.3.1",
+ "@ckeditor/ckeditor5-image": "48.3.1",
+ "@ckeditor/ckeditor5-typing": "48.3.1",
+ "@ckeditor/ckeditor5-ui": "48.3.1",
+ "@ckeditor/ckeditor5-utils": "48.3.1",
+ "@ckeditor/ckeditor5-widget": "48.3.1",
+ "es-toolkit": "1.45.1"
+ }
+ },
+ "node_modules/@ckeditor/ckeditor5-list": {
+ "version": "48.3.1",
+ "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-list/-/ckeditor5-list-48.3.1.tgz",
+ "integrity": "sha512-KyuXH0aAiiQCOB+yJAru/C5GJqT7a+OoHoanjZMsFq5jjK9r5Tjrh6hUfqXpw+okU1x7Ow+/J4QLVI3QqSnluQ==",
+ "license": "SEE LICENSE IN LICENSE.md",
+ "dependencies": {
+ "@ckeditor/ckeditor5-clipboard": "48.3.1",
+ "@ckeditor/ckeditor5-core": "48.3.1",
+ "@ckeditor/ckeditor5-engine": "48.3.1",
+ "@ckeditor/ckeditor5-enter": "48.3.1",
+ "@ckeditor/ckeditor5-font": "48.3.1",
+ "@ckeditor/ckeditor5-icons": "48.3.1",
+ "@ckeditor/ckeditor5-typing": "48.3.1",
+ "@ckeditor/ckeditor5-ui": "48.3.1",
+ "@ckeditor/ckeditor5-utils": "48.3.1",
+ "es-toolkit": "1.45.1"
+ }
+ },
+ "node_modules/@ckeditor/ckeditor5-markdown-gfm": {
+ "version": "48.3.1",
+ "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-markdown-gfm/-/ckeditor5-markdown-gfm-48.3.1.tgz",
+ "integrity": "sha512-y+aa3uPNwaTKxSXRcW3DNP4CfXBmXDmQk24mDVE4q7rl6lWkdnAUeEvUsaGYTRjs4szvY+HIaCts8OcSgKfvhA==",
+ "license": "SEE LICENSE IN LICENSE.md",
+ "dependencies": {
+ "@ckeditor/ckeditor5-clipboard": "48.3.1",
+ "@ckeditor/ckeditor5-core": "48.3.1",
+ "@ckeditor/ckeditor5-engine": "48.3.1",
+ "@types/hast": "3.0.4",
+ "hast-util-from-dom": "5.0.1",
+ "hast-util-to-html": "9.0.5",
+ "hast-util-to-mdast": "10.1.2",
+ "hastscript": "9.0.1",
+ "rehype-dom-parse": "5.0.2",
+ "rehype-dom-stringify": "4.0.2",
+ "rehype-remark": "10.0.1",
+ "remark-breaks": "4.0.0",
+ "remark-gfm": "4.0.1",
+ "remark-parse": "11.0.0",
+ "remark-rehype": "11.1.2",
+ "remark-stringify": "11.0.0",
+ "unified": "11.0.5",
+ "unist-util-visit": "5.0.0"
+ }
+ },
+ "node_modules/@ckeditor/ckeditor5-media-embed": {
+ "version": "48.3.1",
+ "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-media-embed/-/ckeditor5-media-embed-48.3.1.tgz",
+ "integrity": "sha512-Asq6B/nuhhHCka4mtjbIM4RrHAOWwCAYmR4kaX8xh6G81FfXKI/X26rJ8TjLno5J7lNgacdB6OznNu/UcJO0gQ==",
+ "license": "SEE LICENSE IN LICENSE.md",
+ "dependencies": {
+ "@ckeditor/ckeditor5-clipboard": "48.3.1",
+ "@ckeditor/ckeditor5-core": "48.3.1",
+ "@ckeditor/ckeditor5-engine": "48.3.1",
+ "@ckeditor/ckeditor5-icons": "48.3.1",
+ "@ckeditor/ckeditor5-typing": "48.3.1",
+ "@ckeditor/ckeditor5-ui": "48.3.1",
+ "@ckeditor/ckeditor5-undo": "48.3.1",
+ "@ckeditor/ckeditor5-utils": "48.3.1",
+ "@ckeditor/ckeditor5-widget": "48.3.1"
+ }
+ },
+ "node_modules/@ckeditor/ckeditor5-mention": {
+ "version": "48.3.1",
+ "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-mention/-/ckeditor5-mention-48.3.1.tgz",
+ "integrity": "sha512-TdmXZ+NnBXdbMtbA6Yo93mZpTs0oz9HfN8jY9yEJXsECOC0XPC1+nghQQrxJ3a9+eq6qba/JNLLM+ZV0W6DOaA==",
+ "license": "SEE LICENSE IN LICENSE.md",
+ "dependencies": {
+ "@ckeditor/ckeditor5-core": "48.3.1",
+ "@ckeditor/ckeditor5-engine": "48.3.1",
+ "@ckeditor/ckeditor5-typing": "48.3.1",
+ "@ckeditor/ckeditor5-ui": "48.3.1",
+ "@ckeditor/ckeditor5-utils": "48.3.1",
+ "es-toolkit": "1.45.1"
+ }
+ },
+ "node_modules/@ckeditor/ckeditor5-minimap": {
+ "version": "48.3.1",
+ "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-minimap/-/ckeditor5-minimap-48.3.1.tgz",
+ "integrity": "sha512-kDJfTRv31WrFisXBKzHNtKhAseiSsJKw1oWIPqqLIN9rnYXnEpjqa5BRgypfFbS7LW0wgjKvCOH/yHMyPrv64A==",
+ "license": "SEE LICENSE IN LICENSE.md",
+ "dependencies": {
+ "@ckeditor/ckeditor5-core": "48.3.1",
+ "@ckeditor/ckeditor5-engine": "48.3.1",
+ "@ckeditor/ckeditor5-ui": "48.3.1",
+ "@ckeditor/ckeditor5-utils": "48.3.1"
+ }
+ },
+ "node_modules/@ckeditor/ckeditor5-page-break": {
+ "version": "48.3.1",
+ "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-page-break/-/ckeditor5-page-break-48.3.1.tgz",
+ "integrity": "sha512-Wbsq6ZEOQN+zmfhMx05Ey0mda6qCj74j34yEZrnJ5nfFAoody7q3hJ7yJ9Edu10zF8+LXfC8+ebpaXQr77IvLg==",
+ "license": "SEE LICENSE IN LICENSE.md",
+ "dependencies": {
+ "@ckeditor/ckeditor5-core": "48.3.1",
+ "@ckeditor/ckeditor5-engine": "48.3.1",
+ "@ckeditor/ckeditor5-icons": "48.3.1",
+ "@ckeditor/ckeditor5-ui": "48.3.1",
+ "@ckeditor/ckeditor5-utils": "48.3.1",
+ "@ckeditor/ckeditor5-widget": "48.3.1"
+ }
+ },
+ "node_modules/@ckeditor/ckeditor5-paragraph": {
+ "version": "48.3.1",
+ "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-paragraph/-/ckeditor5-paragraph-48.3.1.tgz",
+ "integrity": "sha512-TnfBhRiFMBbGoXaPOpUiG109IpUFjbdEQEtjlBfiB4bMG71J1pdVYBe+qN1kvr34cYgdR96P/wbUnqC4BZA6Jw==",
+ "license": "SEE LICENSE IN LICENSE.md",
+ "dependencies": {
+ "@ckeditor/ckeditor5-core": "48.3.1",
+ "@ckeditor/ckeditor5-engine": "48.3.1",
+ "@ckeditor/ckeditor5-icons": "48.3.1",
+ "@ckeditor/ckeditor5-ui": "48.3.1",
+ "@ckeditor/ckeditor5-utils": "48.3.1"
+ }
+ },
+ "node_modules/@ckeditor/ckeditor5-paste-from-office": {
+ "version": "48.3.1",
+ "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-paste-from-office/-/ckeditor5-paste-from-office-48.3.1.tgz",
+ "integrity": "sha512-PAyMPmRRTY9MvvfhLdfPwgDOAlzm9u9C97aS7S/JbeKl2uys9uJ7nZRBC9v+9zf6eJMHx90ThKyVBtstKDC6LQ==",
+ "license": "SEE LICENSE IN LICENSE.md",
+ "dependencies": {
+ "@ckeditor/ckeditor5-clipboard": "48.3.1",
+ "@ckeditor/ckeditor5-core": "48.3.1",
+ "@ckeditor/ckeditor5-engine": "48.3.1",
+ "@ckeditor/ckeditor5-utils": "48.3.1"
+ }
+ },
+ "node_modules/@ckeditor/ckeditor5-remove-format": {
+ "version": "48.3.1",
+ "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-remove-format/-/ckeditor5-remove-format-48.3.1.tgz",
+ "integrity": "sha512-ZVuLTxUupAnoilnhC6Sjev1+qdzzSJxZ0h1h41boaRHSoqXGtnvXosb4MYZ416LiLYDBkFdL1yLJhhPOsWNXMg==",
+ "license": "SEE LICENSE IN LICENSE.md",
+ "dependencies": {
+ "@ckeditor/ckeditor5-core": "48.3.1",
+ "@ckeditor/ckeditor5-engine": "48.3.1",
+ "@ckeditor/ckeditor5-icons": "48.3.1",
+ "@ckeditor/ckeditor5-ui": "48.3.1",
+ "@ckeditor/ckeditor5-utils": "48.3.1"
+ }
+ },
+ "node_modules/@ckeditor/ckeditor5-restricted-editing": {
+ "version": "48.3.1",
+ "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-restricted-editing/-/ckeditor5-restricted-editing-48.3.1.tgz",
+ "integrity": "sha512-53u38P5fpz/8qwanJtGYtgmi5Szqg+6VhqnbSyPWOWK8dlJAUi0aMJy/ihseFkUFt2AfaUZHlUW7WzpwttbDCw==",
+ "license": "SEE LICENSE IN LICENSE.md",
+ "dependencies": {
+ "@ckeditor/ckeditor5-clipboard": "48.3.1",
+ "@ckeditor/ckeditor5-core": "48.3.1",
+ "@ckeditor/ckeditor5-engine": "48.3.1",
+ "@ckeditor/ckeditor5-icons": "48.3.1",
+ "@ckeditor/ckeditor5-typing": "48.3.1",
+ "@ckeditor/ckeditor5-ui": "48.3.1",
+ "@ckeditor/ckeditor5-utils": "48.3.1"
+ }
+ },
+ "node_modules/@ckeditor/ckeditor5-select-all": {
+ "version": "48.3.1",
+ "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-select-all/-/ckeditor5-select-all-48.3.1.tgz",
+ "integrity": "sha512-bPXjCzqNeroJxnpW+dHXtBb5vigap7cwANJ6LS9lvTbQGKk3Ocq6jO0RlhmJ9RvcuHwAMH60a+23zW3PJAOkAQ==",
+ "license": "SEE LICENSE IN LICENSE.md",
+ "dependencies": {
+ "@ckeditor/ckeditor5-core": "48.3.1",
+ "@ckeditor/ckeditor5-engine": "48.3.1",
+ "@ckeditor/ckeditor5-icons": "48.3.1",
+ "@ckeditor/ckeditor5-ui": "48.3.1",
+ "@ckeditor/ckeditor5-utils": "48.3.1"
+ }
+ },
+ "node_modules/@ckeditor/ckeditor5-show-blocks": {
+ "version": "48.3.1",
+ "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-show-blocks/-/ckeditor5-show-blocks-48.3.1.tgz",
+ "integrity": "sha512-Frzw96nYEET7ymiEUvMHjkJ/QClUfsGTd+jJufXaT9hUx7t1nONVQVhzIEIruy8dgqt8prIRqVpczD3mQS8T4Q==",
+ "license": "SEE LICENSE IN LICENSE.md",
+ "dependencies": {
+ "@ckeditor/ckeditor5-core": "48.3.1",
+ "@ckeditor/ckeditor5-engine": "48.3.1",
+ "@ckeditor/ckeditor5-icons": "48.3.1",
+ "@ckeditor/ckeditor5-ui": "48.3.1",
+ "@ckeditor/ckeditor5-utils": "48.3.1"
+ }
+ },
+ "node_modules/@ckeditor/ckeditor5-source-editing": {
+ "version": "48.3.1",
+ "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-source-editing/-/ckeditor5-source-editing-48.3.1.tgz",
+ "integrity": "sha512-20rfbBZgZjEYnFCpS69U27TKZq9ZLMzKCBSXv8Kmv4qObHGgZMBY+R5UsG1VpIRG5DdUjP9lBWgmCVkzlof1EA==",
+ "license": "SEE LICENSE IN LICENSE.md",
+ "dependencies": {
+ "@ckeditor/ckeditor5-core": "48.3.1",
+ "@ckeditor/ckeditor5-icons": "48.3.1",
+ "@ckeditor/ckeditor5-ui": "48.3.1",
+ "@ckeditor/ckeditor5-utils": "48.3.1"
+ }
+ },
+ "node_modules/@ckeditor/ckeditor5-special-characters": {
+ "version": "48.3.1",
+ "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-special-characters/-/ckeditor5-special-characters-48.3.1.tgz",
+ "integrity": "sha512-gqfxywMLASyjJV7AvhV3WCX3QYuizjWG0SxUy7zOils00UjIeImfQW07X5u/FSi2GLeUsOjSfttsAbtJXQXHzg==",
+ "license": "SEE LICENSE IN LICENSE.md",
+ "dependencies": {
+ "@ckeditor/ckeditor5-core": "48.3.1",
+ "@ckeditor/ckeditor5-icons": "48.3.1",
+ "@ckeditor/ckeditor5-typing": "48.3.1",
+ "@ckeditor/ckeditor5-ui": "48.3.1",
+ "@ckeditor/ckeditor5-utils": "48.3.1"
+ }
+ },
+ "node_modules/@ckeditor/ckeditor5-style": {
+ "version": "48.3.1",
+ "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-style/-/ckeditor5-style-48.3.1.tgz",
+ "integrity": "sha512-rYikWptU+1Kd4UbzZ0s04tO6CqlEoPzfX09jfdwWSNYLbgB9+CfrxnkbnFvfg3SCAgtFDactc07TBtxsH9+Eag==",
+ "license": "SEE LICENSE IN LICENSE.md",
+ "dependencies": {
+ "@ckeditor/ckeditor5-core": "48.3.1",
+ "@ckeditor/ckeditor5-engine": "48.3.1",
+ "@ckeditor/ckeditor5-html-support": "48.3.1",
+ "@ckeditor/ckeditor5-list": "48.3.1",
+ "@ckeditor/ckeditor5-table": "48.3.1",
+ "@ckeditor/ckeditor5-typing": "48.3.1",
+ "@ckeditor/ckeditor5-ui": "48.3.1",
+ "@ckeditor/ckeditor5-utils": "48.3.1",
+ "es-toolkit": "1.45.1"
+ }
+ },
+ "node_modules/@ckeditor/ckeditor5-table": {
+ "version": "48.3.1",
+ "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-table/-/ckeditor5-table-48.3.1.tgz",
+ "integrity": "sha512-aoVzI5Srl5g0AP2XslxNugJFeogQGstk8JiCwPN1cRvtOb/e7pvMYBsAXhqdf3GFeq3E7HMw/fceXmDLlWJPgw==",
+ "license": "SEE LICENSE IN LICENSE.md",
+ "dependencies": {
+ "@ckeditor/ckeditor5-clipboard": "48.3.1",
+ "@ckeditor/ckeditor5-core": "48.3.1",
+ "@ckeditor/ckeditor5-engine": "48.3.1",
+ "@ckeditor/ckeditor5-icons": "48.3.1",
+ "@ckeditor/ckeditor5-typing": "48.3.1",
+ "@ckeditor/ckeditor5-ui": "48.3.1",
+ "@ckeditor/ckeditor5-utils": "48.3.1",
+ "@ckeditor/ckeditor5-widget": "48.3.1",
+ "es-toolkit": "1.45.1"
+ }
+ },
+ "node_modules/@ckeditor/ckeditor5-typing": {
+ "version": "48.3.1",
+ "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-typing/-/ckeditor5-typing-48.3.1.tgz",
+ "integrity": "sha512-kBtgdIA9oWqrmTk24WRxaK/p91N00Mz0XE9/w7NDiOLAPBJNeBvt8Le4zOzyeLt8tn+DCP2h/BQg0t04oFveNQ==",
+ "license": "SEE LICENSE IN LICENSE.md",
+ "dependencies": {
+ "@ckeditor/ckeditor5-core": "48.3.1",
+ "@ckeditor/ckeditor5-engine": "48.3.1",
+ "@ckeditor/ckeditor5-utils": "48.3.1",
+ "es-toolkit": "1.45.1"
+ }
+ },
+ "node_modules/@ckeditor/ckeditor5-ui": {
+ "version": "48.3.1",
+ "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-48.3.1.tgz",
+ "integrity": "sha512-bs0VgxH3xfs8B14it+5dNK9I5YIWDI27qxArJqmfDFbnVBVtxlaLtnntyykbrNWCck53LKZ2qCpDueVsCV2JmA==",
+ "license": "SEE LICENSE IN LICENSE.md",
+ "dependencies": {
+ "@ckeditor/ckeditor5-core": "48.3.1",
+ "@ckeditor/ckeditor5-editor-multi-root": "48.3.1",
+ "@ckeditor/ckeditor5-engine": "48.3.1",
+ "@ckeditor/ckeditor5-icons": "48.3.1",
+ "@ckeditor/ckeditor5-utils": "48.3.1",
+ "@types/color-convert": "2.0.4",
+ "color-convert": "3.1.0",
+ "color-parse": "2.0.2",
+ "es-toolkit": "1.45.1",
+ "vanilla-colorful": "0.7.2"
+ }
+ },
+ "node_modules/@ckeditor/ckeditor5-ui/node_modules/color-convert": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-3.1.0.tgz",
+ "integrity": "sha512-TVoqAq8ZDIpK5lsQY874DDnu65CSsc9vzq0wLpNQ6UMBq81GSZocVazPiBbYGzngzBOIRahpkTzCLVe2at4MfA==",
+ "license": "MIT",
+ "dependencies": {
+ "color-name": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=14.6"
+ }
+ },
+ "node_modules/@ckeditor/ckeditor5-ui/node_modules/color-name": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-2.1.1.tgz",
+ "integrity": "sha512-p2FdgwVx1a9yWBHP2wI0VgShkDpgN4kZISkxdNipGBJWpa5G6b04OINlVWCyJj0JmfvcPrgqt95E9k8yvaOJFg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.20"
+ }
+ },
+ "node_modules/@ckeditor/ckeditor5-undo": {
+ "version": "48.3.1",
+ "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-undo/-/ckeditor5-undo-48.3.1.tgz",
+ "integrity": "sha512-psJd40k7knNqfbdCaBc6D6cC88exr4Y6AwQihUn/9DaQv8vBjJDNsifVsSgfBemT7QIchUDIoJwYkF8hmUDT9Q==",
+ "license": "SEE LICENSE IN LICENSE.md",
+ "dependencies": {
+ "@ckeditor/ckeditor5-core": "48.3.1",
+ "@ckeditor/ckeditor5-engine": "48.3.1",
+ "@ckeditor/ckeditor5-icons": "48.3.1",
+ "@ckeditor/ckeditor5-ui": "48.3.1",
+ "@ckeditor/ckeditor5-utils": "48.3.1"
+ }
+ },
+ "node_modules/@ckeditor/ckeditor5-upload": {
+ "version": "48.3.1",
+ "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-upload/-/ckeditor5-upload-48.3.1.tgz",
+ "integrity": "sha512-6hEOB4rAgtbDhntBw7Vw1wyn6BxR03mXNSGaKHyJ+OCZ1FzNAcCCkHI+6CI5INpAiAp8ISXfzblKec+EB0iA0Q==",
+ "license": "SEE LICENSE IN LICENSE.md",
+ "dependencies": {
+ "@ckeditor/ckeditor5-core": "48.3.1",
+ "@ckeditor/ckeditor5-utils": "48.3.1"
+ }
+ },
+ "node_modules/@ckeditor/ckeditor5-utils": {
+ "version": "48.3.1",
+ "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-48.3.1.tgz",
+ "integrity": "sha512-hLZLjgwWSQKB3/a7AULSB5066PujeqwQiiUwU71ObxLGAHJA5EWD102Jp093BmiFvf5k8/hXFqOtUuaihDCXtg==",
+ "license": "SEE LICENSE IN LICENSE.md",
+ "dependencies": {
+ "@ckeditor/ckeditor5-ui": "48.3.1",
+ "es-toolkit": "1.45.1"
+ }
+ },
+ "node_modules/@ckeditor/ckeditor5-watchdog": {
+ "version": "48.3.1",
+ "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-watchdog/-/ckeditor5-watchdog-48.3.1.tgz",
+ "integrity": "sha512-qv0D8GdaRdP9kM5LFYNNZTT3kN70jeEilZIA8wqLDf2+nIkz68xNZiwMbad9yrjGbMe2iQqrURTmML1/2+FRqA==",
+ "license": "SEE LICENSE IN LICENSE.md",
+ "dependencies": {
+ "@ckeditor/ckeditor5-core": "48.3.1",
+ "@ckeditor/ckeditor5-engine": "48.3.1",
+ "@ckeditor/ckeditor5-utils": "48.3.1",
+ "es-toolkit": "1.45.1"
+ }
+ },
+ "node_modules/@ckeditor/ckeditor5-widget": {
+ "version": "48.3.1",
+ "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-widget/-/ckeditor5-widget-48.3.1.tgz",
+ "integrity": "sha512-2XrBEd0pz/aVmSlXYC/Q3vgGVLadtN2KK5T3euQv3MSWTZtA66ZQKeKLFwl5pNvv/ItnCHUDz/RMEAP1CqsfTg==",
+ "license": "SEE LICENSE IN LICENSE.md",
+ "dependencies": {
+ "@ckeditor/ckeditor5-core": "48.3.1",
+ "@ckeditor/ckeditor5-engine": "48.3.1",
+ "@ckeditor/ckeditor5-enter": "48.3.1",
+ "@ckeditor/ckeditor5-icons": "48.3.1",
+ "@ckeditor/ckeditor5-typing": "48.3.1",
+ "@ckeditor/ckeditor5-ui": "48.3.1",
+ "@ckeditor/ckeditor5-utils": "48.3.1",
+ "es-toolkit": "1.45.1"
+ }
+ },
+ "node_modules/@ckeditor/ckeditor5-word-count": {
+ "version": "48.3.1",
+ "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-word-count/-/ckeditor5-word-count-48.3.1.tgz",
+ "integrity": "sha512-ylAMJ0LNVJasul0cVbZFSIXK4tdZ/850NXPjtTiL63K//2bYfxRj3Xwh+mN14H4NX3ozkJhN2jaA9PU6Gmfs3Q==",
+ "license": "SEE LICENSE IN LICENSE.md",
+ "dependencies": {
+ "@ckeditor/ckeditor5-core": "48.3.1",
+ "@ckeditor/ckeditor5-engine": "48.3.1",
+ "@ckeditor/ckeditor5-ui": "48.3.1",
+ "@ckeditor/ckeditor5-utils": "48.3.1",
+ "es-toolkit": "1.45.1"
+ }
+ },
"node_modules/@csstools/css-calc": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-3.2.1.tgz",
@@ -1485,6 +2349,30 @@
"@popperjs/core": "^2.9.2"
}
},
+ "node_modules/@types/color-convert": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/@types/color-convert/-/color-convert-2.0.4.tgz",
+ "integrity": "sha512-Ub1MmDdyZ7mX//g25uBAoH/mWGd9swVbt8BseymnaE18SU4po/PjmCrHxqIIRjBo3hV/vh1KGr0eMxUhp+t+dQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/color-name": "^1.1.0"
+ }
+ },
+ "node_modules/@types/color-name": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.5.tgz",
+ "integrity": "sha512-j2K5UJqGTxeesj6oQuGpMgifpT5k9HprgQd8D1Y0lOFqKHl3PJu5GMeS4Y5EgjS55AE6OQxf8mPED9uaGbf4Cg==",
+ "license": "MIT"
+ },
+ "node_modules/@types/debug": {
+ "version": "4.1.13",
+ "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.13.tgz",
+ "integrity": "sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/ms": "*"
+ }
+ },
"node_modules/@types/esrecurse": {
"version": "4.3.1",
"resolved": "https://registry.npmjs.org/@types/esrecurse/-/esrecurse-4.3.1.tgz",
@@ -1499,6 +2387,15 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/@types/hast": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz",
+ "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "*"
+ }
+ },
"node_modules/@types/json-schema": {
"version": "7.0.15",
"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
@@ -1506,12 +2403,27 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/@types/mdast": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz",
+ "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "*"
+ }
+ },
"node_modules/@types/minimist": {
"version": "1.2.5",
"resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz",
"integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==",
"license": "MIT"
},
+ "node_modules/@types/ms": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz",
+ "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==",
+ "license": "MIT"
+ },
"node_modules/@types/node": {
"version": "20.19.43",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.43.tgz",
@@ -1535,6 +2447,12 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/@types/unist": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz",
+ "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==",
+ "license": "MIT"
+ },
"node_modules/@typescript-eslint/eslint-plugin": {
"version": "8.64.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.64.0.tgz",
@@ -1778,6 +2696,12 @@
"url": "https://opencollective.com/eslint"
}
},
+ "node_modules/@ungap/structured-clone": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.3.tgz",
+ "integrity": "sha512-60YRaenCQcVjYEKOcG824+DRGGIQ3VKErcBoAEDJZz5bKIs2ZG+X/H9Nk+Q6EVkwJk5QNApxbrc5QtBSwtrXAg==",
+ "license": "ISC"
+ },
"node_modules/@unrs/resolver-binding-android-arm-eabi": {
"version": "1.12.2",
"resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.12.2.tgz",
@@ -2538,6 +3462,16 @@
"proxy-from-env": "^2.1.0"
}
},
+ "node_modules/bail": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz",
+ "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/balanced-match": {
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz",
@@ -2574,6 +3508,12 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/blurhash": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/blurhash/-/blurhash-2.0.5.tgz",
+ "integrity": "sha512-cRygWd7kGBQO3VEhPiTgq4Wc43ctsM+o46urrmPOiuAe+07fzlSB9OJVdpgDL0jPqXUVQ9ht7aq7kxOeJHRK+w==",
+ "license": "MIT"
+ },
"node_modules/boolbase": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
@@ -2754,6 +3694,46 @@
],
"license": "CC-BY-4.0"
},
+ "node_modules/ccount": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz",
+ "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/character-entities": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz",
+ "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/character-entities-html4": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz",
+ "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/character-entities-legacy": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz",
+ "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/chart.js": {
"version": "4.5.1",
"resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.5.1.tgz",
@@ -2783,6 +3763,74 @@
"url": "https://paulmillr.com/funding/"
}
},
+ "node_modules/ckeditor5": {
+ "version": "48.3.1",
+ "resolved": "https://registry.npmjs.org/ckeditor5/-/ckeditor5-48.3.1.tgz",
+ "integrity": "sha512-uuWdrM7mHVO0NsO3DTGDXp2zBkcuSYoS78+Ovpuci3B1pxzG7eHeLfeaNKIltWorhcWCxY4G+JTWOobcwflCTA==",
+ "license": "SEE LICENSE IN LICENSE.md",
+ "dependencies": {
+ "@ckeditor/ckeditor5-adapter-ckfinder": "48.3.1",
+ "@ckeditor/ckeditor5-alignment": "48.3.1",
+ "@ckeditor/ckeditor5-autoformat": "48.3.1",
+ "@ckeditor/ckeditor5-autosave": "48.3.1",
+ "@ckeditor/ckeditor5-basic-styles": "48.3.1",
+ "@ckeditor/ckeditor5-block-quote": "48.3.1",
+ "@ckeditor/ckeditor5-bookmark": "48.3.1",
+ "@ckeditor/ckeditor5-ckbox": "48.3.1",
+ "@ckeditor/ckeditor5-ckfinder": "48.3.1",
+ "@ckeditor/ckeditor5-clipboard": "48.3.1",
+ "@ckeditor/ckeditor5-cloud-services": "48.3.1",
+ "@ckeditor/ckeditor5-code-block": "48.3.1",
+ "@ckeditor/ckeditor5-core": "48.3.1",
+ "@ckeditor/ckeditor5-easy-image": "48.3.1",
+ "@ckeditor/ckeditor5-editor-balloon": "48.3.1",
+ "@ckeditor/ckeditor5-editor-classic": "48.3.1",
+ "@ckeditor/ckeditor5-editor-decoupled": "48.3.1",
+ "@ckeditor/ckeditor5-editor-inline": "48.3.1",
+ "@ckeditor/ckeditor5-editor-multi-root": "48.3.1",
+ "@ckeditor/ckeditor5-emoji": "48.3.1",
+ "@ckeditor/ckeditor5-engine": "48.3.1",
+ "@ckeditor/ckeditor5-enter": "48.3.1",
+ "@ckeditor/ckeditor5-essentials": "48.3.1",
+ "@ckeditor/ckeditor5-find-and-replace": "48.3.1",
+ "@ckeditor/ckeditor5-font": "48.3.1",
+ "@ckeditor/ckeditor5-fullscreen": "48.3.1",
+ "@ckeditor/ckeditor5-heading": "48.3.1",
+ "@ckeditor/ckeditor5-highlight": "48.3.1",
+ "@ckeditor/ckeditor5-horizontal-line": "48.3.1",
+ "@ckeditor/ckeditor5-html-embed": "48.3.1",
+ "@ckeditor/ckeditor5-html-support": "48.3.1",
+ "@ckeditor/ckeditor5-icons": "48.3.1",
+ "@ckeditor/ckeditor5-image": "48.3.1",
+ "@ckeditor/ckeditor5-indent": "48.3.1",
+ "@ckeditor/ckeditor5-language": "48.3.1",
+ "@ckeditor/ckeditor5-link": "48.3.1",
+ "@ckeditor/ckeditor5-list": "48.3.1",
+ "@ckeditor/ckeditor5-markdown-gfm": "48.3.1",
+ "@ckeditor/ckeditor5-media-embed": "48.3.1",
+ "@ckeditor/ckeditor5-mention": "48.3.1",
+ "@ckeditor/ckeditor5-minimap": "48.3.1",
+ "@ckeditor/ckeditor5-page-break": "48.3.1",
+ "@ckeditor/ckeditor5-paragraph": "48.3.1",
+ "@ckeditor/ckeditor5-paste-from-office": "48.3.1",
+ "@ckeditor/ckeditor5-remove-format": "48.3.1",
+ "@ckeditor/ckeditor5-restricted-editing": "48.3.1",
+ "@ckeditor/ckeditor5-select-all": "48.3.1",
+ "@ckeditor/ckeditor5-show-blocks": "48.3.1",
+ "@ckeditor/ckeditor5-source-editing": "48.3.1",
+ "@ckeditor/ckeditor5-special-characters": "48.3.1",
+ "@ckeditor/ckeditor5-style": "48.3.1",
+ "@ckeditor/ckeditor5-table": "48.3.1",
+ "@ckeditor/ckeditor5-typing": "48.3.1",
+ "@ckeditor/ckeditor5-ui": "48.3.1",
+ "@ckeditor/ckeditor5-undo": "48.3.1",
+ "@ckeditor/ckeditor5-upload": "48.3.1",
+ "@ckeditor/ckeditor5-utils": "48.3.1",
+ "@ckeditor/ckeditor5-watchdog": "48.3.1",
+ "@ckeditor/ckeditor5-widget": "48.3.1",
+ "@ckeditor/ckeditor5-word-count": "48.3.1"
+ }
+ },
"node_modules/color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
@@ -2803,6 +3851,24 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/color-parse": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/color-parse/-/color-parse-2.0.2.tgz",
+ "integrity": "sha512-eCtOz5w5ttWIUcaKLiktF+DxZO1R9KLNY/xhbV6CkhM7sR3GhVghmt6X6yOnzeaM24po+Z9/S1apbXMwA3Iepw==",
+ "license": "MIT",
+ "dependencies": {
+ "color-name": "^2.0.0"
+ }
+ },
+ "node_modules/color-parse/node_modules/color-name": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-2.1.1.tgz",
+ "integrity": "sha512-p2FdgwVx1a9yWBHP2wI0VgShkDpgN4kZISkxdNipGBJWpa5G6b04OINlVWCyJj0JmfvcPrgqt95E9k8yvaOJFg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.20"
+ }
+ },
"node_modules/colord": {
"version": "2.9.3",
"resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz",
@@ -2829,6 +3895,16 @@
"node": ">= 0.8"
}
},
+ "node_modules/comma-separated-tokens": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz",
+ "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/comment-parser": {
"version": "1.4.7",
"resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.7.tgz",
@@ -2989,6 +4065,19 @@
"node": ">=0.10.0"
}
},
+ "node_modules/decode-named-character-reference": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.3.0.tgz",
+ "integrity": "sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==",
+ "license": "MIT",
+ "dependencies": {
+ "character-entities": "^2.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/deep-is": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
@@ -3005,6 +4094,15 @@
"node": ">=0.4.0"
}
},
+ "node_modules/dequal": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
+ "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/detect-libc": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz",
@@ -3015,6 +4113,19 @@
"node": ">=8"
}
},
+ "node_modules/devlop": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz",
+ "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==",
+ "license": "MIT",
+ "dependencies": {
+ "dequal": "^2.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/dunder-proto": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
@@ -3119,6 +4230,16 @@
"node": ">= 0.4"
}
},
+ "node_modules/es-toolkit": {
+ "version": "1.45.1",
+ "resolved": "https://registry.npmjs.org/es-toolkit/-/es-toolkit-1.45.1.tgz",
+ "integrity": "sha512-/jhoOj/Fx+A+IIyDNOvO3TItGmlMKhtX8ISAHKE90c4b/k1tqaqEZ+uUqfpU8DMnW5cgNJv606zS55jGvza0Xw==",
+ "license": "MIT",
+ "workspaces": [
+ "docs",
+ "benchmarks"
+ ]
+ },
"node_modules/escalade": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
@@ -3458,6 +4579,12 @@
"node": ">=0.10.0"
}
},
+ "node_modules/extend": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
+ "license": "MIT"
+ },
"node_modules/fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
@@ -3702,6 +4829,12 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/fuzzysort": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/fuzzysort/-/fuzzysort-3.1.0.tgz",
+ "integrity": "sha512-sR9BNCjBg6LNgwvxlBd0sBABvQitkLzoVY9MYYROQVX/FvfJ4Mai9LsGhDgd8qYdds0bY77VzYd5iuB+v5rwQQ==",
+ "license": "MIT"
+ },
"node_modules/get-east-asian-width": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.6.0.tgz",
@@ -3953,6 +5086,231 @@
"node": ">= 0.4"
}
},
+ "node_modules/hast-util-embedded": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/hast-util-embedded/-/hast-util-embedded-3.0.0.tgz",
+ "integrity": "sha512-naH8sld4Pe2ep03qqULEtvYr7EjrLK2QHY8KJR6RJkTUjPGObe1vnx585uzem2hGra+s1q08DZZpfgDVYRbaXA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "hast-util-is-element": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-from-dom": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/hast-util-from-dom/-/hast-util-from-dom-5.0.1.tgz",
+ "integrity": "sha512-N+LqofjR2zuzTjCPzyDUdSshy4Ma6li7p/c3pA78uTwzFgENbgbUrm2ugwsOdcjI1muO+o6Dgzp9p8WHtn/39Q==",
+ "license": "ISC",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "hastscript": "^9.0.0",
+ "web-namespaces": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-has-property": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/hast-util-has-property/-/hast-util-has-property-3.0.0.tgz",
+ "integrity": "sha512-MNilsvEKLFpV604hwfhVStK0usFY/QmM5zX16bo7EjnAEGofr5YyI37kzopBlZJkHD4t887i+q/C8/tr5Q94cA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-is-body-ok-link": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/hast-util-is-body-ok-link/-/hast-util-is-body-ok-link-3.0.1.tgz",
+ "integrity": "sha512-0qpnzOBLztXHbHQenVB8uNuxTnm/QBFUOmdOSsEn7GnBtyY07+ENTWVFBAnXd/zEgd9/SUG3lRY7hSIBWRgGpQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-is-element": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-3.0.0.tgz",
+ "integrity": "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-minify-whitespace": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/hast-util-minify-whitespace/-/hast-util-minify-whitespace-1.0.1.tgz",
+ "integrity": "sha512-L96fPOVpnclQE0xzdWb/D12VT5FabA7SnZOUMtL1DbXmYiHJMXZvFkIZfiMmTCNJHUeO2K9UYNXoVyfz+QHuOw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "hast-util-embedded": "^3.0.0",
+ "hast-util-is-element": "^3.0.0",
+ "hast-util-whitespace": "^3.0.0",
+ "unist-util-is": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-parse-selector": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz",
+ "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-phrasing": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/hast-util-phrasing/-/hast-util-phrasing-3.0.1.tgz",
+ "integrity": "sha512-6h60VfI3uBQUxHqTyMymMZnEbNl1XmEGtOxxKYL7stY2o601COo62AWAYBQR9lZbYXYSBoxag8UpPRXK+9fqSQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "hast-util-embedded": "^3.0.0",
+ "hast-util-has-property": "^3.0.0",
+ "hast-util-is-body-ok-link": "^3.0.0",
+ "hast-util-is-element": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-to-dom": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/hast-util-to-dom/-/hast-util-to-dom-4.0.1.tgz",
+ "integrity": "sha512-z1VE7sZ8uFzS2baF3LEflX1IPw2gSzrdo3QFEsyoi23MkCVY3FoE9x6nLgOgjwJu8VNWgo+07iaxtONhDzKrUQ==",
+ "license": "ISC",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "property-information": "^7.0.0",
+ "web-namespaces": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-to-html": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz",
+ "integrity": "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "@types/unist": "^3.0.0",
+ "ccount": "^2.0.0",
+ "comma-separated-tokens": "^2.0.0",
+ "hast-util-whitespace": "^3.0.0",
+ "html-void-elements": "^3.0.0",
+ "mdast-util-to-hast": "^13.0.0",
+ "property-information": "^7.0.0",
+ "space-separated-tokens": "^2.0.0",
+ "stringify-entities": "^4.0.0",
+ "zwitch": "^2.0.4"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-to-mdast": {
+ "version": "10.1.2",
+ "resolved": "https://registry.npmjs.org/hast-util-to-mdast/-/hast-util-to-mdast-10.1.2.tgz",
+ "integrity": "sha512-FiCRI7NmOvM4y+f5w32jPRzcxDIz+PUqDwEqn1A+1q2cdp3B8Gx7aVrXORdOKjMNDQsD1ogOr896+0jJHW1EFQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "@types/mdast": "^4.0.0",
+ "@ungap/structured-clone": "^1.0.0",
+ "hast-util-phrasing": "^3.0.0",
+ "hast-util-to-html": "^9.0.0",
+ "hast-util-to-text": "^4.0.0",
+ "hast-util-whitespace": "^3.0.0",
+ "mdast-util-phrasing": "^4.0.0",
+ "mdast-util-to-hast": "^13.0.0",
+ "mdast-util-to-string": "^4.0.0",
+ "rehype-minify-whitespace": "^6.0.0",
+ "trim-trailing-lines": "^2.0.0",
+ "unist-util-position": "^5.0.0",
+ "unist-util-visit": "^5.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-to-text": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/hast-util-to-text/-/hast-util-to-text-4.0.2.tgz",
+ "integrity": "sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "@types/unist": "^3.0.0",
+ "hast-util-is-element": "^3.0.0",
+ "unist-util-find-after": "^5.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-whitespace": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz",
+ "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hastscript": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-9.0.1.tgz",
+ "integrity": "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "comma-separated-tokens": "^2.0.0",
+ "hast-util-parse-selector": "^4.0.0",
+ "property-information": "^7.0.0",
+ "space-separated-tokens": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
"node_modules/hookified": {
"version": "1.15.1",
"resolved": "https://registry.npmjs.org/hookified/-/hookified-1.15.1.tgz",
@@ -3985,6 +5343,16 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/html-void-elements": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz",
+ "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/https-proxy-agent": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
@@ -4620,6 +5988,16 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/longest-streak": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz",
+ "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/lru-cache": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
@@ -4653,6 +6031,16 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/markdown-table": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz",
+ "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/math-intrinsics": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
@@ -4673,6 +6061,242 @@
"url": "https://github.com/sponsors/wooorm"
}
},
+ "node_modules/mdast-util-find-and-replace": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz",
+ "integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "escape-string-regexp": "^5.0.0",
+ "unist-util-is": "^6.0.0",
+ "unist-util-visit-parents": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz",
+ "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/mdast-util-from-markdown": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.3.tgz",
+ "integrity": "sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "@types/unist": "^3.0.0",
+ "decode-named-character-reference": "^1.0.0",
+ "devlop": "^1.0.0",
+ "mdast-util-to-string": "^4.0.0",
+ "micromark": "^4.0.0",
+ "micromark-util-decode-numeric-character-reference": "^2.0.0",
+ "micromark-util-decode-string": "^2.0.0",
+ "micromark-util-normalize-identifier": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0",
+ "unist-util-stringify-position": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-gfm": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz",
+ "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==",
+ "license": "MIT",
+ "dependencies": {
+ "mdast-util-from-markdown": "^2.0.0",
+ "mdast-util-gfm-autolink-literal": "^2.0.0",
+ "mdast-util-gfm-footnote": "^2.0.0",
+ "mdast-util-gfm-strikethrough": "^2.0.0",
+ "mdast-util-gfm-table": "^2.0.0",
+ "mdast-util-gfm-task-list-item": "^2.0.0",
+ "mdast-util-to-markdown": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-gfm-autolink-literal": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz",
+ "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "ccount": "^2.0.0",
+ "devlop": "^1.0.0",
+ "mdast-util-find-and-replace": "^3.0.0",
+ "micromark-util-character": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-gfm-footnote": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz",
+ "integrity": "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "devlop": "^1.1.0",
+ "mdast-util-from-markdown": "^2.0.0",
+ "mdast-util-to-markdown": "^2.0.0",
+ "micromark-util-normalize-identifier": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-gfm-strikethrough": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz",
+ "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "mdast-util-from-markdown": "^2.0.0",
+ "mdast-util-to-markdown": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-gfm-table": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz",
+ "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "devlop": "^1.0.0",
+ "markdown-table": "^3.0.0",
+ "mdast-util-from-markdown": "^2.0.0",
+ "mdast-util-to-markdown": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-gfm-task-list-item": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz",
+ "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "devlop": "^1.0.0",
+ "mdast-util-from-markdown": "^2.0.0",
+ "mdast-util-to-markdown": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-newline-to-break": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-newline-to-break/-/mdast-util-newline-to-break-2.0.0.tgz",
+ "integrity": "sha512-MbgeFca0hLYIEx/2zGsszCSEJJ1JSCdiY5xQxRcLDDGa8EPvlLPupJ4DSajbMPAnC0je8jfb9TiUATnxxrHUog==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "mdast-util-find-and-replace": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-phrasing": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz",
+ "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "unist-util-is": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-to-hast": {
+ "version": "13.2.1",
+ "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz",
+ "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "@types/mdast": "^4.0.0",
+ "@ungap/structured-clone": "^1.0.0",
+ "devlop": "^1.0.0",
+ "micromark-util-sanitize-uri": "^2.0.0",
+ "trim-lines": "^3.0.0",
+ "unist-util-position": "^5.0.0",
+ "unist-util-visit": "^5.0.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-to-markdown": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz",
+ "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "@types/unist": "^3.0.0",
+ "longest-streak": "^3.0.0",
+ "mdast-util-phrasing": "^4.0.0",
+ "mdast-util-to-string": "^4.0.0",
+ "micromark-util-classify-character": "^2.0.0",
+ "micromark-util-decode-string": "^2.0.0",
+ "unist-util-visit": "^5.0.0",
+ "zwitch": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-to-string": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz",
+ "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
"node_modules/mdn-data": {
"version": "2.27.1",
"resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.27.1.tgz",
@@ -4716,6 +6340,569 @@
"node": ">= 8"
}
},
+ "node_modules/micromark": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz",
+ "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@types/debug": "^4.0.0",
+ "debug": "^4.0.0",
+ "decode-named-character-reference": "^1.0.0",
+ "devlop": "^1.0.0",
+ "micromark-core-commonmark": "^2.0.0",
+ "micromark-factory-space": "^2.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-chunked": "^2.0.0",
+ "micromark-util-combine-extensions": "^2.0.0",
+ "micromark-util-decode-numeric-character-reference": "^2.0.0",
+ "micromark-util-encode": "^2.0.0",
+ "micromark-util-normalize-identifier": "^2.0.0",
+ "micromark-util-resolve-all": "^2.0.0",
+ "micromark-util-sanitize-uri": "^2.0.0",
+ "micromark-util-subtokenize": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-core-commonmark": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz",
+ "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "decode-named-character-reference": "^1.0.0",
+ "devlop": "^1.0.0",
+ "micromark-factory-destination": "^2.0.0",
+ "micromark-factory-label": "^2.0.0",
+ "micromark-factory-space": "^2.0.0",
+ "micromark-factory-title": "^2.0.0",
+ "micromark-factory-whitespace": "^2.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-chunked": "^2.0.0",
+ "micromark-util-classify-character": "^2.0.0",
+ "micromark-util-html-tag-name": "^2.0.0",
+ "micromark-util-normalize-identifier": "^2.0.0",
+ "micromark-util-resolve-all": "^2.0.0",
+ "micromark-util-subtokenize": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-extension-gfm": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz",
+ "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==",
+ "license": "MIT",
+ "dependencies": {
+ "micromark-extension-gfm-autolink-literal": "^2.0.0",
+ "micromark-extension-gfm-footnote": "^2.0.0",
+ "micromark-extension-gfm-strikethrough": "^2.0.0",
+ "micromark-extension-gfm-table": "^2.0.0",
+ "micromark-extension-gfm-tagfilter": "^2.0.0",
+ "micromark-extension-gfm-task-list-item": "^2.0.0",
+ "micromark-util-combine-extensions": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-extension-gfm-autolink-literal": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz",
+ "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==",
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-sanitize-uri": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-extension-gfm-footnote": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz",
+ "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==",
+ "license": "MIT",
+ "dependencies": {
+ "devlop": "^1.0.0",
+ "micromark-core-commonmark": "^2.0.0",
+ "micromark-factory-space": "^2.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-normalize-identifier": "^2.0.0",
+ "micromark-util-sanitize-uri": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-extension-gfm-strikethrough": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz",
+ "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==",
+ "license": "MIT",
+ "dependencies": {
+ "devlop": "^1.0.0",
+ "micromark-util-chunked": "^2.0.0",
+ "micromark-util-classify-character": "^2.0.0",
+ "micromark-util-resolve-all": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-extension-gfm-table": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz",
+ "integrity": "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==",
+ "license": "MIT",
+ "dependencies": {
+ "devlop": "^1.0.0",
+ "micromark-factory-space": "^2.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-extension-gfm-tagfilter": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz",
+ "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==",
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-types": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-extension-gfm-task-list-item": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz",
+ "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==",
+ "license": "MIT",
+ "dependencies": {
+ "devlop": "^1.0.0",
+ "micromark-factory-space": "^2.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-factory-destination": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz",
+ "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-factory-label": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz",
+ "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "devlop": "^1.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-factory-space": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz",
+ "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-factory-title": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz",
+ "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-factory-space": "^2.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-factory-whitespace": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz",
+ "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-factory-space": "^2.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-character": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz",
+ "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-chunked": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz",
+ "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-symbol": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-classify-character": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz",
+ "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-combine-extensions": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz",
+ "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-chunked": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-decode-numeric-character-reference": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz",
+ "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-symbol": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-decode-string": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz",
+ "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "decode-named-character-reference": "^1.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-decode-numeric-character-reference": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-encode": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz",
+ "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/micromark-util-html-tag-name": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz",
+ "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/micromark-util-normalize-identifier": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz",
+ "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-symbol": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-resolve-all": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz",
+ "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-sanitize-uri": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz",
+ "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-encode": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-subtokenize": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz",
+ "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "devlop": "^1.0.0",
+ "micromark-util-chunked": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-symbol": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz",
+ "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/micromark-util-types": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz",
+ "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT"
+ },
"node_modules/micromatch": {
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
@@ -5268,6 +7455,16 @@
"signal-exit": "^3.0.2"
}
},
+ "node_modules/property-information": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.2.0.tgz",
+ "integrity": "sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/proxy-from-env": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz",
@@ -5500,6 +7697,140 @@
"integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==",
"license": "MIT"
},
+ "node_modules/rehype-dom-parse": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/rehype-dom-parse/-/rehype-dom-parse-5.0.2.tgz",
+ "integrity": "sha512-8CqP11KaqvtWsMqVEC2yM3cZWZsDNqqpr8nPvogjraLuh45stabgcpXadCAxu1n6JaUNJ/Xr3GIqXP7okbNqLg==",
+ "license": "ISC",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "hast-util-from-dom": "^5.0.0",
+ "unified": "^11.0.0"
+ }
+ },
+ "node_modules/rehype-dom-stringify": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/rehype-dom-stringify/-/rehype-dom-stringify-4.0.2.tgz",
+ "integrity": "sha512-2HVFYbtmm5W3C2j8QsV9lcHdIMc2Yn/ytlPKcSC85/tRx2haZbU8V67Wxyh8STT38ZClvKlZ993Me/Hw8g88Aw==",
+ "license": "ISC",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "hast-util-to-dom": "^4.0.0",
+ "unified": "^11.0.0"
+ }
+ },
+ "node_modules/rehype-minify-whitespace": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/rehype-minify-whitespace/-/rehype-minify-whitespace-6.0.2.tgz",
+ "integrity": "sha512-Zk0pyQ06A3Lyxhe9vGtOtzz3Z0+qZ5+7icZ/PL/2x1SHPbKao5oB/g/rlc6BCTajqBb33JcOe71Ye1oFsuYbnw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "hast-util-minify-whitespace": "^1.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/rehype-remark": {
+ "version": "10.0.1",
+ "resolved": "https://registry.npmjs.org/rehype-remark/-/rehype-remark-10.0.1.tgz",
+ "integrity": "sha512-EmDndlb5NVwXGfUa4c9GPK+lXeItTilLhE6ADSaQuHr4JUlKw9MidzGzx4HpqZrNCt6vnHmEifXQiiA+CEnjYQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "@types/mdast": "^4.0.0",
+ "hast-util-to-mdast": "^10.0.0",
+ "unified": "^11.0.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-breaks": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/remark-breaks/-/remark-breaks-4.0.0.tgz",
+ "integrity": "sha512-IjEjJOkH4FuJvHZVIW0QCDWxcG96kCq7An/KVH2NfJe6rKZU2AsHeB3OEjPNRxi4QC34Xdx7I2KGYn6IpT7gxQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "mdast-util-newline-to-break": "^2.0.0",
+ "unified": "^11.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-gfm": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.1.tgz",
+ "integrity": "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "mdast-util-gfm": "^3.0.0",
+ "micromark-extension-gfm": "^3.0.0",
+ "remark-parse": "^11.0.0",
+ "remark-stringify": "^11.0.0",
+ "unified": "^11.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-parse": {
+ "version": "11.0.0",
+ "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz",
+ "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "mdast-util-from-markdown": "^2.0.0",
+ "micromark-util-types": "^2.0.0",
+ "unified": "^11.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-rehype": {
+ "version": "11.1.2",
+ "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.2.tgz",
+ "integrity": "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "@types/mdast": "^4.0.0",
+ "mdast-util-to-hast": "^13.0.0",
+ "unified": "^11.0.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-stringify": {
+ "version": "11.0.0",
+ "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz",
+ "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "mdast-util-to-markdown": "^2.0.0",
+ "unified": "^11.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
"node_modules/require-from-string": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
@@ -6119,6 +8450,16 @@
"node": ">=0.10.0"
}
},
+ "node_modules/space-separated-tokens": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz",
+ "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/spdx-correct": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz",
@@ -6185,6 +8526,20 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/stringify-entities": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz",
+ "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==",
+ "license": "MIT",
+ "dependencies": {
+ "character-entities-html4": "^2.0.0",
+ "character-entities-legacy": "^3.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/strip-ansi": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz",
@@ -6759,6 +9114,16 @@
"integrity": "sha512-HeMHCO9yLPvP9k0apGSdPUWrUbLnxUKNFzgUoZp1PHCLploIX/4DSQ7V8H25ef+h4iO9n0he7ImfcndnN6nDrQ==",
"license": "MIT"
},
+ "node_modules/trim-lines": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz",
+ "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/trim-newlines": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz",
@@ -6768,6 +9133,26 @@
"node": ">=8"
}
},
+ "node_modules/trim-trailing-lines": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-2.1.0.tgz",
+ "integrity": "sha512-5UR5Biq4VlVOtzqkm2AZlgvSlDJtME46uV0br0gENbwN4l5+mMKT4b9gJKqWtuL2zAIqajGJGuvbCbcAJUZqBg==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/trough": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz",
+ "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/ts-api-utils": {
"version": "2.5.0",
"resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz",
@@ -6871,6 +9256,119 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/unified": {
+ "version": "11.0.5",
+ "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz",
+ "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "bail": "^2.0.0",
+ "devlop": "^1.0.0",
+ "extend": "^3.0.0",
+ "is-plain-obj": "^4.0.0",
+ "trough": "^2.0.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unified/node_modules/is-plain-obj": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz",
+ "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/unist-util-find-after": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/unist-util-find-after/-/unist-util-find-after-5.0.0.tgz",
+ "integrity": "sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "unist-util-is": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-is": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz",
+ "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-position": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz",
+ "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-stringify-position": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz",
+ "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-visit": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz",
+ "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "unist-util-is": "^6.0.0",
+ "unist-util-visit-parents": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-visit-parents": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz",
+ "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "unist-util-is": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
"node_modules/unrs-resolver": {
"version": "1.12.2",
"resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.12.2.tgz",
@@ -6967,6 +9465,12 @@
"spdx-expression-parse": "^3.0.0"
}
},
+ "node_modules/vanilla-colorful": {
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/vanilla-colorful/-/vanilla-colorful-0.7.2.tgz",
+ "integrity": "sha512-z2YZusTFC6KnLERx1cgoIRX2CjPRP0W75N+3CC6gbvdX5Ch47rZkEMGO2Xnf+IEmi3RiFLxS18gayMA27iU7Kg==",
+ "license": "MIT"
+ },
"node_modules/varint": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz",
@@ -6974,6 +9478,34 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/vfile": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz",
+ "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "vfile-message": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/vfile-message": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz",
+ "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "unist-util-stringify-position": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
"node_modules/vite": {
"version": "8.1.5",
"resolved": "https://registry.npmjs.org/vite/-/vite-8.1.5.tgz",
@@ -7376,6 +9908,16 @@
"typescript": ">=5.0.0"
}
},
+ "node_modules/web-namespaces": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz",
+ "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/which": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
@@ -7465,6 +10007,16 @@
"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",
+ "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
}
}
}
diff --git a/package.json b/package.json
index ef0bc96..8be4a4f 100644
--- a/package.json
+++ b/package.json
@@ -55,6 +55,7 @@
"axios": "^1.17.0",
"bootstrap": "^5.3.8",
"chart.js": "^4.4.0",
+ "ckeditor5": "^48.3.1",
"cropperjs": "^1.6.1",
"glightbox": "^3.2.0",
"meow": "^9.0.0",
diff --git a/resources/js/vendor/ckeditor/.gitignore b/resources/js/vendor/ckeditor/.gitignore
deleted file mode 100644
index 3c3629e..0000000
--- a/resources/js/vendor/ckeditor/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-node_modules
diff --git a/resources/js/vendor/ckeditor/LICENSE.md b/resources/js/vendor/ckeditor/LICENSE.md
deleted file mode 100644
index 95eabee..0000000
--- a/resources/js/vendor/ckeditor/LICENSE.md
+++ /dev/null
@@ -1,49 +0,0 @@
-Software License Agreement
-==========================
-
-Copyright (c) 2014-2021, CKSource - Frederico Knabben. All rights reserved.
-
-Online builder code samples are licensed under the terms of the MIT License (see Appendix A):
-
- http://en.wikipedia.org/wiki/MIT_License
-
-CKEditor 5 collaboration features are only available under a commercial license. [Contact us](https://ckeditor.com/contact/) for more details.
-
-Free 30-days trials of CKEditor 5 collaboration features are available:
- * https://ckeditor.com/collaboration/ - Real-time collaboration (with all features).
- * https://ckeditor.com/collaboration/comments/ - Inline comments feature (without real-time collaborative editing).
- * https://ckeditor.com/collaboration/track-changes/ - Track changes feature (without real-time collaborative editing).
-
-Trademarks
-----------
-
-CKEditor is a trademark of CKSource - Frederico Knabben. All other brand
-and product names are trademarks, registered trademarks or service
-marks of their respective holders.
-
----
-
-Appendix A: The MIT License
----------------------------
-
-The MIT License (MIT)
-
-Copyright (c) 2014-2021, CKSource - Frederico Knabben
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
diff --git a/resources/js/vendor/ckeditor/README.md b/resources/js/vendor/ckeditor/README.md
deleted file mode 100644
index 9290930..0000000
--- a/resources/js/vendor/ckeditor/README.md
+++ /dev/null
@@ -1,68 +0,0 @@
-# CKEditor 5 editor generated with the online builder
-
-This repository presents a CKEditor 5 editor build generated by the [Online builder tool](https://ckeditor.com/ckeditor-5/online-builder)
-
-## Quick start
-
-1. Open the `sample/index.html` page in the browser.
-
-If you picked the real-time collaboration plugins:
-
-2. Fill the dialog with correct token, websocket and upload URL endpoints. If you do not have these yet or do not know their meaning, [contact us](https://ckeditor.com/contact/).
-
-3. Copy the URL and share it or paste in another tab to enjoy real-time collaborative editing.
-
-If you picked the non-real-time collaboration plugins:
-
-2. Fill the prompt with the license key. If you do not have the license key yet [contact us](https://ckeditor.com/contact/).
-
-## Configuring build
-
-Changes like changing toolbar items, changing order of icons or customizing plugin configurations should be relatively easy to make. Open the `sample/index.html` file and edit the script that initialized the CKEditor 5. Save the file and refresh the browser. That's all.
-
-*Note:* If you have any problems with browser caching use the `Ctrl + R` or `Cmd + R` shortcut depending on your system.
-
-However if you want to remove or add a plugin to the build you need to follow the next step of this guide.
-
-Note that it is also possible to go back to the [Online builder tool](https://ckeditor.com/ckeditor-5/online-builder) and pick other set of plugins. But we encourage you to try the harder way and to learn the principles of Node.js and CKEditor 5 ecosystems that will allow you to do more cool things in the future!
-
-### Installation
-
-In order to rebuild the application you need to install all dependencies first. To do it, open the terminal in the project directory and type:
-
-```
-npm install
-```
-
-Make sure that you have the `node` and `npm` installed first. If not, then follow the instructions on the [Node.js documentation page](https://nodejs.org/en/).
-
-### Adding or removing plugins
-
-Now you can install additional plugin in the build. Just follow the [Adding a plugin to an editor tutorial](https://ckeditor.com/docs/ckeditor5/latest/builds/guides/integration/installing-plugins.html#adding-a-plugin-to-an-editor)
-
-### Rebuilding editor
-
-If you have already done the [Installation](#installation) and [Adding or removing plugins](#adding-or-removing-plugins) steps, you're ready to rebuild the editor by running the following command:
-
-```
-npm run build
-```
-
-This will build the CKEditor 5 to the `build` directory. You can open your browser and you should be able to see the changes you've made in the code. If not, then try to refresh also the browser cache by typing `Ctrl + R` or `Cmd + R` depending on your system.
-
-## What's next?
-
-Follow the guides available on https://ckeditor.com/docs/ckeditor5/latest/framework/index.html and enjoy the document editing.
-
-## FAQ
-| Where is the place to report bugs and feature requests?
-
-You can create an issue on https://github.com/ckeditor/ckeditor5/issues including the build id - `unyb7c61pdjq-xt0bz4ltrghq`. Make sure that the question / problem is unique, please look for a possibly asked questions in the search box. Duplicates will be closed.
-
-| Where can I learn more about the CKEditor 5 framework?
-
-Here: https://ckeditor.com/docs/ckeditor5/latest/framework/
-
-| Is it possible to use online builder with common frameworks like React, Vue or Angular?
-
-Not yet, but it these integrations will be available at some point in the future.
diff --git a/resources/js/vendor/ckeditor/build/ckeditor.js b/resources/js/vendor/ckeditor/build/ckeditor.js
deleted file mode 100644
index c0a6792..0000000
--- a/resources/js/vendor/ckeditor/build/ckeditor.js
+++ /dev/null
@@ -1,119819 +0,0 @@
-(function(d){ const l = d['fr'] = d['fr'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"%0 sur %1",Accept:"","Align cell text to the bottom":"Aligner le texte en bas","Align cell text to the center":"Aligner la cellule au centre","Align cell text to the left":"Aligner la cellule à gauche","Align cell text to the middle":"Aligner le texte au milieu","Align cell text to the right":"Aligner la cellule à droite","Align cell text to the top":"Aligner le texte en haut","Align center":"Centrer","Align left":"Aligner à gauche","Align right":"Aligner à droite","Align table to the left":"Aligner le tableau à gauche","Align table to the right":"Aligner le tableau à droite",Alignment:"Alignement",All:"Tous","Almost equal to":"Presque égal à",Angle:"Angle","Approximately equal to":"Environ égal à",Aquamarine:"Bleu vert",Arrows:"Flèches","Asterisk operator":"Astérisque","Austral sign":"Austral","back with leftwards arrow above":"Précédent avec flèche vers la gauche",Background:"Fond",Big:"Grand","Bitcoin sign":"Bitcoin",Black:"Noir","Block quote":"Citation","Block styles":"Styles de bloc",Blue:"Bleu","Blue marker":"Marqueur bleu",Bold:"Gras",Border:"Bordure","Break text":"Saut de ligne","Bulleted List":"Liste à puces","Bulleted list styles toolbar":"Barre d'outils des styles de liste à puce",Cancel:"Annuler","Caption for image: %0":"Légende de l'image : %0","Caption for the image":"Légende de l'image","Cedi sign":"Cédi","Cell properties":"Propriétés de la cellule","Cent sign":"Centime","Center table":"Centrer le tableau ","Centered image":"Image centrée","Change image text alternative":"Changer le texte alternatif à l’image","Character categories":"Catégories de caractères","Characters: %0":"Caractères : %0","Choose heading":"Choisir l'en-tête",Circle:"Cercle",Code:"Code","Colon sign":"Deux points",Color:"Couleur","Color picker":"Pipette à couleurs",Column:"Colonne","Contains as member":"Contient","Copyright sign":"Copyright","Cruzeiro sign":"Cruzeiro",Currency:"Devise","Currency sign":"Symbole monétaire",Dashed:"Tirets",Decimal:"Chiffres","Decimal with leading zero":"Chiffres avec des zéros supplémentaire","Decrease indent":"Diminuer le retrait",Default:"Par défaut","Degree sign":"Degré","Delete column":"Supprimer la colonne","Delete row":"Supprimer la ligne","Dim grey":"Gris pâle",Dimensions:"Dimensions",Disc:"Disque","Division sign":"Division","Document colors":"Couleurs du document","Dollar sign":"Dollar","Dong sign":"Dong",Dotted:"Pointillés",Double:"Double","Double dagger":"Croix de Lorraine","Double exclamation mark":"Double point d'exclamation","Double low-9 quotation mark":"Guillemet-virgule double inférieur","Double question mark":"Double point d'interrogation",Downloadable:"Fichier téléchargeable","downwards arrow to bar":"Flèche vers le bas avec barre de fin","downwards dashed arrow":"Flèche en pointillés vers le bas","downwards double arrow":"Double flèche vers le bas","downwards simple arrow":"flèche simple vers le bas","Drachma sign":"Drachme","Dropdown toolbar":"Barre d'outils dans un menu déroulant","Edit block":"Modifier le bloc","Edit link":"Modifier le lien","Editor block content toolbar":"Barre d'outils du contenu du bloc éditeur","Editor contextual toolbar":"Barre d'outils contextuelle de l'éditeur","Editor editing area: %0":"Zone d'édition de l'éditeur : %0","Editor toolbar":"Barre d'outils de l'éditeur","Element of":"Appartient à","Em dash":"Tiret long","Empty set":"Élément vide","En dash":"Tiret","end with leftwards arrow above":"Fin avec flèche vers la gauche","Enter image caption":"Saisir la légende de l’image","Enter table caption":"Saisir la légende du tableau","Euro sign":"Euro","Euro-currency sign":"Symbole monétaire de l'euro","Exclamation question mark":"Point exclamation et question",Find:"Rechercher","Find and replace":"Rechercher et remplacer","Find in text…":"Rechercher dans le texte...","Font Background Color":"Couleur d'arrière-plan","Font Color":"Couleur de police","Font Family":"Police","Font Size":"Taille de police","For all":"Pour tout","Fraction slash":"Fraction","French franc sign":"Franc français","Full size image":"Image taille réelle","German penny sign":"Pfennig","Greater-than or equal to":"Signe supérieur ou égal","Greater-than sign":"Signe supérieur",Green:"Vert","Green marker":"Marqueur vert","Green pen":"Crayon vert",Grey:"Gris",Groove:"Rainuré","Guarani sign":"Guarani","Header column":"Colonne d'entête","Header row":"Ligne d'entête",Heading:"En-tête","Heading 1":"Titre 1","Heading 2":"Titre 2","Heading 3":"Titre 3","Heading 4":"Titre 4","Heading 5":"Titre 5","Heading 6":"Titre 6",Height:"Hauteur",HEX:"",Highlight:"Surlignage","Horizontal ellipsis":"Trois points","Horizontal line":"Ligne horizontale","Horizontal text alignment toolbar":"Barre d'outils pour modifier l'alignement horizontal du texte","Hryvnia sign":"Hryvnia","HTML object":"Objet HTML",Huge:"Enorme","Identical to":"Identique à","Image resize list":"Liste des tailles d'images","Image toolbar":"Barre d'outils des images","image widget":"Objet image","In line":"Aligné","Increase indent":"Augmenter le retrait","Indian rupee sign":"Roupie indienne",Infinity:"Infini",Insert:"Insérer","Insert code block":"Insérer un bloc de code","Insert column left":"Insérer une colonne à gauche","Insert column right":"Insérer une colonne à droite","Insert image":"Insérer une image","Insert image via URL":"Insérer une image à partir d'une URL","Insert media":"Insérer un média","Insert paragraph after block":"Insérer du texte après ce bloc","Insert paragraph before block":"Insérer du texte avant ce bloc","Insert row above":"Insérer une ligne au-dessus","Insert row below":"Insérer une ligne en-dessous","Insert table":"Insérer un tableau",Inset:"Relief intérieur",Integral:"Intégrale",Intersection:"Intersection","Inverted exclamation mark":"Point d'exclamation inversé","Inverted question mark":"Point d'interrogation inversé",Italic:"Italique",Justify:"Justifier","Justify cell text":"Justifier le contenu de la cellule","Kip sign":"Kip",Latin:"Latin","Latin capital letter a with breve":"A bref majuscule","Latin capital letter a with macron":"A barre majuscule","Latin capital letter a with ogonek":"A ogonek majuscule","Latin capital letter c with acute":"C accent aigu majuscule","Latin capital letter c with caron":"C caron majuscule","Latin capital letter c with circumflex":"C circonflexe majuscule","Latin capital letter c with dot above":"C point suscrit majuscule","Latin capital letter d with caron":"D caron majuscule","Latin capital letter d with stroke":"D barré majuscule","Latin capital letter e with breve":"E bref majuscule","Latin capital letter e with caron":"E caron majuscule","Latin capital letter e with dot above":"E point suscrit majuscule","Latin capital letter e with macron":"E macron majuscule","Latin capital letter e with ogonek":"E ogonek majuscule","Latin capital letter eng":"Eng majuscule","Latin capital letter g with breve":"G bref majuscule","Latin capital letter g with cedilla":"G cédille majuscule","Latin capital letter g with circumflex":"G accent circonflexe majuscule","Latin capital letter g with dot above":"G point suscrit majuscule","Latin capital letter h with circumflex":"H accent circonflexe majuscule","Latin capital letter h with stroke":"H barré majuscule","Latin capital letter i with breve":"I bref majuscule","Latin capital letter i with dot above":"I point suscrit majuscule","Latin capital letter i with macron":"I macron majuscule","Latin capital letter i with ogonek":"I ogonek majuscule","Latin capital letter i with tilde":"I tilde majuscule","Latin capital letter j with circumflex":"J accent circonflexe majuscule","Latin capital letter k with cedilla":"K cédille majuscule","Latin capital letter l with acute":"L accent aigu majuscule","Latin capital letter l with caron":"L caron majuscule","Latin capital letter l with cedilla":"L cédille majuscule","Latin capital letter l with middle dot":"L point médian majuscule","Latin capital letter l with stroke":"L barré majuscule","Latin capital letter n with acute":"N accent aigu majuscule","Latin capital letter n with caron":"N caron majuscule","Latin capital letter n with cedilla":"N cédille majuscule","Latin capital letter o with breve":"O bref majuscule","Latin capital letter o with double acute":"O double accent aigu majuscule","Latin capital letter o with macron":"O macron majuscule","Latin capital letter r with acute":"R accent aigu majuscule","Latin capital letter r with caron":"R caron majuscule","Latin capital letter r with cedilla":"R cédille majuscule","Latin capital letter s with acute":"S accent aigu majuscule","Latin capital letter s with caron":"S caron majuscule","Latin capital letter s with cedilla":"S cédille majuscule","Latin capital letter s with circumflex":"S circonflexe majuscule","Latin capital letter t with caron":"T caron majuscule","Latin capital letter t with cedilla":"T cédille majuscule","Latin capital letter t with stroke":"T barré majuscule","Latin capital letter u with breve":"U bref majuscule","Latin capital letter u with double acute":"U double accent aigu majuscule","Latin capital letter u with macron":"U macron majuscule","Latin capital letter u with ogonek":"U ogonek majuscule","Latin capital letter u with ring above":"U rond en chef majuscule","Latin capital letter u with tilde":"U tilde majuscule","Latin capital letter w with circumflex":"W circonflexe majuscule","Latin capital letter y with circumflex":"Y circonflexe majuscule","Latin capital letter y with diaeresis":"Y tréma majuscule","Latin capital letter z with acute":"Z accent circonflexe majuscule","Latin capital letter z with caron":"Z caron majuscule","Latin capital letter z with dot above":"Z point suscrit majuscule","Latin capital ligature ij":"Digramme soudé IJ majuscule","Latin capital ligature oe":"O-E entrelacé majuscule","Latin small letter a with breve":"A bref minuscule","Latin small letter a with macron":"A barre minuscule","Latin small letter a with ogonek":"A ogonek minuscule","Latin small letter c with acute":"C accent aigu minuscule","Latin small letter c with caron":"C caron minuscule","Latin small letter c with circumflex":"C circonflexe minuscule","Latin small letter c with dot above":"C point suscrit minuscule","Latin small letter d with caron":"C caron minuscule","Latin small letter d with stroke":"D barré minuscule","Latin small letter dotless i":"I sans point minuscule","Latin small letter e with breve":"E bref minuscule","Latin small letter e with caron":"E caron minuscule","Latin small letter e with dot above":"E point suscrit minuscule","Latin small letter e with macron":"E macron minuscule","Latin small letter e with ogonek":"E ogonek minuscule","Latin small letter eng":"Eng minuscule","Latin small letter f with hook":"Fonction","Latin small letter g with breve":"G bref minuscule","Latin small letter g with cedilla":"G cédille minuscule","Latin small letter g with circumflex":"G accent circonflexe minuscule","Latin small letter g with dot above":"G point suscrit minuscule","Latin small letter h with circumflex":"H accent circonflexe minuscule","Latin small letter h with stroke":"H barré minuscule","Latin small letter i with breve":"I bref minuscule","Latin small letter i with macron":"I macron minuscule","Latin small letter i with ogonek":"I ogonek minuscule","Latin small letter i with tilde":"I tilde minuscule","Latin small letter j with circumflex":"J accent circonflexe minuscule","Latin small letter k with cedilla":"K cédille minuscule","Latin small letter kra":"Kra minuscule","Latin small letter l with acute":"L accent aigu minuscule","Latin small letter l with caron":"L caron minuscule","Latin small letter l with cedilla":"L cédille minuscule","Latin small letter l with middle dot":"L point médian minuscule","Latin small letter l with stroke":"L barré minuscule","Latin small letter long s":"S long minuscule","Latin small letter n preceded by apostrophe":"Apostrophe N minuscule","Latin small letter n with acute":"N accent aigu minuscule","Latin small letter n with caron":"N caron minuscule","Latin small letter n with cedilla":"N cédille minuscule","Latin small letter o with breve":"O bref minuscule","Latin small letter o with double acute":"O double accent aigu minuscule","Latin small letter o with macron":"O macron minuscule","Latin small letter r with acute":"R accent aigu minuscule","Latin small letter r with caron":"R caron minuscule","Latin small letter r with cedilla":"R cédille minuscule","Latin small letter s with acute":"S accent aigu minuscule","Latin small letter s with caron":"S caron minuscule","Latin small letter s with cedilla":"S cédille minuscule","Latin small letter s with circumflex":"S circonflexe minuscule","Latin small letter t with caron":"T caron minuscule","Latin small letter t with cedilla":"T cédille minuscule","Latin small letter t with stroke":"T barré minuscule","Latin small letter u with breve":"U bref minuscule","Latin small letter u with double acute":"U double accent aigu minuscule","Latin small letter u with macron":"U macron minuscule","Latin small letter u with ogonek":"U ogonek minuscule","Latin small letter u with ring above":"U rond en chef minuscule","Latin small letter u with tilde":"U tilde minuscule","Latin small letter w with circumflex":"W circonflexe minuscule","Latin small letter y with circumflex":"Y circonflexe minuscule","Latin small letter z with acute":"Z accent circonflexe minuscule","Latin small letter z with caron":"Z caron minuscule","Latin small letter z with dot above":"Z point suscrit minuscule","Latin small ligature ij":"Digramme soudé IJ minuscule","Latin small ligature oe":"O-E entrelacé minuscule","Left aligned image":"Image alignée à gauche","Left double quotation mark":"Guillemet-apostrophe double culbuté","Left single quotation mark":"Guillemet-apostrophe culbuté","Left-pointing double angle quotation mark":"Guillemet double vers la gauche","leftwards arrow to bar":"Flèche vers la gauche avec barre de fin","leftwards dashed arrow":"Flèche en pointillés vers la gauche","leftwards double arrow":"Double flèche vers la gauche","leftwards simple arrow":"flèche simple vers la gauche","Less-than or equal to":"Signe inférieur ou égal","Less-than sign":"Signe inférieur","Light blue":"Bleu clair","Light green":"Vert clair","Light grey":"Gris clair",Link:"Lien","Link image":"Lien d'image","Link URL":"URL du lien","Lira sign":"Lire","List properties":"Liste des propriétés","Livre tournois sign":"Livre tournois","Logical and":"Et logique","Logical or":"Ou logique","Lower-latin":"Lettres minuscules","Lower–roman":"Chiffres romains en minuscules",Macron:"Macron","Manat sign":"Manat","Match case":"Sensible à la casse",Mathematical:"Mathématique","Media URL":"URL de média","media widget":"Widget média","Merge cell down":"Fusionner la cellule en-dessous","Merge cell left":"Fusionner la cellule à gauche","Merge cell right":"Fusionner la cellule à droite","Merge cell up":"Fusionner la cellule au-dessus","Merge cells":"Fusionner les cellules","Mill sign":"Moulin","Minus sign":"Moins","Multiple styles":"Styles multiples","Multiplication sign":"Multiplication","N-ary product":"Produit","N-ary summation":"Somme",Nabla:"Nabla","Naira sign":"Naira","New sheqel sign":"Shekel",Next:"Suivant","Next result":"Résultat suivant",None:"Aucun","Nordic mark sign":"Mark nordique","Not an element of":"N'appartient pas à","Not equal to":"Différent de","Not sign":"Négation logique","Numbered List":"Liste numérotée","Numbered list styles toolbar":"Barre d'outils des styles de liste numérotée","on with exclamation mark with left right arrow above":"Allumé avec flèches vers la gauche et la droite","Open in a new tab":"Ouvrir dans un nouvel onglet","Open link in new tab":"Ouvrir le lien dans un nouvel onglet","Open media in new tab":"Ouvrir le média dans un nouvel onglet",Orange:"Orange",Original:"Taille originale",Outset:"Relief extérieur",Overline:"Macron long",Padding:"Remplissage pour aérer le texte",Paragraph:"Paragraphe","Paragraph sign":"Fin de paragraphe","Partial differential":"Partiellement différent","Paste the media URL in the input.":"Coller l'URL du média","Per mille sign":"Pour mille","Per ten thousand sign":"Pour dix milles","Peseta sign":"Peseta","Peso sign":"Peso","Pink marker":"Marqueur rose","Plain text":"Texte brut","Plus-minus sign":"Plus ou moins","Pound sign":"Livre sterling","Press Enter to type after or press Shift + Enter to type before the widget":"Appuyez sur la touche Entrée pour taper après ou sur Maj + Entrée pour taper avant le widget.",Previous:"Précedent","Previous result":"Résultat précédent","Proportional to":"Proportionnel à",Purple:"Violet","Question exclamation mark":"Point d'interrogation et exclamation",Red:"Rouge","Red pen":"Crayon rouge",Redo:"Restaurer","Registered sign":"Registered","Remove color":"Enlever la couleur","Remove Format":"Enlever le format","Remove highlight":"Enlever le surlignage",Replace:"Remplacer","Replace all":"Remplacer tout","Replace with…":"Remplacer par ...","Resize image":"Redimensionner l'image","Resize image to %0":"Redimensionner à %0","Resize image to the original size":"Appliquer les dimensions d'origine","Restore default":"Restaurer par défaut","Reversed order":"Ordre inversé","Reversed paragraph sign":"Fin de paragraphe inversé","Rich Text Editor":"Éditeur de texte enrichi",Ridge:"Relief","Right aligned image":"Image alignée à droite","Right double quotation mark":"Guillemet-apostrophe double","Right single quotation mark":"Guillemet-apostrophe","Right-pointing double angle quotation mark":"Guillemet double vers la droite","rightwards arrow to bar":"Flèche vers la droite avec barre de fin","rightwards dashed arrow":"Flèche en pointillés vers la droite","rightwards double arrow":"Double flèche vers la droite","rightwards simple arrow":"flèche simple vers la droite",Row:"Ligne","Ruble sign":"Rouble","Rupee sign":"Roupie",Save:"Enregistrer","Section sign":"Paragraphe","Select all":"Sélectionner tout","Select column":"Sélectionner la colonne","Select row":"Sélectionner la ligne","Show more items":"Montrer plus d'éléments","Show options":"Afficher les options","Side image":"Image latérale","Single left-pointing angle quotation mark":"Guillemet simple vers la gauche","Single low-9 quotation mark":"Guillemet-virgule inférieur","Single right-pointing angle quotation mark":"Guillemet simple vers la droite",Small:"Petit",Solid:"Continu","soon with rightwards arrow above":"Bientôt avec flèche vers la droite",Source:"Source","Special characters":"Caractères spéciaux","Spesmilo sign":"Spesmilo","Split cell horizontally":"Scinder la cellule horizontalement","Split cell vertically":"Scinder la cellule verticalement",Square:"Carré","Square root":"Racine carrée","Start at":"Commencer à","Start index must be greater than 0.":"L'indice de départ doit être supérieur à 0.",Strikethrough:"Barré",Style:"Style",Styles:"Styles","Table alignment toolbar":"Barre d'outils pour modifier l'alignement du tableau","Table cell text alignment":"Alignement du texte de la cellule","Table properties":"Propriétés du tableau","Table toolbar":"Barre d'outils des tableaux","Tenge sign":"Tenge",Text:"Texte","Text alignment":"Alignement du texte","Text alignment toolbar":"Barre d'outils d'alignement du texte","Text alternative":"Texte alternatif","Text highlight toolbar":"Barre d'outils du surlignage","Text styles":"Styles de texte","Text to find must not be empty.":"L'expression à rechercher ne doit pas être vide","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"La couleur est invalide. Essayez \"#FF0000\" ou \"rgb(255,0,0)\" ou \"red\".","The URL must not be empty.":"L'URL ne doit pas être vide.","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"La valeur est invalide. Essayez \"10px\" ou \"2em\" ou simplement \"2\".","There exists":"Existe","This link has no URL":"Ce lien n'a pas d'URL","This media URL is not supported.":"Cette URL de média n'est pas supportée.","Tilde operator":"Tilde",Tiny:"Minuscule","Tip: Find some text first in order to replace it.":"Astuce : rechercher une expression afin de la remplacer","Tip: Paste the URL into the content to embed faster.":"Astuce : Copier l'URL du média dans le contenu pour l'insérer plus rapidement","Toggle caption off":"Désactiver la légende","Toggle caption on":"Activer la légende","Toggle the circle list style":"Activer / désactiver le style de liste \"cercle\"","Toggle the decimal list style":"Activer / désactiver le style de liste \"chiffres\"","Toggle the decimal with leading zero list style":"Activer / désactiver le style de liste \"chiffres de mêmes longueurs\"","Toggle the disc list style":"Activer / désactiver le style de liste \"disque\"","Toggle the lower–latin list style":"Activer / désactiver le style de liste \"lettres minuscules\"","Toggle the lower–roman list style":"Activer / désactiver le style de liste \"chiffres romains en minuscules\"","Toggle the square list style":"Activer / désactiver le style de liste \"carré\"","Toggle the upper–latin list style":"Activer / désactiver le style de liste \"lettres majuscules\"","Toggle the upper–roman list style":"Activer / désactiver le style de liste \"chiffres romains en majuscules\"","top with upwards arrow above":"Haut avec flèche vers le haut","Trade mark sign":"Marque déposée","Tugrik sign":"Tugrik","Turkish lira sign":"Lire turque",Turquoise:"Turquoise","Two dot leader":"Deux points",Underline:"Souligné",Undo:"Annuler",Union:"Union",Unlink:"Supprimer le lien","up down arrow with base":"Flèche haut et bas avec barre de fin",Update:"Modifier","Update image URL":"Modifier l'URL de l'image","Upload failed":"Échec de l'envoi","Upload in progress":"Téléchargement en cours","Upper-latin":"Lettres majuscules","Upper-roman":"Chiffres romains en majuscules","upwards arrow to bar":"Flèche vers le haut avec barre de fin","upwards dashed arrow":"Flèche en pointillés vers le haut","upwards double arrow":"Double flèche vers le haut","upwards simple arrow":"flèche simple vers le haut","Vertical text alignment toolbar":"Barre d'outils pour modifier l'alignement vertical du texte","Vulgar fraction one half":"Un demi","Vulgar fraction one quarter":"Un quart","Vulgar fraction three quarters":"Trois quarts",White:"Blanc","Whole words only":"Mots entiers uniquement","Widget toolbar":"Barre d'outils du widget",Width:"Largeur","Won sign":"Won","Words: %0":"Mots : %0","Wrap text":"Retour à la ligne",Yellow:"Jaune","Yellow marker":"Marqueur jaune","Yen sign":"Yen"} );l.getPluralForm=function(n){return (n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
-/*!
- * @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.
- * For licensing, see LICENSE.md.
- */
-(function webpackUniversalModuleDefinition(root, factory) {
- if(typeof exports === 'object' && typeof module === 'object')
- module.exports = factory();
- else if(typeof define === 'function' && define.amd)
- define([], factory);
- else if(typeof exports === 'object')
- exports["ClassicEditor"] = factory();
- else
- root["ClassicEditor"] = factory();
-})(self, () => {
-return /******/ (() => { // webpackBootstrap
-/******/ var __webpack_modules__ = ({
-
-/***/ 525:
-/***/ (function(module) {
-
-/*!
-* sweetalert2 v11.6.5
-* Released under the MIT License.
-*/
-(function (global, factory) {
- true ? module.exports = factory() :
- 0;
-})(this, (function () { 'use strict';
-
- /**
- * This module contains `WeakMap`s for each effectively-"private property" that a `Swal` has.
- * For example, to set the private property "foo" of `this` to "bar", you can `privateProps.foo.set(this, 'bar')`
- * This is the approach that Babel will probably take to implement private methods/fields
- * https://github.com/tc39/proposal-private-methods
- * https://github.com/babel/babel/pull/7555
- * Once we have the changes from that PR in Babel, and our core class fits reasonable in *one module*
- * then we can use that language feature.
- */
-
- var privateProps = {
- awaitingPromise: new WeakMap(),
- promise: new WeakMap(),
- innerParams: new WeakMap(),
- domCache: new WeakMap()
- };
-
- const swalPrefix = 'swal2-';
-
- /**
- * @param {string[]} items
- * @returns {object}
- */
- const prefix = items => {
- const result = {};
- for (const i in items) {
- result[items[i]] = swalPrefix + items[i];
- }
- return result;
- };
- const swalClasses = prefix(['container', 'shown', 'height-auto', 'iosfix', 'popup', 'modal', 'no-backdrop', 'no-transition', 'toast', 'toast-shown', 'show', 'hide', 'close', 'title', 'html-container', 'actions', 'confirm', 'deny', 'cancel', 'default-outline', 'footer', 'icon', 'icon-content', 'image', 'input', 'file', 'range', 'select', 'radio', 'checkbox', 'label', 'textarea', 'inputerror', 'input-label', 'validation-message', 'progress-steps', 'active-progress-step', 'progress-step', 'progress-step-line', 'loader', 'loading', 'styled', 'top', 'top-start', 'top-end', 'top-left', 'top-right', 'center', 'center-start', 'center-end', 'center-left', 'center-right', 'bottom', 'bottom-start', 'bottom-end', 'bottom-left', 'bottom-right', 'grow-row', 'grow-column', 'grow-fullscreen', 'rtl', 'timer-progress-bar', 'timer-progress-bar-container', 'scrollbar-measure', 'icon-success', 'icon-warning', 'icon-info', 'icon-question', 'icon-error', 'no-war']);
- const iconTypes = prefix(['success', 'warning', 'info', 'question', 'error']);
-
- const consolePrefix = 'SweetAlert2:';
-
- /**
- * Filter the unique values into a new array
- *
- * @param {Array} arr
- * @returns {Array}
- */
- const uniqueArray = arr => {
- const result = [];
- for (let i = 0; i < arr.length; i++) {
- if (result.indexOf(arr[i]) === -1) {
- result.push(arr[i]);
- }
- }
- return result;
- };
-
- /**
- * Capitalize the first letter of a string
- *
- * @param {string} str
- * @returns {string}
- */
- const capitalizeFirstLetter = str => str.charAt(0).toUpperCase() + str.slice(1);
-
- /**
- * Standardize console warnings
- *
- * @param {string | Array} message
- */
- const warn = message => {
- console.warn(`${consolePrefix} ${typeof message === 'object' ? message.join(' ') : message}`);
- };
-
- /**
- * Standardize console errors
- *
- * @param {string} message
- */
- const error = message => {
- console.error(`${consolePrefix} ${message}`);
- };
-
- /**
- * Private global state for `warnOnce`
- *
- * @type {Array}
- * @private
- */
- const previousWarnOnceMessages = [];
-
- /**
- * Show a console warning, but only if it hasn't already been shown
- *
- * @param {string} message
- */
- const warnOnce = message => {
- if (!previousWarnOnceMessages.includes(message)) {
- previousWarnOnceMessages.push(message);
- warn(message);
- }
- };
-
- /**
- * Show a one-time console warning about deprecated params/methods
- *
- * @param {string} deprecatedParam
- * @param {string} useInstead
- */
- const warnAboutDeprecation = (deprecatedParam, useInstead) => {
- warnOnce(`"${deprecatedParam}" is deprecated and will be removed in the next major release. Please use "${useInstead}" instead.`);
- };
-
- /**
- * If `arg` is a function, call it (with no arguments or context) and return the result.
- * Otherwise, just pass the value through
- *
- * @param {Function | any} arg
- * @returns {any}
- */
- const callIfFunction = arg => typeof arg === 'function' ? arg() : arg;
-
- /**
- * @param {any} arg
- * @returns {boolean}
- */
- const hasToPromiseFn = arg => arg && typeof arg.toPromise === 'function';
-
- /**
- * @param {any} arg
- * @returns {Promise}
- */
- const asPromise = arg => hasToPromiseFn(arg) ? arg.toPromise() : Promise.resolve(arg);
-
- /**
- * @param {any} arg
- * @returns {boolean}
- */
- const isPromise = arg => arg && Promise.resolve(arg) === arg;
-
- /**
- * Gets the popup container which contains the backdrop and the popup itself.
- *
- * @returns {HTMLElement | null}
- */
- const getContainer = () => document.body.querySelector(`.${swalClasses.container}`);
-
- /**
- * @param {string} selectorString
- * @returns {HTMLElement | null}
- */
- const elementBySelector = selectorString => {
- const container = getContainer();
- return container ? container.querySelector(selectorString) : null;
- };
-
- /**
- * @param {string} className
- * @returns {HTMLElement | null}
- */
- const elementByClass = className => {
- return elementBySelector(`.${className}`);
- };
-
- /**
- * @returns {HTMLElement | null}
- */
- const getPopup = () => elementByClass(swalClasses.popup);
-
- /**
- * @returns {HTMLElement | null}
- */
- const getIcon = () => elementByClass(swalClasses.icon);
-
- /**
- * @returns {HTMLElement | null}
- */
- const getIconContent = () => elementByClass(swalClasses['icon-content']);
-
- /**
- * @returns {HTMLElement | null}
- */
- const getTitle = () => elementByClass(swalClasses.title);
-
- /**
- * @returns {HTMLElement | null}
- */
- const getHtmlContainer = () => elementByClass(swalClasses['html-container']);
-
- /**
- * @returns {HTMLElement | null}
- */
- const getImage = () => elementByClass(swalClasses.image);
-
- /**
- * @returns {HTMLElement | null}
- */
- const getProgressSteps$1 = () => elementByClass(swalClasses['progress-steps']);
-
- /**
- * @returns {HTMLElement | null}
- */
- const getValidationMessage = () => elementByClass(swalClasses['validation-message']);
-
- /**
- * @returns {HTMLElement | null}
- */
- const getConfirmButton = () => elementBySelector(`.${swalClasses.actions} .${swalClasses.confirm}`);
-
- /**
- * @returns {HTMLElement | null}
- */
- const getDenyButton = () => elementBySelector(`.${swalClasses.actions} .${swalClasses.deny}`);
-
- /**
- * @returns {HTMLElement | null}
- */
- const getInputLabel = () => elementByClass(swalClasses['input-label']);
-
- /**
- * @returns {HTMLElement | null}
- */
- const getLoader = () => elementBySelector(`.${swalClasses.loader}`);
-
- /**
- * @returns {HTMLElement | null}
- */
- const getCancelButton = () => elementBySelector(`.${swalClasses.actions} .${swalClasses.cancel}`);
-
- /**
- * @returns {HTMLElement | null}
- */
- const getActions = () => elementByClass(swalClasses.actions);
-
- /**
- * @returns {HTMLElement | null}
- */
- const getFooter = () => elementByClass(swalClasses.footer);
-
- /**
- * @returns {HTMLElement | null}
- */
- const getTimerProgressBar = () => elementByClass(swalClasses['timer-progress-bar']);
-
- /**
- * @returns {HTMLElement | null}
- */
- const getCloseButton = () => elementByClass(swalClasses.close);
-
- // https://github.com/jkup/focusable/blob/master/index.js
- const focusable = `
- a[href],
- area[href],
- input:not([disabled]),
- select:not([disabled]),
- textarea:not([disabled]),
- button:not([disabled]),
- iframe,
- object,
- embed,
- [tabindex="0"],
- [contenteditable],
- audio[controls],
- video[controls],
- summary
-`;
- /**
- * @returns {HTMLElement[]}
- */
- const getFocusableElements = () => {
- const focusableElementsWithTabindex = Array.from(getPopup().querySelectorAll('[tabindex]:not([tabindex="-1"]):not([tabindex="0"])'))
- // sort according to tabindex
- .sort((a, b) => {
- const tabindexA = parseInt(a.getAttribute('tabindex'));
- const tabindexB = parseInt(b.getAttribute('tabindex'));
- if (tabindexA > tabindexB) {
- return 1;
- } else if (tabindexA < tabindexB) {
- return -1;
- }
- return 0;
- });
- const otherFocusableElements = Array.from(getPopup().querySelectorAll(focusable)).filter(el => el.getAttribute('tabindex') !== '-1');
- return uniqueArray(focusableElementsWithTabindex.concat(otherFocusableElements)).filter(el => isVisible$1(el));
- };
-
- /**
- * @returns {boolean}
- */
- const isModal = () => {
- return hasClass(document.body, swalClasses.shown) && !hasClass(document.body, swalClasses['toast-shown']) && !hasClass(document.body, swalClasses['no-backdrop']);
- };
-
- /**
- * @returns {boolean}
- */
- const isToast = () => {
- return getPopup() && hasClass(getPopup(), swalClasses.toast);
- };
-
- /**
- * @returns {boolean}
- */
- const isLoading = () => {
- return getPopup().hasAttribute('data-loading');
- };
-
- // Remember state in cases where opening and handling a modal will fiddle with it.
- const states = {
- previousBodyPadding: null
- };
-
- /**
- * Securely set innerHTML of an element
- * https://github.com/sweetalert2/sweetalert2/issues/1926
- *
- * @param {HTMLElement} elem
- * @param {string} html
- */
- const setInnerHtml = (elem, html) => {
- elem.textContent = '';
- if (html) {
- const parser = new DOMParser();
- const parsed = parser.parseFromString(html, `text/html`);
- Array.from(parsed.querySelector('head').childNodes).forEach(child => {
- elem.appendChild(child);
- });
- Array.from(parsed.querySelector('body').childNodes).forEach(child => {
- if (child instanceof HTMLVideoElement || child instanceof HTMLAudioElement) {
- elem.appendChild(child.cloneNode(true)); // https://github.com/sweetalert2/sweetalert2/issues/2507
- } else {
- elem.appendChild(child);
- }
- });
- }
- };
-
- /**
- * @param {HTMLElement} elem
- * @param {string} className
- * @returns {boolean}
- */
- const hasClass = (elem, className) => {
- if (!className) {
- return false;
- }
- const classList = className.split(/\s+/);
- for (let i = 0; i < classList.length; i++) {
- if (!elem.classList.contains(classList[i])) {
- return false;
- }
- }
- return true;
- };
-
- /**
- * @param {HTMLElement} elem
- * @param {SweetAlertOptions} params
- */
- const removeCustomClasses = (elem, params) => {
- Array.from(elem.classList).forEach(className => {
- if (!Object.values(swalClasses).includes(className) && !Object.values(iconTypes).includes(className) && !Object.values(params.showClass).includes(className)) {
- elem.classList.remove(className);
- }
- });
- };
-
- /**
- * @param {HTMLElement} elem
- * @param {SweetAlertOptions} params
- * @param {string} className
- */
- const applyCustomClass = (elem, params, className) => {
- removeCustomClasses(elem, params);
- if (params.customClass && params.customClass[className]) {
- if (typeof params.customClass[className] !== 'string' && !params.customClass[className].forEach) {
- warn(`Invalid type of customClass.${className}! Expected string or iterable object, got "${typeof params.customClass[className]}"`);
- return;
- }
- addClass(elem, params.customClass[className]);
- }
- };
-
- /**
- * @param {HTMLElement} popup
- * @param {import('./renderers/renderInput').InputClass} inputClass
- * @returns {HTMLInputElement | null}
- */
- const getInput$1 = (popup, inputClass) => {
- if (!inputClass) {
- return null;
- }
- switch (inputClass) {
- case 'select':
- case 'textarea':
- case 'file':
- return popup.querySelector(`.${swalClasses.popup} > .${swalClasses[inputClass]}`);
- case 'checkbox':
- return popup.querySelector(`.${swalClasses.popup} > .${swalClasses.checkbox} input`);
- case 'radio':
- return popup.querySelector(`.${swalClasses.popup} > .${swalClasses.radio} input:checked`) || popup.querySelector(`.${swalClasses.popup} > .${swalClasses.radio} input:first-child`);
- case 'range':
- return popup.querySelector(`.${swalClasses.popup} > .${swalClasses.range} input`);
- default:
- return popup.querySelector(`.${swalClasses.popup} > .${swalClasses.input}`);
- }
- };
-
- /**
- * @param {HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement} input
- */
- const focusInput = input => {
- input.focus();
-
- // place cursor at end of text in text input
- if (input.type !== 'file') {
- // http://stackoverflow.com/a/2345915
- const val = input.value;
- input.value = '';
- input.value = val;
- }
- };
-
- /**
- * @param {HTMLElement | HTMLElement[] | null} target
- * @param {string | string[] | readonly string[]} classList
- * @param {boolean} condition
- */
- const toggleClass = (target, classList, condition) => {
- if (!target || !classList) {
- return;
- }
- if (typeof classList === 'string') {
- classList = classList.split(/\s+/).filter(Boolean);
- }
- classList.forEach(className => {
- if (Array.isArray(target)) {
- target.forEach(elem => {
- condition ? elem.classList.add(className) : elem.classList.remove(className);
- });
- } else {
- condition ? target.classList.add(className) : target.classList.remove(className);
- }
- });
- };
-
- /**
- * @param {HTMLElement | HTMLElement[] | null} target
- * @param {string | string[] | readonly string[]} classList
- */
- const addClass = (target, classList) => {
- toggleClass(target, classList, true);
- };
-
- /**
- * @param {HTMLElement | HTMLElement[] | null} target
- * @param {string | string[] | readonly string[]} classList
- */
- const removeClass = (target, classList) => {
- toggleClass(target, classList, false);
- };
-
- /**
- * Get direct child of an element by class name
- *
- * @param {HTMLElement} elem
- * @param {string} className
- * @returns {HTMLElement | null}
- */
- const getDirectChildByClass = (elem, className) => {
- const children = Array.from(elem.children);
- for (let i = 0; i < children.length; i++) {
- const child = children[i];
- if (child instanceof HTMLElement && hasClass(child, className)) {
- return child;
- }
- }
- };
-
- /**
- * @param {HTMLElement} elem
- * @param {string} property
- * @param {*} value
- */
- const applyNumericalStyle = (elem, property, value) => {
- if (value === `${parseInt(value)}`) {
- value = parseInt(value);
- }
- if (value || parseInt(value) === 0) {
- elem.style[property] = typeof value === 'number' ? `${value}px` : value;
- } else {
- elem.style.removeProperty(property);
- }
- };
-
- /**
- * @param {HTMLElement} elem
- * @param {string} display
- */
- const show = function (elem) {
- let display = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'flex';
- elem.style.display = display;
- };
-
- /**
- * @param {HTMLElement} elem
- */
- const hide = elem => {
- elem.style.display = 'none';
- };
-
- /**
- * @param {HTMLElement} parent
- * @param {string} selector
- * @param {string} property
- * @param {string} value
- */
- const setStyle = (parent, selector, property, value) => {
- /** @type {HTMLElement} */
- const el = parent.querySelector(selector);
- if (el) {
- el.style[property] = value;
- }
- };
-
- /**
- * @param {HTMLElement} elem
- * @param {any} condition
- * @param {string} display
- */
- const toggle = function (elem, condition) {
- let display = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'flex';
- condition ? show(elem, display) : hide(elem);
- };
-
- /**
- * borrowed from jquery $(elem).is(':visible') implementation
- *
- * @param {HTMLElement} elem
- * @returns {boolean}
- */
- const isVisible$1 = elem => !!(elem && (elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length));
-
- /**
- * @returns {boolean}
- */
- const allButtonsAreHidden = () => !isVisible$1(getConfirmButton()) && !isVisible$1(getDenyButton()) && !isVisible$1(getCancelButton());
-
- /**
- * @param {HTMLElement} elem
- * @returns {boolean}
- */
- const isScrollable = elem => !!(elem.scrollHeight > elem.clientHeight);
-
- /**
- * borrowed from https://stackoverflow.com/a/46352119
- *
- * @param {HTMLElement} elem
- * @returns {boolean}
- */
- const hasCssAnimation = elem => {
- const style = window.getComputedStyle(elem);
- const animDuration = parseFloat(style.getPropertyValue('animation-duration') || '0');
- const transDuration = parseFloat(style.getPropertyValue('transition-duration') || '0');
- return animDuration > 0 || transDuration > 0;
- };
-
- /**
- * @param {number} timer
- * @param {boolean} reset
- */
- const animateTimerProgressBar = function (timer) {
- let reset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
- const timerProgressBar = getTimerProgressBar();
- if (isVisible$1(timerProgressBar)) {
- if (reset) {
- timerProgressBar.style.transition = 'none';
- timerProgressBar.style.width = '100%';
- }
- setTimeout(() => {
- timerProgressBar.style.transition = `width ${timer / 1000}s linear`;
- timerProgressBar.style.width = '0%';
- }, 10);
- }
- };
- const stopTimerProgressBar = () => {
- const timerProgressBar = getTimerProgressBar();
- const timerProgressBarWidth = parseInt(window.getComputedStyle(timerProgressBar).width);
- timerProgressBar.style.removeProperty('transition');
- timerProgressBar.style.width = '100%';
- const timerProgressBarFullWidth = parseInt(window.getComputedStyle(timerProgressBar).width);
- const timerProgressBarPercent = timerProgressBarWidth / timerProgressBarFullWidth * 100;
- timerProgressBar.style.removeProperty('transition');
- timerProgressBar.style.width = `${timerProgressBarPercent}%`;
- };
-
- const RESTORE_FOCUS_TIMEOUT = 100;
-
- /** @type {GlobalState} */
- const globalState = {};
- const focusPreviousActiveElement = () => {
- if (globalState.previousActiveElement instanceof HTMLElement) {
- globalState.previousActiveElement.focus();
- globalState.previousActiveElement = null;
- } else if (document.body) {
- document.body.focus();
- }
- };
-
- /**
- * Restore previous active (focused) element
- *
- * @param {boolean} returnFocus
- * @returns {Promise}
- */
- const restoreActiveElement = returnFocus => {
- return new Promise(resolve => {
- if (!returnFocus) {
- return resolve();
- }
- const x = window.scrollX;
- const y = window.scrollY;
- globalState.restoreFocusTimeout = setTimeout(() => {
- focusPreviousActiveElement();
- resolve();
- }, RESTORE_FOCUS_TIMEOUT); // issues/900
-
- window.scrollTo(x, y);
- });
- };
-
- /**
- * Detect Node env
- *
- * @returns {boolean}
- */
- const isNodeEnv = () => typeof window === 'undefined' || typeof document === 'undefined';
-
- const sweetHTML = `
-
-`.replace(/(^|\n)\s*/g, '');
-
- /**
- * @returns {boolean}
- */
- const resetOldContainer = () => {
- const oldContainer = getContainer();
- if (!oldContainer) {
- return false;
- }
- oldContainer.remove();
- removeClass([document.documentElement, document.body], [swalClasses['no-backdrop'], swalClasses['toast-shown'], swalClasses['has-column']]);
- return true;
- };
- const resetValidationMessage$1 = () => {
- globalState.currentInstance.resetValidationMessage();
- };
- const addInputChangeListeners = () => {
- const popup = getPopup();
- const input = getDirectChildByClass(popup, swalClasses.input);
- const file = getDirectChildByClass(popup, swalClasses.file);
- /** @type {HTMLInputElement} */
- const range = popup.querySelector(`.${swalClasses.range} input`);
- /** @type {HTMLOutputElement} */
- const rangeOutput = popup.querySelector(`.${swalClasses.range} output`);
- const select = getDirectChildByClass(popup, swalClasses.select);
- /** @type {HTMLInputElement} */
- const checkbox = popup.querySelector(`.${swalClasses.checkbox} input`);
- const textarea = getDirectChildByClass(popup, swalClasses.textarea);
- input.oninput = resetValidationMessage$1;
- file.onchange = resetValidationMessage$1;
- select.onchange = resetValidationMessage$1;
- checkbox.onchange = resetValidationMessage$1;
- textarea.oninput = resetValidationMessage$1;
- range.oninput = () => {
- resetValidationMessage$1();
- rangeOutput.value = range.value;
- };
- range.onchange = () => {
- resetValidationMessage$1();
- rangeOutput.value = range.value;
- };
- };
-
- /**
- * @param {string | HTMLElement} target
- * @returns {HTMLElement}
- */
- const getTarget = target => typeof target === 'string' ? document.querySelector(target) : target;
-
- /**
- * @param {SweetAlertOptions} params
- */
- const setupAccessibility = params => {
- const popup = getPopup();
- popup.setAttribute('role', params.toast ? 'alert' : 'dialog');
- popup.setAttribute('aria-live', params.toast ? 'polite' : 'assertive');
- if (!params.toast) {
- popup.setAttribute('aria-modal', 'true');
- }
- };
-
- /**
- * @param {HTMLElement} targetElement
- */
- const setupRTL = targetElement => {
- if (window.getComputedStyle(targetElement).direction === 'rtl') {
- addClass(getContainer(), swalClasses.rtl);
- }
- };
-
- /**
- * Add modal + backdrop + no-war message for Russians to DOM
- *
- * @param {SweetAlertOptions} params
- */
- const init = params => {
- // Clean up the old popup container if it exists
- const oldContainerExisted = resetOldContainer();
-
- /* istanbul ignore if */
- if (isNodeEnv()) {
- error('SweetAlert2 requires document to initialize');
- return;
- }
- const container = document.createElement('div');
- container.className = swalClasses.container;
- if (oldContainerExisted) {
- addClass(container, swalClasses['no-transition']);
- }
- setInnerHtml(container, sweetHTML);
- const targetElement = getTarget(params.target);
- targetElement.appendChild(container);
- setupAccessibility(params);
- setupRTL(targetElement);
- addInputChangeListeners();
- };
-
- /**
- * @param {HTMLElement | object | string} param
- * @param {HTMLElement} target
- */
- const parseHtmlToContainer = (param, target) => {
- // DOM element
- if (param instanceof HTMLElement) {
- target.appendChild(param);
- }
-
- // Object
- else if (typeof param === 'object') {
- handleObject(param, target);
- }
-
- // Plain string
- else if (param) {
- setInnerHtml(target, param);
- }
- };
-
- /**
- * @param {object} param
- * @param {HTMLElement} target
- */
- const handleObject = (param, target) => {
- // JQuery element(s)
- if (param.jquery) {
- handleJqueryElem(target, param);
- }
-
- // For other objects use their string representation
- else {
- setInnerHtml(target, param.toString());
- }
- };
-
- /**
- * @param {HTMLElement} target
- * @param {HTMLElement} elem
- */
- const handleJqueryElem = (target, elem) => {
- target.textContent = '';
- if (0 in elem) {
- for (let i = 0; (i in elem); i++) {
- target.appendChild(elem[i].cloneNode(true));
- }
- } else {
- target.appendChild(elem.cloneNode(true));
- }
- };
-
- /**
- * @returns {'webkitAnimationEnd' | 'animationend' | false}
- */
- const animationEndEvent = (() => {
- // Prevent run in Node env
- /* istanbul ignore if */
- if (isNodeEnv()) {
- return false;
- }
- const testEl = document.createElement('div');
- const transEndEventNames = {
- WebkitAnimation: 'webkitAnimationEnd',
- // Chrome, Safari and Opera
- animation: 'animationend' // Standard syntax
- };
-
- for (const i in transEndEventNames) {
- if (Object.prototype.hasOwnProperty.call(transEndEventNames, i) && typeof testEl.style[i] !== 'undefined') {
- return transEndEventNames[i];
- }
- }
- return false;
- })();
-
- /**
- * Measure scrollbar width for padding body during modal show/hide
- * https://github.com/twbs/bootstrap/blob/master/js/src/modal.js
- *
- * @returns {number}
- */
- const measureScrollbar = () => {
- const scrollDiv = document.createElement('div');
- scrollDiv.className = swalClasses['scrollbar-measure'];
- document.body.appendChild(scrollDiv);
- const scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;
- document.body.removeChild(scrollDiv);
- return scrollbarWidth;
- };
-
- /**
- * @param {SweetAlert2} instance
- * @param {SweetAlertOptions} params
- */
- const renderActions = (instance, params) => {
- const actions = getActions();
- const loader = getLoader();
-
- // Actions (buttons) wrapper
- if (!params.showConfirmButton && !params.showDenyButton && !params.showCancelButton) {
- hide(actions);
- } else {
- show(actions);
- }
-
- // Custom class
- applyCustomClass(actions, params, 'actions');
-
- // Render all the buttons
- renderButtons(actions, loader, params);
-
- // Loader
- setInnerHtml(loader, params.loaderHtml);
- applyCustomClass(loader, params, 'loader');
- };
-
- /**
- * @param {HTMLElement} actions
- * @param {HTMLElement} loader
- * @param {SweetAlertOptions} params
- */
- function renderButtons(actions, loader, params) {
- const confirmButton = getConfirmButton();
- const denyButton = getDenyButton();
- const cancelButton = getCancelButton();
-
- // Render buttons
- renderButton(confirmButton, 'confirm', params);
- renderButton(denyButton, 'deny', params);
- renderButton(cancelButton, 'cancel', params);
- handleButtonsStyling(confirmButton, denyButton, cancelButton, params);
- if (params.reverseButtons) {
- if (params.toast) {
- actions.insertBefore(cancelButton, confirmButton);
- actions.insertBefore(denyButton, confirmButton);
- } else {
- actions.insertBefore(cancelButton, loader);
- actions.insertBefore(denyButton, loader);
- actions.insertBefore(confirmButton, loader);
- }
- }
- }
-
- /**
- * @param {HTMLElement} confirmButton
- * @param {HTMLElement} denyButton
- * @param {HTMLElement} cancelButton
- * @param {SweetAlertOptions} params
- */
- function handleButtonsStyling(confirmButton, denyButton, cancelButton, params) {
- if (!params.buttonsStyling) {
- removeClass([confirmButton, denyButton, cancelButton], swalClasses.styled);
- return;
- }
- addClass([confirmButton, denyButton, cancelButton], swalClasses.styled);
-
- // Buttons background colors
- if (params.confirmButtonColor) {
- confirmButton.style.backgroundColor = params.confirmButtonColor;
- addClass(confirmButton, swalClasses['default-outline']);
- }
- if (params.denyButtonColor) {
- denyButton.style.backgroundColor = params.denyButtonColor;
- addClass(denyButton, swalClasses['default-outline']);
- }
- if (params.cancelButtonColor) {
- cancelButton.style.backgroundColor = params.cancelButtonColor;
- addClass(cancelButton, swalClasses['default-outline']);
- }
- }
-
- /**
- * @param {HTMLElement} button
- * @param {'confirm' | 'deny' | 'cancel'} buttonType
- * @param {SweetAlertOptions} params
- */
- function renderButton(button, buttonType, params) {
- toggle(button, params[`show${capitalizeFirstLetter(buttonType)}Button`], 'inline-block');
- setInnerHtml(button, params[`${buttonType}ButtonText`]); // Set caption text
- button.setAttribute('aria-label', params[`${buttonType}ButtonAriaLabel`]); // ARIA label
-
- // Add buttons custom classes
- button.className = swalClasses[buttonType];
- applyCustomClass(button, params, `${buttonType}Button`);
- addClass(button, params[`${buttonType}ButtonClass`]);
- }
-
- /**
- * @param {SweetAlert2} instance
- * @param {SweetAlertOptions} params
- */
- const renderCloseButton = (instance, params) => {
- const closeButton = getCloseButton();
- setInnerHtml(closeButton, params.closeButtonHtml);
-
- // Custom class
- applyCustomClass(closeButton, params, 'closeButton');
- toggle(closeButton, params.showCloseButton);
- closeButton.setAttribute('aria-label', params.closeButtonAriaLabel);
- };
-
- /**
- * @param {SweetAlert2} instance
- * @param {SweetAlertOptions} params
- */
- const renderContainer = (instance, params) => {
- const container = getContainer();
- if (!container) {
- return;
- }
- handleBackdropParam(container, params.backdrop);
- handlePositionParam(container, params.position);
- handleGrowParam(container, params.grow);
-
- // Custom class
- applyCustomClass(container, params, 'container');
- };
-
- /**
- * @param {HTMLElement} container
- * @param {SweetAlertOptions['backdrop']} backdrop
- */
- function handleBackdropParam(container, backdrop) {
- if (typeof backdrop === 'string') {
- container.style.background = backdrop;
- } else if (!backdrop) {
- addClass([document.documentElement, document.body], swalClasses['no-backdrop']);
- }
- }
-
- /**
- * @param {HTMLElement} container
- * @param {SweetAlertOptions['position']} position
- */
- function handlePositionParam(container, position) {
- if (position in swalClasses) {
- addClass(container, swalClasses[position]);
- } else {
- warn('The "position" parameter is not valid, defaulting to "center"');
- addClass(container, swalClasses.center);
- }
- }
-
- /**
- * @param {HTMLElement} container
- * @param {SweetAlertOptions['grow']} grow
- */
- function handleGrowParam(container, grow) {
- if (grow && typeof grow === 'string') {
- const growClass = `grow-${grow}`;
- if (growClass in swalClasses) {
- addClass(container, swalClasses[growClass]);
- }
- }
- }
-
- ///
-
- /** @type {InputClass[]} */
- const inputClasses = ['input', 'file', 'range', 'select', 'radio', 'checkbox', 'textarea'];
-
- /**
- * @param {SweetAlert2} instance
- * @param {SweetAlertOptions} params
- */
- const renderInput = (instance, params) => {
- const popup = getPopup();
- const innerParams = privateProps.innerParams.get(instance);
- const rerender = !innerParams || params.input !== innerParams.input;
- inputClasses.forEach(inputClass => {
- const inputContainer = getDirectChildByClass(popup, swalClasses[inputClass]);
-
- // set attributes
- setAttributes(inputClass, params.inputAttributes);
-
- // set class
- inputContainer.className = swalClasses[inputClass];
- if (rerender) {
- hide(inputContainer);
- }
- });
- if (params.input) {
- if (rerender) {
- showInput(params);
- }
- // set custom class
- setCustomClass(params);
- }
- };
-
- /**
- * @param {SweetAlertOptions} params
- */
- const showInput = params => {
- if (!renderInputType[params.input]) {
- error(`Unexpected type of input! Expected "text", "email", "password", "number", "tel", "select", "radio", "checkbox", "textarea", "file" or "url", got "${params.input}"`);
- return;
- }
- const inputContainer = getInputContainer(params.input);
- const input = renderInputType[params.input](inputContainer, params);
- show(inputContainer);
-
- // input autofocus
- setTimeout(() => {
- focusInput(input);
- });
- };
-
- /**
- * @param {HTMLInputElement} input
- */
- const removeAttributes = input => {
- for (let i = 0; i < input.attributes.length; i++) {
- const attrName = input.attributes[i].name;
- if (!['type', 'value', 'style'].includes(attrName)) {
- input.removeAttribute(attrName);
- }
- }
- };
-
- /**
- * @param {InputClass} inputClass
- * @param {SweetAlertOptions['inputAttributes']} inputAttributes
- */
- const setAttributes = (inputClass, inputAttributes) => {
- const input = getInput$1(getPopup(), inputClass);
- if (!input) {
- return;
- }
- removeAttributes(input);
- for (const attr in inputAttributes) {
- input.setAttribute(attr, inputAttributes[attr]);
- }
- };
-
- /**
- * @param {SweetAlertOptions} params
- */
- const setCustomClass = params => {
- const inputContainer = getInputContainer(params.input);
- if (typeof params.customClass === 'object') {
- addClass(inputContainer, params.customClass.input);
- }
- };
-
- /**
- * @param {HTMLInputElement | HTMLTextAreaElement} input
- * @param {SweetAlertOptions} params
- */
- const setInputPlaceholder = (input, params) => {
- if (!input.placeholder || params.inputPlaceholder) {
- input.placeholder = params.inputPlaceholder;
- }
- };
-
- /**
- * @param {Input} input
- * @param {Input} prependTo
- * @param {SweetAlertOptions} params
- */
- const setInputLabel = (input, prependTo, params) => {
- if (params.inputLabel) {
- input.id = swalClasses.input;
- const label = document.createElement('label');
- const labelClass = swalClasses['input-label'];
- label.setAttribute('for', input.id);
- label.className = labelClass;
- if (typeof params.customClass === 'object') {
- addClass(label, params.customClass.inputLabel);
- }
- label.innerText = params.inputLabel;
- prependTo.insertAdjacentElement('beforebegin', label);
- }
- };
-
- /**
- * @param {SweetAlertOptions['input']} inputType
- * @returns {HTMLElement}
- */
- const getInputContainer = inputType => {
- return getDirectChildByClass(getPopup(), swalClasses[inputType] || swalClasses.input);
- };
-
- /**
- * @param {HTMLInputElement | HTMLOutputElement | HTMLTextAreaElement} input
- * @param {SweetAlertOptions['inputValue']} inputValue
- */
- const checkAndSetInputValue = (input, inputValue) => {
- if (['string', 'number'].includes(typeof inputValue)) {
- input.value = `${inputValue}`;
- } else if (!isPromise(inputValue)) {
- warn(`Unexpected type of inputValue! Expected "string", "number" or "Promise", got "${typeof inputValue}"`);
- }
- };
-
- /** @type {Record Input>} */
- const renderInputType = {};
-
- /**
- * @param {HTMLInputElement} input
- * @param {SweetAlertOptions} params
- * @returns {HTMLInputElement}
- */
- renderInputType.text = renderInputType.email = renderInputType.password = renderInputType.number = renderInputType.tel = renderInputType.url = (input, params) => {
- checkAndSetInputValue(input, params.inputValue);
- setInputLabel(input, input, params);
- setInputPlaceholder(input, params);
- input.type = params.input;
- return input;
- };
-
- /**
- * @param {HTMLInputElement} input
- * @param {SweetAlertOptions} params
- * @returns {HTMLInputElement}
- */
- renderInputType.file = (input, params) => {
- setInputLabel(input, input, params);
- setInputPlaceholder(input, params);
- return input;
- };
-
- /**
- * @param {HTMLInputElement} range
- * @param {SweetAlertOptions} params
- * @returns {HTMLInputElement}
- */
- renderInputType.range = (range, params) => {
- const rangeInput = range.querySelector('input');
- const rangeOutput = range.querySelector('output');
- checkAndSetInputValue(rangeInput, params.inputValue);
- rangeInput.type = params.input;
- checkAndSetInputValue(rangeOutput, params.inputValue);
- setInputLabel(rangeInput, range, params);
- return range;
- };
-
- /**
- * @param {HTMLSelectElement} select
- * @param {SweetAlertOptions} params
- * @returns {HTMLSelectElement}
- */
- renderInputType.select = (select, params) => {
- select.textContent = '';
- if (params.inputPlaceholder) {
- const placeholder = document.createElement('option');
- setInnerHtml(placeholder, params.inputPlaceholder);
- placeholder.value = '';
- placeholder.disabled = true;
- placeholder.selected = true;
- select.appendChild(placeholder);
- }
- setInputLabel(select, select, params);
- return select;
- };
-
- /**
- * @param {HTMLInputElement} radio
- * @returns {HTMLInputElement}
- */
- renderInputType.radio = radio => {
- radio.textContent = '';
- return radio;
- };
-
- /**
- * @param {HTMLLabelElement} checkboxContainer
- * @param {SweetAlertOptions} params
- * @returns {HTMLInputElement}
- */
- renderInputType.checkbox = (checkboxContainer, params) => {
- const checkbox = getInput$1(getPopup(), 'checkbox');
- checkbox.value = '1';
- checkbox.id = swalClasses.checkbox;
- checkbox.checked = Boolean(params.inputValue);
- const label = checkboxContainer.querySelector('span');
- setInnerHtml(label, params.inputPlaceholder);
- return checkbox;
- };
-
- /**
- * @param {HTMLTextAreaElement} textarea
- * @param {SweetAlertOptions} params
- * @returns {HTMLTextAreaElement}
- */
- renderInputType.textarea = (textarea, params) => {
- checkAndSetInputValue(textarea, params.inputValue);
- setInputPlaceholder(textarea, params);
- setInputLabel(textarea, textarea, params);
-
- /**
- * @param {HTMLElement} el
- * @returns {number}
- */
- const getMargin = el => parseInt(window.getComputedStyle(el).marginLeft) + parseInt(window.getComputedStyle(el).marginRight);
-
- // https://github.com/sweetalert2/sweetalert2/issues/2291
- setTimeout(() => {
- // https://github.com/sweetalert2/sweetalert2/issues/1699
- if ('MutationObserver' in window) {
- const initialPopupWidth = parseInt(window.getComputedStyle(getPopup()).width);
- const textareaResizeHandler = () => {
- const textareaWidth = textarea.offsetWidth + getMargin(textarea);
- if (textareaWidth > initialPopupWidth) {
- getPopup().style.width = `${textareaWidth}px`;
- } else {
- getPopup().style.width = null;
- }
- };
- new MutationObserver(textareaResizeHandler).observe(textarea, {
- attributes: true,
- attributeFilter: ['style']
- });
- }
- });
- return textarea;
- };
-
- /**
- * @param {SweetAlert2} instance
- * @param {SweetAlertOptions} params
- */
- const renderContent = (instance, params) => {
- const htmlContainer = getHtmlContainer();
- applyCustomClass(htmlContainer, params, 'htmlContainer');
-
- // Content as HTML
- if (params.html) {
- parseHtmlToContainer(params.html, htmlContainer);
- show(htmlContainer, 'block');
- }
-
- // Content as plain text
- else if (params.text) {
- htmlContainer.textContent = params.text;
- show(htmlContainer, 'block');
- }
-
- // No content
- else {
- hide(htmlContainer);
- }
- renderInput(instance, params);
- };
-
- /**
- * @param {SweetAlert2} instance
- * @param {SweetAlertOptions} params
- */
- const renderFooter = (instance, params) => {
- const footer = getFooter();
- toggle(footer, params.footer);
- if (params.footer) {
- parseHtmlToContainer(params.footer, footer);
- }
-
- // Custom class
- applyCustomClass(footer, params, 'footer');
- };
-
- /**
- * @param {SweetAlert2} instance
- * @param {SweetAlertOptions} params
- */
- const renderIcon = (instance, params) => {
- const innerParams = privateProps.innerParams.get(instance);
- const icon = getIcon();
-
- // if the given icon already rendered, apply the styling without re-rendering the icon
- if (innerParams && params.icon === innerParams.icon) {
- // Custom or default content
- setContent(icon, params);
- applyStyles(icon, params);
- return;
- }
- if (!params.icon && !params.iconHtml) {
- hide(icon);
- return;
- }
- if (params.icon && Object.keys(iconTypes).indexOf(params.icon) === -1) {
- error(`Unknown icon! Expected "success", "error", "warning", "info" or "question", got "${params.icon}"`);
- hide(icon);
- return;
- }
- show(icon);
-
- // Custom or default content
- setContent(icon, params);
- applyStyles(icon, params);
-
- // Animate icon
- addClass(icon, params.showClass.icon);
- };
-
- /**
- * @param {HTMLElement} icon
- * @param {SweetAlertOptions} params
- */
- const applyStyles = (icon, params) => {
- for (const iconType in iconTypes) {
- if (params.icon !== iconType) {
- removeClass(icon, iconTypes[iconType]);
- }
- }
- addClass(icon, iconTypes[params.icon]);
-
- // Icon color
- setColor(icon, params);
-
- // Success icon background color
- adjustSuccessIconBackgroundColor();
-
- // Custom class
- applyCustomClass(icon, params, 'icon');
- };
-
- // Adjust success icon background color to match the popup background color
- const adjustSuccessIconBackgroundColor = () => {
- const popup = getPopup();
- const popupBackgroundColor = window.getComputedStyle(popup).getPropertyValue('background-color');
- /** @type {NodeListOf} */
- const successIconParts = popup.querySelectorAll('[class^=swal2-success-circular-line], .swal2-success-fix');
- for (let i = 0; i < successIconParts.length; i++) {
- successIconParts[i].style.backgroundColor = popupBackgroundColor;
- }
- };
- const successIconHtml = `
-
-
-
-
-`;
- const errorIconHtml = `
-
-
-
-
-`;
-
- /**
- * @param {HTMLElement} icon
- * @param {SweetAlertOptions} params
- */
- const setContent = (icon, params) => {
- let oldContent = icon.innerHTML;
- let newContent;
- if (params.iconHtml) {
- newContent = iconContent(params.iconHtml);
- } else if (params.icon === 'success') {
- newContent = successIconHtml;
- oldContent = oldContent.replace(/ style=".*?"/g, ''); // undo adjustSuccessIconBackgroundColor()
- } else if (params.icon === 'error') {
- newContent = errorIconHtml;
- } else {
- const defaultIconHtml = {
- question: '?',
- warning: '!',
- info: 'i'
- };
- newContent = iconContent(defaultIconHtml[params.icon]);
- }
- if (oldContent.trim() !== newContent.trim()) {
- setInnerHtml(icon, newContent);
- }
- };
-
- /**
- * @param {HTMLElement} icon
- * @param {SweetAlertOptions} params
- */
- const setColor = (icon, params) => {
- if (!params.iconColor) {
- return;
- }
- icon.style.color = params.iconColor;
- icon.style.borderColor = params.iconColor;
- for (const sel of ['.swal2-success-line-tip', '.swal2-success-line-long', '.swal2-x-mark-line-left', '.swal2-x-mark-line-right']) {
- setStyle(icon, sel, 'backgroundColor', params.iconColor);
- }
- setStyle(icon, '.swal2-success-ring', 'borderColor', params.iconColor);
- };
-
- /**
- * @param {string} content
- * @returns {string}
- */
- const iconContent = content => `${content}
`;
-
- /**
- * @param {SweetAlert2} instance
- * @param {SweetAlertOptions} params
- */
- const renderImage = (instance, params) => {
- const image = getImage();
- if (!params.imageUrl) {
- hide(image);
- return;
- }
- show(image, '');
-
- // Src, alt
- image.setAttribute('src', params.imageUrl);
- image.setAttribute('alt', params.imageAlt);
-
- // Width, height
- applyNumericalStyle(image, 'width', params.imageWidth);
- applyNumericalStyle(image, 'height', params.imageHeight);
-
- // Class
- image.className = swalClasses.image;
- applyCustomClass(image, params, 'image');
- };
-
- /**
- * @param {SweetAlert2} instance
- * @param {SweetAlertOptions} params
- */
- const renderPopup = (instance, params) => {
- const container = getContainer();
- const popup = getPopup();
-
- // Width
- // https://github.com/sweetalert2/sweetalert2/issues/2170
- if (params.toast) {
- applyNumericalStyle(container, 'width', params.width);
- popup.style.width = '100%';
- popup.insertBefore(getLoader(), getIcon());
- } else {
- applyNumericalStyle(popup, 'width', params.width);
- }
-
- // Padding
- applyNumericalStyle(popup, 'padding', params.padding);
-
- // Color
- if (params.color) {
- popup.style.color = params.color;
- }
-
- // Background
- if (params.background) {
- popup.style.background = params.background;
- }
- hide(getValidationMessage());
-
- // Classes
- addClasses$1(popup, params);
- };
-
- /**
- * @param {HTMLElement} popup
- * @param {SweetAlertOptions} params
- */
- const addClasses$1 = (popup, params) => {
- // Default Class + showClass when updating Swal.update({})
- popup.className = `${swalClasses.popup} ${isVisible$1(popup) ? params.showClass.popup : ''}`;
- if (params.toast) {
- addClass([document.documentElement, document.body], swalClasses['toast-shown']);
- addClass(popup, swalClasses.toast);
- } else {
- addClass(popup, swalClasses.modal);
- }
-
- // Custom class
- applyCustomClass(popup, params, 'popup');
- if (typeof params.customClass === 'string') {
- addClass(popup, params.customClass);
- }
-
- // Icon class (#1842)
- if (params.icon) {
- addClass(popup, swalClasses[`icon-${params.icon}`]);
- }
- };
-
- /**
- * @param {SweetAlert2} instance
- * @param {SweetAlertOptions} params
- */
- const renderProgressSteps = (instance, params) => {
- const progressStepsContainer = getProgressSteps$1();
- if (!params.progressSteps || params.progressSteps.length === 0) {
- hide(progressStepsContainer);
- return;
- }
- show(progressStepsContainer);
- progressStepsContainer.textContent = '';
- if (params.currentProgressStep >= params.progressSteps.length) {
- warn('Invalid currentProgressStep parameter, it should be less than progressSteps.length ' + '(currentProgressStep like JS arrays starts from 0)');
- }
- params.progressSteps.forEach((step, index) => {
- const stepEl = createStepElement(step);
- progressStepsContainer.appendChild(stepEl);
- if (index === params.currentProgressStep) {
- addClass(stepEl, swalClasses['active-progress-step']);
- }
- if (index !== params.progressSteps.length - 1) {
- const lineEl = createLineElement(params);
- progressStepsContainer.appendChild(lineEl);
- }
- });
- };
-
- /**
- * @param {string} step
- * @returns {HTMLLIElement}
- */
- const createStepElement = step => {
- const stepEl = document.createElement('li');
- addClass(stepEl, swalClasses['progress-step']);
- setInnerHtml(stepEl, step);
- return stepEl;
- };
-
- /**
- * @param {SweetAlertOptions} params
- * @returns {HTMLLIElement}
- */
- const createLineElement = params => {
- const lineEl = document.createElement('li');
- addClass(lineEl, swalClasses['progress-step-line']);
- if (params.progressStepsDistance) {
- applyNumericalStyle(lineEl, 'width', params.progressStepsDistance);
- }
- return lineEl;
- };
-
- /**
- * @param {SweetAlert2} instance
- * @param {SweetAlertOptions} params
- */
- const renderTitle = (instance, params) => {
- const title = getTitle();
- toggle(title, params.title || params.titleText, 'block');
- if (params.title) {
- parseHtmlToContainer(params.title, title);
- }
- if (params.titleText) {
- title.innerText = params.titleText;
- }
-
- // Custom class
- applyCustomClass(title, params, 'title');
- };
-
- /**
- * @param {SweetAlert2} instance
- * @param {SweetAlertOptions} params
- */
- const render = (instance, params) => {
- renderPopup(instance, params);
- renderContainer(instance, params);
- renderProgressSteps(instance, params);
- renderIcon(instance, params);
- renderImage(instance, params);
- renderTitle(instance, params);
- renderCloseButton(instance, params);
- renderContent(instance, params);
- renderActions(instance, params);
- renderFooter(instance, params);
- if (typeof params.didRender === 'function') {
- params.didRender(getPopup());
- }
- };
-
- /**
- * Hides loader and shows back the button which was hidden by .showLoading()
- */
- function hideLoading() {
- // do nothing if popup is closed
- const innerParams = privateProps.innerParams.get(this);
- if (!innerParams) {
- return;
- }
- const domCache = privateProps.domCache.get(this);
- hide(domCache.loader);
- if (isToast()) {
- if (innerParams.icon) {
- show(getIcon());
- }
- } else {
- showRelatedButton(domCache);
- }
- removeClass([domCache.popup, domCache.actions], swalClasses.loading);
- domCache.popup.removeAttribute('aria-busy');
- domCache.popup.removeAttribute('data-loading');
- domCache.confirmButton.disabled = false;
- domCache.denyButton.disabled = false;
- domCache.cancelButton.disabled = false;
- }
- const showRelatedButton = domCache => {
- const buttonToReplace = domCache.popup.getElementsByClassName(domCache.loader.getAttribute('data-button-to-replace'));
- if (buttonToReplace.length) {
- show(buttonToReplace[0], 'inline-block');
- } else if (allButtonsAreHidden()) {
- hide(domCache.actions);
- }
- };
-
- /**
- * Gets the input DOM node, this method works with input parameter.
- *
- * @param {SweetAlert2} instance
- * @returns {HTMLElement | null}
- */
- function getInput(instance) {
- const innerParams = privateProps.innerParams.get(instance || this);
- const domCache = privateProps.domCache.get(instance || this);
- if (!domCache) {
- return null;
- }
- return getInput$1(domCache.popup, innerParams.input);
- }
-
- /*
- * Global function to determine if SweetAlert2 popup is shown
- */
- const isVisible = () => {
- return isVisible$1(getPopup());
- };
-
- /*
- * Global function to click 'Confirm' button
- */
- const clickConfirm = () => getConfirmButton() && getConfirmButton().click();
-
- /*
- * Global function to click 'Deny' button
- */
- const clickDeny = () => getDenyButton() && getDenyButton().click();
-
- /*
- * Global function to click 'Cancel' button
- */
- const clickCancel = () => getCancelButton() && getCancelButton().click();
-
- const DismissReason = Object.freeze({
- cancel: 'cancel',
- backdrop: 'backdrop',
- close: 'close',
- esc: 'esc',
- timer: 'timer'
- });
-
- /**
- * @param {GlobalState} globalState
- */
- const removeKeydownHandler = globalState => {
- if (globalState.keydownTarget && globalState.keydownHandlerAdded) {
- globalState.keydownTarget.removeEventListener('keydown', globalState.keydownHandler, {
- capture: globalState.keydownListenerCapture
- });
- globalState.keydownHandlerAdded = false;
- }
- };
-
- /**
- * @param {SweetAlert2} instance
- * @param {GlobalState} globalState
- * @param {SweetAlertOptions} innerParams
- * @param {*} dismissWith
- */
- const addKeydownHandler = (instance, globalState, innerParams, dismissWith) => {
- removeKeydownHandler(globalState);
- if (!innerParams.toast) {
- globalState.keydownHandler = e => keydownHandler(instance, e, dismissWith);
- globalState.keydownTarget = innerParams.keydownListenerCapture ? window : getPopup();
- globalState.keydownListenerCapture = innerParams.keydownListenerCapture;
- globalState.keydownTarget.addEventListener('keydown', globalState.keydownHandler, {
- capture: globalState.keydownListenerCapture
- });
- globalState.keydownHandlerAdded = true;
- }
- };
-
- /**
- * @param {SweetAlertOptions} innerParams
- * @param {number} index
- * @param {number} increment
- */
- const setFocus = (innerParams, index, increment) => {
- const focusableElements = getFocusableElements();
- // search for visible elements and select the next possible match
- if (focusableElements.length) {
- index = index + increment;
-
- // rollover to first item
- if (index === focusableElements.length) {
- index = 0;
-
- // go to last item
- } else if (index === -1) {
- index = focusableElements.length - 1;
- }
- return focusableElements[index].focus();
- }
- // no visible focusable elements, focus the popup
- getPopup().focus();
- };
- const arrowKeysNextButton = ['ArrowRight', 'ArrowDown'];
- const arrowKeysPreviousButton = ['ArrowLeft', 'ArrowUp'];
-
- /**
- * @param {SweetAlert2} instance
- * @param {KeyboardEvent} e
- * @param {function} dismissWith
- */
- const keydownHandler = (instance, e, dismissWith) => {
- const innerParams = privateProps.innerParams.get(instance);
- if (!innerParams) {
- return; // This instance has already been destroyed
- }
-
- // Ignore keydown during IME composition
- // https://developer.mozilla.org/en-US/docs/Web/API/Document/keydown_event#ignoring_keydown_during_ime_composition
- // https://github.com/sweetalert2/sweetalert2/issues/720
- // https://github.com/sweetalert2/sweetalert2/issues/2406
- if (e.isComposing || e.keyCode === 229) {
- return;
- }
- if (innerParams.stopKeydownPropagation) {
- e.stopPropagation();
- }
-
- // ENTER
- if (e.key === 'Enter') {
- handleEnter(instance, e, innerParams);
- }
-
- // TAB
- else if (e.key === 'Tab') {
- handleTab(e, innerParams);
- }
-
- // ARROWS - switch focus between buttons
- else if ([...arrowKeysNextButton, ...arrowKeysPreviousButton].includes(e.key)) {
- handleArrows(e.key);
- }
-
- // ESC
- else if (e.key === 'Escape') {
- handleEsc(e, innerParams, dismissWith);
- }
- };
-
- /**
- * @param {SweetAlert2} instance
- * @param {KeyboardEvent} e
- * @param {SweetAlertOptions} innerParams
- */
- const handleEnter = (instance, e, innerParams) => {
- // https://github.com/sweetalert2/sweetalert2/issues/2386
- if (!callIfFunction(innerParams.allowEnterKey)) {
- return;
- }
- if (e.target && instance.getInput() && e.target instanceof HTMLElement && e.target.outerHTML === instance.getInput().outerHTML) {
- if (['textarea', 'file'].includes(innerParams.input)) {
- return; // do not submit
- }
-
- clickConfirm();
- e.preventDefault();
- }
- };
-
- /**
- * @param {KeyboardEvent} e
- * @param {SweetAlertOptions} innerParams
- */
- const handleTab = (e, innerParams) => {
- const targetElement = e.target;
- const focusableElements = getFocusableElements();
- let btnIndex = -1;
- for (let i = 0; i < focusableElements.length; i++) {
- if (targetElement === focusableElements[i]) {
- btnIndex = i;
- break;
- }
- }
-
- // Cycle to the next button
- if (!e.shiftKey) {
- setFocus(innerParams, btnIndex, 1);
- }
-
- // Cycle to the prev button
- else {
- setFocus(innerParams, btnIndex, -1);
- }
- e.stopPropagation();
- e.preventDefault();
- };
-
- /**
- * @param {string} key
- */
- const handleArrows = key => {
- const confirmButton = getConfirmButton();
- const denyButton = getDenyButton();
- const cancelButton = getCancelButton();
- if (document.activeElement instanceof HTMLElement && ![confirmButton, denyButton, cancelButton].includes(document.activeElement)) {
- return;
- }
- const sibling = arrowKeysNextButton.includes(key) ? 'nextElementSibling' : 'previousElementSibling';
- let buttonToFocus = document.activeElement;
- for (let i = 0; i < getActions().children.length; i++) {
- buttonToFocus = buttonToFocus[sibling];
- if (!buttonToFocus) {
- return;
- }
- if (buttonToFocus instanceof HTMLButtonElement && isVisible$1(buttonToFocus)) {
- break;
- }
- }
- if (buttonToFocus instanceof HTMLButtonElement) {
- buttonToFocus.focus();
- }
- };
-
- /**
- * @param {KeyboardEvent} e
- * @param {SweetAlertOptions} innerParams
- * @param {function} dismissWith
- */
- const handleEsc = (e, innerParams, dismissWith) => {
- if (callIfFunction(innerParams.allowEscapeKey)) {
- e.preventDefault();
- dismissWith(DismissReason.esc);
- }
- };
-
- /**
- * This module contains `WeakMap`s for each effectively-"private property" that a `Swal` has.
- * For example, to set the private property "foo" of `this` to "bar", you can `privateProps.foo.set(this, 'bar')`
- * This is the approach that Babel will probably take to implement private methods/fields
- * https://github.com/tc39/proposal-private-methods
- * https://github.com/babel/babel/pull/7555
- * Once we have the changes from that PR in Babel, and our core class fits reasonable in *one module*
- * then we can use that language feature.
- */
-
- var privateMethods = {
- swalPromiseResolve: new WeakMap(),
- swalPromiseReject: new WeakMap()
- };
-
- // From https://developer.paciellogroup.com/blog/2018/06/the-current-state-of-modal-dialog-accessibility/
- // Adding aria-hidden="true" to elements outside of the active modal dialog ensures that
- // elements not within the active modal dialog will not be surfaced if a user opens a screen
- // reader’s list of elements (headings, form controls, landmarks, etc.) in the document.
-
- const setAriaHidden = () => {
- const bodyChildren = Array.from(document.body.children);
- bodyChildren.forEach(el => {
- if (el === getContainer() || el.contains(getContainer())) {
- return;
- }
- if (el.hasAttribute('aria-hidden')) {
- el.setAttribute('data-previous-aria-hidden', el.getAttribute('aria-hidden'));
- }
- el.setAttribute('aria-hidden', 'true');
- });
- };
- const unsetAriaHidden = () => {
- const bodyChildren = Array.from(document.body.children);
- bodyChildren.forEach(el => {
- if (el.hasAttribute('data-previous-aria-hidden')) {
- el.setAttribute('aria-hidden', el.getAttribute('data-previous-aria-hidden'));
- el.removeAttribute('data-previous-aria-hidden');
- } else {
- el.removeAttribute('aria-hidden');
- }
- });
- };
-
- /* istanbul ignore file */
-
- // Fix iOS scrolling http://stackoverflow.com/q/39626302
-
- const iOSfix = () => {
- const iOS =
- // @ts-ignore
- /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream || navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1;
- if (iOS && !hasClass(document.body, swalClasses.iosfix)) {
- const offset = document.body.scrollTop;
- document.body.style.top = `${offset * -1}px`;
- addClass(document.body, swalClasses.iosfix);
- lockBodyScroll();
- addBottomPaddingForTallPopups();
- }
- };
-
- /**
- * https://github.com/sweetalert2/sweetalert2/issues/1948
- */
- const addBottomPaddingForTallPopups = () => {
- const ua = navigator.userAgent;
- const iOS = !!ua.match(/iPad/i) || !!ua.match(/iPhone/i);
- const webkit = !!ua.match(/WebKit/i);
- const iOSSafari = iOS && webkit && !ua.match(/CriOS/i);
- if (iOSSafari) {
- const bottomPanelHeight = 44;
- if (getPopup().scrollHeight > window.innerHeight - bottomPanelHeight) {
- getContainer().style.paddingBottom = `${bottomPanelHeight}px`;
- }
- }
- };
-
- /**
- * https://github.com/sweetalert2/sweetalert2/issues/1246
- */
- const lockBodyScroll = () => {
- const container = getContainer();
- let preventTouchMove;
- /**
- * @param {TouchEvent} e
- */
- container.ontouchstart = e => {
- preventTouchMove = shouldPreventTouchMove(e);
- };
- /**
- * @param {TouchEvent} e
- */
- container.ontouchmove = e => {
- if (preventTouchMove) {
- e.preventDefault();
- e.stopPropagation();
- }
- };
- };
-
- /**
- * @param {TouchEvent} event
- * @returns {boolean}
- */
- const shouldPreventTouchMove = event => {
- const target = event.target;
- const container = getContainer();
- if (isStylus(event) || isZoom(event)) {
- return false;
- }
- if (target === container) {
- return true;
- }
- if (!isScrollable(container) && target instanceof HTMLElement && target.tagName !== 'INPUT' &&
- // #1603
- target.tagName !== 'TEXTAREA' &&
- // #2266
- !(isScrollable(getHtmlContainer()) &&
- // #1944
- getHtmlContainer().contains(target))) {
- return true;
- }
- return false;
- };
-
- /**
- * https://github.com/sweetalert2/sweetalert2/issues/1786
- *
- * @param {*} event
- * @returns {boolean}
- */
- const isStylus = event => {
- return event.touches && event.touches.length && event.touches[0].touchType === 'stylus';
- };
-
- /**
- * https://github.com/sweetalert2/sweetalert2/issues/1891
- *
- * @param {TouchEvent} event
- * @returns {boolean}
- */
- const isZoom = event => {
- return event.touches && event.touches.length > 1;
- };
- const undoIOSfix = () => {
- if (hasClass(document.body, swalClasses.iosfix)) {
- const offset = parseInt(document.body.style.top, 10);
- removeClass(document.body, swalClasses.iosfix);
- document.body.style.top = '';
- document.body.scrollTop = offset * -1;
- }
- };
-
- const fixScrollbar = () => {
- // for queues, do not do this more than once
- if (states.previousBodyPadding !== null) {
- return;
- }
- // if the body has overflow
- if (document.body.scrollHeight > window.innerHeight) {
- // add padding so the content doesn't shift after removal of scrollbar
- states.previousBodyPadding = parseInt(window.getComputedStyle(document.body).getPropertyValue('padding-right'));
- document.body.style.paddingRight = `${states.previousBodyPadding + measureScrollbar()}px`;
- }
- };
- const undoScrollbar = () => {
- if (states.previousBodyPadding !== null) {
- document.body.style.paddingRight = `${states.previousBodyPadding}px`;
- states.previousBodyPadding = null;
- }
- };
-
- /*
- * Instance method to close sweetAlert
- */
-
- function removePopupAndResetState(instance, container, returnFocus, didClose) {
- if (isToast()) {
- triggerDidCloseAndDispose(instance, didClose);
- } else {
- restoreActiveElement(returnFocus).then(() => triggerDidCloseAndDispose(instance, didClose));
- removeKeydownHandler(globalState);
- }
- const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);
- // workaround for #2088
- // for some reason removing the container in Safari will scroll the document to bottom
- if (isSafari) {
- container.setAttribute('style', 'display:none !important');
- container.removeAttribute('class');
- container.innerHTML = '';
- } else {
- container.remove();
- }
- if (isModal()) {
- undoScrollbar();
- undoIOSfix();
- unsetAriaHidden();
- }
- removeBodyClasses();
- }
- function removeBodyClasses() {
- removeClass([document.documentElement, document.body], [swalClasses.shown, swalClasses['height-auto'], swalClasses['no-backdrop'], swalClasses['toast-shown']]);
- }
- function close(resolveValue) {
- resolveValue = prepareResolveValue(resolveValue);
- const swalPromiseResolve = privateMethods.swalPromiseResolve.get(this);
- const didClose = triggerClosePopup(this);
- if (this.isAwaitingPromise()) {
- // A swal awaiting for a promise (after a click on Confirm or Deny) cannot be dismissed anymore #2335
- if (!resolveValue.isDismissed) {
- handleAwaitingPromise(this);
- swalPromiseResolve(resolveValue);
- }
- } else if (didClose) {
- // Resolve Swal promise
- swalPromiseResolve(resolveValue);
- }
- }
- function isAwaitingPromise() {
- return !!privateProps.awaitingPromise.get(this);
- }
- const triggerClosePopup = instance => {
- const popup = getPopup();
- if (!popup) {
- return false;
- }
- const innerParams = privateProps.innerParams.get(instance);
- if (!innerParams || hasClass(popup, innerParams.hideClass.popup)) {
- return false;
- }
- removeClass(popup, innerParams.showClass.popup);
- addClass(popup, innerParams.hideClass.popup);
- const backdrop = getContainer();
- removeClass(backdrop, innerParams.showClass.backdrop);
- addClass(backdrop, innerParams.hideClass.backdrop);
- handlePopupAnimation(instance, popup, innerParams);
- return true;
- };
- function rejectPromise(error) {
- const rejectPromise = privateMethods.swalPromiseReject.get(this);
- handleAwaitingPromise(this);
- if (rejectPromise) {
- // Reject Swal promise
- rejectPromise(error);
- }
- }
- const handleAwaitingPromise = instance => {
- if (instance.isAwaitingPromise()) {
- privateProps.awaitingPromise.delete(instance);
- // The instance might have been previously partly destroyed, we must resume the destroy process in this case #2335
- if (!privateProps.innerParams.get(instance)) {
- instance._destroy();
- }
- }
- };
- const prepareResolveValue = resolveValue => {
- // When user calls Swal.close()
- if (typeof resolveValue === 'undefined') {
- return {
- isConfirmed: false,
- isDenied: false,
- isDismissed: true
- };
- }
- return Object.assign({
- isConfirmed: false,
- isDenied: false,
- isDismissed: false
- }, resolveValue);
- };
- const handlePopupAnimation = (instance, popup, innerParams) => {
- const container = getContainer();
- // If animation is supported, animate
- const animationIsSupported = animationEndEvent && hasCssAnimation(popup);
- if (typeof innerParams.willClose === 'function') {
- innerParams.willClose(popup);
- }
- if (animationIsSupported) {
- animatePopup(instance, popup, container, innerParams.returnFocus, innerParams.didClose);
- } else {
- // Otherwise, remove immediately
- removePopupAndResetState(instance, container, innerParams.returnFocus, innerParams.didClose);
- }
- };
- const animatePopup = (instance, popup, container, returnFocus, didClose) => {
- globalState.swalCloseEventFinishedCallback = removePopupAndResetState.bind(null, instance, container, returnFocus, didClose);
- popup.addEventListener(animationEndEvent, function (e) {
- if (e.target === popup) {
- globalState.swalCloseEventFinishedCallback();
- delete globalState.swalCloseEventFinishedCallback;
- }
- });
- };
- const triggerDidCloseAndDispose = (instance, didClose) => {
- setTimeout(() => {
- if (typeof didClose === 'function') {
- didClose.bind(instance.params)();
- }
- instance._destroy();
- });
- };
-
- /**
- * @param {SweetAlert2} instance
- * @param {string[]} buttons
- * @param {boolean} disabled
- */
- function setButtonsDisabled(instance, buttons, disabled) {
- const domCache = privateProps.domCache.get(instance);
- buttons.forEach(button => {
- domCache[button].disabled = disabled;
- });
- }
-
- /**
- * @param {HTMLInputElement} input
- * @param {boolean} disabled
- */
- function setInputDisabled(input, disabled) {
- if (!input) {
- return;
- }
- if (input.type === 'radio') {
- const radiosContainer = input.parentNode.parentNode;
- const radios = radiosContainer.querySelectorAll('input');
- for (let i = 0; i < radios.length; i++) {
- radios[i].disabled = disabled;
- }
- } else {
- input.disabled = disabled;
- }
- }
- function enableButtons() {
- setButtonsDisabled(this, ['confirmButton', 'denyButton', 'cancelButton'], false);
- }
- function disableButtons() {
- setButtonsDisabled(this, ['confirmButton', 'denyButton', 'cancelButton'], true);
- }
- function enableInput() {
- setInputDisabled(this.getInput(), false);
- }
- function disableInput() {
- setInputDisabled(this.getInput(), true);
- }
-
- // Show block with validation message
- function showValidationMessage(error) {
- const domCache = privateProps.domCache.get(this);
- const params = privateProps.innerParams.get(this);
- setInnerHtml(domCache.validationMessage, error);
- domCache.validationMessage.className = swalClasses['validation-message'];
- if (params.customClass && params.customClass.validationMessage) {
- addClass(domCache.validationMessage, params.customClass.validationMessage);
- }
- show(domCache.validationMessage);
- const input = this.getInput();
- if (input) {
- input.setAttribute('aria-invalid', true);
- input.setAttribute('aria-describedby', swalClasses['validation-message']);
- focusInput(input);
- addClass(input, swalClasses.inputerror);
- }
- }
-
- // Hide block with validation message
- function resetValidationMessage() {
- const domCache = privateProps.domCache.get(this);
- if (domCache.validationMessage) {
- hide(domCache.validationMessage);
- }
- const input = this.getInput();
- if (input) {
- input.removeAttribute('aria-invalid');
- input.removeAttribute('aria-describedby');
- removeClass(input, swalClasses.inputerror);
- }
- }
-
- function getProgressSteps() {
- const domCache = privateProps.domCache.get(this);
- return domCache.progressSteps;
- }
-
- const defaultParams = {
- title: '',
- titleText: '',
- text: '',
- html: '',
- footer: '',
- icon: undefined,
- iconColor: undefined,
- iconHtml: undefined,
- template: undefined,
- toast: false,
- showClass: {
- popup: 'swal2-show',
- backdrop: 'swal2-backdrop-show',
- icon: 'swal2-icon-show'
- },
- hideClass: {
- popup: 'swal2-hide',
- backdrop: 'swal2-backdrop-hide',
- icon: 'swal2-icon-hide'
- },
- customClass: {},
- target: 'body',
- color: undefined,
- backdrop: true,
- heightAuto: true,
- allowOutsideClick: true,
- allowEscapeKey: true,
- allowEnterKey: true,
- stopKeydownPropagation: true,
- keydownListenerCapture: false,
- showConfirmButton: true,
- showDenyButton: false,
- showCancelButton: false,
- preConfirm: undefined,
- preDeny: undefined,
- confirmButtonText: 'OK',
- confirmButtonAriaLabel: '',
- confirmButtonColor: undefined,
- denyButtonText: 'No',
- denyButtonAriaLabel: '',
- denyButtonColor: undefined,
- cancelButtonText: 'Cancel',
- cancelButtonAriaLabel: '',
- cancelButtonColor: undefined,
- buttonsStyling: true,
- reverseButtons: false,
- focusConfirm: true,
- focusDeny: false,
- focusCancel: false,
- returnFocus: true,
- showCloseButton: false,
- closeButtonHtml: '×',
- closeButtonAriaLabel: 'Close this dialog',
- loaderHtml: '',
- showLoaderOnConfirm: false,
- showLoaderOnDeny: false,
- imageUrl: undefined,
- imageWidth: undefined,
- imageHeight: undefined,
- imageAlt: '',
- timer: undefined,
- timerProgressBar: false,
- width: undefined,
- padding: undefined,
- background: undefined,
- input: undefined,
- inputPlaceholder: '',
- inputLabel: '',
- inputValue: '',
- inputOptions: {},
- inputAutoTrim: true,
- inputAttributes: {},
- inputValidator: undefined,
- returnInputValueOnDeny: false,
- validationMessage: undefined,
- grow: false,
- position: 'center',
- progressSteps: [],
- currentProgressStep: undefined,
- progressStepsDistance: undefined,
- willOpen: undefined,
- didOpen: undefined,
- didRender: undefined,
- willClose: undefined,
- didClose: undefined,
- didDestroy: undefined,
- scrollbarPadding: true
- };
- const updatableParams = ['allowEscapeKey', 'allowOutsideClick', 'background', 'buttonsStyling', 'cancelButtonAriaLabel', 'cancelButtonColor', 'cancelButtonText', 'closeButtonAriaLabel', 'closeButtonHtml', 'color', 'confirmButtonAriaLabel', 'confirmButtonColor', 'confirmButtonText', 'currentProgressStep', 'customClass', 'denyButtonAriaLabel', 'denyButtonColor', 'denyButtonText', 'didClose', 'didDestroy', 'footer', 'hideClass', 'html', 'icon', 'iconColor', 'iconHtml', 'imageAlt', 'imageHeight', 'imageUrl', 'imageWidth', 'preConfirm', 'preDeny', 'progressSteps', 'returnFocus', 'reverseButtons', 'showCancelButton', 'showCloseButton', 'showConfirmButton', 'showDenyButton', 'text', 'title', 'titleText', 'willClose'];
- const deprecatedParams = {};
- const toastIncompatibleParams = ['allowOutsideClick', 'allowEnterKey', 'backdrop', 'focusConfirm', 'focusDeny', 'focusCancel', 'returnFocus', 'heightAuto', 'keydownListenerCapture'];
-
- /**
- * Is valid parameter
- *
- * @param {string} paramName
- * @returns {boolean}
- */
- const isValidParameter = paramName => {
- return Object.prototype.hasOwnProperty.call(defaultParams, paramName);
- };
-
- /**
- * Is valid parameter for Swal.update() method
- *
- * @param {string} paramName
- * @returns {boolean}
- */
- const isUpdatableParameter = paramName => {
- return updatableParams.indexOf(paramName) !== -1;
- };
-
- /**
- * Is deprecated parameter
- *
- * @param {string} paramName
- * @returns {string | undefined}
- */
- const isDeprecatedParameter = paramName => {
- return deprecatedParams[paramName];
- };
-
- /**
- * @param {string} param
- */
- const checkIfParamIsValid = param => {
- if (!isValidParameter(param)) {
- warn(`Unknown parameter "${param}"`);
- }
- };
-
- /**
- * @param {string} param
- */
- const checkIfToastParamIsValid = param => {
- if (toastIncompatibleParams.includes(param)) {
- warn(`The parameter "${param}" is incompatible with toasts`);
- }
- };
-
- /**
- * @param {string} param
- */
- const checkIfParamIsDeprecated = param => {
- if (isDeprecatedParameter(param)) {
- warnAboutDeprecation(param, isDeprecatedParameter(param));
- }
- };
-
- /**
- * Show relevant warnings for given params
- *
- * @param {SweetAlertOptions} params
- */
- const showWarningsForParams = params => {
- if (params.backdrop === false && params.allowOutsideClick) {
- warn('"allowOutsideClick" parameter requires `backdrop` parameter to be set to `true`');
- }
- for (const param in params) {
- checkIfParamIsValid(param);
- if (params.toast) {
- checkIfToastParamIsValid(param);
- }
- checkIfParamIsDeprecated(param);
- }
- };
-
- /**
- * Updates popup parameters.
- */
- function update(params) {
- const popup = getPopup();
- const innerParams = privateProps.innerParams.get(this);
- if (!popup || hasClass(popup, innerParams.hideClass.popup)) {
- return warn(`You're trying to update the closed or closing popup, that won't work. Use the update() method in preConfirm parameter or show a new popup.`);
- }
- const validUpdatableParams = filterValidParams(params);
- const updatedParams = Object.assign({}, innerParams, validUpdatableParams);
- render(this, updatedParams);
- privateProps.innerParams.set(this, updatedParams);
- Object.defineProperties(this, {
- params: {
- value: Object.assign({}, this.params, params),
- writable: false,
- enumerable: true
- }
- });
- }
- const filterValidParams = params => {
- const validUpdatableParams = {};
- Object.keys(params).forEach(param => {
- if (isUpdatableParameter(param)) {
- validUpdatableParams[param] = params[param];
- } else {
- warn(`Invalid parameter to update: ${param}`);
- }
- });
- return validUpdatableParams;
- };
-
- function _destroy() {
- const domCache = privateProps.domCache.get(this);
- const innerParams = privateProps.innerParams.get(this);
- if (!innerParams) {
- disposeWeakMaps(this); // The WeakMaps might have been partly destroyed, we must recall it to dispose any remaining WeakMaps #2335
- return; // This instance has already been destroyed
- }
-
- // Check if there is another Swal closing
- if (domCache.popup && globalState.swalCloseEventFinishedCallback) {
- globalState.swalCloseEventFinishedCallback();
- delete globalState.swalCloseEventFinishedCallback;
- }
- if (typeof innerParams.didDestroy === 'function') {
- innerParams.didDestroy();
- }
- disposeSwal(this);
- }
-
- /**
- * @param {SweetAlert2} instance
- */
- const disposeSwal = instance => {
- disposeWeakMaps(instance);
- // Unset this.params so GC will dispose it (#1569)
- // @ts-ignore
- delete instance.params;
- // Unset globalState props so GC will dispose globalState (#1569)
- delete globalState.keydownHandler;
- delete globalState.keydownTarget;
- // Unset currentInstance
- delete globalState.currentInstance;
- };
-
- /**
- * @param {SweetAlert2} instance
- */
- const disposeWeakMaps = instance => {
- // If the current instance is awaiting a promise result, we keep the privateMethods to call them once the promise result is retrieved #2335
- // @ts-ignore
- if (instance.isAwaitingPromise()) {
- unsetWeakMaps(privateProps, instance);
- privateProps.awaitingPromise.set(instance, true);
- } else {
- unsetWeakMaps(privateMethods, instance);
- unsetWeakMaps(privateProps, instance);
- }
- };
-
- /**
- * @param {object} obj
- * @param {SweetAlert2} instance
- */
- const unsetWeakMaps = (obj, instance) => {
- for (const i in obj) {
- obj[i].delete(instance);
- }
- };
-
- var instanceMethods = /*#__PURE__*/Object.freeze({
- __proto__: null,
- hideLoading: hideLoading,
- disableLoading: hideLoading,
- getInput: getInput,
- close: close,
- isAwaitingPromise: isAwaitingPromise,
- rejectPromise: rejectPromise,
- handleAwaitingPromise: handleAwaitingPromise,
- closePopup: close,
- closeModal: close,
- closeToast: close,
- enableButtons: enableButtons,
- disableButtons: disableButtons,
- enableInput: enableInput,
- disableInput: disableInput,
- showValidationMessage: showValidationMessage,
- resetValidationMessage: resetValidationMessage,
- getProgressSteps: getProgressSteps,
- update: update,
- _destroy: _destroy
- });
-
- /**
- * Shows loader (spinner), this is useful with AJAX requests.
- * By default the loader be shown instead of the "Confirm" button.
- */
- const showLoading = buttonToReplace => {
- let popup = getPopup();
- if (!popup) {
- new Swal(); // eslint-disable-line no-new
- }
-
- popup = getPopup();
- const loader = getLoader();
- if (isToast()) {
- hide(getIcon());
- } else {
- replaceButton(popup, buttonToReplace);
- }
- show(loader);
- popup.setAttribute('data-loading', 'true');
- popup.setAttribute('aria-busy', 'true');
- popup.focus();
- };
- const replaceButton = (popup, buttonToReplace) => {
- const actions = getActions();
- const loader = getLoader();
- if (!buttonToReplace && isVisible$1(getConfirmButton())) {
- buttonToReplace = getConfirmButton();
- }
- show(actions);
- if (buttonToReplace) {
- hide(buttonToReplace);
- loader.setAttribute('data-button-to-replace', buttonToReplace.className);
- }
- loader.parentNode.insertBefore(loader, buttonToReplace);
- addClass([popup, actions], swalClasses.loading);
- };
-
- /**
- * @typedef { string | number | boolean } InputValue
- */
-
- /**
- * @param {SweetAlert2} instance
- * @param {SweetAlertOptions} params
- */
- const handleInputOptionsAndValue = (instance, params) => {
- if (params.input === 'select' || params.input === 'radio') {
- handleInputOptions(instance, params);
- } else if (['text', 'email', 'number', 'tel', 'textarea'].includes(params.input) && (hasToPromiseFn(params.inputValue) || isPromise(params.inputValue))) {
- showLoading(getConfirmButton());
- handleInputValue(instance, params);
- }
- };
-
- /**
- * @param {SweetAlert2} instance
- * @param {SweetAlertOptions} innerParams
- * @returns {string | number | File | FileList | null}
- */
- const getInputValue = (instance, innerParams) => {
- const input = instance.getInput();
- if (!input) {
- return null;
- }
- switch (innerParams.input) {
- case 'checkbox':
- return getCheckboxValue(input);
- case 'radio':
- return getRadioValue(input);
- case 'file':
- return getFileValue(input);
- default:
- return innerParams.inputAutoTrim ? input.value.trim() : input.value;
- }
- };
-
- /**
- * @param {HTMLInputElement} input
- * @returns {number}
- */
- const getCheckboxValue = input => input.checked ? 1 : 0;
-
- /**
- * @param {HTMLInputElement} input
- * @returns {string | null}
- */
- const getRadioValue = input => input.checked ? input.value : null;
-
- /**
- * @param {HTMLInputElement} input
- * @returns {FileList | File | null}
- */
- const getFileValue = input => input.files.length ? input.getAttribute('multiple') !== null ? input.files : input.files[0] : null;
-
- /**
- * @param {SweetAlert2} instance
- * @param {SweetAlertOptions} params
- */
- const handleInputOptions = (instance, params) => {
- const popup = getPopup();
- /**
- * @param {Record} inputOptions
- */
- const processInputOptions = inputOptions => {
- populateInputOptions[params.input](popup, formatInputOptions(inputOptions), params);
- };
- if (hasToPromiseFn(params.inputOptions) || isPromise(params.inputOptions)) {
- showLoading(getConfirmButton());
- asPromise(params.inputOptions).then(inputOptions => {
- instance.hideLoading();
- processInputOptions(inputOptions);
- });
- } else if (typeof params.inputOptions === 'object') {
- processInputOptions(params.inputOptions);
- } else {
- error(`Unexpected type of inputOptions! Expected object, Map or Promise, got ${typeof params.inputOptions}`);
- }
- };
-
- /**
- * @param {SweetAlert2} instance
- * @param {SweetAlertOptions} params
- */
- const handleInputValue = (instance, params) => {
- const input = instance.getInput();
- hide(input);
- asPromise(params.inputValue).then(inputValue => {
- input.value = params.input === 'number' ? `${parseFloat(inputValue) || 0}` : `${inputValue}`;
- show(input);
- input.focus();
- instance.hideLoading();
- }).catch(err => {
- error(`Error in inputValue promise: ${err}`);
- input.value = '';
- show(input);
- input.focus();
- instance.hideLoading();
- });
- };
- const populateInputOptions = {
- /**
- * @param {HTMLElement} popup
- * @param {Record} inputOptions
- * @param {SweetAlertOptions} params
- */
- select: (popup, inputOptions, params) => {
- const select = getDirectChildByClass(popup, swalClasses.select);
- /**
- * @param {HTMLElement} parent
- * @param {string} optionLabel
- * @param {string} optionValue
- */
- const renderOption = (parent, optionLabel, optionValue) => {
- const option = document.createElement('option');
- option.value = optionValue;
- setInnerHtml(option, optionLabel);
- option.selected = isSelected(optionValue, params.inputValue);
- parent.appendChild(option);
- };
- inputOptions.forEach(inputOption => {
- const optionValue = inputOption[0];
- const optionLabel = inputOption[1];
- //