{"version":3,"file":"profissoes-detalhes.min.js","mappings":"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","sources":["webpack://configuracao/./js/componentes/alertaVagas/templatesAlertaVaga.js","webpack://configuracao/./js/localizacao/global/global.js","webpack://configuracao/./js/localizacao/profissoes-detalhes/profissoes-detalhes.js","webpack://configuracao/./js/profissoes-detalhes.js","webpack://configuracao/./js/localizacao/alertaVaga/alertaVaga.js","webpack://configuracao/./js/utilidades/alertaVaga.js","webpack://configuracao/./js/localizacao/eventoBuscarVagaRedirect/eventoBuscarVagaRedirect.js","webpack://configuracao/./js/utilidades/eventoBuscarVagaRedirect.js","webpack://configuracao/./js/utilidades/getFetch.js","webpack://configuracao/./js/utilidades/isNullOrEmpty.js","webpack://configuracao/./js/utilidades/loadFullPage.js","webpack://configuracao/./js/utilidades/obterCookie.js","webpack://configuracao/./js/utilidades/obterDispositivo.js","webpack://configuracao/./js/utilidades/obterOrigem.js","webpack://configuracao/./js/utilidades/obterQueryString.js","webpack://configuracao/./js/utilidades/postFetch.js","webpack://configuracao/./js/utilidades/salvarCookie.js","webpack://configuracao/./js/utilidades/toastErroCarregar.js","webpack://configuracao/./js/utilidades/toastSucesso.js","webpack://configuracao/./js/utilidades/trackEventos.js","webpack://configuracao/./js/utilidades/uuid.js","webpack://configuracao/./js/utilidades/validarResultado.js","webpack://configuracao/./node_modules/just-validate/dist/just-validate.es.js","webpack://configuracao/./node_modules/notiflix/build/notiflix-confirm-aio.js"],"sourcesContent":["import i18next from \"i18next\";\r\n\r\nexport function templateBtnAlertaVagas(data, cargo, tipoPaginaID, localidadesSeparadas = \"\"){\r\n\r\n    let btnAlertaVagas = \"\";\r\n\r\n    if(data.exibirAlertaVagas){\r\n\r\n        if(data.possuiAlertaVagas){\r\n            btnAlertaVagas = `\r\n            <button class=\"btn btn-outline-primary d-inline botao-alerta\" id=\"botao-alerta\" data-vaga-id=\"${tipoPaginaID}\" data-alerta-id=\"${data.possuiAlertaVagas.ID}\" data-profissao-id=\"${tipoPaginaID}\" data-cargo=\"${cargo}\" data-localidade=\"${localidadesSeparadas}\">\r\n            <i class=\"bi bi-gear\"></i>  ${i18next.t('AlertaVagasBtnEditar')}\r\n            </button>\r\n            `;\r\n        }\r\n\r\n        else{\r\n            btnAlertaVagas = `\r\n            <button class=\"btn btn-outline-primary d-inline botao-alerta\" id=\"botao-alerta\" data-vaga-id=\"${tipoPaginaID}\" data-profissao-id=\"${tipoPaginaID}\" data-localidade=\"${localidadesSeparadas}\" data-cargo=\"${cargo}\">\r\n            <i class=\"bi bi-bell\"></i>  ${i18next.t('AlertaVagasBtnAtivar')}</button>\r\n            `;\r\n        }\r\n    }\r\n\r\n    return btnAlertaVagas;\r\n}\r\n\r\n\r\nexport function templateCardAlertaVagas (data, cargo, tipoPaginaID, localidadesSeparadas = \"\", localidadesSeparadasVirgula = \"\") {\r\n        \r\n    let btnAlertaVagas = templateBtnAlertaVagas(data, cargo,tipoPaginaID,localidadesSeparadas);\r\n\r\n    const template = `\r\n        <div class=\"border-0 d-flex flex-row align-items-center justify-content-between\" id=\"botao-wrapper-alerta\">\r\n            <div class=\"${data.exibirAlertaVagas ?  \"col-8\" : \"col-12\"}\">\r\n                <h5 class=\"m-0\"><b>${!data.exibirAlertaVagas ?  i18next.t('AlertaVagasEntreCrieText') : (data.possuiAlertaVagas ? i18next.t('AlertaVagasEditarText') : i18next.t('AlertaVagasConfigurarAlertaText'))}</b> <b>${cargo}</b></h5>\r\n                <small>${cargo} ${i18next.t('AlertaVagasEm')}\r\n                    ${localidadesSeparadasVirgula}\r\n                </small>\r\n            </div>\r\n            ${btnAlertaVagas}\r\n        </div>\r\n    `;\r\n\r\n    return template;\r\n};","import i18next from 'i18next';import resource_0 from \"./global.ptbr.json\" assert { type: 'JSON' };import resource_1 from \"./global.es.json\" assert { type: 'JSON' };import resource_2 from \"./global.en.json\" assert { type: 'JSON' };const cultura = CULTURE_EMPREGARE.replace('-', '');export const inicializarInternacionalizacao = () => {if (!i18next.isInitialized) {i18next.init({ lng:cultura, debug:true, defaultNS:'translation', resources: {}, fallbackLng: (code) => [ code.slice(0,2), 'ptbr' ]});}i18next.addResources('ptbr', 'translation', resource_0);i18next.addResources('es', 'translation', resource_1);i18next.addResources('en', 'translation', resource_2);}","import i18next from 'i18next';import resource_0 from \"./profissoes-detalhes.ptbr.json\" assert { type: 'JSON' };import resource_1 from \"./profissoes-detalhes.es.json\" assert { type: 'JSON' };import resource_2 from \"./profissoes-detalhes.en.json\" assert { type: 'JSON' };import { inicializarInternacionalizacao as inicializarGlobal } from '../global/global';const cultura = CULTURE_EMPREGARE.replace('-', '');export const inicializarInternacionalizacao = () => {inicializarGlobal();if (!i18next.isInitialized) {i18next.init({ lng:cultura, debug:true, defaultNS:'translation', resources: {}, fallbackLng: (code) => [ code.slice(0,2), 'ptbr' ]});}i18next.addResources('ptbr', 'translation', resource_0);i18next.addResources('es', 'translation', resource_1);i18next.addResources('en', 'translation', resource_2);}","import { obterQueryString } from './utilidades/obterQueryString';\r\nimport { obterOrigem } from './utilidades/obterOrigem';\r\nimport { obterDispositivo } from './utilidades/obterDispositivo';\r\nimport { obterCookie } from './utilidades/obterCookie';\r\nimport { isNullOrEmpty } from './utilidades/isNullOrEmpty';\r\nimport { salvarCookie } from './utilidades/salvarCookie';\r\nimport { addTrack } from './utilidades/trackEventos';\r\nimport Splide, { CLASS_TRACK } from '@splidejs/splide';\r\nimport { getFetch } from \"./utilidades/getFetch\";\r\nimport { AlertaVaga } from './utilidades/alertaVaga';\r\nimport { templateBtnAlertaVagas } from './componentes/alertaVagas/templatesAlertaVaga';\r\nimport i18next from 'i18next';\r\nimport { inicializarInternacionalizacao } from './localizacao/profissoes-detalhes/profissoes-detalhes';\r\n\r\nconst page = {\r\n  Templates:{\r\n    templateVagasSkeletonLoading(){\r\n      const html = [];\r\n\r\n      for (let i = 0; i < 10; i++) {\r\n        html.push(`\r\n          <li class=\"splide__slide card-vaga\">\r\n            <div class=\"py-3 px-3\">\r\n                <div class=\"card shadow border rounded-3 mb-3 card-loading\">\r\n                    <div class=\"card-body\">\r\n                        <div class=\"row\">\r\n                            <div class=\"col-2 col-lg-1\">\r\n                                <div class=\"rounded card-loading-image\"></div>\r\n                            </div>\r\n                            <div class=\"col-1\"></div>\r\n                            <div class=\"col-9 d-flex align-items-center\">\r\n                                <div class=\"card-loading-bar py-3\" style=\"width: 95%\"></div>\r\n                            </div>\r\n                            <div class=\"col-10 col-lg-11\">\r\n                                <div class=\"card-loading-bar py-3 mt-3 mb-5\" style=\"width: 75%\"></div>\r\n                                <div class=\"card-loading-bar py-1 mb-3 mt-5\" style=\"width: 75%\"></div>\r\n                                <div class=\"d-flex gap-3\">\r\n                                    <div class=\"card-loading-bar py-3 rounded-5\" style=\"width: 10em\"></div>\r\n                                    <div class=\"card-loading-bar py-3 rounded-5\" style=\"width: 10em\"></div>\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        </li>\r\n        `);\r\n      }\r\n\r\n      return html.join('');\r\n    },\r\n    templateVagas(vagas){\r\n      const html = [];\r\n      const sectionVagas = document.querySelector('#section-vagas');\r\n      const colSplide = sectionVagas.querySelector('.col-vagas-splide');\r\n      const colAlert = sectionVagas.querySelector('.col-vagas-alert');\r\n\r\n      if(vagas.length > 0){\r\n        colSplide.classList.remove('d-none');\r\n        colAlert.classList.add('d-none');\r\n\r\n        vagas.forEach(vaga => {\r\n          const stringCidades = vaga.cidades.length == 1 ?  vaga.cidades[0] : vaga.cidades[0]  + \".  E outras...\";\r\n\r\n          let template = `\r\n          <li class=\"splide__slide card-vaga\">\r\n            <div class=\"card-vagas bg-white border rounded-3 py-3 px-3 hover-info\">\r\n                <div class=\"d-flex gap-4 mb-4 align-items-center empresa-container\">\r\n                    <div class=\"img-responsiva rounded\">\r\n                      <img src=\"${vaga.logoThumb}\" alt=\"Logo da Empresa\" title=\"Logo da Empresa\">\r\n                    </div>\r\n                    <p class=\"mb-0 fs-6 nome-da-empresa\">${vaga.empresa}</p>\r\n                </div>\r\n                <div class=\"d-flex flex-column gap-3 justify-content-center\">\r\n                    <h5 class=\"fw-bold mb-2 vaga-title\">${vaga.titulo}</h5>\r\n                    <p class=\"cidades-text mb-0\"><span class=\"badge bg-span-card-vaga rounded-5\"><i class=\"bi bi-geo-alt fs-6\"></i></span> ${stringCidades}</p>\r\n                    <div class=\"\">\r\n                        <ul class=\"list-group list-group-horizontal flex-wrap ajuste-tamanho-fonte-mobile-list-group\">`;\r\n\r\n          if(vaga.trabalhoRemoto != \"NaoInformado\")\r\n          {\r\n            template += ` \r\n            <li class=\"list-group-item border-0 bg-transparent ps-0 ajuste-badge-modalidade-trabalho\">\r\n              <span class=\"badge rounded-4 text-cinza-medio bg-cinza-claro fw-normal px-3 py-1\">\r\n                  <small class=\"d-flex align-items-center gap-2\">\r\n                      <i class=\"bi bi-briefcase-fill fs-5\"></i>\r\n                      <span class=\"texto-badge\">${vaga.trabalhoRemotoTexto}</span>\r\n                  </small>\r\n              </span>\r\n            </li>`;\r\n          }\r\n\r\n          if(!isNullOrEmpty(vaga.salario))\r\n          {\r\n            template += ` \r\n            <li class=\"list-group-item border-0 bg-transparent ps-0 pe-0\">\r\n              <span class=\"badge rounded-4 text-cinza-medio bg-cinza-claro fw-normal px-3 py-1\">\r\n                  <small class=\"d-flex align-items-center gap-2\">\r\n                      <i class=\"bi bi-cash fs-5\"></i>\r\n                      <span class=\"texto-badge\"> ${vaga.salario}</span>\r\n                  </small>\r\n              </span>\r\n            </li>`;\r\n          }\r\n\r\n          template += ` \r\n                    </ul>\r\n                  </div>\r\n                </div>\r\n                <a href=\"/${vaga.url}\" class=\"stretched-link\"></a>\r\n            </div>\r\n          </li>`;\r\n\r\n          html.push(template);\r\n        });\r\n\r\n        if(vagas.length >= 20){\r\n          const verMais = `\r\n          <li class=\"splide__slide card-vaga\">\r\n            <div class=\"card-vagas bg-white border rounded-4 d-flex align-items-center justify-content-center hover-info h-100\">\r\n              <div class=\"ver-mais-vagas\">\r\n                <a href=\"/pt-br/vagas\" target=\"_blank\" type=\"button\" class=\"btn-mais-vagas stretched-link link-underline\">  Mais Vagas...</a>\r\n              </div>\r\n            </div>\r\n          </li>\r\n          `;\r\n          html.push(verMais);\r\n        }\r\n      }\r\n      else{\r\n        colSplide.classList.add('d-none');\r\n        colAlert.classList.remove('d-none');\r\n      }\r\n        \r\n\r\n        return html.join('');\r\n    },\r\n    templateFiltroOptions(dados,tipoDadosNome){\r\n      const html = [];\r\n\r\n      if(dados.length > 0){\r\n        let count = 0;\r\n        dados.forEach(dado => {\r\n          html.push(`\r\n          <div class=\"col gy-2\">\r\n          <div class=\"form-check\">\r\n          <input class=\"form-check-input dropdown-check-filtra\" type=\"checkbox\" name=\"${tipoDadosNome}\" value=\"${dado.id}\" id=\"${tipoDadosNome}_${count}\">\r\n          <label style=\"overflow-wrap: anywhere;\" class=\"form-check-label\" for=\"${tipoDadosNome}_${count}\">\r\n          ${dado.nome}\r\n          </label>\r\n          </div>\r\n          </div>\r\n          `);\r\n          count++;\r\n        });\r\n      }\r\n      else{\r\n        html.push(`\r\n          <div class=\"alert alert-info flex-fill\" role=\"alert\">\r\n            <div class=\"d-flex w-100 gap-2 flex-row justify-content-center align-items-center h-100\">\r\n                <i class=\"bi bi-info-circle-fill\"></i>\r\n                <span>Nenhum filtro encontrado para esse termo</span>\r\n            </div>\r\n        </div>\r\n        `);\r\n      }\r\n\r\n      return html.join(\"\");\r\n    },\r\n  },\r\n  Helpers:{\r\n    scrollToCustom(targetElement,offset){\r\n    \r\n      const parentElement = targetElement.offsetParent;\r\n      const targetOffsetTop = targetElement.offsetTop + parentElement.offsetTop;\r\n\r\n      window.scrollTo({\r\n        top: targetOffsetTop - offset,\r\n        behavior: 'smooth'\r\n      });\r\n    },\r\n    truncateString(string, maxLength){\r\n      if (string.length > maxLength) \r\n        return string.substring(0, maxLength - 3) + \"...\";\r\n      else \r\n        return string;\r\n    },\r\n    createStringFiltroFromObject(obj){\r\n      return Object.keys(obj).map(key => `&${key}=${obj[key]}`).join('');\r\n    },\r\n  },\r\n  Splides: {\r\n      splideTabs() {\r\n        const splideOptions = {\r\n          start: 0,\r\n          perPage: 3,\r\n          focus: \"start\",\r\n          trimSpace: true,\r\n          arrows: false,\r\n          pagination: false,\r\n          isNavigation: true,\r\n          autoWidth: true,\r\n          gap: \"2rem\"\r\n        };\r\n  \r\n        const splidesTabs = document.getElementById(\"tabs\");\r\n        let splide = new Splide(`#${splidesTabs.id}`, splideOptions);\r\n        splide.mount();\r\n        return splide;\r\n      },\r\n      splideCursos() {\r\n        const splideOptions = {\r\n          start: 0,\r\n          perPage: 3,\r\n          focus: \"start\",\r\n          trimSpace: true,\r\n          arrows: true,\r\n          pagination: false,\r\n          autoWidth: true,\r\n          omitEnd: true,\r\n          gap: \"2rem\"\r\n        };\r\n  \r\n        const splidesCursos = document.getElementById(\"cursos-splide\");\r\n        \r\n        if(!splidesCursos)\r\n          return\r\n        let splide = new Splide(`#${splidesCursos.id}`, splideOptions);\r\n        splide.mount();\r\n\r\n        splide.on( 'move', function () {\r\n          \r\n            const btnsVerMenos = splidesCursos.querySelectorAll('.btn-ver-menos-curso');\r\n            btnsVerMenos.forEach(btn => {\r\n                if(!btn.classList.contains('d-none')){\r\n                  btn.click();\r\n                }\r\n            });\r\n        } );\r\n\r\n      },\r\n      splideVagas() {\r\n        const splideOptions = {\r\n          start: 0,\r\n          perPage: 1,\r\n          focus: \"start\",\r\n          trimSpace: true,\r\n          arrows: true,\r\n          pagination: false,\r\n          autoWidth: true,\r\n          omitEnd: true,\r\n          gap: \"2rem\"\r\n        };\r\n  \r\n        const splidesVagas = document.getElementById(\"vagas-splide\");\r\n        let splide = new Splide(`#${splidesVagas.id}`, splideOptions);\r\n        splide.mount();\r\n      },\r\n      init() {\r\n        // this.splideTabs();\r\n        // this.splideVagas();\r\n        this.splideCursos();\r\n      },\r\n  },\r\n  Navegacao:{\r\n    scrollComOffset(element){\r\n      const targetId = element.getAttribute('href').substring(1);\r\n      const targetElement = document.getElementById(targetId);\r\n\r\n      let offset = 100;\r\n\r\n      if(targetId == \"accordion-id\")\r\n        offset = 130;\r\n\r\n      page.Helpers.scrollToCustom(targetElement, offset)\r\n    },\r\n    moveParaSectionComOffsetAoClicar(){\r\n      const navTabs = document.querySelector(\"#header-navbar\").querySelector(\".nav-tabs\");\r\n      const btnsNav = navTabs.querySelectorAll('.nav-link');\r\n\r\n      btnsNav.forEach(btn => {\r\n        btn.addEventListener('click', (e) => {\r\n          e.preventDefault();\r\n          this.scrollComOffset(btn);\r\n        });\r\n      });\r\n\r\n      const linksNavegacao = document.querySelectorAll(\".link-navegacao\");\r\n\r\n      linksNavegacao.forEach(btn => {\r\n        btn.addEventListener('click', (e) => {\r\n          e.preventDefault();\r\n          this.scrollComOffset(btn);\r\n        });\r\n      });\r\n    },\r\n    ajustaSombraHeaders(){\r\n      const headersPrincipais = document.querySelectorAll(\".header-empregare\");\r\n      const headerNavegacao = document.querySelector(\"#nav-sticker\");\r\n      const heroSection = document.querySelector(\"#hero-section\");\r\n\r\n      function ajustarSombras(Ajustar){\r\n          if(Ajustar){\r\n            headersPrincipais.forEach(headerPrincipal => {\r\n              headerPrincipal.classList.remove(\"sombra-1\");\r\n            });\r\n\r\n            headerNavegacao.classList.add(\"sombra-1\");\r\n          }\r\n\r\n          else{\r\n            headersPrincipais.forEach(headerPrincipal => {\r\n              headerPrincipal.classList.add(\"sombra-1\");\r\n            });\r\n\r\n            headerNavegacao.classList.remove(\"sombra-1\");\r\n          }\r\n      }\r\n\r\n      const addObserver = function(element) {\r\n        const observer = new IntersectionObserver(\r\n          (entries) => {\r\n            entries.forEach((entry) => {\r\n              if (entry.isIntersecting) \r\n                ajustarSombras(false);\r\n              else \r\n                ajustarSombras(true);\r\n            });\r\n          },\r\n          { root: null, threshold: 0.1, rootMargin: `0px` }\r\n        );\r\n\r\n        observer.observe(element);\r\n      };\r\n\r\n      addObserver(heroSection);\r\n    },\r\n    ativaTabAoEntrarNaSection(){\r\n      const headerNav = document.querySelector(\"#header-navbar\");\r\n      const pagina = document.querySelector(\"#page-wraper\");\r\n      const tabsNavegacao = headerNav.querySelector(\"#tabs\").querySelectorAll(\".nav-link\");\r\n      const splide = page.Splides.splideTabs();\r\n\r\n      const scrollSpy = new bootstrap.ScrollSpy(pagina, {\r\n        target: headerNav,\r\n        // threshold: [0.4,1],\r\n        // rootMargin: \"-30px\"\r\n      });\r\n\r\n      document.body.addEventListener('activate.bs.scrollspy', (e) => {\r\n\r\n        const activateTab = document.querySelector(\".nav-link.active\");\r\n        let index = 0;\r\n\r\n        for (let i = 0; i < tabsNavegacao.length; i++) {\r\n          if(tabsNavegacao[i] == activateTab)\r\n            index = i;\r\n        }\r\n\r\n        splide.go(index);\r\n      });\r\n      \r\n\r\n    },\r\n    init(){\r\n      this.moveParaSectionComOffsetAoClicar();\r\n      this.ajustaSombraHeaders();\r\n      this.ativaTabAoEntrarNaSection();\r\n    }\r\n  },\r\n  Vagas:{\r\n    regexFiltros: /(?:[?&])([^&=]+)(?:=([^&]*))/g,\r\n    async carregaVagas(filtrosAdicionais = \"\"){\r\n      const sectionVagas = document.querySelector('#section-vagas');\r\n      const splideVagas = sectionVagas.querySelector(\"#vagas-splide\");\r\n      const splideList = splideVagas.querySelector(\"ul.splide__list\");\r\n      const profissaoInput = sectionVagas.querySelector('#nome-profissao');\r\n      const skeletonCol = sectionVagas.querySelector('.skeleton-loading-col');\r\n\r\n      const nomeProfissao =  profissaoInput.value;\r\n      const quantidadeVagas = 20;\r\n\r\n      let filtros = `pagina=1&itensPagina=${quantidadeVagas}&query=` + nomeProfissao + filtrosAdicionais;\r\n\r\n      const url = URL_API + 'vagas/buscar-novo?' + filtros.replace('?', '&');\r\n\r\n      const callbackSucesso = (resultados) => {\r\n          skeletonCol.classList.add('d-none');\r\n          splideVagas.classList.remove('d-none');\r\n          const vagas = resultados.model.dados;\r\n\r\n          splideList.innerHTML = page.Templates.templateVagas(vagas);\r\n\r\n          const btnMaisVagas = splideList.querySelector('.btn-mais-vagas');\r\n\r\n          if(btnMaisVagas)\r\n            btnMaisVagas.addEventListener('mousedown', (e) => {e.preventDefault(); this.eventBtnMaisVagas(e);});\r\n\r\n          this.configuraFiltros(resultados.model.facets);\r\n\r\n          page.Splides.splideVagas();\r\n      };\r\n\r\n      splideList.innerHTML = page.Templates.templateVagasSkeletonLoading();\r\n\r\n      await getFetch(url, callbackSucesso);\r\n    },\r\n    configuraFiltros(facet){\r\n      const sectionVagas = document.querySelector(\"#section-vagas\");\r\n      const filtroStringInput = sectionVagas.querySelector('#stringFiltro');\r\n\r\n        // Gera uma array dos Filtros pela String\r\n        const filtroString = filtroStringInput.value;\r\n\r\n        const valores = [];\r\n  \r\n        filtroString.replace(this.regexFiltros, function (_, chave, valor) {\r\n            const obj= {};\r\n            obj[chave] = valor;\r\n            valores.push(obj);\r\n        });\r\n\r\n      // Adiciona Filtros Disponives\r\n      Object.keys(facet).forEach(key => {\r\n          let filterName = key;\r\n\r\n          // Nome do filtro esta diferente no objeto facets doque e realmente no filtro de vagas em si\r\n          if(key == 'uf') \r\n            filterName = 'estado';\r\n\r\n          if(key == 'remoto') \r\n            filterName = 'modalidade';\r\n\r\n          // Compara os filtros na string de filtros com os redebidos pelo facets\r\n          if(valores && valores.length > 0){\r\n            let estaPresente = true;\r\n\r\n            valores.forEach(valor => {\r\n              const keyValor = Object.keys(valor)[0];\r\n\r\n              if(keyValor == filterName){\r\n                for (let i = 0; i < facet[key].length; i++) {\r\n                  if(facet[key][i].id == valor[keyValor]){\r\n                    estaPresente = true;\r\n                    break;\r\n                  }\r\n                  else{\r\n                    estaPresente = false;\r\n                  }\r\n                }\r\n                // Remove o filtro da string se ele nao esta mais presente no facets\r\n                if(!estaPresente){\r\n                  const removeObj = {};\r\n                  removeObj[keyValor] = valor[keyValor];\r\n                  \r\n                  const stringToRemove = page.Helpers.createStringFiltroFromObject(removeObj);\r\n\r\n                  if(filtroStringInput.value.includes(stringToRemove)){\r\n                    console.log('stringToRemove', stringToRemove);\r\n                    filtroStringInput.value = filtroStringInput.value.replace(stringToRemove, '');\r\n                  }\r\n                }\r\n              }\r\n            });\r\n          }\r\n          \r\n          const dropdownMenu = sectionVagas.querySelector(`.filtro-${filterName}`);\r\n          const offCanvasFilter = sectionVagas.querySelector(`.filtro-${filterName}-offcanvas`);\r\n          \r\n          if(dropdownMenu){\r\n            dropdownMenu.innerHTML = page.Templates.templateFiltroOptions(facet[key], filterName);\r\n            this.fixLabelClosingDropdownMenu(dropdownMenu);\r\n          }\r\n\r\n          if(offCanvasFilter)\r\n            offCanvasFilter.innerHTML = page.Templates.templateFiltroOptions(facet[key], filterName);\r\n      });\r\n\r\n      this.addQuantidadeFiltrosStyleOffcanvas();\r\n      this.addQuantidadeFiltrosStyleDesktop();\r\n\r\n      // Marca os CheckBoxs dos Filtros Ativos\r\n      const checkboxInputs = sectionVagas.querySelectorAll('.dropdown-check-filtra');\r\n\r\n      valores.forEach(valor => {\r\n        const key = Object.keys(valor)[0];\r\n        checkboxInputs.forEach(checkbox => {\r\n            if(checkbox.value == valor[key])\r\n              checkbox.checked = true;\r\n        });\r\n      });\r\n\r\n    },\r\n    fixLabelClosingDropdownMenu(dropdownMenu){\r\n      const labels = dropdownMenu.querySelectorAll('.form-check-label');\r\n\r\n      labels.forEach(label => {\r\n        label.addEventListener('click', (e) => {\r\n          e.preventDefault();\r\n\r\n          const checkbox = label.parentElement.querySelector('.form-check-input');\r\n\r\n          if(checkbox.id == label.getAttribute('for'))\r\n            checkbox.checked = !checkbox.checked;\r\n\r\n        });\r\n      });\r\n    },\r\n    addQuantidadeFiltrosStyleDesktop(){\r\n      const verificaQuantidadeFiltros = (btnTarget, quantidadeFiltrosG) =>{\r\n        const btnDropdownCount = btnTarget.querySelector(\".dropdown-filtros-count\");\r\n\r\n        if(quantidadeFiltrosG >= 1){\r\n          btnTarget.classList.add(\"active\");\r\n          btnDropdownCount.innerHTML = `(${quantidadeFiltrosG})`;\r\n        }\r\n\r\n        if(quantidadeFiltrosG == 0){\r\n          btnTarget.classList.remove(\"active\");\r\n          btnDropdownCount.innerHTML = '';\r\n        }\r\n      };\r\n\r\n      const sectionVagas = document.querySelector('#section-vagas');\r\n      const containerFormVagas = sectionVagas.querySelector('#form-visualizar-vagas');\r\n      const btnsFiltrosDesktop = containerFormVagas.querySelectorAll('.dropdown-toggle');\r\n      const filtroString = sectionVagas.querySelector('#stringFiltro').value;\r\n\r\n      const filtros = [];\r\n\r\n      filtroString.replace(this.regexFiltros, function (_, chave, valor) {\r\n          const obj = {};\r\n          obj[chave] = valor;\r\n          filtros.push(obj);\r\n      });\r\n\r\n      btnsFiltrosDesktop.forEach(btnFiltro => {\r\n        let quantidadeFiltrosTotal = 0;\r\n\r\n        filtros.forEach(filtro => {\r\n          if(btnFiltro.classList.contains(`dropdown-${Object.keys(filtro)[0]}`))\r\n            quantidadeFiltrosTotal++;\r\n        });\r\n\r\n        verificaQuantidadeFiltros(btnFiltro, quantidadeFiltrosTotal);\r\n        \r\n        btnFiltro.closest(\".dropdown\").querySelector('.dropdown-menu').classList.remove(\"show\");\r\n      });\r\n    },\r\n    addQuantidadeFiltrosStyleOffcanvas(){\r\n      const sectionVagas = document.querySelector('#section-vagas');\r\n      const offcanvas = document.querySelector('#offcanvasTodosOsFiltros');\r\n      const btn = sectionVagas.querySelector(\".btn-todos-filtros\");\r\n      const quantideFiltros = btn.querySelector('.text-quantidade-filtros-selecionados');\r\n      const filtroString = sectionVagas.querySelector('#stringFiltro').value;\r\n\r\n\r\n      const mySet = new Set();\r\n\r\n      filtroString.replace(this.regexFiltros, function (_, chave, valor) {\r\n        mySet.add(chave);\r\n      });\r\n\r\n      quantideFiltros.textContent = mySet.size;\r\n    \r\n      \r\n      const offcanvasFiltros = bootstrap.Offcanvas.getInstance(offcanvas);\r\n\r\n      if(offcanvasFiltros)\r\n        offcanvasFiltros.hide();\r\n    },\r\n    redirecionarParaMaisVagas(filtroAdicional = \"\"){\r\n      const nomeProfissao =  document.querySelector('#section-vagas').querySelector('#nome-profissao').value;\r\n\r\n      window.location.href = \"/pt-br/vagas?query=\" + nomeProfissao + filtroAdicional;\r\n    },\r\n    eventBtnMaisVagas(e){\r\n      if(e.button === 1 || e.button === 0){\r\n        const filtroAdicional = document.querySelector(\"#section-vagas\").querySelector('#stringFiltro').value;\r\n        this.redirecionarParaMaisVagas(filtroAdicional);\r\n      }\r\n    },\r\n    addBtnsEvents(){\r\n      const sectionVagas = document.querySelector(\"#section-vagas\");\r\n      const btnsAplicarFiltros = sectionVagas.querySelectorAll(\".btn-aplicar-filtros\");\r\n      const btnsEliminarFiltros = sectionVagas.querySelectorAll(\".btn-eliminar-filtros\");\r\n      const btnsAplicarFiltrosOffCanvas = sectionVagas.querySelector(\".btn-aplicar-filtros-offcanvas\");\r\n      const btnsEliminarFiltrosOffCanvas = sectionVagas.querySelector(\".btn-eliminar-filtros-offcanvas\");\r\n      const btnMaisVagas = sectionVagas.querySelector(\".btn-mais-vagas\");\r\n      const filtroStringInput = sectionVagas.querySelector('#stringFiltro');\r\n\r\n      const removeTodosFiltrosCheckbox = (inputs) =>{\r\n        inputs.forEach(input => {\r\n            // unchecks all\r\n            input.checked = false;\r\n\r\n            const obj = {};\r\n            obj[input.name] = input.value;\r\n            \r\n            const filtroString = page.Helpers.createStringFiltroFromObject(obj);\r\n\r\n            if(filtroStringInput.value.includes(filtroString))\r\n              filtroStringInput.value = filtroStringInput.value.replace(filtroString,\"\");\r\n          });\r\n      };\r\n\r\n      const adicionaTodosFiltrosCheckbox = (inputs) =>{\r\n        inputs.forEach(input => {\r\n          if(!isNullOrEmpty(input.value)){\r\n            if(input.checked){\r\n              const obj = {};\r\n              obj[input.name] = input.value;\r\n\r\n              const filtroString =page.Helpers.createStringFiltroFromObject(obj);\r\n\r\n              if(!filtroStringInput.value.includes(filtroString))\r\n                filtroStringInput.value += filtroString;\r\n            }\r\n            else{\r\n              const obj = {};\r\n              obj[input.name] = input.value;\r\n\r\n              const filtroString = page.Helpers.createStringFiltroFromObject(obj);\r\n\r\n              if(filtroStringInput.value.includes(filtroString))\r\n                filtroStringInput.value = filtroStringInput.value.replace(filtroString, \"\");\r\n            }\r\n          }\r\n        });\r\n\r\n      };\r\n\r\n      btnsAplicarFiltros.forEach(btn => {\r\n        btn.addEventListener('click', (e)=>{\r\n          e.preventDefault();\r\n\r\n          const form = btn.closest('form');\r\n          const inputs = form.querySelectorAll('input');\r\n\r\n          adicionaTodosFiltrosCheckbox(inputs);\r\n          \r\n          this.carregaVagas(filtroStringInput.value);\r\n        });\r\n      });\r\n\r\n      btnsEliminarFiltros.forEach(btn => {\r\n        btn.addEventListener('click', (e)=>{\r\n          e.preventDefault();\r\n\r\n          const form = btn.closest('form');\r\n          const inputs = form.querySelectorAll('input');\r\n\r\n          removeTodosFiltrosCheckbox(inputs);\r\n\r\n          this.carregaVagas(filtroStringInput.value);\r\n        });\r\n      });\r\n      \r\n      btnsAplicarFiltrosOffCanvas.addEventListener('click', (e)=>{\r\n          e.preventDefault();\r\n          const formFilterOffcanvas = btnsAplicarFiltrosOffCanvas.closest('.offcanvas').querySelector('#formFilter');\r\n          const inputs = formFilterOffcanvas.querySelectorAll('input');\r\n          \r\n          adicionaTodosFiltrosCheckbox(inputs);\r\n\r\n          this.carregaVagas(filtroStringInput.value);\r\n      });\r\n\r\n      btnsEliminarFiltrosOffCanvas.addEventListener('click', (e)=>{\r\n          e.preventDefault();\r\n          const formFilterOffcanvas = btnsAplicarFiltrosOffCanvas.closest('.offcanvas').querySelector('#formFilter');\r\n          const inputs = formFilterOffcanvas.querySelectorAll('input');\r\n\r\n          removeTodosFiltrosCheckbox(inputs);\r\n\r\n          this.carregaVagas(filtroStringInput.value);\r\n      });\r\n\r\n      if(btnMaisVagas)\r\n        btnMaisVagas.addEventListener('mousedown', (e) => {e.preventDefault(); this.eventBtnMaisVagas(e);});\r\n    },\r\n    init(){\r\n      document.querySelectorAll(\".btn-fechar-dropdown\").forEach(btn => btn.addEventListener(\"click\", () => btn.closest(\".dropdown-menu\").classList.remove(\"show\")));\r\n      this.carregaVagas();\r\n      this.addBtnsEvents();\r\n    }\r\n  },\r\n  Accordion:{\r\n    configAccordion() {\r\n      const accordionSection = document.querySelector(\"#section-accordion\");\r\n      const accordionElement = accordionSection.querySelector(\".accordion-custom\");\r\n      const accordionTabs = accordionElement.querySelectorAll(\".accordion-tab\");\r\n      const accordionContents = accordionSection.querySelectorAll(\".accordion-content\");\r\n      const accordionCol = accordionSection.querySelector(\".accordion-col\");\r\n      const heighOriginalAccordionCol = accordionCol.offsetHeight;\r\n  \r\n      const ajustaEstilosAccordion = (tab) => {\r\n        const accordionTabContent = tab.closest('li').querySelector('.accordion-content');\r\n        const newHeight = accordionTabContent.offsetHeight < heighOriginalAccordionCol ? heighOriginalAccordionCol : accordionTabContent.offsetHeight;\r\n        \r\n        const cssText = `\r\n          #section-accordion .accordion-col {\r\n            height: ${newHeight}px;\r\n          }\r\n          @media (max-width: 767px) {\r\n            #section-accordion .accordion-tab.active .accordion-side-line:after {\r\n              height: ${accordionTabContent.offsetHeight + tab.offsetHeight + 20}px !important;\r\n            }\r\n          }\r\n        `;\r\n  \r\n        const styleTemp = document.querySelector('.style-temp');\r\n        if(styleTemp)\r\n            styleTemp.remove();\r\n        \r\n        const style = document.createElement('style');\r\n        style.classList.add('style-temp');\r\n        style.textContent = cssText;\r\n  \r\n        document.head.appendChild(style);\r\n      };\r\n  \r\n      accordionTabs.forEach(tab => {\r\n        if(tab.classList.contains(\"active\"))\r\n          ajustaEstilosAccordion(tab); \r\n  \r\n        tab.addEventListener(\"click\", ()=>{\r\n  \r\n          if(tab.classList.contains(\"active\"))\r\n            return;\r\n  \r\n          accordionTabs.forEach(tab => {\r\n            tab.classList.remove(\"active\");\r\n          });\r\n  \r\n          tab.classList.add(\"active\");\r\n  \r\n          accordionContents.forEach(content => {\r\n              content.classList.add(\"d-none\");\r\n              const target = content.getAttribute(\"tab-target\");\r\n  \r\n              if(target == tab.id){\r\n                content.classList.remove(\"d-none\");\r\n              }\r\n          });\r\n  \r\n          ajustaEstilosAccordion(tab);\r\n  \r\n          // SETTING Scroll WHEN OPEN\r\n          const offset = 130;\r\n          \r\n          if(window.innerWidth < 768)\r\n            page.Helpers.scrollToCustom(tab, offset)\r\n          else\r\n            page.Helpers.scrollToCustom(accordionCol, offset + 20)\r\n  \r\n          // Ensure correct Navtab is active when focus accordion tab\r\n          const navTabs = document.querySelector(\"#header-navbar\").querySelector(\".nav-tabs\");\r\n          const btnsNav = navTabs.querySelectorAll('.nav-link');\r\n  \r\n          btnsNav.forEach(nav => {\r\n            nav.classList.remove('active');\r\n          });\r\n  \r\n          navTabs.querySelector('#accordion-tab').classList.add('active');\r\n  \r\n        });\r\n      });\r\n\r\n      window.addEventListener('resize', () => {\r\n        setTimeout(() => {\r\n          const tab = accordionElement.querySelector('.accordion-tab.active');\r\n          ajustaEstilosAccordion(tab); \r\n        }, 500);\r\n        \r\n      });\r\n    },\r\n    abrirTabAccordionOnScrollMobile(){\r\n      const accordionSection = document.querySelector(\"#section-accordion\");\r\n      const headerNav = document.querySelector(\"#header-navbar\");\r\n      const accordionElement = accordionSection.querySelector(\".accordion-custom\");\r\n      const accordionTabs = accordionElement.querySelectorAll(\".accordion-tab\");\r\n\r\n      const abrirTabOnScroll = (accordionTab) => {\r\n        const observer = new IntersectionObserver(\r\n          (entries) => {\r\n            entries.forEach((entry) => {\r\n              if (entry.isIntersecting) {\r\n                console.log('Visivel');\r\n                \r\n                if (entry.boundingClientRect.y < entry.rootBounds.y) {\r\n                  //Elemento está acima do observador\r\n                  console.log('acima' , accordionTab);\r\n                  \r\n                } else {\r\n                  //Elemento está abaixo do observador\r\n                  console.log('abaixo' , accordionTab);\r\n                  // accordionTabs.forEach(tab => {\r\n                  //   tab.classList.remove('active');\r\n                  //   tab.closest('li').querySelector('.accordion-content').classList.add('d-none');\r\n                  // });\r\n                  // accordionTab.querySelector('.accordion-tab').classList.add('active');\r\n                  // accordionTab.querySelector('.accordion-content').classList.remove('d-none');\r\n\r\n                  // accordionTab.click();\r\n\r\n\r\n                }\r\n              } else {\r\n                // Elemento de destino não está visível\r\n\r\n                console.log('Nao visivel' , accordionTab);\r\n              }\r\n            });\r\n          },\r\n          { root: null, threshold: 1, rootMargin: `0px` }\r\n        );\r\n\r\n        observer.observe(accordionTab);\r\n        return observer;\r\n      };\r\n\r\n      if(window.innerWidth < 768){\r\n        accordionTabs.forEach(accordionTab => {\r\n          abrirTabOnScroll(accordionTab.closest('li'));\r\n        });\r\n      }\r\n\r\n    },\r\n    init(){\r\n      this.configAccordion();\r\n      // this.abrirTabAccordionOnScrollMobile();\r\n    }\r\n  },\r\n  adicionarVerMaisCursos(){\r\n    const cursosSection = document.querySelector(\"#section-cursos\");\r\n\r\n    if(!cursosSection)\r\n      return;\r\n\r\n    const cardsCursos = cursosSection.querySelectorAll(\".card-cursos\"); \r\n\r\n    cardsCursos.forEach(cardCurso => {\r\n        const textos = cardCurso.querySelectorAll('.select-texto-cursos');\r\n        const btnVerMais = cardCurso.querySelector('.btn-ver-mais-curso');\r\n        const btnVerMenos = cardCurso.querySelector('.btn-ver-menos-curso');\r\n        let conteudoTodosTextos = '';\r\n\r\n        textos.forEach((texto) => {\r\n          conteudoTodosTextos += texto.textContent + \"<br>\";\r\n          texto.remove();\r\n        });\r\n\r\n        cardCurso.querySelector('h6').insertAdjacentHTML('afterend', `<p class=\"texto-curso-card\"> ${conteudoTodosTextos} </p>`);\r\n\r\n        const textoCard = cardCurso.querySelector('.texto-curso-card');\r\n\r\n        if (textoCard.textContent.length > 274)\r\n        {\r\n          const textoCompleto = textoCard.textContent;\r\n          const textoTruncado = this.Helpers.truncateString(textoCard.textContent, 274);\r\n          textoCard.textContent = textoTruncado;\r\n\r\n          btnVerMais.classList.remove(\"d-none\");\r\n\r\n          btnVerMais.addEventListener('click', (e) => {\r\n            e.preventDefault();\r\n            btnVerMais.classList.add(\"d-none\");\r\n            btnVerMenos.classList.remove(\"d-none\");\r\n            cardCurso.style.cssText = \"height:auto;\";\r\n            textoCard.textContent = textoCompleto;\r\n\r\n          });\r\n\r\n          btnVerMenos.addEventListener('click', (e) => {\r\n            e.preventDefault();\r\n            btnVerMenos.classList.add(\"d-none\");\r\n            btnVerMais.classList.remove(\"d-none\");\r\n            cardCurso.style.cssText = \"\";\r\n            textoCard.textContent = textoTruncado;\r\n          });\r\n        }\r\n    });\r\n  },\r\n  profissaoDetalhes(){\r\n\r\n    const profissaoID = document.getElementById('ProfissaoID').value;     \r\n\r\n    const _insights = async function () {        \r\n        let formData = new FormData();\r\n        formData.append('ProfissaoID', profissaoID);\r\n        formData.append('Origem', obterOrigem());\r\n        formData.append('Url', window.location.hostname);\r\n        formData.append('Dispositivo', obterDispositivo());\r\n\r\n        await fetch(`/${CULTURE_EMPREGARE}/Profissao/SalvarVisualizacao`, {\r\n            method: 'POST',\r\n            body: formData\r\n        });\r\n        addTrack('Visualizar Profissao', { profissaoID: profissaoID, referer: obterOrigem(), origem: obterCookie('origemCadastro') });\r\n    };\r\n      \r\n    const _definirOrigemCadastro = async function () {\r\n        let source = '';\r\n\r\n        source = obterQueryString().campanha;\r\n        if (isNullOrEmpty(source)) {\r\n            source = obterQueryString().source;\r\n        }\r\n        if (isNullOrEmpty(source)) {\r\n            return;\r\n        }\r\n        salvarCookie('origemCadastro', source, 1);\r\n    };\r\n\r\n\r\n\r\n    const init = function () {\r\n        _definirOrigemCadastro();\r\n        _insights();\r\n      \r\n    };\r\n\r\n    return init();\r\n  },\r\n  async alertaVagas(){\r\n    const profissaoTitulo = document.getElementById('ProfissaoTitulo').value;     \r\n\r\n    const url = `/${CULTURE_EMPREGARE}/Profissao/VerificarAlertaVagas/?titulo=${profissaoTitulo}`;\r\n\r\n    const callbackSucesso = (data) => {\r\n      const blocoBtns = document.getElementById('bloco-vagas-btns');\r\n      \r\n      const profissaoID = document.getElementById('ProfissaoID')?.value;     \r\n      const profissaoTitulo = document.getElementById('ProfissaoTitulo')?.value; \r\n\r\n      blocoBtns.insertAdjacentHTML(\"afterbegin\", templateBtnAlertaVagas(data.data, profissaoTitulo, profissaoID));\r\n\r\n      for (const botao of document.getElementsByClassName('botao-alerta')) {\r\n        new AlertaVaga(botao);\r\n      }\r\n    };\r\n\r\n    await getFetch(url, callbackSucesso);\r\n  },\r\n  Init(){\r\n    inicializarInternacionalizacao();\r\n\r\n    this.profissaoDetalhes();\r\n    this.Splides.init();\r\n    this.Navegacao.init();\r\n    this.Vagas.init();\r\n    this.Accordion.init();\r\n    this.adicionarVerMaisCursos();\r\n    this.alertaVagas();\r\n    \r\n  }\r\n}\r\n\r\npage.Init();\r\n\r\n\r\n","import i18next from 'i18next';import resource_0 from \"./alertaVaga.ptbr.json\" assert { type: 'JSON' };import resource_1 from \"./alertaVaga.es.json\" assert { type: 'JSON' };import resource_2 from \"./alertaVaga.en.json\" assert { type: 'JSON' };import { inicializarInternacionalizacao as inicializarGlobal } from '../global/global';const cultura = CULTURE_EMPREGARE.replace('-', '');export const inicializarInternacionalizacao = () => {inicializarGlobal();if (!i18next.isInitialized) {i18next.init({ lng:cultura, debug:true, defaultNS:'translation', resources: {}, fallbackLng: (code) => [ code.slice(0,2), 'ptbr' ]});}i18next.addResources('ptbr', 'translation', resource_0);i18next.addResources('es', 'translation', resource_1);i18next.addResources('en', 'translation', resource_2);}","import { loadFullPage } from \"./loadFullPage\";\r\nimport { postFetch } from \"./postFetch\"; \r\nimport { tomSelectBuscaLocalizacao } from \"./eventoBuscarVagaRedirect\"; \r\nimport { toastErroCarregar } from \"./toastErroCarregar\";\r\nimport { toastSucesso } from './toastSucesso'\r\nimport JustValidate from \"just-validate\";\r\nimport { Confirm } from \"notiflix/build/notiflix-confirm-aio\";\r\nimport { isNullOrEmpty } from \"./isNullOrEmpty\";\r\nimport { inicializarInternacionalizacao } from \"../localizacao/alertaVaga/alertaVaga\";\r\nimport i18next from 'i18next';\r\n\r\nexport class AlertaVaga {\r\n  constructor(botao) {\r\n    this.botao = botao;\r\n    this.modalGenerico = document.getElementById('modal-generico');\r\n    this.vagaID = this.botao.getAttribute('data-vaga-id');\r\n    this.profissaoID = this.botao.getAttribute('data-profissao-id');\r\n    this.adicionais = this.botao.getAttribute('data-edicao') ?? false;\r\n    this.alertaID = this.botao.getAttribute('data-alerta-id') ?? 0;\r\n    this.localidade = this.botao.getAttribute('data-localidade')?.split('|');\r\n    this.recarregar = this.botao.getAttribute('data-recarregar') == 'true';\r\n    this.cargos = this.botao.getAttribute('data-cargo')?.split('|');\r\n\r\n    this.init = this.init.bind(this);\r\n    this.submitForm = this.submitForm.bind(this);\r\n    this.excluir = this.excluir.bind(this);\r\n    botao.addEventListener('click', this.init)\r\n  }\r\n\r\n  async init() {\r\n\r\n    try {\r\n      loadFullPage.mostrar();\r\n      inicializarInternacionalizacao();\r\n      if(!this.cargos)\r\n        this.cargos = \"\";\r\n\r\n      if(!this.alertaID)\r\n        this.alertaID = 0;\r\n\r\n      const resultado = await fetch(`/${CULTURE_EMPREGARE}/PainelAlertaVaga/ModalAlerta?id=${this.alertaID}&adicionais=${this.adicionais}&cargo=${this.cargos}`);\r\n      if (!resultado.ok) {\r\n        loadFullPage.esconder();\r\n        toastErroCarregar(i18next.t('ErroGenerico'));\r\n        return;\r\n      }\r\n      \r\n      this.modalGenerico.innerHTML = await resultado.text();\r\n      this.modalGenerico.addEventListener('hidden.bs.modal', () => this.modalGenerico.innerHTML = '');\r\n      this.alertaID = this.modalGenerico.querySelector('#alerta-id-modal')?.value;\r\n\r\n      const formValidar = new JustValidate(this.modalGenerico.querySelector('#form-alerta-vaga'), {\r\n        errorFieldCssClass: 'is-invalid',\r\n        focusInvalidField: true,\r\n        lockForm: true\r\n      }); \r\n\r\n      formValidar\r\n        .addField('#CargosAlerta', [{ rule: 'required', errorMessage: i18next.t('ErrorMessageCargo') }])\r\n        // .addField('#CidadeAlerta', [{ rule: 'required', errorMessage: 'Informe pelo menos uma cidade' }])\r\n        .onSuccess(this.submitForm);\r\n      \r\n  \r\n      if ((this.vagaID || this.profissaoID) && !this.alertaID) {\r\n        //this.modalGenerico.querySelector('#container-input-cargos').remove();\r\n        formValidar.removeField('#CargosAlerta');\r\n      }\r\n      \r\n\r\n      if (!isNullOrEmpty(this.cargos) && this.cargos.length > 0) {\r\n\r\n        // this.modalGenerico.querySelector('#texto-descritivo-alerta').innerHTML = ` de <b> ${this.cargos} </b>`;\r\n\r\n        const contagemOptions = this.modalGenerico.querySelector('#container-input-cargos').querySelectorAll(`option`).length;\r\n        \r\n        this.cargos.forEach(value => {\r\n          const option = this.modalGenerico.querySelector(`option[value='${value}']`);\r\n          \r\n          if (option && !option.selected) {\r\n              option.remove();\r\n          }\r\n        });\r\n        \r\n        const html = [];\r\n\r\n        for (const cargo of this.cargos) {\r\n          html.push(`<option value=\"${cargo}\" ${contagemOptions > 0 ? '' : 'selected'}>${cargo}</option>`)\r\n        }\r\n  \r\n        this.modalGenerico.querySelector('#CargosAlerta').innerHTML += html;\r\n      }\r\n\r\n      if (this.localidade != null && this.localidade.length > 0) {\r\n        const contagemOptions = this.modalGenerico.querySelector('#CidadeAlerta').querySelectorAll(`option`).length;\r\n        \r\n        this.localidade.forEach(value => {\r\n          const option = this.modalGenerico.querySelector(`option[value='${value}']`);\r\n          \r\n          if (option && !option.selected) {\r\n              option.remove();\r\n          }\r\n        });\r\n        \r\n        const html = [];\r\n        for (const cidade of this.localidade) {\r\n          html.push(`<option value=\"${cidade}\" ${contagemOptions > 0 ? '' : 'selected'}>${cidade}</option>`)\r\n        }\r\n  \r\n        this.modalGenerico.querySelector('#CidadeAlerta').innerHTML += html;\r\n      }\r\n      \r\n      import('tom-select').then(({ default: TomSelect }) => {\r\n        new TomSelect('#CargosAlerta', {\r\n          plugins: ['clear_button'],\r\n          maxItems: 5,            \r\n          create: true,              // Cria uma nova opção caso não exista\r\n          persist: false,            // As tags não são “persistidas” como opções fixas\r\n          createOnBlur: true,        // Ao sair do campo, cria a tag com o texto digitado\r\n          searchField: [],\r\n          createFilter: function(input) {\r\n            if (input.length > 150) {\r\n              toastErroCarregar(i18next.t(\"AlertaVagaErro150Caracteres\"));\r\n              return false; // Bloqueia a criação\r\n            }\r\n            return true; // Permite criar\r\n          },\r\n          render: {\r\n            no_results: function(data, escape) {\r\n              // Retorna string vazia para não mostrar \"No results found\"\r\n              return '';\r\n            },\r\n            option_create: function (data, escape) {\r\n              // somente remove o texto “Add” \r\n              return `<div class=\"create\"><strong>${escape(data.input)}</strong></div>`;\r\n            }\r\n          },\r\n          onInitialize: function() {\r\n            // Se já existem itens selecionados, remove placeholder\r\n            if (this.getValue().length > 0) {\r\n              this.settings.placeholder = '';\r\n              this.control_input.setAttribute('placeholder', '');\r\n            }\r\n\r\n            this.clearOptions();\r\n          },\r\n      \r\n          onChange: function(values) {\r\n            if (values.length > 0) {\r\n              // Remove placeholder\r\n              this.settings.placeholder = '';\r\n              this.control_input.setAttribute('placeholder', '');\r\n            } else {\r\n              // Reexibe placeholder\r\n              this.settings.placeholder = i18next.t('inputCargosPlaceholder');\r\n              this.control_input.setAttribute('placeholder', i18next.t('inputCargosPlaceholder'));\r\n            }\r\n          }\r\n        });\r\n      });\r\n\r\n      await tomSelectBuscaLocalizacao('#CidadeAlerta')\r\n      this.modalGenerico.querySelector('#alerta-vaga-excluir')?.addEventListener('click', this.excluir)\r\n      //this.modalGenerico.querySelector('#form-alerta-vaga').addEventListener('submit', this.submitForm);\r\n      \r\n      const isBtnCriarAlerta = this.botao.classList.contains(\"btn-criar-alerta\");\r\n\r\n      if ((!this.localidade || this.localidade?.length == 1) && !this.alertaID && !isBtnCriarAlerta) {\r\n        loadFullPage.esconder();\r\n        this.modalGenerico.querySelector('#form-alerta-vaga').dispatchEvent(new Event('submit'));\r\n        return;\r\n      }\r\n      \r\n      this.modalBootstrap = new bootstrap.Modal(this.modalGenerico, { backdrop: \"static\" });\r\n      \r\n      this.modalBootstrap.show();\r\n      loadFullPage.esconder();\r\n    } catch {\r\n      \r\n      loadFullPage.esconder();\r\n      this.modalBootstrap.hide();\r\n      toastErroCarregar(i18next.t('ErroGenerico'));\r\n    }\r\n  }\r\n\r\n  async excluir() {\r\n    Confirm.init({\r\n      className: \"confirm-empregare\",\r\n      titleColor: \"#EA1F1F\",\r\n      okButtonColor: \"#f8f8f8\",\r\n      okButtonBackground: \"#EA1F1F\",\r\n      cancelButtonColor: \"#f8f8f8\",\r\n    });\r\n\r\n    const callbackSucesso = resultado => {\r\n      \r\n      if (this.recarregar) {\r\n        location.reload();\r\n      }\r\n\r\n      this.modalBootstrap.hide();\r\n      loadFullPage.esconder();\r\n      this.botao.dispatchEvent(new Event('alerta-excluido', { bubbles: true }));\r\n      this.alertaID = 0;\r\n      this.adicionais = false;\r\n      this.botao.innerHTML = `<i class=\"bi bi-bell\"></i> ${i18next.t('BtnAtivar')}`;\r\n      this.botao.setAttribute('data-alerta-id', 0);\r\n\r\n      toastSucesso(i18next.t('AlertaExcluido'))      \r\n    };\r\n\r\n    const callbackErro = resultado => {\r\n      toastErroCarregar(resultado.mensagem);\r\n      loadFullPage.esconder();\r\n      this.modalBootstrap.hide();\r\n    }\r\n  \r\n    Confirm.show(\r\n      i18next.t('ConfirmarExcluirTitulo'),\r\n      i18next.t('ConfirmarExcluirTexto'),\r\n      i18next.t('ConfirmarExcluirBtnConfirmar'),\r\n      i18next.t('ConfirmarExcluirBtnCancelar'),\r\n      async () => {\r\n        loadFullPage.mostrar(i18next.t('ExcluindoAlerta'));\r\n        await postFetch(`/${CULTURE_EMPREGARE}/PainelAlertaVaga/Excluir/${this.alertaID}`, null, callbackSucesso, callbackErro, callbackErro);\r\n      }\r\n    );\r\n  }\r\n  \r\n  async submitForm(event) {\r\n    console.log('event', event);\r\n    \r\n    event.preventDefault();\r\n    loadFullPage.mostrar(i18next.t('LoadSalvandoAlerta'))\r\n    \r\n    const callbackSucesso = resultado => {\r\n      toastSucesso(i18next.t('AlertaSalvo'))      \r\n      if (this.recarregar) {\r\n        location.reload();\r\n      }\r\n\r\n      this.modalBootstrap?.hide();\r\n      loadFullPage.esconder();\r\n      this.alertaID = resultado.alertaID;\r\n      this.adicionais = true;\r\n      this.botao.innerHTML = '<i class=\"bi bi-gear\"></i> ' + i18next.t('btnEditar');\r\n      this.botao.setAttribute('data-alerta-id', resultado.alertaID);\r\n\r\n      this.botao.dispatchEvent(new Event('alerta-salvo', { bubbles: true }));\r\n    }\r\n  \r\n    const callBackErro = resultado => {\r\n      //this.modalBootstrap?.hide();\r\n      loadFullPage.esconder();\r\n      \r\n      if (resultado?.mensagem != null) {        \r\n        if (resultado.erroAutenticacao) {\r\n          document.querySelector('.btn-login').click();\r\n          return;\r\n        }\r\n        toastErroCarregar(resultado.mensagem);\r\n        return;\r\n      }\r\n      \r\n      toastErroCarregar(i18next.t('ErroGenerico'));\r\n    }\r\n  \r\n    const formData = new FormData(event.target);\r\n  \r\n    formData.append('VagaID', this.vagaID);\r\n    formData.append('ProfissaoID', this.profissaoID);\r\n    formData.append('ID', this.alertaID);\r\n\r\n    if (!formData.get('Localidades') && this.localidade) {\r\n      formData.delete('Localidades');\r\n      if(this.profissaoID || this.vagaID){\r\n        for (const localidade of this.localidade) {\r\n          \r\n          formData.append('Localidades', localidade);\r\n        }\r\n      }\r\n    }\r\n    \r\n    if (!formData.get('Cargos') && this.cargos && !isNullOrEmpty(this.cargos)) {\r\n      formData.delete('Cargos');\r\n      for (const cargo of this.cargos) {\r\n        \r\n        formData.append('Cargos', cargo);\r\n      }\r\n    }\r\n\r\n    await postFetch(`/${CULTURE_EMPREGARE}/PainelAlertaVaga/Salvar`, formData, callbackSucesso, callBackErro, callBackErro, false, false);\r\n  }\r\n}\r\n","import i18next from 'i18next';import resource_0 from \"./eventoBuscarVagaRedirect.ptbr.json\" assert { type: 'JSON' };import resource_1 from \"./eventoBuscarVagaRedirect.es.json\" assert { type: 'JSON' };import resource_2 from \"./eventoBuscarVagaRedirect.en.json\" assert { type: 'JSON' };import { inicializarInternacionalizacao as inicializarGlobal } from '../global/global';const cultura = CULTURE_EMPREGARE.replace('-', '');export const inicializarInternacionalizacao = () => {inicializarGlobal();if (!i18next.isInitialized) {i18next.init({ lng:cultura, debug:true, defaultNS:'translation', resources: {}, fallbackLng: (code) => [ code.slice(0,2), 'ptbr' ]});}i18next.addResources('ptbr', 'translation', resource_0);i18next.addResources('es', 'translation', resource_1);i18next.addResources('en', 'translation', resource_2);}","import { uuid } from '../utilidades/uuid.js';\r\nimport { inicializarInternacionalizacao } from '../localizacao/eventoBuscarVagaRedirect/eventoBuscarVagaRedirect.js'\r\nimport i18next from 'i18next';\r\nimport { isNullOrEmpty } from './isNullOrEmpty.js';\r\nimport { getFetch } from './getFetch.js';\r\n\r\nconst chaveLocalStorageBuscasRecentesCargo = 'vagasBuscasRecentesCargo';\r\nconst chaveLocalStorageBuscasRecentesLocalizacao = 'vagasBuscasRecentesLocalizacao';\r\nconst chaveLocalStorageCidadesSugestoes = 'sugestoesCidade';\r\ninicializarInternacionalizacao();\r\n\r\nconsole.log('eventoBuscarVagaRedirect');\r\n\r\nconst sugestoesCidadesPadrao = [\r\n    { nome: i18next.t('SugestoesCidadesPadraoRemoto') },\r\n    { nome: 'Brasília, DF' },\r\n    { nome: 'São Paulo, SP' },\r\n    { nome: 'São José do Rio Preto, SP' },\r\n    { nome: 'Cuiabá, MT' },\r\n    { nome: 'Maringá, PR' },\r\n    { nome: 'Natal, RN' },\r\n    { nome: 'Belo Horizonte, MG' },\r\n    { nome: 'Taguatinga - Brasília, DF' },\r\n    { nome: 'Rio de Janeiro, RJ' },\r\n    { nome: 'Ribeirão Preto, SP' }\r\n];\r\n\r\n\r\nexport async function obterSugestoesCidades(cb = null) {\r\n    let cacheSugestoesCidades = [];\r\n    if (sessionStorage.getItem(chaveLocalStorageCidadesSugestoes)) {\r\n        cacheSugestoesCidades = JSON.parse(sessionStorage.getItem(chaveLocalStorageCidadesSugestoes));\r\n    }\r\n\r\n    const { getGeoData } = await import('../utilidades/geoData');\r\n    let retorno = cacheSugestoesCidades;\r\n    const geoData = getGeoData();\r\n\r\n    try {\r\n        if (cacheSugestoesCidades.length == 0) {\r\n            const baseURLAPI = URL_API + 'vagas/buscar-novo';\r\n            const hotSiteEmpresaID = document.getElementById(\"hotSiteEmpresaID\");\r\n            const hotSiteUrl = document.getElementById('hotSiteUrl');\r\n\r\n            const parametrosURL = new URLSearchParams();\r\n            parametrosURL.append('pagina', 1);\r\n            parametrosURL.append('itensPagina', 1);\r\n            parametrosURL.append('ordenacao', 'Relevancia');\r\n         \r\n            if (hotSiteEmpresaID != undefined && hotSiteUrl != undefined) {\r\n                parametrosURL.append('empresa', hotSiteEmpresaID.value);\r\n                parametrosURL.append('hotSiteUrl', hotSiteUrl.value);\r\n            }\r\n\r\n            const request = await fetch(`${baseURLAPI}?${parametrosURL.toString()}`);\r\n\r\n            const response = await request.json();\r\n\r\n            if (response.sucesso) {\r\n                if (!response.model.facets || !response.model.facets.cidade) {\r\n                    retorno = sugestoesCidadesPadrao;\r\n                } else {\r\n                    const topCidades = response.model.facets.cidade.splice(0, 10);\r\n\r\n                    const possuiRemoto = response.model.facets.remoto?.filter(x => x.nome.includes('Remoto'))?.length > 0;\r\n                    if (possuiRemoto) {\r\n                        retorno.push({ nome: i18next.t('SugestoesCidadesPadraoRemoto') });\r\n                    }\r\n\r\n                    for (const cidadeObject of topCidades) {\r\n                        if (retorno.find(x => x.nome.includes(cidadeObject.nome)) || cidadeObject.nome.includes('Brasil') || cidadeObject.nome.includes('Remoto')) {\r\n                            continue;\r\n                        }\r\n\r\n                        retorno.push(cidadeObject);\r\n                    }\r\n                }\r\n\r\n                sessionStorage.setItem(chaveLocalStorageCidadesSugestoes, JSON.stringify(retorno));\r\n            } else {\r\n                retorno = sugestoesCidadesPadrao;\r\n            }\r\n        }\r\n    }\r\n    catch {\r\n        //Caso dê algum erro com o request, coloca as sugestões padrões\r\n        retorno = sugestoesCidadesPadrao;\r\n    }\r\n\r\n    if (geoData.existe) {\r\n        //Filtra a lista para não ter a mesma cidade repetida para add no topo\r\n        retorno = retorno.filter(x => !x.nome.includes(geoData.cidadeCompleta));\r\n        retorno.unshift({ nome: geoData.cidadeCompleta });\r\n    }\r\n\r\n    //Callback para indicar apenas que finalizou toda operação de request\r\n    if (cb != null) { cb(); }\r\n\r\n    return retorno;\r\n}\r\n\r\nexport function adicionarSugestaoCidade(nome, adicionarNoTopoLista = false){\r\n    if(nome == null || nome.trim().length == 0){\r\n        return;\r\n    }\r\n    \r\n    let arrayDados = [];\r\n    const dadoParaInserir = { nome };    \r\n    const dadosSalvos = obterSugestoesCidades();\r\n\r\n    if(dadosSalvos != null && dadosSalvos.length > 0)\r\n    {\r\n        //Se houver um dado igual não adiciona\r\n        if(dadosSalvos.filter(dado => dado.nome.includes(dadoParaInserir.nome)).length > 0){\r\n            return;\r\n        }\r\n        arrayDados = dadosSalvos;\r\n    }\r\n\r\n    if(adicionarNoTopoLista){\r\n        arrayDados.unshift(dadoParaInserir);\r\n    }else {\r\n        arrayDados.push(dadoParaInserir);\r\n    }\r\n    localStorage.setItem(chaveLocalStorageCidadesSugestoes, JSON.stringify(arrayDados));\r\n}\r\n\r\nexport function removerSugestaoCidade(nome){\r\n    const dadosSalvos = obterSugestoesCidades();\r\n\r\n    if(dadosSalvos == null || dadosSalvos.length == 0)\r\n    {\r\n        return;\r\n    }\r\n    const dadosSalvosNovo = dadosSalvos.filter(x => x.nome != nome);\r\n    localStorage.setItem(chaveLocalStorageCidadesSugestoes, JSON.stringify(dadosSalvosNovo));\r\n}\r\n\r\nconst templatesVagaBuscasRecentes = {\r\n    headerListagem(container){\r\n        const info = document.createElement('div');\r\n        info.setAttribute(\"class\", \"d-flex justify-content-between px-4 pt-3 pb-2\");\r\n        info.innerHTML = `\r\n            <span class=\"text-muted\" style=\"text-overflow: ellipsis; white-space: nowrap; overflow: hidden;\">\r\n                <small>${i18next.t('TemplateVagaBuscasRecentes')}</small>\r\n            </span>\r\n        `;\r\n        container.prepend(info);\r\n    },\r\n    async itemCargoListagem(elemento, data){        \r\n        elemento.setAttribute('class', `busca_${data.value.id}`);\r\n        elemento.style = \"display: flex; justify-content: space-between;\";\r\n        elemento.innerHTML = `\r\n                    <span style=\"text-overflow: ellipsis; white-space: nowrap; overflow: hidden;\">\r\n                        <small>${data.match}</small>\r\n                    </span>\r\n                    <span style=\"margin-right: -15px; display: flex; align-items: center; font-size: 13px; font-weight: 100; text-transform: uppercase; color: rgba(0,0,0,.2);\">\r\n                        <button data-id=\"${data.value.id}\" type=\"button\" class=\"fechar-modal btn-remove-busca-recente\"><i class=\"bi bi-x-circle\"></i></button>\r\n                    </span>`\r\n                ;\r\n        elemento.querySelectorAll('.btn-remove-busca-recente').forEach(el => el.addEventListener('click', () => {\r\n            //Remove do localStorage baseado na busca id\r\n            const buscaId = el.dataset.id;\r\n            vagasBuscasRecentesCargoRemover(buscaId);\r\n            document.querySelector(`.busca_${buscaId}`).remove();\r\n        }));\r\n\r\n    },\r\n    async itemLocalizacaoListagem(elemento, data){\r\n        let htmlElemento = '';\r\n\r\n        elemento.style = \"display: flex; justify-content: space-between;\";\r\n        elemento.innerHTML = `\r\n            <span style=\"text-overflow: ellipsis; white-space: nowrap; overflow: hidden;\">\r\n                <small>${data.match}</small>\r\n            </span>`;\r\n\r\n        //Se for um elemento que seja de busca recente (para nao confundir com a listagem de cidades normal) adiciona botão de remover\r\n        if(data.value.buscaRecente != undefined && data.value.buscaRecente){\r\n            elemento.setAttribute('class', `busca_${data.value.id}`);\r\n            elemento.innerHTML += `            \r\n                <span style=\"margin-right: -15px; display: flex; align-items: center; font-size: 13px; font-weight: 100; text-transform: uppercase; color: rgba(0,0,0,.2);\">\r\n                    <button data-id=\"${data.value.id}\" type=\"button\" class=\"fechar-modal btn-remove-busca-recente-localizacao\"><i class=\"bi bi-x-circle\"></i></button>\r\n                </span>\r\n            `;\r\n            elemento.querySelectorAll('.btn-remove-busca-recente-localizacao').forEach(el => el.addEventListener('click', () => {\r\n                //Remove do localStorage baseado na busca id\r\n                const buscaId = el.dataset.id;\r\n                vagasBuscasRecentesLocalizacaoRemover(buscaId);\r\n                document.querySelector(`.busca_${buscaId}`).remove();\r\n            }));\r\n        }\r\n    }\r\n};\r\n\r\nexport async function autocompleteBuscaRecenteLocalizacao(formHeaderBuscarVagas, seletorInput = '#localizacao', sugestoes = []) {\r\n\r\n    const { default: autoComplete } = await import('@tarekraafat/autocomplete.js');\r\n\r\n    let sugestoesCidades = [];\r\n    let buscasRecentesLocalizacao = vagasBuscasRecentesLocalizacaoObter();\r\n\r\n    let exibirSugestoesCidades = true;\r\n    let exibindoCidadesAPI = false;\r\n\r\n    const autoCompleteLocalizacao = new autoComplete({\r\n        diacritics: true, //entender sinais agudos e etc\r\n        submit: true,\r\n        selector: seletorInput,\r\n        placeHolder: i18next.t('AutocompletePlaceholder'),\r\n        threshold: 0,\r\n        debounce: 500,\r\n        data: {\r\n            src: async (query) => {\r\n                try {\r\n                    let retorno = [];\r\n                    let querySemAcentos = query.toLowerCase();\r\n                    querySemAcentos = querySemAcentos.normalize(\"NFD\").replace(/\\p{Diacritic}/gu, \"\");\r\n\r\n                    function _dadosDoLocalStorage(){\r\n\r\n                        exibindoCidadesAPI = false;\r\n\r\n                        buscasRecentesLocalizacao = vagasBuscasRecentesLocalizacaoObter().filter(item => {\r\n                            let nomeSemAcentos = item.nome.toLowerCase();\r\n                            nomeSemAcentos = nomeSemAcentos.normalize(\"NFD\").replace(/\\p{Diacritic}/gu, \"\");\r\n                            return nomeSemAcentos.includes(querySemAcentos);\r\n                        });\r\n\r\n                        retorno = buscasRecentesLocalizacao;\r\n                        return (buscasRecentesLocalizacao != null && buscasRecentesLocalizacao.length > 0);\r\n                    }\r\n\r\n                    /*function _possuiEmSugestoesCidades(){\r\n                        // console.log('analisando de sugestões de cidades');\r\n\r\n                        const sugestoesCidadesFiltrada = sugestoesCidades.filter(item => {\r\n                            let nomeSemAcentos = item.nome.toLowerCase();\r\n                            nomeSemAcentos = nomeSemAcentos.normalize(\"NFD\").replace(/\\p{Diacritic}/gu, \"\");\r\n                            return nomeSemAcentos.includes(querySemAcentos);\r\n                        });\r\n\r\n                        return (sugestoesCidadesFiltrada != null && sugestoesCidadesFiltrada.length > 0);\r\n                    }*/\r\n\r\n                    if(query.length >= 3){\r\n                        //console.log('buscando da API');   \r\n                        \r\n                        exibindoCidadesAPI = true;\r\n                        exibirSugestoesCidades = false;\r\n\r\n                        const requestCidades = await fetch(`${URL_API}variaveis/cidades/buscarV2?query=${query}`);\r\n                        const data = await requestCidades.json();\r\n                        retorno = data.dados;\r\n\r\n                        if(retorno == null || Object.keys(retorno).length == 0){\r\n                            exibirSugestoesCidades = true;\r\n                            _dadosDoLocalStorage();\r\n                        }                        \r\n\r\n                    }else{\r\n                        exibirSugestoesCidades = true;\r\n                        _dadosDoLocalStorage();\r\n                    }\r\n\r\n                    // console.log({retorno, query});\r\n\r\n                    return retorno;\r\n                } catch (error) {\r\n                    console.log(error);\r\n                }\r\n            },\r\n            keys: [\"nome\"]\r\n        },\r\n        resultsList: {\r\n            noResults: true, //Caso não tenha itens, permite abrir a listagem contendo as sugestões de cidade\r\n            maxResults: 20,\r\n            element: (list, data) => {\r\n                let temBuscasRecentes = false;\r\n                list.setAttribute('class', 'listagem-localizacao');\r\n                // console.log(list);\r\n\r\n                //Exibe a header de buscas recentes somente quando o termo em questão está na lista\r\n                if (buscasRecentesLocalizacao.length > 0 && !exibindoCidadesAPI) {\r\n                    temBuscasRecentes = true;\r\n                    templatesVagaBuscasRecentes.headerListagem(list);\r\n                }\r\n\r\n                //Cidades destaques\r\n                if(exibirSugestoesCidades){\r\n\r\n                    if(temBuscasRecentes){\r\n                        const linhaSeparadora = document.createElement(\"hr\");\r\n                        linhaSeparadora.setAttribute(\"style\", \"margin: 5px 0 0 0;\");\r\n                        list.append(linhaSeparadora);\r\n                    }\r\n\r\n                    const headerSugestoes = document.createElement('div');\r\n                    headerSugestoes.setAttribute(\"class\", \"d-flex justify-content-between px-4 pt-3 pb-2\");\r\n                    headerSugestoes.innerHTML = `\r\n                        <span class=\"text-muted\" style=\"text-overflow: ellipsis; white-space: nowrap; overflow: hidden;\">\r\n                            <small>${i18next.t('ResultsListSugestoes')}</small>\r\n                        </span>\r\n                    `;\r\n                    list.append(headerSugestoes);\r\n                    sugestoesCidades = sugestoesCidades.concat(sugestoes);\r\n                    sugestoesCidades.reverse()\r\n\r\n                    // remove cidades duplicadas\r\n                    sugestoesCidades = sugestoesCidades.filter((seenIds => obj => !seenIds.has(obj.id) && seenIds.add(obj.id))(new Set())); \r\n\r\n                    for(let i = 0; i < sugestoesCidades.length; ++i){\r\n                        const info = document.createElement('li');\r\n                        info.setAttribute(\"style\", \"display: flex; justify-content: space-between;\");\r\n                        info.innerHTML = `\r\n                            <span style=\"text-overflow: ellipsis; white-space: nowrap; overflow: hidden;\">\r\n                                <small class=\"cidade-destaque-item\">${sugestoesCidades[i].nome}</small>\r\n                            </span>\r\n                        `;\r\n                        list.append(info);\r\n                    }\r\n                }\r\n            }\r\n        },\r\n        resultItem: {\r\n            element: (item, data) => {\r\n                templatesVagaBuscasRecentes.itemLocalizacaoListagem(item, data);\r\n            },\r\n            highlight: true\r\n        },\r\n        events: {\r\n            input: {                \r\n                selection: (event) => {\r\n                    //Se for um item que não seja preenchido em 'data'\r\n                    if(event.detail.selection.value == undefined){\r\n                        autoCompleteLocalizacao.input.value = event.target.nextSibling.querySelectorAll('.cidade-destaque-item')[event.detail.selection.index - buscasRecentesLocalizacao.length].textContent;\r\n                    }\r\n                    else {\r\n                        const objetoSelecionado = event.detail.selection.value;\r\n                        autoCompleteLocalizacao.input.value = objetoSelecionado.nome;\r\n                    }                    \r\n                },\r\n                focus: async (event) => {\r\n                    //Ao dar focus no input, inicia o autocomplete com uma pesquisa em branco carregando todas as suas buscas recentes\r\n                    const inputLocalizacao = document.querySelector(seletorInput);\r\n                    const valorAntesLoading = inputLocalizacao.value;\r\n                    inputLocalizacao.value = i18next.t('SugestoesCidadesCarregando');\r\n\r\n                    sugestoesCidades = await obterSugestoesCidades(() => {\r\n                        inputLocalizacao.value = valorAntesLoading;\r\n                        autoCompleteLocalizacao.start();\r\n                    });\r\n                }\r\n            }\r\n        }\r\n    });\r\n\r\n    if(formHeaderBuscarVagas != null){\r\n        //Evento que ao pesquisar no form header vai redirecionar para a tela de vagas\r\n        formHeaderBuscarVagas.addEventListener('submit', eventoBuscarVagaRedirect);\r\n    }\r\n\r\n    return autoCompleteLocalizacao;\r\n}\r\n\r\nexport async function tomSelectBuscaLocalizacao(selector, multiple) {\r\n    const module = await import('tom-select');\r\n    const TomSelect = module.default;\r\n    new TomSelect(selector, {\r\n        plugins: ['clear_button'],\r\n        valueField: 'nome',\r\n        labelField: 'Localizacao',\r\n        searchField: [],\r\n        maxItems: 5,\r\n        preload: true,\r\n        load: async (query, callback) => {\r\n            try {\r\n                let retorno = [];\r\n                let buscasRecentesLocalizacao = vagasBuscasRecentesLocalizacaoObter();\r\n                function _dadosDoLocalStorage(){\r\n                    const querySemAcentos = query.toLowerCase().normalize(\"NFD\").replace(/\\p{Diacritic}/gu, \"\");\r\n                    \r\n                    buscasRecentesLocalizacao = vagasBuscasRecentesLocalizacaoObter().filter(item => {\r\n                        let nomeSemAcentos = item.nome.toLowerCase();\r\n                        nomeSemAcentos = nomeSemAcentos.normalize(\"NFD\").replace(/\\p{Diacritic}/gu, \"\");\r\n                        return nomeSemAcentos.includes(querySemAcentos);\r\n                    });\r\n\r\n                    retorno = buscasRecentesLocalizacao;\r\n                    return (buscasRecentesLocalizacao != null && buscasRecentesLocalizacao.length > 0);\r\n                }\r\n\r\n                if(query.length >= 3){\r\n                    const requestCidades = await fetch(`${URL_API}variaveis/cidades/buscar/${query}`);\r\n                    const data = await requestCidades.json();\r\n                    retorno = data.dados;\r\n\r\n                    if(retorno == null || Object.keys(retorno).length == 0){\r\n                        _dadosDoLocalStorage();\r\n                    }                        \r\n\r\n                } else \r\n                    _dadosDoLocalStorage();\r\n\r\n                callback(retorno);\r\n            } catch (error) {\r\n                console.log(error);\r\n            }\r\n        },\r\n        onInitialize: function() {\r\n            // Se já houver algum valor selecionado, remove o placeholder\r\n            // Lembrando que para \"multiple\" esse valor será array.\r\n            const currentValue = this.getValue();\r\n            \r\n            const hasValue = Array.isArray(currentValue)\r\n                ? currentValue.length > 0\r\n              : !!currentValue; // para single\r\n            \r\n            if (hasValue) {\r\n                this.settings.placeholder = '';\r\n                this.control_input.setAttribute('placeholder', '');\r\n            }\r\n        },\r\n        onChange: function(value) {\r\n\r\n            let hasValue = false;\r\n\r\n            if (Array.isArray(value)) {\r\n                hasValue = value.length > 0;\r\n            } else {\r\n                hasValue = !!value;\r\n            }\r\n\r\n            if (hasValue) {\r\n                this.settings.placeholder = '';\r\n                this.control_input.setAttribute('placeholder', '');\r\n            } else {\r\n                this.settings.placeholder = 'Procurar cidade...';\r\n                this.control_input.setAttribute('placeholder', 'Procurar cidade...');\r\n            }\r\n\r\n            if (isNullOrEmpty(value) && (typeof avisoAssuntoSelecionado !== 'undefined' && avisoAssuntoSelecionado)) {\r\n                avisoAssuntoSelecionado?.classList.add('d-none');\r\n                todoFormulario?.classList.add('d-none');\r\n                document.getElementById('row-assunto-subcategoria')?.classList.add('d-none');\r\n                return;\r\n            }\r\n            getFetch(`/${CULTURE_EMPREGARE}/PaginasEstaticas/ObterAssuntoSubcategorias?assuntoCategoriaID=` + value,\r\n                (resultado) => {\r\n\r\n                    if(!resultado.dados)\r\n                        return;\r\n\r\n                    let opcoesSubcategorias = resultado.dados;\r\n\r\n\r\n                    if (opcoesSubcategorias.length > 0  && (typeof selectAssuntoSubcategoria !== 'undefined' && selectAssuntoSubcategoria)) {\r\n\r\n                        selectAssuntoSubcategoria.clear(); //atual seleção\r\n                        selectAssuntoSubcategoria.clearOptions();\r\n                        selectAssuntoSubcategoria.addOptions(opcoesSubcategorias);\r\n\r\n                        if (opcoesSubcategorias.length == 1) {\r\n                            document.getElementById('row-assunto-subcategoria').classList.add('d-none');\r\n                            selectAssuntoSubcategoria.setValue(opcoesSubcategorias[0].ID);\r\n                        } else {\r\n                            document.getElementById('row-assunto-subcategoria').classList.remove('d-none');\r\n                            todoFormulario.classList.add('d-none');\r\n                            avisoAssuntoSelecionado.classList.add('d-none');\r\n                        }\r\n                    }\r\n\r\n                },\r\n                (erro) => {\r\n                    console.log(erro);\r\n                }\r\n            );\r\n        },\r\n        onItemAdd: function(value, item) {\r\n\r\n            function clearDynamicOptions(tomSelectInstance) {\r\n                // Pega todas as chaves (valores) das opções carregadas.\r\n                const allOptionKeys = Object.keys(tomSelectInstance.options);\r\n              \r\n                // Pega os itens selecionados. Pode vir como string (single) ou array (multiple).\r\n                let selectedKeys = tomSelectInstance.getValue();\r\n              \r\n                // Garante que `selectedKeys` seja um array para comparar.\r\n                if (!Array.isArray(selectedKeys)) {\r\n                  selectedKeys = selectedKeys ? [selectedKeys] : [];\r\n                }\r\n              \r\n                for (const key of allOptionKeys) {\r\n                  const opt = tomSelectInstance.options[key];\r\n                    \r\n                  if (opt.ispermanent !== \"true\") {\r\n                    // ...e NÃO está selecionado, removemos.\r\n                    if (!selectedKeys.includes(key)) {\r\n                      tomSelectInstance.removeOption(key);\r\n                    }\r\n                  }\r\n                }\r\n              }\r\n            // Limpa o texto que sobrou\r\n            this.setTextboxValue('');\r\n            this.close();\r\n\r\n            clearDynamicOptions(this);\r\n        },\r\n        render: {\r\n            option: function (data, escape) {\r\n                console.log(data)\r\n                return `\r\n                    <div class=\"\">\r\n                        <p class=\"mb-0\">${escape(data.nome)}</p>\r\n                    </div>\r\n                `;\r\n            },\r\n            item: function (data, escape) {\r\n                console.log(data)\r\n                return '<div title=\"' + escape(data.nome) + '\">' + escape(data.nome) + '</div>';\r\n            }\r\n        }\r\n    });\r\n}\r\n\r\nexport async function autocompleteBuscaRecenteCargo(form, seletorInput = 'input[name=\"cargo\"]'){\r\n    const { default: autoComplete } = await import('@tarekraafat/autocomplete.js');\r\n    \r\n    const autocompleteCargo = new autoComplete({\r\n        diacritics: true,\r\n        submit: true,\r\n        selector: ()  => form.querySelector(seletorInput),\r\n        threshold: 0,\r\n        data: {\r\n            src: async (query) => {\r\n                try {\r\n                    //console.log(query);\r\n                    const dadosBuscasRecentes = vagasBuscasRecentesCargoObter();\r\n                    const listaFiltradaBuscasRecentes = dadosBuscasRecentes.filter(x => x.cargo.includes(query));\r\n                    return listaFiltradaBuscasRecentes;\r\n                } catch (error) {\r\n                    console.log(error);\r\n                }\r\n            },\r\n            keys: ['cargo']\r\n            // cache: true,\r\n        },\r\n        resultsList: {\r\n            element: (list, data) => {\r\n                if (vagasBuscasRecentesCargoObter().length > 0) {\r\n                    templatesVagaBuscasRecentes.headerListagem(list);\r\n                }\r\n            }\r\n        },\r\n        resultItem: {\r\n            element: (item, data) => {\r\n                templatesVagaBuscasRecentes.itemCargoListagem(item, data);\r\n            },\r\n            highlight: true,\r\n        },\r\n        events: {\r\n            input: {\r\n                selection: (event) => {\r\n                    const objetoSelecionado = event.detail.selection.value;\r\n                    autocompleteCargo.input.value = objetoSelecionado.cargo;\r\n                },\r\n                focus: (event) => {\r\n                    //Ao dar focus no input, inicia o autocomplete com uma pesquisa em branco carregando todas as suas buscas recentes\r\n                    autocompleteCargo.start('');\r\n                }\r\n            }\r\n        }\r\n    });\r\n\r\n}\r\n\r\nfunction vagasBuscasRecentesCargoObter()\r\n{\r\n    const dadosSalvos = localStorage.getItem(chaveLocalStorageBuscasRecentesCargo);\r\n    if(dadosSalvos == null || dadosSalvos == undefined){\r\n        return [];\r\n    }\r\n    return JSON.parse(dadosSalvos) ?? [];\r\n}\r\n\r\nfunction vagasBuscasRecentesLocalizacaoObter()\r\n{\r\n    const dadosSalvos = localStorage.getItem(chaveLocalStorageBuscasRecentesLocalizacao);\r\n    if(dadosSalvos == null || dadosSalvos == undefined){\r\n        return [];\r\n    }\r\n    return JSON.parse(dadosSalvos) ?? [];\r\n}\r\n\r\nfunction vagasBuscasRecentesCargoRemover(id)\r\n{    \r\n    const dadosSalvos = vagasBuscasRecentesCargoObter();\r\n\r\n    if(dadosSalvos == null || dadosSalvos.length == 0)\r\n    {\r\n        return;\r\n    }\r\n\r\n    const dadosSalvosNovo = dadosSalvos.filter(x => x.id != id);\r\n    localStorage.setItem(chaveLocalStorageBuscasRecentesCargo, JSON.stringify(dadosSalvosNovo));    \r\n}\r\n\r\nfunction vagasBuscasRecentesLocalizacaoRemover(id)\r\n{    \r\n    const dadosSalvos = vagasBuscasRecentesLocalizacaoObter();\r\n\r\n    if(dadosSalvos == null || dadosSalvos.length == 0)\r\n    {\r\n        return;\r\n    }\r\n\r\n    const dadosSalvosNovo = dadosSalvos.filter(x => x.id != id);\r\n    localStorage.setItem(chaveLocalStorageBuscasRecentesLocalizacao, JSON.stringify(dadosSalvosNovo));    \r\n}\r\n\r\nexport function vagasBuscasRecentesCargoAdicionar(cargo)\r\n{\r\n    if(cargo == null || cargo.trim().length == 0){\r\n        return;\r\n    }\r\n    let arrayDados = [];\r\n    const dadoParaInserir = { id: uuid(), cargo };    \r\n    const dadosSalvos = vagasBuscasRecentesCargoObter();\r\n\r\n    if(dadosSalvos != null && dadosSalvos.length > 0)\r\n    {\r\n        console.log(dadosSalvos.filter(dado => dado.cargo.includes(dadoParaInserir.cargo)));\r\n        //Se houver um dado igual não adiciona\r\n        if(dadosSalvos.filter(dado => dado.cargo.includes(dadoParaInserir.cargo)).length > 0){\r\n            return;\r\n        }\r\n        arrayDados = dadosSalvos;\r\n    }\r\n\r\n    arrayDados.push(dadoParaInserir);\r\n    localStorage.setItem(chaveLocalStorageBuscasRecentesCargo, JSON.stringify(arrayDados));\r\n}\r\n\r\nexport function vagasBuscasRecentesLocalizacaoAdicionar(localizacao)\r\n{\r\n    if(localizacao == null || localizacao.trim().length == 0){\r\n        return;\r\n    }\r\n    let arrayDados = [];\r\n    const dadoParaInserir = { id: uuid(), nome: localizacao, buscaRecente: true };    \r\n    const dadosSalvos = vagasBuscasRecentesLocalizacaoObter();\r\n\r\n    if(dadosSalvos != null && dadosSalvos.length > 0)\r\n    {\r\n        //Se houver um dado igual não adiciona\r\n        if(dadosSalvos.filter(dado => dado.nome.includes(dadoParaInserir.nome)).length > 0){\r\n            return;\r\n        }\r\n        arrayDados = dadosSalvos;\r\n    }\r\n\r\n    arrayDados.push(dadoParaInserir);\r\n    localStorage.setItem(chaveLocalStorageBuscasRecentesLocalizacao, JSON.stringify(arrayDados));\r\n}\r\n\r\nexport function eventoBuscarVagaRedirect(e) {\r\n    e.preventDefault();\r\n    const inputCargo = e.target.querySelector('input[name=\"cargo\"]').value;\r\n    const inputLocalizacao = e.target.querySelector('input[name=\"localizacao\"]').value;\r\n    \r\n    vagasBuscasRecentesCargoAdicionar(inputCargo);\r\n    vagasBuscasRecentesLocalizacaoAdicionar(inputLocalizacao);\r\n    \r\n    location.href = `/${CULTURE_EMPREGARE}/vagas?query=${inputCargo}&localidade=${inputLocalizacao}`;\r\n}\r\n","import { validarResultado } from \"./validarResultado\";\r\n\r\nexport async function getFetch(url, callbackSucesso, callbackErro, callbackErroConexao, exibirToastErroConexao, exibirToastErroServidor) {\r\n    const retorno = await fetch(url, {\r\n        method: \"GET\",\r\n        headers: {\r\n            'Content-Type': 'application/json',\r\n        }\r\n    });\r\n\r\n    return validarResultado(retorno, callbackSucesso, callbackErro, callbackErroConexao, exibirToastErroConexao, exibirToastErroServidor);\r\n}\r\n","export function isNullOrEmpty(value) {\r\n    if (typeof value == 'undefined') {\r\n        return true;\r\n    }\r\n    if (value == '' || value == null || value == 'null') {\r\n        return true;\r\n    }\r\n    return false;\r\n}\r\n\r\n","export const loadFullPage = {\r\n    mostrar(mensagem = 'Aguarde...') {\r\n        let html = '';\r\n        const _setLoader = function () {\r\n            html = '<div id=\"loader-site\"><div id=\"loader-overlay\" tabindex=\"-1\" style=\"opacity: 1.03;\"></div><div id=\"loader-msg\" tabindex=\"-1\">';\r\n            html += '<div class=\"modal\" style=\"display:block;z-index:2000\"><div class=\"modal-dialog modal-sm text-center\"><div class=\"modal-content\"><div class=\"modal-body\" style=\"padding-top: 30px;padding-bottom: 30px;\"><div class=\"spinner-border\" style=\"margin-bottom: -8px;margin-right: 10px;\" role=\"status\"><span class=\"visually-hidden\">Loading...</span></div> ' + mensagem + '</div></div></div></div>';\r\n\r\n            document.body.insertAdjacentHTML(\"afterbegin\", html);\r\n\r\n        };\r\n        const init = function () {\r\n            _setLoader();\r\n        }\r\n        return init();\r\n    },\r\n    esconder() {\r\n        const _removeLoader = function () {\r\n            let findLoader = document.getElementById('loader-site');\r\n            if (document.contains(findLoader)) {\r\n                findLoader.remove();\r\n            }\r\n        };\r\n        const init = function () {\r\n            _removeLoader();\r\n        }\r\n\r\n        return init();\r\n    }\r\n};\r\n","export function obterCookie(name) {\r\n    var nameEQ = name + \"=\";\r\n    var ca = document.cookie.split(';');\r\n    for (var i = 0; i < ca.length; i++) {\r\n        var c = ca[i];\r\n        while (c.charAt(0) == ' ') c = c.substring(1, c.length);\r\n        if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);\r\n    }\r\n    return null;\r\n}\r\n","export function obterDispositivo() {\r\n    if (navigator.userAgent.match(/Tablet|iPad/i)) {\r\n        return 'Tablet';\r\n    } else if (navigator.userAgent.match(/Mobile|Windows Phone|Lumia|Android|webOS|iPhone|iPod|Blackberry|PlayBook|BB10|Opera Mini|\\bCrMo\\/|Opera Mobi/i)) {\r\n        return 'Mobile';\r\n    } else {\r\n        return 'Desktop';\r\n    }\r\n}","import { isNullOrEmpty } from \"./isNullOrEmpty\";\r\nimport { obterQueryString } from \"./obterQueryString\";\r\n\r\nexport function obterOrigem() {\r\n    let origem = document.referrer.split('/')[2];\r\n    if (isNullOrEmpty(origem)) {\r\n        origem = obterQueryString().source;\r\n    }\r\n    if (isNullOrEmpty(origem)) {\r\n        origem = obterQueryString()['utm_source'];\r\n    }\r\n    return origem;\r\n}","export function obterQueryString() {\r\n    const params = new Proxy(new URLSearchParams(window.location.search), {\r\n        get: (searchParams, prop) => {\r\n            if (prop == 'getAll') {\r\n                const array = []\r\n\r\n                for (const iterator of searchParams.keys()) {\r\n                    array[iterator] = searchParams.getAll(iterator);\r\n                }\r\n\r\n                return array;\r\n            }\r\n\r\n            return searchParams.get(prop);\r\n        }\r\n    });\r\n\r\n    return params;\r\n}\r\n","import { validarResultado } from \"./validarResultado\";\r\n\r\nexport async function postFetch(url, body, callbackSucesso, callbackErro, callbackErroConexao, exibirToastErroConexao, exibirToastErroServidor, headers = { }) {\r\n    const retorno = await fetch(url, {\r\n        method: 'POST',\r\n        body: body,\r\n        headers,\r\n    });\r\n\r\n    return validarResultado(retorno, callbackSucesso, callbackErro, callbackErroConexao, exibirToastErroConexao, exibirToastErroServidor);\r\n}\r\n","export function salvarCookie(name, value, days) {\r\n    var expires = \"\";\r\n    if (days) {\r\n        var date = new Date();\r\n        date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));\r\n        expires = \"; expires=\" + date.toUTCString();\r\n    }\r\n    document.cookie = name + \"=\" + (value || \"\") + expires + \"; path=/\";\r\n}","import { Notify } from \"notiflix/build/notiflix-notify-aio\";\r\n\r\n\r\nexport async function toastErroCarregar(mensagem) {\r\n    Notify.failure(mensagem);\r\n}\r\n","import { Notify } from \"notiflix/build/notiflix-notify-aio\";\r\n\r\nexport async function toastSucesso(mensagem) {\r\n    Notify.success(mensagem);\r\n}\r\n","import { obterDispositivo } from './obterDispositivo';\r\n/**\r\n * Insere um novo track de evento.\r\n * @param {string} name - Nome do evento.\r\n * @param {object} data - Informa��o do evento.\r\n */\r\nexport function addTrack(name, data = {}) {\r\n    if (!window.mixpanel) {\r\n        return;\r\n    }\r\n    if (data == null || data == undefined) { data = {}; }\r\n\r\n    const hotSiteEmpresaID = document.getElementById(\"hotSiteEmpresaID\");\r\n    const hotSiteUrl = document.getElementById('hotSiteUrl');\r\n    if (hotSiteEmpresaID != undefined && hotSiteUrl != undefined)\r\n    {\r\n        data.empresaID = hotSiteEmpresaID.value;\r\n        data.hotsite = hotSiteUrl.value;\r\n    }\r\n    else {\r\n        data.hotsite = 'empregare';\r\n    }\r\n    data.dispositivo = obterDispositivo();\r\n\r\n    mixpanel.track(name, data);\r\n}","export function uuid(){\r\n    var dt = new Date().getTime();\r\n    var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\r\n        var r = (dt + Math.random()*16)%16 | 0;\r\n        dt = Math.floor(dt/16);\r\n        return (c=='x' ? r :(r&0x3|0x8)).toString(16);\r\n    });\r\n    return uuid;\r\n}","import { toastErroCarregar } from \"./toastErroCarregar\";\r\nimport { inicializarInternacionalizacao } from \"../localizacao/global/global\";\r\nimport i18next from \"i18next\";\r\n\r\nexport async function validarResultado(retorno, callbackSucesso, callbackErro, callbackErroConexao, exibirToastErroConexao = true, exibirToastErroServidor = true) {\r\n    if (retorno.status != 200) {\r\n\r\n        if (exibirToastErroConexao) {\r\n            inicializarInternacionalizacao()\r\n            toastErroCarregar(i18next.t('ErroConexaoGenerico'));\r\n        }\r\n\r\n        return callbackErroConexao ? callbackErroConexao() : null;\r\n    }\r\n\r\n    const resultados = await retorno.json();\r\n\r\n    if (resultados.sucesso || resultados.Sucesso) {\r\n        return callbackSucesso(resultados);\r\n    }\r\n\r\n\r\n    if (exibirToastErroServidor)\r\n        toastErroCarregar(resultados.mensagem);\r\n\r\n    return callbackErro ? callbackErro(resultados) : null;\r\n\r\n\r\n\r\n}\r\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n  __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n  return value;\n};\nconst EMAIL_REGEXP = /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\nconst NUMBER_REGEXP = /^[0-9]+$/;\nconst PASSWORD_REGEXP = /^(?=.*[A-Za-z])(?=.*\\d).{8,}$/;\nconst STRONG_PASSWORD_REGEXP = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[@$!%*?&])[A-Za-z\\d@$!%*?&]{8,}$/;\nconst isEmpty = (value) => {\n  let newVal = value;\n  if (typeof value === \"string\") {\n    newVal = value.trim();\n  }\n  return !newVal;\n};\nconst isEmail = (value) => {\n  return EMAIL_REGEXP.test(value);\n};\nconst isLengthMoreThanMax = (value, len) => {\n  return value.length > len;\n};\nconst isLengthLessThanMin = (value, len) => {\n  return value.length < len;\n};\nconst isNumber = (value) => {\n  return NUMBER_REGEXP.test(value);\n};\nconst isPassword = (value) => {\n  return PASSWORD_REGEXP.test(value);\n};\nconst isStrongPassword = (value) => {\n  return STRONG_PASSWORD_REGEXP.test(value);\n};\nconst isNumberMoreThanMax = (value, len) => {\n  return value > len;\n};\nconst isNumberLessThanMin = (value, len) => {\n  return value < len;\n};\nvar Rules = /* @__PURE__ */ ((Rules2) => {\n  Rules2[\"Required\"] = \"required\";\n  Rules2[\"Email\"] = \"email\";\n  Rules2[\"MinLength\"] = \"minLength\";\n  Rules2[\"MaxLength\"] = \"maxLength\";\n  Rules2[\"Password\"] = \"password\";\n  Rules2[\"Number\"] = \"number\";\n  Rules2[\"MaxNumber\"] = \"maxNumber\";\n  Rules2[\"MinNumber\"] = \"minNumber\";\n  Rules2[\"StrongPassword\"] = \"strongPassword\";\n  Rules2[\"CustomRegexp\"] = \"customRegexp\";\n  Rules2[\"MinFilesCount\"] = \"minFilesCount\";\n  Rules2[\"MaxFilesCount\"] = \"maxFilesCount\";\n  Rules2[\"Files\"] = \"files\";\n  return Rules2;\n})(Rules || {});\nvar GroupRules = /* @__PURE__ */ ((GroupRules2) => {\n  GroupRules2[\"Required\"] = \"required\";\n  return GroupRules2;\n})(GroupRules || {});\nvar CustomStyleTagIds = /* @__PURE__ */ ((CustomStyleTagIds2) => {\n  CustomStyleTagIds2[\"Label\"] = \"label\";\n  CustomStyleTagIds2[\"LabelArrow\"] = \"labelArrow\";\n  return CustomStyleTagIds2;\n})(CustomStyleTagIds || {});\nconst defaultDictionary = [\n  {\n    key: Rules.Required,\n    dict: {\n      en: \"The field is required\"\n    }\n  },\n  {\n    key: Rules.Email,\n    dict: {\n      en: \"Email has invalid format\"\n    }\n  },\n  {\n    key: Rules.MaxLength,\n    dict: {\n      en: \"The field must contain a maximum of :value characters\"\n    }\n  },\n  {\n    key: Rules.MinLength,\n    dict: {\n      en: \"The field must contain a minimum of :value characters\"\n    }\n  },\n  {\n    key: Rules.Password,\n    dict: {\n      en: \"Password must contain minimum eight characters, at least one letter and one number\"\n    }\n  },\n  {\n    key: Rules.StrongPassword,\n    dict: {\n      en: \"Password should contain minimum eight characters, at least one uppercase letter, one lowercase letter, one number and one special character\"\n    }\n  },\n  {\n    key: Rules.Number,\n    dict: {\n      en: \"Value should be a number\"\n    }\n  },\n  {\n    key: Rules.MaxNumber,\n    dict: {\n      en: \"Number should be less or equal than :value\"\n    }\n  },\n  {\n    key: Rules.MinNumber,\n    dict: {\n      en: \"Number should be more or equal than :value\"\n    }\n  },\n  {\n    key: Rules.MinFilesCount,\n    dict: {\n      en: \"Files count should be more or equal than :value\"\n    }\n  },\n  {\n    key: Rules.MaxFilesCount,\n    dict: {\n      en: \"Files count should be less or equal than :value\"\n    }\n  },\n  {\n    key: Rules.Files,\n    dict: {\n      en: \"Uploaded files have one or several invalid properties (extension/size/type etc).\"\n    }\n  }\n];\nconst DEFAULT_ERROR_FIELD_MESSAGE = \"Value is incorrect\";\nconst isPromise = (val) => typeof val === \"object\" && val !== null && \"then\" in val && typeof val.then === \"function\";\nconst getNodeParents = (el) => {\n  let elem = el;\n  const els = [];\n  while (elem) {\n    els.unshift(elem);\n    elem = elem.parentNode;\n  }\n  return els;\n};\nconst getClosestParent = (groups, parents) => {\n  const reversedParents = [...parents].reverse();\n  for (let i = 0, len = reversedParents.length; i < len; ++i) {\n    const parent = reversedParents[i];\n    for (const key in groups) {\n      const group = groups[key];\n      if (group.groupElem === parent) {\n        return [key, group];\n      }\n    }\n  }\n  return null;\n};\nconst getClassList = (classList) => {\n  if (Array.isArray(classList)) {\n    return classList.filter((cls) => cls.length > 0);\n  }\n  if (typeof classList === \"string\" && classList.trim()) {\n    return [...classList.split(\" \").filter((cls) => cls.length > 0)];\n  }\n  return [];\n};\nconst isElement = (element) => {\n  return element instanceof Element || element instanceof HTMLDocument;\n};\nconst errorLabelCss = `.just-validate-error-label[data-tooltip=true]{position:fixed;padding:4px 8px;background:#423f3f;color:#fff;white-space:nowrap;z-index:10;border-radius:4px;transform:translateY(-5px)}.just-validate-error-label[data-tooltip=true]:before{content:'';width:0;height:0;border-left:solid 5px transparent;border-right:solid 5px transparent;border-bottom:solid 5px #423f3f;position:absolute;z-index:3;display:block;bottom:-5px;transform:rotate(180deg);left:calc(50% - 5px)}.just-validate-error-label[data-tooltip=true][data-direction=left]{transform:translateX(-5px)}.just-validate-error-label[data-tooltip=true][data-direction=left]:before{right:-7px;bottom:auto;left:auto;top:calc(50% - 2px);transform:rotate(90deg)}.just-validate-error-label[data-tooltip=true][data-direction=right]{transform:translateX(5px)}.just-validate-error-label[data-tooltip=true][data-direction=right]:before{right:auto;bottom:auto;left:-7px;top:calc(50% - 2px);transform:rotate(-90deg)}.just-validate-error-label[data-tooltip=true][data-direction=bottom]{transform:translateY(5px)}.just-validate-error-label[data-tooltip=true][data-direction=bottom]:before{right:auto;bottom:auto;left:calc(50% - 5px);top:-5px;transform:rotate(0)}`;\nconst TOOLTIP_ARROW_HEIGHT = 5;\nconst defaultGlobalConfig = {\n  errorFieldStyle: {\n    color: \"#b81111\",\n    border: \"1px solid #B81111\"\n  },\n  errorFieldCssClass: \"just-validate-error-field\",\n  successFieldCssClass: \"just-validate-success-field\",\n  errorLabelStyle: {\n    color: \"#b81111\"\n  },\n  errorLabelCssClass: \"just-validate-error-label\",\n  successLabelCssClass: \"just-validate-success-label\",\n  focusInvalidField: true,\n  lockForm: true,\n  testingMode: false,\n  validateBeforeSubmitting: false\n};\nclass JustValidate {\n  constructor(form, globalConfig, dictLocale) {\n    __publicField(this, \"form\", null);\n    __publicField(this, \"fields\", {});\n    __publicField(this, \"groupFields\", {});\n    __publicField(this, \"errors\", {});\n    __publicField(this, \"isValid\", false);\n    __publicField(this, \"isSubmitted\", false);\n    __publicField(this, \"globalConfig\", defaultGlobalConfig);\n    __publicField(this, \"errorLabels\", {});\n    __publicField(this, \"successLabels\", {});\n    __publicField(this, \"eventListeners\", []);\n    __publicField(this, \"dictLocale\", defaultDictionary);\n    __publicField(this, \"currentLocale\", \"en\");\n    __publicField(this, \"customStyleTags\", {});\n    __publicField(this, \"onSuccessCallback\");\n    __publicField(this, \"onFailCallback\");\n    __publicField(this, \"tooltips\", []);\n    __publicField(this, \"lastScrollPosition\");\n    __publicField(this, \"isScrollTick\");\n    __publicField(this, \"fieldIds\", /* @__PURE__ */ new Map());\n    __publicField(this, \"getKeyByFieldSelector\", (field) => {\n      return this.fieldIds.get(field);\n    });\n    __publicField(this, \"getFieldSelectorByKey\", (key) => {\n      for (const [fieldSelector, k] of this.fieldIds) {\n        if (key === k) {\n          return fieldSelector;\n        }\n      }\n      return void 0;\n    });\n    __publicField(this, \"setKeyByFieldSelector\", (field) => {\n      if (this.fieldIds.has(field)) {\n        return this.fieldIds.get(field);\n      }\n      const key = String(this.fieldIds.size + 1);\n      this.fieldIds.set(field, key);\n      return key;\n    });\n    __publicField(this, \"refreshAllTooltips\", () => {\n      this.tooltips.forEach((item) => {\n        item.refresh();\n      });\n    });\n    __publicField(this, \"handleDocumentScroll\", () => {\n      this.lastScrollPosition = window.scrollY;\n      if (!this.isScrollTick) {\n        window.requestAnimationFrame(() => {\n          this.refreshAllTooltips();\n          this.isScrollTick = false;\n        });\n        this.isScrollTick = true;\n      }\n    });\n    __publicField(this, \"formSubmitHandler\", (ev) => {\n      ev.preventDefault();\n      this.isSubmitted = true;\n      this.validateHandler(ev);\n    });\n    __publicField(this, \"handleFieldChange\", (target) => {\n      let foundKey;\n      for (const key in this.fields) {\n        const field = this.fields[key];\n        if (field.elem === target) {\n          foundKey = key;\n          break;\n        }\n      }\n      if (!foundKey) {\n        return;\n      }\n      this.validateField(foundKey, true);\n    });\n    __publicField(this, \"handleGroupChange\", (target) => {\n      let currentGroup;\n      let foundKey;\n      for (const key in this.groupFields) {\n        const group = this.groupFields[key];\n        if (group.elems.find((elem) => elem === target)) {\n          currentGroup = group;\n          foundKey = key;\n          break;\n        }\n      }\n      if (!currentGroup || !foundKey) {\n        return;\n      }\n      this.validateGroup(foundKey, currentGroup);\n    });\n    __publicField(this, \"handlerChange\", (ev) => {\n      if (!ev.target) {\n        return;\n      }\n      this.handleFieldChange(ev.target);\n      this.handleGroupChange(ev.target);\n      this.renderErrors();\n    });\n    this.initialize(form, globalConfig, dictLocale);\n  }\n  initialize(form, globalConfig, dictLocale) {\n    this.form = null;\n    this.errors = {};\n    this.isValid = false;\n    this.isSubmitted = false;\n    this.globalConfig = defaultGlobalConfig;\n    this.errorLabels = {};\n    this.successLabels = {};\n    this.eventListeners = [];\n    this.customStyleTags = {};\n    this.tooltips = [];\n    this.currentLocale = \"en\";\n    if (typeof form === \"string\") {\n      const elem = document.querySelector(form);\n      if (!elem) {\n        throw Error(\n          `Form with ${form} selector not found! Please check the form selector`\n        );\n      }\n      this.setForm(elem);\n    } else if (form instanceof HTMLFormElement) {\n      this.setForm(form);\n    } else {\n      throw Error(\n        `Form selector is not valid. Please specify a string selector or a DOM element.`\n      );\n    }\n    this.globalConfig = { ...defaultGlobalConfig, ...globalConfig };\n    if (dictLocale) {\n      this.dictLocale = [...dictLocale, ...defaultDictionary];\n    }\n    if (this.isTooltip()) {\n      const styleTag = document.createElement(\"style\");\n      styleTag.textContent = errorLabelCss;\n      this.customStyleTags[CustomStyleTagIds.Label] = document.head.appendChild(styleTag);\n      this.addListener(\"scroll\", document, this.handleDocumentScroll);\n    }\n  }\n  getLocalisedString(rule, ruleValue, customMsg) {\n    var _a;\n    const search = customMsg != null ? customMsg : rule;\n    let localisedStr = (_a = this.dictLocale.find((item) => item.key === search)) == null ? void 0 : _a.dict[this.currentLocale];\n    if (!localisedStr) {\n      if (customMsg) {\n        localisedStr = customMsg;\n      }\n    }\n    if (localisedStr && ruleValue !== void 0) {\n      switch (rule) {\n        case Rules.MaxLength:\n        case Rules.MinLength:\n        case Rules.MaxNumber:\n        case Rules.MinNumber:\n        case Rules.MinFilesCount:\n        case Rules.MaxFilesCount:\n          localisedStr = localisedStr.replace(\":value\", String(ruleValue));\n      }\n    }\n    return localisedStr || customMsg || DEFAULT_ERROR_FIELD_MESSAGE;\n  }\n  getFieldErrorMessage(fieldRule, elem) {\n    const msg = typeof fieldRule.errorMessage === \"function\" ? fieldRule.errorMessage(this.getElemValue(elem), this.fields) : fieldRule.errorMessage;\n    return this.getLocalisedString(fieldRule.rule, fieldRule.value, msg);\n  }\n  getFieldSuccessMessage(successMessage, elem) {\n    const msg = typeof successMessage === \"function\" ? successMessage(this.getElemValue(elem), this.fields) : successMessage;\n    return this.getLocalisedString(void 0, void 0, msg);\n  }\n  getGroupErrorMessage(groupRule) {\n    return this.getLocalisedString(\n      groupRule.rule,\n      void 0,\n      groupRule.errorMessage\n    );\n  }\n  getGroupSuccessMessage(groupRule) {\n    if (!groupRule.successMessage) {\n      return void 0;\n    }\n    return this.getLocalisedString(\n      void 0,\n      void 0,\n      groupRule.successMessage\n    );\n  }\n  setFieldInvalid(key, fieldRule) {\n    this.fields[key].isValid = false;\n    this.fields[key].errorMessage = this.getFieldErrorMessage(\n      fieldRule,\n      this.fields[key].elem\n    );\n  }\n  setFieldValid(key, successMessage) {\n    this.fields[key].isValid = true;\n    if (successMessage !== void 0) {\n      this.fields[key].successMessage = this.getFieldSuccessMessage(\n        successMessage,\n        this.fields[key].elem\n      );\n    }\n  }\n  setGroupInvalid(key, groupRule) {\n    this.groupFields[key].isValid = false;\n    this.groupFields[key].errorMessage = this.getGroupErrorMessage(groupRule);\n  }\n  setGroupValid(key, groupRule) {\n    this.groupFields[key].isValid = true;\n    this.groupFields[key].successMessage = this.getGroupSuccessMessage(groupRule);\n  }\n  getElemValue(elem) {\n    switch (elem.type) {\n      case \"checkbox\":\n        return elem.checked;\n      case \"file\":\n        return elem.files;\n      default:\n        return elem.value;\n    }\n  }\n  validateGroupRule(key, elems, groupRule) {\n    switch (groupRule.rule) {\n      case GroupRules.Required: {\n        if (elems.every((elem) => !elem.checked)) {\n          this.setGroupInvalid(key, groupRule);\n        } else {\n          this.setGroupValid(key, groupRule);\n        }\n      }\n    }\n  }\n  validateFieldRule(key, elem, fieldRule, afterInputChanged = false) {\n    const ruleValue = fieldRule.value;\n    const elemValue = this.getElemValue(elem);\n    if (fieldRule.plugin) {\n      const result = fieldRule.plugin(\n        elemValue,\n        this.fields\n      );\n      if (!result) {\n        this.setFieldInvalid(key, fieldRule);\n      }\n      return;\n    }\n    switch (fieldRule.rule) {\n      case Rules.Required: {\n        if (isEmpty(elemValue)) {\n          this.setFieldInvalid(key, fieldRule);\n        }\n        break;\n      }\n      case Rules.Email: {\n        if (typeof elemValue !== \"string\") {\n          this.setFieldInvalid(key, fieldRule);\n          break;\n        }\n        if (!isEmail(elemValue)) {\n          this.setFieldInvalid(key, fieldRule);\n        }\n        break;\n      }\n      case Rules.MaxLength: {\n        if (ruleValue === void 0) {\n          console.error(\n            `Value for ${fieldRule.rule} rule for [${key}] field is not defined. The field will be always invalid.`\n          );\n          this.setFieldInvalid(key, fieldRule);\n          break;\n        }\n        if (typeof ruleValue !== \"number\") {\n          console.error(\n            `Value for ${fieldRule.rule} rule for [${key}] should be a number. The field will be always invalid.`\n          );\n          this.setFieldInvalid(key, fieldRule);\n          break;\n        }\n        if (typeof elemValue !== \"string\") {\n          this.setFieldInvalid(key, fieldRule);\n          break;\n        }\n        if (elemValue === \"\") {\n          break;\n        }\n        if (isLengthMoreThanMax(elemValue, ruleValue)) {\n          this.setFieldInvalid(key, fieldRule);\n        }\n        break;\n      }\n      case Rules.MinLength: {\n        if (ruleValue === void 0) {\n          console.error(\n            `Value for ${fieldRule.rule} rule for [${key}] field is not defined. The field will be always invalid.`\n          );\n          this.setFieldInvalid(key, fieldRule);\n          break;\n        }\n        if (typeof ruleValue !== \"number\") {\n          console.error(\n            `Value for ${fieldRule.rule} rule for [${key}] should be a number. The field will be always invalid.`\n          );\n          this.setFieldInvalid(key, fieldRule);\n          break;\n        }\n        if (typeof elemValue !== \"string\") {\n          this.setFieldInvalid(key, fieldRule);\n          break;\n        }\n        if (elemValue === \"\") {\n          break;\n        }\n        if (isLengthLessThanMin(elemValue, ruleValue)) {\n          this.setFieldInvalid(key, fieldRule);\n        }\n        break;\n      }\n      case Rules.Password: {\n        if (typeof elemValue !== \"string\") {\n          this.setFieldInvalid(key, fieldRule);\n          break;\n        }\n        if (elemValue === \"\") {\n          break;\n        }\n        if (!isPassword(elemValue)) {\n          this.setFieldInvalid(key, fieldRule);\n        }\n        break;\n      }\n      case Rules.StrongPassword: {\n        if (typeof elemValue !== \"string\") {\n          this.setFieldInvalid(key, fieldRule);\n          break;\n        }\n        if (elemValue === \"\") {\n          break;\n        }\n        if (!isStrongPassword(elemValue)) {\n          this.setFieldInvalid(key, fieldRule);\n        }\n        break;\n      }\n      case Rules.Number: {\n        if (typeof elemValue !== \"string\") {\n          this.setFieldInvalid(key, fieldRule);\n          break;\n        }\n        if (elemValue === \"\") {\n          break;\n        }\n        if (!isNumber(elemValue)) {\n          this.setFieldInvalid(key, fieldRule);\n        }\n        break;\n      }\n      case Rules.MaxNumber: {\n        if (ruleValue === void 0) {\n          console.error(\n            `Value for ${fieldRule.rule} rule for [${key}] field is not defined. The field will be always invalid.`\n          );\n          this.setFieldInvalid(key, fieldRule);\n          break;\n        }\n        if (typeof ruleValue !== \"number\") {\n          console.error(\n            `Value for ${fieldRule.rule} rule for [${key}] field should be a number. The field will be always invalid.`\n          );\n          this.setFieldInvalid(key, fieldRule);\n          break;\n        }\n        if (typeof elemValue !== \"string\") {\n          this.setFieldInvalid(key, fieldRule);\n          break;\n        }\n        if (elemValue === \"\") {\n          break;\n        }\n        const num = +elemValue;\n        if (Number.isNaN(num) || isNumberMoreThanMax(num, ruleValue)) {\n          this.setFieldInvalid(key, fieldRule);\n        }\n        break;\n      }\n      case Rules.MinNumber: {\n        if (ruleValue === void 0) {\n          console.error(\n            `Value for ${fieldRule.rule} rule for [${key}] field is not defined. The field will be always invalid.`\n          );\n          this.setFieldInvalid(key, fieldRule);\n          break;\n        }\n        if (typeof ruleValue !== \"number\") {\n          console.error(\n            `Value for ${fieldRule.rule} rule for [${key}] field should be a number. The field will be always invalid.`\n          );\n          this.setFieldInvalid(key, fieldRule);\n          break;\n        }\n        if (typeof elemValue !== \"string\") {\n          this.setFieldInvalid(key, fieldRule);\n          break;\n        }\n        if (elemValue === \"\") {\n          break;\n        }\n        const num = +elemValue;\n        if (Number.isNaN(num) || isNumberLessThanMin(num, ruleValue)) {\n          this.setFieldInvalid(key, fieldRule);\n        }\n        break;\n      }\n      case Rules.CustomRegexp: {\n        if (ruleValue === void 0) {\n          console.error(\n            `Value for ${fieldRule.rule} rule for [${key}] field is not defined. This field will be always invalid.`\n          );\n          this.setFieldInvalid(key, fieldRule);\n          return;\n        }\n        let regexp;\n        try {\n          regexp = new RegExp(ruleValue);\n        } catch (e) {\n          console.error(\n            `Value for ${fieldRule.rule} rule for [${key}] should be a valid regexp. This field will be always invalid.`\n          );\n          this.setFieldInvalid(key, fieldRule);\n          break;\n        }\n        const str = String(elemValue);\n        if (str !== \"\" && !regexp.test(str)) {\n          this.setFieldInvalid(key, fieldRule);\n        }\n        break;\n      }\n      case Rules.MinFilesCount: {\n        if (ruleValue === void 0) {\n          console.error(\n            `Value for ${fieldRule.rule} rule for [${key}] field is not defined. This field will be always invalid.`\n          );\n          this.setFieldInvalid(key, fieldRule);\n          break;\n        }\n        if (typeof ruleValue !== \"number\") {\n          console.error(\n            `Value for ${fieldRule.rule} rule for [${key}] field should be a number. The field will be always invalid.`\n          );\n          this.setFieldInvalid(key, fieldRule);\n          break;\n        }\n        if (Number.isFinite(elemValue == null ? void 0 : elemValue.length) && elemValue.length < ruleValue) {\n          this.setFieldInvalid(key, fieldRule);\n          break;\n        }\n        break;\n      }\n      case Rules.MaxFilesCount: {\n        if (ruleValue === void 0) {\n          console.error(\n            `Value for ${fieldRule.rule} rule for [${key}] field is not defined. This field will be always invalid.`\n          );\n          this.setFieldInvalid(key, fieldRule);\n          break;\n        }\n        if (typeof ruleValue !== \"number\") {\n          console.error(\n            `Value for ${fieldRule.rule} rule for [${key}] field should be a number. The field will be always invalid.`\n          );\n          this.setFieldInvalid(key, fieldRule);\n          break;\n        }\n        if (Number.isFinite(elemValue == null ? void 0 : elemValue.length) && elemValue.length > ruleValue) {\n          this.setFieldInvalid(key, fieldRule);\n          break;\n        }\n        break;\n      }\n      case Rules.Files: {\n        if (ruleValue === void 0) {\n          console.error(\n            `Value for ${fieldRule.rule} rule for [${key}] field is not defined. This field will be always invalid.`\n          );\n          this.setFieldInvalid(key, fieldRule);\n          return;\n        }\n        if (typeof ruleValue !== \"object\") {\n          console.error(\n            `Value for ${fieldRule.rule} rule for [${key}] field should be an object. This field will be always invalid.`\n          );\n          this.setFieldInvalid(key, fieldRule);\n          return;\n        }\n        const filesConfig = ruleValue.files;\n        if (typeof filesConfig !== \"object\") {\n          console.error(\n            `Value for ${fieldRule.rule} rule for [${key}] field should be an object with files array. This field will be always invalid.`\n          );\n          this.setFieldInvalid(key, fieldRule);\n          return;\n        }\n        const isFilePropsInvalid = (file, fileConfig) => {\n          const minSizeInvalid = Number.isFinite(fileConfig.minSize) && file.size < fileConfig.minSize;\n          const maxSizeInvalid = Number.isFinite(fileConfig.maxSize) && file.size > fileConfig.maxSize;\n          const nameInvalid = Array.isArray(fileConfig.names) && !fileConfig.names.includes(file.name);\n          const extInvalid = Array.isArray(fileConfig.extensions) && !fileConfig.extensions.includes(\n            file.name.split(\".\")[file.name.split(\".\").length - 1]\n          );\n          const typeInvalid = Array.isArray(fileConfig.types) && !fileConfig.types.includes(file.type);\n          return minSizeInvalid || maxSizeInvalid || nameInvalid || extInvalid || typeInvalid;\n        };\n        if (typeof elemValue === \"object\" && elemValue !== null) {\n          for (let fileIdx = 0, len = elemValue.length; fileIdx < len; ++fileIdx) {\n            const file = elemValue.item(fileIdx);\n            if (!file) {\n              this.setFieldInvalid(key, fieldRule);\n              break;\n            }\n            const filesInvalid = isFilePropsInvalid(file, filesConfig);\n            if (filesInvalid) {\n              this.setFieldInvalid(key, fieldRule);\n              break;\n            }\n          }\n        }\n        break;\n      }\n      default: {\n        if (typeof fieldRule.validator !== \"function\") {\n          console.error(\n            `Validator for custom rule for [${key}] field should be a function. This field will be always invalid.`\n          );\n          this.setFieldInvalid(key, fieldRule);\n          return;\n        }\n        const result = fieldRule.validator(\n          elemValue,\n          this.fields\n        );\n        if (typeof result !== \"boolean\" && typeof result !== \"function\") {\n          console.error(\n            `Validator return value for [${key}] field should be boolean or function. It will be cast to boolean.`\n          );\n        }\n        if (typeof result === \"function\") {\n          if (afterInputChanged) {\n            this.fields[key].asyncCheckPending = true;\n          } else {\n            this.fields[key].asyncCheckPending = false;\n            const promise = result();\n            if (!isPromise(promise)) {\n              console.error(\n                `Validator function for custom rule for [${key}] field should return a Promise. This field will be always invalid.`\n              );\n              this.setFieldInvalid(key, fieldRule);\n              return;\n            }\n            return promise.then((resp) => {\n              if (!resp) {\n                this.setFieldInvalid(key, fieldRule);\n              }\n            }).catch(() => {\n              this.setFieldInvalid(key, fieldRule);\n            });\n          }\n        }\n        if (!result) {\n          this.setFieldInvalid(key, fieldRule);\n        }\n      }\n    }\n  }\n  validateField(key, afterInputChanged = false) {\n    var _a;\n    const field = this.fields[key];\n    field.isValid = true;\n    const promises = [];\n    [...field.rules].reverse().forEach((rule) => {\n      const res = this.validateFieldRule(\n        key,\n        field.elem,\n        rule,\n        afterInputChanged\n      );\n      if (isPromise(res)) {\n        promises.push(res);\n      }\n    });\n    if (field.isValid) {\n      this.setFieldValid(key, (_a = field.config) == null ? void 0 : _a.successMessage);\n    }\n    return Promise.allSettled(promises);\n  }\n  revalidateField(fieldSelector) {\n    if (typeof fieldSelector !== \"string\" && !isElement(fieldSelector)) {\n      throw Error(\n        `Field selector is not valid. Please specify a string selector or a valid DOM element.`\n      );\n    }\n    const key = this.getKeyByFieldSelector(fieldSelector);\n    if (!key || !this.fields[key]) {\n      console.error(`Field not found. Check the field selector.`);\n      return Promise.reject();\n    }\n    return new Promise((resolve) => {\n      this.validateField(key, true).finally(() => {\n        this.clearFieldStyle(key);\n        this.clearFieldLabel(key);\n        this.renderFieldError(key);\n        resolve(!!this.fields[key].isValid);\n      });\n    });\n  }\n  validateGroup(key, group) {\n    const promises = [];\n    [...group.rules].reverse().forEach((rule) => {\n      const res = this.validateGroupRule(key, group.elems, rule);\n      if (isPromise(res)) {\n        promises.push(res);\n      }\n    });\n    return Promise.allSettled(promises);\n  }\n  focusInvalidField() {\n    for (const key in this.fields) {\n      const field = this.fields[key];\n      if (!field.isValid) {\n        setTimeout(() => field.elem.focus(), 0);\n        break;\n      }\n    }\n  }\n  afterSubmitValidation(forceRevalidation = false) {\n    this.renderErrors(forceRevalidation);\n    if (this.globalConfig.focusInvalidField) {\n      this.focusInvalidField();\n    }\n  }\n  validate(forceRevalidation = false) {\n    return new Promise((resolve) => {\n      const promises = [];\n      Object.keys(this.fields).forEach((key) => {\n        const promise = this.validateField(key);\n        if (isPromise(promise)) {\n          promises.push(promise);\n        }\n      });\n      Object.keys(this.groupFields).forEach((key) => {\n        const group = this.groupFields[key];\n        const promise = this.validateGroup(key, group);\n        if (isPromise(promise)) {\n          promises.push(promise);\n        }\n      });\n      if (promises.length) {\n        Promise.allSettled(promises).then(() => {\n          this.afterSubmitValidation(forceRevalidation);\n          resolve(true);\n        });\n      } else {\n        this.afterSubmitValidation(forceRevalidation);\n        resolve(false);\n      }\n    });\n  }\n  revalidate() {\n    return new Promise((resolve) => {\n      this.validateHandler(void 0, true).finally(() => {\n        if (this.globalConfig.focusInvalidField) {\n          this.focusInvalidField();\n        }\n        resolve(this.isValid);\n      });\n    });\n  }\n  validateHandler(ev, forceRevalidation = false) {\n    if (this.globalConfig.lockForm) {\n      this.lockForm();\n    }\n    return this.validate(forceRevalidation).finally(() => {\n      var _a, _b;\n      if (this.globalConfig.lockForm) {\n        this.unlockForm();\n      }\n      if (this.isValid) {\n        (_a = this.onSuccessCallback) == null ? void 0 : _a.call(this, ev);\n      } else {\n        (_b = this.onFailCallback) == null ? void 0 : _b.call(this, this.fields, this.groupFields);\n      }\n    });\n  }\n  setForm(form) {\n    this.form = form;\n    this.form.setAttribute(\"novalidate\", \"novalidate\");\n    this.removeListener(\"submit\", this.form, this.formSubmitHandler);\n    this.addListener(\"submit\", this.form, this.formSubmitHandler);\n  }\n  addListener(type, elem, handler) {\n    elem.addEventListener(type, handler);\n    this.eventListeners.push({ type, elem, func: handler });\n  }\n  removeListener(type, elem, handler) {\n    elem.removeEventListener(type, handler);\n    this.eventListeners = this.eventListeners.filter(\n      (item) => item.type !== type || item.elem !== elem\n    );\n  }\n  addField(fieldSelector, rules, config) {\n    if (typeof fieldSelector !== \"string\" && !isElement(fieldSelector)) {\n      throw Error(\n        `Field selector is not valid. Please specify a string selector or a valid DOM element.`\n      );\n    }\n    let elem;\n    if (typeof fieldSelector === \"string\") {\n      elem = this.form.querySelector(fieldSelector);\n    } else {\n      elem = fieldSelector;\n    }\n    if (!elem) {\n      throw Error(\n        `Field doesn't exist in the DOM! Please check the field selector.`\n      );\n    }\n    if (!Array.isArray(rules) || !rules.length) {\n      throw Error(\n        `Rules argument should be an array and should contain at least 1 element.`\n      );\n    }\n    rules.forEach((item) => {\n      if (!(\"rule\" in item || \"validator\" in item || \"plugin\" in item)) {\n        throw Error(\n          `Rules argument must contain at least one rule or validator property.`\n        );\n      }\n      if (!item.validator && !item.plugin && (!item.rule || !Object.values(Rules).includes(item.rule))) {\n        throw Error(\n          `Rule should be one of these types: ${Object.values(Rules).join(\n            \", \"\n          )}. Provided value: ${item.rule}`\n        );\n      }\n    });\n    const key = this.setKeyByFieldSelector(fieldSelector);\n    this.fields[key] = {\n      elem,\n      rules,\n      isValid: void 0,\n      config\n    };\n    this.setListeners(elem);\n    if (this.isSubmitted) {\n      this.validate();\n    }\n    return this;\n  }\n  removeField(fieldSelector) {\n    if (typeof fieldSelector !== \"string\" && !isElement(fieldSelector)) {\n      throw Error(\n        `Field selector is not valid. Please specify a string selector or a valid DOM element.`\n      );\n    }\n    const key = this.getKeyByFieldSelector(fieldSelector);\n    if (!key || !this.fields[key]) {\n      console.error(`Field not found. Check the field selector.`);\n      return this;\n    }\n    const type = this.getListenerType(this.fields[key].elem.type);\n    this.removeListener(type, this.fields[key].elem, this.handlerChange);\n    this.clearErrors();\n    delete this.fields[key];\n    return this;\n  }\n  removeGroup(group) {\n    if (typeof group !== \"string\") {\n      throw Error(\n        `Group selector is not valid. Please specify a string selector.`\n      );\n    }\n    const key = this.getKeyByFieldSelector(group);\n    if (!key || !this.groupFields[key]) {\n      console.error(`Group not found. Check the group selector.`);\n      return this;\n    }\n    this.groupFields[key].elems.forEach((elem) => {\n      const type = this.getListenerType(elem.type);\n      this.removeListener(type, elem, this.handlerChange);\n    });\n    this.clearErrors();\n    delete this.groupFields[key];\n    return this;\n  }\n  addRequiredGroup(groupField, errorMessage, config, successMessage) {\n    if (typeof groupField !== \"string\") {\n      throw Error(\n        `Group selector is not valid. Please specify a string selector.`\n      );\n    }\n    const elem = this.form.querySelector(groupField);\n    if (!elem) {\n      throw Error(\n        `Group with ${groupField} selector not found! Please check the group selector.`\n      );\n    }\n    const inputs = elem.querySelectorAll(\"input\");\n    const childrenInputs = Array.from(inputs).filter((input) => {\n      const parent = getClosestParent(this.groupFields, getNodeParents(input));\n      if (!parent) {\n        return true;\n      }\n      return parent[1].elems.find((elem2) => elem2 !== input);\n    });\n    const key = this.setKeyByFieldSelector(groupField);\n    this.groupFields[key] = {\n      rules: [\n        {\n          rule: GroupRules.Required,\n          errorMessage,\n          successMessage\n        }\n      ],\n      groupElem: elem,\n      elems: childrenInputs,\n      isDirty: false,\n      isValid: void 0,\n      config\n    };\n    inputs.forEach((input) => {\n      this.setListeners(input);\n    });\n    return this;\n  }\n  getListenerType(type) {\n    switch (type) {\n      case \"checkbox\":\n      case \"select-one\":\n      case \"file\":\n      case \"radio\": {\n        return \"change\";\n      }\n      default: {\n        return \"input\";\n      }\n    }\n  }\n  setListeners(elem) {\n    const type = this.getListenerType(elem.type);\n    this.removeListener(type, elem, this.handlerChange);\n    this.addListener(type, elem, this.handlerChange);\n  }\n  clearFieldLabel(key) {\n    var _a, _b;\n    (_a = this.errorLabels[key]) == null ? void 0 : _a.remove();\n    (_b = this.successLabels[key]) == null ? void 0 : _b.remove();\n  }\n  clearFieldStyle(key) {\n    var _a, _b, _c, _d;\n    const field = this.fields[key];\n    const errorStyle = ((_a = field.config) == null ? void 0 : _a.errorFieldStyle) || this.globalConfig.errorFieldStyle;\n    Object.keys(errorStyle).forEach((key2) => {\n      field.elem.style[key2] = \"\";\n    });\n    const successStyle = ((_b = field.config) == null ? void 0 : _b.successFieldStyle) || this.globalConfig.successFieldStyle || {};\n    Object.keys(successStyle).forEach((key2) => {\n      field.elem.style[key2] = \"\";\n    });\n    field.elem.classList.remove(\n      ...getClassList(\n        ((_c = field.config) == null ? void 0 : _c.errorFieldCssClass) || this.globalConfig.errorFieldCssClass\n      ),\n      ...getClassList(\n        ((_d = field.config) == null ? void 0 : _d.successFieldCssClass) || this.globalConfig.successFieldCssClass\n      )\n    );\n  }\n  clearErrors() {\n    var _a, _b;\n    Object.keys(this.errorLabels).forEach(\n      (key) => this.errorLabels[key].remove()\n    );\n    Object.keys(this.successLabels).forEach(\n      (key) => this.successLabels[key].remove()\n    );\n    for (const key in this.fields) {\n      this.clearFieldStyle(key);\n    }\n    for (const key in this.groupFields) {\n      const group = this.groupFields[key];\n      const errorStyle = ((_a = group.config) == null ? void 0 : _a.errorFieldStyle) || this.globalConfig.errorFieldStyle;\n      Object.keys(errorStyle).forEach((key2) => {\n        group.elems.forEach((elem) => {\n          var _a2;\n          elem.style[key2] = \"\";\n          elem.classList.remove(\n            ...getClassList(\n              ((_a2 = group.config) == null ? void 0 : _a2.errorFieldCssClass) || this.globalConfig.errorFieldCssClass\n            )\n          );\n        });\n      });\n      const successStyle = ((_b = group.config) == null ? void 0 : _b.successFieldStyle) || this.globalConfig.successFieldStyle || {};\n      Object.keys(successStyle).forEach((key2) => {\n        group.elems.forEach((elem) => {\n          var _a2;\n          elem.style[key2] = \"\";\n          elem.classList.remove(\n            ...getClassList(\n              ((_a2 = group.config) == null ? void 0 : _a2.successFieldCssClass) || this.globalConfig.successFieldCssClass\n            )\n          );\n        });\n      });\n    }\n    this.tooltips = [];\n  }\n  isTooltip() {\n    return !!this.globalConfig.tooltip;\n  }\n  lockForm() {\n    const elems = this.form.querySelectorAll(\n      \"input, textarea, button, select\"\n    );\n    for (let i = 0, len = elems.length; i < len; ++i) {\n      elems[i].setAttribute(\n        \"data-just-validate-fallback-disabled\",\n        elems[i].disabled ? \"true\" : \"false\"\n      );\n      elems[i].setAttribute(\"disabled\", \"disabled\");\n      elems[i].style.pointerEvents = \"none\";\n      elems[i].style.webkitFilter = \"grayscale(100%)\";\n      elems[i].style.filter = \"grayscale(100%)\";\n    }\n  }\n  unlockForm() {\n    const elems = this.form.querySelectorAll(\n      \"input, textarea, button, select\"\n    );\n    for (let i = 0, len = elems.length; i < len; ++i) {\n      if (elems[i].getAttribute(\"data-just-validate-fallback-disabled\") !== \"true\") {\n        elems[i].removeAttribute(\"disabled\");\n      }\n      elems[i].style.pointerEvents = \"\";\n      elems[i].style.webkitFilter = \"\";\n      elems[i].style.filter = \"\";\n    }\n  }\n  renderTooltip(elem, errorLabel, position) {\n    var _a;\n    const { top, left, width, height } = elem.getBoundingClientRect();\n    const errorLabelRect = errorLabel.getBoundingClientRect();\n    const pos = position || ((_a = this.globalConfig.tooltip) == null ? void 0 : _a.position);\n    switch (pos) {\n      case \"left\": {\n        errorLabel.style.top = `${top + height / 2 - errorLabelRect.height / 2}px`;\n        errorLabel.style.left = `${left - errorLabelRect.width - TOOLTIP_ARROW_HEIGHT}px`;\n        break;\n      }\n      case \"top\": {\n        errorLabel.style.top = `${top - errorLabelRect.height - TOOLTIP_ARROW_HEIGHT}px`;\n        errorLabel.style.left = `${left + width / 2 - errorLabelRect.width / 2}px`;\n        break;\n      }\n      case \"right\": {\n        errorLabel.style.top = `${top + height / 2 - errorLabelRect.height / 2}px`;\n        errorLabel.style.left = `${left + width + TOOLTIP_ARROW_HEIGHT}px`;\n        break;\n      }\n      case \"bottom\": {\n        errorLabel.style.top = `${top + height + TOOLTIP_ARROW_HEIGHT}px`;\n        errorLabel.style.left = `${left + width / 2 - errorLabelRect.width / 2}px`;\n        break;\n      }\n    }\n    errorLabel.dataset.direction = pos;\n    const refresh = () => {\n      this.renderTooltip(elem, errorLabel, position);\n    };\n    return {\n      refresh\n    };\n  }\n  createErrorLabelElem(key, errorMessage, config) {\n    const errorLabel = document.createElement(\"div\");\n    errorLabel.innerHTML = errorMessage;\n    const customErrorLabelStyle = this.isTooltip() ? config == null ? void 0 : config.errorLabelStyle : (config == null ? void 0 : config.errorLabelStyle) || this.globalConfig.errorLabelStyle;\n    Object.assign(errorLabel.style, customErrorLabelStyle);\n    errorLabel.classList.add(\n      ...getClassList(\n        (config == null ? void 0 : config.errorLabelCssClass) || this.globalConfig.errorLabelCssClass\n      ),\n      \"just-validate-error-label\"\n    );\n    if (this.isTooltip()) {\n      errorLabel.dataset.tooltip = \"true\";\n    }\n    if (this.globalConfig.testingMode) {\n      errorLabel.dataset.testId = `error-label-${key}`;\n    }\n    this.errorLabels[key] = errorLabel;\n    return errorLabel;\n  }\n  createSuccessLabelElem(key, successMessage, config) {\n    if (successMessage === void 0) {\n      return null;\n    }\n    const successLabel = document.createElement(\"div\");\n    successLabel.innerHTML = successMessage;\n    const customSuccessLabelStyle = (config == null ? void 0 : config.successLabelStyle) || this.globalConfig.successLabelStyle;\n    Object.assign(successLabel.style, customSuccessLabelStyle);\n    successLabel.classList.add(\n      ...getClassList(\n        (config == null ? void 0 : config.successLabelCssClass) || this.globalConfig.successLabelCssClass\n      ),\n      \"just-validate-success-label\"\n    );\n    if (this.globalConfig.testingMode) {\n      successLabel.dataset.testId = `success-label-${key}`;\n    }\n    this.successLabels[key] = successLabel;\n    return successLabel;\n  }\n  renderErrorsContainer(label, errorsContainer) {\n    const container = errorsContainer || this.globalConfig.errorsContainer;\n    if (typeof container === \"string\") {\n      const elem = this.form.querySelector(container);\n      if (elem) {\n        elem.appendChild(label);\n        return true;\n      } else {\n        console.error(\n          `Error container with ${container} selector not found. Errors will be rendered as usual`\n        );\n      }\n    }\n    if (container instanceof Element) {\n      container.appendChild(label);\n      return true;\n    }\n    if (container !== void 0) {\n      console.error(\n        `Error container not found. It should be a string or existing Element. Errors will be rendered as usual`\n      );\n    }\n    return false;\n  }\n  renderGroupLabel(elem, label, errorsContainer, isSuccess) {\n    if (!isSuccess) {\n      const renderedInErrorsContainer = this.renderErrorsContainer(\n        label,\n        errorsContainer\n      );\n      if (renderedInErrorsContainer) {\n        return;\n      }\n    }\n    elem.appendChild(label);\n  }\n  renderFieldLabel(elem, label, errorsContainer, isSuccess) {\n    var _a, _b, _c, _d, _e, _f, _g;\n    if (!isSuccess) {\n      const renderedInErrorsContainer = this.renderErrorsContainer(\n        label,\n        errorsContainer\n      );\n      if (renderedInErrorsContainer) {\n        return;\n      }\n    }\n    if (elem.type === \"checkbox\" || elem.type === \"radio\") {\n      const labelElem = document.querySelector(\n        `label[for=\"${elem.getAttribute(\"id\")}\"]`\n      );\n      if (((_b = (_a = elem.parentElement) == null ? void 0 : _a.tagName) == null ? void 0 : _b.toLowerCase()) === \"label\") {\n        (_d = (_c = elem.parentElement) == null ? void 0 : _c.parentElement) == null ? void 0 : _d.appendChild(label);\n      } else if (labelElem) {\n        (_e = labelElem.parentElement) == null ? void 0 : _e.appendChild(label);\n      } else {\n        (_f = elem.parentElement) == null ? void 0 : _f.appendChild(label);\n      }\n    } else {\n      (_g = elem.parentElement) == null ? void 0 : _g.appendChild(label);\n    }\n  }\n  showLabels(fields, isError) {\n    Object.keys(fields).forEach((fieldName, i) => {\n      const error = fields[fieldName];\n      const key = this.getKeyByFieldSelector(fieldName);\n      if (!key || !this.fields[key]) {\n        console.error(`Field not found. Check the field selector.`);\n        return;\n      }\n      const field = this.fields[key];\n      field.isValid = !isError;\n      this.clearFieldStyle(key);\n      this.clearFieldLabel(key);\n      this.renderFieldError(key, error);\n      if (i === 0 && this.globalConfig.focusInvalidField) {\n        setTimeout(() => field.elem.focus(), 0);\n      }\n    });\n  }\n  showErrors(fields) {\n    if (typeof fields !== \"object\") {\n      throw Error(\n        \"[showErrors]: Errors should be an object with key: value format\"\n      );\n    }\n    this.showLabels(fields, true);\n  }\n  showSuccessLabels(fields) {\n    if (typeof fields !== \"object\") {\n      throw Error(\n        \"[showSuccessLabels]: Labels should be an object with key: value format\"\n      );\n    }\n    this.showLabels(fields, false);\n  }\n  renderFieldError(key, message) {\n    var _a, _b, _c, _d, _e, _f;\n    const field = this.fields[key];\n    if (field.isValid === void 0) {\n      return;\n    }\n    if (field.isValid) {\n      if (!field.asyncCheckPending) {\n        const successLabel = this.createSuccessLabelElem(\n          key,\n          message !== void 0 ? message : field.successMessage,\n          field.config\n        );\n        if (successLabel) {\n          this.renderFieldLabel(\n            field.elem,\n            successLabel,\n            (_a = field.config) == null ? void 0 : _a.errorsContainer,\n            true\n          );\n        }\n        field.elem.classList.add(\n          ...getClassList(\n            ((_b = field.config) == null ? void 0 : _b.successFieldCssClass) || this.globalConfig.successFieldCssClass\n          )\n        );\n      }\n      return;\n    }\n    this.isValid = false;\n    field.elem.classList.add(\n      ...getClassList(\n        ((_c = field.config) == null ? void 0 : _c.errorFieldCssClass) || this.globalConfig.errorFieldCssClass\n      )\n    );\n    const errorLabel = this.createErrorLabelElem(\n      key,\n      message !== void 0 ? message : field.errorMessage,\n      field.config\n    );\n    this.renderFieldLabel(\n      field.elem,\n      errorLabel,\n      (_d = field.config) == null ? void 0 : _d.errorsContainer\n    );\n    if (this.isTooltip()) {\n      this.tooltips.push(\n        this.renderTooltip(\n          field.elem,\n          errorLabel,\n          (_f = (_e = field.config) == null ? void 0 : _e.tooltip) == null ? void 0 : _f.position\n        )\n      );\n    }\n  }\n  renderGroupError(key) {\n    var _a, _b, _c, _d;\n    const group = this.groupFields[key];\n    if (group.isValid === void 0) {\n      return;\n    }\n    if (group.isValid) {\n      group.elems.forEach((elem) => {\n        var _a2, _b2;\n        Object.assign(\n          elem.style,\n          ((_a2 = group.config) == null ? void 0 : _a2.successFieldStyle) || this.globalConfig.successFieldStyle\n        );\n        elem.classList.add(\n          ...getClassList(\n            ((_b2 = group.config) == null ? void 0 : _b2.successFieldCssClass) || this.globalConfig.successFieldCssClass\n          )\n        );\n      });\n      const successLabel = this.createSuccessLabelElem(\n        key,\n        group.successMessage,\n        group.config\n      );\n      if (successLabel) {\n        this.renderGroupLabel(\n          group.groupElem,\n          successLabel,\n          (_a = group.config) == null ? void 0 : _a.errorsContainer,\n          true\n        );\n      }\n      return;\n    }\n    this.isValid = false;\n    group.elems.forEach((elem) => {\n      var _a2, _b2;\n      Object.assign(\n        elem.style,\n        ((_a2 = group.config) == null ? void 0 : _a2.errorFieldStyle) || this.globalConfig.errorFieldStyle\n      );\n      elem.classList.add(\n        ...getClassList(\n          ((_b2 = group.config) == null ? void 0 : _b2.errorFieldCssClass) || this.globalConfig.errorFieldCssClass\n        )\n      );\n    });\n    const errorLabel = this.createErrorLabelElem(\n      key,\n      group.errorMessage,\n      group.config\n    );\n    this.renderGroupLabel(\n      group.groupElem,\n      errorLabel,\n      (_b = group.config) == null ? void 0 : _b.errorsContainer\n    );\n    if (this.isTooltip()) {\n      this.tooltips.push(\n        this.renderTooltip(\n          group.groupElem,\n          errorLabel,\n          (_d = (_c = group.config) == null ? void 0 : _c.tooltip) == null ? void 0 : _d.position\n        )\n      );\n    }\n  }\n  renderErrors(forceRevalidation = false) {\n    if (!this.isSubmitted && !forceRevalidation && !this.globalConfig.validateBeforeSubmitting) {\n      return;\n    }\n    this.clearErrors();\n    this.isValid = true;\n    for (const key in this.groupFields) {\n      this.renderGroupError(key);\n    }\n    for (const key in this.fields) {\n      this.renderFieldError(key);\n    }\n  }\n  destroy() {\n    this.eventListeners.forEach((event) => {\n      this.removeListener(event.type, event.elem, event.func);\n    });\n    Object.keys(this.customStyleTags).forEach((key) => {\n      this.customStyleTags[key].remove();\n    });\n    this.clearErrors();\n    if (this.globalConfig.lockForm) {\n      this.unlockForm();\n    }\n  }\n  refresh() {\n    this.destroy();\n    if (!this.form) {\n      console.error(\"Cannot initialize the library! Form is not defined\");\n    } else {\n      this.initialize(this.form, this.globalConfig);\n      Object.keys(this.fields).forEach((key) => {\n        const fieldSelector = this.getFieldSelectorByKey(key);\n        if (fieldSelector) {\n          this.addField(\n            fieldSelector,\n            [...this.fields[key].rules],\n            this.fields[key].config\n          );\n        }\n      });\n    }\n  }\n  setCurrentLocale(locale) {\n    if (typeof locale !== \"string\" && locale !== void 0) {\n      console.error(\"Current locale should be a string\");\n      return;\n    }\n    this.currentLocale = locale;\n    if (this.isSubmitted) {\n      this.validate();\n    }\n  }\n  onSuccess(callback) {\n    this.onSuccessCallback = callback;\n    return this;\n  }\n  onFail(callback) {\n    this.onFailCallback = callback;\n    return this;\n  }\n}\nexport {\n  CustomStyleTagIds,\n  GroupRules,\n  Rules,\n  JustValidate as default\n};\n","/*\n* Notiflix Confirm AIO (https://notiflix.github.io)\n* Description: This file has been created automatically that using \"notiflix.js\", and \"notiflix.css\" files.\n* Version: 3.2.6\n* Author: Furkan (https://github.com/furcan)\n* Copyright 2019 - 2023 Notiflix, MIT Licence (https://opensource.org/licenses/MIT)\n*/\n\n/* global define */\n(function (root, factory) {\n  if (typeof define === 'function' && define.amd) {\n    define([], function () {\n      return factory(root);\n    });\n  } else if (typeof module === 'object' && typeof module.exports === 'object') {\n    module.exports = factory(root);\n  } else {\n    root.Notiflix = factory(root);\n  }\n})(typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : this, function (window) {\n\n  'use strict';\n\n  // COMMON: SSR check: begin\n  if (typeof window === 'undefined' && typeof window.document === 'undefined') {\n    return false;\n  }\n  // COMMON: SSR check: end\n\n  // COMMON: Variables: begin\n  var notiflixNamespace = 'Notiflix';\n  var notiflixConsoleDocs = '\\n\\nVisit documentation page to learn more: https://notiflix.github.io/documentation';\n  var defaultFontFamily = '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif';\n  // COMMON: Variables: end\n\n  // CONFIRM: Default Settings: begin\n  var typesConfirm = {\n    Show: 'Show',\n    Ask: 'Ask',\n    Prompt: 'Prompt',\n  };\n  var newConfirmSettings;\n  var confirmSettings = {\n    ID: 'NotiflixConfirmWrap', // can not customizable\n    className: 'notiflix-confirm',\n    width: '300px',\n    zindex: 4003,\n    position: 'center', // 'center' - 'center-top' - 'center-bottom' - 'right-top' - 'right-center' - 'right-bottom' - 'left-top' - 'left-center' - 'left-bottom'\n    distance: '10px',\n    backgroundColor: '#f8f8f8',\n    borderRadius: '25px',\n    backOverlay: true,\n    backOverlayColor: 'rgba(0,0,0,0.5)',\n    rtl: false,\n    fontFamily: 'Quicksand',\n    cssAnimation: true,\n    cssAnimationDuration: 300,\n    cssAnimationStyle: 'fade', // 'zoom' - 'fade'\n    plainText: true,\n\n    titleColor: '#32c682',\n    titleFontSize: '16px',\n    titleMaxLength: 34,\n\n    messageColor: '#1e1e1e',\n    messageFontSize: '14px',\n    messageMaxLength: 110,\n\n    buttonsFontSize: '15px',\n    buttonsMaxLength: 34,\n    okButtonColor: '#f8f8f8',\n    okButtonBackground: '#32c682',\n    cancelButtonColor: '#f8f8f8',\n    cancelButtonBackground: '#a9a9a9',\n  };\n  // CONFIRM: Default Settings: end\n\n  // COMMON: Console Error: begin\n  var commonConsoleError = function (message) {\n    return console.error('%c ' + notiflixNamespace + ' Error ', 'padding:2px;border-radius:20px;color:#fff;background:#ff5549', '\\n' + message + notiflixConsoleDocs);\n  };\n  // COMMON: Console Error: end\n\n  // COMMON: Check Head or Body: begin\n  var commonCheckHeadOrBody = function (element) {\n    if (!element) { element = 'head'; }\n    if (window.document[element] === null) {\n      commonConsoleError('\\nNotiflix needs to be appended to the \"<' + element + '>\" element, but you called it before the \"<' + element + '>\" element has been created.');\n      return false;\n    }\n    return true;\n  };\n  // COMMON: Check Head or Body: end\n\n  // COMMON: Set Internal CSS Codes: begin\n  var commonSetInternalCSSCodes = function (getInternalCSSCodes, styleElementId) {\n    // check doc head\n    if (!commonCheckHeadOrBody('head')) { return false; }\n\n    // internal css\n    if (getInternalCSSCodes() !== null && !window.document.getElementById(styleElementId)) {\n      var internalCSS = window.document.createElement('style');\n      internalCSS.id = styleElementId;\n      internalCSS.innerHTML = getInternalCSSCodes();\n      window.document.head.appendChild(internalCSS);\n    }\n  };\n  // COMMON: Set Internal CSS Codes: end\n\n  // COMMON: Extend Options: begin\n  var commonExtendOptions = function () {\n    // variables\n    var extended = {};\n    var deep = false;\n    var i = 0;\n    // check if a deep merge\n    if (Object.prototype.toString.call(arguments[0]) === '[object Boolean]') {\n      deep = arguments[0];\n      i++;\n    }\n    // merge the object into the extended object\n    var merge = function (obj) {\n      for (var prop in obj) {\n        if (Object.prototype.hasOwnProperty.call(obj, prop)) {\n          // if property is an object, merge properties\n          if (deep && Object.prototype.toString.call(obj[prop]) === '[object Object]') {\n            extended[prop] = commonExtendOptions(extended[prop], obj[prop]);\n          } else {\n            extended[prop] = obj[prop];\n          }\n        }\n      }\n    };\n    // loop through each object and conduct a merge\n    for (; i < arguments.length; i++) {\n      merge(arguments[i]);\n    }\n    return extended;\n  };\n  // COMMON: Extend Options: end\n\n  // COMMON: Get Plaintext: begin\n  var commonGetPlaintext = function (html) {\n    var htmlPool = window.document.createElement('div');\n    htmlPool.innerHTML = html;\n    return htmlPool.textContent || htmlPool.innerText || '';\n  };\n  // COMMON: Get Plaintext: end\n\n  // CONFIRM: Get Internal CSS Codes: begin\n  var confirmGetInternalCSSCodes = function () {\n    var confirmCSS = '[id^=NotiflixConfirmWrap]{position:fixed;z-index:4003;width:100%;height:100%;left:0;top:0;padding:10px;-webkit-box-sizing:border-box;box-sizing:border-box;background:transparent;font-family:\"Quicksand\",-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,sans-serif;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}[id^=NotiflixConfirmWrap].nx-position-center-top{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}[id^=NotiflixConfirmWrap].nx-position-center-bottom{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}[id^=NotiflixConfirmWrap].nx-position-left-top{-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}[id^=NotiflixConfirmWrap].nx-position-left-center{-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start}[id^=NotiflixConfirmWrap].nx-position-left-bottom{-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}[id^=NotiflixConfirmWrap].nx-position-right-top{-webkit-box-align:end;-webkit-align-items:flex-end;-ms-flex-align:end;align-items:flex-end;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}[id^=NotiflixConfirmWrap].nx-position-right-center{-webkit-box-align:end;-webkit-align-items:flex-end;-ms-flex-align:end;align-items:flex-end}[id^=NotiflixConfirmWrap].nx-position-right-bottom{-webkit-box-align:end;-webkit-align-items:flex-end;-ms-flex-align:end;align-items:flex-end;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}[id^=NotiflixConfirmWrap] *{-webkit-box-sizing:border-box;box-sizing:border-box}[id^=NotiflixConfirmWrap]>div[class*=\"-overlay\"]{width:100%;height:100%;left:0;top:0;background:rgba(255,255,255,.5);position:fixed;z-index:0}[id^=NotiflixConfirmWrap]>div[class*=\"-overlay\"].nx-with-animation{-webkit-animation:confirm-overlay-animation .3s ease-in-out 0s normal;animation:confirm-overlay-animation .3s ease-in-out 0s normal}@-webkit-keyframes confirm-overlay-animation{0%{opacity:0}100%{opacity:1}}@keyframes confirm-overlay-animation{0%{opacity:0}100%{opacity:1}}[id^=NotiflixConfirmWrap].nx-remove>div[class*=\"-overlay\"].nx-with-animation{opacity:0;-webkit-animation:confirm-overlay-animation-remove .3s ease-in-out 0s normal;animation:confirm-overlay-animation-remove .3s ease-in-out 0s normal}@-webkit-keyframes confirm-overlay-animation-remove{0%{opacity:1}100%{opacity:0}}@keyframes confirm-overlay-animation-remove{0%{opacity:1}100%{opacity:0}}[id^=NotiflixConfirmWrap]>div[class*=\"-content\"]{width:300px;max-width:100%;max-height:96vh;overflow-x:hidden;overflow-y:auto;border-radius:25px;padding:10px;margin:0;-webkit-filter:drop-shadow(0 0 5px rgba(0,0,0,0.05));filter:drop-shadow(0 0 5px rgba(0, 0, 0, .05));background:#f8f8f8;color:#1e1e1e;position:relative;z-index:1;text-align:center}[id^=NotiflixConfirmWrap]>div[class*=\"-content\"]::-webkit-scrollbar{width:0;height:0}[id^=NotiflixConfirmWrap]>div[class*=\"-content\"]::-webkit-scrollbar-thumb{background:transparent}[id^=NotiflixConfirmWrap]>div[class*=\"-content\"]::-webkit-scrollbar-track{background:transparent}[id^=NotiflixConfirmWrap]>div[class*=\"-content\"]>div[class*=\"-head\"]{float:left;width:100%;text-align:inherit}[id^=NotiflixConfirmWrap]>div[class*=\"-content\"]>div[class*=\"-head\"]>h5{float:left;width:100%;margin:0;padding:0 0 10px;border-bottom:1px solid rgba(0,0,0,.1);color:#32c682;font-family:inherit!important;font-size:16px;line-height:1.4;font-weight:500;text-align:inherit}[id^=NotiflixConfirmWrap]>div[class*=\"-content\"]>div[class*=\"-head\"]>div{font-family:inherit!important;margin:15px 0 20px;padding:0 10px;float:left;width:100%;font-size:14px;line-height:1.4;font-weight:normal;color:inherit;text-align:inherit}[id^=NotiflixConfirmWrap]>div[class*=\"-content\"]>div[class*=\"-head\"]>div>div{font-family:inherit!important;float:left;width:100%;margin:15px 0 0;padding:0}[id^=NotiflixConfirmWrap]>div[class*=\"-content\"]>div[class*=\"-head\"]>div>div>input{font-family:inherit!important;float:left;width:100%;height:40px;margin:0;padding:0 15px;border:1px solid rgba(0,0,0,.1);border-radius:25px;font-size:14px;font-weight:normal;line-height:1;-webkit-transition:all .25s ease-in-out;-o-transition:all .25s ease-in-out;transition:all .25s ease-in-out;text-align:left}[id^=NotiflixConfirmWrap].nx-rtl-on>div[class*=\"-content\"]>div[class*=\"-head\"]>div>div>input{text-align:right}[id^=NotiflixConfirmWrap]>div[class*=\"-content\"]>div[class*=\"-head\"]>div>div>input:hover{border-color:rgba(0,0,0,.1)}[id^=NotiflixConfirmWrap]>div[class*=\"-content\"]>div[class*=\"-head\"]>div>div>input:focus{border-color:rgba(0,0,0,.3)}[id^=NotiflixConfirmWrap]>div[class*=\"-content\"]>div[class*=\"-head\"]>div>div>input.nx-validation-failure{border-color:#ff5549}[id^=NotiflixConfirmWrap]>div[class*=\"-content\"]>div[class*=\"-head\"]>div>div>input.nx-validation-success{border-color:#32c682}[id^=NotiflixConfirmWrap]>div[class*=\"-content\"]>div[class*=\"-buttons\"]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border-radius:inherit;float:left;width:100%;text-align:inherit}[id^=NotiflixConfirmWrap]>div[class*=\"-content\"]>div[class*=\"-buttons\"]>a{cursor:pointer;font-family:inherit!important;-webkit-transition:all .25s ease-in-out;-o-transition:all .25s ease-in-out;transition:all .25s ease-in-out;float:left;width:48%;padding:9px 5px;border-radius:inherit!important;font-weight:500;font-size:15px;line-height:1.4;color:#f8f8f8;text-align:inherit}[id^=NotiflixConfirmWrap]>div[class*=\"-content\"]>div[class*=\"-buttons\"]>a.nx-confirm-button-ok{margin:0 2% 0 0;background:#32c682}[id^=NotiflixConfirmWrap]>div[class*=\"-content\"]>div[class*=\"-buttons\"]>a.nx-confirm-button-cancel{margin:0 0 0 2%;background:#a9a9a9}[id^=NotiflixConfirmWrap]>div[class*=\"-content\"]>div[class*=\"-buttons\"]>a.nx-full{margin:0;width:100%}[id^=NotiflixConfirmWrap]>div[class*=\"-content\"]>div[class*=\"-buttons\"]>a:hover{-webkit-box-shadow:inset 0 -60px 5px -5px rgba(0,0,0,.25);box-shadow:inset 0 -60px 5px -5px rgba(0,0,0,.25)}[id^=NotiflixConfirmWrap].nx-rtl-on>div[class*=\"-content\"]>div[class*=\"-buttons\"],[id^=NotiflixConfirmWrap].nx-rtl-on>div[class*=\"-content\"]>div[class*=\"-buttons\"]>a{-webkit-transform:rotateY(180deg);transform:rotateY(180deg)}[id^=NotiflixConfirmWrap].nx-with-animation.nx-fade>div[class*=\"-content\"]{-webkit-animation:confirm-animation-fade .3s ease-in-out 0s normal;animation:confirm-animation-fade .3s ease-in-out 0s normal}@-webkit-keyframes confirm-animation-fade{0%{opacity:0}100%{opacity:1}}@keyframes confirm-animation-fade{0%{opacity:0}100%{opacity:1}}[id^=NotiflixConfirmWrap].nx-with-animation.nx-zoom>div[class*=\"-content\"]{-webkit-animation:confirm-animation-zoom .3s ease-in-out 0s normal;animation:confirm-animation-zoom .3s ease-in-out 0s normal}@-webkit-keyframes confirm-animation-zoom{0%{opacity:0;-webkit-transform:scale(.5);transform:scale(.5)}50%{opacity:1;-webkit-transform:scale(1.05);transform:scale(1.05)}100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes confirm-animation-zoom{0%{opacity:0;-webkit-transform:scale(.5);transform:scale(.5)}50%{opacity:1;-webkit-transform:scale(1.05);transform:scale(1.05)}100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}[id^=NotiflixConfirmWrap].nx-with-animation.nx-fade.nx-remove>div[class*=\"-content\"]{opacity:0;-webkit-animation:confirm-animation-fade-remove .3s ease-in-out 0s normal;animation:confirm-animation-fade-remove .3s ease-in-out 0s normal}@-webkit-keyframes confirm-animation-fade-remove{0%{opacity:1}100%{opacity:0}}@keyframes confirm-animation-fade-remove{0%{opacity:1}100%{opacity:0}}[id^=NotiflixConfirmWrap].nx-with-animation.nx-zoom.nx-remove>div[class*=\"-content\"]{opacity:0;-webkit-animation:confirm-animation-zoom-remove .3s ease-in-out 0s normal;animation:confirm-animation-zoom-remove .3s ease-in-out 0s normal}@-webkit-keyframes confirm-animation-zoom-remove{0%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}50%{opacity:.5;-webkit-transform:scale(1.05);transform:scale(1.05)}100%{opacity:0;-webkit-transform:scale(0);transform:scale(0)}}@keyframes confirm-animation-zoom-remove{0%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}50%{opacity:.5;-webkit-transform:scale(1.05);transform:scale(1.05)}100%{opacity:0;-webkit-transform:scale(0);transform:scale(0)}}';\n    return confirmCSS || null;\n  };\n  // CONFIRM: Get Internal CSS Codes: end\n\n  // CONFIRM: Create: begin\n  var confirmCreate = function (confirmType, title, messageOrQuestion, answer, okButtonText, cancelButtonText, okButtonCallback, cancelButtonCallback, options) {\n    // check doc body\n    if (!commonCheckHeadOrBody('body')) { return false; }\n\n    // if not initialized pretend like init\n    if (!newConfirmSettings) {\n      Notiflix.Confirm.init({});\n    }\n\n    // create a backup for new settings\n    var newConfirmSettingsBackup = commonExtendOptions(true, newConfirmSettings, {});\n\n    // check the \"options\": begin\n    if (typeof options === 'object' && !Array.isArray(options)) {\n      // extend new settings with the new options\n      newConfirmSettings = commonExtendOptions(true, newConfirmSettings, options);\n    }\n    // check the \"options\": end\n\n    // check the arguments: begin\n    if (typeof title !== 'string') { title = 'Notiflix Confirm'; }\n    if (typeof messageOrQuestion !== 'string') { messageOrQuestion = 'Do you agree with me?'; }\n    if (typeof okButtonText !== 'string') { okButtonText = 'Yes'; }\n    if (typeof cancelButtonText !== 'string') { cancelButtonText = 'No'; }\n    if (typeof okButtonCallback !== 'function') { okButtonCallback = undefined; }\n    if (typeof cancelButtonCallback !== 'function') { cancelButtonCallback = undefined; }\n    // check the arguments: end\n\n    // if plainText is true => HTML tags not allowed: begin\n    if (newConfirmSettings.plainText) {\n      title = commonGetPlaintext(title);\n      messageOrQuestion = commonGetPlaintext(messageOrQuestion);\n      okButtonText = commonGetPlaintext(okButtonText);\n      cancelButtonText = commonGetPlaintext(cancelButtonText);\n    }\n    // if plainText is true => HTML tags not allowed: end\n\n    // if plainText is false but the contents length more than ***MaxLength => Possible HTML tags error: begin\n    if (!newConfirmSettings.plainText) {\n      if (title.length > newConfirmSettings.titleMaxLength) {\n        title = 'Possible HTML Tags Error';\n        messageOrQuestion = 'The \"plainText\" option is \"false\" and the title content length is more than \"titleMaxLength\" option.';\n        okButtonText = 'Okay';\n        cancelButtonText = '...';\n      }\n      if (messageOrQuestion.length > newConfirmSettings.messageMaxLength) {\n        title = 'Possible HTML Tags Error';\n        messageOrQuestion = 'The \"plainText\" option is \"false\" and the message content length is more than \"messageMaxLength\" option.';\n        okButtonText = 'Okay';\n        cancelButtonText = '...';\n      }\n      if ((okButtonText.length || cancelButtonText.length) > newConfirmSettings.buttonsMaxLength) {\n        title = 'Possible HTML Tags Error';\n        messageOrQuestion = 'The \"plainText\" option is \"false\" and the buttons content length is more than \"buttonsMaxLength\" option.';\n        okButtonText = 'Okay';\n        cancelButtonText = '...';\n      }\n    }\n    // if plainText is false but the contents length more than ***MaxLength => Possible HTML tags error: end\n\n    // max length: begin\n    if (title.length > newConfirmSettings.titleMaxLength) {\n      title = title.substring(0, newConfirmSettings.titleMaxLength) + '...';\n    }\n    if (messageOrQuestion.length > newConfirmSettings.messageMaxLength) {\n      messageOrQuestion = messageOrQuestion.substring(0, newConfirmSettings.messageMaxLength) + '...';\n    }\n    if (okButtonText.length > newConfirmSettings.buttonsMaxLength) {\n      okButtonText = okButtonText.substring(0, newConfirmSettings.buttonsMaxLength) + '...';\n    }\n    if (cancelButtonText.length > newConfirmSettings.buttonsMaxLength) {\n      cancelButtonText = cancelButtonText.substring(0, newConfirmSettings.buttonsMaxLength) + '...';\n    }\n    // max length: end\n\n    // if cssAnimaion is false => duration: begin\n    if (!newConfirmSettings.cssAnimation) {\n      newConfirmSettings.cssAnimationDuration = 0;\n    }\n    // if cssAnimaion is false => duration: end\n\n    // confirm wrap: begin\n    var ntflxConfirmWrap = window.document.createElement('div');\n    ntflxConfirmWrap.id = confirmSettings.ID;\n    ntflxConfirmWrap.className = newConfirmSettings.className + (newConfirmSettings.cssAnimation ? ' nx-with-animation nx-' + newConfirmSettings.cssAnimationStyle : '');\n    ntflxConfirmWrap.style.zIndex = newConfirmSettings.zindex;\n    ntflxConfirmWrap.style.padding = newConfirmSettings.distance;\n\n    // rtl: begin\n    if (newConfirmSettings.rtl) {\n      ntflxConfirmWrap.setAttribute('dir', 'rtl');\n      ntflxConfirmWrap.classList.add('nx-rtl-on');\n    }\n    // rtl: end\n\n    // position: begin\n    var confirmPosition = typeof newConfirmSettings.position === 'string' ? newConfirmSettings.position.trim() : 'center';\n    ntflxConfirmWrap.classList.add('nx-position-' + confirmPosition);\n    // position: end\n\n    // font-family\n    ntflxConfirmWrap.style.fontFamily = '\"' + newConfirmSettings.fontFamily + '\", ' + defaultFontFamily;\n\n    // if background overlay is true: begin\n    var confirmOverlay = '';\n    if (newConfirmSettings.backOverlay) {\n      confirmOverlay = '<div class=\"' + newConfirmSettings.className + '-overlay' + (newConfirmSettings.cssAnimation ? ' nx-with-animation' : '') + '\" style=\"background:' + newConfirmSettings.backOverlayColor + ';animation-duration:' + newConfirmSettings.cssAnimationDuration + 'ms;\"></div>';\n    }\n    // if background overlay is true: end\n\n    // if have a callback => add cancel button: begin\n    var cancelButtonHTML = '';\n    if (typeof okButtonCallback === 'function') {\n      cancelButtonHTML = '<a id=\"NXConfirmButtonCancel\" class=\"nx-confirm-button-cancel\" style=\"color:' + newConfirmSettings.cancelButtonColor + ';background:' + newConfirmSettings.cancelButtonBackground + ';font-size:' + newConfirmSettings.buttonsFontSize + ';\">' + cancelButtonText + '</a>';\n    }\n    // if have a callback => add cancel button: end\n\n    // check the validation module: begin\n    var setValidationInput = '';\n    var theExpectedAnswer = null;\n    var theClientAnswer = undefined;\n    if (confirmType === typesConfirm.Ask || confirmType === typesConfirm.Prompt) {\n      theExpectedAnswer = answer || '';\n      var inputMaxLength = (confirmType === typesConfirm.Ask) ? Math.ceil(theExpectedAnswer.length * 1.5) : (theExpectedAnswer.length > 200 ? Math.ceil(theExpectedAnswer.length * 1.5) : 250);\n      var inputDefaultValueAttr = confirmType === typesConfirm.Prompt ? ('value=\"' + theExpectedAnswer + '\"') : '';\n      setValidationInput = '<div><input id=\"NXConfirmValidationInput\" type=\"text\" ' + inputDefaultValueAttr + ' maxlength=\"' + inputMaxLength + '\" style=\"font-size:' + newConfirmSettings.messageFontSize + ';border-radius: ' + newConfirmSettings.borderRadius + ';\" autocomplete=\"off\" spellcheck=\"false\" autocapitalize=\"none\" /></div>';\n    }\n    // check the validation module: end\n\n    // confirm wrap content: begin\n    ntflxConfirmWrap.innerHTML = confirmOverlay +\n      '<div class=\"' + newConfirmSettings.className + '-content\" style=\"width:' + newConfirmSettings.width + '; background:' + newConfirmSettings.backgroundColor + '; animation-duration:' + newConfirmSettings.cssAnimationDuration + 'ms; border-radius: ' + newConfirmSettings.borderRadius + ';\">' +\n      '<div class=\"' + newConfirmSettings.className + '-head\">' +\n      '<h5 style=\"color:' + newConfirmSettings.titleColor + ';font-size:' + newConfirmSettings.titleFontSize + ';\">' + title + '</h5>' +\n      '<div style=\"color:' + newConfirmSettings.messageColor + ';font-size:' + newConfirmSettings.messageFontSize + ';\">' + messageOrQuestion + setValidationInput + '</div>' +\n      '</div>' +\n      '<div class=\"' + newConfirmSettings.className + '-buttons\">' +\n      '<a id=\"NXConfirmButtonOk\" class=\"nx-confirm-button-ok' + (typeof okButtonCallback === 'function' ? '' : ' nx-full') + '\" style=\"color:' + newConfirmSettings.okButtonColor + ';background:' + newConfirmSettings.okButtonBackground + ';font-size:' + newConfirmSettings.buttonsFontSize + ';\">' + okButtonText + '</a>' +\n      cancelButtonHTML +\n      '</div>' +\n      '</div>';\n    // confirm wrap content: end\n    // confirm wrap: end\n\n    // if there is no confirm box: begin\n    if (!window.document.getElementById(ntflxConfirmWrap.id)) {\n      window.document.body.appendChild(ntflxConfirmWrap);\n\n      // buttons && input listener: begin\n      var confirmCloseWrap = window.document.getElementById(ntflxConfirmWrap.id);\n      var okButton = window.document.getElementById('NXConfirmButtonOk');\n\n      // validation input listener: begin\n      var validationInput = window.document.getElementById('NXConfirmValidationInput');\n      if (validationInput) {\n        validationInput.focus();\n        validationInput.setSelectionRange(0, (validationInput.value || '').length);\n        validationInput.addEventListener('keyup', function (event) {\n          var thisValue = event.target.value;\n          if (\n            (confirmType === typesConfirm.Ask) &&\n            (thisValue !== theExpectedAnswer)\n          ) {\n            event.preventDefault();\n            validationInput.classList.add('nx-validation-failure');\n            validationInput.classList.remove('nx-validation-success');\n          } else {\n            if (confirmType === typesConfirm.Ask) {\n              validationInput.classList.remove('nx-validation-failure');\n              validationInput.classList.add('nx-validation-success');\n            }\n            var isEnter = (event.key || '').toLocaleLowerCase('en') === 'enter' || event.keyCode === 13;\n            if (isEnter) {\n              okButton.dispatchEvent(new Event('click'));\n            }\n          }\n        });\n      }\n      // validation input listener: end\n\n      // ok button listener: begin\n      okButton.addEventListener('click', function (event) {\n        // check the answer if the type is \"Ask\": begin\n        if (confirmType === typesConfirm.Ask && theExpectedAnswer && validationInput) {\n          var inputValue = (validationInput.value || '').toString();\n          if (inputValue !== theExpectedAnswer) {\n            validationInput.focus();\n            validationInput.classList.add('nx-validation-failure');\n            event.stopPropagation();\n            event.preventDefault();\n            event.returnValue = false;\n            event.cancelBubble = true;\n            return false;\n          } else {\n            validationInput.classList.remove('nx-validation-failure');\n          }\n        }\n        // check the answer if the type is \"Ask\": end\n\n        // if ok callback && if ok callback is a function\n        if (typeof okButtonCallback === 'function') {\n          if (confirmType === typesConfirm.Prompt && validationInput) {\n            theClientAnswer = validationInput.value || '';\n          }\n          okButtonCallback(theClientAnswer);\n        }\n        confirmCloseWrap.classList.add('nx-remove');\n\n        var timeout = setTimeout(function () {\n          if (confirmCloseWrap.parentNode !== null) {\n            confirmCloseWrap.parentNode.removeChild(confirmCloseWrap);\n            clearTimeout(timeout);\n          }\n        }, newConfirmSettings.cssAnimationDuration);\n      });\n      // ok button listener: end\n\n      // if ok callback && if ok callback a function => add Cancel Button listener: begin\n      if (typeof okButtonCallback === 'function') {\n        // cancel button listener: begin\n        var cancelButton = window.document.getElementById('NXConfirmButtonCancel');\n        cancelButton.addEventListener('click', function () {\n          // if cancel callback && if cancel callback a function\n          if (typeof cancelButtonCallback === 'function') {\n            if (confirmType === typesConfirm.Prompt && validationInput) {\n              theClientAnswer = validationInput.value || '';\n            }\n            cancelButtonCallback(theClientAnswer);\n          }\n          confirmCloseWrap.classList.add('nx-remove');\n\n          var timeout = setTimeout(function () {\n            if (confirmCloseWrap.parentNode !== null) {\n              confirmCloseWrap.parentNode.removeChild(confirmCloseWrap);\n              clearTimeout(timeout);\n            }\n          }, newConfirmSettings.cssAnimationDuration);\n        });\n        // cancel button listener: end\n      }\n      // if ok callback && if ok callback a function => add Cancel Button listener: end\n      // buttons && input listener: end\n    }\n    // if there is no confirm box: end\n\n    // extend new settings with the backup settings\n    newConfirmSettings = commonExtendOptions(true, newConfirmSettings, newConfirmSettingsBackup);\n  };\n  // CONFIRM: Create: end\n\n  var Notiflix = {\n    Confirm: {\n      // Init\n      init: function (userConfirmOptions) {\n        // extend options\n        newConfirmSettings = commonExtendOptions(true, confirmSettings, userConfirmOptions);\n        // internal css if exist\n        commonSetInternalCSSCodes(confirmGetInternalCSSCodes, 'NotiflixConfirmInternalCSS');\n      },\n      // Merge First Init\n      merge: function (userConfirmExtendOptions) {\n        // if initialized already\n        if (newConfirmSettings) {\n          newConfirmSettings = commonExtendOptions(true, newConfirmSettings, userConfirmExtendOptions);\n        }\n        // initialize first\n        else {\n          commonConsoleError('You have to initialize the Confirm module before call Merge function.');\n          return false;\n        }\n      },\n      // Show\n      show: function (title, message, okButtonText, cancelButtonText, okButtonCallback, cancelButtonCallback, options) {\n        confirmCreate(typesConfirm.Show, title, message, null, okButtonText, cancelButtonText, okButtonCallback, cancelButtonCallback, options);\n      },\n      // Ask\n      ask: function (title, question, answer, okButtonText, cancelButtonText, okButtonCallback, cancelButtonCallback, options) {\n        confirmCreate(typesConfirm.Ask, title, question, answer, okButtonText, cancelButtonText, okButtonCallback, cancelButtonCallback, options);\n      },\n      // Prompt\n      prompt: function (title, question, defaultAnswer, okButtonText, cancelButtonText, okButtonCallback, cancelButtonCallback, options) {\n        confirmCreate(typesConfirm.Prompt, title, question, defaultAnswer, okButtonText, cancelButtonText, okButtonCallback, cancelButtonCallback, options);\n      },\n    },\n  };\n\n  if (typeof window.Notiflix === 'object') {\n    return commonExtendOptions(true, window.Notiflix, { Confirm: Notiflix.Confirm });\n  } else {\n    return { Confirm: Notiflix.Confirm };\n  }\n\n});"],"names":["templateBtnAlertaVagas","data","cargo","tipoPaginaID","localidadesSeparadas","btnAlertaVagas","exibirAlertaVagas","possuiAlertaVagas","ID","templateCardAlertaVagas","localidadesSeparadasVirgula","cultura","CULTURE_EMPREGARE","replace","inicializarInternacionalizacao","i18next","isInitialized","lng","debug","defaultNS","resources","fallbackLng","code","slice","addResources","page","Templates","templateVagasSkeletonLoading","html","i","push","join","templateVagas","vagas","sectionVagas","document","querySelector","colSplide","colAlert","length","classList","remove","add","forEach","vaga","stringCidades","cidades","template","logoThumb","empresa","titulo","trabalhoRemoto","trabalhoRemotoTexto","isNullOrEmpty","salario","url","verMais","templateFiltroOptions","dados","tipoDadosNome","count","dado","id","nome","Helpers","scrollToCustom","targetElement","offset","parentElement","offsetParent","targetOffsetTop","offsetTop","window","scrollTo","top","behavior","truncateString","string","maxLength","substring","createStringFiltroFromObject","obj","Object","keys","map","key","Splides","splideTabs","splidesTabs","getElementById","splide","start","perPage","focus","trimSpace","arrows","pagination","isNavigation","autoWidth","gap","mount","splideCursos","splidesCursos","omitEnd","on","querySelectorAll","btn","contains","click","splideVagas","splidesVagas","init","this","Navegacao","scrollComOffset","element","targetId","getAttribute","moveParaSectionComOffsetAoClicar","addEventListener","e","preventDefault","ajustaSombraHeaders","headersPrincipais","headerNavegacao","ajustarSombras","Ajustar","headerPrincipal","IntersectionObserver","entries","entry","isIntersecting","root","threshold","rootMargin","observe","ativaTabAoEntrarNaSection","headerNav","pagina","tabsNavegacao","bootstrap","ScrollSpy","target","body","activateTab","index","go","Vagas","regexFiltros","carregaVagas","filtrosAdicionais","splideList","profissaoInput","skeletonCol","nomeProfissao","value","URL_API","innerHTML","getFetch","resultados","model","btnMaisVagas","eventBtnMaisVagas","configuraFiltros","facets","facet","filtroStringInput","filtroString","valores","_","chave","valor","filterName","estaPresente","keyValor","removeObj","stringToRemove","includes","console","log","dropdownMenu","offCanvasFilter","fixLabelClosingDropdownMenu","addQuantidadeFiltrosStyleOffcanvas","addQuantidadeFiltrosStyleDesktop","checkboxInputs","checkbox","checked","label","btnsFiltrosDesktop","filtros","btnFiltro","quantidadeFiltrosTotal","filtro","btnTarget","quantidadeFiltrosG","btnDropdownCount","verificaQuantidadeFiltros","closest","offcanvas","quantideFiltros","mySet","Set","textContent","size","offcanvasFiltros","Offcanvas","getInstance","hide","redirecionarParaMaisVagas","filtroAdicional","location","href","button","addBtnsEvents","btnsAplicarFiltros","btnsEliminarFiltros","btnsAplicarFiltrosOffCanvas","btnsEliminarFiltrosOffCanvas","removeTodosFiltrosCheckbox","inputs","input","name","adicionaTodosFiltrosCheckbox","Accordion","configAccordion","accordionSection","accordionElement","accordionTabs","accordionContents","accordionCol","heighOriginalAccordionCol","offsetHeight","ajustaEstilosAccordion","tab","accordionTabContent","cssText","styleTemp","style","createElement","head","appendChild","content","innerWidth","navTabs","nav","setTimeout","abrirTabAccordionOnScrollMobile","accordionTab","boundingClientRect","y","rootBounds","abrirTabOnScroll","adicionarVerMaisCursos","cursosSection","cardCurso","textos","btnVerMais","btnVerMenos","conteudoTodosTextos","texto","insertAdjacentHTML","textoCard","textoCompleto","textoTruncado","profissaoDetalhes","profissaoID","async","source","obterQueryString","campanha","salvarCookie","_definirOrigemCadastro","formData","FormData","append","obterOrigem","hostname","obterDispositivo","fetch","method","referer","origem","obterCookie","o","_insights","alertaVagas","profissaoTitulo","blocoBtns","botao","getElementsByClassName","Init","AlertaVaga","constructor","modalGenerico","vagaID","adicionais","alertaID","localidade","split","recarregar","cargos","bind","submitForm","excluir","loadFullPage","mostrar","resultado","ok","esconder","toastErroCarregar","text","formValidar","errorFieldCssClass","focusInvalidField","lockForm","addField","rule","errorMessage","onSuccess","removeField","contagemOptions","option","selected","cidade","then","default","TomSelect","plugins","maxItems","create","persist","createOnBlur","searchField","createFilter","render","no_results","escape","option_create","onInitialize","getValue","settings","placeholder","control_input","setAttribute","clearOptions","onChange","values","isBtnCriarAlerta","dispatchEvent","Event","modalBootstrap","Modal","backdrop","show","Confirm","className","titleColor","okButtonColor","okButtonBackground","cancelButtonColor","callbackSucesso","reload","bubbles","toastSucesso","callbackErro","mensagem","postFetch","event","callBackErro","erroAutenticacao","get","delete","chaveLocalStorageBuscasRecentesCargo","chaveLocalStorageBuscasRecentesLocalizacao","chaveLocalStorageCidadesSugestoes","sugestoesCidadesPadrao","templatesVagaBuscasRecentes","headerListagem","container","info","prepend","itemCargoListagem","elemento","match","el","buscaId","dataset","dadosSalvos","vagasBuscasRecentesCargoObter","dadosSalvosNovo","filter","x","localStorage","setItem","JSON","stringify","vagasBuscasRecentesCargoRemover","itemLocalizacaoListagem","undefined","buscaRecente","vagasBuscasRecentesLocalizacaoObter","vagasBuscasRecentesLocalizacaoRemover","autocompleteBuscaRecenteLocalizacao","formHeaderBuscarVagas","seletorInput","sugestoes","autoComplete","sugestoesCidades","buscasRecentesLocalizacao","exibirSugestoesCidades","exibindoCidadesAPI","autoCompleteLocalizacao","diacritics","submit","selector","placeHolder","debounce","src","query","retorno","querySemAcentos","toLowerCase","_dadosDoLocalStorage","item","nomeSemAcentos","normalize","requestCidades","json","error","resultsList","noResults","maxResults","list","temBuscasRecentes","linhaSeparadora","headerSugestoes","concat","reverse","seenIds","has","resultItem","highlight","events","selection","detail","nextSibling","objetoSelecionado","inputLocalizacao","valorAntesLoading","cb","cacheSugestoesCidades","sessionStorage","getItem","parse","getGeoData","geoData","baseURLAPI","hotSiteEmpresaID","hotSiteUrl","parametrosURL","URLSearchParams","request","toString","response","sucesso","topCidades","splice","remoto","cidadeObject","find","existe","cidadeCompleta","unshift","obterSugestoesCidades","eventoBuscarVagaRedirect","tomSelectBuscaLocalizacao","multiple","valueField","labelField","preload","load","callback","currentValue","Array","isArray","hasValue","avisoAssuntoSelecionado","todoFormulario","opcoesSubcategorias","selectAssuntoSubcategoria","clear","addOptions","setValue","erro","onItemAdd","setTextboxValue","close","tomSelectInstance","allOptionKeys","options","selectedKeys","ispermanent","removeOption","clearDynamicOptions","autocompleteBuscaRecenteCargo","form","autocompleteCargo","vagasBuscasRecentesCargoAdicionar","trim","arrayDados","dadoParaInserir","uuid","vagasBuscasRecentesLocalizacaoAdicionar","localizacao","inputCargo","callbackErroConexao","exibirToastErroConexao","exibirToastErroServidor","headers","findLoader","_removeLoader","nameEQ","ca","cookie","c","charAt","indexOf","navigator","userAgent","referrer","Proxy","search","searchParams","prop","array","iterator","getAll","days","expires","date","Date","setTime","getTime","toUTCString","Notify","failure","success","addTrack","mixpanel","empresaID","hotsite","dispositivo","track","dt","r","Math","random","floor","validarResultado","status","Sucesso","__defProp","defineProperty","__publicField","enumerable","configurable","writable","__defNormalProp","EMAIL_REGEXP","NUMBER_REGEXP","PASSWORD_REGEXP","STRONG_PASSWORD_REGEXP","Rules","Rules2","GroupRules","GroupRules2","CustomStyleTagIds","CustomStyleTagIds2","defaultDictionary","Required","dict","en","Email","MaxLength","MinLength","Password","StrongPassword","Number","MaxNumber","MinNumber","MinFilesCount","MaxFilesCount","Files","isPromise","val","getClassList","cls","isElement","Element","HTMLDocument","defaultGlobalConfig","errorFieldStyle","color","border","successFieldCssClass","errorLabelStyle","errorLabelCssClass","successLabelCssClass","testingMode","validateBeforeSubmitting","JustValidate","globalConfig","dictLocale","Map","field","fieldIds","fieldSelector","k","String","set","tooltips","refresh","lastScrollPosition","scrollY","isScrollTick","requestAnimationFrame","refreshAllTooltips","ev","isSubmitted","validateHandler","foundKey","fields","elem","validateField","currentGroup","groupFields","group","elems","validateGroup","handleFieldChange","handleGroupChange","renderErrors","initialize","errors","isValid","errorLabels","successLabels","eventListeners","customStyleTags","currentLocale","Error","setForm","HTMLFormElement","isTooltip","styleTag","Label","addListener","handleDocumentScroll","getLocalisedString","ruleValue","customMsg","_a","localisedStr","getFieldErrorMessage","fieldRule","msg","getElemValue","getFieldSuccessMessage","successMessage","getGroupErrorMessage","groupRule","getGroupSuccessMessage","setFieldInvalid","setFieldValid","setGroupInvalid","setGroupValid","type","files","validateGroupRule","every","validateFieldRule","afterInputChanged","elemValue","plugin","newVal","isEmpty","test","len","isLengthMoreThanMax","isLengthLessThanMin","isPassword","isStrongPassword","isNumber","num","isNaN","isNumberMoreThanMax","isNumberLessThanMin","CustomRegexp","regexp","RegExp","str","isFinite","filesConfig","isFilePropsInvalid","file","fileConfig","minSizeInvalid","minSize","maxSizeInvalid","maxSize","nameInvalid","names","extInvalid","extensions","typeInvalid","types","fileIdx","validator","result","asyncCheckPending","promise","resp","catch","promises","rules","res","config","Promise","allSettled","revalidateField","getKeyByFieldSelector","resolve","finally","clearFieldStyle","clearFieldLabel","renderFieldError","reject","afterSubmitValidation","forceRevalidation","validate","revalidate","_b","unlockForm","onSuccessCallback","call","onFailCallback","removeListener","formSubmitHandler","handler","func","removeEventListener","setKeyByFieldSelector","setListeners","getListenerType","handlerChange","clearErrors","removeGroup","addRequiredGroup","groupField","childrenInputs","from","parent","groups","parents","reversedParents","groupElem","getClosestParent","els","parentNode","getNodeParents","elem2","isDirty","_c","_d","errorStyle","key2","successStyle","successFieldStyle","_a2","tooltip","disabled","pointerEvents","webkitFilter","removeAttribute","renderTooltip","errorLabel","position","left","width","height","getBoundingClientRect","errorLabelRect","pos","direction","createErrorLabelElem","customErrorLabelStyle","assign","testId","createSuccessLabelElem","successLabel","customSuccessLabelStyle","successLabelStyle","renderErrorsContainer","errorsContainer","renderGroupLabel","isSuccess","renderFieldLabel","_e","_f","_g","labelElem","tagName","showLabels","isError","fieldName","showErrors","showSuccessLabels","message","renderGroupError","_b2","destroy","getFieldSelectorByKey","setCurrentLocale","locale","onFail","g","newConfirmSettings","typesConfirm","confirmSettings","zindex","distance","backgroundColor","borderRadius","backOverlay","backOverlayColor","rtl","fontFamily","cssAnimation","cssAnimationDuration","cssAnimationStyle","plainText","titleFontSize","titleMaxLength","messageColor","messageFontSize","messageMaxLength","buttonsFontSize","buttonsMaxLength","cancelButtonBackground","commonConsoleError","commonCheckHeadOrBody","commonExtendOptions","extended","deep","prototype","arguments","merge","hasOwnProperty","commonGetPlaintext","htmlPool","innerText","confirmGetInternalCSSCodes","confirmCreate","confirmType","title","messageOrQuestion","answer","okButtonText","cancelButtonText","okButtonCallback","cancelButtonCallback","Notiflix","newConfirmSettingsBackup","ntflxConfirmWrap","zIndex","padding","confirmPosition","confirmOverlay","cancelButtonHTML","setValidationInput","theExpectedAnswer","theClientAnswer","inputMaxLength","ceil","confirmCloseWrap","okButton","validationInput","setSelectionRange","thisValue","toLocaleLowerCase","keyCode","stopPropagation","returnValue","cancelBubble","timeout","removeChild","clearTimeout","userConfirmOptions","getInternalCSSCodes","styleElementId","internalCSS","commonSetInternalCSSCodes","userConfirmExtendOptions","ask","question","prompt","defaultAnswer","factory"],"sourceRoot":""}