{
  "version": 3,
  "sources": ["../../../assets/src/hooks/SmoothScroll.ts", "../../../assets/src/hooks/CharacterCounter.ts", "../../../assets/src/hooks/ModalDialog.ts", "../../../assets/src/hooks/index.ts"],
  "sourcesContent": ["import { Hook } from \"phoenix_live_view\";\n\nexport const SmoothScroll: Hook = {\n  updated() {\n    const children = Array.from(this.el.children) as HTMLElement[];\n    const active = children.find((el) => el.dataset.active != null);\n\n    if (active != null) {\n      active.scrollIntoView({\n        behavior: \"smooth\",\n        block: \"center\",\n        inline: \"center\",\n      });\n    }\n  },\n};\n", "import { Hook } from \"phoenix_live_view\";\n\nconst SELECTOR = {\n  input: \"[data-type='ModernUI.CharacterCounter.input']\",\n  counter: \"[data-type='ModernUI.CharacterCounter.counter']\",\n} as const;\n\nconst ATTRS = {\n  maxLengthVal: \"data-max-length\",\n} as const;\n\nconst CLASSES = {\n  ok: \"text-secondary\",\n  warning: \"text-warning\",\n  danger: \"text-danger\",\n} as const;\n\nconst THRESHOLD = [\n  [90, CLASSES.danger],\n  [75, CLASSES.warning],\n  [-1, CLASSES.ok],\n] as const;\n\nconst toggleClasses = (el: HTMLElement, value: number) => {\n  for (const cl of Object.values(CLASSES)) {\n    el.classList.remove(cl);\n  }\n\n  for (const [threshold, className] of THRESHOLD) {\n    if (value >= threshold) {\n      el.classList.add(className);\n      break;\n    }\n  }\n};\n\nconst updateCounter = (el: HTMLElement) => {\n  const $input = el.querySelector(SELECTOR.input) as HTMLInputElement;\n  const $counter = el.querySelector(SELECTOR.counter) as HTMLElement;\n  if ($input == null || $counter == null) {\n    return;\n  }\n\n  const maxLength = parseInt(el.getAttribute(ATTRS.maxLengthVal) || \"0\", 10);\n  if (maxLength <= 0) {\n    return;\n  }\n\n  const currentLength = $input.value.length;\n  $counter.textContent = currentLength.toString();\n\n  toggleClasses($counter, (currentLength / maxLength) * 100);\n};\n\nexport const CharacterCounter: Hook = {\n  mounted() {\n    updateCounter(this.el);\n\n    const update = () => {\n      updateCounter(this.el);\n    };\n\n    this.el.addEventListener(\"input\", update);\n    this.el.addEventListener(\"keyup\", update);\n    this.el.addEventListener(\"paste\", () => {\n      // Delay to allow paste content to be processed\n      setTimeout(update, 100);\n    });\n  },\n\n  updated() {\n    updateCounter(this.el);\n  },\n};\n", "import { Hook } from \"phoenix_live_view\";\n\nconst SELECTOR = {\n  close: \"[data-type='ModernUI.ModalDialog.close']\",\n} as const;\n\nconst ATTRS = {\n  onCancel: \"data-dialog-on-cancel\",\n} as const;\n\nexport const ModalDialog: Hook = {\n  mounted() {\n    const $dialog = this.el as HTMLDialogElement;\n    const $close = $dialog.querySelector(SELECTOR.close) as HTMLButtonElement;\n\n    $close.addEventListener(\"click\", () => {\n      $dialog.close();\n    });\n\n    $dialog.addEventListener(\"close\", () => {\n      const onCancel = $dialog.getAttribute(ATTRS.onCancel);\n      if (onCancel != null) {\n        this.liveSocket.execJS(this.el, onCancel);\n      }\n    });\n\n    $dialog.showModal();\n  },\n\n  updated() {\n    const $dialog = this.el as HTMLDialogElement;\n    $dialog.showModal();\n  },\n};\n", "import { SmoothScroll } from \"./SmoothScroll\";\nimport { CharacterCounter } from \"./CharacterCounter\";\nimport { ModalDialog } from \"./ModalDialog\";\n\nexport default {\n  \"ModernUI.SmoothScroll\": SmoothScroll,\n  \"ModernUI.CharacterCounter\": CharacterCounter,\n  \"ModernUI.ModalDialog\": ModalDialog,\n};\n"],
  "mappings": ";AAEO,IAAM,eAAqB;AAAA,EAChC,UAAU;AACR,UAAM,WAAW,MAAM,KAAK,KAAK,GAAG,QAAQ;AAC5C,UAAM,SAAS,SAAS,KAAK,CAAC,OAAO,GAAG,QAAQ,UAAU,IAAI;AAE9D,QAAI,UAAU,MAAM;AAClB,aAAO,eAAe;AAAA,QACpB,UAAU;AAAA,QACV,OAAO;AAAA,QACP,QAAQ;AAAA,MACV,CAAC;AAAA,IACH;AAAA,EACF;AACF;;;ACbA,IAAM,WAAW;AAAA,EACf,OAAO;AAAA,EACP,SAAS;AACX;AAEA,IAAM,QAAQ;AAAA,EACZ,cAAc;AAChB;AAEA,IAAM,UAAU;AAAA,EACd,IAAI;AAAA,EACJ,SAAS;AAAA,EACT,QAAQ;AACV;AAEA,IAAM,YAAY;AAAA,EAChB,CAAC,IAAI,QAAQ,MAAM;AAAA,EACnB,CAAC,IAAI,QAAQ,OAAO;AAAA,EACpB,CAAC,IAAI,QAAQ,EAAE;AACjB;AAEA,IAAM,gBAAgB,CAAC,IAAiB,UAAkB;AACxD,aAAW,MAAM,OAAO,OAAO,OAAO,GAAG;AACvC,OAAG,UAAU,OAAO,EAAE;AAAA,EACxB;AAEA,aAAW,CAAC,WAAW,SAAS,KAAK,WAAW;AAC9C,QAAI,SAAS,WAAW;AACtB,SAAG,UAAU,IAAI,SAAS;AAC1B;AAAA,IACF;AAAA,EACF;AACF;AAEA,IAAM,gBAAgB,CAAC,OAAoB;AACzC,QAAM,SAAS,GAAG,cAAc,SAAS,KAAK;AAC9C,QAAM,WAAW,GAAG,cAAc,SAAS,OAAO;AAClD,MAAI,UAAU,QAAQ,YAAY,MAAM;AACtC;AAAA,EACF;AAEA,QAAM,YAAY,SAAS,GAAG,aAAa,MAAM,YAAY,KAAK,KAAK,EAAE;AACzE,MAAI,aAAa,GAAG;AAClB;AAAA,EACF;AAEA,QAAM,gBAAgB,OAAO,MAAM;AACnC,WAAS,cAAc,cAAc,SAAS;AAE9C,gBAAc,UAAW,gBAAgB,YAAa,GAAG;AAC3D;AAEO,IAAM,mBAAyB;AAAA,EACpC,UAAU;AACR,kBAAc,KAAK,EAAE;AAErB,UAAM,SAAS,MAAM;AACnB,oBAAc,KAAK,EAAE;AAAA,IACvB;AAEA,SAAK,GAAG,iBAAiB,SAAS,MAAM;AACxC,SAAK,GAAG,iBAAiB,SAAS,MAAM;AACxC,SAAK,GAAG,iBAAiB,SAAS,MAAM;AAEtC,iBAAW,QAAQ,GAAG;AAAA,IACxB,CAAC;AAAA,EACH;AAAA,EAEA,UAAU;AACR,kBAAc,KAAK,EAAE;AAAA,EACvB;AACF;;;ACvEA,IAAMA,YAAW;AAAA,EACf,OAAO;AACT;AAEA,IAAMC,SAAQ;AAAA,EACZ,UAAU;AACZ;AAEO,IAAM,cAAoB;AAAA,EAC/B,UAAU;AACR,UAAM,UAAU,KAAK;AACrB,UAAM,SAAS,QAAQ,cAAcD,UAAS,KAAK;AAEnD,WAAO,iBAAiB,SAAS,MAAM;AACrC,cAAQ,MAAM;AAAA,IAChB,CAAC;AAED,YAAQ,iBAAiB,SAAS,MAAM;AACtC,YAAM,WAAW,QAAQ,aAAaC,OAAM,QAAQ;AACpD,UAAI,YAAY,MAAM;AACpB,aAAK,WAAW,OAAO,KAAK,IAAI,QAAQ;AAAA,MAC1C;AAAA,IACF,CAAC;AAED,YAAQ,UAAU;AAAA,EACpB;AAAA,EAEA,UAAU;AACR,UAAM,UAAU,KAAK;AACrB,YAAQ,UAAU;AAAA,EACpB;AACF;;;AC7BA,IAAO,gBAAQ;AAAA,EACb,yBAAyB;AAAA,EACzB,6BAA6B;AAAA,EAC7B,wBAAwB;AAC1B;",
  "names": ["SELECTOR", "ATTRS"]
}
