diff --git a/controllers/almanach_contents_edit.go b/controllers/almanach_contents_edit.go index eb3e1ec..a9217b0 100644 --- a/controllers/almanach_contents_edit.go +++ b/controllers/almanach_contents_edit.go @@ -68,6 +68,7 @@ func (p *AlmanachContentsEditPage) GET(engine *templating.Engine, app core.App) data["content_types"] = dbmodels.CONTENT_TYPE_VALUES data["musenalm_types"] = dbmodels.MUSENALM_TYPE_VALUES data["pagination_values"] = paginationValuesSorted() + data["agent_relations"] = dbmodels.AGENT_RELATIONS if msg := e.Request.URL.Query().Get("saved_message"); msg != "" { data["success"] = msg @@ -92,6 +93,7 @@ func (p *AlmanachContentsEditPage) renderError(engine *templating.Engine, app co data["content_types"] = dbmodels.CONTENT_TYPE_VALUES data["musenalm_types"] = dbmodels.MUSENALM_TYPE_VALUES data["pagination_values"] = paginationValuesSorted() + data["agent_relations"] = dbmodels.AGENT_RELATIONS data["error"] = message data["edit_content_id"] = strings.TrimSpace(e.Request.URL.Query().Get("edit_content")) data["new_content"] = strings.TrimSpace(e.Request.URL.Query().Get("new_content")) @@ -125,6 +127,14 @@ func (p *AlmanachContentsEditPage) POSTSave(engine *templating.Engine, app core. contentInputs := parseContentsForm(e.Request.PostForm) contentOrder := parseContentsOrder(e.Request.PostForm) orderMap := buildContentOrderMap(contentOrder) + relationsByContent := map[string]contentAgentRelationsPayload{} + for contentID := range contentInputs { + payload := parseContentAgentRelations(e.Request.PostForm, contentID) + if err := validateContentAgentRelations(payload); err != nil { + return p.renderSaveError(engine, app, e, req, nil, nil, err.Error(), isHTMX) + } + relationsByContent[contentID] = payload + } user := req.User() existingByID := make(map[string]*dbmodels.Content, len(contents)) for _, content := range contents { @@ -192,6 +202,11 @@ func (p *AlmanachContentsEditPage) POSTSave(engine *templating.Engine, app core. if err := tx.Save(content); err != nil { return err } + if relations, ok := relationsByContent[tempID]; ok { + if err := applyContentAgentRelations(tx, content, relations); err != nil { + return err + } + } created = append(created, content) } for _, content := range contents { @@ -206,6 +221,11 @@ func (p *AlmanachContentsEditPage) POSTSave(engine *templating.Engine, app core. if err := tx.Save(content); err != nil { return err } + if relations, ok := relationsByContent[content.Id]; ok { + if err := applyContentAgentRelations(tx, content, relations); err != nil { + return err + } + } } updatedContents = append(updatedContents, contents...) updatedContents = append(updatedContents, created...) @@ -267,6 +287,9 @@ func (p *AlmanachContentsEditPage) POSTInsert(engine *templating.Engine, app cor "content_types": dbmodels.CONTENT_TYPE_VALUES, "musenalm_types": dbmodels.MUSENALM_TYPE_VALUES, "pagination_values": paginationValuesSorted(), + "agent_relations": dbmodels.AGENT_RELATIONS, + "agents": map[string]*dbmodels.Agent{}, + "content_agents": []*dbmodels.RContentsAgents{}, "open_edit": true, "is_new": true, "content_id": record.Id, @@ -424,6 +447,49 @@ func (p *AlmanachContentsEditPage) renderSaveError( isNew = true } + relationsPayload := parseContentAgentRelations(e.Request.PostForm, contentID) + if err := validateContentAgentRelations(relationsPayload); err != nil { + return p.renderError(engine, app, e, err.Error()) + } + + renderRelations := []contentAgentRender{} + renderNewRelations := []contentAgentRender{} + agentIDs := map[string]struct{}{} + for _, relation := range relationsPayload.Relations { + renderRelations = append(renderRelations, contentAgentRender{ + Id: relation.ID, + Agent: relation.TargetID, + Type: relation.Type, + Uncertain: relation.Uncertain, + }) + if relation.TargetID != "" { + agentIDs[relation.TargetID] = struct{}{} + } + } + for _, relation := range relationsPayload.NewRelations { + renderNewRelations = append(renderNewRelations, contentAgentRender{ + Agent: relation.TargetID, + Type: relation.Type, + Uncertain: relation.Uncertain, + }) + if relation.TargetID != "" { + agentIDs[relation.TargetID] = struct{}{} + } + } + + agentsMap := map[string]*dbmodels.Agent{} + if len(agentIDs) > 0 { + ids := make([]any, 0, len(agentIDs)) + for id := range agentIDs { + ids = append(ids, id) + } + if agents, err := dbmodels.Agents_IDs(app, ids); err == nil { + for _, agent := range agents { + agentsMap[agent.Id] = agent + } + } + } + numbering := 0.0 if order := parseContentsOrder(e.Request.PostForm); len(order) > 0 { if mapped, ok := buildContentOrderMap(order)[contentID]; ok { @@ -440,6 +506,10 @@ func (p *AlmanachContentsEditPage) renderSaveError( "content_types": dbmodels.CONTENT_TYPE_VALUES, "musenalm_types": dbmodels.MUSENALM_TYPE_VALUES, "pagination_values": paginationValuesSorted(), + "agent_relations": dbmodels.AGENT_RELATIONS, + "agents": agentsMap, + "content_agents_render": renderRelations, + "content_agents_new": renderNewRelations, "open_edit": true, "is_new": isNew, "error": message, @@ -482,6 +552,136 @@ func parseContentsForm(form url.Values) map[string]map[string][]string { return contentInputs } +type contentAgentRelationPayload struct { + ID string + TargetID string + Type string + Uncertain bool +} + +type contentAgentRelationsPayload struct { + Relations []contentAgentRelationPayload + NewRelations []contentAgentRelationPayload + DeletedIDs []string +} + +type contentAgentRender struct { + Id string + Agent string + Type string + Uncertain bool +} + +func valuesForKey(form url.Values, key string) []string { + if values, ok := form[key]; ok { + return values + } + if values, ok := form[key+"[]"]; ok { + return values + } + return nil +} + +func hasKey(form url.Values, key string) bool { + _, ok := form[key] + return ok +} + +func parseContentAgentRelations(form url.Values, contentID string) contentAgentRelationsPayload { + payload := contentAgentRelationsPayload{} + if contentID == "" { + return payload + } + prefix := fmt.Sprintf("content_%s_agents_", contentID) + idPrefix := prefix + "id[" + + for key, values := range form { + if !strings.HasPrefix(key, idPrefix) { + continue + } + relationKey := strings.TrimSuffix(strings.TrimPrefix(key, idPrefix), "]") + relationID := strings.TrimSpace(firstValue(values)) + if relationKey == "" || relationID == "" { + continue + } + targetKey := fmt.Sprintf("%sagent[%s]", prefix, relationKey) + typeKey := fmt.Sprintf("%stype[%s]", prefix, relationKey) + deleteKey := fmt.Sprintf("%sdelete[%s]", prefix, relationKey) + uncertainKey := fmt.Sprintf("%suncertain[%s]", prefix, relationKey) + + targetID := strings.TrimSpace(firstValue(valuesForKey(form, targetKey))) + if targetID == "" { + continue + } + if _, ok := form[deleteKey]; ok { + payload.DeletedIDs = append(payload.DeletedIDs, relationID) + continue + } + payload.Relations = append(payload.Relations, contentAgentRelationPayload{ + ID: relationID, + TargetID: targetID, + Type: strings.TrimSpace(firstValue(valuesForKey(form, typeKey))), + Uncertain: hasKey(form, uncertainKey), + }) + } + + newIDs := valuesForKey(form, prefix+"new_id") + newTypes := valuesForKey(form, prefix+"new_type") + newUncertain := valuesForKey(form, prefix+"new_uncertain") + uncertainSet := map[string]struct{}{} + for _, value := range newUncertain { + trimmed := strings.TrimSpace(value) + if trimmed == "" { + continue + } + uncertainSet[trimmed] = struct{}{} + } + + for index, targetID := range newIDs { + targetID = strings.TrimSpace(targetID) + if targetID == "" { + continue + } + relationType := "" + if index < len(newTypes) { + relationType = strings.TrimSpace(newTypes[index]) + } + _, uncertain := uncertainSet[targetID] + payload.NewRelations = append(payload.NewRelations, contentAgentRelationPayload{ + TargetID: targetID, + Type: relationType, + Uncertain: uncertain, + }) + } + + return payload +} + +func validateContentAgentRelations(payload contentAgentRelationsPayload) error { + for _, relation := range payload.Relations { + if err := validateRelationTypeValue(relation.Type, dbmodels.AGENT_RELATIONS); err != nil { + return err + } + } + for _, relation := range payload.NewRelations { + if err := validateRelationTypeValue(relation.Type, dbmodels.AGENT_RELATIONS); err != nil { + return err + } + } + return nil +} + +func validateRelationTypeValue(value string, allowed []string) error { + value = strings.TrimSpace(value) + if value == "" { + return fmt.Errorf("Ungültiger Beziehungstyp.") + } + if !slices.Contains(allowed, value) { + return fmt.Errorf("Ungültiger Beziehungstyp.") + } + return nil +} + func applyContentForm(content *dbmodels.Content, entry *dbmodels.Entry, fields map[string][]string, user *dbmodels.FixedUser, numbering float64) error { preferredTitle := buildContentPreferredTitle(content, fields) if preferredTitle == "" { @@ -554,6 +754,86 @@ func applyContentForm(content *dbmodels.Content, entry *dbmodels.Entry, fields m return nil } +func applyContentAgentRelations(tx core.App, content *dbmodels.Content, payload contentAgentRelationsPayload) error { + if content == nil { + return nil + } + tableName := dbmodels.RelationTableName(dbmodels.CONTENTS_TABLE, dbmodels.AGENTS_TABLE) + var collection *core.Collection + getCollection := func() (*core.Collection, error) { + if collection != nil { + return collection, nil + } + col, err := tx.FindCollectionByNameOrId(tableName) + if err != nil { + return nil, err + } + collection = col + return collection, nil + } + + for _, relation := range payload.Relations { + relationID := strings.TrimSpace(relation.ID) + if relationID == "" { + continue + } + record, err := tx.FindRecordById(tableName, relationID) + if err != nil { + return err + } + proxy := dbmodels.NewRContentsAgents(record) + if proxy.Content() != content.Id { + return fmt.Errorf("Relation %s gehört zu einem anderen Beitrag.", relationID) + } + proxy.SetContent(content.Id) + proxy.SetAgent(strings.TrimSpace(relation.TargetID)) + proxy.SetType(strings.TrimSpace(relation.Type)) + proxy.SetUncertain(relation.Uncertain) + if err := tx.Save(proxy); err != nil { + return err + } + } + + for _, relationID := range payload.DeletedIDs { + relationID = strings.TrimSpace(relationID) + if relationID == "" { + continue + } + record, err := tx.FindRecordById(tableName, relationID) + if err != nil { + continue + } + proxy := dbmodels.NewRContentsAgents(record) + if proxy.Content() != content.Id { + continue + } + if err := tx.Delete(record); err != nil { + return err + } + } + + for _, relation := range payload.NewRelations { + targetID := strings.TrimSpace(relation.TargetID) + if targetID == "" { + continue + } + col, err := getCollection() + if err != nil { + return err + } + proxy := dbmodels.NewRContentsAgents(core.NewRecord(col)) + proxy.SetContent(content.Id) + proxy.SetAgent(targetID) + proxy.SetType(strings.TrimSpace(relation.Type)) + proxy.SetUncertain(relation.Uncertain) + if err := tx.Save(proxy); err != nil { + return err + } + } + + return nil +} + func applyContentFormDraft(content *dbmodels.Content, entry *dbmodels.Entry, fields map[string][]string, numbering float64) { if value, ok := optionalFieldValue(fields, "variant_title"); ok { content.SetVariantTitle(value) diff --git a/views/assets/scripts.js b/views/assets/scripts.js index ed12ab2..0db866a 100644 --- a/views/assets/scripts.js +++ b/views/assets/scripts.js @@ -1,11 +1,11 @@ -var To = Object.defineProperty; +var ko = Object.defineProperty; var as = (s) => { throw TypeError(s); }; -var ko = (s, t, e) => t in s ? To(s, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : s[t] = e; -var ee = (s, t, e) => ko(s, typeof t != "symbol" ? t + "" : t, e), Si = (s, t, e) => t.has(s) || as("Cannot " + e); -var Li = (s, t, e) => (Si(s, t, "read from private field"), e ? e.call(s) : t.get(s)), ie = (s, t, e) => t.has(s) ? as("Cannot add the same private member more than once") : t instanceof WeakSet ? t.add(s) : t.set(s, e), Be = (s, t, e, i) => (Si(s, t, "write to private field"), i ? i.call(s, e) : t.set(s, e), e), Ne = (s, t, e) => (Si(s, t, "access private method"), e); -var Io = "2.1.16"; +var Io = (s, t, e) => t in s ? ko(s, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : s[t] = e; +var ie = (s, t, e) => Io(s, typeof t != "symbol" ? t + "" : t, e), Si = (s, t, e) => t.has(s) || as("Cannot " + e); +var Li = (s, t, e) => (Si(s, t, "read from private field"), e ? e.call(s) : t.get(s)), ne = (s, t, e) => t.has(s) ? as("Cannot add the same private member more than once") : t instanceof WeakSet ? t.add(s) : t.set(s, e), Be = (s, t, e, i) => (Si(s, t, "write to private field"), i ? i.call(s, e) : t.set(s, e), e), Ne = (s, t, e) => (Si(s, t, "access private method"), e); +var Ro = "2.1.16"; const kt = "[data-trix-attachment]", Ln = { preview: { presentation: "gallery", caption: { name: !0, size: !0 } }, file: { caption: { size: !0 } } }, G = { default: { tagName: "div", parse: !1 }, quote: { tagName: "blockquote", nestable: !0 }, heading1: { tagName: "h1", terminal: !0, breakOnReturn: !0, group: !1 }, code: { tagName: "pre", terminal: !0, htmlAttributes: ["language"], text: { plaintext: !0 } }, bulletList: { tagName: "ul", parse: !1 }, bullet: { tagName: "li", listAttribute: "bulletList", group: !1, nestable: !0, test(s) { return ls(s.parentNode) === G[this.listAttribute].tagName; } }, numberList: { tagName: "ol", parse: !1 }, number: { tagName: "li", listAttribute: "numberList", group: !1, nestable: !0, test(s) { @@ -14,9 +14,9 @@ const kt = "[data-trix-attachment]", Ln = { preview: { presentation: "gallery", var t; return s == null || (t = s.tagName) === null || t === void 0 ? void 0 : t.toLowerCase(); }, cs = navigator.userAgent.match(/android\s([0-9]+.*Chrome)/i), Ci = cs && parseInt(cs[1]); -var Le = { composesExistingText: /Android.*Chrome/.test(navigator.userAgent), recentAndroid: Ci && Ci > 12, samsungAndroid: Ci && navigator.userAgent.match(/Android.*SM-/), forcesObjectResizing: /Trident.*rv:11/.test(navigator.userAgent), supportsInputEvents: typeof InputEvent < "u" && ["data", "getTargetRanges", "inputType"].every((s) => s in InputEvent.prototype) }, Ar = { ADD_ATTR: ["language"], SAFE_FOR_XML: !1, RETURN_DOM: !0 }, b = { attachFiles: "Attach Files", bold: "Bold", bullets: "Bullets", byte: "Byte", bytes: "Bytes", captionPlaceholder: "Add a caption…", code: "Code", heading1: "Heading", indent: "Increase Level", italic: "Italic", link: "Link", numbers: "Numbers", outdent: "Decrease Level", quote: "Quote", redo: "Redo", remove: "Remove", strike: "Strikethrough", undo: "Undo", unlink: "Unlink", url: "URL", urlPlaceholder: "Enter a URL…", GB: "GB", KB: "KB", MB: "MB", PB: "PB", TB: "TB" }; -const Ro = [b.bytes, b.KB, b.MB, b.GB, b.TB, b.PB]; -var yr = { prefix: "IEC", precision: 2, formatter(s) { +var Le = { composesExistingText: /Android.*Chrome/.test(navigator.userAgent), recentAndroid: Ci && Ci > 12, samsungAndroid: Ci && navigator.userAgent.match(/Android.*SM-/), forcesObjectResizing: /Trident.*rv:11/.test(navigator.userAgent), supportsInputEvents: typeof InputEvent < "u" && ["data", "getTargetRanges", "inputType"].every((s) => s in InputEvent.prototype) }, yr = { ADD_ATTR: ["language"], SAFE_FOR_XML: !1, RETURN_DOM: !0 }, b = { attachFiles: "Attach Files", bold: "Bold", bullets: "Bullets", byte: "Byte", bytes: "Bytes", captionPlaceholder: "Add a caption…", code: "Code", heading1: "Heading", indent: "Increase Level", italic: "Italic", link: "Link", numbers: "Numbers", outdent: "Decrease Level", quote: "Quote", redo: "Redo", remove: "Remove", strike: "Strikethrough", undo: "Undo", unlink: "Unlink", url: "URL", urlPlaceholder: "Enter a URL…", GB: "GB", KB: "KB", MB: "MB", PB: "PB", TB: "TB" }; +const Do = [b.bytes, b.KB, b.MB, b.GB, b.TB, b.PB]; +var Er = { prefix: "IEC", precision: 2, formatter(s) { switch (s) { case 0: return "0 ".concat(b.bytes); @@ -26,16 +26,16 @@ var yr = { prefix: "IEC", precision: 2, formatter(s) { let t; this.prefix === "SI" ? t = 1e3 : this.prefix === "IEC" && (t = 1024); const e = Math.floor(Math.log(s) / Math.log(t)), i = (s / Math.pow(t, e)).toFixed(this.precision).replace(/0*$/, "").replace(/\.$/, ""); - return "".concat(i, " ").concat(Ro[e]); + return "".concat(i, " ").concat(Do[e]); } } }; -const ni = "\uFEFF", At = " ", Er = function(s) { +const ni = "\uFEFF", At = " ", xr = function(s) { for (const t in s) { const e = s[t]; this[t] = e; } return this; -}, Cn = document.documentElement, Do = Cn.matches, k = function(s) { +}, Cn = document.documentElement, Oo = Cn.matches, k = function(s) { let { onElement: t, matchingSelector: e, withCallback: i, inPhase: n, preventDefault: r, times: o } = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}; const a = t || Cn, l = e, d = n === "capturing", h = function(m) { o != null && --o == 0 && h.destroy(); @@ -43,17 +43,17 @@ const ni = "\uFEFF", At = " ", Er = function(s) { p != null && (i == null || i.call(p, m, p), r && m.preventDefault()); }; return h.destroy = () => a.removeEventListener(s, h, d), a.addEventListener(s, h, d), h; -}, xr = function(s) { +}, Sr = function(s) { let { bubbles: t, cancelable: e, attributes: i } = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}; t = t !== !1, e = e !== !1; const n = document.createEvent("Events"); - return n.initEvent(s, t, e), i != null && Er.call(n, i), n; + return n.initEvent(s, t, e), i != null && xr.call(n, i), n; }, me = function(s) { let { onElement: t, bubbles: e, cancelable: i, attributes: n } = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}; - const r = t ?? Cn, o = xr(s, { bubbles: e, cancelable: i, attributes: n }); + const r = t ?? Cn, o = Sr(s, { bubbles: e, cancelable: i, attributes: n }); return r.dispatchEvent(o); -}, Sr = function(s, t) { - if ((s == null ? void 0 : s.nodeType) === 1) return Do.call(s, t); +}, Lr = function(s, t) { + if ((s == null ? void 0 : s.nodeType) === 1) return Oo.call(s, t); }, yt = function(s) { let { matchingSelector: t, untilNode: e } = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}; for (; s && s.nodeType !== Node.ELEMENT_NODE; ) s = s.parentNode; @@ -61,7 +61,7 @@ const ni = "\uFEFF", At = " ", Er = function(s) { if (t == null) return s; if (s.closest && e == null) return s.closest(t); for (; s && s !== e; ) { - if (Sr(s, t)) return s; + if (Lr(s, t)) return s; s = s.parentNode; } } @@ -110,24 +110,24 @@ const ni = "\uFEFF", At = " ", Er = function(s) { n.appendChild(r); }), n; }; -let ne; +let se; const ge = function() { - if (ne != null) return ne; - ne = []; + if (se != null) return se; + se = []; for (const s in G) { const t = G[s]; - t.tagName && ne.push(t.tagName); + t.tagName && se.push(t.tagName); } - return ne; -}, Ti = (s) => zt(s == null ? void 0 : s.firstChild), ds = function(s) { + return se; +}, Ti = (s) => Kt(s == null ? void 0 : s.firstChild), ds = function(s) { let { strict: t } = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : { strict: !0 }; - return t ? zt(s) : zt(s) || !zt(s.firstChild) && function(e) { + return t ? Kt(s) : Kt(s) || !Kt(s.firstChild) && function(e) { return ge().includes(K(e)) && !ge().includes(K(e.firstChild)); }(s); -}, zt = (s) => Oo(s) && (s == null ? void 0 : s.data) === "block", Oo = (s) => (s == null ? void 0 : s.nodeType) === Node.COMMENT_NODE, Kt = function(s) { +}, Kt = (s) => Mo(s) && (s == null ? void 0 : s.data) === "block", Mo = (s) => (s == null ? void 0 : s.nodeType) === Node.COMMENT_NODE, Gt = function(s) { let { name: t } = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}; - if (s) return pe(s) ? s.data === ni ? !t || s.parentNode.dataset.trixCursorTarget === t : void 0 : Kt(s.firstChild); -}, It = (s) => Sr(s, kt), Lr = (s) => pe(s) && (s == null ? void 0 : s.data) === "", pe = (s) => (s == null ? void 0 : s.nodeType) === Node.TEXT_NODE, Tn = { level2Enabled: !0, getLevel() { + if (s) return pe(s) ? s.data === ni ? !t || s.parentNode.dataset.trixCursorTarget === t : void 0 : Gt(s.firstChild); +}, It = (s) => Lr(s, kt), Cr = (s) => pe(s) && (s == null ? void 0 : s.data) === "", pe = (s) => (s == null ? void 0 : s.nodeType) === Node.TEXT_NODE, Tn = { level2Enabled: !0, getLevel() { return this.level2Enabled && Le.supportsInputEvents ? 2 : 0; }, pickFiles(s) { const t = _("input", { type: "file", multiple: !0, hidden: !0, id: this.fileInputId }); @@ -142,7 +142,7 @@ var Ke = { removeBlankTableCells: !1, tableCellSeparator: " | ", tableRowSeparat } }, italic: { tagName: "em", inheritable: !0, parser: (s) => window.getComputedStyle(s).fontStyle === "italic" }, href: { groupTagName: "a", parser(s) { const t = "a:not(".concat(kt, ")"), e = s.closest(t); if (e) return e.getAttribute("href"); -} }, strike: { tagName: "del", inheritable: !0 }, frozen: { style: { backgroundColor: "highlight" } } }, Cr = { getDefaultHTML: () => `
`) }; const hn = { interval: 5e3 }; -var Ce = Object.freeze({ __proto__: null, attachments: Ln, blockAttributes: G, browser: Le, css: { attachment: "attachment", attachmentCaption: "attachment__caption", attachmentCaptionEditor: "attachment__caption-editor", attachmentMetadata: "attachment__metadata", attachmentMetadataContainer: "attachment__metadata-container", attachmentName: "attachment__name", attachmentProgress: "attachment__progress", attachmentSize: "attachment__size", attachmentToolbar: "attachment__toolbar", attachmentGallery: "attachment-gallery" }, dompurify: Ar, fileSize: yr, input: Tn, keyNames: { 8: "backspace", 9: "tab", 13: "return", 27: "escape", 37: "left", 39: "right", 46: "delete", 68: "d", 72: "h", 79: "o" }, lang: b, parser: Ke, textAttributes: Dt, toolbar: Cr, undo: hn }); +var Ce = Object.freeze({ __proto__: null, attachments: Ln, blockAttributes: G, browser: Le, css: { attachment: "attachment", attachmentCaption: "attachment__caption", attachmentCaptionEditor: "attachment__caption-editor", attachmentMetadata: "attachment__metadata", attachmentMetadataContainer: "attachment__metadata-container", attachmentName: "attachment__name", attachmentProgress: "attachment__progress", attachmentSize: "attachment__size", attachmentToolbar: "attachment__toolbar", attachmentGallery: "attachment-gallery" }, dompurify: yr, fileSize: Er, input: Tn, keyNames: { 8: "backspace", 9: "tab", 13: "return", 27: "escape", 37: "left", 39: "right", 46: "delete", 68: "d", 72: "h", 79: "o" }, lang: b, parser: Ke, textAttributes: Dt, toolbar: wr, undo: hn }); class B { static proxyMethod(t) { - const { name: e, toMethod: i, toProperty: n, optional: r } = Mo(t); + const { name: e, toMethod: i, toProperty: n, optional: r } = Bo(t); this.prototype[e] = function() { let o, a; var l, d; @@ -195,12 +195,12 @@ class B { }; } } -const Mo = function(s) { - const t = s.match(Bo); +const Bo = function(s) { + const t = s.match(No); if (!t) throw new Error("can't parse @proxyMethod expression: ".concat(s)); const e = { name: t[4] }; return t[2] != null ? e.toMethod = t[1] : e.toProperty = t[1], t[3] != null && (e.optional = !0), e; -}, { apply: hs } = Function.prototype, Bo = new RegExp("^(.+?)(\\(\\))?(\\?)?\\.(.+?)$"); +}, { apply: hs } = Function.prototype, No = new RegExp("^(.+?)(\\(\\))?(\\?)?\\.(.+?)$"); var ki, Ii, Ri; class ye extends B { static box() { @@ -241,9 +241,9 @@ class ye extends B { return this.ucs2String; } } -const No = ((ki = Array.from) === null || ki === void 0 ? void 0 : ki.call(Array, "👼").length) === 1, Po = ((Ii = " ".codePointAt) === null || Ii === void 0 ? void 0 : Ii.call(" ", 0)) != null, Fo = ((Ri = String.fromCodePoint) === null || Ri === void 0 ? void 0 : Ri.call(String, 32, 128124)) === " 👼"; +const Po = ((ki = Array.from) === null || ki === void 0 ? void 0 : ki.call(Array, "👼").length) === 1, Fo = ((Ii = " ".codePointAt) === null || Ii === void 0 ? void 0 : Ii.call(" ", 0)) != null, qo = ((Ri = String.fromCodePoint) === null || Ri === void 0 ? void 0 : Ri.call(String, 32, 128124)) === " 👼"; let un, mn; -un = No && Po ? (s) => Array.from(s).map((t) => t.codePointAt(0)) : function(s) { +un = Po && Fo ? (s) => Array.from(s).map((t) => t.codePointAt(0)) : function(s) { const t = []; let e = 0; const { length: i } = s; @@ -256,7 +256,7 @@ un = No && Po ? (s) => Array.from(s).map((t) => t.codePointAt(0)) : function(s) t.push(n); } return t; -}, mn = Fo ? (s) => String.fromCodePoint(...Array.from(s || [])) : function(s) { +}, mn = qo ? (s) => String.fromCodePoint(...Array.from(s || [])) : function(s) { return (() => { const t = []; return Array.from(s).forEach((e) => { @@ -265,13 +265,13 @@ un = No && Po ? (s) => Array.from(s).map((t) => t.codePointAt(0)) : function(s) }), t; })().join(""); }; -let qo = 0; +let Ho = 0; class Bt extends B { static fromJSONString(t) { return this.fromJSON(JSON.parse(t)); } constructor() { - super(...arguments), this.id = ++qo; + super(...arguments), this.id = ++Ho; } hasSameConstructorAs(t) { return this.constructor === (t == null ? void 0 : t.constructor); @@ -309,7 +309,7 @@ const Ot = function() { const t = s.slice(0); for (var e = arguments.length, i = new Array(e > 1 ? e - 1 : 0), n = 1; n < e; n++) i[n - 1] = arguments[n]; return t.splice(...i), t; -}, Ho = /[\u05BE\u05C0\u05C3\u05D0-\u05EA\u05F0-\u05F4\u061B\u061F\u0621-\u063A\u0640-\u064A\u066D\u0671-\u06B7\u06BA-\u06BE\u06C0-\u06CE\u06D0-\u06D5\u06E5\u06E6\u200F\u202B\u202E\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE72\uFE74\uFE76-\uFEFC]/, $o = function() { +}, $o = /[\u05BE\u05C0\u05C3\u05D0-\u05EA\u05F0-\u05F4\u061B\u061F\u0621-\u063A\u0640-\u064A\u066D\u0671-\u06B7\u06BA-\u06BE\u06C0-\u06CE\u06D0-\u06D5\u06E5\u06E6\u200F\u202B\u202E\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE72\uFE74\uFE76-\uFEFC]/, Uo = function() { const s = _("input", { dir: "auto", name: "x", dirName: "x.dir" }), t = _("textarea", { dir: "auto", name: "y", dirName: "y.dir" }), e = _("form"); e.appendChild(s), e.appendChild(t); const i = function() { @@ -331,31 +331,31 @@ const Ot = function() { return s.value = r, s.matches(":dir(rtl)") ? "rtl" : "ltr"; } : function(r) { const o = r.trim().charAt(0); - return Ho.test(o) ? "rtl" : "ltr"; + return $o.test(o) ? "rtl" : "ltr"; }; }(); let Di = null, Oi = null, Mi = null, Pe = null; -const gn = () => (Di || (Di = jo().concat(Uo())), Di), O = (s) => G[s], Uo = () => (Oi || (Oi = Object.keys(G)), Oi), pn = (s) => Dt[s], jo = () => (Mi || (Mi = Object.keys(Dt)), Mi), wr = function(s, t) { - Vo(s).textContent = t.replace(/%t/g, s); -}, Vo = function(s) { +const gn = () => (Di || (Di = Vo().concat(jo())), Di), O = (s) => G[s], jo = () => (Oi || (Oi = Object.keys(G)), Oi), pn = (s) => Dt[s], Vo = () => (Mi || (Mi = Object.keys(Dt)), Mi), Tr = function(s, t) { + Wo(s).textContent = t.replace(/%t/g, s); +}, Wo = function(s) { const t = document.createElement("style"); t.setAttribute("type", "text/css"), t.setAttribute("data-tag-name", s.toLowerCase()); - const e = Wo(); + const e = zo(); return e && t.setAttribute("nonce", e), document.head.insertBefore(t, document.head.firstChild), t; -}, Wo = function() { +}, zo = function() { const s = us("trix-csp-nonce") || us("csp-nonce"); if (s) { const { nonce: t, content: e } = s; return t == "" ? e : t; } -}, us = (s) => document.head.querySelector("meta[name=".concat(s, "]")), ms = { "application/x-trix-feature-detection": "test" }, Tr = function(s) { +}, us = (s) => document.head.querySelector("meta[name=".concat(s, "]")), ms = { "application/x-trix-feature-detection": "test" }, kr = function(s) { const t = s.getData("text/plain"), e = s.getData("text/html"); if (!t || !e) return t == null ? void 0 : t.length; { const { body: i } = new DOMParser().parseFromString(e, "text/html"); if (i.textContent === t) return !i.querySelector("*"); } -}, kr = /Mac|^iP/.test(navigator.platform) ? (s) => s.metaKey : (s) => s.ctrlKey, In = (s) => setTimeout(s, 1), Ir = function() { +}, Ir = /Mac|^iP/.test(navigator.platform) ? (s) => s.metaKey : (s) => s.ctrlKey, In = (s) => setTimeout(s, 1), Rr = function() { let s = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}; const t = {}; for (const e in s) { @@ -363,7 +363,7 @@ const gn = () => (Di || (Di = jo().concat(Uo())), Di), O = (s) => G[s], Uo = () t[e] = i; } return t; -}, Yt = function() { +}, Xt = function() { let s = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}, t = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}; if (Object.keys(s).length !== Object.keys(t).length) return !1; for (const e in s) @@ -380,11 +380,11 @@ const gn = () => (Di || (Di = jo().concat(Uo())), Di), O = (s) => G[s], Uo = () const [e, i] = C(s), [n, r] = C(t); return fn(e, n) && fn(i, r); }, gs = function(s) { - return typeof s == "number" ? s : Ir(s); + return typeof s == "number" ? s : Rr(s); }, fn = function(s, t) { - return typeof s == "number" ? s === t : Yt(s, t); + return typeof s == "number" ? s === t : Xt(s, t); }; -class Rr extends B { +class Dr extends B { constructor() { super(...arguments), this.update = this.update.bind(this), this.selectionManagers = []; } @@ -410,17 +410,17 @@ class Rr extends B { this.update(); } } -const Mt = new Rr(), Dr = function() { +const Mt = new Dr(), Or = function() { const s = window.getSelection(); if (s.rangeCount > 0) return s; }, fe = function() { var s; - const t = (s = Dr()) === null || s === void 0 ? void 0 : s.getRangeAt(0); - if (t && !zo(t)) return t; -}, Or = function(s) { + const t = (s = Or()) === null || s === void 0 ? void 0 : s.getRangeAt(0); + if (t && !Ko(t)) return t; +}, Mr = function(s) { const t = window.getSelection(); return t.removeAllRanges(), t.addRange(s), Mt.update(); -}, zo = (s) => ps(s.startContainer) || ps(s.endContainer), ps = (s) => !Object.getPrototypeOf(s), ue = (s) => s.replace(new RegExp("".concat(ni), "g"), "").replace(new RegExp("".concat(At), "g"), " "), Rn = new RegExp("[^\\S".concat(At, "]")), Dn = (s) => s.replace(new RegExp("".concat(Rn.source), "g"), " ").replace(/\ {2,}/g, " "), fs = function(s, t) { +}, Ko = (s) => ps(s.startContainer) || ps(s.endContainer), ps = (s) => !Object.getPrototypeOf(s), ue = (s) => s.replace(new RegExp("".concat(ni), "g"), "").replace(new RegExp("".concat(At), "g"), " "), Rn = new RegExp("[^\\S".concat(At, "]")), Dn = (s) => s.replace(new RegExp("".concat(Rn.source), "g"), " ").replace(/\ {2,}/g, " "), fs = function(s, t) { if (s.isEqualTo(t)) return ["", ""]; const e = Bi(s, t), { length: i } = e.utf16String; let n; @@ -439,20 +439,20 @@ class X extends Bt { static fromCommonAttributesOfObjects() { let t = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : []; if (!t.length) return new this(); - let e = se(t[0]), i = e.getKeys(); + let e = re(t[0]), i = e.getKeys(); return t.slice(1).forEach((n) => { - i = e.getKeysCommonToHash(se(n)), e = e.slice(i); + i = e.getKeysCommonToHash(re(n)), e = e.slice(i); }), e; } static box(t) { - return se(t); + return re(t); } constructor() { let t = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}; super(...arguments), this.values = Ge(t); } add(t, e) { - return this.merge(Ko(t, e)); + return this.merge(Go(t, e)); } remove(t) { return new X(Ge(this.values, t)); @@ -464,7 +464,7 @@ class X extends Bt { return t in this.values; } merge(t) { - return new X(Go(this.values, Jo(t))); + return new X(Jo(this.values, Yo(t))); } slice(t) { const e = {}; @@ -476,10 +476,10 @@ class X extends Bt { return Object.keys(this.values); } getKeysCommonToHash(t) { - return t = se(t), this.getKeys().filter((e) => this.values[e] === t.values[e]); + return t = re(t), this.getKeys().filter((e) => this.values[e] === t.values[e]); } isEqualTo(t) { - return Ot(this.toArray(), se(t).toArray()); + return Ot(this.toArray(), re(t).toArray()); } isEmpty() { return this.getKeys().length === 0; @@ -505,10 +505,10 @@ class X extends Bt { return { values: JSON.stringify(this.values) }; } } -const Ko = function(s, t) { +const Go = function(s, t) { const e = {}; return e[s] = t, e; -}, Go = function(s, t) { +}, Jo = function(s, t) { const e = Ge(s); for (const i in t) { const n = t[i]; @@ -520,9 +520,9 @@ const Ko = function(s, t) { return Object.keys(s).sort().forEach((i) => { i !== t && (e[i] = s[i]); }), e; -}, se = function(s) { +}, re = function(s) { return s instanceof X ? s : new X(s); -}, Jo = function(s) { +}, Yo = function(s) { return s instanceof X ? s.values : s; }; class On { @@ -557,7 +557,7 @@ class On { }), t.join("/"); } } -class Yo extends B { +class Xo extends B { constructor() { let t = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : []; super(...arguments), this.objects = {}, Array.from(t).forEach((e) => { @@ -570,7 +570,7 @@ class Yo extends B { return this.objects[e]; } } -class Xo { +class Qo { constructor(t) { this.reset(t); } @@ -639,7 +639,7 @@ class Nt extends B { } createChildView(t, e) { let i = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {}; - e instanceof On && (i.viewClass = t, t = Qo); + e instanceof On && (i.viewClass = t, t = Zo); const n = new t(e, i); return this.recordChildView(n); } @@ -690,7 +690,7 @@ class Nt extends B { } } } -class Qo extends Nt { +class Zo extends Nt { constructor() { super(...arguments), this.objectGroup = this.object, this.viewClass = this.options.viewClass, delete this.options.viewClass; } @@ -713,8 +713,8 @@ class Qo extends Nt { } } /*! @license DOMPurify 3.2.7 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.2.7/LICENSE */ -const { entries: Mr, setPrototypeOf: vs, isFrozen: Zo, getPrototypeOf: ta, getOwnPropertyDescriptor: ea } = Object; -let { freeze: J, seal: tt, create: Br } = Object, { apply: bn, construct: vn } = typeof Reflect < "u" && Reflect; +const { entries: Br, setPrototypeOf: vs, isFrozen: ta, getPrototypeOf: ea, getOwnPropertyDescriptor: ia } = Object; +let { freeze: J, seal: tt, create: Nr } = Object, { apply: bn, construct: vn } = typeof Reflect < "u" && Reflect; J || (J = function(s) { return s; }), tt || (tt = function(s) { @@ -726,7 +726,7 @@ J || (J = function(s) { for (var t = arguments.length, e = new Array(t > 1 ? t - 1 : 0), i = 1; i < t; i++) e[i - 1] = arguments[i]; return new s(...e); }); -const Fe = Y(Array.prototype.forEach), ia = Y(Array.prototype.lastIndexOf), _s = Y(Array.prototype.pop), re = Y(Array.prototype.push), na = Y(Array.prototype.splice), Je = Y(String.prototype.toLowerCase), Ni = Y(String.prototype.toString), Pi = Y(String.prototype.match), oe = Y(String.prototype.replace), sa = Y(String.prototype.indexOf), ra = Y(String.prototype.trim), rt = Y(Object.prototype.hasOwnProperty), z = Y(RegExp.prototype.test), ae = (As = TypeError, function() { +const Fe = Y(Array.prototype.forEach), na = Y(Array.prototype.lastIndexOf), _s = Y(Array.prototype.pop), oe = Y(Array.prototype.push), sa = Y(Array.prototype.splice), Je = Y(String.prototype.toLowerCase), Ni = Y(String.prototype.toString), Pi = Y(String.prototype.match), ae = Y(String.prototype.replace), ra = Y(String.prototype.indexOf), oa = Y(String.prototype.trim), rt = Y(Object.prototype.hasOwnProperty), z = Y(RegExp.prototype.test), le = (As = TypeError, function() { for (var s = arguments.length, t = new Array(s), e = 0; e < s; e++) t[e] = arguments[e]; return vn(As, t); }); @@ -746,47 +746,47 @@ function A(s, t) { let n = t[i]; if (typeof n == "string") { const r = e(n); - r !== n && (Zo(t) || (t[i] = r), n = r); + r !== n && (ta(t) || (t[i] = r), n = r); } s[n] = !0; } return s; } -function oa(s) { +function aa(s) { for (let t = 0; t < s.length; t++) rt(s, t) || (s[t] = null); return s; } function mt(s) { - const t = Br(null); - for (const [e, i] of Mr(s)) - rt(s, e) && (Array.isArray(i) ? t[e] = oa(i) : i && typeof i == "object" && i.constructor === Object ? t[e] = mt(i) : t[e] = i); + const t = Nr(null); + for (const [e, i] of Br(s)) + rt(s, e) && (Array.isArray(i) ? t[e] = aa(i) : i && typeof i == "object" && i.constructor === Object ? t[e] = mt(i) : t[e] = i); return t; } -function le(s, t) { +function ce(s, t) { for (; s !== null; ) { - const e = ea(s, t); + const e = ia(s, t); if (e) { if (e.get) return Y(e.get); if (typeof e.value == "function") return Y(e.value); } - s = ta(s); + s = ea(s); } return function() { return null; }; } -const ys = J(["a", "abbr", "acronym", "address", "area", "article", "aside", "audio", "b", "bdi", "bdo", "big", "blink", "blockquote", "body", "br", "button", "canvas", "caption", "center", "cite", "code", "col", "colgroup", "content", "data", "datalist", "dd", "decorator", "del", "details", "dfn", "dialog", "dir", "div", "dl", "dt", "element", "em", "fieldset", "figcaption", "figure", "font", "footer", "form", "h1", "h2", "h3", "h4", "h5", "h6", "head", "header", "hgroup", "hr", "html", "i", "img", "input", "ins", "kbd", "label", "legend", "li", "main", "map", "mark", "marquee", "menu", "menuitem", "meter", "nav", "nobr", "ol", "optgroup", "option", "output", "p", "picture", "pre", "progress", "q", "rp", "rt", "ruby", "s", "samp", "search", "section", "select", "shadow", "slot", "small", "source", "spacer", "span", "strike", "strong", "style", "sub", "summary", "sup", "table", "tbody", "td", "template", "textarea", "tfoot", "th", "thead", "time", "tr", "track", "tt", "u", "ul", "var", "video", "wbr"]), Fi = J(["svg", "a", "altglyph", "altglyphdef", "altglyphitem", "animatecolor", "animatemotion", "animatetransform", "circle", "clippath", "defs", "desc", "ellipse", "enterkeyhint", "exportparts", "filter", "font", "g", "glyph", "glyphref", "hkern", "image", "inputmode", "line", "lineargradient", "marker", "mask", "metadata", "mpath", "part", "path", "pattern", "polygon", "polyline", "radialgradient", "rect", "slot", "stop", "style", "switch", "symbol", "text", "textpath", "title", "tref", "tspan", "view", "vkern"]), qi = J(["feBlend", "feColorMatrix", "feComponentTransfer", "feComposite", "feConvolveMatrix", "feDiffuseLighting", "feDisplacementMap", "feDistantLight", "feDropShadow", "feFlood", "feFuncA", "feFuncB", "feFuncG", "feFuncR", "feGaussianBlur", "feImage", "feMerge", "feMergeNode", "feMorphology", "feOffset", "fePointLight", "feSpecularLighting", "feSpotLight", "feTile", "feTurbulence"]), aa = J(["animate", "color-profile", "cursor", "discard", "font-face", "font-face-format", "font-face-name", "font-face-src", "font-face-uri", "foreignobject", "hatch", "hatchpath", "mesh", "meshgradient", "meshpatch", "meshrow", "missing-glyph", "script", "set", "solidcolor", "unknown", "use"]), Hi = J(["math", "menclose", "merror", "mfenced", "mfrac", "mglyph", "mi", "mlabeledtr", "mmultiscripts", "mn", "mo", "mover", "mpadded", "mphantom", "mroot", "mrow", "ms", "mspace", "msqrt", "mstyle", "msub", "msup", "msubsup", "mtable", "mtd", "mtext", "mtr", "munder", "munderover", "mprescripts"]), la = J(["maction", "maligngroup", "malignmark", "mlongdiv", "mscarries", "mscarry", "msgroup", "mstack", "msline", "msrow", "semantics", "annotation", "annotation-xml", "mprescripts", "none"]), Es = J(["#text"]), xs = J(["accept", "action", "align", "alt", "autocapitalize", "autocomplete", "autopictureinpicture", "autoplay", "background", "bgcolor", "border", "capture", "cellpadding", "cellspacing", "checked", "cite", "class", "clear", "color", "cols", "colspan", "controls", "controlslist", "coords", "crossorigin", "datetime", "decoding", "default", "dir", "disabled", "disablepictureinpicture", "disableremoteplayback", "download", "draggable", "enctype", "enterkeyhint", "exportparts", "face", "for", "headers", "height", "hidden", "high", "href", "hreflang", "id", "inert", "inputmode", "integrity", "ismap", "kind", "label", "lang", "list", "loading", "loop", "low", "max", "maxlength", "media", "method", "min", "minlength", "multiple", "muted", "name", "nonce", "noshade", "novalidate", "nowrap", "open", "optimum", "part", "pattern", "placeholder", "playsinline", "popover", "popovertarget", "popovertargetaction", "poster", "preload", "pubdate", "radiogroup", "readonly", "rel", "required", "rev", "reversed", "role", "rows", "rowspan", "spellcheck", "scope", "selected", "shape", "size", "sizes", "slot", "span", "srclang", "start", "src", "srcset", "step", "style", "summary", "tabindex", "title", "translate", "type", "usemap", "valign", "value", "width", "wrap", "xmlns", "slot"]), $i = J(["accent-height", "accumulate", "additive", "alignment-baseline", "amplitude", "ascent", "attributename", "attributetype", "azimuth", "basefrequency", "baseline-shift", "begin", "bias", "by", "class", "clip", "clippathunits", "clip-path", "clip-rule", "color", "color-interpolation", "color-interpolation-filters", "color-profile", "color-rendering", "cx", "cy", "d", "dx", "dy", "diffuseconstant", "direction", "display", "divisor", "dur", "edgemode", "elevation", "end", "exponent", "fill", "fill-opacity", "fill-rule", "filter", "filterunits", "flood-color", "flood-opacity", "font-family", "font-size", "font-size-adjust", "font-stretch", "font-style", "font-variant", "font-weight", "fx", "fy", "g1", "g2", "glyph-name", "glyphref", "gradientunits", "gradienttransform", "height", "href", "id", "image-rendering", "in", "in2", "intercept", "k", "k1", "k2", "k3", "k4", "kerning", "keypoints", "keysplines", "keytimes", "lang", "lengthadjust", "letter-spacing", "kernelmatrix", "kernelunitlength", "lighting-color", "local", "marker-end", "marker-mid", "marker-start", "markerheight", "markerunits", "markerwidth", "maskcontentunits", "maskunits", "max", "mask", "media", "method", "mode", "min", "name", "numoctaves", "offset", "operator", "opacity", "order", "orient", "orientation", "origin", "overflow", "paint-order", "path", "pathlength", "patterncontentunits", "patterntransform", "patternunits", "points", "preservealpha", "preserveaspectratio", "primitiveunits", "r", "rx", "ry", "radius", "refx", "refy", "repeatcount", "repeatdur", "restart", "result", "rotate", "scale", "seed", "shape-rendering", "slope", "specularconstant", "specularexponent", "spreadmethod", "startoffset", "stddeviation", "stitchtiles", "stop-color", "stop-opacity", "stroke-dasharray", "stroke-dashoffset", "stroke-linecap", "stroke-linejoin", "stroke-miterlimit", "stroke-opacity", "stroke", "stroke-width", "style", "surfacescale", "systemlanguage", "tabindex", "tablevalues", "targetx", "targety", "transform", "transform-origin", "text-anchor", "text-decoration", "text-rendering", "textlength", "type", "u1", "u2", "unicode", "values", "viewbox", "visibility", "version", "vert-adv-y", "vert-origin-x", "vert-origin-y", "width", "word-spacing", "wrap", "writing-mode", "xchannelselector", "ychannelselector", "x", "x1", "x2", "xmlns", "y", "y1", "y2", "z", "zoomandpan"]), Ss = J(["accent", "accentunder", "align", "bevelled", "close", "columnsalign", "columnlines", "columnspan", "denomalign", "depth", "dir", "display", "displaystyle", "encoding", "fence", "frame", "height", "href", "id", "largeop", "length", "linethickness", "lspace", "lquote", "mathbackground", "mathcolor", "mathsize", "mathvariant", "maxsize", "minsize", "movablelimits", "notation", "numalign", "open", "rowalign", "rowlines", "rowspacing", "rowspan", "rspace", "rquote", "scriptlevel", "scriptminsize", "scriptsizemultiplier", "selection", "separator", "separators", "stretchy", "subscriptshift", "supscriptshift", "symmetric", "voffset", "width", "xmlns"]), qe = J(["xlink:href", "xml:id", "xlink:title", "xml:space", "xmlns:xlink"]), ca = tt(/\{\{[\w\W]*|[\w\W]*\}\}/gm), da = tt(/<%[\w\W]*|[\w\W]*%>/gm), ha = tt(/\$\{[\w\W]*/gm), ua = tt(/^data-[\-\w.\u00B7-\uFFFF]+$/), ma = tt(/^aria-[\-\w]+$/), Nr = tt(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i), ga = tt(/^(?:\w+script|data):/i), pa = tt(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g), Pr = tt(/^html$/i), fa = tt(/^[a-z][.\w]*(-[.\w]+)+$/i); -var Ls = Object.freeze({ __proto__: null, ARIA_ATTR: ma, ATTR_WHITESPACE: pa, CUSTOM_ELEMENT: fa, DATA_ATTR: ua, DOCTYPE_NAME: Pr, ERB_EXPR: da, IS_ALLOWED_URI: Nr, IS_SCRIPT_OR_DATA: ga, MUSTACHE_EXPR: ca, TMPLIT_EXPR: ha }); -const ba = 1, va = 3, _a = 7, Aa = 8, ya = 9, Ea = function() { +const ys = J(["a", "abbr", "acronym", "address", "area", "article", "aside", "audio", "b", "bdi", "bdo", "big", "blink", "blockquote", "body", "br", "button", "canvas", "caption", "center", "cite", "code", "col", "colgroup", "content", "data", "datalist", "dd", "decorator", "del", "details", "dfn", "dialog", "dir", "div", "dl", "dt", "element", "em", "fieldset", "figcaption", "figure", "font", "footer", "form", "h1", "h2", "h3", "h4", "h5", "h6", "head", "header", "hgroup", "hr", "html", "i", "img", "input", "ins", "kbd", "label", "legend", "li", "main", "map", "mark", "marquee", "menu", "menuitem", "meter", "nav", "nobr", "ol", "optgroup", "option", "output", "p", "picture", "pre", "progress", "q", "rp", "rt", "ruby", "s", "samp", "search", "section", "select", "shadow", "slot", "small", "source", "spacer", "span", "strike", "strong", "style", "sub", "summary", "sup", "table", "tbody", "td", "template", "textarea", "tfoot", "th", "thead", "time", "tr", "track", "tt", "u", "ul", "var", "video", "wbr"]), Fi = J(["svg", "a", "altglyph", "altglyphdef", "altglyphitem", "animatecolor", "animatemotion", "animatetransform", "circle", "clippath", "defs", "desc", "ellipse", "enterkeyhint", "exportparts", "filter", "font", "g", "glyph", "glyphref", "hkern", "image", "inputmode", "line", "lineargradient", "marker", "mask", "metadata", "mpath", "part", "path", "pattern", "polygon", "polyline", "radialgradient", "rect", "slot", "stop", "style", "switch", "symbol", "text", "textpath", "title", "tref", "tspan", "view", "vkern"]), qi = J(["feBlend", "feColorMatrix", "feComponentTransfer", "feComposite", "feConvolveMatrix", "feDiffuseLighting", "feDisplacementMap", "feDistantLight", "feDropShadow", "feFlood", "feFuncA", "feFuncB", "feFuncG", "feFuncR", "feGaussianBlur", "feImage", "feMerge", "feMergeNode", "feMorphology", "feOffset", "fePointLight", "feSpecularLighting", "feSpotLight", "feTile", "feTurbulence"]), la = J(["animate", "color-profile", "cursor", "discard", "font-face", "font-face-format", "font-face-name", "font-face-src", "font-face-uri", "foreignobject", "hatch", "hatchpath", "mesh", "meshgradient", "meshpatch", "meshrow", "missing-glyph", "script", "set", "solidcolor", "unknown", "use"]), Hi = J(["math", "menclose", "merror", "mfenced", "mfrac", "mglyph", "mi", "mlabeledtr", "mmultiscripts", "mn", "mo", "mover", "mpadded", "mphantom", "mroot", "mrow", "ms", "mspace", "msqrt", "mstyle", "msub", "msup", "msubsup", "mtable", "mtd", "mtext", "mtr", "munder", "munderover", "mprescripts"]), ca = J(["maction", "maligngroup", "malignmark", "mlongdiv", "mscarries", "mscarry", "msgroup", "mstack", "msline", "msrow", "semantics", "annotation", "annotation-xml", "mprescripts", "none"]), Es = J(["#text"]), xs = J(["accept", "action", "align", "alt", "autocapitalize", "autocomplete", "autopictureinpicture", "autoplay", "background", "bgcolor", "border", "capture", "cellpadding", "cellspacing", "checked", "cite", "class", "clear", "color", "cols", "colspan", "controls", "controlslist", "coords", "crossorigin", "datetime", "decoding", "default", "dir", "disabled", "disablepictureinpicture", "disableremoteplayback", "download", "draggable", "enctype", "enterkeyhint", "exportparts", "face", "for", "headers", "height", "hidden", "high", "href", "hreflang", "id", "inert", "inputmode", "integrity", "ismap", "kind", "label", "lang", "list", "loading", "loop", "low", "max", "maxlength", "media", "method", "min", "minlength", "multiple", "muted", "name", "nonce", "noshade", "novalidate", "nowrap", "open", "optimum", "part", "pattern", "placeholder", "playsinline", "popover", "popovertarget", "popovertargetaction", "poster", "preload", "pubdate", "radiogroup", "readonly", "rel", "required", "rev", "reversed", "role", "rows", "rowspan", "spellcheck", "scope", "selected", "shape", "size", "sizes", "slot", "span", "srclang", "start", "src", "srcset", "step", "style", "summary", "tabindex", "title", "translate", "type", "usemap", "valign", "value", "width", "wrap", "xmlns", "slot"]), $i = J(["accent-height", "accumulate", "additive", "alignment-baseline", "amplitude", "ascent", "attributename", "attributetype", "azimuth", "basefrequency", "baseline-shift", "begin", "bias", "by", "class", "clip", "clippathunits", "clip-path", "clip-rule", "color", "color-interpolation", "color-interpolation-filters", "color-profile", "color-rendering", "cx", "cy", "d", "dx", "dy", "diffuseconstant", "direction", "display", "divisor", "dur", "edgemode", "elevation", "end", "exponent", "fill", "fill-opacity", "fill-rule", "filter", "filterunits", "flood-color", "flood-opacity", "font-family", "font-size", "font-size-adjust", "font-stretch", "font-style", "font-variant", "font-weight", "fx", "fy", "g1", "g2", "glyph-name", "glyphref", "gradientunits", "gradienttransform", "height", "href", "id", "image-rendering", "in", "in2", "intercept", "k", "k1", "k2", "k3", "k4", "kerning", "keypoints", "keysplines", "keytimes", "lang", "lengthadjust", "letter-spacing", "kernelmatrix", "kernelunitlength", "lighting-color", "local", "marker-end", "marker-mid", "marker-start", "markerheight", "markerunits", "markerwidth", "maskcontentunits", "maskunits", "max", "mask", "media", "method", "mode", "min", "name", "numoctaves", "offset", "operator", "opacity", "order", "orient", "orientation", "origin", "overflow", "paint-order", "path", "pathlength", "patterncontentunits", "patterntransform", "patternunits", "points", "preservealpha", "preserveaspectratio", "primitiveunits", "r", "rx", "ry", "radius", "refx", "refy", "repeatcount", "repeatdur", "restart", "result", "rotate", "scale", "seed", "shape-rendering", "slope", "specularconstant", "specularexponent", "spreadmethod", "startoffset", "stddeviation", "stitchtiles", "stop-color", "stop-opacity", "stroke-dasharray", "stroke-dashoffset", "stroke-linecap", "stroke-linejoin", "stroke-miterlimit", "stroke-opacity", "stroke", "stroke-width", "style", "surfacescale", "systemlanguage", "tabindex", "tablevalues", "targetx", "targety", "transform", "transform-origin", "text-anchor", "text-decoration", "text-rendering", "textlength", "type", "u1", "u2", "unicode", "values", "viewbox", "visibility", "version", "vert-adv-y", "vert-origin-x", "vert-origin-y", "width", "word-spacing", "wrap", "writing-mode", "xchannelselector", "ychannelselector", "x", "x1", "x2", "xmlns", "y", "y1", "y2", "z", "zoomandpan"]), Ss = J(["accent", "accentunder", "align", "bevelled", "close", "columnsalign", "columnlines", "columnspan", "denomalign", "depth", "dir", "display", "displaystyle", "encoding", "fence", "frame", "height", "href", "id", "largeop", "length", "linethickness", "lspace", "lquote", "mathbackground", "mathcolor", "mathsize", "mathvariant", "maxsize", "minsize", "movablelimits", "notation", "numalign", "open", "rowalign", "rowlines", "rowspacing", "rowspan", "rspace", "rquote", "scriptlevel", "scriptminsize", "scriptsizemultiplier", "selection", "separator", "separators", "stretchy", "subscriptshift", "supscriptshift", "symmetric", "voffset", "width", "xmlns"]), qe = J(["xlink:href", "xml:id", "xlink:title", "xml:space", "xmlns:xlink"]), da = tt(/\{\{[\w\W]*|[\w\W]*\}\}/gm), ha = tt(/<%[\w\W]*|[\w\W]*%>/gm), ua = tt(/\$\{[\w\W]*/gm), ma = tt(/^data-[\-\w.\u00B7-\uFFFF]+$/), ga = tt(/^aria-[\-\w]+$/), Pr = tt(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i), pa = tt(/^(?:\w+script|data):/i), fa = tt(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g), Fr = tt(/^html$/i), ba = tt(/^[a-z][.\w]*(-[.\w]+)+$/i); +var Ls = Object.freeze({ __proto__: null, ARIA_ATTR: ga, ATTR_WHITESPACE: fa, CUSTOM_ELEMENT: ba, DATA_ATTR: ma, DOCTYPE_NAME: Fr, ERB_EXPR: ha, IS_ALLOWED_URI: Pr, IS_SCRIPT_OR_DATA: pa, MUSTACHE_EXPR: da, TMPLIT_EXPR: ua }); +const va = 1, _a = 3, Aa = 7, ya = 8, Ea = 9, xa = function() { return typeof window > "u" ? null : window; }; var Ee = function s() { - let t = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : Ea(); + let t = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : xa(); const e = (c) => s(c); - if (e.version = "3.2.7", e.removed = [], !t || !t.document || t.document.nodeType !== ya || !t.Element) return e.isSupported = !1, e; + if (e.version = "3.2.7", e.removed = [], !t || !t.document || t.document.nodeType !== Ea || !t.Element) return e.isSupported = !1, e; let { document: i } = t; - const n = i, r = n.currentScript, { DocumentFragment: o, HTMLTemplateElement: a, Node: l, Element: d, NodeFilter: h, NamedNodeMap: m = t.NamedNodeMap || t.MozNamedAttrMap, HTMLFormElement: p, DOMParser: f, trustedTypes: x } = t, w = d.prototype, j = le(w, "cloneNode"), H = le(w, "remove"), W = le(w, "nextSibling"), M = le(w, "childNodes"), I = le(w, "parentNode"); + const n = i, r = n.currentScript, { DocumentFragment: o, HTMLTemplateElement: a, Node: l, Element: d, NodeFilter: h, NamedNodeMap: m = t.NamedNodeMap || t.MozNamedAttrMap, HTMLFormElement: p, DOMParser: f, trustedTypes: x } = t, w = d.prototype, j = ce(w, "cloneNode"), H = ce(w, "remove"), W = ce(w, "nextSibling"), M = ce(w, "childNodes"), I = ce(w, "parentNode"); if (typeof a == "function") { const c = i.createElement("template"); c.content && c.content.ownerDocument && (i = c.content.ownerDocument); @@ -794,33 +794,33 @@ var Ee = function s() { let L, et = ""; const { implementation: dt, createNodeIterator: li, createDocumentFragment: ci, getElementsByTagName: di } = i, { importNode: at } = n; let N = { afterSanitizeAttributes: [], afterSanitizeElements: [], afterSanitizeShadowDOM: [], beforeSanitizeAttributes: [], beforeSanitizeElements: [], beforeSanitizeShadowDOM: [], uponSanitizeAttribute: [], uponSanitizeElement: [], uponSanitizeShadowNode: [] }; - e.isSupported = typeof Mr == "function" && typeof I == "function" && dt && dt.createHTMLDocument !== void 0; - const { MUSTACHE_EXPR: we, ERB_EXPR: hi, TMPLIT_EXPR: ui, DATA_ATTR: _o, ARIA_ATTR: Ao, IS_SCRIPT_OR_DATA: yo, ATTR_WHITESPACE: Nn, CUSTOM_ELEMENT: Eo } = Ls; + e.isSupported = typeof Br == "function" && typeof I == "function" && dt && dt.createHTMLDocument !== void 0; + const { MUSTACHE_EXPR: we, ERB_EXPR: hi, TMPLIT_EXPR: ui, DATA_ATTR: Ao, ARIA_ATTR: yo, IS_SCRIPT_OR_DATA: Eo, ATTR_WHITESPACE: Nn, CUSTOM_ELEMENT: xo } = Ls; let { IS_ALLOWED_URI: Pn } = Ls, F = null; const Fn = A({}, [...ys, ...Fi, ...qi, ...Hi, ...Es]); let $ = null; const qn = A({}, [...xs, ...$i, ...Ss, ...qe]); - let R = Object.seal(Br(null, { tagNameCheck: { writable: !0, configurable: !1, enumerable: !0, value: null }, attributeNameCheck: { writable: !0, configurable: !1, enumerable: !0, value: null }, allowCustomizedBuiltInElements: { writable: !0, configurable: !1, enumerable: !0, value: !1 } })), Qt = null, mi = null, Hn = !0, gi = !0, $n = !1, Un = !0, Ft = !1, Te = !0, xt = !1, pi = !1, fi = !1, qt = !1, ke = !1, Ie = !1, jn = !0, Vn = !1, bi = !0, Zt = !1, Ht = {}, $t = null; + let R = Object.seal(Nr(null, { tagNameCheck: { writable: !0, configurable: !1, enumerable: !0, value: null }, attributeNameCheck: { writable: !0, configurable: !1, enumerable: !0, value: null }, allowCustomizedBuiltInElements: { writable: !0, configurable: !1, enumerable: !0, value: !1 } })), Zt = null, mi = null, Hn = !0, gi = !0, $n = !1, Un = !0, Ft = !1, Te = !0, xt = !1, pi = !1, fi = !1, qt = !1, ke = !1, Ie = !1, jn = !0, Vn = !1, bi = !0, te = !1, Ht = {}, $t = null; const Wn = A({}, ["annotation-xml", "audio", "colgroup", "desc", "foreignobject", "head", "iframe", "math", "mi", "mn", "mo", "ms", "mtext", "noembed", "noframes", "noscript", "plaintext", "script", "style", "svg", "template", "thead", "title", "video", "xmp"]); let zn = null; const Kn = A({}, ["audio", "video", "img", "source", "image", "track"]); let vi = null; const Gn = A({}, ["alt", "class", "for", "id", "label", "name", "pattern", "placeholder", "role", "summary", "title", "value", "style", "xmlns"]), Re = "http://www.w3.org/1998/Math/MathML", De = "http://www.w3.org/2000/svg", ht = "http://www.w3.org/1999/xhtml"; let Ut = ht, _i = !1, Ai = null; - const xo = A({}, [Re, De, ht], Ni); + const So = A({}, [Re, De, ht], Ni); let Oe = A({}, ["mi", "mo", "mn", "ms", "mtext"]), Me = A({}, ["annotation-xml"]); - const So = A({}, ["title", "style", "font", "a", "script"]); - let te = null; - const Lo = ["application/xhtml+xml", "text/html"]; + const Lo = A({}, ["title", "style", "font", "a", "script"]); + let ee = null; + const Co = ["application/xhtml+xml", "text/html"]; let q = null, jt = null; - const Co = i.createElement("form"), Jn = function(c) { + const wo = i.createElement("form"), Jn = function(c) { return c instanceof RegExp || c instanceof Function; }, yi = function() { let c = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}; if (!jt || jt !== c) { - if (c && typeof c == "object" || (c = {}), c = mt(c), te = Lo.indexOf(c.PARSER_MEDIA_TYPE) === -1 ? "text/html" : c.PARSER_MEDIA_TYPE, q = te === "application/xhtml+xml" ? Ni : Je, F = rt(c, "ALLOWED_TAGS") ? A({}, c.ALLOWED_TAGS, q) : Fn, $ = rt(c, "ALLOWED_ATTR") ? A({}, c.ALLOWED_ATTR, q) : qn, Ai = rt(c, "ALLOWED_NAMESPACES") ? A({}, c.ALLOWED_NAMESPACES, Ni) : xo, vi = rt(c, "ADD_URI_SAFE_ATTR") ? A(mt(Gn), c.ADD_URI_SAFE_ATTR, q) : Gn, zn = rt(c, "ADD_DATA_URI_TAGS") ? A(mt(Kn), c.ADD_DATA_URI_TAGS, q) : Kn, $t = rt(c, "FORBID_CONTENTS") ? A({}, c.FORBID_CONTENTS, q) : Wn, Qt = rt(c, "FORBID_TAGS") ? A({}, c.FORBID_TAGS, q) : mt({}), mi = rt(c, "FORBID_ATTR") ? A({}, c.FORBID_ATTR, q) : mt({}), Ht = !!rt(c, "USE_PROFILES") && c.USE_PROFILES, Hn = c.ALLOW_ARIA_ATTR !== !1, gi = c.ALLOW_DATA_ATTR !== !1, $n = c.ALLOW_UNKNOWN_PROTOCOLS || !1, Un = c.ALLOW_SELF_CLOSE_IN_ATTR !== !1, Ft = c.SAFE_FOR_TEMPLATES || !1, Te = c.SAFE_FOR_XML !== !1, xt = c.WHOLE_DOCUMENT || !1, qt = c.RETURN_DOM || !1, ke = c.RETURN_DOM_FRAGMENT || !1, Ie = c.RETURN_TRUSTED_TYPE || !1, fi = c.FORCE_BODY || !1, jn = c.SANITIZE_DOM !== !1, Vn = c.SANITIZE_NAMED_PROPS || !1, bi = c.KEEP_CONTENT !== !1, Zt = c.IN_PLACE || !1, Pn = c.ALLOWED_URI_REGEXP || Nr, Ut = c.NAMESPACE || ht, Oe = c.MATHML_TEXT_INTEGRATION_POINTS || Oe, Me = c.HTML_INTEGRATION_POINTS || Me, R = c.CUSTOM_ELEMENT_HANDLING || {}, c.CUSTOM_ELEMENT_HANDLING && Jn(c.CUSTOM_ELEMENT_HANDLING.tagNameCheck) && (R.tagNameCheck = c.CUSTOM_ELEMENT_HANDLING.tagNameCheck), c.CUSTOM_ELEMENT_HANDLING && Jn(c.CUSTOM_ELEMENT_HANDLING.attributeNameCheck) && (R.attributeNameCheck = c.CUSTOM_ELEMENT_HANDLING.attributeNameCheck), c.CUSTOM_ELEMENT_HANDLING && typeof c.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements == "boolean" && (R.allowCustomizedBuiltInElements = c.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements), Ft && (gi = !1), ke && (qt = !0), Ht && (F = A({}, Es), $ = [], Ht.html === !0 && (A(F, ys), A($, xs)), Ht.svg === !0 && (A(F, Fi), A($, $i), A($, qe)), Ht.svgFilters === !0 && (A(F, qi), A($, $i), A($, qe)), Ht.mathMl === !0 && (A(F, Hi), A($, Ss), A($, qe))), c.ADD_TAGS && (F === Fn && (F = mt(F)), A(F, c.ADD_TAGS, q)), c.ADD_ATTR && ($ === qn && ($ = mt($)), A($, c.ADD_ATTR, q)), c.ADD_URI_SAFE_ATTR && A(vi, c.ADD_URI_SAFE_ATTR, q), c.FORBID_CONTENTS && ($t === Wn && ($t = mt($t)), A($t, c.FORBID_CONTENTS, q)), bi && (F["#text"] = !0), xt && A(F, ["html", "head", "body"]), F.table && (A(F, ["tbody"]), delete Qt.tbody), c.TRUSTED_TYPES_POLICY) { - if (typeof c.TRUSTED_TYPES_POLICY.createHTML != "function") throw ae('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.'); - if (typeof c.TRUSTED_TYPES_POLICY.createScriptURL != "function") throw ae('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.'); + if (c && typeof c == "object" || (c = {}), c = mt(c), ee = Co.indexOf(c.PARSER_MEDIA_TYPE) === -1 ? "text/html" : c.PARSER_MEDIA_TYPE, q = ee === "application/xhtml+xml" ? Ni : Je, F = rt(c, "ALLOWED_TAGS") ? A({}, c.ALLOWED_TAGS, q) : Fn, $ = rt(c, "ALLOWED_ATTR") ? A({}, c.ALLOWED_ATTR, q) : qn, Ai = rt(c, "ALLOWED_NAMESPACES") ? A({}, c.ALLOWED_NAMESPACES, Ni) : So, vi = rt(c, "ADD_URI_SAFE_ATTR") ? A(mt(Gn), c.ADD_URI_SAFE_ATTR, q) : Gn, zn = rt(c, "ADD_DATA_URI_TAGS") ? A(mt(Kn), c.ADD_DATA_URI_TAGS, q) : Kn, $t = rt(c, "FORBID_CONTENTS") ? A({}, c.FORBID_CONTENTS, q) : Wn, Zt = rt(c, "FORBID_TAGS") ? A({}, c.FORBID_TAGS, q) : mt({}), mi = rt(c, "FORBID_ATTR") ? A({}, c.FORBID_ATTR, q) : mt({}), Ht = !!rt(c, "USE_PROFILES") && c.USE_PROFILES, Hn = c.ALLOW_ARIA_ATTR !== !1, gi = c.ALLOW_DATA_ATTR !== !1, $n = c.ALLOW_UNKNOWN_PROTOCOLS || !1, Un = c.ALLOW_SELF_CLOSE_IN_ATTR !== !1, Ft = c.SAFE_FOR_TEMPLATES || !1, Te = c.SAFE_FOR_XML !== !1, xt = c.WHOLE_DOCUMENT || !1, qt = c.RETURN_DOM || !1, ke = c.RETURN_DOM_FRAGMENT || !1, Ie = c.RETURN_TRUSTED_TYPE || !1, fi = c.FORCE_BODY || !1, jn = c.SANITIZE_DOM !== !1, Vn = c.SANITIZE_NAMED_PROPS || !1, bi = c.KEEP_CONTENT !== !1, te = c.IN_PLACE || !1, Pn = c.ALLOWED_URI_REGEXP || Pr, Ut = c.NAMESPACE || ht, Oe = c.MATHML_TEXT_INTEGRATION_POINTS || Oe, Me = c.HTML_INTEGRATION_POINTS || Me, R = c.CUSTOM_ELEMENT_HANDLING || {}, c.CUSTOM_ELEMENT_HANDLING && Jn(c.CUSTOM_ELEMENT_HANDLING.tagNameCheck) && (R.tagNameCheck = c.CUSTOM_ELEMENT_HANDLING.tagNameCheck), c.CUSTOM_ELEMENT_HANDLING && Jn(c.CUSTOM_ELEMENT_HANDLING.attributeNameCheck) && (R.attributeNameCheck = c.CUSTOM_ELEMENT_HANDLING.attributeNameCheck), c.CUSTOM_ELEMENT_HANDLING && typeof c.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements == "boolean" && (R.allowCustomizedBuiltInElements = c.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements), Ft && (gi = !1), ke && (qt = !0), Ht && (F = A({}, Es), $ = [], Ht.html === !0 && (A(F, ys), A($, xs)), Ht.svg === !0 && (A(F, Fi), A($, $i), A($, qe)), Ht.svgFilters === !0 && (A(F, qi), A($, $i), A($, qe)), Ht.mathMl === !0 && (A(F, Hi), A($, Ss), A($, qe))), c.ADD_TAGS && (F === Fn && (F = mt(F)), A(F, c.ADD_TAGS, q)), c.ADD_ATTR && ($ === qn && ($ = mt($)), A($, c.ADD_ATTR, q)), c.ADD_URI_SAFE_ATTR && A(vi, c.ADD_URI_SAFE_ATTR, q), c.FORBID_CONTENTS && ($t === Wn && ($t = mt($t)), A($t, c.FORBID_CONTENTS, q)), bi && (F["#text"] = !0), xt && A(F, ["html", "head", "body"]), F.table && (A(F, ["tbody"]), delete Zt.tbody), c.TRUSTED_TYPES_POLICY) { + if (typeof c.TRUSTED_TYPES_POLICY.createHTML != "function") throw le('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.'); + if (typeof c.TRUSTED_TYPES_POLICY.createScriptURL != "function") throw le('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.'); L = c.TRUSTED_TYPES_POLICY, et = L.createHTML(""); } else L === void 0 && (L = function(g, u) { if (typeof g != "object" || typeof g.createPolicy != "function") return null; @@ -836,8 +836,8 @@ var Ee = function s() { }(x, r)), L !== null && typeof et == "string" && (et = L.createHTML("")); J && J(c), jt = c; } - }, Yn = A({}, [...Fi, ...qi, ...aa]), Xn = A({}, [...Hi, ...la]), lt = function(c) { - re(e.removed, { element: c }); + }, Yn = A({}, [...Fi, ...qi, ...la]), Xn = A({}, [...Hi, ...ca]), lt = function(c) { + oe(e.removed, { element: c }); try { I(c).removeChild(c); } catch { @@ -845,9 +845,9 @@ var Ee = function s() { } }, St = function(c, g) { try { - re(e.removed, { attribute: g.getAttributeNode(c), from: g }); + oe(e.removed, { attribute: g.getAttributeNode(c), from: g }); } catch { - re(e.removed, { attribute: null, from: g }); + oe(e.removed, { attribute: null, from: g }); } if (g.removeAttribute(c), c === "is") if (qt || ke) try { lt(g); @@ -864,10 +864,10 @@ var Ee = function s() { const v = Pi(c, /^[\r\n\t ]+/); u = v && v[0]; } - te === "application/xhtml+xml" && Ut === ht && (c = '' + c + ""); + ee === "application/xhtml+xml" && Ut === ht && (c = '' + c + ""); const y = L ? L.createHTML(c) : c; if (Ut === ht) try { - g = new f().parseFromString(y, te); + g = new f().parseFromString(y, ee); } catch { } if (!g || !g.documentElement) { @@ -895,9 +895,9 @@ var Ee = function s() { let g = null; if (ut(N.beforeSanitizeElements, c, null), Ei(c)) return lt(c), !0; const u = q(c.nodeName); - if (ut(N.uponSanitizeElement, c, { tagName: u, allowedTags: F }), Te && c.hasChildNodes() && !ts(c.firstElementChild) && z(/<[/\w!]/g, c.innerHTML) && z(/<[/\w!]/g, c.textContent) || c.nodeType === _a || Te && c.nodeType === Aa && z(/<[/\w]/g, c.data)) return lt(c), !0; - if (!F[u] || Qt[u]) { - if (!Qt[u] && ns(u) && (R.tagNameCheck instanceof RegExp && z(R.tagNameCheck, u) || R.tagNameCheck instanceof Function && R.tagNameCheck(u))) + if (ut(N.uponSanitizeElement, c, { tagName: u, allowedTags: F }), Te && c.hasChildNodes() && !ts(c.firstElementChild) && z(/<[/\w!]/g, c.innerHTML) && z(/<[/\w!]/g, c.textContent) || c.nodeType === Aa || Te && c.nodeType === ya && z(/<[/\w]/g, c.data)) return lt(c), !0; + if (!F[u] || Zt[u]) { + if (!Zt[u] && ns(u) && (R.tagNameCheck instanceof RegExp && z(R.tagNameCheck, u) || R.tagNameCheck instanceof Function && R.tagNameCheck(u))) return !1; if (bi && !$t[u]) { const y = I(c) || c.parentNode, S = M(c) || c.childNodes; @@ -913,19 +913,19 @@ var Ee = function s() { let S = I(y); S && S.tagName || (S = { namespaceURI: Ut, tagName: "template" }); const v = Je(y.tagName), P = Je(S.tagName); - return !!Ai[y.namespaceURI] && (y.namespaceURI === De ? S.namespaceURI === ht ? v === "svg" : S.namespaceURI === Re ? v === "svg" && (P === "annotation-xml" || Oe[P]) : !!Yn[v] : y.namespaceURI === Re ? S.namespaceURI === ht ? v === "math" : S.namespaceURI === De ? v === "math" && Me[P] : !!Xn[v] : y.namespaceURI === ht ? !(S.namespaceURI === De && !Me[P]) && !(S.namespaceURI === Re && !Oe[P]) && !Xn[v] && (So[v] || !Yn[v]) : !(te !== "application/xhtml+xml" || !Ai[y.namespaceURI])); - }(c) ? (lt(c), !0) : u !== "noscript" && u !== "noembed" && u !== "noframes" || !z(/<\/no(script|embed|frames)/i, c.innerHTML) ? (Ft && c.nodeType === va && (g = c.textContent, Fe([we, hi, ui], (y) => { - g = oe(g, y, " "); - }), c.textContent !== g && (re(e.removed, { element: c.cloneNode() }), c.textContent = g)), ut(N.afterSanitizeElements, c, null), !1) : (lt(c), !0); + return !!Ai[y.namespaceURI] && (y.namespaceURI === De ? S.namespaceURI === ht ? v === "svg" : S.namespaceURI === Re ? v === "svg" && (P === "annotation-xml" || Oe[P]) : !!Yn[v] : y.namespaceURI === Re ? S.namespaceURI === ht ? v === "math" : S.namespaceURI === De ? v === "math" && Me[P] : !!Xn[v] : y.namespaceURI === ht ? !(S.namespaceURI === De && !Me[P]) && !(S.namespaceURI === Re && !Oe[P]) && !Xn[v] && (Lo[v] || !Yn[v]) : !(ee !== "application/xhtml+xml" || !Ai[y.namespaceURI])); + }(c) ? (lt(c), !0) : u !== "noscript" && u !== "noembed" && u !== "noframes" || !z(/<\/no(script|embed|frames)/i, c.innerHTML) ? (Ft && c.nodeType === _a && (g = c.textContent, Fe([we, hi, ui], (y) => { + g = ae(g, y, " "); + }), c.textContent !== g && (oe(e.removed, { element: c.cloneNode() }), c.textContent = g)), ut(N.afterSanitizeElements, c, null), !1) : (lt(c), !0); }, is = function(c, g, u) { - if (jn && (g === "id" || g === "name") && (u in i || u in Co)) return !1; - if (!(gi && !mi[g] && z(_o, g))) { - if (!(Hn && z(Ao, g))) { + if (jn && (g === "id" || g === "name") && (u in i || u in wo)) return !1; + if (!(gi && !mi[g] && z(Ao, g))) { + if (!(Hn && z(yo, g))) { if (!$[g] || mi[g]) { if (!(ns(c) && (R.tagNameCheck instanceof RegExp && z(R.tagNameCheck, c) || R.tagNameCheck instanceof Function && R.tagNameCheck(c)) && (R.attributeNameCheck instanceof RegExp && z(R.attributeNameCheck, g) || R.attributeNameCheck instanceof Function && R.attributeNameCheck(g, c)) || g === "is" && R.allowCustomizedBuiltInElements && (R.tagNameCheck instanceof RegExp && z(R.tagNameCheck, u) || R.tagNameCheck instanceof Function && R.tagNameCheck(u)))) return !1; } else if (!vi[g]) { - if (!z(Pn, oe(u, Nn, ""))) { - if ((g !== "src" && g !== "xlink:href" && g !== "href" || c === "script" || sa(u, "data:") !== 0 || !zn[c]) && !($n && !z(yo, oe(u, Nn, "")))) { + if (!z(Pn, ae(u, Nn, ""))) { + if ((g !== "src" && g !== "xlink:href" && g !== "href" || c === "script" || ra(u, "data:") !== 0 || !zn[c]) && !($n && !z(Eo, ae(u, Nn, "")))) { if (u) return !1; } } @@ -934,7 +934,7 @@ var Ee = function s() { } return !0; }, ns = function(c) { - return c !== "annotation-xml" && Pi(c, Eo); + return c !== "annotation-xml" && Pi(c, xo); }, ss = function(c) { ut(N.beforeSanitizeAttributes, c, null); const { attributes: g } = c; @@ -943,7 +943,7 @@ var Ee = function s() { let y = g.length; for (; y--; ) { const S = g[y], { name: v, namespaceURI: P, value: ft } = S, it = q(v), xi = ft; - let U = v === "value" ? xi : ra(xi); + let U = v === "value" ? xi : oa(xi); if (u.attrName = it, u.attrValue = U, u.keepAttr = !0, u.forceKeepAttr = void 0, ut(N.uponSanitizeAttribute, c, u), U = u.attrValue, !Vn || it !== "id" && it !== "name" || (St(v, c), U = "user-content-" + U), Te && z(/((--!?|])>)|<\/(style|title|textarea)/i, U)) { St(v, c); continue; @@ -962,7 +962,7 @@ var Ee = function s() { continue; } Ft && Fe([we, hi, ui], (os) => { - U = oe(U, os, " "); + U = ae(U, os, " "); }); const rs = q(c.nodeName); if (is(rs, it, U)) { @@ -981,7 +981,7 @@ var Ee = function s() { } else St(v, c); } ut(N.afterSanitizeAttributes, c, null); - }, wo = function c(g) { + }, To = function c(g) { let u = null; const y = Zn(g); for (ut(N.beforeSanitizeShadowDOM, g, null); u = y.nextNode(); ) ut(N.uponSanitizeShadowNode, u, null), es(u), ss(u), u.content instanceof o && c(u.content); @@ -990,33 +990,33 @@ var Ee = function s() { return e.sanitize = function(c) { let g = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, u = null, y = null, S = null, v = null; if (_i = !c, _i && (c = ""), typeof c != "string" && !ts(c)) { - if (typeof c.toString != "function") throw ae("toString is not a function"); - if (typeof (c = c.toString()) != "string") throw ae("dirty is not a string, aborting"); + if (typeof c.toString != "function") throw le("toString is not a function"); + if (typeof (c = c.toString()) != "string") throw le("dirty is not a string, aborting"); } if (!e.isSupported) return c; - if (pi || yi(g), e.removed = [], typeof c == "string" && (Zt = !1), Zt) { + if (pi || yi(g), e.removed = [], typeof c == "string" && (te = !1), te) { if (c.nodeName) { const it = q(c.nodeName); - if (!F[it] || Qt[it]) throw ae("root node is forbidden and cannot be sanitized in-place"); + if (!F[it] || Zt[it]) throw le("root node is forbidden and cannot be sanitized in-place"); } - } else if (c instanceof l) u = Qn(""), y = u.ownerDocument.importNode(c, !0), y.nodeType === ba && y.nodeName === "BODY" || y.nodeName === "HTML" ? u = y : u.appendChild(y); + } else if (c instanceof l) u = Qn(""), y = u.ownerDocument.importNode(c, !0), y.nodeType === va && y.nodeName === "BODY" || y.nodeName === "HTML" ? u = y : u.appendChild(y); else { if (!qt && !Ft && !xt && c.indexOf("<") === -1) return L && Ie ? L.createHTML(c) : c; if (u = Qn(c), !u) return qt ? null : Ie ? et : ""; } u && fi && lt(u.firstChild); - const P = Zn(Zt ? c : u); - for (; S = P.nextNode(); ) es(S), ss(S), S.content instanceof o && wo(S.content); - if (Zt) return c; + const P = Zn(te ? c : u); + for (; S = P.nextNode(); ) es(S), ss(S), S.content instanceof o && To(S.content); + if (te) return c; if (qt) { if (ke) for (v = ci.call(u.ownerDocument); u.firstChild; ) v.appendChild(u.firstChild); else v = u; return ($.shadowroot || $.shadowrootmode) && (v = at.call(n, v, !0)), v; } let ft = xt ? u.outerHTML : u.innerHTML; - return xt && F["!doctype"] && u.ownerDocument && u.ownerDocument.doctype && u.ownerDocument.doctype.name && z(Pr, u.ownerDocument.doctype.name) && (ft = " + return xt && F["!doctype"] && u.ownerDocument && u.ownerDocument.doctype && u.ownerDocument.doctype.name && z(Fr, u.ownerDocument.doctype.name) && (ft = " ` + ft), Ft && Fe([we, hi, ui], (it) => { - ft = oe(ft, it, " "); + ft = ae(ft, it, " "); }), L && Ie ? L.createHTML(ft) : ft; }, e.setConfig = function() { yi(arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}), pi = !0; @@ -1027,11 +1027,11 @@ var Ee = function s() { const y = q(c), S = q(g); return is(y, S, u); }, e.addHook = function(c, g) { - typeof g == "function" && re(N[c], g); + typeof g == "function" && oe(N[c], g); }, e.removeHook = function(c, g) { if (g !== void 0) { - const u = ia(N[c], g); - return u === -1 ? void 0 : na(N[c], u, 1)[0]; + const u = na(N[c], g); + return u === -1 ? void 0 : sa(N[c], u, 1)[0]; } return _s(N[c]); }, e.removeHooks = function(c) { @@ -1043,7 +1043,7 @@ var Ee = function s() { Ee.addHook("uponSanitizeAttribute", function(s, t) { /^data-trix-/.test(t.attrName) && (t.forceKeepAttr = !0); }); -const xa = "style href src width height language class".split(" "), Sa = "javascript:".split(" "), La = "script iframe form noscript".split(" "); +const Sa = "style href src width height language class".split(" "), La = "javascript:".split(" "), Ca = "script iframe form noscript".split(" "); class si extends B { static setHTML(t, e, i) { const n = new this(e, i).sanitize(), r = n.getHTML ? n.getHTML() : n.outerHTML; @@ -1055,11 +1055,11 @@ class si extends B { } constructor(t) { let { allowedAttributes: e, forbiddenProtocols: i, forbiddenElements: n, purifyOptions: r } = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}; - super(...arguments), this.allowedAttributes = e || xa, this.forbiddenProtocols = i || Sa, this.forbiddenElements = n || La, this.purifyOptions = r || {}, this.body = Ca(t); + super(...arguments), this.allowedAttributes = e || Sa, this.forbiddenProtocols = i || La, this.forbiddenElements = n || Ca, this.purifyOptions = r || {}, this.body = wa(t); } sanitize() { this.sanitizeElements(), this.normalizeListElementNesting(); - const t = Object.assign({}, Ar, this.purifyOptions); + const t = Object.assign({}, yr, this.purifyOptions); return Ee.setConfig(t), this.body = Ee.sanitize(this.body), this.body; } getHTML() { @@ -1104,7 +1104,7 @@ class si extends B { return t.getAttribute("data-trix-serialize") === "false" && !It(t); } } -const Ca = function() { +const wa = function() { let s = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : ""; s = s.replace(/<\/html[^>]*>[^]*$/i, "