{"version":3,"file":"internal.js","mappings":";;;;;;;;;AAAA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AASA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;;;AC9FA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAPA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAPA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;;;;;;;;;;ACzDA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;;;AChBA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAAA;AAAA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAEA;AASA;AACA;AACA;AACA;AACA;AAQA;AACA;AASA;AACA;AACA;;AAEA;AACA;AAiBA;AACA;AACA;AACA;AAUA;AACA;AASA;AACA;AAgBA;AAEA;AACA;;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAIA;;;;;;;;;;AC5eA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AADA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAXA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAcA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AAwBA;AAAA;AAMA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AAIA;AA0BA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAIA;AAAA;AACA;AAGA;AA2BA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAPA;AAAA;AAAA;AASA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AA1BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA6BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAPA;AAAA;AAAA;AASA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAvBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAyBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAPA;AAAA;AAAA;AASA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAzBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AANA;AAAA;AAAA;AAQA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AA7BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA+BA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AAAA;AANA;AAAA;AAAA;AAQA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAjCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmCA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAPA;AAAA;AAAA;AASA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAtCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAwCA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAFA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACtoBA;;;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;ACNA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAEA;AAEA;;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAEA;;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAAA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;;AAEA;AACA","sources":["webpack://ctatus/./app/javascript/packs/notifications.js","webpack://ctatus/./app/javascript/packs/service_show.js","webpack://ctatus/./app/javascript/packs/services.js","webpack://ctatus/./app/javascript/profile_survey.js","webpack://ctatus/./app/javascript/sections_manager.js","webpack://ctatus/./app/javascript/stylesheets/internal.scss?f500","webpack://ctatus/webpack/bootstrap","webpack://ctatus/webpack/runtime/make namespace object","webpack://ctatus/./app/javascript/packs/internal.js"],"sourcesContent":["function isValidHttpUrl(string) {\n var res = string.match(/(http(s)?:\\/\\/.)?(www\\.)?[-a-zA-Z0-9@:%._\\+~#=]{2,256}\\.[a-z]{2,6}\\b([-a-zA-Z0-9@:%_\\+.~#?&//=]*)/g);\n return (res !== null)\n}\n\ndocument.addEventListener(\"DOMContentLoaded\", (e) => {\n let toggles = document.querySelectorAll(\".js-checkbox-status\");\n\n toggles.forEach(toggle => {\n toggle.addEventListener('click', function() {\n const checkbox = this.querySelector('input[type=\"checkbox\"]');\n const info = this.closest('.notification-modal').querySelector('.modal-form');\n const span = this.querySelector('span');\n\n checkbox.checked = !checkbox.checked;\n\n if(checkbox.checked) {\n this.classList.remove('bg-gray-400');\n this.classList.add('bg-blue-600');\n span.classList.remove('translate-x-0');\n span.classList.add('translate-x-5');\n info.classList.remove('hidden');\n } else {\n this.classList.remove('bg-blue-600');\n this.classList.add('bg-gray-400');\n span.classList.remove('translate-x-5');\n span.classList.add('translate-x-0');\n info.classList.add('hidden');\n }\n\n this.setAttribute('aria-checked', checkbox.checked);\n });\n });\n\n let webhookUrl = document.getElementById('webhook_url');\n\n if(webhookUrl){\n webhookUrl.addEventListener('keyup', function() {\n if(!isValidHttpUrl(this.value)){\n this.classList.remove('bg-green-100');\n this.classList.add('bg-red-200');\n } else {\n this.classList.remove('bg-red-200');\n this.classList.add('bg-green-100');\n }\n })\n }\n\n // FreshService custom fields functionality\n const handleCustomFields = () => {\n // Add custom field button handler\n document.querySelectorAll('.add-custom-field').forEach(button => {\n button.addEventListener('click', function(e) {\n e.preventDefault();\n const container = this.previousElementSibling;\n const newField = document.createElement('div');\n newField.className = 'flex gap-2 custom-field-row items-center';\n newField.innerHTML = `\n \n \n \n `;\n container.appendChild(newField);\n attachRemoveHandlers();\n });\n });\n\n // Function to attach remove handlers\n const attachRemoveHandlers = () => {\n document.querySelectorAll('.remove-custom-field').forEach(button => {\n button.removeEventListener('click', removeFieldHandler);\n button.addEventListener('click', removeFieldHandler);\n });\n };\n\n // Remove field handler\n const removeFieldHandler = function(e) {\n e.preventDefault();\n this.closest('.custom-field-row').remove();\n };\n\n // Initial attachment of remove handlers\n attachRemoveHandlers();\n };\n\n // Initialize custom fields handlers\n handleCustomFields();\n\n // Re-initialize when modals are opened (for dynamically loaded content)\n document.addEventListener('modal:opened', handleCustomFields);\n});","function prepareComponents(){\n let notificationsType = document.querySelector('input[name=\"connection[notify_by_component]\"]:checked').value;\n let components = document.getElementsByClassName('component');\n\n for(let component of components){\n\n let name = component.getElementsByClassName('name')[0];\n let check = component.getElementsByClassName('check')[0];\n\n if( notificationsType == 'every' ) {\n name.classList.remove('w-11/12')\n name.classList.add('w-full');\n check.classList.add('hidden');\n } else {\n name.classList.remove('w-full')\n name.classList.add('w-11/12');\n check.classList.remove('hidden');\n }\n }\n}\n\ndocument.addEventListener(\"DOMContentLoaded\", (e) => {\n let radios = document.getElementsByName('connection[notify_by_component]');\n\n if(radios.length == 0){\n return;\n }\n\n prepareComponents()\n\n radios.forEach(radio => {\n radio.addEventListener('change', function() {\n prepareComponents()\n });\n });\n\n let parent_components = document.getElementsByClassName('cparent');\n\n for(let parent of parent_components){\n parent.addEventListener('change', function() {\n children = document.querySelectorAll(\"[data-parent='\"+parent.value+\"']\")\n for(let child of children){\n child.checked = parent.checked;\n }\n });\n };\n\n let children_components = document.getElementsByClassName('cchild');\n\n for(let child of children_components){\n child.addEventListener('change', function() {\n parent = document.getElementById(\"connection_components_ids_\"+child.getAttribute('data-parent'))\n if(!child.checked){\n parent.checked = false\n }\n });\n };\n});","document.addEventListener(\"DOMContentLoaded\", (e) => {\n toggle_list = document.querySelectorAll('.js-toggle-list');\n\n toggle_list.forEach(tlist => {\n tlist.addEventListener('click', (e) => {\n list = e.srcElement.parentElement.nextElementSibling;\n\n if(list.classList.contains('hidden')){\n list.classList.remove('hidden');\n } else {\n list.classList.add('hidden');\n }\n\n e.preventDefault();\n });\n });\n});","class ProfileSurvey {\n constructor(config) {\n this.surveyPath = config.surveyPath;\n this.skipPath = config.skipPath;\n this.surveyQuestions = {\n primary_role: {\n text: \"Which best describes your role?\",\n type: \"single_choice\",\n options: [\"SRE / DevOps\", \"IT Manager\", \"Engineering Lead\", \"CTO\", \"Other\"]\n },\n other_roles: {\n text: \"Who else in your company will need outage alerts?\",\n type: \"multi_choice\",\n options: [\"Engineering\", \"IT Ops\", \"Customer Support\", \"Product\", \"Leadership\"]\n },\n primary_goal: {\n text: \"What's the main job you're hiring IsDown to do?\",\n type: \"single_choice\",\n options: [\n \"Know first when vendors go down\",\n \"Share vendor status on our status page\",\n \"Track vendor reliability over time\",\n \"Other\"\n ]\n },\n // main_objection: {\n // text: \"Biggest hesitation before paying for IsDown?\",\n // type: \"single_choice\",\n // options: [\n // \"Price\",\n // \"Not sure we'd use it enough\",\n // \"We might build it ourselves\",\n // \"It's not a priority right now\",\n // \"Other\"\n // ]\n // },\n how_did_you_find_us: {\n text: \"How did you find us?\",\n type: \"single_choice\",\n options: [\n \"Google / Bing Search\",\n \"Social Media\",\n \"Recommendation from colleague\",\n \"Blog\",\n \"ChatGPT / Claude / Other LLM\",\n \"Other\"\n ]\n },\n first_name_profile: {\n text: \"Tell us your first name so we can say hi properly\",\n type: \"text\",\n optional: true\n }\n };\n\n this.questionOrder = ['primary_role', 'other_roles', 'primary_goal', 'how_did_you_find_us', /* 'main_objection', */ 'first_name_profile'];\n this.currentQuestionIndex = 0;\n this.surveyAnswers = {};\n\n // Bind methods to this context\n this.initialize = this.initialize.bind(this);\n this.showModal = this.showModal.bind(this);\n this.hideModal = this.hideModal.bind(this);\n this.closeModal = this.closeModal.bind(this);\n this.displayCurrentQuestion = this.displayCurrentQuestion.bind(this);\n this.submitAnswer = this.submitAnswer.bind(this);\n this.submitMultiChoice = this.submitMultiChoice.bind(this);\n this.submitText = this.submitText.bind(this);\n this.skipQuestion = this.skipQuestion.bind(this);\n this.completeSurvey = this.completeSurvey.bind(this);\n this.showOtherInput = this.showOtherInput.bind(this);\n this.submitOtherAnswer = this.submitOtherAnswer.bind(this);\n this.showError = this.showError.bind(this);\n this.clearError = this.clearError.bind(this);\n }\n\n initialize() {\n // Check if user manually closed the modal before\n if (localStorage.getItem('profileSurveyClosed') === 'true') {\n return; // Don't show if user explicitly closed it\n }\n\n // Load saved progress from localStorage\n const savedProgress = localStorage.getItem('profileSurveyProgress');\n if (savedProgress) {\n this.surveyAnswers = JSON.parse(savedProgress);\n // Find the first unanswered question\n for (let i = 0; i < this.questionOrder.length; i++) {\n if (!this.surveyAnswers[this.questionOrder[i]] && !this.surveyAnswers[this.questionOrder[i] + '_skipped']) {\n this.currentQuestionIndex = i;\n break;\n }\n }\n }\n\n // Check if survey should be shown\n fetch(`${this.surveyPath}.json`)\n .then(response => response.json())\n .then(data => {\n // Check if survey is already completed\n if (data.survey_completed) {\n return;\n }\n\n // Load any existing answers\n if (data.answers) {\n Object.keys(data.answers).forEach(key => {\n if (!key.endsWith('_skipped') && data.answers[key]) {\n this.surveyAnswers[key] = data.answers[key];\n }\n });\n }\n\n // Check if we should show the modal\n const mandatoryQuestions = ['primary_role', 'other_roles', 'primary_goal', 'how_did_you_find_us' /*, 'main_objection' */];\n const mandatoryComplete = mandatoryQuestions.every(q =>\n this.surveyAnswers[q] || data.answers?.[`${q}_skipped`]\n );\n\n if (!mandatoryComplete) {\n this.showModal();\n this.displayCurrentQuestion();\n }\n });\n }\n\n showModal() {\n document.getElementById('profile-survey-modal').classList.remove('hidden');\n document.body.style.overflow = 'hidden'; // Prevent body scroll\n }\n\n hideModal() {\n document.getElementById('profile-survey-modal').classList.add('hidden');\n document.body.style.overflow = ''; // Restore body scroll\n }\n\n closeModal() {\n // Save current state to localStorage\n localStorage.setItem('profileSurveyClosed', 'true');\n this.hideModal();\n }\n\n displayCurrentQuestion() {\n if (this.currentQuestionIndex >= this.questionOrder.length) {\n this.completeSurvey();\n return;\n }\n\n const questionKey = this.questionOrder[this.currentQuestionIndex];\n const question = this.surveyQuestions[questionKey];\n const container = document.getElementById('survey-question-container');\n\n // Update progress bar and text\n const progress = ((this.currentQuestionIndex + 1) / this.questionOrder.length) * 100;\n document.getElementById('survey-progress-bar').style.width = progress + '%';\n document.getElementById('survey-progress-text').textContent = `Question ${this.currentQuestionIndex + 1} of ${this.questionOrder.length}`;\n\n let html = `\n
Please specify:
\n \n \nNo sections created yet. Create your first section to get started.
';\n return;\n }\n\n container.innerHTML = this.sections.map(section => this.createSectionHTML(section)).join('');\n\n // Setup drag and drop for sections\n this.setupSectionDragAndDrop();\n }\n\n createSectionHTML(section) {\n const sectionMonitors = this.getMonitorsForSection(section.id);\n\n return `\nNo monitors in this section
'\n }\nAll monitors are assigned to sections.
';\n return;\n }\n\n container.innerHTML = monitors.map(monitor => this.createUnsectionedMonitorHTML(monitor)).join('');\n }\n\n createUnsectionedMonitorHTML(monitor) {\n const eyeIcon = monitor.visible ?\n '