http durum kodu 301, istenen kaynağın kalıcı olarak yeni bir URL'ye taşındığı anlamına gelir. Gelecekteki tüm istekler yeni adresi kullanmalıdır.
Tarayıcı kullanıcıyı otomatik olarak yeni adrese yönlendirecek ve arama motorları dizinlerini güncelleyecektir.
http durum kodu 200, standart bir başarılı HTTP sunucu yanıtıdır. Bu, istemcinin isteğinin (örneğin, bir tarayıcıdan) başarıyla işlendiği ve sunucunun istenen verileri ilettiği anlamına gelir.
Kullanıcı içeriği hatasız alır ve sayfa veya uygulama düzgün çalışır. Kod 200'e veri eşlik ediyorsa, tarayıcı veya program bunu işler ve kullanıcıya görüntüler.
GET / HTTP/1.1 Host: imesd.com Accept: */* User-Agent: Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; [email protected])
<!DOCTYPE html> <html lang="es-ES" itemscope itemtype="http://schema.org/WebPage"> <head> <meta charset="utf-8"> <title>Software de control horario Numa | Imesd</title> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=5"> <link rel="shortcut icon" href="/images/favicon_hu88e77fda8259aec1ad610bc9dd60fa00_1382_32x0_resize_box_3.png" type="image/x-icon"> <link rel="icon" href="/images/favicon_hu88e77fda8259aec1ad610bc9dd60fa00_1382_32x0_resize_box_3.png" type="image/x-icon"> <link rel="icon" type="image/png" sizes="16x16" href="/images/favicon_hu88e77fda8259aec1ad610bc9dd60fa00_1382_16x0_resize_box_3.png"> <link rel="icon" type="image/png" sizes="32x32" href="/images/favicon_hu88e77fda8259aec1ad610bc9dd60fa00_1382_32x0_resize_box_3.png"> <link rel="apple-touch-icon" sizes="180x180" href="/images/favicon_hu88e77fda8259aec1ad610bc9dd60fa00_1382_180x0_resize_box_3.png"> <meta name="google-site-verification" content="c4Qj5eeL59lCywLK6__frFxjGml2wLiGnfsj1AHH2mk" /> <base href="https://imesd.es/es/"> <link rel="canonical" href="https://imesd.es/es/" itemprop="url" /> <link rel="alternate" hreflang="es" href="https://imesd.es/es/"> <link rel="alternate" hreflang="ca" href="https://imesd.es/ca/"> <link rel="alternate" hreflang="x-default" href="https://imesd.es/es/"> <meta name="keywords" content="Software control horario accesos"> <meta name="description" content="Imesd Numa es el software de control horario que ahorra tiempo a tu empresa. Puedes contratarlo en nuestra nube o comprarlo para ponerlo en tu servidor o nube privada."> <meta name="author" content="Imesd"> <meta name="generator" content="Hugo 0.104.3" /> <meta property="og:image:width" content="180"> <meta property="og:image:height" content="57"> <meta property="og:image:type" content="image/.png"> <meta property="og:title" content="Software de control horario Numa | Imesd" /> <meta property="og:description" content="Imesd Numa es el software de control horario que ahorra tiempo a tu empresa. Puedes contratarlo en nuestra nube o comprarlo para ponerlo en tu servidor o nube privada." /> <meta property="og:type" content="website" /> <meta property="og:url" content="https://imesd.es/es/" /> <meta name="twitter:title" content="Software de control horario Numa | Imesd" /> <meta name="twitter:description" content="Imesd Numa es el software de control horario que ahorra tiempo a tu empresa. Puedes contratarlo en nuestra nube o comprarlo para ponerlo en tu servidor o nube privada." /> <script> var _paq = window._paq = window._paq || []; _paq.push(['trackPageView']); _paq.push(['enableLinkTracking']); (function() { var u="//controlhorari.com/analitica-web/"; _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', '1']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s); })(); </script> <meta http-equiv="x-dns-prefetch-control" content="on"> <link rel="preconnect" href="//ajax.googleapis.com"> <link rel="preconnect" href="//www.googletagmanager.com"> <link rel="preconnect" href="//www.google-analytics.com"> <link rel="dns-prefetch" href="//ajax.googleapis.com"> <link rel="dns-prefetch" href="//www.googletagmanager.com"> <link rel="dns-prefetch" href="//www.google-analytics.com"> <link href="https://imesd.es/third-party/font-awesome/v6/css/all.min.css" rel="stylesheet"> <link href="https://imesd.es/third-party/google-fonts/css/font-faces.css" rel="stylesheet"> <link rel="stylesheet" href="/css/style.0ab5b12051a551e899b0e465e714fa4e2e45b34ec3e56f967fb806ccfd6202dae57836791a8c15bb4913e35d3e7806881aa816748d1bfd8ab9b86a70a3501bb5.css"> </head> <body> <header class="navigation"> <div class="container"> <nav class="navbar navbar-expand-lg navbar-light"> <a class="navbar-brand" href="/es"> <img loading="preload" decoding="async" class="img-fluid mb-0 only-light" width="180" height="57" src="/images/logo-imesd-electronica_hu02b7a4dff66e0c9c4fe06ddded7ea65c_4851_180x0_resize_q100_h2_box_3.webp" alt="Software de control horario Numa | Imesd" onerror="this.onerror=null;this.src='\/images\/logo-imesd-electronica_hu02b7a4dff66e0c9c4fe06ddded7ea65c_4851_180x0_resize_box_3.png'"> <img loading="preload" decoding="async" class="img-fluid mb-0 only-dark" width="180" height="57" src="/images/logo-imesd-electronica-white_hu01c2aee102885126dcee2c8e132f4c59_9136_180x0_resize_q100_h2_box_3.webp" alt="Software de control horario Numa | Imesd" onerror="this.onerror=null;this.src='\/images\/logo-imesd-electronica-white_hu01c2aee102885126dcee2c8e132f4c59_9136_180x0_resize_box_3.png'"> </a> <div class="d-flex align-items-center"> <select class="me-3 border-0 d-inline-block d-lg-none" onchange="location = this.value;"> <option id="es" value="/es/" selected>ES </option> <option id="ca" value="/ca/">CA</option> </select> <button aria-label="navbar toggler" class="navbar-toggler border-0 h4 mb-0" type="button" data-bs-toggle="collapse" data-bs-target="#navigation"> <i class="fas fa-bars"></i> </button> <div class="theme-switcher d-inline-block d-lg-none"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15 15" width="20" height="20" stroke-linecap="round" stroke-linejoin="round" fill="none" stroke="#000"> <mask id="m"> <circle class="masker" cx="7.5" cy="7.5" r="8.5" fill="#fff" /> </mask> <g mask="url(#m)"> <path class="sun" d="M7.5 1.5v-1m0 13.99v-.998m6-5.997h1m-13 0h-1m2-4.996l-1-1m12 0l-1 1m-10 9.993l-1 1m12 0l-1-1m-2-4.997a2.999 2.999 0 01-3 2.998 2.999 2.999 0 113-2.998z" /> </g> <path class="moon" fill="white" d="M1.66 11.362A6.5 6.5 0 007.693.502a7 7 0 11-6.031 10.86z" /> </svg> </div> </div> <div class="collapse navbar-collapse text-center" id="navigation"> <ul class="navbar-nav mx-auto"> <li class="nav-item active"> <a class="nav-link" href="/es/">Inicio</a> </li> <li class="nav-item dropdown dropdown-lg "> <a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> Funcionalidades </a> <ul class="dropdown-menu"> <li> <a class=" dropdown-item " href="/es/funcionalidades/"><i class='dropdown-icon fas fa-arrow-right'></i><span class='fst-italic rounded p-1' style='background-color: #d1e7dd; color: black'>Ver todas</span></a> </li> <li> <a class=" dropdown-item " href="/es/funcionalidades/maquinas-fichar/"><i class='dropdown-icon fas fa-person-walking-arrow-right'></i>Máquinas de fichar y teletrabajo</a> </li> <li> <a class=" dropdown-item " href="/es/funcionalidades/portal-empleado/"><i class='dropdown-icon fas fa-house-user'></i>Portal del empleado</a> </li> <li> <a class=" dropdown-item " href="/es/funcionalidades/calendario-planificador-turnos/"><i class='dropdown-icon fas fa-calendar-days'></i>Calendario y planificador</a> </li> <li> <a class=" dropdown-item " href="/es/funcionalidades/bajas-vacaciones-horas-libres/"><i class='dropdown-icon fas fa-umbrella-beach'></i>Bajas, vacaciones y horas libres</a> </li> <li> <a class=" dropdown-item " href="/es/funcionalidades/gestion-saldo-bolsa-horas/"><i class='dropdown-icon fas fa-scale-balanced'></i>Saldo y bolsa de horas</a> </li> <li> <a class=" dropdown-item " href="/es/funcionalidades/gestor-documentos/"><i class='dropdown-icon fas fa-folder-open'></i>Gestor de documentos</a> </li> <li> <a class=" dropdown-item " href="/es/funcionalidades/firma-digital-documentos/"><i class='dropdown-icon fas fa-folder-open'></i>Firma digital</a> </li> <li> <a class=" dropdown-item " href="/es/funcionalidades/gestion-tareas/"><i class='dropdown-icon fas fa-list-check'></i>Gestión de tareas</a> </li> <li> <a class="d-none d-sm-block dropdown-item " href="/es/funcionalidades/control-acceso/"><i class='dropdown-icon fas fa-door-open'></i>Control de accesos</a> </li> <li> <a class="d-none d-sm-block dropdown-item " href="/es/funcionalidades/control-presentes-ausentes/"><i class='dropdown-icon fas fa-arrows-to-circle'></i>Presentes y ausentes</a> </li> <li> <a class="d-none d-sm-block dropdown-item " href="/es/funcionalidades/mini-nomina/"><i class='dropdown-icon fas fa-coins'></i>Mini nómina</a> </li> <li> <a class="d-none d-sm-block dropdown-item " href="/es/funcionalidades/automatizacion/"><i class='dropdown-icon fas fa-robot'></i>Automatización</a> </li> <li> <a class="d-none d-sm-block dropdown-item " href="/es/funcionalidades/canal-denuncias/"><i class='dropdown-icon fas fa-comments'></i>Canal de denuncias</a> </li> <li> <a class="d-none d-sm-block dropdown-item " href="/es/funcionalidades/gestion-visitas/"><i class='dropdown-icon fas fa-handshake'></i>Gestión de visitas</a> </li> <li> <a class="d-none d-sm-block dropdown-item " href="/es/funcionalidades/formulas-contadores-personalizados/"><i class='dropdown-icon fas fa-square-root-variable'></i>Fórmulas personalizadas</a> </li> </ul> </li> <li class="nav-item "> <a class="nav-link" href="/es/versiones-precios/">Versiones y precios</a> </li> <li class="nav-item "> <a class="nav-link" href="/es/blog/">Blog</a> </li> <li class="nav-item dropdown "> <a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> Empresa </a> <ul class="dropdown-menu"> <li> <a class=" dropdown-item " href="/es/contacto/">Contacto</a> </li> <li> <a class=" dropdown-item " href="/es/soporte/">Soporte</a> </li> <li> <a class=" dropdown-item " href="/es/nosotros/">Nosotros</a> </li> </ul> </li> </ul> <select class="me-1 border-0 d-none d-lg-inline-block" id="select-language" onchange="location = this.value;"> <option id="es" value="/es/" selected>ES </option> <option id="ca" value="/ca/">CA</option> </select> <a href="/es/demo/" class="btn btn-sm btn-primary ms-lg-4 mt-2 mt-lg-0">Solicita una demo</a> <div class="theme-switcher d-none d-lg-inline-block"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15 15" width="20" height="20" stroke-linecap="round" stroke-linejoin="round" fill="none" stroke="#000"> <mask id="m"> <circle class="masker" cx="7.5" cy="7.5" r="8.5" fill="#fff" /> </mask> <g mask="url(#m)"> <path class="sun" d="M7.5 1.5v-1m0 13.99v-.998m6-5.997h1m-13 0h-1m2-4.996l-1-1m12 0l-1 1m-10 9.993l-1 1m12 0l-1-1m-2-4.997a2.999 2.999 0 01-3 2.998 2.999 2.999 0 113-2.998z" /> </g> <path class="moon" fill="white" d="M1.66 11.362A6.5 6.5 0 007.693.502a7 7 0 11-6.031 10.86z" /> </svg> </div> </div> </nav> </div> </header> <script> var darkMode = false; if (window.matchMedia('(prefers-color-scheme: dark)').matches){darkMode = true} if (localStorage.getItem('theme') === 'dark'){darkMode = true} else if (localStorage.getItem('theme') === 'light'){darkMode = false} if (darkMode){document.body.classList.toggle('dark')} document.addEventListener('DOMContentLoaded', () => { var themeSwitch = document.querySelectorAll('.theme-switcher'); [].forEach.call(themeSwitch, function (ts) { ts.addEventListener('click', () => { document.body.classList.toggle('dark'); localStorage.setItem('theme', document.body.classList.contains('dark') ? 'dark' : 'light'); }); }) }); </script> <main> <section class="banner"> <div class="container"> <div class="row"> <div class="col-xl-6 text-center text-xl-start"> <h1 class="home-title mb-4 pb-2">Numa, el software de control horario que se adapta a tu empresa</h1> <p class="mb-4 fs-5"><em><strong>Muchas apps pueden registrar la jornada, pero ninguna permite gestionarla de manera tan personalizada como lo hace Numa.</strong></em> <br> Si pierdes el tiempo haciendo cálculos manuales de las horas trabajadas, cuadrando horarios, ajustando las horas extras, o valorando las horas trabajadas según pluses o condiciones especiales de tu convenio, <strong>Numa es el software de control horario que tu empresa necesita</strong>.</p> <div class="mb-5"> <a href="demo/" title="¡Solicita ya una demo!" class="btn btn-outline-primary m-2">¡Solicita ya una demo!</a> </div> </div> <div class="col-xl-6 text-center"> <img src="/images/numa-dashboard.gif" loading="lazy" decoding="async" alt="banner image" class=" img-fluid" width="750" height=""> </div> </div> </div> </section> <section class="section overflow-hidden"> <div class="container"> <div class="row"> <div class="col-12 text-center mb-5"> <h2 class="h6">Durante más de 35 años, más de 3.000 empresas como la tuya han confiado y siguen confiando en nosotros</h2> </div> <div class="col-12"> <div class="swiper brand-carousel"> <div class="swiper-wrapper"> <div class="swiper-slide brand-item d-flex align-items-center justify-content-center"> <img src="/images/brands/transnatur_huea80cd5e57dc5d2589335eae566f6b29_1301763_0x35_resize_q100_h2_box_3.webp" loading="lazy" decoding="async" alt="Brands logo" class=" img-fluid" width="144" height="35" onerror="this.onerror='null';this.src='\/images\/brands\/transnatur_huea80cd5e57dc5d2589335eae566f6b29_1301763_0x35_resize_box_3.png'"> </div> <div class="swiper-slide brand-item d-flex align-items-center justify-content-center"> <img src="/images/brands/admarina_hu664d2b95b0be9405c15f2cf58d8266ad_8933_0x35_resize_q100_h2_box_3.webp" loading="lazy" decoding="async" alt="Brands logo" class=" img-fluid" width="75" height="35" onerror="this.onerror='null';this.src='\/images\/brands\/admarina_hu664d2b95b0be9405c15f2cf58d8266ad_8933_0x35_resize_box_3.png'"> </div> <div class="swiper-slide brand-item d-flex align-items-center justify-content-center"> <img src="/images/brands/leonelli_huacab068713707ca325670481789ba275_35667_0x35_resize_q100_h2_box_3.webp" loading="lazy" decoding="async" alt="Brands logo" class=" img-fluid" width="108" height="35" onerror="this.onerror='null';this.src='\/images\/brands\/leonelli_huacab068713707ca325670481789ba275_35667_0x35_resize_box_3.png'"> </div> <div class="swiper-slide brand-item d-flex align-items-center justify-content-center"> <img src="/images/brands/tusgsal_hudf607b03e05a663ef9da44a443e5f516_109314_0x35_resize_q100_h2_box_3.webp" loading="lazy" decoding="async" alt="Brands logo" class=" img-fluid" width="144" height="35" onerror="this.onerror='null';this.src='\/images\/brands\/tusgsal_hudf607b03e05a663ef9da44a443e5f516_109314_0x35_resize_box_3.png'"> </div> </div> </div> </div> </div> </div> </section> <section class="section bg-light"> <div class="container"> <div class="row"> <div class="col-xl-4 mb-5 mb-xl-0"> <div class="pe-0 pe-xl-3"> <h2 class="section-title h3 mb-4">Modulable, adaptable y también disponible sin suscripciones.</h2> <div class="content mb-4"> <strong>Modulable</strong> porque puedes elegir las funcionalidades que realmente necesitas.<br><br><strong>Adaptable</strong> porque configuramos la aplicación para que cubra las particularidades de tu empresa.<br><br><strong>Disponible sin suscripciones</strong>, ya que si tu empresa dispone de una infraestructura informática propia, no tiene por qué pagar cada mes por utilizar el software. </div> <a href="funcionalidades/" title="¡Explora todas sus funcionalidades!" class="btn btn-outline-primary">¡Explora todas sus funcionalidades!</a> </div> </div> <div class="col-xl-8"> <div class="row g-5"> <div class="col-md-6"> <div class="feature-card is-hoverable bg-white rounded-1 d-block d-sm-flex"> <i class="icon fa fa-calendar-days text-primary mb-4"></i> <div class="block"> <h4 class="mb-3 h5">Calendario y planificador de horarios y turnos</h4> <p class="mb-0">Crea horarios, calendarios y turnos de trabajo y asígnalos fácilmente a los trabajadores: <strong>intensivos, partidos, flexibles, abiertos, correturnos, nocturnos</strong>, etc. No importa qué tipo de horarios tengáis en tu empresa.</p> </div> </div> </div> <div class="col-md-6"> <div class="feature-card is-hoverable bg-white rounded-1 d-block d-sm-flex"> <i class="icon fa fa-street-view text-primary mb-4"></i> <div class="block"> <h4 class="mb-3 h5">Múltiples maneras de fichar</h4> <p class="mb-0">Ficha desde el <strong>móvil o tablet</strong>, desde casa con un <strong>ordenador</strong>, o presencialmente en la oficina mediante <strong>relojes de fichar</strong> por tarjeta RFID, lectura de huella dactilar o reconocimiento facial por infrarrojos.</p> </div> </div> </div> <div class="col-md-6"> <div class="feature-card is-hoverable bg-white rounded-1 d-block d-sm-flex"> <i class="icon fa fa-pen-ruler text-primary mb-4"></i> <div class="block"> <h4 class="mb-3 h5">Reglas para contabilizar las horas trabajadas</h4> <p class="mb-0">Crea reglas que te permitan <strong>contabilizar y valorar las horas trabajadas</strong> en función de franjas horarias, pluses diarios, o particularidades del empleado (por ejemplo, una discapacidad). Puedes incluso limitar las horas y asignarles un precio para hacer un <strong>cálculo estimado de la nómina</strong>.</p> </div> </div> </div> <div class="col-md-6"> <div class="feature-card is-hoverable bg-white rounded-1 d-block d-sm-flex"> <i class="icon fa fa-gears text-primary mb-4"></i> <div class="block"> <h4 class="mb-3 h5">Automatización de informes y exportaciones</h4> <p class="mb-0">Crea tareas automáticas que envíen a los trabajadores un <strong>resumen mensual en PDF</strong> de sus fichajes y las horas trabajadas, exporta <strong>ficheros CSV</strong> para explotar los datos mediante Excel, o integra con herramientas como <strong>Microsoft PowerBI ®</strong>.</p> </div> </div> </div> </div> </div> </div> </div> </section> <section class="section "> <div class="container"> <div class="row align-items-center g-5"> <div class="col-lg-6 order-lg-0 order-1"> <div class="pe-0 pe-lg-5"> <h2 class="section-title h3">Protégete ante Inspección de Trabajo</h2> <p class="mb-4">Numa proporciona la <strong>información que Inspección de Trabajo solicita</strong> en sus inspecciones. Además, puedes configurar todos los informes para añadir o quitar información en función de los requerimientos que se soliciten en cada caso.</p> <a href="/es/blog/como-actua-inspeccion-trabajo-control-horario-jornada/" title="Lee este caso real de inspección" class="btn-link">Lee este caso real de inspección <i class="fas fa-arrow-right"></i></a> </div> </div> <div class="col-lg-6 order-lg-1 order-0"> <div class="swiper-slide"> <picture> <source srcset="/images/inspect_hu8c28d461b84393a2a7bd3211131c5a67_63945_545x0_resize_q100_h2_box_3.webp" media="(max-width: 575px)"> <source srcset="/images/inspect_hu8c28d461b84393a2a7bd3211131c5a67_63945_600x0_resize_q100_h2_box_3.webp" media="(max-width: 767px)"> <source srcset="/images/inspect_hu8c28d461b84393a2a7bd3211131c5a67_63945_700x0_resize_q100_h2_box_3.webp" media="(max-width: 991px)"> <source srcset="/images/inspect_hu8c28d461b84393a2a7bd3211131c5a67_63945_1110x0_resize_q100_h2_box_3.webp" > <img loading="lazy" decoding="async" src="/images/inspect_hu8c28d461b84393a2a7bd3211131c5a67_63945_1110x0_resize_box_3.png"class=" img-fluid" alt="Protégete ante Inspección de Trabajo" width="876" height="530"> </picture> </div> </div> </div> </div> </section> <section class="section bg-light "> <div class="container"> <div class="row align-items-center g-5"> <div class="col-lg-6 order-1"> <div class="pe-0 pe-lg-5"> <h2 class="section-title h3">Olvida las suscripciones y no pagues cada mes por usar un software de control horario</h2> <p class="mb-4">Eres libre de elegir si quieres pagar cada mes por usar Numa en nuestra nube o comprarlo para instalarlo en la infraestructura informática de tu empresa. <strong>Usa nuestro software sin límites, sin permanencias, y sin temer cambios de precio de las cuotas en el futuro</strong>.</p> <a href="/es/versiones-precios/#packs" title="Mira los packs económicos disponibles" class="btn-link">Mira los packs económicos disponibles <i class="fas fa-arrow-right"></i></a> </div> </div> <div class="col-lg-6 order-0"> <div class="swiper-slide"> <picture> <source srcset="/images/stop-subscription-es_hu2746b02a4c4591c40b5c3212765d35f4_89763_545x0_resize_q100_h2_box_3.webp" media="(max-width: 575px)"> <source srcset="/images/stop-subscription-es_hu2746b02a4c4591c40b5c3212765d35f4_89763_600x0_resize_q100_h2_box_3.webp" media="(max-width: 767px)"> <source srcset="/images/stop-subscription-es_hu2746b02a4c4591c40b5c3212765d35f4_89763_700x0_resize_q100_h2_box_3.webp" media="(max-width: 991px)"> <source srcset="/images/stop-subscription-es_hu2746b02a4c4591c40b5c3212765d35f4_89763_1110x0_resize_q100_h2_box_3.webp" > <img loading="lazy" decoding="async" src="/images/stop-subscription-es_hu2746b02a4c4591c40b5c3212765d35f4_89763_1110x0_resize_box_3.png"class=" img-fluid" alt="Olvida las suscripciones y no pagues cada mes por usar un software de control horario" width="876" height="530"> </picture> </div> </div> </div> </div> </section> <section class="section "> <div class="container"> <div class="row align-items-center g-5"> <div class="col-lg-6 order-lg-0 order-1"> <div class="pe-0 pe-lg-5"> <h2 class="section-title h3">¿Prefieres alquilar el software en nuestra nube?</h2> <p class="mb-4">Si prefieres la suscripción a la compra del software, Numa también se encuentra disponible en nuestra nube <strong>desde 22€/mes + IVA</strong> (10 empleados). Además, <strong>si más adelante prefieres comprar el software para instalarlo en tu nube o servidor, te traspasamos los datos para que puedas seguir usando la aplicación sin problemas</strong>.</p> </div> </div> <div class="col-lg-6 order-lg-1 order-0"> <div class="swiper-slide"> <picture> <source srcset="/images/numa-cloud_hu9790ac8080b3529055086ffa83e56ab2_240515_545x0_resize_q100_h2_box_3.webp" media="(max-width: 575px)"> <source srcset="/images/numa-cloud_hu9790ac8080b3529055086ffa83e56ab2_240515_600x0_resize_q100_h2_box_3.webp" media="(max-width: 767px)"> <source srcset="/images/numa-cloud_hu9790ac8080b3529055086ffa83e56ab2_240515_700x0_resize_q100_h2_box_3.webp" media="(max-width: 991px)"> <source srcset="/images/numa-cloud_hu9790ac8080b3529055086ffa83e56ab2_240515_1110x0_resize_q100_h2_box_3.webp" > <img loading="lazy" decoding="async" src="/images/numa-cloud_hu9790ac8080b3529055086ffa83e56ab2_240515_1110x0_resize_box_3.png"class=" img-fluid" alt="¿Prefieres alquilar el software en nuestra nube? " width="1350" height="900"> </picture> </div> </div> </div> </div> </section> <section class="section bg-light "> <div class="container"> <div class="row align-items-center g-5"> <div class="col-lg-6 order-1"> <div class="pe-0 pe-lg-5"> <h2 class="section-title h3">Deja de usar herramientas que no hacen lo que necesitas</h2> <p class="mb-4">Quizás ya estés usando un software de control horario con el que debes hacer correcciones manuales sobre los resultados obtenidos. <strong>Numa es altamente configurable y se ajusta como un guante a las necesidades de tu empresa</strong>, permitiendo incluso crear contadores a medida para obtener automáticamente cálculos que ahora estés realizando manualmente.</p> <a href="/es/funcionalidades/" title="Explora todas las funcionalidades de Numa" class="btn-link">Explora todas las funcionalidades de Numa <i class="fas fa-arrow-right"></i></a> </div> </div> <div class="col-lg-6 order-0"> <div class="swiper-slide"> <picture> <source srcset="/images/useless-software_hua609129f5d99ced923bd9137c280aff1_77580_545x0_resize_q100_h2_box_3.webp" media="(max-width: 575px)"> <source srcset="/images/useless-software_hua609129f5d99ced923bd9137c280aff1_77580_600x0_resize_q100_h2_box_3.webp" media="(max-width: 767px)"> <source srcset="/images/useless-software_hua609129f5d99ced923bd9137c280aff1_77580_700x0_resize_q100_h2_box_3.webp" media="(max-width: 991px)"> <source srcset="/images/useless-software_hua609129f5d99ced923bd9137c280aff1_77580_1110x0_resize_q100_h2_box_3.webp" > <img loading="lazy" decoding="async" src="/images/useless-software_hua609129f5d99ced923bd9137c280aff1_77580_1110x0_resize_box_3.png"class=" img-fluid" alt="Deja de usar herramientas que no hacen lo que necesitas" width="876" height="530"> </picture> </div> </div> </div> </div> </section> <section class="section "> <div class="container"> <div class="row align-items-center g-5"> <div class="col-lg-6 order-lg-0 order-1"> <div class="pe-0 pe-lg-5"> <h2 class="section-title h3">Tú eliges si quieres contratar o no un servicio de soporte</h2> <p class="mb-4">Todas nuestras soluciones de compra vienen con un <strong>periodo de varios meses de soporte GRATIS</strong>. Una vez finalizado el periodo, tú decides si quieres prolongar el servicio. Disponemos de varios contratos que te permiten, por ejemplo, resolver dudas sobre el funcionamiento de la aplicación, formar al personal nuevo de RRHH o cubrir reparaciones en caso de que dispongas de máquinas de fichar.</p> </div> </div> <div class="col-lg-6 order-lg-1 order-0"> <div class="swiper-slide"> <picture> <source srcset="/images/support_hue23809fc8242e667824bdd5aa3cc1805_138466_545x0_resize_q100_h2_box_3.webp" media="(max-width: 575px)"> <source srcset="/images/support_hue23809fc8242e667824bdd5aa3cc1805_138466_600x0_resize_q100_h2_box_3.webp" media="(max-width: 767px)"> <source srcset="/images/support_hue23809fc8242e667824bdd5aa3cc1805_138466_700x0_resize_q100_h2_box_3.webp" media="(max-width: 991px)"> <source srcset="/images/support_hue23809fc8242e667824bdd5aa3cc1805_138466_1110x0_resize_q100_h2_box_3.webp" > <img loading="lazy" decoding="async" src="/images/support_hue23809fc8242e667824bdd5aa3cc1805_138466_1110x0_resize_box_3.png"class=" img-fluid" alt="Tú eliges si quieres contratar o no un servicio de soporte" width="876" height="530"> </picture> </div> </div> </div> </div> </section> <section class="section bg-light "> <div class="container"> <div class="row align-items-center g-5"> <div class="col-lg-6 order-1"> <div class="pe-0 pe-lg-5"> <h2 class="section-title h3">La garantía de más de 35 años de experiencia</h2> <p class="mb-4"><strong>No somos una startup. Llevamos más de 35 años de experiencia desarrollando sistemas de control horario</strong>, lo que nos ha proporcionado una sólida base de conocimiento para ofrecer un producto que se adapta a la realidad de cada empresa.</p> </div> </div> <div class="col-lg-6 order-0"> <div class="swiper-slide"> <picture> <source srcset="/images/experience-es_hu8e1eee359bd6dbd2df19159dfdf604e7_159300_545x0_resize_q100_h2_box_3.webp" media="(max-width: 575px)"> <source srcset="/images/experience-es_hu8e1eee359bd6dbd2df19159dfdf604e7_159300_600x0_resize_q100_h2_box_3.webp" media="(max-width: 767px)"> <source srcset="/images/experience-es_hu8e1eee359bd6dbd2df19159dfdf604e7_159300_700x0_resize_q100_h2_box_3.webp" media="(max-width: 991px)"> <source srcset="/images/experience-es_hu8e1eee359bd6dbd2df19159dfdf604e7_159300_1110x0_resize_q100_h2_box_3.webp" > <img loading="lazy" decoding="async" src="/images/experience-es_hu8e1eee359bd6dbd2df19159dfdf604e7_159300_1110x0_resize_box_3.png"class=" img-fluid" alt="La garantía de más de 35 años de experiencia" width="876" height="530"> </picture> </div> </div> </div> </div> </section> <section class="section bg-light"> <div class="container"> <div class="row mb-5"> <div class="col-lg-6 mx-auto"> <div class="text-center"> <h2 class="section-title h3">Empresas como la tuya confían en nosotros desde hace años</h2> <p></p> </div> </div> </div> <div class="row justify-content-center"> <div class="col-xl-10"> <div class="swiper testimonial-carousel"> <div class="swiper-wrapper mb-3"> <div class="swiper-slide text-left"> <p class="lead mb-5 text-dark">La colaboración con la compañía Imesd se remonta a más de una década y ha sido básicamente debido a una relación y atención personal excelente, con un magnífico equipo de profesionales que siempre nos han asesorado y lo más importante, solventado de forma eficiente cualquier posible consulta, problema técnico o mejora en nuestros sistemas de marcajes. Empresa que solo podemos recomendar por todo lo expuesto.</p> <img src="/images/brands/transnatur_huea80cd5e57dc5d2589335eae566f6b29_1301763_90x0_resize_q100_h2_box_3.webp" loading="lazy" decoding="async" alt="Ángel Casanovas" class=" rounded-circle mb-3 img-fluid" width="90" height="22" onerror="this.onerror='null';this.src='\/images\/brands\/transnatur_huea80cd5e57dc5d2589335eae566f6b29_1301763_90x0_resize_box_3.png'"> <h5 class="mb-1">Ángel Casanovas</h5> <p>Director de RRHH, TransNatur</p> </div> <div class="swiper-slide text-left"> <p class="lead mb-5 text-dark">Desde 2012, ha sido un placer poder usar un software de control de horarios tan intuitivo que además integra una gestión de puntos de acceso y todo desde una plataforma web.</p> <img src="/images/brands/tusgsal_hudf607b03e05a663ef9da44a443e5f516_109314_90x0_resize_q100_h2_box_3.webp" loading="lazy" decoding="async" alt="Silvia Lara" class=" rounded-circle mb-3 img-fluid" width="90" height="22" onerror="this.onerror='null';this.src='\/images\/brands\/tusgsal_hudf607b03e05a663ef9da44a443e5f516_109314_90x0_resize_box_3.png'"> <h5 class="mb-1">Silvia Lara</h5> <p>RRHH, Tusgsal</p> </div> <div class="swiper-slide text-left"> <p class="lead mb-5 text-dark">Trabajamos con Imesd desde 2008 y hemos utilizado ya dos generaciones distintas de su software de control horario. Estamos muy satisfechos con su servicio.</p> <img src="/images/brands/admarina_hu664d2b95b0be9405c15f2cf58d8266ad_8933_90x0_resize_q100_h2_box_3.webp" loading="lazy" decoding="async" alt="Quim Aymerich" class=" rounded-circle mb-3 img-fluid" width="90" height="42" onerror="this.onerror='null';this.src='\/images\/brands\/admarina_hu664d2b95b0be9405c15f2cf58d8266ad_8933_90x0_resize_box_3.png'"> <h5 class="mb-1">Quim Aymerich</h5> <p>Gerente, AD Marina Automotive</p> </div> <div class="swiper-slide text-left"> <p class="lead mb-5 text-dark">Somos clientes desde hace más de 20 años y todavía seguimos trabajando con Imesd porque siempre han sabido determinar nuestras necesidades, adaptando en cada momento nuestro sistema de control horario a los nuevos tiempos.</p> <img src="/images/brands/leonelli_huacab068713707ca325670481789ba275_35667_90x0_resize_q100_h2_box_3.webp" loading="lazy" decoding="async" alt="Neus Mantero" class=" rounded-circle mb-3 img-fluid" width="90" height="29" onerror="this.onerror='null';this.src='\/images\/brands\/leonelli_huacab068713707ca325670481789ba275_35667_90x0_resize_box_3.png'"> <h5 class="mb-1">Neus Mantero</h5> <p>Administradora, Leonelli</p> </div> </div> <div class="swiper-pagination"></div> </div> </div> </div> </div> </section> <section class="section pb-0"> <div class="container"> <div class="row"> <div class="col-lg-6 text-center mx-auto"> <h2 class="section-title h3">Integraciones y modificaciones a medida</h2> <p>¿Quieres conectar la aplicación con otros software de Nómina o ERP? No hay problema. No solo realizamos integraciones sino también modificaciones a medida para que Numa se adapte todavía más a tus necesidades.</p> </div> <div class="col-12 text-center"> </div> </div> </div> <div class="section pb-0"> <img src="/images/screenshot.svg" loading="lazy" decoding="async" alt="call to action" class="w-100 img-fluid" width="" height=""> </div> </section> <section class="section"> <div class="container"> <div class="row align-items-center justify-content-center text-center"> <div class="col-lg-5 col-md-7"> <h2 class="section-title">¿Tienes dudas?</h2> <p class="mb-4">Te acompañamos en el proceso de elegir la solución de control horario que más te convenga y de formarte para empezar a utilizarla.</p> <a href="/es/contacto/" title="Contacta con nosotros" class="btn btn-primary">Contacta con nosotros</a> </div> </div> </div> </section> </main> <footer class="bg-light section pb-0"> <div class="container"> <div class="row justify-content-center"> <div class="col-xl-11"> <div class="section pt-0"> <div class="row gy-4"> <div class="col-lg-3 col-sm-6"> <div class="h5 mb-4">Empresa</div> <ul class="list-unstyled footer-list"> <li><a href="/es/nosotros/" title="Sobre nosotros">Sobre nosotros</a></li> <li><a href="/es/contacto/" title="Contacto">Contacto</a></li> <li><a href="/es/aviso-legal/" title="Aviso legal y privacidad">Aviso legal y privacidad</a></li> </ul> </div> <div class="col-lg-3 col-sm-6"> <div class="h5 mb-4">Producto</div> <ul class="list-unstyled footer-list"> <li><a href="/es/funcionalidades/" title="Software control horario">Software control horario</a></li> <li><a href="/es/versiones-precios/#packs" title="Packs económicos">Packs económicos</a></li> <li><a href="/es/funcionalidades/maquinas-fichar/" title="Relojes/Máquinas de fichar">Relojes/Máquinas de fichar</a></li> </ul> </div> <div class="col-lg-3 col-sm-6"> <div class="h5 mb-4">Ayuda</div> <ul class="list-unstyled footer-list"> <li><a href="/es/control-horario-trabajadores/" title="Guía de control horario">Guía de control horario</a></li> <li><a href="/es/faq/" title="Preguntas frecuentes">Preguntas frecuentes</a></li> <li><a href="/es/soporte/" title="Soporte">Soporte</a></li> </ul> </div> <div class="col-lg-3 col-sm-6"> <a class="d-block h5 mb-3" href="https://imesd.es/"> <img loading="preload" decoding="async" class="img-fluid mb-0 only-light" width="180" height="57" src="/images/logo-imesd-electronica_hu02b7a4dff66e0c9c4fe06ddded7ea65c_4851_180x0_resize_q100_h2_box_3.webp" alt="Software de control horario Numa | Imesd" onerror="this.onerror=null;this.src='\/images\/logo-imesd-electronica_hu02b7a4dff66e0c9c4fe06ddded7ea65c_4851_180x0_resize_box_3.png'"> <img loading="preload" decoding="async" class="img-fluid mb-0 only-dark" width="180" height="57" src="/images/logo-imesd-electronica-white_hu01c2aee102885126dcee2c8e132f4c59_9136_180x0_resize_q100_h2_box_3.webp" alt="Software de control horario Numa | Imesd" onerror="this.onerror=null;this.src='\/images\/logo-imesd-electronica-white_hu01c2aee102885126dcee2c8e132f4c59_9136_180x0_resize_box_3.png'"> </a> <p class="mb-4">Numa, el software de control horario que ahorra tiempo a tu empresa.<br><br><a href="tel:+34934269854">+34 934 269 854</a><br><a href="mailto:[email protected]"><a href="mailto:[email protected]">[email protected]</a></a></p> <ul class="list-inline social-icons"> <li class="list-inline-item"><a href="https://www.instagram.com/imesdelectronica/" title="instagram"><i class="fab fa-instagram"></i></a></li> <li class="list-inline-item"><a href="https://www.facebook.com/imesd.elec/" title="facebook"><i class="fab fa-facebook"></i></a></li> <li class="list-inline-item"><a href="https://www.linkedin.com/company/imesd-electr%C3%B2nica/" title="linkedin"><i class="fab fa-linkedin"></i></a></li> </ul> </div> </div> </div> <div class="border-top border-default text-center py-4"> <small class="content"> Copyright Imesd Electrònica | <a rel="nofollow" href="http://www.freepik.com" style="text-decoration:none">Images by rawpixel.com / Freepik</a> </small> </div> </div> </div> </div> </footer> <style type="text/css"> #cookie-message { display: none; position: fixed; bottom: 0; background-color: #333; color: white; z-index: 10000; width: 100%; padding: 1em 0 0 0; text-align: center; } #cookie-message.fullpage { height: 100%; background-color: rgba(3,3,3,0.6); } #cookie-message.fullpage > div { position: absolute; top: 50%; left: 50%; transform: translateX(-50%) translateY(-50%); max-width: 100%; width: 30em; text-align: left; background-color: white; border-radius: 1em; padding: 1em; margin:auto; } #cookie-message.fullpage p { color: black !important; } #cookie-message p.cookie-short-text { display: block; } #cookie-message p.cookie-full-text { display: none; } #cookie-message p.cookie-title { display: none; } #cookie-message.fullpage p.cookie-short-text { display: none; } #cookie-message.fullpage p.cookie-full-text { display: block; } #cookie-message.fullpage p.cookie-title { display: block; } </style> <div id="cookie-message" class="fullpage"> <div> <p class="font-weight-bold text-center cookie-title" style="font-size:larger"> Nuestra web utiliza cookies </p> <p class="text-light cookie-full-text"> Las cookies de este sitio web se usan para personalizar el contenido, ofrecer funciones de redes sociales y analizar el tráfico. Además, compartimos información sobre el uso que haga del sitio web con nuestros partners de redes sociales, publicidad y análisis web, quienes pueden combinarla con otra información que les haya proporcionado o que hayan recopilado a partir del uso que haya hecho de sus servicios. Haga clic en "Aceptar" para aceptar nuestra Política de Cookies. </p> <p class="text-light cookie-short-text"> Utilizamos cookies propias y de terceros para realizar análisis de uso y de medición de nuestra web para mejorar nuestros servicios. Haz clic en "Aceptar" para aceptar nuestra Política de Cookies. </p> <div class="text-center"> <a id="btn-reject-cookies" href="#" class="btn btn-secondary p-2 m-1">Rechazar</a> <a id="btn-accept-cookies" href="#" class="btn btn-success p-2 m-1">Aceptar</a> </div> <div class="text-center"> <a href="/es/aviso-legal/#privacy" target="_blank">Política de cookies</a> </div> </div> </div> <script> (function() { function createCookie(name,value,days,path) { if (days) { var date = new Date(); date.setTime(date.getTime()+(days*24*60*60*1000)); var expires = "; expires="+date.toGMTString(); } else var expires = ""; document.cookie = name+"="+value+expires+"; path="+path; } function readCookie(name) { var nameEQ = name + "="; var ca = document.cookie.split(';'); for(var i=0;i < ca.length;i++) { var c = ca[i]; while (c.charAt(0)==' ') c = c.substring(1,c.length); if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length); } return null; } function installThirdPartyCookies() { (function (w, d, s, l, i) { w[l] = w[l] || []; w[l].push({ 'gtm.start': new Date().getTime(), event: 'gtm.js' }); var f = d.getElementsByTagName(s)[0], j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : ''; j.async = true; j.src = 'https://www.googletagmanager.com/gtm.js?id=' + i + dl; f.parentNode.insertBefore(j, f); })(window, document, 'script', 'dataLayer', 'UA-6975201-4'); (function(h,o,t,j,a,r){ h.hj=h.hj||function(){(h.hj.q=h.hj.q||[]).push(arguments)}; h._hjSettings={hjid:1677192,hjsv:6}; a=o.getElementsByTagName('head')[0]; r=o.createElement('script');r.async=1; r.src=t+h._hjSettings.hjid+j+h._hjSettings.hjsv; a.appendChild(r); })(window,document,'https://static.hotjar.com/c/hotjar-','.js?sv='); } var COOKIES_MESSAGE_SEEN = false; var COOKIES_ACCEPTED = false; var cookieMessage = document.getElementById('cookie-message'); if (cookieMessage == null) { return; } if (window.IS_LEGAL_PAGE) { cookieMessage.classList.remove('fullpage'); } var cookie = readCookie('seen-cookie-message'); if (cookie != null && (cookie == 'accepted' || cookie == 'rejected')) { cookieMessage.style.display = 'none'; COOKIES_ACCEPTED = (cookie == 'accepted'); COOKIES_MESSAGE_SEEN = true; if (COOKIES_ACCEPTED) { installThirdPartyCookies(); } } else { cookieMessage.style.display = 'block'; document.getElementById('btn-accept-cookies').onclick = function(event) { createCookie('seen-cookie-message','accepted',cookieExpiry,cookiePath); cookieMessage.style.display = 'none'; COOKIES_ACCEPTED = true; installThirdPartyCookies(); }; document.getElementById('btn-reject-cookies').onclick = function(event) { createCookie('seen-cookie-message','rejected',cookieExpiry,cookiePath); cookieMessage.style.display = 'none'; COOKIES_ACCEPTED = false; }; } var cookieExpiry = cookieMessage.getAttribute('data-cookie-expiry'); if (cookieExpiry == null) { cookieExpiry = 30; } var cookiePath = cookieMessage.getAttribute('data-cookie-path'); if (cookiePath == null) { cookiePath = "/"; } if (!COOKIES_MESSAGE_SEEN) { createCookie('seen-cookie-message','no',cookieExpiry,cookiePath); } })(); </script> <script crossorigin="anonymous" defer integrity="sha512-+kFeKnbqVJvG1Y/8Jqvo5zn8E2a5ElFdGjvsIV4YndDp7K/3cZD1QTN8CiJPnLzsf6U1weBZ2BP7OysimFwYaQ==" type="application/javascript">(() => { var __create = Object.create; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __getProtoOf = Object.getPrototypeOf; var __hasOwnProp = Object.prototype.hasOwnProperty; var __commonJS = (cb, mod) => function __require() { return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod )); // ns-hugo:C:\Desenvolupament\web\2023\hugo\modules\modules\filecache\modules\pkg\mod\github.com\gohugoio\hugo-mod-jslibs-dist\popperjs\[email protected]\package\dist\cjs\popper.js var require_popper = __commonJS({ "ns-hugo:C:\\Desenvolupament\\web\\2023\\hugo\\modules\\modules\\filecache\\modules\\pkg\\mod\\github.com\\gohugoio\\hugo-mod-jslibs-dist\\popperjs\\[email protected]\\package\\dist\\cjs\\popper.js"(exports) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); function getWindow(node) { if (node == null) { return window; } if (node.toString() !== "[object Window]") { var ownerDocument = node.ownerDocument; return ownerDocument ? ownerDocument.defaultView || window : window; } return node; } function isElement2(node) { var OwnElement = getWindow(node).Element; return node instanceof OwnElement || node instanceof Element; } function isHTMLElement(node) { var OwnElement = getWindow(node).HTMLElement; return node instanceof OwnElement || node instanceof HTMLElement; } function isShadowRoot(node) { if (typeof ShadowRoot === "undefined") { return false; } var OwnElement = getWindow(node).ShadowRoot; return node instanceof OwnElement || node instanceof ShadowRoot; } var max = Math.max; var min = Math.min; var round = Math.round; function getBoundingClientRect(element, includeScale) { if (includeScale === void 0) { includeScale = false; } var rect = element.getBoundingClientRect(); var scaleX = 1; var scaleY = 1; if (isHTMLElement(element) && includeScale) { var offsetHeight = element.offsetHeight; var offsetWidth = element.offsetWidth; if (offsetWidth > 0) { scaleX = round(rect.width) / offsetWidth || 1; } if (offsetHeight > 0) { scaleY = round(rect.height) / offsetHeight || 1; } } return { width: rect.width / scaleX, height: rect.height / scaleY, top: rect.top / scaleY, right: rect.right / scaleX, bottom: rect.bottom / scaleY, left: rect.left / scaleX, x: rect.left / scaleX, y: rect.top / scaleY }; } function getWindowScroll(node) { var win = getWindow(node); var scrollLeft = win.pageXOffset; var scrollTop = win.pageYOffset; return { scrollLeft, scrollTop }; } function getHTMLElementScroll(element) { return { scrollLeft: element.scrollLeft, scrollTop: element.scrollTop }; } function getNodeScroll(node) { if (node === getWindow(node) || !isHTMLElement(node)) { return getWindowScroll(node); } else { return getHTMLElementScroll(node); } } function getNodeName(element) { return element ? (element.nodeName || "").toLowerCase() : null; } function getDocumentElement(element) { return ((isElement2(element) ? element.ownerDocument : element.document) || window.document).documentElement; } function getWindowScrollBarX(element) { return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft; } function getComputedStyle2(element) { return getWindow(element).getComputedStyle(element); } function isScrollParent(element) { var _getComputedStyle = getComputedStyle2(element), overflow = _getComputedStyle.overflow, overflowX = _getComputedStyle.overflowX, overflowY = _getComputedStyle.overflowY; return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX); } function isElementScaled(element) { var rect = element.getBoundingClientRect(); var scaleX = round(rect.width) / element.offsetWidth || 1; var scaleY = round(rect.height) / element.offsetHeight || 1; return scaleX !== 1 || scaleY !== 1; } function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) { if (isFixed === void 0) { isFixed = false; } var isOffsetParentAnElement = isHTMLElement(offsetParent); var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent); var documentElement = getDocumentElement(offsetParent); var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled); var scroll = { scrollLeft: 0, scrollTop: 0 }; var offsets = { x: 0, y: 0 }; if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) { if (getNodeName(offsetParent) !== "body" || isScrollParent(documentElement)) { scroll = getNodeScroll(offsetParent); } if (isHTMLElement(offsetParent)) { offsets = getBoundingClientRect(offsetParent, true); offsets.x += offsetParent.clientLeft; offsets.y += offsetParent.clientTop; } else if (documentElement) { offsets.x = getWindowScrollBarX(documentElement); } } return { x: rect.left + scroll.scrollLeft - offsets.x, y: rect.top + scroll.scrollTop - offsets.y, width: rect.width, height: rect.height }; } function getLayoutRect(element) { var clientRect = getBoundingClientRect(element); var width = element.offsetWidth; var height = element.offsetHeight; if (Math.abs(clientRect.width - width) <= 1) { width = clientRect.width; } if (Math.abs(clientRect.height - height) <= 1) { height = clientRect.height; } return { x: element.offsetLeft, y: element.offsetTop, width, height }; } function getParentNode(element) { if (getNodeName(element) === "html") { return element; } return element.assignedSlot || element.parentNode || (isShadowRoot(element) ? element.host : null) || getDocumentElement(element); } function getScrollParent(node) { if (["html", "body", "#document"].indexOf(getNodeName(node)) >= 0) { return node.ownerDocument.body; } if (isHTMLElement(node) && isScrollParent(node)) { return node; } return getScrollParent(getParentNode(node)); } function listScrollParents(element, list) { var _element$ownerDocumen; if (list === void 0) { list = []; } var scrollParent = getScrollParent(element); var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body); var win = getWindow(scrollParent); var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent; var updatedList = list.concat(target); return isBody ? updatedList : updatedList.concat(listScrollParents(getParentNode(target))); } function isTableElement(element) { return ["table", "td", "th"].indexOf(getNodeName(element)) >= 0; } function getTrueOffsetParent(element) { if (!isHTMLElement(element) || getComputedStyle2(element).position === "fixed") { return null; } return element.offsetParent; } function getContainingBlock(element) { var isFirefox = navigator.userAgent.toLowerCase().indexOf("firefox") !== -1; var isIE = navigator.userAgent.indexOf("Trident") !== -1; if (isIE && isHTMLElement(element)) { var elementCss = getComputedStyle2(element); if (elementCss.position === "fixed") { return null; } } var currentNode = getParentNode(element); while (isHTMLElement(currentNode) && ["html", "body"].indexOf(getNodeName(currentNode)) < 0) { var css = getComputedStyle2(currentNode); if (css.transform !== "none" || css.perspective !== "none" || css.contain === "paint" || ["transform", "perspective"].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === "filter" || isFirefox && css.filter && css.filter !== "none") { return currentNode; } else { currentNode = currentNode.parentNode; } } return null; } function getOffsetParent(element) { var window2 = getWindow(element); var offsetParent = getTrueOffsetParent(element); while (offsetParent && isTableElement(offsetParent) && getComputedStyle2(offsetParent).position === "static") { offsetParent = getTrueOffsetParent(offsetParent); } if (offsetParent && (getNodeName(offsetParent) === "html" || getNodeName(offsetParent) === "body" && getComputedStyle2(offsetParent).position === "static")) { return window2; } return offsetParent || getContainingBlock(element) || window2; } var top = "top"; var bottom = "bottom"; var right = "right"; var left = "left"; var auto = "auto"; var basePlacements = [top, bottom, right, left]; var start = "start"; var end = "end"; var clippingParents = "clippingParents"; var viewport = "viewport"; var popper = "popper"; var reference = "reference"; var variationPlacements = /* @__PURE__ */ basePlacements.reduce(function(acc, placement) { return acc.concat([placement + "-" + start, placement + "-" + end]); }, []); var placements = /* @__PURE__ */ [].concat(basePlacements, [auto]).reduce(function(acc, placement) { return acc.concat([placement, placement + "-" + start, placement + "-" + end]); }, []); var beforeRead = "beforeRead"; var read = "read"; var afterRead = "afterRead"; var beforeMain = "beforeMain"; var main = "main"; var afterMain = "afterMain"; var beforeWrite = "beforeWrite"; var write = "write"; var afterWrite = "afterWrite"; var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite]; function order(modifiers) { var map = /* @__PURE__ */ new Map(); var visited = /* @__PURE__ */ new Set(); var result = []; modifiers.forEach(function(modifier) { map.set(modifier.name, modifier); }); function sort(modifier) { visited.add(modifier.name); var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []); requires.forEach(function(dep) { if (!visited.has(dep)) { var depModifier = map.get(dep); if (depModifier) { sort(depModifier); } } }); result.push(modifier); } modifiers.forEach(function(modifier) { if (!visited.has(modifier.name)) { sort(modifier); } }); return result; } function orderModifiers(modifiers) { var orderedModifiers = order(modifiers); return modifierPhases.reduce(function(acc, phase) { return acc.concat(orderedModifiers.filter(function(modifier) { return modifier.phase === phase; })); }, []); } function debounce(fn) { var pending; return function() { if (!pending) { pending = new Promise(function(resolve) { Promise.resolve().then(function() { pending = void 0; resolve(fn()); }); }); } return pending; }; } function format(str) { for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { args[_key - 1] = arguments[_key]; } return [].concat(args).reduce(function(p, c) { return p.replace(/%s/, c); }, str); } var INVALID_MODIFIER_ERROR = 'Popper: modifier "%s" provided an invalid %s property, expected %s but got %s'; var MISSING_DEPENDENCY_ERROR = 'Popper: modifier "%s" requires "%s", but "%s" modifier is not available'; var VALID_PROPERTIES = ["name", "enabled", "phase", "fn", "effect", "requires", "options"]; function validateModifiers(modifiers) { modifiers.forEach(function(modifier) { [].concat(Object.keys(modifier), VALID_PROPERTIES).filter(function(value, index, self) { return self.indexOf(value) === index; }).forEach(function(key) { switch (key) { case "name": if (typeof modifier.name !== "string") { console.error(format(INVALID_MODIFIER_ERROR, String(modifier.name), '"name"', '"string"', '"' + String(modifier.name) + '"')); } break; case "enabled": if (typeof modifier.enabled !== "boolean") { console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"enabled"', '"boolean"', '"' + String(modifier.enabled) + '"')); } break; case "phase": if (modifierPhases.indexOf(modifier.phase) < 0) { console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"phase"', "either " + modifierPhases.join(", "), '"' + String(modifier.phase) + '"')); } break; case "fn": if (typeof modifier.fn !== "function") { console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"fn"', '"function"', '"' + String(modifier.fn) + '"')); } break; case "effect": if (modifier.effect != null && typeof modifier.effect !== "function") { console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"effect"', '"function"', '"' + String(modifier.fn) + '"')); } break; case "requires": if (modifier.requires != null && !Array.isArray(modifier.requires)) { console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"requires"', '"array"', '"' + String(modifier.requires) + '"')); } break; case "requiresIfExists": if (!Array.isArray(modifier.requiresIfExists)) { console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"requiresIfExists"', '"array"', '"' + String(modifier.requiresIfExists) + '"')); } break; case "options": case "data": break; default: console.error('PopperJS: an invalid property has been provided to the "' + modifier.name + '" modifier, valid properties are ' + VALID_PROPERTIES.map(function(s) { return '"' + s + '"'; }).join(", ") + '; but "' + key + '" was provided.'); } modifier.requires && modifier.requires.forEach(function(requirement) { if (modifiers.find(function(mod) { return mod.name === requirement; }) == null) { console.error(format(MISSING_DEPENDENCY_ERROR, String(modifier.name), requirement, requirement)); } }); }); }); } function uniqueBy(arr, fn) { var identifiers = /* @__PURE__ */ new Set(); return arr.filter(function(item) { var identifier = fn(item); if (!identifiers.has(identifier)) { identifiers.add(identifier); return true; } }); } function getBasePlacement(placement) { return placement.split("-")[0]; } function mergeByName(modifiers) { var merged = modifiers.reduce(function(merged2, current) { var existing = merged2[current.name]; merged2[current.name] = existing ? Object.assign({}, existing, current, { options: Object.assign({}, existing.options, current.options), data: Object.assign({}, existing.data, current.data) }) : current; return merged2; }, {}); return Object.keys(merged).map(function(key) { return merged[key]; }); } function getViewportRect(element) { var win = getWindow(element); var html = getDocumentElement(element); var visualViewport = win.visualViewport; var width = html.clientWidth; var height = html.clientHeight; var x = 0; var y = 0; if (visualViewport) { width = visualViewport.width; height = visualViewport.height; if (!/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) { x = visualViewport.offsetLeft; y = visualViewport.offsetTop; } } return { width, height, x: x + getWindowScrollBarX(element), y }; } function getDocumentRect(element) { var _element$ownerDocumen; var html = getDocumentElement(element); var winScroll = getWindowScroll(element); var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body; var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0); var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0); var x = -winScroll.scrollLeft + getWindowScrollBarX(element); var y = -winScroll.scrollTop; if (getComputedStyle2(body || html).direction === "rtl") { x += max(html.clientWidth, body ? body.clientWidth : 0) - width; } return { width, height, x, y }; } function contains(parent, child) { var rootNode = child.getRootNode && child.getRootNode(); if (parent.contains(child)) { return true; } else if (rootNode && isShadowRoot(rootNode)) { var next = child; do { if (next && parent.isSameNode(next)) { return true; } next = next.parentNode || next.host; } while (next); } return false; } function rectToClientRect(rect) { return Object.assign({}, rect, { left: rect.x, top: rect.y, right: rect.x + rect.width, bottom: rect.y + rect.height }); } function getInnerBoundingClientRect(element) { var rect = getBoundingClientRect(element); rect.top = rect.top + element.clientTop; rect.left = rect.left + element.clientLeft; rect.bottom = rect.top + element.clientHeight; rect.right = rect.left + element.clientWidth; rect.width = element.clientWidth; rect.height = element.clientHeight; rect.x = rect.left; rect.y = rect.top; return rect; } function getClientRectFromMixedType(element, clippingParent) { return clippingParent === viewport ? rectToClientRect(getViewportRect(element)) : isElement2(clippingParent) ? getInnerBoundingClientRect(clippingParent) : rectToClientRect(getDocumentRect(getDocumentElement(element))); } function getClippingParents(element) { var clippingParents2 = listScrollParents(getParentNode(element)); var canEscapeClipping = ["absolute", "fixed"].indexOf(getComputedStyle2(element).position) >= 0; var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element; if (!isElement2(clipperElement)) { return []; } return clippingParents2.filter(function(clippingParent) { return isElement2(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== "body" && (canEscapeClipping ? getComputedStyle2(clippingParent).position !== "static" : true); }); } function getClippingRect(element, boundary, rootBoundary) { var mainClippingParents = boundary === "clippingParents" ? getClippingParents(element) : [].concat(boundary); var clippingParents2 = [].concat(mainClippingParents, [rootBoundary]); var firstClippingParent = clippingParents2[0]; var clippingRect = clippingParents2.reduce(function(accRect, clippingParent) { var rect = getClientRectFromMixedType(element, clippingParent); accRect.top = max(rect.top, accRect.top); accRect.right = min(rect.right, accRect.right); accRect.bottom = min(rect.bottom, accRect.bottom); accRect.left = max(rect.left, accRect.left); return accRect; }, getClientRectFromMixedType(element, firstClippingParent)); clippingRect.width = clippingRect.right - clippingRect.left; clippingRect.height = clippingRect.bottom - clippingRect.top; clippingRect.x = clippingRect.left; clippingRect.y = clippingRect.top; return clippingRect; } function getVariation(placement) { return placement.split("-")[1]; } function getMainAxisFromPlacement(placement) { return ["top", "bottom"].indexOf(placement) >= 0 ? "x" : "y"; } function computeOffsets(_ref) { var reference2 = _ref.reference, element = _ref.element, placement = _ref.placement; var basePlacement = placement ? getBasePlacement(placement) : null; var variation = placement ? getVariation(placement) : null; var commonX = reference2.x + reference2.width / 2 - element.width / 2; var commonY = reference2.y + reference2.height / 2 - element.height / 2; var offsets; switch (basePlacement) { case top: offsets = { x: commonX, y: reference2.y - element.height }; break; case bottom: offsets = { x: commonX, y: reference2.y + reference2.height }; break; case right: offsets = { x: reference2.x + reference2.width, y: commonY }; break; case left: offsets = { x: reference2.x - element.width, y: commonY }; break; default: offsets = { x: reference2.x, y: reference2.y }; } var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null; if (mainAxis != null) { var len = mainAxis === "y" ? "height" : "width"; switch (variation) { case start: offsets[mainAxis] = offsets[mainAxis] - (reference2[len] / 2 - element[len] / 2); break; case end: offsets[mainAxis] = offsets[mainAxis] + (reference2[len] / 2 - element[len] / 2); break; } } return offsets; } function getFreshSideObject() { return { top: 0, right: 0, bottom: 0, left: 0 }; } function mergePaddingObject(paddingObject) { return Object.assign({}, getFreshSideObject(), paddingObject); } function expandToHashMap(value, keys) { return keys.reduce(function(hashMap, key) { hashMap[key] = value; return hashMap; }, {}); } function detectOverflow(state, options) { if (options === void 0) { options = {}; } var _options = options, _options$placement = _options.placement, placement = _options$placement === void 0 ? state.placement : _options$placement, _options$boundary = _options.boundary, boundary = _options$boundary === void 0 ? clippingParents : _options$boundary, _options$rootBoundary = _options.rootBoundary, rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary, _options$elementConte = _options.elementContext, elementContext = _options$elementConte === void 0 ? popper : _options$elementConte, _options$altBoundary = _options.altBoundary, altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary, _options$padding = _options.padding, padding = _options$padding === void 0 ? 0 : _options$padding; var paddingObject = mergePaddingObject(typeof padding !== "number" ? padding : expandToHashMap(padding, basePlacements)); var altContext = elementContext === popper ? reference : popper; var popperRect = state.rects.popper; var element = state.elements[altBoundary ? altContext : elementContext]; var clippingClientRect = getClippingRect(isElement2(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary); var referenceClientRect = getBoundingClientRect(state.elements.reference); var popperOffsets2 = computeOffsets({ reference: referenceClientRect, element: popperRect, strategy: "absolute", placement }); var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets2)); var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; var overflowOffsets = { top: clippingClientRect.top - elementClientRect.top + paddingObject.top, bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom, left: clippingClientRect.left - elementClientRect.left + paddingObject.left, right: elementClientRect.right - clippingClientRect.right + paddingObject.right }; var offsetData = state.modifiersData.offset; if (elementContext === popper && offsetData) { var offset2 = offsetData[placement]; Object.keys(overflowOffsets).forEach(function(key) { var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1; var axis = [top, bottom].indexOf(key) >= 0 ? "y" : "x"; overflowOffsets[key] += offset2[axis] * multiply; }); } return overflowOffsets; } var INVALID_ELEMENT_ERROR = "Popper: Invalid reference or popper argument provided. They must be either a DOM element or virtual element."; var INFINITE_LOOP_ERROR = "Popper: An infinite loop in the modifiers cycle has been detected! The cycle has been interrupted to prevent a browser crash."; var DEFAULT_OPTIONS = { placement: "bottom", modifiers: [], strategy: "absolute" }; function areValidElements() { for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } return !args.some(function(element) { return !(element && typeof element.getBoundingClientRect === "function"); }); } function popperGenerator(generatorOptions) { if (generatorOptions === void 0) { generatorOptions = {}; } var _generatorOptions = generatorOptions, _generatorOptions$def = _generatorOptions.defaultModifiers, defaultModifiers2 = _generatorOptions$def === void 0 ? [] : _generatorOptions$def, _generatorOptions$def2 = _generatorOptions.defaultOptions, defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2; return function createPopper3(reference2, popper2, options) { if (options === void 0) { options = defaultOptions; } var state = { placement: "bottom", orderedModifiers: [], options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions), modifiersData: {}, elements: { reference: reference2, popper: popper2 }, attributes: {}, styles: {} }; var effectCleanupFns = []; var isDestroyed = false; var instance = { state, setOptions: function setOptions(setOptionsAction) { var options2 = typeof setOptionsAction === "function" ? setOptionsAction(state.options) : setOptionsAction; cleanupModifierEffects(); state.options = Object.assign({}, defaultOptions, state.options, options2); state.scrollParents = { reference: isElement2(reference2) ? listScrollParents(reference2) : reference2.contextElement ? listScrollParents(reference2.contextElement) : [], popper: listScrollParents(popper2) }; var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers2, state.options.modifiers))); state.orderedModifiers = orderedModifiers.filter(function(m) { return m.enabled; }); if (true) { var modifiers = uniqueBy([].concat(orderedModifiers, state.options.modifiers), function(_ref) { var name = _ref.name; return name; }); validateModifiers(modifiers); if (getBasePlacement(state.options.placement) === auto) { var flipModifier = state.orderedModifiers.find(function(_ref2) { var name = _ref2.name; return name === "flip"; }); if (!flipModifier) { console.error(['Popper: "auto" placements require the "flip" modifier be', "present and enabled to work."].join(" ")); } } var _getComputedStyle = getComputedStyle2(popper2), marginTop = _getComputedStyle.marginTop, marginRight = _getComputedStyle.marginRight, marginBottom = _getComputedStyle.marginBottom, marginLeft = _getComputedStyle.marginLeft; if ([marginTop, marginRight, marginBottom, marginLeft].some(function(margin) { return parseFloat(margin); })) { console.warn(['Popper: CSS "margin" styles cannot be used to apply padding', "between the popper and its reference element or boundary.", "To replicate margin, use the `offset` modifier, as well as", "the `padding` option in the `preventOverflow` and `flip`", "modifiers."].join(" ")); } } runModifierEffects(); return instance.update(); }, forceUpdate: function forceUpdate() { if (isDestroyed) { return; } var _state$elements = state.elements, reference3 = _state$elements.reference, popper3 = _state$elements.popper; if (!areValidElements(reference3, popper3)) { if (true) { console.error(INVALID_ELEMENT_ERROR); } return; } state.rects = { reference: getCompositeRect(reference3, getOffsetParent(popper3), state.options.strategy === "fixed"), popper: getLayoutRect(popper3) }; state.reset = false; state.placement = state.options.placement; state.orderedModifiers.forEach(function(modifier) { return state.modifiersData[modifier.name] = Object.assign({}, modifier.data); }); var __debug_loops__ = 0; for (var index = 0; index < state.orderedModifiers.length; index++) { if (true) { __debug_loops__ += 1; if (__debug_loops__ > 100) { console.error(INFINITE_LOOP_ERROR); break; } } if (state.reset === true) { state.reset = false; index = -1; continue; } var _state$orderedModifie = state.orderedModifiers[index], fn = _state$orderedModifie.fn, _state$orderedModifie2 = _state$orderedModifie.options, _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2, name = _state$orderedModifie.name; if (typeof fn === "function") { state = fn({ state, options: _options, name, instance }) || state; } } }, update: debounce(function() { return new Promise(function(resolve) { instance.forceUpdate(); resolve(state); }); }), destroy: function destroy() { cleanupModifierEffects(); isDestroyed = true; } }; if (!areValidElements(reference2, popper2)) { if (true) { console.error(INVALID_ELEMENT_ERROR); } return instance; } instance.setOptions(options).then(function(state2) { if (!isDestroyed && options.onFirstUpdate) { options.onFirstUpdate(state2); } }); function runModifierEffects() { state.orderedModifiers.forEach(function(_ref3) { var name = _ref3.name, _ref3$options = _ref3.options, options2 = _ref3$options === void 0 ? {} : _ref3$options, effect2 = _ref3.effect; if (typeof effect2 === "function") { var cleanupFn = effect2({ state, name, instance, options: options2 }); var noopFn = function noopFn2() { }; effectCleanupFns.push(cleanupFn || noopFn); } }); } function cleanupModifierEffects() { effectCleanupFns.forEach(function(fn) { return fn(); }); effectCleanupFns = []; } return instance; }; } var passive = { passive: true }; function effect$2(_ref) { var state = _ref.state, instance = _ref.instance, options = _ref.options; var _options$scroll = options.scroll, scroll = _options$scroll === void 0 ? true : _options$scroll, _options$resize = options.resize, resize = _options$resize === void 0 ? true : _options$resize; var window2 = getWindow(state.elements.popper); var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper); if (scroll) { scrollParents.forEach(function(scrollParent) { scrollParent.addEventListener("scroll", instance.update, passive); }); } if (resize) { window2.addEventListener("resize", instance.update, passive); } return function() { if (scroll) { scrollParents.forEach(function(scrollParent) { scrollParent.removeEventListener("scroll", instance.update, passive); }); } if (resize) { window2.removeEventListener("resize", instance.update, passive); } }; } var eventListeners = { name: "eventListeners", enabled: true, phase: "write", fn: function fn() { }, effect: effect$2, data: {} }; function popperOffsets(_ref) { var state = _ref.state, name = _ref.name; state.modifiersData[name] = computeOffsets({ reference: state.rects.reference, element: state.rects.popper, strategy: "absolute", placement: state.placement }); } var popperOffsets$1 = { name: "popperOffsets", enabled: true, phase: "read", fn: popperOffsets, data: {} }; var unsetSides = { top: "auto", right: "auto", bottom: "auto", left: "auto" }; function roundOffsetsByDPR(_ref) { var x = _ref.x, y = _ref.y; var win = window; var dpr = win.devicePixelRatio || 1; return { x: round(x * dpr) / dpr || 0, y: round(y * dpr) / dpr || 0 }; } function mapToStyles(_ref2) { var _Object$assign2; var popper2 = _ref2.popper, popperRect = _ref2.popperRect, placement = _ref2.placement, variation = _ref2.variation, offsets = _ref2.offsets, position = _ref2.position, gpuAcceleration = _ref2.gpuAcceleration, adaptive = _ref2.adaptive, roundOffsets = _ref2.roundOffsets, isFixed = _ref2.isFixed; var _ref3 = roundOffsets === true ? roundOffsetsByDPR(offsets) : typeof roundOffsets === "function" ? roundOffsets(offsets) : offsets, _ref3$x = _ref3.x, x = _ref3$x === void 0 ? 0 : _ref3$x, _ref3$y = _ref3.y, y = _ref3$y === void 0 ? 0 : _ref3$y; var hasX = offsets.hasOwnProperty("x"); var hasY = offsets.hasOwnProperty("y"); var sideX = left; var sideY = top; var win = window; if (adaptive) { var offsetParent = getOffsetParent(popper2); var heightProp = "clientHeight"; var widthProp = "clientWidth"; if (offsetParent === getWindow(popper2)) { offsetParent = getDocumentElement(popper2); if (getComputedStyle2(offsetParent).position !== "static" && position === "absolute") { heightProp = "scrollHeight"; widthProp = "scrollWidth"; } } offsetParent = offsetParent; if (placement === top || (placement === left || placement === right) && variation === end) { sideY = bottom; var offsetY = isFixed && win.visualViewport ? win.visualViewport.height : offsetParent[heightProp]; y -= offsetY - popperRect.height; y *= gpuAcceleration ? 1 : -1; } if (placement === left || (placement === top || placement === bottom) && variation === end) { sideX = right; var offsetX = isFixed && win.visualViewport ? win.visualViewport.width : offsetParent[widthProp]; x -= offsetX - popperRect.width; x *= gpuAcceleration ? 1 : -1; } } var commonStyles = Object.assign({ position }, adaptive && unsetSides); if (gpuAcceleration) { var _Object$assign; return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? "0" : "", _Object$assign[sideX] = hasX ? "0" : "", _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? "translate(" + x + "px, " + y + "px)" : "translate3d(" + x + "px, " + y + "px, 0)", _Object$assign)); } return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + "px" : "", _Object$assign2[sideX] = hasX ? x + "px" : "", _Object$assign2.transform = "", _Object$assign2)); } function computeStyles(_ref4) { var state = _ref4.state, options = _ref4.options; var _options$gpuAccelerat = options.gpuAcceleration, gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat, _options$adaptive = options.adaptive, adaptive = _options$adaptive === void 0 ? true : _options$adaptive, _options$roundOffsets = options.roundOffsets, roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets; if (true) { var transitionProperty = getComputedStyle2(state.elements.popper).transitionProperty || ""; if (adaptive && ["transform", "top", "right", "bottom", "left"].some(function(property) { return transitionProperty.indexOf(property) >= 0; })) { console.warn(["Popper: Detected CSS transitions on at least one of the following", 'CSS properties: "transform", "top", "right", "bottom", "left".', "\n\n", 'Disable the "computeStyles" modifier\'s `adaptive` option to allow', "for smooth transitions, or remove these properties from the CSS", "transition declaration on the popper element if only transitioning", "opacity or background-color for example.", "\n\n", "We recommend using the popper element as a wrapper around an inner", "element that can have any CSS property transitioned for animations."].join(" ")); } } var commonStyles = { placement: getBasePlacement(state.placement), variation: getVariation(state.placement), popper: state.elements.popper, popperRect: state.rects.popper, gpuAcceleration, isFixed: state.options.strategy === "fixed" }; if (state.modifiersData.popperOffsets != null) { state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, { offsets: state.modifiersData.popperOffsets, position: state.options.strategy, adaptive, roundOffsets }))); } if (state.modifiersData.arrow != null) { state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, { offsets: state.modifiersData.arrow, position: "absolute", adaptive: false, roundOffsets }))); } state.attributes.popper = Object.assign({}, state.attributes.popper, { "data-popper-placement": state.placement }); } var computeStyles$1 = { name: "computeStyles", enabled: true, phase: "beforeWrite", fn: computeStyles, data: {} }; function applyStyles(_ref) { var state = _ref.state; Object.keys(state.elements).forEach(function(name) { var style = state.styles[name] || {}; var attributes = state.attributes[name] || {}; var element = state.elements[name]; if (!isHTMLElement(element) || !getNodeName(element)) { return; } Object.assign(element.style, style); Object.keys(attributes).forEach(function(name2) { var value = attributes[name2]; if (value === false) { element.removeAttribute(name2); } else { element.setAttribute(name2, value === true ? "" : value); } }); }); } function effect$1(_ref2) { var state = _ref2.state; var initialStyles = { popper: { position: state.options.strategy, left: "0", top: "0", margin: "0" }, arrow: { position: "absolute" }, reference: {} }; Object.assign(state.elements.popper.style, initialStyles.popper); state.styles = initialStyles; if (state.elements.arrow) { Object.assign(state.elements.arrow.style, initialStyles.arrow); } return function() { Object.keys(state.elements).forEach(function(name) { var element = state.elements[name]; var attributes = state.attributes[name] || {}; var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); var style = styleProperties.reduce(function(style2, property) { style2[property] = ""; return style2; }, {}); if (!isHTMLElement(element) || !getNodeName(element)) { return; } Object.assign(element.style, style); Object.keys(attributes).forEach(function(attribute) { element.removeAttribute(attribute); }); }); }; } var applyStyles$1 = { name: "applyStyles", enabled: true, phase: "write", fn: applyStyles, effect: effect$1, requires: ["computeStyles"] }; function distanceAndSkiddingToXY(placement, rects, offset2) { var basePlacement = getBasePlacement(placement); var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1; var _ref = typeof offset2 === "function" ? offset2(Object.assign({}, rects, { placement })) : offset2, skidding = _ref[0], distance = _ref[1]; skidding = skidding || 0; distance = (distance || 0) * invertDistance; return [left, right].indexOf(basePlacement) >= 0 ? { x: distance, y: skidding } : { x: skidding, y: distance }; } function offset(_ref2) { var state = _ref2.state, options = _ref2.options, name = _ref2.name; var _options$offset = options.offset, offset2 = _options$offset === void 0 ? [0, 0] : _options$offset; var data = placements.reduce(function(acc, placement) { acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset2); return acc; }, {}); var _data$state$placement = data[state.placement], x = _data$state$placement.x, y = _data$state$placement.y; if (state.modifiersData.popperOffsets != null) { state.modifiersData.popperOffsets.x += x; state.modifiersData.popperOffsets.y += y; } state.modifiersData[name] = data; } var offset$1 = { name: "offset", enabled: true, phase: "main", requires: ["popperOffsets"], fn: offset }; var hash$1 = { left: "right", right: "left", bottom: "top", top: "bottom" }; function getOppositePlacement(placement) { return placement.replace(/left|right|bottom|top/g, function(matched) { return hash$1[matched]; }); } var hash = { start: "end", end: "start" }; function getOppositeVariationPlacement(placement) { return placement.replace(/start|end/g, function(matched) { return hash[matched]; }); } function computeAutoPlacement(state, options) { if (options === void 0) { options = {}; } var _options = options, placement = _options.placement, boundary = _options.boundary, rootBoundary = _options.rootBoundary, padding = _options.padding, flipVariations = _options.flipVariations, _options$allowedAutoP = _options.allowedAutoPlacements, allowedAutoPlacements = _options$allowedAutoP === void 0 ? placements : _options$allowedAutoP; var variation = getVariation(placement); var placements$1 = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function(placement2) { return getVariation(placement2) === variation; }) : basePlacements; var allowedPlacements = placements$1.filter(function(placement2) { return allowedAutoPlacements.indexOf(placement2) >= 0; }); if (allowedPlacements.length === 0) { allowedPlacements = placements$1; if (true) { console.error(["Popper: The `allowedAutoPlacements` option did not allow any", "placements. Ensure the `placement` option matches the variation", "of the allowed placements.", 'For example, "auto" cannot be used to allow "bottom-start".', 'Use "auto-start" instead.'].join(" ")); } } var overflows = allowedPlacements.reduce(function(acc, placement2) { acc[placement2] = detectOverflow(state, { placement: placement2, boundary, rootBoundary, padding })[getBasePlacement(placement2)]; return acc; }, {}); return Object.keys(overflows).sort(function(a, b) { return overflows[a] - overflows[b]; }); } function getExpandedFallbackPlacements(placement) { if (getBasePlacement(placement) === auto) { return []; } var oppositePlacement = getOppositePlacement(placement); return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)]; } function flip(_ref) { var state = _ref.state, options = _ref.options, name = _ref.name; if (state.modifiersData[name]._skip) { return; } var _options$mainAxis = options.mainAxis, checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis, _options$altAxis = options.altAxis, checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis, specifiedFallbackPlacements = options.fallbackPlacements, padding = options.padding, boundary = options.boundary, rootBoundary = options.rootBoundary, altBoundary = options.altBoundary, _options$flipVariatio = options.flipVariations, flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio, allowedAutoPlacements = options.allowedAutoPlacements; var preferredPlacement = state.options.placement; var basePlacement = getBasePlacement(preferredPlacement); var isBasePlacement = basePlacement === preferredPlacement; var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement)); var placements2 = [preferredPlacement].concat(fallbackPlacements).reduce(function(acc, placement2) { return acc.concat(getBasePlacement(placement2) === auto ? computeAutoPlacement(state, { placement: placement2, boundary, rootBoundary, padding, flipVariations, allowedAutoPlacements }) : placement2); }, []); var referenceRect = state.rects.reference; var popperRect = state.rects.popper; var checksMap = /* @__PURE__ */ new Map(); var makeFallbackChecks = true; var firstFittingPlacement = placements2[0]; for (var i = 0; i < placements2.length; i++) { var placement = placements2[i]; var _basePlacement = getBasePlacement(placement); var isStartVariation = getVariation(placement) === start; var isVertical = [top, bottom].indexOf(_basePlacement) >= 0; var len = isVertical ? "width" : "height"; var overflow = detectOverflow(state, { placement, boundary, rootBoundary, altBoundary, padding }); var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top; if (referenceRect[len] > popperRect[len]) { mainVariationSide = getOppositePlacement(mainVariationSide); } var altVariationSide = getOppositePlacement(mainVariationSide); var checks = []; if (checkMainAxis) { checks.push(overflow[_basePlacement] <= 0); } if (checkAltAxis) { checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0); } if (checks.every(function(check) { return check; })) { firstFittingPlacement = placement; makeFallbackChecks = false; break; } checksMap.set(placement, checks); } if (makeFallbackChecks) { var numberOfChecks = flipVariations ? 3 : 1; var _loop = function _loop2(_i2) { var fittingPlacement = placements2.find(function(placement2) { var checks2 = checksMap.get(placement2); if (checks2) { return checks2.slice(0, _i2).every(function(check) { return check; }); } }); if (fittingPlacement) { firstFittingPlacement = fittingPlacement; return "break"; } }; for (var _i = numberOfChecks; _i > 0; _i--) { var _ret = _loop(_i); if (_ret === "break") break; } } if (state.placement !== firstFittingPlacement) { state.modifiersData[name]._skip = true; state.placement = firstFittingPlacement; state.reset = true; } } var flip$1 = { name: "flip", enabled: true, phase: "main", fn: flip, requiresIfExists: ["offset"], data: { _skip: false } }; function getAltAxis(axis) { return axis === "x" ? "y" : "x"; } function within(min$1, value, max$1) { return max(min$1, min(value, max$1)); } function withinMaxClamp(min2, value, max2) { var v = within(min2, value, max2); return v > max2 ? max2 : v; } function preventOverflow(_ref) { var state = _ref.state, options = _ref.options, name = _ref.name; var _options$mainAxis = options.mainAxis, checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis, _options$altAxis = options.altAxis, checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis, boundary = options.boundary, rootBoundary = options.rootBoundary, altBoundary = options.altBoundary, padding = options.padding, _options$tether = options.tether, tether = _options$tether === void 0 ? true : _options$tether, _options$tetherOffset = options.tetherOffset, tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset; var overflow = detectOverflow(state, { boundary, rootBoundary, padding, altBoundary }); var basePlacement = getBasePlacement(state.placement); var variation = getVariation(state.placement); var isBasePlacement = !variation; var mainAxis = getMainAxisFromPlacement(basePlacement); var altAxis = getAltAxis(mainAxis); var popperOffsets2 = state.modifiersData.popperOffsets; var referenceRect = state.rects.reference; var popperRect = state.rects.popper; var tetherOffsetValue = typeof tetherOffset === "function" ? tetherOffset(Object.assign({}, state.rects, { placement: state.placement })) : tetherOffset; var normalizedTetherOffsetValue = typeof tetherOffsetValue === "number" ? { mainAxis: tetherOffsetValue, altAxis: tetherOffsetValue } : Object.assign({ mainAxis: 0, altAxis: 0 }, tetherOffsetValue); var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null; var data = { x: 0, y: 0 }; if (!popperOffsets2) { return; } if (checkMainAxis) { var _offsetModifierState$; var mainSide = mainAxis === "y" ? top : left; var altSide = mainAxis === "y" ? bottom : right; var len = mainAxis === "y" ? "height" : "width"; var offset2 = popperOffsets2[mainAxis]; var min$1 = offset2 + overflow[mainSide]; var max$1 = offset2 - overflow[altSide]; var additive = tether ? -popperRect[len] / 2 : 0; var minLen = variation === start ? referenceRect[len] : popperRect[len]; var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; var arrowElement = state.elements.arrow; var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : { width: 0, height: 0 }; var arrowPaddingObject = state.modifiersData["arrow#persistent"] ? state.modifiersData["arrow#persistent"].padding : getFreshSideObject(); var arrowPaddingMin = arrowPaddingObject[mainSide]; var arrowPaddingMax = arrowPaddingObject[altSide]; var arrowLen = within(0, referenceRect[len], arrowRect[len]); var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis; var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis; var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow); var clientOffset = arrowOffsetParent ? mainAxis === "y" ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0; var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0; var tetherMin = offset2 + minOffset - offsetModifierValue - clientOffset; var tetherMax = offset2 + maxOffset - offsetModifierValue; var preventedOffset = within(tether ? min(min$1, tetherMin) : min$1, offset2, tether ? max(max$1, tetherMax) : max$1); popperOffsets2[mainAxis] = preventedOffset; data[mainAxis] = preventedOffset - offset2; } if (checkAltAxis) { var _offsetModifierState$2; var _mainSide = mainAxis === "x" ? top : left; var _altSide = mainAxis === "x" ? bottom : right; var _offset = popperOffsets2[altAxis]; var _len = altAxis === "y" ? "height" : "width"; var _min = _offset + overflow[_mainSide]; var _max = _offset - overflow[_altSide]; var isOriginSide = [top, left].indexOf(basePlacement) !== -1; var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0; var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis; var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max; var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max); popperOffsets2[altAxis] = _preventedOffset; data[altAxis] = _preventedOffset - _offset; } state.modifiersData[name] = data; } var preventOverflow$1 = { name: "preventOverflow", enabled: true, phase: "main", fn: preventOverflow, requiresIfExists: ["offset"] }; var toPaddingObject = function toPaddingObject2(padding, state) { padding = typeof padding === "function" ? padding(Object.assign({}, state.rects, { placement: state.placement })) : padding; return mergePaddingObject(typeof padding !== "number" ? padding : expandToHashMap(padding, basePlacements)); }; function arrow(_ref) { var _state$modifiersData$; var state = _ref.state, name = _ref.name, options = _ref.options; var arrowElement = state.elements.arrow; var popperOffsets2 = state.modifiersData.popperOffsets; var basePlacement = getBasePlacement(state.placement); var axis = getMainAxisFromPlacement(basePlacement); var isVertical = [left, right].indexOf(basePlacement) >= 0; var len = isVertical ? "height" : "width"; if (!arrowElement || !popperOffsets2) { return; } var paddingObject = toPaddingObject(options.padding, state); var arrowRect = getLayoutRect(arrowElement); var minProp = axis === "y" ? top : left; var maxProp = axis === "y" ? bottom : right; var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets2[axis] - state.rects.popper[len]; var startDiff = popperOffsets2[axis] - state.rects.reference[axis]; var arrowOffsetParent = getOffsetParent(arrowElement); var clientSize = arrowOffsetParent ? axis === "y" ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0; var centerToReference = endDiff / 2 - startDiff / 2; var min2 = paddingObject[minProp]; var max2 = clientSize - arrowRect[len] - paddingObject[maxProp]; var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference; var offset2 = within(min2, center, max2); var axisProp = axis; state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset2, _state$modifiersData$.centerOffset = offset2 - center, _state$modifiersData$); } function effect(_ref2) { var state = _ref2.state, options = _ref2.options; var _options$element = options.element, arrowElement = _options$element === void 0 ? "[data-popper-arrow]" : _options$element; if (arrowElement == null) { return; } if (typeof arrowElement === "string") { arrowElement = state.elements.popper.querySelector(arrowElement); if (!arrowElement) { return; } } if (true) { if (!isHTMLElement(arrowElement)) { console.error(['Popper: "arrow" element must be an HTMLElement (not an SVGElement).', "To use an SVG arrow, wrap it in an HTMLElement that will be used as", "the arrow."].join(" ")); } } if (!contains(state.elements.popper, arrowElement)) { if (true) { console.error(['Popper: "arrow" modifier\'s `element` must be a child of the popper', "element."].join(" ")); } return; } state.elements.arrow = arrowElement; } var arrow$1 = { name: "arrow", enabled: true, phase: "main", fn: arrow, effect, requires: ["popperOffsets"], requiresIfExists: ["preventOverflow"] }; function getSideOffsets(overflow, rect, preventedOffsets) { if (preventedOffsets === void 0) { preventedOffsets = { x: 0, y: 0 }; } return { top: overflow.top - rect.height - preventedOffsets.y, right: overflow.right - rect.width + preventedOffsets.x, bottom: overflow.bottom - rect.height + preventedOffsets.y, left: overflow.left - rect.width - preventedOffsets.x }; } function isAnySideFullyClipped(overflow) { return [top, right, bottom, left].some(function(side) { return overflow[side] >= 0; }); } function hide(_ref) { var state = _ref.state, name = _ref.name; var referenceRect = state.rects.reference; var popperRect = state.rects.popper; var preventedOffsets = state.modifiersData.preventOverflow; var referenceOverflow = detectOverflow(state, { elementContext: "reference" }); var popperAltOverflow = detectOverflow(state, { altBoundary: true }); var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect); var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets); var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets); var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets); state.modifiersData[name] = { referenceClippingOffsets, popperEscapeOffsets, isReferenceHidden, hasPopperEscaped }; state.attributes.popper = Object.assign({}, state.attributes.popper, { "data-popper-reference-hidden": isReferenceHidden, "data-popper-escaped": hasPopperEscaped }); } var hide$1 = { name: "hide", enabled: true, phase: "main", requiresIfExists: ["preventOverflow"], fn: hide }; var defaultModifiers$1 = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1]; var createPopper$1 = /* @__PURE__ */ popperGenerator({ defaultModifiers: defaultModifiers$1 }); var defaultModifiers = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1, offset$1, flip$1, preventOverflow$1, arrow$1, hide$1]; var createPopper2 = /* @__PURE__ */ popperGenerator({ defaultModifiers }); exports.applyStyles = applyStyles$1; exports.arrow = arrow$1; exports.computeStyles = computeStyles$1; exports.createPopper = createPopper2; exports.createPopperLite = createPopper$1; exports.defaultModifiers = defaultModifiers; exports.detectOverflow = detectOverflow; exports.eventListeners = eventListeners; exports.flip = flip$1; exports.hide = hide$1; exports.offset = offset$1; exports.popperGenerator = popperGenerator; exports.popperOffsets = popperOffsets$1; exports.preventOverflow = preventOverflow$1; } }); // ns-hugo:C:\Desenvolupament\web\2023\hugo\modules\modules\filecache\modules\pkg\mod\github.com\twbs\[email protected]+incompatible\js\src\util\index.js var MILLISECONDS_MULTIPLIER = 1e3; var TRANSITION_END = "transitionend"; var toType = (obj) => { if (obj === null || obj === void 0) { return `${obj}`; } return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase(); }; var getSelector = (element) => { let selector = element.getAttribute("data-bs-target"); if (!selector || selector === "#") { let hrefAttr = element.getAttribute("href"); if (!hrefAttr || !hrefAttr.includes("#") && !hrefAttr.startsWith(".")) { return null; } if (hrefAttr.includes("#") && !hrefAttr.startsWith("#")) { hrefAttr = `#${hrefAttr.split("#")[1]}`; } selector = hrefAttr && hrefAttr !== "#" ? hrefAttr.trim() : null; } return selector; }; var getSelectorFromElement = (element) => { const selector = getSelector(element); if (selector) { return document.querySelector(selector) ? selector : null; } return null; }; var getElementFromSelector = (element) => { const selector = getSelector(element); return selector ? document.querySelector(selector) : null; }; var getTransitionDurationFromElement = (element) => { if (!element) { return 0; } let { transitionDuration, transitionDelay } = window.getComputedStyle(element); const floatTransitionDuration = Number.parseFloat(transitionDuration); const floatTransitionDelay = Number.parseFloat(transitionDelay); if (!floatTransitionDuration && !floatTransitionDelay) { return 0; } transitionDuration = transitionDuration.split(",")[0]; transitionDelay = transitionDelay.split(",")[0]; return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER; }; var triggerTransitionEnd = (element) => { element.dispatchEvent(new Event(TRANSITION_END)); }; var isElement = (obj) => { if (!obj || typeof obj !== "object") { return false; } if (typeof obj.jquery !== "undefined") { obj = obj[0]; } return typeof obj.nodeType !== "undefined"; }; var getElement = (obj) => { if (isElement(obj)) { return obj.jquery ? obj[0] : obj; } if (typeof obj === "string" && obj.length > 0) { return document.querySelector(obj); } return null; }; var typeCheckConfig = (componentName, config, configTypes) => { Object.keys(configTypes).forEach((property) => { const expectedTypes = configTypes[property]; const value = config[property]; const valueType = value && isElement(value) ? "element" : toType(value); if (!new RegExp(expectedTypes).test(valueType)) { throw new TypeError( `${componentName.toUpperCase()}: Option "${property}" provided type "${valueType}" but expected type "${expectedTypes}".` ); } }); }; var isVisible = (element) => { if (!isElement(element) || element.getClientRects().length === 0) { return false; } return getComputedStyle(element).getPropertyValue("visibility") === "visible"; }; var isDisabled = (element) => { if (!element || element.nodeType !== Node.ELEMENT_NODE) { return true; } if (element.classList.contains("disabled")) { return true; } if (typeof element.disabled !== "undefined") { return element.disabled; } return element.hasAttribute("disabled") && element.getAttribute("disabled") !== "false"; }; var noop = () => { }; var reflow = (element) => { element.offsetHeight; }; var getjQuery = () => { const { jQuery } = window; if (jQuery && !document.body.hasAttribute("data-bs-no-jquery")) { return jQuery; } return null; }; var DOMContentLoadedCallbacks = []; var onDOMContentLoaded = (callback) => { if (document.readyState === "loading") { if (!DOMContentLoadedCallbacks.length) { document.addEventListener("DOMContentLoaded", () => { DOMContentLoadedCallbacks.forEach((callback2) => callback2()); }); } DOMContentLoadedCallbacks.push(callback); } else { callback(); } }; var isRTL = () => document.documentElement.dir === "rtl"; var defineJQueryPlugin = (plugin) => { onDOMContentLoaded(() => { const $ = getjQuery(); if ($) { const name = plugin.NAME; const JQUERY_NO_CONFLICT = $.fn[name]; $.fn[name] = plugin.jQueryInterface; $.fn[name].Constructor = plugin; $.fn[name].noConflict = () => { $.fn[name] = JQUERY_NO_CONFLICT; return plugin.jQueryInterface; }; } }); }; var execute = (callback) => { if (typeof callback === "function") { callback(); } }; var executeAfterTransition = (callback, transitionElement, waitForTransition = true) => { if (!waitForTransition) { execute(callback); return; } const durationPadding = 5; const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding; let called = false; const handler = ({ target }) => { if (target !== transitionElement) { return; } called = true; transitionElement.removeEventListener(TRANSITION_END, handler); execute(callback); }; transitionElement.addEventListener(TRANSITION_END, handler); setTimeout(() => { if (!called) { triggerTransitionEnd(transitionElement); } }, emulatedDuration); }; var getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => { let index = list.indexOf(activeElement); if (index === -1) { return list[!shouldGetNext && isCycleAllowed ? list.length - 1 : 0]; } const listLength = list.length; index += shouldGetNext ? 1 : -1; if (isCycleAllowed) { index = (index + listLength) % listLength; } return list[Math.max(0, Math.min(index, listLength - 1))]; }; // ns-hugo:C:\Desenvolupament\web\2023\hugo\modules\modules\filecache\modules\pkg\mod\github.com\twbs\[email protected]+incompatible\js\src\dom\event-handler.js var namespaceRegex = /[^.]*(?=\..*)\.|.*/; var stripNameRegex = /\..*/; var stripUidRegex = /::\d+$/; var eventRegistry = {}; var uidEvent = 1; var customEvents = { mouseenter: "mouseover", mouseleave: "mouseout" }; var customEventsRegex = /^(mouseenter|mouseleave)/i; var nativeEvents = /* @__PURE__ */ new Set([ "click", "dblclick", "mouseup", "mousedown", "contextmenu", "mousewheel", "DOMMouseScroll", "mouseover", "mouseout", "mousemove", "selectstart", "selectend", "keydown", "keypress", "keyup", "orientationchange", "touchstart", "touchmove", "touchend", "touchcancel", "pointerdown", "pointermove", "pointerup", "pointerleave", "pointercancel", "gesturestart", "gesturechange", "gestureend", "focus", "blur", "change", "reset", "select", "submit", "focusin", "focusout", "load", "unload", "beforeunload", "resize", "move", "DOMContentLoaded", "readystatechange", "error", "abort", "scroll" ]); function getUidEvent(element, uid) { return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++; } function getEvent(element) { const uid = getUidEvent(element); element.uidEvent = uid; eventRegistry[uid] = eventRegistry[uid] || {}; return eventRegistry[uid]; } function bootstrapHandler(element, fn) { return function handler(event) { event.delegateTarget = element; if (handler.oneOff) { EventHandler.off(element, event.type, fn); } return fn.apply(element, [event]); }; } function bootstrapDelegationHandler(element, selector, fn) { return function handler(event) { const domElements = element.querySelectorAll(selector); for (let { target } = event; target && target !== this; target = target.parentNode) { for (let i = domElements.length; i--; ) { if (domElements[i] === target) { event.delegateTarget = target; if (handler.oneOff) { EventHandler.off(element, event.type, selector, fn); } return fn.apply(target, [event]); } } } return null; }; } function findHandler(events, handler, delegationSelector = null) { const uidEventList = Object.keys(events); for (let i = 0, len = uidEventList.length; i < len; i++) { const event = events[uidEventList[i]]; if (event.originalHandler === handler && event.delegationSelector === delegationSelector) { return event; } } return null; } function normalizeParams(originalTypeEvent, handler, delegationFn) { const delegation = typeof handler === "string"; const originalHandler = delegation ? delegationFn : handler; let typeEvent = getTypeEvent(originalTypeEvent); const isNative = nativeEvents.has(typeEvent); if (!isNative) { typeEvent = originalTypeEvent; } return [delegation, originalHandler, typeEvent]; } function addHandler(element, originalTypeEvent, handler, delegationFn, oneOff) { if (typeof originalTypeEvent !== "string" || !element) { return; } if (!handler) { handler = delegationFn; delegationFn = null; } if (customEventsRegex.test(originalTypeEvent)) { const wrapFn = (fn2) => { return function(event) { if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) { return fn2.call(this, event); } }; }; if (delegationFn) { delegationFn = wrapFn(delegationFn); } else { handler = wrapFn(handler); } } const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn); const events = getEvent(element); const handlers = events[typeEvent] || (events[typeEvent] = {}); const previousFn = findHandler(handlers, originalHandler, delegation ? handler : null); if (previousFn) { previousFn.oneOff = previousFn.oneOff && oneOff; return; } const uid = getUidEvent(originalHandler, originalTypeEvent.replace(namespaceRegex, "")); const fn = delegation ? bootstrapDelegationHandler(element, handler, delegationFn) : bootstrapHandler(element, handler); fn.delegationSelector = delegation ? handler : null; fn.originalHandler = originalHandler; fn.oneOff = oneOff; fn.uidEvent = uid; handlers[uid] = fn; element.addEventListener(typeEvent, fn, delegation); } function removeHandler(element, events, typeEvent, handler, delegationSelector) { const fn = findHandler(events[typeEvent], handler, delegationSelector); if (!fn) { return; } element.removeEventListener(typeEvent, fn, Boolean(delegationSelector)); delete events[typeEvent][fn.uidEvent]; } function removeNamespacedHandlers(element, events, typeEvent, namespace) { const storeElementEvent = events[typeEvent] || {}; Object.keys(storeElementEvent).forEach((handlerKey) => { if (handlerKey.includes(namespace)) { const event = storeElementEvent[handlerKey]; removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector); } }); } function getTypeEvent(event) { event = event.replace(stripNameRegex, ""); return customEvents[event] || event; } var EventHandler = { on(element, event, handler, delegationFn) { addHandler(element, event, handler, delegationFn, false); }, one(element, event, handler, delegationFn) { addHandler(element, event, handler, delegationFn, true); }, off(element, originalTypeEvent, handler, delegationFn) { if (typeof originalTypeEvent !== "string" || !element) { return; } const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn); const inNamespace = typeEvent !== originalTypeEvent; const events = getEvent(element); const isNamespace = originalTypeEvent.startsWith("."); if (typeof originalHandler !== "undefined") { if (!events || !events[typeEvent]) { return; } removeHandler(element, events, typeEvent, originalHandler, delegation ? handler : null); return; } if (isNamespace) { Object.keys(events).forEach((elementEvent) => { removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1)); }); } const storeElementEvent = events[typeEvent] || {}; Object.keys(storeElementEvent).forEach((keyHandlers) => { const handlerKey = keyHandlers.replace(stripUidRegex, ""); if (!inNamespace || originalTypeEvent.includes(handlerKey)) { const event = storeElementEvent[keyHandlers]; removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector); } }); }, trigger(element, event, args) { if (typeof event !== "string" || !element) { return null; } const $ = getjQuery(); const typeEvent = getTypeEvent(event); const inNamespace = event !== typeEvent; const isNative = nativeEvents.has(typeEvent); let jQueryEvent; let bubbles = true; let nativeDispatch = true; let defaultPrevented = false; let evt = null; if (inNamespace && $) { jQueryEvent = $.Event(event, args); $(element).trigger(jQueryEvent); bubbles = !jQueryEvent.isPropagationStopped(); nativeDispatch = !jQueryEvent.isImmediatePropagationStopped(); defaultPrevented = jQueryEvent.isDefaultPrevented(); } if (isNative) { evt = document.createEvent("HTMLEvents"); evt.initEvent(typeEvent, bubbles, true); } else { evt = new CustomEvent(event, { bubbles, cancelable: true }); } if (typeof args !== "undefined") { Object.keys(args).forEach((key) => { Object.defineProperty(evt, key, { get() { return args[key]; } }); }); } if (defaultPrevented) { evt.preventDefault(); } if (nativeDispatch) { element.dispatchEvent(evt); } if (evt.defaultPrevented && typeof jQueryEvent !== "undefined") { jQueryEvent.preventDefault(); } return evt; } }; var event_handler_default = EventHandler; // ns-hugo:C:\Desenvolupament\web\2023\hugo\modules\modules\filecache\modules\pkg\mod\github.com\twbs\[email protected]+incompatible\js\src\dom\data.js var elementMap = /* @__PURE__ */ new Map(); var data_default = { set(element, key, instance) { if (!elementMap.has(element)) { elementMap.set(element, /* @__PURE__ */ new Map()); } const instanceMap = elementMap.get(element); if (!instanceMap.has(key) && instanceMap.size !== 0) { console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`); return; } instanceMap.set(key, instance); }, get(element, key) { if (elementMap.has(element)) { return elementMap.get(element).get(key) || null; } return null; }, remove(element, key) { if (!elementMap.has(element)) { return; } const instanceMap = elementMap.get(element); instanceMap.delete(key); if (instanceMap.size === 0) { elementMap.delete(element); } } }; // ns-hugo:C:\Desenvolupament\web\2023\hugo\modules\modules\filecache\modules\pkg\mod\github.com\twbs\[email protected]+incompatible\js\src\base-component.js var VERSION = "5.1.3"; var BaseComponent = class { constructor(element) { element = getElement(element); if (!element) { return; } this._element = element; data_default.set(this._element, this.constructor.DATA_KEY, this); } dispose() { data_default.remove(this._element, this.constructor.DATA_KEY); event_handler_default.off(this._element, this.constructor.EVENT_KEY); Object.getOwnPropertyNames(this).forEach((propertyName) => { this[propertyName] = null; }); } _queueCallback(callback, element, isAnimated = true) { executeAfterTransition(callback, element, isAnimated); } static getInstance(element) { return data_default.get(getElement(element), this.DATA_KEY); } static getOrCreateInstance(element, config = {}) { return this.getInstance(element) || new this(element, typeof config === "object" ? config : null); } static get VERSION() { return VERSION; } static get NAME() { throw new Error('You have to implement the static method "NAME", for each component!'); } static get DATA_KEY() { return `bs.${this.NAME}`; } static get EVENT_KEY() { return `.${this.DATA_KEY}`; } }; var base_component_default = BaseComponent; // ns-hugo:C:\Desenvolupament\web\2023\hugo\modules\modules\filecache\modules\pkg\mod\github.com\twbs\[email protected]+incompatible\js\src\util\component-functions.js var enableDismissTrigger = (component, method = "hide") => { const clickEvent = `click.dismiss${component.EVENT_KEY}`; const name = component.NAME; event_handler_default.on(document, clickEvent, `[data-bs-dismiss="${name}"]`, function(event) { if (["A", "AREA"].includes(this.tagName)) { event.preventDefault(); } if (isDisabled(this)) { return; } const target = getElementFromSelector(this) || this.closest(`.${name}`); const instance = component.getOrCreateInstance(target); instance[method](); }); }; // ns-hugo:C:\Desenvolupament\web\2023\hugo\modules\modules\filecache\modules\pkg\mod\github.com\twbs\[email protected]+incompatible\js\src\alert.js var NAME = "alert"; var DATA_KEY = "bs.alert"; var EVENT_KEY = `.${DATA_KEY}`; var EVENT_CLOSE = `close${EVENT_KEY}`; var EVENT_CLOSED = `closed${EVENT_KEY}`; var CLASS_NAME_FADE = "fade"; var CLASS_NAME_SHOW = "show"; var Alert = class extends base_component_default { static get NAME() { return NAME; } close() { const closeEvent = event_handler_default.trigger(this._element, EVENT_CLOSE); if (closeEvent.defaultPrevented) { return; } this._element.classList.remove(CLASS_NAME_SHOW); const isAnimated = this._element.classList.contains(CLASS_NAME_FADE); this._queueCallback(() => this._destroyElement(), this._element, isAnimated); } _destroyElement() { this._element.remove(); event_handler_default.trigger(this._element, EVENT_CLOSED); this.dispose(); } static jQueryInterface(config) { return this.each(function() { const data = Alert.getOrCreateInstance(this); if (typeof config !== "string") { return; } if (data[config] === void 0 || config.startsWith("_") || config === "constructor") { throw new TypeError(`No method named "${config}"`); } data[config](this); }); } }; enableDismissTrigger(Alert, "close"); defineJQueryPlugin(Alert); // ns-hugo:C:\Desenvolupament\web\2023\hugo\modules\modules\filecache\modules\pkg\mod\github.com\twbs\[email protected]+incompatible\js\src\dom\manipulator.js function normalizeData(val) { if (val === "true") { return true; } if (val === "false") { return false; } if (val === Number(val).toString()) { return Number(val); } if (val === "" || val === "null") { return null; } return val; } function normalizeDataKey(key) { return key.replace(/[A-Z]/g, (chr) => `-${chr.toLowerCase()}`); } var Manipulator = { setDataAttribute(element, key, value) { element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value); }, removeDataAttribute(element, key) { element.removeAttribute(`data-bs-${normalizeDataKey(key)}`); }, getDataAttributes(element) { if (!element) { return {}; } const attributes = {}; Object.keys(element.dataset).filter((key) => key.startsWith("bs")).forEach((key) => { let pureKey = key.replace(/^bs/, ""); pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length); attributes[pureKey] = normalizeData(element.dataset[key]); }); return attributes; }, getDataAttribute(element, key) { return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`)); }, offset(element) { const rect = element.getBoundingClientRect(); return { top: rect.top + window.pageYOffset, left: rect.left + window.pageXOffset }; }, position(element) { return { top: element.offsetTop, left: element.offsetLeft }; } }; var manipulator_default = Manipulator; // ns-hugo:C:\Desenvolupament\web\2023\hugo\modules\modules\filecache\modules\pkg\mod\github.com\twbs\[email protected]+incompatible\js\src\dom\selector-engine.js var NODE_TEXT = 3; var SelectorEngine = { find(selector, element = document.documentElement) { return [].concat(...Element.prototype.querySelectorAll.call(element, selector)); }, findOne(selector, element = document.documentElement) { return Element.prototype.querySelector.call(element, selector); }, children(element, selector) { return [].concat(...element.children).filter((child) => child.matches(selector)); }, parents(element, selector) { const parents = []; let ancestor = element.parentNode; while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) { if (ancestor.matches(selector)) { parents.push(ancestor); } ancestor = ancestor.parentNode; } return parents; }, prev(element, selector) { let previous = element.previousElementSibling; while (previous) { if (previous.matches(selector)) { return [previous]; } previous = previous.previousElementSibling; } return []; }, next(element, selector) { let next = element.nextElementSibling; while (next) { if (next.matches(selector)) { return [next]; } next = next.nextElementSibling; } return []; }, focusableChildren(element) { const focusables = [ "a", "button", "input", "textarea", "select", "details", "[tabindex]", '[contenteditable="true"]' ].map((selector) => `${selector}:not([tabindex^="-"])`).join(", "); return this.find(focusables, element).filter((el) => !isDisabled(el) && isVisible(el)); } }; var selector_engine_default = SelectorEngine; // ns-hugo:C:\Desenvolupament\web\2023\hugo\modules\modules\filecache\modules\pkg\mod\github.com\twbs\[email protected]+incompatible\js\src\collapse.js var NAME2 = "collapse"; var DATA_KEY2 = "bs.collapse"; var EVENT_KEY2 = `.${DATA_KEY2}`; var DATA_API_KEY = ".data-api"; var Default = { toggle: true, parent: null }; var DefaultType = { toggle: "boolean", parent: "(null|element)" }; var EVENT_SHOW = `show${EVENT_KEY2}`; var EVENT_SHOWN = `shown${EVENT_KEY2}`; var EVENT_HIDE = `hide${EVENT_KEY2}`; var EVENT_HIDDEN = `hidden${EVENT_KEY2}`; var EVENT_CLICK_DATA_API = `click${EVENT_KEY2}${DATA_API_KEY}`; var CLASS_NAME_SHOW2 = "show"; var CLASS_NAME_COLLAPSE = "collapse"; var CLASS_NAME_COLLAPSING = "collapsing"; var CLASS_NAME_COLLAPSED = "collapsed"; var CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`; var CLASS_NAME_HORIZONTAL = "collapse-horizontal"; var WIDTH = "width"; var HEIGHT = "height"; var SELECTOR_ACTIVES = ".collapse.show, .collapse.collapsing"; var SELECTOR_DATA_TOGGLE = '[data-bs-toggle="collapse"]'; var Collapse = class extends base_component_default { constructor(element, config) { super(element); this._isTransitioning = false; this._config = this._getConfig(config); this._triggerArray = []; const toggleList = selector_engine_default.find(SELECTOR_DATA_TOGGLE); for (let i = 0, len = toggleList.length; i < len; i++) { const elem = toggleList[i]; const selector = getSelectorFromElement(elem); const filterElement = selector_engine_default.find(selector).filter((foundElem) => foundElem === this._element); if (selector !== null && filterElement.length) { this._selector = selector; this._triggerArray.push(elem); } } this._initializeChildren(); if (!this._config.parent) { this._addAriaAndCollapsedClass(this._triggerArray, this._isShown()); } if (this._config.toggle) { this.toggle(); } } static get Default() { return Default; } static get NAME() { return NAME2; } toggle() { if (this._isShown()) { this.hide(); } else { this.show(); } } show() { if (this._isTransitioning || this._isShown()) { return; } let actives = []; let activesData; if (this._config.parent) { const children = selector_engine_default.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent); actives = selector_engine_default.find(SELECTOR_ACTIVES, this._config.parent).filter((elem) => !children.includes(elem)); } const container = selector_engine_default.findOne(this._selector); if (actives.length) { const tempActiveData = actives.find((elem) => container !== elem); activesData = tempActiveData ? Collapse.getInstance(tempActiveData) : null; if (activesData && activesData._isTransitioning) { return; } } const startEvent = event_handler_default.trigger(this._element, EVENT_SHOW); if (startEvent.defaultPrevented) { return; } actives.forEach((elemActive) => { if (container !== elemActive) { Collapse.getOrCreateInstance(elemActive, { toggle: false }).hide(); } if (!activesData) { data_default.set(elemActive, DATA_KEY2, null); } }); const dimension = this._getDimension(); this._element.classList.remove(CLASS_NAME_COLLAPSE); this._element.classList.add(CLASS_NAME_COLLAPSING); this._element.style[dimension] = 0; this._addAriaAndCollapsedClass(this._triggerArray, true); this._isTransitioning = true; const complete = () => { this._isTransitioning = false; this._element.classList.remove(CLASS_NAME_COLLAPSING); this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW2); this._element.style[dimension] = ""; event_handler_default.trigger(this._element, EVENT_SHOWN); }; const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1); const scrollSize = `scroll${capitalizedDimension}`; this._queueCallback(complete, this._element, true); this._element.style[dimension] = `${this._element[scrollSize]}px`; } hide() { if (this._isTransitioning || !this._isShown()) { return; } const startEvent = event_handler_default.trigger(this._element, EVENT_HIDE); if (startEvent.defaultPrevented) { return; } const dimension = this._getDimension(); this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`; reflow(this._element); this._element.classList.add(CLASS_NAME_COLLAPSING); this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW2); const triggerArrayLength = this._triggerArray.length; for (let i = 0; i < triggerArrayLength; i++) { const trigger = this._triggerArray[i]; const elem = getElementFromSelector(trigger); if (elem && !this._isShown(elem)) { this._addAriaAndCollapsedClass([trigger], false); } } this._isTransitioning = true; const complete = () => { this._isTransitioning = false; this._element.classList.remove(CLASS_NAME_COLLAPSING); this._element.classList.add(CLASS_NAME_COLLAPSE); event_handler_default.trigger(this._element, EVENT_HIDDEN); }; this._element.style[dimension] = ""; this._queueCallback(complete, this._element, true); } _isShown(element = this._element) { return element.classList.contains(CLASS_NAME_SHOW2); } _getConfig(config) { config = { ...Default, ...manipulator_default.getDataAttributes(this._element), ...config }; config.toggle = Boolean(config.toggle); config.parent = getElement(config.parent); typeCheckConfig(NAME2, config, DefaultType); return config; } _getDimension() { return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT; } _initializeChildren() { if (!this._config.parent) { return; } const children = selector_engine_default.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent); selector_engine_default.find(SELECTOR_DATA_TOGGLE, this._config.parent).filter((elem) => !children.includes(elem)).forEach((element) => { const selected = getElementFromSelector(element); if (selected) { this._addAriaAndCollapsedClass([element], this._isShown(selected)); } }); } _addAriaAndCollapsedClass(triggerArray, isOpen) { if (!triggerArray.length) { return; } triggerArray.forEach((elem) => { if (isOpen) { elem.classList.remove(CLASS_NAME_COLLAPSED); } else { elem.classList.add(CLASS_NAME_COLLAPSED); } elem.setAttribute("aria-expanded", isOpen); }); } static jQueryInterface(config) { return this.each(function() { const _config = {}; if (typeof config === "string" && /show|hide/.test(config)) { _config.toggle = false; } const data = Collapse.getOrCreateInstance(this, _config); if (typeof config === "string") { if (typeof data[config] === "undefined") { throw new TypeError(`No method named "${config}"`); } data[config](); } }); } }; event_handler_default.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function(event) { if (event.target.tagName === "A" || event.delegateTarget && event.delegateTarget.tagName === "A") { event.preventDefault(); } const selector = getSelectorFromElement(this); const selectorElements = selector_engine_default.find(selector); selectorElements.forEach((element) => { Collapse.getOrCreateInstance(element, { toggle: false }).toggle(); }); }); defineJQueryPlugin(Collapse); // ns-hugo:C:\Desenvolupament\web\2023\hugo\modules\modules\filecache\modules\pkg\mod\github.com\twbs\[email protected]+incompatible\js\src\dropdown.js var Popper = __toESM(require_popper()); var NAME3 = "dropdown"; var DATA_KEY3 = "bs.dropdown"; var EVENT_KEY3 = `.${DATA_KEY3}`; var DATA_API_KEY2 = ".data-api"; var ESCAPE_KEY = "Escape"; var SPACE_KEY = "Space"; var TAB_KEY = "Tab"; var ARROW_UP_KEY = "ArrowUp"; var ARROW_DOWN_KEY = "ArrowDown"; var RIGHT_MOUSE_BUTTON = 2; var REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEY}|${ARROW_DOWN_KEY}|${ESCAPE_KEY}`); var EVENT_HIDE2 = `hide${EVENT_KEY3}`; var EVENT_HIDDEN2 = `hidden${EVENT_KEY3}`; var EVENT_SHOW2 = `show${EVENT_KEY3}`; var EVENT_SHOWN2 = `shown${EVENT_KEY3}`; var EVENT_CLICK_DATA_API2 = `click${EVENT_KEY3}${DATA_API_KEY2}`; var EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY3}${DATA_API_KEY2}`; var EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY3}${DATA_API_KEY2}`; var CLASS_NAME_SHOW3 = "show"; var CLASS_NAME_DROPUP = "dropup"; var CLASS_NAME_DROPEND = "dropend"; var CLASS_NAME_DROPSTART = "dropstart"; var CLASS_NAME_NAVBAR = "navbar"; var SELECTOR_DATA_TOGGLE2 = '[data-bs-toggle="dropdown"]'; var SELECTOR_MENU = ".dropdown-menu"; var SELECTOR_NAVBAR_NAV = ".navbar-nav"; var SELECTOR_VISIBLE_ITEMS = ".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)"; var PLACEMENT_TOP = isRTL() ? "top-end" : "top-start"; var PLACEMENT_TOPEND = isRTL() ? "top-start" : "top-end"; var PLACEMENT_BOTTOM = isRTL() ? "bottom-end" : "bottom-start"; var PLACEMENT_BOTTOMEND = isRTL() ? "bottom-start" : "bottom-end"; var PLACEMENT_RIGHT = isRTL() ? "left-start" : "right-start"; var PLACEMENT_LEFT = isRTL() ? "right-start" : "left-start"; var Default2 = { offset: [0, 2], boundary: "clippingParents", reference: "toggle", display: "dynamic", popperConfig: null, autoClose: true }; var DefaultType2 = { offset: "(array|string|function)", boundary: "(string|element)", reference: "(string|element|object)", display: "string", popperConfig: "(null|object|function)", autoClose: "(boolean|string)" }; var Dropdown = class extends base_component_default { constructor(element, config) { super(element); this._popper = null; this._config = this._getConfig(config); this._menu = this._getMenuElement(); this._inNavbar = this._detectNavbar(); } static get Default() { return Default2; } static get DefaultType() { return DefaultType2; } static get NAME() { return NAME3; } toggle() { return this._isShown() ? this.hide() : this.show(); } show() { if (isDisabled(this._element) || this._isShown(this._menu)) { return; } const relatedTarget = { relatedTarget: this._element }; const showEvent = event_handler_default.trigger(this._element, EVENT_SHOW2, relatedTarget); if (showEvent.defaultPrevented) { return; } const parent = Dropdown.getParentFromElement(this._element); if (this._inNavbar) { manipulator_default.setDataAttribute(this._menu, "popper", "none"); } else { this._createPopper(parent); } if ("ontouchstart" in document.documentElement && !parent.closest(SELECTOR_NAVBAR_NAV)) { [].concat(...document.body.children).forEach((elem) => event_handler_default.on(elem, "mouseover", noop)); } this._element.focus(); this._element.setAttribute("aria-expanded", true); this._menu.classList.add(CLASS_NAME_SHOW3); this._element.classList.add(CLASS_NAME_SHOW3); event_handler_default.trigger(this._element, EVENT_SHOWN2, relatedTarget); } hide() { if (isDisabled(this._element) || !this._isShown(this._menu)) { return; } const relatedTarget = { relatedTarget: this._element }; this._completeHide(relatedTarget); } dispose() { if (this._popper) { this._popper.destroy(); } super.dispose(); } update() { this._inNavbar = this._detectNavbar(); if (this._popper) { this._popper.update(); } } _completeHide(relatedTarget) { const hideEvent = event_handler_default.trigger(this._element, EVENT_HIDE2, relatedTarget); if (hideEvent.defaultPrevented) { return; } if ("ontouchstart" in document.documentElement) { [].concat(...document.body.children).forEach((elem) => event_handler_default.off(elem, "mouseover", noop)); } if (this._popper) { this._popper.destroy(); } this._menu.classList.remove(CLASS_NAME_SHOW3); this._element.classList.remove(CLASS_NAME_SHOW3); this._element.setAttribute("aria-expanded", "false"); manipulator_default.removeDataAttribute(this._menu, "popper"); event_handler_default.trigger(this._element, EVENT_HIDDEN2, relatedTarget); } _getConfig(config) { config = { ...this.constructor.Default, ...manipulator_default.getDataAttributes(this._element), ...config }; typeCheckConfig(NAME3, config, this.constructor.DefaultType); if (typeof config.reference === "object" && !isElement(config.reference) && typeof config.reference.getBoundingClientRect !== "function") { throw new TypeError(`${NAME3.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`); } return config; } _createPopper(parent) { if (typeof Popper === "undefined") { throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org)"); } let referenceElement = this._element; if (this._config.reference === "parent") { referenceElement = parent; } else if (isElement(this._config.reference)) { referenceElement = getElement(this._config.reference); } else if (typeof this._config.reference === "object") { referenceElement = this._config.reference; } const popperConfig = this._getPopperConfig(); const isDisplayStatic = popperConfig.modifiers.find((modifier) => modifier.name === "applyStyles" && modifier.enabled === false); this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig); if (isDisplayStatic) { manipulator_default.setDataAttribute(this._menu, "popper", "static"); } } _isShown(element = this._element) { return element.classList.contains(CLASS_NAME_SHOW3); } _getMenuElement() { return selector_engine_default.next(this._element, SELECTOR_MENU)[0]; } _getPlacement() { const parentDropdown = this._element.parentNode; if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) { return PLACEMENT_RIGHT; } if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) { return PLACEMENT_LEFT; } const isEnd = getComputedStyle(this._menu).getPropertyValue("--bs-position").trim() === "end"; if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) { return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP; } return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM; } _detectNavbar() { return this._element.closest(`.${CLASS_NAME_NAVBAR}`) !== null; } _getOffset() { const { offset } = this._config; if (typeof offset === "string") { return offset.split(",").map((val) => Number.parseInt(val, 10)); } if (typeof offset === "function") { return (popperData) => offset(popperData, this._element); } return offset; } _getPopperConfig() { const defaultBsPopperConfig = { placement: this._getPlacement(), modifiers: [ { name: "preventOverflow", options: { boundary: this._config.boundary } }, { name: "offset", options: { offset: this._getOffset() } } ] }; if (this._config.display === "static") { defaultBsPopperConfig.modifiers = [{ name: "applyStyles", enabled: false }]; } return { ...defaultBsPopperConfig, ...typeof this._config.popperConfig === "function" ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig }; } _selectMenuItem({ key, target }) { const items = selector_engine_default.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(isVisible); if (!items.length) { return; } getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus(); } static jQueryInterface(config) { return this.each(function() { const data = Dropdown.getOrCreateInstance(this, config); if (typeof config !== "string") { return; } if (typeof data[config] === "undefined") { throw new TypeError(`No method named "${config}"`); } data[config](); }); } static clearMenus(event) { if (event && (event.button === RIGHT_MOUSE_BUTTON || event.type === "keyup" && event.key !== TAB_KEY)) { return; } const toggles = selector_engine_default.find(SELECTOR_DATA_TOGGLE2); for (let i = 0, len = toggles.length; i < len; i++) { const context = Dropdown.getInstance(toggles[i]); if (!context || context._config.autoClose === false) { continue; } if (!context._isShown()) { continue; } const relatedTarget = { relatedTarget: context._element }; if (event) { const composedPath = event.composedPath(); const isMenuTarget = composedPath.includes(context._menu); if (composedPath.includes(context._element) || context._config.autoClose === "inside" && !isMenuTarget || context._config.autoClose === "outside" && isMenuTarget) { continue; } if (context._menu.contains(event.target) && (event.type === "keyup" && event.key === TAB_KEY || /input|select|option|textarea|form/i.test(event.target.tagName))) { continue; } if (event.type === "click") { relatedTarget.clickEvent = event; } } context._completeHide(relatedTarget); } } static getParentFromElement(element) { return getElementFromSelector(element) || element.parentNode; } static dataApiKeydownHandler(event) { if (/input|textarea/i.test(event.target.tagName) ? event.key === SPACE_KEY || event.key !== ESCAPE_KEY && (event.key !== ARROW_DOWN_KEY && event.key !== ARROW_UP_KEY || event.target.closest(SELECTOR_MENU)) : !REGEXP_KEYDOWN.test(event.key)) { return; } const isActive = this.classList.contains(CLASS_NAME_SHOW3); if (!isActive && event.key === ESCAPE_KEY) { return; } event.preventDefault(); event.stopPropagation(); if (isDisabled(this)) { return; } const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE2) ? this : selector_engine_default.prev(this, SELECTOR_DATA_TOGGLE2)[0]; const instance = Dropdown.getOrCreateInstance(getToggleButton); if (event.key === ESCAPE_KEY) { instance.hide(); return; } if (event.key === ARROW_UP_KEY || event.key === ARROW_DOWN_KEY) { if (!isActive) { instance.show(); } instance._selectMenuItem(event); return; } if (!isActive || event.key === SPACE_KEY) { Dropdown.clearMenus(); } } }; event_handler_default.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE2, Dropdown.dataApiKeydownHandler); event_handler_default.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler); event_handler_default.on(document, EVENT_CLICK_DATA_API2, Dropdown.clearMenus); event_handler_default.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus); event_handler_default.on(document, EVENT_CLICK_DATA_API2, SELECTOR_DATA_TOGGLE2, function(event) { event.preventDefault(); Dropdown.getOrCreateInstance(this).toggle(); }); defineJQueryPlugin(Dropdown); // ns-hugo:C:\Desenvolupament\web\2023\hugo\modules\modules\filecache\modules\pkg\mod\github.com\twbs\[email protected]+incompatible\js\src\util\scrollbar.js var SELECTOR_FIXED_CONTENT = ".fixed-top, .fixed-bottom, .is-fixed, .sticky-top"; var SELECTOR_STICKY_CONTENT = ".sticky-top"; var ScrollBarHelper = class { constructor() { this._element = document.body; } getWidth() { const documentWidth = document.documentElement.clientWidth; return Math.abs(window.innerWidth - documentWidth); } hide() { const width = this.getWidth(); this._disableOverFlow(); this._setElementAttributes(this._element, "paddingRight", (calculatedValue) => calculatedValue + width); this._setElementAttributes(SELECTOR_FIXED_CONTENT, "paddingRight", (calculatedValue) => calculatedValue + width); this._setElementAttributes(SELECTOR_STICKY_CONTENT, "marginRight", (calculatedValue) => calculatedValue - width); } _disableOverFlow() { this._saveInitialAttribute(this._element, "overflow"); this._element.style.overflow = "hidden"; } _setElementAttributes(selector, styleProp, callback) { const scrollbarWidth = this.getWidth(); const manipulationCallBack = (element) => { if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) { return; } this._saveInitialAttribute(element, styleProp); const calculatedValue = window.getComputedStyle(element)[styleProp]; element.style[styleProp] = `${callback(Number.parseFloat(calculatedValue))}px`; }; this._applyManipulationCallback(selector, manipulationCallBack); } reset() { this._resetElementAttributes(this._element, "overflow"); this._resetElementAttributes(this._element, "paddingRight"); this._resetElementAttributes(SELECTOR_FIXED_CONTENT, "paddingRight"); this._resetElementAttributes(SELECTOR_STICKY_CONTENT, "marginRight"); } _saveInitialAttribute(element, styleProp) { const actualValue = element.style[styleProp]; if (actualValue) { manipulator_default.setDataAttribute(element, styleProp, actualValue); } } _resetElementAttributes(selector, styleProp) { const manipulationCallBack = (element) => { const value = manipulator_default.getDataAttribute(element, styleProp); if (typeof value === "undefined") { element.style.removeProperty(styleProp); } else { manipulator_default.removeDataAttribute(element, styleProp); element.style[styleProp] = value; } }; this._applyManipulationCallback(selector, manipulationCallBack); } _applyManipulationCallback(selector, callBack) { if (isElement(selector)) { callBack(selector); } else { selector_engine_default.find(selector, this._element).forEach(callBack); } } isOverflowing() { return this.getWidth() > 0; } }; var scrollbar_default = ScrollBarHelper; // ns-hugo:C:\Desenvolupament\web\2023\hugo\modules\modules\filecache\modules\pkg\mod\github.com\twbs\[email protected]+incompatible\js\src\util\backdrop.js var Default3 = { className: "modal-backdrop", isVisible: true, isAnimated: false, rootElement: "body", clickCallback: null }; var DefaultType3 = { className: "string", isVisible: "boolean", isAnimated: "boolean", rootElement: "(element|string)", clickCallback: "(function|null)" }; var NAME4 = "backdrop"; var CLASS_NAME_FADE2 = "fade"; var CLASS_NAME_SHOW4 = "show"; var EVENT_MOUSEDOWN = `mousedown.bs.${NAME4}`; var Backdrop = class { constructor(config) { this._config = this._getConfig(config); this._isAppended = false; this._element = null; } show(callback) { if (!this._config.isVisible) { execute(callback); return; } this._append(); if (this._config.isAnimated) { reflow(this._getElement()); } this._getElement().classList.add(CLASS_NAME_SHOW4); this._emulateAnimation(() => { execute(callback); }); } hide(callback) { if (!this._config.isVisible) { execute(callback); return; } this._getElement().classList.remove(CLASS_NAME_SHOW4); this._emulateAnimation(() => { this.dispose(); execute(callback); }); } _getElement() { if (!this._element) { const backdrop = document.createElement("div"); backdrop.className = this._config.className; if (this._config.isAnimated) { backdrop.classList.add(CLASS_NAME_FADE2); } this._element = backdrop; } return this._element; } _getConfig(config) { config = { ...Default3, ...typeof config === "object" ? config : {} }; config.rootElement = getElement(config.rootElement); typeCheckConfig(NAME4, config, DefaultType3); return config; } _append() { if (this._isAppended) { return; } this._config.rootElement.append(this._getElement()); event_handler_default.on(this._getElement(), EVENT_MOUSEDOWN, () => { execute(this._config.clickCallback); }); this._isAppended = true; } dispose() { if (!this._isAppended) { return; } event_handler_default.off(this._element, EVENT_MOUSEDOWN); this._element.remove(); this._isAppended = false; } _emulateAnimation(callback) { executeAfterTransition(callback, this._getElement(), this._config.isAnimated); } }; var backdrop_default = Backdrop; // ns-hugo:C:\Desenvolupament\web\2023\hugo\modules\modules\filecache\modules\pkg\mod\github.com\twbs\[email protected]+incompatible\js\src\util\focustrap.js var Default4 = { trapElement: null, autofocus: true }; var DefaultType4 = { trapElement: "element", autofocus: "boolean" }; var NAME5 = "focustrap"; var DATA_KEY4 = "bs.focustrap"; var EVENT_KEY4 = `.${DATA_KEY4}`; var EVENT_FOCUSIN = `focusin${EVENT_KEY4}`; var EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY4}`; var TAB_KEY2 = "Tab"; var TAB_NAV_FORWARD = "forward"; var TAB_NAV_BACKWARD = "backward"; var FocusTrap = class { constructor(config) { this._config = this._getConfig(config); this._isActive = false; this._lastTabNavDirection = null; } activate() { const { trapElement, autofocus } = this._config; if (this._isActive) { return; } if (autofocus) { trapElement.focus(); } event_handler_default.off(document, EVENT_KEY4); event_handler_default.on(document, EVENT_FOCUSIN, (event) => this._handleFocusin(event)); event_handler_default.on(document, EVENT_KEYDOWN_TAB, (event) => this._handleKeydown(event)); this._isActive = true; } deactivate() { if (!this._isActive) { return; } this._isActive = false; event_handler_default.off(document, EVENT_KEY4); } _handleFocusin(event) { const { target } = event; const { trapElement } = this._config; if (target === document || target === trapElement || trapElement.contains(target)) { return; } const elements = selector_engine_default.focusableChildren(trapElement); if (elements.length === 0) { trapElement.focus(); } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) { elements[elements.length - 1].focus(); } else { elements[0].focus(); } } _handleKeydown(event) { if (event.key !== TAB_KEY2) { return; } this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD; } _getConfig(config) { config = { ...Default4, ...typeof config === "object" ? config : {} }; typeCheckConfig(NAME5, config, DefaultType4); return config; } }; var focustrap_default = FocusTrap; // ns-hugo:C:\Desenvolupament\web\2023\hugo\modules\modules\filecache\modules\pkg\mod\github.com\twbs\[email protected]+incompatible\js\src\modal.js var NAME6 = "modal"; var DATA_KEY5 = "bs.modal"; var EVENT_KEY5 = `.${DATA_KEY5}`; var DATA_API_KEY3 = ".data-api"; var ESCAPE_KEY2 = "Escape"; var Default5 = { backdrop: true, keyboard: true, focus: true }; var DefaultType5 = { backdrop: "(boolean|string)", keyboard: "boolean", focus: "boolean" }; var EVENT_HIDE3 = `hide${EVENT_KEY5}`; var EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY5}`; var EVENT_HIDDEN3 = `hidden${EVENT_KEY5}`; var EVENT_SHOW3 = `show${EVENT_KEY5}`; var EVENT_SHOWN3 = `shown${EVENT_KEY5}`; var EVENT_RESIZE = `resize${EVENT_KEY5}`; var EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY5}`; var EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY5}`; var EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY5}`; var EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY5}`; var EVENT_CLICK_DATA_API3 = `click${EVENT_KEY5}${DATA_API_KEY3}`; var CLASS_NAME_OPEN = "modal-open"; var CLASS_NAME_FADE3 = "fade"; var CLASS_NAME_SHOW5 = "show"; var CLASS_NAME_STATIC = "modal-static"; var OPEN_SELECTOR = ".modal.show"; var SELECTOR_DIALOG = ".modal-dialog"; var SELECTOR_MODAL_BODY = ".modal-body"; var SELECTOR_DATA_TOGGLE3 = '[data-bs-toggle="modal"]'; var Modal = class extends base_component_default { constructor(element, config) { super(element); this._config = this._getConfig(config); this._dialog = selector_engine_default.findOne(SELECTOR_DIALOG, this._element); this._backdrop = this._initializeBackDrop(); this._focustrap = this._initializeFocusTrap(); this._isShown = false; this._ignoreBackdropClick = false; this._isTransitioning = false; this._scrollBar = new scrollbar_default(); } static get Default() { return Default5; } static get NAME() { return NAME6; } toggle(relatedTarget) { return this._isShown ? this.hide() : this.show(relatedTarget); } show(relatedTarget) { if (this._isShown || this._isTransitioning) { return; } const showEvent = event_handler_default.trigger(this._element, EVENT_SHOW3, { relatedTarget }); if (showEvent.defaultPrevented) { return; } this._isShown = true; if (this._isAnimated()) { this._isTransitioning = true; } this._scrollBar.hide(); document.body.classList.add(CLASS_NAME_OPEN); this._adjustDialog(); this._setEscapeEvent(); this._setResizeEvent(); event_handler_default.on(this._dialog, EVENT_MOUSEDOWN_DISMISS, () => { event_handler_default.one(this._element, EVENT_MOUSEUP_DISMISS, (event) => { if (event.target === this._element) { this._ignoreBackdropClick = true; } }); }); this._showBackdrop(() => this._showElement(relatedTarget)); } hide() { if (!this._isShown || this._isTransitioning) { return; } const hideEvent = event_handler_default.trigger(this._element, EVENT_HIDE3); if (hideEvent.defaultPrevented) { return; } this._isShown = false; const isAnimated = this._isAnimated(); if (isAnimated) { this._isTransitioning = true; } this._setEscapeEvent(); this._setResizeEvent(); this._focustrap.deactivate(); this._element.classList.remove(CLASS_NAME_SHOW5); event_handler_default.off(this._element, EVENT_CLICK_DISMISS); event_handler_default.off(this._dialog, EVENT_MOUSEDOWN_DISMISS); this._queueCallback(() => this._hideModal(), this._element, isAnimated); } dispose() { [window, this._dialog].forEach((htmlElement) => event_handler_default.off(htmlElement, EVENT_KEY5)); this._backdrop.dispose(); this._focustrap.deactivate(); super.dispose(); } handleUpdate() { this._adjustDialog(); } _initializeBackDrop() { return new backdrop_default({ isVisible: Boolean(this._config.backdrop), isAnimated: this._isAnimated() }); } _initializeFocusTrap() { return new focustrap_default({ trapElement: this._element }); } _getConfig(config) { config = { ...Default5, ...manipulator_default.getDataAttributes(this._element), ...typeof config === "object" ? config : {} }; typeCheckConfig(NAME6, config, DefaultType5); return config; } _showElement(relatedTarget) { const isAnimated = this._isAnimated(); const modalBody = selector_engine_default.findOne(SELECTOR_MODAL_BODY, this._dialog); if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) { document.body.append(this._element); } this._element.style.display = "block"; this._element.removeAttribute("aria-hidden"); this._element.setAttribute("aria-modal", true); this._element.setAttribute("role", "dialog"); this._element.scrollTop = 0; if (modalBody) { modalBody.scrollTop = 0; } if (isAnimated) { reflow(this._element); } this._element.classList.add(CLASS_NAME_SHOW5); const transitionComplete = () => { if (this._config.focus) { this._focustrap.activate(); } this._isTransitioning = false; event_handler_default.trigger(this._element, EVENT_SHOWN3, { relatedTarget }); }; this._queueCallback(transitionComplete, this._dialog, isAnimated); } _setEscapeEvent() { if (this._isShown) { event_handler_default.on(this._element, EVENT_KEYDOWN_DISMISS, (event) => { if (this._config.keyboard && event.key === ESCAPE_KEY2) { event.preventDefault(); this.hide(); } else if (!this._config.keyboard && event.key === ESCAPE_KEY2) { this._triggerBackdropTransition(); } }); } else { event_handler_default.off(this._element, EVENT_KEYDOWN_DISMISS); } } _setResizeEvent() { if (this._isShown) { event_handler_default.on(window, EVENT_RESIZE, () => this._adjustDialog()); } else { event_handler_default.off(window, EVENT_RESIZE); } } _hideModal() { this._element.style.display = "none"; this._element.setAttribute("aria-hidden", true); this._element.removeAttribute("aria-modal"); this._element.removeAttribute("role"); this._isTransitioning = false; this._backdrop.hide(() => { document.body.classList.remove(CLASS_NAME_OPEN); this._resetAdjustments(); this._scrollBar.reset(); event_handler_default.trigger(this._element, EVENT_HIDDEN3); }); } _showBackdrop(callback) { event_handler_default.on(this._element, EVENT_CLICK_DISMISS, (event) => { if (this._ignoreBackdropClick) { this._ignoreBackdropClick = false; return; } if (event.target !== event.currentTarget) { return; } if (this._config.backdrop === true) { this.hide(); } else if (this._config.backdrop === "static") { this._triggerBackdropTransition(); } }); this._backdrop.show(callback); } _isAnimated() { return this._element.classList.contains(CLASS_NAME_FADE3); } _triggerBackdropTransition() { const hideEvent = event_handler_default.trigger(this._element, EVENT_HIDE_PREVENTED); if (hideEvent.defaultPrevented) { return; } const { classList, scrollHeight, style } = this._element; const isModalOverflowing = scrollHeight > document.documentElement.clientHeight; if (!isModalOverflowing && style.overflowY === "hidden" || classList.contains(CLASS_NAME_STATIC)) { return; } if (!isModalOverflowing) { style.overflowY = "hidden"; } classList.add(CLASS_NAME_STATIC); this._queueCallback(() => { classList.remove(CLASS_NAME_STATIC); if (!isModalOverflowing) { this._queueCallback(() => { style.overflowY = ""; }, this._dialog); } }, this._dialog); this._element.focus(); } _adjustDialog() { const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight; const scrollbarWidth = this._scrollBar.getWidth(); const isBodyOverflowing = scrollbarWidth > 0; if (!isBodyOverflowing && isModalOverflowing && !isRTL() || isBodyOverflowing && !isModalOverflowing && isRTL()) { this._element.style.paddingLeft = `${scrollbarWidth}px`; } if (isBodyOverflowing && !isModalOverflowing && !isRTL() || !isBodyOverflowing && isModalOverflowing && isRTL()) { this._element.style.paddingRight = `${scrollbarWidth}px`; } } _resetAdjustments() { this._element.style.paddingLeft = ""; this._element.style.paddingRight = ""; } static jQueryInterface(config, relatedTarget) { return this.each(function() { const data = Modal.getOrCreateInstance(this, config); if (typeof config !== "string") { return; } if (typeof data[config] === "undefined") { throw new TypeError(`No method named "${config}"`); } data[config](relatedTarget); }); } }; event_handler_default.on(document, EVENT_CLICK_DATA_API3, SELECTOR_DATA_TOGGLE3, function(event) { const target = getElementFromSelector(this); if (["A", "AREA"].includes(this.tagName)) { event.preventDefault(); } event_handler_default.one(target, EVENT_SHOW3, (showEvent) => { if (showEvent.defaultPrevented) { return; } event_handler_default.one(target, EVENT_HIDDEN3, () => { if (isVisible(this)) { this.focus(); } }); }); const allReadyOpen = selector_engine_default.findOne(OPEN_SELECTOR); if (allReadyOpen) { Modal.getInstance(allReadyOpen).hide(); } const data = Modal.getOrCreateInstance(target); data.toggle(this); }); enableDismissTrigger(Modal); defineJQueryPlugin(Modal); // ns-hugo:C:\Desenvolupament\web\2023\hugo\modules\modules\filecache\modules\pkg\mod\github.com\twbs\[email protected]+incompatible\js\src\tab.js var NAME7 = "tab"; var DATA_KEY6 = "bs.tab"; var EVENT_KEY6 = `.${DATA_KEY6}`; var DATA_API_KEY4 = ".data-api"; var EVENT_HIDE4 = `hide${EVENT_KEY6}`; var EVENT_HIDDEN4 = `hidden${EVENT_KEY6}`; var EVENT_SHOW4 = `show${EVENT_KEY6}`; var EVENT_SHOWN4 = `shown${EVENT_KEY6}`; var EVENT_CLICK_DATA_API4 = `click${EVENT_KEY6}${DATA_API_KEY4}`; var CLASS_NAME_DROPDOWN_MENU = "dropdown-menu"; var CLASS_NAME_ACTIVE = "active"; var CLASS_NAME_FADE4 = "fade"; var CLASS_NAME_SHOW6 = "show"; var SELECTOR_DROPDOWN = ".dropdown"; var SELECTOR_NAV_LIST_GROUP = ".nav, .list-group"; var SELECTOR_ACTIVE = ".active"; var SELECTOR_ACTIVE_UL = ":scope > li > .active"; var SELECTOR_DATA_TOGGLE4 = '[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]'; var SELECTOR_DROPDOWN_TOGGLE = ".dropdown-toggle"; var SELECTOR_DROPDOWN_ACTIVE_CHILD = ":scope > .dropdown-menu .active"; var Tab = class extends base_component_default { static get NAME() { return NAME7; } show() { if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && this._element.classList.contains(CLASS_NAME_ACTIVE)) { return; } let previous; const target = getElementFromSelector(this._element); const listElement = this._element.closest(SELECTOR_NAV_LIST_GROUP); if (listElement) { const itemSelector = listElement.nodeName === "UL" || listElement.nodeName === "OL" ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE; previous = selector_engine_default.find(itemSelector, listElement); previous = previous[previous.length - 1]; } const hideEvent = previous ? event_handler_default.trigger(previous, EVENT_HIDE4, { relatedTarget: this._element }) : null; const showEvent = event_handler_default.trigger(this._element, EVENT_SHOW4, { relatedTarget: previous }); if (showEvent.defaultPrevented || hideEvent !== null && hideEvent.defaultPrevented) { return; } this._activate(this._element, listElement); const complete = () => { event_handler_default.trigger(previous, EVENT_HIDDEN4, { relatedTarget: this._element }); event_handler_default.trigger(this._element, EVENT_SHOWN4, { relatedTarget: previous }); }; if (target) { this._activate(target, target.parentNode, complete); } else { complete(); } } _activate(element, container, callback) { const activeElements = container && (container.nodeName === "UL" || container.nodeName === "OL") ? selector_engine_default.find(SELECTOR_ACTIVE_UL, container) : selector_engine_default.children(container, SELECTOR_ACTIVE); const active = activeElements[0]; const isTransitioning = callback && (active && active.classList.contains(CLASS_NAME_FADE4)); const complete = () => this._transitionComplete(element, active, callback); if (active && isTransitioning) { active.classList.remove(CLASS_NAME_SHOW6); this._queueCallback(complete, element, true); } else { complete(); } } _transitionComplete(element, active, callback) { if (active) { active.classList.remove(CLASS_NAME_ACTIVE); const dropdownChild = selector_engine_default.findOne(SELECTOR_DROPDOWN_ACTIVE_CHILD, active.parentNode); if (dropdownChild) { dropdownChild.classList.remove(CLASS_NAME_ACTIVE); } if (active.getAttribute("role") === "tab") { active.setAttribute("aria-selected", false); } } element.classList.add(CLASS_NAME_ACTIVE); if (element.getAttribute("role") === "tab") { element.setAttribute("aria-selected", true); } reflow(element); if (element.classList.contains(CLASS_NAME_FADE4)) { element.classList.add(CLASS_NAME_SHOW6); } let parent = element.parentNode; if (parent && parent.nodeName === "LI") { parent = parent.parentNode; } if (parent && parent.classList.contains(CLASS_NAME_DROPDOWN_MENU)) { const dropdownElement = element.closest(SELECTOR_DROPDOWN); if (dropdownElement) { selector_engine_default.find(SELECTOR_DROPDOWN_TOGGLE, dropdownElement).forEach((dropdown) => dropdown.classList.add(CLASS_NAME_ACTIVE)); } element.setAttribute("aria-expanded", true); } if (callback) { callback(); } } static jQueryInterface(config) { return this.each(function() { const data = Tab.getOrCreateInstance(this); if (typeof config === "string") { if (typeof data[config] === "undefined") { throw new TypeError(`No method named "${config}"`); } data[config](); } }); } }; event_handler_default.on(document, EVENT_CLICK_DATA_API4, SELECTOR_DATA_TOGGLE4, function(event) { if (["A", "AREA"].includes(this.tagName)) { event.preventDefault(); } if (isDisabled(this)) { return; } const data = Tab.getOrCreateInstance(this); data.show(); }); defineJQueryPlugin(Tab); })(); </script> <script src="/js/scripts.b8c257e2b27b86172b1ff2c0232f8e057fc756be96b590c6a75d55cc08737c8f7547b49c45c2d54426c29421c3289ea54862ed28d35e865f48d3c667632b17a6.js" crossorigin="anonymous" defer integrity="sha512-uMJX4rJ7hhcrH/LAIy+OBX/HVr6WtZDGp11VzAhzfI91R7ScRcLVRCbClCHDKJ6lSGLtKNNehl9I08ZnYysXpg==" type="application/javascript"></script> </body> </html>