diff --git a/middleware/validation.js b/middleware/validation.js index 9d455aa..2d37b3d 100644 --- a/middleware/validation.js +++ b/middleware/validation.js @@ -5,17 +5,14 @@ const xss = require('xss'); const validateAuth = (req, res, next) => { const { email, password } = req.body; - // email validation if (!email || !validator.isEmail(email)) { return res.status(400).json({ error: 'Invalid email format' }); } - // password validation if (!password || password.length < 4 || password.length > 100) { return res.status(400).json({ error: 'Invalid password format' }); } - // sanitize email req.body.email = validator.normalizeEmail(email.toLowerCase().trim()); next(); @@ -25,12 +22,10 @@ const validateAuth = (req, res, next) => { const validateSnippet = (req, res, next) => { const { title } = req.body; - // title is required if (!title || typeof title !== 'string' || title.length > 200) { return res.status(400).json({ error: 'Invalid title' }); } - // sanitize title against XSS req.body.title = xss(title.trim()); // enforce size limits on code content diff --git a/public/app.js b/public/app.js index 191a10b..e506160 100644 --- a/public/app.js +++ b/public/app.js @@ -5,42 +5,81 @@ Prism.manual = true; createApp({ data() { return { - token: localStorage.getItem('token'), + token: localStorage.getItem("token"), showLogin: false, showShareModal: false, - loginEmail: '', - loginPassword: '', - title: '', - html: '', - css: '', - js: '', - shareUrl: '', + loginEmail: "", + loginPassword: "", + title: "", + html: ` + + + + + Bin Code + + + + + + `, + css: "", + js: "", + shareUrl: "", currentShareId: null, isDragging: false, startX: null, startWidth: null, containerWidth: null, - editorWidth: '50%', + editorWidth: "50%", minWidth: 250, maxWidth: null, // Tab state - activeTab: 'html', + activeTab: "html", tabs: [ - { id: 'html', label: 'HTML', icon: '', language: 'markup' }, - { id: 'css', label: 'CSS', icon: '', language: 'css' }, - { id: 'js', label: 'JavaScript', icon: '', language: 'javascript' } + { + id: "html", + label: "HTML", + icon: '', + language: "markup", + }, + { + id: "css", + label: "CSS", + icon: '', + language: "css", + }, + { + id: "js", + label: "JavaScript", + icon: '', + language: "javascript", + }, ], extraIcons: [ - { visible: ``}, - { hidden: ``} + { + visible: ``, + }, + { + hidden: ``, + }, + { + console: ` + ` + } ], highlightedCode: { - html: '', - css: '', - js: '' + html: "", + css: "", + js: "", }, showEditor: true, - showPreview: true + showPreview: true, + isExecutionPaused: false, + updateTimer: null, + showConsole: true, + playIcon: ``, + pauseIcon: ``, }; }, @@ -49,7 +88,7 @@ createApp({ return { html: this.highlightedCode.html || this.html, css: this.highlightedCode.css || this.css, - js: this.highlightedCode.js || this.js + js: this.highlightedCode.js || this.js, }; }, currentCode: { @@ -59,39 +98,47 @@ createApp({ set(value) { this[this.activeTab] = value; this.highlightCode(value, this.activeTab); - } + }, }, - + previewWidth() { - if (typeof this.editorWidth === 'string' && this.editorWidth.endsWith('%')) { - return (100 - parseInt(this.editorWidth)) + '%'; + if ( + typeof this.editorWidth === "string" && + this.editorWidth.endsWith("%") + ) { + return 100 - parseInt(this.editorWidth) + "%"; } return `calc(100% - ${this.editorWidth}px)`; }, currentLanguage() { - const tab = this.tabs.find(t => t.id === this.activeTab); - return tab ? tab.language : 'markup'; - } + const tab = this.tabs.find((t) => t.id === this.activeTab); + return tab ? tab.language : "markup"; + }, }, watch: { - html(newVal) { - this.updatePreviewDebounced(); + html: { + handler() { + this.schedulePreviewUpdate(); + }, }, - css(newVal) { - this.updatePreviewDebounced(); + css: { + handler() { + this.schedulePreviewUpdate(); + }, + }, + js: { + handler() { + this.schedulePreviewUpdate(); + }, }, - js(newVal) { - this.updatePreviewDebounced(); - } }, created() { - this.highlightCodeDebounced = this.debounce(this.highlightCode, 50); - this.updatePreviewDebounced = this.debounce(this.updatePreview, 50); + this.updatePreviewDebounced = this.debounce(this.updatePreview, 50); const urlParams = new URLSearchParams(window.location.search); - const shareId = urlParams.get('share'); + const shareId = urlParams.get("share"); if (shareId) { this.loadSharedSnippet(shareId); } @@ -99,76 +146,112 @@ createApp({ mounted() { this.initializeLayout(); - document.addEventListener('keydown', this.handleKeyboardShortcuts); + document.addEventListener("keydown", this.handleKeyboardShortcuts); - // Initialize syntax highlighting - this.highlightCode(this.html, 'html'); - this.highlightCode(this.css, 'css'); - this.highlightCode(this.js, 'js'); + // initialize syntax highlighting + this.highlightCode(this.html, "html"); + this.highlightCode(this.css, "css"); + this.highlightCode(this.js, "js"); // ensure iframe isloaded before updating the preview - const preview = document.getElementById('preview-frame'); + const preview = document.getElementById("preview-frame"); if (preview) { preview.onload = () => { this.updatePreview(); - } + }; } }, methods: { + handleScroll(event) { + const textarea = event.target; + const pre = textarea.nextElementSibling; + if (pre) { + pre.scrollTop = textarea.scrollTop; + pre.scrollLeft = textarea.scrollLeft + } + }, + toggleConsole() { + this.showConsole = !this.showConsole; + this.updatePreview(); + }, + schedulePreviewUpdate() { + if (this.updateTimer) { + clearTimeout(this.updateTimer); + } + + if (!this.isExecutionPaused) { + this.updateTimer = setTimeout(() => { + this.updatePreview(); + }, 500); + } + }, + + toggleExecution() { + this.isExecutionPaused = !this.isExecutionPaused; + if (!this.isExecutionPaused) { + // resume execution + this.updatePreview(); + } + }, + toggleEditor() { this.showEditor = !this.showEditor; }, togglePreview() { this.showPreview = !this.showPreview; - if (!this.showPreview) { this.editorWidth = '100%';} - else { this.editorWidth = '50%'; } + if (!this.showPreview) { + this.editorWidth = "100%"; + } else { + this.editorWidth = "50%"; + } }, highlightCode(code, tab) { const languageMap = { - html: 'markup', - css: 'css', - js: 'javascript' + html: "markup", + css: "css", + js: "javascript", }; - + const language = languageMap[tab]; if (!language) return; - + // run highlighting in a requestAnimationFrame to avoid blocking the main thread requestAnimationFrame(() => { try { this.highlightedCode[tab] = Prism.highlight( - code || '', + code || "", Prism.languages[language], language ); } catch (error) { - console.error('Highlighting error:', error); - this.highlightedCode[tab] = code || ''; + console.error("Highlighting error:", error); + this.highlightedCode[tab] = code || ""; } }); }, handleKeydown(event) { - if (event.key === 'Tab') { + if (event.key === "Tab") { event.preventDefault(); - + const textarea = event.target; const start = textarea.selectionStart; const end = textarea.selectionEnd; - const spaces = ' '; - + const spaces = " "; + const value = this.currentCode; const beforeCursor = value.substring(0, start); const afterCursor = value.substring(end); - + if (event.shiftKey) { // TODO: Shift + Tab undo 2 space } else { // Handle Tab (indent) this.currentCode = beforeCursor + spaces + afterCursor; - + this.$nextTick(() => { - textarea.selectionStart = textarea.selectionEnd = start + spaces.length; + textarea.selectionStart = textarea.selectionEnd = + start + spaces.length; }); } } @@ -178,7 +261,7 @@ createApp({ this[this.activeTab] = value; this.highlightCode(value, this.activeTab); }, - + debounce(fn, delay) { let timeoutId; return function (...args) { @@ -188,7 +271,7 @@ createApp({ }, handleKeyboardShortcuts(e) { - // Handle Ctrl/Cmd + number for tab switching + // handle Ctrl/Cmd + number for tab switching if ((e.ctrlKey || e.metaKey) && !e.shiftKey && !e.altKey) { const num = parseInt(e.key); if (num >= 1 && num <= this.tabs.length) { @@ -197,25 +280,25 @@ createApp({ } } - // Handle Ctrl/Cmd + S for save - if ((e.ctrlKey || e.metaKey) && e.key.toLowerCase() === 's') { + // handle Ctrl/Cmd + S for save + if ((e.ctrlKey || e.metaKey) && e.key.toLowerCase() === "s") { e.preventDefault(); this.saveSnippet(); } }, initializeLayout() { - const container = document.querySelector('.editor-container'); + const container = document.querySelector(".editor-container"); this.containerWidth = container.offsetWidth; this.maxWidth = this.containerWidth - this.minWidth; - + this.updateLayout(); }, updateLayout() { - const editorGroup = document.querySelector('.editor-group'); - const preview = document.querySelector('.preview'); - + const editorGroup = document.querySelector(".editor-group"); + const preview = document.querySelector(".preview"); + if (editorGroup && preview) { editorGroup.style.width = this.editorWidth; preview.style.width = this.previewWidth; @@ -223,24 +306,56 @@ createApp({ }, updatePreview() { - const preview = document.getElementById('preview-frame'); + if (this.isExecutionPaused) return; + + const preview = document.getElementById("preview-frame"); if (!preview) return; - - const doc = preview.contentDocument; + + // create a new iframe to replace the existing one + const newFrame = document.createElement("iframe"); + newFrame.id = "preview-frame"; + + // replace the old frame with the new one + preview.parentNode.replaceChild(newFrame, preview); + + // write content to the new frame + const doc = newFrame.contentDocument; doc.open(); - doc.write(` + + const content = ` - + + + - ${this.html} - ` : ''} + - - `); - doc.close(); + `; + + try { + doc.write(content); + doc.close(); + } catch (error) { + console.error("Preview update error:", error); + } }, switchTab(tabId) { @@ -248,36 +363,36 @@ createApp({ // re-highlight code when switching tabs this.$nextTick(() => { this.highlightCode(this[tabId], tabId); - const editor = document.querySelector('.editor-content textarea'); + const editor = document.querySelector(".editor-content textarea"); if (editor) editor.focus(); }); }, async login() { try { - const response = await fetch('/api/auth/login', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, + const response = await fetch("/api/auth/login", { + method: "POST", + headers: { "Content-Type": "application/json" }, body: JSON.stringify({ email: this.loginEmail, - password: this.loginPassword - }) + password: this.loginPassword, + }), }); - if (!response.ok) throw new Error('Login failed'); + if (!response.ok) throw new Error("Login failed"); const data = await response.json(); this.token = data.token; - localStorage.setItem('token', data.token); + localStorage.setItem("token", data.token); this.showLogin = false; } catch (error) { - alert('Login failed'); + alert("Login failed"); } }, logout() { this.token = null; - localStorage.removeItem('token'); + localStorage.removeItem("token"); }, async saveSnippet() { @@ -287,35 +402,35 @@ createApp({ } try { - const response = await fetch('/api/snippets', { - method: 'POST', + const response = await fetch("/api/snippets", { + method: "POST", headers: { - 'Content-Type': 'application/json', - 'Authorization': `Bearer ${this.token}` + "Content-Type": "application/json", + Authorization: `Bearer ${this.token}`, }, body: JSON.stringify({ - title: this.title || 'Untitled', + title: this.title || "Untitled", html: this.html, css: this.css, - js: this.js - }) + js: this.js, + }), }); - if (!response.ok) throw new Error('Failed to save snippet'); + if (!response.ok) throw new Error("Failed to save snippet"); const data = await response.json(); this.currentShareId = data.shareId; this.shareUrl = `${window.location.origin}/?share=${data.shareId}`; this.showShareModal = true; } catch (error) { - alert('Failed to save snippet'); + alert("Failed to save snippet"); } }, async loadSharedSnippet(shareId) { try { const response = await fetch(`/api/snippets/share/${shareId}`); - if (!response.ok) throw new Error('Failed to load snippet'); + if (!response.ok) throw new Error("Failed to load snippet"); const data = await response.json(); this.title = data.title; @@ -323,13 +438,13 @@ createApp({ this.css = data.css; this.js = data.js; - this.highlightCode(this.html, 'html'); - this.highlightCode(this.css, 'css'); - this.highlightCode(this.js, 'js'); + this.highlightCode(this.html, "html"); + this.highlightCode(this.css, "css"); + this.highlightCode(this.js, "js"); this.updatePreview(); } catch (error) { - alert('Failed to load shared snippet'); + alert("Failed to load shared snippet"); } }, @@ -337,8 +452,8 @@ createApp({ try { await navigator.clipboard.writeText(this.shareUrl); } catch (error) { - alert('Failed to copy URL'); + alert("Failed to copy URL"); } - } - } -}).mount('#app'); \ No newline at end of file + }, + }, +}).mount("#app"); diff --git a/public/bincode-min.svg b/public/bincode-min.svg new file mode 100644 index 0000000..a22d436 --- /dev/null +++ b/public/bincode-min.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000..680f352 Binary files /dev/null and b/public/favicon.ico differ diff --git a/public/font.css b/public/font.css new file mode 100644 index 0000000..da4fd21 --- /dev/null +++ b/public/font.css @@ -0,0 +1 @@ +.icon-lock,.icon-share,.icon-unlocked,[data-icon]:before{font-family:icons;speak:none;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased}@font-face{font-family:icons;src:url('fonts/icons.eot')}@font-face{font-family:icons;src:url(data:application/font-woff;charset=utf-8;base64,d09GRk9UVE8AAAXIAAsAAAAACSwAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABDRkYgAAABCAAAAqwAAAR6gYtJc0ZGVE0AAAO0AAAAGgAAABxl+23oR0RFRgAAA9AAAAAcAAAAIAAyAARPUy8yAAAD7AAAAEsAAABgL9zcQGNtYXAAAAQ4AAAAPQAAAVLgFPLNaGVhZAAABHgAAAAuAAAANv2RP3NoaGVhAAAEqAAAAB4AAAAkBBD/5GhtdHgAAATIAAAADgAAABAEAAAAbWF4cAAABNgAAAAGAAAABgAFUABuYW1lAAAE4AAAANwAAAFuDTOJ1nBvc3QAAAW8AAAADAAAACAAAwAAeJy1U09IFHEUfuP+G9dtXG1XFLdZKdJA8U+7lwwKIkvyEKFQiQQVmLJhh7YkLYoyzX7dnIN1EAK3gjp0ioqQDoWBKyUF4SZUYlAslFa6Qyu83ptZpyXy2OX7fe/NvO993/yRwG4HSZKcnUdPdJ0EKQck2KYHc/Qym15sFx6b8NhVN5Q0F6IQFvG4RETX9KgjACI/AOANgFYQAE/A9qMQnKwhQz4UwTpYDxWnujp31dbW0tFgHXXmsdnYaq4GkAakK9KgdBUcrJADHkhIMds+RehR+7Kmay4l9SSl+RHWhMII7ngccTEUQvwenwym+1wG4VbY6sfV9KjT6od4aJLHQ8EU3c8k01rpq0NJJ0L4WxtCpXc0A1SqE9ltfEMMJ7yjwUpXZTrqL3MnU1F/khQLYiriQiyIoLTOIn5t/ag2Ofmc5baaASppUtF9eov/37JNWWKqJTa7qtiQ678+lVTbKo8l7VsOU3xF35nyUZSq6gTChqlyxJnqYcTXUx0Erz5xmSCoKeVeeQZmjJvpKlTVlAYFgn3vCAK0BojVE8DteWJlICNuOn8OIfJ0h4MyR+sR53/2IiZHHiEu3RxE/BK5LGRWrWDV6T+q7GiYHVUwdHA5Te+mSOuldb7Du3m+kR6vGGfNHhnh7YVLvKmPNuEBr7GfWGzO8GR6lLNymmCU2dkTf+e0eiq77Rfs/iFC7qHTZiLIz+s3cp5F1LaPOSj9nTrE9AcgdvAdsedzNJS+f8RE8nRro9Eltv8lsfdjhvuLK/OKeMGq45yzkTd1c+4eISu65hP+ax43/a9r+dfvpk/B14vQcP0GzcnHIgiOZ8UEfSU0d3ecUruXBki94N4ecksASvMD+vAsWFi5wKVKDhdzz5jzuNSyhTWPI/7a+lk2N+Hj9nZH3m8Plkc4eJxjYGBgZACCk535hiD6nMX/aBgNAESVBrQAAHicY2BkYGDgA2IJBhBgYmAEQhYwBvEYAAR2ADd4nGNgZmJgnMDAysDB6MOYxsDA4A6lvzJIMrQwMDAxsDIzwIEAgskQkOaawuDwgOEDA+OD/w8Y9BgfMCg0MDAwwhUoACEjABBCDB8AeJxjYGBgZoBgGQZGBhDwAfIYwXwWBgMgzQGETCCJB0wfGP7/B7MYICwFJgFGqC4wYGRjQOaOSAAAy6gIsAAAAHicY2BkYGAAYhfbRz7x/DZfGbiZGEDgnMX/aAT9/wETA+MDIJeDASwNACnTCuoAAHicY2BkYGB88P8Bgx4TAwPDPwYgCRRBAcwAbecD9gAAeJxjYoAAJigNAABAAAUAAAAAUAAABQAAeJxtjjFOAzEQRd8mu0EBREFB7VBG2pXXNFFKihyAIn0UWauVorXkJPegoqLiGByAA3Ai/jqWKMCSNe+P/8w3cMsbBeMpqKQuPOGKx8xTFgyZS3neM1fc8Jl5JvUtZ1HO1blOUyNPuOM+85RnlplLeV4zVzzwkXmm/hc9e4Iyj9Dvw6DygqfjzIEdUdJ358NOsEm+U6pRDo/B0WBV17q/my7a6aVmpTtSy5NWhOG0CbHzxjXWrE1KVHW2XtXOtrL8/c9WSVG6T32jTWMmWx+PfRhM29h/pn4AnVIydXicY2BmwAsAAH0ABA==) format('woff'),url(data:application/x-font-ttf;charset=utf-8;base64,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) format('truetype');font-weight:400;font-style:normal}[data-icon]:before{content:attr(data-icon)}.icon-lock,.icon-share,.icon-unlocked{font-style:normal}.icon-lock:before{content:"\e000";margin-right:3px}.icon-unlocked:before{content:"\e001";margin-right:3px}.icon-share:before{content:"\e002";margin-right:3px} \ No newline at end of file diff --git a/public/index.html b/public/index.html index b3e3004..61ded63 100644 --- a/public/index.html +++ b/public/index.html @@ -4,7 +4,13 @@ BinCode + + + + + + @@ -25,6 +31,20 @@ preview + + + + \n
')),this._$network=e.find(S(".network")),this._$detail=e.find(S(".detail")),this._$requests=e.find(S(".requests")),this._$control=e.find(S(".control")),this._$filterText=e.find(S(".filter-text"))}}]),i}(v),o=a(9833),lt=a.n(o),r=a(9956),ut=a.n(r),dt=a(8209),z=a(3063),ht=a.n(z),tt=a(3487),ft=a.n(tt),o=a(42),pt=a.n(o),r=a(4696),mt=a.n(r),z=a(7653),vt=a.n(z),tt=a(8613),gt=a.n(tt),o=a(2289),bt=a.n(o),r=a(3629),yt=a.n(r);function wt(e){for(var t,n={},o=0,r=e.length;o(n=kt(n))?1:s(text)'):e.nodeType===Node.COMMENT_NODE?'\x3c!--\x3e'):(n=e.id,o=e.className,r=e.attributes,i=''.concat(e.tagName.toLowerCase(),""),""!==n&&(i+='#'.concat(n,"")),y()(o)&&(a="",b()(o.split(/\s+/g),function(e){""!==e.trim()&&(a+=".".concat(e))}),i+=''.concat(a,"")),t||b()(r,function(e){var t=e.name;"id"!==t&&"class"!==t&&"style"!==t&&(i+=' '.concat(t,'="').concat(e.value,'"'))}),i)}(0,c.Z)(Ot,[{key:"show",value:function(e){this._curEl=e,this._rmDefComputedStyle=!0,this._computedStyleSearchKeyword="",this._enableObserver(),this._render();e=R.domain("DOM").getNodeId({node:e}).nodeId;R.domain("Overlay").highlightNode({nodeId:e,highlightConfig:{showInfo:!0,contentColor:"rgba(111, 168, 220, .66)",paddingColor:"rgba(147, 196, 125, .55)",borderColor:"rgba(255, 229, 153, .66)",marginColor:"rgba(246, 178, 107, .66)"}})}},{key:"destroy",value:function(){this._disableObserver(),this.restoreEventTarget(),this._rmCfg()}},{key:"overrideEventTarget",value:function(){var e=Dt(),o=this._origAddEvent=e.addEventListener,r=this._origRmEvent=e.removeEventListener;e.addEventListener=function(e,t,n){!function(e,t,n,o){o=3\n \n \n \n \n
\n
\n
\n
\n
\n
'),t=(e.html(t),this._$elementName=e.find(S(".element-name")),this._$attributes=e.find(S(".attributes")),this._$styles=e.find(S(".styles")),this._$listeners=e.find(S(".listeners")),this._$computedStyle=e.find(S(".computed-style")),gt()("div"));this._$boxModel=g()(t),this._boxModel=new Ct.Z(t)}},{key:"_toggleAllComputedStyle",value:function(){this._rmDefComputedStyle=!this._rmDefComputedStyle,this._render()}},{key:"_render",value:function(){var e=this._getData(this._curEl),t=this._$attributes,n=this._$elementName,o=this._$styles,r=this._$computedStyle,i=this._$listeners,n=(n.html(e.name),"Empty"),t=(N()(e.attributes)||(n=k()(e.attributes,function(e){var t=e.name,e=e.value;return'\n ').concat(M()(t),'\n ').concat(e,"\n ")}).join("")),n='

Attributes

\n
\n \n \n ').concat(n," \n \n
\n
"),t.html(n),"");N()(e.styles)?o.hide():(n=k()(e.styles,function(e){var t=e.selectorText,e=e.style,e=k()(e,function(e,t){return'
').concat(M()(t),": ").concat(e,";
")}).join("");return'
\n
').concat(M()(t)," {
\n ").concat(e,"\n
}
\n
")}).join(""),t='

Styles

\n
\n ').concat(n,"\n
"),o.html(t).show()),e.computedStyle?(n=S('
\n \n
'),e.rmDefComputedStyle&&(n=S('
\n \n
')),o="

\n Computed Style\n ".concat(n,'\n
\n \n
\n ').concat(e.computedStyleSearchKeyword?'
').concat(M()(e.computedStyleSearchKeyword),"
"):"",'\n

\n
\n
\n \n \n ').concat(k()(e.computedStyle,function(e,t){return'\n \n \n ")}).join(""),"\n \n
').concat(M()(t),"").concat(e,"
\n
"),r.html(o).show(),this._boxModel.setOption("element",this._curEl),r.find(S(".box-model")).append(this._$boxModel.get(0))):r.text("").hide();e.listeners?(t=k()(e.listeners,function(e,t){return e=k()(e,function(e){var t=e.useCapture,e=e.listenerStr;return"
  • ").concat(M()(e),"
  • ")}).join(""),'
    \n
    ').concat(M()(t),'
    \n
      \n ').concat(e,"\n
    \n
    ")}).join(""),t='

    Event Listeners

    \n
    \n ').concat(t," \n
    "),i.html(t).show()):i.hide(),this._$container.show()}},{key:"_getData",value:function(e){var n,o,r,t={},i=new xt(e),a=e.className,s=e.id,c=e.attributes,l=e.tagName,s=(t.computedStyleSearchKeyword=this._computedStyleSearchKeyword,t.attributes=Nt(c),t.name=St({tagName:l,id:s,className:a,attributes:c}),e.erudaEvents);return s&&0!==G()(s).length&&(t.listeners=s),Zt(l)||(a=i.getComputedStyle(),(c=i.getMatchedCSSRules()).unshift(function(e){for(var t={selectorText:"element.style",style:{}},n=0,o=e.length;n$&').replace(jt,function(e,t){return'url("'.concat(It(t),'")')})}var Rt=["script","style","meta","title","link","head"],Zt=function(e){return-1').concat(e,"")},Dt=function(){return vt()(window,"EventTarget.prototype")||window.Node.prototype};var tt=function(e){(0,u.Z)(r,e);n=r,o=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(e){return!1}}();var n,o,t=function(){var e,t=(0,h.Z)(n);return e=o?(e=(0,h.Z)(this).constructor,Reflect.construct(t,arguments,e)):t.apply(this,arguments),(0,d.Z)(this,e)};function r(){var o;return(0,s.Z)(this,r),o=t.call(this),(0,f.Z)((0,l.Z)(o),"_showDetail",function(){o._isShow&&o._curNode&&(o._curNode.nodeType===Node.ELEMENT_NODE?o._detail.show(o._curNode):o._detail.show(o._curNode.parentNode))}),(0,f.Z)((0,l.Z)(o),"_back",function(){if(o._curNode!==o._htmlEl){for(var e=o._curParentQueue,t=e.shift();!Bt(t);)t=e.shift();o.set(t)}}),(0,f.Z)((0,l.Z)(o),"_updateScale",function(e){o._splitMediaQuery.setQuery("screen and (min-width: ".concat(680*e,"px)"))}),(0,f.Z)((0,l.Z)(o),"_deleteNode",function(){var e=o._curNode;e.parentNode&&e.parentNode.removeChild(e)}),(0,f.Z)((0,l.Z)(o),"_copyNode",function(){var e=o._curNode;e.nodeType===Node.ELEMENT_NODE?j()(e.outerHTML):j()(e.nodeValue),o._container.notify("Copied")}),(0,f.Z)((0,l.Z)(o),"_toggleSelect",function(){o._$el.find(S(".select")).toggleClass(S("active")),o._selectElement=!o._selectElement,o._selectElement?(R.domain("Overlay").setInspectMode({mode:"searchForNode",highlightConfig:{showInfo:!ut()(),showRulers:!1,showAccessibilityInfo:!ut()(),showExtensionLines:!1,contrastAlgorithm:"aa",contentColor:"rgba(111, 168, 220, .66)",paddingColor:"rgba(147, 196, 125, .55)",borderColor:"rgba(255, 229, 153, .66)",marginColor:"rgba(246, 178, 107, .66)"}}),o._container.hide()):(R.domain("Overlay").setInspectMode({mode:"none"}),R.domain("Overlay").hideHighlight())}),(0,f.Z)((0,l.Z)(o),"_inspectNodeRequested",function(e){e=e.backendNodeId,o._container.show(),o._toggleSelect(),e=R.domain("DOM").getNode({nodeId:e}).node;o.select(e)}),(0,f.Z)((0,l.Z)(o),"_setNode",function(e){if(e!==o._curNode){o._curNode=e,o._renderCrumbs();for(var t=[],n=e.parentNode;n;)t.push(n),n=n.parentNode;o._curParentQueue=t,o._splitMode&&o._showDetail(),o._updateButtons(),o._updateHistory()}}),o._style=x(a(5896)),o.name="elements",o._selectElement=!1,o._observeElement=!0,o._history=[],B().mixin((0,l.Z)(o)),o}return(0,c.Z)(r,[{key:"init",value:function(e,t){var n=this;(0,m.Z)((0,h.Z)(r.prototype),"init",this).call(this,e),this._container=t,this._initTpl(),this._htmlEl=document.documentElement,this._detail=new Et(this._$detail,t),this.config=this._detail.config,this._splitMediaQuery=new(at())("screen and (min-width: 680px)"),this._splitMode=this._splitMediaQuery.isMatch(),this._domViewer=new dt.Z(this._$domViewer.get(0),{node:this._htmlEl,ignore:function(e){return we(e)||_e(e)}}),this._domViewer.expand(),this._bindEvent(),R.domain("Overlay").enable(),ae()(function(){return n._updateHistory()})}},{key:"show",value:function(){(0,m.Z)((0,h.Z)(r.prototype),"show",this).call(this),this._isShow=!0,this._curNode?this._splitMode&&this._showDetail():this.select(document.body)}},{key:"hide",value:function(){(0,m.Z)((0,h.Z)(r.prototype),"hide",this).call(this),this._isShow=!1,R.domain("Overlay").hideHighlight()}},{key:"set",value:function(e){return this.select(e)}},{key:"select",value:function(e){return this._domViewer.select(e),this._setNode(e),this.emit("change",e),this}},{key:"destroy",value:function(){(0,m.Z)((0,h.Z)(r.prototype),"destroy",this).call(this),p.off(p.SCALE,this._updateScale),x.remove(this._style),this._detail.destroy(),R.domain("Overlay").off("inspectNodeRequested",this._inspectNodeRequested),R.domain("Overlay").disable(),this._splitMediaQuery.removeAllListeners()}},{key:"_updateButtons",value:function(){var e=this._$control,t=e.find(S(".show-detail")),n=e.find(S(".copy-node")),e=e.find(S(".delete-node")),o=S("icon-disabled"),r=(t.addClass(o),n.addClass(o),e.addClass(o),this._curNode);r&&(r!==document.documentElement&&r!==document.body&&e.rmClass(o),n.rmClass(o),r.nodeType===Node.ELEMENT_NODE)&&t.rmClass(o)}},{key:"_initTpl",value:function(){var e=this._$el;e.html(S('
    \n
    \n \n \n \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    ')),this._$detail=e.find(S(".detail")),this._$domViewer=e.find(S(".dom-viewer")),this._$control=e.find(S(".control")),this._$crumbs=e.find(S(".crumbs"))}},{key:"_renderCrumbs",value:function(){var e=function(e){for(var t=[],n=0;e;)t.push({text:St(e,{noAttr:!0}),idx:n++}),e=e.parentElement;return t.reverse()}(this._curNode),t="";N()(e)||(t=k()(e,function(e){var t=e.text,e=e.idx;return'
  • ').concat(t,"
  • ")}).join("")),this._$crumbs.html(t)}},{key:"_bindEvent",value:function(){var e=this,n=this;this._$el.on("click",S(".crumb"),function(){for(var e=fe()(g()(this).data("idx")),t=n._curNode;e--&&t.parentElement;)t=t.parentElement;Bt(t)&&n.select(t)}),this._$control.on("click",S(".select"),this._toggleSelect).on("click",S(".show-detail"),this._showDetail).on("click",S(".copy-node"),this._copyNode).on("click",S(".delete-node"),this._deleteNode),this._domViewer.on("select",this._setNode).on("deselect",this._back),R.domain("Overlay").on("inspectNodeRequested",this._inspectNodeRequested),this._splitMediaQuery.on("match",function(){e._splitMode=!0,e._showDetail()}),this._splitMediaQuery.on("unmatch",function(){e._splitMode=!1,e._detail.hide()}),p.on(p.SCALE,this._updateScale)}},{key:"_updateHistory",value:function(){var e=this._container.get("console");if(e){var t=this._history;t.unshift(this._curNode),5'.concat(e,"")}))!==e.nodeValue)return(e=g()(document.createElement("div"))).html(t),e.addClass("eruda-search-highlight-block"),e.get(0)}}))})},desc:"Highlight given text on page"},{name:"Edit Page",fn:function(){var e=document.body;e.contentEditable="true"!==e.contentEditable},desc:"Toggle body contentEditable"},{name:"Fit Screen",fn:function(){var e=document.body,t=document.documentElement,n=g()(e);n.data("scaled")?(window.scrollTo(0,+n.data("scaled")),n.rmAttr("data-scaled"),n.css("transform","none")):(e=Math.max(e.scrollHeight,e.offsetHeight,t.clientHeight,t.scrollHeight,t.offsetHeight),t=Math.max(document.documentElement.clientHeight,window.innerHeight||0),n.css("transform","scale(".concat(t/e,")")),n.data("scaled",window.scrollY),window.scrollTo(0,e/2-t/2))},desc:"Scale down the whole page to fit screen"},{name:"Load Monitor Plugin",fn:function(){Z("monitor")},desc:"Display page fps and memory"},{name:"Load Features Plugin",fn:function(){Z("features")},desc:"Browser feature detections"},{name:"Load Timing Plugin",fn:function(){Z("timing")},desc:"Show performance and resource timing"},{name:"Load Code Plugin",fn:function(){Z("code")},desc:"Edit and run JavaScript"},{name:"Load Benchmark Plugin",fn:function(){Z("benchmark")},desc:"Run JavaScript benchmarks"},{name:"Load Geolocation Plugin",fn:function(){Z("geolocation")},desc:"Test geolocation"},{name:"Load Orientation Plugin",fn:function(){Z("orientation")},desc:"Test orientation api"},{name:"Load Touches Plugin",fn:function(){Z("touches")},desc:"Visualize screen touches"}];function $t(e,t){var n=e.childNodes;if(!we(e)){for(var o=0,r=n.length;o\n

    ').concat(M()(e.name),'\n
    \n \n
    \n

    \n
    \n ').concat(M()(e.desc),"\n
    \n ")}).join("");this._renderHtml(e)}},{key:"_renderHtml",value:function(e){e!==this._lastHtml&&(this._lastHtml=e,this._$el.html(e))}}]),r}(v),r=a(4224),qt=a.n(r),z=a(8991),Jt=a.n(z),r=a(1352),Qt=a.n(r),z=a(8099),Wt=a.n(z),Ut=((0,c.Z)(Vt,[{key:"destroy",value:function(){p.off(p.SCALE,this._updateGridHeight)}},{key:"refresh",value:function(){var n=this._dataGrid;this._refreshStorage(),n.clear(),b()(this._storeData,function(e){var t=e.key,e=e.val;n.append({key:t,value:e},{selectable:!0})})}},{key:"_refreshStorage",value:function(){var n,o=this._resources,e=ge(this._type,!1);e&&(n=[],e=JSON.parse(JSON.stringify(e)),b()(e,function(e,t){!y()(e)||o.config.get("hideErudaSetting")&&(Ze()(t,"eruda")||"active-eruda"===t)||n.push({key:t,val:Ve()(e,200)})}),this._storeData=n)}},{key:"_updateButtons",value:function(){var e=this._$container,t=e.find(S(".show-detail")),n=e.find(S(".delete-storage")),e=e.find(S(".copy-storage")),o=S("btn-disabled");t.addClass(o),n.addClass(o),e.addClass(o),this._selectedItem&&(t.rmClass(o),n.rmClass(o),e.rmClass(o))}},{key:"_initTpl",value:function(){var e=this._$container,t=this._type;e.html(S('

    \n '.concat("local"===t?"Local":"Session",' Storage\n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n

    \n
    '))),this._$dataGrid=e.find(S(".data-grid")),this._$filterText=e.find(S(".filter-text"))}},{key:"_getVal",value:function(e){return("local"===this._type?localStorage:sessionStorage).getItem(e)}},{key:"_bindEvent",value:function(){var n=this,t=this._type,o=this._devtools;function r(e,t){var n=o.get("sources");n&&(n.set(e,t),o.showTool("sources"))}this._$container.on("click",S(".refresh-storage"),function(){o.notify("Refreshed"),n.refresh()}).on("click",S(".clear-storage"),function(){b()(n._storeData,function(e){("local"===t?localStorage:sessionStorage).removeItem(e.key)}),n.refresh()}).on("click",S(".show-detail"),function(){var t=n._selectedItem,t=n._getVal(t);try{r("object",JSON.parse(t))}catch(e){r("raw",t)}}).on("click",S(".copy-storage"),function(){var e=n._selectedItem;j()(n._getVal(e)),o.notify("Copied")}).on("click",S(".filter"),function(){T.Z.prompt("Filter").then(function(e){qe()(e)||(e=C()(e),n._$filterText.text(e),n._dataGrid.setOption("filter",e))})}).on("click",S(".delete-storage"),function(){var e=n._selectedItem;("local"===t?localStorage:sessionStorage).removeItem(e),n.refresh()}),this._dataGrid.on("select",function(e){n._selectedItem=e.data.key,n._updateButtons()}).on("deselect",function(){n._selectedItem=null,n._updateButtons()}),p.on(p.SCALE,this._updateGridHeight)}}]),Vt);function Vt(e,t,n,o){var r=this;(0,s.Z)(this,Vt),(0,f.Z)(this,"_updateGridHeight",function(e){r._dataGrid.setOption({minHeight:60*e,maxHeight:223*e})}),this._type=o,this._$container=e,this._devtools=t,this._resources=n,this._selectedItem=null,this._storeData=[],this._initTpl(),this._dataGrid=new rt.Z(this._$dataGrid.get(0),{columns:[{id:"key",title:"Key",weight:30},{id:"value",title:"Value",weight:90}],minHeight:60,maxHeight:223}),this._bindEvent()}function Kt(e,t){e.rmClass(S("ok")).rmClass(S("danger")).rmClass(S("warn")).addClass(S(t))}function Xt(e,t){if(0===t)return"";var n=0,o=0;switch(e){case"cookie":n=30,o=60;break;case"script":n=5,o=10;break;case"stylesheet":n=4,o=8;break;case"image":n=50,o=100}return o<=t?"danger":n<=t?"warn":"ok"}(0,c.Z)(tn,[{key:"refresh",value:function(){var e=this._$container,n=this._dataGrid,t=R.domain("Network").getCookies().cookies,t=k()(t,function(e){return{key:e.name,val:e.value}});n.clear(),b()(t,function(e){var t=e.key,e=e.val;n.append({key:t,value:e},{selectable:!0})}),Kt(e,Xt("cookie",t.length))}},{key:"_initTpl",value:function(){var e=this._$container;e.html(S('

    \n Cookie\n \n
    \n \n
    \n \n \n \n
    \n \n
    \n
    \n

    \n
    ')),this._$dataGrid=e.find(S(".data-grid")),this._$filterText=e.find(S(".filter-text"))}},{key:"_updateButtons",value:function(){var e=this._$container,t=e.find(S(".show-detail")),n=e.find(S(".delete-cookie")),e=e.find(S(".copy-cookie")),o=S("btn-disabled");t.addClass(o),n.addClass(o),e.addClass(o),this._selectedItem&&(t.rmClass(o),n.rmClass(o),e.rmClass(o))}},{key:"_getVal",value:function(e){for(var t=R.domain("Network").getCookies().cookies,n=0,o=t.length;ne.length)&&(t=e.length);for(var n=0,o=new Array(t);nEmpty",n=(N()(t)||(n=k()(t,function(e){return e=M()(e),'
  • ').concat(e,"
  • ")}).join("")),'

    \n Script\n
    \n \n
    \n

    \n
      \n ').concat(n,"\n
    ")),o=this._$script;return Kt(o,e),o.html(n),this}},{key:"refreshStylesheet",value:function(){var e=[],t=(g()("link").each(function(){"stylesheet"===this.rel&&e.push(this.href)}),Xt("stylesheet",(e=pt()(e)).length)),n="
  • Empty
  • ",n=(N()(e)||(n=k()(e,function(e){return e=M()(e),'
  • ').concat(e,"
  • ")}).join("")),'

    \n Stylesheet\n
    \n \n
    \n

    \n
      \n ').concat(n,"\n
    ")),o=this._$stylesheet;return Kt(o,t),o.html(n),this}},{key:"refreshIframe",value:function(){var t=[],e=(g()("iframe").each(function(){var e=g()(this).attr("src");e&&t.push(e)}),t=pt()(t),"
  • Empty
  • "),e=(N()(t)||(e=k()(t,function(e){return e=M()(e),'
  • ').concat(e,"
  • ")}).join("")),'

    \n Iframe\n
    \n \n
    \n

    \n
      \n ').concat(e,"\n
    "));return this._$iframe.html(e),this}},{key:"refreshLocalStorage",value:function(){return this._localStorage.refresh(),this}},{key:"refreshSessionStorage",value:function(){return this._sessionStorage.refresh(),this}},{key:"refreshCookie",value:function(){return this._cookie.refresh(),this}},{key:"refreshImage",value:function(){var n=[],e=this._performance=window.webkitPerformance||window.performance,e=(e&&e.getEntries?this._performance.getEntries().forEach(function(e){"img"!==e.initiatorType&&!rn(e.name)||w()(e.name,"exclude=true")||n.push(e.name)}):g()("img").each(function(){var e=g()(this),t=e.attr("src");"true"!==e.data("exclude")&&n.push(t)}),(n=pt()(n)).sort(),Xt("image",n.length)),t="
  • Empty
  • ",t=(N()(n)||(t=k()(n,function(e){return'
  • \n \n
  • ')}).join("")),'

    \n Image\n
    \n \n
    \n

    \n
      \n ').concat(t,"\n
    ")),o=this._$image;return Kt(o,e),o.html(t),this}},{key:"show",value:function(){return(0,m.Z)((0,h.Z)(r.prototype),"show",this).call(this),this._observeElement&&this._enableObserver(),this.refresh()}},{key:"hide",value:function(){return this._disableObserver(),(0,m.Z)((0,h.Z)(r.prototype),"hide",this).call(this)}},{key:"_initTpl",value:function(){var e=this._$el;e.html(S('
    \n
    \n \n
    \n
    \n
    \n
    ')),this._$localStorage=e.find(S(".local-storage")),this._$sessionStorage=e.find(S(".session-storage")),this._$cookie=e.find(S(".cookie")),this._$script=e.find(S(".script")),this._$stylesheet=e.find(S(".stylesheet")),this._$iframe=e.find(S(".iframe")),this._$image=e.find(S(".image"))}},{key:"_bindEvent",value:function(){var e=this,t=this._$el,o=this._container;function n(e,t){var n=o.get("sources");n&&(n.set(e,t),o.showTool("sources"))}function r(t){return function(e){o.get("sources")&&(e.preventDefault(),e=g()(this).attr("href"),"iframe"!==t&&qt()(location.href,e)?Jt()({url:e,success:function(e){n(t,e)},dataType:"raw"}):n("iframe",e))}}t.on("click",".eruda-refresh-script",function(){o.notify("Refreshed"),e.refreshScript()}).on("click",".eruda-refresh-stylesheet",function(){o.notify("Refreshed"),e.refreshStylesheet()}).on("click",".eruda-refresh-iframe",function(){o.notify("Refreshed"),e.refreshIframe()}).on("click",".eruda-refresh-image",function(){o.notify("Refreshed"),e.refreshImage()}).on("click",".eruda-img-link",function(){n("img",g()(this).attr("src"))}).on("click",".eruda-css-link",r("css")).on("click",".eruda-js-link",r("js")).on("click",".eruda-iframe-link",r("iframe"))}},{key:"_rmCfg",value:function(){var e=this.config,t=this._container.get("settings");t&&t.remove(e,"hideErudaSetting").remove(e,"observeElement").remove("Resources")}},{key:"_initCfg",value:function(){var n=this,e=this.config=A.createCfg("resources",{hideErudaSetting:!0,observeElement:!0});e.get("hideErudaSetting")&&(this._hideErudaSetting=!0),e.get("observeElement")||(this._observeElement=!1),e.on("change",function(e,t){switch(e){case"hideErudaSetting":return void(n._hideErudaSetting=t);case"observeElement":return(n._observeElement=t)?n._enableObserver():n._disableObserver()}}),this._container.get("settings").text("Resources").switch(e,"hideErudaSetting","Hide Eruda Setting").switch(e,"observeElement","Auto Refresh Elements").separator()}},{key:"_initObserver",value:function(){var t=this;this._observer=new(bt())(function(e){b()(e,function(e){t._handleMutation(e)})})}},{key:"_handleMutation",value:function(e){var t=this;if(!we(e.target)){var n=function(e){switch((e=e).tagName?e.tagName.toLowerCase():""){case"script":t.refreshScript();break;case"img":t.refreshImage();break;case"link":t.refreshStylesheet()}};if("attributes"===e.type)n(e.target);else if("childList"===e.type){n(e.target);var o,r=Qt()(e.addedNodes),i=function(e,t){var n,o,r,i,a="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(a)return r=!(o=!0),{s:function(){a=a.call(e)},n:function(){var e=a.next();return o=e.done,e},e:function(e){r=!0,n=e},f:function(){try{o||null==a.return||a.return()}finally{if(r)throw n}}};if(Array.isArray(e)||(a=function(e){var t;if(e)return"string"==typeof e?nn(e,void 0):"Map"===(t="Object"===(t=Object.prototype.toString.call(e).slice(8,-1))&&e.constructor?e.constructor.name:t)||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?nn(e,void 0):void 0}(e))||t&&e&&"number"==typeof e.length)return a&&(e=a),i=0,{s:t=function(){},n:function(){return i>=e.length?{done:!0}:{done:!1,value:e[i++]}},e:function(e){throw e},f:t};throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(Wt()(r,Qt()(e.removedNodes)));try{for(i.s();!(o=i.n()).done;)n(o.value)}catch(e){i.e(e)}finally{i.f()}}}}},{key:"_enableObserver",value:function(){this._observer.observe(document.documentElement,{attributes:!0,childList:!0,subtree:!0})}},{key:"_disableObserver",value:function(){this._observer.disconnect()}}]),r}(v),on=/\.(jpeg|jpg|gif|png)$/,rn=function(e){return on.test(e)},z=a(4541),an=a.n(z),z=an()(),sn=[{name:"Location",val:function(){return M()(location.href)}},{name:"User Agent",val:navigator.userAgent},{name:"Device",val:["",'"),""),""),"
    screen'.concat(screen.width," * ").concat(screen.height,"
    viewport".concat(window.innerWidth," * ").concat(window.innerHeight,"
    pixel ratio".concat(window.devicePixelRatio,"
    "].join("")},{name:"System",val:["",'"),""),"
    os'.concat(st()(),"
    browser".concat(z.name+" "+z.version,"
    "].join("")},{name:"About",val:'Eruda v3.0.1'},{name:"Backers",val:function(){return'')}}],z=a(550),cn=a.n(z);var z=function(e){(0,u.Z)(r,e);n=r,o=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(e){return!1}}();var n,o,t=function(){var e,t=(0,h.Z)(n);return e=o?(e=(0,h.Z)(this).constructor,Reflect.construct(t,arguments,e)):t.apply(this,arguments),(0,d.Z)(this,e)};function r(){var e;return(0,s.Z)(this,r),(e=t.call(this))._style=x(a(879)),e.name="info",e._infos=[],e}return(0,c.Z)(r,[{key:"init",value:function(e,t){(0,m.Z)((0,h.Z)(r.prototype),"init",this).call(this,e),this._container=t,this._addDefInfo(),this._bindEvent()}},{key:"destroy",value:function(){(0,m.Z)((0,h.Z)(r.prototype),"destroy",this).call(this),x.remove(this._style)}},{key:"add",value:function(t,n){var e=this._infos,o=!1;return b()(e,function(e){t===e.name&&(e.val=n,o=!0)}),o||e.push({name:t,val:n}),this._render(),this}},{key:"get",value:function(t){var n,e=this._infos;return ue()(t)?cn()(e):(b()(e,function(e){t===e.name&&(n=e.val)}),n)}},{key:"remove",value:function(e){for(var t=this._infos,n=t.length-1;0<=n;n--)t[n].name===e&&t.splice(n,1);return this._render(),this}},{key:"clear",value:function(){return this._infos=[],this._render(),this}},{key:"_addDefInfo",value:function(){var t=this;b()(sn,function(e){return t.add(e.name,e.val)})}},{key:"_render",value:function(){var n=[],e=(b()(this._infos,function(e){var t=e.name,e=e.val;Pe()(e)&&(e=e()),n.push({name:t,val:e})}),"
      ".concat(k()(n,function(e){return'
    • ').concat(M()(e.name),'

      ').concat(e.val,"
    • ")}).join(""),"
    "));this._renderHtml(e)}},{key:"_bindEvent",value:function(){var n=this._container;this._$el.on("click",S(".copy"),function(){var e=g()(this).parent().parent(),t=e.find(S(".title")).text(),e=e.find(S(".content")).text();j()("".concat(t,": ").concat(e)),n.notify("Copied")})}},{key:"_renderHtml",value:function(e){e!==this._lastHtml&&(this._lastHtml=e,this._$el.html(e))}}]),r}(v),ln=a(8299),un=a(8368),dn=a.n(un),un=a(3651),hn=a.n(un),fn=a(7049);var un=function(e){(0,u.Z)(r,e);n=r,o=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(e){return!1}}();var n,o,t=function(){var e,t=(0,h.Z)(n);return e=o?(e=(0,h.Z)(this).constructor,Reflect.construct(t,arguments,e)):t.apply(this,arguments),(0,d.Z)(this,e)};function r(){var e;return(0,s.Z)(this,r),(e=t.call(this))._style=x(a(1344)),e.name="sources",e._showLineNum=!0,e}return(0,c.Z)(r,[{key:"init",value:function(e,t){(0,m.Z)((0,h.Z)(r.prototype),"init",this).call(this,e),this._container=t,this._bindEvent(),this._initCfg()}},{key:"destroy",value:function(){(0,m.Z)((0,h.Z)(r.prototype),"destroy",this).call(this),x.remove(this._style),this._rmCfg()}},{key:"set",value:function(e,t){var n;if("img"!==e)return this._data={type:e,val:t},this._render(),this;this._isFetchingData=!0,e=new Image,n=this,e.onload=function(){n._isFetchingData=!1,n._data={type:"img",val:{width:this.width,height:this.height,src:t}},n._render()},e.onerror=function(){n._isFetchingData=!1},e.src=t}},{key:"show",value:function(){return(0,m.Z)((0,h.Z)(r.prototype),"show",this).call(this),this._data||this._isFetchingData||this._renderDef(),this}},{key:"_renderDef",value:function(){var t=this;if(this._html)return this._data={type:"html",val:this._html},this._render();this._isGettingHtml||(this._isGettingHtml=!0,Jt()({url:location.href,success:function(e){return t._html=e},error:function(){return t._html="Sorry, unable to fetch source code:("},complete:function(){t._isGettingHtml=!1,t._renderDef()},dataType:"raw"}))}},{key:"_bindEvent",value:function(){var n=this;this._container.on("showTool",function(e,t){e!==n.name&&t.name===n.name&&delete n._data})}},{key:"_rmCfg",value:function(){var e=this.config,t=this._container.get("settings");t&&t.remove(e,"showLineNum").remove("Sources")}},{key:"_initCfg",value:function(){var n=this,e=this.config=A.createCfg("sources",{showLineNum:!0});e.get("showLineNum")||(this._showLineNum=!1),e.on("change",function(e,t){"showLineNum"===e&&(n._showLineNum=t)}),this._container.get("settings").text("Sources").switch(e,"showLineNum","Show Line Numbers").separator()}},{key:"_render",value:function(){switch(this._isInit=!0,this._data.type){case"html":case"js":case"css":return this._renderCode();case"img":return this._renderImg();case"object":return this._renderObj();case"raw":return this._renderRaw();case"iframe":return this._renderIframe()}}},{key:"_renderImg",value:function(){var e=this._data.val,t=e.width,n=e.height,e=e.src;this._renderHtml('
    \n
    ').concat(M()(e),'
    \n
    \n \n
    \n
    ').concat(M()(t)," × ").concat(M()(n),"
    \n
    "))}},{key:"_renderCode",value:function(){var e=this._data,t=(this._renderHtml('
    '),!1),e.val),n=e.val.length,n=(vn'),!1);var e=this._data.val;try{y()(e)&&(e=JSON.parse(e))}catch(e){}new ln.Z(this._$el.find(".eruda-json").get(0),{unenumerable:!0,accessGetter:!0}).set(e)}},{key:"_renderRaw",value:function(){var e=this._data,e=(this._renderHtml('
    \n
    \n
    ')),e.val),t=this._$el.find(S(".raw")).get(0);e.length>vn&&(e=Ve()(e,vn)),new fn.Z(t,{text:e,wrapLongLines:!0,showLineNumbers:e.length'))}},{key:"_renderHtml",value:function(e){var t=this;(1')),x.container=t.find(".".concat(e)).get(0)),x(a(8020)+a(4821)+a(9327)+a(7591)+a(4987)+a(8903)+a(5512)+a(2156)+a(5777)+a(7871)+a(6833)+a(8516)+a(5357))},_initEntryBtn:function(){var e=this;this._entryBtn=new Me(this._$el),this._entryBtn.on("click",function(){return e._devTools.toggle()})},_initSettings:function(){var e=this._devTools,t=new A;e.add(t),this._entryBtn.initCfg(t),e.initCfg(t)},_initTools:function(){var n=this,e=0s[0]&&t[1]",a))s.push(e);else{var o=[];w.default(e.attributes,function(e){var t=e.name,e=e.value;return o.push(t,e)});for(var r=0,i=o.length;r")[0].attrs)},t.setAttributeValue=function(e){var t=e.nodeId,n=e.name,e=e.value;d.getNode(t).setAttribute(n,e)};var O=[];function T(e,t){for(var n=u.filterNodes(e.childNodes),o=0,r=n.length;o "'+g.default(e.value)+'"}':'"'+g.default(e.value)+'"':l.default(e,!1)}function z(e){var t=typeof e,n="object";if(e instanceof R)n="internal#entry";else if(r.default(e))n="null";else if(i.default(e))n="array";else if(c.default(e))n="regexp";else if(s.default(e))n="error";else if(y.default(e))n="map";else if(w.default(e))n="set";else try{a.default(e)&&(n="node")}catch(e){}return{type:t,subtype:n}}var R=function(e,t){t&&(this.name=t),this.value=e};function Z(e){return e instanceof R||e[0]&&e[0]instanceof R}},2636:function(e,t,n){"use strict";var o,r,i=this&&this.__extends||(o=function(e,t){return(o=Object.setPrototypeOf||({__proto__:[]}instanceof Array?function(e,t){e.__proto__=t}:function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])}))(e,t)},function(e,t){function n(){this.constructor=e}o(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}},s=(Object.defineProperty(t,"__esModule",{value:!0}),t.fullUrl=t.FetchRequest=t.XhrRequest=void 0,a(n(1443))),c=a(n(6768)),l=a(n(9702)),u=a(n(6334)),d=a(n(8887)),h=a(n(4331)),f=a(n(8847)),p=a(n(3783)),m=a(n(6930)),v=a(n(3875)),g=n(316),a=(r=s.default,i(b,r),b.prototype.toJSON=function(){return{method:this.method,url:this.url,id:this.id}},b.prototype.handleSend=function(e){c.default(e)||(e=""),e={name:k(this.url),url:this.url,data:e,time:f.default(),reqHeaders:this.reqHeaders,method:this.method},d.default(this.reqHeaders)||(e.reqHeaders=this.reqHeaders),this.emit("send",this.id,e)},b.prototype.handleReqHeadersSet=function(e,t){e&&t&&(this.reqHeaders[e]=t)},b.prototype.handleHeadersReceived=function(){var n,e=this.xhr,t=C(e.getResponseHeader("Content-Type")||"");this.emit("headersReceived",this.id,{type:t.type,subType:t.subType,size:_(e,!0,this.url),time:f.default(),resHeaders:(t=(t=e).getAllResponseHeaders().split("\n"),n={},p.default(t,function(e){var t;""!==(e=h.default(e))&&(t=(e=e.split(":",2))[0],e=e[1],n[t]=h.default(e))}),n)})},b.prototype.handleDone=function(){var t,e,n=this,o=this.xhr,r=o.responseType,i="",a=function(){n.emit("done",n.id,{status:o.status,size:_(o,!1,n.url),time:f.default(),resTxt:i})},s=C(o.getResponseHeader("Content-Type")||"");"blob"!==r||"text"!==s.type&&"javascript"!==s.subType&&"json"!==s.subType?(""!==r&&"text"!==r||(i=o.responseText),"json"===r&&(i=JSON.stringify(o.response)),a()):(s=o.response,t=function(e,t){t&&(i=t),a()},(e=new FileReader).onload=function(){t(0,e.result)},e.onerror=function(e){t()},e.readAsText(s))},b);function b(e,t,n){var o=r.call(this)||this;return o.xhr=e,o.reqHeaders={},o.method=t,o.url=A(n),o.id=g.createId(),o}t.XhrRequest=a;y=s.default,i(w,y),w.prototype.send=function(e){var r=this,t=this.options,t=c.default(t.body)?t.body:"";this.emit("send",this.id,{name:k(this.url),url:this.url,data:t,reqHeaders:this.reqHeaders,time:f.default(),method:this.method}),e.then(function(t){var o=C((t=t.clone()).headers.get("Content-Type"));return t.text().then(function(e){var n,e={type:o.type,subType:o.subType,time:f.default(),size:function(e,t){e=e.headers.get("Content-length");return e?v.default(e):E(t)}(t,e),resTxt:e,resHeaders:(n={},t.headers.forEach(function(e,t){return n[t]=e}),n),status:t.status};d.default(r.reqHeaders)||(e.reqHeaders=r.reqHeaders),r.emit("done",r.id,e)}),t})};var y,n=w;function w(e,t){void 0===t&&(t={});var n=y.call(this)||this;return e instanceof window.Request&&(e=e.url),n.url=A(e),n.id=g.createId(),n.options=t,n.reqHeaders=t.headers||{},n.method=t.method||"GET",n}function _(n,o,e){var r=0;function t(){var e,t;!o&&(t=(t="")!==(e=n.responseType)&&"text"!==e?t:n.responseText)&&(r=E(t))}if(m.default(e,S))try{r=v.default(n.getResponseHeader("Content-Length"))}catch(n){t()}else t();return 0===r&&t(),r}t.FetchRequest=n;var x=document.createElement("a");function A(e){return x.href=e,x.protocol+"//"+x.host+x.pathname+x.search+x.hash}function k(e){var t=l.default(e.split("/"));return t=""===(t=-1s[0]&&t[1]*{vertical-align:top}.luna-console-log-item .luna-console-log-content .luna-console-null,.luna-console-log-item .luna-console-log-content .luna-console-undefined{color:#5e5e5e}.luna-console-log-item .luna-console-log-content .luna-console-number{color:#1c00cf}.luna-console-log-item .luna-console-log-content .luna-console-boolean{color:#0d22aa}.luna-console-log-item .luna-console-log-content .luna-console-regexp,.luna-console-log-item .luna-console-log-content .luna-console-symbol{color:#881391}.luna-console-log-item .luna-console-data-grid,.luna-console-log-item .luna-console-dom-viewer{white-space:initial}.luna-console-log-item.luna-console-error{z-index:50;background:#fff0f0;color:red;border-top:1px solid #ffd6d6;border-bottom:1px solid #ffd6d6}.luna-console-log-item.luna-console-error .luna-console-stack{padding-left:1.2em;white-space:nowrap}.luna-console-log-item.luna-console-error .luna-console-count{background:red}.luna-console-log-item.luna-console-debug{z-index:20}.luna-console-log-item.luna-console-input{border-bottom-color:transparent}.luna-console-log-item.luna-console-warn{z-index:40;color:#5c5c00;background:#fffbe5;border-top:1px solid #fff5c2;border-bottom:1px solid #fff5c2}.luna-console-log-item.luna-console-warn .luna-console-count{background:#e8a400}.luna-console-log-item.luna-console-info{z-index:30}.luna-console-log-item.luna-console-group,.luna-console-log-item.luna-console-groupCollapsed{font-weight:700}.luna-console-preview{display:inline-block}.luna-console-preview .luna-console-preview-container{display:flex;align-items:center}.luna-console-preview .luna-console-json{overflow-x:auto;-webkit-overflow-scrolling:touch;padding-left:12px}.luna-console-preview .luna-console-preview-icon-container{display:block}.luna-console-preview .luna-console-preview-icon-container .luna-console-icon{position:relative;font-size:12px}.luna-console-preview .luna-console-preview-icon-container .luna-console-icon-caret-down{top:2px}.luna-console-preview .luna-console-preview-icon-container .luna-console-icon-caret-right{top:1px}.luna-console-preview .luna-console-preview-content-container{word-break:break-all}.luna-console-preview .luna-console-descriptor,.luna-console-preview .luna-console-object-preview{font-style:italic}.luna-console-preview .luna-console-key{color:#881391}.luna-console-preview .luna-console-number{color:#1c00cf}.luna-console-preview .luna-console-null{color:#5e5e5e}.luna-console-preview .luna-console-string{color:#c41a16}.luna-console-preview .luna-console-boolean{color:#0d22aa}.luna-console-preview .luna-console-special{color:#5e5e5e}.luna-console-theme-dark{color-scheme:dark}.luna-console-theme-dark .luna-console-log-container.luna-console-selected .luna-console-log-item{background:#29323d}.luna-console-theme-dark .luna-console-log-container.luna-console-selected .luna-console-log-item:not(.luna-console-error):not(.luna-console-warn){border-color:#4173b4}.luna-console-theme-dark .luna-console-log-item{color:#a5a5a5;border-bottom-color:#3d3d3d}.luna-console-theme-dark .luna-console-log-item .luna-console-code .luna-console-keyword{color:#e36eec}.luna-console-theme-dark .luna-console-log-item .luna-console-code .luna-console-number{color:#9980ff}.luna-console-theme-dark .luna-console-log-item .luna-console-code .luna-console-operator{color:#7f7f7f}.luna-console-theme-dark .luna-console-log-item .luna-console-code .luna-console-comment{color:#747474}.luna-console-theme-dark .luna-console-log-item .luna-console-code .luna-console-string{color:#f29766}.luna-console-theme-dark .luna-console-log-item.luna-console-error{background:#290000;color:#ff8080;border-top-color:#5c0000;border-bottom-color:#5c0000}.luna-console-theme-dark .luna-console-log-item.luna-console-error .luna-console-count{background:#ff8080}.luna-console-theme-dark .luna-console-log-item.luna-console-warn{color:#ffcb6b;background:#332a00;border-top-color:#650;border-bottom-color:#650}.luna-console-theme-dark .luna-console-log-item .luna-console-count{background:#42597f;color:#949494}.luna-console-theme-dark .luna-console-log-item .luna-console-log-content .luna-console-null,.luna-console-theme-dark .luna-console-log-item .luna-console-log-content .luna-console-undefined{color:#7f7f7f}.luna-console-theme-dark .luna-console-log-item .luna-console-log-content .luna-console-boolean,.luna-console-theme-dark .luna-console-log-item .luna-console-log-content .luna-console-number{color:#9980ff}.luna-console-theme-dark .luna-console-log-item .luna-console-log-content .luna-console-regexp,.luna-console-theme-dark .luna-console-log-item .luna-console-log-content .luna-console-symbol{color:#e36eec}.luna-console-theme-dark .luna-console-icon-container .luna-console-icon-caret-down,.luna-console-theme-dark .luna-console-icon-container .luna-console-icon-caret-right{color:#9aa0a6}.luna-console-theme-dark .luna-console-header{border-bottom-color:#3d3d3d}.luna-console-theme-dark .luna-console-nesting-level{border-right-color:#3d3d3d}.luna-console-theme-dark .luna-console-nesting-level::before{border-bottom-color:#3d3d3d}.luna-console-theme-dark .luna-console-preview .luna-console-key{color:#e36eec}.luna-console-theme-dark .luna-console-preview .luna-console-number{color:#9980ff}.luna-console-theme-dark .luna-console-preview .luna-console-null{color:#7f7f7f}.luna-console-theme-dark .luna-console-preview .luna-console-string{color:#f29766}.luna-console-theme-dark .luna-console-preview .luna-console-boolean{color:#9980ff}.luna-console-theme-dark .luna-console-preview .luna-console-special{color:#7f7f7f}",""]),e.exports=t},4987:function(e,t,n){(t=n(3645)(!1)).push([e.id,'.luna-data-grid{color:#333;background-color:#fff;font-family:Arial,Helvetica,sans-serif;box-sizing:border-box;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;font-size:14px;position:relative;font-size:12px;border:1px solid #ccc;overflow:hidden;outline:0}.luna-data-grid.luna-data-grid-platform-windows{font-family:"Segoe UI",Tahoma,sans-serif}.luna-data-grid.luna-data-grid-platform-linux{font-family:Roboto,Ubuntu,Arial,sans-serif}.luna-data-grid .luna-data-grid-hidden,.luna-data-grid.luna-data-grid-hidden{display:none}.luna-data-grid .luna-data-grid-invisible,.luna-data-grid.luna-data-grid-invisible{visibility:hidden}.luna-data-grid *{box-sizing:border-box}.luna-data-grid.luna-data-grid-theme-dark{color:#a5a5a5;background-color:#242424}.luna-data-grid.luna-data-grid-theme-dark{color:#a5a5a5;background:#242424;border-color:#3d3d3d}.luna-data-grid table{width:100%;height:100%;border-collapse:separate;border-spacing:0;table-layout:fixed}.luna-data-grid td,.luna-data-grid th{padding:1px 4px;border-left:1px solid #ccc;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.luna-data-grid td:first-child,.luna-data-grid th:first-child{border-left:none}.luna-data-grid th{font-weight:400;border-bottom:1px solid #ccc;text-align:left;background:#f3f3f3}.luna-data-grid th.luna-data-grid-sortable:active,.luna-data-grid th.luna-data-grid-sortable:hover{background:#e6e6e6}.luna-data-grid td{height:20px;cursor:default;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.luna-data-grid:focus .luna-data-grid-node.luna-data-grid-selected{color:#fff;background:#1a73e8}.luna-data-grid:focus.luna-data-grid-theme-dark .luna-data-grid-node.luna-data-grid-selected{background:#0e639c}.luna-data-grid-data-container,.luna-data-grid-header-container{overflow:hidden}.luna-data-grid-header-container{height:21px}.luna-data-grid-data-container{overflow-y:auto}.luna-data-grid-data-container .luna-data-grid-node.luna-data-grid-selected{background:#ddd}.luna-data-grid-data-container tr:nth-child(even){background:#f2f7fd}.luna-data-grid-filler-row td{height:auto}.luna-data-grid-resizer{position:absolute;top:0;bottom:0;width:5px;z-index:500;touch-action:none;cursor:col-resize}.luna-data-grid-resizing{cursor:col-resize!important}.luna-data-grid-resizing .luna-data-grid *{cursor:col-resize!important}.luna-data-grid-theme-dark{color-scheme:dark}.luna-data-grid-theme-dark td,.luna-data-grid-theme-dark th{border-color:#3d3d3d}.luna-data-grid-theme-dark th{background:#292a2d}.luna-data-grid-theme-dark th.luna-data-grid-sortable:hover{background:#303030}.luna-data-grid-theme-dark .luna-data-grid-data-container .luna-data-grid-node.luna-data-grid-selected{background:#393939}.luna-data-grid-theme-dark .luna-data-grid-data-container tr:nth-child(even){background:#0b2544}',""]),e.exports=t},8903:function(e,t,n){(t=n(3645)(!1)).push([e.id,"@font-face{font-family:luna-dom-viewer-icon;src:url('data:application/x-font-woff;charset=utf-8;base64,d09GRgABAAAAAASgAAsAAAAAB4QAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAAFwAAACMIRYl8k9TLzIAAAFkAAAAPQAAAFZLxUkaY21hcAAAAaQAAADHAAACWBcU1KRnbHlmAAACbAAAAC4AAAAwabU7V2hlYWQAAAKcAAAALwAAADZzjr4faGhlYQAAAswAAAAYAAAAJAFyANdobXR4AAAC5AAAABAAAAA4AZAAAGxvY2EAAAL0AAAAEAAAAB4AnACQbWF4cAAAAwQAAAAfAAAAIAEZAA9uYW1lAAADJAAAASkAAAIWm5e+CnBvc3QAAARQAAAATgAAAG5m1cqleJxjYGRgYOBiMGCwY2BycfMJYeDLSSzJY5BiYGGAAJA8MpsxJzM9kYEDxgPKsYBpDiC2AdNMDGwMckCSGyzHCuSxA2kuIJ+HgReoggtJnANMcwJFGRmYAXZLBkt4nGNgZJBlnMDAysDAUMfQAyRloHQCAyeDMQMDEwMrMwNWEJDmmsJwgEH3IxPDCSBXCEwyMDCCCABbzwhtAAAAeJy1kksKwjAQhr/0oX0JLlyIZ9BDCQXtRkEEwQO56uV6Av0nmZWI4MIJX2H+JvNIBiiBXGxFAWEkYPaQGqKe00S94C5/xVJKwY49PQNnLly5Tdnzqb9JPXByNUT13YKipLVm4wvmilvR0ilfrboKFsy0N9OB2Yco32z+437SLVTQdo05dUksgF8z/8+6+B3dU2m67YR1u3fsLXtH7egtEq04OhZpcKzbk1OLs2NzcXE0F3rNhOW9ObqbKSRsVqYsQfYC6fYeiQB4nGNgZACBlQzTGZgYGMyVxVc2O073AIpAxHsYloHFRc2dPZY2OTIwAACmEQesAAB4nGNgZGBgAOLeSTNM4/ltvjJwM5wACkRxPt7XgKCBYCXDMiDJwcAE4gAAQEgKxAB4nGNgZGBgOMHAACdXMjAyoAI+ADixAkp4nGNgAIITUEwCAABMyAGReJxjYAACHgYJ7BAADsoBLXicY2BkYGDgY2BmANEMDExAzAWEDAz/wXwGAAomASkAeJxlkD1uwkAUhMdgSAJSghQpKbNVCiKZn5IDQE9Bl8KYtTGyvdZ6QaLLCXKEHCGniHKCHChj82hgLT9/M2/e7soABviFh3p5uG1qvVq4oTpxm/Qg7JOfhTvo40W4S38o3MMbpsJ9POKdO3j+HZ0BSuEW7vEh3Kb/KeyTv4Q7eMK3cJf+j3APK/wJ9/HqDdPIFLEp3FIn+yy0Z3n+rrStUlOoSTA+WwtdaBs6vVHro6oOydS5WMXW5GrOrs4yo0prdjpywda5cjYaxeIHkcmRIoJBgbipDktoJNgjQwh71b3UK6YtKvq1VpggwPgqtWCqaJIhlcaGyTWOrBUOPG1K1zGt+FrO5KS5zGreJCMr/u+6t6MT0Q+wbaZKzDDiE1/kg+YO+T89EV6oAAAAeJxdxk0KgCAUAOE3/adlJ/FQgqBuFETw+i2kTd9mRiYZvv4ZJmYWVjZ2Dk4UmosbwyPK1Vq69aVnPbamEBuOSqFj8WQSgUgTeQGPtA2iAAA=') format('woff')}[class*=' luna-dom-viewer-icon-'],[class^=luna-dom-viewer-icon-]{display:inline-block;font-family:luna-dom-viewer-icon!important;font-size:16px;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.luna-dom-viewer-icon-arrow-down:before{content:'\\f101'}.luna-dom-viewer-icon-arrow-right:before{content:'\\f102'}.luna-dom-viewer{color:#333;background-color:#fff;font-family:Arial,Helvetica,sans-serif;box-sizing:border-box;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;font-size:14px;overflow-y:auto;-webkit-overflow-scrolling:touch;background:0 0;overflow-x:hidden;word-wrap:break-word;padding:0 0 0 12px;font-size:12px;font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;cursor:default;list-style:none}.luna-dom-viewer.luna-dom-viewer-platform-windows{font-family:'Segoe UI',Tahoma,sans-serif}.luna-dom-viewer.luna-dom-viewer-platform-linux{font-family:Roboto,Ubuntu,Arial,sans-serif}.luna-dom-viewer .luna-dom-viewer-hidden,.luna-dom-viewer.luna-dom-viewer-hidden{display:none}.luna-dom-viewer .luna-dom-viewer-invisible,.luna-dom-viewer.luna-dom-viewer-invisible{visibility:hidden}.luna-dom-viewer *{box-sizing:border-box}.luna-dom-viewer.luna-dom-viewer-theme-dark{color:#a5a5a5;background-color:#242424}.luna-dom-viewer ul{list-style:none}.luna-dom-viewer.luna-dom-viewer-theme-dark{color:#e8eaed}.luna-dom-viewer-toggle{min-width:12px;margin-left:-12px}.luna-dom-viewer-icon-arrow-down,.luna-dom-viewer-icon-arrow-right{position:absolute!important;font-size:12px!important}.luna-dom-viewer-tree-item{line-height:16px;min-height:16px;position:relative;z-index:10;outline:0}.luna-dom-viewer-tree-item.luna-dom-viewer-selected .luna-dom-viewer-selection,.luna-dom-viewer-tree-item:hover .luna-dom-viewer-selection{display:block}.luna-dom-viewer-tree-item:hover .luna-dom-viewer-selection{background:#f2f7fd}.luna-dom-viewer-tree-item.luna-dom-viewer-selected .luna-dom-viewer-selection{background:#e0e0e0}.luna-dom-viewer-tree-item.luna-dom-viewer-selected:focus .luna-dom-viewer-selection{background:#cfe8fc}.luna-dom-viewer-tree-item .luna-dom-viewer-icon-arrow-down{display:none}.luna-dom-viewer-tree-item.luna-dom-viewer-expanded .luna-dom-viewer-icon-arrow-down{display:inline-block}.luna-dom-viewer-tree-item.luna-dom-viewer-expanded .luna-dom-viewer-icon-arrow-right{display:none}.luna-dom-viewer-html-tag{color:#881280}.luna-dom-viewer-tag-name{color:#881280}.luna-dom-viewer-attribute-name{color:#994500}.luna-dom-viewer-attribute-value{color:#1a1aa6}.luna-dom-viewer-attribute-value.luna-dom-viewer-attribute-underline{text-decoration:underline}.luna-dom-viewer-html-comment{color:#236e25}.luna-dom-viewer-selection{position:absolute;display:none;left:-10000px;right:-10000px;top:0;bottom:0;z-index:-1}.luna-dom-viewer-children{margin:0;overflow-x:visible;overflow-y:visible;padding-left:15px}.luna-dom-viewer-text-node .luna-dom-viewer-keyword{color:#881280}.luna-dom-viewer-text-node .luna-dom-viewer-number{color:#1c00cf}.luna-dom-viewer-text-node .luna-dom-viewer-operator{color:grey}.luna-dom-viewer-text-node .luna-dom-viewer-comment{color:#236e25}.luna-dom-viewer-text-node .luna-dom-viewer-string{color:#1a1aa6}.luna-dom-viewer-theme-dark .luna-dom-viewer-icon-arrow-down,.luna-dom-viewer-theme-dark .luna-dom-viewer-icon-arrow-right{color:#9aa0a6}.luna-dom-viewer-theme-dark .luna-dom-viewer-html-tag,.luna-dom-viewer-theme-dark .luna-dom-viewer-tag-name{color:#5db0d7}.luna-dom-viewer-theme-dark .luna-dom-viewer-attribute-name{color:#9bbbdc}.luna-dom-viewer-theme-dark .luna-dom-viewer-attribute-value{color:#f29766}.luna-dom-viewer-theme-dark .luna-dom-viewer-html-comment{color:#898989}.luna-dom-viewer-theme-dark .luna-dom-viewer-tree-item:hover .luna-dom-viewer-selection{background:#083c69}.luna-dom-viewer-theme-dark .luna-dom-viewer-tree-item.luna-dom-viewer-selected .luna-dom-viewer-selection{background:#454545}.luna-dom-viewer-theme-dark .luna-dom-viewer-tree-item.luna-dom-viewer-selected:focus .luna-dom-viewer-selection{background:#073d69}.luna-dom-viewer-theme-dark .luna-dom-viewer-text-node .luna-dom-viewer-keyword{color:#e36eec}.luna-dom-viewer-theme-dark .luna-dom-viewer-text-node .luna-dom-viewer-number{color:#9980ff}.luna-dom-viewer-theme-dark .luna-dom-viewer-text-node .luna-dom-viewer-operator{color:#7f7f7f}.luna-dom-viewer-theme-dark .luna-dom-viewer-text-node .luna-dom-viewer-comment{color:#747474}.luna-dom-viewer-theme-dark .luna-dom-viewer-text-node .luna-dom-viewer-string{color:#f29766}",""]),e.exports=t},5512:function(e,t,n){(t=n(3645)(!1)).push([e.id,"@font-face{font-family:luna-modal-icon;src:url('data:application/x-font-woff;charset=utf-8;base64,d09GRgABAAAAAAQwAAsAAAAABpQAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAAEkAAABoILgliE9TLzIAAAFUAAAAPQAAAFZL+0kZY21hcAAAAZQAAACBAAAB3sqmCy5nbHlmAAACGAAAAC0AAAA0Ftcaz2hlYWQAAAJIAAAALgAAADZzhL4YaGhlYQAAAngAAAAYAAAAJAFoANBobXR4AAACkAAAAA8AAAAcAMgAAGxvY2EAAAKgAAAADgAAABAATgBObWF4cAAAArAAAAAfAAAAIAESABhuYW1lAAAC0AAAASkAAAIWm5e+CnBvc3QAAAP8AAAAMQAAAEOplauDeJxjYGRgYOBiMGCwY2BycfMJYeDLSSzJY5BiYGGAAJA8MpsxJzM9kYEDxgPKsYBpDiCWgNIsQMzKwAykWRnYgGxGBiYAk+wFgwAAAHicY2BkkGWcwMDKwMBQx9ADJGWgdAIDJ4MxAwMTAyszA1YQkOaawnCAIfkjI8MJIFcITDIwMIIIAGAqCKIAAAB4nM2RQQqDQAxFXxyVUsST9DhduBd3ggsv0JX39QT6kwYED1D6hzeQD0nmM0ADFPESNdiG4frItfALz/Br3qp7HlS0jEzMLKy7HYf8e33J1HMdortoWuPzreUX8p2hEikj9f+oi3vIyl86JpWYEvfnxH9sSTzPmijXbl+wE7urE5sAAAB4nGNgZACB+UDIzcBgrs6uzi7OLm4ubq4+j1tfn1tPD0xOhjGAJAMDAKekBtMAAAB4nGNgZGBgAGLPuE0l8fw2Xxm4GU4ABaI4H+9rQNBAMB8IGRg4GJhAHAA5KgqUAAB4nGNgZGBgOMHAACfnMzAyoAJ2ADfsAjl4nGNgAIITDFgBABIUAMkAeJxjYAACKQQEAAO4AJ0AAHicY2BkYGBgZ+BhANEMDExAzAWEDAz/wXwGAApKASsAeJxlkD1uwkAUhMdgSAJSghQpKbNVCiKZn5IDQE9Bl8KYtTGyvdZ6QaLLCXKEHCGniHKCHChj82hgLT9/M2/e7soABviFh3p5uG1qvVq4oTpxm/Qg7JOfhTvo40W4S38o3MMbpsJ9POKdO3j+HZ0BSuEW7vEh3Kb/KeyTv4Q7eMK3cJf+j3APK/wJ9/HqDdPIFLEp3FIn+yy0Z3n+rrStUlOoSTA+WwtdaBs6vVHro6oOydS5WMXW5GrOrs4yo0prdjpywda5cjYaxeIHkcmRIoJBgbipDktoJNgjQwh71b3UK6YtKvq1VpggwPgqtWCqaJIhlcaGyTWOrBUOPG1K1zGt+FrO5KS5zGreJCMr/u+6t6MT0Q+wbaZKzDDiE1/kg+YO+T89EV6oAAAAeJxjYGKAABiNDtgZmRiZGVkYWRnZGNkZORhYk3Pyi1MZkxlzGPMZixlTGRgANIEEbAAAAA==') format('woff')}[class*=' luna-modal-icon-'],[class^=luna-modal-icon-]{display:inline-block;font-family:luna-modal-icon!important;font-size:16px;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.luna-modal-icon-close:before{content:'\\f101'}.luna-modal{color:#333;background-color:#fff;font-family:Arial,Helvetica,sans-serif;box-sizing:border-box;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;font-size:14px;position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.5);display:flex;justify-content:center;align-items:center}.luna-modal.luna-modal-platform-windows{font-family:\"Segoe UI\",Tahoma,sans-serif}.luna-modal.luna-modal-platform-linux{font-family:Roboto,Ubuntu,Arial,sans-serif}.luna-modal .luna-modal-hidden,.luna-modal.luna-modal-hidden{display:none}.luna-modal .luna-modal-invisible,.luna-modal.luna-modal-invisible{visibility:hidden}.luna-modal *{box-sizing:border-box}.luna-modal.luna-modal-theme-dark{color:#a5a5a5;background-color:#242424}.luna-modal-icon-close{position:absolute;right:16px;top:18px;cursor:pointer;font-size:20px}.luna-modal-body{position:relative;background:#fff;max-height:100%;display:flex;flex-direction:column;border-radius:4px}.luna-modal-body.luna-modal-no-title{position:static}.luna-modal-body.luna-modal-no-title .luna-modal-title{display:none}.luna-modal-body.luna-modal-no-title .luna-modal-icon-close{color:#fff}.luna-modal-body.luna-modal-no-footer .luna-modal-footer{display:none}.luna-modal-hidden{display:none}.luna-modal-title{padding:16px;padding-right:36px;padding-bottom:0;font-size:18px;height:46px;box-sizing:border-box;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.luna-modal-content{padding:16px;overflow-y:auto}.luna-modal-footer{padding:12px}.luna-modal-button-group{display:flex;justify-content:flex-end}.luna-modal-button{padding:0 12px;background:#e9ecef;cursor:default;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;margin:0 4px;font-size:12px;border-radius:4px;overflow:hidden;height:28px;line-height:28px}.luna-modal-button:active::before{background:#1a73e8;content:\"\";opacity:.4;position:absolute;top:0;left:0;width:100%;height:100%;z-index:2}.luna-modal-button.luna-modal-secondary{color:#1a73e8;border:1px solid #ccc;background:#fff}.luna-modal-button.luna-modal-primary{color:#fff;background:#1a73e8}.luna-modal-input{box-sizing:border-box;outline:0;width:100%;font-size:16px;padding:6px 12px;border:1px solid #ccc;-webkit-appearance:none;-moz-appearance:none}.luna-modal-theme-dark{color:#a5a5a5}.luna-modal-theme-dark .luna-modal-body{background:#242424}",""]),e.exports=t},7591:function(e,t,n){(t=n(3645)(!1)).push([e.id,".luna-notification{position:fixed;top:0;left:0;width:100%;height:100%;padding:20px;box-sizing:border-box;pointer-events:none;display:flex;flex-direction:column;font-size:14px;font-family:Arial,Helvetica,sans-serif}.luna-notification-item{display:flex;box-shadow:0 2px 2px 0 rgba(0,0,0,.07),0 1px 5px 0 rgba(0,0,0,.1);padding:10px 16px;color:#333;background:#fff}.luna-notification-lower{margin-top:16px}.luna-notification-upper{margin-bottom:16px}.luna-notification-theme-dark .luna-notification-item{box-shadow:0 2px 2px 0 rgba(255,255,255,.07),0 1px 5px 0 rgba(255,255,255,.1);color:#a5a5a5;background:#242424}",""]),e.exports=t},4821:function(e,t,n){(t=n(3645)(!1)).push([e.id,"@font-face{font-family:luna-object-viewer-icon;src:url('data:application/x-font-woff;charset=utf-8;base64,d09GRgABAAAAAAS8AAsAAAAAB7QAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAAGEAAACMISgl+k9TLzIAAAFsAAAAPQAAAFZLxUkWY21hcAAAAawAAADWAAACdBU42qdnbHlmAAAChAAAAC4AAAAwabU7V2hlYWQAAAK0AAAALwAAADZzjr4faGhlYQAAAuQAAAAYAAAAJAFyANlobXR4AAAC/AAAABAAAABAAZAAAGxvY2EAAAMMAAAAEAAAACIAtACobWF4cAAAAxwAAAAfAAAAIAEbAA9uYW1lAAADPAAAASkAAAIWm5e+CnBvc3QAAARoAAAAUwAAAHZW8MNZeJxNjTsOQFAQRc/z/+sV1mABohKV0gZeJRJR2X9cT4RJZu7nFIMBMjoGvHGaF6rdngcNAc/c/O/Nvq2W5E1igdNE2zv1iGh1c5FQPlYXUlJRyxt9+/pUKadQa/AveGEGZQAAAHicY2BkkGScwMDKwMBQx9ADJGWgdAIDJ4MxAwMTAyszA1YQkOaawnCAQfcjE8MJIFcITDIwMIIIAFqDCGkAAAB4nM2STQ4BQRCFv54ZP8MwFhYW4gQcShBsSERi50BWDuFCcwJedddKRGKnOt8k9aanqudVAy0gF3NRQLgTsLhJDVHP6UW94Kp8zEhKwYIlG/YcOXHm0mTPp96aumLLwdUQ1fcIqmJrwpSZL+iqak5JmyE1Ayr1bdGhr/2ZPmp/qPQtuj/uJzqQl+pfDyypesQD6AT/ElV8PjyrMccT9rdLR3PUFBI227VTio1jbm6dodg5VnPvmAsHxzofHfmi+Sbs/pwdWcXFkWdNSNg9arIE2QufuSCyAAB4nGNgZACBlQzTGZgYGMyVxVc2O073AIpAxHsYloHFRc2dPZY2OTIwAACmEQesAAB4nGNgZGBgAOINe2b6x/PbfGXgZjgBFIjifLyvAUEDwUqGZUCSg4EJxAEAUn4LLAB4nGNgZGBgOMHAACdXMjAyoAIBADizAkx4nGNgAIITUEwGAABZUAGReJxjYAACHgYJ3BAAE94BXXicY2BkYGAQYGBmANEMDExAzAWEDAz/wXwGAApcASsAeJxlkD1uwkAUhMdgSAJSghQpKbNVCiKZn5IDQE9Bl8KYtTGyvdZ6QaLLCXKEHCGniHKCHChj82hgLT9/M2/e7soABviFh3p5uG1qvVq4oTpxm/Qg7JOfhTvo40W4S38o3MMbpsJ9POKdO3j+HZ0BSuEW7vEh3Kb/KeyTv4Q7eMK3cJf+j3APK/wJ9/HqDdPIFLEp3FIn+yy0Z3n+rrStUlOoSTA+WwtdaBs6vVHro6oOydS5WMXW5GrOrs4yo0prdjpywda5cjYaxeIHkcmRIoJBgbipDktoJNgjQwh71b3UK6YtKvq1VpggwPgqtWCqaJIhlcaGyTWOrBUOPG1K1zGt+FrO5KS5zGreJCMr/u+6t6MT0Q+wbaZKzDDiE1/kg+YO+T89EV6oAAAAeJxdxjkOgCAUANE/uOOGB+FQBIjaaEJIuL6FsfE1M6Lk9fXPoKioaWjp6BnQjEzMLKwYNtHepZhtuMs1vpvO/ch4HIlIxhK4KVyc7BwiD8nvDlkA') format('woff')}[class*=' luna-object-viewer-icon-'],[class^=luna-object-viewer-icon-]{display:inline-block;font-family:luna-object-viewer-icon!important;font-size:16px;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.luna-object-viewer-icon-caret-down:before{content:'\\f101'}.luna-object-viewer-icon-caret-right:before{content:'\\f102'}.luna-object-viewer{overflow-x:auto;-webkit-overflow-scrolling:touch;overflow-y:hidden;cursor:default;font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;font-size:12px;line-height:1.2;min-height:100%;color:#333;list-style:none!important}.luna-object-viewer ul{list-style:none!important;padding:0!important;padding-left:12px!important;margin:0!important}.luna-object-viewer li{position:relative;white-space:nowrap;line-height:16px;min-height:16px}.luna-object-viewer>li>.luna-object-viewer-key{display:none}.luna-object-viewer span{position:static!important}.luna-object-viewer li .luna-object-viewer-collapsed~.luna-object-viewer-close:before{color:#999}.luna-object-viewer-array .luna-object-viewer-object .luna-object-viewer-key{display:inline}.luna-object-viewer-null{color:#5e5e5e}.luna-object-viewer-regexp,.luna-object-viewer-string{color:#c41a16}.luna-object-viewer-number{color:#1c00cf}.luna-object-viewer-boolean{color:#0d22aa}.luna-object-viewer-special{color:#5e5e5e}.luna-object-viewer-key,.luna-object-viewer-key-lighter{color:#881391}.luna-object-viewer-key-lighter{opacity:.6}.luna-object-viewer-key-special{color:#5e5e5e}.luna-object-viewer-collapsed .luna-object-viewer-icon,.luna-object-viewer-expanded .luna-object-viewer-icon{position:absolute!important;left:-12px;color:#727272;font-size:12px}.luna-object-viewer-icon-caret-right{top:0}.luna-object-viewer-icon-caret-down{top:1px}.luna-object-viewer-expanded>.luna-object-viewer-icon-caret-down{display:inline}.luna-object-viewer-expanded>.luna-object-viewer-icon-caret-right{display:none}.luna-object-viewer-collapsed>.luna-object-viewer-icon-caret-down{display:none}.luna-object-viewer-collapsed>.luna-object-viewer-icon-caret-right{display:inline}.luna-object-viewer-hidden~ul{display:none}.luna-object-viewer-theme-dark{color:#fff}.luna-object-viewer-theme-dark .luna-object-viewer-null,.luna-object-viewer-theme-dark .luna-object-viewer-special{color:#a1a1a1}.luna-object-viewer-theme-dark .luna-object-viewer-regexp,.luna-object-viewer-theme-dark .luna-object-viewer-string{color:#f28b54}.luna-object-viewer-theme-dark .luna-object-viewer-boolean,.luna-object-viewer-theme-dark .luna-object-viewer-number{color:#9980ff}.luna-object-viewer-theme-dark .luna-object-viewer-key,.luna-object-viewer-theme-dark .luna-object-viewer-key-lighter{color:#5db0d7}",""]),e.exports=t},7871:function(e,t,n){(t=n(3645)(!1)).push([e.id,".luna-setting{color:#333;background-color:#fff;font-family:Arial,Helvetica,sans-serif;box-sizing:border-box;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;font-size:14px;min-width:320px}.luna-setting.luna-setting-platform-windows{font-family:'Segoe UI',Tahoma,sans-serif}.luna-setting.luna-setting-platform-linux{font-family:Roboto,Ubuntu,Arial,sans-serif}.luna-setting .luna-setting-hidden,.luna-setting.luna-setting-hidden{display:none}.luna-setting .luna-setting-invisible,.luna-setting.luna-setting-invisible{visibility:hidden}.luna-setting *{box-sizing:border-box}.luna-setting-item.luna-setting-selected,.luna-setting-item:hover{background:#f3f3f3}.luna-setting-item.luna-setting-selected:focus{outline:1px solid #1a73e8}.luna-setting-item .luna-setting-title{line-height:1.4em;font-weight:600}.luna-setting-item .luna-setting-description{line-height:1.4em}.luna-setting-item .luna-setting-description *{margin:0}.luna-setting-item .luna-setting-description strong{font-weight:600}.luna-setting-item .luna-setting-description a{background-color:transparent;color:#0969da;text-decoration:none}.luna-setting-item .luna-setting-control,.luna-setting-item .luna-setting-description{font-size:12px}.luna-setting-item .luna-setting-description{margin-bottom:8px}.luna-setting-item .luna-setting-control{display:flex;align-items:center}.luna-setting-item-button,.luna-setting-item-checkbox,.luna-setting-item-input,.luna-setting-item-number,.luna-setting-item-select,.luna-setting-item-title{padding:10px}.luna-setting-item-title{font-size:18px;font-weight:600}.luna-setting-item-input input{-webkit-tap-highlight-color:transparent;color:#333;-webkit-appearance:none;-moz-appearance:none;appearance:none;border:1px solid #ccc;outline:0;padding:2px 8px;border-radius:0;font-size:14px;background:#fff;width:100%}.luna-setting-item-number input[type=number]{-webkit-tap-highlight-color:transparent;color:#333;-webkit-appearance:none;-moz-appearance:none;appearance:none;border:1px solid #ccc;outline:0;padding:2px 8px;border-radius:0;font-size:14px;background:#fff;width:200px;padding:2px}.luna-setting-item-number .luna-setting-range-container{flex:2;position:relative;top:1px}.luna-setting-item-number .luna-setting-range-container .luna-setting-range-track{height:4px;width:100%;padding:0 10px;position:absolute;left:0;top:4px}.luna-setting-item-number .luna-setting-range-container .luna-setting-range-track .luna-setting-range-track-bar{background:#ccc;border-radius:2px;overflow:hidden;width:100%;height:4px}.luna-setting-item-number .luna-setting-range-container .luna-setting-range-track .luna-setting-range-track-bar .luna-setting-range-track-progress{height:100%;background:#1a73e8;width:50%}.luna-setting-item-number .luna-setting-range-container input{-webkit-appearance:none;background:0 0;height:4px;width:100%;position:relative;top:-3px;margin:0 auto;outline:0;border-radius:2px}.luna-setting-item-number .luna-setting-range-container input::-webkit-slider-thumb{-webkit-appearance:none;position:relative;top:0;z-index:1;width:16px;border:none;height:16px;border-radius:10px;border:1px solid #ccc;background:radial-gradient(circle at center,#eee 0,#eee 15%,#fff 22%,#fff 100%)}.luna-setting-item-checkbox input{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:14px;height:14px;border:1px solid #ccc;border-radius:0;position:relative;outline:0;margin-left:0;margin-right:8px;transition:background-color .1s;align-self:flex-start;flex-shrink:0}.luna-setting-item-checkbox input:checked{background-color:#1a73e8;border-color:#1a73e8}.luna-setting-item-checkbox input:checked:after{content:\"\";width:100%;height:100%;position:absolute;left:0;top:0;background-image:url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9JzMwMHB4JyB3aWR0aD0nMzAwcHgnICBmaWxsPSIjZmZmZmZmIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIDAgMTAwIDEwMCIgdmVyc2lvbj0iMS4xIiB4PSIwcHgiIHk9IjBweCI+PHRpdGxlPmljb25fYnlfUG9zaGx5YWtvdjEwPC90aXRsZT48ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz48ZyBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48ZyBmaWxsPSIjZmZmZmZmIj48ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyNi4wMDAwMDAsIDI2LjAwMDAwMCkiPjxwYXRoIGQ9Ik0xNy45OTk5ODc4LDMyLjQgTDEwLjk5OTk4NzgsMjUuNCBDMTAuMjI2Nzg5MSwyNC42MjY4MDE0IDguOTczMTg2NDQsMjQuNjI2ODAxNCA4LjE5OTk4Nzc5LDI1LjQgTDguMTk5OTg3NzksMjUuNCBDNy40MjY3ODkxNCwyNi4xNzMxOTg2IDcuNDI2Nzg5MTQsMjcuNDI2ODAxNCA4LjE5OTk4Nzc5LDI4LjIgTDE2LjU4NTc3NDIsMzYuNTg1Nzg2NCBDMTcuMzY2ODIyOCwzNy4zNjY4MzUgMTguNjMzMTUyOCwzNy4zNjY4MzUgMTkuNDE0MjAxNCwzNi41ODU3ODY0IEw0MC41OTk5ODc4LDE1LjQgQzQxLjM3MzE4NjQsMTQuNjI2ODAxNCA0MS4zNzMxODY0LDEzLjM3MzE5ODYgNDAuNTk5OTg3OCwxMi42IEw0MC41OTk5ODc4LDEyLjYgQzM5LjgyNjc4OTEsMTEuODI2ODAxNCAzOC41NzMxODY0LDExLjgyNjgwMTQgMzcuNzk5OTg3OCwxMi42IEwxNy45OTk5ODc4LDMyLjQgWiI+PC9wYXRoPjwvZz48L2c+PC9nPjwvc3ZnPg==);background-size:30px;background-repeat:no-repeat;background-position:center}.luna-setting-item-checkbox label{-webkit-tap-highlight-color:transparent}.luna-setting-item-checkbox label *{margin:0}.luna-setting-item-select .luna-setting-select{position:relative}.luna-setting-item-select .luna-setting-select select{margin:0;font-size:14px;background:#fff;-webkit-appearance:none;-moz-appearance:none;appearance:none;border:1px solid #ccc;padding:2px 8px;padding-right:18px;outline:0;color:#333;border-radius:0;-webkit-tap-highlight-color:transparent}.luna-setting-item-select .luna-setting-select:after{content:'';width:0;height:0;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid #333;position:absolute;top:0;bottom:0;right:6px;margin:auto;pointer-events:none}.luna-setting-item-select .luna-setting-select select{width:300px}.luna-setting-item-button button{-webkit-tap-highlight-color:transparent;background:#fff;border:1px solid #ccc;padding:2px 8px;color:#1a73e8;font-size:14px;border-radius:2px}.luna-setting-item-button button:active,.luna-setting-item-button button:hover{background:#f3f3f3}.luna-setting-item-button button:active{border:1px solid #1a73e8}.luna-setting-item-separator{border-bottom:1px solid #ccc}.luna-setting-theme-dark{color-scheme:dark;color:#a5a5a5;background:#242424}.luna-setting-theme-dark .luna-setting-item.luna-setting-selected,.luna-setting-theme-dark .luna-setting-item:hover{background:#292a2d}.luna-setting-theme-dark .luna-setting-item .luna-setting-description a{background-color:transparent;color:#58a6ff}.luna-setting-theme-dark .luna-setting-item-separator{border-color:#3d3d3d}.luna-setting-theme-dark .luna-setting-item-input input{background:#3d3d3d;border-color:#3d3d3d;color:#a5a5a5}.luna-setting-theme-dark .luna-setting-item-checkbox input{border-color:#3d3d3d}.luna-setting-theme-dark .luna-setting-item-select .luna-setting-select select{color:#a5a5a5;border-color:#3d3d3d;background:#3d3d3d}.luna-setting-theme-dark .luna-setting-item-select .luna-setting-select:after{border-top-color:#a5a5a5}.luna-setting-theme-dark .luna-setting-item-button button{background:#242424;border-color:#3d3d3d}.luna-setting-theme-dark .luna-setting-item-button button:active,.luna-setting-theme-dark .luna-setting-item-button button:hover{background:#292a2d}.luna-setting-theme-dark .luna-setting-item-button button:active{border:1px solid #1a73e8}.luna-setting-theme-dark .luna-setting-item-number input[type=number]{background:#3d3d3d;border-color:#3d3d3d;color:#a5a5a5}.luna-setting-theme-dark .luna-setting-item-number .luna-setting-range-container .luna-setting-range-track .luna-setting-range-track-bar{background:#3d3d3d}.luna-setting-theme-dark .luna-setting-item-number .luna-setting-range-container input::-webkit-slider-thumb{border-color:#3d3d3d;background:radial-gradient(circle at center,#aaa 0,#aaa 15%,#ccc 22%,#ccc 100%)}",""]),e.exports=t},2156:function(e,t,n){(t=n(3645)(!1)).push([e.id,".luna-tab{color:#333;background-color:#fff;font-family:Arial,Helvetica,sans-serif;box-sizing:border-box;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;font-size:14px;position:relative;overflow:hidden;width:100%}.luna-tab.luna-tab-platform-windows{font-family:'Segoe UI',Tahoma,sans-serif}.luna-tab.luna-tab-platform-linux{font-family:Roboto,Ubuntu,Arial,sans-serif}.luna-tab .luna-tab-hidden,.luna-tab.luna-tab-hidden{display:none}.luna-tab .luna-tab-invisible,.luna-tab.luna-tab-invisible{visibility:hidden}.luna-tab *{box-sizing:border-box}.luna-tab.luna-tab-theme-dark{color:#a5a5a5;background-color:#242424}.luna-tab-tabs-container{border-bottom:1px solid #ccc}.luna-tab-tabs{overflow-x:auto;-webkit-overflow-scrolling:touch;overflow-y:hidden;width:100%;height:100%;font-size:0;white-space:nowrap}.luna-tab-tabs::-webkit-scrollbar{display:none;width:0;height:0}.luna-tab-item{cursor:pointer;display:inline-block;padding:0 10px;font-size:12px;text-align:center;text-transform:capitalize}.luna-tab-item:hover{background:#f3f3f3}.luna-tab-slider{transition:left .3s,width .3s;height:1px;background:#1a73e8;position:absolute;bottom:0;left:0}",""]),e.exports=t},5777:function(e,t,n){(t=n(3645)(!1)).push([e.id,"@font-face{font-family:luna-text-viewer-icon;src:url('data:application/x-font-woff;charset=utf-8;base64,d09GRgABAAAAAAS0AAsAAAAAB2QAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAAFQAAAB0INElr09TLzIAAAFcAAAAPQAAAFZL+0klY21hcAAAAZwAAACfAAACEAEewxRnbHlmAAACPAAAAIYAAACkNSDggmhlYWQAAALEAAAALgAAADZzrb4oaGhlYQAAAvQAAAAWAAAAJAGRANNobXR4AAADDAAAABAAAAAoAZAAAGxvY2EAAAMcAAAAEAAAABYBWgFIbWF4cAAAAywAAAAdAAAAIAEXADtuYW1lAAADTAAAASkAAAIWm5e+CnBvc3QAAAR4AAAAOwAAAFJIWdOleJxjYGRgYOBiMGCwY2BycfMJYeDLSSzJY5BiYGGAAJA8MpsxJzM9kYEDxgPKsYBpDiBWAdNMDGwMQkAWK1CGlYEZyGMCstiBMpxAUUYGZgDbGgXDeJxjYGTQYJzAwMrAwFDH0AMkZaB0AgMngzEDAxMDKzMDVhCQ5prCcIAh+SMTwwkgVwhMMjAwgggAY84IrgAAAHicvZFLCsMwDERHzsdJ6aL0HD1VQiDQRbIN9Axd9aI+QTpjq5Bdd5F4Bo1lybIBNAAq8iA1YB8YZG+qlvUKl6zXGBjf6MofMWHGEyu2FPb9oCxULCtHs3yy+J2urg1rtojo0HM/MKnFGabOGlbdYvdT+1N6/7drXl8e6Vajo3efHP3b7HAUvntBMy1OJKujMTeHNZMV9McpFBC+tLgY4QB4nGNgZACBEwzrGdgZGOwZxdnVDdXNPfKEGlhchO0KhZtZ3IQYmMFq1jCsZpBi0GLQY2AwNzGzZjQSk2UUYdNmVFID8UyVRUXYlNRMlVGlTM1FjU3tmZkTmVhYmFRBhHwoCyuzKgtTIjMzWJg3ZClIGMRlZQmVB7GhMixM0aGhQIsB52sTqgAAeJxjYGRgYADi2JNxkvH8Nl8ZuBlOAAWiOB/va0DQQHCCYT2Q5GBgAnEANJ0KnQAAeJxjYGRgYDjBwIBEMjKgAi4AOvoCZQAAeJxjYACCE1CMBwAAM7gBkXicY2AAAiGGIFQIABXIAqN4nGNgZGBg4GLQZ2BmAAEmMI8LSP4H8xkADjQBUwAAAHicZZA9bsJAFITHYEgCUoIUKSmzVQoimZ+SA0BPQZfCmLUxsr3WekGiywlyhBwhp4hyghwoY/NoYC0/fzNv3u7KAAb4hYd6ebhtar1auKE6cZv0IOyTn4U76ONFuEt/KNzDG6bCfTzinTt4/h2dAUrhFu7xIdym/ynsk7+EO3jCt3CX/o9wDyv8Cffx6g3TyBSxKdxSJ/sstGd5/q60rVJTqEkwPlsLXWgbOr1R66OqDsnUuVjF1uRqzq7OMqNKa3Y6csHWuXI2GsXiB5HJkSKCQYG4qQ5LaCTYI0MIe9W91CumLSr6tVaYIMD4KrVgqmiSIZXGhsk1jqwVDjxtStcxrfhazuSkucxq3iQjK/7vurejE9EPsG2mSsww4hNf5IPmDvk/PRFeqAAAAHicXcU7CsAgFEXBe4x/l/kQBAtt3X0KSZNpRk7X91/F8eAJRBKZQqUp2Og2va19MAadyWJzpBd4kgcWAA==') format('woff')}[class*=' luna-text-viewer-icon-'],[class^=luna-text-viewer-icon-]{display:inline-block;font-family:luna-text-viewer-icon!important;font-size:16px;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.luna-text-viewer-icon-check:before{content:'\\f101'}.luna-text-viewer-icon-copy:before{content:'\\f102'}.luna-text-viewer{color:#333;background-color:#fff;font-family:Arial,Helvetica,sans-serif;box-sizing:border-box;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;font-size:14px;padding:0;unicode-bidi:embed;position:relative;overflow:auto;border:1px solid #ccc}.luna-text-viewer.luna-text-viewer-platform-windows{font-family:'Segoe UI',Tahoma,sans-serif}.luna-text-viewer.luna-text-viewer-platform-linux{font-family:Roboto,Ubuntu,Arial,sans-serif}.luna-text-viewer .luna-text-viewer-hidden,.luna-text-viewer.luna-text-viewer-hidden{display:none}.luna-text-viewer .luna-text-viewer-invisible,.luna-text-viewer.luna-text-viewer-invisible{visibility:hidden}.luna-text-viewer *{box-sizing:border-box}.luna-text-viewer.luna-text-viewer-theme-dark{color:#d9d9d9;border-color:#3d3d3d;background:#242424}.luna-text-viewer:hover .luna-text-viewer-copy{opacity:1}.luna-text-viewer-table{display:table}.luna-text-viewer-table .luna-text-viewer-line-number,.luna-text-viewer-table .luna-text-viewer-line-text{padding:0}.luna-text-viewer-table-row{display:table-row}.luna-text-viewer-line-number{display:table-cell;padding:0 3px 0 8px!important;text-align:right;vertical-align:top;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border-right:1px solid #ccc}.luna-text-viewer-line-text{display:table-cell;padding-left:4px!important;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.luna-text-viewer-copy{background:#fff;opacity:0;position:absolute;right:5px;top:5px;border:1px solid #ccc;border-radius:4px;width:25px;height:25px;text-align:center;line-height:25px;cursor:pointer;transition:opacity .3s,top .3s}.luna-text-viewer-copy .luna-text-viewer-icon-check{color:#188037}.luna-text-viewer-text{padding:4px;font-size:12px;font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;box-sizing:border-box;white-space:pre;display:block}.luna-text-viewer-text.luna-text-viewer-line-numbers{padding:0}.luna-text-viewer-text.luna-text-viewer-wrap-long-lines{white-space:pre-wrap}.luna-text-viewer-text.luna-text-viewer-wrap-long-lines .luna-text-viewer-line-text{word-break:break-all}.luna-text-viewer-theme-dark{color-scheme:dark}.luna-text-viewer-theme-dark .luna-text-viewer-copy,.luna-text-viewer-theme-dark .luna-text-viewer-line-number{border-color:#3d3d3d}.luna-text-viewer-theme-dark .luna-text-viewer-copy .luna-text-viewer-icon-check{color:#81c995}.luna-text-viewer-theme-dark .luna-text-viewer-copy{background-color:#242424}",""]),e.exports=t},5357:function(e,t,n){(t=n(3645)(!1)).push([e.id,"@font-face{font-family:eruda-icon;src:url('data:application/x-font-woff;charset=utf-8;base64,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') format('woff')}[class*=' _icon-'],[class^='_icon-']{display:inline-block;font-family:eruda-icon!important;font-size:16px;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}._icon-arrow-left:before{content:'\\f101'}._icon-arrow-right:before{content:'\\f102'}._icon-caret-down:before{content:'\\f103'}._icon-caret-right:before{content:'\\f104'}._icon-clear:before{content:'\\f105'}._icon-compress:before{content:'\\f106'}._icon-copy:before{content:'\\f107'}._icon-delete:before{content:'\\f108'}._icon-error:before{content:'\\f109'}._icon-expand:before{content:'\\f10a'}._icon-eye:before{content:'\\f10b'}._icon-filter:before{content:'\\f10c'}._icon-play:before{content:'\\f10d'}._icon-record:before{content:'\\f10e'}._icon-refresh:before{content:'\\f10f'}._icon-reset:before{content:'\\f110'}._icon-search:before{content:'\\f111'}._icon-select:before{content:'\\f112'}._icon-tool:before{content:'\\f113'}._icon-warn:before{content:'\\f114'}",""]),e.exports=t},3645:function(e){"use strict";e.exports=function(i){var c=[];return c.toString=function(){return this.map(function(e){n=e[1]||"";var t,n,o,r=(o=e[3])?(i&&"function"==typeof btoa?(t=btoa(unescape(encodeURIComponent(JSON.stringify(o)))),t="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(t),t="/*# ".concat(t," */"),r=o.sources.map(function(e){return"/*# sourceURL=".concat(o.sourceRoot||"").concat(e," */")}),[n].concat(r).concat([t])):[n]).join("\n"):n;return e[2]?"@media ".concat(e[2]," {").concat(r,"}"):r}).join("")},c.i=function(e,t,n){"string"==typeof e&&(e=[[null,e,""]]);var o={};if(n)for(var r=0;r>18&63]+s[t>>12&63]+s[t>>6&63]+s[63&t]));return r=e.length,1==i?(n=e[r-1],o.push(s[n>>2]),o.push(s[n<<4&63]),o.push("==")):2==i&&(n=(e[r-2]<<8)+e[r-1],o.push(s[n>>10]),o.push(s[n>>4&63]),o.push(s[n<<2&63]),o.push("=")),o.join("")},decode:function(e){var t=0;"="===e[(s=e.length)-2]?t=2:"="===e[s-1]&&(t=1);for(var n,o,r,i,a=new Array(3*s/4-t),s=0>16&255,a[l++]=u>>8&255,a[l++]=255&u}return 2===t?(i=d[e.charCodeAt(c)]<<2|d[e.charCodeAt(c+1)]>>4,a[l++]=255&i):1===t&&(i=d[e.charCodeAt(c)]<<10|d[e.charCodeAt(c+1)]<<4|d[e.charCodeAt(c+2)]>>2,a[l++]=i>>8&255,a[l++]=255&i),a}};for(var d=[],s="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",n=0,o=s.length;n":">",'"':""","'":"'","`":"`"},n="(?:"+n(o).join("|")+")",r=new RegExp(n),i=new RegExp(n,"g"),a=function(e){return o[e]};e.exports=t},4187:function(e,t,n){var o=n(3367),r=/["'\\\n\r\u2028\u2029]/g;e.exports=function(e){return o(e).replace(r,function(e){switch(e){case'"':case"'":case"\\":return"\\"+e;case"\n":return"\\n";case"\r":return"\\r";case"\u2028":return"\\u2028";case"\u2029":return"\\u2029"}})}},2337:function(e,t){e.exports=function(e){return e.replace(/\W/g,"\\$&")}},642:function(e,t){e.exports=function(e){var t=document.createElement("style");return t.textContent=e,t.type="text/css",document.head.appendChild(t),t}},1672:function(e,t,n){var s=n(2838),c=n(1369),l=n(2533);e.exports=function(e,t,n){t=s(t,n);for(var o=!c(e)&&l(e),r=(o||e).length,i=0;i[\]\u2100-\uFFFF(),]*/gi;e.exports=function(e){e=a(e.match(s));return o(i(e,function(e){return r(e)}))}},5972:function(e,t,n){var i=n(2838),a=n(3783);e.exports=function(e,o,t){var r=[];return o=i(o,t),a(e,function(e,t,n){o(e,t,n)&&r.push(e)}),r}},2244:function(e,t,n){var o=n(2267),r=n(4072),i=n(1369),a=n(1286);e.exports=function(e,t,n){t=(i(e)?r:o)(e,t,n);if(!a(t)&&-1!==t)return e[t]}},4072:function(e,t,n){var a=n(2838);e.exports=function(e,t,n,o){o=o||1,t=a(t,n);for(var r=e.length,i=0>>4).toString(16)),t.push((15&r).toString(16))}return t.join("")},decode:function(e){var t=[],n=e.length;r(n)&&n--;for(var o=0;o/g,">"),r=h[r],0),s=[],c=(n(r,function(n){n.language&&(o=o.replace(n.re,function(e,t){return t?(s[a++]=l(t,n.language,i),e.replace(t,"___subtmpl"+(a-1)+"___")):e}))}),n(r,function(e,t){h[e.language]||(o=o.replace(e.re,"___"+t+"___$1___end"+t+"___"))}),[]);return o=o.replace(/___(?!subtmpl)\w+?___/g,function(e){var t="end"===e.substr(3,3),n=(t?e.substr(6):e.substr(3)).replace(/_/g,""),o=0").replace(new RegExp("___"+t+"___","g"),'"))}),n(r,function(e){e.language&&(o=o.replace(/___subtmpl\d+___/g,function(e){e=parseInt(e.replace(/___subtmpl(\d+)___/,"$1"),10);return s[e]}))}),o},{comment:"color:#63a35c;",string:"color:#183691;",number:"color:#0086b3;",keyword:"color:#a71d5d;",operator:"color:#994500;"}),h={js:{comment:{re:/(\/\/.*|\/\*([\s\S]*?)\*\/)/g,style:"comment"},string:{re:/(('.*?')|(".*?"))/g,style:"string"},numbers:{re:/(-?(\d+|\d+\.\d+|\.\d+))/g,style:"number"},keywords:{re:/(?:\b)(function|for|foreach|while|if|else|elseif|switch|break|as|return|this|class|self|default|var|const|let|false|true|null|undefined)(?:\b)/gi,style:"keyword"},operator:{re:/(\+|-|\/|\*|%|=|<|>|\||\?|\.)/g,style:"operator"}}};h.html={comment:{re:/(<!--([\s\S]*?)-->)/g,style:"comment"},tag:{re:/(<\/?\w(.|\n)*?\/?>)/g,style:"keyword",embed:["string"]},string:h.js.string,css:{re:/(?:<style.*?>)([\s\S]*)?(?:<\/style>)/gi,language:"css"},script:{re:/(?:<script.*?>)([\s\S]*?)(?:<\/script>)/gi,language:"js"}},h.css={comment:h.js.comment,string:h.js.string,numbers:{re:/((-?(\d+|\d+\.\d+|\.\d+)(%|px|em|pt|in)?)|#[0-9a-fA-F]{3}[0-9a-fA-F]{3})/g,style:"number"},keywords:{re:/(@\w+|:?:\w+|[a-z-]+:)/g,style:"keyword"}},e.exports=l},5925:function(e,t){var u=Math.round;e.exports=function(e){var t,n,o,r=e[0]/360,i=e[1]/100,a=e[2]/100,s=[];if(e[3]&&(s[3]=e[3]),0==i)o=u(255*a),s[0]=s[1]=s[2]=o;else for(var c=2*a-(t=a<.5?a*(1+i):a+i-a*i),l=0;l<3;l++)(n=r+1/3*-(l-1))<0&&n++,1")),n}}},6362:function(e,t){e.exports=function(e){return e}},496:function(e,t){e.exports=function(e,t,n){return Array.prototype.indexOf.call(e,t,n)}},5022:function(e,t,n){var o=n(1662);e.exports=function(e,t){e.prototype=o(t.prototype)}},7190:function(e,t,n){var o=n(3783);e.exports=function(e){var n={};return o(e,function(e,t){n[e]=t}),n}},7403:function(e,t,n){var o=n(106);e.exports=function(e){return"[object Arguments]"===o(e)}},6472:function(e,t,n){var o=n(106);t=Array.isArray||function(e){return"[object Array]"===o(e)},e.exports=t},385:function(e,t,n){var o=n(106);e.exports=function(e){return"[object ArrayBuffer]"===o(e)}},1369:function(e,t,n){var o=n(3990),r=n(4777),i=Math.pow(2,53)-1;e.exports=function(e){var t;return!!e&&(t=e.length,o(t))&&0<=t&&t<=i&&!r(e)}},4696:function(e,t){e.exports=function(e){return!0===e||!1===e}},2727:function(e,t){t="object"==typeof window&&"object"==typeof document&&9===document.nodeType,e.exports=t},2349:function(e,t,n){var o=n(4777);e.exports=function(e){return null!=e&&(!!e._isBuffer||e.constructor&&o(e.constructor.isBuffer)&&e.constructor.isBuffer(e))}},2520:function(e,t,n){var o=new(n(2765))("(prefers-color-scheme: dark)");e.exports=function(){return o.isMatch()}},2106:function(e,t,n){var o=n(106);e.exports=function(e){return"[object Date]"===o(e)}},9833:function(e,t){e.exports=function(e){return!(!e||1!==e.nodeType)}},8887:function(e,t,n){var o=n(1369),r=n(6472),i=n(6768),a=n(7403),s=n(2533);e.exports=function(e){return null==e||(o(e)&&(r(e)||i(e)||a(e))?0===e.length:0===s(e).length)}},2749:function(e,t,n){var o=n(106);e.exports=function(e){return"[object Error]"===o(e)}},4777:function(e,t,n){var o=n(106);e.exports=function(e){e=o(e);return"[object Function]"===e||"[object GeneratorFunction]"===e||"[object AsyncFunction]"===e}},9585:function(e,t,n){var n=n(5610),f=n.getComputedStyle,p=n.document;function m(e,t){return e.rightt.right||e.bottomt.bottom}e.exports=function(e){var t=1'+e+""}e.exports=function(t,n){n=n||a;var e=o(t);return r(e,function(e){t=t.replace(new RegExp(i(e),"g"),n)}),t}},9622:function(e,t){e.exports=function(e,t){var n=document.createElement("script");n.src=e,n.onload=function(){var e=n.readyState&&"complete"!=n.readyState&&"loaded"!=n.readyState;t&&t(!e)},n.onerror=function(){t(!1)},document.body.appendChild(n)}},3063:function(e,t,n){var o=n(3367);e.exports=function(e){return o(e).toLocaleLowerCase()}},5351:function(e,t,n){var r=n(4552),i=n(3367);e.exports=function(e,t,n){var o=(e=i(e)).length;return n=n||" ",e=o=c[l[r]]){o=l[r];break}return+(n/c[o]).toFixed(2)+o},{ms:1,s:1e3}),l=(c.m=60*c.s,c.h=60*c.m,c.d=24*c.h,c.y=365.25*c.d,["y","d","h","m","s"]),u=/^((?:\d+)?\.?\d+) *(s|m|h|d|y)?$/;e.exports=t},6339:function(e,t,n){var s=n(6930),c=n(5610),l=n(3367);function o(e,t){if(e=l(e),t=l(t),s(e,"_")&&!s(t,"_"))return 1;if(s(t,"_")&&!s(e,"_"))return-1;for(var n,o,r,i=/^\d+|^\D+/;;){if(!e)return t?-1:0;if(!t)return 1;if(n=e.match(i)[0],o=t.match(i)[0],a=!c.isNaN(n),r=!c.isNaN(o),a&&!r)return-1;if(r&&!a)return 1;if(a&&r){var a=n-o;if(a)return a;if(n.length!==o.length)return+n||+o?o.length-n.length:n.length-o.length}else if(n!==o)return nwindow.innerHeight?"landscape":"portrait"}},o.mixin(t),window.addEventListener("orientationchange",function(){setTimeout(function(){t.emit("change",t.get())},200)},!1),e.exports=t},8702:function(e,t,n){var d=n(9702),o=n(7913),h=n(6930),f=n(3063),p=(t=function(e,r){for(var a=[],t=e;e;){var n,o,i,s,c=!0;if(d(a)&&b[d(a)]?((n=new RegExp("]*>")).exec(e))&&(o=e.substring(0,n.index),e=e.substring(n.index+n[0].length),o)&&r.text&&r.text(o),u(0,d(a))):(h(e,"\x3c!--")?0<=(n=e.indexOf("--\x3e"))&&(r.comment&&r.comment(e.substring(4,n)),e=e.substring(n+3),c=!1):h(e,"\s]+))?)*)\s*(\/?)>/i),m=/^<\/([-A-Za-z0-9_]+)[^>]*>/,v=/^<([-A-Za-z0-9_]+)((?:\s+[-A-Za-z0-9_:@.]+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)>/i,g=/([-A-Za-z0-9_:@.]+)(?:\s*=\s*(?:(?:"((?:\\.|[^"])*)")|(?:'((?:\\.|[^'])*)')|([^>\s]+)))?/g,b=o("script,style".split(","));e.exports=t},4198:function(e,t,n){var o=n(1137),r=n(1352);t=o(function(t,n){return function(){var e=(e=(e=[]).concat(n)).concat(r(arguments));return t.apply(this,e)}}),e.exports=t},1194:function(e,t,n){var o,r,i=n(8847),n=n(5610),a=n.performance,s=n.process;t=a&&a.now?function(){return a.now()}:s&&s.hrtime?(r=(o=function(){var e=s.hrtime();return 1e9*e[0]+e[1]})()-1e9*s.uptime(),function(){return(o()-r)/1e6}):(r=i(),function(){return i()-r}),e.exports=t},3487:function(e,t,n){var i=n(6768),a=n(6472),s=n(6341),c=n(3783);e.exports=function(e,n,t){i(n)&&(n=[n]),a(n)&&(o=n,n=function(e,t){return s(o,t)});var o,r={};return c(e,t?function(e,t){n(e,t)||(r[t]=e)}:function(e,t){n(e,t)&&(r[t]=e)}),r}},747:function(e,t,n){var o=n(1475),r=n(7494),i=n(3023),a=n(6257),s=n(7622),c=((t=o(function(e){if(e=e.replace(l,""),e=r(e),!a(u,e))for(var t=c.length;t--;){var n=c[t]+i(e);if(a(u,n))return n}return e})).dash=o(function(e){e=t(e);return(l.test(e)?"-":"")+s(e)}),["O","ms","Moz","Webkit"]),l=/^(O)|(ms)|(Moz)|(Webkit)|(-o-)|(-ms-)|(-moz-)|(-webkit-)/g,u=document.createElement("p").style;e.exports=t},2994:function(e,t,n){var o=n(6472),r=n(7653);e.exports=function(t){return o(t)?function(e){return r(e,t)}:(n=t,function(e){return null==e?void 0:e[n]});var n}},1745:function(e,o,t){var r=t(4331),i=t(3783),a=t(1286),s=t(6472),c=t(2461),l=t(8887),u=t(5972),d=t(5166),h=(o={parse:function(e){var n={};return e=r(e).replace(h,""),i(e.split("&"),function(e){var e=e.split("="),t=e.shift(),e=0>=1,e+=e;return n}},8368:function(e,t,n){var o=n(2337);e.exports=function(e,t,n){return e.replace(new RegExp(o(t),"g"),n)}},1137:function(e,t){e.exports=function(r,i){return i=null==i?r.length-1:+i,function(){for(var e=Math.max(arguments.length-i,0),t=new Array(e),n=0;nr)return B("Timeout");if(i&&i]*>/g;e.exports=function(e){return e.replace(n,"")}},1907:function(e,t,n){var f=n(6768),p=n(1352),m=n(6435),v=n(2461),g=n(4331),b=/^(\s+)\S+/;e.exports=function(e){f(e)&&(e=p(e));for(var t="",n=arguments.length,o=new Array(1e.length?e:(o=t-i.length)<1?i:(n=e.slice(0,o),s(r)||e.indexOf(r,o)!==o&&-1<(o=n.lastIndexOf(r))&&(n=n.slice(0,o)),n+i)}},3085:function(e,t,n){var o=n(106),r=n(9433),i=n(3063),a=n(2349),s=/^\[object\s+(.*?)]$/;e.exports=function(e){var t,n=!(1>6*t)+n);0>6*(t-1)),t--;return o}(t[o]);return n},decode:function(e,t){r=h.decode(e),i=0,a=r.length,l=c=s=0,u=128,d=191;for(var n,o=[];!1!==(n=function(e){for(;;){if(a<=i&&l){if(e)return p();throw new Error("Invalid byte index")}if(i===a)return!1;var t,n=r[i];if(i++,l){if(n=e.length?void 0:e)&&e[o++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}},c=(Object.defineProperty(t,"__esModule",{value:!0}),s(n(1160))),l=n(7669),y=n(2062),u=s(n(242)),h=s(n(2439)),f=s(n(3063)),p=s(n(3783)),m=s(n(3009)),v=s(n(5044)),g=s(n(4502)),b=s(n(6329)),w=s(n(7494)),_=s(n(6341)),x=s(n(3875)),A=s(n(3577)),k=s(n(6768)),s=(n(8169),r=c.default,i(C,r),C.prototype.highlight=function(e,t){t&&(0,b.default)(this.options,t),(this.target=e)instanceof HTMLElement&&this.options.monitorResize&&(this.resizeSensor&&this.resizeSensor.destroy(),this.resizeSensor=new u.default(e),this.resizeSensor.addListener(this.redraw)),this.redraw()},C.prototype.hide=function(){this.target=null,this.redraw()},C.prototype.intercept=function(e){this.interceptor=e},C.prototype.destroy=function(){window.removeEventListener("resize",this.redraw),window.removeEventListener("scroll",this.redraw),this.resizeSensor&&this.resizeSensor.destroy(),r.prototype.destroy.call(this)},C.prototype.draw=function(){var e=this.target;e&&(e instanceof Text?this.drawText(e):this.drawElement(e))},C.prototype.drawText=function(e){var t=this.options,n=document.createRange(),e=(n.selectNode(e),n.getBoundingClientRect()),o=e.left,r=e.top,i=e.width,e=e.height,n=(n.detach(),{paths:[{path:this.rectToPath({left:o,top:r,width:i,height:e}),fillColor:O(t.contentColor),name:"content"}],showExtensionLines:t.showExtensionLines,showRulers:t.showRulers});t.showInfo&&(n.elementInfo={tagName:"#text",nodeWidth:i,nodeHeight:e}),this.overlay.drawHighlight(n)},C.prototype.drawElement=function(e){var t={paths:this.getPaths(e),showExtensionLines:this.options.showExtensionLines,showRulers:this.options.showRulers,colorFormat:this.options.colorFormat};this.options.showInfo&&(t.elementInfo=this.getElementInfo(e)),this.interceptor&&(e=this.interceptor(t))&&(t=e),this.overlay.drawHighlight(t)},C.prototype.getPaths=function(e){function t(e){return(0,y.pxToNum)(o.getPropertyValue(e))}var n=this.options,o=window.getComputedStyle(e),e=e.getBoundingClientRect(),r=e.left,i=e.top,a=e.width,e=e.height,s=t("margin-left"),c=t("margin-right"),l=t("margin-top"),u=t("margin-bottom"),d=t("border-left-width"),h=t("border-right-width"),f=t("border-top-width"),p=t("border-bottom-width"),m=t("padding-left"),v=t("padding-right"),g=t("padding-top"),b=t("padding-bottom");return[{path:this.rectToPath({left:r+d+m,top:i+f+g,width:a-d-m-h-v,height:e-f-g-p-b}),fillColor:O(n.contentColor),name:"content"},{path:this.rectToPath({left:r+d,top:i+f,width:a-d-h,height:e-f-p}),fillColor:O(n.paddingColor),name:"padding"},{path:this.rectToPath({left:r,top:i,width:a,height:e}),fillColor:O(n.borderColor),name:"border"},{path:this.rectToPath({left:r-s,top:i-l,width:a+s+c,height:e+l+u}),fillColor:O(n.marginColor),name:"margin"}]},C.prototype.getElementInfo=function(e){var t=e.getBoundingClientRect(),n=t.width,t=t.height,o=(o=e.getAttribute("class")||"").split(/\s+/).map(function(e){return"."+e}).join(""),o={tagName:(0,f.default)(e.tagName),className:o,idValue:e.id,nodeWidth:n,nodeHeight:t};return this.options.showStyles&&(o.style=this.getStyles(e)),this.options.showAccessibilityInfo&&(0,b.default)(o,this.getAccessibilityInfo(e)),o},C.prototype.getStyles=function(e){for(var t=window.getComputedStyle(e),n=!1,o=e.childNodes,r=0,i=o.length;r=e.length?void 0:e)&&e[o++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")};function n(e,t){var n=e[3];return[(1-n)*t[0]+n*e[0],(1-n)*t[1]+n*e[1],(1-n)*t[2]+n*e[2],n+t[3]*(1-n)]}function o(e){var e=b(e,3),t=e[0],n=e[1],e=e[2];return.2126*(t<=.03928?t/12.92:Math.pow((t+.055)/1.055,2.4))+.7152*(n<=.03928?n/12.92:Math.pow((n+.055)/1.055,2.4))+.0722*(e<=.03928?e/12.92:Math.pow((e+.055)/1.055,2.4))}Object.defineProperty(t,"__esModule",{value:!0}),t.getContrastThreshold=t.isLargeFont=t.getAPCAThreshold=t.desiredLuminanceAPCA=t.contrastRatioByLuminanceAPCA=t.contrastRatioAPCA=t.luminanceAPCA=t.contrastRatio=t.luminance=t.rgbaToHsla=t.blendColors=void 0,t.blendColors=n,t.rgbaToHsla=function(e){var e=b(e,4),t=e[0],n=e[1],o=e[2],e=e[3],r=Math.max(t,n,o),i=Math.min(t,n,o),a=r-i,s=r+i,c=.5*s;return[i===r?0:t===r?(1/6*(n-o)/a+1)%1:n===r?1/6*(o-t)/a+1/3:1/6*(t-n)/a+2/3,0==c||1==c?0:c<=.5?a/s:a/(2-s),c,e]},t.luminance=o,t.contrastRatio=function(e,t){e=o(n(e,t)),t=o(t);return(Math.max(e,t)+.05)/(Math.min(e,t)+.05)};var r=2.4,i=.55,a=.58,s=.62,c=.57,l=.03,u=1.45,d=1.25,h=1.25,f=5e-4,p=.078,m=12.82051282051282,v=.06,g=.001;function w(e){var e=b(e,3),t=e[0],n=e[1],e=e[2];return.2126729*Math.pow(t,r)+.7151522*Math.pow(n,r)+.072175*Math.pow(e,r)}function _(e){return l-g?0:-p=v[1])return-1===(m=h[h.length-1-g])?null:m}}catch(e){r={error:e}}finally{try{p&&!p.done&&(i=f.return)&&i.call(f)}finally{if(r)throw r.error}}}}catch(e){n={error:e}}finally{try{l&&!l.done&&(o=c.return)&&o.call(c)}finally{if(n)throw n.error}}return null},t.isLargeFont=k;var C={aa:3,aaa:4.5},S={aa:4.5,aaa:7};t.getContrastThreshold=function(e,t){return k(e,t)?C:S}},9434:function(e,t){"use strict";var r=this&&this.__values||function(e){var t="function"==typeof Symbol&&Symbol.iterator,n=t&&e[t],o=0;if(n)return n.call(e);if(e&&"number"==typeof e.length)return{next:function(){return{value:(e=e&&o>=e.length?void 0:e)&&e[o++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},n=this&&this.__read||function(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var o,r,i=n.call(e),a=[];try{for(;(void 0===t||0=e.length?void 0:e)&&e[o++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},d=this&&this.__read||function(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var o,r,i=n.call(e),a=[];try{for(;(void 0===t||0i&&(r=i-8-t),s>=o.minX&&s+n<=o.maxX&&r>=o.minY&&r+t<=o.maxY);if(so.minX&&ro.minY&&!i)return e.style.display="none";e.style.top=r+"px",e.style.left=s+"px",c||((n=(0,v.createChild)(e,"div","tooltip-arrow")).style.clipPath=l?"polygon(0 0, 100% 0, 50% 100%)":"polygon(50% 0, 0 100%, 100% 100%)",n.style.top=(l?t-1:-8)+"px",n.style.left=a-s+"px")}(this.tooltip,e.elementInfo,e.colorFormat,t,this.canvasWidth,this.canvasHeight),this.context.restore(),{bounds:t}},s.prototype.drawAxis=function(e,t,n){e.save();var o=this.pageZoomFactor*this.pageScaleFactor*this.emulationScaleFactor,r=this.scrollX*this.pageScaleFactor,i=this.scrollY*this.pageScaleFactor;function a(e){return Math.round(e*o)}function s(e){return Math.round(e/o)}var c=this.canvasWidth/o,l=this.canvasHeight/o;e.save(),e.fillStyle=w,n?e.fillRect(0,a(l)-15,a(c),a(l)):e.fillRect(0,0,a(c),15),e.globalCompositeOperation="destination-out",e.fillStyle="red",t?e.fillRect(a(c)-15,0,a(c),a(l)):e.fillRect(0,0,15,a(l)),e.restore(),e.fillStyle=w,t?e.fillRect(a(c)-15,0,a(c),a(l)):e.fillRect(0,0,15,a(l)),e.lineWidth=1,e.strokeStyle=y,e.fillStyle=y,e.save(),e.translate(-r,.5-i);for(var u=l+s(i),d=100;d]*>/g.test(e))try{var t=s.default.parse(e);return function e(t,n){for(var o=0,r=t.length;oe.offsetHeight},t.executeAfterTransition=function(t,n){if((0,h.default)(t))return n();function o(e){e.target===t&&(t.removeEventListener("transitionend",o),n())}t.addEventListener("transitionend",o)},t.pxToNum=function(e){return(0,u.default)(e.replace("px",""))},t.getPlatform=function(){var e=(0,d.default)();return"os x"===e?"mac":e},t.resetCanvasSize=function(e){e.width=Math.round(e.offsetWidth*window.devicePixelRatio),e.height=Math.round(e.offsetHeight*window.devicePixelRatio)}},6093:function(e,t,n){"use strict";var o,r,i=this&&this.__extends||(o=function(e,t){return(o=Object.setPrototypeOf||({__proto__:[]}instanceof Array?function(e,t){e.__proto__=t}:function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])}))(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function n(){this.constructor=e}o(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}},s=(Object.defineProperty(t,"__esModule",{value:!0}),a(n(1512))),c=a(n(5229)),l=a(n(2244)),u=a(n(8613)),a=(r=a(n(5404)).default,i(d,r),d.prototype.notify=function(e,t){var n=this,o=(void 0===t&&(t={duration:this.options.duration}),new h(this,e));this.notifications.push(o),this.add(o),setTimeout(function(){return n.remove(o.id)},t.duration)},d.prototype.dismissAll=function(){for(var e=this.notifications,t=e[0];t;)this.remove(t.id),t=e[0]},d.prototype.add=function(e){this.container.appendChild(e.container)},d.prototype.remove=function(t){var e=this.notifications,n=(0,l.default)(e,function(e){return e.id===t});n&&(n.destroy(),n=e.indexOf(n),e.splice(n,1))},d.prototype.initTpl=function(){var e=this.$container,t=this.options.position,n=t.x,t=t.y,o="flex-end",r="flex-end";switch(n){case"center":r="center";break;case"left":r="flex-start"}e.attr("style","justify-content: ".concat(o="top"===t?"flex-start":o,"; align-items: ").concat(r))},d);function d(e,t){e=r.call(this,e,{compName:"notification"},t=void 0===t?{}:t)||this;return e.notifications=[],e.initOptions(t,{position:{x:"right",y:"bottom"},duration:2e3}),e.initTpl(),e}t.default=a;f.prototype.destroy=function(){this.$container.remove()},f.prototype.initTpl=function(){this.$container.html(this.notification.c('
    '.concat(this.content,"
    ")))};var h=f;function f(e,t){this.container=(0,u.default)("div"),this.$container=(0,s.default)(this.container),this.notification=e,this.content=t,this.id=(0,c.default)("luna-notification-"),this.$container.attr({id:this.id,class:e.c("item ".concat("bottom"===e.getOption("position").y?"lower":"upper"))}),this.initTpl()}e.exports=a,e.exports.default=a},5404:function(e,t,n){"use strict";var o,i,r=this&&this.__extends||(o=function(e,t){return(o=Object.setPrototypeOf||({__proto__:[]}instanceof Array?function(e,t){e.__proto__=t}:function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])}))(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function n(){this.constructor=e}o(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}},s=(Object.defineProperty(t,"__esModule",{value:!0}),a(n(1443))),c=a(n(1512)),l=n(164),u=a(n(3783)),d=a(n(6329)),h=a(n(4193)),f=a(n(5852)),a=(i=s.default,r(p,i),p.prototype.destroy=function(){this.destroySubComponents();var e=this.c;this.$container.rmClass("luna-".concat(this.compName)).rmClass(e("platform-".concat((0,l.getPlatform)()))).rmClass(e("theme-".concat(this.options.theme))),this.$container.html(""),this.emit("destroy"),this.removeAllListeners()},p.prototype.setOption=function(e,t){var o=this,r=this.options,n={};"string"==typeof e?n[e]=t:n=e,(0,u.default)(n,function(e,t){var n=r[t];r[t]=e,o.emit("optionChange",t,e,n)})},p.prototype.getOption=function(e){return this.options[e]},p.prototype.addSubComponent=function(e){e.setOption("theme",this.options.theme),this.subComponents.push(e)},p.prototype.removeSubComponent=function(t){(0,f.default)(this.subComponents,function(e){return e===t})},p.prototype.destroySubComponents=function(){(0,u.default)(this.subComponents,function(e){return e.destroy()}),this.subComponents=[]},p.prototype.initOptions=function(e,t){(0,h.default)(e,t=void 0===t?{}:t),(0,d.default)(this.options,e)},p.prototype.find=function(e){return this.$container.find(this.c(e))},p);function p(e,t,n){var t=t.compName,n=(void 0===n?{}:n).theme,n=void 0===n?"light":n,r=i.call(this)||this;return r.subComponents=[],r.compName=t,r.c=(0,l.classPrefix)(t),r.options={},r.container=e,r.$container=(0,c.default)(e),r.$container.addClass(["luna-".concat(t),r.c("platform-".concat((0,l.getPlatform)()))]),r.on("optionChange",function(e,t,n){var o=r.c;"theme"===e&&(r.$container.rmClass(o("theme-".concat(n))).addClass(o("theme-".concat(t))),(0,u.default)(r.subComponents,function(e){return e.setOption("theme",t)}))}),r.setOption("theme",n),r}t.default=a},164:function(e,t,n){"use strict";var o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}},r=(Object.defineProperty(t,"__esModule",{value:!0}),t.resetCanvasSize=t.getPlatform=t.pxToNum=t.executeAfterTransition=t.hasVerticalScrollbar=t.measuredScrollbarWidth=t.eventClient=t.drag=t.classPrefix=void 0,o(n(2461))),i=o(n(4331)),a=o(n(5610)),s=o(n(7483)),c=o(n(3990)),l=o(n(6341)),u=o(n(3875)),d=o(n(6954)),h=o(n(9585));t.classPrefix=function(e){var t="luna-".concat(e,"-");function n(e){return(0,r.default)((0,i.default)(e).split(/\s+/),function(e){return(0,l.default)(e,t)?e:e.replace(/[\w-]+/,function(e){return"".concat(t).concat(e)})}).join(" ")}return function(e){if(/<[^>]*>/g.test(e))try{var t=s.default.parse(e);return function e(t,n){for(var o=0,r=t.length;oe.offsetHeight},t.executeAfterTransition=function(t,n){if((0,h.default)(t))return n();function o(e){e.target===t&&(t.removeEventListener("transitionend",o),n())}t.addEventListener("transitionend",o)},t.pxToNum=function(e){return(0,u.default)(e.replace("px",""))},t.getPlatform=function(){var e=(0,d.default)();return"os x"===e?"mac":e},t.resetCanvasSize=function(e){e.width=Math.round(e.offsetWidth*window.devicePixelRatio),e.height=Math.round(e.offsetHeight*window.devicePixelRatio)}},8169:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return a}});function o(e){var a=[];return"M"!==(e=String(e).trim())[0]&&"m"!==e[0]||e.replace(r,function(e,t,n){var o=t.toLowerCase(),r=(n=n.match(c))?n.map(Number):[],i=t;if("m"===o&&2=s[o]&&r.length&&s[o];)a.push([i].concat(r.splice(0,s[o])));return""}),a}var s={a:7,c:6,h:1,l:2,m:2,q:4,s:4,t:2,v:1,z:0},r=/([astvzqmhlc])([^astvzqmhlc]*)/gi,c=/-?[0-9]*\.?[0-9]+(?:e[-+]?\d+)?/gi;function l(e,t){for(var n=0;ne.length)&&(t=e.length);for(var n=0,o=new Array(t);n\')}.luna-dom-highlighter-element-layout-type.luna-dom-highlighter-flex{background-image:url(\'data:image/svg+xml,\')}.luna-dom-highlighter-element-description{flex:1 1;font-weight:700;word-wrap:break-word;word-break:break-all}.luna-dom-highlighter-dimensions{color:#737373;text-align:right;margin-left:10px}.luna-dom-highlighter-material-node-width{margin-right:2px}.luna-dom-highlighter-material-node-height{margin-left:2px}.luna-dom-highlighter-material-tag-name{color:#881280}.luna-dom-highlighter-material-class-name,.luna-dom-highlighter-material-node-id{color:#1a1aa6}.luna-dom-highlighter-contrast-text{width:16px;height:16px;text-align:center;line-height:16px;margin-right:8px;border:1px solid #000;padding:0 1px}.luna-dom-highlighter-a11y-icon-not-ok{background-image:url(\'data:image/svg+xml,\')}.luna-dom-highlighter-a11y-icon-warning{background-image:url(\'data:image/svg+xml,\')}.luna-dom-highlighter-a11y-icon-ok{background-image:url(\'data:image/svg+xml,\')}@media (forced-colors:active){:root,body{background-color:transparent;forced-color-adjust:none}.luna-dom-highlighter-tooltip-content{border-color:Highlight;background-color:canvas;color:text;forced-color-adjust:none}.luna-dom-highlighter-tooltip-content::after{background-color:Highlight}.luna-dom-highlighter-color-swatch-inner,.luna-dom-highlighter-contrast-text,.luna-dom-highlighter-separator{border-color:Highlight}.luna-dom-highlighter-section-name{color:Highlight}.luna-dom-highlighter-dimensions,.luna-dom-highlighter-element-info-name,.luna-dom-highlighter-element-info-value-color,.luna-dom-highlighter-element-info-value-contrast,.luna-dom-highlighter-element-info-value-icon,.luna-dom-highlighter-element-info-value-text,.luna-dom-highlighter-material-class-name,.luna-dom-highlighter-material-node-id,.luna-dom-highlighter-material-tag-name{color:canvastext}}\n\n/*# sourceMappingURL=luna-dom-highlighter.css.map*/'},907:function(e,t,n){"use strict";function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);n + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/style.css b/public/style.css index 1218b2f..2a35ce7 100644 --- a/public/style.css +++ b/public/style.css @@ -1,3 +1,63 @@ + +/* Fonts */ +/*! system-font.css v1.1.0 | CC0-1.0 License | github.com/jonathantneal/system-font-face */ + +@font-face { + font-family: system; + font-style: normal; + font-weight: 300; + src: local(".SFNSText-Light"), local(".HelveticaNeueDeskInterface-Light"), local(".LucidaGrandeUI"), local("Ubuntu Light"), local("Segoe UI Light"), local("Roboto-Light"), local("DroidSans"), local("Tahoma"); +} + +@font-face { + font-family: system; + font-style: italic; + font-weight: 300; + src: local(".SFNSText-LightItalic"), local(".HelveticaNeueDeskInterface-Italic"), local(".LucidaGrandeUI"), local("Ubuntu Light Italic"), local("Segoe UI Light Italic"), local("Roboto-LightItalic"), local("DroidSans"), local("Tahoma"); +} + +@font-face { + font-family: system; + font-style: normal; + font-weight: 400; + src: local(".SFNSText-Regular"), local(".HelveticaNeueDeskInterface-Regular"), local(".LucidaGrandeUI"), local("Ubuntu"), local("Segoe UI"), local("Roboto-Regular"), local("DroidSans"), local("Tahoma"); +} + +@font-face { + font-family: system; + font-style: italic; + font-weight: 400; + src: local(".SFNSText-Italic"), local(".HelveticaNeueDeskInterface-Italic"), local(".LucidaGrandeUI"), local("Ubuntu Italic"), local("Segoe UI Italic"), local("Roboto-Italic"), local("DroidSans"), local("Tahoma"); +} + +@font-face { + font-family: system; + font-style: normal; + font-weight: 500; + src: local(".SFNSText-Medium"), local(".HelveticaNeueDeskInterface-MediumP4"), local(".LucidaGrandeUI"), local("Ubuntu Medium"), local("Segoe UI Semibold"), local("Roboto-Medium"), local("DroidSans-Bold"), local("Tahoma Bold"); +} + +@font-face { + font-family: system; + font-style: italic; + font-weight: 500; + src: local(".SFNSText-MediumItalic"), local(".HelveticaNeueDeskInterface-MediumItalicP4"), local(".LucidaGrandeUI"), local("Ubuntu Medium Italic"), local("Segoe UI Semibold Italic"), local("Roboto-MediumItalic"), local("DroidSans-Bold"), local("Tahoma Bold"); +} + +@font-face { + font-family: system; + font-style: normal; + font-weight: 700; + src: local(".SFNSText-Bold"), local(".HelveticaNeueDeskInterface-Bold"), local(".LucidaGrandeUI"), local("Ubuntu Bold"), local("Roboto-Bold"), local("DroidSans-Bold"), local("Segoe UI Bold"), local("Tahoma Bold"); +} + +@font-face { + font-family: system; + font-style: italic; + font-weight: 700; + src: local(".SFNSText-BoldItalic"), local(".HelveticaNeueDeskInterface-BoldItalic"), local(".LucidaGrandeUI"), local("Ubuntu Bold Italic"), local("Roboto-BoldItalic"), local("DroidSans-Bold"), local("Segoe UI Bold Italic"), local("Tahoma Bold"); +} + :root { --primary: #63DEAB; --primary-dark: #48de9f; @@ -46,7 +106,8 @@ } body { - font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; + font-family: system, "Helvetica Neue", Helvetica, Arial; + font-size: 13px; color: var(--text); line-height: 1.5; height: 100vh; @@ -116,7 +177,7 @@ nav { flex-direction: column; min-width: 250px; background: var(--background); - transition: width 0.2s ease; + transition: width 0.15s ease; } /* Tab bar */ @@ -178,7 +239,7 @@ nav { .editor-content textarea, .editor-content pre { box-sizing: border-box; - padding: 1rem; + padding: 0.15rem; margin: 0; border: 0; width: 100%; @@ -188,7 +249,6 @@ nav { left: 0; overflow: auto; white-space: pre; - font-family: Monaco, 'Courier New', monospace; font-size: 14px; line-height: 1.5; } @@ -239,7 +299,7 @@ textarea::placeholder { width: 2px; background: var(--border); transform: translateX(-50%); - transition: background-color 0.2s; + transition: background-color 0.15s; } body.resizing { @@ -265,7 +325,7 @@ body.resizing .resize-handle::after { min-width: 250px; background: var(--background); border-left: 1px solid var(--border); - transition: width 0.2s ease; + transition: width 0.15s ease; } iframe { @@ -275,6 +335,10 @@ iframe { background: white; } +.eruda-icon-tool { + display: none!important; +} + /* Keyboard shortcuts */ kbd { padding: 0.1rem 0.4rem; @@ -300,7 +364,7 @@ button { display: inline-flex; align-items: center; gap: 0.5rem; - transition: all 0.2s; + transition: all 0.15s; } button:hover { @@ -418,7 +482,7 @@ form > button { color: white; font-size: 0.9rem; cursor: pointer; - transition: all 0.2s; + transition: all 0.15s; } .share-url input { @@ -444,7 +508,7 @@ form > button { align-items: center; gap: 0.5rem; color: var(--text-light); - transition: all 0.2s; + transition: all 0.15s; } .view-toggles button:hover { @@ -477,7 +541,7 @@ form > button { display: flex; flex-direction: column; background: var(--background); - transition: all 0.2s ease; + transition: all 0.15s ease; width: 100%; } @@ -491,7 +555,7 @@ form > button { flex: 1; background: var(--background); border-left: 1px solid var(--border); - transition: all 0.3s ease; + transition: all 0.15s ease; } .preview.hidden { @@ -550,6 +614,13 @@ form > button { color: #000; } +#console-root { + position: absolute; + bottom: 0; + right: 0; + width: 100%; + z-index: 100; +} /* Responsive */ @@ -612,7 +683,11 @@ form > button { background: var(--primary-light); color: var(--text); } + + console-dark { + --console-bg: #1e1e1e; + --console-header: #2d2d2d; + --console-text: #ffffff; + --console-border: #404040; + } } - - - diff --git a/routes/auth.js b/routes/auth.js index 44fb05c..a4aca9d 100644 --- a/routes/auth.js +++ b/routes/auth.js @@ -21,10 +21,7 @@ router.post('/login', validateAuth, async (req, res, next) => { if (!user) { return res.status(401).json({ error: 'Invalid credentials' }); } - - console.log('User found:', { id: user.id, email: user.email }); - - + const validPassword = await bcrypt.compare(password, user.password); if (!validPassword) { return res.status(401).json({ error: 'Invalid credentials' }); diff --git a/routes/snippets.js b/routes/snippets.js index 6d9590c..ab492af 100644 --- a/routes/snippets.js +++ b/routes/snippets.js @@ -28,8 +28,6 @@ router.post('/', auth, validateSnippet, async (req, res) => { router.get('/share/:shareId', async (req, res) => { const { shareId } = req.params; const db = getDb(); - - console.log(shareId); db.get( snippetQueries.getByShareId, diff --git a/server.js b/server.js index 2a9a617..6325bc2 100644 --- a/server.js +++ b/server.js @@ -10,16 +10,14 @@ app.set('trust proxy', true); app.use(rateLimit({ windowMs: 5 * 60 * 1000, // 5min - max: 1000000, // 100 request per IP + max: 100, // 100 request per IP })); app.use(express.json()); app.use(express.static('public')); -// routes app.use('/api', routes); -// error handling app.use((err, req, res, next) => { console.error(err.stack); res.status(500).json({ error: 'Something broke!' });