diff --git a/webseite/assets/css/topic.css b/webseite/assets/css/topic.css index 3d6e0a5..4a1674e 100644 --- a/webseite/assets/css/topic.css +++ b/webseite/assets/css/topic.css @@ -208,16 +208,79 @@ body { /* List style improvement */ .content-text li { - position: relative; - padding-left: 1.5rem; + margin-left: 1.5rem; + padding-left: 0.5rem; margin-bottom: 0.5rem; } -.content-text li::before { - content: '•'; - position: absolute; - left: 0; - font-weight: bold; +.content-text ul li { + list-style-type: disc; +} + +.content-text ol li { + list-style-type: decimal; +} + +/* Einzelne Toast Styles */ +.toast-content { + display: flex; + align-items: center; + border-radius: 12px; /* Abgerundete Ecken */ + padding: 20px; + box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); + min-width: 200px; + max-width: 80%; + transition: opacity 0.5s ease, transform 0.5s ease; + opacity: 0; + transform: translateY(-20px); +} + +/* Spezifische Klassen für verschiedene Toast-Typen */ +.toast-success { + background-color: #38a169; /* Grüner Hintergrund */ +} + +.toast-error { + background-color: #e53e3e; /* Roter Hintergrund */ +} + +.toast-info { + background-color: #4299e1; /* Blauer Hintergrund */ +} + +/* Sichtbarkeit */ +.toast-content.show { + opacity: 1; + transform: translateY(0); +} + +/* Icon Styling */ +.toast-icon { + font-size: 32px; /* Größeres Icon */ + margin-right: 20px; /* Abstand zwischen Icon und Text */ + color: white; /* Icons sollen immer weiß sein */ +} + +/* Nachrichten-Text Styling */ +.toast-message { + color: white; + font-size: 18px; /* Größere Schriftgröße */ +} + + +.task-container { + border-radius: 20px; + padding: 2rem; + margin-bottom: 2rem; + /*box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);*/ + box-shadow: 2px 4px 6px 2px rgba(0, 0, 0, 0.1); + transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1); +} + +.variable-input{ + border: 2px solid; + border-radius: 8px; + text-align: center; } diff --git a/webseite/assets/js/katex_autorender_mod.js b/webseite/assets/js/katex_autorender_mod.js new file mode 100644 index 0000000..a7fa06f --- /dev/null +++ b/webseite/assets/js/katex_autorender_mod.js @@ -0,0 +1,392 @@ +(function webpackUniversalModuleDefinition(root, factory) { + if (typeof exports === 'object' && typeof module === 'object') + module.exports = factory(require("katex")); + else if (typeof define === 'function' && define.amd) + define(["katex"], factory); + else if (typeof exports === 'object') + exports["renderMathInElement"] = factory(require("katex")); + else + root["renderMathInElement"] = factory(root["katex"]); +})((typeof self !== 'undefined' ? self : this), function (__WEBPACK_EXTERNAL_MODULE__757__) { + return /******/ (function () { // webpackBootstrap + /******/ + "use strict"; + /******/ + var __webpack_modules__ = ({ + + /***/ 757: + /***/ (function (module) { + + module.exports = __WEBPACK_EXTERNAL_MODULE__757__; + + /***/ + }) + + /******/ + }); + /************************************************************************/ + /******/ // The module cache + /******/ + var __webpack_module_cache__ = {}; + /******/ + /******/ // The require function + /******/ + function __webpack_require__(moduleId) { + /******/ // Check if module is in cache + /******/ + var cachedModule = __webpack_module_cache__[moduleId]; + /******/ + if (cachedModule !== undefined) { + /******/ + return cachedModule.exports; + /******/ + } + /******/ // Create a new module (and put it into the cache) + /******/ + var module = __webpack_module_cache__[moduleId] = { + /******/ // no module.id needed + /******/ // no module.loaded needed + /******/ exports: {} + /******/ + }; + /******/ + /******/ // Execute the module function + /******/ + __webpack_modules__[moduleId](module, module.exports, __webpack_require__); + /******/ + /******/ // Return the exports of the module + /******/ + return module.exports; + /******/ + } + + /******/ + /************************************************************************/ + /******/ /* webpack/runtime/compat get default export */ + /******/ + !function () { + /******/ // getDefaultExport function for compatibility with non-harmony modules + /******/ + __webpack_require__.n = function (module) { + /******/ + var getter = module && module.__esModule ? + /******/ function () { + return module['default']; + } : + /******/ function () { + return module; + }; + /******/ + __webpack_require__.d(getter, {a: getter}); + /******/ + return getter; + /******/ + }; + /******/ + }(); + /******/ + /******/ /* webpack/runtime/define property getters */ + /******/ + !function () { + /******/ // define getter functions for harmony exports + /******/ + __webpack_require__.d = function (exports, definition) { + /******/ + for (var key in definition) { + /******/ + if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { + /******/ + Object.defineProperty(exports, key, {enumerable: true, get: definition[key]}); + /******/ + } + /******/ + } + /******/ + }; + /******/ + }(); + /******/ + /******/ /* webpack/runtime/hasOwnProperty shorthand */ + /******/ + !function () { + /******/ + __webpack_require__.o = function (obj, prop) { + return Object.prototype.hasOwnProperty.call(obj, prop); + } + /******/ + }(); + /******/ + /************************************************************************/ + var __webpack_exports__ = {}; + +// EXPORTS + __webpack_require__.d(__webpack_exports__, { + "default": function () { + return /* binding */ auto_render; + } + }); + +// EXTERNAL MODULE: external "katex" + var external_katex_ = __webpack_require__(757); + var external_katex_default = /*#__PURE__*/__webpack_require__.n(external_katex_); + ;// CONCATENATED MODULE: ./contrib/auto-render/splitAtDelimiters.js + /* eslint no-constant-condition:0 */ + const findEndOfMath = function (delimiter, text, startIndex) { + // Adapted from + // https://github.com/Khan/perseus/blob/master/src/perseus-markdown.jsx + let index = startIndex; + let braceLevel = 0; + const delimLength = delimiter.length; + + while (index < text.length) { + const character = text[index]; + + if (braceLevel <= 0 && text.slice(index, index + delimLength) === delimiter) { + return index; + } else if (character === "\\") { + index++; + } else if (character === "{") { + braceLevel++; + } else if (character === "}") { + braceLevel--; + } + + index++; + } + + return -1; + }; + + const escapeRegex = function (string) { + return string.replace(/[-/\\^$*+?.()|[\]{}]/g, "\\$&"); + }; + + const amsRegex = /^\\begin{/; + + const splitAtDelimiters = function (text, delimiters) { + let index; + const data = []; + const regexLeft = new RegExp("(" + delimiters.map(x => escapeRegex(x.left)).join("|") + ")"); + + while (true) { + index = text.search(regexLeft); + + if (index === -1) { + break; + } + + if (index > 0) { + data.push({ + type: "text", + data: text.slice(0, index) + }); + text = text.slice(index); // now text starts with delimiter + } // ... so this always succeeds: + + + const i = delimiters.findIndex(delim => text.startsWith(delim.left)); + index = findEndOfMath(delimiters[i].right, text, delimiters[i].left.length); + + if (index === -1) { + break; + } + + const rawData = text.slice(0, index + delimiters[i].right.length); + const math = amsRegex.test(rawData) ? rawData : text.slice(delimiters[i].left.length, index); + data.push({ + type: "math", + data: math, + rawData, + display: delimiters[i].display + }); + text = text.slice(index + delimiters[i].right.length); + } + + if (text !== "") { + data.push({ + type: "text", + data: text + }); + } + + return data; + }; + + /* harmony default export */ + var auto_render_splitAtDelimiters = (splitAtDelimiters); + ;// CONCATENATED MODULE: ./contrib/auto-render/auto-render.js + /* eslint no-console:0 */ + + + /* Note: optionsCopy is mutated by this method. If it is ever exposed in the + * API, we should copy it before mutating. + */ + + const renderMathInText = function (text, optionsCopy) { + const data = auto_render_splitAtDelimiters(text, optionsCopy.delimiters); + + if (data.length === 1 && data[0].type === 'text') { + // There is no formula in the text. + // Let's return null which means there is no need to replace + // the current text node with a new one. + return null; + } + + const fragment = document.createDocumentFragment(); + + for (let i = 0; i < data.length; i++) { + if (data[i].type === "text") { + fragment.appendChild(document.createTextNode(data[i].data)); + } else { + const span = document.createElement("span"); + let math = data[i].data; // Override any display mode defined in the settings with that + // defined by the text itself + + optionsCopy.displayMode = data[i].display; + + try { + if (optionsCopy.preProcess) { + math = optionsCopy.preProcess(math); + } + + /* + Modified segment (two lines): + makes the rendered Formula compatible with Quill by adding the required Data + */ + span.classList.add('ql-formula'); + span.setAttribute('data-value', math); + + external_katex_default().render(math, span, optionsCopy); + } catch (e) { + if (!(e instanceof (external_katex_default()).ParseError)) { + throw e; + } + + optionsCopy.errorCallback("KaTeX auto-render: Failed to parse `" + data[i].data + "` with ", e); + fragment.appendChild(document.createTextNode(data[i].rawData)); + continue; + } + + fragment.appendChild(span); + } + } + + return fragment; + }; + + const renderElem = function (elem, optionsCopy) { + for (let i = 0; i < elem.childNodes.length; i++) { + const childNode = elem.childNodes[i]; + + if (childNode.nodeType === 3) { + // Text node + // Concatenate all sibling text nodes. + // Webkit browsers split very large text nodes into smaller ones, + // so the delimiters may be split across different nodes. + let textContentConcat = childNode.textContent; + let sibling = childNode.nextSibling; + let nSiblings = 0; + + while (sibling && sibling.nodeType === Node.TEXT_NODE) { + textContentConcat += sibling.textContent; + sibling = sibling.nextSibling; + nSiblings++; + } + + const frag = renderMathInText(textContentConcat, optionsCopy); + + if (frag) { + // Remove extra text nodes + for (let j = 0; j < nSiblings; j++) { + childNode.nextSibling.remove(); + } + + i += frag.childNodes.length - 1; + elem.replaceChild(frag, childNode); + } else { + // If the concatenated text does not contain math + // the siblings will not either + i += nSiblings; + } + } else if (childNode.nodeType === 1) { + // Element node + const className = ' ' + childNode.className + ' '; + const shouldRender = optionsCopy.ignoredTags.indexOf(childNode.nodeName.toLowerCase()) === -1 && optionsCopy.ignoredClasses.every(x => className.indexOf(' ' + x + ' ') === -1); + + if (shouldRender) { + renderElem(childNode, optionsCopy); + } + } // Otherwise, it's something else, and ignore it. + + } + }; + + const renderMathInElement = function (elem, options) { + if (!elem) { + throw new Error("No element provided to render"); + } + + const optionsCopy = {}; // Object.assign(optionsCopy, option) + + for (const option in options) { + if (options.hasOwnProperty(option)) { + optionsCopy[option] = options[option]; + } + } // default options + + + optionsCopy.delimiters = optionsCopy.delimiters || [{ + left: "$$", + right: "$$", + display: true + }, { + left: "\\(", + right: "\\)", + display: false + }, // LaTeX uses $…$, but it ruins the display of normal `$` in text: + // {left: "$", right: "$", display: false}, + // $ must come after $$ + // Render AMS environments even if outside $$…$$ delimiters. + { + left: "\\begin{equation}", + right: "\\end{equation}", + display: true + }, { + left: "\\begin{align}", + right: "\\end{align}", + display: true + }, { + left: "\\begin{alignat}", + right: "\\end{alignat}", + display: true + }, { + left: "\\begin{gather}", + right: "\\end{gather}", + display: true + }, { + left: "\\begin{CD}", + right: "\\end{CD}", + display: true + }, { + left: "\\[", + right: "\\]", + display: true + }]; + optionsCopy.ignoredTags = optionsCopy.ignoredTags || ["script", "noscript", "style", "textarea", "pre", "code", "option"]; + optionsCopy.ignoredClasses = optionsCopy.ignoredClasses || []; + optionsCopy.errorCallback = optionsCopy.errorCallback || console.error; // Enable sharing of global macros defined via `\gdef` between different + // math elements within a single call to `renderMathInElement`. + + optionsCopy.macros = optionsCopy.macros || {}; + renderElem(elem, optionsCopy); + }; + + /* harmony default export */ + var auto_render = (renderMathInElement); + __webpack_exports__ = __webpack_exports__["default"]; + /******/ + return __webpack_exports__; + /******/ + })() + ; +}); \ No newline at end of file diff --git a/webseite/assets/js/quill_mod.js b/webseite/assets/js/quill_mod.js new file mode 100644 index 0000000..2845638 --- /dev/null +++ b/webseite/assets/js/quill_mod.js @@ -0,0 +1,7236 @@ +/*! For license information please see quill.js.LICENSE.txt */ +!function (t, e) { + "object" == typeof exports && "object" == typeof module ? module.exports = e() : "function" == typeof define && define.amd ? define([], e) : "object" == typeof exports ? exports.Quill = e() : t.Quill = e() +}(self, (function () { + return function () { + var t = { + 9698: function (t, e, n) { + "use strict"; + n.d(e, { + Ay: function () { + return c + }, Ji: function () { + return d + }, mG: function () { + return h + }, zo: function () { + return u + } + }); + var r = n(6003), i = n(5232), s = n.n(i), o = n(3036), l = n(4850), a = n(5508); + + class c extends r.BlockBlot { + cache = {}; + + delta() { + return null == this.cache.delta && (this.cache.delta = h(this)), this.cache.delta + } + + deleteAt(t, e) { + super.deleteAt(t, e), this.cache = {} + } + + formatAt(t, e, n, i) { + e <= 0 || (this.scroll.query(n, r.Scope.BLOCK) ? t + e === this.length() && this.format(n, i) : super.formatAt(t, Math.min(e, this.length() - t - 1), n, i), this.cache = {}) + } + + insertAt(t, e, n) { + if (null != n) return super.insertAt(t, e, n), void (this.cache = {}); + if (0 === e.length) return; + const r = e.split("\n"), i = r.shift(); + i.length > 0 && (t < this.length() - 1 || null == this.children.tail ? super.insertAt(Math.min(t, this.length() - 1), i) : this.children.tail.insertAt(this.children.tail.length(), i), this.cache = {}); + let s = this; + r.reduce(((t, e) => (s = s.split(t, !0), s.insertAt(0, e), e.length)), t + i.length) + } + + insertBefore(t, e) { + const {head: n} = this.children; + super.insertBefore(t, e), n instanceof o.A && n.remove(), this.cache = {} + } + + length() { + return null == this.cache.length && (this.cache.length = super.length() + 1), this.cache.length + } + + moveChildren(t, e) { + super.moveChildren(t, e), this.cache = {} + } + + optimize(t) { + super.optimize(t), this.cache = {} + } + + path(t) { + return super.path(t, !0) + } + + removeChild(t) { + super.removeChild(t), this.cache = {} + } + + split(t) { + let e = arguments.length > 1 && void 0 !== arguments[1] && arguments[1]; + if (e && (0 === t || t >= this.length() - 1)) { + const e = this.clone(); + return 0 === t ? (this.parent.insertBefore(e, this), this) : (this.parent.insertBefore(e, this.next), e) + } + const n = super.split(t, e); + return this.cache = {}, n + } + } + + c.blotName = "block", c.tagName = "P", c.defaultChild = o.A, c.allowedChildren = [o.A, l.A, r.EmbedBlot, a.A]; + + class u extends r.EmbedBlot { + attach() { + super.attach(), this.attributes = new r.AttributorStore(this.domNode) + } + + delta() { + return (new (s())).insert(this.value(), {...this.formats(), ...this.attributes.values()}) + } + + format(t, e) { + const n = this.scroll.query(t, r.Scope.BLOCK_ATTRIBUTE); + null != n && this.attributes.attribute(n, e) + } + + formatAt(t, e, n, r) { + this.format(n, r) + } + + insertAt(t, e, n) { + if (null != n) return void super.insertAt(t, e, n); + const r = e.split("\n"), i = r.pop(), s = r.map((t => { + const e = this.scroll.create(c.blotName); + return e.insertAt(0, t), e + })), o = this.split(t); + s.forEach((t => { + this.parent.insertBefore(t, o) + })), i && this.parent.insertBefore(this.scroll.create("text", i), o) + } + } + + function h(t) { + let e = !(arguments.length > 1 && void 0 !== arguments[1]) || arguments[1]; + return t.descendants(r.LeafBlot).reduce(((t, n) => 0 === n.length() ? t : t.insert(n.value(), d(n, {}, e))), new (s())).insert("\n", d(t)) + } + + function d(t) { + let e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, + n = !(arguments.length > 2 && void 0 !== arguments[2]) || arguments[2]; + return null == t ? e : ("formats" in t && "function" == typeof t.formats && (e = {...e, ...t.formats()}, n && delete e["code-token"]), null == t.parent || "scroll" === t.parent.statics.blotName || t.parent.statics.scope !== t.statics.scope ? e : d(t.parent, e, n)) + } + + u.scope = r.Scope.BLOCK_BLOT + }, 3036: function (t, e, n) { + "use strict"; + var r = n(6003); + + class i extends r.EmbedBlot { + static value() { + } + + optimize() { + (this.prev || this.next) && this.remove() + } + + length() { + return 0 + } + + value() { + return "" + } + } + + i.blotName = "break", i.tagName = "BR", e.A = i + }, 580: function (t, e, n) { + "use strict"; + var r = n(6003); + + class i extends r.ContainerBlot { + } + + e.A = i + }, 4541: function (t, e, n) { + "use strict"; + var r = n(6003), i = n(5508); + + class s extends r.EmbedBlot { + static blotName = "cursor"; + static className = "ql-cursor"; + static tagName = "span"; + static CONTENTS = "\ufeff"; + + static value() { + } + + constructor(t, e, n) { + super(t, e), this.selection = n, this.textNode = document.createTextNode(s.CONTENTS), this.domNode.appendChild(this.textNode), this.savedLength = 0 + } + + detach() { + null != this.parent && this.parent.removeChild(this) + } + + format(t, e) { + if (0 !== this.savedLength) return void super.format(t, e); + let n = this, i = 0; + for (; null != n && n.statics.scope !== r.Scope.BLOCK_BLOT;) i += n.offset(n.parent), n = n.parent; + null != n && (this.savedLength = s.CONTENTS.length, n.optimize(), n.formatAt(i, s.CONTENTS.length, t, e), this.savedLength = 0) + } + + index(t, e) { + return t === this.textNode ? 0 : super.index(t, e) + } + + length() { + return this.savedLength + } + + position() { + return [this.textNode, this.textNode.data.length] + } + + remove() { + super.remove(), this.parent = null + } + + restore() { + if (this.selection.composing || null == this.parent) return null; + const t = this.selection.getNativeRange(); + for (; null != this.domNode.lastChild && this.domNode.lastChild !== this.textNode;) this.domNode.parentNode.insertBefore(this.domNode.lastChild, this.domNode); + const e = this.prev instanceof i.A ? this.prev : null, n = e ? e.length() : 0, + r = this.next instanceof i.A ? this.next : null, o = r ? r.text : "", {textNode: l} = this, + a = l.data.split(s.CONTENTS).join(""); + let c; + if (l.data = s.CONTENTS, e) c = e, (a || r) && (e.insertAt(e.length(), a + o), r && r.remove()); else if (r) c = r, r.insertAt(0, a); else { + const t = document.createTextNode(a); + c = this.scroll.create(t), this.parent.insertBefore(c, this) + } + if (this.remove(), t) { + const i = (t, i) => e && t === e.domNode ? i : t === l ? n + i - 1 : r && t === r.domNode ? n + a.length + i : null, + s = i(t.start.node, t.start.offset), o = i(t.end.node, t.end.offset); + if (null !== s && null !== o) return { + startNode: c.domNode, + startOffset: s, + endNode: c.domNode, + endOffset: o + } + } + return null + } + + update(t, e) { + if (t.some((t => "characterData" === t.type && t.target === this.textNode))) { + const t = this.restore(); + t && (e.range = t) + } + } + + optimize(t) { + super.optimize(t); + let {parent: e} = this; + for (; e;) { + if ("A" === e.domNode.tagName) { + this.savedLength = s.CONTENTS.length, e.isolate(this.offset(e), this.length()).unwrap(), this.savedLength = 0; + break + } + e = e.parent + } + } + + value() { + return "" + } + } + + e.A = s + }, 746: function (t, e, n) { + "use strict"; + var r = n(6003), i = n(5508); + const s = "\ufeff"; + + class o extends r.EmbedBlot { + constructor(t, e) { + super(t, e), this.contentNode = document.createElement("span"), this.contentNode.setAttribute("contenteditable", "false"), Array.from(this.domNode.childNodes).forEach((t => { + this.contentNode.appendChild(t) + })), this.leftGuard = document.createTextNode(s), this.rightGuard = document.createTextNode(s), this.domNode.appendChild(this.leftGuard), this.domNode.appendChild(this.contentNode), this.domNode.appendChild(this.rightGuard) + } + + index(t, e) { + return t === this.leftGuard ? 0 : t === this.rightGuard ? 1 : super.index(t, e) + } + + restore(t) { + let e, n = null; + const r = t.data.split(s).join(""); + if (t === this.leftGuard) if (this.prev instanceof i.A) { + const t = this.prev.length(); + this.prev.insertAt(t, r), n = {startNode: this.prev.domNode, startOffset: t + r.length} + } else e = document.createTextNode(r), this.parent.insertBefore(this.scroll.create(e), this), n = { + startNode: e, + startOffset: r.length + }; else t === this.rightGuard && (this.next instanceof i.A ? (this.next.insertAt(0, r), n = { + startNode: this.next.domNode, + startOffset: r.length + }) : (e = document.createTextNode(r), this.parent.insertBefore(this.scroll.create(e), this.next), n = { + startNode: e, + startOffset: r.length + })); + return t.data = s, n + } + + update(t, e) { + t.forEach((t => { + if ("characterData" === t.type && (t.target === this.leftGuard || t.target === this.rightGuard)) { + const n = this.restore(t.target); + n && (e.range = n) + } + })) + } + } + + e.A = o + }, 4850: function (t, e, n) { + "use strict"; + var r = n(6003), i = n(3036), s = n(5508); + + class o extends r.InlineBlot { + static allowedChildren = [o, i.A, r.EmbedBlot, s.A]; + static order = ["cursor", "inline", "link", "underline", "strike", "italic", "bold", "script", "code"]; + + static compare(t, e) { + const n = o.order.indexOf(t), r = o.order.indexOf(e); + return n >= 0 || r >= 0 ? n - r : t === e ? 0 : t < e ? -1 : 1 + } + + formatAt(t, e, n, i) { + if (o.compare(this.statics.blotName, n) < 0 && this.scroll.query(n, r.Scope.BLOT)) { + const r = this.isolate(t, e); + i && r.wrap(n, i) + } else super.formatAt(t, e, n, i) + } + + optimize(t) { + if (super.optimize(t), this.parent instanceof o && o.compare(this.statics.blotName, this.parent.statics.blotName) > 0) { + const t = this.parent.isolate(this.offset(), this.length()); + this.moveChildren(t), t.wrap(this) + } + } + } + + e.A = o + }, 5508: function (t, e, n) { + "use strict"; + n.d(e, { + A: function () { + return i + }, X: function () { + return o + } + }); + var r = n(6003); + + class i extends r.TextBlot { + } + + const s = {"&": "&", "<": "<", ">": ">", '"': """, "'": "'"}; + + function o(t) { + return t.replace(/[&<>"']/g, (t => s[t])) + } + }, 3729: function (t, e, n) { + "use strict"; + n.d(e, { + default: function () { + return R + } + }); + var r = n(6142), i = n(9698), s = n(3036), o = n(580), l = n(4541), a = n(746), c = n(4850), + u = n(6003), h = n(5232), d = n.n(h), f = n(5374); + + function p(t) { + return t instanceof i.Ay || t instanceof i.zo + } + + function g(t) { + return "function" == typeof t.updateContent + } + + class m extends u.ScrollBlot { + static blotName = "scroll"; + static className = "ql-editor"; + static tagName = "DIV"; + static defaultChild = i.Ay; + static allowedChildren = [i.Ay, i.zo, o.A]; + + constructor(t, e, n) { + let {emitter: r} = n; + super(t, e), this.emitter = r, this.batch = !1, this.optimize(), this.enable(), this.domNode.addEventListener("dragstart", (t => this.handleDragStart(t))) + } + + batchStart() { + Array.isArray(this.batch) || (this.batch = []) + } + + batchEnd() { + if (!this.batch) return; + const t = this.batch; + this.batch = !1, this.update(t) + } + + emitMount(t) { + this.emitter.emit(f.A.events.SCROLL_BLOT_MOUNT, t) + } + + emitUnmount(t) { + this.emitter.emit(f.A.events.SCROLL_BLOT_UNMOUNT, t) + } + + emitEmbedUpdate(t, e) { + this.emitter.emit(f.A.events.SCROLL_EMBED_UPDATE, t, e) + } + + deleteAt(t, e) { + const [n, r] = this.line(t), [o] = this.line(t + e); + if (super.deleteAt(t, e), null != o && n !== o && r > 0) { + if (n instanceof i.zo || o instanceof i.zo) return void this.optimize(); + const t = o.children.head instanceof s.A ? null : o.children.head; + n.moveChildren(o, t), n.remove() + } + this.optimize() + } + + enable() { + let t = !(arguments.length > 0 && void 0 !== arguments[0]) || arguments[0]; + this.domNode.setAttribute("contenteditable", t ? "true" : "false") + } + + formatAt(t, e, n, r) { + super.formatAt(t, e, n, r), this.optimize() + } + + insertAt(t, e, n) { + if (t >= this.length()) if (null == n || null == this.scroll.query(e, u.Scope.BLOCK)) { + const t = this.scroll.create(this.statics.defaultChild.blotName); + this.appendChild(t), null == n && e.endsWith("\n") ? t.insertAt(0, e.slice(0, -1), n) : t.insertAt(0, e, n) + } else { + const t = this.scroll.create(e, n); + this.appendChild(t) + } else super.insertAt(t, e, n); + this.optimize() + } + + insertBefore(t, e) { + if (t.statics.scope === u.Scope.INLINE_BLOT) { + const n = this.scroll.create(this.statics.defaultChild.blotName); + n.appendChild(t), super.insertBefore(n, e) + } else super.insertBefore(t, e) + } + + insertContents(t, e) { + const n = this.deltaToRenderBlocks(e.concat((new (d())).insert("\n"))), r = n.pop(); + if (null == r) return; + this.batchStart(); + const s = n.shift(); + if (s) { + const e = "block" === s.type && (0 === s.delta.length() || !this.descendant(i.zo, t)[0] && t < this.length()), + n = "block" === s.type ? s.delta : (new (d())).insert({[s.key]: s.value}); + b(this, t, n); + const r = "block" === s.type ? 1 : 0, o = t + n.length() + r; + e && this.insertAt(o - 1, "\n"); + const l = (0, i.Ji)(this.line(t)[0]), a = h.AttributeMap.diff(l, s.attributes) || {}; + Object.keys(a).forEach((t => { + this.formatAt(o - 1, 1, t, a[t]) + })), t = o + } + let [o, l] = this.children.find(t); + n.length && (o && (o = o.split(l), l = 0), n.forEach((t => { + if ("block" === t.type) b(this.createBlock(t.attributes, o || void 0), 0, t.delta); else { + const e = this.create(t.key, t.value); + this.insertBefore(e, o || void 0), Object.keys(t.attributes).forEach((n => { + e.format(n, t.attributes[n]) + })) + } + }))), "block" === r.type && r.delta.length() && b(this, o ? o.offset(o.scroll) + l : this.length(), r.delta), this.batchEnd(), this.optimize() + } + + isEnabled() { + return "true" === this.domNode.getAttribute("contenteditable") + } + + leaf(t) { + const e = this.path(t).pop(); + if (!e) return [null, -1]; + const [n, r] = e; + return n instanceof u.LeafBlot ? [n, r] : [null, -1] + } + + line(t) { + return t === this.length() ? this.line(t - 1) : this.descendant(p, t) + } + + lines() { + let t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : 0, + e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : Number.MAX_VALUE; + const n = (t, e, r) => { + let i = [], s = r; + return t.children.forEachAt(e, r, ((t, e, r) => { + p(t) ? i.push(t) : t instanceof u.ContainerBlot && (i = i.concat(n(t, e, s))), s -= r + })), i + }; + return n(this, t, e) + } + + optimize() { + let t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [], + e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}; + this.batch || (super.optimize(t, e), t.length > 0 && this.emitter.emit(f.A.events.SCROLL_OPTIMIZE, t, e)) + } + + path(t) { + return super.path(t).slice(1) + } + + remove() { + } + + update(t) { + if (this.batch) return void (Array.isArray(t) && (this.batch = this.batch.concat(t))); + let e = f.A.sources.USER; + "string" == typeof t && (e = t), Array.isArray(t) || (t = this.observer.takeRecords()), (t = t.filter((t => { + let {target: e} = t; + const n = this.find(e, !0); + return n && !g(n) + }))).length > 0 && this.emitter.emit(f.A.events.SCROLL_BEFORE_UPDATE, e, t), super.update(t.concat([])), t.length > 0 && this.emitter.emit(f.A.events.SCROLL_UPDATE, e, t) + } + + updateEmbedAt(t, e, n) { + const [r] = this.descendant((t => t instanceof i.zo), t); + r && r.statics.blotName === e && g(r) && r.updateContent(n) + } + + handleDragStart(t) { + t.preventDefault() + } + + deltaToRenderBlocks(t) { + const e = []; + let n = new (d()); + return t.forEach((t => { + const r = t?.insert; + if (r) if ("string" == typeof r) { + const i = r.split("\n"); + i.slice(0, -1).forEach((r => { + n.insert(r, t.attributes), e.push({ + type: "block", + delta: n, + attributes: t.attributes ?? {} + }), n = new (d()) + })); + const s = i[i.length - 1]; + s && n.insert(s, t.attributes) + } else { + const i = Object.keys(r)[0]; + if (!i) return; + this.query(i, u.Scope.INLINE) ? n.push(t) : (n.length() && e.push({ + type: "block", + delta: n, + attributes: {} + }), n = new (d()), e.push({ + type: "blockEmbed", + key: i, + value: r[i], + attributes: t.attributes ?? {} + })) + } + })), n.length() && e.push({type: "block", delta: n, attributes: {}}), e + } + + createBlock(t, e) { + let n; + const r = {}; + Object.entries(t).forEach((t => { + let [e, i] = t; + null != this.query(e, u.Scope.BLOCK & u.Scope.BLOT) ? n = e : r[e] = i + })); + const i = this.create(n || this.statics.defaultChild.blotName, n ? t[n] : void 0); + this.insertBefore(i, e || void 0); + const s = i.length(); + return Object.entries(r).forEach((t => { + let [e, n] = t; + i.formatAt(0, s, e, n) + })), i + } + } + + function b(t, e, n) { + n.reduce(((e, n) => { + const r = h.Op.length(n); + let s = n.attributes || {}; + if (null != n.insert) if ("string" == typeof n.insert) { + const r = n.insert; + t.insertAt(e, r); + const [o] = t.descendant(u.LeafBlot, e), l = (0, i.Ji)(o); + s = h.AttributeMap.diff(l, s) || {} + } else if ("object" == typeof n.insert) { + const r = Object.keys(n.insert)[0]; + if (null == r) return e; + if (t.insertAt(e, r, n.insert[r]), null != t.scroll.query(r, u.Scope.INLINE)) { + const [n] = t.descendant(u.LeafBlot, e), r = (0, i.Ji)(n); + s = h.AttributeMap.diff(r, s) || {} + } + } + return Object.keys(s).forEach((n => { + t.formatAt(e, r, n, s[n]) + })), e + r + }), e) + } + + var y = m, v = n(5508), A = n(584), x = n(4266); + + class N extends x.A { + static DEFAULTS = {delay: 1e3, maxStack: 100, userOnly: !1}; + lastRecorded = 0; + ignoreChange = !1; + stack = {undo: [], redo: []}; + currentRange = null; + + constructor(t, e) { + super(t, e), this.quill.on(r.Ay.events.EDITOR_CHANGE, ((t, e, n, i) => { + t === r.Ay.events.SELECTION_CHANGE ? e && i !== r.Ay.sources.SILENT && (this.currentRange = e) : t === r.Ay.events.TEXT_CHANGE && (this.ignoreChange || (this.options.userOnly && i !== r.Ay.sources.USER ? this.transform(e) : this.record(e, n)), this.currentRange = w(this.currentRange, e)) + })), this.quill.keyboard.addBinding({ + key: "z", + shortKey: !0 + }, this.undo.bind(this)), this.quill.keyboard.addBinding({ + key: ["z", "Z"], + shortKey: !0, + shiftKey: !0 + }, this.redo.bind(this)), /Win/i.test(navigator.platform) && this.quill.keyboard.addBinding({ + key: "y", + shortKey: !0 + }, this.redo.bind(this)), this.quill.root.addEventListener("beforeinput", (t => { + "historyUndo" === t.inputType ? (this.undo(), t.preventDefault()) : "historyRedo" === t.inputType && (this.redo(), t.preventDefault()) + })) + } + + change(t, e) { + if (0 === this.stack[t].length) return; + const n = this.stack[t].pop(); + if (!n) return; + const i = this.quill.getContents(), s = n.delta.invert(i); + this.stack[e].push({ + delta: s, + range: w(n.range, s) + }), this.lastRecorded = 0, this.ignoreChange = !0, this.quill.updateContents(n.delta, r.Ay.sources.USER), this.ignoreChange = !1, this.restoreSelection(n) + } + + clear() { + this.stack = {undo: [], redo: []} + } + + cutoff() { + this.lastRecorded = 0 + } + + record(t, e) { + if (0 === t.ops.length) return; + this.stack.redo = []; + let n = t.invert(e), r = this.currentRange; + const i = Date.now(); + if (this.lastRecorded + this.options.delay > i && this.stack.undo.length > 0) { + const t = this.stack.undo.pop(); + t && (n = n.compose(t.delta), r = t.range) + } else this.lastRecorded = i; + 0 !== n.length() && (this.stack.undo.push({ + delta: n, + range: r + }), this.stack.undo.length > this.options.maxStack && this.stack.undo.shift()) + } + + redo() { + this.change("redo", "undo") + } + + transform(t) { + E(this.stack.undo, t), E(this.stack.redo, t) + } + + undo() { + this.change("undo", "redo") + } + + restoreSelection(t) { + if (t.range) this.quill.setSelection(t.range, r.Ay.sources.USER); else { + const e = function (t, e) { + const n = e.reduce(((t, e) => t + (e.delete || 0)), 0); + let r = e.length() - n; + return function (t, e) { + const n = e.ops[e.ops.length - 1]; + return null != n && (null != n.insert ? "string" == typeof n.insert && n.insert.endsWith("\n") : null != n.attributes && Object.keys(n.attributes).some((e => null != t.query(e, u.Scope.BLOCK)))) + }(t, e) && (r -= 1), r + }(this.quill.scroll, t.delta); + this.quill.setSelection(e, r.Ay.sources.USER) + } + } + } + + function E(t, e) { + let n = e; + for (let e = t.length - 1; e >= 0; e -= 1) { + const r = t[e]; + t[e] = { + delta: n.transform(r.delta, !0), + range: r.range && w(r.range, n) + }, n = r.delta.transform(n), 0 === t[e].delta.length() && t.splice(e, 1) + } + } + + function w(t, e) { + if (!t) return t; + const n = e.transformPosition(t.index); + return {index: n, length: e.transformPosition(t.index + t.length) - n} + } + + var q = n(8123); + + class k extends x.A { + constructor(t, e) { + super(t, e), t.root.addEventListener("drop", (e => { + e.preventDefault(); + let n = null; + if (document.caretRangeFromPoint) n = document.caretRangeFromPoint(e.clientX, e.clientY); else if (document.caretPositionFromPoint) { + const t = document.caretPositionFromPoint(e.clientX, e.clientY); + n = document.createRange(), n.setStart(t.offsetNode, t.offset), n.setEnd(t.offsetNode, t.offset) + } + const r = n && t.selection.normalizeNative(n); + if (r) { + const n = t.selection.normalizedToRange(r); + e.dataTransfer?.files && this.upload(n, e.dataTransfer.files) + } + })) + } + + upload(t, e) { + const n = []; + Array.from(e).forEach((t => { + t && this.options.mimetypes?.includes(t.type) && n.push(t) + })), n.length > 0 && this.options.handler.call(this, t, n) + } + } + + k.DEFAULTS = { + mimetypes: ["image/png", "image/jpeg"], handler(t, e) { + if (!this.quill.scroll.query("image")) return; + const n = e.map((t => new Promise((e => { + const n = new FileReader; + n.onload = () => { + e(n.result) + }, n.readAsDataURL(t) + })))); + Promise.all(n).then((e => { + const n = e.reduce(((t, e) => t.insert({image: e})), (new (d())).retain(t.index).delete(t.length)); + this.quill.updateContents(n, f.A.sources.USER), this.quill.setSelection(t.index + e.length, f.A.sources.SILENT) + })) + } + }; + var _ = k; + const L = ["insertText", "insertReplacementText"]; + + class S extends x.A { + constructor(t, e) { + super(t, e), t.root.addEventListener("beforeinput", (t => { + this.handleBeforeInput(t) + })), /Android/i.test(navigator.userAgent) || t.on(r.Ay.events.COMPOSITION_BEFORE_START, (() => { + this.handleCompositionStart() + })) + } + + deleteRange(t) { + (0, q.Xo)({range: t, quill: this.quill}) + } + + replaceText(t) { + let e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : ""; + if (0 === t.length) return !1; + if (e) { + const n = this.quill.getFormat(t.index, 1); + this.deleteRange(t), this.quill.updateContents((new (d())).retain(t.index).insert(e, n), r.Ay.sources.USER) + } else this.deleteRange(t); + return this.quill.setSelection(t.index + e.length, 0, r.Ay.sources.SILENT), !0 + } + + handleBeforeInput(t) { + if (this.quill.composition.isComposing || t.defaultPrevented || !L.includes(t.inputType)) return; + const e = t.getTargetRanges ? t.getTargetRanges()[0] : null; + if (!e || !0 === e.collapsed) return; + const n = function (t) { + return "string" == typeof t.data ? t.data : t.dataTransfer?.types.includes("text/plain") ? t.dataTransfer.getData("text/plain") : null + }(t); + if (null == n) return; + const r = this.quill.selection.normalizeNative(e), + i = r ? this.quill.selection.normalizedToRange(r) : null; + i && this.replaceText(i, n) && t.preventDefault() + } + + handleCompositionStart() { + const t = this.quill.getSelection(); + t && this.replaceText(t) + } + } + + var O = S; + const T = /Mac/i.test(navigator.platform); + + class j extends x.A { + isListening = !1; + selectionChangeDeadline = 0; + + constructor(t, e) { + super(t, e), this.handleArrowKeys(), this.handleNavigationShortcuts() + } + + handleArrowKeys() { + this.quill.keyboard.addBinding({ + key: ["ArrowLeft", "ArrowRight"], + offset: 0, + shiftKey: null, + handler(t, e) { + let {line: n, event: i} = e; + if (!(n instanceof u.ParentBlot && n.uiNode)) return !0; + const s = "rtl" === getComputedStyle(n.domNode).direction; + return !!(s && "ArrowRight" !== i.key || !s && "ArrowLeft" !== i.key) || (this.quill.setSelection(t.index - 1, t.length + (i.shiftKey ? 1 : 0), r.Ay.sources.USER), !1) + } + }) + } + + handleNavigationShortcuts() { + this.quill.root.addEventListener("keydown", (t => { + !t.defaultPrevented && (t => "ArrowLeft" === t.key || "ArrowRight" === t.key || "ArrowUp" === t.key || "ArrowDown" === t.key || "Home" === t.key || !(!T || "a" !== t.key || !0 !== t.ctrlKey))(t) && this.ensureListeningToSelectionChange() + })) + } + + ensureListeningToSelectionChange() { + this.selectionChangeDeadline = Date.now() + 100, this.isListening || (this.isListening = !0, document.addEventListener("selectionchange", (() => { + this.isListening = !1, Date.now() <= this.selectionChangeDeadline && this.handleSelectionChange() + }), {once: !0})) + } + + handleSelectionChange() { + const t = document.getSelection(); + if (!t) return; + const e = t.getRangeAt(0); + if (!0 !== e.collapsed || 0 !== e.startOffset) return; + const n = this.quill.scroll.find(e.startContainer); + if (!(n instanceof u.ParentBlot && n.uiNode)) return; + const r = document.createRange(); + r.setStartAfter(n.uiNode), r.setEndAfter(n.uiNode), t.removeAllRanges(), t.addRange(r) + } + } + + var C = j; + r.Ay.register({ + "blots/block": i.Ay, + "blots/block/embed": i.zo, + "blots/break": s.A, + "blots/container": o.A, + "blots/cursor": l.A, + "blots/embed": a.A, + "blots/inline": c.A, + "blots/scroll": y, + "blots/text": v.A, + "modules/clipboard": A.Ay, + "modules/history": N, + "modules/keyboard": q.Ay, + "modules/uploader": _, + "modules/input": O, + "modules/uiNode": C + }); + var R = r.Ay + }, 5374: function (t, e, n) { + "use strict"; + n.d(e, { + A: function () { + return o + } + }); + var r = n(8920), i = n(7356); + const s = (0, n(6078).A)("quill:events"); + ["selectionchange", "mousedown", "mouseup", "click"].forEach((t => { + document.addEventListener(t, (function () { + for (var t = arguments.length, e = new Array(t), n = 0; n < t; n++) e[n] = arguments[n]; + Array.from(document.querySelectorAll(".ql-container")).forEach((t => { + const n = i.A.get(t); + n && n.emitter && n.emitter.handleDOM(...e) + })) + })) + })); + var o = class extends r { + static events = { + EDITOR_CHANGE: "editor-change", + SCROLL_BEFORE_UPDATE: "scroll-before-update", + SCROLL_BLOT_MOUNT: "scroll-blot-mount", + SCROLL_BLOT_UNMOUNT: "scroll-blot-unmount", + SCROLL_OPTIMIZE: "scroll-optimize", + SCROLL_UPDATE: "scroll-update", + SCROLL_EMBED_UPDATE: "scroll-embed-update", + SELECTION_CHANGE: "selection-change", + TEXT_CHANGE: "text-change", + COMPOSITION_BEFORE_START: "composition-before-start", + COMPOSITION_START: "composition-start", + COMPOSITION_BEFORE_END: "composition-before-end", + COMPOSITION_END: "composition-end" + }; + static sources = {API: "api", SILENT: "silent", USER: "user"}; + + constructor() { + super(), this.domListeners = {}, this.on("error", s.error) + } + + emit() { + for (var t = arguments.length, e = new Array(t), n = 0; n < t; n++) e[n] = arguments[n]; + return s.log.call(s, ...e), super.emit(...e) + } + + handleDOM(t) { + for (var e = arguments.length, n = new Array(e > 1 ? e - 1 : 0), r = 1; r < e; r++) n[r - 1] = arguments[r]; + (this.domListeners[t.type] || []).forEach((e => { + let {node: r, handler: i} = e; + (t.target === r || r.contains(t.target)) && i(t, ...n) + })) + } + + listenDOM(t, e, n) { + this.domListeners[t] || (this.domListeners[t] = []), this.domListeners[t].push({ + node: e, + handler: n + }) + } + } + }, 7356: function (t, e) { + "use strict"; + e.A = new WeakMap + }, 6078: function (t, e) { + "use strict"; + const n = ["error", "warn", "log", "info"]; + let r = "warn"; + + function i(t) { + if (r && n.indexOf(t) <= n.indexOf(r)) { + for (var e = arguments.length, i = new Array(e > 1 ? e - 1 : 0), s = 1; s < e; s++) i[s - 1] = arguments[s]; + console[t](...i) + } + } + + function s(t) { + return n.reduce(((e, n) => (e[n] = i.bind(console, n, t), e)), {}) + } + + s.level = t => { + r = t + }, i.level = s.level, e.A = s + }, 4266: function (t, e) { + "use strict"; + e.A = class { + static DEFAULTS = {}; + + constructor(t) { + let e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}; + this.quill = t, this.options = e + } + } + }, 6142: function (t, e, n) { + "use strict"; + n.d(e, { + Ay: function () { + return I + } + }); + var r = n(8347), i = n(6003), s = n(5232), o = n.n(s), l = n(3707), a = n(5123), c = n(9698), + u = n(3036), h = n(4541), d = n(5508), f = n(8298); + const p = /^[ -~]*$/; + + function g(t, e, n) { + if (0 === t.length) { + const [t] = y(n.pop()); + return e <= 0 ? `` : `${g([], e - 1, n)}` + } + const [{child: r, offset: i, length: s, indent: o, type: l}, ...a] = t, [c, u] = y(l); + if (o > e) return n.push(l), o === e + 1 ? `<${c}>${m(r, i, s)}${g(a, o, n)}` : `<${c}>
  • ${g(t, e + 1, n)}`; + const h = n[n.length - 1]; + if (o === e && l === h) return `
  • ${m(r, i, s)}${g(a, o, n)}`; + const [d] = y(n.pop()); + return `${g(t, e - 1, n)}` + } + + function m(t, e, n) { + let r = arguments.length > 3 && void 0 !== arguments[3] && arguments[3]; + if ("html" in t && "function" == typeof t.html) return t.html(e, n); + if (t instanceof d.A) return (0, d.X)(t.value().slice(e, e + n)).replaceAll(" ", " "); + if (t instanceof i.ParentBlot) { + if ("list-container" === t.statics.blotName) { + const r = []; + return t.children.forEachAt(e, n, ((t, e, n) => { + const i = "formats" in t && "function" == typeof t.formats ? t.formats() : {}; + r.push({child: t, offset: e, length: n, indent: i.indent || 0, type: i.list}) + })), g(r, -1, []) + } + const i = []; + if (t.children.forEachAt(e, n, ((t, e, n) => { + i.push(m(t, e, n)) + })), r || "list" === t.statics.blotName) return i.join(""); + const {outerHTML: s, innerHTML: o} = t.domNode, [l, a] = s.split(`>${o}<`); + return "${i.join("")}<${a}` : `${l}>${i.join("")}<${a}` + } + return t.domNode instanceof Element ? t.domNode.outerHTML : "" + } + + function b(t, e) { + return Object.keys(e).reduce(((n, r) => { + if (null == t[r]) return n; + const i = e[r]; + return i === t[r] ? n[r] = i : Array.isArray(i) ? i.indexOf(t[r]) < 0 ? n[r] = i.concat([t[r]]) : n[r] = i : n[r] = [i, t[r]], n + }), {}) + } + + function y(t) { + const e = "ordered" === t ? "ol" : "ul"; + switch (t) { + case"checked": + return [e, ' data-list="checked"']; + case"unchecked": + return [e, ' data-list="unchecked"']; + default: + return [e, ""] + } + } + + function v(t) { + return t.reduce(((t, e) => { + if ("string" == typeof e.insert) { + const n = e.insert.replace(/\r\n/g, "\n").replace(/\r/g, "\n"); + return t.insert(n, e.attributes) + } + return t.push(e) + }), new (o())) + } + + function A(t, e) { + let {index: n, length: r} = t; + return new f.Q(n + e, r) + } + + var x = class { + constructor(t) { + this.scroll = t, this.delta = this.getDelta() + } + + applyDelta(t) { + this.scroll.update(); + let e = this.scroll.length(); + this.scroll.batchStart(); + const n = v(t), l = new (o()); + return function (t) { + const e = []; + return t.forEach((t => { + "string" == typeof t.insert ? t.insert.split("\n").forEach(((n, r) => { + r && e.push({insert: "\n", attributes: t.attributes}), n && e.push({ + insert: n, + attributes: t.attributes + }) + })) : e.push(t) + })), e + }(n.ops.slice()).reduce(((t, n) => { + const o = s.Op.length(n); + let a = n.attributes || {}, u = !1, h = !1; + if (null != n.insert) { + if (l.retain(o), "string" == typeof n.insert) { + const o = n.insert; + h = !o.endsWith("\n") && (e <= t || !!this.scroll.descendant(c.zo, t)[0]), this.scroll.insertAt(t, o); + const [l, u] = this.scroll.line(t); + let d = (0, r.A)({}, (0, c.Ji)(l)); + if (l instanceof c.Ay) { + const [t] = l.descendant(i.LeafBlot, u); + t && (d = (0, r.A)(d, (0, c.Ji)(t))) + } + a = s.AttributeMap.diff(d, a) || {} + } else if ("object" == typeof n.insert) { + const o = Object.keys(n.insert)[0]; + if (null == o) return t; + const l = null != this.scroll.query(o, i.Scope.INLINE); + if (l) (e <= t || this.scroll.descendant(c.zo, t)[0]) && (h = !0); else if (t > 0) { + const [e, n] = this.scroll.descendant(i.LeafBlot, t - 1); + e instanceof d.A ? "\n" !== e.value()[n] && (u = !0) : e instanceof i.EmbedBlot && e.statics.scope === i.Scope.INLINE_BLOT && (u = !0) + } + if (this.scroll.insertAt(t, o, n.insert[o]), l) { + const [e] = this.scroll.descendant(i.LeafBlot, t); + if (e) { + const t = (0, r.A)({}, (0, c.Ji)(e)); + a = s.AttributeMap.diff(t, a) || {} + } + } + } + e += o + } else if (l.push(n), null !== n.retain && "object" == typeof n.retain) { + const e = Object.keys(n.retain)[0]; + if (null == e) return t; + this.scroll.updateEmbedAt(t, e, n.retain[e]) + } + Object.keys(a).forEach((e => { + this.scroll.formatAt(t, o, e, a[e]) + })); + const f = u ? 1 : 0, p = h ? 1 : 0; + return e += f + p, l.retain(f), l.delete(p), t + o + f + p + }), 0), l.reduce(((t, e) => "number" == typeof e.delete ? (this.scroll.deleteAt(t, e.delete), t) : t + s.Op.length(e)), 0), this.scroll.batchEnd(), this.scroll.optimize(), this.update(n) + } + + deleteText(t, e) { + return this.scroll.deleteAt(t, e), this.update((new (o())).retain(t).delete(e)) + } + + formatLine(t, e) { + let n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {}; + this.scroll.update(), Object.keys(n).forEach((r => { + this.scroll.lines(t, Math.max(e, 1)).forEach((t => { + t.format(r, n[r]) + })) + })), this.scroll.optimize(); + const r = (new (o())).retain(t).retain(e, (0, l.A)(n)); + return this.update(r) + } + + formatText(t, e) { + let n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {}; + Object.keys(n).forEach((r => { + this.scroll.formatAt(t, e, r, n[r]) + })); + const r = (new (o())).retain(t).retain(e, (0, l.A)(n)); + return this.update(r) + } + + getContents(t, e) { + return this.delta.slice(t, t + e) + } + + getDelta() { + return this.scroll.lines().reduce(((t, e) => t.concat(e.delta())), new (o())) + } + + getFormat(t) { + let e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 0, n = [], r = []; + 0 === e ? this.scroll.path(t).forEach((t => { + const [e] = t; + e instanceof c.Ay ? n.push(e) : e instanceof i.LeafBlot && r.push(e) + })) : (n = this.scroll.lines(t, e), r = this.scroll.descendants(i.LeafBlot, t, e)); + const [s, o] = [n, r].map((t => { + const e = t.shift(); + if (null == e) return {}; + let n = (0, c.Ji)(e); + for (; Object.keys(n).length > 0;) { + const e = t.shift(); + if (null == e) return n; + n = b((0, c.Ji)(e), n) + } + return n + })); + return {...s, ...o} + } + + getHTML(t, e) { + const [n, r] = this.scroll.line(t); + if (n) { + const i = n.length(); + return n.length() >= r + e && (0 !== r || e !== i) ? m(n, r, e, !0) : m(this.scroll, t, e, !0) + } + return "" + } + + getText(t, e) { + return this.getContents(t, e).filter((t => "string" == typeof t.insert)).map((t => t.insert)).join("") + } + + insertContents(t, e) { + const n = v(e), r = (new (o())).retain(t).concat(n); + return this.scroll.insertContents(t, n), this.update(r) + } + + insertEmbed(t, e, n) { + return this.scroll.insertAt(t, e, n), this.update((new (o())).retain(t).insert({[e]: n})) + } + + insertText(t, e) { + let n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {}; + return e = e.replace(/\r\n/g, "\n").replace(/\r/g, "\n"), this.scroll.insertAt(t, e), Object.keys(n).forEach((r => { + this.scroll.formatAt(t, e.length, r, n[r]) + })), this.update((new (o())).retain(t).insert(e, (0, l.A)(n))) + } + + isBlank() { + if (0 === this.scroll.children.length) return !0; + if (this.scroll.children.length > 1) return !1; + const t = this.scroll.children.head; + if (t?.statics.blotName !== c.Ay.blotName) return !1; + const e = t; + return !(e.children.length > 1) && e.children.head instanceof u.A + } + + removeFormat(t, e) { + const n = this.getText(t, e), [r, i] = this.scroll.line(t + e); + let s = 0, l = new (o()); + null != r && (s = r.length() - i, l = r.delta().slice(i, i + s - 1).insert("\n")); + const a = this.getContents(t, e + s).diff((new (o())).insert(n).concat(l)), + c = (new (o())).retain(t).concat(a); + return this.applyDelta(c) + } + + update(t) { + let e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : [], + n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : void 0; + const r = this.delta; + if (1 === e.length && "characterData" === e[0].type && e[0].target.data.match(p) && this.scroll.find(e[0].target)) { + const i = this.scroll.find(e[0].target), s = (0, c.Ji)(i), l = i.offset(this.scroll), + a = e[0].oldValue.replace(h.A.CONTENTS, ""), u = (new (o())).insert(a), + d = (new (o())).insert(i.value()), + f = n && {oldRange: A(n.oldRange, -l), newRange: A(n.newRange, -l)}; + t = (new (o())).retain(l).concat(u.diff(d, f)).reduce(((t, e) => e.insert ? t.insert(e.insert, s) : t.push(e)), new (o())), this.delta = r.compose(t) + } else this.delta = this.getDelta(), t && (0, a.A)(r.compose(t), this.delta) || (t = r.diff(this.delta, n)); + return t + } + }, N = n(5374), E = n(7356), w = n(6078), q = n(4266), k = n(746), _ = class { + isComposing = !1; + + constructor(t, e) { + this.scroll = t, this.emitter = e, this.setupListeners() + } + + setupListeners() { + this.scroll.domNode.addEventListener("compositionstart", (t => { + this.isComposing || this.handleCompositionStart(t) + })), this.scroll.domNode.addEventListener("compositionend", (t => { + this.isComposing && queueMicrotask((() => { + this.handleCompositionEnd(t) + })) + })) + } + + handleCompositionStart(t) { + const e = t.target instanceof Node ? this.scroll.find(t.target, !0) : null; + !e || e instanceof k.A || (this.emitter.emit(N.A.events.COMPOSITION_BEFORE_START, t), this.scroll.batchStart(), this.emitter.emit(N.A.events.COMPOSITION_START, t), this.isComposing = !0) + } + + handleCompositionEnd(t) { + this.emitter.emit(N.A.events.COMPOSITION_BEFORE_END, t), this.scroll.batchEnd(), this.emitter.emit(N.A.events.COMPOSITION_END, t), this.isComposing = !1 + } + }, L = n(9609); + const S = t => { + const e = t.getBoundingClientRect(), + n = "offsetWidth" in t && Math.abs(e.width) / t.offsetWidth || 1, + r = "offsetHeight" in t && Math.abs(e.height) / t.offsetHeight || 1; + return { + top: e.top, + right: e.left + t.clientWidth * n, + bottom: e.top + t.clientHeight * r, + left: e.left + } + }, O = t => { + const e = parseInt(t, 10); + return Number.isNaN(e) ? 0 : e + }, + T = (t, e, n, r, i, s) => t < n && e > r ? 0 : t < n ? -(n - t + i) : e > r ? e - t > r - n ? t + i - n : e - r + s : 0; + const j = ["block", "break", "cursor", "inline", "scroll", "text"]; + const C = (0, w.A)("quill"), R = new i.Registry; + i.ParentBlot.uiClass = "ql-ui"; + + class I { + static DEFAULTS = { + bounds: null, + modules: {clipboard: !0, keyboard: !0, history: !0, uploader: !0}, + placeholder: "", + readOnly: !1, + registry: R, + theme: "default" + }; + static events = N.A.events; + static sources = N.A.sources; + static version = "2.0.3"; + static imports = {delta: o(), parchment: i, "core/module": q.A, "core/theme": L.A}; + + static debug(t) { + !0 === t && (t = "log"), w.A.level(t) + } + + static find(t) { + let e = arguments.length > 1 && void 0 !== arguments[1] && arguments[1]; + return E.A.get(t) || R.find(t, e) + } + + static import(t) { + return null == this.imports[t] && C.error(`Cannot import ${t}. Are you sure it was registered?`), this.imports[t] + } + + static register() { + if ("string" != typeof (arguments.length <= 0 ? void 0 : arguments[0])) { + const t = arguments.length <= 0 ? void 0 : arguments[0], + e = !!(arguments.length <= 1 ? void 0 : arguments[1]), + n = "attrName" in t ? t.attrName : t.blotName; + "string" == typeof n ? this.register(`formats/${n}`, t, e) : Object.keys(t).forEach((n => { + this.register(n, t[n], e) + })) + } else { + const t = arguments.length <= 0 ? void 0 : arguments[0], + e = arguments.length <= 1 ? void 0 : arguments[1], + n = !!(arguments.length <= 2 ? void 0 : arguments[2]); + null == this.imports[t] || n || C.warn(`Overwriting ${t} with`, e), this.imports[t] = e, (t.startsWith("blots/") || t.startsWith("formats/")) && e && "boolean" != typeof e && "abstract" !== e.blotName && R.register(e), "function" == typeof e.register && e.register(R) + } + } + + constructor(t) { + let e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}; + if (this.options = function (t, e) { + const n = B(t); + if (!n) throw new Error("Invalid Quill container"); + const s = !e.theme || e.theme === I.DEFAULTS.theme ? L.A : I.import(`themes/${e.theme}`); + if (!s) throw new Error(`Invalid theme ${e.theme}. Did you register it?`); + const {modules: o, ...l} = I.DEFAULTS, {modules: a, ...c} = s.DEFAULTS; + let u = M(e.modules); + null != u && u.toolbar && u.toolbar.constructor !== Object && (u = { + ...u, + toolbar: {container: u.toolbar} + }); + const h = (0, r.A)({}, M(o), M(a), u), d = {...l, ...U(c), ...U(e)}; + let f = e.registry; + return f ? e.formats && C.warn('Ignoring "formats" option because "registry" is specified') : f = e.formats ? ((t, e, n) => { + const r = new i.Registry; + return j.forEach((t => { + const n = e.query(t); + n && r.register(n) + })), t.forEach((t => { + let i = e.query(t); + i || n.error(`Cannot register "${t}" specified in "formats" config. Are you sure it was registered?`); + let s = 0; + for (; i;) if (r.register(i), i = "blotName" in i ? i.requiredContainer ?? null : null, s += 1, s > 100) { + n.error(`Cycle detected in registering blot requiredContainer: "${t}"`); + break + } + })), r + })(e.formats, d.registry, C) : d.registry, { + ...d, + registry: f, + container: n, + theme: s, + modules: Object.entries(h).reduce(((t, e) => { + let [n, i] = e; + if (!i) return t; + const s = I.import(`modules/${n}`); + return null == s ? (C.error(`Cannot load ${n} module. Are you sure you registered it?`), t) : { + ...t, + [n]: (0, r.A)({}, s.DEFAULTS || {}, i) + } + }), {}), + bounds: B(d.bounds) + } + }(t, e), this.container = this.options.container, null == this.container) return void C.error("Invalid Quill container", t); + this.options.debug && I.debug(this.options.debug); + const n = this.container.innerHTML.trim(); + this.container.classList.add("ql-container"), this.container.innerHTML = "", E.A.set(this.container, this), this.root = this.addContainer("ql-editor"), this.root.classList.add("ql-blank"), this.emitter = new N.A; + const s = i.ScrollBlot.blotName, l = this.options.registry.query(s); + if (!l || !("blotName" in l)) throw new Error(`Cannot initialize Quill without "${s}" blot`); + if (this.scroll = new l(this.options.registry, this.root, {emitter: this.emitter}), this.editor = new x(this.scroll), this.selection = new f.A(this.scroll, this.emitter), this.composition = new _(this.scroll, this.emitter), this.theme = new this.options.theme(this, this.options), this.keyboard = this.theme.addModule("keyboard"), this.clipboard = this.theme.addModule("clipboard"), this.history = this.theme.addModule("history"), this.uploader = this.theme.addModule("uploader"), this.theme.addModule("input"), this.theme.addModule("uiNode"), this.theme.init(), this.emitter.on(N.A.events.EDITOR_CHANGE, (t => { + t === N.A.events.TEXT_CHANGE && this.root.classList.toggle("ql-blank", this.editor.isBlank()) + })), this.emitter.on(N.A.events.SCROLL_UPDATE, ((t, e) => { + const n = this.selection.lastRange, [r] = this.selection.getRange(), + i = n && r ? {oldRange: n, newRange: r} : void 0; + D.call(this, (() => this.editor.update(null, e, i)), t) + })), this.emitter.on(N.A.events.SCROLL_EMBED_UPDATE, ((t, e) => { + const n = this.selection.lastRange, [r] = this.selection.getRange(), + i = n && r ? {oldRange: n, newRange: r} : void 0; + D.call(this, (() => { + const n = (new (o())).retain(t.offset(this)).retain({[t.statics.blotName]: e}); + return this.editor.update(n, [], i) + }), I.sources.USER) + })), n) { + const t = this.clipboard.convert({html: `${n}


    `, text: "\n"}); + this.setContents(t) + } + this.history.clear(), this.options.placeholder && this.root.setAttribute("data-placeholder", this.options.placeholder), this.options.readOnly && this.disable(), this.allowReadOnlyEdits = !1 + } + + addContainer(t) { + let e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : null; + if ("string" == typeof t) { + const e = t; + (t = document.createElement("div")).classList.add(e) + } + return this.container.insertBefore(t, e), t + } + + blur() { + this.selection.setRange(null) + } + + deleteText(t, e, n) { + return [t, e, , n] = P(t, e, n), D.call(this, (() => this.editor.deleteText(t, e)), n, t, -1 * e) + } + + disable() { + this.enable(!1) + } + + editReadOnly(t) { + this.allowReadOnlyEdits = !0; + const e = t(); + return this.allowReadOnlyEdits = !1, e + } + + enable() { + let t = !(arguments.length > 0 && void 0 !== arguments[0]) || arguments[0]; + this.scroll.enable(t), this.container.classList.toggle("ql-disabled", !t) + } + + focus() { + let t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; + this.selection.focus(), t.preventScroll || this.scrollSelectionIntoView() + } + + format(t, e) { + let n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : N.A.sources.API; + return D.call(this, (() => { + const n = this.getSelection(!0); + let r = new (o()); + if (null == n) return r; + if (this.scroll.query(t, i.Scope.BLOCK)) r = this.editor.formatLine(n.index, n.length, {[t]: e}); else { + if (0 === n.length) return this.selection.format(t, e), r; + r = this.editor.formatText(n.index, n.length, {[t]: e}) + } + return this.setSelection(n, N.A.sources.SILENT), r + }), n) + } + + formatLine(t, e, n, r, i) { + let s; + return [t, e, s, i] = P(t, e, n, r, i), D.call(this, (() => this.editor.formatLine(t, e, s)), i, t, 0) + } + + formatText(t, e, n, r, i) { + let s; + return [t, e, s, i] = P(t, e, n, r, i), D.call(this, (() => this.editor.formatText(t, e, s)), i, t, 0) + } + + getBounds(t) { + let e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 0, n = null; + if (n = "number" == typeof t ? this.selection.getBounds(t, e) : this.selection.getBounds(t.index, t.length), !n) return null; + const r = this.container.getBoundingClientRect(); + return { + bottom: n.bottom - r.top, + height: n.height, + left: n.left - r.left, + right: n.right - r.left, + top: n.top - r.top, + width: n.width + } + } + + getContents() { + let t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : 0, + e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : this.getLength() - t; + return [t, e] = P(t, e), this.editor.getContents(t, e) + } + + getFormat() { + let t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : this.getSelection(!0), + e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 0; + return "number" == typeof t ? this.editor.getFormat(t, e) : this.editor.getFormat(t.index, t.length) + } + + getIndex(t) { + return t.offset(this.scroll) + } + + getLength() { + return this.scroll.length() + } + + getLeaf(t) { + return this.scroll.leaf(t) + } + + getLine(t) { + return this.scroll.line(t) + } + + getLines() { + let t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : 0, + e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : Number.MAX_VALUE; + return "number" != typeof t ? this.scroll.lines(t.index, t.length) : this.scroll.lines(t, e) + } + + getModule(t) { + return this.theme.modules[t] + } + + getSelection() { + return arguments.length > 0 && void 0 !== arguments[0] && arguments[0] && this.focus(), this.update(), this.selection.getRange()[0] + } + + getSemanticHTML() { + let t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : 0, + e = arguments.length > 1 ? arguments[1] : void 0; + return "number" == typeof t && (e = e ?? this.getLength() - t), [t, e] = P(t, e), this.editor.getHTML(t, e) + } + + getText() { + let t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : 0, + e = arguments.length > 1 ? arguments[1] : void 0; + return "number" == typeof t && (e = e ?? this.getLength() - t), [t, e] = P(t, e), this.editor.getText(t, e) + } + + hasFocus() { + return this.selection.hasFocus() + } + + insertEmbed(t, e, n) { + let r = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : I.sources.API; + return D.call(this, (() => this.editor.insertEmbed(t, e, n)), r, t) + } + + insertText(t, e, n, r, i) { + let s; + return [t, , s, i] = P(t, 0, n, r, i), D.call(this, (() => this.editor.insertText(t, e, s)), i, t, e.length) + } + + isEnabled() { + return this.scroll.isEnabled() + } + + off() { + return this.emitter.off(...arguments) + } + + on() { + return this.emitter.on(...arguments) + } + + once() { + return this.emitter.once(...arguments) + } + + removeFormat(t, e, n) { + return [t, e, , n] = P(t, e, n), D.call(this, (() => this.editor.removeFormat(t, e)), n, t) + } + + scrollRectIntoView(t) { + ((t, e) => { + const n = t.ownerDocument; + let r = e, i = t; + for (; i;) { + const t = i === n.body, e = t ? { + top: 0, + right: window.visualViewport?.width ?? n.documentElement.clientWidth, + bottom: window.visualViewport?.height ?? n.documentElement.clientHeight, + left: 0 + } : S(i), o = getComputedStyle(i), + l = T(r.left, r.right, e.left, e.right, O(o.scrollPaddingLeft), O(o.scrollPaddingRight)), + a = T(r.top, r.bottom, e.top, e.bottom, O(o.scrollPaddingTop), O(o.scrollPaddingBottom)); + if (l || a) if (t) n.defaultView?.scrollBy(l, a); else { + const {scrollLeft: t, scrollTop: e} = i; + a && (i.scrollTop += a), l && (i.scrollLeft += l); + const n = i.scrollLeft - t, s = i.scrollTop - e; + r = {left: r.left - n, top: r.top - s, right: r.right - n, bottom: r.bottom - s} + } + i = t || "fixed" === o.position ? null : (s = i).parentElement || s.getRootNode().host || null + } + var s + })(this.root, t) + } + + scrollIntoView() { + console.warn("Quill#scrollIntoView() has been deprecated and will be removed in the near future. Please use Quill#scrollSelectionIntoView() instead."), this.scrollSelectionIntoView() + } + + scrollSelectionIntoView() { + const t = this.selection.lastRange, e = t && this.selection.getBounds(t.index, t.length); + e && this.scrollRectIntoView(e) + } + + setContents(t) { + let e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : N.A.sources.API; + return D.call(this, (() => { + t = new (o())(t); + const e = this.getLength(), n = this.editor.deleteText(0, e), + r = this.editor.insertContents(0, t), + i = this.editor.deleteText(this.getLength() - 1, 1); + return n.compose(r).compose(i) + }), e) + } + + setSelection(t, e, n) { + null == t ? this.selection.setRange(null, e || I.sources.API) : ([t, e, , n] = P(t, e, n), this.selection.setRange(new f.Q(Math.max(0, t), e), n), n !== N.A.sources.SILENT && this.scrollSelectionIntoView()) + } + + setText(t) { + let e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : N.A.sources.API; + const n = (new (o())).insert(t); + return this.setContents(n, e) + } + + update() { + let t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : N.A.sources.USER; + const e = this.scroll.update(t); + return this.selection.update(t), e + } + + updateContents(t) { + let e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : N.A.sources.API; + return D.call(this, (() => (t = new (o())(t), this.editor.applyDelta(t))), e, !0) + } + } + + function B(t) { + return "string" == typeof t ? document.querySelector(t) : t + } + + function M(t) { + return Object.entries(t ?? {}).reduce(((t, e) => { + let [n, r] = e; + return {...t, [n]: !0 === r ? {} : r} + }), {}) + } + + function U(t) { + return Object.fromEntries(Object.entries(t).filter((t => void 0 !== t[1]))) + } + + function D(t, e, n, r) { + if (!this.isEnabled() && e === N.A.sources.USER && !this.allowReadOnlyEdits) return new (o()); + let i = null == n ? null : this.getSelection(); + const s = this.editor.delta, l = t(); + if (null != i && (!0 === n && (n = i.index), null == r ? i = z(i, l, e) : 0 !== r && (i = z(i, n, r, e)), this.setSelection(i, N.A.sources.SILENT)), l.length() > 0) { + const t = [N.A.events.TEXT_CHANGE, l, s, e]; + this.emitter.emit(N.A.events.EDITOR_CHANGE, ...t), e !== N.A.sources.SILENT && this.emitter.emit(...t) + } + return l + } + + function P(t, e, n, r, i) { + let s = {}; + return "number" == typeof t.index && "number" == typeof t.length ? "number" != typeof e ? (i = r, r = n, n = e, e = t.length, t = t.index) : (e = t.length, t = t.index) : "number" != typeof e && (i = r, r = n, n = e, e = 0), "object" == typeof n ? (s = n, i = r) : "string" == typeof n && (null != r ? s[n] = r : i = n), [t, e, s, i = i || N.A.sources.API] + } + + function z(t, e, n, r) { + const i = "number" == typeof n ? n : 0; + if (null == t) return null; + let s, o; + return e && "function" == typeof e.transformPosition ? [s, o] = [t.index, t.index + t.length].map((t => e.transformPosition(t, r !== N.A.sources.USER))) : [s, o] = [t.index, t.index + t.length].map((t => t < e || t === e && r === N.A.sources.USER ? t : i >= 0 ? t + i : Math.max(e, t + i))), new f.Q(s, o - s) + } + }, 8298: function (t, e, n) { + "use strict"; + n.d(e, { + Q: function () { + return a + } + }); + var r = n(6003), i = n(5123), s = n(3707), o = n(5374); + const l = (0, n(6078).A)("quill:selection"); + + class a { + constructor(t) { + let e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 0; + this.index = t, this.length = e + } + } + + function c(t, e) { + try { + e.parentNode + } catch (t) { + return !1 + } + return t.contains(e) + } + + e.A = class { + constructor(t, e) { + this.emitter = e, this.scroll = t, this.composing = !1, this.mouseDown = !1, this.root = this.scroll.domNode, this.cursor = this.scroll.create("cursor", this), this.savedRange = new a(0, 0), this.lastRange = this.savedRange, this.lastNative = null, this.handleComposition(), this.handleDragging(), this.emitter.listenDOM("selectionchange", document, (() => { + this.mouseDown || this.composing || setTimeout(this.update.bind(this, o.A.sources.USER), 1) + })), this.emitter.on(o.A.events.SCROLL_BEFORE_UPDATE, (() => { + if (!this.hasFocus()) return; + const t = this.getNativeRange(); + null != t && t.start.node !== this.cursor.textNode && this.emitter.once(o.A.events.SCROLL_UPDATE, ((e, n) => { + try { + this.root.contains(t.start.node) && this.root.contains(t.end.node) && this.setNativeRange(t.start.node, t.start.offset, t.end.node, t.end.offset); + const r = n.some((t => "characterData" === t.type || "childList" === t.type || "attributes" === t.type && t.target === this.root)); + this.update(r ? o.A.sources.SILENT : e) + } catch (t) { + } + })) + })), this.emitter.on(o.A.events.SCROLL_OPTIMIZE, ((t, e) => { + if (e.range) { + const {startNode: t, startOffset: n, endNode: r, endOffset: i} = e.range; + this.setNativeRange(t, n, r, i), this.update(o.A.sources.SILENT) + } + })), this.update(o.A.sources.SILENT) + } + + handleComposition() { + this.emitter.on(o.A.events.COMPOSITION_BEFORE_START, (() => { + this.composing = !0 + })), this.emitter.on(o.A.events.COMPOSITION_END, (() => { + if (this.composing = !1, this.cursor.parent) { + const t = this.cursor.restore(); + if (!t) return; + setTimeout((() => { + this.setNativeRange(t.startNode, t.startOffset, t.endNode, t.endOffset) + }), 1) + } + })) + } + + handleDragging() { + this.emitter.listenDOM("mousedown", document.body, (() => { + this.mouseDown = !0 + })), this.emitter.listenDOM("mouseup", document.body, (() => { + this.mouseDown = !1, this.update(o.A.sources.USER) + })) + } + + focus() { + this.hasFocus() || (this.root.focus({preventScroll: !0}), this.setRange(this.savedRange)) + } + + format(t, e) { + this.scroll.update(); + const n = this.getNativeRange(); + if (null != n && n.native.collapsed && !this.scroll.query(t, r.Scope.BLOCK)) { + if (n.start.node !== this.cursor.textNode) { + const t = this.scroll.find(n.start.node, !1); + if (null == t) return; + if (t instanceof r.LeafBlot) { + const e = t.split(n.start.offset); + t.parent.insertBefore(this.cursor, e) + } else t.insertBefore(this.cursor, n.start.node); + this.cursor.attach() + } + this.cursor.format(t, e), this.scroll.optimize(), this.setNativeRange(this.cursor.textNode, this.cursor.textNode.data.length), this.update() + } + } + + getBounds(t) { + let e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 0; + const n = this.scroll.length(); + let r; + t = Math.min(t, n - 1), e = Math.min(t + e, n - 1) - t; + let [i, s] = this.scroll.leaf(t); + if (null == i) return null; + if (e > 0 && s === i.length()) { + const [e] = this.scroll.leaf(t + 1); + if (e) { + const [n] = this.scroll.line(t), [r] = this.scroll.line(t + 1); + n === r && (i = e, s = 0) + } + } + [r, s] = i.position(s, !0); + const o = document.createRange(); + if (e > 0) return o.setStart(r, s), [i, s] = this.scroll.leaf(t + e), null == i ? null : ([r, s] = i.position(s, !0), o.setEnd(r, s), o.getBoundingClientRect()); + let l, a = "left"; + if (r instanceof Text) { + if (!r.data.length) return null; + s < r.data.length ? (o.setStart(r, s), o.setEnd(r, s + 1)) : (o.setStart(r, s - 1), o.setEnd(r, s), a = "right"), l = o.getBoundingClientRect() + } else { + if (!(i.domNode instanceof Element)) return null; + l = i.domNode.getBoundingClientRect(), s > 0 && (a = "right") + } + return { + bottom: l.top + l.height, + height: l.height, + left: l[a], + right: l[a], + top: l.top, + width: 0 + } + } + + getNativeRange() { + const t = document.getSelection(); + if (null == t || t.rangeCount <= 0) return null; + const e = t.getRangeAt(0); + if (null == e) return null; + const n = this.normalizeNative(e); + return l.info("getNativeRange", n), n + } + + getRange() { + const t = this.scroll.domNode; + if ("isConnected" in t && !t.isConnected) return [null, null]; + const e = this.getNativeRange(); + return null == e ? [null, null] : [this.normalizedToRange(e), e] + } + + hasFocus() { + return document.activeElement === this.root || null != document.activeElement && c(this.root, document.activeElement) + } + + normalizedToRange(t) { + const e = [[t.start.node, t.start.offset]]; + t.native.collapsed || e.push([t.end.node, t.end.offset]); + const n = e.map((t => { + const [e, n] = t, i = this.scroll.find(e, !0), s = i.offset(this.scroll); + return 0 === n ? s : i instanceof r.LeafBlot ? s + i.index(e, n) : s + i.length() + })), i = Math.min(Math.max(...n), this.scroll.length() - 1), s = Math.min(i, ...n); + return new a(s, i - s) + } + + normalizeNative(t) { + if (!c(this.root, t.startContainer) || !t.collapsed && !c(this.root, t.endContainer)) return null; + const e = { + start: {node: t.startContainer, offset: t.startOffset}, + end: {node: t.endContainer, offset: t.endOffset}, + native: t + }; + return [e.start, e.end].forEach((t => { + let {node: e, offset: n} = t; + for (; !(e instanceof Text) && e.childNodes.length > 0;) if (e.childNodes.length > n) e = e.childNodes[n], n = 0; else { + if (e.childNodes.length !== n) break; + e = e.lastChild, n = e instanceof Text ? e.data.length : e.childNodes.length > 0 ? e.childNodes.length : e.childNodes.length + 1 + } + t.node = e, t.offset = n + })), e + } + + rangeToNative(t) { + const e = this.scroll.length(), n = (t, n) => { + t = Math.min(e - 1, t); + const [r, i] = this.scroll.leaf(t); + return r ? r.position(i, n) : [null, -1] + }; + return [...n(t.index, !1), ...n(t.index + t.length, !0)] + } + + setNativeRange(t, e) { + let n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : t, + r = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : e, + i = arguments.length > 4 && void 0 !== arguments[4] && arguments[4]; + if (l.info("setNativeRange", t, e, n, r), null != t && (null == this.root.parentNode || null == t.parentNode || null == n.parentNode)) return; + const s = document.getSelection(); + if (null != s) if (null != t) { + this.hasFocus() || this.root.focus({preventScroll: !0}); + const {native: o} = this.getNativeRange() || {}; + if (null == o || i || t !== o.startContainer || e !== o.startOffset || n !== o.endContainer || r !== o.endOffset) { + t instanceof Element && "BR" === t.tagName && (e = Array.from(t.parentNode.childNodes).indexOf(t), t = t.parentNode), n instanceof Element && "BR" === n.tagName && (r = Array.from(n.parentNode.childNodes).indexOf(n), n = n.parentNode); + const i = document.createRange(); + i.setStart(t, e), i.setEnd(n, r), s.removeAllRanges(), s.addRange(i) + } + } else s.removeAllRanges(), this.root.blur() + } + + setRange(t) { + let e = arguments.length > 1 && void 0 !== arguments[1] && arguments[1], + n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : o.A.sources.API; + if ("string" == typeof e && (n = e, e = !1), l.info("setRange", t), null != t) { + const n = this.rangeToNative(t); + this.setNativeRange(...n, e) + } else this.setNativeRange(null); + this.update(n) + } + + update() { + let t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : o.A.sources.USER; + const e = this.lastRange, [n, r] = this.getRange(); + if (this.lastRange = n, this.lastNative = r, null != this.lastRange && (this.savedRange = this.lastRange), !(0, i.A)(e, this.lastRange)) { + if (!this.composing && null != r && r.native.collapsed && r.start.node !== this.cursor.textNode) { + const t = this.cursor.restore(); + t && this.setNativeRange(t.startNode, t.startOffset, t.endNode, t.endOffset) + } + const n = [o.A.events.SELECTION_CHANGE, (0, s.A)(this.lastRange), (0, s.A)(e), t]; + this.emitter.emit(o.A.events.EDITOR_CHANGE, ...n), t !== o.A.sources.SILENT && this.emitter.emit(...n) + } + } + } + }, 9609: function (t, e) { + "use strict"; + + class n { + static DEFAULTS = {modules: {}}; + static themes = {default: n}; + modules = {}; + + constructor(t, e) { + this.quill = t, this.options = e + } + + init() { + Object.keys(this.options.modules).forEach((t => { + null == this.modules[t] && this.addModule(t) + })) + } + + addModule(t) { + const e = this.quill.constructor.import(`modules/${t}`); + return this.modules[t] = new e(this.quill, this.options.modules[t] || {}), this.modules[t] + } + } + + e.A = n + }, 8276: function (t, e, n) { + "use strict"; + n.d(e, { + Hu: function () { + return l + }, gS: function () { + return s + }, qh: function () { + return o + } + }); + var r = n(6003); + const i = {scope: r.Scope.BLOCK, whitelist: ["right", "center", "justify"]}, + s = new r.Attributor("align", "align", i), o = new r.ClassAttributor("align", "ql-align", i), + l = new r.StyleAttributor("align", "text-align", i) + }, 9541: function (t, e, n) { + "use strict"; + n.d(e, { + l: function () { + return s + }, s: function () { + return o + } + }); + var r = n(6003), i = n(8638); + const s = new r.ClassAttributor("background", "ql-bg", {scope: r.Scope.INLINE}), + o = new i.a2("background", "background-color", {scope: r.Scope.INLINE}) + }, 9404: function (t, e, n) { + "use strict"; + n.d(e, { + Ay: function () { + return h + }, Cy: function () { + return d + }, EJ: function () { + return u + } + }); + var r = n(9698), i = n(3036), s = n(4541), o = n(4850), l = n(5508), a = n(580), c = n(6142); + + class u extends a.A { + static create(t) { + const e = super.create(t); + return e.setAttribute("spellcheck", "false"), e + } + + code(t, e) { + return this.children.map((t => t.length() <= 1 ? "" : t.domNode.innerText)).join("\n").slice(t, t + e) + } + + html(t, e) { + return `
    \n${(0, l.X)(this.code(t, e))}\n
    ` + } + } + + class h extends r.Ay { + static TAB = " "; + + static register() { + c.Ay.register(u) + } + } + + class d extends o.A { + } + + d.blotName = "code", d.tagName = "CODE", h.blotName = "code-block", h.className = "ql-code-block", h.tagName = "DIV", u.blotName = "code-block-container", u.className = "ql-code-block-container", u.tagName = "DIV", u.allowedChildren = [h], h.allowedChildren = [l.A, i.A, s.A], h.requiredContainer = u + }, 8638: function (t, e, n) { + "use strict"; + n.d(e, { + JM: function () { + return o + }, a2: function () { + return i + }, g3: function () { + return s + } + }); + var r = n(6003); + + class i extends r.StyleAttributor { + value(t) { + let e = super.value(t); + return e.startsWith("rgb(") ? (e = e.replace(/^[^\d]+/, "").replace(/[^\d]+$/, ""), `#${e.split(",").map((t => `00${parseInt(t, 10).toString(16)}`.slice(-2))).join("")}`) : e + } + } + + const s = new r.ClassAttributor("color", "ql-color", {scope: r.Scope.INLINE}), + o = new i("color", "color", {scope: r.Scope.INLINE}) + }, 7912: function (t, e, n) { + "use strict"; + n.d(e, { + Mc: function () { + return s + }, VL: function () { + return l + }, sY: function () { + return o + } + }); + var r = n(6003); + const i = {scope: r.Scope.BLOCK, whitelist: ["rtl"]}, s = new r.Attributor("direction", "dir", i), + o = new r.ClassAttributor("direction", "ql-direction", i), + l = new r.StyleAttributor("direction", "direction", i) + }, 6772: function (t, e, n) { + "use strict"; + n.d(e, { + q: function () { + return s + }, z: function () { + return l + } + }); + var r = n(6003); + const i = {scope: r.Scope.INLINE, whitelist: ["serif", "monospace"]}, + s = new r.ClassAttributor("font", "ql-font", i); + + class o extends r.StyleAttributor { + value(t) { + return super.value(t).replace(/["']/g, "") + } + } + + const l = new o("font", "font-family", i) + }, 664: function (t, e, n) { + "use strict"; + n.d(e, { + U: function () { + return i + }, r: function () { + return s + } + }); + var r = n(6003); + const i = new r.ClassAttributor("size", "ql-size", { + scope: r.Scope.INLINE, + whitelist: ["small", "large", "huge"] + }), s = new r.StyleAttributor("size", "font-size", { + scope: r.Scope.INLINE, + whitelist: ["10px", "18px", "32px"] + }) + }, 584: function (t, e, n) { + "use strict"; + n.d(e, { + Ay: function () { + return S + }, hV: function () { + return I + } + }); + var r = n(6003), i = n(5232), s = n.n(i), o = n(9698), l = n(6078), a = n(4266), c = n(6142), + u = n(8276), h = n(9541), d = n(9404), f = n(8638), p = n(7912), g = n(6772), m = n(664), + b = n(8123); + const y = /font-weight:\s*normal/, v = ["P", "OL", "UL"], A = t => t && v.includes(t.tagName), + x = /\bmso-list:[^;]*ignore/i, N = /\bmso-list:[^;]*\bl(\d+)/i, E = /\bmso-list:[^;]*\blevel(\d+)/i, + w = [function (t) { + "urn:schemas-microsoft-com:office:word" === t.documentElement.getAttribute("xmlns:w") && (t => { + const e = Array.from(t.querySelectorAll("[style*=mso-list]")), n = [], r = []; + e.forEach((t => { + (t.getAttribute("style") || "").match(x) ? n.push(t) : r.push(t) + })), n.forEach((t => t.parentNode?.removeChild(t))); + const i = t.documentElement.innerHTML, s = r.map((t => ((t, e) => { + const n = t.getAttribute("style"), r = n?.match(N); + if (!r) return null; + const i = Number(r[1]), s = n?.match(E), o = s ? Number(s[1]) : 1, + l = new RegExp(`@list l${i}:level${o}\\s*\\{[^\\}]*mso-level-number-format:\\s*([\\w-]+)`, "i"), + a = e.match(l); + return { + id: i, + indent: o, + type: a && "bullet" === a[1] ? "bullet" : "ordered", + element: t + } + })(t, i))).filter((t => t)); + for (; s.length;) { + const t = []; + let e = s.shift(); + for (; e;) t.push(e), e = s.length && s[0]?.element === e.element.nextElementSibling && s[0].id === e.id ? s.shift() : null; + const n = document.createElement("ul"); + t.forEach((t => { + const e = document.createElement("li"); + e.setAttribute("data-list", t.type), t.indent > 1 && e.setAttribute("class", "ql-indent-" + (t.indent - 1)), e.innerHTML = t.element.innerHTML, n.appendChild(e) + })); + const r = t[0]?.element, {parentNode: i} = r ?? {}; + r && i?.replaceChild(n, r), t.slice(1).forEach((t => { + let {element: e} = t; + i?.removeChild(e) + })) + } + })(t) + }, function (t) { + t.querySelector('[id^="docs-internal-guid-"]') && ((t => { + Array.from(t.querySelectorAll('b[style*="font-weight"]')).filter((t => t.getAttribute("style")?.match(y))).forEach((e => { + const n = t.createDocumentFragment(); + n.append(...e.childNodes), e.parentNode?.replaceChild(n, e) + })) + })(t), (t => { + Array.from(t.querySelectorAll("br")).filter((t => A(t.previousElementSibling) && A(t.nextElementSibling))).forEach((t => { + t.parentNode?.removeChild(t) + })) + })(t)) + }]; + const q = (0, l.A)("quill:clipboard"), k = [[Node.TEXT_NODE, function (t, e, n) { + let r = t.data; + if ("O:P" === t.parentElement?.tagName) return e.insert(r.trim()); + if (!R(t)) { + if (0 === r.trim().length && r.includes("\n") && !function (t, e) { + return t.previousElementSibling && t.nextElementSibling && !j(t.previousElementSibling, e) && !j(t.nextElementSibling, e) + }(t, n)) return e; + r = r.replace(/[^\S\u00a0]/g, " "), r = r.replace(/ {2,}/g, " "), (null == t.previousSibling && null != t.parentElement && j(t.parentElement, n) || t.previousSibling instanceof Element && j(t.previousSibling, n)) && (r = r.replace(/^ /, "")), (null == t.nextSibling && null != t.parentElement && j(t.parentElement, n) || t.nextSibling instanceof Element && j(t.nextSibling, n)) && (r = r.replace(/ $/, "")), r = r.replaceAll(" ", " ") + } + return e.insert(r) + }], [Node.TEXT_NODE, M], ["br", function (t, e) { + return T(e, "\n") || e.insert("\n"), e + }], [Node.ELEMENT_NODE, M], [Node.ELEMENT_NODE, function (t, e, n) { + const i = n.query(t); + if (null == i) return e; + if (i.prototype instanceof r.EmbedBlot) { + const e = {}, r = i.value(t); + if (null != r) return e[i.blotName] = r, (new (s())).insert(e, i.formats(t, n)) + } else if (i.prototype instanceof r.BlockBlot && !T(e, "\n") && e.insert("\n"), "blotName" in i && "formats" in i && "function" == typeof i.formats) return O(e, i.blotName, i.formats(t, n), n); + return e + }], [Node.ELEMENT_NODE, function (t, e, n) { + const i = r.Attributor.keys(t), s = r.ClassAttributor.keys(t), o = r.StyleAttributor.keys(t), + l = {}; + return i.concat(s).concat(o).forEach((e => { + let i = n.query(e, r.Scope.ATTRIBUTE); + null != i && (l[i.attrName] = i.value(t), l[i.attrName]) || (i = _[e], null == i || i.attrName !== e && i.keyName !== e || (l[i.attrName] = i.value(t) || void 0), i = L[e], null == i || i.attrName !== e && i.keyName !== e || (i = L[e], l[i.attrName] = i.value(t) || void 0)) + })), Object.entries(l).reduce(((t, e) => { + let [r, i] = e; + return O(t, r, i, n) + }), e) + }], [Node.ELEMENT_NODE, function (t, e, n) { + const r = {}, i = t.style || {}; + return "italic" === i.fontStyle && (r.italic = !0), "underline" === i.textDecoration && (r.underline = !0), "line-through" === i.textDecoration && (r.strike = !0), (i.fontWeight?.startsWith("bold") || parseInt(i.fontWeight, 10) >= 700) && (r.bold = !0), e = Object.entries(r).reduce(((t, e) => { + let [r, i] = e; + return O(t, r, i, n) + }), e), parseFloat(i.textIndent || 0) > 0 ? (new (s())).insert("\t").concat(e) : e + }], ["li", function (t, e, n) { + const r = n.query(t); + if (null == r || "list" !== r.blotName || !T(e, "\n")) return e; + let i = -1, o = t.parentNode; + for (; null != o;) ["OL", "UL"].includes(o.tagName) && (i += 1), o = o.parentNode; + return i <= 0 ? e : e.reduce(((t, e) => e.insert ? e.attributes && "number" == typeof e.attributes.indent ? t.push(e) : t.insert(e.insert, {indent: i, ...e.attributes || {}}) : t), new (s())) + }], ["ol, ul", function (t, e, n) { + const r = t; + let i = "OL" === r.tagName ? "ordered" : "bullet"; + const s = r.getAttribute("data-checked"); + return s && (i = "true" === s ? "checked" : "unchecked"), O(e, "list", i, n) + }], ["pre", function (t, e, n) { + const r = n.query("code-block"); + return O(e, "code-block", !r || !("formats" in r) || "function" != typeof r.formats || r.formats(t, n), n) + }], ["tr", function (t, e, n) { + const r = "TABLE" === t.parentElement?.tagName ? t.parentElement : t.parentElement?.parentElement; + return null != r ? O(e, "table", Array.from(r.querySelectorAll("tr")).indexOf(t) + 1, n) : e + }], ["b", B("bold")], ["i", B("italic")], ["strike", B("strike")], ["style", function () { + return new (s()) + }]], _ = [u.gS, p.Mc].reduce(((t, e) => (t[e.keyName] = e, t)), {}), + L = [u.Hu, h.s, f.JM, p.VL, g.z, m.r].reduce(((t, e) => (t[e.keyName] = e, t)), {}); + + class S extends a.A { + static DEFAULTS = {matchers: []}; + + constructor(t, e) { + super(t, e), this.quill.root.addEventListener("copy", (t => this.onCaptureCopy(t, !1))), this.quill.root.addEventListener("cut", (t => this.onCaptureCopy(t, !0))), this.quill.root.addEventListener("paste", this.onCapturePaste.bind(this)), this.matchers = [], k.concat(this.options.matchers ?? []).forEach((t => { + let [e, n] = t; + this.addMatcher(e, n) + })) + } + + addMatcher(t, e) { + this.matchers.push([t, e]) + } + + convert(t) { + let {html: e, text: n} = t, + r = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}; + if (r[d.Ay.blotName]) return (new (s())).insert(n || "", {[d.Ay.blotName]: r[d.Ay.blotName]}); + if (!e) return (new (s())).insert(n || "", r); + const i = this.convertHTML(e); + return T(i, "\n") && (null == i.ops[i.ops.length - 1].attributes || r.table) ? i.compose((new (s())).retain(i.length() - 1).delete(1)) : i + } + + normalizeHTML(t) { + (t => { + t.documentElement && w.forEach((e => { + e(t) + })) + })(t) + } + + convertHTML(t) { + const e = (new DOMParser).parseFromString(t, "text/html"); + this.normalizeHTML(e); + const n = e.body, r = new WeakMap, [i, s] = this.prepareMatching(n, r); + return I(this.quill.scroll, n, i, s, r) + } + + dangerouslyPasteHTML(t, e) { + let n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : c.Ay.sources.API; + if ("string" == typeof t) { + const n = this.convert({html: t, text: ""}); + this.quill.setContents(n, e), this.quill.setSelection(0, c.Ay.sources.SILENT) + } else { + const r = this.convert({html: e, text: ""}); + this.quill.updateContents((new (s())).retain(t).concat(r), n), this.quill.setSelection(t + r.length(), c.Ay.sources.SILENT) + } + } + + onCaptureCopy(t) { + let e = arguments.length > 1 && void 0 !== arguments[1] && arguments[1]; + if (t.defaultPrevented) return; + t.preventDefault(); + const [n] = this.quill.selection.getRange(); + if (null == n) return; + const {html: r, text: i} = this.onCopy(n, e); + t.clipboardData?.setData("text/plain", i), t.clipboardData?.setData("text/html", r), e && (0, b.Xo)({ + range: n, + quill: this.quill + }) + } + + normalizeURIList(t) { + return t.split(/\r?\n/).filter((t => "#" !== t[0])).join("\n") + } + + onCapturePaste(t) { + if (t.defaultPrevented || !this.quill.isEnabled()) return; + t.preventDefault(); + const e = this.quill.getSelection(!0); + if (null == e) return; + const n = t.clipboardData?.getData("text/html"); + let r = t.clipboardData?.getData("text/plain"); + if (!n && !r) { + const e = t.clipboardData?.getData("text/uri-list"); + e && (r = this.normalizeURIList(e)) + } + const i = Array.from(t.clipboardData?.files || []); + if (!n && i.length > 0) this.quill.uploader.upload(e, i); else { + if (n && i.length > 0) { + const t = (new DOMParser).parseFromString(n, "text/html"); + if (1 === t.body.childElementCount && "IMG" === t.body.firstElementChild?.tagName) return void this.quill.uploader.upload(e, i) + } + this.onPaste(e, {html: n, text: r}) + } + } + + onCopy(t) { + const e = this.quill.getText(t); + return {html: this.quill.getSemanticHTML(t), text: e} + } + + onPaste(t, e) { + let {text: n, html: r} = e; + const i = this.quill.getFormat(t.index), o = this.convert({text: n, html: r}, i); + q.log("onPaste", o, {text: n, html: r}); + const l = (new (s())).retain(t.index).delete(t.length).concat(o); + this.quill.updateContents(l, c.Ay.sources.USER), this.quill.setSelection(l.length() - t.length, c.Ay.sources.SILENT), this.quill.scrollSelectionIntoView() + } + + prepareMatching(t, e) { + const n = [], r = []; + return this.matchers.forEach((i => { + const [s, o] = i; + switch (s) { + case Node.TEXT_NODE: + r.push(o); + break; + case Node.ELEMENT_NODE: + n.push(o); + break; + default: + Array.from(t.querySelectorAll(s)).forEach((t => { + if (e.has(t)) { + const n = e.get(t); + n?.push(o) + } else e.set(t, [o]) + })) + } + })), [n, r] + } + } + + function O(t, e, n, r) { + return r.query(e) ? t.reduce(((t, r) => { + if (!r.insert) return t; + if (r.attributes && r.attributes[e]) return t.push(r); + const i = n ? {[e]: n} : {}; + return t.insert(r.insert, {...i, ...r.attributes}) + }), new (s())) : t + } + + function T(t, e) { + let n = ""; + for (let r = t.ops.length - 1; r >= 0 && n.length < e.length; --r) { + const e = t.ops[r]; + if ("string" != typeof e.insert) break; + n = e.insert + n + } + return n.slice(-1 * e.length) === e + } + + function j(t, e) { + if (!(t instanceof Element)) return !1; + const n = e.query(t); + return !(n && n.prototype instanceof r.EmbedBlot) && ["address", "article", "blockquote", "canvas", "dd", "div", "dl", "dt", "fieldset", "figcaption", "figure", "footer", "form", "h1", "h2", "h3", "h4", "h5", "h6", "header", "iframe", "li", "main", "nav", "ol", "output", "p", "pre", "section", "table", "td", "tr", "ul", "video"].includes(t.tagName.toLowerCase()) + } + + const C = new WeakMap; + + function R(t) { + return null != t && (C.has(t) || ("PRE" === t.tagName ? C.set(t, !0) : C.set(t, R(t.parentNode))), C.get(t)) + } + + function I(t, e, n, r, i) { + return e.nodeType === e.TEXT_NODE ? r.reduce(((n, r) => r(e, n, t)), new (s())) : e.nodeType === e.ELEMENT_NODE ? Array.from(e.childNodes || []).reduce(((s, o) => { + let l = I(t, o, n, r, i); + return o.nodeType === e.ELEMENT_NODE && (l = n.reduce(((e, n) => n(o, e, t)), l), l = (i.get(o) || []).reduce(((e, n) => n(o, e, t)), l)), s.concat(l) + }), new (s())) : new (s()) + } + + function B(t) { + return (e, n, r) => O(n, t, !0, r) + } + + function M(t, e, n) { + if (!T(e, "\n")) { + if (j(t, n) && (t.childNodes.length > 0 || t instanceof HTMLParagraphElement)) return e.insert("\n"); + if (e.length() > 0 && t.nextSibling) { + let r = t.nextSibling; + for (; null != r;) { + if (j(r, n)) return e.insert("\n"); + const t = n.query(r); + if (t && t.prototype instanceof o.zo) return e.insert("\n"); + r = r.firstChild + } + } + } + return e + } + }, 8123: function (t, e, n) { + "use strict"; + n.d(e, { + Ay: function () { + return f + }, Xo: function () { + return v + } + }); + var r = n(5123), i = n(3707), s = n(5232), o = n.n(s), l = n(6003), a = n(6142), c = n(6078), + u = n(4266); + const h = (0, c.A)("quill:keyboard"), d = /Mac/i.test(navigator.platform) ? "metaKey" : "ctrlKey"; + + class f extends u.A { + static match(t, e) { + return !["altKey", "ctrlKey", "metaKey", "shiftKey"].some((n => !!e[n] !== t[n] && null !== e[n])) && (e.key === t.key || e.key === t.which) + } + + constructor(t, e) { + super(t, e), this.bindings = {}, Object.keys(this.options.bindings).forEach((t => { + this.options.bindings[t] && this.addBinding(this.options.bindings[t]) + })), this.addBinding({ + key: "Enter", + shiftKey: null + }, this.handleEnter), this.addBinding({ + key: "Enter", + metaKey: null, + ctrlKey: null, + altKey: null + }, (() => { + })), /Firefox/i.test(navigator.userAgent) ? (this.addBinding({key: "Backspace"}, {collapsed: !0}, this.handleBackspace), this.addBinding({key: "Delete"}, {collapsed: !0}, this.handleDelete)) : (this.addBinding({key: "Backspace"}, { + collapsed: !0, + prefix: /^.?$/ + }, this.handleBackspace), this.addBinding({key: "Delete"}, { + collapsed: !0, + suffix: /^.?$/ + }, this.handleDelete)), this.addBinding({key: "Backspace"}, {collapsed: !1}, this.handleDeleteRange), this.addBinding({key: "Delete"}, {collapsed: !1}, this.handleDeleteRange), this.addBinding({ + key: "Backspace", + altKey: null, + ctrlKey: null, + metaKey: null, + shiftKey: null + }, {collapsed: !0, offset: 0}, this.handleBackspace), this.listen() + } + + addBinding(t) { + let e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, + n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {}; + const r = function (t) { + if ("string" == typeof t || "number" == typeof t) t = {key: t}; else { + if ("object" != typeof t) return null; + t = (0, i.A)(t) + } + return t.shortKey && (t[d] = t.shortKey, delete t.shortKey), t + }(t); + null != r ? ("function" == typeof e && (e = {handler: e}), "function" == typeof n && (n = {handler: n}), (Array.isArray(r.key) ? r.key : [r.key]).forEach((t => { + const i = {...r, key: t, ...e, ...n}; + this.bindings[i.key] = this.bindings[i.key] || [], this.bindings[i.key].push(i) + }))) : h.warn("Attempted to add invalid keyboard binding", r) + } + + listen() { + this.quill.root.addEventListener("keydown", (t => { + if (t.defaultPrevented || t.isComposing) return; + if (229 === t.keyCode && ("Enter" === t.key || "Backspace" === t.key)) return; + const e = (this.bindings[t.key] || []).concat(this.bindings[t.which] || []).filter((e => f.match(t, e))); + if (0 === e.length) return; + const n = a.Ay.find(t.target, !0); + if (n && n.scroll !== this.quill.scroll) return; + const i = this.quill.getSelection(); + if (null == i || !this.quill.hasFocus()) return; + const [s, o] = this.quill.getLine(i.index), [c, u] = this.quill.getLeaf(i.index), [h, d] = 0 === i.length ? [c, u] : this.quill.getLeaf(i.index + i.length), + p = c instanceof l.TextBlot ? c.value().slice(0, u) : "", + g = h instanceof l.TextBlot ? h.value().slice(d) : "", m = { + collapsed: 0 === i.length, + empty: 0 === i.length && s.length() <= 1, + format: this.quill.getFormat(i), + line: s, + offset: o, + prefix: p, + suffix: g, + event: t + }; + e.some((t => { + if (null != t.collapsed && t.collapsed !== m.collapsed) return !1; + if (null != t.empty && t.empty !== m.empty) return !1; + if (null != t.offset && t.offset !== m.offset) return !1; + if (Array.isArray(t.format)) { + if (t.format.every((t => null == m.format[t]))) return !1 + } else if ("object" == typeof t.format && !Object.keys(t.format).every((e => !0 === t.format[e] ? null != m.format[e] : !1 === t.format[e] ? null == m.format[e] : (0, r.A)(t.format[e], m.format[e])))) return !1; + return !(null != t.prefix && !t.prefix.test(m.prefix) || null != t.suffix && !t.suffix.test(m.suffix) || !0 === t.handler.call(this, i, m, t)) + })) && t.preventDefault() + })) + } + + handleBackspace(t, e) { + const n = /[\uD800-\uDBFF][\uDC00-\uDFFF]$/.test(e.prefix) ? 2 : 1; + if (0 === t.index || this.quill.getLength() <= 1) return; + let r = {}; + const [i] = this.quill.getLine(t.index); + let l = (new (o())).retain(t.index - n).delete(n); + if (0 === e.offset) { + const [e] = this.quill.getLine(t.index - 1); + if (e && !("block" === e.statics.blotName && e.length() <= 1)) { + const e = i.formats(), n = this.quill.getFormat(t.index - 1, 1); + if (r = s.AttributeMap.diff(e, n) || {}, Object.keys(r).length > 0) { + const e = (new (o())).retain(t.index + i.length() - 2).retain(1, r); + l = l.compose(e) + } + } + } + this.quill.updateContents(l, a.Ay.sources.USER), this.quill.focus() + } + + handleDelete(t, e) { + const n = /^[\uD800-\uDBFF][\uDC00-\uDFFF]/.test(e.suffix) ? 2 : 1; + if (t.index >= this.quill.getLength() - n) return; + let r = {}; + const [i] = this.quill.getLine(t.index); + let l = (new (o())).retain(t.index).delete(n); + if (e.offset >= i.length() - 1) { + const [e] = this.quill.getLine(t.index + 1); + if (e) { + const n = i.formats(), o = this.quill.getFormat(t.index, 1); + r = s.AttributeMap.diff(n, o) || {}, Object.keys(r).length > 0 && (l = l.retain(e.length() - 1).retain(1, r)) + } + } + this.quill.updateContents(l, a.Ay.sources.USER), this.quill.focus() + } + + handleDeleteRange(t) { + v({range: t, quill: this.quill}), this.quill.focus() + } + + handleEnter(t, e) { + const n = Object.keys(e.format).reduce(((t, n) => (this.quill.scroll.query(n, l.Scope.BLOCK) && !Array.isArray(e.format[n]) && (t[n] = e.format[n]), t)), {}), + r = (new (o())).retain(t.index).delete(t.length).insert("\n", n); + this.quill.updateContents(r, a.Ay.sources.USER), this.quill.setSelection(t.index + 1, a.Ay.sources.SILENT), this.quill.focus() + } + } + + const p = { + bindings: { + bold: b("bold"), + italic: b("italic"), + underline: b("underline"), + indent: { + key: "Tab", format: ["blockquote", "indent", "list"], handler(t, e) { + return !(!e.collapsed || 0 === e.offset) || (this.quill.format("indent", "+1", a.Ay.sources.USER), !1) + } + }, + outdent: { + key: "Tab", shiftKey: !0, format: ["blockquote", "indent", "list"], handler(t, e) { + return !(!e.collapsed || 0 === e.offset) || (this.quill.format("indent", "-1", a.Ay.sources.USER), !1) + } + }, + "outdent backspace": { + key: "Backspace", + collapsed: !0, + shiftKey: null, + metaKey: null, + ctrlKey: null, + altKey: null, + format: ["indent", "list"], + offset: 0, + handler(t, e) { + null != e.format.indent ? this.quill.format("indent", "-1", a.Ay.sources.USER) : null != e.format.list && this.quill.format("list", !1, a.Ay.sources.USER) + } + }, + "indent code-block": g(!0), + "outdent code-block": g(!1), + "remove tab": { + key: "Tab", shiftKey: !0, collapsed: !0, prefix: /\t$/, handler(t) { + this.quill.deleteText(t.index - 1, 1, a.Ay.sources.USER) + } + }, + tab: { + key: "Tab", handler(t, e) { + if (e.format.table) return !0; + this.quill.history.cutoff(); + const n = (new (o())).retain(t.index).delete(t.length).insert("\t"); + return this.quill.updateContents(n, a.Ay.sources.USER), this.quill.history.cutoff(), this.quill.setSelection(t.index + 1, a.Ay.sources.SILENT), !1 + } + }, + "blockquote empty enter": { + key: "Enter", + collapsed: !0, + format: ["blockquote"], + empty: !0, + handler() { + this.quill.format("blockquote", !1, a.Ay.sources.USER) + } + }, + "list empty enter": { + key: "Enter", collapsed: !0, format: ["list"], empty: !0, handler(t, e) { + const n = {list: !1}; + e.format.indent && (n.indent = !1), this.quill.formatLine(t.index, t.length, n, a.Ay.sources.USER) + } + }, + "checklist enter": { + key: "Enter", collapsed: !0, format: {list: "checked"}, handler(t) { + const [e, n] = this.quill.getLine(t.index), r = {...e.formats(), list: "checked"}, + i = (new (o())).retain(t.index).insert("\n", r).retain(e.length() - n - 1).retain(1, {list: "unchecked"}); + this.quill.updateContents(i, a.Ay.sources.USER), this.quill.setSelection(t.index + 1, a.Ay.sources.SILENT), this.quill.scrollSelectionIntoView() + } + }, + "header enter": { + key: "Enter", collapsed: !0, format: ["header"], suffix: /^$/, handler(t, e) { + const [n, r] = this.quill.getLine(t.index), + i = (new (o())).retain(t.index).insert("\n", e.format).retain(n.length() - r - 1).retain(1, {header: null}); + this.quill.updateContents(i, a.Ay.sources.USER), this.quill.setSelection(t.index + 1, a.Ay.sources.SILENT), this.quill.scrollSelectionIntoView() + } + }, + "table backspace": { + key: "Backspace", format: ["table"], collapsed: !0, offset: 0, handler() { + } + }, + "table delete": { + key: "Delete", format: ["table"], collapsed: !0, suffix: /^$/, handler() { + } + }, + "table enter": { + key: "Enter", shiftKey: null, format: ["table"], handler(t) { + const e = this.quill.getModule("table"); + if (e) { + const [n, r, i, s] = e.getTable(t), l = function (t, e, n, r) { + return null == e.prev && null == e.next ? null == n.prev && null == n.next ? 0 === r ? -1 : 1 : null == n.prev ? -1 : 1 : null == e.prev ? -1 : null == e.next ? 1 : null + }(0, r, i, s); + if (null == l) return; + let c = n.offset(); + if (l < 0) { + const e = (new (o())).retain(c).insert("\n"); + this.quill.updateContents(e, a.Ay.sources.USER), this.quill.setSelection(t.index + 1, t.length, a.Ay.sources.SILENT) + } else if (l > 0) { + c += n.length(); + const t = (new (o())).retain(c).insert("\n"); + this.quill.updateContents(t, a.Ay.sources.USER), this.quill.setSelection(c, a.Ay.sources.USER) + } + } + } + }, + "table tab": { + key: "Tab", shiftKey: null, format: ["table"], handler(t, e) { + const {event: n, line: r} = e, i = r.offset(this.quill.scroll); + n.shiftKey ? this.quill.setSelection(i - 1, a.Ay.sources.USER) : this.quill.setSelection(i + r.length(), a.Ay.sources.USER) + } + }, + "list autofill": { + key: " ", + shiftKey: null, + collapsed: !0, + format: {"code-block": !1, blockquote: !1, table: !1}, + prefix: /^\s*?(\d+\.|-|\*|\[ ?\]|\[x\])$/, + handler(t, e) { + if (null == this.quill.scroll.query("list")) return !0; + const {length: n} = e.prefix, [r, i] = this.quill.getLine(t.index); + if (i > n) return !0; + let s; + switch (e.prefix.trim()) { + case"[]": + case"[ ]": + s = "unchecked"; + break; + case"[x]": + s = "checked"; + break; + case"-": + case"*": + s = "bullet"; + break; + default: + s = "ordered" + } + this.quill.insertText(t.index, " ", a.Ay.sources.USER), this.quill.history.cutoff(); + const l = (new (o())).retain(t.index - i).delete(n + 1).retain(r.length() - 2 - i).retain(1, {list: s}); + return this.quill.updateContents(l, a.Ay.sources.USER), this.quill.history.cutoff(), this.quill.setSelection(t.index - n, a.Ay.sources.SILENT), !1 + } + }, + "code exit": { + key: "Enter", + collapsed: !0, + format: ["code-block"], + prefix: /^$/, + suffix: /^\s*$/, + handler(t) { + const [e, n] = this.quill.getLine(t.index); + let r = 2, i = e; + for (; null != i && i.length() <= 1 && i.formats()["code-block"];) if (i = i.prev, r -= 1, r <= 0) { + const r = (new (o())).retain(t.index + e.length() - n - 2).retain(1, {"code-block": null}).delete(1); + return this.quill.updateContents(r, a.Ay.sources.USER), this.quill.setSelection(t.index - 1, a.Ay.sources.SILENT), !1 + } + return !0 + } + }, + "embed left": m("ArrowLeft", !1), + "embed left shift": m("ArrowLeft", !0), + "embed right": m("ArrowRight", !1), + "embed right shift": m("ArrowRight", !0), + "table down": y(!1), + "table up": y(!0) + } + }; + + function g(t) { + return { + key: "Tab", shiftKey: !t, format: {"code-block": !0}, handler(e, n) { + let {event: r} = n; + const i = this.quill.scroll.query("code-block"), {TAB: s} = i; + if (0 === e.length && !r.shiftKey) return this.quill.insertText(e.index, s, a.Ay.sources.USER), void this.quill.setSelection(e.index + s.length, a.Ay.sources.SILENT); + const o = 0 === e.length ? this.quill.getLines(e.index, 1) : this.quill.getLines(e); + let {index: l, length: c} = e; + o.forEach(((e, n) => { + t ? (e.insertAt(0, s), 0 === n ? l += s.length : c += s.length) : e.domNode.textContent.startsWith(s) && (e.deleteAt(0, s.length), 0 === n ? l -= s.length : c -= s.length) + })), this.quill.update(a.Ay.sources.USER), this.quill.setSelection(l, c, a.Ay.sources.SILENT) + } + } + } + + function m(t, e) { + return { + key: t, + shiftKey: e, + altKey: null, + ["ArrowLeft" === t ? "prefix" : "suffix"]: /^$/, + handler(n) { + let {index: r} = n; + "ArrowRight" === t && (r += n.length + 1); + const [i] = this.quill.getLeaf(r); + return !(i instanceof l.EmbedBlot && ("ArrowLeft" === t ? e ? this.quill.setSelection(n.index - 1, n.length + 1, a.Ay.sources.USER) : this.quill.setSelection(n.index - 1, a.Ay.sources.USER) : e ? this.quill.setSelection(n.index, n.length + 1, a.Ay.sources.USER) : this.quill.setSelection(n.index + n.length + 1, a.Ay.sources.USER), 1)) + } + } + } + + function b(t) { + return { + key: t[0], shortKey: !0, handler(e, n) { + this.quill.format(t, !n.format[t], a.Ay.sources.USER) + } + } + } + + function y(t) { + return { + key: t ? "ArrowUp" : "ArrowDown", collapsed: !0, format: ["table"], handler(e, n) { + const r = t ? "prev" : "next", i = n.line, s = i.parent[r]; + if (null != s) { + if ("table-row" === s.statics.blotName) { + let t = s.children.head, e = i; + for (; null != e.prev;) e = e.prev, t = t.next; + const r = t.offset(this.quill.scroll) + Math.min(n.offset, t.length() - 1); + this.quill.setSelection(r, 0, a.Ay.sources.USER) + } + } else { + const e = i.table()[r]; + null != e && (t ? this.quill.setSelection(e.offset(this.quill.scroll) + e.length() - 1, 0, a.Ay.sources.USER) : this.quill.setSelection(e.offset(this.quill.scroll), 0, a.Ay.sources.USER)) + } + return !1 + } + } + } + + function v(t) { + let {quill: e, range: n} = t; + const r = e.getLines(n); + let i = {}; + if (r.length > 1) { + const t = r[0].formats(), e = r[r.length - 1].formats(); + i = s.AttributeMap.diff(e, t) || {} + } + e.deleteText(n, a.Ay.sources.USER), Object.keys(i).length > 0 && e.formatLine(n.index, 1, i, a.Ay.sources.USER), e.setSelection(n.index, a.Ay.sources.SILENT) + } + + f.DEFAULTS = p + }, 8920: function (t) { + "use strict"; + var e = Object.prototype.hasOwnProperty, n = "~"; + + function r() { + } + + function i(t, e, n) { + this.fn = t, this.context = e, this.once = n || !1 + } + + function s(t, e, r, s, o) { + if ("function" != typeof r) throw new TypeError("The listener must be a function"); + var l = new i(r, s || t, o), a = n ? n + e : e; + return t._events[a] ? t._events[a].fn ? t._events[a] = [t._events[a], l] : t._events[a].push(l) : (t._events[a] = l, t._eventsCount++), t + } + + function o(t, e) { + 0 == --t._eventsCount ? t._events = new r : delete t._events[e] + } + + function l() { + this._events = new r, this._eventsCount = 0 + } + + Object.create && (r.prototype = Object.create(null), (new r).__proto__ || (n = !1)), l.prototype.eventNames = function () { + var t, r, i = []; + if (0 === this._eventsCount) return i; + for (r in t = this._events) e.call(t, r) && i.push(n ? r.slice(1) : r); + return Object.getOwnPropertySymbols ? i.concat(Object.getOwnPropertySymbols(t)) : i + }, l.prototype.listeners = function (t) { + var e = n ? n + t : t, r = this._events[e]; + if (!r) return []; + if (r.fn) return [r.fn]; + for (var i = 0, s = r.length, o = new Array(s); i < s; i++) o[i] = r[i].fn; + return o + }, l.prototype.listenerCount = function (t) { + var e = n ? n + t : t, r = this._events[e]; + return r ? r.fn ? 1 : r.length : 0 + }, l.prototype.emit = function (t, e, r, i, s, o) { + var l = n ? n + t : t; + if (!this._events[l]) return !1; + var a, c, u = this._events[l], h = arguments.length; + if (u.fn) { + switch (u.once && this.removeListener(t, u.fn, void 0, !0), h) { + case 1: + return u.fn.call(u.context), !0; + case 2: + return u.fn.call(u.context, e), !0; + case 3: + return u.fn.call(u.context, e, r), !0; + case 4: + return u.fn.call(u.context, e, r, i), !0; + case 5: + return u.fn.call(u.context, e, r, i, s), !0; + case 6: + return u.fn.call(u.context, e, r, i, s, o), !0 + } + for (c = 1, a = new Array(h - 1); c < h; c++) a[c - 1] = arguments[c]; + u.fn.apply(u.context, a) + } else { + var d, f = u.length; + for (c = 0; c < f; c++) switch (u[c].once && this.removeListener(t, u[c].fn, void 0, !0), h) { + case 1: + u[c].fn.call(u[c].context); + break; + case 2: + u[c].fn.call(u[c].context, e); + break; + case 3: + u[c].fn.call(u[c].context, e, r); + break; + case 4: + u[c].fn.call(u[c].context, e, r, i); + break; + default: + if (!a) for (d = 1, a = new Array(h - 1); d < h; d++) a[d - 1] = arguments[d]; + u[c].fn.apply(u[c].context, a) + } + } + return !0 + }, l.prototype.on = function (t, e, n) { + return s(this, t, e, n, !1) + }, l.prototype.once = function (t, e, n) { + return s(this, t, e, n, !0) + }, l.prototype.removeListener = function (t, e, r, i) { + var s = n ? n + t : t; + if (!this._events[s]) return this; + if (!e) return o(this, s), this; + var l = this._events[s]; + if (l.fn) l.fn !== e || i && !l.once || r && l.context !== r || o(this, s); else { + for (var a = 0, c = [], u = l.length; a < u; a++) (l[a].fn !== e || i && !l[a].once || r && l[a].context !== r) && c.push(l[a]); + c.length ? this._events[s] = 1 === c.length ? c[0] : c : o(this, s) + } + return this + }, l.prototype.removeAllListeners = function (t) { + var e; + return t ? (e = n ? n + t : t, this._events[e] && o(this, e)) : (this._events = new r, this._eventsCount = 0), this + }, l.prototype.off = l.prototype.removeListener, l.prototype.addListener = l.prototype.on, l.prefixed = n, l.EventEmitter = l, t.exports = l + }, 5090: function (t) { + var e = -1, n = 1, r = 0; + + function i(t, g, m, b, y) { + if (t === g) return t ? [[r, t]] : []; + if (null != m) { + var A = function (t, e, n) { + var r = "number" == typeof n ? {index: n, length: 0} : n.oldRange, + i = "number" == typeof n ? null : n.newRange, s = t.length, o = e.length; + if (0 === r.length && (null === i || 0 === i.length)) { + var l = r.index, a = t.slice(0, l), c = t.slice(l), u = i ? i.index : null, + h = l + o - s; + if ((null === u || u === h) && !(h < 0 || h > o)) { + var d = e.slice(0, h); + if ((g = e.slice(h)) === c) { + var f = Math.min(l, h); + if ((b = a.slice(0, f)) === (A = d.slice(0, f))) return v(b, a.slice(f), d.slice(f), c) + } + } + if (null === u || u === l) { + var p = l, g = (d = e.slice(0, p), e.slice(p)); + if (d === a) { + var m = Math.min(s - p, o - p); + if ((y = c.slice(c.length - m)) === (x = g.slice(g.length - m))) return v(a, c.slice(0, c.length - m), g.slice(0, g.length - m), y) + } + } + } + if (r.length > 0 && i && 0 === i.length) { + var b = t.slice(0, r.index), y = t.slice(r.index + r.length); + if (!(o < (f = b.length) + (m = y.length))) { + var A = e.slice(0, f), x = e.slice(o - m); + if (b === A && y === x) return v(b, t.slice(f, s - m), e.slice(f, o - m), y) + } + } + return null + }(t, g, m); + if (A) return A + } + var x = o(t, g), N = t.substring(0, x); + x = a(t = t.substring(x), g = g.substring(x)); + var E = t.substring(t.length - x), w = function (t, l) { + var c; + if (!t) return [[n, l]]; + if (!l) return [[e, t]]; + var u = t.length > l.length ? t : l, h = t.length > l.length ? l : t, d = u.indexOf(h); + if (-1 !== d) return c = [[n, u.substring(0, d)], [r, h], [n, u.substring(d + h.length)]], t.length > l.length && (c[0][0] = c[2][0] = e), c; + if (1 === h.length) return [[e, t], [n, l]]; + var f = function (t, e) { + var n = t.length > e.length ? t : e, r = t.length > e.length ? e : t; + if (n.length < 4 || 2 * r.length < n.length) return null; + + function i(t, e, n) { + for (var r, i, s, l, c = t.substring(n, n + Math.floor(t.length / 4)), u = -1, h = ""; -1 !== (u = e.indexOf(c, u + 1));) { + var d = o(t.substring(n), e.substring(u)), + f = a(t.substring(0, n), e.substring(0, u)); + h.length < f + d && (h = e.substring(u - f, u) + e.substring(u, u + d), r = t.substring(0, n - f), i = t.substring(n + d), s = e.substring(0, u - f), l = e.substring(u + d)) + } + return 2 * h.length >= t.length ? [r, i, s, l, h] : null + } + + var s, l, c, u, h, d = i(n, r, Math.ceil(n.length / 4)), + f = i(n, r, Math.ceil(n.length / 2)); + return d || f ? (s = f ? d && d[4].length > f[4].length ? d : f : d, t.length > e.length ? (l = s[0], c = s[1], u = s[2], h = s[3]) : (u = s[0], h = s[1], l = s[2], c = s[3]), [l, c, u, h, s[4]]) : null + }(t, l); + if (f) { + var p = f[0], g = f[1], m = f[2], b = f[3], y = f[4], v = i(p, m), A = i(g, b); + return v.concat([[r, y]], A) + } + return function (t, r) { + for (var i = t.length, o = r.length, l = Math.ceil((i + o) / 2), a = l, c = 2 * l, u = new Array(c), h = new Array(c), d = 0; d < c; d++) u[d] = -1, h[d] = -1; + u[a + 1] = 0, h[a + 1] = 0; + for (var f = i - o, p = f % 2 != 0, g = 0, m = 0, b = 0, y = 0, v = 0; v < l; v++) { + for (var A = -v + g; A <= v - m; A += 2) { + for (var x = a + A, N = (_ = A === -v || A !== v && u[x - 1] < u[x + 1] ? u[x + 1] : u[x - 1] + 1) - A; _ < i && N < o && t.charAt(_) === r.charAt(N);) _++, N++; + if (u[x] = _, _ > i) m += 2; else if (N > o) g += 2; else if (p && (q = a + f - A) >= 0 && q < c && -1 !== h[q] && _ >= (w = i - h[q])) return s(t, r, _, N) + } + for (var E = -v + b; E <= v - y; E += 2) { + for (var w, q = a + E, k = (w = E === -v || E !== v && h[q - 1] < h[q + 1] ? h[q + 1] : h[q - 1] + 1) - E; w < i && k < o && t.charAt(i - w - 1) === r.charAt(o - k - 1);) w++, k++; + if (h[q] = w, w > i) y += 2; else if (k > o) b += 2; else if (!p) { + var _; + if ((x = a + f - E) >= 0 && x < c && -1 !== u[x]) if (N = a + (_ = u[x]) - x, _ >= (w = i - w)) return s(t, r, _, N) + } + } + } + return [[e, t], [n, r]] + }(t, l) + }(t = t.substring(0, t.length - x), g = g.substring(0, g.length - x)); + return N && w.unshift([r, N]), E && w.push([r, E]), p(w, y), b && function (t) { + for (var i = !1, s = [], o = 0, g = null, m = 0, b = 0, y = 0, v = 0, A = 0; m < t.length;) t[m][0] == r ? (s[o++] = m, b = v, y = A, v = 0, A = 0, g = t[m][1]) : (t[m][0] == n ? v += t[m][1].length : A += t[m][1].length, g && g.length <= Math.max(b, y) && g.length <= Math.max(v, A) && (t.splice(s[o - 1], 0, [e, g]), t[s[o - 1] + 1][0] = n, o--, m = --o > 0 ? s[o - 1] : -1, b = 0, y = 0, v = 0, A = 0, g = null, i = !0)), m++; + for (i && p(t), function (t) { + function e(t, e) { + if (!t || !e) return 6; + var n = t.charAt(t.length - 1), r = e.charAt(0), i = n.match(c), s = r.match(c), + o = i && n.match(u), l = s && r.match(u), a = o && n.match(h), p = l && r.match(h), + g = a && t.match(d), m = p && e.match(f); + return g || m ? 5 : a || p ? 4 : i && !o && l ? 3 : o || l ? 2 : i || s ? 1 : 0 + } + + for (var n = 1; n < t.length - 1;) { + if (t[n - 1][0] == r && t[n + 1][0] == r) { + var i = t[n - 1][1], s = t[n][1], o = t[n + 1][1], l = a(i, s); + if (l) { + var p = s.substring(s.length - l); + i = i.substring(0, i.length - l), s = p + s.substring(0, s.length - l), o = p + o + } + for (var g = i, m = s, b = o, y = e(i, s) + e(s, o); s.charAt(0) === o.charAt(0);) { + i += s.charAt(0), s = s.substring(1) + o.charAt(0), o = o.substring(1); + var v = e(i, s) + e(s, o); + v >= y && (y = v, g = i, m = s, b = o) + } + t[n - 1][1] != g && (g ? t[n - 1][1] = g : (t.splice(n - 1, 1), n--), t[n][1] = m, b ? t[n + 1][1] = b : (t.splice(n + 1, 1), n--)) + } + n++ + } + }(t), m = 1; m < t.length;) { + if (t[m - 1][0] == e && t[m][0] == n) { + var x = t[m - 1][1], N = t[m][1], E = l(x, N), w = l(N, x); + E >= w ? (E >= x.length / 2 || E >= N.length / 2) && (t.splice(m, 0, [r, N.substring(0, E)]), t[m - 1][1] = x.substring(0, x.length - E), t[m + 1][1] = N.substring(E), m++) : (w >= x.length / 2 || w >= N.length / 2) && (t.splice(m, 0, [r, x.substring(0, w)]), t[m - 1][0] = n, t[m - 1][1] = N.substring(0, N.length - w), t[m + 1][0] = e, t[m + 1][1] = x.substring(w), m++), m++ + } + m++ + } + }(w), w + } + + function s(t, e, n, r) { + var s = t.substring(0, n), o = e.substring(0, r), l = t.substring(n), a = e.substring(r), + c = i(s, o), u = i(l, a); + return c.concat(u) + } + + function o(t, e) { + if (!t || !e || t.charAt(0) !== e.charAt(0)) return 0; + for (var n = 0, r = Math.min(t.length, e.length), i = r, s = 0; n < i;) t.substring(s, i) == e.substring(s, i) ? s = n = i : r = i, i = Math.floor((r - n) / 2 + n); + return g(t.charCodeAt(i - 1)) && i--, i + } + + function l(t, e) { + var n = t.length, r = e.length; + if (0 == n || 0 == r) return 0; + n > r ? t = t.substring(n - r) : n < r && (e = e.substring(0, n)); + var i = Math.min(n, r); + if (t == e) return i; + for (var s = 0, o = 1; ;) { + var l = t.substring(i - o), a = e.indexOf(l); + if (-1 == a) return s; + o += a, 0 != a && t.substring(i - o) != e.substring(0, o) || (s = o, o++) + } + } + + function a(t, e) { + if (!t || !e || t.slice(-1) !== e.slice(-1)) return 0; + for (var n = 0, r = Math.min(t.length, e.length), i = r, s = 0; n < i;) t.substring(t.length - i, t.length - s) == e.substring(e.length - i, e.length - s) ? s = n = i : r = i, i = Math.floor((r - n) / 2 + n); + return m(t.charCodeAt(t.length - i)) && i--, i + } + + var c = /[^a-zA-Z0-9]/, u = /\s/, h = /[\r\n]/, d = /\n\r?\n$/, f = /^\r?\n\r?\n/; + + function p(t, i) { + t.push([r, ""]); + for (var s, l = 0, c = 0, u = 0, h = "", d = ""; l < t.length;) if (l < t.length - 1 && !t[l][1]) t.splice(l, 1); else switch (t[l][0]) { + case n: + u++, d += t[l][1], l++; + break; + case e: + c++, h += t[l][1], l++; + break; + case r: + var f = l - u - c - 1; + if (i) { + if (f >= 0 && y(t[f][1])) { + var g = t[f][1].slice(-1); + if (t[f][1] = t[f][1].slice(0, -1), h = g + h, d = g + d, !t[f][1]) { + t.splice(f, 1), l--; + var m = f - 1; + t[m] && t[m][0] === n && (u++, d = t[m][1] + d, m--), t[m] && t[m][0] === e && (c++, h = t[m][1] + h, m--), f = m + } + } + b(t[l][1]) && (g = t[l][1].charAt(0), t[l][1] = t[l][1].slice(1), h += g, d += g) + } + if (l < t.length - 1 && !t[l][1]) { + t.splice(l, 1); + break + } + if (h.length > 0 || d.length > 0) { + h.length > 0 && d.length > 0 && (0 !== (s = o(d, h)) && (f >= 0 ? t[f][1] += d.substring(0, s) : (t.splice(0, 0, [r, d.substring(0, s)]), l++), d = d.substring(s), h = h.substring(s)), 0 !== (s = a(d, h)) && (t[l][1] = d.substring(d.length - s) + t[l][1], d = d.substring(0, d.length - s), h = h.substring(0, h.length - s))); + var v = u + c; + 0 === h.length && 0 === d.length ? (t.splice(l - v, v), l -= v) : 0 === h.length ? (t.splice(l - v, v, [n, d]), l = l - v + 1) : 0 === d.length ? (t.splice(l - v, v, [e, h]), l = l - v + 1) : (t.splice(l - v, v, [e, h], [n, d]), l = l - v + 2) + } + 0 !== l && t[l - 1][0] === r ? (t[l - 1][1] += t[l][1], t.splice(l, 1)) : l++, u = 0, c = 0, h = "", d = "" + } + "" === t[t.length - 1][1] && t.pop(); + var A = !1; + for (l = 1; l < t.length - 1;) t[l - 1][0] === r && t[l + 1][0] === r && (t[l][1].substring(t[l][1].length - t[l - 1][1].length) === t[l - 1][1] ? (t[l][1] = t[l - 1][1] + t[l][1].substring(0, t[l][1].length - t[l - 1][1].length), t[l + 1][1] = t[l - 1][1] + t[l + 1][1], t.splice(l - 1, 1), A = !0) : t[l][1].substring(0, t[l + 1][1].length) == t[l + 1][1] && (t[l - 1][1] += t[l + 1][1], t[l][1] = t[l][1].substring(t[l + 1][1].length) + t[l + 1][1], t.splice(l + 1, 1), A = !0)), l++; + A && p(t, i) + } + + function g(t) { + return t >= 55296 && t <= 56319 + } + + function m(t) { + return t >= 56320 && t <= 57343 + } + + function b(t) { + return m(t.charCodeAt(0)) + } + + function y(t) { + return g(t.charCodeAt(t.length - 1)) + } + + function v(t, i, s, o) { + return y(t) || b(o) ? null : function (t) { + for (var e = [], n = 0; n < t.length; n++) t[n][1].length > 0 && e.push(t[n]); + return e + }([[r, t], [e, i], [n, s], [r, o]]) + } + + function A(t, e, n, r) { + return i(t, e, n, r, !0) + } + + A.INSERT = n, A.DELETE = e, A.EQUAL = r, t.exports = A + }, 9629: function (t, e, n) { + t = n.nmd(t); + var r = "__lodash_hash_undefined__", i = 9007199254740991, s = "[object Arguments]", + o = "[object Boolean]", l = "[object Date]", a = "[object Function]", + c = "[object GeneratorFunction]", u = "[object Map]", h = "[object Number]", d = "[object Object]", + f = "[object Promise]", p = "[object RegExp]", g = "[object Set]", m = "[object String]", + b = "[object Symbol]", y = "[object WeakMap]", v = "[object ArrayBuffer]", A = "[object DataView]", + x = "[object Float32Array]", N = "[object Float64Array]", E = "[object Int8Array]", + w = "[object Int16Array]", q = "[object Int32Array]", k = "[object Uint8Array]", + _ = "[object Uint8ClampedArray]", L = "[object Uint16Array]", S = "[object Uint32Array]", + O = /\w*$/, T = /^\[object .+?Constructor\]$/, j = /^(?:0|[1-9]\d*)$/, C = {}; + C[s] = C["[object Array]"] = C[v] = C[A] = C[o] = C[l] = C[x] = C[N] = C[E] = C[w] = C[q] = C[u] = C[h] = C[d] = C[p] = C[g] = C[m] = C[b] = C[k] = C[_] = C[L] = C[S] = !0, C["[object Error]"] = C[a] = C[y] = !1; + var R = "object" == typeof n.g && n.g && n.g.Object === Object && n.g, + I = "object" == typeof self && self && self.Object === Object && self, + B = R || I || Function("return this")(), M = e && !e.nodeType && e, U = M && t && !t.nodeType && t, + D = U && U.exports === M; + + function P(t, e) { + return t.set(e[0], e[1]), t + } + + function z(t, e) { + return t.add(e), t + } + + function F(t, e, n, r) { + var i = -1, s = t ? t.length : 0; + for (r && s && (n = t[++i]); ++i < s;) n = e(n, t[i], i, t); + return n + } + + function H(t) { + var e = !1; + if (null != t && "function" != typeof t.toString) try { + e = !!(t + "") + } catch (t) { + } + return e + } + + function $(t) { + var e = -1, n = Array(t.size); + return t.forEach((function (t, r) { + n[++e] = [r, t] + })), n + } + + function V(t, e) { + return function (n) { + return t(e(n)) + } + } + + function K(t) { + var e = -1, n = Array(t.size); + return t.forEach((function (t) { + n[++e] = t + })), n + } + + var W, Z = Array.prototype, G = Function.prototype, X = Object.prototype, Q = B["__core-js_shared__"], + J = (W = /[^.]+$/.exec(Q && Q.keys && Q.keys.IE_PROTO || "")) ? "Symbol(src)_1." + W : "", + Y = G.toString, tt = X.hasOwnProperty, et = X.toString, + nt = RegExp("^" + Y.call(tt).replace(/[\\^$.*+?()[\]{}|]/g, "\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + "$"), + rt = D ? B.Buffer : void 0, it = B.Symbol, st = B.Uint8Array, ot = V(Object.getPrototypeOf, Object), + lt = Object.create, at = X.propertyIsEnumerable, ct = Z.splice, ut = Object.getOwnPropertySymbols, + ht = rt ? rt.isBuffer : void 0, dt = V(Object.keys, Object), ft = Bt(B, "DataView"), + pt = Bt(B, "Map"), gt = Bt(B, "Promise"), mt = Bt(B, "Set"), bt = Bt(B, "WeakMap"), + yt = Bt(Object, "create"), vt = zt(ft), At = zt(pt), xt = zt(gt), Nt = zt(mt), Et = zt(bt), + wt = it ? it.prototype : void 0, qt = wt ? wt.valueOf : void 0; + + function kt(t) { + var e = -1, n = t ? t.length : 0; + for (this.clear(); ++e < n;) { + var r = t[e]; + this.set(r[0], r[1]) + } + } + + function _t(t) { + var e = -1, n = t ? t.length : 0; + for (this.clear(); ++e < n;) { + var r = t[e]; + this.set(r[0], r[1]) + } + } + + function Lt(t) { + var e = -1, n = t ? t.length : 0; + for (this.clear(); ++e < n;) { + var r = t[e]; + this.set(r[0], r[1]) + } + } + + function St(t) { + this.__data__ = new _t(t) + } + + function Ot(t, e, n) { + var r = t[e]; + tt.call(t, e) && Ft(r, n) && (void 0 !== n || e in t) || (t[e] = n) + } + + function Tt(t, e) { + for (var n = t.length; n--;) if (Ft(t[n][0], e)) return n; + return -1 + } + + function jt(t, e, n, r, i, f, y) { + var T; + if (r && (T = f ? r(t, i, f, y) : r(t)), void 0 !== T) return T; + if (!Wt(t)) return t; + var j = Ht(t); + if (j) { + if (T = function (t) { + var e = t.length, n = t.constructor(e); + return e && "string" == typeof t[0] && tt.call(t, "index") && (n.index = t.index, n.input = t.input), n + }(t), !e) return function (t, e) { + var n = -1, r = t.length; + for (e || (e = Array(r)); ++n < r;) e[n] = t[n]; + return e + }(t, T) + } else { + var R = Ut(t), I = R == a || R == c; + if (Vt(t)) return function (t, e) { + if (e) return t.slice(); + var n = new t.constructor(t.length); + return t.copy(n), n + }(t, e); + if (R == d || R == s || I && !f) { + if (H(t)) return f ? t : {}; + if (T = function (t) { + return "function" != typeof t.constructor || Pt(t) ? {} : Wt(e = ot(t)) ? lt(e) : {}; + var e + }(I ? {} : t), !e) return function (t, e) { + return Rt(t, Mt(t), e) + }(t, function (t, e) { + return t && Rt(e, Zt(e), t) + }(T, t)) + } else { + if (!C[R]) return f ? t : {}; + T = function (t, e, n, r) { + var i, s = t.constructor; + switch (e) { + case v: + return Ct(t); + case o: + case l: + return new s(+t); + case A: + return function (t, e) { + var n = e ? Ct(t.buffer) : t.buffer; + return new t.constructor(n, t.byteOffset, t.byteLength) + }(t, r); + case x: + case N: + case E: + case w: + case q: + case k: + case _: + case L: + case S: + return function (t, e) { + var n = e ? Ct(t.buffer) : t.buffer; + return new t.constructor(n, t.byteOffset, t.length) + }(t, r); + case u: + return function (t, e, n) { + return F(e ? n($(t), !0) : $(t), P, new t.constructor) + }(t, r, n); + case h: + case m: + return new s(t); + case p: + return function (t) { + var e = new t.constructor(t.source, O.exec(t)); + return e.lastIndex = t.lastIndex, e + }(t); + case g: + return function (t, e, n) { + return F(e ? n(K(t), !0) : K(t), z, new t.constructor) + }(t, r, n); + case b: + return i = t, qt ? Object(qt.call(i)) : {} + } + }(t, R, jt, e) + } + } + y || (y = new St); + var B = y.get(t); + if (B) return B; + if (y.set(t, T), !j) var M = n ? function (t) { + return function (t, e, n) { + var r = e(t); + return Ht(t) ? r : function (t, e) { + for (var n = -1, r = e.length, i = t.length; ++n < r;) t[i + n] = e[n]; + return t + }(r, n(t)) + }(t, Zt, Mt) + }(t) : Zt(t); + return function (t, e) { + for (var n = -1, r = t ? t.length : 0; ++n < r && !1 !== e(t[n], n);) ; + }(M || t, (function (i, s) { + M && (i = t[s = i]), Ot(T, s, jt(i, e, n, r, s, t, y)) + })), T + } + + function Ct(t) { + var e = new t.constructor(t.byteLength); + return new st(e).set(new st(t)), e + } + + function Rt(t, e, n, r) { + n || (n = {}); + for (var i = -1, s = e.length; ++i < s;) { + var o = e[i], l = r ? r(n[o], t[o], o, n, t) : void 0; + Ot(n, o, void 0 === l ? t[o] : l) + } + return n + } + + function It(t, e) { + var n, r, i = t.__data__; + return ("string" == (r = typeof (n = e)) || "number" == r || "symbol" == r || "boolean" == r ? "__proto__" !== n : null === n) ? i["string" == typeof e ? "string" : "hash"] : i.map + } + + function Bt(t, e) { + var n = function (t, e) { + return null == t ? void 0 : t[e] + }(t, e); + return function (t) { + return !(!Wt(t) || (e = t, J && J in e)) && (Kt(t) || H(t) ? nt : T).test(zt(t)); + var e + }(n) ? n : void 0 + } + + kt.prototype.clear = function () { + this.__data__ = yt ? yt(null) : {} + }, kt.prototype.delete = function (t) { + return this.has(t) && delete this.__data__[t] + }, kt.prototype.get = function (t) { + var e = this.__data__; + if (yt) { + var n = e[t]; + return n === r ? void 0 : n + } + return tt.call(e, t) ? e[t] : void 0 + }, kt.prototype.has = function (t) { + var e = this.__data__; + return yt ? void 0 !== e[t] : tt.call(e, t) + }, kt.prototype.set = function (t, e) { + return this.__data__[t] = yt && void 0 === e ? r : e, this + }, _t.prototype.clear = function () { + this.__data__ = [] + }, _t.prototype.delete = function (t) { + var e = this.__data__, n = Tt(e, t); + return !(n < 0 || (n == e.length - 1 ? e.pop() : ct.call(e, n, 1), 0)) + }, _t.prototype.get = function (t) { + var e = this.__data__, n = Tt(e, t); + return n < 0 ? void 0 : e[n][1] + }, _t.prototype.has = function (t) { + return Tt(this.__data__, t) > -1 + }, _t.prototype.set = function (t, e) { + var n = this.__data__, r = Tt(n, t); + return r < 0 ? n.push([t, e]) : n[r][1] = e, this + }, Lt.prototype.clear = function () { + this.__data__ = {hash: new kt, map: new (pt || _t), string: new kt} + }, Lt.prototype.delete = function (t) { + return It(this, t).delete(t) + }, Lt.prototype.get = function (t) { + return It(this, t).get(t) + }, Lt.prototype.has = function (t) { + return It(this, t).has(t) + }, Lt.prototype.set = function (t, e) { + return It(this, t).set(t, e), this + }, St.prototype.clear = function () { + this.__data__ = new _t + }, St.prototype.delete = function (t) { + return this.__data__.delete(t) + }, St.prototype.get = function (t) { + return this.__data__.get(t) + }, St.prototype.has = function (t) { + return this.__data__.has(t) + }, St.prototype.set = function (t, e) { + var n = this.__data__; + if (n instanceof _t) { + var r = n.__data__; + if (!pt || r.length < 199) return r.push([t, e]), this; + n = this.__data__ = new Lt(r) + } + return n.set(t, e), this + }; + var Mt = ut ? V(ut, Object) : function () { + return [] + }, Ut = function (t) { + return et.call(t) + }; + + function Dt(t, e) { + return !!(e = null == e ? i : e) && ("number" == typeof t || j.test(t)) && t > -1 && t % 1 == 0 && t < e + } + + function Pt(t) { + var e = t && t.constructor; + return t === ("function" == typeof e && e.prototype || X) + } + + function zt(t) { + if (null != t) { + try { + return Y.call(t) + } catch (t) { + } + try { + return t + "" + } catch (t) { + } + } + return "" + } + + function Ft(t, e) { + return t === e || t != t && e != e + } + + (ft && Ut(new ft(new ArrayBuffer(1))) != A || pt && Ut(new pt) != u || gt && Ut(gt.resolve()) != f || mt && Ut(new mt) != g || bt && Ut(new bt) != y) && (Ut = function (t) { + var e = et.call(t), n = e == d ? t.constructor : void 0, r = n ? zt(n) : void 0; + if (r) switch (r) { + case vt: + return A; + case At: + return u; + case xt: + return f; + case Nt: + return g; + case Et: + return y + } + return e + }); + var Ht = Array.isArray; + + function $t(t) { + return null != t && function (t) { + return "number" == typeof t && t > -1 && t % 1 == 0 && t <= i + }(t.length) && !Kt(t) + } + + var Vt = ht || function () { + return !1 + }; + + function Kt(t) { + var e = Wt(t) ? et.call(t) : ""; + return e == a || e == c + } + + function Wt(t) { + var e = typeof t; + return !!t && ("object" == e || "function" == e) + } + + function Zt(t) { + return $t(t) ? function (t, e) { + var n = Ht(t) || function (t) { + return function (t) { + return function (t) { + return !!t && "object" == typeof t + }(t) && $t(t) + }(t) && tt.call(t, "callee") && (!at.call(t, "callee") || et.call(t) == s) + }(t) ? function (t, e) { + for (var n = -1, r = Array(t); ++n < t;) r[n] = e(n); + return r + }(t.length, String) : [], r = n.length, i = !!r; + for (var o in t) !e && !tt.call(t, o) || i && ("length" == o || Dt(o, r)) || n.push(o); + return n + }(t) : function (t) { + if (!Pt(t)) return dt(t); + var e = []; + for (var n in Object(t)) tt.call(t, n) && "constructor" != n && e.push(n); + return e + }(t) + } + + t.exports = function (t) { + return jt(t, !0, !0) + } + }, 4162: function (t, e, n) { + t = n.nmd(t); + var r = "__lodash_hash_undefined__", i = 1, s = 2, o = 9007199254740991, l = "[object Arguments]", + a = "[object Array]", c = "[object AsyncFunction]", u = "[object Boolean]", h = "[object Date]", + d = "[object Error]", f = "[object Function]", p = "[object GeneratorFunction]", g = "[object Map]", + m = "[object Number]", b = "[object Null]", y = "[object Object]", v = "[object Promise]", + A = "[object Proxy]", x = "[object RegExp]", N = "[object Set]", E = "[object String]", + w = "[object Undefined]", q = "[object WeakMap]", k = "[object ArrayBuffer]", + _ = "[object DataView]", L = /^\[object .+?Constructor\]$/, S = /^(?:0|[1-9]\d*)$/, O = {}; + O["[object Float32Array]"] = O["[object Float64Array]"] = O["[object Int8Array]"] = O["[object Int16Array]"] = O["[object Int32Array]"] = O["[object Uint8Array]"] = O["[object Uint8ClampedArray]"] = O["[object Uint16Array]"] = O["[object Uint32Array]"] = !0, O[l] = O[a] = O[k] = O[u] = O[_] = O[h] = O[d] = O[f] = O[g] = O[m] = O[y] = O[x] = O[N] = O[E] = O[q] = !1; + var T = "object" == typeof n.g && n.g && n.g.Object === Object && n.g, + j = "object" == typeof self && self && self.Object === Object && self, + C = T || j || Function("return this")(), R = e && !e.nodeType && e, I = R && t && !t.nodeType && t, + B = I && I.exports === R, M = B && T.process, U = function () { + try { + return M && M.binding && M.binding("util") + } catch (t) { + } + }(), D = U && U.isTypedArray; + + function P(t, e) { + for (var n = -1, r = null == t ? 0 : t.length; ++n < r;) if (e(t[n], n, t)) return !0; + return !1 + } + + function z(t) { + var e = -1, n = Array(t.size); + return t.forEach((function (t, r) { + n[++e] = [r, t] + })), n + } + + function F(t) { + var e = -1, n = Array(t.size); + return t.forEach((function (t) { + n[++e] = t + })), n + } + + var H, $, V, K = Array.prototype, W = Function.prototype, Z = Object.prototype, + G = C["__core-js_shared__"], X = W.toString, Q = Z.hasOwnProperty, + J = (H = /[^.]+$/.exec(G && G.keys && G.keys.IE_PROTO || "")) ? "Symbol(src)_1." + H : "", + Y = Z.toString, + tt = RegExp("^" + X.call(Q).replace(/[\\^$.*+?()[\]{}|]/g, "\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + "$"), + et = B ? C.Buffer : void 0, nt = C.Symbol, rt = C.Uint8Array, it = Z.propertyIsEnumerable, + st = K.splice, ot = nt ? nt.toStringTag : void 0, lt = Object.getOwnPropertySymbols, + at = et ? et.isBuffer : void 0, ct = ($ = Object.keys, V = Object, function (t) { + return $(V(t)) + }), ut = It(C, "DataView"), ht = It(C, "Map"), dt = It(C, "Promise"), ft = It(C, "Set"), + pt = It(C, "WeakMap"), gt = It(Object, "create"), mt = Dt(ut), bt = Dt(ht), yt = Dt(dt), + vt = Dt(ft), At = Dt(pt), xt = nt ? nt.prototype : void 0, Nt = xt ? xt.valueOf : void 0; + + function Et(t) { + var e = -1, n = null == t ? 0 : t.length; + for (this.clear(); ++e < n;) { + var r = t[e]; + this.set(r[0], r[1]) + } + } + + function wt(t) { + var e = -1, n = null == t ? 0 : t.length; + for (this.clear(); ++e < n;) { + var r = t[e]; + this.set(r[0], r[1]) + } + } + + function qt(t) { + var e = -1, n = null == t ? 0 : t.length; + for (this.clear(); ++e < n;) { + var r = t[e]; + this.set(r[0], r[1]) + } + } + + function kt(t) { + var e = -1, n = null == t ? 0 : t.length; + for (this.__data__ = new qt; ++e < n;) this.add(t[e]) + } + + function _t(t) { + var e = this.__data__ = new wt(t); + this.size = e.size + } + + function Lt(t, e) { + for (var n = t.length; n--;) if (Pt(t[n][0], e)) return n; + return -1 + } + + function St(t) { + return null == t ? void 0 === t ? w : b : ot && ot in Object(t) ? function (t) { + var e = Q.call(t, ot), n = t[ot]; + try { + t[ot] = void 0; + var r = !0 + } catch (t) { + } + var i = Y.call(t); + return r && (e ? t[ot] = n : delete t[ot]), i + }(t) : function (t) { + return Y.call(t) + }(t) + } + + function Ot(t) { + return Wt(t) && St(t) == l + } + + function Tt(t, e, n, r, o) { + return t === e || (null == t || null == e || !Wt(t) && !Wt(e) ? t != t && e != e : function (t, e, n, r, o, c) { + var f = Ft(t), p = Ft(e), b = f ? a : Mt(t), v = p ? a : Mt(e), A = (b = b == l ? y : b) == y, + w = (v = v == l ? y : v) == y, q = b == v; + if (q && Ht(t)) { + if (!Ht(e)) return !1; + f = !0, A = !1 + } + if (q && !A) return c || (c = new _t), f || Zt(t) ? jt(t, e, n, r, o, c) : function (t, e, n, r, o, l, a) { + switch (n) { + case _: + if (t.byteLength != e.byteLength || t.byteOffset != e.byteOffset) return !1; + t = t.buffer, e = e.buffer; + case k: + return !(t.byteLength != e.byteLength || !l(new rt(t), new rt(e))); + case u: + case h: + case m: + return Pt(+t, +e); + case d: + return t.name == e.name && t.message == e.message; + case x: + case E: + return t == e + ""; + case g: + var c = z; + case N: + var f = r & i; + if (c || (c = F), t.size != e.size && !f) return !1; + var p = a.get(t); + if (p) return p == e; + r |= s, a.set(t, e); + var b = jt(c(t), c(e), r, o, l, a); + return a.delete(t), b; + case"[object Symbol]": + if (Nt) return Nt.call(t) == Nt.call(e) + } + return !1 + }(t, e, b, n, r, o, c); + if (!(n & i)) { + var L = A && Q.call(t, "__wrapped__"), S = w && Q.call(e, "__wrapped__"); + if (L || S) { + var O = L ? t.value() : t, T = S ? e.value() : e; + return c || (c = new _t), o(O, T, n, r, c) + } + } + return !!q && (c || (c = new _t), function (t, e, n, r, s, o) { + var l = n & i, a = Ct(t), c = a.length; + if (c != Ct(e).length && !l) return !1; + for (var u = c; u--;) { + var h = a[u]; + if (!(l ? h in e : Q.call(e, h))) return !1 + } + var d = o.get(t); + if (d && o.get(e)) return d == e; + var f = !0; + o.set(t, e), o.set(e, t); + for (var p = l; ++u < c;) { + var g = t[h = a[u]], m = e[h]; + if (r) var b = l ? r(m, g, h, e, t, o) : r(g, m, h, t, e, o); + if (!(void 0 === b ? g === m || s(g, m, n, r, o) : b)) { + f = !1; + break + } + p || (p = "constructor" == h) + } + if (f && !p) { + var y = t.constructor, v = e.constructor; + y == v || !("constructor" in t) || !("constructor" in e) || "function" == typeof y && y instanceof y && "function" == typeof v && v instanceof v || (f = !1) + } + return o.delete(t), o.delete(e), f + }(t, e, n, r, o, c)) + }(t, e, n, r, Tt, o)) + } + + function jt(t, e, n, r, o, l) { + var a = n & i, c = t.length, u = e.length; + if (c != u && !(a && u > c)) return !1; + var h = l.get(t); + if (h && l.get(e)) return h == e; + var d = -1, f = !0, p = n & s ? new kt : void 0; + for (l.set(t, e), l.set(e, t); ++d < c;) { + var g = t[d], m = e[d]; + if (r) var b = a ? r(m, g, d, e, t, l) : r(g, m, d, t, e, l); + if (void 0 !== b) { + if (b) continue; + f = !1; + break + } + if (p) { + if (!P(e, (function (t, e) { + if (i = e, !p.has(i) && (g === t || o(g, t, n, r, l))) return p.push(e); + var i + }))) { + f = !1; + break + } + } else if (g !== m && !o(g, m, n, r, l)) { + f = !1; + break + } + } + return l.delete(t), l.delete(e), f + } + + function Ct(t) { + return function (t, e, n) { + var r = e(t); + return Ft(t) ? r : function (t, e) { + for (var n = -1, r = e.length, i = t.length; ++n < r;) t[i + n] = e[n]; + return t + }(r, n(t)) + }(t, Gt, Bt) + } + + function Rt(t, e) { + var n, r, i = t.__data__; + return ("string" == (r = typeof (n = e)) || "number" == r || "symbol" == r || "boolean" == r ? "__proto__" !== n : null === n) ? i["string" == typeof e ? "string" : "hash"] : i.map + } + + function It(t, e) { + var n = function (t, e) { + return null == t ? void 0 : t[e] + }(t, e); + return function (t) { + return !(!Kt(t) || function (t) { + return !!J && J in t + }(t)) && ($t(t) ? tt : L).test(Dt(t)) + }(n) ? n : void 0 + } + + Et.prototype.clear = function () { + this.__data__ = gt ? gt(null) : {}, this.size = 0 + }, Et.prototype.delete = function (t) { + var e = this.has(t) && delete this.__data__[t]; + return this.size -= e ? 1 : 0, e + }, Et.prototype.get = function (t) { + var e = this.__data__; + if (gt) { + var n = e[t]; + return n === r ? void 0 : n + } + return Q.call(e, t) ? e[t] : void 0 + }, Et.prototype.has = function (t) { + var e = this.__data__; + return gt ? void 0 !== e[t] : Q.call(e, t) + }, Et.prototype.set = function (t, e) { + var n = this.__data__; + return this.size += this.has(t) ? 0 : 1, n[t] = gt && void 0 === e ? r : e, this + }, wt.prototype.clear = function () { + this.__data__ = [], this.size = 0 + }, wt.prototype.delete = function (t) { + var e = this.__data__, n = Lt(e, t); + return !(n < 0 || (n == e.length - 1 ? e.pop() : st.call(e, n, 1), --this.size, 0)) + }, wt.prototype.get = function (t) { + var e = this.__data__, n = Lt(e, t); + return n < 0 ? void 0 : e[n][1] + }, wt.prototype.has = function (t) { + return Lt(this.__data__, t) > -1 + }, wt.prototype.set = function (t, e) { + var n = this.__data__, r = Lt(n, t); + return r < 0 ? (++this.size, n.push([t, e])) : n[r][1] = e, this + }, qt.prototype.clear = function () { + this.size = 0, this.__data__ = {hash: new Et, map: new (ht || wt), string: new Et} + }, qt.prototype.delete = function (t) { + var e = Rt(this, t).delete(t); + return this.size -= e ? 1 : 0, e + }, qt.prototype.get = function (t) { + return Rt(this, t).get(t) + }, qt.prototype.has = function (t) { + return Rt(this, t).has(t) + }, qt.prototype.set = function (t, e) { + var n = Rt(this, t), r = n.size; + return n.set(t, e), this.size += n.size == r ? 0 : 1, this + }, kt.prototype.add = kt.prototype.push = function (t) { + return this.__data__.set(t, r), this + }, kt.prototype.has = function (t) { + return this.__data__.has(t) + }, _t.prototype.clear = function () { + this.__data__ = new wt, this.size = 0 + }, _t.prototype.delete = function (t) { + var e = this.__data__, n = e.delete(t); + return this.size = e.size, n + }, _t.prototype.get = function (t) { + return this.__data__.get(t) + }, _t.prototype.has = function (t) { + return this.__data__.has(t) + }, _t.prototype.set = function (t, e) { + var n = this.__data__; + if (n instanceof wt) { + var r = n.__data__; + if (!ht || r.length < 199) return r.push([t, e]), this.size = ++n.size, this; + n = this.__data__ = new qt(r) + } + return n.set(t, e), this.size = n.size, this + }; + var Bt = lt ? function (t) { + return null == t ? [] : (t = Object(t), function (e, n) { + for (var r = -1, i = null == e ? 0 : e.length, s = 0, o = []; ++r < i;) { + var l = e[r]; + a = l, it.call(t, a) && (o[s++] = l) + } + var a; + return o + }(lt(t))) + } : function () { + return [] + }, Mt = St; + + function Ut(t, e) { + return !!(e = null == e ? o : e) && ("number" == typeof t || S.test(t)) && t > -1 && t % 1 == 0 && t < e + } + + function Dt(t) { + if (null != t) { + try { + return X.call(t) + } catch (t) { + } + try { + return t + "" + } catch (t) { + } + } + return "" + } + + function Pt(t, e) { + return t === e || t != t && e != e + } + + (ut && Mt(new ut(new ArrayBuffer(1))) != _ || ht && Mt(new ht) != g || dt && Mt(dt.resolve()) != v || ft && Mt(new ft) != N || pt && Mt(new pt) != q) && (Mt = function (t) { + var e = St(t), n = e == y ? t.constructor : void 0, r = n ? Dt(n) : ""; + if (r) switch (r) { + case mt: + return _; + case bt: + return g; + case yt: + return v; + case vt: + return N; + case At: + return q + } + return e + }); + var zt = Ot(function () { + return arguments + }()) ? Ot : function (t) { + return Wt(t) && Q.call(t, "callee") && !it.call(t, "callee") + }, Ft = Array.isArray, Ht = at || function () { + return !1 + }; + + function $t(t) { + if (!Kt(t)) return !1; + var e = St(t); + return e == f || e == p || e == c || e == A + } + + function Vt(t) { + return "number" == typeof t && t > -1 && t % 1 == 0 && t <= o + } + + function Kt(t) { + var e = typeof t; + return null != t && ("object" == e || "function" == e) + } + + function Wt(t) { + return null != t && "object" == typeof t + } + + var Zt = D ? function (t) { + return function (e) { + return t(e) + } + }(D) : function (t) { + return Wt(t) && Vt(t.length) && !!O[St(t)] + }; + + function Gt(t) { + return null != (e = t) && Vt(e.length) && !$t(e) ? function (t, e) { + var n = Ft(t), r = !n && zt(t), i = !n && !r && Ht(t), s = !n && !r && !i && Zt(t), + o = n || r || i || s, l = o ? function (t, e) { + for (var n = -1, r = Array(t); ++n < t;) r[n] = e(n); + return r + }(t.length, String) : [], a = l.length; + for (var c in t) !e && !Q.call(t, c) || o && ("length" == c || i && ("offset" == c || "parent" == c) || s && ("buffer" == c || "byteLength" == c || "byteOffset" == c) || Ut(c, a)) || l.push(c); + return l + }(t) : function (t) { + if (n = (e = t) && e.constructor, e !== ("function" == typeof n && n.prototype || Z)) return ct(t); + var e, n, r = []; + for (var i in Object(t)) Q.call(t, i) && "constructor" != i && r.push(i); + return r + }(t); + var e + } + + t.exports = function (t, e) { + return Tt(t, e) + } + }, 1270: function (t, e, n) { + "use strict"; + Object.defineProperty(e, "__esModule", {value: !0}); + const r = n(9629), i = n(4162); + var s; + !function (t) { + t.compose = function (t = {}, e = {}, n = !1) { + "object" != typeof t && (t = {}), "object" != typeof e && (e = {}); + let i = r(e); + n || (i = Object.keys(i).reduce(((t, e) => (null != i[e] && (t[e] = i[e]), t)), {})); + for (const n in t) void 0 !== t[n] && void 0 === e[n] && (i[n] = t[n]); + return Object.keys(i).length > 0 ? i : void 0 + }, t.diff = function (t = {}, e = {}) { + "object" != typeof t && (t = {}), "object" != typeof e && (e = {}); + const n = Object.keys(t).concat(Object.keys(e)).reduce(((n, r) => (i(t[r], e[r]) || (n[r] = void 0 === e[r] ? null : e[r]), n)), {}); + return Object.keys(n).length > 0 ? n : void 0 + }, t.invert = function (t = {}, e = {}) { + t = t || {}; + const n = Object.keys(e).reduce(((n, r) => (e[r] !== t[r] && void 0 !== t[r] && (n[r] = e[r]), n)), {}); + return Object.keys(t).reduce(((n, r) => (t[r] !== e[r] && void 0 === e[r] && (n[r] = null), n)), n) + }, t.transform = function (t, e, n = !1) { + if ("object" != typeof t) return e; + if ("object" != typeof e) return; + if (!n) return e; + const r = Object.keys(e).reduce(((n, r) => (void 0 === t[r] && (n[r] = e[r]), n)), {}); + return Object.keys(r).length > 0 ? r : void 0 + } + }(s || (s = {})), e.default = s + }, 5232: function (t, e, n) { + "use strict"; + Object.defineProperty(e, "__esModule", {value: !0}), e.AttributeMap = e.OpIterator = e.Op = void 0; + const r = n(5090), i = n(9629), s = n(4162), o = n(1270); + e.AttributeMap = o.default; + const l = n(4123); + e.Op = l.default; + const a = n(7033); + e.OpIterator = a.default; + const c = String.fromCharCode(0), u = (t, e) => { + if ("object" != typeof t || null === t) throw new Error("cannot retain a " + typeof t); + if ("object" != typeof e || null === e) throw new Error("cannot retain a " + typeof e); + const n = Object.keys(t)[0]; + if (!n || n !== Object.keys(e)[0]) throw new Error(`embed types not matched: ${n} != ${Object.keys(e)[0]}`); + return [n, t[n], e[n]] + }; + + class h { + constructor(t) { + Array.isArray(t) ? this.ops = t : null != t && Array.isArray(t.ops) ? this.ops = t.ops : this.ops = [] + } + + static registerEmbed(t, e) { + this.handlers[t] = e + } + + static unregisterEmbed(t) { + delete this.handlers[t] + } + + static getHandler(t) { + const e = this.handlers[t]; + if (!e) throw new Error(`no handlers for embed type "${t}"`); + return e + } + + insert(t, e) { + const n = {}; + return "string" == typeof t && 0 === t.length ? this : (n.insert = t, null != e && "object" == typeof e && Object.keys(e).length > 0 && (n.attributes = e), this.push(n)) + } + + delete(t) { + return t <= 0 ? this : this.push({delete: t}) + } + + retain(t, e) { + if ("number" == typeof t && t <= 0) return this; + const n = {retain: t}; + return null != e && "object" == typeof e && Object.keys(e).length > 0 && (n.attributes = e), this.push(n) + } + + push(t) { + let e = this.ops.length, n = this.ops[e - 1]; + if (t = i(t), "object" == typeof n) { + if ("number" == typeof t.delete && "number" == typeof n.delete) return this.ops[e - 1] = {delete: n.delete + t.delete}, this; + if ("number" == typeof n.delete && null != t.insert && (e -= 1, n = this.ops[e - 1], "object" != typeof n)) return this.ops.unshift(t), this; + if (s(t.attributes, n.attributes)) { + if ("string" == typeof t.insert && "string" == typeof n.insert) return this.ops[e - 1] = {insert: n.insert + t.insert}, "object" == typeof t.attributes && (this.ops[e - 1].attributes = t.attributes), this; + if ("number" == typeof t.retain && "number" == typeof n.retain) return this.ops[e - 1] = {retain: n.retain + t.retain}, "object" == typeof t.attributes && (this.ops[e - 1].attributes = t.attributes), this + } + } + return e === this.ops.length ? this.ops.push(t) : this.ops.splice(e, 0, t), this + } + + chop() { + const t = this.ops[this.ops.length - 1]; + return t && "number" == typeof t.retain && !t.attributes && this.ops.pop(), this + } + + filter(t) { + return this.ops.filter(t) + } + + forEach(t) { + this.ops.forEach(t) + } + + map(t) { + return this.ops.map(t) + } + + partition(t) { + const e = [], n = []; + return this.forEach((r => { + (t(r) ? e : n).push(r) + })), [e, n] + } + + reduce(t, e) { + return this.ops.reduce(t, e) + } + + changeLength() { + return this.reduce(((t, e) => e.insert ? t + l.default.length(e) : e.delete ? t - e.delete : t), 0) + } + + length() { + return this.reduce(((t, e) => t + l.default.length(e)), 0) + } + + slice(t = 0, e = 1 / 0) { + const n = [], r = new a.default(this.ops); + let i = 0; + for (; i < e && r.hasNext();) { + let s; + i < t ? s = r.next(t - i) : (s = r.next(e - i), n.push(s)), i += l.default.length(s) + } + return new h(n) + } + + compose(t) { + const e = new a.default(this.ops), n = new a.default(t.ops), r = [], i = n.peek(); + if (null != i && "number" == typeof i.retain && null == i.attributes) { + let t = i.retain; + for (; "insert" === e.peekType() && e.peekLength() <= t;) t -= e.peekLength(), r.push(e.next()); + i.retain - t > 0 && n.next(i.retain - t) + } + const l = new h(r); + for (; e.hasNext() || n.hasNext();) if ("insert" === n.peekType()) l.push(n.next()); else if ("delete" === e.peekType()) l.push(e.next()); else { + const t = Math.min(e.peekLength(), n.peekLength()), r = e.next(t), i = n.next(t); + if (i.retain) { + const a = {}; + if ("number" == typeof r.retain) a.retain = "number" == typeof i.retain ? t : i.retain; else if ("number" == typeof i.retain) null == r.retain ? a.insert = r.insert : a.retain = r.retain; else { + const t = null == r.retain ? "insert" : "retain", [e, n, s] = u(r[t], i.retain), + o = h.getHandler(e); + a[t] = {[e]: o.compose(n, s, "retain" === t)} + } + const c = o.default.compose(r.attributes, i.attributes, "number" == typeof r.retain); + if (c && (a.attributes = c), l.push(a), !n.hasNext() && s(l.ops[l.ops.length - 1], a)) { + const t = new h(e.rest()); + return l.concat(t).chop() + } + } else "number" == typeof i.delete && ("number" == typeof r.retain || "object" == typeof r.retain && null !== r.retain) && l.push(i) + } + return l.chop() + } + + concat(t) { + const e = new h(this.ops.slice()); + return t.ops.length > 0 && (e.push(t.ops[0]), e.ops = e.ops.concat(t.ops.slice(1))), e + } + + diff(t, e) { + if (this.ops === t.ops) return new h; + const n = [this, t].map((e => e.map((n => { + if (null != n.insert) return "string" == typeof n.insert ? n.insert : c; + throw new Error("diff() called " + (e === t ? "on" : "with") + " non-document") + })).join(""))), i = new h, l = r(n[0], n[1], e, !0), u = new a.default(this.ops), + d = new a.default(t.ops); + return l.forEach((t => { + let e = t[1].length; + for (; e > 0;) { + let n = 0; + switch (t[0]) { + case r.INSERT: + n = Math.min(d.peekLength(), e), i.push(d.next(n)); + break; + case r.DELETE: + n = Math.min(e, u.peekLength()), u.next(n), i.delete(n); + break; + case r.EQUAL: + n = Math.min(u.peekLength(), d.peekLength(), e); + const t = u.next(n), l = d.next(n); + s(t.insert, l.insert) ? i.retain(n, o.default.diff(t.attributes, l.attributes)) : i.push(l).delete(n) + } + e -= n + } + })), i.chop() + } + + eachLine(t, e = "\n") { + const n = new a.default(this.ops); + let r = new h, i = 0; + for (; n.hasNext();) { + if ("insert" !== n.peekType()) return; + const s = n.peek(), o = l.default.length(s) - n.peekLength(), + a = "string" == typeof s.insert ? s.insert.indexOf(e, o) - o : -1; + if (a < 0) r.push(n.next()); else if (a > 0) r.push(n.next(a)); else { + if (!1 === t(r, n.next(1).attributes || {}, i)) return; + i += 1, r = new h + } + } + r.length() > 0 && t(r, {}, i) + } + + invert(t) { + const e = new h; + return this.reduce(((n, r) => { + if (r.insert) e.delete(l.default.length(r)); else { + if ("number" == typeof r.retain && null == r.attributes) return e.retain(r.retain), n + r.retain; + if (r.delete || "number" == typeof r.retain) { + const i = r.delete || r.retain; + return t.slice(n, n + i).forEach((t => { + r.delete ? e.push(t) : r.retain && r.attributes && e.retain(l.default.length(t), o.default.invert(r.attributes, t.attributes)) + })), n + i + } + if ("object" == typeof r.retain && null !== r.retain) { + const i = t.slice(n, n + 1), + s = new a.default(i.ops).next(), [l, c, d] = u(r.retain, s.insert), + f = h.getHandler(l); + return e.retain({[l]: f.invert(c, d)}, o.default.invert(r.attributes, s.attributes)), n + 1 + } + } + return n + }), 0), e.chop() + } + + transform(t, e = !1) { + if (e = !!e, "number" == typeof t) return this.transformPosition(t, e); + const n = t, r = new a.default(this.ops), i = new a.default(n.ops), s = new h; + for (; r.hasNext() || i.hasNext();) if ("insert" !== r.peekType() || !e && "insert" === i.peekType()) if ("insert" === i.peekType()) s.push(i.next()); else { + const t = Math.min(r.peekLength(), i.peekLength()), n = r.next(t), l = i.next(t); + if (n.delete) continue; + if (l.delete) s.push(l); else { + const r = n.retain, i = l.retain; + let a = "object" == typeof i && null !== i ? i : t; + if ("object" == typeof r && null !== r && "object" == typeof i && null !== i) { + const t = Object.keys(r)[0]; + if (t === Object.keys(i)[0]) { + const n = h.getHandler(t); + n && (a = {[t]: n.transform(r[t], i[t], e)}) + } + } + s.retain(a, o.default.transform(n.attributes, l.attributes, e)) + } + } else s.retain(l.default.length(r.next())); + return s.chop() + } + + transformPosition(t, e = !1) { + e = !!e; + const n = new a.default(this.ops); + let r = 0; + for (; n.hasNext() && r <= t;) { + const i = n.peekLength(), s = n.peekType(); + n.next(), "delete" !== s ? ("insert" === s && (r < t || !e) && (t += i), r += i) : t -= Math.min(i, t - r) + } + return t + } + } + + h.Op = l.default, h.OpIterator = a.default, h.AttributeMap = o.default, h.handlers = {}, e.default = h, t.exports = h, t.exports.default = h + }, 4123: function (t, e) { + "use strict"; + var n; + Object.defineProperty(e, "__esModule", {value: !0}), function (t) { + t.length = function (t) { + return "number" == typeof t.delete ? t.delete : "number" == typeof t.retain ? t.retain : "object" == typeof t.retain && null !== t.retain ? 1 : "string" == typeof t.insert ? t.insert.length : 1 + } + }(n || (n = {})), e.default = n + }, 7033: function (t, e, n) { + "use strict"; + Object.defineProperty(e, "__esModule", {value: !0}); + const r = n(4123); + e.default = class { + constructor(t) { + this.ops = t, this.index = 0, this.offset = 0 + } + + hasNext() { + return this.peekLength() < 1 / 0 + } + + next(t) { + t || (t = 1 / 0); + const e = this.ops[this.index]; + if (e) { + const n = this.offset, i = r.default.length(e); + if (t >= i - n ? (t = i - n, this.index += 1, this.offset = 0) : this.offset += t, "number" == typeof e.delete) return {delete: t}; + { + const r = {}; + return e.attributes && (r.attributes = e.attributes), "number" == typeof e.retain ? r.retain = t : "object" == typeof e.retain && null !== e.retain ? r.retain = e.retain : "string" == typeof e.insert ? r.insert = e.insert.substr(n, t) : r.insert = e.insert, r + } + } + return {retain: 1 / 0} + } + + peek() { + return this.ops[this.index] + } + + peekLength() { + return this.ops[this.index] ? r.default.length(this.ops[this.index]) - this.offset : 1 / 0 + } + + peekType() { + const t = this.ops[this.index]; + return t ? "number" == typeof t.delete ? "delete" : "number" == typeof t.retain || "object" == typeof t.retain && null !== t.retain ? "retain" : "insert" : "retain" + } + + rest() { + if (this.hasNext()) { + if (0 === this.offset) return this.ops.slice(this.index); + { + const t = this.offset, e = this.index, n = this.next(), r = this.ops.slice(this.index); + return this.offset = t, this.index = e, [n].concat(r) + } + } + return [] + } + } + }, 8820: function (t, e, n) { + "use strict"; + n.d(e, { + A: function () { + return l + } + }); + var r = n(8138), i = function (t, e) { + for (var n = t.length; n--;) if ((0, r.A)(t[n][0], e)) return n; + return -1 + }, s = Array.prototype.splice; + + function o(t) { + var e = -1, n = null == t ? 0 : t.length; + for (this.clear(); ++e < n;) { + var r = t[e]; + this.set(r[0], r[1]) + } + } + + o.prototype.clear = function () { + this.__data__ = [], this.size = 0 + }, o.prototype.delete = function (t) { + var e = this.__data__, n = i(e, t); + return !(n < 0 || (n == e.length - 1 ? e.pop() : s.call(e, n, 1), --this.size, 0)) + }, o.prototype.get = function (t) { + var e = this.__data__, n = i(e, t); + return n < 0 ? void 0 : e[n][1] + }, o.prototype.has = function (t) { + return i(this.__data__, t) > -1 + }, o.prototype.set = function (t, e) { + var n = this.__data__, r = i(n, t); + return r < 0 ? (++this.size, n.push([t, e])) : n[r][1] = e, this + }; + var l = o + }, 2461: function (t, e, n) { + "use strict"; + var r = n(2281), i = n(5507), s = (0, r.A)(i.A, "Map"); + e.A = s + }, 3558: function (t, e, n) { + "use strict"; + n.d(e, { + A: function () { + return d + } + }); + var r = (0, n(2281).A)(Object, "create"), i = Object.prototype.hasOwnProperty, + s = Object.prototype.hasOwnProperty; + + function o(t) { + var e = -1, n = null == t ? 0 : t.length; + for (this.clear(); ++e < n;) { + var r = t[e]; + this.set(r[0], r[1]) + } + } + + o.prototype.clear = function () { + this.__data__ = r ? r(null) : {}, this.size = 0 + }, o.prototype.delete = function (t) { + var e = this.has(t) && delete this.__data__[t]; + return this.size -= e ? 1 : 0, e + }, o.prototype.get = function (t) { + var e = this.__data__; + if (r) { + var n = e[t]; + return "__lodash_hash_undefined__" === n ? void 0 : n + } + return i.call(e, t) ? e[t] : void 0 + }, o.prototype.has = function (t) { + var e = this.__data__; + return r ? void 0 !== e[t] : s.call(e, t) + }, o.prototype.set = function (t, e) { + var n = this.__data__; + return this.size += this.has(t) ? 0 : 1, n[t] = r && void 0 === e ? "__lodash_hash_undefined__" : e, this + }; + var l = o, a = n(8820), c = n(2461), u = function (t, e) { + var n, r, i = t.__data__; + return ("string" == (r = typeof (n = e)) || "number" == r || "symbol" == r || "boolean" == r ? "__proto__" !== n : null === n) ? i["string" == typeof e ? "string" : "hash"] : i.map + }; + + function h(t) { + var e = -1, n = null == t ? 0 : t.length; + for (this.clear(); ++e < n;) { + var r = t[e]; + this.set(r[0], r[1]) + } + } + + h.prototype.clear = function () { + this.size = 0, this.__data__ = {hash: new l, map: new (c.A || a.A), string: new l} + }, h.prototype.delete = function (t) { + var e = u(this, t).delete(t); + return this.size -= e ? 1 : 0, e + }, h.prototype.get = function (t) { + return u(this, t).get(t) + }, h.prototype.has = function (t) { + return u(this, t).has(t) + }, h.prototype.set = function (t, e) { + var n = u(this, t), r = n.size; + return n.set(t, e), this.size += n.size == r ? 0 : 1, this + }; + var d = h + }, 2673: function (t, e, n) { + "use strict"; + n.d(e, { + A: function () { + return l + } + }); + var r = n(8820), i = n(2461), s = n(3558); + + function o(t) { + var e = this.__data__ = new r.A(t); + this.size = e.size + } + + o.prototype.clear = function () { + this.__data__ = new r.A, this.size = 0 + }, o.prototype.delete = function (t) { + var e = this.__data__, n = e.delete(t); + return this.size = e.size, n + }, o.prototype.get = function (t) { + return this.__data__.get(t) + }, o.prototype.has = function (t) { + return this.__data__.has(t) + }, o.prototype.set = function (t, e) { + var n = this.__data__; + if (n instanceof r.A) { + var o = n.__data__; + if (!i.A || o.length < 199) return o.push([t, e]), this.size = ++n.size, this; + n = this.__data__ = new s.A(o) + } + return n.set(t, e), this.size = n.size, this + }; + var l = o + }, 439: function (t, e, n) { + "use strict"; + var r = n(5507).A.Symbol; + e.A = r + }, 7218: function (t, e, n) { + "use strict"; + var r = n(5507).A.Uint8Array; + e.A = r + }, 6753: function (t, e, n) { + "use strict"; + n.d(e, { + A: function () { + return c + } + }); + var r = n(8412), i = n(723), s = n(776), o = n(3767), l = n(5755), a = Object.prototype.hasOwnProperty, + c = function (t, e) { + var n = (0, i.A)(t), c = !n && (0, r.A)(t), u = !n && !c && (0, s.A)(t), + h = !n && !c && !u && (0, l.A)(t), d = n || c || u || h, f = d ? function (t, e) { + for (var n = -1, r = Array(t); ++n < t;) r[n] = e(n); + return r + }(t.length, String) : [], p = f.length; + for (var g in t) !e && !a.call(t, g) || d && ("length" == g || u && ("offset" == g || "parent" == g) || h && ("buffer" == g || "byteLength" == g || "byteOffset" == g) || (0, o.A)(g, p)) || f.push(g); + return f + } + }, 802: function (t, e) { + "use strict"; + e.A = function (t, e) { + for (var n = -1, r = e.length, i = t.length; ++n < r;) t[i + n] = e[n]; + return t + } + }, 6437: function (t, e, n) { + "use strict"; + var r = n(6770), i = n(8138), s = Object.prototype.hasOwnProperty; + e.A = function (t, e, n) { + var o = t[e]; + s.call(t, e) && (0, i.A)(o, n) && (void 0 !== n || e in t) || (0, r.A)(t, e, n) + } + }, 6770: function (t, e, n) { + "use strict"; + var r = n(7889); + e.A = function (t, e, n) { + "__proto__" == e && r.A ? (0, r.A)(t, e, { + configurable: !0, + enumerable: !0, + value: n, + writable: !0 + }) : t[e] = n + } + }, 1381: function (t, e, n) { + "use strict"; + var r = n(802), i = n(723); + e.A = function (t, e, n) { + var s = e(t); + return (0, i.A)(t) ? s : (0, r.A)(s, n(t)) + } + }, 2159: function (t, e, n) { + "use strict"; + n.d(e, { + A: function () { + return u + } + }); + var r = n(439), i = Object.prototype, s = i.hasOwnProperty, o = i.toString, + l = r.A ? r.A.toStringTag : void 0, a = Object.prototype.toString, + c = r.A ? r.A.toStringTag : void 0, u = function (t) { + return null == t ? void 0 === t ? "[object Undefined]" : "[object Null]" : c && c in Object(t) ? function (t) { + var e = s.call(t, l), n = t[l]; + try { + t[l] = void 0; + var r = !0 + } catch (t) { + } + var i = o.call(t); + return r && (e ? t[l] = n : delete t[l]), i + }(t) : function (t) { + return a.call(t) + }(t) + } + }, 5771: function (t, e) { + "use strict"; + e.A = function (t) { + return function (e) { + return t(e) + } + } + }, 2899: function (t, e, n) { + "use strict"; + var r = n(7218); + e.A = function (t) { + var e = new t.constructor(t.byteLength); + return new r.A(e).set(new r.A(t)), e + } + }, 3812: function (t, e, n) { + "use strict"; + var r = n(5507), i = "object" == typeof exports && exports && !exports.nodeType && exports, + s = i && "object" == typeof module && module && !module.nodeType && module, + o = s && s.exports === i ? r.A.Buffer : void 0, l = o ? o.allocUnsafe : void 0; + e.A = function (t, e) { + if (e) return t.slice(); + var n = t.length, r = l ? l(n) : new t.constructor(n); + return t.copy(r), r + } + }, 1827: function (t, e, n) { + "use strict"; + var r = n(2899); + e.A = function (t, e) { + var n = e ? (0, r.A)(t.buffer) : t.buffer; + return new t.constructor(n, t.byteOffset, t.length) + } + }, 4405: function (t, e) { + "use strict"; + e.A = function (t, e) { + var n = -1, r = t.length; + for (e || (e = Array(r)); ++n < r;) e[n] = t[n]; + return e + } + }, 9601: function (t, e, n) { + "use strict"; + var r = n(6437), i = n(6770); + e.A = function (t, e, n, s) { + var o = !n; + n || (n = {}); + for (var l = -1, a = e.length; ++l < a;) { + var c = e[l], u = s ? s(n[c], t[c], c, n, t) : void 0; + void 0 === u && (u = t[c]), o ? (0, i.A)(n, c, u) : (0, r.A)(n, c, u) + } + return n + } + }, 7889: function (t, e, n) { + "use strict"; + var r = n(2281), i = function () { + try { + var t = (0, r.A)(Object, "defineProperty"); + return t({}, "", {}), t + } catch (t) { + } + }(); + e.A = i + }, 9646: function (t, e) { + "use strict"; + var n = "object" == typeof global && global && global.Object === Object && global; + e.A = n + }, 2816: function (t, e, n) { + "use strict"; + var r = n(1381), i = n(9844), s = n(3169); + e.A = function (t) { + return (0, r.A)(t, s.A, i.A) + } + }, 2281: function (t, e, n) { + "use strict"; + n.d(e, { + A: function () { + return m + } + }); + var r, i = n(7572), s = n(5507).A["__core-js_shared__"], + o = (r = /[^.]+$/.exec(s && s.keys && s.keys.IE_PROTO || "")) ? "Symbol(src)_1." + r : "", + l = n(659), a = n(1543), c = /^\[object .+?Constructor\]$/, u = Function.prototype, + h = Object.prototype, d = u.toString, f = h.hasOwnProperty, + p = RegExp("^" + d.call(f).replace(/[\\^$.*+?()[\]{}|]/g, "\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + "$"), + g = function (t) { + return !(!(0, l.A)(t) || (e = t, o && o in e)) && ((0, i.A)(t) ? p : c).test((0, a.A)(t)); + var e + }, m = function (t, e) { + var n = function (t, e) { + return null == t ? void 0 : t[e] + }(t, e); + return g(n) ? n : void 0 + } + }, 8769: function (t, e, n) { + "use strict"; + var r = (0, n(2217).A)(Object.getPrototypeOf, Object); + e.A = r + }, 9844: function (t, e, n) { + "use strict"; + n.d(e, { + A: function () { + return o + } + }); + var r = n(6935), i = Object.prototype.propertyIsEnumerable, s = Object.getOwnPropertySymbols, + o = s ? function (t) { + return null == t ? [] : (t = Object(t), function (t, e) { + for (var n = -1, r = null == t ? 0 : t.length, i = 0, s = []; ++n < r;) { + var o = t[n]; + e(o, n, t) && (s[i++] = o) + } + return s + }(s(t), (function (e) { + return i.call(t, e) + }))) + } : r.A + }, 7995: function (t, e, n) { + "use strict"; + n.d(e, { + A: function () { + return E + } + }); + var r = n(2281), i = n(5507), s = (0, r.A)(i.A, "DataView"), o = n(2461), l = (0, r.A)(i.A, "Promise"), + a = (0, r.A)(i.A, "Set"), c = (0, r.A)(i.A, "WeakMap"), u = n(2159), h = n(1543), + d = "[object Map]", f = "[object Promise]", p = "[object Set]", g = "[object WeakMap]", + m = "[object DataView]", b = (0, h.A)(s), y = (0, h.A)(o.A), v = (0, h.A)(l), A = (0, h.A)(a), + x = (0, h.A)(c), N = u.A; + (s && N(new s(new ArrayBuffer(1))) != m || o.A && N(new o.A) != d || l && N(l.resolve()) != f || a && N(new a) != p || c && N(new c) != g) && (N = function (t) { + var e = (0, u.A)(t), n = "[object Object]" == e ? t.constructor : void 0, r = n ? (0, h.A)(n) : ""; + if (r) switch (r) { + case b: + return m; + case y: + return d; + case v: + return f; + case A: + return p; + case x: + return g + } + return e + }); + var E = N + }, 1683: function (t, e, n) { + "use strict"; + n.d(e, { + A: function () { + return a + } + }); + var r = n(659), i = Object.create, s = function () { + function t() { + } + + return function (e) { + if (!(0, r.A)(e)) return {}; + if (i) return i(e); + t.prototype = e; + var n = new t; + return t.prototype = void 0, n + } + }(), o = n(8769), l = n(501), a = function (t) { + return "function" != typeof t.constructor || (0, l.A)(t) ? {} : s((0, o.A)(t)) + } + }, 3767: function (t, e) { + "use strict"; + var n = /^(?:0|[1-9]\d*)$/; + e.A = function (t, e) { + var r = typeof t; + return !!(e = null == e ? 9007199254740991 : e) && ("number" == r || "symbol" != r && n.test(t)) && t > -1 && t % 1 == 0 && t < e + } + }, 501: function (t, e) { + "use strict"; + var n = Object.prototype; + e.A = function (t) { + var e = t && t.constructor; + return t === ("function" == typeof e && e.prototype || n) + } + }, 8795: function (t, e, n) { + "use strict"; + var r = n(9646), i = "object" == typeof exports && exports && !exports.nodeType && exports, + s = i && "object" == typeof module && module && !module.nodeType && module, + o = s && s.exports === i && r.A.process, l = function () { + try { + return s && s.require && s.require("util").types || o && o.binding && o.binding("util") + } catch (t) { + } + }(); + e.A = l + }, 2217: function (t, e) { + "use strict"; + e.A = function (t, e) { + return function (n) { + return t(e(n)) + } + } + }, 5507: function (t, e, n) { + "use strict"; + var r = n(9646), i = "object" == typeof self && self && self.Object === Object && self, + s = r.A || i || Function("return this")(); + e.A = s + }, 1543: function (t, e) { + "use strict"; + var n = Function.prototype.toString; + e.A = function (t) { + if (null != t) { + try { + return n.call(t) + } catch (t) { + } + try { + return t + "" + } catch (t) { + } + } + return "" + } + }, 3707: function (t, e, n) { + "use strict"; + n.d(e, { + A: function () { + return H + } + }); + var r = n(2673), i = n(6437), s = n(9601), o = n(3169), l = n(2624), a = n(3812), c = n(4405), + u = n(9844), h = n(802), d = n(8769), f = n(6935), p = Object.getOwnPropertySymbols ? function (t) { + for (var e = []; t;) (0, h.A)(e, (0, u.A)(t)), t = (0, d.A)(t); + return e + } : f.A, g = n(2816), m = n(1381), b = function (t) { + return (0, m.A)(t, l.A, p) + }, y = n(7995), v = Object.prototype.hasOwnProperty, A = n(2899), x = /\w*$/, N = n(439), + E = N.A ? N.A.prototype : void 0, w = E ? E.valueOf : void 0, q = n(1827), k = function (t, e, n) { + var r, i, s, o = t.constructor; + switch (e) { + case"[object ArrayBuffer]": + return (0, A.A)(t); + case"[object Boolean]": + case"[object Date]": + return new o(+t); + case"[object DataView]": + return function (t, e) { + var n = e ? (0, A.A)(t.buffer) : t.buffer; + return new t.constructor(n, t.byteOffset, t.byteLength) + }(t, n); + case"[object Float32Array]": + case"[object Float64Array]": + case"[object Int8Array]": + case"[object Int16Array]": + case"[object Int32Array]": + case"[object Uint8Array]": + case"[object Uint8ClampedArray]": + case"[object Uint16Array]": + case"[object Uint32Array]": + return (0, q.A)(t, n); + case"[object Map]": + case"[object Set]": + return new o; + case"[object Number]": + case"[object String]": + return new o(t); + case"[object RegExp]": + return (s = new (i = t).constructor(i.source, x.exec(i))).lastIndex = i.lastIndex, s; + case"[object Symbol]": + return r = t, w ? Object(w.call(r)) : {} + } + }, _ = n(1683), L = n(723), S = n(776), O = n(7948), T = n(5771), j = n(8795), C = j.A && j.A.isMap, + R = C ? (0, T.A)(C) : function (t) { + return (0, O.A)(t) && "[object Map]" == (0, y.A)(t) + }, I = n(659), B = j.A && j.A.isSet, M = B ? (0, T.A)(B) : function (t) { + return (0, O.A)(t) && "[object Set]" == (0, y.A)(t) + }, U = "[object Arguments]", D = "[object Function]", P = "[object Object]", z = {}; + z[U] = z["[object Array]"] = z["[object ArrayBuffer]"] = z["[object DataView]"] = z["[object Boolean]"] = z["[object Date]"] = z["[object Float32Array]"] = z["[object Float64Array]"] = z["[object Int8Array]"] = z["[object Int16Array]"] = z["[object Int32Array]"] = z["[object Map]"] = z["[object Number]"] = z[P] = z["[object RegExp]"] = z["[object Set]"] = z["[object String]"] = z["[object Symbol]"] = z["[object Uint8Array]"] = z["[object Uint8ClampedArray]"] = z["[object Uint16Array]"] = z["[object Uint32Array]"] = !0, z["[object Error]"] = z[D] = z["[object WeakMap]"] = !1; + var F = function t(e, n, h, d, f, m) { + var A, x = 1 & n, N = 2 & n, E = 4 & n; + if (h && (A = f ? h(e, d, f, m) : h(e)), void 0 !== A) return A; + if (!(0, I.A)(e)) return e; + var w = (0, L.A)(e); + if (w) { + if (A = function (t) { + var e = t.length, n = new t.constructor(e); + return e && "string" == typeof t[0] && v.call(t, "index") && (n.index = t.index, n.input = t.input), n + }(e), !x) return (0, c.A)(e, A) + } else { + var q = (0, y.A)(e), O = q == D || "[object GeneratorFunction]" == q; + if ((0, S.A)(e)) return (0, a.A)(e, x); + if (q == P || q == U || O && !f) { + if (A = N || O ? {} : (0, _.A)(e), !x) return N ? function (t, e) { + return (0, s.A)(t, p(t), e) + }(e, function (t, e) { + return t && (0, s.A)(e, (0, l.A)(e), t) + }(A, e)) : function (t, e) { + return (0, s.A)(t, (0, u.A)(t), e) + }(e, function (t, e) { + return t && (0, s.A)(e, (0, o.A)(e), t) + }(A, e)) + } else { + if (!z[q]) return f ? e : {}; + A = k(e, q, x) + } + } + m || (m = new r.A); + var T = m.get(e); + if (T) return T; + m.set(e, A), M(e) ? e.forEach((function (r) { + A.add(t(r, n, h, r, e, m)) + })) : R(e) && e.forEach((function (r, i) { + A.set(i, t(r, n, h, i, e, m)) + })); + var j = E ? N ? b : g.A : N ? l.A : o.A, C = w ? void 0 : j(e); + return function (t, e) { + for (var n = -1, r = null == t ? 0 : t.length; ++n < r && !1 !== e(t[n], n, t);) ; + }(C || e, (function (r, s) { + C && (r = e[s = r]), (0, i.A)(A, s, t(r, n, h, s, e, m)) + })), A + }, H = function (t) { + return F(t, 5) + } + }, 8138: function (t, e) { + "use strict"; + e.A = function (t, e) { + return t === e || t != t && e != e + } + }, 8412: function (t, e, n) { + "use strict"; + n.d(e, { + A: function () { + return u + } + }); + var r = n(2159), i = n(7948), s = function (t) { + return (0, i.A)(t) && "[object Arguments]" == (0, r.A)(t) + }, o = Object.prototype, l = o.hasOwnProperty, a = o.propertyIsEnumerable, c = s(function () { + return arguments + }()) ? s : function (t) { + return (0, i.A)(t) && l.call(t, "callee") && !a.call(t, "callee") + }, u = c + }, 723: function (t, e) { + "use strict"; + var n = Array.isArray; + e.A = n + }, 3628: function (t, e, n) { + "use strict"; + var r = n(7572), i = n(1628); + e.A = function (t) { + return null != t && (0, i.A)(t.length) && !(0, r.A)(t) + } + }, 776: function (t, e, n) { + "use strict"; + n.d(e, { + A: function () { + return l + } + }); + var r = n(5507), i = "object" == typeof exports && exports && !exports.nodeType && exports, + s = i && "object" == typeof module && module && !module.nodeType && module, + o = s && s.exports === i ? r.A.Buffer : void 0, l = (o ? o.isBuffer : void 0) || function () { + return !1 + } + }, 5123: function (t, e, n) { + "use strict"; + n.d(e, { + A: function () { + return S + } + }); + var r = n(2673), i = n(3558); + + function s(t) { + var e = -1, n = null == t ? 0 : t.length; + for (this.__data__ = new i.A; ++e < n;) this.add(t[e]) + } + + s.prototype.add = s.prototype.push = function (t) { + return this.__data__.set(t, "__lodash_hash_undefined__"), this + }, s.prototype.has = function (t) { + return this.__data__.has(t) + }; + var o = s, l = function (t, e) { + for (var n = -1, r = null == t ? 0 : t.length; ++n < r;) if (e(t[n], n, t)) return !0; + return !1 + }, a = function (t, e, n, r, i, s) { + var a = 1 & n, c = t.length, u = e.length; + if (c != u && !(a && u > c)) return !1; + var h = s.get(t), d = s.get(e); + if (h && d) return h == e && d == t; + var f = -1, p = !0, g = 2 & n ? new o : void 0; + for (s.set(t, e), s.set(e, t); ++f < c;) { + var m = t[f], b = e[f]; + if (r) var y = a ? r(b, m, f, e, t, s) : r(m, b, f, t, e, s); + if (void 0 !== y) { + if (y) continue; + p = !1; + break + } + if (g) { + if (!l(e, (function (t, e) { + if (o = e, !g.has(o) && (m === t || i(m, t, n, r, s))) return g.push(e); + var o + }))) { + p = !1; + break + } + } else if (m !== b && !i(m, b, n, r, s)) { + p = !1; + break + } + } + return s.delete(t), s.delete(e), p + }, c = n(439), u = n(7218), h = n(8138), d = function (t) { + var e = -1, n = Array(t.size); + return t.forEach((function (t, r) { + n[++e] = [r, t] + })), n + }, f = function (t) { + var e = -1, n = Array(t.size); + return t.forEach((function (t) { + n[++e] = t + })), n + }, p = c.A ? c.A.prototype : void 0, g = p ? p.valueOf : void 0, m = n(2816), + b = Object.prototype.hasOwnProperty, y = n(7995), v = n(723), A = n(776), x = n(5755), + N = "[object Arguments]", E = "[object Array]", w = "[object Object]", + q = Object.prototype.hasOwnProperty, k = function (t, e, n, i, s, o) { + var l = (0, v.A)(t), c = (0, v.A)(e), p = l ? E : (0, y.A)(t), k = c ? E : (0, y.A)(e), + _ = (p = p == N ? w : p) == w, L = (k = k == N ? w : k) == w, S = p == k; + if (S && (0, A.A)(t)) { + if (!(0, A.A)(e)) return !1; + l = !0, _ = !1 + } + if (S && !_) return o || (o = new r.A), l || (0, x.A)(t) ? a(t, e, n, i, s, o) : function (t, e, n, r, i, s, o) { + switch (n) { + case"[object DataView]": + if (t.byteLength != e.byteLength || t.byteOffset != e.byteOffset) return !1; + t = t.buffer, e = e.buffer; + case"[object ArrayBuffer]": + return !(t.byteLength != e.byteLength || !s(new u.A(t), new u.A(e))); + case"[object Boolean]": + case"[object Date]": + case"[object Number]": + return (0, h.A)(+t, +e); + case"[object Error]": + return t.name == e.name && t.message == e.message; + case"[object RegExp]": + case"[object String]": + return t == e + ""; + case"[object Map]": + var l = d; + case"[object Set]": + var c = 1 & r; + if (l || (l = f), t.size != e.size && !c) return !1; + var p = o.get(t); + if (p) return p == e; + r |= 2, o.set(t, e); + var m = a(l(t), l(e), r, i, s, o); + return o.delete(t), m; + case"[object Symbol]": + if (g) return g.call(t) == g.call(e) + } + return !1 + }(t, e, p, n, i, s, o); + if (!(1 & n)) { + var O = _ && q.call(t, "__wrapped__"), T = L && q.call(e, "__wrapped__"); + if (O || T) { + var j = O ? t.value() : t, C = T ? e.value() : e; + return o || (o = new r.A), s(j, C, n, i, o) + } + } + return !!S && (o || (o = new r.A), function (t, e, n, r, i, s) { + var o = 1 & n, l = (0, m.A)(t), a = l.length; + if (a != (0, m.A)(e).length && !o) return !1; + for (var c = a; c--;) { + var u = l[c]; + if (!(o ? u in e : b.call(e, u))) return !1 + } + var h = s.get(t), d = s.get(e); + if (h && d) return h == e && d == t; + var f = !0; + s.set(t, e), s.set(e, t); + for (var p = o; ++c < a;) { + var g = t[u = l[c]], y = e[u]; + if (r) var v = o ? r(y, g, u, e, t, s) : r(g, y, u, t, e, s); + if (!(void 0 === v ? g === y || i(g, y, n, r, s) : v)) { + f = !1; + break + } + p || (p = "constructor" == u) + } + if (f && !p) { + var A = t.constructor, x = e.constructor; + A == x || !("constructor" in t) || !("constructor" in e) || "function" == typeof A && A instanceof A && "function" == typeof x && x instanceof x || (f = !1) + } + return s.delete(t), s.delete(e), f + }(t, e, n, i, s, o)) + }, _ = n(7948), L = function t(e, n, r, i, s) { + return e === n || (null == e || null == n || !(0, _.A)(e) && !(0, _.A)(n) ? e != e && n != n : k(e, n, r, i, t, s)) + }, S = function (t, e) { + return L(t, e) + } + }, 7572: function (t, e, n) { + "use strict"; + var r = n(2159), i = n(659); + e.A = function (t) { + if (!(0, i.A)(t)) return !1; + var e = (0, r.A)(t); + return "[object Function]" == e || "[object GeneratorFunction]" == e || "[object AsyncFunction]" == e || "[object Proxy]" == e + } + }, 1628: function (t, e) { + "use strict"; + e.A = function (t) { + return "number" == typeof t && t > -1 && t % 1 == 0 && t <= 9007199254740991 + } + }, 659: function (t, e) { + "use strict"; + e.A = function (t) { + var e = typeof t; + return null != t && ("object" == e || "function" == e) + } + }, 7948: function (t, e) { + "use strict"; + e.A = function (t) { + return null != t && "object" == typeof t + } + }, 5755: function (t, e, n) { + "use strict"; + n.d(e, { + A: function () { + return u + } + }); + var r = n(2159), i = n(1628), s = n(7948), o = {}; + o["[object Float32Array]"] = o["[object Float64Array]"] = o["[object Int8Array]"] = o["[object Int16Array]"] = o["[object Int32Array]"] = o["[object Uint8Array]"] = o["[object Uint8ClampedArray]"] = o["[object Uint16Array]"] = o["[object Uint32Array]"] = !0, o["[object Arguments]"] = o["[object Array]"] = o["[object ArrayBuffer]"] = o["[object Boolean]"] = o["[object DataView]"] = o["[object Date]"] = o["[object Error]"] = o["[object Function]"] = o["[object Map]"] = o["[object Number]"] = o["[object Object]"] = o["[object RegExp]"] = o["[object Set]"] = o["[object String]"] = o["[object WeakMap]"] = !1; + var l = n(5771), a = n(8795), c = a.A && a.A.isTypedArray, u = c ? (0, l.A)(c) : function (t) { + return (0, s.A)(t) && (0, i.A)(t.length) && !!o[(0, r.A)(t)] + } + }, 3169: function (t, e, n) { + "use strict"; + n.d(e, { + A: function () { + return a + } + }); + var r = n(6753), i = n(501), s = (0, n(2217).A)(Object.keys, Object), + o = Object.prototype.hasOwnProperty, l = n(3628), a = function (t) { + return (0, l.A)(t) ? (0, r.A)(t) : function (t) { + if (!(0, i.A)(t)) return s(t); + var e = []; + for (var n in Object(t)) o.call(t, n) && "constructor" != n && e.push(n); + return e + }(t) + } + }, 2624: function (t, e, n) { + "use strict"; + n.d(e, { + A: function () { + return c + } + }); + var r = n(6753), i = n(659), s = n(501), o = Object.prototype.hasOwnProperty, l = function (t) { + if (!(0, i.A)(t)) return function (t) { + var e = []; + if (null != t) for (var n in Object(t)) e.push(n); + return e + }(t); + var e = (0, s.A)(t), n = []; + for (var r in t) ("constructor" != r || !e && o.call(t, r)) && n.push(r); + return n + }, a = n(3628), c = function (t) { + return (0, a.A)(t) ? (0, r.A)(t, !0) : l(t) + } + }, 8347: function (t, e, n) { + "use strict"; + n.d(e, { + A: function () { + return $ + } + }); + var r, i, s, o, l = n(2673), a = n(6770), c = n(8138), u = function (t, e, n) { + (void 0 !== n && !(0, c.A)(t[e], n) || void 0 === n && !(e in t)) && (0, a.A)(t, e, n) + }, h = function (t, e, n) { + for (var r = -1, i = Object(t), s = n(t), o = s.length; o--;) { + var l = s[++r]; + if (!1 === e(i[l], l, i)) break + } + return t + }, d = n(3812), f = n(1827), p = n(4405), g = n(1683), m = n(8412), b = n(723), y = n(3628), + v = n(7948), A = n(776), x = n(7572), N = n(659), E = n(2159), w = n(8769), q = Function.prototype, + k = Object.prototype, _ = q.toString, L = k.hasOwnProperty, S = _.call(Object), O = n(5755), + T = function (t, e) { + if (("constructor" !== e || "function" != typeof t[e]) && "__proto__" != e) return t[e] + }, j = n(9601), C = n(2624), R = function (t, e, n, r, i, s, o) { + var l, a = T(t, n), c = T(e, n), h = o.get(c); + if (h) u(t, n, h); else { + var q = s ? s(a, c, n + "", t, e, o) : void 0, k = void 0 === q; + if (k) { + var R = (0, b.A)(c), I = !R && (0, A.A)(c), B = !R && !I && (0, O.A)(c); + q = c, R || I || B ? (0, b.A)(a) ? q = a : (l = a, (0, v.A)(l) && (0, y.A)(l) ? q = (0, p.A)(a) : I ? (k = !1, q = (0, d.A)(c, !0)) : B ? (k = !1, q = (0, f.A)(c, !0)) : q = []) : function (t) { + if (!(0, v.A)(t) || "[object Object]" != (0, E.A)(t)) return !1; + var e = (0, w.A)(t); + if (null === e) return !0; + var n = L.call(e, "constructor") && e.constructor; + return "function" == typeof n && n instanceof n && _.call(n) == S + }(c) || (0, m.A)(c) ? (q = a, (0, m.A)(a) ? q = function (t) { + return (0, j.A)(t, (0, C.A)(t)) + }(a) : (0, N.A)(a) && !(0, x.A)(a) || (q = (0, g.A)(c))) : k = !1 + } + k && (o.set(c, q), i(q, c, r, s, o), o.delete(c)), u(t, n, q) + } + }, I = function t(e, n, r, i, s) { + e !== n && h(n, (function (o, a) { + if (s || (s = new l.A), (0, N.A)(o)) R(e, n, a, r, t, i, s); else { + var c = i ? i(T(e, a), o, a + "", e, n, s) : void 0; + void 0 === c && (c = o), u(e, a, c) + } + }), C.A) + }, B = function (t) { + return t + }, M = Math.max, U = n(7889), D = U.A ? function (t, e) { + return (0, U.A)(t, "toString", { + configurable: !0, enumerable: !1, value: (n = e, function () { + return n + }), writable: !0 + }); + var n + } : B, P = Date.now, z = (r = D, i = 0, s = 0, function () { + var t = P(), e = 16 - (t - s); + if (s = t, e > 0) { + if (++i >= 800) return arguments[0] + } else i = 0; + return r.apply(void 0, arguments) + }), F = function (t, e) { + return z(function (t, e, n) { + return e = M(void 0 === e ? t.length - 1 : e, 0), function () { + for (var r = arguments, i = -1, s = M(r.length - e, 0), o = Array(s); ++i < s;) o[i] = r[e + i]; + i = -1; + for (var l = Array(e + 1); ++i < e;) l[i] = r[i]; + return l[e] = n(o), function (t, e, n) { + switch (n.length) { + case 0: + return t.call(e); + case 1: + return t.call(e, n[0]); + case 2: + return t.call(e, n[0], n[1]); + case 3: + return t.call(e, n[0], n[1], n[2]) + } + return t.apply(e, n) + }(t, this, l) + } + }(t, e, B), t + "") + }, H = n(3767), $ = (o = function (t, e, n) { + I(t, e, n) + }, F((function (t, e) { + var n = -1, r = e.length, i = r > 1 ? e[r - 1] : void 0, s = r > 2 ? e[2] : void 0; + for (i = o.length > 3 && "function" == typeof i ? (r--, i) : void 0, s && function (t, e, n) { + if (!(0, N.A)(n)) return !1; + var r = typeof e; + return !!("number" == r ? (0, y.A)(n) && (0, H.A)(e, n.length) : "string" == r && e in n) && (0, c.A)(n[e], t) + }(e[0], e[1], s) && (i = r < 3 ? void 0 : i, r = 1), t = Object(t); ++n < r;) { + var l = e[n]; + l && o(t, l, n) + } + return t + }))) + }, 6935: function (t, e) { + "use strict"; + e.A = function () { + return [] + } + }, 6003: function (t, e, n) { + "use strict"; + n.r(e), n.d(e, { + Attributor: function () { + return i + }, AttributorStore: function () { + return d + }, BlockBlot: function () { + return w + }, ClassAttributor: function () { + return c + }, ContainerBlot: function () { + return k + }, EmbedBlot: function () { + return _ + }, InlineBlot: function () { + return N + }, LeafBlot: function () { + return m + }, ParentBlot: function () { + return A + }, Registry: function () { + return l + }, Scope: function () { + return r + }, ScrollBlot: function () { + return O + }, StyleAttributor: function () { + return h + }, TextBlot: function () { + return j + } + }); + var r = (t => (t[t.TYPE = 3] = "TYPE", t[t.LEVEL = 12] = "LEVEL", t[t.ATTRIBUTE = 13] = "ATTRIBUTE", t[t.BLOT = 14] = "BLOT", t[t.INLINE = 7] = "INLINE", t[t.BLOCK = 11] = "BLOCK", t[t.BLOCK_BLOT = 10] = "BLOCK_BLOT", t[t.INLINE_BLOT = 6] = "INLINE_BLOT", t[t.BLOCK_ATTRIBUTE = 9] = "BLOCK_ATTRIBUTE", t[t.INLINE_ATTRIBUTE = 5] = "INLINE_ATTRIBUTE", t[t.ANY = 15] = "ANY", t))(r || {}); + + class i { + constructor(t, e, n = {}) { + this.attrName = t, this.keyName = e; + const i = r.TYPE & r.ATTRIBUTE; + this.scope = null != n.scope ? n.scope & r.LEVEL | i : r.ATTRIBUTE, null != n.whitelist && (this.whitelist = n.whitelist) + } + + static keys(t) { + return Array.from(t.attributes).map((t => t.name)) + } + + add(t, e) { + return !!this.canAdd(t, e) && (t.setAttribute(this.keyName, e), !0) + } + + canAdd(t, e) { + return null == this.whitelist || ("string" == typeof e ? this.whitelist.indexOf(e.replace(/["']/g, "")) > -1 : this.whitelist.indexOf(e) > -1) + } + + remove(t) { + t.removeAttribute(this.keyName) + } + + value(t) { + const e = t.getAttribute(this.keyName); + return this.canAdd(t, e) && e ? e : "" + } + } + + class s extends Error { + constructor(t) { + super(t = "[Parchment] " + t), this.message = t, this.name = this.constructor.name + } + } + + const o = class t { + constructor() { + this.attributes = {}, this.classes = {}, this.tags = {}, this.types = {} + } + + static find(t, e = !1) { + if (null == t) return null; + if (this.blots.has(t)) return this.blots.get(t) || null; + if (e) { + let n = null; + try { + n = t.parentNode + } catch { + return null + } + return this.find(n, e) + } + return null + } + + create(e, n, r) { + const i = this.query(n); + if (null == i) throw new s(`Unable to create ${n} blot`); + const o = i, l = n instanceof Node || n.nodeType === Node.TEXT_NODE ? n : o.create(r), + a = new o(e, l, r); + return t.blots.set(a.domNode, a), a + } + + find(e, n = !1) { + return t.find(e, n) + } + + query(t, e = r.ANY) { + let n; + return "string" == typeof t ? n = this.types[t] || this.attributes[t] : t instanceof Text || t.nodeType === Node.TEXT_NODE ? n = this.types.text : "number" == typeof t ? t & r.LEVEL & r.BLOCK ? n = this.types.block : t & r.LEVEL & r.INLINE && (n = this.types.inline) : t instanceof Element && ((t.getAttribute("class") || "").split(/\s+/).some((t => (n = this.classes[t], !!n))), n = n || this.tags[t.tagName]), null == n ? null : "scope" in n && e & r.LEVEL & n.scope && e & r.TYPE & n.scope ? n : null + } + + register(...t) { + return t.map((t => { + const e = "blotName" in t, n = "attrName" in t; + if (!e && !n) throw new s("Invalid definition"); + if (e && "abstract" === t.blotName) throw new s("Cannot register abstract class"); + const r = e ? t.blotName : n ? t.attrName : void 0; + return this.types[r] = t, n ? "string" == typeof t.keyName && (this.attributes[t.keyName] = t) : e && (t.className && (this.classes[t.className] = t), t.tagName && (Array.isArray(t.tagName) ? t.tagName = t.tagName.map((t => t.toUpperCase())) : t.tagName = t.tagName.toUpperCase(), (Array.isArray(t.tagName) ? t.tagName : [t.tagName]).forEach((e => { + (null == this.tags[e] || null == t.className) && (this.tags[e] = t) + })))), t + })) + } + }; + o.blots = new WeakMap; + let l = o; + + function a(t, e) { + return (t.getAttribute("class") || "").split(/\s+/).filter((t => 0 === t.indexOf(`${e}-`))) + } + + const c = class extends i { + static keys(t) { + return (t.getAttribute("class") || "").split(/\s+/).map((t => t.split("-").slice(0, -1).join("-"))) + } + + add(t, e) { + return !!this.canAdd(t, e) && (this.remove(t), t.classList.add(`${this.keyName}-${e}`), !0) + } + + remove(t) { + a(t, this.keyName).forEach((e => { + t.classList.remove(e) + })), 0 === t.classList.length && t.removeAttribute("class") + } + + value(t) { + const e = (a(t, this.keyName)[0] || "").slice(this.keyName.length + 1); + return this.canAdd(t, e) ? e : "" + } + }; + + function u(t) { + const e = t.split("-"), n = e.slice(1).map((t => t[0].toUpperCase() + t.slice(1))).join(""); + return e[0] + n + } + + const h = class extends i { + static keys(t) { + return (t.getAttribute("style") || "").split(";").map((t => t.split(":")[0].trim())) + } + + add(t, e) { + return !!this.canAdd(t, e) && (t.style[u(this.keyName)] = e, !0) + } + + remove(t) { + t.style[u(this.keyName)] = "", t.getAttribute("style") || t.removeAttribute("style") + } + + value(t) { + const e = t.style[u(this.keyName)]; + return this.canAdd(t, e) ? e : "" + } + }, d = class { + constructor(t) { + this.attributes = {}, this.domNode = t, this.build() + } + + attribute(t, e) { + e ? t.add(this.domNode, e) && (null != t.value(this.domNode) ? this.attributes[t.attrName] = t : delete this.attributes[t.attrName]) : (t.remove(this.domNode), delete this.attributes[t.attrName]) + } + + build() { + this.attributes = {}; + const t = l.find(this.domNode); + if (null == t) return; + const e = i.keys(this.domNode), n = c.keys(this.domNode), s = h.keys(this.domNode); + e.concat(n).concat(s).forEach((e => { + const n = t.scroll.query(e, r.ATTRIBUTE); + n instanceof i && (this.attributes[n.attrName] = n) + })) + } + + copy(t) { + Object.keys(this.attributes).forEach((e => { + const n = this.attributes[e].value(this.domNode); + t.format(e, n) + })) + } + + move(t) { + this.copy(t), Object.keys(this.attributes).forEach((t => { + this.attributes[t].remove(this.domNode) + })), this.attributes = {} + } + + values() { + return Object.keys(this.attributes).reduce(((t, e) => (t[e] = this.attributes[e].value(this.domNode), t)), {}) + } + }, f = class { + constructor(t, e) { + this.scroll = t, this.domNode = e, l.blots.set(e, this), this.prev = null, this.next = null + } + + static create(t) { + if (null == this.tagName) throw new s("Blot definition missing tagName"); + let e, n; + return Array.isArray(this.tagName) ? ("string" == typeof t ? (n = t.toUpperCase(), parseInt(n, 10).toString() === n && (n = parseInt(n, 10))) : "number" == typeof t && (n = t), e = "number" == typeof n ? document.createElement(this.tagName[n - 1]) : n && this.tagName.indexOf(n) > -1 ? document.createElement(n) : document.createElement(this.tagName[0])) : e = document.createElement(this.tagName), this.className && e.classList.add(this.className), e + } + + get statics() { + return this.constructor + } + + attach() { + } + + clone() { + const t = this.domNode.cloneNode(!1); + return this.scroll.create(t) + } + + detach() { + null != this.parent && this.parent.removeChild(this), l.blots.delete(this.domNode) + } + + deleteAt(t, e) { + this.isolate(t, e).remove() + } + + formatAt(t, e, n, i) { + const s = this.isolate(t, e); + if (null != this.scroll.query(n, r.BLOT) && i) s.wrap(n, i); else if (null != this.scroll.query(n, r.ATTRIBUTE)) { + const t = this.scroll.create(this.statics.scope); + s.wrap(t), t.format(n, i) + } + } + + insertAt(t, e, n) { + const r = null == n ? this.scroll.create("text", e) : this.scroll.create(e, n), + i = this.split(t); + this.parent.insertBefore(r, i || void 0) + } + + isolate(t, e) { + const n = this.split(t); + if (null == n) throw new Error("Attempt to isolate at end"); + return n.split(e), n + } + + length() { + return 1 + } + + offset(t = this.parent) { + return null == this.parent || this === t ? 0 : this.parent.children.offset(this) + this.parent.offset(t) + } + + optimize(t) { + this.statics.requiredContainer && !(this.parent instanceof this.statics.requiredContainer) && this.wrap(this.statics.requiredContainer.blotName) + } + + remove() { + null != this.domNode.parentNode && this.domNode.parentNode.removeChild(this.domNode), this.detach() + } + + replaceWith(t, e) { + const n = "string" == typeof t ? this.scroll.create(t, e) : t; + return null != this.parent && (this.parent.insertBefore(n, this.next || void 0), this.remove()), n + } + + split(t, e) { + return 0 === t ? this : this.next + } + + update(t, e) { + } + + wrap(t, e) { + const n = "string" == typeof t ? this.scroll.create(t, e) : t; + if (null != this.parent && this.parent.insertBefore(n, this.next || void 0), "function" != typeof n.appendChild) throw new s(`Cannot wrap ${t}`); + return n.appendChild(this), n + } + }; + f.blotName = "abstract"; + let p = f; + const g = class extends p { + static value(t) { + return !0 + } + + index(t, e) { + return this.domNode === t || this.domNode.compareDocumentPosition(t) & Node.DOCUMENT_POSITION_CONTAINED_BY ? Math.min(e, 1) : -1 + } + + position(t, e) { + let n = Array.from(this.parent.domNode.childNodes).indexOf(this.domNode); + return t > 0 && (n += 1), [this.parent.domNode, n] + } + + value() { + return {[this.statics.blotName]: this.statics.value(this.domNode) || !0} + } + }; + g.scope = r.INLINE_BLOT; + const m = g; + + class b { + constructor() { + this.head = null, this.tail = null, this.length = 0 + } + + append(...t) { + if (this.insertBefore(t[0], null), t.length > 1) { + const e = t.slice(1); + this.append(...e) + } + } + + at(t) { + const e = this.iterator(); + let n = e(); + for (; n && t > 0;) t -= 1, n = e(); + return n + } + + contains(t) { + const e = this.iterator(); + let n = e(); + for (; n;) { + if (n === t) return !0; + n = e() + } + return !1 + } + + indexOf(t) { + const e = this.iterator(); + let n = e(), r = 0; + for (; n;) { + if (n === t) return r; + r += 1, n = e() + } + return -1 + } + + insertBefore(t, e) { + null != t && (this.remove(t), t.next = e, null != e ? (t.prev = e.prev, null != e.prev && (e.prev.next = t), e.prev = t, e === this.head && (this.head = t)) : null != this.tail ? (this.tail.next = t, t.prev = this.tail, this.tail = t) : (t.prev = null, this.head = this.tail = t), this.length += 1) + } + + offset(t) { + let e = 0, n = this.head; + for (; null != n;) { + if (n === t) return e; + e += n.length(), n = n.next + } + return -1 + } + + remove(t) { + this.contains(t) && (null != t.prev && (t.prev.next = t.next), null != t.next && (t.next.prev = t.prev), t === this.head && (this.head = t.next), t === this.tail && (this.tail = t.prev), this.length -= 1) + } + + iterator(t = this.head) { + return () => { + const e = t; + return null != t && (t = t.next), e + } + } + + find(t, e = !1) { + const n = this.iterator(); + let r = n(); + for (; r;) { + const i = r.length(); + if (t < i || e && t === i && (null == r.next || 0 !== r.next.length())) return [r, t]; + t -= i, r = n() + } + return [null, 0] + } + + forEach(t) { + const e = this.iterator(); + let n = e(); + for (; n;) t(n), n = e() + } + + forEachAt(t, e, n) { + if (e <= 0) return; + const [r, i] = this.find(t); + let s = t - i; + const o = this.iterator(r); + let l = o(); + for (; l && s < t + e;) { + const r = l.length(); + t > s ? n(l, t - s, Math.min(e, s + r - t)) : n(l, 0, Math.min(r, t + e - s)), s += r, l = o() + } + } + + map(t) { + return this.reduce(((e, n) => (e.push(t(n)), e)), []) + } + + reduce(t, e) { + const n = this.iterator(); + let r = n(); + for (; r;) e = t(e, r), r = n(); + return e + } + } + + function y(t, e) { + const n = e.find(t); + if (n) return n; + try { + return e.create(t) + } catch { + const n = e.create(r.INLINE); + return Array.from(t.childNodes).forEach((t => { + n.domNode.appendChild(t) + })), t.parentNode && t.parentNode.replaceChild(n.domNode, t), n.attach(), n + } + } + + const v = class t extends p { + constructor(t, e) { + super(t, e), this.uiNode = null, this.build() + } + + appendChild(t) { + this.insertBefore(t) + } + + attach() { + super.attach(), this.children.forEach((t => { + t.attach() + })) + } + + attachUI(e) { + null != this.uiNode && this.uiNode.remove(), this.uiNode = e, t.uiClass && this.uiNode.classList.add(t.uiClass), this.uiNode.setAttribute("contenteditable", "false"), this.domNode.insertBefore(this.uiNode, this.domNode.firstChild) + } + + build() { + this.children = new b, Array.from(this.domNode.childNodes).filter((t => t !== this.uiNode)).reverse().forEach((t => { + try { + const e = y(t, this.scroll); + this.insertBefore(e, this.children.head || void 0) + } catch (t) { + if (t instanceof s) return; + throw t + } + })) + } + + deleteAt(t, e) { + if (0 === t && e === this.length()) return this.remove(); + this.children.forEachAt(t, e, ((t, e, n) => { + t.deleteAt(e, n) + })) + } + + descendant(e, n = 0) { + const [r, i] = this.children.find(n); + return null == e.blotName && e(r) || null != e.blotName && r instanceof e ? [r, i] : r instanceof t ? r.descendant(e, i) : [null, -1] + } + + descendants(e, n = 0, r = Number.MAX_VALUE) { + let i = [], s = r; + return this.children.forEachAt(n, r, ((n, r, o) => { + (null == e.blotName && e(n) || null != e.blotName && n instanceof e) && i.push(n), n instanceof t && (i = i.concat(n.descendants(e, r, s))), s -= o + })), i + } + + detach() { + this.children.forEach((t => { + t.detach() + })), super.detach() + } + + enforceAllowedChildren() { + let e = !1; + this.children.forEach((n => { + e || this.statics.allowedChildren.some((t => n instanceof t)) || (n.statics.scope === r.BLOCK_BLOT ? (null != n.next && this.splitAfter(n), null != n.prev && this.splitAfter(n.prev), n.parent.unwrap(), e = !0) : n instanceof t ? n.unwrap() : n.remove()) + })) + } + + formatAt(t, e, n, r) { + this.children.forEachAt(t, e, ((t, e, i) => { + t.formatAt(e, i, n, r) + })) + } + + insertAt(t, e, n) { + const [r, i] = this.children.find(t); + if (r) r.insertAt(i, e, n); else { + const t = null == n ? this.scroll.create("text", e) : this.scroll.create(e, n); + this.appendChild(t) + } + } + + insertBefore(t, e) { + null != t.parent && t.parent.children.remove(t); + let n = null; + this.children.insertBefore(t, e || null), t.parent = this, null != e && (n = e.domNode), (this.domNode.parentNode !== t.domNode || this.domNode.nextSibling !== n) && this.domNode.insertBefore(t.domNode, n), t.attach() + } + + length() { + return this.children.reduce(((t, e) => t + e.length()), 0) + } + + moveChildren(t, e) { + this.children.forEach((n => { + t.insertBefore(n, e) + })) + } + + optimize(t) { + if (super.optimize(t), this.enforceAllowedChildren(), null != this.uiNode && this.uiNode !== this.domNode.firstChild && this.domNode.insertBefore(this.uiNode, this.domNode.firstChild), 0 === this.children.length) if (null != this.statics.defaultChild) { + const t = this.scroll.create(this.statics.defaultChild.blotName); + this.appendChild(t) + } else this.remove() + } + + path(e, n = !1) { + const [r, i] = this.children.find(e, n), s = [[this, e]]; + return r instanceof t ? s.concat(r.path(i, n)) : (null != r && s.push([r, i]), s) + } + + removeChild(t) { + this.children.remove(t) + } + + replaceWith(e, n) { + const r = "string" == typeof e ? this.scroll.create(e, n) : e; + return r instanceof t && this.moveChildren(r), super.replaceWith(r) + } + + split(t, e = !1) { + if (!e) { + if (0 === t) return this; + if (t === this.length()) return this.next + } + const n = this.clone(); + return this.parent && this.parent.insertBefore(n, this.next || void 0), this.children.forEachAt(t, this.length(), ((t, r, i) => { + const s = t.split(r, e); + null != s && n.appendChild(s) + })), n + } + + splitAfter(t) { + const e = this.clone(); + for (; null != t.next;) e.appendChild(t.next); + return this.parent && this.parent.insertBefore(e, this.next || void 0), e + } + + unwrap() { + this.parent && this.moveChildren(this.parent, this.next || void 0), this.remove() + } + + update(t, e) { + const n = [], r = []; + t.forEach((t => { + t.target === this.domNode && "childList" === t.type && (n.push(...t.addedNodes), r.push(...t.removedNodes)) + })), r.forEach((t => { + if (null != t.parentNode && "IFRAME" !== t.tagName && document.body.compareDocumentPosition(t) & Node.DOCUMENT_POSITION_CONTAINED_BY) return; + const e = this.scroll.find(t); + null != e && (null == e.domNode.parentNode || e.domNode.parentNode === this.domNode) && e.detach() + })), n.filter((t => t.parentNode === this.domNode && t !== this.uiNode)).sort(((t, e) => t === e ? 0 : t.compareDocumentPosition(e) & Node.DOCUMENT_POSITION_FOLLOWING ? 1 : -1)).forEach((t => { + let e = null; + null != t.nextSibling && (e = this.scroll.find(t.nextSibling)); + const n = y(t, this.scroll); + (n.next !== e || null == n.next) && (null != n.parent && n.parent.removeChild(this), this.insertBefore(n, e || void 0)) + })), this.enforceAllowedChildren() + } + }; + v.uiClass = ""; + const A = v, x = class t extends A { + static create(t) { + return super.create(t) + } + + static formats(e, n) { + const r = n.query(t.blotName); + if (null == r || e.tagName !== r.tagName) { + if ("string" == typeof this.tagName) return !0; + if (Array.isArray(this.tagName)) return e.tagName.toLowerCase() + } + } + + constructor(t, e) { + super(t, e), this.attributes = new d(this.domNode) + } + + format(e, n) { + if (e !== this.statics.blotName || n) { + const t = this.scroll.query(e, r.INLINE); + if (null == t) return; + t instanceof i ? this.attributes.attribute(t, n) : n && (e !== this.statics.blotName || this.formats()[e] !== n) && this.replaceWith(e, n) + } else this.children.forEach((e => { + e instanceof t || (e = e.wrap(t.blotName, !0)), this.attributes.copy(e) + })), this.unwrap() + } + + formats() { + const t = this.attributes.values(), e = this.statics.formats(this.domNode, this.scroll); + return null != e && (t[this.statics.blotName] = e), t + } + + formatAt(t, e, n, i) { + null != this.formats()[n] || this.scroll.query(n, r.ATTRIBUTE) ? this.isolate(t, e).format(n, i) : super.formatAt(t, e, n, i) + } + + optimize(e) { + super.optimize(e); + const n = this.formats(); + if (0 === Object.keys(n).length) return this.unwrap(); + const r = this.next; + r instanceof t && r.prev === this && function (t, e) { + if (Object.keys(t).length !== Object.keys(e).length) return !1; + for (const n in t) if (t[n] !== e[n]) return !1; + return !0 + }(n, r.formats()) && (r.moveChildren(this), r.remove()) + } + + replaceWith(t, e) { + const n = super.replaceWith(t, e); + return this.attributes.copy(n), n + } + + update(t, e) { + super.update(t, e), t.some((t => t.target === this.domNode && "attributes" === t.type)) && this.attributes.build() + } + + wrap(e, n) { + const r = super.wrap(e, n); + return r instanceof t && this.attributes.move(r), r + } + }; + x.allowedChildren = [x, m], x.blotName = "inline", x.scope = r.INLINE_BLOT, x.tagName = "SPAN"; + const N = x, E = class t extends A { + static create(t) { + return super.create(t) + } + + static formats(e, n) { + const r = n.query(t.blotName); + if (null == r || e.tagName !== r.tagName) { + if ("string" == typeof this.tagName) return !0; + if (Array.isArray(this.tagName)) return e.tagName.toLowerCase() + } + } + + constructor(t, e) { + super(t, e), this.attributes = new d(this.domNode) + } + + format(e, n) { + const s = this.scroll.query(e, r.BLOCK); + null != s && (s instanceof i ? this.attributes.attribute(s, n) : e !== this.statics.blotName || n ? n && (e !== this.statics.blotName || this.formats()[e] !== n) && this.replaceWith(e, n) : this.replaceWith(t.blotName)) + } + + formats() { + const t = this.attributes.values(), e = this.statics.formats(this.domNode, this.scroll); + return null != e && (t[this.statics.blotName] = e), t + } + + formatAt(t, e, n, i) { + null != this.scroll.query(n, r.BLOCK) ? this.format(n, i) : super.formatAt(t, e, n, i) + } + + insertAt(t, e, n) { + if (null == n || null != this.scroll.query(e, r.INLINE)) super.insertAt(t, e, n); else { + const r = this.split(t); + if (null == r) throw new Error("Attempt to insertAt after block boundaries"); + { + const t = this.scroll.create(e, n); + r.parent.insertBefore(t, r) + } + } + } + + replaceWith(t, e) { + const n = super.replaceWith(t, e); + return this.attributes.copy(n), n + } + + update(t, e) { + super.update(t, e), t.some((t => t.target === this.domNode && "attributes" === t.type)) && this.attributes.build() + } + }; + E.blotName = "block", E.scope = r.BLOCK_BLOT, E.tagName = "P", E.allowedChildren = [N, E, m]; + const w = E, q = class extends A { + checkMerge() { + return null !== this.next && this.next.statics.blotName === this.statics.blotName + } + + deleteAt(t, e) { + super.deleteAt(t, e), this.enforceAllowedChildren() + } + + formatAt(t, e, n, r) { + super.formatAt(t, e, n, r), this.enforceAllowedChildren() + } + + insertAt(t, e, n) { + super.insertAt(t, e, n), this.enforceAllowedChildren() + } + + optimize(t) { + super.optimize(t), this.children.length > 0 && null != this.next && this.checkMerge() && (this.next.moveChildren(this), this.next.remove()) + } + }; + q.blotName = "container", q.scope = r.BLOCK_BLOT; + const k = q, _ = class extends m { + static formats(t, e) { + } + + format(t, e) { + super.formatAt(0, this.length(), t, e) + } + + formatAt(t, e, n, r) { + 0 === t && e === this.length() ? this.format(n, r) : super.formatAt(t, e, n, r) + } + + formats() { + return this.statics.formats(this.domNode, this.scroll) + } + }, L = {attributes: !0, characterData: !0, characterDataOldValue: !0, childList: !0, subtree: !0}, + S = class extends A { + constructor(t, e) { + super(null, e), this.registry = t, this.scroll = this, this.build(), this.observer = new MutationObserver((t => { + this.update(t) + })), this.observer.observe(this.domNode, L), this.attach() + } + + create(t, e) { + return this.registry.create(this, t, e) + } + + find(t, e = !1) { + const n = this.registry.find(t, e); + return n ? n.scroll === this ? n : e ? this.find(n.scroll.domNode.parentNode, !0) : null : null + } + + query(t, e = r.ANY) { + return this.registry.query(t, e) + } + + register(...t) { + return this.registry.register(...t) + } + + build() { + null != this.scroll && super.build() + } + + detach() { + super.detach(), this.observer.disconnect() + } + + deleteAt(t, e) { + this.update(), 0 === t && e === this.length() ? this.children.forEach((t => { + t.remove() + })) : super.deleteAt(t, e) + } + + formatAt(t, e, n, r) { + this.update(), super.formatAt(t, e, n, r) + } + + insertAt(t, e, n) { + this.update(), super.insertAt(t, e, n) + } + + optimize(t = [], e = {}) { + super.optimize(e); + const n = e.mutationsMap || new WeakMap; + let r = Array.from(this.observer.takeRecords()); + for (; r.length > 0;) t.push(r.pop()); + const i = (t, e = !0) => { + null == t || t === this || null != t.domNode.parentNode && (n.has(t.domNode) || n.set(t.domNode, []), e && i(t.parent)) + }, s = t => { + n.has(t.domNode) && (t instanceof A && t.children.forEach(s), n.delete(t.domNode), t.optimize(e)) + }; + let o = t; + for (let e = 0; o.length > 0; e += 1) { + if (e >= 100) throw new Error("[Parchment] Maximum optimize iterations reached"); + for (o.forEach((t => { + const e = this.find(t.target, !0); + null != e && (e.domNode === t.target && ("childList" === t.type ? (i(this.find(t.previousSibling, !1)), Array.from(t.addedNodes).forEach((t => { + const e = this.find(t, !1); + i(e, !1), e instanceof A && e.children.forEach((t => { + i(t, !1) + })) + }))) : "attributes" === t.type && i(e.prev)), i(e)) + })), this.children.forEach(s), o = Array.from(this.observer.takeRecords()), r = o.slice(); r.length > 0;) t.push(r.pop()) + } + } + + update(t, e = {}) { + t = t || this.observer.takeRecords(); + const n = new WeakMap; + t.map((t => { + const e = this.find(t.target, !0); + return null == e ? null : n.has(e.domNode) ? (n.get(e.domNode).push(t), null) : (n.set(e.domNode, [t]), e) + })).forEach((t => { + null != t && t !== this && n.has(t.domNode) && t.update(n.get(t.domNode) || [], e) + })), e.mutationsMap = n, n.has(this.domNode) && super.update(n.get(this.domNode), e), this.optimize(t, e) + } + }; + S.blotName = "scroll", S.defaultChild = w, S.allowedChildren = [w, k], S.scope = r.BLOCK_BLOT, S.tagName = "DIV"; + const O = S, T = class t extends m { + static create(t) { + return document.createTextNode(t) + } + + static value(t) { + return t.data + } + + constructor(t, e) { + super(t, e), this.text = this.statics.value(this.domNode) + } + + deleteAt(t, e) { + this.domNode.data = this.text = this.text.slice(0, t) + this.text.slice(t + e) + } + + index(t, e) { + return this.domNode === t ? e : -1 + } + + insertAt(t, e, n) { + null == n ? (this.text = this.text.slice(0, t) + e + this.text.slice(t), this.domNode.data = this.text) : super.insertAt(t, e, n) + } + + length() { + return this.text.length + } + + optimize(e) { + super.optimize(e), this.text = this.statics.value(this.domNode), 0 === this.text.length ? this.remove() : this.next instanceof t && this.next.prev === this && (this.insertAt(this.length(), this.next.value()), this.next.remove()) + } + + position(t, e = !1) { + return [this.domNode, t] + } + + split(t, e = !1) { + if (!e) { + if (0 === t) return this; + if (t === this.length()) return this.next + } + const n = this.scroll.create(this.domNode.splitText(t)); + return this.parent.insertBefore(n, this.next || void 0), this.text = this.statics.value(this.domNode), n + } + + update(t, e) { + t.some((t => "characterData" === t.type && t.target === this.domNode)) && (this.text = this.statics.value(this.domNode)) + } + + value() { + return this.text + } + }; + T.blotName = "text", T.scope = r.INLINE_BLOT; + const j = T + } + }, e = {}; + + function n(r) { + var i = e[r]; + if (void 0 !== i) return i.exports; + var s = e[r] = {id: r, loaded: !1, exports: {}}; + return t[r](s, s.exports, n), s.loaded = !0, s.exports + } + + n.n = function (t) { + var e = t && t.__esModule ? function () { + return t.default + } : function () { + return t + }; + return n.d(e, {a: e}), e + }, n.d = function (t, e) { + for (var r in e) n.o(e, r) && !n.o(t, r) && Object.defineProperty(t, r, {enumerable: !0, get: e[r]}) + }, n.g = function () { + if ("object" == typeof globalThis) return globalThis; + try { + return this || new Function("return this")() + } catch (t) { + if ("object" == typeof window) return window + } + }(), n.o = function (t, e) { + return Object.prototype.hasOwnProperty.call(t, e) + }, n.r = function (t) { + "undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(t, Symbol.toStringTag, {value: "Module"}), Object.defineProperty(t, "__esModule", {value: !0}) + }, n.nmd = function (t) { + return t.paths = [], t.children || (t.children = []), t + }; + var r = {}; + return function () { + "use strict"; + n.d(r, { + default: function () { + return It + } + }); + var t = n(3729), e = n(8276), i = n(7912), s = n(6003); + + class o extends s.ClassAttributor { + add(t, e) { + let n = 0; + if ("+1" === e || "-1" === e) { + const r = this.value(t) || 0; + n = "+1" === e ? r + 1 : r - 1 + } else "number" == typeof e && (n = e); + return 0 === n ? (this.remove(t), !0) : super.add(t, n.toString()) + } + + canAdd(t, e) { + return super.canAdd(t, e) || super.canAdd(t, parseInt(e, 10)) + } + + value(t) { + return parseInt(super.value(t), 10) || void 0 + } + } + + var l = new o("indent", "ql-indent", {scope: s.Scope.BLOCK, whitelist: [1, 2, 3, 4, 5, 6, 7, 8]}), + a = n(9698); + + class c extends a.Ay { + static blotName = "blockquote"; + static tagName = "blockquote" + } + + var u = c; + + class h extends a.Ay { + static blotName = "header"; + static tagName = ["H1", "H2", "H3", "H4", "H5", "H6"]; + + static formats(t) { + return this.tagName.indexOf(t.tagName) + 1 + } + } + + var d = h, f = n(580), p = n(6142); + + class g extends f.A { + } + + g.blotName = "list-container", g.tagName = "OL"; + + class m extends a.Ay { + static create(t) { + const e = super.create(); + return e.setAttribute("data-list", t), e + } + + static formats(t) { + return t.getAttribute("data-list") || void 0 + } + + static register() { + p.Ay.register(g) + } + + constructor(t, e) { + super(t, e); + const n = e.ownerDocument.createElement("span"), r = n => { + if (!t.isEnabled()) return; + const r = this.statics.formats(e, t); + "checked" === r ? (this.format("list", "unchecked"), n.preventDefault()) : "unchecked" === r && (this.format("list", "checked"), n.preventDefault()) + }; + n.addEventListener("mousedown", r), n.addEventListener("touchstart", r), this.attachUI(n) + } + + format(t, e) { + t === this.statics.blotName && e ? this.domNode.setAttribute("data-list", e) : super.format(t, e) + } + } + + m.blotName = "list", m.tagName = "LI", g.allowedChildren = [m], m.requiredContainer = g; + var b = n(9541), y = n(8638), v = n(6772), A = n(664), x = n(4850); + + class N extends x.A { + static blotName = "bold"; + static tagName = ["STRONG", "B"]; + + static create() { + return super.create() + } + + static formats() { + return !0 + } + + optimize(t) { + super.optimize(t), this.domNode.tagName !== this.statics.tagName[0] && this.replaceWith(this.statics.blotName) + } + } + + var E = N; + + class w extends x.A { + static blotName = "link"; + static tagName = "A"; + static SANITIZED_URL = "about:blank"; + static PROTOCOL_WHITELIST = ["http", "https", "mailto", "tel", "sms"]; + + static create(t) { + const e = super.create(t); + return e.setAttribute("href", this.sanitize(t)), e.setAttribute("rel", "noopener noreferrer"), e.setAttribute("target", "_blank"), e + } + + static formats(t) { + return t.getAttribute("href") + } + + static sanitize(t) { + return q(t, this.PROTOCOL_WHITELIST) ? t : this.SANITIZED_URL + } + + format(t, e) { + t === this.statics.blotName && e ? this.domNode.setAttribute("href", this.constructor.sanitize(e)) : super.format(t, e) + } + } + + function q(t, e) { + const n = document.createElement("a"); + n.href = t; + const r = n.href.slice(0, n.href.indexOf(":")); + return e.indexOf(r) > -1 + } + + class k extends x.A { + static blotName = "script"; + static tagName = ["SUB", "SUP"]; + + static create(t) { + return "super" === t ? document.createElement("sup") : "sub" === t ? document.createElement("sub") : super.create(t) + } + + static formats(t) { + return "SUB" === t.tagName ? "sub" : "SUP" === t.tagName ? "super" : void 0 + } + } + + var _ = k; + + class L extends x.A { + static blotName = "underline"; + static tagName = "U" + } + + var S = L, O = n(746); + + class T extends O.A { + static blotName = "formula"; + static className = "ql-formula"; + static tagName = "SPAN"; + + static create(t) { + if (null == window.katex) throw new Error("Formula module requires KaTeX."); + const e = super.create(t); + return "string" == typeof t && (window.katex.render(t, e, { + throwOnError: !1, + errorColor: "#f00" + }), e.setAttribute("data-value", t)), e + } + + static value(t) { + return t.getAttribute("data-value") + } + + html() { + const {formula: t} = this.value(); + return `$$${t}$$` + } + } + + var j = T; + const C = ["alt", "height", "width"]; + + class R extends s.EmbedBlot { + static blotName = "image"; + static tagName = "IMG"; + + static create(t) { + const e = super.create(t); + return "string" == typeof t && e.setAttribute("src", this.sanitize(t)), e + } + + static formats(t) { + return C.reduce(((e, n) => (t.hasAttribute(n) && (e[n] = t.getAttribute(n)), e)), {}) + } + + static match(t) { + return /\.(jpe?g|gif|png)$/.test(t) || /^data:image\/.+;base64/.test(t) + } + + static sanitize(t) { + return q(t, ["http", "https", "data"]) ? t : "//:0" + } + + static value(t) { + return t.getAttribute("src") + } + + format(t, e) { + C.indexOf(t) > -1 ? e ? this.domNode.setAttribute(t, e) : this.domNode.removeAttribute(t) : super.format(t, e) + } + } + + var I = R; + const B = ["height", "width"]; + + class M extends a.zo { + static blotName = "video"; + static className = "ql-video"; + static tagName = "IFRAME"; + + static create(t) { + const e = super.create(t); + return e.setAttribute("frameborder", "0"), e.setAttribute("allowfullscreen", "true"), e.setAttribute("src", this.sanitize(t)), e + } + + static formats(t) { + return B.reduce(((e, n) => (t.hasAttribute(n) && (e[n] = t.getAttribute(n)), e)), {}) + } + + static sanitize(t) { + return w.sanitize(t) + } + + static value(t) { + return t.getAttribute("src") + } + + format(t, e) { + B.indexOf(t) > -1 ? e ? this.domNode.setAttribute(t, e) : this.domNode.removeAttribute(t) : super.format(t, e) + } + + html() { + const {video: t} = this.value(); + return `${t}` + } + } + + var U = M, D = n(9404), P = n(5232), z = n.n(P), F = n(4266), H = n(3036), $ = n(4541), V = n(5508), + K = n(584); + const W = new s.ClassAttributor("code-token", "hljs", {scope: s.Scope.INLINE}); + + class Z extends x.A { + static formats(t, e) { + for (; null != t && t !== e.domNode;) { + if (t.classList && t.classList.contains(D.Ay.className)) return super.formats(t, e); + t = t.parentNode + } + } + + constructor(t, e, n) { + super(t, e, n), W.add(this.domNode, n) + } + + format(t, e) { + t !== Z.blotName ? super.format(t, e) : e ? W.add(this.domNode, e) : (W.remove(this.domNode), this.domNode.classList.remove(this.statics.className)) + } + + optimize() { + super.optimize(...arguments), W.value(this.domNode) || this.unwrap() + } + } + + Z.blotName = "code-token", Z.className = "ql-token"; + + class G extends D.Ay { + static create(t) { + const e = super.create(t); + return "string" == typeof t && e.setAttribute("data-language", t), e + } + + static formats(t) { + return t.getAttribute("data-language") || "plain" + } + + static register() { + } + + format(t, e) { + t === this.statics.blotName && e ? this.domNode.setAttribute("data-language", e) : super.format(t, e) + } + + replaceWith(t, e) { + return this.formatAt(0, this.length(), Z.blotName, !1), super.replaceWith(t, e) + } + } + + class X extends D.EJ { + attach() { + super.attach(), this.forceNext = !1, this.scroll.emitMount(this) + } + + format(t, e) { + t === G.blotName && (this.forceNext = !0, this.children.forEach((n => { + n.format(t, e) + }))) + } + + formatAt(t, e, n, r) { + n === G.blotName && (this.forceNext = !0), super.formatAt(t, e, n, r) + } + + highlight(t) { + let e = arguments.length > 1 && void 0 !== arguments[1] && arguments[1]; + if (null == this.children.head) return; + const n = `${Array.from(this.domNode.childNodes).filter((t => t !== this.uiNode)).map((t => t.textContent)).join("\n")}\n`, + r = G.formats(this.children.head.domNode); + if (e || this.forceNext || this.cachedText !== n) { + if (n.trim().length > 0 || null == this.cachedText) { + const e = this.children.reduce(((t, e) => t.concat((0, a.mG)(e, !1))), new (z())), + i = t(n, r); + e.diff(i).reduce(((t, e) => { + let {retain: n, attributes: r} = e; + return n ? (r && Object.keys(r).forEach((e => { + [G.blotName, Z.blotName].includes(e) && this.formatAt(t, n, e, r[e]) + })), t + n) : t + }), 0) + } + this.cachedText = n, this.forceNext = !1 + } + } + + html(t, e) { + const [n] = this.children.find(t); + return `
    \n${(0, V.X)(this.code(t, e))}\n
    ` + } + + optimize(t) { + if (super.optimize(t), null != this.parent && null != this.children.head && null != this.uiNode) { + const t = G.formats(this.children.head.domNode); + t !== this.uiNode.value && (this.uiNode.value = t) + } + } + } + + X.allowedChildren = [G], G.requiredContainer = X, G.allowedChildren = [Z, $.A, V.A, H.A]; + + class Q extends F.A { + static register() { + p.Ay.register(Z, !0), p.Ay.register(G, !0), p.Ay.register(X, !0) + } + + constructor(t, e) { + if (super(t, e), null == this.options.hljs) throw new Error("Syntax module requires highlight.js. Please include the library on the page before Quill."); + this.languages = this.options.languages.reduce(((t, e) => { + let {key: n} = e; + return t[n] = !0, t + }), {}), this.highlightBlot = this.highlightBlot.bind(this), this.initListener(), this.initTimer() + } + + initListener() { + this.quill.on(p.Ay.events.SCROLL_BLOT_MOUNT, (t => { + if (!(t instanceof X)) return; + const e = this.quill.root.ownerDocument.createElement("select"); + this.options.languages.forEach((t => { + let {key: n, label: r} = t; + const i = e.ownerDocument.createElement("option"); + i.textContent = r, i.setAttribute("value", n), e.appendChild(i) + })), e.addEventListener("change", (() => { + t.format(G.blotName, e.value), this.quill.root.focus(), this.highlight(t, !0) + })), null == t.uiNode && (t.attachUI(e), t.children.head && (e.value = G.formats(t.children.head.domNode))) + })) + } + + initTimer() { + let t = null; + this.quill.on(p.Ay.events.SCROLL_OPTIMIZE, (() => { + t && clearTimeout(t), t = setTimeout((() => { + this.highlight(), t = null + }), this.options.interval) + })) + } + + highlight() { + let t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : null, + e = arguments.length > 1 && void 0 !== arguments[1] && arguments[1]; + if (this.quill.selection.composing) return; + this.quill.update(p.Ay.sources.USER); + const n = this.quill.getSelection(); + (null == t ? this.quill.scroll.descendants(X) : [t]).forEach((t => { + t.highlight(this.highlightBlot, e) + })), this.quill.update(p.Ay.sources.SILENT), null != n && this.quill.setSelection(n, p.Ay.sources.SILENT) + } + + highlightBlot(t) { + let e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : "plain"; + if (e = this.languages[e] ? e : "plain", "plain" === e) return (0, V.X)(t).split("\n").reduce(((t, n, r) => (0 !== r && t.insert("\n", {[D.Ay.blotName]: e}), t.insert(n))), new (z())); + const n = this.quill.root.ownerDocument.createElement("div"); + return n.classList.add(D.Ay.className), n.innerHTML = ((t, e, n) => { + if ("string" == typeof t.versionString) { + const r = t.versionString.split(".")[0]; + if (parseInt(r, 10) >= 11) return t.highlight(n, {language: e}).value + } + return t.highlight(e, n).value + })(this.options.hljs, e, t), (0, K.hV)(this.quill.scroll, n, [(t, e) => { + const n = W.value(t); + return n ? e.compose((new (z())).retain(e.length(), {[Z.blotName]: n})) : e + }], [(t, n) => t.data.split("\n").reduce(((t, n, r) => (0 !== r && t.insert("\n", {[D.Ay.blotName]: e}), t.insert(n))), n)], new WeakMap) + } + } + + Q.DEFAULTS = { + hljs: window.hljs, + interval: 1e3, + languages: [{key: "plain", label: "Plain"}, {key: "bash", label: "Bash"}, { + key: "cpp", + label: "C++" + }, {key: "cs", label: "C#"}, {key: "css", label: "CSS"}, {key: "diff", label: "Diff"}, { + key: "xml", + label: "HTML/XML" + }, {key: "java", label: "Java"}, {key: "javascript", label: "JavaScript"}, { + key: "markdown", + label: "Markdown" + }, {key: "php", label: "PHP"}, {key: "python", label: "Python"}, { + key: "ruby", + label: "Ruby" + }, {key: "sql", label: "SQL"}] + }; + + class J extends a.Ay { + static blotName = "table"; + static tagName = "TD"; + + static create(t) { + const e = super.create(); + return t ? e.setAttribute("data-row", t) : e.setAttribute("data-row", nt()), e + } + + static formats(t) { + if (t.hasAttribute("data-row")) return t.getAttribute("data-row") + } + + cellOffset() { + return this.parent ? this.parent.children.indexOf(this) : -1 + } + + format(t, e) { + t === J.blotName && e ? this.domNode.setAttribute("data-row", e) : super.format(t, e) + } + + row() { + return this.parent + } + + rowOffset() { + return this.row() ? this.row().rowOffset() : -1 + } + + table() { + return this.row() && this.row().table() + } + } + + class Y extends f.A { + static blotName = "table-row"; + static tagName = "TR"; + + checkMerge() { + if (super.checkMerge() && null != this.next.children.head) { + const t = this.children.head.formats(), e = this.children.tail.formats(), + n = this.next.children.head.formats(), r = this.next.children.tail.formats(); + return t.table === e.table && t.table === n.table && t.table === r.table + } + return !1 + } + + optimize(t) { + super.optimize(t), this.children.forEach((t => { + if (null == t.next) return; + const e = t.formats(), n = t.next.formats(); + if (e.table !== n.table) { + const e = this.splitAfter(t); + e && e.optimize(), this.prev && this.prev.optimize() + } + })) + } + + rowOffset() { + return this.parent ? this.parent.children.indexOf(this) : -1 + } + + table() { + return this.parent && this.parent.parent + } + } + + class tt extends f.A { + static blotName = "table-body"; + static tagName = "TBODY" + } + + class et extends f.A { + static blotName = "table-container"; + static tagName = "TABLE"; + + balanceCells() { + const t = this.descendants(Y), e = t.reduce(((t, e) => Math.max(e.children.length, t)), 0); + t.forEach((t => { + new Array(e - t.children.length).fill(0).forEach((() => { + let e; + null != t.children.head && (e = J.formats(t.children.head.domNode)); + const n = this.scroll.create(J.blotName, e); + t.appendChild(n), n.optimize() + })) + })) + } + + cells(t) { + return this.rows().map((e => e.children.at(t))) + } + + deleteColumn(t) { + const [e] = this.descendant(tt); + null != e && null != e.children.head && e.children.forEach((e => { + const n = e.children.at(t); + null != n && n.remove() + })) + } + + insertColumn(t) { + const [e] = this.descendant(tt); + null != e && null != e.children.head && e.children.forEach((e => { + const n = e.children.at(t), r = J.formats(e.children.head.domNode), + i = this.scroll.create(J.blotName, r); + e.insertBefore(i, n) + })) + } + + insertRow(t) { + const [e] = this.descendant(tt); + if (null == e || null == e.children.head) return; + const n = nt(), r = this.scroll.create(Y.blotName); + e.children.head.children.forEach((() => { + const t = this.scroll.create(J.blotName, n); + r.appendChild(t) + })); + const i = e.children.at(t); + e.insertBefore(r, i) + } + + rows() { + const t = this.children.head; + return null == t ? [] : t.children.map((t => t)) + } + } + + function nt() { + return `row-${Math.random().toString(36).slice(2, 6)}` + } + + et.allowedChildren = [tt], tt.requiredContainer = et, tt.allowedChildren = [Y], Y.requiredContainer = tt, Y.allowedChildren = [J], J.requiredContainer = Y; + + class rt extends F.A { + static register() { + p.Ay.register(J), p.Ay.register(Y), p.Ay.register(tt), p.Ay.register(et) + } + + constructor() { + super(...arguments), this.listenBalanceCells() + } + + balanceTables() { + this.quill.scroll.descendants(et).forEach((t => { + t.balanceCells() + })) + } + + deleteColumn() { + const [t, , e] = this.getTable(); + null != e && (t.deleteColumn(e.cellOffset()), this.quill.update(p.Ay.sources.USER)) + } + + deleteRow() { + const [, t] = this.getTable(); + null != t && (t.remove(), this.quill.update(p.Ay.sources.USER)) + } + + deleteTable() { + const [t] = this.getTable(); + if (null == t) return; + const e = t.offset(); + t.remove(), this.quill.update(p.Ay.sources.USER), this.quill.setSelection(e, p.Ay.sources.SILENT) + } + + getTable() { + let t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : this.quill.getSelection(); + if (null == t) return [null, null, null, -1]; + const [e, n] = this.quill.getLine(t.index); + if (null == e || e.statics.blotName !== J.blotName) return [null, null, null, -1]; + const r = e.parent; + return [r.parent.parent, r, e, n] + } + + insertColumn(t) { + const e = this.quill.getSelection(); + if (!e) return; + const [n, r, i] = this.getTable(e); + if (null == i) return; + const s = i.cellOffset(); + n.insertColumn(s + t), this.quill.update(p.Ay.sources.USER); + let o = r.rowOffset(); + 0 === t && (o += 1), this.quill.setSelection(e.index + o, e.length, p.Ay.sources.SILENT) + } + + insertColumnLeft() { + this.insertColumn(0) + } + + insertColumnRight() { + this.insertColumn(1) + } + + insertRow(t) { + const e = this.quill.getSelection(); + if (!e) return; + const [n, r, i] = this.getTable(e); + if (null == i) return; + const s = r.rowOffset(); + n.insertRow(s + t), this.quill.update(p.Ay.sources.USER), t > 0 ? this.quill.setSelection(e, p.Ay.sources.SILENT) : this.quill.setSelection(e.index + r.children.length, e.length, p.Ay.sources.SILENT) + } + + insertRowAbove() { + this.insertRow(0) + } + + insertRowBelow() { + this.insertRow(1) + } + + insertTable(t, e) { + const n = this.quill.getSelection(); + if (null == n) return; + const r = new Array(t).fill(0).reduce((t => { + const n = new Array(e).fill("\n").join(""); + return t.insert(n, {table: nt()}) + }), (new (z())).retain(n.index)); + this.quill.updateContents(r, p.Ay.sources.USER), this.quill.setSelection(n.index, p.Ay.sources.SILENT), this.balanceTables() + } + + listenBalanceCells() { + this.quill.on(p.Ay.events.SCROLL_OPTIMIZE, (t => { + t.some((t => !!["TD", "TR", "TBODY", "TABLE"].includes(t.target.tagName) && (this.quill.once(p.Ay.events.TEXT_CHANGE, ((t, e, n) => { + n === p.Ay.sources.USER && this.balanceTables() + })), !0))) + })) + } + } + + var it = rt; + const st = (0, n(6078).A)("quill:toolbar"); + + class ot extends F.A { + constructor(t, e) { + if (super(t, e), Array.isArray(this.options.container)) { + const e = document.createElement("div"); + e.setAttribute("role", "toolbar"), function (t, e) { + Array.isArray(e[0]) || (e = [e]), e.forEach((e => { + const n = document.createElement("span"); + n.classList.add("ql-formats"), e.forEach((t => { + if ("string" == typeof t) lt(n, t); else { + const e = Object.keys(t)[0], r = t[e]; + Array.isArray(r) ? function (t, e, n) { + const r = document.createElement("select"); + r.classList.add(`ql-${e}`), n.forEach((t => { + const e = document.createElement("option"); + !1 !== t ? e.setAttribute("value", String(t)) : e.setAttribute("selected", "selected"), r.appendChild(e) + })), t.appendChild(r) + }(n, e, r) : lt(n, e, r) + } + })), t.appendChild(n) + })) + }(e, this.options.container), t.container?.parentNode?.insertBefore(e, t.container), this.container = e + } else "string" == typeof this.options.container ? this.container = document.querySelector(this.options.container) : this.container = this.options.container; + this.container instanceof HTMLElement ? (this.container.classList.add("ql-toolbar"), this.controls = [], this.handlers = {}, this.options.handlers && Object.keys(this.options.handlers).forEach((t => { + const e = this.options.handlers?.[t]; + e && this.addHandler(t, e) + })), Array.from(this.container.querySelectorAll("button, select")).forEach((t => { + this.attach(t) + })), this.quill.on(p.Ay.events.EDITOR_CHANGE, (() => { + const [t] = this.quill.selection.getRange(); + this.update(t) + }))) : st.error("Container required for toolbar", this.options) + } + + addHandler(t, e) { + this.handlers[t] = e + } + + attach(t) { + let e = Array.from(t.classList).find((t => 0 === t.indexOf("ql-"))); + if (!e) return; + if (e = e.slice(3), "BUTTON" === t.tagName && t.setAttribute("type", "button"), null == this.handlers[e] && null == this.quill.scroll.query(e)) return void st.warn("ignoring attaching to nonexistent format", e, t); + const n = "SELECT" === t.tagName ? "change" : "click"; + t.addEventListener(n, (n => { + let r; + if ("SELECT" === t.tagName) { + if (t.selectedIndex < 0) return; + const e = t.options[t.selectedIndex]; + r = !e.hasAttribute("selected") && (e.value || !1) + } else r = !t.classList.contains("ql-active") && (t.value || !t.hasAttribute("value")), n.preventDefault(); + this.quill.focus(); + const [i] = this.quill.selection.getRange(); + if (null != this.handlers[e]) this.handlers[e].call(this, r); else if (this.quill.scroll.query(e).prototype instanceof s.EmbedBlot) { + if (r = prompt(`Enter ${e}`), !r) return; + this.quill.updateContents((new (z())).retain(i.index).delete(i.length).insert({[e]: r}), p.Ay.sources.USER) + } else this.quill.format(e, r, p.Ay.sources.USER); + this.update(i) + })), this.controls.push([e, t]) + } + + update(t) { + const e = null == t ? {} : this.quill.getFormat(t); + this.controls.forEach((n => { + const [r, i] = n; + if ("SELECT" === i.tagName) { + let n = null; + if (null == t) n = null; else if (null == e[r]) n = i.querySelector("option[selected]"); else if (!Array.isArray(e[r])) { + let t = e[r]; + "string" == typeof t && (t = t.replace(/"/g, '\\"')), n = i.querySelector(`option[value="${t}"]`) + } + null == n ? (i.value = "", i.selectedIndex = -1) : n.selected = !0 + } else if (null == t) i.classList.remove("ql-active"), i.setAttribute("aria-pressed", "false"); else if (i.hasAttribute("value")) { + const t = e[r], + n = t === i.getAttribute("value") || null != t && t.toString() === i.getAttribute("value") || null == t && !i.getAttribute("value"); + i.classList.toggle("ql-active", n), i.setAttribute("aria-pressed", n.toString()) + } else { + const t = null != e[r]; + i.classList.toggle("ql-active", t), i.setAttribute("aria-pressed", t.toString()) + } + })) + } + } + + function lt(t, e, n) { + const r = document.createElement("button"); + r.setAttribute("type", "button"), r.classList.add(`ql-${e}`), r.setAttribute("aria-pressed", "false"), null != n ? (r.value = n, r.setAttribute("aria-label", `${e}: ${n}`)) : r.setAttribute("aria-label", e), t.appendChild(r) + } + + ot.DEFAULTS = {}, ot.DEFAULTS = { + container: null, handlers: { + clean() { + const t = this.quill.getSelection(); + if (null != t) if (0 === t.length) { + const t = this.quill.getFormat(); + Object.keys(t).forEach((t => { + null != this.quill.scroll.query(t, s.Scope.INLINE) && this.quill.format(t, !1, p.Ay.sources.USER) + })) + } else this.quill.removeFormat(t.index, t.length, p.Ay.sources.USER) + }, direction(t) { + const {align: e} = this.quill.getFormat(); + "rtl" === t && null == e ? this.quill.format("align", "right", p.Ay.sources.USER) : t || "right" !== e || this.quill.format("align", !1, p.Ay.sources.USER), this.quill.format("direction", t, p.Ay.sources.USER) + }, indent(t) { + const e = this.quill.getSelection(), n = this.quill.getFormat(e), + r = parseInt(n.indent || 0, 10); + if ("+1" === t || "-1" === t) { + let e = "+1" === t ? 1 : -1; + "rtl" === n.direction && (e *= -1), this.quill.format("indent", r + e, p.Ay.sources.USER) + } + }, link(t) { + !0 === t && (t = prompt("Enter link URL:")), this.quill.format("link", t, p.Ay.sources.USER) + }, list(t) { + const e = this.quill.getSelection(), n = this.quill.getFormat(e); + "check" === t ? "checked" === n.list || "unchecked" === n.list ? this.quill.format("list", !1, p.Ay.sources.USER) : this.quill.format("list", "unchecked", p.Ay.sources.USER) : this.quill.format("list", t, p.Ay.sources.USER) + } + } + }; + const at = ''; + var ct = { + align: { + "": '', + center: '', + right: '', + justify: '' + }, + background: '', + blockquote: '', + bold: '', + clean: '', + code: at, + "code-block": at, + color: '', + direction: { + "": '', + rtl: '' + }, + formula: '', + header: { + 1: '', + 2: '', + 3: '', + 4: '', + 5: '', + 6: '' + }, + italic: '', + image: '', + indent: { + "+1": '', + "-1": '' + }, + link: '', + list: { + bullet: '', + check: '', + ordered: '' + }, + script: { + sub: '', + super: '' + }, + strike: '', + table: '', + underline: '', + video: '' + }; + let ut = 0; + + function ht(t, e) { + t.setAttribute(e, `${!("true" === t.getAttribute(e))}`) + } + + var dt = class { + constructor(t) { + this.select = t, this.container = document.createElement("span"), this.buildPicker(), this.select.style.display = "none", this.select.parentNode.insertBefore(this.container, this.select), this.label.addEventListener("mousedown", (() => { + this.togglePicker() + })), this.label.addEventListener("keydown", (t => { + switch (t.key) { + case"Enter": + this.togglePicker(); + break; + case"Escape": + this.escape(), t.preventDefault() + } + })), this.select.addEventListener("change", this.update.bind(this)) + } + + togglePicker() { + this.container.classList.toggle("ql-expanded"), ht(this.label, "aria-expanded"), ht(this.options, "aria-hidden") + } + + buildItem(t) { + const e = document.createElement("span"); + e.tabIndex = "0", e.setAttribute("role", "button"), e.classList.add("ql-picker-item"); + const n = t.getAttribute("value"); + return n && e.setAttribute("data-value", n), t.textContent && e.setAttribute("data-label", t.textContent), e.addEventListener("click", (() => { + this.selectItem(e, !0) + })), e.addEventListener("keydown", (t => { + switch (t.key) { + case"Enter": + this.selectItem(e, !0), t.preventDefault(); + break; + case"Escape": + this.escape(), t.preventDefault() + } + })), e + } + + buildLabel() { + const t = document.createElement("span"); + return t.classList.add("ql-picker-label"), t.innerHTML = '', t.tabIndex = "0", t.setAttribute("role", "button"), t.setAttribute("aria-expanded", "false"), this.container.appendChild(t), t + } + + buildOptions() { + const t = document.createElement("span"); + t.classList.add("ql-picker-options"), t.setAttribute("aria-hidden", "true"), t.tabIndex = "-1", t.id = `ql-picker-options-${ut}`, ut += 1, this.label.setAttribute("aria-controls", t.id), this.options = t, Array.from(this.select.options).forEach((e => { + const n = this.buildItem(e); + t.appendChild(n), !0 === e.selected && this.selectItem(n) + })), this.container.appendChild(t) + } + + buildPicker() { + Array.from(this.select.attributes).forEach((t => { + this.container.setAttribute(t.name, t.value) + })), this.container.classList.add("ql-picker"), this.label = this.buildLabel(), this.buildOptions() + } + + escape() { + this.close(), setTimeout((() => this.label.focus()), 1) + } + + close() { + this.container.classList.remove("ql-expanded"), this.label.setAttribute("aria-expanded", "false"), this.options.setAttribute("aria-hidden", "true") + } + + selectItem(t) { + let e = arguments.length > 1 && void 0 !== arguments[1] && arguments[1]; + const n = this.container.querySelector(".ql-selected"); + t !== n && (null != n && n.classList.remove("ql-selected"), null != t && (t.classList.add("ql-selected"), this.select.selectedIndex = Array.from(t.parentNode.children).indexOf(t), t.hasAttribute("data-value") ? this.label.setAttribute("data-value", t.getAttribute("data-value")) : this.label.removeAttribute("data-value"), t.hasAttribute("data-label") ? this.label.setAttribute("data-label", t.getAttribute("data-label")) : this.label.removeAttribute("data-label"), e && (this.select.dispatchEvent(new Event("change")), this.close()))) + } + + update() { + let t; + if (this.select.selectedIndex > -1) { + const e = this.container.querySelector(".ql-picker-options").children[this.select.selectedIndex]; + t = this.select.options[this.select.selectedIndex], this.selectItem(e) + } else this.selectItem(null); + const e = null != t && t !== this.select.querySelector("option[selected]"); + this.label.classList.toggle("ql-active", e) + } + }, ft = class extends dt { + constructor(t, e) { + super(t), this.label.innerHTML = e, this.container.classList.add("ql-color-picker"), Array.from(this.container.querySelectorAll(".ql-picker-item")).slice(0, 7).forEach((t => { + t.classList.add("ql-primary") + })) + } + + buildItem(t) { + const e = super.buildItem(t); + return e.style.backgroundColor = t.getAttribute("value") || "", e + } + + selectItem(t, e) { + super.selectItem(t, e); + const n = this.label.querySelector(".ql-color-label"), r = t && t.getAttribute("data-value") || ""; + n && ("line" === n.tagName ? n.style.stroke = r : n.style.fill = r) + } + }, pt = class extends dt { + constructor(t, e) { + super(t), this.container.classList.add("ql-icon-picker"), Array.from(this.container.querySelectorAll(".ql-picker-item")).forEach((t => { + t.innerHTML = e[t.getAttribute("data-value") || ""] + })), this.defaultItem = this.container.querySelector(".ql-selected"), this.selectItem(this.defaultItem) + } + + selectItem(t, e) { + super.selectItem(t, e); + const n = t || this.defaultItem; + if (null != n) { + if (this.label.innerHTML === n.innerHTML) return; + this.label.innerHTML = n.innerHTML + } + } + }, gt = class { + constructor(t, e) { + this.quill = t, this.boundsContainer = e || document.body, this.root = t.addContainer("ql-tooltip"), this.root.innerHTML = this.constructor.TEMPLATE, (t => { + const {overflowY: e} = getComputedStyle(t, null); + return "visible" !== e && "clip" !== e + })(this.quill.root) && this.quill.root.addEventListener("scroll", (() => { + this.root.style.marginTop = -1 * this.quill.root.scrollTop + "px" + })), this.hide() + } + + hide() { + this.root.classList.add("ql-hidden") + } + + position(t) { + const e = t.left + t.width / 2 - this.root.offsetWidth / 2, + n = t.bottom + this.quill.root.scrollTop; + this.root.style.left = `${e}px`, this.root.style.top = `${n}px`, this.root.classList.remove("ql-flip"); + const r = this.boundsContainer.getBoundingClientRect(), i = this.root.getBoundingClientRect(); + let s = 0; + if (i.right > r.right && (s = r.right - i.right, this.root.style.left = `${e + s}px`), i.left < r.left && (s = r.left - i.left, this.root.style.left = `${e + s}px`), i.bottom > r.bottom) { + const e = i.bottom - i.top, r = t.bottom - t.top + e; + this.root.style.top = n - r + "px", this.root.classList.add("ql-flip") + } + return s + } + + show() { + this.root.classList.remove("ql-editing"), this.root.classList.remove("ql-hidden") + } + }, mt = n(8347), bt = n(5374), yt = n(9609); + const vt = [!1, "center", "right", "justify"], + At = ["#000000", "#e60000", "#ff9900", "#ffff00", "#008a00", "#0066cc", "#9933ff", "#ffffff", "#facccc", "#ffebcc", "#ffffcc", "#cce8cc", "#cce0f5", "#ebd6ff", "#bbbbbb", "#f06666", "#ffc266", "#ffff66", "#66b966", "#66a3e0", "#c285ff", "#888888", "#a10000", "#b26b00", "#b2b200", "#006100", "#0047b2", "#6b24b2", "#444444", "#5c0000", "#663d00", "#666600", "#003700", "#002966", "#3d1466"], + xt = [!1, "serif", "monospace"], Nt = ["1", "2", "3", !1], Et = ["small", !1, "large", "huge"]; + + class wt extends yt.A { + constructor(t, e) { + super(t, e); + const n = e => { + document.body.contains(t.root) ? (null == this.tooltip || this.tooltip.root.contains(e.target) || document.activeElement === this.tooltip.textbox || this.quill.hasFocus() || this.tooltip.hide(), null != this.pickers && this.pickers.forEach((t => { + t.container.contains(e.target) || t.close() + }))) : document.body.removeEventListener("click", n) + }; + t.emitter.listenDOM("click", document.body, n) + } + + addModule(t) { + const e = super.addModule(t); + return "toolbar" === t && this.extendToolbar(e), e + } + + buildButtons(t, e) { + Array.from(t).forEach((t => { + (t.getAttribute("class") || "").split(/\s+/).forEach((n => { + if (n.startsWith("ql-") && (n = n.slice(3), null != e[n])) if ("direction" === n) t.innerHTML = e[n][""] + e[n].rtl; else if ("string" == typeof e[n]) t.innerHTML = e[n]; else { + const r = t.value || ""; + null != r && e[n][r] && (t.innerHTML = e[n][r]) + } + })) + })) + } + + buildPickers(t, e) { + this.pickers = Array.from(t).map((t => { + if (t.classList.contains("ql-align") && (null == t.querySelector("option") && kt(t, vt), "object" == typeof e.align)) return new pt(t, e.align); + if (t.classList.contains("ql-background") || t.classList.contains("ql-color")) { + const n = t.classList.contains("ql-background") ? "background" : "color"; + return null == t.querySelector("option") && kt(t, At, "background" === n ? "#ffffff" : "#000000"), new ft(t, e[n]) + } + return null == t.querySelector("option") && (t.classList.contains("ql-font") ? kt(t, xt) : t.classList.contains("ql-header") ? kt(t, Nt) : t.classList.contains("ql-size") && kt(t, Et)), new dt(t) + })), this.quill.on(bt.A.events.EDITOR_CHANGE, (() => { + this.pickers.forEach((t => { + t.update() + })) + })) + } + } + + wt.DEFAULTS = (0, mt.A)({}, yt.A.DEFAULTS, { + modules: { + toolbar: { + handlers: { + formula() { + this.quill.theme.tooltip.edit("formula") + }, image() { + let t = this.container.querySelector("input.ql-image[type=file]"); + null == t && (t = document.createElement("input"), t.setAttribute("type", "file"), t.setAttribute("accept", this.quill.uploader.options.mimetypes.join(", ")), t.classList.add("ql-image"), t.addEventListener("change", (() => { + const e = this.quill.getSelection(!0); + this.quill.uploader.upload(e, t.files), t.value = "" + })), this.container.appendChild(t)), t.click() + }, video() { + this.quill.theme.tooltip.edit("video") + } + } + } + } + }); + + class qt extends gt { + constructor(t, e) { + super(t, e), this.textbox = this.root.querySelector('input[type="text"]'), this.listen() + } + + listen() { + this.textbox.addEventListener("keydown", (t => { + "Enter" === t.key ? (this.save(), t.preventDefault()) : "Escape" === t.key && (this.cancel(), t.preventDefault()) + })) + } + + cancel() { + this.hide(), this.restoreFocus() + } + + edit() { + let t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : "link", + e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : null; + if (this.root.classList.remove("ql-hidden"), this.root.classList.add("ql-editing"), null == this.textbox) return; + null != e ? this.textbox.value = e : t !== this.root.getAttribute("data-mode") && (this.textbox.value = ""); + const n = this.quill.getBounds(this.quill.selection.savedRange); + null != n && this.position(n), this.textbox.select(), this.textbox.setAttribute("placeholder", this.textbox.getAttribute(`data-${t}`) || ""), this.root.setAttribute("data-mode", t) + } + + restoreFocus() { + this.quill.focus({preventScroll: !0}) + } + + save() { + let {value: t} = this.textbox; + switch (this.root.getAttribute("data-mode")) { + case"link": { + const {scrollTop: e} = this.quill.root; + this.linkRange ? (this.quill.formatText(this.linkRange, "link", t, bt.A.sources.USER), delete this.linkRange) : (this.restoreFocus(), this.quill.format("link", t, bt.A.sources.USER)), this.quill.root.scrollTop = e; + break + } + case"video": + t = function (t) { + let e = t.match(/^(?:(https?):\/\/)?(?:(?:www|m)\.)?youtube\.com\/watch.*v=([a-zA-Z0-9_-]+)/) || t.match(/^(?:(https?):\/\/)?(?:(?:www|m)\.)?youtu\.be\/([a-zA-Z0-9_-]+)/); + return e ? `${e[1] || "https"}://www.youtube.com/embed/${e[2]}?showinfo=0` : (e = t.match(/^(?:(https?):\/\/)?(?:www\.)?vimeo\.com\/(\d+)/)) ? `${e[1] || "https"}://player.vimeo.com/video/${e[2]}/` : t + }(t); + case"formula": { + if (!t) break; + const e = this.quill.getSelection(!0); + if (null != e) { + const n = e.index + e.length; + this.quill.insertEmbed(n, this.root.getAttribute("data-mode"), t, bt.A.sources.USER), "formula" === this.root.getAttribute("data-mode") && this.quill.insertText(n + 1, " ", bt.A.sources.USER), this.quill.setSelection(n + 2, bt.A.sources.USER) + } + break + } + } + this.textbox.value = "", this.hide() + } + } + + function kt(t, e) { + let n = arguments.length > 2 && void 0 !== arguments[2] && arguments[2]; + e.forEach((e => { + const r = document.createElement("option"); + e === n ? r.setAttribute("selected", "selected") : r.setAttribute("value", String(e)), t.appendChild(r) + })) + } + + var _t = n(8298); + const Lt = [["bold", "italic", "link"], [{header: 1}, {header: 2}, "blockquote"]]; + + class St extends qt { + static TEMPLATE = ['', '
    ', '', '', "
    "].join(""); + + constructor(t, e) { + super(t, e), this.quill.on(bt.A.events.EDITOR_CHANGE, ((t, e, n, r) => { + if (t === bt.A.events.SELECTION_CHANGE) if (null != e && e.length > 0 && r === bt.A.sources.USER) { + this.show(), this.root.style.left = "0px", this.root.style.width = "", this.root.style.width = `${this.root.offsetWidth}px`; + const t = this.quill.getLines(e.index, e.length); + if (1 === t.length) { + const t = this.quill.getBounds(e); + null != t && this.position(t) + } else { + const n = t[t.length - 1], r = this.quill.getIndex(n), + i = Math.min(n.length() - 1, e.index + e.length - r), + s = this.quill.getBounds(new _t.Q(r, i)); + null != s && this.position(s) + } + } else document.activeElement !== this.textbox && this.quill.hasFocus() && this.hide() + })) + } + + listen() { + super.listen(), this.root.querySelector(".ql-close").addEventListener("click", (() => { + this.root.classList.remove("ql-editing") + })), this.quill.on(bt.A.events.SCROLL_OPTIMIZE, (() => { + setTimeout((() => { + if (this.root.classList.contains("ql-hidden")) return; + const t = this.quill.getSelection(); + if (null != t) { + const e = this.quill.getBounds(t); + null != e && this.position(e) + } + }), 1) + })) + } + + cancel() { + this.show() + } + + position(t) { + const e = super.position(t), n = this.root.querySelector(".ql-tooltip-arrow"); + return n.style.marginLeft = "", 0 !== e && (n.style.marginLeft = -1 * e - n.offsetWidth / 2 + "px"), e + } + } + + class Ot extends wt { + constructor(t, e) { + null != e.modules.toolbar && null == e.modules.toolbar.container && (e.modules.toolbar.container = Lt), super(t, e), this.quill.container.classList.add("ql-bubble") + } + + extendToolbar(t) { + this.tooltip = new St(this.quill, this.options.bounds), null != t.container && (this.tooltip.root.appendChild(t.container), this.buildButtons(t.container.querySelectorAll("button"), ct), this.buildPickers(t.container.querySelectorAll("select"), ct)) + } + } + + Ot.DEFAULTS = (0, mt.A)({}, wt.DEFAULTS, { + modules: { + toolbar: { + handlers: { + link(t) { + t ? this.quill.theme.tooltip.edit() : this.quill.format("link", !1, p.Ay.sources.USER) + } + } + } + } + }); + const Tt = [[{header: ["1", "2", "3", !1]}], ["bold", "italic", "underline", "link"], [{list: "ordered"}, {list: "bullet"}], ["clean"]]; + + class jt extends qt { + static TEMPLATE = ['', '', '', ''].join(""); + preview = this.root.querySelector("a.ql-preview"); + + listen() { + super.listen(), this.root.querySelector("a.ql-action").addEventListener("click", (t => { + this.root.classList.contains("ql-editing") ? this.save() : this.edit("link", this.preview.textContent), t.preventDefault() + })), this.root.querySelector("a.ql-remove").addEventListener("click", (t => { + if (null != this.linkRange) { + const t = this.linkRange; + this.restoreFocus(), this.quill.formatText(t, "link", !1, bt.A.sources.USER), delete this.linkRange + } + t.preventDefault(), this.hide() + })), this.quill.on(bt.A.events.SELECTION_CHANGE, ((t, e, n) => { + if (null != t) { + if (0 === t.length && n === bt.A.sources.USER) { + const [e, n] = this.quill.scroll.descendant(w, t.index); + if (null != e) { + this.linkRange = new _t.Q(t.index - n, e.length()); + const r = w.formats(e.domNode); + this.preview.textContent = r, this.preview.setAttribute("href", r), this.show(); + const i = this.quill.getBounds(this.linkRange); + return void (null != i && this.position(i)) + } + } else delete this.linkRange; + this.hide() + } + })) + } + + show() { + super.show(), this.root.removeAttribute("data-mode") + } + } + + class Ct extends wt { + constructor(t, e) { + null != e.modules.toolbar && null == e.modules.toolbar.container && (e.modules.toolbar.container = Tt), super(t, e), this.quill.container.classList.add("ql-snow") + } + + extendToolbar(t) { + null != t.container && (t.container.classList.add("ql-snow"), this.buildButtons(t.container.querySelectorAll("button"), ct), this.buildPickers(t.container.querySelectorAll("select"), ct), this.tooltip = new jt(this.quill, this.options.bounds), t.container.querySelector(".ql-link") && this.quill.keyboard.addBinding({ + key: "k", + shortKey: !0 + }, ((e, n) => { + t.handlers.link.call(t, !n.format.link) + }))) + } + } + + Ct.DEFAULTS = (0, mt.A)({}, wt.DEFAULTS, { + modules: { + toolbar: { + handlers: { + link(t) { + if (t) { + const t = this.quill.getSelection(); + if (null == t || 0 === t.length) return; + let e = this.quill.getText(t); + /^\S+@\S+\.\S+$/.test(e) && 0 !== e.indexOf("mailto:") && (e = `mailto:${e}`); + const {tooltip: n} = this.quill.theme; + n.edit("link", e) + } else this.quill.format("link", !1, p.Ay.sources.USER) + } + } + } + } + }); + var Rt = Ct; + t.default.register({ + "attributors/attribute/direction": i.Mc, + "attributors/class/align": e.qh, + "attributors/class/background": b.l, + "attributors/class/color": y.g3, + "attributors/class/direction": i.sY, + "attributors/class/font": v.q, + "attributors/class/size": A.U, + "attributors/style/align": e.Hu, + "attributors/style/background": b.s, + "attributors/style/color": y.JM, + "attributors/style/direction": i.VL, + "attributors/style/font": v.z, + "attributors/style/size": A.r + }, !0), t.default.register({ + "formats/align": e.qh, + "formats/direction": i.sY, + "formats/indent": l, + "formats/background": b.s, + "formats/color": y.JM, + "formats/font": v.q, + "formats/size": A.U, + "formats/blockquote": u, + "formats/code-block": D.Ay, + "formats/header": d, + "formats/list": m, + "formats/bold": E, + "formats/code": D.Cy, + "formats/italic": class extends E { + static blotName = "italic"; + static tagName = ["EM", "I"] + }, + "formats/link": w, + "formats/script": _, + "formats/strike": class extends E { + static blotName = "strike"; + static tagName = ["S", "STRIKE"] + }, + "formats/underline": S, + "formats/formula": j, + "formats/image": I, + "formats/video": U, + "modules/syntax": Q, + "modules/table": it, + "modules/toolbar": ot, + "themes/bubble": Ot, + "themes/snow": Rt, + "ui/icons": ct, + "ui/picker": dt, + "ui/icon-picker": pt, + "ui/color-picker": ft, + "ui/tooltip": gt + }, !0); + var It = t.default + }(), r.default + }() +})); \ No newline at end of file diff --git a/webseite/classes/TopicData.php b/webseite/classes/TopicData.php index ba32690..fde0cc2 100644 --- a/webseite/classes/TopicData.php +++ b/webseite/classes/TopicData.php @@ -1,8 +1,5 @@ cleanupRelatedTopics(); - $result->cleanupFiles(); + //$result->cleanupFiles(); return $result; } @@ -234,7 +238,7 @@ class TopicData public function save(): bool { $this->cleanupRelatedTopics(); - $this->cleanupFiles(); + //$this->cleanupFiles(); $data = array(); $data["displayName"] = $this->displayName; @@ -312,11 +316,13 @@ class TopicData */ public function deleteDownload(string $name): bool { - if (!isset($this->files[$name])) { + if (!in_array($name, $this->files)) { + echo "a"; return false; } if (!unlink(Config::getTopicDirectory($this->getSubjectId(), $this->getId()) . "downloads/$name")) { + echo "b"; return false; } @@ -348,6 +354,52 @@ class TopicData return true; } + /** + * Erstellt eine Datei aus übergebenen Daten + * @param string $name Dateiname + * @param string $image Bilddaten als Dateiinhalt, z.B. von file_get_contents() + * @return bool true wenn erfolgreich, sonst false + */ + public function uploadImage(string $name, string $image): bool + { + $imageDirectory = Config::getTopicDirectory($this->getSubjectId(), $this->getId()) . "images/"; + + if (!is_dir($imageDirectory)) { + if (!mkdir($imageDirectory)) { + return false; + } + } + + if(!file_put_contents("$imageDirectory/$name", $image)) { + return false; + } + + return true; + } + + /** + * Löscht alle derzeit gespeicherten Bilder des Themas + * @return bool true wenn erfolgreich, sonst false + */ + public function deleteAllImages(): bool + { + return Util::delete(Config::getTopicDirectory($this->getSubjectId(), $this->getId()) . "images/"); + } + + /** + * Löscht ein Bild des Themas + * @param string $name Dateiname + * @return bool true, wenn erfolgreich, sonst false + */ + public function deleteImage(string $name): bool + { + if (!unlink(Config::getTopicDirectory($this->getSubjectId(), $this->getId()) . "images/$name")) { + return false; + } + + return true; + } + /** * Prüft für alle verwandten Themen, ob diese auch existieren. Wenn nicht, wird es aus der Liste entfernt * @return bool true, wenn Elemente entfernt wurden, sonst false @@ -398,20 +450,6 @@ class TopicData return $changed; } - /** - * Löscht ein Bild des Themas - * @param string $name Dateiname - * @return bool true, wenn erfolgreich, sonst false - */ - public function deleteImage(string $name): bool - { - if (!unlink(Config::getTopicDirectory($this->getSubjectId(), $this->getId()) . "images/$name")) { - return false; - } - - return true; - } - /** * Löscht das Thema inklusive aller zugehörigen Dateien * @return bool true, wenn erfolgreich gelöscht, sonst false @@ -437,6 +475,11 @@ class TopicData return true; } + public function removeAllTasks() + { + $this->tasks = array(); + } + public function getId(): string { return $this->id; @@ -513,7 +556,9 @@ class TopicData */ public function getFinishedArticle(): string { - return str_replace('$TOPICPATH', Config::getTopicDirectory($this->subjectId, $this->id) . "images", $this->article); + $a = str_replace('__TOPICPATH__', Config::getTopicDirectory($this->subjectId, $this->id) . "images", $this->article); + + return $a; } public function getArticle(): string diff --git a/webseite/classes/Util.php b/webseite/classes/Util.php index 2802e8a..ecb9366 100644 --- a/webseite/classes/Util.php +++ b/webseite/classes/Util.php @@ -112,7 +112,7 @@ class Util self::delete($path . "/" . $entry); } - + rmdir($path); } return true; diff --git a/webseite/config/subjects/deutsch/topics/adverbiale-bestimmung/article.html b/webseite/config/subjects/deutsch/topics/adverbiale-bestimmung/article.html index 5b67595..c9e53c3 100644 --- a/webseite/config/subjects/deutsch/topics/adverbiale-bestimmung/article.html +++ b/webseite/config/subjects/deutsch/topics/adverbiale-bestimmung/article.html @@ -1,46 +1 @@ -Adverbiale Bestimmungen sind ein wichtiger Teil eines Satzes, weil sie uns zusätzliche Informationen geben. Sie erklären, wann, wo, wie oder warum etwas passiert. Ohne adverbiale Bestimmungen wären viele Sätze unvollständig oder weniger genau. Sie sind also sehr hilfreich, um unsere Sprache klarer und lebendiger zu machen. -

    -Arten von adverbialen Bestimmungen -

    -Es gibt vier Hauptarten von adverbialen Bestimmungen. Lass uns jede genauer anschauen: -

    -1. Adverbiale Bestimmung der Zeit (Temporal)
    -Diese Art von adverbialer Bestimmung gibt an, wann etwas passiert. Sie beantwortet die Frage "Wann?".
    -- Beispiel: Morgen gehe ich schwimmen.
    -- Hier gibt "morgen" an, wann das Schwimmen stattfindet.
    -
    -2. Adverbiale Bestimmung des Ortes (Lokal)
    -Diese adverbiale Bestimmung sagt uns, wo etwas geschieht. Sie beantwortet die Frage "Wo?".
    -- Beispiel: Der Hund bellt im Garten.
    -- "im Garten" zeigt, an welchem Ort der Hund bellt.
    -
    -3. Adverbiale Bestimmung der Art und Weise (Modal)
    -Diese Art gibt an, wie etwas passiert. Sie beantwortet die Frage "Wie?".
    -- Beispiel: Der Hund bellt laut.
    -- "laut" gibt an, auf welche Weise der Hund bellt.
    -
    -4. Adverbiale Bestimmung des Grundes (Kausal)
    -Diese adverbiale Bestimmung erklärt, warum etwas passiert. Sie beantwortet die Frage "Warum?".
    -- Beispiel: Der Hund bellt wegen des Lärms.
    -- "wegen des Lärms" gibt den Grund an, warum der Hund bellt.
    -
    -Wie erkennt man adverbiale Bestimmungen?
    -
    -Eine einfache Methode, um adverbiale Bestimmungen zu erkennen, ist, die Fragen "Wann?", "Wo?", "Wie?" oder "Warum?" zu stellen. Wenn eine Wortgruppe diese Fragen beantwortet, handelt es sich wahrscheinlich um eine adverbiale Bestimmung. Ein weiterer Hinweis ist, dass adverbiale Bestimmungen oft im Satz verschoben werden können, ohne dass der Satz unverständlich wird. -

    - -Beispiele für das Erkennen von adverbialen Bestimmungen

    - -- Der Lehrer erklärt am Morgen die Hausaufgaben. ("am Morgen" ist die adverbiale Bestimmung der Zeit, weil sie sagt, wann etwas passiert.) -
    -- Die Katze schläft auf dem Sofa. ("auf dem Sofa" ist die adverbiale Bestimmung des Ortes, weil sie angibt, wo etwas passiert.) -
    -- Der Junge rennt schnell zur Schule. ("schnell" ist die adverbiale Bestimmung der Art und Weise, weil sie beschreibt, wie er rennt.) -
    -- Wegen des Regens bleiben wir zu Hause. ("wegen des Regens" ist die adverbiale Bestimmung des Grundes, weil sie erklärt, warum etwas passiert.) -

    - -Zusammenfassung

    - -Adverbiale Bestimmungen machen unsere Sätze detaillierter und genauer. Sie geben uns mehr Informationen darüber, wann, wo, wie oder warum etwas geschieht. Die vier Hauptarten der adverbialen Bestimmungen sind Zeit, Ort, Art und Weise und Grund. Wenn du die passenden Fragen stellst, kannst du adverbiale Bestimmungen leicht erkennen und deine eigenen Sätze damit besser machen! - +

    Adverbiale Bestimmungen sind ein wichtiger Teil eines Satzes, weil sie uns zusätzliche Informationen geben. Sie erklären, wann, wo, wie oder warum etwas passiert. Ohne adverbiale Bestimmungen wären viele Sätze unvollständig oder weniger genau. Sie sind also sehr hilfreich, um unsere Sprache klarer und lebendiger zu machen.

    Arten von adverbialen Bestimmungen


    Es gibt vier Hauptarten von adverbialen Bestimmungen. Lass uns jede genauer anschauen:


    1. Adverbiale Bestimmung der Zeit (Temporal)

    Diese Art von adverbialer Bestimmung gibt an, wann etwas passiert. Sie beantwortet die Frage "Wann?".

    • Beispiel: Morgen gehe ich schwimmen.
    • Hier gibt "morgen" an, wann das Schwimmen stattfindet.

    2. Adverbiale Bestimmung des Ortes (Lokal)

    Diese adverbiale Bestimmung sagt uns, wo etwas geschieht. Sie beantwortet die Frage "Wo?".

    • Beispiel: Der Hund bellt im Garten.
    • "im Garten" zeigt, an welchem Ort der Hund bellt.

    3. Adverbiale Bestimmung der Art und Weise (Modal)

    Diese Art gibt an, wie etwas passiert. Sie beantwortet die Frage "Wie?".

    • Beispiel: Der Hund bellt laut.
    • "laut" gibt an, auf welche Weise der Hund bellt.

    4. Adverbiale Bestimmung des Grundes (Kausal)

    Diese adverbiale Bestimmung erklärt, warum etwas passiert. Sie beantwortet die Frage "Warum?".

    • Beispiel: Der Hund bellt wegen des Lärms.
    • "wegen des Lärms" gibt den Grund an, warum der Hund bellt.

    Wie erkennt man adverbiale Bestimmungen?


    Eine einfache Methode, um adverbiale Bestimmungen zu erkennen, ist, die Fragen "Wann?", "Wo?", "Wie?" oder "Warum?" zu stellen. Wenn eine Wortgruppe diese Fragen beantwortet, handelt es sich wahrscheinlich um eine adverbiale Bestimmung. Ein weiterer Hinweis ist, dass adverbiale Bestimmungen oft im Satz verschoben werden können, ohne dass der Satz unverständlich wird.


    Beispiele für das Erkennen von adverbialen Bestimmungen


    • Der Lehrer erklärt am Morgen die Hausaufgaben. ("am Morgen" ist die adverbiale Bestimmung der Zeit, weil sie sagt, wann etwas passiert.)
    • Die Katze schläft auf dem Sofa. ("auf dem Sofa" ist die adverbiale Bestimmung des Ortes, weil sie angibt, wo etwas passiert.)
    • Der Junge rennt schnell zur Schule. ("schnell" ist die adverbiale Bestimmung der Art und Weise, weil sie beschreibt, wie er rennt.)
    • Wegen des Regens bleiben wir zu Hause. ("wegen des Regens" ist die adverbiale Bestimmung des Grundes, weil sie erklärt, warum etwas passiert.)

    Zusammenfassung


    Adverbiale Bestimmungen machen unsere Sätze detaillierter und genauer. Sie geben uns mehr Informationen darüber, wann, wo, wie oder warum etwas geschieht. Die vier Hauptarten der adverbialen Bestimmungen sind Zeit, Ort, Art und Weise und Grund. Wenn du die passenden Fragen stellst, kannst du adverbiale Bestimmungen leicht erkennen und deine eigenen Sätze damit besser machen!

    diff --git a/webseite/config/subjects/deutsch/topics/geschichten-erzaehlen/article.html b/webseite/config/subjects/deutsch/topics/geschichten-erzaehlen/article.html index a5a113c..2d30371 100644 --- a/webseite/config/subjects/deutsch/topics/geschichten-erzaehlen/article.html +++ b/webseite/config/subjects/deutsch/topics/geschichten-erzaehlen/article.html @@ -1,28 +1 @@ - -Ein Bild -
    - -Geschichten Erzählen: Warum sie so wichtig sind - -

    -Hast du schon mal eine spannende Geschichte gehört und konntest es kaum erwarten zu erfahren, wie sie endet? Geschichten zu erzählen ist etwas, das Menschen schon seit vielen tausend Jahren machen. Aber warum erzählen wir überhaupt Geschichten, und was macht sie so besonders? -

    -Geschichten zu erzählen ist eine der ältesten Arten, wie Menschen miteinander reden. Schon früher, als es keine Bücher oder das Internet gab, haben sich die Leute am Lagerfeuer versammelt und erzählt, was sie erlebt haben. Geschichten halfen ihnen, ihr Wissen weiterzugeben, sich gegenseitig zu unterhalten und über ihre Gefühle zu sprechen. Das ist auch heute noch so: Geschichten verbinden uns und lassen uns Neues lernen. -

    -In Geschichten geht es oft um Helden, Abenteuer oder Probleme, die gelöst werden müssen. Dabei gibt es viele spannende, lustige oder traurige Momente, die uns neugierig machen. Geschichten können uns zum Lachen bringen, uns Angst machen oder uns Mut geben. Manchmal lernen wir sogar etwas Neues über die Welt oder uns selbst. -

    -Um eine gute Geschichte zu erzählen, braucht man ein paar wichtige Bausteine. Erstmal braucht man eine Hauptfigur, auch Protagonist genannt. Diese Figur erlebt Abenteuer oder muss Probleme lösen. Eine Geschichte hat auch einen Anfang, der uns die Hauptfigur vorstellt, einen spannenden Mittelteil, in dem die Herausforderungen beschrieben werden, und ein Ende, in dem alles aufgelöst wird. Vielleicht hast du schon mal gemerkt, dass eine Geschichte besonders spannend wird, wenn es einen großen Konflikt oder ein Problem gibt, das gelöst werden muss. -

    -Hier sind ein paar Beispiele für gute Geschichten: -

    -1. Rotkäppchen: In dieser klassischen Märchengeschichte geht es um ein kleines Mädchen, das seine Großmutter besuchen möchte. Auf dem Weg trifft sie den bösen Wolf, der versucht, sie und ihre Großmutter zu täuschen. Das Abenteuer von Rotkäppchen zeigt, wie Mut und Klugheit helfen können, schwierige Situationen zu meistern. -

    -2. Harry Potter: Harry ist ein Junge, der erfährt, dass er ein Zauberer ist. Er erlebt viele Abenteuer in der Zauberschule Hogwarts und muss gegen den bösen Zauberer Voldemort kämpfen. Diese Geschichte zeigt, wie wichtig Freundschaft, Mut und das Gute im Leben sind. -

    -3. Der kleine Prinz: In dieser Geschichte geht es um einen kleinen Jungen, der von einem fernen Planeten kommt und viele seltsame Charaktere trifft. Der kleine Prinz lehrt uns, wie wichtig Freundschaft, Liebe und Verständnis sind. -

    -4. Deine eigene Geschichte: Stell dir vor, du hast einen Tag, an dem du ein spannendes Abenteuer erlebst. Zum Beispiel könntest du dich verlaufen und dabei neue Orte entdecken. Diese kleinen Erlebnisse können in einer Geschichte spannend erzählt werden, indem du beschreibst, wie du dich gefühlt hast und welche besonderen Dinge du gesehen hast. -

    -Du kannst auch selbst Geschichten erzählen! Das kann etwas sein, das du selbst erlebt hast, oder etwas, das du dir ausgedacht hast. Wichtig ist, dass du die Zuhörer mit deinen Worten mitnimmst. Verwende viele Details, beschreibe, wie sich die Figuren fühlen, und lass sie miteinander reden. So wird deine Geschichte lebendig und spannend. -

    -Also, worauf wartest du noch? Fang an, deine eigenen Geschichten zu erzählen und lass andere an deinen Ideen und Abenteuern teilhaben. Geschichten haben die Macht, uns zu verändern, uns zu trösten und uns zu unterhalten – und das ist das Schöne daran! +

    Ein Bild

    Geschichten Erzählen: Warum sie so wichtig sind


    Hast du schon mal eine spannende Geschichte gehört und konntest es kaum erwarten zu erfahren, wie sie endet? Geschichten zu erzählen ist etwas, das Menschen schon seit vielen tausend Jahren machen. Aber warum erzählen wir überhaupt Geschichten, und was macht sie so besonders?


    Geschichten zu erzählen ist eine der ältesten Arten, wie Menschen miteinander reden. Schon früher, als es keine Bücher oder das Internet gab, haben sich die Leute am Lagerfeuer versammelt und erzählt, was sie erlebt haben. Geschichten halfen ihnen, ihr Wissen weiterzugeben, sich gegenseitig zu unterhalten und über ihre Gefühle zu sprechen. Das ist auch heute noch so: Geschichten verbinden uns und lassen uns Neues lernen.


    In Geschichten geht es oft um Helden, Abenteuer oder Probleme, die gelöst werden müssen. Dabei gibt es viele spannende, lustige oder traurige Momente, die uns neugierig machen. Geschichten können uns zum Lachen bringen, uns Angst machen oder uns Mut geben. Manchmal lernen wir sogar etwas Neues über die Welt oder uns selbst.


    Um eine gute Geschichte zu erzählen, braucht man ein paar wichtige Bausteine. Erstmal braucht man eine Hauptfigur, auch Protagonist genannt. Diese Figur erlebt Abenteuer oder muss Probleme lösen. Eine Geschichte hat auch einen Anfang, der uns die Hauptfigur vorstellt, einen spannenden Mittelteil, in dem die Herausforderungen beschrieben werden, und ein Ende, in dem alles aufgelöst wird. Vielleicht hast du schon mal gemerkt, dass eine Geschichte besonders spannend wird, wenn es einen großen Konflikt oder ein Problem gibt, das gelöst werden muss.


    Hier sind ein paar Beispiele für gute Geschichten:


    1. Rotkäppchen: In dieser klassischen Märchengeschichte geht es um ein kleines Mädchen, das seine Großmutter besuchen möchte. Auf dem Weg trifft sie den bösen Wolf, der versucht, sie und ihre Großmutter zu täuschen. Das Abenteuer von Rotkäppchen zeigt, wie Mut und Klugheit helfen können, schwierige Situationen zu meistern.


    2. Harry Potter: Harry ist ein Junge, der erfährt, dass er ein Zauberer ist. Er erlebt viele Abenteuer in der Zauberschule Hogwarts und muss gegen den bösen Zauberer Voldemort kämpfen. Diese Geschichte zeigt, wie wichtig Freundschaft, Mut und das Gute im Leben sind.


    3. Der kleine Prinz: In dieser Geschichte geht es um einen kleinen Jungen, der von einem fernen Planeten kommt und viele seltsame Charaktere trifft. Der kleine Prinz lehrt uns, wie wichtig Freundschaft, Liebe und Verständnis sind.


    4. Deine eigene Geschichte: Stell dir vor, du hast einen Tag, an dem du ein spannendes Abenteuer erlebst. Zum Beispiel könntest du dich verlaufen und dabei neue Orte entdecken. Diese kleinen Erlebnisse können in einer Geschichte spannend erzählt werden, indem du beschreibst, wie du dich gefühlt hast und welche besonderen Dinge du gesehen hast.


    Du kannst auch selbst Geschichten erzählen! Das kann etwas sein, das du selbst erlebt hast, oder etwas, das du dir ausgedacht hast. Wichtig ist, dass du die Zuhörer mit deinen Worten mitnimmst. Verwende viele Details, beschreibe, wie sich die Figuren fühlen, und lass sie miteinander reden. So wird deine Geschichte lebendig und spannend.


    Also, worauf wartest du noch? Fang an, deine eigenen Geschichten zu erzählen und lass andere an deinen Ideen und Abenteuern teilhaben. Geschichten haben die Macht, uns zu verändern, uns zu trösten und uns zu unterhalten – und das ist das Schöne daran!

    diff --git a/webseite/config/subjects/deutsch/topics/personalpronomen/article.html b/webseite/config/subjects/deutsch/topics/personalpronomen/article.html index 717c04e..3fb96e5 100644 --- a/webseite/config/subjects/deutsch/topics/personalpronomen/article.html +++ b/webseite/config/subjects/deutsch/topics/personalpronomen/article.html @@ -1,50 +1 @@ -Ein Bild -
    - -Personalpronomen sind Wörter, die wir anstelle von Namen oder anderen Nomen verwenden. Sie helfen uns, Sätze kürzer und einfacher zu machen, ohne immer wieder die gleichen Wörter zu wiederholen. Personalpronomen können Dinge, Personen oder Tiere ersetzen und machen unsere Sprache verständlicher und natürlicher. Lass uns anschauen, welche Personalpronomen es gibt und wie man sie benutzt. -

    -Beispiele für Personalpronomen -

    -Es gibt verschiedene Personalpronomen, je nachdem, wer oder was gemeint ist. Hier sind die wichtigsten Personalpronomen im Deutschen: -

    -- Ich: Wenn man über sich selbst spricht. Beispiel: Ich gehe heute ins Kino.
    -- Du: Wenn man jemanden direkt anspricht. Beispiel: Du hast eine schöne Jacke.
    -- Er/ Sie/ Es: Wenn man über eine andere Person, ein Tier oder eine Sache spricht. Beispiel: Er liest ein Buch, sie spielt im Garten, es regnet gerade. -
    -- Wir: Wenn man über sich und andere Personen zusammen spricht. Beispiel: Wir gehen später Eis essen.
    -- Ihr: Wenn man mehrere Personen direkt anspricht. Beispiel: Ihr habt gute Arbeit geleistet.
    -- Sie: Wenn man über mehrere Personen spricht oder wenn man jemanden höflich anspricht. Beispiel: Sie spielen heute Fußball, oder: Sie (höflich) haben eine Frage gestellt. -

    -Wann benutzt man Personalpronomen? -

    -Personalpronomen benutzen wir, damit wir nicht ständig die gleichen Namen oder Nomen wiederholen müssen. Stell dir vor, du erzählst eine Geschichte über deinen Freund Max. Ohne Personalpronomen würde das so klingen: -
    -- Max geht zur Schule. Max hat heute seine Lieblingshose an. Max freut sich auf den Sportunterricht. -

    -Das ist ziemlich wiederholend, oder? Mit Personalpronomen klingt es viel besser: -
    -- Max geht zur Schule. Er hat heute seine Lieblingshose an. Er freut sich auf den Sportunterricht. -

    -Übersicht der Personalpronomen -
    -Hier sind die Personalpronomen für die verschiedenen Personen: -
    -- 1. Person Singular: ich
    -- 2. Person Singular: du
    -- 3. Person Singular: er, sie, es
    -- 1. Person Plural: wir
    -- 2. Person Plural: ihr
    -- 3. Person Plural: sie
    -- Höflichkeitsform: Sie (immer großgeschrieben) -

    -Beispiele in Sätzen -

    -- Ich mag Schokolade.
    -- Du bist mein bester Freund.
    -- Er spielt gerne Fußball, während sie lieber tanzt.
    -- Wir machen zusammen Hausaufgaben.
    -- Ihr seid heute sehr leise.
    -- Sie (Plural) haben viel Spaß im Park.
    -- Sie (Höflichkeitsform) sind sehr nett. -

    -Personalpronomen sind sehr hilfreich, weil sie die Sprache lebendiger machen und dafür sorgen, dass wir nicht immer wieder das gleiche Wort benutzen müssen. Wenn du die Personalpronomen gut kennst, kannst du Sätze abwechslungsreicher und verständlicher gestalten! \ No newline at end of file +

    Ein Bild

    Personalpronomen sind Wörter, die wir anstelle von Namen oder anderen Nomen verwenden. Sie helfen uns, Sätze kürzer und einfacher zu machen, ohne immer wieder die gleichen Wörter zu wiederholen. Personalpronomen können Dinge, Personen oder Tiere ersetzen und machen unsere Sprache verständlicher und natürlicher. Lass uns anschauen, welche Personalpronomen es gibt und wie man sie benutzt.


    Beispiele für Personalpronomen


    Es gibt verschiedene Personalpronomen, je nachdem, wer oder was gemeint ist. Hier sind die wichtigsten Personalpronomen im Deutschen:


    - Ich: Wenn man über sich selbst spricht. Beispiel: Ich gehe heute ins Kino.

    - Du: Wenn man jemanden direkt anspricht. Beispiel: Du hast eine schöne Jacke.

    - Er/ Sie/ Es: Wenn man über eine andere Person, ein Tier oder eine Sache spricht. Beispiel: Er liest ein Buch, sie spielt im Garten, es regnet gerade.

    - Wir: Wenn man über sich und andere Personen zusammen spricht. Beispiel: Wir gehen später Eis essen.

    - Ihr: Wenn man mehrere Personen direkt anspricht. Beispiel: Ihr habt gute Arbeit geleistet.

    - Sie: Wenn man über mehrere Personen spricht oder wenn man jemanden höflich anspricht. Beispiel: Sie spielen heute Fußball, oder: Sie (höflich) haben eine Frage gestellt.


    Wann benutzt man Personalpronomen?


    Personalpronomen benutzen wir, damit wir nicht ständig die gleichen Namen oder Nomen wiederholen müssen. Stell dir vor, du erzählst eine Geschichte über deinen Freund Max. Ohne Personalpronomen würde das so klingen:

    - Max geht zur Schule. Max hat heute seine Lieblingshose an. Max freut sich auf den Sportunterricht.


    Das ist ziemlich wiederholend, oder? Mit Personalpronomen klingt es viel besser:

    - Max geht zur Schule. Er hat heute seine Lieblingshose an. Er freut sich auf den Sportunterricht.


    Übersicht der Personalpronomen

    Hier sind die Personalpronomen für die verschiedenen Personen:

    - 1. Person Singular: ich

    - 2. Person Singular: du

    - 3. Person Singular: er, sie, es

    - 1. Person Plural: wir

    - 2. Person Plural: ihr

    - 3. Person Plural: sie

    - Höflichkeitsform: Sie (immer großgeschrieben)


    Beispiele in Sätzen


    - Ich mag Schokolade.

    - Du bist mein bester Freund.

    - Er spielt gerne Fußball, während sie lieber tanzt.

    - Wir machen zusammen Hausaufgaben.

    - Ihr seid heute sehr leise.

    - Sie (Plural) haben viel Spaß im Park.

    - Sie (Höflichkeitsform) sind sehr nett.


    Personalpronomen sind sehr hilfreich, weil sie die Sprache lebendiger machen und dafür sorgen, dass wir nicht immer wieder das gleiche Wort benutzen müssen. Wenn du die Personalpronomen gut kennst, kannst du Sätze abwechslungsreicher und verständlicher gestalten!

    diff --git a/webseite/config/subjects/deutsch/topics/satzglieder/article.html b/webseite/config/subjects/deutsch/topics/satzglieder/article.html index 9178055..344feec 100644 --- a/webseite/config/subjects/deutsch/topics/satzglieder/article.html +++ b/webseite/config/subjects/deutsch/topics/satzglieder/article.html @@ -1,51 +1 @@ -Sätze bestehen aus verschiedenen Teilen, die man Satzglieder nennt. Satzglieder sind Gruppen von Wörtern, die im Satz zusammengehören und eine bestimmte Funktion haben. Sie lassen sich im Satz verschieben, ohne dass der Sinn verloren geht. Die wichtigsten Satzglieder sind Subjekt, Prädikat, Objekt und adverbiale Bestimmungen. Lass uns die Satzglieder genauer anschauen und mit Beispielen verstehen, wie sie funktionieren. -

    -1. Subjekt
    -Das Subjekt ist derjenige oder dasjenige, das etwas tut oder von dem etwas ausgesagt wird. Es steht im Nominativ und beantwortet die Frage "Wer oder was?". -
    -- Beispiel: Der Hund bellt.
    -- Hier ist "der Hund" das Subjekt, weil es die Handlung (bellen) ausführt.
    -
    -2. Prädikat
    -Das Prädikat ist das Satzglied, das sagt, was passiert oder was getan wird. Es besteht meistens aus einem Verb.
    -- Beispiel: Der Hund bellt.
    -- "bellt" ist hier das Prädikat, weil es die Handlung beschreibt.
    -
    -3. Objekt
    -Das Objekt ist das Satzglied, das angibt, auf wen oder was sich die Handlung bezieht. Es gibt verschiedene Arten von Objekten, zum Beispiel: -
    -- Akkusativobjekt (Wen-Fall): Es beantwortet die Frage "Wen oder was?".
    -- Beispiel: Der Hund jagt die Katze.
    -- "die Katze" ist das Akkusativobjekt, weil es das Ziel der Handlung ist.
    -- Dativobjekt (Wem-Fall): Es beantwortet die Frage "Wem?".
    -- Beispiel: Ich gebe dem Kind einen Ball.
    -- "dem Kind" ist das Dativobjekt, weil es angibt, wem etwas gegeben wird.
    -
    -4. Adverbiale Bestimmungen
    -Adverbiale Bestimmungen geben uns zusätzliche Informationen darüber, wann, wo, wie oder warum etwas passiert. Es gibt verschiedene Arten von adverbialen Bestimmungen: -
    -- Zeit (Wann?): Beispiel: Morgen gehe ich schwimmen.
    -- Ort (Wo?): Beispiel: Der Hund bellt im Garten.
    -- Art und Weise (Wie?): Beispiel: Der Hund bellt laut.
    -- Grund (Warum?): Beispiel: Der Hund bellt wegen des Lärms.
    -
    -Wie erkenne ich Satzglieder?
    -
    -Satzglieder lassen sich im Satz verschieben. Das bedeutet, dass wir die Reihenfolge der Satzglieder ändern können, ohne dass der Satz unverständlich wird. Zum Beispiel: -
    - -- Der Hund bellt laut im Garten.
    -- Laut im Garten bellt der Hund.
    -- Im Garten bellt der Hund laut.
    -
    -Alle diese Varianten sind möglich, weil die Satzglieder ihre Bedeutung behalten, auch wenn sie die Position wechseln. Das Verschieben hilft uns, die Satzglieder zu erkennen. -

    - -Zusammenfassung der Satzglieder
    - -- Subjekt: Wer oder was tut etwas? (z.B. Der Lehrer erklärt den Stoff.)
    -- Prädikat: Was passiert oder wird getan? (z.B. Der Lehrer erklärt den Stoff.)
    -- Objekt: Auf wen oder was bezieht sich die Handlung? (z.B. Der Lehrer erklärt den Schülern den Stoff.)
    -- Adverbiale Bestimmungen: Wann, wo, wie oder warum passiert etwas? (z.B. Der Lehrer erklärt den Stoff am Vormittag.) -

    -Wenn du die verschiedenen Satzglieder kennst, kannst du Sätze besser verstehen und auch selbst klarere Sätze bilden. Satzglieder helfen uns, die Struktur eines Satzes zu erkennen und unsere Sprache vielseitig und genau zu gestalten! \ No newline at end of file +

    Sätze bestehen aus verschiedenen Teilen, die man Satzglieder nennt. Satzglieder sind Gruppen von Wörtern, die im Satz zusammengehören und eine bestimmte Funktion haben. Sie lassen sich im Satz verschieben, ohne dass der Sinn verloren geht. Die wichtigsten Satzglieder sind Subjekt, Prädikat, Objekt und adverbiale Bestimmungen. Lass uns die Satzglieder genauer anschauen und mit Beispielen verstehen, wie sie funktionieren.

    1. Subjekt

    Das Subjekt ist derjenige oder dasjenige, das etwas tut oder von dem etwas ausgesagt wird. Es steht im Nominativ und beantwortet die Frage "Wer oder was?".

    • Beispiel: Der Hund bellt.
    • Hier ist "der Hund" das Subjekt, weil es die Handlung (bellen) ausführt.

    2. Prädikat

    Das Prädikat ist das Satzglied, das sagt, was passiert oder was getan wird. Es besteht meistens aus einem Verb.

    • Beispiel: Der Hund bellt.
    • "bellt" ist hier das Prädikat, weil es die Handlung beschreibt.

    3. Objekt

    Das Objekt ist das Satzglied, das angibt, auf wen oder was sich die Handlung bezieht. Es gibt verschiedene Arten von Objekten, zum Beispiel:

    • Akkusativobjekt (Wen-Fall): Es beantwortet die Frage "Wen oder was?".
    • Beispiel: Der Hund jagt die Katze.
    • "die Katze" ist das Akkusativobjekt, weil es das Ziel der Handlung ist.
    • Dativobjekt (Wem-Fall): Es beantwortet die Frage "Wem?".
    • Beispiel: Ich gebe dem Kind einen Ball.
    • "dem Kind" ist das Dativobjekt, weil es angibt, wem etwas gegeben wird.

    4. Adverbiale Bestimmungen

    Adverbiale Bestimmungen geben uns zusätzliche Informationen darüber, wann, wo, wie oder warum etwas passiert. Es gibt verschiedene Arten von adverbialen Bestimmungen:

    • Zeit (Wann?): Beispiel: Morgen gehe ich schwimmen.
    • Ort (Wo?): Beispiel: Der Hund bellt im Garten.
    • Art und Weise (Wie?): Beispiel: Der Hund bellt laut.
    • Grund (Warum?): Beispiel: Der Hund bellt wegen des Lärms.

    Wie erkenne ich Satzglieder?


    Satzglieder lassen sich im Satz verschieben. Das bedeutet, dass wir die Reihenfolge der Satzglieder ändern können, ohne dass der Satz unverständlich wird. Zum Beispiel:

    • Der Hund bellt laut im Garten.
    • Laut im Garten bellt der Hund.
    • Im Garten bellt der Hund laut.

    Alle diese Varianten sind möglich, weil die Satzglieder ihre Bedeutung behalten, auch wenn sie die Position wechseln. Das Verschieben hilft uns, die Satzglieder zu erkennen.


    Zusammenfassung der Satzglieder

    • Subjekt: Wer oder was tut etwas? (z.B. Der Lehrer erklärt den Stoff.)
    • Prädikat: Was passiert oder wird getan? (z.B. Der Lehrer erklärt den Stoff.)
    • Objekt: Auf wen oder was bezieht sich die Handlung? (z.B. Der Lehrer erklärt den Schülern den Stoff.)
    • Adverbiale Bestimmungen: Wann, wo, wie oder warum passiert etwas? (z.B. Der Lehrer erklärt den Stoff am Vormittag.)

    Wenn du die verschiedenen Satzglieder kennst, kannst du Sätze besser verstehen und auch selbst klarere Sätze bilden. Satzglieder helfen uns, die Struktur eines Satzes zu erkennen und unsere Sprache vielseitig und genau zu gestalten!

    diff --git a/webseite/config/subjects/deutsch/topics/vier-faelle/article.html b/webseite/config/subjects/deutsch/topics/vier-faelle/article.html index 255e66e..727320e 100644 --- a/webseite/config/subjects/deutsch/topics/vier-faelle/article.html +++ b/webseite/config/subjects/deutsch/topics/vier-faelle/article.html @@ -1,36 +1 @@ -Im Deutschen gibt es vier Fälle, die man auch "Kasus" nennt. Sie helfen uns zu verstehen, welche Rolle ein Nomen oder Pronomen im Satz hat. Die vier Fälle sind Nominativ, Genitiv, Dativ und Akkusativ. Lass uns jeden Fall einzeln anschauen und mit einfachen Beispielen verstehen, wie sie funktionieren. -

    -1. Nominativ (Wer-Fall)
    -Der Nominativ ist der Fall des Subjekts, also die Person oder Sache, die etwas tut. Du kannst die Frage "Wer oder was?" stellen, um den Nominativ zu finden. -
    -- Beispiel: Der Hund bellt.
    -- Hier ist "der Hund" das Subjekt, das etwas tut. Deshalb steht es im Nominativ. -

    -2. Genitiv (Wessen-Fall)
    -Der Genitiv zeigt, wem etwas gehört. Du kannst die Frage "Wessen?" stellen, um den Genitiv zu finden.
    -- Beispiel: Das ist das Haus des Mannes.
    -- Hier zeigt "des Mannes", dass das Haus dem Mann gehört. -

    -3. Dativ (Wem-Fall)
    -Der Dativ beschreibt, wem etwas gegeben wird oder für wen etwas passiert. Du stellst die Frage "Wem?".
    -- Beispiel: Ich gebe dem Kind einen Ball.
    -- Hier steht "dem Kind" im Dativ, weil es zeigt, wem der Ball gegeben wird. -

    -4. Akkusativ (Wen-Fall)
    -Der Akkusativ ist der Fall des direkten Objekts, also das, worauf sich die Handlung bezieht. Du stellst die Frage "Wen oder was?". -
    -- Beispiel: Der Hund sieht die Katze.
    -- Hier ist "die Katze" das direkte Objekt, weil sie das ist, was gesehen wird. -

    -Zusammenfassung der Fälle mit Fragen -

    -- Nominativ (Wer oder was?): Das Subjekt des Satzes.
    -- Beispiel: Der Lehrer erklärt den Stoff.
    -- Genitiv (Wessen?): Zeigt Besitz oder Zugehörigkeit.
    -- Beispiel: Das Fahrrad des Jungen ist neu.
    -- Dativ (Wem?): Das indirekte Objekt, das von der Handlung betroffen ist.
    -- Beispiel: Sie schenkt dem Freund ein Buch.
    -- Akkusativ (Wen oder was?): Das direkte Objekt der Handlung.
    -- Beispiel: Der Junge spielt den Ball. -

    -Diese vier Fälle helfen uns dabei, Sätze richtig zu bilden und zu verstehen, wie die verschiedenen Teile eines Satzes zusammengehören. Wenn du die Fragen zu jedem Fall im Kopf behältst, kannst du ganz leicht erkennen, welcher Fall verwendet werden muss! \ No newline at end of file +

    Im Deutschen gibt es vier Fälle, die man auch "Kasus" nennt. Sie helfen uns zu verstehen, welche Rolle ein Nomen oder Pronomen im Satz hat. Die vier Fälle sind Nominativ, Genitiv, Dativ und Akkusativ. Lass uns jeden Fall einzeln anschauen und mit einfachen Beispielen verstehen, wie sie funktionieren.

    1. Nominativ (Wer-Fall)

    Der Nominativ ist der Fall des Subjekts, also die Person oder Sache, die etwas tut. Du kannst die Frage "Wer oder was?" stellen, um den Nominativ zu finden.

    • Beispiel: Der Hund bellt.
    • Hier ist "der Hund" das Subjekt, das etwas tut. Deshalb steht es im Nominativ.

    2. Genitiv (Wessen-Fall)

    Der Genitiv zeigt, wem etwas gehört. Du kannst die Frage "Wessen?" stellen, um den Genitiv zu finden.

    • Beispiel: Das ist das Haus des Mannes.
    • Hier zeigt "des Mannes", dass das Haus dem Mann gehört.

    3. Dativ (Wem-Fall)

    Der Dativ beschreibt, wem etwas gegeben wird oder für wen etwas passiert. Du stellst die Frage "Wem?".

    • Beispiel: Ich gebe dem Kind einen Ball.
    • Hier steht "dem Kind" im Dativ, weil es zeigt, wem der Ball gegeben wird.

    4. Akkusativ (Wen-Fall)

    Der Akkusativ ist der Fall des direkten Objekts, also das, worauf sich die Handlung bezieht. Du stellst die Frage "Wen oder was?".

    • Beispiel: Der Hund sieht die Katze.
    • Hier ist "die Katze" das direkte Objekt, weil sie das ist, was gesehen wird.

    Zusammenfassung der Fälle mit Fragen


    • Nominativ (Wer oder was?): Das Subjekt des Satzes.
    • Beispiel: Der Lehrer erklärt den Stoff.
    • Genitiv (Wessen?): Zeigt Besitz oder Zugehörigkeit.
    • Beispiel: Das Fahrrad des Jungen ist neu.
    • Dativ (Wem?): Das indirekte Objekt, das von der Handlung betroffen ist.
    • Beispiel: Sie schenkt dem Freund ein Buch.
    • Akkusativ (Wen oder was?): Das direkte Objekt der Handlung.
    • Beispiel: Der Junge spielt den Ball.

    Diese vier Fälle helfen uns dabei, Sätze richtig zu bilden und zu verstehen, wie die verschiedenen Teile eines Satzes zusammengehören. Wenn du die Fragen zu jedem Fall im Kopf behältst, kannst du ganz leicht erkennen, welcher Fall verwendet werden muss!

    diff --git a/webseite/config/subjects/deutsch/topics/wortarten/article.html b/webseite/config/subjects/deutsch/topics/wortarten/article.html index 42b1fe3..8c534c0 100644 --- a/webseite/config/subjects/deutsch/topics/wortarten/article.html +++ b/webseite/config/subjects/deutsch/topics/wortarten/article.html @@ -1,33 +1 @@ -Ein Bild -
    - -Wenn wir sprechen oder schreiben, benutzen wir verschiedene Arten von Wörtern, die unterschiedliche Aufgaben haben. Diese Arten von Wörtern nennt man Wortarten. Jede Wortart hilft uns, Sätze zu bilden und unsere Gedanken klar auszudrücken. Lass uns die wichtigsten Wortarten anschauen, die wir im Deutschen verwenden. -

    -1. Nomen (Namenwörter) -Nomen sind Wörter, die Dinge, Personen, Tiere oder Orte benennen. Zum Beispiel: "Haus", "Hund", "Schule" oder "Freundin". Man erkennt Nomen daran, dass sie großgeschrieben werden. Sie sind die Hauptfiguren in einem Satz, weil sie das Thema angeben, worüber wir sprechen. Ein Beispiel: "Der Hund läuft schnell." Hier ist "Hund" das Nomen. -

    -2. Verben (Tunwörter) -Verben sind Wörter, die eine Handlung oder einen Zustand beschreiben. Sie zeigen, was jemand tut oder was passiert. Beispiele sind: "laufen", "essen", "schlafen" oder "denken". Verben sind wichtig, denn sie bringen Bewegung in den Satz. Ein Beispiel: "Die Katze schläft auf dem Sofa." Hier ist "schläft" das Verb. -

    -3. Adjektive (Eigenschaftswörter) -Adjektive beschreiben, wie etwas ist. Sie geben mehr Informationen über ein Nomen. Zum Beispiel: "groß", "schnell", "fröhlich" oder "lecker". Adjektive helfen uns, uns Dinge besser vorzustellen, weil sie Details liefern. Ein Beispiel: "Das große Haus steht am Ende der Straße." Hier beschreibt "groß" das Haus. -

    -4. Pronomen (Fürwörter) -Pronomen ersetzen Nomen, damit wir nicht immer das gleiche Wort wiederholen müssen. Beispiele sind: "ich", "du", "er", "sie", "es", "wir" oder "mein". Sie machen unsere Sätze abwechslungsreicher und verständlicher. Ein Beispiel: "Anna ist meine Freundin. Sie ist sehr nett." Hier ersetzt "sie" das Nomen "Anna". -

    -5. Artikel (Begleiter) -Artikel sind kleine Wörter, die vor einem Nomen stehen und uns sagen, ob wir über etwas Bestimmtes oder etwas Allgemeines sprechen. Zum Beispiel: "der", "die", "das", "ein", "eine". Artikel helfen uns zu verstehen, worum es genau geht. Ein Beispiel: "Das Auto ist rot." Hier ist "das" der Artikel, der das Nomen "Auto" begleitet. -

    -6. Adverbien (Umstandswörter) -Adverbien geben mehr Informationen über ein Verb, ein Adjektiv oder ein anderes Adverb. Sie erklären zum Beispiel, wann, wo oder wie etwas passiert. Beispiele sind: "heute", "draußen", "schnell" oder "sehr". Adverbien machen Sätze lebendiger und genauer. Ein Beispiel: "Der Junge rennt schnell." Hier erklärt "schnell", wie der Junge rennt. -

    -7. Präpositionen (Verhältniswörter) -Präpositionen zeigen die Beziehung zwischen Dingen. Sie sagen uns, wo etwas ist oder in welchem Verhältnis etwas steht. Zum Beispiel: "auf", "unter", "neben", "vor" oder "hinter". Diese Wörter helfen uns zu verstehen, wo etwas ist. Ein Beispiel: "Der Ball liegt unter dem Tisch." Hier zeigt "unter" die Position des Balls an. -

    -8. Konjunktionen (Bindewörter) -Konjunktionen verbinden Wörter oder Sätze miteinander. Beispiele sind: "und", "oder", "weil", "aber". Sie helfen uns, längere Sätze zu bilden und unsere Gedanken miteinander zu verbinden. Ein Beispiel: "Ich mag Äpfel und Bananen." Hier verbindet "und" die beiden Nomen "Äpfel" und "Bananen". -

    -9. Interjektionen (Ausrufewörter) -Interjektionen sind kurze Ausrufe, die unsere Gefühle ausdrücken. Zum Beispiel: "Oh!", "Aua!", "Wow!" oder "Hey!". Sie bringen Emotionen in unsere Sprache und machen sie lebendiger. Ein Beispiel: "Wow! Das war ein tolles Spiel!" Hier drückt "Wow!" Begeisterung aus. -

    -Jede Wortart hat ihre eigene Aufgabe, und zusammen bilden sie die Sprache, die wir jeden Tag benutzen. Wenn wir die verschiedenen Wortarten kennen, können wir bessere Sätze bilden und uns klarer ausdrücken. Also, wenn du das nächste Mal einen Satz schreibst, schau mal, welche Wortarten du benutzt hast – sie sind die Bausteine, die alles zusammenhalten! \ No newline at end of file +

    Ein Bild

    Wenn wir sprechen oder schreiben, benutzen wir verschiedene Arten von Wörtern, die unterschiedliche Aufgaben haben. Diese Arten von Wörtern nennt man Wortarten. Jede Wortart hilft uns, Sätze zu bilden und unsere Gedanken klar auszudrücken. Lass uns die wichtigsten Wortarten anschauen, die wir im Deutschen verwenden.


    1. Nomen (Namenwörter) Nomen sind Wörter, die Dinge, Personen, Tiere oder Orte benennen. Zum Beispiel: "Haus", "Hund", "Schule" oder "Freundin". Man erkennt Nomen daran, dass sie großgeschrieben werden. Sie sind die Hauptfiguren in einem Satz, weil sie das Thema angeben, worüber wir sprechen. Ein Beispiel: "Der Hund läuft schnell." Hier ist "Hund" das Nomen.


    2. Verben (Tunwörter) Verben sind Wörter, die eine Handlung oder einen Zustand beschreiben. Sie zeigen, was jemand tut oder was passiert. Beispiele sind: "laufen", "essen", "schlafen" oder "denken". Verben sind wichtig, denn sie bringen Bewegung in den Satz. Ein Beispiel: "Die Katze schläft auf dem Sofa." Hier ist "schläft" das Verb.


    3. Adjektive (Eigenschaftswörter) Adjektive beschreiben, wie etwas ist. Sie geben mehr Informationen über ein Nomen. Zum Beispiel: "groß", "schnell", "fröhlich" oder "lecker". Adjektive helfen uns, uns Dinge besser vorzustellen, weil sie Details liefern. Ein Beispiel: "Das große Haus steht am Ende der Straße." Hier beschreibt "groß" das Haus.


    4. Pronomen (Fürwörter) Pronomen ersetzen Nomen, damit wir nicht immer das gleiche Wort wiederholen müssen. Beispiele sind: "ich", "du", "er", "sie", "es", "wir" oder "mein". Sie machen unsere Sätze abwechslungsreicher und verständlicher. Ein Beispiel: "Anna ist meine Freundin. Sie ist sehr nett." Hier ersetzt "sie" das Nomen "Anna".


    5. Artikel (Begleiter) Artikel sind kleine Wörter, die vor einem Nomen stehen und uns sagen, ob wir über etwas Bestimmtes oder etwas Allgemeines sprechen. Zum Beispiel: "der", "die", "das", "ein", "eine". Artikel helfen uns zu verstehen, worum es genau geht. Ein Beispiel: "Das Auto ist rot." Hier ist "das" der Artikel, der das Nomen "Auto" begleitet.


    6. Adverbien (Umstandswörter) Adverbien geben mehr Informationen über ein Verb, ein Adjektiv oder ein anderes Adverb. Sie erklären zum Beispiel, wann, wo oder wie etwas passiert. Beispiele sind: "heute", "draußen", "schnell" oder "sehr". Adverbien machen Sätze lebendiger und genauer. Ein Beispiel: "Der Junge rennt schnell." Hier erklärt "schnell", wie der Junge rennt.


    7. Präpositionen (Verhältniswörter) Präpositionen zeigen die Beziehung zwischen Dingen. Sie sagen uns, wo etwas ist oder in welchem Verhältnis etwas steht. Zum Beispiel: "auf", "unter", "neben", "vor" oder "hinter". Diese Wörter helfen uns zu verstehen, wo etwas ist. Ein Beispiel: "Der Ball liegt unter dem Tisch." Hier zeigt "unter" die Position des Balls an.


    8. Konjunktionen (Bindewörter) Konjunktionen verbinden Wörter oder Sätze miteinander. Beispiele sind: "und", "oder", "weil", "aber". Sie helfen uns, längere Sätze zu bilden und unsere Gedanken miteinander zu verbinden. Ein Beispiel: "Ich mag Äpfel und Bananen." Hier verbindet "und" die beiden Nomen "Äpfel" und "Bananen".


    9. Interjektionen (Ausrufewörter) Interjektionen sind kurze Ausrufe, die unsere Gefühle ausdrücken. Zum Beispiel: "Oh!", "Aua!", "Wow!" oder "Hey!". Sie bringen Emotionen in unsere Sprache und machen sie lebendiger. Ein Beispiel: "Wow! Das war ein tolles Spiel!" Hier drückt "Wow!" Begeisterung aus.


    Jede Wortart hat ihre eigene Aufgabe, und zusammen bilden sie die Sprache, die wir jeden Tag benutzen. Wenn wir die verschiedenen Wortarten kennen, können wir bessere Sätze bilden und uns klarer ausdrücken. Also, wenn du das nächste Mal einen Satz schreibst, schau mal, welche Wortarten du benutzt hast – sie sind die Bausteine, die alles zusammenhalten!

    diff --git a/webseite/config/subjects/englisch/properties.json b/webseite/config/subjects/englisch/properties.json index dbf37d3..132c2cc 100644 --- a/webseite/config/subjects/englisch/properties.json +++ b/webseite/config/subjects/englisch/properties.json @@ -1,6 +1,6 @@ { "displayName": "Englisch", "description": "He she it das s muss mit!", - "color": "#17B750", + "color": "#17b750", "icon": "fa-language" } \ No newline at end of file diff --git a/webseite/config/subjects/englisch/topics/LoremIpsum/article.html b/webseite/config/subjects/englisch/topics/LoremIpsum/article.html index 1f86357..e3d9b18 100644 --- a/webseite/config/subjects/englisch/topics/LoremIpsum/article.html +++ b/webseite/config/subjects/englisch/topics/LoremIpsum/article.html @@ -1,9 +1 @@ -Ein Bild -
    -Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. -

    -Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. -

    -Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. -
    -Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer \ No newline at end of file +

    Ein Bild

    Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.


    Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.


    Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi.

    Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer

    diff --git a/webseite/config/subjects/mathe/properties.json b/webseite/config/subjects/mathe/properties.json index 5b6cb74..f49e3fe 100644 --- a/webseite/config/subjects/mathe/properties.json +++ b/webseite/config/subjects/mathe/properties.json @@ -1,6 +1,6 @@ { "displayName": "Mathe", - "description": "Mathe ist blau", - "color": "#3b82f6", + "description": "Mathe ist rot", + "color": "#626cd0", "icon": "fa-square-root-alt" } \ No newline at end of file diff --git a/webseite/config/subjects/mathe/topics/bruchrechnung/article.html b/webseite/config/subjects/mathe/topics/bruchrechnung/article.html index 895b181..6cdc716 100644 --- a/webseite/config/subjects/mathe/topics/bruchrechnung/article.html +++ b/webseite/config/subjects/mathe/topics/bruchrechnung/article.html @@ -1,46 +1 @@ -Brüche werden verwendet, um Anteile an einem Ganzen darzustellen. So kann es vorkommen, dass nur ein Teil einer Pizza gegessen wird oder nur ein Teil einer Flasche getrunken wird. In der Mathematik wird ein solcher Anteil durch einen Bruch dargestellt. In der folgenden Grafik wird gezeigt, wie 3 von 7 Kästchen gelb markiert werden, und wie der entsprechende Bruch dargestellt wird. -

    Ein Bruch setzt sich aus einem Zähler, einem Bruchstrich und einem Nenner zusammen. Der Zähler wird über dem Bruchstrich geschrieben, der Nenner darunter. -

    -$$ -\begin{array}{c@{\quad}l} -3 & \text{Zahler} \\ -- & \text{Bruchstrich} \\ -7 & \text{Nenner} \\ - -\end{array} -$$ - -Brüche addieren und subtrahieren

    Brüche mit gleichen Nennern (= gleichnamige Brüche) werden addiert, indem die Zähler addiert und der Nenner beibehalten wird. So werden aus 2 von 6 Stücken plus 3 von 6 Stücken insgesamt 5 von 6 Stücken. - -$$ -\frac{2}{6} + \frac{3}{6} = \frac{5}{6} -$$ - -

    - -Zur Subtraktion gleichnamiger Brüche werden die Zähler subtrahiert und der Nenner beibehalten. Wenn von 5 von 6 Stücken 3 von 6 Stücke weggenommen werden, bleiben 2 der 6 Stücke übrig. - -$$ -\frac{5}{6} - \frac{3}{6} = \frac{2}{6} -$$ - -

    - -Brüche multiplizieren und dividieren -

    -Brüche werden multipliziert, indem die Zähler und Nenner jeweils miteinander multipliziert werden: Zähler mal Zähler und Nenner mal Nenner. Beim Bruchrechnen mit der Grundrechenart Multiplikation spielt es keine Rolle, ob die Nenner gleich oder verschieden sind. - -$$ -\frac{2}{9} \cdot \frac{5}{9} = \frac{10}{81} -$$ -Bei der Multiplikation von Brüchen mit unterschiedlichen Nennern (= ungleichnamige Brüche) werden ebenfalls die Zähler und Nenner jeweils miteinander multipliziert. Im Gegensatz zur Addition müssen die Brüche dabei nicht auf einen gemeinsamen Nenner gebracht werden. - -$$ -\frac{4}{5} \cdot \frac{2}{3} = \frac{8}{15} -$$ - -Die Division von Brüchen basiert auf der Multiplikation von Brüchen. Um zwei Brüche zu dividieren, wird aus der Division eine Multiplikation gemacht. Das Geteiltzeichen wird durch ein Malzeichen ersetzt. Dafür wird beim zweiten Bruch der Zähler und der Nenner vertauscht. - -$$ -\frac{5}{8} : \frac{4}{7} = \frac{5}{8} \cdot \frac{7}{4} = \frac{35}{32} -$$ \ No newline at end of file +

    Brüche werden verwendet, um Anteile an einem Ganzen darzustellen. So kann es vorkommen, dass nur ein Teil einer Pizza gegessen wird oder nur ein Teil einer Flasche getrunken wird. In der Mathematik wird ein solcher Anteil durch einen Bruch dargestellt. In der folgenden Grafik wird gezeigt, wie 3 von 7 Kästchen gelb markiert werden, und wie der entsprechende Bruch dargestellt wird.

    Ein Bruch setzt sich aus einem Zähler, einem Bruchstrich und einem Nenner zusammen. Der Zähler wird über dem Bruchstrich geschrieben, der Nenner darunter.

    $$\begin{array}{cl} 3 & \text{Zahler} \\ - & \text{Bruchstrich} \\ 7 & \text{Nenner} \\ \end{array}$$

    Brüche addieren und subtrahieren


    Brüche mit gleichen Nennern (= gleichnamige Brüche) werden addiert, indem die Zähler addiert und der Nenner beibehalten wird. So werden aus 2 von 6 Stücken plus 3 von 6 Stücken insgesamt 5 von 6 Stücken.


    $$\frac{2}{6} + \frac{3}{6} = \frac{5}{6}$$


    Zur Subtraktion gleichnamiger Brüche werden die Zähler subtrahiert und der Nenner beibehalten. Wenn von 5 von 6 Stücken 3 von 6 Stücke weggenommen werden, bleiben 2 der 6 Stücke übrig.


    $$\frac{5}{6} - \frac{3}{6} = \frac{2}{6}$$


    Brüche multiplizieren und dividieren


    Brüche werden multipliziert, indem die Zähler und Nenner jeweils miteinander multipliziert werden: Zähler mal Zähler und Nenner mal Nenner. Beim Bruchrechnen mit der Grundrechenart Multiplikation spielt es keine Rolle, ob die Nenner gleich oder verschieden sind.


    $$\frac{2}{9} \cdot \frac{5}{9} = \frac{10}{81}$$


    Bei der Multiplikation von Brüchen mit unterschiedlichen Nennern (= ungleichnamige Brüche) werden ebenfalls die Zähler und Nenner jeweils miteinander multipliziert. Im Gegensatz zur Addition müssen die Brüche dabei nicht auf einen gemeinsamen Nenner gebracht werden.


    $$\frac{4}{5} \cdot \frac{2}{3} = \frac{8}{15}$$


    Die Division von Brüchen basiert auf der Multiplikation von Brüchen. Um zwei Brüche zu dividieren, wird aus der Division eine Multiplikation gemacht. Das Geteiltzeichen wird durch ein Malzeichen ersetzt. Dafür wird beim zweiten Bruch der Zähler und der Nenner vertauscht.


    $$\frac{5}{8} : \frac{4}{7} = \frac{5}{8} \cdot \frac{7}{4} = \frac{35}{32}$$

    diff --git a/webseite/config/subjects/mathe/topics/punkt-vor-strichrechnung/article.html b/webseite/config/subjects/mathe/topics/punkt-vor-strichrechnung/article.html index 0efcecf..790d2fb 100644 --- a/webseite/config/subjects/mathe/topics/punkt-vor-strichrechnung/article.html +++ b/webseite/config/subjects/mathe/topics/punkt-vor-strichrechnung/article.html @@ -1,33 +1 @@ -Diese Regel besagt, dass zuerst Multiplikationen und Divisionen und danach Additionen oder Subtraktionen durchgeführt werden. Anhand eines Beispiels wird nun gezeigt, wie diese Regel angewendet wird (und wie Fehler dabei passieren können). -

    -a) 5 + 2 · 4 = 5 + 8 = 13 (richtige Lösung)
    -b) 5 + 2 · 4 = 7 · 4 = 28 (falsche Lösung)
    - -
    - -Erklärung:
    -In beiden Fällen wird das Ergebnis der Aufgabe 5 + 2 · 4 gesucht. Im Fall a) wurde die Aufgabe richtig gelöst, indem zuerst die Multiplikation berechnet wurde. Das ergibt 2 · 4 = 8. Anschließend wurde 5 + 8 = 13 gerechnet. Wie zu sehen ist, wurde erst die Multiplikation ausgeführt, bevor die beiden Zahlen addiert wurden. Im Fall b) wurde jedoch ein Fehler gemacht, da hier erst addiert und dann multipliziert wurde. Das Ergebnis wurde dadurch falsch berechnet -

    -Noch eine kleine Anmerkung:
    -Links des "=" muss immer dasselbe stehen wie rechts des "=". Wenn so gerechnet wird, wie es in den Beispielen gezeigt wird, passiert das automatisch. Dies wird hier erwähnt, weil es in einem späteren Kapitel – in den sogenannten Gleichungen mit Unbekannten – noch genauer besprochen wird. Zu diesem Zeitpunkt sollte jedoch einfach versucht werden, den Beispielen zu folgen und das Konzept in den Übungsaufgaben selbst anzuwenden. -

    -Das vorherige Beispiel sollte noch einmal durchgegangen werden. Anschließend folgen eine Reihe weiterer Beispiele. Jedes sollte genau angesehen werden, um die Berechnung zu verfolgen. -

    -Auch hier gilt: Zuerst Multiplikation oder Division, danach Addition oder Subtraktion. - -

    - -Aufgabe: 8 · 3 + 2 = ?
    -Lösung: 8 · 3 + 2 = 24 + 2 = 26

    -Aufgabe: 2 + 3 · 4 = ?
    -Lösung: 2 + 3 · 4 = 2 + 12 = 14

    -Aufgabe: 6 : 3 + 2 = ?
    -Lösung: 6 : 3 + 2 = 2 + 2 = 4

    -Aufgabe: 5 - 8 : 4 = ?
    -Lösung: 5 - 8 : 4 = 5 - 2 = 3

    -Aufgabe: 5 · 3 + 8 : 4 = ?
    -Lösung: 5 · 3 + 8 : 4 = 15 + 2 = 17

    - -Erläuterungen:
    -In den ersten vier Beispielen wurde konsequent die Punkt-vor-Strich-Regel beachtet. Es wurde zuerst multipliziert oder dividiert und danach addiert oder subtrahiert. Beim letzten Beispiel mussten sowohl eine Multiplikation als auch eine Division durchgeführt werden. Es spielt dabei keine Rolle, in welcher Reihenfolge diese beiden Operationen ausgeführt werden – wichtig ist nur, dass die Addition aufgrund der Punkt-vor-Strich-Regel am Ende berechnet wird. Das bedeutet also, dass erst 5 · 3 sowie 8 : 4 berechnet werden müssen und danach die beiden Ergebnisse addiert werden. -

    \ No newline at end of file +

    Diese Regel besagt, dass zuerst Multiplikationen und Divisionen und danach Additionen oder Subtraktionen durchgeführt werden. Anhand eines Beispiels wird nun gezeigt, wie diese Regel angewendet wird (und wie Fehler dabei passieren können).

    a) 5 + 2 · 4 = 5 + 8 = 13 (richtige Lösung)

    b) 5 + 2 · 4 = 7 · 4 = 28 (falsche Lösung)


    Erklärung:

    In beiden Fällen wird das Ergebnis der Aufgabe 5 + 2 · 4 gesucht. Im Fall a) wurde die Aufgabe richtig gelöst, indem zuerst die Multiplikation berechnet wurde. Das ergibt 2 · 4 = 8. Anschließend wurde 5 + 8 = 13 gerechnet. Wie zu sehen ist, wurde erst die Multiplikation ausgeführt, bevor die beiden Zahlen addiert wurden. Im Fall b) wurde jedoch ein Fehler gemacht, da hier erst addiert und dann multipliziert wurde. Das Ergebnis wurde dadurch falsch berechnet


    Noch eine kleine Anmerkung:

    Links des "=" muss immer dasselbe stehen wie rechts des "=". Wenn so gerechnet wird, wie es in den Beispielen gezeigt wird, passiert das automatisch. Dies wird hier erwähnt, weil es in einem späteren Kapitel – in den sogenannten Gleichungen mit Unbekannten – noch genauer besprochen wird. Zu diesem Zeitpunkt sollte jedoch einfach versucht werden, den Beispielen zu folgen und das Konzept in den Übungsaufgaben selbst anzuwenden.


    Das vorherige Beispiel sollte noch einmal durchgegangen werden. Anschließend folgen eine Reihe weiterer Beispiele. Jedes sollte genau angesehen werden, um die Berechnung zu verfolgen.


    Auch hier gilt: Zuerst Multiplikation oder Division, danach Addition oder Subtraktion.


    Aufgabe: 8 · 3 + 2 = ?

    Lösung: 8 · 3 + 2 = 24 + 2 = 26


    Aufgabe: 2 + 3 · 4 = ?

    Lösung: 2 + 3 · 4 = 2 + 12 = 14


    Aufgabe: 6 : 3 + 2 = ?

    Lösung: 6 : 3 + 2 = 2 + 2 = 4


    Aufgabe: 5 - 8 : 4 = ?

    Lösung: 5 - 8 : 4 = 5 - 2 = 3


    Aufgabe: 5 · 3 + 8 : 4 = ?

    Lösung: 5 · 3 + 8 : 4 = 15 + 2 = 17


    Erläuterungen:

    In den ersten vier Beispielen wurde konsequent die Punkt-vor-Strich-Regel beachtet. Es wurde zuerst multipliziert oder dividiert und danach addiert oder subtrahiert. Beim letzten Beispiel mussten sowohl eine Multiplikation als auch eine Division durchgeführt werden. Es spielt dabei keine Rolle, in welcher Reihenfolge diese beiden Operationen ausgeführt werden – wichtig ist nur, dass die Addition aufgrund der Punkt-vor-Strich-Regel am Ende berechnet wird. Das bedeutet also, dass erst 5 · 3 sowie 8 : 4 berechnet werden müssen und danach die beiden Ergebnisse addiert werden.

    diff --git a/webseite/config/subjects/mathe/topics/rechnen-mit-einheiten/article.html b/webseite/config/subjects/mathe/topics/rechnen-mit-einheiten/article.html index 01f691e..cd00ea4 100644 --- a/webseite/config/subjects/mathe/topics/rechnen-mit-einheiten/article.html +++ b/webseite/config/subjects/mathe/topics/rechnen-mit-einheiten/article.html @@ -1,91 +1 @@ -Stell dir vor, du möchtest eine Reise planen und musst wissen, wie weit es von deinem Zuhause bis zur Schule ist. Dafür benutzt du Kilometer oder Meter, um die Entfernung zu messen. Diese Dinge nennen wir Einheiten – sie helfen uns, Längen, Gewichte und Zeiten zu verstehen und zu vergleichen. Ohne Einheiten wüssten wir nicht, wie groß, schwer oder lang etwas ist. Das wäre ziemlich unpraktisch, wenn wir miteinander sprechen wollen! -

    -Einheiten erleichtern unseren Alltag, egal ob wir einkaufen, kochen, reisen oder Sport machen. Das Rechnen mit Einheiten ist wichtig, damit wir bessere Entscheidungen treffen und genaue Informationen geben können. In den nächsten Kapiteln schauen wir uns die verschiedenen Einheiten genauer an und lernen, wie man sie richtig umrechnet. -

    -Länge -

    - -Wichtige Einheiten für Längen
    -- Meter (m): Das ist die Basiseinheit für Längen. Meter ist die Grundlage, auf der alle anderen Längeneinheiten aufbauen. -
    -- Zentimeter (cm): 1 Meter sind 100 Zentimeter. Zentimeter benutzt man oft für kleinere Sachen, wie Bücher, Blätter oder die Höhe eines Stuhls. -
    -- Kilometer (km): 1 Kilometer sind 1000 Meter. Kilometer werden verwendet, um große Entfernungen zu messen, wie von einer Stadt zur nächsten oder für eine lange Wanderung. -

    - -Wenn du Längen messen möchtest, wie den Weg zur Schule oder die Länge deines Zimmers, benutzt du oft Meter oder Zentimeter. Für größere Strecken, wie von einer Stadt zur nächsten, benutzt man Kilometer. Es gibt auch noch Millimeter, die noch kleiner sind: 1 Meter hat 1000 Millimeter. Millimeter werden verwendet, wenn man ganz genau messen muss, wie zum Beispiel die Dicke von Papier oder die Größe kleiner Bauteile. -
    -Ein Bild -
    - -Umrechnen von Längeneinheiten
    -- Von Kilometern zu Metern: Multipliziere die Kilometerzahl mit 1000.
    -- Beispiel: 3 km = 3 × 1000 m = 3000 m
    -- Von Metern zu Zentimetern: Multipliziere die Meterzahl mit 100.
    -- Beispiel: 5 m = 5 × 100 cm = 500 cm
    -- Von Zentimetern zu Metern: Teile die Zentimeter durch 100.
    -- Beispiel: 200 cm = 200 ÷ 100 m = 2 m
    -
    -Beim Umrechnen von Längen ist es wichtig zu wissen, wann man multiplizieren und wann man dividieren muss. Das hilft dir, die richtige Einheit zu verwenden. Manchmal hilft es auch, sich die Umrechnungszahlen wie 1000 oder 100 auf kleine Notizzettel zu schreiben, damit man sie sich besser merken kann. So machst du keine Fehler beim Rechnen. -

    -Es kann auch nützlich sein, dir vorzustellen, wie lang die Einheiten wirklich sind. Ein Kilometer ist ungefähr so lang wie 10 Fußballfelder hintereinander, während ein Meter ungefähr so lang ist wie ein großer Tisch. Das gibt dir ein besseres Gefühl für die verschiedenen Längen. -


    - -Gewicht -

    -Wichtige Einheiten für Gewicht
    -- Gramm (g): Das ist die Basiseinheit für Gewicht. Gramm werden oft für leichtere Dinge verwendet, wie Lebensmittel oder Briefe. -
    -- Kilogramm (kg): 1 Kilogramm sind 1000 Gramm. Man verwendet Kilogramm, um das Gewicht von Menschen oder größeren Dingen anzugeben. -
    -- Tonne (t): 1 Tonne sind 1000 Kilogramm. Tonnen benutzt man, wenn etwas sehr schwer ist, wie Lastwagen, große Möbel oder sogar Elefanten. -
    -Mit Gewicht misst man, wie schwer etwas ist. Zum Beispiel wiegst du vielleicht 35 Kilogramm, während ein Apfel ungefähr 200 Gramm wiegt. Auch beim Backen ist das Gewicht sehr wichtig, damit du die richtige Menge an Zutaten verwendest. Wenn du zum Beispiel zu viel Mehl nimmst, wird dein Teig zu trocken. - -
    -Ein Bild -
    - -Umrechnen von Gewichtseinheiten
    -- Von Kilogramm zu Gramm: Multipliziere die Kilogrammzahl mit 1000.
    -- Beispiel: 4 kg = 4 × 1000 g = 4000 g
    -- Von Gramm zu Kilogramm: Teile die Gramm durch 1000.
    -- Beispiel: 2500 g = 2500 ÷ 1000 kg = 2,5 kg
    -- Von Tonnen zu Kilogramm: Multipliziere die Zahl der Tonnen mit 1000.
    -- Beispiel: 2 t = 2 × 1000 kg = 2000 kg
    -
    -Auch beim Backen oder Kochen ist es wichtig, die richtigen Gewichtseinheiten zu kennen. So kannst du die genaue Menge an Zutaten abwiegen, die du brauchst. Wenn du zum Beispiel Kuchen backen möchtest, ist es entscheidend, dass du das richtige Verhältnis von Mehl, Zucker und Butter verwendest, damit der Kuchen lecker und saftig wird. -
    -Wenn du mit sehr großen oder sehr kleinen Gewichten rechnest, hilft es manchmal, sich vorzustellen, wie viel diese wiegen. Ein Gramm wiegt ungefähr so viel wie eine Büroklammer, ein Kilogramm so viel wie eine volle Wasserflasche, und eine Tonne entspricht ungefähr dem Gewicht eines kleinen Autos. -


    - -Zeit -

    -Wichtige Einheiten für Zeit
    -- Sekunden (s): Das ist die Basiseinheit für Zeit. Sekunden nutzt man, um kurze Zeitspannen zu messen, wie das Zähneputzen oder die Dauer eines kurzen Laufs. -
    -- Minuten (min): 1 Minute sind 60 Sekunden. Minuten werden oft verwendet, um Dinge wie das Kochen eines Eies oder die Dauer eines Telefonats zu messen. -
    -- Stunden (h): 1 Stunde sind 60 Minuten. Stunden braucht man für längere Zeiträume, wie zum Beispiel den Schulunterricht oder das Schlafen. -
    -
    -Zeit hilft uns, unseren Tag zu planen und zu verstehen, wie lange etwas dauert. Zum Beispiel dauert es vielleicht 45 Minuten, bis du zur Schule kommst, oder eine Stunde, um einen Kuchen zu backen. Um den Tag zu organisieren, ist es wichtig, die verschiedenen Zeiteinheiten zu verstehen. Ein Tag hat 24 Stunden, und eine Woche besteht aus 7 Tagen. - -
    -Ein Bild -
    - -Umrechnen von Zeiteinheiten
    -- Von Stunden zu Minuten: Multipliziere die Stundenzahl mit 60.
    -- Beispiel: 2 h = 2 × 60 min = 120 min
    -- Von Minuten zu Sekunden: Multipliziere die Minuten mit 60.
    -- Beispiel: 5 min = 5 × 60 s = 300 s
    -- Von Sekunden zu Minuten: Teile die Sekunden durch 60.
    -- Beispiel: 180 s = 180 ÷ 60 min = 3 min
    -
    -Es ist hilfreich, die Zeit richtig umzurechnen, damit du genau planen kannst, wie lange etwas dauert. Wenn du weißt, wie viele Minuten oder Sekunden du für eine Aufgabe brauchst, kannst du deinen Tag besser einteilen und die Zeit effizient nutzen. -
    -Es kann auch praktisch sein, eine Uhr oder einen Timer zu benutzen, um die Zeit zu messen. So weißt du genau, wie lange du für verschiedene Aktivitäten brauchst und kannst besser einschätzen, wie lange du für deine Hausaufgaben oder andere Aufgaben benötigst. -

    -Mit ein bisschen Übung wirst du immer besser darin, Längen, Gewichte oder Zeiten ganz leicht umzurechnen. Je öfter du übst, desto sicherer wirst du und kannst auch schwierige Aufgaben meistern. Rechnen mit Einheiten ist eine wichtige Grundlage für viele Bereiche, wie Naturwissenschaften oder alltägliche Dinge. Viel Spaß beim Üben! - +

    Stell dir vor, du möchtest eine Reise planen und musst wissen, wie weit es von deinem Zuhause bis zur Schule ist. Dafür benutzt du Kilometer oder Meter, um die Entfernung zu messen. Diese Dinge nennen wir Einheiten – sie helfen uns, Längen, Gewichte und Zeiten zu verstehen und zu vergleichen. Ohne Einheiten wüssten wir nicht, wie groß, schwer oder lang etwas ist. Das wäre ziemlich unpraktisch, wenn wir miteinander sprechen wollen!

    Einheiten erleichtern unseren Alltag, egal ob wir einkaufen, kochen, reisen oder Sport machen. Das Rechnen mit Einheiten ist wichtig, damit wir bessere Entscheidungen treffen und genaue Informationen geben können. In den nächsten Kapiteln schauen wir uns die verschiedenen Einheiten genauer an und lernen, wie man sie richtig umrechnet.


    Länge


    Wichtige Einheiten für Längen

    - Meter (m): Das ist die Basiseinheit für Längen. Meter ist die Grundlage, auf der alle anderen Längeneinheiten aufbauen.

    - Zentimeter (cm): 1 Meter sind 100 Zentimeter. Zentimeter benutzt man oft für kleinere Sachen, wie Bücher, Blätter oder die Höhe eines Stuhls.

    - Kilometer (km): 1 Kilometer sind 1000 Meter. Kilometer werden verwendet, um große Entfernungen zu messen, wie von einer Stadt zur nächsten oder für eine lange Wanderung.


    Wenn du Längen messen möchtest, wie den Weg zur Schule oder die Länge deines Zimmers, benutzt du oft Meter oder Zentimeter. Für größere Strecken, wie von einer Stadt zur nächsten, benutzt man Kilometer. Es gibt auch noch Millimeter, die noch kleiner sind: 1 Meter hat 1000 Millimeter. Millimeter werden verwendet, wenn man ganz genau messen muss, wie zum Beispiel die Dicke von Papier oder die Größe kleiner Bauteile.

    Ein Bild

    Umrechnen von Längeneinheiten

    - Von Kilometern zu Metern: Multipliziere die Kilometerzahl mit 1000.

    - Beispiel: 3 km = 3 × 1000 m = 3000 m

    - Von Metern zu Zentimetern: Multipliziere die Meterzahl mit 100.

    - Beispiel: 5 m = 5 × 100 cm = 500 cm

    - Von Zentimetern zu Metern: Teile die Zentimeter durch 100.

    - Beispiel: 200 cm = 200 ÷ 100 m = 2 m


    Beim Umrechnen von Längen ist es wichtig zu wissen, wann man multiplizieren und wann man dividieren muss. Das hilft dir, die richtige Einheit zu verwenden. Manchmal hilft es auch, sich die Umrechnungszahlen wie 1000 oder 100 auf kleine Notizzettel zu schreiben, damit man sie sich besser merken kann. So machst du keine Fehler beim Rechnen.


    Es kann auch nützlich sein, dir vorzustellen, wie lang die Einheiten wirklich sind. Ein Kilometer ist ungefähr so lang wie 10 Fußballfelder hintereinander, während ein Meter ungefähr so lang ist wie ein großer Tisch. Das gibt dir ein besseres Gefühl für die verschiedenen Längen.



    Gewicht


    Wichtige Einheiten für Gewicht

    - Gramm (g): Das ist die Basiseinheit für Gewicht. Gramm werden oft für leichtere Dinge verwendet, wie Lebensmittel oder Briefe.

    - Kilogramm (kg): 1 Kilogramm sind 1000 Gramm. Man verwendet Kilogramm, um das Gewicht von Menschen oder größeren Dingen anzugeben.

    - Tonne (t): 1 Tonne sind 1000 Kilogramm. Tonnen benutzt man, wenn etwas sehr schwer ist, wie Lastwagen, große Möbel oder sogar Elefanten.

    Mit Gewicht misst man, wie schwer etwas ist. Zum Beispiel wiegst du vielleicht 35 Kilogramm, während ein Apfel ungefähr 200 Gramm wiegt. Auch beim Backen ist das Gewicht sehr wichtig, damit du die richtige Menge an Zutaten verwendest. Wenn du zum Beispiel zu viel Mehl nimmst, wird dein Teig zu trocken.

    Ein Bild

    Umrechnen von Gewichtseinheiten

    - Von Kilogramm zu Gramm: Multipliziere die Kilogrammzahl mit 1000.

    - Beispiel: 4 kg = 4 × 1000 g = 4000 g

    - Von Gramm zu Kilogramm: Teile die Gramm durch 1000.

    - Beispiel: 2500 g = 2500 ÷ 1000 kg = 2,5 kg

    - Von Tonnen zu Kilogramm: Multipliziere die Zahl der Tonnen mit 1000.

    - Beispiel: 2 t = 2 × 1000 kg = 2000 kg


    Auch beim Backen oder Kochen ist es wichtig, die richtigen Gewichtseinheiten zu kennen. So kannst du die genaue Menge an Zutaten abwiegen, die du brauchst. Wenn du zum Beispiel Kuchen backen möchtest, ist es entscheidend, dass du das richtige Verhältnis von Mehl, Zucker und Butter verwendest, damit der Kuchen lecker und saftig wird.

    Wenn du mit sehr großen oder sehr kleinen Gewichten rechnest, hilft es manchmal, sich vorzustellen, wie viel diese wiegen. Ein Gramm wiegt ungefähr so viel wie eine Büroklammer, ein Kilogramm so viel wie eine volle Wasserflasche, und eine Tonne entspricht ungefähr dem Gewicht eines kleinen Autos.



    Zeit


    Wichtige Einheiten für Zeit

    - Sekunden (s): Das ist die Basiseinheit für Zeit. Sekunden nutzt man, um kurze Zeitspannen zu messen, wie das Zähneputzen oder die Dauer eines kurzen Laufs.

    - Minuten (min): 1 Minute sind 60 Sekunden. Minuten werden oft verwendet, um Dinge wie das Kochen eines Eies oder die Dauer eines Telefonats zu messen.

    - Stunden (h): 1 Stunde sind 60 Minuten. Stunden braucht man für längere Zeiträume, wie zum Beispiel den Schulunterricht oder das Schlafen.


    Zeit hilft uns, unseren Tag zu planen und zu verstehen, wie lange etwas dauert. Zum Beispiel dauert es vielleicht 45 Minuten, bis du zur Schule kommst, oder eine Stunde, um einen Kuchen zu backen. Um den Tag zu organisieren, ist es wichtig, die verschiedenen Zeiteinheiten zu verstehen. Ein Tag hat 24 Stunden, und eine Woche besteht aus 7 Tagen.

    Ein Bild

    Umrechnen von Zeiteinheiten

    - Von Stunden zu Minuten: Multipliziere die Stundenzahl mit 60.

    - Beispiel: 2 h = 2 × 60 min = 120 min

    - Von Minuten zu Sekunden: Multipliziere die Minuten mit 60.

    - Beispiel: 5 min = 5 × 60 s = 300 s

    - Von Sekunden zu Minuten: Teile die Sekunden durch 60.

    - Beispiel: 180 s = 180 ÷ 60 min = 3 min


    Es ist hilfreich, die Zeit richtig umzurechnen, damit du genau planen kannst, wie lange etwas dauert. Wenn du weißt, wie viele Minuten oder Sekunden du für eine Aufgabe brauchst, kannst du deinen Tag besser einteilen und die Zeit effizient nutzen.

    Es kann auch praktisch sein, eine Uhr oder einen Timer zu benutzen, um die Zeit zu messen. So weißt du genau, wie lange du für verschiedene Aktivitäten brauchst und kannst besser einschätzen, wie lange du für deine Hausaufgaben oder andere Aufgaben benötigst.


    Mit ein bisschen Übung wirst du immer besser darin, Längen, Gewichte oder Zeiten ganz leicht umzurechnen. Je öfter du übst, desto sicherer wirst du und kannst auch schwierige Aufgaben meistern. Rechnen mit Einheiten ist eine wichtige Grundlage für viele Bereiche, wie Naturwissenschaften oder alltägliche Dinge. Viel Spaß beim Üben!

    diff --git a/webseite/config/subjects/mathe/topics/rechnen-mit-klammern/article.html b/webseite/config/subjects/mathe/topics/rechnen-mit-klammern/article.html index 2fb6b2b..c55b313 100644 --- a/webseite/config/subjects/mathe/topics/rechnen-mit-klammern/article.html +++ b/webseite/config/subjects/mathe/topics/rechnen-mit-klammern/article.html @@ -1,43 +1 @@ -Wie wird es gemacht, wenn bei einer Aufgabe zunächst eine Addition ausgeführt werden soll und danach eine Multiplikation? Die Antwort lautet: Es wird eine Klammer gesetzt. Die mathematische Regel lautet dann ganz einfach "Eine Klammer wird zuerst berechnet". Um bei den ganzen Klammern, Punkt vor Strich usw. nicht durcheinander zu kommen, folgt hier noch einmal ein kurzer Leitfaden: - -

    - -1. Wenn eine Klammer in der Aufgabe vorhanden ist, wird diese zuerst berechnet
    - -2. Danach werden Multiplikation und Division ausgeführt
    - -3. Als letztes folgen Addition und Subtraktion
    -
    - -Der Leitfaden von oben sollte gemerkt werden, um dann die folgenden Beispiele zu verstehen: -

    -Aufgabe: (2 + 3) · 5 = ?
    -Lösung: (2 + 3) · 5 = 5 · 5 = 25

    -Aufgabe: 8 · (3 + 4) = ?
    -Lösung: 8 · (3 + 4) = 8 · 7 = 56

    -Aufgabe: 2 · (1 + 2) + 5 = ?
    -Lösung: 2 · (1 + 2) + 5 = 2 · 3 + 5 = 6 + 5 = 11

    -Aufgabe: 3 · (8 + 2) : 10 + 1 = ?
    -Lösung: 3 · (8 + 2) : 10 + 1 = 3 · 10 : 10 + 1 = 30 : 10 + 1 = 3 + 1 = 4

    - - -Erklärungen:
    -Gerade die beiden letzten Aufgaben könnten abschreckend wirken. Es wird jedoch mit den ersten beiden Aufgaben begonnen: In beiden Fällen wurde zunächst die Klammer berechnet. Das Ergebnis wurde dann mit der dahinter oder davor stehenden Zahl multipliziert. Bei der dritten Aufgabe wurde zuerst die Klammer berechnet, dann die Multiplikation und schließlich die Addition ausgeführt. -

    -Kommen wir zur letzten Aufgabe: Auch hier wurde zunächst die Klammer berechnet. Mit dem Ergebnis der Klammer konnte dann entweder als erstes multipliziert oder dividiert werden, das ist mathematisch gleichgültig. In meinem Rechenweg wurde zunächst multipliziert, dann dividiert, und schließlich addiert. Die Aufgabe sollte noch einmal Stück für Stück durchgegangen werden, um Klarheit zu erhalten. -

    - -Priorität bei Klammern / mehrere Klammern
    -Eine kleine Schwierigkeit muss zu guter Letzt noch angesprochen werden: Was passiert bei mehreren Klammern und verschachtelten Klammern? Dazu folgen zunächst zwei kleine Beispiele samt Lösungen, danach die Erklärung. -

    -Aufgabe: (5 + 3) + (1 + 2) = ?
    -Lösung: (5 + 3) + (1 + 2) = 8 + 3 = 11

    -Aufgabe: ((3 + 4) + 2) + 1 = ?
    -Lösung: [( 3 + 4 ) + 2 ] + 1 = (7 + 2) + 1 = 10

    - - -Erklärung:
    -Im ersten Beispiel gibt es zwei Klammern. Welche davon zuerst berechnet wird, ist vollkommen egal. Beide Klammern werden einzeln ausgerechnet und die Ergebnisse anschließend addiert. Kommen wir zum zweiten Beispiel: Hier gibt es zwei ineinander verschachtelte Klammern. Die Rechenregel dabei lautet ganz einfach: Immer zuerst die innere Klammer berechnen. -

    -Zur besseren Übersicht bei verschachtelten Klammern sehen diese meist etwas unterschiedlich aus: Die innere Klammer wird üblicherweise mit "(" und ")" gekennzeichnet, während die äußere Klammer mit "[" und "]" versehen wird. Natürlich gilt wie immer: Um die Rechenregeln wirklich zu beherrschen, sollten die Übungsaufgaben bearbeitet werden. -

    \ No newline at end of file +

    Wie wird es gemacht, wenn bei einer Aufgabe zunächst eine Addition ausgeführt werden soll und danach eine Multiplikation? Die Antwort lautet: Es wird eine Klammer gesetzt. Die mathematische Regel lautet dann ganz einfach "Eine Klammer wird zuerst berechnet". Um bei den ganzen Klammern, Punkt vor Strich usw. nicht durcheinander zu kommen, folgt hier noch einmal ein kurzer Leitfaden:

    1. Wenn eine Klammer in der Aufgabe vorhanden ist, wird diese zuerst berechnet

    2. Danach werden Multiplikation und Division ausgeführt

    3. Als letztes folgen Addition und Subtraktion


    Der Leitfaden von oben sollte gemerkt werden, um dann die folgenden Beispiele zu verstehen:


    Aufgabe: (2 + 3) · 5 = ?

    Lösung: (2 + 3) · 5 = 5 · 5 = 25


    Aufgabe: 8 · (3 + 4) = ?

    Lösung: 8 · (3 + 4) = 8 · 7 = 56


    Aufgabe: 2 · (1 + 2) + 5 = ?

    Lösung: 2 · (1 + 2) + 5 = 2 · 3 + 5 = 6 + 5 = 11


    Aufgabe: 3 · (8 + 2) : 10 + 1 = ?

    Lösung: 3 · (8 + 2) : 10 + 1 = 3 · 10 : 10 + 1 = 30 : 10 + 1 = 3 + 1 = 4


    Erklärungen:

    Gerade die beiden letzten Aufgaben könnten abschreckend wirken. Es wird jedoch mit den ersten beiden Aufgaben begonnen: In beiden Fällen wurde zunächst die Klammer berechnet. Das Ergebnis wurde dann mit der dahinter oder davor stehenden Zahl multipliziert. Bei der dritten Aufgabe wurde zuerst die Klammer berechnet, dann die Multiplikation und schließlich die Addition ausgeführt.


    Kommen wir zur letzten Aufgabe: Auch hier wurde zunächst die Klammer berechnet. Mit dem Ergebnis der Klammer konnte dann entweder als erstes multipliziert oder dividiert werden, das ist mathematisch gleichgültig. In meinem Rechenweg wurde zunächst multipliziert, dann dividiert, und schließlich addiert. Die Aufgabe sollte noch einmal Stück für Stück durchgegangen werden, um Klarheit zu erhalten.


    Priorität bei Klammern / mehrere Klammern

    Eine kleine Schwierigkeit muss zu guter Letzt noch angesprochen werden: Was passiert bei mehreren Klammern und verschachtelten Klammern? Dazu folgen zunächst zwei kleine Beispiele samt Lösungen, danach die Erklärung.


    Aufgabe: (5 + 3) + (1 + 2) = ?

    Lösung: (5 + 3) + (1 + 2) = 8 + 3 = 11


    Aufgabe: ((3 + 4) + 2) + 1 = ?

    Lösung: [( 3 + 4 ) + 2 ] + 1 = (7 + 2) + 1 = 10


    Erklärung:

    Im ersten Beispiel gibt es zwei Klammern. Welche davon zuerst berechnet wird, ist vollkommen egal. Beide Klammern werden einzeln ausgerechnet und die Ergebnisse anschließend addiert. Kommen wir zum zweiten Beispiel: Hier gibt es zwei ineinander verschachtelte Klammern. Die Rechenregel dabei lautet ganz einfach: Immer zuerst die innere Klammer berechnen.


    Zur besseren Übersicht bei verschachtelten Klammern sehen diese meist etwas unterschiedlich aus: Die innere Klammer wird üblicherweise mit "(" und ")" gekennzeichnet, während die äußere Klammer mit "[" und "]" versehen wird. Natürlich gilt wie immer: Um die Rechenregeln wirklich zu beherrschen, sollten die Übungsaufgaben bearbeitet werden.

    diff --git a/webseite/config/subjects/mathe/topics/schriftliches-dividieren/article.html b/webseite/config/subjects/mathe/topics/schriftliches-dividieren/article.html index 10425ce..56137b8 100644 --- a/webseite/config/subjects/mathe/topics/schriftliches-dividieren/article.html +++ b/webseite/config/subjects/mathe/topics/schriftliches-dividieren/article.html @@ -1,5 +1,5 @@ -$$ -\begin{array}{r@{}r@{}r@{}r} +


    $$ +\begin{array}{rrrr} & 8 & 4 & 0 & : & 4 & = & 2&1&0 \\ \hline - & 8 & & \\ % Erste Subtraktion @@ -9,16 +9,4 @@ $$ - & & & 0 & \\ % Letzte Subtraktion & & & 0 & % Endergebnis null \end{array} -$$ -

    - -1. Die vorderste Stelle des Dividenden wird genommen, das heißt, die 8. Nun wird geprüft, wie oft der Divisor - also die 4 - in die 8 passt. Dies passt 2 Mal. Daher wird die 2 in das Ergebnis (auch Quotient genannt) geschrieben.

    -2. Im nächsten Schritt wird zurückmultipliziert. Die 2 aus dem Ergebnis wird mit dem Divisor multipliziert: 2 · 4 = 8. Diese 8 wird vorne unter die andere 8 notiert.

    -3. Im dritten Rechenschritt wird eine Subtraktion durchgeführt. Es wird 8 - 8 = 0 gerechnet, und diese 0 wird unter dem Strich notiert.

    -4. Als nächstes wird die nächste Stelle der Zahl heruntergezogen. In diesem Beispiel ist dies die 4.

    -5. Die zuvor durchgeführten Rechenschritte beginnen nun von vorne. Wie oft passt der Divisor (4) in die 04? Dies passt genau 1 Mal, weshalb eine 1 in das Ergebnis geschrieben wird.

    -6. Erneut wird multipliziert. Die neue 1 aus dem Ergebnis wird mit dem Divisor (4) multipliziert, und man erhält 1 · 4 = 4. Diese 4 wird unter die 04 notiert. Es ist darauf zu achten, dass die letzte Stelle jeweils untereinander steht.

    -7. Als nächstes wird subtrahiert: 04 - 4 = 0. Anschließend wird die letzte Stelle der Zahl 840 nach unten gezogen, das heißt, die 0.

    -8. Wie oft passt die 0 in die 0? Dies passt 0 Mal. Alternativ lässt sich sagen: 0 : 4 = 0. Diese 0 wird ebenfalls in das Ergebnis geschrieben.

    -9. Nun wird wieder zurückmultipliziert: 0 · 4 = 0. Bei der Subtraktion bleibt nichts übrig, und es gibt keine weiteren Stellen mehr.

    -10. Das Endergebnis lautet somit: 840 : 4 = 210.

    \ No newline at end of file +$$


    1. Die vorderste Stelle des Dividenden wird genommen, das heißt, die 8. Nun wird geprüft, wie oft der Divisor - also die 4 - in die 8 passt. Dies passt 2 Mal. Daher wird die 2 in das Ergebnis (auch Quotient genannt) geschrieben.


    2. Im nächsten Schritt wird zurückmultipliziert. Die 2 aus dem Ergebnis wird mit dem Divisor multipliziert: 2 · 4 = 8. Diese 8 wird vorne unter die andere 8 notiert.


    3. Im dritten Rechenschritt wird eine Subtraktion durchgeführt. Es wird 8 - 8 = 0 gerechnet, und diese 0 wird unter dem Strich notiert.


    4. Als nächstes wird die nächste Stelle der Zahl heruntergezogen. In diesem Beispiel ist dies die 4.


    5. Die zuvor durchgeführten Rechenschritte beginnen nun von vorne. Wie oft passt der Divisor (4) in die 04? Dies passt genau 1 Mal, weshalb eine 1 in das Ergebnis geschrieben wird.


    6. Erneut wird multipliziert. Die neue 1 aus dem Ergebnis wird mit dem Divisor (4) multipliziert, und man erhält 1 · 4 = 4. Diese 4 wird unter die 04 notiert. Es ist darauf zu achten, dass die letzte Stelle jeweils untereinander steht.


    7. Als nächstes wird subtrahiert: 04 - 4 = 0. Anschließend wird die letzte Stelle der Zahl 840 nach unten gezogen, das heißt, die 0.


    8. Wie oft passt die 0 in die 0? Dies passt 0 Mal. Alternativ lässt sich sagen: 0 : 4 = 0. Diese 0 wird ebenfalls in das Ergebnis geschrieben.


    9. Nun wird wieder zurückmultipliziert: 0 · 4 = 0. Bei der Subtraktion bleibt nichts übrig, und es gibt keine weiteren Stellen mehr.


    10. Das Endergebnis lautet somit: 840 : 4 = 210.

    diff --git a/webseite/config/subjects/mathe/topics/schriftliches-multiplizieren/article.html b/webseite/config/subjects/mathe/topics/schriftliches-multiplizieren/article.html index f304e0b..de1d010 100644 --- a/webseite/config/subjects/mathe/topics/schriftliches-multiplizieren/article.html +++ b/webseite/config/subjects/mathe/topics/schriftliches-multiplizieren/article.html @@ -1,36 +1,15 @@ -Kommen wir nun zur schriftlichen Multiplikation: Das Ziel dieses Artikels ist es, Multiplikationsaufgaben wie zum Beispiel 12 · 30 zu lösen. Die Aufgabe wird hier zunächst vorgerechnet – gefolgt von einem zweiten Beispiel – und die Vorgehensweise wird anschließend unterhalb der Rechnung erläutert. - -

    -$$ -\begin{array}{r@{}r@{}r@{}r} +

    Kommen wir nun zur schriftlichen Multiplikation: Das Ziel dieses Artikels ist es, Multiplikationsaufgaben wie zum Beispiel 12 · 30 zu lösen. Die Aufgabe wird hier zunächst vorgerechnet – gefolgt von einem zweiten Beispiel – und die Vorgehensweise wird anschließend unterhalb der Rechnung erläutert.


    $$ +\begin{array}{rrrr} & 1 & 2 & \times & 3 & 2 & \\ \hline % mal 32 & & & 3 & 6 \\ % 12 * 2 = 36 + &&&& 2 & 4 \\ \hline % 12 * 3 mit Zehnerstelle = 240 &&& 3 & 8 & 4 % Ergebnis \end{array} -$$ -

    - -So wird es gemacht. - -

    - -1. Die beiden Zahlen werden nebeneinander geschrieben und das Multiplikationszeichen dazwischen gesetzt. Darunter wird ein Strich gezogen.
    -2. Danach wird die erste Zahl mit der ersten Stelle des zweiten Faktors multipliziert. Auf gut Deutsch: 12 · 3 = 36. Die 36 wird unter der 3 notiert.
    -3. Dasselbe wird für die zweite Stelle durchgeführt: 12 · 2 = 24. Diese Zahl wird unter der 2 geschrieben.
    -4. Anschließend wird schriftlich addiert. Stelle für Stelle wird von rechts nach links addiert: 4 + 0 = 4; 6 + 2 = 8; 3 + 0 = 3.
    -Das Ergebnis ist somit 12 · 32 = 384.
    -

    Ein weiteres Beispiel
    - -$$ -\begin{array}{r@{}r@{}r@{}r@{}r@{}r} +$$


    So wird es gemacht.


    1. Die beiden Zahlen werden nebeneinander geschrieben und das Multiplikationszeichen dazwischen gesetzt. Darunter wird ein Strich gezogen.

    2. Danach wird die erste Zahl mit der ersten Stelle des zweiten Faktors multipliziert. Auf gut Deutsch: 12 · 3 = 36. Die 36 wird unter der 3 notiert.

    3. Dasselbe wird für die zweite Stelle durchgeführt: 12 · 2 = 24. Diese Zahl wird unter der 2 geschrieben.

    4. Anschließend wird schriftlich addiert. Stelle für Stelle wird von rechts nach links addiert: 4 + 0 = 4; 6 + 2 = 8; 3 + 0 = 3.

    Das Ergebnis ist somit 12 · 32 = 384.



    Ein weiteres Beispiel

    $$ +\begin{array}{rrrrr} 2 & 8 & 4 & 6 & 8 & \times & 1 & 6 \\ \hline % mal 16 && \textcolor{red}{2} & \textcolor{red}{8} & \textcolor{red}{4} & \textcolor{red}{6} & \textcolor{red}{8} \\ % 28468 * 6 (Einerstelle) + && \textcolor{green}{1} & \textcolor{green}{7} & \textcolor{green}{0} & \textcolor{green}{8} & \textcolor{green}{0} & \textcolor{green}{8} \\ \hline % 28468 * 10 (Zehnerstelle) && 4 & 5 & 5 & 4 & 8 & 8 % Ergebnis \end{array} -$$ -
    -1. Es wird 28468 · 1 mit der bekannten Rechenweise aus den vorherigen Beispielen berechnet, und das Ergebnis wird so notiert, dass die letzte Stelle unter der 1 steht.
    -2. Es wird 28468 · 6 ebenfalls mit der bekannten Rechenweise berechnet, und das Ergebnis wird so eingetragen, dass die letzte Stelle unter der 6 steht.
    -3. Es wird eine schriftliche Addition durchgeführt (0 + 8 = 8, 8 + 0 = 8 usw.). Die übereinander stehenden Stellen werden jeweils addiert.

    \ No newline at end of file +$$

    1. Es wird 28468 · 1 mit der bekannten Rechenweise aus den vorherigen Beispielen berechnet, und das Ergebnis wird so notiert, dass die letzte Stelle unter der 1 steht.

    2. Es wird 28468 · 6 ebenfalls mit der bekannten Rechenweise berechnet, und das Ergebnis wird so eingetragen, dass die letzte Stelle unter der 6 steht.

    3. Es wird eine schriftliche Addition durchgeführt (0 + 8 = 8, 8 + 0 = 8 usw.). Die übereinander stehenden Stellen werden jeweils addiert.

    diff --git a/webseite/header.php b/webseite/header.php index 21eb561..1384744 100644 --- a/webseite/header.php +++ b/webseite/header.php @@ -24,8 +24,7 @@ isLoggedIn()) { ?>
    @@ -54,10 +53,11 @@
    - + + diff --git a/webseite/index.php b/webseite/index.php index a991752..cfec01a 100644 --- a/webseite/index.php +++ b/webseite/index.php @@ -1,3 +1,8 @@ + + @@ -10,7 +15,14 @@ - + + + @@ -77,9 +89,19 @@ - +isLoggedIn()) { + ?> + + + + + +