{"version":3,"sources":["jsdelivr-header.js","/npm/auto-dark-mode@1.1.1/index.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,ACNA,MAAM,eACJ,eAAY,EACZ,qBAAkB,EAClB,UAAO,EACP,WAAQ,EAGV,MAAM,8BAA8B,eAClC,UAAY,aACZ,gBAAkB,wGAOlB,KAAO,4PAQP,MAAQ,QACL,KAAK,oBACL,KAAK,4BACL,KAAK,+NAUL,KAAK,wEAIL,KAAK,2FAKL,KAAK,0HAML,KAAK,kOASL,KAAK,2oBAsBL,KAAK,uDACL,KAAK,gFAGL,KAAK,uUAgBV,MAAM,kBACJ,eAAY,EAEZ,WAAA,EAAY,KAAE,EAAI,MAAE,EAAK,GAAE,EAAE,UAAE,EAAS,gBAAE,IACxC,KAAK,KAAO,EACZ,KAAK,MAAQ,EACb,KAAK,GAAK,EACV,KAAK,UAAY,EACjB,KAAK,gBAAkB,CACzB,CAEA,kBAAA,GACE,MAAM,EAAW,SAAS,cAAc,SAGxC,OAFA,EAAS,UAAY,KAAK,MAEnB,CACT,CAEA,mBAAA,GACE,MAAM,EAAM,SAAS,cAAc,OAGnC,OAFA,EAAI,UAAY,KAAK,KAEd,EAAI,UACb,CAEA,eAAA,GACE,IAAK,KAAK,UAAW,OAErB,MAAM,EAAW,IAAI,KAAK,mCAG1B,OAFc,KAAK,UAAU,cAAc,EAG7C,CAEA,cAAA,CAAe,GACC,KAAK,kBACb,iBAAiB,SAAU,EACnC,CAEA,oBAAsB,KACpB,MAAM,EAAQ,KAAK,kBACb,EAAQ,IAAI,MAAM,UAExB,EAAM,SAAW,EAAM,QACvB,EAAM,cAAc,EAAM,EAG5B,MAAA,GACE,MAAM,EAAW,KAAK,qBAChB,EAAY,KAAK,sBAEvB,EAAU,aAAa,QAAS,KAAK,iBACrC,EAAU,aAAa,KAAM,KAAK,WAElC,SAAS,KAAK,YAAY,GAC1B,SAAS,KAAK,YAAY,GAE1B,KAAK,UAAY,CACnB,EAGF,MAAM,qBACJ,iBAAmB,2BAEnB,SAAA,CAAU,GACR,aAAa,QAAQ,KAAK,iBAAkB,EAC9C,CAEA,SAAA,GACE,OAAO,KAAK,MAAM,aAAa,QAAQ,KAAK,qBAAsB,CACpE,CAEA,gBAAA,CAAiB,GACiB,KAAK,aACR,GAC/B,EAGF,MAAM,aACJ,WAAA,CAAa,GACX,KAAK,QAAU,IAAI,qBAEnB,KAAK,yBAA2B,IAAI,IAAI,IAAI,CAC1C,OAAQ,MAAO,WACZ,KAGL,KAAK,OAAQ,EACb,KAAK,cAAgB,oBACnB,KAAK,MAAQ,sBAAwB,eAEzC,CAEA,oBAAA,CAAqB,GACnB,MAAM,EAAU,KAAK,cACf,EAAc,EAAI,MAAM,QAC3B,MAAM,KACN,KAAK,GAAQ,EAAI,SACjB,QAAQ,GAAQ,IAGnB,EAAY,SAAS,GACjB,EAAY,OAAO,EAAY,QAAQ,GAAU,GACjD,EAAY,KAAK,GAErB,EAAI,MAAM,QAAU,EAAY,KAAK,IACvC,CAEA,mBAAA,GACE,KAAK,yBAAyB,SAAS,GACrC,SACG,iBAAiB,GACjB,SAAS,GAAQ,KAAK,qBAAqB,MAElD,CAEA,cAAiB,IACf,KAAK,sBACL,KAAK,QAAQ,UAAU,EAAE,OAAO,QAAQ,EAI5C,MAAM,aACJ,WAAA,CAAa,EAAe,GAC1B,MAAM,EAAc,GAAiB,IAAI,sBAEnC,EAAS,IAAI,kBAAkB,GAC/B,EAAU,IAAI,qBACd,EAAS,IAAI,aAAa,GAAyB,KAEnD,cAAE,GAAkB,GACpB,oBAAE,GAAwB,EAEhC,EAAO,SACP,EAAO,eAAe,GAEtB,EAAQ,iBAAiB,EAC3B,EAIoB,oBAAX,UAAwB,OAAO,QAAU","file":"/npm/auto-dark-mode@1.1.1/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/auto-dark-mode@1.1.1/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","class ThemeInterface {\n  defaultId = undefined;\n  defaultPosition = undefined;\n  html = undefined; // should be one element\n  style = undefined;\n}\n\nclass ToggleFancyShapeTheme extends ThemeInterface {\n  defaultId = \"adm-toggle\";\n  defaultPosition = `\n    position:fixed;\n    bottom:8%;\n    right:0;\n    z-index: 999999999999999999999999999999;\n  `;\n\n  html = `<div>\n    <link\n      rel=\"stylesheet\"\n      href=\"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.1/css/all.min.css\"\n    />\n    <input id=\"darkmode-toggle\" type=\"checkbox\">\n    <label for=\"darkmode-toggle\">Dark Mode</label>\n  </div>`;\n  style = `\n  #${this.defaultId} *,\n  #${this.defaultId} *:before, \n  #${this.defaultId} *:after {\n    box-sizing: border-box;\n  }\n  \n  body {\n    transition: background-color 0.5s ease-out, color 0.5s ease-out;\n    background-color: var(--color-bg);\n    color: var(--color-text);\n  }\n\n  #${this.defaultId} {\n    --color-bg: #fff;\n    --color-text: #333;\n  }\n  #${this.defaultId} .darkmode {\n    --color-bg: #222;\n    --color-text: steelblue;\n  }\n  \n  #${this.defaultId} #darkmode-toggle {\n    position: absolute;\n    width: 0;\n    height: 0;\n    visibility: hidden;\n  }\n  #${this.defaultId} #darkmode-toggle + label {\n    position: relative;\n    display: block;\n    width: 4rem;\n    height: 2rem;\n    background-color: var(--color-text);\n    border-radius: 2rem;\n    text-indent: -100em;\n  }\n  #${this.defaultId} #darkmode-toggle + label:after {\n    content: \"\";\n    font-family: \"Font Awesome 5 Free\";\n    font-weight: 900;\n    display: inline-block;\n    font-size: 1em;\n    text-rendering: auto;\n    -webkit-font-smoothing: antialiased;\n    -moz-osx-font-smoothing: grayscale;\n    color: var(--color-text);\n    text-indent: 0;\n    padding: 0.25rem;\n    text-align: left;\n    position: absolute;\n    top: 0.25rem;\n    left: 0.25rem;\n    width: 1.5rem;\n    height: 1.5rem;\n    background-color: var(--color-bg);\n    border-radius: 1.5rem;\n    transition: left 0.2s ease-out, transform 0.2s ease-out, width 0.2s ease-out;\n  }\n  #${this.defaultId} #darkmode-toggle + label:hover:after,\n  #${this.defaultId} #darkmode-toggle + label:active:after {\n    width: 2rem;\n  }\n  #${this.defaultId} #darkmode-toggle:checked + label:after {\n    content: \"\";\n    left: calc(100% - 0.25rem);\n    transform: translateX(-100%);\n    text-align: right;\n  }\n\n  @media (prefers-color-scheme: dark) {\n    body { --pref:\"dark\"; }\n  }\n  @media (prefers-color-scheme: light) {\n    body { --pref:\"light\"; }\n  }\n  `;\n}\n\nclass ToggleButtonShape {\n  toggleElm = undefined;\n\n  constructor({ html, style, js, defaultId, defaultPosition }) {\n    this.html = html;\n    this.style = style;\n    this.js = js;\n    this.defaultId = defaultId;\n    this.defaultPosition = defaultPosition;\n  }\n\n  createStyleElement() {\n    const styleElm = document.createElement(\"style\");\n    styleElm.innerHTML = this.style;\n\n    return styleElm;\n  }\n\n  createToggleElement() {\n    const div = document.createElement(\"div\");\n    div.innerHTML = this.html;\n\n    return div.firstChild;\n  }\n\n  getInputElement() {\n    if (!this.toggleElm) return;\n\n    const selector = `#${this.defaultId} input[type='checkbox']`;\n    const input = this.toggleElm.querySelector(selector);\n\n    return input;\n  }\n\n  setChangeEvent(action) {\n    const input = this.getInputElement();\n    input.addEventListener(\"change\", action);\n  }\n\n  dispatchChangeEvent = () => {\n    const input = this.getInputElement();\n    const event = new Event(\"change\");\n\n    input.checked = !input.checked;\n    input.dispatchEvent(event);\n  };\n\n  render() {\n    const styleElm = this.createStyleElement();\n    const toggleElm = this.createToggleElement();\n\n    toggleElm.setAttribute(\"style\", this.defaultPosition);\n    toggleElm.setAttribute(\"id\", this.defaultId);\n\n    document.head.appendChild(styleElm);\n    document.body.appendChild(toggleElm);\n\n    this.toggleElm = toggleElm;\n  }\n}\n\nclass ToggleHistoryManager {\n  localStorageFlag = \"awesome-dark-mode-status\";\n\n  saveState(state) {\n    localStorage.setItem(this.localStorageFlag, state);\n  }\n\n  readState() {\n    return JSON.parse(localStorage.getItem(this.localStorageFlag)) || false;\n  }\n\n  setPreviousState(buttonDispatchChange) {\n    const isPreviousStatusChecked = this.readState();\n    if (isPreviousStatusChecked) buttonDispatchChange();\n  }\n}\n\nclass ToggleAction {\n  constructor (doubleRotatedElements) {\n    this.history = new ToggleHistoryManager();\n\n    this.rotatedElementsSelectors = [...new Set([\n      \"html\", \"img\", \"video\",\n      ...doubleRotatedElements,\n    ])];\n  \n    this.isHue = true;\n    this.cssRotateCode = `filter: invert(1)${\n      this.isHue ? \" hue-rotate(180deg)\" : \"\"\n    } !important`;\n  }\n\n  rotateElmColor180deg(elm) {\n    const cssCode = this.cssRotateCode;\n    const elmCSSRules = elm.style.cssText\n      .split(\";\")\n      .map((elm) => elm.trim())\n      .filter((elm) => elm);\n\n    // toggle css code\n    elmCSSRules.includes(cssCode)\n      ? elmCSSRules.splice(elmCSSRules.indexOf(cssCode), 1)\n      : elmCSSRules.push(cssCode);\n\n    elm.style.cssText = elmCSSRules.join(\";\");\n  }\n\n  rotateElementsColor() {\n    this.rotatedElementsSelectors.forEach((selector) =>\n      document\n        .querySelectorAll(selector)\n        .forEach((elm) => this.rotateElmColor180deg(elm))\n    );\n  }\n\n  onChangeEvent = (e) => {\n    this.rotateElementsColor();\n    this.history.saveState(e.target.checked);\n  };\n}\n\nclass AutoDarkMode {\n  constructor (themeInstance, doubleRotatedElements) {\n    const buttonTheme = themeInstance || new ToggleFancyShapeTheme();\n\n    const button = new ToggleButtonShape(buttonTheme);\n    const history = new ToggleHistoryManager();\n    const action = new ToggleAction(doubleRotatedElements || []);\n\n    const { onChangeEvent } = action;\n    const { dispatchChangeEvent } = button;\n\n    button.render();\n    button.setChangeEvent(onChangeEvent);\n\n    history.setPreviousState(dispatchChangeEvent);\n  }\n}\n\n\nif (typeof exports != \"undefined\") module.exports = AutoDarkMode;\n\n"]}