diff --git a/assets/addons/codemirror/addon/hint/css-hint.js b/assets/addons/codemirror/addon/hint/css-hint.js new file mode 100644 index 0000000..5b36e82 --- /dev/null +++ b/assets/addons/codemirror/addon/hint/css-hint.js @@ -0,0 +1,66 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/5/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror"), require("../../mode/css/css")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror", "../../mode/css/css"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + var pseudoClasses = {"active":1, "after":1, "before":1, "checked":1, "default":1, + "disabled":1, "empty":1, "enabled":1, "first-child":1, "first-letter":1, + "first-line":1, "first-of-type":1, "focus":1, "hover":1, "in-range":1, + "indeterminate":1, "invalid":1, "lang":1, "last-child":1, "last-of-type":1, + "link":1, "not":1, "nth-child":1, "nth-last-child":1, "nth-last-of-type":1, + "nth-of-type":1, "only-of-type":1, "only-child":1, "optional":1, "out-of-range":1, + "placeholder":1, "read-only":1, "read-write":1, "required":1, "root":1, + "selection":1, "target":1, "valid":1, "visited":1 + }; + + CodeMirror.registerHelper("hint", "css", function(cm) { + var cur = cm.getCursor(), token = cm.getTokenAt(cur); + var inner = CodeMirror.innerMode(cm.getMode(), token.state); + if (inner.mode.name != "css") return; + + if (token.type == "keyword" && "!important".indexOf(token.string) == 0) + return {list: ["!important"], from: CodeMirror.Pos(cur.line, token.start), + to: CodeMirror.Pos(cur.line, token.end)}; + + var start = token.start, end = cur.ch, word = token.string.slice(0, end - start); + if (/[^\w$_-]/.test(word)) { + word = ""; start = end = cur.ch; + } + + var spec = CodeMirror.resolveMode("text/css"); + + var result = []; + function add(keywords) { + for (var name in keywords) + if (!word || name.lastIndexOf(word, 0) == 0) + result.push(name); + } + + var st = inner.state.state; + if (st == "pseudo" || token.type == "variable-3") { + add(pseudoClasses); + } else if (st == "block" || st == "maybeprop") { + add(spec.propertyKeywords); + } else if (st == "prop" || st == "parens" || st == "at" || st == "params") { + add(spec.valueKeywords); + add(spec.colorKeywords); + } else if (st == "media" || st == "media_parens") { + add(spec.mediaTypes); + add(spec.mediaFeatures); + } + + if (result.length) return { + list: result, + from: CodeMirror.Pos(cur.line, start), + to: CodeMirror.Pos(cur.line, end) + }; + }); +}); diff --git a/assets/addons/codemirror/addon/hint/show-hint.css b/assets/addons/codemirror/addon/hint/show-hint.css new file mode 100644 index 0000000..5617ccc --- /dev/null +++ b/assets/addons/codemirror/addon/hint/show-hint.css @@ -0,0 +1,36 @@ +.CodeMirror-hints { + position: absolute; + z-index: 10; + overflow: hidden; + list-style: none; + + margin: 0; + padding: 2px; + + -webkit-box-shadow: 2px 3px 5px rgba(0,0,0,.2); + -moz-box-shadow: 2px 3px 5px rgba(0,0,0,.2); + box-shadow: 2px 3px 5px rgba(0,0,0,.2); + border-radius: 3px; + border: 1px solid silver; + + background: white; + font-size: 90%; + font-family: monospace; + + max-height: 20em; + overflow-y: auto; +} + +.CodeMirror-hint { + margin: 0; + padding: 0 4px; + border-radius: 2px; + white-space: pre; + color: black; + cursor: pointer; +} + +li.CodeMirror-hint-active { + background: #08f; + color: white; +} diff --git a/assets/addons/codemirror/addon/hint/show-hint.js b/assets/addons/codemirror/addon/hint/show-hint.js new file mode 100644 index 0000000..be729c3 --- /dev/null +++ b/assets/addons/codemirror/addon/hint/show-hint.js @@ -0,0 +1,529 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/5/LICENSE + +// declare global: DOMRect + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + var HINT_ELEMENT_CLASS = "CodeMirror-hint"; + var ACTIVE_HINT_ELEMENT_CLASS = "CodeMirror-hint-active"; + + // This is the old interface, kept around for now to stay + // backwards-compatible. + CodeMirror.showHint = function(cm, getHints, options) { + if (!getHints) return cm.showHint(options); + if (options && options.async) getHints.async = true; + var newOpts = {hint: getHints}; + if (options) for (var prop in options) newOpts[prop] = options[prop]; + return cm.showHint(newOpts); + }; + + CodeMirror.defineExtension("showHint", function(options) { + options = parseOptions(this, this.getCursor("start"), options); + var selections = this.listSelections() + if (selections.length > 1) return; + // By default, don't allow completion when something is selected. + // A hint function can have a `supportsSelection` property to + // indicate that it can handle selections. + if (this.somethingSelected()) { + if (!options.hint.supportsSelection) return; + // Don't try with cross-line selections + for (var i = 0; i < selections.length; i++) + if (selections[i].head.line != selections[i].anchor.line) return; + } + + if (this.state.completionActive) this.state.completionActive.close(); + var completion = this.state.completionActive = new Completion(this, options); + if (!completion.options.hint) return; + + CodeMirror.signal(this, "startCompletion", this); + completion.update(true); + }); + + CodeMirror.defineExtension("closeHint", function() { + if (this.state.completionActive) this.state.completionActive.close() + }) + + function Completion(cm, options) { + this.cm = cm; + this.options = options; + this.widget = null; + this.debounce = 0; + this.tick = 0; + this.startPos = this.cm.getCursor("start"); + this.startLen = this.cm.getLine(this.startPos.line).length - this.cm.getSelection().length; + + if (this.options.updateOnCursorActivity) { + var self = this; + cm.on("cursorActivity", this.activityFunc = function() { self.cursorActivity(); }); + } + } + + var requestAnimationFrame = window.requestAnimationFrame || function(fn) { + return setTimeout(fn, 1000/60); + }; + var cancelAnimationFrame = window.cancelAnimationFrame || clearTimeout; + + Completion.prototype = { + close: function() { + if (!this.active()) return; + this.cm.state.completionActive = null; + this.tick = null; + if (this.options.updateOnCursorActivity) { + this.cm.off("cursorActivity", this.activityFunc); + } + + if (this.widget && this.data) CodeMirror.signal(this.data, "close"); + if (this.widget) this.widget.close(); + CodeMirror.signal(this.cm, "endCompletion", this.cm); + }, + + active: function() { + return this.cm.state.completionActive == this; + }, + + pick: function(data, i) { + var completion = data.list[i], self = this; + this.cm.operation(function() { + if (completion.hint) + completion.hint(self.cm, data, completion); + else + self.cm.replaceRange(getText(completion), completion.from || data.from, + completion.to || data.to, "complete"); + CodeMirror.signal(data, "pick", completion); + self.cm.scrollIntoView(); + }); + if (this.options.closeOnPick) { + this.close(); + } + }, + + cursorActivity: function() { + if (this.debounce) { + cancelAnimationFrame(this.debounce); + this.debounce = 0; + } + + var identStart = this.startPos; + if(this.data) { + identStart = this.data.from; + } + + var pos = this.cm.getCursor(), line = this.cm.getLine(pos.line); + if (pos.line != this.startPos.line || line.length - pos.ch != this.startLen - this.startPos.ch || + pos.ch < identStart.ch || this.cm.somethingSelected() || + (!pos.ch || this.options.closeCharacters.test(line.charAt(pos.ch - 1)))) { + this.close(); + } else { + var self = this; + this.debounce = requestAnimationFrame(function() {self.update();}); + if (this.widget) this.widget.disable(); + } + }, + + update: function(first) { + if (this.tick == null) return + var self = this, myTick = ++this.tick + fetchHints(this.options.hint, this.cm, this.options, function(data) { + if (self.tick == myTick) self.finishUpdate(data, first) + }) + }, + + finishUpdate: function(data, first) { + if (this.data) CodeMirror.signal(this.data, "update"); + + var picked = (this.widget && this.widget.picked) || (first && this.options.completeSingle); + if (this.widget) this.widget.close(); + + this.data = data; + + if (data && data.list.length) { + if (picked && data.list.length == 1) { + this.pick(data, 0); + } else { + this.widget = new Widget(this, data); + CodeMirror.signal(data, "shown"); + } + } + } + }; + + function parseOptions(cm, pos, options) { + var editor = cm.options.hintOptions; + var out = {}; + for (var prop in defaultOptions) out[prop] = defaultOptions[prop]; + if (editor) for (var prop in editor) + if (editor[prop] !== undefined) out[prop] = editor[prop]; + if (options) for (var prop in options) + if (options[prop] !== undefined) out[prop] = options[prop]; + if (out.hint.resolve) out.hint = out.hint.resolve(cm, pos) + return out; + } + + function getText(completion) { + if (typeof completion == "string") return completion; + else return completion.text; + } + + function buildKeyMap(completion, handle) { + var baseMap = { + Up: function() {handle.moveFocus(-1);}, + Down: function() {handle.moveFocus(1);}, + PageUp: function() {handle.moveFocus(-handle.menuSize() + 1, true);}, + PageDown: function() {handle.moveFocus(handle.menuSize() - 1, true);}, + Home: function() {handle.setFocus(0);}, + End: function() {handle.setFocus(handle.length - 1);}, + Enter: handle.pick, + Tab: handle.pick, + Esc: handle.close + }; + + var mac = /Mac/.test(navigator.platform); + + if (mac) { + baseMap["Ctrl-P"] = function() {handle.moveFocus(-1);}; + baseMap["Ctrl-N"] = function() {handle.moveFocus(1);}; + } + + var custom = completion.options.customKeys; + var ourMap = custom ? {} : baseMap; + function addBinding(key, val) { + var bound; + if (typeof val != "string") + bound = function(cm) { return val(cm, handle); }; + // This mechanism is deprecated + else if (baseMap.hasOwnProperty(val)) + bound = baseMap[val]; + else + bound = val; + ourMap[key] = bound; + } + if (custom) + for (var key in custom) if (custom.hasOwnProperty(key)) + addBinding(key, custom[key]); + var extra = completion.options.extraKeys; + if (extra) + for (var key in extra) if (extra.hasOwnProperty(key)) + addBinding(key, extra[key]); + return ourMap; + } + + function getHintElement(hintsElement, el) { + while (el && el != hintsElement) { + if (el.nodeName.toUpperCase() === "LI" && el.parentNode == hintsElement) return el; + el = el.parentNode; + } + } + + function Widget(completion, data) { + this.id = "cm-complete-" + Math.floor(Math.random(1e6)) + this.completion = completion; + this.data = data; + this.picked = false; + var widget = this, cm = completion.cm; + var ownerDocument = cm.getInputField().ownerDocument; + var parentWindow = ownerDocument.defaultView || ownerDocument.parentWindow; + + var hints = this.hints = ownerDocument.createElement("ul"); + hints.setAttribute("role", "listbox") + hints.setAttribute("aria-expanded", "true") + hints.id = this.id + var theme = completion.cm.options.theme; + hints.className = "CodeMirror-hints " + theme; + this.selectedHint = data.selectedHint || 0; + + var completions = data.list; + for (var i = 0; i < completions.length; ++i) { + var elt = hints.appendChild(ownerDocument.createElement("li")), cur = completions[i]; + var className = HINT_ELEMENT_CLASS + (i != this.selectedHint ? "" : " " + ACTIVE_HINT_ELEMENT_CLASS); + if (cur.className != null) className = cur.className + " " + className; + elt.className = className; + if (i == this.selectedHint) elt.setAttribute("aria-selected", "true") + elt.id = this.id + "-" + i + elt.setAttribute("role", "option") + if (cur.render) cur.render(elt, data, cur); + else elt.appendChild(ownerDocument.createTextNode(cur.displayText || getText(cur))); + elt.hintId = i; + } + + var container = completion.options.container || ownerDocument.body; + var pos = cm.cursorCoords(completion.options.alignWithWord ? data.from : null); + var left = pos.left, top = pos.bottom, below = true; + var offsetLeft = 0, offsetTop = 0; + if (container !== ownerDocument.body) { + // We offset the cursor position because left and top are relative to the offsetParent's top left corner. + var isContainerPositioned = ['absolute', 'relative', 'fixed'].indexOf(parentWindow.getComputedStyle(container).position) !== -1; + var offsetParent = isContainerPositioned ? container : container.offsetParent; + var offsetParentPosition = offsetParent.getBoundingClientRect(); + var bodyPosition = ownerDocument.body.getBoundingClientRect(); + offsetLeft = (offsetParentPosition.left - bodyPosition.left - offsetParent.scrollLeft); + offsetTop = (offsetParentPosition.top - bodyPosition.top - offsetParent.scrollTop); + } + hints.style.left = (left - offsetLeft) + "px"; + hints.style.top = (top - offsetTop) + "px"; + + // If we're at the edge of the screen, then we want the menu to appear on the left of the cursor. + var winW = parentWindow.innerWidth || Math.max(ownerDocument.body.offsetWidth, ownerDocument.documentElement.offsetWidth); + var winH = parentWindow.innerHeight || Math.max(ownerDocument.body.offsetHeight, ownerDocument.documentElement.offsetHeight); + container.appendChild(hints); + cm.getInputField().setAttribute("aria-autocomplete", "list") + cm.getInputField().setAttribute("aria-owns", this.id) + cm.getInputField().setAttribute("aria-activedescendant", this.id + "-" + this.selectedHint) + + var box = completion.options.moveOnOverlap ? hints.getBoundingClientRect() : new DOMRect(); + var scrolls = completion.options.paddingForScrollbar ? hints.scrollHeight > hints.clientHeight + 1 : false; + + // Compute in the timeout to avoid reflow on init + var startScroll; + setTimeout(function() { startScroll = cm.getScrollInfo(); }); + + var overlapY = box.bottom - winH; + if (overlapY > 0) { + var height = box.bottom - box.top, curTop = pos.top - (pos.bottom - box.top); + if (curTop - height > 0) { // Fits above cursor + hints.style.top = (top = pos.top - height - offsetTop) + "px"; + below = false; + } else if (height > winH) { + hints.style.height = (winH - 5) + "px"; + hints.style.top = (top = pos.bottom - box.top - offsetTop) + "px"; + var cursor = cm.getCursor(); + if (data.from.ch != cursor.ch) { + pos = cm.cursorCoords(cursor); + hints.style.left = (left = pos.left - offsetLeft) + "px"; + box = hints.getBoundingClientRect(); + } + } + } + var overlapX = box.right - winW; + if (scrolls) overlapX += cm.display.nativeBarWidth; + if (overlapX > 0) { + if (box.right - box.left > winW) { + hints.style.width = (winW - 5) + "px"; + overlapX -= (box.right - box.left) - winW; + } + hints.style.left = (left = Math.max(pos.left - overlapX - offsetLeft, 0)) + "px"; + } + if (scrolls) for (var node = hints.firstChild; node; node = node.nextSibling) + node.style.paddingRight = cm.display.nativeBarWidth + "px" + + cm.addKeyMap(this.keyMap = buildKeyMap(completion, { + moveFocus: function(n, avoidWrap) { widget.changeActive(widget.selectedHint + n, avoidWrap); }, + setFocus: function(n) { widget.changeActive(n); }, + menuSize: function() { return widget.screenAmount(); }, + length: completions.length, + close: function() { completion.close(); }, + pick: function() { widget.pick(); }, + data: data + })); + + if (completion.options.closeOnUnfocus) { + var closingOnBlur; + cm.on("blur", this.onBlur = function() { closingOnBlur = setTimeout(function() { completion.close(); }, 100); }); + cm.on("focus", this.onFocus = function() { clearTimeout(closingOnBlur); }); + } + + cm.on("scroll", this.onScroll = function() { + var curScroll = cm.getScrollInfo(), editor = cm.getWrapperElement().getBoundingClientRect(); + if (!startScroll) startScroll = cm.getScrollInfo(); + var newTop = top + startScroll.top - curScroll.top; + var point = newTop - (parentWindow.pageYOffset || (ownerDocument.documentElement || ownerDocument.body).scrollTop); + if (!below) point += hints.offsetHeight; + if (point <= editor.top || point >= editor.bottom) return completion.close(); + hints.style.top = newTop + "px"; + hints.style.left = (left + startScroll.left - curScroll.left) + "px"; + }); + + CodeMirror.on(hints, "dblclick", function(e) { + var t = getHintElement(hints, e.target || e.srcElement); + if (t && t.hintId != null) {widget.changeActive(t.hintId); widget.pick();} + }); + + CodeMirror.on(hints, "click", function(e) { + var t = getHintElement(hints, e.target || e.srcElement); + if (t && t.hintId != null) { + widget.changeActive(t.hintId); + if (completion.options.completeOnSingleClick) widget.pick(); + } + }); + + CodeMirror.on(hints, "mousedown", function() { + setTimeout(function(){cm.focus();}, 20); + }); + + // The first hint doesn't need to be scrolled to on init + var selectedHintRange = this.getSelectedHintRange(); + if (selectedHintRange.from !== 0 || selectedHintRange.to !== 0) { + this.scrollToActive(); + } + + CodeMirror.signal(data, "select", completions[this.selectedHint], hints.childNodes[this.selectedHint]); + return true; + } + + Widget.prototype = { + close: function() { + if (this.completion.widget != this) return; + this.completion.widget = null; + if (this.hints.parentNode) this.hints.parentNode.removeChild(this.hints); + this.completion.cm.removeKeyMap(this.keyMap); + var input = this.completion.cm.getInputField() + input.removeAttribute("aria-activedescendant") + input.removeAttribute("aria-owns") + + var cm = this.completion.cm; + if (this.completion.options.closeOnUnfocus) { + cm.off("blur", this.onBlur); + cm.off("focus", this.onFocus); + } + cm.off("scroll", this.onScroll); + }, + + disable: function() { + this.completion.cm.removeKeyMap(this.keyMap); + var widget = this; + this.keyMap = {Enter: function() { widget.picked = true; }}; + this.completion.cm.addKeyMap(this.keyMap); + }, + + pick: function() { + this.completion.pick(this.data, this.selectedHint); + }, + + changeActive: function(i, avoidWrap) { + if (i >= this.data.list.length) + i = avoidWrap ? this.data.list.length - 1 : 0; + else if (i < 0) + i = avoidWrap ? 0 : this.data.list.length - 1; + if (this.selectedHint == i) return; + var node = this.hints.childNodes[this.selectedHint]; + if (node) { + node.className = node.className.replace(" " + ACTIVE_HINT_ELEMENT_CLASS, ""); + node.removeAttribute("aria-selected") + } + node = this.hints.childNodes[this.selectedHint = i]; + node.className += " " + ACTIVE_HINT_ELEMENT_CLASS; + node.setAttribute("aria-selected", "true") + this.completion.cm.getInputField().setAttribute("aria-activedescendant", node.id) + this.scrollToActive() + CodeMirror.signal(this.data, "select", this.data.list[this.selectedHint], node); + }, + + scrollToActive: function() { + var selectedHintRange = this.getSelectedHintRange(); + var node1 = this.hints.childNodes[selectedHintRange.from]; + var node2 = this.hints.childNodes[selectedHintRange.to]; + var firstNode = this.hints.firstChild; + if (node1.offsetTop < this.hints.scrollTop) + this.hints.scrollTop = node1.offsetTop - firstNode.offsetTop; + else if (node2.offsetTop + node2.offsetHeight > this.hints.scrollTop + this.hints.clientHeight) + this.hints.scrollTop = node2.offsetTop + node2.offsetHeight - this.hints.clientHeight + firstNode.offsetTop; + }, + + screenAmount: function() { + return Math.floor(this.hints.clientHeight / this.hints.firstChild.offsetHeight) || 1; + }, + + getSelectedHintRange: function() { + var margin = this.completion.options.scrollMargin || 0; + return { + from: Math.max(0, this.selectedHint - margin), + to: Math.min(this.data.list.length - 1, this.selectedHint + margin), + }; + } + }; + + function applicableHelpers(cm, helpers) { + if (!cm.somethingSelected()) return helpers + var result = [] + for (var i = 0; i < helpers.length; i++) + if (helpers[i].supportsSelection) result.push(helpers[i]) + return result + } + + function fetchHints(hint, cm, options, callback) { + if (hint.async) { + hint(cm, callback, options) + } else { + var result = hint(cm, options) + if (result && result.then) result.then(callback) + else callback(result) + } + } + + function resolveAutoHints(cm, pos) { + var helpers = cm.getHelpers(pos, "hint"), words + if (helpers.length) { + var resolved = function(cm, callback, options) { + var app = applicableHelpers(cm, helpers); + function run(i) { + if (i == app.length) return callback(null) + fetchHints(app[i], cm, options, function(result) { + if (result && result.list.length > 0) callback(result) + else run(i + 1) + }) + } + run(0) + } + resolved.async = true + resolved.supportsSelection = true + return resolved + } else if (words = cm.getHelper(cm.getCursor(), "hintWords")) { + return function(cm) { return CodeMirror.hint.fromList(cm, {words: words}) } + } else if (CodeMirror.hint.anyword) { + return function(cm, options) { return CodeMirror.hint.anyword(cm, options) } + } else { + return function() {} + } + } + + CodeMirror.registerHelper("hint", "auto", { + resolve: resolveAutoHints + }); + + CodeMirror.registerHelper("hint", "fromList", function(cm, options) { + var cur = cm.getCursor(), token = cm.getTokenAt(cur) + var term, from = CodeMirror.Pos(cur.line, token.start), to = cur + if (token.start < cur.ch && /\w/.test(token.string.charAt(cur.ch - token.start - 1))) { + term = token.string.substr(0, cur.ch - token.start) + } else { + term = "" + from = cur + } + var found = []; + for (var i = 0; i < options.words.length; i++) { + var word = options.words[i]; + if (word.slice(0, term.length) == term) + found.push(word); + } + + if (found.length) return {list: found, from: from, to: to}; + }); + + CodeMirror.commands.autocomplete = CodeMirror.showHint; + + var defaultOptions = { + hint: CodeMirror.hint.auto, + completeSingle: true, + alignWithWord: true, + closeCharacters: /[\s()\[\]{};:>,]/, + closeOnPick: true, + closeOnUnfocus: true, + updateOnCursorActivity: true, + completeOnSingleClick: true, + container: null, + customKeys: null, + extraKeys: null, + paddingForScrollbar: true, + moveOnOverlap: true, + }; + + CodeMirror.defineOption("hintOptions", null); +}); diff --git a/assets/addons/codemirror/lib/codemirror.css b/assets/addons/codemirror/lib/codemirror.css new file mode 100644 index 0000000..f4d5718 --- /dev/null +++ b/assets/addons/codemirror/lib/codemirror.css @@ -0,0 +1,344 @@ +/* BASICS */ + +.CodeMirror { + /* Set height, width, borders, and global font properties here */ + font-family: monospace; + height: 300px; + color: black; + direction: ltr; +} + +/* PADDING */ + +.CodeMirror-lines { + padding: 4px 0; /* Vertical padding around content */ +} +.CodeMirror pre.CodeMirror-line, +.CodeMirror pre.CodeMirror-line-like { + padding: 0 4px; /* Horizontal padding of content */ +} + +.CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler { + background-color: white; /* The little square between H and V scrollbars */ +} + +/* GUTTER */ + +.CodeMirror-gutters { + border-right: 1px solid #ddd; + background-color: #f7f7f7; + white-space: nowrap; +} +.CodeMirror-linenumbers {} +.CodeMirror-linenumber { + padding: 0 3px 0 5px; + min-width: 20px; + text-align: right; + color: #999; + white-space: nowrap; +} + +.CodeMirror-guttermarker { color: black; } +.CodeMirror-guttermarker-subtle { color: #999; } + +/* CURSOR */ + +.CodeMirror-cursor { + border-left: 1px solid black; + border-right: none; + width: 0; +} +/* Shown when moving in bi-directional text */ +.CodeMirror div.CodeMirror-secondarycursor { + border-left: 1px solid silver; +} +.cm-fat-cursor .CodeMirror-cursor { + width: auto; + border: 0 !important; + background: #7e7; +} +.cm-fat-cursor div.CodeMirror-cursors { + z-index: 1; +} +.cm-fat-cursor .CodeMirror-line::selection, +.cm-fat-cursor .CodeMirror-line > span::selection, +.cm-fat-cursor .CodeMirror-line > span > span::selection { background: transparent; } +.cm-fat-cursor .CodeMirror-line::-moz-selection, +.cm-fat-cursor .CodeMirror-line > span::-moz-selection, +.cm-fat-cursor .CodeMirror-line > span > span::-moz-selection { background: transparent; } +.cm-fat-cursor { caret-color: transparent; } +@-moz-keyframes blink { + 0% {} + 50% { background-color: transparent; } + 100% {} +} +@-webkit-keyframes blink { + 0% {} + 50% { background-color: transparent; } + 100% {} +} +@keyframes blink { + 0% {} + 50% { background-color: transparent; } + 100% {} +} + +/* Can style cursor different in overwrite (non-insert) mode */ +.CodeMirror-overwrite .CodeMirror-cursor {} + +.cm-tab { display: inline-block; text-decoration: inherit; } + +.CodeMirror-rulers { + position: absolute; + left: 0; right: 0; top: -50px; bottom: 0; + overflow: hidden; +} +.CodeMirror-ruler { + border-left: 1px solid #ccc; + top: 0; bottom: 0; + position: absolute; +} + +/* DEFAULT THEME */ + +.cm-s-default .cm-header {color: blue;} +.cm-s-default .cm-quote {color: #090;} +.cm-negative {color: #d44;} +.cm-positive {color: #292;} +.cm-header, .cm-strong {font-weight: bold;} +.cm-em {font-style: italic;} +.cm-link {text-decoration: underline;} +.cm-strikethrough {text-decoration: line-through;} + +.cm-s-default .cm-keyword {color: #708;} +.cm-s-default .cm-atom {color: #219;} +.cm-s-default .cm-number {color: #164;} +.cm-s-default .cm-def {color: #00f;} +.cm-s-default .cm-variable, +.cm-s-default .cm-punctuation, +.cm-s-default .cm-property, +.cm-s-default .cm-operator {} +.cm-s-default .cm-variable-2 {color: #05a;} +.cm-s-default .cm-variable-3, .cm-s-default .cm-type {color: #085;} +.cm-s-default .cm-comment {color: #a50;} +.cm-s-default .cm-string {color: #a11;} +.cm-s-default .cm-string-2 {color: #f50;} +.cm-s-default .cm-meta {color: #555;} +.cm-s-default .cm-qualifier {color: #555;} +.cm-s-default .cm-builtin {color: #30a;} +.cm-s-default .cm-bracket {color: #997;} +.cm-s-default .cm-tag {color: #170;} +.cm-s-default .cm-attribute {color: #00c;} +.cm-s-default .cm-hr {color: #999;} +.cm-s-default .cm-link {color: #00c;} + +.cm-s-default .cm-error {color: #f00;} +.cm-invalidchar {color: #f00;} + +.CodeMirror-composing { border-bottom: 2px solid; } + +/* Default styles for common addons */ + +div.CodeMirror span.CodeMirror-matchingbracket {color: #0b0;} +div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #a22;} +.CodeMirror-matchingtag { background: rgba(255, 150, 0, .3); } +.CodeMirror-activeline-background {background: #e8f2ff;} + +/* STOP */ + +/* The rest of this file contains styles related to the mechanics of + the editor. You probably shouldn't touch them. */ + +.CodeMirror { + position: relative; + overflow: hidden; + background: white; +} + +.CodeMirror-scroll { + overflow: scroll !important; /* Things will break if this is overridden */ + /* 50px is the magic margin used to hide the element's real scrollbars */ + /* See overflow: hidden in .CodeMirror */ + margin-bottom: -50px; margin-right: -50px; + padding-bottom: 50px; + height: 100%; + outline: none; /* Prevent dragging from highlighting the element */ + position: relative; + z-index: 0; +} +.CodeMirror-sizer { + position: relative; + border-right: 50px solid transparent; +} + +/* The fake, visible scrollbars. Used to force redraw during scrolling + before actual scrolling happens, thus preventing shaking and + flickering artifacts. */ +.CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler { + position: absolute; + z-index: 6; + display: none; + outline: none; +} +.CodeMirror-vscrollbar { + right: 0; top: 0; + overflow-x: hidden; + overflow-y: scroll; +} +.CodeMirror-hscrollbar { + bottom: 0; left: 0; + overflow-y: hidden; + overflow-x: scroll; +} +.CodeMirror-scrollbar-filler { + right: 0; bottom: 0; +} +.CodeMirror-gutter-filler { + left: 0; bottom: 0; +} + +.CodeMirror-gutters { + position: absolute; left: 0; top: 0; + min-height: 100%; + z-index: 3; +} +.CodeMirror-gutter { + white-space: normal; + height: 100%; + display: inline-block; + vertical-align: top; + margin-bottom: -50px; +} +.CodeMirror-gutter-wrapper { + position: absolute; + z-index: 4; + background: none !important; + border: none !important; +} +.CodeMirror-gutter-background { + position: absolute; + top: 0; bottom: 0; + z-index: 4; +} +.CodeMirror-gutter-elt { + position: absolute; + cursor: default; + z-index: 4; +} +.CodeMirror-gutter-wrapper ::selection { background-color: transparent } +.CodeMirror-gutter-wrapper ::-moz-selection { background-color: transparent } + +.CodeMirror-lines { + cursor: text; + min-height: 1px; /* prevents collapsing before first draw */ +} +.CodeMirror pre.CodeMirror-line, +.CodeMirror pre.CodeMirror-line-like { + /* Reset some styles that the rest of the page might have set */ + -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; + border-width: 0; + background: transparent; + font-family: inherit; + font-size: inherit; + margin: 0; + white-space: pre; + word-wrap: normal; + line-height: inherit; + color: inherit; + z-index: 2; + position: relative; + overflow: visible; + -webkit-tap-highlight-color: transparent; + -webkit-font-variant-ligatures: contextual; + font-variant-ligatures: contextual; +} +.CodeMirror-wrap pre.CodeMirror-line, +.CodeMirror-wrap pre.CodeMirror-line-like { + word-wrap: break-word; + white-space: pre-wrap; + word-break: normal; +} + +.CodeMirror-linebackground { + position: absolute; + left: 0; right: 0; top: 0; bottom: 0; + z-index: 0; +} + +.CodeMirror-linewidget { + position: relative; + z-index: 2; + padding: 0.1px; /* Force widget margins to stay inside of the container */ +} + +.CodeMirror-widget {} + +.CodeMirror-rtl pre { direction: rtl; } + +.CodeMirror-code { + outline: none; +} + +/* Force content-box sizing for the elements where we expect it */ +.CodeMirror-scroll, +.CodeMirror-sizer, +.CodeMirror-gutter, +.CodeMirror-gutters, +.CodeMirror-linenumber { + -moz-box-sizing: content-box; + box-sizing: content-box; +} + +.CodeMirror-measure { + position: absolute; + width: 100%; + height: 0; + overflow: hidden; + visibility: hidden; +} + +.CodeMirror-cursor { + position: absolute; + pointer-events: none; +} +.CodeMirror-measure pre { position: static; } + +div.CodeMirror-cursors { + visibility: hidden; + position: relative; + z-index: 3; +} +div.CodeMirror-dragcursors { + visibility: visible; +} + +.CodeMirror-focused div.CodeMirror-cursors { + visibility: visible; +} + +.CodeMirror-selected { background: #d9d9d9; } +.CodeMirror-focused .CodeMirror-selected { background: #d7d4f0; } +.CodeMirror-crosshair { cursor: crosshair; } +.CodeMirror-line::selection, .CodeMirror-line > span::selection, .CodeMirror-line > span > span::selection { background: #d7d4f0; } +.CodeMirror-line::-moz-selection, .CodeMirror-line > span::-moz-selection, .CodeMirror-line > span > span::-moz-selection { background: #d7d4f0; } + +.cm-searching { + background-color: #ffa; + background-color: rgba(255, 255, 0, .4); +} + +/* Used to force a border model for a node */ +.cm-force-border { padding-right: .1px; } + +@media print { + /* Hide the cursor when printing */ + .CodeMirror div.CodeMirror-cursors { + visibility: hidden; + } +} + +/* See issue #2901 */ +.cm-tab-wrap-hack:after { content: ''; } + +/* Help users use markselection to safely style text background */ +span.CodeMirror-selectedtext { background: none; } diff --git a/assets/addons/codemirror/lib/codemirror.min.js b/assets/addons/codemirror/lib/codemirror.min.js new file mode 100644 index 0000000..3861fcf --- /dev/null +++ b/assets/addons/codemirror/lib/codemirror.min.js @@ -0,0 +1,8 @@ +/** + * Minified by jsDelivr using Terser v5.14.1. + * Original file: /npm/codemirror@6.65.7/lib/codemirror.js + * + * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files + */ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).CodeMirror=t()}(this,(function(){"use strict";var e=navigator.userAgent,t=navigator.platform,r=/gecko\/\d/i.test(e),n=/MSIE \d/.test(e),i=/Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(e),o=/Edge\/(\d+)/.exec(e),l=n||i||o,s=l&&(n?document.documentMode||6:+(o||i)[1]),a=!o&&/WebKit\//.test(e),u=a&&/Qt\/\d+\.\d+/.test(e),c=!o&&/Chrome\/(\d+)/.exec(e),h=c&&+c[1],f=/Opera\//.test(e),d=/Apple Computer/.test(navigator.vendor),p=/Mac OS X 1\d\D([8-9]|\d\d)\D/.test(e),g=/PhantomJS/.test(e),v=d&&(/Mobile\/\w+/.test(e)||navigator.maxTouchPoints>2),m=/Android/.test(e),y=v||m||/webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(e),b=v||/Mac/.test(t),w=/\bCrOS\b/.test(e),x=/win/i.test(t),C=f&&e.match(/Version\/(\d*\.\d*)/);C&&(C=Number(C[1])),C&&C>=15&&(f=!1,a=!0);var S=b&&(u||f&&(null==C||C<12.11)),L=r||l&&s>=9;function k(e){return new RegExp("(^|\\s)"+e+"(?:$|\\s)\\s*")}var T,M=function(e,t){var r=e.className,n=k(t).exec(r);if(n){var i=r.slice(n.index+n[0].length);e.className=r.slice(0,n.index)+(i?n[1]+i:"")}};function N(e){for(var t=e.childNodes.length;t>0;--t)e.removeChild(e.firstChild);return e}function O(e,t){return N(e).appendChild(t)}function A(e,t,r,n){var i=document.createElement(e);if(r&&(i.className=r),n&&(i.style.cssText=n),"string"==typeof t)i.appendChild(document.createTextNode(t));else if(t)for(var o=0;o=t)return l+(t-o);l+=s-o,l+=r-l%r,o=s+1}}v?E=function(e){e.selectionStart=0,e.selectionEnd=e.value.length}:l&&(E=function(e){try{e.select()}catch(e){}});var U=function(){this.id=null,this.f=null,this.time=0,this.handler=R(this.onTimeout,this)};function V(e,t){for(var r=0;r=t)return n+Math.min(l,t-i);if(i+=o-n,n=o+1,(i+=r-i%r)>=t)return n}}var _=[""];function q(e){for(;_.length<=e;)_.push(Z(_)+" ");return _[e]}function Z(e){return e[e.length-1]}function Q(e,t){for(var r=[],n=0;n"€"&&(e.toUpperCase()!=e.toLowerCase()||te.test(e))}function ne(e,t){return t?!!(t.source.indexOf("\\w")>-1&&re(e))||t.test(e):re(e)}function ie(e){for(var t in e)if(e.hasOwnProperty(t)&&e[t])return!1;return!0}var oe=/[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/;function le(e){return e.charCodeAt(0)>=768&&oe.test(e)}function se(e,t,r){for(;(r<0?t>0:tr?-1:1;;){if(t==r)return t;var i=(t+r)/2,o=n<0?Math.ceil(i):Math.floor(i);if(o==t)return e(o)?t:r;e(o)?r=o:t=o+n}}var ue=null;function ce(e,t,r){var n;ue=null;for(var i=0;it)return i;o.to==t&&(o.from!=o.to&&"before"==r?n=i:ue=i),o.from==t&&(o.from!=o.to&&"before"!=r?n=i:ue=i)}return null!=n?n:ue}var he=function(){var e=/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/,t=/[stwN]/,r=/[LRr]/,n=/[Lb1n]/,i=/[1n]/;function o(e,t,r){this.level=e,this.from=t,this.to=r}return function(l,s){var a="ltr"==s?"L":"R";if(0==l.length||"ltr"==s&&!e.test(l))return!1;for(var u,c=l.length,h=[],f=0;f-1&&(n[t]=i.slice(0,o).concat(i.slice(o+1)))}}}function me(e,t){var r=ge(e,t);if(r.length)for(var n=Array.prototype.slice.call(arguments,2),i=0;i0}function xe(e){e.prototype.on=function(e,t){pe(this,e,t)},e.prototype.off=function(e,t){ve(this,e,t)}}function Ce(e){e.preventDefault?e.preventDefault():e.returnValue=!1}function Se(e){e.stopPropagation?e.stopPropagation():e.cancelBubble=!0}function Le(e){return null!=e.defaultPrevented?e.defaultPrevented:0==e.returnValue}function ke(e){Ce(e),Se(e)}function Te(e){return e.target||e.srcElement}function Me(e){var t=e.which;return null==t&&(1&e.button?t=1:2&e.button?t=3:4&e.button&&(t=2)),b&&e.ctrlKey&&1==t&&(t=3),t}var Ne,Oe,Ae=function(){if(l&&s<9)return!1;var e=A("div");return"draggable"in e||"dragDrop"in e}();function De(e){if(null==Ne){var t=A("span","​");O(e,A("span",[t,document.createTextNode("x")])),0!=e.firstChild.offsetHeight&&(Ne=t.offsetWidth<=1&&t.offsetHeight>2&&!(l&&s<8))}var r=Ne?A("span","​"):A("span"," ",null,"display: inline-block; width: 1px; margin-right: -1px");return r.setAttribute("cm-text",""),r}function We(e){if(null!=Oe)return Oe;var t=O(e,document.createTextNode("AخA")),r=T(t,0,1).getBoundingClientRect(),n=T(t,1,2).getBoundingClientRect();return N(e),!(!r||r.left==r.right)&&(Oe=n.right-r.right<3)}var He,Fe=3!="\n\nb".split(/\n/).length?function(e){for(var t=0,r=[],n=e.length;t<=n;){var i=e.indexOf("\n",t);-1==i&&(i=e.length);var o=e.slice(t,"\r"==e.charAt(i-1)?i-1:i),l=o.indexOf("\r");-1!=l?(r.push(o.slice(0,l)),t+=l+1):(r.push(o),t=i+1)}return r}:function(e){return e.split(/\r\n?|\n/)},Pe=window.getSelection?function(e){try{return e.selectionStart!=e.selectionEnd}catch(e){return!1}}:function(e){var t;try{t=e.ownerDocument.selection.createRange()}catch(e){}return!(!t||t.parentElement()!=e)&&0!=t.compareEndPoints("StartToEnd",t)},Ee="oncopy"in(He=A("div"))||(He.setAttribute("oncopy","return;"),"function"==typeof He.oncopy),Ie=null;var ze={},Re={};function Be(e,t){arguments.length>2&&(t.dependencies=Array.prototype.slice.call(arguments,2)),ze[e]=t}function Ge(e){if("string"==typeof e&&Re.hasOwnProperty(e))e=Re[e];else if(e&&"string"==typeof e.name&&Re.hasOwnProperty(e.name)){var t=Re[e.name];"string"==typeof t&&(t={name:t}),(e=ee(t,e)).name=t.name}else{if("string"==typeof e&&/^[\w\-]+\/[\w\-]+\+xml$/.test(e))return Ge("application/xml");if("string"==typeof e&&/^[\w\-]+\/[\w\-]+\+json$/.test(e))return Ge("application/json")}return"string"==typeof e?{name:e}:e||{name:"null"}}function Ue(e,t){t=Ge(t);var r=ze[t.name];if(!r)return Ue(e,"text/plain");var n=r(e,t);if(Ve.hasOwnProperty(t.name)){var i=Ve[t.name];for(var o in i)i.hasOwnProperty(o)&&(n.hasOwnProperty(o)&&(n["_"+o]=n[o]),n[o]=i[o])}if(n.name=t.name,t.helperType&&(n.helperType=t.helperType),t.modeProps)for(var l in t.modeProps)n[l]=t.modeProps[l];return n}var Ve={};function Ke(e,t){B(t,Ve.hasOwnProperty(e)?Ve[e]:Ve[e]={})}function je(e,t){if(!0===t)return t;if(e.copyState)return e.copyState(t);var r={};for(var n in t){var i=t[n];i instanceof Array&&(i=i.concat([])),r[n]=i}return r}function Xe(e,t){for(var r;e.innerMode&&(r=e.innerMode(t))&&r.mode!=e;)t=r.state,e=r.mode;return r||{mode:e,state:t}}function Ye(e,t,r){return!e.startState||e.startState(t,r)}var $e=function(e,t,r){this.pos=this.start=0,this.string=e,this.tabSize=t||8,this.lastColumnPos=this.lastColumnValue=0,this.lineStart=0,this.lineOracle=r};function _e(e,t){if((t-=e.first)<0||t>=e.size)throw new Error("There is no line "+(t+e.first)+" in the document.");for(var r=e;!r.lines;)for(var n=0;;++n){var i=r.children[n],o=i.chunkSize();if(t=e.first&&tr?nt(r,_e(e,r).text.length):function(e,t){var r=e.ch;return null==r||r>t?nt(e.line,t):r<0?nt(e.line,0):e}(t,_e(e,t.line).text.length)}function ht(e,t){for(var r=[],n=0;n=this.string.length},$e.prototype.sol=function(){return this.pos==this.lineStart},$e.prototype.peek=function(){return this.string.charAt(this.pos)||void 0},$e.prototype.next=function(){if(this.post},$e.prototype.eatSpace=function(){for(var e=this.pos;/[\s\u00a0]/.test(this.string.charAt(this.pos));)++this.pos;return this.pos>e},$e.prototype.skipToEnd=function(){this.pos=this.string.length},$e.prototype.skipTo=function(e){var t=this.string.indexOf(e,this.pos);if(t>-1)return this.pos=t,!0},$e.prototype.backUp=function(e){this.pos-=e},$e.prototype.column=function(){return this.lastColumnPos0?null:(n&&!1!==t&&(this.pos+=n[0].length),n)}var i=function(e){return r?e.toLowerCase():e};if(i(this.string.substr(this.pos,e.length))==i(e))return!1!==t&&(this.pos+=e.length),!0},$e.prototype.current=function(){return this.string.slice(this.start,this.pos)},$e.prototype.hideFirstChars=function(e,t){this.lineStart+=e;try{return t()}finally{this.lineStart-=e}},$e.prototype.lookAhead=function(e){var t=this.lineOracle;return t&&t.lookAhead(e)},$e.prototype.baseToken=function(){var e=this.lineOracle;return e&&e.baseToken(this.pos)};var ft=function(e,t){this.state=e,this.lookAhead=t},dt=function(e,t,r,n){this.state=t,this.doc=e,this.line=r,this.maxLookAhead=n||0,this.baseTokens=null,this.baseTokenPos=1};function pt(e,t,r,n){var i=[e.state.modeGen],o={};St(e,t.text,e.doc.mode,r,(function(e,t){return i.push(e,t)}),o,n);for(var l=r.state,s=function(n){r.baseTokens=i;var s=e.state.overlays[n],a=1,u=0;r.state=!0,St(e,t.text,s.mode,r,(function(e,t){for(var r=a;ue&&i.splice(a,1,e,i[a+1],n),a+=2,u=Math.min(e,n)}if(t)if(s.opaque)i.splice(r,a-r,e,"overlay "+t),a=r+2;else for(;re.options.maxHighlightLength&&je(e.doc.mode,n.state),o=pt(e,t,n);i&&(n.state=i),t.stateAfter=n.save(!i),t.styles=o.styles,o.classes?t.styleClasses=o.classes:t.styleClasses&&(t.styleClasses=null),r===e.doc.highlightFrontier&&(e.doc.modeFrontier=Math.max(e.doc.modeFrontier,++e.doc.highlightFrontier))}return t.styles}function vt(e,t,r){var n=e.doc,i=e.display;if(!n.mode.startState)return new dt(n,!0,t);var o=function(e,t,r){for(var n,i,o=e.doc,l=r?-1:t-(e.doc.mode.innerMode?1e3:100),s=t;s>l;--s){if(s<=o.first)return o.first;var a=_e(o,s-1),u=a.stateAfter;if(u&&(!r||s+(u instanceof ft?u.lookAhead:0)<=o.modeFrontier))return s;var c=G(a.text,null,e.options.tabSize);(null==i||n>c)&&(i=s-1,n=c)}return i}(e,t,r),l=o>n.first&&_e(n,o-1).stateAfter,s=l?dt.fromSaved(n,l,o):new dt(n,Ye(n.mode),o);return n.iter(o,t,(function(r){mt(e,r.text,s);var n=s.line;r.stateAfter=n==t-1||n%5==0||n>=i.viewFrom&&nt.start)return o}throw new Error("Mode "+e.name+" failed to advance stream.")}dt.prototype.lookAhead=function(e){var t=this.doc.getLine(this.line+e);return null!=t&&e>this.maxLookAhead&&(this.maxLookAhead=e),t},dt.prototype.baseToken=function(e){if(!this.baseTokens)return null;for(;this.baseTokens[this.baseTokenPos]<=e;)this.baseTokenPos+=2;var t=this.baseTokens[this.baseTokenPos+1];return{type:t&&t.replace(/( |^)overlay .*/,""),size:this.baseTokens[this.baseTokenPos]-e}},dt.prototype.nextLine=function(){this.line++,this.maxLookAhead>0&&this.maxLookAhead--},dt.fromSaved=function(e,t,r){return t instanceof ft?new dt(e,je(e.mode,t.state),r,t.lookAhead):new dt(e,je(e.mode,t),r)},dt.prototype.save=function(e){var t=!1!==e?je(this.doc.mode,this.state):this.state;return this.maxLookAhead>0?new ft(t,this.maxLookAhead):t};var wt=function(e,t,r){this.start=e.start,this.end=e.pos,this.string=e.current(),this.type=t||null,this.state=r};function xt(e,t,r,n){var i,o,l=e.doc,s=l.mode,a=_e(l,(t=ct(l,t)).line),u=vt(e,t.line,r),c=new $e(a.text,e.options.tabSize,u);for(n&&(o=[]);(n||c.pose.options.maxHighlightLength?(s=!1,l&&mt(e,t,n,h.pos),h.pos=t.length,a=null):a=Ct(bt(r,h,n.state,f),o),f){var d=f[0].name;d&&(a="m-"+(a?d+" "+a:d))}if(!s||c!=a){for(;u=t:o.to>t);(n||(n=[])).push(new Tt(l,o.from,s?null:o.to))}}return n}(r,i,l),a=function(e,t,r){var n;if(e)for(var i=0;i=t:o.to>t)||o.from==t&&"bookmark"==l.type&&(!r||o.marker.insertLeft)){var s=null==o.from||(l.inclusiveLeft?o.from<=t:o.from0&&s)for(var b=0;bt)&&(!r||Pt(r,o.marker)<0)&&(r=o.marker)}return r}function Bt(e,t,r,n,i){var o=_e(e,t),l=kt&&o.markedSpans;if(l)for(var s=0;s=0&&h<=0||c<=0&&h>=0)&&(c<=0&&(a.marker.inclusiveRight&&i.inclusiveLeft?it(u.to,r)>=0:it(u.to,r)>0)||c>=0&&(a.marker.inclusiveRight&&i.inclusiveLeft?it(u.from,n)<=0:it(u.from,n)<0)))return!0}}}function Gt(e){for(var t;t=It(e);)e=t.find(-1,!0).line;return e}function Ut(e,t){var r=_e(e,t),n=Gt(r);return r==n?t:Je(n)}function Vt(e,t){if(t>e.lastLine())return t;var r,n=_e(e,t);if(!Kt(e,n))return t;for(;r=zt(n);)n=r.find(1,!0).line;return Je(n)+1}function Kt(e,t){var r=kt&&t.markedSpans;if(r)for(var n=void 0,i=0;it.maxLineLength&&(t.maxLineLength=r,t.maxLine=e)}))}var _t=function(e,t,r){this.text=e,Wt(this,t),this.height=r?r(this):1};function qt(e){e.parent=null,Dt(e)}_t.prototype.lineNo=function(){return Je(this)},xe(_t);var Zt={},Qt={};function Jt(e,t){if(!e||/^\s*$/.test(e))return null;var r=t.addModeClass?Qt:Zt;return r[e]||(r[e]=e.replace(/\S+/g,"cm-$&"))}function er(e,t){var r=D("span",null,null,a?"padding-right: .1px":null),n={pre:D("pre",[r],"CodeMirror-line"),content:r,col:0,pos:0,cm:e,trailingSpace:!1,splitSpaces:e.getOption("lineWrapping")};t.measure={};for(var i=0;i<=(t.rest?t.rest.length:0);i++){var o=i?t.rest[i-1]:t.line,l=void 0;n.pos=0,n.addToken=rr,We(e.display.measure)&&(l=fe(o,e.doc.direction))&&(n.addToken=nr(n.addToken,l)),n.map=[],or(o,n,gt(e,o,t!=e.display.externalMeasured&&Je(o))),o.styleClasses&&(o.styleClasses.bgClass&&(n.bgClass=P(o.styleClasses.bgClass,n.bgClass||"")),o.styleClasses.textClass&&(n.textClass=P(o.styleClasses.textClass,n.textClass||""))),0==n.map.length&&n.map.push(0,0,n.content.appendChild(De(e.display.measure))),0==i?(t.measure.map=n.map,t.measure.cache={}):((t.measure.maps||(t.measure.maps=[])).push(n.map),(t.measure.caches||(t.measure.caches=[])).push({}))}if(a){var s=n.content.lastChild;(/\bcm-tab\b/.test(s.className)||s.querySelector&&s.querySelector(".cm-tab"))&&(n.content.className="cm-tab-wrap-hack")}return me(e,"renderLine",e,t.line,n.pre),n.pre.className&&(n.textClass=P(n.pre.className,n.textClass||"")),n}function tr(e){var t=A("span","•","cm-invalidchar");return t.title="\\u"+e.charCodeAt(0).toString(16),t.setAttribute("aria-label",t.title),t}function rr(e,t,r,n,i,o,a){if(t){var u,c=e.splitSpaces?function(e,t){if(e.length>1&&!/ /.test(e))return e;for(var r=t,n="",i=0;iu&&h.from<=u);f++);if(h.to>=c)return e(r,n,i,o,l,s,a);e(r,n.slice(0,h.to-u),i,o,null,s,a),o=null,n=n.slice(h.to-u),u=h.to}}}function ir(e,t,r,n){var i=!n&&r.widgetNode;i&&e.map.push(e.pos,e.pos+t,i),!n&&e.cm.display.input.needsContentAttribute&&(i||(i=e.content.appendChild(document.createElement("span"))),i.setAttribute("cm-marker",r.id)),i&&(e.cm.display.input.setUneditable(i),e.content.appendChild(i)),e.pos+=t,e.trailingSpace=!1}function or(e,t,r){var n=e.markedSpans,i=e.text,o=0;if(n)for(var l,s,a,u,c,h,f,d=i.length,p=0,g=1,v="",m=0;;){if(m==p){a=u=c=s="",f=null,h=null,m=1/0;for(var y=[],b=void 0,w=0;wp||C.collapsed&&x.to==p&&x.from==p)){if(null!=x.to&&x.to!=p&&m>x.to&&(m=x.to,u=""),C.className&&(a+=" "+C.className),C.css&&(s=(s?s+";":"")+C.css),C.startStyle&&x.from==p&&(c+=" "+C.startStyle),C.endStyle&&x.to==m&&(b||(b=[])).push(C.endStyle,x.to),C.title&&((f||(f={})).title=C.title),C.attributes)for(var S in C.attributes)(f||(f={}))[S]=C.attributes[S];C.collapsed&&(!h||Pt(h.marker,C)<0)&&(h=x)}else x.from>p&&m>x.from&&(m=x.from)}if(b)for(var L=0;L=d)break;for(var T=Math.min(d,m);;){if(v){var M=p+v.length;if(!h){var N=M>T?v.slice(0,T-p):v;t.addToken(t,N,l?l+a:a,c,p+N.length==m?u:"",s,f)}if(M>=T){v=v.slice(T-p),p=T;break}p=M,c=""}v=i.slice(o,o=r[g++]),l=Jt(r[g++],t.cm.options)}}else for(var O=1;Or)return{map:e.measure.maps[i],cache:e.measure.caches[i],before:!0}}}function Wr(e,t,r,n){return Pr(e,Fr(e,t),r,n)}function Hr(e,t){if(t>=e.display.viewFrom&&t=r.lineN&&t2&&o.push((a.bottom+u.top)/2-r.top)}}o.push(r.bottom-r.top)}}(e,t.view,t.rect),t.hasHeights=!0),o=function(e,t,r,n){var i,o=zr(t.map,r,n),a=o.node,u=o.start,c=o.end,h=o.collapse;if(3==a.nodeType){for(var f=0;f<4;f++){for(;u&&le(t.line.text.charAt(o.coverStart+u));)--u;for(;o.coverStart+c1}(e))return t;var r=screen.logicalXDPI/screen.deviceXDPI,n=screen.logicalYDPI/screen.deviceYDPI;return{left:t.left*r,right:t.right*r,top:t.top*n,bottom:t.bottom*n}}(e.display.measure,i))}else{var d;u>0&&(h=n="right"),i=e.options.lineWrapping&&(d=a.getClientRects()).length>1?d["right"==n?d.length-1:0]:a.getBoundingClientRect()}if(l&&s<9&&!u&&(!i||!i.left&&!i.right)){var p=a.parentNode.getClientRects()[0];i=p?{left:p.left,right:p.left+sn(e.display),top:p.top,bottom:p.bottom}:Ir}for(var g=i.top-t.rect.top,v=i.bottom-t.rect.top,m=(g+v)/2,y=t.view.measure.heights,b=0;bt)&&(i=(o=a-s)-1,t>=a&&(l="right")),null!=i){if(n=e[u+2],s==a&&r==(n.insertLeft?"left":"right")&&(l=r),"left"==r&&0==i)for(;u&&e[u-2]==e[u-3]&&e[u-1].insertLeft;)n=e[2+(u-=3)],l="left";if("right"==r&&i==a-s)for(;u=0&&(r=e[i]).left==r.right;i--);return r}function Br(e){if(e.measure&&(e.measure.cache={},e.measure.heights=null,e.rest))for(var t=0;t=n.text.length?(a=n.text.length,u="before"):a<=0&&(a=0,u="after"),!s)return l("before"==u?a-1:a,"before"==u);function c(e,t,r){return l(r?e-1:e,1==s[t].level!=r)}var h=ce(s,a,u),f=ue,d=c(a,h,"before"==u);return null!=f&&(d.other=c(a,f,"before"!=u)),d}function qr(e,t){var r=0;t=ct(e.doc,t),e.options.lineWrapping||(r=sn(e.display)*t.ch);var n=_e(e.doc,t.line),i=Xt(n)+kr(e.display);return{left:r,right:r,top:i,bottom:i+n.height}}function Zr(e,t,r,n,i){var o=nt(e,t,r);return o.xRel=i,n&&(o.outside=n),o}function Qr(e,t,r){var n=e.doc;if((r+=e.display.viewOffset)<0)return Zr(n.first,0,null,-1,-1);var i=et(n,r),o=n.first+n.size-1;if(i>o)return Zr(n.first+n.size-1,_e(n,o).text.length,null,1,1);t<0&&(t=0);for(var l=_e(n,i);;){var s=rn(e,l,i,t,r),a=Rt(l,s.ch+(s.xRel>0||s.outside>0?1:0));if(!a)return s;var u=a.find(1);if(u.line==i)return u;l=_e(n,i=u.line)}}function Jr(e,t,r,n){n-=jr(t);var i=t.text.length,o=ae((function(t){return Pr(e,r,t-1).bottom<=n}),i,0);return{begin:o,end:i=ae((function(t){return Pr(e,r,t).top>n}),o,i)}}function en(e,t,r,n){return r||(r=Fr(e,t)),Jr(e,t,r,Xr(e,t,Pr(e,r,n),"line").top)}function tn(e,t,r,n){return!(e.bottom<=r)&&(e.top>r||(n?e.left:e.right)>t)}function rn(e,t,r,n,i){i-=Xt(t);var o=Fr(e,t),l=jr(t),s=0,a=t.text.length,u=!0,c=fe(t,e.doc.direction);if(c){var h=(e.options.lineWrapping?on:nn)(e,t,r,o,c,n,i);s=(u=1!=h.level)?h.from:h.to-1,a=u?h.to:h.from-1}var f,d,p=null,g=null,v=ae((function(t){var r=Pr(e,o,t);return r.top+=l,r.bottom+=l,!!tn(r,n,i,!1)&&(r.top<=i&&r.left<=n&&(p=t,g=r),!0)}),s,a),m=!1;if(g){var y=n-g.left=w.bottom?1:0}return Zr(r,v=se(t.text,v,1),d,m,n-f)}function nn(e,t,r,n,i,o,l){var s=ae((function(s){var a=i[s],u=1!=a.level;return tn(_r(e,nt(r,u?a.to:a.from,u?"before":"after"),"line",t,n),o,l,!0)}),0,i.length-1),a=i[s];if(s>0){var u=1!=a.level,c=_r(e,nt(r,u?a.from:a.to,u?"after":"before"),"line",t,n);tn(c,o,l,!0)&&c.top>l&&(a=i[s-1])}return a}function on(e,t,r,n,i,o,l){var s=Jr(e,t,n,l),a=s.begin,u=s.end;/\s/.test(t.text.charAt(u-1))&&u--;for(var c=null,h=null,f=0;f=u||d.to<=a)){var p=Pr(e,n,1!=d.level?Math.min(u,d.to)-1:Math.max(a,d.from)).right,g=pg)&&(c=d,h=g)}}return c||(c=i[i.length-1]),c.fromu&&(c={from:c.from,to:u,level:c.level}),c}function ln(e){if(null!=e.cachedTextHeight)return e.cachedTextHeight;if(null==Er){Er=A("pre",null,"CodeMirror-line-like");for(var t=0;t<49;++t)Er.appendChild(document.createTextNode("x")),Er.appendChild(A("br"));Er.appendChild(document.createTextNode("x"))}O(e.measure,Er);var r=Er.offsetHeight/50;return r>3&&(e.cachedTextHeight=r),N(e.measure),r||1}function sn(e){if(null!=e.cachedCharWidth)return e.cachedCharWidth;var t=A("span","xxxxxxxxxx"),r=A("pre",[t],"CodeMirror-line-like");O(e.measure,r);var n=t.getBoundingClientRect(),i=(n.right-n.left)/10;return i>2&&(e.cachedCharWidth=i),i||10}function an(e){for(var t=e.display,r={},n={},i=t.gutters.clientLeft,o=t.gutters.firstChild,l=0;o;o=o.nextSibling,++l){var s=e.display.gutterSpecs[l].className;r[s]=o.offsetLeft+o.clientLeft+i,n[s]=o.clientWidth}return{fixedPos:un(t),gutterTotalWidth:t.gutters.offsetWidth,gutterLeft:r,gutterWidth:n,wrapperWidth:t.wrapper.clientWidth}}function un(e){return e.scroller.getBoundingClientRect().left-e.sizer.getBoundingClientRect().left}function cn(e){var t=ln(e.display),r=e.options.lineWrapping,n=r&&Math.max(5,e.display.scroller.clientWidth/sn(e.display)-3);return function(i){if(Kt(e.doc,i))return 0;var o=0;if(i.widgets)for(var l=0;l0&&(a=_e(e.doc,u.line).text).length==u.ch){var c=G(a,a.length,e.options.tabSize)-a.length;u=nt(u.line,Math.max(0,Math.round((o-Mr(e.display).left)/sn(e.display))-c))}return u}function dn(e,t){if(t>=e.display.viewTo)return null;if((t-=e.display.viewFrom)<0)return null;for(var r=e.display.view,n=0;nt)&&(i.updateLineNumbers=t),e.curOp.viewChanged=!0,t>=i.viewTo)kt&&Ut(e.doc,t)i.viewFrom?vn(e):(i.viewFrom+=n,i.viewTo+=n);else if(t<=i.viewFrom&&r>=i.viewTo)vn(e);else if(t<=i.viewFrom){var o=mn(e,r,r+n,1);o?(i.view=i.view.slice(o.index),i.viewFrom=o.lineN,i.viewTo+=n):vn(e)}else if(r>=i.viewTo){var l=mn(e,t,t,-1);l?(i.view=i.view.slice(0,l.index),i.viewTo=l.lineN):vn(e)}else{var s=mn(e,t,t,-1),a=mn(e,r,r+n,1);s&&a?(i.view=i.view.slice(0,s.index).concat(sr(e,s.lineN,a.lineN)).concat(i.view.slice(a.index)),i.viewTo+=n):vn(e)}var u=i.externalMeasured;u&&(r=i.lineN&&t=n.viewTo)){var o=n.view[dn(e,t)];if(null!=o.node){var l=o.changes||(o.changes=[]);-1==V(l,r)&&l.push(r)}}}function vn(e){e.display.viewFrom=e.display.viewTo=e.doc.first,e.display.view=[],e.display.viewOffset=0}function mn(e,t,r,n){var i,o=dn(e,t),l=e.display.view;if(!kt||r==e.doc.first+e.doc.size)return{index:o,lineN:r};for(var s=e.display.viewFrom,a=0;a0){if(o==l.length-1)return null;i=s+l[o].size-t,o++}else i=s-t;t+=i,r+=i}for(;Ut(e.doc,r)!=r;){if(o==(n<0?0:l.length-1))return null;r+=n*l[o-(n<0?1:0)].size,o+=n}return{index:o,lineN:r}}function yn(e){for(var t=e.display.view,r=0,n=0;n=e.display.viewTo||a.to().line0?l:e.defaultCharWidth())+"px"}if(n.other){var s=r.appendChild(A("div"," ","CodeMirror-cursor CodeMirror-secondarycursor"));s.style.display="",s.style.left=n.other.left+"px",s.style.top=n.other.top+"px",s.style.height=.85*(n.other.bottom-n.other.top)+"px"}}function Cn(e,t){return e.top-t.top||e.left-t.left}function Sn(e,t,r){var n=e.display,i=e.doc,o=document.createDocumentFragment(),l=Mr(e.display),s=l.left,a=Math.max(n.sizerWidth,Or(e)-n.sizer.offsetLeft)-l.right,u="ltr"==i.direction;function c(e,t,r,n){t<0&&(t=0),t=Math.round(t),n=Math.round(n),o.appendChild(A("div",null,"CodeMirror-selected","position: absolute; left: "+e+"px;\n top: "+t+"px; width: "+(null==r?a-e:r)+"px;\n height: "+(n-t)+"px"))}function h(t,r,n){var o,l,h=_e(i,t),f=h.text.length;function d(r,n){return $r(e,nt(t,r),"div",h,n)}function p(t,r,n){var i=en(e,h,null,t),o="ltr"==r==("after"==n)?"left":"right";return d("after"==n?i.begin:i.end-(/\s/.test(h.text.charAt(i.end-1))?2:1),o)[o]}var g=fe(h,i.direction);return function(e,t,r,n){if(!e)return n(t,r,"ltr",0);for(var i=!1,o=0;ot||t==r&&l.to==t)&&(n(Math.max(l.from,t),Math.min(l.to,r),1==l.level?"rtl":"ltr",o),i=!0)}i||n(t,r,"ltr")}(g,r||0,null==n?f:n,(function(e,t,i,h){var v="ltr"==i,m=d(e,v?"left":"right"),y=d(t-1,v?"right":"left"),b=null==r&&0==e,w=null==n&&t==f,x=0==h,C=!g||h==g.length-1;if(y.top-m.top<=3){var S=(u?w:b)&&C,L=(u?b:w)&&x?s:(v?m:y).left,k=S?a:(v?y:m).right;c(L,m.top,k-L,m.bottom)}else{var T,M,N,O;v?(T=u&&b&&x?s:m.left,M=u?a:p(e,i,"before"),N=u?s:p(t,i,"after"),O=u&&w&&C?a:y.right):(T=u?p(e,i,"before"):s,M=!u&&b&&x?a:m.right,N=!u&&w&&C?s:y.left,O=u?p(t,i,"after"):a),c(T,m.top,M-T,m.bottom),m.bottom0?t.blinker=setInterval((function(){e.hasFocus()||Nn(e),t.cursorDiv.style.visibility=(r=!r)?"":"hidden"}),e.options.cursorBlinkRate):e.options.cursorBlinkRate<0&&(t.cursorDiv.style.visibility="hidden")}}function kn(e){e.hasFocus()||(e.display.input.focus(),e.state.focused||Mn(e))}function Tn(e){e.state.delayingBlurEvent=!0,setTimeout((function(){e.state.delayingBlurEvent&&(e.state.delayingBlurEvent=!1,e.state.focused&&Nn(e))}),100)}function Mn(e,t){e.state.delayingBlurEvent&&!e.state.draggingText&&(e.state.delayingBlurEvent=!1),"nocursor"!=e.options.readOnly&&(e.state.focused||(me(e,"focus",e,t),e.state.focused=!0,F(e.display.wrapper,"CodeMirror-focused"),e.curOp||e.display.selForContextMenu==e.doc.sel||(e.display.input.reset(),a&&setTimeout((function(){return e.display.input.reset(!0)}),20)),e.display.input.receivedFocus()),Ln(e))}function Nn(e,t){e.state.delayingBlurEvent||(e.state.focused&&(me(e,"blur",e,t),e.state.focused=!1,M(e.display.wrapper,"CodeMirror-focused")),clearInterval(e.display.blinker),setTimeout((function(){e.state.focused||(e.display.shift=!1)}),150))}function On(e){for(var t=e.display,r=t.lineDiv.offsetTop,n=Math.max(0,t.scroller.getBoundingClientRect().top),i=t.lineDiv.getBoundingClientRect().top,o=0,a=0;a.005||g<-.005)&&(ie.display.sizerWidth){var m=Math.ceil(f/sn(e.display));m>e.display.maxLineLength&&(e.display.maxLineLength=m,e.display.maxLine=u.line,e.display.maxLineChanged=!0)}}}Math.abs(o)>2&&(t.scroller.scrollTop+=o)}function An(e){if(e.widgets)for(var t=0;t=l&&(o=et(t,Xt(_e(t,a))-e.wrapper.clientHeight),l=a)}return{from:o,to:Math.max(l,o+1)}}function Wn(e,t){var r=e.display,n=ln(e.display);t.top<0&&(t.top=0);var i=e.curOp&&null!=e.curOp.scrollTop?e.curOp.scrollTop:r.scroller.scrollTop,o=Ar(e),l={};t.bottom-t.top>o&&(t.bottom=t.top+o);var s=e.doc.height+Tr(r),a=t.tops-n;if(t.topi+o){var c=Math.min(t.top,(u?s:t.bottom)-o);c!=i&&(l.scrollTop=c)}var h=e.options.fixedGutter?0:r.gutters.offsetWidth,f=e.curOp&&null!=e.curOp.scrollLeft?e.curOp.scrollLeft:r.scroller.scrollLeft-h,d=Or(e)-r.gutters.offsetWidth,p=t.right-t.left>d;return p&&(t.right=t.left+d),t.left<10?l.scrollLeft=0:t.leftd+f-3&&(l.scrollLeft=t.right+(p?0:10)-d),l}function Hn(e,t){null!=t&&(En(e),e.curOp.scrollTop=(null==e.curOp.scrollTop?e.doc.scrollTop:e.curOp.scrollTop)+t)}function Fn(e){En(e);var t=e.getCursor();e.curOp.scrollToPos={from:t,to:t,margin:e.options.cursorScrollMargin}}function Pn(e,t,r){null==t&&null==r||En(e),null!=t&&(e.curOp.scrollLeft=t),null!=r&&(e.curOp.scrollTop=r)}function En(e){var t=e.curOp.scrollToPos;t&&(e.curOp.scrollToPos=null,In(e,qr(e,t.from),qr(e,t.to),t.margin))}function In(e,t,r,n){var i=Wn(e,{left:Math.min(t.left,r.left),top:Math.min(t.top,r.top)-n,right:Math.max(t.right,r.right),bottom:Math.max(t.bottom,r.bottom)+n});Pn(e,i.scrollLeft,i.scrollTop)}function zn(e,t){Math.abs(e.doc.scrollTop-t)<2||(r||fi(e,{top:t}),Rn(e,t,!0),r&&fi(e),li(e,100))}function Rn(e,t,r){t=Math.max(0,Math.min(e.display.scroller.scrollHeight-e.display.scroller.clientHeight,t)),(e.display.scroller.scrollTop!=t||r)&&(e.doc.scrollTop=t,e.display.scrollbars.setScrollTop(t),e.display.scroller.scrollTop!=t&&(e.display.scroller.scrollTop=t))}function Bn(e,t,r,n){t=Math.max(0,Math.min(t,e.display.scroller.scrollWidth-e.display.scroller.clientWidth)),(r?t==e.doc.scrollLeft:Math.abs(e.doc.scrollLeft-t)<2)&&!n||(e.doc.scrollLeft=t,gi(e),e.display.scroller.scrollLeft!=t&&(e.display.scroller.scrollLeft=t),e.display.scrollbars.setScrollLeft(t))}function Gn(e){var t=e.display,r=t.gutters.offsetWidth,n=Math.round(e.doc.height+Tr(e.display));return{clientHeight:t.scroller.clientHeight,viewHeight:t.wrapper.clientHeight,scrollWidth:t.scroller.scrollWidth,clientWidth:t.scroller.clientWidth,viewWidth:t.wrapper.clientWidth,barLeft:e.options.fixedGutter?r:0,docHeight:n,scrollHeight:n+Nr(e)+t.barHeight,nativeBarWidth:t.nativeBarWidth,gutterWidth:r}}var Un=function(e,t,r){this.cm=r;var n=this.vert=A("div",[A("div",null,null,"min-width: 1px")],"CodeMirror-vscrollbar"),i=this.horiz=A("div",[A("div",null,null,"height: 100%; min-height: 1px")],"CodeMirror-hscrollbar");n.tabIndex=i.tabIndex=-1,e(n),e(i),pe(n,"scroll",(function(){n.clientHeight&&t(n.scrollTop,"vertical")})),pe(i,"scroll",(function(){i.clientWidth&&t(i.scrollLeft,"horizontal")})),this.checkedZeroWidth=!1,l&&s<8&&(this.horiz.style.minHeight=this.vert.style.minWidth="18px")};Un.prototype.update=function(e){var t=e.scrollWidth>e.clientWidth+1,r=e.scrollHeight>e.clientHeight+1,n=e.nativeBarWidth;if(r){this.vert.style.display="block",this.vert.style.bottom=t?n+"px":"0";var i=e.viewHeight-(t?n:0);this.vert.firstChild.style.height=Math.max(0,e.scrollHeight-e.clientHeight+i)+"px"}else this.vert.scrollTop=0,this.vert.style.display="",this.vert.firstChild.style.height="0";if(t){this.horiz.style.display="block",this.horiz.style.right=r?n+"px":"0",this.horiz.style.left=e.barLeft+"px";var o=e.viewWidth-e.barLeft-(r?n:0);this.horiz.firstChild.style.width=Math.max(0,e.scrollWidth-e.clientWidth+o)+"px"}else this.horiz.style.display="",this.horiz.firstChild.style.width="0";return!this.checkedZeroWidth&&e.clientHeight>0&&(0==n&&this.zeroWidthHack(),this.checkedZeroWidth=!0),{right:r?n:0,bottom:t?n:0}},Un.prototype.setScrollLeft=function(e){this.horiz.scrollLeft!=e&&(this.horiz.scrollLeft=e),this.disableHoriz&&this.enableZeroWidthBar(this.horiz,this.disableHoriz,"horiz")},Un.prototype.setScrollTop=function(e){this.vert.scrollTop!=e&&(this.vert.scrollTop=e),this.disableVert&&this.enableZeroWidthBar(this.vert,this.disableVert,"vert")},Un.prototype.zeroWidthHack=function(){var e=b&&!p?"12px":"18px";this.horiz.style.height=this.vert.style.width=e,this.horiz.style.visibility=this.vert.style.visibility="hidden",this.disableHoriz=new U,this.disableVert=new U},Un.prototype.enableZeroWidthBar=function(e,t,r){e.style.visibility="",t.set(1e3,(function n(){var i=e.getBoundingClientRect();("vert"==r?document.elementFromPoint(i.right-1,(i.top+i.bottom)/2):document.elementFromPoint((i.right+i.left)/2,i.bottom-1))!=e?e.style.visibility="hidden":t.set(1e3,n)}))},Un.prototype.clear=function(){var e=this.horiz.parentNode;e.removeChild(this.horiz),e.removeChild(this.vert)};var Vn=function(){};function Kn(e,t){t||(t=Gn(e));var r=e.display.barWidth,n=e.display.barHeight;jn(e,t);for(var i=0;i<4&&r!=e.display.barWidth||n!=e.display.barHeight;i++)r!=e.display.barWidth&&e.options.lineWrapping&&On(e),jn(e,Gn(e)),r=e.display.barWidth,n=e.display.barHeight}function jn(e,t){var r=e.display,n=r.scrollbars.update(t);r.sizer.style.paddingRight=(r.barWidth=n.right)+"px",r.sizer.style.paddingBottom=(r.barHeight=n.bottom)+"px",r.heightForcer.style.borderBottom=n.bottom+"px solid transparent",n.right&&n.bottom?(r.scrollbarFiller.style.display="block",r.scrollbarFiller.style.height=n.bottom+"px",r.scrollbarFiller.style.width=n.right+"px"):r.scrollbarFiller.style.display="",n.bottom&&e.options.coverGutterNextToScrollbar&&e.options.fixedGutter?(r.gutterFiller.style.display="block",r.gutterFiller.style.height=n.bottom+"px",r.gutterFiller.style.width=t.gutterWidth+"px"):r.gutterFiller.style.display=""}Vn.prototype.update=function(){return{bottom:0,right:0}},Vn.prototype.setScrollLeft=function(){},Vn.prototype.setScrollTop=function(){},Vn.prototype.clear=function(){};var Xn={native:Un,null:Vn};function Yn(e){e.display.scrollbars&&(e.display.scrollbars.clear(),e.display.scrollbars.addClass&&M(e.display.wrapper,e.display.scrollbars.addClass)),e.display.scrollbars=new Xn[e.options.scrollbarStyle]((function(t){e.display.wrapper.insertBefore(t,e.display.scrollbarFiller),pe(t,"mousedown",(function(){e.state.focused&&setTimeout((function(){return e.display.input.focus()}),0)})),t.setAttribute("cm-not-content","true")}),(function(t,r){"horizontal"==r?Bn(e,t):zn(e,t)}),e),e.display.scrollbars.addClass&&F(e.display.wrapper,e.display.scrollbars.addClass)}var $n=0;function _n(e){var t;e.curOp={cm:e,viewChanged:!1,startHeight:e.doc.height,forceUpdate:!1,updateInput:0,typing:!1,changeObjs:null,cursorActivityHandlers:null,cursorActivityCalled:0,selectionChanged:!1,updateMaxLine:!1,scrollLeft:null,scrollTop:null,scrollToPos:null,focus:!1,id:++$n,markArrays:null},t=e.curOp,ar?ar.ops.push(t):t.ownsGroup=ar={ops:[t],delayedCallbacks:[]}}function qn(e){var t=e.curOp;t&&function(e,t){var r=e.ownsGroup;if(r)try{!function(e){var t=e.delayedCallbacks,r=0;do{for(;r=r.viewTo)||r.maxLineChanged&&t.options.lineWrapping,e.update=e.mustUpdate&&new ai(t,e.mustUpdate&&{top:e.scrollTop,ensure:e.scrollToPos},e.forceUpdate)}function Qn(e){e.updatedDisplay=e.mustUpdate&&ci(e.cm,e.update)}function Jn(e){var t=e.cm,r=t.display;e.updatedDisplay&&On(t),e.barMeasure=Gn(t),r.maxLineChanged&&!t.options.lineWrapping&&(e.adjustWidthTo=Wr(t,r.maxLine,r.maxLine.text.length).left+3,t.display.sizerWidth=e.adjustWidthTo,e.barMeasure.scrollWidth=Math.max(r.scroller.clientWidth,r.sizer.offsetLeft+e.adjustWidthTo+Nr(t)+t.display.barWidth),e.maxScrollLeft=Math.max(0,r.sizer.offsetLeft+e.adjustWidthTo-Or(t))),(e.updatedDisplay||e.selectionChanged)&&(e.preparedSelection=r.input.prepareSelection())}function ei(e){var t=e.cm;null!=e.adjustWidthTo&&(t.display.sizer.style.minWidth=e.adjustWidthTo+"px",e.maxScrollLeft1&&(l=!0)),null!=u.scrollLeft&&(Bn(e,u.scrollLeft),Math.abs(e.doc.scrollLeft-h)>1&&(l=!0)),!l)break}return i}(t,ct(n,e.scrollToPos.from),ct(n,e.scrollToPos.to),e.scrollToPos.margin);!function(e,t){if(!ye(e,"scrollCursorIntoView")){var r=e.display,n=r.sizer.getBoundingClientRect(),i=null,o=r.wrapper.ownerDocument;if(t.top+n.top<0?i=!0:t.bottom+n.top>(o.defaultView.innerHeight||o.documentElement.clientHeight)&&(i=!1),null!=i&&!g){var l=A("div","​",null,"position: absolute;\n top: "+(t.top-r.viewOffset-kr(e.display))+"px;\n height: "+(t.bottom-t.top+Nr(e)+r.barHeight)+"px;\n left: "+t.left+"px; width: "+Math.max(2,t.right-t.left)+"px;");e.display.lineSpace.appendChild(l),l.scrollIntoView(i),e.display.lineSpace.removeChild(l)}}}(t,i)}var o=e.maybeHiddenMarkers,l=e.maybeUnhiddenMarkers;if(o)for(var s=0;s=e.display.viewTo)){var r=+new Date+e.options.workTime,n=vt(e,t.highlightFrontier),i=[];t.iter(n.line,Math.min(t.first+t.size,e.display.viewTo+500),(function(o){if(n.line>=e.display.viewFrom){var l=o.styles,s=o.text.length>e.options.maxHighlightLength?je(t.mode,n.state):null,a=pt(e,o,n,!0);s&&(n.state=s),o.styles=a.styles;var u=o.styleClasses,c=a.classes;c?o.styleClasses=c:u&&(o.styleClasses=null);for(var h=!l||l.length!=o.styles.length||u!=c&&(!u||!c||u.bgClass!=c.bgClass||u.textClass!=c.textClass),f=0;!h&&fr)return li(e,e.options.workDelay),!0})),t.highlightFrontier=n.line,t.modeFrontier=Math.max(t.modeFrontier,n.line),i.length&&ri(e,(function(){for(var t=0;t=r.viewFrom&&t.visible.to<=r.viewTo&&(null==r.updateLineNumbers||r.updateLineNumbers>=r.viewTo)&&r.renderedView==r.view&&0==yn(e))return!1;vi(e)&&(vn(e),t.dims=an(e));var i=n.first+n.size,o=Math.max(t.visible.from-e.options.viewportMargin,n.first),l=Math.min(i,t.visible.to+e.options.viewportMargin);r.viewFroml&&r.viewTo-l<20&&(l=Math.min(i,r.viewTo)),kt&&(o=Ut(e.doc,o),l=Vt(e.doc,l));var s=o!=r.viewFrom||l!=r.viewTo||r.lastWrapHeight!=t.wrapperHeight||r.lastWrapWidth!=t.wrapperWidth;!function(e,t,r){var n=e.display;0==n.view.length||t>=n.viewTo||r<=n.viewFrom?(n.view=sr(e,t,r),n.viewFrom=t):(n.viewFrom>t?n.view=sr(e,t,n.viewFrom).concat(n.view):n.viewFromr&&(n.view=n.view.slice(0,dn(e,r)))),n.viewTo=r}(e,o,l),r.viewOffset=Xt(_e(e.doc,r.viewFrom)),e.display.mover.style.top=r.viewOffset+"px";var u=yn(e);if(!s&&0==u&&!t.force&&r.renderedView==r.view&&(null==r.updateLineNumbers||r.updateLineNumbers>=r.viewTo))return!1;var c=ui(e);return u>4&&(r.lineDiv.style.display="none"),function(e,t,r){var n=e.display,i=e.options.lineNumbers,o=n.lineDiv,l=o.firstChild;function s(t){var r=t.nextSibling;return a&&b&&e.display.currentWheelTarget==t?t.style.display="none":t.parentNode.removeChild(t),r}for(var u=n.view,c=n.viewFrom,h=0;h-1&&(d=!1),fr(e,f,c,r)),d&&(N(f.lineNumber),f.lineNumber.appendChild(document.createTextNode(rt(e.options,c)))),l=f.node.nextSibling}else{var p=br(e,f,c,r);o.insertBefore(p,l)}c+=f.size}for(;l;)l=s(l)}(e,r.updateLineNumbers,t.dims),u>4&&(r.lineDiv.style.display=""),r.renderedView=r.view,function(e){if(e&&e.activeElt&&e.activeElt!=H(e.activeElt.ownerDocument)&&(e.activeElt.focus(),!/^(INPUT|TEXTAREA)$/.test(e.activeElt.nodeName)&&e.anchorNode&&W(document.body,e.anchorNode)&&W(document.body,e.focusNode))){var t=e.activeElt.ownerDocument,r=t.defaultView.getSelection(),n=t.createRange();n.setEnd(e.anchorNode,e.anchorOffset),n.collapse(!1),r.removeAllRanges(),r.addRange(n),r.extend(e.focusNode,e.focusOffset)}}(c),N(r.cursorDiv),N(r.selectionDiv),r.gutters.style.height=r.sizer.style.minHeight=0,s&&(r.lastWrapHeight=t.wrapperHeight,r.lastWrapWidth=t.wrapperWidth,li(e,400)),r.updateLineNumbers=null,!0}function hi(e,t){for(var r=t.viewport,n=!0;;n=!1){if(n&&e.options.lineWrapping&&t.oldDisplayWidth!=Or(e))n&&(t.visible=Dn(e.display,e.doc,r));else if(r&&null!=r.top&&(r={top:Math.min(e.doc.height+Tr(e.display)-Ar(e),r.top)}),t.visible=Dn(e.display,e.doc,r),t.visible.from>=e.display.viewFrom&&t.visible.to<=e.display.viewTo)break;if(!ci(e,t))break;On(e);var i=Gn(e);bn(e),Kn(e,i),pi(e,i),t.force=!1}t.signal(e,"update",e),e.display.viewFrom==e.display.reportedViewFrom&&e.display.viewTo==e.display.reportedViewTo||(t.signal(e,"viewportChange",e,e.display.viewFrom,e.display.viewTo),e.display.reportedViewFrom=e.display.viewFrom,e.display.reportedViewTo=e.display.viewTo)}function fi(e,t){var r=new ai(e,t);if(ci(e,r)){On(e),hi(e,r);var n=Gn(e);bn(e),Kn(e,n),pi(e,n),r.finish()}}function di(e){var t=e.gutters.offsetWidth;e.sizer.style.marginLeft=t+"px",cr(e,"gutterChanged",e)}function pi(e,t){e.display.sizer.style.minHeight=t.docHeight+"px",e.display.heightForcer.style.top=t.docHeight+"px",e.display.gutters.style.height=t.docHeight+e.display.barHeight+Nr(e)+"px"}function gi(e){var t=e.display,r=t.view;if(t.alignWidgets||t.gutters.firstChild&&e.options.fixedGutter){for(var n=un(t)-t.scroller.scrollLeft+e.doc.scrollLeft,i=t.gutters.offsetWidth,o=n+"px",l=0;lu.clientWidth,p=u.scrollHeight>u.clientHeight;if(i&&d||o&&p){if(o&&b&&a)e:for(var g=t.target,v=s.view;g!=u;g=g.parentNode)for(var m=0;m=0&&it(e,n.to())<=0)return r}return-1};var Mi=function(e,t){this.anchor=e,this.head=t};function Ni(e,t,r){var n=e&&e.options.selectionsMayTouch,i=t[r];t.sort((function(e,t){return it(e.from(),t.from())})),r=V(t,i);for(var o=1;o0:a>=0){var u=at(s.from(),l.from()),c=st(s.to(),l.to()),h=s.empty()?l.from()==l.head:s.from()==s.head;o<=r&&--r,t.splice(--o,2,new Mi(h?c:u,h?u:c))}}return new Ti(t,r)}function Oi(e,t){return new Ti([new Mi(e,t||e)],0)}function Ai(e){return e.text?nt(e.from.line+e.text.length-1,Z(e.text).length+(1==e.text.length?e.from.ch:0)):e.to}function Di(e,t){if(it(e,t.from)<0)return e;if(it(e,t.to)<=0)return Ai(t);var r=e.line+t.text.length-(t.to.line-t.from.line)-1,n=e.ch;return e.line==t.to.line&&(n+=Ai(t).ch-t.to.ch),nt(r,n)}function Wi(e,t){for(var r=[],n=0;n1&&e.remove(s.line+1,p-1),e.insert(s.line+1,m)}cr(e,"change",e,t)}function zi(e,t,r){!function e(n,i,o){if(n.linked)for(var l=0;ls-(e.cm?e.cm.options.historyEventDelay:500)||"*"==t.origin.charAt(0)))&&(o=function(e,t){return t?(Vi(e.done),Z(e.done)):e.done.length&&!Z(e.done).ranges?Z(e.done):e.done.length>1&&!e.done[e.done.length-2].ranges?(e.done.pop(),Z(e.done)):void 0}(i,i.lastOp==n)))l=Z(o.changes),0==it(t.from,t.to)&&0==it(t.from,l.to)?l.to=Ai(t):o.changes.push(Ui(e,t));else{var a=Z(i.done);for(a&&a.ranges||Xi(e.sel,i.done),o={changes:[Ui(e,t)],generation:i.generation},i.done.push(o);i.done.length>i.undoDepth;)i.done.shift(),i.done[0].ranges||i.done.shift()}i.done.push(r),i.generation=++i.maxGeneration,i.lastModTime=i.lastSelTime=s,i.lastOp=i.lastSelOp=n,i.lastOrigin=i.lastSelOrigin=t.origin,l||me(e,"historyAdded")}function ji(e,t,r,n){var i=e.history,o=n&&n.origin;r==i.lastSelOp||o&&i.lastSelOrigin==o&&(i.lastModTime==i.lastSelTime&&i.lastOrigin==o||function(e,t,r,n){var i=t.charAt(0);return"*"==i||"+"==i&&r.ranges.length==n.ranges.length&&r.somethingSelected()==n.somethingSelected()&&new Date-e.history.lastSelTime<=(e.cm?e.cm.options.historyEventDelay:500)}(e,o,Z(i.done),t))?i.done[i.done.length-1]=t:Xi(t,i.done),i.lastSelTime=+new Date,i.lastSelOrigin=o,i.lastSelOp=r,n&&!1!==n.clearRedo&&Vi(i.undone)}function Xi(e,t){var r=Z(t);r&&r.ranges&&r.equals(e)||t.push(e)}function Yi(e,t,r,n){var i=t["spans_"+e.id],o=0;e.iter(Math.max(e.first,r),Math.min(e.first+e.size,n),(function(r){r.markedSpans&&((i||(i=t["spans_"+e.id]={}))[o]=r.markedSpans),++o}))}function $i(e){if(!e)return null;for(var t,r=0;r-1&&(Z(s)[h]=u[h],delete u[h])}}}return n}function Zi(e,t,r,n){if(n){var i=e.anchor;if(r){var o=it(t,i)<0;o!=it(r,i)<0?(i=t,t=r):o!=it(t,r)<0&&(t=r)}return new Mi(i,t)}return new Mi(r||t,t)}function Qi(e,t,r,n,i){null==i&&(i=e.cm&&(e.cm.display.shift||e.extend)),no(e,new Ti([Zi(e.sel.primary(),t,r,i)],0),n)}function Ji(e,t,r){for(var n=[],i=e.cm&&(e.cm.display.shift||e.extend),o=0;o=t.ch:s.to>t.ch))){if(i&&(me(a,"beforeCursorEnter"),a.explicitlyCleared)){if(o.markedSpans){--l;continue}break}if(!a.atomic)continue;if(r){var h=a.find(n<0?1:-1),f=void 0;if((n<0?c:u)&&(h=co(e,h,-n,h&&h.line==t.line?o:null)),h&&h.line==t.line&&(f=it(h,r))&&(n<0?f<0:f>0))return ao(e,h,t,n,i)}var d=a.find(n<0?-1:1);return(n<0?u:c)&&(d=co(e,d,n,d.line==t.line?o:null)),d?ao(e,d,t,n,i):null}}return t}function uo(e,t,r,n,i){var o=n||1,l=ao(e,t,r,o,i)||!i&&ao(e,t,r,o,!0)||ao(e,t,r,-o,i)||!i&&ao(e,t,r,-o,!0);return l||(e.cantEdit=!0,nt(e.first,0))}function co(e,t,r,n){return r<0&&0==t.ch?t.line>e.first?ct(e,nt(t.line-1)):null:r>0&&t.ch==(n||_e(e,t.line)).text.length?t.line0)){var c=[a,1],h=it(u.from,s.from),f=it(u.to,s.to);(h<0||!l.inclusiveLeft&&!h)&&c.push({from:u.from,to:s.from}),(f>0||!l.inclusiveRight&&!f)&&c.push({from:s.to,to:u.to}),i.splice.apply(i,c),a+=c.length-3}}return i}(e,t.from,t.to);if(n)for(var i=n.length-1;i>=0;--i)go(e,{from:n[i].from,to:n[i].to,text:i?[""]:t.text,origin:t.origin});else go(e,t)}}function go(e,t){if(1!=t.text.length||""!=t.text[0]||0!=it(t.from,t.to)){var r=Wi(e,t);Ki(e,t,r,e.cm?e.cm.curOp.id:NaN),yo(e,t,r,Ot(e,t));var n=[];zi(e,(function(e,r){r||-1!=V(n,e.history)||(Co(e.history,t),n.push(e.history)),yo(e,t,null,Ot(e,t))}))}}function vo(e,t,r){var n=e.cm&&e.cm.state.suppressEdits;if(!n||r){for(var i,o=e.history,l=e.sel,s="undo"==t?o.done:o.undone,a="undo"==t?o.undone:o.done,u=0;u=0;--d){var p=f(d);if(p)return p.v}}}}function mo(e,t){if(0!=t&&(e.first+=t,e.sel=new Ti(Q(e.sel.ranges,(function(e){return new Mi(nt(e.anchor.line+t,e.anchor.ch),nt(e.head.line+t,e.head.ch))})),e.sel.primIndex),e.cm)){pn(e.cm,e.first,e.first-t,t);for(var r=e.cm.display,n=r.viewFrom;ne.lastLine())){if(t.from.lineo&&(t={from:t.from,to:nt(o,_e(e,o).text.length),text:[t.text[0]],origin:t.origin}),t.removed=qe(e,t.from,t.to),r||(r=Wi(e,t)),e.cm?function(e,t,r){var n=e.doc,i=e.display,o=t.from,l=t.to,s=!1,a=o.line;e.options.lineWrapping||(a=Je(Gt(_e(n,o.line))),n.iter(a,l.line+1,(function(e){if(e==i.maxLine)return s=!0,!0})));n.sel.contains(t.from,t.to)>-1&&be(e);Ii(n,t,r,cn(e)),e.options.lineWrapping||(n.iter(a,o.line+t.text.length,(function(e){var t=Yt(e);t>i.maxLineLength&&(i.maxLine=e,i.maxLineLength=t,i.maxLineChanged=!0,s=!1)})),s&&(e.curOp.updateMaxLine=!0));(function(e,t){if(e.modeFrontier=Math.min(e.modeFrontier,t),!(e.highlightFrontierr;n--){var i=_e(e,n).stateAfter;if(i&&(!(i instanceof ft)||n+i.lookAhead1||!(this.children[0]instanceof Lo))){var s=[];this.collapse(s),this.children=[new Lo(s)],this.children[0].parent=this}},collapse:function(e){for(var t=0;t50){for(var l=i.lines.length%25+25,s=l;s10);e.parent.maybeSpill()}},iterN:function(e,t,r){for(var n=0;n0||0==l&&!1!==o.clearWhenEmpty)return o;if(o.replacedWith&&(o.collapsed=!0,o.widgetNode=D("span",[o.replacedWith],"CodeMirror-widget"),n.handleMouseEvents||o.widgetNode.setAttribute("cm-ignore-events","true"),n.insertLeft&&(o.widgetNode.insertLeft=!0)),o.collapsed){if(Bt(e,t.line,t,r,o)||t.line!=r.line&&Bt(e,r.line,t,r,o))throw new Error("Inserting collapsed marker partially overlapping an existing one");kt=!0}o.addToHistory&&Ki(e,{from:t,to:r,origin:"markText"},e.sel,NaN);var s,a=t.line,u=e.cm;if(e.iter(a,r.line+1,(function(n){u&&o.collapsed&&!u.options.lineWrapping&&Gt(n)==u.display.maxLine&&(s=!0),o.collapsed&&a!=t.line&&Qe(n,0),function(e,t,r){var n=r&&window.WeakSet&&(r.markedSpans||(r.markedSpans=new WeakSet));n&&e.markedSpans&&n.has(e.markedSpans)?e.markedSpans.push(t):(e.markedSpans=e.markedSpans?e.markedSpans.concat([t]):[t],n&&n.add(e.markedSpans)),t.marker.attachLine(e)}(n,new Tt(o,a==t.line?t.ch:null,a==r.line?r.ch:null),e.cm&&e.cm.curOp),++a})),o.collapsed&&e.iter(t.line,r.line+1,(function(t){Kt(e,t)&&Qe(t,0)})),o.clearOnEnter&&pe(o,"beforeCursorEnter",(function(){return o.clear()})),o.readOnly&&(Lt=!0,(e.history.done.length||e.history.undone.length)&&e.clearHistory()),o.collapsed&&(o.id=++No,o.atomic=!0),u){if(s&&(u.curOp.updateMaxLine=!0),o.collapsed)pn(u,t.line,r.line+1);else if(o.className||o.startStyle||o.endStyle||o.css||o.attributes||o.title)for(var c=t.line;c<=r.line;c++)gn(u,c,"text");o.atomic&&lo(u.doc),cr(u,"markerAdded",u,o)}return o}Oo.prototype.clear=function(){if(!this.explicitlyCleared){var e=this.doc.cm,t=e&&!e.curOp;if(t&&_n(e),we(this,"clear")){var r=this.find();r&&cr(this,"clear",r.from,r.to)}for(var n=null,i=null,o=0;oe.display.maxLineLength&&(e.display.maxLine=u,e.display.maxLineLength=c,e.display.maxLineChanged=!0)}null!=n&&e&&this.collapsed&&pn(e,n,i+1),this.lines.length=0,this.explicitlyCleared=!0,this.atomic&&this.doc.cantEdit&&(this.doc.cantEdit=!1,e&&lo(e.doc)),e&&cr(e,"markerCleared",e,this,n,i),t&&qn(e),this.parent&&this.parent.clear()}},Oo.prototype.find=function(e,t){var r,n;null==e&&"bookmark"==this.type&&(e=1);for(var i=0;i=0;a--)po(this,n[a]);s?ro(this,s):this.cm&&Fn(this.cm)})),undo:oi((function(){vo(this,"undo")})),redo:oi((function(){vo(this,"redo")})),undoSelection:oi((function(){vo(this,"undo",!0)})),redoSelection:oi((function(){vo(this,"redo",!0)})),setExtending:function(e){this.extend=e},getExtending:function(){return this.extend},historySize:function(){for(var e=this.history,t=0,r=0,n=0;n=e.ch)&&t.push(i.marker.parent||i.marker)}return t},findMarks:function(e,t,r){e=ct(this,e),t=ct(this,t);var n=[],i=e.line;return this.iter(e.line,t.line+1,(function(o){var l=o.markedSpans;if(l)for(var s=0;s=a.to||null==a.from&&i!=e.line||null!=a.from&&i==t.line&&a.from>=t.ch||r&&!r(a.marker)||n.push(a.marker.parent||a.marker)}++i})),n},getAllMarks:function(){var e=[];return this.iter((function(t){var r=t.markedSpans;if(r)for(var n=0;ne)return t=e,!0;e-=o,++r})),ct(this,nt(r,t))},indexFromPos:function(e){var t=(e=ct(this,e)).ch;if(e.linet&&(t=e.from),null!=e.to&&e.to-1)return t.state.draggingText(e),void setTimeout((function(){return t.display.input.focus()}),20);try{var h=e.dataTransfer.getData("Text");if(h){var f;if(t.state.draggingText&&!t.state.draggingText.copy&&(f=t.listSelections()),io(t.doc,Oi(r,r)),f)for(var d=0;d=0;t--)bo(e.doc,"",n[t].from,n[t].to,"+delete");Fn(e)}))}function rl(e,t,r){var n=se(e.text,t+r,r);return n<0||n>e.text.length?null:n}function nl(e,t,r){var n=rl(e,t.ch,r);return null==n?null:new nt(t.line,n,r<0?"after":"before")}function il(e,t,r,n,i){if(e){"rtl"==t.doc.direction&&(i=-i);var o=fe(r,t.doc.direction);if(o){var l,s=i<0?Z(o):o[0],a=i<0==(1==s.level)?"after":"before";if(s.level>0||"rtl"==t.doc.direction){var u=Fr(t,r);l=i<0?r.text.length-1:0;var c=Pr(t,u,l).top;l=ae((function(e){return Pr(t,u,e).top==c}),i<0==(1==s.level)?s.from:s.to-1,l),"before"==a&&(l=rl(r,l,1))}else l=i<0?s.to:s.from;return new nt(n,l,a)}}return new nt(n,i<0?r.text.length:0,i<0?"before":"after")}Yo.basic={Left:"goCharLeft",Right:"goCharRight",Up:"goLineUp",Down:"goLineDown",End:"goLineEnd",Home:"goLineStartSmart",PageUp:"goPageUp",PageDown:"goPageDown",Delete:"delCharAfter",Backspace:"delCharBefore","Shift-Backspace":"delCharBefore",Tab:"defaultTab","Shift-Tab":"indentAuto",Enter:"newlineAndIndent",Insert:"toggleOverwrite",Esc:"singleSelection"},Yo.pcDefault={"Ctrl-A":"selectAll","Ctrl-D":"deleteLine","Ctrl-Z":"undo","Shift-Ctrl-Z":"redo","Ctrl-Y":"redo","Ctrl-Home":"goDocStart","Ctrl-End":"goDocEnd","Ctrl-Up":"goLineUp","Ctrl-Down":"goLineDown","Ctrl-Left":"goGroupLeft","Ctrl-Right":"goGroupRight","Alt-Left":"goLineStart","Alt-Right":"goLineEnd","Ctrl-Backspace":"delGroupBefore","Ctrl-Delete":"delGroupAfter","Ctrl-S":"save","Ctrl-F":"find","Ctrl-G":"findNext","Shift-Ctrl-G":"findPrev","Shift-Ctrl-F":"replace","Shift-Ctrl-R":"replaceAll","Ctrl-[":"indentLess","Ctrl-]":"indentMore","Ctrl-U":"undoSelection","Shift-Ctrl-U":"redoSelection","Alt-U":"redoSelection",fallthrough:"basic"},Yo.emacsy={"Ctrl-F":"goCharRight","Ctrl-B":"goCharLeft","Ctrl-P":"goLineUp","Ctrl-N":"goLineDown","Ctrl-A":"goLineStart","Ctrl-E":"goLineEnd","Ctrl-V":"goPageDown","Shift-Ctrl-V":"goPageUp","Ctrl-D":"delCharAfter","Ctrl-H":"delCharBefore","Alt-Backspace":"delWordBefore","Ctrl-K":"killLine","Ctrl-T":"transposeChars","Ctrl-O":"openLine"},Yo.macDefault={"Cmd-A":"selectAll","Cmd-D":"deleteLine","Cmd-Z":"undo","Shift-Cmd-Z":"redo","Cmd-Y":"redo","Cmd-Home":"goDocStart","Cmd-Up":"goDocStart","Cmd-End":"goDocEnd","Cmd-Down":"goDocEnd","Alt-Left":"goGroupLeft","Alt-Right":"goGroupRight","Cmd-Left":"goLineLeft","Cmd-Right":"goLineRight","Alt-Backspace":"delGroupBefore","Ctrl-Alt-Backspace":"delGroupAfter","Alt-Delete":"delGroupAfter","Cmd-S":"save","Cmd-F":"find","Cmd-G":"findNext","Shift-Cmd-G":"findPrev","Cmd-Alt-F":"replace","Shift-Cmd-Alt-F":"replaceAll","Cmd-[":"indentLess","Cmd-]":"indentMore","Cmd-Backspace":"delWrappedLineLeft","Cmd-Delete":"delWrappedLineRight","Cmd-U":"undoSelection","Shift-Cmd-U":"redoSelection","Ctrl-Up":"goDocStart","Ctrl-Down":"goDocEnd",fallthrough:["basic","emacsy"]},Yo.default=b?Yo.macDefault:Yo.pcDefault;var ol={selectAll:ho,singleSelection:function(e){return e.setSelection(e.getCursor("anchor"),e.getCursor("head"),j)},killLine:function(e){return tl(e,(function(t){if(t.empty()){var r=_e(e.doc,t.head.line).text.length;return t.head.ch==r&&t.head.line0)i=new nt(i.line,i.ch+1),e.replaceRange(o.charAt(i.ch-1)+o.charAt(i.ch-2),nt(i.line,i.ch-2),i,"+transpose");else if(i.line>e.doc.first){var l=_e(e.doc,i.line-1).text;l&&(i=new nt(i.line,1),e.replaceRange(o.charAt(0)+e.doc.lineSeparator()+l.charAt(l.length-1),nt(i.line-1,l.length-1),i,"+transpose"))}r.push(new Mi(i,i))}e.setSelections(r)}))},newlineAndIndent:function(e){return ri(e,(function(){for(var t=e.listSelections(),r=t.length-1;r>=0;r--)e.replaceRange(e.doc.lineSeparator(),t[r].anchor,t[r].head,"+input");t=e.listSelections();for(var n=0;n-1&&(it((i=u.ranges[i]).from(),t)<0||t.xRel>0)&&(it(i.to(),t)>0||t.xRel<0)?function(e,t,r,n){var i=e.display,o=!1,u=ni(e,(function(t){a&&(i.scroller.draggable=!1),e.state.draggingText=!1,e.state.delayingBlurEvent&&(e.hasFocus()?e.state.delayingBlurEvent=!1:Tn(e)),ve(i.wrapper.ownerDocument,"mouseup",u),ve(i.wrapper.ownerDocument,"mousemove",c),ve(i.scroller,"dragstart",h),ve(i.scroller,"drop",u),o||(Ce(t),n.addNew||Qi(e.doc,r,null,null,n.extend),a&&!d||l&&9==s?setTimeout((function(){i.wrapper.ownerDocument.body.focus({preventScroll:!0}),i.input.focus()}),20):i.input.focus())})),c=function(e){o=o||Math.abs(t.clientX-e.clientX)+Math.abs(t.clientY-e.clientY)>=10},h=function(){return o=!0};a&&(i.scroller.draggable=!0);e.state.draggingText=u,u.copy=!n.moveOnDrag,pe(i.wrapper.ownerDocument,"mouseup",u),pe(i.wrapper.ownerDocument,"mousemove",c),pe(i.scroller,"dragstart",h),pe(i.scroller,"drop",u),e.state.delayingBlurEvent=!0,setTimeout((function(){return i.input.focus()}),20),i.scroller.dragDrop&&i.scroller.dragDrop()}(e,n,t,o):function(e,t,r,n){l&&Tn(e);var i=e.display,o=e.doc;Ce(t);var s,a,u=o.sel,c=u.ranges;n.addNew&&!n.extend?(a=o.sel.contains(r),s=a>-1?c[a]:new Mi(r,r)):(s=o.sel.primary(),a=o.sel.primIndex);if("rectangle"==n.unit)n.addNew||(s=new Mi(r,r)),r=fn(e,t,!0,!0),a=-1;else{var h=xl(e,r,n.unit);s=n.extend?Zi(s,h.anchor,h.head,n.extend):h}n.addNew?-1==a?(a=c.length,no(o,Ni(e,c.concat([s]),a),{scroll:!1,origin:"*mouse"})):c.length>1&&c[a].empty()&&"char"==n.unit&&!n.extend?(no(o,Ni(e,c.slice(0,a).concat(c.slice(a+1)),0),{scroll:!1,origin:"*mouse"}),u=o.sel):eo(o,a,s,X):(a=0,no(o,new Ti([s],0),X),u=o.sel);var f=r;function d(t){if(0!=it(f,t))if(f=t,"rectangle"==n.unit){for(var i=[],l=e.options.tabSize,c=G(_e(o,r.line).text,r.ch,l),h=G(_e(o,t.line).text,t.ch,l),d=Math.min(c,h),p=Math.max(c,h),g=Math.min(r.line,t.line),v=Math.min(e.lastLine(),Math.max(r.line,t.line));g<=v;g++){var m=_e(o,g).text,y=$(m,d,l);d==p?i.push(new Mi(nt(g,y),nt(g,y))):m.length>y&&i.push(new Mi(nt(g,y),nt(g,$(m,p,l))))}i.length||i.push(new Mi(r,r)),no(o,Ni(e,u.ranges.slice(0,a).concat(i),a),{origin:"*mouse",scroll:!1}),e.scrollIntoView(t)}else{var b,w=s,x=xl(e,t,n.unit),C=w.anchor;it(x.anchor,C)>0?(b=x.head,C=at(w.from(),x.anchor)):(b=x.anchor,C=st(w.to(),x.head));var S=u.ranges.slice(0);S[a]=function(e,t){var r=t.anchor,n=t.head,i=_e(e.doc,r.line);if(0==it(r,n)&&r.sticky==n.sticky)return t;var o=fe(i);if(!o)return t;var l=ce(o,r.ch,r.sticky),s=o[l];if(s.from!=r.ch&&s.to!=r.ch)return t;var a,u=l+(s.from==r.ch==(1!=s.level)?0:1);if(0==u||u==o.length)return t;if(n.line!=r.line)a=(n.line-r.line)*("ltr"==e.doc.direction?1:-1)>0;else{var c=ce(o,n.ch,n.sticky),h=c-l||(n.ch-r.ch)*(1==s.level?-1:1);a=c==u-1||c==u?h<0:h>0}var f=o[u+(a?-1:0)],d=a==(1==f.level),p=d?f.from:f.to,g=d?"after":"before";return r.ch==p&&r.sticky==g?t:new Mi(new nt(r.line,p,g),n)}(e,new Mi(ct(o,C),b)),no(o,Ni(e,S,a),X)}}var p=i.wrapper.getBoundingClientRect(),g=0;function v(t){var r=++g,l=fn(e,t,!0,"rectangle"==n.unit);if(l)if(0!=it(l,f)){e.curOp.focus=H(I(e)),d(l);var s=Dn(i,o);(l.line>=s.to||l.linep.bottom?20:0;a&&setTimeout(ni(e,(function(){g==r&&(i.scroller.scrollTop+=a,v(t))})),50)}}function m(t){e.state.selectingText=!1,g=1/0,t&&(Ce(t),i.input.focus()),ve(i.wrapper.ownerDocument,"mousemove",y),ve(i.wrapper.ownerDocument,"mouseup",b),o.history.lastSelOrigin=null}var y=ni(e,(function(e){0!==e.buttons&&Me(e)?v(e):m(e)})),b=ni(e,m);e.state.selectingText=b,pe(i.wrapper.ownerDocument,"mousemove",y),pe(i.wrapper.ownerDocument,"mouseup",b)}(e,n,t,o)}(t,n,o,e):Te(e)==r.scroller&&Ce(e):2==i?(n&&Qi(t.doc,n),setTimeout((function(){return r.input.focus()}),20)):3==i&&(L?t.display.input.onContextMenu(e):Tn(t)))}}function xl(e,t,r){if("char"==r)return new Mi(t,t);if("word"==r)return e.findWordAt(t);if("line"==r)return new Mi(nt(t.line,0),ct(e.doc,nt(t.line+1,0)));var n=r(e,t);return new Mi(n.from,n.to)}function Cl(e,t,r,n){var i,o;if(t.touches)i=t.touches[0].clientX,o=t.touches[0].clientY;else try{i=t.clientX,o=t.clientY}catch(e){return!1}if(i>=Math.floor(e.display.gutters.getBoundingClientRect().right))return!1;n&&Ce(t);var l=e.display,s=l.lineDiv.getBoundingClientRect();if(o>s.bottom||!we(e,r))return Le(t);o-=s.top-l.viewOffset;for(var a=0;a=i)return me(e,r,e,et(e.doc,o),e.display.gutterSpecs[a].className,t),Le(t)}}function Sl(e,t){return Cl(e,t,"gutterClick",!0)}function Ll(e,t){Lr(e.display,t)||function(e,t){if(!we(e,"gutterContextMenu"))return!1;return Cl(e,t,"gutterContextMenu",!1)}(e,t)||ye(e,t,"contextmenu")||L||e.display.input.onContextMenu(t)}function kl(e){e.display.wrapper.className=e.display.wrapper.className.replace(/\s*cm-s-\S+/g,"")+e.options.theme.replace(/(^|\s)\s*/g," cm-s-"),Ur(e)}bl.prototype.compare=function(e,t,r){return this.time+400>e&&0==it(t,this.pos)&&r==this.button};var Tl={toString:function(){return"CodeMirror.Init"}},Ml={},Nl={};function Ol(e,t,r){if(!t!=!(r&&r!=Tl)){var n=e.display.dragFunctions,i=t?pe:ve;i(e.display.scroller,"dragstart",n.start),i(e.display.scroller,"dragenter",n.enter),i(e.display.scroller,"dragover",n.over),i(e.display.scroller,"dragleave",n.leave),i(e.display.scroller,"drop",n.drop)}}function Al(e){e.options.lineWrapping?(F(e.display.wrapper,"CodeMirror-wrap"),e.display.sizer.style.minWidth="",e.display.sizerWidth=null):(M(e.display.wrapper,"CodeMirror-wrap"),$t(e)),hn(e),pn(e),Ur(e),setTimeout((function(){return Kn(e)}),100)}function Dl(e,t){var r=this;if(!(this instanceof Dl))return new Dl(e,t);this.options=t=t?B(t):{},B(Ml,t,!1);var n=t.value;"string"==typeof n?n=new Po(n,t.mode,null,t.lineSeparator,t.direction):t.mode&&(n.modeOption=t.mode),this.doc=n;var i=new Dl.inputStyles[t.inputStyle](this),o=this.display=new wi(e,n,i,t);for(var u in o.wrapper.CodeMirror=this,kl(this),t.lineWrapping&&(this.display.wrapper.className+=" CodeMirror-wrap"),Yn(this),this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:!1,delayingBlurEvent:!1,focused:!1,suppressEdits:!1,pasteIncoming:-1,cutIncoming:-1,selectingText:!1,draggingText:!1,highlight:new U,keySeq:null,specialChars:null},t.autofocus&&!y&&o.input.focus(),l&&s<11&&setTimeout((function(){return r.display.input.reset(!0)}),20),function(e){var t=e.display;pe(t.scroller,"mousedown",ni(e,wl)),pe(t.scroller,"dblclick",l&&s<11?ni(e,(function(t){if(!ye(e,t)){var r=fn(e,t);if(r&&!Sl(e,t)&&!Lr(e.display,t)){Ce(t);var n=e.findWordAt(r);Qi(e.doc,n.anchor,n.head)}}})):function(t){return ye(e,t)||Ce(t)});pe(t.scroller,"contextmenu",(function(t){return Ll(e,t)})),pe(t.input.getField(),"contextmenu",(function(r){t.scroller.contains(r.target)||Ll(e,r)}));var r,n={end:0};function i(){t.activeTouch&&(r=setTimeout((function(){return t.activeTouch=null}),1e3),(n=t.activeTouch).end=+new Date)}function o(e){if(1!=e.touches.length)return!1;var t=e.touches[0];return t.radiusX<=1&&t.radiusY<=1}function a(e,t){if(null==t.left)return!0;var r=t.left-e.left,n=t.top-e.top;return r*r+n*n>400}pe(t.scroller,"touchstart",(function(i){if(!ye(e,i)&&!o(i)&&!Sl(e,i)){t.input.ensurePolled(),clearTimeout(r);var l=+new Date;t.activeTouch={start:l,moved:!1,prev:l-n.end<=300?n:null},1==i.touches.length&&(t.activeTouch.left=i.touches[0].pageX,t.activeTouch.top=i.touches[0].pageY)}})),pe(t.scroller,"touchmove",(function(){t.activeTouch&&(t.activeTouch.moved=!0)})),pe(t.scroller,"touchend",(function(r){var n=t.activeTouch;if(n&&!Lr(t,r)&&null!=n.left&&!n.moved&&new Date-n.start<300){var o,l=e.coordsChar(t.activeTouch,"page");o=!n.prev||a(n,n.prev)?new Mi(l,l):!n.prev.prev||a(n,n.prev.prev)?e.findWordAt(l):new Mi(nt(l.line,0),ct(e.doc,nt(l.line+1,0))),e.setSelection(o.anchor,o.head),e.focus(),Ce(r)}i()})),pe(t.scroller,"touchcancel",i),pe(t.scroller,"scroll",(function(){t.scroller.clientHeight&&(zn(e,t.scroller.scrollTop),Bn(e,t.scroller.scrollLeft,!0),me(e,"scroll",e))})),pe(t.scroller,"mousewheel",(function(t){return ki(e,t)})),pe(t.scroller,"DOMMouseScroll",(function(t){return ki(e,t)})),pe(t.wrapper,"scroll",(function(){return t.wrapper.scrollTop=t.wrapper.scrollLeft=0})),t.dragFunctions={enter:function(t){ye(e,t)||ke(t)},over:function(t){ye(e,t)||(!function(e,t){var r=fn(e,t);if(r){var n=document.createDocumentFragment();xn(e,r,n),e.display.dragCursor||(e.display.dragCursor=A("div",null,"CodeMirror-cursors CodeMirror-dragcursors"),e.display.lineSpace.insertBefore(e.display.dragCursor,e.display.cursorDiv)),O(e.display.dragCursor,n)}}(e,t),ke(t))},start:function(t){return function(e,t){if(l&&(!e.state.draggingText||+new Date-Eo<100))ke(t);else if(!ye(e,t)&&!Lr(e.display,t)&&(t.dataTransfer.setData("Text",e.getSelection()),t.dataTransfer.effectAllowed="copyMove",t.dataTransfer.setDragImage&&!d)){var r=A("img",null,null,"position: fixed; left: 0; top: 0;");r.src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==",f&&(r.width=r.height=1,e.display.wrapper.appendChild(r),r._top=r.offsetTop),t.dataTransfer.setDragImage(r,0,0),f&&r.parentNode.removeChild(r)}}(e,t)},drop:ni(e,Io),leave:function(t){ye(e,t)||zo(e)}};var u=t.input.getField();pe(u,"keyup",(function(t){return gl.call(e,t)})),pe(u,"keydown",ni(e,pl)),pe(u,"keypress",ni(e,vl)),pe(u,"focus",(function(t){return Mn(e,t)})),pe(u,"blur",(function(t){return Nn(e,t)}))}(this),Go(),_n(this),this.curOp.forceUpdate=!0,Ri(this,n),t.autofocus&&!y||this.hasFocus()?setTimeout((function(){r.hasFocus()&&!r.state.focused&&Mn(r)}),20):Nn(this),Nl)Nl.hasOwnProperty(u)&&Nl[u](this,t[u],Tl);vi(this),t.finishInit&&t.finishInit(this);for(var c=0;c150)){if(!n)return;r="prev"}}else u=0,r="not";"prev"==r?u=t>o.first?G(_e(o,t-1).text,null,l):0:"add"==r?u=a+e.options.indentUnit:"subtract"==r?u=a-e.options.indentUnit:"number"==typeof r&&(u=a+r),u=Math.max(0,u);var h="",f=0;if(e.options.indentWithTabs)for(var d=Math.floor(u/l);d;--d)f+=l,h+="\t";if(fl,a=Fe(t),u=null;if(s&&n.ranges.length>1)if(Fl&&Fl.text.join("\n")==t){if(n.ranges.length%Fl.text.length==0){u=[];for(var c=0;c=0;f--){var d=n.ranges[f],p=d.from(),g=d.to();d.empty()&&(r&&r>0?p=nt(p.line,p.ch-r):e.state.overwrite&&!s?g=nt(g.line,Math.min(_e(o,g.line).text.length,g.ch+Z(a).length)):s&&Fl&&Fl.lineWise&&Fl.text.join("\n")==a.join("\n")&&(p=g=nt(p.line,0)));var v={from:p,to:g,text:u?u[f%u.length]:a,origin:i||(s?"paste":e.state.cutIncoming>l?"cut":"+input")};po(e.doc,v),cr(e,"inputRead",e,v)}t&&!s&&zl(e,t),Fn(e),e.curOp.updateInput<2&&(e.curOp.updateInput=h),e.curOp.typing=!0,e.state.pasteIncoming=e.state.cutIncoming=-1}function Il(e,t){var r=e.clipboardData&&e.clipboardData.getData("Text");if(r)return e.preventDefault(),t.isReadOnly()||t.options.disableInput||!t.hasFocus()||ri(t,(function(){return El(t,r,0,null,"paste")})),!0}function zl(e,t){if(e.options.electricChars&&e.options.smartIndent)for(var r=e.doc.sel,n=r.ranges.length-1;n>=0;n--){var i=r.ranges[n];if(!(i.head.ch>100||n&&r.ranges[n-1].head.line==i.head.line)){var o=e.getModeAt(i.head),l=!1;if(o.electricChars){for(var s=0;s-1){l=Hl(e,i.head.line,"smart");break}}else o.electricInput&&o.electricInput.test(_e(e.doc,i.head.line).text.slice(0,i.head.ch))&&(l=Hl(e,i.head.line,"smart"));l&&cr(e,"electricInput",e,i.head.line)}}}function Rl(e){for(var t=[],r=[],n=0;n0?0:-1));if(isNaN(c))l=null;else{var h=r>0?c>=55296&&c<56320:c>=56320&&c<57343;l=new nt(t.line,Math.max(0,Math.min(s.text.length,t.ch+r*(h?2:1))),-r)}}else l=i?function(e,t,r,n){var i=fe(t,e.doc.direction);if(!i)return nl(t,r,n);r.ch>=t.text.length?(r.ch=t.text.length,r.sticky="before"):r.ch<=0&&(r.ch=0,r.sticky="after");var o=ce(i,r.ch,r.sticky),l=i[o];if("ltr"==e.doc.direction&&l.level%2==0&&(n>0?l.to>r.ch:l.from=l.from&&f>=c.begin)){var d=h?"before":"after";return new nt(r.line,f,d)}}var p=function(e,t,n){for(var o=function(e,t){return t?new nt(r.line,a(e,1),"before"):new nt(r.line,e,"after")};e>=0&&e0==(1!=l.level),u=s?n.begin:a(n.end,-1);if(l.from<=u&&u0?c.end:a(c.begin,-1);return null==v||n>0&&v==t.text.length||!(g=p(n>0?0:i.length-1,n,u(v)))?null:g}(e.cm,s,t,r):nl(s,t,r);if(null==l){if(o||(u=t.line+a)=e.first+e.size||(t=new nt(u,t.ch,t.sticky),!(s=_e(e,u))))return!1;t=il(i,e.cm,s,t.line,a)}else t=l;return!0}if("char"==n||"codepoint"==n)u();else if("column"==n)u(!0);else if("word"==n||"group"==n)for(var c=null,h="group"==n,f=e.cm&&e.cm.getHelper(t,"wordChars"),d=!0;!(r<0)||u(!d);d=!1){var p=s.text.charAt(t.ch)||"\n",g=ne(p,f)?"w":h&&"\n"==p?"n":!h||/\s/.test(p)?null:"p";if(!h||d||g||(g="s"),c&&c!=g){r<0&&(r=1,u(),t.sticky="after");break}if(g&&(c=g),r>0&&!u(!d))break}var v=uo(e,t,o,l,!0);return ot(o,v)&&(v.hitSide=!0),v}function Vl(e,t,r,n){var i,o,l=e.doc,s=t.left;if("page"==n){var a=Math.min(e.display.wrapper.clientHeight,z(e).innerHeight||l(e).documentElement.clientHeight),u=Math.max(a-.5*ln(e.display),3);i=(r>0?t.bottom:t.top)+r*u}else"line"==n&&(i=r>0?t.bottom+3:t.top-3);for(;(o=Qr(e,s,i)).outside;){if(r<0?i<=0:i>=l.height){o.hitSide=!0;break}i+=5*r}return o}var Kl=function(e){this.cm=e,this.lastAnchorNode=this.lastAnchorOffset=this.lastFocusNode=this.lastFocusOffset=null,this.polling=new U,this.composing=null,this.gracePeriod=!1,this.readDOMTimeout=null};function jl(e,t){var r=Hr(e,t.line);if(!r||r.hidden)return null;var n=_e(e.doc,t.line),i=Dr(r,n,t.line),o=fe(n,e.doc.direction),l="left";o&&(l=ce(o,t.ch)%2?"right":"left");var s=zr(i.map,t.ch,l);return s.offset="right"==s.collapse?s.end:s.start,s}function Xl(e,t){return t&&(e.bad=!0),e}function Yl(e,t,r){var n;if(t==e.display.lineDiv){if(!(n=e.display.lineDiv.childNodes[r]))return Xl(e.clipPos(nt(e.display.viewTo-1)),!0);t=null,r=0}else for(n=t;;n=n.parentNode){if(!n||n==e.display.lineDiv)return null;if(n.parentNode&&n.parentNode==e.display.lineDiv)break}for(var i=0;i=t.display.viewTo||o.line=t.display.viewFrom&&jl(t,i)||{node:a[0].measure.map[2],offset:0},c=o.linen.firstLine()&&(l=nt(l.line-1,_e(n.doc,l.line-1).length)),s.ch==_e(n.doc,s.line).text.length&&s.linei.viewTo-1)return!1;l.line==i.viewFrom||0==(e=dn(n,l.line))?(t=Je(i.view[0].line),r=i.view[0].node):(t=Je(i.view[e].line),r=i.view[e-1].node.nextSibling);var a,u,c=dn(n,s.line);if(c==i.view.length-1?(a=i.viewTo-1,u=i.lineDiv.lastChild):(a=Je(i.view[c+1].line)-1,u=i.view[c+1].node.previousSibling),!r)return!1;for(var h=n.doc.splitLines(function(e,t,r,n,i){var o="",l=!1,s=e.doc.lineSeparator(),a=!1;function u(e){return function(t){return t.id==e}}function c(){l&&(o+=s,a&&(o+=s),l=a=!1)}function h(e){e&&(c(),o+=e)}function f(t){if(1==t.nodeType){var r=t.getAttribute("cm-text");if(r)return void h(r);var o,d=t.getAttribute("cm-marker");if(d){var p=e.findMarks(nt(n,0),nt(i+1,0),u(+d));return void(p.length&&(o=p[0].find(0))&&h(qe(e.doc,o.from,o.to).join(s)))}if("false"==t.getAttribute("contenteditable"))return;var g=/^(pre|div|p|li|table|br)$/i.test(t.nodeName);if(!/^br$/i.test(t.nodeName)&&0==t.textContent.length)return;g&&c();for(var v=0;v1&&f.length>1;)if(Z(h)==Z(f))h.pop(),f.pop(),a--;else{if(h[0]!=f[0])break;h.shift(),f.shift(),t++}for(var d=0,p=0,g=h[0],v=f[0],m=Math.min(g.length,v.length);dl.ch&&y.charCodeAt(y.length-p-1)==b.charCodeAt(b.length-p-1);)d--,p++;h[h.length-1]=y.slice(0,y.length-p).replace(/^\u200b+/,""),h[0]=h[0].slice(d).replace(/\u200b+$/,"");var x=nt(t,d),C=nt(a,f.length?Z(f).length-p:0);return h.length>1||h[0]||it(x,C)?(bo(n.doc,h,x,C,"+input"),!0):void 0},Kl.prototype.ensurePolled=function(){this.forceCompositionEnd()},Kl.prototype.reset=function(){this.forceCompositionEnd()},Kl.prototype.forceCompositionEnd=function(){this.composing&&(clearTimeout(this.readDOMTimeout),this.composing=null,this.updateFromDOM(),this.div.blur(),this.div.focus())},Kl.prototype.readFromDOMSoon=function(){var e=this;null==this.readDOMTimeout&&(this.readDOMTimeout=setTimeout((function(){if(e.readDOMTimeout=null,e.composing){if(!e.composing.done)return;e.composing=null}e.updateFromDOM()}),80))},Kl.prototype.updateFromDOM=function(){var e=this;!this.cm.isReadOnly()&&this.pollContent()||ri(this.cm,(function(){return pn(e.cm)}))},Kl.prototype.setUneditable=function(e){e.contentEditable="false"},Kl.prototype.onKeyPress=function(e){0==e.charCode||this.composing||(e.preventDefault(),this.cm.isReadOnly()||ni(this.cm,El)(this.cm,String.fromCharCode(null==e.charCode?e.keyCode:e.charCode),0))},Kl.prototype.readOnlyChanged=function(e){this.div.contentEditable=String("nocursor"!=e)},Kl.prototype.onContextMenu=function(){},Kl.prototype.resetPosition=function(){},Kl.prototype.needsContentAttribute=!0;var _l=function(e){this.cm=e,this.prevInput="",this.pollingFast=!1,this.polling=new U,this.hasSelection=!1,this.composing=null};_l.prototype.init=function(e){var t=this,r=this,n=this.cm;this.createField(e);var i=this.textarea;function o(e){if(!ye(n,e)){if(n.somethingSelected())Pl({lineWise:!1,text:n.getSelections()});else{if(!n.options.lineWiseCopyCut)return;var t=Rl(n);Pl({lineWise:!0,text:t.text}),"cut"==e.type?n.setSelections(t.ranges,null,j):(r.prevInput="",i.value=t.text.join("\n"),E(i))}"cut"==e.type&&(n.state.cutIncoming=+new Date)}}e.wrapper.insertBefore(this.wrapper,e.wrapper.firstChild),v&&(i.style.width="0px"),pe(i,"input",(function(){l&&s>=9&&t.hasSelection&&(t.hasSelection=null),r.poll()})),pe(i,"paste",(function(e){ye(n,e)||Il(e,n)||(n.state.pasteIncoming=+new Date,r.fastPoll())})),pe(i,"cut",o),pe(i,"copy",o),pe(e.scroller,"paste",(function(t){if(!Lr(e,t)&&!ye(n,t)){if(!i.dispatchEvent)return n.state.pasteIncoming=+new Date,void r.focus();var o=new Event("paste");o.clipboardData=t.clipboardData,i.dispatchEvent(o)}})),pe(e.lineSpace,"selectstart",(function(t){Lr(e,t)||Ce(t)})),pe(i,"compositionstart",(function(){var e=n.getCursor("from");r.composing&&r.composing.range.clear(),r.composing={start:e,range:n.markText(e,n.getCursor("to"),{className:"CodeMirror-composing"})}})),pe(i,"compositionend",(function(){r.composing&&(r.poll(),r.composing.range.clear(),r.composing=null)}))},_l.prototype.createField=function(e){this.wrapper=Gl(),this.textarea=this.wrapper.firstChild},_l.prototype.screenReaderLabelChanged=function(e){e?this.textarea.setAttribute("aria-label",e):this.textarea.removeAttribute("aria-label")},_l.prototype.prepareSelection=function(){var e=this.cm,t=e.display,r=e.doc,n=wn(e);if(e.options.moveInputWithCursor){var i=_r(e,r.sel.primary().head,"div"),o=t.wrapper.getBoundingClientRect(),l=t.lineDiv.getBoundingClientRect();n.teTop=Math.max(0,Math.min(t.wrapper.clientHeight-10,i.top+l.top-o.top)),n.teLeft=Math.max(0,Math.min(t.wrapper.clientWidth-10,i.left+l.left-o.left))}return n},_l.prototype.showSelection=function(e){var t=this.cm.display;O(t.cursorDiv,e.cursors),O(t.selectionDiv,e.selection),null!=e.teTop&&(this.wrapper.style.top=e.teTop+"px",this.wrapper.style.left=e.teLeft+"px")},_l.prototype.reset=function(e){if(!this.contextMenuPending&&!this.composing){var t=this.cm;if(t.somethingSelected()){this.prevInput="";var r=t.getSelection();this.textarea.value=r,t.state.focused&&E(this.textarea),l&&s>=9&&(this.hasSelection=r)}else e||(this.prevInput=this.textarea.value="",l&&s>=9&&(this.hasSelection=null))}},_l.prototype.getField=function(){return this.textarea},_l.prototype.supportsTouch=function(){return!1},_l.prototype.focus=function(){if("nocursor"!=this.cm.options.readOnly&&(!y||H(this.textarea.ownerDocument)!=this.textarea))try{this.textarea.focus()}catch(e){}},_l.prototype.blur=function(){this.textarea.blur()},_l.prototype.resetPosition=function(){this.wrapper.style.top=this.wrapper.style.left=0},_l.prototype.receivedFocus=function(){this.slowPoll()},_l.prototype.slowPoll=function(){var e=this;this.pollingFast||this.polling.set(this.cm.options.pollInterval,(function(){e.poll(),e.cm.state.focused&&e.slowPoll()}))},_l.prototype.fastPoll=function(){var e=!1,t=this;t.pollingFast=!0,t.polling.set(20,(function r(){t.poll()||e?(t.pollingFast=!1,t.slowPoll()):(e=!0,t.polling.set(60,r))}))},_l.prototype.poll=function(){var e=this,t=this.cm,r=this.textarea,n=this.prevInput;if(this.contextMenuPending||!t.state.focused||Pe(r)&&!n&&!this.composing||t.isReadOnly()||t.options.disableInput||t.state.keySeq)return!1;var i=r.value;if(i==n&&!t.somethingSelected())return!1;if(l&&s>=9&&this.hasSelection===i||b&&/[\uf700-\uf7ff]/.test(i))return t.display.input.reset(),!1;if(t.doc.sel==t.display.selForContextMenu){var o=i.charCodeAt(0);if(8203!=o||n||(n="​"),8666==o)return this.reset(),this.cm.execCommand("undo")}for(var a=0,u=Math.min(n.length,i.length);a1e3||i.indexOf("\n")>-1?r.value=e.prevInput="":e.prevInput=i,e.composing&&(e.composing.range.clear(),e.composing.range=t.markText(e.composing.start,t.getCursor("to"),{className:"CodeMirror-composing"}))})),!0},_l.prototype.ensurePolled=function(){this.pollingFast&&this.poll()&&(this.pollingFast=!1)},_l.prototype.onKeyPress=function(){l&&s>=9&&(this.hasSelection=null),this.fastPoll()},_l.prototype.onContextMenu=function(e){var t=this,r=t.cm,n=r.display,i=t.textarea;t.contextMenuPending&&t.contextMenuPending();var o=fn(r,e),u=n.scroller.scrollTop;if(o&&!f){r.options.resetSelectionOnContextMenu&&-1==r.doc.sel.contains(o)&&ni(r,no)(r.doc,Oi(o),j);var c,h=i.style.cssText,d=t.wrapper.style.cssText,p=t.wrapper.offsetParent.getBoundingClientRect();if(t.wrapper.style.cssText="position: static",i.style.cssText="position: absolute; width: 30px; height: 30px;\n top: "+(e.clientY-p.top-5)+"px; left: "+(e.clientX-p.left-5)+"px;\n z-index: 1000; background: "+(l?"rgba(255, 255, 255, .05)":"transparent")+";\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);",a&&(c=i.ownerDocument.defaultView.scrollY),n.input.focus(),a&&i.ownerDocument.defaultView.scrollTo(null,c),n.input.reset(),r.somethingSelected()||(i.value=t.prevInput=" "),t.contextMenuPending=m,n.selForContextMenu=r.doc.sel,clearTimeout(n.detectingSelectAll),l&&s>=9&&v(),L){ke(e);var g=function(){ve(window,"mouseup",g),setTimeout(m,20)};pe(window,"mouseup",g)}else setTimeout(m,50)}function v(){if(null!=i.selectionStart){var e=r.somethingSelected(),o="​"+(e?i.value:"");i.value="⇚",i.value=o,t.prevInput=e?"":"​",i.selectionStart=1,i.selectionEnd=o.length,n.selForContextMenu=r.doc.sel}}function m(){if(t.contextMenuPending==m&&(t.contextMenuPending=!1,t.wrapper.style.cssText=d,i.style.cssText=h,l&&s<9&&n.scrollbars.setScrollTop(n.scroller.scrollTop=u),null!=i.selectionStart)){(!l||l&&s<9)&&v();var e=0,o=function(){n.selForContextMenu==r.doc.sel&&0==i.selectionStart&&i.selectionEnd>0&&"​"==t.prevInput?ni(r,ho)(r):e++<10?n.detectingSelectAll=setTimeout(o,500):(n.selForContextMenu=null,n.input.reset())};n.detectingSelectAll=setTimeout(o,200)}}},_l.prototype.readOnlyChanged=function(e){e||this.reset(),this.textarea.disabled="nocursor"==e,this.textarea.readOnly=!!e},_l.prototype.setUneditable=function(){},_l.prototype.needsContentAttribute=!1,function(e){var t=e.optionHandlers;function r(r,n,i,o){e.defaults[r]=n,i&&(t[r]=o?function(e,t,r){r!=Tl&&i(e,t,r)}:i)}e.defineOption=r,e.Init=Tl,r("value","",(function(e,t){return e.setValue(t)}),!0),r("mode",null,(function(e,t){e.doc.modeOption=t,Fi(e)}),!0),r("indentUnit",2,Fi,!0),r("indentWithTabs",!1),r("smartIndent",!0),r("tabSize",4,(function(e){Pi(e),Ur(e),pn(e)}),!0),r("lineSeparator",null,(function(e,t){if(e.doc.lineSep=t,t){var r=[],n=e.doc.first;e.doc.iter((function(e){for(var i=0;;){var o=e.text.indexOf(t,i);if(-1==o)break;i=o+t.length,r.push(nt(n,o))}n++}));for(var i=r.length-1;i>=0;i--)bo(e.doc,t,r[i],nt(r[i].line,r[i].ch+t.length))}})),r("specialChars",/[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b\u200e\u200f\u2028\u2029\ufeff\ufff9-\ufffc]/g,(function(e,t,r){e.state.specialChars=new RegExp(t.source+(t.test("\t")?"":"|\t"),"g"),r!=Tl&&e.refresh()})),r("specialCharPlaceholder",tr,(function(e){return e.refresh()}),!0),r("electricChars",!0),r("inputStyle",y?"contenteditable":"textarea",(function(){throw new Error("inputStyle can not (yet) be changed in a running editor")}),!0),r("spellcheck",!1,(function(e,t){return e.getInputField().spellcheck=t}),!0),r("autocorrect",!1,(function(e,t){return e.getInputField().autocorrect=t}),!0),r("autocapitalize",!1,(function(e,t){return e.getInputField().autocapitalize=t}),!0),r("rtlMoveVisually",!x),r("wholeLineUpdateBefore",!0),r("theme","default",(function(e){kl(e),bi(e)}),!0),r("keyMap","default",(function(e,t,r){var n=el(t),i=r!=Tl&&el(r);i&&i.detach&&i.detach(e,n),n.attach&&n.attach(e,i||null)})),r("extraKeys",null),r("configureMouse",null),r("lineWrapping",!1,Al,!0),r("gutters",[],(function(e,t){e.display.gutterSpecs=mi(t,e.options.lineNumbers),bi(e)}),!0),r("fixedGutter",!0,(function(e,t){e.display.gutters.style.left=t?un(e.display)+"px":"0",e.refresh()}),!0),r("coverGutterNextToScrollbar",!1,(function(e){return Kn(e)}),!0),r("scrollbarStyle","native",(function(e){Yn(e),Kn(e),e.display.scrollbars.setScrollTop(e.doc.scrollTop),e.display.scrollbars.setScrollLeft(e.doc.scrollLeft)}),!0),r("lineNumbers",!1,(function(e,t){e.display.gutterSpecs=mi(e.options.gutters,t),bi(e)}),!0),r("firstLineNumber",1,bi,!0),r("lineNumberFormatter",(function(e){return e}),bi,!0),r("showCursorWhenSelecting",!1,bn,!0),r("resetSelectionOnContextMenu",!0),r("lineWiseCopyCut",!0),r("pasteLinesPerSelection",!0),r("selectionsMayTouch",!1),r("readOnly",!1,(function(e,t){"nocursor"==t&&(Nn(e),e.display.input.blur()),e.display.input.readOnlyChanged(t)})),r("screenReaderLabel",null,(function(e,t){t=""===t?null:t,e.display.input.screenReaderLabelChanged(t)})),r("disableInput",!1,(function(e,t){t||e.display.input.reset()}),!0),r("dragDrop",!0,Ol),r("allowDropFileTypes",null),r("cursorBlinkRate",530),r("cursorScrollMargin",0),r("cursorHeight",1,bn,!0),r("singleCursorHeightPerLine",!0,bn,!0),r("workTime",100),r("workDelay",100),r("flattenSpans",!0,Pi,!0),r("addModeClass",!1,Pi,!0),r("pollInterval",100),r("undoDepth",200,(function(e,t){return e.doc.history.undoDepth=t})),r("historyEventDelay",1250),r("viewportMargin",10,(function(e){return e.refresh()}),!0),r("maxHighlightLength",1e4,Pi,!0),r("moveInputWithCursor",!0,(function(e,t){t||e.display.input.resetPosition()})),r("tabindex",null,(function(e,t){return e.display.input.getField().tabIndex=t||""})),r("autofocus",null),r("direction","ltr",(function(e,t){return e.doc.setDirection(t)}),!0),r("phrases",null)}(Dl),function(e){var t=e.optionHandlers,r=e.helpers={};e.prototype={constructor:e,focus:function(){z(this).focus(),this.display.input.focus()},setOption:function(e,r){var n=this.options,i=n[e];n[e]==r&&"mode"!=e||(n[e]=r,t.hasOwnProperty(e)&&ni(this,t[e])(this,r,i),me(this,"optionChange",this,e))},getOption:function(e){return this.options[e]},getDoc:function(){return this.doc},addKeyMap:function(e,t){this.state.keyMaps[t?"push":"unshift"](el(e))},removeKeyMap:function(e){for(var t=this.state.keyMaps,r=0;rr&&(Hl(this,i.head.line,e,!0),r=i.head.line,n==this.doc.sel.primIndex&&Fn(this));else{var o=i.from(),l=i.to(),s=Math.max(r,o.line);r=Math.min(this.lastLine(),l.line-(l.ch?0:1))+1;for(var a=s;a0&&eo(this.doc,n,new Mi(o,u[n].to()),j)}}})),getTokenAt:function(e,t){return xt(this,e,t)},getLineTokens:function(e,t){return xt(this,nt(e),t,!0)},getTokenTypeAt:function(e){e=ct(this.doc,e);var t,r=gt(this,_e(this.doc,e.line)),n=0,i=(r.length-1)/2,o=e.ch;if(0==o)t=r[2];else for(;;){var l=n+i>>1;if((l?r[2*l-1]:0)>=o)i=l;else{if(!(r[2*l+1]o&&(e=o,i=!0),n=_e(this.doc,e)}else n=e;return Xr(this,n,{top:0,left:0},t||"page",r||i).top+(i?this.doc.height-Xt(n):0)},defaultTextHeight:function(){return ln(this.display)},defaultCharWidth:function(){return sn(this.display)},getViewport:function(){return{from:this.display.viewFrom,to:this.display.viewTo}},addWidget:function(e,t,r,n,i){var o,l,s,a=this.display,u=(e=_r(this,ct(this.doc,e))).bottom,c=e.left;if(t.style.position="absolute",t.setAttribute("cm-ignore-events","true"),this.display.input.setUneditable(t),a.sizer.appendChild(t),"over"==n)u=e.top;else if("above"==n||"near"==n){var h=Math.max(a.wrapper.clientHeight,this.doc.height),f=Math.max(a.sizer.clientWidth,a.lineSpace.clientWidth);("above"==n||e.bottom+t.offsetHeight>h)&&e.top>t.offsetHeight?u=e.top-t.offsetHeight:e.bottom+t.offsetHeight<=h&&(u=e.bottom),c+t.offsetWidth>f&&(c=f-t.offsetWidth)}t.style.top=u+"px",t.style.left=t.style.right="","right"==i?(c=a.sizer.clientWidth-t.offsetWidth,t.style.right="0px"):("left"==i?c=0:"middle"==i&&(c=(a.sizer.clientWidth-t.offsetWidth)/2),t.style.left=c+"px"),r&&(o=this,l={left:c,top:u,right:c+t.offsetWidth,bottom:u+t.offsetHeight},null!=(s=Wn(o,l)).scrollTop&&zn(o,s.scrollTop),null!=s.scrollLeft&&Bn(o,s.scrollLeft))},triggerOnKeyDown:ii(pl),triggerOnKeyPress:ii(vl),triggerOnKeyUp:gl,triggerOnMouseDown:ii(wl),execCommand:function(e){if(ol.hasOwnProperty(e))return ol[e].call(null,this)},triggerElectric:ii((function(e){zl(this,e)})),findPosH:function(e,t,r,n){var i=1;t<0&&(i=-1,t=-t);for(var o=ct(this.doc,e),l=0;l0&&l(t.charAt(r-1));)--r;for(;n.5||this.options.lineWrapping)&&hn(this),me(this,"refresh",this)})),swapDoc:ii((function(e){var t=this.doc;return t.cm=null,this.state.selectingText&&this.state.selectingText(),Ri(this,e),Ur(this),this.display.input.reset(),Pn(this,e.scrollLeft,e.scrollTop),this.curOp.forceScroll=!0,cr(this,"swapDoc",this,t),t})),phrase:function(e){var t=this.options.phrases;return t&&Object.prototype.hasOwnProperty.call(t,e)?t[e]:e},getInputField:function(){return this.display.input.getField()},getWrapperElement:function(){return this.display.wrapper},getScrollerElement:function(){return this.display.scroller},getGutterElement:function(){return this.display.gutters}},xe(e),e.registerHelper=function(t,n,i){r.hasOwnProperty(t)||(r[t]=e[t]={_global:[]}),r[t][n]=i},e.registerGlobalHelper=function(t,n,i,o){e.registerHelper(t,n,o),r[t]._global.push({pred:i,val:o})}}(Dl);var ql="iter insert remove copy getEditor constructor".split(" ");for(var Zl in Po.prototype)Po.prototype.hasOwnProperty(Zl)&&V(ql,Zl)<0&&(Dl.prototype[Zl]=function(e){return function(){return e.apply(this.doc,arguments)}}(Po.prototype[Zl]));return xe(Po),Dl.inputStyles={textarea:_l,contenteditable:Kl},Dl.defineMode=function(e){Dl.defaults.mode||"null"==e||(Dl.defaults.mode=e),Be.apply(this,arguments)},Dl.defineMIME=function(e,t){Re[e]=t},Dl.defineMode("null",(function(){return{token:function(e){return e.skipToEnd()}}})),Dl.defineMIME("text/plain","null"),Dl.defineExtension=function(e,t){Dl.prototype[e]=t},Dl.defineDocExtension=function(e,t){Po.prototype[e]=t},Dl.fromTextArea=function(e,t){if((t=t?B(t):{}).value=e.value,!t.tabindex&&e.tabIndex&&(t.tabindex=e.tabIndex),!t.placeholder&&e.placeholder&&(t.placeholder=e.placeholder),null==t.autofocus){var r=H(e.ownerDocument);t.autofocus=r==e||null!=e.getAttribute("autofocus")&&r==document.body}function n(){e.value=s.getValue()}var i;if(e.form&&(pe(e.form,"submit",n),!t.leaveSubmitMethodAlone)){var o=e.form;i=o.submit;try{var l=o.submit=function(){n(),o.submit=i,o.submit(),o.submit=l}}catch(e){}}t.finishInit=function(r){r.save=n,r.getTextArea=function(){return e},r.toTextArea=function(){r.toTextArea=isNaN,n(),e.parentNode.removeChild(r.getWrapperElement()),e.style.display="",e.form&&(ve(e.form,"submit",n),t.leaveSubmitMethodAlone||"function"!=typeof e.form.submit||(e.form.submit=i))}},e.style.display="none";var s=Dl((function(t){return e.parentNode.insertBefore(t,e.nextSibling)}),t);return s},function(e){e.off=ve,e.on=pe,e.wheelEventPixels=Li,e.Doc=Po,e.splitLines=Fe,e.countColumn=G,e.findColumn=$,e.isWordChar=re,e.Pass=K,e.signal=me,e.Line=_t,e.changeEnd=Ai,e.scrollbarModel=Xn,e.Pos=nt,e.cmpPos=it,e.modes=ze,e.mimeModes=Re,e.resolveMode=Ge,e.getMode=Ue,e.modeExtensions=Ve,e.extendMode=Ke,e.copyState=je,e.startState=Ye,e.innerMode=Xe,e.commands=ol,e.keyMap=Yo,e.keyName=Jo,e.isModifierKey=Zo,e.lookupKey=qo,e.normalizeKeyMap=_o,e.StringStream=$e,e.SharedTextMarker=Do,e.TextMarker=Oo,e.LineWidget=To,e.e_preventDefault=Ce,e.e_stopPropagation=Se,e.e_stop=ke,e.addClass=F,e.contains=W,e.rmClass=M,e.keyNames=Vo}(Dl),Dl.version="6.65.7",Dl})); +//# sourceMappingURL=/sm/9d7183e0fa3cb60ce5380deebe095437af21b68c44af4b8d59b585a14324ed9b.map \ No newline at end of file diff --git a/assets/addons/codemirror/mode/css/css.js b/assets/addons/codemirror/mode/css/css.js new file mode 100644 index 0000000..b0721b4 --- /dev/null +++ b/assets/addons/codemirror/mode/css/css.js @@ -0,0 +1,862 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/5/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("css", function(config, parserConfig) { + var inline = parserConfig.inline + if (!parserConfig.propertyKeywords) parserConfig = CodeMirror.resolveMode("text/css"); + + var indentUnit = config.indentUnit, + tokenHooks = parserConfig.tokenHooks, + documentTypes = parserConfig.documentTypes || {}, + mediaTypes = parserConfig.mediaTypes || {}, + mediaFeatures = parserConfig.mediaFeatures || {}, + mediaValueKeywords = parserConfig.mediaValueKeywords || {}, + propertyKeywords = parserConfig.propertyKeywords || {}, + nonStandardPropertyKeywords = parserConfig.nonStandardPropertyKeywords || {}, + fontProperties = parserConfig.fontProperties || {}, + counterDescriptors = parserConfig.counterDescriptors || {}, + colorKeywords = parserConfig.colorKeywords || {}, + valueKeywords = parserConfig.valueKeywords || {}, + allowNested = parserConfig.allowNested, + lineComment = parserConfig.lineComment, + supportsAtComponent = parserConfig.supportsAtComponent === true, + highlightNonStandardPropertyKeywords = config.highlightNonStandardPropertyKeywords !== false; + + var type, override; + function ret(style, tp) { type = tp; return style; } + + // Tokenizers + + function tokenBase(stream, state) { + var ch = stream.next(); + if (tokenHooks[ch]) { + var result = tokenHooks[ch](stream, state); + if (result !== false) return result; + } + if (ch == "@") { + stream.eatWhile(/[\w\\\-]/); + return ret("def", stream.current()); + } else if (ch == "=" || (ch == "~" || ch == "|") && stream.eat("=")) { + return ret(null, "compare"); + } else if (ch == "\"" || ch == "'") { + state.tokenize = tokenString(ch); + return state.tokenize(stream, state); + } else if (ch == "#") { + stream.eatWhile(/[\w\\\-]/); + return ret("atom", "hash"); + } else if (ch == "!") { + stream.match(/^\s*\w*/); + return ret("keyword", "important"); + } else if (/\d/.test(ch) || ch == "." && stream.eat(/\d/)) { + stream.eatWhile(/[\w.%]/); + return ret("number", "unit"); + } else if (ch === "-") { + if (/[\d.]/.test(stream.peek())) { + stream.eatWhile(/[\w.%]/); + return ret("number", "unit"); + } else if (stream.match(/^-[\w\\\-]*/)) { + stream.eatWhile(/[\w\\\-]/); + if (stream.match(/^\s*:/, false)) + return ret("variable-2", "variable-definition"); + return ret("variable-2", "variable"); + } else if (stream.match(/^\w+-/)) { + return ret("meta", "meta"); + } + } else if (/[,+>*\/]/.test(ch)) { + return ret(null, "select-op"); + } else if (ch == "." && stream.match(/^-?[_a-z][_a-z0-9-]*/i)) { + return ret("qualifier", "qualifier"); + } else if (/[:;{}\[\]\(\)]/.test(ch)) { + return ret(null, ch); + } else if (stream.match(/^[\w-.]+(?=\()/)) { + if (/^(url(-prefix)?|domain|regexp)$/i.test(stream.current())) { + state.tokenize = tokenParenthesized; + } + return ret("variable callee", "variable"); + } else if (/[\w\\\-]/.test(ch)) { + stream.eatWhile(/[\w\\\-]/); + return ret("property", "word"); + } else { + return ret(null, null); + } + } + + function tokenString(quote) { + return function(stream, state) { + var escaped = false, ch; + while ((ch = stream.next()) != null) { + if (ch == quote && !escaped) { + if (quote == ")") stream.backUp(1); + break; + } + escaped = !escaped && ch == "\\"; + } + if (ch == quote || !escaped && quote != ")") state.tokenize = null; + return ret("string", "string"); + }; + } + + function tokenParenthesized(stream, state) { + stream.next(); // Must be '(' + if (!stream.match(/^\s*[\"\')]/, false)) + state.tokenize = tokenString(")"); + else + state.tokenize = null; + return ret(null, "("); + } + + // Context management + + function Context(type, indent, prev) { + this.type = type; + this.indent = indent; + this.prev = prev; + } + + function pushContext(state, stream, type, indent) { + state.context = new Context(type, stream.indentation() + (indent === false ? 0 : indentUnit), state.context); + return type; + } + + function popContext(state) { + if (state.context.prev) + state.context = state.context.prev; + return state.context.type; + } + + function pass(type, stream, state) { + return states[state.context.type](type, stream, state); + } + function popAndPass(type, stream, state, n) { + for (var i = n || 1; i > 0; i--) + state.context = state.context.prev; + return pass(type, stream, state); + } + + // Parser + + function wordAsValue(stream) { + var word = stream.current().toLowerCase(); + if (valueKeywords.hasOwnProperty(word)) + override = "atom"; + else if (colorKeywords.hasOwnProperty(word)) + override = "keyword"; + else + override = "variable"; + } + + var states = {}; + + states.top = function(type, stream, state) { + if (type == "{") { + return pushContext(state, stream, "block"); + } else if (type == "}" && state.context.prev) { + return popContext(state); + } else if (supportsAtComponent && /@component/i.test(type)) { + return pushContext(state, stream, "atComponentBlock"); + } else if (/^@(-moz-)?document$/i.test(type)) { + return pushContext(state, stream, "documentTypes"); + } else if (/^@(media|supports|(-moz-)?document|import)$/i.test(type)) { + return pushContext(state, stream, "atBlock"); + } else if (/^@(font-face|counter-style)/i.test(type)) { + state.stateArg = type; + return "restricted_atBlock_before"; + } else if (/^@(-(moz|ms|o|webkit)-)?keyframes$/i.test(type)) { + return "keyframes"; + } else if (type && type.charAt(0) == "@") { + return pushContext(state, stream, "at"); + } else if (type == "hash") { + override = "builtin"; + } else if (type == "word") { + override = "tag"; + } else if (type == "variable-definition") { + return "maybeprop"; + } else if (type == "interpolation") { + return pushContext(state, stream, "interpolation"); + } else if (type == ":") { + return "pseudo"; + } else if (allowNested && type == "(") { + return pushContext(state, stream, "parens"); + } + return state.context.type; + }; + + states.block = function(type, stream, state) { + if (type == "word") { + var word = stream.current().toLowerCase(); + if (propertyKeywords.hasOwnProperty(word)) { + override = "property"; + return "maybeprop"; + } else if (nonStandardPropertyKeywords.hasOwnProperty(word)) { + override = highlightNonStandardPropertyKeywords ? "string-2" : "property"; + return "maybeprop"; + } else if (allowNested) { + override = stream.match(/^\s*:(?:\s|$)/, false) ? "property" : "tag"; + return "block"; + } else { + override += " error"; + return "maybeprop"; + } + } else if (type == "meta") { + return "block"; + } else if (!allowNested && (type == "hash" || type == "qualifier")) { + override = "error"; + return "block"; + } else { + return states.top(type, stream, state); + } + }; + + states.maybeprop = function(type, stream, state) { + if (type == ":") return pushContext(state, stream, "prop"); + return pass(type, stream, state); + }; + + states.prop = function(type, stream, state) { + if (type == ";") return popContext(state); + if (type == "{" && allowNested) return pushContext(state, stream, "propBlock"); + if (type == "}" || type == "{") return popAndPass(type, stream, state); + if (type == "(") return pushContext(state, stream, "parens"); + + if (type == "hash" && !/^#([0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/.test(stream.current())) { + override += " error"; + } else if (type == "word") { + wordAsValue(stream); + } else if (type == "interpolation") { + return pushContext(state, stream, "interpolation"); + } + return "prop"; + }; + + states.propBlock = function(type, _stream, state) { + if (type == "}") return popContext(state); + if (type == "word") { override = "property"; return "maybeprop"; } + return state.context.type; + }; + + states.parens = function(type, stream, state) { + if (type == "{" || type == "}") return popAndPass(type, stream, state); + if (type == ")") return popContext(state); + if (type == "(") return pushContext(state, stream, "parens"); + if (type == "interpolation") return pushContext(state, stream, "interpolation"); + if (type == "word") wordAsValue(stream); + return "parens"; + }; + + states.pseudo = function(type, stream, state) { + if (type == "meta") return "pseudo"; + + if (type == "word") { + override = "variable-3"; + return state.context.type; + } + return pass(type, stream, state); + }; + + states.documentTypes = function(type, stream, state) { + if (type == "word" && documentTypes.hasOwnProperty(stream.current())) { + override = "tag"; + return state.context.type; + } else { + return states.atBlock(type, stream, state); + } + }; + + states.atBlock = function(type, stream, state) { + if (type == "(") return pushContext(state, stream, "atBlock_parens"); + if (type == "}" || type == ";") return popAndPass(type, stream, state); + if (type == "{") return popContext(state) && pushContext(state, stream, allowNested ? "block" : "top"); + + if (type == "interpolation") return pushContext(state, stream, "interpolation"); + + if (type == "word") { + var word = stream.current().toLowerCase(); + if (word == "only" || word == "not" || word == "and" || word == "or") + override = "keyword"; + else if (mediaTypes.hasOwnProperty(word)) + override = "attribute"; + else if (mediaFeatures.hasOwnProperty(word)) + override = "property"; + else if (mediaValueKeywords.hasOwnProperty(word)) + override = "keyword"; + else if (propertyKeywords.hasOwnProperty(word)) + override = "property"; + else if (nonStandardPropertyKeywords.hasOwnProperty(word)) + override = highlightNonStandardPropertyKeywords ? "string-2" : "property"; + else if (valueKeywords.hasOwnProperty(word)) + override = "atom"; + else if (colorKeywords.hasOwnProperty(word)) + override = "keyword"; + else + override = "error"; + } + return state.context.type; + }; + + states.atComponentBlock = function(type, stream, state) { + if (type == "}") + return popAndPass(type, stream, state); + if (type == "{") + return popContext(state) && pushContext(state, stream, allowNested ? "block" : "top", false); + if (type == "word") + override = "error"; + return state.context.type; + }; + + states.atBlock_parens = function(type, stream, state) { + if (type == ")") return popContext(state); + if (type == "{" || type == "}") return popAndPass(type, stream, state, 2); + return states.atBlock(type, stream, state); + }; + + states.restricted_atBlock_before = function(type, stream, state) { + if (type == "{") + return pushContext(state, stream, "restricted_atBlock"); + if (type == "word" && state.stateArg == "@counter-style") { + override = "variable"; + return "restricted_atBlock_before"; + } + return pass(type, stream, state); + }; + + states.restricted_atBlock = function(type, stream, state) { + if (type == "}") { + state.stateArg = null; + return popContext(state); + } + if (type == "word") { + if ((state.stateArg == "@font-face" && !fontProperties.hasOwnProperty(stream.current().toLowerCase())) || + (state.stateArg == "@counter-style" && !counterDescriptors.hasOwnProperty(stream.current().toLowerCase()))) + override = "error"; + else + override = "property"; + return "maybeprop"; + } + return "restricted_atBlock"; + }; + + states.keyframes = function(type, stream, state) { + if (type == "word") { override = "variable"; return "keyframes"; } + if (type == "{") return pushContext(state, stream, "top"); + return pass(type, stream, state); + }; + + states.at = function(type, stream, state) { + if (type == ";") return popContext(state); + if (type == "{" || type == "}") return popAndPass(type, stream, state); + if (type == "word") override = "tag"; + else if (type == "hash") override = "builtin"; + return "at"; + }; + + states.interpolation = function(type, stream, state) { + if (type == "}") return popContext(state); + if (type == "{" || type == ";") return popAndPass(type, stream, state); + if (type == "word") override = "variable"; + else if (type != "variable" && type != "(" && type != ")") override = "error"; + return "interpolation"; + }; + + return { + startState: function(base) { + return {tokenize: null, + state: inline ? "block" : "top", + stateArg: null, + context: new Context(inline ? "block" : "top", base || 0, null)}; + }, + + token: function(stream, state) { + if (!state.tokenize && stream.eatSpace()) return null; + var style = (state.tokenize || tokenBase)(stream, state); + if (style && typeof style == "object") { + type = style[1]; + style = style[0]; + } + override = style; + if (type != "comment") + state.state = states[state.state](type, stream, state); + return override; + }, + + indent: function(state, textAfter) { + var cx = state.context, ch = textAfter && textAfter.charAt(0); + var indent = cx.indent; + if (cx.type == "prop" && (ch == "}" || ch == ")")) cx = cx.prev; + if (cx.prev) { + if (ch == "}" && (cx.type == "block" || cx.type == "top" || + cx.type == "interpolation" || cx.type == "restricted_atBlock")) { + // Resume indentation from parent context. + cx = cx.prev; + indent = cx.indent; + } else if (ch == ")" && (cx.type == "parens" || cx.type == "atBlock_parens") || + ch == "{" && (cx.type == "at" || cx.type == "atBlock")) { + // Dedent relative to current context. + indent = Math.max(0, cx.indent - indentUnit); + } + } + return indent; + }, + + electricChars: "}", + blockCommentStart: "/*", + blockCommentEnd: "*/", + blockCommentContinue: " * ", + lineComment: lineComment, + fold: "brace" + }; +}); + + function keySet(array) { + var keys = {}; + for (var i = 0; i < array.length; ++i) { + keys[array[i].toLowerCase()] = true; + } + return keys; + } + + var documentTypes_ = [ + "domain", "regexp", "url", "url-prefix" + ], documentTypes = keySet(documentTypes_); + + var mediaTypes_ = [ + "all", "aural", "braille", "handheld", "print", "projection", "screen", + "tty", "tv", "embossed" + ], mediaTypes = keySet(mediaTypes_); + + var mediaFeatures_ = [ + "width", "min-width", "max-width", "height", "min-height", "max-height", + "device-width", "min-device-width", "max-device-width", "device-height", + "min-device-height", "max-device-height", "aspect-ratio", + "min-aspect-ratio", "max-aspect-ratio", "device-aspect-ratio", + "min-device-aspect-ratio", "max-device-aspect-ratio", "color", "min-color", + "max-color", "color-index", "min-color-index", "max-color-index", + "monochrome", "min-monochrome", "max-monochrome", "resolution", + "min-resolution", "max-resolution", "scan", "grid", "orientation", + "device-pixel-ratio", "min-device-pixel-ratio", "max-device-pixel-ratio", + "pointer", "any-pointer", "hover", "any-hover", "prefers-color-scheme", + "dynamic-range", "video-dynamic-range" + ], mediaFeatures = keySet(mediaFeatures_); + + var mediaValueKeywords_ = [ + "landscape", "portrait", "none", "coarse", "fine", "on-demand", "hover", + "interlace", "progressive", + "dark", "light", + "standard", "high" + ], mediaValueKeywords = keySet(mediaValueKeywords_); + + var propertyKeywords_ = [ + "align-content", "align-items", "align-self", "alignment-adjust", + "alignment-baseline", "all", "anchor-point", "animation", "animation-delay", + "animation-direction", "animation-duration", "animation-fill-mode", + "animation-iteration-count", "animation-name", "animation-play-state", + "animation-timing-function", "appearance", "azimuth", "backdrop-filter", + "backface-visibility", "background", "background-attachment", + "background-blend-mode", "background-clip", "background-color", + "background-image", "background-origin", "background-position", + "background-position-x", "background-position-y", "background-repeat", + "background-size", "baseline-shift", "binding", "bleed", "block-size", + "bookmark-label", "bookmark-level", "bookmark-state", "bookmark-target", + "border", "border-bottom", "border-bottom-color", "border-bottom-left-radius", + "border-bottom-right-radius", "border-bottom-style", "border-bottom-width", + "border-collapse", "border-color", "border-image", "border-image-outset", + "border-image-repeat", "border-image-slice", "border-image-source", + "border-image-width", "border-left", "border-left-color", "border-left-style", + "border-left-width", "border-radius", "border-right", "border-right-color", + "border-right-style", "border-right-width", "border-spacing", "border-style", + "border-top", "border-top-color", "border-top-left-radius", + "border-top-right-radius", "border-top-style", "border-top-width", + "border-width", "bottom", "box-decoration-break", "box-shadow", "box-sizing", + "break-after", "break-before", "break-inside", "caption-side", "caret-color", + "clear", "clip", "color", "color-profile", "column-count", "column-fill", + "column-gap", "column-rule", "column-rule-color", "column-rule-style", + "column-rule-width", "column-span", "column-width", "columns", "contain", + "content", "counter-increment", "counter-reset", "crop", "cue", "cue-after", + "cue-before", "cursor", "direction", "display", "dominant-baseline", + "drop-initial-after-adjust", "drop-initial-after-align", + "drop-initial-before-adjust", "drop-initial-before-align", "drop-initial-size", + "drop-initial-value", "elevation", "empty-cells", "fit", "fit-content", "fit-position", + "flex", "flex-basis", "flex-direction", "flex-flow", "flex-grow", + "flex-shrink", "flex-wrap", "float", "float-offset", "flow-from", "flow-into", + "font", "font-family", "font-feature-settings", "font-kerning", + "font-language-override", "font-optical-sizing", "font-size", + "font-size-adjust", "font-stretch", "font-style", "font-synthesis", + "font-variant", "font-variant-alternates", "font-variant-caps", + "font-variant-east-asian", "font-variant-ligatures", "font-variant-numeric", + "font-variant-position", "font-variation-settings", "font-weight", "gap", + "grid", "grid-area", "grid-auto-columns", "grid-auto-flow", "grid-auto-rows", + "grid-column", "grid-column-end", "grid-column-gap", "grid-column-start", + "grid-gap", "grid-row", "grid-row-end", "grid-row-gap", "grid-row-start", + "grid-template", "grid-template-areas", "grid-template-columns", + "grid-template-rows", "hanging-punctuation", "height", "hyphens", "icon", + "image-orientation", "image-rendering", "image-resolution", "inline-box-align", + "inset", "inset-block", "inset-block-end", "inset-block-start", "inset-inline", + "inset-inline-end", "inset-inline-start", "isolation", "justify-content", + "justify-items", "justify-self", "left", "letter-spacing", "line-break", + "line-height", "line-height-step", "line-stacking", "line-stacking-ruby", + "line-stacking-shift", "line-stacking-strategy", "list-style", + "list-style-image", "list-style-position", "list-style-type", "margin", + "margin-bottom", "margin-left", "margin-right", "margin-top", "marks", + "marquee-direction", "marquee-loop", "marquee-play-count", "marquee-speed", + "marquee-style", "mask-clip", "mask-composite", "mask-image", "mask-mode", + "mask-origin", "mask-position", "mask-repeat", "mask-size","mask-type", + "max-block-size", "max-height", "max-inline-size", + "max-width", "min-block-size", "min-height", "min-inline-size", "min-width", + "mix-blend-mode", "move-to", "nav-down", "nav-index", "nav-left", "nav-right", + "nav-up", "object-fit", "object-position", "offset", "offset-anchor", + "offset-distance", "offset-path", "offset-position", "offset-rotate", + "opacity", "order", "orphans", "outline", "outline-color", "outline-offset", + "outline-style", "outline-width", "overflow", "overflow-style", + "overflow-wrap", "overflow-x", "overflow-y", "padding", "padding-bottom", + "padding-left", "padding-right", "padding-top", "page", "page-break-after", + "page-break-before", "page-break-inside", "page-policy", "pause", + "pause-after", "pause-before", "perspective", "perspective-origin", "pitch", + "pitch-range", "place-content", "place-items", "place-self", "play-during", + "position", "presentation-level", "punctuation-trim", "quotes", + "region-break-after", "region-break-before", "region-break-inside", + "region-fragment", "rendering-intent", "resize", "rest", "rest-after", + "rest-before", "richness", "right", "rotate", "rotation", "rotation-point", + "row-gap", "ruby-align", "ruby-overhang", "ruby-position", "ruby-span", + "scale", "scroll-behavior", "scroll-margin", "scroll-margin-block", + "scroll-margin-block-end", "scroll-margin-block-start", "scroll-margin-bottom", + "scroll-margin-inline", "scroll-margin-inline-end", + "scroll-margin-inline-start", "scroll-margin-left", "scroll-margin-right", + "scroll-margin-top", "scroll-padding", "scroll-padding-block", + "scroll-padding-block-end", "scroll-padding-block-start", + "scroll-padding-bottom", "scroll-padding-inline", "scroll-padding-inline-end", + "scroll-padding-inline-start", "scroll-padding-left", "scroll-padding-right", + "scroll-padding-top", "scroll-snap-align", "scroll-snap-type", + "shape-image-threshold", "shape-inside", "shape-margin", "shape-outside", + "size", "speak", "speak-as", "speak-header", "speak-numeral", + "speak-punctuation", "speech-rate", "stress", "string-set", "tab-size", + "table-layout", "target", "target-name", "target-new", "target-position", + "text-align", "text-align-last", "text-combine-upright", "text-decoration", + "text-decoration-color", "text-decoration-line", "text-decoration-skip", + "text-decoration-skip-ink", "text-decoration-style", "text-emphasis", + "text-emphasis-color", "text-emphasis-position", "text-emphasis-style", + "text-height", "text-indent", "text-justify", "text-orientation", + "text-outline", "text-overflow", "text-rendering", "text-shadow", + "text-size-adjust", "text-space-collapse", "text-transform", + "text-underline-position", "text-wrap", "top", "touch-action", "transform", "transform-origin", + "transform-style", "transition", "transition-delay", "transition-duration", + "transition-property", "transition-timing-function", "translate", + "unicode-bidi", "user-select", "vertical-align", "visibility", "voice-balance", + "voice-duration", "voice-family", "voice-pitch", "voice-range", "voice-rate", + "voice-stress", "voice-volume", "volume", "white-space", "widows", "width", + "will-change", "word-break", "word-spacing", "word-wrap", "writing-mode", "z-index", + // SVG-specific + "clip-path", "clip-rule", "mask", "enable-background", "filter", "flood-color", + "flood-opacity", "lighting-color", "stop-color", "stop-opacity", "pointer-events", + "color-interpolation", "color-interpolation-filters", + "color-rendering", "fill", "fill-opacity", "fill-rule", "image-rendering", + "marker", "marker-end", "marker-mid", "marker-start", "paint-order", "shape-rendering", "stroke", + "stroke-dasharray", "stroke-dashoffset", "stroke-linecap", "stroke-linejoin", + "stroke-miterlimit", "stroke-opacity", "stroke-width", "text-rendering", + "baseline-shift", "dominant-baseline", "glyph-orientation-horizontal", + "glyph-orientation-vertical", "text-anchor", "writing-mode", + ], propertyKeywords = keySet(propertyKeywords_); + + var nonStandardPropertyKeywords_ = [ + "accent-color", "aspect-ratio", "border-block", "border-block-color", "border-block-end", + "border-block-end-color", "border-block-end-style", "border-block-end-width", + "border-block-start", "border-block-start-color", "border-block-start-style", + "border-block-start-width", "border-block-style", "border-block-width", + "border-inline", "border-inline-color", "border-inline-end", + "border-inline-end-color", "border-inline-end-style", + "border-inline-end-width", "border-inline-start", "border-inline-start-color", + "border-inline-start-style", "border-inline-start-width", + "border-inline-style", "border-inline-width", "content-visibility", "margin-block", + "margin-block-end", "margin-block-start", "margin-inline", "margin-inline-end", + "margin-inline-start", "overflow-anchor", "overscroll-behavior", "padding-block", "padding-block-end", + "padding-block-start", "padding-inline", "padding-inline-end", + "padding-inline-start", "scroll-snap-stop", "scrollbar-3d-light-color", + "scrollbar-arrow-color", "scrollbar-base-color", "scrollbar-dark-shadow-color", + "scrollbar-face-color", "scrollbar-highlight-color", "scrollbar-shadow-color", + "scrollbar-track-color", "searchfield-cancel-button", "searchfield-decoration", + "searchfield-results-button", "searchfield-results-decoration", "shape-inside", "zoom" + ], nonStandardPropertyKeywords = keySet(nonStandardPropertyKeywords_); + + var fontProperties_ = [ + "font-display", "font-family", "src", "unicode-range", "font-variant", + "font-feature-settings", "font-stretch", "font-weight", "font-style" + ], fontProperties = keySet(fontProperties_); + + var counterDescriptors_ = [ + "additive-symbols", "fallback", "negative", "pad", "prefix", "range", + "speak-as", "suffix", "symbols", "system" + ], counterDescriptors = keySet(counterDescriptors_); + + var colorKeywords_ = [ + "aliceblue", "antiquewhite", "aqua", "aquamarine", "azure", "beige", + "bisque", "black", "blanchedalmond", "blue", "blueviolet", "brown", + "burlywood", "cadetblue", "chartreuse", "chocolate", "coral", "cornflowerblue", + "cornsilk", "crimson", "cyan", "darkblue", "darkcyan", "darkgoldenrod", + "darkgray", "darkgreen", "darkgrey", "darkkhaki", "darkmagenta", "darkolivegreen", + "darkorange", "darkorchid", "darkred", "darksalmon", "darkseagreen", + "darkslateblue", "darkslategray", "darkslategrey", "darkturquoise", "darkviolet", + "deeppink", "deepskyblue", "dimgray", "dimgrey", "dodgerblue", "firebrick", + "floralwhite", "forestgreen", "fuchsia", "gainsboro", "ghostwhite", + "gold", "goldenrod", "gray", "grey", "green", "greenyellow", "honeydew", + "hotpink", "indianred", "indigo", "ivory", "khaki", "lavender", + "lavenderblush", "lawngreen", "lemonchiffon", "lightblue", "lightcoral", + "lightcyan", "lightgoldenrodyellow", "lightgray", "lightgreen", "lightgrey", "lightpink", + "lightsalmon", "lightseagreen", "lightskyblue", "lightslategray", "lightslategrey", + "lightsteelblue", "lightyellow", "lime", "limegreen", "linen", "magenta", + "maroon", "mediumaquamarine", "mediumblue", "mediumorchid", "mediumpurple", + "mediumseagreen", "mediumslateblue", "mediumspringgreen", "mediumturquoise", + "mediumvioletred", "midnightblue", "mintcream", "mistyrose", "moccasin", + "navajowhite", "navy", "oldlace", "olive", "olivedrab", "orange", "orangered", + "orchid", "palegoldenrod", "palegreen", "paleturquoise", "palevioletred", + "papayawhip", "peachpuff", "peru", "pink", "plum", "powderblue", + "purple", "rebeccapurple", "red", "rosybrown", "royalblue", "saddlebrown", + "salmon", "sandybrown", "seagreen", "seashell", "sienna", "silver", "skyblue", + "slateblue", "slategray", "slategrey", "snow", "springgreen", "steelblue", "tan", + "teal", "thistle", "tomato", "turquoise", "violet", "wheat", "white", + "whitesmoke", "yellow", "yellowgreen" + ], colorKeywords = keySet(colorKeywords_); + + var valueKeywords_ = [ + "above", "absolute", "activeborder", "additive", "activecaption", "afar", + "after-white-space", "ahead", "alias", "all", "all-scroll", "alphabetic", "alternate", + "always", "amharic", "amharic-abegede", "antialiased", "appworkspace", + "arabic-indic", "armenian", "asterisks", "attr", "auto", "auto-flow", "avoid", "avoid-column", "avoid-page", + "avoid-region", "axis-pan", "background", "backwards", "baseline", "below", "bidi-override", "binary", + "bengali", "blink", "block", "block-axis", "blur", "bold", "bolder", "border", "border-box", + "both", "bottom", "break", "break-all", "break-word", "brightness", "bullets", "button", + "buttonface", "buttonhighlight", "buttonshadow", "buttontext", "calc", "cambodian", + "capitalize", "caps-lock-indicator", "caption", "captiontext", "caret", + "cell", "center", "checkbox", "circle", "cjk-decimal", "cjk-earthly-branch", + "cjk-heavenly-stem", "cjk-ideographic", "clear", "clip", "close-quote", + "col-resize", "collapse", "color", "color-burn", "color-dodge", "column", "column-reverse", + "compact", "condensed", "conic-gradient", "contain", "content", "contents", + "content-box", "context-menu", "continuous", "contrast", "copy", "counter", "counters", "cover", "crop", + "cross", "crosshair", "cubic-bezier", "currentcolor", "cursive", "cyclic", "darken", "dashed", "decimal", + "decimal-leading-zero", "default", "default-button", "dense", "destination-atop", + "destination-in", "destination-out", "destination-over", "devanagari", "difference", + "disc", "discard", "disclosure-closed", "disclosure-open", "document", + "dot-dash", "dot-dot-dash", + "dotted", "double", "down", "drop-shadow", "e-resize", "ease", "ease-in", "ease-in-out", "ease-out", + "element", "ellipse", "ellipsis", "embed", "end", "ethiopic", "ethiopic-abegede", + "ethiopic-abegede-am-et", "ethiopic-abegede-gez", "ethiopic-abegede-ti-er", + "ethiopic-abegede-ti-et", "ethiopic-halehame-aa-er", + "ethiopic-halehame-aa-et", "ethiopic-halehame-am-et", + "ethiopic-halehame-gez", "ethiopic-halehame-om-et", + "ethiopic-halehame-sid-et", "ethiopic-halehame-so-et", + "ethiopic-halehame-ti-er", "ethiopic-halehame-ti-et", "ethiopic-halehame-tig", + "ethiopic-numeric", "ew-resize", "exclusion", "expanded", "extends", "extra-condensed", + "extra-expanded", "fantasy", "fast", "fill", "fill-box", "fixed", "flat", "flex", "flex-end", "flex-start", "footnotes", + "forwards", "from", "geometricPrecision", "georgian", "grayscale", "graytext", "grid", "groove", + "gujarati", "gurmukhi", "hand", "hangul", "hangul-consonant", "hard-light", "hebrew", + "help", "hidden", "hide", "higher", "highlight", "highlighttext", + "hiragana", "hiragana-iroha", "horizontal", "hsl", "hsla", "hue", "hue-rotate", "icon", "ignore", + "inactiveborder", "inactivecaption", "inactivecaptiontext", "infinite", + "infobackground", "infotext", "inherit", "initial", "inline", "inline-axis", + "inline-block", "inline-flex", "inline-grid", "inline-table", "inset", "inside", "intrinsic", "invert", + "italic", "japanese-formal", "japanese-informal", "justify", "kannada", + "katakana", "katakana-iroha", "keep-all", "khmer", + "korean-hangul-formal", "korean-hanja-formal", "korean-hanja-informal", + "landscape", "lao", "large", "larger", "left", "level", "lighter", "lighten", + "line-through", "linear", "linear-gradient", "lines", "list-item", "listbox", "listitem", + "local", "logical", "loud", "lower", "lower-alpha", "lower-armenian", + "lower-greek", "lower-hexadecimal", "lower-latin", "lower-norwegian", + "lower-roman", "lowercase", "ltr", "luminosity", "malayalam", "manipulation", "match", "matrix", "matrix3d", + "media-play-button", "media-slider", "media-sliderthumb", + "media-volume-slider", "media-volume-sliderthumb", "medium", + "menu", "menulist", "menulist-button", + "menutext", "message-box", "middle", "min-intrinsic", + "mix", "mongolian", "monospace", "move", "multiple", "multiple_mask_images", "multiply", "myanmar", "n-resize", + "narrower", "ne-resize", "nesw-resize", "no-close-quote", "no-drop", + "no-open-quote", "no-repeat", "none", "normal", "not-allowed", "nowrap", + "ns-resize", "numbers", "numeric", "nw-resize", "nwse-resize", "oblique", "octal", "opacity", "open-quote", + "optimizeLegibility", "optimizeSpeed", "oriya", "oromo", "outset", + "outside", "outside-shape", "overlay", "overline", "padding", "padding-box", + "painted", "page", "paused", "persian", "perspective", "pinch-zoom", "plus-darker", "plus-lighter", + "pointer", "polygon", "portrait", "pre", "pre-line", "pre-wrap", "preserve-3d", + "progress", "push-button", "radial-gradient", "radio", "read-only", + "read-write", "read-write-plaintext-only", "rectangle", "region", + "relative", "repeat", "repeating-linear-gradient", "repeating-radial-gradient", + "repeating-conic-gradient", "repeat-x", "repeat-y", "reset", "reverse", + "rgb", "rgba", "ridge", "right", "rotate", "rotate3d", "rotateX", "rotateY", + "rotateZ", "round", "row", "row-resize", "row-reverse", "rtl", "run-in", "running", + "s-resize", "sans-serif", "saturate", "saturation", "scale", "scale3d", "scaleX", "scaleY", "scaleZ", "screen", + "scroll", "scrollbar", "scroll-position", "se-resize", "searchfield", + "searchfield-cancel-button", "searchfield-decoration", + "searchfield-results-button", "searchfield-results-decoration", "self-start", "self-end", + "semi-condensed", "semi-expanded", "separate", "sepia", "serif", "show", "sidama", + "simp-chinese-formal", "simp-chinese-informal", "single", + "skew", "skewX", "skewY", "skip-white-space", "slide", "slider-horizontal", + "slider-vertical", "sliderthumb-horizontal", "sliderthumb-vertical", "slow", + "small", "small-caps", "small-caption", "smaller", "soft-light", "solid", "somali", + "source-atop", "source-in", "source-out", "source-over", "space", "space-around", "space-between", "space-evenly", "spell-out", "square", + "square-button", "start", "static", "status-bar", "stretch", "stroke", "stroke-box", "sub", + "subpixel-antialiased", "svg_masks", "super", "sw-resize", "symbolic", "symbols", "system-ui", "table", + "table-caption", "table-cell", "table-column", "table-column-group", + "table-footer-group", "table-header-group", "table-row", "table-row-group", + "tamil", + "telugu", "text", "text-bottom", "text-top", "textarea", "textfield", "thai", + "thick", "thin", "threeddarkshadow", "threedface", "threedhighlight", + "threedlightshadow", "threedshadow", "tibetan", "tigre", "tigrinya-er", + "tigrinya-er-abegede", "tigrinya-et", "tigrinya-et-abegede", "to", "top", + "trad-chinese-formal", "trad-chinese-informal", "transform", + "translate", "translate3d", "translateX", "translateY", "translateZ", + "transparent", "ultra-condensed", "ultra-expanded", "underline", "unidirectional-pan", "unset", "up", + "upper-alpha", "upper-armenian", "upper-greek", "upper-hexadecimal", + "upper-latin", "upper-norwegian", "upper-roman", "uppercase", "urdu", "url", + "var", "vertical", "vertical-text", "view-box", "visible", "visibleFill", "visiblePainted", + "visibleStroke", "visual", "w-resize", "wait", "wave", "wider", + "window", "windowframe", "windowtext", "words", "wrap", "wrap-reverse", "x-large", "x-small", "xor", + "xx-large", "xx-small" + ], valueKeywords = keySet(valueKeywords_); + + var allWords = documentTypes_.concat(mediaTypes_).concat(mediaFeatures_).concat(mediaValueKeywords_) + .concat(propertyKeywords_).concat(nonStandardPropertyKeywords_).concat(colorKeywords_) + .concat(valueKeywords_); + CodeMirror.registerHelper("hintWords", "css", allWords); + + function tokenCComment(stream, state) { + var maybeEnd = false, ch; + while ((ch = stream.next()) != null) { + if (maybeEnd && ch == "/") { + state.tokenize = null; + break; + } + maybeEnd = (ch == "*"); + } + return ["comment", "comment"]; + } + + CodeMirror.defineMIME("text/css", { + documentTypes: documentTypes, + mediaTypes: mediaTypes, + mediaFeatures: mediaFeatures, + mediaValueKeywords: mediaValueKeywords, + propertyKeywords: propertyKeywords, + nonStandardPropertyKeywords: nonStandardPropertyKeywords, + fontProperties: fontProperties, + counterDescriptors: counterDescriptors, + colorKeywords: colorKeywords, + valueKeywords: valueKeywords, + tokenHooks: { + "/": function(stream, state) { + if (!stream.eat("*")) return false; + state.tokenize = tokenCComment; + return tokenCComment(stream, state); + } + }, + name: "css" + }); + + CodeMirror.defineMIME("text/x-scss", { + mediaTypes: mediaTypes, + mediaFeatures: mediaFeatures, + mediaValueKeywords: mediaValueKeywords, + propertyKeywords: propertyKeywords, + nonStandardPropertyKeywords: nonStandardPropertyKeywords, + colorKeywords: colorKeywords, + valueKeywords: valueKeywords, + fontProperties: fontProperties, + allowNested: true, + lineComment: "//", + tokenHooks: { + "/": function(stream, state) { + if (stream.eat("/")) { + stream.skipToEnd(); + return ["comment", "comment"]; + } else if (stream.eat("*")) { + state.tokenize = tokenCComment; + return tokenCComment(stream, state); + } else { + return ["operator", "operator"]; + } + }, + ":": function(stream) { + if (stream.match(/^\s*\{/, false)) + return [null, null] + return false; + }, + "$": function(stream) { + stream.match(/^[\w-]+/); + if (stream.match(/^\s*:/, false)) + return ["variable-2", "variable-definition"]; + return ["variable-2", "variable"]; + }, + "#": function(stream) { + if (!stream.eat("{")) return false; + return [null, "interpolation"]; + } + }, + name: "css", + helperType: "scss" + }); + + CodeMirror.defineMIME("text/x-less", { + mediaTypes: mediaTypes, + mediaFeatures: mediaFeatures, + mediaValueKeywords: mediaValueKeywords, + propertyKeywords: propertyKeywords, + nonStandardPropertyKeywords: nonStandardPropertyKeywords, + colorKeywords: colorKeywords, + valueKeywords: valueKeywords, + fontProperties: fontProperties, + allowNested: true, + lineComment: "//", + tokenHooks: { + "/": function(stream, state) { + if (stream.eat("/")) { + stream.skipToEnd(); + return ["comment", "comment"]; + } else if (stream.eat("*")) { + state.tokenize = tokenCComment; + return tokenCComment(stream, state); + } else { + return ["operator", "operator"]; + } + }, + "@": function(stream) { + if (stream.eat("{")) return [null, "interpolation"]; + if (stream.match(/^(charset|document|font-face|import|(-(moz|ms|o|webkit)-)?keyframes|media|namespace|page|supports)\b/i, false)) return false; + stream.eatWhile(/[\w\\\-]/); + if (stream.match(/^\s*:/, false)) + return ["variable-2", "variable-definition"]; + return ["variable-2", "variable"]; + }, + "&": function() { + return ["atom", "atom"]; + } + }, + name: "css", + helperType: "less" + }); + + CodeMirror.defineMIME("text/x-gss", { + documentTypes: documentTypes, + mediaTypes: mediaTypes, + mediaFeatures: mediaFeatures, + propertyKeywords: propertyKeywords, + nonStandardPropertyKeywords: nonStandardPropertyKeywords, + fontProperties: fontProperties, + counterDescriptors: counterDescriptors, + colorKeywords: colorKeywords, + valueKeywords: valueKeywords, + supportsAtComponent: true, + tokenHooks: { + "/": function(stream, state) { + if (!stream.eat("*")) return false; + state.tokenize = tokenCComment; + return tokenCComment(stream, state); + } + }, + name: "css", + helperType: "gss" + }); + +}); diff --git a/assets/addons/codemirror/theme/monokai.css b/assets/addons/codemirror/theme/monokai.css new file mode 100644 index 0000000..6e04eb6 --- /dev/null +++ b/assets/addons/codemirror/theme/monokai.css @@ -0,0 +1,42 @@ +/* Based on Sublime Text's Monokai theme */ + +.cm-s-monokai.CodeMirror { background: #272822; color: #f8f8f2; } +.cm-s-monokai div.CodeMirror-selected { background: #49483E; } +.cm-s-monokai .CodeMirror-line::selection, .cm-s-monokai .CodeMirror-line > span::selection, .cm-s-monokai .CodeMirror-line > span > span::selection { background: rgba(73, 72, 62, .99); } +.cm-s-monokai .CodeMirror-line::-moz-selection, .cm-s-monokai .CodeMirror-line > span::-moz-selection, .cm-s-monokai .CodeMirror-line > span > span::-moz-selection { background: rgba(73, 72, 62, .99); } +.cm-s-monokai .CodeMirror-gutters { background: #272822; border-right: 0; } +.cm-s-monokai .CodeMirror-guttermarker { color: white; } +.cm-s-monokai .CodeMirror-guttermarker-subtle { color: #d0d0d0; } +.cm-s-monokai .CodeMirror-linenumber { color: #d0d0d0; } +.cm-s-monokai .CodeMirror-cursor { border-left: 1px solid #f8f8f0; } + +.cm-s-monokai span.cm-comment { color: #c9c9c9; } +.cm-s-monokai span.cm-atom { color: #ae81ff; } +.cm-s-monokai span.cm-number { color: #ae81ff; } + +.cm-s-monokai span.cm-comment.cm-attribute { color: #97b757; } +.cm-s-monokai span.cm-comment.cm-def { color: #bc9262; } +.cm-s-monokai span.cm-comment.cm-tag { color: #bc6283; } +.cm-s-monokai span.cm-comment.cm-type { color: #5998a6; } + +.cm-s-monokai span.cm-property, .cm-s-monokai span.cm-attribute { color: #a6e22e; } +.cm-s-monokai span.cm-keyword { color: #f92672; } +.cm-s-monokai span.cm-builtin { color: #66d9ef; } +.cm-s-monokai span.cm-qualifier { color: #66d9ef; } +.cm-s-monokai span.cm-string { color: #e6db74; } + +.cm-s-monokai span.cm-variable { color: #f8f8f2; } +.cm-s-monokai span.cm-variable-2 { color: #9effff; } +.cm-s-monokai span.cm-variable-3, .cm-s-monokai span.cm-type { color: #66d9ef; } +.cm-s-monokai span.cm-def { color: #fd971f; } +.cm-s-monokai span.cm-bracket { color: #f8f8f2; } +.cm-s-monokai span.cm-tag { color: #f92672; } +.cm-s-monokai span.cm-header { color: #ae81ff; } +.cm-s-monokai span.cm-link { color: #ae81ff; } +.cm-s-monokai span.cm-error { background: #f92672; color: #f8f8f0; } + +.cm-s-monokai .CodeMirror-activeline-background { background: #373831; } +.cm-s-monokai .CodeMirror-matchingbracket { + text-decoration: underline; + color: white !important; +} diff --git a/assets/css/library/fontawesome-all.css b/assets/css/library/fontawesome-all.css new file mode 100644 index 0000000..1893247 --- /dev/null +++ b/assets/css/library/fontawesome-all.css @@ -0,0 +1,8003 @@ +/*! + * Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2023 Fonticons, Inc. + */ +.fa { + font-family: var(--fa-style-family, "Font Awesome 6 Free"); + font-weight: var(--fa-style, 900); } + +.fa, +.fa-classic, +.fa-sharp, +.fas, +.fa-solid, +.far, +.fa-regular, +.fab, +.fa-brands { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + display: var(--fa-display, inline-block); + font-style: normal; + font-variant: normal; + line-height: 1; + text-rendering: auto; } + +.fas, +.fa-classic, +.fa-solid, +.far, +.fa-regular { + font-family: 'Font Awesome 6 Free'; } + +.fab, +.fa-brands { + font-family: 'Font Awesome 6 Brands'; } + +.fa-1x { + font-size: 1em; } + +.fa-2x { + font-size: 2em; } + +.fa-3x { + font-size: 3em; } + +.fa-4x { + font-size: 4em; } + +.fa-5x { + font-size: 5em; } + +.fa-6x { + font-size: 6em; } + +.fa-7x { + font-size: 7em; } + +.fa-8x { + font-size: 8em; } + +.fa-9x { + font-size: 9em; } + +.fa-10x { + font-size: 10em; } + +.fa-2xs { + font-size: 0.625em; + line-height: 0.1em; + vertical-align: 0.225em; } + +.fa-xs { + font-size: 0.75em; + line-height: 0.08333em; + vertical-align: 0.125em; } + +.fa-sm { + font-size: 0.875em; + line-height: 0.07143em; + vertical-align: 0.05357em; } + +.fa-lg { + font-size: 1.25em; + line-height: 0.05em; + vertical-align: -0.075em; } + +.fa-xl { + font-size: 1.5em; + line-height: 0.04167em; + vertical-align: -0.125em; } + +.fa-2xl { + font-size: 2em; + line-height: 0.03125em; + vertical-align: -0.1875em; } + +.fa-fw { + text-align: center; + width: 1.25em; } + +.fa-ul { + list-style-type: none; + margin-left: var(--fa-li-margin, 2.5em); + padding-left: 0; } + .fa-ul > li { + position: relative; } + +.fa-li { + left: calc(var(--fa-li-width, 2em) * -1); + position: absolute; + text-align: center; + width: var(--fa-li-width, 2em); + line-height: inherit; } + +.fa-border { + border-color: var(--fa-border-color, #eee); + border-radius: var(--fa-border-radius, 0.1em); + border-style: var(--fa-border-style, solid); + border-width: var(--fa-border-width, 0.08em); + padding: var(--fa-border-padding, 0.2em 0.25em 0.15em); } + +.fa-pull-left { + float: left; + margin-right: var(--fa-pull-margin, 0.3em); } + +.fa-pull-right { + float: right; + margin-left: var(--fa-pull-margin, 0.3em); } + +.fa-beat { + -webkit-animation-name: fa-beat; + animation-name: fa-beat; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out); + animation-timing-function: var(--fa-animation-timing, ease-in-out); } + +.fa-bounce { + -webkit-animation-name: fa-bounce; + animation-name: fa-bounce; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1)); + animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1)); } + +.fa-fade { + -webkit-animation-name: fa-fade; + animation-name: fa-fade; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); + animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); } + +.fa-beat-fade { + -webkit-animation-name: fa-beat-fade; + animation-name: fa-beat-fade; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); + animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); } + +.fa-flip { + -webkit-animation-name: fa-flip; + animation-name: fa-flip; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out); + animation-timing-function: var(--fa-animation-timing, ease-in-out); } + +.fa-shake { + -webkit-animation-name: fa-shake; + animation-name: fa-shake; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, linear); + animation-timing-function: var(--fa-animation-timing, linear); } + +.fa-spin { + -webkit-animation-name: fa-spin; + animation-name: fa-spin; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 2s); + animation-duration: var(--fa-animation-duration, 2s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, linear); + animation-timing-function: var(--fa-animation-timing, linear); } + +.fa-spin-reverse { + --fa-animation-direction: reverse; } + +.fa-pulse, +.fa-spin-pulse { + -webkit-animation-name: fa-spin; + animation-name: fa-spin; + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, steps(8)); + animation-timing-function: var(--fa-animation-timing, steps(8)); } + +@media (prefers-reduced-motion: reduce) { + .fa-beat, + .fa-bounce, + .fa-fade, + .fa-beat-fade, + .fa-flip, + .fa-pulse, + .fa-shake, + .fa-spin, + .fa-spin-pulse { + -webkit-animation-delay: -1ms; + animation-delay: -1ms; + -webkit-animation-duration: 1ms; + animation-duration: 1ms; + -webkit-animation-iteration-count: 1; + animation-iteration-count: 1; + -webkit-transition-delay: 0s; + transition-delay: 0s; + -webkit-transition-duration: 0s; + transition-duration: 0s; } } + +@-webkit-keyframes fa-beat { + 0%, 90% { + -webkit-transform: scale(1); + transform: scale(1); } + 45% { + -webkit-transform: scale(var(--fa-beat-scale, 1.25)); + transform: scale(var(--fa-beat-scale, 1.25)); } } + +@keyframes fa-beat { + 0%, 90% { + -webkit-transform: scale(1); + transform: scale(1); } + 45% { + -webkit-transform: scale(var(--fa-beat-scale, 1.25)); + transform: scale(var(--fa-beat-scale, 1.25)); } } + +@-webkit-keyframes fa-bounce { + 0% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } + 10% { + -webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); + transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); } + 30% { + -webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); + transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); } + 50% { + -webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); + transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); } + 57% { + -webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); + transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); } + 64% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } + 100% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } } + +@keyframes fa-bounce { + 0% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } + 10% { + -webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); + transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); } + 30% { + -webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); + transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); } + 50% { + -webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); + transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); } + 57% { + -webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); + transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); } + 64% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } + 100% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } } + +@-webkit-keyframes fa-fade { + 50% { + opacity: var(--fa-fade-opacity, 0.4); } } + +@keyframes fa-fade { + 50% { + opacity: var(--fa-fade-opacity, 0.4); } } + +@-webkit-keyframes fa-beat-fade { + 0%, 100% { + opacity: var(--fa-beat-fade-opacity, 0.4); + -webkit-transform: scale(1); + transform: scale(1); } + 50% { + opacity: 1; + -webkit-transform: scale(var(--fa-beat-fade-scale, 1.125)); + transform: scale(var(--fa-beat-fade-scale, 1.125)); } } + +@keyframes fa-beat-fade { + 0%, 100% { + opacity: var(--fa-beat-fade-opacity, 0.4); + -webkit-transform: scale(1); + transform: scale(1); } + 50% { + opacity: 1; + -webkit-transform: scale(var(--fa-beat-fade-scale, 1.125)); + transform: scale(var(--fa-beat-fade-scale, 1.125)); } } + +@-webkit-keyframes fa-flip { + 50% { + -webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); + transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); } } + +@keyframes fa-flip { + 50% { + -webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); + transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); } } + +@-webkit-keyframes fa-shake { + 0% { + -webkit-transform: rotate(-15deg); + transform: rotate(-15deg); } + 4% { + -webkit-transform: rotate(15deg); + transform: rotate(15deg); } + 8%, 24% { + -webkit-transform: rotate(-18deg); + transform: rotate(-18deg); } + 12%, 28% { + -webkit-transform: rotate(18deg); + transform: rotate(18deg); } + 16% { + -webkit-transform: rotate(-22deg); + transform: rotate(-22deg); } + 20% { + -webkit-transform: rotate(22deg); + transform: rotate(22deg); } + 32% { + -webkit-transform: rotate(-12deg); + transform: rotate(-12deg); } + 36% { + -webkit-transform: rotate(12deg); + transform: rotate(12deg); } + 40%, 100% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } } + +@keyframes fa-shake { + 0% { + -webkit-transform: rotate(-15deg); + transform: rotate(-15deg); } + 4% { + -webkit-transform: rotate(15deg); + transform: rotate(15deg); } + 8%, 24% { + -webkit-transform: rotate(-18deg); + transform: rotate(-18deg); } + 12%, 28% { + -webkit-transform: rotate(18deg); + transform: rotate(18deg); } + 16% { + -webkit-transform: rotate(-22deg); + transform: rotate(-22deg); } + 20% { + -webkit-transform: rotate(22deg); + transform: rotate(22deg); } + 32% { + -webkit-transform: rotate(-12deg); + transform: rotate(-12deg); } + 36% { + -webkit-transform: rotate(12deg); + transform: rotate(12deg); } + 40%, 100% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } } + +@-webkit-keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +@keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +.fa-rotate-90 { + -webkit-transform: rotate(90deg); + transform: rotate(90deg); } + +.fa-rotate-180 { + -webkit-transform: rotate(180deg); + transform: rotate(180deg); } + +.fa-rotate-270 { + -webkit-transform: rotate(270deg); + transform: rotate(270deg); } + +.fa-flip-horizontal { + -webkit-transform: scale(-1, 1); + transform: scale(-1, 1); } + +.fa-flip-vertical { + -webkit-transform: scale(1, -1); + transform: scale(1, -1); } + +.fa-flip-both, +.fa-flip-horizontal.fa-flip-vertical { + -webkit-transform: scale(-1, -1); + transform: scale(-1, -1); } + +.fa-rotate-by { + -webkit-transform: rotate(var(--fa-rotate-angle, none)); + transform: rotate(var(--fa-rotate-angle, none)); } + +.fa-stack { + display: inline-block; + height: 2em; + line-height: 2em; + position: relative; + vertical-align: middle; + width: 2.5em; } + +.fa-stack-1x, +.fa-stack-2x { + left: 0; + position: absolute; + text-align: center; + width: 100%; + z-index: var(--fa-stack-z-index, auto); } + +.fa-stack-1x { + line-height: inherit; } + +.fa-stack-2x { + font-size: 2em; } + +.fa-inverse { + color: var(--fa-inverse, #fff); } + +/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen +readers do not read off random characters that represent icons */ + +.fa-0::before { + content: "\30"; } + +.fa-1::before { + content: "\31"; } + +.fa-2::before { + content: "\32"; } + +.fa-3::before { + content: "\33"; } + +.fa-4::before { + content: "\34"; } + +.fa-5::before { + content: "\35"; } + +.fa-6::before { + content: "\36"; } + +.fa-7::before { + content: "\37"; } + +.fa-8::before { + content: "\38"; } + +.fa-9::before { + content: "\39"; } + +.fa-fill-drip::before { + content: "\f576"; } + +.fa-arrows-to-circle::before { + content: "\e4bd"; } + +.fa-circle-chevron-right::before { + content: "\f138"; } + +.fa-chevron-circle-right::before { + content: "\f138"; } + +.fa-at::before { + content: "\40"; } + +.fa-trash-can::before { + content: "\f2ed"; } + +.fa-trash-alt::before { + content: "\f2ed"; } + +.fa-text-height::before { + content: "\f034"; } + +.fa-user-xmark::before { + content: "\f235"; } + +.fa-user-times::before { + content: "\f235"; } + +.fa-stethoscope::before { + content: "\f0f1"; } + +.fa-message::before { + content: "\f27a"; } + +.fa-comment-alt::before { + content: "\f27a"; } + +.fa-info::before { + content: "\f129"; } + +.fa-down-left-and-up-right-to-center::before { + content: "\f422"; } + +.fa-compress-alt::before { + content: "\f422"; } + +.fa-explosion::before { + content: "\e4e9"; } + +.fa-file-lines::before { + content: "\f15c"; } + +.fa-file-alt::before { + content: "\f15c"; } + +.fa-file-text::before { + content: "\f15c"; } + +.fa-wave-square::before { + content: "\f83e"; } + +.fa-ring::before { + content: "\f70b"; } + +.fa-building-un::before { + content: "\e4d9"; } + +.fa-dice-three::before { + content: "\f527"; } + +.fa-calendar-days::before { + content: "\f073"; } + +.fa-calendar-alt::before { + content: "\f073"; } + +.fa-anchor-circle-check::before { + content: "\e4aa"; } + +.fa-building-circle-arrow-right::before { + content: "\e4d1"; } + +.fa-volleyball::before { + content: "\f45f"; } + +.fa-volleyball-ball::before { + content: "\f45f"; } + +.fa-arrows-up-to-line::before { + content: "\e4c2"; } + +.fa-sort-down::before { + content: "\f0dd"; } + +.fa-sort-desc::before { + content: "\f0dd"; } + +.fa-circle-minus::before { + content: "\f056"; } + +.fa-minus-circle::before { + content: "\f056"; } + +.fa-door-open::before { + content: "\f52b"; } + +.fa-right-from-bracket::before { + content: "\f2f5"; } + +.fa-sign-out-alt::before { + content: "\f2f5"; } + +.fa-atom::before { + content: "\f5d2"; } + +.fa-soap::before { + content: "\e06e"; } + +.fa-icons::before { + content: "\f86d"; } + +.fa-heart-music-camera-bolt::before { + content: "\f86d"; } + +.fa-microphone-lines-slash::before { + content: "\f539"; } + +.fa-microphone-alt-slash::before { + content: "\f539"; } + +.fa-bridge-circle-check::before { + content: "\e4c9"; } + +.fa-pump-medical::before { + content: "\e06a"; } + +.fa-fingerprint::before { + content: "\f577"; } + +.fa-hand-point-right::before { + content: "\f0a4"; } + +.fa-magnifying-glass-location::before { + content: "\f689"; } + +.fa-search-location::before { + content: "\f689"; } + +.fa-forward-step::before { + content: "\f051"; } + +.fa-step-forward::before { + content: "\f051"; } + +.fa-face-smile-beam::before { + content: "\f5b8"; } + +.fa-smile-beam::before { + content: "\f5b8"; } + +.fa-flag-checkered::before { + content: "\f11e"; } + +.fa-football::before { + content: "\f44e"; } + +.fa-football-ball::before { + content: "\f44e"; } + +.fa-school-circle-exclamation::before { + content: "\e56c"; } + +.fa-crop::before { + content: "\f125"; } + +.fa-angles-down::before { + content: "\f103"; } + +.fa-angle-double-down::before { + content: "\f103"; } + +.fa-users-rectangle::before { + content: "\e594"; } + +.fa-people-roof::before { + content: "\e537"; } + +.fa-people-line::before { + content: "\e534"; } + +.fa-beer-mug-empty::before { + content: "\f0fc"; } + +.fa-beer::before { + content: "\f0fc"; } + +.fa-diagram-predecessor::before { + content: "\e477"; } + +.fa-arrow-up-long::before { + content: "\f176"; } + +.fa-long-arrow-up::before { + content: "\f176"; } + +.fa-fire-flame-simple::before { + content: "\f46a"; } + +.fa-burn::before { + content: "\f46a"; } + +.fa-person::before { + content: "\f183"; } + +.fa-male::before { + content: "\f183"; } + +.fa-laptop::before { + content: "\f109"; } + +.fa-file-csv::before { + content: "\f6dd"; } + +.fa-menorah::before { + content: "\f676"; } + +.fa-truck-plane::before { + content: "\e58f"; } + +.fa-record-vinyl::before { + content: "\f8d9"; } + +.fa-face-grin-stars::before { + content: "\f587"; } + +.fa-grin-stars::before { + content: "\f587"; } + +.fa-bong::before { + content: "\f55c"; } + +.fa-spaghetti-monster-flying::before { + content: "\f67b"; } + +.fa-pastafarianism::before { + content: "\f67b"; } + +.fa-arrow-down-up-across-line::before { + content: "\e4af"; } + +.fa-spoon::before { + content: "\f2e5"; } + +.fa-utensil-spoon::before { + content: "\f2e5"; } + +.fa-jar-wheat::before { + content: "\e517"; } + +.fa-envelopes-bulk::before { + content: "\f674"; } + +.fa-mail-bulk::before { + content: "\f674"; } + +.fa-file-circle-exclamation::before { + content: "\e4eb"; } + +.fa-circle-h::before { + content: "\f47e"; } + +.fa-hospital-symbol::before { + content: "\f47e"; } + +.fa-pager::before { + content: "\f815"; } + +.fa-address-book::before { + content: "\f2b9"; } + +.fa-contact-book::before { + content: "\f2b9"; } + +.fa-strikethrough::before { + content: "\f0cc"; } + +.fa-k::before { + content: "\4b"; } + +.fa-landmark-flag::before { + content: "\e51c"; } + +.fa-pencil::before { + content: "\f303"; } + +.fa-pencil-alt::before { + content: "\f303"; } + +.fa-backward::before { + content: "\f04a"; } + +.fa-caret-right::before { + content: "\f0da"; } + +.fa-comments::before { + content: "\f086"; } + +.fa-paste::before { + content: "\f0ea"; } + +.fa-file-clipboard::before { + content: "\f0ea"; } + +.fa-code-pull-request::before { + content: "\e13c"; } + +.fa-clipboard-list::before { + content: "\f46d"; } + +.fa-truck-ramp-box::before { + content: "\f4de"; } + +.fa-truck-loading::before { + content: "\f4de"; } + +.fa-user-check::before { + content: "\f4fc"; } + +.fa-vial-virus::before { + content: "\e597"; } + +.fa-sheet-plastic::before { + content: "\e571"; } + +.fa-blog::before { + content: "\f781"; } + +.fa-user-ninja::before { + content: "\f504"; } + +.fa-person-arrow-up-from-line::before { + content: "\e539"; } + +.fa-scroll-torah::before { + content: "\f6a0"; } + +.fa-torah::before { + content: "\f6a0"; } + +.fa-broom-ball::before { + content: "\f458"; } + +.fa-quidditch::before { + content: "\f458"; } + +.fa-quidditch-broom-ball::before { + content: "\f458"; } + +.fa-toggle-off::before { + content: "\f204"; } + +.fa-box-archive::before { + content: "\f187"; } + +.fa-archive::before { + content: "\f187"; } + +.fa-person-drowning::before { + content: "\e545"; } + +.fa-arrow-down-9-1::before { + content: "\f886"; } + +.fa-sort-numeric-desc::before { + content: "\f886"; } + +.fa-sort-numeric-down-alt::before { + content: "\f886"; } + +.fa-face-grin-tongue-squint::before { + content: "\f58a"; } + +.fa-grin-tongue-squint::before { + content: "\f58a"; } + +.fa-spray-can::before { + content: "\f5bd"; } + +.fa-truck-monster::before { + content: "\f63b"; } + +.fa-w::before { + content: "\57"; } + +.fa-earth-africa::before { + content: "\f57c"; } + +.fa-globe-africa::before { + content: "\f57c"; } + +.fa-rainbow::before { + content: "\f75b"; } + +.fa-circle-notch::before { + content: "\f1ce"; } + +.fa-tablet-screen-button::before { + content: "\f3fa"; } + +.fa-tablet-alt::before { + content: "\f3fa"; } + +.fa-paw::before { + content: "\f1b0"; } + +.fa-cloud::before { + content: "\f0c2"; } + +.fa-trowel-bricks::before { + content: "\e58a"; } + +.fa-face-flushed::before { + content: "\f579"; } + +.fa-flushed::before { + content: "\f579"; } + +.fa-hospital-user::before { + content: "\f80d"; } + +.fa-tent-arrow-left-right::before { + content: "\e57f"; } + +.fa-gavel::before { + content: "\f0e3"; } + +.fa-legal::before { + content: "\f0e3"; } + +.fa-binoculars::before { + content: "\f1e5"; } + +.fa-microphone-slash::before { + content: "\f131"; } + +.fa-box-tissue::before { + content: "\e05b"; } + +.fa-motorcycle::before { + content: "\f21c"; } + +.fa-bell-concierge::before { + content: "\f562"; } + +.fa-concierge-bell::before { + content: "\f562"; } + +.fa-pen-ruler::before { + content: "\f5ae"; } + +.fa-pencil-ruler::before { + content: "\f5ae"; } + +.fa-people-arrows::before { + content: "\e068"; } + +.fa-people-arrows-left-right::before { + content: "\e068"; } + +.fa-mars-and-venus-burst::before { + content: "\e523"; } + +.fa-square-caret-right::before { + content: "\f152"; } + +.fa-caret-square-right::before { + content: "\f152"; } + +.fa-scissors::before { + content: "\f0c4"; } + +.fa-cut::before { + content: "\f0c4"; } + +.fa-sun-plant-wilt::before { + content: "\e57a"; } + +.fa-toilets-portable::before { + content: "\e584"; } + +.fa-hockey-puck::before { + content: "\f453"; } + +.fa-table::before { + content: "\f0ce"; } + +.fa-magnifying-glass-arrow-right::before { + content: "\e521"; } + +.fa-tachograph-digital::before { + content: "\f566"; } + +.fa-digital-tachograph::before { + content: "\f566"; } + +.fa-users-slash::before { + content: "\e073"; } + +.fa-clover::before { + content: "\e139"; } + +.fa-reply::before { + content: "\f3e5"; } + +.fa-mail-reply::before { + content: "\f3e5"; } + +.fa-star-and-crescent::before { + content: "\f699"; } + +.fa-house-fire::before { + content: "\e50c"; } + +.fa-square-minus::before { + content: "\f146"; } + +.fa-minus-square::before { + content: "\f146"; } + +.fa-helicopter::before { + content: "\f533"; } + +.fa-compass::before { + content: "\f14e"; } + +.fa-square-caret-down::before { + content: "\f150"; } + +.fa-caret-square-down::before { + content: "\f150"; } + +.fa-file-circle-question::before { + content: "\e4ef"; } + +.fa-laptop-code::before { + content: "\f5fc"; } + +.fa-swatchbook::before { + content: "\f5c3"; } + +.fa-prescription-bottle::before { + content: "\f485"; } + +.fa-bars::before { + content: "\f0c9"; } + +.fa-navicon::before { + content: "\f0c9"; } + +.fa-people-group::before { + content: "\e533"; } + +.fa-hourglass-end::before { + content: "\f253"; } + +.fa-hourglass-3::before { + content: "\f253"; } + +.fa-heart-crack::before { + content: "\f7a9"; } + +.fa-heart-broken::before { + content: "\f7a9"; } + +.fa-square-up-right::before { + content: "\f360"; } + +.fa-external-link-square-alt::before { + content: "\f360"; } + +.fa-face-kiss-beam::before { + content: "\f597"; } + +.fa-kiss-beam::before { + content: "\f597"; } + +.fa-film::before { + content: "\f008"; } + +.fa-ruler-horizontal::before { + content: "\f547"; } + +.fa-people-robbery::before { + content: "\e536"; } + +.fa-lightbulb::before { + content: "\f0eb"; } + +.fa-caret-left::before { + content: "\f0d9"; } + +.fa-circle-exclamation::before { + content: "\f06a"; } + +.fa-exclamation-circle::before { + content: "\f06a"; } + +.fa-school-circle-xmark::before { + content: "\e56d"; } + +.fa-arrow-right-from-bracket::before { + content: "\f08b"; } + +.fa-sign-out::before { + content: "\f08b"; } + +.fa-circle-chevron-down::before { + content: "\f13a"; } + +.fa-chevron-circle-down::before { + content: "\f13a"; } + +.fa-unlock-keyhole::before { + content: "\f13e"; } + +.fa-unlock-alt::before { + content: "\f13e"; } + +.fa-cloud-showers-heavy::before { + content: "\f740"; } + +.fa-headphones-simple::before { + content: "\f58f"; } + +.fa-headphones-alt::before { + content: "\f58f"; } + +.fa-sitemap::before { + content: "\f0e8"; } + +.fa-circle-dollar-to-slot::before { + content: "\f4b9"; } + +.fa-donate::before { + content: "\f4b9"; } + +.fa-memory::before { + content: "\f538"; } + +.fa-road-spikes::before { + content: "\e568"; } + +.fa-fire-burner::before { + content: "\e4f1"; } + +.fa-flag::before { + content: "\f024"; } + +.fa-hanukiah::before { + content: "\f6e6"; } + +.fa-feather::before { + content: "\f52d"; } + +.fa-volume-low::before { + content: "\f027"; } + +.fa-volume-down::before { + content: "\f027"; } + +.fa-comment-slash::before { + content: "\f4b3"; } + +.fa-cloud-sun-rain::before { + content: "\f743"; } + +.fa-compress::before { + content: "\f066"; } + +.fa-wheat-awn::before { + content: "\e2cd"; } + +.fa-wheat-alt::before { + content: "\e2cd"; } + +.fa-ankh::before { + content: "\f644"; } + +.fa-hands-holding-child::before { + content: "\e4fa"; } + +.fa-asterisk::before { + content: "\2a"; } + +.fa-square-check::before { + content: "\f14a"; } + +.fa-check-square::before { + content: "\f14a"; } + +.fa-peseta-sign::before { + content: "\e221"; } + +.fa-heading::before { + content: "\f1dc"; } + +.fa-header::before { + content: "\f1dc"; } + +.fa-ghost::before { + content: "\f6e2"; } + +.fa-list::before { + content: "\f03a"; } + +.fa-list-squares::before { + content: "\f03a"; } + +.fa-square-phone-flip::before { + content: "\f87b"; } + +.fa-phone-square-alt::before { + content: "\f87b"; } + +.fa-cart-plus::before { + content: "\f217"; } + +.fa-gamepad::before { + content: "\f11b"; } + +.fa-circle-dot::before { + content: "\f192"; } + +.fa-dot-circle::before { + content: "\f192"; } + +.fa-face-dizzy::before { + content: "\f567"; } + +.fa-dizzy::before { + content: "\f567"; } + +.fa-egg::before { + content: "\f7fb"; } + +.fa-house-medical-circle-xmark::before { + content: "\e513"; } + +.fa-campground::before { + content: "\f6bb"; } + +.fa-folder-plus::before { + content: "\f65e"; } + +.fa-futbol::before { + content: "\f1e3"; } + +.fa-futbol-ball::before { + content: "\f1e3"; } + +.fa-soccer-ball::before { + content: "\f1e3"; } + +.fa-paintbrush::before { + content: "\f1fc"; } + +.fa-paint-brush::before { + content: "\f1fc"; } + +.fa-lock::before { + content: "\f023"; } + +.fa-gas-pump::before { + content: "\f52f"; } + +.fa-hot-tub-person::before { + content: "\f593"; } + +.fa-hot-tub::before { + content: "\f593"; } + +.fa-map-location::before { + content: "\f59f"; } + +.fa-map-marked::before { + content: "\f59f"; } + +.fa-house-flood-water::before { + content: "\e50e"; } + +.fa-tree::before { + content: "\f1bb"; } + +.fa-bridge-lock::before { + content: "\e4cc"; } + +.fa-sack-dollar::before { + content: "\f81d"; } + +.fa-pen-to-square::before { + content: "\f044"; } + +.fa-edit::before { + content: "\f044"; } + +.fa-car-side::before { + content: "\f5e4"; } + +.fa-share-nodes::before { + content: "\f1e0"; } + +.fa-share-alt::before { + content: "\f1e0"; } + +.fa-heart-circle-minus::before { + content: "\e4ff"; } + +.fa-hourglass-half::before { + content: "\f252"; } + +.fa-hourglass-2::before { + content: "\f252"; } + +.fa-microscope::before { + content: "\f610"; } + +.fa-sink::before { + content: "\e06d"; } + +.fa-bag-shopping::before { + content: "\f290"; } + +.fa-shopping-bag::before { + content: "\f290"; } + +.fa-arrow-down-z-a::before { + content: "\f881"; } + +.fa-sort-alpha-desc::before { + content: "\f881"; } + +.fa-sort-alpha-down-alt::before { + content: "\f881"; } + +.fa-mitten::before { + content: "\f7b5"; } + +.fa-person-rays::before { + content: "\e54d"; } + +.fa-users::before { + content: "\f0c0"; } + +.fa-eye-slash::before { + content: "\f070"; } + +.fa-flask-vial::before { + content: "\e4f3"; } + +.fa-hand::before { + content: "\f256"; } + +.fa-hand-paper::before { + content: "\f256"; } + +.fa-om::before { + content: "\f679"; } + +.fa-worm::before { + content: "\e599"; } + +.fa-house-circle-xmark::before { + content: "\e50b"; } + +.fa-plug::before { + content: "\f1e6"; } + +.fa-chevron-up::before { + content: "\f077"; } + +.fa-hand-spock::before { + content: "\f259"; } + +.fa-stopwatch::before { + content: "\f2f2"; } + +.fa-face-kiss::before { + content: "\f596"; } + +.fa-kiss::before { + content: "\f596"; } + +.fa-bridge-circle-xmark::before { + content: "\e4cb"; } + +.fa-face-grin-tongue::before { + content: "\f589"; } + +.fa-grin-tongue::before { + content: "\f589"; } + +.fa-chess-bishop::before { + content: "\f43a"; } + +.fa-face-grin-wink::before { + content: "\f58c"; } + +.fa-grin-wink::before { + content: "\f58c"; } + +.fa-ear-deaf::before { + content: "\f2a4"; } + +.fa-deaf::before { + content: "\f2a4"; } + +.fa-deafness::before { + content: "\f2a4"; } + +.fa-hard-of-hearing::before { + content: "\f2a4"; } + +.fa-road-circle-check::before { + content: "\e564"; } + +.fa-dice-five::before { + content: "\f523"; } + +.fa-square-rss::before { + content: "\f143"; } + +.fa-rss-square::before { + content: "\f143"; } + +.fa-land-mine-on::before { + content: "\e51b"; } + +.fa-i-cursor::before { + content: "\f246"; } + +.fa-stamp::before { + content: "\f5bf"; } + +.fa-stairs::before { + content: "\e289"; } + +.fa-i::before { + content: "\49"; } + +.fa-hryvnia-sign::before { + content: "\f6f2"; } + +.fa-hryvnia::before { + content: "\f6f2"; } + +.fa-pills::before { + content: "\f484"; } + +.fa-face-grin-wide::before { + content: "\f581"; } + +.fa-grin-alt::before { + content: "\f581"; } + +.fa-tooth::before { + content: "\f5c9"; } + +.fa-v::before { + content: "\56"; } + +.fa-bangladeshi-taka-sign::before { + content: "\e2e6"; } + +.fa-bicycle::before { + content: "\f206"; } + +.fa-staff-snake::before { + content: "\e579"; } + +.fa-rod-asclepius::before { + content: "\e579"; } + +.fa-rod-snake::before { + content: "\e579"; } + +.fa-staff-aesculapius::before { + content: "\e579"; } + +.fa-head-side-cough-slash::before { + content: "\e062"; } + +.fa-truck-medical::before { + content: "\f0f9"; } + +.fa-ambulance::before { + content: "\f0f9"; } + +.fa-wheat-awn-circle-exclamation::before { + content: "\e598"; } + +.fa-snowman::before { + content: "\f7d0"; } + +.fa-mortar-pestle::before { + content: "\f5a7"; } + +.fa-road-barrier::before { + content: "\e562"; } + +.fa-school::before { + content: "\f549"; } + +.fa-igloo::before { + content: "\f7ae"; } + +.fa-joint::before { + content: "\f595"; } + +.fa-angle-right::before { + content: "\f105"; } + +.fa-horse::before { + content: "\f6f0"; } + +.fa-q::before { + content: "\51"; } + +.fa-g::before { + content: "\47"; } + +.fa-notes-medical::before { + content: "\f481"; } + +.fa-temperature-half::before { + content: "\f2c9"; } + +.fa-temperature-2::before { + content: "\f2c9"; } + +.fa-thermometer-2::before { + content: "\f2c9"; } + +.fa-thermometer-half::before { + content: "\f2c9"; } + +.fa-dong-sign::before { + content: "\e169"; } + +.fa-capsules::before { + content: "\f46b"; } + +.fa-poo-storm::before { + content: "\f75a"; } + +.fa-poo-bolt::before { + content: "\f75a"; } + +.fa-face-frown-open::before { + content: "\f57a"; } + +.fa-frown-open::before { + content: "\f57a"; } + +.fa-hand-point-up::before { + content: "\f0a6"; } + +.fa-money-bill::before { + content: "\f0d6"; } + +.fa-bookmark::before { + content: "\f02e"; } + +.fa-align-justify::before { + content: "\f039"; } + +.fa-umbrella-beach::before { + content: "\f5ca"; } + +.fa-helmet-un::before { + content: "\e503"; } + +.fa-bullseye::before { + content: "\f140"; } + +.fa-bacon::before { + content: "\f7e5"; } + +.fa-hand-point-down::before { + content: "\f0a7"; } + +.fa-arrow-up-from-bracket::before { + content: "\e09a"; } + +.fa-folder::before { + content: "\f07b"; } + +.fa-folder-blank::before { + content: "\f07b"; } + +.fa-file-waveform::before { + content: "\f478"; } + +.fa-file-medical-alt::before { + content: "\f478"; } + +.fa-radiation::before { + content: "\f7b9"; } + +.fa-chart-simple::before { + content: "\e473"; } + +.fa-mars-stroke::before { + content: "\f229"; } + +.fa-vial::before { + content: "\f492"; } + +.fa-gauge::before { + content: "\f624"; } + +.fa-dashboard::before { + content: "\f624"; } + +.fa-gauge-med::before { + content: "\f624"; } + +.fa-tachometer-alt-average::before { + content: "\f624"; } + +.fa-wand-magic-sparkles::before { + content: "\e2ca"; } + +.fa-magic-wand-sparkles::before { + content: "\e2ca"; } + +.fa-e::before { + content: "\45"; } + +.fa-pen-clip::before { + content: "\f305"; } + +.fa-pen-alt::before { + content: "\f305"; } + +.fa-bridge-circle-exclamation::before { + content: "\e4ca"; } + +.fa-user::before { + content: "\f007"; } + +.fa-school-circle-check::before { + content: "\e56b"; } + +.fa-dumpster::before { + content: "\f793"; } + +.fa-van-shuttle::before { + content: "\f5b6"; } + +.fa-shuttle-van::before { + content: "\f5b6"; } + +.fa-building-user::before { + content: "\e4da"; } + +.fa-square-caret-left::before { + content: "\f191"; } + +.fa-caret-square-left::before { + content: "\f191"; } + +.fa-highlighter::before { + content: "\f591"; } + +.fa-key::before { + content: "\f084"; } + +.fa-bullhorn::before { + content: "\f0a1"; } + +.fa-globe::before { + content: "\f0ac"; } + +.fa-synagogue::before { + content: "\f69b"; } + +.fa-person-half-dress::before { + content: "\e548"; } + +.fa-road-bridge::before { + content: "\e563"; } + +.fa-location-arrow::before { + content: "\f124"; } + +.fa-c::before { + content: "\43"; } + +.fa-tablet-button::before { + content: "\f10a"; } + +.fa-building-lock::before { + content: "\e4d6"; } + +.fa-pizza-slice::before { + content: "\f818"; } + +.fa-money-bill-wave::before { + content: "\f53a"; } + +.fa-chart-area::before { + content: "\f1fe"; } + +.fa-area-chart::before { + content: "\f1fe"; } + +.fa-house-flag::before { + content: "\e50d"; } + +.fa-person-circle-minus::before { + content: "\e540"; } + +.fa-ban::before { + content: "\f05e"; } + +.fa-cancel::before { + content: "\f05e"; } + +.fa-camera-rotate::before { + content: "\e0d8"; } + +.fa-spray-can-sparkles::before { + content: "\f5d0"; } + +.fa-air-freshener::before { + content: "\f5d0"; } + +.fa-star::before { + content: "\f005"; } + +.fa-repeat::before { + content: "\f363"; } + +.fa-cross::before { + content: "\f654"; } + +.fa-box::before { + content: "\f466"; } + +.fa-venus-mars::before { + content: "\f228"; } + +.fa-arrow-pointer::before { + content: "\f245"; } + +.fa-mouse-pointer::before { + content: "\f245"; } + +.fa-maximize::before { + content: "\f31e"; } + +.fa-expand-arrows-alt::before { + content: "\f31e"; } + +.fa-charging-station::before { + content: "\f5e7"; } + +.fa-shapes::before { + content: "\f61f"; } + +.fa-triangle-circle-square::before { + content: "\f61f"; } + +.fa-shuffle::before { + content: "\f074"; } + +.fa-random::before { + content: "\f074"; } + +.fa-person-running::before { + content: "\f70c"; } + +.fa-running::before { + content: "\f70c"; } + +.fa-mobile-retro::before { + content: "\e527"; } + +.fa-grip-lines-vertical::before { + content: "\f7a5"; } + +.fa-spider::before { + content: "\f717"; } + +.fa-hands-bound::before { + content: "\e4f9"; } + +.fa-file-invoice-dollar::before { + content: "\f571"; } + +.fa-plane-circle-exclamation::before { + content: "\e556"; } + +.fa-x-ray::before { + content: "\f497"; } + +.fa-spell-check::before { + content: "\f891"; } + +.fa-slash::before { + content: "\f715"; } + +.fa-computer-mouse::before { + content: "\f8cc"; } + +.fa-mouse::before { + content: "\f8cc"; } + +.fa-arrow-right-to-bracket::before { + content: "\f090"; } + +.fa-sign-in::before { + content: "\f090"; } + +.fa-shop-slash::before { + content: "\e070"; } + +.fa-store-alt-slash::before { + content: "\e070"; } + +.fa-server::before { + content: "\f233"; } + +.fa-virus-covid-slash::before { + content: "\e4a9"; } + +.fa-shop-lock::before { + content: "\e4a5"; } + +.fa-hourglass-start::before { + content: "\f251"; } + +.fa-hourglass-1::before { + content: "\f251"; } + +.fa-blender-phone::before { + content: "\f6b6"; } + +.fa-building-wheat::before { + content: "\e4db"; } + +.fa-person-breastfeeding::before { + content: "\e53a"; } + +.fa-right-to-bracket::before { + content: "\f2f6"; } + +.fa-sign-in-alt::before { + content: "\f2f6"; } + +.fa-venus::before { + content: "\f221"; } + +.fa-passport::before { + content: "\f5ab"; } + +.fa-heart-pulse::before { + content: "\f21e"; } + +.fa-heartbeat::before { + content: "\f21e"; } + +.fa-people-carry-box::before { + content: "\f4ce"; } + +.fa-people-carry::before { + content: "\f4ce"; } + +.fa-temperature-high::before { + content: "\f769"; } + +.fa-microchip::before { + content: "\f2db"; } + +.fa-crown::before { + content: "\f521"; } + +.fa-weight-hanging::before { + content: "\f5cd"; } + +.fa-xmarks-lines::before { + content: "\e59a"; } + +.fa-file-prescription::before { + content: "\f572"; } + +.fa-weight-scale::before { + content: "\f496"; } + +.fa-weight::before { + content: "\f496"; } + +.fa-user-group::before { + content: "\f500"; } + +.fa-user-friends::before { + content: "\f500"; } + +.fa-arrow-up-a-z::before { + content: "\f15e"; } + +.fa-sort-alpha-up::before { + content: "\f15e"; } + +.fa-chess-knight::before { + content: "\f441"; } + +.fa-face-laugh-squint::before { + content: "\f59b"; } + +.fa-laugh-squint::before { + content: "\f59b"; } + +.fa-wheelchair::before { + content: "\f193"; } + +.fa-circle-arrow-up::before { + content: "\f0aa"; } + +.fa-arrow-circle-up::before { + content: "\f0aa"; } + +.fa-toggle-on::before { + content: "\f205"; } + +.fa-person-walking::before { + content: "\f554"; } + +.fa-walking::before { + content: "\f554"; } + +.fa-l::before { + content: "\4c"; } + +.fa-fire::before { + content: "\f06d"; } + +.fa-bed-pulse::before { + content: "\f487"; } + +.fa-procedures::before { + content: "\f487"; } + +.fa-shuttle-space::before { + content: "\f197"; } + +.fa-space-shuttle::before { + content: "\f197"; } + +.fa-face-laugh::before { + content: "\f599"; } + +.fa-laugh::before { + content: "\f599"; } + +.fa-folder-open::before { + content: "\f07c"; } + +.fa-heart-circle-plus::before { + content: "\e500"; } + +.fa-code-fork::before { + content: "\e13b"; } + +.fa-city::before { + content: "\f64f"; } + +.fa-microphone-lines::before { + content: "\f3c9"; } + +.fa-microphone-alt::before { + content: "\f3c9"; } + +.fa-pepper-hot::before { + content: "\f816"; } + +.fa-unlock::before { + content: "\f09c"; } + +.fa-colon-sign::before { + content: "\e140"; } + +.fa-headset::before { + content: "\f590"; } + +.fa-store-slash::before { + content: "\e071"; } + +.fa-road-circle-xmark::before { + content: "\e566"; } + +.fa-user-minus::before { + content: "\f503"; } + +.fa-mars-stroke-up::before { + content: "\f22a"; } + +.fa-mars-stroke-v::before { + content: "\f22a"; } + +.fa-champagne-glasses::before { + content: "\f79f"; } + +.fa-glass-cheers::before { + content: "\f79f"; } + +.fa-clipboard::before { + content: "\f328"; } + +.fa-house-circle-exclamation::before { + content: "\e50a"; } + +.fa-file-arrow-up::before { + content: "\f574"; } + +.fa-file-upload::before { + content: "\f574"; } + +.fa-wifi::before { + content: "\f1eb"; } + +.fa-wifi-3::before { + content: "\f1eb"; } + +.fa-wifi-strong::before { + content: "\f1eb"; } + +.fa-bath::before { + content: "\f2cd"; } + +.fa-bathtub::before { + content: "\f2cd"; } + +.fa-underline::before { + content: "\f0cd"; } + +.fa-user-pen::before { + content: "\f4ff"; } + +.fa-user-edit::before { + content: "\f4ff"; } + +.fa-signature::before { + content: "\f5b7"; } + +.fa-stroopwafel::before { + content: "\f551"; } + +.fa-bold::before { + content: "\f032"; } + +.fa-anchor-lock::before { + content: "\e4ad"; } + +.fa-building-ngo::before { + content: "\e4d7"; } + +.fa-manat-sign::before { + content: "\e1d5"; } + +.fa-not-equal::before { + content: "\f53e"; } + +.fa-border-top-left::before { + content: "\f853"; } + +.fa-border-style::before { + content: "\f853"; } + +.fa-map-location-dot::before { + content: "\f5a0"; } + +.fa-map-marked-alt::before { + content: "\f5a0"; } + +.fa-jedi::before { + content: "\f669"; } + +.fa-square-poll-vertical::before { + content: "\f681"; } + +.fa-poll::before { + content: "\f681"; } + +.fa-mug-hot::before { + content: "\f7b6"; } + +.fa-car-battery::before { + content: "\f5df"; } + +.fa-battery-car::before { + content: "\f5df"; } + +.fa-gift::before { + content: "\f06b"; } + +.fa-dice-two::before { + content: "\f528"; } + +.fa-chess-queen::before { + content: "\f445"; } + +.fa-glasses::before { + content: "\f530"; } + +.fa-chess-board::before { + content: "\f43c"; } + +.fa-building-circle-check::before { + content: "\e4d2"; } + +.fa-person-chalkboard::before { + content: "\e53d"; } + +.fa-mars-stroke-right::before { + content: "\f22b"; } + +.fa-mars-stroke-h::before { + content: "\f22b"; } + +.fa-hand-back-fist::before { + content: "\f255"; } + +.fa-hand-rock::before { + content: "\f255"; } + +.fa-square-caret-up::before { + content: "\f151"; } + +.fa-caret-square-up::before { + content: "\f151"; } + +.fa-cloud-showers-water::before { + content: "\e4e4"; } + +.fa-chart-bar::before { + content: "\f080"; } + +.fa-bar-chart::before { + content: "\f080"; } + +.fa-hands-bubbles::before { + content: "\e05e"; } + +.fa-hands-wash::before { + content: "\e05e"; } + +.fa-less-than-equal::before { + content: "\f537"; } + +.fa-train::before { + content: "\f238"; } + +.fa-eye-low-vision::before { + content: "\f2a8"; } + +.fa-low-vision::before { + content: "\f2a8"; } + +.fa-crow::before { + content: "\f520"; } + +.fa-sailboat::before { + content: "\e445"; } + +.fa-window-restore::before { + content: "\f2d2"; } + +.fa-square-plus::before { + content: "\f0fe"; } + +.fa-plus-square::before { + content: "\f0fe"; } + +.fa-torii-gate::before { + content: "\f6a1"; } + +.fa-frog::before { + content: "\f52e"; } + +.fa-bucket::before { + content: "\e4cf"; } + +.fa-image::before { + content: "\f03e"; } + +.fa-microphone::before { + content: "\f130"; } + +.fa-cow::before { + content: "\f6c8"; } + +.fa-caret-up::before { + content: "\f0d8"; } + +.fa-screwdriver::before { + content: "\f54a"; } + +.fa-folder-closed::before { + content: "\e185"; } + +.fa-house-tsunami::before { + content: "\e515"; } + +.fa-square-nfi::before { + content: "\e576"; } + +.fa-arrow-up-from-ground-water::before { + content: "\e4b5"; } + +.fa-martini-glass::before { + content: "\f57b"; } + +.fa-glass-martini-alt::before { + content: "\f57b"; } + +.fa-rotate-left::before { + content: "\f2ea"; } + +.fa-rotate-back::before { + content: "\f2ea"; } + +.fa-rotate-backward::before { + content: "\f2ea"; } + +.fa-undo-alt::before { + content: "\f2ea"; } + +.fa-table-columns::before { + content: "\f0db"; } + +.fa-columns::before { + content: "\f0db"; } + +.fa-lemon::before { + content: "\f094"; } + +.fa-head-side-mask::before { + content: "\e063"; } + +.fa-handshake::before { + content: "\f2b5"; } + +.fa-gem::before { + content: "\f3a5"; } + +.fa-dolly::before { + content: "\f472"; } + +.fa-dolly-box::before { + content: "\f472"; } + +.fa-smoking::before { + content: "\f48d"; } + +.fa-minimize::before { + content: "\f78c"; } + +.fa-compress-arrows-alt::before { + content: "\f78c"; } + +.fa-monument::before { + content: "\f5a6"; } + +.fa-snowplow::before { + content: "\f7d2"; } + +.fa-angles-right::before { + content: "\f101"; } + +.fa-angle-double-right::before { + content: "\f101"; } + +.fa-cannabis::before { + content: "\f55f"; } + +.fa-circle-play::before { + content: "\f144"; } + +.fa-play-circle::before { + content: "\f144"; } + +.fa-tablets::before { + content: "\f490"; } + +.fa-ethernet::before { + content: "\f796"; } + +.fa-euro-sign::before { + content: "\f153"; } + +.fa-eur::before { + content: "\f153"; } + +.fa-euro::before { + content: "\f153"; } + +.fa-chair::before { + content: "\f6c0"; } + +.fa-circle-check::before { + content: "\f058"; } + +.fa-check-circle::before { + content: "\f058"; } + +.fa-circle-stop::before { + content: "\f28d"; } + +.fa-stop-circle::before { + content: "\f28d"; } + +.fa-compass-drafting::before { + content: "\f568"; } + +.fa-drafting-compass::before { + content: "\f568"; } + +.fa-plate-wheat::before { + content: "\e55a"; } + +.fa-icicles::before { + content: "\f7ad"; } + +.fa-person-shelter::before { + content: "\e54f"; } + +.fa-neuter::before { + content: "\f22c"; } + +.fa-id-badge::before { + content: "\f2c1"; } + +.fa-marker::before { + content: "\f5a1"; } + +.fa-face-laugh-beam::before { + content: "\f59a"; } + +.fa-laugh-beam::before { + content: "\f59a"; } + +.fa-helicopter-symbol::before { + content: "\e502"; } + +.fa-universal-access::before { + content: "\f29a"; } + +.fa-circle-chevron-up::before { + content: "\f139"; } + +.fa-chevron-circle-up::before { + content: "\f139"; } + +.fa-lari-sign::before { + content: "\e1c8"; } + +.fa-volcano::before { + content: "\f770"; } + +.fa-person-walking-dashed-line-arrow-right::before { + content: "\e553"; } + +.fa-sterling-sign::before { + content: "\f154"; } + +.fa-gbp::before { + content: "\f154"; } + +.fa-pound-sign::before { + content: "\f154"; } + +.fa-viruses::before { + content: "\e076"; } + +.fa-square-person-confined::before { + content: "\e577"; } + +.fa-user-tie::before { + content: "\f508"; } + +.fa-arrow-down-long::before { + content: "\f175"; } + +.fa-long-arrow-down::before { + content: "\f175"; } + +.fa-tent-arrow-down-to-line::before { + content: "\e57e"; } + +.fa-certificate::before { + content: "\f0a3"; } + +.fa-reply-all::before { + content: "\f122"; } + +.fa-mail-reply-all::before { + content: "\f122"; } + +.fa-suitcase::before { + content: "\f0f2"; } + +.fa-person-skating::before { + content: "\f7c5"; } + +.fa-skating::before { + content: "\f7c5"; } + +.fa-filter-circle-dollar::before { + content: "\f662"; } + +.fa-funnel-dollar::before { + content: "\f662"; } + +.fa-camera-retro::before { + content: "\f083"; } + +.fa-circle-arrow-down::before { + content: "\f0ab"; } + +.fa-arrow-circle-down::before { + content: "\f0ab"; } + +.fa-file-import::before { + content: "\f56f"; } + +.fa-arrow-right-to-file::before { + content: "\f56f"; } + +.fa-square-arrow-up-right::before { + content: "\f14c"; } + +.fa-external-link-square::before { + content: "\f14c"; } + +.fa-box-open::before { + content: "\f49e"; } + +.fa-scroll::before { + content: "\f70e"; } + +.fa-spa::before { + content: "\f5bb"; } + +.fa-location-pin-lock::before { + content: "\e51f"; } + +.fa-pause::before { + content: "\f04c"; } + +.fa-hill-avalanche::before { + content: "\e507"; } + +.fa-temperature-empty::before { + content: "\f2cb"; } + +.fa-temperature-0::before { + content: "\f2cb"; } + +.fa-thermometer-0::before { + content: "\f2cb"; } + +.fa-thermometer-empty::before { + content: "\f2cb"; } + +.fa-bomb::before { + content: "\f1e2"; } + +.fa-registered::before { + content: "\f25d"; } + +.fa-address-card::before { + content: "\f2bb"; } + +.fa-contact-card::before { + content: "\f2bb"; } + +.fa-vcard::before { + content: "\f2bb"; } + +.fa-scale-unbalanced-flip::before { + content: "\f516"; } + +.fa-balance-scale-right::before { + content: "\f516"; } + +.fa-subscript::before { + content: "\f12c"; } + +.fa-diamond-turn-right::before { + content: "\f5eb"; } + +.fa-directions::before { + content: "\f5eb"; } + +.fa-burst::before { + content: "\e4dc"; } + +.fa-house-laptop::before { + content: "\e066"; } + +.fa-laptop-house::before { + content: "\e066"; } + +.fa-face-tired::before { + content: "\f5c8"; } + +.fa-tired::before { + content: "\f5c8"; } + +.fa-money-bills::before { + content: "\e1f3"; } + +.fa-smog::before { + content: "\f75f"; } + +.fa-crutch::before { + content: "\f7f7"; } + +.fa-cloud-arrow-up::before { + content: "\f0ee"; } + +.fa-cloud-upload::before { + content: "\f0ee"; } + +.fa-cloud-upload-alt::before { + content: "\f0ee"; } + +.fa-palette::before { + content: "\f53f"; } + +.fa-arrows-turn-right::before { + content: "\e4c0"; } + +.fa-vest::before { + content: "\e085"; } + +.fa-ferry::before { + content: "\e4ea"; } + +.fa-arrows-down-to-people::before { + content: "\e4b9"; } + +.fa-seedling::before { + content: "\f4d8"; } + +.fa-sprout::before { + content: "\f4d8"; } + +.fa-left-right::before { + content: "\f337"; } + +.fa-arrows-alt-h::before { + content: "\f337"; } + +.fa-boxes-packing::before { + content: "\e4c7"; } + +.fa-circle-arrow-left::before { + content: "\f0a8"; } + +.fa-arrow-circle-left::before { + content: "\f0a8"; } + +.fa-group-arrows-rotate::before { + content: "\e4f6"; } + +.fa-bowl-food::before { + content: "\e4c6"; } + +.fa-candy-cane::before { + content: "\f786"; } + +.fa-arrow-down-wide-short::before { + content: "\f160"; } + +.fa-sort-amount-asc::before { + content: "\f160"; } + +.fa-sort-amount-down::before { + content: "\f160"; } + +.fa-cloud-bolt::before { + content: "\f76c"; } + +.fa-thunderstorm::before { + content: "\f76c"; } + +.fa-text-slash::before { + content: "\f87d"; } + +.fa-remove-format::before { + content: "\f87d"; } + +.fa-face-smile-wink::before { + content: "\f4da"; } + +.fa-smile-wink::before { + content: "\f4da"; } + +.fa-file-word::before { + content: "\f1c2"; } + +.fa-file-powerpoint::before { + content: "\f1c4"; } + +.fa-arrows-left-right::before { + content: "\f07e"; } + +.fa-arrows-h::before { + content: "\f07e"; } + +.fa-house-lock::before { + content: "\e510"; } + +.fa-cloud-arrow-down::before { + content: "\f0ed"; } + +.fa-cloud-download::before { + content: "\f0ed"; } + +.fa-cloud-download-alt::before { + content: "\f0ed"; } + +.fa-children::before { + content: "\e4e1"; } + +.fa-chalkboard::before { + content: "\f51b"; } + +.fa-blackboard::before { + content: "\f51b"; } + +.fa-user-large-slash::before { + content: "\f4fa"; } + +.fa-user-alt-slash::before { + content: "\f4fa"; } + +.fa-envelope-open::before { + content: "\f2b6"; } + +.fa-handshake-simple-slash::before { + content: "\e05f"; } + +.fa-handshake-alt-slash::before { + content: "\e05f"; } + +.fa-mattress-pillow::before { + content: "\e525"; } + +.fa-guarani-sign::before { + content: "\e19a"; } + +.fa-arrows-rotate::before { + content: "\f021"; } + +.fa-refresh::before { + content: "\f021"; } + +.fa-sync::before { + content: "\f021"; } + +.fa-fire-extinguisher::before { + content: "\f134"; } + +.fa-cruzeiro-sign::before { + content: "\e152"; } + +.fa-greater-than-equal::before { + content: "\f532"; } + +.fa-shield-halved::before { + content: "\f3ed"; } + +.fa-shield-alt::before { + content: "\f3ed"; } + +.fa-book-atlas::before { + content: "\f558"; } + +.fa-atlas::before { + content: "\f558"; } + +.fa-virus::before { + content: "\e074"; } + +.fa-envelope-circle-check::before { + content: "\e4e8"; } + +.fa-layer-group::before { + content: "\f5fd"; } + +.fa-arrows-to-dot::before { + content: "\e4be"; } + +.fa-archway::before { + content: "\f557"; } + +.fa-heart-circle-check::before { + content: "\e4fd"; } + +.fa-house-chimney-crack::before { + content: "\f6f1"; } + +.fa-house-damage::before { + content: "\f6f1"; } + +.fa-file-zipper::before { + content: "\f1c6"; } + +.fa-file-archive::before { + content: "\f1c6"; } + +.fa-square::before { + content: "\f0c8"; } + +.fa-martini-glass-empty::before { + content: "\f000"; } + +.fa-glass-martini::before { + content: "\f000"; } + +.fa-couch::before { + content: "\f4b8"; } + +.fa-cedi-sign::before { + content: "\e0df"; } + +.fa-italic::before { + content: "\f033"; } + +.fa-church::before { + content: "\f51d"; } + +.fa-comments-dollar::before { + content: "\f653"; } + +.fa-democrat::before { + content: "\f747"; } + +.fa-z::before { + content: "\5a"; } + +.fa-person-skiing::before { + content: "\f7c9"; } + +.fa-skiing::before { + content: "\f7c9"; } + +.fa-road-lock::before { + content: "\e567"; } + +.fa-a::before { + content: "\41"; } + +.fa-temperature-arrow-down::before { + content: "\e03f"; } + +.fa-temperature-down::before { + content: "\e03f"; } + +.fa-feather-pointed::before { + content: "\f56b"; } + +.fa-feather-alt::before { + content: "\f56b"; } + +.fa-p::before { + content: "\50"; } + +.fa-snowflake::before { + content: "\f2dc"; } + +.fa-newspaper::before { + content: "\f1ea"; } + +.fa-rectangle-ad::before { + content: "\f641"; } + +.fa-ad::before { + content: "\f641"; } + +.fa-circle-arrow-right::before { + content: "\f0a9"; } + +.fa-arrow-circle-right::before { + content: "\f0a9"; } + +.fa-filter-circle-xmark::before { + content: "\e17b"; } + +.fa-locust::before { + content: "\e520"; } + +.fa-sort::before { + content: "\f0dc"; } + +.fa-unsorted::before { + content: "\f0dc"; } + +.fa-list-ol::before { + content: "\f0cb"; } + +.fa-list-1-2::before { + content: "\f0cb"; } + +.fa-list-numeric::before { + content: "\f0cb"; } + +.fa-person-dress-burst::before { + content: "\e544"; } + +.fa-money-check-dollar::before { + content: "\f53d"; } + +.fa-money-check-alt::before { + content: "\f53d"; } + +.fa-vector-square::before { + content: "\f5cb"; } + +.fa-bread-slice::before { + content: "\f7ec"; } + +.fa-language::before { + content: "\f1ab"; } + +.fa-face-kiss-wink-heart::before { + content: "\f598"; } + +.fa-kiss-wink-heart::before { + content: "\f598"; } + +.fa-filter::before { + content: "\f0b0"; } + +.fa-question::before { + content: "\3f"; } + +.fa-file-signature::before { + content: "\f573"; } + +.fa-up-down-left-right::before { + content: "\f0b2"; } + +.fa-arrows-alt::before { + content: "\f0b2"; } + +.fa-house-chimney-user::before { + content: "\e065"; } + +.fa-hand-holding-heart::before { + content: "\f4be"; } + +.fa-puzzle-piece::before { + content: "\f12e"; } + +.fa-money-check::before { + content: "\f53c"; } + +.fa-star-half-stroke::before { + content: "\f5c0"; } + +.fa-star-half-alt::before { + content: "\f5c0"; } + +.fa-code::before { + content: "\f121"; } + +.fa-whiskey-glass::before { + content: "\f7a0"; } + +.fa-glass-whiskey::before { + content: "\f7a0"; } + +.fa-building-circle-exclamation::before { + content: "\e4d3"; } + +.fa-magnifying-glass-chart::before { + content: "\e522"; } + +.fa-arrow-up-right-from-square::before { + content: "\f08e"; } + +.fa-external-link::before { + content: "\f08e"; } + +.fa-cubes-stacked::before { + content: "\e4e6"; } + +.fa-won-sign::before { + content: "\f159"; } + +.fa-krw::before { + content: "\f159"; } + +.fa-won::before { + content: "\f159"; } + +.fa-virus-covid::before { + content: "\e4a8"; } + +.fa-austral-sign::before { + content: "\e0a9"; } + +.fa-f::before { + content: "\46"; } + +.fa-leaf::before { + content: "\f06c"; } + +.fa-road::before { + content: "\f018"; } + +.fa-taxi::before { + content: "\f1ba"; } + +.fa-cab::before { + content: "\f1ba"; } + +.fa-person-circle-plus::before { + content: "\e541"; } + +.fa-chart-pie::before { + content: "\f200"; } + +.fa-pie-chart::before { + content: "\f200"; } + +.fa-bolt-lightning::before { + content: "\e0b7"; } + +.fa-sack-xmark::before { + content: "\e56a"; } + +.fa-file-excel::before { + content: "\f1c3"; } + +.fa-file-contract::before { + content: "\f56c"; } + +.fa-fish-fins::before { + content: "\e4f2"; } + +.fa-building-flag::before { + content: "\e4d5"; } + +.fa-face-grin-beam::before { + content: "\f582"; } + +.fa-grin-beam::before { + content: "\f582"; } + +.fa-object-ungroup::before { + content: "\f248"; } + +.fa-poop::before { + content: "\f619"; } + +.fa-location-pin::before { + content: "\f041"; } + +.fa-map-marker::before { + content: "\f041"; } + +.fa-kaaba::before { + content: "\f66b"; } + +.fa-toilet-paper::before { + content: "\f71e"; } + +.fa-helmet-safety::before { + content: "\f807"; } + +.fa-hard-hat::before { + content: "\f807"; } + +.fa-hat-hard::before { + content: "\f807"; } + +.fa-eject::before { + content: "\f052"; } + +.fa-circle-right::before { + content: "\f35a"; } + +.fa-arrow-alt-circle-right::before { + content: "\f35a"; } + +.fa-plane-circle-check::before { + content: "\e555"; } + +.fa-face-rolling-eyes::before { + content: "\f5a5"; } + +.fa-meh-rolling-eyes::before { + content: "\f5a5"; } + +.fa-object-group::before { + content: "\f247"; } + +.fa-chart-line::before { + content: "\f201"; } + +.fa-line-chart::before { + content: "\f201"; } + +.fa-mask-ventilator::before { + content: "\e524"; } + +.fa-arrow-right::before { + content: "\f061"; } + +.fa-signs-post::before { + content: "\f277"; } + +.fa-map-signs::before { + content: "\f277"; } + +.fa-cash-register::before { + content: "\f788"; } + +.fa-person-circle-question::before { + content: "\e542"; } + +.fa-h::before { + content: "\48"; } + +.fa-tarp::before { + content: "\e57b"; } + +.fa-screwdriver-wrench::before { + content: "\f7d9"; } + +.fa-tools::before { + content: "\f7d9"; } + +.fa-arrows-to-eye::before { + content: "\e4bf"; } + +.fa-plug-circle-bolt::before { + content: "\e55b"; } + +.fa-heart::before { + content: "\f004"; } + +.fa-mars-and-venus::before { + content: "\f224"; } + +.fa-house-user::before { + content: "\e1b0"; } + +.fa-home-user::before { + content: "\e1b0"; } + +.fa-dumpster-fire::before { + content: "\f794"; } + +.fa-house-crack::before { + content: "\e3b1"; } + +.fa-martini-glass-citrus::before { + content: "\f561"; } + +.fa-cocktail::before { + content: "\f561"; } + +.fa-face-surprise::before { + content: "\f5c2"; } + +.fa-surprise::before { + content: "\f5c2"; } + +.fa-bottle-water::before { + content: "\e4c5"; } + +.fa-circle-pause::before { + content: "\f28b"; } + +.fa-pause-circle::before { + content: "\f28b"; } + +.fa-toilet-paper-slash::before { + content: "\e072"; } + +.fa-apple-whole::before { + content: "\f5d1"; } + +.fa-apple-alt::before { + content: "\f5d1"; } + +.fa-kitchen-set::before { + content: "\e51a"; } + +.fa-r::before { + content: "\52"; } + +.fa-temperature-quarter::before { + content: "\f2ca"; } + +.fa-temperature-1::before { + content: "\f2ca"; } + +.fa-thermometer-1::before { + content: "\f2ca"; } + +.fa-thermometer-quarter::before { + content: "\f2ca"; } + +.fa-cube::before { + content: "\f1b2"; } + +.fa-bitcoin-sign::before { + content: "\e0b4"; } + +.fa-shield-dog::before { + content: "\e573"; } + +.fa-solar-panel::before { + content: "\f5ba"; } + +.fa-lock-open::before { + content: "\f3c1"; } + +.fa-elevator::before { + content: "\e16d"; } + +.fa-money-bill-transfer::before { + content: "\e528"; } + +.fa-money-bill-trend-up::before { + content: "\e529"; } + +.fa-house-flood-water-circle-arrow-right::before { + content: "\e50f"; } + +.fa-square-poll-horizontal::before { + content: "\f682"; } + +.fa-poll-h::before { + content: "\f682"; } + +.fa-circle::before { + content: "\f111"; } + +.fa-backward-fast::before { + content: "\f049"; } + +.fa-fast-backward::before { + content: "\f049"; } + +.fa-recycle::before { + content: "\f1b8"; } + +.fa-user-astronaut::before { + content: "\f4fb"; } + +.fa-plane-slash::before { + content: "\e069"; } + +.fa-trademark::before { + content: "\f25c"; } + +.fa-basketball::before { + content: "\f434"; } + +.fa-basketball-ball::before { + content: "\f434"; } + +.fa-satellite-dish::before { + content: "\f7c0"; } + +.fa-circle-up::before { + content: "\f35b"; } + +.fa-arrow-alt-circle-up::before { + content: "\f35b"; } + +.fa-mobile-screen-button::before { + content: "\f3cd"; } + +.fa-mobile-alt::before { + content: "\f3cd"; } + +.fa-volume-high::before { + content: "\f028"; } + +.fa-volume-up::before { + content: "\f028"; } + +.fa-users-rays::before { + content: "\e593"; } + +.fa-wallet::before { + content: "\f555"; } + +.fa-clipboard-check::before { + content: "\f46c"; } + +.fa-file-audio::before { + content: "\f1c7"; } + +.fa-burger::before { + content: "\f805"; } + +.fa-hamburger::before { + content: "\f805"; } + +.fa-wrench::before { + content: "\f0ad"; } + +.fa-bugs::before { + content: "\e4d0"; } + +.fa-rupee-sign::before { + content: "\f156"; } + +.fa-rupee::before { + content: "\f156"; } + +.fa-file-image::before { + content: "\f1c5"; } + +.fa-circle-question::before { + content: "\f059"; } + +.fa-question-circle::before { + content: "\f059"; } + +.fa-plane-departure::before { + content: "\f5b0"; } + +.fa-handshake-slash::before { + content: "\e060"; } + +.fa-book-bookmark::before { + content: "\e0bb"; } + +.fa-code-branch::before { + content: "\f126"; } + +.fa-hat-cowboy::before { + content: "\f8c0"; } + +.fa-bridge::before { + content: "\e4c8"; } + +.fa-phone-flip::before { + content: "\f879"; } + +.fa-phone-alt::before { + content: "\f879"; } + +.fa-truck-front::before { + content: "\e2b7"; } + +.fa-cat::before { + content: "\f6be"; } + +.fa-anchor-circle-exclamation::before { + content: "\e4ab"; } + +.fa-truck-field::before { + content: "\e58d"; } + +.fa-route::before { + content: "\f4d7"; } + +.fa-clipboard-question::before { + content: "\e4e3"; } + +.fa-panorama::before { + content: "\e209"; } + +.fa-comment-medical::before { + content: "\f7f5"; } + +.fa-teeth-open::before { + content: "\f62f"; } + +.fa-file-circle-minus::before { + content: "\e4ed"; } + +.fa-tags::before { + content: "\f02c"; } + +.fa-wine-glass::before { + content: "\f4e3"; } + +.fa-forward-fast::before { + content: "\f050"; } + +.fa-fast-forward::before { + content: "\f050"; } + +.fa-face-meh-blank::before { + content: "\f5a4"; } + +.fa-meh-blank::before { + content: "\f5a4"; } + +.fa-square-parking::before { + content: "\f540"; } + +.fa-parking::before { + content: "\f540"; } + +.fa-house-signal::before { + content: "\e012"; } + +.fa-bars-progress::before { + content: "\f828"; } + +.fa-tasks-alt::before { + content: "\f828"; } + +.fa-faucet-drip::before { + content: "\e006"; } + +.fa-cart-flatbed::before { + content: "\f474"; } + +.fa-dolly-flatbed::before { + content: "\f474"; } + +.fa-ban-smoking::before { + content: "\f54d"; } + +.fa-smoking-ban::before { + content: "\f54d"; } + +.fa-terminal::before { + content: "\f120"; } + +.fa-mobile-button::before { + content: "\f10b"; } + +.fa-house-medical-flag::before { + content: "\e514"; } + +.fa-basket-shopping::before { + content: "\f291"; } + +.fa-shopping-basket::before { + content: "\f291"; } + +.fa-tape::before { + content: "\f4db"; } + +.fa-bus-simple::before { + content: "\f55e"; } + +.fa-bus-alt::before { + content: "\f55e"; } + +.fa-eye::before { + content: "\f06e"; } + +.fa-face-sad-cry::before { + content: "\f5b3"; } + +.fa-sad-cry::before { + content: "\f5b3"; } + +.fa-audio-description::before { + content: "\f29e"; } + +.fa-person-military-to-person::before { + content: "\e54c"; } + +.fa-file-shield::before { + content: "\e4f0"; } + +.fa-user-slash::before { + content: "\f506"; } + +.fa-pen::before { + content: "\f304"; } + +.fa-tower-observation::before { + content: "\e586"; } + +.fa-file-code::before { + content: "\f1c9"; } + +.fa-signal::before { + content: "\f012"; } + +.fa-signal-5::before { + content: "\f012"; } + +.fa-signal-perfect::before { + content: "\f012"; } + +.fa-bus::before { + content: "\f207"; } + +.fa-heart-circle-xmark::before { + content: "\e501"; } + +.fa-house-chimney::before { + content: "\e3af"; } + +.fa-home-lg::before { + content: "\e3af"; } + +.fa-window-maximize::before { + content: "\f2d0"; } + +.fa-face-frown::before { + content: "\f119"; } + +.fa-frown::before { + content: "\f119"; } + +.fa-prescription::before { + content: "\f5b1"; } + +.fa-shop::before { + content: "\f54f"; } + +.fa-store-alt::before { + content: "\f54f"; } + +.fa-floppy-disk::before { + content: "\f0c7"; } + +.fa-save::before { + content: "\f0c7"; } + +.fa-vihara::before { + content: "\f6a7"; } + +.fa-scale-unbalanced::before { + content: "\f515"; } + +.fa-balance-scale-left::before { + content: "\f515"; } + +.fa-sort-up::before { + content: "\f0de"; } + +.fa-sort-asc::before { + content: "\f0de"; } + +.fa-comment-dots::before { + content: "\f4ad"; } + +.fa-commenting::before { + content: "\f4ad"; } + +.fa-plant-wilt::before { + content: "\e5aa"; } + +.fa-diamond::before { + content: "\f219"; } + +.fa-face-grin-squint::before { + content: "\f585"; } + +.fa-grin-squint::before { + content: "\f585"; } + +.fa-hand-holding-dollar::before { + content: "\f4c0"; } + +.fa-hand-holding-usd::before { + content: "\f4c0"; } + +.fa-bacterium::before { + content: "\e05a"; } + +.fa-hand-pointer::before { + content: "\f25a"; } + +.fa-drum-steelpan::before { + content: "\f56a"; } + +.fa-hand-scissors::before { + content: "\f257"; } + +.fa-hands-praying::before { + content: "\f684"; } + +.fa-praying-hands::before { + content: "\f684"; } + +.fa-arrow-rotate-right::before { + content: "\f01e"; } + +.fa-arrow-right-rotate::before { + content: "\f01e"; } + +.fa-arrow-rotate-forward::before { + content: "\f01e"; } + +.fa-redo::before { + content: "\f01e"; } + +.fa-biohazard::before { + content: "\f780"; } + +.fa-location-crosshairs::before { + content: "\f601"; } + +.fa-location::before { + content: "\f601"; } + +.fa-mars-double::before { + content: "\f227"; } + +.fa-child-dress::before { + content: "\e59c"; } + +.fa-users-between-lines::before { + content: "\e591"; } + +.fa-lungs-virus::before { + content: "\e067"; } + +.fa-face-grin-tears::before { + content: "\f588"; } + +.fa-grin-tears::before { + content: "\f588"; } + +.fa-phone::before { + content: "\f095"; } + +.fa-calendar-xmark::before { + content: "\f273"; } + +.fa-calendar-times::before { + content: "\f273"; } + +.fa-child-reaching::before { + content: "\e59d"; } + +.fa-head-side-virus::before { + content: "\e064"; } + +.fa-user-gear::before { + content: "\f4fe"; } + +.fa-user-cog::before { + content: "\f4fe"; } + +.fa-arrow-up-1-9::before { + content: "\f163"; } + +.fa-sort-numeric-up::before { + content: "\f163"; } + +.fa-door-closed::before { + content: "\f52a"; } + +.fa-shield-virus::before { + content: "\e06c"; } + +.fa-dice-six::before { + content: "\f526"; } + +.fa-mosquito-net::before { + content: "\e52c"; } + +.fa-bridge-water::before { + content: "\e4ce"; } + +.fa-person-booth::before { + content: "\f756"; } + +.fa-text-width::before { + content: "\f035"; } + +.fa-hat-wizard::before { + content: "\f6e8"; } + +.fa-pen-fancy::before { + content: "\f5ac"; } + +.fa-person-digging::before { + content: "\f85e"; } + +.fa-digging::before { + content: "\f85e"; } + +.fa-trash::before { + content: "\f1f8"; } + +.fa-gauge-simple::before { + content: "\f629"; } + +.fa-gauge-simple-med::before { + content: "\f629"; } + +.fa-tachometer-average::before { + content: "\f629"; } + +.fa-book-medical::before { + content: "\f7e6"; } + +.fa-poo::before { + content: "\f2fe"; } + +.fa-quote-right::before { + content: "\f10e"; } + +.fa-quote-right-alt::before { + content: "\f10e"; } + +.fa-shirt::before { + content: "\f553"; } + +.fa-t-shirt::before { + content: "\f553"; } + +.fa-tshirt::before { + content: "\f553"; } + +.fa-cubes::before { + content: "\f1b3"; } + +.fa-divide::before { + content: "\f529"; } + +.fa-tenge-sign::before { + content: "\f7d7"; } + +.fa-tenge::before { + content: "\f7d7"; } + +.fa-headphones::before { + content: "\f025"; } + +.fa-hands-holding::before { + content: "\f4c2"; } + +.fa-hands-clapping::before { + content: "\e1a8"; } + +.fa-republican::before { + content: "\f75e"; } + +.fa-arrow-left::before { + content: "\f060"; } + +.fa-person-circle-xmark::before { + content: "\e543"; } + +.fa-ruler::before { + content: "\f545"; } + +.fa-align-left::before { + content: "\f036"; } + +.fa-dice-d6::before { + content: "\f6d1"; } + +.fa-restroom::before { + content: "\f7bd"; } + +.fa-j::before { + content: "\4a"; } + +.fa-users-viewfinder::before { + content: "\e595"; } + +.fa-file-video::before { + content: "\f1c8"; } + +.fa-up-right-from-square::before { + content: "\f35d"; } + +.fa-external-link-alt::before { + content: "\f35d"; } + +.fa-table-cells::before { + content: "\f00a"; } + +.fa-th::before { + content: "\f00a"; } + +.fa-file-pdf::before { + content: "\f1c1"; } + +.fa-book-bible::before { + content: "\f647"; } + +.fa-bible::before { + content: "\f647"; } + +.fa-o::before { + content: "\4f"; } + +.fa-suitcase-medical::before { + content: "\f0fa"; } + +.fa-medkit::before { + content: "\f0fa"; } + +.fa-user-secret::before { + content: "\f21b"; } + +.fa-otter::before { + content: "\f700"; } + +.fa-person-dress::before { + content: "\f182"; } + +.fa-female::before { + content: "\f182"; } + +.fa-comment-dollar::before { + content: "\f651"; } + +.fa-business-time::before { + content: "\f64a"; } + +.fa-briefcase-clock::before { + content: "\f64a"; } + +.fa-table-cells-large::before { + content: "\f009"; } + +.fa-th-large::before { + content: "\f009"; } + +.fa-book-tanakh::before { + content: "\f827"; } + +.fa-tanakh::before { + content: "\f827"; } + +.fa-phone-volume::before { + content: "\f2a0"; } + +.fa-volume-control-phone::before { + content: "\f2a0"; } + +.fa-hat-cowboy-side::before { + content: "\f8c1"; } + +.fa-clipboard-user::before { + content: "\f7f3"; } + +.fa-child::before { + content: "\f1ae"; } + +.fa-lira-sign::before { + content: "\f195"; } + +.fa-satellite::before { + content: "\f7bf"; } + +.fa-plane-lock::before { + content: "\e558"; } + +.fa-tag::before { + content: "\f02b"; } + +.fa-comment::before { + content: "\f075"; } + +.fa-cake-candles::before { + content: "\f1fd"; } + +.fa-birthday-cake::before { + content: "\f1fd"; } + +.fa-cake::before { + content: "\f1fd"; } + +.fa-envelope::before { + content: "\f0e0"; } + +.fa-angles-up::before { + content: "\f102"; } + +.fa-angle-double-up::before { + content: "\f102"; } + +.fa-paperclip::before { + content: "\f0c6"; } + +.fa-arrow-right-to-city::before { + content: "\e4b3"; } + +.fa-ribbon::before { + content: "\f4d6"; } + +.fa-lungs::before { + content: "\f604"; } + +.fa-arrow-up-9-1::before { + content: "\f887"; } + +.fa-sort-numeric-up-alt::before { + content: "\f887"; } + +.fa-litecoin-sign::before { + content: "\e1d3"; } + +.fa-border-none::before { + content: "\f850"; } + +.fa-circle-nodes::before { + content: "\e4e2"; } + +.fa-parachute-box::before { + content: "\f4cd"; } + +.fa-indent::before { + content: "\f03c"; } + +.fa-truck-field-un::before { + content: "\e58e"; } + +.fa-hourglass::before { + content: "\f254"; } + +.fa-hourglass-empty::before { + content: "\f254"; } + +.fa-mountain::before { + content: "\f6fc"; } + +.fa-user-doctor::before { + content: "\f0f0"; } + +.fa-user-md::before { + content: "\f0f0"; } + +.fa-circle-info::before { + content: "\f05a"; } + +.fa-info-circle::before { + content: "\f05a"; } + +.fa-cloud-meatball::before { + content: "\f73b"; } + +.fa-camera::before { + content: "\f030"; } + +.fa-camera-alt::before { + content: "\f030"; } + +.fa-square-virus::before { + content: "\e578"; } + +.fa-meteor::before { + content: "\f753"; } + +.fa-car-on::before { + content: "\e4dd"; } + +.fa-sleigh::before { + content: "\f7cc"; } + +.fa-arrow-down-1-9::before { + content: "\f162"; } + +.fa-sort-numeric-asc::before { + content: "\f162"; } + +.fa-sort-numeric-down::before { + content: "\f162"; } + +.fa-hand-holding-droplet::before { + content: "\f4c1"; } + +.fa-hand-holding-water::before { + content: "\f4c1"; } + +.fa-water::before { + content: "\f773"; } + +.fa-calendar-check::before { + content: "\f274"; } + +.fa-braille::before { + content: "\f2a1"; } + +.fa-prescription-bottle-medical::before { + content: "\f486"; } + +.fa-prescription-bottle-alt::before { + content: "\f486"; } + +.fa-landmark::before { + content: "\f66f"; } + +.fa-truck::before { + content: "\f0d1"; } + +.fa-crosshairs::before { + content: "\f05b"; } + +.fa-person-cane::before { + content: "\e53c"; } + +.fa-tent::before { + content: "\e57d"; } + +.fa-vest-patches::before { + content: "\e086"; } + +.fa-check-double::before { + content: "\f560"; } + +.fa-arrow-down-a-z::before { + content: "\f15d"; } + +.fa-sort-alpha-asc::before { + content: "\f15d"; } + +.fa-sort-alpha-down::before { + content: "\f15d"; } + +.fa-money-bill-wheat::before { + content: "\e52a"; } + +.fa-cookie::before { + content: "\f563"; } + +.fa-arrow-rotate-left::before { + content: "\f0e2"; } + +.fa-arrow-left-rotate::before { + content: "\f0e2"; } + +.fa-arrow-rotate-back::before { + content: "\f0e2"; } + +.fa-arrow-rotate-backward::before { + content: "\f0e2"; } + +.fa-undo::before { + content: "\f0e2"; } + +.fa-hard-drive::before { + content: "\f0a0"; } + +.fa-hdd::before { + content: "\f0a0"; } + +.fa-face-grin-squint-tears::before { + content: "\f586"; } + +.fa-grin-squint-tears::before { + content: "\f586"; } + +.fa-dumbbell::before { + content: "\f44b"; } + +.fa-rectangle-list::before { + content: "\f022"; } + +.fa-list-alt::before { + content: "\f022"; } + +.fa-tarp-droplet::before { + content: "\e57c"; } + +.fa-house-medical-circle-check::before { + content: "\e511"; } + +.fa-person-skiing-nordic::before { + content: "\f7ca"; } + +.fa-skiing-nordic::before { + content: "\f7ca"; } + +.fa-calendar-plus::before { + content: "\f271"; } + +.fa-plane-arrival::before { + content: "\f5af"; } + +.fa-circle-left::before { + content: "\f359"; } + +.fa-arrow-alt-circle-left::before { + content: "\f359"; } + +.fa-train-subway::before { + content: "\f239"; } + +.fa-subway::before { + content: "\f239"; } + +.fa-chart-gantt::before { + content: "\e0e4"; } + +.fa-indian-rupee-sign::before { + content: "\e1bc"; } + +.fa-indian-rupee::before { + content: "\e1bc"; } + +.fa-inr::before { + content: "\e1bc"; } + +.fa-crop-simple::before { + content: "\f565"; } + +.fa-crop-alt::before { + content: "\f565"; } + +.fa-money-bill-1::before { + content: "\f3d1"; } + +.fa-money-bill-alt::before { + content: "\f3d1"; } + +.fa-left-long::before { + content: "\f30a"; } + +.fa-long-arrow-alt-left::before { + content: "\f30a"; } + +.fa-dna::before { + content: "\f471"; } + +.fa-virus-slash::before { + content: "\e075"; } + +.fa-minus::before { + content: "\f068"; } + +.fa-subtract::before { + content: "\f068"; } + +.fa-chess::before { + content: "\f439"; } + +.fa-arrow-left-long::before { + content: "\f177"; } + +.fa-long-arrow-left::before { + content: "\f177"; } + +.fa-plug-circle-check::before { + content: "\e55c"; } + +.fa-street-view::before { + content: "\f21d"; } + +.fa-franc-sign::before { + content: "\e18f"; } + +.fa-volume-off::before { + content: "\f026"; } + +.fa-hands-asl-interpreting::before { + content: "\f2a3"; } + +.fa-american-sign-language-interpreting::before { + content: "\f2a3"; } + +.fa-asl-interpreting::before { + content: "\f2a3"; } + +.fa-hands-american-sign-language-interpreting::before { + content: "\f2a3"; } + +.fa-gear::before { + content: "\f013"; } + +.fa-cog::before { + content: "\f013"; } + +.fa-droplet-slash::before { + content: "\f5c7"; } + +.fa-tint-slash::before { + content: "\f5c7"; } + +.fa-mosque::before { + content: "\f678"; } + +.fa-mosquito::before { + content: "\e52b"; } + +.fa-star-of-david::before { + content: "\f69a"; } + +.fa-person-military-rifle::before { + content: "\e54b"; } + +.fa-cart-shopping::before { + content: "\f07a"; } + +.fa-shopping-cart::before { + content: "\f07a"; } + +.fa-vials::before { + content: "\f493"; } + +.fa-plug-circle-plus::before { + content: "\e55f"; } + +.fa-place-of-worship::before { + content: "\f67f"; } + +.fa-grip-vertical::before { + content: "\f58e"; } + +.fa-arrow-turn-up::before { + content: "\f148"; } + +.fa-level-up::before { + content: "\f148"; } + +.fa-u::before { + content: "\55"; } + +.fa-square-root-variable::before { + content: "\f698"; } + +.fa-square-root-alt::before { + content: "\f698"; } + +.fa-clock::before { + content: "\f017"; } + +.fa-clock-four::before { + content: "\f017"; } + +.fa-backward-step::before { + content: "\f048"; } + +.fa-step-backward::before { + content: "\f048"; } + +.fa-pallet::before { + content: "\f482"; } + +.fa-faucet::before { + content: "\e005"; } + +.fa-baseball-bat-ball::before { + content: "\f432"; } + +.fa-s::before { + content: "\53"; } + +.fa-timeline::before { + content: "\e29c"; } + +.fa-keyboard::before { + content: "\f11c"; } + +.fa-caret-down::before { + content: "\f0d7"; } + +.fa-house-chimney-medical::before { + content: "\f7f2"; } + +.fa-clinic-medical::before { + content: "\f7f2"; } + +.fa-temperature-three-quarters::before { + content: "\f2c8"; } + +.fa-temperature-3::before { + content: "\f2c8"; } + +.fa-thermometer-3::before { + content: "\f2c8"; } + +.fa-thermometer-three-quarters::before { + content: "\f2c8"; } + +.fa-mobile-screen::before { + content: "\f3cf"; } + +.fa-mobile-android-alt::before { + content: "\f3cf"; } + +.fa-plane-up::before { + content: "\e22d"; } + +.fa-piggy-bank::before { + content: "\f4d3"; } + +.fa-battery-half::before { + content: "\f242"; } + +.fa-battery-3::before { + content: "\f242"; } + +.fa-mountain-city::before { + content: "\e52e"; } + +.fa-coins::before { + content: "\f51e"; } + +.fa-khanda::before { + content: "\f66d"; } + +.fa-sliders::before { + content: "\f1de"; } + +.fa-sliders-h::before { + content: "\f1de"; } + +.fa-folder-tree::before { + content: "\f802"; } + +.fa-network-wired::before { + content: "\f6ff"; } + +.fa-map-pin::before { + content: "\f276"; } + +.fa-hamsa::before { + content: "\f665"; } + +.fa-cent-sign::before { + content: "\e3f5"; } + +.fa-flask::before { + content: "\f0c3"; } + +.fa-person-pregnant::before { + content: "\e31e"; } + +.fa-wand-sparkles::before { + content: "\f72b"; } + +.fa-ellipsis-vertical::before { + content: "\f142"; } + +.fa-ellipsis-v::before { + content: "\f142"; } + +.fa-ticket::before { + content: "\f145"; } + +.fa-power-off::before { + content: "\f011"; } + +.fa-right-long::before { + content: "\f30b"; } + +.fa-long-arrow-alt-right::before { + content: "\f30b"; } + +.fa-flag-usa::before { + content: "\f74d"; } + +.fa-laptop-file::before { + content: "\e51d"; } + +.fa-tty::before { + content: "\f1e4"; } + +.fa-teletype::before { + content: "\f1e4"; } + +.fa-diagram-next::before { + content: "\e476"; } + +.fa-person-rifle::before { + content: "\e54e"; } + +.fa-house-medical-circle-exclamation::before { + content: "\e512"; } + +.fa-closed-captioning::before { + content: "\f20a"; } + +.fa-person-hiking::before { + content: "\f6ec"; } + +.fa-hiking::before { + content: "\f6ec"; } + +.fa-venus-double::before { + content: "\f226"; } + +.fa-images::before { + content: "\f302"; } + +.fa-calculator::before { + content: "\f1ec"; } + +.fa-people-pulling::before { + content: "\e535"; } + +.fa-n::before { + content: "\4e"; } + +.fa-cable-car::before { + content: "\f7da"; } + +.fa-tram::before { + content: "\f7da"; } + +.fa-cloud-rain::before { + content: "\f73d"; } + +.fa-building-circle-xmark::before { + content: "\e4d4"; } + +.fa-ship::before { + content: "\f21a"; } + +.fa-arrows-down-to-line::before { + content: "\e4b8"; } + +.fa-download::before { + content: "\f019"; } + +.fa-face-grin::before { + content: "\f580"; } + +.fa-grin::before { + content: "\f580"; } + +.fa-delete-left::before { + content: "\f55a"; } + +.fa-backspace::before { + content: "\f55a"; } + +.fa-eye-dropper::before { + content: "\f1fb"; } + +.fa-eye-dropper-empty::before { + content: "\f1fb"; } + +.fa-eyedropper::before { + content: "\f1fb"; } + +.fa-file-circle-check::before { + content: "\e5a0"; } + +.fa-forward::before { + content: "\f04e"; } + +.fa-mobile::before { + content: "\f3ce"; } + +.fa-mobile-android::before { + content: "\f3ce"; } + +.fa-mobile-phone::before { + content: "\f3ce"; } + +.fa-face-meh::before { + content: "\f11a"; } + +.fa-meh::before { + content: "\f11a"; } + +.fa-align-center::before { + content: "\f037"; } + +.fa-book-skull::before { + content: "\f6b7"; } + +.fa-book-dead::before { + content: "\f6b7"; } + +.fa-id-card::before { + content: "\f2c2"; } + +.fa-drivers-license::before { + content: "\f2c2"; } + +.fa-outdent::before { + content: "\f03b"; } + +.fa-dedent::before { + content: "\f03b"; } + +.fa-heart-circle-exclamation::before { + content: "\e4fe"; } + +.fa-house::before { + content: "\f015"; } + +.fa-home::before { + content: "\f015"; } + +.fa-home-alt::before { + content: "\f015"; } + +.fa-home-lg-alt::before { + content: "\f015"; } + +.fa-calendar-week::before { + content: "\f784"; } + +.fa-laptop-medical::before { + content: "\f812"; } + +.fa-b::before { + content: "\42"; } + +.fa-file-medical::before { + content: "\f477"; } + +.fa-dice-one::before { + content: "\f525"; } + +.fa-kiwi-bird::before { + content: "\f535"; } + +.fa-arrow-right-arrow-left::before { + content: "\f0ec"; } + +.fa-exchange::before { + content: "\f0ec"; } + +.fa-rotate-right::before { + content: "\f2f9"; } + +.fa-redo-alt::before { + content: "\f2f9"; } + +.fa-rotate-forward::before { + content: "\f2f9"; } + +.fa-utensils::before { + content: "\f2e7"; } + +.fa-cutlery::before { + content: "\f2e7"; } + +.fa-arrow-up-wide-short::before { + content: "\f161"; } + +.fa-sort-amount-up::before { + content: "\f161"; } + +.fa-mill-sign::before { + content: "\e1ed"; } + +.fa-bowl-rice::before { + content: "\e2eb"; } + +.fa-skull::before { + content: "\f54c"; } + +.fa-tower-broadcast::before { + content: "\f519"; } + +.fa-broadcast-tower::before { + content: "\f519"; } + +.fa-truck-pickup::before { + content: "\f63c"; } + +.fa-up-long::before { + content: "\f30c"; } + +.fa-long-arrow-alt-up::before { + content: "\f30c"; } + +.fa-stop::before { + content: "\f04d"; } + +.fa-code-merge::before { + content: "\f387"; } + +.fa-upload::before { + content: "\f093"; } + +.fa-hurricane::before { + content: "\f751"; } + +.fa-mound::before { + content: "\e52d"; } + +.fa-toilet-portable::before { + content: "\e583"; } + +.fa-compact-disc::before { + content: "\f51f"; } + +.fa-file-arrow-down::before { + content: "\f56d"; } + +.fa-file-download::before { + content: "\f56d"; } + +.fa-caravan::before { + content: "\f8ff"; } + +.fa-shield-cat::before { + content: "\e572"; } + +.fa-bolt::before { + content: "\f0e7"; } + +.fa-zap::before { + content: "\f0e7"; } + +.fa-glass-water::before { + content: "\e4f4"; } + +.fa-oil-well::before { + content: "\e532"; } + +.fa-vault::before { + content: "\e2c5"; } + +.fa-mars::before { + content: "\f222"; } + +.fa-toilet::before { + content: "\f7d8"; } + +.fa-plane-circle-xmark::before { + content: "\e557"; } + +.fa-yen-sign::before { + content: "\f157"; } + +.fa-cny::before { + content: "\f157"; } + +.fa-jpy::before { + content: "\f157"; } + +.fa-rmb::before { + content: "\f157"; } + +.fa-yen::before { + content: "\f157"; } + +.fa-ruble-sign::before { + content: "\f158"; } + +.fa-rouble::before { + content: "\f158"; } + +.fa-rub::before { + content: "\f158"; } + +.fa-ruble::before { + content: "\f158"; } + +.fa-sun::before { + content: "\f185"; } + +.fa-guitar::before { + content: "\f7a6"; } + +.fa-face-laugh-wink::before { + content: "\f59c"; } + +.fa-laugh-wink::before { + content: "\f59c"; } + +.fa-horse-head::before { + content: "\f7ab"; } + +.fa-bore-hole::before { + content: "\e4c3"; } + +.fa-industry::before { + content: "\f275"; } + +.fa-circle-down::before { + content: "\f358"; } + +.fa-arrow-alt-circle-down::before { + content: "\f358"; } + +.fa-arrows-turn-to-dots::before { + content: "\e4c1"; } + +.fa-florin-sign::before { + content: "\e184"; } + +.fa-arrow-down-short-wide::before { + content: "\f884"; } + +.fa-sort-amount-desc::before { + content: "\f884"; } + +.fa-sort-amount-down-alt::before { + content: "\f884"; } + +.fa-less-than::before { + content: "\3c"; } + +.fa-angle-down::before { + content: "\f107"; } + +.fa-car-tunnel::before { + content: "\e4de"; } + +.fa-head-side-cough::before { + content: "\e061"; } + +.fa-grip-lines::before { + content: "\f7a4"; } + +.fa-thumbs-down::before { + content: "\f165"; } + +.fa-user-lock::before { + content: "\f502"; } + +.fa-arrow-right-long::before { + content: "\f178"; } + +.fa-long-arrow-right::before { + content: "\f178"; } + +.fa-anchor-circle-xmark::before { + content: "\e4ac"; } + +.fa-ellipsis::before { + content: "\f141"; } + +.fa-ellipsis-h::before { + content: "\f141"; } + +.fa-chess-pawn::before { + content: "\f443"; } + +.fa-kit-medical::before { + content: "\f479"; } + +.fa-first-aid::before { + content: "\f479"; } + +.fa-person-through-window::before { + content: "\e5a9"; } + +.fa-toolbox::before { + content: "\f552"; } + +.fa-hands-holding-circle::before { + content: "\e4fb"; } + +.fa-bug::before { + content: "\f188"; } + +.fa-credit-card::before { + content: "\f09d"; } + +.fa-credit-card-alt::before { + content: "\f09d"; } + +.fa-car::before { + content: "\f1b9"; } + +.fa-automobile::before { + content: "\f1b9"; } + +.fa-hand-holding-hand::before { + content: "\e4f7"; } + +.fa-book-open-reader::before { + content: "\f5da"; } + +.fa-book-reader::before { + content: "\f5da"; } + +.fa-mountain-sun::before { + content: "\e52f"; } + +.fa-arrows-left-right-to-line::before { + content: "\e4ba"; } + +.fa-dice-d20::before { + content: "\f6cf"; } + +.fa-truck-droplet::before { + content: "\e58c"; } + +.fa-file-circle-xmark::before { + content: "\e5a1"; } + +.fa-temperature-arrow-up::before { + content: "\e040"; } + +.fa-temperature-up::before { + content: "\e040"; } + +.fa-medal::before { + content: "\f5a2"; } + +.fa-bed::before { + content: "\f236"; } + +.fa-square-h::before { + content: "\f0fd"; } + +.fa-h-square::before { + content: "\f0fd"; } + +.fa-podcast::before { + content: "\f2ce"; } + +.fa-temperature-full::before { + content: "\f2c7"; } + +.fa-temperature-4::before { + content: "\f2c7"; } + +.fa-thermometer-4::before { + content: "\f2c7"; } + +.fa-thermometer-full::before { + content: "\f2c7"; } + +.fa-bell::before { + content: "\f0f3"; } + +.fa-superscript::before { + content: "\f12b"; } + +.fa-plug-circle-xmark::before { + content: "\e560"; } + +.fa-star-of-life::before { + content: "\f621"; } + +.fa-phone-slash::before { + content: "\f3dd"; } + +.fa-paint-roller::before { + content: "\f5aa"; } + +.fa-handshake-angle::before { + content: "\f4c4"; } + +.fa-hands-helping::before { + content: "\f4c4"; } + +.fa-location-dot::before { + content: "\f3c5"; } + +.fa-map-marker-alt::before { + content: "\f3c5"; } + +.fa-file::before { + content: "\f15b"; } + +.fa-greater-than::before { + content: "\3e"; } + +.fa-person-swimming::before { + content: "\f5c4"; } + +.fa-swimmer::before { + content: "\f5c4"; } + +.fa-arrow-down::before { + content: "\f063"; } + +.fa-droplet::before { + content: "\f043"; } + +.fa-tint::before { + content: "\f043"; } + +.fa-eraser::before { + content: "\f12d"; } + +.fa-earth-americas::before { + content: "\f57d"; } + +.fa-earth::before { + content: "\f57d"; } + +.fa-earth-america::before { + content: "\f57d"; } + +.fa-globe-americas::before { + content: "\f57d"; } + +.fa-person-burst::before { + content: "\e53b"; } + +.fa-dove::before { + content: "\f4ba"; } + +.fa-battery-empty::before { + content: "\f244"; } + +.fa-battery-0::before { + content: "\f244"; } + +.fa-socks::before { + content: "\f696"; } + +.fa-inbox::before { + content: "\f01c"; } + +.fa-section::before { + content: "\e447"; } + +.fa-gauge-high::before { + content: "\f625"; } + +.fa-tachometer-alt::before { + content: "\f625"; } + +.fa-tachometer-alt-fast::before { + content: "\f625"; } + +.fa-envelope-open-text::before { + content: "\f658"; } + +.fa-hospital::before { + content: "\f0f8"; } + +.fa-hospital-alt::before { + content: "\f0f8"; } + +.fa-hospital-wide::before { + content: "\f0f8"; } + +.fa-wine-bottle::before { + content: "\f72f"; } + +.fa-chess-rook::before { + content: "\f447"; } + +.fa-bars-staggered::before { + content: "\f550"; } + +.fa-reorder::before { + content: "\f550"; } + +.fa-stream::before { + content: "\f550"; } + +.fa-dharmachakra::before { + content: "\f655"; } + +.fa-hotdog::before { + content: "\f80f"; } + +.fa-person-walking-with-cane::before { + content: "\f29d"; } + +.fa-blind::before { + content: "\f29d"; } + +.fa-drum::before { + content: "\f569"; } + +.fa-ice-cream::before { + content: "\f810"; } + +.fa-heart-circle-bolt::before { + content: "\e4fc"; } + +.fa-fax::before { + content: "\f1ac"; } + +.fa-paragraph::before { + content: "\f1dd"; } + +.fa-check-to-slot::before { + content: "\f772"; } + +.fa-vote-yea::before { + content: "\f772"; } + +.fa-star-half::before { + content: "\f089"; } + +.fa-boxes-stacked::before { + content: "\f468"; } + +.fa-boxes::before { + content: "\f468"; } + +.fa-boxes-alt::before { + content: "\f468"; } + +.fa-link::before { + content: "\f0c1"; } + +.fa-chain::before { + content: "\f0c1"; } + +.fa-ear-listen::before { + content: "\f2a2"; } + +.fa-assistive-listening-systems::before { + content: "\f2a2"; } + +.fa-tree-city::before { + content: "\e587"; } + +.fa-play::before { + content: "\f04b"; } + +.fa-font::before { + content: "\f031"; } + +.fa-rupiah-sign::before { + content: "\e23d"; } + +.fa-magnifying-glass::before { + content: "\f002"; } + +.fa-search::before { + content: "\f002"; } + +.fa-table-tennis-paddle-ball::before { + content: "\f45d"; } + +.fa-ping-pong-paddle-ball::before { + content: "\f45d"; } + +.fa-table-tennis::before { + content: "\f45d"; } + +.fa-person-dots-from-line::before { + content: "\f470"; } + +.fa-diagnoses::before { + content: "\f470"; } + +.fa-trash-can-arrow-up::before { + content: "\f82a"; } + +.fa-trash-restore-alt::before { + content: "\f82a"; } + +.fa-naira-sign::before { + content: "\e1f6"; } + +.fa-cart-arrow-down::before { + content: "\f218"; } + +.fa-walkie-talkie::before { + content: "\f8ef"; } + +.fa-file-pen::before { + content: "\f31c"; } + +.fa-file-edit::before { + content: "\f31c"; } + +.fa-receipt::before { + content: "\f543"; } + +.fa-square-pen::before { + content: "\f14b"; } + +.fa-pen-square::before { + content: "\f14b"; } + +.fa-pencil-square::before { + content: "\f14b"; } + +.fa-suitcase-rolling::before { + content: "\f5c1"; } + +.fa-person-circle-exclamation::before { + content: "\e53f"; } + +.fa-chevron-down::before { + content: "\f078"; } + +.fa-battery-full::before { + content: "\f240"; } + +.fa-battery::before { + content: "\f240"; } + +.fa-battery-5::before { + content: "\f240"; } + +.fa-skull-crossbones::before { + content: "\f714"; } + +.fa-code-compare::before { + content: "\e13a"; } + +.fa-list-ul::before { + content: "\f0ca"; } + +.fa-list-dots::before { + content: "\f0ca"; } + +.fa-school-lock::before { + content: "\e56f"; } + +.fa-tower-cell::before { + content: "\e585"; } + +.fa-down-long::before { + content: "\f309"; } + +.fa-long-arrow-alt-down::before { + content: "\f309"; } + +.fa-ranking-star::before { + content: "\e561"; } + +.fa-chess-king::before { + content: "\f43f"; } + +.fa-person-harassing::before { + content: "\e549"; } + +.fa-brazilian-real-sign::before { + content: "\e46c"; } + +.fa-landmark-dome::before { + content: "\f752"; } + +.fa-landmark-alt::before { + content: "\f752"; } + +.fa-arrow-up::before { + content: "\f062"; } + +.fa-tv::before { + content: "\f26c"; } + +.fa-television::before { + content: "\f26c"; } + +.fa-tv-alt::before { + content: "\f26c"; } + +.fa-shrimp::before { + content: "\e448"; } + +.fa-list-check::before { + content: "\f0ae"; } + +.fa-tasks::before { + content: "\f0ae"; } + +.fa-jug-detergent::before { + content: "\e519"; } + +.fa-circle-user::before { + content: "\f2bd"; } + +.fa-user-circle::before { + content: "\f2bd"; } + +.fa-user-shield::before { + content: "\f505"; } + +.fa-wind::before { + content: "\f72e"; } + +.fa-car-burst::before { + content: "\f5e1"; } + +.fa-car-crash::before { + content: "\f5e1"; } + +.fa-y::before { + content: "\59"; } + +.fa-person-snowboarding::before { + content: "\f7ce"; } + +.fa-snowboarding::before { + content: "\f7ce"; } + +.fa-truck-fast::before { + content: "\f48b"; } + +.fa-shipping-fast::before { + content: "\f48b"; } + +.fa-fish::before { + content: "\f578"; } + +.fa-user-graduate::before { + content: "\f501"; } + +.fa-circle-half-stroke::before { + content: "\f042"; } + +.fa-adjust::before { + content: "\f042"; } + +.fa-clapperboard::before { + content: "\e131"; } + +.fa-circle-radiation::before { + content: "\f7ba"; } + +.fa-radiation-alt::before { + content: "\f7ba"; } + +.fa-baseball::before { + content: "\f433"; } + +.fa-baseball-ball::before { + content: "\f433"; } + +.fa-jet-fighter-up::before { + content: "\e518"; } + +.fa-diagram-project::before { + content: "\f542"; } + +.fa-project-diagram::before { + content: "\f542"; } + +.fa-copy::before { + content: "\f0c5"; } + +.fa-volume-xmark::before { + content: "\f6a9"; } + +.fa-volume-mute::before { + content: "\f6a9"; } + +.fa-volume-times::before { + content: "\f6a9"; } + +.fa-hand-sparkles::before { + content: "\e05d"; } + +.fa-grip::before { + content: "\f58d"; } + +.fa-grip-horizontal::before { + content: "\f58d"; } + +.fa-share-from-square::before { + content: "\f14d"; } + +.fa-share-square::before { + content: "\f14d"; } + +.fa-child-combatant::before { + content: "\e4e0"; } + +.fa-child-rifle::before { + content: "\e4e0"; } + +.fa-gun::before { + content: "\e19b"; } + +.fa-square-phone::before { + content: "\f098"; } + +.fa-phone-square::before { + content: "\f098"; } + +.fa-plus::before { + content: "\2b"; } + +.fa-add::before { + content: "\2b"; } + +.fa-expand::before { + content: "\f065"; } + +.fa-computer::before { + content: "\e4e5"; } + +.fa-xmark::before { + content: "\f00d"; } + +.fa-close::before { + content: "\f00d"; } + +.fa-multiply::before { + content: "\f00d"; } + +.fa-remove::before { + content: "\f00d"; } + +.fa-times::before { + content: "\f00d"; } + +.fa-arrows-up-down-left-right::before { + content: "\f047"; } + +.fa-arrows::before { + content: "\f047"; } + +.fa-chalkboard-user::before { + content: "\f51c"; } + +.fa-chalkboard-teacher::before { + content: "\f51c"; } + +.fa-peso-sign::before { + content: "\e222"; } + +.fa-building-shield::before { + content: "\e4d8"; } + +.fa-baby::before { + content: "\f77c"; } + +.fa-users-line::before { + content: "\e592"; } + +.fa-quote-left::before { + content: "\f10d"; } + +.fa-quote-left-alt::before { + content: "\f10d"; } + +.fa-tractor::before { + content: "\f722"; } + +.fa-trash-arrow-up::before { + content: "\f829"; } + +.fa-trash-restore::before { + content: "\f829"; } + +.fa-arrow-down-up-lock::before { + content: "\e4b0"; } + +.fa-lines-leaning::before { + content: "\e51e"; } + +.fa-ruler-combined::before { + content: "\f546"; } + +.fa-copyright::before { + content: "\f1f9"; } + +.fa-equals::before { + content: "\3d"; } + +.fa-blender::before { + content: "\f517"; } + +.fa-teeth::before { + content: "\f62e"; } + +.fa-shekel-sign::before { + content: "\f20b"; } + +.fa-ils::before { + content: "\f20b"; } + +.fa-shekel::before { + content: "\f20b"; } + +.fa-sheqel::before { + content: "\f20b"; } + +.fa-sheqel-sign::before { + content: "\f20b"; } + +.fa-map::before { + content: "\f279"; } + +.fa-rocket::before { + content: "\f135"; } + +.fa-photo-film::before { + content: "\f87c"; } + +.fa-photo-video::before { + content: "\f87c"; } + +.fa-folder-minus::before { + content: "\f65d"; } + +.fa-store::before { + content: "\f54e"; } + +.fa-arrow-trend-up::before { + content: "\e098"; } + +.fa-plug-circle-minus::before { + content: "\e55e"; } + +.fa-sign-hanging::before { + content: "\f4d9"; } + +.fa-sign::before { + content: "\f4d9"; } + +.fa-bezier-curve::before { + content: "\f55b"; } + +.fa-bell-slash::before { + content: "\f1f6"; } + +.fa-tablet::before { + content: "\f3fb"; } + +.fa-tablet-android::before { + content: "\f3fb"; } + +.fa-school-flag::before { + content: "\e56e"; } + +.fa-fill::before { + content: "\f575"; } + +.fa-angle-up::before { + content: "\f106"; } + +.fa-drumstick-bite::before { + content: "\f6d7"; } + +.fa-holly-berry::before { + content: "\f7aa"; } + +.fa-chevron-left::before { + content: "\f053"; } + +.fa-bacteria::before { + content: "\e059"; } + +.fa-hand-lizard::before { + content: "\f258"; } + +.fa-notdef::before { + content: "\e1fe"; } + +.fa-disease::before { + content: "\f7fa"; } + +.fa-briefcase-medical::before { + content: "\f469"; } + +.fa-genderless::before { + content: "\f22d"; } + +.fa-chevron-right::before { + content: "\f054"; } + +.fa-retweet::before { + content: "\f079"; } + +.fa-car-rear::before { + content: "\f5de"; } + +.fa-car-alt::before { + content: "\f5de"; } + +.fa-pump-soap::before { + content: "\e06b"; } + +.fa-video-slash::before { + content: "\f4e2"; } + +.fa-battery-quarter::before { + content: "\f243"; } + +.fa-battery-2::before { + content: "\f243"; } + +.fa-radio::before { + content: "\f8d7"; } + +.fa-baby-carriage::before { + content: "\f77d"; } + +.fa-carriage-baby::before { + content: "\f77d"; } + +.fa-traffic-light::before { + content: "\f637"; } + +.fa-thermometer::before { + content: "\f491"; } + +.fa-vr-cardboard::before { + content: "\f729"; } + +.fa-hand-middle-finger::before { + content: "\f806"; } + +.fa-percent::before { + content: "\25"; } + +.fa-percentage::before { + content: "\25"; } + +.fa-truck-moving::before { + content: "\f4df"; } + +.fa-glass-water-droplet::before { + content: "\e4f5"; } + +.fa-display::before { + content: "\e163"; } + +.fa-face-smile::before { + content: "\f118"; } + +.fa-smile::before { + content: "\f118"; } + +.fa-thumbtack::before { + content: "\f08d"; } + +.fa-thumb-tack::before { + content: "\f08d"; } + +.fa-trophy::before { + content: "\f091"; } + +.fa-person-praying::before { + content: "\f683"; } + +.fa-pray::before { + content: "\f683"; } + +.fa-hammer::before { + content: "\f6e3"; } + +.fa-hand-peace::before { + content: "\f25b"; } + +.fa-rotate::before { + content: "\f2f1"; } + +.fa-sync-alt::before { + content: "\f2f1"; } + +.fa-spinner::before { + content: "\f110"; } + +.fa-robot::before { + content: "\f544"; } + +.fa-peace::before { + content: "\f67c"; } + +.fa-gears::before { + content: "\f085"; } + +.fa-cogs::before { + content: "\f085"; } + +.fa-warehouse::before { + content: "\f494"; } + +.fa-arrow-up-right-dots::before { + content: "\e4b7"; } + +.fa-splotch::before { + content: "\f5bc"; } + +.fa-face-grin-hearts::before { + content: "\f584"; } + +.fa-grin-hearts::before { + content: "\f584"; } + +.fa-dice-four::before { + content: "\f524"; } + +.fa-sim-card::before { + content: "\f7c4"; } + +.fa-transgender::before { + content: "\f225"; } + +.fa-transgender-alt::before { + content: "\f225"; } + +.fa-mercury::before { + content: "\f223"; } + +.fa-arrow-turn-down::before { + content: "\f149"; } + +.fa-level-down::before { + content: "\f149"; } + +.fa-person-falling-burst::before { + content: "\e547"; } + +.fa-award::before { + content: "\f559"; } + +.fa-ticket-simple::before { + content: "\f3ff"; } + +.fa-ticket-alt::before { + content: "\f3ff"; } + +.fa-building::before { + content: "\f1ad"; } + +.fa-angles-left::before { + content: "\f100"; } + +.fa-angle-double-left::before { + content: "\f100"; } + +.fa-qrcode::before { + content: "\f029"; } + +.fa-clock-rotate-left::before { + content: "\f1da"; } + +.fa-history::before { + content: "\f1da"; } + +.fa-face-grin-beam-sweat::before { + content: "\f583"; } + +.fa-grin-beam-sweat::before { + content: "\f583"; } + +.fa-file-export::before { + content: "\f56e"; } + +.fa-arrow-right-from-file::before { + content: "\f56e"; } + +.fa-shield::before { + content: "\f132"; } + +.fa-shield-blank::before { + content: "\f132"; } + +.fa-arrow-up-short-wide::before { + content: "\f885"; } + +.fa-sort-amount-up-alt::before { + content: "\f885"; } + +.fa-house-medical::before { + content: "\e3b2"; } + +.fa-golf-ball-tee::before { + content: "\f450"; } + +.fa-golf-ball::before { + content: "\f450"; } + +.fa-circle-chevron-left::before { + content: "\f137"; } + +.fa-chevron-circle-left::before { + content: "\f137"; } + +.fa-house-chimney-window::before { + content: "\e00d"; } + +.fa-pen-nib::before { + content: "\f5ad"; } + +.fa-tent-arrow-turn-left::before { + content: "\e580"; } + +.fa-tents::before { + content: "\e582"; } + +.fa-wand-magic::before { + content: "\f0d0"; } + +.fa-magic::before { + content: "\f0d0"; } + +.fa-dog::before { + content: "\f6d3"; } + +.fa-carrot::before { + content: "\f787"; } + +.fa-moon::before { + content: "\f186"; } + +.fa-wine-glass-empty::before { + content: "\f5ce"; } + +.fa-wine-glass-alt::before { + content: "\f5ce"; } + +.fa-cheese::before { + content: "\f7ef"; } + +.fa-yin-yang::before { + content: "\f6ad"; } + +.fa-music::before { + content: "\f001"; } + +.fa-code-commit::before { + content: "\f386"; } + +.fa-temperature-low::before { + content: "\f76b"; } + +.fa-person-biking::before { + content: "\f84a"; } + +.fa-biking::before { + content: "\f84a"; } + +.fa-broom::before { + content: "\f51a"; } + +.fa-shield-heart::before { + content: "\e574"; } + +.fa-gopuram::before { + content: "\f664"; } + +.fa-earth-oceania::before { + content: "\e47b"; } + +.fa-globe-oceania::before { + content: "\e47b"; } + +.fa-square-xmark::before { + content: "\f2d3"; } + +.fa-times-square::before { + content: "\f2d3"; } + +.fa-xmark-square::before { + content: "\f2d3"; } + +.fa-hashtag::before { + content: "\23"; } + +.fa-up-right-and-down-left-from-center::before { + content: "\f424"; } + +.fa-expand-alt::before { + content: "\f424"; } + +.fa-oil-can::before { + content: "\f613"; } + +.fa-t::before { + content: "\54"; } + +.fa-hippo::before { + content: "\f6ed"; } + +.fa-chart-column::before { + content: "\e0e3"; } + +.fa-infinity::before { + content: "\f534"; } + +.fa-vial-circle-check::before { + content: "\e596"; } + +.fa-person-arrow-down-to-line::before { + content: "\e538"; } + +.fa-voicemail::before { + content: "\f897"; } + +.fa-fan::before { + content: "\f863"; } + +.fa-person-walking-luggage::before { + content: "\e554"; } + +.fa-up-down::before { + content: "\f338"; } + +.fa-arrows-alt-v::before { + content: "\f338"; } + +.fa-cloud-moon-rain::before { + content: "\f73c"; } + +.fa-calendar::before { + content: "\f133"; } + +.fa-trailer::before { + content: "\e041"; } + +.fa-bahai::before { + content: "\f666"; } + +.fa-haykal::before { + content: "\f666"; } + +.fa-sd-card::before { + content: "\f7c2"; } + +.fa-dragon::before { + content: "\f6d5"; } + +.fa-shoe-prints::before { + content: "\f54b"; } + +.fa-circle-plus::before { + content: "\f055"; } + +.fa-plus-circle::before { + content: "\f055"; } + +.fa-face-grin-tongue-wink::before { + content: "\f58b"; } + +.fa-grin-tongue-wink::before { + content: "\f58b"; } + +.fa-hand-holding::before { + content: "\f4bd"; } + +.fa-plug-circle-exclamation::before { + content: "\e55d"; } + +.fa-link-slash::before { + content: "\f127"; } + +.fa-chain-broken::before { + content: "\f127"; } + +.fa-chain-slash::before { + content: "\f127"; } + +.fa-unlink::before { + content: "\f127"; } + +.fa-clone::before { + content: "\f24d"; } + +.fa-person-walking-arrow-loop-left::before { + content: "\e551"; } + +.fa-arrow-up-z-a::before { + content: "\f882"; } + +.fa-sort-alpha-up-alt::before { + content: "\f882"; } + +.fa-fire-flame-curved::before { + content: "\f7e4"; } + +.fa-fire-alt::before { + content: "\f7e4"; } + +.fa-tornado::before { + content: "\f76f"; } + +.fa-file-circle-plus::before { + content: "\e494"; } + +.fa-book-quran::before { + content: "\f687"; } + +.fa-quran::before { + content: "\f687"; } + +.fa-anchor::before { + content: "\f13d"; } + +.fa-border-all::before { + content: "\f84c"; } + +.fa-face-angry::before { + content: "\f556"; } + +.fa-angry::before { + content: "\f556"; } + +.fa-cookie-bite::before { + content: "\f564"; } + +.fa-arrow-trend-down::before { + content: "\e097"; } + +.fa-rss::before { + content: "\f09e"; } + +.fa-feed::before { + content: "\f09e"; } + +.fa-draw-polygon::before { + content: "\f5ee"; } + +.fa-scale-balanced::before { + content: "\f24e"; } + +.fa-balance-scale::before { + content: "\f24e"; } + +.fa-gauge-simple-high::before { + content: "\f62a"; } + +.fa-tachometer::before { + content: "\f62a"; } + +.fa-tachometer-fast::before { + content: "\f62a"; } + +.fa-shower::before { + content: "\f2cc"; } + +.fa-desktop::before { + content: "\f390"; } + +.fa-desktop-alt::before { + content: "\f390"; } + +.fa-m::before { + content: "\4d"; } + +.fa-table-list::before { + content: "\f00b"; } + +.fa-th-list::before { + content: "\f00b"; } + +.fa-comment-sms::before { + content: "\f7cd"; } + +.fa-sms::before { + content: "\f7cd"; } + +.fa-book::before { + content: "\f02d"; } + +.fa-user-plus::before { + content: "\f234"; } + +.fa-check::before { + content: "\f00c"; } + +.fa-battery-three-quarters::before { + content: "\f241"; } + +.fa-battery-4::before { + content: "\f241"; } + +.fa-house-circle-check::before { + content: "\e509"; } + +.fa-angle-left::before { + content: "\f104"; } + +.fa-diagram-successor::before { + content: "\e47a"; } + +.fa-truck-arrow-right::before { + content: "\e58b"; } + +.fa-arrows-split-up-and-left::before { + content: "\e4bc"; } + +.fa-hand-fist::before { + content: "\f6de"; } + +.fa-fist-raised::before { + content: "\f6de"; } + +.fa-cloud-moon::before { + content: "\f6c3"; } + +.fa-briefcase::before { + content: "\f0b1"; } + +.fa-person-falling::before { + content: "\e546"; } + +.fa-image-portrait::before { + content: "\f3e0"; } + +.fa-portrait::before { + content: "\f3e0"; } + +.fa-user-tag::before { + content: "\f507"; } + +.fa-rug::before { + content: "\e569"; } + +.fa-earth-europe::before { + content: "\f7a2"; } + +.fa-globe-europe::before { + content: "\f7a2"; } + +.fa-cart-flatbed-suitcase::before { + content: "\f59d"; } + +.fa-luggage-cart::before { + content: "\f59d"; } + +.fa-rectangle-xmark::before { + content: "\f410"; } + +.fa-rectangle-times::before { + content: "\f410"; } + +.fa-times-rectangle::before { + content: "\f410"; } + +.fa-window-close::before { + content: "\f410"; } + +.fa-baht-sign::before { + content: "\e0ac"; } + +.fa-book-open::before { + content: "\f518"; } + +.fa-book-journal-whills::before { + content: "\f66a"; } + +.fa-journal-whills::before { + content: "\f66a"; } + +.fa-handcuffs::before { + content: "\e4f8"; } + +.fa-triangle-exclamation::before { + content: "\f071"; } + +.fa-exclamation-triangle::before { + content: "\f071"; } + +.fa-warning::before { + content: "\f071"; } + +.fa-database::before { + content: "\f1c0"; } + +.fa-share::before { + content: "\f064"; } + +.fa-mail-forward::before { + content: "\f064"; } + +.fa-bottle-droplet::before { + content: "\e4c4"; } + +.fa-mask-face::before { + content: "\e1d7"; } + +.fa-hill-rockslide::before { + content: "\e508"; } + +.fa-right-left::before { + content: "\f362"; } + +.fa-exchange-alt::before { + content: "\f362"; } + +.fa-paper-plane::before { + content: "\f1d8"; } + +.fa-road-circle-exclamation::before { + content: "\e565"; } + +.fa-dungeon::before { + content: "\f6d9"; } + +.fa-align-right::before { + content: "\f038"; } + +.fa-money-bill-1-wave::before { + content: "\f53b"; } + +.fa-money-bill-wave-alt::before { + content: "\f53b"; } + +.fa-life-ring::before { + content: "\f1cd"; } + +.fa-hands::before { + content: "\f2a7"; } + +.fa-sign-language::before { + content: "\f2a7"; } + +.fa-signing::before { + content: "\f2a7"; } + +.fa-calendar-day::before { + content: "\f783"; } + +.fa-water-ladder::before { + content: "\f5c5"; } + +.fa-ladder-water::before { + content: "\f5c5"; } + +.fa-swimming-pool::before { + content: "\f5c5"; } + +.fa-arrows-up-down::before { + content: "\f07d"; } + +.fa-arrows-v::before { + content: "\f07d"; } + +.fa-face-grimace::before { + content: "\f57f"; } + +.fa-grimace::before { + content: "\f57f"; } + +.fa-wheelchair-move::before { + content: "\e2ce"; } + +.fa-wheelchair-alt::before { + content: "\e2ce"; } + +.fa-turn-down::before { + content: "\f3be"; } + +.fa-level-down-alt::before { + content: "\f3be"; } + +.fa-person-walking-arrow-right::before { + content: "\e552"; } + +.fa-square-envelope::before { + content: "\f199"; } + +.fa-envelope-square::before { + content: "\f199"; } + +.fa-dice::before { + content: "\f522"; } + +.fa-bowling-ball::before { + content: "\f436"; } + +.fa-brain::before { + content: "\f5dc"; } + +.fa-bandage::before { + content: "\f462"; } + +.fa-band-aid::before { + content: "\f462"; } + +.fa-calendar-minus::before { + content: "\f272"; } + +.fa-circle-xmark::before { + content: "\f057"; } + +.fa-times-circle::before { + content: "\f057"; } + +.fa-xmark-circle::before { + content: "\f057"; } + +.fa-gifts::before { + content: "\f79c"; } + +.fa-hotel::before { + content: "\f594"; } + +.fa-earth-asia::before { + content: "\f57e"; } + +.fa-globe-asia::before { + content: "\f57e"; } + +.fa-id-card-clip::before { + content: "\f47f"; } + +.fa-id-card-alt::before { + content: "\f47f"; } + +.fa-magnifying-glass-plus::before { + content: "\f00e"; } + +.fa-search-plus::before { + content: "\f00e"; } + +.fa-thumbs-up::before { + content: "\f164"; } + +.fa-user-clock::before { + content: "\f4fd"; } + +.fa-hand-dots::before { + content: "\f461"; } + +.fa-allergies::before { + content: "\f461"; } + +.fa-file-invoice::before { + content: "\f570"; } + +.fa-window-minimize::before { + content: "\f2d1"; } + +.fa-mug-saucer::before { + content: "\f0f4"; } + +.fa-coffee::before { + content: "\f0f4"; } + +.fa-brush::before { + content: "\f55d"; } + +.fa-mask::before { + content: "\f6fa"; } + +.fa-magnifying-glass-minus::before { + content: "\f010"; } + +.fa-search-minus::before { + content: "\f010"; } + +.fa-ruler-vertical::before { + content: "\f548"; } + +.fa-user-large::before { + content: "\f406"; } + +.fa-user-alt::before { + content: "\f406"; } + +.fa-train-tram::before { + content: "\e5b4"; } + +.fa-user-nurse::before { + content: "\f82f"; } + +.fa-syringe::before { + content: "\f48e"; } + +.fa-cloud-sun::before { + content: "\f6c4"; } + +.fa-stopwatch-20::before { + content: "\e06f"; } + +.fa-square-full::before { + content: "\f45c"; } + +.fa-magnet::before { + content: "\f076"; } + +.fa-jar::before { + content: "\e516"; } + +.fa-note-sticky::before { + content: "\f249"; } + +.fa-sticky-note::before { + content: "\f249"; } + +.fa-bug-slash::before { + content: "\e490"; } + +.fa-arrow-up-from-water-pump::before { + content: "\e4b6"; } + +.fa-bone::before { + content: "\f5d7"; } + +.fa-user-injured::before { + content: "\f728"; } + +.fa-face-sad-tear::before { + content: "\f5b4"; } + +.fa-sad-tear::before { + content: "\f5b4"; } + +.fa-plane::before { + content: "\f072"; } + +.fa-tent-arrows-down::before { + content: "\e581"; } + +.fa-exclamation::before { + content: "\21"; } + +.fa-arrows-spin::before { + content: "\e4bb"; } + +.fa-print::before { + content: "\f02f"; } + +.fa-turkish-lira-sign::before { + content: "\e2bb"; } + +.fa-try::before { + content: "\e2bb"; } + +.fa-turkish-lira::before { + content: "\e2bb"; } + +.fa-dollar-sign::before { + content: "\24"; } + +.fa-dollar::before { + content: "\24"; } + +.fa-usd::before { + content: "\24"; } + +.fa-x::before { + content: "\58"; } + +.fa-magnifying-glass-dollar::before { + content: "\f688"; } + +.fa-search-dollar::before { + content: "\f688"; } + +.fa-users-gear::before { + content: "\f509"; } + +.fa-users-cog::before { + content: "\f509"; } + +.fa-person-military-pointing::before { + content: "\e54a"; } + +.fa-building-columns::before { + content: "\f19c"; } + +.fa-bank::before { + content: "\f19c"; } + +.fa-institution::before { + content: "\f19c"; } + +.fa-museum::before { + content: "\f19c"; } + +.fa-university::before { + content: "\f19c"; } + +.fa-umbrella::before { + content: "\f0e9"; } + +.fa-trowel::before { + content: "\e589"; } + +.fa-d::before { + content: "\44"; } + +.fa-stapler::before { + content: "\e5af"; } + +.fa-masks-theater::before { + content: "\f630"; } + +.fa-theater-masks::before { + content: "\f630"; } + +.fa-kip-sign::before { + content: "\e1c4"; } + +.fa-hand-point-left::before { + content: "\f0a5"; } + +.fa-handshake-simple::before { + content: "\f4c6"; } + +.fa-handshake-alt::before { + content: "\f4c6"; } + +.fa-jet-fighter::before { + content: "\f0fb"; } + +.fa-fighter-jet::before { + content: "\f0fb"; } + +.fa-square-share-nodes::before { + content: "\f1e1"; } + +.fa-share-alt-square::before { + content: "\f1e1"; } + +.fa-barcode::before { + content: "\f02a"; } + +.fa-plus-minus::before { + content: "\e43c"; } + +.fa-video::before { + content: "\f03d"; } + +.fa-video-camera::before { + content: "\f03d"; } + +.fa-graduation-cap::before { + content: "\f19d"; } + +.fa-mortar-board::before { + content: "\f19d"; } + +.fa-hand-holding-medical::before { + content: "\e05c"; } + +.fa-person-circle-check::before { + content: "\e53e"; } + +.fa-turn-up::before { + content: "\f3bf"; } + +.fa-level-up-alt::before { + content: "\f3bf"; } + +.sr-only, +.fa-sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border-width: 0; } + +.sr-only-focusable:not(:focus), +.fa-sr-only-focusable:not(:focus) { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border-width: 0; } +:root, :host { + --fa-style-family-brands: 'Font Awesome 6 Brands'; + --fa-font-brands: normal 400 1em/1 'Font Awesome 6 Brands'; } + +@font-face { + font-family: 'Font Awesome 6 Brands'; + font-style: normal; + font-weight: 400; + font-display: block; + src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); } + +.fab, +.fa-brands { + font-weight: 400; } + +.fa-monero:before { + content: "\f3d0"; } + +.fa-hooli:before { + content: "\f427"; } + +.fa-yelp:before { + content: "\f1e9"; } + +.fa-cc-visa:before { + content: "\f1f0"; } + +.fa-lastfm:before { + content: "\f202"; } + +.fa-shopware:before { + content: "\f5b5"; } + +.fa-creative-commons-nc:before { + content: "\f4e8"; } + +.fa-aws:before { + content: "\f375"; } + +.fa-redhat:before { + content: "\f7bc"; } + +.fa-yoast:before { + content: "\f2b1"; } + +.fa-cloudflare:before { + content: "\e07d"; } + +.fa-ups:before { + content: "\f7e0"; } + +.fa-pixiv:before { + content: "\e640"; } + +.fa-wpexplorer:before { + content: "\f2de"; } + +.fa-dyalog:before { + content: "\f399"; } + +.fa-bity:before { + content: "\f37a"; } + +.fa-stackpath:before { + content: "\f842"; } + +.fa-buysellads:before { + content: "\f20d"; } + +.fa-first-order:before { + content: "\f2b0"; } + +.fa-modx:before { + content: "\f285"; } + +.fa-guilded:before { + content: "\e07e"; } + +.fa-vnv:before { + content: "\f40b"; } + +.fa-square-js:before { + content: "\f3b9"; } + +.fa-js-square:before { + content: "\f3b9"; } + +.fa-microsoft:before { + content: "\f3ca"; } + +.fa-qq:before { + content: "\f1d6"; } + +.fa-orcid:before { + content: "\f8d2"; } + +.fa-java:before { + content: "\f4e4"; } + +.fa-invision:before { + content: "\f7b0"; } + +.fa-creative-commons-pd-alt:before { + content: "\f4ed"; } + +.fa-centercode:before { + content: "\f380"; } + +.fa-glide-g:before { + content: "\f2a6"; } + +.fa-drupal:before { + content: "\f1a9"; } + +.fa-hire-a-helper:before { + content: "\f3b0"; } + +.fa-creative-commons-by:before { + content: "\f4e7"; } + +.fa-unity:before { + content: "\e049"; } + +.fa-whmcs:before { + content: "\f40d"; } + +.fa-rocketchat:before { + content: "\f3e8"; } + +.fa-vk:before { + content: "\f189"; } + +.fa-untappd:before { + content: "\f405"; } + +.fa-mailchimp:before { + content: "\f59e"; } + +.fa-css3-alt:before { + content: "\f38b"; } + +.fa-square-reddit:before { + content: "\f1a2"; } + +.fa-reddit-square:before { + content: "\f1a2"; } + +.fa-vimeo-v:before { + content: "\f27d"; } + +.fa-contao:before { + content: "\f26d"; } + +.fa-square-font-awesome:before { + content: "\e5ad"; } + +.fa-deskpro:before { + content: "\f38f"; } + +.fa-brave:before { + content: "\e63c"; } + +.fa-sistrix:before { + content: "\f3ee"; } + +.fa-square-instagram:before { + content: "\e055"; } + +.fa-instagram-square:before { + content: "\e055"; } + +.fa-battle-net:before { + content: "\f835"; } + +.fa-the-red-yeti:before { + content: "\f69d"; } + +.fa-square-hacker-news:before { + content: "\f3af"; } + +.fa-hacker-news-square:before { + content: "\f3af"; } + +.fa-edge:before { + content: "\f282"; } + +.fa-threads:before { + content: "\e618"; } + +.fa-napster:before { + content: "\f3d2"; } + +.fa-square-snapchat:before { + content: "\f2ad"; } + +.fa-snapchat-square:before { + content: "\f2ad"; } + +.fa-google-plus-g:before { + content: "\f0d5"; } + +.fa-artstation:before { + content: "\f77a"; } + +.fa-markdown:before { + content: "\f60f"; } + +.fa-sourcetree:before { + content: "\f7d3"; } + +.fa-google-plus:before { + content: "\f2b3"; } + +.fa-diaspora:before { + content: "\f791"; } + +.fa-foursquare:before { + content: "\f180"; } + +.fa-stack-overflow:before { + content: "\f16c"; } + +.fa-github-alt:before { + content: "\f113"; } + +.fa-phoenix-squadron:before { + content: "\f511"; } + +.fa-pagelines:before { + content: "\f18c"; } + +.fa-algolia:before { + content: "\f36c"; } + +.fa-red-river:before { + content: "\f3e3"; } + +.fa-creative-commons-sa:before { + content: "\f4ef"; } + +.fa-safari:before { + content: "\f267"; } + +.fa-google:before { + content: "\f1a0"; } + +.fa-square-font-awesome-stroke:before { + content: "\f35c"; } + +.fa-font-awesome-alt:before { + content: "\f35c"; } + +.fa-atlassian:before { + content: "\f77b"; } + +.fa-linkedin-in:before { + content: "\f0e1"; } + +.fa-digital-ocean:before { + content: "\f391"; } + +.fa-nimblr:before { + content: "\f5a8"; } + +.fa-chromecast:before { + content: "\f838"; } + +.fa-evernote:before { + content: "\f839"; } + +.fa-hacker-news:before { + content: "\f1d4"; } + +.fa-creative-commons-sampling:before { + content: "\f4f0"; } + +.fa-adversal:before { + content: "\f36a"; } + +.fa-creative-commons:before { + content: "\f25e"; } + +.fa-watchman-monitoring:before { + content: "\e087"; } + +.fa-fonticons:before { + content: "\f280"; } + +.fa-weixin:before { + content: "\f1d7"; } + +.fa-shirtsinbulk:before { + content: "\f214"; } + +.fa-codepen:before { + content: "\f1cb"; } + +.fa-git-alt:before { + content: "\f841"; } + +.fa-lyft:before { + content: "\f3c3"; } + +.fa-rev:before { + content: "\f5b2"; } + +.fa-windows:before { + content: "\f17a"; } + +.fa-wizards-of-the-coast:before { + content: "\f730"; } + +.fa-square-viadeo:before { + content: "\f2aa"; } + +.fa-viadeo-square:before { + content: "\f2aa"; } + +.fa-meetup:before { + content: "\f2e0"; } + +.fa-centos:before { + content: "\f789"; } + +.fa-adn:before { + content: "\f170"; } + +.fa-cloudsmith:before { + content: "\f384"; } + +.fa-opensuse:before { + content: "\e62b"; } + +.fa-pied-piper-alt:before { + content: "\f1a8"; } + +.fa-square-dribbble:before { + content: "\f397"; } + +.fa-dribbble-square:before { + content: "\f397"; } + +.fa-codiepie:before { + content: "\f284"; } + +.fa-node:before { + content: "\f419"; } + +.fa-mix:before { + content: "\f3cb"; } + +.fa-steam:before { + content: "\f1b6"; } + +.fa-cc-apple-pay:before { + content: "\f416"; } + +.fa-scribd:before { + content: "\f28a"; } + +.fa-debian:before { + content: "\e60b"; } + +.fa-openid:before { + content: "\f19b"; } + +.fa-instalod:before { + content: "\e081"; } + +.fa-expeditedssl:before { + content: "\f23e"; } + +.fa-sellcast:before { + content: "\f2da"; } + +.fa-square-twitter:before { + content: "\f081"; } + +.fa-twitter-square:before { + content: "\f081"; } + +.fa-r-project:before { + content: "\f4f7"; } + +.fa-delicious:before { + content: "\f1a5"; } + +.fa-freebsd:before { + content: "\f3a4"; } + +.fa-vuejs:before { + content: "\f41f"; } + +.fa-accusoft:before { + content: "\f369"; } + +.fa-ioxhost:before { + content: "\f208"; } + +.fa-fonticons-fi:before { + content: "\f3a2"; } + +.fa-app-store:before { + content: "\f36f"; } + +.fa-cc-mastercard:before { + content: "\f1f1"; } + +.fa-itunes-note:before { + content: "\f3b5"; } + +.fa-golang:before { + content: "\e40f"; } + +.fa-kickstarter:before { + content: "\f3bb"; } + +.fa-grav:before { + content: "\f2d6"; } + +.fa-weibo:before { + content: "\f18a"; } + +.fa-uncharted:before { + content: "\e084"; } + +.fa-firstdraft:before { + content: "\f3a1"; } + +.fa-square-youtube:before { + content: "\f431"; } + +.fa-youtube-square:before { + content: "\f431"; } + +.fa-wikipedia-w:before { + content: "\f266"; } + +.fa-wpressr:before { + content: "\f3e4"; } + +.fa-rendact:before { + content: "\f3e4"; } + +.fa-angellist:before { + content: "\f209"; } + +.fa-galactic-republic:before { + content: "\f50c"; } + +.fa-nfc-directional:before { + content: "\e530"; } + +.fa-skype:before { + content: "\f17e"; } + +.fa-joget:before { + content: "\f3b7"; } + +.fa-fedora:before { + content: "\f798"; } + +.fa-stripe-s:before { + content: "\f42a"; } + +.fa-meta:before { + content: "\e49b"; } + +.fa-laravel:before { + content: "\f3bd"; } + +.fa-hotjar:before { + content: "\f3b1"; } + +.fa-bluetooth-b:before { + content: "\f294"; } + +.fa-square-letterboxd:before { + content: "\e62e"; } + +.fa-sticker-mule:before { + content: "\f3f7"; } + +.fa-creative-commons-zero:before { + content: "\f4f3"; } + +.fa-hips:before { + content: "\f452"; } + +.fa-behance:before { + content: "\f1b4"; } + +.fa-reddit:before { + content: "\f1a1"; } + +.fa-discord:before { + content: "\f392"; } + +.fa-chrome:before { + content: "\f268"; } + +.fa-app-store-ios:before { + content: "\f370"; } + +.fa-cc-discover:before { + content: "\f1f2"; } + +.fa-wpbeginner:before { + content: "\f297"; } + +.fa-confluence:before { + content: "\f78d"; } + +.fa-shoelace:before { + content: "\e60c"; } + +.fa-mdb:before { + content: "\f8ca"; } + +.fa-dochub:before { + content: "\f394"; } + +.fa-accessible-icon:before { + content: "\f368"; } + +.fa-ebay:before { + content: "\f4f4"; } + +.fa-amazon:before { + content: "\f270"; } + +.fa-unsplash:before { + content: "\e07c"; } + +.fa-yarn:before { + content: "\f7e3"; } + +.fa-square-steam:before { + content: "\f1b7"; } + +.fa-steam-square:before { + content: "\f1b7"; } + +.fa-500px:before { + content: "\f26e"; } + +.fa-square-vimeo:before { + content: "\f194"; } + +.fa-vimeo-square:before { + content: "\f194"; } + +.fa-asymmetrik:before { + content: "\f372"; } + +.fa-font-awesome:before { + content: "\f2b4"; } + +.fa-font-awesome-flag:before { + content: "\f2b4"; } + +.fa-font-awesome-logo-full:before { + content: "\f2b4"; } + +.fa-gratipay:before { + content: "\f184"; } + +.fa-apple:before { + content: "\f179"; } + +.fa-hive:before { + content: "\e07f"; } + +.fa-gitkraken:before { + content: "\f3a6"; } + +.fa-keybase:before { + content: "\f4f5"; } + +.fa-apple-pay:before { + content: "\f415"; } + +.fa-padlet:before { + content: "\e4a0"; } + +.fa-amazon-pay:before { + content: "\f42c"; } + +.fa-square-github:before { + content: "\f092"; } + +.fa-github-square:before { + content: "\f092"; } + +.fa-stumbleupon:before { + content: "\f1a4"; } + +.fa-fedex:before { + content: "\f797"; } + +.fa-phoenix-framework:before { + content: "\f3dc"; } + +.fa-shopify:before { + content: "\e057"; } + +.fa-neos:before { + content: "\f612"; } + +.fa-square-threads:before { + content: "\e619"; } + +.fa-hackerrank:before { + content: "\f5f7"; } + +.fa-researchgate:before { + content: "\f4f8"; } + +.fa-swift:before { + content: "\f8e1"; } + +.fa-angular:before { + content: "\f420"; } + +.fa-speakap:before { + content: "\f3f3"; } + +.fa-angrycreative:before { + content: "\f36e"; } + +.fa-y-combinator:before { + content: "\f23b"; } + +.fa-empire:before { + content: "\f1d1"; } + +.fa-envira:before { + content: "\f299"; } + +.fa-google-scholar:before { + content: "\e63b"; } + +.fa-square-gitlab:before { + content: "\e5ae"; } + +.fa-gitlab-square:before { + content: "\e5ae"; } + +.fa-studiovinari:before { + content: "\f3f8"; } + +.fa-pied-piper:before { + content: "\f2ae"; } + +.fa-wordpress:before { + content: "\f19a"; } + +.fa-product-hunt:before { + content: "\f288"; } + +.fa-firefox:before { + content: "\f269"; } + +.fa-linode:before { + content: "\f2b8"; } + +.fa-goodreads:before { + content: "\f3a8"; } + +.fa-square-odnoklassniki:before { + content: "\f264"; } + +.fa-odnoklassniki-square:before { + content: "\f264"; } + +.fa-jsfiddle:before { + content: "\f1cc"; } + +.fa-sith:before { + content: "\f512"; } + +.fa-themeisle:before { + content: "\f2b2"; } + +.fa-page4:before { + content: "\f3d7"; } + +.fa-hashnode:before { + content: "\e499"; } + +.fa-react:before { + content: "\f41b"; } + +.fa-cc-paypal:before { + content: "\f1f4"; } + +.fa-squarespace:before { + content: "\f5be"; } + +.fa-cc-stripe:before { + content: "\f1f5"; } + +.fa-creative-commons-share:before { + content: "\f4f2"; } + +.fa-bitcoin:before { + content: "\f379"; } + +.fa-keycdn:before { + content: "\f3ba"; } + +.fa-opera:before { + content: "\f26a"; } + +.fa-itch-io:before { + content: "\f83a"; } + +.fa-umbraco:before { + content: "\f8e8"; } + +.fa-galactic-senate:before { + content: "\f50d"; } + +.fa-ubuntu:before { + content: "\f7df"; } + +.fa-draft2digital:before { + content: "\f396"; } + +.fa-stripe:before { + content: "\f429"; } + +.fa-houzz:before { + content: "\f27c"; } + +.fa-gg:before { + content: "\f260"; } + +.fa-dhl:before { + content: "\f790"; } + +.fa-square-pinterest:before { + content: "\f0d3"; } + +.fa-pinterest-square:before { + content: "\f0d3"; } + +.fa-xing:before { + content: "\f168"; } + +.fa-blackberry:before { + content: "\f37b"; } + +.fa-creative-commons-pd:before { + content: "\f4ec"; } + +.fa-playstation:before { + content: "\f3df"; } + +.fa-quinscape:before { + content: "\f459"; } + +.fa-less:before { + content: "\f41d"; } + +.fa-blogger-b:before { + content: "\f37d"; } + +.fa-opencart:before { + content: "\f23d"; } + +.fa-vine:before { + content: "\f1ca"; } + +.fa-signal-messenger:before { + content: "\e663"; } + +.fa-paypal:before { + content: "\f1ed"; } + +.fa-gitlab:before { + content: "\f296"; } + +.fa-typo3:before { + content: "\f42b"; } + +.fa-reddit-alien:before { + content: "\f281"; } + +.fa-yahoo:before { + content: "\f19e"; } + +.fa-dailymotion:before { + content: "\e052"; } + +.fa-affiliatetheme:before { + content: "\f36b"; } + +.fa-pied-piper-pp:before { + content: "\f1a7"; } + +.fa-bootstrap:before { + content: "\f836"; } + +.fa-odnoklassniki:before { + content: "\f263"; } + +.fa-nfc-symbol:before { + content: "\e531"; } + +.fa-mintbit:before { + content: "\e62f"; } + +.fa-ethereum:before { + content: "\f42e"; } + +.fa-speaker-deck:before { + content: "\f83c"; } + +.fa-creative-commons-nc-eu:before { + content: "\f4e9"; } + +.fa-patreon:before { + content: "\f3d9"; } + +.fa-avianex:before { + content: "\f374"; } + +.fa-ello:before { + content: "\f5f1"; } + +.fa-gofore:before { + content: "\f3a7"; } + +.fa-bimobject:before { + content: "\f378"; } + +.fa-brave-reverse:before { + content: "\e63d"; } + +.fa-facebook-f:before { + content: "\f39e"; } + +.fa-square-google-plus:before { + content: "\f0d4"; } + +.fa-google-plus-square:before { + content: "\f0d4"; } + +.fa-mandalorian:before { + content: "\f50f"; } + +.fa-first-order-alt:before { + content: "\f50a"; } + +.fa-osi:before { + content: "\f41a"; } + +.fa-google-wallet:before { + content: "\f1ee"; } + +.fa-d-and-d-beyond:before { + content: "\f6ca"; } + +.fa-periscope:before { + content: "\f3da"; } + +.fa-fulcrum:before { + content: "\f50b"; } + +.fa-cloudscale:before { + content: "\f383"; } + +.fa-forumbee:before { + content: "\f211"; } + +.fa-mizuni:before { + content: "\f3cc"; } + +.fa-schlix:before { + content: "\f3ea"; } + +.fa-square-xing:before { + content: "\f169"; } + +.fa-xing-square:before { + content: "\f169"; } + +.fa-bandcamp:before { + content: "\f2d5"; } + +.fa-wpforms:before { + content: "\f298"; } + +.fa-cloudversify:before { + content: "\f385"; } + +.fa-usps:before { + content: "\f7e1"; } + +.fa-megaport:before { + content: "\f5a3"; } + +.fa-magento:before { + content: "\f3c4"; } + +.fa-spotify:before { + content: "\f1bc"; } + +.fa-optin-monster:before { + content: "\f23c"; } + +.fa-fly:before { + content: "\f417"; } + +.fa-aviato:before { + content: "\f421"; } + +.fa-itunes:before { + content: "\f3b4"; } + +.fa-cuttlefish:before { + content: "\f38c"; } + +.fa-blogger:before { + content: "\f37c"; } + +.fa-flickr:before { + content: "\f16e"; } + +.fa-viber:before { + content: "\f409"; } + +.fa-soundcloud:before { + content: "\f1be"; } + +.fa-digg:before { + content: "\f1a6"; } + +.fa-tencent-weibo:before { + content: "\f1d5"; } + +.fa-letterboxd:before { + content: "\e62d"; } + +.fa-symfony:before { + content: "\f83d"; } + +.fa-maxcdn:before { + content: "\f136"; } + +.fa-etsy:before { + content: "\f2d7"; } + +.fa-facebook-messenger:before { + content: "\f39f"; } + +.fa-audible:before { + content: "\f373"; } + +.fa-think-peaks:before { + content: "\f731"; } + +.fa-bilibili:before { + content: "\e3d9"; } + +.fa-erlang:before { + content: "\f39d"; } + +.fa-x-twitter:before { + content: "\e61b"; } + +.fa-cotton-bureau:before { + content: "\f89e"; } + +.fa-dashcube:before { + content: "\f210"; } + +.fa-42-group:before { + content: "\e080"; } + +.fa-innosoft:before { + content: "\e080"; } + +.fa-stack-exchange:before { + content: "\f18d"; } + +.fa-elementor:before { + content: "\f430"; } + +.fa-square-pied-piper:before { + content: "\e01e"; } + +.fa-pied-piper-square:before { + content: "\e01e"; } + +.fa-creative-commons-nd:before { + content: "\f4eb"; } + +.fa-palfed:before { + content: "\f3d8"; } + +.fa-superpowers:before { + content: "\f2dd"; } + +.fa-resolving:before { + content: "\f3e7"; } + +.fa-xbox:before { + content: "\f412"; } + +.fa-searchengin:before { + content: "\f3eb"; } + +.fa-tiktok:before { + content: "\e07b"; } + +.fa-square-facebook:before { + content: "\f082"; } + +.fa-facebook-square:before { + content: "\f082"; } + +.fa-renren:before { + content: "\f18b"; } + +.fa-linux:before { + content: "\f17c"; } + +.fa-glide:before { + content: "\f2a5"; } + +.fa-linkedin:before { + content: "\f08c"; } + +.fa-hubspot:before { + content: "\f3b2"; } + +.fa-deploydog:before { + content: "\f38e"; } + +.fa-twitch:before { + content: "\f1e8"; } + +.fa-ravelry:before { + content: "\f2d9"; } + +.fa-mixer:before { + content: "\e056"; } + +.fa-square-lastfm:before { + content: "\f203"; } + +.fa-lastfm-square:before { + content: "\f203"; } + +.fa-vimeo:before { + content: "\f40a"; } + +.fa-mendeley:before { + content: "\f7b3"; } + +.fa-uniregistry:before { + content: "\f404"; } + +.fa-figma:before { + content: "\f799"; } + +.fa-creative-commons-remix:before { + content: "\f4ee"; } + +.fa-cc-amazon-pay:before { + content: "\f42d"; } + +.fa-dropbox:before { + content: "\f16b"; } + +.fa-instagram:before { + content: "\f16d"; } + +.fa-cmplid:before { + content: "\e360"; } + +.fa-upwork:before { + content: "\e641"; } + +.fa-facebook:before { + content: "\f09a"; } + +.fa-gripfire:before { + content: "\f3ac"; } + +.fa-jedi-order:before { + content: "\f50e"; } + +.fa-uikit:before { + content: "\f403"; } + +.fa-fort-awesome-alt:before { + content: "\f3a3"; } + +.fa-phabricator:before { + content: "\f3db"; } + +.fa-ussunnah:before { + content: "\f407"; } + +.fa-earlybirds:before { + content: "\f39a"; } + +.fa-trade-federation:before { + content: "\f513"; } + +.fa-autoprefixer:before { + content: "\f41c"; } + +.fa-whatsapp:before { + content: "\f232"; } + +.fa-slideshare:before { + content: "\f1e7"; } + +.fa-google-play:before { + content: "\f3ab"; } + +.fa-viadeo:before { + content: "\f2a9"; } + +.fa-line:before { + content: "\f3c0"; } + +.fa-google-drive:before { + content: "\f3aa"; } + +.fa-servicestack:before { + content: "\f3ec"; } + +.fa-simplybuilt:before { + content: "\f215"; } + +.fa-bitbucket:before { + content: "\f171"; } + +.fa-imdb:before { + content: "\f2d8"; } + +.fa-deezer:before { + content: "\e077"; } + +.fa-raspberry-pi:before { + content: "\f7bb"; } + +.fa-jira:before { + content: "\f7b1"; } + +.fa-docker:before { + content: "\f395"; } + +.fa-screenpal:before { + content: "\e570"; } + +.fa-bluetooth:before { + content: "\f293"; } + +.fa-gitter:before { + content: "\f426"; } + +.fa-d-and-d:before { + content: "\f38d"; } + +.fa-microblog:before { + content: "\e01a"; } + +.fa-cc-diners-club:before { + content: "\f24c"; } + +.fa-gg-circle:before { + content: "\f261"; } + +.fa-pied-piper-hat:before { + content: "\f4e5"; } + +.fa-kickstarter-k:before { + content: "\f3bc"; } + +.fa-yandex:before { + content: "\f413"; } + +.fa-readme:before { + content: "\f4d5"; } + +.fa-html5:before { + content: "\f13b"; } + +.fa-sellsy:before { + content: "\f213"; } + +.fa-sass:before { + content: "\f41e"; } + +.fa-wirsindhandwerk:before { + content: "\e2d0"; } + +.fa-wsh:before { + content: "\e2d0"; } + +.fa-buromobelexperte:before { + content: "\f37f"; } + +.fa-salesforce:before { + content: "\f83b"; } + +.fa-octopus-deploy:before { + content: "\e082"; } + +.fa-medapps:before { + content: "\f3c6"; } + +.fa-ns8:before { + content: "\f3d5"; } + +.fa-pinterest-p:before { + content: "\f231"; } + +.fa-apper:before { + content: "\f371"; } + +.fa-fort-awesome:before { + content: "\f286"; } + +.fa-waze:before { + content: "\f83f"; } + +.fa-cc-jcb:before { + content: "\f24b"; } + +.fa-snapchat:before { + content: "\f2ab"; } + +.fa-snapchat-ghost:before { + content: "\f2ab"; } + +.fa-fantasy-flight-games:before { + content: "\f6dc"; } + +.fa-rust:before { + content: "\e07a"; } + +.fa-wix:before { + content: "\f5cf"; } + +.fa-square-behance:before { + content: "\f1b5"; } + +.fa-behance-square:before { + content: "\f1b5"; } + +.fa-supple:before { + content: "\f3f9"; } + +.fa-webflow:before { + content: "\e65c"; } + +.fa-rebel:before { + content: "\f1d0"; } + +.fa-css3:before { + content: "\f13c"; } + +.fa-staylinked:before { + content: "\f3f5"; } + +.fa-kaggle:before { + content: "\f5fa"; } + +.fa-space-awesome:before { + content: "\e5ac"; } + +.fa-deviantart:before { + content: "\f1bd"; } + +.fa-cpanel:before { + content: "\f388"; } + +.fa-goodreads-g:before { + content: "\f3a9"; } + +.fa-square-git:before { + content: "\f1d2"; } + +.fa-git-square:before { + content: "\f1d2"; } + +.fa-square-tumblr:before { + content: "\f174"; } + +.fa-tumblr-square:before { + content: "\f174"; } + +.fa-trello:before { + content: "\f181"; } + +.fa-creative-commons-nc-jp:before { + content: "\f4ea"; } + +.fa-get-pocket:before { + content: "\f265"; } + +.fa-perbyte:before { + content: "\e083"; } + +.fa-grunt:before { + content: "\f3ad"; } + +.fa-weebly:before { + content: "\f5cc"; } + +.fa-connectdevelop:before { + content: "\f20e"; } + +.fa-leanpub:before { + content: "\f212"; } + +.fa-black-tie:before { + content: "\f27e"; } + +.fa-themeco:before { + content: "\f5c6"; } + +.fa-python:before { + content: "\f3e2"; } + +.fa-android:before { + content: "\f17b"; } + +.fa-bots:before { + content: "\e340"; } + +.fa-free-code-camp:before { + content: "\f2c5"; } + +.fa-hornbill:before { + content: "\f592"; } + +.fa-js:before { + content: "\f3b8"; } + +.fa-ideal:before { + content: "\e013"; } + +.fa-git:before { + content: "\f1d3"; } + +.fa-dev:before { + content: "\f6cc"; } + +.fa-sketch:before { + content: "\f7c6"; } + +.fa-yandex-international:before { + content: "\f414"; } + +.fa-cc-amex:before { + content: "\f1f3"; } + +.fa-uber:before { + content: "\f402"; } + +.fa-github:before { + content: "\f09b"; } + +.fa-php:before { + content: "\f457"; } + +.fa-alipay:before { + content: "\f642"; } + +.fa-youtube:before { + content: "\f167"; } + +.fa-skyatlas:before { + content: "\f216"; } + +.fa-firefox-browser:before { + content: "\e007"; } + +.fa-replyd:before { + content: "\f3e6"; } + +.fa-suse:before { + content: "\f7d6"; } + +.fa-jenkins:before { + content: "\f3b6"; } + +.fa-twitter:before { + content: "\f099"; } + +.fa-rockrms:before { + content: "\f3e9"; } + +.fa-pinterest:before { + content: "\f0d2"; } + +.fa-buffer:before { + content: "\f837"; } + +.fa-npm:before { + content: "\f3d4"; } + +.fa-yammer:before { + content: "\f840"; } + +.fa-btc:before { + content: "\f15a"; } + +.fa-dribbble:before { + content: "\f17d"; } + +.fa-stumbleupon-circle:before { + content: "\f1a3"; } + +.fa-internet-explorer:before { + content: "\f26b"; } + +.fa-stubber:before { + content: "\e5c7"; } + +.fa-telegram:before { + content: "\f2c6"; } + +.fa-telegram-plane:before { + content: "\f2c6"; } + +.fa-old-republic:before { + content: "\f510"; } + +.fa-odysee:before { + content: "\e5c6"; } + +.fa-square-whatsapp:before { + content: "\f40c"; } + +.fa-whatsapp-square:before { + content: "\f40c"; } + +.fa-node-js:before { + content: "\f3d3"; } + +.fa-edge-legacy:before { + content: "\e078"; } + +.fa-slack:before { + content: "\f198"; } + +.fa-slack-hash:before { + content: "\f198"; } + +.fa-medrt:before { + content: "\f3c8"; } + +.fa-usb:before { + content: "\f287"; } + +.fa-tumblr:before { + content: "\f173"; } + +.fa-vaadin:before { + content: "\f408"; } + +.fa-quora:before { + content: "\f2c4"; } + +.fa-square-x-twitter:before { + content: "\e61a"; } + +.fa-reacteurope:before { + content: "\f75d"; } + +.fa-medium:before { + content: "\f23a"; } + +.fa-medium-m:before { + content: "\f23a"; } + +.fa-amilia:before { + content: "\f36d"; } + +.fa-mixcloud:before { + content: "\f289"; } + +.fa-flipboard:before { + content: "\f44d"; } + +.fa-viacoin:before { + content: "\f237"; } + +.fa-critical-role:before { + content: "\f6c9"; } + +.fa-sitrox:before { + content: "\e44a"; } + +.fa-discourse:before { + content: "\f393"; } + +.fa-joomla:before { + content: "\f1aa"; } + +.fa-mastodon:before { + content: "\f4f6"; } + +.fa-airbnb:before { + content: "\f834"; } + +.fa-wolf-pack-battalion:before { + content: "\f514"; } + +.fa-buy-n-large:before { + content: "\f8a6"; } + +.fa-gulp:before { + content: "\f3ae"; } + +.fa-creative-commons-sampling-plus:before { + content: "\f4f1"; } + +.fa-strava:before { + content: "\f428"; } + +.fa-ember:before { + content: "\f423"; } + +.fa-canadian-maple-leaf:before { + content: "\f785"; } + +.fa-teamspeak:before { + content: "\f4f9"; } + +.fa-pushed:before { + content: "\f3e1"; } + +.fa-wordpress-simple:before { + content: "\f411"; } + +.fa-nutritionix:before { + content: "\f3d6"; } + +.fa-wodu:before { + content: "\e088"; } + +.fa-google-pay:before { + content: "\e079"; } + +.fa-intercom:before { + content: "\f7af"; } + +.fa-zhihu:before { + content: "\f63f"; } + +.fa-korvue:before { + content: "\f42f"; } + +.fa-pix:before { + content: "\e43a"; } + +.fa-steam-symbol:before { + content: "\f3f6"; } +:root, :host { + --fa-style-family-classic: 'Font Awesome 6 Free'; + --fa-font-regular: normal 400 1em/1 'Font Awesome 6 Free'; } + +@font-face { + font-family: 'Font Awesome 6 Free'; + font-style: normal; + font-weight: 400; + font-display: block; + src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); } + +.far, +.fa-regular { + font-weight: 400; } +:root, :host { + --fa-style-family-classic: 'Font Awesome 6 Free'; + --fa-font-solid: normal 900 1em/1 'Font Awesome 6 Free'; } + +@font-face { + font-family: 'Font Awesome 6 Free'; + font-style: normal; + font-weight: 900; + font-display: block; + src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); } + +.fas, +.fa-solid { + font-weight: 900; } +@font-face { + font-family: 'Font Awesome 5 Brands'; + font-display: block; + font-weight: 400; + src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); } + +@font-face { + font-family: 'Font Awesome 5 Free'; + font-display: block; + font-weight: 900; + src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); } + +@font-face { + font-family: 'Font Awesome 5 Free'; + font-display: block; + font-weight: 400; + src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); } +@font-face { + font-family: 'FontAwesome'; + font-display: block; + src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); } + +@font-face { + font-family: 'FontAwesome'; + font-display: block; + src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); } + +@font-face { + font-family: 'FontAwesome'; + font-display: block; + src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); + unicode-range: U+F003,U+F006,U+F014,U+F016-F017,U+F01A-F01B,U+F01D,U+F022,U+F03E,U+F044,U+F046,U+F05C-F05D,U+F06E,U+F070,U+F087-F088,U+F08A,U+F094,U+F096-F097,U+F09D,U+F0A0,U+F0A2,U+F0A4-F0A7,U+F0C5,U+F0C7,U+F0E5-F0E6,U+F0EB,U+F0F6-F0F8,U+F10C,U+F114-F115,U+F118-F11A,U+F11C-F11D,U+F133,U+F147,U+F14E,U+F150-F152,U+F185-F186,U+F18E,U+F190-F192,U+F196,U+F1C1-F1C9,U+F1D9,U+F1DB,U+F1E3,U+F1EA,U+F1F7,U+F1F9,U+F20A,U+F247-F248,U+F24A,U+F24D,U+F255-F25B,U+F25D,U+F271-F274,U+F278,U+F27B,U+F28C,U+F28E,U+F29C,U+F2B5,U+F2B7,U+F2BA,U+F2BC,U+F2BE,U+F2C0-F2C1,U+F2C3,U+F2D0,U+F2D2,U+F2D4,U+F2DC; } + +@font-face { + font-family: 'FontAwesome'; + font-display: block; + src: url("../webfonts/fa-v4compatibility.woff2") format("woff2"), url("../webfonts/fa-v4compatibility.ttf") format("truetype"); + unicode-range: U+F041,U+F047,U+F065-F066,U+F07D-F07E,U+F080,U+F08B,U+F08E,U+F090,U+F09A,U+F0AC,U+F0AE,U+F0B2,U+F0D0,U+F0D6,U+F0E4,U+F0EC,U+F10A-F10B,U+F123,U+F13E,U+F148-F149,U+F14C,U+F156,U+F15E,U+F160-F161,U+F163,U+F175-F178,U+F195,U+F1F8,U+F219,U+F27A; } diff --git a/assets/css/webfonts/fa-brands-400.ttf b/assets/css/webfonts/fa-brands-400.ttf new file mode 100644 index 0000000..5efb1d4 Binary files /dev/null and b/assets/css/webfonts/fa-brands-400.ttf differ diff --git a/assets/css/webfonts/fa-brands-400.woff2 b/assets/css/webfonts/fa-brands-400.woff2 new file mode 100644 index 0000000..36fbda7 Binary files /dev/null and b/assets/css/webfonts/fa-brands-400.woff2 differ diff --git a/assets/css/webfonts/fa-regular-400.ttf b/assets/css/webfonts/fa-regular-400.ttf new file mode 100644 index 0000000..838b4e2 Binary files /dev/null and b/assets/css/webfonts/fa-regular-400.ttf differ diff --git a/assets/css/webfonts/fa-regular-400.woff2 b/assets/css/webfonts/fa-regular-400.woff2 new file mode 100644 index 0000000..b6cabba Binary files /dev/null and b/assets/css/webfonts/fa-regular-400.woff2 differ diff --git a/assets/css/webfonts/fa-solid-900.ttf b/assets/css/webfonts/fa-solid-900.ttf new file mode 100644 index 0000000..ec24749 Binary files /dev/null and b/assets/css/webfonts/fa-solid-900.ttf differ diff --git a/assets/css/webfonts/fa-solid-900.woff2 b/assets/css/webfonts/fa-solid-900.woff2 new file mode 100644 index 0000000..824d518 Binary files /dev/null and b/assets/css/webfonts/fa-solid-900.woff2 differ diff --git a/assets/css/webfonts/fa-v4compatibility.ttf b/assets/css/webfonts/fa-v4compatibility.ttf new file mode 100644 index 0000000..b175aa8 Binary files /dev/null and b/assets/css/webfonts/fa-v4compatibility.ttf differ diff --git a/assets/css/webfonts/fa-v4compatibility.woff2 b/assets/css/webfonts/fa-v4compatibility.woff2 new file mode 100644 index 0000000..e09b5a5 Binary files /dev/null and b/assets/css/webfonts/fa-v4compatibility.woff2 differ diff --git a/assets/js/library/sweetalert2.all.js b/assets/js/library/sweetalert2.all.js new file mode 100644 index 0000000..3a558da --- /dev/null +++ b/assets/js/library/sweetalert2.all.js @@ -0,0 +1,3415 @@ +/*! +* sweetalert2 v11.4.8 +* Released under the MIT License. +*/ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, global.Sweetalert2 = factory()); +}(this, function () { 'use strict'; + + const consolePrefix = 'SweetAlert2:'; + /** + * Filter the unique values into a new array + * @param arr + */ + + const uniqueArray = arr => { + const result = []; + + for (let i = 0; i < arr.length; i++) { + if (result.indexOf(arr[i]) === -1) { + result.push(arr[i]); + } + } + + return result; + }; + /** + * Capitalize the first letter of a string + * @param {string} str + * @returns {string} + */ + + const capitalizeFirstLetter = str => str.charAt(0).toUpperCase() + str.slice(1); + /** + * @param {NodeList | HTMLCollection | NamedNodeMap} nodeList + * @returns {array} + */ + + const toArray = nodeList => Array.prototype.slice.call(nodeList); + /** + * Standardize console warnings + * @param {string | array} message + */ + + const warn = message => { + console.warn("".concat(consolePrefix, " ").concat(typeof message === 'object' ? message.join(' ') : message)); + }; + /** + * Standardize console errors + * @param {string} message + */ + + const error = message => { + console.error("".concat(consolePrefix, " ").concat(message)); + }; + /** + * Private global state for `warnOnce` + * @type {Array} + * @private + */ + + const previousWarnOnceMessages = []; + /** + * Show a console warning, but only if it hasn't already been shown + * @param {string} message + */ + + const warnOnce = message => { + if (!previousWarnOnceMessages.includes(message)) { + previousWarnOnceMessages.push(message); + warn(message); + } + }; + /** + * Show a one-time console warning about deprecated params/methods + */ + + const warnAboutDeprecation = (deprecatedParam, useInstead) => { + warnOnce("\"".concat(deprecatedParam, "\" is deprecated and will be removed in the next major release. Please use \"").concat(useInstead, "\" instead.")); + }; + /** + * If `arg` is a function, call it (with no arguments or context) and return the result. + * Otherwise, just pass the value through + * @param arg + */ + + const callIfFunction = arg => typeof arg === 'function' ? arg() : arg; + const hasToPromiseFn = arg => arg && typeof arg.toPromise === 'function'; + const asPromise = arg => hasToPromiseFn(arg) ? arg.toPromise() : Promise.resolve(arg); + const isPromise = arg => arg && Promise.resolve(arg) === arg; + + const defaultParams = { + title: '', + titleText: '', + text: '', + html: '', + footer: '', + icon: undefined, + iconColor: undefined, + iconHtml: undefined, + template: undefined, + toast: false, + showClass: { + popup: 'swal2-show', + backdrop: 'swal2-backdrop-show', + icon: 'swal2-icon-show' + }, + hideClass: { + popup: 'swal2-hide', + backdrop: 'swal2-backdrop-hide', + icon: 'swal2-icon-hide' + }, + customClass: {}, + target: 'body', + color: undefined, + backdrop: true, + heightAuto: true, + allowOutsideClick: true, + allowEscapeKey: true, + allowEnterKey: true, + stopKeydownPropagation: true, + keydownListenerCapture: false, + showConfirmButton: true, + showDenyButton: false, + showCancelButton: false, + preConfirm: undefined, + preDeny: undefined, + confirmButtonText: 'OK', + confirmButtonAriaLabel: '', + confirmButtonColor: undefined, + denyButtonText: 'No', + denyButtonAriaLabel: '', + denyButtonColor: undefined, + cancelButtonText: 'Cancel', + cancelButtonAriaLabel: '', + cancelButtonColor: undefined, + buttonsStyling: true, + reverseButtons: false, + focusConfirm: true, + focusDeny: false, + focusCancel: false, + returnFocus: true, + showCloseButton: false, + closeButtonHtml: '×', + closeButtonAriaLabel: 'Close this dialog', + loaderHtml: '', + showLoaderOnConfirm: false, + showLoaderOnDeny: false, + imageUrl: undefined, + imageWidth: undefined, + imageHeight: undefined, + imageAlt: '', + timer: undefined, + timerProgressBar: false, + width: undefined, + padding: undefined, + background: undefined, + input: undefined, + inputPlaceholder: '', + inputLabel: '', + inputValue: '', + inputOptions: {}, + inputAutoTrim: true, + inputAttributes: {}, + inputValidator: undefined, + returnInputValueOnDeny: false, + validationMessage: undefined, + grow: false, + position: 'center', + progressSteps: [], + currentProgressStep: undefined, + progressStepsDistance: undefined, + willOpen: undefined, + didOpen: undefined, + didRender: undefined, + willClose: undefined, + didClose: undefined, + didDestroy: undefined, + scrollbarPadding: true + }; + const updatableParams = ['allowEscapeKey', 'allowOutsideClick', 'background', 'buttonsStyling', 'cancelButtonAriaLabel', 'cancelButtonColor', 'cancelButtonText', 'closeButtonAriaLabel', 'closeButtonHtml', 'color', 'confirmButtonAriaLabel', 'confirmButtonColor', 'confirmButtonText', 'currentProgressStep', 'customClass', 'denyButtonAriaLabel', 'denyButtonColor', 'denyButtonText', 'didClose', 'didDestroy', 'footer', 'hideClass', 'html', 'icon', 'iconColor', 'iconHtml', 'imageAlt', 'imageHeight', 'imageUrl', 'imageWidth', 'preConfirm', 'preDeny', 'progressSteps', 'returnFocus', 'reverseButtons', 'showCancelButton', 'showCloseButton', 'showConfirmButton', 'showDenyButton', 'text', 'title', 'titleText', 'willClose']; + const deprecatedParams = {}; + const toastIncompatibleParams = ['allowOutsideClick', 'allowEnterKey', 'backdrop', 'focusConfirm', 'focusDeny', 'focusCancel', 'returnFocus', 'heightAuto', 'keydownListenerCapture']; + /** + * Is valid parameter + * @param {string} paramName + */ + + const isValidParameter = paramName => { + return Object.prototype.hasOwnProperty.call(defaultParams, paramName); + }; + /** + * Is valid parameter for Swal.update() method + * @param {string} paramName + */ + + const isUpdatableParameter = paramName => { + return updatableParams.indexOf(paramName) !== -1; + }; + /** + * Is deprecated parameter + * @param {string} paramName + */ + + const isDeprecatedParameter = paramName => { + return deprecatedParams[paramName]; + }; + + const checkIfParamIsValid = param => { + if (!isValidParameter(param)) { + warn("Unknown parameter \"".concat(param, "\"")); + } + }; + + const checkIfToastParamIsValid = param => { + if (toastIncompatibleParams.includes(param)) { + warn("The parameter \"".concat(param, "\" is incompatible with toasts")); + } + }; + + const checkIfParamIsDeprecated = param => { + if (isDeprecatedParameter(param)) { + warnAboutDeprecation(param, isDeprecatedParameter(param)); + } + }; + /** + * Show relevant warnings for given params + * + * @param params + */ + + + const showWarningsForParams = params => { + if (!params.backdrop && params.allowOutsideClick) { + warn('"allowOutsideClick" parameter requires `backdrop` parameter to be set to `true`'); + } + + for (const param in params) { + checkIfParamIsValid(param); + + if (params.toast) { + checkIfToastParamIsValid(param); + } + + checkIfParamIsDeprecated(param); + } + }; + + const swalPrefix = 'swal2-'; + const prefix = items => { + const result = {}; + + for (const i in items) { + result[items[i]] = swalPrefix + items[i]; + } + + return result; + }; + const swalClasses = prefix(['container', 'shown', 'height-auto', 'iosfix', 'popup', 'modal', 'no-backdrop', 'no-transition', 'toast', 'toast-shown', 'show', 'hide', 'close', 'title', 'html-container', 'actions', 'confirm', 'deny', 'cancel', 'default-outline', 'footer', 'icon', 'icon-content', 'image', 'input', 'file', 'range', 'select', 'radio', 'checkbox', 'label', 'textarea', 'inputerror', 'input-label', 'validation-message', 'progress-steps', 'active-progress-step', 'progress-step', 'progress-step-line', 'loader', 'loading', 'styled', 'top', 'top-start', 'top-end', 'top-left', 'top-right', 'center', 'center-start', 'center-end', 'center-left', 'center-right', 'bottom', 'bottom-start', 'bottom-end', 'bottom-left', 'bottom-right', 'grow-row', 'grow-column', 'grow-fullscreen', 'rtl', 'timer-progress-bar', 'timer-progress-bar-container', 'scrollbar-measure', 'icon-success', 'icon-warning', 'icon-info', 'icon-question', 'icon-error']); + const iconTypes = prefix(['success', 'warning', 'info', 'question', 'error']); + + /** + * Gets the popup container which contains the backdrop and the popup itself. + * + * @returns {HTMLElement | null} + */ + + const getContainer = () => document.body.querySelector(".".concat(swalClasses.container)); + const elementBySelector = selectorString => { + const container = getContainer(); + return container ? container.querySelector(selectorString) : null; + }; + + const elementByClass = className => { + return elementBySelector(".".concat(className)); + }; + + const getPopup = () => elementByClass(swalClasses.popup); + const getIcon = () => elementByClass(swalClasses.icon); + const getTitle = () => elementByClass(swalClasses.title); + const getHtmlContainer = () => elementByClass(swalClasses['html-container']); + const getImage = () => elementByClass(swalClasses.image); + const getProgressSteps = () => elementByClass(swalClasses['progress-steps']); + const getValidationMessage = () => elementByClass(swalClasses['validation-message']); + const getConfirmButton = () => elementBySelector(".".concat(swalClasses.actions, " .").concat(swalClasses.confirm)); + const getDenyButton = () => elementBySelector(".".concat(swalClasses.actions, " .").concat(swalClasses.deny)); + const getInputLabel = () => elementByClass(swalClasses['input-label']); + const getLoader = () => elementBySelector(".".concat(swalClasses.loader)); + const getCancelButton = () => elementBySelector(".".concat(swalClasses.actions, " .").concat(swalClasses.cancel)); + const getActions = () => elementByClass(swalClasses.actions); + const getFooter = () => elementByClass(swalClasses.footer); + const getTimerProgressBar = () => elementByClass(swalClasses['timer-progress-bar']); + const getCloseButton = () => elementByClass(swalClasses.close); // https://github.com/jkup/focusable/blob/master/index.js + + const focusable = "\n a[href],\n area[href],\n input:not([disabled]),\n select:not([disabled]),\n textarea:not([disabled]),\n button:not([disabled]),\n iframe,\n object,\n embed,\n [tabindex=\"0\"],\n [contenteditable],\n audio[controls],\n video[controls],\n summary\n"; + const getFocusableElements = () => { + const focusableElementsWithTabindex = toArray(getPopup().querySelectorAll('[tabindex]:not([tabindex="-1"]):not([tabindex="0"])')) // sort according to tabindex + .sort((a, b) => { + const tabindexA = parseInt(a.getAttribute('tabindex')); + const tabindexB = parseInt(b.getAttribute('tabindex')); + + if (tabindexA > tabindexB) { + return 1; + } else if (tabindexA < tabindexB) { + return -1; + } + + return 0; + }); + const otherFocusableElements = toArray(getPopup().querySelectorAll(focusable)).filter(el => el.getAttribute('tabindex') !== '-1'); + return uniqueArray(focusableElementsWithTabindex.concat(otherFocusableElements)).filter(el => isVisible(el)); + }; + const isModal = () => { + return hasClass(document.body, swalClasses.shown) && !hasClass(document.body, swalClasses['toast-shown']) && !hasClass(document.body, swalClasses['no-backdrop']); + }; + const isToast = () => { + return getPopup() && hasClass(getPopup(), swalClasses.toast); + }; + const isLoading = () => { + return getPopup().hasAttribute('data-loading'); + }; + + const states = { + previousBodyPadding: null + }; + /** + * Securely set innerHTML of an element + * https://github.com/sweetalert2/sweetalert2/issues/1926 + * + * @param {HTMLElement} elem + * @param {string} html + */ + + const setInnerHtml = (elem, html) => { + elem.textContent = ''; + + if (html) { + const parser = new DOMParser(); + const parsed = parser.parseFromString(html, "text/html"); + toArray(parsed.querySelector('head').childNodes).forEach(child => { + elem.appendChild(child); + }); + toArray(parsed.querySelector('body').childNodes).forEach(child => { + elem.appendChild(child); + }); + } + }; + /** + * @param {HTMLElement} elem + * @param {string} className + * @returns {boolean} + */ + + const hasClass = (elem, className) => { + if (!className) { + return false; + } + + const classList = className.split(/\s+/); + + for (let i = 0; i < classList.length; i++) { + if (!elem.classList.contains(classList[i])) { + return false; + } + } + + return true; + }; + + const removeCustomClasses = (elem, params) => { + toArray(elem.classList).forEach(className => { + if (!Object.values(swalClasses).includes(className) && !Object.values(iconTypes).includes(className) && !Object.values(params.showClass).includes(className)) { + elem.classList.remove(className); + } + }); + }; + + const applyCustomClass = (elem, params, className) => { + removeCustomClasses(elem, params); + + if (params.customClass && params.customClass[className]) { + if (typeof params.customClass[className] !== 'string' && !params.customClass[className].forEach) { + return warn("Invalid type of customClass.".concat(className, "! Expected string or iterable object, got \"").concat(typeof params.customClass[className], "\"")); + } + + addClass(elem, params.customClass[className]); + } + }; + /** + * @param {HTMLElement} popup + * @param {string} inputType + * @returns {HTMLInputElement | null} + */ + + const getInput = (popup, inputType) => { + if (!inputType) { + return null; + } + + switch (inputType) { + case 'select': + case 'textarea': + case 'file': + return popup.querySelector(".".concat(swalClasses.popup, " > .").concat(swalClasses[inputType])); + + case 'checkbox': + return popup.querySelector(".".concat(swalClasses.popup, " > .").concat(swalClasses.checkbox, " input")); + + case 'radio': + return popup.querySelector(".".concat(swalClasses.popup, " > .").concat(swalClasses.radio, " input:checked")) || popup.querySelector(".".concat(swalClasses.popup, " > .").concat(swalClasses.radio, " input:first-child")); + + case 'range': + return popup.querySelector(".".concat(swalClasses.popup, " > .").concat(swalClasses.range, " input")); + + default: + return popup.querySelector(".".concat(swalClasses.popup, " > .").concat(swalClasses.input)); + } + }; + /** + * @param {HTMLInputElement} input + */ + + const focusInput = input => { + input.focus(); // place cursor at end of text in text input + + if (input.type !== 'file') { + // http://stackoverflow.com/a/2345915 + const val = input.value; + input.value = ''; + input.value = val; + } + }; + /** + * @param {HTMLElement | HTMLElement[] | null} target + * @param {string | string[]} classList + * @param {boolean} condition + */ + + const toggleClass = (target, classList, condition) => { + if (!target || !classList) { + return; + } + + if (typeof classList === 'string') { + classList = classList.split(/\s+/).filter(Boolean); + } + + classList.forEach(className => { + if (Array.isArray(target)) { + target.forEach(elem => { + condition ? elem.classList.add(className) : elem.classList.remove(className); + }); + } else { + condition ? target.classList.add(className) : target.classList.remove(className); + } + }); + }; + /** + * @param {HTMLElement | HTMLElement[] | null} target + * @param {string | string[]} classList + */ + + const addClass = (target, classList) => { + toggleClass(target, classList, true); + }; + /** + * @param {HTMLElement | HTMLElement[] | null} target + * @param {string | string[]} classList + */ + + const removeClass = (target, classList) => { + toggleClass(target, classList, false); + }; + /** + * Get direct child of an element by class name + * + * @param {HTMLElement} elem + * @param {string} className + * @returns {HTMLElement | null} + */ + + const getDirectChildByClass = (elem, className) => { + const childNodes = toArray(elem.childNodes); + + for (let i = 0; i < childNodes.length; i++) { + if (hasClass(childNodes[i], className)) { + return childNodes[i]; + } + } + }; + /** + * @param {HTMLElement} elem + * @param {string} property + * @param {*} value + */ + + const applyNumericalStyle = (elem, property, value) => { + if (value === "".concat(parseInt(value))) { + value = parseInt(value); + } + + if (value || parseInt(value) === 0) { + elem.style[property] = typeof value === 'number' ? "".concat(value, "px") : value; + } else { + elem.style.removeProperty(property); + } + }; + /** + * @param {HTMLElement} elem + * @param {string} display + */ + + const show = function (elem) { + let display = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'flex'; + elem.style.display = display; + }; + /** + * @param {HTMLElement} elem + */ + + const hide = elem => { + elem.style.display = 'none'; + }; + const setStyle = (parent, selector, property, value) => { + const el = parent.querySelector(selector); + + if (el) { + el.style[property] = value; + } + }; + const toggle = (elem, condition, display) => { + condition ? show(elem, display) : hide(elem); + }; // borrowed from jquery $(elem).is(':visible') implementation + + const isVisible = elem => !!(elem && (elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length)); + const allButtonsAreHidden = () => !isVisible(getConfirmButton()) && !isVisible(getDenyButton()) && !isVisible(getCancelButton()); + const isScrollable = elem => !!(elem.scrollHeight > elem.clientHeight); // borrowed from https://stackoverflow.com/a/46352119 + + const hasCssAnimation = elem => { + const style = window.getComputedStyle(elem); + const animDuration = parseFloat(style.getPropertyValue('animation-duration') || '0'); + const transDuration = parseFloat(style.getPropertyValue('transition-duration') || '0'); + return animDuration > 0 || transDuration > 0; + }; + const animateTimerProgressBar = function (timer) { + let reset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + const timerProgressBar = getTimerProgressBar(); + + if (isVisible(timerProgressBar)) { + if (reset) { + timerProgressBar.style.transition = 'none'; + timerProgressBar.style.width = '100%'; + } + + setTimeout(() => { + timerProgressBar.style.transition = "width ".concat(timer / 1000, "s linear"); + timerProgressBar.style.width = '0%'; + }, 10); + } + }; + const stopTimerProgressBar = () => { + const timerProgressBar = getTimerProgressBar(); + const timerProgressBarWidth = parseInt(window.getComputedStyle(timerProgressBar).width); + timerProgressBar.style.removeProperty('transition'); + timerProgressBar.style.width = '100%'; + const timerProgressBarFullWidth = parseInt(window.getComputedStyle(timerProgressBar).width); + const timerProgressBarPercent = timerProgressBarWidth / timerProgressBarFullWidth * 100; + timerProgressBar.style.removeProperty('transition'); + timerProgressBar.style.width = "".concat(timerProgressBarPercent, "%"); + }; + + /** + * Detect Node env + * + * @returns {boolean} + */ + const isNodeEnv = () => typeof window === 'undefined' || typeof document === 'undefined'; + + const RESTORE_FOCUS_TIMEOUT = 100; + + const globalState = {}; + + const focusPreviousActiveElement = () => { + if (globalState.previousActiveElement && globalState.previousActiveElement.focus) { + globalState.previousActiveElement.focus(); + globalState.previousActiveElement = null; + } else if (document.body) { + document.body.focus(); + } + }; // Restore previous active (focused) element + + + const restoreActiveElement = returnFocus => { + return new Promise(resolve => { + if (!returnFocus) { + return resolve(); + } + + const x = window.scrollX; + const y = window.scrollY; + globalState.restoreFocusTimeout = setTimeout(() => { + focusPreviousActiveElement(); + resolve(); + }, RESTORE_FOCUS_TIMEOUT); // issues/900 + + window.scrollTo(x, y); + }); + }; + + const sweetHTML = "\n
\n \n
    \n
    \n \n

    \n
    \n \n \n
    \n \n \n
    \n \n
    \n \n \n
    \n
    \n
    \n \n \n \n
    \n
    \n
    \n
    \n
    \n
    \n").replace(/(^|\n)\s*/g, ''); + + const resetOldContainer = () => { + const oldContainer = getContainer(); + + if (!oldContainer) { + return false; + } + + oldContainer.remove(); + removeClass([document.documentElement, document.body], [swalClasses['no-backdrop'], swalClasses['toast-shown'], swalClasses['has-column']]); + return true; + }; + + const resetValidationMessage = () => { + globalState.currentInstance.resetValidationMessage(); + }; + + const addInputChangeListeners = () => { + const popup = getPopup(); + const input = getDirectChildByClass(popup, swalClasses.input); + const file = getDirectChildByClass(popup, swalClasses.file); + const range = popup.querySelector(".".concat(swalClasses.range, " input")); + const rangeOutput = popup.querySelector(".".concat(swalClasses.range, " output")); + const select = getDirectChildByClass(popup, swalClasses.select); + const checkbox = popup.querySelector(".".concat(swalClasses.checkbox, " input")); + const textarea = getDirectChildByClass(popup, swalClasses.textarea); + input.oninput = resetValidationMessage; + file.onchange = resetValidationMessage; + select.onchange = resetValidationMessage; + checkbox.onchange = resetValidationMessage; + textarea.oninput = resetValidationMessage; + + range.oninput = () => { + resetValidationMessage(); + rangeOutput.value = range.value; + }; + + range.onchange = () => { + resetValidationMessage(); + range.nextSibling.value = range.value; + }; + }; + + const getTarget = target => typeof target === 'string' ? document.querySelector(target) : target; + + const setupAccessibility = params => { + const popup = getPopup(); + popup.setAttribute('role', params.toast ? 'alert' : 'dialog'); + popup.setAttribute('aria-live', params.toast ? 'polite' : 'assertive'); + + if (!params.toast) { + popup.setAttribute('aria-modal', 'true'); + } + }; + + const setupRTL = targetElement => { + if (window.getComputedStyle(targetElement).direction === 'rtl') { + addClass(getContainer(), swalClasses.rtl); + } + }; + /* + * Add modal + backdrop to DOM + */ + + + const init = params => { + // Clean up the old popup container if it exists + const oldContainerExisted = resetOldContainer(); + /* istanbul ignore if */ + + if (isNodeEnv()) { + error('SweetAlert2 requires document to initialize'); + return; + } + + const container = document.createElement('div'); + container.className = swalClasses.container; + + if (oldContainerExisted) { + addClass(container, swalClasses['no-transition']); + } + + setInnerHtml(container, sweetHTML); + const targetElement = getTarget(params.target); + targetElement.appendChild(container); + setupAccessibility(params); + setupRTL(targetElement); + addInputChangeListeners(); + }; + + /** + * @param {HTMLElement | object | string} param + * @param {HTMLElement} target + */ + + const parseHtmlToContainer = (param, target) => { + // DOM element + if (param instanceof HTMLElement) { + target.appendChild(param); + } // Object + else if (typeof param === 'object') { + handleObject(param, target); + } // Plain string + else if (param) { + setInnerHtml(target, param); + } + }; + /** + * @param {object} param + * @param {HTMLElement} target + */ + + const handleObject = (param, target) => { + // JQuery element(s) + if (param.jquery) { + handleJqueryElem(target, param); + } // For other objects use their string representation + else { + setInnerHtml(target, param.toString()); + } + }; + + const handleJqueryElem = (target, elem) => { + target.textContent = ''; + + if (0 in elem) { + for (let i = 0; (i in elem); i++) { + target.appendChild(elem[i].cloneNode(true)); + } + } else { + target.appendChild(elem.cloneNode(true)); + } + }; + + const animationEndEvent = (() => { + // Prevent run in Node env + + /* istanbul ignore if */ + if (isNodeEnv()) { + return false; + } + + const testEl = document.createElement('div'); + const transEndEventNames = { + WebkitAnimation: 'webkitAnimationEnd', + // Chrome, Safari and Opera + animation: 'animationend' // Standard syntax + + }; + + for (const i in transEndEventNames) { + if (Object.prototype.hasOwnProperty.call(transEndEventNames, i) && typeof testEl.style[i] !== 'undefined') { + return transEndEventNames[i]; + } + } + + return false; + })(); + + // https://github.com/twbs/bootstrap/blob/master/js/src/modal.js + + const measureScrollbar = () => { + const scrollDiv = document.createElement('div'); + scrollDiv.className = swalClasses['scrollbar-measure']; + document.body.appendChild(scrollDiv); + const scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth; + document.body.removeChild(scrollDiv); + return scrollbarWidth; + }; + + const renderActions = (instance, params) => { + const actions = getActions(); + const loader = getLoader(); // Actions (buttons) wrapper + + if (!params.showConfirmButton && !params.showDenyButton && !params.showCancelButton) { + hide(actions); + } else { + show(actions); + } // Custom class + + + applyCustomClass(actions, params, 'actions'); // Render all the buttons + + renderButtons(actions, loader, params); // Loader + + setInnerHtml(loader, params.loaderHtml); + applyCustomClass(loader, params, 'loader'); + }; + + function renderButtons(actions, loader, params) { + const confirmButton = getConfirmButton(); + const denyButton = getDenyButton(); + const cancelButton = getCancelButton(); // Render buttons + + renderButton(confirmButton, 'confirm', params); + renderButton(denyButton, 'deny', params); + renderButton(cancelButton, 'cancel', params); + handleButtonsStyling(confirmButton, denyButton, cancelButton, params); + + if (params.reverseButtons) { + if (params.toast) { + actions.insertBefore(cancelButton, confirmButton); + actions.insertBefore(denyButton, confirmButton); + } else { + actions.insertBefore(cancelButton, loader); + actions.insertBefore(denyButton, loader); + actions.insertBefore(confirmButton, loader); + } + } + } + + function handleButtonsStyling(confirmButton, denyButton, cancelButton, params) { + if (!params.buttonsStyling) { + return removeClass([confirmButton, denyButton, cancelButton], swalClasses.styled); + } + + addClass([confirmButton, denyButton, cancelButton], swalClasses.styled); // Buttons background colors + + if (params.confirmButtonColor) { + confirmButton.style.backgroundColor = params.confirmButtonColor; + addClass(confirmButton, swalClasses['default-outline']); + } + + if (params.denyButtonColor) { + denyButton.style.backgroundColor = params.denyButtonColor; + addClass(denyButton, swalClasses['default-outline']); + } + + if (params.cancelButtonColor) { + cancelButton.style.backgroundColor = params.cancelButtonColor; + addClass(cancelButton, swalClasses['default-outline']); + } + } + + function renderButton(button, buttonType, params) { + toggle(button, params["show".concat(capitalizeFirstLetter(buttonType), "Button")], 'inline-block'); + setInnerHtml(button, params["".concat(buttonType, "ButtonText")]); // Set caption text + + button.setAttribute('aria-label', params["".concat(buttonType, "ButtonAriaLabel")]); // ARIA label + // Add buttons custom classes + + button.className = swalClasses[buttonType]; + applyCustomClass(button, params, "".concat(buttonType, "Button")); + addClass(button, params["".concat(buttonType, "ButtonClass")]); + } + + function handleBackdropParam(container, backdrop) { + if (typeof backdrop === 'string') { + container.style.background = backdrop; + } else if (!backdrop) { + addClass([document.documentElement, document.body], swalClasses['no-backdrop']); + } + } + + function handlePositionParam(container, position) { + if (position in swalClasses) { + addClass(container, swalClasses[position]); + } else { + warn('The "position" parameter is not valid, defaulting to "center"'); + addClass(container, swalClasses.center); + } + } + + function handleGrowParam(container, grow) { + if (grow && typeof grow === 'string') { + const growClass = "grow-".concat(grow); + + if (growClass in swalClasses) { + addClass(container, swalClasses[growClass]); + } + } + } + + const renderContainer = (instance, params) => { + const container = getContainer(); + + if (!container) { + return; + } + + handleBackdropParam(container, params.backdrop); + handlePositionParam(container, params.position); + handleGrowParam(container, params.grow); // Custom class + + applyCustomClass(container, params, 'container'); + }; + + /** + * This module contains `WeakMap`s for each effectively-"private property" that a `Swal` has. + * For example, to set the private property "foo" of `this` to "bar", you can `privateProps.foo.set(this, 'bar')` + * This is the approach that Babel will probably take to implement private methods/fields + * https://github.com/tc39/proposal-private-methods + * https://github.com/babel/babel/pull/7555 + * Once we have the changes from that PR in Babel, and our core class fits reasonable in *one module* + * then we can use that language feature. + */ + var privateProps = { + awaitingPromise: new WeakMap(), + promise: new WeakMap(), + innerParams: new WeakMap(), + domCache: new WeakMap() + }; + + const inputTypes = ['input', 'file', 'range', 'select', 'radio', 'checkbox', 'textarea']; + const renderInput = (instance, params) => { + const popup = getPopup(); + const innerParams = privateProps.innerParams.get(instance); + const rerender = !innerParams || params.input !== innerParams.input; + inputTypes.forEach(inputType => { + const inputClass = swalClasses[inputType]; + const inputContainer = getDirectChildByClass(popup, inputClass); // set attributes + + setAttributes(inputType, params.inputAttributes); // set class + + inputContainer.className = inputClass; + + if (rerender) { + hide(inputContainer); + } + }); + + if (params.input) { + if (rerender) { + showInput(params); + } // set custom class + + + setCustomClass(params); + } + }; + + const showInput = params => { + if (!renderInputType[params.input]) { + return error("Unexpected type of input! Expected \"text\", \"email\", \"password\", \"number\", \"tel\", \"select\", \"radio\", \"checkbox\", \"textarea\", \"file\" or \"url\", got \"".concat(params.input, "\"")); + } + + const inputContainer = getInputContainer(params.input); + const input = renderInputType[params.input](inputContainer, params); + show(input); // input autofocus + + setTimeout(() => { + focusInput(input); + }); + }; + + const removeAttributes = input => { + for (let i = 0; i < input.attributes.length; i++) { + const attrName = input.attributes[i].name; + + if (!['type', 'value', 'style'].includes(attrName)) { + input.removeAttribute(attrName); + } + } + }; + + const setAttributes = (inputType, inputAttributes) => { + const input = getInput(getPopup(), inputType); + + if (!input) { + return; + } + + removeAttributes(input); + + for (const attr in inputAttributes) { + input.setAttribute(attr, inputAttributes[attr]); + } + }; + + const setCustomClass = params => { + const inputContainer = getInputContainer(params.input); + + if (params.customClass) { + addClass(inputContainer, params.customClass.input); + } + }; + + const setInputPlaceholder = (input, params) => { + if (!input.placeholder || params.inputPlaceholder) { + input.placeholder = params.inputPlaceholder; + } + }; + + const setInputLabel = (input, prependTo, params) => { + if (params.inputLabel) { + input.id = swalClasses.input; + const label = document.createElement('label'); + const labelClass = swalClasses['input-label']; + label.setAttribute('for', input.id); + label.className = labelClass; + addClass(label, params.customClass.inputLabel); + label.innerText = params.inputLabel; + prependTo.insertAdjacentElement('beforebegin', label); + } + }; + + const getInputContainer = inputType => { + const inputClass = swalClasses[inputType] ? swalClasses[inputType] : swalClasses.input; + return getDirectChildByClass(getPopup(), inputClass); + }; + + const renderInputType = {}; + + renderInputType.text = renderInputType.email = renderInputType.password = renderInputType.number = renderInputType.tel = renderInputType.url = (input, params) => { + if (typeof params.inputValue === 'string' || typeof params.inputValue === 'number') { + input.value = params.inputValue; + } else if (!isPromise(params.inputValue)) { + warn("Unexpected type of inputValue! Expected \"string\", \"number\" or \"Promise\", got \"".concat(typeof params.inputValue, "\"")); + } + + setInputLabel(input, input, params); + setInputPlaceholder(input, params); + input.type = params.input; + return input; + }; + + renderInputType.file = (input, params) => { + setInputLabel(input, input, params); + setInputPlaceholder(input, params); + return input; + }; + + renderInputType.range = (range, params) => { + const rangeInput = range.querySelector('input'); + const rangeOutput = range.querySelector('output'); + rangeInput.value = params.inputValue; + rangeInput.type = params.input; + rangeOutput.value = params.inputValue; + setInputLabel(rangeInput, range, params); + return range; + }; + + renderInputType.select = (select, params) => { + select.textContent = ''; + + if (params.inputPlaceholder) { + const placeholder = document.createElement('option'); + setInnerHtml(placeholder, params.inputPlaceholder); + placeholder.value = ''; + placeholder.disabled = true; + placeholder.selected = true; + select.appendChild(placeholder); + } + + setInputLabel(select, select, params); + return select; + }; + + renderInputType.radio = radio => { + radio.textContent = ''; + return radio; + }; + + renderInputType.checkbox = (checkboxContainer, params) => { + /** @type {HTMLInputElement} */ + const checkbox = getInput(getPopup(), 'checkbox'); + checkbox.value = '1'; + checkbox.id = swalClasses.checkbox; + checkbox.checked = Boolean(params.inputValue); + const label = checkboxContainer.querySelector('span'); + setInnerHtml(label, params.inputPlaceholder); + return checkboxContainer; + }; + + renderInputType.textarea = (textarea, params) => { + textarea.value = params.inputValue; + setInputPlaceholder(textarea, params); + setInputLabel(textarea, textarea, params); + + const getMargin = el => parseInt(window.getComputedStyle(el).marginLeft) + parseInt(window.getComputedStyle(el).marginRight); // https://github.com/sweetalert2/sweetalert2/issues/2291 + + + setTimeout(() => { + // https://github.com/sweetalert2/sweetalert2/issues/1699 + if ('MutationObserver' in window) { + const initialPopupWidth = parseInt(window.getComputedStyle(getPopup()).width); + + const textareaResizeHandler = () => { + const textareaWidth = textarea.offsetWidth + getMargin(textarea); + + if (textareaWidth > initialPopupWidth) { + getPopup().style.width = "".concat(textareaWidth, "px"); + } else { + getPopup().style.width = null; + } + }; + + new MutationObserver(textareaResizeHandler).observe(textarea, { + attributes: true, + attributeFilter: ['style'] + }); + } + }); + return textarea; + }; + + const renderContent = (instance, params) => { + const htmlContainer = getHtmlContainer(); + applyCustomClass(htmlContainer, params, 'htmlContainer'); // Content as HTML + + if (params.html) { + parseHtmlToContainer(params.html, htmlContainer); + show(htmlContainer, 'block'); + } // Content as plain text + else if (params.text) { + htmlContainer.textContent = params.text; + show(htmlContainer, 'block'); + } // No content + else { + hide(htmlContainer); + } + + renderInput(instance, params); + }; + + const renderFooter = (instance, params) => { + const footer = getFooter(); + toggle(footer, params.footer); + + if (params.footer) { + parseHtmlToContainer(params.footer, footer); + } // Custom class + + + applyCustomClass(footer, params, 'footer'); + }; + + const renderCloseButton = (instance, params) => { + const closeButton = getCloseButton(); + setInnerHtml(closeButton, params.closeButtonHtml); // Custom class + + applyCustomClass(closeButton, params, 'closeButton'); + toggle(closeButton, params.showCloseButton); + closeButton.setAttribute('aria-label', params.closeButtonAriaLabel); + }; + + const renderIcon = (instance, params) => { + const innerParams = privateProps.innerParams.get(instance); + const icon = getIcon(); // if the given icon already rendered, apply the styling without re-rendering the icon + + if (innerParams && params.icon === innerParams.icon) { + // Custom or default content + setContent(icon, params); + applyStyles(icon, params); + return; + } + + if (!params.icon && !params.iconHtml) { + return hide(icon); + } + + if (params.icon && Object.keys(iconTypes).indexOf(params.icon) === -1) { + error("Unknown icon! Expected \"success\", \"error\", \"warning\", \"info\" or \"question\", got \"".concat(params.icon, "\"")); + return hide(icon); + } + + show(icon); // Custom or default content + + setContent(icon, params); + applyStyles(icon, params); // Animate icon + + addClass(icon, params.showClass.icon); + }; + + const applyStyles = (icon, params) => { + for (const iconType in iconTypes) { + if (params.icon !== iconType) { + removeClass(icon, iconTypes[iconType]); + } + } + + addClass(icon, iconTypes[params.icon]); // Icon color + + setColor(icon, params); // Success icon background color + + adjustSuccessIconBackgroundColor(); // Custom class + + applyCustomClass(icon, params, 'icon'); + }; // Adjust success icon background color to match the popup background color + + + const adjustSuccessIconBackgroundColor = () => { + const popup = getPopup(); + const popupBackgroundColor = window.getComputedStyle(popup).getPropertyValue('background-color'); + const successIconParts = popup.querySelectorAll('[class^=swal2-success-circular-line], .swal2-success-fix'); + + for (let i = 0; i < successIconParts.length; i++) { + successIconParts[i].style.backgroundColor = popupBackgroundColor; + } + }; + + const successIconHtml = "\n
    \n \n
    \n
    \n"; + const errorIconHtml = "\n \n \n \n \n"; + + const setContent = (icon, params) => { + icon.textContent = ''; + + if (params.iconHtml) { + setInnerHtml(icon, iconContent(params.iconHtml)); + } else if (params.icon === 'success') { + setInnerHtml(icon, successIconHtml); + } else if (params.icon === 'error') { + setInnerHtml(icon, errorIconHtml); + } else { + const defaultIconHtml = { + question: '?', + warning: '!', + info: 'i' + }; + setInnerHtml(icon, iconContent(defaultIconHtml[params.icon])); + } + }; + + const setColor = (icon, params) => { + if (!params.iconColor) { + return; + } + + icon.style.color = params.iconColor; + icon.style.borderColor = params.iconColor; + + for (const sel of ['.swal2-success-line-tip', '.swal2-success-line-long', '.swal2-x-mark-line-left', '.swal2-x-mark-line-right']) { + setStyle(icon, sel, 'backgroundColor', params.iconColor); + } + + setStyle(icon, '.swal2-success-ring', 'borderColor', params.iconColor); + }; + + const iconContent = content => "
    ").concat(content, "
    "); + + const renderImage = (instance, params) => { + const image = getImage(); + + if (!params.imageUrl) { + return hide(image); + } + + show(image, ''); // Src, alt + + image.setAttribute('src', params.imageUrl); + image.setAttribute('alt', params.imageAlt); // Width, height + + applyNumericalStyle(image, 'width', params.imageWidth); + applyNumericalStyle(image, 'height', params.imageHeight); // Class + + image.className = swalClasses.image; + applyCustomClass(image, params, 'image'); + }; + + const createStepElement = step => { + const stepEl = document.createElement('li'); + addClass(stepEl, swalClasses['progress-step']); + setInnerHtml(stepEl, step); + return stepEl; + }; + + const createLineElement = params => { + const lineEl = document.createElement('li'); + addClass(lineEl, swalClasses['progress-step-line']); + + if (params.progressStepsDistance) { + lineEl.style.width = params.progressStepsDistance; + } + + return lineEl; + }; + + const renderProgressSteps = (instance, params) => { + const progressStepsContainer = getProgressSteps(); + + if (!params.progressSteps || params.progressSteps.length === 0) { + return hide(progressStepsContainer); + } + + show(progressStepsContainer); + progressStepsContainer.textContent = ''; + + if (params.currentProgressStep >= params.progressSteps.length) { + warn('Invalid currentProgressStep parameter, it should be less than progressSteps.length ' + '(currentProgressStep like JS arrays starts from 0)'); + } + + params.progressSteps.forEach((step, index) => { + const stepEl = createStepElement(step); + progressStepsContainer.appendChild(stepEl); + + if (index === params.currentProgressStep) { + addClass(stepEl, swalClasses['active-progress-step']); + } + + if (index !== params.progressSteps.length - 1) { + const lineEl = createLineElement(params); + progressStepsContainer.appendChild(lineEl); + } + }); + }; + + const renderTitle = (instance, params) => { + const title = getTitle(); + toggle(title, params.title || params.titleText, 'block'); + + if (params.title) { + parseHtmlToContainer(params.title, title); + } + + if (params.titleText) { + title.innerText = params.titleText; + } // Custom class + + + applyCustomClass(title, params, 'title'); + }; + + const renderPopup = (instance, params) => { + const container = getContainer(); + const popup = getPopup(); // Width + // https://github.com/sweetalert2/sweetalert2/issues/2170 + + if (params.toast) { + applyNumericalStyle(container, 'width', params.width); + popup.style.width = '100%'; + popup.insertBefore(getLoader(), getIcon()); + } else { + applyNumericalStyle(popup, 'width', params.width); + } // Padding + + + applyNumericalStyle(popup, 'padding', params.padding); // Color + + if (params.color) { + popup.style.color = params.color; + } // Background + + + if (params.background) { + popup.style.background = params.background; + } + + hide(getValidationMessage()); // Classes + + addClasses(popup, params); + }; + + const addClasses = (popup, params) => { + // Default Class + showClass when updating Swal.update({}) + popup.className = "".concat(swalClasses.popup, " ").concat(isVisible(popup) ? params.showClass.popup : ''); + + if (params.toast) { + addClass([document.documentElement, document.body], swalClasses['toast-shown']); + addClass(popup, swalClasses.toast); + } else { + addClass(popup, swalClasses.modal); + } // Custom class + + + applyCustomClass(popup, params, 'popup'); + + if (typeof params.customClass === 'string') { + addClass(popup, params.customClass); + } // Icon class (#1842) + + + if (params.icon) { + addClass(popup, swalClasses["icon-".concat(params.icon)]); + } + }; + + const render = (instance, params) => { + renderPopup(instance, params); + renderContainer(instance, params); + renderProgressSteps(instance, params); + renderIcon(instance, params); + renderImage(instance, params); + renderTitle(instance, params); + renderCloseButton(instance, params); + renderContent(instance, params); + renderActions(instance, params); + renderFooter(instance, params); + + if (typeof params.didRender === 'function') { + params.didRender(getPopup()); + } + }; + + const DismissReason = Object.freeze({ + cancel: 'cancel', + backdrop: 'backdrop', + close: 'close', + esc: 'esc', + timer: 'timer' + }); + + // Adding aria-hidden="true" to elements outside of the active modal dialog ensures that + // elements not within the active modal dialog will not be surfaced if a user opens a screen + // reader’s list of elements (headings, form controls, landmarks, etc.) in the document. + + const setAriaHidden = () => { + const bodyChildren = toArray(document.body.children); + bodyChildren.forEach(el => { + if (el === getContainer() || el.contains(getContainer())) { + return; + } + + if (el.hasAttribute('aria-hidden')) { + el.setAttribute('data-previous-aria-hidden', el.getAttribute('aria-hidden')); + } + + el.setAttribute('aria-hidden', 'true'); + }); + }; + const unsetAriaHidden = () => { + const bodyChildren = toArray(document.body.children); + bodyChildren.forEach(el => { + if (el.hasAttribute('data-previous-aria-hidden')) { + el.setAttribute('aria-hidden', el.getAttribute('data-previous-aria-hidden')); + el.removeAttribute('data-previous-aria-hidden'); + } else { + el.removeAttribute('aria-hidden'); + } + }); + }; + + const swalStringParams = ['swal-title', 'swal-html', 'swal-footer']; + const getTemplateParams = params => { + const template = typeof params.template === 'string' ? document.querySelector(params.template) : params.template; + + if (!template) { + return {}; + } + /** @type {DocumentFragment} */ + + + const templateContent = template.content; + showWarningsForElements(templateContent); + const result = Object.assign(getSwalParams(templateContent), getSwalButtons(templateContent), getSwalImage(templateContent), getSwalIcon(templateContent), getSwalInput(templateContent), getSwalStringParams(templateContent, swalStringParams)); + return result; + }; + /** + * @param {DocumentFragment} templateContent + */ + + const getSwalParams = templateContent => { + const result = {}; + toArray(templateContent.querySelectorAll('swal-param')).forEach(param => { + showWarningsForAttributes(param, ['name', 'value']); + const paramName = param.getAttribute('name'); + const value = param.getAttribute('value'); + + if (typeof defaultParams[paramName] === 'boolean' && value === 'false') { + result[paramName] = false; + } + + if (typeof defaultParams[paramName] === 'object') { + result[paramName] = JSON.parse(value); + } + }); + return result; + }; + /** + * @param {DocumentFragment} templateContent + */ + + + const getSwalButtons = templateContent => { + const result = {}; + toArray(templateContent.querySelectorAll('swal-button')).forEach(button => { + showWarningsForAttributes(button, ['type', 'color', 'aria-label']); + const type = button.getAttribute('type'); + result["".concat(type, "ButtonText")] = button.innerHTML; + result["show".concat(capitalizeFirstLetter(type), "Button")] = true; + + if (button.hasAttribute('color')) { + result["".concat(type, "ButtonColor")] = button.getAttribute('color'); + } + + if (button.hasAttribute('aria-label')) { + result["".concat(type, "ButtonAriaLabel")] = button.getAttribute('aria-label'); + } + }); + return result; + }; + /** + * @param {DocumentFragment} templateContent + */ + + + const getSwalImage = templateContent => { + const result = {}; + /** @type {HTMLElement} */ + + const image = templateContent.querySelector('swal-image'); + + if (image) { + showWarningsForAttributes(image, ['src', 'width', 'height', 'alt']); + + if (image.hasAttribute('src')) { + result.imageUrl = image.getAttribute('src'); + } + + if (image.hasAttribute('width')) { + result.imageWidth = image.getAttribute('width'); + } + + if (image.hasAttribute('height')) { + result.imageHeight = image.getAttribute('height'); + } + + if (image.hasAttribute('alt')) { + result.imageAlt = image.getAttribute('alt'); + } + } + + return result; + }; + /** + * @param {DocumentFragment} templateContent + */ + + + const getSwalIcon = templateContent => { + const result = {}; + /** @type {HTMLElement} */ + + const icon = templateContent.querySelector('swal-icon'); + + if (icon) { + showWarningsForAttributes(icon, ['type', 'color']); + + if (icon.hasAttribute('type')) { + result.icon = icon.getAttribute('type'); + } + + if (icon.hasAttribute('color')) { + result.iconColor = icon.getAttribute('color'); + } + + result.iconHtml = icon.innerHTML; + } + + return result; + }; + /** + * @param {DocumentFragment} templateContent + */ + + + const getSwalInput = templateContent => { + const result = {}; + /** @type {HTMLElement} */ + + const input = templateContent.querySelector('swal-input'); + + if (input) { + showWarningsForAttributes(input, ['type', 'label', 'placeholder', 'value']); + result.input = input.getAttribute('type') || 'text'; + + if (input.hasAttribute('label')) { + result.inputLabel = input.getAttribute('label'); + } + + if (input.hasAttribute('placeholder')) { + result.inputPlaceholder = input.getAttribute('placeholder'); + } + + if (input.hasAttribute('value')) { + result.inputValue = input.getAttribute('value'); + } + } + + const inputOptions = templateContent.querySelectorAll('swal-input-option'); + + if (inputOptions.length) { + result.inputOptions = {}; + toArray(inputOptions).forEach(option => { + showWarningsForAttributes(option, ['value']); + const optionValue = option.getAttribute('value'); + const optionName = option.innerHTML; + result.inputOptions[optionValue] = optionName; + }); + } + + return result; + }; + /** + * @param {DocumentFragment} templateContent + * @param {string[]} paramNames + */ + + + const getSwalStringParams = (templateContent, paramNames) => { + const result = {}; + + for (const i in paramNames) { + const paramName = paramNames[i]; + /** @type {HTMLElement} */ + + const tag = templateContent.querySelector(paramName); + + if (tag) { + showWarningsForAttributes(tag, []); + result[paramName.replace(/^swal-/, '')] = tag.innerHTML.trim(); + } + } + + return result; + }; + /** + * @param {DocumentFragment} templateContent + */ + + + const showWarningsForElements = templateContent => { + const allowedElements = swalStringParams.concat(['swal-param', 'swal-button', 'swal-image', 'swal-icon', 'swal-input', 'swal-input-option']); + toArray(templateContent.children).forEach(el => { + const tagName = el.tagName.toLowerCase(); + + if (allowedElements.indexOf(tagName) === -1) { + warn("Unrecognized element <".concat(tagName, ">")); + } + }); + }; + /** + * @param {HTMLElement} el + * @param {string[]} allowedAttributes + */ + + + const showWarningsForAttributes = (el, allowedAttributes) => { + toArray(el.attributes).forEach(attribute => { + if (allowedAttributes.indexOf(attribute.name) === -1) { + warn(["Unrecognized attribute \"".concat(attribute.name, "\" on <").concat(el.tagName.toLowerCase(), ">."), "".concat(allowedAttributes.length ? "Allowed attributes are: ".concat(allowedAttributes.join(', ')) : 'To set the value, use HTML within the element.')]); + } + }); + }; + + var defaultInputValidators = { + email: (string, validationMessage) => { + return /^[a-zA-Z0-9.+_-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9-]{2,24}$/.test(string) ? Promise.resolve() : Promise.resolve(validationMessage || 'Invalid email address'); + }, + url: (string, validationMessage) => { + // taken from https://stackoverflow.com/a/3809435 with a small change from #1306 and #2013 + return /^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-z]{2,63}\b([-a-zA-Z0-9@:%_+.~#?&/=]*)$/.test(string) ? Promise.resolve() : Promise.resolve(validationMessage || 'Invalid URL'); + } + }; + + function setDefaultInputValidators(params) { + // Use default `inputValidator` for supported input types if not provided + if (!params.inputValidator) { + Object.keys(defaultInputValidators).forEach(key => { + if (params.input === key) { + params.inputValidator = defaultInputValidators[key]; + } + }); + } + } + + function validateCustomTargetElement(params) { + // Determine if the custom target element is valid + if (!params.target || typeof params.target === 'string' && !document.querySelector(params.target) || typeof params.target !== 'string' && !params.target.appendChild) { + warn('Target parameter is not valid, defaulting to "body"'); + params.target = 'body'; + } + } + /** + * Set type, text and actions on popup + * + * @param params + */ + + + function setParameters(params) { + setDefaultInputValidators(params); // showLoaderOnConfirm && preConfirm + + if (params.showLoaderOnConfirm && !params.preConfirm) { + warn('showLoaderOnConfirm is set to true, but preConfirm is not defined.\n' + 'showLoaderOnConfirm should be used together with preConfirm, see usage example:\n' + 'https://sweetalert2.github.io/#ajax-request'); + } + + validateCustomTargetElement(params); // Replace newlines with
    in title + + if (typeof params.title === 'string') { + params.title = params.title.split('\n').join('
    '); + } + + init(params); + } + + class Timer { + constructor(callback, delay) { + this.callback = callback; + this.remaining = delay; + this.running = false; + this.start(); + } + + start() { + if (!this.running) { + this.running = true; + this.started = new Date(); + this.id = setTimeout(this.callback, this.remaining); + } + + return this.remaining; + } + + stop() { + if (this.running) { + this.running = false; + clearTimeout(this.id); + this.remaining -= new Date().getTime() - this.started.getTime(); + } + + return this.remaining; + } + + increase(n) { + const running = this.running; + + if (running) { + this.stop(); + } + + this.remaining += n; + + if (running) { + this.start(); + } + + return this.remaining; + } + + getTimerLeft() { + if (this.running) { + this.stop(); + this.start(); + } + + return this.remaining; + } + + isRunning() { + return this.running; + } + + } + + const fixScrollbar = () => { + // for queues, do not do this more than once + if (states.previousBodyPadding !== null) { + return; + } // if the body has overflow + + + if (document.body.scrollHeight > window.innerHeight) { + // add padding so the content doesn't shift after removal of scrollbar + states.previousBodyPadding = parseInt(window.getComputedStyle(document.body).getPropertyValue('padding-right')); + document.body.style.paddingRight = "".concat(states.previousBodyPadding + measureScrollbar(), "px"); + } + }; + const undoScrollbar = () => { + if (states.previousBodyPadding !== null) { + document.body.style.paddingRight = "".concat(states.previousBodyPadding, "px"); + states.previousBodyPadding = null; + } + }; + + /* istanbul ignore file */ + + const iOSfix = () => { + const iOS = // @ts-ignore + /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream || navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1; + + if (iOS && !hasClass(document.body, swalClasses.iosfix)) { + const offset = document.body.scrollTop; + document.body.style.top = "".concat(offset * -1, "px"); + addClass(document.body, swalClasses.iosfix); + lockBodyScroll(); + addBottomPaddingForTallPopups(); + } + }; + /** + * https://github.com/sweetalert2/sweetalert2/issues/1948 + */ + + const addBottomPaddingForTallPopups = () => { + const ua = navigator.userAgent; + const iOS = !!ua.match(/iPad/i) || !!ua.match(/iPhone/i); + const webkit = !!ua.match(/WebKit/i); + const iOSSafari = iOS && webkit && !ua.match(/CriOS/i); + + if (iOSSafari) { + const bottomPanelHeight = 44; + + if (getPopup().scrollHeight > window.innerHeight - bottomPanelHeight) { + getContainer().style.paddingBottom = "".concat(bottomPanelHeight, "px"); + } + } + }; + /** + * https://github.com/sweetalert2/sweetalert2/issues/1246 + */ + + + const lockBodyScroll = () => { + const container = getContainer(); + let preventTouchMove; + + container.ontouchstart = e => { + preventTouchMove = shouldPreventTouchMove(e); + }; + + container.ontouchmove = e => { + if (preventTouchMove) { + e.preventDefault(); + e.stopPropagation(); + } + }; + }; + + const shouldPreventTouchMove = event => { + const target = event.target; + const container = getContainer(); + + if (isStylus(event) || isZoom(event)) { + return false; + } + + if (target === container) { + return true; + } + + if (!isScrollable(container) && target.tagName !== 'INPUT' && // #1603 + target.tagName !== 'TEXTAREA' && // #2266 + !(isScrollable(getHtmlContainer()) && // #1944 + getHtmlContainer().contains(target))) { + return true; + } + + return false; + }; + /** + * https://github.com/sweetalert2/sweetalert2/issues/1786 + * + * @param {*} event + * @returns {boolean} + */ + + + const isStylus = event => { + return event.touches && event.touches.length && event.touches[0].touchType === 'stylus'; + }; + /** + * https://github.com/sweetalert2/sweetalert2/issues/1891 + * + * @param {TouchEvent} event + * @returns {boolean} + */ + + + const isZoom = event => { + return event.touches && event.touches.length > 1; + }; + + const undoIOSfix = () => { + if (hasClass(document.body, swalClasses.iosfix)) { + const offset = parseInt(document.body.style.top, 10); + removeClass(document.body, swalClasses.iosfix); + document.body.style.top = ''; + document.body.scrollTop = offset * -1; + } + }; + + const SHOW_CLASS_TIMEOUT = 10; + /** + * Open popup, add necessary classes and styles, fix scrollbar + * + * @param params + */ + + const openPopup = params => { + const container = getContainer(); + const popup = getPopup(); + + if (typeof params.willOpen === 'function') { + params.willOpen(popup); + } + + const bodyStyles = window.getComputedStyle(document.body); + const initialBodyOverflow = bodyStyles.overflowY; + addClasses$1(container, popup, params); // scrolling is 'hidden' until animation is done, after that 'auto' + + setTimeout(() => { + setScrollingVisibility(container, popup); + }, SHOW_CLASS_TIMEOUT); + + if (isModal()) { + fixScrollContainer(container, params.scrollbarPadding, initialBodyOverflow); + setAriaHidden(); + } + + if (!isToast() && !globalState.previousActiveElement) { + globalState.previousActiveElement = document.activeElement; + } + + if (typeof params.didOpen === 'function') { + setTimeout(() => params.didOpen(popup)); + } + + removeClass(container, swalClasses['no-transition']); + }; + + const swalOpenAnimationFinished = event => { + const popup = getPopup(); + + if (event.target !== popup) { + return; + } + + const container = getContainer(); + popup.removeEventListener(animationEndEvent, swalOpenAnimationFinished); + container.style.overflowY = 'auto'; + }; + + const setScrollingVisibility = (container, popup) => { + if (animationEndEvent && hasCssAnimation(popup)) { + container.style.overflowY = 'hidden'; + popup.addEventListener(animationEndEvent, swalOpenAnimationFinished); + } else { + container.style.overflowY = 'auto'; + } + }; + + const fixScrollContainer = (container, scrollbarPadding, initialBodyOverflow) => { + iOSfix(); + + if (scrollbarPadding && initialBodyOverflow !== 'hidden') { + fixScrollbar(); + } // sweetalert2/issues/1247 + + + setTimeout(() => { + container.scrollTop = 0; + }); + }; + + const addClasses$1 = (container, popup, params) => { + addClass(container, params.showClass.backdrop); // this workaround with opacity is needed for https://github.com/sweetalert2/sweetalert2/issues/2059 + + popup.style.setProperty('opacity', '0', 'important'); + show(popup, 'grid'); + setTimeout(() => { + // Animate popup right after showing it + addClass(popup, params.showClass.popup); // and remove the opacity workaround + + popup.style.removeProperty('opacity'); + }, SHOW_CLASS_TIMEOUT); // 10ms in order to fix #2062 + + addClass([document.documentElement, document.body], swalClasses.shown); + + if (params.heightAuto && params.backdrop && !params.toast) { + addClass([document.documentElement, document.body], swalClasses['height-auto']); + } + }; + + /** + * Shows loader (spinner), this is useful with AJAX requests. + * By default the loader be shown instead of the "Confirm" button. + */ + + const showLoading = buttonToReplace => { + let popup = getPopup(); + + if (!popup) { + new Swal(); // eslint-disable-line no-new + } + + popup = getPopup(); + const loader = getLoader(); + + if (isToast()) { + hide(getIcon()); + } else { + replaceButton(popup, buttonToReplace); + } + + show(loader); + popup.setAttribute('data-loading', true); + popup.setAttribute('aria-busy', true); + popup.focus(); + }; + + const replaceButton = (popup, buttonToReplace) => { + const actions = getActions(); + const loader = getLoader(); + + if (!buttonToReplace && isVisible(getConfirmButton())) { + buttonToReplace = getConfirmButton(); + } + + show(actions); + + if (buttonToReplace) { + hide(buttonToReplace); + loader.setAttribute('data-button-to-replace', buttonToReplace.className); + } + + loader.parentNode.insertBefore(loader, buttonToReplace); + addClass([popup, actions], swalClasses.loading); + }; + + const handleInputOptionsAndValue = (instance, params) => { + if (params.input === 'select' || params.input === 'radio') { + handleInputOptions(instance, params); + } else if (['text', 'email', 'number', 'tel', 'textarea'].includes(params.input) && (hasToPromiseFn(params.inputValue) || isPromise(params.inputValue))) { + showLoading(getConfirmButton()); + handleInputValue(instance, params); + } + }; + const getInputValue = (instance, innerParams) => { + const input = instance.getInput(); + + if (!input) { + return null; + } + + switch (innerParams.input) { + case 'checkbox': + return getCheckboxValue(input); + + case 'radio': + return getRadioValue(input); + + case 'file': + return getFileValue(input); + + default: + return innerParams.inputAutoTrim ? input.value.trim() : input.value; + } + }; + + const getCheckboxValue = input => input.checked ? 1 : 0; + + const getRadioValue = input => input.checked ? input.value : null; + + const getFileValue = input => input.files.length ? input.getAttribute('multiple') !== null ? input.files : input.files[0] : null; + + const handleInputOptions = (instance, params) => { + const popup = getPopup(); + + const processInputOptions = inputOptions => populateInputOptions[params.input](popup, formatInputOptions(inputOptions), params); + + if (hasToPromiseFn(params.inputOptions) || isPromise(params.inputOptions)) { + showLoading(getConfirmButton()); + asPromise(params.inputOptions).then(inputOptions => { + instance.hideLoading(); + processInputOptions(inputOptions); + }); + } else if (typeof params.inputOptions === 'object') { + processInputOptions(params.inputOptions); + } else { + error("Unexpected type of inputOptions! Expected object, Map or Promise, got ".concat(typeof params.inputOptions)); + } + }; + + const handleInputValue = (instance, params) => { + const input = instance.getInput(); + hide(input); + asPromise(params.inputValue).then(inputValue => { + input.value = params.input === 'number' ? parseFloat(inputValue) || 0 : "".concat(inputValue); + show(input); + input.focus(); + instance.hideLoading(); + }).catch(err => { + error("Error in inputValue promise: ".concat(err)); + input.value = ''; + show(input); + input.focus(); + instance.hideLoading(); + }); + }; + + const populateInputOptions = { + select: (popup, inputOptions, params) => { + const select = getDirectChildByClass(popup, swalClasses.select); + + const renderOption = (parent, optionLabel, optionValue) => { + const option = document.createElement('option'); + option.value = optionValue; + setInnerHtml(option, optionLabel); + option.selected = isSelected(optionValue, params.inputValue); + parent.appendChild(option); + }; + + inputOptions.forEach(inputOption => { + const optionValue = inputOption[0]; + const optionLabel = inputOption[1]; // spec: + // https://www.w3.org/TR/html401/interact/forms.html#h-17.6 + // "...all OPTGROUP elements must be specified directly within a SELECT element (i.e., groups may not be nested)..." + // check whether this is a + + if (Array.isArray(optionLabel)) { + // if it is an array, then it is an + const optgroup = document.createElement('optgroup'); + optgroup.label = optionValue; + optgroup.disabled = false; // not configurable for now + + select.appendChild(optgroup); + optionLabel.forEach(o => renderOption(optgroup, o[1], o[0])); + } else { + // case of + valueFormatted = formatInputOptions(valueFormatted); + } + + result.push([key, valueFormatted]); + }); + } else { + Object.keys(inputOptions).forEach(key => { + let valueFormatted = inputOptions[key]; + + if (typeof valueFormatted === 'object') { + // case of + valueFormatted = formatInputOptions(valueFormatted); + } + + result.push([key, valueFormatted]); + }); + } + + return result; + }; + + const isSelected = (optionValue, inputValue) => { + return inputValue && inputValue.toString() === optionValue.toString(); + }; + + /** + * Hides loader and shows back the button which was hidden by .showLoading() + */ + + function hideLoading() { + // do nothing if popup is closed + const innerParams = privateProps.innerParams.get(this); + + if (!innerParams) { + return; + } + + const domCache = privateProps.domCache.get(this); + hide(domCache.loader); + + if (isToast()) { + if (innerParams.icon) { + show(getIcon()); + } + } else { + showRelatedButton(domCache); + } + + removeClass([domCache.popup, domCache.actions], swalClasses.loading); + domCache.popup.removeAttribute('aria-busy'); + domCache.popup.removeAttribute('data-loading'); + domCache.confirmButton.disabled = false; + domCache.denyButton.disabled = false; + domCache.cancelButton.disabled = false; + } + + const showRelatedButton = domCache => { + const buttonToReplace = domCache.popup.getElementsByClassName(domCache.loader.getAttribute('data-button-to-replace')); + + if (buttonToReplace.length) { + show(buttonToReplace[0], 'inline-block'); + } else if (allButtonsAreHidden()) { + hide(domCache.actions); + } + }; + + /** + * Gets the input DOM node, this method works with input parameter. + * @returns {HTMLElement | null} + */ + + function getInput$1(instance) { + const innerParams = privateProps.innerParams.get(instance || this); + const domCache = privateProps.domCache.get(instance || this); + + if (!domCache) { + return null; + } + + return getInput(domCache.popup, innerParams.input); + } + + /** + * This module contains `WeakMap`s for each effectively-"private property" that a `Swal` has. + * For example, to set the private property "foo" of `this` to "bar", you can `privateProps.foo.set(this, 'bar')` + * This is the approach that Babel will probably take to implement private methods/fields + * https://github.com/tc39/proposal-private-methods + * https://github.com/babel/babel/pull/7555 + * Once we have the changes from that PR in Babel, and our core class fits reasonable in *one module* + * then we can use that language feature. + */ + var privateMethods = { + swalPromiseResolve: new WeakMap(), + swalPromiseReject: new WeakMap() + }; + + /* + * Global function to determine if SweetAlert2 popup is shown + */ + + const isVisible$1 = () => { + return isVisible(getPopup()); + }; + /* + * Global function to click 'Confirm' button + */ + + const clickConfirm = () => getConfirmButton() && getConfirmButton().click(); + /* + * Global function to click 'Deny' button + */ + + const clickDeny = () => getDenyButton() && getDenyButton().click(); + /* + * Global function to click 'Cancel' button + */ + + const clickCancel = () => getCancelButton() && getCancelButton().click(); + + const removeKeydownHandler = globalState => { + if (globalState.keydownTarget && globalState.keydownHandlerAdded) { + globalState.keydownTarget.removeEventListener('keydown', globalState.keydownHandler, { + capture: globalState.keydownListenerCapture + }); + globalState.keydownHandlerAdded = false; + } + }; + const addKeydownHandler = (instance, globalState, innerParams, dismissWith) => { + removeKeydownHandler(globalState); + + if (!innerParams.toast) { + globalState.keydownHandler = e => keydownHandler(instance, e, dismissWith); + + globalState.keydownTarget = innerParams.keydownListenerCapture ? window : getPopup(); + globalState.keydownListenerCapture = innerParams.keydownListenerCapture; + globalState.keydownTarget.addEventListener('keydown', globalState.keydownHandler, { + capture: globalState.keydownListenerCapture + }); + globalState.keydownHandlerAdded = true; + } + }; // Focus handling + + const setFocus = (innerParams, index, increment) => { + const focusableElements = getFocusableElements(); // search for visible elements and select the next possible match + + if (focusableElements.length) { + index = index + increment; // rollover to first item + + if (index === focusableElements.length) { + index = 0; // go to last item + } else if (index === -1) { + index = focusableElements.length - 1; + } + + return focusableElements[index].focus(); + } // no visible focusable elements, focus the popup + + + getPopup().focus(); + }; + const arrowKeysNextButton = ['ArrowRight', 'ArrowDown']; + const arrowKeysPreviousButton = ['ArrowLeft', 'ArrowUp']; + + const keydownHandler = (instance, e, dismissWith) => { + const innerParams = privateProps.innerParams.get(instance); + + if (!innerParams) { + return; // This instance has already been destroyed + } // Ignore keydown during IME composition + // https://developer.mozilla.org/en-US/docs/Web/API/Document/keydown_event#ignoring_keydown_during_ime_composition + // https://github.com/sweetalert2/sweetalert2/issues/720 + // https://github.com/sweetalert2/sweetalert2/issues/2406 + + + if (e.isComposing || e.keyCode === 229) { + return; + } + + if (innerParams.stopKeydownPropagation) { + e.stopPropagation(); + } // ENTER + + + if (e.key === 'Enter') { + handleEnter(instance, e, innerParams); + } // TAB + else if (e.key === 'Tab') { + handleTab(e, innerParams); + } // ARROWS - switch focus between buttons + else if ([...arrowKeysNextButton, ...arrowKeysPreviousButton].includes(e.key)) { + handleArrows(e.key); + } // ESC + else if (e.key === 'Escape') { + handleEsc(e, innerParams, dismissWith); + } + }; + + const handleEnter = (instance, e, innerParams) => { + // https://github.com/sweetalert2/sweetalert2/issues/2386 + if (!callIfFunction(innerParams.allowEnterKey)) { + return; + } + + if (e.target && instance.getInput() && e.target.outerHTML === instance.getInput().outerHTML) { + if (['textarea', 'file'].includes(innerParams.input)) { + return; // do not submit + } + + clickConfirm(); + e.preventDefault(); + } + }; + + const handleTab = (e, innerParams) => { + const targetElement = e.target; + const focusableElements = getFocusableElements(); + let btnIndex = -1; + + for (let i = 0; i < focusableElements.length; i++) { + if (targetElement === focusableElements[i]) { + btnIndex = i; + break; + } + } // Cycle to the next button + + + if (!e.shiftKey) { + setFocus(innerParams, btnIndex, 1); + } // Cycle to the prev button + else { + setFocus(innerParams, btnIndex, -1); + } + + e.stopPropagation(); + e.preventDefault(); + }; + + const handleArrows = key => { + const confirmButton = getConfirmButton(); + const denyButton = getDenyButton(); + const cancelButton = getCancelButton(); + + if (![confirmButton, denyButton, cancelButton].includes(document.activeElement)) { + return; + } + + const sibling = arrowKeysNextButton.includes(key) ? 'nextElementSibling' : 'previousElementSibling'; + let buttonToFocus = document.activeElement; + + for (let i = 0; i < getActions().children.length; i++) { + buttonToFocus = buttonToFocus[sibling]; + + if (!buttonToFocus) { + return; + } + + if (isVisible(buttonToFocus) && buttonToFocus instanceof HTMLButtonElement) { + break; + } + } + + if (buttonToFocus instanceof HTMLButtonElement) { + buttonToFocus.focus(); + } + }; + + const handleEsc = (e, innerParams, dismissWith) => { + if (callIfFunction(innerParams.allowEscapeKey)) { + e.preventDefault(); + dismissWith(DismissReason.esc); + } + }; + + /* + * Instance method to close sweetAlert + */ + + function removePopupAndResetState(instance, container, returnFocus, didClose) { + if (isToast()) { + triggerDidCloseAndDispose(instance, didClose); + } else { + restoreActiveElement(returnFocus).then(() => triggerDidCloseAndDispose(instance, didClose)); + removeKeydownHandler(globalState); + } + + const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent); // workaround for #2088 + // for some reason removing the container in Safari will scroll the document to bottom + + if (isSafari) { + container.setAttribute('style', 'display:none !important'); + container.removeAttribute('class'); + container.innerHTML = ''; + } else { + container.remove(); + } + + if (isModal()) { + undoScrollbar(); + undoIOSfix(); + unsetAriaHidden(); + } + + removeBodyClasses(); + } + + function removeBodyClasses() { + removeClass([document.documentElement, document.body], [swalClasses.shown, swalClasses['height-auto'], swalClasses['no-backdrop'], swalClasses['toast-shown']]); + } + + function close(resolveValue) { + resolveValue = prepareResolveValue(resolveValue); + const swalPromiseResolve = privateMethods.swalPromiseResolve.get(this); + const didClose = triggerClosePopup(this); + + if (this.isAwaitingPromise()) { + // A swal awaiting for a promise (after a click on Confirm or Deny) cannot be dismissed anymore #2335 + if (!resolveValue.isDismissed) { + handleAwaitingPromise(this); + swalPromiseResolve(resolveValue); + } + } else if (didClose) { + // Resolve Swal promise + swalPromiseResolve(resolveValue); + } + } + function isAwaitingPromise() { + return !!privateProps.awaitingPromise.get(this); + } + + const triggerClosePopup = instance => { + const popup = getPopup(); + + if (!popup) { + return false; + } + + const innerParams = privateProps.innerParams.get(instance); + + if (!innerParams || hasClass(popup, innerParams.hideClass.popup)) { + return false; + } + + removeClass(popup, innerParams.showClass.popup); + addClass(popup, innerParams.hideClass.popup); + const backdrop = getContainer(); + removeClass(backdrop, innerParams.showClass.backdrop); + addClass(backdrop, innerParams.hideClass.backdrop); + handlePopupAnimation(instance, popup, innerParams); + return true; + }; + + function rejectPromise(error) { + const rejectPromise = privateMethods.swalPromiseReject.get(this); + handleAwaitingPromise(this); + + if (rejectPromise) { + // Reject Swal promise + rejectPromise(error); + } + } + const handleAwaitingPromise = instance => { + if (instance.isAwaitingPromise()) { + privateProps.awaitingPromise.delete(instance); // The instance might have been previously partly destroyed, we must resume the destroy process in this case #2335 + + if (!privateProps.innerParams.get(instance)) { + instance._destroy(); + } + } + }; + + const prepareResolveValue = resolveValue => { + // When user calls Swal.close() + if (typeof resolveValue === 'undefined') { + return { + isConfirmed: false, + isDenied: false, + isDismissed: true + }; + } + + return Object.assign({ + isConfirmed: false, + isDenied: false, + isDismissed: false + }, resolveValue); + }; + + const handlePopupAnimation = (instance, popup, innerParams) => { + const container = getContainer(); // If animation is supported, animate + + const animationIsSupported = animationEndEvent && hasCssAnimation(popup); + + if (typeof innerParams.willClose === 'function') { + innerParams.willClose(popup); + } + + if (animationIsSupported) { + animatePopup(instance, popup, container, innerParams.returnFocus, innerParams.didClose); + } else { + // Otherwise, remove immediately + removePopupAndResetState(instance, container, innerParams.returnFocus, innerParams.didClose); + } + }; + + const animatePopup = (instance, popup, container, returnFocus, didClose) => { + globalState.swalCloseEventFinishedCallback = removePopupAndResetState.bind(null, instance, container, returnFocus, didClose); + popup.addEventListener(animationEndEvent, function (e) { + if (e.target === popup) { + globalState.swalCloseEventFinishedCallback(); + delete globalState.swalCloseEventFinishedCallback; + } + }); + }; + + const triggerDidCloseAndDispose = (instance, didClose) => { + setTimeout(() => { + if (typeof didClose === 'function') { + didClose.bind(instance.params)(); + } + + instance._destroy(); + }); + }; + + function setButtonsDisabled(instance, buttons, disabled) { + const domCache = privateProps.domCache.get(instance); + buttons.forEach(button => { + domCache[button].disabled = disabled; + }); + } + + function setInputDisabled(input, disabled) { + if (!input) { + return false; + } + + if (input.type === 'radio') { + const radiosContainer = input.parentNode.parentNode; + const radios = radiosContainer.querySelectorAll('input'); + + for (let i = 0; i < radios.length; i++) { + radios[i].disabled = disabled; + } + } else { + input.disabled = disabled; + } + } + + function enableButtons() { + setButtonsDisabled(this, ['confirmButton', 'denyButton', 'cancelButton'], false); + } + function disableButtons() { + setButtonsDisabled(this, ['confirmButton', 'denyButton', 'cancelButton'], true); + } + function enableInput() { + return setInputDisabled(this.getInput(), false); + } + function disableInput() { + return setInputDisabled(this.getInput(), true); + } + + function showValidationMessage(error) { + const domCache = privateProps.domCache.get(this); + const params = privateProps.innerParams.get(this); + setInnerHtml(domCache.validationMessage, error); + domCache.validationMessage.className = swalClasses['validation-message']; + + if (params.customClass && params.customClass.validationMessage) { + addClass(domCache.validationMessage, params.customClass.validationMessage); + } + + show(domCache.validationMessage); + const input = this.getInput(); + + if (input) { + input.setAttribute('aria-invalid', true); + input.setAttribute('aria-describedby', swalClasses['validation-message']); + focusInput(input); + addClass(input, swalClasses.inputerror); + } + } // Hide block with validation message + + function resetValidationMessage$1() { + const domCache = privateProps.domCache.get(this); + + if (domCache.validationMessage) { + hide(domCache.validationMessage); + } + + const input = this.getInput(); + + if (input) { + input.removeAttribute('aria-invalid'); + input.removeAttribute('aria-describedby'); + removeClass(input, swalClasses.inputerror); + } + } + + function getProgressSteps$1() { + const domCache = privateProps.domCache.get(this); + return domCache.progressSteps; + } + + /** + * Updates popup parameters. + */ + + function update(params) { + const popup = getPopup(); + const innerParams = privateProps.innerParams.get(this); + + if (!popup || hasClass(popup, innerParams.hideClass.popup)) { + return warn("You're trying to update the closed or closing popup, that won't work. Use the update() method in preConfirm parameter or show a new popup."); + } + + const validUpdatableParams = filterValidParams(params); + const updatedParams = Object.assign({}, innerParams, validUpdatableParams); + render(this, updatedParams); + privateProps.innerParams.set(this, updatedParams); + Object.defineProperties(this, { + params: { + value: Object.assign({}, this.params, params), + writable: false, + enumerable: true + } + }); + } + + const filterValidParams = params => { + const validUpdatableParams = {}; + Object.keys(params).forEach(param => { + if (isUpdatableParameter(param)) { + validUpdatableParams[param] = params[param]; + } else { + warn("Invalid parameter to update: \"".concat(param, "\". Updatable params are listed here: https://github.com/sweetalert2/sweetalert2/blob/master/src/utils/params.js\n\nIf you think this parameter should be updatable, request it here: https://github.com/sweetalert2/sweetalert2/issues/new?template=02_feature_request.md")); + } + }); + return validUpdatableParams; + }; + + function _destroy() { + const domCache = privateProps.domCache.get(this); + const innerParams = privateProps.innerParams.get(this); + + if (!innerParams) { + disposeWeakMaps(this); // The WeakMaps might have been partly destroyed, we must recall it to dispose any remaining WeakMaps #2335 + + return; // This instance has already been destroyed + } // Check if there is another Swal closing + + + if (domCache.popup && globalState.swalCloseEventFinishedCallback) { + globalState.swalCloseEventFinishedCallback(); + delete globalState.swalCloseEventFinishedCallback; + } // Check if there is a swal disposal defer timer + + + if (globalState.deferDisposalTimer) { + clearTimeout(globalState.deferDisposalTimer); + delete globalState.deferDisposalTimer; + } + + if (typeof innerParams.didDestroy === 'function') { + innerParams.didDestroy(); + } + + disposeSwal(this); + } + + const disposeSwal = instance => { + disposeWeakMaps(instance); // Unset this.params so GC will dispose it (#1569) + + delete instance.params; // Unset globalState props so GC will dispose globalState (#1569) + + delete globalState.keydownHandler; + delete globalState.keydownTarget; // Unset currentInstance + + delete globalState.currentInstance; + }; + + const disposeWeakMaps = instance => { + // If the current instance is awaiting a promise result, we keep the privateMethods to call them once the promise result is retrieved #2335 + if (instance.isAwaitingPromise()) { + unsetWeakMaps(privateProps, instance); + privateProps.awaitingPromise.set(instance, true); + } else { + unsetWeakMaps(privateMethods, instance); + unsetWeakMaps(privateProps, instance); + } + }; + + const unsetWeakMaps = (obj, instance) => { + for (const i in obj) { + obj[i].delete(instance); + } + }; + + + + var instanceMethods = /*#__PURE__*/Object.freeze({ + hideLoading: hideLoading, + disableLoading: hideLoading, + getInput: getInput$1, + close: close, + isAwaitingPromise: isAwaitingPromise, + rejectPromise: rejectPromise, + handleAwaitingPromise: handleAwaitingPromise, + closePopup: close, + closeModal: close, + closeToast: close, + enableButtons: enableButtons, + disableButtons: disableButtons, + enableInput: enableInput, + disableInput: disableInput, + showValidationMessage: showValidationMessage, + resetValidationMessage: resetValidationMessage$1, + getProgressSteps: getProgressSteps$1, + update: update, + _destroy: _destroy + }); + + const handleConfirmButtonClick = instance => { + const innerParams = privateProps.innerParams.get(instance); + instance.disableButtons(); + + if (innerParams.input) { + handleConfirmOrDenyWithInput(instance, 'confirm'); + } else { + confirm(instance, true); + } + }; + const handleDenyButtonClick = instance => { + const innerParams = privateProps.innerParams.get(instance); + instance.disableButtons(); + + if (innerParams.returnInputValueOnDeny) { + handleConfirmOrDenyWithInput(instance, 'deny'); + } else { + deny(instance, false); + } + }; + const handleCancelButtonClick = (instance, dismissWith) => { + instance.disableButtons(); + dismissWith(DismissReason.cancel); + }; + + const handleConfirmOrDenyWithInput = (instance, type + /* 'confirm' | 'deny' */ + ) => { + const innerParams = privateProps.innerParams.get(instance); + + if (!innerParams.input) { + return error("The \"input\" parameter is needed to be set when using returnInputValueOn".concat(capitalizeFirstLetter(type))); + } + + const inputValue = getInputValue(instance, innerParams); + + if (innerParams.inputValidator) { + handleInputValidator(instance, inputValue, type); + } else if (!instance.getInput().checkValidity()) { + instance.enableButtons(); + instance.showValidationMessage(innerParams.validationMessage); + } else if (type === 'deny') { + deny(instance, inputValue); + } else { + confirm(instance, inputValue); + } + }; + + const handleInputValidator = (instance, inputValue, type + /* 'confirm' | 'deny' */ + ) => { + const innerParams = privateProps.innerParams.get(instance); + instance.disableInput(); + const validationPromise = Promise.resolve().then(() => asPromise(innerParams.inputValidator(inputValue, innerParams.validationMessage))); + validationPromise.then(validationMessage => { + instance.enableButtons(); + instance.enableInput(); + + if (validationMessage) { + instance.showValidationMessage(validationMessage); + } else if (type === 'deny') { + deny(instance, inputValue); + } else { + confirm(instance, inputValue); + } + }); + }; + + const deny = (instance, value) => { + const innerParams = privateProps.innerParams.get(instance || undefined); + + if (innerParams.showLoaderOnDeny) { + showLoading(getDenyButton()); + } + + if (innerParams.preDeny) { + privateProps.awaitingPromise.set(instance || undefined, true); // Flagging the instance as awaiting a promise so it's own promise's reject/resolve methods doesn't get destroyed until the result from this preDeny's promise is received + + const preDenyPromise = Promise.resolve().then(() => asPromise(innerParams.preDeny(value, innerParams.validationMessage))); + preDenyPromise.then(preDenyValue => { + if (preDenyValue === false) { + instance.hideLoading(); + handleAwaitingPromise(instance); + } else { + instance.closePopup({ + isDenied: true, + value: typeof preDenyValue === 'undefined' ? value : preDenyValue + }); + } + }).catch(error$$1 => rejectWith(instance || undefined, error$$1)); + } else { + instance.closePopup({ + isDenied: true, + value + }); + } + }; + + const succeedWith = (instance, value) => { + instance.closePopup({ + isConfirmed: true, + value + }); + }; + + const rejectWith = (instance, error$$1) => { + instance.rejectPromise(error$$1); + }; + + const confirm = (instance, value) => { + const innerParams = privateProps.innerParams.get(instance || undefined); + + if (innerParams.showLoaderOnConfirm) { + showLoading(); + } + + if (innerParams.preConfirm) { + instance.resetValidationMessage(); + privateProps.awaitingPromise.set(instance || undefined, true); // Flagging the instance as awaiting a promise so it's own promise's reject/resolve methods doesn't get destroyed until the result from this preConfirm's promise is received + + const preConfirmPromise = Promise.resolve().then(() => asPromise(innerParams.preConfirm(value, innerParams.validationMessage))); + preConfirmPromise.then(preConfirmValue => { + if (isVisible(getValidationMessage()) || preConfirmValue === false) { + instance.hideLoading(); + handleAwaitingPromise(instance); + } else { + succeedWith(instance, typeof preConfirmValue === 'undefined' ? value : preConfirmValue); + } + }).catch(error$$1 => rejectWith(instance || undefined, error$$1)); + } else { + succeedWith(instance, value); + } + }; + + const handlePopupClick = (instance, domCache, dismissWith) => { + const innerParams = privateProps.innerParams.get(instance); + + if (innerParams.toast) { + handleToastClick(instance, domCache, dismissWith); + } else { + // Ignore click events that had mousedown on the popup but mouseup on the container + // This can happen when the user drags a slider + handleModalMousedown(domCache); // Ignore click events that had mousedown on the container but mouseup on the popup + + handleContainerMousedown(domCache); + handleModalClick(instance, domCache, dismissWith); + } + }; + + const handleToastClick = (instance, domCache, dismissWith) => { + // Closing toast by internal click + domCache.popup.onclick = () => { + const innerParams = privateProps.innerParams.get(instance); + + if (innerParams && (isAnyButtonShown(innerParams) || innerParams.timer || innerParams.input)) { + return; + } + + dismissWith(DismissReason.close); + }; + }; + /** + * @param {*} innerParams + * @returns {boolean} + */ + + + const isAnyButtonShown = innerParams => { + return innerParams.showConfirmButton || innerParams.showDenyButton || innerParams.showCancelButton || innerParams.showCloseButton; + }; + + let ignoreOutsideClick = false; + + const handleModalMousedown = domCache => { + domCache.popup.onmousedown = () => { + domCache.container.onmouseup = function (e) { + domCache.container.onmouseup = undefined; // We only check if the mouseup target is the container because usually it doesn't + // have any other direct children aside of the popup + + if (e.target === domCache.container) { + ignoreOutsideClick = true; + } + }; + }; + }; + + const handleContainerMousedown = domCache => { + domCache.container.onmousedown = () => { + domCache.popup.onmouseup = function (e) { + domCache.popup.onmouseup = undefined; // We also need to check if the mouseup target is a child of the popup + + if (e.target === domCache.popup || domCache.popup.contains(e.target)) { + ignoreOutsideClick = true; + } + }; + }; + }; + + const handleModalClick = (instance, domCache, dismissWith) => { + domCache.container.onclick = e => { + const innerParams = privateProps.innerParams.get(instance); + + if (ignoreOutsideClick) { + ignoreOutsideClick = false; + return; + } + + if (e.target === domCache.container && callIfFunction(innerParams.allowOutsideClick)) { + dismissWith(DismissReason.backdrop); + } + }; + }; + + const isJqueryElement = elem => typeof elem === 'object' && elem.jquery; + + const isElement = elem => elem instanceof Element || isJqueryElement(elem); + + const argsToParams = args => { + const params = {}; + + if (typeof args[0] === 'object' && !isElement(args[0])) { + Object.assign(params, args[0]); + } else { + ['title', 'html', 'icon'].forEach((name, index) => { + const arg = args[index]; + + if (typeof arg === 'string' || isElement(arg)) { + params[name] = arg; + } else if (arg !== undefined) { + error("Unexpected type of ".concat(name, "! Expected \"string\" or \"Element\", got ").concat(typeof arg)); + } + }); + } + + return params; + }; + + function fire() { + const Swal = this; // eslint-disable-line @typescript-eslint/no-this-alias + + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + return new Swal(...args); + } + + /** + * Returns an extended version of `Swal` containing `params` as defaults. + * Useful for reusing Swal configuration. + * + * For example: + * + * Before: + * const textPromptOptions = { input: 'text', showCancelButton: true } + * const {value: firstName} = await Swal.fire({ ...textPromptOptions, title: 'What is your first name?' }) + * const {value: lastName} = await Swal.fire({ ...textPromptOptions, title: 'What is your last name?' }) + * + * After: + * const TextPrompt = Swal.mixin({ input: 'text', showCancelButton: true }) + * const {value: firstName} = await TextPrompt('What is your first name?') + * const {value: lastName} = await TextPrompt('What is your last name?') + * + * @param mixinParams + */ + function mixin(mixinParams) { + class MixinSwal extends this { + _main(params, priorityMixinParams) { + return super._main(params, Object.assign({}, mixinParams, priorityMixinParams)); + } + + } + + return MixinSwal; + } + + /** + * If `timer` parameter is set, returns number of milliseconds of timer remained. + * Otherwise, returns undefined. + */ + + const getTimerLeft = () => { + return globalState.timeout && globalState.timeout.getTimerLeft(); + }; + /** + * Stop timer. Returns number of milliseconds of timer remained. + * If `timer` parameter isn't set, returns undefined. + */ + + const stopTimer = () => { + if (globalState.timeout) { + stopTimerProgressBar(); + return globalState.timeout.stop(); + } + }; + /** + * Resume timer. Returns number of milliseconds of timer remained. + * If `timer` parameter isn't set, returns undefined. + */ + + const resumeTimer = () => { + if (globalState.timeout) { + const remaining = globalState.timeout.start(); + animateTimerProgressBar(remaining); + return remaining; + } + }; + /** + * Resume timer. Returns number of milliseconds of timer remained. + * If `timer` parameter isn't set, returns undefined. + */ + + const toggleTimer = () => { + const timer = globalState.timeout; + return timer && (timer.running ? stopTimer() : resumeTimer()); + }; + /** + * Increase timer. Returns number of milliseconds of an updated timer. + * If `timer` parameter isn't set, returns undefined. + */ + + const increaseTimer = n => { + if (globalState.timeout) { + const remaining = globalState.timeout.increase(n); + animateTimerProgressBar(remaining, true); + return remaining; + } + }; + /** + * Check if timer is running. Returns true if timer is running + * or false if timer is paused or stopped. + * If `timer` parameter isn't set, returns undefined + */ + + const isTimerRunning = () => { + return globalState.timeout && globalState.timeout.isRunning(); + }; + + let bodyClickListenerAdded = false; + const clickHandlers = {}; + function bindClickHandler() { + let attr = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'data-swal-template'; + clickHandlers[attr] = this; + + if (!bodyClickListenerAdded) { + document.body.addEventListener('click', bodyClickListener); + bodyClickListenerAdded = true; + } + } + + const bodyClickListener = event => { + for (let el = event.target; el && el !== document; el = el.parentNode) { + for (const attr in clickHandlers) { + const template = el.getAttribute(attr); + + if (template) { + clickHandlers[attr].fire({ + template + }); + return; + } + } + } + }; + + + + var staticMethods = /*#__PURE__*/Object.freeze({ + isValidParameter: isValidParameter, + isUpdatableParameter: isUpdatableParameter, + isDeprecatedParameter: isDeprecatedParameter, + argsToParams: argsToParams, + isVisible: isVisible$1, + clickConfirm: clickConfirm, + clickDeny: clickDeny, + clickCancel: clickCancel, + getContainer: getContainer, + getPopup: getPopup, + getTitle: getTitle, + getHtmlContainer: getHtmlContainer, + getImage: getImage, + getIcon: getIcon, + getInputLabel: getInputLabel, + getCloseButton: getCloseButton, + getActions: getActions, + getConfirmButton: getConfirmButton, + getDenyButton: getDenyButton, + getCancelButton: getCancelButton, + getLoader: getLoader, + getFooter: getFooter, + getTimerProgressBar: getTimerProgressBar, + getFocusableElements: getFocusableElements, + getValidationMessage: getValidationMessage, + isLoading: isLoading, + fire: fire, + mixin: mixin, + showLoading: showLoading, + enableLoading: showLoading, + getTimerLeft: getTimerLeft, + stopTimer: stopTimer, + resumeTimer: resumeTimer, + toggleTimer: toggleTimer, + increaseTimer: increaseTimer, + isTimerRunning: isTimerRunning, + bindClickHandler: bindClickHandler + }); + + let currentInstance; + + class SweetAlert { + constructor() { + // Prevent run in Node env + if (typeof window === 'undefined') { + return; + } + + currentInstance = this; // @ts-ignore + + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + const outerParams = Object.freeze(this.constructor.argsToParams(args)); + Object.defineProperties(this, { + params: { + value: outerParams, + writable: false, + enumerable: true, + configurable: true + } + }); // @ts-ignore + + const promise = this._main(this.params); + + privateProps.promise.set(this, promise); + } + + _main(userParams) { + let mixinParams = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + showWarningsForParams(Object.assign({}, mixinParams, userParams)); + + if (globalState.currentInstance) { + globalState.currentInstance._destroy(); + + if (isModal()) { + unsetAriaHidden(); + } + } + + globalState.currentInstance = this; + const innerParams = prepareParams(userParams, mixinParams); + setParameters(innerParams); + Object.freeze(innerParams); // clear the previous timer + + if (globalState.timeout) { + globalState.timeout.stop(); + delete globalState.timeout; + } // clear the restore focus timeout + + + clearTimeout(globalState.restoreFocusTimeout); + const domCache = populateDomCache(this); + render(this, innerParams); + privateProps.innerParams.set(this, innerParams); + return swalPromise(this, domCache, innerParams); + } // `catch` cannot be the name of a module export, so we define our thenable methods here instead + + + then(onFulfilled) { + const promise = privateProps.promise.get(this); + return promise.then(onFulfilled); + } + + finally(onFinally) { + const promise = privateProps.promise.get(this); + return promise.finally(onFinally); + } + + } + + const swalPromise = (instance, domCache, innerParams) => { + return new Promise((resolve, reject) => { + // functions to handle all closings/dismissals + const dismissWith = dismiss => { + instance.closePopup({ + isDismissed: true, + dismiss + }); + }; + + privateMethods.swalPromiseResolve.set(instance, resolve); + privateMethods.swalPromiseReject.set(instance, reject); + + domCache.confirmButton.onclick = () => handleConfirmButtonClick(instance); + + domCache.denyButton.onclick = () => handleDenyButtonClick(instance); + + domCache.cancelButton.onclick = () => handleCancelButtonClick(instance, dismissWith); + + domCache.closeButton.onclick = () => dismissWith(DismissReason.close); + + handlePopupClick(instance, domCache, dismissWith); + addKeydownHandler(instance, globalState, innerParams, dismissWith); + handleInputOptionsAndValue(instance, innerParams); + openPopup(innerParams); + setupTimer(globalState, innerParams, dismissWith); + initFocus(domCache, innerParams); // Scroll container to top on open (#1247, #1946) + + setTimeout(() => { + domCache.container.scrollTop = 0; + }); + }); + }; + + const prepareParams = (userParams, mixinParams) => { + const templateParams = getTemplateParams(userParams); + const params = Object.assign({}, defaultParams, mixinParams, templateParams, userParams); // precedence is described in #2131 + + params.showClass = Object.assign({}, defaultParams.showClass, params.showClass); + params.hideClass = Object.assign({}, defaultParams.hideClass, params.hideClass); + return params; + }; + + const populateDomCache = instance => { + const domCache = { + popup: getPopup(), + container: getContainer(), + actions: getActions(), + confirmButton: getConfirmButton(), + denyButton: getDenyButton(), + cancelButton: getCancelButton(), + loader: getLoader(), + closeButton: getCloseButton(), + validationMessage: getValidationMessage(), + progressSteps: getProgressSteps() + }; + privateProps.domCache.set(instance, domCache); + return domCache; + }; + + const setupTimer = (globalState$$1, innerParams, dismissWith) => { + const timerProgressBar = getTimerProgressBar(); + hide(timerProgressBar); + + if (innerParams.timer) { + globalState$$1.timeout = new Timer(() => { + dismissWith('timer'); + delete globalState$$1.timeout; + }, innerParams.timer); + + if (innerParams.timerProgressBar) { + show(timerProgressBar); + applyCustomClass(timerProgressBar, innerParams, 'timerProgressBar'); + setTimeout(() => { + if (globalState$$1.timeout && globalState$$1.timeout.running) { + // timer can be already stopped or unset at this point + animateTimerProgressBar(innerParams.timer); + } + }); + } + } + }; + + const initFocus = (domCache, innerParams) => { + if (innerParams.toast) { + return; + } + + if (!callIfFunction(innerParams.allowEnterKey)) { + return blurActiveElement(); + } + + if (!focusButton(domCache, innerParams)) { + setFocus(innerParams, -1, 1); + } + }; + + const focusButton = (domCache, innerParams) => { + if (innerParams.focusDeny && isVisible(domCache.denyButton)) { + domCache.denyButton.focus(); + return true; + } + + if (innerParams.focusCancel && isVisible(domCache.cancelButton)) { + domCache.cancelButton.focus(); + return true; + } + + if (innerParams.focusConfirm && isVisible(domCache.confirmButton)) { + domCache.confirmButton.focus(); + return true; + } + + return false; + }; + + const blurActiveElement = () => { + if (document.activeElement instanceof HTMLElement && typeof document.activeElement.blur === 'function') { + document.activeElement.blur(); + } + }; // Assign instance methods from src/instanceMethods/*.js to prototype + + + Object.assign(SweetAlert.prototype, instanceMethods); // Assign static methods from src/staticMethods/*.js to constructor + + Object.assign(SweetAlert, staticMethods); // Proxy to instance methods to constructor, for now, for backwards compatibility + + Object.keys(instanceMethods).forEach(key => { + SweetAlert[key] = function () { + if (currentInstance) { + return currentInstance[key](...arguments); + } + }; + }); + SweetAlert.DismissReason = DismissReason; + SweetAlert.version = '11.4.8'; + + const Swal = SweetAlert; // @ts-ignore + + Swal.default = Swal; + + return Swal; + +})); +if (typeof this !== 'undefined' && this.Sweetalert2){ this.swal = this.sweetAlert = this.Swal = this.SweetAlert = this.Sweetalert2} + +"undefined"!=typeof document&&function(e,t){var n=e.createElement("style");if(e.getElementsByTagName("head")[0].appendChild(n),n.styleSheet)n.styleSheet.disabled||(n.styleSheet.cssText=t);else try{n.innerHTML=t}catch(e){n.innerText=t}}(document,".swal2-popup.swal2-toast{box-sizing:border-box;grid-column:1/4!important;grid-row:1/4!important;grid-template-columns:1fr 99fr 1fr;padding:1em;overflow-y:hidden;background:#fff;box-shadow:0 0 1px rgba(0,0,0,.075),0 1px 2px rgba(0,0,0,.075),1px 2px 4px rgba(0,0,0,.075),1px 3px 8px rgba(0,0,0,.075),2px 4px 16px rgba(0,0,0,.075);pointer-events:all}.swal2-popup.swal2-toast>*{grid-column:2}.swal2-popup.swal2-toast .swal2-title{margin:.5em 1em;padding:0;font-size:1em;text-align:initial}.swal2-popup.swal2-toast .swal2-loading{justify-content:center}.swal2-popup.swal2-toast .swal2-input{height:2em;margin:.5em;font-size:1em}.swal2-popup.swal2-toast .swal2-validation-message{font-size:1em}.swal2-popup.swal2-toast .swal2-footer{margin:.5em 0 0;padding:.5em 0 0;font-size:.8em}.swal2-popup.swal2-toast .swal2-close{grid-column:3/3;grid-row:1/99;align-self:center;width:.8em;height:.8em;margin:0;font-size:2em}.swal2-popup.swal2-toast .swal2-html-container{margin:.5em 1em;padding:0;font-size:1em;text-align:initial}.swal2-popup.swal2-toast .swal2-html-container:empty{padding:0}.swal2-popup.swal2-toast .swal2-loader{grid-column:1;grid-row:1/99;align-self:center;width:2em;height:2em;margin:.25em}.swal2-popup.swal2-toast .swal2-icon{grid-column:1;grid-row:1/99;align-self:center;width:2em;min-width:2em;height:2em;margin:0 .5em 0 0}.swal2-popup.swal2-toast .swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:1.8em;font-weight:700}.swal2-popup.swal2-toast .swal2-icon.swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line]{top:.875em;width:1.375em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:.3125em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:.3125em}.swal2-popup.swal2-toast .swal2-actions{justify-content:flex-start;height:auto;margin:0;margin-top:.5em;padding:0 .5em}.swal2-popup.swal2-toast .swal2-styled{margin:.25em .5em;padding:.4em .6em;font-size:1em}.swal2-popup.swal2-toast .swal2-success{border-color:#a5dc86}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line]{position:absolute;width:1.6em;height:3em;transform:rotate(45deg);border-radius:50%}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=left]{top:-.8em;left:-.5em;transform:rotate(-45deg);transform-origin:2em 2em;border-radius:4em 0 0 4em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=right]{top:-.25em;left:.9375em;transform-origin:0 1.5em;border-radius:0 4em 4em 0}.swal2-popup.swal2-toast .swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-success .swal2-success-fix{top:0;left:.4375em;width:.4375em;height:2.6875em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line]{height:.3125em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=tip]{top:1.125em;left:.1875em;width:.75em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=long]{top:.9375em;right:.1875em;width:1.375em}.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-tip{-webkit-animation:swal2-toast-animate-success-line-tip .75s;animation:swal2-toast-animate-success-line-tip .75s}.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-long{-webkit-animation:swal2-toast-animate-success-line-long .75s;animation:swal2-toast-animate-success-line-long .75s}.swal2-popup.swal2-toast.swal2-show{-webkit-animation:swal2-toast-show .5s;animation:swal2-toast-show .5s}.swal2-popup.swal2-toast.swal2-hide{-webkit-animation:swal2-toast-hide .1s forwards;animation:swal2-toast-hide .1s forwards}.swal2-container{display:grid;position:fixed;z-index:1060;top:0;right:0;bottom:0;left:0;box-sizing:border-box;grid-template-areas:\"top-start top top-end\" \"center-start center center-end\" \"bottom-start bottom-center bottom-end\";grid-template-rows:minmax(-webkit-min-content,auto) minmax(-webkit-min-content,auto) minmax(-webkit-min-content,auto);grid-template-rows:minmax(min-content,auto) minmax(min-content,auto) minmax(min-content,auto);height:100%;padding:.625em;overflow-x:hidden;transition:background-color .1s;-webkit-overflow-scrolling:touch}.swal2-container.swal2-backdrop-show,.swal2-container.swal2-noanimation{background:rgba(0,0,0,.4)}.swal2-container.swal2-backdrop-hide{background:0 0!important}.swal2-container.swal2-bottom-start,.swal2-container.swal2-center-start,.swal2-container.swal2-top-start{grid-template-columns:minmax(0,1fr) auto auto}.swal2-container.swal2-bottom,.swal2-container.swal2-center,.swal2-container.swal2-top{grid-template-columns:auto minmax(0,1fr) auto}.swal2-container.swal2-bottom-end,.swal2-container.swal2-center-end,.swal2-container.swal2-top-end{grid-template-columns:auto auto minmax(0,1fr)}.swal2-container.swal2-top-start>.swal2-popup{align-self:start}.swal2-container.swal2-top>.swal2-popup{grid-column:2;align-self:start;justify-self:center}.swal2-container.swal2-top-end>.swal2-popup,.swal2-container.swal2-top-right>.swal2-popup{grid-column:3;align-self:start;justify-self:end}.swal2-container.swal2-center-left>.swal2-popup,.swal2-container.swal2-center-start>.swal2-popup{grid-row:2;align-self:center}.swal2-container.swal2-center>.swal2-popup{grid-column:2;grid-row:2;align-self:center;justify-self:center}.swal2-container.swal2-center-end>.swal2-popup,.swal2-container.swal2-center-right>.swal2-popup{grid-column:3;grid-row:2;align-self:center;justify-self:end}.swal2-container.swal2-bottom-left>.swal2-popup,.swal2-container.swal2-bottom-start>.swal2-popup{grid-column:1;grid-row:3;align-self:end}.swal2-container.swal2-bottom>.swal2-popup{grid-column:2;grid-row:3;justify-self:center;align-self:end}.swal2-container.swal2-bottom-end>.swal2-popup,.swal2-container.swal2-bottom-right>.swal2-popup{grid-column:3;grid-row:3;align-self:end;justify-self:end}.swal2-container.swal2-grow-fullscreen>.swal2-popup,.swal2-container.swal2-grow-row>.swal2-popup{grid-column:1/4;width:100%}.swal2-container.swal2-grow-column>.swal2-popup,.swal2-container.swal2-grow-fullscreen>.swal2-popup{grid-row:1/4;align-self:stretch}.swal2-container.swal2-no-transition{transition:none!important}.swal2-popup{display:none;position:relative;box-sizing:border-box;grid-template-columns:minmax(0,100%);width:32em;max-width:100%;padding:0 0 1.25em;border:none;border-radius:5px;background:#fff;color:#545454;font-family:inherit;font-size:1rem}.swal2-popup:focus{outline:0}.swal2-popup.swal2-loading{overflow-y:hidden}.swal2-title{position:relative;max-width:100%;margin:0;padding:.8em 1em 0;color:inherit;font-size:1.875em;font-weight:600;text-align:center;text-transform:none;word-wrap:break-word}.swal2-actions{display:flex;z-index:1;box-sizing:border-box;flex-wrap:wrap;align-items:center;justify-content:center;width:auto;margin:1.25em auto 0;padding:0}.swal2-actions:not(.swal2-loading) .swal2-styled[disabled]{opacity:.4}.swal2-actions:not(.swal2-loading) .swal2-styled:hover{background-image:linear-gradient(rgba(0,0,0,.1),rgba(0,0,0,.1))}.swal2-actions:not(.swal2-loading) .swal2-styled:active{background-image:linear-gradient(rgba(0,0,0,.2),rgba(0,0,0,.2))}.swal2-loader{display:none;align-items:center;justify-content:center;width:2.2em;height:2.2em;margin:0 1.875em;-webkit-animation:swal2-rotate-loading 1.5s linear 0s infinite normal;animation:swal2-rotate-loading 1.5s linear 0s infinite normal;border-width:.25em;border-style:solid;border-radius:100%;border-color:#2778c4 transparent #2778c4 transparent}.swal2-styled{margin:.3125em;padding:.625em 1.1em;transition:box-shadow .1s;box-shadow:0 0 0 3px transparent;font-weight:500}.swal2-styled:not([disabled]){cursor:pointer}.swal2-styled.swal2-confirm{border:0;border-radius:.25em;background:initial;background-color:#7066e0;color:#fff;font-size:1em}.swal2-styled.swal2-confirm:focus{box-shadow:0 0 0 3px rgba(112,102,224,.5)}.swal2-styled.swal2-deny{border:0;border-radius:.25em;background:initial;background-color:#dc3741;color:#fff;font-size:1em}.swal2-styled.swal2-deny:focus{box-shadow:0 0 0 3px rgba(220,55,65,.5)}.swal2-styled.swal2-cancel{border:0;border-radius:.25em;background:initial;background-color:#6e7881;color:#fff;font-size:1em}.swal2-styled.swal2-cancel:focus{box-shadow:0 0 0 3px rgba(110,120,129,.5)}.swal2-styled.swal2-default-outline:focus{box-shadow:0 0 0 3px rgba(100,150,200,.5)}.swal2-styled:focus{outline:0}.swal2-styled::-moz-focus-inner{border:0}.swal2-footer{justify-content:center;margin:1em 0 0;padding:1em 1em 0;border-top:1px solid #eee;color:inherit;font-size:1em}.swal2-timer-progress-bar-container{position:absolute;right:0;bottom:0;left:0;grid-column:auto!important;overflow:hidden;border-bottom-right-radius:5px;border-bottom-left-radius:5px}.swal2-timer-progress-bar{width:100%;height:.25em;background:rgba(0,0,0,.2)}.swal2-image{max-width:100%;margin:2em auto 1em}.swal2-close{z-index:2;align-items:center;justify-content:center;width:1.2em;height:1.2em;margin-top:0;margin-right:0;margin-bottom:-1.2em;padding:0;overflow:hidden;transition:color .1s,box-shadow .1s;border:none;border-radius:5px;background:0 0;color:#ccc;font-family:serif;font-family:monospace;font-size:2.5em;cursor:pointer;justify-self:end}.swal2-close:hover{transform:none;background:0 0;color:#f27474}.swal2-close:focus{outline:0;box-shadow:inset 0 0 0 3px rgba(100,150,200,.5)}.swal2-close::-moz-focus-inner{border:0}.swal2-html-container{z-index:1;justify-content:center;margin:1em 1.6em .3em;padding:0;overflow:auto;color:inherit;font-size:1.125em;font-weight:400;line-height:normal;text-align:center;word-wrap:break-word;word-break:break-word}.swal2-checkbox,.swal2-file,.swal2-input,.swal2-radio,.swal2-select,.swal2-textarea{margin:1em 2em 3px}.swal2-file,.swal2-input,.swal2-textarea{box-sizing:border-box;width:auto;transition:border-color .1s,box-shadow .1s;border:1px solid #d9d9d9;border-radius:.1875em;background:inherit;box-shadow:inset 0 1px 1px rgba(0,0,0,.06),0 0 0 3px transparent;color:inherit;font-size:1.125em}.swal2-file.swal2-inputerror,.swal2-input.swal2-inputerror,.swal2-textarea.swal2-inputerror{border-color:#f27474!important;box-shadow:0 0 2px #f27474!important}.swal2-file:focus,.swal2-input:focus,.swal2-textarea:focus{border:1px solid #b4dbed;outline:0;box-shadow:inset 0 1px 1px rgba(0,0,0,.06),0 0 0 3px rgba(100,150,200,.5)}.swal2-file::-moz-placeholder,.swal2-input::-moz-placeholder,.swal2-textarea::-moz-placeholder{color:#ccc}.swal2-file:-ms-input-placeholder,.swal2-input:-ms-input-placeholder,.swal2-textarea:-ms-input-placeholder{color:#ccc}.swal2-file::placeholder,.swal2-input::placeholder,.swal2-textarea::placeholder{color:#ccc}.swal2-range{margin:1em 2em 3px;background:#fff}.swal2-range input{width:80%}.swal2-range output{width:20%;color:inherit;font-weight:600;text-align:center}.swal2-range input,.swal2-range output{height:2.625em;padding:0;font-size:1.125em;line-height:2.625em}.swal2-input{height:2.625em;padding:0 .75em}.swal2-file{width:75%;margin-right:auto;margin-left:auto;background:inherit;font-size:1.125em}.swal2-textarea{height:6.75em;padding:.75em}.swal2-select{min-width:50%;max-width:100%;padding:.375em .625em;background:inherit;color:inherit;font-size:1.125em}.swal2-checkbox,.swal2-radio{align-items:center;justify-content:center;background:#fff;color:inherit}.swal2-checkbox label,.swal2-radio label{margin:0 .6em;font-size:1.125em}.swal2-checkbox input,.swal2-radio input{flex-shrink:0;margin:0 .4em}.swal2-input-label{display:flex;justify-content:center;margin:1em auto 0}.swal2-validation-message{align-items:center;justify-content:center;margin:1em 0 0;padding:.625em;overflow:hidden;background:#f0f0f0;color:#666;font-size:1em;font-weight:300}.swal2-validation-message::before{content:\"!\";display:inline-block;width:1.5em;min-width:1.5em;height:1.5em;margin:0 .625em;border-radius:50%;background-color:#f27474;color:#fff;font-weight:600;line-height:1.5em;text-align:center}.swal2-icon{position:relative;box-sizing:content-box;justify-content:center;width:5em;height:5em;margin:2.5em auto .6em;border:.25em solid transparent;border-radius:50%;border-color:#000;font-family:inherit;line-height:5em;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:3.75em}.swal2-icon.swal2-error{border-color:#f27474;color:#f27474}.swal2-icon.swal2-error .swal2-x-mark{position:relative;flex-grow:1}.swal2-icon.swal2-error [class^=swal2-x-mark-line]{display:block;position:absolute;top:2.3125em;width:2.9375em;height:.3125em;border-radius:.125em;background-color:#f27474}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:1.0625em;transform:rotate(45deg)}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:1em;transform:rotate(-45deg)}.swal2-icon.swal2-error.swal2-icon-show{-webkit-animation:swal2-animate-error-icon .5s;animation:swal2-animate-error-icon .5s}.swal2-icon.swal2-error.swal2-icon-show .swal2-x-mark{-webkit-animation:swal2-animate-error-x-mark .5s;animation:swal2-animate-error-x-mark .5s}.swal2-icon.swal2-warning{border-color:#facea8;color:#f8bb86}.swal2-icon.swal2-warning.swal2-icon-show{-webkit-animation:swal2-animate-error-icon .5s;animation:swal2-animate-error-icon .5s}.swal2-icon.swal2-warning.swal2-icon-show .swal2-icon-content{-webkit-animation:swal2-animate-i-mark .5s;animation:swal2-animate-i-mark .5s}.swal2-icon.swal2-info{border-color:#9de0f6;color:#3fc3ee}.swal2-icon.swal2-info.swal2-icon-show{-webkit-animation:swal2-animate-error-icon .5s;animation:swal2-animate-error-icon .5s}.swal2-icon.swal2-info.swal2-icon-show .swal2-icon-content{-webkit-animation:swal2-animate-i-mark .8s;animation:swal2-animate-i-mark .8s}.swal2-icon.swal2-question{border-color:#c9dae1;color:#87adbd}.swal2-icon.swal2-question.swal2-icon-show{-webkit-animation:swal2-animate-error-icon .5s;animation:swal2-animate-error-icon .5s}.swal2-icon.swal2-question.swal2-icon-show .swal2-icon-content{-webkit-animation:swal2-animate-question-mark .8s;animation:swal2-animate-question-mark .8s}.swal2-icon.swal2-success{border-color:#a5dc86;color:#a5dc86}.swal2-icon.swal2-success [class^=swal2-success-circular-line]{position:absolute;width:3.75em;height:7.5em;transform:rotate(45deg);border-radius:50%}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=left]{top:-.4375em;left:-2.0635em;transform:rotate(-45deg);transform-origin:3.75em 3.75em;border-radius:7.5em 0 0 7.5em}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=right]{top:-.6875em;left:1.875em;transform:rotate(-45deg);transform-origin:0 3.75em;border-radius:0 7.5em 7.5em 0}.swal2-icon.swal2-success .swal2-success-ring{position:absolute;z-index:2;top:-.25em;left:-.25em;box-sizing:content-box;width:100%;height:100%;border:.25em solid rgba(165,220,134,.3);border-radius:50%}.swal2-icon.swal2-success .swal2-success-fix{position:absolute;z-index:1;top:.5em;left:1.625em;width:.4375em;height:5.625em;transform:rotate(-45deg)}.swal2-icon.swal2-success [class^=swal2-success-line]{display:block;position:absolute;z-index:2;height:.3125em;border-radius:.125em;background-color:#a5dc86}.swal2-icon.swal2-success [class^=swal2-success-line][class$=tip]{top:2.875em;left:.8125em;width:1.5625em;transform:rotate(45deg)}.swal2-icon.swal2-success [class^=swal2-success-line][class$=long]{top:2.375em;right:.5em;width:2.9375em;transform:rotate(-45deg)}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-tip{-webkit-animation:swal2-animate-success-line-tip .75s;animation:swal2-animate-success-line-tip .75s}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-long{-webkit-animation:swal2-animate-success-line-long .75s;animation:swal2-animate-success-line-long .75s}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-circular-line-right{-webkit-animation:swal2-rotate-success-circular-line 4.25s ease-in;animation:swal2-rotate-success-circular-line 4.25s ease-in}.swal2-progress-steps{flex-wrap:wrap;align-items:center;max-width:100%;margin:1.25em auto;padding:0;background:inherit;font-weight:600}.swal2-progress-steps li{display:inline-block;position:relative}.swal2-progress-steps .swal2-progress-step{z-index:20;flex-shrink:0;width:2em;height:2em;border-radius:2em;background:#2778c4;color:#fff;line-height:2em;text-align:center}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step{background:#2778c4}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step{background:#add8e6;color:#fff}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step-line{background:#add8e6}.swal2-progress-steps .swal2-progress-step-line{z-index:10;flex-shrink:0;width:2.5em;height:.4em;margin:0 -1px;background:#2778c4}[class^=swal2]{-webkit-tap-highlight-color:transparent}.swal2-show{-webkit-animation:swal2-show .3s;animation:swal2-show .3s}.swal2-hide{-webkit-animation:swal2-hide .15s forwards;animation:swal2-hide .15s forwards}.swal2-noanimation{transition:none}.swal2-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}.swal2-rtl .swal2-close{margin-right:initial;margin-left:0}.swal2-rtl .swal2-timer-progress-bar{right:0;left:auto}@-webkit-keyframes swal2-toast-show{0%{transform:translateY(-.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0)}}@keyframes swal2-toast-show{0%{transform:translateY(-.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0)}}@-webkit-keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@-webkit-keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@-webkit-keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}@keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}@-webkit-keyframes swal2-show{0%{transform:scale(.7)}45%{transform:scale(1.05)}80%{transform:scale(.95)}100%{transform:scale(1)}}@keyframes swal2-show{0%{transform:scale(.7)}45%{transform:scale(1.05)}80%{transform:scale(.95)}100%{transform:scale(1)}}@-webkit-keyframes swal2-hide{0%{transform:scale(1);opacity:1}100%{transform:scale(.5);opacity:0}}@keyframes swal2-hide{0%{transform:scale(1);opacity:1}100%{transform:scale(.5);opacity:0}}@-webkit-keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.8125em;width:1.5625em}}@keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.8125em;width:1.5625em}}@-webkit-keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@-webkit-keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@-webkit-keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(.4);opacity:0}50%{margin-top:1.625em;transform:scale(.4);opacity:0}80%{margin-top:-.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(.4);opacity:0}50%{margin-top:1.625em;transform:scale(.4);opacity:0}80%{margin-top:-.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@-webkit-keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0);opacity:1}}@keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0);opacity:1}}@-webkit-keyframes swal2-rotate-loading{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@keyframes swal2-rotate-loading{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@-webkit-keyframes swal2-animate-question-mark{0%{transform:rotateY(-360deg)}100%{transform:rotateY(0)}}@keyframes swal2-animate-question-mark{0%{transform:rotateY(-360deg)}100%{transform:rotateY(0)}}@-webkit-keyframes swal2-animate-i-mark{0%{transform:rotateZ(45deg);opacity:0}25%{transform:rotateZ(-25deg);opacity:.4}50%{transform:rotateZ(15deg);opacity:.8}75%{transform:rotateZ(-5deg);opacity:1}100%{transform:rotateX(0);opacity:1}}@keyframes swal2-animate-i-mark{0%{transform:rotateZ(45deg);opacity:0}25%{transform:rotateZ(-25deg);opacity:.4}50%{transform:rotateZ(15deg);opacity:.8}75%{transform:rotateZ(-5deg);opacity:1}100%{transform:rotateX(0);opacity:1}}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow:hidden}body.swal2-height-auto{height:auto!important}body.swal2-no-backdrop .swal2-container{background-color:transparent!important;pointer-events:none}body.swal2-no-backdrop .swal2-container .swal2-popup{pointer-events:all}body.swal2-no-backdrop .swal2-container .swal2-modal{box-shadow:0 0 10px rgba(0,0,0,.4)}@media print{body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow-y:scroll!important}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown)>[aria-hidden=true]{display:none}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) .swal2-container{position:static!important}}body.swal2-toast-shown .swal2-container{box-sizing:border-box;width:360px;max-width:100%;background-color:transparent;pointer-events:none}body.swal2-toast-shown .swal2-container.swal2-top{top:0;right:auto;bottom:auto;left:50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-top-end,body.swal2-toast-shown .swal2-container.swal2-top-right{top:0;right:0;bottom:auto;left:auto}body.swal2-toast-shown .swal2-container.swal2-top-left,body.swal2-toast-shown .swal2-container.swal2-top-start{top:0;right:auto;bottom:auto;left:0}body.swal2-toast-shown .swal2-container.swal2-center-left,body.swal2-toast-shown .swal2-container.swal2-center-start{top:50%;right:auto;bottom:auto;left:0;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-center{top:50%;right:auto;bottom:auto;left:50%;transform:translate(-50%,-50%)}body.swal2-toast-shown .swal2-container.swal2-center-end,body.swal2-toast-shown .swal2-container.swal2-center-right{top:50%;right:0;bottom:auto;left:auto;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-left,body.swal2-toast-shown .swal2-container.swal2-bottom-start{top:auto;right:auto;bottom:0;left:0}body.swal2-toast-shown .swal2-container.swal2-bottom{top:auto;right:auto;bottom:0;left:50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-end,body.swal2-toast-shown .swal2-container.swal2-bottom-right{top:auto;right:0;bottom:0;left:auto}"); \ No newline at end of file diff --git a/assets/template/role-template.css b/assets/template/role-template.css new file mode 100644 index 0000000..3254de6 --- /dev/null +++ b/assets/template/role-template.css @@ -0,0 +1,200 @@ +/** + * + * @author: NewfieSoft + * @Plugin name: My Style Anytime + * @URL: https://newfiesoft.com/wp-plugins/my-style-anytime/ + * + * + * This is the style for roles {$name} + * + * @Roles: {$name} + * + */ + +/* To import visitor style in this user @Roles type +@import "visitor-style.css"; + */ + +/*#########################################################################*/ + + +/*=== Back Styles ===*/ + +#wpadminbar { + background-color: #105d9c !important; +} + + +/*#########################################################################*/ + + +/*=== Front Styles ===*/ + + +/*#########################################################################*/ + +/*=== Start Responsive configurations for this roles user type ===*/ + +/*=| ##### Desktop screen resolution ##### |=*/ + +@media only screen and (max-width: 2560px) { + + +} + +/* End media max-width: 2560px */ + + +@media only screen and (max-width: 1920px) { + + +} + +/* End media max-width: 1920px */ + + +@media only screen and (max-width: 1600px) { + + +} + +/* End media max-width: 1600px */ + + +@media only screen and (max-width: 1536px) { + + +} + +/* End media max-width: 1536px */ + + +@media only screen and (max-width: 1440px) { + + +} + +/* End media max-width: 1440px */ + + +@media only screen and (max-width: 1366px) { + + +} + +/* End media max-width: 1366px */ + + +@media only screen and (max-width: 1280px) { + + +} + +/* End media max-width: 1280px */ + + +@media only screen and (max-width: 1080px) { + + +} + +/* End media max-width: 1080px */ + + +/*=| ##### Tablet screen resolution ##### |=*/ + + +@media only screen and (max-width: 962px) { + + +} + +/* End media max-width: 962px */ + + +@media screen and (max-width: 820px) { + + +} + +/* End media max-width: 820px */ + + +@media only screen and (max-width: 810px) { + + +} + +/* End media max-width: 810px */ + + +@media only screen and (max-width: 800px) { + + +} + +/* End media max-width: 800px */ + + +@media only screen and (max-width: 768px) { + + +} + +/* End media max-width: 768px */ + + +@media only screen and (max-width: 601px) { + + +} + +/* End media max-width: 601px */ + + +/*=| ##### Mobile screen resolution ##### |=*/ + + +@media only screen and (max-width: 414px) { + + +} + +/* End media max-width: 414px */ + + +@media only screen and (max-width: 412px) { + + +} + +/* End media max-width: 412px */ + + +@media only screen and (max-width: 393px) { + + +} + +/* End media max-width: 393px */ + + +@media only screen and (max-width: 390px) { + + +} + +/* End media max-width: 390px */ + + +@media only screen and (max-width: 360px) { + + +} + +/* End media max-width: 390px */ + + +/*=== End Responsive configurations for this roles user type ===*/ + +/*#########################################################################*/ \ No newline at end of file diff --git a/assets/template/visitor-template.css b/assets/template/visitor-template.css new file mode 100644 index 0000000..7e50699 --- /dev/null +++ b/assets/template/visitor-template.css @@ -0,0 +1,252 @@ +/** + * + * @author: NewfieSoft + * @Plugin name: My Style Anytime + * @URL: https://newfiesoft.com/wp-plugins/my-style-anytime/ + * + * + * This is the style for roles {$name} + * + * @Roles: {$name} + * + */ + + +/*#########################################################################*/ + + +/*=== Back Styles ===*/ + + +/*#########################################################################*/ + + +/*=== Front Styles ===*/ + +/* Standard WordPress User roles style example */ + +.hello-administrator { + display: none; +} + +.hello-editor { + display: none; +} + +.hello-author { + display: none; +} + +.hello-contributor { + display: none; +} + +.hello-subscriber { + display: none; +} + +.hello-visitor { + text-align: center; + font-size: 36px; + color: green; +} + +/* WooCommerce User roles style example */ + +.hello-shop-manager { + display: none; +} + +.hello-customer { + display: none; +} + +/* Loco Translate User roles style example */ + +.hello-translator { + display: none; +} + +/* Yoast SEO User roles style example */ + +.hello-seo-manager { + display: none; +} + +.hello-seo-editor { + display: none; +} + +/* YITH Affiliates User roles style example */ + +.hello-affiliates { + display: none; +} + +/*#########################################################################*/ + +/*=== Start Responsive configurations for this roles user type ===*/ + +/*=| ##### Desktop screen resolution ##### |=*/ + +@media only screen and (max-width: 2560px) { + + +} + +/* End media max-width: 2560px */ + + +@media only screen and (max-width: 1920px) { + + +} + +/* End media max-width: 1920px */ + + +@media only screen and (max-width: 1600px) { + + +} + +/* End media max-width: 1600px */ + + +@media only screen and (max-width: 1536px) { + + +} + +/* End media max-width: 1536px */ + + +@media only screen and (max-width: 1440px) { + + +} + +/* End media max-width: 1440px */ + + +@media only screen and (max-width: 1366px) { + + +} + +/* End media max-width: 1366px */ + + +@media only screen and (max-width: 1280px) { + + +} + +/* End media max-width: 1280px */ + + +@media only screen and (max-width: 1080px) { + + +} + +/* End media max-width: 1080px */ + + +/*=| ##### Tablet screen resolution ##### |=*/ + + +@media only screen and (max-width: 962px) { + + +} + +/* End media max-width: 962px */ + + +@media screen and (max-width: 820px) { + + +} + +/* End media max-width: 820px */ + + +@media only screen and (max-width: 810px) { + + +} + +/* End media max-width: 810px */ + + +@media only screen and (max-width: 800px) { + + +} + +/* End media max-width: 800px */ + + +@media only screen and (max-width: 768px) { + + +} + +/* End media max-width: 768px */ + + +@media only screen and (max-width: 601px) { + + +} + +/* End media max-width: 601px */ + + +/*=| ##### Mobile screen resolution ##### |=*/ + + +@media only screen and (max-width: 414px) { + + +} + +/* End media max-width: 414px */ + + +@media only screen and (max-width: 412px) { + + +} + +/* End media max-width: 412px */ + + +@media only screen and (max-width: 393px) { + + +} + +/* End media max-width: 393px */ + + +@media only screen and (max-width: 390px) { + + +} + +/* End media max-width: 390px */ + + +@media only screen and (max-width: 360px) { + + +} + +/* End media max-width: 390px */ + + +/*=== End Responsive configurations for this roles user type ===*/ + +/*#########################################################################*/ \ No newline at end of file diff --git a/includes/back/back_functions.php b/includes/back/back_functions.php new file mode 100644 index 0000000..6fe2ab1 --- /dev/null +++ b/includes/back/back_functions.php @@ -0,0 +1,121 @@ +roles; + + // Get plugin dir URL + $plugin_dir_url = my_style_anytime_directory_url(); + + // Get plugin data + $plugin_plugin_data = my_style_anytime_plugin_data(); + + foreach ($roles as $role) { + if (in_array($role, $roles, true)) { + + // Replace underscores with hyphens in the role name + $role_slug = str_replace('_', '-', $role); + + wp_enqueue_style('mysat-' . $role_slug . '-styles', $plugin_dir_url . 'styles/' . $role_slug . '-style.css', array(), esc_html($plugin_plugin_data['Version']) ); + } + } + } +} + +add_action('admin_enqueue_scripts', 'mysat_back_get_current_user_roles_style'); + + +//// Generate css file for the user roles type who does not have or user roles are new inside wp_user_roles +function mysat_back_get_generate_css_file($role_slug, $role_name): void { + + // Your file generation logic here + $plugin_dir_path = my_style_anytime_plugin_dir_path(); + $template_directory = $plugin_dir_path . '/assets/template/'; + $styles_directory = $plugin_dir_path . '/styles/'; + + // Initialize the WordPress filesystem + WP_Filesystem(); + + global $wp_filesystem; + + // Check if the filesystem is initialized successfully + if ($wp_filesystem) { + // Make sure the directory exists, if not, create it + if (!$wp_filesystem->is_dir($styles_directory) && !$wp_filesystem->mkdir($styles_directory, 0755)) { + throw new RuntimeException(sprintf('Directory "%s" was not created', esc_html($styles_directory))); + } + + // Construct the file path for the template user role style + $template_file_path_role = $template_directory . 'role-template.css'; + + // Construct the file path for the template visitor style + $template_file_path_visitor = $template_directory . 'visitor-template.css'; + + // Construct the file path for the generated CSS file + $full_css_file_path = $styles_directory . $role_slug . '-style.css'; + + // Get the content of the template file for role style + $template_content_role = $wp_filesystem->get_contents($template_file_path_role); + + // Get the content of the template file for visitor style + $template_content_visitor = $wp_filesystem->get_contents($template_file_path_visitor); + + // Special case for the visitor-style.css + if ($role_slug === 'visitor') { + // Replace both occurrences directly for visitors + $template_content_visitor = str_replace( array( + 'This is the style for roles {$name}', + '@Roles: {$name}' + ), array( 'This is the style for roles Visitor', '@Roles: Visitor' ), $template_content_visitor ); + + // Write content to the file for visitor style + $wp_filesystem->put_contents($full_css_file_path, $template_content_visitor, FS_CHMOD_FILE); + } else { + // Replace {$name} with $role_name in the template content for role style + $template_content_role = str_replace('{$name}', $role_name, $template_content_role); + + // Write content to the file for role style + $wp_filesystem->put_contents($full_css_file_path, $template_content_role, FS_CHMOD_FILE); + } + } +} + + +//// This handles the generation css process in the background +function mysat_back_get_handle_file_generation(): void { + + global $wp_roles; + + if (isset($_GET['generate_file'], $_GET['_wpnonce']) && wp_verify_nonce($_GET['_wpnonce'], 'generate_file_nonce')) { + + // Handle file generation logic here + $role_slug = sanitize_text_field($_GET['generate_file']); + + // Get the role name from the $wp_roles global + $roles = $wp_roles->roles; + $role_name = $roles[ $role_slug ]['name'] ?? ''; + + // Call the function + mysat_back_get_generate_css_file($role_slug, $role_name); + + // Redirect back to the original page + wp_safe_redirect(admin_url('admin.php?page=mysat_editor_page')); + exit(); + } +} + +add_action('admin_init', 'mysat_back_get_handle_file_generation'); + + diff --git a/includes/back/back_style_and_script.php b/includes/back/back_style_and_script.php new file mode 100644 index 0000000..5e0b085 --- /dev/null +++ b/includes/back/back_style_and_script.php @@ -0,0 +1,69 @@ + admin_url('admin-ajax.php'), + 'security' => wp_verify_nonce('mysat_nonce_action'), + )); + } +} + +add_action('admin_enqueue_scripts', 'mysat_plugin_code_editor_page_script'); \ No newline at end of file diff --git a/includes/front/front_functions.php b/includes/front/front_functions.php new file mode 100644 index 0000000..157c61d --- /dev/null +++ b/includes/front/front_functions.php @@ -0,0 +1,58 @@ +roles; + + // Get plugin dir URL + $plugin_dir_url = my_style_anytime_directory_url(); + + // Get plugin data + $plugin_plugin_data = my_style_anytime_plugin_data(); + + foreach ($roles as $role) { + if (in_array($role, $roles, true)) { + // Replace underscores with hyphens in the role name + $role_slug = str_replace('_', '-', $role); + + wp_enqueue_style('mysat-' . $role_slug . '-styles', $plugin_dir_url . 'styles/' . $role_slug . '-style.css', array(), esc_html($plugin_plugin_data['Version']) ); + } + } + } +} + +add_action('wp_enqueue_scripts', 'mysat_front_get_current_user_roles_style'); + + +//// If there are no user roles to detect, use this to show the visitor CSS file +function mysat_get_visitor_style(): void { + + // Get plugin dir URL + $plugin_dir_url = my_style_anytime_directory_url(); + + // Get plugin data + $plugin_plugin_data = my_style_anytime_plugin_data(); + + global $current_user; + + wp_get_current_user(); + + if ($current_user->ID === 0) { + wp_enqueue_style('mysat-visitor-styles', $plugin_dir_url . 'styles/visitor-style.css', array(), esc_html($plugin_plugin_data['Version']) ); + } +} + +add_action('wp_enqueue_scripts', 'mysat_get_visitor_style'); + diff --git a/includes/functions_customization.php b/includes/functions_customization.php new file mode 100644 index 0000000..801e5a7 --- /dev/null +++ b/includes/functions_customization.php @@ -0,0 +1,54 @@ + +add_filter('admin_title', static function($title) {return mysat_remove_wp_title($title);}); diff --git a/includes/functions_security.php b/includes/functions_security.php new file mode 100644 index 0000000..23641c2 --- /dev/null +++ b/includes/functions_security.php @@ -0,0 +1,18 @@ + 1;\n" +"X-Generator: Loco https://localise.biz/\n" +"X-Loco-Version: 2.6.6; wp-6.4.2" + +#: pages/backup.php:340 +msgid "After deleting you are not able to revert this file!" +msgstr "Après la suppression, vous ne pouvez pas restaurer ce fichier !" + +#: pages/customization.php:60 pages/security.php:60 pages/settings.php:60 +msgid "Are you sure you want to save changes?" +msgstr "Êtes-vous sûr de vouloir enregistrer les modifications ?" + +#: pages/backup.php:339 +msgid "Are you sure?" +msgstr "Es-tu sûr?" + +#: pages/general.php:33 +msgid "" +"As you read before installing and activating this plugin with him, you can " +"create a custom CSS view using user roles." +msgstr "" +"Comme vous l'avez lu avant d'installer et d'activer ce plugin avec lui, vous " +"pouvez créer une vue CSS personnalisée à l'aide des rôles d'utilisateur." + +#: my-style-anytime.php:163 +msgid "Backup" +msgstr "Sauvegarde" + +#: pages/backup.php:280 +msgid "Backup / Restore" +msgstr "Sauvegarde / Restaurer" + +#: pages/backup.php:288 +msgid "Backup Styles" +msgstr "Styles de sauvegarde" + +#: pages/backup.php:40 +msgid "Backup Successful" +msgstr "Sauvegarde réussie" + +#: pages/backup.php:346 pages/customization.php:66 pages/security.php:66 +#: pages/settings.php:66 +msgid "Cancel" +msgstr "Annuler" + +#: pages/editor.php:100 +msgid "Code Editor" +msgstr "Éditeur de code" + +#: my-style-anytime.php:248 +msgid "Community Support" +msgstr "Soutien communautaire" + +#: my-style-anytime.php:136 pages/customization.php:39 +msgid "Customization" +msgstr "Personnalisation" + +#. Description of the plugin +msgid "" +"Customize public frontend or admin backend wp-admin with responsive using " +"the same CSS stylesheets file based on user roles type" +msgstr "" +"Personnalisez le frontend public ou le backend administrateur wp-admin avec " +"responsive en utilisant le même fichier de feuilles de style CSS en fonction " +"du type de rôles utilisateur" + +#: pages/backup.php:320 +msgid "Delete" +msgstr "Supprimer" + +#: pages/backup.php:106 +msgid "Delete Failed" +msgstr "Échec de la suppression" + +#: pages/backup.php:94 +msgid "Delete Successful" +msgstr "Suppression réussie" + +#: pages/settings.php:18 +msgid "Disable Gutenberg Editor" +msgstr "Désactiver l'éditeur Gutenberg" + +#: pages/general.php:51 +msgid "donation" +msgstr "don" + +#: pages/general.php:55 +msgid "Enjoy your work" +msgstr "Prenez du plaisir à votre travail" + +#: pages/editor.php:321 +msgid "Error" +msgstr "Erreur" + +#: pages/editor.php:322 +msgid "Error updating file: " +msgstr "Erreur de mise à jour du fichier: " + +#: pages/backup.php:48 +msgid "Failed to create a backup." +msgstr "Échec de la création d'une sauvegarde." + +#: pages/backup.php:107 +msgid "Failed to delete backup file." +msgstr "Échec de la suppression du fichier de sauvegarde." + +#: pages/backup.php:73 +msgid "Failed to restore styles." +msgstr "Échec de la restauration des styles." + +#: my-style-anytime.php:249 pages/general.php:45 +msgid "FAQ" +msgstr "FAQ" + +#: pages/general.php:44 +msgid "For help, you have our " +msgstr "Pour vous aider, vous avez notre" + +#: pages/customization.php:88 +msgid "" +"From the website title displayed in a browser tab and dashboard, and wp-" +"login.php for enhanced branding and security." +msgstr "" +"À partir du titre du site Web affiché dans un onglet et un tableau de bord " +"du navigateur, ainsi que wp-login.php pour une image de marque et une " +"sécurité améliorées." + +#: my-style-anytime.php:118 my-style-anytime.php:219 +msgid "General" +msgstr "Générale" + +#: pages/editor.php:146 +msgid "Generate CSS File for" +msgstr "Générer un fichier CSS pour" + +#: pages/editor.php:169 +msgid "Generate Visitor CSS File" +msgstr "Générer un fichier CSS de visiteur" + +#: pages/backup.php:282 +msgid "" +"Here you can create a backup anytime for all styles that you create and " +"restore, all archive files have been storage inside" +msgstr "" +"Ici, vous pouvez créer une sauvegarde à tout moment pour tous les styles que " +"vous créez et restaurez, tous les fichiers d'archive ont été stockés à " +"l'intérieur." + +#: pages/general.php:31 +msgid "Hi," +msgstr "Salut," + +#. URI of the plugin +msgid "https://newfiesoft.com/wp-plugins/my-style-anytime/" +msgstr "https://newfiesoft.com/wp-plugins/my-style-anytime/" + +#. Author URI of the plugin +msgid "https://www.newfiesoft.com" +msgstr "https://www.newfiesoft.com" + +#: pages/general.php:34 +msgid "" +"If you like this plugin it would be nice from your side to give us your " +"rating and feedback." +msgstr "" +"Si vous aimez ce plugin, ce serait bien de votre part de nous donner votre " +"note et vos commentaires." + +#. FontAwesome heart icon +#: my-style-anytime.php:315 +msgid "in Zürich, Switzerland" +msgstr "à Zurich, Suisse" + +#: pages/backup.php:302 +msgid "List Backup zip files" +msgstr "Liste des fichiers zip de sauvegarde" + +#: my-style-anytime.php:127 +msgid "Manage Style" +msgstr "Gérer le style" + +#. Name of the plugin +#: my-style-anytime.php:107 +msgid "My Style Anytime" +msgstr "My Style Anytime" + +#. Author of the plugin +msgid "NewfieSoft" +msgstr "NewfieSoft" + +#: pages/backup.php:42 pages/backup.php:66 pages/backup.php:74 +#: pages/backup.php:96 pages/backup.php:108 pages/editor.php:310 +#: pages/editor.php:323 +msgid "OK" +msgstr "Bien" + +#: pages/general.php:46 +msgid "part, or if that does not help you can write your question in the" +msgstr "" +"partie, ou si cela ne vous aide pas, vous pouvez écrire votre question dans " +"le" + +#: my-style-anytime.php:311 +msgid "Premium Tools for WordPress made by" +msgstr "Outils Premium pour WordPress créés par" + +#: my-style-anytime.php:250 +msgid "Ratings" +msgstr "Notes" + +#: pages/security.php:18 +msgid "Remove meta generator" +msgstr "Supprimer le méta-générateur" + +#: pages/customization.php:18 +msgid "Remove WordPress from the title" +msgstr "Supprimer WordPress du titre" + +#: pages/security.php:88 +msgid "" +"Removing the meta generator, helps you to hide the version of WordPress that " +"you are using from potential attackers." +msgstr "" +"La suppression du méta-générateur vous aide à masquer la version de " +"WordPress que vous utilisez des attaquants potentiels." + +#: pages/backup.php:72 +msgid "Restore Failed" +msgstr "Échec de la restauration" + +#: pages/backup.php:313 +msgid "Restore Styles" +msgstr "Restaurer les styles" + +#: pages/backup.php:64 +msgid "Restore Successful" +msgstr "Restauration réussie" + +#: pages/customization.php:46 pages/security.php:46 pages/settings.php:46 +msgid "Save" +msgstr "Sauvegarder" + +#: pages/editor.php:196 +msgid "Save Changes" +msgstr "Sauvegarder les modifications" + +#: pages/customization.php:59 pages/security.php:59 pages/settings.php:59 +msgid "Save Changes?" +msgstr "Sauvegarder les modifications?" + +#: my-style-anytime.php:145 pages/security.php:39 +msgid "Security" +msgstr "Sécurité" + +#: pages/editor.php:102 +msgid "" +"Select below the CSS file who want to edit, and after complete just click on " +"the button to submit the change." +msgstr "" +"Sélectionnez ci-dessous le fichier CSS que vous souhaitez modifier, et une " +"fois terminé, cliquez simplement sur le bouton pour soumettre la " +"modification." + +#: my-style-anytime.php:154 pages/settings.php:39 +msgid "Settings" +msgstr "Paramètres" + +#: pages/backup.php:41 +msgid "Styles successfully backed up." +msgstr "Styles sauvegardés avec succès." + +#: pages/backup.php:65 +msgid "Styles successfully restored." +msgstr "Styles restaurés avec succès." + +#: pages/editor.php:308 +msgid "Success" +msgstr "Succès" + +#: pages/general.php:47 +msgid "support sections" +msgstr "rubriques d'assistance" + +#: pages/backup.php:95 +msgid "The backup file was successfully deleted." +msgstr "Le fichier de sauvegarde a été supprimé avec succès." + +#: pages/editor.php:46 +msgid "" +"The CSS file was not found because it does not exist, you can generate it by " +"clicking on the paint roller icon." +msgstr "" +"Le fichier CSS n'a pas été trouvé car il n'existe pas, vous pouvez le " +"générer en cliquant sur l'icône du rouleau à peinture." + +#: pages/editor.php:309 +msgid "The file was updated successfully!" +msgstr "Le fichier a été mis à jour avec succès !" + +#: my-style-anytime.php:321 +msgid "Version" +msgstr "Version" + +#: pages/editor.php:166 pages/editor.php:178 +msgid "Visitor Style" +msgstr "Style du visiteur" + +#: pages/general.php:32 +msgid "We are honored that you decided to use our plugin." +msgstr "Nous sommes honorés que vous ayez décidé d’utiliser notre plugin." + +#: pages/general.php:50 +msgid "" +"We would be very pleased if you supported the advancement of this plugin " +"with your " +msgstr "" +"Nous serions très heureux si vous souteniez l'avancement de ce plugin avec " +"votre" + +#: pages/general.php:29 +msgid "Welcome" +msgstr "Bienvenue" + +#: my-style-anytime.php:313 +msgid "with" +msgstr "avec" + +#: pages/settings.php:88 +msgid "" +"With this, you Disable Gutenberg on your site and back to the classic editor," +" no matter where you are." +msgstr "" +"Avec cela, vous désactivez Gutenberg sur votre site et revenez à l'éditeur " +"classique, où que vous soyez." + +#: pages/customization.php:65 pages/security.php:65 pages/settings.php:65 +msgid "Yes" +msgstr "Oui" + +#: pages/backup.php:345 +msgid "Yes, delete it!" +msgstr "Oui, supprimez-le !" diff --git a/languages/my-style-anytime-hr.mo b/languages/my-style-anytime-hr.mo new file mode 100644 index 0000000..82fd980 Binary files /dev/null and b/languages/my-style-anytime-hr.mo differ diff --git a/languages/my-style-anytime-hr.po b/languages/my-style-anytime-hr.po new file mode 100644 index 0000000..7afd267 --- /dev/null +++ b/languages/my-style-anytime-hr.po @@ -0,0 +1,352 @@ +# Copyright (C) 2023 NewfieSoft +# This file is distributed under the same license as the My Style Anytime plugin. +msgid "" +msgstr "" +"Project-Id-Version: My Style Anytime\n" +"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/my-style-" +"anytime/\n" +"Last-Translator: \n" +"Language-Team: Croatian\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"POT-Creation-Date: 2024-02-21 20:46+0000\n" +"PO-Revision-Date: 2024-02-22 21:34+0000\n" +"X-Domain: my-style-anytime\n" +"Language: hr\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10 >= 2 && " +"n%10<=4 &&(n%100<10||n%100 >= 20)? 1 : 2;\n" +"X-Generator: Loco https://localise.biz/\n" +"X-Loco-Version: 2.6.6; wp-6.4.3" + +#: pages/backup.php:340 +msgid "After deleting you are not able to revert this file!" +msgstr "Nakon brisanja ne možete vratiti ovu datoteku!" + +#: pages/customization.php:60 pages/security.php:60 pages/settings.php:60 +msgid "Are you sure you want to save changes?" +msgstr "Jeste li sigurni da želite spremiti promjene?" + +#: pages/backup.php:339 +msgid "Are you sure?" +msgstr "Jesi li siguran?" + +#: pages/general.php:33 +msgid "" +"As you read before installing and activating this plugin with him, you can " +"create a custom CSS view using user roles." +msgstr "" +"Kao što ste pročitali prije instaliranja i aktivacije ovog dodatka s njim, " +"možete stvoriti prilagođeni CSS prikaz pomoću korisničkih uloga." + +#: my-style-anytime.php:163 +msgid "Backup" +msgstr "Sigurnosna kopija" + +#: pages/backup.php:280 +msgid "Backup / Restore" +msgstr "Sigurnosno kopiranje / vraćanje" + +#: pages/backup.php:288 +msgid "Backup Styles" +msgstr "Sigurnosni stilovi" + +#: pages/backup.php:40 +msgid "Backup Successful" +msgstr "Sigurnosno kopiranje uspješno" + +#: pages/backup.php:346 pages/customization.php:66 pages/security.php:66 +#: pages/settings.php:66 +msgid "Cancel" +msgstr "Otkažati" + +#: pages/editor.php:100 +msgid "Code Editor" +msgstr "Uređivač koda" + +#: my-style-anytime.php:248 +msgid "Community Support" +msgstr "Podrška zajednice" + +#: my-style-anytime.php:136 pages/customization.php:39 +msgid "Customization" +msgstr "Prilagodba" + +#. Description of the plugin +msgid "" +"Customize public frontend or admin backend wp-admin with responsive using " +"the same CSS stylesheets file based on user roles type" +msgstr "" +"Prilagodite javno sučelje ili administratorsku pozadinu wp-admin s " +"odgovarajućim korištenjem iste CSS datoteke stilova na temelju vrste " +"korisničkih uloga" + +#: pages/backup.php:320 +msgid "Delete" +msgstr "Izbrisati" + +#: pages/backup.php:106 +msgid "Delete Failed" +msgstr "Brisanje nije uspjelo" + +#: pages/backup.php:94 +msgid "Delete Successful" +msgstr "Uspješno brisanje" + +#: pages/settings.php:18 +msgid "Disable Gutenberg Editor" +msgstr "Onemogući Gutenberg Editor" + +#: pages/general.php:51 +msgid "donation" +msgstr "donacija" + +#: pages/general.php:55 +msgid "Enjoy your work" +msgstr "Uživajte u svom radu" + +#: pages/editor.php:321 +msgid "Error" +msgstr "Greška" + +#: pages/editor.php:322 +msgid "Error updating file: " +msgstr "Pogreška pri ažuriranju datoteke: " + +#: pages/backup.php:48 +msgid "Failed to create a backup." +msgstr "Izrada sigurnosne kopije nije uspjela." + +#: pages/backup.php:107 +msgid "Failed to delete backup file." +msgstr "Brisanje datoteke sigurnosne kopije nije uspjelo." + +#: pages/backup.php:73 +msgid "Failed to restore styles." +msgstr "Vraćanje stilova nije uspjelo." + +#: my-style-anytime.php:249 pages/general.php:45 +msgid "FAQ" +msgstr "često postavljana pitanja" + +#: pages/general.php:44 +msgid "For help, you have our " +msgstr "Za pomoć, imate naše" + +#: pages/customization.php:88 +msgid "" +"From the website title displayed in a browser tab and dashboard, and wp-" +"login.php for enhanced branding and security." +msgstr "" +"Od naslova web stranice prikazanog na kartici preglednika i nadzornoj ploči " +"te wp-login.php za poboljšanu marku i sigurnost." + +#: my-style-anytime.php:118 my-style-anytime.php:219 +msgid "General" +msgstr "Općenito" + +#: pages/editor.php:146 +msgid "Generate CSS File for" +msgstr "Generiraj CSS datoteku za" + +#: pages/editor.php:169 +msgid "Generate Visitor CSS File" +msgstr "Generirajte CSS datoteku posjetitelja" + +#: pages/backup.php:282 +msgid "" +"Here you can create a backup anytime for all styles that you create and " +"restore, all archive files have been storage inside" +msgstr "" +"Ovdje možete stvoriti sigurnosnu kopiju bilo kada za sve stilove koje " +"stvorite i vratite, sve arhivske datoteke su pohranjene unutra" + +#: pages/general.php:31 +msgid "Hi," +msgstr "Bok," + +#. URI of the plugin +msgid "https://newfiesoft.com/wp-plugins/my-style-anytime/" +msgstr "https://newfiesoft.com/wp-plugins/my-style-anytime/" + +#. Author URI of the plugin +msgid "https://www.newfiesoft.com" +msgstr "https://www.newfiesoft.com" + +#: pages/general.php:34 +msgid "" +"If you like this plugin it would be nice from your side to give us your " +"rating and feedback." +msgstr "" +"Ako vam se sviđa ovaj dodatak, bilo bi lijepo s vaše strane da nam date " +"svoju ocjenu i povratne informacije." + +#. FontAwesome heart icon +#: my-style-anytime.php:315 +msgid "in Zürich, Switzerland" +msgstr "u Zürichu, Švicarska" + +#: pages/backup.php:302 +msgid "List Backup zip files" +msgstr "Popis sigurnosnih kopija zip datoteka" + +#: my-style-anytime.php:127 +msgid "Manage Style" +msgstr "Upravljanje stilom" + +#. Name of the plugin +#: my-style-anytime.php:107 +msgid "My Style Anytime" +msgstr "My Style Anytime" + +#. Author of the plugin +msgid "NewfieSoft" +msgstr "NewfieSoft" + +#: pages/backup.php:42 pages/backup.php:66 pages/backup.php:74 +#: pages/backup.php:96 pages/backup.php:108 pages/editor.php:310 +#: pages/editor.php:323 +msgid "OK" +msgstr "U redu" + +#: pages/general.php:46 +msgid "part, or if that does not help you can write your question in the" +msgstr "dio, ili ako to ne pomogne, možete napisati svoje pitanje u" + +#: my-style-anytime.php:311 +msgid "Premium Tools for WordPress made by" +msgstr "Vrhunski alati za WordPress izradio" + +#: my-style-anytime.php:250 +msgid "Ratings" +msgstr "Ocjene" + +#: pages/security.php:18 +msgid "Remove meta generator" +msgstr "Ukloni meta generator" + +#: pages/customization.php:18 +msgid "Remove WordPress from the title" +msgstr "Uklonite WordPress iz naslova" + +#: pages/security.php:88 +msgid "" +"Removing the meta generator, helps you to hide the version of WordPress that " +"you are using from potential attackers." +msgstr "" +"Uklanjanje meta generatora pomaže vam da sakrijete verziju WordPressa koju " +"koristite od potencijalnih napadača." + +#: pages/backup.php:72 +msgid "Restore Failed" +msgstr "Vraćanje nije uspjelo" + +#: pages/backup.php:313 +msgid "Restore Styles" +msgstr "Vrati stilove" + +#: pages/backup.php:64 +msgid "Restore Successful" +msgstr "Vraćanje uspješno" + +#: pages/customization.php:46 pages/security.php:46 pages/settings.php:46 +msgid "Save" +msgstr "Spremi" + +#: pages/editor.php:196 +msgid "Save Changes" +msgstr "Spremi promjene" + +#: pages/customization.php:59 pages/security.php:59 pages/settings.php:59 +msgid "Save Changes?" +msgstr "Spremi promjene?" + +#: my-style-anytime.php:145 pages/security.php:39 +msgid "Security" +msgstr "Sigurnost" + +#: pages/editor.php:102 +msgid "" +"Select below the CSS file who want to edit, and after complete just click on " +"the button to submit the change." +msgstr "" +"Odaberite ispod CSS datoteke koju želite urediti, a nakon završetka samo " +"kliknite na gumb za podnošenje promjene." + +#: my-style-anytime.php:154 pages/settings.php:39 +msgid "Settings" +msgstr "Postavke" + +#: pages/backup.php:41 +msgid "Styles successfully backed up." +msgstr "Stilovi su uspješno sigurnosno kopirani." + +#: pages/backup.php:65 +msgid "Styles successfully restored." +msgstr "Stilovi su uspješno vraćeni." + +#: pages/editor.php:308 +msgid "Success" +msgstr "Sspješno" + +#: pages/general.php:47 +msgid "support sections" +msgstr "odjeljci za podršku" + +#: pages/backup.php:95 +msgid "The backup file was successfully deleted." +msgstr "Datoteka sigurnosne kopije je uspješno izbrisana." + +#: pages/editor.php:46 +msgid "" +"The CSS file was not found because it does not exist, you can generate it by " +"clicking on the paint roller icon." +msgstr "" +"CSS datoteka nije pronađena jer ne postoji, možete je generirati klikom na " +"ikonu valjka za bojanje." + +#: pages/editor.php:309 +msgid "The file was updated successfully!" +msgstr "Datoteka je uspješno ažurirana!" + +#: my-style-anytime.php:321 +msgid "Version" +msgstr "Verzija" + +#: pages/editor.php:166 pages/editor.php:178 +msgid "Visitor Style" +msgstr "Stil posjetitelja" + +#: pages/general.php:32 +msgid "We are honored that you decided to use our plugin." +msgstr "Čast nam je što ste odlučili koristiti naš dodatak." + +#: pages/general.php:50 +msgid "" +"We would be very pleased if you supported the advancement of this plugin " +"with your " +msgstr "Bilo bi nam jako drago ako podržite napredak ovog dodatka svojim" + +#: pages/general.php:29 +msgid "Welcome" +msgstr "Dobrodošli" + +#: my-style-anytime.php:313 +msgid "with" +msgstr "sa" + +#: pages/settings.php:88 +msgid "" +"With this, you Disable Gutenberg on your site and back to the classic editor," +" no matter where you are." +msgstr "" +"Time ćete onemogućiti Gutenberg na svojoj stranici i vratiti se u klasični " +"uređivač, bez obzira gdje se nalazite." + +#: pages/customization.php:65 pages/security.php:65 pages/settings.php:65 +msgid "Yes" +msgstr "Da" + +#: pages/backup.php:345 +msgid "Yes, delete it!" +msgstr "Da, izbriši!" diff --git a/languages/my-style-anytime-it_IT.mo b/languages/my-style-anytime-it_IT.mo new file mode 100644 index 0000000..53f86fa Binary files /dev/null and b/languages/my-style-anytime-it_IT.mo differ diff --git a/languages/my-style-anytime-it_IT.po b/languages/my-style-anytime-it_IT.po new file mode 100644 index 0000000..364d8c2 --- /dev/null +++ b/languages/my-style-anytime-it_IT.po @@ -0,0 +1,352 @@ +# Copyright (C) 2023 NewfieSoft +# This file is distributed under the same license as the My Style Anytime plugin. +msgid "" +msgstr "" +"Project-Id-Version: My Style Anytime\n" +"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/my-style-" +"anytime/\n" +"Last-Translator: \n" +"Language-Team: Italian\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"POT-Creation-Date: 2024-02-18 01:56+0000\n" +"PO-Revision-Date: 2024-02-22 21:35+0000\n" +"X-Domain: my-style-anytime\n" +"Language: it_IT\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Loco https://localise.biz/\n" +"X-Loco-Version: 2.6.6; wp-6.4.3" + +#: pages/backup.php:340 +msgid "After deleting you are not able to revert this file!" +msgstr "Dopo l'eliminazione non è possibile ripristinare questo file!" + +#: pages/customization.php:60 pages/security.php:60 pages/settings.php:60 +msgid "Are you sure you want to save changes?" +msgstr "Sei sicuro di voler salvare le modifiche?" + +#: pages/backup.php:339 +msgid "Are you sure?" +msgstr "Sei sicuro?" + +#: pages/general.php:33 +msgid "" +"As you read before installing and activating this plugin with him, you can " +"create a custom CSS view using user roles." +msgstr "" +"Come hai letto prima di installare e attivare questo plugin con lui, puoi " +"creare una visualizzazione CSS personalizzata utilizzando i ruoli utente." + +#: my-style-anytime.php:163 +msgid "Backup" +msgstr "Backup" + +#: pages/backup.php:280 +msgid "Backup / Restore" +msgstr "Ripristinare il backup" + +#: pages/backup.php:288 +msgid "Backup Styles" +msgstr "Stili di backup" + +#: pages/backup.php:40 +msgid "Backup Successful" +msgstr "Backup riuscito" + +#: pages/backup.php:346 pages/customization.php:66 pages/security.php:66 +#: pages/settings.php:66 +msgid "Cancel" +msgstr "Annulla" + +#: pages/editor.php:100 +msgid "Code Editor" +msgstr "Editore di codice" + +#: my-style-anytime.php:248 +msgid "Community Support" +msgstr "Supporto comunitario" + +#: my-style-anytime.php:136 pages/customization.php:39 +msgid "Customization" +msgstr "Personalizzazione" + +#. Description of the plugin +msgid "" +"Customize public frontend or admin backend wp-admin with responsive using " +"the same CSS stylesheets file based on user roles type" +msgstr "" +"Personalizza il frontend pubblico o il backend di amministrazione wp-admin " +"con responsivo utilizzando lo stesso file di fogli di stile CSS in base al " +"tipo di ruoli utente" + +#: pages/backup.php:320 +msgid "Delete" +msgstr "Eliminare" + +#: pages/backup.php:106 +msgid "Delete Failed" +msgstr "Eliminazione non riuscita" + +#: pages/backup.php:94 +msgid "Delete Successful" +msgstr "Eliminazione riuscita" + +#: pages/settings.php:18 +msgid "Disable Gutenberg Editor" +msgstr "Disabilita l'editor Gutenberg" + +#: pages/general.php:51 +msgid "donation" +msgstr "donazione" + +#: pages/general.php:55 +msgid "Enjoy your work" +msgstr "Buon lavoro" + +#: pages/editor.php:321 +msgid "Error" +msgstr "Errore" + +#: pages/editor.php:322 +msgid "Error updating file: " +msgstr "Errore durante l'aggiornamento del file: " + +#: pages/backup.php:48 +msgid "Failed to create a backup." +msgstr "Impossibile creare un backup." + +#: pages/backup.php:107 +msgid "Failed to delete backup file." +msgstr "Impossibile eliminare il file di backup." + +#: pages/backup.php:73 +msgid "Failed to restore styles." +msgstr "Impossibile ripristinare gli stili." + +#: my-style-anytime.php:249 pages/general.php:45 +msgid "FAQ" +msgstr "FAQ" + +#: pages/general.php:44 +msgid "For help, you have our " +msgstr "Per aiuto, hai il nostro" + +#: pages/customization.php:88 +msgid "" +"From the website title displayed in a browser tab and dashboard, and wp-" +"login.php for enhanced branding and security." +msgstr "" +"Dal titolo del sito web visualizzato in una scheda e dashboard del browser e " +"wp-login.php per branding e sicurezza migliorati." + +#: my-style-anytime.php:118 my-style-anytime.php:219 +msgid "General" +msgstr "Generale" + +#: pages/editor.php:146 +msgid "Generate CSS File for" +msgstr "Genera file CSS per" + +#: pages/editor.php:169 +msgid "Generate Visitor CSS File" +msgstr "Genera file CSS dei visitatori" + +#: pages/backup.php:282 +msgid "" +"Here you can create a backup anytime for all styles that you create and " +"restore, all archive files have been storage inside" +msgstr "" +"Qui puoi creare un backup in qualsiasi momento per tutti gli stili che crei " +"e ripristini, tutti i file di archivio sono stati archiviati all'interno" + +#: pages/general.php:31 +msgid "Hi," +msgstr "Ciao," + +#. URI of the plugin +msgid "https://newfiesoft.com/wp-plugins/my-style-anytime/" +msgstr "https://newfiesoft.com/wp-plugins/my-style-anytime/" + +#. Author URI of the plugin +msgid "https://www.newfiesoft.com" +msgstr "https://www.newfiesoft.com" + +#: pages/general.php:34 +msgid "" +"If you like this plugin it would be nice from your side to give us your " +"rating and feedback." +msgstr "" +"Se ti piace questo plugin, sarebbe carino da parte tua fornirci la tua " +"valutazione e il tuo feedback." + +#. FontAwesome heart icon +#: my-style-anytime.php:315 +msgid "in Zürich, Switzerland" +msgstr "a Zurigo, Svizzera" + +#: pages/backup.php:302 +msgid "List Backup zip files" +msgstr "Elenca i file zip di backup" + +#: my-style-anytime.php:127 +msgid "Manage Style" +msgstr "Gestisci lo stile" + +#. Name of the plugin +#: my-style-anytime.php:107 +msgid "My Style Anytime" +msgstr "My Style Anytime" + +#. Author of the plugin +msgid "NewfieSoft" +msgstr "NewfieSoft" + +#: pages/backup.php:42 pages/backup.php:66 pages/backup.php:74 +#: pages/backup.php:96 pages/backup.php:108 pages/editor.php:310 +#: pages/editor.php:323 +msgid "OK" +msgstr "OK" + +#: pages/general.php:46 +msgid "part, or if that does not help you can write your question in the" +msgstr "parte, o se ciò non ti aiuta puoi scrivere la tua domanda nel" + +#: my-style-anytime.php:311 +msgid "Premium Tools for WordPress made by" +msgstr "Strumenti Premium per WordPress realizzati da" + +#: my-style-anytime.php:250 +msgid "Ratings" +msgstr "Giudizi" + +#: pages/security.php:18 +msgid "Remove meta generator" +msgstr "Rimuovi il metageneratore" + +#: pages/customization.php:18 +msgid "Remove WordPress from the title" +msgstr "Rimuovi WordPress dal titolo" + +#: pages/security.php:88 +msgid "" +"Removing the meta generator, helps you to hide the version of WordPress that " +"you are using from potential attackers." +msgstr "" +"Rimuovere il meta generatore ti aiuta a nascondere la versione di WordPress " +"che stai utilizzando da potenziali aggressori." + +#: pages/backup.php:72 +msgid "Restore Failed" +msgstr "Ripristino non riuscito" + +#: pages/backup.php:313 +msgid "Restore Styles" +msgstr "Ripristina stili" + +#: pages/backup.php:64 +msgid "Restore Successful" +msgstr "Ripristino riuscito" + +#: pages/customization.php:46 pages/security.php:46 pages/settings.php:46 +msgid "Save" +msgstr "Salva" + +#: pages/editor.php:196 +msgid "Save Changes" +msgstr "Salvare le modifiche" + +#: pages/customization.php:59 pages/security.php:59 pages/settings.php:59 +msgid "Save Changes?" +msgstr "Salvare le modifiche?" + +#: my-style-anytime.php:145 pages/security.php:39 +msgid "Security" +msgstr "Sicurezza" + +#: pages/editor.php:102 +msgid "" +"Select below the CSS file who want to edit, and after complete just click on " +"the button to submit the change." +msgstr "" +"Seleziona sotto il file CSS che desideri modificare e, una volta completato, " +"fai semplicemente clic sul pulsante per inviare la modifica." + +#: my-style-anytime.php:154 pages/settings.php:39 +msgid "Settings" +msgstr "Impostazioni" + +#: pages/backup.php:41 +msgid "Styles successfully backed up." +msgstr "Backup degli stili riuscito." + +#: pages/backup.php:65 +msgid "Styles successfully restored." +msgstr "Stili ripristinati con successo." + +#: pages/editor.php:308 +msgid "Success" +msgstr "Successo" + +#: pages/general.php:47 +msgid "support sections" +msgstr "sezioni di supporto" + +#: pages/backup.php:95 +msgid "The backup file was successfully deleted." +msgstr "Il file di backup è stato eliminato con successo." + +#: pages/editor.php:46 +msgid "" +"The CSS file was not found because it does not exist, you can generate it by " +"clicking on the paint roller icon." +msgstr "" +"Il file CSS non è stato trovato perché non esiste, puoi generarlo cliccando " +"sull'icona del rullo di vernice." + +#: pages/editor.php:309 +msgid "The file was updated successfully!" +msgstr "Il file è stato aggiornato con successo!" + +#: my-style-anytime.php:321 +msgid "Version" +msgstr "Versione" + +#: pages/editor.php:166 pages/editor.php:178 +msgid "Visitor Style" +msgstr "Stile del visitatore" + +#: pages/general.php:32 +msgid "We are honored that you decided to use our plugin." +msgstr "Siamo onorati che tu abbia deciso di utilizzare il nostro plugin." + +#: pages/general.php:50 +msgid "" +"We would be very pleased if you supported the advancement of this plugin " +"with your " +msgstr "" +"Saremmo molto lieti se supportassi lo sviluppo di questo plugin con il tuo" + +#: pages/general.php:29 +msgid "Welcome" +msgstr "Benvenuta" + +#: my-style-anytime.php:313 +msgid "with" +msgstr "con" + +#: pages/settings.php:88 +msgid "" +"With this, you Disable Gutenberg on your site and back to the classic editor," +" no matter where you are." +msgstr "" +"Con questo, disabiliti Gutenberg sul tuo sito e torni all'editor classico, " +"non importa dove ti trovi." + +#: pages/customization.php:65 pages/security.php:65 pages/settings.php:65 +msgid "Yes" +msgstr "SÌ" + +#: pages/backup.php:345 +msgid "Yes, delete it!" +msgstr "Sì, cancellalo!" diff --git a/languages/my-style-anytime-ja.mo b/languages/my-style-anytime-ja.mo new file mode 100644 index 0000000..04cb1fa Binary files /dev/null and b/languages/my-style-anytime-ja.mo differ diff --git a/languages/my-style-anytime-ja.po b/languages/my-style-anytime-ja.po new file mode 100644 index 0000000..3050919 --- /dev/null +++ b/languages/my-style-anytime-ja.po @@ -0,0 +1,336 @@ +# Copyright (C) 2023 NewfieSoft +# This file is distributed under the same license as the My Style Anytime plugin. +msgid "" +msgstr "" +"Project-Id-Version: My Style Anytime\n" +"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/my-style-" +"anytime/\n" +"Last-Translator: \n" +"Language-Team: Japanese\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"POT-Creation-Date: 2024-02-21 20:46+0000\n" +"PO-Revision-Date: 2024-02-22 21:35+0000\n" +"X-Domain: my-style-anytime\n" +"Language: ja\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Loco https://localise.biz/\n" +"X-Loco-Version: 2.6.6; wp-6.4.3" + +#: pages/backup.php:340 +msgid "After deleting you are not able to revert this file!" +msgstr "削除すると、このファイルを元に戻すことはできません。" + +#: pages/customization.php:60 pages/security.php:60 pages/settings.php:60 +msgid "Are you sure you want to save changes?" +msgstr "変更を保存してもよろしいですか?" + +#: pages/backup.php:339 +msgid "Are you sure?" +msgstr "本気ですか?" + +#: pages/general.php:33 +msgid "" +"As you read before installing and activating this plugin with him, you can " +"create a custom CSS view using user roles." +msgstr "" +"このプラグインをインストールしてアクティブ化する前に読んでいただいたように、ユーザー ロールを使用してカスタム CSS ビューを作成できます。" + +#: my-style-anytime.php:163 +msgid "Backup" +msgstr "バックアップ" + +#: pages/backup.php:280 +msgid "Backup / Restore" +msgstr "復元する" + +#: pages/backup.php:288 +msgid "Backup Styles" +msgstr "バックアップスタイル" + +#: pages/backup.php:40 +msgid "Backup Successful" +msgstr "バックアップ成功" + +#: pages/backup.php:346 pages/customization.php:66 pages/security.php:66 +#: pages/settings.php:66 +msgid "Cancel" +msgstr "キャンセル" + +#: pages/editor.php:100 +msgid "Code Editor" +msgstr "コードエディタ" + +#: my-style-anytime.php:248 +msgid "Community Support" +msgstr "コミュニティサポート" + +#: my-style-anytime.php:136 pages/customization.php:39 +msgid "Customization" +msgstr "カスタマイズ" + +#. Description of the plugin +msgid "" +"Customize public frontend or admin backend wp-admin with responsive using " +"the same CSS stylesheets file based on user roles type" +msgstr "" +"ユーザーの役割タイプに基づいて同じ CSS スタイルシート ファイルを使用して、パブリック フロントエンドまたは管理バックエンド wp-admin " +"をレスポンシブでカスタマイズします" + +#: pages/backup.php:320 +msgid "Delete" +msgstr "消去" + +#: pages/backup.php:106 +msgid "Delete Failed" +msgstr "削除に失敗しました" + +#: pages/backup.php:94 +msgid "Delete Successful" +msgstr "削除に成功しました" + +#: pages/settings.php:18 +msgid "Disable Gutenberg Editor" +msgstr "Gutenberg エディターを無効にする" + +#: pages/general.php:51 +msgid "donation" +msgstr "寄付" + +#: pages/general.php:55 +msgid "Enjoy your work" +msgstr "仕事を楽しんでください" + +#: pages/editor.php:321 +msgid "Error" +msgstr "エラー" + +#: pages/editor.php:322 +msgid "Error updating file: " +msgstr "ファイルの更新中にエラーが発生しました:" + +#: pages/backup.php:48 +msgid "Failed to create a backup." +msgstr "バックアップの作成に失敗しました。" + +#: pages/backup.php:107 +msgid "Failed to delete backup file." +msgstr "バックアップファイルの削除に失敗しました。" + +#: pages/backup.php:73 +msgid "Failed to restore styles." +msgstr "スタイルの復元に失敗しました。" + +#: my-style-anytime.php:249 pages/general.php:45 +msgid "FAQ" +msgstr "よくある質問" + +#: pages/general.php:44 +msgid "For help, you have our " +msgstr "サポートが必要な場合は、" + +#: pages/customization.php:88 +msgid "" +"From the website title displayed in a browser tab and dashboard, and wp-" +"login.php for enhanced branding and security." +msgstr "" +"ブラウザーのタブとダッシュボードに表示される Web サイトのタイトルと、ブランディングとセキュリティを強化するための wp-login.php から。" + +#: my-style-anytime.php:118 my-style-anytime.php:219 +msgid "General" +msgstr "一般的な" + +#: pages/editor.php:146 +msgid "Generate CSS File for" +msgstr "CSS ファイルを生成する" + +#: pages/editor.php:169 +msgid "Generate Visitor CSS File" +msgstr "訪問者CSSファイルの生成" + +#: pages/backup.php:282 +msgid "" +"Here you can create a backup anytime for all styles that you create and " +"restore, all archive files have been storage inside" +msgstr "ここでは、作成および復元したすべてのスタイルのバックアップをいつでも作成できます。すべてのアーカイブ ファイルは内部に保存されています。" + +#: pages/general.php:31 +msgid "Hi," +msgstr "こんにちは、" + +#. URI of the plugin +msgid "https://newfiesoft.com/wp-plugins/my-style-anytime/" +msgstr "https://newfiesoft.com/wp-plugins/my-style-anytime/" + +#. Author URI of the plugin +msgid "https://www.newfiesoft.com" +msgstr "https://www.newfiesoft.com" + +#: pages/general.php:34 +msgid "" +"If you like this plugin it would be nice from your side to give us your " +"rating and feedback." +msgstr "このプラグインが気に入っていただけましたら、評価とフィードバックをいただければ幸いです。" + +#. FontAwesome heart icon +#: my-style-anytime.php:315 +msgid "in Zürich, Switzerland" +msgstr "スイス、チューリッヒにて" + +#: pages/backup.php:302 +msgid "List Backup zip files" +msgstr "バックアップ zip ファイルの一覧表示" + +#: my-style-anytime.php:127 +msgid "Manage Style" +msgstr "スタイルの管理" + +#. Name of the plugin +#: my-style-anytime.php:107 +msgid "My Style Anytime" +msgstr "My Style Anytime" + +#. Author of the plugin +msgid "NewfieSoft" +msgstr "NewfieSoft" + +#: pages/backup.php:42 pages/backup.php:66 pages/backup.php:74 +#: pages/backup.php:96 pages/backup.php:108 pages/editor.php:310 +#: pages/editor.php:323 +msgid "OK" +msgstr "わかりました" + +#: pages/general.php:46 +msgid "part, or if that does not help you can write your question in the" +msgstr "の部分、またはそれが役に立たない場合は、" + +#: my-style-anytime.php:311 +msgid "Premium Tools for WordPress made by" +msgstr "WordPress 用プレミアム ツール" + +#: my-style-anytime.php:250 +msgid "Ratings" +msgstr "評価" + +#: pages/security.php:18 +msgid "Remove meta generator" +msgstr "メタジェネレーターを削除する" + +#: pages/customization.php:18 +msgid "Remove WordPress from the title" +msgstr "タイトルからWordPressを削除" + +#: pages/security.php:88 +msgid "" +"Removing the meta generator, helps you to hide the version of WordPress that " +"you are using from potential attackers." +msgstr "メタ ジェネレーターを削除すると、使用している WordPress のバージョンを潜在的な攻撃者から隠すことができます。" + +#: pages/backup.php:72 +msgid "Restore Failed" +msgstr "復元に失敗しました" + +#: pages/backup.php:313 +msgid "Restore Styles" +msgstr "スタイルを復元する" + +#: pages/backup.php:64 +msgid "Restore Successful" +msgstr "復元に成功しました" + +#: pages/customization.php:46 pages/security.php:46 pages/settings.php:46 +msgid "Save" +msgstr "保存" + +#: pages/editor.php:196 +msgid "Save Changes" +msgstr "変更内容を保存" + +#: pages/customization.php:59 pages/security.php:59 pages/settings.php:59 +msgid "Save Changes?" +msgstr "変更内容を保存?" + +#: my-style-anytime.php:145 pages/security.php:39 +msgid "Security" +msgstr "安全" + +#: pages/editor.php:102 +msgid "" +"Select below the CSS file who want to edit, and after complete just click on " +"the button to submit the change." +msgstr "CSS ファイルの下で編集するユーザーを選択し、完了したらボタンをクリックして変更を送信します。" + +#: my-style-anytime.php:154 pages/settings.php:39 +msgid "Settings" +msgstr "設定" + +#: pages/backup.php:41 +msgid "Styles successfully backed up." +msgstr "スタイルは正常にバックアップされました。" + +#: pages/backup.php:65 +msgid "Styles successfully restored." +msgstr "スタイルは正常に復元されました。" + +#: pages/editor.php:308 +msgid "Success" +msgstr "成功" + +#: pages/general.php:47 +msgid "support sections" +msgstr "サポートセクション" + +#: pages/backup.php:95 +msgid "The backup file was successfully deleted." +msgstr "バックアップファイルは正常に削除されました。" + +#: pages/editor.php:46 +msgid "" +"The CSS file was not found because it does not exist, you can generate it by " +"clicking on the paint roller icon." +msgstr "CSS ファイルは存在しないため見つかりませんでした。ペイント ローラー アイコンをクリックすると生成できます。" + +#: pages/editor.php:309 +msgid "The file was updated successfully!" +msgstr "ファイルは正常に更新されました。" + +#: my-style-anytime.php:321 +msgid "Version" +msgstr "バージョン" + +#: pages/editor.php:166 pages/editor.php:178 +msgid "Visitor Style" +msgstr "ビジタースタイル" + +#: pages/general.php:32 +msgid "We are honored that you decided to use our plugin." +msgstr "私たちのプラグインを使用することに決めていただき光栄です。" + +#: pages/general.php:50 +msgid "" +"We would be very pleased if you supported the advancement of this plugin " +"with your " +msgstr "皆様とともにこのプラグインの進歩をサポートしていただければ大変嬉しく思います。" + +#: pages/general.php:29 +msgid "Welcome" +msgstr "いらっしゃいませ" + +#: my-style-anytime.php:313 +msgid "with" +msgstr "と" + +#: pages/settings.php:88 +msgid "" +"With this, you Disable Gutenberg on your site and back to the classic editor," +" no matter where you are." +msgstr "これにより、サイト上で Gutenberg を無効にし、どこにいてもクラシック エディターに戻ります。" + +#: pages/customization.php:65 pages/security.php:65 pages/settings.php:65 +msgid "Yes" +msgstr "はい" + +#: pages/backup.php:345 +msgid "Yes, delete it!" +msgstr "はい、削除してください!" diff --git a/languages/my-style-anytime-nl_NL.mo b/languages/my-style-anytime-nl_NL.mo new file mode 100644 index 0000000..41238cc Binary files /dev/null and b/languages/my-style-anytime-nl_NL.mo differ diff --git a/languages/my-style-anytime-nl_NL.po b/languages/my-style-anytime-nl_NL.po new file mode 100644 index 0000000..8da5b55 --- /dev/null +++ b/languages/my-style-anytime-nl_NL.po @@ -0,0 +1,354 @@ +# Copyright (C) 2023 NewfieSoft +# This file is distributed under the same license as the My Style Anytime plugin. +msgid "" +msgstr "" +"Project-Id-Version: My Style Anytime\n" +"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/my-style-" +"anytime/\n" +"Last-Translator: \n" +"Language-Team: Dutch\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"POT-Creation-Date: 2024-02-21 20:46+0000\n" +"PO-Revision-Date: 2024-02-22 21:36+0000\n" +"X-Domain: my-style-anytime\n" +"Language: nl_NL\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Loco https://localise.biz/\n" +"X-Loco-Version: 2.6.6; wp-6.4.3" + +#: pages/backup.php:340 +msgid "After deleting you are not able to revert this file!" +msgstr "Na het verwijderen kunt u dit bestand niet meer terugdraaien!" + +#: pages/customization.php:60 pages/security.php:60 pages/settings.php:60 +msgid "Are you sure you want to save changes?" +msgstr "Weet u zeker dat u de wijzigingen wilt opslaan?" + +#: pages/backup.php:339 +msgid "Are you sure?" +msgstr "Weet je het zeker?" + +#: pages/general.php:33 +msgid "" +"As you read before installing and activating this plugin with him, you can " +"create a custom CSS view using user roles." +msgstr "" +"Zoals je hebt gelezen voordat je deze plug-in bij hem installeert en " +"activeert, kun je met behulp van gebruikersrollen een aangepaste CSS-" +"weergave maken." + +#: my-style-anytime.php:163 +msgid "Backup" +msgstr "Back-up" + +#: pages/backup.php:280 +msgid "Backup / Restore" +msgstr "Back-up herstellen" + +#: pages/backup.php:288 +msgid "Backup Styles" +msgstr "Back-upstijlen" + +#: pages/backup.php:40 +msgid "Backup Successful" +msgstr "Back-up succesvol" + +#: pages/backup.php:346 pages/customization.php:66 pages/security.php:66 +#: pages/settings.php:66 +msgid "Cancel" +msgstr "Annuleren" + +#: pages/editor.php:100 +msgid "Code Editor" +msgstr "Code-editor" + +#: my-style-anytime.php:248 +msgid "Community Support" +msgstr "Maatschappelijke hulp" + +#: my-style-anytime.php:136 pages/customization.php:39 +msgid "Customization" +msgstr "Maatwerk" + +#. Description of the plugin +msgid "" +"Customize public frontend or admin backend wp-admin with responsive using " +"the same CSS stylesheets file based on user roles type" +msgstr "" +"Pas de openbare frontend of admin backend wp-admin aan met responsief " +"gebruik van hetzelfde CSS-stylesheets-bestand op basis van het type " +"gebruikersrollen" + +#: pages/backup.php:320 +msgid "Delete" +msgstr "Verwijderen" + +#: pages/backup.php:106 +msgid "Delete Failed" +msgstr "Verwijderen mislukt" + +#: pages/backup.php:94 +msgid "Delete Successful" +msgstr "Verwijderen succesvol" + +#: pages/settings.php:18 +msgid "Disable Gutenberg Editor" +msgstr "Schakel de Gutenberg-editor uit" + +#: pages/general.php:51 +msgid "donation" +msgstr "bijdrage" + +#: pages/general.php:55 +msgid "Enjoy your work" +msgstr "Geniet van je werk" + +#: pages/editor.php:321 +msgid "Error" +msgstr "Fout" + +#: pages/editor.php:322 +msgid "Error updating file: " +msgstr "Fout bij updaten van bestand: " + +#: pages/backup.php:48 +msgid "Failed to create a backup." +msgstr "Kan geen back-up maken." + +#: pages/backup.php:107 +msgid "Failed to delete backup file." +msgstr "Kan back-upbestand niet verwijderen." + +#: pages/backup.php:73 +msgid "Failed to restore styles." +msgstr "Kan stijlen niet herstellen." + +#: my-style-anytime.php:249 pages/general.php:45 +msgid "FAQ" +msgstr "FAQ" + +#: pages/general.php:44 +msgid "For help, you have our " +msgstr "Voor hulp heeft u onze " + +#: pages/customization.php:88 +msgid "" +"From the website title displayed in a browser tab and dashboard, and wp-" +"login.php for enhanced branding and security." +msgstr "" +"Van de websitetitel die wordt weergegeven in een browsertabblad en dashboard," +" en wp-login.php voor verbeterde branding en beveiliging." + +#: my-style-anytime.php:118 my-style-anytime.php:219 +msgid "General" +msgstr "Algemeen" + +#: pages/editor.php:146 +msgid "Generate CSS File for" +msgstr "Genereer een CSS-bestand voor" + +#: pages/editor.php:169 +msgid "Generate Visitor CSS File" +msgstr "Genereer een bezoekers-CSS-bestand" + +#: pages/backup.php:282 +msgid "" +"Here you can create a backup anytime for all styles that you create and " +"restore, all archive files have been storage inside" +msgstr "" +"Hier kunt u op elk gewenst moment een back-up maken van alle stijlen die u " +"maakt en herstelt; alle archiefbestanden zijn daarin opgeslagen" + +#: pages/general.php:31 +msgid "Hi," +msgstr "Hoi," + +#. URI of the plugin +msgid "https://newfiesoft.com/wp-plugins/my-style-anytime/" +msgstr "https://newfiesoft.com/wp-plugins/my-style-anytime/" + +#. Author URI of the plugin +msgid "https://www.newfiesoft.com" +msgstr "https://www.newfiesoft.com" + +#: pages/general.php:34 +msgid "" +"If you like this plugin it would be nice from your side to give us your " +"rating and feedback." +msgstr "" +"Als u deze plug-in leuk vindt, zou het leuk zijn als u ons uw beoordeling en " +"feedback geeft." + +#. FontAwesome heart icon +#: my-style-anytime.php:315 +msgid "in Zürich, Switzerland" +msgstr "in Zürich, Zwitserland" + +#: pages/backup.php:302 +msgid "List Backup zip files" +msgstr "Maak een lijst van back-up-zipbestanden" + +#: my-style-anytime.php:127 +msgid "Manage Style" +msgstr "Beheer stijl" + +#. Name of the plugin +#: my-style-anytime.php:107 +msgid "My Style Anytime" +msgstr "My Style Anytime" + +#. Author of the plugin +msgid "NewfieSoft" +msgstr "NewfieSoft" + +#: pages/backup.php:42 pages/backup.php:66 pages/backup.php:74 +#: pages/backup.php:96 pages/backup.php:108 pages/editor.php:310 +#: pages/editor.php:323 +msgid "OK" +msgstr "OK" + +#: pages/general.php:46 +msgid "part, or if that does not help you can write your question in the" +msgstr "onderdeel, of als dat niet helpt, kunt u uw vraag in het" + +#: my-style-anytime.php:311 +msgid "Premium Tools for WordPress made by" +msgstr "Premium Tools voor WordPress gemaakt door" + +#: my-style-anytime.php:250 +msgid "Ratings" +msgstr "Waarderingen" + +#: pages/security.php:18 +msgid "Remove meta generator" +msgstr "Metagenerator verwijderen" + +#: pages/customization.php:18 +msgid "Remove WordPress from the title" +msgstr "Verwijder WordPress uit de titel" + +#: pages/security.php:88 +msgid "" +"Removing the meta generator, helps you to hide the version of WordPress that " +"you are using from potential attackers." +msgstr "" +"Door de metagenerator te verwijderen, kunt u de versie van WordPress die u " +"gebruikt verbergen voor potentiële aanvallers." + +#: pages/backup.php:72 +msgid "Restore Failed" +msgstr "Herstellen mislukt" + +#: pages/backup.php:313 +msgid "Restore Styles" +msgstr "Stijlen herstellen" + +#: pages/backup.php:64 +msgid "Restore Successful" +msgstr "Herstel succesvol" + +#: pages/customization.php:46 pages/security.php:46 pages/settings.php:46 +msgid "Save" +msgstr "Redden" + +#: pages/editor.php:196 +msgid "Save Changes" +msgstr "Wijzigingen opslaan" + +#: pages/customization.php:59 pages/security.php:59 pages/settings.php:59 +msgid "Save Changes?" +msgstr "Wijzigingen opslaan?" + +#: my-style-anytime.php:145 pages/security.php:39 +msgid "Security" +msgstr "Beveiliging" + +#: pages/editor.php:102 +msgid "" +"Select below the CSS file who want to edit, and after complete just click on " +"the button to submit the change." +msgstr "" +"Selecteer hieronder het CSS-bestand dat u wilt bewerken en klik na " +"voltooiing op de knop om de wijziging door te geven." + +#: my-style-anytime.php:154 pages/settings.php:39 +msgid "Settings" +msgstr "Instellingen" + +#: pages/backup.php:41 +msgid "Styles successfully backed up." +msgstr "Er is een back-up van stijlen gemaakt." + +#: pages/backup.php:65 +msgid "Styles successfully restored." +msgstr "Stijlen succesvol hersteld." + +#: pages/editor.php:308 +msgid "Success" +msgstr "Succes" + +#: pages/general.php:47 +msgid "support sections" +msgstr "ondersteunende secties" + +#: pages/backup.php:95 +msgid "The backup file was successfully deleted." +msgstr "Het back-upbestand is succesvol verwijderd." + +#: pages/editor.php:46 +msgid "" +"The CSS file was not found because it does not exist, you can generate it by " +"clicking on the paint roller icon." +msgstr "" +"Het CSS-bestand is niet gevonden omdat het niet bestaat. U kunt het " +"genereren door op het verfrollerpictogram te klikken." + +#: pages/editor.php:309 +msgid "The file was updated successfully!" +msgstr "Het bestand is succesvol bijgewerkt!" + +#: my-style-anytime.php:321 +msgid "Version" +msgstr "Versie" + +#: pages/editor.php:166 pages/editor.php:178 +msgid "Visitor Style" +msgstr "Bezoekersstijl" + +#: pages/general.php:32 +msgid "We are honored that you decided to use our plugin." +msgstr "We zijn vereerd dat je hebt besloten onze plug-in te gebruiken." + +#: pages/general.php:50 +msgid "" +"We would be very pleased if you supported the advancement of this plugin " +"with your " +msgstr "" +"Wij zouden het zeer op prijs stellen als u de ontwikkeling van deze plug-in " +"met uw steun zou ondersteunen" + +#: pages/general.php:29 +msgid "Welcome" +msgstr "Welkom" + +#: my-style-anytime.php:313 +msgid "with" +msgstr "met" + +#: pages/settings.php:88 +msgid "" +"With this, you Disable Gutenberg on your site and back to the classic editor," +" no matter where you are." +msgstr "" +"Hiermee schakel je Gutenberg op je site uit en terug naar de klassieke " +"editor, waar je ook bent." + +#: pages/customization.php:65 pages/security.php:65 pages/settings.php:65 +msgid "Yes" +msgstr "Ja" + +#: pages/backup.php:345 +msgid "Yes, delete it!" +msgstr "Ja, verwijder het!" diff --git a/languages/my-style-anytime-pl_PL.mo b/languages/my-style-anytime-pl_PL.mo new file mode 100644 index 0000000..2d96290 Binary files /dev/null and b/languages/my-style-anytime-pl_PL.mo differ diff --git a/languages/my-style-anytime-pl_PL.po b/languages/my-style-anytime-pl_PL.po new file mode 100644 index 0000000..b8b1114 --- /dev/null +++ b/languages/my-style-anytime-pl_PL.po @@ -0,0 +1,353 @@ +# Copyright (C) 2023 NewfieSoft +# This file is distributed under the same license as the My Style Anytime plugin. +msgid "" +msgstr "" +"Project-Id-Version: My Style Anytime\n" +"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/my-style-" +"anytime/\n" +"Last-Translator: \n" +"Language-Team: Polish\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"POT-Creation-Date: 2024-02-21 20:46+0000\n" +"PO-Revision-Date: 2024-02-22 21:36+0000\n" +"X-Domain: my-style-anytime\n" +"Language: pl_PL\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10 >= 2 && n%10<=4 " +"&&(n%100<10||n%100 >= 20)? 1 : 2);\n" +"X-Generator: Loco https://localise.biz/\n" +"X-Loco-Version: 2.6.6; wp-6.4.3" + +#: pages/backup.php:340 +msgid "After deleting you are not able to revert this file!" +msgstr "Po usunięciu nie można przywrócić tego pliku!" + +#: pages/customization.php:60 pages/security.php:60 pages/settings.php:60 +msgid "Are you sure you want to save changes?" +msgstr "Czy na pewno chcesz zapisać zmiany?" + +#: pages/backup.php:339 +msgid "Are you sure?" +msgstr "Jesteś pewny?" + +#: pages/general.php:33 +msgid "" +"As you read before installing and activating this plugin with him, you can " +"create a custom CSS view using user roles." +msgstr "" +"Jak przeczytasz przed zainstalowaniem i aktywacją tej wtyczki za jego pomocą," +" możesz utworzyć niestandardowy widok CSS, korzystając z ról użytkowników." + +#: my-style-anytime.php:163 +msgid "Backup" +msgstr "Kopia zapasowa" + +#: pages/backup.php:280 +msgid "Backup / Restore" +msgstr "Przywracania kopii zapasowej" + +#: pages/backup.php:288 +msgid "Backup Styles" +msgstr "Style kopii zapasowych" + +#: pages/backup.php:40 +msgid "Backup Successful" +msgstr "Kopia zapasowa powiodła się" + +#: pages/backup.php:346 pages/customization.php:66 pages/security.php:66 +#: pages/settings.php:66 +msgid "Cancel" +msgstr "Anulować" + +#: pages/editor.php:100 +msgid "Code Editor" +msgstr "Edytor kodu" + +#: my-style-anytime.php:248 +msgid "Community Support" +msgstr "Społeczność" + +#: my-style-anytime.php:136 pages/customization.php:39 +msgid "Customization" +msgstr "Dostosowywanie" + +#. Description of the plugin +msgid "" +"Customize public frontend or admin backend wp-admin with responsive using " +"the same CSS stylesheets file based on user roles type" +msgstr "" +"Dostosuj publiczny frontend lub administracyjny backend wp-admin z " +"responsywnością, używając tego samego pliku arkuszy stylów CSS w oparciu o " +"typ ról użytkownika" + +#: pages/backup.php:320 +msgid "Delete" +msgstr "Usuwać" + +#: pages/backup.php:106 +msgid "Delete Failed" +msgstr "Usuwanie nie powiodło się" + +#: pages/backup.php:94 +msgid "Delete Successful" +msgstr "Usuń pomyślnie" + +#: pages/settings.php:18 +msgid "Disable Gutenberg Editor" +msgstr "Wyłącz Edytor Gutenberga" + +#: pages/general.php:51 +msgid "donation" +msgstr "darowizna" + +#: pages/general.php:55 +msgid "Enjoy your work" +msgstr "Miłej pracy" + +#: pages/editor.php:321 +msgid "Error" +msgstr "Błąd" + +#: pages/editor.php:322 +msgid "Error updating file: " +msgstr "Błąd podczas aktualizacji pliku: " + +#: pages/backup.php:48 +msgid "Failed to create a backup." +msgstr "Nie udało się utworzyć kopii zapasowej." + +#: pages/backup.php:107 +msgid "Failed to delete backup file." +msgstr "Nie udało się usunąć pliku kopii zapasowej." + +#: pages/backup.php:73 +msgid "Failed to restore styles." +msgstr "Nie udało się przywrócić stylów." + +#: my-style-anytime.php:249 pages/general.php:45 +msgid "FAQ" +msgstr "Często zadawane pytania" + +#: pages/general.php:44 +msgid "For help, you have our " +msgstr "Aby uzyskać pomoc, masz nasze" + +#: pages/customization.php:88 +msgid "" +"From the website title displayed in a browser tab and dashboard, and wp-" +"login.php for enhanced branding and security." +msgstr "" +"Z tytułu witryny wyświetlanego na karcie przeglądarki i na pulpicie " +"nawigacyjnym oraz wp-login.php w celu zwiększenia marki i bezpieczeństwa." + +#: my-style-anytime.php:118 my-style-anytime.php:219 +msgid "General" +msgstr "Ogólny" + +#: pages/editor.php:146 +msgid "Generate CSS File for" +msgstr "Wygeneruj plik CSS dla" + +#: pages/editor.php:169 +msgid "Generate Visitor CSS File" +msgstr "Wygeneruj plik CSS gościa" + +#: pages/backup.php:282 +msgid "" +"Here you can create a backup anytime for all styles that you create and " +"restore, all archive files have been storage inside" +msgstr "" +"Tutaj możesz w dowolnym momencie utworzyć kopię zapasową wszystkich " +"utworzonych i przywróconych stylów. Wszystkie pliki archiwalne zostały w " +"nich zapisane" + +#: pages/general.php:31 +msgid "Hi," +msgstr "Cześć," + +#. URI of the plugin +msgid "https://newfiesoft.com/wp-plugins/my-style-anytime/" +msgstr "https://newfiesoft.com/wp-plugins/my-style-anytime/" + +#. Author URI of the plugin +msgid "https://www.newfiesoft.com" +msgstr "https://www.newfiesoft.com" + +#: pages/general.php:34 +msgid "" +"If you like this plugin it would be nice from your side to give us your " +"rating and feedback." +msgstr "" +"Jeśli podoba Ci się ta wtyczka, byłoby miło z Twojej strony podzielić się z " +"nami swoją oceną i opinią." + +#. FontAwesome heart icon +#: my-style-anytime.php:315 +msgid "in Zürich, Switzerland" +msgstr "w Zurychu w Szwajcarii" + +#: pages/backup.php:302 +msgid "List Backup zip files" +msgstr "Lista plików zip kopii zapasowych" + +#: my-style-anytime.php:127 +msgid "Manage Style" +msgstr "Zarządzaj stylem" + +#. Name of the plugin +#: my-style-anytime.php:107 +msgid "My Style Anytime" +msgstr "My Style Anytime" + +#. Author of the plugin +msgid "NewfieSoft" +msgstr "NewfieSoft" + +#: pages/backup.php:42 pages/backup.php:66 pages/backup.php:74 +#: pages/backup.php:96 pages/backup.php:108 pages/editor.php:310 +#: pages/editor.php:323 +msgid "OK" +msgstr "OK" + +#: pages/general.php:46 +msgid "part, or if that does not help you can write your question in the" +msgstr "części, a jeśli to nie pomoże, możesz napisać swoje pytanie w" + +#: my-style-anytime.php:311 +msgid "Premium Tools for WordPress made by" +msgstr "Narzędzia premium dla WordPress wykonane przez" + +#: my-style-anytime.php:250 +msgid "Ratings" +msgstr "Oceny" + +#: pages/security.php:18 +msgid "Remove meta generator" +msgstr "Usuń metagenerator" + +#: pages/customization.php:18 +msgid "Remove WordPress from the title" +msgstr "Usuń WordPressa z tytułu" + +#: pages/security.php:88 +msgid "" +"Removing the meta generator, helps you to hide the version of WordPress that " +"you are using from potential attackers." +msgstr "" +"Usunięcie metageneratora pomaga ukryć wersję WordPressa, której używasz, " +"przed potencjalnymi atakującymi." + +#: pages/backup.php:72 +msgid "Restore Failed" +msgstr "Przywracanie nie powiodło się" + +#: pages/backup.php:313 +msgid "Restore Styles" +msgstr "Przywróć style" + +#: pages/backup.php:64 +msgid "Restore Successful" +msgstr "Przywracanie powiodło się" + +#: pages/customization.php:46 pages/security.php:46 pages/settings.php:46 +msgid "Save" +msgstr "Ratować" + +#: pages/editor.php:196 +msgid "Save Changes" +msgstr "Zapisz zmiany" + +#: pages/customization.php:59 pages/security.php:59 pages/settings.php:59 +msgid "Save Changes?" +msgstr "Zapisz zmiany?" + +#: my-style-anytime.php:145 pages/security.php:39 +msgid "Security" +msgstr "Bezpieczeństwo" + +#: pages/editor.php:102 +msgid "" +"Select below the CSS file who want to edit, and after complete just click on " +"the button to submit the change." +msgstr "" +"Wybierz poniżej plik CSS, który chcesz edytować, a po zakończeniu kliknij " +"przycisk, aby przesłać zmianę." + +#: my-style-anytime.php:154 pages/settings.php:39 +msgid "Settings" +msgstr "Ustawienia" + +#: pages/backup.php:41 +msgid "Styles successfully backed up." +msgstr "Pomyślnie utworzono kopię zapasową stylów." + +#: pages/backup.php:65 +msgid "Styles successfully restored." +msgstr "Style zostały przywrócone." + +#: pages/editor.php:308 +msgid "Success" +msgstr "Powodzenie" + +#: pages/general.php:47 +msgid "support sections" +msgstr "sekcje wsparcia" + +#: pages/backup.php:95 +msgid "The backup file was successfully deleted." +msgstr "Plik kopii zapasowej został pomyślnie usunięty." + +#: pages/editor.php:46 +msgid "" +"The CSS file was not found because it does not exist, you can generate it by " +"clicking on the paint roller icon." +msgstr "" +"Nie znaleziono pliku CSS, ponieważ nie istnieje, możesz go wygenerować " +"klikając na ikonę wałka malarskiego." + +#: pages/editor.php:309 +msgid "The file was updated successfully!" +msgstr "Plik został pomyślnie zaktualizowany!" + +#: my-style-anytime.php:321 +msgid "Version" +msgstr "Wersja" + +#: pages/editor.php:166 pages/editor.php:178 +msgid "Visitor Style" +msgstr "Styl gościa" + +#: pages/general.php:32 +msgid "We are honored that you decided to use our plugin." +msgstr "Jesteśmy zaszczyceni, że zdecydowałeś się skorzystać z naszej wtyczki." + +#: pages/general.php:50 +msgid "" +"We would be very pleased if you supported the advancement of this plugin " +"with your " +msgstr "Będziemy bardzo zadowoleni, jeśli wspomożesz rozwój tej wtyczki swoim" + +#: pages/general.php:29 +msgid "Welcome" +msgstr "Powitanie" + +#: my-style-anytime.php:313 +msgid "with" +msgstr "z" + +#: pages/settings.php:88 +msgid "" +"With this, you Disable Gutenberg on your site and back to the classic editor," +" no matter where you are." +msgstr "" +"Dzięki temu wyłączysz Gutenberga na swojej stronie i wrócisz do klasycznego " +"edytora, bez względu na to, gdzie jesteś." + +#: pages/customization.php:65 pages/security.php:65 pages/settings.php:65 +msgid "Yes" +msgstr "Tak" + +#: pages/backup.php:345 +msgid "Yes, delete it!" +msgstr "Tak, usuń to!" diff --git a/languages/my-style-anytime-pt_BR.mo b/languages/my-style-anytime-pt_BR.mo new file mode 100644 index 0000000..c818ca2 Binary files /dev/null and b/languages/my-style-anytime-pt_BR.mo differ diff --git a/languages/my-style-anytime-pt_BR.po b/languages/my-style-anytime-pt_BR.po new file mode 100644 index 0000000..fd211d6 --- /dev/null +++ b/languages/my-style-anytime-pt_BR.po @@ -0,0 +1,352 @@ +# Copyright (C) 2023 NewfieSoft +# This file is distributed under the same license as the My Style Anytime plugin. +msgid "" +msgstr "" +"Project-Id-Version: My Style Anytime\n" +"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/my-style-" +"anytime/\n" +"Last-Translator: \n" +"Language-Team: Portuguese (Brazil)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"POT-Creation-Date: 2024-02-21 20:46+0000\n" +"PO-Revision-Date: 2024-02-22 21:37+0000\n" +"X-Domain: my-style-anytime\n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Loco https://localise.biz/\n" +"X-Loco-Version: 2.6.6; wp-6.4.3" + +#: pages/backup.php:340 +msgid "After deleting you are not able to revert this file!" +msgstr "Após a exclusão, você não poderá reverter este arquivo!" + +#: pages/customization.php:60 pages/security.php:60 pages/settings.php:60 +msgid "Are you sure you want to save changes?" +msgstr "Tem certeza de que deseja salvar as alterações?" + +#: pages/backup.php:339 +msgid "Are you sure?" +msgstr "Tem certeza?" + +#: pages/general.php:33 +msgid "" +"As you read before installing and activating this plugin with him, you can " +"create a custom CSS view using user roles." +msgstr "" +"Conforme você leu antes de instalar e ativar este plugin com ele, você pode " +"criar uma visualização CSS personalizada usando funções de usuário." + +#: my-style-anytime.php:163 +msgid "Backup" +msgstr "Cópia de segurança" + +#: pages/backup.php:280 +msgid "Backup / Restore" +msgstr "Cópia de segurança / Restaurar" + +#: pages/backup.php:288 +msgid "Backup Styles" +msgstr "Estilos de backup" + +#: pages/backup.php:40 +msgid "Backup Successful" +msgstr "Backup bem-sucedido" + +#: pages/backup.php:346 pages/customization.php:66 pages/security.php:66 +#: pages/settings.php:66 +msgid "Cancel" +msgstr "Cancelar" + +#: pages/editor.php:100 +msgid "Code Editor" +msgstr "Editor de código" + +#: my-style-anytime.php:248 +msgid "Community Support" +msgstr "Suporte da comunidade" + +#: my-style-anytime.php:136 pages/customization.php:39 +msgid "Customization" +msgstr "Costumização" + +#. Description of the plugin +msgid "" +"Customize public frontend or admin backend wp-admin with responsive using " +"the same CSS stylesheets file based on user roles type" +msgstr "" +"Personalize o frontend público ou o backend administrativo wp-admin com " +"responsivo usando o mesmo arquivo de folhas de estilo CSS com base no tipo " +"de função do usuário" + +#: pages/backup.php:320 +msgid "Delete" +msgstr "Excluir" + +#: pages/backup.php:106 +msgid "Delete Failed" +msgstr "Falha na exclusão" + +#: pages/backup.php:94 +msgid "Delete Successful" +msgstr "Exclusão bem-sucedida" + +#: pages/settings.php:18 +msgid "Disable Gutenberg Editor" +msgstr "Desativar Editor Gutenberg" + +#: pages/general.php:51 +msgid "donation" +msgstr "doação" + +#: pages/general.php:55 +msgid "Enjoy your work" +msgstr "Aproveite seu trabalho" + +#: pages/editor.php:321 +msgid "Error" +msgstr "Erro" + +#: pages/editor.php:322 +msgid "Error updating file: " +msgstr "Erro ao atualizar o arquivo: " + +#: pages/backup.php:48 +msgid "Failed to create a backup." +msgstr "Falha ao criar um backup." + +#: pages/backup.php:107 +msgid "Failed to delete backup file." +msgstr "Falha ao excluir o arquivo de backup." + +#: pages/backup.php:73 +msgid "Failed to restore styles." +msgstr "Falha ao restaurar estilos." + +#: my-style-anytime.php:249 pages/general.php:45 +msgid "FAQ" +msgstr "Perguntas frequentes" + +#: pages/general.php:44 +msgid "For help, you have our " +msgstr "Para obter ajuda, você tem nosso" + +#: pages/customization.php:88 +msgid "" +"From the website title displayed in a browser tab and dashboard, and wp-" +"login.php for enhanced branding and security." +msgstr "" +"A partir do título do site exibido em uma guia e painel do navegador, e wp-" +"login.php para melhorar a marca e a segurança." + +#: my-style-anytime.php:118 my-style-anytime.php:219 +msgid "General" +msgstr "Em geral" + +#: pages/editor.php:146 +msgid "Generate CSS File for" +msgstr "Gerar arquivo CSS para" + +#: pages/editor.php:169 +msgid "Generate Visitor CSS File" +msgstr "Gerar arquivo CSS do visitante" + +#: pages/backup.php:282 +msgid "" +"Here you can create a backup anytime for all styles that you create and " +"restore, all archive files have been storage inside" +msgstr "" +"Aqui você pode criar um backup a qualquer momento para todos os estilos que " +"você cria e restaura, todos os arquivos compactados foram armazenados dentro" + +#: pages/general.php:31 +msgid "Hi," +msgstr "Oi," + +#. URI of the plugin +msgid "https://newfiesoft.com/wp-plugins/my-style-anytime/" +msgstr "https://newfiesoft.com/wp-plugins/my-style-anytime/" + +#. Author URI of the plugin +msgid "https://www.newfiesoft.com" +msgstr "https://www.newfiesoft.com" + +#: pages/general.php:34 +msgid "" +"If you like this plugin it would be nice from your side to give us your " +"rating and feedback." +msgstr "" +"Se você gosta deste plugin, seria bom da sua parte nos dar sua avaliação e " +"feedback." + +#. FontAwesome heart icon +#: my-style-anytime.php:315 +msgid "in Zürich, Switzerland" +msgstr "em Zurique, Suíça" + +#: pages/backup.php:302 +msgid "List Backup zip files" +msgstr "Listar arquivos zip de backup" + +#: my-style-anytime.php:127 +msgid "Manage Style" +msgstr "Gerenciar estilo" + +#. Name of the plugin +#: my-style-anytime.php:107 +msgid "My Style Anytime" +msgstr "My Style Anytime" + +#. Author of the plugin +msgid "NewfieSoft" +msgstr "NewfieSoft" + +#: pages/backup.php:42 pages/backup.php:66 pages/backup.php:74 +#: pages/backup.php:96 pages/backup.php:108 pages/editor.php:310 +#: pages/editor.php:323 +msgid "OK" +msgstr "OK" + +#: pages/general.php:46 +msgid "part, or if that does not help you can write your question in the" +msgstr "parte, ou se isso não ajudar você pode escrever sua pergunta no" + +#: my-style-anytime.php:311 +msgid "Premium Tools for WordPress made by" +msgstr "Ferramentas Premium para WordPress feitas por" + +#: my-style-anytime.php:250 +msgid "Ratings" +msgstr "Avaliações" + +#: pages/security.php:18 +msgid "Remove meta generator" +msgstr "Remover metagerador" + +#: pages/customization.php:18 +msgid "Remove WordPress from the title" +msgstr "Remova o WordPress do título" + +#: pages/security.php:88 +msgid "" +"Removing the meta generator, helps you to hide the version of WordPress that " +"you are using from potential attackers." +msgstr "" +"A remoção do metagerador ajuda a ocultar a versão do WordPress que você está " +"usando de possíveis invasores." + +#: pages/backup.php:72 +msgid "Restore Failed" +msgstr "Falha na restauração" + +#: pages/backup.php:313 +msgid "Restore Styles" +msgstr "Restaurar estilos" + +#: pages/backup.php:64 +msgid "Restore Successful" +msgstr "Restauração bem-sucedida" + +#: pages/customization.php:46 pages/security.php:46 pages/settings.php:46 +msgid "Save" +msgstr "Salvar" + +#: pages/editor.php:196 +msgid "Save Changes" +msgstr "Salvar alterações" + +#: pages/customization.php:59 pages/security.php:59 pages/settings.php:59 +msgid "Save Changes?" +msgstr "Salvar alterações?" + +#: my-style-anytime.php:145 pages/security.php:39 +msgid "Security" +msgstr "Segurança" + +#: pages/editor.php:102 +msgid "" +"Select below the CSS file who want to edit, and after complete just click on " +"the button to submit the change." +msgstr "" +"Selecione abaixo o arquivo CSS que deseja editar, e após concluído basta " +"clicar no botão para enviar a alteração." + +#: my-style-anytime.php:154 pages/settings.php:39 +msgid "Settings" +msgstr "Configurações" + +#: pages/backup.php:41 +msgid "Styles successfully backed up." +msgstr "Estilos copiados com sucesso." + +#: pages/backup.php:65 +msgid "Styles successfully restored." +msgstr "Estilos restaurados com sucesso." + +#: pages/editor.php:308 +msgid "Success" +msgstr "Sucesso" + +#: pages/general.php:47 +msgid "support sections" +msgstr "seções de suporte" + +#: pages/backup.php:95 +msgid "The backup file was successfully deleted." +msgstr "O arquivo de backup foi excluído com sucesso." + +#: pages/editor.php:46 +msgid "" +"The CSS file was not found because it does not exist, you can generate it by " +"clicking on the paint roller icon." +msgstr "" +"O arquivo CSS não foi encontrado porque não existe, você pode gerá-lo " +"clicando no ícone do rolo de pintura." + +#: pages/editor.php:309 +msgid "The file was updated successfully!" +msgstr "O arquivo foi atualizado com sucesso!" + +#: my-style-anytime.php:321 +msgid "Version" +msgstr "Versão" + +#: pages/editor.php:166 pages/editor.php:178 +msgid "Visitor Style" +msgstr "Estilo do visitante" + +#: pages/general.php:32 +msgid "We are honored that you decided to use our plugin." +msgstr "Estamos honrados por você ter decidido usar nosso plugin." + +#: pages/general.php:50 +msgid "" +"We would be very pleased if you supported the advancement of this plugin " +"with your " +msgstr "" +"Ficaríamos muito satisfeitos se você apoiasse o avanço deste plugin com seu" + +#: pages/general.php:29 +msgid "Welcome" +msgstr "Bem-vindo" + +#: my-style-anytime.php:313 +msgid "with" +msgstr "com" + +#: pages/settings.php:88 +msgid "" +"With this, you Disable Gutenberg on your site and back to the classic editor," +" no matter where you are." +msgstr "" +"Com isso, você desativa o Gutenberg no seu site e volta ao editor clássico, " +"não importa onde você esteja." + +#: pages/customization.php:65 pages/security.php:65 pages/settings.php:65 +msgid "Yes" +msgstr "Sim" + +#: pages/backup.php:345 +msgid "Yes, delete it!" +msgstr "Sim, exclua-o!" diff --git a/languages/my-style-anytime-ru_RU.mo b/languages/my-style-anytime-ru_RU.mo new file mode 100644 index 0000000..d92bfbc Binary files /dev/null and b/languages/my-style-anytime-ru_RU.mo differ diff --git a/languages/my-style-anytime-ru_RU.po b/languages/my-style-anytime-ru_RU.po new file mode 100644 index 0000000..a141792 --- /dev/null +++ b/languages/my-style-anytime-ru_RU.po @@ -0,0 +1,353 @@ +# Copyright (C) 2023 NewfieSoft +# This file is distributed under the same license as the My Style Anytime plugin. +msgid "" +msgstr "" +"Project-Id-Version: My Style Anytime\n" +"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/my-style-" +"anytime/\n" +"Last-Translator: \n" +"Language-Team: Russian\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"POT-Creation-Date: 2024-02-21 20:46+0000\n" +"PO-Revision-Date: 2024-02-22 21:37+0000\n" +"X-Domain: my-style-anytime\n" +"Language: ru_RU\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10 >= 2 && " +"n%10<=4 &&(n%100<10||n%100 >= 20)? 1 : 2);\n" +"X-Generator: Loco https://localise.biz/\n" +"X-Loco-Version: 2.6.6; wp-6.4.3" + +#: pages/backup.php:340 +msgid "After deleting you are not able to revert this file!" +msgstr "После удаления вы не сможете вернуть этот файл!" + +#: pages/customization.php:60 pages/security.php:60 pages/settings.php:60 +msgid "Are you sure you want to save changes?" +msgstr "Вы уверены, что хотите сохранить изменения?" + +#: pages/backup.php:339 +msgid "Are you sure?" +msgstr "Вы уверены?" + +#: pages/general.php:33 +msgid "" +"As you read before installing and activating this plugin with him, you can " +"create a custom CSS view using user roles." +msgstr "" +"Как вы прочитали перед установкой и активацией этого плагина с ним, вы " +"можете создать собственное представление CSS, используя роли пользователей." + +#: my-style-anytime.php:163 +msgid "Backup" +msgstr "Резервное копирование" + +#: pages/backup.php:280 +msgid "Backup / Restore" +msgstr "Восстановления резервной копии" + +#: pages/backup.php:288 +msgid "Backup Styles" +msgstr "Стили резервного копирования" + +#: pages/backup.php:40 +msgid "Backup Successful" +msgstr "Резервное копирование выполнено успешно" + +#: pages/backup.php:346 pages/customization.php:66 pages/security.php:66 +#: pages/settings.php:66 +msgid "Cancel" +msgstr "Отмена" + +#: pages/editor.php:100 +msgid "Code Editor" +msgstr "Редактор кода" + +#: my-style-anytime.php:248 +msgid "Community Support" +msgstr "Поддержка сообщества" + +#: my-style-anytime.php:136 pages/customization.php:39 +msgid "Customization" +msgstr "Кастомизация" + +#. Description of the plugin +msgid "" +"Customize public frontend or admin backend wp-admin with responsive using " +"the same CSS stylesheets file based on user roles type" +msgstr "" +"Настройте общедоступный интерфейс или серверную часть администратора с " +"помощью wp-admin, используя один и тот же файл таблиц стилей CSS в " +"зависимости от типа ролей пользователя." + +#: pages/backup.php:320 +msgid "Delete" +msgstr "Удалить" + +#: pages/backup.php:106 +msgid "Delete Failed" +msgstr "Удаление не удалось" + +#: pages/backup.php:94 +msgid "Delete Successful" +msgstr "Удалить успешно" + +#: pages/settings.php:18 +msgid "Disable Gutenberg Editor" +msgstr "Отключить редактор Гутенберга" + +#: pages/general.php:51 +msgid "donation" +msgstr "пожертвование" + +#: pages/general.php:55 +msgid "Enjoy your work" +msgstr "Наслаждайся работой" + +#: pages/editor.php:321 +msgid "Error" +msgstr "Ошибка" + +#: pages/editor.php:322 +msgid "Error updating file: " +msgstr "Ошибка обновления файла: " + +#: pages/backup.php:48 +msgid "Failed to create a backup." +msgstr "Не удалось создать резервную копию." + +#: pages/backup.php:107 +msgid "Failed to delete backup file." +msgstr "Не удалось удалить файл резервной копии." + +#: pages/backup.php:73 +msgid "Failed to restore styles." +msgstr "Не удалось восстановить стили." + +#: my-style-anytime.php:249 pages/general.php:45 +msgid "FAQ" +msgstr "Часто задаваемые вопросы" + +#: pages/general.php:44 +msgid "For help, you have our " +msgstr "Для помощи у вас есть наш" + +#: pages/customization.php:88 +msgid "" +"From the website title displayed in a browser tab and dashboard, and wp-" +"login.php for enhanced branding and security." +msgstr "" +"Из заголовка веб-сайта, отображаемого на вкладке браузера и панели " +"управления, а также из файла wp-login.php для улучшения брендинга и " +"безопасности." + +#: my-style-anytime.php:118 my-style-anytime.php:219 +msgid "General" +msgstr "Общий" + +#: pages/editor.php:146 +msgid "Generate CSS File for" +msgstr "Создать CSS-файл для" + +#: pages/editor.php:169 +msgid "Generate Visitor CSS File" +msgstr "Создать CSS-файл посетителя" + +#: pages/backup.php:282 +msgid "" +"Here you can create a backup anytime for all styles that you create and " +"restore, all archive files have been storage inside" +msgstr "" +"Здесь вы можете в любое время создать резервную копию для всех стилей, " +"которые вы создаете и восстанавливаете, все архивные файлы хранятся внутри." + +#: pages/general.php:31 +msgid "Hi," +msgstr "Привет," + +#. URI of the plugin +msgid "https://newfiesoft.com/wp-plugins/my-style-anytime/" +msgstr "https://newfiesoft.com/wp-plugins/my-style-anytime/" + +#. Author URI of the plugin +msgid "https://www.newfiesoft.com" +msgstr "https://www.newfiesoft.com" + +#: pages/general.php:34 +msgid "" +"If you like this plugin it would be nice from your side to give us your " +"rating and feedback." +msgstr "" +"Если вам нравится этот плагин, было бы неплохо с вашей стороны дать нам свою " +"оценку и отзыв." + +#. FontAwesome heart icon +#: my-style-anytime.php:315 +msgid "in Zürich, Switzerland" +msgstr "в Цюрихе, Швейцария" + +#: pages/backup.php:302 +msgid "List Backup zip files" +msgstr "Получение списка zip-файлов резервной копии" + +#: my-style-anytime.php:127 +msgid "Manage Style" +msgstr "Управление стилем" + +#. Name of the plugin +#: my-style-anytime.php:107 +msgid "My Style Anytime" +msgstr "My Style Anytime" + +#. Author of the plugin +msgid "NewfieSoft" +msgstr "NewfieSoft" + +#: pages/backup.php:42 pages/backup.php:66 pages/backup.php:74 +#: pages/backup.php:96 pages/backup.php:108 pages/editor.php:310 +#: pages/editor.php:323 +msgid "OK" +msgstr "Хорошо" + +#: pages/general.php:46 +msgid "part, or if that does not help you can write your question in the" +msgstr "часть, или если это не поможет, вы можете написать свой вопрос в" + +#: my-style-anytime.php:311 +msgid "Premium Tools for WordPress made by" +msgstr "Премиум-инструменты для WordPress от" + +#: my-style-anytime.php:250 +msgid "Ratings" +msgstr "Рейтинги" + +#: pages/security.php:18 +msgid "Remove meta generator" +msgstr "Удалить метагенератор" + +#: pages/customization.php:18 +msgid "Remove WordPress from the title" +msgstr "Удалить WordPress из заголовка" + +#: pages/security.php:88 +msgid "" +"Removing the meta generator, helps you to hide the version of WordPress that " +"you are using from potential attackers." +msgstr "" +"Удаление метагенератора поможет вам скрыть используемую вами версию " +"WordPress от потенциальных злоумышленников." + +#: pages/backup.php:72 +msgid "Restore Failed" +msgstr "Восстановление не удалось" + +#: pages/backup.php:313 +msgid "Restore Styles" +msgstr "Восстановить стили" + +#: pages/backup.php:64 +msgid "Restore Successful" +msgstr "Восстановить успешно" + +#: pages/customization.php:46 pages/security.php:46 pages/settings.php:46 +msgid "Save" +msgstr "Сохранять" + +#: pages/editor.php:196 +msgid "Save Changes" +msgstr "Сохранить изменения" + +#: pages/customization.php:59 pages/security.php:59 pages/settings.php:59 +msgid "Save Changes?" +msgstr "Сохранить изменения?" + +#: my-style-anytime.php:145 pages/security.php:39 +msgid "Security" +msgstr "Безопасность" + +#: pages/editor.php:102 +msgid "" +"Select below the CSS file who want to edit, and after complete just click on " +"the button to submit the change." +msgstr "" +"Выберите ниже файл CSS, который хотите отредактировать, и после завершения " +"просто нажмите кнопку, чтобы отправить изменение." + +#: my-style-anytime.php:154 pages/settings.php:39 +msgid "Settings" +msgstr "Настройки" + +#: pages/backup.php:41 +msgid "Styles successfully backed up." +msgstr "Стили успешно сохранены." + +#: pages/backup.php:65 +msgid "Styles successfully restored." +msgstr "Стили успешно восстановлены." + +#: pages/editor.php:308 +msgid "Success" +msgstr "Успех" + +#: pages/general.php:47 +msgid "support sections" +msgstr "разделы поддержки" + +#: pages/backup.php:95 +msgid "The backup file was successfully deleted." +msgstr "Файл резервной копии был успешно удален." + +#: pages/editor.php:46 +msgid "" +"The CSS file was not found because it does not exist, you can generate it by " +"clicking on the paint roller icon." +msgstr "" +"Файл CSS не найден, поскольку он не существует. Его можно создать, щелкнув " +"значок малярного валика." + +#: pages/editor.php:309 +msgid "The file was updated successfully!" +msgstr "Файл успешно обновлен!" + +#: my-style-anytime.php:321 +msgid "Version" +msgstr "Версия" + +#: pages/editor.php:166 pages/editor.php:178 +msgid "Visitor Style" +msgstr "Стиль посетителя" + +#: pages/general.php:32 +msgid "We are honored that you decided to use our plugin." +msgstr "Для нас большая честь, что вы решили использовать наш плагин." + +#: pages/general.php:50 +msgid "" +"We would be very pleased if you supported the advancement of this plugin " +"with your " +msgstr "Мы будем очень рады, если вы поддержите развитие этого плагина своей" + +#: pages/general.php:29 +msgid "Welcome" +msgstr "Добро пожаловать" + +#: my-style-anytime.php:313 +msgid "with" +msgstr "с" + +#: pages/settings.php:88 +msgid "" +"With this, you Disable Gutenberg on your site and back to the classic editor," +" no matter where you are." +msgstr "" +"Благодаря этому вы отключите Гутенберг на своем сайте и вернетесь к " +"классическому редактору, где бы вы ни находились." + +#: pages/customization.php:65 pages/security.php:65 pages/settings.php:65 +msgid "Yes" +msgstr "Да" + +#: pages/backup.php:345 +msgid "Yes, delete it!" +msgstr "Да, удалите!" diff --git a/languages/my-style-anytime-sr_RS.mo b/languages/my-style-anytime-sr_RS.mo new file mode 100644 index 0000000..bee5571 Binary files /dev/null and b/languages/my-style-anytime-sr_RS.mo differ diff --git a/languages/my-style-anytime-sr_RS.po b/languages/my-style-anytime-sr_RS.po new file mode 100644 index 0000000..1f9b78a --- /dev/null +++ b/languages/my-style-anytime-sr_RS.po @@ -0,0 +1,352 @@ +# Copyright (C) 2023 NewfieSoft +# This file is distributed under the same license as the My Style Anytime plugin. +msgid "" +msgstr "" +"Project-Id-Version: My Style Anytime\n" +"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/my-style-" +"anytime/\n" +"Last-Translator: \n" +"Language-Team: Serbian\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"POT-Creation-Date: 2023-02-24 23:29+0200\n" +"PO-Revision-Date: 2024-02-22 21:38+0000\n" +"X-Domain: my-style-anytime\n" +"Language: sr_RS\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10 >= 2 && " +"n%10<=4 &&(n%100<10||n%100 >= 20)? 1 : 2);\n" +"X-Generator: Loco https://localise.biz/\n" +"X-Loco-Version: 2.6.6; wp-6.4.3" + +#: pages/backup.php:340 +msgid "After deleting you are not able to revert this file!" +msgstr "Након брисања не можете вратити ову датотеку!" + +#: pages/customization.php:60 pages/security.php:60 pages/settings.php:60 +msgid "Are you sure you want to save changes?" +msgstr "Да ли сте сигурни да желите да сачувате промене?" + +#: pages/backup.php:339 +msgid "Are you sure?" +msgstr "Јеси ли сигуран?" + +#: pages/general.php:33 +msgid "" +"As you read before installing and activating this plugin with him, you can " +"create a custom CSS view using user roles." +msgstr "" +"Док сте читали пре инсталирања и активације овог додатка са њим, можете " +"креирати прилагођени ЦСС приказ користећи корисничке улоге." + +#: my-style-anytime.php:163 +msgid "Backup" +msgstr "Резервна копија" + +#: pages/backup.php:280 +msgid "Backup / Restore" +msgstr "Резервна копија / Враћање копије" + +#: pages/backup.php:288 +msgid "Backup Styles" +msgstr "Направи резервну копију" + +#: pages/backup.php:40 +msgid "Backup Successful" +msgstr "Резервна копија је успела" + +#: pages/backup.php:346 pages/customization.php:66 pages/security.php:66 +#: pages/settings.php:66 +msgid "Cancel" +msgstr "Отказати" + +#: pages/editor.php:100 +msgid "Code Editor" +msgstr "Едитор кода" + +#: my-style-anytime.php:248 +msgid "Community Support" +msgstr "Подршка Заједнице" + +#: my-style-anytime.php:136 pages/customization.php:39 +msgid "Customization" +msgstr "Прилагођавања" + +#. Description of the plugin +msgid "" +"Customize public frontend or admin backend wp-admin with responsive using " +"the same CSS stylesheets file based on user roles type" +msgstr "" +"Прилагодите јавни фронтенд или админ бацкенд вп-админ са одзивом користећи " +"исту датотеку ЦСС стилова на основу типа корисничких улога" + +#: pages/backup.php:320 +msgid "Delete" +msgstr "Избриши" + +#: pages/backup.php:106 +msgid "Delete Failed" +msgstr "Брисање није успело" + +#: pages/backup.php:94 +msgid "Delete Successful" +msgstr "Брисање успешно" + +#: pages/settings.php:18 +msgid "Disable Gutenberg Editor" +msgstr "Онемогућите Гутенберг Едитор" + +#: pages/general.php:51 +msgid "donation" +msgstr "донацијом" + +#: pages/general.php:55 +msgid "Enjoy your work" +msgstr "Уживајте у свом раду" + +#: pages/editor.php:321 +msgid "Error" +msgstr "Грешка" + +#: pages/editor.php:322 +msgid "Error updating file: " +msgstr "Грешка при ажурирању датотеке: " + +#: pages/backup.php:48 +msgid "Failed to create a backup." +msgstr "Прављење резервне копије није успело." + +#: pages/backup.php:107 +msgid "Failed to delete backup file." +msgstr "Брисање резервне копије датотеке није успело." + +#: pages/backup.php:73 +msgid "Failed to restore styles." +msgstr "Враћање стилова није успело." + +#: my-style-anytime.php:249 pages/general.php:45 +msgid "FAQ" +msgstr "ЧПП" + +#: pages/general.php:44 +msgid "For help, you have our " +msgstr "За помоћ, имате наш део" + +#: pages/customization.php:88 +msgid "" +"From the website title displayed in a browser tab and dashboard, and wp-" +"login.php for enhanced branding and security." +msgstr "" +"У наслову веб локације приказаног на картици прегледача и контролној табли и " +"wp-login.php за побољшано брендирање и безбедност." + +#: my-style-anytime.php:118 my-style-anytime.php:219 +msgid "General" +msgstr "Oпште" + +#: pages/editor.php:146 +msgid "Generate CSS File for" +msgstr "Генеришите ЦСС датотеку за" + +#: pages/editor.php:169 +msgid "Generate Visitor CSS File" +msgstr "Генеришите ЦСС датотеку посетилаца" + +#: pages/backup.php:282 +msgid "" +"Here you can create a backup anytime for all styles that you create and " +"restore, all archive files have been storage inside" +msgstr "" +"Овде можете да направите резервну копију у било ком тренутку за све стилове " +"које креирате и вратите, све архивске датотеке су смештене унутра" + +#: pages/general.php:31 +msgid "Hi," +msgstr "Здраво," + +#. URI of the plugin +msgid "https://newfiesoft.com/wp-plugins/my-style-anytime/" +msgstr "https://newfiesoft.com/wp-plugins/my-style-anytime/" + +#. Author URI of the plugin +msgid "https://www.newfiesoft.com" +msgstr "https://www.newfiesoft.com" + +#: pages/general.php:34 +msgid "" +"If you like this plugin it would be nice from your side to give us your " +"rating and feedback." +msgstr "" +"Ако вам се свиђа овај додатак, било би лепо са ваше стране да нам дате своју " +"оцену и повратне информације." + +#. FontAwesome heart icon +#: my-style-anytime.php:315 +msgid "in Zürich, Switzerland" +msgstr "у Цириху, Швајцарска" + +#: pages/backup.php:302 +msgid "List Backup zip files" +msgstr "Листа резервних зип датотека" + +#: my-style-anytime.php:127 +msgid "Manage Style" +msgstr "Управљање стиловима" + +#. Name of the plugin +#: my-style-anytime.php:107 +msgid "My Style Anytime" +msgstr "My Style Anytime" + +#. Author of the plugin +msgid "NewfieSoft" +msgstr "NewfieSoft" + +#: pages/backup.php:42 pages/backup.php:66 pages/backup.php:74 +#: pages/backup.php:96 pages/backup.php:108 pages/editor.php:310 +#: pages/editor.php:323 +msgid "OK" +msgstr "У реду" + +#: pages/general.php:46 +msgid "part, or if that does not help you can write your question in the" +msgstr "" +"са честим питањима, или ако то не помогне, можете да напишете своје питање у" + +#: my-style-anytime.php:311 +msgid "Premium Tools for WordPress made by" +msgstr "Премиум алати за ВордПрес направљени од стране" + +#: my-style-anytime.php:250 +msgid "Ratings" +msgstr "Оцене" + +#: pages/security.php:18 +msgid "Remove meta generator" +msgstr "Уклоните мета генератор" + +#: pages/customization.php:18 +msgid "Remove WordPress from the title" +msgstr "Уклоните ВордПрес из наслова" + +#: pages/security.php:88 +msgid "" +"Removing the meta generator, helps you to hide the version of WordPress that " +"you are using from potential attackers." +msgstr "" +"Уклањање мета генератора помаже вам да сакријете верзију ВордПрес-а коју " +"користите од потенцијалних нападача." + +#: pages/backup.php:72 +msgid "Restore Failed" +msgstr "Враћање није успело" + +#: pages/backup.php:313 +msgid "Restore Styles" +msgstr "Враћање Стиловa" + +#: pages/backup.php:64 +msgid "Restore Successful" +msgstr "Враћање је успешно" + +#: pages/customization.php:46 pages/security.php:46 pages/settings.php:46 +msgid "Save" +msgstr "Сачувај" + +#: pages/editor.php:196 +msgid "Save Changes" +msgstr "Сачувај измене" + +#: pages/customization.php:59 pages/security.php:59 pages/settings.php:59 +msgid "Save Changes?" +msgstr "Сачувај измене?" + +#: my-style-anytime.php:145 pages/security.php:39 +msgid "Security" +msgstr "Безбедност" + +#: pages/editor.php:102 +msgid "" +"Select below the CSS file who want to edit, and after complete just click on " +"the button to submit the change." +msgstr "" +"Изаберите испод ЦСС датотеку коју желите да уредите, а након завршетка само " +"кликните на дугме да пошаљете измену." + +#: my-style-anytime.php:154 pages/settings.php:39 +msgid "Settings" +msgstr "Подешавања" + +#: pages/backup.php:41 +msgid "Styles successfully backed up." +msgstr "Сигурносна копија стилова је успешно направљена." + +#: pages/backup.php:65 +msgid "Styles successfully restored." +msgstr "Стилови су успешно враћени." + +#: pages/editor.php:308 +msgid "Success" +msgstr "Успешно" + +#: pages/general.php:47 +msgid "support sections" +msgstr "одељцима за подршку" + +#: pages/backup.php:95 +msgid "The backup file was successfully deleted." +msgstr "Датотека резервне копије је успешно избрисана." + +#: pages/editor.php:46 +msgid "" +"The CSS file was not found because it does not exist, you can generate it by " +"clicking on the paint roller icon." +msgstr "" +"ЦСС датотека није пронађена јер не постоји, можете је генерисати кликом на " +"икону ваљка за фарбање." + +#: pages/editor.php:309 +msgid "The file was updated successfully!" +msgstr "Датотека је успешно ажурирана!" + +#: my-style-anytime.php:321 +msgid "Version" +msgstr "Верзија" + +#: pages/editor.php:166 pages/editor.php:178 +msgid "Visitor Style" +msgstr "Посетилац стил" + +#: pages/general.php:32 +msgid "We are honored that you decided to use our plugin." +msgstr "Почаствовани смо што сте одлучили да користите наш додатак." + +#: pages/general.php:50 +msgid "" +"We would be very pleased if you supported the advancement of this plugin " +"with your " +msgstr "Биће нам веома драго ако подржите унапређење овог додатка својом" + +#: pages/general.php:29 +msgid "Welcome" +msgstr "Добродошли" + +#: my-style-anytime.php:313 +msgid "with" +msgstr "са" + +#: pages/settings.php:88 +msgid "" +"With this, you Disable Gutenberg on your site and back to the classic editor," +" no matter where you are." +msgstr "" +"Овим ћете онемогућити Гутенберга на свом сајту и вратити се у класични " +"уређивач, без обзира где се налазите." + +#: pages/customization.php:65 pages/security.php:65 pages/settings.php:65 +msgid "Yes" +msgstr "Да" + +#: pages/backup.php:345 +msgid "Yes, delete it!" +msgstr "Да, избришите!" diff --git a/languages/my-style-anytime-tr_TR.mo b/languages/my-style-anytime-tr_TR.mo new file mode 100644 index 0000000..5086c0b Binary files /dev/null and b/languages/my-style-anytime-tr_TR.mo differ diff --git a/languages/my-style-anytime-tr_TR.po b/languages/my-style-anytime-tr_TR.po new file mode 100644 index 0000000..87532f0 --- /dev/null +++ b/languages/my-style-anytime-tr_TR.po @@ -0,0 +1,351 @@ +# Copyright (C) 2023 NewfieSoft +# This file is distributed under the same license as the My Style Anytime plugin. +msgid "" +msgstr "" +"Project-Id-Version: My Style Anytime\n" +"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/my-style-" +"anytime/\n" +"Last-Translator: \n" +"Language-Team: Turkish\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"POT-Creation-Date: 2024-02-21 20:46+0000\n" +"PO-Revision-Date: 2024-02-22 21:39+0000\n" +"X-Domain: my-style-anytime\n" +"Language: tr_TR\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Loco https://localise.biz/\n" +"X-Loco-Version: 2.6.6; wp-6.4.3" + +#: pages/backup.php:340 +msgid "After deleting you are not able to revert this file!" +msgstr "Bu dosyayı sildikten sonra geri alamazsınız!" + +#: pages/customization.php:60 pages/security.php:60 pages/settings.php:60 +msgid "Are you sure you want to save changes?" +msgstr "Değişiklikleri kaydetmek istediğinizden emin misiniz?" + +#: pages/backup.php:339 +msgid "Are you sure?" +msgstr "Emin misin?" + +#: pages/general.php:33 +msgid "" +"As you read before installing and activating this plugin with him, you can " +"create a custom CSS view using user roles." +msgstr "" +"Bu eklentiyi onunla kurup etkinleştirmeden önce okuduğunuz gibi, kullanıcı " +"rollerini kullanarak özel bir CSS görünümü oluşturabilirsiniz." + +#: my-style-anytime.php:163 +msgid "Backup" +msgstr "Destek olmak" + +#: pages/backup.php:280 +msgid "Backup / Restore" +msgstr "Yedekleme / Geri Yükleme" + +#: pages/backup.php:288 +msgid "Backup Styles" +msgstr "Yedekleme Stilleri" + +#: pages/backup.php:40 +msgid "Backup Successful" +msgstr "Yedekleme Başarılı" + +#: pages/backup.php:346 pages/customization.php:66 pages/security.php:66 +#: pages/settings.php:66 +msgid "Cancel" +msgstr "İptal etmek" + +#: pages/editor.php:100 +msgid "Code Editor" +msgstr "Kod Düzenleyici" + +#: my-style-anytime.php:248 +msgid "Community Support" +msgstr "Topluluk Desteği" + +#: my-style-anytime.php:136 pages/customization.php:39 +msgid "Customization" +msgstr "Özelleştirme" + +#. Description of the plugin +msgid "" +"Customize public frontend or admin backend wp-admin with responsive using " +"the same CSS stylesheets file based on user roles type" +msgstr "" +"Kullanıcı rolleri türüne göre aynı CSS stil sayfaları dosyasını kullanarak " +"genel ön ucu veya yönetici arka ucunu wp-admin'i duyarlı olarak özelleştirin" + +#: pages/backup.php:320 +msgid "Delete" +msgstr "Silmek" + +#: pages/backup.php:106 +msgid "Delete Failed" +msgstr "Silinemedi" + +#: pages/backup.php:94 +msgid "Delete Successful" +msgstr "Başarılı Sil" + +#: pages/settings.php:18 +msgid "Disable Gutenberg Editor" +msgstr "Gutenberg Editör'ü devre dışı bırakın" + +#: pages/general.php:51 +msgid "donation" +msgstr "bağış" + +#: pages/general.php:55 +msgid "Enjoy your work" +msgstr "İşinin tadını çıkar" + +#: pages/editor.php:321 +msgid "Error" +msgstr "Hata" + +#: pages/editor.php:322 +msgid "Error updating file: " +msgstr "Dosya güncellenirken hata oluştu: " + +#: pages/backup.php:48 +msgid "Failed to create a backup." +msgstr "Yedekleme oluşturulamadı." + +#: pages/backup.php:107 +msgid "Failed to delete backup file." +msgstr "Yedekleme dosyası silinemedi." + +#: pages/backup.php:73 +msgid "Failed to restore styles." +msgstr "Stiller geri yüklenemedi." + +#: my-style-anytime.php:249 pages/general.php:45 +msgid "FAQ" +msgstr "SSS" + +#: pages/general.php:44 +msgid "For help, you have our " +msgstr "Yardım için bizim" + +#: pages/customization.php:88 +msgid "" +"From the website title displayed in a browser tab and dashboard, and wp-" +"login.php for enhanced branding and security." +msgstr "" +"Tarayıcı sekmesinde ve kontrol panelinde görüntülenen web sitesi başlığından " +"ve gelişmiş markalama ve güvenlik için wp-login.php'den." + +#: my-style-anytime.php:118 my-style-anytime.php:219 +msgid "General" +msgstr "Genel" + +#: pages/editor.php:146 +msgid "Generate CSS File for" +msgstr "Şunun için CSS Dosyası Oluştur:" + +#: pages/editor.php:169 +msgid "Generate Visitor CSS File" +msgstr "Ziyaretçi CSS Dosyası Oluştur" + +#: pages/backup.php:282 +msgid "" +"Here you can create a backup anytime for all styles that you create and " +"restore, all archive files have been storage inside" +msgstr "" +"Burada, oluşturduğunuz ve geri yüklediğiniz tüm stiller için istediğiniz " +"zaman bir yedek oluşturabilirsiniz; tüm arşiv dosyaları içeride " +"depolanmıştır." + +#: pages/general.php:31 +msgid "Hi," +msgstr "Merhaba," + +#. URI of the plugin +msgid "https://newfiesoft.com/wp-plugins/my-style-anytime/" +msgstr "https://newfiesoft.com/wp-plugins/my-style-anytime/" + +#. Author URI of the plugin +msgid "https://www.newfiesoft.com" +msgstr "https://www.newfiesoft.com" + +#: pages/general.php:34 +msgid "" +"If you like this plugin it would be nice from your side to give us your " +"rating and feedback." +msgstr "" +"Bu eklentiyi beğendiyseniz bize puanınızı ve geri bildiriminizi vermeniz " +"güzel olur." + +#. FontAwesome heart icon +#: my-style-anytime.php:315 +msgid "in Zürich, Switzerland" +msgstr "İsviçre'nin Zürih şehrinde" + +#: pages/backup.php:302 +msgid "List Backup zip files" +msgstr "Yedekleme zip dosyalarını listeleme" + +#: my-style-anytime.php:127 +msgid "Manage Style" +msgstr "Stili Yönet" + +#. Name of the plugin +#: my-style-anytime.php:107 +msgid "My Style Anytime" +msgstr "My Style Anytime" + +#. Author of the plugin +msgid "NewfieSoft" +msgstr "NewfieSoft" + +#: pages/backup.php:42 pages/backup.php:66 pages/backup.php:74 +#: pages/backup.php:96 pages/backup.php:108 pages/editor.php:310 +#: pages/editor.php:323 +msgid "OK" +msgstr "Tamam" + +#: pages/general.php:46 +msgid "part, or if that does not help you can write your question in the" +msgstr "Bu kısım yardımcı olmazsa sorunuzu buraya yazabilirsiniz." + +#: my-style-anytime.php:311 +msgid "Premium Tools for WordPress made by" +msgstr "WordPress için Premium Araçlar tarafından yapılmıştır" + +#: my-style-anytime.php:250 +msgid "Ratings" +msgstr "Derecelendirmeler" + +#: pages/security.php:18 +msgid "Remove meta generator" +msgstr "Meta oluşturucuyu kaldır" + +#: pages/customization.php:18 +msgid "Remove WordPress from the title" +msgstr "WordPress'i başlıktan kaldırın" + +#: pages/security.php:88 +msgid "" +"Removing the meta generator, helps you to hide the version of WordPress that " +"you are using from potential attackers." +msgstr "" +"Meta oluşturucuyu kaldırmak, kullandığınız WordPress sürümünü potansiyel " +"saldırganlardan gizlemenize yardımcı olur." + +#: pages/backup.php:72 +msgid "Restore Failed" +msgstr "Geri Yükleme Başarısız Oldu" + +#: pages/backup.php:313 +msgid "Restore Styles" +msgstr "Stilleri Geri Yükle" + +#: pages/backup.php:64 +msgid "Restore Successful" +msgstr "Başarılı Geri Yükleme" + +#: pages/customization.php:46 pages/security.php:46 pages/settings.php:46 +msgid "Save" +msgstr "Kaydetmek" + +#: pages/editor.php:196 +msgid "Save Changes" +msgstr "Değişiklikleri Kaydet" + +#: pages/customization.php:59 pages/security.php:59 pages/settings.php:59 +msgid "Save Changes?" +msgstr "Değişiklikleri Kaydet?" + +#: my-style-anytime.php:145 pages/security.php:39 +msgid "Security" +msgstr "Güvenlik" + +#: pages/editor.php:102 +msgid "" +"Select below the CSS file who want to edit, and after complete just click on " +"the button to submit the change." +msgstr "" +"Aşağıdan düzenlemek istediğiniz CSS dosyasını seçin ve tamamlandıktan sonra " +"değişikliği göndermek için düğmeye tıklayın." + +#: my-style-anytime.php:154 pages/settings.php:39 +msgid "Settings" +msgstr "Ayarlar" + +#: pages/backup.php:41 +msgid "Styles successfully backed up." +msgstr "Stiller başarıyla yedeklendi." + +#: pages/backup.php:65 +msgid "Styles successfully restored." +msgstr "Stiller başarıyla geri yüklendi." + +#: pages/editor.php:308 +msgid "Success" +msgstr "Başarı" + +#: pages/general.php:47 +msgid "support sections" +msgstr "destek bölümleri" + +#: pages/backup.php:95 +msgid "The backup file was successfully deleted." +msgstr "Yedekleme dosyası başarıyla silindi." + +#: pages/editor.php:46 +msgid "" +"The CSS file was not found because it does not exist, you can generate it by " +"clicking on the paint roller icon." +msgstr "" +"CSS dosyası mevcut olmadığından bulunamadı, boya rulosu ikonuna tıklayarak " +"oluşturabilirsiniz." + +#: pages/editor.php:309 +msgid "The file was updated successfully!" +msgstr "Dosya başarıyla güncellendi!" + +#: my-style-anytime.php:321 +msgid "Version" +msgstr "Sürüm" + +#: pages/editor.php:166 pages/editor.php:178 +msgid "Visitor Style" +msgstr "Ziyaretçi Stili" + +#: pages/general.php:32 +msgid "We are honored that you decided to use our plugin." +msgstr "Eklentimizi kullanmaya karar vermenizden onur duyuyoruz." + +#: pages/general.php:50 +msgid "" +"We would be very pleased if you supported the advancement of this plugin " +"with your " +msgstr "Bu eklentinin geliştirilmesine destek verirseniz çok memnun oluruz." + +#: pages/general.php:29 +msgid "Welcome" +msgstr "Hoş geldin" + +#: my-style-anytime.php:313 +msgid "with" +msgstr "ile" + +#: pages/settings.php:88 +msgid "" +"With this, you Disable Gutenberg on your site and back to the classic editor," +" no matter where you are." +msgstr "" +"Bununla, nerede olursanız olun sitenizde Gutenberg'i devre dışı bırakır ve " +"klasik düzenleyiciye geri dönersiniz." + +#: pages/customization.php:65 pages/security.php:65 pages/settings.php:65 +msgid "Yes" +msgstr "Evet" + +#: pages/backup.php:345 +msgid "Yes, delete it!" +msgstr "Evet, silin!" diff --git a/languages/my-style-anytime.pot b/languages/my-style-anytime.pot new file mode 100644 index 0000000..4c794ef --- /dev/null +++ b/languages/my-style-anytime.pot @@ -0,0 +1,332 @@ +# Copyright (C) 2023 NewfieSoft +# This file is distributed under the same license as the My Style Anytime plugin. +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: My Style Anytime\n" +"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/my-style-" +"anytime/\n" +"Last-Translator: NewfieSoft \n" +"Language-Team: NewfieSoft \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"POT-Creation-Date: 2024-02-22 21:30+0000\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"X-Domain: my-style-anytime\n" +"Language: \n" +"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" +"X-Generator: Loco https://localise.biz/" + +#: pages/backup.php:340 +msgid "After deleting you are not able to revert this file!" +msgstr "" + +#: pages/customization.php:60 pages/security.php:60 pages/settings.php:60 +msgid "Are you sure you want to save changes?" +msgstr "" + +#: pages/backup.php:339 +msgid "Are you sure?" +msgstr "" + +#: pages/general.php:33 +msgid "" +"As you read before installing and activating this plugin with him, you can " +"create a custom CSS view using user roles." +msgstr "" + +#: my-style-anytime.php:163 +msgid "Backup" +msgstr "" + +#: pages/backup.php:280 +msgid "Backup / Restore" +msgstr "" + +#: pages/backup.php:288 +msgid "Backup Styles" +msgstr "" + +#: pages/backup.php:40 +msgid "Backup Successful" +msgstr "" + +#: pages/backup.php:346 pages/customization.php:66 pages/security.php:66 +#: pages/settings.php:66 +msgid "Cancel" +msgstr "" + +#: pages/editor.php:100 +msgid "Code Editor" +msgstr "" + +#: my-style-anytime.php:248 +msgid "Community Support" +msgstr "" + +#: my-style-anytime.php:136 pages/customization.php:39 +msgid "Customization" +msgstr "" + +#. Description of the plugin +msgid "" +"Customize public frontend or admin backend wp-admin with responsive using " +"the same CSS stylesheets file based on user roles type" +msgstr "" + +#: pages/backup.php:320 +msgid "Delete" +msgstr "" + +#: pages/backup.php:106 +msgid "Delete Failed" +msgstr "" + +#: pages/backup.php:94 +msgid "Delete Successful" +msgstr "" + +#: pages/settings.php:18 +msgid "Disable Gutenberg Editor" +msgstr "" + +#: pages/general.php:51 +msgid "donation" +msgstr "" + +#: pages/general.php:55 +msgid "Enjoy your work" +msgstr "" + +#: pages/editor.php:321 +msgid "Error" +msgstr "" + +#: pages/editor.php:322 +msgid "Error updating file: " +msgstr "" + +#: pages/backup.php:48 +msgid "Failed to create a backup." +msgstr "" + +#: pages/backup.php:107 +msgid "Failed to delete backup file." +msgstr "" + +#: pages/backup.php:73 +msgid "Failed to restore styles." +msgstr "" + +#: my-style-anytime.php:249 pages/general.php:45 +msgid "FAQ" +msgstr "" + +#: pages/general.php:44 +msgid "For help, you have our " +msgstr "" + +#: pages/customization.php:88 +msgid "" +"From the website title displayed in a browser tab and dashboard, and wp-" +"login.php for enhanced branding and security." +msgstr "" + +#: my-style-anytime.php:118 my-style-anytime.php:219 +msgid "General" +msgstr "" + +#: pages/editor.php:146 +msgid "Generate CSS File for" +msgstr "" + +#: pages/editor.php:169 +msgid "Generate Visitor CSS File" +msgstr "" + +#: pages/backup.php:282 +msgid "" +"Here you can create a backup anytime for all styles that you create and " +"restore, all archive files have been storage inside" +msgstr "" + +#: pages/general.php:31 +msgid "Hi," +msgstr "" + +#. URI of the plugin +msgid "https://newfiesoft.com/wp-plugins/my-style-anytime/" +msgstr "" + +#. Author URI of the plugin +msgid "https://www.newfiesoft.com" +msgstr "" + +#: pages/general.php:34 +msgid "" +"If you like this plugin it would be nice from your side to give us your " +"rating and feedback." +msgstr "" + +#. FontAwesome heart icon +#: my-style-anytime.php:315 +msgid "in Zürich, Switzerland" +msgstr "" + +#: pages/backup.php:302 +msgid "List Backup zip files" +msgstr "" + +#: my-style-anytime.php:127 +msgid "Manage Style" +msgstr "" + +#. Name of the plugin +#: my-style-anytime.php:107 +msgid "My Style Anytime" +msgstr "" + +#. Author of the plugin +msgid "NewfieSoft" +msgstr "" + +#: pages/backup.php:42 pages/backup.php:66 pages/backup.php:74 +#: pages/backup.php:96 pages/backup.php:108 pages/editor.php:310 +#: pages/editor.php:323 +msgid "OK" +msgstr "" + +#: pages/general.php:46 +msgid "part, or if that does not help you can write your question in the" +msgstr "" + +#: my-style-anytime.php:311 +msgid "Premium Tools for WordPress made by" +msgstr "" + +#: my-style-anytime.php:250 +msgid "Ratings" +msgstr "" + +#: pages/security.php:18 +msgid "Remove meta generator" +msgstr "" + +#: pages/customization.php:18 +msgid "Remove WordPress from the title" +msgstr "" + +#: pages/security.php:88 +msgid "" +"Removing the meta generator, helps you to hide the version of WordPress that " +"you are using from potential attackers." +msgstr "" + +#: pages/backup.php:72 +msgid "Restore Failed" +msgstr "" + +#: pages/backup.php:313 +msgid "Restore Styles" +msgstr "" + +#: pages/backup.php:64 +msgid "Restore Successful" +msgstr "" + +#: pages/customization.php:46 pages/security.php:46 pages/settings.php:46 +msgid "Save" +msgstr "" + +#: pages/editor.php:196 +msgid "Save Changes" +msgstr "" + +#: pages/customization.php:59 pages/security.php:59 pages/settings.php:59 +msgid "Save Changes?" +msgstr "" + +#: my-style-anytime.php:145 pages/security.php:39 +msgid "Security" +msgstr "" + +#: pages/editor.php:102 +msgid "" +"Select below the CSS file who want to edit, and after complete just click on " +"the button to submit the change." +msgstr "" + +#: my-style-anytime.php:154 pages/settings.php:39 +msgid "Settings" +msgstr "" + +#: pages/backup.php:41 +msgid "Styles successfully backed up." +msgstr "" + +#: pages/backup.php:65 +msgid "Styles successfully restored." +msgstr "" + +#: pages/editor.php:308 +msgid "Success" +msgstr "" + +#: pages/general.php:47 +msgid "support sections" +msgstr "" + +#: pages/backup.php:95 +msgid "The backup file was successfully deleted." +msgstr "" + +#: pages/editor.php:46 +msgid "" +"The CSS file was not found because it does not exist, you can generate it by " +"clicking on the paint roller icon." +msgstr "" + +#: pages/editor.php:309 +msgid "The file was updated successfully!" +msgstr "" + +#: my-style-anytime.php:321 +msgid "Version" +msgstr "" + +#: pages/editor.php:166 pages/editor.php:178 +msgid "Visitor Style" +msgstr "" + +#: pages/general.php:32 +msgid "We are honored that you decided to use our plugin." +msgstr "" + +#: pages/general.php:50 +msgid "" +"We would be very pleased if you supported the advancement of this plugin " +"with your " +msgstr "" + +#: pages/general.php:29 +msgid "Welcome" +msgstr "" + +#: my-style-anytime.php:313 +msgid "with" +msgstr "" + +#: pages/settings.php:88 +msgid "" +"With this, you Disable Gutenberg on your site and back to the classic editor," +" no matter where you are." +msgstr "" + +#: pages/customization.php:65 pages/security.php:65 pages/settings.php:65 +msgid "Yes" +msgstr "" + +#: pages/backup.php:345 +msgid "Yes, delete it!" +msgstr "" diff --git a/my-style-anytime.php b/my-style-anytime.php index 995c705..2367f7e 100644 --- a/my-style-anytime.php +++ b/my-style-anytime.php @@ -6,7 +6,7 @@ Description: Customize public frontend or admin backend wp-admin with responsive using the same CSS stylesheets file based on user roles type -Version: 1.4.1 +Version: 1.5.0 Author: NewfieSoft Author URI: https://www.newfiesoft.com Donate link: https://newfiesoft.com/donate @@ -27,60 +27,60 @@ //// Get plugin dirname basename how can just call this short in all current and future functions -if (!function_exists('get_my_style_anytime_directory_name')) { -function get_my_style_anytime_directory_name(): string { +if (!function_exists('my_style_anytime_directory_name')) { +function my_style_anytime_directory_name(): string { return dirname(plugin_basename(__FILE__)); } } -$plugin_dirname = get_my_style_anytime_directory_name(); +$plugin_dirname = my_style_anytime_directory_name(); //echo $plugin_dirname . "\n"; //==> result is my-style-anytime //// Get plugin basename how can just call this short in all current and future functions -if (!function_exists('get_my_style_anytime_directory')) { -function get_my_style_anytime_directory(): string { +if (!function_exists('my_style_anytime_directory')) { +function my_style_anytime_directory(): string { return plugin_basename(__FILE__); } } -$plugin_basename = get_my_style_anytime_directory(); +$plugin_basename = my_style_anytime_directory(); //echo $plugin_basename . "\n"; //==> result is my-style-anytime/my-style-anytime.php //// Get plugin dir name how can just call this short in all current and future functions -if (!function_exists('get_my_style_anytime_plugin_dir_path')) { -function get_my_style_anytime_plugin_dir_path(): string { +if (!function_exists('my_style_anytime_plugin_dir_path')) { +function my_style_anytime_plugin_dir_path(): string { return plugin_dir_path( __FILE__ ); } } -$plugin_dir_path = get_my_style_anytime_plugin_dir_path(); +$plugin_dir_path = my_style_anytime_plugin_dir_path(); //echo $plugin_dir_path . "\n"; //==> /home/username/public_html/wp-content/plugins/my-style-anytime/ //// Get plugin dir url name how can just call this short in all current and future functions -if (!function_exists('get_my_style_anytime_directory_url')) { -function get_my_style_anytime_directory_url(): string { +if (!function_exists('my_style_anytime_directory_url')) { +function my_style_anytime_directory_url(): string { return plugin_dir_url(__FILE__); } } -$plugin_dir_url = get_my_style_anytime_directory_url(); +$plugin_dir_url = my_style_anytime_directory_url(); //echo $plugin_dir_url . "\n"; //==> result is https://newfiesoft.com/wp-content/plugins/my-style-anytime/ //// Get plugin data how can just call this short in all current and future functions -if (!function_exists('get_my_style_anytime_plugin_data')) { -function get_my_style_anytime_plugin_data(): array { +if (!function_exists('my_style_anytime_plugin_data')) { +function my_style_anytime_plugin_data(): array { - $plugin_main_file = get_my_style_anytime_plugin_dir_path() . 'my-style-anytime.php'; + $plugin_main_file = my_style_anytime_plugin_dir_path() . 'my-style-anytime.php'; return get_plugin_data($plugin_main_file); } } -$plugin_plugin_data = get_my_style_anytime_plugin_data(); +$plugin_plugin_data = my_style_anytime_plugin_data(); //var_dump($plugin_plugin_data); //==> sho plugin informations like Name, PluginURI, Version and many more @@ -91,7 +91,7 @@ function get_my_style_anytime_plugin_data(): array { function mmysat_plugin_load_text_domain(): void { // Get plugin dirname basename -$plugin_dirname = get_my_style_anytime_directory_name(); +$plugin_dirname = my_style_anytime_directory_name(); // Load the plugin text domain load_plugin_textdomain('my-style-anytime', false, $plugin_dirname . '/languages'); @@ -236,7 +236,7 @@ function mysat_custom_link_options_plugin( $actions ): array { function mysat_custom_link_action_plugin( $links_array, $mysat_plugin_name ) { // Get plugin basename - $plugin_basename = get_my_style_anytime_directory(); + $plugin_basename = my_style_anytime_directory(); if ( $mysat_plugin_name === $plugin_basename ) { @@ -268,10 +268,10 @@ function mysat_custom_link_action_plugin( $links_array, $mysat_plugin_name ) { function mysat_customize_admin_footer_script(): void { // Get plugin dir url name - $plugin_dir_url = get_my_style_anytime_directory_url(); + $plugin_dir_url = my_style_anytime_directory_url(); // Get plugin data - $plugin_plugin_data = get_my_style_anytime_plugin_data(); + $plugin_plugin_data = my_style_anytime_plugin_data(); // Get My plugin version if ( ! function_exists( 'get_plugin_data' ) ) { diff --git a/pages/backup.php b/pages/backup.php new file mode 100644 index 0000000..3f3c7e7 --- /dev/null +++ b/pages/backup.php @@ -0,0 +1,370 @@ + + +

    ' . esc_html__('Failed to create a backup.', 'my-style-anytime') . '

    '; + } + } + + elseif (wp_verify_nonce($wpnonce, 'mysat_restore_nonce') && $action === 'mysat_restore') { + // Restore logic + $backupFile = sanitize_file_name($_POST['backup_file']); + $restoreResult = mysat_restore_backup($backupFile); + // Trigger SweetAlert2 notification based on restore result + ?> + + + + open($tempBackupPath, ZipArchive::CREATE) === true) { + $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($stylesFolderPath)); + + foreach ($iterator as $file) { + $file = realpath($file); + $relativePath = str_replace($stylesFolderPath . '/', '', $file); + + if (is_file($file) && pathinfo($file, PATHINFO_EXTENSION) === 'css') { + // Use the WordPress Filesystem API to get file contents + global $wp_filesystem; + + if (!$wp_filesystem->is_readable($file)) { + // Handle the error, log, or throw an exception as needed + throw new RuntimeException('Failed to read file contents. File is not readable: ' . esc_html($file)); + } + + $file_content = $wp_filesystem->get_contents($file); + + if ($file_content !== false) { + $zip->addFromString($relativePath, $file_content); + } else { + // Handle the error, log, or throw an exception as needed + throw new RuntimeException('Failed to get file contents.'); + } + } + } + + $zip->close(); + } + + // Rename the temporary backup file to the final name + if (wp_mkdir_p(dirname($backupPath)) === false) { + // Handle the error, log, or throw an exception as needed + throw new RuntimeException('Failed to create backup directory.'); + } + + if (!copy($tempBackupPath, $backupPath)) { + // Handle the error, log, or throw an exception as needed + throw new RuntimeException('Failed to move the backup file.'); + } + + // Delete the temporary backup file + if (file_exists($tempBackupPath)) { + wp_delete_file($tempBackupPath); + } + + return $backupPath; +} + + +//// This catch-all *.css from .zip and restore file inside wp-content/plugins/my-style-anytime/styles +function mysat_restore_backup(string $backupFile): bool { + + // Get plugin dir name + $plugin_dir_path = my_style_anytime_plugin_dir_path(); + + $stylesFolderPath = $plugin_dir_path . 'styles'; + + $backupDir = WP_CONTENT_DIR . '/mysat_backup/'; + + $backupPath = $backupDir . $backupFile; + + // Ensure the backup file exists + if (!file_exists($backupPath)) { + return false; + } + + $zip = new ZipArchive(); + + // Open the backup file + if ($zip->open($backupPath) === true) { + // Extract all CSS files directly to the styles directory + for ($i = 0; $i < $zip->numFiles; $i++) { + $filename = $zip->getNameIndex($i); + + // Check if the file is a CSS file + if (pathinfo($filename, PATHINFO_EXTENSION) === 'css') { + $zip->extractTo($stylesFolderPath, $filename); + } + } + + // Close the zip file + $zip->close(); + + return true; + } + + return false; +} + + +//// This delete select *.zip file from wp-content/mysat_backup +function mysat_delete_backup(string $backupFile): bool { + + $backupDir = WP_CONTENT_DIR . '/mysat_backup/'; + $backupPath = $backupDir . $backupFile; + + // Ensure the backup file exists + if (file_exists($backupPath)) { + // Attempt to delete the file using wp_delete_file + global $wp_filesystem; + WP_Filesystem(); // Initialize the WP filesystem + + if ($wp_filesystem->delete($backupPath)) { + return true; // File deletion successful + } + + } + + return false; // File does not exist +} + + +/********** +Generate HTML code on this page + **********/ + +function mysat_render_backup_page(): void { + + ?> + +
    +

    +
    +
    /wp-content/mysat_backup
    + +
    +
    + + + +
    +
    + + +
    +

    + +
    + +
    + + + + +
    + +
    + + + + + +
    +
    + +
    + + +
    + + + + + +
    +

    +
    +
    + + +
    + + +
    + + '; + echo ''; + echo '
    '; + echo esc_html__('From the website title displayed in a browser tab and dashboard, and wp-login.php for enhanced branding and security.', 'my-style-anytime'); + echo '
    '; +} diff --git a/pages/editor.php b/pages/editor.php new file mode 100644 index 0000000..fcfa81d --- /dev/null +++ b/pages/editor.php @@ -0,0 +1,333 @@ +put_contents($file_path, $content, FS_CHMOD_FILE); + + // Output success response + wp_send_json_success(); + } + } + + // If we reach this point, something went wrong + wp_send_json_error('Failed to update the file.'); +} + +add_action('wp_ajax_mysat_update_css_file_content', 'mysat_update_css_file_content'); + + +/********** +Generate HTML code on this page + **********/ + +function mysat_render_editor_page(): void { + + ?> + +
    +

    +
    +
    + + '; + + // Flag to check if any CSS file is selected + $isCssFileSelected = false; + + // Loop through each role and display information + foreach ($wp_roles->roles as $role_key => $role_data) { + // Check if 'name' key exists in role_data + if (isset($role_data['name'])) { + // Replace underscores with hyphens in the role name + $role_slug = str_replace('_', '-', $role_key); + + // Check if there is a corresponding CSS file for the current role + $expectedFileName = $role_slug . '-style.css'; + $file = in_array($expectedFileName, $cssFiles, true) ? $expectedFileName : ''; // Default value if not found + + // Display 'OK' or 'NO' based on matching files + echo '
  • ' . esc_html($role_data['name']); + if (empty($file)) { + // File doesn't exist, show the link to generate the file + $tooltip = esc_attr__('Generate CSS File for', 'my-style-anytime'); + $nonce_url = wp_nonce_url(admin_url('admin.php?page=mysat_editor_page&generate_file=' . esc_attr($role_slug)), 'generate_file_nonce'); + echo ' '; + } else { + // File exists, show the checkmark + echo ' '; + // Set the flag as a CSS file is selected + $isCssFileSelected = true; + } + echo '
  • '; + } else { + echo 'Name not available'; + } + } + + // Include the visitor-style.css explicitly in the list + $visitorFileName = 'visitor'; + $expectedFileName = $visitorFileName . '-style.css'; + $file = in_array($expectedFileName, $cssFiles, true) ? $expectedFileName : ''; // Default value if not found + $visitorFileExists = in_array($file, $cssFiles, true); + echo '
  • ' . esc_html__('Visitor Style', 'my-style-anytime'); + if (!$visitorFileExists) { + // File doesn't exist, show the link to generate the file only if it's not the initial page load + $tooltip = esc_attr__('Generate Visitor CSS File', 'my-style-anytime'); + $nonce_url = wp_nonce_url(admin_url('admin.php?page=mysat_editor_page&generate_file=' . esc_attr($visitorFileName)), 'generate_file_nonce'); + echo ' '; + if ( + ! isset( $_GET['generate_file'], $_GET['_wpnonce'] ) + || $_GET['generate_file'] !== $visitorFileName || + ! wp_verify_nonce( $_GET['_wpnonce'], 'generate_file_nonce' ) ) + { + // Display the link to generate the file only if it's not the initial page load and not already generated + echo ''; + } + } + else { + // File exists, show the checkmark + echo ' '; + // Set the flag as a CSS file is selected + $isCssFileSelected = true; + } + echo '
  • '; + + echo ''; + + // Container for CodeMirror + echo '
    '; + + // Display the "Save Changes" button only if a CSS file is selected + if ($isCssFileSelected) { + echo '

    '; + } + + ?> + +
    + + + + + +
    +

    +
    +

    +

    +

    +

    + + + + + + + +

    +

    + + + + . +

    +

    + + . +

    + +
    + ... +
    + + + +
    +

    +
    +
    + + +
    + + +
    + + '; + echo ''; + echo '
    '; + echo esc_html__('Removing the meta generator, helps you to hide the version of WordPress that you are using from potential attackers.', 'my-style-anytime'); + echo '
    '; +} diff --git a/pages/settings.php b/pages/settings.php new file mode 100644 index 0000000..cdf0cb9 --- /dev/null +++ b/pages/settings.php @@ -0,0 +1,90 @@ + + +
    +

    +
    +
    + + +
    + + +
    + + '; + echo ''; + echo '
    '; + echo esc_html__('With this, you Disable Gutenberg on your site and back to the classic editor, no matter where you are.', 'my-style-anytime'); + echo '
    '; +} diff --git a/readme.txt b/readme.txt index c27172f..81206b2 100644 --- a/readme.txt +++ b/readme.txt @@ -2,14 +2,14 @@ Contributors: NewfieSoft Donate link: https://newfiesoft.com/donate Tags: css, custom, responsive, customize, style -Requires at least: 4.9.0 -Tested up to: 6.4.3 -Stable tag: 1.4.1 -Requires PHP: 5.2.4 +Requires at least: 5.6.0 +Tested up to: 6.5 +Stable tag: 1.5.0 +Requires PHP: 5.6.0 License: GPLv2 or later License URI: http://www.gnu.org/licenses/gpl-2.0.html -Short Description: Customize public frontend or admin backend wp-admin with responsive using the same CSS stylesheets file based on user roles type +Customize public frontend or admin backend wp-admin with responsive using the same CSS stylesheets file based on user roles type == Description == @@ -34,7 +34,7 @@ The simplicity of using one CSS file for both frontend and backend eliminates re * Remove "WordPress" from the title on any case scenario and on all available Site languages inside WordPress settings. -To test our plugin with different user roles and [WordPress](https://wordpress.org/documentation/article/roles-and-capabilities/#roles) basic user types, we've integrated it seamlessly with independent and widely-used WordPress plugins, each having its set of user roles. Currently, our plugin supports popular plugins like [WooCommerce](https://wordpress.org/plugins/woocommerce/), [Loco Translate](https://wordpress.org/plugins/loco-translate/), [Yoast SEO](https://wordpress.org/plugins/wordpress-seo/), and [YITH WooCommerce Affiliates](https://wordpress.org/plugins/yith-woocommerce-affiliates/). +To test our plugin with different user roles and [WordPress](https://wordpress.org/documentation/article/roles-and-capabilities/#roles) basic user types, we've integrated it seamlessly with independent and widely-used WordPress plugins, each having its set of user roles. For any new features and coming versions of the plugin before release, we test with the next popular plugins like those is [WooCommerce](https://wordpress.org/plugins/woocommerce/), [Loco Translate](https://wordpress.org/plugins/loco-translate/), [Yoast SEO](https://wordpress.org/plugins/wordpress-seo/), [YITH WooCommerce Affiliates](https://wordpress.org/plugins/yith-woocommerce-affiliates/), and [WP Job Manager](https://wordpress.org/plugins/wp-job-manager/). If you have any suggestions for additional plugins or want to discuss compatibility with a specific plugin, please share your thoughts in our [support topic](https://wordpress.org/support/topic/suggest-a-plugin-that-adds-his-role-inside-users/). We welcome your input and are eager to ensure compatibility with a wide range of plugins. @@ -113,6 +113,16 @@ But if you're using an upgrade inside the WordPress site plugin area, before doi == Changelog == += 1.5.0 - 28.03.2024 = +* We completely support the new version of WordPress 6.5 + +* We: restore the sweetalert2 file from the last version to version 11.4.8 + +* Reorganized readme.txt content file + +* Testing: In this version, we testing the plugin [WP Job Manager](https://wordpress.org/plugins/wp-job-manager/) and its user roles. + + = 1.4.1 - 23.02.2024 = * Reorganized readme.txt file, optimized content for all available localization language support at this moment, description, and tags @@ -211,5 +221,8 @@ But if you're using an upgrade inside the WordPress site plugin area, before doi == Upgrade Notice == += 1.5.0 - 28.03.2024 = +We completely support the new version 6.5, optimized code and content files, and testing other plugins + = 1.4.1 - 23.02.2024 = We optimized content, localization, description, and tags and fixed some lines \ No newline at end of file diff --git a/styles/administrator-style.css b/styles/administrator-style.css new file mode 100644 index 0000000..afcc928 --- /dev/null +++ b/styles/administrator-style.css @@ -0,0 +1,271 @@ +/** + * + * @author: NewfieSoft + * @Plugin name: My Style Anytime + * @URL: https://newfiesoft.com/wp-plugins/my-style-anytime/ + * + * + * This is style for roles Administrator + * + * @Roles: Administrator + * + * @Plugin style name: WordPress + * @URL: https://wordpress.org/support/article/roles-and-capabilities/ + * + */ + +/* To import visitor style in this user @Roles type +@import "visitor-style.css"; + */ + +/*#########################################################################*/ + + +/*=== Back Styles ===*/ + +#wpadminbar { + background-color: #105d9c !important; +} + + +/*#########################################################################*/ + + +/*=== Front Styles ===*/ + +.hello-administrator { + text-align: center; + font-size: 36px; +} + +.hello-editor { + display: none; +} + +.hello-author { + display: none; +} + +.hello-contributor { + display: none; +} + +.hello-subscriber { + display: none; +} + +.hello-shop-manager { + display: none; +} + +.hello-customer { + display: none; +} + +.hello-translator { + display: none; +} + +.hello-visitor { + display: none; +} + +/* WooCommerce User roles style example */ + +.hello-shop-manager { + display: none; +} + +.hello-customer { + display: none; +} + +/* Loco Translate User roles style example */ + +.hello-translator { + display: none; +} + +/* Yoast SEO User roles style example */ + +.hello-seo-manager { + display: none; +} + +.hello-seo-editor { + display: none; +} + +/* YITH Affiliates User roles style example */ + +.hello-affiliates { + display: none; +} + +/*#########################################################################*/ + +/*=== Start Responsive configurations for this roles user type ===*/ + +/*=| ##### Desktop screen resolution ##### |=*/ + +@media only screen and (max-width: 2560px) { + + +} + +/* End media max-width: 2560px */ + + +@media only screen and (max-width: 1920px) { + + +} + +/* End media max-width: 1920px */ + + +@media only screen and (max-width: 1600px) { + + +} + +/* End media max-width: 1600px */ + + +@media only screen and (max-width: 1536px) { + + +} + +/* End media max-width: 1536px */ + + +@media only screen and (max-width: 1440px) { + + +} + +/* End media max-width: 1440px */ + + +@media only screen and (max-width: 1366px) { + + +} + +/* End media max-width: 1366px */ + + +@media only screen and (max-width: 1280px) { + + +} + +/* End media max-width: 1280px */ + + +@media only screen and (max-width: 1080px) { + + +} + +/* End media max-width: 1080px */ + + +/*=| ##### Tablet screen resolution ##### |=*/ + + +@media only screen and (max-width: 962px) { + + +} + +/* End media max-width: 962px */ + + +@media screen and (max-width: 820px) { + + +} + +/* End media max-width: 820px */ + + +@media only screen and (max-width: 810px) { + + +} + +/* End media max-width: 810px */ + + +@media only screen and (max-width: 800px) { + + +} + +/* End media max-width: 800px */ + + +@media only screen and (max-width: 768px) { + + +} + +/* End media max-width: 768px */ + + +@media only screen and (max-width: 601px) { + + +} + +/* End media max-width: 601px */ + + +/*=| ##### Mobile screen resolution ##### |=*/ + + +@media only screen and (max-width: 414px) { + + +} + +/* End media max-width: 414px */ + + +@media only screen and (max-width: 412px) { + + +} + +/* End media max-width: 412px */ + + +@media only screen and (max-width: 393px) { + + +} + +/* End media max-width: 393px */ + + +@media only screen and (max-width: 390px) { + + +} + +/* End media max-width: 390px */ + + +@media only screen and (max-width: 360px) { + + +} + +/* End media max-width: 390px */ + + +/*=== End Responsive configurations for this roles user type ===*/ + +/*#########################################################################*/ \ No newline at end of file diff --git a/styles/author-style.css b/styles/author-style.css new file mode 100644 index 0000000..21338db --- /dev/null +++ b/styles/author-style.css @@ -0,0 +1,271 @@ +/** + * + * @author: NewfieSoft + * @Plugin name: My Style Anytime + * @URL: https://newfiesoft.com/wp-plugins/my-style-anytime/ + * + * + * This is style for roles Author + * + * @Roles: Author + * + * @Plugin style name: WordPress + * @URL: https://wordpress.org/support/article/roles-and-capabilities/ + * + */ + +/* To import visitor style in this user @Roles type +@import "visitor-style.css"; + */ + +/*#########################################################################*/ + + +/*=== Back Styles ===*/ + +#wpadminbar { + background-color: #c1014b !important; +} + + +/*#########################################################################*/ + + +/*=== Front Styles ===*/ + +.hello-administrator { + display: none; +} + +.hello-editor { + display: none; +} + +.hello-author { + text-align: center; + font-size: 36px; +} + +.hello-contributor { + display: none; +} + +.hello-subscriber { + display: none; +} + +.hello-shop-manager { + display: none; +} + +.hello-customer { + display: none; +} + +.hello-translator { + display: none; +} + +.hello-visitor { + display: none; +} + +/* WooCommerce User roles style example */ + +.hello-shop-manager { + display: none; +} + +.hello-customer { + display: none; +} + +/* Loco Translate User roles style example */ + +.hello-translator { + display: none; +} + +/* Yoast SEO User roles style example */ + +.hello-seo-manager { + display: none; +} + +.hello-seo-editor { + display: none; +} + +/* YITH Affiliates User roles style example */ + +.hello-affiliates { + display: none; +} + +/*#########################################################################*/ + +/*=== Start Responsive configurations for this roles user type ===*/ + +/*=| ##### Desktop screen resolution ##### |=*/ + +@media only screen and (max-width: 2560px) { + + +} + +/* End media max-width: 2560px */ + + +@media only screen and (max-width: 1920px) { + + +} + +/* End media max-width: 1920px */ + + +@media only screen and (max-width: 1600px) { + + +} + +/* End media max-width: 1600px */ + + +@media only screen and (max-width: 1536px) { + + +} + +/* End media max-width: 1536px */ + + +@media only screen and (max-width: 1440px) { + + +} + +/* End media max-width: 1440px */ + + +@media only screen and (max-width: 1366px) { + + +} + +/* End media max-width: 1366px */ + + +@media only screen and (max-width: 1280px) { + + +} + +/* End media max-width: 1280px */ + + +@media only screen and (max-width: 1080px) { + + +} + +/* End media max-width: 1080px */ + + +/*=| ##### Tablet screen resolution ##### |=*/ + + +@media only screen and (max-width: 962px) { + + +} + +/* End media max-width: 962px */ + + +@media screen and (max-width: 820px) { + + +} + +/* End media max-width: 820px */ + + +@media only screen and (max-width: 810px) { + + +} + +/* End media max-width: 810px */ + + +@media only screen and (max-width: 800px) { + + +} + +/* End media max-width: 800px */ + + +@media only screen and (max-width: 768px) { + + +} + +/* End media max-width: 768px */ + + +@media only screen and (max-width: 601px) { + + +} + +/* End media max-width: 601px */ + + +/*=| ##### Mobile screen resolution ##### |=*/ + + +@media only screen and (max-width: 414px) { + + +} + +/* End media max-width: 414px */ + + +@media only screen and (max-width: 412px) { + + +} + +/* End media max-width: 412px */ + + +@media only screen and (max-width: 393px) { + + +} + +/* End media max-width: 393px */ + + +@media only screen and (max-width: 390px) { + + +} + +/* End media max-width: 390px */ + + +@media only screen and (max-width: 360px) { + + +} + +/* End media max-width: 390px */ + + +/*=== End Responsive configurations for this roles user type ===*/ + +/*#########################################################################*/ \ No newline at end of file diff --git a/styles/contributor-style.css b/styles/contributor-style.css new file mode 100644 index 0000000..dbf654f --- /dev/null +++ b/styles/contributor-style.css @@ -0,0 +1,262 @@ +/** + * + * @author: NewfieSoft + * @Plugin name: My Style Anytime + * @URL: https://newfiesoft.com/wp-plugins/my-style-anytime/ + * + * + * This is style for roles Contributor + * + * @Roles: Contributor + * + * @Plugin style name: WordPress + * @URL: https://wordpress.org/support/article/roles-and-capabilities/ + * + */ + +/* To import visitor style in this user @Roles type +@import "visitor-style.css"; + */ + +/*#########################################################################*/ + + +/*=== Back Styles ===*/ + +#wpadminbar { + background-color: #b8c131 !important; +} + + +/*#########################################################################*/ + + +/*=== Front Styles ===*/ + +/* Standard WordPress User roles style example */ + +.hello-administrator { + display: none; +} + +.hello-editor { + display: none; +} + +.hello-author { + display: none; +} + +.hello-contributor { + text-align: center; + font-size: 36px; +} + + +.hello-subscriber { + display: none; +} + +.hello-visitor { + display: none; +} + +/* WooCommerce User roles style example */ + +.hello-shop-manager { + display: none; +} + +.hello-customer { + display: none; +} + +/* Loco Translate User roles style example */ + +.hello-translator { + display: none; +} + +/* Yoast SEO User roles style example */ + +.hello-seo-manager { + display: none; +} + +.hello-seo-editor { + display: none; +} + +/* YITH Affiliates User roles style example */ + +.hello-affiliates { + display: none; +} + +/*#########################################################################*/ + +/*=== Start Responsive configurations for this roles user type ===*/ + +/*=| ##### Desktop screen resolution ##### |=*/ + +@media only screen and (max-width: 2560px) { + + +} + +/* End media max-width: 2560px */ + + +@media only screen and (max-width: 1920px) { + + +} + +/* End media max-width: 1920px */ + + +@media only screen and (max-width: 1600px) { + + +} + +/* End media max-width: 1600px */ + + +@media only screen and (max-width: 1536px) { + + +} + +/* End media max-width: 1536px */ + + +@media only screen and (max-width: 1440px) { + + +} + +/* End media max-width: 1440px */ + + +@media only screen and (max-width: 1366px) { + + +} + +/* End media max-width: 1366px */ + + +@media only screen and (max-width: 1280px) { + + +} + +/* End media max-width: 1280px */ + + +@media only screen and (max-width: 1080px) { + + +} + +/* End media max-width: 1080px */ + + +/*=| ##### Tablet screen resolution ##### |=*/ + + +@media only screen and (max-width: 962px) { + + +} + +/* End media max-width: 962px */ + + +@media screen and (max-width: 820px) { + + +} + +/* End media max-width: 820px */ + + +@media only screen and (max-width: 810px) { + + +} + +/* End media max-width: 810px */ + + +@media only screen and (max-width: 800px) { + + +} + +/* End media max-width: 800px */ + + +@media only screen and (max-width: 768px) { + + +} + +/* End media max-width: 768px */ + + +@media only screen and (max-width: 601px) { + + +} + +/* End media max-width: 601px */ + + +/*=| ##### Mobile screen resolution ##### |=*/ + + +@media only screen and (max-width: 414px) { + + +} + +/* End media max-width: 414px */ + + +@media only screen and (max-width: 412px) { + + +} + +/* End media max-width: 412px */ + + +@media only screen and (max-width: 393px) { + + +} + +/* End media max-width: 393px */ + + +@media only screen and (max-width: 390px) { + + +} + +/* End media max-width: 390px */ + + +@media only screen and (max-width: 360px) { + + +} + +/* End media max-width: 390px */ + + +/*=== End Responsive configurations for this roles user type ===*/ + +/*#########################################################################*/ \ No newline at end of file diff --git a/styles/customer-style.css b/styles/customer-style.css new file mode 100644 index 0000000..6984c69 --- /dev/null +++ b/styles/customer-style.css @@ -0,0 +1,261 @@ +/** + * + * @author: NewfieSoft + * @Plugin name: My Style Anytime + * @URL: https://newfiesoft.com/wp-plugins/my-style-anytime/ + * + * + * This is a style for roles Customer + * + * @Roles: Customer + * + * @Plugin: Woocommerce plugins + * @URL: https://wordpress.org/plugins/woocommerce/ + * + */ + +/* To import visitor style in this user @Roles type +@import "visitor-style.css"; + */ + +/*#########################################################################*/ + + +/*=== Back Styles ===*/ + +#wpadminbar { + background-color: #ef09ae !important; +} + + +/*#########################################################################*/ + + +/*=== Front Styles ===*/ + +/* Standard WordPress User roles style example */ + +.hello-administrator { + display: none; +} + +.hello-editor { + display: none; +} + +.hello-author { + display: none; +} + +.hello-contributor { + display: none; +} + +.hello-subscriber { + display: none; +} + +.hello-visitor { + display: none; +} + +/* WooCommerce User roles style example */ + +.hello-shop-manager { + display: none; +} + +.hello-customer { + text-align: center; + font-size: 36px; +} + +/* Loco Translate User roles style example */ + +.hello-translator { + display: none; +} + +/* Yoast SEO User roles style example */ + +.hello-seo-manager { + display: none; +} + +.hello-seo-editor { + display: none; +} + +/* YITH Affiliates User roles style example */ + +.hello-affiliates { + display: none; +} + + +/*#########################################################################*/ + +/*=== Start Responsive configurations for this roles user type ===*/ + +/*=| ##### Desktop screen resolution ##### |=*/ + +@media only screen and (max-width: 2560px) { + + + + } +/* End media max-width: 2560px */ + + +@media only screen and (max-width: 1920px) { + + + } +/* End media max-width: 1920px */ + + +@media only screen and (max-width: 1600px) { + + + + } +/* End media max-width: 1600px */ + + +@media only screen and (max-width: 1536px) { + + + + } +/* End media max-width: 1536px */ + + +@media only screen and (max-width: 1440px) { + + + + } +/* End media max-width: 1440px */ + + +@media only screen and (max-width: 1366px) { + + + + } +/* End media max-width: 1366px */ + + +@media only screen and (max-width: 1280px) { + + + + } +/* End media max-width: 1280px */ + + +@media only screen and (max-width: 1080px) { + + + + } +/* End media max-width: 1080px */ + + +/*=| ##### Tablet screen resolution ##### |=*/ + + +@media only screen and (max-width: 962px) { + + + + } +/* End media max-width: 962px */ + + +@media screen and (max-width: 820px) { + + + + } +/* End media max-width: 820px */ + + +@media only screen and (max-width: 810px) { + + + + } +/* End media max-width: 810px */ + + +@media only screen and (max-width: 800px) { + + + + } +/* End media max-width: 800px */ + + +@media only screen and (max-width: 768px) { + + + + } +/* End media max-width: 768px */ + + +@media only screen and (max-width: 601px) { + + + + } +/* End media max-width: 601px */ + + +/*=| ##### Mobile screen resolution ##### |=*/ + + +@media only screen and (max-width: 414px) { + + + + } +/* End media max-width: 414px */ + + +@media only screen and (max-width: 412px) { + + + + } +/* End media max-width: 412px */ + + +@media only screen and (max-width: 393px) { + + + + } +/* End media max-width: 393px */ + + +@media only screen and (max-width: 390px) { + + + + } +/* End media max-width: 390px */ + + +@media only screen and (max-width: 360px) { + + + + } +/* End media max-width: 390px */ + + +/*=== End Responsive configurations for this roles user type ===*/ + +/*#########################################################################*/ \ No newline at end of file diff --git a/styles/editor-style.css b/styles/editor-style.css new file mode 100644 index 0000000..e881eca --- /dev/null +++ b/styles/editor-style.css @@ -0,0 +1,261 @@ +/** + * + * @author: NewfieSoft + * @Plugin name: My Style Anytime + * @URL: https://newfiesoft.com/wp-plugins/my-style-anytime/ + * + * + * This is style for roles Editor + * + * @Roles: Editor + * + * @Plugin style name: WordPress + * @URL: https://wordpress.org/support/article/roles-and-capabilities/ + * + */ + +/* To import visitor style in this user @Roles type +@import "visitor-style.css"; + */ + +/*#########################################################################*/ + + +/*=== Back Styles ===*/ + +#wpadminbar { + background-color: #31c1a0 !important; +} + + +/*#########################################################################*/ + + +/*=== Front Styles ===*/ + +/* Standard WordPress User roles style example */ + +.hello-administrator { + display: none; +} + +.hello-editor { + text-align: center; + font-size: 36px; +} + +.hello-author { + display: none; +} + +.hello-contributor { + display: none; +} + +.hello-subscriber { + display: none; +} + +.hello-visitor { + display: none; +} + +/* WooCommerce User roles style example */ + +.hello-shop-manager { + display: none; +} + +.hello-customer { + display: none; +} + +/* Loco Translate User roles style example */ + +.hello-translator { + display: none; +} + +/* Yoast SEO User roles style example */ + +.hello-seo-manager { + display: none; +} + +.hello-seo-editor { + display: none; +} + +/* YITH Affiliates User roles style example */ + +.hello-affiliates { + display: none; +} + +/*#########################################################################*/ + +/*=== Start Responsive configurations for this roles user type ===*/ + +/*=| ##### Desktop screen resolution ##### |=*/ + +@media only screen and (max-width: 2560px) { + + +} + +/* End media max-width: 2560px */ + + +@media only screen and (max-width: 1920px) { + + +} + +/* End media max-width: 1920px */ + + +@media only screen and (max-width: 1600px) { + + +} + +/* End media max-width: 1600px */ + + +@media only screen and (max-width: 1536px) { + + +} + +/* End media max-width: 1536px */ + + +@media only screen and (max-width: 1440px) { + + +} + +/* End media max-width: 1440px */ + + +@media only screen and (max-width: 1366px) { + + +} + +/* End media max-width: 1366px */ + + +@media only screen and (max-width: 1280px) { + + +} + +/* End media max-width: 1280px */ + + +@media only screen and (max-width: 1080px) { + + +} + +/* End media max-width: 1080px */ + + +/*=| ##### Tablet screen resolution ##### |=*/ + + +@media only screen and (max-width: 962px) { + + +} + +/* End media max-width: 962px */ + + +@media screen and (max-width: 820px) { + + +} + +/* End media max-width: 820px */ + + +@media only screen and (max-width: 810px) { + + +} + +/* End media max-width: 810px */ + + +@media only screen and (max-width: 800px) { + + +} + +/* End media max-width: 800px */ + + +@media only screen and (max-width: 768px) { + + +} + +/* End media max-width: 768px */ + + +@media only screen and (max-width: 601px) { + + +} + +/* End media max-width: 601px */ + + +/*=| ##### Mobile screen resolution ##### |=*/ + + +@media only screen and (max-width: 414px) { + + +} + +/* End media max-width: 414px */ + + +@media only screen and (max-width: 412px) { + + +} + +/* End media max-width: 412px */ + + +@media only screen and (max-width: 393px) { + + +} + +/* End media max-width: 393px */ + + +@media only screen and (max-width: 390px) { + + +} + +/* End media max-width: 390px */ + + +@media only screen and (max-width: 360px) { + + +} + +/* End media max-width: 390px */ + + +/*=== End Responsive configurations for this roles user type ===*/ + +/*#########################################################################*/ \ No newline at end of file diff --git a/styles/shop-manager-style.css b/styles/shop-manager-style.css new file mode 100644 index 0000000..8253176 --- /dev/null +++ b/styles/shop-manager-style.css @@ -0,0 +1,261 @@ +/** + * + * @author: NewfieSoft + * @Plugin name: My Style Anytime + * @URL: https://newfiesoft.com/wp-plugins/my-style-anytime/ + * + * + * This is a style for roles Shop Manager + * + * @Roles: Shop Manager + * + * @Plugin: Woocommerce plugins + * @URL: https://wordpress.org/plugins/woocommerce/ + * + */ + +/* To import visitor style in this user @Roles type +@import "visitor-style.css"; + */ + +/*#########################################################################*/ + + +/*=== Back Styles ===*/ + +#wpadminbar { + background-color: #b122d9 !important; +} + + +/*#########################################################################*/ + + +/*=== Front Styles ===*/ + +/* Standard WordPress User roles style example */ + +.hello-administrator { + display: none; +} + +.hello-editor { + display: none; +} + +.hello-author { + display: none; +} + +.hello-contributor { + display: none; +} + +.hello-subscriber { + display: none; +} + +.hello-visitor { + display: none; +} + +/* WooCommerce User roles style example */ + +.hello-shop-manager { + text-align: center; + font-size: 36px; +} + +.hello-customer { + display: none; +} + +/* Loco Translate User roles style example */ + +.hello-translator { + display: none; +} + +/* Yoast SEO User roles style example */ + +.hello-seo-manager { + display: none; +} + +.hello-seo-editor { + display: none; +} + +/* YITH Affiliates User roles style example */ + +.hello-affiliates { + display: none; +} + + +/*#########################################################################*/ + +/*=== Start Responsive configurations for this roles user type ===*/ + +/*=| ##### Desktop screen resolution ##### |=*/ + +@media only screen and (max-width: 2560px) { + + + + } +/* End media max-width: 2560px */ + + +@media only screen and (max-width: 1920px) { + + + } +/* End media max-width: 1920px */ + + +@media only screen and (max-width: 1600px) { + + + + } +/* End media max-width: 1600px */ + + +@media only screen and (max-width: 1536px) { + + + + } +/* End media max-width: 1536px */ + + +@media only screen and (max-width: 1440px) { + + + + } +/* End media max-width: 1440px */ + + +@media only screen and (max-width: 1366px) { + + + + } +/* End media max-width: 1366px */ + + +@media only screen and (max-width: 1280px) { + + + + } +/* End media max-width: 1280px */ + + +@media only screen and (max-width: 1080px) { + + + + } +/* End media max-width: 1080px */ + + +/*=| ##### Tablet screen resolution ##### |=*/ + + +@media only screen and (max-width: 962px) { + + + + } +/* End media max-width: 962px */ + + +@media screen and (max-width: 820px) { + + + + } +/* End media max-width: 820px */ + + +@media only screen and (max-width: 810px) { + + + + } +/* End media max-width: 810px */ + + +@media only screen and (max-width: 800px) { + + + + } +/* End media max-width: 800px */ + + +@media only screen and (max-width: 768px) { + + + + } +/* End media max-width: 768px */ + + +@media only screen and (max-width: 601px) { + + + + } +/* End media max-width: 601px */ + + +/*=| ##### Mobile screen resolution ##### |=*/ + + +@media only screen and (max-width: 414px) { + + + + } +/* End media max-width: 414px */ + + +@media only screen and (max-width: 412px) { + + + + } +/* End media max-width: 412px */ + + +@media only screen and (max-width: 393px) { + + + + } +/* End media max-width: 393px */ + + +@media only screen and (max-width: 390px) { + + + + } +/* End media max-width: 390px */ + + +@media only screen and (max-width: 360px) { + + + + } +/* End media max-width: 390px */ + + +/*=== End Responsive configurations for this roles user type ===*/ + +/*#########################################################################*/ \ No newline at end of file diff --git a/styles/subscriber-style.css b/styles/subscriber-style.css new file mode 100644 index 0000000..916e946 --- /dev/null +++ b/styles/subscriber-style.css @@ -0,0 +1,261 @@ +/** + * + * @author: NewfieSoft + * @Plugin name: My Style Anytime + * @URL: https://newfiesoft.com/wp-plugins/my-style-anytime/ + * + * + * This is style for roles Subscriber + * + * @Roles: Subscriber + * + * @Plugin style name: WordPress + * @URL: https://wordpress.org/support/article/roles-and-capabilities/ + * + */ + +/* To import visitor style in this user @Roles type +@import "visitor-style.css"; + */ + +/*#########################################################################*/ + + +/*=== Back Styles ===*/ + +#wpadminbar { + background-color: #c17a31 !important; +} + + +/*#########################################################################*/ + + +/*=== Front Styles ===*/ + +/* Standard WordPress User roles style example */ + +.hello-administrator { + display: none; +} + +.hello-editor { + display: none; +} + +.hello-author { + display: none; +} + +.hello-contributor { + display: none; +} + +.hello-subscriber { + text-align: center; + font-size: 36px; +} + +.hello-visitor { + display: none; +} + +/* WooCommerce User roles style example */ + +.hello-shop-manager { + display: none; +} + +.hello-customer { + display: none; +} + +/* Loco Translate User roles style example */ + +.hello-translator { + display: none; +} + +/* Yoast SEO User roles style example */ + +.hello-seo-manager { + display: none; +} + +.hello-seo-editor { + display: none; +} + +/* YITH Affiliates User roles style example */ + +.hello-affiliates { + display: none; +} + +/*#########################################################################*/ + +/*=== Start Responsive configurations for this roles user type ===*/ + +/*=| ##### Desktop screen resolution ##### |=*/ + +@media only screen and (max-width: 2560px) { + + +} + +/* End media max-width: 2560px */ + + +@media only screen and (max-width: 1920px) { + + +} + +/* End media max-width: 1920px */ + + +@media only screen and (max-width: 1600px) { + + +} + +/* End media max-width: 1600px */ + + +@media only screen and (max-width: 1536px) { + + +} + +/* End media max-width: 1536px */ + + +@media only screen and (max-width: 1440px) { + + +} + +/* End media max-width: 1440px */ + + +@media only screen and (max-width: 1366px) { + + +} + +/* End media max-width: 1366px */ + + +@media only screen and (max-width: 1280px) { + + +} + +/* End media max-width: 1280px */ + + +@media only screen and (max-width: 1080px) { + + +} + +/* End media max-width: 1080px */ + + +/*=| ##### Tablet screen resolution ##### |=*/ + + +@media only screen and (max-width: 962px) { + + +} + +/* End media max-width: 962px */ + + +@media screen and (max-width: 820px) { + + +} + +/* End media max-width: 820px */ + + +@media only screen and (max-width: 810px) { + + +} + +/* End media max-width: 810px */ + + +@media only screen and (max-width: 800px) { + + +} + +/* End media max-width: 800px */ + + +@media only screen and (max-width: 768px) { + + +} + +/* End media max-width: 768px */ + + +@media only screen and (max-width: 601px) { + + +} + +/* End media max-width: 601px */ + + +/*=| ##### Mobile screen resolution ##### |=*/ + + +@media only screen and (max-width: 414px) { + + +} + +/* End media max-width: 414px */ + + +@media only screen and (max-width: 412px) { + + +} + +/* End media max-width: 412px */ + + +@media only screen and (max-width: 393px) { + + +} + +/* End media max-width: 393px */ + + +@media only screen and (max-width: 390px) { + + +} + +/* End media max-width: 390px */ + + +@media only screen and (max-width: 360px) { + + +} + +/* End media max-width: 390px */ + + +/*=== End Responsive configurations for this roles user type ===*/ + +/*#########################################################################*/ \ No newline at end of file diff --git a/styles/translator-style.css b/styles/translator-style.css new file mode 100644 index 0000000..ff50811 --- /dev/null +++ b/styles/translator-style.css @@ -0,0 +1,260 @@ +/** + * + * @author: NewfieSoft + * @Plugin name: My Style Anytime + * @URL: https://newfiesoft.com/wp-plugins/my-style-anytime/ + * + * + * This is a style for roles Translator + * + * @Roles: Translator + * + * @Plugin: Loco Translate + * @URL: https://wordpress.org/plugins/loco-translate/ + * + */ + +/* To import visitor style in this user @Roles type +@import "visitor-style.css"; + */ + +/*#########################################################################*/ + + +/*=== Back Styles ===*/ + +#wpadminbar { + background-color: #33d027 !important; +} + + +/*#########################################################################*/ + + +/*=== Front Styles ===*/ + +/* Standard WordPress User roles style example */ + +.hello-administrator { + display: none; +} + +.hello-editor { + display: none; +} + +.hello-author { + display: none; +} + +.hello-contributor { + display: none; +} + +.hello-subscriber { + display: none; +} + +.hello-visitor { + display: none; +} + +/* WooCommerce User roles style example */ + +.hello-shop-manager { + display: none; +} + +.hello-customer { + display: none; +} + +/* Loco Translate User roles style example */ + +.hello-translator { + text-align: center; + font-size: 36px; +} + +/* Yoast SEO User roles style example */ + +.hello-seo-manager { + display: none; +} + +.hello-seo-editor { + display: none; +} + +/* YITH Affiliates User roles style example */ + +.hello-affiliates { + display: none; +} + +/*#########################################################################*/ + +/*=== Start Responsive configurations for this roles user type ===*/ + +/*=| ##### Desktop screen resolution ##### |=*/ + +@media only screen and (max-width: 2560px) { + + + + } +/* End media max-width: 2560px */ + + +@media only screen and (max-width: 1920px) { + + + } +/* End media max-width: 1920px */ + + +@media only screen and (max-width: 1600px) { + + + + } +/* End media max-width: 1600px */ + + +@media only screen and (max-width: 1536px) { + + + + } +/* End media max-width: 1536px */ + + +@media only screen and (max-width: 1440px) { + + + + } +/* End media max-width: 1440px */ + + +@media only screen and (max-width: 1366px) { + + + + } +/* End media max-width: 1366px */ + + +@media only screen and (max-width: 1280px) { + + + + } +/* End media max-width: 1280px */ + + +@media only screen and (max-width: 1080px) { + + + + } +/* End media max-width: 1080px */ + + +/*=| ##### Tablet screen resolution ##### |=*/ + + +@media only screen and (max-width: 962px) { + + + + } +/* End media max-width: 962px */ + + +@media screen and (max-width: 820px) { + + + + } +/* End media max-width: 820px */ + + +@media only screen and (max-width: 810px) { + + + + } +/* End media max-width: 810px */ + + +@media only screen and (max-width: 800px) { + + + + } +/* End media max-width: 800px */ + + +@media only screen and (max-width: 768px) { + + + + } +/* End media max-width: 768px */ + + +@media only screen and (max-width: 601px) { + + + + } +/* End media max-width: 601px */ + + +/*=| ##### Mobile screen resolution ##### |=*/ + + +@media only screen and (max-width: 414px) { + + + + } +/* End media max-width: 414px */ + + +@media only screen and (max-width: 412px) { + + + + } +/* End media max-width: 412px */ + + +@media only screen and (max-width: 393px) { + + + + } +/* End media max-width: 393px */ + + +@media only screen and (max-width: 390px) { + + + + } +/* End media max-width: 390px */ + + +@media only screen and (max-width: 360px) { + + + + } +/* End media max-width: 390px */ + + +/*=== End Responsive configurations for this roles user type ===*/ + +/*#########################################################################*/ \ No newline at end of file diff --git a/styles/visitor-style.css b/styles/visitor-style.css new file mode 100644 index 0000000..1efe374 --- /dev/null +++ b/styles/visitor-style.css @@ -0,0 +1,252 @@ +/** + * + * @author: NewfieSoft + * @Plugin name: My Style Anytime + * @URL: https://newfiesoft.com/wp-plugins/my-style-anytime/ + * + * + * This is the style for roles Visitor + * + * @Roles: Visitor + * + */ + + +/*#########################################################################*/ + + +/*=== Back Styles ===*/ + + +/*#########################################################################*/ + + +/*=== Front Styles ===*/ + +/* Standard WordPress User roles style example */ + +.hello-administrator { + display: none; +} + +.hello-editor { + display: none; +} + +.hello-author { + display: none; +} + +.hello-contributor { + display: none; +} + +.hello-subscriber { + display: none; +} + +.hello-visitor { + text-align: center; + font-size: 36px; + color: green; +} + +/* WooCommerce User roles style example */ + +.hello-shop-manager { + display: none; +} + +.hello-customer { + display: none; +} + +/* Loco Translate User roles style example */ + +.hello-translator { + display: none; +} + +/* Yoast SEO User roles style example */ + +.hello-seo-manager { + display: none; +} + +.hello-seo-editor { + display: none; +} + +/* YITH Affiliates User roles style example */ + +.hello-affiliates { + display: none; +} + +/*#########################################################################*/ + +/*=== Start Responsive configurations for this roles user type ===*/ + +/*=| ##### Desktop screen resolution ##### |=*/ + +@media only screen and (max-width: 2560px) { + + +} + +/* End media max-width: 2560px */ + + +@media only screen and (max-width: 1920px) { + + +} + +/* End media max-width: 1920px */ + + +@media only screen and (max-width: 1600px) { + + +} + +/* End media max-width: 1600px */ + + +@media only screen and (max-width: 1536px) { + + +} + +/* End media max-width: 1536px */ + + +@media only screen and (max-width: 1440px) { + + +} + +/* End media max-width: 1440px */ + + +@media only screen and (max-width: 1366px) { + + +} + +/* End media max-width: 1366px */ + + +@media only screen and (max-width: 1280px) { + + +} + +/* End media max-width: 1280px */ + + +@media only screen and (max-width: 1080px) { + + +} + +/* End media max-width: 1080px */ + + +/*=| ##### Tablet screen resolution ##### |=*/ + + +@media only screen and (max-width: 962px) { + + +} + +/* End media max-width: 962px */ + + +@media screen and (max-width: 820px) { + + +} + +/* End media max-width: 820px */ + + +@media only screen and (max-width: 810px) { + + +} + +/* End media max-width: 810px */ + + +@media only screen and (max-width: 800px) { + + +} + +/* End media max-width: 800px */ + + +@media only screen and (max-width: 768px) { + + +} + +/* End media max-width: 768px */ + + +@media only screen and (max-width: 601px) { + + +} + +/* End media max-width: 601px */ + + +/*=| ##### Mobile screen resolution ##### |=*/ + + +@media only screen and (max-width: 414px) { + + +} + +/* End media max-width: 414px */ + + +@media only screen and (max-width: 412px) { + + +} + +/* End media max-width: 412px */ + + +@media only screen and (max-width: 393px) { + + +} + +/* End media max-width: 393px */ + + +@media only screen and (max-width: 390px) { + + +} + +/* End media max-width: 390px */ + + +@media only screen and (max-width: 360px) { + + +} + +/* End media max-width: 390px */ + + +/*=== End Responsive configurations for this roles user type ===*/ + +/*#########################################################################*/ \ No newline at end of file diff --git a/styles/wpseo-editor-style.css b/styles/wpseo-editor-style.css new file mode 100644 index 0000000..b84c5e4 --- /dev/null +++ b/styles/wpseo-editor-style.css @@ -0,0 +1,260 @@ +/** + * + * @author: NewfieSoft + * @Plugin name: My Style Anytime + * @URL: https://newfiesoft.com/wp-plugins/my-style-anytime/ + * + * + * This is a style for roles SEO Editor + * + * @Roles: SEO Editor + * + * @Plugin: Yoast SEO + * @URL: https://wordpress.org/plugins/wordpress-seo/ + * + */ + +/* To import visitor style in this user @Roles type +@import "visitor-style.css"; + */ + +/*#########################################################################*/ + + +/*=== Back Styles ===*/ + +#wpadminbar { + background-color: #706f6f !important; +} + + +/*#########################################################################*/ + + +/*=== Front Styles ===*/ + +/* Standard WordPress User roles style example */ + +.hello-administrator { + display: none; +} + +.hello-editor { + display: none; +} + +.hello-author { + display: none; +} + +.hello-contributor { + display: none; +} + +.hello-subscriber { + display: none; +} + +.hello-visitor { + display: none; +} + +/* WooCommerce User roles style example */ + +.hello-shop-manager { + display: none; +} + +.hello-customer { + display: none; +} + +/* Loco Translate User roles style example */ + +.hello-translator { + display: none; +} + +/* Yoast SEO User roles style example */ + +.hello-seo-manager { + display: none; +} + +.hello-seo-editor { + text-align: center; + font-size: 36px; +} + +/* YITH Affiliates User roles style example */ + +.hello-affiliates { + display: none; +} + +/*#########################################################################*/ + +/*=== Start Responsive configurations for this roles user type ===*/ + +/*=| ##### Desktop screen resolution ##### |=*/ + +@media only screen and (max-width: 2560px) { + + + + } +/* End media max-width: 2560px */ + + +@media only screen and (max-width: 1920px) { + + + } +/* End media max-width: 1920px */ + + +@media only screen and (max-width: 1600px) { + + + + } +/* End media max-width: 1600px */ + + +@media only screen and (max-width: 1536px) { + + + + } +/* End media max-width: 1536px */ + + +@media only screen and (max-width: 1440px) { + + + + } +/* End media max-width: 1440px */ + + +@media only screen and (max-width: 1366px) { + + + + } +/* End media max-width: 1366px */ + + +@media only screen and (max-width: 1280px) { + + + + } +/* End media max-width: 1280px */ + + +@media only screen and (max-width: 1080px) { + + + + } +/* End media max-width: 1080px */ + + +/*=| ##### Tablet screen resolution ##### |=*/ + + +@media only screen and (max-width: 962px) { + + + + } +/* End media max-width: 962px */ + + +@media screen and (max-width: 820px) { + + + + } +/* End media max-width: 820px */ + + +@media only screen and (max-width: 810px) { + + + + } +/* End media max-width: 810px */ + + +@media only screen and (max-width: 800px) { + + + + } +/* End media max-width: 800px */ + + +@media only screen and (max-width: 768px) { + + + + } +/* End media max-width: 768px */ + + +@media only screen and (max-width: 601px) { + + + + } +/* End media max-width: 601px */ + + +/*=| ##### Mobile screen resolution ##### |=*/ + + +@media only screen and (max-width: 414px) { + + + + } +/* End media max-width: 414px */ + + +@media only screen and (max-width: 412px) { + + + + } +/* End media max-width: 412px */ + + +@media only screen and (max-width: 393px) { + + + + } +/* End media max-width: 393px */ + + +@media only screen and (max-width: 390px) { + + + + } +/* End media max-width: 390px */ + + +@media only screen and (max-width: 360px) { + + + + } +/* End media max-width: 390px */ + + +/*=== End Responsive configurations for this roles user type ===*/ + +/*#########################################################################*/ \ No newline at end of file diff --git a/styles/wpseo-manager-style.css b/styles/wpseo-manager-style.css new file mode 100644 index 0000000..8b644b6 --- /dev/null +++ b/styles/wpseo-manager-style.css @@ -0,0 +1,260 @@ +/** + * + * @author: NewfieSoft + * @Plugin name: My Style Anytime + * @URL: https://newfiesoft.com/wp-plugins/my-style-anytime/ + * + * + * This is a style for roles SEO Manager + * + * @Roles: SEO Manager + * + * @Plugin: Yoast SEO + * @URL: https://wordpress.org/plugins/wordpress-seo/ + * + */ + +/* To import visitor style in this user @Roles type +@import "visitor-style.css"; + */ + +/*#########################################################################*/ + + +/*=== Back Styles ===*/ + +#wpadminbar { + background-color: #7a2323 !important; +} + + +/*#########################################################################*/ + + +/*=== Front Styles ===*/ + +/* Standard WordPress User roles style example */ + +.hello-administrator { + display: none; +} + +.hello-editor { + display: none; +} + +.hello-author { + display: none; +} + +.hello-contributor { + display: none; +} + +.hello-subscriber { + display: none; +} + +.hello-visitor { + display: none; +} + +/* WooCommerce User roles style example */ + +.hello-shop-manager { + display: none; +} + +.hello-customer { + display: none; +} + +/* Loco Translate User roles style example */ + +.hello-translator { + display: none; +} + +/* Yoast SEO User roles style example */ + +.hello-seo-manager { + text-align: center; + font-size: 36px; +} + +.hello-seo-editor { + display: none; +} + +/* YITH Affiliates User roles style example */ + +.hello-affiliates { + display: none; +} + +/*#########################################################################*/ + +/*=== Start Responsive configurations for this roles user type ===*/ + +/*=| ##### Desktop screen resolution ##### |=*/ + +@media only screen and (max-width: 2560px) { + + + + } +/* End media max-width: 2560px */ + + +@media only screen and (max-width: 1920px) { + + + } +/* End media max-width: 1920px */ + + +@media only screen and (max-width: 1600px) { + + + + } +/* End media max-width: 1600px */ + + +@media only screen and (max-width: 1536px) { + + + + } +/* End media max-width: 1536px */ + + +@media only screen and (max-width: 1440px) { + + + + } +/* End media max-width: 1440px */ + + +@media only screen and (max-width: 1366px) { + + + + } +/* End media max-width: 1366px */ + + +@media only screen and (max-width: 1280px) { + + + + } +/* End media max-width: 1280px */ + + +@media only screen and (max-width: 1080px) { + + + + } +/* End media max-width: 1080px */ + + +/*=| ##### Tablet screen resolution ##### |=*/ + + +@media only screen and (max-width: 962px) { + + + + } +/* End media max-width: 962px */ + + +@media screen and (max-width: 820px) { + + + + } +/* End media max-width: 820px */ + + +@media only screen and (max-width: 810px) { + + + + } +/* End media max-width: 810px */ + + +@media only screen and (max-width: 800px) { + + + + } +/* End media max-width: 800px */ + + +@media only screen and (max-width: 768px) { + + + + } +/* End media max-width: 768px */ + + +@media only screen and (max-width: 601px) { + + + + } +/* End media max-width: 601px */ + + +/*=| ##### Mobile screen resolution ##### |=*/ + + +@media only screen and (max-width: 414px) { + + + + } +/* End media max-width: 414px */ + + +@media only screen and (max-width: 412px) { + + + + } +/* End media max-width: 412px */ + + +@media only screen and (max-width: 393px) { + + + + } +/* End media max-width: 393px */ + + +@media only screen and (max-width: 390px) { + + + + } +/* End media max-width: 390px */ + + +@media only screen and (max-width: 360px) { + + + + } +/* End media max-width: 390px */ + + +/*=== End Responsive configurations for this roles user type ===*/ + +/*#########################################################################*/ \ No newline at end of file diff --git a/styles/yith-affiliate-style.css b/styles/yith-affiliate-style.css new file mode 100644 index 0000000..adb03a5 --- /dev/null +++ b/styles/yith-affiliate-style.css @@ -0,0 +1,261 @@ +/* + * + * @author: NewfieSoft + * @Plugin name: My Style Anytime + * @URL: https://newfiesoft.com/wp-plugins/my-style-anytime/ + * + * + * This is a style for roles YITH Affiliates + * + * @Roles: YITH Affiliates + * + * @Plugin: YITH WooCommerce Affiliates + * @URL: https://wordpress.org/plugins/yith-woocommerce-affiliates/ + * + */ + +/* To import visitor style in this user @Roles type +@import "visitor-style.css"; + */ + +/*#########################################################################*/ + + +/*=== Back Styles ===*/ + +#wpadminbar { + background-color: #d3782f !important; +} + + +/*#########################################################################*/ + + +/*=== Front Styles ===*/ + +/* Standard WordPress User roles style example */ + +.hello-administrator { + display: none; +} + +.hello-editor { + display: none; +} + +.hello-author { + display: none; +} + +.hello-contributor { + display: none; +} + +.hello-subscriber { + display: none; +} + +.hello-visitor { + display: none; +} + +/* WooCommerce User roles style example */ + +.hello-shop-manager { + display: none; +} + +.hello-customer { + display: none; +} + +/* Loco Translate User roles style example */ + +.hello-translator { + display: none; +} + +/* Yoast SEO User roles style example */ + +.hello-seo-manager { + display: none; +} + +.hello-seo-editor { + display: none; +} + +/* YITH Affiliates User roles style example */ + +.hello-affiliates { + text-align: center; + font-size: 36px; +} + + +/*#########################################################################*/ + +/*=== Start Responsive configurations for this roles user type ===*/ + +/*=| ##### Desktop screen resolution ##### |=*/ + +@media only screen and (max-width: 2560px) { + + + + } +/* End media max-width: 2560px */ + + +@media only screen and (max-width: 1920px) { + + + } +/* End media max-width: 1920px */ + + +@media only screen and (max-width: 1600px) { + + + + } +/* End media max-width: 1600px */ + + +@media only screen and (max-width: 1536px) { + + + + } +/* End media max-width: 1536px */ + + +@media only screen and (max-width: 1440px) { + + + + } +/* End media max-width: 1440px */ + + +@media only screen and (max-width: 1366px) { + + + + } +/* End media max-width: 1366px */ + + +@media only screen and (max-width: 1280px) { + + + + } +/* End media max-width: 1280px */ + + +@media only screen and (max-width: 1080px) { + + + + } +/* End media max-width: 1080px */ + + +/*=| ##### Tablet screen resolution ##### |=*/ + + +@media only screen and (max-width: 962px) { + + + + } +/* End media max-width: 962px */ + + +@media screen and (max-width: 820px) { + + + + } +/* End media max-width: 820px */ + + +@media only screen and (max-width: 810px) { + + + + } +/* End media max-width: 810px */ + + +@media only screen and (max-width: 800px) { + + + + } +/* End media max-width: 800px */ + + +@media only screen and (max-width: 768px) { + + + + } +/* End media max-width: 768px */ + + +@media only screen and (max-width: 601px) { + + + + } +/* End media max-width: 601px */ + + +/*=| ##### Mobile screen resolution ##### |=*/ + + +@media only screen and (max-width: 414px) { + + + + } +/* End media max-width: 414px */ + + +@media only screen and (max-width: 412px) { + + + + } +/* End media max-width: 412px */ + + +@media only screen and (max-width: 393px) { + + + + } +/* End media max-width: 393px */ + + +@media only screen and (max-width: 390px) { + + + + } +/* End media max-width: 390px */ + + +@media only screen and (max-width: 360px) { + + + + } +/* End media max-width: 390px */ + + +/*=== End Responsive configurations for this roles user type ===*/ + +/*#########################################################################*/ \ No newline at end of file