{"version":3,"sources":["jsdelivr-header.js","/npm/liveclock@1.0.4/dist/src/index.ts"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,+MCNA,SAAS,oCAAc,GACrB,MAAiB,KAAV,GAA0B,SAAV,C,mIAGV,MAAA,iDAAwB,YACrC,OAAiB,CACf,aAAa,EACb,gBAAgB,EAChB,UAAU,EACV,UAAW,KAGb,eAAwC,KACxC,SAAmB,GAEnB,6BAAW,GACT,MAAO,CAAC,cAAe,iBAAkB,WAAY,Y,CAGvD,WAAA,GACE,O,CAGF,iBAAA,GACE,KAAK,eACD,KAAK,aACP,KAAK,e,CAIT,oBAAA,GACM,KAAK,gBACP,aAAa,KAAK,e,CAItB,YAAA,GACE,MAAM,EAAiB,CACrB,cACA,iBACA,YAGF,IAAK,MAAM,KAAQ,EACb,oCAAc,KAAK,aAAa,KAClC,KAAK,OAAO,IAAQ,EACY,SAA5B,KAAK,aAAa,IACpB,KAAK,aAAa,EAAM,UAG1B,KAAK,OAAO,IAAQ,EACY,UAA5B,KAAK,aAAa,IACpB,KAAK,aAAa,EAAM,UAK1B,KAAK,aAAa,aACpB,KAAK,OAAO,UAAY,KAAK,aAAa,cAE1C,KAAK,OAAO,UAAY,IACxB,KAAK,aAAa,YAAa,K,CAInC,wBAAA,GACE,KAAK,eACL,KAAK,e,CAGP,aAAA,GACM,KAAK,gBACP,aAAa,KAAK,gBAGpB,MAAM,EAAc,IAAI,KAElB,EAAU,KAAK,aACnB,EAAY,WACZ,EAAY,aACZ,EAAY,aACZ,KAAK,OAAO,eACZ,KAAK,OAAO,WACZ,KAAK,OAAO,UAAW,EAAY,aAAe,GAAM,EACxD,KAAK,OAAO,aAQd,GALI,IAAY,KAAK,WACnB,KAAK,UAAY,EACjB,KAAK,SAAW,GAGd,KAAK,OAAO,UAAY,KAAK,OAAO,eACtC,KAAK,eAAiB,WACpB,KAAK,cAAc,KAAK,MACxB,IAAO,EAAY,uBAEhB,CACL,IAAI,EACgC,KAAjC,GAAK,EAAY,cAAuB,EAAY,kBACnD,EAAQ,MACV,GAAS,KAEX,KAAK,eAAiB,WAAW,KAAK,cAAc,KAAK,MAAO,E,EAIpE,YAAA,CACE,EACA,EACA,EACA,EACA,EACA,EACA,GAEA,IAAI,EAAa,GACb,EAAS,GACT,EAAqB,EAAmB,EAAY,IAuBxD,OArBI,GACF,KAAiB,EAAQ,IAAM,GAAM,GAAG,WAAW,SAAS,EAAG,KAE7D,EADE,GAAS,GACF,MAEA,OAGX,GAAc,EAAM,WAAW,SAAS,EAAG,KAG7C,GAAc,GAAG,IAAqB,EAAQ,WAAW,SAAS,EAAG,OAEjE,IACF,GAAc,GAAG,IAAqB,EACnC,WACA,SAAS,EAAG,QAGjB,GAAc,EAEP,C,EAIX,OAAO,eAAe,OAAO,aAAc","file":"/npm/liveclock@1.0.4/dist/main.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/liveclock@1.0.4/dist/main.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","function isEmptyOrTrue(value: string | null) {\n  return value === \"\" || value === \"true\";\n}\n\nexport default class LiveClock extends HTMLElement {\n  private config = {\n    twelvehours: false,\n    secondsvisible: false,\n    blinking: false,\n    separator: \":\",\n  };\n\n  private timeoutHandler: number | null = null;\n  private lastText = \"\";\n\n  static get observedAttributes() {\n    return [\"twelvehours\", \"secondsvisible\", \"blinking\", \"separator\"];\n  }\n\n  constructor() {\n    super();\n  }\n\n  connectedCallback() {\n    this.updateConfig();\n    if (this.isConnected) {\n      this.updateContent();\n    }\n  }\n\n  disconnectedCallback() {\n    if (this.timeoutHandler) {\n      clearTimeout(this.timeoutHandler);\n    }\n  }\n\n  private updateConfig() {\n    const boolAttributes = [\n      \"twelvehours\",\n      \"secondsvisible\",\n      \"blinking\",\n    ] as const;\n\n    for (const attr of boolAttributes) {\n      if (isEmptyOrTrue(this.getAttribute(attr))) {\n        this.config[attr] = true;\n        if (this.getAttribute(attr) !== \"true\") {\n          this.setAttribute(attr, \"true\");\n        }\n      } else {\n        this.config[attr] = false;\n        if (this.getAttribute(attr) !== \"false\") {\n          this.setAttribute(attr, \"false\");\n        }\n      }\n    }\n\n    if (this.hasAttribute(\"separator\")) {\n      this.config.separator = this.getAttribute(\"separator\")!;\n    } else {\n      this.config.separator = \":\";\n      this.setAttribute(\"separator\", \":\");\n    }\n  }\n\n  attributeChangedCallback() {\n    this.updateConfig();\n    this.updateContent();\n  }\n\n  private updateContent(): void {\n    if (this.timeoutHandler) {\n      clearTimeout(this.timeoutHandler);\n    }\n\n    const currentTime = new Date();\n\n    const newText = this.generateText(\n      currentTime.getHours(),\n      currentTime.getMinutes(),\n      currentTime.getSeconds(),\n      this.config.secondsvisible,\n      this.config.separator,\n      this.config.blinking ? currentTime.getSeconds() % 2 === 0 : true,\n      this.config.twelvehours\n    );\n\n    if (newText !== this.lastText) {\n      this.innerText = newText;\n      this.lastText = newText;\n    }\n\n    if (this.config.blinking || this.config.secondsvisible) {\n      this.timeoutHandler = setTimeout(\n        this.updateContent.bind(this),\n        1000 - currentTime.getMilliseconds()\n      );\n    } else {\n      let delta =\n        (60 - currentTime.getSeconds()) * 1000 - currentTime.getMilliseconds();\n      if (delta > 1000) {\n        delta -= 1000;\n      }\n      this.timeoutHandler = setTimeout(this.updateContent.bind(this), delta);\n    }\n  }\n\n  private generateText(\n    hours: number,\n    minutes: number,\n    seconds: number,\n    secondsVisible: boolean,\n    separator: string,\n    separatorVisible: Boolean,\n    twelveHour: Boolean\n  ): string {\n    let timeString = \"\";\n    let suffix = \"\";\n    let separatorFormatted = separatorVisible ? separator : \" \";\n\n    if (twelveHour) {\n      timeString += (((hours + 11) % 12) + 1).toString().padStart(2, \"0\");\n      if (hours >= 12) {\n        suffix = \" PM\";\n      } else {\n        suffix = \" AM\";\n      }\n    } else {\n      timeString += hours.toString().padStart(2, \"0\");\n    }\n\n    timeString += `${separatorFormatted}${minutes.toString().padStart(2, \"0\")}`;\n\n    if (secondsVisible) {\n      timeString += `${separatorFormatted}${seconds\n        .toString()\n        .padStart(2, \"0\")}`;\n    }\n\n    timeString += suffix;\n\n    return timeString;\n  }\n}\n\nwindow.customElements.define(\"live-clock\", LiveClock);\n"]}