{"version":3,"sources":["../src/modal-manager.ts"],"sourcesContent":["import { RefObject, useEffect, useState } from \"react\"\n\n/**\n * Proper state management for nested modals.\n * Simplified, but inspired by material-ui's ModalManager class.\n */\nclass ModalManager {\n  modals: Map<HTMLElement, number>\n  constructor() {\n    this.modals = new Map()\n  }\n\n  add(modal: HTMLElement) {\n    this.modals.set(modal, this.modals.size + 1)\n    return this.modals.size\n  }\n\n  remove(modal: HTMLElement) {\n    this.modals.delete(modal)\n  }\n\n  isTopModal(modal: HTMLElement | null) {\n    if (!modal) return false\n    return this.modals.get(modal) === this.modals.size\n  }\n}\n\nexport const modalManager = new ModalManager()\n\nexport function useModalManager(ref: RefObject<HTMLElement>, isOpen?: boolean) {\n  const [index, setIndex] = useState(0)\n\n  useEffect(() => {\n    const node = ref.current\n\n    if (!node) return\n\n    if (isOpen) {\n      const index = modalManager.add(node)\n      setIndex(index)\n    }\n\n    return () => {\n      modalManager.remove(node)\n      setIndex(0)\n    }\n  }, [isOpen, ref])\n\n  return index\n}\n"],"mappings":";;;;;;AAAA,SAAoB,WAAW,gBAAgB;AAM/C,IAAM,eAAN,MAAmB;AAAA,EAEjB,cAAc;AADd;AAEE,SAAK,SAAS,oBAAI,IAAI;AAAA,EACxB;AAAA,EAEA,IAAI,OAAoB;AACtB,SAAK,OAAO,IAAI,OAAO,KAAK,OAAO,OAAO,CAAC;AAC3C,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAEA,OAAO,OAAoB;AACzB,SAAK,OAAO,OAAO,KAAK;AAAA,EAC1B;AAAA,EAEA,WAAW,OAA2B;AACpC,QAAI,CAAC;AAAO,aAAO;AACnB,WAAO,KAAK,OAAO,IAAI,KAAK,MAAM,KAAK,OAAO;AAAA,EAChD;AACF;AAEO,IAAM,eAAe,IAAI,aAAa;AAEtC,SAAS,gBAAgB,KAA6B,QAAkB;AAC7E,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAS,CAAC;AAEpC,YAAU,MAAM;AACd,UAAM,OAAO,IAAI;AAEjB,QAAI,CAAC;AAAM;AAEX,QAAI,QAAQ;AACV,YAAMA,SAAQ,aAAa,IAAI,IAAI;AACnC,eAASA,MAAK;AAAA,IAChB;AAEA,WAAO,MAAM;AACX,mBAAa,OAAO,IAAI;AACxB,eAAS,CAAC;AAAA,IACZ;AAAA,EACF,GAAG,CAAC,QAAQ,GAAG,CAAC;AAEhB,SAAO;AACT;","names":["index"]}