{
  "version": 3,
  "sources": ["../../../templates/components/input_select_v2/input_select_v2.js", "../../../templates/components/checkbox_select_multiple_filter/checkbox_select_multiple_filter.js", "../../../templates/patterns/atoms/alert_manager/alert_manager.js", "../../../templates/patterns/atoms/banner_information/banner_information.js", "../../../templates/patterns/atoms/basic_input/basic_input.js", "../../../templates/patterns/atoms/copy_to_clipboard/copy_to_clipboard.js", "../../../templates/patterns/atoms/totp_input_v2610/totp_input_v2610.js", "../../../templates/patterns/atoms/input_date/input_date.js", "../../../templates/patterns/atoms/input_datepicker/input_datepicker.js", "../../../templates/patterns/atoms/input_msp/input_msp.js", "../../../templates/patterns/atoms/input_select_advanced/input_select_advanced.js", "../../../templates/patterns/atoms/input_number/input_number.js", "../../../templates/patterns/atoms/input_slider/input_slider.js", "../../../templates/patterns/atoms/main_modal/main_modal.js", "../../../templates/patterns/atoms/menu_option/menu_option.js", "../../../templates/patterns/atoms/password_input/password_input.js", "../../../templates/patterns/atoms/tree_view/tree_view.js", "../../../templates/patterns/molecules/form_update_resource/form_update_resource.js", "../../../templates/patterns/molecules/modal/modal.js", "../../../templates/patterns/molecules/service_selector/service_selector.js", "../../../templates/patterns/organisms/form_sales_quote_line/form_sales_quote_line.js", "../../../templates/patterns/pages/add_discount_form_page/add_discount_form_page.js", "../../../templates/patterns/pages/create_additional_disk/create_additional_disk.js", "../../../templates/patterns/pages/partner_edit_client_unit_price/partner_edit_client_unit_price.js", "../../../templates/patterns/pages/update_prices_category/update_prices_category.js", "../../../templates/patterns/pages/update_provisioning_vm_step2/update_provisioning_vm_step2.js", "../../../templates/patterns/pages/update_provisioning_vm_step3/update_provisioning_vm_step3.js", "../../../templates/patterns/pages/update_provisioning_vm_step4/update_provisioning_vm_step4.js", "../../../templates/patterns/pages/update_provisioning_vm/update_provisioning_vm.js", "../../../templates/patterns/pages/add_new_disk_vm/add_new_disk_vm.js", "../../../templates/patterns/pages/add_gpu_vm/add_gpu_vm.js", "../../../templates/patterns/pages/vm_update_disk/vm_update_disk.js", "../../../templates/patterns/pages/virtual_machine_update_disk/virtual_machine_update_disk.js", "../../../templates/patterns/pages/vm_update_public_network_page/vm_update_public_network_page.js", "../../../templates/patterns/pages/vm_update_status/vm_update_status.js", "../../../templates/patterns/pages/wholesaler_clone_partner_plan/wholesaler_clone_partner_plan.js", "../../../templates/patterns/pages/wholesaler_edit_partner_unit_price/wholesaler_edit_partner_unit_price.js", "../../../templates/patterns/templates/layout_right_sidebar_form_v2/layout_right_sidebar_form_v2.js", "../../../templates/patterns/pages/client_create_rule_discount_page/client_create_rule_discount_page.js", "../../../templates/patterns/pages/vm_delete_pending/vm_delete_pending.js", "../../../templates/js/forms/PasskeyAuthentication.js", "../../../templates/js/forms/ClientBillingUpdateForm.js", "../../../templates/js/forms/FormPartnerBillingUpdate.js", "../../../templates/js/forms/PartnerOrderAssignment.js", "../../../templates/js/forms/InventoryClientForm.js", "../../../templates/js/forms/UpdatePublicNetworkIpForm.js", "../../../templates/js/forms/UpdatePortalForm.js", "../../../templates/js/forms/VirtualMachineAddNetworkForm.js", "../../../../html_builder/templates/table/table.js", "../../../templates/js/components/CalculateMargins.js", "../../../templates/js/components/OptionsSubmenu.js", "../../../templates/js/components/RightMenu.js", "../../../templates/js/components/Submenu.js", "../../../../webapp/webapp_common/templates/navigation/menu.js", "../../../templates/app.js"],
  "sourcesContent": ["/**\n * Some properties are inherited from the parent component FormVerticalLayout\n * like hasErrors or isDisabled properties\n */\nAlpine.data('InputSelectV2', (payload) => ({\n    value: payload.value,\n    searchable: payload.searchable || false,\n    hasFocus: false,\n    showOptions: false,\n    q: '',\n\n    selectOption(selectedValue) {\n        this.value = selectedValue\n        this.showOptions = false\n        this.$dispatch('input', this.value)\n    },\n\n    // Icons\n    showSelectIcon() {\n        return !(this.searchable && this.showOptions)\n    },\n\n    closeSelectIcon() {\n        return this.searchable && this.showOptions && this.q.length > 0\n    },\n\n    showOption(label) {\n        const q = this.q.trim()\n        // There is nothing in the search input, display all options\n        if (!this.q) {\n            return true\n        }\n\n        return label.toLowerCase().includes(q.toLowerCase())\n    },\n\n    // Triggers\n    mainTriggers: {\n        /**\n         * Close options dialog\n         */\n        ['@mousedown.outside']() {\n            this.showOptions = false\n        }\n    },\n\n    searchTriggers: {\n        ['x-model']: 'q',\n        ['x-show']() {\n            return this.searchable && this.showOptions\n        },\n        ['x-trap']() {\n            return this.searchable && this.showOptions\n        },\n    },\n\n    selectTriggers: {\n        /**\n         * Display options if element is not disabled\n         */\n        ['@mousedown.prevent']($event) {\n            if (this.isDisabled) {\n                return\n            }\n\n            // Clicking on the select element closes options dialog if they are displayed\n            if (this.showOptions && $event.target == this.$el) {\n                this.showOptions = false;\n                return;\n            }\n\n            this.showOptions = true\n        },\n\n        ['class']: {\n            'rounded-b-[0]': this.showOptions,\n            '!border-[#FF472E] border-[2px]': this.hasErrors\n        },\n\n        /**\n         * Alpine not triggering changes with modelable, trigger manually\n         */\n        ['@input']($event) {\n            this.value = $event.target.value\n        },\n\n        ['@focus']() {\n            this.hasFocus = true\n        },\n\n        ['@focusout']() {\n            this.hasFocus = false\n        },\n\n        ['x-show']() {\n            return !(this.searchable && this.showOptions)\n        }\n    },\n}))\n", "Alpine.data('CheckboxSelectMultipleFilter', () => ({\n    open: false,\n    selected: 0,\n    checkboxes: [],\n    elements: [],\n\n    init() {\n        this.elements = this.$el.querySelectorAll('input[type=\"checkbox\"]');\n        this.checkboxes = Array.from(this.elements).map(checkbox => checkbox.checked);\n        this.selected = this.checkboxes.filter(Boolean).length;\n\n        this.$watch('checkboxes', value => {\n            this.selected = value.filter(Boolean).length;\n        });\n    },\n    toggleCheckbox(ref) {\n        const checkbox = this.$refs[ref];\n        checkbox.checked = !checkbox.checked;\n        const index = Array.from(this.elements).indexOf(checkbox);\n        this.checkboxes[index] = checkbox.checked;\n    }\n}))\n", "Alpine.store('AlertManager', {\n  /**\n   * Alert container to append alerts\n   */\n  alertContainer: null,\n\n  /**\n   * List of alerts pending to display\n   */\n  alerts: [],\n\n  /**\n   * Current alert on display\n   * null if there is not alert on screen\n   */\n  current: null,\n\n  /**\n   * Current running timeout\n   */\n  currentTimeout: null,\n\n  init() {\n    this.alertContainer = document.querySelector('#alert-container')\n  },\n\n  /**\n   *\n   * @param {String} msg\n   * @param {String} kind success|error\n   */\n  add(msg, kind, duration = 3000) {\n    this.alerts.push({\n      msg,\n      kind,\n    })\n\n    this.displayNext(duration)\n  },\n\n  /**\n   * Compose alert element\n   * @param {*} alert\n   * @return HTMLDivElement\n   */\n  getAlertEl(alert) {\n    const el = document.createElement('div')\n    const closeButton = document.createElement('button')\n\n    el.classList.add(...['alert-v2', 'slide-bottom', 'relative', alert.kind])\n\n    closeButton.type = 'button'\n    closeButton.classList.add(\n      'fixed',\n      'inset-y-0',\n      'right-0',\n      'flex',\n      'items-center',\n      'px-[2rem]',\n      'text-[2rem]',\n      'leading-none',\n    )\n    closeButton.innerHTML = '&times;'\n\n    el.appendChild(closeButton)\n\n    if (typeof(alert.msg) == \"object\"){\n      alert.msg.forEach(msg => {\n        let childElement = document.createElement(\"p\")\n        childElement.textContent = msg\n        el.appendChild(childElement)\n      });\n\n      return el\n    }\n\n    const text = document.createElement('span')\n    text.textContent = alert.msg\n    el.appendChild(text)\n    return el\n  },\n\n  /**\n   * Delete this alert and display next if any\n   */\n  dismiss(alertContainer) {\n    if (this.currentTimeout) {\n      clearTimeout(this.currentTimeout)\n    }\n\n    alertContainer.innerHTML = ''\n    this.current = null\n    this.currentTimeout = null\n    this.displayNext()\n  },\n\n  displayNext(duration) {\n    if (this.current) {\n      return\n    }\n\n    this.current = this.alerts.shift()\n\n    /**\n     * AlertContainer does not exist on pattern library when using other elements\n     */\n    if (!this.alertContainer) {\n      console.warn(\"AlertContainer not found, cannot display alert\", {...this.current})\n      return\n    }\n\n    if (this.current) {\n      const alert = this.getAlertEl(this.current)\n      this.alertContainer.appendChild(alert)\n    }\n\n    /**\n     * Trigger animation end after the configured duration.\n     */\n    if (this.current) {\n      this.currentTimeout = setTimeout(() => {\n        /* Animate alert and trigger dismiss on animation end */\n        const el = this.alertContainer.children[0]\n\n        if (el) {\n          el.classList.remove('slide-bottom')\n          el.classList.add('slide-top')\n\n          el.addEventListener(\n            'animationend',\n            () => {\n              this.dismiss(this.alertContainer)\n            },\n            false,\n          )\n        } else {\n          // Just in case element is not found trigger dismiss anyway\n          this.dismiss(this.alertContainer)\n        }\n      }, duration)\n    }\n  },\n})\n", "Alpine.store('BannerInformation', {\n  isCollapsed: false,\n\n  close() {\n    this.isCollapsed = true\n  },\n  open() {\n    this.isCollapsed = false\n  },\n})\n", "// @deprecated\nAlpine.data('BasicInput', (initialValue) => ({\n    value: initialValue,\n\n    floatingLabel: {\n        ['x-bind:class']() {\n            if (this.value) {\n                return 'not-empty'\n            }\n            return 'empty'\n        }\n    }\n}));\n", "Alpine.data('CopyToClipboard', (successMsg, text) => ({\n  trigger: {\n    ['@click']() {\n      navigator.clipboard.writeText(text)\n      if (successMsg) {\n        Alpine.store(\"AlertManager\").add(successMsg, \"success\")\n      }\n    },\n  },\n}))\n", "Alpine.data('TotpInputV2610', () => ({\n  value: '',\n  enhanced: false,\n  focused: false,\n  composing: false,\n  selectionStart: 0,\n  selectionEnd: 0,\n  submitting: false,\n  timer: null,\n  submissionTimer: null,\n  resizeObserver: null,\n  form: null,\n  submitListener: null,\n  selectionListener: null,\n  pageShowListener: null,\n  inputStyle: {},\n\n  get segmented() {\n    return this.enhanced && /^[0-9]{0,6}$/.test(this.value)\n  },\n\n  init() {\n    this.form = this.$refs.input.form\n    this.sync()\n    this.updateLayout()\n    this.submitListener = (event) => this.handleSubmit(event)\n    this.selectionListener = () => {\n      if (document.activeElement === this.$refs.input) this.sync()\n    }\n    this.pageShowListener = () => {\n      this.submitting = false\n      this.sync()\n    }\n    this.form?.addEventListener('submit', this.submitListener, true)\n    document.addEventListener('selectionchange', this.selectionListener)\n    window.addEventListener('pageshow', this.pageShowListener)\n    this.resizeObserver = new ResizeObserver(() => this.updateLayout())\n    this.resizeObserver.observe(this.$refs.boxes)\n    // Las extensiones pueden asignar value sin emitir eventos.\n    this.timer = window.setInterval(() => {\n      if (!this.composing) this.sync()\n    }, 200)\n    this.enhanced = true\n    this.$nextTick(() => {\n      this.$refs.input.focus()\n      this.sync()\n    })\n  },\n\n  destroy() {\n    window.clearInterval(this.timer)\n    window.clearTimeout(this.submissionTimer)\n    this.resizeObserver?.disconnect()\n    this.form?.removeEventListener('submit', this.submitListener, true)\n    document.removeEventListener('selectionchange', this.selectionListener)\n    window.removeEventListener('pageshow', this.pageShowListener)\n  },\n\n  updateLayout() {\n    const boxes = this.$refs.boxes\n    const gap = parseFloat(window.getComputedStyle(boxes).columnGap) || 0\n    const totalWidth = boxes.getBoundingClientRect().width\n    if (!totalWidth) return\n    const width = (totalWidth - gap * 5) / 6\n    // Alinea el texto nativo invisible con las casillas para conservar la selecci\u00F3n.\n    this.inputStyle = {\n      paddingLeft: `calc((${width}px - 1ch) / 2)`,\n      letterSpacing: `calc(${width + gap}px - 1ch)`,\n    }\n    this.$nextTick(() => this.sync())\n  },\n\n  sync() {\n    const input = this.$refs.input\n    if (!this.composing) this.normalize()\n    this.value = input.value\n    // El espaciado final puede desplazar el texto invisible y desalinear los clics.\n    if (this.segmented) input.scrollLeft = 0\n    this.selectionStart = input.selectionStart ?? 0\n    this.selectionEnd = input.selectionEnd ?? 0\n    this.focused = document.activeElement === input\n  },\n\n  showCaret(index) {\n    return (\n      this.focused &&\n      this.selectionStart === this.selectionEnd &&\n      index === Math.min(this.selectionStart, 5)\n    )\n  },\n\n  isSelected(index) {\n    return (\n      this.focused && index >= this.selectionStart && index < this.selectionEnd\n    )\n  },\n\n  normalize() {\n    const input = this.$refs.input\n    const raw = input.value\n    // Solo elimina separadores reconocibles; conserva entradas ambiguas como inv\u00E1lidas.\n    if (/^[0-9\\s-]*$/.test(raw)) {\n      const start = raw.slice(0, input.selectionStart).replace(/[\\s-]/g, '').length\n      const end = raw.slice(0, input.selectionEnd).replace(/[\\s-]/g, '').length\n      const normalized = raw.replace(/[\\s-]/g, '')\n      if (normalized !== raw) {\n        input.value = normalized\n        input.setSelectionRange(start, end)\n      }\n    }\n  },\n\n  handleInput(event) {\n    if (this.composing || event.isComposing) return\n    this.sync()\n    if (/^[0-9]{6}$/.test(this.$refs.input.value) && !this.submitting) {\n      this.form?.requestSubmit()\n    }\n  },\n\n  handlePaste(event) {\n    if (!event.clipboardData || this.composing) return\n    const pasted = event.clipboardData.getData('text')\n    if (!pasted) return\n    event.preventDefault()\n    const input = this.$refs.input\n    input.setRangeText(\n      pasted,\n      input.selectionStart,\n      input.selectionEnd,\n      'end',\n    )\n    input.dispatchEvent(new Event('input', { bubbles: true }))\n  },\n\n  handleCompositionEnd(event) {\n    this.composing = false\n    this.handleInput(event)\n  },\n\n  handleSubmit(event) {\n    this.sync()\n    if (this.submitting) {\n      event.preventDefault()\n      event.stopImmediatePropagation()\n      return\n    }\n    this.submitting = true\n    // Espera a todos los listeners: en eventos nativos hay microtareas entre ellos.\n    this.submissionTimer = window.setTimeout(() => {\n      if (event.defaultPrevented) this.submitting = false\n    }, 0)\n  },\n}))\n", "Alpine.data(\"InputDate\", (initial, labelId, hasErrors) => ({\n    // Common\n    initial: initial,\n    labelId: labelId,\n    value: initial,\n    hasFocus: false,\n    hasErrors: hasErrors,\n\n    // Specific\n    weeks: [],\n    selectedDate: null,\n    displayDate: new Date(),\n    showDatepicker: false,\n\n    init() {\n        this.fillMonth(this.displayDate)\n        this.refreshCalendar()\n\n        this.$watch('value', (newValue, oldValue) => {\n            this.refreshCalendar()\n            this.$dispatch(\"input\", newValue)\n        })\n    },\n\n    /**\n     * Refresca listado de d\u00EDas a pintar en base\n     * a la fecha seleccionada en el input\n     */\n    refreshCalendar() {\n        if (this.value) {\n            const d = new Date(`${this.value} 00:00`)\n            if (isFinite(d)) {\n                this.displayDate = d\n                this.selectedDate = d\n                this.fillMonth(this.displayDate)\n            }\n        }\n    },\n\n    /**\n     * Obtiene el n\u00FAmero de d\u00EDa de la semana a partir de una fecha\n     * @param {Date} date\n     * @returns\n     */\n    getDayOfTheWeek(date) {\n        const day = date.toLocaleString(\"es-ES\", { weekday: \"long\" })\n\n        return {\n            \"lunes\": 0,\n            \"martes\": 1,\n            \"mi\u00E9rcoles\": 2,\n            \"jueves\": 3,\n            \"viernes\": 4,\n            \"s\u00E1bado\": 5,\n            \"domingo\": 6,\n        }[day]\n    },\n\n    /**\n     * Devuelve el nombre del mes que se est\u00E1 visualizando en el calendario\n     * en el idioma seleccionado por el navegador\n     */\n    getMonthLabel() {\n        return this.displayDate.toLocaleDateString(navigator.language, { year:'numeric', month: 'long'});\n    },\n\n    /**\n     * Devuelve la lista de d\u00EDas abreviada a mostrar en el calendario\n     * seg\u00FAn el idioma del navegador\n     * @returns {Array.<string>}\n     */\n\n    getWeekdayNames() {\n        // Pone la fecha a un lunes espec\u00EDfico de una fecha concreta\n        // 1 de Enero de 2024 es lunes\n        const date = new Date(2024, 0, 1);\n        const options = { weekday: 'short' };\n        const dayNames = [];\n\n        for (let i = 1; i <= 7; i++) {\n            date.setDate(i);\n            dayNames.push(date.toLocaleDateString(navigator.language, options));\n        }\n\n        return dayNames;\n    },\n\n    /**\n     * Crea la estructura necesaria para pintar el calendario\n     * del mes indicado\n     * @param {Date} target\n     */\n    fillMonth(target) {\n        this.displayDate = target || new Date()  // today\n        const firstDate = new Date(\n            this.displayDate.getFullYear(),\n            this.displayDate.getMonth(),\n            1\n        );\n        const lastDate = new Date(\n            this.displayDate.getFullYear(),\n            this.displayDate.getMonth() + 1,\n            0\n        );\n\n        const emptyDaysBefore = this.getDayOfTheWeek(firstDate)\n        const emptyDaysAfter = 6 - this.getDayOfTheWeek(lastDate)\n\n        const monthDays = [firstDate]\n        let iteratorDate = new Date(firstDate)\n\n\n        while(iteratorDate < lastDate) {\n            iteratorDate.setDate(new Date(iteratorDate).getDate()+1)\n            monthDays.push(new Date(iteratorDate))\n        }\n\n        for(let i = 0;i<emptyDaysBefore;i++){\n            monthDays.unshift(null)\n        }\n\n        for(let i = 0;i<emptyDaysAfter;i++){\n            monthDays.push(null)\n        }\n\n        // Map para convertir cada d\u00EDa en diccionario\n        const days = monthDays.map( (date) => {\n            const label = date ? date.getDate() : ''\n            let selected = false\n\n            if (this.selectedDate && date && this.selectedDate.toISOString() == date.toISOString()) {\n                selected = true\n            }\n\n            return {\n                'date': date,\n                'label': label,\n                'selected': selected,\n            }\n        })\n\n        let weeks = []\n\n        while(days.length > 0) {\n            weeks.push(days.splice(0,7))\n        }\n\n        this.weeks = weeks\n\n    },\n\n    /**\n     * Bot\u00F3n mostrar mes anterior\n     */\n    previousMonth() {\n        const previous = new Date(this.displayDate.getFullYear(), this.displayDate.getMonth()-1)\n        this.fillMonth(previous)\n    },\n\n    /**\n     * Bot\u00F3n mostrar mes siguiente\n     */\n    nextMonth() {\n        const next = new Date(this.displayDate.getFullYear(), this.displayDate.getMonth()+1)\n        this.fillMonth(next)\n    },\n\n    /**\n     * Cambia el d\u00EDa seleccionado aumentando o disminuyendo el n\u00BA de d\u00EDas\n     * @param {int} dayChange\n     */\n    changeSelectedDay(dayChange) {\n        if (this.selectedDate) {\n            this.selectedDate.setDate(new Date(this.selectedDate).getDate() + dayChange)\n            this.dateSelected(this.selectedDate, true)\n        } else if (this.displayDate) {\n            this.displayDate.setDate(new Date(this.displayDate).getDate() + dayChange)\n            this.dateSelected(this.displayDate, true)\n        }\n    },\n\n    /**\n     * Se dispara cuando se selecciona una fecha desde el calendario\n     * cambia el valor seleccionado en el input, cierra y refresca el calendario\n     * @param {Date} date\n     */\n    dateSelected(date, preserveDatepicker = false) {\n        const year = date.getFullYear()\n\n        /**\n         * A\u00F1ade un cero delante pero lo retira a partir del 10\n         */\n        const month = ('0' + (date.getMonth()+1)).slice(-2)\n\n        /**\n         * A\u00F1ade un cero delante pero lo retira a partir del 10\n         */\n        const day = ('0' + date.getDate()).slice(-2)\n\n        this.value = `${year}-${month}-${day}`\n        this.selectedDate = date\n\n        if (!preserveDatepicker) {\n            this.showDatepicker = false\n        }\n\n        this.refreshCalendar()\n    },\n\n    /**\n     * Genera un test id \u00FAnico para los d\u00EDas del calendario del mes actual\n     * @param {int} weekIndex\n     * @param {int} dayIndex\n     */\n    getDayTestId(weekIndex, dayIndex) {\n        return `w${weekIndex+1}-d${dayIndex+1}`\n    }\n}));\n", "Alpine.data('InputDatePicker', (initial, field_id, url) => ({\n  // Common\n  hasFocus: false,\n  value: initial,\n  field_id: field_id,\n\n  // Specific\n  showDatepicker: false,\n\n  init() {},\n\n  syncCalendar() {\n    let params = {}\n    params['field_id'] = this.field_id\n    params['calendar_date'] = this.value\n    params['selected_date'] = this.value\n\n    htmx.ajax('GET', url, {\n      target: '#datepicker-calendar-' + this.field_id,\n      swap: 'innerHTML',\n      values: params,\n    })\n  },\n\n  daySelect(el) {\n    const datestr = el.dataset.date\n    this.value = datestr\n    this.syncCalendar()\n  },\n}))\n", "Alpine.data('InputMSP', (label, hasErrors, isDisabled) => ({\n    label: label,\n    hasErrors: hasErrors,\n    isDisabled: isDisabled,\n\n    changed() {\n        this.hasErrors = false;\n    }\n}))\n", "Alpine.data('InputSelectAdvanced', (payload) => ({\n    value: payload.value ?? '',\n    options: payload.options || [],\n    searchUrl: payload.searchUrl || '',\n    searchFieldName: payload.searchFieldName || '',\n    minSearchLength: payload.minSearchLength ?? 3,\n    maxResults: payload.maxResults ?? 10,\n    hasFocus: false,\n    showOptions: false,\n    displayValue: '',\n    q: '',\n    isLoading: false,\n    debounceTimer: null,\n    currentRequestController: null,\n\n    init() {\n        this.syncDisplayWithValue()\n    },\n\n    get isSearchReady() {\n        return this.q.trim().length >= this.minSearchLength\n    },\n\n    get filteredOptions() {\n        if (!this.isSearchReady) {\n            return []\n        }\n\n        return this.options.slice(0, this.maxResults)\n    },\n\n    get hasResults() {\n        return this.filteredOptions.length > 0\n    },\n\n    syncDisplayWithValue() {\n        const selectedOption = this.options.find((option) => {\n            return String(option.value) === String(this.value)\n        })\n\n        if (selectedOption) {\n            this.displayValue = selectedOption.label\n        }\n    },\n\n    resolveSearchUrl() {\n        const formElement = this.$el.closest('form')\n        const baseSearchUrl = this.searchUrl || formElement?.dataset?.hxPost || window.location.pathname\n\n        const url = new URL(baseSearchUrl, window.location.origin)\n        if (url.origin !== window.location.origin) {\n            return null\n        }\n\n        return url\n    },\n\n    normalizeOptions(options) {\n        if (!Array.isArray(options)) {\n            return []\n        }\n\n        return options\n            .filter((option) => {\n                return option\n                    && Object.prototype.hasOwnProperty.call(option, 'value')\n                    && Object.prototype.hasOwnProperty.call(option, 'label')\n            })\n            .map((option) => ({\n                value: option.value,\n                label: String(option.label),\n            }))\n    },\n\n    abortPendingRequest() {\n        if (this.currentRequestController) {\n            this.currentRequestController.abort()\n            this.currentRequestController = null\n        }\n    },\n\n    resetOptionsState() {\n        this.abortPendingRequest()\n        this.options = []\n        this.isLoading = false\n    },\n\n    async fetchOptions() {\n        if (!this.isSearchReady) {\n            this.resetOptionsState()\n            return\n        }\n\n        const url = this.resolveSearchUrl()\n        if (!url) {\n            this.resetOptionsState()\n            return\n        }\n\n        this.abortPendingRequest()\n        this.currentRequestController = new AbortController()\n        const controller = this.currentRequestController\n        this.isLoading = true\n\n        url.searchParams.set('q', this.q.trim())\n        if (this.searchFieldName) {\n            url.searchParams.set('field', this.searchFieldName)\n        }\n        url.searchParams.set('select_search', '1')\n\n        try {\n            const response = await fetch(url.toString(), {\n                method: 'GET',\n                headers: {\n                    'X-Requested-With': 'XMLHttpRequest',\n                    'Accept': 'application/json',\n                },\n                credentials: 'same-origin',\n                signal: controller.signal,\n            })\n\n            if (!response.ok) {\n                throw new Error('Unable to search options.')\n            }\n\n            const contentType = response.headers.get('content-type') || ''\n            if (!contentType.includes('application/json')) {\n                throw new Error('Advanced select search endpoint must return JSON.')\n            }\n\n            const data = await response.json()\n            this.options = this.normalizeOptions(data?.options)\n        } catch (error) {\n            if (error?.name !== 'AbortError') {\n                this.options = []\n            }\n        } finally {\n            if (this.currentRequestController === controller) {\n                this.isLoading = false\n                this.currentRequestController = null\n            }\n        }\n    },\n\n    queueSearch() {\n        if (this.debounceTimer) {\n            clearTimeout(this.debounceTimer)\n        }\n\n        if (!this.isSearchReady) {\n            this.resetOptionsState()\n            return\n        }\n\n        this.debounceTimer = setTimeout(() => {\n            this.fetchOptions()\n        }, 250)\n    },\n\n    openOptions() {\n        if (this.isDisabled) {\n            return\n        }\n\n        this.showOptions = true\n        this.q = ''\n        this.isLoading = false\n        this.$nextTick(() => {\n            if (this.$refs.flyoutSearch) {\n                this.$refs.flyoutSearch.focus()\n            }\n        })\n    },\n\n    selectOption(selectedOption) {\n        this.value = selectedOption.value\n        this.displayValue = selectedOption.label\n        this.q = ''\n        this.showOptions = false\n        this.$dispatch('input', this.value)\n        this.$dispatch('change')\n    },\n\n    // Triggers\n    mainTriggers: {\n        ['@mousedown.outside']() {\n            this.showOptions = false\n            this.abortPendingRequest()\n        },\n    },\n\n    searchTriggers: {\n        ['x-model']: 'displayValue',\n        ['@click']() {\n            this.openOptions()\n        },\n        ['@focus']() {\n            this.hasFocus = true\n            this.openOptions()\n        },\n        ['@focusout']() {\n            this.hasFocus = false\n        },\n    },\n\n    flyoutSearchTriggers: {\n        ['x-model']: 'q',\n        ['@input']() {\n            this.value = ''\n            this.queueSearch()\n        },\n        ['@keydown.escape.prevent.stop']() {\n            this.showOptions = false\n            this.abortPendingRequest()\n        },\n    },\n\n}))\n", "Alpine.data(\"InputNumber\", (initial, labelId, hasErrors, attrs) => ({\n    initial: initial,\n    labelId: labelId,\n    value: initial,\n    hasFocus: false,\n    hasErrors: hasErrors,\n    attrs: attrs,\n\n    stepUp() {\n        if (this.$refs.inputNumber.disabled) {\n            return;\n        }\n\n        this.hasFocus = true\n        this.$refs.inputNumber.stepUp();\n        this.$dispatch(\"input\", this.value)\n    },\n\n    hasStepUp() {\n        return this.attrs.max == '' || (!Boolean(this.value) || (this.value < parseInt(this.attrs.max)))\n    },\n\n    stepDown() {\n        if (this.$refs.inputNumber.disabled) {\n            return\n        }\n        this.hasFocus = true\n        this.$refs.inputNumber.stepDown();\n        this.$dispatch(\"input\", this.value)\n    },\n\n    hasStepDown() {\n        return this.attrs.min == '' || this.value > parseInt(this.attrs.min)\n    },\n}));\n", "  Alpine.data('InputSlider', (initial, dbInitial, labelId, choicesLength, hasErrors, isDisabled, choicesMap) => ({\n      initial: initial,\n      labelId: labelId,\n      value: initial,\n      choicesLength: choicesLength,\n      hasErrors: hasErrors,\n      isDisabled: isDisabled,\n      dragging: false,\n      /**\n       * Used to find the value of a selected index\n       * key: index\n       * value: is the one we store in db\n       */\n      choicesMap: choicesMap,\n      selectedValue: dbInitial,\n\n      init() {\n        this.$watch('value', () => {\n          this.updateSelectedValue()\n        })\n      },\n\n      getTrackPercent() {\n        const itemPercent = 100 / (this.choicesLength-1)\n        return (this.value-1) * itemPercent\n      },\n\n      getThickTrackWidthStyle() {\n        const percent = this.getTrackPercent()\n        return `width: ${percent}%`\n      },\n\n      labelClicked(inputId, newValue) {\n          if (this.isDisabled) {\n              return\n          }\n\n          this.value = newValue\n          const el = document.getElementById(inputId)\n          el.value = newValue\n          el.dispatchEvent(new Event('change', { 'bubbles': true }));\n          this.hasErrors=false;\n          this.$refs[`errors_${labelId}`].innerHTML = '';\n      },\n\n      updateSelectedValue() {\n        this.selectedValue = this.choicesMap[this.value]\n      }\n    }))\n", "Alpine.store('MainModal', {\n  visible: false,\n  title: '',\n  description: '',\n  help: '',\n  originalEvent: null,\n\n  open(title, description, help, originalEvent) {\n    this.title = title\n    this.description = description\n    this.help = help\n    this.originalEvent = originalEvent\n    this.visible = true\n  },\n\n  confirm() {\n    if (this.originalEvent) {\n      this.originalEvent.detail.issueRequest()\n    }\n    this.dismiss()\n  },\n\n  dismiss() {\n    if (!this.visible) {\n      return\n    }\n    this.visible = false\n    this.title = ''\n    this.description = ''\n    this.help = ''\n    this.originalEvent = null\n  },\n})\n", "Alpine.store('menuHandler', {\n    resetContent(url) {\n        htmx.ajax('GET', url, '#content')\n    },\n})\n", "// @deprecated\nAlpine.data('PasswordField', (initialValue) => ({\n    value: initialValue,\n    show: false,\n\n    floatingLabel: {\n        ['x-bind:class']() {\n            if (this.value) {\n                return 'not-empty'\n            }\n            return 'empty'\n        }\n    }\n}));\n", "Alpine.data(\"TreeView\", (tree) => ({\n    tree: tree,\n    current: tree,\n    history: [],\n    selected: null,\n\n    select(treeId) {\n        this.selected = treeId\n        this.$dispatch(\"node-selected\", {\"node\": treeId})\n    },\n\n    cleanSelection() {\n        this.selected = null\n        this.$dispatch(\"node-selected\", {\"node\": null})\n        this.$dispatch(\"node-cleared\", {\"node\": null})\n    },\n\n    navigateHome() {\n        if (this.history.length > 0 && tree) {\n            this.current = tree\n            this.history = []\n            this.cleanSelection()\n        }\n    },\n\n    navigate(node) {\n        if(!node.children) {\n            return\n        }\n\n        this.history.push(this.current)\n        this.current = node\n        this.cleanSelection()\n    },\n\n    navigateBack() {\n        if (this.history.length) {\n            this.current = this.history.pop()\n            this.cleanSelection()\n        }\n    },\n}))\n", "/**\n * Formulario gen\u00E9rico de actualizar recursos.\n */\nAlpine.data('FormUpdateResource', (name_field, showExtension = false) => ({\n  init() {\n    const resourceUnitsValue = JSON.parse(\n      document.getElementById('resourceUnitsValue').textContent,\n    )\n    const unitPriceValue = JSON.parse(\n      document.getElementById('unitPriceValue').textContent,\n    )\n    this.name_field = name_field\n    this.showExtension = showExtension\n    this.base_resource_units = resourceUnitsValue\n    this.resource_units = resourceUnitsValue\n    this.unit_price = unitPriceValue\n    this.resource_unit_quantity = null\n    this.current_total_price = null\n\n    if (this.showExtension) {\n      const currentTotalPriceEl = document.getElementById(\n        'currentTotalPriceValue',\n      )\n\n      this.resource_unit_quantity = JSON.parse(\n        document.getElementById('resourceUnitQuantity').textContent,\n      )\n      this.current_total_price = currentTotalPriceEl\n        ? JSON.parse(currentTotalPriceEl.textContent)\n        : null\n    }\n    this.total_price = 0\n    this.extension_label = '-'\n    this.calculateTotalPrice()\n    this.isFormValid = false\n    this.formErrorMessage = ''\n    this.hasChanges = false\n  },\n  calculateTotalPrice() {\n    if (!this.resource_units || !this.unit_price) {\n      this.total_price = '-' // To display when it is an empty string\n      this.extension_label = '-'\n      return\n    }\n\n    this.total_price = Number.parseFloat(\n      Number.parseFloat(this.resource_units).toFixed(4) *\n        Number.parseFloat(this.unit_price).toFixed(4),\n    ).toFixed(2)\n\n    if (!this.showExtension || this.current_total_price === null) {\n      return\n    }\n\n    const unitsDifference = (\n      Number.parseFloat(this.resource_units) -\n      Number.parseFloat(this.base_resource_units)\n    )\n    const priceDifference = (\n      Number.parseFloat(this.total_price) -\n      Number.parseFloat(this.current_total_price)\n    )\n    const unitsSign = unitsDifference > 0 ? '+' : ''\n    const priceSign = priceDifference > 0 ? '+' : ''\n\n    this.extension_label = `${unitsSign}${unitsDifference} ${this.resource_unit_quantity} \u2192 ${priceSign}${priceDifference.toFixed(2)} \u20AC`\n  },\n  bindings: {\n    ['@input.debounce.100ms']($event) {\n      let field = $event.target\n      this.hasChanges = true\n\n      if (field.getAttribute('name') == this.name_field) {\n        this.resource_units = field.value\n        this.calculateTotalPrice()\n    }\n    },\n    [\"@click\"]($event) {\n      this.hasChanges = true\n      this.resource_units = document.getElementById(`id_${this.name_field}`).value\n      this.calculateTotalPrice()\n    }\n  },\n  validateData(input) {\n    button = document.getElementById('btn-update-resource')\n\n    this.isFormValid = input.checkValidity()\n    this.formErrorMessage = input.validationMessage\n\n    if (!this.isFormValid) {\n      button.classList.add('disabled')\n      button.classList.add('cursor-none')\n    } else {\n      button.classList.remove('disabled')\n      button.classList.remove('cursor-none')\n    }\n  },\n}))\n", "Alpine.store('Modal', {\n  is_opened: false,\n\n  open() {\n    this.is_opened = true\n    document.getElementById('container-modal').open = true\n  },\n\n  close() {\n    this.is_opened = false\n    document.getElementById('container-modal').open = false\n  },\n\n  is_open() {\n    return document.getElementById('container-modal')?.open\n  }\n})\n", "Alpine.data('ServiceSelector', (labels) => ({\n  open: false,\n  query: '',\n\n  matches(label) {\n    const normalize = (text) => text.normalize('NFD').replace(/[\\u0300-\\u036f]/g, '').toLowerCase()\n    return normalize(label).includes(normalize(this.query.trim()))\n  },\n\n  get matchingCount() {\n    return labels.filter((label) => this.matches(label)).length\n  },\n\n  show(focusSearch = false) {\n    this.open = true\n    this.query = ''\n    if (focusSearch) {\n      this.$nextTick(() => this.$refs.search.focus())\n    }\n  },\n\n  toggle(event) {\n    if (!this.open) {\n      this.show(event.detail === 0)\n      return\n    }\n    this.open = !this.open\n  },\n\n  close() {\n    this.open = false\n    this.$nextTick(() => this.$refs.trigger.focus())\n  },\n}))\n", "Alpine.data('SalesQuoteLineForm', (url) => ({\n  hasChanges: false,\n  id_client_plan,\n  id_partner_price,\n  id_resource,\n  id_quantity,\n  id_discount,\n  id_resource_price,\n  id_line_raw_price,\n  id_line_discount_amount,\n  id_line_final_price,\n  id_line_margin,\n  id_line_commission_percentage,\n  id_line_commission_amount,\n  id_sales_quote_group,\n  fields: {},\n  discount_amount: 0,\n  final_price: 0,\n\n  init() {\n    this.fields.client_plan = this.id_client_plan\n    this.fields.partner_price = this.id_partner_price\n    this.fields.resource = this.id_resource\n    this.fields.quantity = this.id_quantity\n    this.fields.discount = this.id_discount\n    this.fields.resource_price = this.id_resource_price\n    this.fields.line_raw_price = this.id_line_raw_price\n    this.fields.line_discount_amount = this.id_line_discount_amount\n    this.fields.line_final_price = this.id_line_final_price\n    this.fields.line_margin = this.id_line_margin\n    this.fields.line_commission_percentage = this.id_line_commission_percentage\n    this.fields.line_commission_amount = this.id_line_commission_amount\n    this.fields.sales_quote_group = this.id_sales_quote_group\n    this.$nextTick(() => {\n      this.updatePricing()\n    })\n  },\n\n  bindings: {\n    ['@input.debounce']($event) {\n      this.hasChanges = true;\n      this.formChanged($event)\n    },\n  },\n\n  formChanged($event) {\n    const field = $event.target\n    const name = field.getAttribute('data-name')\n    const id = field.id\n\n    if (name == 'client_plan' || name == 'resource') {\n      this.refreshForm()\n    }\n\n    if (id == 'id_quantity' || id == 'id_discount') {\n      this.updatePricing()\n    }\n  },\n\n  refreshForm() {\n    const fields = [\n      'client_plan',\n      'resource',\n      'quantity',\n      'discount',\n      'sales_quote_group',\n    ]\n\n    let params = {}\n    fields.forEach((key) => {\n      params[key] = this.fields[key].value\n    })\n    htmx.ajax('GET', url, {\n      target: '#rightMenuContent',\n      swap: 'innerHTML',\n      values: params,\n    })\n  },\n\n  updatePricing() {\n    const rp = Number.parseFloat(\n      this.fields.quantity.value * this.fields.resource_price.value,\n    )\n    const da = Number.parseFloat(\n      rp * (this.fields.discount.value / 100),\n    )\n\n    const linePrice = Number.parseFloat(rp - da)\n\n    // margin calculate\n    const partnerPriceTotal = Number.parseFloat(\n      this.fields.quantity.value * this.fields.partner_price.value,\n    )\n\n    let margin = 0\n\n    this.fields.line_raw_price.value = rp.toFixed(2)\n    this.fields.line_discount_amount.value = da.toFixed(2)\n\n    let commissionAmount = 0\n    if (this.fields.line_commission_percentage) {\n      const commissionPct = Number.parseFloat(this.fields.line_commission_percentage.value) || 0\n      commissionAmount = (linePrice || 0) * commissionPct / 100\n      this.fields.line_commission_amount.value = commissionAmount.toFixed(2)\n    }\n\n    if (linePrice) {\n      const netRevenue = linePrice - commissionAmount\n      margin = Number.parseFloat(\n        100 * ((netRevenue - partnerPriceTotal) / netRevenue),\n      )\n    }\n\n    this.fields.line_margin.value = margin.toFixed(2)\n    this.fields.line_final_price.value = Number.parseFloat(linePrice).toFixed(2)\n  },\n}))\n", "Alpine.data('AddDiscountForm', (url) => ({\n    hasChanges: false,\n\n    init() {\n        this.url = url\n    },\n\n    bindings: {\n      ['@input']($event) {\n        this.hasChanges = true\n      },\n      ['@submit.debounce']($event) {\n          htmx.trigger(\"body\", \"refresh_content\", {});\n      },\n    },\n}))\n", "Alpine.data('CreateAdditionalDisk', (url, initialBackup) => ({\n    id_resource,\n    id_units,\n    unitPrice: 0,\n    totalPrice: 0,\n    showFormAddDisk: false,\n\n    init() {\n      this.url = url\n      this.newDiskBackup = JSON.parse(document.getElementById(\"backupInitialValue\").textContent)\n      this.changeUnitPrice()\n    },\n    changeUnitPrice(){\n        this.unitPrice = JSON.parse(document.getElementById(\"diskUnitPrice\").textContent)\n        this.backupUnitPrice = JSON.parse(document.getElementById(\"backupUnitPrice\").textContent)\n    },\n    refreshTotalPrice() {\n        let currentTotalPrice = Number.parseFloat(this.unitPrice * this.id_units).toFixed(2)\n\n        if (this.newDiskBackup == \"hypervisor\") {\n          let backupTotalPrice = Number.parseFloat(this.backupUnitPrice * this.id_units).toFixed(2)\n          currentTotalPrice = (+currentTotalPrice + +backupTotalPrice)\n        }\n\n        this.totalPrice = (isNaN(currentTotalPrice)) ? \"---\" : Number.parseFloat(currentTotalPrice).toFixed(2)\n    },\n    refreshForm(sourceElement, targetElement=\"#rightMenuContent\") {\n      let params = {}\n      params[\"resource\"] = this.id_resource\n\n      htmx.ajax('GET', this.url, {\n        source: sourceElement,\n        target: targetElement,\n        swap: 'outerHTML',\n        values: params,\n      })\n    },\n}))\n", "Alpine.data('PartnerEditClientUnitPrice', () => ({\n    hasChanges: false,\n    id_partner_price,\n    id_amount,\n    id_margin,\n    id_margin_percentage,\n    id_markup_percentage,\n\n    init() {\n        this.field_cost = this.id_partner_price\n        this.field_amount = this.id_amount\n        this.field_margin = this.id_margin\n        this.field_margin_percentage = this.id_margin_percentage\n        this.field_markup_percentage = this.id_markup_percentage\n\n        // Wait until Alpine is fully loaded and ready to\n        // perform initial margin and percentage update\n        this.$nextTick(() => {\n            this.updateMargin()\n            this.updateMarginPercentage()\n        })\n    },\n\n    bindings: {\n        ['@input']($event) {\n            let field = $event.target\n            this.hasChanges = true\n\n            if (field.id == \"id_amount\") {\n                this.updateMargin()\n                this.updateMarginPercentage()\n                this.updateMarkupPercentage()\n            }\n\n            if (field.id == \"id_margin\") {\n                this.updateAmountFromMargin()\n                this.updateMarginPercentage()\n            }\n\n            if (field.id == \"id_margin_percentage\") {\n                this.updateAmountFromMarginPercentage()\n                this.updateMargin()\n                this.updateMarkupPercentage()\n            }\n        },\n        ['x-on:htmx:confirm']($event) {},\n    },\n\n    updateMargin(){\n        this.field_margin.value = Number.parseFloat(this.field_amount.value - this.field_cost.value).toFixed(5)\n    },\n\n    updateMarginPercentage() {\n      // 100 * (Price - Cost) / Price\n      this.field_margin_percentage.value = Number.parseFloat(\n        (100 * (Number(this.field_amount.value) - Number(this.field_cost.value))) / Number(this.field_amount.value)\n      ).toFixed(2)\n    },\n\n    updateMarkupPercentage() {\n      // 100 * (Price - Cost) / Cost\n      this.field_markup_percentage.value = Number.parseFloat(\n        (100 * (Number(this.field_amount.value) - Number(this.field_cost.value))) / Number(this.field_cost.value)\n      ).toFixed(2)\n    },\n\n    updateAmountFromMargin() {\n        this.field_amount.value = Number.parseFloat(\n            Number(this.field_cost.value) + Number(this.field_margin.value),\n        ).toFixed(5)\n    },\n\n    updateAmountFromMarginPercentage() {\n      this.field_amount.value = Number.parseFloat(\n        Number(this.field_cost.value) / (1 - Number(this.field_margin_percentage.value) / 100),\n      ).toFixed(5)\n    }\n}))\n", "\nAlpine.data('UpdatePricesCategoryForm', (msgModal) => ({\n    hasChanges: false,\n\n    bindings: {\n      ['@input']($event) {\n        this.hasChanges = true\n      },\n      ['x-on:htmx:confirm']($event) {\n         if ($event.detail.verb == \"get\") {\n           return $event.detail.issueRequest();\n         }\n\n         $event.preventDefault()\n         Alpine.store('MainModal').open(msgModal.title, msgModal.content, msgModal.subtitle, $event)\n      },\n    },\n  }))\n", "Alpine.data('UpdateProvisioningVmStep2', (el, cpuId, ramId, url) => ({\n    el,\n    fields: {},\n    id_category,\n    coreUnits: 0,\n    ramUnits: 0,\n    totalPriceCore: 0,\n    totalPriceRam: 0,\n\n    init() {\n      this.url = url\n      this.fields.core = this.el.querySelector(`#${cpuId}_selected_value`)\n      this.fields.ram = this.el.querySelector(`#${ramId}_selected_value`)\n      this.unitPriceCore = JSON.parse(document.getElementById(\"unitPriceCore\").textContent)\n      this.unitPriceRam = JSON.parse(document.getElementById(\"unitPriceRam\").textContent)\n\n      this.$nextTick(() => {\n        this.refreshData()\n      })\n    },\n    refreshData(){\n        this.coreUnits = this.fields.core.value\n        this.ramUnits = this.fields.ram.value\n        this.totalPriceCore = this.refreshTotalPriceCore()\n        this.totalPriceRam = this.refreshTotalPriceRam()\n        htmx.trigger(\"body\", \"refresh_summary_provisioning_vm\")\n    },\n    refreshTotalPriceCore(){\n       let coreUnitPrice = this.unitPriceCore ? Number.parseFloat(this.unitPriceCore) : 0\n       return Number.parseFloat(this.coreUnits * coreUnitPrice).toFixed(2)\n    },\n    refreshTotalPriceRam(){\n        let ramUnitPrice = this.unitPriceRam ? Number.parseFloat(this.unitPriceRam) : 0\n        return Number.parseFloat(this.ramUnits * ramUnitPrice).toFixed(2)\n     },\n    refreshForm(sourceElement, targetElement=\"#rightMenuContent\") {\n      let params = {}\n      params[\"category\"] = this.id_category\n\n      htmx.ajax('GET', this.url, {\n        source: sourceElement,\n        target: targetElement,\n        swap: 'innerHTML',\n        values: params,\n      })\n    },\n}))\n", "Alpine.data('UpdateProvisioningVmStep3', () => ({\n    init() {\n      this.unitPrice = JSON.parse(document.getElementById('unit-price-ssd').textContent)\n      this.unitPriceBackup = JSON.parse(document.getElementById('unit-price-backup').textContent)\n      this.units = JSON.parse(document.getElementById('system-disk-size').textContent)\n      this.backup = JSON.parse(document.getElementById('system-disk-backup').textContent)\n      this.totalPrice = 0\n      this.refreshTotalPrice()\n    },\n    refreshBackup(){\n      this.refreshTotalPrice()\n    },\n    refreshTotalPrice(){\n       let totalPriceBackup = this.unitPriceBackup * this.units\n       let totalPriceDisk = this.unitPrice * this.units\n       this.totalPrice =  (this.backup == \"hypervisor\" ) ? Number.parseFloat(totalPriceDisk + totalPriceBackup).toFixed(2) : Number.parseFloat(totalPriceDisk).toFixed(2)\n    },\n}))\n", "Alpine.data('UpdateProvisioningVmStep4', (typeInterface, type_lan,  url) => ({\n    id_bandwidth_0_selected_value: 0,\n    units: 0,\n    totalPriceBandwidth: 0,\n\n    init() {\n      this.url = url\n      this.typeInterface = typeInterface\n      this.typeLan = type_lan\n      current_bandwidth = document.getElementById(\"current-bandwidth\")\n      this.id_bandwidth_0_selected_value = (current_bandwidth) ? JSON.parse(current_bandwidth.textContent) : null\n      let unitPriceBandwidth = document.getElementById(\"unit-price-bandwidth\")\n      this.unitPriceBandwidth = (unitPriceBandwidth) ? JSON.parse(unitPriceBandwidth.textContent) : null\n\n      this.$nextTick(() => {\n        this.refreshTotalPriceBandwidth()\n      })\n    },\n    refreshTotalPriceBandwidth(){\n       if (!this.unitPriceBandwidth) {\n        this.totalPriceBandwidth = \"---\"\n        return;\n       }\n       let unitPrice = this.unitPriceBandwidth ? Number.parseFloat(this.unitPriceBandwidth) : 0\n       let units = this.id_bandwidth_0_selected_value\n       // If bandwidth is 300 MBs is free\n       let extraBandwidth = (units > 0) ? (units - 300) : 0\n       this.totalPriceBandwidth = Number.parseFloat((extraBandwidth / 100) * unitPrice).toFixed(2)\n       htmx.trigger(\"body\", \"refresh_summary_provisioning_vm\")\n    },\n}))\n", "\nAlpine.data('UpdateProvisioningVMForm', (msgModal) => ({\n    hasChanges: true,\n    LAST_STEP: 6,\n    currentStep,\n\n    init(){\n        this.currentStep = JSON.parse(\n            document.getElementById('currentStep').textContent,\n        )\n        this.lastStep = 6\n    },\n\n    bindings: {\n      ['@input']($event) {\n        this.hasChanges = true\n      },\n      ['x-on:htmx:confirm']($event) {\n        if(this.currentStep != this.LAST_STEP){\n            return;\n        }\n\n        if ($event.detail.verb == \"get\"){\n          // Si es el bot\u00F3n descartar no muestra modal de confirmaci\u00F3n\n          return;\n        }\n\n        $event.preventDefault()\n\n         Alpine.store('MainModal').open(msgModal.title, msgModal.content, msgModal.subtitle, $event)\n      },\n    },\n  }))\n", "Alpine.data('AddDiskVm', (url, unit_price, backup_unit_price) => ({\n    totalPrice: \"-\",\n    hasChanges: false,\n    id_storage_class: null,\n    id_backup: null,\n    id_disk_size: 0,\n\n    init() {\n        this.url = url\n        this.unitPrice = Number.parseFloat(unit_price).toFixed(5)\n        this.backupUnitPrice = Number.parseFloat(backup_unit_price).toFixed(5)\n        this.refreshTotalPrice()\n    },\n    bindings: {\n      ['@input.debounce.100ms']($event) {\n        let field = $event.target\n        this.hasChanges = true\n\n        if (field.getAttribute('data-name') == \"storage_class\") {\n            this.refreshForm()\n            this.refreshTotalPrice()\n        }\n\n        this.refreshTotalPrice()\n      },\n      ['x-on:htmx:confirm']($event) {},\n    },\n    refreshTotalPrice() {\n        let currentTotalPrice = Number.parseFloat(this.unitPrice * this.id_disk_size).toFixed(2)\n\n        if (this.id_backup) {\n          let backupTotalPrice = Number.parseFloat(this.backupUnitPrice * this.id_disk_size).toFixed(2)\n          currentTotalPrice = (+currentTotalPrice + +backupTotalPrice)\n        }\n\n        this.totalPrice = (isNaN(currentTotalPrice)) ? \"---\" : Number.parseFloat(currentTotalPrice).toFixed(2)\n    },\n    refreshForm() {\n        let params = {}\n        params[\"disk_tag\"] = this.id_storage_class\n        params[\"disk_size\"] = this.id_disk_size\n\n        htmx.ajax('GET', this.url, {\n          target: \"#rightMenuContent\",\n          swap: 'innerHTML',\n          values: params,\n        })\n    },\n}))\n", "Alpine.data('AddGpuVm', (url) => ({\n  hasChanges: false,\n  id_gpu_model: null,\n\n  init() {\n    this.url = url\n  },\n\n  bindings: {\n    ['@input.debounce.100ms']($event) {\n      const field = $event.target\n      this.hasChanges = true\n\n      if (field.getAttribute('data-name') !== 'gpu_model') {\n        return\n      }\n\n      this.refreshForm(this.id_gpu_model)\n    },\n    ['x-on:htmx:confirm']($event) {},\n  },\n\n  refreshForm(selectedGpuModel) {\n    const params = {\n      gpu_model: selectedGpuModel ?? '',\n    }\n\n    htmx.ajax('GET', this.url, {\n      target: '#rightMenuContent',\n      swap: 'innerHTML',\n      values: params,\n    })\n  },\n}))\n", "Alpine.data('FormUpdateNextStateDisk', () => ({\n  init() {\n    const resourceUnitsValue = JSON.parse(\n      document.getElementById('resourceUnitsValue').textContent,\n    )\n    const unitPriceValue = JSON.parse(\n      document.getElementById('unitPriceValue').textContent,\n    )\n    const resourceUnitQuantity = JSON.parse(\n      document.getElementById(\"resourceUnitQuantity\").textContent\n    )\n\n    this.base_resource_units = resourceUnitsValue\n    this.resourceUnitQuantity = resourceUnitQuantity\n    this.unit_price = unitPriceValue\n    this.resource_units = 1\n    this.total_price = 0\n    this.nextStateTotalPrice = '-'\n    this.isFormValid = true\n    this.formErrorMessage = ''\n\n    if (resourceUnitQuantity == \"TB\"){\n      this.base_resource_units = this.convertTBtoGB(this.base_resource_units)\n    }\n  },\n  calculateTotalPrice() {\n    if (!this.resource_units || !this.unit_price) {\n      this.total_price = '-' // To display when it is an empty string\n      return\n    }\n\n    this.total_price = Number.parseFloat(\n      Number.parseFloat(this.resource_units).toFixed(4) *\n        Number.parseFloat(this.unit_price).toFixed(4),\n    ).toFixed(2)\n  },\n  calculateNextStateTotalPrice() {\n    if (!this.obtainTotalGB() || !this.unit_price) {\n      this.nextStateTotalPrice = '-' // To display when it is an empty string\n    }\n\n    this.nextStateTotalPrice = Number.parseFloat(\n      Number.parseFloat(this.obtainTotalGB()).toFixed(4) *\n        Number.parseFloat(this.unit_price).toFixed(4),\n    ).toFixed(2)\n  },\n  obtainTotalGB(){\n    return Number(this.base_resource_units) + Number(this.resource_units)\n  },\n  calculateNextState() {\n    return this.formatGbOrTB(this.obtainTotalGB())\n  },\n  obtainLabelUnitNextState(){\n    if (this.obtainTotalGB() >= 1024){\n      return \"TB\"\n    }\n\n      return \"GB\"\n  },\n  formatGbOrTB(value){\n    if (value >= 1024){\n      value_in_tb = value / 1024\n      return Number.parseFloat(value_in_tb).toFixed(2)\n    }\n\n    return value\n  },\n  convertTBtoGB(tb) {\n    let gb = tb * 1024;\n    return gb;\n  },\n  validateData(input) {\n    button = document.getElementById('btn-update-resource')\n\n    this.isFormValid = input.checkValidity()\n    this.formErrorMessage = input.validationMessage\n\n    if (!this.isFormValid) {\n      button.classList.add('disabled')\n      button.classList.add('cursor-none')\n    } else {\n      button.classList.remove('disabled')\n      button.classList.remove('cursor-none')\n    }\n  },\n}))\n", "Alpine.data('FormUpdateDiskResource', (name_field) => ({\n    init() {\n      const resourceUnitsValue = JSON.parse(\n        document.getElementById('resourceUnitsValue').textContent,\n      )\n      const unitPriceValue = JSON.parse(\n        document.getElementById('unitPriceValue').textContent,\n      )\n    const resourceUnitQuantity = JSON.parse(\n        document.getElementById(\"resourceUnitQuantity\").textContent\n      )\n\n      const diskTotalPriceEl = document.getElementById('diskTotalPriceValue')\n      const diskTotalPriceValue = diskTotalPriceEl\n        ? JSON.parse(diskTotalPriceEl.textContent)\n        : null\n\n      this.name_field = name_field\n      this.base_resource_units = resourceUnitsValue\n      this.resource_units = resourceUnitsValue\n      this.resourceUnitQuantity = resourceUnitQuantity\n      this.unit_price = unitPriceValue\n      this.base_disk_total_price = diskTotalPriceValue\n      this.total_price = '-'\n      this.new_total_price = '-'\n      this.extension_label = '-'\n      this.isFormValid = false\n      this.formErrorMessage = ''\n      this.hasChanges = false\n    },\n    calculateTotalPrice() {\n      if (!this.resource_units || !this.unit_price) {\n        this.total_price = '-' // To display when it is an empty string\n        this.new_total_price = '-'\n        this.extension_label = '-'\n        return\n      }\n\n      this.total_price = Number.parseFloat(\n        Number.parseFloat(this.resource_units).toFixed(4) *\n          Number.parseFloat(this.unit_price).toFixed(4),\n      ).toFixed(2)\n\n      if (this.base_disk_total_price !== null) {\n        this.new_total_price = Number.parseFloat(\n          Number.parseFloat(this.base_disk_total_price) +\n            Number.parseFloat(this.total_price),\n        ).toFixed(2)\n      } else {\n        this.new_total_price = this.total_price\n      }\n\n      this.extension_label = `+${this.resource_units} ${this.resourceUnitQuantity} \u2192 +${this.total_price} \u20AC`\n    },\n    bindings: {\n      ['@input.debounce.100ms']($event) {\n        let field = $event.target\n        this.hasChanges = true\n\n        if (field.getAttribute('name') == this.name_field) {\n          this.resource_units = field.value\n          this.validateData(field)\n\n          if (!this.isFormValid){return;}\n\n          this.calculateTotalPrice()\n      }\n      },\n      [\"@click\"]($event) {\n        this.hasChanges = true\n        this.resource_units = document.getElementById(`id_${this.name_field}`).value\n        this.calculateTotalPrice()\n      }\n    },\n    validateData(input) {\n      button = document.getElementById('btn-update-resource')\n\n      this.isFormValid = input.checkValidity()\n      this.formErrorMessage = input.validationMessage\n\n      if (!this.isFormValid) {\n        button.classList.add('disabled')\n        button.classList.add('cursor-none')\n      } else {\n        button.classList.remove('disabled')\n        button.classList.remove('cursor-none')\n      }\n    },\n  }))\n", "Alpine.data(\"VmUpdatePublicNetworkForm\", (unit_price) => ({\n    hasChanges: false,\n    display_help_text: false,\n    id_rate_0: null,\n    id_linkdown: null,\n    network_total_price: \"---\",\n    initial_total_price: \"---\",\n    unit_price: unit_price,\n\n    init() {\n        this.recalculatePrice()\n        this.initial_total_price = this.network_total_price\n    },\n    recalculatePrice() {\n        const value = document.getElementById(\"id_rate_0\").value\n        this.network_total_price = Number.parseFloat((value - 1) * this.unit_price).toFixed(2)\n    },\n    bindings:{\n        ['@input']($event) {\n            this.hasChanges = true\n        },\n        ['@change']($event) {\n            this.hasChanges = true\n\n            if ($event.target.id == \"id_rate_0\") {\n                this.recalculatePrice()\n            }\n            if ($event.target.id == \"id_ip\"){\n                this.display_help_text = Boolean($event.target.value)\n            }\n        },\n    }\n}))\n", "/**\n* Default JS for sidebar layout\n* If making a custom one use at least the following code\n* as the skeleton for the new form or it won't work\n*/\nAlpine.data('VmUpdateStatusForm', () => ({\n hasChanges: false,\n action: \"\",\n\n bindings: {\n   ['@input']($event) {\n     this.hasChanges = true\n   },\n   ['x-on:htmx:confirm']($event) {\n     // By default we do not prevent $event\n     // This method may be used to display a confirm dialog before\n     // submitting the form\n   },\n },\n}))\n", "Alpine.data('WholesalerClonePartnerPlanForm', (url) => ({\n    hasChanges: false,\n    id_partner,\n    id_family,\n    id_plan,\n\n    init(){\n        this.url = url;\n    },\n\n    bindings: {\n        ['@input.debounce.100ms']($event) {\n            this.hasChanges = true;\n            if ([\"partner\", \"family\"].includes($event.target.getAttribute(\"data-name\"))) {\n                this.refreshForm()\n            }\n        },\n    },\n    refreshForm() {\n        const fields = ['partner', 'family', 'plan']\n        let params = {}\n\n        fields.forEach((key) => {\n          key_value = `id_${key}`\n          params[key] = this[key_value]\n        })\n\n        htmx.ajax('GET', this.url, {\n            target: '#rightMenuContent',\n            swap: 'innerHTML',\n            values: params,\n        })\n    },\n}))\n", "Alpine.data('WholesalerEditPartnerUnitPrice', () => ({\n    hasChanges: false,\n    id_wholesale_price,\n    id_partner_price,\n    id_margin,\n    id_margin_percentage,\n    id_markup_percentage,\n\n    init() {\n        this.field_cost = this.id_wholesale_price\n        this.field_amount = this.id_partner_price\n        this.field_margin = this.id_margin\n        this.field_margin_percentage = this.id_margin_percentage\n        this.field_markup_percentage = this.id_markup_percentage\n\n        // Wait until Alpine is fully loaded and ready to\n        // perform initial margin and percentage update\n        this.$nextTick(() => {\n            this.updateMargin()\n            this.updateMarginPercentage()\n        })\n    },\n\n    bindings: {\n        ['@input']($event) {\n            let field = $event.target\n            this.hasChanges = true\n\n            // Necesario para obtener el id del input al utilizar las flechas del input number\n            // ya que devuelve el div del icono\n            fieldId = (field.id) ? field.id : $event.target.parentElement.firstChild.id\n\n            if (fieldId == \"id_partner_price\") {\n                this.updateMargin()\n                this.updateMarginPercentage()\n                this.updateMarkupPercentage()\n            }\n\n            if (fieldId == \"id_margin\") {\n                this.updateAmountFromMargin()\n                this.updateMarginPercentage()\n                this.updateMarkupPercentage()\n            }\n\n            if (fieldId == \"id_margin_percentage\") {\n                this.updateAmountFromMarginPercentage()\n                this.updateMargin()\n                this.updateMarkupPercentage()\n            }\n        },\n        ['x-on:htmx:confirm']($event) { },\n    },\n\n    updateMargin() {\n        this.field_margin.value = Number.parseFloat(this.field_amount.value - this.field_cost.value).toFixed(5)\n    },\n\n    updateMarginPercentage() {\n      // 100 * (Price - Cost) / Price\n      this.field_margin_percentage.value = Number.parseFloat(\n        (100 * (Number(this.field_amount.value) - Number(this.field_cost.value))) / Number(this.field_amount.value)\n      ).toFixed(2)\n    },\n\n    updateMarkupPercentage() {\n        // 100 * (Price - Cost) / Cost\n        this.field_markup_percentage.value = Number.parseFloat(\n            (100 * (Number(this.field_amount.value) - Number(this.field_cost.value))) / Number(this.field_cost.value)\n        ).toFixed(2)\n    },\n\n    updateAmountFromMargin() {\n        margin_value = Number.parseFloat(this.field_margin.value).toFixed(5)\n        this.field_amount.value = Number.parseFloat(\n            Number(this.field_cost.value) + margin_value\n        ).toFixed(5)\n    },\n\n    updateAmountFromMarginPercentage() {\n        this.field_amount.value = Number.parseFloat(\n            Number(this.field_cost.value) / (1 - Number(this.field_margin_percentage.value) / 100),\n        ).toFixed(5)\n    }\n}))\n", "/**\n* Default JS for sidebar layout\n* If making a custom one use at least the following code\n* as the skeleton for the new form or it won't work\n*/\nAlpine.data('DefaultRightSidebarFormLayoutFormV2', () => ({\n hasChanges: false,\n\n bindings: {\n   ['@input']($event) {\n     this.hasChanges = true\n   },\n   ['x-on:htmx:confirm']($event) {\n     // By default we do not prevent $event\n     // This method may be used to display a confirm dialog before\n     // submitting the form\n   },\n },\n}))\n", "Alpine.data('CreateRuleDiscount', (url) => ({\n    id_type_rule: null,\n    hasChanges: false,\n\n    init() {\n      this.url = url\n    },\n    bindings: {\n        ['@input.debounce.100ms']($event) {\n        let field = $event.target\n        this.hasChanges = true\n\n        if (field.getAttribute('data-name') == \"type_rule\") {\n            let type_rule = (this.id_type_rule.value) ? this.id_type_rule.value : this.id_type_rule\n            this.refreshForm(type_rule)\n        }\n        }\n    },\n    refreshForm(value, targetElement=\"#rightMenuContent\") {\n      let params = {}\n      params[\"type_rule\"] = value\n\n      htmx.ajax('GET', this.url, {\n        target: targetElement,\n        swap: 'innerHTML',\n        values: params,\n      })\n    },\n}))\n", "Alpine.data('VmDeletePendingBanner', (expiresAt) => ({\n    remaining: '--:--:--',\n\n    init() {\n        const target = new Date(expiresAt)\n        const update = () => {\n            const diff = Math.max(0, Math.floor((target - new Date()) / 1000))\n            const h = String(Math.floor(diff / 3600)).padStart(2, '0')\n            const m = String(Math.floor((diff % 3600) / 60)).padStart(2, '0')\n            const s = String(diff % 60).padStart(2, '0')\n            this.remaining = h + ':' + m + ':' + s\n        }\n        update()\n        setInterval(update, 1000)\n    },\n}))\n", "function decodeBase64Url(value) {\n  const padding = '='.repeat((4 - (value.length % 4)) % 4)\n  const base64 = (value + padding).replace(/-/g, '+').replace(/_/g, '/')\n  return Uint8Array.from(atob(base64), (character) => character.charCodeAt(0))\n}\n\nfunction encodeBase64Url(value) {\n  const bytes = new Uint8Array(value)\n  let binary = ''\n  for (const byte of bytes) binary += String.fromCharCode(byte)\n  return btoa(binary).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/, '')\n}\n\nfunction credentialToJSON(credential) {\n  return {\n    id: credential.id,\n    rawId: encodeBase64Url(credential.rawId),\n    response: {\n      authenticatorData: encodeBase64Url(credential.response.authenticatorData),\n      clientDataJSON: encodeBase64Url(credential.response.clientDataJSON),\n      signature: encodeBase64Url(credential.response.signature),\n      userHandle: credential.response.userHandle\n        ? encodeBase64Url(credential.response.userHandle)\n        : null,\n    },\n    authenticatorAttachment: credential.authenticatorAttachment,\n    type: credential.type,\n  }\n}\n\nfunction registrationCredentialToJSON(credential) {\n  return {\n    id: credential.id,\n    rawId: encodeBase64Url(credential.rawId),\n    response: {\n      attestationObject: encodeBase64Url(\n        credential.response.attestationObject,\n      ),\n      clientDataJSON: encodeBase64Url(credential.response.clientDataJSON),\n      transports: credential.response.getTransports\n        ? credential.response.getTransports()\n        : [],\n    },\n    authenticatorAttachment: credential.authenticatorAttachment,\n    type: credential.type,\n  }\n}\n\nasync function postJSON(url, body, csrfToken) {\n  const response = await fetch(url, {\n    method: 'POST',\n    headers: {\n      'Content-Type': 'application/json',\n      'X-CSRFToken': csrfToken,\n    },\n    body: JSON.stringify(body),\n  })\n  const data = await response.json()\n  if (!response.ok) throw new Error(data.error)\n  return data\n}\n\nAlpine.data('PasskeyRegistration', (\n  optionsUrl,\n  verifyUrl,\n  csrfToken,\n  errorMessage,\n) => ({\n  loading: false,\n  error: '',\n\n  async register() {\n    this.loading = true\n    this.error = ''\n\n    try {\n      const name = this.$refs.name.value.trim()\n      const options = await postJSON(optionsUrl, {}, csrfToken)\n      options.challenge = decodeBase64Url(options.challenge)\n      options.user.id = decodeBase64Url(options.user.id)\n      if (options.excludeCredentials) {\n        options.excludeCredentials = options.excludeCredentials.map((credential) => ({\n          ...credential,\n          id: decodeBase64Url(credential.id),\n        }))\n      }\n\n      const credential = await navigator.credentials.create({ publicKey: options })\n      const result = await postJSON(\n        verifyUrl,\n        { name, credential: registrationCredentialToJSON(credential) },\n        csrfToken,\n      )\n      window.location.assign(result.redirect_url)\n    } catch (error) {\n      this.error = errorMessage\n    } finally {\n      this.loading = false\n    }\n  },\n}))\n\nAlpine.data('PasskeyAuthentication', (\n  optionsUrl,\n  verifyUrl,\n  state,\n  csrfToken,\n  errorMessage,\n  nextUrl = '',\n) => ({\n  loading: false,\n  error: '',\n\n  async authenticate() {\n    this.loading = true\n    this.error = ''\n\n    try {\n      const flow = state ? { state } : {}\n      const options = await postJSON(\n        optionsUrl,\n        { ...flow, next: nextUrl },\n        csrfToken,\n      )\n      if (options.redirect_url) {\n        window.location.assign(options.redirect_url)\n        return\n      }\n      options.challenge = decodeBase64Url(options.challenge)\n      if (options.allowCredentials) {\n        options.allowCredentials = options.allowCredentials.map((credential) => ({\n          ...credential,\n          id: decodeBase64Url(credential.id),\n        }))\n      }\n\n      const credential = await navigator.credentials.get({ publicKey: options })\n      const result = await postJSON(\n        verifyUrl,\n        { ...flow, next: nextUrl, credential: credentialToJSON(credential) },\n        csrfToken,\n      )\n      window.location.assign(result.redirect_url)\n    } catch (error) {\n      this.error = errorMessage\n    } finally {\n      this.loading = false\n    }\n  },\n}))\n", "Alpine.data('ClientBillingUpdateForm', (msgs) => ({\n  hasChanges: false,\n  id_name: null,\n  id_is_linked: null,\n  id_assignment_policy: null,\n  hasChangesFields: {\n    'assignment_policy': false,\n    'id_is_linked': false\n  },\n\n  init() {\n    this.updateReadonlyStateOnInputName()\n  },\n\n  updateReadonlyStateOnInputName() {\n    this.$nextTick(() => {\n      const nameEl = this.$root.querySelector('#id_name')\n      if (this.id_is_linked) {\n        nameEl.setAttribute('readonly', true)\n      } else if (nameEl.getAttribute('readonly')) {\n        nameEl.removeAttribute('readonly')\n      }\n    })\n  },\n\n  showModal($event, messages) {\n    let htmlContent = ''\n    let subtitle = ''\n\n    if (messages.length == 1) {\n      htmlContent = messages[0]\n    } else if (messages.length == 2) {\n      htmlContent = messages[0]\n      subtitle = messages[1]\n    } else {\n      // Convert msgs to <p>\n      htmlContent = messages\n        .filter((i) => i)\n        .map(function (i, index) {\n          const prefix =\n            messages.length > 1 ? `<strong>${index + 1}.</strong> ` : ''\n          return `<p>${prefix}${i}</p>`\n        })\n        .join('')\n      subtitle = ''\n    }\n\n    // Trigger MainModal\n    Alpine.store('MainModal').open(msgs.title, htmlContent, subtitle, $event)\n  },\n\n  bindings: {\n    ['@input']($event) {\n      this.updateReadonlyStateOnInputName()\n      this.hasChanges = true\n      fieldId = ($event.srcElement.dataset.name == 'assignment_policy') ? $event.srcElement.dataset.name : $event.target.firstChild.id\n\n      if (this.hasChangesFields.hasOwnProperty(fieldId)) {\n        this.hasChangesFields[fieldId] = true;\n      }\n    },\n    ['x-on:htmx:confirm']($event) {\n      if ($event.detail.verb == 'get') {\n        return $event.detail.issueRequest()\n      }\n\n      // Prevent default and display a modal confirmation if required\n      $event.preventDefault()\n\n      // Prepare the confirmation modal\n      let content = []\n\n      if (this.hasChangesFields[\"id_is_linked\"] && this.id_is_linked) {\n        content.push(msgs.is_linked)\n      }\n\n      if (this.hasChangesFields[\"assignment_policy\"] && this.id_assignment_policy === 'default') {\n        content.push(msgs.has_default_plan)\n        content.push(msgs.is_default)\n      }\n\n      if (this.hasChangesFields[\"assignment_policy\"] && this.id_assignment_policy === 'optional') {\n        content.push(msgs.is_optional)\n      }\n\n      if (this.hasChangesFields[\"assignment_policy\"] && this.id_assignment_policy === 'deprecated') {\n        content.push(msgs.is_deprecated)\n      }\n\n      if (content.length != 0) {\n        this.showModal($event, content)\n        return\n      }\n\n      $event.detail.issueRequest()\n    },\n  },\n}))\n", "Alpine.data('FormPartnerBillingUpdate', () => ({\n  init() {\n    const assignment_policy = document.getElementById('id_assignment_policy')\n    this.showModalPartnerBillingUpdate = false\n    assignment_policy?.addEventListener('change', function (evt) {\n      Alpine.store('ModalFormPartnerBilling').setModal(assignment_policy.value)\n    })\n  },\n  showModal() {\n    this.showModalPartnerBillingUpdate = true\n  },\n}))\n", "Alpine.data('PartnerOrderAssignmentForm', (url) => ({\n  hasChanges: false,\n  id_client,\n  fields: {},\n\n  init() {\n    this.fields.client = this.id_client\n  },\n\n  bindings: {\n    ['@input.debounce']($event) {\n      this.hasChanges = true\n      this.formChanged($event)\n    },\n  },\n\n  formChanged($event) {\n    const field = $event.target\n    const name = field.getAttribute('data-name')\n\n    if (name == 'client') {\n      this.refreshForm()\n    }\n  },\n\n  refreshForm() {\n    let params = { client: this.fields['client'].value }\n    htmx.ajax('GET', url, {\n      target: '#rightMenuContent',\n      swap: 'innerHTML',\n      values: params,\n    })\n  },\n}))\n", "Alpine.data('InventoryClientForm', (url) => ({\n  hasChanges: false,\n\n  bindings: {\n    ['@input.debounce']($event) {\n      this.hasChanges = true\n      this.formChanged($event)\n    },\n  },\n\n  formChanged($event) {\n    const field = $event.target\n    const name = field.getAttribute('data-name')\n\n    if (name == 'wholesaler' || name == 'partner') {\n      this.refreshForm()\n    }\n  },\n\n  refreshForm() {\n    const fields = ['wholesaler', 'partner']\n\n    let params = {}\n    fields.forEach((key) => {\n      const field = this.$el.querySelector(`#id_${key}`)\n      params[key] = field ? field.value : ''\n    })\n    htmx.ajax('GET', url, {\n      target: '#rightMenuContent',\n      swap: 'innerHTML',\n      values: params,\n    })\n  },\n}))\n", "Alpine.data(\"UpdatePublicNetworkIpForm\", () => ({\n    hasChanges: false,\n    display_help_text: false,\n\n    bindings:{\n        ['@input']($event) {\n            this.hasChanges = true\n        },\n        ['@change']($event) {\n            this.hasChanges = true\n\n            if ($event.target.id == \"id_ip\"){\n                this.display_help_text = Boolean($event.target.value)\n            }\n        },\n    }\n}))\n", "Alpine.data('UpdatePortalForm', (form, logo, favicon, navigation_logo) => ({\n  init() {\n    const inputs = Array.from(form)\n    this.initialLogo = logo\n    this.initialFavicon = favicon\n    this.initialNavigationLogo = navigation_logo\n    this.deleteLogo = false\n    this.deleteFavicon = false\n    this.deleteNavigationLogo = false\n    this.valueLogo = null\n    this.valueFavicon = null\n    this.valueNavigationLogo = null\n    this.dark_bar = null\n    const t = this\n    this.hasChanges = false\n    inputs.forEach((input) => {\n      input.addEventListener('keyup', function _setFlag() {\n        t['hasChanges'] = true\n        input.removeEventListener('keyup', _setFlag)\n      })\n      input.addEventListener('change', function _setFlag() {\n        t['hasChanges'] = true\n        input.removeEventListener('change', _setFlag)\n      })\n      input.addEventListener('click', function _setFlag(e) {\n        console.log(e.target.type)\n        if ((e.target.type == 'color') || (e.target.type == 'select-one')) {\n          t['hasChanges'] = true\n        }\n      })\n    })\n  },\n  getValueLogo() {\n    return this.valueLogo ? this.valueLogo.slice(12) : ''\n  },\n  getValueFavicon() {\n    return this.valueFavicon ? this.valueFavicon.slice(12) : ''\n  },\n  getNavigationLogo() {\n    return this.valueNavigationLogo ? this.valueNavigationLogo.slice(12) : ''\n  },\n  isDisabledLogo() {\n    if (!this.valueLogo && !this.initialLogo) {\n      return false\n    }\n    return true\n  },\n  isDisabledFavicon() {\n    if (!this.valueFavicon && !this.initialFavicon) {\n      return false\n    }\n\n    return true\n  },\n  isDisabledNavigationLogo() {\n    if (!this.valueNavigationLogo && !this.initialNavigationLogo) {\n      return false\n    }\n\n    return true\n  },\n  changeValueLogo() {\n    this.hasChanges = true\n    this.deleteLogo = false\n  },\n  changeValueFavicon() {\n    this.hasChanges = true\n    this.deleteFavicon = false\n  },\n  changeValueNavigationLogo() {\n    this.hasChanges = true\n    this.deleteNavigationLogo = false\n  },\n  clearLogo() {\n    this.initialLogo = null\n    this.valueLogo = null\n    this.hasChanges = true\n    return (this.deleteLogo = true)\n  },\n  clearFavicon() {\n    this.initialFavicon = null\n    this.valueFavicon = null\n    this.hasChanges = true\n    return (this.deleteFavicon = true)\n  },\n  clearNavigationLogo() {\n    this.initialNavigationLogo = null\n    this.valueNavigationLogo = null\n    this.hasChanges = true\n    return (this.deleteNavigationLogo = true)\n  },\n}))\n", "Alpine.data('VirtualMachineAddNetworkForm', (url, unit_price) => ({\n    hasChanges: false,\n    id_network_type,\n    fields: {},\n    display_help_text: false,\n    id_rate_0: null,\n    network_total_price: \"---\",\n    unit_price: unit_price,\n\n    init() {\n        this.fields.id_network_type = this.id_network_type\n    },\n    recalculatePrice() {\n        const value = document.getElementById(\"id_rate_0\").value\n        this.network_total_price = Number.parseFloat((value - 1) * this.unit_price).toFixed(2)\n    },\n\n    bindings: {\n        ['@input.debounce']($event) {\n            this.hasChanges = true\n            this.formChanged($event)\n            if ($event.target.id == \"id_rate_0\") {\n                this.recalculatePrice()\n            }\n        },\n    },\n\n    formChanged($event) {\n        const field = $event.target\n        const name = field.getAttribute('data-name')\n\n        if (name == 'network_type') {\n            this.refreshForm()\n        }\n    },\n\n    refreshForm() {\n        let params = { network_type: this.fields['id_network_type'].value }\n        htmx.ajax('GET', url, {\n            target: '#rightMenuContent',\n            swap: 'innerHTML',\n            values: params,\n        })\n    },\n}))\n", "Alpine.data('HTMLBuilderTable', (payload, $persist) => ({\n    isCollapsed: false,\n    specVersion: \"table-columns-v1\",\n    maxRegistryEntrys: 3000,\n    /* Selector de columnas visibles */\n    columns: payload.columns || {},\n    displayVisibleColumns: false,\n    /* Checkboxes */\n    rowCheckboxesValues: [],\n    headerCheckboxValue: false,\n\n    init() {\n      // borra el registro obsoleto en local storage\n      // este c\u00F3digo se eliminar\u00E1 en el futuro (fecha implementaci\u00F3n: 2025-08-07)\n      if (localStorage.getItem(this.specVersion) === null) {\n        localStorage.clear()\n      }\n\n      let registry = this.getRegistryObject()\n\n      if ( registry && !(payload.storage_key in registry)) {\n        this.saveColumnsSnapshot()\n      }\n      this.loadColumnsSnapshot()\n    },\n\n    get hasColumns() {\n      return Object.keys(this.columns).length > 0\n    },\n\n    /* La primera y \u00FAltima columna siempre son visibles */\n    get hasToggleableColumns() {\n      return Object.values(this.columns).filter(c => c.toggleable).length > 0\n    },\n\n    get numberOfHiddenColumns() {\n      let num = 0\n      for (let [key, column] of Object.entries(this.columns)) {\n        if (column.toggleable && !column.checked) {\n          num = num+1\n        }\n      }\n      return num\n    },\n\n    getColumnByKey(key) {\n      return this.columns && key in this.columns && this.columns[key]\n    },\n\n    columnIsVisibleByKey(key) {\n      if (!this.hasColumns) {\n        return true\n      }\n\n      const column = this.getColumnByKey(key)\n      return column && column.checked\n    },\n\n    toggleColumnVisibilityByKey(key) {\n      const column = this.getColumnByKey(key)\n      if (column) {\n        column.checked = !column.checked\n      }\n      this.saveColumnsSnapshot()\n    },\n\n    columnIsToggeableByKey(key) {\n      const column = this.getColumnByKey(key)\n      return column && column.toggleable\n    },\n\n    // gesti\u00F3n del guardado de configuraci\u00F3n de columnas en local storage\n    getRegistryObject() {\n      // obtiene del local storage el objeto de columnas\n      // si no existe, crea una nueva entrada vac\u00EDa\n      let registry = localStorage.getItem(this.specVersion);\n      if (!registry) {\n        registry = {};\n        localStorage.setItem(this.specVersion, JSON.stringify(registry));\n      } else {\n        registry = JSON.parse(registry);\n      }\n\n      return registry\n    },\n\n    updateLastUsed(storageKey) {\n      const registry = this.getRegistryObject()\n      if (registry[storageKey]) {\n        registry[storageKey].lastUsed = Date.now()\n        localStorage.setItem(this.specVersion, JSON.stringify(registry))\n      }\n    },\n\n    cleanupOldEntries(registry) {\n      const currentEntries = Object.keys(registry).length\n      if (currentEntries >= this.maxRegistryEntrys) {\n        // si se supera el maximo, elimina la entrada mas antigua\n        const oldestKey = Object.keys(registry).reduce((a, b) => {\n          return registry[a].lastUsed < registry[b].lastUsed ? a : b\n        })\n        delete registry[oldestKey]\n      }\n    },\n\n    generateSnapshot() {\n      const snapshot = {}\n      for (let [key, column] of Object.entries(this.columns)) {\n        snapshot[key] = column.checked\n      }\n      return snapshot\n    },\n\n    saveColumnsSnapshot() {\n      // recorre las columnas y genera uno objeto clave valor con el estado checked\n      let registry = this.getRegistryObject()\n\n      // limpia entradas antiguas si es necesario\n      this.cleanupOldEntries(registry)\n\n      // genera el snapshot de las columnas\n      const snapshot = this.generateSnapshot()\n\n      registry[payload.storage_key] = {\"lastUsed\": Date.now(), \"data\": snapshot}\n      localStorage.setItem(this.specVersion, JSON.stringify(registry))\n    },\n\n    loadColumnsSnapshot() {\n      const registry = this.getRegistryObject()\n      const entry = registry[payload.storage_key]\n\n      if (!entry || !entry.data) {\n        return\n      }\n\n      const snapshot = entry.data\n      let hasChanges = false\n\n      for (let [key, column] of Object.entries(this.columns)) {\n        if (key in snapshot && column.checked !== snapshot[key]) {\n          column.checked = snapshot[key]\n          hasChanges = true\n        }\n      }\n\n      if (hasChanges) {\n        this.updateLastUsed(payload.storage_key)\n      }\n    },\n\n    getRowCheckboxes() {\n      const tableElement = this.$refs.tableElement\n      if (!tableElement) return []\n\n      return tableElement.querySelectorAll(`[data-el=\"atom_input-checkbox-select-multiple-option\"] input[type=\"checkbox\"]`)\n    },\n\n    toggleCheckbox(rowId) {\n      const rowCheckboxes = this.getRowCheckboxes()\n\n      if (this.rowCheckboxesValues.includes(rowId)) {\n        this.rowCheckboxesValues = this.rowCheckboxesValues.filter(id => id !== rowId)\n      } else {\n        this.rowCheckboxesValues.push(rowId)\n      }\n\n      if (this.rowCheckboxesValues.length === rowCheckboxes.length) {\n        this.headerCheckboxValue = true\n      } else {\n        this.headerCheckboxValue = false\n      }\n    },\n\n    toggleAllRows() {\n      if (this.headerCheckboxValue) {\n        this.rowCheckboxesValues = []\n        this.headerCheckboxValue = false\n      } else {\n        this.rowCheckboxesValues = []\n        const rowCheckboxes = this.getRowCheckboxes()\n\n        rowCheckboxes.forEach(checkbox => {\n          const rowId = parseInt(checkbox.value)\n          this.toggleCheckbox(rowId)\n        })\n        this.headerCheckboxValue = true\n      }\n    },\n\n    checkboxIsChecked(rowId) {\n      return this.rowCheckboxesValues.some(id => id == rowId)\n    },\n}))\n", "Alpine.data('CalculateMargins', () => ({\n  getMargin(partner_price, amount) {\n    if (Number.parseFloat(partner_price) == 0 && !Number.parseFloat(amount)) {\n      return '0.00'\n    }\n\n    return Number.parseFloat(\n      Number.parseFloat(amount) - Number.parseFloat(partner_price),\n    ).toFixed(5)\n  },\n  getMarginPercentage(partner_price, amount) {\n    // Prevents infinite output\n    if (Number.parseFloat(partner_price) == 0) {\n      return '---'\n    }\n\n    return Number.parseFloat(\n      ((Number.parseFloat(amount) - Number.parseFloat(partner_price)) /\n        Number.parseFloat(partner_price)) *\n        100,\n    ).toFixed(2)\n  },\n}))\n", "Alpine.data('OptionsSubmenu', () => ({\n  hasHover: false,\n\n  selectElement(element, className = 'submenu-option') {\n    const optionsSubmenu = Array.from(\n      document.getElementsByClassName(className),\n    )\n    const filteredOptions = optionsSubmenu.filter((el) => el != element)\n    // If the submenu item has several children elements (<span>),\n    // we use the text of the first one. If it does not display\n    // the text of the submenu item\n    const breadcrumb_object = element.children[0]\n      ? element.children[0].textContent\n      : element.textContent\n\n    element.classList.add(`${className}--active`)\n\n    filteredOptions.forEach((option) => {\n      option.classList.remove(`${className}--active`)\n    })\n  },\n}))\n", "Alpine.store('RightMenu', {\n  opened: false,\n\n  /**\n   * Options\n   * isDanger: boolean Define la modal como de peligro (cambia colores)\n   * @param {Object} options\n   */\n  open(options = {}) {\n    const rightMenuEl = document.querySelector('#rightMenu')\n    const isDangerCls = 'is-danger'\n\n    // is-danger option\n    if (rightMenuEl && options.isDanger) {\n      rightMenuEl.classList.add(isDangerCls)\n    } else if (rightMenuEl && rightMenuEl.classList.contains(isDangerCls)) {\n      rightMenuEl.classList.remove(isDangerCls)\n    }\n\n    this.opened = true\n  },\n\n  close() {\n    if (!this.opened) {\n      return\n    }\n    this.opened = false\n    const spinner = document\n      .getElementById('right-menu-spinner')\n      .cloneNode(true)\n    // Set display flex to override default visibility\n    spinner.setAttribute('style', 'display: flex;')\n    document.getElementById('rightMenuContent').innerHTML = spinner.outerHTML\n  },\n})\n", "Alpine.store('Submenu', {\n  isCollapsed: false,\n  isActive: true,\n\n  show() {\n    this.isActive = true\n  },\n\n  hide() {\n    this.isActive = false\n  },\n\n  close() {\n    this.isCollapsed = true\n  },\n  open() {\n    this.isCollapsed = false\n  },\n  toggle() {\n    this.isCollapsed = !this.isCollapsed\n  },\n  // Refresca el contenido del submenu, para cambiar la seccion actual\n  refresh(url, tab) {\n    htmx.ajax('GET', url, {\n      target: '#submenu',\n      values: { active_submenu_tab: tab },\n    })\n  },\n})\n", "Alpine.data('HTMLNavigationMenu', (portal) => ({\n  storageKey: null,\n  collapsed: false,\n  options: {},\n  hoverOptions: {},\n\n  init() {\n    this.storageKey = (portal ? portal + '_' : '') + 'menu'\n\n    const menuRegistry = JSON.parse(localStorage.getItem(this.storageKey) ?? '{}')\n    const mediaQuery = window.matchMedia('(max-width: 767px)')\n    const viewport = mediaQuery.matches ? 'mobile' : 'desktop'\n\n    this.collapsed = menuRegistry.viewport === viewport\n      ? (menuRegistry.collapsed ?? mediaQuery.matches)\n      : mediaQuery.matches\n    this.options = menuRegistry.options ?? {}\n\n    mediaQuery.addEventListener('change', (event) => {\n      this.collapsed = event.matches\n      this.saveMenuState()\n    })\n  },\n\n  /**\n   * Guarda el estado del colapsado del men\u00FA y las opciones de este.\n   */\n  saveMenuState() {\n    localStorage.setItem(this.storageKey, JSON.stringify({\n      collapsed: this.collapsed,\n      options: this.options,\n      viewport: window.matchMedia('(max-width: 767px)').matches ? 'mobile' : 'desktop',\n    }))\n  },\n\n  toggleSidebar() {\n    this.collapsed = !this.collapsed\n    this.saveMenuState()\n  },\n\n  isOptionOpen(name) {\n    return this.options[name] ?? false\n  },\n\n  toggleOption(name) {\n    this.options[name] = !this.isOptionOpen(name)\n    this.saveMenuState()\n  },\n\n  mouseEnterOption(name, el) {\n    if (this.collapsed) {\n      const { top, right } = el.getBoundingClientRect()\n      this.hoverOptions[name] = { hover: true, top, right }\n    }\n  },\n\n  mouseLeaveOption(name) {\n    if (this.hoverOptions[name]) {\n      this.hoverOptions[name].hover = false\n    }\n  },\n\n  /**\n   * Indica si una opci\u00F3n del men\u00FA est\u00E1 hovered.\n   *\n   * Sirve para mostrar un flyout menu cuando este est\u00E1 colapsado.\n   * @param {string} name - Nombre de la opci\u00F3n\n   */\n  isOptionHovered(name) {\n    return this.hoverOptions[name]?.hover ?? false\n  },\n\n\n  /**\n   * Devuelve el estilo CSS para posicionar el flyout men\u00FA de una opci\u00F3n cuando el men\u00FA\n   * est\u00E1 colapsado. Se posiciona en base al viewport para aparecer junto a la opci\u00F3n\n   * que est\u00E1 haciendo hover.\n   *\n   * @param {*} name - Nombre de la opci\u00F3n\n   */\n  getOptionFlyoutStyle(name) {\n    const { top = 0, right = 0 } = this.hoverOptions[name] ?? {}\n    return `position:fixed;top:${top}px;left:${right}px`\n  },\n\n  initOption(name, isActive) {\n    if (!(name in this.options)) {\n      this.options[name] = isActive\n      this.saveMenuState()\n    }\n  },\n}))\n", "document.addEventListener('alpine:init', () => {\n  /** Components */\n  require('./components/input_select_v2/input_select_v2.js')\n  require('./components/checkbox_select_multiple_filter/checkbox_select_multiple_filter.js')\n\n  /** Patterns */\n  require('./patterns/atoms/alert_manager/alert_manager.js')\n  require('./patterns/atoms/banner_information/banner_information.js')\n  require('./patterns/atoms/basic_input/basic_input.js')\n  require('./patterns/atoms/copy_to_clipboard/copy_to_clipboard.js')\n  require('./patterns/atoms/totp_input_v2610/totp_input_v2610.js')\n  require('./patterns/atoms/input_date/input_date.js')\n  require('./patterns/atoms/input_datepicker/input_datepicker.js')\n  require('./patterns/atoms/input_msp/input_msp.js')\n  require('./patterns/atoms/input_select_advanced/input_select_advanced.js')\n  require('./patterns/atoms/input_number/input_number.js')\n  require('./patterns/atoms/input_slider/input_slider.js')\n  require('./patterns/atoms/main_modal/main_modal.js')\n  require('./patterns/atoms/menu_option/menu_option.js')\n  require('./patterns/atoms/password_input/password_input.js') // @deprecated\n  require('./patterns/atoms/tree_view/tree_view.js')\n  require('./patterns/molecules/form_update_resource/form_update_resource.js')\n  require('./patterns/molecules/modal/modal.js')\n  require('./patterns/molecules/service_selector/service_selector.js')\n  require('./patterns/organisms/form_sales_quote_line/form_sales_quote_line.js')\n  require('./patterns/pages/add_discount_form_page/add_discount_form_page.js')\n  require('./patterns/pages/create_additional_disk/create_additional_disk.js')\n  require('./patterns/pages/partner_edit_client_unit_price/partner_edit_client_unit_price.js')\n  require('./patterns/pages/update_prices_category/update_prices_category.js')\n  require('./patterns/pages/update_provisioning_vm_step2/update_provisioning_vm_step2.js')\n  require('./patterns/pages/update_provisioning_vm_step3/update_provisioning_vm_step3.js')\n  require('./patterns/pages/update_provisioning_vm_step4/update_provisioning_vm_step4.js')\n  require('./patterns/pages/update_provisioning_vm/update_provisioning_vm.js')\n  require('./patterns/pages/add_new_disk_vm/add_new_disk_vm.js')\n  require('./patterns/pages/add_gpu_vm/add_gpu_vm.js')\n  require('./patterns/pages/vm_update_disk/vm_update_disk.js')\n  require('./patterns/pages/virtual_machine_update_disk/virtual_machine_update_disk.js')\n  require('./patterns/pages/vm_update_public_network_page/vm_update_public_network_page.js')\n  require('./patterns/pages/vm_update_status/vm_update_status.js')\n  require('./patterns/pages/wholesaler_clone_partner_plan/wholesaler_clone_partner_plan.js')\n  require('./patterns/pages/wholesaler_edit_partner_unit_price/wholesaler_edit_partner_unit_price.js')\n  require('./patterns/templates/layout_right_sidebar_form_v2/layout_right_sidebar_form_v2.js')\n  require('./patterns/pages/client_create_rule_discount_page/client_create_rule_discount_page.js')\n  require('./patterns/pages/vm_delete_pending/vm_delete_pending.js')\n\n  /** Forms */\n  require('./js/forms/PasskeyAuthentication.js')\n  require('./js/forms/ClientBillingUpdateForm.js')\n  require('./js/forms/FormPartnerBillingUpdate.js')\n  require('./js/forms/PartnerOrderAssignment.js')\n  require('./js/forms/InventoryClientForm.js')\n  require('./js/forms/UpdatePublicNetworkIpForm.js')\n  require('./js/forms/UpdatePortalForm.js')\n  require('./js/forms/VirtualMachineAddNetworkForm.js')\n\n  /** HTMLBuilders */\n  require('../../html_builder/templates/table/table.js')\n\n  /** Global components */\n  require('./js/components/CalculateMargins.js')\n  require('./js/components/OptionsSubmenu.js')\n  require('./js/components/RightMenu.js')\n  require('./js/components/Submenu.js')\n\n  /** Navigation */\n  require('../../webapp/webapp_common/templates/navigation/menu.js')\n})\n\n/** Global functions */\nwindow.localizeDates = function () {\n  const dates = Array.from(\n    document.getElementsByClassName('js-datetime'),\n  ).filter((date) => !date.getAttribute('localized'))\n\n  for (const date of dates) {\n    const v = date.getAttribute('datetime')\n    const d = new Date(v)\n    date.innerHTML = d.toLocaleString()\n    date.setAttribute('localized', true)\n  }\n}\n\nwindow.scrollToSelector = function (selector) {\n  document.querySelector(selector).scrollIntoView({ behavior: 'smooth' })\n}\n\n/**\n * @deprecated\n * Delete when all forms are migrated\n * to the new system\n */\nwindow.attachOnKeyupHandlers = function (form, hasChangedFlag) {\n  const inputs = Array.from(form)\n\n  return {\n    init() {\n      const t = this\n      t[hasChangedFlag] = false\n      inputs.forEach((input) => {\n        input.addEventListener('keyup', function _setFlag() {\n          t[hasChangedFlag] = true\n          input.removeEventListener('keyup', _setFlag)\n        })\n        input.addEventListener('change', function _setFlag() {\n          t[hasChangedFlag] = true\n          input.removeEventListener('change', _setFlag)\n        })\n      })\n    },\n  }\n}\n\n/** Events */\ndocument.addEventListener('htmx:afterSettle', localizeDates)\n\ndocument.addEventListener('DOMContentLoaded', function () {\n  // Call localizeDates() on DOMContentLoaded for content not included in htmx requests,\n  // for example, content included in the base template\n  window.localizeDates()\n\n  Alpine.store('BannerInformation').open()\n\n  document.body.addEventListener('close_slide', function (evt) {\n    const delayMS = evt.detail.delay ? 2000 : 0\n\n    setTimeout(() => {\n      Alpine.store('RightMenu').close()\n    }, delayMS)\n  })\n\n  document.body.addEventListener('open_slide', function (evt) {\n    const delayMS = evt.detail.delay ? 2000 : 0\n\n    setTimeout(() => {\n      Alpine.store('RightMenu').open()\n    }, delayMS)\n  })\n\n  document.body.addEventListener('show_alert', function (evt) {\n    Alpine.store('AlertManager').add(evt.detail.msg, evt.detail.type, evt.detail.duration || 3000)\n  })\n\n  document.body.addEventListener('refresh_submenu_from_url', function (evt) {\n    htmx.ajax('GET', evt.detail.url, {\n      target: '#submenu',\n      headers: 'HX-Push-Url',\n    })\n  })\n\n  document.body.addEventListener('refresh_from_url', function (evt) {\n    htmx.ajax('GET', evt.detail.url, '#content')\n  })\n\n  document.body.addEventListener('refresh_right_menu_from_url', function (evt) {\n    htmx.ajax('GET', evt.detail.url, '#rightMenuContent')\n  })\n\n  document.body.addEventListener('close_modal', function (evt) {\n    Alpine.store('Modal').close()\n  })\n\n  document.body.addEventListener('htmx:configRequest', function (evt) {\n    // Check if Intl.DateTimeFormat.prototype.resolvedOptions is supported by browser\n    if (\n      'DateTimeFormat' in Intl &&\n      'resolvedOptions' in Intl.DateTimeFormat.prototype\n    ) {\n      const timeZone = Intl.DateTimeFormat().resolvedOptions().timeZone\n      evt.detail.headers['X-Time-Zone'] = timeZone\n    }\n  })\n\n  document.body.addEventListener('htmx:responseError', function (evt) {\n    let errorCodesWithMessage = [401, 403]\n\n    if (errorCodesWithMessage.includes(evt.detail.xhr.status)) {\n      const msgError = JSON.parse(\n        document.getElementById(`msg-error-${evt.detail.xhr.status}`)\n          .textContent,\n      )\n\n      if (window.confirm(msgError)) {\n        window.location.reload()\n      }\n    }\n  })\n\n  document.body.addEventListener('htmx:historyRestore', function () {\n    /**\n     * Close right menu modal (used by forms)\n     * after a historyRestore\n     */\n    Alpine.store('RightMenu').close()\n\n    /**\n     * Close delete modal\n     */\n    store_modal = Alpine.store('Modal')\n    if (store_modal.is_open()) {\n      store_modal.close()\n    }\n  })\n})\n"],
  "mappings": "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",
  "names": ["_a", "credential"]
}
